[sundials] 01/01: Imported Upstream version 2.7.0

Dima Kogan dima at secretsauce.net
Sun Mar 5 06:01:50 UTC 2017


This is an automated email from the git hooks/post-receive script.

dkogan pushed a commit to annotated tag upstream/2.7.0
in repository sundials.

commit f1b40d9385bbe20bd740da5ca84fbd99024cdbb4
Author: Dima Kogan <Dmitriy.Kogan at jpl.nasa.gov>
Date:   Tue Oct 4 20:37:27 2016 -0700

    Imported Upstream version 2.7.0
---
 CMakeLists.txt                                     |  1194 +
 INSTALL_GUIDE.pdf                                  |   Bin 0 -> 352486 bytes
 LICENSE                                            |    67 +
 README                                             |    60 +
 config/FindHypre.cmake                             |    47 +
 config/FindKLU.cmake                               |    73 +
 config/FindMPI.cmake                               |    36 +
 config/FindPETSc.cmake                             |    48 +
 config/FindSUPERLUMT.cmake                         |    85 +
 config/SundialsAddTest.cmake                       |    93 +
 config/SundialsCXX.cmake                           |    61 +
 config/SundialsFortran.cmake                       |   179 +
 config/SundialsFortran90.cmake                     |    72 +
 config/SundialsHypre.cmake                         |    79 +
 config/SundialsKLU.cmake                           |    73 +
 config/SundialsLapack.cmake                        |    81 +
 config/SundialsMPIC.cmake                          |   190 +
 config/SundialsMPICXX.cmake                        |   120 +
 config/SundialsMPIF.cmake                          |   110 +
 config/SundialsMPIF90.cmake                        |   105 +
 config/SundialsPETSc.cmake                         |    75 +
 config/SundialsSuperLUMT.cmake                     |    71 +
 doc/arkode/ark_examples.pdf                        |   Bin 0 -> 1442798 bytes
 doc/arkode/ark_guide.pdf                           |   Bin 0 -> 2999400 bytes
 doc/cvode/cv_examples.pdf                          |   Bin 0 -> 270896 bytes
 doc/cvode/cv_guide.pdf                             | 23373 +++++++++++++
 doc/cvodes/cvs_examples.pdf                        |   Bin 0 -> 638475 bytes
 doc/cvodes/cvs_guide.pdf                           | 34146 +++++++++++++++++++
 doc/ida/ida_examples.pdf                           |   Bin 0 -> 243372 bytes
 doc/ida/ida_guide.pdf                              | 22346 ++++++++++++
 doc/idas/idas_examples.pdf                         |   Bin 0 -> 208851 bytes
 doc/idas/idas_guide.pdf                            | 33222 ++++++++++++++++++
 doc/kinsol/kin_examples.pdf                        |   Bin 0 -> 191449 bytes
 doc/kinsol/kin_guide.pdf                           | 20321 +++++++++++
 examples/arkode/CXX_parallel/CMakeLists.txt        |   141 +
 examples/arkode/CXX_parallel/README                |    55 +
 examples/arkode/CXX_parallel/ark_heat2D.cpp        |   813 +
 examples/arkode/CXX_parallel/ark_heat2D.out        |    49 +
 examples/arkode/CXX_parallel/plot_heat2D.py        |   142 +
 examples/arkode/CXX_serial/CMakeLists.txt          |   149 +
 examples/arkode/CXX_serial/README                  |    49 +
 examples/arkode/CXX_serial/ark_analytic_sys.cpp    |   352 +
 examples/arkode/CXX_serial/ark_analytic_sys.out    |    30 +
 examples/arkode/CXX_serial/plot_sol.py             |    62 +
 examples/arkode/C_openmp/CMakeLists.txt            |   133 +
 examples/arkode/C_openmp/README                    |    55 +
 examples/arkode/C_openmp/ark_brusselator1D_omp.c   |   514 +
 examples/arkode/C_openmp/ark_brusselator1D_omp.out |   122 +
 examples/arkode/C_openmp/plot_brusselator1D.py     |    73 +
 examples/arkode/C_parallel/CMakeLists.txt          |   144 +
 examples/arkode/C_parallel/README                  |    52 +
 examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.c |   843 +
 .../arkode/C_parallel/ark_diurnal_kry_bbd_p.out    |   140 +
 examples/arkode/C_parallel/ark_diurnal_kry_p.c     |   956 +
 examples/arkode/C_parallel/ark_diurnal_kry_p.out   |    63 +
 examples/arkode/C_parhyp/CMakeLists.txt            |   146 +
 examples/arkode/C_parhyp/README                    |    50 +
 examples/arkode/C_parhyp/ark_diurnal_kry_ph.c      |  1009 +
 examples/arkode/C_parhyp/ark_diurnal_kry_ph.out    |    63 +
 examples/arkode/C_serial/CMakeLists.txt            |   218 +
 examples/arkode/C_serial/README                    |    62 +
 examples/arkode/C_serial/ark_KrylovDemo_prec.c     |  1155 +
 examples/arkode/C_serial/ark_KrylovDemo_prec.out   |   649 +
 examples/arkode/C_serial/ark_analytic.c            |   249 +
 examples/arkode/C_serial/ark_analytic.out          |    30 +
 examples/arkode/C_serial/ark_analytic_nonlin.c     |   190 +
 examples/arkode/C_serial/ark_analytic_nonlin.out   |    24 +
 examples/arkode/C_serial/ark_brusselator.c         |   322 +
 examples/arkode/C_serial/ark_brusselator.out       |    30 +
 examples/arkode/C_serial/ark_brusselator1D.c       |   478 +
 examples/arkode/C_serial/ark_brusselator1D.out     |   121 +
 .../arkode/C_serial/ark_brusselator1D_FEM_slu.c    |  1352 +
 .../arkode/C_serial/ark_brusselator1D_FEM_slu.out  |   121 +
 examples/arkode/C_serial/ark_brusselator1D_klu.c   |   630 +
 examples/arkode/C_serial/ark_brusselator1D_klu.out |    29 +
 examples/arkode/C_serial/ark_brusselator_fp.c      |   294 +
 examples/arkode/C_serial/ark_brusselator_fp.out    |    27 +
 examples/arkode/C_serial/ark_heat1D.c              |   320 +
 examples/arkode/C_serial/ark_heat1D.out            |    29 +
 examples/arkode/C_serial/ark_heat1D_adapt.c        |   514 +
 examples/arkode/C_serial/ark_heat1D_adapt.out      |   107 +
 examples/arkode/C_serial/ark_robertson.c           |   280 +
 examples/arkode/C_serial/ark_robertson.out         |   117 +
 examples/arkode/C_serial/ark_robertson_root.c      |   319 +
 examples/arkode/C_serial/ark_robertson_root.out    |    32 +
 examples/arkode/C_serial/bruss_plots.m             |    75 +
 examples/arkode/C_serial/plot_brusselator1D.py     |    73 +
 examples/arkode/C_serial/plot_brusselator1D_FEM.py |    80 +
 examples/arkode/C_serial/plot_heat1D.py            |    61 +
 examples/arkode/C_serial/plot_heat1D_adapt.py      |    88 +
 examples/arkode/C_serial/plot_sol.py               |    62 +
 examples/arkode/C_serial/plot_sol_log.py           |    62 +
 examples/arkode/F77_parallel/CMakeLists.txt        |   154 +
 examples/arkode/F77_parallel/README                |    50 +
 examples/arkode/F77_parallel/fark_diag_kry_bbd_p.f |   358 +
 .../arkode/F77_parallel/fark_diag_kry_bbd_p.out    |    87 +
 examples/arkode/F77_parallel/fark_diag_non_p.f     |   238 +
 examples/arkode/F77_parallel/fark_diag_non_p.out   |    34 +
 examples/arkode/F77_serial/CMakeLists.txt          |   157 +
 examples/arkode/F77_serial/README                  |    50 +
 examples/arkode/F77_serial/fark_diurnal_kry_bp.f   |   403 +
 examples/arkode/F77_serial/fark_diurnal_kry_bp.out |    73 +
 examples/arkode/F77_serial/fark_roberts_dnsL.f     |   307 +
 examples/arkode/F77_serial/fark_roberts_dnsL.out   |    34 +
 examples/arkode/F90_parallel/CMakeLists.txt        |   149 +
 examples/arkode/F90_parallel/README                |    55 +
 examples/arkode/F90_parallel/fark_heat2D.f90       |   879 +
 examples/arkode/F90_parallel/fark_heat2D.out       |    49 +
 examples/arkode/F90_parallel/plot_heat2D.py        |   141 +
 examples/arkode/F90_serial/CMakeLists.txt          |   185 +
 examples/arkode/F90_serial/README                  |    51 +
 examples/arkode/F90_serial/ark_bruss.f90           |   299 +
 examples/arkode/F90_serial/ark_bruss.out           |    25 +
 examples/arkode/F90_serial/ark_bruss1D_FEM_klu.f90 |  1134 +
 examples/arkode/F90_serial/ark_bruss1D_FEM_klu.out |    56 +
 .../arkode/F90_serial/plot_brusselator1D_FEM.py    |    80 +
 examples/arkode/F90_serial/plot_sol.py             |    62 +
 examples/cvode/C_openmp/CMakeLists.txt             |   128 +
 examples/cvode/C_openmp/README                     |    49 +
 examples/cvode/C_openmp/cvAdvDiff_bnd_omp.c        |   458 +
 examples/cvode/C_openmp/cvAdvDiff_bnd_omp.out      |    23 +
 examples/cvode/fcmix_parallel/CMakeLists.txt       |   145 +
 examples/cvode/fcmix_parallel/README               |    51 +
 examples/cvode/fcmix_parallel/fcvDiag_kry_bbd_p.f  |   310 +
 .../cvode/fcmix_parallel/fcvDiag_kry_bbd_p.out     |    76 +
 examples/cvode/fcmix_parallel/fcvDiag_kry_p.f      |   345 +
 examples/cvode/fcmix_parallel/fcvDiag_kry_p.out    |    65 +
 examples/cvode/fcmix_parallel/fcvDiag_non_p.f      |   190 +
 examples/cvode/fcmix_parallel/fcvDiag_non_p.out    |    31 +
 examples/cvode/fcmix_serial/CMakeLists.txt         |   194 +
 examples/cvode/fcmix_serial/README                 |    53 +
 examples/cvode/fcmix_serial/fcvAdvDiff_bnd.f       |   287 +
 examples/cvode/fcmix_serial/fcvAdvDiff_bnd.out     |    24 +
 examples/cvode/fcmix_serial/fcvDiurnal_kry.f       |  1006 +
 examples/cvode/fcmix_serial/fcvDiurnal_kry.out     |    63 +
 examples/cvode/fcmix_serial/fcvDiurnal_kry_bp.f    |   352 +
 examples/cvode/fcmix_serial/fcvDiurnal_kry_bp.out  |    68 +
 examples/cvode/fcmix_serial/fcvRoberts_dns.f       |   233 +
 examples/cvode/fcmix_serial/fcvRoberts_dns.out     |    32 +
 examples/cvode/fcmix_serial/fcvRoberts_dnsL.f      |   239 +
 examples/cvode/fcmix_serial/fcvRoberts_dnsL.out    |    32 +
 examples/cvode/fcmix_serial/fcvRoberts_klu.f       |   324 +
 examples/cvode/fcmix_serial/fcvRoberts_klu.out     |    32 +
 examples/cvode/fcmix_serial/fcvRoberts_sps.f       |   306 +
 examples/cvode/fcmix_serial/fcvRoberts_sps.out     |    32 +
 examples/cvode/parallel/CMakeLists.txt             |   139 +
 examples/cvode/parallel/README                     |    52 +
 examples/cvode/parallel/cvAdvDiff_diag_p.c         |   367 +
 examples/cvode/parallel/cvAdvDiff_diag_p.out       |    23 +
 examples/cvode/parallel/cvAdvDiff_non_p.c          |   362 +
 examples/cvode/parallel/cvAdvDiff_non_p.out        |    21 +
 examples/cvode/parallel/cvDiurnal_kry_bbd_p.c      |   891 +
 examples/cvode/parallel/cvDiurnal_kry_bbd_p.out    |   140 +
 examples/cvode/parallel/cvDiurnal_kry_p.c          |   975 +
 examples/cvode/parallel/cvDiurnal_kry_p.out        |    63 +
 examples/cvode/parhyp/CMakeLists.txt               |   140 +
 examples/cvode/parhyp/README                       |    52 +
 examples/cvode/parhyp/cvAdvDiff_non_ph.c           |   396 +
 examples/cvode/parhyp/cvAdvDiff_non_ph.out         |    21 +
 examples/cvode/serial/CMakeLists.txt               |   194 +
 examples/cvode/serial/README                       |    61 +
 examples/cvode/serial/cvAdvDiff_bnd.c              |   426 +
 examples/cvode/serial/cvAdvDiff_bnd.out            |    22 +
 examples/cvode/serial/cvAdvDiff_bndL.c             |   421 +
 examples/cvode/serial/cvAdvDiff_bndL.out           |    22 +
 examples/cvode/serial/cvDirectDemo_ls.c            |   789 +
 examples/cvode/serial/cvDirectDemo_ls.out          |   500 +
 examples/cvode/serial/cvDiurnal_kry.c              |   807 +
 examples/cvode/serial/cvDiurnal_kry.out            |    63 +
 examples/cvode/serial/cvDiurnal_kry_bp.c           |   533 +
 examples/cvode/serial/cvDiurnal_kry_bp.out         |   138 +
 examples/cvode/serial/cvKrylovDemo_ls.c            |   730 +
 examples/cvode/serial/cvKrylovDemo_ls.out          |   202 +
 examples/cvode/serial/cvKrylovDemo_prec.c          |  1142 +
 examples/cvode/serial/cvKrylovDemo_prec.out        |   645 +
 examples/cvode/serial/cvRoberts_dns.c              |   360 +
 examples/cvode/serial/cvRoberts_dns.out            |    24 +
 examples/cvode/serial/cvRoberts_dnsL.c             |   364 +
 examples/cvode/serial/cvRoberts_dnsL.out           |    24 +
 examples/cvode/serial/cvRoberts_dns_uw.c           |   377 +
 examples/cvode/serial/cvRoberts_dns_uw.out         |    24 +
 examples/cvode/serial/cvRoberts_klu.c              |   382 +
 examples/cvode/serial/cvRoberts_klu.out            |    24 +
 examples/cvode/serial/cvRoberts_sps.c              |   378 +
 examples/cvode/serial/cvRoberts_sps.out            |    24 +
 examples/cvodes/C_openmp/CMakeLists.txt            |   128 +
 examples/cvodes/C_openmp/README                    |    49 +
 examples/cvodes/C_openmp/cvsAdvDiff_bnd_omp.c      |   458 +
 examples/cvodes/C_openmp/cvsAdvDiff_bnd_omp.out    |    23 +
 examples/cvodes/parallel/CMakeLists.txt            |   164 +
 examples/cvodes/parallel/README                    |    68 +
 examples/cvodes/parallel/cvsAdvDiff_ASAp_non_p.c   |   696 +
 examples/cvodes/parallel/cvsAdvDiff_ASAp_non_p.out |    27 +
 examples/cvodes/parallel/cvsAdvDiff_FSA_non_p.c    |   612 +
 examples/cvodes/parallel/cvsAdvDiff_FSA_non_p.out  |    71 +
 examples/cvodes/parallel/cvsAdvDiff_non_p.c        |   362 +
 examples/cvodes/parallel/cvsAdvDiff_non_p.out      |    21 +
 .../cvodes/parallel/cvsAtmDisp_ASAi_kry_bbd_p.c    |  1292 +
 .../cvodes/parallel/cvsAtmDisp_ASAi_kry_bbd_p.out  |    36 +
 examples/cvodes/parallel/cvsDiurnal_FSA_kry_p.c    |  1286 +
 examples/cvodes/parallel/cvsDiurnal_FSA_kry_p.out  |   139 +
 examples/cvodes/parallel/cvsDiurnal_kry_bbd_p.c    |   891 +
 examples/cvodes/parallel/cvsDiurnal_kry_bbd_p.out  |   140 +
 examples/cvodes/parallel/cvsDiurnal_kry_p.c        |   975 +
 examples/cvodes/parallel/cvsDiurnal_kry_p.out      |    63 +
 examples/cvodes/serial/CMakeLists.txt              |   273 +
 examples/cvodes/serial/README                      |    79 +
 examples/cvodes/serial/cvsAdvDiff_ASAi_bnd.c       |   559 +
 examples/cvodes/serial/cvsAdvDiff_ASAi_bnd.out     |    18 +
 examples/cvodes/serial/cvsAdvDiff_FSA_non.c        |   524 +
 examples/cvodes/serial/cvsAdvDiff_FSA_non.out      |    69 +
 examples/cvodes/serial/cvsAdvDiff_bnd.c            |   424 +
 examples/cvodes/serial/cvsAdvDiff_bnd.out          |    22 +
 examples/cvodes/serial/cvsAdvDiff_bndL.c           |   421 +
 examples/cvodes/serial/cvsAdvDiff_bndL.out         |    22 +
 examples/cvodes/serial/cvsDirectDemo_ls.c          |   790 +
 examples/cvodes/serial/cvsDirectDemo_ls.out        |   502 +
 examples/cvodes/serial/cvsDiurnal_FSA_kry.c        |   928 +
 examples/cvodes/serial/cvsDiurnal_FSA_kry.out      |   142 +
 examples/cvodes/serial/cvsDiurnal_kry.c            |   807 +
 examples/cvodes/serial/cvsDiurnal_kry.out          |    63 +
 examples/cvodes/serial/cvsDiurnal_kry_bp.c         |   530 +
 examples/cvodes/serial/cvsDiurnal_kry_bp.out       |   138 +
 examples/cvodes/serial/cvsFoodWeb_ASAi_kry.c       |  1363 +
 examples/cvodes/serial/cvsFoodWeb_ASAi_kry.out     |    51 +
 examples/cvodes/serial/cvsFoodWeb_ASAp_kry.c       |  1359 +
 examples/cvodes/serial/cvsFoodWeb_ASAp_kry.out     |    51 +
 examples/cvodes/serial/cvsHessian_ASA_FSA.c        |   784 +
 examples/cvodes/serial/cvsHessian_ASA_FSA.out      |   100 +
 examples/cvodes/serial/cvsKrylovDemo_ls.c          |   729 +
 examples/cvodes/serial/cvsKrylovDemo_ls.out        |   202 +
 examples/cvodes/serial/cvsKrylovDemo_prec.c        |  1141 +
 examples/cvodes/serial/cvsKrylovDemo_prec.out      |   645 +
 examples/cvodes/serial/cvsRoberts_ASAi_dns.c       |   753 +
 examples/cvodes/serial/cvsRoberts_ASAi_dns.out     |    60 +
 examples/cvodes/serial/cvsRoberts_ASAi_klu.c       |   825 +
 examples/cvodes/serial/cvsRoberts_ASAi_klu.out     |    60 +
 examples/cvodes/serial/cvsRoberts_ASAi_sps.c       |   826 +
 examples/cvodes/serial/cvsRoberts_ASAi_sps.out     |    60 +
 examples/cvodes/serial/cvsRoberts_FSA_dns.c        |   626 +
 examples/cvodes/serial/cvsRoberts_FSA_dns.out      |    93 +
 examples/cvodes/serial/cvsRoberts_FSA_klu.c        |   672 +
 examples/cvodes/serial/cvsRoberts_FSA_klu.out      |    93 +
 examples/cvodes/serial/cvsRoberts_FSA_sps.c        |   673 +
 examples/cvodes/serial/cvsRoberts_FSA_sps.out      |    93 +
 examples/cvodes/serial/cvsRoberts_dns.c            |   359 +
 examples/cvodes/serial/cvsRoberts_dns.out          |    24 +
 examples/cvodes/serial/cvsRoberts_dnsL.c           |   363 +
 examples/cvodes/serial/cvsRoberts_dnsL.out         |    24 +
 examples/cvodes/serial/cvsRoberts_dns_uw.c         |   377 +
 examples/cvodes/serial/cvsRoberts_dns_uw.out       |    24 +
 examples/cvodes/serial/cvsRoberts_klu.c            |   382 +
 examples/cvodes/serial/cvsRoberts_klu.out          |    24 +
 examples/cvodes/serial/cvsRoberts_sps.c            |   378 +
 examples/cvodes/serial/cvsRoberts_sps.out          |    24 +
 examples/ida/C_openmp/CMakeLists.txt               |   143 +
 examples/ida/C_openmp/README                       |    50 +
 examples/ida/C_openmp/idaFoodWeb_bnd_omp.c         |   705 +
 examples/ida/C_openmp/idaFoodWeb_bnd_omp.out       |    44 +
 examples/ida/C_openmp/idaFoodWeb_kry_omp.c         |   841 +
 examples/ida/C_openmp/idaFoodWeb_kry_omp.out       |    44 +
 examples/ida/fcmix_openmp/CMakeLists.txt           |   150 +
 examples/ida/fcmix_openmp/README                   |    49 +
 examples/ida/fcmix_openmp/fidaRoberts_dns_openmp.f |   271 +
 .../ida/fcmix_openmp/fidaRoberts_dns_openmp.out    |    34 +
 examples/ida/fcmix_parallel/CMakeLists.txt         |   143 +
 examples/ida/fcmix_parallel/README                 |    49 +
 examples/ida/fcmix_parallel/fidaHeat2D_kry_bbd_p.f |   827 +
 .../ida/fcmix_parallel/fidaHeat2D_kry_bbd_p.out    |    65 +
 examples/ida/fcmix_pthreads/CMakeLists.txt         |   146 +
 examples/ida/fcmix_pthreads/README                 |    50 +
 .../ida/fcmix_pthreads/fidaRoberts_dns_pthreads.f  |   271 +
 .../fcmix_pthreads/fidaRoberts_dns_pthreads.out    |    34 +
 examples/ida/fcmix_serial/CMakeLists.txt           |   147 +
 examples/ida/fcmix_serial/README                   |    49 +
 examples/ida/fcmix_serial/fidaRoberts_dns.f        |   267 +
 examples/ida/fcmix_serial/fidaRoberts_dns.out      |    34 +
 examples/ida/parallel/CMakeLists.txt               |   140 +
 examples/ida/parallel/README                       |    52 +
 examples/ida/parallel/idaFoodWeb_kry_bbd_p.c       |  1091 +
 examples/ida/parallel/idaFoodWeb_kry_bbd_p.out     |    58 +
 examples/ida/parallel/idaFoodWeb_kry_p.c           |  1231 +
 examples/ida/parallel/idaFoodWeb_kry_p.out         |    50 +
 examples/ida/parallel/idaHeat2D_kry_bbd_p.c        |   840 +
 examples/ida/parallel/idaHeat2D_kry_bbd_p.out      |    58 +
 examples/ida/parallel/idaHeat2D_kry_p.c            |   892 +
 examples/ida/parallel/idaHeat2D_kry_p.out          |    32 +
 examples/ida/petsc/CMakeLists.txt                  |   134 +
 examples/ida/petsc/README                          |    50 +
 examples/ida/petsc/idaHeat2D_kry_petsc.c           |   730 +
 examples/ida/petsc/idaHeat2D_kry_petsc.out         |    33 +
 examples/ida/serial/CMakeLists.txt                 |   199 +
 examples/ida/serial/README                         |    57 +
 examples/ida/serial/idaFoodWeb_bnd.c               |   673 +
 examples/ida/serial/idaFoodWeb_bnd.out             |    42 +
 examples/ida/serial/idaFoodWeb_kry.c               |   808 +
 examples/ida/serial/idaFoodWeb_kry.out             |    42 +
 examples/ida/serial/idaHeat2D_bnd.c                |   407 +
 examples/ida/serial/idaHeat2D_bnd.out              |    30 +
 examples/ida/serial/idaHeat2D_klu.c                |   747 +
 examples/ida/serial/idaHeat2D_klu.out              |    30 +
 examples/ida/serial/idaHeat2D_kry.c                |   550 +
 examples/ida/serial/idaHeat2D_kry.out              |    55 +
 examples/ida/serial/idaKrylovDemo_ls.c             |   582 +
 examples/ida/serial/idaKrylovDemo_ls.out           |   102 +
 examples/ida/serial/idaRoberts_dns.c               |   404 +
 examples/ida/serial/idaRoberts_dns.out             |    38 +
 examples/ida/serial/idaRoberts_klu.c               |   488 +
 examples/ida/serial/idaRoberts_klu.out             |    38 +
 examples/ida/serial/idaRoberts_sps.c               |   421 +
 examples/ida/serial/idaRoberts_sps.out             |    38 +
 examples/ida/serial/idaSlCrank_dns.c               |   350 +
 examples/ida/serial/idaSlCrank_dns.out             |    57 +
 examples/idas/C_openmp/CMakeLists.txt              |   129 +
 examples/idas/C_openmp/README                      |    50 +
 examples/idas/C_openmp/idasFoodWeb_bnd_omp.c       |   705 +
 examples/idas/C_openmp/idasFoodWeb_bnd_omp.out     |    44 +
 examples/idas/C_openmp/idasFoodWeb_kry_omp.c       |   841 +
 examples/idas/C_openmp/idasFoodWeb_kry_omp.out     |    44 +
 examples/idas/parallel/CMakeLists.txt              |   157 +
 examples/idas/parallel/README                      |    56 +
 examples/idas/parallel/idasBruss_ASAp_kry_bbd_p.c  |  1484 +
 .../idas/parallel/idasBruss_ASAp_kry_bbd_p.out     |    50 +
 examples/idas/parallel/idasBruss_FSA_kry_bbd_p.c   |  1169 +
 examples/idas/parallel/idasBruss_FSA_kry_bbd_p.out |    60 +
 examples/idas/parallel/idasBruss_kry_bbd_p.c       |  1081 +
 examples/idas/parallel/idasBruss_kry_bbd_p.out     |    51 +
 examples/idas/parallel/idasFoodWeb_kry_bbd_p.c     |  1090 +
 examples/idas/parallel/idasFoodWeb_kry_bbd_p.out   |    51 +
 examples/idas/parallel/idasFoodWeb_kry_p.c         |  1231 +
 examples/idas/parallel/idasFoodWeb_kry_p.out       |    49 +
 examples/idas/parallel/idasHeat2D_FSA_kry_bbd_p.c  |   969 +
 .../idas/parallel/idasHeat2D_FSA_kry_bbd_p.out     |    57 +
 examples/idas/parallel/idasHeat2D_kry_bbd_p.c      |   840 +
 examples/idas/parallel/idasHeat2D_kry_bbd_p.out    |    58 +
 examples/idas/parallel/idasHeat2D_kry_p.c          |   892 +
 examples/idas/parallel/idasHeat2D_kry_p.out        |    32 +
 examples/idas/serial/CMakeLists.txt                |   226 +
 examples/idas/serial/README                        |    63 +
 examples/idas/serial/idasAkzoNob_ASAi_dns.c        |   446 +
 examples/idas/serial/idasAkzoNob_ASAi_dns.out      |    19 +
 examples/idas/serial/idasAkzoNob_dns.c             |   376 +
 examples/idas/serial/idasAkzoNob_dns.out           |    48 +
 examples/idas/serial/idasFoodWeb_bnd.c             |   674 +
 examples/idas/serial/idasFoodWeb_bnd.out           |    42 +
 examples/idas/serial/idasHeat2D_bnd.c              |   407 +
 examples/idas/serial/idasHeat2D_bnd.out            |    30 +
 examples/idas/serial/idasHeat2D_kry.c              |   550 +
 examples/idas/serial/idasHeat2D_kry.out            |    55 +
 examples/idas/serial/idasHessian_ASA_FSA.c         |   741 +
 examples/idas/serial/idasHessian_ASA_FSA.out       |    42 +
 examples/idas/serial/idasKrylovDemo_ls.c           |   581 +
 examples/idas/serial/idasKrylovDemo_ls.out         |   102 +
 examples/idas/serial/idasRoberts_ASAi_dns.c        |   752 +
 examples/idas/serial/idasRoberts_ASAi_dns.out      |    37 +
 examples/idas/serial/idasRoberts_ASAi_klu.c        |   768 +
 examples/idas/serial/idasRoberts_ASAi_klu.out      |    37 +
 examples/idas/serial/idasRoberts_ASAi_sps.c        |   769 +
 examples/idas/serial/idasRoberts_ASAi_sps.out      |    37 +
 examples/idas/serial/idasRoberts_FSA_dns.c         |   789 +
 examples/idas/serial/idasRoberts_FSA_dns.out       |   115 +
 examples/idas/serial/idasRoberts_FSA_klu.c         |   830 +
 examples/idas/serial/idasRoberts_FSA_klu.out       |   113 +
 examples/idas/serial/idasRoberts_FSA_sps.c         |   831 +
 examples/idas/serial/idasRoberts_FSA_sps.out       |   113 +
 examples/idas/serial/idasRoberts_dns.c             |   402 +
 examples/idas/serial/idasRoberts_dns.out           |    38 +
 examples/idas/serial/idasRoberts_klu.c             |   427 +
 examples/idas/serial/idasRoberts_klu.out           |    38 +
 examples/idas/serial/idasRoberts_sps.c             |   421 +
 examples/idas/serial/idasRoberts_sps.out           |    38 +
 examples/idas/serial/idasSlCrank_FSA_dns.c         |   550 +
 examples/idas/serial/idasSlCrank_FSA_dns.out       |    37 +
 examples/idas/serial/idasSlCrank_dns.c             |   433 +
 examples/idas/serial/idasSlCrank_dns.out           |    46 +
 examples/kinsol/C_openmp/CMakeLists.txt            |   128 +
 examples/kinsol/C_openmp/README                    |    49 +
 examples/kinsol/C_openmp/kinFoodWeb_kry_omp.c      |   824 +
 examples/kinsol/C_openmp/kinFoodWeb_kry_omp.out    |    30 +
 examples/kinsol/fcmix_parallel/CMakeLists.txt      |   140 +
 examples/kinsol/fcmix_parallel/README              |    49 +
 examples/kinsol/fcmix_parallel/fkinDiagon_kry_p.f  |   260 +
 .../kinsol/fcmix_parallel/fkinDiagon_kry_p.out     |    24 +
 examples/kinsol/fcmix_serial/CMakeLists.txt        |   144 +
 examples/kinsol/fcmix_serial/README                |    49 +
 examples/kinsol/fcmix_serial/fkinDiagon_kry.f      |   232 +
 examples/kinsol/fcmix_serial/fkinDiagon_kry.out    |    53 +
 examples/kinsol/parallel/CMakeLists.txt            |   133 +
 examples/kinsol/parallel/README                    |    50 +
 examples/kinsol/parallel/kinFoodWeb_kry_bbd_p.c    |  1009 +
 examples/kinsol/parallel/kinFoodWeb_kry_bbd_p.out  |    33 +
 examples/kinsol/parallel/kinFoodWeb_kry_p.c        |  1112 +
 examples/kinsol/parallel/kinFoodWeb_kry_p.out      |    31 +
 examples/kinsol/serial/CMakeLists.txt              |   189 +
 examples/kinsol/serial/README                      |    56 +
 examples/kinsol/serial/kinFerTron_dns.c            |   491 +
 examples/kinsol/serial/kinFerTron_dns.out          |    71 +
 examples/kinsol/serial/kinFerTron_klu.c            |   623 +
 examples/kinsol/serial/kinFerTron_klu.out          |    71 +
 examples/kinsol/serial/kinFoodWeb_kry.c            |   789 +
 examples/kinsol/serial/kinFoodWeb_kry.out          |    29 +
 examples/kinsol/serial/kinKrylovDemo_ls.c          |   900 +
 examples/kinsol/serial/kinKrylovDemo_ls.out        |   137 +
 examples/kinsol/serial/kinLaplace_bnd.c            |   394 +
 examples/kinsol/serial/kinLaplace_bnd.out          |    32 +
 examples/kinsol/serial/kinLaplace_picard_bnd.c     |   432 +
 examples/kinsol/serial/kinLaplace_picard_bnd.out   |    30 +
 examples/kinsol/serial/kinRoberts_fp.c             |   299 +
 examples/kinsol/serial/kinRoberts_fp.out           |    17 +
 examples/kinsol/serial/kinRoboKin_dns.c            |   437 +
 examples/kinsol/serial/kinRoboKin_dns.out          |    32 +
 examples/kinsol/serial/kinRoboKin_slu.c            |   614 +
 examples/kinsol/serial/kinRoboKin_slu.out          |    32 +
 examples/nvector/C_openmp/CMakeLists.txt           |   120 +
 examples/nvector/C_openmp/test_nvector_openmp.c    |   160 +
 examples/nvector/parallel/CMakeLists.txt           |   131 +
 examples/nvector/parallel/test_nvector_mpi.c       |   153 +
 examples/nvector/parhyp/CMakeLists.txt             |   136 +
 examples/nvector/parhyp/test_nvector_parhyp.c      |   315 +
 examples/nvector/petsc/CMakeLists.txt              |   133 +
 examples/nvector/petsc/test_nvector_petsc.c        |   239 +
 examples/nvector/pthreads/CMakeLists.txt           |   124 +
 examples/nvector/pthreads/test_nvector_pthreads.c  |   161 +
 examples/nvector/serial/CMakeLists.txt             |   117 +
 examples/nvector/serial/test_nvector_serial.c      |   153 +
 examples/nvector/test_nvector.c                    |  1842 +
 examples/nvector/test_nvector.h                    |    87 +
 examples/templates/cmakelists_openmp_C_ex.in       |   111 +
 examples/templates/cmakelists_openmp_F77_ex.in     |   107 +
 examples/templates/cmakelists_parallel_CXX_ex.in   |   100 +
 examples/templates/cmakelists_parallel_C_ex.in     |   104 +
 examples/templates/cmakelists_parallel_F77_ex.in   |   102 +
 examples/templates/cmakelists_parallel_F90_ex.in   |    97 +
 examples/templates/cmakelists_parhyp_C_ex.in       |   110 +
 examples/templates/cmakelists_petsc_C_ex.in        |   109 +
 examples/templates/cmakelists_pthreads_C_ex.in     |    85 +
 examples/templates/cmakelists_pthreads_F77_ex.in   |   100 +
 examples/templates/cmakelists_serial_CXX_ex.in     |    93 +
 examples/templates/cmakelists_serial_C_ex.in       |   101 +
 examples/templates/cmakelists_serial_F77_ex.in     |   100 +
 examples/templates/cmakelists_serial_F90_ex.in     |    93 +
 examples/templates/makefile_openmp_C_ex.in         |    83 +
 examples/templates/makefile_openmp_F77_ex.in       |    76 +
 examples/templates/makefile_parallel_CXX_ex.in     |    82 +
 examples/templates/makefile_parallel_C_ex.in       |    87 +
 examples/templates/makefile_parallel_F77_ex.in     |    82 +
 examples/templates/makefile_parallel_F90_ex.in     |    80 +
 examples/templates/makefile_parhyp_C_ex.in         |    90 +
 examples/templates/makefile_petsc_C_ex.in          |    89 +
 examples/templates/makefile_pthreads_C_ex.in       |    81 +
 examples/templates/makefile_pthreads_F77_ex.in     |    76 +
 examples/templates/makefile_serial_CXX_ex.in       |    77 +
 examples/templates/makefile_serial_C_ex.in         |    83 +
 examples/templates/makefile_serial_F77_ex.in       |    76 +
 examples/templates/makefile_serial_F90_ex.in       |    74 +
 include/arkode/arkode.h                            |  1380 +
 include/arkode/arkode_band.h                       |    94 +
 include/arkode/arkode_bandpre.h                    |   149 +
 include/arkode/arkode_bbdpre.h                     |   271 +
 include/arkode/arkode_dense.h                      |    77 +
 include/arkode/arkode_direct.h                     |   373 +
 include/arkode/arkode_klu.h                        |   195 +
 include/arkode/arkode_lapack.h                     |   134 +
 include/arkode/arkode_pcg.h                        |   116 +
 include/arkode/arkode_sparse.h                     |   216 +
 include/arkode/arkode_spbcgs.h                     |   106 +
 include/arkode/arkode_spfgmr.h                     |   115 +
 include/arkode/arkode_spgmr.h                      |   109 +
 include/arkode/arkode_spils.h                      |   529 +
 include/arkode/arkode_sptfqmr.h                    |   104 +
 include/arkode/arkode_superlumt.h                  |   138 +
 include/cvode/cvode.h                              |   794 +
 include/cvode/cvode_band.h                         |    66 +
 include/cvode/cvode_bandpre.h                      |   146 +
 include/cvode/cvode_bbdpre.h                       |   273 +
 include/cvode/cvode_dense.h                        |    59 +
 include/cvode/cvode_diag.h                         |   111 +
 include/cvode/cvode_direct.h                       |   290 +
 include/cvode/cvode_klu.h                          |   111 +
 include/cvode/cvode_lapack.h                       |    91 +
 include/cvode/cvode_sparse.h                       |   182 +
 include/cvode/cvode_spbcgs.h                       |    72 +
 include/cvode/cvode_spgmr.h                        |    74 +
 include/cvode/cvode_spils.h                        |   370 +
 include/cvode/cvode_sptfqmr.h                      |    72 +
 include/cvode/cvode_superlumt.h                    |    84 +
 include/cvodes/cvodes.h                            |  1972 ++
 include/cvodes/cvodes_band.h                       |    78 +
 include/cvodes/cvodes_bandpre.h                    |   185 +
 include/cvodes/cvodes_bbdpre.h                     |   337 +
 include/cvodes/cvodes_dense.h                      |    70 +
 include/cvodes/cvodes_diag.h                       |   146 +
 include/cvodes/cvodes_direct.h                     |   413 +
 include/cvodes/cvodes_klu.h                        |   156 +
 include/cvodes/cvodes_lapack.h                     |   110 +
 include/cvodes/cvodes_sparse.h                     |   255 +
 include/cvodes/cvodes_spbcgs.h                     |   102 +
 include/cvodes/cvodes_spgmr.h                      |   103 +
 include/cvodes/cvodes_spils.h                      |   518 +
 include/cvodes/cvodes_sptfqmr.h                    |   103 +
 include/cvodes/cvodes_superlumt.h                  |   111 +
 include/ida/ida.h                                  |   944 +
 include/ida/ida_band.h                             |    64 +
 include/ida/ida_bbdpre.h                           |   280 +
 include/ida/ida_dense.h                            |    63 +
 include/ida/ida_direct.h                           |   307 +
 include/ida/ida_klu.h                              |   122 +
 include/ida/ida_lapack.h                           |    85 +
 include/ida/ida_sparse.h                           |   268 +
 include/ida/ida_spbcgs.h                           |    64 +
 include/ida/ida_spgmr.h                            |    65 +
 include/ida/ida_spils.h                            |   326 +
 include/ida/ida_sptfqmr.h                          |    64 +
 include/ida/ida_superlumt.h                        |    99 +
 include/idas/idas.h                                |  2106 ++
 include/idas/idas_band.h                           |    86 +
 include/idas/idas_bbdpre.h                         |   333 +
 include/idas/idas_dense.h                          |    75 +
 include/idas/idas_direct.h                         |   422 +
 include/idas/idas_klu.h                            |   157 +
 include/idas/idas_lapack.h                         |   110 +
 include/idas/idas_sparse.h                         |   269 +
 include/idas/idas_spbcgs.h                         |    94 +
 include/idas/idas_spgmr.h                          |    95 +
 include/idas/idas_spils.h                          |   479 +
 include/idas/idas_sptfqmr.h                        |    94 +
 include/idas/idas_superlumt.h                      |   112 +
 include/kinsol/kinsol.h                            |   771 +
 include/kinsol/kinsol_band.h                       |    62 +
 include/kinsol/kinsol_bbdpre.h                     |   238 +
 include/kinsol/kinsol_dense.h                      |    59 +
 include/kinsol/kinsol_direct.h                     |   267 +
 include/kinsol/kinsol_klu.h                        |   111 +
 include/kinsol/kinsol_lapack.h                     |    89 +
 include/kinsol/kinsol_sparse.h                     |   165 +
 include/kinsol/kinsol_spbcgs.h                     |    94 +
 include/kinsol/kinsol_spfgmr.h                     |    90 +
 include/kinsol/kinsol_spgmr.h                      |    91 +
 include/kinsol/kinsol_spils.h                      |   323 +
 include/kinsol/kinsol_sptfqmr.h                    |    95 +
 include/kinsol/kinsol_superlumt.h                  |    87 +
 include/nvector/nvector_openmp.h                   |   289 +
 include/nvector/nvector_parallel.h                 |   343 +
 include/nvector/nvector_parhyp.h                   |   237 +
 include/nvector/nvector_petsc.h                    |   240 +
 include/nvector/nvector_pthreads.h                 |   310 +
 include/nvector/nvector_serial.h                   |   282 +
 include/sundials/sundials_band.h                   |   180 +
 include/sundials/sundials_config.in                |    92 +
 include/sundials/sundials_dense.h                  |   211 +
 include/sundials/sundials_direct.h                 |   341 +
 include/sundials/sundials_fnvector.h               |    47 +
 include/sundials/sundials_iterative.h              |   247 +
 include/sundials/sundials_klu_impl.h               |    57 +
 include/sundials/sundials_lapack.h                 |   131 +
 include/sundials/sundials_math.h                   |   133 +
 include/sundials/sundials_nvector.h                |   403 +
 include/sundials/sundials_pcg.h                    |   156 +
 include/sundials/sundials_sparse.h                 |   237 +
 include/sundials/sundials_spbcgs.h                 |   204 +
 include/sundials/sundials_spfgmr.h                 |   284 +
 include/sundials/sundials_spgmr.h                  |   301 +
 include/sundials/sundials_sptfqmr.h                |   259 +
 include/sundials/sundials_superlumt_impl.h         |    61 +
 include/sundials/sundials_types.h                  |   122 +
 src/arkode/CMakeLists.txt                          |   161 +
 src/arkode/LICENSE                                 |    32 +
 src/arkode/README                                  |    72 +
 src/arkode/arkode.c                                |  6396 ++++
 src/arkode/arkode_band.c                           |   637 +
 src/arkode/arkode_bandpre.c                        |   465 +
 src/arkode/arkode_bandpre_impl.h                   |    72 +
 src/arkode/arkode_bbdpre.c                         |   547 +
 src/arkode/arkode_bbdpre_impl.h                    |    77 +
 src/arkode/arkode_butcher.c                        |  1038 +
 src/arkode/arkode_dense.c                          |   613 +
 src/arkode/arkode_direct.c                         |   617 +
 src/arkode/arkode_direct_impl.h                    |   141 +
 src/arkode/arkode_impl.h                           |   805 +
 src/arkode/arkode_io.c                             |  2944 ++
 src/arkode/arkode_klu.c                            |  1275 +
 src/arkode/arkode_lapack.c                         |  1270 +
 src/arkode/arkode_pcg.c                            |   772 +
 src/arkode/arkode_sparse.c                         |   268 +
 src/arkode/arkode_sparse_impl.h                    |   127 +
 src/arkode/arkode_spbcgs.c                         |   766 +
 src/arkode/arkode_spfgmr.c                         |   777 +
 src/arkode/arkode_spgmr.c                          |   779 +
 src/arkode/arkode_spils.c                          |  1191 +
 src/arkode/arkode_spils_impl.h                     |   192 +
 src/arkode/arkode_sptfqmr.c                        |   767 +
 src/arkode/arkode_superlumt.c                      |  1097 +
 src/arkode/fcmix/CMakeLists.txt                    |    76 +
 src/arkode/fcmix/farkadapt.c                       |    82 +
 src/arkode/fcmix/farkband.c                        |    97 +
 src/arkode/fcmix/farkbandmass.c                    |    84 +
 src/arkode/fcmix/farkbbd.c                         |   129 +
 src/arkode/fcmix/farkbbd.h                         |   645 +
 src/arkode/fcmix/farkbp.c                          |    55 +
 src/arkode/fcmix/farkbp.h                          |   491 +
 src/arkode/fcmix/farkdense.c                       |    90 +
 src/arkode/fcmix/farkdensemass.c                   |    78 +
 src/arkode/fcmix/farkewt.c                         |    76 +
 src/arkode/fcmix/farkexpstab.c                     |    77 +
 src/arkode/fcmix/farkjtimes.c                      |    90 +
 src/arkode/fcmix/farkklu.c                         |    66 +
 src/arkode/fcmix/farklapack.c                      |    71 +
 src/arkode/fcmix/farklapband.c                     |   103 +
 src/arkode/fcmix/farklapbandmass.c                 |    84 +
 src/arkode/fcmix/farklapdense.c                    |    93 +
 src/arkode/fcmix/farklapdensemass.c                |    80 +
 src/arkode/fcmix/farkmasspreco.c                   |   110 +
 src/arkode/fcmix/farkmtimes.c                      |    77 +
 src/arkode/fcmix/farkode.c                         |  1189 +
 src/arkode/fcmix/farkode.h                         |  2308 ++
 src/arkode/fcmix/farkpreco.c                       |   124 +
 src/arkode/fcmix/farkroot.c                        |   100 +
 src/arkode/fcmix/farkroot.h                        |   153 +
 src/arkode/fcmix/farksparse.c                      |    86 +
 src/arkode/fcmix/farksparsemass.c                  |    79 +
 src/arkode/fcmix/farksuperlumt.c                   |    53 +
 src/cvode/CMakeLists.txt                           |   168 +
 src/cvode/LICENSE                                  |    60 +
 src/cvode/README                                   |    93 +
 src/cvode/cvode.c                                  |  4187 +++
 src/cvode/cvode_band.c                             |   368 +
 src/cvode/cvode_bandpre.c                          |   490 +
 src/cvode/cvode_bandpre_impl.h                     |    81 +
 src/cvode/cvode_bbdpre.c                           |   562 +
 src/cvode/cvode_bbdpre_impl.h                      |    87 +
 src/cvode/cvode_dense.c                            |   352 +
 src/cvode/cvode_diag.c                             |   444 +
 src/cvode/cvode_diag_impl.h                        |    71 +
 src/cvode/cvode_direct.c                           |   475 +
 src/cvode/cvode_direct_impl.h                      |   118 +
 src/cvode/cvode_impl.h                             |   520 +
 src/cvode/cvode_io.c                               |  1134 +
 src/cvode/cvode_klu.c                              |   612 +
 src/cvode/cvode_lapack.c                           |   660 +
 src/cvode/cvode_sparse.c                           |   175 +
 src/cvode/cvode_sparse_impl.h                      |   109 +
 src/cvode/cvode_spbcgs.c                           |   467 +
 src/cvode/cvode_spgmr.c                            |   471 +
 src/cvode/cvode_spils.c                            |   715 +
 src/cvode/cvode_spils_impl.h                       |   151 +
 src/cvode/cvode_sptfqmr.c                          |   465 +
 src/cvode/cvode_superlumt.c                        |   554 +
 src/cvode/fcmix/CMakeLists.txt                     |    63 +
 src/cvode/fcmix/fcvband.c                          |    99 +
 src/cvode/fcmix/fcvbbd.c                           |   146 +
 src/cvode/fcmix/fcvbbd.h                           |   325 +
 src/cvode/fcmix/fcvbp.c                            |    59 +
 src/cvode/fcmix/fcvbp.h                            |   248 +
 src/cvode/fcmix/fcvdense.c                         |    95 +
 src/cvode/fcmix/fcvewt.c                           |    76 +
 src/cvode/fcmix/fcvjtimes.c                        |    97 +
 src/cvode/fcmix/fcvklu.c                           |    52 +
 src/cvode/fcmix/fcvlapack.c                        |    57 +
 src/cvode/fcmix/fcvlapband.c                       |   103 +
 src/cvode/fcmix/fcvlapdense.c                      |    97 +
 src/cvode/fcmix/fcvode.c                           |   618 +
 src/cvode/fcmix/fcvode.h                           |   941 +
 src/cvode/fcmix/fcvpreco.c                         |   138 +
 src/cvode/fcmix/fcvroot.c                          |    88 +
 src/cvode/fcmix/fcvroot.h                          |   144 +
 src/cvode/fcmix/fcvsparse.c                        |    81 +
 src/cvode/fcmix/fcvsuperlumt.c                     |    42 +
 src/cvodes/CMakeLists.txt                          |   155 +
 src/cvodes/LICENSE                                 |    60 +
 src/cvodes/README                                  |    89 +
 src/cvodes/cvodea.c                                |  2987 ++
 src/cvodes/cvodea_io.c                             |   721 +
 src/cvodes/cvodes.c                                |  8991 +++++
 src/cvodes/cvodes_band.c                           |   470 +
 src/cvodes/cvodes_bandpre.c                        |   557 +
 src/cvodes/cvodes_bandpre_impl.h                   |    82 +
 src/cvodes/cvodes_bbdpre.c                         |   798 +
 src/cvodes/cvodes_bbdpre_impl.h                    |   107 +
 src/cvodes/cvodes_dense.c                          |   455 +
 src/cvodes/cvodes_diag.c                           |   515 +
 src/cvodes/cvodes_diag_impl.h                      |    72 +
 src/cvodes/cvodes_direct.c                         |   936 +
 src/cvodes/cvodes_direct_impl.h                    |   164 +
 src/cvodes/cvodes_impl.h                           |  1094 +
 src/cvodes/cvodes_io.c                             |  1882 +
 src/cvodes/cvodes_klu.c                            |   818 +
 src/cvodes/cvodes_lapack.c                         |   839 +
 src/cvodes/cvodes_sparse.c                         |   407 +
 src/cvodes/cvodes_sparse_impl.h                    |   137 +
 src/cvodes/cvodes_spbcgs.c                         |   583 +
 src/cvodes/cvodes_spgmr.c                          |   589 +
 src/cvodes/cvodes_spils.c                          |  1467 +
 src/cvodes/cvodes_spils_impl.h                     |   196 +
 src/cvodes/cvodes_sptfqmr.c                        |   578 +
 src/cvodes/cvodes_superlumt.c                      |   705 +
 src/ida/CMakeLists.txt                             |   158 +
 src/ida/LICENSE                                    |    59 +
 src/ida/README                                     |   100 +
 src/ida/fcmix/CMakeLists.txt                       |    61 +
 src/ida/fcmix/fida.c                               |   771 +
 src/ida/fcmix/fida.h                               |   915 +
 src/ida/fcmix/fidaband.c                           |   122 +
 src/ida/fcmix/fidabbd.c                            |   155 +
 src/ida/fcmix/fidabbd.h                            |   340 +
 src/ida/fcmix/fidadense.c                          |   120 +
 src/ida/fcmix/fidaewt.c                            |    92 +
 src/ida/fcmix/fidajtimes.c                         |   121 +
 src/ida/fcmix/fidaklu.c                            |    52 +
 src/ida/fcmix/fidalapack.c                         |    58 +
 src/ida/fcmix/fidalapband.c                        |   117 +
 src/ida/fcmix/fidalapdense.c                       |   116 +
 src/ida/fcmix/fidapreco.c                          |   164 +
 src/ida/fcmix/fidaroot.c                           |    93 +
 src/ida/fcmix/fidaroot.h                           |   146 +
 src/ida/fcmix/fidasparse.c                         |    82 +
 src/ida/fcmix/fidasuperlumt.c                      |    42 +
 src/ida/ida.c                                      |  3433 ++
 src/ida/ida_band.c                                 |   328 +
 src/ida/ida_bbdpre.c                               |   596 +
 src/ida/ida_bbdpre_impl.h                          |    93 +
 src/ida/ida_dense.c                                |   308 +
 src/ida/ida_direct.c                               |   556 +
 src/ida/ida_direct_impl.h                          |   112 +
 src/ida/ida_ic.c                                   |   740 +
 src/ida/ida_impl.h                                 |   493 +
 src/ida/ida_io.c                                   |  1180 +
 src/ida/ida_klu.c                                  |   564 +
 src/ida/ida_lapack.c                               |   570 +
 src/ida/ida_sparse.c                               |   175 +
 src/ida/ida_sparse_impl.h                          |   127 +
 src/ida/ida_spbcgs.c                               |   482 +
 src/ida/ida_spgmr.c                                |   482 +
 src/ida/ida_spils.c                                |   654 +
 src/ida/ida_spils_impl.h                           |   196 +
 src/ida/ida_sptfqmr.c                              |   482 +
 src/ida/ida_superlumt.c                            |   522 +
 src/idas/CMakeLists.txt                            |   160 +
 src/idas/LICENSE                                   |    59 +
 src/idas/README                                    |    80 +
 src/idas/idaa.c                                    |  3317 ++
 src/idas/idaa_io.c                                 |   732 +
 src/idas/idas.c                                    |  7234 ++++
 src/idas/idas_band.c                               |   431 +
 src/idas/idas_bbdpre.c                             |   841 +
 src/idas/idas_bbdpre_impl.h                        |   115 +
 src/idas/idas_dense.c                              |   410 +
 src/idas/idas_direct.c                             |  1044 +
 src/idas/idas_direct_impl.h                        |   151 +
 src/idas/idas_ic.c                                 |  1368 +
 src/idas/idas_impl.h                               |  1062 +
 src/idas/idas_io.c                                 |  1924 ++
 src/idas/idas_klu.c                                |   780 +
 src/idas/idas_lapack.c                             |   758 +
 src/idas/idas_sparse.c                             |   429 +
 src/idas/idas_sparse_impl.h                        |   127 +
 src/idas/idas_spbcgs.c                             |   595 +
 src/idas/idas_spgmr.c                              |   587 +
 src/idas/idas_spils.c                              |  1410 +
 src/idas/idas_spils_impl.h                         |   234 +
 src/idas/idas_sptfqmr.c                            |   588 +
 src/idas/idas_superlumt.c                          |   679 +
 src/kinsol/CMakeLists.txt                          |   168 +
 src/kinsol/LICENSE                                 |    59 +
 src/kinsol/README                                  |   102 +
 src/kinsol/fcmix/CMakeLists.txt                    |    60 +
 src/kinsol/fcmix/fkinband.c                        |   116 +
 src/kinsol/fcmix/fkinbbd.c                         |   143 +
 src/kinsol/fcmix/fkinbbd.h                         |   310 +
 src/kinsol/fcmix/fkindense.c                       |   105 +
 src/kinsol/fcmix/fkinjtimes.c                      |    87 +
 src/kinsol/fcmix/fkinklu.c                         |    52 +
 src/kinsol/fcmix/fkinlapack.c                      |    47 +
 src/kinsol/fcmix/fkinlapband.c                     |   117 +
 src/kinsol/fcmix/fkinlapdense.c                    |   105 +
 src/kinsol/fcmix/fkinpreco.c                       |   139 +
 src/kinsol/fcmix/fkinsol.c                         |   479 +
 src/kinsol/fcmix/fkinsol.h                         |   789 +
 src/kinsol/fcmix/fkinsparse.c                      |    71 +
 src/kinsol/fcmix/fkinsuperlumt.c                   |    42 +
 src/kinsol/kinsol.c                                |  2544 ++
 src/kinsol/kinsol_band.c                           |   357 +
 src/kinsol/kinsol_bbdpre.c                         |   545 +
 src/kinsol/kinsol_bbdpre_impl.h                    |    94 +
 src/kinsol/kinsol_dense.c                          |   339 +
 src/kinsol/kinsol_direct.c                         |   505 +
 src/kinsol/kinsol_direct_impl.h                    |   106 +
 src/kinsol/kinsol_impl.h                           |   490 +
 src/kinsol/kinsol_io.c                             |  1060 +
 src/kinsol/kinsol_klu.c                            |   575 +
 src/kinsol/kinsol_lapack.c                         |   616 +
 src/kinsol/kinsol_sparse.c                         |   178 +
 src/kinsol/kinsol_sparse_impl.h                    |    92 +
 src/kinsol/kinsol_spbcgs.c                         |   442 +
 src/kinsol/kinsol_spfgmr.c                         |   451 +
 src/kinsol/kinsol_spgmr.c                          |   443 +
 src/kinsol/kinsol_spils.c                          |   639 +
 src/kinsol/kinsol_spils_impl.h                     |   191 +
 src/kinsol/kinsol_sptfqmr.c                        |   436 +
 src/kinsol/kinsol_superlumt.c                      |   506 +
 src/nvec_openmp/CMakeLists.txt                     |    94 +
 src/nvec_openmp/README                             |    46 +
 src/nvec_openmp/fnvector_openmp.c                  |   159 +
 src/nvec_openmp/fnvector_openmp.h                  |    95 +
 src/nvec_openmp/nvector_openmp.c                   |  1332 +
 src/nvec_par/CMakeLists.txt                        |    94 +
 src/nvec_par/README                                |    57 +
 src/nvec_par/fnvector_parallel.c                   |   194 +
 src/nvec_par/fnvector_parallel.h                   |    99 +
 src/nvec_par/nvector_parallel.c                    |  1187 +
 src/nvec_parhyp/CMakeLists.txt                     |    77 +
 src/nvec_parhyp/README                             |    46 +
 src/nvec_parhyp/nvector_parhyp.c                   |  1160 +
 src/nvec_petsc/CMakeLists.txt                      |    77 +
 src/nvec_petsc/README                              |    45 +
 src/nvec_petsc/nvector_petsc.c                     |   900 +
 src/nvec_pthreads/CMakeLists.txt                   |    87 +
 src/nvec_pthreads/README                           |    47 +
 src/nvec_pthreads/fnvector_pthreads.c              |   159 +
 src/nvec_pthreads/fnvector_pthreads.h              |    95 +
 src/nvec_pthreads/nvector_pthreads.c               |  3204 ++
 src/nvec_ser/CMakeLists.txt                        |    87 +
 src/nvec_ser/README                                |    55 +
 src/nvec_ser/fnvector_serial.c                     |   159 +
 src/nvec_ser/fnvector_serial.h                     |    95 +
 src/nvec_ser/nvector_serial.c                      |  1063 +
 src/sundials/CMakeLists.txt                        |    53 +
 src/sundials/LICENSE                               |    67 +
 src/sundials/README                                |    75 +
 src/sundials/sundials_band.c                       |   264 +
 src/sundials/sundials_dense.c                      |   400 +
 src/sundials/sundials_direct.c                     |   360 +
 src/sundials/sundials_iterative.c                  |   293 +
 src/sundials/sundials_math.c                       |    99 +
 src/sundials/sundials_nvector.c                    |   245 +
 src/sundials/sundials_pcg.c                        |   213 +
 src/sundials/sundials_sparse.c                     |   870 +
 src/sundials/sundials_spbcgs.c                     |   384 +
 src/sundials/sundials_spfgmr.c                     |   364 +
 src/sundials/sundials_spgmr.c                      |   459 +
 src/sundials/sundials_sptfqmr.c                    |   521 +
 840 files changed, 426857 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..08b6203
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,1194 @@
+# ---------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# Top level CMakeLists.txt for SUNDIALS (for cmake build system)
+
+
+# -------------------------------------------------------------
+# Initial commands
+# -------------------------------------------------------------
+
+# Require a fairly recent cmake version
+
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.1)
+
+# Set CMake policy to allow examples to build
+if(COMMAND cmake_policy)
+  cmake_policy(SET CMP0003 NEW)
+endif(COMMAND cmake_policy)
+
+# Project SUNDIALS (initially only C supported)
+
+PROJECT(sundials C)
+
+# Set some variables with info on the SUNDIALS project
+
+SET(PACKAGE_BUGREPORT "woodward6 at llnl.gov")
+SET(PACKAGE_NAME "SUNDIALS")
+SET(PACKAGE_STRING "SUNDIALS 2.7.0")
+SET(PACKAGE_TARNAME "sundials")
+SET(PACKAGE_VERSION "2.7.0")
+
+# 
+SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
+
+# Prohibit in-source build
+
+IF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
+  MESSAGE(FATAL_ERROR "In-source build prohibited.")
+ENDIF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
+
+# Hide/show some cache variables
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+MARK_AS_ADVANCED(CLEAR
+  CMAKE_C_COMPILER
+  CMAKE_C_FLAGS
+  CMAKE_C_FLAGS_DEBUG
+  CMAKE_C_FLAGS_MINSIZEREL
+  CMAKE_C_FLAGS_RELEASE
+  CMAKE_C_FLAGS_RELWITHDEB)
+
+# Specify the VERSION and SOVERSION for shared libraries
+
+SET(arkodelib_VERSION "1.1.0")
+SET(arkodelib_SOVERSION "1")
+
+SET(cvodelib_VERSION "2.9.0")
+SET(cvodelib_SOVERSION "2")
+
+SET(cvodeslib_VERSION "2.9.0")
+SET(cvodeslib_SOVERSION "2")
+
+SET(idalib_VERSION "2.9.0")
+SET(idalib_SOVERSION "2")
+
+SET(idaslib_VERSION "1.3.0")
+SET(idaslib_SOVERSION "1")
+
+SET(kinsollib_VERSION "2.9.0")
+SET(kinsollib_SOVERSION "2")
+
+SET(cpodeslib_VERSION "0.0.0")
+SET(cpodeslib_SOVERSION "0")
+
+SET(nveclib_VERSION "2.7.0")
+SET(nveclib_SOVERSION "2")
+
+# Specify the location of additional CMAKE modules
+
+SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/config)
+
+# -------------------------------------------------------------
+# MACRO definitions
+# -------------------------------------------------------------
+
+# Macros to hide/show cached variables.
+# These two macros can be used to "hide" or "show" in the
+# list of cached variables various variables and/or options 
+# that depend on other options.
+# Note that once a variable is modified, it will preserve its
+# value (hidding it merely makes it internal)
+
+MACRO(HIDE_VARIABLE var)
+  IF(DEFINED ${var})
+    SET(${var} "${${var}}" CACHE INTERNAL "")
+  ENDIF(DEFINED ${var})
+ENDMACRO(HIDE_VARIABLE)
+
+MACRO(SHOW_VARIABLE var type doc default)
+  IF(DEFINED ${var})
+    SET(${var} "${${var}}" CACHE "${type}" "${doc}" FORCE)
+  ELSE(DEFINED ${var})
+    SET(${var} "${default}" CACHE "${type}" "${doc}")
+  ENDIF(DEFINED ${var})
+ENDMACRO(SHOW_VARIABLE)
+
+# Macros to append a common suffix or prefix to the elements of a list
+
+MACRO(ADD_SUFFIX rootlist suffix)
+  SET(outlist )
+  FOREACH(root ${${rootlist}})
+    LIST(APPEND outlist ${root}${suffix})
+  ENDFOREACH(root)
+  SET(${rootlist} ${outlist})
+ENDMACRO(ADD_SUFFIX)
+
+MACRO(ADD_PREFIX prefix rootlist)
+  SET(outlist )
+  FOREACH(root ${${rootlist}})
+    LIST(APPEND outlist ${prefix}${root})
+  ENDFOREACH(root)
+  SET(${rootlist} ${outlist})
+ENDMACRO(ADD_PREFIX)
+
+# Macro to print warning that some features will be disabled
+# due to some failure.
+
+MACRO(PRINT_WARNING message action)
+  MESSAGE("WARNING: ${message}.\n   ${action}.")
+ENDMACRO(PRINT_WARNING)
+
+# Returns an unquoted string.  Note that CMake will readily turn such
+# strings back into lists, due to the duality of lists and
+# semicolon-separated strings.  So be careful how you use it.
+
+MACRO(LIST2STRING alist astring)
+  FOREACH(elem ${${alist}})
+   SET(${astring} "${${astring}} ${elem}")
+  ENDFOREACH(elem)
+ENDMACRO(LIST2STRING)
+
+# -------------------------------------------------------------
+# Which modules to build?
+# -------------------------------------------------------------
+
+# For each SUNDIALS solver available (i.e. for which we have the
+# sources), give the user the option of enabling/disabling it.
+
+IF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/arkode")
+  OPTION(BUILD_ARKODE  "Build the ARKODE library"  ON)
+ELSE(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/arkode")
+  SET(BUILD_ARKODE OFF)
+ENDIF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/arkode")
+
+IF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/cvode")
+  OPTION(BUILD_CVODE  "Build the CVODE library"  ON)
+ELSE(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/cvode")
+  SET(BUILD_CVODE OFF)
+ENDIF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/cvode")
+
+IF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/cvodes")
+  OPTION(BUILD_CVODES  "Build the CVODES library"  ON)
+ELSE(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/cvodes")
+  SET(BUILD_CVODES OFF)
+ENDIF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/cvodes")
+
+IF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/ida")
+  OPTION(BUILD_IDA  "Build the IDA library"  ON)
+ELSE(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/ida")
+  SET(BUILD_IDA OFF)
+ENDIF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/ida")
+
+IF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/idas")
+  OPTION(BUILD_IDAS  "Build the IDAS library"  ON)
+ELSE(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/idas")
+  SET(BUILD_IDAS OFF)
+ENDIF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/idas")
+
+IF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/kinsol")
+  OPTION(BUILD_KINSOL  "Build the KINSOL library"  ON)
+ELSE(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/kinsol")
+  SET(BUILD_KINSOL OFF)
+ENDIF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/kinsol")
+
+# CPODES is always OFF for now.  (commented out for Release); ToDo: better way to do this?
+#IF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/cpodes")
+#  OPTION(BUILD_CPODES  "Build the CPODES library"  OFF)
+#ELSE(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/cpodes")
+#  SET(BUILD_CPODES OFF)
+#ENDIF(IS_DIRECTORY "${sundials_SOURCE_DIR}/src/cpodes")
+
+# -------------------------------------------------------------
+# Other configuration options
+# -------------------------------------------------------------
+
+# Option that allows users to build static and/or shared libraries
+# ----------------------------------------------------------------
+
+OPTION(BUILD_STATIC_LIBS "Build static libraries" ON)
+OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON)
+
+# Prepare substitution variable SUNDIALS_EXPORT for sundials_config.h
+# When building shared SUNDIALS libraries under Windows, use
+#      #define SUNDIALS_EXPORT __declspec(dllexport)
+# When linking to shared SUNDIALS libraries under Windows, use
+#      #define SUNDIALS_EXPORT __declspec(dllimport)
+# In all other cases (other platforms or static libraries
+# under Windows), the SUNDIALS_EXPORT macro is empty
+
+IF(BUILD_SHARED_LIBS AND WIN32)
+  SET(SUNDIALS_EXPORT
+    "#ifdef BUILD_SUNDIALS_LIBRARY
+#define SUNDIALS_EXPORT __declspec(dllexport)
+#else
+#define SUNDIALS_EXPORT __declspec(dllimport)
+#endif")
+ELSE(BUILD_SHARED_LIBS AND WIN32)
+  SET(SUNDIALS_EXPORT "#define SUNDIALS_EXPORT")
+ENDIF(BUILD_SHARED_LIBS AND WIN32)
+
+# Make sure we build at least one type of libraries
+IF(NOT BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS)
+  PRINT_WARNING("Both static and shared library generation were disabled"
+    "Building static libraries was re-enabled")
+  SET(BUILD_STATIC_LIBS ON CACHE BOOL "Build static libraries" FORCE)
+ENDIF(NOT BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS)
+
+# Option to specify precision
+# ---------------------------
+
+SET(SUNDIALS_PRECISION "double" CACHE STRING "double, single or extended")
+
+# prepare substitution variable PRECISION_LEVEL for sundials_config.h
+STRING(TOUPPER ${SUNDIALS_PRECISION} SUNDIALS_PRECISION)
+SET(PRECISION_LEVEL "#define SUNDIALS_${SUNDIALS_PRECISION}_PRECISION 1")
+
+# Option to use the generic math libraries (UNIX only)
+# ----------------------------------------------------
+
+IF(UNIX)
+  OPTION(USE_GENERIC_MATH "Use generic (std-c) math libraries" ON)
+  IF(USE_GENERIC_MATH)
+    # executables will be linked against -lm 
+    SET(EXTRA_LINK_LIBS -lm)
+    # prepare substitution variable for sundials_config.h
+    SET(SUNDIALS_USE_GENERIC_MATH TRUE)
+  ENDIF(USE_GENERIC_MATH)
+ENDIF(UNIX)
+
+## clock-monotonic, see if we need to link with rt
+include(CheckSymbolExists)
+set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES})
+set(CMAKE_REQUIRED_LIBRARIES rt)
+CHECK_SYMBOL_EXISTS(_POSIX_TIMERS "unistd.h;time.h" SUNDIALS_POSIX_TIMERS)
+set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE})
+if(SUNDIALS_POSIX_TIMERS)
+  find_library(SUNDIALS_RT_LIBRARY NAMES rt)
+  mark_as_advanced(SUNDIALS_RT_LIBRARY)
+  if(SUNDIALS_RT_LIBRARY)
+    # sundials_config.h symbol
+    SET(SUNDIALS_HAVE_POSIX_TIMERS TRUE)
+    set(EXTRA_LINK_LIBS ${EXTRA_LINK_LIBS} ${SUNDIALS_RT_LIBRARY})
+  endif()
+endif()
+
+# -------------------------------------------------------------
+# Enable Fortran support?
+# -------------------------------------------------------------
+
+# FCMIX support is an option only if at least one solver that 
+# provides such an interface is built.
+
+IF(BUILD_ARKODE OR BUILD_CVODE OR BUILD_IDA OR BUILD_KINSOL)
+  SHOW_VARIABLE(FCMIX_ENABLE BOOL "Enable Fortran-C support" OFF)
+ELSE(BUILD_ARKODE OR BUILD_CVODE OR BUILD_IDA OR BUILD_KINSOL)
+  HIDE_VARIABLE(FCMIX_ENABLE)
+ENDIF(BUILD_ARKODE OR BUILD_CVODE OR BUILD_IDA OR BUILD_KINSOL)
+
+# -------------------------------------------------------------
+# Enable Fortran90 support?
+# -------------------------------------------------------------
+
+# F90 support is an option only if ARKode is built and 
+# examples are enabled
+
+IF(BUILD_ARKODE AND EXAMPLES_ENABLE AND FCMIX_ENABLE)
+  SHOW_VARIABLE(F90_ENABLE BOOL "Enable Fortran90 ARKode examples" OFF)
+ELSE(BUILD_ARKODE AND EXAMPLES_ENABLE AND FCMIX_ENABLE)
+  # # set back to OFF (in case was ON)
+  # SET(F90_ENABLE OFF)
+  # HIDE_VARIABLE(F90_ENABLE AND FCMIX_ENABLE)
+  HIDE_VARIABLE(F90_ENABLE)
+ENDIF(BUILD_ARKODE AND EXAMPLES_ENABLE AND FCMIX_ENABLE)
+
+# -------------------------------------------------------------
+# Enable C++ support?
+# -------------------------------------------------------------
+
+# C++ support is an option only if ARKode is built and 
+# examples are enabled
+
+IF(BUILD_ARKODE AND EXAMPLES_ENABLE)
+  SHOW_VARIABLE(CXX_ENABLE BOOL "Enable C++ ARKode examples" OFF)
+ELSE(BUILD_ARKODE AND EXAMPLES_ENABLE)
+  HIDE_VARIABLE(CXX_ENABLE)
+ENDIF(BUILD_ARKODE AND EXAMPLES_ENABLE)
+
+# -------------------------------------------------------------
+# Enable BLAS/LAPACK support?
+# -------------------------------------------------------------
+
+OPTION(LAPACK_ENABLE "Enable Lapack support" OFF)
+
+IF(NOT LAPACK_ENABLE)
+  HIDE_VARIABLE(SUNDIALS_F77_FUNC_CASE)
+  HIDE_VARIABLE(SUNDIALS_F77_FUNC_UNDERSCORES)
+  HIDE_VARIABLE(LAPACK_LIBRARIES)
+ENDIF(NOT LAPACK_ENABLE)
+
+# -------------------------------------------------------------
+# Enable SUPERLUMT support?
+# -------------------------------------------------------------
+
+OPTION(SUPERLUMT_ENABLE "Enable SUPERLUMT support" OFF)
+
+IF(NOT SUPERLUMT_ENABLE)
+  HIDE_VARIABLE(SUPERLUMT_THREAD_TYPE)
+  HIDE_VARIABLE(SUPERLUMT_LIBRARY_DIR)
+  HIDE_VARIABLE(SUPERLUMT_INCLUDE_DIR)
+  SET (SUPERLUMT_DISABLED TRUE CACHE INTERNAL "GUI - return when first set")
+ENDIF(NOT SUPERLUMT_ENABLE)
+
+# -------------------------------------------------------------
+# Enable KLU support?
+# -------------------------------------------------------------
+
+OPTION(KLU_ENABLE "Enable KLU support" OFF)
+
+IF(NOT KLU_ENABLE)
+  HIDE_VARIABLE(KLU_LIBRARY_DIR)
+  HIDE_VARIABLE(KLU_INCLUDE_DIR)
+  SET (KLU_DISABLED TRUE CACHE INTERNAL "GUI - return when first set")
+ENDIF(NOT KLU_ENABLE)
+
+# -------------------------------------------------------------
+# Enable MPI support?
+# -------------------------------------------------------------
+
+OPTION(MPI_ENABLE "Enable MPI support" OFF)
+
+IF(NOT MPI_ENABLE)
+  HIDE_VARIABLE(MPI_INCLUDE_PATH)
+  HIDE_VARIABLE(MPI_LIBRARIES)
+  HIDE_VARIABLE(MPI_EXTRA_LIBRARIES)
+  HIDE_VARIABLE(MPI_MPICC)
+  HIDE_VARIABLE(MPI_MPICXX)
+  HIDE_VARIABLE(MPI_MPIF77)
+  HIDE_VARIABLE(MPI_MPIF90)
+ENDIF(NOT MPI_ENABLE)
+
+# -------------------------------------------------------------
+# Enable HYPRE Vector support?
+# -------------------------------------------------------------
+
+OPTION(HYPRE_ENABLE "Enable Hypre support" OFF)
+IF(NOT MPI_ENABLE)
+  HIDE_VARIABLE(HYPRE_INCLUDE_DIR)
+  HIDE_VARIABLE(HYPRE_LIBRARY_DIR)
+  SET (HYPRE_DISABLED TRUE CACHE INTERNAL "GUI - return when first set")
+ENDIF(NOT MPI_ENABLE)
+
+# -------------------------------------------------------------
+# Enable OpenMP support?
+# -------------------------------------------------------------
+
+OPTION(OPENMP_ENABLE "Enable OpenMP support" OFF)
+
+IF(OPENMP_ENABLE)
+  FIND_PACKAGE(OpenMP)
+  IF(NOT OPENMP_FOUND)
+    message(STATUS "Disabling OpenMP support, could not determine compiler flags")
+  ENDIF(NOT OPENMP_FOUND)
+ENDIF(OPENMP_ENABLE)
+
+# -------------------------------------------------------------
+# Enable Pthread support?
+# -------------------------------------------------------------
+
+OPTION(PTHREAD_ENABLE "Enable Pthreads support" OFF)
+
+IF(PTHREAD_ENABLE)
+  FIND_PACKAGE(Threads)
+  IF(CMAKE_USE_PTHREADS_INIT)
+    message(STATUS "Using Pthreads")
+    SET(PTHREADS_FOUND TRUE)
+    # SGS    
+  ELSE()
+    message(STATUS "Disabling Pthreads support, could not determine compiler flags")
+  endif()
+ENDIF(PTHREAD_ENABLE)
+
+# -------------------------------------------------------------
+# Enable PETSc support?
+# -------------------------------------------------------------
+
+OPTION(PETSC_ENABLE "Enable PETSC support" OFF)
+
+IF(NOT PETSC_ENABLE)
+  HIDE_VARIABLE(PETSC_LIBRARY_DIR)
+  HIDE_VARIABLE(PETSC_INCLUDE_DIR)
+  SET (PETSC_DISABLED TRUE CACHE INTERNAL "GUI - return when first set")
+ENDIF(NOT PETSC_ENABLE)
+
+# -------------------------------------------------------------
+# Enable examples?
+# -------------------------------------------------------------
+
+OPTION(EXAMPLES_ENABLE "Build the SUNDIALS examples" ON)
+
+IF(EXAMPLES_ENABLE)
+
+  # If examples are enabled, set different options
+
+  # The examples will be linked with the library corresponding to the build type.
+  # Whenever building shared libraries, use them to link the examples.
+  IF(BUILD_SHARED_LIBS)
+    SET(LINK_LIBRARY_TYPE "shared")
+  ELSE(BUILD_SHARED_LIBS)
+    SET(LINK_LIBRARY_TYPE "static")
+  ENDIF(BUILD_SHARED_LIBS)
+
+  # Check if example files are to be exported
+  SHOW_VARIABLE(EXAMPLES_INSTALL BOOL "Install example files" ON)
+
+  # If examples are to be exported, check where we should install them.
+  IF(EXAMPLES_INSTALL)
+
+    SHOW_VARIABLE(EXAMPLES_INSTALL_PATH PATH
+      "Output directory for installing example files" "${CMAKE_INSTALL_PREFIX}/examples")
+    
+    IF(NOT EXAMPLES_INSTALL_PATH)
+      PRINT_WARNING("The example installation path is empty"
+        "Example installation path was reset to its default value")
+      SET(EXAMPLES_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/examples" CACHE STRING
+        "Output directory for installing example files" FORCE)
+    ENDIF(NOT EXAMPLES_INSTALL_PATH)
+
+  ELSE(EXAMPLES_INSTALL)
+
+    HIDE_VARIABLE(EXAMPLES_INSTALL_PATH)
+
+  ENDIF(EXAMPLES_INSTALL)
+
+ELSE(EXAMPLES_ENABLE)
+
+  # If examples are disabled, hide all options related to
+  # building and installing the SUNDIALS examples
+
+  HIDE_VARIABLE(EXAMPLES_INSTALL)
+  HIDE_VARIABLE(EXAMPLES_INSTALL_PATH)
+  
+ENDIF(EXAMPLES_ENABLE)
+
+# -------------------------------------------------------------
+# Add any other necessary compiler flags & definitions
+# -------------------------------------------------------------
+
+# Under Windows, add compiler directive to inhibit warnings
+# about use of unsecure functions
+
+IF(WIN32)
+  ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
+ENDIF(WIN32)
+
+IF(APPLE)
+  SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -undefined dynamic_lookup")
+ENDIF(APPLE)
+
+# -------------------------------------------------------------
+# A Fortran compiler is needed if:
+# (a) FCMIX is enabled
+# (b) LAPACK is enabled (for the name-mangling scheme)
+# -------------------------------------------------------------
+
+IF(FCMIX_ENABLE OR LAPACK_ENABLE)
+  INCLUDE(SundialsFortran)
+  IF(NOT F77_FOUND AND FCMIX_ENABLE)
+    PRINT_WARNING("Fortran compiler not functional"
+      "FCMIX support will not be provided")
+  ENDIF(NOT F77_FOUND AND FCMIX_ENABLE)
+ENDIF(FCMIX_ENABLE OR LAPACK_ENABLE)
+
+# -------------------------------------------------------------
+# A Fortran90 compiler is needed if:
+# (a) F90 is enabled, and
+# (b) ARKODE examples are enabled
+# -------------------------------------------------------------
+
+IF(F90_ENABLE AND BUILD_ARKODE)
+  INCLUDE(SundialsFortran90)
+  IF(NOT F90_FOUND AND F90_ENABLE)
+    PRINT_WARNING("Fortran90 compiler not functional"
+      "F90 support will not be provided")
+  ENDIF(NOT F90_FOUND AND F90_ENABLE)
+ENDIF(F90_ENABLE AND BUILD_ARKODE)
+
+# -------------------------------------------------------------
+# A C++ compiler is needed if:
+# (a) C++ is enabled, and
+# (b) ARKODE examples are enabled
+# -------------------------------------------------------------
+
+IF(CXX_ENABLE AND BUILD_ARKODE)
+  INCLUDE(SundialsCXX)
+  IF(NOT CXX_FOUND AND CXX_ENABLE)
+    PRINT_WARNING("C++ compiler not functional"
+      "C++ support will not be provided")
+  ENDIF(NOT CXX_FOUND AND CXX_ENABLE)
+ENDIF(CXX_ENABLE AND BUILD_ARKODE)
+
+# -------------------------------------------------------------
+# Check if we need an alternate way of specifying the Fortran
+# name-mangling scheme if we were unable to infer it using a
+# compiler. 
+# Ask the user to specify the case and number of appended underscores
+# corresponding to the Fortran name-mangling scheme of symbol names 
+# that do not themselves contain underscores (recall that this is all
+# we really need for the interfaces to LAPACK).
+# Note: the default scheme is lower case - one underscore
+# -------------------------------------------------------------
+
+IF(LAPACK_ENABLE AND NOT F77SCHEME_FOUND)
+  # Specify the case for the Fortran name-mangling scheme
+  SHOW_VARIABLE(SUNDIALS_F77_FUNC_CASE STRING
+    "case of Fortran function names (lower/upper)"
+    "lower")
+  # Specify the number of appended underscores for the Fortran name-mangling scheme
+  SHOW_VARIABLE(SUNDIALS_F77_FUNC_UNDERSCORES STRING 
+    "number of underscores appended to Fortran function names"
+    "one")  
+  # Based on the given case and number of underscores,
+  # set the C preprocessor macro definition
+  IF(${SUNDIALS_F77_FUNC_CASE} MATCHES "lower")
+    IF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "none")
+      SET(CMAKE_Fortran_SCHEME_NO_UNDERSCORES "mysub")
+    ENDIF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "none")
+    IF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "one")
+      SET(CMAKE_Fortran_SCHEME_NO_UNDERSCORES "mysub_")
+    ENDIF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "one")
+    IF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "two")
+      SET(CMAKE_Fortran_SCHEME_NO_UNDERSCORES "mysub__")
+    ENDIF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "two")
+  ELSE(${SUNDIALS_F77_FUNC_CASE} MATCHES "lower")
+    IF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "none")
+      SET(CMAKE_Fortran_SCHEME_NO_UNDERSCORES "MYSUB")
+    ENDIF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "none")
+    IF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "one")
+      SET(CMAKE_Fortran_SCHEME_NO_UNDERSCORES "MYSUB_")
+    ENDIF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "one")
+    IF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "two")
+      SET(CMAKE_Fortran_SCHEME_NO_UNDERSCORES "MYSUB__")
+    ENDIF(${SUNDIALS_F77_FUNC_UNDERSCORES} MATCHES "two")
+  ENDIF(${SUNDIALS_F77_FUNC_CASE} MATCHES "lower")
+  # Since the SUNDIALS codes never use symbol names containing
+  # underscores, set a default scheme (probably wrong) for symbols
+  # with underscores.
+  SET(CMAKE_Fortran_SCHEME_WITH_UNDERSCORES "my_sub_")
+  # We now "have" a scheme.
+  SET(F77SCHEME_FOUND TRUE)
+ENDIF(LAPACK_ENABLE AND NOT F77SCHEME_FOUND)
+
+# -------------------------------------------------------------
+# If we have a name-mangling scheme (either automatically
+# inferred or provided by the user), set the SUNDIALS 
+# compiler preprocessor macro definitions.
+# -------------------------------------------------------------
+
+SET(F77_MANGLE_MACRO1 "")
+SET(F77_MANGLE_MACRO2 "")
+
+IF(F77SCHEME_FOUND)
+  # Symbols WITHOUT underscores
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "mysub")
+    SET(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "mysub")
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "mysub_")
+    SET(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## _")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "mysub_")
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "mysub__")
+    SET(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## __")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "mysub__")
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MYSUB")
+    SET(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MYSUB")
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MYSUB_")
+    SET(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## _")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MYSUB_")
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MYSUB__")
+    SET(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## __")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MYSUB__")
+  # Symbols with underscores 
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "my_sub")
+    SET(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "my_sub")
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "my_sub_")
+    SET(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## _")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "my_sub_")
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "my_sub__")
+    SET(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## __")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "my_sub__")
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MY_SUB")
+    SET(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MY_SUB")
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MY_SUB_")
+    SET(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## _")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MY_SUB_")
+  IF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MY_SUB__")
+    SET(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## __")
+  ENDIF(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MY_SUB__")
+ENDIF(F77SCHEME_FOUND)
+
+# -------------------------------------------------------------
+# Find (and test) the Lapack libraries
+# -------------------------------------------------------------
+
+# If LAPACK is needed, first try to find the appropriate
+# libraries and linker flags needed to link against them.
+
+IF(LAPACK_ENABLE)
+
+  # find BLAS and LAPACK Libraries
+  INCLUDE(SundialsLapack)
+
+  SHOW_VARIABLE(LAPACK_LIBRARIES STRING "Blas and Lapack libraries" "${LAPACK_LIBRARIES}")
+
+  IF(LAPACK_LIBRARIES AND NOT LAPACK_FOUND)
+    PRINT_WARNING("LAPACK not functional"
+      "Blas/Lapack support will not be provided")
+  ELSE(LAPACK_LIBRARIES AND NOT LAPACK_FOUND)
+    #set sundials_config.h symbol via sundials_config.in
+    SET(SUNDIALS_BLAS_LAPACK TRUE)
+  ENDIF(LAPACK_LIBRARIES AND NOT LAPACK_FOUND)
+  
+
+ELSE(LAPACK_ENABLE)
+
+  HIDE_VARIABLE(LAPACK_LIBRARIES)
+
+ENDIF(LAPACK_ENABLE)
+
+# -------------------------------------------------------------
+# Find (and test) the SUPERLUMT libraries
+# -------------------------------------------------------------
+
+# If SUPERLUMT is needed, first try to find the appropriate
+# libraries to link against them.
+
+IF(SUPERLUMT_ENABLE)
+
+  # get thread type for SUPERLUMT (OpenMP or Pthreads(default))
+  SET(SUPERLUMT_THREAD_TYPE "Pthread" CACHE STRING "OpenMP or Pthread")
+  SHOW_VARIABLE(SUPERLUMT_THREAD_TYPE STRING "SUPERLUMT threading type: OpenMP or Pthread" "${SUPERLUMT_THREAD_TYPE}")
+  SHOW_VARIABLE(SUPERLUMT_INCLUDE_DIR PATH "SUPERLUMT include directory" "${SUPERLUMT_INCLUDE_DIR}")
+  SHOW_VARIABLE(SUPERLUMT_LIBRARY_DIR PATH "SUPERLUMT library directory" "${SUPERLUMT_LIBRARY_DIR}")
+
+  INCLUDE(SundialsSuperLUMT)
+
+  IF(SUPERLUMT_FOUND)
+    # sundials_config.h symbols
+    SET(SUNDIALS_SUPERLUMT TRUE)
+    SET(SUNDIALS_SUPERLUMT_THREAD_TYPE ${SUPERLUMT_THREAD_TYPE})
+  ENDIF(SUPERLUMT_FOUND)
+
+  IF(SUPERLUMT_LIBRARIES AND NOT SUPERLUMT_FOUND)
+    PRINT_WARNING("SUPERLUMT not functional - support will not be provided"
+      "Double check spelling specified libraries (search is case sensitive)")
+  ENDIF(SUPERLUMT_LIBRARIES AND NOT SUPERLUMT_FOUND)
+
+ELSE(SUPERLUMT_ENABLE)
+
+  HIDE_VARIABLE(SUPERLUMT_THREAD_TYPE)
+  HIDE_VARIABLE(SUPERLUMT_INCLUDE_DIR)
+  HIDE_VARIABLE(SUPERLUMT_LIBRARY_DIR)
+
+ENDIF(SUPERLUMT_ENABLE)
+
+# -------------------------------------------------------------
+# Find (and test) the KLU libraries
+# -------------------------------------------------------------
+
+# If KLU is requested, first try to find the appropriate libraries to
+# link against them.
+
+IF(KLU_ENABLE)
+
+  SHOW_VARIABLE(KLU_INCLUDE_DIR PATH "KLU include directory"
+    "${KLU_INCLUDE_DIR}") 
+  SHOW_VARIABLE(KLU_LIBRARY_DIR PATH
+    "Klu library directory" "${KLU_LIBRARY_DIR}")
+
+  INCLUDE(SundialsKLU)
+
+  IF(KLU_FOUND) 
+    # sundials_config.h symbol
+    SET(SUNDIALS_KLU TRUE)
+    INCLUDE_DIRECTORIES(${KLU_INCLUDE_DIR})
+  ENDIF(KLU_FOUND)
+
+  IF(KLU_LIBRARIES AND NOT KLU_FOUND) 
+    PRINT_WARNING("KLU not functional - support will not be provided" 
+      "Double check spelling of include path and specified libraries (search is case sensitive)")
+  ENDIF(KLU_LIBRARIES AND NOT KLU_FOUND)
+
+ENDIF(KLU_ENABLE)
+
+# -------------------------------------------------------------
+# Decide how to compile MPI codes.
+# -------------------------------------------------------------
+
+IF(MPI_ENABLE)
+  # get run command for mpi (openmpi or OpenMP or Pthreads(default))
+  SET(MPI_RUN_COMMAND "mpirun" CACHE STRING "mpirun or srun")
+  SHOW_VARIABLE(MPI_RUN_COMMAND STRING "MPI run command: mpirun or srun" "${MPI_RUN_COMMAND}")
+  INCLUDE(SundialsMPIC)
+  IF(NOT MPIC_FOUND)
+    PRINT_WARNING("MPI not functional"
+      "Parallel support will not be provided")
+  ENDIF(NOT MPIC_FOUND)
+  IF(MPIC_MPI2)
+    SET(F77_MPI_COMM_F2C "#define SUNDIALS_MPI_COMM_F2C 1")
+  ELSE(MPIC_MPI2)
+    SET(F77_MPI_COMM_F2C "#define SUNDIALS_MPI_COMM_F2C 0")
+  ENDIF(MPIC_MPI2)
+  IF(MPIC_FOUND AND FCMIX_ENABLE)
+    INCLUDE(SundialsMPIF)
+  ENDIF(MPIC_FOUND AND FCMIX_ENABLE)
+  IF(MPIC_FOUND AND CXX_ENABLE)
+    INCLUDE(SundialsMPICXX)
+  ENDIF(MPIC_FOUND AND CXX_ENABLE)
+  IF(MPIC_FOUND AND F90_ENABLE)
+    INCLUDE(SundialsMPIF90)
+  ENDIF(MPIC_FOUND AND F90_ENABLE)
+ENDIF(MPI_ENABLE)
+
+#-------------------------------------------------------------
+# Find the Hypre libraries
+#-------------------------------------------------------------
+IF(HYPRE_ENABLE AND NOT MPI_ENABLE)
+    PRINT_WARNING("MPI not enabled - HYPRE support will not be provided" 
+      "Set MPI_ENABLE to ON to use parhyp")
+ENDIF(HYPRE_ENABLE AND NOT MPI_ENABLE)
+
+IF(HYPRE_ENABLE AND MPI_ENABLE)
+  SHOW_VARIABLE(HYPRE_INCLUDE_DIR PATH "HYPRE include directory"
+    "${HYPRE_INCLUDE_DIR}") 
+  SHOW_VARIABLE(HYPRE_LIBRARY_DIR PATH
+    "HYPRE library directory" "${HYPRE_LIBRARY_DIR}")
+
+  INCLUDE(SundialsHypre)
+
+  IF(HYPRE_FOUND) 
+    # sundials_config.h symbol
+    SET(SUNDIALS_HYPRE TRUE)
+    INCLUDE_DIRECTORIES(${HYPRE_INCLUDE_DIR})
+  ENDIF(HYPRE_FOUND)
+
+  IF(HYPRE_LIBRARIES AND NOT HYPRE_FOUND) 
+    PRINT_WARNING("HYPRE not functional - support will not be provided" 
+      "Found hypre library, test code does not work")
+  ENDIF(HYPRE_LIBRARIES AND NOT HYPRE_FOUND)
+  
+ENDIF(HYPRE_ENABLE AND MPI_ENABLE)
+
+# -------------------------------------------------------------
+# Find (and test) the PETSc libraries
+# -------------------------------------------------------------
+IF(PETSC_ENABLE AND NOT MPI_ENABLE)
+    PRINT_WARNING("MPI not enabled - PETSc support will not be provided" 
+      "Set MPI_ENABLE to ON to use PETSc.")
+ENDIF(PETSC_ENABLE AND NOT MPI_ENABLE)
+
+IF(PETSC_ENABLE AND MPI_ENABLE)
+  SHOW_VARIABLE(PETSC_INCLUDE_DIR PATH "PETSc include directory"
+    "${PETSC_INCLUDE_DIR}") 
+  SHOW_VARIABLE(PETSC_LIBRARY_DIR PATH
+    "PETSc library directory" "${PETSC_LIBRARY_DIR}")
+
+  INCLUDE(SundialsPETSc)
+
+  IF(PETSC_FOUND) 
+    # sundials_config.h symbol
+    SET(SUNDIALS_PETSC TRUE)
+    INCLUDE_DIRECTORIES(${PETSC_INCLUDE_DIR})
+  ENDIF(PETSC_FOUND)
+
+  IF(PETSC_LIBRARIES AND NOT PETSC_FOUND) 
+    PRINT_WARNING("PETSC not functional - support will not be provided" 
+      "Double check spelling specified libraries (search is case sensitive)")
+  ENDIF(PETSC_LIBRARIES AND NOT PETSC_FOUND)
+
+ENDIF(PETSC_ENABLE AND MPI_ENABLE)
+
+
+# -------------------------------------------------------------
+# If using MPI with C++, disable C++ extensions (for known wrappers)
+# -------------------------------------------------------------
+
+# IF(MPICXX_FOUND)
+#   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX -DLAM_BUILDING")
+# ENDIF(MPICXX_FOUND)
+
+# -------------------------------------------------------------
+# Configure the header file sundials_config.h
+# -------------------------------------------------------------
+
+# All required substitution variables should be available at this point.
+# Generate the header file and place it in the binary dir.
+CONFIGURE_FILE(
+  ${PROJECT_SOURCE_DIR}/include/sundials/sundials_config.in
+  ${PROJECT_BINARY_DIR}/include/sundials/sundials_config.h
+  )
+
+# Add the include directory in the source tree and the one in
+# the binary tree (for the header file sundials_config.h)
+IF(SUPERLUMT_FOUND)
+  INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include ${PROJECT_BINARY_DIR}/include ${SUPERLUMT_INCLUDE_DIR})
+ELSE(SUPERLUMT_FOUND)
+  INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include ${PROJECT_BINARY_DIR}/include)
+ENDIF(SUPERLUMT_FOUND)
+
+# -------------------------------------------------------------
+# Add selected modules to the build system
+# -------------------------------------------------------------
+
+# Shared components
+
+ADD_SUBDIRECTORY(src/sundials)
+ADD_SUBDIRECTORY(src/nvec_ser)
+IF(MPIC_FOUND)
+  ADD_SUBDIRECTORY(src/nvec_par)
+ENDIF(MPIC_FOUND)
+
+IF(SUNDIALS_HYPRE)
+  ADD_SUBDIRECTORY(src/nvec_parhyp)
+ENDIF(SUNDIALS_HYPRE)
+
+IF(OPENMP_FOUND)
+  ADD_SUBDIRECTORY(src/nvec_openmp)	
+ENDIF(OPENMP_FOUND)
+
+IF(PTHREADS_FOUND)
+  ADD_SUBDIRECTORY(src/nvec_pthreads)   
+ENDIF(PTHREADS_FOUND)
+
+IF(PETSC_FOUND)
+  ADD_SUBDIRECTORY(src/nvec_petsc)   
+ENDIF(PETSC_FOUND)
+
+# ARKODE library
+
+IF(BUILD_ARKODE)	
+  ADD_SUBDIRECTORY(src/arkode)
+  IF(FCMIX_ENABLE AND F77_FOUND)
+    ADD_SUBDIRECTORY(src/arkode/fcmix)
+  ENDIF(FCMIX_ENABLE AND F77_FOUND)
+ENDIF(BUILD_ARKODE)
+
+# CVODE library
+
+IF(BUILD_CVODE)	
+  ADD_SUBDIRECTORY(src/cvode)
+  IF(FCMIX_ENABLE AND F77_FOUND)
+    ADD_SUBDIRECTORY(src/cvode/fcmix)
+  ENDIF(FCMIX_ENABLE AND F77_FOUND)
+ENDIF(BUILD_CVODE)
+
+# CVODES library
+
+IF(BUILD_CVODES)	
+  ADD_SUBDIRECTORY(src/cvodes)
+ENDIF(BUILD_CVODES)
+
+# IDA library
+
+IF(BUILD_IDA)	
+  ADD_SUBDIRECTORY(src/ida)
+  IF(FCMIX_ENABLE AND F77_FOUND)
+    ADD_SUBDIRECTORY(src/ida/fcmix)
+  ENDIF(FCMIX_ENABLE AND F77_FOUND)
+ENDIF(BUILD_IDA)
+
+# IDAS library
+
+IF(BUILD_IDAS)	
+  ADD_SUBDIRECTORY(src/idas)
+ENDIF(BUILD_IDAS)
+
+# KINSOL library
+
+IF(BUILD_KINSOL)	
+  ADD_SUBDIRECTORY(src/kinsol)
+  IF(FCMIX_ENABLE AND F77_FOUND)
+    ADD_SUBDIRECTORY(src/kinsol/fcmix)
+  ENDIF(FCMIX_ENABLE AND F77_FOUND)
+ENDIF(BUILD_KINSOL)
+
+# CPODES library
+
+IF(BUILD_CPODES)	
+  ADD_SUBDIRECTORY(src/cpodes)
+ENDIF(BUILD_CPODES)
+
+# -------------------------------------------------------------
+# Include the subdirectories corresponding to various examples
+# -------------------------------------------------------------
+
+# If building and installing the examples is enabled, include
+# the subdirectories for those examples that will be built.
+# Also, if we will generate exported example Makefiles, set 
+# variables needed in generating them from templates.
+
+# For now, TestRunner is not being distributed.
+# So:
+#  - Don't show TESTRUNNER variable
+#  - Don't enable testing if TestRunner if not found.
+#  - There will be no 'make test' target
+
+INCLUDE(SundialsAddTest)
+HIDE_VARIABLE(TESTRUNNER)
+IF(EXAMPLES_ENABLE)
+  IF(TESTRUNNER)
+    ENABLE_TESTING()
+  ENDIF(TESTRUNNER)
+
+  IF(EXAMPLES_INSTALL)
+    SET(SHELL "sh")
+    SET(prefix "${CMAKE_INSTALL_PREFIX}")
+    SET(exec_prefix "${CMAKE_INSTALL_PREFIX}")
+    SET(includedir "${prefix}/include")
+    SET(libdir "${exec_prefix}/lib")
+    SET(CPP "${CMAKE_C_COMPILER}")
+    SET(CC "${CMAKE_C_COMPILER}")
+    SET(CPPFLAGS "${CMAKE_C_FLAGS_RELEASE}")
+    SET(CFLAGS "${CMAKE_C_FLAGS_RELEASE}")
+    SET(LDFLAGS "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
+    LIST2STRING(EXTRA_LINK_LIBS LIBS)
+    IF(CXX_FOUND)
+      SET(CXX "${CMAKE_CXX_COMPILER}")
+      SET(CXX_LNKR "${CMAKE_CXX_COMPILER}")
+      SET(CXXFLAGS "${CMAKE_CXX_FLAGS_RELEASE}")
+      SET(CXX_LDFLAGS "${CMAKE_CXX_FLAGS_RELEASE}")
+      LIST2STRING(EXTRA_LINK_LIBS CXX_LIBS)
+    ENDIF(CXX_FOUND)
+    IF(F77_FOUND)
+      SET(F77 "${CMAKE_Fortran_COMPILER}")
+      SET(F77_LNKR "${CMAKE_Fortran_COMPILER}")
+      SET(FFLAGS "${CMAKE_Fortran_FLAGS_RELEASE}")
+      SET(F77_LDFLAGS "${CMAKE_Fortran_FLAGS_RELEASE}")
+      LIST2STRING(EXTRA_LINK_LIBS F77_LIBS)
+    ENDIF(F77_FOUND)
+    IF(F90_FOUND)
+      SET(F90 "${CMAKE_Fortran_COMPILER}")
+      SET(F90_LNKR "${CMAKE_Fortran_COMPILER}")
+      SET(F90FLAGS "${CMAKE_Fortran_FLAGS_RELEASE}")
+      SET(F90_LDFLAGS "${CMAKE_Fortran_FLAGS_RELEASE}")
+      LIST2STRING(EXTRA_LINK_LIBS F90_LIBS)
+    ENDIF(F90_FOUND)
+    IF(SUPERLUMT_FOUND)
+      LIST2STRING(SUPERLUMT_LIBRARIES SUPERLUMT_LIBS)
+      SET(SUPERLUMT_LIBS "${SUPERLUMT_LINKER_FLAGS} ${SUPERLUMT_LIBS}")
+    ENDIF(SUPERLUMT_FOUND)
+    IF(KLU_FOUND)
+      LIST2STRING(KLU_LIBRARIES KLU_LIBS)
+      SET(KLU_LIBS "${KLU_LINKER_FLAGS} ${KLU_LIBS}")
+    ENDIF(KLU_FOUND)
+    IF(LAPACK_FOUND)
+      LIST2STRING(LAPACK_LIBRARIES BLAS_LAPACK_LIBS)
+    ENDIF(LAPACK_FOUND)
+    IF(MPIC_FOUND)
+      IF(MPI_MPICC)
+        SET(MPICC "${MPI_MPICC}")
+        SET(MPI_INC_DIR ".")
+        SET(MPI_LIB_DIR ".")
+        SET(MPI_LIBS "")
+        SET(MPI_FLAGS "")
+      ELSE(MPI_MPICC)
+        SET(MPICC "${CMAKE_C_COMPILER}")
+        SET(MPI_INC_DIR "${MPI_INCLUDE_PATH}")
+        SET(MPI_LIB_DIR ".")
+        LIST2STRING(MPI_LIBRARIES MPI_LIBS)
+      ENDIF(MPI_MPICC)
+      SET(HYPRE_INC_DIR "${HYPRE_INCLUDE_DIR}")
+      SET(HYPRE_LIB_DIR "${HYPRE_LIBRARY_DIR}")
+      SET(HYPRE_LIBS "${HYPRE_LIBRARIES}")
+    ENDIF(MPIC_FOUND)
+    IF(MPICXX_FOUND)
+      IF(MPI_MPICXX)
+        SET(MPICXX "${MPI_MPICXX}")
+      ELSE(MPI_MPICXX)
+        SET(MPICXX "${CMAKE_CXX_COMPILER}")
+        LIST2STRING(MPI_LIBRARIES MPI_LIBS)
+      ENDIF(MPI_MPICXX)
+    ENDIF(MPICXX_FOUND)
+    IF(MPIF_FOUND)
+      IF(MPI_MPIF77)
+        SET(MPIF77 "${MPI_MPIF77}")
+        SET(MPIF77_LNKR "${MPI_MPIF77}")
+      ELSE(MPI_MPIF77)
+        SET(MPIF77 "${CMAKE_Fortran_COMPILER}")
+        SET(MPIF77_LNKR "${CMAKE_Fortran_COMPILER}")
+        SET(MPI_INC_DIR "${MPI_INCLUDE_PATH}")
+        SET(MPI_LIB_DIR ".")
+        LIST2STRING(MPI_LIBRARIES MPI_LIBS)
+      ENDIF(MPI_MPIF77)
+    ENDIF(MPIF_FOUND)
+    IF(MPIF90_FOUND)
+      IF(MPI_MPIF90)
+        SET(MPIF90 "${MPI_MPIF90}")
+        SET(MPIF90_LNKR "${MPI_MPIF90}")
+      ELSE(MPI_MPIF90)
+        SET(MPIF90 "${CMAKE_Fortran_COMPILER}")
+        SET(MPIF90_LNKR "${CMAKE_Fortran_COMPILER}")
+        LIST2STRING(MPI_LIBRARIES MPI_LIBS)
+      ENDIF(MPI_MPIF90)
+    ENDIF(MPIF90_FOUND)
+  ENDIF(EXAMPLES_INSTALL)
+
+  IF(BUILD_ARKODE)
+    ADD_SUBDIRECTORY(examples/arkode/C_serial)
+    IF(OPENMP_FOUND)
+      ADD_SUBDIRECTORY(examples/arkode/C_openmp)
+    ENDIF(OPENMP_FOUND)
+    IF(CXX_ENABLE AND CXX_FOUND)
+      ADD_SUBDIRECTORY(examples/arkode/CXX_serial)
+    ENDIF(CXX_ENABLE AND CXX_FOUND)
+    IF(FCMIX_ENABLE AND F77_FOUND)
+      ADD_SUBDIRECTORY(examples/arkode/F77_serial)
+    ENDIF(FCMIX_ENABLE AND F77_FOUND)
+    IF(F90_ENABLE AND F90_FOUND)
+      ADD_SUBDIRECTORY(examples/arkode/F90_serial)
+    ENDIF(F90_ENABLE AND F90_FOUND)
+    IF(MPIC_FOUND)
+      ADD_SUBDIRECTORY(examples/arkode/C_parallel)
+    ENDIF(MPIC_FOUND)
+    IF(MPICXX_FOUND)
+      ADD_SUBDIRECTORY(examples/arkode/CXX_parallel)
+    ENDIF(MPICXX_FOUND)
+    IF(MPIF_FOUND)
+      ADD_SUBDIRECTORY(examples/arkode/F77_parallel)
+    ENDIF(MPIF_FOUND)
+    IF(MPIF90_FOUND)
+      ADD_SUBDIRECTORY(examples/arkode/F90_parallel)
+    ENDIF(MPIF90_FOUND)
+    IF(HYPRE_ENABLE AND HYPRE_FOUND)
+      ADD_SUBDIRECTORY(examples/arkode/C_parhyp)
+    ENDIF(HYPRE_ENABLE AND HYPRE_FOUND)
+    
+  ENDIF(BUILD_ARKODE)
+  
+  IF(BUILD_CVODE)
+    ADD_SUBDIRECTORY(examples/cvode/serial)
+    IF(FCMIX_ENABLE AND F77_FOUND)
+      ADD_SUBDIRECTORY(examples/cvode/fcmix_serial)
+    ENDIF(FCMIX_ENABLE AND F77_FOUND)
+    IF(MPIC_FOUND)
+      ADD_SUBDIRECTORY(examples/cvode/parallel)
+    ENDIF(MPIC_FOUND)
+    IF(MPIF_FOUND)
+      ADD_SUBDIRECTORY(examples/cvode/fcmix_parallel)
+    ENDIF(MPIF_FOUND)
+    IF(OPENMP_FOUND)
+      ADD_SUBDIRECTORY(examples/cvode/C_openmp)
+    ENDIF(OPENMP_FOUND)
+    IF(HYPRE_ENABLE AND HYPRE_FOUND)
+      ADD_SUBDIRECTORY(examples/cvode/parhyp)
+    ENDIF(HYPRE_ENABLE AND HYPRE_FOUND)
+  ENDIF(BUILD_CVODE)
+  
+  IF(BUILD_CVODES)	
+    ADD_SUBDIRECTORY(examples/cvodes/serial)
+    IF(MPIC_FOUND)
+      ADD_SUBDIRECTORY(examples/cvodes/parallel)
+    ENDIF(MPIC_FOUND)
+    IF(OPENMP_FOUND)
+      ADD_SUBDIRECTORY(examples/cvodes/C_openmp)
+    ENDIF(OPENMP_FOUND)
+  ENDIF(BUILD_CVODES)
+  
+  IF(BUILD_IDA)
+    ADD_SUBDIRECTORY(examples/ida/serial)
+    IF(FCMIX_ENABLE AND F77_FOUND)
+      ADD_SUBDIRECTORY(examples/ida/fcmix_serial)
+      IF(OPENMP_FOUND)
+        ADD_SUBDIRECTORY(examples/ida/fcmix_openmp)
+      ENDIF(OPENMP_FOUND)
+      IF(PTHREADS_FOUND)
+	ADD_SUBDIRECTORY(examples/ida/fcmix_pthreads)
+      ENDIF(PTHREADS_FOUND)
+    ENDIF(FCMIX_ENABLE AND F77_FOUND)
+    IF(OPENMP_FOUND)
+      ADD_SUBDIRECTORY(examples/ida/C_openmp)
+    ENDIF(OPENMP_FOUND)
+    IF(MPIC_FOUND)
+      ADD_SUBDIRECTORY(examples/ida/parallel)
+    ENDIF(MPIC_FOUND)
+    IF(PETSC_FOUND)
+      ADD_SUBDIRECTORY(examples/ida/petsc)
+    ENDIF(PETSC_FOUND)
+    IF(MPIF_FOUND)
+      ADD_SUBDIRECTORY(examples/ida/fcmix_parallel)
+    ENDIF(MPIF_FOUND)
+  ENDIF(BUILD_IDA)
+  
+  IF(BUILD_IDAS)	
+    ADD_SUBDIRECTORY(examples/idas/serial)
+    IF(OPENMP_FOUND)
+      ADD_SUBDIRECTORY(examples/idas/C_openmp)
+    ENDIF(OPENMP_FOUND)
+    IF(MPIC_FOUND)
+      ADD_SUBDIRECTORY(examples/idas/parallel)
+    ENDIF(MPIC_FOUND)
+  ENDIF(BUILD_IDAS)
+
+  IF(BUILD_KINSOL)	
+    ADD_SUBDIRECTORY(examples/kinsol/serial)
+    IF(OPENMP_FOUND)
+      ADD_SUBDIRECTORY(examples/kinsol/C_openmp) # the only example here need special handling from testrunner (not yet implemented)
+    ENDIF(OPENMP_FOUND)
+    IF(FCMIX_ENABLE AND F77_FOUND)
+      ADD_SUBDIRECTORY(examples/kinsol/fcmix_serial)
+    ENDIF(FCMIX_ENABLE AND F77_FOUND)
+    IF(MPIC_FOUND)
+      ADD_SUBDIRECTORY(examples/kinsol/parallel)
+    ENDIF(MPIC_FOUND)
+    IF(MPIF_FOUND)
+      ADD_SUBDIRECTORY(examples/kinsol/fcmix_parallel)
+    ENDIF(MPIF_FOUND)
+  ENDIF(BUILD_KINSOL)
+
+  IF(BUILD_CPODES)	
+    ADD_SUBDIRECTORY(examples/cpodes/serial)
+    IF(MPIC_FOUND)
+      ADD_SUBDIRECTORY(examples/cpodes/parallel)
+    ENDIF(MPIC_FOUND)
+  ENDIF(BUILD_CPODES)
+
+  # Always add the nvector serial examples
+  ADD_SUBDIRECTORY(examples/nvector/serial)
+
+  IF(MPIC_FOUND)
+      ADD_SUBDIRECTORY(examples/nvector/parallel)
+  ENDIF(MPIC_FOUND)
+  
+  IF(SUNDIALS_HYPRE)
+      ADD_SUBDIRECTORY(examples/nvector/parhyp)
+  ENDIF(SUNDIALS_HYPRE)
+
+  IF(PTHREADS_FOUND)
+      ADD_SUBDIRECTORY(examples/nvector/pthreads)
+  ENDIF(PTHREADS_FOUND)
+
+  IF(OPENMP_FOUND)
+      ADD_SUBDIRECTORY(examples/nvector/C_openmp)
+  ENDIF(OPENMP_FOUND)
+  
+  IF(PETSC_FOUND)
+      ADD_SUBDIRECTORY(examples/nvector/petsc)
+  ENDIF(PETSC_FOUND)
+  
+ENDIF(EXAMPLES_ENABLE)
+
+#----------------------------------
+# Install configuration header file
+#----------------------------------
+
+# install configured header file
+INSTALL(
+  FILES ${PROJECT_BINARY_DIR}/include/sundials/sundials_config.h
+  DESTINATION include/sundials
+  )
+
diff --git a/INSTALL_GUIDE.pdf b/INSTALL_GUIDE.pdf
new file mode 100644
index 0000000..e3a1959
Binary files /dev/null and b/INSTALL_GUIDE.pdf differ
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5675f1d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,67 @@
+Copyright (c) 2002-2016, Lawrence Livermore National Security. 
+Produced at the Lawrence Livermore National Laboratory.
+Written by A.C. Hindmarsh, D.R. Reynolds, R. Serban, C.S. Woodward,
+S.D. Cohen, A.G. Taylor, S. Peles, L.E. Banks, and D. Shumaker.
+LLNL-CODE-667205    (ARKODE)
+UCRL-CODE-155951    (CVODE)
+UCRL-CODE-155950    (CVODES)
+UCRL-CODE-155952    (IDA)
+UCRL-CODE-237203    (IDAS)
+LLNL-CODE-665877    (KINSOL)
+All rights reserved. 
+
+This file is part of SUNDIALS.  For details, 
+see http://computation.llnl.gov/projects/sundials
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the disclaimer below.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the disclaimer (as noted below)
+in the documentation and/or other materials provided with the
+distribution.
+
+3. Neither the name of the LLNS/LLNL nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
+LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF 
+ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Additional BSD Notice
+---------------------
+1. This notice is required to be provided under our contract with
+the U.S. Department of Energy (DOE). This work was produced at
+Lawrence Livermore National Laboratory under Contract 
+No. DE-AC52-07NA27344 with the DOE.
+
+2. Neither the United States Government nor Lawrence Livermore 
+National Security, LLC nor any of their employees, makes any warranty, 
+express or implied, or assumes any liability or responsibility for the
+accuracy, completeness, or usefulness of any information, apparatus,
+product, or process disclosed, or represents that its use would not
+infringe privately-owned rights.
+
+3. Also, reference herein to any specific commercial products, process, 
+or services by trade name, trademark, manufacturer or otherwise does 
+not necessarily constitute or imply its endorsement, recommendation, 
+or favoring by the United States Government or Lawrence Livermore 
+National Security, LLC. The views and opinions of authors expressed 
+herein do not necessarily state or reflect those of the United States 
+Government or Lawrence Livermore National Security, LLC, and shall 
+not be used for advertising or product endorsement purposes.
+
diff --git a/README b/README
new file mode 100644
index 0000000..dd71714
--- /dev/null
+++ b/README
@@ -0,0 +1,60 @@
+                            SUNDIALS 
+    SUite of Nonlinear and DIfferential/ALgebraic equation Solvers
+                   Release 2.6.2, August 2015
+      Alan Hindmarsh, Daniel Reynolds, Radu Serban, Carol Woodward
+           Center for Applied Scientific Computing, LLNL
+
+The family of solvers referred to as SUNDIALS consists of the following solvers:
+ ARKODE - for integration of ordinary differential equation systems (ODEs)
+          ARKODE treats stiff, nonstiff and multi-rate ODE systems of the form
+          y' = fe(t,y) + fi(t,y), y(t0) = y0
+ CVODE  - for integration of ordinary differential equation systems (ODEs)
+          CVODE treats stiff and nonstiff ODE systems of the form
+          y' = f(t,y), y(t0) = y0
+ CVODES - for integration and sensitivity analysis of ODEs
+          CVODES treats stiff and nonstiff ODE systems of the form
+          y' = f(t,y,p), y(t0) = y0(p)
+ IDA    - for integration of differential-algebraic equation systems (DAEs)
+          IDA treats DAE systems of the form
+          F(t,y,y') = 0, y(t0) = y0, y'(t0) = y0'
+ IDAS   - for integration and sensitivity analysis of DAEs
+          IDAS treats DAE systems of the form
+          F(t,y,y',p) = 0, y(t0) = y0(p), y'(t0) = y0'(p)
+ KINSOL - for solution of nonlinear algebraic systems
+          KINSOL treats nonlinear systems of the form
+          F(u) = 0
+
+The various solvers of this family share many subordinate modules.
+For this reason, it is organized as a family, with a directory structure 
+that exploits that sharing. Each individual solver includes documentation 
+on installation, along with full usage documentation.
+
+Warning to users who receive more than one of these individual solvers
+at different times: The mixing of old and new versions of SUNDIALS may fail.  
+To avoid such failures, obtain all desired solvers at the same time.
+
+For installation directions see the file INSTALL_GUIDE.pdf.
+
+Release history:
+
++----------+----------------------------------------------------------------------------+
+|          | SUNDIALS |                             Solver version                      |
+|   Date   |          +----------+----------+----------+----------+---------------------+
+|          | release  |  ARKODE  |   CVODE  | CVODES   |   IDA    |   IDAS   |  KINSOL  |
++----------+----------+----------+----------+----------+----------+---------------------+
+| Sep 2016 |   2.7.0  |  1.1.0   |  2.9.0   |  2.9.0   |  2.9.0   |  1.3.0   |  2.9.0   |
+| Aug 2015 |   2.6.2  |  1.0.2   |  2.8.2   |  2.8.2   |  2.8.2   |  1.2.2   |  2.8.2   |
+| Mar 2015 |   2.6.1  |  1.0.1   |  2.8.1   |  2.8.1   |  2.8.1   |  1.2.1   |  2.8.1   |
+| Mar 2015 |   2.6.0  |  1.0.0   |  2.8.0   |  2.8.0   |  2.8.0   |  1.2.0   |  2.8.0   |
+| Mar 2012 |   2.5.0  |          |  2.7.0   |  2.7.0   |  2.7.0   |  1.1.0   |  2.7.0   |
+| May 2009 |   2.4.0  |          |  2.6.0   |  2.6.0   |  2.6.0   |  1.0.0   |  2.6.0   |
+| Nov 2006 |   2.3.0  |          |  2.5.0   |  2.5.0   |  2.5.0   |          |  2.5.0   |
+| Mar 2006 |   2.2.0  |          |  2.4.0   |  2.4.0   |  2.4.0   |          |  2.4.0   |
+| May 2005 |   2.1.1  |          |  2.3.0   |  2.3.0   |  2.3.0   |          |  2.3.0   |
+| Apr 2005 |   2.1.0  |          |  2.3.0   |  2.2.0   |  2.3.0   |          |  2.3.0   |
+| Mar 2005 |   2.0.2  |          |  2.2.2   |  2.1.2   |  2.2.2   |          |  2.2.2   |
+| Jan 2005 |   2.0.1  |          |  2.2.1   |  2.1.1   |  2.2.1   |          |  2.2.1   |
+| Dec 2004 |   2.0    |          |  2.2.0   |  2.1.0   |  2.2.0   |          |  2.2.0   |
+| Jul 2002 |   1.0    |          |    2.0   |    1.0   |    2.0   |          |    2.0   |
++----------+----------+----------+----------+----------+----------+---------------------+
+
diff --git a/config/FindHypre.cmake b/config/FindHypre.cmake
new file mode 100644
index 0000000..3116792
--- /dev/null
+++ b/config/FindHypre.cmake
@@ -0,0 +1,47 @@
+# ---------------------------------------------------------------
+# $Revision: 4713 $
+# $Date: 2016-03-28 07:20:43 -0700 (Mon, 28 Mar 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Slaven Peles @ LLNL, Jean Sexton @ SMU,
+#              Eddy Banks @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# - Find hypre
+
+#  HYPRE_INCLUDE_DIR = cached location of HYPRE.h
+#  HYPRE_LIBRARY    = cached list of HYPRE library to link in
+
+### Find include dir
+find_path(temp_HYPRE_INCLUDE_DIR hypre.h ${HYPRE_INCLUDE_DIR})
+if (temp_HYPRE_INCLUDE_DIR)
+    set(HYPRE_INCLUDE_DIR ${temp_HYPRE_INCLUDE_DIR})
+endif()
+unset(temp_HYPRE_INCLUDE_DIR CACHE)
+    
+if (HYPRE_LIBRARY)
+    # We have (or were given) HYPRE_LIBRARY - get path to use for any related libs
+    get_filename_component(HYPRE_LIBRARY_DIR ${HYPRE_LIBRARY} PATH)
+
+    # force CACHE update to show user DIR that will be used
+    set(HYPRE_LIBRARY_DIR ${HYPRE_LIBRARY_DIR} CACHE PATH "" FORCE)
+    
+else ()
+    # find library with user provided directory path
+    set(HYPRE_LIBRARY_NAMES hypre HYPRE)
+    find_library(HYPRE_LIBRARY 
+      NAMES ${HYPRE_LIBRARY_NAMES}
+      PATHS ${HYPRE_LIBRARY_DIR} NO_DEFAULT_PATH
+      )
+endif ()
+mark_as_advanced(HYPRE_LIBRARY)
+
+set(HYPRE_LIBRARIES ${HYPRE_LIBRARY})
diff --git a/config/FindKLU.cmake b/config/FindKLU.cmake
new file mode 100644
index 0000000..d80bb6e
--- /dev/null
+++ b/config/FindKLU.cmake
@@ -0,0 +1,73 @@
+# ---------------------------------------------------------------
+# $Revision: 4957 $
+# $Date: 2016-09-23 12:21:47 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Steven Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# Find KLU library.
+# 
+# Set library prefixes for Windows
+IF(WIN32)
+  set(CMAKE_FIND_LIBRARY_PREFIXES lib ${CMAKE_FIND_LIBRARY_PREFIXES})
+endif()
+
+### Find include dir
+find_path(temp_KLU_INCLUDE_DIR klu.h ${KLU_INCLUDE_DIR})
+if (temp_KLU_INCLUDE_DIR)
+    set(KLU_INCLUDE_DIR ${temp_KLU_INCLUDE_DIR})
+endif()
+unset(temp_KLU_INCLUDE_DIR CACHE)
+    
+if (KLU_LIBRARY)
+    # We have (or were given) KLU_LIBRARY - get path to use for other Suitesparse libs
+    get_filename_component(KLU_LIBRARY_DIR ${KLU_LIBRARY} PATH)
+
+    # force CACHE update to show user DIR that will be used
+    set(KLU_LIBRARY_DIR ${KLU_LIBRARY_DIR} CACHE PATH "" FORCE)
+    
+else ()
+    # find library with user provided directory path
+    set(KLU_LIBRARY_NAME klu)
+    find_library(KLU_LIBRARY ${KLU_LIBRARY_NAME} ${KLU_LIBRARY_DIR} NO_DEFAULT_PATH)
+endif ()
+mark_as_advanced(KLU_LIBRARY)
+
+if (NOT AMD_LIBRARY)
+    set(AMD_LIBRARY_NAME amd)
+    FIND_LIBRARY(AMD_LIBRARY ${AMD_LIBRARY_NAME} ${KLU_LIBRARY_DIR} NO_DEFAULT_PATH)
+    mark_as_advanced(AMD_LIBRARY)
+endif ()
+
+if (NOT COLAMD_LIBRARY)
+    set(COLAMD_LIBRARY_NAME colamd)
+    FIND_LIBRARY(COLAMD_LIBRARY ${COLAMD_LIBRARY_NAME} ${KLU_LIBRARY_DIR} NO_DEFAULT_PATH)
+    mark_as_advanced(COLAMD_LIBRARY)
+endif ()
+
+if (NOT BTF_LIBRARY)
+    set(BTF_LIBRARY_NAME btf)
+    FIND_LIBRARY( BTF_LIBRARY ${BTF_LIBRARY_NAME} ${KLU_LIBRARY_DIR} NO_DEFAULT_PATH)
+    mark_as_advanced(BTF_LIBRARY)
+endif ()
+
+if (NOT SUITESPARSECONFIG_LIBRARY)
+    set(SUITESPARSECONFIG_LIBRARY_NAME suitesparseconfig)
+    # NOTE: no prefix for this library on windows
+    if (WIN32)
+        set(CMAKE_FIND_LIBRARY_PREFIXES "")
+    endif()
+    FIND_LIBRARY( SUITESPARSECONFIG_LIBRARY ${SUITESPARSECONFIG_LIBRARY_NAME} ${KLU_LIBRARY_DIR} NO_DEFAULT_PATH)
+    mark_as_advanced(SUITESPARSECONFIG_LIBRARY)
+endif ()
+
+set(KLU_LIBRARIES ${KLU_LIBRARY} ${AMD_LIBRARY} ${COLAMD_LIBRARY} ${BTF_LIBRARY} ${SUITESPARSECONFIG_LIBRARY})
diff --git a/config/FindMPI.cmake b/config/FindMPI.cmake
new file mode 100644
index 0000000..f0c5f0c
--- /dev/null
+++ b/config/FindMPI.cmake
@@ -0,0 +1,36 @@
+# - Find MPI
+# This module looks for MPI (Message Passing Interface) support
+# it will define the following values
+#  MPI_INCLUDE_PATH = cached location of mpi.h
+#  MPI_LIBRARIES    = cached list of libraries to link in (mpi mpich etc)
+
+FIND_PATH(MPI_INCLUDE_PATH mpi.h
+  PATHS /usr/local/include 
+  /usr/include 
+  /usr/include/mpi
+  /usr/local/mpi/include
+  "$ENV{ProgramFiles}/MPICH/SDK/Include"
+  "$ENV{ProgramFiles}/MPICH2/include"
+  "C:/Program Files/MPICH/SDK/Include"
+  )
+
+FIND_LIBRARY(MPI_LIBRARIES
+  NAMES mpich2 mpi mpich 
+  PATHS /usr/lib /usr/local/lib /usr/local/mpi/lib
+  "$ENV{ProgramFiles}/MPICH/SDK/Lib"
+  "$ENV{ProgramFiles}/MPICH2/Lib"
+  "C:/Program Files/MPICH/SDK/Lib" 
+  )
+
+FIND_LIBRARY(MPI_EXTRA_LIBRARIES 
+  NAMES mpi++
+  PATHS /usr/lib /usr/local/lib /usr/local/mpi/lib 
+  "$ENV{ProgramFiles}/MPICH/SDK/Lib"
+  "C:/Program Files/MPICH/SDK/Lib" 
+  DOC "If a second mpi library is necessary, specify it here.")
+MARK_AS_ADVANCED(MPI_EXTRA_LIBRARIES)
+
+IF(MPI_EXTRA_LIBRARIES)
+  SET(MPI_LIBRARIES ${MPI_LIBRARIES} ${MPI_EXTRA_LIBRARIES})
+ENDIF(MPI_EXTRA_LIBRARIES)
+
diff --git a/config/FindPETSc.cmake b/config/FindPETSc.cmake
new file mode 100644
index 0000000..7c1f736
--- /dev/null
+++ b/config/FindPETSc.cmake
@@ -0,0 +1,48 @@
+# ---------------------------------------------------------------
+# $Revision:  $
+# $Date:  $
+# ---------------------------------------------------------------
+# Programmer:  Steven Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# Find PETSC library.
+# 
+
+IF(WIN32)
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
+endif(WIN32)
+
+### Find include dir
+find_path(temp_PETSC_INCLUDE_DIR petsc.h ${PETSC_INCLUDE_DIR})
+if (temp_PETSC_INCLUDE_DIR)
+    set(PETSC_INCLUDE_DIR ${temp_PETSC_INCLUDE_DIR})
+endif()
+unset(temp_PETSC_INCLUDE_DIR CACHE)
+
+if (PETSC_LIBRARY)
+    # We have (or were given) PETSC_LIBRARY - get path to use for any related libs
+    get_filename_component(PETSC_LIBRARY_DIR ${PETSC_LIBRARY} PATH)
+    
+    # force CACHE update to show user DIR that will be used
+    set(PETSC_LIBRARY_DIR ${PETSC_LIBRARY_DIR} CACHE PATH "" FORCE)
+    
+else ()
+    # find library with user provided directory path
+    set(PETSC_LIBRARY_NAMES petsc PETSC)
+    find_library(PETSC_LIBRARY 
+      NAMES ${PETSC_LIBRARY_NAMES}
+      PATHS ${PETSC_LIBRARY_DIR} NO_DEFAULT_PATH
+      )
+endif ()
+mark_as_advanced(PETSC_LIBRARY)
+
+set(PETSC_LIBRARIES ${PETSC_LIBRARY})
diff --git a/config/FindSUPERLUMT.cmake b/config/FindSUPERLUMT.cmake
new file mode 100644
index 0000000..25c4c3f
--- /dev/null
+++ b/config/FindSUPERLUMT.cmake
@@ -0,0 +1,85 @@
+# ---------------------------------------------------------------
+# $Revision: 4957 $
+# $Date: 2016-09-23 12:21:47 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Eddy Banks @ LLNL
+# ---------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# SUPERLUMT tests for SUNDIALS CMake-based configuration.
+# 
+
+# make sure valid thread type - if not, then warn and return
+STRING(TOUPPER "${SUPERLUMT_THREAD_TYPE}" SUPERLUMT_THREAD_TYPE_UPPER)
+If(SUPERLUMT_THREAD_TYPE AND NOT SUPERLUMT_THREAD_TYPE_UPPER STREQUAL "OPENMP" AND NOT SUPERLUMT_THREAD_TYPE_UPPER STREQUAL "PTHREAD")
+    PRINT_WARNING("Unknown thread type: ${SUPERLUMT_THREAD_TYPE}" "Please enter Pthread or OpenMP")
+ENDIF(SUPERLUMT_THREAD_TYPE AND NOT SUPERLUMT_THREAD_TYPE_UPPER STREQUAL "OPENMP" AND NOT SUPERLUMT_THREAD_TYPE_UPPER STREQUAL "PTHREAD")
+
+# find the SUPERLUMT include directory path
+IF(SUPERLUMT_THREAD_TYPE)
+    # if have user input for thread type - set postfix of library name
+    set(POST ${SUPERLUMT_THREAD_TYPE_UPPER})
+
+    ### Find include dir
+    find_path(temp_SUPERLUMT_INCLUDE_DIR slu_mt_ddefs.h ${SUPERLUMT_INCLUDE_DIR})
+    if (temp_SUPERLUMT_INCLUDE_DIR)
+        set(SUPERLUMT_INCLUDE_DIR ${temp_SUPERLUMT_INCLUDE_DIR})
+    endif()
+    unset(temp_SUPERLUMT_INCLUDE_DIR CACHE)
+    
+ENDIF(SUPERLUMT_THREAD_TYPE)
+
+IF(MSVC)
+  SET(CMAKE_FIND_LIBRARY_PREFIXES lib ${CMAKE_FIND_LIBRARY_PREFIXES})
+ENDIF()
+
+if(SUPERLUMT_LIBRARY)
+    get_filename_component(SUPERLUMT_LIBRARY_DIR ${SUPERLUMT_LIBRARY} PATH)
+    set(SUPERLUMT_LIBRARY_DIR ${SUPERLUMT_LIBRARY_DIR} CACHE PATH "" FORCE)
+    
+else()
+    # find library with user provided directory path
+    set(SUPERLUMT_LIBRARY_NAME superlu_mt_${POST})
+    find_library(SUPERLUMT_LIBRARY ${SUPERLUMT_LIBRARY_NAME} ${SUPERLUMT_LIBRARY_DIR} NO_DEFAULT_PATH)
+endif()
+mark_as_advanced(SUPERLUMT_LIBRARY)
+    
+# add threading library (pthread or openmp)
+If(SUPERLUMT_THREAD_TYPE_UPPER STREQUAL "PTHREAD")
+  # add pthread to libraries
+  find_library(SUPERLUMT_THREAD_LIBRARY
+      NAMES pthread
+      PATHS /usr/lib /usr/local/lib
+      "$ENV{ProgramFiles}/SUPERLUMT/Lib"
+      )
+ELSE(SUPERLUMT_THREAD_TYPE_UPPER STREQUAL "OPENMP")
+  # add openmp to libraries
+  find_package( OpenMP REQUIRED)
+  if(OPENMP_FOUND)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+    #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
+  endif()  
+ENDIF()
+mark_as_advanced(SUPERLUMT_THREAD_LIBRARY)
+
+# add to SUPERLUMT_LIBRARIES (Note: will be 'not found' if either are not found 
+set(SUPERLUMT_LIBRARIES ${SUPERLUMT_LIBRARY} ${SUPERLUMT_THREAD_LIBRARY})
+
+# If LAPACK/BLAS not enabled - find BLAS with SUPERLUMT
+if(NOT LAPACK_ENABLE)
+    set(SUPERLUMT_BLAS_LIBRARY_NAME blas_${POST})
+    
+    #unset(SUPERLUMT_BLAS_LIBRARIES CACHE)
+    FIND_LIBRARY(SUPERLUMT_BLAS_LIBRARIES ${SUPERLUMT_BLAS_LIBRARY_NAME} ${SUPERLUMT_LIBRARY_DIR} NO_DEFAULT_PATH)
+    
+    if (NOT SUPERLUMT_BLAS_LIBRARIES)
+      PRINT_WARNING("Can't find SUPERLUMT_BLAS_LIBRARY" "Try setting LAPACK_ENABLE to ON")
+    else ()
+      set(SUPERLUMT_LIBRARIES ${SUPERLUMT_LIBRARIES} ${SUPERLUMT_BLAS_LIBRARIES})
+    endif ()
+    mark_as_advanced(SUPERLUMT_BLAS_LIBRARIES)
+endif(NOT LAPACK_ENABLE)
diff --git a/config/SundialsAddTest.cmake b/config/SundialsAddTest.cmake
new file mode 100644
index 0000000..3ce3bf8
--- /dev/null
+++ b/config/SundialsAddTest.cmake
@@ -0,0 +1,93 @@
+# ---------------------------------------------------------------
+# Author:  Steven Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2013, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+#
+# SUNDIALS_ADD_TEST(<test name> <executable> )
+# 
+# Add Sundials regression test.
+
+# Executable is run and output is compared with output in the
+# test/answers directory.  If output differs significantly then test
+# fails.  Default signicance is 4 decimal points for floating values
+# and 10% for integer values.
+
+IF(EXAMPLES_ENABLE)
+
+  find_package(PythonInterp)
+  IF(${PYTHON_VERSION_MAJOR} LESS 3)
+      IF(${PYTHON_VERSION_MINOR} LESS 7)
+	message( WARNING "***************************************************************************\nWARNING\nPython version must be 2.7.x or greater in order to run regression tests.\nExamples will build but 'make test' will fail.\n***************************************************************************")
+      ENDIF()
+  ENDIF()
+
+  FIND_PROGRAM(TESTRUNNER testRunner PATHS test)
+ENDIF(EXAMPLES_ENABLE)
+
+macro(SUNDIALS_ADD_TEST NAME EXECUTABLE)
+
+  set(options "")
+  set(oneValueArgs "MPI_NPROCS" "ANSWER_FILE" "FLOAT_PRECISION" "INTEGER_PERCENTAGE")
+  set(multiValueArgs "TEST_ARGS")
+
+  CMAKE_PARSE_ARGUMENTS(SUNDIALS_ADD_TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+  # SGS add check to make sure parallel is integer
+  # SGS add check for float and integer precision
+
+  set(TEST_ARGS  "-v" "--testname=${NAME}" 
+    "--executablename=$<TARGET_FILE:${EXECUTABLE}>"
+    "--answersdir=${CMAKE_SOURCE_DIR}/test/answers"
+    "--outputdir=${CMAKE_BINARY_DIR}/Testing/output"
+    )
+
+  IF("${SUNDIALS_ADD_TEST_MPI_NPROCS}" STREQUAL "")
+  ELSE()
+
+    IF(MPI_ENABLE)
+      IF(MPI_RUN_COMMAND MATCHES "srun")
+	set(RUN_COMMAND "srun -N1 -n${SUNDIALS_ADD_TEST_MPI_NPROCS} -ppdebug")
+      ELSE(MPI_RUN_COMMAND MATCHES "srun")
+	set(RUN_COMMAND "mpirun -n ${SUNDIALS_ADD_TEST_MPI_NPROCS}")
+      ENDIF(MPI_RUN_COMMAND MATCHES "srun")
+      
+      LIST(APPEND TEST_ARGS "--runcommand=\"${RUN_COMMAND}\"")
+
+    ENDIF(MPI_ENABLE)
+
+  ENDIF()
+  
+  IF("${SUNDIALS_ADD_TEST_TEST_ARGS}" STREQUAL "")
+  ELSE()
+    string (REPLACE ";" " " USER_ARGS "${SUNDIALS_ADD_TEST_TEST_ARGS}")
+    LIST(APPEND TEST_ARGS "--runargs=\"${USER_ARGS}\"")
+  ENDIF()
+
+  IF("${SUNDIALS_ADD_TEST_ANSWER_FILE}" STREQUAL "")
+  ELSE()
+    LIST(APPEND TEST_ARGS "--answerfile=${SUNDIALS_ADD_TEST_ANSWER_FILE}")
+  ENDIF()
+
+  IF("${SUNDIALS_ADD_TEST_FLOAT_PRECISION}" STREQUAL "")
+  ELSE()
+    LIST(APPEND TEST_ARGS "--floatprecision=${SUNDIALS_ADD_TEST_FLOAT_PRECISION}")
+  ENDIF()
+
+  IF("${SUNDIALS_ADD_TEST_INTEGER_PERCENTAGE}" STREQUAL "")
+  ELSE()
+    LIST(APPEND TEST_ARGS "--integerpercentage=${SUNDIALS_ADD_TEST_INTEGER_PERCENTAGE}")
+  ENDIF()
+
+  ADD_TEST(NAME ${NAME}
+    COMMAND ${PYTHON_EXECUTABLE} ${TESTRUNNER} ${TEST_ARGS})
+
+endmacro()
diff --git a/config/SundialsCXX.cmake b/config/SundialsCXX.cmake
new file mode 100644
index 0000000..14a757a
--- /dev/null
+++ b/config/SundialsCXX.cmake
@@ -0,0 +1,61 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# C++-related tests for SUNDIALS CMake-based configuration.
+
+set(CXX_FOUND FALSE)
+
+include(CMakeDetermineCXXCompiler)
+
+if(CMAKE_CXX_COMPILER)
+  message(STATUS "Searching for a C++ compiler... ${CMAKE_CXX_COMPILER}")
+  # Enable the language for next steps
+  enable_language(CXX)
+  mark_as_advanced(CLEAR 
+    CMAKE_CXX_COMPILER
+    CMAKE_CXX_FLAGS
+    CMAKE_CXX_FLAGS_DEBUG
+    CMAKE_CXX_FLAGS_MINSIZEREL
+    CMAKE_CXX_FLAGS_RELEASE
+    CMAKE_CXX_FLAGS_RELWITHDEB)
+  # Create the CXXTest directory
+  set(CXXTest_DIR ${PROJECT_BINARY_DIR}/CXXTest)
+  file(MAKE_DIRECTORY ${CXXTest_DIR})
+  # Create a CMakeLists.txt file which will generate the executable "cxxtest"
+  file(WRITE ${CXXTest_DIR}/CMakeLists.txt
+    "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+    "PROJECT(cxxtest CXX)\n"
+    "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+    "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+    "SET(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS}\")\n"
+    "SET(CMAKE_CXX_FLAGS_RELEASE \"${CMAKE_CXX_FLAGS_RELEASE}\")\n"
+    "SET(CMAKE_CXX_FLAGS_DEBUG \"${CMAKE_CXX_FLAGS_DEBUG}\")\n"
+    "SET(CMAKE_CXX_FLAGS_RELWITHDEBUGINFO \"${CMAKE_CXX_FLAGS_RELWITHDEBUGINFO}\")\n"
+    "SET(CMAKE_CXX_FLAGS_MINSIZE \"${CMAKE_CXX_FLAGS_MINSIZE}\")\n"
+    "ADD_EXECUTABLE(cxxtest cxxtest.cpp)\n")
+  # Create the C++ source cxxtest.cpp which does some simple calls
+  file(WRITE ${CXXTest_DIR}/cxxtest.cpp
+    "#include <string>\n"
+    "int main(){\n"
+    "std::string c;\n"
+    "return(0);\n"
+    "}\n")
+  # Use TRY_COMPILE to make the target "cxxtest"
+  try_compile(CXXTEST_OK ${CXXTest_DIR} ${CXXTest_DIR}
+    ftest OUTPUT_VARIABLE MY_OUTPUT)
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${CXXTest_DIR}/CMakeFiles)
+  # Proceed based on test results
+  if(CXXTEST_OK)
+    message(STATUS "Trying to compile and link a simple C++ program... OK")
+    set(CXX_FOUND TRUE)
+  endif(CXXTEST_OK)
+else(CMAKE_CXX_COMPILER)
+  message(STATUS "Searching for a C++ compiler... FAILED")
+endif(CMAKE_CXX_COMPILER)
+
diff --git a/config/SundialsFortran.cmake b/config/SundialsFortran.cmake
new file mode 100644
index 0000000..4fe16e7
--- /dev/null
+++ b/config/SundialsFortran.cmake
@@ -0,0 +1,179 @@
+# ---------------------------------------------------------------
+# $Revision: 4511 $
+# $Date: 2015-06-29 16:48:09 -0700 (Mon, 29 Jun 2015) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# Copyright (c) 2008, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# Fortran-related tests for SUNDIALS CMake-based configuration.
+#
+# Determining the name-mangling scheme
+# ------------------------------------
+# In general, names of symbols with and without underscore may be mangled 
+# differently (e.g. g77 mangles mysub to mysub_ and my_sub to my_sub__),
+# we have to consider both cases.
+# Method:
+#  1) create a library from a Fortran source file which defines a function "mysub"
+#  2) attempt to link with this library a C source file which calls the "mysub"
+#     function using various possible schemes (6 different schemes, corresponding
+#     to all combinations lower/upper case and none/one/two underscores)
+#  3) define the name-mangling scheme based on the test that was successful.
+# On exit, if we were able to infer the scheme, the variables
+# CMAKE_Fortran_SCHEME_NO_UNDERSCORES and CMAKE_Fortran_SCHEME_WITH_UNDERSCORES
+# contain the mangled names for "mysub" and "my_sub", respectively.
+
+set(F77_FOUND FALSE)
+set(F77SCHEME_FOUND FALSE)
+
+set(CMAKE_Fortran_SCHEME_NO_UNDERSCORES "")
+set(CMAKE_Fortran_SCHEME_WITH_UNDERSCORES "")
+
+include(CMakeDetermineFortranCompiler)
+
+if(CMAKE_Fortran_COMPILER)
+  message(STATUS "Searching for a Fortran compiler... ${CMAKE_Fortran_COMPILER}")
+  # Enable the language for next steps
+  enable_language(Fortran)
+  mark_as_advanced(CLEAR 
+    CMAKE_Fortran_COMPILER
+    CMAKE_Fortran_FLAGS
+    CMAKE_Fortran_FLAGS_DEBUG
+    CMAKE_Fortran_FLAGS_MINSIZEREL
+    CMAKE_Fortran_FLAGS_RELEASE
+    CMAKE_Fortran_FLAGS_RELWITHDEB)
+  # Create the FortranTest directory
+  set(FortranTest_DIR ${PROJECT_BINARY_DIR}/FortranTest)
+  file(MAKE_DIRECTORY ${FortranTest_DIR})
+  # Create a CMakeLists.txt file which will generate the "flib" library
+  # and an executable "ftest"
+  file(WRITE ${FortranTest_DIR}/CMakeLists.txt
+    "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+    "PROJECT(ftest Fortran)\n"
+    "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+    "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+    "SET(CMAKE_Fortran_FLAGS \"${CMAKE_Fortran_FLAGS}\")\n"
+    "SET(CMAKE_Fortran_FLAGS_RELEASE \"${CMAKE_Fortran_FLAGS_RELEASE}\")\n"
+    "SET(CMAKE_Fortran_FLAGS_DEBUG \"${CMAKE_Fortran_FLAGS_DEBUG}\")\n"
+    "SET(CMAKE_Fortran_FLAGS_RELWITHDEBUGINFO \"${CMAKE_Fortran_FLAGS_RELWITHDEBUGINFO}\")\n"
+    "SET(CMAKE_Fortran_FLAGS_MINSIZE \"${CMAKE_Fortran_FLAGS_MINSIZE}\")\n"
+    "ADD_LIBRARY(flib flib.f)\n"
+    "ADD_EXECUTABLE(ftest ftest.f)\n"
+    "TARGET_LINK_LIBRARIES(ftest flib)\n")
+  # Create the Fortran source flib.f which defines two subroutines, "mysub" and "my_sub"
+  file(WRITE ${FortranTest_DIR}/flib.f
+    "        SUBROUTINE mysub\n"
+    "        RETURN\n"
+    "        END\n"
+    "        SUBROUTINE my_sub\n"
+    "        RETURN\n"
+    "        END\n")
+  # Create the Fortran source ftest.f which calls "mysub" and "my_sub"
+  file(WRITE ${FortranTest_DIR}/ftest.f
+    "        PROGRAM ftest\n"
+    "        CALL mysub()\n"
+    "        CALL my_sub()\n"
+    "        END\n")
+  # Use TRY_COMPILE to make the targets "flib" and "ftest"
+  try_compile(FTEST_OK ${FortranTest_DIR} ${FortranTest_DIR}
+    ftest OUTPUT_VARIABLE MY_OUTPUT)
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${FortranTest_DIR}/CMakeFiles)
+  # Proceed based on test results
+  if(FTEST_OK)
+    message(STATUS "Trying to compile and link a simple Fortran program... OK")
+    set(F77_FOUND TRUE)
+    # Infer Fortran name-mangling scheme for symbols WITHOUT underscores.
+    # Overwrite CMakeLists.txt with one which will generate the "ctest1" executable
+    file(WRITE ${FortranTest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(ctest1 C)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+      "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+      "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+      "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+      "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+      "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+      "ADD_EXECUTABLE(ctest1 ctest1.c)\n"
+      "FIND_LIBRARY(FLIB flib ${FortranTest_DIR})\n"
+      "TARGET_LINK_LIBRARIES(ctest1 \${FLIB})\n")
+    # Define the list "options" of all possible schemes that we want to consider
+    # Get its length and initialize the counter "iopt" to zero
+    set(options mysub mysub_ mysub__ MYSUB MYSUB_ MYSUB__)
+    list(LENGTH options imax)
+    set(iopt 0)
+    # We will attempt to sucessfully generate the "ctest1" executable as long as
+    # there still are entries in the "options" list
+    while(${iopt} LESS ${imax})   
+      # Get the current list entry (current scheme)
+      list(GET options ${iopt} opt)
+      # Generate C source which calls the "mysub" function using the current scheme
+      file(WRITE ${FortranTest_DIR}/ctest1.c "int main(){${opt}();return(0);}\n")
+      # Use TRY_COMPILE to make the "ctest1" executable from the current C source
+      # and linking to the previously created "flib" library.
+      try_compile(CTEST_OK ${FortranTest_DIR} ${FortranTest_DIR}
+        ctest1 OUTPUT_VARIABLE MY_OUTPUT)
+      # To ensure we do not use stuff from the previous attempts, 
+      # we must remove the CMakeFiles directory.
+      file(REMOVE_RECURSE ${FortranTest_DIR}/CMakeFiles)
+      # Test if we successfully created the "ctest" executable.
+      # If yes, save the current scheme, and set the counter "iopt" to "imax" 
+      # so that we exit the while loop.
+      # Otherwise, increment the counter "iopt" and go back in the while loop.
+      if(CTEST_OK)
+        set(CMAKE_Fortran_SCHEME_NO_UNDERSCORES ${opt})
+        set(iopt ${imax})
+      else(CTEST_OK)
+        math(EXPR iopt ${iopt}+1)
+      endif(CTEST_OK)
+    endwhile(${iopt} LESS ${imax})   
+    # Infer Fortran name-mangling scheme for symbols WITH underscores.
+    # Practically a duplicate of the previous steps.
+    file(WRITE ${FortranTest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(ctest2 C)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+      "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+      "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+      "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+      "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+      "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+      "ADD_EXECUTABLE(ctest2 ctest2.c)\n"
+      "FIND_LIBRARY(FLIB flib ${FortranTest_DIR})\n"
+      "TARGET_LINK_LIBRARIES(ctest2 \${FLIB})\n")
+    set(options my_sub my_sub_ my_sub__ MY_SUB MY_SUB_ MY_SUB__)
+    list(LENGTH options imax)
+    set(iopt 0)
+    while(${iopt} LESS ${imax})   
+      list(GET options ${iopt} opt)
+      file(WRITE ${FortranTest_DIR}/ctest2.c "int main(){${opt}();return(0);}\n")
+      try_compile(CTEST_OK ${FortranTest_DIR} ${FortranTest_DIR}
+        ctest2 OUTPUT_VARIABLE MY_OUTPUT)
+      file(REMOVE_RECURSE ${FortranTest_DIR}/CMakeFiles)
+      if(CTEST_OK)
+        set(CMAKE_Fortran_SCHEME_WITH_UNDERSCORES ${opt})
+        set(iopt ${imax})
+      else(CTEST_OK)
+        math(EXPR iopt ${iopt}+1)
+      endif(CTEST_OK)
+    endwhile(${iopt} LESS ${imax})   
+    # Proceed based on whether the previous tests were successfull or not
+    if(CMAKE_Fortran_SCHEME_NO_UNDERSCORES AND CMAKE_Fortran_SCHEME_WITH_UNDERSCORES)
+      message(STATUS "Determining Fortran name-mangling scheme... OK")
+      set(F77SCHEME_FOUND TRUE)
+    else(CMAKE_Fortran_SCHEME_NO_UNDERSCORES AND CMAKE_Fortran_SCHEME_WITH_UNDERSCORES)
+      message(STATUS "Determining Fortran name-mangling scheme... FAILED")
+    endif(CMAKE_Fortran_SCHEME_NO_UNDERSCORES AND CMAKE_Fortran_SCHEME_WITH_UNDERSCORES)
+  else(FTEST_OK)
+    message(STATUS "Trying to compile and link a simple Fortran program... FAILED")
+  endif(FTEST_OK)
+else(CMAKE_Fortran_COMPILER)
+  message(STATUS "Searching for a Fortran compiler... FAILED")
+endif(CMAKE_Fortran_COMPILER)
+
diff --git a/config/SundialsFortran90.cmake b/config/SundialsFortran90.cmake
new file mode 100644
index 0000000..efc9fe1
--- /dev/null
+++ b/config/SundialsFortran90.cmake
@@ -0,0 +1,72 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# Fortran90-related tests for SUNDIALS CMake-based configuration.
+
+set(F90_FOUND FALSE)
+include(CMakeDetermineFortranCompiler)
+
+if(CMAKE_Fortran_COMPILER)
+  message(STATUS "Searching for a Fortran compiler... ${CMAKE_Fortran_COMPILER}")
+  # Enable the language for next steps
+  enable_language(Fortran)
+  mark_as_advanced(CLEAR 
+    CMAKE_Fortran_COMPILER
+    CMAKE_Fortran_FLAGS
+    CMAKE_Fortran_FLAGS_DEBUG
+    CMAKE_Fortran_FLAGS_MINSIZEREL
+    CMAKE_Fortran_FLAGS_RELEASE
+    CMAKE_Fortran_FLAGS_RELWITHDEB)
+  # Create the Fortran90Test directory
+  set(Fortran90Test_DIR ${PROJECT_BINARY_DIR}/Fortran90Test)
+  file(MAKE_DIRECTORY ${Fortran90Test_DIR})
+  # Create a CMakeLists.txt file which will generate the "f90lib" library
+  # and an executable "f90test"
+  file(WRITE ${Fortran90Test_DIR}/CMakeLists.txt
+    "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+    "PROJECT(f90test Fortran)\n"
+    "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+    "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+    "SET(CMAKE_Fortran_FLAGS \"${CMAKE_Fortran_FLAGS}\")\n"
+    "SET(CMAKE_Fortran_FLAGS_RELEASE \"${CMAKE_Fortran_FLAGS_RELEASE}\")\n"
+    "SET(CMAKE_Fortran_FLAGS_DEBUG \"${CMAKE_Fortran_FLAGS_DEBUG}\")\n"
+    "SET(CMAKE_Fortran_FLAGS_RELWITHDEBUGINFO \"${CMAKE_Fortran_FLAGS_RELWITHDEBUGINFO}\")\n"
+    "SET(CMAKE_Fortran_FLAGS_MINSIZE \"${CMAKE_Fortran_FLAGS_MINSIZE}\")\n"
+    "ADD_LIBRARY(f90lib f90lib.f90)\n"
+    "ADD_EXECUTABLE(f90test f90test.f90)\n"
+    "TARGET_LINK_LIBRARIES(f90test f90lib)\n")
+  # Create the Fortran source f90lib.f90 which defines two subroutines, "mysub" and "my_sub"
+  file(WRITE ${Fortran90Test_DIR}/f90lib.f90
+    "subroutine mysub\n"
+    "  return\n"
+    "end\n"
+    "subroutine my_sub\n"
+    "  return\n"
+    "end\n")
+  # Create the Fortran source f90test.f90 which calls "mysub" and "my_sub"
+  file(WRITE ${Fortran90Test_DIR}/f90test.f90
+    "program f90test\n"
+    "  call mysub()\n"
+    "  call my_sub()\n"
+    "end\n")
+  # Use TRY_COMPILE to make the targets "f90lib" and "f90test"
+  try_compile(F90TEST_OK ${Fortran90Test_DIR} ${Fortran90Test_DIR}
+    f90test OUTPUT_VARIABLE MY_OUTPUT)
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${Fortran90Test_DIR}/CMakeFiles)
+  # Proceed based on test results
+  if(F90TEST_OK)
+    message(STATUS "Trying to compile and link a simple Fortran90 program... OK")
+    set(F90_FOUND TRUE)
+  else(F90TEST_OK)
+    message(STATUS "Trying to compile and link a simple Fortran90 program... FAILED")
+  endif(F90TEST_OK)
+else(CMAKE_Fortran_COMPILER)
+  message(STATUS "Searching for a Fortran compiler... FAILED")
+endif(CMAKE_Fortran_COMPILER)
+
diff --git a/config/SundialsHypre.cmake b/config/SundialsHypre.cmake
new file mode 100644
index 0000000..a065c6d
--- /dev/null
+++ b/config/SundialsHypre.cmake
@@ -0,0 +1,79 @@
+# ---------------------------------------------------------------
+# $Revision: 4713 $
+# $Date: 2016-03-28 07:20:43 -0700 (Mon, 28 Mar 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Slaven Peles @ LLNL, Jean Sexton @ SMU
+#              Eddy Banks @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# Hypre tests for SUNDIALS CMake-based configuration.
+# 
+### This is only set if running GUI - simply return first time enabled
+IF(HYPRE_DISABLED)
+  SET(HYPRE_DISABLED FALSE CACHE INTERNAL "GUI - now enabled" FORCE)
+  RETURN()
+ENDIF()
+
+set(HYPRE_FOUND FALSE)
+
+include(FindHypre)
+
+if(UNIX)
+  set(LINK_MATH_LIB "-lm")
+endif()
+
+if(HYPRE_LIBRARIES)
+  message(STATUS "Looking for HYPRE LIBRARIES...")
+  # Create the HYPRETest directory
+  set(HYPRETest_DIR ${PROJECT_BINARY_DIR}/HYPRETest)
+  file(MAKE_DIRECTORY ${HYPRETest_DIR})
+  # Create a CMakeLists.txt file 
+  file(WRITE ${HYPRETest_DIR}/CMakeLists.txt
+    "CMAKE_MINIMUM_REQUIRED(VERSION 2.2)\n"
+    "PROJECT(ltest C)\n"
+    "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+    "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+    "SET(CMAKE_C_COMPILER ${MPI_MPICC})\n"
+    "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+    "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+    "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+    "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+    "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+    "SET(CMAKE_EXE_LINKER_FLAGS \"${LINK_MATH_LIB}\")\n"
+    "INCLUDE_DIRECTORIES(${HYPRE_INCLUDE_DIR})\n"
+    "ADD_EXECUTABLE(ltest ltest.c)\n"
+    "TARGET_LINK_LIBRARIES(ltest ${HYPRE_LIBRARIES})\n")    
+  # Create a C source file which calls a hypre function
+  file(WRITE ${HYPRETest_DIR}/ltest.c
+    "\#include \"HYPRE_parcsr_ls.h\"\n"
+    "int main(){\n"
+    "HYPRE_ParVector par_b;\n"
+    "HYPRE_IJVector b;\n"
+    "return(0);\n"
+    "}\n")
+  # Attempt to link the "ltest" executable
+  try_compile(LTEST_OK ${HYPRETest_DIR} ${HYPRETest_DIR} ltest OUTPUT_VARIABLE MY_OUTPUT)
+      
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${HYPRETest_DIR}/CMakeFiles)
+  # Process test result
+  if(LTEST_OK)
+    message(STATUS "Checking if HYPRE works... OK")
+    set(HYPRE_FOUND TRUE)
+  else(LTEST_OK)
+    message(STATUS "Checking if HYPRE works... FAILED")
+  endif(LTEST_OK)
+else(HYPRE_LIBRARIES)
+  PRINT_WARNING("HYPRE LIBRARIES NOT Found. Please check library path" "${HYPRE_LIBRARY_DIR} ")
+  message(STATUS "Looking for HYPRE LIBRARY... FAILED")
+endif(HYPRE_LIBRARIES)
diff --git a/config/SundialsKLU.cmake b/config/SundialsKLU.cmake
new file mode 100644
index 0000000..9118314
--- /dev/null
+++ b/config/SundialsKLU.cmake
@@ -0,0 +1,73 @@
+# ---------------------------------------------------------------
+# $Revision: 4955 $
+# $Date: 2016-09-23 10:01:28 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Steven Smith @ LLNL
+# ---------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# KLU tests for SUNDIALS CMake-based configuration.
+#    - loosely based on SundialsLapack.cmake
+#
+
+### This is only set if running GUI - simply return first time enabled
+IF(KLU_DISABLED)
+  SET(KLU_DISABLED FALSE CACHE INTERNAL "GUI - KLU now enabled" FORCE)
+  RETURN()
+ENDIF()
+
+SET(KLU_FOUND FALSE)
+
+# set KLU_LIBRARIES
+include(FindKLU)
+# If we have the KLU libraries, test them
+if(KLU_LIBRARIES)
+  message(STATUS "Looking for KLU libraries...")
+  # Create the KLUTest directory
+  set(KLUTest_DIR ${PROJECT_BINARY_DIR}/KLUTest)
+  file(MAKE_DIRECTORY ${KLUTest_DIR})
+  # Create a CMakeLists.txt file 
+  file(WRITE ${KLUTest_DIR}/CMakeLists.txt
+    "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+    "PROJECT(ltest C)\n"
+    "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+    "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+    "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+    "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+    "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+    "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+    "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+    "INCLUDE_DIRECTORIES(${KLU_INCLUDE_DIR})\n"
+    "ADD_EXECUTABLE(ltest ltest.c)\n"
+    "TARGET_LINK_LIBRARIES(ltest ${KLU_LIBRARIES})\n")    
+# Create a C source file which calls a KLU function
+# SGS TODO what is a simple KLU method to invoke?
+  file(WRITE ${KLUTest_DIR}/ltest.c
+    "\#include \"klu.h\"\n"
+    "int main(){\n"
+    "klu_common Common;\n"
+    "klu_defaults (&Common);\n" 
+    "return(0);\n"
+    "}\n")
+  # Attempt to link the "ltest" executable
+  try_compile(LTEST_OK ${KLUTest_DIR} ${KLUTest_DIR} ltest OUTPUT_VARIABLE MY_OUTPUT)
+      
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${KLUTest_DIR}/CMakeFiles)
+  # Process test result
+  if(LTEST_OK)
+    message(STATUS "Checking if KLU works... OK")
+    set(KLU_FOUND TRUE)
+  else(LTEST_OK)
+    message(STATUS "Checking if KLU works... FAILED")
+  endif(LTEST_OK)
+else(KLU_LIBRARIES)
+  PRINT_WARNING("KLU LIBRARIES NOT Found. Please check library path" "${KLU_LIBRARY_DIR} ")
+  message(STATUS "Looking for KLU libraries... FAILED")
+endif(KLU_LIBRARIES)
+ 
+  
diff --git a/config/SundialsLapack.cmake b/config/SundialsLapack.cmake
new file mode 100644
index 0000000..aa2f60d
--- /dev/null
+++ b/config/SundialsLapack.cmake
@@ -0,0 +1,81 @@
+# ---------------------------------------------------------------
+# $Revision: 4511 $
+# $Date: 2015-06-29 16:48:09 -0700 (Mon, 29 Jun 2015) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# Copyright (c) 2008, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# BLAS/LAPACK tests for SUNDIALS CMake-based configuration.
+#
+# 
+
+SET(LAPACK_FOUND FALSE)
+
+# If LAPACK libraries are undefined, try to find them (if we have
+# a working Fortran compiler) or look for them in the most
+# obvious place...
+if(NOT LAPACK_LIBRARIES)
+  if(F77_FOUND)
+    include(FindLAPACK)
+  else(F77_FOUND)
+    find_library(LAPACK_LIBRARIES
+      NAMES lapack
+      PATHS /usr/lib /usr/local/lib
+      "$ENV{ProgramFiles}/LAPACK/Lib"
+      )
+  endif(F77_FOUND)
+endif(NOT LAPACK_LIBRARIES)
+
+# If we have the LAPACK libraries, test them
+if(LAPACK_LIBRARIES)
+  message(STATUS "Looking for LAPACK libraries... OK")
+  # Create the LapackTest directory
+  set(LapackTest_DIR ${PROJECT_BINARY_DIR}/LapackTest)
+  file(MAKE_DIRECTORY ${LapackTest_DIR})
+  # Create a CMakeLists.txt file 
+  file(WRITE ${LapackTest_DIR}/CMakeLists.txt
+    "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+    "PROJECT(ltest C)\n"
+    "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+    "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+    "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+    "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+    "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+    "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+    "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+    "ADD_EXECUTABLE(ltest ltest.c)\n"
+    "TARGET_LINK_LIBRARIES(ltest ${LAPACK_LIBRARIES})\n")    
+  # Create a C source file which calls a Blas function (dcopy) and an Lapack function (dgetrf)
+  file(WRITE ${LapackTest_DIR}/ltest.c
+    "${F77_MANGLE_MACRO1}\n"
+    "#define dcopy_f77 SUNDIALS_F77_FUNC(dcopy, DCOPY)\n"
+    "#define dgetrf_f77 SUNDIALS_F77_FUNC(dgetrf, DGETRF)\n"
+    "extern void dcopy_f77(int *n, const double *x, const int *inc_x, double *y, const int *inc_y);\n"
+    "extern void dgetrf_f77(const int *m, const int *n, double *a, int *lda, int *ipiv, int *info);\n"
+    "int main(){\n"
+    "int n=1;\n"
+    "double x, y;\n"
+    "dcopy_f77(&n, &x, &n, &y, &n);\n"
+    "dgetrf_f77(&n, &n, &x, &n, &n, &n);\n"
+    "return(0);\n"
+    "}\n")
+  # Attempt to link the "ltest" executable
+  try_compile(LTEST_OK ${LapackTest_DIR} ${LapackTest_DIR}
+    ltest OUTPUT_VARIABLE MY_OUTPUT)    
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${LapackTest_DIR}/CMakeFiles)
+  # Process test result
+  if(LTEST_OK)
+    message(STATUS "Checking if Lapack works... OK")
+    set(LAPACK_FOUND TRUE)
+  else(LTEST_OK)
+    message(STATUS "Checking if Lapack works... FAILED")
+  endif(LTEST_OK)
+else(LAPACK_LIBRARIES)
+  message(STATUS "Looking for LAPACK libraries... FAILED")
+endif(LAPACK_LIBRARIES)
diff --git a/config/SundialsMPIC.cmake b/config/SundialsMPIC.cmake
new file mode 100644
index 0000000..062fa69
--- /dev/null
+++ b/config/SundialsMPIC.cmake
@@ -0,0 +1,190 @@
+# ---------------------------------------------------------------
+# $Revision: 4511 $
+# $Date: 2015-06-29 16:48:09 -0700 (Mon, 29 Jun 2015) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# Copyright (c) 2008, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# MPI-C tests for SUNDIALS CMake-based configuration.
+#
+# 
+
+# make sure valid mpi_run_command. If not, then warn and return
+If(MPI_RUN_COMMAND AND NOT MPI_RUN_COMMAND STREQUAL "mpirun" AND NOT MPI_RUN_COMMAND STREQUAL "srun")
+    PRINT_WARNING("Unknown mpi run command: ${MPI_RUN_COMMAND}" "Please enter mpirun or srun")
+ENDIF(MPI_RUN_COMMAND AND NOT MPI_RUN_COMMAND STREQUAL "mpirun" AND NOT MPI_RUN_COMMAND STREQUAL "srun")
+
+set(MPIC_FOUND FALSE)
+set(MPIC_MPI2 FALSE)
+
+# Local variable indicating whether to test MPI
+set(MPIC_PERFORM_TEST FALSE)
+# By default, we try to use the MPI compiler script
+# Search for the MPICC compiler script
+find_program(MPI_MPICC NAMES mpicc DOC "mpicc program")
+if(MPI_MPICC)
+  message(STATUS "Looking for MPI C compiler script... ${MPI_MPICC}")
+  # Test the MPI compiler script
+  set(MPIC_PERFORM_TEST TRUE)
+else(MPI_MPICC)
+  message(STATUS "Looking for MPI C compiler script... FAILED")
+  # If not already available, search for MPI headers and libraries.
+  # Define the following values
+  #  MPI_INCLUDE_PATH = cached location of mpi.h
+  #  MPI_LIBRARIES    = cached list of libraries to link in (mpi mpich etc)
+  if(NOT MPI_LIBRARIES)
+    find_path(MPI_INCLUDE_PATH mpi.h
+      PATHS /usr/local/include 
+      /usr/include 
+      /usr/include/mpi
+      /usr/local/mpi/include
+      "$ENV{ProgramFiles}/MPICH/SDK/Include"
+      "$ENV{ProgramFiles}/MPICH2/include"
+      "C:/Program Files/MPICH/SDK/Include"
+      )
+    find_library(MPI_LIBRARIES
+      NAMES mpich2 mpi mpich 
+      PATHS /usr/lib /usr/local/lib /usr/local/mpi/lib
+      "$ENV{ProgramFiles}/MPICH/SDK/Lib"
+      "$ENV{ProgramFiles}/MPICH2/Lib"
+      "C:/Program Files/MPICH/SDK/Lib" 
+      )
+    find_library(MPI_EXTRA_LIBRARIES 
+      NAMES mpi++
+      PATHS /usr/lib /usr/local/lib /usr/local/mpi/lib 
+      "$ENV{ProgramFiles}/MPICH/SDK/Lib"
+      "C:/Program Files/MPICH/SDK/Lib" 
+      DOC "If a second mpi library is necessary, specify it here.")
+    if(MPI_EXTRA_LIBRARIES)
+      set(MPI_LIBRARIES ${MPI_LIBRARIES} ${MPI_EXTRA_LIBRARIES})
+    endif(MPI_EXTRA_LIBRARIES)
+  endif(NOT MPI_LIBRARIES)
+  if(MPI_LIBRARIES)
+    message(STATUS "Looking for MPI libraries... ${MPI_LIBRARIES}")
+    # Test the MPI libraries
+    set(MPIC_PERFORM_TEST TRUE)
+  else(MPI_LIBRARIES)
+    message(STATUS "Looking for MPI libraries... FAILED")
+  endif(MPI_LIBRARIES)
+endif(MPI_MPICC)  
+# If we have what to test, do it now
+if(MPIC_PERFORM_TEST)
+  # Create the MPITest directory
+  set(MPITest_DIR ${PROJECT_BINARY_DIR}/MPITest)
+  file(MAKE_DIRECTORY ${MPITest_DIR})
+  # Create a CMakeLists.txt file which will generate the "mpictest" executable
+  if(MPI_MPICC)
+    file(WRITE ${MPITest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(mpictest C)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_C_COMPILER ${MPI_MPICC})\n"
+      "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+      "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+      "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+      "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+      "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+      "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+      "ADD_EXECUTABLE(mpictest mpictest.c)\n")
+  else(MPI_MPICC)
+    file(WRITE ${MPITest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(mpictest C)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+      "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+      "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+      "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+      "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+      "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+      "INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})\n"
+      "ADD_EXECUTABLE(mpictest mpictest.c)\n"
+      "TARGET_LINK_LIBRARIES(mpictest ${MPI_LIBRARIES})\n")
+  endif(MPI_MPICC)
+  # Create a simple C source which only calls the MPI_Init and MPI_Finalize functions
+  file(WRITE ${MPITest_DIR}/mpictest.c
+    "#include <mpi.h>\n"
+    "int main(){\n"
+    "int c;\n"
+    "char **v;\n"
+    "MPI_Init(&c, &v);\n"
+    "MPI_Finalize();\n"
+    "return(0);\n"
+    "}\n")
+  # Use TRY_COMPILE to make the target "mpictest"
+  try_compile(MPITEST_OK ${MPITest_DIR} ${MPITest_DIR}
+    mpictest OUTPUT_VARIABLE MY_OUTPUT)
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${MPITest_DIR}/CMakeFiles)
+  # Process test result
+  if(MPITEST_OK)
+    message(STATUS "Trying to compile and link a simple MPI C program... OK")
+    set(MPIC_FOUND TRUE)
+  else(MPITEST_OK)
+    message(STATUS "Trying to compile and link a simple MPI C program... FAILED")
+  endif(MPITEST_OK)
+endif(MPIC_PERFORM_TEST)
+# Finally, if MPI-C was found and is working, 
+# also check if it provides MPI-2 support
+if(MPIC_FOUND)
+  # Create a CMakeLists.txt file which will generate the "mpi2test" executable
+  if(MPI_MPICC)
+    file(WRITE ${MPITest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(mpi2test C)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_C_COMPILER ${MPI_MPICC})\n"
+      "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+      "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+      "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+      "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+      "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+      "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+      "ADD_EXECUTABLE(mpi2test mpi2test.c)\n")
+  else(MPI_MPICC)
+    file(WRITE ${MPITest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(mpi2test C)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+      "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+      "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+      "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+      "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+      "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+      "INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})\n"
+      "ADD_EXECUTABLE(mpi2test mpi2test.c)\n"
+      "TARGET_LINK_LIBRARIES(mpi2test ${MPI_LIBRARIES})\n")
+  endif(MPI_MPICC)
+  # Create a simple C source which calls the MPI_Comm_f2c function
+  file(WRITE ${MPITest_DIR}/mpi2test.c
+    "#include <mpi.h>\n"
+    "int main(){\n"
+    "int c;\n"
+    "char **v;\n"
+    "MPI_Comm C_comm;\n"
+    "MPI_Init(&c, &v);\n"
+    "C_comm = MPI_Comm_f2c((MPI_Fint) 1);\n"
+    "MPI_Finalize();\n"
+    "return(0);\n"
+    "}\n")
+  # Use TRY_COMPILE to make the target "mpi2test"
+  try_compile(MPITEST_OK ${MPITest_DIR} ${MPITest_DIR}
+    mpi2test OUTPUT_VARIABLE MY_OUTPUT)
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  FILE(REMOVE_RECURSE ${MPITest_DIR}/CMakeFiles)
+  # Interpret test results
+  if(MPITEST_OK)
+    message(STATUS "Checking for MPI-2 support... OK")
+    set(MPIC_MPI2 TRUE)
+  else(MPITEST_OK)
+    message(STATUS "Checking for MPI-2 support... FAILED")
+  endif(MPITEST_OK)
+endif(MPIC_FOUND)
+
diff --git a/config/SundialsMPICXX.cmake b/config/SundialsMPICXX.cmake
new file mode 100644
index 0000000..481615c
--- /dev/null
+++ b/config/SundialsMPICXX.cmake
@@ -0,0 +1,120 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# MPI-C++ tests for SUNDIALS CMake-based configuration.
+
+set(MPICXX_FOUND FALSE)
+
+# Local variable indicating whether to test MPI
+set(MPICXX_PERFORM_TEST FALSE)
+# By default, we try to use the MPI compiler script
+# Search for the MPICXX compiler script
+find_program(MPI_MPICXX NAMES mpicxx DOC "mpicxx program")
+if(MPI_MPICXX)
+  message(STATUS "Looking for MPI C++ compiler script... ${MPI_MPICXX}")
+  # Test the MPI compiler script
+  set(MPICXX_PERFORM_TEST TRUE)
+else(MPI_MPICXX)
+  message(STATUS "Looking for MPI C++ compiler script... FAILED")
+  # If not already available, search for MPI headers and libraries.
+  # Define the following values
+  #  MPI_INCLUDE_PATH = cached location of mpi.h
+  #  MPI_LIBRARIES    = cached list of libraries to link in (mpi mpich etc)
+  if(NOT MPI_LIBRARIES)
+    find_path(MPI_INCLUDE_PATH mpi.h
+      PATHS /usr/local/include 
+      /usr/include 
+      /usr/include/mpi
+      /usr/local/mpi/include
+      "$ENV{ProgramFiles}/MPICH/SDK/Include"
+      "$ENV{ProgramFiles}/MPICH2/include"
+      "C:/Program Files/MPICH/SDK/Include"
+      )
+    find_library(MPI_LIBRARIES
+      NAMES mpich2 mpi mpich 
+      PATHS /usr/lib /usr/local/lib /usr/local/mpi/lib
+      "$ENV{ProgramFiles}/MPICH/SDK/Lib"
+      "$ENV{ProgramFiles}/MPICH2/Lib"
+      "C:/Program Files/MPICH/SDK/Lib" 
+      )
+    find_library(MPI_EXTRA_LIBRARIES 
+      NAMES mpi++
+      PATHS /usr/lib /usr/local/lib /usr/local/mpi/lib 
+      "$ENV{ProgramFiles}/MPICH/SDK/Lib"
+      "C:/Program Files/MPICH/SDK/Lib" 
+      DOC "If a second mpi library is necessary, specify it here.")
+    if(MPI_EXTRA_LIBRARIES)
+      set(MPI_LIBRARIES ${MPI_LIBRARIES} ${MPI_EXTRA_LIBRARIES})
+    endif(MPI_EXTRA_LIBRARIES)
+  endif(NOT MPI_LIBRARIES)
+  if(MPI_LIBRARIES)
+    message(STATUS "Looking for MPI libraries... ${MPI_LIBRARIES}")
+    # Test the MPI libraries
+    set(MPICXX_PERFORM_TEST TRUE)
+  else(MPI_LIBRARIES)
+    message(STATUS "Looking for MPI libraries... FAILED")
+  endif(MPI_LIBRARIES)
+endif(MPI_MPICXX)  
+# If we have what to test, do it now
+if(MPICXX_PERFORM_TEST)
+  # Create the MPITest directory
+  set(MPITest_DIR ${PROJECT_BINARY_DIR}/MPITest)
+  file(MAKE_DIRECTORY ${MPITest_DIR})
+  # Create a CMakeLists.txt file which will generate the "mpicxxtest" executable
+  if(MPI_MPICXX)
+    file(WRITE ${MPITest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(mpicxxtest CXX)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_CXX_COMPILER ${MPI_MPICXX})\n"
+      "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+      "SET(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS}\")\n"
+      "SET(CMAKE_CXX_FLAGS_RELEASE \"${CMAKE_CXX_FLAGS_RELEASE}\")\n"
+      "SET(CMAKE_CXX_FLAGS_DEBUG \"${CMAKE_CXX_FLAGS_DEBUG}\")\n"
+      "SET(CMAKE_CXX_FLAGS_RELWITHDEBUGINFO \"${CMAKE_CXX_FLAGS_RELWITHDEBUGINFO}\")\n"
+      "SET(CMAKE_CXX_FLAGS_MINSIZE \"${CMAKE_CXX_FLAGS_MINSIZE}\")\n"
+      "ADD_EXECUTABLE(mpicxxtest mpicxxtest.cpp)\n")
+  else(MPI_MPICXX)
+    file(WRITE ${MPITest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(mpicxxtest CXX)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+      "SET(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS}\")\n"
+      "SET(CMAKE_CXX_FLAGS_RELEASE \"${CMAKE_CXX_FLAGS_RELEASE}\")\n"
+      "SET(CMAKE_CXX_FLAGS_DEBUG \"${CMAKE_CXX_FLAGS_DEBUG}\")\n"
+      "SET(CMAKE_CXX_FLAGS_RELWITHDEBUGINFO \"${CMAKE_CXX_FLAGS_RELWITHDEBUGINFO}\")\n"
+      "SET(CMAKE_CXX_FLAGS_MINSIZE \"${CMAKE_CXX_FLAGS_MINSIZE}\")\n"
+      "INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})\n"
+      "ADD_EXECUTABLE(mpicxxtest mpictest.cpp)\n"
+      "TARGET_LINK_LIBRARIES(mpicxxtest ${MPI_LIBRARIES})\n")
+  endif(MPI_MPICXX)
+  # Create a simple C++ source which only calls the MPI_Init and MPI_Finalize functions
+  file(WRITE ${MPITest_DIR}/mpicxxtest.cpp
+    "#include <mpi.h>\n"
+    "int main(){\n"
+    "int c;\n"
+    "char **v;\n"
+    "MPI_Init(&c, &v);\n"
+    "MPI_Finalize();\n"
+    "return(0);\n"
+    "}\n")
+  # Use TRY_COMPILE to make the target "mpictest"
+  try_compile(MPITEST_OK ${MPITest_DIR} ${MPITest_DIR}
+    mpictest OUTPUT_VARIABLE MY_OUTPUT)
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${MPITest_DIR}/CMakeFiles)
+  # Process test result
+  if(MPITEST_OK)
+    message(STATUS "Trying to compile and link a simple MPI C++ program... OK")
+    set(MPICXX_FOUND TRUE)
+  else(MPITEST_OK)
+    message(STATUS "Trying to compile and link a simple MPI C++ program... FAILED")
+  endif(MPITEST_OK)
+endif(MPICXX_PERFORM_TEST)
+
diff --git a/config/SundialsMPIF.cmake b/config/SundialsMPIF.cmake
new file mode 100644
index 0000000..73affac
--- /dev/null
+++ b/config/SundialsMPIF.cmake
@@ -0,0 +1,110 @@
+# ---------------------------------------------------------------
+# $Revision: 4511 $
+# $Date: 2015-06-29 16:48:09 -0700 (Mon, 29 Jun 2015) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# Copyright (c) 2008, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# MPI-Fortran tests for SUNDIALS CMake-based configuration.
+#
+# 
+
+set(MPIF_FOUND FALSE)
+
+# Local variable indicating whether to test MPI
+set(MPIF_PERFORM_TEST FALSE)
+# By default, we try to use the MPI compiler script
+# Search for the MPIF77 compiler script
+find_program(MPI_MPIF77 NAMES mpif77 DOC "mpif77 program")
+if(MPI_MPIF77)
+  message(STATUS "Looking for MPI Fortran compiler script... ${MPI_MPIF77}")
+  # Test the MPI compiler script
+  set(MPIF_PERFORM_TEST TRUE)
+else(MPI_MPIF77)
+  message(STATUS "Looking for MPI Fortran compiler script... FAILED")
+  # If not already available, search for MPI headers and libraries.
+  if(NOT MPI_LIBRARIES)
+    find_path(MPI_INCLUDE_PATH mpi.h
+      PATHS /usr/local/include 
+      /usr/include 
+      /usr/include/mpi
+      /usr/local/mpi/include
+      "$ENV{ProgramFiles}/MPICH/SDK/Include"
+      "$ENV{ProgramFiles}/MPICH2/include"
+      "C:/Program Files/MPICH/SDK/Include"
+      )
+    find_library(MPI_LIBRARIES
+      NAMES mpich2 mpi mpich 
+      PATHS /usr/lib /usr/local/lib /usr/local/mpi/lib
+      "$ENV{ProgramFiles}/MPICH/SDK/Lib"
+      "$ENV{ProgramFiles}/MPICH2/Lib"
+      "C:/Program Files/MPICH/SDK/Lib" 
+      )
+    find_library(MPI_EXTRA_LIBRARIES 
+      NAMES mpi++
+      PATHS /usr/lib /usr/local/lib /usr/local/mpi/lib 
+      "$ENV{ProgramFiles}/MPICH/SDK/Lib"
+      "C:/Program Files/MPICH/SDK/Lib" 
+      DOC "If a second mpi library is necessary, specify it here.")
+    if(MPI_EXTRA_LIBRARIES)
+      set(MPI_LIBRARIES ${MPI_LIBRARIES} ${MPI_EXTRA_LIBRARIES})
+    endif(MPI_EXTRA_LIBRARIES)
+  endif(NOT MPI_LIBRARIES)
+  if(MPI_LIBRARIES)
+    message(STATUS "Looking for MPI libraries... ${MPI_LIBRARIES}")
+    # Test the MPI libraries
+    set(MPIF_PERFORM_TEST TRUE)
+  else(MPI_LIBRARIES)
+    message(STATUS "Looking for MPI libraries... FAILED")
+  endif(MPI_LIBRARIES)
+endif(MPI_MPIF77)
+# If we have what to test, do it now
+if(MPIF_PERFORM_TEST)
+  # Create the MPITest directory
+  set(MPITest_DIR ${PROJECT_BINARY_DIR}/MPITest)
+  file(MAKE_DIRECTORY ${MPITest_DIR})
+  # Create a CMakeLists.txt file which will generate the "mpiftest" executable
+  if(MPI_MPIF77)
+    file(WRITE ${MPITest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(mpiftest Fortran)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_Fortran_COMPILER ${MPI_MPIF77})\n"
+      "SET(CMAKE_Fortran_FLAGS \"${TMP_Fortran_FLAGS}\")\n"
+      "ADD_EXECUTABLE(mpiftest mpiftest.f)\n")
+  else(MPI_MPIF77)
+    file(WRITE ${MPITest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(mpiftest Fortran)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_Fortran_FLAGS \"${TMP_Fortran_FLAGS}\")\n"
+      "INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})\n"
+      "ADD_EXECUTABLE(mpiftest mpiftest.f)\n"
+      "TARGET_LINK_LIBRARIES(mpiftest ${MPI_LIBRARIES})\n")
+  endif(MPI_MPIF77)
+  # Create a simple F77 source which only calls the MPI_Init and MPI_Finalize functions
+  file(WRITE ${MPITest_DIR}/mpiftest.f
+    "       INCLUDE \"mpif.h\"\n"
+    "       INTEGER IER\n" 
+    "       CALL MPI_INIT(IER)\n"
+    "       CALL MPI_FINALIZE(IER)\n"
+    "       STOP\n"
+    "       END\n")
+  # Use TRY_COMPILE to make the target "mpiftest"
+  try_compile(MPITEST_OK ${MPITest_DIR} ${MPITest_DIR}
+    mpiftest OUTPUT_VARIABLE MY_OUTPUT)
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${MPITest_DIR}/CMakeFiles)
+  # Process test result
+  if(MPITEST_OK)
+    message(STATUS "Trying to compile and link a simple MPI Fortran program... OK")
+    set(MPIF_FOUND TRUE)
+  else(MPITEST_OK)
+    message(STATUS "Trying to compile and link a simple MPI Fortran program... FAILED")
+  endif(MPITEST_OK)
+endif(MPIF_PERFORM_TEST)
\ No newline at end of file
diff --git a/config/SundialsMPIF90.cmake b/config/SundialsMPIF90.cmake
new file mode 100644
index 0000000..104dd9d
--- /dev/null
+++ b/config/SundialsMPIF90.cmake
@@ -0,0 +1,105 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# MPI-Fortran90 tests for SUNDIALS CMake-based configuration.
+
+set(MPIF90_FOUND FALSE)
+
+# Local variable indicating whether to test MPI
+set(MPIF90_PERFORM_TEST FALSE)
+# By default, we try to use the MPI compiler script
+# Search for the MPIF90 compiler script
+find_program(MPI_MPIF90 NAMES mpif90 DOC "mpif90 program")
+if(MPI_MPIF90)
+  message(STATUS "Looking for MPI Fortran90 compiler script... ${MPI_MPIF90}")
+  # Test the MPI compiler script
+  set(MPIF90_PERFORM_TEST TRUE)
+else(MPI_MPIF90)
+  message(STATUS "Looking for MPI Fortran90 compiler script... FAILED")
+  # If not already available, search for MPI headers and libraries.
+  if(NOT MPI_LIBRARIES)
+    find_path(MPI_INCLUDE_PATH mpi.h
+      PATHS /usr/local/include 
+      /usr/include 
+      /usr/include/mpi
+      /usr/local/mpi/include
+      "$ENV{ProgramFiles}/MPICH/SDK/Include"
+      "$ENV{ProgramFiles}/MPICH2/include"
+      "C:/Program Files/MPICH/SDK/Include"
+      )
+    find_library(MPI_LIBRARIES
+      NAMES mpich2 mpi mpich 
+      PATHS /usr/lib /usr/local/lib /usr/local/mpi/lib
+      "$ENV{ProgramFiles}/MPICH/SDK/Lib"
+      "$ENV{ProgramFiles}/MPICH2/Lib"
+      "C:/Program Files/MPICH/SDK/Lib" 
+      )
+    find_library(MPI_EXTRA_LIBRARIES 
+      NAMES mpi++
+      PATHS /usr/lib /usr/local/lib /usr/local/mpi/lib 
+      "$ENV{ProgramFiles}/MPICH/SDK/Lib"
+      "C:/Program Files/MPICH/SDK/Lib" 
+      DOC "If a second mpi library is necessary, specify it here.")
+    if(MPI_EXTRA_LIBRARIES)
+      set(MPI_LIBRARIES ${MPI_LIBRARIES} ${MPI_EXTRA_LIBRARIES})
+    endif(MPI_EXTRA_LIBRARIES)
+  endif(NOT MPI_LIBRARIES)
+  if(MPI_LIBRARIES)
+    message(STATUS "Looking for MPI libraries... ${MPI_LIBRARIES}")
+    # Test the MPI libraries
+    set(MPIF90_PERFORM_TEST TRUE)
+  else(MPI_LIBRARIES)
+    message(STATUS "Looking for MPI libraries... FAILED")
+  endif(MPI_LIBRARIES)
+endif(MPI_MPIF90)
+# If we have what to test, do it now
+if(MPIF90_PERFORM_TEST)
+  # Create the MPITest directory
+  set(MPITest_DIR ${PROJECT_BINARY_DIR}/MPITest)
+  file(MAKE_DIRECTORY ${MPITest_DIR})
+  # Create a CMakeLists.txt file which will generate the "mpif90test" executable
+  if(MPI_MPIF90)
+    file(WRITE ${MPITest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(mpif90test Fortran)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_Fortran_COMPILER ${MPI_MPIF90})\n"
+      "SET(CMAKE_Fortran_FLAGS \"${TMP_Fortran_FLAGS}\")\n"
+      "ADD_EXECUTABLE(mpif90test mpif90test.f90)\n")
+  else(MPI_MPIF90)
+    file(WRITE ${MPITest_DIR}/CMakeLists.txt
+      "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+      "PROJECT(mpif90test Fortran)\n"
+      "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+      "SET(CMAKE_Fortran_FLAGS \"${TMP_Fortran_FLAGS}\")\n"
+      "INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})\n"
+      "ADD_EXECUTABLE(mpif90test mpif90test.f90)\n"
+      "TARGET_LINK_LIBRARIES(mpif90test ${MPI_LIBRARIES})\n")
+  endif(MPI_MPIF90)
+  # Create a simple F90 source which only calls the MPI_Init and MPI_Finalize functions
+  file(WRITE ${MPITest_DIR}/mpif90test.f90
+    "program test\n"
+    "include \"mpif.h\"\n"
+    "integer :: ier\n" 
+    "call MPI_Init(ier)\n"
+    "call MPI_Finalize(ier)\n"
+    "stop\n"
+    "end program\n")
+  # Use TRY_COMPILE to make the target "mpif90test"
+  try_compile(MPITEST_OK ${MPITest_DIR} ${MPITest_DIR}
+    mpif90test OUTPUT_VARIABLE MY_OUTPUT)
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${MPITest_DIR}/CMakeFiles)
+  # Process test result
+  if(MPITEST_OK)
+    message(STATUS "Trying to compile and link a simple MPI Fortran90 program... OK")
+    set(MPIF90_FOUND TRUE)
+  else(MPITEST_OK)
+    message(STATUS "Trying to compile and link a simple MPI Fortran90 program... FAILED")
+  endif(MPITEST_OK)
+endif(MPIF90_PERFORM_TEST)
\ No newline at end of file
diff --git a/config/SundialsPETSc.cmake b/config/SundialsPETSc.cmake
new file mode 100644
index 0000000..4ab8f49
--- /dev/null
+++ b/config/SundialsPETSc.cmake
@@ -0,0 +1,75 @@
+# ---------------------------------------------------------------
+# $Revision:  $
+# $Date:  $
+# ---------------------------------------------------------------
+# Programmer:  Eddy Banks @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# PETSc tests for SUNDIALS CMake-based configuration.
+# 
+### This is only set if running GUI - simply return first time enabled
+IF(PETSC_DISABLED)
+  SET(PETSC_DISABLED FALSE CACHE INTERNAL "GUI - now enabled" FORCE)
+  RETURN()
+ENDIF()
+
+SET(PETSC_FOUND FALSE)
+
+# set PETSC_LIBRARIES
+include(FindPETSc)
+
+# If we have the PETSC libraries, test them
+if(PETSC_LIBRARIES)
+  message(STATUS "Looking for PETSc libraries...")
+  # Create the PETSCTest directory
+  set(PETSCTest_DIR ${PROJECT_BINARY_DIR}/PETSCTest)
+  file(MAKE_DIRECTORY ${PETSCTest_DIR})
+  # Create a CMakeLists.txt file 
+  file(WRITE ${PETSCTest_DIR}/CMakeLists.txt
+    "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+    "PROJECT(ltest C)\n"
+    "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+    "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+    "SET(CMAKE_C_COMPILER ${MPI_MPICC})\n"
+    "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+    "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+    "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+    "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+    "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+    "INCLUDE_DIRECTORIES(${PETSC_INCLUDE_DIR})\n"
+    "ADD_EXECUTABLE(ltest ltest.c)\n"
+    "TARGET_LINK_LIBRARIES(ltest ${PETSC_LIBRARIES})\n")    
+  # Create a C source file which calls a PETSC function
+  file(WRITE ${PETSCTest_DIR}/ltest.c
+    "\#include \"petscvec.h\"\n"
+    "int main(){\n"
+    "Vec x;\n"
+    "VecCreate(PETSC_COMM_WORLD, &x);\n" 
+    "return(0);\n"
+    "}\n")
+  # Attempt to link the "ltest" executable
+  try_compile(LTEST_OK ${PETSCTest_DIR} ${PETSCTest_DIR} ltest OUTPUT_VARIABLE MY_OUTPUT)
+      
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${PETSCTest_DIR}/CMakeFiles)
+  # Process test result
+  if(LTEST_OK)
+    message(STATUS "Checking if PETSc works... OK")
+    set(PETSC_FOUND TRUE)
+  else(LTEST_OK)
+    message(STATUS "Checking if PETSc works... FAILED")
+  endif(LTEST_OK)
+else(PETSC_LIBRARIES)
+  PRINT_WARNING("PETSC LIBRARIES NOT Found. Please check library path" "${PETSC_LIBRARY_DIR} ")
+  message(STATUS "Looking for PETSc libraries... FAILED")
+endif(PETSC_LIBRARIES)
diff --git a/config/SundialsSuperLUMT.cmake b/config/SundialsSuperLUMT.cmake
new file mode 100644
index 0000000..662e3af
--- /dev/null
+++ b/config/SundialsSuperLUMT.cmake
@@ -0,0 +1,71 @@
+# ---------------------------------------------------------------
+# $Revision: 4955 $
+# $Date: 2016-09-23 10:01:28 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Eddy Banks @ LLNL
+# ---------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# SUPERLUMT tests for SUNDIALS CMake-based configuration.
+#    - loosely based on SundialsLapack.cmake
+# 
+### This is only set if running GUI - simply return first time enabled
+IF(SUPERLUMT_DISABLED)
+  SET(SUPERLUMT_DISABLED FALSE CACHE INTERNAL "GUI - SUPERLUMT now enabled" FORCE)
+  RETURN()
+ENDIF()
+
+SET(SUPERLUMT_FOUND FALSE)
+
+# set SUPERLUMT_LIBRARIES
+include(FindSUPERLUMT)
+# If we have the SUPERLUMT libraries, test them
+if(SUPERLUMT_LIBRARY AND SUPERLUMT_LIBRARIES)
+  message(STATUS "Looking for SUPERLUMT libraries... OK")
+  # Create the SUPERLUMT_TEST directory
+  set(SUPERLUMT_TEST_DIR ${PROJECT_BINARY_DIR}/SUPERLUMT_TEST)
+  file(MAKE_DIRECTORY ${SUPERLUMT_TEST_DIR})
+  # Create a CMakeLists.txt file 
+  file(WRITE ${SUPERLUMT_TEST_DIR}/CMakeLists.txt
+    "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+    "PROJECT(ltest C)\n"
+    "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+    "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+    "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+    "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+    "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+    "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+    "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+    "INCLUDE_DIRECTORIES(${SUPERLUMT_INCLUDE_DIR})\n"
+    "ADD_EXECUTABLE(ltest ltest.c)\n"
+    "TARGET_LINK_LIBRARIES(ltest ${SUPERLUMT_LIBRARIES})\n")    
+# Create a C source file which calls a SUPERLUMT function
+  file(WRITE ${SUPERLUMT_TEST_DIR}/ltest.c
+    "\#include \"slu_mt_ddefs.h\"\n"
+#    "\#include \"pdsp_defs.h\"\n"
+    "int main(){\n"
+    "SuperMatrix A;\n"
+    "NCformat *Astore;\n" 
+    "return(0);\n"
+    "}\n")
+  # Attempt to link the "ltest" executable
+  try_compile(LTEST_OK ${SUPERLUMT_TEST_DIR} ${SUPERLUMT_TEST_DIR} ltest OUTPUT_VARIABLE MY_OUTPUT)
+      
+  # To ensure we do not use stuff from the previous attempts, 
+  # we must remove the CMakeFiles directory.
+  file(REMOVE_RECURSE ${SUPERLUMT_TEST_DIR}/CMakeFiles)
+  # Process test result
+  if(LTEST_OK)
+    message(STATUS "Checking if SUPERLUMT works... OK")
+    set(SUPERLUMT_FOUND TRUE)
+  else(LTEST_OK)
+    message(STATUS "Checking if SUPERLUMT works... FAILED")
+  endif(LTEST_OK)
+
+else()
+  PRINT_WARNING("SUPERLUMT LIBRARIES NOT Found. Please check library path" "${SUPERLUMT_LIBRARY_DIR} ")
+  message(STATUS "Looking for SUPERLUMT libraries... FAILED")
+endif()
diff --git a/doc/arkode/ark_examples.pdf b/doc/arkode/ark_examples.pdf
new file mode 100644
index 0000000..acc6ea8
Binary files /dev/null and b/doc/arkode/ark_examples.pdf differ
diff --git a/doc/arkode/ark_guide.pdf b/doc/arkode/ark_guide.pdf
new file mode 100644
index 0000000..c13bcb4
Binary files /dev/null and b/doc/arkode/ark_guide.pdf differ
diff --git a/doc/cvode/cv_examples.pdf b/doc/cvode/cv_examples.pdf
new file mode 100644
index 0000000..da526a3
Binary files /dev/null and b/doc/cvode/cv_examples.pdf differ
diff --git a/doc/cvode/cv_guide.pdf b/doc/cvode/cv_guide.pdf
new file mode 100644
index 0000000..3b66ce3
--- /dev/null
+++ b/doc/cvode/cv_guide.pdf
@@ -0,0 +1,23373 @@
+%PDF-1.4
+%����
+5 0 obj
+<< /S /GoTo /D (section*.3) >>
+endobj
+8 0 obj
+(List of Tables)
+endobj
+9 0 obj
+<< /S /GoTo /D (section*.5) >>
+endobj
+12 0 obj
+(List of Figures)
+endobj
+13 0 obj
+<< /S /GoTo /D (chapter.1) >>
+endobj
+16 0 obj
+(Introduction)
+endobj
+17 0 obj
+<< /S /GoTo /D (section.1.1) >>
+endobj
+20 0 obj
+(Historical Background)
+endobj
+21 0 obj
+<< /S /GoTo /D (section.1.2) >>
+endobj
+24 0 obj
+(Changes from previous versions)
+endobj
+25 0 obj
+<< /S /GoTo /D (section.1.3) >>
+endobj
+28 0 obj
+(Reading this User Guide)
+endobj
+29 0 obj
+<< /S /GoTo /D (section.1.4) >>
+endobj
+32 0 obj
+(SUNDIALS Release License)
+endobj
+33 0 obj
+<< /S /GoTo /D (subsection.1.4.1) >>
+endobj
+36 0 obj
+(Copyright Notices)
+endobj
+37 0 obj
+<< /S /GoTo /D (subsubsection.1.4.1.1) >>
+endobj
+40 0 obj
+(SUNDIALS Copyright)
+endobj
+41 0 obj
+<< /S /GoTo /D (subsubsection.1.4.1.2) >>
+endobj
+44 0 obj
+(ARKode Copyright)
+endobj
+45 0 obj
+<< /S /GoTo /D (subsection.1.4.2) >>
+endobj
+48 0 obj
+(BSD License)
+endobj
+49 0 obj
+<< /S /GoTo /D (chapter.2) >>
+endobj
+52 0 obj
+(Mathematical Considerations)
+endobj
+53 0 obj
+<< /S /GoTo /D (section.2.1) >>
+endobj
+56 0 obj
+(IVP solution)
+endobj
+57 0 obj
+<< /S /GoTo /D (section.2.2) >>
+endobj
+60 0 obj
+(Preconditioning)
+endobj
+61 0 obj
+<< /S /GoTo /D (section.2.3) >>
+endobj
+64 0 obj
+(BDF stability limit detection)
+endobj
+65 0 obj
+<< /S /GoTo /D (section.2.4) >>
+endobj
+68 0 obj
+(Rootfinding)
+endobj
+69 0 obj
+<< /S /GoTo /D (chapter.3) >>
+endobj
+72 0 obj
+(Code Organization)
+endobj
+73 0 obj
+<< /S /GoTo /D (section.3.1) >>
+endobj
+76 0 obj
+(SUNDIALS organization)
+endobj
+77 0 obj
+<< /S /GoTo /D (section.3.2) >>
+endobj
+80 0 obj
+(CVODE organization)
+endobj
+81 0 obj
+<< /S /GoTo /D (chapter.4) >>
+endobj
+84 0 obj
+(Using CVODE for C Applications)
+endobj
+85 0 obj
+<< /S /GoTo /D (section.4.1) >>
+endobj
+88 0 obj
+(Access to library and header files)
+endobj
+89 0 obj
+<< /S /GoTo /D (section.4.2) >>
+endobj
+92 0 obj
+(Data Types)
+endobj
+93 0 obj
+<< /S /GoTo /D (section.4.3) >>
+endobj
+96 0 obj
+(Header files)
+endobj
+97 0 obj
+<< /S /GoTo /D (section.4.4) >>
+endobj
+100 0 obj
+(A skeleton of the user's main program)
+endobj
+101 0 obj
+<< /S /GoTo /D (section.4.5) >>
+endobj
+104 0 obj
+(User-callable functions)
+endobj
+105 0 obj
+<< /S /GoTo /D (subsection.4.5.1) >>
+endobj
+108 0 obj
+(CVODE initialization and deallocation functions)
+endobj
+109 0 obj
+<< /S /GoTo /D (subsection.4.5.2) >>
+endobj
+112 0 obj
+(CVODE tolerance specification functions)
+endobj
+113 0 obj
+<< /S /GoTo /D (subsection.4.5.3) >>
+endobj
+116 0 obj
+(Linear solver specification functions)
+endobj
+117 0 obj
+<< /S /GoTo /D (subsection.4.5.4) >>
+endobj
+120 0 obj
+(Rootfinding initialization function)
+endobj
+121 0 obj
+<< /S /GoTo /D (subsection.4.5.5) >>
+endobj
+124 0 obj
+(CVODE solver function)
+endobj
+125 0 obj
+<< /S /GoTo /D (subsection.4.5.6) >>
+endobj
+128 0 obj
+(Optional input functions)
+endobj
+129 0 obj
+<< /S /GoTo /D (subsubsection.4.5.6.1) >>
+endobj
+132 0 obj
+(Main solver optional input functions)
+endobj
+133 0 obj
+<< /S /GoTo /D (subsubsection.4.5.6.2) >>
+endobj
+136 0 obj
+(Dense/band direct linear solvers optional input functions)
+endobj
+137 0 obj
+<< /S /GoTo /D (subsubsection.4.5.6.3) >>
+endobj
+140 0 obj
+(Sparse direct linear solvers optional input functions)
+endobj
+141 0 obj
+<< /S /GoTo /D (subsubsection.4.5.6.4) >>
+endobj
+144 0 obj
+(Iterative linear solvers optional input functions)
+endobj
+145 0 obj
+<< /S /GoTo /D (subsubsection.4.5.6.5) >>
+endobj
+148 0 obj
+(Rootfinding optional input functions)
+endobj
+149 0 obj
+<< /S /GoTo /D (subsection.4.5.7) >>
+endobj
+152 0 obj
+(Interpolated output function)
+endobj
+153 0 obj
+<< /S /GoTo /D (subsection.4.5.8) >>
+endobj
+156 0 obj
+(Optional output functions)
+endobj
+157 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.1) >>
+endobj
+160 0 obj
+(Main solver optional output functions)
+endobj
+161 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.2) >>
+endobj
+164 0 obj
+(Rootfinding optional output functions)
+endobj
+165 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.3) >>
+endobj
+168 0 obj
+(Dense/band direct linear solvers optional output functions)
+endobj
+169 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.4) >>
+endobj
+172 0 obj
+(Diagonal linear solver optional output functions)
+endobj
+173 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.5) >>
+endobj
+176 0 obj
+(Sparse direct linear solvers optional output functions)
+endobj
+177 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.6) >>
+endobj
+180 0 obj
+(Iterative linear solvers optional output functions)
+endobj
+181 0 obj
+<< /S /GoTo /D (subsection.4.5.9) >>
+endobj
+184 0 obj
+(CVODE reinitialization function)
+endobj
+185 0 obj
+<< /S /GoTo /D (section.4.6) >>
+endobj
+188 0 obj
+(User-supplied functions)
+endobj
+189 0 obj
+<< /S /GoTo /D (subsection.4.6.1) >>
+endobj
+192 0 obj
+(ODE right-hand side)
+endobj
+193 0 obj
+<< /S /GoTo /D (subsection.4.6.2) >>
+endobj
+196 0 obj
+(Error message handler function)
+endobj
+197 0 obj
+<< /S /GoTo /D (subsection.4.6.3) >>
+endobj
+200 0 obj
+(Error weight function)
+endobj
+201 0 obj
+<< /S /GoTo /D (subsection.4.6.4) >>
+endobj
+204 0 obj
+(Rootfinding function)
+endobj
+205 0 obj
+<< /S /GoTo /D (subsection.4.6.5) >>
+endobj
+208 0 obj
+(Jacobian information \(direct method with dense Jacobian\))
+endobj
+209 0 obj
+<< /S /GoTo /D (subsection.4.6.6) >>
+endobj
+212 0 obj
+(Jacobian information \(direct method with banded Jacobian\))
+endobj
+213 0 obj
+<< /S /GoTo /D (subsection.4.6.7) >>
+endobj
+216 0 obj
+(Jacobian information \(direct method with sparse Jacobian\))
+endobj
+217 0 obj
+<< /S /GoTo /D (subsection.4.6.8) >>
+endobj
+220 0 obj
+(Jacobian information \(matrix-vector product\))
+endobj
+221 0 obj
+<< /S /GoTo /D (subsection.4.6.9) >>
+endobj
+224 0 obj
+(Preconditioning \(linear system solution\))
+endobj
+225 0 obj
+<< /S /GoTo /D (subsection.4.6.10) >>
+endobj
+228 0 obj
+(Preconditioning \(Jacobian data\))
+endobj
+229 0 obj
+<< /S /GoTo /D (section.4.7) >>
+endobj
+232 0 obj
+(Preconditioner modules)
+endobj
+233 0 obj
+<< /S /GoTo /D (subsection.4.7.1) >>
+endobj
+236 0 obj
+(A serial banded preconditioner module)
+endobj
+237 0 obj
+<< /S /GoTo /D (subsection.4.7.2) >>
+endobj
+240 0 obj
+(A parallel band-block-diagonal preconditioner module)
+endobj
+241 0 obj
+<< /S /GoTo /D (chapter.5) >>
+endobj
+244 0 obj
+(FCVODE, an Interface Module for FORTRAN Applications)
+endobj
+245 0 obj
+<< /S /GoTo /D (section.5.1) >>
+endobj
+248 0 obj
+(Important note on portability)
+endobj
+249 0 obj
+<< /S /GoTo /D (section.5.2) >>
+endobj
+252 0 obj
+(Fortran Data Types)
+endobj
+253 0 obj
+<< /S /GoTo /D (section.5.3) >>
+endobj
+256 0 obj
+(FCVODE routines)
+endobj
+257 0 obj
+<< /S /GoTo /D (section.5.4) >>
+endobj
+260 0 obj
+(Usage of the FCVODE interface module)
+endobj
+261 0 obj
+<< /S /GoTo /D (section.5.5) >>
+endobj
+264 0 obj
+(FCVODE optional input and output)
+endobj
+265 0 obj
+<< /S /GoTo /D (section.5.6) >>
+endobj
+268 0 obj
+(Usage of the FCVROOT interface to rootfinding)
+endobj
+269 0 obj
+<< /S /GoTo /D (section.5.7) >>
+endobj
+272 0 obj
+(Usage of the FCVBP interface to CVBANDPRE)
+endobj
+273 0 obj
+<< /S /GoTo /D (section.5.8) >>
+endobj
+276 0 obj
+(Usage of the FCVBBD interface to CVBBDPRE)
+endobj
+277 0 obj
+<< /S /GoTo /D (chapter.6) >>
+endobj
+280 0 obj
+(Description of the NVECTOR module)
+endobj
+281 0 obj
+<< /S /GoTo /D (section.6.1) >>
+endobj
+284 0 obj
+(The NVECTOR\137SERIAL implementation)
+endobj
+285 0 obj
+<< /S /GoTo /D (section.6.2) >>
+endobj
+288 0 obj
+(The NVECTOR\137PARALLEL implementation)
+endobj
+289 0 obj
+<< /S /GoTo /D (section.6.3) >>
+endobj
+292 0 obj
+(The NVECTOR\137OPENMP implementation)
+endobj
+293 0 obj
+<< /S /GoTo /D (section.6.4) >>
+endobj
+296 0 obj
+(The NVECTOR\137PTHREADS implementation)
+endobj
+297 0 obj
+<< /S /GoTo /D (section.6.5) >>
+endobj
+300 0 obj
+(The NVECTOR\137PARHYP implementation)
+endobj
+301 0 obj
+<< /S /GoTo /D (section.6.6) >>
+endobj
+304 0 obj
+(The NVECTOR\137PETSC implementation)
+endobj
+305 0 obj
+<< /S /GoTo /D (section.6.7) >>
+endobj
+308 0 obj
+(NVECTOR Examples)
+endobj
+309 0 obj
+<< /S /GoTo /D (section.6.8) >>
+endobj
+312 0 obj
+(NVECTOR functions used by CVODE)
+endobj
+313 0 obj
+<< /S /GoTo /D (chapter.7) >>
+endobj
+316 0 obj
+(Providing Alternate Linear Solver Modules)
+endobj
+317 0 obj
+<< /S /GoTo /D (section.7.1) >>
+endobj
+320 0 obj
+(Initialization function)
+endobj
+321 0 obj
+<< /S /GoTo /D (section.7.2) >>
+endobj
+324 0 obj
+(Setup function)
+endobj
+325 0 obj
+<< /S /GoTo /D (section.7.3) >>
+endobj
+328 0 obj
+(Solve function)
+endobj
+329 0 obj
+<< /S /GoTo /D (section.7.4) >>
+endobj
+332 0 obj
+(Memory deallocation function)
+endobj
+333 0 obj
+<< /S /GoTo /D (chapter.8) >>
+endobj
+336 0 obj
+(General Use Linear Solver Components in SUNDIALS)
+endobj
+337 0 obj
+<< /S /GoTo /D (section.8.1) >>
+endobj
+340 0 obj
+(The DLS modules: DENSE and BAND)
+endobj
+341 0 obj
+<< /S /GoTo /D (subsection.8.1.1) >>
+endobj
+344 0 obj
+(Type DlsMat)
+endobj
+345 0 obj
+<< /S /GoTo /D (subsection.8.1.2) >>
+endobj
+348 0 obj
+(Accessor macros for the DLS modules)
+endobj
+349 0 obj
+<< /S /GoTo /D (subsection.8.1.3) >>
+endobj
+352 0 obj
+(Functions in the DENSE module)
+endobj
+353 0 obj
+<< /S /GoTo /D (subsection.8.1.4) >>
+endobj
+356 0 obj
+(Functions in the BAND module)
+endobj
+357 0 obj
+<< /S /GoTo /D (section.8.2) >>
+endobj
+360 0 obj
+(The SLS module)
+endobj
+361 0 obj
+<< /S /GoTo /D (subsection.8.2.1) >>
+endobj
+364 0 obj
+(Type SlsMat)
+endobj
+365 0 obj
+<< /S /GoTo /D (subsection.8.2.2) >>
+endobj
+368 0 obj
+(Functions in the SLS module)
+endobj
+369 0 obj
+<< /S /GoTo /D (subsection.8.2.3) >>
+endobj
+372 0 obj
+(The KLU solver)
+endobj
+373 0 obj
+<< /S /GoTo /D (subsection.8.2.4) >>
+endobj
+376 0 obj
+(The SUPERLUMT solver)
+endobj
+377 0 obj
+<< /S /GoTo /D (section.8.3) >>
+endobj
+380 0 obj
+(The SPILS modules: SPGMR, SPFGMR, SPBCG, and SPTFQMR)
+endobj
+381 0 obj
+<< /S /GoTo /D (subsection.8.3.1) >>
+endobj
+384 0 obj
+(The SPGMR module)
+endobj
+385 0 obj
+<< /S /GoTo /D (subsection.8.3.2) >>
+endobj
+388 0 obj
+(The SPFGMR module)
+endobj
+389 0 obj
+<< /S /GoTo /D (subsection.8.3.3) >>
+endobj
+392 0 obj
+(The SPBCG module)
+endobj
+393 0 obj
+<< /S /GoTo /D (subsection.8.3.4) >>
+endobj
+396 0 obj
+(The SPTFQMR module)
+endobj
+397 0 obj
+<< /S /GoTo /D (appendix.A) >>
+endobj
+400 0 obj
+(SUNDIALS Package Installation Procedure)
+endobj
+401 0 obj
+<< /S /GoTo /D (section.A.1) >>
+endobj
+404 0 obj
+(CMake-based installation)
+endobj
+405 0 obj
+<< /S /GoTo /D (subsection.A.1.1) >>
+endobj
+408 0 obj
+(Configuring, building, and installing on Unix-like systems)
+endobj
+409 0 obj
+<< /S /GoTo /D (subsection.A.1.2) >>
+endobj
+412 0 obj
+(Configuration options \(Unix/Linux\))
+endobj
+413 0 obj
+<< /S /GoTo /D (subsection.A.1.3) >>
+endobj
+416 0 obj
+(Configuration examples)
+endobj
+417 0 obj
+<< /S /GoTo /D (subsection.A.1.4) >>
+endobj
+420 0 obj
+(Working with external Libraries)
+endobj
+421 0 obj
+<< /S /GoTo /D (section.A.2) >>
+endobj
+424 0 obj
+(Building and Running Examples)
+endobj
+425 0 obj
+<< /S /GoTo /D (section.A.3) >>
+endobj
+428 0 obj
+(Configuring, building, and installing on Windows)
+endobj
+429 0 obj
+<< /S /GoTo /D (section.A.4) >>
+endobj
+432 0 obj
+(Installed libraries and exported header files)
+endobj
+433 0 obj
+<< /S /GoTo /D (appendix.B) >>
+endobj
+436 0 obj
+(CVODE Constants)
+endobj
+437 0 obj
+<< /S /GoTo /D (section.B.1) >>
+endobj
+440 0 obj
+(CVODE input constants)
+endobj
+441 0 obj
+<< /S /GoTo /D (section.B.2) >>
+endobj
+444 0 obj
+(CVODE output constants)
+endobj
+445 0 obj
+<< /S /GoTo /D (section*.147) >>
+endobj
+448 0 obj
+(Bibliography)
+endobj
+449 0 obj
+<< /S /GoTo /D (section*.148) >>
+endobj
+452 0 obj
+(Index)
+endobj
+453 0 obj
+<< /S /GoTo /D [454 0 R  /Fit ] >>
+endobj
+457 0 obj <<
+/Length 458       
+/Filter /FlateDecode
+>>
+stream
+x�uSQo�0~�W��ڽ3>�m�n��Ik����C
+��i�~�M��ʄĝ��}��
�M��
��m
\�#	L�F2"��ISa!�E^���Ӯ
"���Hj����"N�bl���C�eF���8�U
"�þ�g�:Y���=h�)�pB"q
+��U��<�%I� �G�ݾ��b����$�h:�K0)��D ��	+I["�q�37�b���X�)&ᗦ��b���墫|�XT{�X����ѩ�t�b�1�����<��Fw �d��l����8�|aU6�k�M�+����Ǧ{�-T�xμ������t��.�C=��pR��κ�� ׺��
U����qdY>����^wUoǺ�،5ߧ$tӱI�^y�4�Eh'��S
 �Y�Z�b��6xx*cɯ�K���5�Zw}�����?��	4_�ؐH��<���q)Wߤ�!u���x�+�B
+endstream
+endobj
+454 0 obj <<
+/Type /Page
+/Contents 457 0 R
+/Resources 456 0 R
+/MediaBox [0 0 612 792]
+/Parent 464 0 R
+>> endobj
+455 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./doc_logo_blue.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 465 0 R
+/BBox [0 0 142 147]
+/Resources <<
+/ProcSet [ /PDF ]
+/ExtGState <<
+/R7 466 0 R
+>>>>
+/Length 467 0 R
+/Filter /FlateDecode
+>>
+stream
+x���[�.�
��g��(�P�e8[8@���C�����c�s�iZ-�X,��ϧ��T��������ϯ���e�ۂ�'�;��Ӟ��q�,�ާ�^˼�o��R����2��5o8���׻~~|��^����������No�
����q��>1Y��zE9�ث�1��>fi�Y<6c?gsi��_�)��g�Vz��l:�9�W/���N+���6~M�<%p�Ƕ��s�N�Uvf�_>?F��XT^2.����l��
�Y��noW�6�
���(�<��m ���f����"RZ�Ҷ<�1J=��\z�Z���/����g�mO�m=Ơ�!�@s�g�s7.
��6��
���Y����. max�P	D�߇��A�X_��/"�N�!Ѐ"�]x� E��x�U���}�vF��!L<s\+�p�~
@�i��}�5�jgrU`�
q���t�v?zV`��v*���5���R�]��	��O6��Qk
��?�%Ai�6 EU�w�|	K�~kw��2%�ajNX���	�e=z�sLw�Vɏs�WV~�L�p 	ƞ�RR����5=0m
<ە���Q �s% o�b+	h�1�89 �)[�����ɭQ.�[���������9���N@�%��4��?�۝��u��˰_^��W\s�;�a�7yv���g�PB�>z�t��`�#�2���q.��:��k��9��
Jrtb�2���CӀ�W�FM�F��

M�	Ԉ'.٥'�o'��`:�_�!K7.
h�T�N�[��(�����ҧ4�Q�*L���j27
 pV�~���b��Y�l�.R��k���!,䜮�&*%�x�6�
+������Q�"
�|풇�
+=�[�+��P� /h at w�Z,f�T�"���h'�#�'y��� 9��^�Zk3���谮Rb��k��%
+P���p�*M�
��珟2V9���D�W�X��8�8W�b�$2���i����er6�H��ɽƋ ꦭ�:���
~w��Rh�
��>�A�J��y���$�OqB�jb�U.IB�$3.Uf���nIb���s[	ym׽d��-��
��-�)�w�#*���D��
�
�R�q�
�f)�Ӫ2a�$bMu	Y;�K7k�<�~���~
��7�v�
�E���E�8B�ϟB�0v��Ҡ�]�跏λ��lR��(��>e?*����G�@�5sm�C	x�w����Xw�k:�l�R���)J�)r�Lz��#i$�X �}�|R:T��j9��d~��r��(�\���T��K!̒_*�p	�t� hduk��~�
 v���d
MҒihA,o�A�_@��{"�� ����h��"���`���E��
�0X��:G��
j��R>�)M@�L�a��݁�
�����#��K\�6O�މ�$Fs�_zqd���
<�ʬ�#��G�h7wt�㪲����8���B�&Z
:YKrt��Xj���Q��ԒG�
f�
#�2' B	jM;���!-��tՋN�9%����
�Y
PVtԃ�
+�NPɂi�����
D���F
6H���SL���x�$�z^���'Cu�'�
�(K���i^`�2 ~D�dT�]�O|ݥ���:
�B����	�!���0ƜI�A<�ӊ�be���A0��n=�lj�힪�jg���|��h���oC��,G@���N���Y�"��C�B��z^?��
��с��$�@?�dLM<�X2��
�%�z��l
+e�=�^�Yk��Z�̺?Ö��:H�m]L��R��n��J�2!�&��d�'T0�
+��*�5����1��W�ŝ���U�a�͓v,]1�q:!و��m�U�s�o�
��F�,r�ZT��R��DEPHSj2�#S�����<�O�W�͐B��i���d��%�&mMO|�W߷|`d2��>`G�*�d�0�w�T��Ǵ&�$�
�5dӟ#�����AD�s�����x� �ZHRRP~~ JE�C=�v�[o��J at 4[Y%B��{Tn{3Ç��$�.uy8_��T归��2�4t�
I�bqQ
֚��b\��
+�ͬKa�l�
jh�O����� =X1l�vh��Ty���J�`�_|�+�Y�Q�@�q��y�Þ��D��B'�Q�4Z�dYc����FQ޳�
���P�e��о�8���i=e�%	��"�L��O$���G j>�����l���p�0�̓2eLÊ�K�pi|4R�FKh�A_��mdo:4 (
�>���5����xM5ŧ���f�f
+��6q�ֈ��6�p��'�8u��s��~�ƻ���R䮺
ת�A��h+��
+�����NU���i��/�8���ʡ��������BlY3	x�
+��FS�6 H8�zg$
;!��7̹�񕚄��|Ohm3WK��p�[q
E�_�d��	��=�#�T;��!�&���e?~�;Pg��|h�R.�*{Ǩ����c�Wu::3޵X�2��!�P٬���������Tvh𺦉u���<��rֻ���=7V2}8����
B�QG^���-�mjrUC���}���>sGJ2h�V����ˠ[wcx�ڟ�EW�j��+,jlё
�KZk3������w�wG��>O8�'/�gϙ³�ğ��kj�ZO�懥�s�D+[|�p�G��g��rzn
n}ɸ�ڣٮ�G"��}�uF뷵'O�d�&Ξ�S��8ꆭQ^뛝Y˫�C}�
˟l}wߒ�dM�M��D��is��+��R��t=�2�sg������a�Fw�<���3�J���vkz�
Cs��z~��׻�����
^i|o��5�:!<e;6�Y�Z�;5�4z���=��7��7j)���]wԆ<�Ўa�
뤛L#;�
����v�Z���+���m��c��1XN_�8���;Jj��I�ntt�G���#�v
��F#vֻ6O���io&*�
����I�U �&�eY�|3�,_sb�[�%ܾ�)����t�Z�2��lDK���~�SVO��/����?~JT%�/����
+endstream
+endobj
+465 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20160805102442-07'00')
+/ModDate (D:20160805102442-07'00')
+/Creator (0.43+devel)
+>>
+endobj
+466 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+467 0 obj
+2952
+endobj
+458 0 obj <<
+/D [454 0 R /XYZ 86.4 726.045 null]
+>> endobj
+459 0 obj <<
+/D [454 0 R /XYZ 86.4 701.138 null]
+>> endobj
+456 0 obj <<
+/Font << /F15 460 0 R /F16 461 0 R /F17 462 0 R /F35 463 0 R >>
+/XObject << /Im1 455 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+470 0 obj <<
+/Length 1166      
+/Filter /FlateDecode
+>>
+stream
+x�uVKs�6��W�H�D
ߤ�'�v:�>��)�&!	c
+� �U����Ą�H��>�} �긊V�E�������Xm�m���a�UXժ��a��}��<~}y������������T7
+��JB�Zm�8��k�Oʮ7Y�M��$UPg��@8f_�^�7�F6x�&�������V�;�����lO�:m����:)�ov4w����[r'��w�ܨ�ℓ3�61d�{<�
z~�i4%V.�,��sf�I��
���0��0�h����<��
;�B�{s;�Uΐ,���S�-;~��`�C��u���]��çYFgD���Q"�ME2!
��s�v,��)
�<�7:�+\jc�ύCJ)���P~k
T
Q��&�u
�J6^� ��Z觟�ᡕG���?*�����BI!���\%

���� Ģ��Ҡ� 
餆����� �XT���ZK:Y��H緹d����Le��E��#�`=�78`e�
���
Y&b"��Fٺ�,�
̡���H�1d.
U#k��9��nh>�α ��������͋ ڿ�`��ES�s>��-NS\��A��G�0XR��
d����i�Z�
�Y�L(�Y�ZѨ�yfD�,gX��I$+ͻ�1��_ΈƳ�8Ko��ga޼�3�7
D�#�[.Y���紌�UJ3G™�q
+�Td���N��yE�
�t��*"!u�+�̓�TP(��G�t35aM�bڂ
��
��
+��Ѵ
�
w!��Z-��Qo�������8�k�*D�u��_Wa�Va��1�w%/>�}�]�4�K[�6�`
� ��f���w,�X@���!1�
0,��$�
�FB���*�Ɏ����%�e�K��
+�]�8p�A�a&���A�f<�a���G)�8$@�f8B'�z%B"�I����@�!u�w^C�����/%�S�.p������V���i
VE~����t}oL[O�U�6���=�A7�oTn}����=�A������/!S��"��
]��Q���
"OZ��_��"����qf#���7o�J&�
�3��`��ɇ�<p�9�<>m�1��<�D��}RB���<9WUn�`\�a
� �{\�S�6\�>���V�L�Ja�o^�J�\p�;
��4%4Fު3
�R<O��� �:�
+endstream
+endobj
+469 0 obj <<
+/Type /Page
+/Contents 470 0 R
+/Resources 468 0 R
+/MediaBox [0 0 612 792]
+/Parent 464 0 R
+>> endobj
+471 0 obj <<
+/D [469 0 R /XYZ 86.4 726.045 null]
+>> endobj
+468 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+515 0 obj <<
+/Length 1469      
+/Filter /FlateDecode
+>>
+stream
+x��KW�H��~
+vC � ����v�n���ƙEI0�i�
B<������x*�ǘdV�E
+~���{	��8g�9
O	s0�c#gx�ȧN��OX�
Gέ{R=��:�v�i���pV�$~�H�8^���"}ƅ��=�0���H�a/�\~�g�lX?p�Sɋ�/g�\���/��0��W�x�<������+���zi�j�S�����*�{��Y��������;��� 2��!ħ1n�AK�
��x
E�1��5Cf��aY`�~�{,+��
&�=�i3��*gŨ��v����>�$y��\��a�[1��om
����/��B��}�Cn���L��I�3�q���j
+n ��#O��v��%cb2>�X����}=�*���L�2 at Fɶ;�;��ĩ!~u��~tq���-rs�m��O3���H�B�	c�[~�
+�a7j(	��w��V�Q
+�s���*j��{Ydp�$`�D�uV�!
�Q7i�|��>h�G�s+�l<�[��vN��_W:��h����Q��o9�ȶ��|�[�|�D��U_�kS����>�cW�
�}�%A�5�o�~�
ym�1��_LA6T��EM�5���
�&/sDaKC�-�[Y~~�C�}Z�3��j7�%,�S�gz=��d���?�,-���P�6_{ �
��["��)�?5�P�;!%������8��(�QVgz��1��	�u��Z
?�՚�e�g�h�7Pٿ<�^��V��
��(�K҉ie�
]Vc^��K��[I�\oX�H[���o���G�#6|sk�V�G�}�)�/�_t�[��
���S��1�c�z�GR��Ȗ����}Y����h2�A
ڈA�
��ц!H�<JaKo�Xu�T���W�
r٪��>�=�Q�ʴ�dR�
r/L�n)D׈V�S
�
�>���:T�։��*�@1
+����m�c�TI[M�5�#�ɥڭW�v�D޽��cˈi�Q�?��"�j%���V��ͦY��t<ra~6��q��Љl�,�K��a+g^��\�9��hV����JP�R�-�N�Z��~�
���~#��F�W�<�+�y�[Q0��M�
߃��U�)�|�6�"��fۦ\�S�yV�"5c��D��R!��"Iȶ3KF��+T�KҺEƫ��g&���"�	3f�n� ��Tt%dIȋ��
��-�(vH�K�*&
��+�bDwR4Y¥�p#�r"�5�ӈb���m�nb���s+���ֳXŶ��~k��j�,���Y�"��Y���lIuYǩ��D��/'��ws9"�,���AW�1R�\p]2g�"5�#K�b�⍜��3(��8UQՄ~«�!�7��FX3�>��o��絜L
+}���{��y���,�d�AV�M���V�]w�K��|�Ǝ%�����'6꼐��Ew�ʜיi���PM���ސ��ٖuV{ů��ӄ�V��G��}Kű&��|�8�Xy<����_5�iI
+endstream
+endobj
+514 0 obj <<
+/Type /Page
+/Contents 515 0 R
+/Resources 513 0 R
+/MediaBox [0 0 612 792]
+/Parent 464 0 R
+/Annots [ 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R ]
+>> endobj
+474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [512.192 548.452 526.596 557.363]
+/Subtype /Link
+/A << /S /GoTo /D (section*.3) >>
+>> endobj
+475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [515.375 526.363 526.596 535.274]
+/Subtype /Link
+/A << /S /GoTo /D (section*.5) >>
+>> endobj
+476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [518.875 504.273 526.596 512.686]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.1) >>
+>> endobj
+477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 492.215 526.596 500.628]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.1) >>
+>> endobj
+478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 480.157 526.596 488.57]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.2) >>
+>> endobj
+479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 468.099 526.596 476.511]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.3) >>
+>> endobj
+480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 456.04 526.596 464.453]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.4) >>
+>> endobj
+481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 443.982 526.596 452.395]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.4.1) >>
+>> endobj
+482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 431.924 526.596 440.337]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.4.1.1) >>
+>> endobj
+483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 419.866 526.596 428.279]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.4.1.2) >>
+>> endobj
+484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 407.807 526.596 416.22]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.4.2) >>
+>> endobj
+485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [518.875 385.718 526.596 394.131]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 373.66 526.596 382.073]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 361.602 526.596 370.014]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 349.543 526.596 357.956]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 337.485 526.596 345.898]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.4) >>
+>> endobj
+490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 315.396 526.596 323.808]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.3) >>
+>> endobj
+491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 303.337 526.596 311.75]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 291.279 526.596 299.692]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 269.19 526.596 277.603]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 257.131 526.596 265.544]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.1) >>
+>> endobj
+495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 245.073 526.596 253.486]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.2) >>
+>> endobj
+496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 233.015 526.596 241.428]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 220.957 526.596 229.37]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 208.899 526.596 217.312]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.5) >>
+>> endobj
+499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 196.84 526.596 205.253]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 184.782 526.596 193.195]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 172.724 526.596 181.137]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 160.666 526.596 169.079]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 148.608 526.596 157.02]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 136.549 526.596 144.962]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 124.491 526.596 132.904]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.1) >>
+>> endobj
+506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 112.433 526.596 120.846]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.2) >>
+>> endobj
+507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 100.375 526.596 108.788]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.3) >>
+>> endobj
+508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 88.317 526.596 96.729]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.4) >>
+>> endobj
+509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 76.258 526.596 84.671]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.5) >>
+>> endobj
+510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 64.2 526.596 72.613]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.7) >>
+>> endobj
+511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+516 0 obj <<
+/D [514 0 R /XYZ 86.4 726.045 null]
+>> endobj
+518 0 obj <<
+/D [514 0 R /XYZ 86.4 571.538 null]
+>> endobj
+513 0 obj <<
+/Font << /F38 517 0 R /F36 472 0 R /F8 473 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+572 0 obj <<
+/Length 2065      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�H~���QT-J��>o8��S��2US�y�A�U+$V��d~��V���i
�g_@��;߹��}
�ޟ!�}>:{�N���x�[��f��D���>�k���Q��������8mw!�<K���E���͊8K�D��^�X�

s��1
�c�v�I����E���)�>�kG�[���7��Z�;��Q�v����� ]�%��
�v'^V��0M'qzoaX������ظ���Ӡ�eP������m�N̒'q
���8��܀�`�|�J˨Q�Z{c�O��p���
��2��k��Z��~�ȋխ�#%$Ň&���E�3���,����
+Y	��
Y�H���_Q
�Yܞ놥���1�h;
+
�})7�P ��{�[L��^߬,��4.�0��K1�p����a�З#����W����f
+��<�;���,����0ba���	˞�y���v�W �9��pFsֲ�zy|��մ�<��j
O@�)�G
Ћ�8H^FF�~�g�N��<��6RÜT���*<,��1���M
����"�:z
+���ms
ax�i���]��﫼��K��a0sf0� ��m
���qz��ӥ����r�8��#k���Ń�v��
+���)\��s�Nj?8eZ�uĉ��kx(�?
5N8k�88��c���f�tf�t~��_
�F���:�Yny
f��L ����ҋ`C�YcS�W4<I�ӦE��m^D�:�~��x�`�i��ْ�a��S�-�r��
D�dG���O ���&��I�2�U�:�/�t�F��
t�9n���:+�ZM�򸪓hwM*÷.jD"J��*�|7��
=�	\�
+
x�0I�%�:����X;��t&+����
O��Q������;—�
"|�$(6�D����޵I�
U�	���`��x��ԻH��"���qd]
+���
+vܕ�N.��q�V�
���hW�n�a����dc
w�z0���&}�C}E״��:����tfr����_$�iVD��l����8�
}��ON(�0��
+�Q�)�y�:{�:��HW?��J3�݂���A|�t]��5��� �׋��y��]p�*S�g� �
5��Ej[�sg�/
l��M2�1N�Q]�Ռ��Z'��[��W�EqZw
m�ڴ�u� �sDN�H��B�F���vP��q���EV��j!���
�I`8�T�cy�#��
H��n�w�{7�:W��|�#z�=���
|�/�ށs
E�"�*^�蹉�{�|��3[1��ٝ	�
�������D���R@�38��ƈ��9���у�p���F���ϰ�#���n�|&xk<=��'jM��򉒭���$�R�V���{�ЖR>
�!̓
������t�D�(�֭���g��`;K%	L�w�w�,���D4U ��1�_T�F[u�3��{y����F�:���AD
DD��4��>g�܇2�
o��W7�E�=���Q�D#	������ �N߈Jk�nF����p�����{
UG5
k.�"8�u��`պ���
+$�z�Fr���D��xA߇ql��
��V
�N�\�((�"(Z	��}�$���_�TG�:O�f|Y�"?]G��5�n3P�N�V`_
��{
�Uo�֖�Mz��JJ N����g�<���/L&u�g���%��O�rkB'�{�aa���j���z�.�lOd�[�T�C� �;�>��E�����d�Nb��Ծ���+�
i����5<��x3T9аz��~EŠ�p�����H;U�E��\E�,�^���
��46ƵYZ{��2��z�_I�i+�|V�c�%��z�Q^6G�
}*� ���Q�{���9�������������{������ӓ��A�Y�]7G�~��c��a�ף��r��n��u�5����J��b�̯�(���@?Q+�XA��\�^���&�WC��p�g�M��ꥅ�����/=߼�A��H]�_�bG9N���c�V0[����,����QG�6@��
 �C�U��F�M�	j�>��l�
��-h�?��<t�C�ǚ
G���)�(_JidY��?:��
�l
+endstream
+endobj
+571 0 obj <<
+/Type /Page
+/Contents 572 0 R
+/Resources 570 0 R
+/MediaBox [0 0 612 792]
+/Parent 464 0 R
+/Annots [ 512 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R ]
+>> endobj
+512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 678.216 526.596 686.629]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.2) >>
+>> endobj
+520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 666.253 526.596 674.666]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.3) >>
+>> endobj
+521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 654.289 526.596 662.702]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.4) >>
+>> endobj
+522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 642.326 526.596 650.739]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.5) >>
+>> endobj
+523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 630.363 526.596 638.776]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.6) >>
+>> endobj
+524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 618.4 526.596 626.812]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 606.436 526.596 614.849]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 594.473 526.596 602.886]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 582.51 526.596 590.922]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.2) >>
+>> endobj
+528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 570.546 526.596 578.959]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.3) >>
+>> endobj
+529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 558.583 526.596 566.996]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.4) >>
+>> endobj
+530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 546.62 526.596 555.033]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 534.656 526.596 543.069]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 522.693 526.596 531.106]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 510.73 526.596 519.143]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 498.766 526.596 507.179]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.9) >>
+>> endobj
+535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 486.803 526.596 495.216]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.10) >>
+>> endobj
+536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 474.84 526.596 483.253]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 462.877 526.596 471.289]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.1) >>
+>> endobj
+538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 450.913 526.596 459.326]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.2) >>
+>> endobj
+539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 428.982 526.596 437.395]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 417.019 526.596 425.432]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 405.055 526.596 413.468]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 393.092 526.596 401.505]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 381.129 526.596 389.542]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 369.165 526.596 377.578]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 357.202 526.596 365.615]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.6) >>
+>> endobj
+546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 345.239 526.596 353.652]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.7) >>
+>> endobj
+547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 333.276 526.596 341.688]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.8) >>
+>> endobj
+548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 311.344 526.596 319.757]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 299.381 526.596 307.794]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 287.418 526.596 295.83]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 275.454 526.596 283.867]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 263.491 526.596 271.904]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 251.528 526.596 259.941]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.5) >>
+>> endobj
+554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 239.564 526.596 247.977]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.6) >>
+>> endobj
+555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 227.601 526.596 236.014]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.7) >>
+>> endobj
+556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 215.638 526.596 224.051]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.8) >>
+>> endobj
+557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 193.706 526.596 202.119]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 181.743 526.596 190.156]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 169.78 526.596 178.193]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 157.816 526.596 166.229]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 145.853 526.596 154.266]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 123.922 526.596 132.335]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 111.958 526.596 120.371]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.1) >>
+>> endobj
+564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 99.995 526.596 108.408]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.1) >>
+>> endobj
+565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 88.032 526.596 96.445]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.2) >>
+>> endobj
+566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 76.069 526.596 84.481]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.3) >>
+>> endobj
+567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 64.105 526.596 72.518]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.4) >>
+>> endobj
+568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.2) >>
+>> endobj
+573 0 obj <<
+/D [571 0 R /XYZ 86.4 726.045 null]
+>> endobj
+570 0 obj <<
+/Font << /F8 473 0 R /F36 472 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+598 0 obj <<
+/Length 987       
+/Filter /FlateDecode
+>>
+stream
+x���r�0��y
+�b�t���4���q�E�	�fB��%u޾Gll�n:u�fc�F|:G�lK�h��?���7>8<�0�C
m�]Ä���#��]��k�Mbb���14։�
g�M��2teC/�
n���
۲v�0!v�t�|�_���k�<����vmpj#L��@�� 6�ݠN*�:���o�0�3I��0V��i�:.��>����/"���ݻ��̵�@������K����i��
+]�D:�
R�.��X}N ;�Q�u���'���p�	ܱ�+�%M�S`��T�EH�蹎љJ~�L��-�ar@8zSm�w�!/����E/��Q�r���H��5�KQZ���)o삔8��m�҅�4����d�W���(�tS��\|�������B�y���Ԟ��e�"(o���zxJ�Fy`P��P
Xc�X�tS
�����Q�C`V�uJ�w+?�t�!o"�3tg�E�����4�;4�
�"
�i<1O̹+3L��t�~a�`kJq$u�u	:
zw��0n�
���_{���/�]��]�Y݅pK�\0t��_-�&EƓ�p�`W��_�,lG�
pE���e
΍(���|�c��P
+9���y�-aڐX�4�:�:���Y
���c�e[�}P�A�s�8)ߣp"���_�
���
|.
!l_��wB���9$N�p^����n�j?�|ZC̓4�"�?oR/
%c�m��
�ƶ)��d>K9�j[)�q
���D��,����c��܎�N+��P
+�ѐ��6ɸ
+c?���L:;w��1��VA�&�B�H��
���&i
T]����0�X�WK�����ŭ-d����hp��/��~zw��+* �e_���V�����η�J��|,��zli�fE��\��q��h��k��-�z�W�D�ys���?8V��؝-���d�z��L�Ƕ�b���Ἴ
۫[�f�V��,��y�-o��[�X�iɷ�
8X���r����'ئ��
+endstream
+endobj
+597 0 obj <<
+/Type /Page
+/Contents 598 0 R
+/Resources 596 0 R
+/MediaBox [0 0 612 792]
+/Parent 464 0 R
+/Annots [ 569 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R ]
+>> endobj
+569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.1) >>
+>> endobj
+574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 678.224 526.596 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.2) >>
+>> endobj
+575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 666.269 526.596 674.682]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.3) >>
+>> endobj
+576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 654.314 526.596 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.4) >>
+>> endobj
+577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 642.359 526.596 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.3) >>
+>> endobj
+578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 630.403 526.596 638.816]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.1) >>
+>> endobj
+579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 618.448 526.596 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.2) >>
+>> endobj
+580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 606.493 526.596 614.906]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.3) >>
+>> endobj
+581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 594.538 526.596 602.951]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.4) >>
+>> endobj
+582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 572.62 526.596 581.033]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 560.665 526.596 569.078]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.1) >>
+>> endobj
+584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 548.71 526.596 557.123]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.1) >>
+>> endobj
+585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 524.799 526.596 533.212]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.3) >>
+>> endobj
+587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 512.844 526.596 521.257]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.4) >>
+>> endobj
+588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 500.889 526.596 509.302]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.2) >>
+>> endobj
+589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 488.934 526.596 497.347]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.3) >>
+>> endobj
+590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 476.979 526.596 485.392]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.4) >>
+>> endobj
+591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 455.061 526.596 463.474]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 443.106 526.596 451.519]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.1) >>
+>> endobj
+593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 431.151 526.596 439.564]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.2) >>
+>> endobj
+594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 409.233 526.596 417.646]
+/Subtype /Link
+/A << /S /GoTo /D (section*.147) >>
+>> endobj
+595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 387.315 526.596 395.728]
+/Subtype /Link
+/A << /S /GoTo /D (section*.148) >>
+>> endobj
+599 0 obj <<
+/D [597 0 R /XYZ 86.4 726.045 null]
+>> endobj
+596 0 obj <<
+/Font << /F8 473 0 R /F36 472 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+602 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+601 0 obj <<
+/Type /Page
+/Contents 602 0 R
+/Resources 600 0 R
+/MediaBox [0 0 612 792]
+/Parent 464 0 R
+>> endobj
+603 0 obj <<
+/D [601 0 R /XYZ 86.4 726.045 null]
+>> endobj
+600 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+616 0 obj <<
+/Length 906       
+/Filter /FlateDecode
+>>
+stream
+x��W]O�0}�W�1�V��؏l�6
	u��=��C���JR&����$m���V:^���u�=���.Op��8>9�`*�
�*&�8�D<�� 
�`�wᷢi��EX��9�4���4ѯ��
h�%�v=�Hs
�$A�T.G��I)҄�>�1̊͢d���"D�q��4I
�`,l��cD��t󢌨
+[S�I
+{[~���
��Ѿ3i[���y0�M�&mQ�݊v��n�&�[;�F�g�dј̽��\&Im�)�����I��N����$�)�C*�Ź'��f,�Z�
<��4���]&����m�d7�
0!��. hXefa��R���I%^����N4FJ�Wdi�Y$�L��
E�H .���
/}(ⴏB�H`|��:܃�12��4��s��K�jѮq��
|��^�
��5Y��n�~;cH`�
	&c~0��Cr��0�*��aH'���
a���5�p*jڶ(�=�_
$Āgn��_�B��>����V�
�#ߴ"���F"�-,U�l��.�hu]���S��_���!���k��N����o�� �"\]�{��
+� �CCm&҈�C̍?�U�7�=KIv5�
+��\rh��H�u�q��H����te2�=5M�B�i�����S�S7rf҆�l���ե�uF�Y���t�f�x�/

�Td��M�5�&�As�T	�j�/�
}a��{�f��������M1_Bj�
i��;U���gv����{�οE�|�]+f�2]��I�;x'6��'C`U�P{�P?�^���Y����.�]b${[����
+�'$�e�@#��7����I���ֽfj��� Y�qH��}r��,�N;�Q���������i�8;'G��HG��'��F��.L)��,�|,��e�㓿Va��
+endstream
+endobj
+615 0 obj <<
+/Type /Page
+/Contents 616 0 R
+/Resources 614 0 R
+/MediaBox [0 0 612 792]
+/Parent 620 0 R
+/Annots [ 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R ]
+>> endobj
+604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 548.71 526.596 557.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.1) >>
+>> endobj
+605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.2) >>
+>> endobj
+606 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 524.799 526.596 533.212]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.3) >>
+>> endobj
+607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.1) >>
+>> endobj
+608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 490.927 526.596 499.339]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 469.009 526.596 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.1) >>
+>> endobj
+610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 457.054 526.596 465.466]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 445.098 526.596 453.511]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.3) >>
+>> endobj
+612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 423.181 526.596 431.593]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.1) >>
+>> endobj
+613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 411.225 526.596 419.638]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.2) >>
+>> endobj
+617 0 obj <<
+/D [615 0 R /XYZ 86.4 726.045 null]
+>> endobj
+618 0 obj <<
+/D [615 0 R /XYZ 86.4 571.624 null]
+>> endobj
+6 0 obj <<
+/D [615 0 R /XYZ 86.4 571.624 null]
+>> endobj
+614 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+633 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+632 0 obj <<
+/Type /Page
+/Contents 633 0 R
+/Resources 631 0 R
+/MediaBox [0 0 612 792]
+/Parent 620 0 R
+>> endobj
+634 0 obj <<
+/D [632 0 R /XYZ 86.4 726.045 null]
+>> endobj
+631 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+643 0 obj <<
+/Length 586       
+/Filter /FlateDecode
+>>
+stream
+x�ՕMo�0
���>:�x~��c�t ��48�$ͬ�I���8uӦk*؆`\b�~K��0( �#�k_�GS� �H*I�|T�8HA\r0��-��u�L
+X-B;����u�y��b��F:�I��p�9qB�LTX��b�)�\aJ��4�*�F��
��]
~�ݼ�\��g��ئ
�
�(?��Z?g�i<�=t�����|�
�ۘ0& Q&��_b/D
��
ѯU0wf�
 ��m���	 3k
+gV����H�W�H���gm�H��VY~*����&�M�>�}$4�?W���I��0��b�0����٥Z�S=90�;��躩�K;���\�0�ŔY����4�~{�Q
��:�[���ˠ� *Xgc��ߙf��B\흽�eN�sЕF����}�=�Vk_��<��qu
��r�*ä��� �9���AZ���������{�?C�I_��<�븍��^���f��
��l�"A�$LW�~� p��Ϭ�O�p�E��:uy������t?�
+'g��Ϫ��8��6έ��w�,lY
b|�Gy��w�mY7�u�n�����@W�SF���)���y�dg���7��O���
+endstream
+endobj
+642 0 obj <<
+/Type /Page
+/Contents 643 0 R
+/Resources 641 0 R
+/MediaBox [0 0 612 792]
+/Parent 620 0 R
+/Annots [ 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R ]
+>> endobj
+635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 548.71 526.596 557.123]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.1) >>
+>> endobj
+636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.2) >>
+>> endobj
+637 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 514.837 526.596 523.25]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.1) >>
+>> endobj
+638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.2) >>
+>> endobj
+639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 480.964 526.596 489.377]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.1) >>
+>> endobj
+640 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 469.009 526.596 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.2) >>
+>> endobj
+644 0 obj <<
+/D [642 0 R /XYZ 86.4 726.045 null]
+>> endobj
+645 0 obj <<
+/D [642 0 R /XYZ 86.4 566.804 null]
+>> endobj
+10 0 obj <<
+/D [642 0 R /XYZ 86.4 566.804 null]
+>> endobj
+641 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+655 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+654 0 obj <<
+/Type /Page
+/Contents 655 0 R
+/Resources 653 0 R
+/MediaBox [0 0 612 792]
+/Parent 620 0 R
+>> endobj
+656 0 obj <<
+/D [654 0 R /XYZ 86.4 726.045 null]
+>> endobj
+653 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+669 0 obj <<
+/Length 3384      
+/Filter /FlateDecode
+>>
+stream
+xڝZIw�6���Бz�b��[��I�;��$/ݞS�-B��p����� E�v4�X at a+���h�_E�o"���훯ޫl%�0Id��ݭ�$ԫD�_)V������Cq�M�ި4�����
�Y*pM���<�t�
~��J}���ö�M��D���<��[
Xƫ�k)��4<3;��T'	̧���}�<8m�LEA�cJ�?]���2

�O���+��z�ۢ�L��� ��8�GuC]ڢꞳ�E�晟��n���k{3g駦�lm��qX�����"�Lkjd��C�z�qo���n��F�$̥Zm��8��CA��(���M���M�"Qq�+.�F+�jQ�����
��c���p��:
n�-����6ug���
�fAV92��
^џ��Fa�,아"~B�޿l
+I���;�ۺk��]D�'-���Q7���q���D["g��
E

+)v$�=���e
ֶ7����V��2�*�+������΀Vz�`ɾ�xyQ�S�:T`ڧ��V0�t��B�J'�y
��P����q�=��i-�{�7���~�6âd`#	�9.߯e
4�:I���z�e�0��k�lW'��i���w�a�"�-��A� �j@�qpj���
�r�sh<��t��� %���)�2

8
+ a�L�>���bE�+����������I�&�'�
+�-�����������౵}�;��~���G^a��7NE��^l�,�(Թ��|���P����J�P��cvQ�*���O�
���,J�8>^O
�{M�+o=�t���ԦE�"A�	�ʟ|0
s�e3�l��;�Er[o�L��G�R�(lט�z�1��c"�!ОtO]F�$�ܴ�
���мq�Α��]z,mk����
��KF�����n�P$"C'��;8ݔ0&����ٺ�d[
=t))�ꝟd�������
r�I�vn�'? ����T٭��4�гzs�M�,x��	A��L/&���j7Sz!��8��Ľ����`�n�ȗ��C���}����Ɉ�i&!�����L׸���9T
�ӡ�;2@�K�,��c~�EА��ҫ
xR�3�y����O9W,�2��RZDJ��,��>U
����iN= ٰ��Б"7�s�F
���0�L�?~z�����ŝ ���q�
&��	cv	<�؅��nrU���+i(�
�D�b��M
��3z�dS�L�r����
��`��ɇ��R�/P
 1�M���&m�#�y�v�L�w���
�:�P4e��A;���h��L�����[�Ƞ�(��c RHX��
�1@�7���G�.����f�*x��2.ِ$NN>Ȼ��
�I4����W.�G�Des���\@隡ݺQ��Hc	��1}�\3���q#P�q�h
�j7�p�@KJ�̏Z�
���_��J�Y�>�LEPm�����V�

��5 ����j
_��P��5���C�^iT�L��������OP2��#�_����s�}�Dfj�aS�~(���>q꼧�c������땷��+ҍ���
j(�T���y��Β!���u��Rw

��:V3=�
+vK[P�9��5(�|��84>8��;�5��h�a*�L&E⼦��{� �+�`�'����� �a�$��ǔ�כT
�P�P����X�q�������=��L��PT.V����A�L]7�����ͷ>Ct�]�\$���Eox�mQZTHjɛq�%F]V�^�&]�FE
�������_~��]d�v�� *͎c,��
��{��j���Ptv3
+
+I��5;�j//�)+G"���<�LQs%�^�
I��l�^�tn���	hvk�l�:Eul�X�euô1JC�z�
8��;R��z�
�8h8[�����qX�+�����*hI&
�%`_{ ��&XmK|�q�I�oP��h�UE�o�d> ��
ݻE4L� :�/��.��Bb�YR[Z�V�
+X�H:{i��c�BD�u�~�W��=)��
H��֎ i
3���(F;V��g%�
2�
�2��r�p���RG��|
U� {;��O+� pcv� &�
P�-o3֝0:zй���]X8���˲��f�s��/
�{Z��΀�cpW���4:o�
j
+��ʨA�B*1�ͽ
)v�
[J�$���	����� ������\��f��o���>�{�p�~
�3��
��3�T(ھ���٘\�]
+]?Ҭ
)�3[��LJ
��7R>
+��T�F�K��6�h�
S�N���lk�(���D�gw�äE�+l5��
e�S�tEZ���{�l8������
@G3�o���%�-�)�9�Z� �>94��;>*^DT��(
+蘁�#��B��K�i�; |n
�M����f*��g����\�D,N�*s#�����_G8��Ɉ��\�)9�E��b�4\o�1;E�ǻ�
+,Mg[���	�p篈o� +8�
+
�Zπ�Tq+_i+
����2S���H�U��(~�5
P\�a�]Wc$"��#I��j�|���9u�n�pB�B_[7�\˽����8r��c������ ۴�����
ea��� ��
�q�qt�P���T%�#z���	
~�
��S�x���~h��xA�2ա�W�G:����Ul����b�=�M���
+2����}@�?Ih�(O�=oQ�֣�ᆿ���$����pJs
��;T�0����&�
m ��/��k����v�xxq�x�]F[
�q��
�"�E��A��]
+���N��?I��Kn�/'�c7�^��}�g��2�=��>![�*��'�[7�`
ϼ�eO�UoI�!1�w�E��d��`r.m&��r���Ʉ�)��0�Sh�~�'
����#�W
C����I1mtpG�/�q�9?���P��c��Ĺ�����mڦ
�As�V�
+, [@[��9�k�6��6#\��P����9!B,tȾ�R�\�������@b#�:��2�'$�J�-��:�F�V���
�����*E�̓��u�i�o(��Yd���e�Of���QQ���&�w��Ţ��ʱx�9�Ize�W��a<]���f��c[�,�g��>���
��}��[QV��
�Q�$0�C'�?4=9�*�yzQ��#����(���w|W�iz��3���'7��摉>%�{#aYsq�Fs2L�a��g:�B�vh[��C4�~l�p�~bƱn�٥��� ��
+�qȱ�o*����|���2�\�<�9R��A
����N�?v&
�:0�*j��]?���B>g���E	D �G8��:�

+��6���@������P�șw	��]X�Jv��R�z� ��/|U
�`��/�g{����Tn}����.�*P�|��o\����n��A�����7��
+endstream
+endobj
+668 0 obj <<
+/Type /Page
+/Contents 669 0 R
+/Resources 667 0 R
+/MediaBox [0 0 612 792]
+/Parent 620 0 R
+/Annots [ 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R ]
+>> endobj
+657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [162.717 501.781 174.672 510.194]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HBGLSSW:05) >>
+>> endobj
+658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [317.138 422.856 324.112 431.269]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BBH:89) >>
+>> endobj
+659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [387.465 422.856 394.439 431.269]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Byr:92) >>
+>> endobj
+660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [330.741 386.991 342.696 395.403]
+/Subtype /Link
+/A << /S /GoTo /D (cite.RaHi:94) >>
+>> endobj
+661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [488.658 339.17 495.631 347.583]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [498.25 327.215 510.205 335.628]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CoHi:96) >>
+>> endobj
+663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [346.117 303.27 358.072 311.683]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SaSc:86) >>
+>> endobj
+664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [137.664 291.315 149.619 299.728]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Van:92) >>
+>> endobj
+665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [509.106 291.315 521.062 299.728]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Fre:93) >>
+>> endobj
+666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [427.327 111.952 434.301 120.365]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ByHi:99) >>
+>> endobj
+670 0 obj <<
+/D [668 0 R /XYZ 86.4 726.045 null]
+>> endobj
+14 0 obj <<
+/D [668 0 R /XYZ 86.4 701.138 null]
+>> endobj
+18 0 obj <<
+/D [668 0 R /XYZ 86.4 473.723 null]
+>> endobj
+667 0 obj <<
+/Font << /F38 517 0 R /F16 461 0 R /F8 473 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+683 0 obj <<
+/Length 3826      
+/Filter /FlateDecode
+>>
+stream
+xڥZ�{�����T,"�`���+��$v\[�%�"@	
� �%����,��=q6̼y�。��Y���g��ξ~��U�Q��v�$��*R/�ju��~Y�]���q��:��h�]}��u�6��͏۾lj\x���ٿ���W��z��V���/���
f~X��N��=�ۯ�N� Z�������1uɜ�(U��#����b_��A��3"b$��W?���<�׷<�u��m�U�N�M�c��ͪ���+�#�/��5�JC/
R˃�����-
�i��$�]�oL���nˎO����^(�o˾�o���K'�����n�
�
.�-
m�(v˚�*Z9��d$ҍN�^m���P8���hQ�	�ϋ~�.��L����D.
d��l] =��Wδ�S�cڒ\�<���m���[>y��ܸfJ�s젡��Zo��
�<Te���/`��I)p�=������c����0��L��
�L+��7m����hQ�����h�0y/��&N���.�+9�*�߉��%��ᣙ�.
��Ϯ�W���T��DV�
�H��ԉE�չ��91}aw�*��4ؓ�ۃ��
�"����Ӱd"��cY�\I�ܻGQ��D	�+x&/���h�/p! ��)j�v߀�-�F���w�e���B4�mC$C������#,d}���	#>��m��Ȏ<2u�QK�T���K���]������z���Y�����/�t����T��|)�
C/����^��+�b
�
<�ҫۂ���:���a@(Z��8�o���<�%t#
�aT���ɰ�5
�;�/{��G�e,�.O
+Q���*�o�ٍ�����F^�����`�1��M�v����n�z|yd���, .��K���s�'3��u��6�%�O� v���y@�6�1d���%�]T
àG�3c�a�� �w?�s?r�^ּo�-���GA���p�@����
w�(5~7 ����b��9�7�l4k��F<r��|׷���*v
A`�������� X�?��
"
u�D�GnS�P����"�M:�2z)_�`�x�[v%;A��
��']��Q�1��o�(ZȮ�x(i��y��t?z�����
��q.
+a�����
R�

���νX_����)vğ�(
���� Ĭ��JKP���vŒ���B�������J��Έ/����Z�0�+�
b/��
+��ҚW���
"�aѲ�@ח�/�: �
+V�f����;

+��z��$�QON�0J�!� �*�.��	f���e���;8<а����1��1ɝN%�b�v�!����i
+ �E*x�&��_�V죢�5?:�1���9
��K청�-b�r�]&
��l���)�@fP��_R��QgɃ!D�4~���w�C��:A5�<-,٠I�I w�
^
+���^H�)��
?�zW6G�;�
+���;�xG���	 WJ��lI
�-@�=��
+�R�V��	�m�7�Kd�b&�p��%�I����G�w"h�����Ǥ�AP��4,Ă&bo�YV�����sA��4�7�L��.$)���0O��p
�6�!	wVq(��|
a8 �-o7"=�2�:9��c8����AV�Ǚk� �j��	3�kA��G27�8{�c���6 �c
.�dl��4�(s��Ǘ���3�\,r���!`��MRC�D�Z u�z[
s�
�Ĉq�����6�
�*��ӂ��0b %��S���������r&� �
#���P��/o��
]��w���/���� ��� �j��2LO�8�?O~ 
+�
`�Yid���������E�) Y����,�3�"����n1(%#
��Ky�[4Q�ޣ �����Z6�6G��
��L9e�Ѳ.1���� >wɭ���ƒ���e3��r`d8z�uB�q����
+m	#��R�G-hm�cX�7Y̑�!m��x��8�'u�0;�Z�"5���3�2�x 3LΣ��ѠEG�3��n@�CA�p at Yw}f���
�3I_G���(�c@�����
� �Ͱ��6�����:.;7����Ų�g����s(5�|�4r�m���
�z�,/���� 2$FHh��J��l�!(�3��eG�/іn���7�'��|F�`NI
+�Fc¡g�>4��E㠅1F��
+'��bף])�t :i��m���.����ۢ�;��g��%2y)�Ց���>�KT�]����i��?�š�ź��|#h\���y�<�gS�'
�oƬG���
�!���ԙLl�+tNh�(��\j��.�UJKla���߰�`V`��zO�����mx7h׃ٿ�@{�"��㯈m�_��>VRӡ�#�S��֯���[�#�<=�
�5��-�}DZ���L[�9��ڷO�%�ȏt����'�F��F�m/
�
&��N�/�3BvX!����!��;��C��ۋgV�=��YE�<0\Mj��я?�cF�gR4\S'�)��c���EA�
p
+$��d��#/�C��R
x%�� �����@��yt#
rZ	
R����ϟ\to���
UC�N~(�ٸ��
�n���t�Ԕ
��0�_o�A!���7L��O�.�1V
Ɯl&�
�|������4ڊ���e�0
+
Os�}Y3�<�Y�3c]��8�.�)�G�*4�\f�B?h���/�AG�����!��i
���.Pa Is��S��Jq1ͪ�Ta�M[@�"$~�����������b����l���}/R���ZB<�%	��|�����<MS���yq^�x/�ӥp��q
�
�
���^w�8��mg5�J�wL�b��.�����e��h��W��]�� ��t��tK�C
s��'~
��a_�
�t�u���d�,��O^=l!֎mk��E�B�a�Ƌ\0�a4�9q%����
+G�=��]z)L�0�NW*F?�a�u��N�-va���̞�m����ӡ59�Z.���`�.Fp<(dA�K>4�>饷I`��xi0{q:
D��	��>?PIV|
�(x�-y�E�h;Q.lO�{�f�?|�����O��@9B�8�v<��n�M���
U�.$I��loO�M���6T��|�"6�I�?�&|e�
"&�7"	_G��C#��
�8
y?�5���
�����(#�^2�y
ni�v�
U��/~:�{�]61�
+�E��_���
��:�&�<�����n����4�����C0u_�r� ��� �,G�y}�ᆓ)vH�|w+�$����#E�"��l{J0��8v��@0�� o:%�S� ��.!ð��������p�T3�T.T��E�
{^f}��M�� D��a2sh���=)�
N��
GJ��?Ę�nR3�\�l�\�7U�b޴�apۀ��n��v��|p�jf[�1d�n^g��] y�;���O�!���:[Ҽ�:���)'������G�{A��+����Ӈ���_�+����[jى9Q"<V���Pm�&��7.7}�&4����i��W�]`z
xy��sq(�;�
����x��
D��A��~���A�m��o%�� �kgz߽}}������yAl���f�!� 2M�l̖Z�b���H̪|
@l
&g��0�=)~`+28=�{��f�c�+P��+����
��D+m�&�ˁ�c�}�Y�V�G��
��*r�"f��&NC�«�6�1��B��Q=	t�D/��&���mq`t[���
0�e�����{�b���嫯|
�Y��|�������E����#��Љ�?�1��N��NlGXu۳��?b���k�����1��
+endstream
+endobj
+682 0 obj <<
+/Type /Page
+/Contents 683 0 R
+/Resources 681 0 R
+/MediaBox [0 0 612 792]
+/Parent 620 0 R
+>> endobj
+684 0 obj <<
+/D [682 0 R /XYZ 86.4 726.045 null]
+>> endobj
+22 0 obj <<
+/D [682 0 R /XYZ 86.4 539.991 null]
+>> endobj
+686 0 obj <<
+/D [682 0 R /XYZ 86.4 489.51 null]
+>> endobj
+687 0 obj <<
+/D [682 0 R /XYZ 86.4 208.801 null]
+>> endobj
+681 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F6 685 0 R /F38 517 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+691 0 obj <<
+/Length 4420      
+/Filter /FlateDecode
+>>
+stream
+xڭ[ms۸��_��~�o"� 	�l;�Q
��mΗھ�3m?�%�G�:���k|� I�}�|�H ��b���p8���ٷ��^�z�>ҳ,ȴԳ��,�A<Kd�Ḫ׳�E OQ�Oo�z[t��7m���}[ܕ͡㷻�H΋�+Ob��P*�N�<:����_�]������Ù�C� ��l�{����5��yQ����nGY ᩚ]���p<�t4s� ���D ͓��?�鼁Ydz�+��G5�9l;.�E[p�?C.�\�ۼ]�����[ӨG!�y_��9W�y�Ẳ�zST}�����]�Ue��͛��x5Q��e�:N?5낛�[�>�������5u�C�5��$P��:
�������A�����o������)�ANQ�Q{�z ף��2��_�Da1���Ą�A���}ӷE� � �2L�,IZ'\w��)�]-?���7f]��h�׮+o����|GO�|ź
۩`9�'ux��,��'�
���ʜ��>�+�e��Z;��
�9�+#3b�Ӎ4
+R�U~�X0Bpl�מ^t ���������"��G��
�-��z��M�g\.o:�v�A&��$�������Y�y������>���}ў?��E4�tH
+�C�w�i�
I�a C��`�"�od��\�5>`b�����
��E`oS��
�n|Z����ׯ��2����~�X��Ϋn� ��̤��>�����~.�O���Q�<�r*H�d<��Z�d��Q�mѱ%-����-���	��"N�����
+n��
�]'l,W���˚o�0���Wv-�Ё�aM7>@�A��t���*��;Qz���@E�9��+��m�m�]�nE�A�b�T�ٳ���3:���[��ޕ��cl$���L�4��K�(
+D�:pD��hE�Ҕz
+��t�2�z�L���k
��&&j:�G�Sp�bb��E��ׅ�+�ҸgUu��6����Cg��%@�j0ŧ�ޙ���8H��*�6o�����N�#l!�� =xx�k9��xw�e�
=;z|�8
������
�tsz������g�cxTh��-
���.�}%A��]�dm�ul�C����v{��{/�D\&��L�T<<VEJ�r:SY(P�ߠ�"� C%�U�e<hU�[��3*0�ȶ�5'�׬
�%Y"���PaŖ˨n<���>pS�]��c;�����y�M�
� �
��� ��@��j�s�9s
K�Y
Va �2>B�!
+�t��	k0�#׽fx�h�/���CX���ӂ�����=�x�@��	����ۼ�����c
���%#~���#'z��qe�_��꜕
�X���#��T*N���wII��|�\n�����
߱S`
�;���gߞ]~�������gŚ�	n�ٹ3F���7v��
r�ɼ9�w�Q$	�$��8��oV�%��Fgk�� �Q6�T"q�P���V���q#=�IƁ>��s�,�.O�� 
Xk�6�L؀W�d��U3B�Z����6h
ѷ�>��r]V�`W��X�!��.�y�b̯�ΥC �
̩i�Z&
X�5���CE)R`m�-��FEQ�s�z�ٳ`�o�"_/�S㶠R{tA[~-Pq8�/ۦ��fF�/w�1?
"

�S���x�ͩ������X�uQ7���d1D�κ]|:;����U�#1S�$��[��D��QW�����������b0elY�hX�G�v�� r��g�
�
��
+ˎ#~$/���w�g�wWO
��%*P�H�o�"�U�1��3|�r mr0��e7Fw�c�W�w.I�M6AA�al���?o�����
2q�M���
��oz�������+�ߔu���ތIH���)�V���
Olj���L�a	�lF|T�`���F�N��\p�����>��س�+�~`�Z
5vM[X
��Ȍ��Ѷ�o*6woރ.����!�>k,jG
'�W�w�������"pg���N���]��KdHW��n���
+n2�\7x>
[
�Ŭ�:�:��Ud���=8�P��MS����]��)f�"�,;~�nr�ұN��Z.H��փLq"�RD�
�k|�#܆Xi�@[B�ؾ�_��$C��\��-iȃ���bG=L���L�o `���5�F� ~�M卍T�9�w;(��`��"� Ύ���5�
�1�#��4T�t�N���V��d�<
,xj��/��
��981��
+){�ϫb���	�	�p�#eˬ�%�A*�M����Cn�V���1� _�2��⯋*�̀�bUn
�a��˫7�䙗������V���nA	x��xs�z�4�[3�#b �X$ ���g�nOO��Ɔ
��0,�Eq^�K���ǻ��3�A'(��u_�+R�4-���������Q<�ŁD��S�7�� 
0���|z`2��B�R�޼QK��ϝ%�gH�,H�����
r2cCdN?Xvu��_� ��Ֆ
�@��� E�;�Bi�#W�1ы��1V�Mk⡩�D6F�j~��\�h�&Tbj2
�<�6n��"6�
8���y�5�Y R5POWE���w�'PY�>��EqU�?
jca�y�p��1!T�2]6���uyW���pS����mH8�|��Y��K�R٠L�`([; �=�
�g˞KK�C]�O��
YQ
�W5��!�"��Y�;�(�6��B17�En�Y�%�րu�
o�xp���!�

�v�ucE!�bq�����Ϛk3��N��g#ۢ?�8�(4�Bf�f����
ȟo�y���쒃R��o���/e��k;sʛ
��C	�ldor�6[]����0Sz���I��d?��-�M���)D�
 ^�.�Q�Ǥ
�`��pZ�o?7=*�!������"�l8ٗ��b��x��y�G���K�Y�X�0�!
� �s���/?�
+B妁��X����Ǻ�T
��7c��m�x|D��A�	�
R�Ѓ:� � ��T�%2���i��VŦ窢^� �)���$\�9(�H��𒯹��q�ow[n�:���
/A�ܗC

�	�;�{�`4�D	`[�-�'�:��U���#3����Q�#���>�.q�WDFQ,���tg��Md�����5)X�We��1h�)�f�g�\��17���Njw��W
��W
�t�@���&!ͦ\��#Y���Pa�xu��W� ���1&��ۓ1�=�8�<?���b^0��f�
���/Q5��{=(G�
�F����!:~�5��_�\�� ��H���U��
+(9�&�Ex��ܝ��Z�RL��p�vJ�%���#�a���*
2B��3\P-
Wh�����#/߲i�!
�L���.ý8����kz�
��CKV���8�e�|1��OH�0��Eb�y��<���w
����c�OО��Nŝ
�1C��r34C!x������O
��xr� ^)��G5������Th���P1x�˴�5ޘ
U�z��Y���2�@�ͭ&�-�CiR��
��^���:f
���s3�-�W�}��T$
Y����Z���a=�̭�������5��&e|K���/J
c^:� �=����ٌ�[�v���s�A3�����-D��r��Y��m�m^�눏S���E
g��Gy����;��3^�S6Xj�H�o=�k>�X��weU�Ƥ^,,dlM)0��-;F'1�T$o�J�q��N�[�1��E�.�3ǺT��w'��v���쎽�l�լɆJ
�R��fW�^ �8�<�V��d#�d8�
s��&mY��68��/l�����XKQ��%`�����
,�D�ß��"a��5����0`N�6ǣ��2e�{G��<�x>c@�C!lag�g��y�#��#{i�;gr,H�9��
��<J� p̎��W�{��ۜ�i����&t��&6�I(+�	�~��mQ�ޙ|$߮ ����0)m� �~���>��q��
�{q�:�ۤ�u�z[�`�U�/&B����%
��[����(︖���^�Y��G7�Mz[�\B����`1YX�Sc�����I�E�GZ� W�@~u͡]��{d$hHԇ�� �	���[��	�1�k��]~{��x�(�@���_���H�|ʣT�Ҧ��e�=r�tD
aQUN
S�
_�>�W�=��ܹ�H;��e��n�E��Iȿ���ӽ@�/ɛ���4o!ോ������:C(��G����R����[ML�D
+�C3ۂ+M� �dθj�Sv
�P9��K� �uZ�;�?��\�5��
�
n��1T�=���"	�|�f�A)2��@�ZQ@
���iRo�;��q�1V��t���<�՚����/vEtf/Y!Q�օi�6&
6�*r;�������%cɏ]�q[o��
M��nڲ�"I6������Gl��Y&��Q����3
+9��4���p���Bt�?L�
+endstream
+endobj
+690 0 obj <<
+/Type /Page
+/Contents 691 0 R
+/Resources 689 0 R
+/MediaBox [0 0 612 792]
+/Parent 698 0 R
+/Annots [ 688 0 R ]
+>> endobj
+688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 97.472 519.955 109.427]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+692 0 obj <<
+/D [690 0 R /XYZ 86.4 726.045 null]
+>> endobj
+693 0 obj <<
+/D [690 0 R /XYZ 86.4 466.541 null]
+>> endobj
+695 0 obj <<
+/D [690 0 R /XYZ 86.4 259.033 null]
+>> endobj
+696 0 obj <<
+/D [690 0 R /XYZ 86.4 111.301 null]
+>> endobj
+689 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F38 517 0 R /F11 694 0 R /F49 646 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+705 0 obj <<
+/Length 3415      
+/Filter /FlateDecode
+>>
+stream
+xڭZIw�6��W��^�!���c�9/��R&�$��ja�&e.�=�~�B�D-3�E�
�Z�Z�ps܄����Wg���&
�$J6W7�j�FY�H��:l~۪�?�~��4	Bc�
�X��h�5����~ߙ���g�ξ�	�
7ŸZ%����?��3?n�@fz�`ם6JfA�V��<��,�R�'ĉPR�M��@�	�ru[��$���%�宩����Ǣ*��Ρ�Z7^���n�uy
�m����qH������i	������e��2A��b����@B���;e��$���3,�3�t�*��˫����q��OPJ����J/�О�|�
q�Py!
�by`�
��2��N� �ݩ'h&�
��P�
�m;Tn{�|��M�p�)�]^
��`Ib�/*�<1'�DM�dA��#�a�r����T����d�%y�-Z�oT�ى*
+4��
]`L,⑰H��/Ģ���`$�D�
�����֔ȦF,��]ݘ���)�L��G����dd0,�e̗
��A� �*?�-�
�Tk7�J�Ó ��x���K:���Y
+
���A*b���eA��#�.�*�VR�; �w��흵h�a�+��k�
�wq2��¹ YD�C&sY�*)&ҥ���kܰ�j
�L������@�ZD���
�ceXc�)�m�Ʒ8��� ג�y�E :�,[cw���
P�j%Z��
�@R^
ѹ!O���[ �	��J��Q �v�=u��
��=6��ۻ��q�x�4{ĉ�YPa9�9
�ݜG��˩Yam�4<&���
��mN�����5�������$�_�+���n�M��u�n���>/���k�7�D?���X6��f&�wm�)Q2E�)��d� �
+��4Z�/��`��d��L�"�h�ʩJ���ZAy
+>��>o��o�2p���SњC�{O���&�H�3R��әx�
+g���!P!�sqLI���?e�eO�]M�[�,5"̢�M�r����X�
��,
�4G�|�8��fW+7�1�{ �\m���@��:�
P;�p��
@�N���oUR�֭[݄Σ
A�y�"nΫU�1����Gq8����R	�9蚕����և��J�pX
v(�n��+�2X�غ�[�p�9�������Z��oN������
�2�w绩��y��/��{��ܫ����'�%�p{9�Z˓7�i#4aI�1vBh�m�숦��Û�J������k�W;zv���!�4�+�p7}�B�m��p ��]R��<x|��nR����PœTG�怘��iO���媹ˍ�UMW<p��?{�����#o��	���:7����8�;��q��Z�^^q*Nu���%���?;��MX�p��6(�E2�4	H>
n3�����5צ4��d��}�����f�19u�%Nmi�_
fs㶀�7���ү\82�L
]H�N���
Ut��Bϓ��+�s��t�n�joN�S*� �����yj'���7J�@Ù�o��<��QtR��b�D�/�Q
2�q�R�Ŝ8����zk������
ʠa�A�ԝ��&�ˎ;�B�P���Hw�St�dS�H[��
��V��\'"��b.�Q�@�u=h_���Mg�C��H4��c���{���]�X�2|`Ċ�
ԡ(���7QA<�J��_�'��
鈻p�)q}�V�H<L��ى�¥��}=����9���|}��J�,]��	����JD=f�3�K��
S5�Dˍ)6�{�7����
g�%Bl/
��(�����n�vG��t.����b��Tw}�vΊ(
��O4{m\�
��� 
J̃-�)
n��Q���ʍ�WK�f�b����F�X��L>e|���2E��_�1�[���웇5y��6
��TE�7.Ѓ%��V���>	9��IӀ3�ιKC�SPn�
�e�6�u���z�h�i��F�*��Sh������O���ݖ��,�֝h�k�$_̻���f�����*f��;b;���uo�7�omg��䖳�Ңij&'Z�{̉�op��,�����$�1�6�Dt}ݷݟ1�(�4R\7�b�2��ݚ��f��Y�~E��6[�^���1dh�?ط�
�w<RW6�
��Q,��*sv">��<z-�	Jr�����֞з��p0n@�mu~B�{�|D���8�G��{�Ó�9� �C�zt������u8���
Z�������n�����4��jɋrM�$LF����I#����٩�F:��4R�:�[����4Mp)ӳ״'
��6�y�2��کVi�Gt�ᄄ���s�
A��z�t��A0ә�3��x���Y:o'���ۑ�ke�(H�Pe0�s�H��0R/N���s�����Z;�n?"`C���Z�,�8Sc��t�
�X	r+V~/(��
ʤ���G� ��
X-ǯ��b��������;Qdr������,����\ɡ�-P�zb�n��5l�
bJG7���g��s�q�
���|�sgx��}١�.�1���z����L��ϪN
7O
��5
�z�y1�#��g9l���{���J�t,#[�^���t�
%Fz
�k��`7m�,���v�A1�
q���P���)�@�ּ�f5�����,	��@T���8%g�H[ҡ��vܤ��
��8��3*��k��+3B��G�U�q��Ʒ����b��8K�9�_���E
���
4��k�,c�1��C
��
Gy��<�Jbz�h�l I�,������B��8�>��LA9�Z�留�p�\5[��'E-���@Ӭ#�$;4�Hhhj��r�3n�H�Ͻ�[w�҉bȗ�ڧ�.�s�^��옩 y'��;[�z�m
+BP\ߟi��|�m
WL�Ծ����A='_���B.��Z�M��i�����B�J�3�
r*9AQ
��
�
ţ4��!��pF�L\>MN؎�eC���c��CJ�N}
��9&���?6��{�OK^�Xw����%�x�9ug�qV
�)r �]�G�ь�+�8���^�4ɟ�-
���>����[}"����;��j�[����S>��J�n�]��
u�
?�K�'ɇ���c�[����V��?~x?�OO�k?�+e2\�,KR��5A�
�d�iCWR��Z��oP���˩��1�sA�����pf�\
��ِ�p��u�\f����
8���5��eE�*���{���s׵��P�7j�5�K
+���+	�Q����N�8��.Z�pn��Eo�xNi��_e���vhn
�N�y7ic3��b((y
+
�a��7�����.ڮ����a��x� ����kN�@�H��d��P�h���v#��j�e�8#����Ҥ�!� ���`X�\)-wi)o��rT{�ְ&w��gK�� �&�WSY	�?6VI��2'��u3|eG��_��<yYK
+endstream
+endobj
+704 0 obj <<
+/Type /Page
+/Contents 705 0 R
+/Resources 703 0 R
+/MediaBox [0 0 612 792]
+/Parent 698 0 R
+/Annots [ 699 0 R 700 0 R 701 0 R 702 0 R ]
+>> endobj
+699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.031 569.041 326.005 580.996]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.066 461.82 140.53 472.668]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [263.929 213.474 286.4 224.322]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [311.528 213.474 333.999 224.322]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+706 0 obj <<
+/D [704 0 R /XYZ 86.4 726.045 null]
+>> endobj
+707 0 obj <<
+/D [704 0 R /XYZ 86.4 606.158 null]
+>> endobj
+708 0 obj <<
+/D [704 0 R /XYZ 86.4 427.557 null]
+>> endobj
+709 0 obj <<
+/D [704 0 R /XYZ 86.4 344.775 null]
+>> endobj
+710 0 obj <<
+/D [704 0 R /XYZ 86.4 297.858 null]
+>> endobj
+26 0 obj <<
+/D [704 0 R /XYZ 86.4 103.165 null]
+>> endobj
+703 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F11 694 0 R /F14 697 0 R /F38 517 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+743 0 obj <<
+/Length 3973      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�F~ׯ�#�`́+���*e�D�����H�A��!Y���=݃�e��VJU 1�������녷xw���ً�*X�n
�`qs��W/B������#\}~�"�����˗W��M;�fE�4}��Ӭ���v��O7?���9��L�<�B�q}7��"ݞ}��-V�凅�8Zܛ~ۅV�+�U,ޟ�r�����
b�0 6�U���RN[�S;�&#B�%�yN�I���P����Lڼ*��7�%/�e�Y��V��a�4����ƅ;����7K�^�zmZ
��wQ0
��X�Ņ�����MVï���6V��P@'����#�j�|Y�~�)��s�/+�R��k�u֓`�o�x���R*��a!�Q�S�2�:7�CE��{~D1�L��評&M��yk�;�9�¬�8k�ܒ����߮�`.�﹞�h���L��+X*�B� �64F��tR3NI��YK���7�ynh�Y���5
B��'��
�خ�Q_��z�
+��=Ԯ��H`'�G��@2
*T1f��&ٵY}d��G�I�
c����f�s��0���v}ן�tO��f�^T���Q�����{JJy�y�򠧖hL�T�ǣBpD�/�O�oa(�K�qBc
Z�!�Y�F��z��26���qf�85�
+U�Z�-8KI�M��L��
�G�@2�a\J�w���'�-�
+gņF&�}��8��s?p���
��*W9�	�Ď8Μ.��h���.��.���Gv����i��
J�;�ng�.0�ɛ�e���/��$��yRR����-4��KP�R��n��A�3�Wn�'Bpl��7���x𒫊�[T��h�
:c��]�P
ݰ��*�
�B�d����dڑ%J-]��O���+�\
�l:�\h'�d��τᅮ�zE*��
+��0�h��G�%W�ꊌ�[�0*��櫾���S�r��P-3�8t���@m�������˄h�H, at A
��
+��1�5�i0
8���t}��U��w�|s��fm��
J��"�*~�Ux�mݥmW�2�j#@�xR�L@i���T�9��mU�.�S�n�О���J��ah�C�{���2-+-
 *�'H:əx�����
�g����[��0�`s�5i��Я5D1��'�=4�>��4P(�sh�)��6k7
,� Im�
4
+��\
6�1�94PD��	X��{DqKV��	�'��I��|�����G Ty������ ����Wt}yE�xk�zhڞJ���ϯ��.<Vm�A�0+�I�<*�o3�4'�1��ގÑ7�E��.$ ^����Qw���,�"oȢ��6g���ZB9��(옊�ģz����Ԡ�

+[�G]��&��E��ę>굎y`l@
�@|�u�O�0�(a�kJc
|c�b���-�h

�M48O�S�F�gR5(
(�HӁ����
��_�N�ףx�

٢
/|�T�)EZ���	��ras����=��T����M�!�
��C𙓟� �>��I�G(�������k ?A��Gc|�>=#��LF�Qu�����&&��T_u�f�?�o-2�nQ�\/<q�bO�E����t���� �fX��	 �<5��`y�W�%s��iѭ2^pB�+�l�̖. {���#�(�tTx����8�׷I�Z~kQkߝ�]���Շ0i{ٸ
�ܙ|�����U�Ԅ�[�V��AL0ۯ�X8�
����-Ă��6 N"��8lf�E�������1e�����9�Ob1�YL�$�B�J�2[u������aػ"m�"�+��=�1�:(I
�8rl�b��S��?���
��Ҹ
�{=�6��ؘ!P�u����T��rHR��_�O�8Y	X;��\
������\
+kfj6I�h
'K�����
@�`p�W
�8`��H��H
+��Uɮ.U4�R�ve|
+8�2'��C
+�84��$/�<%=��i�9�	����[���F��s#�\�ټܔؑrD�k4Xĩ
��30j�T�aW`n���a~���
�ِK!���y������U�3�eg�=�m�mU?P{g�QRYA�c�X&
�
K�sv��q����9/��Z��B͑œ�$�
͔BV_�n�(VL�`���RA�b^�D���&��,1+�&±rN,Ʈ��V��!3��/��|�OGA�x��R'�
k7�{��:kXT�����#�6���ۯq�~z�4㧱aC�9' �  
ۯ��ok��
g
�>
+Xǐ���y?FҲ/��Bl��D�1�D����zF_y75MJK	��8�g7��k�z�)��>��u�PH���~�2R�k
�����S�(�9?Ǯ�OK��<L����
�)��ۼ����##&1֐ Dױ�Z�)�^
��{L�
+~K"6q��_�Rp�����'�(����f1��=7���a�eA^��<�!���-��
+
���`���vW���ˑT�<��Z8/�.������(
߈J�-�Z�x�΋���V���V�=JTt���������]��O'A|� ����-��Z���j;'C���\T��J�R�Fx�L����
W`�꘏�9Cёo��\	0�:_�G�\��}��@/	㋈/h�|���7
d��8�ʊ`�A�~_���P��mD�M
�
�3�������H��7H��$�u�%D��h	�=��X�5�ɸC�0��-AOJ&!
��P��o�חe��M�z���aي�Ke_ZsY?d_vER�IA��2���"v<�&��r_�
f`�%HCE{'��ts����/L�A�(
+��"Sa��wB�p
�&~����nC3N勔^������%=�_�mV�XA*N�k�


	&r�\t�6�b��h|���+̮q�ڇ-*M �`���Ѧ��-�@�aiw+s]�Po<�����WB���9nv��S�O�x ��p�X��;G�
��`83��*K
R��	Q۵<}nS��z[��OQh��O�d�d�S�mR6��~�����Gΐ�%�+z
����*Xm�=$�+�0�:/]{��޻��ȍ�k���3��}��τ�[�x]�����u1���A,L��BQ�Lϕt>�>�Z�1��vKiϐ<H,�3�����0~�7}I�ޒ\.m��
�SB@����� �:�3��f��Џ��<R�retJ�C�s����v���Gy�G����z�#��f��t��"�Ӌ��l�Is�ߧU�1���w���.�ȵ��[[{l�3�S��l͖@3 at D�K&
�A
�S���>�Ҁ�Q־t%ĭ
,�j=��*��ǷXCt�^�-�I����pr/jMoo5|����5M��
P��U�����9y_�P��:T7����� 
Ar~� [...]
+���]R��/E���:��*|-�8��t>G`/s����P!<�����	���pG�c{l�W�5z����c����W���clS_}8�_.b��^�JO=v�\�q�7�����q0��Ǜ��?��]��d��g���Rϱ�r��IWo��­�\~
ڧ�1��a�t�՘���
>1�Ṉ��#�9�l�M����c�观<^8�W%H�I7��$�m�+V��c=\��/�d8�!
+]�Ŏ�,D�t�$���a�Ҷ�ǃM!y�Z	�-��3����NL.�%jSm�����ʲ�)i��q(�c�>���ä�-����|&����P�7�<~�ň�"Z�S6�c���,m�b@
���$�O��;Wﮯ�T
�n���&�
��'t
�r�i�؅+{�
��=�:
t�P�F*B0¨�´�f��
��#��
+endstream
+endobj
+742 0 obj <<
+/Type /Page
+/Contents 743 0 R
+/Resources 741 0 R
+/MediaBox [0 0 612 792]
+/Parent 698 0 R
+/Annots [ 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 739 0 R 740 0 R ]
+>> endobj
+738 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./warning.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 747 0 R
+/BBox [0 0 26 26]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 748 0 R
+>>/Font << /R8 749 0 R>>
+>>
+/Length 750 0 R
+/Filter /FlateDecode
+>>
+stream
+x��O1�0
��f')�W$�L�*�5Ca��$m�Ď<�u�;�&2,d��e
�@�
B�y���jE)�z�ܗ!6p�T�c�������P�>6��|����︭���	��+t�N�4��A���ciZ���P���P���f�
8'\�| ��8P
+endstream
+endobj
+747 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20160810091351-07'00')
+/ModDate (D:20160810091351-07'00')
+/Title (warning.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+748 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+749 0 obj
+<<
+/BaseFont /SOTQNP#2BTimes-Bold
+/FontDescriptor 751 0 R
+/Type /Font
+/FirstChar 33
+/LastChar 33
+/Widths [ 333]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+750 0 obj
+152
+endobj
+751 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SOTQNP#2BTimes-Bold
+/FontBBox [ 0 -13 251 691]
+/Flags 65568
+/Ascent 691
+/CapHeight 691
+/Descent -13
+/ItalicAngle 0
+/StemV 37
+/MissingWidth 500
+/CharSet (/exclam)
+/FontFile3 752 0 R
+>>
+endobj
+752 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 328
+>>
+stream
+x�cd`ab`dd���M-�u��Iq�~H3��a�!��]����;�,��\V�n
�n
�E�o	}o�����A�����b�b���ʢ���РpMmm
������BR%LF�%�83=OA
�(K��/�M�+�Vp����LVHϩ,�(VHLIIMi
K�I�Vp���,(�/S�p�T0200��~��I��
+A���y
+~��
+>
+��)����


��

L
L��,�?:��?��n�c�|ƻ�m��[}7�MM��^��k��
;w�n���ySt�w�){V����~�"�39�Bs�|��+f�ɭЙ9�7?_�����g[��]�{�
��
+�xx �~}J
+endstream
+endobj
+711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.631 664.181 284.353 675.03]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.566 664.181 361.54 675.03]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.823 664.181 430.295 675.03]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [144.916 654.163 156.872 662.576]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ex) >>
+>> endobj
+715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.264 639.718 254.987 651.673]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [93.706 627.762 108.428 639.718]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.493 627.762 362.964 639.718]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.049 615.807 135.023 627.762]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.356 615.807 387.078 627.762]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.55 615.807 453.524 627.762]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.108 583.879 169.081 594.727]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.832 559.415 215.555 571.37]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [337.597 559.415 352.32 571.37]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.189 559.415 453.911 571.37]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.4) >>
+>> endobj
+725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.876 538.889 484.599 550.844]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [304.775 526.933 319.498 538.889]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.776 506.96 156.75 517.809]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.674 474.479 169.647 485.327]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.238 441.997 157.211 452.845]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.949 417.533 241.671 429.488]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.612 405.578 133.335 417.533]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.303 405.578 429.025 417.533]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 405.578 519.955 417.533]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.322 373.096 155.296 385.051]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.081 341.168 156.055 352.016]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.607 308.133 286.072 320.088]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [311.583 296.177 320.633 308.133]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [346.674 191.823 353.648 200.235]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CoHi:94) >>
+>> endobj
+740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [456.941 191.823 463.915 200.235]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ByHi:98) >>
+>> endobj
+744 0 obj <<
+/D [742 0 R /XYZ 86.4 726.045 null]
+>> endobj
+745 0 obj <<
+/D [742 0 R /XYZ 86.4 214.942 null]
+>> endobj
+30 0 obj <<
+/D [742 0 R /XYZ 86.4 174.668 null]
+>> endobj
+741 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F48 619 0 R /F49 646 0 R /F38 517 0 R /F55 746 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+758 0 obj <<
+/Length 2421      
+/Filter /FlateDecode
+>>
+stream
+xڕX[w��~ϯ��^+fs�>� I�%�N���b��nRl7Ϳ?���٤�y1�F#}#i4�F�#mtqrV�|97��L�9�3*
FSG�F�1S
S��7��^|
���j�
��5c�P�];��w�[l�A���8��D9m���luj9�������h	3_G�jΦ��[�,s�@�F��/'ڑuӑ��3�6��93]�]�-�UK��]7l�o�Ǧ��v��[�ε���֋j��}9�
8��&��ښŪ��
+���ϓ ��
G��\.��T�>�
�|=ĭ�^T�[�����YV�(���6���Ķ�?���n[��>��C�Z���K�<�
�
�Yڐ*�qtj�	 �&���
z35#Cy�I�q�s��8`���lm?:u��4���)�
G�˱�*/]�,*^���[����c�\�(�����fc0W
O,�U�;x�+;T�I
J1��-J���n�)F3x�A�޽�`��{ګ��mہY1��[���V
�޳�D{��2uY7�u�m�Nql)���LV�6�j���
�������ܣ9�e5��[���^p۲[��\
�!����jN%D�
���@ut0�+خ�N�Oہ�5
Ъ�?VC�9+���W6K�d2��ح��|��I���,��iNt۞a��R�"�-���g�-����r��6
+p���B�t
��a�[�q"+
Ǟ���ʟ�$O���k�>Ӥ�tզ�8y���R�@a�����[���8
�8�Ԕz����
,q�}�w%Y�u#����}ś�Z_������}�ݙ��;0�k�о��O�U�u�c(�Q�C.�7�)�-�|W`�s\Ր�%�
�
+2�
+q(��j����I���A���_���ASu�t�%ݡ�T���<I�A8�>婮!�P�Q�vS��^��^��m��؇���b��4�����5�0ՙn�%�!}�Y
p'C45���`�*������)�?�M�D-3�v�-�wR�uSv�|fm���M�
��K�
�1ʃu��i��� ���(�Ll:�!�;ʶ��e%�}*���
��h�e�[
+��Ƙʺ���6�-ufY���j3�Gz<q��;�P�
n����3WY` r�Q=��5]
��8�m��"�����������t`���t-���~�޲������@��/�YX/��^W
O�q� �~��Ym?�e8.��L���<�
��0�QW=�=5D��
��0���
+�B�=V�T�P��BĊ��V�!Vv�GX�\	�
Ӱu%��rAG>E‘>�{�[W|�p��9��K+��X��\cȕ۪��$� {�
�O���9I�M2���>>l�#�j6��

.�r]1�BQ�{X`@Ϳ`�aC


+��
��l�Uc�D�Ӌ�!�Nf�e߯j��!"�@M[�y-s�f	몏s�����p��V�$��E(Ed	�Kݖ�
�l�Eh�>��(��h�WF�H�[pi�7�{;^��9���A��l���(G�
%Oϋ�1����ꧮ34+ş�(���$qh���,��,���A��
+/	z��Ȣ�y��ԇ����sͰ���� L�1�z���ȥ��_]�Q(��;��FEA���d��� J.d
&1��BĴ�
+�DE�:ʆ"E
��P �ft0b�`Sœ��s�^��	�؊xgQ
w<Ɏq
	�
:��D2��5������$�p�
�9��:�C
Љ#D�{�UHϚ��I���&L
+&�K/���=pQWn�0�ES
݄�U�+N�� rQ�x������
��;K���*��Ա!+����ل|D%�!u��;
#R8}4s�p�w㮶�5(���,�S
Dɻ�i"g
3���h�
!J����ov╇��Aq���h��]y����&����v$�a���8��
+
+Q����:�DȨ"�����ٰUET�
�kj(i�L�7���00>n"?��˼8�{�s���Q 4�+�c<_��P�����+�7:�����d0�0#�k�>�g-�F�-D8�f��BȂe�p2�&=�%!HS��;8g>Fe�)�o/C�x �5�)mLe�S at 8����#��T���H
���"�.$E�
�x� J�(��e�E9�2�3*
�t��#��q��I1�P�@�S�SDΙ!�p��?�j���Ny
++�G��
�F��y�ӀP��h_ZM9#��g�_2�8���;VÒ;�R�i���&��H���w��G-��}�υ#�oڍ�[ˑf���U��Q�_iy�ήYR�$<>�X�}QI��ZN���'Q�e��z.�m�f������~|���P]�k
� �`B]���!P�����Q)S�=��Y�pÂq�q��v@��?�����Lb�� ��1�h�׍���������Ds�p!���b��F����߰8��R
+endstream
+endobj
+757 0 obj <<
+/Type /Page
+/Contents 758 0 R
+/Resources 756 0 R
+/MediaBox [0 0 612 792]
+/Parent 698 0 R
+>> endobj
+759 0 obj <<
+/D [757 0 R /XYZ 86.4 726.045 null]
+>> endobj
+34 0 obj <<
+/D [757 0 R /XYZ 86.4 701.138 null]
+>> endobj
+38 0 obj <<
+/D [757 0 R /XYZ 86.4 649.903 null]
+>> endobj
+42 0 obj <<
+/D [757 0 R /XYZ 86.4 501.836 null]
+>> endobj
+46 0 obj <<
+/D [757 0 R /XYZ 86.4 401.589 null]
+>> endobj
+760 0 obj <<
+/D [757 0 R /XYZ 86.4 95.261 null]
+>> endobj
+756 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+763 0 obj <<
+/Length 989       
+/Filter /FlateDecode
+>>
+stream
+x�uVɒ�6
��+x�����q&KW�\]��s�́-�ݬ�H�����E^�9	A,��S�JR���_}���I�tu^����uR�&��~ �4K���h
�������;<��/>rf��ڊ�K<�M���Y�]��_��� NJ��Jڲ&��z���n��4)�����DʢKr�F�[��JC��e��E�]�TMM�.K2����ą�o��JS�ą}�R�
+
+��Ia��rNw�Yn��Q�󆾯�r-'.Q��N��e�P{�\���V�'��A�ĬP��������E��5 � �Ar��/7���6P	��)�&˒�
+5�<,K,Dh/��8*�S�}�
���0�

7`�'�aZ�P�eZeM��G�Mx�B
q���e���e�6�{c���8?B�-Ur�*MC���҈���9���+v��;�z@���v��U���&��uFGn9�d'������<J_&�r��s
`,�=Ğ\3�C�Rv�L3;��:j�;@����8w*�-�}ܢ��0�����^s�A@�����V��|v�X���y
�^�h)Z��`uԐ:
kUQ��c�&�$yx���Ή57˴��;��b��
�y4
+k�3�#��(,�G�l`E9��d����
+8����;���+��׽�5�s���zS�W���
���w`0�O/ѬfC�L��?�o�nb�z�rX:��|`��5�N��e�/2�I���q��p�-C�c�L���+z%�v����d0���҆G�z����"�;���i�1P
�r���S��[�W��|��)("�B� ?boU�tK��9�
���-���¥w6�
�6
2k�RJ��1 at x�d����u\�� �����
¬�W˰��Mį�

+W��AXB����9�t�{tP!�)7!U��"�"�7ʏ?����7�f��i�ks�U�-��u��>�+��
+4b��8z�Y����B[��3;�!�o���
/�k.缡Ay�u�a1��������g�
+endstream
+endobj
+762 0 obj <<
+/Type /Page
+/Contents 763 0 R
+/Resources 761 0 R
+/MediaBox [0 0 612 792]
+/Parent 698 0 R
+>> endobj
+764 0 obj <<
+/D [762 0 R /XYZ 86.4 726.045 null]
+>> endobj
+765 0 obj <<
+/D [762 0 R /XYZ 86.4 701.138 null]
+>> endobj
+766 0 obj <<
+/D [762 0 R /XYZ 86.4 649.388 null]
+>> endobj
+761 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+769 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+768 0 obj <<
+/Type /Page
+/Contents 769 0 R
+/Resources 767 0 R
+/MediaBox [0 0 612 792]
+/Parent 698 0 R
+>> endobj
+770 0 obj <<
+/D [768 0 R /XYZ 86.4 726.045 null]
+>> endobj
+767 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+775 0 obj <<
+/Length 3184      
+/Filter /FlateDecode
+>>
+stream
+x��[�۶��By
�d=�I�4�8ͤ��3I�CK<'�x&�8����X�	z��i�/'��>�����_|���ߏ_?��g*_Hά�f��v�[�V�_c�׋�O����jo�ʙL����K�F3�;����R,�>xU�wն��U���>iv]��Z�M!�`��6�`�yXr�Ӎ�Y��hh>�$sF�~`�l`h�U��R�y��O��
�ջ��qy����ج��+z�o�7�j>����߿��W
�қ��	�V1�@
+���	_�X0^
���}��������+$��x�I��x}�"u�o��-W=u�6��\,AVF���'
����K�\!�
�	�_�LL 83b�����fx�
M̡X��0�q�֥h�I��&��
l|�
�:5Y��R�����e�5��M�#5l���+i�m���	���4G
&?�|Q��\����
�n6�E��1n�����`�"gNZ�Ө�wU[�t4%?�$�cU���62=
�6��g;ρ�
+���:ia���r6��,���_�
��e��5OZ��L��
�r5�v�Є�j��)i�r9*�����^���y��b\8����zs���9�7��c2�ҡ-����z���ѽd�n}#p]���=�4�\h[��9љ�S/a�� 0W�
ca�&�}����
�u�["�_詷8�2&�{�ZUm_�;�V��5� z��(d� "9�������)R��\��w�����\(Z
�K�A
���
�
�	���ٷ�����!��+@�#�t�����-23L��:�D�(��xQ�������~����RT
+[��	�p��/�[Y���.4�]E����Q�0��:��?��@����
ߢ4��y��r�
�H)
���n
�A�U��/[ZE{5�ް)Es�W
��IGi�
�u�}WmnوU8
+me@!�

�	�
�d���S
�|+����߾��[�m�����
�c5�cm-,��^��f�e֛�iX�H��f|JyO4lѕ�Q�}��^C�7�rk�xS�M��	�<�1�Mّ^
Y �80�#�
H���

�I����
�+g��
H���D@Ί"��	̡MN���5��gbIΜ�^zR4�>�����^�⭐k�ig�0n�xA�#�߁�݋:��,��q��
 N	��
�JE���z
+�'ɒr�u
+�y at 9[�Ѿ5�r����x�^mr��7F�(���bWW�]~h���-`����x>UDB?���֓��\���VX }:Ҋ��l�Ed����۪"�2H!	A�i�X��$���6N3L�5��x
+�;T+c����9K�!�D��s�
y-�פ� ܙ�
�$�
��D<�Tv���T��
+8������`"�:�?�Y�GR2/����Rk
�!�ś�<�5�O[�
+3s�|�H%�ZG���H�}���o�i�
+@t`GKF��a
+6v���8#��uX���n�"5��R]0�G��;����
 I_!�ġ
p�k�
���L��PG�
��]f'���*��&,�Ҙ9,����<�ie!
�r�3���
+�������j�_W]���O ����'(Z�����|
�'Ro�
I��X�@�����H��J���jL"di�C�ҏZZ^��I@�z�2�O��RB�)��0"�x��
+��D,bcy�,��R�!9
�r�
+U�
�Z@�#4��@C��j���;���pNwE�G_e� m&��tV �@���k���6���'xH�[]��
+^�)�3��郌 ��ǟ~j�JI_���_��lnCZ/=���Z/!1]CR<$��RxiWu5���[�s��&����� ����#��B�g�ҴO5mstҪ
���6'�=4wDnω��k_�����u8f���K��"�9� ��jq`*y0m��hL�
ZJ.B���E �F��—m�����>�`��'��wU�w,�@�,A�y2
��Q�
+�
K��z9��:��Y[�=M�C� �5�ü��������}@D�9�7�5�
���)�:E��

v>�#�r�ټ8V3Р�������'
b�G�DN�Y����V�|�<��^,Z<��Ʒ�?��6��3-����4��̷R
}�&�fG�
q
8m�S�6 �dS��C9d� �"�ۀR�a*$&Q�c������t��Q�
��J}!�X��jt�:�yZ#�Eo����
$�$�b���jH��k�YY��2
��qw>�|����hƂY�ᴉ�y��qR�eZ��Km� ���y��:��9��u��]8�+ ��K��I�	ryv��2Q_�XӁ��
+�7��.Y��i������`|:8?y�*Y�׫�覯����*�ǥ�'���W`]
��>J�,�����Se�⪲�xJ���5d}.bv(����CL憃��
�����<�����A��!�e��*���TT�޶Cz��
D8p
X
���	��V����9�+�p=򱡤�p�@�h�FP� �t�{
 xb��~��
��@���+q��-WLO��!y���
��tL
�[b��Oe�9�ʆϣ�j�T��!�o�
!4J)ێʺ��(�z�ï��T�1yآ8�E>Κ���$�9��������R(挎ou<Z�Ӷfx8��#mS g*�}$��
9
��F@�rv��l�aܵ��_�����t��'.%x�d��h�ӰRT��_���IJP0m�8���d���I5\J
ΎBʘRw�w��ܾ+��*��5�#	N��PL���}[v}����j�g����AH��m�
���e���q��v)�ՌK
s�U�pp_#��.�����[�lqL��N�om_����G}�Ol>���

�����jΥ��B*�S_H1�Z�t+9UyR����W)�B��C}u���E�����"ß)�07Kp�_�EE9^�2�m�=��{Σ�����&��^��N�eJ�n���郔 cD����]~�e�ǜƟ@ ���'U�o*��t;q3��i+�I(�����%<-�t�_
����������Ǒ [...]
+endstream
+endobj
+774 0 obj <<
+/Type /Page
+/Contents 775 0 R
+/Resources 773 0 R
+/MediaBox [0 0 612 792]
+/Parent 786 0 R
+/Annots [ 771 0 R 772 0 R ]
+>> endobj
+771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [365.61 252.773 372.584 261.186]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ByHi:75) >>
+>> endobj
+772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [398.819 252.773 410.774 261.186]
+/Subtype /Link
+/A << /S /GoTo /D (cite.JaSD:80) >>
+>> endobj
+776 0 obj <<
+/D [774 0 R /XYZ 86.4 726.045 null]
+>> endobj
+50 0 obj <<
+/D [774 0 R /XYZ 86.4 701.138 null]
+>> endobj
+777 0 obj <<
+/D [774 0 R /XYZ 251.167 506.175 null]
+>> endobj
+54 0 obj <<
+/D [774 0 R /XYZ 86.4 421.011 null]
+>> endobj
+780 0 obj <<
+/D [774 0 R /XYZ 228.95 363.872 null]
+>> endobj
+783 0 obj <<
+/D [774 0 R /XYZ 218.85 233.152 null]
+>> endobj
+784 0 obj <<
+/D [774 0 R /XYZ 230.262 126.773 null]
+>> endobj
+785 0 obj <<
+/D [774 0 R /XYZ 200.356 94.201 null]
+>> endobj
+773 0 obj <<
+/Font << /F38 517 0 R /F16 461 0 R /F8 473 0 R /F11 694 0 R /F7 778 0 R /F14 697 0 R /F36 472 0 R /F10 779 0 R /F6 685 0 R /F1 781 0 R /F13 782 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+797 0 obj <<
+/Length 3702      
+/Filter /FlateDecode
+>>
+stream
+x��ZK��6�ϯP�ISk1�d��gc�:��ڞ�=8>@%ѦH��<���� |�3~$���
��ƇF��
���"\<�zz{��3�Y��H/nw�Tj�DY��X�no�"�^E��jyc�C~4]�1��J�r�c]��6o@�뷷/�~���p%`�p!�hq�*��
�޼
[x�b2Kw��P2
"h���W/�¡v�@9�@*�ЙD�Y�gנH�\�T.AAl�e[�gT�����uYT�il���ˏ-?�ݡ�_u�k�����un�M�4�������31�P�,�.���|���e�͹�p=Rq���������G �*��Q����b%u�R.VBYl�`�C]lrPg��dYT��-�=<�ڮ��B��
�7����ͪ=�Ne�oY�A�6�iu��c�V�ܞ�<�^�"Z޺Y��32X;�%�l��k���#
dB�1�qI"
r���l/V:q���U�)��X�MU�bi�}��ݡ�mǝ9 ����
*e
J�]��u�f6ݥFQ-]o���ݠ*����\���ɚ��`s��"�&FA
gc{�a�H��6�y���dQ�\�j�p�
Nwc
)����j��/�=�BM��KE�&K�i6�̖,Up��w�|���:���}��
,� Y
�i<��VE<q޶�v՞P��
ő�J

ƥ���`l��Y�
0�Q(�/�A�o��N
 >��R��A�S�n

� f��ֽ-:r�

�8�DF������}�>�|<_(���!�*]���7f��Y���o�I�%�Mi���+ۚG�x:��!�v
�L�#!����C��~�+Z�����$� ��՘}]Q$WkNV�O�Ѱ��6pH8P��l�ua�k��O�]
'� I�w��Z���-2G��`����
��}8��A3��@j���� ���}�k�� �"(��
+2�+
P:sv"��7�-���m�<��O,���)�'(M`Ⱥ�CN
�?$�@'���� %�S��
+���
�u��
?>-M��/�d(�g�̷3�����f���T��
�@��Z6�{;0��%hjx��<���C��~=�kr at R��� k�9�<����-��`L
�:��Y[��K��F8'���{����u��Xs,`�<��
�|�F�3
$Q�6 �~��.?��o;�`���e�nLs�o��H����ү�_!�5��Ƀ�i���o�
7d�'��j���YS|�@�^�O�Iy
���"M w����x�#�?
+�4����ga�#E#!�!MnnY	����X�!���,#�5X��"��.��e�F�C۽ ��p�����������0�d�������&����:
+��,�+ʒ�UN�bǚ%[�)UY��]4�����-�l� !�A���>`**RA
+�9� 
��0A�cőt��Jx��Ξ�
�V�ɬ9W+˨�{���.�O�ͥ}2H�"H����$owl�
����ٌsj���Hv`�5�B|�z���.
+���FXM�����„d�v„$A.yI��r[
+|
y�'����ͫ�^�k<j��
+sh�������e���*o�홟�1i��
�1+�ϝ�ߙeU{�
�3M��Q�1�֛�|��D�p7
o�CES�P��X���ug��
�CQ]�;}<o̶��	
�]~
�F���]V���~��-'C�R��H�=Bо@(��3\�˛W���Tc��=IM48_=�NՒJ	��˳i���<���<|��F�e5} ���5��dR�I�,M�Ϲ�v�"�����?
!����s ���Jl6�q�U���am` �d沥
�\Tt]T>�JmN�1����ߟq�1Uo9.y(Jf�%G�C~u�4�v	�>+��I���	�Z�ߒ�m]��%��km��4O�4���g�{_�[���

�9��%���ڕ$e�x���
�7��ZjPX��[�
��)�e�

���t�9>�[/Ep��=��$Xy��V�S��^{c� !+����?|��CaNqeZ�0����p���r�
�6ܧb�
��DU`)#�Y���q�?��wj�s���Z4 I�O����!U�.g�Yܤ�+�IxhX�n?¬���I�����ұ��% � 󊥯a{T_@Ep�!�"�Hu��QUۜ)\l�+�;���#�_k��� �����=Ș`�A~�s�4��R��D���a�ݲ�����P5N���KK�м �lYH;���ʣ6uY�¢̚��
p����pS�g����
��}F$�@'_x�!#_�e8�����$����v�����nu�M�j?�1�p\KS eB�+0i*}��������@xE��
+�L�tN� �/��Y"Sr����<��l��W7�g�r
�6^
�YU�E���H'���,�s��d�6�#8T9�\cЋ��<��
+8����K��ص,�Ɖ�6���x��� x��	�>�ߜ�f���7g#�f��?l�r��
�:l�i
WZ�K�Ն�:XG9�;w�l�

����t�2�
(�]�ā�`ulJ"��َ�`��@�o�s����0U�A���\E����{�f�-$��ؼ�;Y�1��kؾ���Ě1O���֎����*��-�~
+��a4�
 

��3�����&��h}C�" "��T)��vf�*P�ϭ��
D ]�R9 Aa��>�Dš�=�O=�ɲYSP�����9��.31r13kL�(���e/Zր.K��b,(swC�Nj_ 
�~|�2���U�Ϙs*�Xğ3
��%���{H%(�.���w��![Y�V�:�G�M�7
�V���Q<�PѤ�
�c
�V�Ì$D�M�M�)��{�ў�׹�L���w!Cs�`�ԧIٴ=��MS��?��1𘒖�����ɏ�ë��y@�S�3Ұ��b+�0����IѨj�<m�bJ�
5�%IV^7n,.q���y
d�V�oo,'LExgB�1if�#���
V�
SL-�E�`v�[V:c��K��͌?PA�yE��b�H�Odg4+�����T�^)�L
����iP����j{{/RDS�ӧ���@J�҂ W������E���H�Mf�!XS��Џ
:�߶����sn�C
+k���5]
f�"��d��
�U=�40>��q=F�;��
)�qF��
cv4UE��m�M� ����O��i�t�ݤ���׫
i��j���p�ם)��
�p���^�t(�2��u$��]ѻxe
����qv�-GK5�f�P;� �_00�T����?�]"
E���W�/V��Z���6�����ʥ������j<'�׌F"=��ʁߌ5"�����<PbZۣ�Z�)GN
+n�vw(
���/�ĕIZ*~��.O��ڔ
�IȑMA�� ��-�s[�O�Q����O�xڽ���]۫F��X�td�|=�>P�7��w��&?5��
({�A��Z���h�-ױX;���>+��?�&�X7�:��h
�6�w���u0�~{�`K^�
��yO~�ݥl
�唦�$�ޒ!���<g�x�?�*Ϲ�aGz��FA���Q��q��#:��;���M��Q�D���,�p<Z"�L#��K��沥QF��b=���*���� �
+�g )�G4��spd�M��3/�غ� �~���,'��7%�M�S�$R���C>n��!�K���0�1�j�3��ƴ/K���?b;S���Zϻ��
[8���v��������ً�
+endstream
+endobj
+796 0 obj <<
+/Type /Page
+/Contents 797 0 R
+/Resources 795 0 R
+/MediaBox [0 0 612 792]
+/Parent 786 0 R
+/Annots [ 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R ]
+>> endobj
+789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [433.789 523.518 445.744 531.931]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [449.837 523.518 456.811 531.931]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [303.98 511.563 315.935 519.976]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [320.322 511.563 332.277 519.976]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [336.664 511.563 343.638 519.976]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [247.555 317.362 254.529 325.775]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+798 0 obj <<
+/D [796 0 R /XYZ 86.4 726.045 null]
+>> endobj
+799 0 obj <<
+/D [796 0 R /XYZ 242.095 261.02 null]
+>> endobj
+795 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F49 646 0 R /F14 697 0 R /F7 778 0 R /F11 694 0 R /F10 779 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+809 0 obj <<
+/Length 4318      
+/Filter /FlateDecode
+>>
+stream
+x��]�۶��~�ު�X
 �ԙI;M'n�I]�y�����;ڒ(�TΗ_�], �$�9�G���b��.���,����/��>�*S�")W�W�V���HT�f�V��<a׋Lg���
6ļk6��nv�?�z1<Or�83�1��۫�wW
:�s0e���-�W?���V���,M�B��͸�LdE¡�����_W��1
qe"���,Ʉ���%,W�����ߧ_���rȖ;XP�ͫ�mZl�y_u=u��zsh+zys�n1o�<�/����V�قI��قI�3���]�Е���vY��}s�����%=������5����j�����3x��
+��= �竲�Ú5"[Âe�
�$cn��Аp#�0{o��0�H��E@�D@�ؖ���v�;s׹kzj�n�z�ḷmI[U?]K9/7��ڂ�"Z�6����"
[=
�d�{q�y�h&��שL�]
�Ld���a��p��CL�3�/�esS�I<���O�
�� 9���t:����]�
}V�U���X�h������,j!J"d�{<����pW��M}��o
�n
�۲<t�_�9!��ǁ��,C
�
='�
Y��7Mk��䫶� \�-��B�O0_ErgU-�6���uG�m����
=�jQMc�\�yg����"$
�-8���ò�S�5��1,d�P�.�T�1�'�D%�\BS>�
*
�4
�Ѕ҉N�]��"��˶���9z�}��l��s �ZK�������#d�RO�W���wFy)=7F�V����$¶�]M8\ΦtZ! 1 �_u}Hi
�� 6o�5nMk�%6*j8
�Z�ޘ�Z]E]�5��i�-�A�
����-��~�\�8
���)n#�6��
��U�Z�T'�,��
��E�))�jq���Z�l�A+Ԛ�%�L%y�Ǣ��C�`"Qu��<�Uxu�&&` =Bx��<�9�AA���XG*��#��T��4Mc�. *�֋���z0���ؔ�c�F ��������x������R8B��2�i
�9	�
��8�%�
Kg+:�V��r�g
�r�ڍ������]���f�'�*sg�B��h$h�÷o���hG�{P�}�_;�V���c3СA�q������lJO#6v��~u���
�z<3�9�b��U �V���n*O�F��[���]2tz��5�M��ʖ^�%«A����m�v���0r]�
��
Z��8 Դ�o�
Z* �WU�lk�<Vfm�X��o 

���c�r �gėe��̑�� V#b0�	���Ig*)�Lr�gY���^kB��8>2y#p��1o�o�a�I����#>V	S`M�����2�c؃��O#w��R�#<"|�Gd~Cf8cL�,K���b��qwr"�9���V�}�(
^��_Tz-�L@
�x�EBר�D�~�|C5��� ��������aQ�"��O<��+����UB�5��ZU���Y�Шޗ������#���(������˿_�(J6RK�ۦ
+t��̭FB���Xv
�#Ŝ�	1
#�6
1�E�8�o����\���}�0yq>��C�N��:U�`y�Y>Z�ѡx�[�QI�	�<؄����7#�c�H�<Q:7<#`
��
+�Yw�Xo��p��c���:����T�6cB$�(.XgzjA����dqI�2x2T�w!�
��eOA�8�E�k�X���%mD�T���ia�nɆˇ0��`;
+}��Q
�H
+�>Q�W�:��C
�;�I���ѫ�t

�����[
+�1k,� o�@g<BZ��!�[��| k�/�,���� ��Xc��#���
h��wu_�4oc\/%ե)� #�`J#�4��e�4���~l���.4K��h�'���礹�8xAђq�������P*b�b���320�8�+��l��ǀ~%
���Z�^�O�.hz��S�����"RT�=��q"
+1�|�L΂A��?p
m��D�H�I��c,��\�8���Wv��e9l�yT�� Oi=9�5�
S��0 �c�c(S�,� �	%�0΁�^����ֳ��/"�'��ϲ��atʣ�M��@:�NE$��@�
ȕ�c`t"���2
�!�%�zI#g� ��^���1DyH?o/n��<&0&����A
��bUoa�<I�My+��Z�|d
�n��۸nP��!J@%�a���n3�[R�>k���6-�7��;kcDN����Pu�=ga��3>�ʀR�Q'%lqY�Ʀ�=��M>Z���34-�<��`�p�~�Ef�]�'��/��<���0�މx����S*#
�ǠnI~��g�
VQ�aF�Tc�)e����j��6��
�N��0i$yz:��K�`�F�򂴆��Z)Y��F��!�B�?%9��|w;TO
%8uԘӰ�G������L��|p�}�0͂�<nrಜ�
��s�祋
�kar���6]O2��QɎ���ov4FH�{Sok�ib4��c4�7���W�,�.���0F��dc�

���U�ܔm�P�
§af�[��0���@��<)���
+��i�~=[��ݸ~�����S��Kl��PM�0V� ��S�R���-���!��&�yYo��0��|i�b�RY_���XT1Խ��7EMhN�L ��6l
+�B�B$y���mJ;�7)
��N�-��D�M٣����I
���\F��9�s���E��\��3�JEHY7!����I:�<e�I�� �8��O1���4�\�@�3޷C�������Ʀ�AR�4�랢���@9lQ��P%akk�0�Q����G�Pt�O��U�.��]I��怒r��U�:�v���]Bޮ��tEuA�?C�A�,��� �Y�lA��z�4['�������{k���;�^� �|ض���tA��p�!��?tv�
[\�@%�Q�/{0��\T���QzA(w���5l��W
A��b�
+�Aʡr7������Vl�q��#K �qG���H�,1# �~�z�U�9�A�jb����Mi�K�(4��H|�m=���� 2_���x"�I����[C9�Mh��F
��z�'l֪�5���S��@�,�R@\'3	6U��v�,���>�,�P�*p{���}l��΅O<
�
|&��;;
)i|uD��UCOSn�%;6�L;�"+�
߅���B���ƨr$ |{�
+5�0麔;e)�i�w�:�;�'��]�nm����&vr��"��T^�����,��,t���2
�
�9�.�S!�E�C��rN��Sv)�L�>Y
��@��mHSg�
����
�myW�������o�$�)CH5@ʷ�Hw�� pLj_��~��+�c�B��Jȱ�6��#1��v¦=-��e�(�a]�Za3/@���q̻C�����eJN�
¢�jr���Qg���E����;7��c{�������*
ԙp^84
�A��ƫ<��wUN.
��cS|��U���x�gd�[��hy^‡*�uT{�|
C���� �p� �5rA ��������F`Q��ɥ ��4ˢۥL�l@�M�gY1r>��.������ ��̩$���{<����\�c��E�nj�x)����`%�ĵ�ok9��h����7&�"c
n�l������r���AL�Ȋz�D3
Q�S���O�5��
�R`U8�@$�����P*"
���8B�#�X�_�΃)�\���r [...]
+�fv��$
���9I7%�6��aT���s��S>���C����
�$v�8]���[
�����Ǽ�8������
���c��H]��
+���vC��I��!���2*��"ɹ��{
�ǶE�OG�8uE-a�8�-�8�7�
+�8v�M�g1�S��1W�q��}35U(h-J%=V5��gm^��1��9w��Q(+O���k�0
S�q���p�"���3�o��
+t�����
+*S�O��\R�T�b5��R��mSs�-�[_�����gl:���_[�
��A��?և�&Wl�p5��(m�����:\G𣷹��`�
F�m[��?8I��x�uT%-�����o�v�X����J�HYX�ʥ�a�vXZw�lpi���3�oHm��$hb
�	��׈GvD����o�aز����|�m�-��޸�jH�P���﯇����w��5en�u���eU[h��i�c�Z@��L�}~�=��E�>-�^�,n���De�(��n�	M��5
�}����#���gcw�W�j>����&�qᵿ�����e�ٶ�q�۵���l�y��,�:���>�K,#��d�k� 2ޑ�7��t�lt�
I{}�v��
���$��@t�jAk]8��m��+�(�K�����
+endstream
+endobj
+808 0 obj <<
+/Type /Page
+/Contents 809 0 R
+/Resources 807 0 R
+/MediaBox [0 0 612 792]
+/Parent 786 0 R
+/Annots [ 805 0 R 806 0 R ]
+>> endobj
+805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.558 485.092 244.281 498.421]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.3) >>
+>> endobj
+806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 109.067 519.955 121.382]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+810 0 obj <<
+/D [808 0 R /XYZ 86.4 726.045 null]
+>> endobj
+807 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F8 473 0 R /F11 694 0 R /F10 779 0 R /F7 778 0 R /F13 782 0 R /F1 781 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+817 0 obj <<
+/Length 4418      
+/Filter /FlateDecode
+>>
+stream
+x��<M�۸�����4e��$�ĩ�$���K*��S9����8#�%qLR�g+?>�h�)P���$ �F7�|���W�w���7_�A�ͬ�z��~et&W��l�z��n���
7L��_�~W
ʾޔ��;a��wͱ��U
}к}��ۛo^߼�a =_� MeF���p�ݛ|���oWy&�Y}p�+)lơ�_���o7y����c9˄�+mY�
+M��鈸�5�F�M��VsO�%�����O�[����=�
�~����ۗ�c����6�q[�`r}|���-�z��~p��UN]����Q�W���{6��;9Lhi!�]��~�鹺c2���;�2���?����N2���w���q_#��6��>V
>��=��n�06�
��agW��Gz�<z@]�K����v�OЖ"��<bw��?�s������wB(���9_�ջS�:���?��ʛ�fs��q�ٞ6�㴯��X���C�s�|{{g5���8�!��"��nﴴ�?���%�xҺ���j��
+�߫��L�aZ��c��pnHJf� �_��� �tv�e[Op�e1%�9<�zNjB��$�ˌ�������p���߬�K�72L�?��`�0�}��
��b �������-ERi�c~���-1�&d��("���&�I:ˍ�����ۗ��W��?�ZO�~����=�prD���/S���z���Y��B��
+΀g�L�g^;-lV7mu���S�"^��8��\
	f)>Uh�Ȑ�̰���0��>Ae�3f	�K�
�J�2E0n6���H�)5pۮ�86�V`�7
+*�
+)���5�5�M[
O�e�S���b{ZS聤к|�l�sԄ �&��<�o�@B��˔G���£��L�������}���@6�Ώ�.
��[� Nq
w�(\�k70u�ʶ
Dr���4G(|�ڶi� L%����Ǯ�
Q_K�
�(j:��]]_�esF
�jB#�}��7~0���S�܃�=n��5���Ȓ;{\XY�r�1�
20�5G?�]	hA�i�0��@�����0}W
�� $�u��Za��Yu=�w_��Ik���.Z7�
���gi�ރ.[jPŜ�@�������
	>���q�
={<���[�d_�hpizhZpmS��@�-��\VL&� *�@܈�#gBW�ݥ��h"��
�|�3Yu��A�dS�vO�Ǿ�@����D|�)�q5}!�L1(�	-x�ՠ�~g��,3d
a��R� �ɘ�Э�&	Г]_$-@�)8Fp��ᨌ����D67���3���3z3��2>A�W��s0��)>R�ʎA>��<�$���gt�Y^�3�<z�5����)���'QNYD�oʑkR�"fu t:n+�С�o�Uv���H�[�	8���!EbC(v�����V�`
�����A��o;j�
#PR�$�d9��Y}$���`�!���.�I�,�j �S�X��E���<?W�K�����5ϴ���9�H�����
�q��jАG
+/��T8�P�~:�O4��%A��sp��h5�
��q��
ȟ�&����z=�'��5�g˔��
.c�i�'k='N���>�#ho���߽Xp�����'���I�ȭR�BeJ
�JD>�� ���ġ
�iO	r!�9�
�$�FpFN(�"y�?%��q��Z^�(�
�H ��Io)�>�2A"1�s�䛭�ё��C
+�.)�ՠ�&��)[I�<L���u���*<8
�q�qm�rw��m����Z�L�&'Jr[��"��B������<q�����U4h��B0����{1
��
F�a��Tf�'���<�򅌈$�7AK����kY��1e񟦸�L�D��L'V�������L
�2(�
-�˼!H� �]��-ZϪ�x}�C��
h73�Hײ
b�}.HjԲԨ
b�U4�L�L�U�
WfE2gfX���i�I!���Y��
~�f�/;b�HL��<	���2���FY����d1�,8��N�2;X�|��mս��Tl>x���_�!�
3N�M�u�����9-k�E���Տ��T�g�.��X}��#
Q�,a�K��s
P��?����k��Da�����.d���>�~}g�*;�kg�%�(��Eu�K>����X
*�x��C�"�s�&y��)�����b^xN^x�x���\f��]R&1�{n��*�|��2k	'�gtA�����W+��g��e�u߫T2;͔���Oj
+
��̼�?V.
cj;�� A�N"�ZW�C,�9��K�P��]�#��w��Y����ϲ!S5��ևr�<Cf�&����z��UH����
�F���C�Q*����%�����	u��s);gA���䜰��
k���:�����X���s4�/�BwB��o�θ
�_,��J@�qK!C��x�eK�

���@�
��,vԱ�'� ��r�2b�W���	G�`��(�he��Y�ݕ�S:M�U�9ZW4+��$D�jr��v}��r�P��:��}��R�]X��3�'��.˄c8�í��\G`t
#F�2�u�)�‹�|yoj�
��-�ΗF���
Yd�7�F�k?kO��1��n�����F��r��烌�Uj��mf�/ P�*	����PM��Û�qp饮+��Xn\T;�(w�C )��<�2�b��BYa"E
�j��;f}�(MM��b8[�g��7&N�\!���!t�}�o�l�V��(�<����=H�(2�2���|����mp�������%O~�G`Ɵ|�M
^9o�_!b1�����
Ң�
+���?��(�/�d�d~ĉ4��*�4m]u#	� �ߺ}�
+
��D��CR�	��ʣ
}��9��������}���|��w��	723J\T�̎W�߇
�c�rF���l�?
�C�	�����x��^@��6��^�85%��^ݹ��Bc[�
�\
S�e_R?����P��#n� ‣QY�Ʋ
�Q��lU�Օ�_	q�=�Sվ
,)�
K�ʭ����D0�u\�}�
+_>�c�o���I��R���&؜Z
+���
4��qZ��b(SK|쁀Tī=4��<>�w
ٴ`Ƞ�����h�[Z̕Uq�� 8����,�
+uꑗ���c4��)q�g/�6�~��*���CXH��s6�I��
�Aa�#��3�U�9
ĺ�N,-϶�O�j2���Po�Z�G
+,�7�:�i�L����=Y@�
>����
rѫ�"����ŰL<+,��Icgװ�E�����e1��?��f���ɠTLJ��ՎU�W�c
���V��ѯΤ��X����&��̨�
8R�]2��=��.���Ŵ��O,I�P��&|��
	���P�:��`��ˆ��T�b2�/E)7�r��w�
�h� 
+pG
P,�u��;�Λ\�`��g��
i�A QP���N'�5��
�pX�.f�qp�9�ݾx��+���æ�=��I���w�<������T���
+%
��ˡ(g@|��L.�����H�
�d�
M��G�ߤ�Y"�
���W�"�,|F�__�������Ӡ�Oo=���	M'(bYP�d'��\�j9ń�����8|<u^1�0ӑ����A�Xv�i6x�euY
+�D�]*�|e���Tw���FM�$M�v� ����e�
�f:���s��䨪�F ]��e������x�l��K`k�����<�B	(�,� 繅iVܩ�n�?�1��5s0p�WoD���?N�^��Tdy>�
��1��a�
�|g ZЋ�?���$�2)�?�[�����ױ�'����2]�C�M�/�Jp�/��@�&��U��)����?'���g���4���l��f�ԢǦ�yM{�e9�"��+�2�f������f23��k^�����j�I
�����W
���,;��3�G�t
Œ_;�0ޞ#V�
+�S��
+�[�1;.�r�����q�?��� ��TMy�o��7K���n�-&���|
�����+�����2��'Ȓ��K��
i&�	L�����w9��r���;)!�1d���>����n�f`|��� �iJ
�������~l
�;I;�Sw/l�����_�%r=>V�U
�t7��m|p�;�Ĭ;�b3��R�<L��#0���n�^�#��A�Lnzz
����~^B���Q~��ip�A����M5�y��}�
+D0g�$I�"�
+e(h��m�ч-�N�+�ˌ���Ӥ~W�q��A��S�ƧڵO�+7V���*�׺�a��l`d�L�`�JF�`�Ǥ��ŮK Ȇ�0�#�!������ߺ��6U�h|Y�
�2��Y}hS

3�}����k^&?rČzVE[?���/z#f�I$�Z�
�Ct�7V��/r�/�_��7���)Ze!��rw�m�G�gm�z�yx��`=[���26�1|�R��!�Q�ʔ!�ٷ	�����7�o�
�_��
+endstream
+endobj
+816 0 obj <<
+/Type /Page
+/Contents 817 0 R
+/Resources 815 0 R
+/MediaBox [0 0 612 792]
+/Parent 786 0 R
+>> endobj
+818 0 obj <<
+/D [816 0 R /XYZ 86.4 726.045 null]
+>> endobj
+819 0 obj <<
+/D [816 0 R /XYZ 238.266 655.31 null]
+>> endobj
+815 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F11 694 0 R /F14 697 0 R /F16 461 0 R /F10 779 0 R /F7 778 0 R /F13 782 0 R /F12 820 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+825 0 obj <<
+/Length 4623      
+/Filter /FlateDecode
+>>
+stream
+x��;َ�Ƒ���}bS4����� �V��,K

I0�U�nbXd-ɚ���o\�$���1l��RLF�;����&�|{�����ޙlS�e����ݦ�b��ugFmn��_"
��)L��P��n�LM�5���o7�7V�qn

F�� �ꛛ���R L6ʍ�ƅ�6���/�%�=��$�)��'�;l�)c
�v��՟���
+��U�bc�&+U���y�a�e}�NӨ��42�j����
͎wu5��Z��;\��ީ��VR(����k��~_3�r1��E�:�}=���z��������_��G���\o�ʢJV�t5,���
��[��&I4�-9����$���}z�0k�Dm�J�e*'Wu��	����٘���;�;3����e�{�{
�N ���M�F����
Q
��p/4�ӷW0��.���)\�/�"|�����b8rk��
y��U;��O����hS�ߍ*�!m���{��K���~8Tm�x
��&pC6�Uf_G�iQ8ĩ�@��ė�h��#5Ut��iZ�:��v_��(���AW�V�t<M�
+,�ܞdn �%
qar?���,}�BC ���l�
��MA�Sa�b[ZF�O������nh��
x3�
��tH˅"� $�Ǝ��Lrk@�e&ܔ�=�8�z
�����
/�ֳܯI�q������%fy0��7It���v#,;
Y���~�
H��H�}��P��i��U�w(�tI��
?�4ھ�����2^	�*�(˛��mk��JTN=
}�����J����Y��=':��ł;`0Td=��P
����M3�����
�[A9aHN
2X�,( �wv6�]?�� CS�i����u\�^�v����]�f��Ts��t}4�j�D����o�E��S<������
bS���2��5e�ѓ8�y��
&n��1��ʔ�^�H0��`<d��J�8�
O��YX;J�4d��I6[m�PM���j�tnج��C�i��PO�
���~�F�w@�u5�#��NL�5��/4(�yH��$���U&�9��>��
5
+�X��
�l�M-�vI�����)5��'��8@��;
���1���J�32 ��o���=
o�y-�=�������k&�>'c�b�8M�Y�'!9�F��m���./eX,�:!�K`��X:�5r4r�~ :	
��v7�r��}��sk4r㙰��܈R�f.Y=�l�f�Z~���Z�,��;��]ۀ������+��
���_Y>ܳ��'���A��G #�"^h�
��z����y[�̓�q��M�)�

�S��7b����K�Z`��ݮ
ǻS���
?O�QE.~��D�O�ǵ�=Z�	�0<������壹��K�[�j��p
EF|���p-�'�v�TD8x��p��:Ө���˱�۩r�l�8���>4>�]Sw;2�Q��A�]��
+`��S���A=Q��˓*ɫ���!Pqx��U��[r{D�Z4`�3�ky+��t�d�m}7�K����'�B0����F���b�$N4Sٹ`Z��,���W���؂��.z:�/-Y��%���c(�_��L�K�|�:�B��|i:4�d����n� �=S���ѣO�߷���=���~�7A5�`��
��':�YEb+(���I=�
#�F
�YK�g�+�"E��2���,�9��‡*�A�:N���K]�L��E����5��L.go��Q�)0L�&]��aA1�A���L������ˌ�8���{xl%dA�+ˆR#ۅ, R
�mCz�� ��ih�y$����44�C&3�_���R�
�
+�E�t���*=3�^���K;Ȟ��9�?�ח����".R��R�K���'X�b
+Ou��f��/7�j���u�
��2��)-����+��9
�'��
�T��L�]�׶��]k��T�lI�)[�F��VF�D��d�:?���#��q�D��
@��
��.�U��F���@��N�V�ʧ��Be폦f5��[j9,�$`γW%���j�>�F(c��ƺ�	–��ss���nN'ilR��9�%e��
�V�Dk���]���
�ʉ�`�
 cu��
p����A�sӰ�g������i�Ι����m�~���G��Bԯ�?
���Q�4��~%ť+�[��:��DN����|�8�'���l9��q��tn7�c��<�G~'O�
r�9PKp�>��z{"�D�7���D7i�A�AL��G�s:���u&<
+�p��7�����=R�j#��
+�$��Y��p7z�3ձ!
g)Q�;
E�s���+�P:An%O!_rԻdo
A�H�E�4���o(�pj'<�������
I����g
�v��Z&�p�և��y$	Q�kNc0:&wl�Ga����H���גc}&�h/���
�Q��1�ϰ��Ǯ8��K��� V�e<
h���[��n�$�@�
w|�aധ�qi�:�y�PS��ԯLǫ�#�17X<�v&x�aHOb���,R��,b�=��x��dM���ׅD|��QP��q���#u���-�C�
 �tVA鐵�h�S�Q6�j�
3�
+,
�O��d ��I�`�ںP�P�I��CC��~6t���PH�M��!E�sq6
+�G�LĞȟ�'
+���xI�g!�~aOإ��ljl&�m�L�}?ԋ�J�&�cʄ�/��2�FGpf��$���a
�ldd
"
�aȐ!GY�$i�I
+4���F�з���Ʃ#��2�)c�PY"j�嬴5���|����"�fYL�Z�-�.�,Jce���`1�Su�T='�OM��r8�冖S&N��*JO!��^�����
x��'�7Fc�n�]{�S`�G>�e�������O��\��,0/3����jIjg��\p,�.
	����ds�%���
Z�c8��QnaV�k%,��X�u��~�
��;q�_�r����3��4{:
Y��y����G�F0v\�2�,l����P���r �Q�P��Y��Θ���|����l��)i�Qd^݋n�D_�U���v���\��:�r@�J����>���ΔE@��e�-��P圉
�ʲ�"��l2�������ϵ?%�8ߥ��#Y�~_��ۦ�ބ�v���o�"@�lN
+?Q�T����m��]B6���o�B��֋������sC��U��O��VR9�� ���
�嬞���$��8��w��Db���(�R�9Йy!�y �f$�ұ�F}�\@��Т�q�J���"�2�4�S>h�� ]�Vi|x�'�"��T��_�e��7�%aM�"粑b�a �����-[��.��$>_C)u[��
�
.F]�6
d�E]u���P(
�,ϟ���b�Uϒ
+��s�R�ʼ�R�YE���v��y�M��n:�m����E
}�L�__��Hg��T�KD�k�����i�Ej#��|����dr!��4�� (՞�G�R��ڲ\��K�8�h��9���(�ɪ�F��
�J%6�"G~�F�!
�
:���h-��e���{�S\bV��(uaO �P�'��/'���ޱ_�P���p�bD�]�:��Y�۞*�t�!XJa�ʹ:J]9By������������>��N���&
��Q*1J�;����CJ�&�
E�B�P-�#6�p�'"
+D�q!O�	qoa�B_X�x�ϊq.����f9�vE��ZűQPc�
Fl���9@�����vO�}�!�H�9T�k�F�
�&+��$�1[`(X	za��ǡ�2>7+;Źw���&`�p�6Oi$̊����KG���k�\�9�Ĵ��I���B�9G�r����ձ�u �	��_��#��L�R�y(�3WӈMv_�qyہ���'�K2B���P]��H����R�H��W_����4��i�#�B9���947��$�n�����L_c�.rX��Q4,��Z:{R�RK��q0����:�Kh��?W��x�?� ӿ�=�݃��Q�ͯ�
傱,��C3;i�RU�_6@����﫦]� ��<bpar ��"�N�(�[v��z ���8�H���
��DI�S;5Xd͠��NY	�LU�G��}Q俊a�
7C1�)�!g�z��
�Qy���ӑK���Ї��Ц��*ܱM������)Ă�1W�>_
+n��N�y2�W��?Pu~5H��k	�Hȹ��e��.��
��+��vr'O�
I��*
X�gƏB�^|4p�RRp>p��Kح
��Z�(����V��0 ����Ɏ�ĕW��'�rF,��%��6 ���֟�
�e�6IA�<��Vh1Wopԥ�mE�L\��o���+"�4���
���[�i�qm��
�F����$
�΋UfP:�ĶK7��|&���G��o5�$����xZ{"1z��BF���G�qqɈ ?&e��P����\��:�D��xW����$�YfM����K������p��0��d��4'M�8�0�Og�_���@��P�7lY҄��
�Q���+s�����XJ}�^��z|Fjf�f�5WY_�w�R�*�[$A�JR?�p :Gi]L���CA�
+*�ŵ5g�mr�D�̺M�?&"�V
*
+`��h`x���L�}U��،�*I���\�}K�F
+endstream
+endobj
+824 0 obj <<
+/Type /Page
+/Contents 825 0 R
+/Resources 823 0 R
+/MediaBox [0 0 612 792]
+/Parent 786 0 R
+/Annots [ 811 0 R 812 0 R 813 0 R 814 0 R 821 0 R 822 0 R ]
+>> endobj
+811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [228.118 678.224 235.092 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BBH:89) >>
+>> endobj
+812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [239.188 678.224 246.162 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Byr:92) >>
+>> endobj
+813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [250.258 678.224 262.213 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Hin:00) >>
+>> endobj
+814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [402.354 678.224 414.309 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HBGLSSW:05) >>
+>> endobj
+821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.129 566.717 381.852 578.673]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.3) >>
+>> endobj
+822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [146.065 425.746 153.039 434.159]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+826 0 obj <<
+/D [824 0 R /XYZ 86.4 726.045 null]
+>> endobj
+58 0 obj <<
+/D [824 0 R /XYZ 86.4 609.36 null]
+>> endobj
+62 0 obj <<
+/D [824 0 R /XYZ 86.4 189.635 null]
+>> endobj
+823 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F7 778 0 R /F38 517 0 R /F14 697 0 R /F13 782 0 R /F10 779 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+834 0 obj <<
+/Length 4693      
+/Filter /FlateDecode
+>>
+stream
+x��[K���ϯ�%NՊ&�U)��]׺*ǞJ�\
+�XK�2Iyw���/��ę
�Q�
!<�~|��D��&�|{����W�t�)�"����~����dq�Zm
v��e�q�R��
��T�uU6�[����];�;�C
��y�����ݯw
+f�6�͖��I7���_��Z��D�.��'�w�]�1��͏w�����3�T�Bm�&-T����{}��x�5qt=3pY�g�����o��W|��
Nv<v��`'C�^���L�z;����$eC.�#6�8��4���;S���q
�y
+{"����9R1i����^�8�U�Ƅ��L��}��ز�����6[]�aj��V��H�-U9 �:��Fi�2w���@��*�sAZ:�~�J�?�Z*�#�
F{������f[��	
��
o7
�)�k��+���R�=	������N�SBղ\���	�%L�$��s'���3�o!�M��	��2 L45.
�YÂ-�QH�P��-��'
+8
5�:̓n�_�C�\F˿��us���-�J�03�LXL
�R���e��j.;;�?gbV׏��_�(���e�c���l������H�š�_0���ʶ��`/,HY��Ak�dc`��U��<�m�?r}��
pG �
	��N
�D`��,�r+L�2�ח� #����}J�
+
ʩ
��z

+�������	�ehr�C����i�f�
�K'[�RtU��c������Ҷu{�d����+[4�����汃�*��2i����k���o�	HBsY�]ǡ��Įk�o6��h4�ɒW,N���fC��C,H���
�e;g��N�"B;�MN
�U�˰f��8L'e\5KY��L��ӱ��m�+��tv��hB'��m
>
Lς;M}�I3tf��ID�
����pNU��"-��صf�����p����0�Z�/e�
�|�,x���H�	�
�^c�Np/�̩J�8+<WYyx�$��5$�f�fa�ӥ��ޞ�t�w��
�Ee�i������$a��ur��No�s��>mgل�v7�2����>2���D\�a
��
]4ʱqRm�֋�ϝ�8�H����D��5:�
��H+Ԁ҈ٻg����[��[.���ב�
�'�:��rn��H3�hԄ�k
f{�!h�=�qw���
�O�x��nV� ��U������%I��6p��s�
+�:�ˏ� �<J���`t�P�:
AGI��7.e69@��z�

`��A��dNY�����<�
u;���<����L����i|�Xz�-�
R��K+ò�a\1Q�#e�"i�-�׊��餝
'�
Ǔ_q��3v���T<�3�xY@ ��
+��F�a@Æ�Hڰ�Cx�m/�J�-"��H�3 $�v&
F/��i֠�q��lh��y�4��4�=�~p�R8�
+@zl[{�/"�@�B�{���I�p{7�g�z�5_g �fɕ�Sf֥�Q����΄>�t�5����kp ��,Q�h�%h�O��?t�ɥ�O�O�Ճ��](�y���ߣfR˼�<��85˖G:�\��AA�)o�'
Q1�o0/�ո�?3]��)�	Oq�S������A"�^�{�@��+��(�8���&�:Rh!͹���һڹ��L
+�4'9�0VOQ���Q�FfiD�J��N�'�
듌�Egk�
���'�Ӌ�GYo�$G��𪉽@�ƾ�j�h�(>Nt
<#H����NR3 ��b��4)~�j�
x?�JΩמ�A���<ٓ�WT����x���Jg�&�,���
 ꑩ���A��DI��Ř��
H��ɬf
+V�˞���2Ѿ
�t2Щ�	qB��̙'�n�
F�Vϰ9
s�I1@�с�˦�	[s
Uv���՚
��K
+A`@�@̹�K
+֓¡�"�뛷\�hG���]���(������j�z��F�)l�w���7oe*��uhC4i2k�Yz;�ܮ�8�P���\VV�"���r�jT�v��|��.�P�d�,ݗ&�u'@�q��1�@��of&ُ�7S��� �Zے��\*�&�� 
Ep�U�#e5��(G�� �p��c��	�q��Y
ϰ�A	6�0�'�����z��2b�j�X�u at rKޣ[�d�dg�P��v��7
+��o�����S�ыݠ�X���l7O�s
��Γ̱�`.���)8�fwk����Yes�z��	�A�+�����<b�6�t��D�_q�ŝFH[핫yةl[F_�2�1ԞAU-AD
������'�Hꉬ��0k��CQ!p\d·�튌
)	�3�q��C�ZqH4�u
-&���_����C��
)���B�O���t~�����! L����P�
�u,�:\�l�&�r���p9�����U�ec�?���6�J
�4�O�`�9<(X:��=I��P�+R��c��@9�ۭ��5�Q��
���xX)���-0K�
�`�4Lҫ�=c#���X�P�ն����^P
#@!^+w~�
����)A	�d�
�'((
Ʉ�� `��S�r,e	�YN��dWK�zu��1�
c�8/�O Qa��
N �T�/��:
+ޓ�G
��Β�Ɵh,D�\��)*qN'��Z>���z�t~+�W��n�
 K8
���Oo�SL�"Waŷ>9N
fI�2��-$�Z��P������y�����Xu'��[gs�Tl�tA���#�'
�N�0��
,7��t�2�ܸر���Gad��(�2�9
<G�r����R���D'��
s�G�F�JuXL�j�Xf��YT�+�}��
����^���
��,@�#uh���5��~�f��j�t�<3��?m������m���k2��c�_S�|]2����E��ŀf����"å
7�/sb��܉c�%X5�Πˉh�D��ġk�&��y�H��W��ԑ1G�?�w�$&��L5F�#�:
4�X.w;7k2����0
��r-������~ ���K���Tڀ�g/9�8�Z�t�R�(��ʤ�O����]�f�f�F��
+�݄IeoX�x�Z9P���l�d��`H�Y��ߙ���%ި�X6B�,��	�
�n��N�������R:�p�O

�6I���Q�ń��}��籽E\�1;���)܅>�Dz?�?�2 at JA��$@g�j�
�u8v�f�lR��i �(�L7�c����4N�Z���A�+G�A1���U**a�m?KB�����w
+3d�ib��
���4�kE,K�0K
+����&*�I�&�
=|L�O/���^$�Ǩ.�f� 8�V5xO��o�
ދ,�	���H~gf�0��c��T{�[:
�GS�!]�2��#
P~)"½������m#�Ü���
.t�$&��V�����U�G��
,�m��)�;�}>[ʮ�8.��4Ӵ�Kq�n��\����WN
_�P65��)�r���P�'U����AP���:��"/
M[��D X"���D�����clw��tL�b?h*�U0���@�f�3[���^�
���ͧr
Sb��<ှ[�
+�4Ƃ��U���yt�c�%�zA?xM�~b���u��h&%
�G�j�@O�����������X�*�_H4�Q�2�K�*�3�p���
�b}y98�D��r2
{�
{H?����|[T��p�ң���]3��zy#B��ې$�$WE�����0��9�jC�'�2+VS>�d�ƿ�
�u
v�[9�X�.�Vi
�ơ�F��p^��"
M�_v"JO�`)^�l���D&�x���w���ҏ��!��\=����ҙH�$
4u�-�X�w���^ թ�"�*ڤa�����XF����V6
j`׬��y�˼�OpR)ڃ���h�n���E�&K樇��ve�<�x���Ƶ�2zR����g�%s�{��_�(� r�<+W/It�E�����O��I��:_�㵳J�kQ3%1l�{��ٍ^X�g���*/�.���P��AW�R`l���
���B�k���	~O
��#y�SkW�D�x�,�i��l.ʎ�=�?�����l4m�?[x7B9'��ǡ怠�}���
S��FW�uwq��
0��Ӣ�����'ل��@�����!�s���+K+U [...]
+��k�٤��b.�o��l ��,���@�)���q��Z`��E�k-E�7D����3rV����!<:;p7� ؃��d`��F3�禮���r��@d>���
��
$NRv���po�W$�d|��_����o\��&2�
�ζ�ܸ_͚�a1=1}�#�%
�~7G^�	>KaC�܏�0�)�5_�����3���v�/“�aW�;�Կ��_���+�z�ɽ�
��
v
$p�dٝ>%�'菸��Kl����a��?q����b��d�Xg	�]��=q n�0�u���
�v�hK�2A ���
�=�J�RnD8�����S"(Ϗ
+�8N�x
Y�7�on?����굥�!��Z���w��_7�>CUɋ^ڞ�ӅS��\�����X��q�Ι��W�9���H�=�sO��ޠ� ��'��"5�dž�$$�����♒{aNu>��(�L�#�
;QJ��.7�̭�ʋ�)91s��-�4��p���W�G�c��}I�(w9��UX���%�ܛN3KV��6�������j ��
`��sx��+
�r�<�q߷w��p8�
+endstream
+endobj
+833 0 obj <<
+/Type /Page
+/Contents 834 0 R
+/Resources 832 0 R
+/MediaBox [0 0 612 792]
+/Parent 786 0 R
+/Annots [ 828 0 R 829 0 R 830 0 R 831 0 R ]
+>> endobj
+828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [463.65 425.019 475.605 433.432]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Hin:92) >>
+>> endobj
+829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [131.661 353.288 143.616 361.701]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Hin:95) >>
+>> endobj
+830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [259.037 170.634 273.759 182.589]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [509.106 52.142 521.062 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HeSh:80) >>
+>> endobj
+835 0 obj <<
+/D [833 0 R /XYZ 86.4 726.045 null]
+>> endobj
+66 0 obj <<
+/D [833 0 R /XYZ 86.4 225.94 null]
+>> endobj
+832 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F49 646 0 R /F11 694 0 R /F14 697 0 R /F16 461 0 R /F38 517 0 R /F10 779 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+841 0 obj <<
+/Length 3981      
+/Filter /FlateDecode
+>>
+stream
+x��\[s㸱~���#]�Ap#�dS�T�yI%gN���}�X��
YtHj&�_�nt�7A�<��$/	��4�_hZn
6r�Ǜ߽����۔�t�m��o�vS�R8�6ﶛo2-��[�M��~u��Je���p�ݻ?o�.Da
���
Ko~����7
+
+�F�Fs���=�|��l�ɟ7R��o>�z�kJ��j��ߛ���� �z��TB�:��p�V�6���fh����Y]��j�����<�8�_�A�Yk���8����NH7=�u�>>
�z����0���o�}�� �m}ڰ��+?V
C���>p7CK�}]�Es���s��b5%7N���XÊ"W��J�2�$�#�*6�:��\&�3�y�mH����h�
C/|��H�H���n��p�mƋU
��
i�a�y�
t��O�D�vCOO�
�� �ByST��Y+*�f,��?*�=�+n��BfjQ��O�1��p(�F^<Лa�T�����v�����*%����0�ƞ]'
+Чy
��}{D���a6W����jӐ����ŅU
u3��N�R_��F�YE2�>1$k�Uų�����T�Y)-��������_��BN&	�Υ��e�ܷ]|PD���`EdC���
��d�᮫��R(Q(�� `�d>-
�[f��yء"�QA���ݰ���-�B	]l���CWI�A��&(�P?t��GK2���=���y��{���g����Egd�]q=�3��0μ@�)�D��۔��B8篰��V�X�^���>���W��+G�%�QA�����[���ݮ���U�b���z5�
����8�Vy��2�܏�
������:	W�P?�8нc����p���հ�򋻊k��Ƿ���,���6w��Я���g�X�
6�RS�g��3�m��j���
x����	@a�>�㧪��8�q�	��u�]�C�ÖW���l��@��v͸�(

X]u|p1y6��͞���.���m{����^���mXX؀��H�yhh>�-�
+^5�d�w���x��{�����`5��~@?���c3T����r���Y
֖/���a,�U
6����y�j�(��7 �Μ ��qa��T�~��
����, e뵓\(:��\ѡE�n
+l
+X�Y�_ݾU�H��8�-Z�%��W��c��S�i+ϵ��
&�=z��m�%��^k����v�
��A������=��������kvg�P.�������HT���v`AIsi��{�
!
���v�X
.�u�@�uL#�Yp���bPU��u�3({jP>eOv�Ԡ]�2S���(2>���
� ������,�%�
+
+�8�	.L�Ɯ,aMЍ�@
���TVn�B{V�yǬ>�L
+��R	�>�@�� �G�"��W�lO�6>e�tT��V��
�zW�
0� �*�RQ{
 ����jW��+�Ϯ4�X�\H�вf�j���
+��/C�
#<�]�"GZ����"x��.�{ݚ��P)��'10���*�E��g�D�s�Q����t����R�u�Z-�%�ɣ��r�ը
�Y�P �YpsF=���Vi����䣆�����
�.�r(���ezh5��.Ow��#t�0�Ԡ=�����@�#��QK�n)����
]�����T��s��3�eƺ����fC
���U�mM,S�m�z���_�QR�r�m:
+��E,V��)��k�DZ
+�[���&�L!��~ c��Cہ�
�v�S܎*����$�㥾���|�M�N0ؼg�(ҁi�¬e
���o
􌢤��Ps���3hA� �s�o�Q�Â���4�C;��υ����
D�hF�F;Ԣ[�
�hHH}�0R�쿩6՝�0�[����g��C`�"�����9C��Ş㝨�в��˦�'v�wuV��u��.�h7�0H�C� WA�i�i�
自��h��[ x���H񉕤�0 �,|���cK
+(��j�VRvwuǯ�Ԍj�H5U܃�'j��j��|zP�Įf�w4RYJJ��+�4툁W�d˸M!���L�����)�}�U����ɂ�ߟ=� H`
+�	
#R>���$��b1�"���M�@ʤ�
+����/�
+ A%�i+~Ո�E٩�,����� ���X���$"�>Q�W
�]p���Q_
�.9������+^Q���
+Q(�Z�\w�[����
�Qk���̢݅@�21V�� ����tj������\f��k��ښ�N`�Ϳ��Z*h�9v'^-�n�e�hhe<g�7��z[׏��C�Z��v��}�qE
�#���]��4��/��9^V�Ő�v��t���]�~�Ʃr��P�f��L�@j�&oG~6r�
S7���z���ޔ?ӹ��<N[X���:�����iȽ:�˽�&�R:t�e
+9
�{R)C�,��,������ݾ탙[PK�>*7/�T�atʅ��V��([}��t�X;�
�T0��
t�����x}���'�������%�
+d�OTq�z	�0Q��ebyl�	�P��"Y
ob�4�����kB:
Lb�2�O���=:6(�ӣߠ�x&�Ë�q��8����Z�����$�B�"76j9>�)V'�a�FJ@;R",�L�Rn��evS��,�G��R8�_��/N'
~�
"�^�^��'����?�� �5+�7fq�~Ώ=�a��tx�g� ����zO�L[�4��Vv!y�c���blU`�9�
A�����v�������>��\Bi^F>K
�pG�+1YO����|�H�b��m��5�39m�d�
�}�
`�U��|3�����6�3��s�E
�
=����	�ʐ��9�P}NL��]KjN�N�0�ؑK�)��0h{��xE8��x�W��y��W�_@��g���
1Ap��״ni�|����i�3o42��K�����-.Q��l�]z���'����E{�U��yl�ڮ�����v��4�e�В����R���O
��'O+<I�x���}�=��WS:U���
�5P
숹]�ԉ�Y�Vn�%o�%��F.�嫴
��<�<����Ye�
�
c��A [...]
��tF�eOUW=�Cȵq����]M�&�D܆�95M��}@�=ݏ���yO��ߤf�
�e��tT9�
+�� �zj�@��
�����8�yQ�B
����9��S
h���G�ȇs9�'�õ�(
�:d
�D�
�4�yIA�>e�Q��9^��P�3F�7[�����Q����P��=�0���s�	M��߁�1��
+d�V_�4Ő[3�g�Ur%
+�^�|�h�f�;wy�	+Տ�w9ns�y��s�1��
�;7��7��Ư��������ش�8�q�-?F��ye�����|�-�<���@�ԩ����	� �35C�Tv��꒶��K����`��
�0.L"��d�3��.�x�Wz�I?�����[.֣E˯��ף�bf	>��k1�hb�+�	!
�`E����w�
��)U��r�|F�l��-�+]Ŗ�K��~�ߌX��-�4�k�^H�WI��pj��K�~��T�Ϗ�כ����}H��bv��� �?=G��i"�_3;��
��e�z%�*y7�499�
�N�.�MB`p9mF��|��?]eu�YE���
��J�τ�2ڗ����T�t<�Hlj�x��34�h �u�8��	�«��֔��'�t�~��J�4���Q��U�GA1E�_�>2!M�c�e�y�
����wUȃ @Rdۦ0��`'��G*
'�SBy(F����jh&ֽ`�4�M�Xk(��gt�X��R�Bk�o(��E�d��ȧQ�k�$�a[1��rI�b/�g��?c�@XG�Y�ʌ��Yx�{��
/~`��1�:��������2z5
(���1��߿���,�
+endstream
+endobj
+840 0 obj <<
+/Type /Page
+/Contents 841 0 R
+/Resources 839 0 R
+/MediaBox [0 0 612 792]
+/Parent 843 0 R
+>> endobj
+842 0 obj <<
+/D [840 0 R /XYZ 86.4 726.045 null]
+>> endobj
+839 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F11 694 0 R /F16 461 0 R /F10 779 0 R /F14 697 0 R /F7 778 0 R /F13 782 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+846 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+845 0 obj <<
+/Type /Page
+/Contents 846 0 R
+/Resources 844 0 R
+/MediaBox [0 0 612 792]
+/Parent 843 0 R
+>> endobj
+847 0 obj <<
+/D [845 0 R /XYZ 86.4 726.045 null]
+>> endobj
+844 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+857 0 obj <<
+/Length 2665      
+/Filter /FlateDecode
+>>
+stream
+x��˒�6�>_�#Ue!ă��r�#Ny�q*�$'��1�������o7 I���a/"� �~w#\�V�꧛�~���|�J�+�8���~��L�b
3
��m�z����^��L�@�����Q,I�{��&
+����Z
�������;�˦���bR���NY��ݒ���s�~����7�Ms�&]e,�El��d��۽9<
��CY=�8
��`]S}\�4�mG���m�
����

���9<�X�8Ϝ�
uQ�UwN��X��nݶ����9!���(J
E�gfI�Q�J4�ݳ3�1z��X�@�R�����El
+E��F�}�������62K�J�ȋeQdy�������d� ��ʔ������
W��J���*TA��UY���ͫ��k�rKg�o����p+/��@>�� ���	)�?C.u�kԦ
�`s����Q���s"	Y��9��(Q��&An�
+��Y$#/ߪmVI
�k
��j(tG���(��9Qo���
����J��z\��$�U�O#�̟�~�FA6W��t8 ���c٣�<В�Ϋ�7��6?�w�����s�OYj8�?Jw��zj.e��L���
+@蟐Oy[Ф���ſ��XH+���P8-�uۼ��";x��P�1wA�2aI�}־e"N��-�7N�:Kd���!]o��|$8�T�q-�]
�&��V��+T3t�~�Ԓ��������ͮ}�Z��M71�ښ�(�wk,��Jw

>	^!�(:v�:�м6"��9t�
�hb�!��+C��ԉ������>��
E6ra�u��([�h�>���a�xM���yO��Ǫ)M�0p ��R��LX���i��U�3⁨
����Ў��~�Y��(��J
(쓪�KR2����TU�
��*-)9�� ����!VL@���F0�X�8�[��a
�u��(�:�l���渒����J?�𺘝"���COk�s���:�
+-�9c��6�$$���+�z��*���G�2s^�'�{f�GW�Fm�{O(�A���_q��%;�zgh!1'��Ʉ�b�u
|f�)���2(~(�Z��������0����QD�
Ӱ��BZ���O��b۹���m�	2NW���
vANh@ϊ���X��_���+��\w����c��!Ao��@}�nt��S���
���t�b�	�&�Y=�Z�LA�?)��I	A��B���>F���I)�a$�0�8�0�Q�����c����
SX� O+bb	$��PBM`b
�
�Q3�8v��a���`X��J�"
�mE��Cc+�tӅh��6�;��������� .Dɷ��r&1.��$��I�yp)G7FtY�NǴ��9e ��
+��s��2=]��T�O���
�3=3
�tI(1�?$�����ȩ]"[��K��
�
��"�6=��?��K7m�����
�ϻA�nB~��7����1gcQz%w&u�	כl�K�z3��kX��$��6	B��8�@2i
+�
��Q�\�H��ы?֒[�u)
����*K�5u������$�Eے�� �k˾�d��5M�TT����w���`�g�
+Y<��U^�8�TH��٤K���#�(5�֖>O�Ͷ�_�P��e����j��
1r�e�x�ag��CM��;=�ߕ���N�'I��u�[E�[�uy�p����i*h}qwR�*��
�!&�����:D�{���
+��˔\׻�byQc��Ѐo�'&Y
+J��:�J�B%k�8N*AlL%b���Vdpi�]�޵�tP��D'u�7҅��c�#E���_��DU��XʹXEP4E#��wl���|.�1QC{��0��ۛ��p�'r�
+�1�`!������_᪀I(y����'�� ��K��ջ�_��>;N��Zq
� ��)ȌE�9��Y�S��ݙ��U�svl/�C�`,46

�]���@S�]
V�q���+�i�uռn:U��
�B@
 ���}��M��'���i�X��A�.���O=a`�z�����	�C���9L���+��-� ��ۦ�{:]�����s)v��cg�AJ�@��2�-4�R���
�;���Bk*�%�)�<OK�f�COc��
YeL-����ԏ4�u�`^��3�C�Y�(�5�N|�P�(a�2�$� U�3�@Y���?B\��^H�&B�)H+�h�r:KL�
��ܞQ78u� 2��
9IE�nD�@M�+���G��!���X�a+�!���h�
"��q8�8ؙ�	y��U�	ߘ�;[C՞��&@aﰱe��`ڎ ��cڠ�8
 �\�:�
���4�i
�]�#��3b����[
g��߼�:��4̍���EX�
+��7�}�?�	��3�/��i�:t85�lKҿb�?�v�y�K0	�\\�
"�.���\�g��ܥ
��L�a��6Y0
3��K6���X�OzQ��0�
�
nmZ��h"E=�阙�l��cc�{��l���l��{1�����G1)%|��D����19*��j�̗��pP�c
�m\<w,I�MPC�3#˶�6�Rށ�[��i�c�vVM!Z���$��*�j]�"��.��u�5
��}��DJo~GO�/$�~�3O�0��f�r"�O���83t���.�럻
n���Fq!�
	Ē;��K�`�O#���*�{�;��*o^>�/$e��R�
+endstream
+endobj
+856 0 obj <<
+/Type /Page
+/Contents 857 0 R
+/Resources 855 0 R
+/MediaBox [0 0 612 792]
+/Parent 843 0 R
+/Annots [ 848 0 R 851 0 R ]
+>> endobj
+848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.72 421.989 422.442 433.944]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.1) >>
+>> endobj
+851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.115 190.901 414.838 201.749]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.2) >>
+>> endobj
+858 0 obj <<
+/D [856 0 R /XYZ 86.4 726.045 null]
+>> endobj
+70 0 obj <<
+/D [856 0 R /XYZ 86.4 701.138 null]
+>> endobj
+74 0 obj <<
+/D [856 0 R /XYZ 86.4 521.363 null]
+>> endobj
+78 0 obj <<
+/D [856 0 R /XYZ 86.4 256.185 null]
+>> endobj
+855 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R /F48 619 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+861 0 obj <<
+/Length 551       
+/Filter /FlateDecode
+>>
+stream
+xڍTKs� ��WpD��-譭�6�L;��4bGcY8Hn���EB�cRgz�=vѲ��`�9�P$��@#-��Pq�S�$#�(�=$*}(n �
)EB���ҌQX�0(���i�?��\ӗ'���%�1 �@�K��&��!s0bZ�_C�p�
�,������34N)J�h/	F�`%���|HNmc`v�e`���!�
��	� 
Q G:�� 
'��(�,�	�f�P��J3�)��Ym��ϔah렐బ�ڛm\��l\uϦ�g6.�76.�Ӕ
�n�άz�M�hZ[�h]5���Һ:�������a��m#Ə`��mm�R
;[��G��&�`�L#.E�ӫ��������U��s}_�K��%9�RNn1~�R
+]�K,=U6k�Q۫�(�J��2��J��`A~���j�����mMP.�&|ˁ���`�
Hå\ ����h��ɂ
�+oW��dm���n?��+?�n�W��
�:ܶ�B�<
�E(�
+d4�bd_T��d��
����)rq#1�p\�������2�}՝�_��w r
+endstream
+endobj
+860 0 obj <<
+/Type /Page
+/Contents 861 0 R
+/Resources 859 0 R
+/MediaBox [0 0 612 792]
+/Parent 843 0 R
+>> endobj
+849 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./sunorg1.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 866 0 R
+/BBox [0 0 719 456]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/ExtGState <<
+/R7 867 0 R
+>>/XObject <<
+/R8 868 0 R
+>>>>
+/Length 869 0 R
+/Filter /FlateDecode
+>>
+stream
+x�+T0�3T0 A(��˥d��^�U�`nha6155Գ4V0�3762���&F�
+.�\�@ }��
+endstream
+endobj
+866 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160728-07'00')
+/ModDate (D:20151010160728-07'00')
+/Creator (GIMP PostScript file plugin V 1.17 by Peter Kirchgessner)
+/Title (sunorg1.eps)
+>>
+endobj
+867 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+868 0 obj
+<<
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 958
+/Height 607
+/BitsPerComponent 8
+/Filter /FlateDecode
+/DecodeParms <<
+/Predictor 15
+/Columns 958
+/Colors 3
+>>
+/Length 25421
+>>
+stream
+x���	�չ��N� Ⱦ��

+
+�b D"�I@#D�E�""��b���;��
+��q�`�"( .�(qe�,�0���JQ[W�������{xxzz��O����Ϝ���7�|�   �����   @Dg    �3   �   ��
   Bt   !:ȴ�K��������w�|�Ŷ/�n�t�e
ڵ�g���vo֣s��uk'�" (*�3��z}�GSnyl���nHZ5iX�
vОI7 ���
 ��_�ʟf?�t+J�q=;����I� ���
 s^_��ɓg�ۻ���q=��wE�����%�0��o�j�G��ު���㶺�����!ن@q�dKՎ��ܩ�ithW��3�6iX+�F�ϖm__q��E/n�ռ��}��#�4��t� ��� ��%�O���ƛﻼ�Y[ՎoN���?�T���?t�o~�t� ��� ��ϳ������������I7'�^\Qy����j��[�2qh����#:Ȗ�'�~}�Gƍ��5?�:I7'��o�������g��7��ts ��� ���ȫ�vT7�ئ~��'ݜ��:�uㅻ�I�% PDg ��u�tuㅻ [...]
+�Άc��<w�ز�Z����6k�Dg��
+�3Dg �Bt�-��
�*�z�0:[��kt�.g�
�i�P�qFgsɇ�����Ú��Fg��
+ܟDg Bt�-ѣs�ȫ�7n�*:���� �9����
+�+V��Eg�[�����л����:`t��WYY�`�It�!Dg ٢��ƌ�P��S����ye*���֑f�1�謂���K.��z	3�����?�� 2��
 [��:��3�1n��l��>X�®q��l������l.V=E�hs�8�\g��
+��
 S�� �%���T�5�^�y���ͼ{�U�D�ζ�϶^a�k��	�@��dK��:�Y�Q�zFH�_�N��<b����
��8/X�L{†���z����u��+x�#:��3�lш�*�Zg[������V[tv�ԠWt����c�-Z4�.�J�٨�������Et '�3�lш��`3���^stV
0[k͋�ٲ�����}���#�Ư��S-1��Wtλ^����
 C�� �%��D�Y�;?l����蜳�0��J�;�\l^�μ2��zs�j��f��WDg �Bt�-�s�́d���!�9���kt�
���"�ŋ'�x���e󅌴}�=c�8b�tλ^y�d
+�@�D�� ��� 2��
 [���":��3�l!:Nj�
 S�� ���
/�3�L!:��s��� 2��
 [���":��3�l1��v�(�^��)Dg �Bt�-���Z����]��l߶"��[Վoz��P�&:��3�l�x��E/�i�8�w���K��I��Wy��O���m~�%'&�
 (8�3�l��+��L�&�U�2�s6��r��G�l5n���႓�&�
 (8�3�lY�y���\��ڸ=��ѿ�5��բ�N�~��}����o�d� E at t�9�~�;�ۇ
Tg䀆
��N�I������B�7�������N�I P
Dg Yt����⽤[�>�߫ڱ�Yc���o�8���,�&@1�d�]
^�5�y5sC�O�oi٤~ҭ�ӯ{�����_�1{ YAt�]����G^�ǚO����x���J�H��
�i�|�
;hϤ� EEt ��8z���NN� ��":�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��B
=�7��qҭ@p���ؕ�. J��{�z���I�"���B1ڔ.�K&�.�K&�"uI
+�Y(v�t�^2Q�t�^2Q��KR��B�K�
�����
�����D]�Bt�]"]��L�%]��L�E&���P��B�d�.�B�d�.2Q����b�H�%uI�%u���$��,�D�P/��K�P/���L�%)Dg��%҅z�D]҅z�D]d�.I!:
�.�.�K&�.�K&�"uI
+�Y(v�t�^2Q�t�^2Q��KR��B�K�
�����
�����D]�Bt�]"]��L�%]��L�E&���P��B�d�.�B�d�.2Q����b�H�%uI�%u���$��,�D�P/��K�P/���L�%)Dg��%҅z�D]҅z�D]d�.I!:
�.�.�K&�.�K&�"uI
+�Y�W���٥���?�~次G���ۦG��ɵ
L�%]��L�E&�"�Y��7n�vҌ/��m�?z����j�H��z�D]҅z�D]d�.�e�|�c���zϑ]����!I����L�%]��L�E&�8��,�7�����z�D]҅z�D]d�.�#:�c}C�[I���L�%]��L�E&�,��8�7�����z�D]҅z�D]d�.�":K��P�V2-��L�%]��L�E&� ��ݚ�7��⟫�����}�ns"m���o>۸�Iú�e�i@��
�iۼ���z�_�V�iC@�+'�^�%'�.^�WNd��K��x�.	":�WՎ�Y�k�KI7��ј��[Q�_�g
�Y�n�bG�\%^/��*�x�^��uqE]��KR���26��'��ǚϒn�Dƛ��&���?����`�����ta?����$��V8D�o�������j���
�wm�F��J�;k�^���˶���R�s�A{^=nP����^Vr�E]����
���S/�bE]d�S��#:�xg�g�/�S�
޿����l{�xd��)��W�/?s��d|�'��l�����ta?����$��VPD����۬y����>�-�n�,Wܱq��_7ztnٙ�nN
��#�zQ�G��~$u�I�񭠈�5����g��cܸ��&���K�9����j�����3�i�QI7���`�����ta?����$��VPD�G�:�m_7e��I7G��
�������]�$��z�H�^���Q���D]dx|+(�s��ç�/ܵ{�-�����
!���T���?��ta?����$��VPD���������؏҅�H&�"���[A�k�K���KP/�Zdb?J�#���LҎoEt��.�O�.A��qj���(]؏d�.2I;�ѹF�]��Ww�>���Z�x�1���
[VVk۶/���-{o��~W]5���㎻j�����4�4運/~�|��%��u�W�������[�~i{�Y�N1���v߽��o_]�N���I�%4ꕮ͙���!3]DZN-fQl���Qf���q��m�B��؏�B׫W{��i������':���H�~P��xV���H�b�gil�$u>�ݙ��
��wF!��VPD�Uj���٨Q=c7�s��j۵m�fbS�*�G�B���s��G�t�v�˅/_ZN-�5
g��t
������i[H"{V��#mAB[����=^[Hq�e?
+�@U�~�
++]u	r��*�����ٿ������5�
�̷}��g�GWۨ����uW1ӛu!�bUts�ʃ<&�v�P�JW�l��|��h�w���Ԣ���>;�N���7�)����ظq��1��ܜ��]$�Y�ޏ�pM>
����B�#�Qp��B,ǫ��U���y���ַ1�蜷��}��G�񭠈�5�U��׼��j�;mS��Q��WPԆ��G~��v��XGL�
��]"x�RW gc\�N��RpjQg�>}:�w�/�8br˖���%^�t��EQ�l����)�����(���-�s����g
)�T�G��
+�
��JW]lG!�#���:ֿ�
�"��[A�kh�lc�^��0kVS��uk����_QQ�s�
r4�N�.�^i,�9�D�8��>7�\�ko�<"�mV��1k�n0
+d;�v>OHسһE�3����R
�؏�+P���JW]�
�\K3}�	��
��=�O�G9�i�v|+(�s���9�p��xd{�u,�:���~�֮[���l@�?�I�%�F�t�9�6�M������<=�����b�c>F�`�@m5��g�w?�(Hh�v�Q_�-�8��G��
+яWa��.A�T^�y����wFg���r��&��VPD���ζ���@�N�N�v�أ���>����]ۏa�za�i�X^��c��Y�ݏ"�m�[HA[k���R�*D9^����9Ry�F
�T9Ǝ��u&�k��
��\��6r;O	����d��7�r���$m��}�FNj�����O�����p����[\G\�qh5*c�(i{Vz���4�
+�o!m�I�~J��w�
++]u	r��)�9���~�3�����#��QPD��L�8g��u�5߯�����O�&�8?��([�*tֿI�.�c�b
�L{�ӿ�D�Z�����.
;�:��p��ǘNqN��g�w?�(Hh�v��_���&��QX��B,ǫ��U� G*��؎�{�\�ơ/B��:�ѹF�C��0�k��?��;��Q�n��)׫��B^G�|!.N�#]��P)�:��\����J���鬵�=+��QyC����n!ř�!|?
+�U��xV���H�_�����
�z^���d
�
+��\��_�b��sa�Bq��1�H�%��J�
!r�#i*�����z&�N�q�u��
��ͅ8/�bkC"{V��#ma��#�R�9����
+T��ǫ��U�o�~��ϻ����(9K�G9��O�񭠈�5
+�Eܮ��zG��I��_���K[���
��2ɧ�)49�uI�;�>M���C�
+�}��*��c�ڳJ`?��+��l!ř�!y?�P�*D<^�����_b9�����a����"�\ȏ��� :�(�)$�����_�N-��~�.�G2Q��
�
+��\�]Ÿ�]�z���"�Q���D]d�v|+(�s
v	�v	��S�L�G��~$u�I�񭠈�5�%�I�%��?N-2��
��L�E&iǷ�":�`��'m��^�8���~�.�G2Q��
�
+��\�]Ÿ�]�z���"�Q���D]d�v|+(�s
v	�v	��S�L�G��~$u�I�񭠈�5z���jG�\��&
k�}|�H�%�����E]���
��L�E&iǷ�":��ô���YS���l���u�n�,����؏��ԭ�čg$ݜ��G���.>؏҅�H&�"���[A�k�y�3s�b��}X�ɧ5I�9�ܿ����ɸq�~�_w�o�nN
��#�zQ�G��~$u�I�񭠈�5^\���W~�e�ם���j'�
9�����\��f#9k����%�ՠ^^��u��~�.�G2Q�d
�
+���-c�0v
�FE��F
װ�au[5-K�QIڲ��E/n��/������c�V��rbE��>�^6B�E]l���
��R/�bC]dR��#:k��C���bۗI7D"cO�zܠC��-����`�����ta?����$��V8D��zg�gSn}�k>K�!5�l��_�"�V�hմ�'��?���
�׋��J�.^DՋ㞉���.&9E�	�K����_���eᄒ�#u��|��VMwI���Zz�
��*��/B�%�(&�^��$�.^�ԋ�
u1Q	E�	�K�������?:9�V (�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%]��L�E �� ��P��B�d�.�B�d�.Q���b�H�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%]��L�E �� ��P��B�d�.�B�d�.Q���b�H�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%] [...]
+��\���ׯ߼5�V�jGuEyYҭ@ 2�b�.��qO&�"�̢Mzv��I����5���t�n2�b�. PL/�uN�M(8�s
3:?q�qɶ   ]��x��At�
+�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�9�,q [...]
+�Ǩn	��1vZ\����}f
�
+���v[��w%����ΙCt%�A*�����\�=��tkm���:TÜ�w��{���A�l硰e�kg�J4:�j�S����I\�9�v�{��r.������W���.]-$�謄괈�J��Y���^t.�Y at cW�؞��9D�P
���Y�8����
���M�ӭ���u�
հ��`�S�H��[4^�\Y�v��T�sؖ8��s��ot��LE��Zl�4Q|��U�b��T�+U��
dx2�MEBt�:�z��WA��(q�"Gt� �s(�GvŚ,��������SK����{-�v�u=�bۑ1�i8H���~X�m��Ow�b=7x
���K�I��a+�7F�eV��8�
�m���a���ۭ�zY����n~����(�_����
�l�\�~���r�m*6��)����_l]Q��@�U�=#/�s��C�9Hy����q<�����<�l[�qc�	Oo��?=��3^'"
����
�K��e
+�N�J(:k�ĩ��Z�x���v�\��#�&��/籿D	d>s6��5rqG����oS�)ftv]_��\г@�U�=#/�s��C�?H��G󷶃l���2t
�O��
�A�:<�sX�0�_�uVaF����
[���ԨT���FK�
+�s�F��P�m\)0�旷(��EV��ٮ����
9����\�@�Qg�5ǂ�9D�P�gz��w�ck^���>���/qAV�g(�:d�8Wtv=����t�Y�R���z-q�7:�4x��s���3��6Bm�>�e�l�6��E1�)����|��4�(��r�m*6E��^�6:�,e�M
3GAt�
�s(a'�:OfA>����7~�U3�O&�F�7�z4�ّ �_��V�E����?�9H;�*��1Ak�8����x���o�t�U�
F�c�A��i_x���N>;����
!^��e�����;-�M�&`t.����ms�?
h�J��ȋ�9D�P�
�\��y2�J�ϸ6�q��j�Ot���@�+W��9�O���l�2�m�^�
+
��|">��l,�����P����s��6,ž�!:���\�(����Tl��}��P�/�Y@�0�p���ΙCt%�A*��,ި�2}��<8�����&':[�^)/��j��1�
d���"F�P�m._����+�ͯ�����f�4��
<J�괸6�bFg��
��c�g��Y��)�":g�9������|��CO����:kZ��B5,�=�9xt.ܥ�\?��La۩W�B�u�{�":[f�e��W�"�u��:[��}97�B�uVl�k�֭깡&/������Tl
+=�9����T�1
f��
�s��C	~�ҘB�
+�C��x��W��'�|����Nb9��=Q9?s���s��Wt�����X>���5'�5�Y_�ͯ�W�PlU��k��Ό��0�Nsm���bS��	��o�J�,j�5��
 �9s�Ρ?H��'�?a��G��^~9�7�Y��]��Y��u<-\t�;�
�+tt֨T���FK�
+���!Jt���z}�f�W����
+p]gg������#w��@\W��i��D�Tl�s�
��
^������s{��~�3��
J����r�����
+2Re
�q
�ް\�o�
�>aú|�Y1ѿ^+��5*U����E�cÈ�5�[���U�����^�
�yO�
2�k�����nشi��o��Q(Ƌ���\|��M�.N絾�+U����W�8���J� :g�9����_
���?�����9e�V�a�`��r�\�|!'��+EьR��}wؖ8���sfj��	���|��4�ۀ��u��g�^l=��1 +�:�|Gj]����v\��
���l*6�?&q}�E;
�]e����ΙCt%`&���ܼ��?n��ӡ����x�M7i7,�6%��닸��ˠ�xMJ)\t��$�,{t���E��F�q��~�uۭ����j�
��+���9ǻY�|c�̅촸6�5*tt�Z߀�m��������a�3��
J�L�S��c�Q���g�A�6�0b��+VFlX�#@��Bb��>
�y�P���TA�s��84:[7B��|댫�
z��v��{��y:����*ū(��ڞ�W���B�;-�M�k���]�7�n[̳���Kc{�+�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt   [...]
����VI�����I3�~�)�V �޷M��[����;	J�a��'r2 ��8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
 ������������n�s�I�v��ڴ�5�vq":y��Ϗ'�������;hOu{P�N�z�\� @#:w;iƗUն��v��{�J�I@��@~G�����{jW�=w��f��' [...]
<O
�wĀ�I��Ӌ+޻�E�ۜtC �]��
G
wx��
�n����� �i�Z��~���[
�$ �KEyٳ��N�¢3�o �B���u��B4 ���]�$�aљ�7 D�qj1���\~j����N��At�3�O\t\�-�t9��y��@�!:{":�
�3�REt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgOy��
:������ι�k�.��.]�����u��]���zu�G�1b����
?����;ͥ9_�M���=Q�vm뒫v�����
X�`�Yg���2m��i3�q]�W'l߾���C��Ze[es������)�
��>��e���k�w- MA����z
�a��m#N3ᢩ���G
���Ɲg�{��G�Z��� �1={��rşz��`c!���a�E�-�]���q��K�cG���x�
�f�*+�.е��f\���Ì3��f�3�3a��t�����և9l]5�
��k���f�cl-1��h��c򮝭�

z��#\HCt�T���9��Egk�uM����J϶Xl{93۞e��7\_V��O'�%�o.�i������>�ٶF�k�Ȋ�s;�Ak�S��Œ㏊�F@�ջo�T皌6����K�������*�9H���Wf��	�9Gz�>�\��R֖[�
����::�"~��
وΞ
+�����#�*z�Y��?����-���z-�
�5_׶4d��z���c�I�e�����8�m��[��-^�
p���"+Zt��[#�9Tl�t�N��cߺ���d>�

+5c.�6�l[�J�9K(4�`.S����S۫�>�ˡ�|�/.՝���W^2���j[�������3�����=(:�
�9��۫{�����o�	͛53�V����n��
�Ij���ag��
�}��Uc6mެ�mk�^=	�p��s�9�Hg
d�*P�<�y�&�T����W�f��9���
UBU1w�->��΃O8����^H=Ҹg�=�Y��c���^�)ht�-��)@��Ξ
+���7~�U3̼��U�4�r��g��h>�u	>s�Ն��
kD�ޯ^���"�ȱ5([3�zp�U�F>k����ϻp�U�Mnּ�j�E.kP�NlP1.o�s
E��|�5�Z�
���(���6�j��f�����qg��8e��5�u|`��g��p�٧��2:A�us����9�ڀLDgO����#����*��/�\gs0�=����vm��hF�6m|�¼�67�9\mmF���
+�	ƫ��wyW9�����+Nt6��K�jdG�l�ٖeՏf������?m���l����a
�{��ޫ�ն���yWN�t����Z��WGs����9��N���ױ�uv�<��[��
$���@�YeM5d{��SCEg[�
�D�L��}�N=%zt�M������������(��EgUԻt����l�	����
+�ή3}�+>��k��<��[�:���u:�
iN]tVld�3�":{*Pt����ᇡ&l8�#���0?�|ʯ�5��h[�	���l
s��L�&>=
p�lk��
������ff�׼o�#k��1f�p�f“9a�����L_�p�s�3��>=�L�2�?��-:G��ѤYs��1*:��еRy���&o@,����Eg��Fg����,���^���̮Ͷ=�z�9��	Z��y�fO̹�K��7j��s�>=�F�k�:M@A3:�.�f
��ȱ���56�X�T��1A#�^1e�3��|L��AC��♃��aWk�?��_�7�X٫���~t~0��kg.�믿q���1����
F�7-@��=.:�v������5�_��L�^s���Fg�P��w�S�6�4x��s����O��Q޵p-��)ft������l�<u
+믂�:�%��^��� \�ęm���l�q�:Ҭ�ֵ�]������Gg�
�krr�=���_n�}�񿀱�J��uV1�޹s�W����kڱyqe׋��<&�8?�h{��+Q\;�vq�\��pQ���o�k� ����9g	�������/�7�8Cm�#:�j��uq:��
�I-Y=�G�[�s,_���KA����3�>t~%J��������ٌ�A�����{�9�ڮ�����{�)>WA�囶am��a>�
���P�
����(�Z (��Gg3nڢ�y�m3`t���"n�
�N3�� �����l����� �k[
g`u�p��{g7��n��
@����� ઠ� Dt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgODg �CtP���� ���
�T�=�@�@�":{":�
�3�REt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgODg �CtP���� ���
� [...]
I���rD�4#:{":�
�3�����Et����V����7�n|k�-�;
+Ӵ�(��_����iԻc�ݚ֏}�%�υ�(%ӇQ���%ߟ����
Dg�sz�=iD�7�n������f��>����~���{��,�~.DG�(�>�"b�g�?������D��":{
+����i7=c�߶M�>�;�n٤A���l�h��Uk?]�²7^]�����̑=�n�0�%�X?��|�XFK�g�?C�����D��":{
+�o\�r۵m}ڰc
+ٮ�y�%�/}��
ͦ��-��j?��Q>J�����Y�� }Et�?�3�9��Ξ�F�s�|n����6��vm[�])SYY5�����)�;�,
,�~���|�jF���֟A���
A����<����5��r{��ZU_~u�ً�l�������g�}����4m�����Z��O
ХU���_9�����ԭ_a>��Ϭ�y�������%_?iɫ[k{�ރ���)�KV
�.J5���j��AtN;����ѹ��WU5u�Iu�T�]�3v�M��.TR��
oG�(�>�B��3؟y���
����MO��C�
������؜7��������*��p��F�=b�>*�Z=|�J�Y��E���Ҭ�[�ӨI��&u�~����^Ⱥռ��o�^H��o�֧�":�
��S��N3.8��mJ�xa	�sѢs	�a�����$:#�P�Y
���k��ɖ�������9��M_�Fg[�urFgg�����ն�m�x&:�
���9.D瀈��*��<�i]�y��]c\&��·�b���^?�λ�ol�Vk�.��e͸k�������0v}9gt�
9+��s�������)��iú�=ܾ}�yϐ�Ɯ~ޥƍ7V,
}�Q;vT��ڥ����[\�n=�)
5�����Tn�>zh�M׫m�lѺ���ki�۴�eErR����G�^5;�{o�g{�v�=�]{O�Ze^Oq�pD)�ήەs�mW�
�[Ͼ���':��ٶu����%
��vړ�<8q�u����k��al�o�Zn�3a����B���F6�s��/=�f��]�
����s'�t�g��ȸ֩�J��~h���_7��r��l}	�af�����L��&��'	��Li�8�QƏ��Χ�]u��;�*|�hh�V]��TD���0t�
Tש_���ڮ�ؼ�ڇ����+TT�
sj�>�{/��fl�F��G�ߠae�6�Ul�y��� $:{uڬk�ͺ�2�]��]U��ᚼ������'ǘ�sDgD*:��AF��Ո�so[nFg됰�q���5ܫ��s��5[�Eg��UF���9�s��=��ι�d�W_~�8S���j8�믿�;�� 
#��ٖ<���ymW�>4��נ����
x��M�M�ʈ�Fu�Ϲ��q˖��蜳���E眣Ӝ���,+�s��s�m���8g�茈BEg#)��+�{{�s���6#�Wt.�
u�yQD�#:{��U�3N���>ѹ�/���eg���������
泈ν�������ymW>)��O>��Qq]��D�hУw�1�ׯ��ت�c�Y�Ϊ�Ԑ��Y�7~�AtFDa���#�Ft�}7���i?�ꜧ���
+�^ѹ�T���F[�vEtN;��'���8A��~��d5�Q���x�~
�Ă��h�-c���;s��9�4�6s���XH����۫�[g��Cqݮ\�
��}��W��K3���G|YYit���;��G��v��%?a#o�Y'rDl at pDgD6:��Fg5*��~�^y���y^�9��t�p������6h\�l��s��=	��^���SN>�#ҝ:��g\�
vjRo��
f|�y��mF?o6���m���ěsή�
��ӮF��<j�ӏ�W� ���c�q����v��Y����}��ΈH#:;���P��c�s���W��]�s.�W�خ�����杶AtN;��'��9�
��߸m���#���1�
�Ր��n~��Ǻ]�	�j]'��.�'u���g���ؓ^?���F
p�:��h^|&"!�٧ӂO؈k��3"⋸���Et�$-:���z��
+_��#U^A<F������������NA>
�ڽ��|��[&�~��?���ʥ��G��l��2�Wrt��8�׳����LtN/��'Q�9���lYЌ�jhJECk�[��*������ψ�����b�����]Y/T�Ja}V�m�6a�x��8��m�aj��\gU��͚G#9:��&f�.N�ڟDg�Dt&:��ٓ��
�+Q
��W9#�:���[/�뺴b^�*�E�e�yب�m���|��9�7g)J,��s
�U�O�9�p��Y�x��Ӎ%=���yE��w�^
��9���(^��I^�Έ��LtN/��'��;.2��@)��%#��"DgDDt&:����9.D瀈��":GtFDDg�sz�=��Bt��,�spDgD��s��Ӌ��I/:_q�Ȳ�ؾL�4":�d?9:�dF1:g�?�Έh���o��QҭHL˦
f_��7�%���)lt>�W�y���n٤��J����	W����7
�xl,
,�~���|�jF���֟A���
�>Y���ob�z�Ξ�F�+Z��k�:�S����])���w�{�]ˆן�3��j?��Q>J�����Y�� }Et�dDgDAt�6:/�9w.1n�O�$Z����[�~xϼ'�UV�ѯS�.{Ʋ̒��Bt�����("���3`_�!�Q�=��Ά��}��n���UWW�ei�&}�
�Ү�ԡ�Ǹ�R��v��R��(���,�g��":C2�3� :{҈ΆWVz�S�V��0�J�ݚ��ݱ��n�ľ����u����(b����g��":C2�3� :{ҋ�  �3$#:#
+��'�3 �!:C2�3� :{":�
�3$#:#
+��'�3 �!:C2�3� :{":�
�3$#:#
+��'�3 �!:C2�g��ۤ�ۻm��?��t+��� ��MFJ�tݦ�[��l���w=Ѿm�d�al}~z��c�t9ą���
 z�Φ_���w�I�v������l�z�y��s��=�@���k�t����9��Ξ�� ���l":���w?��Q��
_Xe�ߧ������d���� ��MDg�\?��-���Ӄ�O
3 �� ,��'�3 �!:��ΰٰy���7��g�͓��s�Ӂ���
 z2
�����Q��r�?ỳ�
ܾ��4��g��Ӆ���
 z2
�
����W߱޳�n-n�4<��@��3C��Bt�Dt =Dg��3Cΰ2�rN
��'�3 �!:�v
xf�6��3CΩCt�Dt =D����
9
q냋�{�[!Q�n
�=�oҭH��'�3 �!:+j�!g9z���tl�����-.��� �Ȍ�I�8&�>�3цn	����
 zdFgy#��B�BFtE��Bt�Dt =��si�,�c�+�%��'�3 �!:'%
���n	����
 z��I��:FA���[B!:{":�
�sR���Q�?��P�Ξ�� ��蜔,�c�g��u=�}�6�
w}h�6��U?n߾}�#W�\>�1.��Y]��Y�k�������K�cG��U�֫����
+��� �����u�"Tt6c��������*�
���O>�ע�ծ]�|֐a#T,vf_�g����F�2÷��c�(DgOѣsU�WO����5뗿���-��5M��u��m����M��g�:�I7.��Me��Z�c�K��\��F��(P
��(��_����iԻc�ݚ��zX)Eg�Pb��Q����u�љlB�At
�C/:�̼j��o���]~�U������7aڤ	f��Eg��ǿ��s�|�EtN�������O6O}���m��Q�и~�����
M�nv��m2��[�k7\|�K|bd�3�u:��-�����
�ļu�3���r�O|q
wܼyS�1�­c����Vq���O
3�x��)�=xX._t��9E�Ξ�D��F��Qԫ{tϟ�ѦE�&���@q6l�b��O��u��z�)=}�Pd��&���z��|�M���mӢO�έ[61���MPee��O׿��WW�./�5sd��[6t>�d��3
)���5<9����,�:fJ�	�5���a��W��� #
�h���0�	�ϊ2׹gᆴ��b�(DgOQ��Wޛ��k��2��Au�T��4�n��'V���
v;`��ۂoe|�
.��{�•s_\ݮm�ӆ
S�����cK�_�F�=�M?���%���d�=:�
�,�:fJ,4���y�
�G�m�T�5�)�<�Q�!:{��/������Ѱ�z
|@��ە61�{ׯ3��&�|+��dp���s�|n����6��vm[�m�TVVM����u�����m�DgÂ�
8k���1��/Ȅ��c�]��О�a���1�M��cڌ�w>�7Nj��9�=ﳈ�)Bt�%:���[*w\p���w�����fUWWsq9�&�
������ꯦ�;)��c�ܔ�8B�RtVF�8~��
�*
���qG[�	;Y�û�����)�����
���y�EtN���(�Y�6f\pJ�mJ�s*�6\�7㽚���n�p�k���~���6l��dS�cG�1��cɋ
�UYU�r;ojN��7�q�5onT��k���9E���Q��a�
��
P֢s�r������6�hM6�
�� ����-bt�F^�N�0ݫw_�L�E�/0�Y��R�gY�Ra�����x�mr��ۻ>^��X�
+���9
+��4Y�&g]3���?�ع��vXD瀲��x�9�NW}�UA>&h
w�^��?O;Y�u����
+�ٓ��iú�=ܾ��o%wi�����n������G�����CNs�y�Z�ՠQ��_ZQ��z̦���m�b[���� :Kq��n�-Z�Q�ϖ����{WY��KG�9jҭg�i��S�V��,�K�{���z��M��]����
�xt�lu{��k��?�bS��
�Wm��'yp��궹@��W��\�Bt�}7:�n��Yp��j��9�
�𭮤ad���:t��a� ��
j�cv�?��P�Ξ�E��G�tk�Ĺ�N��v8��O�e�i�eUzpFgs���Ncz&:Ke�tn<���0���7����[V^a���u�Ye]��wf�U�ߡ�{�
46Z3�
?zH�
++�97]���UvT�09p���֮nk�oq��v�z

+f]3mֵ���'j�}�Fu�O�GI���钅u���qE��Bt�$6:����W_~�
m2N�
����1�ϼ�杶ắ���+:;
�Y�(ۤs
��o��fzk�g{���|�s��
x��M�M�ʈ�F�?�6��-[6�o�3�M2b�}�]k�_c�Fq��v����-U�/0.Dg����Q�?��P�Ξ�FgۉP
/
���F�m���W��%��>���+������'���̿�GGt�&zȳ���z��l�t}!�Yơ�G���c��_���
�]_���Y�W]�<���.���Q���:FA���[B!:{���&8����s�_
=���Z�����8��w�!O,�ߋ��2fx?��
�ɕ�,M�mҜDk�#k
y�,h��`���I�W1��G|YYil�F2�|��
�7�u�-�xj��:������c��<
+��@YX�(�WtK(DgOҢ���s�q^��]7��O����ϼ�x��c/�q��D�̊e�4���'k�B}�4��T:��������|��
�G
x������s�u.�h�l�U�C�+��5Htv�y��z��@YX�(T���M at DgOb�sΒt�H�J��X��Yy��̈́���6i����g�ƃ]ߤ�&��6��)�Gϼ��'�~�cg���tU"���0�$.N�W]u��
5a#��.Dg����Q��:��w?J��l�`����fXDgO���{���z�)E�é��g�^ዏ	fJ��d�	�9���z�3:_4��	��p���r��\#s 5�Y��\�9x��

+�
�7���
����
+�I`M#��'���<�=6�^�tkF�ؕ�,ubv��\�.
�l�*���]�K��ζ���2m6�g��?��x��q�s]��͚�>iQq��v�z���{q:�>�Tt�Ȉ#i,-��)Et�$-:;�]B]4�<;���I�9
+e
|%JE�&�v�nۦކ��9�MZ>�Ԭh۬$�?������Dz��fr�_����z-WR�Q��)Et�$':��Y����"�@D�":{":GAt��m28�s at Dg 
+�sJ�=�� :K�6\��|�y#���:^Z��(��)Et�%:�����2{B5�{٬��j��
l���zO���՟l
��A�[6)B�D1�h•w~?�͂?
��-�ȋ�RDgOQ�󙳞}s�ӆ
ۮm��ە�9�e�\ϩHDƷ��Bm�W>���>�ux�~=-B�Dyu���=ծe��O���-�ȋ�RDgOQ��
W�}q��{�6j��q�+�z��G�~��
ͦ��-��[�&�
��.�9w.1n��Ѕo�o���=��VYuF�N����| �ȋ�RDgOQ�󧛶���ɪ�z��~=��?��c�������rD�ݒn���m28����g߼��o��F��-d���
��]ڵ�:�pׇ�����)Et�%:�y��i��ng�j�A����~�a�.{��/C�p���m2�([�+�?��U�?�\��I�[���;�
�m������)Et�1:�\���g�2N��5*ڵl8��vGv�=��E6����z�Btβ���λ~�t+R�·�V�n�A��$���j
�ݹ�<%:{�
� ���Y�k���Ӥ[�?��.��
�}�n��-[=�����!��Gt�Dt =D�,3��S����������Ïu��@�\q�c
��Ft��
 ���eD瀈�VDg=Dg (D�,#:Dt�":�!:@) :g�o��߿�J��͜��^�~�����Yvߣ/��ʸ����w�Q�u0��j
9:s߬����s�V�lڠ��͍ۍ�=��r/�Et�Dt =D笩�Q=t��6o����{��"�&�u���\��v��ޝO��Ŝ%ϵ7��0:$��At�Dt =D�
2����������
H�=bo0��ƛ
��ٗ�jܰ^��J��7�~0zC�U�Ξ�� ���A΁g���؆Z3;��zC��s����
 z���d
x�ӭù'�M�=bY�Z�<�X{C��s����
 z���d<�2�Z3>䬘�!�9Gt�At =D��R�����P�q����z�~���sDgDg �Ct.�[\|ߣ/%�
+�N�Z閌�޴"��'�3 �!:S��ӓn�\A��%�
��[��'_�Ct�Dt =D�bR)�/�	�-����+��>�^G��'�3 �!:SR���+����
?�3 �!:SR���+����
?�3P|U�_=��+׬_����T&�
���)߷M��6=�˞��'�
D�b�B��@tvEt6��Gt���O6O}���mI�!�Ѹ~�����
M�n�
ѹ���r4�]�MD�����Z�c�K��\���T�H�9�RQVk�6��kӨwǶ�5��ts��j�MO��A��G���
mZ4o�kҍj��/֬�t��_7�7
+}�)=����\LYH9�ή��&�s�����v�������gD�3�u:���I7$���7��7�e�Ƀ�ԩH�9�p��>���������$ݖ���)`ذ~]�C;l߶ͼ�a�]Z����mG�8~��
l�qʘSnj5�2d؈	M5�پ}��Gnܰ~�s˶n�⵴�.
<�ώ
U�_�
Y�r��|�X׶Yk{@��1P�v�X�%�#
ֵ���O�zuH�z���4j�X��k��+k._������l�����P��
���=n�5�VY�ߖBt��9
+#1�v�3��m۴�ӽs�Mԫ�t�����j��_X�ƫ�V��՚9���-&�(?�����Ѱ�z
|@��ے61�{ׯ3�B_տ����*:�D�XQ^a
�-Z�63�z�Ot6e]��+�Iq؈Q��kR9������l{!�s	��
�
+�<��Y�GL�qݯ3~�y�4�ߜ�
����O��_�εC��������ԓ7h�p��m�~pV3��(:k��z�At�Bt.
7.\9����ڶ>m�1I�%�
xl��K��G��'vK�-~~u��-�;.8���
wI�-ir�e�����
���Ť�s;'�\��l=���_x�')*�+>0��3�M�6i�m��ui渣��1vK�G:;�?ӛ�[^^������_c[�A�:oڸ��i3�����o7~��ߛ�_NU3��":��^{�':� :��s�|n����6��vm[%ݖ�����p�����
�?��Qak��$ݐ�;妜��ѹ�R��=���
+2q�t5|�
�j|�:�kNl��[�?�6��$���y���+^[z�%W
p`'g�������E}�٧�#�&u��You����Υ���WU5u�ILZ�@f��!:�Y\�s1E��aͣ^��:5��T�6�S{{��fbL�����
d}-��l�T��uQquK�G�fS���z���޷�X��!�7oRk}P�C
���3��u蠣mQr��;TVn7��xgҵ[���5kw�lt�X��St�":Ǐ�
1H��ʆmF�����)��Տ��֥��먳=������y��b~���!�(���A�����F���>��
��
w��+�M�Eɣ�9�����R���������1AD��A
Ef���e�ٴa���n�^s�mѺ���/��]�z��K�]o���u����a��'�rҘa�ζ=�pý�w�\s�|c�����Ɛ�EY_����m[�x�D{�e��\L�6l�'l�Li�Y��h}z��u���†s!k?X���?2�
S����u�=��S�������9�
?q�/�~\Roe
�5V����\:b��>ah����w�q����ٴq�:�&
��֭���B����v�=�j��Z�ڀ
+�?��
Uǎt�pj��LW6ѷ�f�
+���M�"��/+�03�zb���*{����#N
;b��k��9}κfڬk/S�ڬ�u�?zH�
++���27�W	Nfq��Ŕxt6�7�b�WRt^�-瘺��1A[;����a?&h[q���z�6ci3����?�']j,�uFG��������KG\��?
�Dgלd�6��F��-[�-uy=%xt�
+U�Y�

���&�6c+��~k�y7&:;�wn{�
x��M�M��X����Ϲ��q˖���l8�C_}��(�2�Kt.�ģs�tجyssj�3)��k��ZǏ�ȼ.N��{ը�m�:z��z��%9ߋ�Y�$:�K�EgcicF
_���Eռ�TGg��!:�#:�����
+�s��T^^$:�,�F
H��}B�9��ܠQc[b�ζ!g�\Z�=۫g��
���1~�~ݧo�\f�8�����aI�ι�&"��߱��˷�;��i�l-�0�(l�ͬ
�n�;�7�#s���':�:Ĝ�����%���t�K곕i��aW����\:��^a(u��'T�c�fT�5nt���+;7���ٖ��/j��nG�U�j�����4�
cC�|��
�7�5:3a��9�,|g����_�m":Ǐ�
E�s�}�P�	*'�~{�m��Z�m�G�&l��*�s�ی��?5Y��c��G��l}��T�~z����O?>��鷌��Ա�8�b���֭Z�����)
)G����Dt��9�د����>&�5��h����O�":ǻͨ����5>:�=8�	�F�=e��w<<����~�����Y�?	*��D�b�B��@tvEt6��Gt���s���6L���5��
��B�9�mƙh�Gg��o�Z>~�?�1����2���h��'
��no�\��&9��zQc!� 
�����)
)G����Dt��9�]��+
��m�&��Gg�PEt��ͨ!a��'�&�h_���c�u�z��8���ј�ϼ���
�� 7k��!��D�b�B��@tvEt6��Gt�"�������R��uj��>�'Ht��
h|R�W\W��*�PEt�e�Qo����6��ι��EqFg5+�Hؿ8z�Wt�}�E��!��D�b [...]
#4ѹ��ւ?
�t[vBtP��Ξ��Q�v�ӫ?�<���Z�l�t[��HW�����o��+������}��mԐ��nKj<��k�<�R�=�M?�[�m�	�@�":{":Gq�CK�x�^�w���Фےu��Z}���ڵlx�)=�n��O7myݓU�_���A�z���W�e�態�o�������v�E�a��F�F�p�zE@Ab��v��`og>B,-�s���R�h%��\��
	��S�p6&���dֹ穦�q
�/˕���
�J:'I�6�������ФsХ�L�����ҋ�����7�ϕ���>l<|�2:7��Da�=�u��ۿ�O�<���ݳ�tj%���sK�������,�����g��s���ϛ�������C���'n^�]�-=�/�3P+�$��k��ˏk_��
2�Μ<>sa����0Y�3P+�$��Hg�V�9I:��@��s�t�#��ZI�$�
�G:���I� �tj%���3@
�
�J:'Ig�<���tN�� y�3P+�$�� [...]
�Rƫe���Njob
��ܺڟ�;SzE����
�FG^- ��V: @gIg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�/$�W�
+endstream
+endobj
+869 0 obj
+64
+endobj
+850 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./sunorg2.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 870 0 R
+/BBox [0 0 720 504]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/ExtGState <<
+/R7 871 0 R
+>>/XObject <<
+/R8 872 0 R
+>>>>
+/Length 873 0 R
+/Filter /FlateDecode
+>>
+stream
+x�+T0�3T0 A(��˥d��^�U�`nhi�g
+6506ԳP0�3762��&F�
+.�\�@ m-�
+endstream
+endobj
+870 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160732-07'00')
+/ModDate (D:20151010160732-07'00')
+/Creator (GIMP PostScript file plugin V 1.17 by Peter Kirchgessner)
+/Title (sunorg2.eps)
+>>
+endobj
+871 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+872 0 obj
+<<
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 959
+/Height 671
+/BitsPerComponent 8
+/Filter /FlateDecode
+/DecodeParms <<
+/Predictor 15
+/Columns 959
+/Colors 3
+>>
+/Length 41818
+>>
+stream
+x���
�՝���}��	��
�9���<��L�WDNDA�
 =��Qs
l�0�hP2N2Ĵ�o�`$��>  ���k�t�w�u\��{Wծ{��~
���z�뿪��^���_|�   �B
�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3�85
o\��ڝ����k�֝q7�4_���
��۳˥��۩}��� & =�͖ڏX�v}
wC�׮u���]6|P�� �Gz�_���G��w+����|Eܭ �t#=���ڏ'�\"�۵>i�em/�Uv�%����0�
>��
��~�K5�?��( [...]
�T#=�Z���1w��=�r����}{gBs�����Ś:�\ZR����=:���Q �V�g Q{�f�
~'Dh��݉�z�}���a_�}ܐ�[ iEz����+���Ob��k;�����nNs���#w�|O�����.�>.�� @Z��D�{������3��Ľ�.��e��i.i���2'&o�^xG����"=�ڀ�ɅW�<�m��mL�2`������Ew�� H/�3����vQ�x[�ܐ��?�3�����Bz �H� �Fz�
� �#=��9.�g ��
 j�縐��?�3�����Bz �H� ����{�����:uj�}�#�
U�ee%����&�H� ��@�H�q!=��g QKlzv��I� �̑�D�Cz^�t�رs�rϞ�er�ٜ���<��iCCcǎm6l�U^�U<‘#��UnܸC,?�\���O�
{֟T���Is6,g�G��dٲ
+���55��
+|�=Oz �H� �Vhz~�Z�E^Tkd�ܷ��>=����cɝ��d�����o`yR7�ȧ(..���Q��V�X/��G}.pE��C��� �#=�Z��YsՃ��سH�
N�8q�|e�mӦ�
K��o޳|���b�+mۖ�mD��ٰl���;g���
�9D
�66H� ��@�|�=�D���e޵l)#����֠��
Öϫ�g�سj�>�Ce����3����Am�� �#=���y�9�
d��{������f�x�
[��6;=�Ib��t���ɇ�
 ���D��=7�����?U
�QX9(�3���2s#�o͞��X/'~Ȉܽ{��ک�e	��h�w������� �#=���y��9�ۭ[{7����禦&7�%�s��f�{��F��C���ر�3�#ђ�A\���6�>���?�3����c��P��6���̐vy�:5Gb�©;w�aZ
x�����x9��&Zȇ��瞑���m��7H� ��@���R��3 �Gz5�s\H� ��@�H�q!=��g Q#=Dž�
 ���D��
�3 �Gz5�s\H� ��@�H�q!=��g Q#=Dž�
 ���D�U�ߵ�XX���Yws����_
��G���3 �@z�{~�b�����}�;
�&��4�}�0��>
g�8e郓�n ��@���n޳����/({�^�ߵFH
X��Ś:�0��3o���� iEz��>�즙K�7�囯�0�N��E�{�ͺ���W.?x�՗^rn����"=��~����
� 
�v5>��9�a� |#=���K��~
w+
WZ�B~MP�ѹ����uj�\s ��
 

�._��uq7� ��{

�ڷ*-)��9������&_At �H� ⴥ���/���|&�a�piL�".�{f�+����/��- `�3 ����;���XX:{B�����
 @
H� �� @z �H�  �3 �Ez ���-�3 ��
 n�� �g p��
  =�[�g  � �"= H� �� @z �H�  �3 �Ez ���-�3  ����k����o��
+x���#��9w+��ƿ��[ܭ��8a655��
+ @��m�{4
$7=�����Ƹ[  `�k�^��
��nE�$7=�u��̉�G�n���nO������b��������o�ݐ
>R��v��~n�
	��}�o{�7r8*� N��S�+���"���-�(�YNz�&����/͌�!����O��0��n
�x�"� N�.yU�Gz6���3BA��F}�Dz�DznH�~��
+�g6�k$�3$�ss at z���PP>�Q_#��!���ҳ�g������
���
��� =#��l��H�gH�����G���gk���6������n˒⛯
s���3�5R}C�ͻ�
���|���il,MB,6m�p��Z���濾����_-��Y���\�댘�����]W�:/{��)WL�z@��I�ĥ����+�ZV������
����J�Uײ��o�}v�XڃX�wP�}��,-~��.
���*n�O���k��kD}E�E��jR�$.=g�
�)B��F}M�=���s�������
~f�P�Kϙ���C7](�٨��,��
<7O�wȼ=6�>����IL���ˡ�:��l��T��3�͙���Ǧ҇�x� ��9�
�
�iD��F}M���xn��;d�
�M?3��MBӳ<z��nQ>�Q_S���z���s3'�!���lr���go��3'��̉�n��|f��a����^X���
m(-)*).�����s�dzT"�w�ߞ2�����Ds8p���m�Z [...]
+X����y%6�4aKx驣Nkƴqq7$"�?�$C�����?��3�
`ꡝ;=�����Ԟ$��G�jo�1�1��
IbKO
�%�X!�82�KP�lƔ��⒞������2$�-=u̖�b��>���.A��SnS�KzvFzN,Sː$���1[b���#����fL�M-n���h}��3f~~��̩jjjR�-KJ
���fj՜��񏖕7
��櫮�ۏ�׫��۴��?��]�8������cG+&�:����kJK[��B��)�
�!I��:fKl�t�a�>�(�.��/����}*o��'���]���/w�GkAL-�i�Yߦ[ǎ�������^���A����η��
7�vh���AҳK��Kl ���[,
�9J1v����ѿo�oM�����aT?�9ᒕ�
����
�s��(���[�
?7����9�Ȩc��KGz�RB�sQQ����g#='���,��
;��/�X$�uu"���C,746�t[w�\�E��ظIl�����~��b���?�r���������c�j��6�"{�Zo���.Ǟe��6�[z֏��u��IS�u5��O�.���ba�;��tu���b��7L�r��91{�B����ް��?���}����/
��4m�ao�cY��m�3_�����Rg���
�[O��U�o�{[-��������+�!#�/Y�/��D�>�x��Wv?��~̶=���r�U׉�QVy�C
~6�v���x�Ot^�
:�oG�6��r=�n�<��Γ8�
���ՙ�~\w�~�^A�	��^�-E��zj�Cӧe�Ͽz� �=��Ψ~���s�
n����[�0��^��������D~c��pv�
6鹤�X�6e-�6z���׿� [...]
+�6H��'�5��Ǖ�Z����o��ϜHl+�.���浘zX��Oz�!,�ʓ�M0rD
�9�rm�}T�2z�=�$���&XRu���W\&i�C��7���r��,��#o�o����y,�ھ�9����
$=녶���Z���y2�fjq���Ȝ��a?�l3f,�k��,�H}��߹�b�%?}}�FF��f��o׬U	�~���O��~��쑤BQ�^�����6��
����E�cϖ�N�s�
���L�����-��Vaz�-7�<�������w
ƞ=��ّ��-+=��|�sҳ��g������Z��0����5(��\�c�r��m�o
���Cˤ�R1�쒩�eH|�����7L��oe�9l��=�d�'��4��)����Ǟs��f�>���f�����=�E�-).
]9�IG
��;�<�|�Y_�Һ�D�͞�!ӳ
�r�H�6?����%2
+s�
�����n��(}*�
�ʞ߬ϓ�����k1��
����;'�ym�8�����:�����%Vd)=r���� �
+��l9dD��޸���+�m٤2��_�T�37�y�هy�C�g��\���y�u
��#?�-����g��y��	|�s�׾x;�g3����sC$T9�+����ȗ���i��sC����E at _��!�n��'{������6��
�����\��Pc]⧖������S���eH�����N�_Ӧ��
+��:d,����O��ߐ�rc�^���KD�>��s�c��V
�~
6�ܐ�f��(��2=ۜ�
j!���=7.��='_sK�)b�a�Ė�:fKT�¾�o�>�B��D6fn+��v��⒞������2$�-=u̖�b��� Q]B�o.����ǡ��XnoL-.���9�L=,C���S�l�*�9	�%��/�&=g�~.�,������X�
�!��O,�Kx�BB�aҩۂ3y6�� �7wzVv�9$�ߣs�H�H��ްc2cPi�6y�-��P��ztn�lΔ�
� � 1�����;u[p&��u����5=[
+Fz�L�}4�dd=ǤҤ�YWN���K3�nFeˤ8��39�Ś�-8��z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(���yϾ��u��(A��s��+�n�/�LTe9~��P��9�?\sg��n�/��X	�9����H�EP�y���)�ߙI��7�3+��M�
� �DzF(H���q�
0=S�D!=�Kuq��P���1��Kz������� �BzF(H���q�%=�Hu�I��R]\ A!=#f��#G�
�ܳ���폔���f\}I�6R]b����͗��ei��2	����3BQPϩ~e�����]:��Wr�M���{�a�K}3�8�<��N�S��x��A��24�`0�3BQP�s�ӛ�}(.���2W�$+��o���{ӟ��7C��[z�����o�T��� 
FzF(
+M�"`�q�U������j�%���Q,WT
���qԨ��w�+�����o�:�;b�����-{��.���f�׿����w����6#F\�lYEqqQ��3��[hz%����fHω$+�����E���?q�I2C��-8~���Pt
~��]뎩ʌ���O:�E�W_��t隱c�.\8�u�b���r��^r�X>��SŖ�:�W֦�&�
:*�_vYqqf��{�����թ�B/�f\}e}���f�>�_��&�O����}^�7H	#+�_벒�۔��
�/ ��
+��ಖ%
�|�UWq�U+�K��Y+V������_T�j�^��l_YY=w��6l�U^޵��q��__��۴*iYR��D��]:{��_����ȩ���.�6n��ř��q�H�3BQ�5x�����e�������(ΘQm��
+����5=��M�7m��WP˖��s�^�^��Ξ��Xoy��'rd�����s���`~�=˲�>�G��
�_ �@zF(��{����2'>�9��9sn��xf͚�"�˭�h�W_o�3���EAUY%�_ #=#���۔r��c�����u���ƍ;�dV�������|Y}}CC�篚�q������,���9��O��ޭ�e%�/ ����B�
�̀��R&�ˑH=��J��}A̸�T_���
�s�D�J���� �/��#=#f���0�q���o
��{zN�T@PH��93����n�.1��^��
 (�g���W_ҳ�T���l/���3BAz�nj�/��F�KLz����
+��*=�*�W_ҳ�T�`�s>��
��ѹ��g�KJ�
 (�g��ϙ<sɖڏ�kQ����~ٜ)q�— ӳE�s��Ҁ�9���Mu�
8~�DzF(�9f
��9V�s��ހ͑��@���
+z��«/='^�g pDzF(�9f#=���
 �H�=�l�gS������瘍�l*�3 8"=#�
���MEz G�g���c6ҳ�H� ��P�s�oz����^X�S'��A}�|E�
 =�#�3BA�1[�陿C
�3 8"=#�
�%!=Ϙ6.�g����.ɐ� �H�=�l��0��3i��c�i���${N��/6@췐�>ɍ�P�s
>��~��Dz�9��i9z�R���Xz��/6@췐�{�$=#��
��2�
�>�:=?���爅��U�F����ǎVLup��
�ה���֌l��L��e�+E�/HΞi�
�-$I8U��� ���E=�iSb
�3���Sd�y�K���]ٯei����������G����[�~�����r!=��,)��猉/6@췐$�TIzF(H�6H����%����tl{��A*CǞ�C��K��=�s�� �[H�p�$=#�g�g��,ӳ\Vz�M�d<]~�q��b����X�����+&]�x��X���L������I�v�u�����r�C
~6��cG��媅�����>��㽭b�S:u�_45���|�S<r��
+�I�$����|h������g��+��J3q��T`��$	�J�3BAz�Azv|d"C�7
o]V:��cχ
��Ej����^~~֏o��^u�Wz�4,�qY��"
w��%_4����~�����=�-	��(���%?ʜ(��#ҳg	L���cPP;�T?in��}{���c˓p�$=#�N�G��T�gϡ��)++	��I�6n{�7�]��f�����E'�mU���<<���kV�(�%�ʱ��M�Z߸���|�~}H[`{hX&��(�����7��qW��y� ��c�#=g���%���sz��������
+�9կl��f�E����Ċ�̠���Y&��n��	b���y�P���~K�R{��!%�qz
s����"C�	��ە���!CKN���<㬯��zJ��O���{o�
+'�&��ș<�v�g٪�z�Ё};j�e�����#Y�dy�S��[�hΝ���L�O�ICz��sdB:�[�i��34�9�"N�z������ƞ�Í���$\�L��`��%Y�_�|�I-�|�-
+�i]�\8��s,r��⒒�|y����С�g�eE���u��+ߪu��M��
+�#���]T�����:�X�w
�>��~?���!}� �wY��ۭw��Õ�"�o����S��c�L©��PxH�rY����ު����Q,WT
���qԨ��w��{����ۦN��X/ñ��زg��*"�G��_��J��w����6#F\�lYEqq�� j�˝Czvo޳5���?�����$!����\Pz�q礷7�W�m[6��<y#	��h*�o��v�;��G-Zd:��j�]߳�u��������I�b�K�<����
V�v?���gzV���W%�Iz�U���-ח׼�2��ѧ�G0����2���5���e�t�E��N<��k[*r���5e4�͑�w���
]�̪����K׌
;w�©�[�
55���+����*��ԩ�H�MMMj��С�b�e��9Xdb��{�����թ�
X>cF�x�U����,._
�٧ �X�����p��e4QIN$�5������$\���o�xs�_?�l�>�,\>��[?().r?s#sb`L�#�f��dI�j�K����'�� [...]
�}v���+��"
+�׻�����AD�#3A,37��ɞOw�l�>JjI3���e���=g= ԯ��.+��-�ww���|���bi�O_���I�h�<��Ȝ��Ӯrz��gn�P�s X������'o:�is���H��-Uz޹s�Z���ٳ��-O'6���r5sC�a�92���D��Un�+�W
𗔔�4�{gˋtv��\׳ӳ
�������?�o��U��
6-�7��>]��n^�%���z at 4_3��]VJ�[���,c��D��-=��,׻O�9Ǟ3'�2�
��97VT<�f����*.{{���
B��}"=�'��~����uGUn���L�*1��D^�p���a#_Z���l�BǞ��w]�*���̗o
,M��+ȷ�͜ל;'��_��� �wY)�oQ����=��[���r�F��P��?�l���%��YNҐ3����Yr�ƍ;������#�/����b�E^/--+�͛�/^g#=�DzO���7���62�S��Vn��d�
�k���J�~��ݝ~�
��L�p�$=#�����{n��r��>x��j{�;=���!='
qڛ����O�3���56ҳO�g.�R�q,O
�
��/�3%��~�O~�PHϙ�T*.)�o�g��l��Ċ����J��Rwx���N*�|���t���%w�Zҳ=�3BAz�AzFb�^��M��NϦʙ���3
Dz�AzFb�^�tM˱̴IW�
�=��� �[Hb��FzF(LϦ"=#��, 8"=#��
�ߣ����'�
��� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍��*���{��E/���8	4|P��&_w+ Ć�P�s��&gSX���� ��v�]q7@lH�E =��obqf0U��y��*Q�ߙI��
�'�3B`z��@A��x!iHώ
8~�DzF(H�6
��uf�ㅤ!=;2����� =�0��lz���Azv���
+�� =�0��Kz������
�4�rϞC۷?RVV�㧷� �BzF(��w�>X^~�e��Y�������/xI6��Kz���{��G����6n��.�ד����P�s~���i�9�[}%�9�Ҟ�	X�xK�'�
���gh�
�T�g��О#��f�Ez�&='V��]���sN����������]:{��_ٽ��m�F�Se肊��[��"

�b��bxUՍ�FUmܸCH
�S�~G���?[���YUP=��l���Uq����ՋmF��D
�����._oz�
 (�g��[z�T�.4Z��
�l�0�����v��u���;�w�PSSٻ��2=�
���Ś�{rIv�N��
>[�~e�H�Ӯ�gh�s��G�"C�;x8㮸z8^�t�رs.�ںuK� O�R,���b�N�ډ�555�"
:tT�+G�X/v��}����,�1�Z<�U[�x�/-���3B��,2��|�����h�_��fy�,--�ô��=��
2d�y�&N
"W��$�
�\}��g��gh�'�FV6�S�
���}��iYZ<��~�{cK�]qU8�#�^PUh�vWfkqت_TQ[���Y�����;�w�T��_�.B��E�_����
+���O���pݱVe%
Lf�&=��#/�����w��C/��Nu
�yI��M#
������p��}��52C��pu���$�3�9�en�y�.
ۺk$���{X������'o:�is���8�,[���s�^�^?Tg�~^��<�����ՉB�i��3B�g���Ӯr�Ћ
+�TÇ�R:b�%*?�L�r�Q�JuIvy6�������5�;����������f���񛳸���
��97VT<�f�L�����|O]P��[\ A!=#�ҳ��reA�Y� g�ܰ�g�++��8�IyY
��lπ�o��-���7VoxO����v�'��᜿{��y���s�侸�[]��rЉ��3n&Y�G��詡�Qm/6��y(--+�
.��7���3BQh�8a���%�Y�!��d3sC}kp��w7l�նmY �d��?3���y޳�۪0<���ZJ��v�^
�zu�LjW�7�I� �BzF(b�k)�FU�$�9q�
3�
�A%��YN~���a>�g�o��u����!=�����7�0�o
�-���3B�ؿ5�\}
�o}Cc�����
O&
��Qz�
 (�g���lÀ�o���`��[bҳ��@PH��نW_ҳ����(���3BAz�a�՗�l/�%<=�k�!��
�������� �BzF(LϦJ�՗�l��,L��dK��9���ܣs�es���
+ �!=#��
��oڥ��lz6U3Oϱ?
 ���P�s�T}y��4�g pDzF(�9f���"=�#�3BA�1�5� 
��
+z�٨��H� ��P�s�F}MEz G�g���c6�k*�3 8"=#�
�Q_S������瘍����
 �H�=�l��T�g pDzF(�9f���JBz����^Xj�2|P��&_��IQ�
��b�f��P�s�%�����&!=���[�
{�_�4��y 
�g�"���u(������79�yƴq�����]�ɓ����B�|�@�EzF(LWk�
�M�1`��LʯC��F��Kzv��
4[�g��te#��J��6R]_ҳ{�g��"=#�+�NW��������#=��� ]�Hu�����T�7��~ɏ���tlk�i����ъI���|���Җ���$/=�����)��)��
��H`�:r�~Р�={m��HYY����:]I	���{�����.��ϲe��E�1�n���F���Ξ��ό���ͣ����
��
��(�������і���z�sbzfs���|��5C/�W��(��,:�X���c��@z�Fzt�g����S�ʦ>�\\8��S���|�Oz���3��	s>�t���:L�~��Ф��2=�� �}�Re�n��q
+�2��n�,��_:t��Oطw���ǎ
�^y�Y_�Q���N]������2VE�����b�ՍǏ�_i{r�'��~Zϰӳl�y��v���
���������X��
�K����V�f[�s�=Cz<#=#
ҳ\�3t�c�o�U+����8u�w֯?{����
�l�0���k 
PR��$o�Y.�
]h}s�F��^�Nۼyg��
jj*{��S��ѣ]�b�X3p`/Y��w���ٳ������|غ�z�͈���S]�h�����l���9$�6�JZ���g~Q�x�
:7���
g�y��}�}KD��X��KJ�#�Ѻ��Gÿ{Ô;��R��H��g�eE���u�x�O>�)�תu����#�f��Y���=��eڼX��"=#��x&3����h�"��|��Q5B)�X/��Z/�TUՍ�G1
�:]I>�9���
kUVⲾ�
٥ٷ�N,���aZ��{F2s޼I'�+;uj'J�����_P7Hu}�9����77������c���.�6n���� *ӳ�"A�5������R1�j��1r�K�H*�b�W}�k��\N{��NϪI��j�9�=z����o����Օ9�L�N]Hπ7�g����э[?().
+#=�X�~�ع
N�*�#�|�AIu���׷�W����Ғ��]=�t+�r�~���{x��
E�[.]�F�[�g��-sv�{��++������O!R]�(��"C�yϙ/ss�{d�P=;fN�|��Ж�,cҖ�,S鱣GD���P�|r��q�gՆ��Xҳ��i����Ϲg�7���Px���Ѯ���ܘ=��3������Ⱥ�z��F��D
X��-����y�����
���Ja)M��,g\�w>"��rg��s�ޜ�@vKԯ;Ju}�O�zn�
+�❌�߽a�y���#��%���Y��A��gnd�=��tW����-,c�nfnXƞ�=���
+o��r

/=�{��eNb�
o�Y�f�����ț]��
+5I�����%�9�\�T�7�s����Yr@g�9i�k+E�,))��t��-Ga�s�e�6;=��r*H�37�y����������=�Kؤg� �g������7�YƟ2a�g}���z��Jr�RƦ���UU7�Kfn�T�A�;���}Un�<�����
{V�\���
f�m[�8�Y������B�ő��&�_�̍��ܐ�R�n"߼g�������|i�����=��ﺚU��/�X�c���o3��6��P{��g�3�3B�������FU�
�9���1�\����v#��J���9K#�q��,�x��D��sύB�A���I8��~�g����j#�Bzt�g�"��99R��$�k#��M�9��@�g at GzF(HW6R��$�k#��M�9��@�g at GzF(HW6R��$�k#��M�9_v��ș�M��^
��P��l�:]I��F�뛄s��K��~
c��ѹ��9S�5)j|��_,�l��� ӕ�R��$��(��� �H�E =�Q�Ċ����
��}G���qIo}9��#�3BA�1[��
ł� �H�=�l�gS������瘍�l*v; 8"=#�
���M�n G�g���c6ҳ��� ��P�s�Fz6�
 
��
+z��HϦb��#�3BA�1[��g__�º�����7��X��# 
��
+z�ْ���S�a�� G�g���c����ƅ׆X��蒌� ���P�s��&�9<Ƥg>
 `*�3BH���X������.����e������ |"=#�g��	d at z~�U���
ӫ��
���
��4����.�)-m��H�	g��
�'�3BAz�a��7�������G����[�~����[
I��8~���P��mp��8=�����7m���g�P�CBzN8�_ >��
+ҳ
��ѧ��>����
�9=�1��m��rۓ�?�x���WL����q��7L�r������X3�붿�g����l��ǎ
�U
����
}�y�{[���t�*��hj�?�x�x���{S�����[�Z߄~���}�����.�lYEqq��_<r�~Р�={m��HYY��fp���P$'=�p{A-�W߸ҳ$3��ř ƞ< ����|��������R1�꬯�RiX&�V�E�ة�J�2%��r"����>�/� ����.=�ꌪ���A��gh�3 S����z��
���
˥7CzN��ҳ���ⶭK����=<���kV�(�%�ʱ��M�Z߸���|�YҖ�
�Igz��m�tl�gh�3 S����zN�+�~��r˥7��
ҳ�D�
�f�����y�P���~K�R{��!%!=/�=�����w�������7=�q}���V�8
NL�ر͆
��˻ʸܫ�i�7��޽CMMe��w��<z�+V�k�%��w���ٳ�:��cN������W�|غ�z�͈���
8~�DzF(<�g��g�0ƞ�]Ps^������l>\}#>3�:s#��g��g}eG�V9��ۍ8����rqQ����W�YqHVUݨ0��W'�KK��0-~t�=#�
�9oޤ��ȕ�:�rSS�:�
:G
�b��ߖ���

�6������y
�z�so�hdz���f_�x`���55��Vm�
���ɀ�o\�9�o
fr�{֓���\Pz�q礷7�}b��m[6��<y#	��W���J}C�m�k��`��B��f!��H�����{
z�8ZŖK��;v�
SE���ٺuK�^?	�X�^߾��z����t
� |"=#�G�DNڸ���� ӳ~�̞��}�=�y�+*���tP
��F��C�c�
iξ����ՕzbIz�k+�}q0	��ۼ��ώ�T
+ql�q�K��
5CC�_���J�;w�U���]
Ԗ��؀��O�g���̍�6���
y�̾�ʋt��[~,�t��K�
��I83���9=��ނ����ʞ�aI��ج��f��'��`�c�
p���PxK����o�Y�Ͼx����
� �W�$�H�a�P����v�f?��я/9�l3sC}kp��w7l�նm�����u�������W�
8~�DzF(
+MϿs��s�L�9�U��싷X)��_ZZ,
D~K�Oc�|]���&��@zC\kpԨ*q�eNL�3�
�A%��Y~o��[��c��=7��]���� |"=#��k)�.�9/�ݺ��9%��@z�ۑ�/ �H�Er�sp�M™AvS��ˀ��O�g���lÀ�o�
�g.�R�q�
O���͙�S��
p���P��mp���`*ҳ#�_ >��
+ҳ
���Lxz�iמCr�G�v��(�>~�DzF(LϦJ�՗3�����Ԛ����� H�3BH�abkbqf0U4�U��. �H�=�l��T�g pDzF(�9f���"=�#�3BA�1�5� 
��
+z�٨��H� ��P�s�F}MEz G�g���c6�k*�3 8"=#�
�Q_S������瘍����
 �H�=�l��T�g pDzF(�9f���JBz����^Xjb7|P��&_aY�
^x>�G�]��)H������|v�H������&!=�P�Ϟk�eY�L^x>�G�.b�*���AzF(�9f�
�=�#F}
����I�3��
�
1���%��a���;�Q�.b縗���AzF(LWk�
�M�1`��LjӕD}m�����-�!�H�~����+�NW�������#@X�`�8"=�AzFj��l�:]I��F��Kz� aт
�����A����t%Q_��o���k/??�Ƿ���O[�����e@����
��4����m
��6�ϰ�K����/����0v�\��ҡ�~���X�ᓏw>�x�-�����iA���9��sbw����������1]��}�����.�lYEqq�\y�H��A�{�
ھ����?���h�NWR2�s��[}G��o����n
�]?䚡�?u����E���s�.�����@����K����l�Cf�9i�k+�d^��^5l䘿?f�(���c��f����z�{��gܕ�Z���IωU�a�=O_��9C�9Q"Nϒ%C�L���
?�����0��Cj�{Ѥ焼��g�
"ڷ߷�~౻���ܵ�
O��Q��Kϩ�9�g4S���W6���]:��y� =C���Ez.��0pœ� [...]
z��������l~d����!=G�s����a�Y.��z
=��+���T^|q��O�
�����
ů�
�%3�ƍ;Ě#.��[_ٳgg�H��ҳ\����ƞ�z�V����q���_�~�z�+
;�ٰaVyyנڐIy}�9�����?��
G�՗�;�g�Si7O��ߴ�F.�q�9r�M\�<`Y..)ɾ��;��������sX,�%��!~��^��[�n��UX^�>x�����F����9���!*��a���Q�g���xH���$�19FNz�	r�-�'3����h��{z�瞑C�̜7o�ĉC�\%�sii��Mmۖ�����g̨Izժ-r���O?�ԩ�����&��rsN�~��t��X����ҳz�$*+����ݻwP�E����1��)R]�h��K^Z�
�m�z�Ϊ�Uc��ҳ�,s:�+�.T~y��9t�F�ob����D���
�
Ff�
+=��O��_����Օ9�g�N]�J�j�3��6?��,���0�s ;'	}��eM�Fz�	����\�q�%�E��s�~���{x��
EH���U

�j���ϋ�\Q1\���t隱c�.\8U�o��c�|��������>)-))=�X�^�.����)ՌT�7�s����fndN|�,�-�YF-H^��
="���/
*�On�1���m�%٨�g�
+K�QÊ6/V_��ӏ�ܟrH2���p?���{n3�	*���(����s����IB���K�~|6�&�<s#s"7O7���=��ܨ����k�/=�e��2'�s�A�{eH�?37Dn�v�`��Pgn��B��
���{�:�q��l��,E���o����^��y��漟�%�H}�D�̍B_r�q�=����*�I�qD7��[����5���������{N��
j�$���A��[zV�Y����E$���f��'�G�g��dJ��ޯ�9�=��-=��,W����=��2U3s#[����;FY�Ē	�u*���VL���Ζc]�Wk��Xv���g�r�F�/9{N�����pm^l�9���Odw���(�@����>���G9�����
��9I�c�og��{����B����ܦ�f)�o
�^��
��ukE��_1,--+�͛��M2�YW�A�;���}Un�BM�z���׉��"dz��s*+�g̨f�.��
�_Kq�s��u�D�S�������|i�7S{u����Bą~]�*uC�̗���*,�v�m��X��!�����Rd��AJ�Ě7_%ߏr��8	='ؿ���IB�����3B����"�.v��~�k
���=7�⯥��ƨQU"CgNt̘o.X�`o�����.=�Qd���z���
%�/u�������LW	��t%Q_��/�9�g
ҳ#ҳ�g���F�ӕD}m����g�o4(�ʱ
<,�{�?}l��߿6��&����{zNu#=#5HW6R��$�k#��5 ='_B�br�C
�S��� ]�Hu�����T�79��x��b��q����
�)`�2UJӕD}
���IHϓg.�R�q�
�W���͙bY�
^x>�G�]��)H������|v�H�X�ݵ�P��;�����Kz뛄�
 	GzF(�9f���t�X������瘍�l*�3 8"=#�
���MEz G�g���c6ҳ�H� ��P�s�Fz6� 
��
+z��HϦ"=�#�3BA�1[r��g__�º�����7����4	��������G�v���]�NSr�+�3BA�1[r�3r%XIH�f��%��79v��]�N�e�+�3BA�1[���i��kI,�tI�y�g�j�R��7�����a��˹��iR�~EzF(�9f#=���l^M]"={Cz���l��H�s̞wˬ֠���Fz6��.���!={Fz�AzF��9�ϻ�>Ř���/�ϟ#*�W
9��#�;Z1i����/\^SZ��[3�����e���
��3ҳ
�3"`z^��g0mJ��wfH�A<��S��}{Ǐ�߷߷�?�TQQ��GȐ��=��%?��ұ��#ǚ��
;zD_Y�p��u5���>}����������[zN�>���/���{��s�]'v�k/??�Ƿ���t�:Kl�O��n<~�k�ӂ=�݈l׹<�&m�{0fHψ��
���S�{�f���7�
�����sH�Iz^:{���?3��~zY]�g���:��>��#G����O�%0=g�:�*�W

6R<{���"���}}��n��Z��#��99{��t#=�#={x�G��*�kYZ��-��Y�@k�m�mOn����.E��0e�
��a�aW]���?�-�?��g�o�-r|E?�xo����N]Յ퓏w�G�~Z�}����1�<-��O�rB�e<5���Ğ��OR����Y�t�<~ղ<K�����F��7(tx���̽'���\�g{�gO!ӳ\Va���e�{>|�X
.R�
��Q����K�a���Z������什�8"~��O��O.i&����U��I��e}���'���sz��S7�3�o��g��Ӗ�g���
�[E�x�W/�{�X��gә/ߘ�|oz��O�6���ڡ�v�n�hs<r�L˞Q��ް
A9wx,�yƝ��޸V6X��k���.��f&�;�Ӿ�|�g�{/!c���!=#$iL�G��T�gϡ��ijjR�ee%����&ҳ˧�'�Vq�Im[����O���kV��}*�gޑ�M�Z�X~������� ���e�Az�7�g��
���-2
 [...]
��i�b�3ϱ��җ�KJ�/�G���a��L����>QyE�s{]�>NiպMΗi�3�G�{C?������n�^x37��Yp�k+-��w`�w]P37��
��vN���sVox�������C�z�sbEpf�?��v�K���ұm}���e�3��;����~�=T�!=�ߒ�Ԟ?�4>=����77������c���.ظ���⢂�5�-I�R�\i!/��{
�^}�,�J
�CY��(��(7�KA}k0�}b�F���엩g8��������Օ9w��iO�T�Nݓ��׾����!=�w�y��` {/!c���!=#$�
q���#�E�y� =Cǘ�ݤa�s�g}��-�oz$�̍�ƞ�?~��e,�ӳ$2����9�������
~�={�����W�L�{S���0��-3��2/b�X>�}���s��$gT/-�eZ"��V6{C_��ӏ���r�6�g����u>Ǟ}
��vN��xH�rY�Ў�Y�׍w��#.Y��b߾����.���XnhhT��С�r���/��Ql_SS [...]
+�IZ�{.(=��m[6��<y�Y�g���J?�Y�c�҆���ڝ׻o��1K�
�
�� !37��|�z
�w
Y\�
A�T%�y�:5�)�k�B�・}���=�=%ރ1��ɐ�7�VmȄ4��7Z��Kϕ��3fT�
�j��p���ڤ���b|۶-S��i[d_�}��
,�Y����UU7��}0��Ϟ���%2��Cz�`�K��-3|�c������ӳ<Y��,g�y��`3I�}��`�Q��%?���ߌV���Ryg 9^�]t�0a�[���s�37�'ٓw�_�eϨ�c�7�M޵��~�y�u�{�}��ī��vsϵ��`�XW��K���o�dH����Ѧ?:�犊�"��5�ҭ{��_�b�رs.�:q��y��8wϞ�-����
�9(��A�f��s�+=;~�_�}��.�������Etxi���O��g�"*��Y��Z��2�X^�ej��l�Z�s��5���O"W-��{i�u�Ǟ�콄
��vN��x���ɚ��r�F��d
��g�1�{�K��w� [...]
.]�f�ع��gd�c�r��m�o
���B���b�)��l^M]"={Cz���l��H����6=7K��yԨ*mE�---Av޼Ic�|S%ڷ��@�cΗ������D�͞�!ӳ
�r�H�6bKKD
�yɤ砘z�'=�WS}����
�X�s�}��ǖ���k�%v���s��
��毥d�s���H���5�=4�g�~6�ܐ1=sbƳ�
�aÆYݺ��q7��vS����D�=�H�ƞS��g�gD*�k0J��L��dK��q�"=:�_6gJ�O��ʚ��ȥ|��l�3��LϐHψ��
�ɔ����ȥ�o��-���d�9��u�4%g�"=#�g{�g$� G�g���l��d�� ��P��
FzF�PY pDzF(�9fϻ��;aA��`**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨����g__��:���@���o�q�@lH�E =��obQ_{�o������ ��v�]q7@lH�E =��obQ_G)�o��y��*Q�ߙIm}��P��
���`ڔ�>�"��o��%]%
+��Q��
 �g���l��,�����(���3BAz�Az�HW	Dzv����� =� =K���P���F����Ŗ����ȑ�A�*��9�}�#ee%��Ó���� =�h���ݿ��}v�ʠ�Urr���t��������*��<zи+����
�T�g�����z�{���r��$#=������x�O�3��l��y�9�w�8�����Z�V���[z�
]:��3t4�-��D/���
^���zN�+�~��r˥7���,��M���v�
w��{|�晞E�
"=�

v�"={ +�t����{���
����:���H&���ު�lhh�:�;�׿��^�Jǎm6l�U^�5�(��/�@D����k3�!=�e=C�L���~�uC�]<��5k^k�z���^x��e���l�˥�-�6��1"��ǎ�-/��e=�DQQQ�ˬ|��q�<��	7O�v�m�o��w�?�w;U<NSS�e�z��<��/�;��E��o�1�yڸ!.���k�
S������3!�=����nܸC�
1�e�*���|�'��JV�?q �Ȅ��
:Z^~�e�����w�֋�WUݸ{�A�����R]_ ��'=�=!����
=��7Z�p��KJJ/XުUk��E&��k+<�������g��

:`Y��Zn<��>��<5�,��}��*F�?�O,�
�S�~j��ݼ:cҳO��J:�-
6=��
x`���55��Vm�
��ٞT�
de�	6��7m�P_#����Ȅ��W�X?v�܅
�N�8$��
QϞ���!���s08�Z��X`����l��AIq���g��o��Z��8�k5�d2���k�������-�w˻VQ[=�>sCEj��ꟃ�y�zv9��Ș��y���n
�]?��U��Ǟ
�U�g?/BsE�p��}6CI���ϼ�L�ώ�Hϲj�N�{���z�F��D,w�Ԏ�
 p��`p>�C���9�������
��ܰ���Җ"47����;g��qC���D�qy��=fy������&=�_T��3��=��|�Ћ2�|k��\��Ԥ��س���{
Q�=������ 
�s08���ҳ��r���,�oŏo����9��z�_~}j��-CȊ���س
ҳ����R��s�Z�t�� �A�T�
<��w�;��՛��3'�y����D��'	�ʲ�����}37 �!��
�
^=�
��O����on�s��?=;vT~�O};�~��>aZ%c�����=����~�V��Ȳ2��\h�+ŏD�.--2o�$�}�'�g����A��

5�J4sbfΘ1�\����v#�����{�>x���D�U��
����̉�����1}�Y�熺uF&��.u?���jV�ܮ���O��)�=7H�
�t��rU�n��.��99R]_ �7=���߯I���24���~�琐�%�U��
��� �*=��f��z�&�=!If��罐)�|�ߢU~�:jT�ƍ;d���]��ݥ(�@��ݺ���6���毜O�@zN,ҳ�T�
HώR]_ �p��ԣs����
��wz.�ںuK���R,����/ѻ���\�o_����r>
�9�H�6R}6 =;Ju}"��g��W�X��z�V�����/����
�j����s�aì_��uo7�|�sb��m��lxz�iמC�/SR*���(�={���j|� ���[ӓO�t�y����G��-[��s�ޜ7�7��<����˽��5������'V���T)�o��y��%[j?������
��/�3%�V �M����w��~α�̉��#G><g΍ϬY3�������ƞ�=��Ah�sl��i���o ��&P�����Y  $!�����a������@޺U��7�P_�[��{�o���ohhT�{��+��
+��T�g p��5�}�
�^N�����sCm�=7 7H?�"=����� =�Y!����
 �H�� =�Y!����
 �H�� =�Y!����
 �H�� =�Y!����
 ��I�6R}P�3�	ҏ�H� �(���x�������(��T�g puzv�YH>�SS����@�8NM���<�����.�e��>�M�B_����Y�ؠd�
�- 9�mdH� 
+�qj�$�gǯ�$���.�j|��Ջ
J���oA���f�g �85Ur��i�Bm��?�$�'P&��jV/6(9wZ���|�62�g �85�ٽf(�Ջ
+�9<����@�8NMEzv�Y�f�b�Bz�9�gP�@�S��:��Y� =�׬e�z�A!=���
�3(T ǩ�_�I��N�2=�_�#��.
�Z~j��?v�bҨ��?_�������m2�
�z��hj
+�eJ�^�3��Z<�X��^5l�B_��v"�N�9=�t��o�}��o#CzP� ���E=�iSb
�3Czv�,KgO���g�]���у�
Mz�&i������G����[�~�����K*����7=�w��o�9x�g �H�6H�.�E��1�<-Z��:�ϵI��bL�ɔ��4��p�{F��HF�f.&�7ɿ1~P�qI�6H�.�嚡U��I�T����e�����n�,��_:T�
;�
=��򌳾��v�)��>��e��0o�O��n<~\�Jۓ�?�xe��z���e�����C���&�T-\ާ�7�B��X^�hՎ���7ےNr�Pӳ^ ��;����ߗ��m��㝢��.^Ȱ����Ο���Z��˦�ݢ�S����/߾
�t�ٲ�n������~��
�;l���E�s��=��S$#����{����r�!=� =;�7�g��
��#��۴*iYRl@��PqQߴ�F.�q�9j������⒒�K��l��
S�_�ss���N�".�f���BeZ�n��=�� d���t��g\�L�/�2�*KV1��O�K�L2����U֪�x�
;u��N ���l@�$�����[��S<��k[*r���5e4�0���zf��ؽ�%����n
+=3�74�TdY�9=��}�����.�lYEqq�\y�H��A�{�
ھ�����B��ϣ��
����77������c���.�6n����CFFq�Wh�浗����[Է��+�.T�|�E��
�Ѿ��Os9�!�;=�&ɖ�4��
=����훭/�yue�=�'�ҳ�`U8�G^7��;�Μ��S�$��
�~���8�Ϊ��T=����Hυ!=���
6ҳ�+o�w��^�
pr�2���@Q��E���3_���g�ȸ;d�ks��'�r|Ѳ�e����G�����ҡb���
�JϪ
��54h�l}��O?�s��a�(�=��'GI�)0���{'	j�s��-��9x��g�/����%O?>��\�sHH�a#=�8a�G���Yh���M��"=G�\2=�Y*萑����0��}�aE%�H�>(+բ���=����]9ۣ�1���IN��g%�o
fώUS�
J�9Ǿ�qu�@�s��-��i{��֠�琐���
����\nۃ�Q�\U�
v�c��y��GW�X_SSy���*�
:tTn �o/��Q���`��^2oܸC�1����={v�q��
�s�7T��Yrs�̸sҚ�V�+tII��?�w�
�ʾN[Ʋ���[~���
}^�}{,/AeA�f��l?6i�z%{{��'�ܶe�j����qr6 �NHz�~�E�?�yϪ�om�o#CzR�n��3 ='y�f�ez�Cdhq�iۺ�Oz�瞑C�̜7o�ĉC�+�sii�
�ڶ-SQ���ϘQ-��U[����*~کS;�[MMM��e�s�
+����v
+򂭆��Mi�Kn?x�ȗ�/q?!��س8�լR7%�|�,���ͷ��7�r�(ǞkV��'6K�u�� �?N�/���I���X�[��S���w&�Ihz~���|���짾i��b#���
�f���������}X�Ш��f�E��񽢢��s�~���{x��
��n����j�Y$憆F�~���Eh��.EX�t�رs.�*���1c�Iz�Kr{A����AI�ͭS!���R�?IϹ�Q�E�KǶ7�
$3t�{���xGz[�O���{��"7O�~���:���\WW��3�"_z�#�r�F��t5=p`�
��\�sZ*��_rJE�$=�~F�7����?�F�n'�e��i��"Zn���r��M���K��lnPo�,)��x��{�d�?=��{��
>{'�9Q�O*?\�q�$�*�W:��7���G:�=�g�==��,W�Lϝ:����f��'�ȱ��r�L����;��g
��=�sB*��?}�A\����>����_���Iz��������_v��O:�E�V���_��+�6� �y��|7�ݶ��&�j���^���d��WO��r������m���X��ٰ���n��a��V>��7P˲V�k��+�r����+t��7��
��W�]�O�f)�{n�
�����n�0�[����Y$c����b�r޼I#F\¼g]r�sZ�
��JfzN����T#=[]y�<KnVDn��{��+?5�O��]�ݠ�7	Ͼ��
%���s~�4�S����
��ܿ='Ϸy���>ӳa�7������.��%��Z�C��{�L�9��7n�!b��O�-h����)	�y��%[j?������~ٜ)��5�P�/��
+AI��M/������qӶ���'3��N��}v�]{������V7-+-��7	�wCo��N<��a#]ޠ^��㗅3���=���
۽>�_�
v�o��*BsS��~��'�x�]?��ܥ�9��#=��0��BP��rd�oɹo#���,��A%r�q�/pA������V���[N-|p4_�
GI
��{��	v�9��ڽ>�_�
�6��9���;&L���sf<���j�8�9�H� `����W��,�41�&r�$<�
���f�K��
�g�{����9��ۼ��?�{6`���|A{��}+��)���,��$='
� ̖��\�Ш��,zSut��~��7�>��s����{����r�z����w��|;'�{n�}�����=��r��F�|@zN�3 �-��9[���j�����{�x���:���T�g 0��
�s�H�!IZz���̮=�2�^H;?O�x���Gr�� �X�g/�^���y��(�OzVrN>�
+�
 
�,=�'��
�H�AI�ɧYa���Ԥg��ͧ���@���I{gBz�
v; 8JMzR*�w&��76�ܦ4�_�w)����gS������k�\�����ߚ��&�����#
`�Z���"��3����	�����&+���D�a֠�h� :��G�fȬ� ����DŽ����:t�~�{Ow����EuN�v���s?�w} 
 }��=eU�N�s_7�c��ٯ� �)�g < �8N;  �{�����{�
[������sޔ�
�)�|  0�
��=�!�C�bq~���  `
+�  {�C��"px��@�  ���� �g=`�bA�  �����M
ش�
�p�'��S�H�s��m[5���!�����������t �_�= /���������K|����=�VH���[o��^N�9��F�G���
�̱u5?�+,	�E��3J� ~�
��<�Zᦏ�-���zG�[�P\�g�)�Y ^�Z4�\[�Ó#��J�yΫk���[��Yzivo�-�MIE�'�Q`� �6�g ��ȱ�ç�����/Np1
�+��z��#�N���xpݞm�,-�g  � ��Z�Ύ��d�Y ~�����&�#r͞�?��G���3�WV
$˭�&���V[�c0s̥�I�#��f�t���eب�GI��yeͲ��Α��u�={=�瞫�.'�K��,_nj"�N|C��閰
�,-�g  � �9P����5da�9YR<��=o\:��l��_�B
:s~�""�|���,� �<����/�;-��{��=�
S3nޢ%���̘�%��
ZHM^�ݩ�j��{��;w~�������ך7O0mw �3  �
�>=��O�>��P
z�{�,T=.������/�=1�]��\R�1f�������R�+_�xQϞ��6M`G��){>]}6�%S�
Pݜ�g �_�=�v�.�Z�;��@�z��޲{Ǟ
+�����ǿ��[R�H9�}
��s�o��Om�8{f��Y�j6(
�grQ�OZ�,�1<�wh[+7`�  �=`/R�z+j�ZWzV��\���
��QO
��=�պ�~gUe9-��l ��3]�
ڎ��g�U�/\��������ն��$%�ڷoI�n7����_EG��ys0>>.�`(�g  � {�m�[!��.�3�f�(ʞi�3oҬ�9,{^0;�l��U��*
 ��x�]{�����"ԞϜi��mƐ!=�'&�:��ډO��>q�t
[g���
6���/*:D������� �g �E���
+�+=ß>>H��y3E�u4Ӭ
sú=����31���m�=8�i{V�~9P]wVj�[�|>a��֭{z�����
>�|�m�I�ҥ�iG�rP�3  �
����mE��+�Vn(����Lm����9����D�G��M���ې���&��� �pڞ�����R�3��;س��=�,�q �L۩
���y��R���$4� �=�V*�@�<z{�޲�E���Ln�|��M{��
+
j�T���ߴ`�&�Nɯ�U�d#yy�D��	��q���uܱg�>by���!<d�z89��ر�D�������֬ٹoߒ�
1� �`�b@
+�G�|l�~�,!�� �g1�?z��me�‚C�'܎�R�'n^���NaϦ�� x՞e���)�#,{��y�3p(���}���r��j#�=���MAo �ўOW�eS�2`� �˞�z#��}`o	]�ҵ;����:�3
ux��Y/o�N�1lt���Þ�)�gS�� l���9�۶j>3cP�
)�����
d#{�3ʪ=�1�>�ٯ�g���
�X�^{�Sv�a����9�M�g��Y;yIRR�}��t�v3?%���a�@��+7,���%�a��^Y���ߟQ�v��~/��JI: @
,��ƥ�"����ێ
;�~��9?_m�� �ĉI{�N7�v�ӹ�O�C�/^\H'�**:�f��2
�3�#��i����Y�9
�g��\Y�?  OcɞB�
b�Yo*Z��g���t�WQ�NQ`�@���y�����mD���1�f/�3p(o�|!GI��{b�= �)���}�"�����od?6
�g
O����Lm����9����D�G��M���ې���&��䞁�s��3i?z�
��l�
  �8Q�L�y�
�Z�Q���{��T���
V�qc)��5�x`�@��
<�  L�מT��y3m�Þ���M��!�Ԟ�
ϟ�i��M��4�_���F��2�vG��{
�
  ��hϛ>:��r�j�g���;6���r��9=�ߚ5;��[ұc"�� �{
�
  �xu�Aـ==`��C�� �س`�@�挀=`�  `
+�Y
�g�����#j�؏_�= �)�g1��AL!�g�{�
[�
+ٔ���sޔ�܎��g  0�
{�+�g#����-P��9�� ���Y�o��"�;q ��{��WRo}1%�={��
+

+>\<�
+ v�=[i	 $�l
�s�{��w�+����+�1 v{ �
��:��p�"� �Ƅ
�+�����.��g @����{w/^P�3 1
� 6���)��s_7U����OV����O\j���:z���݋W�
@�{ �M���Ğg>>�whس<�ޞ�763�������$h�:�|�̇}��I�aR`� ��� a�=�ޡݵg+6
{�c/�����!��귰�Ȁ=��g @��?ҙ��}�����C�zu�bf��_��"�#G�޼9X]]߭ی!Cz��
.1�=s�����m���d������� 
�}VIV#+?��}��_C��:d���V��-���fm���$>>� rس�^6.�􋜷2��M
7�wh׋`�Z`� ��� a�R�BhӲY�c{�?ӂ��
�
�������x"��[7g��Mܗ�ߩ�M*{��%n������u!��t���H���{��
���9��B�@<��V��_e�A��g�МW�����V����>�
納]n�����]�ͫ�ޞ=mSƣ��f��t�"yI붉��u��6�홆tw�O��VWUV���u�={=@Bƣ:U����a��9䙁=1�g @�8�{��

� ^K[���U�[�|>a��֭{z����u�|����ګ֡��Gb
�Yo/��٦��F�У��S��7r�W/'�y`o	]�ҵ;�^i?'jx��V�
���Ŭ���W#
��5�%��%�J
�g�$�z�K�u��7$�-[��Gu�W�a��LS{f,
������ a�|�3o���b
�ܳAθ�
z�L_[_�H�ȑ��rrr�:|�•��{֒���t�ِ�"ݪEB��x+�L�$m)�����ӂ9��F���l\ǔ��bȄ+�ƾ��-�
��홅D#g�gm<�����F���Kwm
yf��;���
����S�:C��s�1+�̸8��ƍ�&�.
1g�h�g�b��6{j�Eb���=k�SV���ߎW��	���̌A���p*7���4	�ZM��V�3��Ɔs�,�

J��&&�e�,m<*{f�k�� [...]
+1�ѮCVPEBt� rس
�f�u��5oN�#E	��;���L̺;��ae�T��g���I_�+7����=2
��B���R���=3P�
@�x���7�3D��Ir��SK��s
j�܈����_���g��xcnPMW�V<A_�f�}K:vLĘ¡��{3�J/�`vfi�6b�		�`�g���,��#U�[�=��Z
+�d�_�l
��������
�
@X��}
��f��Y������7��L2�J6܄^�3�p���a�?,,�^
}��-)b�f(�>��Q�n�Ƈm0�;3�=1�g�{�{��9\$�LU�ak��@�
 �9*����0�g`�g����E�^��3 1
�9*bО�Y�@O-9�g����E���{ f�=G�ٴ=2�SK�
��o�r3Þ�#�Lݶ�> 
y�9����+��tC!g�3���L�t�N��rT�8l������Ϡ伲fY�st���@ډUU�h0����D<񬞭:\�{�)��
S
�<!dSr��>q��,����<��Bڳ_A�
 E^{V���Q�M�`8L:�O0'��S����2��nZYq��v���d�y����٠���U��h�y{��f��J��x�Y���L�} !'�|����4 1�,928����>Mi?y(�p�Ї@ �����7/+J>��O媄�ݔ����TVm0b(�^;T�6����A5�lH" [...]
�y�x�Y���=��v+���i�X~W  L�ў�}�
+>�2�WX�g����z��Ҥ��ܳ^��I�p'��ێ�L?0hK�aϾ��Wpe ����zݳJ���,ۿ{U���C����nj=���X��l�K���f�
��O<�w�{���+��  `���Y�~�
6��*�ˬ�g�B�nZ[��ܳjbU�17T��F?��ijz'��璢�i�����i�X~W  L�מ��s���
g�����܀=�8�_��  S�gE�a�a�{�
8�_��  S`ϖh���-
V
+]��{���+��  `
+�ٷ���}���
+�,  ��{� {v ��+��  `�����)O�!��Ua��
+p,��+
  �Hm��y���Þ�=�_��  S`��:�����٦��
۵�����N�s���
+�,  �{��?i��ok>]���Mn��=�_��  S`�@0��X at lϐ��'���)�1��)�
����/��� `+�g �s, �g����n$��xe�}Y%��  [�=���c;�y�Sc�lMZ��ݢHo]��y���@�@�'�Q���  [�=���c�s����  {��=����=��3  �
{�`� {��g  ��a��?9v�,
����
�~֣K�@|���+^�vh@<�
u��m[5W5ž�!�+K������]�
�=�>]׭ی!Czn�
������Ν0`��ߟ9z����ڠ�(�{ ���v�.�Z�1'��c�����{��ƽLn	�whس<Dpe�[36�z���x��= �
+�clṕ���;$��t}P��> ➁���3�аgy�̞�OZ�\���
Z�=��
 ��3Ƒc'�O�c?"��chϰq�p_�>g=[f=l�
+�̞�k~
5~p��}/+�KJw���+��uo���M�������@3��ã�g=�M�Ț�
ye񪸸+*v���.^�H�3
�D�
���Ɔ�f<^��a��!�Io�ڽ����v
h$!��!{�ʞ�>;�?��~d=�ה��yܸ׷l���d���wc�{�L]��ymݺ����п����W���#{S��o��=�e�3  J`�@$Y��ٱ�\A���ОAġ[��b0V�9!!����E��Ԥ���,�6w�,j�;v~@��v��V�;S�Z�zMW�y��Q���n����\A6��_J��6i`�Sn58�s�
 >�%
+{�3g���
��2'O
��.��@ ~߾%�[7g��xq���I
�
��ә�69�
yUSS��
{ D ������x�7�g�s_�p_������������r��ŋ���xMm��������<tqIo�D�7�q��CG�d�m
'�g>9��m�M^�iz[�sXW���K|ɖr-��f�J��������
zon����,�L��
K�}����4�#�K7�N��u�&�������
 ��3L֢w�[)��&ʺg���g+u�z�
4#���Ϧ��
����^$vK�W�>�lj�|��Z�6���o�9��g����h����+:�z�L3ʴHC�Z�������P`�  q���u��Ɇ�{ݎ�
+#�7�!�� ��ƞU�
*֞4����e��S�ӳ��\����vN�U�*��v�ڳ�%�M�=�
�M>�X�g�#�JtO
&'��?��ɓ��f���3�`j�������= � �
����Iޟ�%����]��ꔨ��UO��y��zu��ϛV\RD<;!>���
�b��ش���g���A�pu��17ƍ{�㏏�۷�c�DS{&fL1
�Ic^^�ȑ�Q�
 ��3����`f��a��z���'�q~�A{V��)�*̏�ѩcg���17�6�{�#z{޿��h����-z,��
�� ��3��3�f� س?�= ��gy�j��:]�3��9`�� �
 pڞ�*���S�3��o�/�`�m�h:xs���� �=�?��3��o��I`���7�=  b`�b�M
+{V�Þc��j��
��ߟ!���o�^�B�� �س`�b�=K�؞a�‚C�'�lJrR�'n^��vF������,�u �
+�Y
1h����c++��>�漺�l]�#�t��Ϊ��v�7�+,���<�9��բ�G&fe�z�b�g��h<~ř+�� �i<c�� ����7�j��v��fk1h�o����zy��{K�B��݉=�'$������j� ?� �<����/�;-��;lt��0`ϒ��+�g  0�F{~�`W�{o�s_7��,9��3�Q���+��9�������L��g��
�,9��{  Sl���9���U{��� ��b�Y,�g%��
�=3{f�iس�����3  �b�=�e��B�yܸ׷l���d���w�N�J�h����%d���{�3��7}k
�3����5��ӑ{�`?~�
  �X�gQ{���+���9�^���9y�`�w�=���-iݺ9S�ŋ
,�DL���]������mȫ�����eس�
fg�o#r��f�y6{i��Cy{�
9J�>@ݳ�����3  ��=�mռU�+V�=��u�ᇳC�ޛ���r}��=c�p�k_��}"�����ƍ�&�nݺ���?����=G?��g�~��s×�~�
+�  Lq�r�x��1}ɿaSW(Q�s}�yE��BϞiF�i(W�9X��

+��z0�3��ǯ�� ���y3YP�~j09�����N��_4slŞ�SKG��uG�Y�3��ǯ�� ��9k�;�wtb�L����ٷoIǎ���L̘>bēƼ�̑#{��Y�3��ǯ�� �OΖ����Ӈ-Z�XX�s��3��ǯ�`�y�}�a�^[ň=�My�o�P��S+
+�ISp�D�$ۍg�Yr|fϒ���W��
1�v�J_o�Y�^�U7���%�V�72�7�8o
�g1�ƞ�,,8Ty��(���>q��,�� ���g�
��+�g׿3%�Wd^	>\b�`E��%*Λ@����,��3 V��gX��Q���k�(��g�ĔP������ �go{1�9b`Ϧ{�[ĔP������ �eϦ����r��6���
Ҿ# �s���M����)������bŞ-��zўQ�
b�s����^>/�
��CRk�omu
:Ij]͏�
+K�f���'�|ؗ��D
&%��}������B0'w���p�(�8� �&�؞=zެ�#���{���@f"�
=r�d�
)�vس$8i��N�E�[�Ӧ��;4�92d�����
٧W��s^]�!��ܵg�7������
��D���k�{ʪf>>�ѡ?��aϒ�=��YO��y�v�{mس�YN�gـ=;� ��ƞ7}t�,���&ޡaϒ�=��Oo
+s�Q��)fJ�Y++��>�RϠ���pN����;�*��%߼�����&��䣇�f��t�"yI붉��u��6�홆tw�O��VWUV���u�={=@Bƣ:U����a��$䙱՞�
D"�����ٿ����N����][�#9�a��=�%]9�5�r�������I\�
r��1�r�D`Ϫ�6���_�?������,�~ V��33���
�+�
;�~dml��5?�?8������%��H�ڕ�����U|uds�vҷ�u

�>�l����@�
�o�+�W��ő���eO͘p�j����$����R{�W[W]y�+�;�ڶI�_S�9�V���]�W
;�ܮ�G�
��	i�NW�
�+�ЭZ$4K�7PZJ���-�
]�vg��u������[xC�Y��L̚���#���3q�]=�e*Ӣe������8l�N�ajό�Ì�`U9Tzɂ9�ߝ��dDȨ���ռEKr�I�
�L+�vB��M"$���y���	{�b�  +пPQ�ޑR]wť��9!!@l�E��Ԥ��,�6w�,��;v~@��v��V�;S�Z�zMW�y��Q���
�o��
w�>5��'��]��o��Gd��`aτ=eU{���w5|��`ߟ���9?_1P��
��CӖ���/�;�=eEVزq
{�g.�Mh�پ�;�b�ke%j{f!�ș�h����}�o
6�\�k[�3����.
����'Y4-g�����D�=;޼už��/ �
+�r�m[5�<�/�7l�
+�B�ŋ����Vo��^���,�C��f�z����@��Б/�j��...�y9}acc	���d�S��,
����a�
�д�Y����R+ʿ7+W�Y��E�j�t�J��~c�9���g�P��61�-{f1h�Q�	K
��/��~e�3CӊN�=S�YRZ3���NH\�ID�=;|޼už��/ �
+��=3o&
�Yݳ�=�.�Hs�?��g/|8c诟{�3���o�Pm���g)%��3����М4[NLL�=G
�gޛ)a=xG����uwj/>�����^4��|�6����'C�����Z1'Un���S���XVR
��܎q�n�$B�������,�~ V�ƞw����L�؞���N
N�^�r��߿�9�V��
U
+� ���wߝb[�Vn������5u�
�
��ٙ����;tBB�hij�Ki�K�>�J�iň~�M��w�r��+5�Gu�
�֫+5�M�=�KV����m���#����	��7�{v��y���=K�_ �"�
�SV��=��fJ����(�Ӂ�e
|����g�ZB7�nTn�A��!�S�o�,�W�J��?h��

�,�
+�L����A	�k§�GU�����c!ό��璢xcSy�u
���N��\�I��gWΛ��Oس� X��
�Y�Z�LD�Wa~�
*�tͰ��`C|��5ȯ��7�84��CFl����AF�s�>޳EDUn��(d��xt�noݟ���}���a�^�w�'F
�9o�C+��	�p�hϳ<'��
�
�ԭ���qس)����+��g�=��oJ�6���R�oDO�7I��[�=G
���݂{��J�Sx0�z��ܞ���oW��ǼržC�ڳ�w�G�rKI�7�id~S��[�=�
��m�l��YOž�B������Y8rvt�"�=��s��ž���
�g!H�{�س)S
�<�b �Ii��yy����E{���� 
+={�=_�_�s4����,�X{;�=��
+��~�Pp�D�$ۍ��|sRk����
޻u���a|c�2�d�,��z;q����  L�ڞ�[�P����{F���$� �Y�`���=�|lH��zȞ�$�� �)
�g�"�C�,v�gg�=?�+
  �Hm�-�'44^�8�ʡ��i�LBt:�;���ԉo��5��,l8�8l�������弲fY�st��\�w���LmuUekW�N�xBNw�=d�Y�T���Ջ�g?�d�](׏��¶r�ڳp`� \pe �I�9-c���z�}>s���:��q���w:�z0'��S� 
���xd�jf�ʊCL��.'��[�T�*I�a�}���]G��k���p`o	
F{P4f~�.]��� ]�OH0
�R�=��$3�V�N4�
�ʩ�ޞ��i:i*
�
)=KƟ7
��AlB�c�\Y  0ER{>P����U���O
r����_2w��a�ӕ���e�:j9|&�M�N�E�S��b<_</mD
�U�C������?�S����(���j��{��IVe|�.��j�V�d�<[�����}6{)9">�NϘ��
���3\Y  0ER{��Ġ���%�/�pЬ!�;��3p(Yn���ؑ�
6������!��G�L����FW�iT������쳓
ҞY�ڰ�gZCr��T���l|�`�@8��  `��Y�yAUZ�'d�*�h�O�j��2͏���N�r�Kf��=k���I��=��ɐa��U��g��L�0h���=�3p
\Y  0Ej{~ c��?޳�R,��Y����m�0�⽊�T�-*��ei;}`N+�k�dO�U�		�#�
��pH̪�h��2�Ξ�g�dm�3/�ڰ��=�MLz��ٹ
��� ���,  �"�=G��Se����� ]�+6���"�5?ZO��ӵ�����`0
�*���l�N�}v�ٮU�`��
+�J���������
\W  L�=;�3㋉�s�=;p���E����Z~1�7�g�.��  `
+���g�){v�s�{�lغW��b�zΛ�P�/�= �)�gK�.~V_B �X�g����/��1�s���B��Þ �سo�={س�[��Q�M��ݢ�� �f<`� ��3�
�s���� {  �ڞ�,,8Ty•]�������g��3,�y��c	�9v�= �Hm� x��?�T�ilj��Ԧ��7��vL?AE�YN`�  � �g d����ǿ��t}�֎7�
K"��
;�zG��
�,�3  8 � �=?�Zឲ���~t���vس`�  � �g d�����d�
�аg!�f�>
�;�q� ��
��xžgf
��;vW
9v���
�؞�k~
5~p��}/+�KJw���+��uo���M�������@3��ã�g=�M�Ț�
ye񪸸8�|���.^
<�IdM�8���x�W��r����]���������W,
�j�za�0F>�ȑ��t��|鷿�/���� ��Y��g�c��  O {@F<aϢH�#��37�p��='$���hђ*)1ԝ���.�E�r���r�.��
+ugjU�T���9/�<j��z�KLL"����D4����,ן���L���T�~��qUH�=j�&�L�9�]�ͯ�z�,�hޒ��.)�t_�Sn58�rڳ��R��< <
� �=G�{n۪��1}ɿaSW(r�D=/^��RL*�,]\Rě���+6�q��CG�d�m��n�~
�o
#..���wߝ
+�Gޘ���1?6v"K��
�v_����
@�{@"T����Kda���t�Y���/�%�O}l�ۡ]G�u�̛ɂb�Yz�4#���Ϧ��
����^$�J�u��+T[ ���_JI�{�[`k�3i?��ɐ{��B�Y/Y΀=;���
�D�^���S5��ɒ���h�yGi9�͔���pyYp������+������Sn�M��[%�ܳi��={
�3 1� �8�R�I�OW��?\95��.qϰ��*�{
+�͔��=ާ}V��Gi�t�u��-��12{��
���uўC��
{ ��3 rQ������O����d��\�'$�5h`�ʵB
^��0؈��17�m�$���B�QH�Y�/\��#yKb����3Sf�� ���
�t
���
���EO�k�܍GKl��͛.
O�}�k�ڑ�e���#��"j��g b
�3 ұcwy֢w��C�}�r��� ��o{5�w�[E���jӐ�S3g��C��8!�U��k��cG�H�vW�  <
� �ŋo}���Wg�U�h-	��g޴5�`�i�Te�ѐҾ��=�1�w�nw��d�*���M�c�3 1� 9r�$�O���ݎ%��g����)��s�o�0�H��n��f�Y���|���TL��=���O�{�lغ��(�0b@�ySďvg�=!�bu!G���Ⱦ!�y{�8��i��g b
�3 ���x��3LYXp�򄨭�2)�7/�r~�!G�b�Q��3 @8�g �C�a��
w�x���#�
�Nȑ���s�CzS3�5ԫ{�= ,{@<�g A��D=�������A�%%��
{ X�{��$T86՘�{@��à�g b
�Y��P�?
+����� ��5{F
+|
� �= �������0`� (�� >�,
�{@1��;����|�^�= 1
�Y�g�˞�763�VV
$�}�yu�ٺ�'G��r��U���o^WXR�uy0s̥�#	<21+k�KV�
{�b<����٭q� 2 {�0²����_�<w]ၽ%t�K��Ğ�V�o�t�m��?�Gk��R����̝��
6:�t˰g 3��  
�^{>r�����S�4�|����ӏ��2[�aπ�=�e�˽�~���ڸ�xj�Ī{�z �0`�@fp <������*}�z����2�3?w��mž#��
�=3{f�i۳���w�G��= <��L��C��B	s������]�e��wz����y�*�:�����Jg�bs�*�٧�f�T�5E�l
9���]�W
;�ܮ��J�3`D�� �1?21k�/��Z��������=� �Q,ٳ@�C�j���c�		��5�-Z�d3��,�6w�,j�;v~@��v��V�;S�Z�zMW�y�����f�g����$��t���s�l�Sn5��
a��ٙ��ۈ
��-�9���}��/�()���u�2|%�3��`�  ��=+מ�+�L$���
*��B����%EԌG
��v�������#_2�f[�+7�R�����Ns����^
CȘ̞I���_�{�
سp��`�  ��\���}�f>>h֫����9hF���Mٳ>�1��ϽHė���7W��@������v{�/d+��A�`��p�=
G�
��]䡚xU���"mI���'\��'��!{��L�W�y�4�g����S�ӳ��\����vN�U�Bf��䞁c����,
�{$�w��j�����Euk��`yb��e�F��v{~��b��!����@��cO�y��̌�g
��a� `�z
9v2��m���s�t@;:���Z�{������&S�n^�<\Bv,~=X�<p��D��Գ�سr��y��+�d3?�:Cь�AG�{~޴⒢�m���KJ�s�
"@��TB{~��B�z��
�3��C�̆��=G	�٣ĠDRb��a�zHm��B��*�R}�'�=o�� Y���M�C{�[��`�Q{�(1(��<pس
�ga��^
c�‚C�'܎�
+)�7/��Y�3��
�
w�8r�$��9�i�`���z�%ї���������Wtw=�J忤Z���qO>D����!i���e`���������
ˑ��Ԟ�a����!�{�(1(��<pس
�ga��^�(�2���>+jk�w��P{��n0�g;FW=g���.��'��]�vU�Y�
*�OQ���qe�;��o����
GH��=���L����q]a�^j��:�왏�rS��G�:X~l{:X�p���3`���!�{ ��SV����"x�*�l}
+R�F7�]\\
������zO*��j��if� �r�
>x�r�ڳA�\��=���%r�5g���!�5��92<d�GQ�kۤ�s`ϲ{��5{�+�� 0��=3o&
������n�;ހ�Ӕ�ڳ^04A����F�#��
3	��g�rC�V%bp����
v�����x���Aa��I��=~R֬�`ϲ{��{��$T86՘��=�(-罙�=G9������C�o�
���=�wz�B�$�G�.�mj'��:����
納]n�����]�ͫ�ޞ=m)~F��mW�o�t�m�3���ԟ������ -��
+{�z@�~�Q��(H`U_�G���'�n{y�w���]��;�BZ�<:�
=
z*���PV{zg�o��ģ���O���~����(9L�*���w/�hA�moI[�
ڰQ��q�]伲fY�s���	
�/c`�z�`� ��eOYUj�ޛ)��s���[�{��X�g��h��`����� i;Y /a�
\2r�W�� ��|r��o0������_������%t�K��,���{O���~Im���*J|�{&��l�ԉoH�-Z�
+��(诌#��
���Ds�VV�0kk~T����78d��w��re�!�;���_��s��2�o���B�]w㻗_�?"�9�y��d������-�=d��� 2�=+Q��n�;:�? *�w��N����=C7E
2b����^bd̍_���?7X�CR�����7�`d'Ԟ�2g�-���_2wZ0'w��t�–��T�2۪�Z�y�Di�,*<39mH���\�q��r�m!O/[�ٳ�0!+7x�W
����.�=�!���3�ف��e?�84�	��ۓ�w/r�1Gp���a�z�� �#�����l7�۳
+�r�zs��f���*7��_I�T�j5UNZe�,9ǴF�,tҞYڐT&�r����T�'��$
�g��w�W���%�!��=,�LdQ[���9v��w#t���Lڿ;�ӻW�=3A���{ � �Y8
�gޛi�����<21���^!�@%p�H��$_$�p�^R�m�*�h�rC�{f8S�lGw*J�>�{f���
�$�+��'�gׁ= ��-{�
9��
س3|���
�xo���ɂٙ��ۘ�=�������3�'�,t�r��I5)�	G�W��g���=[�8�n׮f�Q���K����
�\��u��H�ݺ=k�e:��Y�3 �}d�=� �ٳ
я���@��Z8]а�DY

n���2$U���j|�cn���X�Y�0I�oW���L�Y�~T
+vz���E�17B�ӻ7�ܳv_�����= ����������2����
[����
�����=;yB"��Y�3 �}|<
���czسl���F�sl{   /�gـ=����
  @^|oϞ#'����Þ��=  �o��k�ٯ���X 
���
  @^<T�*4�P��-����������	�`�y�}�a�^���zΛ��Q      �p����5��     �1�ٳ��E���     @س0`�     ��,
�3    ��=
�
    �{bȞ���xMm����MMMl9h&d��g     �c�=��>K��Ԛot؞����3SfÞ    @��k�{ʪ~��V���0�vҞ�:?5c�cc'�z&�o�M�
     ,b�=��YO��CGc��5?�?8��}�uՕǾ"-kW����޴=����,^u��j�k�<3{R�W��j�:v�?js�t��6�������b�=    �
K�<3cpd[?�]ͦ���C���CJt����@���]��zO�<����E��Z{&f��_��ܳ^�ƛ�W���l𳿔����{ [...]
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      �����
+endstream
+endobj
+873 0 obj
+64
+endobj
+862 0 obj <<
+/D [860 0 R /XYZ 86.4 726.045 null]
+>> endobj
+863 0 obj <<
+/D [860 0 R /XYZ 86.4 701.138 null]
+>> endobj
+865 0 obj <<
+/D [860 0 R /XYZ 86.4 83.712 null]
+>> endobj
+647 0 obj <<
+/D [860 0 R /XYZ 250.14 46.905 null]
+>> endobj
+859 0 obj <<
+/Font << /F36 472 0 R /F18 864 0 R /F16 461 0 R /F8 473 0 R >>
+/XObject << /Im3 849 0 R /Im4 850 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+881 0 obj <<
+/Length 2110      
+/Filter /FlateDecode
+>>
+stream
+xڭXKs�8��W�HU���fN�L���d�{���&a�5|($���
P�$;��'66>t�@��,������ŋ72]j�S�./��y��2���//��H2�Z�\F����"�����TQ�oL[�׌Uׂ&�2��^}�|�x}�����x�Ê	�U�,�ŧ�񲄞w˘I�/oݸf��f�zy�������;[M%�R�j_1Kt�$��Pv�a�W���I��v����k�\��PɏAQ2aJxP�T�]oWk� @?�֩�џ+
}]�,���k���0��b�������E�^��G!b�b�����,���C퓊�<��X�<�g�$��X�ZgRG���家��l�4�����*�)�K��,I�[b��
�8`�S�ǭ9gNʍ�v���[�p�FWh�
�Y�w��\a%
M�hx�����'P*
��T��9�ھ*h���_q��Ӵ~��VՕ������|���b�р�����������FXEr	�l� yUY�$�Ukq]��6��
 ����]�j��ml���E����G���/�m]�X�Q����~�-
VN�$��Y ��*��I����	^.v޿z�:a!9� ���
#�bL�z"����sY�������K2b�mɊ��WC�
<ks�
���6
�uhgN)���:��_
���0�Qj�-���߹ʙ�f>Q:��m���p)=jREE�l��v��/
[A��n
+�nK�p����
O�B[
��bZ�I�b�� ��=�'���
+�?e���i��y�|$�<v�>w��  ��;7� �<(o��&t�.�P
5H	f���p�0P��q���9fc���;�xkj�i<E��;�0B���l^�fx�K�;���C���Z�����0��ޝB.0 �C�E�0���0G��
��QI��<q>	<1�r=lM?�u�ջƯ�`��x��&EGR�0�����7�~G q &
�����w���O
/��~�y������
K��t�`��������d�c��{�17u���7�@���e�J�
���U��Y��,����$gΤzL� �����}/M8�P~��fOrS�_ۃ���֤
+ʭ��Y�X:gU����U��A8qVT���t��b��YQ��ޞ�sz?V�Xe�|u�C,
9�(�e�%�4c���!�=#�e1�$��2��>�5�!6g�v� ��$�b��M�8q���� I��@R�d~I�


��s�f*K��a:��$t���_N����9�z�F��9���I!�<gP�ǔ�D��e��(=����uXc��
g~$Oytm��՘�����*.K��y��EN��kUZ�
+3aa]tmY!'X�n
H���aS�������!/�
���)Pd,թG���4�)`
+�G��\� ����s~�2z����

u"�]�K�:N�Uw
۫bsf71�8ٍ��������ۋ�\��V�R=/7m�k
�/�',��	�|�����G�ϰ�,*}�9���.���15V����G��\�%�4�q~�F��Y~^VMڜ5(ٳ��Ҵ�
f��e����d�Q��ֱ\��f��%�f2\�a�;StW�i!ؓ�)�N�n-dI�t�<Y)��5O�؞������vd����9�NY��G��� ��V�����8�H���pI�I�;��^��5
+�����T��Zkoa��@H(�ƛf�m7
��2u糗{B�u��
�O �����j������k�m�����Tv��Y�}��R�
��1g"�ϩ
+��p
��AQ@���>H��O�����~�/
�v�+!6�t覟���_����=��HX�Nu��~2�2���?��Y*�k�~�B��������̶��6I�
+
�r‹
�5�D2G�pt�fu�������d�,b=LoD����
8]���UV{�@�0���f]x��W;\rD0�[B
o���s�4�X.�Ns8�
+�SL���2_+Q�	F��LG<���}���
1
�)�y��� �H���GGv�������	�(��Si
r�O����-,i�캱��/��Ɲ���$�X	ҍ�BӨn{j>�w�����
��a�^?
+endstream
+endobj
+880 0 obj <<
+/Type /Page
+/Contents 881 0 R
+/Resources 879 0 R
+/MediaBox [0 0 612 792]
+/Parent 843 0 R
+/Annots [ 853 0 R 854 0 R 874 0 R 875 0 R 876 0 R ]
+>> endobj
+852 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./cvorg.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 883 0 R
+/BBox [0 0 735 408]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 884 0 R
+>>/Font << /R8 885 0 R/R10 886 0 R>>
+>>
+/Length 887 0 R
+/Filter /FlateDecode
+>>
+stream
+x��[�n#7}��M���ˣ�V
�=#)���$X������֍l��,��A�L
6y�XU]d��QMzT�����6�}���;�)e�
�?�]6�sZ��*?���ᷟ7���ۇ��v�
��罁Vs��H�t&eG�>ى�0�o�fY�y}?��
	:O9�4��=z�i�A���o�O�ϛ��{y���������d�������~����n���o��v2���y�l�.c:6
��_ 90 ٧�
1�3Zo�2��Tp���
+σ�!NN��m������4��:�)���h��NA���&����:8��g���p���5d�.�Xl�̦2����V��_�w�A~fr[���	�!�w�>�?�>�0�K.z���\�1�
�7�ARB.��h�c׷hv]tRdMs``;���rA�|TI�B��_�U.h��k���T!�8D�}$�U6�5�L�K��|P�E,z�	�JZ<p��Ry?���C
+�%�d��ח�M�r�`����U�K���TP
er46M�LI�?��z���J '%�������ݖ�1�߳���-�Z�1��+��>?��}���*s��S���ܸ �����
�ky��D��z|��9��M�O�����E
�V�l
�}��yV��`󤐷��_7w���f����T���p��-P��o�d�L�������U��@��D�~�<��JM�
�} lU�K��yD)�Fx ;B�j�?
+9����!H=v&��p��`ip��JÀ5�k�
b�*	�X���cM�܅�{7,��l��;�X��u���g,�!*���h
d+��q��Vx�=��џo��OO��s�6��f��5f�<9 �E�ɶ>�n���C}o�d
���@�f8�&�)9chg��<�����2�:D7l^	Z���?�����f#�A9��
ކlL/'�Cw�yج�
�����������*�ׇ:(@9Nv�o���
5x׉���w��jU`�ظq��T"�@/����ĕ��1�v��Z��t�x�bo��!�T��F,��@y��†�z�:�+]s$�(�<0aE�Rֱ����gy*X�D�!%�	)wb��
��bǸx
+;I��s&��V�:v�����|T�&"9��1��H
@(�K;��)�$9�jN�MXѭ���)�b�Y����CJ$C�����(v�������9u`Šn�L�r��g{J�ī
��R�������V�>ZaTP��`~F�!����2�:@*A�3Q	Z�j����eX��i��S.��6�S�2�U��Ÿ������k�ɒ
=�W
�8��ur�_���������"Ų	�ڀ��Wd{�\:��e����0-��\¾F�I���_ӭ�uM��n�ƀ��W����t���F�3������5­a�[˷���E�7��ʀ��W�R�k}�г��F�3��ur����\����o��t���Г��:�x_0���i�
�@'�g���~��Q
}h��g�!��_بC	3w��Yp��W�����eCϪ?�E�юj��,�"�z3�^GQ��E�g���;�2ʝ���
8F֫ej�=���g�_�0�q�FZ���r��M:
ѣQ��I�����
+�k�Y�>d�
+-�W
D�xmc	��>o�
,�ԅ�]��u"��u�%���ESӏe_�uEׄ��[\\g�֤";ym�1�^mM�K��O�'[ƛ��u�{KKC�u��/�r2M@ɱ4>F�r
��J����8Z�@�z��w$�E�
E32r-���$l/k0˙��)�\[�k������^~?��|��'��
��F~	�̦�h��e���
*e��s:��O�BÀ5��X�\VI�h��2��cM�B��_ҹE�Dg:�(��'�5wHF3*)-H���H�������$�q|�!
�7���T����i.�
�$l4kh^ߏ5a
�I��X-&���̘��+1�1�2cAbj!�i��2c�rS���mݲ�q� �1�2cA�NS[�XC�5a
+�
~�[-ˡ�4uK�2Hy` u�Q�[�J�)$R�HC�[V)��-�lj�UM�cP��R�Ʌ�B�F���P�	�>J��3
?�����2��� l��s
���v�=9��x��ƒ5�0��^����pȥ��m
+� jd(�b�,P
,<�zRS ��Ͼ_㽒Pf/h��4����t_@��
�rb?C���’a�P�^�L��eꥅ�S�����0��1����D��M���p��'a�!�|�G�O:L	6�#G֚�Yd��8�^��KȐL�9*��d
+q�,�:Y���"~�:w|�#�/�`qC�L.���ǎ�W�
Uڛ�&`�]8�"����/{��g�g����
 �[��' ͭ�#W�y������П`��������q����ҟL~՛o�\ze���ڷW�ۆ7������?��ܠ����¥��f��
+V�v�\��_��q�xKT��
{�ahL�m����	�Wq���Sy@�2��f�
+endstream
+endobj
+883 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151030084325-07'00')
+/ModDate (D:20151030084325-07'00')
+/Title (cvorg.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+884 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+885 0 obj
+<<
+/BaseFont /SYMKKU#2BTimes-Roman
+/FontDescriptor 888 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 86
+/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 667 722 611 556 722 0 333 0 0 611 889 722 722 556 0 667 556 611 722 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+886 0 obj
+<<
+/BaseFont /RYKBIM#2BTimes-Bold
+/FontDescriptor 889 0 R
+/Type /Font
+/FirstChar 65
+/LastChar 86
+/Widths [ 722 667 722 722 667 611 778 0 389 0 0 667 944 722 778 611 778 722 556 667 0 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+887 0 obj
+2512
+endobj
+888 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SYMKKU#2BTimes-Roman
+/FontBBox [ 0 -14 863 676]
+/Flags 65568
+/Ascent 676
+/CapHeight 676
+/Descent -14
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/C/D/E/F/G/I/L/M/N/O/P/R/S/T/U/V/space)
+/FontFile3 890 0 R
+>>
+endobj
+889 0 obj
+<<
+/Type /FontDescriptor
+/FontName /RYKBIM#2BTimes-Bold
+/FontBBox [ 0 -176 921 692]
+/Flags 65568
+/Ascent 692
+/CapHeight 692
+/Descent -176
+/ItalicAngle 0
+/StemV 138
+/MissingWidth 500
+/CharSet (/A/B/C/D/E/F/G/I/L/M/N/O/P/Q/R/S/T/V)
+/FontFile3 891 0 R
+>>
+endobj
+890 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2025
+>>
+stream
+x�mUkPW�f��N���ԔX ��*�Q�1��1�(� @F`�q�yɀ���kf�Dy�(nV]�n�y���h-�jvS뺎n��lO��6&�T%�����|�~��N���A��W|v��0dG~nz����H�߃[ ��+L���n�/xy�ޟ��A�s��W��kBD�l���|�� ;K��-ݵc�������eUxx�,C�Î,J^���'[�_4re�*W��^/�ħ���}�,�V�(��gf�3���t�<G�5[��R�kdK#��V�\�*?��f�f
*��.���E�vȳ)�
~�C���Ȩ-[�m����]܎��d�:��XL,!����r"�XA�A�$Vok���:"� 		���$��W�.r�#���W�+���sJ���*����Ŵ�6qޮ�Ў��r�i']	vij��&�m����[D�n���c��c�Y�d��Y{,նZk�zE�Z��`��� ��CA�9�8â�m at MRD�
��=bo�z�|��K�����H#�P�c���ZW�t [...]
+�����$H�-�?R}�Zh� Z
�0���TY�Q�Io(�7'�BV�����; �Q��]�*�$U���=����o�[���q�ѰE�����b�!ڛ�#�ѵ���
+Q�#���Z�z�{���V���
����{

a&�9���
5z�dP
ZL߇V��-�r���ه(N�D�JD�J�-5^a���[J�Ԑ����XU$�(�M�׎� ������
+L�g�z�O�N�2��e�Q�V���PR��OmIiH�%'�
� >mY��+q��n��
y�C at sF�!
�X�S��7zv���D�S��+��`
���_����%6��p��[6�_k;��g�XLX��垽$M�}�"��r�ZW�Ȍ׆�.a��ri�������� ��A�8��/����|_��ڜ"�:�
�;�j4��=�����٪����u8�^�?��K�*1��R�X����ӰHφ��8��Fq'<c� ոϋm���^*��po:�I�q�I�u�p�i�n�5�j��[Yz��v���]ߘ1
��vK9V�od�q��G�w
-��Kp�����b at A�A���GX�
���\aR~'��/�SB�V^� p*�Q�߀A���P�Ӽ����џ���9���KIgB�
�
[�v���
+E�6R �Mqf�āg����y2v�9;>�q��M�1�.
+V���VW�T䐞:�z�܅KM�]W���_`L?�:�ϱ�'wR+%iŲ��C�l���o,{����:�C$JN��]_ߍ��'/Z
���E��*u �k`�
�N'2�w\Av����)�#>��~j��w�����y7

<-
;% ��$�X�Ks�	�^Z�q��n/f��`��H_�B��51ZKI���r�=�
#h�TZH�&=�
H9�(>&0�<�����>����<�?�+����M�b���F�oۿ�!�/
>,>��Pj�a7�w�D�q7�g��7j5Pȼ���:�2�N
PS��B�AI��[��VG�e8�nx�<��G��?����N�>��K������ج��39��'��4����1�c+ֻ����u&S����k�V��
�hDA����`��r�A�F���]T";��fnj�s��N�C�!�"��ă&��:��[~���Mö2yI�j���MI]��ھ�!�3�n�p����z
1�'|y�	{��A�
��rೳ]c�p����k�;Ƹ�K�t��\�f�|()Ss� �ȗF_�e�`�5�U�@s��g����1�~|5:��m�P7����B�|oT�]��%���v��ՙ�z��fڼ���đ,�
+endstream
+endobj
+891 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2043
+>>
+stream
+x��UyTSW
~�޳ ���TMr
���غ��Zk�"�
V�-�B��-aY������Dቊ@q�Z:�z��Ӻ��L;��cO��q���^��9s���c�y۽�}�������ͅ�H$�[����������/Δ��\�ٮ�>_l�$�ME
�NG
��í{�o/8�
+�΀��)W��h�	1d�xm�&G�-fǂE����,00P�l�eD��֦���C�Zg��T�s�*C�l�N��Lә�4��$�J�r.۞�Sg(7juڬ,C��/d�����e��eE�6397[c�L�+�
��e�Z���������
	
�����Q�����n�NQs��Qs�רy�|ʏZH-��PK� j�:���ZA��8��F�g�d�e��9׵�y�W�V�����4^�=�3��6f@����"6��l��$�0AVC�Pᡝ���}
4�
��%�E�*|yH�膜VtY��C���\z �-
墼�rM]5*�_\��p�q�B��G��;��zڗ"�?!>?�
^Oa9@ ��o.�þZ�Yy�˚�B�:�
�+*
��r�<L0n 
5���)4ǵ�0+��
>s��'K>�k�Q���8ͥ?��
�,L޹&��sD!ֻ�o���s��'�I7��
+��x�>�_r�\��,:2#�]��4�ʀ�F��1�G�7�cR��<>6���ê����� %Yt���̈*PQCnKtϮ�]�Ż��'�d���Aʍ+�C+N
>l��Nj��O�G�Z ؛��@���-u�_2��� �H�Jx*�e���3�U]E(��ye����v�����ۃ�*䟿"c�6~W�;��SbUL)�'����+�9��W"��6�Y�K�
�eo�5��5sTR�۔oH�ǧn-\��p�eX�
H�Uf�#�`/]�iU��Y(bNZ��`�-���)������
���I�"��7�<8fi��
}�B1�S�Pj;��O�0���GN.z����W
+4}��|kV{�C{ڻ��v�~�����k�
?��{��2������s7E$u
��.��C�������s�����[���L&v��s!�	HzN�+�c��ֶ�&�S�E��$ ��� }(C;M�*	�'���؎�X��
;�q� +�'<s��PQ�g����)S��
�ez:=(_��HN�5�Cl�S{QǠ�v����'�������q�(��,���yq��|
:U̳��QX�j_#�C�03(��t��o&����`�(��j��H~����
�-���ӷ�:J����4��P����]�6+�3��x �%ڧ�luN8��#bȈ7g��3N�i�,:�:�
�)*&��/0�M]N�y
7*�:�H���h���Y
�"�gnWv�P_f^;H��'I�8���
��~X�SH�擀�;��k"^ �p�b�
\��t2%)�`3�$�{@w
X���ڙ�A�3���q��8��%̬80r𫾑��.
��礝�	���U�(�u�"K�wWբ�2gg�/0�o�hF�X.N,v��l��K�"J�{s���镡��܅C?����]���2*
+k�h7�sP;`�*����:2h>w���{�
*�
��K�
�?V�
.?"���PB��;�R�7ߡ�h�i��������8� ԓ���Q ���4���g*�@��ޛ�kOd&Tb.��x8�s�K�
��v�F�,0~�p�/"ܮn/B!�"��9-}�b7A\/)�s)$�\�#\|$C������Q@�C�s‹Ty������Il>"���g�y��*��ݛ[-E�
23�ʽ��� �
�mb��
�3��x��u�덱p�Q�)㻤��h���w��۲S���g
�\g�
��BSsjB���+/
U����[𚈟?���o�9�+�󾟞=���Yc���M����T(��6	��y6�4z��l�3=v�Yn.kAwX���5c�؝=F�A������ct'�������|�琣t�3Z��Qm�D���� s�kr��7�ִ!�/궶��C#��[�I�癋�������x��K�Q����v��{���61�;lt�K�t���� e��t����P�
+endstream
+endobj
+853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [241.988 310.28 253.943 318.693]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [257.746 310.28 264.72 318.693]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [386.108 266.002 398.063 274.415]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [403.537 266.002 415.492 274.415]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [420.966 266.002 427.94 274.415]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+882 0 obj <<
+/D [880 0 R /XYZ 86.4 726.045 null]
+>> endobj
+648 0 obj <<
+/D [880 0 R /XYZ 140.7 447.376 null]
+>> endobj
+879 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F49 646 0 R >>
+/XObject << /Im5 852 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+894 0 obj <<
+/Length 3457      
+/Filter /FlateDecode
+>>
+stream
+xڭZI���ϯБS�D
��
��}H%�*l8"FbL�z\fɯwoࢡ�'圈�� ��^�hw�E�����p��w&��a��d��˒��R���Q��r�K����
~�k�,S0�Z�i��F��Of�vǢ��[
U���o�>���h�<�8�l�;��~�-ڕ���.
+M��^h�ygM
j(ջ���u-�̮yLr�4an��m�Cqh����	~�����{�t�΂����R���j�I��ʪs��~��
��{kU���Ʉ���#ϙV�/E׻�d.�ս
+W+}[?#����N-o�Fp����><�^�<ly{?l�T��rESnPTy���~���
��{��

ȃ
�������,a��^�ؐ�{�έ7�

�(�ӵ�P50N=ѭ@a"��8 1]
�h�qq0�.����2��n��P�rB���O���#
@wh� �򀌘,�8Ģ+yTY�)�:'�y�yl�
+� x�0�����'�A�mz���ieJ�q�늣,�c���M�s��j��7�W��R�t�ױ\�N� �y��EVG�?���C�2�M4Z�
~��j��3׫X
*�V
{v�	�
���8��
a�
��{A��kfA{O)�%���q�J��S{C	4ȂI���{���[��:��+�xH$U�)1�K�<����8�K�S��C=���	2~�c�U���U�(��I�P���E����@�+)������]�j\v�#�
y��p��s�lI
�K��Z��>u�+������À��:�^.�s�b��k��	e���ǢjPG�d^t�9=����Ȱ\B`�*	����]1H!�LJgx\U�M�Ğ4�mH���;4<ֳ�Ზ���|��;p�=JU��S.`.ڦ��6�	�gd|����p�P�r��biXq��i�S1�P
��E��p�u����׽�
�!&�,5Ypp�X@�cي�(��
+e�
+�,L��0V�Ԫv�b�����V��b���������7.ty�d�rT¢n���s��]���Z�T��<z��
k� t��J#He'㔧|й�.�� ʈ� V���sO�p���_ȵb��;�s�����J�L
R7��� �
�
+df�=:��{�8�%�m�
�kq��Ra5��ҝ��
�l
�@R�]q�y�`a���
����<73J#B��{���fY���(h��xA���*A[�2p����� �h�ټ�1c�DZ�/�u-I}H�f��e3��7��Z}`gƆI<
�+�-�5�������oh�=>�P)-9[�L�C���k��Gm�/��bͥu�n�7.u-�?���}
+�}�wE)4�8�����+��`����'��J@�[,#�x���ȿ�J��m��z��"߿��;�ԉi�agO�s(
7�/'��8T�@�pO���>f�p��]�9���#�h�ܓ�9c/��I
+p���Xx��ĕ䞩�k�e�ıp}�Z����6��c�[�J$�:�\H_9v�7��
���Q B���F��5�B����d6H6���r�nl�B�u��q�|�����!�X��
a}
+a�
ቐ`�f
/�TWԛA���?��&��	�VJL��u
J�Fr��l��
hg�k�c �D7ѝ*��ilx�=W+6,{�S��W�_Y�
n��DR|t&P��Ů�z�{2�'DU��д���(V$�-���H6o�_�L��eV`
p�
��
@Az�����B�G��o�T:��=
k��N�0��N
kv�
+�t �'*��l(N�hW�
=���a��/׶� ����(�e�)Qq���v��^��Sc 8�S������oim�~uVЂ ��x���^DZp���X`:�E7
B��X��!3���ʜ�d�uO;�9��AF˨��\M�� ׁ+�
� ��(��D�ZpV'���
F����7*��^�^�L>��a�{�/�>��@@��>%����g�h��
�)Cuk�E��dZv����(7*��)5e���:|�H:�t�Z��
� d��GVe�a���:�*�y���Q��JW@��,�d�%Op�	��FptߞeػyG	d5t���l�ؐ�Y��[�����0L��x�Q�|)����|�S�$['H�V&r#�~���u�J:S�����T��f��V^�n�L�
Y
-�:��Z	�)�ZW
&y��
��:4��~�	������'�6*!z1�-�<�	
�i�dW���Q
O��P �-
���/���S�C傦��HD�-=���NE�����d�x �&�'{T
+� U2Y�R�pco&�����y���--����Ų\�-Z��"T:�n��u�%�0+�~
�v�����M��z��F�l܁� S�u�R�+:-��T�}$�<�:�(8��dk[�����[����e
��d{�'$���G�c��U���Y`��[ �$	ІqR?���S��:��R{�)�i�J��L�^>�,�Sur%y�����
ߎ�l ���­<	S�HM ���7��p��,SM!�&S��N*��
��w߀ p�E��4Ϝ[}��f#f��,
+c���7tx���F�nW�Ri�@H����8؃��ph%P0&�_N麟��~�@���gy�|�~{q
��[�k:L���v[��̟nDY
B0�3	Hf���(
�A)�+���^S�a���v�K9���MYq�<��ǒw�d�2�_�|a��.���Mt�SD� �q���«��C F�]�z�F��ߠݧ��q�ۼ6sէ�(��A>ME6��
������$pzz�v�����`�\�B0+ ���{� I^A�{o�#�:7��=L�a�My��
�"z�Oҿ$nZǀg�HY��~��CG��݆���sp#)
�־HޠZ���V�m8����G�}$#����6
@p�&�U�wJ�%��ep
�k���p,�b��Y ��Kn�䈾�쒆���q
���ggΑC��<t=NN�;�� T�P� f<ɮ��ޭ�j��
�t
+�d,\�2��)
�KN{��o����;���s��
+Ga�7z
*�]� �Iz��H,'r��%�
ps��$��0S�L�oi�]td���ɍ�r��Ǣ�6N,Ө��
�&`��]Fb�
��?��qa:XZ��}���?1ׯJ��#�(�{�|��0d���ҟY�K#YI#6LD��}>R�zΙ��Ϯ�����j�-�ܜަ� m�	�{�Z�:n��b�� ���W�ش�~Չn\������`Bcʳ�g\`�28��ǎ�5
ޘ��t�J���	N9�6�-z�����_�+A`��#3�J˜��Iu�.�=Ƅ*��khmϗQ���<X@�k�dj������}/'PqzX�K8�?cS-�)D0d�)���Xdx~l�m���A�	�m��N�;�n�����n�����sA�NgOg�����F�y�;�aQ6�o�>;�?4�G�3?X,�h����*`�
+endstream
+endobj
+893 0 obj <<
+/Type /Page
+/Contents 894 0 R
+/Resources 892 0 R
+/MediaBox [0 0 612 792]
+/Parent 843 0 R
+/Annots [ 877 0 R 878 0 R ]
+>> endobj
+877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [88.171 582.583 95.145 590.996]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [98.446 582.583 105.42 590.996]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Byr:92) >>
+>> endobj
+895 0 obj <<
+/D [893 0 R /XYZ 86.4 726.045 null]
+>> endobj
+892 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+904 0 obj <<
+/Length 2994      
+/Filter /FlateDecode
+>>
+stream
+x��YK��D����m�
Z�z起a�e��
�vu�Y2zL3�~��,ɒ�~��^�R�*+3+_����&�|q��Oo��|nҍ�8����n�Ɓ��
+�Q��9l~ھ{�O�kv�&��v���W��I�(�n�m��Ȇڢ����~���Ͽ?�ǻړy'oO����]QW�N7Y��:�d#(�	ٛ��Ŷ(��w:ݎ\�l;����k*w��Ǣ{�݃���u2S�Ɂ*���R�2��'�����wɛ1���~��5=��˞Ē'
&|VEW�L��E�6/{���Է;�-��V6�
F�?~��_ɲ�"f6�Z�A�m��
+�(6rZ�r�W��}��;yj]��Z��u�
t��견I��rg�r/�O]����M.?��1�9T�t�8��$8�V'�������X!S������c�
��AC�M~����Y`z������d���}S�!0���ǭ�zdƼ��u�
���}^��m鏾�Qy8o䑗�=��;,�r�*��%s���t�l��x*y
zh�H{K[�M+�?~�=�-��x�+�G�S�?�����Hw����8Ap7j�P���w_\���w80�:��凼lk!����W����gu���K���$�ׁ
2k�
+|�0Y�d"KP*�2ù��wZ�;6G, ��1 �ʠA�l�p�h�ވI6����
�/-��y���H�D
�Ky�$6���ƳX�C�`ٓk�ԓH�0ȅݿ� O9G�_Y�{7V���I� {d���#qW�9�B�4(˒��:W�k�ͥ
E6�Ǹ��׌�C�&�.ٶ:��hX�$rL�P��ANi���!�<e��:Z'b�Uj��PH�Z3W�߀m&�B�kQ�Ev�KO]IR��^ެ��O����%���q����|�$�
ŗ}9\���^�H
�q#�A��L�/��
�혦�J4�j?@ܓ��#�@�.���ጣw�SoHrH��r����W◺2��tTg�
��nV���&��(r�W���L5
���Gc)�O-�0Tn��
}?Y3|e{>k���g7W�])o�&s��0�E$����_��/���*�<����"�����+mn�6��e ��'g��͕+
+���i�BZK�2	�W����F�@08
$�cW�P.���o9��H4 K��ah�}�5����d��hG�x;B��(�E������;7=m�����q~�����HT���u����"����|_�
q�5x"��������/J^	7��/�
D��JuU~������SF>
b�0r͚%�q�
�d*���f���l2D&)h��`�'Bȗ� �h�hk�S�^vD�
j�
+�m�I���'W
O+��@�I�vזdT��� J� K��$!���A�сF�!R��>�t���v5��ᘽ��"Jd*=8�:����F�L��˚b�pL��z_�ٖ�)�}%�F�
+&�9�V�c�-�f\�u~�nBV	���2 at gN�� �V�z	�~
�
�³�H�;+�k���]ҊSX���Qq
�����=5+�*ܜ�#d�$̶_v�)g�Fq��d� _� ƻ��.���&ryVI�fs�h�l�i����PN|ߟ�>h��a�al(
+7�_c�u
P��
f��"�2m�|G���F��+����a���
����p
B$	P�k�A��M���.{�n��DD�����'�o��L���'�m�x]��W�P�
+�,J�d[aS2�
df�T{�o�%�H�|
b�� Q��0��P��s+d��W�
40����Ox�R���x����2ǛQ�Ź�V�/[��M�Z�e�~L^��r����U�Ֆ����fAl�9�|;�0�UCa
+��tݚ������r�<K;��	��)��|Q���EC6{ZR�
&)&F�  8Z�8Ypp�"�$��c	�s�
�\e�bqi�2e����x��4���@il���DiHP׌
����֛N���Ή�iO��S�|�P��L�]�.��k5\�I}x���
 {߅� 5+
m���
:�5L����ɛ� 

�$�Cr��U�j%��+��c�i
�t��l�
���(o��ȷ����_G&T��t|if���M
+��kB��
+0W�^�j�� {w�?��

+��2@�v�z{z�]�]���C�΂��4�U���|�w}	�C)լ��y�����AR�U�����b�L�0���~�Œ��k*�k
����'�{�j,r�&��$W(�+VC����O�/		a)�%�
�����O����\���
d�>���GnX$��ԧ������;���%;���я��E�я�t��L���[�r��V��J_v%�.����S���sݸ�I����J��0���$��F	��4��^JR���h(T�؄
3I�4�ѻHQ�BD�3Yt�1���ڶ�!ޮ �,M���\�L:ϵ�c�AeLjL���P��3q���s�o
�y�yR��*8V)�u�_�4A�O�_�҄z�ꌛ��gUj��\�R�
+���d=d𾙙�XPB�QJ�sn�>�!���U���2v�w(��
�8Ǎ!��Y�PE4k
҉�����}}X�8����e��zI2�̀#Qn�:����5���B�H������Q�GQ�_
��_�y�^�b}'�ځ]&�s(�ť	�:��!
լ��ȋ�7�GZ���x�o�2���������@�`m���.�����G��o�j^��ߥ�'�R��R;�k�<�,,`�U6����3���t������2.�N�p %uw�i=�`�
35�{*���j��!	�YC���
��>������~����}�
h��
mM�8�̆�V�DX^1��D��{��i�f5`�T
���,���
����Q��Ik��&E
+��w����{I +�@����Yu����i^ �z;��{���e��pjѶ;3�hN��4u����ȁ|�����d)���d�[>�ġ�
�&�@����g�
+endstream
+endobj
+903 0 obj <<
+/Type /Page
+/Contents 904 0 R
+/Resources 902 0 R
+/MediaBox [0 0 612 792]
+/Parent 906 0 R
+/Annots [ 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R ]
+>> endobj
+896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [366.137 476.642 378.092 485.055]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ex) >>
+>> endobj
+897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.861 438.84 406.835 449.688]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.855 307.333 388.905 318.181]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.066 241.394 140.53 252.243]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [284.031 49.651 293.495 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+905 0 obj <<
+/D [903 0 R /XYZ 86.4 726.045 null]
+>> endobj
+82 0 obj <<
+/D [903 0 R /XYZ 86.4 701.138 null]
+>> endobj
+86 0 obj <<
+/D [903 0 R /XYZ 86.4 294.099 null]
+>> endobj
+902 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F49 646 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+911 0 obj <<
+/Length 3826      
+/Filter /FlateDecode
+>>
+stream
+x��[[w�6~�����=K\Iv��4��Mv������h�'��T���^E�r�}��`f��
+g׳p����ϔ�%Ab��]\�b�Y$��*1�X�~�Ky��&V����B̫|{}�P�����T����_��UQRC�_����u�L��V�^�z�����uÙh�1A��l�9���p�›_ga��x�ɍ�̴J��z���?'��x&t���-�6��,�P.�4��:Q��_�*1��Ń�g��������B� �~�7���A"	Ta�S�<]O�Q�8����$0F߷Ml�٦��pI#[7�2�W��n�*��߅��XɆ�?B���(�|YlOe<��
Bq=����h��T�s�wW�Q5}N
��$oLD�i�.�tMd�Ө�f���&�f��&_�7�X�i�Uي[�nyjKG��V���I�
�_�$
+t(gP� 1^g�b����J,���Zm�y�^s�d�����^0'����#VP��ta�u
+�>�o�	d�
�7h��q�t��_
�Y�@�V Wk�?���0=i�O�ㅆ�*v��	�ii_��Fsppb�q����.T
�ꡙM�F3�k�����'��|8�ǘ4�Jw���s�`l��(	B)
�Mu{Qc5hk�-�քRG�t{��sK�m�-��
7z��ּ�Wm�� >F��#��Nc���6Y����53Qi�����]�2>PgE&�N���?BVYC���.U����-&�k��o9�:7�<
 �?c+�
������!��V+�f8�w�`,�L
�/�*#�	U`
��Q.���,��H��}���=��A���<l
���X$3
�A���<(
bϑ�� 

0dCZ5��X�1v�l���e�P��)v�q�pn���/��O�
+�m�.XJ
:za��:-����qP�t�㩱 �
i�� _��"�G���5�ߤ����{h)ԑ�O݇�&H:�{��g���|�6
+����dp�Ọ0>��T&J��;t[�}�;Z�������8v<>��p�2_�`X
��nW����߿~u1���(P�^D,�J�
+m7���ڿy���7gg��.��@���j0[�W9ζʀe�l0ι#�N����s�[��K:��ӄR  Z�y&�#���|�oh��f��1x
GG�?��_c`�۵3�XsjVBs�EK@荊!fe�N�a>���h����#�3�2���
�ڳw1�)�Ok���Pe57.��
�� S�w~�?n�eY4.	���Kh}wh޾x�������ʓ�W�*�S�-
�n����Y������e���fc��!ԸL�M�@���o�8��6��D��lX�x�ʯ����Wj�m`��^�O
+��ܳ�sSRtq(�j���|`79$�X&��4�q����3'!r����QM}��{�(~�c���{�.9iЇ�5��8��yB�;�*��5��t�Qɟz�a$���{�S{�#<J?8��<C�Ûɏ�y_$5.&�t
N�J�j�
�ύ��
M��E&�#c*=������j^xH�>���u����n~�L�VQ���a��cC�o3&���L��ᐡ���ۡg�}ю=�������U�T]��?��.��h�Y^��";"�D���L�����8�k��!j��r1f�h[=��8uQ��i.�_ƅ�*�����S�m� �
pjVF����
��	�07C�s
+f����l�����Ni�td���p�㣙E�!}�S�ȓlJg~\�{N)nZO��?:�7�V(�?�������� �.��m~���v�S:
s������2@���ϯ�� �d(�{� �m��OaN�\�G��By`��tcz�<���c}�F�w�x��
m2�=2A2Q�۔I?�9
���m>�����QZ��Y�]�U��1�h1�x��Ƕ��$5�<&�ٍ�J�8�1T�
EW�r��
+9*.m�s��jr��=]��Y�1�+�y���\59eq]������/�q������Ś�
�$Pbۡy��>@=
 Lf��y�I
&
�j�q�avr���(;:�1���IpR��M/��*�,¾��FX��9���n}�UL����
?\W�t�[}(��pUFZ.�� rזLѺJ�#píu�p�����vۥ�@�124ov�݆�w��X�U��]�߰%/��8R�t�1���
�y��KA
�;���|_q��e�u0
+�/H���U �&���AY'/��)�'�8����
k��Ҝ���H�0m�
�XD�=P�
+ at bڈ�����e�4`��#�PZU��
�d�9��w5˄��UE���8��WuWX@��<�>�$�9���������4+t`��ﱹ
.�,��p�\��r��������1/vὌ$�6�<��y����+��@zD�"��ǡ!̣��ڎ����hR��ٍ�
�G��t`:�Fb(v5���
�Ww�J�4p�Q"�O���$ң���m)
�C�
_P W��gf����*�%CZ��=�J�
P��ѮAUB�x��ۯa⑎W����4_�y�+�
)#8�#�~����Ȃ�]($8,�ƈ�7F���+�W���?q�e�����:N���G��߮$bɏZ�w+�Q������qӐ`UK�,��Q�Z\[)�p�u�W�m�ģ��[0vt��j��r���֚v~�ʧ�.�<^K�R�M������t���+p6�^��Rs���+?
D8.#� �M�I��[��7#�<�*ˏ�*�,����a��(|HH�BP��o(������!�Qu�+{/!c��j�#���x�>����rc�3Q��Y���QM�cq������c��♈��)���K<�
{y^Q���.��-�����y	i��P����i�m+�*1܆��ay&��־{'}q�9����� �Lj8A8�_Sp5j��TRʇ��{�	��"z�Қ�u��f��U����
w�Ht�ÅӤ�ۗE�����t
�2���W�
�	�!�D���g��߽�<[:R��9�o�O�C����
�#LC2<
��-��٭ˑ�9���
�Ph]���ap��I*��A�a� E�I�;�)��4Ew>��D�i�6c�� ȓ�u�
��f22�{��E���q�\Aj3)��V}M�
�~��T����~�

���%@�w�ϱ���Io��<�v�~� 3�#��}�o�QOz
̻-����6�d~�
!Ш�z� �.�W��m�Ӏ��o�n�'1��
��^��z*��F
su�
��!��W	"�t(�1%$Cӷ�� ������˪.�e=	sQЊ���],�r$�`�
+6���~;p:�6���JJ~��v���m�o��s�h2�>3F-�$G*�˄Q���S��ߨ��5����)�`��X���x��K� ��Y�!��8ay1����\�������E����l��i��#�=�L"�s�G���
�g�.nNS�
v*�TÁq�='����a�Jɖ���œp���
L`戗.'��)�rr�+�����:�ˤg�<�ev��� �U�;�����?��x]al
�đ�:�A�'���F�)�n�#��6M�n�Rm����[��ƭ�ܲ*HZ��|+y�����̆��ɼN�7�5�ۑ}^c�(����j��{U�/d�e��ӜvP��X
�m�b�
X
��'aq���#�No��)&��:�IЃ��� �~���b&k���43	�
MvxM������"���)p]%�����H��}��"+���~�8��#��$�L���u�M�-@���裿�h|�1*P*z
+�
����=��?��P��ѽ���� s��=��c}������1@�O
+endstream
+endobj
+910 0 obj <<
+/Type /Page
+/Contents 911 0 R
+/Resources 909 0 R
+/MediaBox [0 0 612 792]
+/Parent 906 0 R
+/Annots [ 901 0 R 907 0 R 908 0 R ]
+>> endobj
+901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.842 630.002 237.805 641.957]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.831 363.126 114.793 375.081]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.194 209.423 230.168 220.271]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+912 0 obj <<
+/D [910 0 R /XYZ 86.4 726.045 null]
+>> endobj
+90 0 obj <<
+/D [910 0 R /XYZ 86.4 701.138 null]
+>> endobj
+94 0 obj <<
+/D [910 0 R /XYZ 86.4 349.123 null]
+>> endobj
+909 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+921 0 obj <<
+/Length 4051      
+/Filter /FlateDecode
+>>
+stream
+xڵ[Iw�6��W�6r^�`1�搭�e�$��%Ɂ�h��)Q!�v{~�T� .e�c�b� ���_`��Y��볯.Ͼx���3o�]\^/2���IϬ���ⷥf��Bej�%��e��\�eQ]���5��n
�طE�ʛ����]S�4���B
+'�R��?.�?�����3��
�F7,�v�ڜ��_����
�w��f��gJ�����g<���W%�hU�
��^X/�p��;.L!}��+��>
+%x�>���x�Be�g6t��yhΊA�~�a���Lʃ9��]�T�M�nq�/^��0���
?)+���-W��-o�l�T�ƒ^ޕ]|G��»���-����
�Qiô�OY�d>��5�'�tƴU�%��L�i�|�f����[�M��\��"ob���p
���=N�!�cB�ŅȘw�oо�Ls�"ڇ�$�slw7�fN��2+�H���
5��
��_Ҽ�6j
��
+ڈ�*��u�dל�ej���eW�[��-_����wT��W5���,�_��ً1�\X
�
��3Z��J��Vi��@�s�,�5���
99��N��Zݴsz�Vٰz�p)'
.<y���á=
ޑ�CU�t�
���@��f��W��ׯ�u�=���f�Z|�J�v�<��A�:����5Ψ7 �OT/�����Xpf�{�BW vi�����~
���X�Z������&?����PG~
U�~��^���y���+���7���X������T	�k��’.���fFꩲ������ugͲ�L�
}@%�
��ëK\����7��������uC�����ض�
�+��T��}�'�,8v�;7�*�5J�q�Ǯh�yu���.Jz�	�
.����b2/�M˜�˅ЀnIx�a+`|�/�� ��gY��
��"Z)m�O!;!�A��m���ޱ�v���v�H�2�3-@�el�!|��m�	��sz
��PK3�(�
���v֟W�54tڼ���`��I1XM0~�
�N
h�۱t�7Ѱ�~�w
Z�Gz���H�)9�H�ƺD���w	����<%l
�5.囪}�w3
�b&�
F��j��e���*z��΍]�MY�c��~�=�`��
+��l*�M�j�Hys�l{CT1#Ե�$W�
�[`���������
��TQ�2�;~ 

+�Px�_D0��
�d��g�k��~l��5�k�Db�X��
��
^�=��WuĄ�0G��&�30��E>�xl9�LWI�{
+|E��.;�uH�&�&G�&Ob���&zL�L��ir�i��h�8��옃h�HΜ�'gF���Ϟ$ډ���)A�IѾ,x��O~Č�G at shMyN���a]+B���I+z>�r|yJ�R21P�w�n�� c��]
�
G��;7l6���#����%
�"��	�����o7�� n�"Hk��t�5��E�w%ɖ�&�Ə��H���~;`�gE���Yء�
��rJ&/�S�罖Ǽ\��U�"
0jF� ��Q� aF�F��oa�^��ȍtύ�i�F���\�F�)��v��x��<ħ�����DnA��aW�99�M�x^�`�HDzYl
��ĢG�A���_�R1e	�*��ꠉ��!O�Q��;1iv
	�W�
��l2C)&m��Q
9Ju1t���%����n2�Px�䛋w��7�Kk��#\��H�?�O��}4��
6y��pՃ0<l�bM���Z�͚����z���s=�N���TYtA
a[��W�]�s+>�]U�Qi��u<X��.ߔ��ͤ 4��0O(�ZARy��2/"��o�g�DT7�E5�Yo����t/{"�	R�"Xx[���-&Tp��M��/���#�'���#{�&%{@�oi�5h�jbz
+�r����`]���_ $��!����e���: ]�΁Y���
�9ډA_��78��'\؁	dj؊N�0&�M߬�F�(�9�
~1q�2�)LN̰i-��)�(�����<
�1��`?R�
ɔ�M�31�QZdܝ�$m�(�p �Ii
��O�2�ŀez	
.��
SW	�o
+ �~:
�$�Ǥ$F
!q�TF3��(
���a2�і���ٖ3�lK
g[P��Ř
����ٖ3��֑�`D	,Y��R�_]�����:#��8�Tb��/�|t��B����i>Ь?k�j�nr����q�q�	kFHi�ܱi
�q�Dw����ͷHh��_:�4�9>��ێJ�s�Xh�b�R1ob
��E
��D�nNx�T�=o�~����w�L��J��M
&��S��o�x?:�:Q��C�~@ջ[� ��5�����0^ �5�5�7\[}}��:�Y���/���h�ج��[��W�v�o�k����l���*���-(����8^W濙����b�B�NV�ṁ\T�����Z@��2j�-l=yU�����a��)W񰺉��x����\��
��P6�vCeT�)�Qw��5%0�Y����uG��
��,g6��d�%����
{��_ {��e�?+��KoBW��A���{��aE� �cW42�$�K9��q�{�5��6MR][t3���e�ߎ���\�( [...]
+���=qL;ɜk�pU/��|�ot���:�`�/�["�������%"�*����d��ǀ��m��
AJGܛ��E�
ə�q�<�]ё��\ڒ3�K�6fA���;�U6��jC��H�4ob"��=��00&Lz��r0�?a{C;�2��]�hQ��&fʥN8N��q��T%�>�
�қ�vn�`�}$���Wy�X���;GJ
c�ۺ+��;��%
+%��+�
O!��i����`M�dc��p������:"��G��U
���i���9�,�zٟ_T5�!2,�c��C������c��xćp�*�@A w
�W��pna��E���]�&
�
+"��c��Q,���wϏ���A��EX1L��14Ud:^FM&1�D�7��
2lkz��~5�/wyӕ�}���D S�RN��CtP��4
���M��o�x�f;�Cg6D�̄w����s��p<7��Q��$��@0B	���ArX ���K
+Ǥ�F���o�y;s�c8x�
	
��8�j���	���&?{��ak�/1h������g�a���	�	�ޯ�.O'�G�幛��O$�$foz[u���Y�T�b��l�r�V�9{��8���5�1uc�}N�Gd�ȱ�%�����l���0�98ۏ�W�P���c�vx�f����]�I<c�f��k��[4|��wT�>'��&+�Kߑ�`	
�
+�
f�3�t�j�	�8�>����FpP%�ڑü�����A�ʿĘ6D��ɠ��̻���^C��$�-)!lTXUv-��z"��	��{�sN�X�X����Ep�P��d��~��sȔ�ÊSV J
1��
��p�Z��'�<����zg>�ů���K����j�61�p �
+�#�3�I9�@4�{~$'�Q�^�Jg���H{��V�cN�,�㉄Ɂ%!�1�2q�Ͼ8��D;L���)��u�Y��<GV�M >l�ȉL԰q��m�ٛ�(�Cv=M����fWt3DC
+f��yEs���!H��{� _�S�&p:�‘cC9��GalL��qNƧ�
+co

	�ž��>�r�3�.j
v�j�L<%
���V�q��Gʩ"�% >�qV�UXq ��
nP>a�@�5jဏ��y�
l�
�k�0�� 4�cj�
(���� 4qb�����s���&�XC��}Φ��x&GA��n�7bYZo�>��h_��^��4�N.�	��ѡ6��R�����ReU�??�
+�x�&1���3��J�	Wq��G�`�y�{� ��_�̃i0��R���E�g%p35H
O���K��v*�'���<��|��!:��
q[w���,RYa���B���
��i�t�N� o��13����x8e�N��F�OfG�������
+endstream
+endobj
+920 0 obj <<
+/Type /Page
+/Contents 921 0 R
+/Resources 919 0 R
+/MediaBox [0 0 612 792]
+/Parent 906 0 R
+/Annots [ 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R ]
+>> endobj
+913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [226.236 435.915 238.192 444.328]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ex) >>
+>> endobj
+914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.808 331.801 230.782 342.649]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.701 103.007 139.423 113.855]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.752 103.007 155.474 113.855]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.561 50.205 332.284 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.5) >>
+>> endobj
+918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.412 50.205 372.134 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.6) >>
+>> endobj
+922 0 obj <<
+/D [920 0 R /XYZ 86.4 726.045 null]
+>> endobj
+98 0 obj <<
+/D [920 0 R /XYZ 86.4 396.461 null]
+>> endobj
+923 0 obj <<
+/D [920 0 R /XYZ 86.4 320.18 null]
+>> endobj
+924 0 obj <<
+/D [920 0 R /XYZ 86.4 268.906 null]
+>> endobj
+925 0 obj <<
+/D [920 0 R /XYZ 86.4 214.312 null]
+>> endobj
+919 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F38 517 0 R /F11 694 0 R /F55 746 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+937 0 obj <<
+/Length 2432      
+/Filter /FlateDecode
+>>
+stream
+xڵY[�۶~�_��
*�B �����%M�ħ޵���+AZ�)��n�_�
H�+���m_�
q�����?]�xu���H)K����*H4S��)ӑ����P��\�I��gs6y��ͣ$
+_}�E2|��
5WU�������Y�We3��ꗋ7W_/�����D�`����'��痀�(M�;7n�(ejEpy��
���C����`Q"
�0���۾�s��B�H��W��Z��+��"â(�-ngR��ҏ
-E�pݍ��gs���EKc��΍`\��\h�FƓ�
UñNfԁ ����"�8�QLE�)�FL��������D�@6�[J��ݶ���c����' �x��y�ټ�ykk��g1gB�� mڢ�pA���	ۛ)	�)3R> �d,�8���U��=�
�L�p1���++��#�ٺ1v����v0��bڠ�Kae����0�*v���Ja���6YR�cK^ڬ��|vE�7��>0�h�qeU��V�8ݢ
�>dt�����{<
C�	U��b1Oz�?qBE����׶��`��(��

ߪ�DڞF�X��\(8�i�J�
IVn�z� �,�͕��K��F;I�
���4�z�-��O�
I��V01B��#�����m��r@�@{�L�"��	��L?�y�gE��)*��/�
+0���O p��c�~
��G����3Ʀq H��H�m]����@����]^�e���@
�F��|������\FtV��¡
+��.��z:
�:
+�sT�͑��P�Iҳ�0JȜUj��|&‡��@|�
�w��p�
�DG9^*���؛5R�Q����;
+!�뽝�10y��
+K
���\o���K� �_��0�&Pi
�o��f�Xئ!C�<xd%�yQ�5J�u���Ɩ�UK=@�v�F �:
��/��
�!@���}<�
c<�g���s
�M�x
�:Z����bmU�(��Dz��j�Z��*]^
�=i���ܙ�}U5�XU/?���8�H� 
oҨ�<�7�P,���|wm
�����
Ee�����S�q�ٶ�a�r��.(���Ф�Sl7�x∆�dj�1���ќۙ�V�nYg����xC���◞�/PS
�ݳ�@�Q��3P/��ب�e��R�~�Ŵ����#����f��imFb5f
�����и+^롃`(Arm�x�&�m�=<_�Y����8;�s��7�m�Xgנ+�߹�%K���j�q$���_/;t"�vQV��qH�
@*�$
@�H%��D
".=6�[�9�lK�TmQ&���vמ��G�?��#V��	�a�qV^-Pz��&AIʑ�kK�̅{j
���'���d�_��`����_�l�&�0Ʊ]M�{	N 1�D���� kUW�g�!�����I��Ү2�l�.�|�i�<a����y��%%8[3V��
E|�<b�-��!-�/T����׵7�s��]aUӟg��w-���1�l����jl�.@�%���@aT:����|{C�#�u܁S�ZU��j5Z��*��Rp��&�Ly��W
$�fRW�fI$��*�=EA*� [...]
+T�Ŗ(^j�(
�k��\X�:(�J���nto��?4g\i�
��]��&�.��J�I����旲5���~�ilIn���
��cLu9���)�� ��H�s��^@�!z��iǯ��ɔ�ל<�����Jc
�����
$���5�Mĩ�uF�Q� ���
�*�yk�T߿^tQ�
5"�:W�y`>�]v���
֏�{��O	$�-J�uM���f����o�5��EF�K�����cn���^\����⡋���
!t~��v:��ɘ�UԤ#O�팊�Tj|
+���[����!%5z٣�&
���!@��I��6�l�ܧ[�dq�����) ab耲���)��m5nߴvs:�;���3u?x�e��'���Q���'�
n���G��y����y��<��.�:JG��h�#�gX����L���>�E���!(��6�<
ʾ�;<�ށ�e��zI}J���̗�d6�]K�:F�8}iL�:3�23�S�u�:��`w�x�R
��V�1L�g=y)�(\|a%�/^�I�����P�K[[�;#��6f�#z�f͗��U����ǝ�J����z�
�z
p�N&�Mڛ���X�t� c�����YO�U7h�]�H�h��rC�L����I�09��.�i���ΈJ�e_���
�
;G�6ȴLhTEO̞Od#f"�z�Ib�=���P^�dt�
��J���A��^&�����
2hb��%���	.G,>�>��w2���D�����+�|�
X��
+endstream
+endobj
+936 0 obj <<
+/Type /Page
+/Contents 937 0 R
+/Resources 935 0 R
+/MediaBox [0 0 612 792]
+/Parent 906 0 R
+/Annots [ 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R ]
+>> endobj
+926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.414 647.395 371.885 658.244]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [287.645 585.281 310.117 596.129]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.187 511.212 417.658 522.06]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.555 461.053 245.775 471.901]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.1) >>
+>> endobj
+930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.822 410.34 196.293 422.295]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.35 162.478 240.821 173.326]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.926 112.319 272.397 123.167]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.399 112.319 346.619 123.167]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.5) >>
+>> endobj
+934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [278.248 49.651 300.719 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+938 0 obj <<
+/D [936 0 R /XYZ 86.4 726.045 null]
+>> endobj
+939 0 obj <<
+/D [936 0 R /XYZ 86.4 701.138 null]
+>> endobj
+940 0 obj <<
+/D [936 0 R /XYZ 86.4 644.061 null]
+>> endobj
+941 0 obj <<
+/D [936 0 R /XYZ 86.4 581.946 null]
+>> endobj
+942 0 obj <<
+/D [936 0 R /XYZ 86.4 507.877 null]
+>> endobj
+943 0 obj <<
+/D [936 0 R /XYZ 86.4 457.718 null]
+>> endobj
+944 0 obj <<
+/D [936 0 R /XYZ 86.4 211.24 null]
+>> endobj
+945 0 obj <<
+/D [936 0 R /XYZ 86.4 159.143 null]
+>> endobj
+946 0 obj <<
+/D [936 0 R /XYZ 86.4 108.984 null]
+>> endobj
+935 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+955 0 obj <<
+/Length 3641      
+/Filter /FlateDecode
+>>
+stream
+xڭ\m��6���Ÿޠf�WI-p at _��m/w�����ڵ[v%;�ޯ�rHK�V�-}��(>Ùy�CG�h�4�f��}�p��w��R�af���05�Eʌ䳇�췹b�~!9��Ϋ�2�l�|������X.Ů��"5*�
}��Ïw�x���L4�~Z�ef���oD���q1�&��v�v�d��6�7w���H̨)nr.�I9�q�r�,��ly<f\'p��>?�5����l�Wj�;
��C���ق���=�
��R�Q��H
+����W ��r2Xi*��Т�r~��_��!+J������~�����s�Uk�)�Q�!�"Š=�'2��?S�bJ��Y����7�������{>��!@�
�kl�M0[�/�`'���
+K}���Q'b���y�|����͜@�Y�6Gԓ��pO���}њ�9������}R��%.d��or�
�v��WG��:w
0
<rȟ�
G}���n��04
�8a�}�yr�
JF@
+
<��r)	�����t�9�V��q��A�3����7��N�w(�kc
(ʧ�`�\h�����Tk7A��W�}U85����P
�B�#�ߓ7�G\����
�Ȉ�wq�W�8Q^���
�V��(xS�f���x�r_t�k!4(#m��r�8�G�X&2�7�IPP���fmA��Zى��{�-*l�܁
+���� U'��D}��z�3���3��Tsã���ku���Oͼ���]d�#m�"�D�x�ʿ8\�ߖ��R��',��L����Y���S)-�� K�K�)�g��� @�
 �
���݊4+7�hs��P���%D
1'%�ɒ�$	;�y<�`��ݎ������#������\�.
]ϱ��
E�O�9���
̎ҙ9#=�=J��c;��L{y�g����΍}ȫ-<z ���Ì�4aRĠ~�N	�>��"�ԝ�/��� ���C���X��]
�z�U�w�iخ�<�VF=���ͳ�z��
��ή
�>�d
 $�[�]
��m&8c�r�R���m,&�8w���dS������6n
fYPTw}�E`�$9
L�*z�
w�H�
�|��>��(^gn�*/�f~���>����M7�OO��ű.�n��s���a�l�r�o��X]㒣�j�
+�j�P�[�`kw~
L�32�$�s�������p�e���/]�IC8�Q�$�
+�ŗ
^ye�!�"�G̅MV
�Y����유_1w�
�M��MV�~�i�X�{� Z���^�H�[�������%
ǐ�h�/QgeS �
����
B�=�tg̘�d��"7��zm�
<�9
4�pL�����d��-sz0�<��z�5���Ў<(����{��9�K{t��A��e����
�|v5�p�d��<�"�B����籨p���q�AhC�����hlV��'v�� ��{������GKG��;;��f��h:���U��A�,0E]�N�>`�8�m}�`���)�x����ɱ�c*����VĒS
K{���͙H�Z�ڪ=U�C����Z$��Cc��F2S��HP<����<� qI��7�l
{�=��CHOҶ�.ϙ)���A���Z�TdZ���qm��.
B�
���e
+�p_ljw�xmGcw�	�I:\KHf��4¥a\V�z>V�ᐗ$$��ȕLʤjk�#
�!t���H}��v��n܂�?&�Ș��>��
+�,N�4�ՂSV�c�
+mi�zw�Po��@���5X��![+&!v-$g��,���lj�谂�!��d
�@��͕���w�qy%��M���C��F��>7�2+��vA��E�{���.�ۊj�id��q�b�{L�P����i�sh�Do�̈́a��4�ߦbS82B��
�!������+@%oNA�#�����,�p�L<��
`�L�7y��q �k@$+��3�ז��6�t�"����p&�N!���p��� ��l��=����%���|
+l	j1���a]�٪� 6�I}+0赁l��$ϐ�6���ٰ�[
J!jK�` 7�F)�Q
��J��'��E�Oi�����颃W�S�L�S�pn	��m���o����p���<�~�<��-#�;����aSf(H*��Ϧ��w�j��|M[���vWCv��	�	��~�C4� RJa�!H�Fh*D�1s]'X�1p�X�'��=�dr��I$�J����e2݄�ͥ&j������x���\�4�t���FLAL��@��u{&�.�'R�c�L�Q������?�v���YՔ��UWcv�j����� 3k�k�����AԚ`�[K��!5�K��:�xr�N�1?'W��u#|'�Z�p�z�KnM!��֐ܞ[S`zn
b����sk�
�[S,�skh�ĭ1R{n"�Z�[dO��t�|�9�0�6�nF5Q�u5f�&�;0j@���	0��0=�F�*0j�
Ĩ	�
5�tϨR{F�Փ0*��w��9}�W����ë۠�y�����՘
��@�����&�
�������1s�&Xz����=�FH�y��M'�i$

��Ӷ���m�ݜj��qjL!#����
��sp 3pp���!L��)0a�z 2PvH%�}�u�(>��� ���Ր��	�9	ŕs
��#�Z���۰�y�������C���S`z�`�O�x>��y>&�| 2�|���!L��������WC^�\H�(�$< ��4�|�a�m��
o��|�@�H��) =��!�'�
�
�����ݏ�=b � $q{
+D��~DO�/�
�0~fs�L�}�[���[�M���n��|<d���'��������!�� =�'�$~ ��G
�
�$�O���=��	~-��y�!��	�/���Zm�x+ɽ��{H��7����=<��}��>	&1}�3}
+LO�AL��$���C���S at z�b:�OIl�$�_�Aw���ye��u ���} �&���k�
}���e
�F~כ�B�DR�{peG<��9�/����yY�7
x���',�P�)%�t|&�͍o�#�-,�.\�V��w�V��I
�p���3���.�pܻ����𢤻�W�-PI�TZؗx�/t�}��2,
��7��P*�7�����܍qڄ
+!x�ɖ�$X��JP
<yȪ���fyF��BWF~�����I *�7�o6�R6E�Jpᖫ!����g5�?����՚%��*G+J�����+��ƕ�`
�_�/�)W�`h�j�|�U�S�����6#?��P�`k��{z�{�}��A��^f�?9�]G �쨈�3������T\lk�~(��Y��g
�!ⶏ�D�bSbq�cNߡ _���״�����${���	ki���:�+���P h�h}	�X�#�J�;���t�JyU�**v��!���,��C��)��
+x]���-�}e��*��Ta�9�
wEeRy��;dq][������J�
��R��
Mj2ah�h��E�^�ά���넛��*rjw
fۢ��:veW9��럊 `��/DH'�P6w�򄁠��
7�S+Z�����)0���G�
�<*�1i�����i�����`}�J�2�?
+��~!�����kn�ݧ��+	^T���'7���(��)u�f$�v/��`q+�^����t׊A��?�c�
+endstream
+endobj
+954 0 obj <<
+/Type /Page
+/Contents 955 0 R
+/Resources 953 0 R
+/MediaBox [0 0 612 792]
+/Parent 906 0 R
+/Annots [ 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R ]
+>> endobj
+947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.061 671.306 369.533 682.154]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.801 465.058 168.523 477.013]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.1) >>
+>> endobj
+949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 429.746 92.377 440.594]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.231 110.525 363.703 121.373]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.888 86.615 163.61 97.463]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.177 49.651 435.397 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.1) >>
+>> endobj
+956 0 obj <<
+/D [954 0 R /XYZ 86.4 726.045 null]
+>> endobj
+957 0 obj <<
+/D [954 0 R /XYZ 86.4 701.138 null]
+>> endobj
+958 0 obj <<
+/D [954 0 R /XYZ 86.4 667.228 null]
+>> endobj
+959 0 obj <<
+/D [954 0 R /XYZ 86.4 599.112 null]
+>> endobj
+960 0 obj <<
+/D [954 0 R /XYZ 86.4 560.442 null]
+>> endobj
+621 0 obj <<
+/D [954 0 R /XYZ 138.11 400.816 null]
+>> endobj
+102 0 obj <<
+/D [954 0 R /XYZ 86.4 164.788 null]
+>> endobj
+953 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F14 697 0 R /F16 461 0 R /F11 694 0 R /F55 746 0 R /F41 961 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+965 0 obj <<
+/Length 3303      
+/Filter /FlateDecode
+>>
+stream
+xڭ[Ks�8��W�EoE
���
2N����3�8���
���K�I����ۍER-�:�Ah���Bf732���O�g?\r5K�D15�^͌��L�$V�ή���#���L�D���4������
]|9�,���{\�6Dt�_���"m�rS��y�����og�%3֑�j�X���'�-���3������L�$f�*f���}Fzt��q"%k	W	��V�p˘ɔIK+��j囼��"�˒�����5�YZ%�i��_m7�v3?\���lN
��ֽ�̀c	r�a:��<î����v>x����h[7��W�1Q�^-��l�^�0�YVˬr}E^7�2>�
 �:
(�0i��K�~ͦ�[��j(��
�e�Z����JW
�L���p�4qI�w_~�����D��Ё+�E��+�&{��*J}w޸ߕ�(�{ĉ-�iWUi"�v���sƢr�틇�
��uY=�����a�
d�
��*Kd7pJ��"
ݽ��_=��ڽ�A����ȟ9c�T؄���T2��[�lDq9e"JĜ��Fz��$�)Fb9=�f1Q�Oa�KtYh�X
������
p��rk�v*aQ�Ň��	�QO`@�I��oS�ĄzS� �[��7�m+s&w*��k�U
��H;3�f�R
S�#t��T�X	�'�|.�����t����X�_�9�%��
��]a
��
+s*c&���Ջ*��f��t�;(�
+�\�
+�ٹ-gf}�iN��ѧCc�	C�Mݤ4	p�MV�������Q6�bMY~�;�n=%�\�Ǔ2�O�h�Rh�
�V}�|�"GCv�o
�С�݃y��
+���Κ[�*�q��s�N=޿�n�����?J'A�҆����]�-#b��r'�f��@/D��4V��c���3
E���ʵ]x+
Qw�k�(�ᄀoR�Y�a����0l��bޙjt��a'�ʺ����a�i}?�HSl���.�Ay��`þ���fR�z��
�]ک�^!޼~�i_ Ʉn����Ō�������;��Cb
�#��7��)O<�n��4�L@�����
n�T���:�:��1
�^��ӿ��
�"N5�稯�@O�
�HܙG����;����ݹ�
V
�=��3%|�¤
��EaJ ��H�Sq�����߮?\�3v�$}�z���D�	�3	�J�{� 
�≇4���.��}�z���>$��{z
{"2%�]z�s��*�
�}i#tX�y[�
T#�p94�-���8�)�z52
��d��MП>7���G��*�$�'�ȸ'f,��I�k R;b�[��J�S(�4*l|�ձVI��GuM싣՗
�
z$��3��tF�໪�Zdk�5�}*��Q*�bҁ0�OG@�"�h�&85���1.Ib�I�4j�OB��md��C���rC��R�"��AZC�� 0��b>fͶڸ� �H
k��]��XdTd���6��ԫm�j���h
�Mei��Yt�?
��h�C�ʕ
�G�:�d��� ͐}���JY�v
�r����|ߙU
����qdp��?��dc�B���^�K������j��
��ym
"��k���Hp��.�>���cn�P�AHn���] `5![�S��
1Ѽ��6y3� |���K����`������TVEz�����Q!��'	 E����e�
�	���0 _`X�߆��y��@
�P�<�����d����TAS�4��v.�Y����҂yX�ʾm��VX���a�� �����=��_��0e���:�D

>H.s��g�&-����9;weD�]���|W���1�(
�#�#d�Ƙ�
�
xOjd/ܼ�F�H݌��0�'���Tܶn6�6B&��SJ#O��>�[U([Y;�6�-��m��FY�f$�+l��{�mX�Œ�k�/^��1�U�$�'\
��s�-b�ۯ&$$m��]|�x[_nF��bE�$����b��D���4c&�!���N}��lϭ��
[[�ė�`��on�b�o����
�{�w~�v�	��p����}aKvu}X
޼�]��֞�t�O�i=���zLk4��
�W(�&D��,C׶�5�~ʥ�M㩍�/ɸ �`�̱^,��-�&��s��WBZ��C
�������ˬI��p>
j$�yݡ��y���V7~���/ ���ihLa�c��Zx8�x��rJ��P4w#�0�#�0��r�
j�T�>��ͧ���ڰ?�9�B瓰D.��,��kx�_`�.������_�*�lє��!�T2i��0(b&�A����|^�{
��}�WS�sӃ��At	���ij��%�G�������,–}1ߴ��ó��� [...]

|��G|+`�i�qL�R�9	+a*r��oߏk3MO������h�5

��yWz�؊�JG���*-�� �F��-�e�#L�)���_6�Z���mUn��A�뻫��y��Sx�c4n.!�P><3<`����S�̞ʼn�(L%�<F�N�hP���
�d�}��f@"���U<!C��q!���j_b�
ƿ� ��X� f�'H�
��Ƌ
+�+>̿�F8.�,��[�����Nje $?�"�t�{F-+Ib%œ���%
v�:jQd7
(�. �
�<�Ꮻ�o�x�+mlI���-!H�U���'�Ϲ۪ʖ��u��2yܾĮ��u�V��Ͳ� ���\���Ak�a�M�
\�!dp}�1�,2�����׫����AVx��L�U/)!��:E	�h�p
�2��ʲ�%�/=�>��fz�'���2�u�甐��"h�ۡ�1g�A��2/;G��B��#
��aab���n��cn�%t�'��ᄵX
�����u��R{3�wԞ,�F��_-��N%��c���T�fs�A�8?����库F���އֽ�c��ɽ��i�jȨ�ɋ��Ԭsg�Ȍك�������� b�����֩@�fIJ�����[�

��[�s�i�02�W��7���M�����n�{ăx�;9������Mv���Ǖ�l�
�d�u�
�8�s�
��.���.�V��Po'(�׻#��C���~.kY����rV+�^�U�h���%y����a
�\����p�:����3W�E��j,�﷏�?�Q� ��MY�����[`��4�iZ��i�b�.�੽������ [...]
�
+endstream
+endobj
+964 0 obj <<
+/Type /Page
+/Contents 965 0 R
+/Resources 963 0 R
+/MediaBox [0 0 612 792]
+/Parent 906 0 R
+/Annots [ 962 0 R ]
+>> endobj
+962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [266.892 345.406 289.363 357.362]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+966 0 obj <<
+/D [964 0 R /XYZ 86.4 726.045 null]
+>> endobj
+106 0 obj <<
+/D [964 0 R /XYZ 86.4 701.138 null]
+>> endobj
+967 0 obj <<
+/D [964 0 R /XYZ 86.4 635.529 null]
+>> endobj
+968 0 obj <<
+/D [964 0 R /XYZ 86.4 454.545 null]
+>> endobj
+969 0 obj <<
+/D [964 0 R /XYZ 86.4 195.994 null]
+>> endobj
+110 0 obj <<
+/D [964 0 R /XYZ 86.4 109.386 null]
+>> endobj
+963 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F11 694 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+975 0 obj <<
+/Length 2700      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks����W�*2eN�=��|p�]�]�HVZ�a�DA"*!��ק{f�$DQYX�ĺ��A���D���F�����O���bk�����j"#�c��N/��3I�|!��},�b�L����͒�u�/_n7�*�7�|�c-팛�ϧ?
�:=�����"V�hy}��g]��#JDl�;��:�"&
V����G4
sH�R"�G'VD�
���*�#m-a�� �9�ZNS�v5$t�3����,�HON�|��f����`����-hkHl��Z�]�ۡ͵��<��FƓ׏
D׌���}�N��
���[�ߎ~��.o��:U�k��[�F&l#ͮA�DR֓�:����H�p��#9/�
��e g��s�?P\08
�����rYd7��g��
�4���00D�kpT�)l48�6��Ĝp��@y�fg�2��2	�
��3)p-Qܤ�n���M6aq^��m���-S�g�� �H�]q��N7H�*{
�+x3�e����L�K��C�����F4n���`
mx}Dt��	bM#�m�]xO�㮩Hl��׻�Y�y�E��Z���c~B4ڛs>

0�Ӹ���Ž'|��
�%��g�
նؤ�!��������P�znz\�I5r e���J����А������>@��IQ��O��t]�ߌ
VB�#&��`�:�ېmH�:�Ң���&��K
k"�	����oX�~�x\h��`�^��� [...]
�P0z<�}|�f�	��1!�6�-X
��+X��%�,�˸��eǔ�a�W~�m�*K���q(q�c+����oJ���"���m ��?�w
%�bWh5q���P�_�����&��>��
����1��o�FC3g�,�~�����}NR˝D���6&q=��
6� s/w� �2b9��a�JB3희�����D�I/
�!�?!�@hI�'10������!��x��i�EzL������i�}�vZ�ls���FH���J��Q�< =(d�/�
d
��v
+�@Q�˜�V��C ��a�$�y<d �_>)fp�$� ��/kfj̠'��
�5{SLc6������v�c�à2�}\�A��P�?
��
�gY���fD�3��`8{�|>
4�xF�AJN��S�
HJCg��3��q�{����3�ۍ0	������K"�C�`V)I�8 �g>�


;��f.7�_�

�Ó0]�8]�a�⢀��M
�.�]��/�dzB��
[X�餝��FRB��
}�=+�q�\*44�LO�R ��x/�1�0���_�8`6�"g|
)��z���c�>z
���!9DP���I�����8�1�:��>	��6j�������egFw��k�����U���k�����Ml��� Xi�e~
��M��v��/o~��UZ�
��`�&9�	o�gx4��������zV����n��;�
+�R��T�v���;�4�(k�~�y�E͘�����"-����	�z��ah��Y�+д
+�w��@P%�
�N��K�5�2L��ݏy��{�0 ����<��q(Ʋ)�1�A&
w�קׇ�cO?�P
X��x
+>�Cgr:|����1�/�����c)��_�+I��&�}@l�)�Mr���|E
]�g[�ڭ��ܬ3�Y=r��fM�^F�0A�r[����-Ӫ�L8AsƉ��ds��`��28Ӳ�uoV�8]�H3h�l�4���I
+��i�d�:M�ⶀ�e�A�â��>h�/��?_���3���}+�}x{���@��N�n�5�$E�n�x�p#��B�AfNѨC��%�W���R6Ǒ���*���'z�n����%�<iA�	�K$��~A/�W��:�L�
����^�$+�	�@m�R�iU1A�S5��E�hu���o�����<�iE���2���]�;���=�)�/��)��DwH�B�������Г \�}�j�4|�z����J�IT*�=�> 4��i�{L_@�Q�PmАQI���GR�~��5��e�
{,��`��-8�8F�|�����t	�9�%�µ�_���"w
+B�)�X �m���s+
X�M<��ҽ���_�
�5S���brsS�7E�P��;<D�/\��ZT�M'��BD����U�m�1�H�*n�2�����M��/4Fl;P�_�TԎ̘�H�&�N�M��ף� W�C��˺q�?�jL�4��eY��U���+pF>H'؃��(HUC�}y.���^��cgl0�
�b˚F�u���g_c��"������PmN�"_?tB7���Xcg'cٕ��-�v�oх͌� �s;��0�5$$��Ұ�t�i�y��]�
�N#<��
�kS�(
��(���~�̏��v�X��#����gQ,R��������Yx�"�rYE�̯a�T�%:�Hg�!]Z�*$�fJ���Q4H��Q�j���:L����ȧ#D
Z2dG�J�g˿�
+endstream
+endobj
+974 0 obj <<
+/Type /Page
+/Contents 975 0 R
+/Resources 973 0 R
+/MediaBox [0 0 612 792]
+/Parent 980 0 R
+/Annots [ 970 0 R 971 0 R ]
+>> endobj
+970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.99 201.993 232.712 213.948]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [474.059 172.338 496.53 184.293]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.3) >>
+>> endobj
+976 0 obj <<
+/D [974 0 R /XYZ 86.4 726.045 null]
+>> endobj
+977 0 obj <<
+/D [974 0 R /XYZ 86.4 701.138 null]
+>> endobj
+978 0 obj <<
+/D [974 0 R /XYZ 86.4 511.835 null]
+>> endobj
+979 0 obj <<
+/D [974 0 R /XYZ 86.4 270.787 null]
+>> endobj
+973 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R /F13 782 0 R /F7 778 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+984 0 obj <<
+/Length 4633      
+/Filter /FlateDecode
+>>
+stream
+xڕ[Y��F�~�_!,
h�̃��=��mc�3c���,����H�GW��ƕ<$Vu�I��ddfDd��T�;�ݏw?<�}��D��O#
�
�$��.֩�{(v�z:���01��������9��Mb���߽������m�
�����^.u�gC�6��o?ݽ{���N���N�yB?��.?���[�+��]�4�=Ѹ�Κ��Ъw����.X�;�^v�*_�/��
,#��p*�z-�:����x�k���]qI�8�0q��zhk
�
eB?Pƍ�O�X̷i��D{2q�ro��I�)�X�U��y{�d]�X��C�چ��ƽҵcS����pO{��¢w{���14���"�s����;U
24�˺j8�+��-�*G���
���l��̤�f��w{�(��l����8����B
��Œ��{ F�}[��<��a�&/�
��
"�����m���i�F�O��)�x}�ՙ�[���b(���6e�R(���w�M`E#����m��е��Y���$E��Ȳ����C��#/#F�LFc���mJ���Q�j
�U �f����yk� �P'NVϷ�L|O?gӂ��$hN���5�Į�x��[p��	���Őw�v�`	�D��^�+
�8��eր�˾���az���&t����.��S�U�-S����icϿV���][?
+&��C�
� �����+��S�6�At-�~�A���V�8�kUÿC�^/ʜe+
�⏲k���M(�~�-�el��J�H[��	m�%
c�8�_���`a��zf۴<u_6xH��1C���I�o�%^k��iy��3D
�
�r�xUj���f��,Ol�nq�'Y*��k�|��m�
+wbl��%��㳩F_�%�8��
+g�Dz鬪��~J�Qx�8��$��dSa��F��d���B����n2H =�A���
��Q|��՗��� �[+@k)�
B��0����:&n�@�8ebG����c�>,
+�iO��)�=5��[�x�T0
�ki�F_��9LM� ҃��f��|L��RʀI��6촟$v-�����c���k)X�څ)
�X����L2�-YW>"��I�X0���h�[i(����(�>
G�|�^-!���$B76�h�-�
���
���
+�#�[��
y75
+PwE��Ǿ���B(v#���Wר�ď��O/�
k����d
�x�L
ɿ��XW�Q���w�J��q/P~��a��������ʑ�֥kJ���-2�])����P"Y���Ċ
�D�+s<���J��s���s�
�y`?9:��!�؃��O+�:�3�rF�H9ݬ�5��.)C�%H|��т�0(���L�
ѵ��&]����,=ŧ*�Q��WC�U_�sW;�A.�NKy6�n��O�+��Z�
.]�9\
+z���A/�f/��sF�.��h�r()3�1�}Q�-�M!��F�d0􇑰��yrʙEQ֥PN�p9��������/ UE�1-���^p_�zCO
� iNm/Y��%Pgss	Q���$s5.@��������F���A����
���D�g�]*qc��H�O
�x�$H<�y�ztaL&��e� ��k�2

f���ש
w	�tۿNZ�P*��s5
e��r ��_�S�է�����_�兂��
�n�6n(%�u���"nd�r&h�1"'� � dnQ���rp�h�cM��-���V��:��<��n���^����[�
�tŀ�֍�0���@p	j�����Ke1���Xzo΋��Q|
�3
r�(�[M��	��=o�]�������뫎t	
u���
+�i�
ꗖ��'a�3��
���C6a0�������.˟�>���?������Z�Hˑ+
��|B
y�[�j �*�R9g�ƭ��=z��S�����4H��:�9���y�@Ƌq��a
+�>��c
NxfC�!�~��Q��^�xȳ��K���ł����v��"��ISz�7��� T�膞'��;lE�o6ә?
K��0��2h�^�]
���u�ư2�G���i�W�c
���\iJ�
WɎ��V����>kbU��|]J�@�y�Bv��)���b��eͅP�
��	��}��yZS
)#rɯ~�Ǻn��JY!W�r�T�	 ��bQPE�ƹ>�n�8θ�з�@�
+p� @�?�LZH
��da��T� �L�WTz�
'���6m�wb@��N;
O�u���΄)s"��j��D�"b�,M.�tGb��tn/�D�d�8�L#=R�ҡ�'p5�J�C��H�&)�
���4P|�3Dȡ漒H���T€
���~po���pU�b_�0��g�u��<c֝k6�c�@qX�0����|�RZ&�H\���,����6��!�D@‘�Ƴ��x��KUr

8�B���H��ol
+�u���P�:&SR;�Z��]X,��N�U��:��u��y����؈����Ga��Z���aؿ4
+��������YRQ4�.o ���R�yo��j���@ٮ�}��.O�-���a
�j�B"�d�__"�EB�
j'��<�7��
�t�&\�sU�u[�_
�c�x�-��Ƶ��6I2
֜��F�\,2|U2/�jUx�$ʼh�ڙk��1�m�ႁۗ�
z!w�;��0����
�)�
��������0���VVb%���
m���V�B��i���h��
+��Dq	Va8c^� �kJn���>Q�؀�)�f&�ᴢ�0�T^
Q�n
4Zg�(q�>������]		��4q���pj�);��L&&��
+p��7Hk��!�;��
�c*?�C�
�<b��<�E5��v��rAzͭf
�T64S�H�DѦ�*�UˍsنI�=�� �N ŌNZ.!A+���\���#I~�S���� �
��5�t�B��j�xbT�A�ʝV�+�Ω�0v
�L�@vz[�
��E�+5?
�1�
�w���sa�� �voǦ�B����W��@K5�
���+�D&�Rd�û�7
�*I�1>�Q,��A<��wQRϓ7Y�$�R!�'O�i
0�D�K�o��T�X[ѱԌtl�f�=;.�')�"�)J��5�f�H�Whj.�
n��z��>�m����#Y�
e������u�
V4
+���֕�-cT,Q��{��۽Jb��`eK�w�f�F����>tQ� �
���ͥ��_���w�q`��-i
�\:�E at Ib&:a|�՟�V5=����'��
�����0�����*?
�+:čϟp�=4�l�@�y�������賄���D>��ez��٭�#�q��Z{]|K�)��N��
=��c�:����u{	�࢓�%אI6�]��&
W�
����.P
t�6_0�
�ֹ��C���8TM�+��E o�~���c��g)�w��OK�*�Z((y���P5/W�

�e#��:|���\�"e�i�.c����D��Dup RW�NX$y��C���w�����
 �(��
�
f�a�^k�q���j+��?�'�V�h
����9�X�
:L]0��H�0��bA�� έ����Cـ��p]�,t����&�!��|?��_F�be�J�.ǰ��	l���l�_l�lݧ[@�8��G,�p�Յ����=y#9�a�e�&GNj2N����U
c�kOcC�a���R��O)c���ZϮ��Ek��g�7��:�Y�T�~� 2�Fo�'���d���ٖ]Y��"�m����A�K���v�
+�&y��g}���p���%6&� �cӏ9���ڕ�
Ϡ���(���~�8eJ���@�!�����b�����.�Qm�@S�:g�oܫT���ܽ���/��-?U���m��d�<����OqG =`����U� u���e0��of�Ȗp�s~�_��X�a<s�y��;n���K���\e%:��$of
$܀�10O��\�[�Ub�e�8O�N%�@���ȪU�rP
GU͎��gZ���ZY��?�>��m���A �D8�[`���.�v�x7�%.���c=n�=a��붾5��Sp�eW���)�tc^e�A�T��V��4�&�U9��
��ڭ�S|
���T�i"�N8���R�h�p8�&�Z^��$�غ�
)p��{\�hM颵�A�SU\ ��~�3~A�Ӎ@^#�Xv�� p�pj���O7��Z�[��e��T	�
�ޣ���:O�e���؈��(�YW���OY�>VY��b������I'u|��Ԃ�w�u�W �WA�}�O�K�~NE��6�J���>��v�y�
+��
�/��-� �&��,?���/�R`D�˜�Pot�*u��E)�
����+ص�
p)��8�u�w{�O�r�zJ+5_P�J?����������!�?���ࣆ`��cAW>�+�('�\��p ޿���r�C����H��Z&�c���r*�\�*��h^�!c�����(}H�(��>zR
���ؗ�i�Zy������G�a��*d=EO�0}�H��5�� �X.'ªí�,���O�-%�ݰ�������ߜ��7�3�4L�|�/
�҅*�� `Yp{�*$�
T���
��V�v�.Y�K{v�j
<��T�&9A��1�o3yr�g��4���[����r��
��Ws��
+endstream
+endobj
+983 0 obj <<
+/Type /Page
+/Contents 984 0 R
+/Resources 982 0 R
+/MediaBox [0 0 612 792]
+/Parent 980 0 R
+/Annots [ 972 0 R 981 0 R ]
+>> endobj
+972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [509.106 593.875 521.062 602.288]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ex) >>
+>> endobj
+981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 146.618 519.955 158.573]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+985 0 obj <<
+/D [983 0 R /XYZ 86.4 726.045 null]
+>> endobj
+114 0 obj <<
+/D [983 0 R /XYZ 86.4 182.4 null]
+>> endobj
+982 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F13 782 0 R /F7 778 0 R /F11 694 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+992 0 obj <<
+/Length 4232      
+/Filter /FlateDecode
+>>
+stream
+xڭ[K��6��W趚-�!
��J�&���$cg�
85�2%*$����n4H���$s	�
t����xq��߿����/�ja"��Z��,RɅ�&R�-ޯ�-e�\�D*�ڢY�YU]��2��
+j�
vyWֻ�jō�钛�����ŷ�_���4��d�(�j�o_���x���q$L����
)L��Z\���E�/3��R1�h�\\{�﫲X�J`
M}��]��z��Ԛ�J��w�����C��7e�õ�
c�l<N#�
,�N�
���N��/X
%L�#�u�J�rb���Kz{8&*@4\���~��}S�m�^���i�U^W������6뢫�dj�
x���;��I
+��c�I����n]fU{�
�D2I�e���ÍWz�F��K�P�rWw�^���.��+��.�h\��WŶ���i�74 ��u_�u�	�
uU�M�5eѾ�w���[��l��SasM�6���)w���b� ��EYVv	 0-q��R)h��?)'%���!ɪ�}ħdy_vw�V|.�Wfۉ����0p�6
�S��q�nT�QF���ߖm
��
� c22\N�q�5����ݗ"���u㋱���Q�5+|��)��A[`�a�
���_A#��&����
Y�"_�Է2�;�Ġ$@D\d
}<*LK�YS8 
&
7Ŧ���a�L��ڐ����
+�OmHN �I2� nЦ��D��+��_1��+&��ju���jy+�ڰ9�8Rʌ
�-��|y�
�l`a�Z�4���
+�D,�d��n^M
��˦@ �1�t�ܥ$]�X}@���U�
 v�@4��	%�q�oj���ܒ��\�uL�]�}
 .���4d�IE��."͒c��9�e��
>��T��c�1|�
܉z]�����y<
��ʅ����m�X��
"�����M
���Hg����v�"�W�ҧ�m��?B�Kx��9�Ɖ��桲{��
��Vn��$�r�]I"C�1S	�/ �+s��;��Cۏ�h�Z?<�S��P�����������X� �5�
<O���\�����n��(.��O��|rn$�
�����//�
�tON7�y{p�@�(������ʗ�ă=l���aO@�1���e� [�H��	_;��d?YF���)h���'K@�׸���^��ۤ�����
�
<
�ņ
�K�
+
|���-��œ�U&O��\�ˁ�}���50�&���8QUl����Б�w�%5�흍��í
f=Z�����rN�@nnx"Ռ��7����g�P;Ew�IG_�߷J'AG�;7�IE-���]��=V�H�~&�߸i[�3��D|;JfN
tc��Է}��oe��I��4���e(�in]6����|DF���
)��/���|#n�J�C쟚o>[����{��zC�ұ
cDGQy]�5K�������wy�B�^��^���+m�^��Nc��7e^�o.�� |�O4D�7;֝
���H�';F)TW�)� �
���2�

H�4!?��,�D�>X�ق��y}��4bh'K��r�(�
�A���gDB
&	��9v�Qwwg�ק�A�E7L��� ��3r����r8AI?Y��8ц���\���.aSo����f{��� �gC���x)���N?���ؾ����
�q��}ǰ��
-K`�Aeɵ	�q'0E
%s��Rc��E���yL ��7Ԓ��7�䲨8
�p��q"?����٦+\���
z��muY���Y	>���WXƫ� �	$
����b3���qS7n�!���o�- �0�
v�<R�ا�;b�,B�"_kȚ �o�����E�6ٖ:����.�E��v
+M�� �{Y3B���9�� �)vmh'U����J��|��&�g��Ԕ��Jβ9��T�Ծ
@}�(���
+S<����;����|�h�g� +��8ׇ}Ѽ���} ��Q"�h}��c�
+�Q���é�TN�SQ�LE-
���L5��%eQ,S�`�	f�R��Ifh�������Z%�>2� �0O��{�S��N �a
Դ
�,OU��,[͚ہ&��|2�z.>����
+��~�
zʖ��`=��qĹ�my��`��b[74���P�����;4�~�7�z�㘒��0v���Op���&�鵅+'r�\�yƒ�Jc�eN4�k��
?��C�h�fC&0�d�ϗJrԣ^l��
�Ev�����wm�4�S�0
�q ��7�4o�mB�k��e̹6΃X��Sq�3�E�j�z|�u|��p��[�Q.�Ϛ���q���BБ��r��e�fu�ޗ������qT�&�
 �Wi�	�=p#|�Y[��F�_McBk����!�#��Ȇ�k%�aH9ͼ�lR�
+���r=y�t��h�3��J�-5Q�dҾl޶�-��i�n�mf����8!��à��}�!��F�8e�~�4^vE���
<�5��;�Ij�O��
@��D�(��
"
�  cVV��𘪲��N;;*�qwE��Ee�� p:�.�nV[K��
+*�����2�UX��[4��� ��DE�����;ڐQ{�
�е΋}�o�k
K��v\iʯ"���
 �X�^Oxk�n&&�o�����
>X��O�;�
7�L�'/��TD��=�=����)�0����PV
��Δ�z�6�Cj�-vES��6�,��C�[j�f��=�#8m���F{F�MX�GZE�
-�۵E����͉TzJ����;��v
�`s�����k	�c�G�<��X�;P�7�/����9�ư���!���b����b�[
�]�DA�'P
+�

�����&
��ܷ���:5Q�
���8J
�S
�7���ٴ�^�yS:5]�5P��
y ��Z�{u��1�;U+���`�1p�C cI����n\�=&c � ��
�xa1W9���$MM�az�yz��N���֎~��s�@,�����."fQ��[=���&�3a���k�
+2�U“���ǪP����T
+
,�(;����
.
x8>OT����!�xIKy����x�$�L�HL� ;v��7V�����_cgL1����^R0E�
k;'�`qzL� ��
��g[�4Q�x���+%�j~T�:��@�(!ʩ�9	PH�0¼�'�LI�Y�9��#�x�@˵�~��U�6.��cό�iU4�\�
Q0-��|��pW�>%l}J�������d<�<�i��#��¯JAuY�_QcO#�I�4��jtL;̘�q���b�M�v%8�����ʫ����	�0--$s��Ų� �5��’b=��e�1f����B
�[����Ƨ�\R����"�ӭ���
]�9e�
����"ⱙWLlZP�4����*��ƞ�ƉvggD����\"���9�/w]�rH*C�kjHж
J��,|��
�@	>Q�_li��@�yYu(����
ͩ/�*���7
�?
�����Cty�bN/B3dǻf�OV�y�+
��c~������'��TLd����ike���9� [...]
�0���Y�H)~F=ä�>���}��r���%CXe/�كwԕ�0d���]�ǡ�s�MVV��(\�hGL]+ڣZJ�'48e�+<��;��k�@��10w�~�R
�e�wW�f� �~��t�P���-���q%"�LzN�WZ��1��@�r
�NN&�7ۛ�%�쭗�J{�-V
��
f�����W:���ޤ

/��
����H��1
���lJ�rj8��G�AJ���� +�?%g
�+��϶�$�����1D����X��ԒJ���m��<9
��pq� 1�9��3a�

p��S��]i|H���ҙ �hͧ��� <�s+_����⨂=>_���\
+r�GJ���
+%O\Ù����I?y��JZ�s9�狣	��積z쟫��dB�	S
��(<��Ԅ�������a5�
+endstream
+endobj
+991 0 obj <<
+/Type /Page
+/Contents 992 0 R
+/Resources 990 0 R
+/MediaBox [0 0 612 792]
+/Parent 980 0 R
+/Annots [ 986 0 R 987 0 R 988 0 R 989 0 R ]
+>> endobj
+986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.661 532.495 217.132 543.344]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.26 532.495 256.983 543.344]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.724 495.967 241.447 507.922]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.288 340.883 234.262 351.731]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+993 0 obj <<
+/D [991 0 R /XYZ 86.4 726.045 null]
+>> endobj
+994 0 obj <<
+/D [991 0 R /XYZ 86.4 327.356 null]
+>> endobj
+995 0 obj <<
+/D [991 0 R /XYZ 86.4 80.492 null]
+>> endobj
+990 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F11 694 0 R /F16 461 0 R /F14 697 0 R /F7 778 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+998 0 obj <<
+/Length 2894      
+/Filter /FlateDecode
+>>
+stream
+x��Z˖�6��Wh7Ԝ�!ހsf��1'>�33n{cg����L(R!�v���* |���n[
{1+>Q@�n���nf��?^^|��ə���rvy=�2�3EM,�]�f�"��Thf�7������/�fѓ�sF�_�>s��U�7<z�o6E�L�yU6�_/_\<����@�Ɍ���Xs9[�/����V���,��ѳ����3S�+f�/�}��q'�����!1Q�
�i�,�|�ð�h���-�$���`�	��w�����|(��hgE>y�2ݤ�ߟfe��߇�$6��?7Y�-���c{��'C�sK��˻մ\��$a�oE^fi��6Uq7�:��sZ��M^�p
+�A��f������-(hȥ��Mb#�鬖(�w��q�МDK�mw0��m�@;3��9�2���k\�u����n�t�
�s�࿭{��e�[�֝�¹����֪Vپ{1�b%�LJ'�
�0�;�
tȤ�M"A�������ۉY1�w��+;+�����"�C/\0�)Mh����n��h�m4h��A��@�	��c����<V\}�Q���̊��v����XCÀ�IՅ��D$��b�:5�
�XP�}��
4�Cq�{������ٞG�j�SA B�j5p�9����SӤ�з�?:�WEe;v����@6������:b:���<�ry��<G3d�buuUdkg�U~� 
������&���'��j�ws!���ec�I�C�%�_
 ����7���&C@�uJ^�;��ǔn�u�S�����0pi�>Ʉi�9u�Z���w۹^�d����$�$s �0	٢s��4�D�p?M��V�)`4-L*m��\`nH�S�J
��T~�?
+�}�'�Κm�/�0� [...]
+�0�Bu(
���� #��<�
	�!��R Bpp��R=y�#2����DŽ��~Ǻ� ��t?N�6�̏>-�c�
�R
26��]��+�,:��d�~N����HL0|H:߹�����n������>d5"�G� ��a�^T�#�?F�!%�G��U�@�Lpd>��X��I����
�2>[��7Ȑ[R�2��C�f�(��~t� J��Hб��E�U^�j.�
/��
y��Q�dWuz�b�
�j��[g�
�M~�����fE�Mqm<6y׆���-��/˵���
\E���\[|�]T���� Is�i�{�������np����G0G�j�|��
���j{��<�RO��>�H��U����Rw/k�]�Y8�r[�0E��3_�='sU 0�-�����B3ۼ����
4C�>�
���^�B�
^[���nz�������|��y
�͡=!?����c(��Ģ짖�P����H����p���{t
�����@�����D��U��,��(�|"z��ɓg�_�72.'��>�뫇�
3P �ηyZ�
\�FE���ˬi�wʼn
�a|t����)(�WrcBl�r����g?Otj�:K�F�$��՛�/�L
�~����q}d���"%�БshA�Ɛ�=<!E���E�]�ѷ��JVv
[�,ӯ|
w2
+�O�y�����#�v2��n�>�dg��9Y����|���A��}*@��pP���-Oi��ֽXV�
 �D��Cn3'|�%��������Ĩ��5;�/�ګ��q-� ��a�\;
���ZE��0�R�]*�Z�,�W;
���l|
��ƽ�/d�m��HP��_�Jl����VZ�dm)�kNF	Ov����T�"�GS)��z9\H$|�(b����vl�Ū�59M����AaG�T9Gԡ$����~�.m�
;|������c�<�Y��
[e�vid�����]I�N�"[�q<�lDS�EO��&v=�45�=u�W8s
'��Q�	���������U�� o�@�w�����rӞ��4>0&b�D<_(&�_����Pq
Y�'�;��U��t�I�[>��; ��{c
2�~	n^v9�ٕ+�d�$,+��o\��^���	�,%Ȅa� 6[-���7'VX�]�
DO� ᄒ�1�d
�Lx���d�
�Ӑ���
��H��@tc���Pڊ�oUW��\o&CF��H]T�ƴ��
+Ԉ8�
* �1!C6��:KWS~> ;�w�pD
�9F�5�`$z?a����/���1���d�w�
�uo��@H�uOv��eʿ��r�ڕ�@�~� ȯD��.J�\��m���X06�+A�]�N�����m��fX�g}ˎd��!	.��ПP���8��1���'r~0���+cQ�����)CA����	1P�j�?�@���=)��d��']7��ܱ��C�4q�ˑH��
��#�[�8�
�
	�6�lT0
~:�,W�O�|�?�g�ۏ�?�H�FPr�
����`L!�P�~�> H��:�i�[������
���]@KM���%�k�d��rJ
:/��
�#��H�G	�-
T�³ۖ�����!\��r�;.��
��r��x���#
j�96�P5�+�C�e�/S �y��m�ꚠ�����Y
l�T ?��<x;y���D����A.�% A���e�ٶ�L
��
j<|&+i2⨡�8鋒��*?�N�Pa��s�����.
�Ɵ��7
N���'���~xh�8[��~��÷~�M�ސ [...]
+endstream
+endobj
+997 0 obj <<
+/Type /Page
+/Contents 998 0 R
+/Resources 996 0 R
+/MediaBox [0 0 612 792]
+/Parent 980 0 R
+>> endobj
+999 0 obj <<
+/D [997 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1000 0 obj <<
+/D [997 0 R /XYZ 86.4 560.092 null]
+>> endobj
+1001 0 obj <<
+/D [997 0 R /XYZ 86.4 210.175 null]
+>> endobj
+996 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F11 694 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1004 0 obj <<
+/Length 3175      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W��V8��c�r�*Nʉ�u"9��9�$$�B
@�v~�v�
@ I�B���\�0�~LOw��N���]�}���G��zr}3��ȉ�h�&׋ɛ�$�|&�����r6O����&�i�}��盬ȫ�wZک`�?_s�����3l��d�RO櫳7?���|3�D8;y��&R8�a��\�}F�2�t(%R�ct'�	u(�&�Z¬9FfsB��$���m��$�c�
�u��/_�Ϙ#��O`�][C�����Mm���F��ţmq��;=�5#�+x�g�,����j�E�񲿥���E��.9�r��v�
�	ۈ��z.��0����ga%�����OqT���J7�)����'f���)�A >c���/�j^fkt�λ�73�4�^��v��4�g�V�^ ����J�?��0QO��e:�T���.
�Y{�JM���
��_��}���5��Y�&e Z��sn�����$_�Y����&m1��m�M��u;[d%,Y��Q�€�T��b�,o�we�uvΦs�+^ulZ�xZ�k�h� �(�V�$���uYܖ�*\��9.w��|��.�ۍ*��=͵��rБ��h;�I��Oqd�5qT{R
{�`@r7��H��ݥ�"��|K�\���3A�]c��{V�nWi��j��M@#��)ALV
�S4Œ!Z
+ %a����Gv,�D��h���Xӈq_d��>�U at b�&Ǣk���i������9Tgo
+l[�t��4j��TN]=�-ʏ��e�ϑ�/�X����:�` 	�xb����NQ8��,�쯞aDg*+
�VAS�

���}\PS�'��O�5Vɇ,�U�����󖩷!�C4/���2�E�ke��XUG�M
Ȫ�զ��7ɼx�%����wLS�p�~'U�(զ(��:ڢ>�2Ӵ�,>�Ѩ�
���j��f`��Q�\c��
+z�ÒYsHfU\0
3�&��`9-}��Ivqu1�߀9��!��'

�b��JC���X�����) 	�M��ʔTuu�~�a�.���B
ã�?j�i���a\û���M�/0,�%��"�N�07	?�b�.ӪJ!���թ�n�
+�8L_nWy��)>�

2��
��y���7�W?�[GRy�(���)����q@�¯9n
�t�:(O�:x
����u�FTȡt�s��-5��i�S
C�*s�a��A�e`?i)q?��ym�l�;?,�kE�v�4�a��
�]Q�9�H2]{�y
E���I�Z
O?d1%{�m�B�K˲(�
÷��f0?��mc����[n�~N�`M�X
z��Q��-�+p��0I��i���|�3ӏ t4�Ph5�l��c(��G�7��s+������^^
��$;g���R*��z}q����g��`.i�4�t��Ѻ�p�ɒe�[\��
zi�Ym�s�B7���
+�3�E��=�Lc��fe)i�H����N�[�0u��.���/_
1
/B�YO�#�n�z��!G�
+w�u�^�����CY��}�"I��?���^m�x���;��ɹ�9�����Q�
HIc�h�a'�ip���W���e�����c�л�����!�r�!�߄x�B��
O|-
��NٖeL�
+v��.���
r��u�?���*�}�Y� ��N��I��W�}��V�}�G�)�F
+[@JX���5��Qm�_={���,�{M�
y����&����p/p�׉ů۴n/�$�2]�oH8S��H	3�W�.�}����2�Z1c� ����a|�(��:�7J@
��?�
���ޕI�4	)fƾٸ�жL����v/�
+Yq�M�.
l��2L��=�,'R�SAH�b�!�9v?��so�|�
+H!��Y4<	j�A�Z/ӺϗDx��d&
���e`({2R���!:Ѩ�X>*͌��c�!��
w�l�pX�
_�{L�@|�Ŏ��g
_	����8L!�����
H��P*�F
X�@�P�ˏD!؀���:/�p�Î�*AewWu���Y�6CJ����%�2�e at Z��$��	4��
�Q¡On�90�+c=)�b�V��|�
�A^�
��<��n�A�S0o
	��
�Ȯ��]�&�!����Ƒ�2F��v&�S
8;�V�DJP{��#�	�+�Sx'�q�4��v��/_w=�+X��O���WB=B�㠧j�@�FǠO�e��}"�	�9e�+��̷��
+v�tcp�CUe�ܣ�ט�{=	�r ù��ըSPk+��ܴ�
+����F
\1�lN�
+)/���^�S�Z�
�j��Y��+
ڠk\� �� �^���T��i� ���n�
f��fER��Y�
���xW�`�D,���Z��Lb�I����������t�RN���I���@aH�Qމ�G�Ω�|���{Ӑ�F 
4j<ndB
0@��a���������]��[7	�nY~�9FJ��1�Q-�K��
@�Ċ�z 
8�:

�dFp D�v�-�!��3 ��?Y�P��ɺ'&lS�=%րE�a��䗅j�A�l$]�����r\���܈�m���
7�9�UCYl7���
Z�]���/���@ĂA������(�
S�G�����
���9�Vf| MC�,�Z�
@7J'I)��N�L}'����F���:r�� 4&�
�Q��HJq�  m
���:,G �@�j����H���&��1�Ʈ5�hw�������9�Y�����ؘv�%���h���!�l��|"zQ�#

RH��(���â�L�c�Y�p4F
���0����8��k
��xd
�D=���!œ�� �[8-:�`=��hax2���)Ɠ0�8 �qe�&O��`�&M����F�j>�
���`
����(�EՀy���ʿ3��
̞q�p?d��� ����i�#��j�<#�^L�x<�*��<�R1�yF
F�����y���)F�yʘ
8bd�R��2�2
BR��02? �c���]�@�&�����č�v�8�0����؞���C�B߬k
�Th/&G{��Uțn�r��s�p��m
%Vv�g�u�'!`[�,��2Y�aVv~C��zĠ
���z�	x;>�'��ٝ��>!3{B���m�C�	���u�'��
?��mʙz
+�e�a��Qb����߬����X�ɗ����~� gf�F
+endstream
+endobj
+1003 0 obj <<
+/Type /Page
+/Contents 1004 0 R
+/Resources 1002 0 R
+/MediaBox [0 0 612 792]
+/Parent 980 0 R
+>> endobj
+1005 0 obj <<
+/D [1003 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1006 0 obj <<
+/D [1003 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1007 0 obj <<
+/D [1003 0 R /XYZ 86.4 364.079 null]
+>> endobj
+1002 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1011 0 obj <<
+/Length 3061      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s۸~���[�N�ŝ@;}�f����5Vv:��Z�m�R�BJN�_�s �&)J�#�Mg�E"A� �~���͈����89���#K��z4�
M�(�h�F���C$��+#l��t̢*[ܜ����_O���t�o��/d��ߟ-�y6MVY��N��89��|<a�.
�z
E�ԣ�����t4�'/F�kF�ܼ�H
+K8\�˓����Mk�L����e����|Z̗Y��`?4�>e�[�vr[�ɬ�;
}��9��:0���7��3֖�
��
Gq�NW��sB­p���ş �ʆ?�WgE3�l�e�X�����-�����޼ řh��Sr:�BEמ��f7-�lNab���UP �јkA�a�1cĪ�xf1O�i�
+�I����ݗ�4���&J9��S�)ZX2���2)�<���QU�j�8E�,���������������ŖH�K�Xc��h�V�11�*H�s/�W����b�æg^dBP�X-2��^9e�جm[�5�<`�X�Y�Wo��d1�O�أ2$��a���PxS�H}�A*Nw��V��QR���G�\��F����
)����r���Y^O�AJ�5]�.���a�JV���Q�9�u���@��,��(�a~q�7Q�!��w
����ý3j��g�l��,�<)So#��}p���MX.���)#���1���˭��]�u,�֋<�*�0<�����1W�QEo���EG3Y�+F�J�a�e�V@��|![��5��ts|��;� �]��R
a*nL�C at Y;RV�]$`�$ܴ�]�
�X
�m��?���,���6��ϣ��q����0�5)zrF%�CHu;����!_A
{��c�U���YGۘ��tS
Ӱpk�P?�
3L�n���+J�6����9���{,��3-!�axЄB2t/��V�2[b-�yw��W�h�\l�z��ֳz;b
vt/�{3��`Ib�ļ*�����p	��n^��Ͳ��h���
�zf�-Ҥ��c$>H2�RV)�F�%&��T�	�I��˲�)����#�u��w�b��gi���x�W:|
��j"F�*Fb&��5�T;R��»!�i��c
R,�:fY
���#���f=O�*���^�E$
*E�H	{ԇ��A���
@R�ƍ���0j
7-���n1q��]��|8�뀜�c�&ǂm�|�y�y�K���:F
��

+�"H���p��
��Kh@�*�5�����d�Õ솊w�j]��;U*J�u���{o*�����m*L'�n�I�ˎ>\zG!�G~	�@�"����M�`��Glj'
��X����Jc�0��{@D�8{>d�E8�E�An��	$%��.�?}z~y���!���<&��n�9��A
+<,β�>�
�7SA��z:�j�z�����P��B@��������cHI�Z���_
,j-a�cQN������˗;t��	���
ٮ�KCI��Q؀���.!�������b���M�$������6"��
��V�QD�+c{ZY
���X�R<$����a+;|���:k�~�~�x3��
+(]��+V@��i_
6���Xj��zW1�~��Uv]1��8��8�ux84]�e(D�P��b�@�V�"��n�A�vْ	�Ȁ%��:J
+ at R���_���֒��.�Wg��n*	5B]��2G�~\�u�}� BԯY褺�y_����(BC�>l���/�)b��`�R�s��l��
8��
�b��h����2��Ӯ
+�;����R��Q� (��D�	��!��pA�tѶdD��ê���M�	�N���V� �+�ƒ;*z�L���~�(�
Ñѕ����//�'
x�G9,�ф�F� �iX��1�U��U/m2߄��zx�E���yCM�e�
��Mщ�l3���4A�����
+�K`+��g�	����r��x

'����=�"��^bIx���
s�
�[� �U�
��iq�w�\ �;�)H��@Oz8<��
��:_.o��>���~�}��}���
�*�HO���*��.�Jq �2B�<
��
�;����oe	m�e����|��Bf����@W��l�Y1�]I>�|U
��
+���ؕ
rXTCX�i�{E���
��#Ba��7au�������]t��BX��ݑa_K@�eğ �. kB ����.��}ё}�7�$%xw}�U�ĢG}##�c�i��e�\�wO]q���qȝ���
�9�ƻ��
�^�
�^m�kK��Y��w�O���!1范,�<Ȼ��!� �]�U�߼>���7F�d`����b�Wu��!2��
|�ڃܑsph�h
kbl�Ǘ��&�C<@2f��9~��Q�1IC�������?�]�Z��h9�#ڍ�0Pv���L��Bd]&~|3��@jr��n���&�Ap�̻�
��Ƞ�cI�.*W��4�@�pԍ��_��w�Z_U�d��
+O�*���&|U ���z����_2�	
+�ؤ�zު.Df�u��W�Q����Р0�U���xy9`<���#<�`� �
ϰh,�Qj��Wg�z�)��@�� `�aSぴ�X�-̾�S��:�|냓�97�b
�HxU���ā���"90+�}pb
Y���z��}i�!�'U��cȓJ���vgHH�GX���g����:71��(X�8|`qe�ll?7�_{n��87����@ Џ43>�<��!�o�?�Mj3;¢��u}��I������ij���lF�`fM�hu0��,|d�NSZ�8�=�Z 3�?{H�P�1+��[�
�U{��#,�趽��2��Y���,C��GJ�+�28�=�'X���
�1�z�8"�8PM�y.ulx�?����?� �5��O����K$Lǚ�6����1��>�]�
#�|��Z������7��&X�;�Tĉ�	ϕ+�pl�cL���
�?v>
�fP�&�1ʫ��v����9gܵ�ǂ���L�������06.�
������&�-`�A��;���A��~�8�FTL [...]
⫆`l�z_?
+����
+c+�{�CL7�O{�]��*�a~�e
+endstream
+endobj
+1010 0 obj <<
+/Type /Page
+/Contents 1011 0 R
+/Resources 1009 0 R
+/MediaBox [0 0 612 792]
+/Parent 980 0 R
+/Annots [ 1008 0 R ]
+>> endobj
+1008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.506 145.544 243.229 157.5]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1012 0 obj <<
+/D [1010 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1013 0 obj <<
+/D [1010 0 R /XYZ 86.4 611.188 null]
+>> endobj
+1014 0 obj <<
+/D [1010 0 R /XYZ 86.4 378.057 null]
+>> endobj
+1015 0 obj <<
+/D [1010 0 R /XYZ 86.4 128.819 null]
+>> endobj
+1009 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1021 0 obj <<
+/Length 3026      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w��~ׯ�[��p��]4��j9JmǑd��8y�HP�)I� hG����� x���M�X3;��o�G�#<zq�����9��E����|�%�#E#$]�F��
��	�l��H��4^.O'd
�,�<߬�e����	�$�c�N������ɇl�Td�\��������
���#��'��j�Y�(\-GW'?�`�M��.׭���
Ɉ ����]���w��E����k#��}�,�y�C�!�D�L�.�#s��o�
9�p���
�B��i�
&<)�j�H�lo��g�QZ����=�7���n)^�����oS����L��.�鑁�1Ϊ-��|~�m
i��:d �
�0D��ͳm�	�	�����Ϸ�G1�(�v�]��'���=��*�>(���|$U�8}��2�1��`������;$ �$�k�_�T$$b㊃;F��//^�зs��h�~�xP�#шF��q
�� "��"�H ³��8�{�	�Ѝ(QSn�)w���ߖ_%AP�
����,D�YzJ �!�&�҂{,��_�9�����ef�����MqO���3	B�w�)��A���f\�i���^2���KPR�(}�	�s��#�d
o����	!��r���FI�t-�ٻ�7/�z\�p��#C��G�(+nIq�k׫��|��<
Q^��_���X�Nn#(�2�	�Z�g�ˤ��k�
�_��7/����ו��]ot#�i�Y�-�����΍_1��~��=xQUBz�UAQWvXC=-��m���b�7䈀�j�u�x�
^�"N)�^�/ Z#��
(AHY�Wo�Ξ_]
��tV3D����<ӏ��ʹ�B��x�0�5T�x��;.mT�}ra�Zl�Ӥ(�%:�Ј�)�>1(C�A���g�����B�9d:S
+�lMl3}����=d�p0�e��Є�,�C
H|�ȡ#��P�U��	;x��a�"8K��Q�$�Cp["��u�V*��h
(�С���7���^f(U��›���
ϲ���7o��c�2�~�Y���y՛�	x�&�6y3�tX�e�ҥa6^ga	Ng�
+d��ʎ����8�a�c��1 �ڴm��O/�OO��!V���i���ZsZ�r���&)J��<N�ɬ�E@�

4+��L�n��$t!��G0�1��Eu}/��G��#)7
^�b�S�(���u��v����v4����*���B6�?����,��ra[ȱ'eJK����Jɐ�tG[�L�I�#��/Jȑv�j�O����Y.����mǂv�l��ބ���k�V�H{H�Ӧ���P�V#����Ļr�a���"�V<�sWxx_I� ��Ew"���~D;3�О�#	bT��DPa:o�S�o̽�*��p�
_*
5(P	Ƅn/B�;������S}�'wL$��[RL���&�N�"IS>*���J@�֍�?�j`YT��"Y&����7�p�%k�r~J鸟�D��	��V�
�A�\�Sb*���ZVHB��|뻊�uU@��<�1�2�6URM���f�t$�Ԙ(�ׁ�I@�/�`�$��18P��%�I�U�,��l�H�Y��xp�tKcб���4�ݬ���㨐ۡ�8�(q�`XzrC
��YRӠ��6��Rч`,�t����=�H������M�*�38��jy�	
��S�(�Ǧ_`㛥��S��_�;��Fa��
��,ȠH�!@lCJ)=(�-��9�C�> ��!,��
��Cl����ֿ(�=��
�
��@�
C���P�!�9�e���lf�:1�8!�U$���8<[��~ ��$���jRB�H
��B��_�
Bhb�ڌ��
�f��.�H{ ���L���ѶeF�� ��61b�1)��Lk۶��o���Am��F� ��^h�
+��چ���lچ��s��ϯ.�mkۑ�,����
�Bt�-n�[���4������
|��6<���({��
��-Q1�4�QJ3˃2��Δخ��m#`U at 3����~(�:
Q�1sq��ͩf�H�`�_
�p\�z
�h��L��&]�.9�5�����!x!w�JOɶ��{Q����
f9�%�V���<zԓ@C�%
�T�6�g>ҦƿL^+�L���O�	V�!z��i�X}������y�t�ԧ��jf\���z��u����}CԊf��u�������5|˳��4˝�XM�_��0��m���Y�\_�P�2ތV��=�k1��x鼳�Z�
W�˳�%��
��hK�T�nިt�o�f`a��kj5;����t/��¥3�Z1/������WA(�&0b�e��»R=w-W���4�\>�[H���r
ئ��+wb���
}��v��Q�f �0�(�>#��_��`BQ
:�#�B��
&����F�3�w4`�8� 
�?�#�\Xˁ�Z*�w}�ћ�
�ǝ�k�`!��9�[��|�o
�QL��
�q'p�
:��X�7vIS��tì\�&u��"�RP���V
�*ܺ��Zo��w���nIx��L
+�af,��)U�G>%�=e��
��i�À_�
�ߟ��
���D���ǀLq�xmd��2�œ�$fӓf��Oy�|
ҔC�uH�O�uq��ǭ��j���ћ���G
�R$�ߎ�£�j�1�eU)o\����h����,OLӶ=��@�4/�gUsd,x��M��
+pߎ�:n�
�>�� �kT�f!.���,��f!5j=s�1Q�9H�=�b� 
��3���g:�iމq�h��gM�w�c?��l�vU�,iHS3�.�m5��v��xo���	����\�L�9��o�=��[ot`
W^(�pzP^>-��:�h�b�A�I����va�
����&*��U3���c��x��2�u
���'�YR���:�Gđ�]
�����IOO��
+�G
�H�>67�/��3
7�5�@�('
j~|ۚA?��{l�>@gw+S0��� ���ݰ,QQE�`	�
���f9ԹNt�\GDH �Qց
G
�ĭ�عF�'=�0��~�S����*�0�
+endstream
+endobj
+1020 0 obj <<
+/Type /Page
+/Contents 1021 0 R
+/Resources 1019 0 R
+/MediaBox [0 0 612 792]
+/Parent 1025 0 R
+/Annots [ 1016 0 R 1017 0 R 1018 0 R ]
+>> endobj
+1016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.506 549.078 243.229 561.033]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.506 301.681 243.229 313.636]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.501 95.662 348.973 106.51]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.4) >>
+>> endobj
+1022 0 obj <<
+/D [1020 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1023 0 obj <<
+/D [1020 0 R /XYZ 86.4 532.64 null]
+>> endobj
+118 0 obj <<
+/D [1020 0 R /XYZ 86.4 288.843 null]
+>> endobj
+1024 0 obj <<
+/D [1020 0 R /XYZ 86.4 207.36 null]
+>> endobj
+1019 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F38 517 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1029 0 obj <<
+/Length 4241      
+/Filter /FlateDecode
+>>
+stream
+x��[K�����W��`;Do�1!�{��J�Y55v�؇Y�]
6�S,J���7@=Pm�'�P Hd&�|�<L��/��4��Xb5ד��$�DN
�D
6�/'?M���q�	;�t5c�m�~���LL��|z���x_�ؐ�k��f�Y���)����󿾺�����t�Z:�dROO�~�'�,��_'��M��qO),��ZM�^��+�M���`�L�N�e�� +�[ Sɘt�Q�� Y��M͈U<����}���7�"D3F$�1��߼}稶
�����*�p���9	1}*����r��V���.���شZ�w�y�*�d4}�����S3�1A��g0��)��a*	S9�o߽;��
m���ç��ܟ?�������9"�,�ֶ�x�#�2�kߗ���ʲvȇO�1�,��y;�_��]���K"T��u�܇u36
�6݄��OV��n�X�&3���H�UX{��x�O3�M6}{K�j�㏞������?�
��h*��d<� [...]
}�:��\��oa���9V$X�3b��YPUM�	lS�`��ԔD۔�E�4a����+
��Z6q�ۀ�I���UC��W��(���1��m��mf�T at GQ��XK���p�m��I�^�`f�e�X �p�:_�7ۦ؄�k��:�;G�uo¹.�m��GバbW�ㅼ�{��]��0��K)
�'SݏV��W9�O� (z4�\PL�/�c�/�a��(5�)�vOa�[?�TѤ��De��(�|��C��T�O�
^�(���S���=c�](���\s��x��]a}y�s�{
�vn���%�w� ;T����'6�K�Ry:u���u�
vΟxe.e��rz,�
oq���[�Wy=zṳ�o�{��
t�N���
���J��M�	�*����@)��D3ن����Y����;M����
g�$2�]��
��[
��H$�� 9 A��$�٣` Ύ�
D(��� ��)`4k�
+��Lf&�
��*c�%����x�0�Q�[�`w6�h��M�Ň��T���=��U����q{G�Z|I2�K��T��,ǥg���P�گ��vMh>���5�������
 e��&`���.���ܴ��0 �g�D�-�Y�I��jF�lh����U��
�P }A;Yp�
����r� '���},��g��<	< @�:�4�� $�*C�7ѕ2��Y�v@��<@�DZ$�m�����_֚k��#����ZKݐ�d��Ɨ�\z	�}����l|K"�;�p�U��9f�9�� �v�\�X�\ �d>�D20���؋D5<�=�}	��"_5ϛ�&�g2��,��_[��/@T�ƿ��X�->�n߻��6��]��9�v�4A���.�S��E[�:\��̇�������W�[�-\�

6N%h��?������;�c��N�
d��'�
+j*E�W���O$��3��˗߳W������t��ӍKIv!���Y��/ŏr��
��k�bVd��"IN��)D
+�.�axq
�����o ޏ�l<�g��Fx�ƖG��_ुd�t����f��\�8O���8I�D��L��ߤG�(	�lFj�p����wI�lm�����
�F���A|�s�&����M�󕏛`ow����w�F��v�eޔ��uN�ʱ��P<�#�EW��v�Ʒ6�v�$_�xxR����L%)���F]À�i�l�:*`�p�J�ǀ�gQ F�
�hٳ%ܴ3�?����n�*�/.B  ������;����C0���L�;�i c����}އ��1*��98D�`dT�6g&%;�C�� ھ��
|��J��7A~�)'m��FlP��7�De �DL������o~���LP��Z��!��k�چ��]Ј����o����	[.҇�X��T.0��|���ڭ<��!��&n�Qw?� ������G`H��ص��j���K��{���(�;+�N���z�`G�g"��N'� �;��?�}Q�u�l���
�]�˰Z
_�z� [...]
!ƭX,�o��"�8fY�E� sBh at _��
_	v\���	P"��ݺ��e�VC"�֕?����z�\x�<N��'$/���*�.��<��|LC�S>�K}H
�
'V
�����wIA$ԜC�d~�Bg	Q��iKb���
�rdxb�jb�(���`�sh�#{�bm�#�C�|/u>p�VJ��3m�B�)�V���
+��d ������D̽c)sA�J��)s���
��t}}sw��`pf.C
n�|>�ԋ�X��w����^��R�����+
�v���
)f��1nq,����©�
Fm~7��!A6ˈ�"da�
�*"��f����e&;tD`�z���d
+*�kw�˻�,����{6�[�A7
�H�{�	�j��l%.�7��;4�qmkp��d���w4�
.C�S;#�d���C�-Z
$c�l��
����[?�s�8�~��ǻk�ʚ��1MO�]3���⭁��o�J��|������e���vD5)�

���
���-v�ް��`���-����=�qr��@4�^����t�ȷE
+|p�}k~|���u��EKG�]�~��6p
�����ZT�c���ʵX��IDO�P�h���H��0pc;��^� �/KV������c�R4�>�J��H�#8i�F�A,�����cb?�ϣ*F����
U�(
<iC��Ly=�I�1�WWݵٔǼO�
��y
��$XM#_`��u�r:��d�Z�K
�tѶV�xs:��U��D֏
^���6x�a����~#
����9�3C	�y��O�(�E����
�1.2"�y��1�|��1����KLI� �2����uH��w���$L��wx����X���Ԩ+Dʷ���a���6*���%	e_�
UfЂ�)]�'
�9�08#�8�̗S`��
L����g��^�hk�"�'�|#�t��	�u�-�3��9?�
�+� �ʞ�GfYwl��p���Z<�׾(��ۺF�J�VK�k�Mww�u�@$%ߋ���E�
�CQ���
����Tn��$k&]N%T���U�4�_Q����D��j����@�9����
+����G�F.��h�}{|?��?���:_/�>w����C��Ml�X���#��q��������Mj�h���3��� �T
�v��%8S�x+\��=w�	�{
+s�V ���rW{�P��K�t�
�pJ��~k�\�m���\y��Q��`��l�|U��+�u�{r��	C
�ӆ�jM�
em^+%����
���
R���Fǁ�k�w��@}��#@H����.��B]�l�^���B�����6��������Y�E
+<���GIW8m�v�Qj&/|���+������d$�7c`�ψ��T%4i7�X
AFQ
�Jp'&�V�,~��?
���N�����k��w!�?�O8��rc+Dm�fۦy�J��
+T.F��Ori_�
C�Uʹq�8j��|�
	���(��
xA��}��}2�7)�O$̀�
+&u�/P�׽>� $R
�ʻ�q�3�c
�c�[��9E1��Ar��m�ޱ}�,н�q@�|��d���. G,�^��混���H02$y�����%NҌ[��2�4\�~�҅�"��h�87e���M9�9�MI1V�
�8Ivd�ŏmW�}j=�u�O���+�ey��d&l
�t��:���U�i����VN]�#
��c(oJ2�L\�
^k�ʱ,�#�����]=Tֺ�4
�_�`��
��x�v��Q�����|����
� ���������+U��aq�hr�]QȐ��n?���*_E,���F��S�6�\~NE �0���Tv��{�R-��R-h���|��s�� Huv{�tb�K��L�]��
*�B�9�J�.{�,��ݪ��+"�5Yi��� �|Ƈ����Vꌊ��pE=J�(ʷ�$�0ᷳ���|��ӻy�e��	#�Ͱ��$K�a������
+endstream
+endobj
+1028 0 obj <<
+/Type /Page
+/Contents 1029 0 R
+/Resources 1027 0 R
+/MediaBox [0 0 612 792]
+/Parent 1025 0 R
+/Annots [ 1026 0 R ]
+>> endobj
+1026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.906 275.753 494.126 287.708]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.1) >>
+>> endobj
+1030 0 obj <<
+/D [1028 0 R /XYZ 86.4 726.045 null]
+>> endobj
+122 0 obj <<
+/D [1028 0 R /XYZ 86.4 633.954 null]
+>> endobj
+1031 0 obj <<
+/D [1028 0 R /XYZ 86.4 551.961 null]
+>> endobj
+1027 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F38 517 0 R /F16 461 0 R /F14 697 0 R /F10 779 0 R /F7 778 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1036 0 obj <<
+/Length 3510      
+/Filter /FlateDecode
+>>
+stream
+x���r���]_��@U��9���
E�n��:�Z'U��$(!� w���tO�� �cc�*O��{�w�L��[ċ������keN8����f�Y�i�Urq�^�iaΗ*S������|�=_�(��-hxsحڲ�5���Y�Eʜ�|����۳��I@/d kD��b�p����b
3_�B�l�ɯ{Xh�D�����?�b>f<<��Ǖ: va�2�t��N M&2��B���Π�TYw�	�V
+g�1��7o&���HR9
�L
+
�1���_�:Ś�	�/�k[;;����G����h�.V0Ad�G)I������[��O�UuخijW��&o�f��ag�Z
�|����!߭
��A~�6oH�CCH�hS�xR8�R"�����*��sDUԻ|K#M[����H��4�TD-2�_ q4��Y$@��Wo�>!q3 
7Dz���o߿�z��&��_���
C
��+n�E�Rk���C}.��
+���E~"d{���;h��
� 3�ϕEC͟b�َ�8�_I;���_7W��K���k���i�
K�o��P���
�2��0`�H�
-,ww$H��˘�2��d
�I��
pA��D8�	(G�0� �t��o^"�?+R��S0� �
1Pe���$pX�c
��
+��D
K��c�x "� �F( <X���%�1x��k����< eT�8��La��X΂ܥUn��y��@P{�z�H0�^� ��UA���"ED=�
�Y�k�_�i �z
�s���|L
HG�x�i )/)��'�&ڎ��ԒUthG�i����_��>�v)ʪyN���3/S;����ָ/P;8���,j�R��o_߼��һ
�M΂œ̺1ZԻ��.��p�h[f1�B�?5!�(�2ߖ��8�X�i�c�kh|AHb��q�5����
@��]ݾ�~�S�q�.r��) �s#���8��1��H�
����{��@�䱜��]]�����$	��^�z���@�&�d���,�֗��������
x��C��]�g�K��i�b7�E�x�I�N�’�r�'��M1V�!
�V�D��P %6o_��~s9�Q'�K�@�I�Rc�ϰ�
֝�κ���>{y�
��r]��ɞ����X�ߑ6��y��-��?�F
+=K�������o�=��f��no��Q�I�o2v3�MT"��3B��d$4�y,4�l�B������XL���3V���/8���q��S,u�j?,��,^�V�Y�
@i�0�������5� `#��
+��G�I�q(�<"`��i'`�S�����wd�����
�/��.{�^�=�9ʞ��>�z��E(6��L��m�ayK9��&����P��I�R��$�;iopa�
��
��t-V�q%�i7��T}�S�5b�d�o��Z�؉���y��T��oK�,'�Yv�,G�,�2æb�V"��TL�1q�{��FAۛ�l2�	4��A�^m�GST� �}z�e��b^[�S���,� A��u���۫��m�
h���>k
f@
l����e���qIbH*q8�
S.z���b����]5ܕF��E�UPG�~�P�,C�4%`��I̚��-} ˴�nXS�uq�
+e:�eKߕ��ͰNK�nˇA���]
�ⱂK\���c�ВS���&�M��.\��h(�n�"r�8q�O��#̼
��uQw��yp���f�,�$�D=�},�m�>ua�������[
�v���NE�c�#��0kR�HS��T�����ʦ�4)�ߪ�{��?�` b��}<��a �u�
�
+�d}�t�>6��x���h�����h��c���/:��*�Z�Ig��w�\k"�
+͗��;oٶ����G��MA}��MC������E��y���Z��sW+� e,<�G_��Q6��c����Iu�kg�R�a��W��dl/B��*on��n_!CQn�I�N��۫�'�R��	��,���� �u�vZƕ�C�5�# ���b;�LT
�]
+�
L�Ї4�G{-���+Z�Y�`�	 �PD?�&������U�)m�b���a�.8l��
���s<f]vU.�zO1��o|l��ދ�LsDKi{�j�pNkU�+� �$S�S�	B����)
���	Nj+T���f
���Q�3}&,���,�鈡������x�Ԙ�f�����!3������Q�YӇ�����
�rG��a�p�=
��Vߨi����n��G00o���B	^���>�����P*�9z�
+Ag�A��" r/9NQB^�����_�A���(����Z�0�T_3Aa��/Nh�<��T��cUAz�p���3�R��W8��5��(�B\Z����gxN�
�Nż��E��{�b�:�LU�n�p%Y�E�7*~���o���6S�/ۭ�������
FW?G�1
���Ŧ��E�D����
Ra�%�!�	
�u���A�	�9�2��c솏&�N����" ���b��c���D�lLX�S�f�|�A��n�3��
ގ�`�}��;J�<I�a�@Ë�ᡨ�g��YT�[ 	���=:ܰ�k���q���o�ey[W�0����q��$���,�;���.e�(����w�+��I4Io�^�/����D�&{Х�(B�#C��)���

���W|Zr�qq���@�����*\�	g�P4MU
�q�ُ�0͌u��C�/ʚ��&?l۩�
,�%
�:�et{�>
�kJ0 ��82{K	P
+���<!�_6-��D���Fv��M�`43���D�^�z%�>t
�6��
$ʎ��m���@/�#���/�Gc�ҵ����C��f���o��R�Z
�dX��iĨ� ��y ��o�����Tu�D3E*�
2�^F+ݿ��+�b��՘��
&�	F��!W��C��
E0��i����q���B�}ؒP��祴8��u��s5���3O ���/�@cWѷ�U�yY�3����5$s�����K��9��2����O�&c��^"��M�,�C��j]�]�en�_�=���ԣ�X
�0��Gt�(cܝB��ہ��&��+LGA,Svi�<�X���G��B��߉#*Z�T�)3�I�ױuq�������q��q#s�P���p=����.
�
+G-B�$��c9 R�f|�-�3� ��'LQy[L�T�����ݵz���8:�tSN�<ؐ*��]�s�H�>�
)�
+e�/I��aϸ��$�v��yf
��� �Fv
Ā
HM6���Ĩ���w�7���@Օ$#��d���LY��ɴ�I�����(���S0J���
v�_�ՁW�������B�HѾH���eS�
���
�)�s`ܽ�/g�I_�Ìy����I׻�����r;���3)����	ȯH��^�ũЙI2��|n at K� 
��E����0��{z
���)����h�L�̕z�S௩G,s�Ag�c͜KoN$���Ңc {�d\�
߫۳�g<5
+endstream
+endobj
+1035 0 obj <<
+/Type /Page
+/Contents 1036 0 R
+/Resources 1034 0 R
+/MediaBox [0 0 612 792]
+/Parent 1025 0 R
+/Annots [ 1032 0 R 1033 0 R ]
+>> endobj
+1032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.18 200.469 160.903 211.318]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.2) >>
+>> endobj
+1033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [324.784 164.604 339.506 175.452]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1037 0 obj <<
+/D [1035 0 R /XYZ 86.4 726.045 null]
+>> endobj
+126 0 obj <<
+/D [1035 0 R /XYZ 86.4 262.272 null]
+>> endobj
+130 0 obj <<
+/D [1035 0 R /XYZ 86.4 112.869 null]
+>> endobj
+1034 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F14 697 0 R /F11 694 0 R /F10 779 0 R /F38 517 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1040 0 obj <<
+/Length 2812      
+/Filter /FlateDecode
+>>
+stream
+xڵ�Kw�6���ZJgF(�$8��"�#M��i�dm�D�<�"U�r�|�^�%�!�1+��q�
₠��i�g�.��_�tÜ��<�:��Ǚt���C#�����9sK*$��_K2���i�d��/�.��]]��>&����/����vQ���0��ş�.��/�� �/����$wf��������0Èyr���n;��C~�f��_/p���g1�
�8qIgf�rY��~���( ���9��Y,9��R�G���<�w���Y������q"�#�z�{���eA�<�奺������߆�
��_6Qfh�E�=ZɌ�8�2��"~�14h�̡�]X6�����\*g��0iJ��A�nC�Ink��k���h����4% R9�1�@1�ۮd� �M"�a�
i�Yx�|���2Wb�ep�!��$:� ��
�
+
�}d��Q��؈ѵ7q�
+���F
�
+�S0�pa"��b��f��V8�$zQ_�%6}E��az
��ol�!I`��0�"2�T�|�AZ΀yRO�g��I����(�N�a*�4%����+̵� �Nӛ0���
+��d��`�I�ی�@��)s�<\��k|l�
sT�<�3S'�az�4uE͟KE7����4Du�뫕 D$F��e�3��3I3���@�d5ҍ���8��nƩ�_�T:��
+�HhX�>}������m
%E���
y^ug���
n�
�ے`�n�i���ڷW7�� ��.�tS
&�LY�ZS�w���x|��z��·w�m�����%
aN{�}��Y�ä�	�b�&<>V
a�B-�{��B�=M0`ٕ�q�T�)��c��o3��̃]���`
��Jb�W���UY^^�B��Pu)�H� ����(��9�"`��
�7���U1�N��XG� 0��N�.��Q���;
Z$���o�[?�����;qd��q�{e��N�Uq{���Jǝi����Y�S��s��n6&�kR���X�-�l�ap��>£���8��
l�
���G*��ؽ�l[�U���ٮ��[o|D�S�ಖ�sJ���p�~^m�e��Fa����{�OQ���˕l���d�r3v]{�}�n��U�[����@?�ߛ�յ�{�n��
�>Ɍ�Di�w�>󰮦�m���?��
J1���� �(uS�`
��� ��p
��XP���F��)P
+��S�}
�㛓��%Ѿ�^��e'��ff��k��0>�vtp�z�٦�}��2>�L9A����b�
�D
2�v�F3[]�v�=�v��Mtu�¶w�m��8��s����,��x���+,!�+/�!L�\%�z�3�u{`�P�
�s�	'�����d�h6
���M�v�c��ݻ���d�T'HLέ-�öp
dj��^�~�� �>L���.Z���4����_?�4���.ĵ ��e9�QN��� �;�"��8
+�����y�v=��Q�jF����

+U�A�����5�u
�B�w�-�
>=<Er3OU��^'ŦӋ����)�����=P���Y�}��/'�z��մu�Z��m�P�y|��f� �����rCXݍ�u�ۉ��b���90fx�`���&
8��FR���x��$x��`|@�:0����w�6��Ǧ0��!Q=���1{WD�}X�+��h�)3�մ5�6�������&�M�T �,L{w�f*8�l�2�	9���U���r��A�,�i���:i�d����q��$�Aa7��i��2ʧ#I�l!ۻ�6YN��d+ȩ�\����a�T#)*�My����~'�a�̔5����}\l�
+��涐
���&�D������r#O�1�>����rU
Չ����Uy4����e���e
�`�B���t��x�T�[��*�>���!���ɣK�sF���
����l�&�J�,Ga����}�a��h�ch
{�*�ߪs�&�j���a��8uQ5N%���aih��4{�i�I�çj(
�7�QXVsh�A��u�W�g���
�H:㎯S��K�X=P�Qu�t��Ӯ���D�
�d�M�*r�w"[&K�-��:��m��D��b��,q�<�~���4��`Pē�S��<zJ�0�v�
��
W�x����/�����da;>H
[]����#.G�)CB������훏W+�ض�p�ē$�����N&��M"��~��_>ޟg��j��`���B�
<����#�G
�"�S\B������H{�2���q��
�7E	A��Z+N�u��a�~��
(ƜZ�
 �^���z%�;��ǥ�.]�:1_�h?<�_@�-T/�<⤐�.����h��� [����`�ׯ*����23�u
�B��:���J����u�
+��]��b������\א��6Y��{�Ҳ�=P����8i�������k8����k�'�Ի��$��$�<��zBqtԽ`��x �����S�f���I�z'1
+R?^[
]�����w�mhI��1��	�[^~��i��Y�;�X�0Dz��t�;�����=z��.����Z]�
7y�nL��<����~=u��@�ģp
cȩwO��O2����n�/��
��a�1K��X�V�YeB��t��]�P=���{��������\��#�p��o �E��~�5ϼT���ί��G_ً&��'��j�<_���<{
���^zD���Ds�ҘK��6g���h#�8}j�B���� SKr>�s��� �Ō͖�������*��or0�	�����=m�v�K���<�3Fؖ����~j7��A��t����1��M��/��Uƥ�ƀ
��^�
+endstream
+endobj
+1039 0 obj <<
+/Type /Page
+/Contents 1040 0 R
+/Resources 1038 0 R
+/MediaBox [0 0 612 792]
+/Parent 1025 0 R
+>> endobj
+1041 0 obj <<
+/D [1039 0 R /XYZ 86.4 726.045 null]
+>> endobj
+622 0 obj <<
+/D [1039 0 R /XYZ 207.805 615.203 null]
+>> endobj
+1038 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F11 694 0 R /F7 778 0 R /F10 779 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1045 0 obj <<
+/Length 2814      
+/Filter /FlateDecode
+>>
+stream
+x��[[s��~ׯ�#�1�{�L��,��8i�~q� ���	E(h��>g/��e!n�������~��
+G7��y���/��
2���zi�x��A���z
��9�%�,~[���*��K'v��
��2���bI��:fj���wW��]XG�+��2Z�^��Gkx�]�3:�w�n#�
��m�����m��`���Sr�@��r:�
c"�5"ZMI��a)��)�ۚ2H�i"Jz]]���雴�:
^f���
�"���X���2Z��ܶ��\*�0����v��;��K�����쒛�RP���t�3x���ʠ�#��[����0D`>i
j@�tr��>�{J��
���w���%%	�$
+̽�i�:dw��;�FH_oS��<�,H
B�N�m�P�05��F
�gP�������q��~Ƅ�.�X����3��~ez��<|V��o�R?x�Ma8��K�NDJ���_}\P#v7�(Ҥ�w�Er��iђ1
�� #D8�6?�֐:�?�S�?��!]��{���~�
�MH7�qW�����9�e��z"�E~�·�~�K~�)�@V�Y�"]��,��
	��x��7�[8
�,:/�T'�(X
+�HB~Ɗ?%`�RH�LD5�J�3��R�j�6�G��9ia��<[� �ˈ)�ĺ-�x
{Ww;[
Xw��a� 
+ò������O�w�[xe��M%�%��o �����3m�&�'0���h���W3k/?�w������̈́���;��SZ
!
?.���qL��P`쓡�u8�F�
!E`�;�dpV��
��7�l�����J�ϙ�^���P>��P�>�y��é`�I��L at u/\��cAGx$4-SO�cis+u�HU�޼���z�f��@ �‰k���%;l���v
2�ル7ircq\� �o��]�"-��G$ ���ag�In��	DI
�����c9V#��,�B�m:������$+���m��KC"��<P+|Y��T(�`��c�R�
$(K���X*rA5<��uV*�Ck��*l7׋��2-�y�I���@E/S�?7 FR��� ��!|���ր��4zh��4�\���=�ȊX��^����sR�
 9���CC�SY�lF��J�x� 
S�Yg������
+����+x���
+�w����W�]��o� �lA�y���l4�!��.���f�zoa�!'���S�yP��w}�`Șc:nc
A����)?ȯs�ud��C�Ɠ
��1�vM'�(��Rx���|r��/�|�`G�AD�_�m��G�=�v�fu��Ϧ_p~�ۥ�g�[��>uwf�8����y �D%Β�B|���m�C�z�kC��Ҭ�5*�R�v��o�E����
V����W�4z�C���~��-a�n��3}�*�C�	�g!Ɯ�
7$���ɯ����1��A��$=�%�{p���%u��&^E5:��p[��$OC�Mo�4S�9�l+�`j8�
*����[���0`�
��
+��z�*�����Z�
�	K�-0�$h���`ú�i�6[�����N
�#��	�a���:)�Y#(V�Q�Y��
{z�2���Nyl/A`�`�8�������m�9,�6
�ϕ���s���i�,QNe�Za��n:r

�A⛐w�����.8��V�O��P+ �
���Z�\j%8��dV.�M���P~���&�1��Hl����=Q�V+�@�2x

:��|�	��Ӡ�G�����e� A��d�v�i� ۞n�@��s��]R�&COx��W��r\ٴ�M�[������:O���a�ƹ�Hi6������>�Fv�٬캱����ˈF��Ic �
�Ak3
�eEI�$O�aډc�cBZ�b��C6��B
+����Fqi!�
ڃF
)��ګ���	q�G�dḕ���(�(
��a^�B'�lb�YD��= ��s��9
�hg�/L��p���
�+'F�<*��Pd�u�JJG0R{�&�2������~E�F\E�
5̯S�I��15Y�.
���
�w�Y��
+Ov��8uP��j���Q�0�
�A�.ŷ����M����P)TP��S�j���i
�2�;���n��J����
�$���w��P��J�fP(��rV���{��]��~"ff at FaO
�
�/lCGgY2)�-eB%@�Ϲgø�fL��j��1��9l��v�d	ׁ,�/�÷ g�	������
ݒt�CpM���IJ�
+p
��P�ȓx,�u�	'JA���3��
��ᒲL��(�=
J���nʫ�	�����m��Gj����i<���)��$YD��i��\�Ȋ�UR}�,�H蜦��ߓE������#� x��^#�i�"�(B�y<�%��`�!�ݶ�q���n }��� �#����P�N�	*�<zQ���=��αh�t;�~�Nw�cT�n�_y��*d�
�[?�dK~�
�
��U��RD��D�O
�IX�BC��U@Ua=ʻ�*l�H
+�fݽ�o��`q���e՜ֿ{x5%e��^��o)	X7V�$	5"i!5�X���mob�gEL���M�~��R�|�tJon�Iu�eik�ag�rq���i�;�'id��<
4j�
+ �A�#�A.�R��Ε��i����J��g�vd�����G�L�}���C�����zB���P�>��K���5��3� �\�id�(.\���C�~D�������X��R��$�����&'~X�.���i�:�נmUe�M��|�!�ʄ�:�&D�
����
+endstream
+endobj
+1044 0 obj <<
+/Type /Page
+/Contents 1045 0 R
+/Resources 1043 0 R
+/MediaBox [0 0 612 792]
+/Parent 1025 0 R
+/Annots [ 1042 0 R ]
+>> endobj
+1042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.811 364.948 466.282 376.903]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.2) >>
+>> endobj
+1046 0 obj <<
+/D [1044 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1047 0 obj <<
+/D [1044 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1048 0 obj <<
+/D [1044 0 R /XYZ 86.4 455.865 null]
+>> endobj
+1049 0 obj <<
+/D [1044 0 R /XYZ 86.4 255.481 null]
+>> endobj
+1043 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F49 646 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1053 0 obj <<
+/Length 2761      
+/Filter /FlateDecode
+>>
+stream
+x��[[sܶ~ׯ���֋�p�tF���۹HN;��ޥ$N��Bre����B.Ar����i�/Z^ 
�\>��‹�^����˳�|��"B��rqy�����,.��7K�Wk*4���Wk����z�f�-���bt�������(�_>u�緷Y���ȫկ�ߝ=�<����\� �
�4�����ͯx��7�-0b�^���v
�"D�*[\��x�����`���S�(Xb�x!�FD��!�5EXJ?��
�]�EH�2"�(����b�\$������v�"%����{�Z�H�h w]@�=@*�$�~
q�ٙ7}z�1*�m}��� ���W�'TAR�������63f�kB���a�]��
C
E•��7�]��(�0���Һ��)�H�(k"P$��YRm���xv�w�fM�$�˛B ˫}�iZ��G(XS�Fi}
�
�Y,#j�W��z�l�_0�I��Ս`X]�[A���=(������C�,͓ؿt��:����LV�5b\��F��Ma��E��������]����*h/�:�-Dq$�X T����x
Q�^��P��e�7(FR�f�ƩG�̐V�2�t��OC��`����cKg�"uʳFd`�½5F�C�.�+
b�A{+J�^�=�
Q�:��(?���fμ#�74�k��.X�Cl�M�O` އ�/���
+�� o�j�[	���}�n��{}Y�o:
��A�5�":�|3ۧ��(o��Z�!����N�L��l�uL~J�}��'݃��GhU
���i�Lu���Q�(��U�
+��aE���$0�>�>N�|Y�
M����j�2�!(
[_�ǰz�X�(
���p������u��j��/��-�&;�yW�C%�����MRUW�,�qY%�t0J�Wa,N�IQD��EO
+~������1�ֈ�Q��!� ���^�x1a�?�X�4C�X�*:��P!=�*��(b:\��wz�!L�@
�lP
�9b���hh��E���hE��j�a��D�%sx��4��2��m=�a3m<,��חr1�a��=�� _f������q�p+��?(��
H��> 0�#������'��P(�������o=i�1분M"1��.��b_�0��R� �V!��*���{L*�H$l�^�\Đ���],���   ʌ�a}�����HXKz�h��"����H���0�{Ǐ#"C�	�D�c��+����2F�����n�q��A�.W"by��w��e/r�.̖�M�o��.�ݍ��_?�f�
osh �$@QvR�;V7�H�6 �W��N ����N½��#ah0K��\9CP���쓀~�9�"�7�I ��F'q2m��)�b����嫖 ���F�����Lv��!x��������\��Ʉ��e
�
┆
+���<q��1���_n�</j�ѧ���M�ĕl�����~V&w��p�
�p���
M�A�굈[7��6���7���'�eR�OӼGx�>=h
V怦 -'#�@[�8RR� �
R�颖I�OUԸI-��W��E�܎�ID,|�
�z��d�_Ӆ5.��]Xk41U[T��@�G�� ��sk���W~*'jk�Bw�C?��F�����/=�0�
 ���5#��`a�����
�7O�J�°i�kU�:�ڍy��}�f:'�/�����[#�C�
+T-K,2Wp(���A����ݭ�}W:2h[l��E���-�}�
+^����W�8�CEs��H""_
+}�/�p��җ�G�њ����h�G�jkz ��Y�;
~oCU7Xvk�>T�;aj]�K��S��t���IQ��Y�c)�,z����(��!�V���t7�*��]��?V�ΔZ`�`,̱��Z~0s�+��8
 �T�)R�{��˃��2a����?CQ�6Oni�1S��-m��%��<�AK at fj���II��M+�AK
�*��������gyi�͒�I�<����:[i���‡��Z���J���lVt��4mk﷭F� �4�'1������
g+(�҈
�o�4�W\�TPy�1��&�/�
���i.HC��M[ULqA����$t�!���`�Hw1].xӹ�l$bCM�i�
+�
����
+|@L0�CIN�9�y��� �4/,�E������Ҫ�'[�@&�������
+����X4����7���G�0W� 7#'U������!@��)H
���Q�T]�<�)��?%O�
#,f!��B�"���x����v e at NO�P�Z�!}@�&�
.���l'�����a�?�
�
+A��?�vo�Y�? ե���Ds�:�#�=�/���M>�&���B�EMʝ1=Mu��n �ե�:��Bu�I�gX
+)��e��.�ץG�����ك�P�4�ʨ����Ŀi��Zsʖ��>O����hG��s�l6�alv���| pi�5��?��Yy���rC�U�w�VaKJ%����euS���7O��
��dS\OkjG!�&��
��@3ќ�k��:~�"�=K���
+�>b}E� L�(b�O�X�J�V�L"+�b����ɻ+9p��ζv"'� �
�_i�ߑ{A��ܻ���S�N&r9�0�����֍l{<�\��YZ7�

e�.��%(!qs��qv]���~�Z"8j_���O!�;z��{���E��
#
+���ޫ����^�� A@�P���
@�5�����X��4Q6��:N��WMaa�SR1@\��
LL��_��k~����ť
+endstream
+endobj
+1052 0 obj <<
+/Type /Page
+/Contents 1053 0 R
+/Resources 1051 0 R
+/MediaBox [0 0 612 792]
+/Parent 1025 0 R
+/Annots [ 1050 0 R ]
+>> endobj
+1050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [268.357 66.162 283.079 77.01]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+1054 0 obj <<
+/D [1052 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1055 0 obj <<
+/D [1052 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1056 0 obj <<
+/D [1052 0 R /XYZ 86.4 482.612 null]
+>> endobj
+1057 0 obj <<
+/D [1052 0 R /XYZ 86.4 299.774 null]
+>> endobj
+1058 0 obj <<
+/D [1052 0 R /XYZ 86.4 124.535 null]
+>> endobj
+1051 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1061 0 obj <<
+/Length 2746      
+/Filter /FlateDecode
+>>
+stream
+x��[Is�F��W�M��ޗI�;��S�+cI��'��D�IB!@[����y�`i���&)�@ �~�o����ē�	�������w���d$��󫉖�O5H229�O>$
��)�,�(��t�.��S�����?�ڮgU^���)5�넙���>yy~��	1xB�n�\Nf�����
��<��=��ڭ&�D��rrv��
�����3\��n'�D��#.��<�� �/�{��J`$
<w����m{=3����\�2K���M�F�)$�tG at 1��/"�k�'�b}JURm
+PI���oSV�e�̫S��;�h������C��j�ʜ�}_{L@�Z�z
��/^�5	���������1�4}�㛳���
��a�SB��헱� 
�ө�N)(2�� � ~����Ϫ�f��t*D�.�Y�݇��89_d��f�}�0�0��t��`�!�PN��Q\��+k�;0�
x�N�$01Ө?_W���L�Q{��祽r0D����7���j��ů�QG�F�-���;v
l���3i�K]G��;�x����ٱQ������.���dқ̽\�A��f�d��ߖ��,+˫�ry�[�Y��Hr��1P�:BGL"��(Z�����|���P�Ud�� �M,��ś7,�|�vL3�q՘o���g��� =�,���0
�b��bȀ=���X�k�@�l����8GL6��% �
m�c��:x�>��(��Q<
�"Е��:�z��FZ{X$��/�r1g�e��ҍꕵ�vY�e���׫�ZΤ�83��������A
d���k���1��
C/�`�������W���>2��v������>�1	P�U�Y2ϮRО���(� �䭅��)���X���WC�	��qTtM��e�Q�%������0f�9'��
����>s��Ïj&;
�)6s�  p2��,"�%�6�ci��M��\7�"uud��$�}��ɾ,�+�
���ʏ��微 [...]
+�x�U��yuf��@&KJ�p�}
���s�"֤�
O at A����� ��0*���}%��yO��0$; +^���B
8�g5�3?�E����@jJ�D
+��ޟ�r��]��O��Ų:ʇR#�Uؐ��L� �\X�,ų���g�
�M��Et��e���/ O�x�?n����M1�
� {lK�K,���.w=��P��8s]q£zp�1A�Rч��OE>����K\M��Ն*N�p���tUx�b��N)M�{B��)_`��&�˥�������&�L!
�\]/�p�4�+ΰ�D14q���^
���KV�4<�.
Z��e���aZU�ꦲ�1���_�~Ҳ�M�4� �, ��@	��l
+

�E��VC�b�
+���8��oK O��C����v�)9v�
 O�
]�,�p #�Q�]q̏XCh ���{�A�@�Q�A ��ӠB!�u<�/�B�X��+�����8��������l 	��Qyq n�4+�|�V�@�5���Jt%��P�C6�k����e�ܶ�]

0R%�p^����.wv��ܲ�5���
0e1�|
 Xd4i�iw�Q�=�������0G5��(p^[- ���%	���"@�a*�F�
4����
�݀VD�>�����7Aο޿=�3���Q����:!��~^d0�tp����iT�#Ѯ.�L8
��v�y��g�[΀W�
���
y���J
��1{n��˨���6A?��@�d��(�˻���?��4؈���
��8����@PrɘS����x7�=\|_�=h�x
��LJ�CFe�AH75
iH�V�&�Q e2�D��p��Q�� �����0��aT�tw
�g�X���ĥ��
�}���Vx�YH�uq
�.
�Z�#]�� C�y��P�y_�A�
8EZ��醨|p�������L�v%������WOJ��6
X+
�U��K�IY��v�~�W�_�@#��
+ �
�@ց�}=��
V`BN�oL��3u
+LNc5�]I�����P�Q�]���'�c�
D�+��
Wa�q��$�b�,�Wj��0�+����Z�W$�A�^� U�!'��-18�3
+�!�D�
+���u��
+�v�m
��j���,
��$)}����*������
�.Mu8�i{��_
��D��A�5�
��Aa}��Sy4��{��#�(�v+V�@E-��R��Fz{��>X|_�=?��C�(V���z
�E�t#Ơ��<�\4���\���6��0;\����A�;�����8����Mx�����L�Ю���e���U�}��Z~���(��J��DmW�>+����&�jLo���z@�L��à=���TT��7*��(�ƕ�#���+�̟��
����0���#U�$���hBW�ץ���BMB�S�3��#�8�q�q#ح�z?� 
Adp�H�8�����瀾���j��G��T
��ޝS�y8:\Q���C�
:�QX�Tԝ9ޡ���tgee�����=����9�-kJs��(g����-�a�x��tߦ:n�����J�uT{���UH���#Cg��sZ�����X?��
+endstream
+endobj
+1060 0 obj <<
+/Type /Page
+/Contents 1061 0 R
+/Resources 1059 0 R
+/MediaBox [0 0 612 792]
+/Parent 1066 0 R
+>> endobj
+1062 0 obj <<
+/D [1060 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1063 0 obj <<
+/D [1060 0 R /XYZ 86.4 565.568 null]
+>> endobj
+1064 0 obj <<
+/D [1060 0 R /XYZ 86.4 394.208 null]
+>> endobj
+1065 0 obj <<
+/D [1060 0 R /XYZ 86.4 223.823 null]
+>> endobj
+1059 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F14 697 0 R /F7 778 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1069 0 obj <<
+/Length 2296      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�nY��Am�Vee+������M�jA�
������ �@H���+�
	p��=�u���n#
����ˋ?��d��DR-����G�&H2-7ѻ���%�%���%��l��d��W�,�������������pȳ��Ί}��m��������4z�\F��Ż�p����"�X��v�.�,A������د�/c�����
��	�II-P�ؔ���^��
�]�%HiɄ �����/�&�I뛺8,�]:�LER��/���R��.������#,o�*��ʛgz�K�0bgo���"����;�W,��
~z��FbƬz
+�'�a�0�Z3��a�"�%�t��-��`5��e]��H�*�.	����}Z���`;x6zwI�$��.o$>�����	%���mc����`=��� ��q��~ń��Q���}�2^�G[l�q
g�M�%��~u��2[���"鬂b�hҬ�
.S!r?�*;%�	B�+	J�����F�
�f����"?Z�ٻ�r�{�gQ���;���b��nǥ�K�y�i���=U0�Q�}&n	��"��$"�%J!əE!�5q;�#�h�D��pcH�֌�"�8
�i��
,�]qĻ�:�Ȝ��2��w.Z��DaP�N�[P{��2Dq6`oQ~r���~������DtI 	'}����q���J�S�W����t���g=�Q�
��G��5h4�6���8OO4B��v:w���
 O 2��h
�8(r(D�H�;`M��'HQ�I�c�z����>/¬��}(0
�@�e�r
+�"p9���D䂪���=;���5�����H:S����$�b����)L�fa)�j�K�F��H(�~V
�j;L�(�۹��WW�77x��`m�i7��o�;����V����*Nӽ����uZU�c�{4Wi=
aS&�
+<�&�V��9��DӺ��~=��5��̡T�a{�o����T������5Ð�b�U�@���B�a
+�T�f�r�R�0i?VL,��q��"�qѠ&��@�H �J?!�`��YB
DI���~��Cl�M�J����r"Ơ����T�S���P�݄���v*��l'�,ʚ��&�O&w�ͩ���cY6�qؚ�G���TB�j���Wcm.�3�=Q	
+�n[�� B<�1�*�Su��K*S)�ò�Ӫ_B�T���t�:��+��m�@7-
��Mij�ȯ�ѥ�W�h}��������ˠ��
�D���#�jڅ!��8SO�2�
+aE�t�H���c���1t�$�2Ү׫��e�L���U���aA![Phe����7� ��S�1�չf���Y�z�
S��IH.®B?��0f6�gЉ��V���a�.��9�]�x;M�U���}$rz�ZTr�%#�
�����lg2�q�~���|�,݀�s�;-���i��m�M��a���
˴���eu��L���m?��]��>��TR�����l�1 L�����D�����l��9�����r�1Ul8�y�.m�c�j�c��
��x��h at R�{�π�]��
+�	 `�� 1
+\s�o��(���0�¼�B��?���gi��(���}3
N�j?�(��#��
J=5
+�~a�=�
����طi� Ř}.��MP�8�uC{5�e7�֞�
�n���9`�H15�
��<��[0F9�7ahQ����3@���w�4�`N��i�Q��7&`����
m�E�0�uQ>�8�FD��`
ܜN1�����M�`���<�0Z�F}�7�mۤ�zR�S���<]�
Ӏ�͎ix�"�_�-�3X��,�8MڃDC~	�A��T�� FS��h�A4 �_�h��p����D�Nhco��0�]p���:h�8��������*���E��S���6���L�A��Z�Y�d6[�G0�9�z�(�Œc3���m35+�`�Qɓ� ��'L�z�p����s��
S�;ǫb愃$��Ox�*�� X���b�n�d*��6�h}1E6L�	����̠vᄅք��G
o�"��b�Qd��W-f��¦�H�n��8�P���I��<q{����w�vB�y�A���fMHxб.l�qͩe	v�ګ�:
��;NH6Dz ¿^b�U2/!�	��y�?�_��#��t~��s
��q>�

�P�nط~�s'ܙ���a
1�!VަW0�������!:�D��S�O��<*c����<�ʨG�/��A�
�K���$�i������
+endstream
+endobj
+1068 0 obj <<
+/Type /Page
+/Contents 1069 0 R
+/Resources 1067 0 R
+/MediaBox [0 0 612 792]
+/Parent 1066 0 R
+>> endobj
+1070 0 obj <<
+/D [1068 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1071 0 obj <<
+/D [1068 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1072 0 obj <<
+/D [1068 0 R /XYZ 86.4 509.25 null]
+>> endobj
+1073 0 obj <<
+/D [1068 0 R /XYZ 86.4 346.693 null]
+>> endobj
+1074 0 obj <<
+/D [1068 0 R /XYZ 86.4 182.198 null]
+>> endobj
+1067 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F16 461 0 R /F10 779 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1079 0 obj <<
+/Length 3017      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۸�_�G�!�&Лv��$�d�|�Ź>�([�L�H*�}w�"(��c5�N�"�v���. :����_��ru����3K��zv��M�,�h�fW���Du>F$�꼚/���|Β�z��ǫm�h�eQ�Ϲ��$���v�������g
��3�v���z��;{��-�͛%š�G��n&�%
�6��g?�AL�W���L���i�K����}�2�0��TM� ��adL͈U<
�Ǘ?�
��Sv�A
#��x��w?��Fm
��U�0��hM���6Ƕ�~9%2�m�Ňr����8Az
+5����&V�.��E
+[BY'�=8�I�uqM^��	�����$B����D�Pby�9�l8�s���b6g�0��wT6y
7|?:5ΰN�e�ʶ���|8W*�6ۼ�e�(9�
Ffl
�3 �QʂwHh��TК���)2��&�h�m~�6o.�b�..���E��F
�B��9�ƀ�tCcD$a�����v�$�&2 \ ��Xm����*����ƯT���˔� "J�X �3/Z��^��3̹4���׋j}�d>ttpL�
��Q������v�
g�v�W�����=_��L��iǯ�U� |�{���ESV�ݶΗ�
+�"��pB�Y���)8����������c���Yr㮊E�2A 9�y�^��S��4Ѵ��S�':Cu����H"ygN�`p46�*�)���y������*c�:��81KQ%5SFF���Y�
4���YO�(p(�Q�ӎ���#�'�I;5>�����
 )L�;�'t,�Ȥ)�ķ!��S��°bg�sΓ`����p��Zз�>���7�x����LqӜA[n�B��OPQ���_�g�����
�%ށ�^�
0�kt�4	@A,����
�ȣ���� &{�2�C)�Z�B�y�R at a���`�p���q$K �� L��'�p�F���f[�,`@���]�P
�b��U�(0�K-	�f���`T��g���c
 �����+$G���~��EЪ\M�1�;�
B�T�@�T�S��ؕa̷�..^�};�
�`��y���E�l�Նyӽ|�6
�[�I����.y]���M�~�7ӀW�(H�"�O�	<@���	z��
Q�`�P�Dc~���Z��M���S}3��J���L�UH9�Of[��dʉr��K��
*�$8>�*�r_��]��9ĉ&f��
M ߧ�9
m��Hjt��E�
��!J!�	�ƟT
Qh���cW
�A��+! A��!\?�B���� ���UB}�HJ(ջ�
C��;
��S]nB��_�™���P"���?*�$�P��.��^P
+;D)�e_�
�R��Ӕ!ؕ�V���
i]�T5��	(��#���
|=@���_�`�:ja����-�͊���.
����y����
����a�a"��Y��X��ۧ��2N�
�J��._�������t�TV��>$w�6"<�#�ا>�:

�������.�I'b��^�#�������h��U��X�&�0
>A)�]qÏ��"�������#*6	��'ٔ®8?fS����-�
B
�$5�%�Zp
9�0�����Q�
H��#P5��0	���I<
�b���T�;�	�l
�?����]���$�%Gd!���v�
;Iq0�3�

+�`(��:��Ԉڊ�hDž�b<֧$vJx)9'�2< �P�
��^RE�V�[��Pg���Wj�����q�ŇQڷ���n��_���.\�.�|u�{r+��ie�'.� cś X�FDe�E�g�H�Ur��~�1�y5�N9S���lbA�vhk.� �{��]!
��Vgx޾/�|�Mdqf>���15
+2O�0�w�v;J����߻B�6+n<�A̪��B���M�
4�tжH�I�0ݿ��e�t���
9�QGͮJAmAap�g� �N�O炒���9��w2E�yQ�ϯ]}��{��*_���I��
<��e/�2������
+\�M.�?
��b5	�PvT�rps�[
X��#{S�h֡��Z���/9����b��O�
ȟG-�����}Ub���wY��_s]|�&[���,tM�����ѹ�D�&��7#�dzd�!�+*������|�S�ا�����,2
��
��]9|�U�x��
+���Ā�{)��//6�s90իb_LH%�R;�"�����X�$Y�G���
��A�緾��}
�:���pH�,��n7qB����V$��x�� q
+�f�m�ޭ�C�.5�'K�z�Wa����-��^)<�.|��f�x'�n��GH9������
av��E��2�:G��@�ƻ��B�.��
�������%<��Q���RY�a]���g�xhW�و�x��=������Kg��x�Qר�`v�r���Υ��͔W[�R��ڲ� �	]��О��(�Y���_{r�l�|;�i��f��m?s�) ���(7�OI�(���+
j�e�d#��cu4�[��pٹ�C���RKOY뗘��&%�@T�8���c��
��x��A�<�4
/>6����G���M��uVxR7�v�l��0����[t�9�����z����%��M��
n���9��Y۪d�EQ\v���\*�?�m�z+=�����mz�ͪ>C*��B�M�}7�ͦ�F2�>�Ժ��0r�4�a�T�TٝKe��#�n;Nx�ŕ}>���B�u+�`V�'-%Pp/�zJ��)���n���V���x�
+`Xw�l7�r{s;�^N��
(<��bT&�hT\K���bW��Ti��q`�I�����T�97r�{�&%
�{�
C;@�>�ӛ���
�=y3vh���XF	�ύ�D�Vj(�����c1�?�
�r��
N�N�x2U�*J=���m�>��i8]�����;r�#��PT���Z�v��w���ui's1`����+��e(u�=X�H(�m
��[�m�|�-�G�h;��a��Ae�Od�|�+
�n�����lp��b�T��]
����~�
V2�,
+endstream
+endobj
+1078 0 obj <<
+/Type /Page
+/Contents 1079 0 R
+/Resources 1077 0 R
+/MediaBox [0 0 612 792]
+/Parent 1066 0 R
+/Annots [ 1075 0 R 1076 0 R ]
+>> endobj
+1075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.664 597.577 260.386 609.532]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+1076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 310.571 173.628 322.526]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+1080 0 obj <<
+/D [1078 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1081 0 obj <<
+/D [1078 0 R /XYZ 86.4 656.903 null]
+>> endobj
+1082 0 obj <<
+/D [1078 0 R /XYZ 86.4 490.208 null]
+>> endobj
+134 0 obj <<
+/D [1078 0 R /XYZ 86.4 282.158 null]
+>> endobj
+1083 0 obj <<
+/D [1078 0 R /XYZ 86.4 153.41 null]
+>> endobj
+1077 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F14 697 0 R /F16 461 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1088 0 obj <<
+/Length 3257      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s�~���#݉�N���ӝM;��yI�@K��V���^���
 �H���XMg2y" � ���Lf�d���on���V�Y��������X�
Oc-��v9�1��zΕi��z΢��<\υѫ��������o�Ԑ�+��z�[��*�����۷Won�~�b�7��z[�g��Տ?'�%޼�%�H�죛��I��
�����_WI8w�>����3ib,;�)��ў�W?�~wszfd�?W5u
3a�c
lkL���n{��ի77~���_~��L%�J1��>���vGL�Vԓчk��lu/�ҏ��ZL���-�E^����곟Y�U�ۻs��͙����*�)�o�lV����~�滁MSA_]d��u����w�&�F�"�h�
��V�I,Ms��e~J7*�)���X�:t��?Z��8a�>��b�m��ƣ��^>�r�$)c��k
u�)g��i�L�,M�'dZĂ���b��mߍHY��K��
�ަO�,`����b��7e~z-�G+L[�<
7]nW��s2���
�f[�Ɲ��Ơ��*�LO��p�N��q���� �c��@������B}C�	�,��찪� �1b�:�ZnA=�y��6���7��i�S�D��7
��0��
�UzѬ���a� �_ϥ�������xg#:"cfM=���ee�/}���M����`(�S
����bD
|�/�z,�<��5]��'��t7J���c��_K�
+���mʐU�89k���*_�
���nN��tct�S�r���}Dr�
�f���V�߇�?�#��?
���t2��֟�XǪ'�Q͕�ˀ+$�fRGY,�>J�]�Y-<�lvn�*)��6y�,�)�̏
O���\�6n׻����̿�m�]nh��oi�O�:믢 )���l�l�1u_|
+��hj
'B�T����4"���T���d`-[��Y���&�<�Ơ�ڴcPL�u\��4m�(I�5�{(+�
!��l����_3(�
A��
��\
�^�
ů9]�����&�ENY
v;�
j�-_>�aҖ��q�;�:�,"�%���sw�����֍�p�"2FG.Nǰ;���K5�»ߓݧ���!�Ģ���[�F�)���cV9��.A���[r},�GߪUN[H�yJ�?H������,��FƲ�mxT�X���ƙN��ti��[o�f<z�x
nc�oq7n��є��0!�ϣ5��C���xa�o���q�VM�
<^�щ���P
k�:j9��il�:�r&JYN:��$6VC�X�Iґ��V�;���
nZ���4F�a�
bx��|I�(%��T2�eVe��Q�
"�M�6��6
�.�f�4�w�a˳;m��Y��������㊼�B鎄�b�gUx�l��+�}��S�jXT�}�4�}�ʑ�*��ٌ�IЍ
߭�� P�Wh!%����l�pF�,}�����aO�+�+��(�F�)_
<
h:���[?j���ޒI��΅�?�2��
i�C�>�bɀ�{Xm�|~/E>����?쳵�
�����'݀`�lZ�!5��f
+��/���Y
+��RZ�'$��Ƙ�3Ov���Q;i0}A�F֑`���


ՙ�R���BNS�
Կ
<��>n�H�J!�Sv�Au�0��B,����dDXZ����RB�e�D/I'lq/�E�ma��}�
�{/u6:U:�/2JJэd��L�4��'q�ʠԊ���q��;G�1)+���o
��
d�V�C�:_�OE��b֯&��9�`y�B��x�]��y4c�� ��d�g3fc���S'/��x���Q�D�n��i��@J��R5��J��ڡ����7cŇ 
�}�8�C ڭA�%Y#2SW���a��)ZJ1ީ�ՈH�@JՕ�vJ�a[,�
�e Jŝ
�o3P%�ͥ
��&���ȽkDˁ��ME;���:6�C�A/h��LWL`��j�������aޫ&���:����s�2']�x/uL���ј��P��
�b]\�yf��'�2�}��*��)B
zvC� <�]#_��j"l��>�Ή�.�&�q�6(/	�*+u�gS
ȩ�S�ׅ���MG�Vtk\O���#i�%���&��BC�)ezVQUE��
]bO�
�w����
QCm2�x��P�h.�|i%��9���7
�Pg��*4ZRr
2Q�,<�~�W�P:�AH4��S`�6�
"�T=,+;w�d�rI{v+��U.�l�FT�G� F�����"
X����
łt�
+�
��~g,H\
���4Bɣ���@�N��Ơ �B(HBA��d�^)�I	!�t�9"�X at 9�J��]�wv
*�}����1�ڠ��C	K����-^�C�*��i^�GM�*1Y(;�4
+�f�����a0V�G�Ѹ�f�����.߯��M[����8��/��US�{��#diHA�\��*���
��9iҼt
�/�8F�fj�k��� .f.fj\�tp1
���Y�'�7���j�F�1q0&��l3J�
+.
��
�60��C��uG��L�3�-�fUz!NKk3�e,�F�Y��|u��s�� �e�����:��u-M��|��n�Fܺ(aY8��Z���]W�f���@Q�#M�
Vd�X�(T�v�=�~�x�8 Aܯ>�_�=ҁw�u�v�
]�_��	%r*��0-�0-��)�8L
{da�N�{��VU'�S�&��p7����-��Sv�����%�����1i�2O�/u�1� �SOEմ�y5��,��t��F��\">Nmu�Oz�0�v�e۟��b�nK���Cy
*���j9�J��lj0�t�EٷH�A�Dǖ�O�B�
��M\������� ����@
+
�
g�sW�z�6E��l ی�d
�K[�m҆��#�&ïN�l�m趍�lC+�mځm��'�6�u�_��+
�v1����P6]k
m�
]�����!6
�,�f
`͘ ��/��͞5�F��Ulz;6h� 	Mx{��
ZΧ%�i
C�+��zYΪ)L���֎��3A5�LPM=�1%\�;�
�e���j��y��M�ZT�{
+Vc�?7�v�_"@b��}��|�ܹz��5F?^
+Y;a���(��z�K
7<��'o�r��ʳ�50�� �u�}@<c�|��g	��1?8��Z�?�J
+a�
�k���阇�f�Yރٚ�
�����E�`A��H1�R������g+/����@����&<;l���
ĖR�����΀��'T��s�J�
+endstream
+endobj
+1087 0 obj <<
+/Type /Page
+/Contents 1088 0 R
+/Resources 1086 0 R
+/MediaBox [0 0 612 792]
+/Parent 1066 0 R
+/Annots [ 1084 0 R 1085 0 R ]
+>> endobj
+1084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.574 616.024 403.045 626.873]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+1085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.653 312.128 382.124 322.976]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+1089 0 obj <<
+/D [1087 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1090 0 obj <<
+/D [1087 0 R /XYZ 86.4 503.408 null]
+>> endobj
+138 0 obj <<
+/D [1087 0 R /XYZ 86.4 295.234 null]
+>> endobj
+1091 0 obj <<
+/D [1087 0 R /XYZ 86.4 154.726 null]
+>> endobj
+1086 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1095 0 obj <<
+/Length 3381      
+/Filter /FlateDecode
+>>
+stream
+x���r����J�0�	 �
�koj
y�X��`� �#	e` PZ�ק{z/�����9�Dp
�=�=��hq��;�����wB/�0�\/�n��"�i�[\�?2T�K���cc��*+��%
�����ͮ\�yU6�K�j�R��z���wWg�9c�&Z0V��ԋ����_��f�_D�H�Ń]�YH��
�����?�"Gf4$W&r��C ��)
Y�������ܧ��p��֊X
#C�L$
3h�8�R��^~|���KB�)���p��B�¸]~u�
"h�Y��o|����<+i��vm^�e[�oTyy?��i��9Ȣ��k����٭V�invE��FLN�
k� �Q�X2F�=���
+��I�	�L)B��w?� M�:	���Q~�xqqDzd-�P|�v�G��;��?�U(Sv�S�8	5O��ؘ
�6>o1�)�S&��̑�
��6z
��ñS����:ƙ
+Y��LɴA�O�dWJB{q@�R���+�8�#}B��H�Ѿ�1}D�~+v�B<L�6�EU=��G���춦.v�v����/-�,eNk���G52���
�$�UK#�$�<�m��g�
k
�����0J�y�P����y)t��Ի"�מ�8xDM����ʤ��T�h.�-+���gA�Q�14w'\�fU��xkw��n&�
T઺��QP��[�y?M�A��wL���	�-�"���L�AHhÿ�,��4�5yyK��t^��k�jݸ�&p��
+�(h�Lmhn����;1��˦�Jp7���!Np7
YK�� �kIMՍC�f�[{�T��yv
JRX�j
�a�� ,X2��AH�B\wYyk�Tp��3ܑK�Ɂ	K.��Ϧ�h��������]�	��R�<x�m�����$�T���C�]zAT&��~闍X��Q��bI�`e|��	
�pL����n��O‰n���(*\�`5�k����ft�p�_>8l���C'�6�����C�:
���:�\b1���FMdڱI.0R��Ĝx}uK��qe'f'8���5MB��~���n�	�l��&[�U�q�6��y
P���!�9-&�M��`3��2
ڊ~�KVU�ޭZkt�oֺ�wn�4��P/~�ߴ��=�
�'2
�O��w��Xҍ�\��n݃3n��'Rᒤ� P��x�Gw�ȳ�G��x���X���ED|4m
���qB$��Ρ��Ǧ��.8��6���5ފ�#f��Y�s_`
Ճ�Mt6��Qp�+�rJ��m�^�$KI��ٍ��.꣖ ������F���$
�$^(�A@t��2�����\�E_�{z|��{��G�e2M�� q�TL~�ĶK��"���
+�J?��W�3��J �X��U���%�F�+"���g�Evy�"�� �}=I/��I��֠���HD��,'��8
���][kj'Q!c�QT�d�fB@Ȋt�G�#�ĿQ��n�ċ!�>��|�x_���5}wN�R��
GKr�
\�� ˱��1L���)N-�К�Ώ� 
nƎ4���)��o�[�D��8�M��t��@|,cHS /{Mj��܂�o�J�"�{���m���Sw��*_�M��L��M��ر��u�Bx�8	��Њ�8\a�җ�K��s���~;��c�ͅ��x�|�
+"�$M_¹���N���l�c�q�p
�M�&�g�&��/b�
)���;?��I�qMl��0���W�,��Cs7W�?/�B��={�%N��{��{�g�J��@~�
����)П'FT�a$SgDc̦nJEy)�ҁ��J:��39��q���qxm ��(!w�
��g��F��Q��&<�t��jd�R�DZ,ǵ��#p�6��l���� U_0u�i���p
Y�
�fM�
m&!�i��|⒀p>�3��L�����3�֥�ұI�<v�$o�/�w갪6�´�쓵�a��.��5����z~����̏�-�3>�U��K`�0�������;|��%��Ά١���-��n �+�
�;ˍ�s#
UK�_�}Q��b!|�O+cc����X�n��3ux
��N��
�~2�k�9��Q����:�*��2���Hk�1f�_�xu�jR�'j7��(������l�
A9'��Q]�!^�C��Lׁ
S�, ��(�٧�9����|��
+R����r��]�o��
+
q���D�C�':cm�O�q at P���mJ
+��$ܯ�Y+�->��Ч
�����z"���$MR%R����)�ڶ���[��zɱt�����'�*c�K�3�-=���
^K����
+�S��NӅGP��FK�X]Ko��i��7�|��߀���G椫�>aC������)���I��JxW��1{ֆ���!c�����Eo,�mPcP1s	u(S>.(͔�"m3�
KD�ͰF��1���R�u�(�mVt1�O�OX_���.�8��hn[�O��S %��|����
���w
铳�����dy��;gB�:/n���M�+�i`HC�z`|N��쫧T��8u�D����j�8.,(.�竰o�s�.�G(�9��o*He��F*s2
Ȟ6ѢoҺ
���E&"}�
�R�,�!BW��
�v�I!~֦���6�h������۸=�դ4؀�66���_"&�b�;xT��Y��:IzjӀ����7t`6�i2s��gb�i:q�
f��4��xj;�
��̊AcTE.OC:ٮ�p
+�,��^�)�P
-,0��6��q�ˎ�T'��l�S�60l+!�~�lLKi6B��
������^�Gj�h{V+�]���o~�vF� �]Tډ� �̈́1���^�x���Y���P+ ���pH�&i�@#m[4ro-�;^XAYNc��1�5��-I
�����Nk՘�w��jw{G+)����������
��Un��jk��
����];����<T�rע14D@��]��v�2
ubp�[W_�p;I
+���B�����eԀ��=���یj��AY���F�v���Ͷ�������—��4�K�F�����?5
�8܎���k����0|�'��ԇ��L�ޤO���"�T��A��44/M���.L�p����LY ����c
�`3
C��O��
0�`;�
�/�V��<�C���cW�! 8a�IH aB,1&auW��F���_и�<�7�p��oaΩ���E��>� �jV9:~����z��� px�-p�씴�g���"
 n�Ŝ������W��pX&�Pc�[�e��f0Z��[׉�xV��s��KT�����7���|�:��d�^�4����z�8�Csp�@ ٯ�[����8lʪ�n�0��Q*;mY*��76�1	P�����].��-Ң�
+endstream
+endobj
+1094 0 obj <<
+/Type /Page
+/Contents 1095 0 R
+/Resources 1093 0 R
+/MediaBox [0 0 612 792]
+/Parent 1066 0 R
+/Annots [ 1092 0 R ]
+>> endobj
+1092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.804 643.838 408.276 654.963]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+1096 0 obj <<
+/D [1094 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1097 0 obj <<
+/D [1094 0 R /XYZ 86.4 542.944 null]
+>> endobj
+1098 0 obj <<
+/D [1094 0 R /XYZ 86.4 154.652 null]
+>> endobj
+1093 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1103 0 obj <<
+/Length 3138      
+/Filter /FlateDecode
+>>
+stream
+x��Z[�۶~�_��j[
!.���������I�]�����H��|����
(J덕��O"As��f�hu��V������o�\%$�L��oWZ�R,!���u�z��r�b͓���
]�Euw�ᚯ����l������n�B������]YdiW�U{���ˋ��^P��hO'&Z�U��x�K�����UDx�W��J�0�*WW���<�є=a�&����$�R%�Ԓ����[1}�^�������~>�>ݽq�74&T��Y��nGѺJ�}���
+��u���l��H
�n%����d��ʽ��2��i�7K����
{c&)�D\��ޖ��5��ab���Q
շ����K�ށ?����mT�rQu����6��;�h�W���KdOX

 �j�p{�zuu�kT	G�Jr	��S��	�r�f�+ԡ�GE"qd��<{��������^��p���9�@�Ig:��>��u��1��m�Yf��v_�����t䤮4P��w��T�d�=��XD4
eɾ~�z�h�mT��h�
I~��ի��(8���Я�8��e�E`qB�9`����P���.DRB":D�
ʺ�.�3�U��A���z���@D6��i��I�x��b�Pu���Վ�w����u�ο������Q�v������߼RI�^�5%�KP
pwq����e(pv_�9�.��A]B,Ks��dV�8�/�� _w���:G�j��m�/�Y]�:���
oAI���BhSE4[  F䚅�p�gb�Bħ4N!Eh1"��8IV1�g"Ob"؍���tB�V�M�x��L�����+��p�yX ���l�U����UqԹ����%-�S9I��X
 �M���?�ϲ2�,�vyM1�~_O��2Q 
d�'��1��<<$�lƃ�i�c_�B�
+c�G�G��M�5��2�إTR�,��}����y
+N4���:+��I2ع��4+~���Lb�v=�1[�]Z��M���ݺ�}k�����p�Ҥ2�;�ٜ�h��oph'���CI{͂
�~���1�� �]�d�|�φ��� ��A���$��,��o�� a
��8Yr~��B����/�����Q�� �
q8�
+��nd�� Z
2�����_��c���qj���0p��Z��[��RY�Exy�������m��� 
����:�/(9M�JH
�ٗA
�<�
�"�|���
pO�c�G��q�c$7U����C\o��
+�>���Q4
��7��Qh�t̶��mLn�c|�;A1@��GJ��
�:��/��h�P��0��>pШ����s��Q7�]/O�{*@�J�±?�pJ ЏOE���`�sZv�
�p���8I���t,�Tӟ��E�F?�Q�.��e�9�M<��?��G~��D{�Y4%4��Ϙ������������'?���`0�Y��x�J�Ϙ������u�sq��O ��0������>���'�
��gнB
���� l������;̴+��3�>��Ee��}+k��=jZ�pR �qQ������{���S ��/�
|��A����������U^���ET�bÃ�7����mYƫ��!���a��T��$��֓.����
��@�f�\��i�`9�H�i�
����-�ݷ�#�kΙk�n��<�^_C
+�����G���Տ=�,��SS
��4��;|s9\�������n�������#Wt�{\�[ρ5�x�3
��+0�S"���8[A\��lj/�f�̰��L�������j�1�����h�ӯ[�2Ƒ��]S[��v�����c�&��M_���4�o���4�L;���<�R�ReLޯ�x_����
+��/���ڏl"��M/ 
'�:
Mob�ோ�R�}���͘�q�3�Z�H��@�p~�h�o��ޱ�EB�RkF��Ċ�tr� LC	��
+��u:am6e��j�wv"��AS6V��>�c�j�|��i^5�dp:A�*���&6�!aPj�ADr�A�
�$T��۞��C[���}�;E�e[��!K
S
+[�ٕ��.�;]�ڥ�h�0�l`_��B#��BQ���O�M3y�V
J�*��v�A��2H�$�Μ4#Q�c��������U�cTЎ)\��N��w�K��N�1/ֹ�ٞ/R� ��7n
��
�%++>m+� ql��".$J��F��GbA�a�8�h�?�(���,�|@��斱uUw�b
:~0 O
+�u���5'cn(��x‡
1�y���r{4�I���j���������A����BA�Qڙ@�
�kK
�=�J��M�!�4���N� �fsStM��ː��f�u���B�殠�W����U(�7�ٺW^��?=�l}o[w_���}��}��
��d{�B�+���O�v`:�Ye�3�Ю����{����`�Sƻ��f�^W��q��P�5�֥H*�Id�jc ��aL��
�k�c�'4��}������L���q5�� ������!��?���
�@�5�
�
<�����
�و���7����ڒj at ax��@�)>.
Xac�y�
�.|�		�
t_����[\��	�j6Q���e���p�4�u}�ġ���N��Ą�y�8��N8ڵ
H+s�Q}�a�!ܿ��w�x�B}n�bk,ބlb�
J�Y�rhx.G�y�I5n�~��}��c--j/�Z�<E&J�
�17��2�ޯ��+̐/��[
�ԯ���@\)�h8K�b)��B,�9��Spm��&7XG*����{�h�>�܍�#�
�N��Ah�]��8��G��v6Z@�-��d�V
���z1�A�
��S	!&
��!���
���i�>�M\X�

�c�0��)�E�4�[c: �C��[@�|0����(X��lH�81��
&�:�l)��9�����ы�}V+3�tP�`m^�`i(O��l���=.�̀
7���r-G:s�E&|����o���c��O�<)��vh �b+	
P�e��ON(
%�!{0b~⧢�
g'л�pȣ�{��������9�x-O�
7͇�5��]�~@:�ZD%�
��
�C�
�F���
M)����oWu
���MV��!�m?_��9+f��������?�F
+endstream
+endobj
+1102 0 obj <<
+/Type /Page
+/Contents 1103 0 R
+/Resources 1101 0 R
+/MediaBox [0 0 612 792]
+/Parent 1066 0 R
+/Annots [ 1099 0 R 1100 0 R ]
+>> endobj
+1099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.264 207.781 222.987 218.906]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.193 85.517 434.664 97.472]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+1104 0 obj <<
+/D [1102 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1105 0 obj <<
+/D [1102 0 R /XYZ 86.4 561.404 null]
+>> endobj
+142 0 obj <<
+/D [1102 0 R /XYZ 86.4 290.703 null]
+>> endobj
+1101 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1112 0 obj <<
+/Length 2495      
+/Filter /FlateDecode
+>>
+stream
+x��[͗����_�[ �t��#y9��x�~�މ�Ż�X	�fx3��S��j	F3�9!�V}wU���Fw�~�x=���[�#G��:�#���
wD
�g��$j8V
>e�j4�,�Ln�<�,��$]f�wZځT����/.��_0`C#V�U�J
M�/>�F�|�>�D8������p���"����-�
�PJ��]t��DPQQ�QP�E�*���%ᶠ��J�]S9b���c���旛�d�����U<M��M�����,H`
|�y�1��m�|mQ��ݍ���6Ќ��|�|1��W����}���*:����]�dĂ9Q
�T�^�0a+��R�����W^��,^o
��t�5���}w)���D���I�I�3��U��}
1��`����n\��8#��Ғ]qT�q
�������
���WP=�<�u)�C�Z�,������x"-d
+[P]*�`āc����Oꚏ��������}�D�묶����0�@��*��G�9ÌEN�PSLGDpJ��܆q��\]��5Mf>���� ��.9��ܫi⍗{N��:�ߢ{sRl7�
+l��zC����p�ʅ�o�z�oi�x�l�C�2��p�sQ<�
밟���O1_�3p[� �˦BNu�fEȵ�
V�Y�;c��l�\��/� '���
1ɲ)G��f������US>�\V�I�����{�����pp��-x�
b3��];�
+z�Syi�T,���!Cm�`�oSR~�uN=�@4mM-�|����ůC��d���|�(-�5�Z�{#L</l�
+����(����!��4-Rw��!/	S�r�R�N�iaBr �� ��m���uہ���]ݴ$_+�U)���j���Q	�8쟢Z�|z������p�\���x���t�b;}���w#�֛>.��m��8����ڔ�{�Q���a�A�*{1��y��t�SK�IA4h1z`ʩ!J�:�2��q�6&Į��q�T{��s�U?z@͂�WS�����u�ڽm�8�iM��$BW�rO9��ٶ~�a�Ci}j�a�Q��0RTI��jO�zn=p�Y���@���
m�Y�5
+�,�����\���2�4
QU��L����[������!�'�E����5j�����C����V	m��x��-����(�����$�
eO*�@dU±� �Y�}
+Eg�YR�
8i�eP�*[��P�euW����*%�6`[��
+#�9�,�َ�0
����
�;��0;�g�Ѧ5�/���� 䡆��He7����D��	����t����/��[<�� J8s�
�-�}z�)��%2�ռ�qI�]��sP.qԡ�Y���	�NK��Fy��@��2 �uH�;���Tm۔a�B���2]�܁Rz�L�#�ڧ�t��ק��cx@f�H�H���~�!$3´�c"��h_� �A��y��H�a�C���8�����W^��f�> �9F�y�����R�{i쑔��I`w�?��Xe[
�m�D`[@�+
��X@�AZ9
�{`Z�����}���vM��l�t���f@�p~
��k	�k\_���~
�IB�����f���X2����]�8Fkcm�52��^e�Tm1Y��jK�7
[���X��&]'E������a�n��N�
?��

B�I���thM���>���|Uvzeu-
QoK�?��V���
����R�'���m���z�� �~���=v|�5��
��y��;>��0:�JA�.�~#?>��"k ���؇�KG,e���=2��W*+���kZ �N:/���M
��ޘ�u�9[M�����  2�[�S��) �s�~�������*�.4�B˖tP��L��j�,����v���Q��;���%`k]�$��˨���~��9+8����C�׌WĿ
��֝���=��M��w;'\	���_ۀ�rDl�K\�|�
k頓��Y�8k�(Vu����7??�<�&^��R$�l��jׁ�Z��J���9�B�DR���W�o�{t`]:hB�=�
�
�Aj�C���2�D����dׄ��?LWm���}(�J�`u%^�<����� �V�e��lC5�Sg��#)Q��r�Ƹ�mч��$k�n;�j=0-�j5��=T�C?T���
���  �3dl�1C�
��C���y�������a�� 5��'DRT���+
ߞV�gZ���ן�'���LՀ��s=��*�����%
���p{Ud�N�S�N:�$�S�9:Ƈ��GIV|B�A�-
�-�.�P8�������Gi��v�*�h���Tp�#�餜#D�?Z�怯����e.�
q�CN��p.�
�A�q>�D!�"y3p����8����%��ykk��`="h�^�Xd�ܩ��f�2�`�"���Uz��Б�@����t��%�n���?`�����
+endstream
+endobj
+1111 0 obj <<
+/Type /Page
+/Contents 1112 0 R
+/Resources 1110 0 R
+/MediaBox [0 0 612 792]
+/Parent 1117 0 R
+/Annots [ 1106 0 R 1107 0 R 1108 0 R 1109 0 R ]
+>> endobj
+1106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.14 503.897 431.611 515.022]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.9) >>
+>> endobj
+1107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [314.35 491.942 341.803 503.067]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.10) >>
+>> endobj
+1108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.726 284.662 429.197 295.787]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+1109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.131 67.647 231.602 79.602]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1113 0 obj <<
+/D [1111 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1114 0 obj <<
+/D [1111 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1115 0 obj <<
+/D [1111 0 R /XYZ 86.4 472.726 null]
+>> endobj
+1116 0 obj <<
+/D [1111 0 R /XYZ 86.4 265.447 null]
+>> endobj
+1110 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1121 0 obj <<
+/Length 2889      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W���r�ybf�rpdY�Dv
S���"A	� � �
��n� $
�H	�V�>q 
��{��q�nG������^q52�(�F�ˑVD�|f��tt�}

5�2���L�8���ɔk>>�u�����r�f8�s{�b���yPDi�O~��������3
+|���H���Wg�F
x���#����r�j$�!
F�hv�˙��ݦ�yDHv������x_3RZ��C`� L;
+���՜!��G�PB}euw��l
��,,.g�밫�J���/��|����*�vM@�-@��x�8)�8.W^�Ӓ\Q™�'��e
��H&��۟�>yқߧ�
mp�H��=���r]K����
�6%Y���E��]
+�WK�]"SF�����z�
��a>Ϣ5Zv����)�������TP��$�jVky�1"������\�W��58�
���GE�[~�e�ǗY�����r���}�f�]z�&A
���K�Vj_��$�5�k�G}Pb��\7y�@���稸Ñ�:v륻�Di"�V1��׷��+��	��iy����RG[�u"��:]Z���8�	������f \�l8��$Y�}�`
�ؿ����W�/^v-Sп���r.�c���Y��ܩ�r�U
�f��Ҭg�Sj6�5�����l����UO�1�E������0j4�J���> �
Z��.G��|�~��v8O�,tF�&
�)J�ć�sp�J�)
k�n^m�~e�x7�d�v
�9d��^����c�r�s{�g P�F�3k|Ժ�.WD��*�&��H3L]0l���f�Xa=����'XR�l\Gy�i�Y&I}�(�.H�UV��@hd
Q>��U��<9�~-�}-l��{�H8H�w�QT?;����0,ঠe�S
���{��o�7al�4�b�!��1�M�K�&��V�ÿɡ�7���
30`��}K����

��/J��GWmZ����Vm=�i7=��Nzh�6�M�%C'����d�%p?�r
ě��!�٤���}o�m�kͺQVt�gP'��V2v4У^0z�?I�Q�4�8���A�X��fX�����լdz5Β#�$����x�քz�$Źc<�p~~1�
k��֥e̓�e��Sv�ʇw��ɍ��ab/��|
��r�ι�8�QP������$�tDQ�⊹���M�)��Q6S��%�ӷ��l8"�|w��
Z���
°���a�iC
�BZ>��e�}��DB ��+uҒ��L�͌A��ԩf
��b3R\�l{���|�
��!�5�>bg� �u�m�v�c#ӓkAf&�iq�������*+k>NR��\wRE�(�
+�&���\=�����e/w�~3h�=��R�s��뫫a��L��`��݇��J+M��vW��j�ۖ?-��[����\��h�.=����Qz�M�0o�\�z��E�
6q�+Eo��МxB>�2^�`
�=��h�
��>�?��"U�]�6�����R�M��gܽ ��j#�����֤J���[_S	=�֏���0���<	�T[7�P�A�
F�����3���g�oy���n|�z�F/S��.21G�b0މ���
{kP-�	Z���U�OKa�;��
���L
�X�WQ�6�A�PO�
�}q8М
+��aÆV	G���^6lؐd
��8Z�?7d�;��r��
�����m"��!�+j���@���
F�;�|�n�5���ep�{{
#�f�
/sL�5���|��iBV�4�Qi[��m9J�. at A�w�����q�ېaw���€�D"��aURx~.�X��a��� E�!����oD������<�q�`H�'
���n�hѣ�mRM�nC�7Ё˰p�\�w��8�.��F��v��'���zDRUͩ���eC�P�gO�F|U0�����ơ|ղU�|�N���w�R�Ӄ�(\I�5��1'.y)�ʒ�ؓG`N0����/�9
!�Ŝb|��
�l
�sLe��i �����
szt��O�
d�!}I����ϳ*
�OC�\��������E�\t`��6(��u���(a\7k��L���UGTB�e���H:���Б�FZ�B�����,�ԫQ�j
evQ���TD�z���D���C���aQq�V޵��b�۬M%
�:7�Q���9]ư�a�9��C8{��1F/� �˜��T�k����������+�9��c;L�w���
T�Ev�0V莠E΂?/6�-x�4���:+��Ø�Q�&}�Ù9|�#�]H�2��:|0MOm[F�ls������D+���}�pl�	��&_s��E�
+�܂ �T�zU��CN.�
��hz~9+�������W��7���UXܹ3;���Qz�Ij���ŲF��56���+��~QNQ�Lg�]��\��{�A���N�8?�`&���_7Pӏx�G��2xt���ʸ�mA���b�T�H
+Ϭ~����[�AN!)!��� L�ޢ��KC�a��_!`A��A at D$%|z
`1 �
+�hp��,Ա�� I�ApP$%�<��i
VL�Y�7Y�*W����˚G1f�.߼�T���r�E{�jF7�|
{�IT%�)��`*`'e�Ѵ�?�dm=����[��ST���Gj[鱟����n��p^}��v>��+]V.y��eE5Q[?��)
-&�u�󾽗hI�[
+"	o��^����S5�5Y-�}�\��0\���=V�w�e�(��D]��z{>V~a�g!9WB LRvi\p0~��_���>Hn�����؍
+g��,���MުX,��5�3W�F�zS�+�
�	�d�u�V��ƵKS&
���\��(vUt�5.%G�F��
+S�
*�|��f�S�î
+S��j����DR�۹���eIE���e���`��WO;��n��
➱�
+endstream
+endobj
+1120 0 obj <<
+/Type /Page
+/Contents 1121 0 R
+/Resources 1119 0 R
+/MediaBox [0 0 612 792]
+/Parent 1117 0 R
+/Annots [ 1118 0 R ]
+>> endobj
+1118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.76 97.083 292.231 109.038]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1122 0 obj <<
+/D [1120 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1123 0 obj <<
+/D [1120 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1124 0 obj <<
+/D [1120 0 R /XYZ 86.4 477.827 null]
+>> endobj
+1125 0 obj <<
+/D [1120 0 R /XYZ 86.4 278.093 null]
+>> endobj
+1119 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1128 0 obj <<
+/Length 3476      
+/Filter /FlateDecode
+>>
+stream
+x��[K�ܶ�ﯘ#7��x��E��lUbI�A�����43\�
��_�n4� ��]I�\�A�n4��u�W�+�����^\|�����eV�Ջ���L�R�1����v�*��\��S�˦�כ|��\�$�+���xشeuh.�2��%:���ŏ߿�x{!�
_�nZ�������|��/?�8S�[����+�2&��[=���_f�f����l2��
+ax�K�ɤj�B��ᚘ�n��|�o:)��v�
+���܈_��c�B/np�
+~R�vեt�{Hy)OE�Hp�&?P�5��%��/F���
�l�����-MF,_�X��\7��
��i���.|踬+O4����.ۛ=;�[���Z�-!,�bدh�e+��-��%�ֆ)�V��]�R��T�	��
<���ϋ���j�+��K�t
�K怿Ogc*
-Y��O�E���Dug�S�'��|����`J��G_�r�B#M�-=f��7|�>�JEI��3����E�ؔ�t�7
+
��*^ξ�?"�j�h[����f���,k��i� Ca����h6uy��l���+0q+�54:k#ˍ�R1ee'��j�#�f��W�-��D*��y�l��|uE��Q�`��[��j���>�����% ��tâ
ˌ!�;2�M��E�Ш��X�-��
+C�Y
���}q at w�6��{)�U)�]nV�Zd_�J"Mة�J�^��F���{�
+?����_Ż�ܒf��t�,؍�$d���$�59������8<�
ȪAx�bѶ�!���Y7�[�B���
ɾaK����
�q�h�`|
4
��ȯ<�g�'�t#�I�%M
�Kͼ�s�R�-���p�����4K�n�C�^
ΐ�w
��4�l��{v�#Q4�4���ikN�1��H�W`�1"r'�D/��0��,�R�n,;k�t,���u�D��	|�M�Y�q���s,���F���*�z��-b�iҒ�F����� ���_��|z(��eؔe�`M��1ywi
`�c���
O
X����L�0_��W�倫a�4˜
��znKt�
���[ju��#T���~�>@{����/���0��=�_��~pp�
Fc����頧�R���-z��L��>��-	�T�[�/Y�"^�&K�*H��U�2�L���r~�p�R�k��9���&�
HϠ�T�wh^�����
����w������(`b�{ثbfS��0!&
����0z<& �򰩋�);�_�Կ-��G]L-i��,�0�A�c
G�_|@��
��������~qbَq�y�L5(6��A>̑�!�Q =��"a�8V��e�4Ē�A���* ��
0�&x�ɯ3��8H �JgV���X�/��:���O�|���}cl�k�4�=���x�qWP
�9n6E�\
w�}��

,xT�4.X�Sꘀ
z9�
��������G(
���
}��v�Pj�5�:-1��� ���{�UH
i�r�*�RƸ�
u�z�:]���|���	����%f$ �4
TR��A4�*WF4����װ �iXD��?_�������{Wɡjg
?��}D��7uu��	߻2�n�W�ft����S���W�����c׳
+��$V)����m����k�b�M�Z���BbUN*[�
+��>^ua�u�
�F�!��]s��)>��b9Rh�R���4���!
+\Z@ �Y\�xV==���[�>�rIs���e*�{,O0�r�Ks�T�=h��T"K�.#���IsɄu_T��r(��њ�9�]ܲ�S�9�-��*nI��ŭy���
���?ݖ
��"Y6�ћ�6޷`�{4R�*�à+z6վ��C*
}6�e���:�m@�y
�
� ���nU���0X|�~��

�uy8�ހp�
u��Α��
+��o��
1�Jh8U*�_C[���������6�ş+�#`V<HV�Si!�}ip��}A^`�'d_
+\�1�A�S)�����!�l
�#��}̸|��
�g�ː�6!�����_�
�<��%���
�{�J��hɕ*�����	�	
?���Q�N
b*|)��ެ�wSA��
��Ǽ{��0 v�H ]�l��`�dz�=���Nj���4��N��pz6՞
(�����"��x"�򊻊���hL��A�[�]�I��� ��I��C�/�S�˵�.�G�l{0V���#,����8<Ì1�"���2���N�)U�O< �n,
t�;��bt�BtFy�':UcU��r_P
u�d{4��
K�?n)
�b�.�gW��\\��
��3o�l�~�,��Aݴ�Ҵ�-*ǣ�d
3�QŒ�kȌdl�89f�hN�8����#�z��\��_s���[l�O�6����×>"�~B���qW�������j�`�J�y����Q�
]J�j�֧�K%�Oߢ�j�*�I�cKD�
'^
��
��3B�Z�9���t�&=��e$�	�ߋ��7f���5Dҟ�~)wt#
��n�M��m^��-yc�oX*��Pn�i�>��_I/
;
����v�W
+�\
:|4J�8U�!���
P�W�=�Wu��-gY����7L3�"
"h'���iI]Q�i[t_B�w7B��
e�AR4�;B
P��t
+㵛����:�s�k\��=��.��ƶ��:`8Y
+��
o��*|z��ͱ���
���bB�<I��s_�7�HmC�0Y�H�Ii�B�|��1�&�3�B)D���LB��D'J�u�˛6�����K�������a7ϟp�zR�-3�>���9!74XT�
+���I&ҕlgrḒ �"������
e����W�{q
w�R�UU�>S2��[�X�� q�;_1"O��Rb�yW�TH�T�.��4��r�gО._ VП������@�~��(	`� *S:*<ee��@T�)dAY����_�o�s��Z.���3�����^�R���J��|�����G��
�p���3N�/K�_�9��09|_# ��&�<���ti#�sa �P��+bH&�>L@�35$��PHk�2�j�L�=�ɕ���E�ͷ42
An�
 R
+��Lk�4mj"�4��z�g�(uʔ�U����&�|�mO'�
��
gn��-q���Md�tL
w�ɳ�g�j8
	���3��R���
"�b6��6�#��9f�^of�L���
5H���GԤ��0�!p��3	;ȫ�%�!v
�����9Ŷ�������2�V|�nLL
c�0R�|Xڹ�Ÿ�Āɏ��*��|�>���B�,Lag�_�`>�����
�ц�
���R��`
4꓄���I��nC���O��R'GJx`u[�îc:Õ6���C��o<��1�|�˺x
�B;�l��W�χ
HC%�Z�>�[���Y� 
�����d��t�T)�	 ������H��7��vfG!/�����E�Ƅ�sg=�
���v�x���[��������8N�0�
�4��Ltx���c!.�~{�z
���2�����e��
+endstream
+endobj
+1127 0 obj <<
+/Type /Page
+/Contents 1128 0 R
+/Resources 1126 0 R
+/MediaBox [0 0 612 792]
+/Parent 1117 0 R
+>> endobj
+1129 0 obj <<
+/D [1127 0 R /XYZ 86.4 726.045 null]
+>> endobj
+146 0 obj <<
+/D [1127 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1130 0 obj <<
+/D [1127 0 R /XYZ 86.4 656.26 null]
+>> endobj
+1131 0 obj <<
+/D [1127 0 R /XYZ 86.4 427.753 null]
+>> endobj
+150 0 obj <<
+/D [1127 0 R /XYZ 86.4 227.456 null]
+>> endobj
+1132 0 obj <<
+/D [1127 0 R /XYZ 86.4 132.222 null]
+>> endobj
+1126 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R /F38 517 0 R /F7 778 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1136 0 obj <<
+/Length 3740      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs���W蔢Sc6�LW=��2KOe�T�g�˜�H5I����y�&Z���C�rP���-�[�d�^$���}}u��Ћ,�4׋���ѱ\�<��`����C$��WFd�O�,j�r}~!��^�|.x�Û��zS�� ����j��˼-��9��꛳�Wg�̛,X�G�F��r{���d��/�,�Xdfq��mRd1������g�_w2\��._g,f��忪���-Ϲ�ZZǔȋwrHB�Xp_���je��R�D��D���@�L�nnţ�X��Z��v;Z�x�<�u��IT��'tEl�n��bu~����L]G=afH����v xU1Ϣx��ڊ����H����	L+z�s
yN&1O���[��D�zS���8����=^0/<��.�D�=�:��*{�j�o����$坲�c�AF�Ε����R{uC�����re������F�(���z������m|I���\"Zٺ�Q-�#I?���ŅTq�R��3�<��$�i
�b�����֮�
��9b��dQ���g*k9TX���
qګzu�h�5
��ǽm
�&�5S�������S���!����	��"uR��� xf�#�*�2?�e
��4@���J7ƽ/+Rڼ(�+@� 
52>��:��nA)�tHo���MKo�Z�K�q��FK�I��2�J�u�I�{��%a���X�82��$?�v_��
�|4�����	l�z`��H�	�Mt��ׇ�簧�$6P��Y��#s��D��t�H�BJ�+��(�*X��w��
zJe
sU&�S�/��
)�z�����뷗�S	���r���Ͷo�P'�Ht�a]��~��v�0p�R�1
ݶ
P'�5P�O���7sA��y�N1�a��<���)�y�*B�	|�X����Y"*��T�(Gh
��ko�
%�t�@���%﬊��qfXO���4����%5~�4�����v�ce��2�H�?\�r1͠�#ڔ�Ў��Qm�:���$���z�:�`ҠO�I�f���r}�V����aF32X���xq3{�{�a��pw��$�Se|��ۙ� J�sJ6��Zf��y��[?�
���?V[�����<N�|
+*
gIz�R)l�	z{�I��'}���f
+&�
��휟F'�v��j�=!�;2� �%���缙!�E��N�����w3QFYSG��
	>� eO�>��!d2�G�߿����O0i�p����I����xJ���W����6|=�9:&P��/�16�c !)xe�u���}��f���P��$��5���{j�صCxxt�,�/!Y�-!��}��bԜ���ش[�Ѹ4��.��o�.�s�s�d���7���e��
�\I]mg� �>�w��a��Ltl��
���%f�
+]��,�IJ��V_��ږ�U���2ˀ;ݐ���!�25��]޴?Ԑ
R������2��՜l�8��
����fH��
��@@;��Ci?��g��JNx�X���T��͝H}�Q����R=G������z4����d.T�hI��:�vS��uB�	0'����S��)k���v*`�F�r�x3��8�C�%B�Իd��؀�1��v(A�	NV�v�o�9 @3S�L����dO)\���Fwu�+�T�l�+u%���ٲ��K�b�"_ͣ2�T�"����=+O��/4��6TP�����Kl
j���eWtt��h3� ,K5�A�bpEHe�T�ڻ�	��&d��
͛�iS
"�{��[��!/�rFJ
d.d���2�����P
*��P<�k_�m�omI/ �e]\�V�b|�ؽ�uU&�N�\�2��m��޺+���T�d<��3�r"��j�+M3
��r
lh���lp�Y�vU ��i�i�s�o�aY�K��h��!|��H�J�r}��:��n�
��A��v�zK�Aǟ���:��j�=�z�"R#��QC���!Q>�����WU1��)���o�5؂J��
�B����v���&�x�B3���sa	���
x�f6��X�o��"�n�t}��)�̐�ǡ���
@
��\�u�_ߒ�6o����.
�]lp�d�V�]�v�?'Z�p���z_��O��
uz�
k���v6��a��r��u�
J��]�:w��{��U�K„��ae
+2&��G4PVBxwX
+��~����4�
+�f���HG����*
�0�^>�
Ұ]���OE��҉�D�,
T���E�?�/9\R���C��@��ΰ�{{׺��q�܇C����?��5��Ṅ��(m^�~���_G�`|�GLy�^�Rl=
���9�����+��uR
N�|�њ�U��ElDx°۽@O
P��`@F��$#lzHF\��d]0T��,�L<
+A} �}��zN��KM(l��uU������dc�t�V� ݰ��Ix
��
�
�=�'}���=�/���FSѾ�ɩ�;3W&h�y8����zL���B��
m
 ���׵ENkN���Ng�֟
aO'"�
+�4~��fD��#6���/
���7j�\]�|��8�i��歟�|Y]y9��N�Dv�U�*�.�k�5�Qb�s��W�t��r�`$����h8?K�e�
��
���KK,n<�w+�/�=^	�y"Q���h�
G\��p�K����A���h=t!5�����bc�+MJ�
+G�*�-<Q�>�T�]��Bp(�佾�lU��x$K�׉\���1J	I^����xP,�Z�w):���s�s�E�_$����x�q��Ә�N������Q$�������~��r���s��X6!kJ��a�<��Y�uF��I~'!I=�F���$��r(��`;t�Ap
+�(e1����S%��
��&���=: �g<X��!����	{P"�Od�У��<�5;-!�Ķ<YJ�P��
���!�=�����Y����N��C��l(���r��<�4(R��a�"�����(�׾>^տ7�|iC%��
Tm��z��3v��[0��-��Ws�a2��RD�t����t���ɕ��|��T'�~Z��jup�
+(��SQZ���}���l\G�M�}�kz�hXm�w5\�.z�2
q�X����V�2�-ַ��
m�&�

+�s�
�!EWJ1�v� ������C�
"zwKhU���vܠ� ��OC�
	{�
6n
��C�;��m���l�{EA��A�6�Dɽ��P���Ce�V0�n3:�A����脌��C�><G�C�ǵ��!��מӟ��z1���,��JI��+I��J�
��P
ܰPx�|������
1
?��T�_z@�f_��P�5���&��]Q�uN�7��rX��X$f�CІU���K�x��$G/�dx)�;��WY�Bs��($X7���C!��)�>ƳXq=���`������D&c�_��0
~O���
��qwRG�������>��u�.���������!
��\
7�N��F�H
l�������O[�w�����呣�
�!%K��H���]8��h!�e�[r�x
/=���xl�7�#
�dp�/�54�<�F�����{��s�,9x1���
DЧ)�m���,�(zr"�߽=nw3��ǁRj������y��Ny�w㪖�%��/�������c�zxAs2uʆwݎ�]W1�o"
Ki�U3�
+���+����8���A�eI:�r�@�E2�=���"�L>����̳����?�� ��^
+endstream
+endobj
+1135 0 obj <<
+/Type /Page
+/Contents 1136 0 R
+/Resources 1134 0 R
+/MediaBox [0 0 612 792]
+/Parent 1117 0 R
+/Annots [ 1133 0 R ]
+>> endobj
+1133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.018 438.104 151.74 448.952]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.3) >>
+>> endobj
+1137 0 obj <<
+/D [1135 0 R /XYZ 86.4 726.045 null]
+>> endobj
+154 0 obj <<
+/D [1135 0 R /XYZ 86.4 483.393 null]
+>> endobj
+158 0 obj <<
+/D [1135 0 R /XYZ 86.4 254.898 null]
+>> endobj
+1138 0 obj <<
+/D [1135 0 R /XYZ 86.4 141.481 null]
+>> endobj
+1134 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1141 0 obj <<
+/Length 2882      
+/Filter /FlateDecode
+>>
+stream
+x��\Kw۸��Wh)�Sc�'���
�d���t�D�<�D���i}?�%ȀH�$]Y��~�~O J�x\�����醊E�"A���a!b��DHP���.~[2�W�T��?ʤ���Y�����>K�??
��*����D��%�V��}��������	�[�#��b�����`��w>.D#��V?�[0!������A
�����PcJ��B�|B
�n�Z���
�K�����g��l����
+/������wʀ�n�N
f^G���⛗!�|�4��`�<)e��_,k	
ؼl�ҲJ�d$\VIc��\
+��A8��fZi$��JMj��Z�����z�i�b��sD!�B,����CD��
�\��K<�<�Q�y��8��2x‡�Fh>^U�Le�9e��'s��
���S7�H,ۀSP�r��
"�y �P*P$��d�
I���!a��8f
W_W�,?��nt��iKK�g/ꭤ ���0A���!����#m.
A��o����|��%F)���tك}r(�&o6�_'L���e�<��;���y��9�$�@��Τ-J4˯��!��W��V\��)�/�Y�T8������U��^%
�5��{�Pr岣
dn�b� I���*��yH
+?#�R�X�j��[�!�R8C0��D\�Y�­
�r�4
ê	*^���Y�'T֏�#:O�'P;�R��/O��K�
��$
�:�9�Q�p��x�hޮ��
+eR
��vxب��R���WC���d���&M��t��k�rH g(�@!,�g�
JD�}2�2NMs�r���[=���Z9@�8�EҶ��S\5=�JB=��u~�lE�l$�3�.�f���uQ܁
7q:Q�@L�A"�'�t첵�s���P&m�ު��H���mÐ�e՗
%�� �~����;�oL��<��L�U���	hT)�
ޛ���
v.
WU�{�E����g��j��q�bH?�vt:�T�G�p�a*�}(� F
OrmsV �n+
���r�61h�!0��Z3�YV�}���JN�i�����j^n�*��~V����:i����tWK�%�%*g4�L�pKJf��0ѵ���:t$ݧU�w�u	O�����Ng�y��i�]������ H�� �)wbRK�0��r
C�h]hm���"A�}�r�Iy�I~x�����0º3�u�#2��� :�z�۶�];h�%��.T/u�@M-�~6ٕэzU-F�qFa�àÎ�,!�"�84o�����]*z=QW��H�z��
���L�Q��(gu�4Ǫ˩=��ܥC���(L]�x��a� U۠9<>B��xS��
x�Sy��~ӪS��Z���a�����H�˳5�Hn��ywb�.B�y�!
�`��\g�zw/I��h��8�E
蛪�{��e\��Df`'����	�`ʯ
+~5���0��
� Ϣ�H�֩�KH<qY;#C7�E9϶J;�:̞��]�@C�;1g����Ɍ3�BJ�lv���q��O)T��&����λV>�0�F�@4Ľ3�{����v�P�i�o��qӨxLڬ��d:/�d�:f�W��ed��
�)��� !HBs�
eYf;�����?/�(��Dݹ��m�:�
i�g�];��N��
Ճ���)Z"�~X�mg�
HB�6I���������
+yZ���g�]ݐ>��pS���
+�8x�,��E�
�����|�U��݄�a�)�yUv��a?���	���	Ϋ���/y��'�
�I��f�Z��X8��P&m��3�?z���N�[+ �G��!�ԇ1�g�>�(Z����si�ՐE�:.˶}M�
�zj�ƻ�:��?��Y���&�9�&_j07Y��i��;�2��>�0R
+�Ƌ7��2I�����yw�n.�����͐�:���%�<��RU}�<�ה�D�r��,�/��חf��K3���
��E�rڭw
&��c��`�R�(����&�O�6$/+.�qv�<��i�v4Crhc���I4���<�P��� 
o���هn;R7ۧ�n�6��i����5�����g�]
�,M��4�(LyT��f�(���uǶ��ͱ|�w��D��M;���˘��`WB��SBY���
�
��R�Ӂ͕��yZc�D7��dj�Ī��o�aK��攽�
b
+C
+x��H_�}�Y�;�N��\��;N��,餻���V��%ƙ
+³
��~w��� �I�g\F���2'�����㴾������2��������{ZeG7�gR�w�a�:�Y�
�I.�V{3�$%���o�[?#�j�V�j���L�Tӎg�Va�X�hG�g�]ݜ^��-�3�4xxoe����7n�)}I�8�7���#v��K�s�Z�d)�,
�ygsO|vg��v�gsw&�F��2���#���<�y`WB��SbB�w�`Ȁe�D4���""�L���X591��dj�wbU�
/1��0t���f���O�m���t���;ջ������=,��,_^�B"
������:l�T}U}ڴ�¤�ۀ��db.� ��5=�O���	�ΰ���p�=���I�8L��]
�y\��n���
��<�ک��P?�>�;�{�1�ǿ)A�9�~.`|�*���'H;����#
�;�o�͊y|�(�܁�����~ �\�
��-�d�mg$&۪c�g� ɑ)���5��Q}w���|���A��p�~��G�
��=5w �
�G��YG��1���x*C]�)��~�Y���;�j|���!�Ĉ�
�K���>��CoUA�a|�uF`�O%�7K��� �#�\?[�z��
�:�:�ɂY�2Ɲ���wY��
+endstream
+endobj
+1140 0 obj <<
+/Type /Page
+/Contents 1141 0 R
+/Resources 1139 0 R
+/MediaBox [0 0 612 792]
+/Parent 1117 0 R
+>> endobj
+1142 0 obj <<
+/D [1140 0 R /XYZ 86.4 726.045 null]
+>> endobj
+623 0 obj <<
+/D [1140 0 R /XYZ 180.811 680.401 null]
+>> endobj
+1139 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1146 0 obj <<
+/Length 2824      
+/Filter /FlateDecode
+>>
+stream
+x��[Is�F��W�4�R��%)
�NM*��X�/�
`�P& J���y� �&DY�*���&��뷿�_���z�g?��py��k&gI���j�%�3E
���.������Thf����$�����i��|w�h��_�۫��<y��_���|�6yYԧ�_�|����?'��3��#��r6_���
����F��ٝ��qf������_'8����1��D���ɚMU K�%��B$�r�9~Z"������&�}_|����"L#�4�p]-�k?�?�rD9m��
\^y��)UɧS��A�:����A��E�K����O=��/O�"H���
�tN0�\HĔ����;�#B#M@�0h�n
�o7g���$AFP Ñ���.޾|���b�h�3.�k���X��^�.��Pj��4�L(�	�Fn�mju{���(|�6Ȃ���|n�=���r�)<�4�Da��
+t����Pb��<�
��d��}�kdR�U�(�j�86�I{��/��P7��M���#�L;f~[.�]9(x�P��
+��C1V�*ea�1���
�@MVu�+��]x�*i#C;�C�A��m`�@�l�z�ĘT:���`�,[��_��c�p�`XW�%�����)�D6��|�m��}}�$kgP�*�#_Y�l�,���)����jq�� ����!jXK��vx`1MG\��b �J��
+�=6�9�	�A�6�B�UsUD�fע���t�TVF��W�b���<6��Y�m��%�Xv��#X�z{u
���N*D�v�B�C�jp�9� 
�y��Rxӻ+�?o�� Y�M�l�,���:�g�Z^D�j��Tb)4��ٮꀄ��I�z���#�g~^_�Xr��<]���UM_A��U.��
u��Q(��(!�0R��E�����Z�>�u6B�Et!��N-�������\���
�	��&���u�0�HP3��gbw
+|p6@����z;�H:P�1JçFA���
a,����`�j�
��EoL��E��j8�ek�^��]v�����)�8��A��C���8x
	P��
��
T��wM�̪��g�.�Z#C:����$�X$ђ>c�y��́�����4���fa N�
+a�B¸ɪX墀��~���D��zcڄԥ�XUi��P���R��q1[�
���*�@�!b V3!)�N�(��p�3~�wټ)#�c(�O*8�
iՋ^Fb#Aԁ�&/�A�����-�E鮪QX�Z;��b�A�خ���� ���GV��
Њ]?؏y�侎�\������ˆX�kD��n�;[��
 ��Ѳ��oAE� �M":�u���}��\�[�ΠҪ~��ɧ�d5���
��4�5����g�gQ ��G,�� �#_H�̏S"�?�D�AY��!)�7�+���m���{K�A����bL�
�f�C


/���M�v� #��iom�����Hɦ*�ˆJ6�J�rR=�B*E�8R��.��Ã��s/��\��~�C=4�W�mG|(7�v��B1̇B
g��'�j(T�U9 �Ⱥ�+H��u�_mC
+��Ăڀ�t!X�cq<l��UC,��^�Pa!��q@
h>B5��ʑ"������J��,� n��S�A!�>D!��7N �eU�q��C
��TC�X|#�z�J�,��t�l�M����3<�SH���
�
D=IJO;�^6P!x����+�s;b���f_mpX�|~q8
�G	D�
:0�E!�ۯ��ЭI�,ҁ T_n�oږ���Π��NjE�
+��{k$ZAf��������pk�)
O ����C�! O�i���	�|�7�?�
�_%���AR
�N���
�S�~2ՏY�p:���f�;D#.�<�^@
+g�����c�$�zo��)� �S��饎�������ul�D")��� ����`zS�q���T�
+4�%!-S1ؙt����g�
P��0����Mok�c��
%Ye�3��ߊ:�B���s
+q��� ���y��m��!��]K>���ڨA�yʎ]�v��o�~���o���f�6y��h�G��}�f۫�ܾ&5$��f��|;K�1��]y#�X�����+T���
){]�K�OHl���i��uZ�i�!�ޮTp��xQ]oV�g{�9u���q@�8,V�sDC�k����,%E�`�oߦ%FR��V�Я�V��e�����}hi�Y�Pk�ے���ae���p��YD�[�Nڶ��U
^�Y�i?Nom��@C�po�G���]�<D}�5�l&��†��V,K<�^�6h��[r8���0�F�վ
\�ˮ���메?�T�=
��:Ɖ
+*��?��?�&
ډ
Fy�A~�ژq�u
�)ٮ�'�
c�pe0�D9��A����(��m
���%�6��~po;jz�
+ۥ
��>tO��V�
���~u�.c �P ��3�kܳ�6��4�'����1~��)�[Q���Q0�C��y L�_e��{p>��������S��}��
��m at m��gk�E��U�G�7�����
��~X�l���{)�*��qa}~V�
B��$ �p`���1� �$X�O�	�H
�[B
��G��>��
Bd�WwB$�{=�i�al�T����8d�+Z�n���G9�lI1���P�V�ӣ�u�D���X�S�ޟ���h�z_�/��x\�ڞ���W;F�
+�+�֏�B���0��>���1�@0�p{`g�+�����p��a�t>/7^����
%x�x�J��س�V�Q��O$iS��EV�~6
��y���
�}X�m4��l^��f��cVa�o��P����%��
+endstream
+endobj
+1145 0 obj <<
+/Type /Page
+/Contents 1146 0 R
+/Resources 1144 0 R
+/MediaBox [0 0 612 792]
+/Parent 1117 0 R
+/Annots [ 1143 0 R ]
+>> endobj
+1143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.306 628.82 298.777 640.775]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+1147 0 obj <<
+/D [1145 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1148 0 obj <<
+/D [1145 0 R /XYZ 86.4 374.101 null]
+>> endobj
+1149 0 obj <<
+/D [1145 0 R /XYZ 86.4 219.013 null]
+>> endobj
+1144 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F11 694 0 R /F14 697 0 R /F10 779 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1152 0 obj <<
+/Length 1922      
+/Filter /FlateDecode
+>>
+stream
+x��IsG��|�9%�
+�ޗJ�(��\�S��/�Fy%��y�
���
+�
]
������-?ƃ��'�z��z/^2�d$���*��DQ�$#�h�|�s$C�Y�]�f��x>
I�i�����夘���`H��/����u�|���#�'�2+��2�,z>�d
+߼N0bF'��u��3�(��'��?z8l�ic��CE
���Ȃ0&�Z �X�
X�������T)�i"Jz��ޯ�髴x[..f�����2-�ۼ�%	���i�a�W��#���n
�T
�b�=m��ꒆ� F|�V_��׃�����٦�_X��
|ז�q�4�iwA��
+�!��:���0.&q@�t���w��l�W�!?5¬R��KC���
8S���$���ԏ�M>
	��?���ڬ
Įjl�P�
c��]�o�0(��0�e��@�p�
�/T�˅���_��򯶘s�v1����{3��6�!� #B��x��1��9lt@��>��m��U�(iR'���\�n�E
��)���Q�°H$���!)E�B�3g
++���
+1��-��ߐ
r~
��j6�9�C��D�i�
�2ߺ^ͼx�;���~���KR��
+�[v�ހ�~P��j�j!Ļʾxß�+�xb����z�D�2xá�)o�
+;4
+ڟ�G��jZ�lY��M�oPqiӸ
��¾�EYm�]�t[8�5�����&��
+BS���T|%F�·
+�
�\�J1~����6�B���2m�!���BvU��f�3
�RG=���y�+e
++��'�&
j��+b���`���gD_-���t������]����

^C��+�<�GH�&�3E0�>/ߝ��_^v�8
+ ����Vn���!l���mY�?��?F��f
�	�>
����I��W�|�e�uݥ*
Zŕ�)\��<�l`�������M�\C'Gq�	�Q;}��⢫��aZ?�v�S���<0�($�P��B�TР�0�Xj��Q�����ኬ
���늬$j(���k�h˯ 4�I��`����.��� �)�R>���p���,�y�r<�o�w�0;��HS
8#�>jt�� QEi����
]��`�s�v��AI͘=�F at u~O������3=��&�����zo&O�!�1-x��ʯG���/ܤ�׊��p���,[�%���h�*Tf���5E ��7�#ֳ��0���I�e���s<�C��
8ޚ�Ռ~��1��~
o�x�~��
����1��A|�rj�^U�4�ma���Ւ�-Y�3���9VHv�bIkJ���3C���]U���`;�1�������FE�QO���y� 5����7��J��� b�*F��q^��MA�v�A�hhL�o���)��
+���8F&�1�{-Cqc�(49�ꃒ�a
�H�Pj��y�y�)���#p�JՉ�P:��pG��{1�[�8��)*�U�]gc��}�H�DS���9po�<
N�lf	������'�[>�b�
�@�����Ho�>TSh\����ښ"왩fjWo��@/�GB��v�܇��M�(�u3�-m�C��k�ا@l
+?��ǀEk�Tm�glJ%b�ȱ�l`�(�c�i`����aT�
��T���윧��yE�S6�
+f
?e�1,&�3{Co������ES
+0���G�n�&
+�룢v]�.ڶ�/�4>(��
GES��I�=
�v���{ۜ��v��6�u{��5���~#�{�
F �-��Ƽ��7��Y0����evZ��x�$���
�&��iq�2��1���9���܁�:��5%k����Fs(�'I�t�%4q�We�e��/�gN?!�CР�x,��η�,
+\ۍ+;?���.O�
�z����ϡ

��1�ZO�ϛ�������
+endstream
+endobj
+1151 0 obj <<
+/Type /Page
+/Contents 1152 0 R
+/Resources 1150 0 R
+/MediaBox [0 0 612 792]
+/Parent 1158 0 R
+>> endobj
+1153 0 obj <<
+/D [1151 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1154 0 obj <<
+/D [1151 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1155 0 obj <<
+/D [1151 0 R /XYZ 86.4 534.188 null]
+>> endobj
+1156 0 obj <<
+/D [1151 0 R /XYZ 86.4 367.714 null]
+>> endobj
+1157 0 obj <<
+/D [1151 0 R /XYZ 86.4 201.24 null]
+>> endobj
+1150 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1161 0 obj <<
+/Length 2166      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�n���~�V^E�ڔ�Ԯ�\�
hQ!	- �Q~}z
 ����N
���t�|���C��o��uw��3d$���}�%③IF��E�6t2�B3��LI\���ɔi_�4a4���z����k����q��ge�m���w�]��]����^
�J�@��h��z�3���#ft�ѵ[G�D���n��{�C��r0F\�!9Z�ZN�aL$�@F�!	К#���
�M�
RZE�D���]��-�o����(o��qh��$�w���_)~:����R1��V�V+��꟎� F|q��W3pAE��tAx����}4
$f
�s�͠5
�kk���ah�Hےu���w�o�t�B��1�)dJ�XI4�'U^�7I1��G�ح_��SB$���dʕ�﷛yժ�;B�����M:��'u�<)�9D��Rzu<N7��2y�]�����K�o�a9�eBU�l�kմd��] �F�
�@��JO��� ��
�@j�1
���U��]'^B�j~�s
��"���M\�x
Q
+ƅ9A����IE��Y��m�@U��!K���?�
��Mq�#
c�e5�2�_��9Q����l�܄�8��Q�Ŧj�f���~�9�s��4���q��!�
[V�t >�/a�A/Of����
+N`.��G���G��F�v`?d�
���z�>�8{��n�h�������a"D<[m�n��|a[���:)Ӑ%u+���Aa�h����`�
��		Nէ�YsT�s�)���`�ۇ;-*L�U�v�m��Ԙ�N�*!�ĸ�HC�"2.�ri�u�:o�\_���8+����z�27x� �� l��
��(�0���Y@罇>	�]l��(U��")��M$�n�hc'�&���(��(�������|�!�(J5A
�SK�o^�
J���0m�Ծ�C���
�W(8�Pc�A!C(��f���XaRw�/� ۷�sp�:"+���+Ck�� /\!�C�`�� ��`x��Q
Hw�6U���y�9D�
E�:�}�� ��sP&��ה�J�8
�j�֊�
��E��@(Hڶ�I����8�\���j&�0����uiu�W:�a:�j�Z[U�H�O���@,�s ���?C~��ge���dH�dK�&�

+��M�k����X��SͳSn
XAG!�V��v_N�!
+�@֝�ȏ����ó�3���?#�J֊��)�(��_��s;K:
+l JHzCi��-�����`FE�[f|�T��C̲
��Pq� LaB���3-�?�6�z5/���6�6N1�H����F
+�_3�.�|�Ip�F��m0�(9p�@�	�/�O��mO����m�,��r
-���f7>B�)"Fti���t�φߎI�6�q`�PMΐ�]����M���qE�]��O���
gmbn�kR��%|�	ϋ�0i��j>��l�Qv�$�T6nEQ�^��g���K�g.�z��g�v�;-�&�%�A�]��
�>�f��t�²x��n+Hb������$ER���ڜ���P8vK�g��#�Qq�_��%1* �q;�ʤ��, V:��Pj����ɀƍ����;��2���{�n)BeH���wM��Ѷs�d�C���|8f��m��N�`�ɫ�<�>,
ɩ)I�������2�j�'CB����mR
�o�����++�@WҰ��L�N�������xkG���snS�r�yp��}@4P �O� ���Rm�&�b����4!:�!������=�8ڒG(9���16�
sdz��
_�߲�f~�1B�^��zh������Q�
��ut̫.¤��C [...]
+��h�.��񛁉��Ël�'����춇�|�%�%��=����g?PkGB�qX� �G����r>�|�c
+U�rΣ(<�_�� >��>��S.�]�����S��/�]jB}=mg—�Z��`��T��(
+endstream
+endobj
+1160 0 obj <<
+/Type /Page
+/Contents 1161 0 R
+/Resources 1159 0 R
+/MediaBox [0 0 612 792]
+/Parent 1158 0 R
+>> endobj
+1162 0 obj <<
+/D [1160 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1163 0 obj <<
+/D [1160 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1164 0 obj <<
+/D [1160 0 R /XYZ 86.4 548.284 null]
+>> endobj
+1165 0 obj <<
+/D [1160 0 R /XYZ 86.4 395.21 null]
+>> endobj
+1166 0 obj <<
+/D [1160 0 R /XYZ 86.4 191.939 null]
+>> endobj
+1159 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F7 778 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1171 0 obj <<
+/Length 2386      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�Km��yϠ�r��r*)�[k����E�(Ԃ����ߞ@<H��`�k�
9 f��{�����u����~�:���Q�bIetui�x�h�$#��*�0�H�ϙf�w����E����lq����.�$��sK�g���~�������3lpDj�i.������8Z��_"�X��{7oq#
+�4�<������qA���P
�R����Hj��Vc4`6EX�@��붮b����	"Jzm�x���O�|Sm.����d��|e�fU
�BGv����4"5���C4��&�� �@T� �=s��zMO� F<q�o���|.�����FT�o,��<
�	��Tn'
v2"C��F��91��¢+��l����˶Hs�������lS�S�2s"�T��KS,���:@gm�aN�$��[�&*n�����P�kxĄ��"�ñ6ksSV�uE˲�yoϩ�U�{
^�g&����o�!h�
+�
�@j
�wR
�٬�e�(�
+�04��}�c�?�|e|V�
IzNfIٚ�&�vÕ)�W���H�Y����ԚHa�����T
+0�F�?������`Eo�����^B�
�eGP�&l

N�<�k�����q�-�΂�����1aM�aD�c��(�$g��X

����S
��z�V�{��!�)>e��;�߆�	Zc�M���s&�%^w�����lg@���iIa`�v�;�t�c��q=���`q�i�/-�����6'�c� \���abDCjy���lBe�-��p�r��֏�
�;����0l��S�
+�Y�ۻ�Q�����,�÷.����΅ _�L?,
+�CTt�;��o�L#�t'�
�E9�
}�Z!A:lof�Q���A�\?<�$�6ۚ�
F�K�F5�Ɠ��D����'4E|<�
҆o�HQ
{���^����
1i!V�7���|�H��(���J	�(�1������`�&�vQ-��(n�4
fW�r�+E�TI�)OQ���
+�;��$TO*�_/~��5��L�TH�q��w�_��n�bL�'54q��\�G2�j
+1(��uW���z�#L�����ɆA��d㑵�Y-�
�~
���|�MV����Tz��
(�.�`��p��0�6�<e�Y�����9xvoEu���Y��&ۤLܚ�v���`¡�bm��Nyi�PC�4{"Z��
j�^�
W�1	x��꾰56�0З�߅�}k��������]�%m�������� ��5
������� ��!���O` ɺ��U�^��̫Ų��=N�!�Aq��m�u���8��1��S��6�0��
�-�	�գ0ؔ�c����|e�7��q��!�^|8
�12� �j�}C��J�!��!�n
�WT뵱�
�᩹����~|�,m���e��0�_C �@B�N  ��|��
��Ȼͪt��6�+���+Lxpoc�������d+W���;������ʕ-�5��|���^�X	
�l�79�+V���3B0�'{��(O��,)&��ޗ�=���S���,���9
�9O��
޵XJ,j�;�f���n��΋��.M�4;o
�q��}M�4.ZM�G,)����1E ��I��X}T�0n
+��u�>1��@��u��6`�0(��z[J�06��#��#E���cЀ10u)��E��f��m��!D�BP�?|
}5�ƒdQ�8,`@��)a�Nc�����~T�GA�\��Ȳ���m�8"�
+���ϓ�|
0H���������yw
XF��(�N!���{
ao�<������%
*[�|Qv(���q/�� 	$��ࡖ��2��)��E���tC�j_&wy�Jy(f�{ӯI'~+���I���H�X��[U r�
9c��.�j�֜u��i`[������Qr�#yJ�BdSDum��	��N&����`�ѝ�Z�o�T��`��Q�C
+�M�t�x��ޛ��$��
<M[7D
�`u\۷�5��Q�?q��_$$:�܆z
+�Bi
6=	~���?�/����a<	~��Scv~��i�/
�O�_&��/
1��6;ֆj\����v�_�!VB�
r֢
SwͿ*�s0ľ�nH���
��G�P�>:a�
�	���}<�����f==����
�^fp�m43�
+2�-��`��Z>��0�}�X?��Ґ�2�wB
�|DJ��H��/���6	��A��c���A� al�~vu<-��h�~q呞�ԑ��R�U[A�X+H���C���
+��ZA-�����5q]��Q��}��D�4Lq|��~�K�SBB q
2�����Ϙ��&5O�g�(fr
+<cI)(��Ϙ������<!@��2��(�����D�/t�$��A�~�'r�gY!�b���=Z������.��A��U@�
+endstream
+endobj
+1170 0 obj <<
+/Type /Page
+/Contents 1171 0 R
+/Resources 1169 0 R
+/MediaBox [0 0 612 792]
+/Parent 1158 0 R
+/Annots [ 1167 0 R 1168 0 R ]
+>> endobj
+1167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.551 643.138 431.274 655.093]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+1168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.846 289.966 388.569 301.922]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1172 0 obj <<
+/D [1170 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1173 0 obj <<
+/D [1170 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1174 0 obj <<
+/D [1170 0 R /XYZ 86.4 517.368 null]
+>> endobj
+1175 0 obj <<
+/D [1170 0 R /XYZ 86.4 349.95 null]
+>> endobj
+1176 0 obj <<
+/D [1170 0 R /XYZ 86.4 176.429 null]
+>> endobj
+1169 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F14 697 0 R /F16 461 0 R /F11 694 0 R /F10 779 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1179 0 obj <<
+/Length 2683      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s�6~�_����D~��{�9I'�&��N�!�#A����]�_
�I��-[�Kn�I$bw?,v�]G��~<���ɋ�LF	J$���2��H�IF��E�!�tF�fI��tF�*�/OgL����SF�_^�r�ˢ�<>s�?l��l��Y�W�/~:yuq����\
� G �e4ߜ|�����S�Ktt݌�D�%���::?��{�qW=T_&%����8���ÌI�㋕M�w���3
oN����=O��l�1X�n̦(o�`k0���5�j@�FDp�Ԉ7k�u��@�0t6Bh�[+ ��'
�?�o�0��^����e0���5ss�:��aF�B��T
%B;�Zp�N� $v bs_�zW�f��|�)�TOC� Lh��}i�����7^�rD�"H��ߋň$�e�ZI}�S��y��rs	�ze
``�)�O�[�hF)E��hF$�ž�k����Z���y]��Og��..��NNp|��+wU��##��V޵�.W��LÒd_��� [...]
+��oo��E^�w՘
���	.O��F��^��\,��R5X2.��ࢍ��z[:��yg���.P�q
+���B���=���� I�1�E�hW=�t�C��_�f�6v&6��hB�$kM��ޕf�us�~��߾�L���4���Y;b�@��<ݹ|����i��lW��j�(�\\��l���&�/� g�����˲�%z�-L^�.D�� ,��
u(����!��=�=��Z��Ƚ$8�B)��C T!�n9BoqNH/��9`4G���
M��Y�!J�Bj������6�e
+x^��ա�!���z
���IB�b�'	� 
�™�G�H�ms�r���
+*⿻�;��
<��y�
cI. �`���2
�f�5jy��30��s�۳
���j��*]íK�0
d�g�:�+`
+��Lm�e{�y�Vu{3ߕ�ǂ̳U��4��o����u
׀��`	�V�`�K�<Rһ�KS��lki���"�'rZ��]>�����N�0��x���PH�b��*'��(�[^���
s�4
em�!�ہ���^'������^`~��9$����,v[��i�=���~(/w�6Vw�?h{�����"�2'OqyqQr�L������Ꞡ�ݙ#�� ڶf\��[�~d��bM;��Q\�K�++˜B��w
u
D���-]���X�)�,+�O4�f$��C�op=>�� 1��P��!����G�,�����
��e��^|j���}�*Z�_���7���+���܌ M(F*Q@��P����.<�`����Sy<]�=��@�������׶I���!
��lU\�0
�m�j?��{��xh���QP7�£9�h&�
_ܤ~��X��$�[�=�}�3�1
��O�����h ��U�!xGj��Q5���5{c�xqU���\�<�~���H*�6�䶦���P8
��H�
@��N��M��|M6�
��ՁFu�aB�w��GE�4麾ٚ��t^��
+���zg�[���Y�uM�Wٿ�#6����p���1�/t7����|ok<d�G���؛�HH��

�um6������
O�'�_���eۓ_�:�x`����bX� y��E�
�ߚZnp0,0Ʒ�]o��%�0Kz��}�ɡ@�Rc
ra�P��m�x*�EL=*"gU�^�Af�1�m�0�
+��H�ga��(��Iu���,m�R�����gg���'��$k{mm�(��Ap�bWow� ��S�Uj�J�t�o�PqT����.U�ܭm�џ�k��^"AbX;L�H�J
D;�

շ�ގU�QE�"T�q�����?O��%�v�md?)���y��
E%ǰ���3X��
��0u�7�h�ܾI
$�v���`�Pz_��*����r��dw��)x
M�=}[����5���C��l�v�w���Ρ�yȌ��)D(2�eL�} �Md�mO�
�����TYP� �YET�q%�6u��@6�2�4j%x��Ԩ�M7jYs���A�S~�${�Z+ѝJ
7{s�|��{�F4g��9)��=�MZ�'ve��3�v���

�v��/qޙ��;����tڈ�\�f��|��-�
��Qz�v*�Ƀz��h���l�'�l!�&4t�܆�"�v���vN���7Ԅ�V��y�N��rw",��_���'Pt���&K�`k�
�`6�E�/�H:Xmۅw�t
ۯ*
B�-S7��ߴ����t��cva*����c�<�'� �~��`�Er/O�l��a�SX���Zi:���%�[�H{�$����7��1h:�_lP6A�Ί��u{��_��#�} [...]
+endstream
+endobj
+1178 0 obj <<
+/Type /Page
+/Contents 1179 0 R
+/Resources 1177 0 R
+/MediaBox [0 0 612 792]
+/Parent 1158 0 R
+>> endobj
+1180 0 obj <<
+/D [1178 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1181 0 obj <<
+/D [1178 0 R /XYZ 86.4 578.474 null]
+>> endobj
+1182 0 obj <<
+/D [1178 0 R /XYZ 86.4 274.442 null]
+>> endobj
+1183 0 obj <<
+/D [1178 0 R /XYZ 86.4 123.379 null]
+>> endobj
+1177 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1186 0 obj <<
+/Length 2484      
+/Filter /FlateDecode
+>>
+stream
+x��ZM��6�ϯ�i��
��WY'N%��j3�8>�5�Z�tH�.��o�$(J���lR��P"A ����ukpr������^=y�d��LR��n-O͐d$�]'�R��b�4K_�E�\���bI��Ͷp�7�jՕu�.�4�\�B,^��x����oW��		�
+��LV��W�q��'?&�L'��]�Y�(|�&7W���~�x�]�G�%\!�6�ADI��Zm�r��m�w�<�'0ܷ�������J�1ۺ�[,iYun�x,'`
MH 
��jAU��-�N� >:-����u�-�"��W�}����+�U�
��MѢȨdI�����A!F�[����7�{��B�4����WK�qz{�o��1śi���n���!�#�����1�Â�o
s�{Txyl"��!�ek�<���9v�h%�6�Y�ݳz/i�)$x�:��

�s���e�ک�n͛�Ϟ}wss�_�@������&��7{�vo���
+�(�1ڱ��G��a�O�ݯVE�n������I�D��V ���΀�S���l&д����~�YTiD�Ȣ� ��x�/���AA��0
�ԡ�S�����]�.��B]�

+)Ba
��+v3��!L�ͻ���$�.$�����sp�>"Dd0�h?9:���">b�*����
"���aH@'�р��GA�R���|\
���{aS�M�}w��];st��
����
�-�<��*�����
C�'�
B�Q�zK�_��8L�?�ҌI$����4��f̜�� ��k���UU	
�_�"0\��D�.�`���%|[�����vJ����$A
+�'��"}���IHR������t�� ߇C�"N@�RC~YP���'g ���
K��6e��a�eە+�K�J*�� ���M�8�������޿�*�V��4w�]�M,����#�F�P
�f��Ә@�*���D�
z�0��>Fa��˵s׿Ϝثg��\��iW{�5�

+ò�<����)��n�Dx����+��N��4�Y,||���w��
��9$�����Pd�r�E����*�K��9knī`��f*���Z�
Ԥ��K�SI��(U.��/U�E��R�f�R%2��Z�pS���yȵGJ�]��RmB��J�3�����t��9d��n��Ly���ۘB�3���B��b�S�T�ҹB%äzC	�sz���@�����ӊ���&�O4�aA �u��U������G� `�<5'
Ɓ��rnn�U�,]a�L���� Ԁ��j]ub���ER�J��6�I��
�
#��.0̑15� r<�䣗�=o
�@��+�9RC�<C\Ǻ ?�:�b"�;�x�ԻPj͝����
-�N5�6���Y����pl���+3��<�MɃ��Dj�
r�u�u
y/r�D?�`c2"R��� `�x���/��8;8
�YGG���M�
���0�T�'����������5�)SAIE���Y��Wje�kw�}	�¾�Զz�r��(T��t2� �S
���]�+G�y@'�����M=��@M �?~S`N�� �&9*(hq�n\@�Tc�-�./�'�5�a�"�%C��ʹ�z_�n�		�|
͎��H�Mbn�[&G���_M4U!6����V����>=��/mg�~&&���>�-<�8	�H�4f��˹χb{�+��aH����F�w2�
t��TJ�/��On�
Ax�Ǥ@ۋ�`h$�1�6izpN�qc���
�ۢ�F:\Pe���?�t�j:
����q���
+3}	Ķ*���S��[s�f܄�	�ܒ��
�%)��D�6u%T_&t�|䖇{����q�'\.�g�d\:o�뽅�v����(ؗ\����(�fn� /y��2�i;����7�����{1�d����E��
+���:z�
���x�(�0>ܯB���%�s�� J��*v���_
Uƫ�����z
��5_ϙ�v�9�7�ޞp��یF|����(V�d4�5ڬ{��
s��c p�>w
X��H�q��ƍ��xI~�D�Lחd_����W����	��a��D�u����a1
��3�6���y[���B@�\F8���3Z��XԷ��E��V����Ȍ?G+xHlT@�c'�uW
��Li��~���ܦS����p�>�ޅ��X�Oi9�ė �����1�������2#,��ö�kkZ6�#�Q[�U�z3��A*K�����!�֏�n�>% NS���yg�SN>�˦p��j�#c��ES/mjj��5�Z�TY���7nԸ�տ����`ͼ�1��
с�
8}~
+���$�1~ݲZ5Env
ں����Sp�m��&?�Î���+�
V{�y�;G�
=�uv:%��\��81Ĉ�|͞1�S�ع�>W\��ڟ�������P��j��$
�>�CC����G�U��$;�q
+??~��_H���_d	)�$�߮�������
���'?�h�m
���߶�
�
+endstream
+endobj
+1185 0 obj <<
+/Type /Page
+/Contents 1186 0 R
+/Resources 1184 0 R
+/MediaBox [0 0 612 792]
+/Parent 1158 0 R
+>> endobj
+1187 0 obj <<
+/D [1185 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1188 0 obj <<
+/D [1185 0 R /XYZ 86.4 618.74 null]
+>> endobj
+1189 0 obj <<
+/D [1185 0 R /XYZ 86.4 443.466 null]
+>> endobj
+162 0 obj <<
+/D [1185 0 R /XYZ 86.4 328.565 null]
+>> endobj
+1190 0 obj <<
+/D [1185 0 R /XYZ 86.4 279.322 null]
+>> endobj
+1184 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1193 0 obj <<
+/Length 2946      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs����W�)&�6zo8��#ɪr�J%����4��1��h�����
��ȉS:ak�������f-^^�����_q��I��Z��^E�B��(No6�wK�.WL
/�^���v7�+n��ٷ��-��������D,���/�<['U�ߕ�߿���ś��.(�F
Zˑ��Xo/�}-6x��""<6�;7n�<&
g����QX�p�("B��ybIT���{_��BC��s3`4#�Ra
+�0]�b�1��)�Zy�}�ߤ/���q��Ň$�@�JLL�((�Il��Q��V`�F��$
��}$y�^�3ػ��3�'n�u��F$�˿����"�?��
A��N��tn;�Pn��5�#CDD�[٦�������I�b�_��N�b
�c�UDժ}���";X�x��T���� ����[ף
���(�k�&������E�B�V����T���q{�����>�3w�,w�{�
>���a
^���d�df����X@��Pl�$��~%�2-V���|��
�/�����eJ{0DĴ�s3޶$�֏I������/���6u�����	ӤZɅ��O1M�5Q�B!��B4�9c� IiV/�zЄEqbt���l�M�OcH9vl��Q����Z��s&
�<
V v����4oѻdl
�E��c���?��ܛ�ڊ���h
,Ɖ �
�<����_�߅8���f��@�鱟��3
k?���,�
��#�R,���oI1�d3�c����T�.
+�חt�C��J���~����5~9.�\&�1
F>E!�� p���!��6{�6�a=������
6�-wJ��q]�<�LjS#
+3
H�wi��/�Sb����C�4�&�C�BF��)�D�P��T��y��ٳWW3!$A��ܨm�rZ��}�lu8V�zT^�n�m�	��u���:-��c��.�jީeL$ʟ�O�¦P/����B�D~�⛩�o�+=�L�{!�+���W��?�1b]=�-
�A�����`�R�cLj�#��E�^��ID��O��b�
	��j��Fh�c�zu���A����L#X�~$P �p�3TF(�ve���d���&+�u�{�<ۥI������xҢ�;����c�S�k�.�槿�V\��z^�h�ϑ͝o�"'�W��7���_$�{�/�ofy�>�',�[?`:o3�cu�f3Usr
s����ӛc��_\���wV����<$밠"��
]
�ڱ��ގ�t�+I�Ѽ_Hv2f$}ƌT�1q��$
�<�_'���,���p�-�.nA}V2e'���(��6�խ7�+3��1��N�]��`��.�b�U�j�ᔧE�[�
+:
+;~�Y?*��p(�
��m�6���
 ��3�̓��o4iw���6�{�E2i ��*��|~���[��W�_Hu�Ta�w�i��A��]�
� y�?������bѸ�=��x��&<”�]V��r��`���h�р-�ڿ��
+�_����i�+�e��B�i�I^s!�ْ�o���#V�~�kQ���&B&'�t+���"�:
!�^5��b%�c�O���f<R
Lh΂~pf�䆜(-�l����nj�0"E{�09���Q��'05���>�Ė`�5¥���x�����(v��I���
B�j7�g�iShYԙh�
+�ik�굦iz[��4��:�.���ǰ6���ڈ�����k#���Qu���ɿ����e���M����OS�Q7.�)
�d���d
c��16�:X�ʝO%	��1��
�h�L4u�m��+*ڠ3!	=�1�#ɖf�7�7�
�3Q4B�hgr��T�bq��b�%\{���%�8�V�
䒝
+��'r���R'���ɥ�
�.h=�4���mQa�I��aʵ$���)'C������\��ʼn^Ě�
�
+�~m���w�����(�mύ=e��u6�,���Ol�4��kȾ��$�<���Y�
ة���z�p��@w��`nkJ�W�a��?����,-2C�o
GT��L���f���}�,BcMh_�=���9@�M5���ӆ(���>>�
@��48�1�GK�(#c�k�ӾB�F��ȱ;�?ae�-cv�,b��>�g
�Y�0��z����՟��E��
	��G�d��+0
T2ӏĖ�*�Y�+m�_]Z�+`*>�hхG���Ao�6�t�g��%\b�`��ҟ:"��r�N��}�n�
v���u���X^O4�Xz�Az#"YWGGu��W�:Ά����Ӗ�f�㲧=��5��Z����v�,��FՍaSe,l:)e�m�
���L4��j�����Xp�`��u���4c�m���њ�7n
�@�s���+���^�d��,#KuǶ%=aۖ���!��iCdߴ��m�Ӗ��C���t!�?^�A���y5a��%�bn��ze}�m�[���) [...]
+����k��5�T���|�S8
���mĜ�1"ښd Ht=j��fhFc*�4����'�l�$�D|�i,��>����Ӝ����H����E
��� ��l�A�����
$�m��f~���^Fg`���t<��?
rةs���xh?��R�
{����d>�o�H�b[IU-r����s�c��jO��O��};��aP}�ts�.%Zm���G���6q�=����M�������q���u��� 
��2��	���9z;���'���!�����Ig�6���O�ݍ���� 
�0i�7�����J�hT���i���L�. >.�xD�����
��F���9��L��p�g�î�ߚ9|�
jⰻ��o(d^��<�3�:3ϳ�O�Hî��_ΰ>�� �� �
+endstream
+endobj
+1192 0 obj <<
+/Type /Page
+/Contents 1193 0 R
+/Resources 1191 0 R
+/MediaBox [0 0 612 792]
+/Parent 1158 0 R
+>> endobj
+1194 0 obj <<
+/D [1192 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1195 0 obj <<
+/D [1192 0 R /XYZ 86.4 701.138 null]
+>> endobj
+166 0 obj <<
+/D [1192 0 R /XYZ 86.4 550.497 null]
+>> endobj
+1196 0 obj <<
+/D [1192 0 R /XYZ 86.4 455.2 null]
+>> endobj
+1197 0 obj <<
+/D [1192 0 R /XYZ 86.4 205.024 null]
+>> endobj
+1191 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F16 461 0 R /F7 778 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1200 0 obj <<
+/Length 2851      
+/Filter /FlateDecode
+>>
+stream
+x��ZIsܸ��Wt�b��VH*���)�4J2��bρ�fK�a��)����
 ��^w���"��=��{ �����Nj�^���g�������L�D�"nH(��v5{H��
�E�J��2���,q��:_n�"��
nB���}{�����
d�5�*�e8[n.��Jg+�y;�D={��63)
���n.�sA�6��PJ���a4$L�v��
+ʘY�5a::��愆�_��J�>�
�`��0¢�q��//���d{]o~��^=�Y��
f8p��obĉPG�h�
N�X�a���?
�7���?dDp=v�:���
�U��o�����b���D0E"�v�����	�
hW.�i�C><�&�\�}�9_'���������\p"a��ҭ�2��e��:?�;{�`,d��=X�4��

5�"����њ�n���&�9e��K�:$�mh�s��z�?�A� )����
@��6�����ehPW	Zy9g�w
Cb��F�RnU���
+<��A���#���>αM��J���ܰ��7#i�Ic��d�n}�*��")�|�[P�VI^��E�?I����6^�ز
�6�M4~x(
��t��P�
����P�՛�rw[
Ɵd
{��E�]����F|�ҳ("�v)jd��ԛSF�"_'4U
��x,ҕ3���꧀��r(
!���Eꘇ�(�tr�^��]���PD���7�<�

�S�
���g��Ǭ���H�7rȑ-�r�
|H"�W��M
`���	,�͘�Ƚ�L���y$�)FL��7�HL8�@�������^�N�
G/=�&g�Qg��f��ڿ� T��7&=6 ���Ȃ~�����q�Tgu2v��R�?qT�o�X��2z�v��yʁ�[���?��s�:EA�m���<)8_ v�?����?�=��
+6�Őw�N��B����}�R�37�^�xusP�)���Э�
+
�̟��> w��	�
�$��{�=��B'^�U�\&U�����t�l���P=��c̓
~��JT{��ӫ����
�g�i�
���]]
�g&D_V�zAF�H�� � ,��<�$�;8��Y#�2���z�"����IID����A�[�=�`
��<
�$
+�1OXJio�W{t���9�r
+yʈ�-�Q�X��}�e�)�
��Y
v�4Ob/��
��Q[�j��
��Xl}���	>;݂�I�,�b'���N��T\}�u�M�q�a�=Џ����\�J'@�ȗb�o��
\;͗%X�أO
��Q����A�v-�f?�d
����6Vb
��
`j
�{]lS�����c�HM��ad(�"{R~	&`��
� ����
�_�#92��cy�
!D+6̸��j������$
��70f��Ҝ΂���.�?g��0�Pz�@� '��,���FDlx�^z�Uk��#�9C�ü��g�樼ssH>:�Mi�H.����7ٍ5�
fB�nSe�q_��dJ%ճ�f	�
\���	@��o��J0�΂�$�����S\gj���S�wJz;���NفpI-����);�X3R��N0"��"<ň�|o_�
 �H�=��Vi�� ��Yp4.%��S�+ ^��,�n��4�
4m�;����ܯ?D�����
+�=<�y�R"<)�=U���~Os�4�
N����4=�fv� �z�{�pM��(��:N3[���=`� �u��l1qC�
rXw�l at Q:g�◉�ǀr�F�i*��*�_jf��{�yu��߻t%^��s���C:c�d_��樇��~���;%�M]|��ACB��^�0�NA@S���4��-��Q��^�p+�����
�`Yd�&w�i�zo
��Eu��:���
4�T 0
�@s�u���S���ݘص~IJ��U�Y$�J��X��]:&Y��VH�O���?�|Yԍ��=a�.�������ŏ�w�l'^n�2�;�.�z�Վ�]������ei�K�}��
qo���/�������u�@���Є�2�.',���G�kM����9�&��M\���	ƛdO��K ��
�&�����M.;�2�u��
0>��goc�
+�Ϙy+���%�V�Sv��Se�!3PUO,�L]ПV��G+?��q�gWh#��@hZ��h��‡�~ل��+
0
+���l Oͺ�[��6n�
��,�2�/7�t7|���e�Js�8�G�e	�i�wy��fu�
�!#PTvj�	%&�^��*����&]z�ӥ�:��?�e�JǞu
9�q�ݼ�+ at H�%�]
BN� @�*���
�� ��U�:o
�wj�N-�
+�A�1�wV1��V��J�W�������i �����Tٞu6e�o���sWr�^��iBC3�փ����[���8��u=�8�hP���� �[���^�k�|1�/1�������~�'��tZ��D�y�1�N����
^6 f!�������3�
�����>l�c�t�
+
�4�UQ�6���2�
��*6u���_�r]q��8Ł�4s�Q�j��״{�82ݳ�4���S�[׷q��U�%,�=�+�ߪ�x驗 PӲEz�����͎��<�,����toy,���Í{'�
��=��6����6��X\�E��u�� �i!��{#�o��IZJ���l]�r��h[��ӅYBr$N����q!�0�m�klc5 ߓ29����w����d\g+߅@�)��&�����e3:��;W�� >S	Ґ7X��bI�ﮢ��Fz	J�%<p���-�����OP��~���E������u��dx-�FH��@㦥ݥM�L��	<�j��p0
FC��b��Tфܑ�R�Y��OS�-	��!
������WV�
+endstream
+endobj
+1199 0 obj <<
+/Type /Page
+/Contents 1200 0 R
+/Resources 1198 0 R
+/MediaBox [0 0 612 792]
+/Parent 1205 0 R
+>> endobj
+1201 0 obj <<
+/D [1199 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1202 0 obj <<
+/D [1199 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1203 0 obj <<
+/D [1199 0 R /XYZ 86.4 478.153 null]
+>> endobj
+1204 0 obj <<
+/D [1199 0 R /XYZ 86.4 260.809 null]
+>> endobj
+170 0 obj <<
+/D [1199 0 R /XYZ 86.4 130.378 null]
+>> endobj
+1198 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1208 0 obj <<
+/Length 2590      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks����W��R�dޏJ��Ȳ�.�7Y����L�jIBK�r�_��H� DEXU������~|�� ��MB�w'�:��[�G��:��%V��,��&�Gʞ���>��٨̗7�ca����T�яo���X�
����ww�|���bY��|�������zi�*=�X�������4��/J���W?o�H���yry���ݖC)����a0�qVKjHP�%�*���%�6J�v�v�k�aF�]��ӛw����˻t��ۂYC���Kh��7F>�
t7l;��rw���~��3��kFW�=��&���_Ÿ}C��*:�/�


��8l�gG�0a���;E0�̛{Yd�WaY�g��׋˝�
nam�ϭ��J
sn�cf	�1U�d�d��a�7�M>��ltu�A.I6�m��jVk�
:�*;v�Os1"�6�*[oV�q^��6Ng�9.!NU�ar?��S�G7��$�[��<�M�S��|y��h��d���W����~�~N��J�4�XP [...]
+YH]5�[���_�W<A���>| O�
d� �����1���Ϗ�߼XF�ɗ���H5�Âh#o4o�����7�)FŬC�a�Y��"�ow
6��0]��T�Q:�de�	~�q��DJ{T�jby=�������vN�?�
�3�T���35�lX[�u��}�&��䑺^��l�
Ei(8ku�6L	P#l��-�C#�05�L�F
~;eT�4 �Vw��)��ul��<��Xf�iu6v<�i;(��_���z�mB%
+Ғ�'5�r�(���8\~:;;�<:#j��)��鷾Y�m���p[Eh4�m��t�MP6�!��/7�	��YY�6�y��2[��8v��63�A;*M ��0#H�.���:t:G�����R����E�۠�2!v���Pʥqt�R R6�., �n�"��Ls��:Ӻ:�u���]C at e���%?�?�8Z�]�
1�|�� 1�A�Eg�A�	K�Ch���YS�a��Q�f���c+�<_fitwY���+�ߦe�XtSL�)X�u��s@��
[�����	��uV�K��Ǝރ\�3 J[�؅?=�Xi$�e
�Vŗ9ĶE���a�
N���A�|��߁�I�*b�N�`T�5�ѽ���C-*�Cy\�����"���X+�C��km�\Z.�ZH��j e�ݘFb��"-�� ƐL�H��8�&t�MJ�q���<�O�eW5�����5�� �H�G���LDB+G�
�Ld�}�"��*,��'Y�u����S��,��
s� [...]
+���Y2�Kӛ�0��B���Q-��X-|u���8����D��.�� ��C��%��
{��u��S�c���a����2}�հc�
��Y���n���5�L 2��t\��.6���р���������ú}��s�J� l�K��k񶋴\��
K��h��x�
+�6����
o�~��
��a�~e�>�O�Zx�\�'�|
+Q�������,�塏
���s|Au?ǧ�oIWg����^��{�R���
�Cu_
׻��jU,�U��Pi�U� `+U�+� @�@+���='�f����QQ/<��;�c�oy��`(�K��jR�AQ%�B)8_C
�iSW

|R��ԛ?D�~���
�~.��$>Ć��Q����p3��W�(F��{ ��p7t>7�
b�p7��;$�
&co0D��(��1�{ ��nh}!��
:����脥8�C5
n���#�E�[+�
��|�

9�{���V6�l�>w�=:�ȝ@�ki���P5���iL�%���}y~��o
Z!(�B�@�
�o_�?�N�����=;�
o;?F

�}��8�ض�-?I_-������
^BG��4
��e�D&��߶�Ex|�gP��Hb������� ,
@#
	P�����
+F˗S��^�1�F�M��*
��c���b�a�k��
W����~�VE|݌�����
+�#[N�MU���ʩ�CAL��"
w&��
%LH�eF�����,��
+룮&�*�?g�B%�U�
`�xD,�
�!Nd�{�X���9�*
 +�
��ǀ�݇U\p<3����MeQ��o_\�xq}ޕg�m��
+
�Q��z,V���
X��4�o
+endstream
+endobj
+1207 0 obj <<
+/Type /Page
+/Contents 1208 0 R
+/Resources 1206 0 R
+/MediaBox [0 0 612 792]
+/Parent 1205 0 R
+>> endobj
+1209 0 obj <<
+/D [1207 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1210 0 obj <<
+/D [1207 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1211 0 obj <<
+/D [1207 0 R /XYZ 86.4 485.935 null]
+>> endobj
+1212 0 obj <<
+/D [1207 0 R /XYZ 86.4 260.713 null]
+>> endobj
+1206 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1215 0 obj <<
+/Length 2108      
+/Filter /FlateDecode
+>>
+stream
+x��ZK������)��ɼN��Ȓ�TkUٻ�E�"�����ʯO�$� %Z��:�3_���`p���ۛ����%��AFR�o"-�5H2ݯ��1Gb�d��o�t�\%y�X�8y�����[UY�+Kj$ױ0���_ݼ����
38"u�i.������8ZÓWF����nqf��<�����av��qA��!T!�N=�z�DR
d��ZsDu��A�u*��V�4%=X��&K
�M���߽̓���6�B	C�_<��}��%X��u��R1D0ӱ޶c���@ 	bT��zgg�T���?#h����
��+����f��``I��qg更\�G˹֫��%!����a��#3m���	�SU�|�m��0��k{׺�֪ڬ��^��#�i.5n�����i�%
JㇾY����[��TǕm-'8d�����i��R��n��
`�2W�  J"J�����CG���/��� :-o}�8lS?ز�/����
X��?�����3{�c�Foo~�J�<�9,�#Vya�mɘ��� 7�Y���7���d��z/��0Ƀ��/H\l��	��r�D�xhY�
0�Ʊ����=-�����v����~��ԙ�:��j�
���#�v'*�.k�;'n:�:4���Ed�Ai%#l���T�L���F�
�=&�2�u�OW���q���d��E��`4N��X�����qq�
U3���fSY�A0����aI��7E�v��Y�['a����k�~��[ ?\e�O��ý��m0
5(�����|`���1���h[8�ׇ<-���Dq�0?lT�����p7޸��Uᷞ�dU�˒��=b4�2�
"#L��^wyRZ��A�#
y �q`]I���!��T_�ƒL�Q,d\Rh`��I�a)�4��p��I�ǻ�������_<%~��I���p� �@@jZ�u���0H^�c�KBmAуŠ��S�
�X��6�~�N�E�<L'��
#i�խ�l��3?�������L��z��#h���a3r4���̐Ƥ�fx�f��)���E
+����
��^n��{�nj���
� �Al�A��EMYG}�
�8�3����E�_�m�Pr��r鐲
�*g�u��DA��"\�E�)4$J"�u�䉆��6V
%�]-�
���S��=��:� -�=�!�g
<��K�Z
�i�0�m��j��`�(�J�(�`��>�w��m+k��h*�,	W*z	��� ^X� 
+
���Α����ЊkJ��+�!������n4��� ���o�'b�1��Vt�m�u[���W����gv>G�=?�����ע�؝��$��-�Y;��w��IZ\#خH
��<����\�
+���3�
+�:A
;��=<JF��i�yyX�Ҳ�
�~+�jz-j�a)����vׇ\<��>���wCr�ٷ�b�(D�&_����p��Fv�?�t��T�d
��\cTi�P�=��y:

jr\�Cy�-���8G�
Rc��f���
�.�(,ub:�~�dJv��$������
��^�*Ů,l���.���f�f��)���7
�w�.���I�_��)��:�p�Y�%y��6˥뱂�1�Or����x�� �̔gn3@@Sі޷IY�
)�K6��$��
�o���!�.��l%�[�� LUi�*`μ�V�AACiϤQ����L	�����EZSl
i���3���0���%�rx{v_ofCEh�?�e
vxz[��K
#����v��:1�v����������w� �^ʪ����)^?g��76�g�UHL~®ds�_@��_
+��T�Q�B�_���]qN�D�%)p�5�����/̮a�f-���0��,�¬5�����<����k��v%�+Ӆ���¬e�T�56
d`��8���Ҷ��WrD`��>�Rg��Z�@��B^��#�"*L[�Ϟ���@-�.
F
+{@�K�����9�ՕN�
��9�0���*!z߾f��
����ּ*$�>� ��ځ;#���=�E�$'z�
����J,Ù
B�zj|W?�8h ��'
��
+�J�
�;�sF�
�v���qO��*|���*@�
+endstream
+endobj
+1214 0 obj <<
+/Type /Page
+/Contents 1215 0 R
+/Resources 1213 0 R
+/MediaBox [0 0 612 792]
+/Parent 1205 0 R
+>> endobj
+1216 0 obj <<
+/D [1214 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1217 0 obj <<
+/D [1214 0 R /XYZ 86.4 701.138 null]
+>> endobj
+174 0 obj <<
+/D [1214 0 R /XYZ 86.4 583.999 null]
+>> endobj
+1218 0 obj <<
+/D [1214 0 R /XYZ 86.4 522.845 null]
+>> endobj
+1219 0 obj <<
+/D [1214 0 R /XYZ 86.4 342.736 null]
+>> endobj
+1220 0 obj <<
+/D [1214 0 R /XYZ 86.4 155.17 null]
+>> endobj
+1213 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1223 0 obj <<
+/Length 2722      
+/Filter /FlateDecode
+>>
+stream
+x��ZI����ϯ�)E��v�S98c�%��,3r��A( �����z��2K�
]Hl�o���h��Nj��\|���� #��n�"-�5H2�,����3*43�7��Ti��Θf�����N���3zW���O�����u���:-�j���ˋg7�.��i����櫋���hw^F1��G��*�� 
+GYt}��
|�oi"Jz�9�͑����uR/����y��٪�����7��e<���bS�7u�s��[��}�;L�hF��О��{�ĥUM�S�'�Ny��vw����I\�e�]�0r�Y|�5�����@�1A���\"�8
��:�Fx�r›�VYO�,����f��)U����Z��@�L�m�2Y%�嬮.�,��^�id��;�G6+�{��N@Ք�Iqg�M�~{-���^ZgSO[=/r�)��2�-���;��fJ��ʺ�i{�~qs;ԅ�d5��e��e�Y�q_�*�7kx��I�/����L�i	����RlR�!��!�e
C�a�zϋ�4�g���.Jc]66��~M ;��S,<BuD�2]�;���;�9����Y�����
P؃_0�9�~�H�%����ՕJ7R�^*��W⵽O�OW·@>N̤�$���h	|$�j�yO� >޲�	�ネQ���ZԀ�֬ἁ�8��.��ߨ����
�'e{5
��*���w�r��
?Z! [...]
+M!�
̅KDi�aoaL$� >�v�a�G{ri��V�P
b<�W?_�
�cR�����;B�
�t
�z������W�aQ ��0��ެ�/	b�M�wY
�ZP1����C�Q�u4E-a(
+��f�h�,
�
+-i_�U���|�)8`�4�S�o���2E
���(
���T�2u�[����$�5���z��B)��
�=N4�v���[���J�ܖE4 �%�̊[W8��*�=��e�b�s�Ea
+"��RaJ�
4�l6���	t�
�/�����

�C�T��
g�˼�C��}�ܴ�U���\u�
�)�E$�[y��>� ��s[q�Z<�_#���ǒ Ҫ�Hއ�<b�X������{�!���,��?(
d�V{SJ'A��
Ql�:9Y���m�
��%�:+��	�
���5�(P`���/+�Xi^�
+����}6����	���$!�I7X��
rH��Uv[aU����Jh�6}<n5"�%�
�Öa��Z&��,�����-�'�
�uFE�j�A��s�r��r(|�=�3c�f�S�C��0ӽ��>�ʣ�g�诶�� ����C�j��R�4d׎i0B�'݀�–H���!���Ep�>�kKA�k00� $M�����g�'�Ck�N'aew}�o&��i��\���r�]�6sH���&��B�}8�
�r ��u���b�Cw��"�6���O�D)�꜁(�
+	I�D_�y�ꀵ �ƺ��uvH�\�#������)mO�P^
B
���Tc�߅ۮD�#&��lT�S��m�w��(�`�Ou3(�5P8���
+���y��$;UJ(R m=�G�
d��Ǖ?;�w�
w������Nv�
��I^ԡZ뢊M�i
h��tv�Ά	�Bm��샰��TÄŤғ�75�z��.�@2��:��.��
�ڝ��%h���+\��8�HP����3�~��}�
+u�#[mn���OnШ	Hm\�&ٞ�h��
,�R��zcQ�Q��LA��ۃd���0@[P��`���T�3|�fPflj����wcc�S
+�S��F���M�{�A�t�>�F����#ֳ8�%5f����2�ceX�4����c�W�ۓ��}YC�e�����b	k��� ��P
�a�.dp0(�]�X��њ�l5Լ�016p<3�_���
��~&%��G
+^�Qd�" ��@�0 %c�%����G}g��wc�! 
�^�]�0}���ؓ^�e�eI��u�//�Z���Ú��k^��e��'Z�~u�Y��Qt�y������������7Vf� zd�J�!���2@=RL�a�̬���@��f�*���j��SwOfb�X/�*��\���>�X���C�e*	���'
���XO��\9���ˑA2��"��I�d�i��l0һ3��
�# ~ڝ"[RuCsn�ې�����}
bn���ݾ,����}=
(b�
��;E�f��?�Фs��1�[ю�|
�8D��Ҩq�)����
���c�
�~�1�x"���~�~�y �
b�1l�[�����<�F���
��[I�N���h3�����s���=1��y 9�͔��V���`+��)��3Pm�=��y�nSe����Mm�잦�0[
���"�Yfd�D�*��qP�� 9B!�d6���������p[E��Z����j�q�� ����v>	���������X��3�:+pt�>�
���j[3���ao��t��
+Cn����
+�y�
7\�L�����ƶ�2������C�����G7�s�[��o���n�N\|�>��"M�����nm?~W�8`{�߅��]؁.�������L�
+endstream
+endobj
+1222 0 obj <<
+/Type /Page
+/Contents 1223 0 R
+/Resources 1221 0 R
+/MediaBox [0 0 612 792]
+/Parent 1205 0 R
+>> endobj
+1224 0 obj <<
+/D [1222 0 R /XYZ 86.4 726.045 null]
+>> endobj
+178 0 obj <<
+/D [1222 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1225 0 obj <<
+/D [1222 0 R /XYZ 86.4 583.735 null]
+>> endobj
+1226 0 obj <<
+/D [1222 0 R /XYZ 86.4 322.102 null]
+>> endobj
+1227 0 obj <<
+/D [1222 0 R /XYZ 86.4 157.23 null]
+>> endobj
+1221 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F11 694 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1230 0 obj <<
+/Length 2148      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s�F~ϯ�SG��e�����)JB_�a�D`[�-��_߳Z��eENDf y�-�۞��Y���G��vq����AFR]L"-�5H2]���1Gb0d��oV�r8J�����ɇi�.O��Q����`H��:�d��������?'��x�i.�����{
����#ft�\7�83�·it~��	��Ļ�r�c.�
+��H����������|�
+�9�t��m�0D��ҠXkD0��y����)�6?~��M`$
\/�_\�2�
�dj�8_H\,օ�y52N��j�e�r�?@�u��sw}�
���j��N�VW��L	\
�M4$
i��c�B��^b�QN���J)�SڇR�A�$�җo��ZN���2�{\�vO.�J�5��|�6��2�?�A؄n�ҙ�,�2�#��(�%���(ҥK�l���I�7����kC7��ӌB�Kyl�I��P����B;�g�
�`}h��"eH���<� ��gD���j�MW���g���i6O��W���
~j��2h&,���t
g�n�%��r�~��]r9��V	%0�
>�5�H��
+��
Q}��@�V�d
a��7�?���z�j��N��z"h�9;ތz(`�d�PCN�G�$��8�
�-%'a��P��`2M>����W��
�wX��A#�p��(�.z��B�Vڮ?п
9�~�/���KK�
)�D9C�BTP��t5Zf�0
�Fo��HR
\-6�����Dz�ч��m���~�2-�K
���«�����VaUgKw#���(�������  � �Ъ��A��'��"���=��:J�#W��Ge���l��ĭ�����d�V�� )��t������q��=�KV\6
O���,����ٓ���}�f�v*��'2@�F�01�,?�g��}�`C�
+:PDA.cA���V�
+�9��R�"뇆FRmF��ކ ��U7��l�"�s�y��zW
q��
��(���JaP˶�PW�)o����|Y��ӼT<�j?�

����IW,�%~�|^5�l^�;�}?�E�*B���rY%a�*UY�*��uU�v���9���sݫ�%�Z^��˩��'�7T���,��
�3
L�}l	c5�#��(l��qI٤��r�V��	\ֶNYE���nzck�	;���
����{= [+����{ꮱą9�%vV1
�gJ=�
��5����=7~@�	�
���C��5-�p�
�z�h�ܓ(֜�.��j�\
+�>��䀀��(�9D#m"���p��v�c�I��z,��'���o�=]0Zɧh,J#��
����Pϕ���	���7ក_Z�'��.r�m���-e@��>�u}Z$���z��/F���چ=q
<��%5t$TSd���м�x��l�
�	u�GM!�|�b��
�r) 5(�9!��n
�ZQʰN�'\m[�� �7)�Rxפ�=��8�(���RȬ
��;��@
+{P�Ia��Ia~8R���B
C��+
+�xR؃VO
+���2"!'[�*a�����a���@�#)dP���l���f���#I�Q��
������`��B[�F��i�N8�x��VJF�@�[C.J�x��
?]u|*)4��F̐��!W��ֲ�N
�"��\�^q#5���O
�F����ȷ�*b���:$�ϓQ�!K�C'}T����~G��K�I�H�S3�}NX:|4	�a�o�)��
��}`�7g�UQ�J�7
�f�2@�� o� IGxI1 X��
��<����ڑ�
w&�kL�wk����(�k�w{
��q�;b}]�\ �}
�Or�(�i�׃V������A�(��R�݀�[
ډĉ��ΐ�����<H�0x �
mE=���u�z ��
,�g|>mtt�������6t�0����ҽI���;��J���-TNt;ߣ`�n�{�yS	��=���	
'�D�vA�,�Mym�z�V�x�}�,��Tg�B�w���U�g��ҍ���I^��;��P��g𛥀�Gն�h����zT5�da����YbUաm��wH������-p�@o� �Wx.�
�!��"�Z��5/i��>^��lu�L�m�6�!�OW��� ¢:�����P���i�
+endstream
+endobj
+1229 0 obj <<
+/Type /Page
+/Contents 1230 0 R
+/Resources 1228 0 R
+/MediaBox [0 0 612 792]
+/Parent 1205 0 R
+>> endobj
+1231 0 obj <<
+/D [1229 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1232 0 obj <<
+/D [1229 0 R /XYZ 86.4 645.994 null]
+>> endobj
+1233 0 obj <<
+/D [1229 0 R /XYZ 86.4 482.522 null]
+>> endobj
+1234 0 obj <<
+/D [1229 0 R /XYZ 86.4 319.049 null]
+>> endobj
+1235 0 obj <<
+/D [1229 0 R /XYZ 86.4 155.577 null]
+>> endobj
+1228 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1238 0 obj <<
+/Length 4023      
+/Filter /FlateDecode
+>>
+stream
+x��\Ks���W�S�zޏ�r�eI%�dK"��D.HT@��C�����ξf1
@�:��rPq�XL�L�t_����v�F��~�:��4#�y#��j:r&S#+|f$]݌~
q~!��~�����׳����tr��s)�?��4|�.Wt��O������d3[.��_�<{zu��C.�J�Μ2����_g�|�r�2���s���HI�	\�G�go�X�ެ��ʵޟ+�aؑ�<�ք)<���͋W��o���/����}/"3.]�"	��e��X���'O�^��;���3�2�q�x��.��I9^>вM��I���s>�<l7��smƓ��|�n��?@On��p�������v>�R��7Y�U�)\x�k?��*c��v�f«A�C1����O_�
+LeJ�!�
+f3mx,���^�і�n�l�
�)�g�?-o��<�μ
f
����i����͢U�s\T/�PX�r�8ǟM�
+&2['f�T&
�~X-Q<8f�E=�~3���|���	.13
Ÿ
+�_��<��CH\d��X�;�y�kg�챳��l��U�Ĝ��
������z9�D��ɭ�"g"Nj�&\D^E�g���h6���U���buC��eΓ�M�mVNy����^Hc]p{JZ�l:x�]#�^Od1�?M��`1
��3U�

�z��^��������ps� �X|=���ի����v�I��&��M
�K
��ۗ��}�P��k����7�e����,GXU��I,�K(7���r3���

?�:o�JM��ڮ�'�b\؞�g�����G#h�G����[ O�L��- e�
8o�M�n��ͫ�z�l>�M�}
��_�
+�e��s��f"�� I�ń�f2����;lDR��fz��
�=��]�ߘf=qCbg)^@�� 
 O�sA�x^�/��4�
�~���3��1L����׫Yb�;�s�Îʌ��I'��+�:��c/���`��/V�f��,m*�s���l�
�j>�`U�f��}��$�/�������Z���v�u���L�rKE<^�n�K{ͣ���|��dz��Θ'S�
?��
"ew�E5�[{B���e�l=�O��M0ǿ&�3v��xp�)d�ƛe�v�
���f�΅�+�
+<�j�|��]�/
��$���G��Æ;�+
�|���5��fw.��}%ph��XN˥�hJ�Kt�Z�N����a�UrYd��T>���$�[��'zW����E�'i����Ew୘t�_߅�J����XdB"_�~���$�yik$�R!��|W���.������)�;��5s��nLNCI
�_O��\:q�w;���Pº#X� B+�
	�O��!�Xs4��A֬
-���0���<�Ԋ5GR�Ϛ[���z 
���Q���U���m¨ӆk"N'�9�f��x {{/��DO�Wv*�7�y*6�%����v��ʀ�N"B^g
�I�)��}�����]�
+l�;=�X%񼐑�g�_
��%$�E��Lv��dQ>�����(�B*�4�c���|����~�����TC
��R��%!��=�� R���J+
g'k�A�ª����?�{�$a
&���2Ӧ͗o~x�<IM�>�<"i�}뉲nu ���pF
�()�^�A��_j�IQ��R;�e�q��o���M�-? J�<q

+�+�8Fg
+8�cCH�#a��3e) ���j�$���ee�V�³Fq���P�'������ޯ����-`A7��T`��
�
�

+�d�� ,}������
���+���g�u�T'\�~����6�w|����},��
� ��,3ۤ����KLf�LN�V |��6�\�
�UQg����s.x�ȹ��]@�$����%�Dc9���dq�Th��h��
r
����-!�ƈƹ%a��|
�$@n�8
V��J^�8J�����!�Adb�@�b��0�Gag����ⶴ lS	��1�	�
�{|v�����q9�=��L��%MsX�v��5��>	H3, H8�
+J���4oBh���
/w����&��ԡ�0�\�X���$�|�D*�!�H�ѐ��_�y���U~��,eK��`���L劖qN>�)nYYD���0[���;���hy;���k�yY>��Odʷ�.��Q���$��y��3�M�,UQI�
2U8R�%
�ˈ�@,�1X��tOV0,
�$�<�D����yDr{,��уH�����c-5XSc����#
++��
n=��.*K�&sUa�T�w�=%�@�"���j$1LY���:
8��E�T
� ��M�v�q�/)��	�6��H�
+HzJ�b��44����T\�!dr[��H�
��ۆ�Ll��$ܮ\OP~�);0����e�
?_M�/.������f�~X�����}��Z�P7�3�z
@Uah3�/��I
�g��귅з��1B
���B
�����cp򣰞m}Ѫ���R�
�O6��?��
:�Y
�nWⅴ����?�J��t�-0,�ݖQ�����Ͷ�IY)���v�a����];l�?�M֡�������s�
'���:�@��)���[$�>U�X��$:g�D{$G��
∊l���?�"2A��3D#� R�d��R��S���yf=�������'��d�����G��٠�
RR�K}�
!�����?�
�=��6�
g�u�xܥ���
��I�N
�,��!VN��SL;�
���2�p
$�@��
"@������sC*1
!��JLm�GSCס����N�`6��
+h(�
��
3T�$���������sA)ZY^-��W�h!��K
/��A{ڂ�C����)fpJ�Vn��C�	C1��C�3�� r��y,�'QOgz����vr��c��,)��U ����EQ�2

��ᅝ"���R��M��C
m���r:
�N�s���
���;�R2Ӈ,M��o#�͔4~Leu�I����o�`�S ���K�i����
w
+�7�R ����OKO�r-1U���pʍ
D.�d<�{�4
��s@�JTu΄򡦓�
�N=���@�j�iZ@���&�j�o��f���a��q������@M�P�.�
uL$'��
.�Z"�f$,�����S�@
�Ue�N�m0m ��QB��B�C��,P+~�I��2/�W)��*y
I��u�qD�j';�	:�=C��D�	2��AS �I���T
��?�U����'Y
+�UE�-����t,�������}1=J��̇l1J�*R'#i
�j�R����=ГS[��������%	���$-�)�끞F
a���\ql�$K�B�)
���N`��M�Ȣ(4�\*�S�(��g����
"�yK=�8!u�T}��H��v��A�)��OC).�G��DK��
+\rK�$D#�[
+�_`C�
+��
d�E,t}P��O���Ar*��c���.~/������XH������X����
�� �~ds_)��{����Y�ȴ���}����Ǯ�͜�?�j	�
 ��=A��M��z"х�
ʚ�۾��޷��ͤ��-����{�\��u�6�m������B��B���{��<��Hg�݄�5i[�O�'���j��Q�R�4/����%j?��a�c��d�d��4���j�@ͩ�3�t�<D�������{�����c֚�
�V��fU�L���QG��o��Z_ul���Vۊ��(���-
�H��Z���t汳x�_�%/��K4��
��I�3���	���e��(7M\b�E5qe��/��b7��A�[����� fSɻ�r&��Sa�
�*�iw
t�r6�UG
�ؖ5�rG�`��g��%�+5c
�Ɵ��MgTLc�������
z���8����2`�2�B����f{�g��M��{��
�	�OҒl�fQ|u7iR��Φ��:X1]��.�e�SQɭ��a���l�-o/˦ꝶF�8�;Ų�v�c�f�|
��\%��/갗B�!/[��kBR��Q�
_��E�p{�ԃNR�ф���L
���Y�&�]���H�>����A�b�l+N�7��[#
+endstream
+endobj
+1237 0 obj <<
+/Type /Page
+/Contents 1238 0 R
+/Resources 1236 0 R
+/MediaBox [0 0 612 792]
+/Parent 1205 0 R
+>> endobj
+1239 0 obj <<
+/D [1237 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1240 0 obj <<
+/D [1237 0 R /XYZ 86.4 614.667 null]
+>> endobj
+1241 0 obj <<
+/D [1237 0 R /XYZ 86.4 215.581 null]
+>> endobj
+182 0 obj <<
+/D [1237 0 R /XYZ 86.4 107.83 null]
+>> endobj
+1236 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F14 697 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1245 0 obj <<
+/Length 3715      
+/Filter /FlateDecode
+>>
+stream
+xڭZI{�F��W�H��4k曃�%���[�%�"["b` в���UU7�5�Nl6z��z�v���������O�{��E�eq/.�i셋$ȼX���z��2��
�����4�~�+
���py��V]QW��E�A�����??yy���'
+[�
喌�4���_�k|�y�{:K�<n�u�h��O�����
Rg�SI,nͶn�@�ʖyY� &Y�r"�
�A��[�Zt������mr��m�t�/E�Ս�U��h�*/e�x��.���U�*�����u�6�KW�V>���4[���^(�e�=ѳ��0�8CYR+\v5
��U8�DzQ@\�9�������!y�xhL��Cצ4

�6a�h��.��3�ހ|FC,�A�t��N��0fRi���
3q�ͮ1��z��/�q&�=~$�n��� ۫3��&���H'��9�$`�je��z_J����N���}� �E���
%HE���n uA�x��I����
f�.D3�=�P����^�9YVgj���\��A{~�N�9A�
+�,
1 �0��,(;�
lt|�HA���$������/\�80�����_����l��t�ۈ*���Q�n����c�a�a�nV
��%������^�<�#�W��%����! �i=�p�77�D��V��E<���g}��e!����I�����,kH�""����Wu�.,L�����]��
+�D%��f*,K��
�y��A2,���50;�e��`�c�79:��=����1��n�y�2O
��iǢ�,���Ϋv8a��͏|�#+�����,��z;G�N=(̀�c��#�6�t���R��z��b�45�J{~�R*J�=��͇y;����۩���4�1�|�(����A2����fdyp��,HE��j= ���{�:�Hks�T����Y�o��%U8�C�M���q�%�ae(a�v�h5���o�b/��
���D��ؾ6�� L�n�
T����,*�7�	����k��	
��dg�9�t&�f�\����"��
Ct��O�>����Y�2n��
bm.����Ӑ�DN�)������wQ�7�����a�
+8����?
�q�g��I2���$�C�'��;�m�r�:\�_'�2�Sa��dG�k�ok,��%e���[�r*�5�6��"DGP�l
+�w�'�v[i�ty�%��P��:	�*
*6T(��z� �t[2Zٶ��ݤј�ư���cOdSk]�pL��[{x3���iY�fm����@|S=I��z/��̮�O�Z�8�L
��
���E-ۭ�b*�s��[��޷{���a���9����J+w5
Z���~1��.�ki��9�H$��e��
���5�ty��	5hJb�Z�b�w�����|�Ǿ����{�R[�wMyN
Kx4W�^�vΟ�$��,�q�ՉP#`?�.94�m#�lj�n 
�bǁhY���I��v4�$�c�
�TI"P1+� @!K;�-j��
J�I���P�r3rBQ�Z�;5E[r�pXx)ߞXþ�|�?<1u1��kǨS'�ϒa�;b�-��Z�_��������G9k4ެ
�
9"����Ba.��m�MK��O� �,m�k�+�ES���F�J��cO�iv�<
b?���`��c� �y���g�j�L�jU7�6���Ѩ��
],�˭���4�<������U��nr&���\�/)x�`�����:no��|鬉�
߆�6<fBI�� 
�R�~�&2��61������m�3�
+}OK̆�v�"S3��k�#��-��9U ��
"O6*i�B���ʶ�6��Qn��ڹ��������bJ,&��wSر�P��Ȣ��,�
wU#	!6V��$�<���7��y|��8W~��:[�	� �� \a7?Mx)� U��g��˂�(<N

�T$@�^�l���n�
-.�S���4�s;���V,�Ŋ��
|�����"�>���:X��A�`'3ݾr�
��pZ閽А��`�c���',�n
+%��㾲����K� a�b[�
�c
“E���;�'�������%
�?'��%3�M�D�6f�Wz�th��%�Z�"�S!w�*����q�wO�6ԁ��'K�1��N�U�@$�$O,�SJ�#��i* �@#o��RT/ž������X�+�{p��5�6!�m�ܖ
�9�F���>��.shY����3� ۰϶�8e�>/M���T
+���U6=��lυ�η�;���G�����bEi@��A{a(��9�?����R�L���`ZD‡eP��T��f��k�Ib[�$g 3���4���8�l2���E^��&�����^A'��}�4M'�����L�i&
}���;4
� �݃(� 5����Ӷ�~
��C�K�Pp��ЁB�I0�o�\F�I��u�`>�Z�׺K*L�?WN��Q��D���m�������
�>��/���K
h�O�)�p�`3.EP����O�b���Ig���f�R��o������*�lY��((5Ƅ��8}dFq��C��GS�eQ(3�
�EogL��z>f�^�����6(�-(kra��p,?�L�3����v�m
+`W�0����euHÁݏ|_�>�j�1S���܏
�5
��
µUn�����(�b��:����pM�
)h��U�����
��5��z���!¡�'0w?���K��5G�M&���^Je� �����/?|x���������r���v���kA�5��R�+�5��5���S�
��S�v�� X�"�߼|3�S/Hԣl�*/�;�l�����'�S��
���
R�<h�iw����
�a_��
��'��6�T�ᆋ���Qu�S� �sx
�K��5�
�{0wi֥I���{N�t��� 
O#��8�� ���q@��ƿ}7�1
?�([B����o��~���)�Ş
�8�8\�ts���4�<��ɲ���0B��h�iL&}�Ha�@G��FA)$	i !�)�$������0V��fk�0�\g���ۆ��+�Df��$ݯB��H,%��+[�3o�
aSg�&��������g�M�nok,�˸Wu����Y�ēmr{�5<������rR�:
+�`�c63X���;�
\:NR���.\����i�2겪��7Ȍ�gw ����f��=D^RՏ�kM�n�H�w2����7F�t�
�B��
��R��
�@́)�)�<`��a
�6؄��"�8
=~T
+����c�^?
�և
�ڇ�V�X�U�M
�T<~JIWhm'�(N�N)��IU�k��yyj�\
޽xy.]
�r���Nm�^IM
���R��)G
+�-����x�O,eC��,1��;��=�$BH
+B�>����im���_��FONb��
��C��P�<�;�,U�����=ڽ��A
	=?���ȫ�Ɣ�r�
+�k�K�#���
qoG�s����
+��~kn;)�
=��L_u�R�,��Vj�
��ْ|��
��%E�ty��J�Ĝ��c�Wg��Y��h켍]���f���[fo)��j��Q�W܍��Q���殴whb&���N,hyS7E�ٶ#�g�N[3x��WzOY��wR�� Eo
+.6��
�I1]�)�}����S(�Om�>�G�}�bB
�<��fVܟ��4�����~Ӿ�fb���1�/�Eh���˟�|��~����?�H�
+endstream
+endobj
+1244 0 obj <<
+/Type /Page
+/Contents 1245 0 R
+/Resources 1243 0 R
+/MediaBox [0 0 612 792]
+/Parent 1248 0 R
+/Annots [ 1242 0 R ]
+>> endobj
+1242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.577 580.073 158.048 590.921]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1246 0 obj <<
+/D [1244 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1247 0 obj <<
+/D [1244 0 R /XYZ 86.4 433.815 null]
+>> endobj
+186 0 obj <<
+/D [1244 0 R /XYZ 86.4 189.863 null]
+>> endobj
+190 0 obj <<
+/D [1244 0 R /XYZ 86.4 84.358 null]
+>> endobj
+1243 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F14 697 0 R /F49 646 0 R /F16 461 0 R /F11 694 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1252 0 obj <<
+/Length 3603      
+/Filter /FlateDecode
+>>
+stream
+xڽZK��6�ϯP퉓!ěܜ���8���'�C�-Q�$rBRv����F|�Ҍ=S{"�
t���/��x���?+�"e�fq�Y$���)3�/�֋�#���B'2�~�^�)���R&2z��Z�����릪��������~_�������ϻ_���]�u�a�x��<�%�,V�����k���"f2M_ܸ�Bɔ	h���}�uO��1SZ\��db;B#:M&I�H�h�bc<	';�
e�2
$L��������y[�
+���5���'̛IJ4I���x���t���Z���1We���X�N87�I����}�����z������������6��:��8�F�7�|*-)
3J��%<�Ĭd\&
���$%nӘϏ��E���.�"Q��*T�Y���XW X�bɥ�݇'g��4�sU�i�w�&�g�*b
\���%0�X�JG���u�f��?L�b��RH�
�����翎�= JUM>�y��R�XGw���I�9�+�z�F��pls�����  �F]lw�@�]�rM�4��#x�FF�m����km�l��h��x��-����p
�=^�ǻ��E�i�X��-�C�Z0Ǥ�12'��v��ċ�Q�f-�F����唼�mJM��ᔼfB���`�Ŵ�'��z���
��f4�ippAEt
��mFI����X�A��
V�]�W�K�`��y���:�,/�~g�%D[����@
f ��#e���z͚��͌.��Hҧ*b�²Ī
�*��d@�_� �P��/
 ��[
[�� �
��.Z�@g3'�T?A�r� �f�d�;c�.���D��ѝ��`Kt"`��sН[���T�L��6¶4s��0�/�
��K�ea��F��p��s3a,Cɰ0�
+2Ҽ&��פcm5Ý���vz��c��?��o�右�&�͉>��R�,I4�/x 7�6o�u9�����q
��[x���A0:1`0
ݩj���{䚛��s
��Ul��
W��i6��
v�γB?!W� 
+C���,'"C����o��*�2b�P��
��{^�ΏC�r;�rк�H	6_��Mo�2�L�eW���^WY��02�)��lK��� ����/�~Ot����-����SC��\�(.�F�
N�2�B�ǞaL�����)o�b��K���>/Ii�l:��$�@���T{(���B:��*�Ŷ�|@��
��A�� ��b��3k�A�BC�¹yV�
+!L��(��{=������޿>�X�ڸT/1�`V�'~���?C� �dm���Y 8\�
�WO�@�D��{o!�

q�!?T���&8ʉ[�0�tN=x�&N� F����_�v�P����O�3��hG�	A�2,�u$�W���=|�4�c�_��)v(�c��@�y��Sp1"}SU
Y�
	i�
�U�w�]Gr1�
��I����6���x)���
+#3'��r>����(vf?�d
��^�&U�t|��I ���濔�~y_P�u &�l˜?�SD�?v��= S�{�WF
eUz��<�@J��2!F�@����]��t[}犲�i�<
�R)���p�(�
�e��k0�![�73� @�ҧ:
�������8)`ڎ���:
�zh!�
5u���λ)����^�@���}�9��}��%���rr7�^Ձ������!�E�H�)���T=�2�����
�x����y�.v[�8��S�G8 ������=B�.Y7� W�^'ұ�@Ѱ&fVE^�
��γ�*�XIA���I=��
�����o�b��&yH��y����8,k��ͱ���[Md�T�c(�x�C�
0�}Q�YM�0�k(��et�F^"�������m^�L�7���<��ȵ��;��ZzY󍧵���%D�à_WYY�����T��x+_����r�Á ��5���yI��:o�O�	ত~',lL7�Ѧ��nSg�-����(x���2kݴ4�-�{}��͸�0vS�k�5|龝�g8m���ѧcK}��C�~hX���p�
::9�
�uU��쌽�y����B�y>��WD�(�\�
�I�@C�(0=U�?�	z�R#����
�}�"i-z���
���Ai{۵�c<��(`�1��� ����Lt�Z��� ��a�����rx�x�dfX�t
"^���B$u��hH�G1����k
.�@��-�y�s.ˬ�Oq}X��B� ��uK�$�'
d��F at Nn����M�:R*I��xw��nfZ����KL�8�Ž�=��@�m�}��!WKc=�����L
L���q
���
i��y�6�T�C�WN����Z=�ML���?S��P�+��Ow�媠��q��,lӆg��2 Gk���#
�q�;��DZo���YA�t@�uܷ�����
a�S��N���:f{�,
�8=:k�vd��z�Z!�fZ>�Z�z�X����
�a�f�N g�B
+�!�U�D�k�HHܜ���}3c:<ӑ�E�M9KL:����
+H}y����Bbq5O�d�u��>m���j�		��L��& ��BGo|�g5hh�dۜ^�@�
C��:�}!V��
ݼJ�}��
L�
��|�¹
4��&c���\���������#FJRT2�����KV�� Ϙ_M��ӣ�����ļ>�ֈ�\@'=<T�%n�g
&����|��N+��C�Ž�-�3�
@o����q�JaŮ��Z�����}M M!rꪝ���|�
�����Hsfɉdq���#,�gҦ9��2���lqI.����>(�,M�8���P���W�1A�s|��+h��\���Z��s

]`ˤ�|WZ�i�mMW5B�-��}�����-
��L_
,̞��o���f��g���<'��1��7L> З	Lp���,�_�
+M��ߡJ%\����l��׵e����.���Y[F|�*�j�@*��Ŭv����ݡZ�!��c�t�}�c�9%�lof+�ݘ|7'��4 ���	BkH!�#%�W݌���Qތ1_w3���ҁ֭:�[�L*]2\$Q'6 2O
�sA�d�?�<�;���J�6�R�iy�\�U�9=5,|R��%�3V�9@��q���-3J:JR�6��1�<{�a�u+�?vgEC�����.ݬ��έ��3�TN�Ý�ۧjGw�p�
Civ��u��
C:�<r��r&\.1�\2
2_R
����љ����)
O��ag���3X����X���
��

��f�@����c=�f
+VDR5�Z�3&�8�ぽT�J| �-���:֠�q��y��NH��}s"R1�KB�����f^B'X���'�Y
�t"�\�8ft��0 �d�t��r��c�	cs�΋x�/^�΋`�'_Mw���.�
�
�LO�dqr�R%�@���Y�s<�%z���p�5��`D2�<�:9��+��c�������M1���g7^�� %���H��!� -F��ϫ�����4��
3|xe�O��W.7���8�U��9�Rh�O�O��]
+i����u��
+���z�E���aX R|�M��|���s%:
X�|L9��,��^�=���6l�q��q�e�
ܤ	��1��a���l�
+endstream
+endobj
+1251 0 obj <<
+/Type /Page
+/Contents 1252 0 R
+/Resources 1250 0 R
+/MediaBox [0 0 612 792]
+/Parent 1248 0 R
+>> endobj
+1253 0 obj <<
+/D [1251 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1254 0 obj <<
+/D [1251 0 R /XYZ 86.4 701.138 null]
+>> endobj
+194 0 obj <<
+/D [1251 0 R /XYZ 86.4 310.812 null]
+>> endobj
+1255 0 obj <<
+/D [1251 0 R /XYZ 86.4 241.798 null]
+>> endobj
+1250 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F16 461 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1260 0 obj <<
+/Length 3056      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�6��W�m��Ɠ ����GʮěȊs�s�f(
+3�Lr�����
�oj$��G��`h��돤��]�p�׋�g�E����<^\\-LL�BsKb����$��R�Z�����l�t�]2���:+��t�-�:���oO^]�|:a0]�F�"FƋ����?�b
O�.(�,nݸ�B
+K8����'����͂1b���c��q�F"N��q�*ˢ��iݞ
+����T��}W0,
+�Ƶ>{mzۧ�%��X��>����GI
��:-��>�r���.���Eeq
+Z�����{YTo°2ݎ^L�uh\V�v_��i�䫴:�ۉ��	��.A9�01�jp�F�����MܙW��Yq�'�A+(�����!�
+�.�m�֋�n��3z���X5ÜF@�����m��-
+��V5��t6ˉ����ә�%J�CV�;�W'Y�5�[ڄo�,����?�r�0���o�?��]yQ���LfT�ź���0�����*��
�`�����`ڨ?b
�"�J?�-k�{pL���q߇�z��R� �$�&��4uL
N�E�`���\<�;
x�t>98� I2��'?REټ�T���OU
��9eA��(Ŧ�TD	��D��?�1��XFAP
^
�)��wS��shba�n ��G��4�����1�u��f�c��vp�٬�(�?�tV�h5|lvt`V���6pq"�
�֨��#ܚ
��g� h٢��A�t)9�.6i��!*ݺ �R;��1�n���?�
���@�[���s�MV�!�0|To�F�:�H���K(�Il���Ҝ܉w��:x��'�)�v��O?A
�6��Ah]��s�gAh��}q��A��޸
+)ъ6�eÄ�oS%����n]&����#
�L���4L ,��>��](�
+����	��~���X�a�UA\�`�p�Aύ~�ģͣ ��#6? !f
�`1$n��ҟI�XE��h�1#�w��p��S0d�%�k�@�&����M�5�$�
\���b+Ax1��@�քB�
l�O�nI�3�Y��ݞdBFG�� ,�s��}��&˒���D�bYRi� {��N���i�_�I��7�
��!w��/}`��5
6����`�\!fu���<����
��� d�+
��h�E9zw�ʆIM�ߘ6
+
�aJ�h�i)���������]�d��A~s8�t)�Bf܀�P2"�d��w�5����uX^��2K.���Vg��$���d+|���;� աaݗ�Us`��i8�67:+@�@K A�
�Z�X�Yz�,�WS���`]�����`��s�
x6A�݋=�#�T_@s���b�%�Hk!دq~�1U
�q�v�DmP�Z�z3�W at 6B��Q�]�Ut���L���`
��NR�+&��]h��o|q8��(���!�4?��$���j^I#�H�[��IJ�Q�����<�`Q!�}-9dʇ���C�Nߧ5/g�4��]�5PX�Ŕ
�yZ�˼�m�|�EkEi�|f�h2�<�jF#
�ZL��Z���J ;t�}�L�,SߕA �
+�`����������!�AH���ĩ�w"W1�S ^-LW�Q:W;i�
8�Y��
�CNVS�fU:>�����
8:؉��#
+�@�J����<\w�(!��rLK ��>�2>��PҶ�Y����±�>Ɇ0�S�
+B'���g�}c��n��l�
a
+_��
$6�	��a�;�»���|RB˳`�[�A�-y��݃�d
��j%
�	2Q;(�nV���/��2��Uv��|�Ԅ�&P)Qb
h
j}S�N(1�asu������͎/^�~i-��eO��3 ,�MR�},
���+$�BVk�XdȆ�ڃF��V	$�r
'1��ea�����*0�
+��tM��!}�䰯��;�
�Kd�P�q� .jW�.��{y� ��ڀŌ������ND⣛� @��7�������
��������_��V�s�0�ɫ�ep�=��è��|�
�:�a�U�{�0�Z��`�
?���spT�4/f���B�$�^�&��\�;p���yQ�'�*�0��k� L��>�'v�IT.�S0	�Ƅ3;��"����<�=���v�J���eL��GC%�i���~H}��G�ѱ[
ұ_S�K���F����ھ���̧=�,e��r �����*�_��
N���#8 (��W
�ך�Gq R�^X��lw�K�ؗ�K�ۗ-b�`)�Q�
T�܂
�60\�U�����{���;H$ *��>ᆬ8�٭
pj����`1�[�o�
eS�g�À�:A�����%/�|eI���4:��*$j����y�GS�wiW~�v]r*C�^� 'E���
5�S�4_�,��e��/�l�
��|�! 
����q
W��<�$9��6���v���^�pvgsn-��}(i� Û3`eM�ގ��[��V
��1�I(��,�gq#���w��׀g�=�ׁ���]!�b#��J�@v����C���B��4
q���8
y�qP0Z>
���V��4�(���f��I���>R)b:���-�&�Z�
��_���+2k�U���d��K^����Z��ա/#	�i��x��印��,|jV�>�š�
FI����IM�'6�WӺ�-�(1M��՘w�U�+F�5W��R$����v�������Q_�P�1@�(*�R�/^���Ō'�L&�d^p��p�����8�7
+��;�z�Tk�!@��<	=�ИR���
L�J<�
s�HQ�1gQ���_ƈN�-���`~K~�m�*.3�S��b��FU���h��!2n<#����-�h��t'��{�ȏ�H�q))
+�f>lo�<MJ�������O���S;)P5׻fbW1� ��>^")�[�Ryn
��l��b
I�ٜ��d崙�n	s?�P�"�y�:���ˏ�M���y�^�#
�������*
���}�?>n��x�pJ��
+������ߠxk�p3�G�����
���	݃�Jӆj�$]�.�}���G
?��^�}�����@�r�azړ�"�`��le���Ĩ�
+endstream
+endobj
+1259 0 obj <<
+/Type /Page
+/Contents 1260 0 R
+/Resources 1258 0 R
+/MediaBox [0 0 612 792]
+/Parent 1248 0 R
+/Annots [ 1249 0 R 1256 0 R 1257 0 R ]
+>> endobj
+1249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.59 635.514 460.313 655.838]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.965 49.651 164.939 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.041 49.651 196.764 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1261 0 obj <<
+/D [1259 0 R /XYZ 86.4 726.045 null]
+>> endobj
+198 0 obj <<
+/D [1259 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1262 0 obj <<
+/D [1259 0 R /XYZ 86.4 606.929 null]
+>> endobj
+202 0 obj <<
+/D [1259 0 R /XYZ 86.4 385.45 null]
+>> endobj
+1263 0 obj <<
+/D [1259 0 R /XYZ 86.4 317.582 null]
+>> endobj
+206 0 obj <<
+/D [1259 0 R /XYZ 86.4 99.063 null]
+>> endobj
+1258 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R /F48 619 0 R /F14 697 0 R /F11 694 0 R /F7 778 0 R /F1 781 0 R /F10 779 0 R /F16 461 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1270 0 obj <<
+/Length 4463      
+/Filter /FlateDecode
+>>
+stream
+xڽ[Is�H���W���
S;��1�'�����lٗ�>�$$��� h[���˪��"%��9a+��r�r[�,��������_^K�������^�&V�Dd��|q�Z�sv.t*����9����9;���.>�I�{��]^ok:Qх�~qw�.�y[n��췫7�^]=���wقw��q��b�y��ol�“7
�,]|��6
%�X�l������1O�|
�b�űyR

��3y_g�¤i����
-bf��²N�c�eq�)L�c�Ǽ�O/��ˢj�7��u����X����&M�,M�6�t.&Q�L2���ſWUI[iWн;c��O�[��]�*��ε�ѿ�f?͘�{�$Q4��Zwr��
�"_�<��w/�٨�
+�%�ur�
2�2�ٰ��J�X�lʂOŲ%����!#�P�'�"Uqr��k���/�y%
+'<δ�;0��g&��)��-W��]S����
v߈�@VN��%q�Tਣj��yG5O�TJO�v�
��S�j��B�Ƞ"�۩�I�Y�n��ὕ��${J$65��)G�L��4�)(Q��(%����'9�F���cSu�����w�
i�m��ˋ_υa:��-�
+���]uƣ%�kcpSF���n���jo
7vE��݃`o?���Iy��x�5�����qC�Dí�ꯁ8�57݈��&�1�,�����'�d���%2n�)�ּr��ww��
\�Vn�a���
˖�
O�u.���M�UPu;���f�)*��m&/<�<_
�P��WQ�w 
��.6�nS����9�s7�9�ppގ�?��宮��ݓ/gZG�z�Eb{={��V��D��1��j5�@�&��2ǚ�{!�ߵ�=]���'��\څ�_XN�&���9��;4�T�9�Q�o���d>��{]���2ge�2���1M`h����
���2�C,�Dh�8M��+�2����
�@Sv��V]����n؁�aQH���u�c�~�z��?cMb>��0��9'8���S)���a�mw-���2�v,a]~sO���J|��r�7!�gp�ݧ=�	�d���`A
+������7p"�Ma
���y�ĥ��t_%�t���11�|�F9
2o�%�6�ڢv���Ѯǎs��\1��
O�
?Y�Fѣ ��h�SpR�g1�L�C��t�I3� =�By��XQτ��i��_�6��s!Ә��-���]��#V�2��T�&��J*����E�Ϡ#�vy:P

8����ܼ�=�|OrH4s��Ǜb���ݽ|��Z�D�o9��.
���H:���z�1�@Пdj
+UfXbt� f���)R���3m�b��@�}c�ƞ��m���ܺe-
%Q0z*@��r�e�9	��gb��^h���-x �0B)I/�yg�����u^��5X`~әiS���A���]�,�`Th�fS0��hwu5��3ԯ�^���*
��c��Y�?���nM�dxT �TCIR�x��-��4��nM؈sk.�Tʶt�۽:@�L�{�.�[�=�F��u�gq����t*	^g,� ʅ�^�$�1�X��h�7^G���'��tϵ%�LT at f��Z��n�%�h�G�z�׶ jI�	@�:�q�ƾg�Ź��OCK�)\������ze_�M����p�~��hz�}ה�s��L�P�:��'Zm�mj�}A��E,��
�� 
���0pd*f̜2�R�
+P�%
���x���"�E	6B=���b����.>�xas=�^$WZ:s��U$
�.D��G���D�pi����;^�Y�Q����c�DD�j_9��K��a�S��pѫE�E+Ӎw�S�.(n�.���6�ˢ�|
g�<$#��
��E���<��
+i���
�
+$�0��N1� �OJX!�K%f���^e�~xu���c�O�U��,I��}�◷A�'(S�B6+�5�
c��Z
6YTy��:���3�)LO�G�,�hU���N3Y)C,$
��X,�'�,,���~�<`�$�ˏD�{���\n)Q9�;�$)�|����y����| �.��C4LW׻j��
+]m��� `�j�����Ld8�r��g�	��o�g
�C�!c��c�-�A
����O)̒�XC������R!�1S��S�����s-t>�2�ƄN�3��b #�:6�J�S&h&�-G
o�a���
�P�.E��oO�2�B
I�Q!��^!Ohɲ�9=ɧJr���U�e��j[����n�3��I��
��3l\+��P�(n��7��"h�UU��Җ��A�W���	�e9����
H���^��[R$
��V��]O
"�b6~�[�>��!��ĉ�Ŝ�4��

m���KJ�u)͐Q���y�
���R�ͱ!�w���֙Y[>1�n
�-s�wMc�%�6�-(Q<�
���
鏗�.?�
+�!n�I@�IQ+�!�����Wo_�#�f$��
��#6u����x
+�"����_�{��C��f�(�t{�v[�����"���ʟ|��֏����A����N}�V����%w��L�����m,v�7�S)����.�Z�5"��[��ƮZ����.��)\�,�Z$��|��P"�N��Cab�Gf}��qxR��C�@�X
+�@��4�N`#��SQV��o�Ro|5���߭��["~c��g��y���K �6�?���q��{x���;'�B����
����0�L��'�{8���l�pgRc+��-ěd\=�SJ��12
+A#��`���_���tW
pr5-w5*e1�����#��\�R���x�$�K�ew���퓾�MI5�r鞯{7��
i���ߌrx
+ˢ*�,!���
��r�?V��?t�Mn�
~�$��$�}�DQ�CO��]��܉
%9����7��N��ժ\M��]q��{
+5��) �o>��
�
+�c
p�Ϋ�e�Xt]o7C�&�#&��L]��g�H�m]����`�:]N:�<�
�b�ڄ8CT�%0�=�~�Xe�
n~���R�l1��Ha^F9W��9	洳<��54�>�
+U��f��,�������@�e�8�������RZ����뼪ι���"ܘ#�tH*��
+M6��q&�k�L��"� �~~��
Y�C(,��ٓ�R1F���(l�����}Z��6c����4�,�y�L��y>	M�uF-�\�6O�)�C�8��jf�G�[�j2Ǿ�����z^��Y�5��m*70x��*��#�#ܨ�
7(�4����A0TK�nf9M'^�,
Zw[�o� �=���.!j��� j�͢r�r���$3捝k.�g��Ås�6��(`�}�V���\���u�Xv
yy �o
e6\F[`�?w~�]�:<-ba�#�>bW�%B\
+QHF�
�xX$]t�
:�K�S�=rjԃ����w�`p� Q�,�̙�P?%
@���J�i���CV�6��'!�7�L��YA�F~v� [���	(R>�L��+��o�
�R��x�������Kd�a��)4}M
+�����ڵ �
�>w���F��
7.��
��
q����(�=�}ZL=�'�
+P˭��Ibeh
Me�8��Ȇ�����ʺ�
��x0u� �.�b9
+
+�q���#f۹���]
U'�@ 
b*��5��E��Z뾯�z��o�FN�k�����'�M�M$.!��s�
��Mƿ�O�u&��)�1��}�$
~
�
+;
z(mB�PI0m�~Tr�ɐ?L������3���C�b�����j'��`�4�SQ���C�y0u�I�C�
C�!kO@���6�>��0��LҨP��e�n���WY�ܦ��։���9ZZ}���~�� q=nJc
�YM�3�n�$
�
�ֲKJW������Wd����t��	<c�w*����檄I�.W����۶��VÏ	X� ҂s8�
�l��՚*�z��܆�क़�Z;����*��
哹��i
:�s�3+%(�m�6�AK��Ql>����Y�M��̀��t//׻U1�a�YO�qq��ү
v墏c��|�=��pEys��c
�����Ē��Y�������6�"�3�~��	���v�ҥ���xY���䫕?q��^^?z_�fK\~	��:�%2�WN
+�
}Kة��]tSl�U��pt�a��­Ă��L��r��+
S~��X�E��.^twM1db)�,&=?/ڟ��*���{�YͲ.?�?XF
+4�@[C����8��۷}��� d
�Y�sW�m�v�jK�ɻkr�1��b鑡
+�\�e��F���/W�8G� ��#.9�S<.7�X�L�sY��}�|����@ː�5¾��-���v;4�����|݄Bf��9}E�� 2
����m��M0rV{�@>�eC,�t'M�G��?�p�q��7�C`.
+ǃ�{�Om�wl���L�)%��_Q�t�<�t	���?%�o9�,�q>
���R���vYMX�]����{'+��<��v����]n{�����ٮ�Гw�?�l�&��B:����?
@��`C/�
+endstream
+endobj
+1269 0 obj <<
+/Type /Page
+/Contents 1270 0 R
+/Resources 1268 0 R
+/MediaBox [0 0 612 792]
+/Parent 1248 0 R
+/Annots [ 1264 0 R 1265 0 R ]
+>> endobj
+1264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 152.365 173.628 163.213]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.3) >>
+>> endobj
+1265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.802 98.076 502.022 108.924]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1271 0 obj <<
+/D [1269 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1272 0 obj <<
+/D [1269 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1268 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F16 461 0 R /F14 697 0 R /F10 779 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1275 0 obj <<
+/Length 4490      
+/Filter /FlateDecode
+>>
+stream
+xڽ[[s�ȱ~ׯ�#�e"s���JU�^;��䬽~��&!	^P �^�O����!)�Xy�����ӗ�{lq�`��^����Oo�Y��ao�$j�
+��7�_�*1�+i���&�W���~[�
R˛}�n��l�W�	�.Mz��o�^����)؂w$ub�Y�wW���-6���%���7��n��K\m����MX�
����y4�'<5=��%�B/�f��s���a��EySջ
���1�6E��[����]�|���oE{GW��r��ю*�����Ǝ��+na1���n@
)[�w9^ �0n�2�j�n���k�Z
�ij���_�u�����v�T7���F�ƻ�����h0��"�b]�y��%������O?�܇K�*a ��VUG(��4
�����qr T�EP�m,��3��r
{�̶�|���rC�EI�?����3R��6h�O�Z�o�
�I���B�y>��*�u=ӿ
!;e^%J��'p3�
��_ �F�
�`/j�~��N>��}]���b��ӌ�;˺�8�����=��e
�0
+�̰?n�?�Ǜ�pR����M�/�U�YgM`��n=�ߚ�;b�F�^=e�)L�\o�
PB��S$�m�0�Hx�0Y�u��)��0d�I`�?7|��g�K���0�nv�
8�%-�Gڗ�k�X�f�7<�Bw��>��
�F
t�-]���,�
ǶUy;{��
�y����'�o�o�
�]p)�V�l����m ��pw�Nm`K�w����L���x�C�!�=)��v|�
��O�p�
�aa�/���E�ظy ��8�1��cs��ς�a��_�bCW�y's�?����)�x�,MRPt$��9���:�QRRN�;"Q��L.�I��%Q���)�Ii u �vw�O�Xʓ�]�����Ӝ�Z�,�u	N��՝�D��?s(�mt���j�]��s_S���� ����0�K�
7{��]Áu��߷9>6�"#^
0k�c(P��F�2��)o��G�?GH�Vr�S�
��,�Er�.�Lw��F��
�%Jψ�ϰ�����+��!4���iyJ�,Z܍d*�U��(���e}��`3y�Qa���
�
Bq���D�vI**����F���<9�VD
�X�XH$(,Dy� z���0��5�����D]8:E��:����]��Y�~+6�]X9b�	�^7���ko�������?>�z�5`�}~���6_z�
V	�9PH��̊
���
yx�BTHQ�b�����~!�l� t����#��|
��

�2��ۇ	=��)�m�)�.�� �<�Q��'~>a��H 39 �c�#��t k��LG4���
"���^�<��n؂��UAl/���Ȝ~��z�����4&}��0O��� A�
�%[�a�U��

�K��QQ� .��o�(�4Ϧw�3�r
p0��O�@
+��S�CIn\"`V��zH��I�RJX���	�[��u��UE�%���vx�C,����#��R,d�����5�>�쀵��z��m������T at 8Q!�d�W�����B�Ϛ�jvr����6a�<�էj��[,������ؾ�p�EI�cfq���b�Ǿ(�
4?P
��Hw��.�U��eXA]g�)<��
����hxۆw�ٶ��OM��,A��F
+���y�Z�4ᐆ")����X�o���k\�
-k�u�u��}��ލ���/��"B������+�m����绐�ԙ�4ī�qq��o�
c5��H��%���g�|��@�O�Gh������<B��"���ed����OX�P���R�esW�(Z� ��`�ѿ�
5���#����cmՃ%r�X�
i]��ix��b�Gu��p3���t�R�fR�h�
+x��r��`I
mlh�W�K�
��RU�	����
�+��5��7yD�AK���n�v֢޴tC1&�j,ܣ��Fn�ѹ�f:�����ъ�b�`{\�䔾ͽ��|-�jjF۬i��b	�_{�X���e��-�J,�h>�X0�@L��b��)I�pP�
p��S85����Wo~~�*21�
y��|*����է�"r��N@����
��e~��,�L�$����[��Mj���}Ii;��{�G���L�!�;7U����
{���$<K�zE�ۺ?RS���9��_�4k7C����\bm�y���`@*2�>E�z�$)`z	�(�g�<2AZ��X����?���H� N�.1���`d2{5H�{��]��E9_Z<����P`����씧�P@��s
J
����9�tb � �
Rp��Ox(x�"���u&������l��h�$)�F������tg�G���YI�ߤq��.3f�̘�1��g;�G���g�*
�!�4!Rꈳ� L�{����J�;��#v��{E�����q�I��;9ECtүD�J�e��}a7�®AF&����C(M�p���V^��2��s�������%V�p�{
+�
~���Ն�G,������L�W)���#�۲*��*���@�lv�U�^��$Ԩ�(�ATZzA`���G
�}�i-Sf���,�l�D�� ��<==��J` �zQ��3��<���= I�P_�Rҳ�q>y_� �M��<rrXm�Ý_H����}$� 

��5
T��.[�U,�9Pu��������a�o�0��>�c��p��2�	�~��������	=K
�W�u	��w�%v6A�����$s7�Pړi���xn
�f/��@�.��y�xH/1)��}Ԗ�CU�k�A�E�q^�"f���y��
+0��3�*
+�����z�e��N
v
����NJ�Q��d��.���>�nBk]`cʚh��M^�����L�W��g�uy\��M^o����t���Λ�K�2�t�
+Ǣ�Y� -M�V�!����\�5��J��4 at D�����B at f�=)�m!j
F̷�s����;!���9�J�"ʐ��`�Gb�Q �z) �����1x�;
����>K��fv�����v��i�f�:� �L� V�p��u�'~���7u��+� H0�ہ�_c<�K̓�Qo�л�R�X��9�_��f�!�_��� <
�Qzfڞ�Ri��S�����̺�MGP�,�Hx�cCcECceՆ�4���t�h�@w���Ma������G��m^��\��.mS��&5g��(Ȕ�
&�|,M�o��)� {�����o���f*m���u�l2F;��piF�D�=�E��s��.��L���8���
�d84j����4�7!���_��o1���Vͷ� `Ŭ 04{�:�DM⬋
&�>��S$��Û��;̓
�C�� )�\��;ڳ�X���e<�F��=Ÿ��z�X���Cc��\3���tM�(
Z��Mf
 B��cDkA��'���� [...]
�&�]j`���&(X�o8 c��R� ]�r0
�%����c�Gϰw�_z{��}�C]��c�<�P�j�R��m񶏩�U��n�8C��.f=��3��rڗ[p�e__��תx�a��
K�\���rl��ye*�?
���+� ��
<�%�7]����ѧ�\+$������� ���4�̶۪t7$~�}��
�"��
�9�<��
ll����������y��B�@՟خ+�z��)nì�]�O���
*������v��
7tk�83����ʶ��koI;��Q�(�94|�ˍ�J �3 x�y�9
d�jv�=��t�+�#3�V�a���3{Z�� }�}0v�;
� K��Lv#�?Z� s�u�9�
�%����D�m������n:i��z� vb�y��
+����N��qy
˪1N���2�\���,	���tq�ܥ��_E�c(U�7Q��T�ۅb)���_�P6��� r
:h��4~c���	6�op��7�)|���M޶�,qP�ţ�� 㪣t� 6�b�~��Sl�t�u�M�^����x9�%8p�Qa�,
!9 ���FW'��=ʛa�;p+��,�=������)�"x�@ع���sZn'3��(��{��
�[�����G� Ա�K?���u;�[��
=/+
+
>e��XO&���DA��EA��7�Ip��Δ3�6��*�j#��G�_����zS���
���
��dX��g��"L��T����T�K��k��gu��}Q����%�y���60�#���ymtT9]Ah}m��D��������S�훐ݨ�؆n���cе'v
��e&���
��9�V-@#� �%�|�wQ��@�ugG��>��W�N�ܠ/x��>�t�&uP���|��	��lԜ΢'��W�\i�l�L�����<>Qt|��چ�H�۬���]]���ԃ�tx���P��?�p��-�'����bӱ�H��@�|�7r��ukz�ĩ`��X9��ڐ���1j�S
+endstream
+endobj
+1274 0 obj <<
+/Type /Page
+/Contents 1275 0 R
+/Resources 1273 0 R
+/MediaBox [0 0 612 792]
+/Parent 1248 0 R
+/Annots [ 1266 0 R 1267 0 R ]
+>> endobj
+1266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.423 657.344 161.397 669.299]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.729 657.344 191.451 669.299]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1276 0 obj <<
+/D [1274 0 R /XYZ 86.4 726.045 null]
+>> endobj
+210 0 obj <<
+/D [1274 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1277 0 obj <<
+/D [1274 0 R /XYZ 86.4 644.44 null]
+>> endobj
+1273 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R /F48 619 0 R /F14 697 0 R /F11 694 0 R /F16 461 0 R /F10 779 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1286 0 obj <<
+/Length 4302      
+/Filter /FlateDecode
+>>
+stream
+xڽ�r���]_��P�%��q�*�=\ެ�d%�!v
�$$�L4 ����

)�����
==}wO:�����Ͼ�:��[�gY�i�gW73�93<K�`���엹��
������
6o����BX1����^��ϛ��9E�/w�u��۲�6���zw�����3�3֭�+�l�9���l���Ddv����̤�o���ٿ��1�Ҏ�f�$0�Lg,aF�߽�x}�4�0����0���"a���GV5<�L�����}dQk(}�Ea
+��p�7��������+��ֈ>ק�˷p6F��
+�z�o
+�pW��`%�iD7<�M�f�R�96&O`����&_�Ur�P��_6��rK[ĝ��U�����2o�H��w��M��
39r�-�.�^X�)N�^Co!��sn��s6���G�3/p�����9���
}������Z�7[�ڴy�?��M]m�S�8RXZ'"��U�x��Bu�x�n~��C|	� ������ f�0s���Z—kY.��A��/��&�>�6��~�H�"�@�>�H�J4��?�`�SD�&g
d/"��TR�]�"1L=�2ՉU2�K�rf�M�M�vg
 ^���̳ R	-�dQ����EAj��q�
ǔ
(�
bb�%�Rz&V�wU9�_�7�Y�-Và 4��L�f�&Q��/n�o���g!42��g7��
��HA#��� X"d�nP�ϊƢ���c>%�{
+��w@*�����!~t���f�]�f��`��VZ���Lu�]���}Ֆ
M�'��H�})7��_�cK]ʖ�HEI��)�)��(��ýLI'�������i�`�m۪�'��,!	�#���D�e]6-��%JϦ�.�����G/�u

n�b���?��H
A�u��x����(o��T�
2��v�
+J���9|V�r��m^���Z�+&9L��O�?�N�@����&��|��N9}�p�JO�u�����N٠
��YZ��243��$
��\����d�717��`�uy¬
�ot@X��v�CX� � ���
�����@�)�8��:���yD*)؂

��
����$ώX`��e�W������p!֗Ȧ���"��Y��G��
���c)H��)��m��P�-��p&
m{[�^@�)��PW��BQDry�
W��z;
?HRt�;�['"IMz}���!i�
HC�[���)��3�6����uk~�����Oo�
���н��*`�r;UEr2"N�$��:�]A%��ϰ#)�	�
����I�"F�N4���+8�Y�j���� :�2��_���so��WuCO p-7%�8%d��qc�%d}�#�"�=	�F�T�YW�I�L�<h�0��2n���bG�w��2���6M��Ќ�PK
Y?|]���
�V�C��TJ�`�
+%a�
����N�s$ia�������'������|�/QA�F��c�P��yk?��������Nj��
+TgB["&��
�l6��DʬM��`��T},;w��"��daï�JWe],[��
KzU���[���΃�f����h;���z�����
�

�-��m2��w� �� ���Eގ� �]Mm
F8D+��V�/�"�1(�r�H�|
Q{Y2^UGs"�������*fX޾����%x��*��K���k���a'
+�
D
�D�
�������"`��ʃ�͹3
Zj���m�ʕ����
z�O3> x�V�
a~�\::�8�
+I�-�ѭ��#�=i at k��
����O0^ex� ��95�	����@�0�D7.;�鉵�k;~�)�
k�� �i��Y)-Hi�D_�Q���$6A���頽W�
i��o��@�� I�؛��/�y���&��I
�RtG����
b�\��8�j�<`Hn�"8�ͽאL����K
+¹��Q�\��7qE�k��*��~�����%Xd��
��S�iH�,�+�x&X}��v�c
�T╇���X�aN	�jO!�z"�L�(x��@��	xw
�S���o'�
hG���h�
l�����>�SU�u��#*Q���Y���i�f�o�f��zK{+�t&
�^=�K�;T*p�D�{d�&��J�9���b�������7��.J�����a��jثS�]�*�2��(;
�AjB�����<N�8S�E�{y���@��t��<_����@7�ܮ:crG��v5�@���e�q]$�Tɂ [��c�+���ڈdG#n��A�O���U��1��8��k�n�IhhI>��b}��ȸ*V���D$�7�il#������&������)36	��:&�
�4�9��b 1Q
+gus�����b���
ۣ�&��!uc=��o���a�a��>
u�e`�	�:�u q��qW�[���ύ�P�
�Q]~�?Nz=ڢg��quy,'
�
�yH?GB�>�.��C3ϑPǩ��ah��Ag)�o�s�l�����LEEO�uA?o
����~��zŃ���W���?�Ԃz�ρ$	�IIG�A���t	�;ꑰ�}�7
�/��`���Š/��v�:�&�

��&���
�èBu�yēh���8�(
˽.�&; 
'�y*��)6U}Om�z�S�9��?���O����
�a�� �5
#���@N��8�fO�ۥIX��T��v{,49RW���%n厶�$�����*��i$o%����H�G�?��;�\l�a\�_�q�o��a~ۉlo:~>w}���e1��2��Yh
~(�}��jʉ%��t��Hݍ_�UXx�5w�~��
Z����k�T�֔
%Ƒ5�j��W�u��֘�5�P��9e[~���0z���M��Au�<
+�'�aK�ΰeK
�dഀ�g%gq q0�����ؘ�x3:� ���K ��AtEH�e��O���y���҇�z\��1J�V%g�:��H�y�������<1CZ���t&M=��`�t�ߴ�0)��E�K�"��@4��Y�M/Y�(Z�qA���h��x��Y�Q��TY<��]�b`������	�}���=����Wo�/^Ų�@x)��3����ͫ�?DЦm�y�H�
2Nu
+n󁏱el�s�c�li�M^R|
��[��	Kw�
F'F���{�UY�"l�%R]�&"|��m�9�Џ���._�f�e$���1A��HB�g��	�&Z
�h3R21;�
@� _$�����K�T<�����o���YW����
�b��pݷ/x�F9ȉ>��(,���:�̶S�n!4�fL�͓2O�D�+�e�
<����d��
�O�X��TX�qZ���o8&���u��&Q����l���u+�x�,
k
�p��#��U�pfQj_V22�.*
iN [...]
�~�ς߅��];(8�A�X��J|��V�GJ
K���紪���{�/w/���
 
+C�
��DX���Q!�<Al��
����~k�68C��׌�*1�
�2�����%
~�IF	�皠Y~M�+�%ؓ$���҃����|uOs_ʦm蝪B����վ
R�{��Vyv
��B�Np
���]�̓K1|�
�!�f������L��\�V�7�_S���TlDG��u�`�:��R�c{���a���
B�2l$��tw��O�W�o��E������q\m��[,�n�x2w
oTi�fR��U<\s�Z1���
�갡�|�o�Ƕ�?h�]�x��|G��� crMt]@��
���U����_O�P�\-VI,�~���&��5}�=$y�U�,S�
I��)��
l�DžO]���[
�
!�|S�� ���7�� @mt����s\:����g4,��8[�/	�1���dt,�c�!f���e������Pe�/.�A�rx�П��Ƚ=���8(���	�>�YV|��T}��,�]�Ĵ�|����)�`m*{X�?�U�D������u!����HC놕��V�c���s��4�PY�����rz�K\R.���صK��N
���K�WOc%K�^���\q�[����J�M���J�$]�
&=�����l�
�Tw
���` ;ـ/A
肁�L��`@9����R��.IW
+
])��t��-��ic2�]0@��b�] �[q����_�����iqx��I�gRƲ*�;��
�����a�R��Y�0O���KJgŽ�/�^`�!Nj��#9
�0��t���:�1�G:B�	��n��fD ���"iV
+endstream
+endobj
+1285 0 obj <<
+/Type /Page
+/Contents 1286 0 R
+/Resources 1284 0 R
+/MediaBox [0 0 612 792]
+/Parent 1248 0 R
+/Annots [ 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R ]
+>> endobj
+1278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.682 648.03 241.153 658.878]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.4) >>
+>> endobj
+1279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.208 595.862 477.428 606.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.965 491.966 164.939 503.921]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.041 491.966 196.764 503.921]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [503.308 102.372 518.031 113.221]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.2) >>
+>> endobj
+1287 0 obj <<
+/D [1285 0 R /XYZ 86.4 726.045 null]
+>> endobj
+214 0 obj <<
+/D [1285 0 R /XYZ 86.4 538.326 null]
+>> endobj
+1288 0 obj <<
+/D [1285 0 R /XYZ 86.4 478.242 null]
+>> endobj
+1284 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F14 697 0 R /F38 517 0 R /F11 694 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1294 0 obj <<
+/Length 3354      
+/Filter /FlateDecode
+>>
+stream
+x��˒��>_�[����#.Wű��7���
�b����YV$QKR�
}��)H;�;����ht7�	:����WW�����3G��zv��YM��pG�`���짹$z�V���jY�m���K�7���)�}�Xrǹ�k������?���_1؂�X
R+�l����:[���%���?o7������տ��E;��IC �L;F����]��J�����s���\�_�͋0s8Q(�ډ�SI���^U�

�����W�&��QJ\�ݯ���m���_MN#��]"	���0���b�
�_����}фVU
���g�D�_e�Ј؆�l���E=��Z2�P
F��T���7ק�d�d�L�_� L؎����p"��8{~��o���իS&IE�-��9
[�$
+�1DNV8ѱ�Zٶ>=��0Ѫg8���0.G'j�yMޝ
Hh�{�$a��,P��+G�Х�:�]Ib�*�毳UyS ߅Q@�MY�2����3U������B�y�j�*

�l�>���N� �h*¶�lp>���<6b�>��gu�- yw�h�
+��[�j�S��>ϪЮ��
�Ϋ(�l���5��
����GPUNv�^&� oY/���m
+\;�{(����U
++�)��l��ߧP���V�����e��7	�UHnz����"yl���*�n[��F��8A(��p�UĻ�g���'��tn'Z�w�O�
�m)ٓԞ��<�ǗhT\.���'�vJ�}�A1F�+�q^>�_���o�W
�zL�
��vH�b[�%�.vy�c�z�?e��H��-7�
�r�Ňb�vU���A�c5x7��������᧻Ȉ|����/2t�En/��
a���K�ᆞ
��]�����p�a����m߅�,|z㟗B��˦]s8,�
��RZDMC�|�
��xa��.�U�_�DL[bA`F$z,�"�#VM0��
���Zt:�=-�߼�테$3�d�Ϣ�"D��=`�����#ʹ�ҔX�.���d�M��k �&��E��Xjg����HL	�Џ!�Y�- 8
��e��g�PL�a��hoUA�@H9��&4P��H
+�IXɈ�H)��d��〳���c�������M�!)@7�9АT���h����$\�m��l��
S��
�Ϩ��Ş�1'
+z�O1��@8�N�LhhQ�9���>�	���ݕ�:L{�m�)�� ��)� Z>M��
Y`-��2�x�5�:q	.�y��%�
�h�!���oܧ��<
+9�
Z	�;�2. ��X�\������(�[
�O0.+�置����4~��ajo%F�s�7�ୈ�;�
��
xrc�+I~�
(�砰�[������v�z�|��t�eIK�Ի
+h!��
�7̗�e�c2��.�Pp��g,�������v�
��"�� #�
+��(�L
�A0p�B
������A��;�r��0v�]�81
m�§;�%ô
h.��TG�����<6 ¡s|Dي���i~7:�cU�����R�l{�ï�
��d+�{yݯ �o �YUd7��������G������$>�<1����HSJYa���6�,���R��bj>�&�� �?�P�2�8s���(��l���
̋�ϑ�BP�
���q��#�Y�#��}(� M��W��� �EC.Hd
���.��:�:���e�A�H�Zpp�sI�
��JiBIL'·��uD8d!E�V�R�\X�
�\>��6o07�erOp��գ$�Y)cb �*j���q7�{n���lඍ܆�``�|����>�e��ɫ,d�`|S�Y��j��~C��ipp�0��X�\C	�
+�N�vO�9$
Ai;�
O�8�S#��}.ۻ�
Xh�3�Kp��;�mx�������C�ʧ�
�����/�}�
��T�N�PEiH�sͺY��q�=�q�C;��$68��yk�o}\�E��:)�L�fz��
@�]�Q�+���	lN�x�	���W����#Qxs�b
+ |���*�+�*4��X���`z`�C�݆�*�C�z�}�fq�q_嫘/�i�(�0�W�c�Ÿ��B�q���
+�����x:IuvI旭�;qWY�
����ͽ�:Yvf�
D�SGl��(	2��4oJ
H&B$4�
>�&m�Q����*�0 ��{l^4f��
d뤷6u�t�o�c����Ԛ��
�!d�B�
G�>��Z���-�!�
���~̂U,����0�+#Dd��a��>�{�=ۢn|�L�-��v�j{\��C*%;�&_
+���(?�u��d�
(4��ɋ�w
�:�̛ "%������ɼ
rR�S����5�V �_�dk�������6a��0MN��KxQ���;p�,Ӹ��t,*��K��#�7�I�'}�vm8o
�3`α��s��Y�F��l���������Eו8��ĈU�)��$*���T�`l�a�d����R��}
�
p���T7B�谂�0�݆�##�W�}#�$%f�:%�._
�= �
@�'%�@)+��n�����#
+��'�
g�
+B3��g�\��Kؘؖ���%lӗ�],a�^ 

%����uW+���
��.���'_�Z�A՚b
+p�
��
��A��/m�,m��0Z�� aD��
Y�`�%V��H�iҫ���F��휘	f
�pN�P��LjQ��م���@D7m��L��p��s��71�:�W�
� LT�p#�T
ց��=��*�Q�
�<
��^�'/��
+�,|���	�2T�d/~�2Ү
EWt(@�~}i�K>
��I���<��<JִXgu�)�?�/��w~���_�֑�ƛ�C$I�c�X
+������d�F=F,�IX�o���
�J
9"��o�|��u!N����ԝ(2��}^��#��u�t�����.�j]$R�HD]$���Z-�\C�~k�7���f{����

L�E��waJL
�h9t
�Pգ�Օ��1Z�u��M|v1����Ɨ(�Q�%lD4+>���IG��q��u��
�̈IfF���N#�\�Yz
z7O�VN&�P���L�
y:��h��=�Ԁi0�^���ׅ�0i�?s��Ԁ���D�I�`
a�ۣQ���s�*\~g�	=����`@����#J� Gx'�7TO�E��Č���
+�RD>
ԑ����z�@�	81[��QpRJ (�k�S�!n�%>qb�	
q�%4~k�fP��$�2��l�k
��p���Hit"�m���g
��>�
XJ�4����!$jՃ
-��
ϰw|�1���O���
��)�8<˓�η?}�0�Fc�x����f��|�d'��K*hR!u��D�����E���}�/p��
+endstream
+endobj
+1293 0 obj <<
+/Type /Page
+/Contents 1294 0 R
+/Resources 1292 0 R
+/MediaBox [0 0 612 792]
+/Parent 1298 0 R
+/Annots [ 1283 0 R 1289 0 R 1290 0 R 1291 0 R ]
+>> endobj
+1283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [321.137 688.242 351.358 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.059 613.079 113.033 625.035]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.272 613.079 143.995 625.035]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.802 287.677 502.022 298.525]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1295 0 obj <<
+/D [1293 0 R /XYZ 86.4 726.045 null]
+>> endobj
+218 0 obj <<
+/D [1293 0 R /XYZ 86.4 658.972 null]
+>> endobj
+1296 0 obj <<
+/D [1293 0 R /XYZ 86.4 576.17 null]
+>> endobj
+222 0 obj <<
+/D [1293 0 R /XYZ 86.4 258.407 null]
+>> endobj
+1297 0 obj <<
+/D [1293 0 R /XYZ 86.4 163.487 null]
+>> endobj
+1292 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F14 697 0 R /F38 517 0 R /F16 461 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1302 0 obj <<
+/Length 3399      
+/Filter /FlateDecode
+>>
+stream
+x��Z[�۶~�_��js,��`�>���c�6u�M���+Q�L$Q!)o6��3�7A�*�iOz�D ��\�0��͒�WW��z�J���e�Hg7�M����T���j���$�
�����\/��)ww�
i���o�����˗�jl����b�ߔ˼-�]s��͛��7W?]q�7��fV�������
+F��&3;{p�3%3&�������U��N��+;��+�`�Y�q�MJGX?:�W�_
��	��e�K9o�
l���P���Z�yK#����CA��z���[,[�����#�4�,��iʈ��0��D'�E$�F�9�� �����⒉��l†����S9[p�%��7s�.��
���nE�M�*��l��qS��6�M[l�SOČh��K���mᩮ-�ut�x�������.�n��LV��7yL��fʚ^�\�C�)”|�����5�3lS�&�}]<�����m]�L����i����v
'���-���w��sl
`O�~��0L���$1�q�{:���$�:�:/^�3S{Y��2�l�#'�	��AW[m�:�-
i+�%�Q�q
+��zh!xo��
ʊ]ۢ��E���7~�b��T$B�
F=I�
p�x�9�&M�7�怞�]/���0[�f�-��yS<��2�'�
��C�����dL�N��0���+c�ۧ+P
Q �Ra~E�,K�N-ނ�C8�%B�a&�<�i�� �c�N��}uج
o�
~7bq'ja0��k���hj�wD�H/�siǸN
�t
+�2՝eM
��
:'W^�9�q3Gox̗����64��R�i�N؂������19��
��z�ړ�`��΃OT�
x<
_f���d(%X
+䥠&:5�p�L��X��떲L
��J�����J����ȒIX
�c�����w���#>�QU�r�g�v
�TY��,
��hc���H�uz�t���ǚ�'��k�HQF��� \]
f�)b
�ljC�:e
)�Z�.�3�����[u���D����d�4eRt6���"�,E��YƤ���P2.�X
G[	X€��R\)��[��B���gT �{|��� ��M�0B0���/��V�WE����Y �k#>���j�ED��p�����ȝ�γ��4Z*�D���l��Qp}��F���E�V%�
���Q�%�;lk�^�tgwGc�q��^�k�ƾ.����!��H����n��~7�; �H
0����C��V��{�q�$8�D�Yh�!���X4gҊaf�rM4xbd���H��H��ԧhO����J�B��c� n����S�
�\��z|��r
3\��x�R~1B��%b
�L�;�\�{r!�
�EK�q�p�g�H�
F�|�[���q��-�<�Qg�J,5�LR��Z�8�&�Q�tv��k8QDŽ}�t�� -ˀ�#ꔵ��ch��F�)�/�o�_F鲒�V?-��j�kb��_�%
+���)�sa�F@����-�U�H}��+7����qp��?\C�9b~�)��uXѥ
>���� ��E�DC;��sb?Je��8uK�Ď�ⱧP �.=ܗK<�=
oI�TdhAG�
�ŧ_2����9�\�?���>_c��r�
�uA��'�]�
�ݴ�4t
�$�ѥ�qe(Pj�wp���%���-�t�G>Sw�6�4u��Gɯb	�P���#�@�����0�]!
"SS�p҈�%�c�u����\��r�� Kn �i迹w����W�M��{!�@B}.A�ynaXt��{	2��
d�0�$j�!�
y��4���`�]��M#3�5�3;�1|�ܘZ$h@^��s�͆Z}�9A�e�¸���p�Fv�� �Ǟu����]�~
"�]3Nq�hD?z�o�sW�+�����}�i�zF	�LK
+��f at b*�z���
"�ہ�R��hG�|Yݖ��=&��bh�x�c��̯177I��3���P�I�x]�t(�	��B��]0*��Y�ņ�*Nq�˵zۤ]�����*���Ep�Bv�b�.&���"��
��7�χgo�BG��/��Ϝ
ȂEs��}��#�@ }��?fU7�w��

H֯�]"�����rӠ�!�
��v��R� ��	 �
�r��
�3e]m������ĭ��0ܜ���I�2���4ZR��H��V
`����dL���pH��sܘ�Uk ���I���W�^†ѵ���*!��?ɗ$�2 �S��;�p��/VŚ��r�R��gǬA?�Cu�>���3zF �DE���J �# �̌+��
�t���4
+����
���Z�$c�����
Y
>�;U�)�]ϼ�=�GC���<�o��Y�?�E�.A�:�r�8�X@�0�2I��}
J�
+L���D��QfD<�`rS��j�]
+�2}T9GB�d�-q�X@��skX��'�D%�%�<%�3��-�y:��a��O�'��=Y�:K��7�Ұ���S&�~{�<��"�@�4#��wC��n��Уr1<�1ܯq
�#�8�<������Ҷ��hz [��G7}�w���[��Lϥ�	"�|4Ձ�pg�NJ
+ۗ�q�K�tCY���nG��dBm7��I��� �nE����L�[
P����K��~eP�VG�dr�P��2�`Ux�6����+
+��p���K��.����z�
� ���1g�C�H�"w"<U��?�~��?�/�
W�n-tf���B!�|�@V������N�� ����������\��y����0���y��C�{�ar�8��+�ME]�}*�i����@�•���Z�
j�)c���~R�L ��=��Ȱ�NR�_�0�`��`�N��p�D�g�?�?(�J_�4$͢%S��
��7�͐o3��)l�X���e�'�_�����Ǽ�X�}�
��ޔ�S˓�	ԗ�@ɬ2Sx�ukC�n�|�%0$�U�Z�
\�SY(�)�����H���J(�c�ĸB�c߼�&rj�
xoX������{����\fr��Z ��w�T�j��79
�C�g�#�
������w�Hs�0��c3���a�A)D�^�N��
�����J���{��a܀�7ƺ����P���u�>����_���a�ƒ%�!�����I+w�{���b;	u��?���Rl9�-��A�pq6�Y�n�}_�	�

�����`��
�P�t<��B. '�
>e���c�

i���A��$xt >�aq(Ԍ�/��,�k��[+f��ɤ
�qA
+�ߧ�q�jO�f�Ӛ��|�*ɲDO�Sp3�
+J���,��f:N)O d�眐�ļO�����Lb�Օ��eW��'���Crj�SE7c�R�k���v���c[�%?q1f���ut��>�������J��qy��|
+�?���r
V�R�����dz(\��X����O`޿����
+endstream
+endobj
+1301 0 obj <<
+/Type /Page
+/Contents 1302 0 R
+/Resources 1300 0 R
+/MediaBox [0 0 612 792]
+/Parent 1298 0 R
+/Annots [ 1299 0 R ]
+>> endobj
+1299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [490.102 595.657 520.322 607.612]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1303 0 obj <<
+/D [1301 0 R /XYZ 86.4 726.045 null]
+>> endobj
+226 0 obj <<
+/D [1301 0 R /XYZ 86.4 452.324 null]
+>> endobj
+1304 0 obj <<
+/D [1301 0 R /XYZ 86.4 393.695 null]
+>> endobj
+1300 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F14 697 0 R /F7 778 0 R /F1 781 0 R /F10 779 0 R /F38 517 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1310 0 obj <<
+/Length 3695      
+/Filter /FlateDecode
+>>
+stream
+xڭZI����ϯ�-d���
��ߋc[~R9�ƾ�>`H�1	PXf4�����
���'f������Z�pu�
+W�]���ꋗ&^eA�xus�J�����Q���꧵
�͵I��?M���]ٕuU44f���z��E��֙
+�:Q�_n^_}{s��J�p���Q��x�=^��K��a��*
L��
y�qeMh��wW��
+
��\�N�U6	��*�T��X(�'!��y��V6�a6,ԟ���~�rJEQ�q^�7d��	I�uYm��MK�ẫe�X
��I����:]o����]����&��k�߲�i���5��<��т<��8��z��\^����U
� ��߻(�wsyw�ˆ�J��c����6]ll�&�'�q_n������+zb�L�.C��H�:v��1�ey�uKb~ZnGA��Q_���T
ZR�wEן^V��eI`!��
�G�t��|qk�\~ϴ�5_7��WmO��f�Ƣ,�t
+�`���ނ���=��}1��(
�7{���d�)�
���w%)Q�5�-߻%��Z��B�0pt�ٖ�$ͻ��Ҕ��V�˥�s����M'��eu����k|�  gXC�/��N���n�������:1	x/�4��
�V�A|�v24ȁ:�;�n�9o��ə+o�7t ��l���凰�h}�f�9oECƊ����iX1�
�B�OT��ۼu��Vh5S�'�=���,�øݦ,v�Y*Y�ê�
�q���������t�pë��E������bJX�	aC��з��E}x��U���	�V2���H��
P��(L��bFg���
�ʠ���`
4��
���T�������3������~W��؎��gr�6=�[��N

�Cy�?k��m}[��
�г��L�p9	�t�&Q�� ���`��͋C�#�+��FS���s[�9]�jd��i@	âRSЎ"�O��K��Tр�_.�݁�hϘ�V���$0���9
Åݨe�5*����
��@��0p� l�\���]f�$��0'�V�eqb�4	��aK��!&5GĤ
��{�ؑ�蠆d�24?�8X��mF��M'���]�h��l&�f#0q���_�H��>��^ZΜA���D�
+O��x%Qؽx"�$�į�7���B��
�o��d�|$��IG:N�)�&��朏!�P�6�
�� �;�F�#��(�x{twy�K��睴�JS��S/���m>�*��w}#��z�G���
�zC��l��u���:7
���r<�'�Nb^<Qsq�&�j�q>�F����D�*$��|'���2�$bq!.��垕����0pquk���/����)bȢ5@^��92�����uux�V,a��uE%M?Tb��&RynK��Koۃ'��j�.�
�Q���Oj�)
��Z�윃Z��W>�߻l�l�/�Rx�����
�`r�rL+�]	<5E#̙H���uW:
�5s�FΖL��xNl-B̜֠�c�/NY��JDG�s<B�������	ea��)VOL�J�
��A�0t(�8Y
+
�o~�{�ث#F�}ӌ�a���
Sm�[���α�!,B���"KYr�m�l{�A��L���]N�UI�#��֌�<-��9����o��ɢ\�.M�QW3�^p HڲhP���e��q�$H��kD-��"F!�H�i�P;�E"|��=<vj�D�Ă©ڜ��9*� 4YY,֟��4B��Na�j$�.�[�2&[�JWI�����3�=
��Ѳ�]�]���� D��d���!���6�K
	e�o�P�/����$������y����?b�(Hu��)s�
�3ە�6�M�\qS�ծ&�����3n9Cs�E��O��%d�V������ͥf�
�a���ި��n�E�
m��Sٷ�����_���5
����tW�c[y��
ٳ'��[����BQ�U�?�'k(p���=��6�/D�q+3
��x��k�kX�
�
|�5F�ttYd�q�Q�"�š@e�+
�8!y�ے}7��U�\��N~��<
\�~�}��`ɱ��R�۹|U
+s&�q��������<���q
��W�n���T���}S����YT{
+�v3�㫜{�=��4�H�ؒ�.�뗛�pI�*
+�jd��V��XE�+څ���CρRv�4��Tz��
k*��B�|o�
�.a�?|�^Һ$wK1��Ru�<D|�+�!܈�祑��ͤ*��-�[9+��[�4c�B�j] l�Hn�ڤ��>���B��F#�t�^ �v�ͽS�HiaCa�ς`�����cb��k@�}]����
���s+���.�k� �Ԃ�3�b�TC˙�N����#�ܿ
���L2���}�}4X��ಜL_��cS5��\~n%B
QmS~xn
_�Ǥ�h�t9��
s3W��|5��?BO�^,�N
+ƑD�L�2�֕�JWʥ|3
+TQF�	 DQ�~�ɨ
��,����#�neH�Ij�&Q�#i'
_��VCv����(�|���!�� �"�����]
!��8�ޖ���r��
+I*A
�iq�
+W1·NS0$�HA�d݅,�0�=^M��m�f�l�Q��Q	�fG]+d�T6��Gd�N8rgh�B�G�W�s�����W
ie�
+9KbK�%�cܤ��E�N�a.��	�������'��2�J���p�\t
0EV��N����(���xMѳ�4Ƣ�1�]�J�
<n6�g�H��"-����1�^�q{؞��
W�
u�l.B�t�ǃ,��p_{�������%�

+��\WȄGD�n�1��"T’�� �b���: �gJd�-}!B�r�V���۵������<���/�=�1��;��aD*L�_J�i!!L�t̵9.���
�U�o�|��
P�[�mHλb�.*!��}����Y�V����/�T�*
&vu�L_�&�|��dkW{-�[�1>�/u��ݱ�c�iܛ�ys�k��~Q��T��
lQZc��(��a�g����Jkm�M��-�����&
F�3Qʩ�E�ǯ"��>�^����Uv-�&�,h��]�$�A9
#��ű�b~�A�
��C���U@���Q%�9RH��lf�����V_��!Njv�Z��(Z=VIf+,1����N��y���+��5��؃���'i��P�:;aWbp=}���5�]�����A�$s�kj ����� ��-�de�K�q��e��c]\:y��=�
exK���g�pTG3.[�Q�mQ,Ԍ���$ԟU32��"�2[Gu:�)�ԁT��t �r��YLy�
6v���:�
Y[���;�a���NzcM����}!WEm���/t�
+�M�.}�t
�D��c_P}��cbD��*��'��RM'
+�e�‡:`kWl��
8L9w�S�t��>��Q� ٮ�}��v���/ZrGe
�HJ�
I�Je$3\��n�����:����$5��?ԙ���4�wG��S���>jqƛU"���?��DS
�φ�*ѯ
����_@�*%��DM.Z9+�K�	�F��2;{��QG,�HsUc�����

�� �S
+.��k���8� ~��u�.�8�����'�%�+:��p�#z;�+�E�r�{��3�w;"�a_���?�‡
�^>vc"�-���
>lb˟,�q�]�`�4ʿ�B���d�6ᬨ6��9�L��F<��!,r��l�Y��$
+endstream
+endobj
+1309 0 obj <<
+/Type /Page
+/Contents 1310 0 R
+/Resources 1308 0 R
+/MediaBox [0 0 612 792]
+/Parent 1298 0 R
+/Annots [ 1305 0 R 1306 0 R 1307 0 R ]
+>> endobj
+1305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.208 410.137 477.428 420.985]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.534 149.115 420.256 161.07]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+1307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.953 113.803 279.675 124.651]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1311 0 obj <<
+/D [1309 0 R /XYZ 86.4 726.045 null]
+>> endobj
+230 0 obj <<
+/D [1309 0 R /XYZ 86.4 382.763 null]
+>> endobj
+234 0 obj <<
+/D [1309 0 R /XYZ 86.4 291.607 null]
+>> endobj
+1312 0 obj <<
+/D [1309 0 R /XYZ 86.4 111.026 null]
+>> endobj
+1313 0 obj <<
+/D [1309 0 R /XYZ 86.4 89.582 null]
+>> endobj
+1314 0 obj <<
+/D [1309 0 R /XYZ 86.4 70.075 null]
+>> endobj
+1308 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F14 697 0 R /F38 517 0 R /F16 461 0 R /F10 779 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1317 0 obj <<
+/Length 2608      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�6~��У����H�>����n6v�ih���P�BRv�_�3 H�%K���}hM��`0�f�A��vDG��~�>���#K��zt=E�ȑ�h�F׳�ױ�s�"a�_&�l\���ɹ����o�ǿ�~�������}�Ze�4��|YN���p������u���(I=�.ξ�AG3x�aD������[�����S6�:��
zӶ�QK}ˈ��H�_f�߀$n��[�F������99�s�.�,���1l+�L�h�
+-�Lظ��%<����9�d��]%�߮��a�sΈb�/�N��URy���J���J��uU
�
�BuW���s���)��
�WI �ǡ`�,]&q��<CK��ŋ��2���/{���pi�V�ȯ�;U4����G��ӄ�Z�y�W��?�~�Z�.
+�4��g�6���� �$J탶 LD
�
�;�p��J*x#`��dU$��*	��_��=������
U�߸������k����V��̞�,Ԑ���* p�(�'����f�Q����`���HA��Q�,�H�	�N��)
�8�<j{�9���/�*�����{zu�
��[��F�%�7���x9]�̎tehTτ9�|9K1�%!X,|t����������j�-'�t�
��t�UxW�ߠ>�1$~�������
UHg�]���{=�E����Y��ue����*.�-�Y"L3g�
H��k���+Z$e�c
���=:�;��
d�,X�K����N��
�>�!��|�B�f�
�2"J
+'J3���e��u��q�>P��l��@����n��\�o�A�6�”�����0�ڂ3���*���0C�N�6)Xb
+��@��5'���2G�qa�qU?��h�.q
*��u6���<�s~�A�/�g=i>R̖-���Z���|��� �����f�
M��|}{��t�a�Bn�
 Q���<F at T6��cNH�������@=��{���v���n�8�4�]�fOGg��1b�t���*�a��J�A�czԅ3���I�tz7�i�uU�r//f
&����%Eʨ��^�e
?ϟ�iu7��8�D�#�Eݤf�&��'7�HWz
�Y|���
~��< Z��@>���&;�~ �[�?;k���#�A�,)�Ez�3C�^�W�v/�m��]n�>
�����*�l���4{Lv눾\/>ߕo��l�|���7��{�P�Z� Ǟ�"
8�N��1���Jv����
�ʹ���zMpsp�Sm���j 
+�P���ݥ"��
H�� ��D���&R����y�Xu��
�e��$��)\9
+�tW��}
�1��~��7�N�1|�м�C��
��#�.��7vjmCp:�S(��
6�z'G�,�J�Lc}�B���?������=
pk��GX`g��ˋ
��Y�U�iF�W��V�~
+��kK�,�j9���M
FUw����-b_���2Z7
~�د���s!���
�a�1T��,]=���q�ە~�
% #F��"�1zg�*�5�ԡ�M�^�e7���uZ�9�M�7�Q�E��DRV�L�Z�
.���"�Rw����u��DQu�+��F�xDC鄢�

� �#�i��J�*�6��t��<�|�m��X(���͑���k�a8�Mc�	��`�ޢ�p�@�}�75xp�od_l9g,Ƕ�$\�]�kKB��X.˗!`�����Dr�vE�q�M6B�,�S�o�B���ߠ�o�ߌ�6\�`����!��7i�
e�
+,��W�p������)��
l�	���Q� �����3T�E� 
+��l���4��s��E?
��Pu��U8
G'���
+�{
7���
+�c6�i��Lmٶ�����w޾{�$
���������@0� 5i�Ȗ��Y�<��҉�4TW_^�zsuu(z��sm�:�n�>��n�d~��8�\O�IY���~��P:J!�N��QdHeObT�Th�����H%���bQN
Q@�;�^~��q�1B"eB��q�Md����u����2$���6���
�c��@�
n�(���
Um�-�b9�l�MHכ9lĀ]�l�l�����/ڀ���ۋ������<J�,܌���ȸ���3Wh���4KfO�d8=m�=w�w��
+��	
�q"�h%N�*�r�@*����spZ�:�mv�h��8�/�=��aǼq��:@��(oZ�3�/Nյ�
��}��,O�iaI�n_�:e�;?M�Q������k6^�^��ӗ�B�9�r(��,d�d��5��t��Z �P3��3�x���#���|��I���fa��M��
}��i����6��[�%Hx;T�ɤ�&����x�����T��l�����!E"���bT��0�[�˿�"�����J?�/�G?1
�:A��c��X��st��ҟ@mm�u��
�C<]�B�^Ǣu� �P�@\[Ę��i�w�
1ݫ��)��� �Xӈ�s@����t����2�B��l�;5x����݌���DK��"�b=���x�Kl���j)��w;�o������l�4X���k
������e(Լ���q���zfZ5���!9؉�@�_Ш�
+endstream
+endobj
+1316 0 obj <<
+/Type /Page
+/Contents 1317 0 R
+/Resources 1315 0 R
+/MediaBox [0 0 612 792]
+/Parent 1298 0 R
+>> endobj
+1318 0 obj <<
+/D [1316 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1319 0 obj <<
+/D [1316 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1320 0 obj <<
+/D [1316 0 R /XYZ 86.4 684.663 null]
+>> endobj
+1321 0 obj <<
+/D [1316 0 R /XYZ 86.4 663.15 null]
+>> endobj
+1322 0 obj <<
+/D [1316 0 R /XYZ 86.4 581.935 null]
+>> endobj
+1323 0 obj <<
+/D [1316 0 R /XYZ 86.4 510.167 null]
+>> endobj
+1324 0 obj <<
+/D [1316 0 R /XYZ 86.4 459.486 null]
+>> endobj
+1325 0 obj <<
+/D [1316 0 R /XYZ 86.4 440.188 null]
+>> endobj
+1326 0 obj <<
+/D [1316 0 R /XYZ 86.4 387.57 null]
+>> endobj
+1327 0 obj <<
+/D [1316 0 R /XYZ 86.4 366.334 null]
+>> endobj
+1328 0 obj <<
+/D [1316 0 R /XYZ 86.4 313.374 null]
+>> endobj
+1315 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F11 694 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1334 0 obj <<
+/Length 3641      
+/Filter /FlateDecode
+>>
+stream
+x��[I����ϯ�)#�0zA�?,YN�X�⑝����
�4��'�>�4Vb(N�8/�E4z�嫯��`u�
+V�x��⳯�Y�~l�Y��YY��U$c�(�z�]��]��Uޫ*ݔ�6k��H+l�޾���۶yZ_�e,�E����^<}�녀e���
}��j��x�K��—oW��b�zG��+�b_�S�����E�9�'|
�S�)`�a��
a
��
�8R���ڗ��@��v,�؏l�2��EdXX�~z�[�ԟ��oe���l�cy����V���L8>��cD�uo�7���0v�I��ލ�I�_��P�<��\�2��?���9��]�]��R��"�MH�ĉS)_(۟�X9Ji?
��<�t�)o�yZT�f�
+{��N<�u-��L��o�!_��������7k!��^�R���K�Ŧ�8�2)J�N���tOBX߂
�aUڴUQ��6��u��Ե�7܄�h21������msw
�8T
�I�_6�y~菝Wk��C_��!�ˊKi�&�%Q�{��p�OW�S���M��eu��S����?�L�=�`{`�"�b{"�|�έ?��:�;aX2�M$�-��,��m��̶l�O�ugPv<�@a+� 
���T�u�"� �U��.��g�*_q��[V�<�u^��\��
+R�`5�1<(P��ɜ��` �?F~yY8�ʊ��0�͙٣@h$�v��^��X��_�KG�V����?,�P��0���.C�%yK�
k��N(*���gy��M���<�%-��\7��n�/:@4��z��AE�乢�"j@(�`����
C��<ȄA�b
�
1)
D�I�>ھ�8<�t�I�A�C<cHYZA�yT�5�G�ű&3� ����x5B�H���짫W�|w���V��B��U��A�i*m5/|��gϯ��u�^w%q
+�x���
چ_�&���	j���H��H���fs�^Z�7m�;8��洟��L���
c? ��(C8��_�x�b�@C�P�V�B�X�d՗?~�ݩx
�=Pc
��t
=
$�4
4�K�ҋ�YTtV@�$���㊄dN
��˲I�9�(Y���;���Ȍ�����
h
� �t��, �!���K`��������Q��Q�ۅibE}�/xS����d_J�A�f�z£}c�EA��(X���.���8����4(�_e�~��`� ��8�St ;>o�dӴL��&&��+'2. �@O��$
�AC�+MHX/�o"��qzi�"���ɒr�=� ��0�ϱl �WC��DRtY0X��yg�1]K��2gp7P�@
+�l�5�NF1:I���"�t���C|B
�W��L2&Ve�D!:�J�0��q!k�N;�r����ږ��r�'����ij�ڢ �w�VU��
�x��]Z�1�oY��#Q0��l
�C�]Y�1��
������e�^�Ϧ�Uk�� �Dv�!�<��+3rHͯY^?y��}�y�����@]LCv �s���(�<P����SG
4�}�,m�z��������%y����B���w2�L��y�8N�����@�
JZ#y�*ja�چ����Z�
bv�QQ��Iq3�Ա�����:�S~" .��O��
y�"zT���n�>����D��ɐ�:��A�d�F!dL�i�Z3�	��J9���=
�@*�*��Q����c[���*6 
+��N�PV��g��2�o����+��;�A^�x�&��:K
+��
�i�Q��I'�9V�!����e͎�Uݥ�j�E�o��i��_oS��7�ަb���s�m�htFMB����@h*V�d��S),`x>F��uԇ�u���eL-����vpjtvj<r깃�7���U�߯J� �a��
+
8����������̇e칲�� �����Ba�)�|�U���d��٢
ٞ�� ��ɹ
+v��y��3�q��Y� �J�d�~��MU�7Q�.�1�.]e�%�l
l�������׹f�g^
v���n����vB��Y
(�$_ŤG-�u�a��u�OY�.�H ��tK���(�
�����t��q�H�R.�=^b��֭��	��\�}��c_E��;�o��ʆ��.Gd�C�

P�8��8��S��v�I���.T�r%-�:���	�~L��I�
�U�N��L�k
���g_(�̒dHTV�K�8��K�|��K,k��!�`�4�7Ĕ5q0%�c៷�m�ܺ����pm{�?�9��

��3XV[	Ӏ�f�_�4�Q��Li>�5�>&nT�Y|�����P�9�Q�@Q(��[/�){�9\U�)$W5O���{�.Z6	|C�i�<ZxI�`�~ZD~�g�=�X�ӌkk���:X��l���9��L[x/�*-����Jvv��wć�8��T�9%jw��^Ku2شO�]I��H1�_8:򰄆��`��~���N52T��Pe^x�3�� [...]
�>
&R������Bu�(��<��Y�s4gjvI�����K.������Lz��8P@/M:�ak��Sn���&a�c{�֝����u�d����c�'���=�nS�D�V��ph�5�v��޺��LD���9 �ױ��,�0��Ug{h��>�=��am�Rrꮈ�/)y�f:�pĮ
<��-
�²��d﫲;r@�t�v�V���!�����4;@\�1���d�.�Iȶ�x@8�{"���ދs�[Wzu�ǎ
��ŒaZf�I{kf��R$@�Mr��/���eޡ�u��X 
4���0��ap��Op�:V�����cf
+�J
�R}
<����Eޚ���F�A��.�
�
���;�zw�YQ
�x9~:��[^�$t�=9kD"�;�hD�ӱ���	^S󈄛@k���uU&n�M���tj]
p|X���I�,Tw���66�i���?>�H?�N3;-����7���ɤ��

x���{�}�A��u�I�t�
���	(s$��g ���[&0���r��K'�Q��?uy���O8ND�X�Z�>��#����DxA�C� t`�~K��6E��zǑ�x�
ܵ�v�;�aw��ŶhĆ��
{Ӕ�]^���f�|�x�t���⮟l��H��	��x�OP�G����H�n�ެ
wqs�4�=w��R���u9f
:��|�+�g'2xJ��8XGSl�bl8�G4׌
ASOl�B3�@M$̒c�[�A5�^��X;����2��:G����?�W�p���Y�tDѱ�>��?�
�i`�F�k<G�L���{�
{`?7
+�폶��5����Ce��+��&!Z'(��{[�?���ؽu
96}`�B_�{���
�\,Ѻ���e��™
��a��}*�%	��lV�p�`����i�t�߯�L-�o�����w����풷·bT���^.'��
	��>�:��F��
w?DQ5�.�������]V�;��W |�:@���ze�?+�ri>v~��rO6�Q�i��b�?�MҗA��Ӆhvճ�C��r�Lt�4-�q�#_�A��9)�~��!!�}
y�P��~0� ��
��<9
���gA�V�s����嘃C�h��s��+�� �R��1
+endstream
+endobj
+1333 0 obj <<
+/Type /Page
+/Contents 1334 0 R
+/Resources 1332 0 R
+/MediaBox [0 0 612 792]
+/Parent 1298 0 R
+/Annots [ 1329 0 R 1330 0 R ]
+>> endobj
+1329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.585 205.068 477.307 217.024]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [480.882 135.828 492.837 144.241]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HiTa:98) >>
+>> endobj
+1335 0 obj <<
+/D [1333 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1336 0 obj <<
+/D [1333 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1337 0 obj <<
+/D [1333 0 R /XYZ 86.4 472.345 null]
+>> endobj
+238 0 obj <<
+/D [1333 0 R /XYZ 86.4 264.803 null]
+>> endobj
+1332 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F14 697 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1341 0 obj <<
+/Length 4033      
+/Filter /FlateDecode
+>>
+stream
+x��[[��4~�_��M�DXw�,
�e����
̃;vw�8qO��L��J%�u:sa9�dE��R�._�*��v�,������o�Yd,3�,�n�ajaEƌ䋫b��Ҫ˕Щ̖�\����v��+�����R,�������cC-���/���j�wU�k/_\=�������u��h�*�Xo/~}�,
+x�l�0����n�v�d�������H�t�s�M�����۶�ݕoIJk���J߸�/6�|Y"}�|��h�L1�)X����/�%���w{\!]�˶-����K����6��K��
���p�v�]���˫��:o�55��̱ŗ�l�
+&ϻ�̰�Ŋ')�ZC��L���r��
+���(����&�U�g�O����u��Q����2_��6�k̢'�e�2��.������_��D'w��N����nZ���U��a�w�
B�j�,��'~˚���n78�[m
%*� �E�-��9���
`���[����ڗ-}��
E�[���1���ᛜ
���t��I��1Y��c�ӌ�R�L�M�Rۋn�������
cG�q"���
+��N�� 3�gfKr$�d����!ԩMj˲~�7�-f���"PW������ӃW��!���(�3
��Rw ��L���ۺ{k
��K�a�
�.���NT_{;��d��'JفЊ=��9
ǽ'�좲4�sD�2&S�
��
�s�I1
+%�K9����
��/g_2NڎO� 6�f����L,���u��sV�i�� W���g��'�������#�,��0�~�,-�
x�c^(%n{v����{��=�ai"��	&y6�P��(��
3U���O�.[^ۋd��F�2p	��̓�a����KStLe���1!�iС�g�m0���l`�
�
����l�p�̞ϔٔ1t����t�Y\��쳭[-��z:�:��	��cJb�hfoB at V�R����
+�S�3@ໍ�z��ZXV��$B=F
h9�)�T'L��ā#��g����%
_��ЀǏ���i%߉`.�]�rI��g��1��
 �+� � "=�x=��ו�0��+=��ߓ]�1�@�3�k�m�Z�u
��4m�Z�uM3y��W ���C���={#~�
c�e�>�a�ayK`T�
*�]ӕQ?�x"������
�c�T��qW� "4��~0 at N�,�
���s�6�`���g����nPV�J�	$]Rx��M���x �;8�%����B�Iv���M1�ǯ1����'m
?^����6�̍�<ɘQ��7��I�=�*�$�?�_=�#lH�N��\�K����Æ�g��XaX��	E?���*u&՟��G`�4�9_Df3�(�{�w�@Tb��Ð�3
��3d}������}�����x��cl��쓄i.���xU�E��a�3���Yd�
n��A@�
�;@�;��X�
a�
�@�
��x	�
+#�ٞ�;=ڱڙ9����hx圗��'��oc��`�`,G?E
�V�d��c�)��BZ�}~L�]	f��Ʉ;Q ���	Ƭ�`���bE&D� ��H�Ō�l�O1 ZN7pҞ�1/`F�y�
�
��
Xb�����3J-�д`ė�	�gvj�� <jz�RꩪH��l|��2iG��$f$�%�1\C h��"�c�&ͣ������<)&#v�ڨ��F�VO]�(ʹ�� V>��NՅq�=<�
+v.�xwk�l�/MW�}:�N�d�;��)��{����4f��
�h�0
k���s�2f�9�I�����v����1��zCm�h#��A�a��I�a��A��P0��TJ[���f�w!�
�u�}��0�N�B��eK�������*��w�j�SJ�Խ��
���{`w��L/wӉ2f���~p��8S���;p���+`o.\;l�x:l�!	�kv�?J�E�_h�]^�ir�O�'`+Ǔ�S�zȢ��L�rۯ'�S��wla�'�Oe�뮢����T����e�\m`���HU��W�5:y����=�N��n�ev����J`H����A�
9��,K���.A������\g4�gS����sO(�r}���;wU��)��^m�2��W���&�Aa~/!�?�C��˷b�y��>�D��s_v �e�
8/��,=�cY�t��]^��ߪ���۲�H���rl��
Z	&l�]��qq�i���g������tU��.kw��€���Y5LAC@�P�������}D僓v��8���m���,�r7�ؑ�c��~�E3�>ϑ��"���q�D髺����:���%p
�tH0�6��6Cf�7WҬ����:��-D4�KH��9z���}Y
ց��/⦚��LC�H��R
�����PLp�$S>�9a�sЄ�&
+�L�h�|�U�[r|f
�5�.��<� �����
YNB����b
�x8��m:C����C�
/Ϊ?F>,��"�j=���Nɞ��4���MSףk�������n���:�i�P��M�H2�f�G�^�~��U�b��-�*@4�����D�u�?�!Կ��}�_��;�F8¥���ۗy�
e���_�$^kz�N%] �cY�D�;Dg��f��� <�
+!aŲ|���{���U�`��-
+>g�]a��������Q��
m���ml�8�/��Yv`Zs���Xqʤ �13EŞ��g�Hd�6!26]`Iҫ����uqB�I�4cv@[��C�[I5
�
+�?Ba���uh:��Xy��ެ�q�B��Q��b^
+)sfv��S�=��R�RN�����V���L�Rl���Aݬc�`���]���s*@\ ��8=��L��=�O�� "�fa>^
���.0����7���K�����a���2Bhh�sQχ�뉥MT6bH<�Xmȩ��|����jzT�[���l&Ch�|��%˺����g��y�,� 
O�Y~�8!߈V2���뛈�Ax���P�v%9G�}��i��F���lߔg0��UƝ�d�1��RW�.�a�/�(���>�63ŸTG�u��a��B�gaY
~�����
�����yi��<R�P����0���Ev�����m��{ߨ�򢨆
�
���3�b��pF�=`���4���ۈ�Dل�Oj�PI��T~�^��"��t��~�\�r����ݹ�l��"Jz�/zɈ�*8��K��h;*�	g��$�Z��� hi_!�*�'�! 6�J8��>>��G��	�����*3x�����
eeР2=��ĎK&�����(.�_૯��A�%���dí(s�>���dqN�����6*;�$j�#B�� �X,Ga�L�4���ã�@��-��*�a� Y|A�Y�w��s�0�a��r`� sۏ�hP�:i ��x�W���:�	���;%u 3!f��r��ωx%�%��S��P'*Sp�������>�/��e�8e���G�z����GU�4�)LD� ��O�E�����1NB��w,��
+�ޗ�
_�8 ��4;�<���I{MX���ڻ��T4��]�p
�#��G�
��h�)A� �� ��	4`n���~NL��:`�d
v�7
Tp���<��Sʹ������7�
���?����ʟ�W�z�q��l�s����+��� 3w
5�R}�s5
{���d�5yB? ��q>����������k<��l��m B�p�9UD���}R�0o.#5�<��=L$ܙkЬ� M�D���d�
�v;�ݫ�*��Q�ԣ�OA�> aX΍Q���P���Lv&pCJ0g	^�������>TV���
�
�
Ȉ�W#����R��
�?�aC�K��[��?R}k���#:�&w��2\9 at c^�?M&(w�;b
Dh�k+{��~��
SNE=��`�z�����iz�F��U!#_p�(��ʀY�Ɖ�=͍�b{���a<�,��cϴY�%}_����4���KR�K�ؑ򺛎rw�m�)C��U0]�u6b�;����/bF�K�nT�;�߁/5�
+ at gy>���4߉`"�R�zw��q��D�yg�n�CG1��`YT����t@,
+endstream
+endobj
+1340 0 obj <<
+/Type /Page
+/Contents 1341 0 R
+/Resources 1339 0 R
+/MediaBox [0 0 612 792]
+/Parent 1298 0 R
+/Annots [ 1331 0 R ]
+>> endobj
+1331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.867 651.823 359.59 663.778]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+1342 0 obj <<
+/D [1340 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1343 0 obj <<
+/D [1340 0 R /XYZ 211.209 597.106 null]
+>> endobj
+1344 0 obj <<
+/D [1340 0 R /XYZ 251.436 540.263 null]
+>> endobj
+1345 0 obj <<
+/D [1340 0 R /XYZ 274.306 505.338 null]
+>> endobj
+1346 0 obj <<
+/D [1340 0 R /XYZ 290.484 404.66 null]
+>> endobj
+1347 0 obj <<
+/D [1340 0 R /XYZ 279.824 369.735 null]
+>> endobj
+1348 0 obj <<
+/D [1340 0 R /XYZ 86.4 180.276 null]
+>> endobj
+1339 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F11 694 0 R /F10 779 0 R /F12 820 0 R /F7 778 0 R /F14 697 0 R /F48 619 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1353 0 obj <<
+/Length 3083      
+/Filter /FlateDecode
+>>
+stream
+x��Z�v���+���X�M&'�~��Ng�ӛ�Y�$1�H
I��|}��H���mMI6I*
+�[�
+�g�Y<�������r5KI���]/g�"b�YJ�����K$����G��բ芺2
��hSÕE�]i��9Ki,"-/�������o��g4��$j�o.�����YLx���l��L�0�+g�.�~{5㡺"�K�& v�RJ�VN�]
�
�@���v�Z�҂ʓ^��Q5#��񨋬��A���sOc���\�h�$��F[���ꢺ�K猛D]�v>��qu91���qo�l�����W�ȡ�IB��5�6��"bu#	Ja<9m�ۀ��A�m���z#l��5
?�zb^s����x����\/�'��
�|=9f‰JT��Vd����"��;�'��
+T�<���2�ʝ���\�q�bBM
VHD����u��o�c�DJ���c��w%L��4j`�i��.i�j0G��Kף��i��/a2E��v�$�[ػ��pg��`�Mb/�Y.���/��4�i��q]k+8�wM�s��eJxX
�&�K,�
'Tt�.r�v�y�zg�CR���rP�E������r��wEY:�YיͶsv#	�5��w��–4�y���R�U�7�
L��h"{���YQZ�黪��ܙ"M����֐�Ήz�p1�
��v�/�F�&D �j2�`�غ^��"ЖU�	d��T�N��_�
$���4.�`z/lJl!�����ɳ�D�!��T��|�����'�Mb���,�H���G�}�����b��~ע�
B�� ���!�Cݙ�B��It��K+Y��U�_pxڠ���=8�,�K�Yh�� n��4���T@�*�7NTU��^|�tW
���2fa=
�����ҹ��0�w����̺����
�W%"�Ď ��g�1���Ԙlq�4���1�r�
 $x)��o�;k���Z�ܤ�-�d/
m�|W@�jJw
&�DO��\́���'c�(�VQ��'�
E��
�7�q2��� %{t�[�& 0
������V�NGt�n2 at +�.U:�Q�0�
��u
q|4"�$�w,�GD�v [...]
�-1�ў������c�����	#�
��f?b��a~ ��$ާ^�_b**�
����=R���*�5�I@���`<�.�1ʺZ
��`���= ,�(�=uW��)�m��q��plb�SB)�I��Y|��%�$	#~��5��������}7�"<�D U<�N<��bl����'��9��
F+0$�����]���e*�.h
�g"HL{Hϗ��#�S����{ۍi�e�lp�Ã�p�O�\��!�a��NGȗA�T{eͽ{\Z�b,>�X��|<C7QB���JIJ��N�r�&�
���SFXs�FTst�ʡ�-p;��=1��:����N7�B��{��X%I(%b ^1�>����Y�p�>�1_z�������ET�%Ǵ(Ė��si�U�&��i�F�S`{��
@=Y�a� ��OF4~a�GW!4sʦ�L����N

�첂�b���ԓ�:]��V�(Š(��a)�
F
+��I#�a��G�b�yJ1R
�=�:�� g�ӣJ
$g�
�iK0�d�'p
�`�_a�T	F'��@J�d���
z_�Ѻ/��d���0^���?\�1@�J�Q�AQ\]	�
���p��Xf
+����i.��'S�.��WR
�s�ܹL�wti���w-=��4����D�,��v���5-\Zd�����c�#&�νP��kv9�ޔ�#�qL�ՌC���?+���
+���NJ!�Ba���u���.�ĂV�w®�LGn���=���^���p\}��rU5l����w���� 33�)Vk�C�wa[[,��E?��hm����,s��r
��>{��Q�K�.n����
�h��|�j�����@�2��N�l���˹�r�v�өaR
+�R>���`�Un�z�QȎi��8ް��c����q�'�!����W�E�̤4�������6��42!����3�	}���G����%��\�4z�u���t�w�d��`)O;
�dx7]��!5��
z�"W��с�6�#0[8
������W�~~?�$�#gAD�Uk��dwP 
Eu������d:^
PN����k<�W�
6#�r�[�֘�f�%�w}�KA�Ԯ
+�b"^�D2�s�Y�l���`ȩ� �*]'N�ۮh,�AO[n���Ua#&Σ^{���l���&��C#g�@c��5%�����X�!�Y�X��a�(l�5_@��y�*�h�j��Q9Fl�.�|�`��77�m3A!�֪_��c����M:a���;�h�Y��쵩��߼?*���������R{�
�q���j�H	{�������A�	�W���3�
P� 
+D_~�,E���$���5d񘨛�������0����\���AA
�՝EmO�Z�E� ~���c9<g�4mY��	W��&K �,˦���Dh��"
ꐘ46u(~�7�6[�a��oa��I���>ufۆn�tGn�t���SV��Q��x��5�H�
�i�ii��}��������{�5)lM�?������[S
qw̾���N.���!_��uG5�
+3��8H�Hef��<Z
G�Q�7P�k�x\de�/㾚����w�KG��˙3Џy��Φ�'ӹO�zDE�p�<��f
}u��_��K���.(i�?��iM�o/�������g��Uc�S�Q �\����H ����X
A��0����f{~3��<��^ �������%�l
�/�B5��	��1����[��U�E��cR��;��:~�~�V
�p]��;���z�S�,*�5K��{�\y�+߳^��� Ij��q���1੒>&��C�2[���ϟ��M��
�����D�o�U��$(IS���3�#U�7x�6���盔A|�z\���|�MT,N�&_=n����jc�( I���M�$�$��T�4I����J�bꔰg}����8uIX���+(�o����
+endstream
+endobj
+1352 0 obj <<
+/Type /Page
+/Contents 1353 0 R
+/Resources 1351 0 R
+/MediaBox [0 0 612 792]
+/Parent 1363 0 R
+/Annots [ 1349 0 R 1350 0 R ]
+>> endobj
+1349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.809 301.374 470.532 313.329]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+1350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.402 254.056 256.125 264.904]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1354 0 obj <<
+/D [1352 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1355 0 obj <<
+/D [1352 0 R /XYZ 86.4 575.485 null]
+>> endobj
+1356 0 obj <<
+/D [1352 0 R /XYZ 86.4 251.912 null]
+>> endobj
+1357 0 obj <<
+/D [1352 0 R /XYZ 86.4 232.827 null]
+>> endobj
+1358 0 obj <<
+/D [1352 0 R /XYZ 86.4 209.867 null]
+>> endobj
+1359 0 obj <<
+/D [1352 0 R /XYZ 86.4 190.781 null]
+>> endobj
+1360 0 obj <<
+/D [1352 0 R /XYZ 86.4 167.822 null]
+>> endobj
+1361 0 obj <<
+/D [1352 0 R /XYZ 86.4 146.799 null]
+>> endobj
+1362 0 obj <<
+/D [1352 0 R /XYZ 86.4 125.776 null]
+>> endobj
+1351 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1367 0 obj <<
+/Length 2853      
+/Filter /FlateDecode
+>>
+stream
+x��Z�r�8��+���"4A�8]Y$�$�T�ɴ��"�-Q�)R��i��Ͻx�%Hv:��Y�
� pqp�
+�[/�^]<����%���$q{�OƄ{"LH̨w��>�"^,�H����XR����ŒI�_~Z����//�㦪���K��l�/�U��U�,~�~s������u��u""y�v�
�5�y��%�����<�B��.�}����r$~B	�ԋ�?�ހ$jy��l�4��ި��˼��"�3�{i�~��K:�&$��7������6'�GԎ�!��\�HVk�v��uW��ǛYR*I
+h�$aBOs���~��7��1cJH����]���r�
����-F�i�Y���o���6zu>^�&		d��]��z(c�I�C;tMD����
+�<I�
�'����i�3�T�g��p>Ɖ���ud&�T�L!�J��1��	N"���3L�)�NF�S������| ^ �Q����١��< �r/��yAxJa�L�
+�d�
g��PM� !��l�DKTT�#� I
���" �
+���,�$��� ���I$�%I��;zX����<�†Ls�)b��Kт�H���lj�t��܇��Z�1�t�-a���{3逍|d?�Y�&��������U��� G��O۔,��J�zkf)Ҧ��^��p(I
��v�
�z�F��6n�Hos��ClПF�"�����D�5��i�
F��&��̨̦+W�+���Y���6\k�^�QY�;e��6
(�OBo	v=�.�
+�m��[o���n�*k�}.�2K�_k��=����
w�ljo�rߵ����aق��)d�L[�R]1�uW���b��eeƍp�P���|lf
S�em��M{fN; w
+?s
j�u��n�VS}DChN��g�Af�/\�5��h
�V�v{1̫ �͞C���%��0
���CI+�"F}_e� 
A�1ž��o�]6]�I��Y`�d �d�2��%딐U�ZF�$⳵f��.Ƴ��E=�M��Ek(�U��5����q����;P��8�˩��吇w�(�ӼHo
+�}�Ŀ7
c;�;�x���,�
 n
�����l�]K�c")���C�d�L
��aU��!&�*
�����}�r�R6>�DŽ)��w�W���]��$
+�
+�^���03

+V�\��K��&L�7U�k|&���
J�z��6���~��Xugg���E�u6���0;��z��'j^�y
��}x}��� ����y*�`A���͹Q9��lx�

[�x�1�mZ
F_������%�\ԝ�>�5=��
+
��S.o	
C{X^�s5Ɛˆ� Mq$WS��	�	5fl*v:4T	�]l��q���k��2��%Grb��.x�6�"N�{2A�$

��<5E�O�G�t�Bn�g.�D�S�i
 �߿�
��G�w p�
��)	��K���4cj�!�
�p��'l�
ȋq�0��tI
+�M<��1�9�gX�A��d��#��x�&?��
7c���7,s�x�}� fnf(ׯ�
��M�i�[��;-�<p�G�$H����*6z����֦=N'�{���8C4�F�
Fi�	�nK�5ɤ,e�
�U͎�m�ZF��

���*�E�Y���MB�n��
Q'�Ք �X�F~�� Y
X4��b�P�8�3`B<`xV�0"E���*_k�㡂�=j���]�����Րp���`B��E��٢��A�׺zVAhk���NN�%���X���:�d�,L(��9�
g��ڠ�
XQ����C�9���qd�&�
Ug�*x���ݞ�s�@H��zd����z{Q����PR��I��nu�biDm�d>oT��*'�BS5��u�%�,�3�Hë�]���p�1oRc�xD���V�M��&���k6����}�i�5zS���o!��еŊ�R���"
�
�o�Vx㰭��=�
zf��wnȣ�B
�
�+��\��8�]��>UU��	
u֦y���>��m@0Gp�'ӟ>���.\��\!h�����bB��u���d����tf��tU�@�l��8����YZ����T
C?h�(�u�����:�
�
�����jgB����
�� �B,����px%i_�3Z�qbnt��E�g�3�A�Gp��tF
+�˼KK߈��u�I�B}���y{	iH8�F��
+ƞ��OoX
��$H�ć���Ōy��L��u�ҋ�i�39z;U
��ĻÜC����r]!��&q�߶�"��b��˙u�U���J����-O�V
J�F���$9D�G�\�>���ot2��|���Ϸ��HM �ﳛ��!�ߒMU��s*�姷��,
,H0�Ok��tdn1��җ�Z.	�
�dpʁ���S�����:l�	$X�!�u��	

MfA��
��
,��ˎ�Ʉ��@t�|����K��c�%��7b��v�>�
!|�X��X��|�
�t\m�����dtyh�
�����S��C��EM�sȵFׅ0�h3�MU�݅�8���W`�k�'婳F
���;��3��R�ʒ�/ͯ���̾vy��9ì�ͨ��e�����q�"�����
+zN�8�+$;#lZs�5k���h��vټ��O��;��}1��L�C��r�?B T��5
<��!�tQ���p�0a�qB����	a����/"Tΰ��t����+G�Br�4��za��G��X�q���W//_\]=V��sS�6�e�C0#���+���u�{ThӭP�6]�E���&V�A@#���鱀Fz�Z�݋w�*|�	�h�Ǘ
A��N�|����'�%
�.�CŅ|��bA=:�.dB���M���L�`��K��1�OszcgQ:�s?�,�uQQ
+endstream
+endobj
+1366 0 obj <<
+/Type /Page
+/Contents 1367 0 R
+/Resources 1365 0 R
+/MediaBox [0 0 612 792]
+/Parent 1363 0 R
+/Annots [ 1364 0 R ]
+>> endobj
+1364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [291.424 410.945 298.398 422.9]
+/Subtype /Link
+/A << /S /GoTo /D (Item.38) >>
+>> endobj
+1368 0 obj <<
+/D [1366 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1369 0 obj <<
+/D [1366 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1370 0 obj <<
+/D [1366 0 R /XYZ 86.4 611.063 null]
+>> endobj
+1371 0 obj <<
+/D [1366 0 R /XYZ 86.4 561.326 null]
+>> endobj
+1372 0 obj <<
+/D [1366 0 R /XYZ 86.4 542.418 null]
+>> endobj
+1373 0 obj <<
+/D [1366 0 R /XYZ 86.4 490.467 null]
+>> endobj
+1374 0 obj <<
+/D [1366 0 R /XYZ 86.4 469.898 null]
+>> endobj
+1375 0 obj <<
+/D [1366 0 R /XYZ 86.4 449.053 null]
+>> endobj
+1376 0 obj <<
+/D [1366 0 R /XYZ 86.4 388.602 null]
+>> endobj
+1365 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1379 0 obj <<
+/Length 3753      
+/Filter /FlateDecode
+>>
+stream
+x��[Is�F��W�4E�D�W4:S98N<e���DJ�� ���2H� (E���^wci$������6���{���nFf�������;
�t�C�nV�(
�L1
���n��_�"P�

���2M��2��b��8&�����r����iJ�\���n>\|ws���6dF�ee�p��/~��̖��Ì\G�G3o=\
�����?/�;&�WD��R�XvjP��������������/�l�䱃��=���Q�e�������M�`�
�2�R�wo�4�6Tz���
����
3�
����:]�>�y���D��I����e�e�V��}W�agy�
�yG\h�z��" �8�!J�ҳ0���ٍ?
�����ؕQ(M�]���1��h���|�����X�53��j�啝�n�D3-�6i\ZFUE�pɢyz��s7��
'7E�_�q�o�KA5�H:��S9��B��,,E���w$
W��oڪ����~�9Y�n��L�y��n�,]�/:��Iꢴo��6O���T�v*��-��#�/
M��&��n�Ǭ��Sn5ƅ>�)� 
J-�=�m�YZ�o=S��
��,`Z�Cf��N+�/

�h�~u���a)���{7p����-�{'�>�5�
kE~�[~ٗws�j� �F�aA�u�L>�L]�3����]��§l3��2��P���&q#_vE�!��ymG�8_,�n�a��.oL�`�Z����v[����:���8)n��}�U��&���U7���o�{���j��å�`�w��8H<��9)��*&"H�g!
+×�� jK1SN̜9��2`�R�J�g)� �r�^�e�<�[b^pH��L�y��N/nQw��3�F�L� 
����������
݌��S�R�u3HE�i�������(���.��8�����퀱j����ڣ�A���=1�1�05��T��c����ϱ�z㏺�C]�̓0����:�[x��e^%�����x����Z���ZC��S0v:B#ᄮ@5��~d�K�t�
"�j��>�@���x��Tk�x��1���8$��Ǹ�S���yȖ��v��L�90��
�z�'0���5���o� ��ବ������B��
+��4ݎ@ 0�rB|`%�y������s�.�:W at -�Bߠ#�O���	C�m�� *Ea�$���Β�h��8�n�a&4��?�4P�����
+/n
���r��������0�C�,�@�CU]��ծ�k[P`D���م��܅��	�=j��ګ����'U� i_Uy�p0���n��QR��ʞ�J�UU��/�5B�/���Z�}�
R�X�a���%��}AK,dg����
H l ����zTّ�N)�l�+γ?

����&i~E��'��*�vצ�
�� ƺ���W�YL���-:����|\#��扄��0�
CU�G�����L|���<�E
8�D
-�,iV�eٮX�53w�M��:��5���L0�&�
�u�J�}t�T!I1ڥ�?��㫑�/
1�g"Z;@��[pI��('M��Z ���7+k�2�4R�?
��'=nsQ�p�}���KL(O��۟�e�c�
�a�t!P���Qp�2]��3�šd�!E���5��R
���e��y����Z�r�
�
O�v���O�M�'8�W�xtN����|�-&�� B�n�yb]��=�:^���
=�1Wٴ���3�޽]���}2������cv��4���
+��p�4��Ө��aC6N�	��T���~���{�m
�GL���GczT����h�G��6���� �s�7�$�
�q�C����^~�e�h.�ہ6�#��RX�&��H�r�%#�]�uF!X:j�xVu�����y���/��YӾ-
+C�Xp0�%��Jl�\�
�E��}A:�w��! 0�!��O�:?*ߏ��l�ɠ%�FV`0^��A�r�O���	���z{�.G�hH�1�aQ�un���xRG�: B��W_Ǝ&T@�pI`��‘�
+>��uQ�M�
��|��ب�� 
-�jkY��u#�Rxt���իW�i
���Q85i�a+�WM l�UM>��=j�,N��H�m�c칵��&k�LK�J����A�<B"��� ��^j
�|<9��$�#ax�D:P��	���[�v�0���I 
�>�^(����fM	5�H6Bv�Z�_�1�
���k�g@�y��p� ɣ!�#
v��^V��*Ђ�Y��gB?�<��u(i?���H8,����6��2ۚ�c�إ4�.Ճ^���� �L>�(���N���
`�^��HxF���yn��)��n�8h?�}�(
��J��
4���
� � �åd�[19VqB$º��$c�_�G�5
�li��T��笠1�Ef��$���(_���
@%�@e[�
�P&�X`�4�~�A��"���//6Μd�4�Đ|��w[ 2=7C>��1j�)i�?��J�d���`���|�].S�@Q�G�-:Ɯ����:NnK:�����J͛�JCl���Wv��[�=zà�7
z�{���02 9|7Nr�W��
#�E�2���i��Ho�!��J���b"3���j�5*��$�M~|����T���Xz�+1:�6k����2�@/�u?�Ϫ
+"�PJ�Iq�2]Ż�M�F������! 
�k"�z�G
#�%�\�v��A|�(��
qKR�@��<ƻ� �I��n���nY�6��z�9:��\���
��Q����Fi��6����^#����a�XX�O`�/����
pB���FB�@�m�F� 	�H䃐�zWnڌyW��c4	��B������( <��XP�<%&m�f
���3 O����Q���@d�(`�ȶ
v؛Ka2d
��lIa`�;KK
+.Ř������ﮯO��-�\րH�G��I|����df����.?�Aú�s}�����ނ鞺3l�4�x�Ntp����%{���� �_����-�c�.*(�6-M�4�ٻ^�i�`��{C��pC�^2侮��������va��(9�_�
�6��ޮ���������w��彃Tc	�,��"��OG�|�].{�>�˧�^�U�{�a�/(l ��~���L�bW�O�cr
�n��@,�Z�N԰�0�@1� H`ש���i���@Y�[�֤î�N�]5���]�]�Zm���Ng�^M��s^�8	Ջ
+��0#`F�T�ݳȮ\v_�_�}\��l��8�l�mdb��.E��$���%�
K00������ӗx��NC �F:U\�M�Bmĝ��m�p���s1��v�vW���Y�l[��%�l�Ǧ���#�pi<���/�� 3z�U�՝&R�t���5�
�8`ˢ-�
��PPn��D���	eh'X��������6N��
���=�CJ���?��k'�Y(�[9��H��3�"�
���/�[�4
��/�UO����������t�D0 ��OOD�@�P]�O��]�pP�
;����q�c�Y�Zp�^��H�=�����nQ����]L���Dwi�������Z��se�c�Q,�
�����`E&T� �
X�5�~�
�`IuB�U���c�?ř�^�ת�T
+
H��=���
+�>�������L���_�KI��qqJ�\B��q{�$��7�g��!�sK��F�j��o^�
�
+endstream
+endobj
+1378 0 obj <<
+/Type /Page
+/Contents 1379 0 R
+/Resources 1377 0 R
+/MediaBox [0 0 612 792]
+/Parent 1363 0 R
+>> endobj
+1380 0 obj <<
+/D [1378 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1381 0 obj <<
+/D [1378 0 R /XYZ 86.4 422.185 null]
+>> endobj
+1382 0 obj <<
+/D [1378 0 R /XYZ 86.4 138.865 null]
+>> endobj
+1377 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1386 0 obj <<
+/Length 2370      
+/Filter /FlateDecode
+>>
+stream
+x��ZI����ϯ�)�f�Wt�R>X���*YQ<#���!�
�H��2Z~�_/X	.�0��@������
��u���W/�~��EA��F��*P⁤1�	���P�ٜ
+����lN�2�ֳ9S,��}�h��W7��*/�
���v�M�H�4���wo�n��sE�.HCG ţ`�������M��U�ٮ��ň��&�����|�>�\��'\"86�b�������_�|����l����FA^�
���ţ�R�7k6�ф�"L��-��dc�	�1��T�"ٸ�ٌʰ���ٽ}�
�"_�k��w�^�<|��(L6�.�oX`VڱA�%Q��hY<��/w��gX`D	i�}6D��S�K
̙��H0'��;�o��
�
+�(,��������C;�Fe
+a��V�d��>�r�7`���h�댄;��)�Jpx�l��'�
+N�o��[!�tk���
(�ʀQż��i׿߾����~��a'�����G"�!bU�"e"2�Bs{��#|�������X\`$�F��r��ĵsa��V����[��x
y����e�X�\՛�W�DW��b
�1����Թ��	./�;8��Q��7����#N�%�R,�� }����#�b���k��)F\�.�K=!����CA���bl�v"�`
i#�k�d?�mZJ�	����z�����q_��#S�l�\g
�8����Q>?�?�kP�!�_�&%�%}�'<
Jw��=mPzƞv��t�/�"ϖ��0���
�A�ɫ�|�f�%٤��r\�(�(V|�s��.��ER����4N�-ݭ��cC�gИvx���}+Q�:Tk
+�x��
.3�Gq�m��S�H�ZO���1�]Sn��h$�]���6�A#T�	]0�y	]0�BD#]X86w�n�OZ�����M�MQ
5+���s at r����f[<f��,
r�L��%�+���l  ����$�&���q�E��Ю֊!.s�
��I1$�
���H|B
Xu��C�?��a�r�
�hk�$�ht��8+��fH�'A(NMq��Q���
U_wS�
�v���,�����O�ْ��<>� �\���
�{�;�������Rp1�P�v�<y�]VNjE٩�+
��)!,R`?s� ��3
������x���Ʀ�^�~�d�X��
�Ꞃ�QȇC�箮h_����+�^���� c��� r�n"Tbp��.
+�t+,�>����_Ҳr����k�t�p��z�K�g�>��_qo�~mV�5�
��
QAi��-�=�Wu���&��	�6W
+ڥ��ŋ�u�/��ֺ�~�^p$�xk
 
�G��a�
'�#�������G�A�*!
 
����
 �������Uv�l&Ԁ��
F�ڰ0��m
�!j<�8BQ
`���썠�Q1�m��]��T���8�.,'f=�K�1�H �$|��[�ֆá)?�^��2!�W�\�	�>.$$">�1>(0/�����3
+
+��UE7)
���kS�ި^X� WHh���8�ȑ,�
��6u�O�K]�]�#�"BF����OO�G�^��q��R1�k�r�
+ԪlNe
.k��
S�/`0
��_��o�1[����$`�K�M�]!�™o�E~�&�{|�$|��S鄎(�
e�,}��Vn���&[�L�s�������`Z�S�����arVd
�6"9  �EX<)ڈ�e
��H5���퇦��X���c�.]�8X{+LLx[�������!���kpD��0��
?�:щ�&�4>

���%�$��xMc�cnڴ"mZ�6��6��ڦn���eC���'G���g�nBs0k(E�Yc
P
c${V��S�3
>s,�1�� �
e:�g?|>w
�b�}^Bu�$�����lF�������p���n�|�g��1zW���-Ϙ=_�j3{
P}��g��j�C4�Ɍ�9�]=
�{��TS{��01}
a7M�R��eE7��}���
K�+�
��K������@'M*��C��>.��]�>��8j����oA��p|����y��
�m�̂�J��ik۷�Vpz���"�֨bB� =;ݝ���⑒!�(�
�nb�Xe�J�s�]c���|�'8��~����li{`�>���/���eތ%IN6�33ݐ [...]
+endstream
+endobj
+1385 0 obj <<
+/Type /Page
+/Contents 1386 0 R
+/Resources 1384 0 R
+/MediaBox [0 0 612 792]
+/Parent 1363 0 R
+/Annots [ 1383 0 R ]
+>> endobj
+1383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.715 322.225 395.186 334.18]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+1387 0 obj <<
+/D [1385 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1388 0 obj <<
+/D [1385 0 R /XYZ 86.4 531.944 null]
+>> endobj
+1384 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1394 0 obj <<
+/Length 2785      
+/Filter /FlateDecode
+>>
+stream
+x��YY���~�_��K@�0�\8��,iU����D'����%�$b
4�]1���
��V\;��

fzzz���{��+o��ʳ�?l�����Jx���^m�V�����E��6��G��!>6I�ve�
��i�g��X
�x+W{Lʀ&\�%w^�m-��n�r��;���������ػx�Pכ���k3�qWV��
�p$���u�����oi���1K�q��EM*���E��;(H6���p4l����1wk!��=�������
�!��&��Z��My��aS�g7
i��҉��oq��k
���1�݂~\yL
+�8W�{,T��A[l�
F��!5+
h��=
A��)��z���h�m=hb��E�����y��5�n�N��Q�{]f��KR=3�*ΙRr�����@�>yfqW��kqK�mt��w/_QG}��$�����vJu��N0�w��5皊 4�����æ��E@��>y�[�!Y��4���p��	?
	�G�S�jf�1m=O?'���9�M���ZDp�kX�� ϖS�������E!�9
�����I�=[�>���i��F~`��/�,�`���oio�;U�4���m����)��	(%�`zf%5��* ��u���M�!�j5�����U����6�2�
+=
�r_Ź�W��.�h�v�a�m���.��qU� ���������H`=%jP/l�V��E�pO3����0p΁T>�v��|B7%n;��]���6�d��u\�z�x���r	��DŽ��x�b���1ʲ� ����� c�d�8ö��e6Z��$[2)�z��ɶ!b����� ͏p�	�h������8
�N,�V��,��5� )\ �� ��� �1Q.�eQ6�eK��ø�4G���"�
+���.tc`!ڄ�fG����=���Ď$���ws����Č
n
>����� ����A_wm�Ɂn1 Iz[�ad( u
+��n܅��-��DmP,Ǎω
����k�ߵy�O	��0���X<0,�&�qV���ћ��b�Mk����L�6��U�iZm�*M�zƤ���>�BGo��Q�
t 
�
%����Y�j_8?�h�.��۬A��8���T܌�G1[�N��%!����mUPO9W�=���&��,=�_�z����
+C�[��8ӊ���
�a�_}��[��
X���Ճ��s����>\�����j�Ṡ�EI\�4��Ƿ
,�|DSk[�$	ڿC
+������¶9
�a�;���|��O/���
�B���
9
$C(��b�eq���a!
!�Qr�0�0����*�w����%���������
9ߋ�#�VL-g�^>s���FE
.97��5"a
�w0�1��9?�
��n���С'��4*���P� ��h�<.�Y
+*��
8���Ǔ -wԺE�:�D���סDީLm
�2?B�X�C�� uw��m�"|��ĥ2j�J�����&4(OP.�(->�Fk_��UBo�q��i�C
n=j�T
8

/b8
+!g~�uB��I�;�I'�m��D��Yb^3]�@ �:K��1
+MfF�YC���F�ޢ���w��Q��k矐�PG�X�$*Ҷ���$[U���J��-��1X����h;��\��іf
L�Ct	��
ߤ�v��h��tSο����Š+�׶��N��-+ڶ����Y1�5��y*�n�ӷ���(N����'� Y���s��"�~���zR�\�%"
Z��I�����W oN�6c����sᘰ �)
,$� �$��f9�s{
+�d^�;s�q��^Ȣ���S�C.�IO
5޹0�tԓϛ ^on޽�-��}�����Mهˈ���1 ̋�g$�փ\��
}M�
+ٰ��q9��.}�
���`��*M���W
�&.檙���gg%u��}C o��6i��Ҩ�RN�.�u�%ayz��R$[�u�&)
�81;'
���.�˩򗦰6e�$(�i����I��b���-/W����eJJ�a�u�P��?����t��=����Vi�}M7��6k���!��弤���ƛ�>_ �71�6�j�J6��Z�n�k�`�r����C�3;۶��~�7�ť�*N ��*�3'�Y�CY�
�7����])�gX�~�xZQ����p����/�S*
��6�w�"��=)~��z�M
'Va}y(�t&�N�Bψ��"��U�K
+B�dȱ�H:K_�]\��
$
-��ce��q0E���Ƿ/o�������b)j�
d).wŇ
��
]v���6D,��)�
��]�7f��\UuC}h�#]�A�
�9��+|��6�f��}t�EBRJ)\����9NE1
��<��c�+lw����}>�{�¶�m���tcaF��evب�m>�AM�Ǹ�r��2K� \�x3��u���C]{�5��ڽ�x�؝�������B������<�
Ds�2p
ź�X�qc�L����7��V�2���Ú1�c��s���������3
'"1�g�@�ԕ�a)uT���X�á�
Ģ{-$|�%
��Y�`��'�����e
�MB
̠&�,<s�B!����"Ã٬�n���
�JV� �� ew�`��3_��r�v�����
W�Д}ht7�S�
+&�d�J�F-d�����M�.�V�H|��~`(ۃ����/�:O�,�O��q�h?\����.Sܜ;���� mSv�Lg�>��.�{�6�e
�vLБ+��ȳ�g�7���\K�_����"��c����m���Ϳ	�˖���V�7���

+endstream
+endobj
+1393 0 obj <<
+/Type /Page
+/Contents 1394 0 R
+/Resources 1392 0 R
+/MediaBox [0 0 612 792]
+/Parent 1363 0 R
+/Annots [ 1389 0 R 1390 0 R ]
+>> endobj
+1389 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.046 252.944 489.511 264.899]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1390 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.464 170.51 204.928 182.465]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1395 0 obj <<
+/D [1393 0 R /XYZ 86.4 726.045 null]
+>> endobj
+242 0 obj <<
+/D [1393 0 R /XYZ 86.4 701.138 null]
+>> endobj
+246 0 obj <<
+/D [1393 0 R /XYZ 86.4 416.348 null]
+>> endobj
+250 0 obj <<
+/D [1393 0 R /XYZ 86.4 236.67 null]
+>> endobj
+1392 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F48 619 0 R /F36 472 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1398 0 obj <<
+/Length 2366      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�H~�W�Q䄞���o��^b{�8gOf
�m��#�x2�緺%�[@�΋�I]�U}u��s�`��n���I�G��ҙ�9�D�Q�G�g:w��
���w/���g����9|���}��1��A�_�;���y������c�ԝ�ū��-,.�K��9�z���;
�������"�y��Y�����`���C at m쐵�y\:��Η߰3�_�;1�s��u�g>��n�L:���F��8w�OQ�@>З�P�G����F�_.��C�������������I�y��VY��G�Fq�
+0�=�a<��48
��}�t|�q���?@��� /$̒�e�0+t#�)��gb�]���‚�
�<o}]�X$]��)+���ZZ�+&�~�V�
c
y�9=B�/J3&ˍJ|[È��^��S�?�i8�����=��W]��=h��g�p�gŇo]!@�UX~N�,
+�>8���E��"|)�5<���
��R�
�����<R����
�#���
X�y�"�����
lܢq�û`�(-e!� O����@��
+sF�^�bQ�>} Q)ʝu�r�H��<�fy���FMN<��_�����R1�k-R����Ң-��~�n�F�Bݞ�(W��%ifE�%@���'�����.���Β�|�6�H���\���2�K�&�iЀ>
-0{L1��3��@+�lCۿ�$=��5ٕ@��� ���aD��t�k��z�l[�1T8R���o�s�?VQ�a����I���$JBj�
?
�G/�Q�����E����:�eOp��l)mM1C�cl���?d��}
c�_z7t{�
+�f<8N��W�d��$�C���l�K����0��$����
+��i��e-�]��Uj�_i�@K�<�����h�tcF��(��p�d�Gqhi
0�j
%��WY��f�H�\��n�Lg���DW��P�%�d���5�ʴk%�ٷ.�n2�W_������i)5Ȋ/�ٝJ)Ѐ��+�6lXФj�A��,�-^bV	��6�o�,_G�3zR\�6��)I�բ�ܖf�>�L4�o�߻��`��&.�n�W��d_��e
��16
1��j*���S��D@�[�#0�'R�
+�^
f��
+"�Je�b��b���/[�g
��(x�ү��\���Y�,��n���^�dZ3BI�WYo��n~�:�۫�i�̿��!� ��@2�}?L5ɓ&���P���
R$���G�d�H�����a��'�>i��)d�pa
&0�i�|3}
t}
�_���ܸ��\�a��o���4
+"g��G�*�+����G
�� ]�'����0�s��Ll��b0V�H��Sb�C�ǥ%=HFi3y�Ӱ֧kA������6���e�4�9L���ے���6��P�v)"[����5�<ނ$F����"e��`��gֵ�⠬kV����u�=�
a�wu��B�����]�)$
=ʑ��f��L���!�����޼y
��/�،~��[7���'ʜd3v��?]�Y�\��Ytc�]D
+R�8��g��X��͟m�
+T?j柠K?�aw,�v�f�!�斳�
�h��a
��AS���c�
����.ŧ�h��a�,��̛[[?�Z�����"��~fš^Q�#˙���]gz
�7���%�B)�
]�n�]���w0�73���2npi�y�q%���؉��v2��W�p����L��a���E�|e�E�e���w|�[�C�<�?�"��S ���|q����|jr,Z����Na�P�h�J�_�jY���<��7IƜr����uj�7�nÛ�h�WS4A����~��NV�r��3ʏE����hQO�U������*��E�AZ��,����$1EV�"�'	O
��?��������
���|µ��Z�l��{��=�
��.=��{�4	�3��
�/��x�y0���mN�?�h� w������!�V�Ȧ�y�!�IKԓ)t`��o(��T��|�̂�Ol��@ ��bW�
��c�<9�E�����c�.�zv|��a����
�^�C2����S����j�8���v���m�����d�o�{<�0�B��J�C!raC�V�]z߷�s
+4�����"���}�.��yh���y��:����>4��D�G�2����a	 |~��D��ڔ�-�M~&4�l��)��0��6��]����Իj�:M��Gl
^�Oc�D>�`\�C�U�+�5��=�"v��)yh�ꮙ���m�\�}���'�4�F��
}�C��]j��-��m�Th�cI��� y�=����m(<�t3�>}|=���2L�vA]����p1
+endstream
+endobj
+1397 0 obj <<
+/Type /Page
+/Contents 1398 0 R
+/Resources 1396 0 R
+/MediaBox [0 0 612 792]
+/Parent 1363 0 R
+/Annots [ 1391 0 R ]
+>> endobj
+1391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.035 688.242 303.5 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1399 0 obj <<
+/D [1397 0 R /XYZ 86.4 726.045 null]
+>> endobj
+254 0 obj <<
+/D [1397 0 R /XYZ 86.4 579.448 null]
+>> endobj
+1396 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F14 697 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1402 0 obj <<
+/Length 3094      
+/Filter /FlateDecode
+>>
+stream
+xڽZYs�8~��У�5�p��!�=�T���lm��-Q2k)QCR�x��o7
E[��������F7��r�~�x9�����QD"��h�iI�H��HNG���qH���|����	^�q��M�Cb/n.9����^_�N�o��X�3�m��?Ϸ4�@�|����7�Ӌ?/(��7"$Z��lu���hOތ�#=�j��F�G��U6�\�z�AG#!#QB�������_��F��Qh��y����㋻���z���+|��voM���;��i?��Ÿ��[
%�$!��5P�����l�L�ij����("\)�
+�Bg�WLh":�����Өyw�o�	����n��b_:|ۈs�-^�m����}��8a����J�u���
��l+{�خg��|�@�H��������龱
+�ϢP�.�?�	B}/_��
iu?[��V��(?���xV�o�;���@UH�V'�jz�k��
+C"�9xU-��^!.N�8fU�K�ƽ� B���K���a=�0
� 8�a?
��(�I�ܾ�
��?��Zjb���*)?'�� ea�~f8 	"v���#�xw�
� 7�E2����iR�=$!�
�D1�~����d�&Z�l�-���n6Y��m���%
��t�6�q���
��`;fiYٗ��kZ��ʋ��E���n��^/m{���l�Ņ�m#��+Pl�D!��)��ЎhgY�@e��=�=��=�Pף5+�
�����sS(�f:Ͼ����>��SкF�ӟ�Ƹpzbg�"ϲ
��Z��ö�u
� �5�P�������uz��pV/IE���u���`aD��DR:�Ӏ�v��hɐd�o�a�'�3	N��=��z{����&��8�L$��,6r�Q��{,专�l
#��-k:=��D�z���d�8/.�WE��
��`�s�
;;
 Y{�
"bD��$v
/� �{�!"pۂ=	P=�ՉhNw���T��4^gW?8�Rg�cTg\����b��� �)�,d�1G�j�
.ЏFu֠O8
؀
!�
��f�> [...]
N��i�V����Ci
�
t��Ak���5
@TJ¡�I�
-c S	m�6�� � �
�=�m�F�SȾv��hCvD�A{��hCE"���u�6�pϠ݃�V��ҫ�Y@k��4��1 ��$�
;�ƛx��g y<�mz�<�֗�l�����l=Z� �
va�a�K�ه1>�r�q[���i�*հA;��G� �(��P�i�`�G�e�>��y:�8L� 6��D�
-c g��S�2ߗ%@>�zr[���t�"�q�8���0�<���O��x�a��0���g�>�bp[�K�`��I�F�z ���R����2֘�j[?x�C������qRm7Oa�fz��z2����܉<>Z� �
+b���
+��(�A�G�Q�0~"iz�4V.0
q�}�SoB�g�݀qYٖ*w�&�'�����ݙ�8<���a�+[�P�
�n�
�

�b��z�m��
+7����z� �J��'K ��S+���K��GR�N��A���ʤu[��Yf9�Xli7���ze������=$�8ī�_�
P�W2�LQ�
�ּ�'��ď�����t��׽撰EߧYjsO��"�/>��ERn��dk���]e1���[<��
+��sS��"^�"�#
+
�!�Еs�T�:CA)
�C*�x���.n.9�
��6<DA[�hj�����Bi;�-BLy�"��t���~n�s
uI�H���K��Q!~
l*ӿ���
&�����@�¥��Ӻ�<�J\"�eٍ`'���^%�Cn��]=`��'m-	����O2�Ŗq�s
��k�
�6���U^��]^������23�#��<7��8u�%+ך��{�05���8'0D@>q��Ϧ� DX�4�����v�D�
\�d���v��
�X�2� ,�����;]z�R*O�{}�Tq��
+�Wie1��r���#�L
��㴴-E�H�”b����z�4���yRΊt�**�y(�8��Vk��H����$'��
�	o��j�Z���1`.�V�7�词s5,E�ީ���r�J�DAfI�G������,S˒��5�D
+����
ws���>�q��%y[~K��Jn���
j�O����|�]��-~�
+\��0?�΍r�ƴ<��
+�)G��n����Ο��B�:eyR��k��;��\9�6ݢ�i[9?n�����>�<u���)�	
�
8&W���+lZ��ޗI_�{�)�7�#:X��n4g����9�w�`c
�����@�3�0���,�i��ňJqծ���5�_{[VM��
3W؟A�U���d����E5U�3��������DM�]:�/W�n8�Ĵ.B�QEV���˻����a9a�� ,�L�-����?��ۏ/���]sy{}�k1���5��On?�w�P��\-���mC%�mw���Sأ��oM�Y�_�p�p�Λ�%a��P
��	{E��Z\�s
F�?LB�e_֔C{� b�Ju�'�]Z��>G�K�?u�G��^�[zb��������D����
<l�ۀ�<� �<���Wu�aœ���L� `M��= P</����>	0���β�#nc��a�.I=
�]l�o��*Q�ȏ�k��@�(���Y:�}GQ`+^��󤗜\�6���
�.a�d����a
e*4��ukc}ڊ$�j�޷��ރngW���V���;D���~�(��	��RZ �.]�&.K�as߹
�`V6k/8�w/޾��S���w�쒦
[�?왗��� ��7^[c!^44I�-����0^�.�0݌�!�fnxun
����n�+#�gJd��k���,)��6��p�\q��fT�ZB� S�FY��K�g[w�.�y�v6�f�G�!
>��K|�f[2C������:��s� �@E�
��f)���5
�������
,-ah�it�7ax>�Z��r7��v�,!���Hq�4��t  [...]

�B�f6��y��&�e��yltǞ
⬲GLHoq=��?�r��
+endstream
+endobj
+1401 0 obj <<
+/Type /Page
+/Contents 1402 0 R
+/Resources 1400 0 R
+/MediaBox [0 0 612 792]
+/Parent 1405 0 R
+>> endobj
+1403 0 obj <<
+/D [1401 0 R /XYZ 86.4 726.045 null]
+>> endobj
+258 0 obj <<
+/D [1401 0 R /XYZ 86.4 312.826 null]
+>> endobj
+1404 0 obj <<
+/D [1401 0 R /XYZ 86.4 197.225 null]
+>> endobj
+1400 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F38 517 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1410 0 obj <<
+/Length 2910      
+/Filter /FlateDecode
+>>
+stream
+xڥ�r۸�=_�3r�֊"u��>�i��&�u�����ز�YY�Jrsگ? �f%Mҗ�I q%�L�g������
�O";�]��LB�V���l_��r=�l��t&\OE��T���G�{����TX��3*+��WZ�
���ī��.
�u�5,>d�-�������{��F��\�^Ѯ��>KWq�y5�{�������d;a���P��������d
3�M
[F��^��M��lF������v��
�#a�PL|��O���>����Bt�%\X��^�MV5�rU�
8�Y�c�
2�E��ug)��f�pt��1����H�i�^h
�4��0��<!X�s�]B�z���vT8Jy�'\yA�p7ԄW��:�E%k��O뻑��#�AR
�50[�
&� jhB��=M>�4�M� >k����Q	�pgYW
��d�.M� �
y

ڸ�]t{�K�Dq�݋h���ә�z������|��ի/��ض
?b�*{XB’�	Ii�ߥ+��?��<��(��4�L�J�=$�69�ǥYY��:�Vez�/Oߕ�|^�x�/�}��ub���*�eZ� <���`�,+4�r�V�x2���=Qs}#ѓ��\��=�e9�4����^�Y�#��ڜ�U��j���8}�YNa'�s���8P�ש����P`o��eZ����@�A�>.�j@&�����,#{Yi�"���%�<b
g�i���҄jV㴾$D�))��=<��Wdԉ7�
S8���p�)i������H)�����<P_�o��}Ơ�lϊ�7�<���،.�>^�%]��P��
��'��\G<���E�R��e_�&�W�
�{�@��
�yt
K�5A?�����<�/����<^�C�jo��.���g:
� 6_��4{����Ӆ��������k=��Ss=8J‘t�;�w�� ;
򅵼K�h��搳�Qn�f���5]'<_��KK�]�՘%.�����,�מ�]�+T�����
��s?�2k��
wǙ��C�������; [...]
+�
=L1�`(��ms<
=Ȯ0I��P�k��CX�6�
��x���e倬��8�pP� i��m,�<�j��
 |���8�F�U�G�|���	!Je�W�V^�Y�'qI�̜凳#��%��RՃvxZA`W���2�f7����Ur_�76^ 
�?!
�P��&T�o{�|Bs�i
ķ�G3�.2 �Vm��
!�t��g.ϱ#��o��3Q!��
+������H
؈��)T�6W
+�c� z�7c�B��KC��r}[x�,��
"KbH
+1��Xy�P�/���/^���A��`�9����2F<
Ѻ�@�m^P8�8�U
[B�V�
+#K���e����R���4�����T�h)d����j(~�؎l��d�������
�ʄו�>��o0�ԝN^2v�p�+���&����$乑�w�����Q�-�
��WS �Tcuz����>^�YO���!
�&;�q^Pr�5���� r��z��m�!1�29K�m}GcW���0p��ط�%�8��x�Z���3�x�F_LR6�ը
c>�0_��]�$1T� ��Z�Y����J�n_�z��?�#\Ǿ
+ 븎	F�0>���Zp�m�B���J�@�
|
+�
Fw��&�5
�x���}�"(Ab�`<Gb�[<[bh��#��T?�U�Ը�%���1n���,���a�
+�
+K��tM�&�)��禍�̢ ʞ�_�,��P�M	�Q	�X��+�$>��"�pv�
+J>�
|(v�,��@^��1������ 5f?�]
8�CI3`��U�%TmPX��
�Bu�z��Q�h��q��	�M��+�w��i�p����
�&a�/S.1֦
+��x�

�:��4���b}���
�dx�����n��:��o҇b�s_m�Q�S ��F�%��a"Rv$��n�Q�	��D�W�e���
������А�d!S�20�@*;��ti~�<�x�F�%a�~�\eäEء�}?dp��)��Z��VE���� �*}�([D�������>��q�9&v�V��.+�|�J�z�9*����D�r��m��5��'���R�� R9
=�r>���~�*�v����l�i$�x�4�(?F[��
f�	s�	�'�?���Fu�]�x��P�
=�%�V`�m��j������ĥ�Р#I�δW����\|e2����R�_�L��Q�K/�
�]��c�y����<)Aj~+{�PP�k��.
�����y¯no�3������6K
o�x�;��a����g�)��i���~�lk��piUF>Mq�_5����5�ˈ-Cj�z�^/a`�AW�_N!����d@}�y]L?}M�
�Ac�84��m�c꟤,MQp�r�an{�տ�;T�"Lpl0�����!�0	�yP���q��G�b�5-���݈�mD��;�}[76
y��qC*���	�7/m�������y���Z�� ��
	 >�a1$������f~}�MD�
[Ѣ
��!lх������u�V�������~�YE�����+TP$큊�y"ғ:K7>�\#�JQ���D!n��}s
+C�
�P;���/�&�ݘ����bW��5q�(�m+
�C"2���N��N���� �&k�4�i��W�5��~9E��`�B���p�A������J?#)����6�#;��v�F
+�Y�J_5�
��!�Ϙtn$�����T0��1���:x�ݘi�/O�7v�
+endstream
+endobj
+1409 0 obj <<
+/Type /Page
+/Contents 1410 0 R
+/Resources 1408 0 R
+/MediaBox [0 0 612 792]
+/Parent 1405 0 R
+/Annots [ 1406 0 R 1407 0 R ]
+>> endobj
+1406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.195 611.653 511.169 622.501]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+1407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.938 168.197 194.661 177.108]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1411 0 obj <<
+/D [1409 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1412 0 obj <<
+/D [1409 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1413 0 obj <<
+/D [1409 0 R /XYZ 86.4 608.929 null]
+>> endobj
+1414 0 obj <<
+/D [1409 0 R /XYZ 86.4 551.325 null]
+>> endobj
+1408 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F11 694 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1419 0 obj <<
+/Length 2869      
+/Filter /FlateDecode
+>>
+stream
+xڭY[s۶~��������B�rf:s
_r��N�(�t�>0msJ�*I�q����	v��/���b��oA>���٫����*��,�d4[�̒���X�,Rb�X�>����*Q��&�ͱ�
u�w95.�
N�߷g�4���c��7��N[W�/�ծ��c��D
��x}p�8��@�P|&��%a4[�>��g+y=�L�����[�B�2	�r���>T*�$�bZ'�(L����uv(����_\��7g63��N�i�p�
�����+��%Ԩ��A�ۼn�_Po�Yy6�5������(�mT�Y���j�
+�`:vM^��U�fԇb�<uN=t���dkە5���U���fM�
f�B�LG14K��g[y����~q��'��oO��
c�����p�a
+�D,Uv�9�

#��~2fI
�;����Li��f�ծ-69-[4�+<��b����w9�1M�TeY����m/4d����v�,"9��Vc�x-"���yG�]��B���5�}�~G��f�
+NJ���5Q����s����� �J��<��!�|
+yx���V~��GtЋ˓WG�8?�6
����hUE�>��h�qޅ �N�D8���I���܍� �Q<��i<&��f
�����y���q���
N��
h�cp��Y�e��hJ^�UM�<����3QI}�l�N�/3��J��[6�owk3B��C&p t�M�
�)S�s
���B��h�
Nl� U�]����\�
=\���]�D��h�,
ݜ
o���n��;�:7���ϼ��74��]�W�
��]]�+6rN�`Gr��Ǔ&�̾a-�>o)
U۶�6Y���v�6>!�)�/�Y‡�<��X�ϯ��8Ö�
+H���
1x{2]���+O<h��B��)j��;P���ވ,Bә@f<�������{�M$��N��_�)`��om�~5I�!
e��fz|�����HFx�de3u@?�n��[�۽��>�����G�b�4!
��e�.3��ӎ�7�QB� �8Xbg�}B������V��i��:�p�'A�@��1�>���R�˳

+$L���!���Z�M
�@��G; Z5#U4��a�JiMث`߫�2k;����'8c\T�I�^g��s�Y+
1�F�E=ҽ��Hj���
�̨;���F( x
�@O�
n Y�3������m���F����vYY��A��0��kts(�.��o��=�$L�Yy
v�,vʨ�g1�gҨ
���c䙣����u��� Q![���RiH�X$��!4V.�9��W(KT���1V��58�
�l�������Z�w�
,�l���b�o��]�3��#&@���ܴ�j�"$�Nea �sY�@��aD��w�d�Kۮ6�#
6�ev��.
��Pn���͚�-�c
��NΊ��%'Xv�TT��K��Z[F��晜���4
J>:�P��~��dns�x �K-c~lt��J���Ǿf�N٭��KR��
&��
�[u��̭�/�w�c���aD@���*W�B�#�g�W�|F�'�Oq2݇�!O�e@��4;��
��&"/ -�
>~�yWbx�� s D����	0v�',?�����:_W�#�o C#�ݽ���A�ɹa���"�I�@��
�l�*:�b���u$)*�
�R�n��a��9�S�Cߨ��r�2�V�D|�����L���peѴ��H�
�������������x�EjR
�Y\ě�:�ZD
��y��H�)5 �3l9Rdr�Wi�Q���$�R��8(�����Ê�e_���|���1%���f�rG\ڼ�S�
��,L�`{.�*&z���+wHm��U��M)!��`��@�7�`k]:I�O*�A�T���&�æs(�������"݃	ROuڄ
˂ս<3� [...]
+e��.���b�S�Sa�u)�)rt! �_���CgSk��=�t1���҄u[&��=��h3���l������cE�
�
�A�
�
�s4"a�3Ԉg��X
L��x��ɻ��7=��0�!�����"
+𭡮;s	~oUͦ��иX�)6������xo/�JY����¨���
\p���e�m� �m=NIȴ|
�$���P���D䒈	9�VW���j�:��f��Z�Rw���ò���k^�N��
+�a��^��q%
{�(6�gA͢TLn�dD���~�zHAx(���
+��]Cwܶ �$�gBh��Z�ݤ.aվ��.�`ĥZ�ֶ�> �*�cF��X
+WCb�R�qr��3Gʀ{N�B��|I�|!�D�^��: uL�
>s�!҄�(}�&#��UF~�U~
��
�q�As����MEx�dF��4�i��lg����0�}�ظ��
��?��~�a1�:�	����{C��
�����p
|�6�����ɵm^�&}tbR�e�Zs
||#���od�R��<�_�l�#���핕��7������N�a?�=�{=�{Z�l�. 
+�w��˓sdd�ktP
����a$�u�>D��n6F���0WX*r�<�[�m'�W�߈�Y���<����7]�WAc�o}����o����^�ɾ������憂�at“E8gn���lp���������)�g1�$ �o��n���&T����~���oUFG��4"JHMH	"�}�\2
�u����O��
�~�0Sށ�g-»�=�H�݉����d�B��!�Z�L�fw�<�
2e<�{��y�N��1FKD����5F82F$�3`��������~�
+endstream
+endobj
+1418 0 obj <<
+/Type /Page
+/Contents 1419 0 R
+/Resources 1417 0 R
+/MediaBox [0 0 612 792]
+/Parent 1405 0 R
+/Annots [ 1415 0 R 1416 0 R ]
+>> endobj
+1415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.711 549.045 477.434 561]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+1416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [501.931 370.108 516.654 380.956]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1420 0 obj <<
+/D [1418 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1421 0 obj <<
+/D [1418 0 R /XYZ 86.4 584.468 null]
+>> endobj
+1422 0 obj <<
+/D [1418 0 R /XYZ 86.4 546.259 null]
+>> endobj
+1417 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F14 697 0 R /F11 694 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1426 0 obj <<
+/Length 3391      
+/Filter /FlateDecode
+>>
+stream
+xڭZ�s�6�_��;��b	�v:sN�$Nm�u�f:mh��x�D������b���8n�"� �X��o?�hr;�&�N�-N�z��$
3��b=Ie(&*�B��d���
�b:cq"���������
�
�S�Ng<A��+�w��+�u�,��e
�8X��}���t]74�t�^O3,�Ϯ譳���\�]Y��鯋7'���o'
؎&̲���������_��
+���D!���'�n;<
cU�w'?�D�c3686�x�$�Df,dJ��׸�W/���$� ��%���a��]�}�*�?&�xK5 �P��
+������4(�]�����NgI���A�49>�o���gi����?������X���S��t�C�]q[4-���
����@(�%r��}�"��q��a_ty���}[44Z�]n�
\����dK������u(�8�A�o�^hi��ԭyx��m���]�c��4f�����<��x����B��r�
��bc�&E.���i+�B�[և��^���.9�	��=��q3���*�L
�q�4���KP�x���vA��r˯�?<F�K:jj���X�¹LC��F�Yߒ�?�	��G�k�4!

88�o�R��<��p2���7g
}sJ���)D�N����N�Т4'@0E����,7E�o��/K�[s�M�D�l��o�}e���@Ĉ����4�m�6���eѶ�}uJ"f�I
�,�ˀ�nK�O4��4I��ڛ[$�W�RS,I�����o*�Μ��&�\���-4�xpX�]�ma x�b��W�6��zUx4̝�}*��p�u������
C0��K,;���xc
�H6p$����6,(0ii]
�P� Ld�#Fl�뼬� ��~w,�{z�d
�l�V�V3�qT�gcB����l�ɫ�X�D �O������Ɣbp�����l������_B���l�ȉh����;
"�3��ANQ��ݔ�_Z���zd�H�E{\�m�A�8d��{U����8�v��8$�
d9;�
:��Uj�8|x�
+��?���$$f�*v��+c,t��̹���E��
DӕF?�`#̸2���%�lD:����� ����'�sW �Y�,K E���)v�Y�۾�ʁ�� �3��rK��� V
������t�+ȉ"��E=��R"
c�Ş���8s��2H-��Ɛ`S7��Ȑ9��XxL���Y�CB6)��	0���g��d�H�>�S�Lhk
D�V-���x�:x����@;̖�eSl
O-"�J�����
+J.�'�a�Vnz�@�X��_�`���>��z��S<WU�SzpX
Al��|1���0?�z��#?�Pz�ݷHUoW�
+�KgLʸ>!#���c�����[�
B��&o
�-~��&�2q~Mq�P�<㟗�(S$��	�x
��H���9�ҞCr���k�ũ4焩��4�4�~���uO�F
�k��}.���V-]�G�wh�ye�����[8D+�gz�o�/0$J]�<���M�@��*@U5.C�M�5�1�i�L�
A@ݎ�U��@W���rg��
�XŃ���ђ,���6@���V{6L�T&+C�|4�' 
%
��
�9'��p�`C�% ? ���3��F� ·`���
�uU��HR"��ϴ�͔�֋!{S�(ٚ_��{"3Ԅ�YN�ckڦh��-:���]��&�)2�)��^�����5-��І��Sȭ@��y�9��V���/P�z-���٫S����o�!e��
�[�a��W:HݤRbd��&�<�0�Ͼ%��
+%�)�&,pM�r}OO����FR\�)ܓf��a^�/�R�	�� �M��&\�R��J9O��K;�e��N7/
�Fq�Rb[Eҕ{8��
�	e��d�E���}]WsZ��>�ջٟES���tՑ3RCj����
+�V�S-��K�vXi)�6ѓ�|sv�[|����*�.Aϐ�K=a�X�Ȅ�i(�A��ŤQ=.�yL�t鵬'�Lӽa ��ɐ~C#-b�n8>v$� �GJl�	��v���z����+_�}���ơ
�o]�D�)P�\��70@�4����)�D
F��<i�၍X�i[k�+�q����&-��sK&���[��~u2�Y/K�x$�73jtϘ<��q{F�4l�5E�!`;�Z���R�Y8[���=p���ڨ&҇@!
+n��O�y�0�qy��F
]�$�ڽ�zw@��
*��'I�ϕ}Y����o���
+[�k�ґ׺��{��-.� HYC
+�xXv�"��s����m��]��=�j��q���vp�W\�B�R�Fk���}5DF�+�.�{�	B�H� �w�'z�ɫ�
��S��6�<нˋv|hCL��%�=��x}C����� N�}��@)��Yڇb�˫�k���X!U4��p���Dt�	����!�&N=
����pE��P	���с��t�-�5�j8�+�Oۈ�_�Ƕ"�5A��(�uܘ�,
��
��
wfW�����ա��z��'��[��sbsU�6|���d����H4��u:�{,"a�d��$�c����$�1��}86{��<����4���Ģ������@�Kˡ,H��4ڞ�%<��&���L��X�}(�Ѷ�w�ՙW�w
_�)B�ՠhҀ�/�G5�.�X�Ѯ9�;�H����]���[��~$��H� X����L�����
+&i<N}�Fw�L]�*ol����ng��Y�&�%ab���u�Y�����`��v_�,b%?ȯ�Z�
�W�M��Ʀo-bWR�M�J�ԍS�A�A�_w�I�)u-]�4�\l;K����t�;�Km��:}%���166�,PH*�
+��o!���bQP� �-����T�}��&��cW�
�+�e2L�
o�ŕA	/��C��i���SPq�P8~Kw�^%�}��0$���
+18	�b:�ź
�#f�!���l���=�e�$T�A��k�W!���g�<���9%T_�A���K3\��O����������ٵ^�>T5||�MgY����Y��؍�q
�
� ��<{e��#��|�$>g���������㹇��(ƒ
�
Oq7��[��� Q'�+1��
���y!���
}RR��S���}�`���H�f,RP��O�E~�����I,|�y�����O`OQ��S��\&����o�� �hr�
��o�2�A�&�:_Y�{�
+@���)h؞]�0I
:�<��
+T�z������10�{@$����C�����S�aW
� yh�?p
z���o��mz<�/7�&Þ�') �����C�����k6��F�G,T���M!�cd�T𮫛­��+.S�$������?–,0�����	E(#v|c�G1i�8�?
�C�
+endstream
+endobj
+1425 0 obj <<
+/Type /Page
+/Contents 1426 0 R
+/Resources 1424 0 R
+/MediaBox [0 0 612 792]
+/Parent 1405 0 R
+/Annots [ 1423 0 R ]
+>> endobj
+1423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.329 387.199 394.052 398.047]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1427 0 obj <<
+/D [1425 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1424 0 obj <<
+/Font << /F36 472 0 R /F11 694 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1431 0 obj <<
+/Length 3663      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�6~�����g-��[{��&J��vR[iO���CK��
%�$U���;��
��n�>� .��o�(��N���oG_�R�$Y,��b=Ic�'��D���b5�y	}<S���o���zZ����+���X������9u*����:_r�M
O9]�+��A�i
��xs4_
�v¢�I�/"��'���Ͽ����Be�����L�ʄ�R5�>��(n*
�)
���tg�����&_�7e�=�iN���
��=���%}�*
��	�
q2��{�Xd�J�G$"�'�P�,�^�W��~���bR9t�/�;ό:&a?��#e"Q��k�a(@Zܡ�z�!ҍ�K�Ai;�gCZĉ���N�:=X���G&0F��1B:�_�ȷ �4П/+���݇���p�0o'�Sɳ�D��n���x���o�>^_��H)7od�+����t��q*�ԟ8�TdN"ю�J��L�
�>�����,	����Mf*�D�i�"Dl�v��`�a4͛���-���;�ED��
�@A���� `����O��C7 -j��$�v)�~�r�YI-k�V^niX��XXGS��qO�j_���;)i%�=�@#K�1"��Wz$
5�X-P
+���o�,��Ϙ�Hۧ�������2N�6�Kk�v�$�ˮ�
�YT��k@
�t��J��f��
�y���̓O�T 
⟽;�z�,�����
ר#�~2�w[4-�8���*�Db'�zz"훨)����5+�m�P�U��T�ˠ�4Ր'��6�pU�RMwW�\��۶X�<�4
�d$Ϯ�����ٳ{�⇋���/<��+�Q|�PH�t�襗]��,㈭6���{�H 
�4X$I�ƐϏ1Ӂ|
+/`47�򌕁��ʦU���9�h<-�������
H�
#���{�*V$Ns��r��u���
��l���	DG.�T$Z��
��{�A�G�͛Sρ�XĮ��v�q6��n�oY�*Q�K�)�EӘm@�)�}���_�0�o����\����k{W��oY蛶訶��"��r����h���:A��JP=�Sݖ=>�g����{;��qV�(����e�
�Q���*���dNai�c�D3�7�':obS��rj�
M˜N�9
IV-�dz�y�^�s����˪�y�+6��f1b��e
�o�1��
����>��m>�4X��z�G��
��ڣ>���y5�
/�
Y^VFh
+�sKBOB�&+OpBCyB���)���;h`k5f�z��UW�P �y:
+��o�/�mя`YR�gI3
�
�1��C�g``� �K���?1���C�A'O�h�\ ����� ������h����3F�-�0۲�,�n�h>%X�
�Fv�� r<
+G0�pg�����b�]��[
+
ʭ��i�
+n������y'}X����;��;���iω��*�y> �E��4�`Ȅ^ںbK�w�*�ɸ��!&���XP�����X-� 2e��B�������:R"��c�Qf
ki�,��W�6 �F߆�����
9t�w�"�(7�D[T� ��
}�ɍ��˶0��Ʊf��VX��������uQ����d�����o�����
�3
],�4OO�
�7hA�
�~ז}J�"s��[_�;�AdS;�̫��Ns�����si�-�¢�_�2�A�'e!3��|^.�y)7�18UB�d
��
�g<b�d�߬�hQUU��>^P
+ �b`P�����������o�
�����Y
�LWo
�
E�F�XpT
�I:	�.��rwp�D9���e�� ��єoy4�w
�B��
'��u�@��!f̈́L��
��g��2D��ښJdF2eG�U�m��4�~���zOЄ⡗�vs����
�


N�ҳ7J�c�Z�W���0���+�^�}�@��P��d���ႇ����҃pi���J&
+�*��H��w�jq/=�rk��~Y�0���Ѧt�U3���z�!p_�����`M�#�C�JB�Qo^%M�gq^B�V�����
�
�d�uN�R¬��뺪
�ߓ�����
e�?���J�:E6��/��lN���$
�C�W�o;~�?
33q�����	4\�&w�'���"�
��7`ǜ"p"����$�
+�����	�A�����oL��
K,ij�
G�$&%������ ������(�g˔nY����c,Ůw�mif�~��J�����C�7��:��#@��{2
N������U*R���6a�
cX3���5�B
D�}��ƵA��� 
ŵ�cZz�X����w�r��a[og������4N4H�
��df8��2�/1g�qPAA��f2�0��{�
ƺ�*1bD�H�7�j�8Y�
�
/=�셳锹�2$�9=�
��<<o
�j���I �ٜk�	�<��r�w��dw�\�w#�W$?��¤�Oߝ����Y6��W����M\.�͖^l
+ɶ^�C��� JK����F~n!r~����`�
+#��"���5�$�7��-_-^�>��l�EB�D�P�
Qpb����Z��.oZ�Ӵ��–�"����'5۫R<����j.����Ƈx#�ivU۸�5|w��?	^����g�>#[Q�� +2�6����
��u���w�t��Bf
��^οg
��������2��n�o�^ί�.��6k�V@��L$�?�bM����{4�	 *T����}B�\�c��ݗ:	��Z���k�� b�7Ta���Tݐ�l�kĻ�z��e,�hU��-h�-@��0<�� �M��ok@����q'�;�E��7����2C�q,�k�/8����d�K�/��Kz��5R���lYW�
�R����>o
I
�b~�0/�S������/N�"<����(V>��d���-�Ø5��h�'Yʇ�9�`eݬ���Px[m����� 9K��
���6�ݖ�C��n��ΑN؃M1f��}�	?��X^X����^�Z�<��pФ�/ޞ�^��*6S
+!ԣ�e�>���9r���l���R?;��Li��&��Q�إ�z]�#�5��9rh��s��f������#�@�4��l�
����	Bh�t��j�^Ks�c����sD��
��ʏ6Y��"2'[��eL�
+(�st�IL��)R�?�T�%�
Q(t�����Ƹ���
7m�?:d�Z���~ Nt�������I��}>4lt��s��W�8�4�H<h&�C�|��s��7b*p�
�1_�~�
��
r�SPg�F
#0*�oo
�A
�G/�%�cra���raʼ|�X\��.�O
j�'����p������)
>�#-b�O
:���$
�@@(=	ܐN|�τJ�掉�Lh�D8*�@��f(*I�������ep]�e���^%"H��L������;�5���,{0����Z��F�/��;"%�W�_Ь
+/5��
�'� ����S�l�
&|��\`N!
�)�
ȋ�>����͟�`"��"S$�$�c���l�O�	�z�cx���a��uU.y�[^3��В*F`���I�>�sx
�$�*�ë0�ŧ8�m>����0�k�=�D�4
���0�z�+����?����F_L؛������Y��_Ln>	����ͯ̆\|���j~���r�?

>Z@ƿ�*#
+endstream
+endobj
+1430 0 obj <<
+/Type /Page
+/Contents 1431 0 R
+/Resources 1429 0 R
+/MediaBox [0 0 612 792]
+/Parent 1405 0 R
+/Annots [ 1428 0 R ]
+>> endobj
+1428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.544 357.513 390.266 368.362]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1432 0 obj <<
+/D [1430 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1429 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R /F48 619 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1437 0 obj <<
+/Length 3722      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[w�6~����
jk!ą�v�gGv�؎+)�i
��y*�*I%q}g0 /b�{�C`0��7����\�<��<;�� aI(���v�L
"��P��|9x���p�E��|(�w���y��dȽ��H��K��/��[
���6]d4tU���@�_�k��%5�o��$����5�5����"��b[
��_�L�'��p`�p�f�b��w���F^
|&�x�I�mJ&L at k=��|�w�
wv�}ɂ 
�	g<
+i��2å���.��B�HS]Ͽ�N�/fDإS!
9�ty5
�(��
��
��ۃP6��0
�o��)i���/�Y�����~�gR�ْ����`�Z%���j��`�ث
w)>}ğ��b�U�Fox0�B��`�9K#�M�n��
+�m�R�O�x,�0fq�ؽ�������$g2��&�>/�]M��wiM��,tk�%UTU�am�>��K�Z2���,���L_L�/�/
��
�Y�[i���bc�3���F,�c�v��e�z�����",�#�^إ
\��ax�
+�T挅��|�X���p^��|Ն���ޗ�
�9߮P�a�q����ʷ�W�o�c���̬Wl��xO�Ḥ���P���%���"b*	joTf�&d,lԡˆf�(�@
��K;�
+,� ��ֹ+.Y,���*���o�TB{24_9�ҭ��
ڴ��N^J�Iz&�	��7���v�"&�hF
��F�/��8�

�q��1]�j��UF�K�-���64��'��
���F��!�kE�ii&�W��� �Rg}7�Q����eUS?�n
d���+��

+�������a��~��e���-�� 0>F��b��׸�O��2�`#�hQ�=o��>'YY�~>�0���
+��
q�SRp��d���
�󍎃�Mg���̰Q�Wu���W����NEObP�F�^

	��j
׷�)|��������+�G޷�t<��X
4ޔ�r"���s�"2�^^ӖZU@�~�žf��zMrn�
+^��R��
+f��Z����ap����3��<{�|�������٪�/~�ύr�d��m���_�lZ�^��c۞�0����o�ݿ�P��^��̧3��w����xj�Ӷ��k޴DӒ�����(DA���uA�D�>���P"�d^7it���(q3�O���%S�Y����9�Ðek�دm�:������4vW�i�S�&��(14���`�O���	@�Z�\�|�1��hH�����,�S
��^y��BO�������6���)πE���Z
p�g~�,��m�Z���t�:}�0As.��e����eZW	ːK���{��e��*�9���;��\z!�;z2[�˱�S�2DU48'&Lz<[��"��U��55���؉,;M�w�-�t�$tEF�p�N�o�OF5I1��tPG����C�[��Ҥ4��p48Ũѕ��Ea���`�"�;B�4��MX�lvF
�Q�3}O]萩��2�3�8-���kG2Q� �_��I
�%�2n�A��� �\z*	S� [...]
B&x�TWK���8�	���d�΂U@֡R7)�FU�\
TS5�N�XxW
+�U0g_+���7�7.K,iM১-��Ut��Y���
3J"ө
O�i�<�
�r��Cp�aG�
� VQa�
S�@�
d��⢐�&�G�LZ�|֘
�vr
+����B��
.����ؚ즭�4@�E5�	��D�oT���Tԫm�;��".f�����*`a�8N����E��طζ+�a�_#T�C�@�m�Q��V�(��&Bƃ^s���k����n
7��GjiC��ȡ�q‚(�rC/�Tl��� zX6A����Å���$}@ƒH��cQbKr~7��S+@������b���|QN�����D�˜��������VԢIe+�@m��	�G�Di�
����6�H#�
��WJv�$>���mFIG�����E��.;�N�[!��BV,��#��+�%
�m���
~go�W��T-w�)�=s,$`��f��8�
�Pq�r�=�Q�(b<�}�?�?1oj��� U&ph�֩�*@�>��(�.�l@�\�"�a�������R�k�H�%�P��
��iB&I�y/��Rk�r(�+3�$AP]�4>��è/P#��[	%]	�C#��
�`ҼU��RBa�|��'D1���_�ˮ��֙�����l&��R��}g�0 G}	]�7�[b���@�h�I���!ie���̴]�4H��K��L��a��,u� �Tf���R��� ei�GO�S3�%�j��8S��ק��R X�����sA�̝�#xϢ-��� 8`���t�	����8=K���t���烙�ÜlK�����jԲ
+C�Uh�Xe�|���X�,��4	(�k�*��ޞ�+q@���
(�*�7M�'���@���k�m��T.?�K�/M��E;ݕ�T�Ʃt���JÿӧB�'��%�����*�Y�L���foo&�˷W��
+��M at L��0�T�;�1�
�ڢ>���t�=�J9RN�z{E�3��x:��&s<Q݉&�窀�;�VN��
���/>ҕK�P��a� I�z��;H�
3p,�I>a2o��i&��)���^�ق��Jo}fK|��"�_���a6��3���k�|E![���ZЄu����!W�Z{k��x�Re���7�m�VF�R[o��:�(�����Oh?C
+���reJ(Ӌ��;Ma����f���}' �
�c�wE����)��� j,_�� t��C`l�kp#iI�t�Q
o���\{;�v&l���t5�7�Z����>`k2�fE��S���Mf�����n�K�oCF�[�m�~J����Y��?�����k؋6��d������/f����/M���r������o���zO�U��:��9�ϊ�P���xw�x[�Rf֪-c��I�f��=}#����a�[hl���G-(�qx�"�%��	^�+n�������vH�<
���:���+�
}���lJ�cC-=3���oQ�(����U��1 ƢI��J8�쳨�VX�P���A�L7���M��
�O"��k�5T!'�D��ޛ�c"���!:hl�%
�:/F3jX*���1u�2kH&��u�S*�����#Q�\�#
+�=]� ������:^��k���s��@ ��)v��9�N��1�Y�7,��:X��d�aQ����ފ�>f,4f�[��W�vah�b
P�<�ަ���H�;��{�bn�c�
f��h6�
�b݃v�
�8R47F�"�s�>����Od������V��vH
+ Yԃ㲫ݝ���D�6ݯk���p�
/1K�إ)v�^t���`h�˛���
�i�:̛9
+%�3v�5�H��D��l����/M��ƀ���I��n��<���M��\DJ��/}��8*���ҠJ	��}�?&�� ��c�y@��	΅�TM�W��`_�u�"��$;�
���.��
��٭6���U���A
J `R�>�k}�cle��1u6��B7Q+�uF�n
~���##\��=�k:��ޫ2ybs�Û"1�%����$�Z��V�dn�1`ы=��QԳ���
���P��r�@ ��͘d�@
7.6o�TJ��Ƈg&E�B$
��}���y>:����"Apl���7wfk�BR��� ���)�:���S��-�-et˲_�ȓ���2

+endstream
+endobj
+1436 0 obj <<
+/Type /Page
+/Contents 1437 0 R
+/Resources 1435 0 R
+/MediaBox [0 0 612 792]
+/Parent 1405 0 R
+/Annots [ 1433 0 R 1434 0 R ]
+>> endobj
+1433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.004 297.753 397.727 308.601]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.266 124.925 395.989 135.773]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1438 0 obj <<
+/D [1436 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1435 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1443 0 obj <<
+/Length 2925      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s۸~���#Չ� o�d���N�ub�V��d���(���%)�����

�7����t��
���;߹�|�
�ѻ��ӣ�g2
%,	�p4]�␩Q�',�b4���zS㉌���J�6��YPW�-���X���g�{��)M�
|��r��̴�~}o�[A�ϣ@zq4�mzqt:=��H���H�M,V�h�>���a�bęL�у��
)�0Z�����#n5�ՇTq�B*��Q�&���yr|y9�~��|��~{��W
�������W4��������4�Oo`��s�>�3����M|�"����
+� �����:+�~�]5H�RyU�6]ie�6�|��o���'�3O�m^[lJ�`O~ĵ�9�M������(�|;��<���8
MD���ն�7E��e7�z��ǫ�p뱗��_�P3:D�i���]<
+�3
�v�j{7[���i'��*��Sy����9u.��t
�L�Vz�#B^�4�yw4����7N��E$Y	s|��3�
+���I�ͳjV�Z!���rpD_v��*���b�6�%��]���j�ݮr<�~
���W��
+�(9(83:�ٴ��}a��/M*NҴ(|2Pؚ'B�$�u
���B��T[�GdD��/���ݯ6x����ľ��Sw
"�2Kk4
d�'�h��V
+PP��4�z���}�'.P�uh�~���ҕ���˱�0��6�
�9^�
հ*�B�=�6�~�	�Up�F��]Z��y����@�MV��
=�^�Y�P*���u������6
l��2�Ӿ�	"���x
����u�;>�����h��s��P�gp�����EJ�c���X��=�L��F� ��Sf	��yU+ea��ml�J��5�\�3{�
P+vY2|e��3?O`�mgc �]1�ی������p�
�H�u0���t���9��B/�E��`MsF�n��ʁ_,PI�������[	�:ڶ����
+M��D*��g�oK=�>��
�m��E:���i1��5���C�A��P�<��ꊁ�Dy���K���c���0��fe��K�J
 
M�Եq�,��28��@ť~@~��x^�ޛ��D̰Օ���q�>�\
d6*0�Z�� ���@0� ��OTK���?�ء$N�r~y{{:�8>A�]
�{��0^J���<j��
���$0���B����7�����������#�h��ҙ
+CҜ��v5�Q���} �km<0%����H`1DxSr
#�
B�oC��ht_5���A
h��%��^#��� 4deiy���]i��� ]R��[>C�6��J�$`a_�v�YVYP�h�)&��J��œ�S�f�������'A�bύ�m�a���=b�fk��5�g�D�4�u�&�װ��
�
XS�<k~X3�k���@�Јb��qs�7Q8��h�}�L��y�<9�Fy�q0�0
+�����
F���{Ib&[W��QDQ�5
+��I0�
���K�)]�
�~l|&��+�K�q��7�#�
�q�rv=�a�s}��K�p�~
 <�Dl0���U�%������b���3;�5z7ns�}-B
+�B�:��������8���J!s��3�'=I��g$�����D�W�~Xs@8̷c�ͷc�g�A��NZ| v̍��k����*��.>(a��a�H���~�÷
�M���'D�\>�:"�:+	����͊
K��� ��K3��F�Mg�z�v�Zs�ZH�t��O�r�{��1�� ��n��P%�BT���.�m�	��
�P�Kd$qJe$�j��Ӧ�D�
=���EOeJ��� �A`����N�d��� ����nd�Y�~ _�]E^4
+m���U��Ir�]��T�{QuO�.y����LD�+�qԄ��]%�Wѡ	t(�Дm��}����9k�df�:5���@ԛvjn.����o"�rQ(ӚZ��z���t[*
z)�P5-hs�84�@�6�4�]
�>��Qͅ�
r&ZK|�G�Q��
+C�����7��� �����Ք~���
+z짒��c0���#Mb";v$	ƈ�k ��A�Բ����	�"xI�{W�4LL)^�p"u����է����&V3t��
~6��مm���;b�1���i޴�_�n~��������������[��	`�6�]_������}7�>�c�w`L:�v��1^F��x_:�Vk�
+��t�%ewص)V��ʋd	ox���GWQ
p.���.���p_��{�Ii>?��Vȓ�1n	0�:I;�鷓����?{W�ɀ�`�� B���6IBG ��0�ii��/�G����B!�mu����B��*бv��@��oY�0
}B;/\��Y
ȗ\[lh�J
�45�}b]! �i�顷
S�Cb�^͆:�
W�!8�&�w,�g�C8��Dw��әC&p�3�P��ܮlN
���x;����ч=]$w@�
���Fj�oeA�+ѯY��#>:��z��
+Z�������/\�Zni�*=X�Q�"�0r�JH���O���YS���
�5�gXP��weO��R���eBb�Bu
�弡��H��h;_��
���rc� :|��MM�����R�ƲaB�)L1
�y�C^eFS���,)Pu���zeG�
�*����(T�J��l	��vд�Ӧ"L�|ܼp%ȝW�%��F�nH��l
%�7Ok��Hrf�KgP�Fr�C�
���z̧GlnӪҵ]*':	T)�n��������,��|�h�}�'��m�C#�
+9K�.ˡx]��/�Y�t����$�Qt�敍������_�ڏ��p�)��I韐������vL*f�/��"[@�0����d�
�d��%A�՟x������9��M���v5�'>t�sC���E�/n����1[6ߒ����‡�l�\�;R�#P�n@
+��ZN�G��*��
+endstream
+endobj
+1442 0 obj <<
+/Type /Page
+/Contents 1443 0 R
+/Resources 1441 0 R
+/MediaBox [0 0 612 792]
+/Parent 1445 0 R
+/Annots [ 1439 0 R 1440 0 R ]
+>> endobj
+1439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.495 648.787 394.218 659.635]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.214 512.093 406.937 522.941]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1444 0 obj <<
+/D [1442 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1441 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1451 0 obj <<
+/Length 3936      
+/Filter /FlateDecode
+>>
+stream
+x��[[s۸~���S+w,7�y�&Nb7������͔�h�ItHj��_�sp'��v�}�dƄ@888�'dr3!�G�Ώ
=�٤H��e���$�1��H2N'���i��(KE1}~��������tNO����x�s1-7��ӳ
����\T����l����~V��M�jދ��"��/���_=��[Ջ���Mw�����t~���dB-�i��l�X��
�,����$��'�ո�D�"a�ZM���;"f��b��6P.�BL��&Tf�Wᄑ�x7?{sz<KY:}����W�~&)�����m\��������OL��髹m����>��KՄ�Ofi��8f�&Ej����(d:}q�O���%C�'��������7Wgo
�H���G��r������*҇T�>$����3N��Ɍ�$�޳�x&$�����nAz:
��5�_�Y���?�[��ӻ�Z4�e��x���ݫzS����K�WkM��r
	"��
��b��.�T&�̸Ǒ�(Kr��vw
+�HI�{d��ϷU[E&�yB(;0Yj����3KD*���
w��N3���m{C[�Y��Mkx�LW��i�Ќ
�
Nh���P*
���1rX���7�:���;��>r����]�����6l*��aV��Vu��.'{V��m}
�^$��W��#����.��7�(��V
�..HB
�g��	H8�
T�,��L��<W$�b@ñ2�t���|��ߴz��t޵�`
��ׯ�k���S�B�� t�-Z��
\_���Mk�hʹ �h�_�r�L&��ٮ`UN����?����
nl�o�Z�)��7�yk��˶�-f$r�_��7gf��dIQ8C�3!$2M��9�ch
+�M�#��Z���p��7:"I�tD[8[����Zl:���J3,1<���8�m"Ow˝�LB�bg9o��ei�21��r�|��
�H�<���$/�+#tpB�Z����T9��~e	MC�q�R%l(ËMB{�]#+��b��d��4��B�3d���p���>�=1ړN��G�����Qò6�co��ض����1Ht��V���\�ԉ�!��~w}.�|ċ� $�8!��`�	�XŸ|��,u�u
��H���1m�I�Y��
�l&c�B,�2L�����Vݝ6g���1���10�0�tz���1�oۍ������a�L�}��SG{���D�
�x���E�9l"�{���{(;Mu�],������ �9h��C�w�G�
�f[�ՖozIt7�,��� ���)��~���N�+���iն*� �j��ҁ��S�]�c��Y�"��o7A
��n�`#@�����&g�����P�J`.�<�a�@Ѩ���_bF-e	�� s�h�D��S�}J1`DkY�@@�����,)��p���+Wj�r�������^��
+��ղ�K�� Q��y��+זI�}�j:�8��=
���	D �;`8<OA�^?y���iD�dB��I��5��8�G�PB����/�NQ�ɭ�	��M��t�mi�x��\U��J��Z�J�9�n��Ӽ�B���?��!i���ҙM�ؔb7i��D�gH�>�ó�k�;�!:��էm�V.�){�_n\��]��ժ��A�+-Q���u�~��&�*t�-�����d�P�H
��U��A�f�R1��zs��Z��cQ�/<AD1� ��;��M5�:�&������nM%	~��1j������ot4�{Fbc����>����b=��9��2�����t�@
+
�|��B?��� �o�cU0��Ġ!�� #@G #��
d���S�^� zk���
ʢ��P���T�Ng�g[�cҚs=�銉+�T�Rƴ�`%�LCY(q*h��(Ɉ��
3�/-��mH�t�`2�u���Y���
�yo��3H�D@�:�d������X����DL4����"��8��vz)�@X�F���Øf����*+,�K�+}L��]��
�j}>B��(�B��3����y�������Ɯ#a{S���V[r���5k����Vh�o �$�
�H;ٷ
��]�6"I��x�Y;
�+�;���^������&rjl�>\��U8���h�R��o�
�7�c�ij=�OM�C|���(��X�:r�(���We�r��z�tO��}p6ʾ�;�8����[�Ͼ3��ɾ�=�w�=<��	B�$���,���DI;�hg$Չ6��%��ѾDy��1�/��j�W ���(�^�ٷ�E�D�$�]Z�?��A*Yf��|�9��c���D [...]
+Y���'����5��g���iy"�D>
����G�	�p��՚	#2_�9��HX3�T8����e� �)��yR���J˩�
�N�
6�W��N�i�4�`T��4�j�����H���#4�,
�q��F���vr SI\��l⿋M��(r�Pl���L�
���zk�&����{�yv�e�}
ga�,<2K���yDu �� $Q�6 I��@
+�+�ln0��%<��z/^�gC�fG�ĸ
��·'�D	��������YQad[
� b�	�eE 5Wo�^]�~{y�
	&ɻГ�rň(<x��2{-=�������4sU/�5e�
���=�6��
�B|nӡS�[c�b at A�	ˑ�V�OG��w��:�p���l�&Ϛ���}5SS͂�T����	�6������U㹫@
Nݳ{�ߎ�9��4�JxL�S�D�/���a�̽i��@A�p��
R!�Kp�����l�څB��l�/
+�R�s>?{}z�H�t�O�y��W!�!N\=8���tkY�L(� �_�w��M_�{F�c��sw�ݡ�O��€u�0�v
+�EF!(
+)�k�����Y��/ͭ��>e�*����u�q�B`���z�>�
��

m���6b{��`G�Ww]�{������{�5�N�G�Gv�n��Mm�3�,<e�0�cs�G�6d.���veQSf�qxvۺ���m�"溂�x�Dǃqh#��N�A!�<r�5��L�.�C@�u`���~X�X���
�ȘLD6
+)��1�z�-W��^h�[�$t9W����x�oˤ����.��6Z�!P�!}�q��,�p�e�|��Mуn[Ĉ��;�\��
+�
;C-��"��ѥ��A	�au��r��U,)��9���GH,q�<�5qX1�Y�cf�R�T:E���\�<�]���:��_����
/�i�NQ)�������3z��<��=ta�r�t��rH���eZ�f �=
���KI��t��uD@�$��5B�c�+�
$y�q�)�@����aB�g�x�?
0�`c ʔ�@*
I�������ks��O�wc
��!����x�
����>
�r�.t�O��H<@�0̂���|%�oJ{⑇�p�7����AQs�8�
��)rw��"'B�qY�\����
�#Ǹ���j����s�/s*��}��rVH&��C�8��^^�?={�r
94�ė�l�]&b�jx��9��$
�~���A����&�/`P����~,�-o�d�ѓ����kB��B���
+�8�x�b�q� ��ٟ�B�jD(�HZ�o�N���5'�x
+4�([���J��ἹȨ�`�J�0fF
+���t�5wMa�$Pܶ=^oDX���m�x���������"���^��+
}�j�u� &+��@�2]M4́���ah���l��^	yȅ����QB�}�
j��_�n���h��Q3 ���T�h`g4�}�b���b�z��|���2X&��� #�R�0�͒Q�;ȗ�&؇�o��n��尀|�d�O��/ޞm��
S�
+
+oZ��`�flW����U������ˏ�;�<�}X�� �*J龪�C��=���R��g������#��>��O�"��fge�/�
�8	�
+endstream
+endobj
+1450 0 obj <<
+/Type /Page
+/Contents 1451 0 R
+/Resources 1449 0 R
+/MediaBox [0 0 612 792]
+/Parent 1445 0 R
+>> endobj
+1452 0 obj <<
+/D [1450 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1453 0 obj <<
+/D [1450 0 R /XYZ 86.4 108.609 null]
+>> endobj
+1449 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F14 697 0 R /F7 778 0 R /F1 781 0 R /F10 779 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1456 0 obj <<
+/Length 3097      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�HU�`
x�M�e�b;vd:��8�%T@�@����
<ȡ$g���3�AOwO?�n*��΂�˓g˓^�h��4��l��%�гX�"R�l���67B�.T����6ǡ��Z��r�8Ur~�
�}���6N���d+޶��)��]	
2���'����O.�'���T0

F$:���'��
�����Y T�����L�TH���'?�c���La��1�,JC���D�uϳ�v�ͫS�̻�Xr�Zzn견q�}+��^����I5�N��~XҮ�&�E'nO�	���U�1u��t��*��/�OM4��
� �[�a8>?LDF�vwxx,"c���#Z�w�
+��c�i���]W��
+�l��E����l!Q�Z�a(R�
+����>�:�>-�D2�t�$����x�L
�#E�ԫ�H
+��z �R�{���rY�78��w.����y�W�ܝ����Z�V|�����͘v�4و�UM�UQ��񷪷�D5Q$�
�j
[�J%sz�)�q�$Bƽ����_y�l~�9� �gD���?h����*��^��p^�����w%�o@ �3��;t5}�tC��yU7۬�wW at Ak�MѺ�g��7p�}_w
aAS���t���>,u��Ye���'oȩ�2�r�3zM
k�D�%=6n���E��h6�E[Y���5ͳM��w�|���H+z>��?�&���)��quy}({�� L��
��A�$���2˜
/� Jh�[��`p_�%�n("҄�?V�4��
���
+�\Z
��x��V��m7��h6`9b�>l5
��:`�މU~�

f�0�=�
+]`jLS��:��K��bW�]�T�."-1
�9��ehi���}��dM��
nF�?�F�bș����_�u~x�*�� ������I�G�#b����lJ��-g��{yW
-{���ßQ���ƊZ{���q��=r�9?�
o���_��/��
+�]
���� t/�D��	
�\Pq���V��H�؋2�)�ރ�W�zE\
Kr
�<)`�n���8c��/O�YV�7��	��1�O
+B�J@H tIL���]{�4����u�^���3�px�.�%N�2��F"U�Z�9�je�]�i��9:��0�4��
5��{ދ�_�^��>��	E�Q�tQ�
ۀ_ �?���C�B �!��d�"�G״R� ���a�7��(�i��
�� J0{H�DIe9�0\E�)�\7k��b4>-
�t�N��y�	|=�”3ޔU$�!(�q�=~
���m�EwgU1��Z>��*�tIc�
�Jl!�$�K�r����i�ߺ��^6���UV���8�� �cZ
)E
�u_��~}�0ҰɠK/�h�?a�G���Y����fi���ƛ����`� �-���`ȭv�G�P�)� ʏ��i
H��
��01������a�����^�
�� ��ތ^y�B����Xp.C����,� 
��1�ڇsu�&��6��Cn�Pf�Ɵ?x�b t��	�^��=	y�y�G`n���� ��x�L �1i��b�`�_?��.�I��/d�fϕB�S=���h{�ֽ�
#��%��=cHʠCE��q? _O� ̦*��$"��rj[�xg�I�e�Ӏ�ygÓ*�� Ra4��Ňk
+.
z��c)&�`KG�K�	�C��T�#M!ۤ)�E��]%��
�a��ꠑMX�3�\5\��MǕn�
��)V�v�g0<m��G�(���^Y2F�4u�� wг�ղ���#�ƀ� �� ڻ���%4���z]a����+���(6���bB����D��i�/��IRT���
+x�[I0��[��$��I�8w����0p���=��
�S��,8��>W"�Z�m
�^�4Z��[(�<[%{C(��:���k�3�A�: q*���*�/�~�ZZ\0���
�Ηo_��z�V�
q�+���-.�qM� ׸�j��qT���S��<ä�[�q��G.hOAN��،���ۋCI4�C/��{��
+ƔH��0�G7n7`�ۖk�DA��r%�`����–�֛䁷!�<Y�3�y��h�&��YUM�m����|>ڨm�d\6���Z6Y��w��I/U��h;�Cn�PK9�K����x8�+��VC0q�_
3�矚�sQ���%���'�}�A�âA�D��d%�GQ<��`��S	Ub�𶯠�-�
)?H�w�^1eK����x�T�������I��klc�
ب��JhZ����?4Ba�MH�f/�f����ډ�G��^|��8η(!
���WٚG�a7�NUB]�x^o&�zz~�sӀ@<�DR ̉rV�R��[8��/��V�6�؍l
C�'PJ��
c8quk�j~
���|���|��9�&��
X�����۾�5MP~�c��:�e]��\V���6�%ʴ�, at X�Q���Ӡ.¡n
T�B���o5�L��-sR�3y����y_��F����"2�%��8 A���K8�ZǣP�����
T�P��-<”� ��2�S;���ߝ_��ӎb�M(��	���
+�US��pt�h:�5��u��&��jj�o�[���Ih3��z�m��S�z�����K�o�����4k�U�`�}B8�k�7��y�X�2����Ɓ'�4�%������^��fha��6��]_.}w����������˿�:-��ǡ��!v�19|����kܢ�
��>�=^��	�H4V�ZkN��9
���ns#9�I�"��\
��a.�]P�����&�ǖ#��C]��t����y at W(���.���D04T����_���?T
�n9�[c���z O
+��'�c ��|
.�IEh���7�[�
���EQ���M.�9���[�=��
6̓N����#N���==\��x�
����(H]��?tqX&�f�œ�]
|�\����U��컹vբ�Em�n�D������=��đ��Cg�6�-��u �4���8��C^�|����;�d�G�"
�O�?��7��;���e�
8pޡ�w�!y����ҝ-�g�J�vs�JM=����O��=u�
7O��^.�'�nS;H
+endstream
+endobj
+1455 0 obj <<
+/Type /Page
+/Contents 1456 0 R
+/Resources 1454 0 R
+/MediaBox [0 0 612 792]
+/Parent 1445 0 R
+/Annots [ 1446 0 R 1447 0 R 1448 0 R ]
+>> endobj
+1446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.683 627.913 453.155 639.868]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+1447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [479.598 627.913 496.396 639.868]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.2) >>
+>> endobj
+1448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.156 615.958 469.879 627.913]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1457 0 obj <<
+/D [1455 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1458 0 obj <<
+/D [1455 0 R /XYZ 86.4 613.504 null]
+>> endobj
+1459 0 obj <<
+/D [1455 0 R /XYZ 86.4 471.429 null]
+>> endobj
+1454 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F11 694 0 R /F14 697 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1467 0 obj <<
+/Length 3892      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[w�6~��У�� �d��7��nc�U���i��H��S�tI*���w��(ں�X	a��\8���
�p���컫@�b+�F��Q���<&*`��r��8���K���>~�	�޽����9�9�"1�g���3|\%��|��G79|��oV���
��
s�罛��j<�^ޚ_]>=��żJ�<�}���dv����95%��-�g��NGKx�㈒ �F���H1�p�}<���ew?���X
�(�#	�eh
1;]�_V�~�%ao�/�㟒��	�$xX&U�f��wW�m`��:�z��s�Nj��7_&f|[� "���	�1_!i����q�JF�U�1!��l
+�`S
�����v�\���Q�����#<�PEb*�FW�>}�̮�o�U!�a�:LǶ��� ���
+���V(H3���D2B�s`�H,��c�LQ�K�\�(.���=�#P�R��$Pҗz�lvd7{[� f�

���8$`�S�}r?߬*���RV6ɶ
"��� =����(���
8���Ǻ�$T`\�	�,ps��
,(Nh$�@��A�	����2�$
w�%�n�~ �-�-�s�e�:��k����l���C�z�GK�$/�@,��y��54[
+ʆ��������x��r9_���S#vo�z���1:l�
�g��ڄ���
)�8
+m"&2��ۏ���w�j}I���B.�	zX9���3��Ȝ�*���:�/�	�`�G�
��UD���ne��֑8!Ȉ�\0"bK~� �
o��m+HJ����
�2�Np�G��
0�C���C�a���1��Rܓ9�N�.�?
`���z�v�@��Z}�
+UQC5)��F[URZz?OW�")Pu��5�Z����[b�(';�A�)��F*z�k
���M�C�w�j=Lш�QG�6�0F�P`�g�4K�6�H�
w%I5��׷�T[�` T{����!
TG�d[ p�K!�!P��A�G*q
QA�IC�
}ww�i��\��
��r_t��\�U�BCେ$[$��(��)����2{�F�ƞ��dě��߷�{
i�T8T��Q�g���ϗ���:p�݈-��ؗ��7|:/�4{h�Hz³ �l'8ct0:˶K���[c��#
+�����$��:N�W��v���q��ߜ��7g��-��)X�<���2@�=�g���αqh�Bu�9�'�����:l�>7��x��B�V�sP��
���J��K5�W�Kq�_�Z�J+$�g3~��SU.�*Y`
0�����1��b{��X8<G��m��C��@��k������+���	��,U�(��)�W@��V@%���8��%�#��$P	�
��+
+�'�꟞нꟇ)ы���?�V�i̎o
�#�	�6��3"�ɹ��/�(H������u
�R� 5 ���,�����,�RGXh�|���
 �xej$��I�*]�OX�oo�=��@n;�S��\�h(�r����
+O����ps�Z��yHB��v���p*%�l�Wڿ$M�ҢkS�)
+yo�ښ�����
&E	��$`��b�0�o�&
����'tL��SDTw��f��	uX��=�� q�����>���Xr�{��VeN�E$�r}gw?��F�$��I�]�L�x�b���@Pt��I�@`d����M���/;.��i ��/�Fl{1�l��F�Ȇ����{�)c�$o\D��k*���8 >
��Pa[�� �[�_m�$RqG�y�{�ib��/ͫ�Ǥ�L�+�!V8#�©���F��+���^��\9��׹�
+����A^��O|���2�u/uSQNXX/�&Y�ųI����L[�i�6�Q:
n��r[�.����K����x����E���۾f��ϝ�/@����]1�
�Z����޽T1xcU���+����l��1�'��cep�%���
hp~!�Du����Q��	��OED�F.`�b��G	�����b<��
[/�P��*�����r�-�Me��}��'�n]�3�
}Y���}�1��Qd̂�3,�_�`�%i�ܔIq��ӽ|=
z�T��Ѓ��[��?���
+TT����s�u݄w��<V-�����/��waO�q�jj`���(à>BC��
�Z�+˔87��Eb�<��R�-��hF �>���C]���#���}̈́�$L�h&�X�_�>K�4� �Lw#�jz4hz�ѷ�<R���3�@]OR���Sd��:��`��Ҿ�=&��{�೅y�k���|�Zz
-�q7
b[^�s�A4�1�T� 6���C�
+z���
�?M���ܾ�t��]N��������v���N�[�"@/�Q��c�Zz|Vrb5�A��|
�ߜ����|���
�SL�
+l���i�ԍ�����t�6vP��ԢK�Ԇ�v�R���D����pBb�X�̸������g�_a���b���Ԏ�� �
����N�Dʮ����{0=|���*�O�]'�y]=ם�<6�.�I�W�4�|��@
��g~�K�(�:㔆�cw�𖯗���
J���.�WC1��6 �T��r��r����������U��6�
+�+H$!����A���
/b��(�R䙹]n������
����Y�0ǗJ�K"k*��
+��3.�o�,r/�� m��bS�yLQ�1��.F*�BG���$�I0��o�o��&����� �p��v�γ,i��2-�V� �;�
�� P(�S�'T�-ץ���յ/$�yg�ʑ\�	Ӭ'�}�#f�
RW��O�f
������J��ȱt�
1���8~M� )���Q�1Q��k,jj��Y^��&`�/H�_���i|��^N� O��Ć��P�a�bKq�u���p��4O�:��E1�[T�rÆF��3뇨�[o�h���
+��yJ,�u�m�:�\%��^r�ļ�� -��F��z6��n-�#7���[Z�k�yĜ�xK!! ���F�����&\������i��)MR�<��Q��
�m�T�ʠ&�gc;MK�
W��Z����2@��1M@�cx8�r�����a�s�
�>�}�V�X����lX�ѿH��83MzfDi�tq�m�s��Ai�H�榬���ij�����y�vZVbr�х�H�;����
�J
Q��X���
8��F�X-�!��EL�zގ�+[H��
+�I����2�j�vZaj�
��`��:/��?\��u��@�|���p���.߸/s�����	���b�hEI��V��	aMx}�������wX8���2���mP��ڦ��<n�W�`m��,]ؚo\S�ߖ���hR��2�
�6="���f��ʁB�?l�$���2� ˢӕ��G��U�DF��a���r2$hvu���p�Y�NU�&-5I<�.zT��ͮ4b|t�B7ݍ�D����� d�,d�m��
��'
A��6���g�1Ia�m �jZ�
0t�ö��
S082�g
+VwԢ6��B|�ƨ��R��ud�V���a�li�oL\�x���ӛ��>!loԱO��r����_�����B_��~��&�������}4w��-�+�jRg�x�߁���KP
�ڽx�F��_�������޻�i;Z2�7G��יד?1
�|ʵ����1�bZ���ߚ��E����"��|-<M)'_%�C�G{��D���N~�a�:Q��2?�	mN�-DL}����ZC�^K����1���� �]>�H����
s��*��u�h���k}
pr�?��1?޳�ǹ<
o�<�� C��C� O��g���ȍ ���M��7+L�T���q����
+�i��	�>�ZM?v�ʖ�W
z����Ofg�r���
+endstream
+endobj
+1466 0 obj <<
+/Type /Page
+/Contents 1467 0 R
+/Resources 1465 0 R
+/MediaBox [0 0 612 792]
+/Parent 1445 0 R
+/Annots [ 1460 0 R 1461 0 R 1462 0 R 1463 0 R 1464 0 R ]
+>> endobj
+1460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.962 263.905 436.685 275.86]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.1) >>
+>> endobj
+1461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.16 180.773 191.882 191.621]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.257 156.862 376.728 167.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+1463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.856 156.862 424.328 167.71]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+1464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.483 73.562 341.206 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1468 0 obj <<
+/D [1466 0 R /XYZ 86.4 726.045 null]
+>> endobj
+624 0 obj <<
+/D [1466 0 R /XYZ 241.218 696.212 null]
+>> endobj
+1469 0 obj <<
+/D [1466 0 R /XYZ 86.4 452.254 null]
+>> endobj
+262 0 obj <<
+/D [1466 0 R /XYZ 86.4 377.938 null]
+>> endobj
+1465 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F11 694 0 R /F7 778 0 R /F10 779 0 R /F14 697 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1472 0 obj <<
+/Length 2629      
+/Filter /FlateDecode
+>>
+stream
+xڭ�Kw9���,a�ޏ��8&��Cҋ�^�6Is����[�ʑ�Z��6vb���'��UE�t��⟳�_�B
q������j"�;����Q�7Š�x$���k����U�39�<�|�
�\?>��_�����6ϻ�97�
�1�xq5�����uHE�ԃ�������{���%�����=
�p�ÿV����
�p�}�$����I�Z
B�n5Ah�?W
Rh#��荔r�v�4zÆw���
��5G at C��G��Z4-�e��^c�G5�?���û��
��9���02a�����+��nk�=�n�#n�?��Q�(�^2�Y>�|�
��$\��7ȉ
�u�����k|�7�r8�
�0C�������n�}����4�����m;��o��8QL
�"
(LI�8h�	�,5V�ǔy-�I`��
88���?��da��`h	A�]/�/���`�IW���9̧�{ME?~�����DiѨ�Nv�z?���p�†�8u/��y}��_G1Je5� F\���̱�\:~^giI$�9��9��쫝�0_����i���,0�^��x�6s'��8����
-K�.��T��E����_e�h1Ⱌk�}ļ������P5�~B��˯0<�-v�m���>��	��!
SN��Ɣ���V�ׅQa!|}H���m}��
]� �ls%�Ut�w���	_eȸ�`u�V���t��U��u������a�[<>%teG��Ґ�QE����lV&l�q[r2�JȪ��f�������UJWv
�.8�`uf����A��ʐ�`��9����j [...]
j�,�F�������^���>�:���3�hQe�Ic���n9K�2qu!t�.Q�U�zu!4P���j���G��s)u�X�3�|9\$�qZB
��-�����
8���m���p�7�o���Mnv��뷦��|��lQ�gB�SH�ؑ*d�y`�o�^'��*d?cB��׷���v�C@�5�vU�IJ��6,�1U�ĥ����oRZ
���s�e��Hk
+&�Hk��i7��S��ir��DPԗh�z`re�	��&aWBK$�q|�����P?FBj7F�Ra��O
���!�T)�μf�h����VX!�8'�N�W�Y]�덅���I���A ҚJ�֙�T�Uw�
�B$�n���T�Y������]���0_��Yi��N1��lR at 9�!�K���7�|G2NM,������o�Rg��#����Ta�����7
�h�A{��*�v�D`�4����r��k��aXk��݁�J8
���ڛpV!{k!8�Zv
�5(Q��U�)
a������f�4�q6r�k�3�sVi�&!�e��'��! ����D��-�5/�e�����&��'����B싲����(pk"��v����s���cp.��Ѳ�c��M3� �Pśf��bM6ĥ7�N�7� ���
���~�հ
���3���q�UYUbϢZ��~��˯���� ��A����?'�!R���2&ZF�dQX��u����IUa~�2���L���,
\� c��u�P��>.я!`E��HJ���0�h��=Ý�*I��i���B&Z`D�޲�
+��5fM3LN�0�@�iC8�RapC�q��JX�ĵ��޺�
+�k
�yڲ�@�)�JUg��re��TaX�D���`�r�
+S#����
�JS�8	�?�I�2L� �ՙ�RCf��ӘB&ZFОʰ
+�;
�?��T懁h�JL�٬�9���D����o1'g_�jP���I��?��@�5���*�ap���Z�~�B&Z2D�ɧD�P�ꥅ�Hڧ��Zv
���fU��a�u3-q'nw2'���k@���y����z�r�DZ����2ј��B���w�2Qitr�xb�
+��A#k��u��
+�a Ҭ ��-��(���<q7n��E����:���
���

�7&xև�G�8����cj\�k����+7����a��
�m��ϷɷU��f`g&T���*��DJy��*jp��UDܼ�U����"����*�c�5ku�	
ROE�<��,����
�D�z ����<U�~L��f�_�v��Շ�r�<�О
b
�N%��&�qM�P�o](D�`E��)e5�^Y�
�걕
b�Q�\�'
����W.��! �O>|U�eЃg�zte�p��Y�E��,��{/KbG����
+����Po+�
�-{��1
۲p�U斣��Il#����� 8���&^�Pں
+����f5������n���3;�cY��:/�1�&{߳P<��	\�C�H�'o_�u~3���
�E[wl7���Ϳ(��b'+;T��YH�����f�P
+endstream
+endobj
+1471 0 obj <<
+/Type /Page
+/Contents 1472 0 R
+/Resources 1470 0 R
+/MediaBox [0 0 612 792]
+/Parent 1445 0 R
+>> endobj
+1473 0 obj <<
+/D [1471 0 R /XYZ 86.4 726.045 null]
+>> endobj
+625 0 obj <<
+/D [1471 0 R /XYZ 186.742 675.021 null]
+>> endobj
+1470 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1477 0 obj <<
+/Length 3719      
+/Filter /FlateDecode
+>>
+stream
+xڵZ�s�6~�_�G��B��$۹�IS9�N�)Jn:mh��9�DIœ����H��l'���$@������-M�&�������o����,5�LV�Ib���"eF��j3�e��ٜ
����L����{�4N3>���e����rz}��&���:���J���^>��o9��-+����,g������ѿ^=<�u�塞����b������	�bj�(3Y�/~�-�l���I�d�L
�{���)p������E��Z�3��Ĥ��ؐ�Ȇ��|Z�6Yq���
��4��b�5���w�H��l纫��jk�����
���k�q���z{�Q3��
Д��7W*U����`��z����ۏ
z3|Qq0���]��������
���t0=%�Ya��\�E:��9g�vVA���A%�4���,J�/�~���l��F��,V����7иX.���HG���Kz�^,����6o�X�J7_�E
�(3]���c�ۧ�jyj�D1#o
���Wxʸj-�UU����Qni��	����LN@�fu�W��
��n��n�׉3��L�����
+�Ŋ�cq�|D�n_��
�:�v��Ya�&^;�wU�mP{��''!��Z���@��|��*k#���x���c�W
':qZ�f�*o���׈��nL�X��{-�_F��X��ȫ�>Yl��[��VL
+!mC=���S�
̥��$%*X�:RM�?vڡ=��}�/���d�e$�L&\A2����]�К����uvg�&7��[��(������͊�A@�?�t�(0�
�W
6n���r��N�sk��IV���7�v&�t���K�Q�	Nࠦ�>���ɨ��![c��3���14f>������{z�����0䩜<MX�[w���t
+�f FT�aDJ� 3�׭�`h�[�!��ME�>4�m������#�4�GS;���bT߮qh��'k�M~*�,���.w�
�'�6�]�QDj�ޢxz���mN��ٳ�]N�
1ꬱs0��9k٨�8=@hF�R*�O\@�i�Ef��벪�#Ĝ2pԾQ�R�_`���R&��/_Pxm�ƥ[�~��ۥ� A
+�
�Qn488F<�O/��
r������թ�&b�V�+�&yGa�6L�6ݽ��Y�es}(F�ƀߥ�%�S��y�!<�4������+�}�7��<�L"�I���4d�
�������_=�WU��h~Q���c�we�@��c�Н�6oٻb�_�,I
��b��8�
+������
J�a�h�O���V
(W�
+P�ն��|]l?{��7E��EO����`��ʺ���U�ډ+a�]?���l��£!zؗ��J C6���� �e��)�}x�fp�
� �XCP]��Ea�Ň.��=���e�昹�M���
�4Ŧ��-L���U�Z؂:���՛��<�ݷ��<�.��Tn]�H����9��A�|���;/��ɧ�n�n�.��H"���.�&��F������@�$E��#kq�J�)`iXV\� Κר
�ݲ��$
��s��ed|��:FA�{�An�2#�e.�dF��I�9Yq�I0����*ܵ
�>u��]�&�c�Knq�[��H?
�M�=�υ�X�#�$�,����
 �o������>T���N%�������~����#A��� ��[��+y�5
B
��	�lW���� �[~�n[aGy+O4�t�KFD�[٦� ���#3b*VO�������ru��+��Ez`�����ȇ���H�డ���ނa+Ԩ��8�B�\
>j%8���R���
��w2y���$R��3,��
ʓ��y*
MX���.�G�Q��\�A��
�mA��4�djw�ݳ���F�L��Tا�
�Au�v�.�N��C�4�e��q��93]?��p�:h��h�'*��"x̢�]��>���
aF�p5�q`ɞ�Y$�y��/��=�»x�E#?�b�q2+v��	�a�*�iD
*�-j�πr0?|
���?]]⾬]O�����4�O�>�[t<l.9= �.�u� �6��X~�V�A6�>��
��˂7L��Q���_�|����*m�Z������!�߯��v���l��~��i������g
�o��x؀_�-ö�¥S�QnvƧ:w7�K̀�L�zތ� �yzZ���qS��0�.?�=�Ɔg#/�
�6
�x?�a|#�<�y��!e�8�<|9 � 
�H%X��@�T���H�d��'�;8#��,��[�w��&����{�0q���0w�v]�r�'�z���
#��Ǧ�E ����mH
c�Lu�e�w
�	�=�	�c��Ŭ�DŽT)��#&�!lG����
XZ�2�	�Z�ŵ7�
+x�p�m�q˼����6�<mO����Αi��_��lW�O$����i�	��VNw��ɜ�ȥ6�9uSx��:�{#վ
�>e�H3)��!�kψFk
����s@\Aҍe0i8����n�b�y��u�^:f9��f�z�̳���]H>
�T���ED�o=\��n8���cU�9������{oK�\�^�#��rj�
5m�D�gi�bZ���0`[���=�!��u��mu �C�k߸�kF���c�T �yg�
o}}v���LCp5�*���	l?����9�PRu�Ŏ)p?)�įc�Vx����n���	��/���ՋVȏ���?G���-�st4&@a�Cǂ���:���L��
�
��rOPͨ�� �s�r{B��=�ɺ�"r�F4�7�k�pz���`"��c���Bxѯ�'�݈�nU��8�a�n�pX��z:�Dd�,���e�
+��
����ԍϲڔ���V2b
��Պ_�;)x�����QE
��Q�`�[���Xڒ���t���eBG��,�-��c?A#�
�㾻�š0'����m�ۥL�S)�3 @�� �xo�٨	���D?��3��1[
(K��\DĦ��c���s�b���x|&OR���e��
�x0\S
J��m{$Ħ�8j7��֓k���s$��B�x�­E
��4%Vx��
�3�W$>�B%:��b|�)p�����\!D��(��aQє��T -�}��o�b���wcz�3�KxQ�w���D�r�H]b.ADIv�"�\qƢ�}�g	x�
ì
���/���〠`c�wN�)�O��4�d at X��
�)�'2�6r�
�Hl�s��80�Y/�
�d� @��s`����9��Kn�D.���[4�cӂ
;��i��A\
Iʋ
+|(�؜rЉ�?=�s�z,M1�GL~2���2m!^v�{(�
j^��쬊>3�O!2-TɊ����Im7	Fyej�̮
㙈bJ�`0�?u�+�
+�%���E.
m���!��X�v��&"���
��Vu�$؁����&=�%�1N��+Uu%�g��%�
p��M�
�7�x3v,N3����k�+��.�ҙP�n����i�"����8�
�
^�|X�rq&��rb	�$�k{���98�%�R��y?zH��{����`�%/:�l�;Gт���׸�T�m�㚈��m��S
�0b���*:2
�
2		ˇ�#5>T��.��ç"s�'�
'�\p���TH<��������/t��ÀѬ1��q���GΌ1O;g���H���oX��
+�/R��˳[<"�/�Ga��X��Oz��j
��;�� 9�o����g�JB���?٢��:8����8�ax��e ��-�!��
��p����3� 
+endstream
+endobj
+1476 0 obj <<
+/Type /Page
+/Contents 1477 0 R
+/Resources 1475 0 R
+/MediaBox [0 0 612 792]
+/Parent 1445 0 R
+>> endobj
+1478 0 obj <<
+/D [1476 0 R /XYZ 86.4 726.045 null]
+>> endobj
+266 0 obj <<
+/D [1476 0 R /XYZ 86.4 595.241 null]
+>> endobj
+1475 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F38 517 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R /F10 779 0 R /F57 1479 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1486 0 obj <<
+/Length 2944      
+/Filter /FlateDecode
+>>
+stream
+xڵZKs�8��W�(UE� _�ڃ�S�:�c+��d�DK�P����x~�v��9N&sH� �ϯ0-G|���dv�۹
F1�/�
FQ��(�bH1�-F��}N�2��OU�Lq���Mի���O?����l��uZ>$s��.���D�?�
_�g2��3�	��c9�cvyt6;��H q|$,1>�T0���~�����rę��ѓ^�
)3F������1��bR^�]
& Ý�߰��
�{0 ��e
[���8����K�=��o�Md��<�H����`�gD<�s��U��Y"[z����������nR�Pڅ@
����/���~��`~���dV����m2��N|L��I�>]" ҅=�t�
!P�
�ͼΊME[>�2}��
>�㤲�us����R2da4
�_�
(��!���"p����{�G�l�ž1��̀Z_ ����q�Ԫ8 Q�?�Uf���7��D�C��E�
i�Z�#R����SV�輆�*-�$w��9
��[m
�y]������<<���/��d���崫��T�g��$lE<t�q�3/jD�/�d�hY�ꒁb
+l���Yk��}�I����5��6��*�
�ږe �o�K��f��1�<��`0���J��䬚c�iM�
+ʥ���>����H��	��
L��&�@�m��]YX؆��-��<ҋ
|dG�F��B�H�'�<ۤ	�-ek��z%�`���荕�;ӇǠ��i��D�A�t��yr��5]�u\�OW��"Z�
+��`���XVa0/�2��ZG����a0W*�5�)�!��QIY��b���L�
D	"�A�{&�>���

�2}���Д��#�h�p�꒮G��s�j�3�ɣ�+'fV���m�̗�����R7�/���?$���9��X��LQ F�L��g��p�`V�L�b�g0}f_�~��Ek(�:.v�vWӸ1xr H�"&ED
+�G�ǔ����1s��i��ht(
qŸ�0�8?����k@�
+m4���7�:5���
´sc�̳tA�hk��C0x��-y�]N
+ I`tRQߥ�y���|�9L�#�!��I˕q(�&�"�^�
+���Im2
8� ���	�U�,4��K\
���
<�[�B�fnl�,؅�=��CWB�pS��"'�~B�fQ.���v�uR>�;͝�����$��wv�Nc������t[�eIm*�;�f� �J6K�*$��P�?u�Se�'�T�e���.�y�ݷ s�� b��F(��R
��e��B��d
+6�G��H�h
ve`I�qg�!]�GM]��,L����6��rc��ySU�0�F4x��3��9%>��X�zXJgh�!�'y?F�8Ls'�
�8���&g�P��}��b���jf �H����L7e���H�W�;�Iܯ"�.���N`�e8ĕ�g��F���	adB�Q�����"`�4`p��U��Gz ��1�
H��^�G ��
�
��6�+����%�z�&߅#�BL�?
���
e��,�d����B��ws���w�o
�	�۪!�+炒2�mtr���m�cC���n� ������H߃�p��$i6l���$��[��,x�;)���}���&���6Ɗ>��̫_�:��W�l��X?
������C�( a�uT�J��m��WWP�z~�vc�x}��
M��dWfpqv�˺=��:s�����#����uJYle��;�i���%�C����"
���yA�$�z9_
�]��{�'�i���J]'B��M���
�a�ڜ�P�5�;fA[Q����.V.
ٶǣ
�1��ۆ��U�?Lm�&�]��)[�+]���8m]�4Z'u�}��u�����LkȞR�V��%��	����m�9-jO��^6/��m\��Q �k�!�
:U�
Keb�iS| 
+�`Wa^b�f��D(�ʘJ��3N�@�i�Q����#�r����!�`�o��
*5Dd/X`�)�Km��J���C}�;
+֮d톒�C�뜿N�d���1
�y��d��4�CI�|�+�tAX��(����y!�"�� ���LN�8$n6.Wm��r�e�{�_����r?_:v� a�z�'l�O�*�1�v��N�t�� ��ܫU��ın���@�4ŧ3�n�@������;ǁ!�a?�r���I��i%�6A#�k�
�{��������lvy|�A����ݏ�
Ӌ�
��~�X��	l�pO1�5���ԙw�F@��wQ�3J�8ԗ�6S�����Y
�1��O�U����)���y��
V�lQ���C�PR仿Sy�{���R�
�Px�6���)>lWˑmO�WN<�0�oSw:w���t	A���
.�4e�ڀ�6�}-�)��6@~?z
�Au8��y�Z`�g�@&+��x<�M@���~د`9G�+����Aa/ ĈA���l��SX|b�n��1j�T�	kYRۖ��`�Mp�5��P��?�������4ߓ
j����
gD���������������������mz��^�SM�����=
�����f�E`��
�}��q����#���q^����lS�B�|P��mV��C���^�W�ޱ0鱈:��޺�\o'���ѓ�M��N�My��3�<�,њq�&�e���3�+C��˯�+=U�d���7ѭ/I!;�u��M�ȡ��u�R�
g�'�"�i�I�,��}���f��k�ejԩ
Ĕ�(� <�UYʿ�6⑞ ���0�u3�qc\��A�
�x�ic��

��{f2ysrSQ�n>����;�}����
[���FC����e�ٴ�tԩ]�U0P���'�k
����bp�� �UMs�U����<��ӵ�Rd�'��^�q\�e����?wE�����m��L�T�u.|�W�V�	�g���y�
�
+endstream
+endobj
+1485 0 obj <<
+/Type /Page
+/Contents 1486 0 R
+/Resources 1484 0 R
+/MediaBox [0 0 612 792]
+/Parent 1495 0 R
+/Annots [ 1474 0 R 1480 0 R 1481 0 R 1482 0 R 1483 0 R ]
+>> endobj
+1474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.559 641.957 378.03 653.913]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.1) >>
+>> endobj
+1480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.445 513.544 200.168 524.392]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+1481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.383 203.525 216.357 215.48]
+/Subtype /Link
+/A << /S /GoTo /D (Item.49) >>
+>> endobj
+1482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.736 203.525 248.459 215.48]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+1483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.378 145.807 506.101 156.655]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1487 0 obj <<
+/D [1485 0 R /XYZ 86.4 726.045 null]
+>> endobj
+270 0 obj <<
+/D [1485 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1488 0 obj <<
+/D [1485 0 R /XYZ 86.4 510.829 null]
+>> endobj
+1489 0 obj <<
+/D [1485 0 R /XYZ 86.4 490.161 null]
+>> endobj
+1490 0 obj <<
+/D [1485 0 R /XYZ 86.4 471.431 null]
+>> endobj
+1491 0 obj <<
+/D [1485 0 R /XYZ 86.4 448.826 null]
+>> endobj
+1492 0 obj <<
+/D [1485 0 R /XYZ 86.4 428.159 null]
+>> endobj
+1493 0 obj <<
+/D [1485 0 R /XYZ 86.4 200.79 null]
+>> endobj
+1494 0 obj <<
+/D [1485 0 R /XYZ 86.4 182.613 null]
+>> endobj
+1484 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F48 619 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1501 0 obj <<
+/Length 3210      
+/Filter /FlateDecode
+>>
+stream
+xڭ�r�8��_�G�*��}K
;嬝�VR�5;�DK�E-I��|�v�^�'�- ݍ���d=�'���������$aI(���~�LM"��P��|5��K�t�E��r*�w��|
��Ŕ{��3+/���v��d�}��h馄_�`�a��e����h��~��&�7�}���z��o�e��实�5v1?����	�h,V�dY����?Y�����dO
��b�d�������g�!����O8�1���ˣ�菙>�}��W�'���wcnrp"xOC�Ɋ��N4��t�%���C�X��Y"#�_?��d��^aaJ�
QD���6ي��a��[p��|���X���� �
{��GDr�QS�Y��:l
*yM��4X\Z$ �CS@������|�cT�

)"gO�<�zy{q��'d!v�p�$�	WL�P඙L"o�^G@�At�Kp���N�HBx�=�63��A�߼yK��H�qoI�zק[�p��X��s�%��h|�������;�a��^}X�
+�s7��
^J��t���=
B���I �!
A
+�bv~��Y�T��a�$���=nr}�������ӪiO�3O�f�d�G����*s2�s�fl	�����$�$є�W�
�`��z����	
�h�͊[�b�m��)�%`;�ƺ�> �YE��f3� X��m]���E�^�
�e&�Ȉ*��I��L��);*��UkG��
������O% �>x?
���X�	VQ�f�� ݭ�5A�yd.���,�Q�|Gf���
+ݗG,�Iw'�g��q%x��B�eY�V9��ׂ�6'�6י=T
\0���o���5�у۱�WLuFA10b/A����$!8JwdW�8������.�`
h-���E1�p��m��R�JZEM� �V�*��E�K+L�V�Y5C_�.��
+���|G/4���h��V
�$��j�Ҳ���6�
W�[�,.�j��f��r�P�4N<C� PE�ZΌe��\��xE
O��x�ںut�@�c��Q�0�<{
	�S`c
��x`=��_pmW��zv�z`qkB�㱇B��,�������� �I�Zuv�V ��hj��ש��p���?^����Mq9�G� ���m�?~�;�U&�9��aH�Im] W�Q��-�wyh��ƈ�5
d` 
��F��~�31Ɗ�4>������Fw���|=���Jw��H����͐ن�
W竌�8��[�=�`|��3ܖq�ܫ�}D լ>`��c�ޑu��,t�6�
��rdh��M�iC�plgcc��n�zؽ�qf�����X䌢Kc��}��}N\�ٚ�A4
[[.�
m8i��0h�
�@L��'u��>��t��]�|�d��ϔ�vE[c!��‰���8n�
]�о�,A�,,�#����=�@�����"L ��p
L��a;���
��T�
0�cMA�)�K�gE�~2NP���%��%p���q��8:��3�^�Y��z��IG���M �om�؁������AU�{���0�J8�t@<�G���Hm��q��(���➛9�L�>a�H�	p� ��.59F�Q�
+BZAh�D�����]
���πФ

�JX �
��H��-^<�����$a�t�"��0��oen��z[.����8������\��Θ
?f2�< ��77�'�
i2O��1��a<�\	�}E-���6�%��


l+���ڠ��������o�@W{~��?
�o!ህ��o�"�O���n��?����>�����
1��-/
�j�<P1��1K�ͼ�HP��B`D5@���H�C̒�n��]mC���ű�;��4&�¬]	��K��$ z��(��(0��*&���Էle�ɍ@r�P�� ���J��)V�o�~ˋ��J��^G�eդ�|
�4<|�}�:�"��a�PȎ�r at b�Mw�)$��\Wi� 5{�M:�����<2��d'�G�Z�$�����zy��7R�;L�DI<����!cX�
��6=
�
��^���2�\�&F׳U�v��t� Q;��V�^Lř�����esЙ1�tb�=ط�
 �TTK@���Q|���]V�6m��56kP�v�M)¡����6YJ$��m���@`*�>��9��gr+1�m`�˅�f��U�H�o	54�>E��`�FW`�08��`�B��pQb���5پ����
TX�����5��X����Bw�:�<.�E�7Q/�|��>]ű<'
�&�/	�	��8Q�@c2a
V�&3@�;�m-���_�Oz�ul�ٺJ,m]��
`1[�(��橻�:3g��fQb,��9���8��,#��"�a�ρ�p���xŠ{����<��;�!�8@�b�*۬0�A~�C�.k�^��#��T���q��׶�f�:-�'���yU7�X�X���2�G��c���
2`0�T�Y,�"S��#f��u�
 
�����]3R�"|]O�vb��r�&o��G}�8�ם�>���}�G�.�v�!P��ޜ��1 ­r �a
S&�(���4���B2Lv<4��Ln���T�;���
+����I̓h`��Y��A5}د4������
~�`a
�����q
[.��+�0�������GX�� )���W�t���g;��_�93x�����?������c���
��{1���|
�^
+]���I�+�=��Lt����sK�Lu
�ʡf�	�����s ?�7���C�-�]�
WP�q�a�-8�
��&73G����ʉo�Y��2�Qw��;�G}�! H�x[%�[s\��9�b�J�fi$

l�[ѳv�Bj�`;a�[ۤ���v<�fSH%��.����
a ;8pY�
�w8�y��1�x�D�\�پh�����3Q1���P�
@��B#|�<�[
���C��IA�Qlk�\�=�-��P�iEE� R�Ѵi��Tu0�#���$��
�f�O_hE�dϲ��u��&�̇Ez����{���"f�0c�w��W�L(�:�%�L(h3!x�x;Q+��"G�XWY��W1�	���Ft����
w���|q|��hO�d�ӞB�
��3���(
����#}Iڌ��T4u,
+�	*"{L$�E
�H�*�f�u6#�<��*k ����Ԁ�"����
|�u��z��r8��[{_
+endstream
+endobj
+1500 0 obj <<
+/Type /Page
+/Contents 1501 0 R
+/Resources 1499 0 R
+/MediaBox [0 0 612 792]
+/Parent 1495 0 R
+/Annots [ 1496 0 R 1497 0 R 1498 0 R ]
+>> endobj
+1496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.585 582.846 375.056 594.801]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.2) >>
+>> endobj
+1497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.461 333.008 187.184 343.856]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+1498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.445 297.142 200.168 307.99]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+1502 0 obj <<
+/D [1500 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1503 0 obj <<
+/D [1500 0 R /XYZ 86.4 701.138 null]
+>> endobj
+274 0 obj <<
+/D [1500 0 R /XYZ 86.4 647.507 null]
+>> endobj
+1504 0 obj <<
+/D [1500 0 R /XYZ 86.4 293.783 null]
+>> endobj
+1505 0 obj <<
+/D [1500 0 R /XYZ 86.4 272.987 null]
+>> endobj
+1506 0 obj <<
+/D [1500 0 R /XYZ 86.4 254.128 null]
+>> endobj
+1507 0 obj <<
+/D [1500 0 R /XYZ 86.4 231.394 null]
+>> endobj
+1508 0 obj <<
+/D [1500 0 R /XYZ 86.4 210.598 null]
+>> endobj
+1499 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F38 517 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1514 0 obj <<
+/Length 3549      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs7~ׯ�#�%"�c��� ˔J.I�%:[�dF䐚29C�a���ۍ�"td��}����F����M�ory�fy�Å
&1�L��I05	E��'��䷩Ϣ�\Fr��J�)6մ��P��R�b&����7o�҄,ǁ:-7��L�
z�Y��9dLc��廓����	��	�\��*���'��Ǜ��ͻ��d
M��y���1��M�O>�x�]E�MqO2ߏ&A��׻dU<dI>�
?�>�=NW3��������cZ��~��D4���p� �hj�T�d�KK�ԏ@��Å0E,B�N/}���G�՟$$SQd�$��I���ss��Xp;�9��LJe'��x�������,V���Uv�)ɠLwI�}Eq��,_��>�QP5͆ӯ�iO�"��p2�ž9��H���&9
�v��Ǭ���X`.e<]g�{\�e�k���/MQg����~�|�8�Y�';hs<�O���י�O�]c~��
���I�,��G�9�0h�{D)���*�S�
��n�fW����Xy��#�bc��c�Q�gB�I�
�=c3~�$���
KK)��`�g52*�e����R�@�ɵj~��;��\��ύ
��zɈOz�iݔ9�=��9���.�S�1X�O�pv~곃����Dq-xx�ݪY�Ҫ:�^,��
�]:` �-1�ĎFJ@)���w����3"��0���kK�J1
C	��}Q~�C�$ٮ)�� n���L�f��y�2���M�����{L���r��m�
�me�O� ��bi,��1����=
+�
	�=�r�m�e�#VH���ԁ$ �Pu��K�%ASI;��A<��QyXm
T" �Q�
��+85�w���L��kJ�(j��z,�ݚvܠ�@a���H�
�,u⺧��[:翼[^�,�

��
�`
x��Ĥ?1 F��@�����4~Xwi�#�@�. �
A�5���k0:�#�������wg爪�g���
��a����Տ����=.��A�#:��W�컟�L"�a��@�
���`$�PZn
��]�L~������`��
hF����'Ȏ��)�ˆϔk1��x���"�5�8砌Y!����L��<�O�r��j�� `1-g��a��)���]��حI�C7dl�C��8Xx���a}(S��C�Km��b�X4������W�g��o�X�p��a�;@ףV4��.���"
+�,�oC��ɿ
+m��O@[�B?z
�)����+R��������~�$�,���
䟀�<cV0
���C�:'�	
C>B
�a� f�[7g]!�Y{�8`T��\U�WYB
à=�|�:H�A]߭��PEg�{Zl���SZK���h=țb�����[����&�t��k�z. %��4ZC����q�zq{�o����U�{{���_����@#�;m�P���&M�Yy�zc�
���Pc#������1[�uյNҌ��}��TzW��q�Y^;�C�)�<j�&�6+�_
+RS��6���4�X�@w�Տ�0��#쫹=+w�p�O�4$��a��V+wl2�y�
����\Ȧ�3d�(?[̃��`I�;��3�7,H��~H_�լ��\�g�ِ��'H���!P�|��
+D�� �i`��2��#��9�\`������"���\)ϖ��?��@��;�L�t��]
>ɸbB
�!�ϑ��
�{;<���6E�/���"�#�������Y��f���U���͓��2�w�sx/�u� �Qv�F��OX;
+]�HKE�K�|N���<<ת
1��+
�=*������/n_�nat9(�MR��5)!��h
+q��h
�6
+�
r��F�gbc�q4<��6T�KLL�~iL�W�;�2����s��-�kz���F9ȭQ�H�5��ʼR]%�����4)ͨ.�C$f��-}9�(��K���
��L�#L~m
&����R��u1�Ḟj�i
�!�/�(��
$�ӡ���`��T)��1��Y���h�+n�X���z��X;����
+`泶ܭ�(b"
�
+�*�]��t
i�M��t�"��c��¶�*��v�<�9� �v�@�QAۈ"��&���� �nqu{�|EbO
�cC�@���k��{̴�
���
NG��Thta[�� ���͛���孭�����
B'/jz���S)u�4]�k]q�=m	Ty�4U�G�����)za�r�� 플�PW^إ���O�����W���r�f� �K,\�$�־��6*z
i�0T AK�y� �P�f��	N7عK�AÂ��@u	
S����uӲ�3�U+�ʆ`4�2ٛJ��F�P/����Sp�dj�$n�m�]��_l�m�=��T�Z>��[7�1�
�A1�쒚gsJ�EO�ī+�M>岅�`4�F�5�Y�jÖ�'���2��L
oP)�t�XQ�p\�n-S��6O�ۧ�T(�c�B��g�o񨄭@@�5���Mf9ݠ�9ɡU� ޞ��>Mrؼ�5�쏋��܆�C�Ҿ�^��I��%"ѫ
�Oyc
�gB�pp� ]'#>�K�
��%[��7�
��<
Fo<��Q�g��6;�inb�f���p�� ��_�qT�
+:�h�z�u��:5��E6����lc��MŤ(��j|
�>"���-MUK�X����Wԅ�0�
tM_C��m�-���3n�	���3�5p����������bM����˄h���:ZF|@qy���
�f
H0�ƽ��Ov�-��kG�N�ْ���ٜt�Tc�
�
V-�]�͒"%:�QY�Q��������ҙ��D
+�٣����
:���(v�D��_6`n�>7�%�3h�dĭ��
E{)G�
=Q�
�y=�a���=�u�M�
��2����q�X/�
C�-$[G�;R�I]����<�{��[$��ͼ�ϣ
��U�bֽ<.����nk�F��D�8N�/��r����f)�
wc�_�v���`}�w�ޯ,]CF'CQ�zs�����v��s�Ty�]ҙhmi��vC�]���ٝi�u�^�7�����Y��_�������=��1\g<v�s�" 
E�&��.�
��=藴̌�Ѵ7M��j@��kBA]�,��k��(d{
+O
�CɼXv��(���=��U�=h4A���"Ωj��ƈ�p�	qy�ޱqɦCEsВs�LH4-��M��s5
5�Q
L�AkAK�Fe�)�Ϯ3�Rb�]�
c"�y�w�<� Yr[|�Me�<��A���X�(
50ż$��V�lj��/�ݺ��m�H���쁷=��T�Ü���M�9k�\�k��~s&�o��znlR/L,(W%
4VQ�T��A���ٙL
�(�n
c9��L�F�Q�[�����ف�]�Ӵ�
+�����L����΃��u��\>}B�o5Q�3ѩU�JqB�}1p�Ԫ@
)m�޺T-��H��F��?��UPܹWG���c�#������B����*�`k��	���)[�R� �LA�.�0M�W:M��!����ԝ%�>���&ܜ];�jXht]A��ij_�༮��UNO�X��Ϩ��
+endstream
+endobj
+1513 0 obj <<
+/Type /Page
+/Contents 1514 0 R
+/Resources 1512 0 R
+/MediaBox [0 0 612 792]
+/Parent 1495 0 R
+/Annots [ 1509 0 R 1510 0 R 1511 0 R ]
+>> endobj
+1509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.383 573.456 216.357 585.412]
+/Subtype /Link
+/A << /S /GoTo /D (Item.49) >>
+>> endobj
+1510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [233.736 573.456 248.459 585.412]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+1511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.378 515.315 506.101 526.163]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1515 0 obj <<
+/D [1513 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1516 0 obj <<
+/D [1513 0 R /XYZ 86.4 570.51 null]
+>> endobj
+1517 0 obj <<
+/D [1513 0 R /XYZ 86.4 552.121 null]
+>> endobj
+1518 0 obj <<
+/D [1513 0 R /XYZ 86.4 414.519 null]
+>> endobj
+1519 0 obj <<
+/D [1513 0 R /XYZ 86.4 220.185 null]
+>> endobj
+1520 0 obj <<
+/D [1513 0 R /XYZ 86.4 181.816 null]
+>> endobj
+1512 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F11 694 0 R /F14 697 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1525 0 obj <<
+/Length 1725      
+/Filter /FlateDecode
+>>
+stream
+xڕXKs�6��W�HuB���tzH
��Lm7���N�LRg$Q�#��}w� ݺX@�}|��`�yt|�z�~�x{%"'ei�#g�q��I'�)�D�s盛FK/�Lݫ����W�{����2p�,=�HW
�+ܛ.�E�QYAK�|����n�?+h릪i��ޯ�i�W���W��]����������r����l�	��!Kd�d�ŷモ��G�g"M�'�o�H�2���y�i��NF^�`a�8Q� ��q�R��E]kKaXmW�_~�G?m�l�wK��܂�U��Q��K���s\/Z��	|����eY�4�n�эcW��J�jʶ���u?�a�]W�R�EY��
+7�/j��+�~Ah!&^�44�W��,��ȭ��_ǟ�w�sl}�TS���WA4�l�8p�V��ܭr�u�A)0���θѶ��x��۲�
+L�(E���P<�q�ҙ(i���G,MCk�������/��έ
}�ޭ�*w*���ca������;���
r�
�bj�f��
`7�i��Z��)Zܪ][����b�~O<	w<
�$M���_ޯo�.�^�C
����-�AO��;������At�ǻ������
+͚ ΄���������A��ɯ�y*[�e�9��[o1R��ܺ���PЄ��ΩԠ�U��$:�z�a-�;�X�T-P�AԑU�=f�;�F�;�I�ϴkC�I�9�HX$�W at QB��{���c�0
�i�/U2
WW����v��I�!3
�*"�������u+���Lg+ML�
�u���V��۪CN�M��U�™J�(Fv_}�1Z�wRM��;�|8K�
�(`~M[���}A��̘!c��>��s`=
������s5�g)�ex��e��`e�tԛ�'}��f�
E=��

ѷ��nt�y�~�B�
+�e�?O�R+Ij7:)�� �
�uMQ�R�ZE2

=�M.y
 �Ŵ,��cN9��p�����V�
U���L ����
r���٤8�X
I��
�	�ss90 �����0u c
uA��.(���c}�S �VB�ji/4���дe��4fрa��7&�
�r�'Ǔ89M�ZW|7Vd|B���I_4��r�B�/[���C09��
��
+�
��5�~,���6���5E�u�+���RNM0�>
pO�������
��0%N����Z�L�29��,�@�H�1��A���>9B�-�P>"<8m�Ęq���f���ӫ>M1�z}̘C?›�GM�'��6�)�Z��$4�8��pJ߰aC2d��}$��>����`<�x��^�͉:
��7G�6��pϛc�5��)oNB�Z��s›A2�N�y�A
+�d�/O������)�#�,^fʒ�8f�@� ?�����x�(;���
"}g�Vd�6���d#JYƒ�u����r���
^�0i:|�ژ���7Ƒv�nٸ�P�%�}8�c(�a���\�:'���|�;�}n_�p�E��h�:����^�_-�ۍ��͞;*x��<���z��.�d����y�H�?
+h��00$A��\
 ��������D�{��5�`>�&<
�x����-9�� Cƃߏ*�
Ju�(��F�Vñ�4^r�0d��
+���.k�7
a#/��.{���	��I�3oMd[
�{�R?����7�3�<7��4
�8|Ȥ����/�=!KL�
�@NNs�_� � J��9
+endstream
+endobj
+1524 0 obj <<
+/Type /Page
+/Contents 1525 0 R
+/Resources 1523 0 R
+/MediaBox [0 0 612 792]
+/Parent 1495 0 R
+/Annots [ 1521 0 R 1522 0 R ]
+>> endobj
+1521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.671 469.064 250.645 479.912]
+/Subtype /Link
+/A << /S /GoTo /D (Item.49) >>
+>> endobj
+1522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [268.025 469.064 282.747 479.912]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+1526 0 obj <<
+/D [1524 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1523 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F14 697 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1529 0 obj <<
+/Length 1547      
+/Filter /FlateDecode
+>>
+stream
+xڵWKs�6��W�Hy"o��[���
�i��d<
	[��H���z2��]`AI�(ˎ�� �O��K�F4������W?�"L�)њ���&2��H3M�f�U}��,�Uo��\$*ֳ�W�!�$�I���\�$���.o�U_65257��>�{s��'�1���
���XWU�Dk��"�@Q��jh��#g��@�i�u]�Y�

���|G�T�7�m;g������-����Q�w��"�yYv5�;fX�NJ��ˬ�mKfs)���>0W.���f}P����
?а�oZ�F4׊pƣ9��P
+
�Bŋ֠
�p�\�.
�&\��(.�]]�}�`�F,b��D�H&��5_^|�J�!bD�&���H�@�*���w̨�.&DWxQ	MQ�'��qL#���0p��m��]�G������޻MH�7
��2Y�?����Z\���/�u��S�y>
6՛�KE�\�*�
���!:�
бq���|�I��<�q�j�O�MYX� s���{��v^:Os���O���y�6�k��$�}�D�m�\ɂ�d_����M�s�ۛzX��,6�4�6\
+K�I���
0�\��
s��X��:<6��R<������(�WtY�nM]�'��A���"���=�
��yH=fy����0 \��p
;�g.(’[
e�!I�{�+�m�3��id4~_�Ow�� �;�7MUa>��-ď+�#����q;we����H");��@9JDa!��bbG)���v-a.�t�z I%�=�}ZB�H2A�H��}:!��$N�0g�O���;Fp�Q��;��5%���g��7#��o�y�n� [d=
,�AZ
�Ez>���6���1�]��8l�
����m��*��=�g�V�����&P֐�n/	0
��h���C8��G_���Z2����/`�G!υ�� 'i�5A!!�6$�j"k
pM���8�'xc|��ơ
P"���^�\��ʂ��T �;o�A�\��*�
���	8
t���� `�11��!%�?�0��jVCعʀI��:k7 ®�����v�
�z�
�/��fS��h���-,d��*\>��Å_��������v�$e��{���g
R~ w��,��
�g��8AN����2 e�>���ד����x�> HjH�?������
H:'J��=�>P
�b��/��O5���K��
Tʱ�]��M�x�)��ގ�~�3�d�G��;4���Yl�.t���=
fxV�0�unJ�q�MzԬ:���J�y�mlf
+ƫ�l�Aۀ�x�<
���a3Nꃡ��=,=�=�#у�xZb�3�y=6uK��-R�_��zsk{
�����݁�}O"�`8�t��W0x��
�\����}�|'Zw�6��6�XB���#W^ὁ���*����NjmmV�^p	���xdm�ݯ !w��Ĵ�A����_����n�<�| 2|>|�a����gt?�
��(N��Ѷ�^���Mv�g�}\
~@z��;c�������N�?+�Q
+<.�������Db<Q�2��n����>j
�G���
+endstream
+endobj
+1528 0 obj <<
+/Type /Page
+/Contents 1529 0 R
+/Resources 1527 0 R
+/MediaBox [0 0 612 792]
+/Parent 1495 0 R
+>> endobj
+1530 0 obj <<
+/D [1528 0 R /XYZ 86.4 726.045 null]
+>> endobj
+278 0 obj <<
+/D [1528 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1527 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1535 0 obj <<
+/Length 2985      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[o�~����:�2�Sj� '�$hO���K�l
�J]�����E��ח5��I
���7�
�F7��?����OBG	I4���uk"#���.��o�$>_s��\}ȚM��ۼ*��"���Ū�����_?����g׻����]���~����˳?��K#�Q$�:���~��F[��1�D$qto��")�ᩈ.��qF���h݉&��t�3�-��Ң}���8�t�O��W��}�kʪ��+æ���5۴U���Zq�
+���W\6̷f�$�YRwi��'$?9�:6�./��_(����Q�[�����*ߞ�%l��>�� !��J�]UU���['~�g�˻6k�מ�cb7Uٴ������6����`�(�H��������$��0��wi�Z��MVfu�q_�1\(	@��i?(���ҥ��x�pij����2k�li�u��n_d;�V�9|�6��
��V7�}�� ٬��9[�UA���?�tK� ��q��χ�%�&"���8[�0��uW�J*fEi%ݔ�>�=���{%w�R �
+1=Y8��+��:�p�U��^V�-h�W�U׺�u��꫽ʮ�^{���™S8�ԃ����x��<�CpM��m�銴^0)���lj
N\�ی��*p
����
owb����M�4�ֽ����?���$�	��ͤ�7
���0��~
�S��'�8f�`$a*Ry�	
+��Eu��io� vݦ�ꌜ�����s����`^
�m��T��������9
O�3�*w�����·{�v�̭�Y�ćãw�r�M�xk��|��al�v�Ĩ]�u]�f�=���`u �`�B�U���a�\
'��#�´$F�H18k��̅iC�Ap6����=�X~�
z �-����p
� Jx�	�������V�V�+5`�҄ٿ
.�S����L�ӧK�S>�

+V����{
���ߙ@DE8!>
��
��nU<�D�g3
����b���x�l#�(�)�����m�myׄ�Ìa�?�,c,"ЌC���@�H�|~�L������g�o�84�]�f`]hNm
+��V���NY���"oZ���RQ��ID�
�
^�pڇ��
�8b��sH��K��_q3U򧼄�<�"��
]�2*�s��K��d���9B�<O��ii�LpBk?�lE�2�����nX�X]w�Ʃx��!�dB
�b
( 
�R"4;��1C����
��/�2s.�Ӈ�m'x}�F�z��0;��ɑ-l�q�R��Q}�nd��J��<����}��%^L���ZB����mÑ��
 R�!��@�f ���h�h��Ɓ?.0q8\a����=\-�(�1w�J��
���E[����
I at d�q��C��R�78$��	���4KǑ4���"�jҝG�a�6fZ�
HYzY_ 
1�.��F~b��!O`4��7P���P�!��
+Z������ܾ��j�y�������	5��+�Q�+x�{�A��B4�b@�4�z
+�/��h
vwb=��������IH"��*�	>�R`RĄ-��u�`���͒�C¼���<��TCP:�ΐ5�#��R�!r1��&>��Iy��C�N4}��c�o���u͈�t5Л�/#��3O���=��Y|m�ؒ����u�w|�I��c��W����
��]S�Z"�&G 	��
+	�F��k.$a (J	� ��LH�ԫ�* /�	�T�����T�8$vn��AU@��G �
+2�#��0��	���6N5�!���z8Ύ�]�
E-�
$�U��b�,�
��3��yd�#9����S��w���)��Bm�[5>
�!�߉� <�bv[���(Dj5h��B%$�0��d���'V�S�XLؐ�Lӫ��P�g���W	�R�Uf+;�=<6���|�h!�Q@��3�G�� |��vM;M�a.9!����H�1��W���0�E���]M�
+�|�jlΑ�m�D���C����ܡu	,K򣨋�G
TFerꂝtp	�Q/��?z
(D�fW
/9�>����x����+b����]*
�m�:gU�JP��]�i��`�q�ֺ���
U�᭹�:{��|5$>s�ٕ�

+ �k�em?3׋�Ta���W�6���]���ut���A߮��T�iQ.���52����
��\�'9���jvv��>��"����\Yi� �(���[MB$:=d�'�[cN��V��@��=��ZzV�i�w�����:��j�st�<�4�a�<r㵛=�cX4���n�1��M >Ll�5uMV��'���mrװ�
��ٴú
�1؀lE������:���>Y9@�ƴ��@�'���p�(�	�
��u;Xz_((���H�a
+qj �H�i&����-PӇ��E��
z�[��ʮ�`.�Ғ����%���nj��e�Z���(֧�pݝ���� �}ۭc��|�/k:�{
5��MF݉#�*	�	j�xp�CQ�$��H��ĤAW/2i���|=�!�AS���
���-���:\l���榷�}W{;l2
���G���7�
����w��:�o��9��tSW�{��>Qf����v
�Hϑc���F��W[���#
���φ�wM���=���S�Q��Zw\�9
E�؁e ��7�~w��x���,��x�>&TG�* 1~Ztƣ(a�+�*GB��O��c��qH�8�{֟zؐp,�J
'�):o}�u!�Hޗ�����i�,�H�\�֙���G���Y�~%6cv<5^5����nM�'����������]2�p��8�8��I������<�O^o�+M��z���Y��z�����M�
;u
+|X8
��E����<��[�x�GS�'�����$L���<Kx7Tϡ/~���w�X0R�c�_qҕ�@��FIJ�+1���}�`��-�4�/b�9��rq��ߟd�3�%��/X�� ��[
+endstream
+endobj
+1534 0 obj <<
+/Type /Page
+/Contents 1535 0 R
+/Resources 1533 0 R
+/MediaBox [0 0 612 792]
+/Parent 1495 0 R
+/Annots [ 1531 0 R 1532 0 R ]
+>> endobj
+1531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.801 437.184 127.523 448.032]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.691 70.558 214.414 81.407]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.1) >>
+>> endobj
+1536 0 obj <<
+/D [1534 0 R /XYZ 86.4 726.045 null]
+>> endobj
+627 0 obj <<
+/D [1534 0 R /XYZ 86.4 61.537 null]
+>> endobj
+1533 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F49 646 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1540 0 obj <<
+/Length 2840      
+/Filter /FlateDecode
+>>
+stream
+xڭ[Ks�8��Wp��m
z���Co���'��ݎ����6������~2%��*�r.�D��Ǘ�N��(�>�����_��
1����.�T*x��!���z}��9�������?O(<�D4J %I*T4��|�#��p�(!ܤѓ��G���l]���$񊷏֐�aE;4�T*���q}��8���g��X���3!D|�7�I�,ݝ��|q�t\�'TL��X.��V�^/O�XO��ʧ�ǧ�zpg��Xc����h^.�}^���j5+ZBl~��6����Āg���f1-2�
+6��h䈍r
�V�)U$�i�����}�:%\��A#ư�A@�#�c'�10]�X�Hm�7�F��"��~7L��J�bӚA���N9��Wp��|�
�S�6�= E �i�A ;8�%�l���������{r��"x�ͱ�H� "�f����ۗ��~��
Ղpʭ� �
����w(8NhS��w
XL�]3�R��&閷��l�+0<��
h��K��
��+�K��&=�>Ze(�|H��R0��1	�B�10��{ ��uH6t^`�|{��ӧ�>\t�eC��b]���&d�y>_��.���2����{"���@{`<�� ㆙��Gk�@1SD�tsx���ZA
ʻ1`�T| ǃ�
7�~�8�����ã
 �һ��c� ��뇬���~�71��i"����*;�
���|�R�C^
_��rn�=���:z:/��<����Ã
��R�P��t�
]р.	t����0�� �h�
�M�=��\��H^μ ��Q���� v+
�m*�%į��c��E�:��T�����U��.�@S�+�
���_�	i
�G���+��� ���G��Ÿ4	I�(�,
,��y)�Q\�1蹥��Õ�o)�8��z�ޯ
2�j]���I�(���C{�ZD� ��-��~D���:%&��e
+k*#^�hWf
�n)>���J��J�}������ã
���m��g�r��|,�u�1٬��<t\cw�y�M�Tv�Vٍ]�?�v/�pc�P �'`-���8���9{4������w��s�ՃQy�����U��s|���|�|ow��H!�H{�X0M(�
�G75$a�?䰄a �}-X��:��������
MW
d��(Z��$�UnK�uv���o���f4�΅��
�$�V���h'�)I�88�`.���@j�G7E�1�	�v�d����m.��P�]\N(O���RH
+E[�͇���յ�`4��FM�@G2��
:�g
�"� �P�� ;sOؗ���G�b
;B��B� �,�
�����1:��M�0
+
+O��y�)�f�2�>u�Lb�n#>E���I�~O2��w቎�l)؞Xs��b�i�Z��.��P<���+���Vo�6��j�~���i
,:c�>2�љ�!;ҼX�DQ�)�\��
���YnO��Y�ulTR�4��!�l�!��=qC�������}7�R�=��`[�gB����<�&�+Iۇ�v]�٤�+G�
Q�z�f]	
�٠L Vm���Mc�[f	(�l.�yy�Mr��]z4�
��S���߫�J���
7[>�
�s]6@�s������{}��$�n�P���ح�$�!�# 	y4
%y�����Ō
%y�4޼�-=����j*~<�5��(
�s���c�
X�(90_
=��|!Љ�ߕyV�
����S	)�0}$�$��
���	S)�̴-��B��•�b� :�����Ԧw���	e
w��U��bq�zS
�xX/��:
`
�mKl
t�(�ɴ$Z�v�����J�Hڇ�UGj���gS̰Z�
�u<u�Y��i� b]V�|�*
���>m� �]�Ʒ?V��P��!���
��IXA�����rIemO��o��"OX�m���X|�[e_K�
�ÁYYz��AL��pxS�c����z�O�Ý
����r�|��=ο�ˏ
�6d����֧{y����8O
�|��E� ��a���Y����M!
_�A�5$~}ٲt/�C�P-G,5�cq�S{�b
��S��x����ŵ ��!qCm���n�0��Mh����8WD	�O���:�%q�Y��$�㺈^X�/G�$�P=[���Ӭ�zx��w���b\�1x�K����x�
����-�7�sX�-�Hu_��|�Y��o���-6�am��,���!=��m� ��T��c��O�R����E�VBH*���Ny/�r ZiG7fX��6z�Pϣ`"֩�_n�
%�U|��]��ޯ��
+��E
�h=zQ����f=/��Md? ��m<D/��{�
*��ۄ��%3��!z1A�(���xs��&=K�

?�i���ܲ�)2���j�O޸j���)�+�cñ�&
���V�B�_�?�~�Ip�d�i�e3i˸���e>��J/�S��}�fgi*����	s|"��B�AɄkJ(�Rˡ�U
�)k�C��p�0>& �t�H��j��ҷq�:~~9)c{c3��Ơ+�Wݺ�02
׮�#ӳ�f��)T�p�,��4����v�YB
�D"t����e����}��ݶ֤|_�V��
��_?`���4��,&��W����X��W���[�o��Ї�oֹ�?n���b�:(8N,�釮��{��	p�����Q1�L�-�UlfSwz�����a���}//
Jo�Y����Ao ��_�v�a
+R��.
����l�N��:���E����
Q����6C��{�%.~�١R�I�C���eJL:d��q\k�c3�J"Ь�p���hd^@1M���+���^,���������
�=!:ھq�������
+endstream
+endobj
+1539 0 obj <<
+/Type /Page
+/Contents 1540 0 R
+/Resources 1538 0 R
+/MediaBox [0 0 612 792]
+/Parent 1543 0 R
+/Annots [ 1537 0 R ]
+>> endobj
+1537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.073 462.148 492.796 480.315]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.1) >>
+>> endobj
+1541 0 obj <<
+/D [1539 0 R /XYZ 86.4 726.045 null]
+>> endobj
+626 0 obj <<
+/D [1539 0 R /XYZ 161.495 696.212 null]
+>> endobj
+1538 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F55 746 0 R /F48 619 0 R /F49 646 0 R /F60 1542 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1546 0 obj <<
+/Length 3339      
+/Filter /FlateDecode
+>>
+stream
+x��\Ks����W�U�ȼq���
W\���Ut�}�(�Ą" �J���=� 8 D�J�r@`�������3C��݊������������V1����2*+�l�8]]ݮ~�(!�k�,�ѷi�ɷ��6�_��Q�	�<*�S����o�~�ſ}��ʢ��.���ꇋ�.�uA�c��uG26B�6��NV�����5�Ϯ��Jp3�ۭ>^��T���[nG�0
SJI=	ʘX9&���JY	p�Sde�wJ��,���+宕�6�*�\�����-�D��S�=�
�vIQ����FwWI�c	���c�H9.`�M�Ŕ�q��x��N��n�"f�{7}H
�SKc��"�R�cBE�ۿ�]����Gm;ȇ��l�N
	������`
L����V�Ƽ0���4�
�S�Y3.]3�F��c�M��i��@OZt{��>-������l�/�|$���	��
+O�I�\�%��{	��	k��b$��oD�'�C�	�=�
#)M,
`l��a9_��HpT 01�!���!��kaa��ED� g:�|F�`qOˬn�:�9H�4p2�4ٕ/��o�n'T����%0�ŋ�S���>
t�!$���

�	Ąv*����<fZv}u�n�,��>��Xc\|��LD��ٲ�B�Z�PQ�Uy� �	��n�� i���!-����ߌ�>��W~f��v
H.��1��n���5��L�u<w�2���Z�mes��t�@3�;d@���i�+7��H"
Yש8p�_�o
��<���:
��<; ]I��m���ѮR�P �q��x�G
��	UM�u�
�6��`^n�/�����0"
3a�?%

n���ܐ�[��6��m�$��;ǩ�!&�"ͷ�3��C�ܿ?�V��'���$*
�����U$]�
\�%�?8v�?;�𦼇q �P�w8����yεI�>�+����8� ���{0��qR���R�s㜵��enX6��?׷��.s3
�����n�6L���[�D�.�僗�ܾ�[eA�=m�q
}ނ!."i��	Kބnq���]
]m�1t!m"yH�L.�"�HJ�:Q
3#l�$]�uz���Zf���5O���fKX͈�.Ǎv4Q�gfS��|W��G��Du�d,�0#:[� !� 
����*u}η��2�J�xS���:ԩIp��`#�˙���wͬ�3�
����v�\mE��K7Μʪ���~_=�sȤ	��DVk!V߀��8Z�wR�cM��O�H���m�eÑ�cߠ�+x��H��]����x!ۍQ$
+�*��V.f�HA!�*'��)��lJ���x�
C2�!U��Ii�ufvp`)����Dm�@��pC�T��;�V%�\??%�P%&*�������L�8
�գ�8�ذ�4�{��>q
�?��L��� ݦA�<�O��J�>uP
��Y���[�@�
3w����wx|�m=��z��b@Ș�f at Z��G��,�&�������s��6����
!3�����D�%x����"� ��exA���
3�xxfKX[�Д�5#X�ފ
�����������T�/��|����n3A0�b3��1���R�F֟}j�I� ��٪�Û����^�	O;�cG����t�C���L>��<���0}��[�! �B|4Pw�r*¶��$HH��>�Ӏ0 (*���
+31Ս�Xj��գ�원[�9��C�C��5���_l�
�vB�S]LP�[7&?��G��0�#�%�6\�l�첹�OB��V;�x
a8���#߀;����
���p����|R�i��S�30�Gͫ)Bub�A

�Xq�
`������U���dR����
�X5ՙ���Wx�Y�����L�`O��s���F_!G�!�`X���d�f�D$� ���J���E���/_��unm� hxc�o��м�ǘ�c4������D�/�B `)Փ,㚪EXH���o�=��a2���&,m�|Skrj)���kIƹ������V�9
�l�
�����ǴĂ�+y��P�=�l��+_�@D��=� 75�a �LU��O̧
[�M��KpG��&����o�c'��$n��Rn�r:1�#����>���a�e�}H���B�`ѱ��zq������"��m��p�I�3斟�F��.��
��L֑�L�Ev�;=^��g��	|	C�
2ei��0��৖b>�Z<��h��Ϊ�1��!� _�v&��
�gӄ��g&Hl�qR
�����W]��*��3��Nzv
o���h��9����mQ�|��e�
.�Q�K�A�PC�٠�Y���|	�
(�*�����
3�d����P�& z�X�BOғb�7�'�E	)l��R��T⼚*TR�XYq~��T�����gѷ'A�D�����@�01�E6cB/��
���>� �v6�~��q�[Z#n��7��.��
+��� �a�
��"���gl�tl W N����'�������8#YW��
4��Who��M������-�rk�
B�l'�1���h
Y h5��@�����:� ��q�U�. ���Zs,�����I�^�:�zH����
OK�G.ȇ��1iőA��
J���v-���
��L?R^GM��?�h�y��1r)�-f)[|>�iQVg�֌�����̌��g)FFO��dw����7�M���7+���ַ���3�O�>��7�o��?4���'��"l�5
nl���?��b�x 
+�;$yRm��]��w��.��y� � �w�[4�ݒ}���b�[&U��U��QY����R�&�"
̰X��
lf�"
�
�?����d	Kk(�2��S
�Z񩀩�5��W2��Џa!��Z�8[� �b�
�K�\�Pt�S���
�T�M&�;�k��a�9G���,b���Fg�k�7u�
����;�#[��Վ+�~/9t�
S� �&�q��EL�ny�ˌZ��iqؕU�����PV��bc�^Al�ڕ=sa3�+K�1�e
���_�7�3R�O=\�Y��gR�2�P͘Z����x��M1T
��d�	C��oi
T}Cۅ�$<�mz?F��-��Wz��ax�V�v
+~�����Mp�_��3dp�2��`<�͉v
+p����S�
[

�q�
���?w�:>Hn�lw(�OP(,Ұ# �B��hJ��:�����c+�@�cm��r

��(�DQ٧�j�p�Y05�
w��`'��e8�me���ɾ����U�3Y��x�1�r-��f�?Rh
�-��B&F����W����O
���p�~�������ZQ_�
96
+endstream
+endobj
+1545 0 obj <<
+/Type /Page
+/Contents 1546 0 R
+/Resources 1544 0 R
+/MediaBox [0 0 612 792]
+/Parent 1543 0 R
+>> endobj
+1547 0 obj <<
+/D [1545 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1544 0 obj <<
+/Font << /F36 472 0 R /F60 1542 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1550 0 obj <<
+/Length 3446      
+/Filter /FlateDecode
+>>
+stream
+x��\�s��_�GyZ�����=�I�I&�I�y�e�:Kg+�$�$����
�?@�<��̴/MA
�b���.@�����~�׫�?�M�#Ns=�z?S����pG�`����9����o.����p��t�fV	��R�n�?�Lg+��%��ٓo��I��������Y�u9�'\R7�1VH�I��cUJ�e�)�	��k:�������D3��3��f���n~����?�W�
!���a��+1�_
O��ay��릩D�Ї�1��J
�2��q�
ׄ�EJf��Hn&#	g"���6�8s�Pa&�9C(��n�u\��Š�r�Sc������y8m`�ڧb���y�b�T(P��	�c�P��62�����l��Y
�͔N�M&l1�f� &У��x���c�}&гp�E9��>���j販�[���/���'���J��`�k>�
,�!@	"]������b��6����+�����05 �ۇ�7��n
xk�y���sK�U}n9%\IE۬
+��q ��1�*2T��r��9�a���˿�����N���
�j��
B���և���
�/2S��~���̀h�
:t��h���^
+w�Ō0��&�ȕ&Z�� T��1K��8/I���
q��M��,�lx
`��[����A6
��4q�� �F���Seh�i�k"l��k�H;g�
��f�6������{� ��<o��92hF�6*6� A(_j�
+�����
C_1љz�S=ȴ-�C���
+7w�Y6�8�r!o)��C�EF.R�����T湇�#P�up_`^l�D�~	��ay[f3�W���O���`˻�
ʯ}�.V���#2�߻ ӳ9��0l�u&�x��_�������
+����p�is�
W�]d�q���:G��] ���&($n���F�]U����aV��KȀ8`һ�[�70���n���>d���R i�Q#BLQ8H���1@��c���(�13���x������V.3��y8��6�2��q���eB�'�n���( W�! �G�vb3TD+�QF�`0
��b-qV�������a
a
�Y��pfy�A	�PW��wM9� E�|�������zhd��$�N�lU:�9�:�O���1��9L�{|�?eX�
�wUŲ�.�Q܎
�i�",�Q3��c}\H ,̋� ���`�����	�f,�<s���2�H,���tm�*})�A at G_�(X��6���
+�D"b]��K=��
ID�8����F�R1���'����O���
+q�v���
@w��W��������~�y�Z m��U5��G
 �'�НC����^�/]�o�5�ù7kZ `�J��e��> Y�2����y��z�����JC�y���Yh���a��-/��v�x@:
+�}�xs*~	@M��ɘ�+ǤH	�8+�%|\��\�,���S�
uA@�!���F|O�Ղ�W�r�����9#�)5ѐ9��"]a f��/`��VBY0�sv�:
+�ˡ��|gx�Ig�/Ѡi��
+d
I)���’�y��O��0&��3
hf��h_��������a�@�	t-�����7ڏ׽@���
�P~�j.#a����9C4��(?\F;ʃ3VG����R�v����M�m^R8l�W�z����.�*H;�1��11�|�^�*���D~a�
�B֘.,�^@��Q$��¡���/�aa��~�2�:V��Q�L`��
�B
��`�����Rl��$XZ��������)�͗p���`:��9�ƕ/s�'DՄ�
�F�w��w�\P b!�k��2ZA�
�N�@U��/�|�vs{
+��p�c;ߟ��r�8~x\
�Е͖��x�D��8� ]<�a����y�H)�5�s�űF at W*����rzS��Ya� ��Z庳�BKe��qC�
+�q?�fw0����YB�8�����.+�
"�RZr0��M�S�˰�:w�]��xN&O)�g��/�b����*i��I
�����Efi%gA��&$�ȞV��kTŷ*��y E#�lJR�U
�q��@f%��5�13�$/�ä��K�w�ݑ���"�p���
0^p0�$�5	ɻ+k�LNSY��X��7��	�0��ED*�ߟ#�7@�Z
P�	��fՑ�
�M͛���vmS�;4�1��2��Dp[g
�e���c��c��6�/
+� w3� w=w`��;.�
$%
��U܌���ʚ���
�8��_7u(�8%w�Jgx�ԁ[�A
 j�� ����
7�^*d����6\���U(�­��z[ڶ�6^#nl�A�����>�ۂ�섑?���Yn��r��:�
� X�\���@O%)��3�$�D^�d�Y
+جZd��šg
r��̻JH��G����E�GX ��N�]u+w�X ��ۏ��Ɯo�J^ϲ8Q�4�+��٫�`��{����{�W;{U�WJV�;�뀪�qs�k<��
�Z��z��'r�8k6Ā�t�f�<mf}y���ͼo
�n B	n���B
����RJ6�����J��o6�v�<��$���M�'�;��
���M
�@�U�<s��й71\F+)
+��R{�-
���TYI��	��:-4�>���v'�ď���gwbҪS؝��b� ���z�ywB}Fi$Y�Ha��
�-( ���+����``�����魅)t-V`���88^�c�7vR�8�5�����/<��a�p���
똨�.�
a���������f��ϭ�N⅄>Ê79�
�ħx��S9GjZ�ڃncxҚ��T���ʌBc)𴫮3Gc
j�� )I�L�Y{�>��_ٶ �j2m?�o[f�M/Fe 	R��ςH��͉�gz׾9�"i�m�Y�R�1��mX���+�E
��SS�J��߲4-�B�<Uz�M
�k�����}��6�����T�:�;\F+��Ĵf-	Rs�+?��b���]�IW&��q0��[��1T,R��ü@� 
VO�=ˋG�E�@��[z�a�1g�����I2X�CW۱5�y��2�:�8�6fEH ��j� ����@~�I"H���/���2l!�U-��C��	�	�͞p��A�&�$���a��4ϱ�dT{
,�=�H|�,���,Dt�<^D%�/<�g-#�5��gӢ�������
+l>�Uu
+����(����U�T�x�Sy~���N����m٦�������3��]8ڜ����D�b*�Os���R�q��H�Ƌb�a���M���ma��c�
�Ɠ��S, K$�|��*� R�MB��� �����&?~|���X�����~ۃ�^÷�����l�Jx���Z�v��a����ms#;��V����vW��
��is\����.��0=�P��a6�]h�A�Aa�J�|Zx}�������2
����
_DA�~9S�D������ ���
+endstream
+endobj
+1549 0 obj <<
+/Type /Page
+/Contents 1550 0 R
+/Resources 1548 0 R
+/MediaBox [0 0 612 792]
+/Parent 1543 0 R
+>> endobj
+1551 0 obj <<
+/D [1549 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1548 0 obj <<
+/Font << /F36 472 0 R /F60 1542 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R /F1 781 0 R /F13 782 0 R /F7 778 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1554 0 obj <<
+/Length 4094      
+/Filter /FlateDecode
+>>
+stream
+x��\Y�Ǒ~�@ľ��޺q�Z�e:dj-����azf:�c�f$m��/��O ��}a_���<�̬!��M����~��f�
o��\�N�)��
+_�'�7�N9/����O�T��M���֫�Wҩ����r��/����o������u��ULov��忮������_^p,�&�YHN��|���b�|��һ�S��(�
����Ë��`���<�^���[p�ۙF3�
+��0�^�4A�a�E���NL�&���*pn[�⦻�,Qbz�Y/�NN�z�
f/��.�*�e�A��i�lR����(��I��H�Mk�dU!��lz?[f6�=/��Y�{[0�������%͝�n������(�M�
#!'!����`�g̠la�y��+���4�0���]!�ô9�6Yp�Z���
+Y5\����u	C:�B�k�B��a�Z���x�l]YX//�w��R���#��ׯ"�み:�����Hu��܏+��R�4"y�
�#Y� H(�"C>����Y�<���A�M׫28�fD`i$�5�P�V��Cz-aa��f����P\��oכH����o��-����:�	[�Ӳ����H�����3 
j��UW���[R�R��g�J���l�`�pG�(,���Ā�F�g"�@�\�Ja���_3\��/���>U�����M��x
;�Vw��y�{�YǻǗZOg�]Y
������8�*�,��ɡ䅷��H� ��¨j�^��̤7�u [...]
+�xC����cӊ�������}pV�sL$
�m'��^^�6�M9�R��T�e����61!7���ċm.���U�D�Y�aX�
?2�rR�P�4�P ��}U����f�������6��e/?EK��.��*}���nE8��`����;=���o����}�a9u��P-��.��=#��I�졟��|Ɣp��5۔q��z�L
R��w�9��i]��!�{�� �(��O��D
�	��L!���n����@��ʆ�5��橪��p�<'��xI>�2PK�Y��)���s�e��`ŏ߬W�v�Y��a�u��6�}��g��
l�A[��O�<O��^�����)�r���/�a���)�.�ق���WD��Krt�FLAn�v�X���S��m
�8�V�M�]��S#�38�0���xc
+��7��@� )Ӆ�@Zu���_��y6�K�O��=�Rp_e�<i�QNd!� �Ѣ���L賙a/�
�a�1��B!�z�/g
+�<�}���"T�阢�8�W8.N1E�b�
]�3���c z�a�
K����ԋ��?�����A臤Я
��6A�I ��<vv�m��mT�5�/b��>)	B���Ta�(a�b�
�\F�X6�Xr�A���@cz��E�v ���Ӡ,4̇); �k��0q�>��8{�(�	��J(�F#�̺�U��&���"�
IȕB� ̲�n¯�@�]Γ��ѩL�����X���
2�w

�z�vEnۍ
h

+(�q�]���]��!��' �!e�O����l�]�fc�
����/��"�n��ʳ.���	�
8>}j̕'��f$��!��^� Q�T���=�TC��\^
+
c�{�4Q��nc��nʮcP�,*)Mcc���
���:d]���j�[�D���bZ=r#u�R�I���
���鎤Ng �x�/�їȜ���t"s�aN�KdN�?��Z�}��V��H���m��`�e���d�D�G�.���6�� 
(}Z�)q�)W�S���Y3�%�g�NL�l�?�=={���2�ZR�M��Ak��	��
�$YV��P\&4q;�K�r�N1�-�8
<���]�U�IE_6�sT�
���T��
eo�n�`]�
"��	�|����f"2�L]���ɬ����E�,�7��)�⛸�X���>&�
O5�L��:Cڸ%�P�TQ��%bQ0���z��9r�	� �	X�����>�M�ֻ9����4�z*sts�ޭB��_�i���1
�,f��t��R�P��a/I<lw��w�R
+�+���3�8#��4�BX�o��p[A�|��5�)��1D�Z��(�U���]��rvSn�K��"��0�V�����
+h+�8hQ���h����F��lȹ��͡��oe]�g����
+x�P����I���3�h놙z�1���w�TDQ-.�T�����n`�P_�hr
UW��Q��N3&'N�N�c�j�A&b>���
t1PQ-��0�Ys�`T����Y�8�RT��S����0ݷӑI���{
+"ilt����b�
{ ~�Q
J]�
,��	S?lB
� t(�& ��ռ�&d��zoֻ.)؟	�q.C�ȱ�{&,�,�W
7(��<
RX�6�$�kR���}s��Z�r��q.ut.�Zb䳻N�:aʾ+th��Mxq��F��3d��{k�Iu�c�ln]�R����Z�J��h
6¥������Y� 
����[�V�)��j>���Rز�E����DZ������D�?׮��a)�	�~���$�A�����Z
+�w�j��ҥ�q��K�Ww�����nf��u���"�qr²o�%�l�6��P =�˨���k
h��9�$�+
�
N��)�M_�~_�e�T�9�v��E��.��}�ʸ�:�yT;�*
� [I�O�rS�W-��w%����CA���.�Oր@bSsް��
�o�ں���1����ST�o����8}���J��چ�{�&�!�*Mu�� �7Z�j@?���?���7�l�
��n�U��4�_e�� _�v܏R�":���1�:^;xKal5_�B
��O�e\�:ZO�d
.	�ȦHD/�\Xh�k@
�Z��OB�pR�
���
�T�9��E~!�9%:6����C�G�*;n�Q��X+q�y9�o�u

�=n����)P�j>/�4|�,�x�.�Q6z/�t�	��#@j~:4K`9l:�ܜ��ޅ�ܜ�Ͳp]Y�s��޹�#����q�ށ���L��3�
�z�YQ����4�0Iu>���b�e%��2xG)C��m
�
r����/@ơ5A��������v�5:��%>�?f8�/A���Y�CҤ�
3��	}�����3�:%/��х'����H�
+1�0�'u�3�I���B<wUJ���&>5^s۸�������fؾ�)�?P�F�:��3��9#Gzs���Io�T��2h*m�	`�e�.M�+��c����cO�߸�� �Rw>a_Y��@ì���3� �
S1+�j�6[�P]��u��E9�:f^��r*��O9U��PC�ڗ���F]da$�����`�J'W�6Za�="t)E8wy�
HIF">[�v��@�;��Y��x�IJ4o�m����%��+�n�K0 at y���8b��GC��E(�5�_��ڞx�W�:Çя��
~8tC>~J���p�=vwyHO��Ϯ�0���G�m
�W�S�tJ.m9s at i�ᖦb:y���;WC |�-\bQ�D���ӛ�7��
%�E5p�K�U?�jdgZ"0&T:�
��h��F���u�-��
�J��3�Y��X��5
+FԠ� �J~�!�߽}���_ra��_DD�1�Aq�YW�›=tS'd�$ �${xn�c�P�.�.b?�Òr�%��a��޷��`�l 23�F�^
�4*Ń}��y�A�$4����_'�~%�98i�g�I�
����$�;M�S�Ĕ�ձ-����p�|�ơ��$
p4H�R�
�i\�Ӡ��' �� �a at h�:��Jc.@�<(֞�NP
���^
��1^
b	�J� �A#�_l�*�&
2"�w
qP��R¯
++��S�>y�M8��I�?������X����AP��k2xV8NWY0?��@�c�����s�,�ذ���ۼ�S�Y
�Uԋ����w'��`oyK��XXQY�v��	'7�/�R�u:(,���X
���_����hN�i@�gI5"z���6�0 l8��Z
�p�ꝫW��e��v��e!�=�vE�
wDB���9's���m��+N{	j�O�\�/%oU��w��Rχ�3�J�~��"��W<
+endstream
+endobj
+1553 0 obj <<
+/Type /Page
+/Contents 1554 0 R
+/Resources 1552 0 R
+/MediaBox [0 0 612 792]
+/Parent 1543 0 R
+>> endobj
+1555 0 obj <<
+/D [1553 0 R /XYZ 86.4 726.045 null]
+>> endobj
+282 0 obj <<
+/D [1553 0 R /XYZ 86.4 395.998 null]
+>> endobj
+1552 0 obj <<
+/Font << /F36 472 0 R /F60 1542 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F10 779 0 R /F14 697 0 R /F38 517 0 R /F16 461 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1560 0 obj <<
+/Length 2902      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o��~�� ������r�Hs��
���C���Bu�h�������RKʎx��Ŗ(rfv���of���
goN�69y��� #��&_3-�5H2�Mf٧�D�t�4Mn
���.>�����p�e��������pF2��=�����������2���٣�s�1ę�O����	3���h[ry����wޘ��nQ,��)��2/O�d4_��a��f�օ�	��쳍3�hmn�J7M$1,3i"Jz����|��߬��T�Jk̋׼��"H	��
{H�R#C����^g�cgF���
[� �Ƃ��_�����6PƑ�l(SHJ�������ׄ^	��� zE�X��g,��!~c�8��W�-�mb�A\��c�"�0�
+ �����N 1���\{$^���X�
��
+�)o�����5l���cm2���t�9�_y�ek����n����J�ƌ2�1��AF��g�h�/	{xa�0�V"�DeR��УFbg��Di?Vmp)��j �b
im ��a�[Q�
�lK�� 5Y�@��dO�Hqv�70��S
�=�4x at 3h
�ޗ��\Yi�H+0���kp���F
rR
&�*���/� �o��f�E^B1�9�B
?�Y�u�*�
~��_W�����j��~��z��br~1i�4���qu5�˼�ݥ�Z�J��>]=z:�����*6u���k(�;׎�G��Hio�gLT�h;�#}9��#2a4�J
�
 ݂1'
+��!oau�J9AZ�A�r5%�y�r�K$5�7qr;a�O7k�n��E�%�N
�ݶU�X�r�|5�����|v�/���zy�R �=2r����֩&�����m6���[�N>�W��4��:�\���C��6WS��1n�Pp(�	+I�@w?�r��w6J�i+�0
`�Z; 
�4٨J�Q�D�
6��!�
�FH�(�G��7�Z�(�E�)��:�R�[.b�>o��Ӵ��X!#���^�bK�j�3�7U9s_J�c*���|q�[�����
�6���7OW��c���F$U��Ӓ&����z:!TX; x*�w�;�#	�a���
+�U0!@�6G�:��ĉ� �'��=�R�|HD�4Bb3���$=$�$���
�
]���Y8r�=���,I�Q��
��J���*X�����(Y4
J8E�����W7Uu��Y/�'p]���+��^@(E5ш��3�8�Z��m A�z���+�+*Kڷ�`�t�2-���mv
\��1G���	�x�	l�O�/1�k�h�
��U��U�L�	U)$w�]=ԥ�݂b���8�80 c�lj!RHCZ9A��k[l��"Q�8��5X�]����tp5��b��b�s]Iq��{�nr������Є��ᮚ*9 ���mŶ��49����
!�\Q]�P~�E`�֑����oN�O B� QFT<T?��;��h�/�B��Mᯭ��
`4��|L�O��zni�	��
��������w>#�_W7� n{["��`�Ҏ0dƕM�GQ
��
�;Q�r�e�4�z�a.�
JD(���g�w	n
�1�ĥD�
U"��ۥ��1��ؖ���D�1�C��M�m���%��=����Mp���v��ngr�Z N�����B�F�6�֓\��z�A�n�E��c(6������
.�����n��{P2��*�l��œ�pڬ�K���}�:���y���׭'�C"@
+8�	?�Y��1s�(	��xQ<vw�Ch��z��
�=-;簝��i�NTl�n��,�O�j>�
�e`j�@^V�x��b��|
�|�0��4�P�́Y;6��%�bǼ6ip�1#<�
l7bEIc��v������W���|ss�ܵSpe

RV�5
a����̳2txxqL�$�����o��䋵�G��|U��a��x�����Nź�)�7CęE������L������$V�m�
����.�܀��67���V�:܏��6 �t��)�
�^P�5s�	!�N�d�@�ph��~�W]c
�[�V5�r��'�F��m����ݻ��
nN�|�`EV@� �K
We��K*�
��?�̞i2=H�Q���8�{��"U��X��Vعh�������1[��_Р�U?�5��u,&�kV�{��`N�}PB崸T
\��a
����|.���i�4"�
��e��X!��EN����� 98}o30bGf4��!����3bGfN�a��/�G���y�-_�nЊ{j��䁸��j̟��]�/�owa��Ӄ;f����ڬM�����$�~~|�(��^B�M�_��K��@	EF�؄��@0A
���`����O�#,rnO�n��C)k�/u�?��~�"r��_%b����u�D�|�٦
U�U����j��Ʋ��C��0�H`2�A�] �`��	��vؓ(�dlG7���1Ms� 1��C&|� �
��T�p���*}�°= ��]�ܞ�+�%�Z�n��P9F5bXL� 
���,��"҈"���l��:�Թ�f�g�d�pk�����#\"��1gEQ&�a^�pO�!���!�ElDw�A�!�$#��f��o��?Ԍ�ʘP�­�&�0vw5b!
xv�O�y�W��,�z�MS���jv��:�ՠ�Ւ��� 
�G�9����
3�V���I��H�, [...]
+�C����|�7���is6&lE�q�yX�gu
�ϒ���*7۳VS�2�-�#��(
 ���
�7E��>��3�� ��	4R�Y/�@Xʧu�����F"L�7����~i)Qxy�u`�
�S�-:|���ZA�/;������?����
�
+endstream
+endobj
+1559 0 obj <<
+/Type /Page
+/Contents 1560 0 R
+/Resources 1558 0 R
+/MediaBox [0 0 612 792]
+/Parent 1543 0 R
+/Annots [ 1556 0 R 1557 0 R ]
+>> endobj
+1556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.579 474.868 117.302 486.823]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.749 474.868 353.471 486.823]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1561 0 obj <<
+/D [1559 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1558 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F14 697 0 R /F11 694 0 R /F16 461 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1564 0 obj <<
+/Length 3864      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[o�~ׯ ЇR�9���A
+���*p'܇$V�JZ��U�K;j���sffo�tJ>�pvv.���
��ÄN�q�����o��8�4ד����DN
wD
6�YL~�2*/g�;����|]<5EU^΄���
�b�<�q�����
oW<�t�Y旿�|{����

�	kR�J=��.~��N���	%���g?n5�������4n���� �2"��h�3:��gʌ�B��˷�>�-x�_�n�1C��
+��W&l�_���R��x*����~]�Mb]ʼn`�,�*E�/�!_��}�v8v&%a@�
[h�<5�S�����Gr��..ٴ��f��A
�1�B;mB�xf��:l�w}�a�����]S�͍N�%�Ȗ]u��6��!��vL%��f\s”
��SU,.g����m��m���TQ������}f
iьK�(L��dU�����-)
�.|�T�Pm�J�^���#�xG�K�<�d�T��#ܴB>���$l̫�S^#��s�zn�{�>�2AC�׌��#(�ۉ��X{�

F���O�m�;�!��O�b )qN��{㴙M�J���֑9\ϋ<�m�TF�+��cgu�dEٓF�5��bĩ��}{=P@��:ß���"K��	b�i��i��
h�,�(lj�P���1��LF�Y�Y�:����4#�ig؁
Pv��o^ݼJ,	�CQs�5-�( �p���^�w�	4[R�2$+�{��=���<��+
�5;�I���9�(��a�O�/I��6��h
��;PhtX��
��i�T2
+{�"�|�
���M�'H"
��n��l1��

b��4��OeL��U�X8��gX�I0-�5�x�(�&$1��m��fU�`	9dNf�b@�ѠPг�BJY�
?�+�������:��f��<'�֖P?��A��d���CcO�EJ��2�l gʫ�vΙ#�m��ׄ��%���,㠪����I�=T&�9ؙ8�>�U�,� ��o����rp"^�E~�#|R™=�>��D(��"�
��@*|�h7�m��- {���ߵO���
/�V|�M���{5�S�s���:�	hq�&���Z}.:

1� raS�*�E�њ���1\��+�6,����
�߻Yo_���&1���`D��҇p��ɤ�ˎD!��ha|���7��9�� ܝa]I��+���+6t�RQ�
D 0_F�c�q��� �￴�؄DW�P�w�(K;-�&4�����G&9������f��u�΃�ы���!&��0�f�cV�C�#���-���
f�|� [...]
Jb� |w�~����ؖ��	��@>�S(6f� ���� E�f�b��
:�Y����
q ��q@�� �T��b,�
��
�G�n�庸+�0S
���"ϖ10�gM��ǻ
cd��fh��ۚq��v��昛��˾��b�9ɧ���bU��g#D���?���p��1�.��}h�;f���r�0��E2١n��S�-Q6»��J�#�A�X�GK
+^��R�b����
G�zZ櫘<�B�1�-k�i}&%&�
+������i������KB�<���)�>��P�e%Q`Qqz�N��`m�h�{�Q���m+[?lV}&
���3X%hl�����
�œp]��h�N�J�	��u�@0f���}Kɼ���$��B�y�p�H
q>��B^B"�x�9$&<�`�^���!
(�yYo|���r	�ׄ=$���MS�y
>��/�[�"�fDm�V��)
X5
���'eT��>����P��`A
쌏i=�6���!�s�8ǼE��y��:�^�1H��]H@�k�la�LL��!�Ȅ��$�D�אH��[���&��1����ExU���f���,��o�5jo��>�ǡ�`��
a��}ȋ�soV�#��DJ9����I�
xe��8�d�(�
+ۥ��
+'ϖu
	U���!
��h`���7C���yx��$%�N�f���ǫ��:�W
��OG��!�����Χ1� �w�l��
	���h���bW�]��3�w9�6���	�'��(}
+ۤB�B���}�m�<Ŷ��L 3F��'jf�;����H�d|p/�<�~�,ʧM����W��DF�мo�ft|>�q
��0
�:ɽ8b{o�EO~hn����	aK0u�+��v�5�8:q��Z�p�d~L*�5���y���{����N��$�EM�
���=rc!
+�B��uZ�� SM��B�-����"���3�i��6��*k�~��`P���=ʼI��_Vx��
�Ƿ�.�r��B�x-#=*��?5n�
�|���DW�٬��|Leq�ooi�I�#����fK������`��h�f,^��;mhd�
��>�	N	�
+D�p4Ψ	H1 ����ݨ��b7h�HQ��)5���c�o�Kl[�K�"��K'��~|��ݛwa/�[.X���

�0׌�/��R��e�D�q�Ȥ%��@ģ',S�0��T��6��
ݴ��J��0�%\��3��a��sk%p�� md�qj�O�
TD����jʓ�M
l�؏:�^�s���w���[�& �;��}��*as�������@Wzo�y���f�_��W%�M҉Q���R�~n�M����Cqޤh�&
+ �:�&ł� �TF��))�'P[�
w?��,<�f��7>2������(}
HKV�xXVwm��2&^*��˼|h
�{�\����X��WŔ�eQ�
@2�&�S��4�Ϫ���
�2���5��c�V<l�M
��\�2�u
�î�"$P5]%����� (-Ġ�}�o^�V8��,�Y{hӦ�A9x�V���`�Y���2��o�?	ᇕ{�%}��- �w�<�jŀ�A wL;�8�q�H���^H��%�Y��S0�m�WW#Y�6�cU"�g(�A�p��
]��T
�Ԁ�ds��ٻ�L��mk�^��}�Z��?�׾0i�����
+�6(�/C�䛠�ɏ"��U^���<|�q�J.�������@�o_���q(�_E(�=��J�bX�f{��y��g�<��!:/�
n5Ԏ.����"
�

+m|榓�汭7Y
�;�T)W¥�1�u>N`68�'��p0 �O�#㞢 ��]�a�g��
�q��d}]���u�abJ
.��j�4	�W�V�|]ա�R�{�Ep�!�Ok][��:��U�ag�vm
5�Vp��8w�,�A(3���� ����v v��Zm
+���!�[>'��S��'PY`�0
}�Ӓu
�I
�z�;�>C�!�V�P���D)}I�x�� �+�6]~n����sh?u؇C�
8���Hйtf
�)U�	��,xY`N�DK
a3N��
�������M��ⅴ8�����x�Og
+�7j_E�W����"p%�A�E
��1�v�
��*������
2^
o��
�����x��|-R�\�XBhBY�;v��[���^��CK�5�5���;�_`9?P։-�0J	��Rb8(k}��Q8T�+ f��
[�<C-F[ث'�Xba�3,
VӁ�
.��P���]��S> 8��P5����3�
�
��r��}���zZ�X�v*7|o�E=o��>A��TR�9tg81�J>;6<� ��E���܍|�A�;��#�E��
�/Wn�Pa&�z
;En����	@�m�S�����XP 
B�:\p�������:��Z��x���ݭQ�6�1f1%ط_�����-
�?-����[P��(u;�
�
+��}�
����6�F3�d�	d���
�
+endstream
+endobj
+1563 0 obj <<
+/Type /Page
+/Contents 1564 0 R
+/Resources 1562 0 R
+/MediaBox [0 0 612 792]
+/Parent 1543 0 R
+>> endobj
+1565 0 obj <<
+/D [1563 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1566 0 obj <<
+/D [1563 0 R /XYZ 86.4 638.039 null]
+>> endobj
+286 0 obj <<
+/D [1563 0 R /XYZ 86.4 375.504 null]
+>> endobj
+1562 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F49 646 0 R /F16 461 0 R /F38 517 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1571 0 obj <<
+/Length 3158      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�~�@U^�*a<��TR%˲,E*
+"?�.D��p0 H��>_��.v��.$��{�v����uϐ��{������w?)�
,Xi{����L��
�*�Mz����Py�}�҅�_��bt�n��藋���_�=��1c��
��..>��{���Ǚ
+��9�\����j����?j����]U���`���=��|y�D�
���x�O��@��v����x��}�͡��
��6I�U`���g
+�e�	]��
���� �p6I�.����Oڗ>�Wx_��Ѩ���D�ʙf�
+�*����Q�*���W5L�`��N�j�B������y
Sk!^脩��8W���X~�Sy�aR���^W�X�}h\� 1Dw"s�4R��)),sNt�U
+\�p��D��|����!
ۉ��0m�<�����˫W��kXP4���
��A��g�
���3cDE�W��?
S�r�9ۉ#*�`^�U]C	�\��0m�e�|����TAq~|�^m����i }?{;[NfO���xN�o��l�v���䅗��6{���{w����i�)��t�����t^��xͤ�E�C�jÙְ��+}�n�Q�xIY��,�Oo���������р�P9Ŭq��E�t�Ӫ�x���/�*g��Ю0�:4��w��i�y�Q"��H���"��x�51����~��89݅RC�BV�8��a܊N�Z���2׷�qß�G
���Q�ٺl�����C�w���ţ����b�
�5��"{�]����P�~n���!>[�`������b�[1 �^o����jA���j��p=<:�T�|@HC!X@�HBDRB����m�2�O�GWw�u������*ECT���=
E[� ��J�0<�"E#�Q!��T
BY>6�gq �7{)
D��
!�3ݒր��b�J;� _�i�7*�A�]'\��6U�%o,������P���h�#T��WqU	��Ƌ�H	B![9_���z=�1���|�@KLc���R�ȣL7W��)��C��b�x<�x�-�
L���Tù���o�V���XKZ���f�0��>C)l��|
[5��NJ�!4Ku�.&��b
�ɢ /G�,b��uB�2�p��B h�-+�m�����U%P
R6��q�v A�1��L!��p�,Dc��}'�Q9m��[P�
Eh'�L�I�N���v5+X/���Y��xS8$�o?��	�_�"�H)?a�m1�P
Ci��
�xj))�j���&nu��ޠ�����"#p8a�rg�C=F��w��
3S�RU�.�F$d�l�d�|��dq�q!:��Q۠*K[*˒k����Ɗ��z+�Fb0�[e�z�Q�S�Ѕ�4����Uq{N�!$s��ܬ)
+����E�Ƥ�	�gP�*}fӎ2���F���e@eT:
!5�+��M

����.x��+��
+����`��ƴ+u]L at i*
|+��NnG6Yd��&K����HOs��k�0�~��tjc�6{��
+&����q83t�O��'�h��Q]����2�#)�>��VTG�����,_�Rr�:1��N��[��z�ik�nF:�(�Q촨�6�X�$�D�:y��R������̑W?��dz7[N�p~s���
�nʆ$�3}�/�������F
������5.� �����0k`$��Huj�l�6_!����%�ۅ��}�l嚜��mi׵�U;LۮC)����ZMQ��.vj��2��/�߼�۪u�{�	W��U�u{5 at .�ܫ�g
+���]��B����f��&=�3����c�GE�TT� `n��r��y�����k!ܮ
r����v
[�D�q3����E�xD��-&fw4�OEzދq��0E,�hA!���+,5��A���e^d�d���ͦjXd.�]T�a�&~^ ��s�ߑA���n����;����;A��l�^Ü����i:GQ�Y�
+5W�s�m��Cd;�����ǶMi�S�f-���+Uٱ�ռ�7s3������xY�`Fj�m�i��w�<��=o�է����|�N��y)���^���J�ތ溽���}'չD ������֥J!�
��0V�*�K����J0ηw+�q;5
PA)(mcuvmC�l�5{
~�n��f�k:���E�8k>�4�h
�jw+�xŋR�)5�r�ث��%7Gvl$�{%wK��Lf�ܞ`�����)�o6XI*W��
�")cC��b�eL-�D[�Y�ٲ��؞1Li�W��S@��3dq)�ҫh�
1:�_ft�cs2<W1�=~������Z�;V����7�)\�V("�j�����:�b�	���F�p=S�u=^���n�Z��Ƌ{H�!��
��F�BD(<�7�y]

��_<K�>���
+��B粎��o���
�:,S��̥�7����7��UA�{5���U��
 
�j(9B�ۥ��A��(��XO	ٓXS�s�Ag��H	�N�`'���S'�s�P��)��Y�q�mq�-�͊rq�rV�82�:CM�xQ�`��UJZ�u\ڌ�|��R�/3�䋦-F��q>��>)r}�i�ݫ�އ�.�I/���ѧ
��H�`���"�1����b�q;�-M�]�K��~Zm�!�1<C
K�#8�?��:�^��
3v�G�����e��w�;��)��+G�g���}���7M�=���H|��������9���")i2x��t�]���;Zn�t��"!9S�|\�T j����j0�.$褝O��g
���dk�Q�2oOTms��3?©�[C�s҈]�w}h��|�w��<���\ �ƓɌ��BH��#G���zH��c�Y�
�����M����"�ҿ��Pg�!X#	�Hq�1��%�<��j��x#����P���	w�����6�
����E?a9�.�J�^��b�X���hă�*���و�E2����*�vd�� [...]
+
+m�	����ĺ�c!)��.
�HI
v��r�
Ǟ�l����`p�*�{6�i�k�9�,��
�/ &tb�Ἧ�Ӷ'8�������
�"e�o�Mi�vA?��}�q6�)֫�����kXп������e�a�l˪��ӥn����<{H����v�vw���ʡ?���_X��]H
+endstream
+endobj
+1570 0 obj <<
+/Type /Page
+/Contents 1571 0 R
+/Resources 1569 0 R
+/MediaBox [0 0 612 792]
+/Parent 1573 0 R
+/Annots [ 1567 0 R 1568 0 R ]
+>> endobj
+1567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.431 260.275 129.153 271.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.025 260.275 363.748 271.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1572 0 obj <<
+/D [1570 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1569 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1576 0 obj <<
+/Length 2911      
+/Filter /FlateDecode
+>>
+stream
+x��ZY�۸~�_��h�f`�G�����-���N���őhk%q��4q~}��H�6ê$O�@��������
����/7�^
�p�i�7_V�0�-��f���dT_^s�[�L�U��WY���V.�/x��.
7�>�zq�׿���
�|��o��O7?^��������t���R/Vۋ���b
_~\P"�]<�vۅ�p��,~����F�iwLv&�(#Bʅv�0��
~��x������󓿃��Sa3��Щ0jJ^A����^��P�C{*��}�)�m at GLB-�eXE	��Q�'E�٤
���nkX>�@��Lc]h~s�����.��w�xZiR��	 ����-�
���r?»m�͋o�������Z�t��?�U���CV݅�}���E�
�:�í�*v��%�^�Y~��
h�7�_���|Do>r�F����z��k
�0�j����Tw �Eݤ��0Z��F����
r8Ņ`��
+VS9b O��`�p�{R����d^\.#ɪ2�|!�G�3�C�i���9-��Ɗ+|B3�\����o>�ȷ��bwW~9�P��b^3F
��w��w_C�lW��M�J6�7��kuw� �ѣ�|��#?Ł ���}�w��CU���dz�t�$�X_sQ�2�89
5aWF���T��uz^ɷS8u��g�3�*�"L���6v���
�%*���E����if;`��
��]�
m�R�NS�z�6�)'���U��
�X�4�rv9ODλ�fK�uIγ+
+�fʮ����E�Y�|/�Uc��>

Gw j�CΌm
+���,ئ�83�W��j�H60�
bp�f\]1���
�b����9�^
��S���Gw�66Hv��mB;>
m�`�J<m�:�6v{�!��K�Ē�4Y�xwA��޻ry;��h��4$����<���o��F��
�j������i=r�#��ك�g�#��v���e�R���,ƈ]�EDk��*�oӮ��i��sA$x��S���	���\
�]W�OE��M���hp
��@X�$
+[u�
�Ͱ��Xn�p7m
���,���LH�pd?ڽ�,
��XZL`C*�"��$�D?) ��
+��I���F�Lt�ij�O��`��rb��{�ftɉvSӃe'V�(�|Z�%!��.�+���1��D�fݙ6�/�8�!hE���		�S%���	U
+� �Ps�C �!Q�O��}J)����A�ܠ�
(�Z��1*�Tsȳu�
N���D�
ϡ�:�q<_��F�#��nDhC8D�3��� ?��[��
�
Y�,cMD�'��V�j}^�R�վ�T�
��1@�
��~���m�QMF�I!겉\��t����N��Т��X���1�̣*�@�
�k`���.���E�{���
V
F���A��|S�#& ���� l��6e5��B�}
9���g�õ�*�>ؕ�u��}��(�h\㳌��U�a'@#�Iy
h�
�CD�d��f������˚����@1�e�*��j��3���.�b����v�Ϡ(�-�k
��]^���� vu^m`�̍�o{��K1
v�6��>C{�N-sTd�N�x-��*��{� P��5��Br=�?[JH9�{��]
+hi	dMO��(�]�wE���^��@�� ��Ń@�f�U�yg)VTB
+�֫�A��P
��Ie|��VI�;R� �r��$8�.�~� ��FUL+�K���%C�}A,P�x}�3J�e>���>��*��bWT�n���}4�BhT�,2 �8e�2�|~�|`P����~�Q-P?p]o��h��� t��!ica#
ְ���w�J�r(?愲��p�X�aV�a y���O�Xv-&lٮ�R�i�~2U��,wV�9y_
$��i�B3̓*�T�I�p
yZ�����f8�@�b�A
t��c�]e����Pq�$���aI�����^7�0������CR��p�+��:λ�a$g
Bl�ԡVL������WH��Vچ�#0�2s��qU�=���� �����
�
���Pc�9��ˁ��&�d==�,���
��wv=�
�?�
rg'���N`�6��k=!D)a��^A��/(��[}�/���ų7[�x���?7��}Wם��4zV�/����c{�F�����6��*��n(���O�
�x$��� DW��"��
7rl����
+���B�-^?�˫�n4a�MU��FO�� ��ϛ�c4���zӯk�C���pR�22�:
�Mo�il�1�0E0n�!�n��sH/@
k��6Y}��G9�
H4��?�A�F
�Qu�>z�

L��#���R�<��΅0
��'߄��.c��&-
�q1k#���*t��aGK�a��

�(�&sN08��< kn�cO�>����hC\ǁ��$�	��N�Y�OS�0�0+�⟳
+ޓ��p̐�
s���|wov�Z��
|���J��*SGs�H
+QW��Xߟb٨H�:�.��l�U��7uұN��E�y�^�ў_��6
+96��`
7c1�x��8���	�5�m��l��
gDm[�X�SX�`G�1j|�+B	����O-�c��{JqD�-�CcGH�Ÿ=�l��G�%Aeɽ���h
�D����!t
%?C�i�$�޷�I,<R���*��.i�c��S
z�ة�j4t2 ��9z(P	�B��� 0
�Lm��f*K�@��@�\>����X�t���F����߶�/�
���+:&�!���«��ZvY�:hlm�w�M��
-8��K��4T
�c�
�7�[)�����70���#k�
�~�c�|�!�6Jw�H�^�q
ZR�}��*ۥe�9��X!���~l
�R��p�v��V��'U1��b�'Z\�?V��щ�.^O"�?�Ru�n$�X߯k��	���ضL���kh�0<ܽ�w/O2rlT�o1��
+endstream
+endobj
+1575 0 obj <<
+/Type /Page
+/Contents 1576 0 R
+/Resources 1574 0 R
+/MediaBox [0 0 612 792]
+/Parent 1573 0 R
+>> endobj
+1577 0 obj <<
+/D [1575 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1578 0 obj <<
+/D [1575 0 R /XYZ 86.4 217.914 null]
+>> endobj
+1574 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F49 646 0 R /F16 461 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1581 0 obj <<
+/Length 4662      
+/Filter /FlateDecode
+>>
+stream
+xڽ\Y��ȑ~ׯ`ľ�7DL݇'�Y�L;�ny��y�:��ƚ{R�xc��ff.�H���4�B��*�/���&6����^|�N��ϼfrw?q&S+|f$��-&��L^ͤ�ӻ�o������w�?]���O/�޽����؄O���������,�ݟ&,��M�Q��DfJZ�[N~~���4�g�wv8�ۏoo>|
�)WO�bUTWRL������麂�Ni1��
�..MgN�SsS�g�������x&���3nM��+��zs5�O����p�bS���c�
we5_�Ex���U��v�WM�+a��bs��c���v��-����`����;��P"N��iZ��b��i
�DSp�i�i�I��"���g�
��te�4���e�
��sP��s�̑��hi�-�z=�V�CLfR�^Lf�g^GJ�C��o7W�}5��Z�KxX�_h\�s������&�2�6�B7Szw�������1�^�~� ,�BO��Eoo�߾~��y����ۧ�?�w�pق�N�V6/ì��p-�r[���q��DzNت�[ޗ�,pGW�����uR�iP>1�f�\$z�\������ϔ��&!��j����Xl���
,N�*�2I�Wf���-���';�a��C�|�Z�y�r��^&Bg�����K�����n�:�_-B;���AT�
� �v�sDL�S��\�ZA%$x>)�:!�}xy��P�U�v�4�^~H
���)�bn*O
,y��l��{YKDž^J��q����7?�!�l;��~�;˜n�3yb(0 o[��"5޶}��H�˴p����XRZ�Y��/�g$F7����1�9zz����Q�+Wz���~�q�2|��
ݎ$�\�%LeZ��5��u�W�v�q�1<��oq����I� �M���u��fYm����Pj02
|@z�m�M�G��b��x
��b��T����b�_w�B�e�r�|R��*��,X����rR4����@C`�}^.w�k�Oon���.�
������&���ƭ���r�Rջj�NDw at 2RCLF�������
]���@��a�P�q��}��=&ĥ3���-
+\LUԉ� S{���ܼ�~���Õ(
�
c%�2
A��
	�$��@�1H:��z$��5������Ǡ��3ߧ�N�nH���\��~}VI��+56�c�w�+1y��n_��H�v��L�ۀ?D7a	�:��/�K��?�"�J�
ؐƹ
�|맣�""��6��Y�ì3
|W���ѫќv�r��Ġ�B���
؀d�
�v����@/���uR�~pIl4J]�����C��FH��
Ew)M�2
=4��<�,B
+: ^o������ň!"G�MA{����rT�lv`C����Ӓ~Z�+����+m �(S�b
�kN7��
�
�Q����-,h󭬋$> 
N���O
��q�y1&���P
+�:���Ls7
+UC��T�����4�5�����eB�h�/C M�(-�b��{Wj�RN�r
+�R���28�⁢�$=Р�"<�M�8������{&
+�*��p�
f �]���!
���W\Dx
�ѝ��U�P���`Bὣ�L���5�EWs��<��k�ye& ��X��F�e�nw�a
��=b�G����ě��׽7�3�6��r6_7=m".
F��~��n�?Ŵ
����fWUm�v��S�����q�,
�PA��[��FO�Lj������z�Vr^�•腫�C�{l�.f�����D��
g�KMG.o]�$t@\�6��5|��ۈ�+�0���u��J�?o�W~�
+�ƪ̹��
+��0�&򬟊j��L���������pM2����Ǩ>q���LBp�uT��c0Dz�u��
C�z�~P�a�
4��p5�C5/�m��`�pS?��~���
+i�DN�P��yk
��
�/�o�!>�
�uYTh}xߌ�,�:�r�"�� S�Lv)���Ufm��
����6P�F�!�

L��0\�i����|[��c��
�
�F���L��b܀OQ�0��LK#���u�/���Sh��@�����+�U͆=u�nt9�-�ߦ �Q�+5�a!Xq>�������8!��I��z�qZ��)ߧ f�gx^pM��g{C��󳆪����	9
�/1T,�9��8��_�\��^�M,�ߏ۸��^�h~�q[e[��2XI�e�*�h�o��+�9���&��
 �P�gR�KP#7�
+�81��tD�`!\��3@\C�x�!�z��ͷ�Ml���J�Q`[pp���������p�����9�u07�u�99
+ܧ�b/��	?�U�5s"��<\�	���.&��|��M
<F�Am���i [k�U�"V��IP	���:D���&�2QX�q��ʹ�w�
䄠[���&	-�0G��N���
�9.�1��-����uh
���Z��˧�����
+���IO�#"1�)Շ�b�C�w^�ԣ�&y��R�1"7J���v�"ǡ�C�O����(F�c���Ӆ�0TS
+�is�3PӞr��ɰB����`�����|�DC���	�ejN
+�t,��x��&-���T�����QN�ް�e��?����)W���(���
���
�=��5�i���~�7�Y7ᾩ�QT��S��7,�P� N�Q	z�ʡ�Lk�f�sP�ÜTM$��1qQ�&1�R0T/�%�θM ;��'�b������ ���r�:����`&��gH���f]�w��fz������y�+��Ҿn
o��C#+Z�rg��(,;�6@
��ePC��!�`��P�Rj�P���bp`�s��w���	���%�i��E 2
	 �|ԝ���Yw� W���{QT�m��v��
+��%-����l�>���
�)��g�� ���`ytׂ�O	Vº��	�%��m�Й��$�h�
����7w)e8a�p�	'e8��0���2[���F���(����ߵ���z/���`�`�u?̪�[?6Q�ɡ�Ա�1
+Koa��� ��ʶ<��C
�Ks
+�L:��A���>o��l]�ժ�l�����,ZOq�0
���a4z{��x
��i(�]�Q�H_@�mW��}��NZ��Bɔ�1s�l8�6&
2ՏB��i;$
6�;p_�'�0a2]
��&��eN�]�pb�K-)y���N�(q��F�K0�A.�ዘ`C��2c&
��J&�
K{�Oh�J\浡?�4&�
�u'�zp�\g�&�Y��@��C�p}P��]�l��,�{r�t������JH/�K�	؛>��a
^
��'#q����ٸ�X0@T����'[�%�G����(����Ww�R� ��5xH��4��4!�a�nxh2~wҍ��j		�q�9��fB�""!����YF´�(�}��
�����w?&�b�ލ"$	�H
���fS��Q�--�{�o��![%�£Ij�y�'��z����)�2!�(�=��3�qĠ�B�#<_�9���s�4��E	�<
�m�6!��	m�
��޻D��r��0SH��� �;U$��U
�.DvYf` ��ǡ8�e��x##�}��be?3p�� �nw86�8���d�\��		I�+�0�}>RDbǘ� �d���Hl��W�D��7C�g�=$Qݹ�#�
0����:)|& Ga
R
+:�z(��.����G��"�
_�/�S�6����Y h��W񳪧���������g�*��.�����x@�
9
�Z�O8��nw�4������$f
+4ů��_O���-��;�O�tܔ�b��O⾨�[_��@�@��(T
$�{DS��y����T��1:79��Q��,��=����vv �r�����+�
����V
��gZ�Y�v<R{8N��@.EC����� ~�PR��N��3���J
�V"O�J�n�p�����']1v�1+�����Y,n�=� Ь}����3܆ʺ�͑R����K<(�.�*X
d�8���,q�
`�B�1<މ��?�������P���=�\wr�xE�t��K�)y�Q�G@:%����Y�~A4�+*�~���}{���D�?��4F�.nZ���UC(RY���箊R\�c^�!�A��/��UB@�'
TN���J���6]��͹�
�85YN	��
�
��Q
�+�����A`{�9�b��
�Q��E&A��~58v�L�	��;��`�\3)βih/qGJQ=�wJ��(�a��
8��\��
(NCYͷڭR�
50��
+�[*nH�=4z.~Y<0�<@C�؛G�`%<�a�
)��D��p�C�1c�rF	�����vg�gڽ�CM���GFX����{�
u����Q�B$PZ��5�y�n�<x5�?�ԜؓlJ�һլ��L��IJ�Y��-����z�J�=��#= o��8d,/�驭	�}͎u���麳�_	;�
����o=�8�T��x�-�-�'����N
_NUqHM��S=�!�&a��Q�b��8�M�g{?�a�r�Z�6R�hB�g����ZW��9���+���I����~�
q�q)���Qu�>˘���3b��!�
��Bw�d�x���\ю���>�����g,����?��?�Cs<��6~s����r*
+endstream
+endobj
+1580 0 obj <<
+/Type /Page
+/Contents 1581 0 R
+/Resources 1579 0 R
+/MediaBox [0 0 612 792]
+/Parent 1573 0 R
+>> endobj
+1582 0 obj <<
+/D [1580 0 R /XYZ 86.4 726.045 null]
+>> endobj
+290 0 obj <<
+/D [1580 0 R /XYZ 86.4 578.672 null]
+>> endobj
+1579 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F38 517 0 R /F11 694 0 R /F49 646 0 R /F14 697 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1587 0 obj <<
+/Length 2787      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۸~�_����7B���Τ���M�\s:�$#���R�����@�)َxM_DQ�v�ŷ��.��nG����?&gO_r5��*�F���QD�4�Dq:��F���1c���E��V�jS,��17"Y��'�/��ryu�|���X•%��<?�4���br��3
+���Ib�Mg>��<�u�n���	n	�o���g�<K��5qJ)�)K	����/���(an�I����g�g�����1��
|P�o�1��]N..'Ѱ��g�&kS\�cL%���zsq�j�������v��q�.�x{=y���ً߿Oi�]\o�Ty6[ǚ�?}IE��c�fe�2���cJ���m�I��˫..(c��r�#��Ǡ�	妁F$ ]�sEe�����U�#$D���X'�u>}�
8�
�&�M�|)����d�M+�.���$O��v�&�p�Y��sB_���&w�l���O��b^l�\����(sd8Gn��xw�*á��#E��~I��98�e��߮���$5��L
#O��P)a�;Q��hu�O7˪km��4�#Ρ H��,���4�J�l�.n�E�
ճZ
HMm-��N��˺kg�F1X;�*P{����V܉bG�͸s�ATr�nk��Ǔ���ͅ$���>�
��5"�D
�3bG�!�6�{�����Q
��&w�R&�|n
T��b
L�EW�$�7P
c8Fa��4x"C2je=������~
;Pr��_@'�[@'%V��v/(%�As4�j�V.�%LJ��
+�
u��:a-Ȓv�V���X�
ۮ؃)�\j#3�$U#��(<� )%�܇�H ���ݬu� �N� "%��T|v���
�Qs}��b`z<*�%l/a�Ϋ ��(X���c���QPe�m��n���"m�[W���X��C*�ȉ!�6a�c���9�f4���������	��ugFS\�ڛZlZk�Lˀ
�Tĉ��j�מ�!���g'�a���}���-�P|�)�
ua�q�k��&B�]���PQ�"L7�-��
$�r5�
<���ၧ"�F*a8H�҂i�w��K�n�J��
�^[�ze,(Of9�YQ"4�;�y	t�=/:;F"J�
+�&s���$7&H�vX�M>��҃�NL�C
����Pme�Ce�X�k�u6���1��iƺ4ST�h+���>�X�Bn�y��f�u8�t��r
F��~�l�ϟkz�BV��gEy[+�����%�?=�RH,� ��>�XjJ$������ܾw�%D"�w�F�9�%=�:,u
4��
�la��%e�Ru�B,
N�
+ip�+(�7��[�r��RC(�z*/�4� Rs޲ %H�D��e���\��C
3���f�/
/�H���孠���@m�\�9,�f9���_=��Y6�
\C��O����5L
��EL��v�X�N!�
���U�=aT��0
(�=�x���P�LCw��2�z�zB���#��p�]�3���m9��2fe2��l��GY9�f������"_,�o��c#���Η
���:����G�/!Vjp9}��82c�(
+�G�c�Y��ֹ��
f\��	���4=ځ�[���[�hZ$jN�v���W����"G8U����0ϗ���
��KtW|T��bе�Փ�'�&F������#

+�L��i<9^�?�6�զ/�@�N��SUC���U�Si���P�m秮QV�����t����|��&�^H1��e_&/�])���2�AMq�
B�J�,����_Z{����
M]��^�o�t5*Z- at _q�Ⱥ�(Z
E#�^��SFR�Wj�������Ͱ��5��
�-98F
*��f����%v`� Z]�)=�,
P��n7�m'd����'K-�d��d	�5�R���
��Q��?�+0
� �8^բfA������<�{�7��PP��y�u�Ӷ��hӊ*���� &|׍�8C8+V@]7��﷨���G{Āb{����$f@�=�$12�3d7R��m�����:qH`̺�񐀐d8 ��7�V�e���5N��6T��ֹ
$T�(��]=S�ޘ� �=雥������F�S89hJ���;�7B�i.�CXd����NK"$��c�]Xi��u�ܖ=�
+@���(
+�
�^�	
,�������B}�Z7�'�s�$|���Iz)�LjbS~ ��(��YP6�<�0B��8
e����!YH�B2�M�e�h��hv
���|������P�X3�e�:��2JnAP&�L�l��}��}�uS*�w4ӗs����%v�{b/N�������޷�C�w��	
�:H"AQ����x<���!&�w�%��a��������[6����!XL��k���!��y8��N���(3�< ��
KV��֍d��i[
<�Ӡkw���f�6�A�}R{�;0*n"P����T���}���'�hj���J�1Q���`�!�蔅�cN��҉��>�Bq
wv�)`
+SZ�S8�a���eh�
0$�rw���D�ݠ\�
+N���
C
�₡ 3�<�;U�f�U�N�B�<w�ӊ3w�b�$�n�le��|s��/G\��� @$Ӄ��F�[ȯ�͛�l���
+��AtkE8��H����/>(����7�
+k�����b�
���HY'����0����X� ��~(�0�P;�0H�k��[U���v#��!�JI�m��
D��
+�0Ԭ*|c3�z�.�(�o�%�;��v�{�U�L����E��l��|W�c��SG�ۡǀ��†�=�
+endstream
+endobj
+1586 0 obj <<
+/Type /Page
+/Contents 1587 0 R
+/Resources 1585 0 R
+/MediaBox [0 0 612 792]
+/Parent 1573 0 R
+/Annots [ 1583 0 R 1584 0 R ]
+>> endobj
+1583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.295 520.385 128.018 532.34]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.531 520.385 357.254 532.34]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1588 0 obj <<
+/D [1586 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1585 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F14 697 0 R /F8 473 0 R /F11 694 0 R /F16 461 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1591 0 obj <<
+/Length 4431      
+/Filter /FlateDecode
+>>
+stream
+xڽ[m��F���_!`?�fa1���9��7�X�'ɬs at 60h�3"���H��.��S�M��Z�d%��l6����婪f:z
�������_�z�%��zt�0�:�#óD
6���~
��j"���
�����ׯ���p���__\߿���`鈍�5�R�u�ק�?���fx��Q��̎>��ˑH�0�Z�~|�}�
��IfM�����~�~�폞�r��(�W6.��xu%ظ��r�B�a��Y�
�֧+��Rd	o	L���3�0�=��뺨���[_�a��6�dR�&
KK��)3{���+�
+��O�k�2
/�Wn��r�����W܌?]����>5�]L��'�}uE<��p[W������+"�7���Ӳ!����"5��v�
K��Ûτ�o~o2��Dj�R:p�}1��aM�<��w$�%S
}/�O�qY{��a���&0� ���#��:pj�{��T�q����Վ��x4ᘍA�'�%�ݜ
���x˂��MN�_��2��73�IEC��C�rH��f�t��s�˙M�T��4~�Y^�W����w�>B�V S_�m���Oķ��_Ef�hhq�Y3�(��ެ����#U�'��C���
+V���m����N�EUE�����D2���#ev��I����pO.�(
��-e��z^��e��ִx�R&�'��
�b"�p�&�t�F��J��c8h4�-��T�2�4�U�
ΰ�BW�HZ[rS��&am.0'g���;i#f/˸�Iյ�ͦ8n:�
��M1ؔdȿL��\q�<������G]Lľ3����
�#cgm	GX;����~[|�^>�_"Sk2X�"Så �~�T���ETjb�ΧD$9P��L�
�t��j�L�1�m�k�����ȴ�2��1
NX8�y�9�L
�N@
S�]b
�˹�c��
�G�ࢿ
>)x�q~	:$|I���J��5����3��g�
H)��ކZ��]�
���ib����56�C�W7K>�v
��oM�X��`~IYW���	���`j֟W%��#*�0S���؛;­�����9�X�M�&lY�w��ͫ��x
4�V���0k4�Hlʟ���j��տ������K�d	ٻ
̫x��қ����*�EM��"Q,4<1F_�xAD�#\��H�7�%��Xq����
,� ҎW��_�u]�b5�
�j��l��)=�dx����>JA�����cV�E�'���H|��F�]L�%��X��jHK�75:��<�
�҇�e��b�����"�a	����S��	�
!���6rBе����}p���u���?h��p7+/E�vJb3���yU��K�C<q�@�:/���ܢ/�6���MQ5tU~,ɇ�}��bV��L����
C��.O1�I[���'p6��ԭhg���WV�ia��������K�1���
�(�_��$8%2�;>B�=����*��"
�2��ޚ%�m��ԪŞ8wkX��M�lX�E*��ܛR wgp�4o`,��)����g��
��ߣ%"����ܥW<_�x(�z8�˭�F����	�9'�U.�
+�3�!MX3�Y��4��ω�,"S��
�G�#�-a��q�l3\�����{߄
o!
+���o
+��H���7@�o�|�[6���ޮ�
^U�+�u��nr-��T�^FjD���>H���h��p�� RԩXU[�Et�\���fg�X�m]��ʿ�7oLa�������
�
��!0)3�6H5B3%��I&a"�PC
�)(�}
��*�j��X�g���܁4O7l�,�!6��|b���|�{#
d
7��w2�k_F�ċ�7�>�n��s�vC�k��z�@J��|����M�Y�or�4�[oH}� ��4t]���l� G�3s��J�MT��V%�@vfV�e{m�0�*�X3l|�
- at XzOK�������fU
�Z,�Y_H:
��
+�݀�����S�H|�Z��&��ܾ����i��zF�v�����
%��ps�C<�FYA���
+"�t���UY���yc�	_�Ud/��Zg'�R1����Se��T
S��?��o�Dr�{���-�m�J��#��#_-������>�k�>)LZ�}�W8_���r��N2��И�ނ�*Z[8� @<QR2����'
��_|hN���=P��# ��lo`qr��_�V͕I�7�|>���ף�@"ڝ#�����HQ����$̘�`8ט�0Q�b��YtVj��2P3�٬�.��f���?ɛ��2�[���׾�;ՀZc!
+�-�k�m�2��:Zʰ��-VB�v�����d���l�vI~ࣳݮb�
���g�K�-�9|׬���&W"_ts
��C��G��"��0��\�v���1��m�8�Էx؄
�
Wf�t|�����C^. OB�
+�P_H8C�*�m�5�S�g
���}���9܂�
R��ǡ�y؏ne�G�tm}6�f�}��b�]M�к1e�
�L�Y
"d�R���z�Dt�y�P]�SG\J��7���b�cQ���y	��cN�+�S�vE�.]M��Ҵ�7�f�Z�}�A��nO�������r����$�[ͽ�q����E
�E��n�K�]�J�܇�#��
Z$ER�w��
��A�p<b�)cnl�/
L�vz�m����q��p�K��sd�@H��'�́��V.ꡙKM te�N���=4�e�J4���`Kc�
Q�Wn�D�|�G����c��
��8�*JC댟F��0Xw��:�e�SG���B��	�ܓd��$���]�WY\Ts'�>����}��B4X�N\���v1���Gj|��_��z
�[ݴ�U�di������ey���26k���K��?���U�#j3
�9�������!=���\��O�m)&3�����Ź���s�O>
��|
o�|��6S [...]
+�@""���3�@��9aŽ�$,�N
�g����*��V%dzb����+}M��JD&�����Ί8����
%���s��e�ðsR�e~g��.C"t����Y\E�������"��Nں)���Y����H%��,��A�9�xF 죡�0����/�
H�7�_WUo��z�	��u����>ik�?�
���!D�K��f�X���pg^
N�
+c�"���2� js㟆�tKp��]o+�ȟDs�ړs
�������
��70
)�h�1���&2�*N
+�x^�Ɛli7���D��T��=�˶����|d1-�8W�k-���+6ռlj�@�fϲ���+�p����03�(
+�����Ʈⷅw�)��sϝ7u/8�A9YX�L�rA]����i�G�}H�6�9��)��w�~���ބ
k��s�6���~���Q���Z�J�c���V��V��]�A��S���
�G�����ױ�����|���}!�h��1�b��χ�/ڙW��6��
+H��F`M�d��zk8w�-ESI�E��`��<Tp��]v�-���F)C8�ɽ�x$� O�
�k3W\�I�yǘ�iDW4�nJ���L��S<8��1J���<�$��S5���f���-��f]�k�5x� �i 
��l
u		��ڇ��@��\C�N��U4Mez����*�:�quF!��MC���x
�@����ξ$Mr��^�1���0T��=CNX�FG'�;�J�27�1�m��N�u\��eQ5E��(����CtQ�W��@�'?_8\;�
7HG��N��ӥ
+K���G�_��������-�3F�"k:)���6nB�<��ei��5�U�
�=z,��4)�N���u#�{�^q���xRCl�w8t�8 �����ZB���w�=Ma.��NC��I��Tr 7f_YGs�-���e��G��.��)v(�,�t�-"�C��
t��(j,������#��ncC���@�v�O9�'�]]ʏj�ϣ���Ė�l`���ܠ
�윋��$9���H��/�|���ٻ.�! �p
��<���͵�7B0F
w=w�#�2�	O���O ������ ��a��])2,�=AB��@�q������� ��n����4+
�5��D}���+y����߽8�����
z�ݱ��ǫ錀�����%�u��#��)]`J)	)ug�B� �Jd��ChczsF�ELl����K�?�2��3�g��Z%q�$�8��O�%�8����)6e��M�3� Y�S=��v}����b�͸����i.-�?$J0�\�Q�J���%���oc��㻋L	�����45�H&hT\bs�eP��b<�k{�=���݇�! ���7�Y������p���������g�
�  vB�1ʉKen�H!(g��RC��֕��G��A�d��wY
+endstream
+endobj
+1590 0 obj <<
+/Type /Page
+/Contents 1591 0 R
+/Resources 1589 0 R
+/MediaBox [0 0 612 792]
+/Parent 1573 0 R
+>> endobj
+1592 0 obj <<
+/D [1590 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1593 0 obj <<
+/D [1590 0 R /XYZ 86.4 701.138 null]
+>> endobj
+294 0 obj <<
+/D [1590 0 R /XYZ 86.4 452.084 null]
+>> endobj
+1589 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F8 473 0 R /F48 619 0 R /F49 646 0 R /F16 461 0 R /F38 517 0 R /F11 694 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1598 0 obj <<
+/Length 3330      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�}�W�*/Ԗ	�~�TR嬽�ڕ
/�y��T�8�Y�H�����s���P6�I^Ĺ`�
�t���7>���o㳧�+;,Xi�끷L�
�*1Oo�B��A���b}���mf���Hy=\^ӯn>���͋��/_���K����~^��1������_g��@T�
���n����S��y��
+~�1��
h���|�����xSq��[���&�Ǥ�v8Y�g7��bq.�pC�<�^7?w�A���=�+g��ؿr�Kcń��Q�L��9-rU����|d��%�\��WBj���}(!�f��:<6~�"�Z&d�E��ZZ�K}5~�
������L�z]��fݲxZ��S��S�,���y׶x{�C(��Rk�LP|c��
+���wx���釛b��V_l*��B�֛ts��=���E��%-#�%�W
F0�`J%��ڲ;�H�����j�n~�aR�j -���Iq��� �fl�I�$�Mq��|؟f
��z��G�d��A��}��{�kS���r
��>8U�����mNY���2��q�Lf��.��r�P��[=Y`�	�3E�
<�u��������^!li�5�ޤ�'�Մ�|·*F�}
�
�9�\%όMKVJՖ���ݸ�h��E���d{b4�i�Е�����3Tj�o���#�7�>M5�X���3�6����/�t�>����5�,gA��[H�Q!� �  �A@o��
+�.�=��a�f�<mU�cW
+]F�s�v�"`�N�>t��b�]��//.~����ho{��h�s��,vϭ:�9ىS˸�e�<����.`=<s-Ś$�ͦ(:��|H׭~�S��pc��(�×�
!K\����b��r��=k�$�&�y�W5�+�
+�@8�1�$��<R
�J�t��|f���Cn at X�:�{(��ر
��/�A��Ԕ�4�9�� ��,�=l��X��f�4��Y�iB[d4��4���E
+�
-!��G�
L�3�8f
�@G��$d"�QW��I������;�1�
�J�A\C.t�aUL���
Y�����,�aG���m�l�)�A(��AM��_�x�����B�wۇ`�Hm��wGLϜ��"&�1=�^La�@�攊�>�j!8ێ��Zm�P
�߆j[�f�� ��U�`UR�f7G��y0[C������͉H(��0oe�a>I t��Y
+�#-x��

+�1���d�0K�
�;��+���ؓ6�Ä�1�{чL�!�y؂�	}�ED2��r��v�0��^t����եa;r�C���s&)�k�mA7����\0,
+�5�����cEoJ�S�
n�
�~�|���i���,Ä�pvZp�p<!���9��J���>�R��ܣ>+Q-�D�S��n��E��Oh'�ۖ���G�׳EQ1�˗������垉�m�컗��f��_���b}]�I�Ri�/)�<_"�b��#
����_"����a%���y��Ѝ�
�K�_
�N�p;����IW*�|m���ԟF�a�^��r��B?aV��j�<����Q�e�����`};�ˬ�z����2%�7�2��|3��*h�a]%�˝�q����V
f���<=ji�&~��v��x�>���,�V-�\-ڊ
`e�:�E[dDv�	�^#�Q'�F�?���{����>]Ly��ӔOZ��
+
�c��#UH��ahu<��袶>����;��Σ+D/;�-��C�!4�+�
-�ȓY{v9�<�kȷ�z�J4dͱB5�WATl�#�;��������i<��z�jv��0���ֲ�QIk����X)P4�a#K��+�s���q�ur��h��;,
�U!�I>	��d�0$��h)���C(|I�n
+ͱش�L��xc:JoM()�yɖ�
M�I9��\��C[c�3%��"��GA��ą���c�*�"sM}Z��ҤZ�j�������v�i"x
���w�	�%�e
�M��{~�9o�,a[�ۜ#��t�p���@B���5��nwT˧6��
1*_�ϱa��-��q�]V�v�GNw����dj<�d�,T1+k�X<�1zw��
�ߩc�Aq���L�0�3�cWT[�r�֒ W�(�sR��xNj�5�
+:� d��"��lou�����
.B���L}�_�g�M1MhH���yqj�HG����3y_��J�)'��g���<dF��3A�J�V����6���W�ѱ��� �����ٲ�HmOV%>�7����rN@`7�a6=\�c�[(%
a���;���tAt%\Eo��1����솵�[�_�:� R��ȉ�� NJ~$����+)Jx�XoV�O-��,�Ћd����"�^Zm}4����� ��\E[�Y徃�i�&t0t����
���ăgZ�C�t0vK���a,�ϢO��߻
��r>��?F�V
'�錜�d^m{a����~]�FT)����jy�����J�.�LÍ^�c�JIf at XN�1�'T�+�>	����I|RS�	��Sy������UyJ�#s@'��|5YL��	-:

�J/��mq�\}*��̃��\�
Rgc!���(؋�SHF͉�rxJgE�JY�yI�H��V7�U -
��29��� $
j��67���*��
��5����:��%��Z���%Y,��-6�)���2��d�M��F>��_��v�F鬐��������w��P��P6?U�
f�I�S�L��tkɭa�T2��4©ܸ�ۉ/;�O�ھ�.X�
�*#�8i��bO�:;q��4f���g[SIc*�Z�B_�
Z�L������rടlF��eUTԍ�"�]����3�if�F������l����^�]ي��u�Ϣ-TRV�"�P6��*=
�=T:�0A�ۆJ�D�
/R��U��gu��>�a��&lt�L��>�]E��f����_�k�v7B���i��E�3B�J�4U�F�XnZ�&"���b�9(7
�) Y�[��u�A�99
�ǜ�H
�!��|�1��f]̯ٶ�;)鸺=����x��tW�L�y�ۊ��1[��N<�V:
����1�;�T�f�����tZ��#v�RH��5�p
�:��� �<_�Q���Uh�eT����5׫��b�z
Zos�Wّ��h{����{�$ز��
���vw�2����:>�-�����)��Jp} 	A� �Q���N�B��6Ӣ
�2��h��6�emA�^5�L�	�%���d�^4pL��q

"
�����b�����8�k:����=��ާ��)GS��''��J���;�����/'��8�~",�`? [...]
+endstream
+endobj
+1597 0 obj <<
+/Type /Page
+/Contents 1598 0 R
+/Resources 1596 0 R
+/MediaBox [0 0 612 792]
+/Parent 1573 0 R
+/Annots [ 1594 0 R 1595 0 R ]
+>> endobj
+1594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.418 373.238 140.141 384.086]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.688 373.238 369.411 384.086]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1599 0 obj <<
+/D [1597 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1596 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F14 697 0 R /F11 694 0 R /F16 461 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1605 0 obj <<
+/Length 4162      
+/Filter /FlateDecode
+>>
+stream
+xڵ[m�۶�~�B�����
�L>���\&�^�;�$�%��Z"/$e���w �$��D�'R$�����.V���"]|s񷻋/^p���*�w�F������n��9QD^^qÓ��
oDr�����������w�]P�,]�5�H�>7��rs���b�[��[���Zn���n�xu�cdԦ�=���U�ӗ����ϣ�<��M^^r��Y[T��5J��R�?��4I�Pss���-
�J�"�b<ה.�BYJ�V~���T�)t�}�B��G�^��7QRM��r-�eI���r2e�>�����:oں��:_�U�������`�K}�I0[.�t��}�g�G��Ÿ��
z�p#��ܷ��/�z��w�r�7����<��䛪�������b&Yfm�
+M��ߴN������tR��Ξ
b���kYm�vҠ��k��Rb�E�v��z�#��
����`�R|F7�T���)-���=a[��О��d��ub} ��N�u(Vh� sdDS��F,L͵�T��1a2����`߉��v�
�����k��J���g���5�3"A��0�Q��t
+�5_Hg�A:N[9?$JTK�fD�%2���up&���(�o
ڈ<�H�`g��0�z�<)�}�m$"�+GS���
+�
�dr�&�o�Ie
+-�ɸ���<�w���q�-�;>a�H��S��`�ƞُ0C�Qg�#Е �����>/�{��[s��y��
+<��=�>�$�R�

��i�=�H����%M��{hV"Po7���o�u�׾�Crh����繧#�mb��N'��~GQ@�z�Ψ��?�KgV%�5`<?�*aWZvn�.�[�W2�);˸R !�ag�H .�8-z�
P���

zEZV�y�
��S���O#�Yms�B�}�+�vUm#��y3l�6 at a�
��y�F�0�+p6���x+��M��͜�R��I� �������
d
��&�Vp��½��}�Qx��6��U��&���{�3�feD���\w���p��2e$�'9c
+� NB�a,��67ÏO�:*�.J(��JV�9�"y�e�{�
��|kx%�&<�޶YQ�t���h`mSB8�`
+)
\;
+??YD�P�ҁ_�s��B�)����P�Q��g<D+��ͼ���ud*u��
�@���t_?�{Հ�3�,�C��Qo��❍GÞ��g���b�L�m�
i�7M,�I�4|f[A�{�s��[�@bo[.~��%���B^����{p�����l�=0 ��c;�P��hzLw��M,
+�u��1U��
�* ��iQ�F��Ek�\G)
�s�i�-�
��IW4����6d�b�2K�(�wV��
=�m�9�v%{t��?
���2$
�O
��
+:
���Փ�
K����M,�$��g�:c��R�#��ydT) �0gVj��RbW�j�1~G(�\t��:�*���bGx���9�<�����D�^�M�"�0

�Yvs����-�𷋔�����]����
[|]�\�_]���F���L��������"_w[m'��  �Y�Oe,
��p=~$�N�����A�m��s�f߹S"i?��b�7�����O��<ҍ6H�b�f3Y�@�Z=n�ǀB�EM���xb�΀��gY3B��<�������a �Fy��9����f���}(�1����?$A6P��W$e�v�k
+���Բ���RH�i\�!<qlC�$3��e�:bؔ1��p��@+T������J.��J-��.E������(RJ]O�У'V�1C�a
r/=�u\K����C
wDUL���]p�$��5C���c at o�xq�]���l����a��e�5����0�h�e� ���rGu�tQvS�-�E�
o���U>9
htd�R��%?��0˴Ȯa̳q<]à�X�� ��4<q���&�������>����m
�R���]v
[U�0�v�ȍ��^{�P5�	��fP~�-bG�Ƃ!���>���*O��
+bJ�]W��
��a���z�ڟ�ㆄ�r��,p��K�dCj� 
+c��?
�
�O���[�ON�
|��F�Si�J�Ek TR׿4��L P��T"���O,��o7C*
����
���(�����;|�޴�z�+��R� 	ӭw�{��2oB��.�.#�e�@0-Tr�R�
�DBbB�
�
 !l�ӈ"��f�ҍ�Կ�����Umۢ��q�}��c}�?t>�9�t�V
+�4���.�;��X at 1�Lͫ�;0����:�����3�!ё!�qg
�~8&��6�7�& |�
������ۮ]
�X�9�(���-b��Ϋuȥ7�A@�+��z�����_·m���}}�-CӍ�K��:G�6����G`0غ�DD��$S��aW��G@�����D�n������!��|G5�!cc�]��cy�ӟFEB
+DD
!�����ۻW�m[V�<
W�<����釻o_>��������xN�Z��F�
�
8^��h�l��1C�Q�s���CU��VJ�!t�
�!� �<a/%�Ũ�J)~l/f���t[F{
+�(�J�E�8$�0�������<���^
��a��G������7���ѻt&K�`�i��K�%�X��f���=�x��V}�
+f]Gh"E^Ow:�G;��(a��3N�v���6�?
�����1'tl�\���T��UGw՝ �I
�
+�u�6�$�1n�*_����»ʿɺ
��M��^
?�O�U�a��h�Ӛ�xv��,V�B
��G�����X�X[��:<cF)�)���e8
+wgG���L����q{r��y����C�{
|_f�C�߶�KÑ}WOÝGy_Z�yE'�D�.+��PB�
+�?xN�B1Ǣ79*����d�<\'˸%
3Kh�sŨa?ƅ��i0�����v���Ҋ�Rf2T�ҎFJ.�v��+��L_�s���T
k*�o�:��)`�5 �Ԯ+L��(S>�����V�]�<�(�(0^[�_�j]�^�Irw�����]`U������W�ÁWK�t��\�����Āwh!��,�]g]@�%�`vM/Z�e��Gd��=��qey�.� (�
�My}iD_�"X �` !�I~��t ��>�y
�G�����se�n�
n�g�	Pd�
t�=jX�2�<�*npj�:6
S��=,�A��G�
υW��.���4

��CRoy)�J��h�M5��?Vp�G��8�;�d�0�Yv��'��Xں��<�/��w�)XB��G�/M[o���񧫨B!�D�69����:�O�P��'���
qX׮�^��;�&����_�:A��:��D��n��z/쿮�չ/�V4�_ ��a�9r�כ�}��;��%�0FSW�{R�����]�
,�jP�q ���
�v݇��n���"Fty�q�,�Y;��m-��˘bu�Ύ����p��]aW6e
�)%�)�?�S)aL�(H����ǂ�H��7��������С��
� !oXb�R�TBh~_<LKW{
�@'E�?D�����-|�j�Ŭǵ�������z�~_�V���%�{d�D�i���r���S���0J\x���MW��̃�P�o�����F��
��/�]W�)o<r�HW�;r��o<BE?���yV��r�	�ߛT�s� [...]
+Qa!��ұ��y��
��7��WH�R Ȕ�)ģ)�'���P����)?I�*���O�?B���hl#��ۢ��S��•Nc��k|0�>|�w���x��
+�
�v���K|z?�©�)������W�ɠ{�8�@R$K�ߗ�;��l�4{'��sUT�v����D�O�&)�x*�'l���u���.�:��W`pT�#�"�Hjg� �s�9�4�FL���Ep�7����	��̰L�m�7L�����'�aw�8j��h���?�E
+endstream
+endobj
+1604 0 obj <<
+/Type /Page
+/Contents 1605 0 R
+/Resources 1603 0 R
+/MediaBox [0 0 612 792]
+/Parent 1608 0 R
+/Annots [ 1600 0 R ]
+>> endobj
+1600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 49.928 100.126 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1606 0 obj <<
+/D [1604 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1607 0 obj <<
+/D [1604 0 R /XYZ 86.4 531.315 null]
+>> endobj
+298 0 obj <<
+/D [1604 0 R /XYZ 86.4 284.078 null]
+>> endobj
+1603 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F49 646 0 R /F16 461 0 R /F38 517 0 R /F55 746 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1612 0 obj <<
+/Length 2506      
+/Filter /FlateDecode
+>>
+stream
+x��ZK��6�ϯБJY��'�c{�J����98.-rF,S���<�� _�QjX��@��n4�~B��v/�^�����7\-,�������("�Y�8]\����l�b�2����*�7y�[��Qy��<j6���������_�%��(�+��럯^__���xA[F������O�"�/?/b­Y<8��BpK�����s7�r+K	��˽Ivi��˕ �,����GE��"��AV�p߿�r����R��Rn���<�/h�����n�ک�r��^֞e}��%6/�QjPW^{�@
e리�s�~W6~f���REI^$_@���M;����!o6^<:<O�9�k��vi���FV�j"b�XQJ�
J|��C-��J�ĥ��

+�d�M��p����M>'kx[�q��/mT�=<��^�~��1]�(i�����,K���`l������+RO�=�H�f�上�d�3DƦ%

f�?c*��y��@9ƒ�٠
� ��2<�w~��q,��D��DB�n�fS�QZF��uj^�hTw�A
+��C0��:�
o��d�/2G�v'�$��qw�Uqd��Z�5](hQ��r�c�Y���K� �`��SA����QRm�폵�5Qq�
+��WΠ��4K���Դ L�񩡮��b�6��n����������XTRb�RI	��@�+`�S
+˭�:�]��`�)(���4"b=�ߐ�ѶslA��-*��J���ƣ��l��{u.��t��yK��m�ﺺ
�����!��  o>y��`�`��b�c���cZ�s�W���j՛�w�.)&�
+����WH��͐����O���,<�H0�
����,T�
�c
��"�1��'X��XO
RI/ �G #^Hm�Q(##F��^����]�ENJC̆�1�
��u�a�y�Ǒ��.7�K��;�� �MUn�{�Ppf��z	��e ����a�p�����N�
r�ݭgݴ��� ��	���hf����p%	+9m�O�Mz|A��򟱌3rK&�
B	8�wSn�ΰ*�4�v�r�*'L�ZCL����b�!.�
%�
uG11���A���l(C~~`b
+Λ�'^
��%�;�ptb�`wO��v�=Hj�?_�0�!Eyf�F�� ���4�1Y��y�b� C4�E��U�uR��=RU�5`��#;�͈!H�;)(��Ҽ=�挎׍�a���BAb��<�}�a)Nl@����v�LAX;��3�\�
+:d|
+�+	~��y at n���ڕN

+���򇲮���§�����;dL��2?��>�wI�S�`��gY��C�[�2
4ߙ֑�S�ˍ\����q����Q�5�ƚ,|.{��Z�B��^V19Y
aE�5
�ɤK�n���eb��X֩��
㄁�����xL�	�x�9(p%�ħȟ=�0l����ϯ���Ӭa�
;*��
�|Q��@�|��AQ�
�\d��f�'��:yb�mQ~�&����9�¨"��mm.�!
%B��1p)4�����Dk�
+ȹ!���UƄ�ӓ�bA��]����r�.�w���
/�]{��_�ZZwtU�]Uau��D��o���
�	�d�Ľݝ�O�;B�q���3�����q�S�?�>�g��3� d�18���u�t�Y��_v
J��a�mK(@`,�~�ݘ�N��c��y{��Yqs���,	4x�I tb�:��!�w�Oۭ7A�K�k�
T����j��vk�o��Ét�jȤ�<�5�K0���
�d�Ԥ�b8�"��j�k�s҇C�ái�!�P�Q�1��o��ǐ��0:���8U���C<��4� ���
�9���Ő��Hڙ	E�HXI�PLx�3�|YU�D
+
+՝�)x�
��5b,�IXR(��k!N$���
$��U�m��>�
s�-�` n�^��7�iۡ=(�a}R����L�G�>�
��Q�mcTt}�7e�ps6�B�
�� �]F�D~�y��
+��e�c�
�ƥ�9���
+Y3�
�[�Pc9N��A5§|.3�
��
������v 6$��뀭=
�66H��O�;5����-Z
�b�EY�/ܼx�t�� N�ۃ�Ӕt�n�J)�໛����E�o�FF"^d���O[�a4�)�\����Qs�"�V�������f�9�`|�#!N�!�;d�|��,|�l�r�4��j
��F�[���
b�� ����OW9���ne�9�]\�1�L���g�b�C���X<��BZ��n)F���������e0#�
\+���@�p��
�H 
g|�d6V��X��]�[��� �2��X�3�}
w�i;K'���/�&��4(�s�S�7�O(�D4
2s�!8P��Bm����u�K������.
�ɓ��w������sg}b)��,�jV��?��U�]��^}�9�J�m�!ӓ���By_�Pp��p ���u�ƾ\�/��v;�������h��"��<����k�0���lN���m��,�J�
+endstream
+endobj
+1611 0 obj <<
+/Type /Page
+/Contents 1612 0 R
+/Resources 1610 0 R
+/MediaBox [0 0 612 792]
+/Parent 1608 0 R
+/Annots [ 1601 0 R 1602 0 R 1609 0 R ]
+>> endobj
+1601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [330.574 654.314 342.529 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ex) >>
+>> endobj
+1602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [182.976 642.359 194.932 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (cite.arkode_ex) >>
+>> endobj
+1609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.908 627.55 414.631 638.398]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1613 0 obj <<
+/D [1611 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1610 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F55 746 0 R /F16 461 0 R /F48 619 0 R /F14 697 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1620 0 obj <<
+/Length 3991      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[w�6~�����{*�����C7M��i�i�f�
Z�m��V���ݳ�}���IN��"�0���
��F����?�.^��(�҄'��ۑI"9�<��FW���q%�a���>�9~������|������.��`�؈
)e?7�|����[<�����8�=ږ����и��>^�K�(5z8���>�rc)�y�ȗ����..'l�Z�oj�3&v�g�"#�CC�"�x;������EL'n|�Wu^َ��^�a�?+�R�&<�T�?�5fz������m��{�x"�t\��eN�f\T�Q�.�<���ʿ�N��7����	7PD�Z��[�Q����x#����ע��]�
+ɱ��(�qd��<f�򃾄T���JJ��ʧ��
�aoF��WG��A���Ok��A[	Ӯ�7}�(ƍo�+����u(.ٸvK�,h�c�`�3��)-(D�&��(��M�R\���K]fS!���o{݊Hh�t|O���.�����uO?4t+ �|�Pd�9K������X
-8-�2�Q���E�	+*i�O/'
+��ww	X)7�^�ep|���>��뽶*�����RGV:��Y믱���:ӬY�l9kMe�ֵ�	<
ᄵ=R!���6U��0
1���r�.��Y�F``�9[i��v����jYE��#�Є�W�ӽ�*��k�d�K 1<�?	c�%bX �4�
���_/��S����O�Z#LI6��|SZ
Pg��F�Y���~�~�C��Ϣ0.�-��
+�Hí�"�ALJT'��9��LW�mս�å
H}[���
�BD��s�� J?S�X´E�*����
h����2�Ϛ���Q�v���qF`�5W��i��x���V�O�5��r3J���1:D N"�z\|��� ��uX�҇Z
�)x��0�}�/g�CN�&�
*���e�B� S$ZZ���>� 2�@�6
�$O!)�(�Y�8��O���*>}�Wu�
+�2����g
O���y�)�m��7��P�
�8��0x!���!��!�R�c
��p�g�X���J�����d��3�DE �)�s �Ia3!d(�Y>���=C�c���r�Df�� �a��y�E(����ms�Y2�r	���XP-_̣ .F 'I�r��E�
�,�{?�t��6m� J��+���FB	hN��yH��0�x��i
�L}=&"|��C[|�t��L/��
9��.Ӭʿ�[9.j��R@�ڰG/6U^��?,���UqS��)���}Кz'e`���
Ʈ�af�H�1^��V_]1�q��x�})�r�+��dZ����!��ToX���M7/3�����]�T�%ژ�6Z�X>���d$Ȋ�R'��R�rh��.��}!�%Q\��,
��›��j��V�(ٲm����>#�8h��?��ʶ����5�	��5����n�Ui�Lј��
�5CX�D�
J���
�N�|LhÑ
�:ֲ��4
��5���
L��}n/��G��hJ�Y������l�Z�9�IE��_��k��%^;ha,��� Z�P��x�e2~G�ك��$ǝ��=�H��
�
D�Q��6��h�\`k���!
��V��X��8k��f�-]�7̖Ϥ���)�bX6U��$�J�ѐ(��Ö0AB�����ɻ'��h��Y�B�^�YMj�mH
�;�ӷ�����>��]�A�Lt�<ǜ)e��[7'΄��
kӫ�3ƕ/�k����)�W!�##�V
0.��XY���AtE|�@��B08n
+!���}�错���$�
�$5 ��S0��o%1��dy]M�c�-�,V��f�9(k���M�}ЍŮ�����hvt���M���T���p�4 �]�H	�
Л���ԉ�@(�r�� z1�/-6
�
:��ּ�h/�Y�A�H���-�� Ҁ�ᦢ�@����� ��
P'!�8)�
I$�$�%�96%C]�ngrC:���� W�Lk
��1�!B�t��Zd���|uc!�$,���++xڼ��˻����qF<薖8*��|m��ڈ�B�QQj�v&�|X�����W�
I�
�1�9 X������Ў
	�,�i֗=s�f�r�B�S��µe<xcT)���@��n�$�ô$�.�JF܇j�$��
�fY�U��6�)�3��3)�iE*y\�eu_������"�@�H�
<��Y`u$��|��H\��'	b�n2C�+�������7_9��`Aܾ����������H?ԤXz9����9�K�]<TH����|G7+�X���ֹ��sM�l������"�~p��,ݶ#����,��rwMB�ؖZp�4%�f6��
r�
���N���|c78�գ݋�;��DM�{�p4��)
���`�q �A��#A�}ZeͰ�+fE��,��h>�ze��������+S[���To�oSRѢZ��^d�*�bSD��mp���(7�U-�,�7��b���43H�5H��
O�U)��VP���U .ֆ���ςf�]�FS\��
�Y�
,�i��l��g��'�ڿ\�
š6/�/
.���"��S���2I�=�ESv���	�)�=m�^aVD��3��<I������u�����G���)ʼ
+L��N����
�x�.�J�������ڥ<]�8�L���}=�y7
�Ve�Kt\��Ť}���`J����Q�O@"�9<��ғ�H,!�˭�8�GW��h�Q Cz�~�V��
�qu9+n8�
p�_�.��Ȋ5{��r_����� �W��L**N~~{1�l���ѻ�m&��_�4?iN�Ls�����-�n��V�߷E���ymw5>��z��U�$���i`�W�����T1��@ޘt�-��am�R �G/�����l�0
Sn!�~l*G�`�	�ĭ��=����ݦ����V%ol���KKq5�U
+M��6bbn
+��;�F�	G�,K�ut��efi��1014��Ծ��o\� [>#����Q����Q�9
���>
%R�'A*/�s�_�'��n��79]Yն��|��z]��M�^ �`�_ˆ!o�����+���]�����ސ�)R���;�4��-h��д
g"Mы�d$�uȣы�AR�sD/�u��++}��L ћ
jf�t֖���w���l�k}�
�� ��]�4��|
H��a��^h
�xk"�ͱ(p�=�-Qƅ%>ʟ�T���N
+=t[z{C�[�ů�r�pw���7!-��O�v�>��%�Z�2�6A�M�n�
m}�s��Ӂ*�Oa��J��<W�<`P-x�A�<���{�L�CU&:���9��
7�������P����R��(e=�1
+�B{�M䀻8�E:���9H��&wd/�ƍ
Nn��~P�e��Z���v5�[�yt��G�lV�'fs�� }�vy��m&��b��m�
��=���:�qH:����C�("��=y���q�A�{lw�����t�FW�����톶i�~��~�k)M*�
�H�Sq��O�
�p]���M%_^��|��g��{��V���h�Tp���h����j2C�v0zGRC{�������/?�Dl�
�d���ds���f�v��
�����HuU�Љ6%m]�)�3KO;�N$BZQ��)W��!>G������)��G�	�
a��N�c��o",
ݝm
��U��ѭ��@��0��tG���5GĖ�B�yQS
h����
�[�tek��
+�ˬ�zTQ��:�7�
+�:6����������
 #9Gl� �
�FFg�0�ӻ��!��q_@�p�e  I���,�~�ш~�������ִ{�����˰���"XE��y���QQ
���	Vq
��iA��b���ԃ
߳	ng�7��X~��TL����=J�g+��>>7HnmbM��>X�^{w
Q��t�*�&�tZ�;��_k'�Y�&�


����v��_i�)X��]�[�U>�
�
����D�7
+endstream
+endobj
+1619 0 obj <<
+/Type /Page
+/Contents 1620 0 R
+/Resources 1618 0 R
+/MediaBox [0 0 612 792]
+/Parent 1608 0 R
+/Annots [ 1615 0 R 1616 0 R 1617 0 R ]
+>> endobj
+1615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.106 289.163 523.829 300.011]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [350.583 243.28 362.539 251.693]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ida_ex) >>
+>> endobj
+1617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.097 229.174 415.819 240.022]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1621 0 obj <<
+/D [1619 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1622 0 obj <<
+/D [1619 0 R /XYZ 86.4 701.138 null]
+>> endobj
+302 0 obj <<
+/D [1619 0 R /XYZ 86.4 515.543 null]
+>> endobj
+1618 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F8 473 0 R /F48 619 0 R /F55 746 0 R /F49 646 0 R /F16 461 0 R /F38 517 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1626 0 obj <<
+/Length 3217      
+/Filter /FlateDecode
+>>
+stream
+x��Zے��}߯�[H�a����Ȓ�.[���`�\��E�$h����szf $x���T^H\s�>�}�g���(
}s��ۛ�o�
��j�G�w�DGrd���`����1cr2��r;�:���|]��j2�
w�/��C�/޾��������|<�.��o��ݼ����a�x��T�H=�-o~�-
���Q
	���\��H
+q\-F?��t������Ȥ��X$b=ҖE�h������fUQN��+��!����.�6�_c����1�'��n��(/�0�b�.GS,Bk�G�5ff�δ�'q�ΡX3�r���L|R2"b"i$�#���p]���!��UA�cq1��FG����N�4��7�S���
M��l
Pw��o�
!�w��, N�q�U�r5a㍿O}�5 ���|5�_���iU�F
�x�]ͳr���4X�
�7����=�+g�Ңn3�>N�;�F
����Ҥ�pv�,%�م�����&��fpRW\'A��*����,���)��:�1�8�Mdw
+�0�bi�\�Y��U^��>,��K�1'ߓ�W�m�E��½��t�
�3�`�خ�>4�H�F���#6/�d#�p ��͋Xv��Q$�W
���̨G�"��i����&��̂D�D��YP�BȌ�ᴳ�
2s͜�^4�����X2��	!�bb�
+��z����L �k�i��c��i
�2n�D#�m#�*
��h;����M�θ��΂�Q22z�22z�kd��,?kd	x�9od&�bM`]�'�h
7�+Ɠ�F`�j��
x�!+�ѳ/���z���.��)
�0�+�+B�X�X�1WE��<7Y�
��
}��0�,����g�8��Q)��2g�@�/�5�?
�T
橆p8�MD���4Te�|:��/���\DR��$��B���Q��vT��2�‹e�,�g�.�3�|�<4%�҅g�Ԫف���.d�����Y��ٴ������O����Fv�yS��,c��R��̥А��F'R��Z ���P
�
�r�H�{�Bp.~�=� �0,	
(����
a�H�S�ޣDs\�[]i%�����=k��dV�t~L��6�;�wG�B�!Y:"G¤5'�(b�
9�"�},�9
�,4�A��C��7�2a�:T#̨G�SxD���y,�y}����M
݈rq�`�?�ac1�m��A=����]�{�7,��`|�a��+:�
����p]��+b3Uh�� f��yz�:�M	����L��A�&S6��Q�XD�^W�hS+p�j^l�^s����v�:_�ث6�x�?ϭ(y���O@��#�	����H��d?�&!��]�1)�
��v�Q,wm��b6�6�vV,I^5��I�� �F_|��=9�K%ed3pU{UN�H���X�r�� qh�Q�ig؋<�>�����:=(X���)r�q^yE��,3�lh��[�th�"�&4٧�Lg�K���czJ:��y�G��R�p��=�VH*w��O=��VK;��,��*ڀ��Ġ+�݄���.E�#�w�,�: [...]
,�BWf�e֗���RB'�/ɋ|�3ɞ�^�)6+ G6�4B��.Nd zڗ`
��q~�(m�ec�Tx
3k����I�qG�{W���u����K>����~j^M]W�V_n�}۷\d(6�S�R�'�٢ֲm�8n{��iշ�	�b��'g
+�R{�mNx���,�i���}�z]6��(t�4M�|��ϯ�J����d��?�����
}`�h���:��c
`N`EC�lM�b�
����&��v���U��M�w S��
1w�0we��v�`$��a(5�����S�Xx3\U`��#֘.�I�*���OֱO25sE���!\
��Z5|�Ȏr?f�Ƴ^�cy�F_��n�9�syKǧ(�L�A��{7�0k�t��q{�
jMK�Mq�v��缝@���l������"NԞ�o�ݡ�V0�Q�cz��n>���]yPm��F�S�8K7ً OZ��K��Pz�7��D6Y��P�)�MM�7��|�W����p2�:{ �zO��b Y����w��7���
�sy�$b��
ț�O�2�3�w�ѳ<[͞'�tIw��y-ZaۡL=�wsWs����

����B��u� fAN��
Փ��f�(-_��2ds�/������Wn��K��E�AaQ����(�CDZ���E�0�hơ`	bڗ�iœ陈���{e�u���Dtgz�7�d�iy�]���j<�����
2���?���io�N����E}�l
_���m
�pF'����a���6U���H=���
��
�l9 ��=�d��R�l�ٺ:��e�����9F�W���U����3x/W���M �\�N�Iih�L��J�$���ԕd�4ܖ�e|�y��x�4��'�o�voCY>l4����wgh�I�������bI��C�Ծa(:���~%�l��-��ݴaڒV�c�F�_J���Txb��(��n�[7�)�P�R��xԼ`���C�zxױ�#7��>D���>���W�*`�n�����&����~	
2
�P��Ψ$�x���U}�c�Y��bT������W�����
��9Y����5M�8���^_N-ӏ&
�������.Zg�Bۼ��Pk�P��cC Z�����1�Xyw���];�F=�$ޝ�s�b��z��NQ\P�+ﻖ�
o

+�S�sr&8ǐez���N�mJ��9���Y�"�绝��t�/�}����*zN��8�IW�m�P�G^�x��==v޲5W"W���y�L���"[�W/��p(�.�7�K���#g㐺;7���d�^��)���O
�T�y����r�B��tu��N���M�Gi�ۚ��p1���67�}��h8��@(m���'	��^��Ep�m�x��c;��z����(�;_u*X��TD2�]���
��Ӽ��n�9�qy|��w�
A$�pI�5,�
��ӧ��Q�'u��
0 B����|��'*1�5�Hz*�
�ڝ��'���Eu�e>F��7ƕ!��,o�5�z�?1����/z
+endstream
+endobj
+1625 0 obj <<
+/Type /Page
+/Contents 1626 0 R
+/Resources 1624 0 R
+/MediaBox [0 0 612 792]
+/Parent 1608 0 R
+>> endobj
+1627 0 obj <<
+/D [1625 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1628 0 obj <<
+/D [1625 0 R /XYZ 86.4 341.138 null]
+>> endobj
+306 0 obj <<
+/D [1625 0 R /XYZ 86.4 158.545 null]
+>> endobj
+1624 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F14 697 0 R /F8 473 0 R /F16 461 0 R /F49 646 0 R /F38 517 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1631 0 obj <<
+/Length 1819      
+/Filter /FlateDecode
+>>
+stream
+x�͛Ms�6���<�m�Dfrp
'3�6Mk�.I��$�H�+�ɯdP�M�Y�|	���|v �N��Q���1蝾�*2�(����(UDD��8���c��>����烿��'"����W�|u�gF0
S*O>��.��z�']�$*�{?'�����M�V��#�
ap4�.{��߹$�$A'iB	"R����秄�
��N߈4x�:�
�̓|U>�/匤RVv��Ou���M��.��(�Ę�.��!)(H2I!@��8<���b~U��ڧo��&���+yy�B���<+-W�E<�O�C
_�/��읰4��n�q>.��{*[L܅���-�~�{�7'R��l:�ޛ� ��Xc߷�i
+�����הH%P؃)�d3{I�>Tt����2��iJ
U{z ����y��� �ҟl[�����N߃���DK
� SL5���w�P��K�$t	u�ڃSq
&�N6Sx/Qu/Qk/Q��h�%j��܋y/��qƈ�J��n���8pn��5`֤)�׀)��f�A��^*��e�-��̗;���ʭ<�*�
I��W0oHc0g��dC�3M8�G�IC��@%
����CUS
^�J�4>��
+ ��*f!�-A/N��o���@�4�Wy�\UOW<���Z����p�X�l2���*%���
A�z��lq���G;�I�A��)��|C��P�8�s�ȳ���|ǔQ�6S��l��4{�
,I���f��0��~__{��R�)Q	Ea�D҂��g*vb5j����h��h�C
LIC�i!HzZ�b'Z����Z	�Q&=֒N[��uE�*삊�N�w(I�H
LA0P	�hЍ�
�P��Q{P����P�piP@�)��1
+Cѓ
+;��
R#7�<b\	C`�F���h^�aHz`�bb|'���s"(,s9*0%y
T�
U����ڳ�?��*��΀�4k^�cHzX�b'X����&��Iř]p�6�

C���)v�%����ч-��]%
+���I�C�
;k^��s�aph�)f�g���V�؅���O�#�9��'՗W
b`J�-�!Hzb�b'b���3�lp�����R�yC��
+���m`}Jd����
/˜�$�ٺg0�H[l�cH:f5�.��=���0; 4M	��\������
Z����ֱ�D��D�
L1���*ϋ��K�8%<e[��o��ٺ�%,w�����e����i�m�&�̬����zV>�g�%I�ኝ����lZZS��f���e�8��,&Q2E��[(�`{�sn���j��Gg��㣈k3IQ��7�
E
+���S���� ����ӛ
�b�~�&ӛ�jZ,��?�]�j��O]c9A�:ܰG
#	E�Ԥ0I[�
`H:t5���8��-��z�1�-+�����Z�U�(w��#>#��)���e��Q�ؑ�-���-�i�##�} 
��d�~P �%ڢ: A�3
+;2�e���|��?.[����b-�����
O�ב��D��F�hjK�r=@m����2�N$�)���Cѣ
+�g�U˹��k�ˬѪ�]����]ʪ��A����H�`	�s	�
N} XҲyA�a
��g��#
2�I���l2ylյU�Ȩ5�-���<�M͡"O���)�Aߴ�@t C���ܽ
+���a��|f@�u
�M0N
+��jYT���qY��&�[K�x���
>
��$"=��'9�
�����X
�낾.���ݽ/��`�����ῇq[LN�)�Y6��(�-���Իz� �XG�|P�wM'�y�W�
�k
�����C�
+endstream
+endobj
+1630 0 obj <<
+/Type /Page
+/Contents 1631 0 R
+/Resources 1629 0 R
+/MediaBox [0 0 612 792]
+/Parent 1608 0 R
+>> endobj
+1632 0 obj <<
+/D [1630 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1629 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1637 0 obj <<
+/Length 3429      
+/Filter /FlateDecode
+>>
+stream
+x��[Is�F��W�U�0zA/��C�K&)'�dT���EB� A�l�����.����9h�^�~��^����$��p񏫋�o����*�&W��b9���J���b�>bL]N9��F��z^��M^�.��Ȩ��_m�3�����WW���.K��h�-��?�~�xsu��a�dš���H5�//���L���$��5�On�r"��9��ɿ/~�H�IL�6�
)'ʲ�i���i�B�w/�J��#��n�UVo
���M�:�B��X1�eٱ8X��4�v��_F��
K�,)%�
�x�G��)�%���m��q�E#��.�2�ѫ*�m�g�D�p�u��7e�����ê��&��j��i4+�Y�Z�"�j�?Κ�R��/Z�
��m�0��=����e6
����*�w4<0��Mb��d�0Ɵ�,4��y��xz�(��`���z�I�<�?<6
�
�=��i�jV��l�f�1+��b}Ġ�}C�k0o("ᝡ�7G̙Sc(1�v��-@�	J<�ئa��z� [...]
+�4ϧw�M�C� ��}\�gX2轿��;6�v�b��s:�;v�6��g�&�e��b���/>ÒA���_��5����$'^�/���T��v��{�e^��
<�����ͶZuX�1���ۏs�`^��v��W8��Sqʡs
�)
RGM�
K�x�����	&pui ����_��?�������>���e�ML�`�9��b�F�j�
K-�W��‹�qP�"/
y at Q >.��ݛ�

��W���;	�;
�l�|ꄩ@t�
��2V
w�s,��9X���o�r�g��S
����Ԫ�mN%/�z6��J?Щ�� K��S���3��O|9U��t+����Z��B1Q�a��/��v�k*�b)wJ��~O.��~c�2���P2��05�B�V���b�d���N���jN��ڿnk���ts)X��?����__�y,��A�<�J$(�
cvڞ^��]���?\L޻i*�
�7���
+/V 	�x0J�eT�H�5��Ư��TCo������U7���[�<e1 xc�O�q�Vq�����e�k�:�^��D6rxI�r�6��G�b,��Ă�1�gs��gsw,.e<�rpֵq:p���.�S}_:�vM Ţ[y�!#b:��o�[�K�M�ѧ�ܭ&�G�4�̓$�kO0��dꝿi�8���RJ¦�Q)	+�jp^�%�m�]��f]���!<��'��h�s����}�"��f>b��n�$)�HRE�C�ʈ�]X�μ��������馲�߿u��[`_�Z��p�Oz#uѯ�Lm+�1W��IO�K!c�ډE��fU�,|n��Ҥ�{|� %�-u��
��)%�f
��Ǵ��#WH�#ȇ��=$�X�֕1Hz��d3R��^��[��nSH��
�F|�5�[�!��$r$��K�3��VQ��U��E=B�a{-'T",j��m�D�u��D�U=V����Q��ʖ���6B���X�Y��G7
ԝ��
s�=NQQ��-�Q�n;��b�=mtn�w#t��i�љ���	�v1� ��D7Θ>������f�f at v(�1Ar
�)�R�
��vD9
y3�6����B8
�r�>�5���S�diw�%�
��8�?�� ����@�����}_”�����=�V���yTHHD�>_��<7��t�A������(��.�=\�
�����͛h����$��`�4r��[�� 
05�aJ�^�
 sp��H1VXL����)E Ohs�R�t_^��U�btC��PX�̃~糢p��6��te��
=�
O�ayV���a�:pŘh8C00=�	�a(iH���Y����);���Mx�٩=|泺���a0_��)d0k����0�uI�0�E�y7��[$jhK0�
���n�7�9��b��
�S�t�^�$��& ��u�Mr(q��
��?dc��eW�x����.���c�5`� �LaO� 
���
�V
 n�މV��WP쇇,Ic���9Z�3�=+ [...]
��=J"��)uVl�K*x �G��G�CaLrx��}&�5�����(߉�j��^�#I3;X��8��X���<�������+p�����xgv���tu~��cz�뤩��� LC{0K�C�0��7n�ɓZ�\�#�)�
�<�G��.���r���d$,̔"*����q�q�0�Ә��#�Pj
)�ʯ��aHQ	
+�2�`w� U�q�WY��@.���q��<��l4��:��aG
+��լ(��m
��NZ�ԁ�����
��Z���PW��=�C���?�#�[��p�]�� ����e!���l�iX��OΦ����n�/3기���	W*
bL����|W��֑����;<1h�جb����]vY�u5���O
+/�\��%�q:������4�=^8��� Ӯ��^'�r*�i

ޥ߶�ڽ����l��X��C�j;
��� �Z~K�8�p�:��=��i�9]�J��
�̕����>�"]L@�5�AE��I]�
�o1
e�a��X7{a��E��wVD�ه�V�a�$u�i�������\��ɦ���P���p�<Ҽ�6y/�����F�bxk
y�\O��Ed�~C{�L�:�4��^��]�
õ�nj�S�`c�7��
+>lj�Q �w�����
+�PW
�g�r}?�󿲆
+
�$Gs�51?�MQ�i���S]`�.�Ј
[eY`�)[ww�����7C��<5����n7Mv�q"v$�Ĵmu�q�
��o.�v0�G"�����$º^`�p��am���񎮣��y����!L��v��A
�O`�[�[�e���"��`�|�`�l
+%�p<�"��ȶ��z`�������h�¼E����n���p
Hv(:�[���٢�&c+�ns{Hv4�
5� ���q'�
�4D���B��Mho� �-�tV�H�Qt��&�'
J
�Xj�)?d�I/qU�w�E������b��C�'՗6�	s�H�r�P촾���!�
$`�YX7�����e�����r`����4�M�tQ�� Qb�\W�<T�3��J��}B�t�3��轙~�ƕ�שP¡&
ao5�a#\�y�����1B��iD=��{z�8�=�4!�A?��BVM��.�y6
+𘉅L��A���c�V�3��cj�FOn
+iN�d<��%��U�e�i��Yw���AB���\�o~���suc�
+endstream
+endobj
+1636 0 obj <<
+/Type /Page
+/Contents 1637 0 R
+/Resources 1635 0 R
+/MediaBox [0 0 612 792]
+/Parent 1608 0 R
+/Annots [ 1633 0 R 1634 0 R ]
+>> endobj
+1633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.842 418.282 142.565 429.131]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.3) >>
+>> endobj
+1634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.526 179.179 273.249 190.027]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1638 0 obj <<
+/D [1636 0 R /XYZ 86.4 726.045 null]
+>> endobj
+310 0 obj <<
+/D [1636 0 R /XYZ 86.4 459.032 null]
+>> endobj
+1635 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F38 517 0 R /F16 461 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1641 0 obj <<
+/Length 2537      
+/Filter /FlateDecode
+>>
+stream
+x��\�R$7�����ޏٵ���n{"�/xTw]О��ͪ�BY�3�"XU�ιW�9z�
+�}�x��������lX��v�;o��
�*ѝ_w
Z揎�W���'��g�C~�r�t��ܽ��qu����H�ï���~����Gǒ{g�pG��|�����x'��0�mwuw��_���w~�8S�w����uZ&������|,a��$�T$�b�3J2'ǒΏ ы����T��ut��>����ixM�?����H�����z�{=�[
u_|Q.�ȯCy�� �&A2k
d�%�Hy��^�B�T�b�N1p
���G����/���m#bœ�Ȍ�T�
+QjOi-���}	�!BY᝱
B�!�sL�0"xh�:�8�.
 ��7�w|x��1�8	ߎ�IO�c�쏡1
�:fl�3�-(�3i���B]J@�2��0j��������#����5)�
��ƨ��n.������7)�p�t�6F���p�鮽�7�N0�k�¨��25�E�IO��յ�ƨ��./�6/�b?�-�J
���I
���̕��ݥ�`�Մ�Q��>n����Iq��i�&� ���&�g�͕"

J���.����뽠'˭�1д�Ur�
^��$7L�
��@PL(�zI	k&f��R�?�������
;.O�d����k�#����R0t�皆�<�V�0�gJx��np���y�
-��
�^CiZ{�U����#.�!!W[GO���H���VL�A椩,p�m�q�$MH;�0��On����(�*&K}�KY;%�#É"�͙q���
�
+Q�;���֌�P�D����M��M���&A�H�m�"��t
�h&��n �lϥy�$`'i�AqRj�I��F;�ܙ��������]pF���|
+*���ʤ`�2)�LFT����:����OGV�٢�	y�"�*�, qohJ�ݕv�g։ו,-�
¼$!�����)c�z|ڬK*^Xlv�O�K��lΌ��
��J��%Zp�|_�DW���
+]��]���.A�x�f~�@�6��ͦ��mgW7g�k�)H)�����Ҧ`a�Y�H�K&1�3c
=EL�@S0P��(b
+�����ϔϮ�"V>Q�eWE,���(/�W5,�f�{��LXEѰ�
�N(�3�w������7�O���j�_�Ku.m��T�3�{����
+G5S�F5�0F57��j&���>��	'�@cT�st��v�^�*'�K�q�Q�
݈2&R#e�op#�l^���y�����y�ċ��웭hv�+Z�jY+J�(9!��D
t"
+:
����ߠ�����OH�Y�0$�!
+��
Ҷ�3.��}���ѡa�mô���C�8�/7����ٗ���U��LL�
����"*��#P��UJ�����D�
h.eƀ�?�!�� �N�C�F�
��2
+��59�P��
+��'�8&�lq21��O���O/YXk�LR⒙��̸�ޠ���J�QQ�
T<#J����'`�z�xGAi�UD�����0(�.�Q��Mb7ܐ��^��2��o���/�4+���$�ٜ�7�;�*yG�h��Q�D���Z-��-���A�H��&Z���r�
-�0��d�^���	q*�E�!~�؟��]p���f
"�-9�lΌC4�;:D%��-8�!j����B��`�C0�CP0�!��5u� ,�ֶ�8@�x-��ע��!��Ϯ.n
�4�֚�����
8�1D�3zJ
N�'zJ
N�'zJ
N|(S�Dj��ej��Y
8�C�
+g�ٜ�#`���
��� ��e�Uw��(�U�Y�[��R����c���u����p�93�E�@�`��P0�!(�xFT0L�H��8�
�o�`
�T<�)�(x���t_��,-4��	mA��9_*�E޸�半'�=*��1*��1*����'a���`�bU�x#[� K�la��Ŏ�r;�^��-��Fڄ-a1	����u���Z��O�K��͙}����+yG�S�F�S0P�
=#�����'`<�ճ��"��E��aH?��}
c�ҵ�Ƅ�?]?�j�/6�bFT1U���r��I3����Q�
T1#����*&`���x�Z�ᦡk�b�l�tU�&�j�┱����֛�ͦ��f�4w��̨�����`��)�b
+���UL�@0RJO��<<�J�Y�kÜ���!(��d������=V4��Ԭ�ꒄP�s�
+eT�lʌ�[���|%m4J�h-�
O�ki��4��C�
+e�BKE�!`<;���7���5:�S�)[��0�k[
�����7��YVg�zR֒�̥�x	�� ��@�@g @�җCD� P��!R�O�P a�hi�,�a]���.�!L
+�d�2�'뻇�M�F��b3j$`D9.l��A\���8J�(`
+*���&`D
S0P��T�R��-�;�F��f��¼�MT�2���W�����fTL��*^��Y�MPR1%oT1UL�@0��)�bƳ a��f=5�?�����
+endstream
+endobj
+1640 0 obj <<
+/Type /Page
+/Contents 1641 0 R
+/Resources 1639 0 R
+/MediaBox [0 0 612 792]
+/Parent 1643 0 R
+>> endobj
+1642 0 obj <<
+/D [1640 0 R /XYZ 86.4 726.045 null]
+>> endobj
+628 0 obj <<
+/D [1640 0 R /XYZ 211.023 544.676 null]
+>> endobj
+1639 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F41 961 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1646 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+1645 0 obj <<
+/Type /Page
+/Contents 1646 0 R
+/Resources 1644 0 R
+/MediaBox [0 0 612 792]
+/Parent 1643 0 R
+>> endobj
+1647 0 obj <<
+/D [1645 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1644 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+1651 0 obj <<
+/Length 3149      
+/Filter /FlateDecode
+>>
+stream
+xڵZ�s۸�_���36K 	^�r��ӛ\�zqڇ�{�%*bC�>���N���b�(�פO"p������>���_/b������o�Y%q���^��V&��*i$3��ٮ~Y��ۻ�h/�e����o7?�7*�
���k�G&�胟��R��}�-�O�٫
+(Զ/��]Y�)~h�{\; i�� -c�֏
���*:�ڬ�(O��7�6��7{$o�zSԗI���K��}&��wZEJJ��}���L�u�-N7�2���/< 3�q��F%�c� ��n�?7�py-�%���q@�-�W^fx�Pf��i�8�Y �ַ8��	³E�x�ٱ���xӾ��]sd��c
<l���l����)�ژH�|u-D�k
����R�m�
�z[�M_lit_�<K�8u����0���0���O����Љ_t�@'�b� O�+�����H�g���z�<�@�]���Hk�vmQ�N�E��Rj�=�
ͱ,���Xhxy��#�
�}Q���c{���Q�����<��ϛ�j� 
���`�j��u������8;
��;�����9~G����V�لši����9P�)a{�a�Z��Y��)r�)^�yRT	
�J�����E�Ƣ:��/u
+(s$pcӡsv��%� ��f��`7�mikzk��Ŧ��%��
%W���:�_�
,���D���`�����]_
���?�s����,.#l�w�_�T�N�8�6�M
�^�ǁNb���}<p�g�]O��OOh00�Z?vE{��oo+�U��Z��(
A
]M&�լ�&�6��D]"�V0�u\������~�t�Զ�6�nɭ�� 	J�Yt)y���Â,	��
w���
~ƃ3	�;	�AE:�+!��
+G��/7�>Fb���*��}o�o	�Ē(t,9.���f�Q��F3�u�A��9e`8y���C�J��
�e
���d ����t;�G�z�n�*�a�dzna�8�]��i�3&f��h��O׷�Mt�
+^�Z_�2\
��鑴K���:_�g\�m{x%d�"�`	.��\�~!�V�� L�ר��p��o�j
��XF27������U��<x�!�p,
��x>�U��9��Ð)"�Ɂ������L�u
F(�3*,;�$�lf~:c�jAفNX����HbbI����y�_���cq8 �(91�9߆]�90��
2TT[�ğ8<څ�sp_������q] ������'�H�qJ6N�i����!�!�T���*Ny���r�� �W��$�M�nwb�"O�D�`r�g_e��
#�
H=�����f1���4Q��o�y��ef�E��
�y
)�S�繌R��?�D�I����1t��B�"J���B�TE&�gB�$�b�"��}I~Rq�t��Y�o(-6�K��կn��!�8��)�
wReSh
.�l( غz��~��B�p���\�
+��(9�%�����X����t��:XB驟KO�Hg�۩1�),���\d� ��
-a�@։��rG�
z�� ���'�03b
+�;X�;���oS�Op��#���ޢ]4�·͔A=�X7n{�
�8 at o>V���!X���|7h~��+��d��zӴl�he���qs�5ξ9��pTn��i9ĝW*����|�n�H�(O���{��
n6�8R>U��ߑ..W�20�Y�7�(Y�Q����8��9_4�':���Z�M��O�6��4� uF
�_p
��R`%����M��XU�'��H�V�z�l)���P�<��'�6��
�ΓlT�x�%#2T}!�����͂
A�� �D:V�uA�D��r�ii�Q�
���*�]�B!�A�o_���f�P�6�����
+��SH���O����R�+��P39cI��=���`�+B�aX�K��*��
T�o�;Xw��Bi���1�
�17��v`��7�
u�AF0�fA1�qb49���q
g�*wb8�7�;�k&��y��K�Ox��'�e�IGy����e�qVb՞2ϝ���/AB�E
+�$1��W%�q
�#���G��R�����	T
����@B����&=A�}b���ݜ�&�nIM!b��e���\y��
+
�}U�
+�P��T��8.Q���ѱ��o�)�1�<y6-�n�

Nz����q�͂OtP�S��d�eU����
<�.�P%m�O<EY�Zomo'�]M�.U�����Sʓ�S>s���I����g�->
��ygۍѦn��v4c���0L���w����s,��}��@:��t�[�م�1��bg�U
�B�G�©\��N��}�fz��u-�I��bo��z���G�	!��r�½��
D
��6���[ ��n�(
��׶���|��h��x[��_-�M����==s�F�ĭ�^�Ջl�3�D������g��oT��5�������
v4R�~��
����C����H�ږ͑�m�&v�]�	��������N#
=o|
@�Z
.>��D8�ܐl_��;�(\��c���ƞ�?� $s$E�H���
�?`�
�
!	>��0g
+Nc&W�gZ1��
ɢ��+�O���G�\��شš`��\Y��N��F״�.j�j�]!�H&/)�S}R�A�I!'W��Q�W!�n><=89��<��a���������m9 cHs��.,��c+>����Uhs�h�� ��
�a�uv��~�X^��B�(��K	���\����=`lt%����E��!`\[ze�
�܂ݴ�|�4j~�3*
+eL����
	<��;�j�w�G55�ļ�u��eZ�
^���oW�Zw�+��.>Yׯ�<��%�j�
���1��?�l��l��J2V-��!�ov;z����&3_��xֺ�6�o^�òs7LZG�d/�aJsZ���e�  PGK!�H�vp�E��ݱgm�]�4:�S8�B
�-� 7������#}!:�LH��$x� �[�T���������T�"�.�'����G��
��
�2�\9��e������Bh��9�����p�������1�'�
&���B�p�j	
R�z2Ӿ"�� �	`���I!1�
6tv����������B����:��U1!sw�7{jX]�W�Va�����,�X��_�$;,�����pˆ�
L�\��]P� �9c��֥���J�����
+endstream
+endobj
+1650 0 obj <<
+/Type /Page
+/Contents 1651 0 R
+/Resources 1649 0 R
+/MediaBox [0 0 612 792]
+/Parent 1643 0 R
+/Annots [ 1648 0 R ]
+>> endobj
+1648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [101.557 356.153 124.028 368.108]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1652 0 obj <<
+/D [1650 0 R /XYZ 86.4 726.045 null]
+>> endobj
+314 0 obj <<
+/D [1650 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1649 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F14 697 0 R /F36 472 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1656 0 obj <<
+/Length 3293      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs��~ׯ�#�ǘ
GRNe���.ǻ���	���CZ�ק{�!J�n�O
���=���=
W��p�ϋ�����
�R�F*Z��Y%�0�X�"�r�n�zH^�Uh�
~��K���b[
n/�:������C�^�e�S���!�jj���;\��o���Wۮ̛�_�}w�����/$0���܊�D�������j
#߭B��du���WF�BA�\����E8&���R�8"Y���R%��Kk����q�Ǯ�i�+���ڍ$A[Q_�+j59O�nhJq��p7�&o����(x�c�7UYV8�
0��~6��X�-����O���Aql��@�h7d�'n���VY �p�pk)EjYԛ
+��H��y�_�Q�^���Լ��
+���$��js?	/��S�6FJ%�� �<Ǔ
o8P���);���2�t��ţ��(y�j��>� ��ȱ�z�-ɽ��T �6��c}�Z�u�M����~�C
�k�%�a�
|��N
\�N0ip�+�P8��!D��ܝ�m��Mv��l:�P���FAVU�
۬�h~��Y�o�tE��ũ�Z[���ٲ6U�!�i�ڄJ���

+mD�T�����Ƞ��
��!&���jV�����}o����Ҕ,�
��&4��,��s����Ud��az�yh!u�;�4&�H�X)G����T�NوTk��/�
���:T�)��X��l;�+t�Q���-R�^��h
+�2�
:'��&��j�_�B�
[�KA<���m��Bt$�M�V,$� �
^�����?+ol{=�(%R���6o����.~
��;����ݦpi2��W��t[�E&�ϸx,l��#�7�M�6MW�*8%u��FӉ
՞$q)+��3��lK�
+���a۹�5E�@��!��D�|���$���������t 巠ah_8�Q;���?����4
��\T�E�H`�'�$[Vq,Bа�Dಐ�?Ϥ/[�4�[K0���cW�
WM>Y�z�VQh�"R

�3]Ϣ�K�
?��:���#�w�\���|HUPL왧: ���x�
�l���wC3J�ܠ� rC�]��2a4
G@�d�JN�T�;F �Σ"��[j4-�ִ��A%��[
�U]ɓ����7��9D`�����R�!?��l�7A
Cn�k܊|����M�5���/Q7��-
��0�hw�ʝ:t��
����1
;�Y�}��?� ����o�3����Q
6$+0-����ա|��~E�۝����
��n���Hw
1�D�¶�	�3�����ܰ�Ѭvz�"����y��c����$1�P�F�ذE+����=�/x��[r^eE"��D)x
�)�KFx+
+H!I�{�3�K�ۊ��Y�BI���YPR��	l����
�n��
+�}8�5�/�D4��7$�t{:j��Z���S���]�����zew�m�
|ŀJ"��[։<5:�L��
��Y���~�*Z�ޡ���/�t%X M�=gr�]%@ց�swi�kG#��%�Z��L}�$�ݒ#G�@?��
:͡���y�2�t�Jj�Q@�Š|����f�U1h}
'z�ñj�X:�8|��(�
;m>~
��i	�>��%OAU
�Ѥj.�̭)�`祻����K�>T5(%?#Ru��D׌��Or�*Qŧ�����{.7���&+J��a!Nba�X������s�iP���:�^1
�x��gR�Z`OA�N������#��ȑґ=���s��*���>
s���MW����?�i4u~��>
�@�,��]����5����3p�!r������91�	Đ
+|:'&4����'�7-a���
�E�(y�a�@X�X��Bhk��8�S
ƥ=��<RaL�R"4�� �wc*��7�p8�]7��
cV�C�<� �5���2_���
;�x/�N�\L �{:�)���C�0^�c�
�d8�7��4�� �C�W��%�ª>*_/�G@��H(#���U�O��P��:!6%�T
�^��I�숕>����>΃ru��o��߷~&��ǫn т9���_�L3���P�
�j�*����4�+X8J��$�
+���aA7���jm�q�m�(���~�i�_�o�A��F@4��]�qV2�o�o�W�D�O��\K��=Z�Ѣ̮K��Y�`#�8��N'f'�f&"
?-���C��� -�`�����F9h�966���d��l��
I��$�l+ue�Q��H��{�
����҅Q`����h�7
tM^���x,
W׀�
]���s�Â)q���&�4z�a�?2S83dC�I6���~���C
޸�\�r�y����\��)ãO�����Mu]�w$��9�%���i��:k��X3hAbӉ5'����{�)�ܬ���Iy���Vp]�
+�ը��
� d�u�)��I��K��
���v��7�����K��\E_�)�k<B�
+.����e�}^-9#L�
��L?k�]��Kh
����`���K*G��:�2
���Ih�@R�B���\M�1��3Nw�,�2��Ω��.�CP��A����ƽ���m~�k��}�J"�b�����y�6D��������
���9J$!�������g���PupG�Rݫ��r1y��U�~��1���@A�q`;��-��y
ĩq�?P
+ڡ�n9�?�
:)��%��OfaA>.�L�i`ݓJͨگ�p����%�sn^�"�͓��s(���"�LXE�
L��k�8�q�
,<�g�%�=����<^��Ł{��>W�vӳ�znj��`�4�x�+ӎԀ�)h�p�V���8�p~�X�?J`��<�0�Ƨ��
A�?=�5����)�\���g�A��M����\8R&�\YՇ���2
��C�&���
�;�y�V����#�ȅ�M���`�G�x�_|���Psā��k��ֳ�b߿U��f^2�q,�xb��ORZ� �� $e����4y�S����B��� ��0�	�`E����Ѯ/��99�pe�'�@���oq8:M�E�[j��b����-6d���B~�3�{#S=�?#n������MdZ}��`�x��'�*���
��dp�����F~�
�޾��F�-���qԲc81�2�p�N����6dB�� ��X�_������c�W*Q�o[��c����Gjm�;Ħ����.���V�H���U睦
>8�tl��G��U,
�P�ϴ05�qd��"�f�>�<�
:2��eTl�i1�X�'-S𵱦�.s��
+����_wwgu��Eo	��ɱu�
+endstream
+endobj
+1655 0 obj <<
+/Type /Page
+/Contents 1656 0 R
+/Resources 1654 0 R
+/MediaBox [0 0 612 792]
+/Parent 1643 0 R
+/Annots [ 1653 0 R ]
+>> endobj
+1653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.419 264.316 263.141 276.271]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1657 0 obj <<
+/D [1655 0 R /XYZ 86.4 726.045 null]
+>> endobj
+318 0 obj <<
+/D [1655 0 R /XYZ 86.4 623.244 null]
+>> endobj
+1658 0 obj <<
+/D [1655 0 R /XYZ 86.4 565.764 null]
+>> endobj
+322 0 obj <<
+/D [1655 0 R /XYZ 86.4 420.149 null]
+>> endobj
+1659 0 obj <<
+/D [1655 0 R /XYZ 86.4 361.839 null]
+>> endobj
+1654 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F38 517 0 R /F11 694 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1664 0 obj <<
+/Length 3658      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s��_���
!>��\��䮹���9�C�Z�l�吔
���. 		�}sn;}	B���~�v�tv=Kg=�����R�
+Vh�g��Y���Q0-��r9�%1L��e.���ݹI��*Y�E_o���.�Δ,������٫˳��8��3�Ig,Wz�؜��[:[—����"���y����}8��Y�DM�"s5Y��	nf��M��rcE�����'�'�����Ci�PL��R�&;%�d\��V�����T���!�S�L�Yx*[(C��_�����> �/^O���\	��?�+��7u�O2�;�tR�w�ҰHnˮ��4֟�dK�Ax�1�rOz�U���P �����Y��TuS����g��o��	�[�]o�q.xʌ4�9�����zM���"�|X 
u}u{�E���	ux^o��"G�^��@��D���V�
n�88
+�muWow

�}_m��<�
$t��H���a�RYi��4K�vÄ�����{��jK��u �ݹ0 �u�
+��G�Ss�9W�����L2��ǣ�W�h��*�Z}��B�\�z�M��G�=SÙ����2&��}�Q�t�ɦ��0_١Z/����0� 1�q�<pa���Z��y�*�|p
v�k�����
۶�=:���Ծ�uY/����o�4Z6n
I뺩JG������:7bj�l��u��eo}?�%Z�M�
;z[.�Wu���j=N\�}IO��g�LJ��k��cXJ

+K)���ii�ں�����x����C�PZL����K��j	?x-�s��`�^W`U'�壤*
(�4�d�Nv��ZW�}S6
��d�H:�:H�{���!>F�P�> �
��
�g���%E�����X���)U<G�ERH=!�>Wk�?\~���a���, /�G?��臯4�F�cGž���Ѱ��r���ΏppbN�f�KjX�d�*�
"���?>���9�o�Q]8/@,6z9�
^�p���|�m�w�����8Z�{ԓ�����f�����G
Z�y���eG/��T��c��N9�\gL��s��ȝ����޿�Y.����-	�]/z"��Ϥ��\���ph
9$o*(�"e�#�P��g���@M$�e1I(��A���9cB.hL��(2(��0(�>M�S7��튆���5
+:��1�
+���;q�]�1GՂe���v��N�|2C�4
+�U
cL���f��0��A���
[��YM�
1��ɤ/#�Fq��,�O���{!�rR�����Ǿ����$fu�����v�B
�@s:�&!L��l�Y�,��Ti�[��)0�!f
��}��q(��a;�g��.o
�:ط"���r�P�LZEN"��^��Ld�
��|�ӫH�L� �((�P�0�;�}�)~(WV��H)'AE�iDp���ai6)9�%ėˡ�H׉.����>�֩��A�P�LQ�e�0-�Np�	��@���
+BǛU4RpH��*�����
ؔ�
àn	u�VsȗY�QK+_�������[�[P_R�ӛ��F39�
+��
��H+G��Ǎ=L$<g:�O�$`��]�x�
��Us���Gh3�]L:�wmly�
u!�n�$���]{��:M��E����d��~�CIS�n�uy���U`����H���V�nݟ��..�`�
����-��-�㮝)�<S>9@��K��7Zr[��cd�m��W7M�����pk�t�P�B�ؼ;,$��s>Si�2��A����T$��S������t���-�����ʕGd�Ω�h:�l"r���d�5`
`#@� ��'Ϙlb���@RJmR���{�'�]
�?f5���M��n�S��9�����V;�;��V�r��
8���A�XyM�C�
����2ø��@bۮ��s�X���4&i��r�#N�؎p#��Ƹ` \L��C�?Y^ �����}
+����v*�"^79��Ȍ�Q�v ���o])dAP�*_P)o�n�r�p%���A︫�U1�
p/�!RiA�����
�C�'G?�C쥳�
+�vRB��
+��r��ү5�
V�e���Ч��rv%��l��z��ď�D�X�Hg"�l��� E	�4
�	�-X
+��X��
fr��
��_Y(7�F>����ϝ&�����-�?%|K���f�ȉ�ʆҴ�܎ �s� �
+|��g@$��1	N �r�n2�U�)X���vˆ,\Ҧ�\�X&�Y�
�%7v~��e2���&c�3�a �B9*�}z���g�L���� =�4�V���HL)�P�@���'4�JH��s"�1(�QAV Z�'Dɔe��2c�?k�q��4z���N3_��{8�a���'D�|,�6�Gv�(3K�-}|�=W�j�s
:<�<l^paX���C
+I��C	�DV�0�E�T
+{�'\Ej
(²��c{����Xkм�Hu(P
,�b�*6n���Ԯk���iV�������!m����X#�Ke-݉��M�
@�c['����)5�
��u���!$
>��_��G�f3
�G�l��/0��ǚe�>�����n��b��駢meŴ�u�8���?҉�n�hłI.����PL���<I�����@^�����(���.��ǐ���E	��vѕ�n r(�A��{5��
{��
]�#J�.�
��r����������6o�J���
$��(���_:z�oB��8�D���8��r�ˊ�e�f����O�$J���|�c��(_�����0��F����ͦ|�q�b�N("@i2,hO$
He�	�,���-2x���m�����{�䶋ϭ\&7�@�,���ۮ���4�U>�񤵇#0���� &�\q,���??�����;��~���V�i1�ȍ��3bq)�M�s����brY���}5�(��&��杀���sW���qv^����8^6�&�����v�a
F!w���;u��{$a�	��^l7*_������0!ۋY�;˅ᣝ�bnj\���׌р��"�dY��	z�u���ݟ��\KC���T�_<�!�6
̪�o
�}jm/�������h��d	
4
0rp;�:��h�㎧/HJy�7��@c �XG��?��}$
+l}�3r>�0�y�Է��=O��z���J���J�


)�T�	:�W'�l̊��s�iF7ɤk����񱄮'�f��/=g�6���3����I/��e�
�}brv<
���:)�	)���N�^�0:
tOu�
�����oN-����p��Ӎ
�\e�t��+|#q�� ��ݨ���u�|>��w�F����Qܪ҂p���v�C0snf�9�!�)(U�P�J[`��`f����a��F�ݞy��f��-�^�J(��8�pQIոeʟ�� �W��\~9{�Ͷ�t��cMU�"#��rW�q��ޅ�ֲ��6���f:Ps�.m����ݲ�T����]ڥZ�!g�
��W�z>�F?�"n�
��꜏
+P�k7�W���k2vl+:�?��#��
fa�n�n�L.E�;_���I��!K�x�-�X��j��T����
���7g���

�
�V��?q�Q��x����e��h|����wq�/@�Yi��
+endstream
+endobj
+1663 0 obj <<
+/Type /Page
+/Contents 1664 0 R
+/Resources 1662 0 R
+/MediaBox [0 0 612 792]
+/Parent 1643 0 R
+/Annots [ 1660 0 R 1661 0 R ]
+>> endobj
+1660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.008 226.716 496.73 238.672]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [481.384 113.757 496.106 125.712]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1665 0 obj <<
+/D [1663 0 R /XYZ 86.4 726.045 null]
+>> endobj
+326 0 obj <<
+/D [1663 0 R /XYZ 86.4 350.792 null]
+>> endobj
+1666 0 obj <<
+/D [1663 0 R /XYZ 86.4 295.863 null]
+>> endobj
+1662 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R /F10 779 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1669 0 obj <<
+/Length 1182      
+/Filter /FlateDecode
+>>
+stream
+xڭVɒ�6��+x�R&�
D��,N�+N��*��
��"'9S�ק��")Y��Bbi4�kt?�$�	I~�|�ۼ~�Ub�QL%�}�),�
V�&�2�G��mʈd}��-g�*��q��7uo�&�)E6
�\56�B��������o��P9�����{��q��sC
I踹ęPIq��"I	3���ɒowL7�A�N�6�mH$C椲5'e(�ZN��~���9z�J��z�
��$�O%!hw�ïߊ�C���`��' ��V\b"�h����Z��2�th��t�
u#���	"�Q{���y
-,�P�վ��x\�٢�2g�N��R�?���v]X�4�l�
5�1u
�TB�,I)�F�p�
��)�v0T��
�k�M�
l
`
��. q
	ަ�t7�=��D5���*�ޖ���
|����B$���-py���xJ$���
s�
+ֈ
&b���+�(��C4p�
�����L����ԇNߎN��
q�MB��
��
�i~
+K'��.����
���"X� �ӕ|X~%�^���ZC�O��k
�>X���p�a䄃w�%T`.s�S�0a�:�a#b�h,�e��ǶR\KTZ`� ��
O�.�EFqƢ&���z�ϡ\l Pڏ���:�k�W�f2,��jx��+%
:(���k�%3�
�$�ń�I��1��+in� k��Rх���,�3
�VB��-aSj0e�_l���m+�eZJ��a�󣜫󊸢�39
S)+!�>I���u���hK
�����0�A����
��
S( ���`Zc)��t�G�������,L��B
+�>
���
.����)"ǒ�"Z ��@
ɿ��l4�n*($o�7}	��D�r��X�N�|}�\Tq7�0��G���Z�����%G���Ћ���+�:&�kr���x]���<�.�y� /�L$E��-/��
�]1z΋˓�"%���g
+�7�j�m�3
+�!H�+� njL�w>3�b�U!N���9Jm��=��(�

O�v@��������5���I���;�~y=΋`z�AlH�b�N�)��W1v1���k����07.j��"��:�Xd�/mo/��+�g�Z�AC/���/Ak�†�<
<u-�|��s�㒇p��x/����$<
��E
S���y��FpM�_cQ��/��y�1T���-��P�o&"
+endstream
+endobj
+1668 0 obj <<
+/Type /Page
+/Contents 1669 0 R
+/Resources 1667 0 R
+/MediaBox [0 0 612 792]
+/Parent 1643 0 R
+>> endobj
+1670 0 obj <<
+/D [1668 0 R /XYZ 86.4 726.045 null]
+>> endobj
+330 0 obj <<
+/D [1668 0 R /XYZ 86.4 638.083 null]
+>> endobj
+1671 0 obj <<
+/D [1668 0 R /XYZ 86.4 584.665 null]
+>> endobj
+1667 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F38 517 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1679 0 obj <<
+/Length 2358      
+/Filter /FlateDecode
+>>
+stream
+xڽY[s�6~���#5� ��Ӧ�d�M;��}J� K��
%*$�K��
H�-�3I
lB����p w
�xy%�����/t�H�Ȳ�.�oy&�"S��f����m���w�Y���I�|w�
�1��N��X�B�J�a_�?���W�.��˛����*�]a;\���<���=�SI�
;�ֵ�����������
Ӓ/
+Qdi)�J�2��3.�y�ݗ-����%��v�T�@���|Z�yx�&�림Y�Ʈ�g �-.E&p8��k��	�O�:�
�vmO����[ c
+H�=+h
6a3��*;�Q'
(G2��a�)}՞
�(ኢ�����9��?ݗ,
R�J煰�.VJ����	T��-~�9rI�!G.�J�2��8ѷ<�m �ν_� �/�M�]h���	S���mC�e�d�,	%t7Ӊ�z�?�nݕu���x̟В"�3�+�02}\z�~�D"5)['m���w����u"H�ʈ˜8?Z��} r��G�h�l��
*�V�VJ�T�'��
+Y
\E��5w~W���$Y��P�M�u�eU��5K�67�1ֈ̹~{�͂�ΐ������hoPܝm.O�{r�{-�hả�7e�`�ƨ�
�jK����Z���}S�ң[��ۺ�F>
���b:��hG�?��0p����Q� �2�g�d�i<z`��3jC�� 8��wM�&��
������6<��d.t1R�/��O�PV��o���IG��4i׾
+��=��E��}%d3�-��W�)��o�qߏ�K��a���JXs��$ P�
,z�8�
&�N�m������(
bK1�l|�ㄮ9��C�>�Yܴ���緃�ϙ��O�%s��H,�_Oy#������+�rw��'��y�Q,2G�m"� IT��d&�1
���I�S*w��j��
����T	��nvm8��N�Ժ�t�[�fS�
�ȑ3l�G�s|�M�ζ&ۆ�>�j��a]���[�̛�pw�?♃��~$�/q)��ŀ~������8R�$"��H��U�|�ȶ���c�i<
�&���X�:��WS����=�<�8Q�
�ӹC)j�F�t�Q��ߤ9������s��	DQ�"�uGH�kg
Z�)��^�4~�E�C�6�C� �!� ����o5�9��
MR�@n&�Xm@
5���ͳi�<�|��+?h�F�g�$�B3JNC'PP��#�ݨ��K�%���M��[��[�����xG�!�
����a.%�6��M����lׇ���vD���r��ἰ�2 at 0�@^?���H�S$o���'�j���A鸆4��ü�[OQ
o��G��v<Rv���$M�P [...]
+s���%-�O���9�DO\"�W���s��OA�!�T��ah9�Gp����0�/�P��2�4�Ⱦqh�w�fQ&�̓������{1��F�gnD�����?����Ӂx�c9��fZ8i�r���v	 z^Np�t�w�Ӌ*|.6
K
�7tO�4�,�ofQ7�I)a
+��$��\���M�o�U�e�Ge�J�omR
�ԇ9�2�C�w���
���__O-��Dq#2 s� �k!xTZ���k}[c�L
�4��\L�pb\�
1��UEe&do�H*���6����*~�1�CT�hI��iT7�H���+�+��!�]������\m�)_����1�LH.�1�
����>\��ڔu�j�J���|��^�}'�e ���h�v���[�ś���eb��3|�(`'��,�����9�}#S���K* J�+�]��|�U GE,��l�3[63R��}B�PL:$���{���5�'�ܘ��
�Y��
�w��
�ݮ�ʦ���|X��Dڣ����"S�T�����T��
�j��� Z|����l�]�3cU���!�D�T9f瓊��OG��F��GЁ�H��
NA�Ҫq�m_��?��:7wU��:�Xa
+��t��pr��2{�Lw��N2})`I��}�n��_����R�ċ#�9/�:;�_O*�
+K��
�Q+飬�����0���ĕB���i�|�
d�=	�X�/�7��M�ДK��ʢ(f��yzr��yM��"a�<6ۭo��fx�����4%�fۗ�ᐤ-wk����
��؀#��*��
_��55O���2|�Wl��6(�8�a�B|����]���7	�`�����C"��S���
�!�� �����_HL�W|�
+endstream
+endobj
+1678 0 obj <<
+/Type /Page
+/Contents 1679 0 R
+/Resources 1677 0 R
+/MediaBox [0 0 612 792]
+/Parent 1681 0 R
+/Annots [ 1672 0 R 1673 0 R 1674 0 R 1675 0 R 1676 0 R ]
+>> endobj
+1672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [434.163 261.844 441.137 270.257]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+1673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [445.232 261.844 457.188 270.257]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+1674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [516.855 242.069 523.829 250.482]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+1675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [110.31 230.114 122.265 238.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+1676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [126.361 230.114 138.316 238.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+1680 0 obj <<
+/D [1678 0 R /XYZ 86.4 726.045 null]
+>> endobj
+334 0 obj <<
+/D [1678 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1677 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F49 646 0 R /F14 697 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1684 0 obj <<
+/Length 2638      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o�8~ϯ0�/�`͊wj��6�nm�ۤ� ���"3������`���CR�d˱�x�4/	-Q�<����F������?q5JH��]ߎ�"b�YB�����׈21�P���څ��b<�G�j�
��6��ë��<�,����r���ʅ]�U�?��O����]����lz}�����#��D#�(����[<����G1�}q��#� U����uw53ۊ����W�v��Vy��Q
ݖ�o��©�y���̆
�ʦ+;�?R�PDu>_�{ZU阙�!|�.B�z�V�2��z9��bL������:��������u�?Md�t
��^��R�Ƞ�
��7<�_���
+���ӕ�����%/
+�6���A<�Ƶs�Ԣ�.<C���O�d��	����
[V6+�
�تn�ΚQW�͜�Ĭ����|��u��^9�9�@†h����'ڍci�����5L'-j߱B��n�h�4��
���*����nh+n�
����T4�B���'�;nFT.�/'�q��
AF!B���������ɵ��!�\c^b�D�ua�������j��z��������D����8^�ѿc*
+��\���:_���}�1$�i
�Slg at Nv�>w6y�Gi�퍗0/4
j�;���Et�6Ss��
L�ņ�$���!fk�YWcI�
��`�]w
B�nz7S�|OM@�'����T�
_�y�
���E׺�$B�
M��^8Io}ӝ�k5����̆�8���e�,�A�	L��w��5
�a1}�2b�i^䋬X����j
I6Y
��R!h%�1��GWh���'�Ԕ��<��pB!#��ƭ1���Tn�(J�I�
�pE���K�Mh��Hl�PH�U`B�|�����*`�i�Q�
� �R��7{C&DK~o�()�y�����TAg$�8�AGu
+
@
c����A(,>��ātQ%O� gƥbO ���Wa��RΓ	���I�o��\W�}
���p �b"�m��vQW�#`�4I��`F���qD� ��aM8E���=0˾�=_��z*80˞� �$�D1y
+
8��W���C�&L2
��<o�΂
o��y�!�j���Z�
t����
���6��o}�e��9Dw&��D���3	�0Н�S`�Ҍw�s�詀���5b�
N���B�$� QD}g�s
�����(���'��
���4��bi�;�9�
+-�uUpX��?��,�)����}��
�
��>,��*��V�K`����x�^ #�Ʋ��*���=����/���V�:��~L�b
+$�q	|��n(Q� ��-N�d�(�<�(W�BQB�],ڊ�
�;r�*U���������Pz��v��C6QX_z����g--j9f��&�kzm#z�f8������@2o\��#�uἶ�����^�V�
 �'3O����� �9�p
+�j1rXl��t|�J���
����cz?`/����#*����1�3��`(��m�T6-�_
G��5d���<n4�
���#�p'��eR�h�����
����2���`�:�O�8������f�6ǹI&9��	��@y�
����&�E�8Q1
�q����wӁ����	�e �I����������ŇKo �-N���yv`�$fI��W�o5ӳ�m��
����Ӭ���i�	Dᡗ��������|�oP�#s���P�?��o��HdO����Q3-�rw��?%�U%�P���0`M���ZP��ͩޑ��X��ZH��U� ��
(������C�A�	�)�LXd̷���Nj7����<y�q��!uy�����щ�-
+ȁ��w+^KW
YMS0*`�i�cذ�gn)��8QZ�;r�
 g�F�[^��jWp|F�=�?8Ps��,s���S�{dA�~��^˾�p��e
7eY�t1,Ni=H:�^��tP\�
1��A�<̀������)�|���>��h�ї�ܙZv�U�d������b``z|�Aܳph�� J�Ԩ��E��i�F�OF��k�a���$
W`dC��3�P�P	�0-�
|qyh.{�F
+ݕ�ꗣv�#`����[���҆�¡<rɬ�Z�5��Ж��?�7��r��+e���_n��"��

�/����߶q��s���}��yds�zh���op�Y���7�~د�*��!n�r�_�쐰na���|��^v ��{;9?�r�����D�%͘-6�ٗ9��q5�l�ښR�2
�K3v�V��67UZ��]Y�~��w���k� �.�V�m;p�,Ys#�u#ڛ7��7cN
�q��t�p��}��WC�P�	��
�{	�{�_�I��X��^�J̦���PR�c꽰�
+�F
o&��oÖ`ME�8x| h�@C�����[|��t6-�ơS����j]�7�n�tvD�d�t�������&f+�[��C��_w�'���
<�m�B��mw�6q
�C��(2��O0
+$��ƞ�n5�6���C�\mC�wk�	g}R�
9P_Oż
}����ǟ�H8���1_�
(���
��D7`����c;^�
�9��c���G�,��Y��GjK�\�f�*=Vf��Y
+�!+��eع�迡�����P$�+u�H
+endstream
+endobj
+1683 0 obj <<
+/Type /Page
+/Contents 1684 0 R
+/Resources 1682 0 R
+/MediaBox [0 0 612 792]
+/Parent 1681 0 R
+>> endobj
+1685 0 obj <<
+/D [1683 0 R /XYZ 86.4 726.045 null]
+>> endobj
+338 0 obj <<
+/D [1683 0 R /XYZ 86.4 650.819 null]
+>> endobj
+342 0 obj <<
+/D [1683 0 R /XYZ 86.4 244.583 null]
+>> endobj
+1682 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F49 646 0 R /F38 517 0 R /F14 697 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1690 0 obj <<
+/Length 3102      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s��~ׯ�#Y����&�q�v&�X������$�$���e����gq%�R��/�r�=����'�>����˳��);q�Yi'�7��2=��cV���rr5����U���w)��ͯhf��UN��U���ln���y{��-�M6Kz���ofs�
L
+if�.9{{y��� "�DT�k;Y�Ϯ>����2�L�x��[O�rL�h5�p��3�>D�?�u������`� r���p �w�}pe�q,�_X��mx�����z�/c�s\:�K�@N�t�~�
L��hZ�οq���rK��7=Y�ٖ�nQn$EX-���M�Z�3��&Ĕ˥�^�eZ����
��c��uR�<�dn#Ҙ̅`�yj�Ra�����a�b��
ެ��a�}FiqU=�I�%��ɑ@��װA4M����
��yŨ���˹���@��,���-g�}H+\���mjdĸs5�SYfu}�/����|OQ���
+1�^p����Pq��^G;;
+kXd�J����1�QG5u�q��+F�%x�b)�a�Yѻ�G�$��L�0��ڻ�����Ĵ�����Z��D;t(��H1��)Z�vפ�=R�j��
��V&J�W�l=�CҸ
1�4Yf�[�bx�-�7t�4�i KNՖQm
+`�ۛi&uK��}
���y��6�I�R�#�b
���
+g���K,p���<۠�J����9�M**f��Z�n0aE���w�]Ku��:�W�ɪ|z�km��5��E�\��冔�E����#�P������bА�myGc�P�z/���%E�xॿ�Ƈ,��;�=�9)�s1����=��q�aD�eE���`E������誵�~�}�&l^�\.�׻.���3�a�
�
�cS-�z{��OR
�τ��τXI2���e��c�gDs��_� �i�B� pd�S���g�Mg��
P*���{�bzOPp�7
Xt�}F��̯�qz0�A
L�_
�t��T%l`�^����h���tu�����O�8C��E�Q��ێ��b��aH����}%\�Co�z�NGL˚��������S�c]?���0*p&0 .�%���o����{o�9����f�榏}B�]#k�G�ˀw:�Bң�!��"f���x�U���BF�5	����cx�l�+�Z�<\��s�)IB,:qm :�� �Y� [...]
+qz�Bs
�O�T�B�*
+��޾���VHb�	�
+XܟS�)
�V(�j
*`n�F���
+~8�
+ޟ�
+�K&��ެQ�wc�̙�L�A���_���
M�1[�w���R��n���آ��G/�m	N�#wb	�h�w�RIn�2�'�՘�F,�_��Q�	�^B�
�$�����xW:�}�v�c��	��n��pw�s\��+qm��bmK%�5��Er����`��W��ҋ�xT��	�9�.�sw��!���H2�7Y�ƶq'#�bx�˷A
A£�x
�֧�#n��9��G�X��|
2�m�/�/�]�mR��Xd%�+�"t0	+�hGrd��F;7�䊯7
�z������ß��4~��J��+mT�KY��ݭ���F�>���]+������n� C z�W�|��yF
�I6�HK�|?��ډ�:j���:�mO�
�4�c2���θR��.L7��j�� ������D7��G%�,�
�?e�[��CR�Y�
+2��
4�e����p�]7�ɀ)j 	�!-�^�Eƨ%���Kabp���v��'mt��ܧo8
�w��֐fx�,�u{�
�w)���jR����=L��
@��P�i���
b�	0�e
R��/d�,��
�F��5������ �
窖�otž��\8��r�NŐ�ٶ8F�\XGS�].oȪ����!bl]�
h�TI|�S�uj�c.�b<v]c���3mi�w<��b�ڋ�"�b	ͣ�g,�CJ٤U�zXǴֱ�|�V�Y�a�&L�UO���a
^��x
+���XX �3t
O����
��w�
��F��9��Zd
��t��<�}�B��LC�z	ĉ��T��^��	��jq�
�o��|�1zS�\
��1�D�<������<�e^�� l[B�ǻ���
�
�z�d��L6�Ꝋ��c�퉨T�Nʿ���&즆p{�� To��S�T� ��ឰg���>�>��eq�G�p��
�~��<G�/���v�ӫ�_�H��{���7�d�1�	�k�
5�Z���Ɯp
{7���F4K�:Y��d+�^�ԯ���L��-��ˡ�
+��[��W�帒] HG��Đv�ܐ�U�.��'����5���E0}��֧
+�e��z����C(
�%��Հ@�� !����
�@ű�!�R0h$����8?j
+C�$Y�-���9�X���=r�ʵi��
�c�C�$���K
F*h
��jnQ�G�!��G���b�A�!1a}�#8�c����w�W����`�yX���.�j�ݰؖ4���qT#��WV,�F�3�m���AÕ
�E�FD��jl�?o���w�e�Nj��pq�
�� 3�z;!^fe���IL_M�'��e����+�[U���V	܋ �k��,��?��j�ѓm����(b6Q� �1i
�,�ס����6
��q�M�eH��f�
���7m\���U6�5TZ�]*����+��b �v����OP
��
�
j3���:�A�L��dk����
 �F���`�d�l�5��4�~@ٰI�^��X�h�tK�
T��?��e�
��V�Z�DϏ�Z��v�V]A�� G��;
+endstream
+endobj
+1689 0 obj <<
+/Type /Page
+/Contents 1690 0 R
+/Resources 1688 0 R
+/MediaBox [0 0 612 792]
+/Parent 1681 0 R
+/Annots [ 1686 0 R ]
+>> endobj
+1686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.087 452.478 464.81 464.433]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.1) >>
+>> endobj
+1691 0 obj <<
+/D [1689 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1688 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1694 0 obj <<
+/Length 832       
+/Filter /FlateDecode
+>>
+stream
+xڍUKs�0��W�(�Ԫޖ�D)-0Й�pj9�����������NH
夕v�i��'-EkD�et��N/�F�4�h�BF�R�-Z,�-f\�	����h�.��D����5$�T6E��ś��
��0�����m��:��o*�������7�n�o��ѻE�#b�El�D#5z���o-��Q"2��.�FRd��U���:��f�8�1)�P�-؏�m��}�9�]a��C��y
�ד+���
���
Rɩ&LKO�E��t��4ņ�Wq���e����/�+?�!��._�ɪ���>o����u>t����
����^���QD�
+���W��|�q�a�a�E �T��E7)8�F��o��
Ɍ�e���@����$�r
�
+r/�1��)�R>�(���gĸ�X����H�
�%pL��wO4�{p4�����ԋ,�u���rx�����^rl�s���y�����1�V����\�
T�Ϥ�RJMǓ��
%��t��
�dD�
J5�B!��'6E����yʟ.��9�� t%S�N�p����m�gSUSDi�gU
�jS7�oQ�,��*F�?u��
%�{� �X�7�M�>��7p�������C;+���$�ۓ0��Q�l�a�T/{�cH��*:����鑔��7�)~�}J�]*�%N� ]TE
�0K����gm[��O��P�eѴC1'2i��ve�W,O�ln��Miʜ��k�g�f��N�@��]j3x��am�GG�56��v�s٬����8 at q=��cק�; Z^s?
v�~�
��_j[�D����l�����n��{�`���,'���+�7t@t���V}�g�Z�o
+��
+endstream
+endobj
+1693 0 obj <<
+/Type /Page
+/Contents 1694 0 R
+/Resources 1692 0 R
+/MediaBox [0 0 612 792]
+/Parent 1681 0 R
+>> endobj
+1687 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bandmat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1696 0 R
+/BBox [0 0 473 537]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1697 0 R
+>>/Font << /R8 1698 0 R>>
+>>
+/Length 1699 0 R
+/Filter /FlateDecode
+>>
+stream
+x��Z�n
���W�.�^������@��D�
I
����F�0����U��]5�f�!%��w��3��3�O�9�������}�2��l��m��_���l��S����O&�>�t���R Jw� �P�
+Q �\�C�Eq :致P��o���8c�8ca� 	�� 8�B8�ę�ƙ
�I�DA���8�8��*�I�$�4'�b��i��3N�Nt��N�Zg��W����TVEze�G<*�rk4��0�(M�䀡G
+C�'�j���.���l�xD8ɮ@�/ae����2�#��xe�\�����X�L�Ger\��W��.L�g<Ϝb21��R��qs��S˩�5�C3���l���`�ZO��)�|�bc���
����]u�5��H��\z]�!����S'޻��o�y@P�[E���M��.��A�ԮV�ApFu��;���`8	�H�x%ϴA��E^Dm�����5�ED����I��H�j�Q�0�E̼�H;;��."�+V��l ((�
,�;�Ti���r��u�n+f�E׶�p����ĩ'��J�F2⡺(��<$���(�"ϼ !&2�v�i-L5�1ҪJ	p�
��w[���Ƒ8�CM�bAN�pb][h����(�"	ϼ�Y+ײ�z-�2�2�b-����H%�εl�^��ϵL�X��� �Z�TWlFϳA��Yt�Iс�at����p"ș��,:p��\���.���C*��^wR�L 
+{.��B1���f��ic&���]�f���
�:
3T�4����l����O�:��y�ux�~�B�B@�Ck0��%S|&���<1E%R�Q����Lʬ��f�����.7���ø��
�7�ۅ���
�|H$?�\ nD�4�
\@KN��F��鈏s�ɜ�
�
�-A �Yg��>҈,gj�2O�Q�b�e��,���
am���
?U��d��Q�W���M�d�;��A�Z�������5$��!��

�vY;��
+Ӡ�n�
{G�(��!V����hT��ULGtl����U��5�fOi��e+� $� ]t3n0MN��t�+ɶT��Ȧ��p��7i�]>j��
���]_���B|�!(|�� ]L
� /�
r�ZM��)��.4�jH����ɦBqv�q4u ����
�T�E0B��LQ��h�����R�ME��� t15Ы-��Yn�p�
����{ƴ�'���iu�V!;�<
�-*V2Wm5++T�����Š��Kk�+k^�u�;�:�9whs��VfW�֯0[�Œw�K�Ya��n��J_Q�M��lm�� �X�'��F�����k�;H��s��
ĉ~�b
����s冰���U��׸]�y�K(
+���������c��N����p~��

��"X�_�dY�`�`��f9U5.a����K3�%�������̫�,���fNKbf�K��
��(Ғ�5QK��4
��������fI������۷/�t��}��m	›�j����v��������a���o��������{�~{�S�y�~{}����p}�j�W��}}w�����
�\�Y7փ�[�;�~}c�sW�&���4d[ߞ�[ߘ
5_��P�qq�c�ط�� �
�`��/.b~�A�5 %����n�ߜǑRߏ��������%�m��zh|a��Oh��8�����߽��o����9�c޺�}4��{�uS��0�m|���m�f����ڱ���B�����B{�p�����+tG)3�+��e�5f�O\�I�Ѱ��C�L����xP�,��$��Ǝ‰�WY�8Ӏ�SH��P,'��]8�V�$Npt(I��wr���d'��jړa�A8�p8�+���4��1� 	��ᝠ�j��|�0�t�k��5N�'H'9 �te�4E�4�q�$p���/'����a��n�����pZ˫$��
 �SHqsY�W����@8�ѡ�Ud�Z�O���4iog-�32� I��i甮L���X��L;Hgf�9e����a҇�� _���5�D��Q��"��;ؙBJ��2M.
��

%��B��@�k�硧sNg	n�,>+��{���I��)�7q��qF˵�U8�AP��I��t>m�b:ˤ�M{�L;Hgf�G
+)��z��ګ��ګ��uu>m�c:�_���p�X�K4Hgw��d�6eN���	f�k�4qvo�6E�x:�8L1��M�A���{�
�*�������ƙ,�JV�L���$pF���I��Y�z���A�$�2hW7ѹ��;�
3�Y��|�L�������'
�^��t
���P�k6e��?�V�����/�
+oU/�y�/~b`U
+endstream
+endobj
+1696 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160529-07'00')
+/ModDate (D:20151010160529-07'00')
+/Title (bandmat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1697 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1698 0 obj
+<<
+/BaseFont /QDOSHK#2BTimes-Roman
+/FontDescriptor 1700 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 0 333 333 0 564 250 564 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 667 0 0 0 0 0 0 0 0 0 0 889 722 0 0 0 0 0 0 0 0 0 0 0 0 333 0 333 0 0 0 444 0 0 500 444 0 0 0 278 278 0 278 778 500 0 500 0 0 389 278 500 0 0 0 500 444]
+/Encoding 1701 0 R
+/Subtype /Type1
+>>
+endobj
+1699 0 obj
+2333
+endobj
+1700 0 obj
+<<
+/Type /FontDescriptor
+/FontName /QDOSHK#2BTimes-Roman
+/FontBBox [ -70 -218 863 683]
+/Flags 4
+/Ascent 683
+/CapHeight 683
+/Descent -218
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/B/M/N/a/bracketleft/bracketright/comma/d/e/i/j/l/m/minus/n/one/p/parenleft/parenright/plus/s/space/t/u/y/z/zero)
+/FontFile3 1702 0 R
+>>
+endobj
+1701 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus]
+>>
+endobj
+1702 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2797
+>>
+stream
+x�m�yTSW
�_
�}P�-i�%Im뾠���.�S+RE@-�DHH� �IX�r!����"�"HQi�(��im�Z�E��N��i=��2ϙg���9��޻��~������{����`FKd���QrYr��}
��A-]@-c�ř�_�;Xˈ�&�BȄ�~-K��	F��EmO��g&���w���lI�X)\ut�ڵ�~��i۶m���F�{D9��L�
+�!O$�+d�L�k�pz�T*9)L���
arj�(շ,6Y*��H%
+�<O�*|�psh���mk�D���#|�0R�M!���J���� ���2w+r���ꃚ�H�$]*�Z�:a���b9�6�q��&b�Xb7Ol ���Fb�q�8HD
Ÿ�$��D ��x�x�&��	?BD�eh�8 ��/����^e��W�K�߃c���G�'+I������9����ޤʂ���ōP�{��f�;�&��6�R/�g����xE�6���B�� !��UWY_��#r�G��)�YPσٚ��
+R�j��9��.D�.VU����gўYf��[]��B�ˡ�`
�QF}\)�Cb7����� ���ąֺ>H^l��`��1ߤT7��*��I�?&^�uB�9�g��������� �Fج�

����2?z�Nz�w
��V�Ys��"���`+#9�*�
�o�
��z.�	8�>'�u*��j�t�8�[H����=4��m�»���w܇p�<���_��<��䥞Tf�S��C2^���?:����cs�L'l~=6q����e��&5��z����wfQ�\�젖q
;t@��n:.�x�h<TBrVh�p�i;-�Z�!�6���v�yH���z	=���5G�c_�kL����5;�=W�o_܁Ǐ�~<j��D�L�
j���|���ig
�
��-EKYFvyyaqEE)�@��XErkrsmYK�GŅ�=� A0�>�ߘ���
y�D�jU��:
+�
WI-u��N�����/o��o,��,mZ��GS�^��{{P����
���;w�k�j�ds?�1MR���.d�gC8P
��|��lgEe	������$�NJЖ����b�bXf)�,'9����g��'������>��6/[cʅ�S���,�<��M�7MEy�W����f�>�K#�s�kf�0֎
�Ox3��i���:<F� �f�ިȕ� ���^�iD_�z0QV��'H\�O�}>t����?:�
+�[�%�`��z^u�t5j�Z�
|�k��!�
T�
W�/0� �,��� N��u�I͇ �~W|�ғ����i�UTU�厊h';{[�]�̌�G�ᠦ(I�����t�1�8=6�29�縎V5�,�-u����5Jͅy9zya
$���Q�
�k#�h��K��Yj�à�4m�D��m(ԖV��
��n
PuI}�
��`��>j%�8EN�6k4��+U�e]�Ҡ�u��L�����Xh5U�������������7'����
�:Wo����������@�1����
+�)w��a��f���5��U�zx��誽�rݮ&�q�Y�V���,
�bev���� _ԫ�J�u��
��
�BR+�Ϳ˪�����0�W���f:V�5hxz��0���F��j��
�p ������N����W�t�B�K�I�@t1:�P�,=4q��IVPW��2H�љD}����t@�ӂK5���Ô"��@ԫ�=I�0
/���ق\���/8 �����lS&$â����]<
+����S����/�(#�j�s��U﬷
�hB*0\V_�.��
i� ���\J��;T�QX_t�89p���R�qQ�42_�~�2{dP�P7aGR���3�����ʧI4�.��ԝ�+<�r
���"���
��F��V�~�"���=��[{�hN�v�k
I�<�O�<h��{�^���7N%q��h���VguY
����&
+��p�q�O
Ln����	?#
*�qJ�\ު��nk��R�e
+h�8������O��
�P'���CJ�ᐚޙ*���8!�͡I�?
��lc~�I_��:h�kZ�mz��Na�&7��}���]�\��%λ�}B7���f/�[ͮ��Y��u��~�`��a��7�A���	? �A���Fdڧ�嫙Ʊl�17�"|���LWe�O3O;�	\�;RA��v�X���%� ������6�8 ɱV�^�x�h���R�A�E�o��
+��5�C�j�"L��h
.*:\LO��A�Uf54��<�P@��7�e
�᫯J:c`"���"�;��Ʃh���Pe���aL�1ф7��+A�u�Ğ-��C�Z��K#	�s'3����|@q'��.������F׍��Ϧ�
4�3
�
Rpg�-�����9�0�˽=�szh��7?C��s�
��(e"��ho�v���Nq���7kw���C�"R
!K
?L'�
��::��e�I
���N�6�[�����}N{|
��ma�>	
�a �
Y�Y.��Gr��A
+$��r��Ϧ�ģ�5��
�$}�����0
����g��(%|NKF�j��n�T�9IV;��%5�%E�S1����^�����Fi�k8-{�5h�[�To���\�?�
>�h�	�~b";�5&kN�a�,���{d(�r��
G�>F$D
I�
���!��,������(Q�uk�?Q*_@�9��e��ߢ	K��
�7CYzPWUk�Y��6'$[
�
���)���B}Y�/��`�E�$��{�X���{
<�S��)p!A�����
+endstream
+endobj
+1695 0 obj <<
+/D [1693 0 R /XYZ 86.4 726.045 null]
+>> endobj
+649 0 obj <<
+/D [1693 0 R /XYZ 139.066 218.119 null]
+>> endobj
+1692 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F11 694 0 R /F14 697 0 R >>
+/XObject << /Im6 1687 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1705 0 obj <<
+/Length 3716      
+/Filter /FlateDecode
+>>
+stream
+x��[ے�}�W�xa�#'�R"9U.[���'���vּlfH����07C�j)U*O���@��8�} ��������߽��[eg9˭��w�3g��e2gV�ٻ���c��Z95wW҃�����P���WΗ�Uټ��6B�_�y����,C���z���Zr�B!��_�}��ͻ�y! ���SÜ�����Ͽ��_��q�r7���gZ�L�i5��ſ_�� �L�#�Q�\0��nL^]
!���bQ6Ͷ�t����E�m��m[��c�C+U���0V��ߺ����Z8f�
�yUiλ���:p�r���χPV��5�^�Ͼ)��ۆ��.�*7����c���`L�&�Pm����r%�0	���?b#�r
[��P���]|��]�y^����z
+�xXU�
+���̗Ů�'=ov�~���e�P��e]n����M�
�CH�����6A�_*��`�]�n�
�r["-f}~��a�Y���clHw���V�m]�/�hXv0_���v�H���^��ٯvj�]�7e�,��[Մ��]�
%cUӷ�.�V�?.�+��5M�&(�)c�M��6*�:��!h�
+�#K�}o��e0O}h��i�?�`äB5���t�r��[Ӏs��m((����Mx�
���j�G�O�WExH�'��Jo� rJI�fVY�ry
+'��'<>�zSʰ\��,����_�kE�̸V,�ñ�B�,�4��Xp��."y.Y�=Y� C���
+;�	�g���_-�|t�� �[&�ߑ�`ڼe*�&Շ�rS�N���P���m��f�6��IƳ!BJk���,�t@���h���=,	�70�sC�?�O��	;҈`���N��)���8�}�u�#B�(�6t�P{���Q��;�q���x�b
_��/2�t�Y�����
K\���
�^���:F�_{�� 9����
+����$�Og�%,�qgg�Au�9�-4��Ծ%
Ï7߿�!�
D(�Wl�EU�����LhKF�s#2"�`5��9��2f��MIi����
�U��=
[�$
?ű@�`�
s	��ɱ �X����$xp!��亭�<���"���l�n�g���"R(�W��|~@Tj�FG��[@��	��� 4��PO,!�Q�n��-� �ip�鷘\n�W�xB�߿J�|����$���(5���G&j�1�h�!۶1F魫��D3#$|�^�_3Ľ\�^�J����xJ6Ŝ�z٤Nu-�X�b�fL7����S&����R�?R��I0�}C씋��4
&89-�gpr>Xʋ�Q4ea��1����O�r�c��[�u���Yc�&Y��4,"��#��"�,��BH�AMc�� �CP
���'���
,��M-I#N�춇�$�v"v�3N<Gcbg�������OĚҜ�OŔ�g�S at g�$|*8,{��+��:�!P�^�
3}�2
T6ק�*g�H��
+�c���ڪ�6#�#���{!3E�tȹ�H-�y8�
~�eg��Y4���b��gs�ϭo
+^j�%�
�S'cդ��c�/V��e �?%l�2�=�q���ݕ�{B��3�� �

+�������R���$����Y(J�|v��`D�1�OB�4I� м�u�l���d�����
���
+�
h���gi���B�'t跮��6��P7����uxⱥmb� G@�`���z�'���N7��l��B�A���d�9A*��3OR!р 
��RO4�X��X��ٹ���Mw~a1i] 
1��I�� tK�pX�6�!=��if}C�����~MBg.�(ț]�o���B
�#�G���������
(#|RF(�(#��4e���ź!R�Xt��4cD-oCocƈ�j�A����3F:�b�,\�P��Q�D�B�����D�B4���iu�3�-��D������(�F/�,�H�?雲&�d�H��v���� �F}F�H0��t	�s��

+>R�Y��B�c]@�~f��t����Ⱦ(���Ge��L\b�PS:�'	#5��-�<F2���Q��KF$��S��$�Dƣ<�:�Uư�̩���0����j�܎\�.��
�A���D�0T�W��we
�%�
��;eΥG0^{n�NM���
�Wz�m��8L �}:��I��~��0��[�p
���E��Eє��!}�	�"
wO�� M�����v_#�]�ὁ��m2��Hz���e�
O
9c��"�W�[��,p�ޘ�|
+���X�'P�S���c��J'��+���I%����>��<��d�_�!�)q��|n4u����B_��T#:�M��)�A-/!��cI�D��&�e�I�b��]d���V��&�:�w�t�[��˪x����#58��`
��
L
7O�2�h�ev[Az³g9";}҇`�c���iϮ�8i�'�<{Ɣ��xv1ڗѓ�2Z�Ǵ�K�e��K��gE�����N�V.�`q̜
+&Z�hy(8ɒ
+:�����?��
��!c9�����X���z
K�d�'��4�?F�h��rI5 IG:��t��<}� ���n_�C[�ӓHp] (�ۣSA�
�`�Z� _�T�L���gu
t&�gt�0&���c��m�(
��H�S=GJ_�#����#��wUw^�U��S*����B!g!�3#��]fݟ�k�٣����G��J���?[�#�PZ~�ܗ��||��SZK�.ѩ����>'�*X�����UR�<��_EMIaOi�9f��H��
_>�eU�A��Vd~�Υ��^�:�43���."H��n�H�ifN�g��	fN)r��>�.�:?�1̜Ctf."��cr�v�9g��:�ȸsm�`���}���
M�&�6a5�Ǥ�������B���
��8�\�
�I�Dx���ώA����ë�"��a瘞o�{+�� �8.N�Xr���I��Mۮ6AE���~�YDn���!��e昱r
�q�t�+�q��s*AD���~?���4�UL
a�k��S�>j�M�B��v�>�7���ޣ�؆�P��6{���3N����Ʀ�!T
�
��?�qҗX at A��i$�O3�����$�U�!�=X
����}�k�
���&,b#��yS��۷W9�' M���!ht�-��ko���}���v�u��������ι�v}^w��\�BM�������!�z,�O�m]�M�y7�p�
�b]�{1yL���z��]�I�D�
E�iBJl�Lρ�
$P���
R(����c�+�]�C�PA[��k^(X��3ixY�'�vH�#�O„�a��B��#(�Eޏ-ڞ�������S����R�jꈁ���eZ�&A�q�)�SMM	]F��Q�F���K��i�@��1��7�U�g��y_��k/X�;J���TCO	���^}#��@z��N��ۑuI
T�1ʸ%S��M�~X�ԭ�
���-)č��]|Dh�WJ���n�Σ��^F�շ�[�uИ��
R�jUܬb����8q����g{
x�gU~��-�kk$P
!Զ�ç����"
$�=8I�,a^�&
lo�򀽾+�e{��@���{��9л˖�=�X5�lOJb�q��c���I�mcY��b���|���Owf� �f�?7:=e
B�

AY��x4�<eO�8Va���ؓ�����$Ir]��խ���o:\�
�
+��E���G�AͲ��m��9��
��Z�$>n٧\}(�]���V=�j���%�.�[�T)/�O(�9��z�"R�oa��i��
+endstream
+endobj
+1704 0 obj <<
+/Type /Page
+/Contents 1705 0 R
+/Resources 1703 0 R
+/MediaBox [0 0 612 792]
+/Parent 1681 0 R
+>> endobj
+1706 0 obj <<
+/D [1704 0 R /XYZ 86.4 726.045 null]
+>> endobj
+346 0 obj <<
+/D [1704 0 R /XYZ 86.4 701.138 null]
+>> endobj
+350 0 obj <<
+/D [1704 0 R /XYZ 86.4 184.221 null]
+>> endobj
+1703 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1709 0 obj <<
+/Length 2737      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw�6��W�ʳ`� 2����S��Ė|���-1�&�$�r�ק�pG/�&yys"	�`���
+U���
�^������+&giI��f9�%�3E5���n�����ኳ�u��e�:�`1�>T����U��I�����sF��??/���Q����+�R��>�}q������͏g/oξ��
�H#�@1������'<[@Ϗ3���g�v�zƙF�V��wgد
�WHxo��8�IMQ�-�L��y��+
�^�w�a�\fy�&��
O_��qҲf�����h�ϩ�jX1cQ�^L�1"B4�XU��G
+�����̾�9��\yT�I�Hʅk-��f[�Ѻʸ T")��bD5y�6ަ����YY&��̒"%yO#��(Y�@`G��
+���b鮉}��&<�1��{�7B�T5ӯ���@�+��@���
(qT��iY�O,���l-��
�g�}5���?�g�]H
&��[�^�y��~y���T�� 
+� p���^hZ����Y���
+�n������l<��?
�˽�
���.	n`W-�H
��&����(�D	�
�
J���m&�`�
�����m�-�����C��M27�~s�
�����11��z�R����Aq~
&��du�-rN�H�-Ro��ڳE����$%�Q�6i�
+I;̙
mL�|�r�2����]���mU����D�����p����qy�VuY�NDžG�2M�S_���9���ev��u��
^��O��ý�uZ��M�" �BX�7�U�,��N��v�,�t�3
1	p%
����X\�}�Y}��2�g��Lנ}9��l��R}�&eMoQ�1�� �uSdu�{m�6�������K��~
p���݉�͍lŦ'-�nc��8

Xl��Bh�p=OV�1;�����}��l���Tx!9�
+0S*
Şx`�
#����e2��2����=b�&)������]
+�.��Ht�'��\��
���x�����m���[`cH���?� �<ٌ�<��^���*3Q�}��n�����*$dL�z�w�
|�	@J=��?�t:�����m�W16Th
��}�+i�^�F7��6�(��v�����
<5���i����a{�	|�߅��xy���#L٣�Ȼ�)���q2�Au�>9i�g?dX�[�$��y�]��|*4dk�
��'=�
�Bq�&�r`����(��!��@�1�������o ��P��Ͷ����Q��d����%�,�E��#"�ӭ����

�ne���1Rq����d�:;��UR��d�|��(+N6v��g�����MRM�'�� �	07�< m�o��hc��>
��Mw��d�v�ca�NU��7�9�Ev��'
+��YK���y �.w�!m@
��r�ƏK��
҉�d�i�Y�L r��L���"���|n
p5JP�u�Z�!�:҅�&Zrn�l�t��빐&�p��M��ݶ�VۯX3�|�_N[��N!���z#D�ܦ��xW_){����}c'V�xv�&�N�M��~��@0�mS�h'�m�:)����ڳj�M]�ń�Ú	�Or>�~�t�B��;*�!�틃i<'�T���T�xtY��2��e�����-
������d���z� 
+]�
�)a"�A1n����ljKnS��-}�vT���'c]�_���.�;�\�_�iU��y�Cr��?���*�X*�O�_��!h� ��{x4�'���rr����
��f�~���N	t״
�L�{� 7�|���g�V�
+�ɕ86�RM�+�c����B�U3�7����!<e!�)�Hq=�3~�ݱ8��n14�ߟwR�
Ӿ��8�U�Qy
��.��}�@L)Q<�����x"	R�
�2�xw��~p�S=	��>V�=�}
���tf�|�����S��j$T�eZ��u�FM�6����,�R����߾�k�}�O�/\�@k ZqNW�:mK`���pu4����k�b��sXc�G8�
�t�4 at y��8���F�
+�[
���)��4X^v��t�D^��
֩B[	Q�u�X��3s�)t��OǑ��lV9�w��:�	ൊ)�K/+O�	����Itǚ
׆6C}I�ŽѺ龰A
�Z�ڮsw<��&��GH�s��I��a��iQ`r�q��7��C�fH���
��$�1$|"q_1j��J�Z!�3*��2�bD=M�G��I| ��K��n�mP�o���l��
�@�F�&!v��ǣjX��c�,;ԃ�����/�y�8�e�^�
$�MJA��ej�4���i�
w��!��H�pP�
�L��x�����l�	��1C������������F���
�xG�I�{�9����p�<�!�V�i��8�?��щI&�݋���??�X��\��U/��q�M
��e�IL�ܾ3p���C�|�:m�L���)�\�	�G�D��
�'���
Z�4_k�0݉3�R�0/�+o6�1mmjc�R��>�R��C|
���2Ds:�>�r%�@j/�%w,�|�r)�,�aM��S�X�=,�*��r*��]D?�3d��qd�-�y���-ݩ��ZnëmHcZ�4vd�"�ޯ�
P�3�5�6)���
��)�
����ԛo�2�����u��
�Y���t~I������_��o��q
+����\��� �
��M���}q��>�Gbن]���u�Jk
���Ԋ�ڦa��45��
C�k��3�������~���i�����9��A�

+endstream
+endobj
+1708 0 obj <<
+/Type /Page
+/Contents 1709 0 R
+/Resources 1707 0 R
+/MediaBox [0 0 612 792]
+/Parent 1681 0 R
+>> endobj
+1710 0 obj <<
+/D [1708 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1707 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1713 0 obj <<
+/Length 3232      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۶���Б��Q�$�t�!m�>w2m���Z�c�%R%�:�_�] $A
+��f�ͻH$.�ŷ��.HW�Vt���ww߼�J
�xu��Jc"W	�$lu�Y}�R�.�E*���
/d�û[۲��G��6o^]^+Ƣ��|��>�ʍ�������TA#��򏻟.��]�y�`tźAIe�Z�.>�AWx�ӊ��ճ�[I�	�������u���b���(#B�U�aIl��;e��B��7oe�d���ɛ��^^�u��/A�5������ߩ�{�a�񛷾̔�4�d>�yހ>$�ZT)��+p���ž;�P,`�������Ruϳ�6$��6��Q��$+ID܋.��wE��k
�s�IJ�{�„'�fV�J���k
Ө�2A�q�<��l{�
����ג3"S��戌��ɿ��3�p�����
C'D�=2�վ@h!
4��!ahp�w��z}�n<$��eX�x�vV����ϡ��D��ى�%ά���*���f���T
��pq

+8>��:ޮ�m>
C�q����q�('����K�������״�w��Bl���
;������y�jV����lA{��Ä����V_�^o67p���i�p�����P=���!��I���;�H�ϫ�� �S,
+: F�\�nM ��Q1.M�ӡ�?����x5(�5N%p�F�u�Dmq������>�el��H<�1����o\O���NDjB�z����ࣼ>���Mb����-�~|s���,��S�9�RW�y?��
ٺ�j��\Ą�
��|b���|�\t>�����E��xF~
�$$�MQ~�r�MSd��˷Ů(���\�s�>ګ��5=�
���E�¸���i��nб�82��� ���hMP�v�d�����-�CH}	�'墫M�r�iE�F|��m�
nl�O�L|������5�<�S��v��b��T�X
1`�	O���΁C�Ǫ���g.|��|��3�	�l���[OܬPE�s�弾��I5��:o����ޣ������p�M�<s[
+�jl�Y^�b����>O{��e$���.iG
	�CY���z�0�
Ec1��wHǰ/ʇ��ݼy2t�i:���,�:��d��ǧ?�'�%aC����dE�����.:s57��a���&��k| -���|��혡A��p��VP/���T���1�(�wqnĬfd!M���!4���)7�'��*��U$iD��Ɉp�I��~ � x
cKL�W�^}2q
,���QP���;�4��'�gX ��iBh2�|��㵢4��m�ځ��8:�ş��6���������'W�"��%�������Qĉ���Xǩ�%C


+N�
�=�ߔ(�[
,�X�$q��!����1��8!	���&5�֝Y���6���9ZO���^�h�Q ?
y�w��i"�х`�C	Tf9h�"b˹� Ź��΁�� B���R�l���
@�G�`(ִlӦ�>Ue��hsL?�R
+���XĮ:ml*�&��3�N ��,�^
 :)$�#����%-
��fF{P
��>HpH&@�Y���)��
f�9.K�l��?��>�[�$��B�˞aX4r}�����7(֐=
���.	 ;РO>IFa4`�)��W*ǤE��%�"Z]���m���%!�kVM�<�@�^�8^T�H�
U��C�zض�~[�ust����7�@��J"�H

�4Py�6��k	.��!\��bi�'���6�e�yh���\� xG/%��e��C4lm��#jI$d����%�����R���-�0
+�?H2
����Q��E� ��sLӯ���r]
la���6f�ϗ��l��EyW��^2{1�F��P���v�1�4
��L ��묵d��7g�v���l�� ��r��>���
&?�e�z��
7׃	'p����
�a
+)`V>���M�ͱp��Y�;7D9�$���o�N�������}��/@�qװ�C]��UU��
ڴ�
��XXF�京�@�`T�D��B#��+ˌ����r�y�J�W����2t��FSm��5�s���H��%r$!N]E;)�_�(s�8����]�A�X.�}d�9 iu�Hh9������Dy~8��rpfY�
v�� G�
��.��q1C4
/��A:�rxe�6B�����x�1�D��I��
|@c/��!���w�][Dž���;�Vݹ,^xi5�ںE�
�P�Х����f��m�n��f`��+����Pc�:p݀���'��]M˭�|�Uk"���R�� ��<[W��]�'˟CE
��4 c���*l'�]
��O
�
U�TDˎ�'�(�!_�
+�eZ�ӧ��=�� ���F�v
D��`�w�<����y��b�6�#y��9g�]��LA�{5r���3W&�:��,9!fR*�Y͗���$��rJ��۸����Y����ٛ�e�ˑ��[K�{��Lo̍M !+M���hˏ�$>3dr�:��(�
6�\����
 c9 +3~�D|�}y�CL��m��L��
��D �S!~�7 
-�:�e�����s�h>�݁�
� )��5�J�ш8�z5�1>�E��s'�
�%Ij�D(��
B
Ƕ�p*-� }

B	�!z5��
%Q���Q�*��3IrB����6p!JQ�J���{_�v�k}���3?�{���M�s����3�O�A^f����&��1]��p.1�t at I�"���Ҭ����_}��~�����{����s�4��
�X�p(t�x����
mL� ���TC�~��`�/.�����8��� f6�	A(=�� UBҡ6�
�o�B�
+OR��L���-]ꪣĞcX!��)��C�����z��
0��5nW��5�\����u�.2���3�T��
�xzpo���>��t�ᗕgj�"N���Ű
���
�*�@�$@ a����Y����l1~��y�%]8fT�xp�N}
g�ـ�
W��ݮ|k6��MȾ��{8�\uǿ���e�$
�5���Q-%z8ȹ�(a���:��y�}	׃
+`T��U�%J���xLb�Eo�����l�ksX�=���
���{�``Um�K���YZhwv��GpK|H��e�H<�߯�q>8uRJؔnn���S�6 �\��c���W/8>~�a���*6]�,�vy0���Ѱ��~j��:�����������
+endstream
+endobj
+1712 0 obj <<
+/Type /Page
+/Contents 1713 0 R
+/Resources 1711 0 R
+/MediaBox [0 0 612 792]
+/Parent 1717 0 R
+>> endobj
+1714 0 obj <<
+/D [1712 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1715 0 obj <<
+/D [1712 0 R /XYZ 86.4 452.387 null]
+>> endobj
+1716 0 obj <<
+/D [1712 0 R /XYZ 86.4 421.932 null]
+>> endobj
+1711 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F49 646 0 R /F11 694 0 R /F10 779 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1720 0 obj <<
+/Length 2635      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[s۶~��У4c!ĕd;��i�L;iz;/��,�'����ן] �I��ħ�I ��|�-�h�0�&�.^�^���j��T15���$��I�R�8��.'�O)�fs*b���La*���<��ϵ�����
+�+���g�M���T�7�bӲ04�{)+�
�?���������_.��^�uAA�hB[I$I��,���M�0��$"<M&;;o=<%
Z�����E�O
OH��4��
1Q)%4V�D4�"�コ��%ۂ;yi�����׏��x:��p��G��d�/ח��i�����rW}���{u=܀ʔp��[,t���1�.&�i�2���Jh���vѸU(
�[��Uv�}"BU7�_�%`������1$+���3��ʉ��GM���]�Y40�.4Rk�HĺC���J����m���Y��sX�8���R����U%a���r6\Mw+S���N��(�fU>��<�׺���!��Ȥ[�c at g�D����nAS,М	8��=��he8<`�a�mև۠u�w3X�)�
D�Ν��2q���ԣe8'��}F],������˴��i�������N��t��D$���``�E�������#ŧ��n3�
���o�X����O�],L]�osׇH�-��2d
+MR>��wo?~������%I{��f6��x�WF{AtUi�ŐCĠ�ΐ�U0�UJ�No�>��
[`}>"9�0
��֍���81��(����
>јW��6�������nf�_�^���0�cҔO�,"���77���G��c��
;�|B#�-M@�$�8.�8ҹ���#���>	����9A
�*H��s���� '`�������vg���+:�	��Q
0�������Õ ch/X��oR)1���(�I�OI9�G��(���
+H�0O&NDf�NI!� Z�SS7<�@d���z���X4YY���.O��Ah����Ƶ�%j�17��`<��c�m��C� {4���1�FBT�|�>��s!�t		�`B���.0hp�As��K|@��i���.��������������L�a�XfŃ�Q赩�c�: Ƈ�� ����Ƣ,P�Fg���U�Y���p�������5�FW���x��~z�5��C'7
�,�7�߬t�g/|�,ܯU�]�:ߢ���\�ʧ��g&@z`y�׀|�����6L`q�:� �dq��t�6�@�Rx�Bc�S�dhA���A�?�D�?��S�{//�]l�do���6��[G�Պ�8��E��j��N�m~X�2p-��r��O�l��}t�
�_��6��S��À���A� "�͙;�'�hѩ�� H1��
E:�X+<�2p
��ʸݬ�3	�$��]��t����w�
TdJqb�C
x@�ǝ�̤����s	�_Ϡ�9����5�
~�6e�G�'%�1�h��%VF/m�˹
��Y����(d+V���y}X�2��1'i�NU��@��U����KX�Ġ.\*N[�U�y��Pql����������O�%�������'�C��CG؇�ST�A��re���;���{
�B2
����>2� ��Bc�9��h�Q
�B|}n?|��E�#Ж2�x��* ��|�}c�*���������Y�-Iw��-T�"��ߦ�g�>��s�O�|���]eE��g"���70
�Is������sV�fS:�BR+���Pn�Ͷ9S�0E�zI��
�q�)Pf(�0���AL��S0�նO����� SI��l���F3\�}0U�>�����(@�vܸ�l|�r���
+,�v at tx���u�9@ӂ���9�$a�B#��׼9�p�
2CɗY�磆�1hahhœ��y�

���;Z�
�)	�Q1hh�Si��Xv����4�+ڏXK'����lZ��
+�e1�
+�oy
+J����b5މ[�X�6�S��c����s��HF>#qk���C�F!�j�����9�2:Էv��*{XY��W]B����u,��~����
cE���_�"��0璤7Ug��G 
3��ܘ����ʀ*c��y./u[�
����s*
�
+�	
+�������˟��h��9H��gŢ2k[�9�h��s¿����bt��.Dx[
�RK_�e�`x�K�P;�a(*���^ 
+?���g�E��ֲ���Ox��>X�9�8Ѡ�7

�K
+z������ц�
��^��?��n�t`�$(���N�{�7��߃��� �m�d�n;-K���t��g
��v�a/�%d�e�����)�Ͽ��
}P�i�Ƕv�!ǔ}�x Ǣ�J�<�tZ�k`��7��?9v�O#Fh������i����]�ҕ8�N>,S

��J����BF��ď�.��$ԗ�lx
f%k��ps�a��;�Qƭ��C��q��.�,Oj9L�r���<�����1v�rK�u����'ݕC}$}u�)�ܵ�wt����(޳��IP�ַ����\`>޹琑�?@�PCH�����`AQ�`���3B��gx�x�2�#P�6Ѡ���i�k��t~?��v�2��UN�ާ�<���;s�s�X�n{�}��_7��)�=� ѭ�X��V@;)������hЩ�#�v��T�KL��}��h��^�	�0g
+endstream
+endobj
+1719 0 obj <<
+/Type /Page
+/Contents 1720 0 R
+/Resources 1718 0 R
+/MediaBox [0 0 612 792]
+/Parent 1717 0 R
+>> endobj
+1721 0 obj <<
+/D [1719 0 R /XYZ 86.4 726.045 null]
+>> endobj
+354 0 obj <<
+/D [1719 0 R /XYZ 86.4 564.762 null]
+>> endobj
+1718 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F38 517 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1724 0 obj <<
+/Length 2784      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs���W�(WI0� ��a�ڙ��7UY{N;{�)�f
%jIj�ίO7��R��7�T�"� 	4����]<,����_o/��	��H��^��/�&raxD�`����ץ%�r-�X�>�x#�7�7�e[��/7�
{8cj�������o/~�`0	]�vPE�ԋd{��ot�������.����
)"��._�\��6Bҡ�L�e�!�BG�0����(3N����w�>rw��^ޥ_��]�CY������&4b�����;�q
�z7
�2"�h��
��2�봂��.�]s��.���?�~����(�:�Zk��
�W�iY��
T� �a'Vu�����r�����)$cuj"�k)��C�./�,Ζ���]�Fٻ��\�o���(���,+7�b͍$6Ҡ|F"���i�nS?
+�
�!���x3Ц����!IҪ�?�(��Np|�L��{�
)Bm��|��>U
+���N)�l�4��(�}c��~H��?$�!��wvE�v�Ԭ���B��r����
<��n(��|�?���y�5��	޵�x�� �Z��naMB�����޹��x�J��P����3�r�Ճ ^��د( ohu�ƫ�7���۵���.)�(���[���ax
ot�o���D(v
�R�!>����B\��-�����g'J��A��4��0��ϑ:�L��T́\�
as��5@�� w� F
{ާ��+YG�_.�!@�`pE��~
op/�oC��Q�1���Q�u�Ć1
E
��O�8o@��x�����'%��}�:ꕍ2���9U�|��x�\-U�?����J��T�5�Esbt����h0���]G�b����x�@�,C`w�l�1���,: �i[t|OJz�6+�Ad�}��xu�ڭ��l�H�#�H��$܂0a���%�G.i��@/#A"y!��a�3ǻ�ɹ��,��s�R}:y�dpy�C
+�3ix5C'�9'9E�4�Q1�y[�Q�
0X;S/
����u�=�� 3�>�:3`��s+�DLψ��4��#��`zɂXaf��?Z2�̒��O���׼OFX[�W6�{��y:哮�2Y�� �m��N��\�qO��V>uJ��~�6�:��r�!l��l�^l�W��}�)�s�L��5� !�+!��f�a���
�u�
OٻTppb9p����#lv
����?n�f�~��A~�� �o�Iᥧ3v�  �+�����_�M���l��9�j"gcP�Q�-�>N��ܝ�	�*I�u!��%!Ii��a�uQ�i�BfЇ�x�WXY���p�	�}�*s�@t�6�A^�b�Z(��8�|� kAj_�:���}�X��ap(6tS�c�{��ԯe�
+7l��ܸ2:�~*�83����T�DR{a�v����Y
���g'f�oE,���ϝH��^C\
��HC�*���>]��|��*
{�*ݝ�ws4�\�4dzT��C���qC)z
?���ӛ	���WwSZ�}���c
���ܑ+=�aR��8�a��0ݲ�l�ƥ�z��t�?`l\���P�Sp�E�	��(�s���Fv�
m�(@����^{q
���Y�h���Te�Q�Ze�
+fH�}(l�;�bDT�H���F���v�DC�;���dK
j�۶�g�n?�/���ǵ'���}���5�5��۽w�0�"Xjo�}H���>ƕ����
5B�Һ�M��m��-
ߜ�6����T�5�
-s���
!T(�b4ܴ��9��g=�q���pg�)�ڗmYÙ7�a���dn9���q�Q��S�gXR���W���q�%M�h��zc<��_P�(E(� H��"
�
�K���/8$��(`"@m�oj=�t���)JT_����O���
{1���M`��C�~��3�.���<�=@jp�Q�:r�	za��ʉd�Y���)�Oe0Z!��¢�4��A���/HKԃ�j� ��t`TsV
7��j��7xg�S|�8�6Y�W�0h��>�E
+�
(a��2)��ۀ��ͺ��e����ο�(�}�+�}�
����������}��)��aTY����.A�
+��&�n�
+�l2|wP*Uu;�
��am@�ޝՕ�|��'e�=����.�0x<�g��qG��wy���1}�
���������H	 Q@�
h_���7e�9��O�p$.����
�%�d%p�W9D��qZ�f�����r����R��!�f�
z�?��C��0��
+���32
��h�1~2T2�
��s^�$
^����l����b�������B�O�>���

�C�����DN�
��i	~8��У�8ʅ=�*��a�H��:�k��US��
+Κ�П�w
���
 Ma2�CPF�(���*/� M��/f�1���q#�}�'6X"W�?̒���R0�&S�Ɍ�1�7i��
� 
+�Nkf颽?9j�v�ܪ�}h�A����U�K��&���*k�
j���rT��m�R����E	b��<y�I
$�(���Q
y��w��;7�������k$�b�
�B�/�a��)��o1��{���Sf�}
Ҙ`D��[!������3��>25�-l#a�p�zG
+��h�WO̩6����_�/��5DG�-ď����_?�!���נ�y p(���� @�
+B�  F�
ʏ�@!���s�`Ё�I���
��ӛ~���V����*e�΅��
3a���Nߋ�N��UU&3!G��ِ��wB}#��"�({�)��0�$������!g� �7�B���7���
+endstream
+endobj
+1723 0 obj <<
+/Type /Page
+/Contents 1724 0 R
+/Resources 1722 0 R
+/MediaBox [0 0 612 792]
+/Parent 1717 0 R
+>> endobj
+1725 0 obj <<
+/D [1723 0 R /XYZ 86.4 726.045 null]
+>> endobj
+358 0 obj <<
+/D [1723 0 R /XYZ 86.4 215.234 null]
+>> endobj
+1722 0 obj <<
+/Font << /F36 472 0 R /F14 697 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F38 517 0 R /F16 461 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1729 0 obj <<
+/Length 2639      
+/Filter /FlateDecode
+>>
+stream
+xڵZ�o�8�_a�^�b��>vq�4�eѸ���]
�q�S�T������
��%�q�M��Iq������h5�wG�̏~|��Q��HF���(��
�2e���r�y,��L��������b2U�j,��}^ڬ�ɋ��:Qrl��qus
#9�J[�º���ҿ�i��������_�N�G_�p�G��İDG�����?�h	+��8Si2�s�nFZ�L¨]
����o��^,JqD�P���&2
�Md2�pB��+�pmiⶶ�5,¾��+�q��+ڴ�k�X�_�}\���z𻾞��?��fK'�΅.,^�Ƿ�Ϧ4��T�

�ͦ\�Y��G%
^R�J*6�$��PI'!'�M�\
���ʫ|Ů���v�Yb��ì�׫ma�NL4�J���
��Jҝ$�&��QwY���TK
f4���sw�-�ȿ&ƌ�r����P�
+�
�v����ON|�i �G@��Z���3n�t�N��J�%7j���^�/0�%��b�����q�W%M:��_�*�Ѫy\ߗ�H&�Yƾ~��vB'D�
�d"m7�6+���6p� ?�e��V1x��s�ۛ��UUR�#7���QZ�0H;�QܤT/�|aӬI����,=��Kv�S�|h
Yګ
y3�
�0"5,��G�0m�縐H�S�Q�rl�����'�t��,�◠+�b)xЀ����Ӌ�3� �
�t4���I*f�~9�Q
+�rl\���
����vr�����	�5@�%�G)��z���d���M at R�R&/AYB�PQ4�
��C���b\J����s!��Ÿ�>�Bt�4>�`+D#��
n2H�n�jS.\̅
��?/D"X������☩��,�M�˙�
x�411��"�*���!���̐軓�����>a�p�y	�Zs&c5$|�z���1��|eK�J�
���
`��%�S�bdb�^��R���$�9�f�Kp��0N��06-`p��� 4�$� �"7��:�K:޲r� �v�㲪
+����"�G
����p��U�	K@�C$�- m��0����]���P��.�� ��]�NԦ��"�k&�q;��O!�1)8��"�b�-�$[#�8�"�.N����Y��~Kk�vI��ml��8��F�Eҡ<��g���xy�j���'���qU9��
+J5��A�������')��ӏ��M��yv��@)r�j�PQ��� ���o�Ք0����'J8;WT�u_�Y�x0Մ�(~��[Κ�-�QUcQ#%�ޱ�
%�'�r̂8Z@�
����is�Ս�.�bsS�r��☒+nw�
�W��x�^$e�;޻��
��m�o'P�;#�-0%W�S�\�\�.'�oq���7��.���7_�-}A��غ�-T� ��Kڞ5A ���
H)�K�c
�
����Y�$�	���#�I�
�:'!c\MӃ\��22�D�pa�v�
e���k���jR-!
u��L����֝E��-�m�{ ���9��O��f�?
@:
WK��ɲ���@���wޚ6��H�:�w�h�nj��f���8����8D8��rXLw��̹��
fxl��IJF��g(4�MEA�E�8D~�q���u�|�'�}y��L|�s$04u��*�ɋ�a'h[��!��P�V
T0y����I�4��7P��'I�~���K���g��?�<{dy���hw���
t�^-�uv�'�rx߫�\�o_�����v]7������p�+�g���=�4 �=m���NR�������@��g�X6�D���ڹ�H�
+
Y7�ol[iM{������+|���V���������`e`�~��!R"F 
+���f�OO����{��K�@!$�
��[��
������wG�!���1=vi����1���8���1K���$��P�b<�֖(��ѹ�k��,�LnH�A5�y���S`,�P����
b;���'��?q`�g�3�@��b�ԓ�o&ײ��H���L��!V�у@;;Ċ��ݬ�>�	�L�x��� /���x�
��[N}��(�À9��Z܆����oK��ݢα`�	�
+�������#xT�
U���
�E�F#�
�-W�wq
�����}t_`���k�m9P
�v 3G�NŐ�u朦i+�����h�b>
R�`q��MF<�\���r�lE�]���4
+߲���<`���AE7�+���<t��ˑ�en@:��I��WR�m[X/u(U{jv=�AƝ'<

 ��%�S�_�A~�;x����G�:���A��6
P�� �k�xK�yLo�Gg�#`���o\q
+y�%j����Xl,=�� �h�m��$_ ����ˌ����+o7�$�A$��H�j��E~��1
�p?��l[�ȁ"���M���A��T�oF?���M�ihQ�����k�m
�`Su��>@�yvYXO�}M�����Ԓ��mK����,m����5���W�^�
����
�K
( ��
�x��]N��>�	��u
�v��
6����o��/
{�
L¸�;���s�Ca��3
w�ΰtt�+�x�Xu~l����LGP�+���
4��
m����k�
WH&��2
��(�
+��W*aZ?��=�
����� ���2
+endstream
+endobj
+1728 0 obj <<
+/Type /Page
+/Contents 1729 0 R
+/Resources 1727 0 R
+/MediaBox [0 0 612 792]
+/Parent 1717 0 R
+/Annots [ 1726 0 R ]
+>> endobj
+1726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.452 241.895 331.175 253.85]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.2) >>
+>> endobj
+1730 0 obj <<
+/D [1728 0 R /XYZ 86.4 726.045 null]
+>> endobj
+362 0 obj <<
+/D [1728 0 R /XYZ 86.4 533.175 null]
+>> endobj
+1727 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R /F14 697 0 R /F38 517 0 R /F49 646 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1734 0 obj <<
+/Length 2376      
+/Filter /FlateDecode
+>>
+stream
+x��Z�oܸ�_�O�|�~���
��ĸ�ݗ&A!{[��ʕ���"�{g8$%��m�"��,)r8$g~3�!���V|��?��|��UŪR���+W2���b�����m�<>QN��
Vtq���Zn:(e��m�G
+a
+������t~�#��L
s�\]�
�}�Wk��iř�����ݬ�����fuv�#
�_lY	&lI�m�����q��z3����/_��H�
+:����Y��
+Wt�����UcG�5}^v��^��@]���Ğ_����ӿ|���
+�2q�v;тƱ��H��ؔEݷ�Ŧ��;n8p�3o���x���f��\NO����0�]$��1�[��X��v{Em#*+}�}w��n//�4�J�:�U�Lly
�UJ?�����.��/���fK���,G�Gz��$�����Z����M���M=��=�jHg�'�n6k�h�E�͈OI�,�Q8�z��д �Җ�B��
�V��x;��Q2��qU�@�ֱ���b�ضD/�<
�Z?ĊqQ= Ĩ!R�.6^[�x����ӟ/'��UR�ɎO��ūc�ET�
+p1E�౨�b\V��8�Q 
��슏���r�x�Q�op���
�#}$�z�}KF�M��"K΄�0��fF'S���>�a[7��`�����R뾯qџ0}eeѰ+��Qe��`s��a
��B��o���ᔥeUe�0���bC��
�d,|L�
$s�z��7�C���kjL�v��輰3��2P�7
&��dl�i����V�G������J��}�Rz��iz0�h�ajh�ۃ��y��6�!́���(K�D��	0'�@�D�J2
��+js��g�:p6
{��n�7�(�	]-�?pw��~�ޱINk�
�Ѓ�܎��|�Mh�p��f�JR)t�p��u�o�v�/
Œ��K�D�0g��D>qei��rl?"���-��0 �8�f/���I�/]��ջ�C?n���c�zT��п*���YK��_��
���>o), _
+b�:
��$��R��:�#���
�-�N��p:�%�$3R?)q�ՓWV<O��9�L+��sQX�"��
+��fC��6��+x�4�@=u�G�kY��
�����)6�g��M�9���
$��/�V�V�Se7xK�)r$
ٶh��
^��ݰ|y���!����]��M�c�U��O�>�h�Z0l���2`�;�� ǖ��+�v2lO1���q�7h-�YTӧ��#�f
-��6�e���
/�iE���K?y�t��e��;>����
2��z��(y;كo�;M�H8������U�[h�=���,@
�����9����f���C�C��D)�c[���#��
	k�t�d�A�4��v�
��,�c���XA�[U%�B0	��#i1�S���4x��h�ОV~�78*�
�� "�]��쁐�u�l'�p��ׯ���,�C�)xf�L� �{"m�q-�*v��-vԳ�c�
;%��\A��
dU_�
�@ <DV%��-씎X�>v��{D`�'��
~
3�{tg���
�׃�D�1����B�
]�\
_O�p��s?�K�hQ�\ik�3՗��
� [...]
9���,1,�"޳D8K�
x�g>�}%ԛ<��&aj��2��o�
�X��5���1�<�A�软�W��͞Y���;e�lÕ;TwtQO7I�
B�k<�/&v��\v��&n�z��T����	:��0
�w�m�������0�k��{@�.D����:��)>À��x���>�_
�
����
��)��~����
��.!e���&�g
�̾6)����9Y��F��z?��k�:�p���@�!�嬄xc��z�{T
�lP�lхk��F�+~�h�t��n�#�=�Cz,�R�@b�S���I�I�ʡ�3��Cx� ܇^b���R�
��x�]���iHz��~�-br)�k��
�d��]�����c�W
+endstream
+endobj
+1733 0 obj <<
+/Type /Page
+/Contents 1734 0 R
+/Resources 1732 0 R
+/MediaBox [0 0 612 792]
+/Parent 1717 0 R
+>> endobj
+1735 0 obj <<
+/D [1733 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1732 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F14 697 0 R /F1 781 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1738 0 obj <<
+/Length 1308      
+/Filter /FlateDecode
+>>
+stream
+xڍWKs�8
��W�(��
�"�{�n��v��t�^�큵G
YL%�I��
%����!E� ���d���������k�%9�3�%�W�ɈL4�I&Xr�I>�L��I-E�����V˕0"��~"��e]�/\�s)xZ�����
�x���]��ʺ?�����������w�/?
,�	,Q��,Y����d;�JDn�� �K��	�Y�\,>.h��0ژ�	׌H��XP�Eq{:�é~���N'g��[+�q5Q�4��2'J��u��7�<5���\)�ҳ�n��ew�cw
�L�v����ЕkpbqX�MѶ�f��ئ-VkW�w5��lהwS�&�\��
+��k95Zdz�_T�ۡ܁#��A�,Wc�E3���\�A��X�J
+Ar
�2�T(Wz�H��069�%�&T~�%�D�	Be4�
�|F
� 4Ȝ�8Q<Z��UZ�hah
Bkf��3��8<��$��A��Q���@
�d����.̉4*�w����9a�����C�����Y��BEZ��T�
��mWl��d%hN4�� �UQo��'!��p������G�7���VC����z3�<�"ʔ����i��X�Ԅj12E1���4�
���
	
������PK�q��
%\E��l�
c�v��o��T
��p�U�v(Eqb~Hin�1����$��$5豍PL�{���;vߵk�!�]�)�-X�e�:
��N�W r�� K!�����[}�P�|�l�
�v��^�j`)<Ii:
J XY 
b���c‡����؉L��gY�t
��a~��	�f�y���
Q0�HE[�/��c@�Ob�Ixk'�����Zppb�t��!���3��H���_�cu�K�$�>G�G�
��>::9���<�* �$+��Խ���o���(|�v�J(P�p��a9���W߃��:%���c��4Qe
+�M�� 
��M+ at f��jg� <5B?�d1h7"�����b�P��R�n@
�i `&����1�DJ��#��g
��J����M�W����`������Tٓ
��76��L(�y7
Á��eŘ���ѧ�f�� 
̘ 1�>w�YLo�˪
�y
�i*�)���zZ�j���C��
T�+ D�Q�<֓ *ӊ����Њ�g*�����@���~;�L���Z
ȨAdZ����
����/vuu?���خ���U�1]�K��
.�G�
$@��|��
e��A
]7
�6Ž�k��P
+�fLv���T_��:?[�@@��>���rQ�vb�� Xz��'@����� �
��}֠�]�C���=�;5��O�7⒋

+endstream
+endobj
+1737 0 obj <<
+/Type /Page
+/Contents 1738 0 R
+/Resources 1736 0 R
+/MediaBox [0 0 612 792]
+/Parent 1717 0 R
+>> endobj
+1731 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./cscmat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1740 0 R
+/BBox [0 0 473 483]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1741 0 R
+>>/Font << /R8 1742 0 R>>
+>>
+/Length 1743 0 R
+/Filter /FlateDecode
+>>
+stream
+x��[[o\�~�_�o��H���yH�"@�u�"@�0d�m�r�i���΍���#��'-G3��7
Β�{�׽��{���ߛ�ݧ�,����t����H���˝_|ۇ�-�X
n�f�B�s�
ykط�9�����_!�m��r���;W�Z~i��7�V���W�L�#�������|f?H���?�
Y,��ݿD7 �
M�*�0i
��Ct
+��b
	YA�-D7C��U�n�X�@D�@�q��Dt$�0C\�@D�@DV"�=!��Zh�[
y:����!6ʁ����fZJ�&XT���� ,(�1)S��w�O]`U�7�[�� zc��B�'VVrN�Ř�����nƉ�e�\s
ʂ�IԪ

f�X^�9N8YPcR�����}p1 N�C@�)Fr�O����
hy
+*�	1���N
}
��/�P�!��&
���[R���	�oAp5p��{cBLR���	�o�u_������8k
8k�q��q"ep� �	1y�e�Y��)�����
q��
;D<&���`��U����PV[����*�-�]lN���ւJ*\
+�Q��f��$�7L���/Ѡ�AY�!���{����'@{F��d�9�ml3�Њ#��� 4o3�,g�9���
���
4�R7
x�g� � dg2P�a���� �j2i��Tl�f�-6�aJ ůd0���CS��Jp�	�6
+խ��B;��9Q��=�R"J���E�ʕ�v���U�]9��p���HP�!Y������y�(���NN>&��ɇ�;Y���]�ͪ��M����s����<�;Y���*H�t�Eg� �����A��l-
$�;#ٔTH[��v�3��PS�~{��
���vC>��n (�0�皀�=͠"���E�,ER�a
S)~%���
���v78�h7p�,"�Ft�.��YD�e���Kv)K��cÔ@�_�`a������������
��[��.-�$:�&�
��	O�¹\A}��4k
qt|v�"����}�'*r�duش ������Ó
+���q"��e���5�
֟&%&>�
�0��Hv
l�>*��
R�{+W�>t�f���&[�8M
f��1�N�x�����Zax��:!5�4�Y��,M7-Ɖkv1�����
��㵆dh�Q�ҴXݼX��moݼ쭛w�u��t���c4n�u[~��9��
n��x
O.����R��D�	ѧԝ/�Z�G���i.���+��c.�*sß֞��
+S�� fg6�)I�]��t���
�gi�:�q(�p��*��hR:�Ϗ ��l �!�2�!�*�^H�\[����/Q�9Ѭu��EZ�*�� 
��*��G fg6Љ����
��)<K��
@jX�5
Wy��y��~
a�n
+��}
QO���
�R�֠����-�5���A'`�����5E�U�k�#V�:��d	נ�֐]i��긢��8���zT����)�	ǦL���x��tR�ЇNg�S�-��J\
VF>$��`�ٿ��w����toe�a;:)��l��������鞟O6�MNp�`q����+�O�Q����f���1n�K�7<
h�DK�>{��6�8�pcp�����Ԥ!��+��
7R[���1���.E�FR�^�Is�a�l�@��el�B��/�&��8�8�9.��<��e=
Ӥ?��
T�-����
���R��w!�Իk,�~)�������q�lF����h�=��.
|�w�~�zw�q3����i�K��Lsv�M�qH/Y�ͽ���]�������V<�rr���6w�܇���0n(�����w}�ڻD��w��
+�q(��Y��U==5���xL��ps��>x�R�/7�[f���HSҵ69���D������/�s���:�i�f`�A�i�>i��٪�d�&�����

��|]կ_}i=Y�{�6���f�S�]�%�����Vh7i~E���8 at _��0����z��.ɲiի����������>���b�G���kߙ�8��qk�V��9A1�W`f�S�~Y�.Ex
�5i\ogx�=p����8^���t�����m����Y�1�B�R�{
E�L˟�����w�~����a�/9�A���^�ղ���]�~��Փ�w�!֫�O�w�zw���������������W��J�⻑���!��p��jw��'�Q$r(���Bh��h����o���$�$����v��5(6b���|����/�LߍR��.�~��?��O.a�h���w�O^^�uwI�R��~���Eץ��j��.�6xb݀�E5�MD��߿�
+4D&Rė��>i�_<�����ϳ���H�_~�'p%v*�l�Kخ�4~z�ɳ�]������ު�H%���������I���?p4W3O_�b
}q�˫��7�R>�������k��Oܮ� 
��g�����\C��=��k&D����p���T�]e���D�7�-�B�a"
/I4�2Fo3�I.�P��d�/&���Fr�/�*sM|
'�%jq��}eqV�&&̴0p�2�L΋/�
N�bp6}a���
ә�({�s�S�eG���&Œ��4�=�^v�,����M����
���6]�l9�Em4Q�����
j���頡��L9�@�6��z��#4�Ƚ�l�8�;m��Y;,6h�q�����h�m�mg�������I��q�c��6f�
Rg1h�]�閡����,�6�����~�u�Z!=A�0D"Dwj t���D���"����O��E8&1m8�N�<7
"�;5`:�frj��e`?�6
�
�h��h�I,�Ρ�uYꌄ����b ��9,s����,S���ȋ�s(�J|��G4Y�����,�����H�Θ$��y��Z�/����v�I�=}0�tr��]�.�=�7���3&I;��e‰-"��wF�jL���s�i����K?
���;hͽ�j����^�c���e*;
r5&���9��锃n�'�t�%�r��A����g]����+[�"�՘d{
?�f:[8�2㬱��q�YZ]
��6u
o��{5
r5&ٞ���N>�vz.;
r�w��.gL���Ns��+��Tv�jL�=��L:
 [...]
+���!#~
y�
����0��ڛ!����[
+endstream
+endobj
+1740 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160615-07'00')
+/ModDate (D:20151010160615-07'00')
+/Title (cscmat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1741 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1742 0 obj
+<<
+/BaseFont /JTFGJT#2BTimes-Roman
+/FontDescriptor 1744 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 0 333 333 500 0 250 564 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 564 0 0 0 722 0 667 0 0 0 0 0 0 0 0 611 889 722 0 556 0 0 556 611 722 0 0 0 0 611 333 0 333 0 500 0 444 0 444 500 444 0 500 0 278 278 500 278 778 500 500 500 0 333 389 278 500 500 722 500 500 444]
+/Encoding 1745 0 R
+/Subtype /Type1
+>>
+endobj
+1743 0 obj
+3203
+endobj
+1744 0 obj
+<<
+/Type /FontDescriptor
+/FontName /JTFGJT#2BTimes-Roman
+/FontBBox [ -70 -218 863 683]
+/Flags 4
+/Ascent 683
+/CapHeight 683
+/Descent -218
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/C/L/M/N/P/S/T/U/Z/a/asterisk/bracketleft/bracketright/c/comma/d/e/equal/g/i/j/k/l/m/minus/n/o/one/p/parenleft/parenright/r/s/space/t/u/underscore/v/w/x/y/z/zero)
+/FontFile3 1746 0 R
+>>
+endobj
+1745 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus]
+>>
+endobj
+1746 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 4513
+>>
+stream
+x�mWytS�ֿ!M��bc$��T
�(CU���c,*R�t�`[h:�M:ej�6�t�4s3�I灖��2We**( 8 �{�>�pn�۷�w��[�ﭕu׽���}�o��o�� "�
caJa��bu��$�4����fP�Σ
c�Kg�:������\2�ˆ�G9�Q����q1�d0������0��2�Ԥ�+�yfտ�yvÆ
1����&&^TQ�_���Db��DTZ�R�v�Z,.<
�/VJ
*brrsE�����E�1/�
�R�,��+c���}v5���SXr��"���c�H6�$�$���9���
A���J�K3�+*�d�
E���nU�
Qb~arQJq��$�O�^�t檃Y���2�u"�XN�%^"��"��G�'҈mD:��� �5D&��XK�L<K�J�F�#v��b7��`b>�K, 
 6��M��!"�X�Q'"q���o^�<Ѽ
�L湈�6�
+�
;���:���
���|���-x�����p�B�h�"Ǣ"u�5��_G����
�\ܸx|����?$�"g�`�
�
1f��oX
�봅z�'gӹs�]�
+]uf#_�2� S��k��l^�I4����cϴH
ePÇ��}M�9�����>D�}�H����o3>����0�2���6{ ��Rgi3�IzMZ=�F~�֬n�#$:
+N��h��.�N!-0A�J/���
���!�|�u~�A�j�+���h�P�S��أ��z����5�}�DV*�K?�
-���[��PԏG�d���B��{��3�c4�W���uMȄ����5�SW�	"g�j���&�0�Y��ǭA2��m�U����j{F �y n�q��);v��@z
\3��\��׾�

�|r�sRٶ5~gI
�'��P�X���1I��;4=qaZvxB0X�_#�	�VU�����Q7�K8u.�1���.H
u�
+ ܯ�'�H�
+��7�����!ѳ`���0	I��[��@�w������,��dI�hST|���������l�I���e����A$�������⹪d�L^UQ��I�$�fS���Y��N �7�zخ3�Pk{g�	�U쭌=�s��,55�P<+����c�q��A-���.s
$�]�YB�
+`�ѸK��j�W�*?�@�*0x�l��Ug���
�.kߐ,T�SZ�!��Y�U�k8�|C�.D�	i;��]A>Z�Y�>@�s�ѣ,=������T�&h��m$��YU�\�1)m{���2����P��*����

+����S{���c�l��ق��IpA_c'����[���?:[1����&ޕ�ݰ�?q��䅁��:��a�Z8�Eu��;K8_!'&���d���&���Tc4�R�3��I�Wz��X�6���$��7��/d_:3�5=$�zd�*C��{��q���Wv���B��j|Q���V��,��}P�9)D?��ΐ
+\ih1�t��(��h��*�����G'��Vt�^��|jx��m`��OF������Yq����x64�9�
�&Dm
1�2|Z�f6�
P
��z�St
�	�2�|�Ňm
ǰ���ij0��0�\��<��j��ڕ�Z;�C��?�
F�y��
Vkѿ
|��Q��UPm��K���y/�J�I��;<�Sl>K
F�[�T�¡�+c�L�S�W�ntC7��8�6�U��Ag��Б���x-%N�
ڠ��҃�������Mv�w@�+0���g^ۤ��.@$�h��t��uE��=���	j�U�J��SC����� N�����F����\�5#�2$��ju47ٚ
�FW�:�����3����=�^�[U�-��k
+a�IK�ʚ�:�>=#�x���dǢ�����W��/�P\W#�Uh$52HH�
6x��Z4�
���3БG�A?[
���0J�}�{�f��~N
�&��:]U��ΤSj�O2�<
+���u
�1X��.0 �#����h6����X��W�'�@��y��7$��
���i6YL�ćJc}Q#���b��5��%
)���U�4�jUAn�2����i��B��k>�m���ɫ�;ȹD���
��:������i�-\A��;�
�$L�hL�@Mu}���(|����|�^����;�[�!i at O}�ީBl��g�����Օ	�MY�BM��b�)
�f�\^Q4X>����h�[B��Z�
���0>�X���O��2��ܑ_��0v�g�����G��<��^唴)�!��#�y~ǩ3������Y�W�F�~���<182"���1�DF��"��2c�j�ǜ}���;�`�N���ҡ �f��p-�1\^�u;�+�es�����
��:�n#�p�Fg���`S���JRO�<w���j���
��U6�M�Z_�*�IÚ.`�j%�O���6����2Vs�έ�j��g�}�޻H~��~2pѓӬ P65�H��bݡ� [...]
J=��?��f���o�C�Ώ�N
���F�A���J!��z��\�����X
�0`Qa���
+'"��R� ^v��>��y�#�S��_��&�q���$�5��R
+�Y�>}�ȹ݀��� {p��

Y8���AF�*��ܜ]�
&����
�1�P�
�fص���KF����RTx�4
n��~�
�n\BĤ���Vq=������%�Ù�&
��	tvT���
�F�%
1zMq{[�z�-���x����xNjƤ�������൲9�8gj�����������	�Ѫ��OH���E�:
�(�ʁ�O'��@�1[*���z>��t��q[��#T�io�*�x��M@�����ɓ���2H�ٺ=6�Wt�H�P*U���R�
ʡ�EwL
�_Z��}��~�q�grZ0v�u��+&�Zi����R��u��
MVl�6��(���
��ó���S3H�ƹ��!�g�3��fH��ws.�z~o�T��;yVhC�q/�
�<ң*	�
+Z�\2�����9������x�?
B��Eݺ�.�C�Ý���Ӱ��5� ��~ߡp�A�r��4��N[�~L"8T�q���IGe_gG_eg�K3R��c���kw���%�G���8��]_�׫�bq��!_^��8:f��J
��
��4��"?M���6� _M?���Qd���=@�:؜����������[R�M�ND#��ۿ}��
ͻ&\v1g
+�E�=9v�Ĥ"Xp��WH$����t��و������C��An�5�R�MT�L�����
��.U�p�A 77���&��V���P�+;5�j,�JUU�D�[hޥ�h���k����
+�z�/�
��D�Y�;� �
z}\X�N��f�S�r�v(;�ydۄ6��f�&z��݅�A�ߧ�8?�
�%�2�8Vx��[�)���&��a{�K����|؂9>�G	 �Я[�-
�k�i��`
YSc�	jT�ggY���s�j����{�ꕓ�N���gi���Ogk��M�z\kk4
�"yT
���t��{��%��pG2E����9Ť�
�Z_��̨�)P�$i,A�E�%��]�-0
ftIO)���>� ?�x>s�/F�ɣ�rM�譟o@����ギI�I�)y�ƌ��a1v���b��9���V�
�T�6������f��MR����W�
/����A��cӌ�wPB��
�a�ku���
Wu����m�����r?�gQ{�8���8�Gw���aHNu�Ҹ@'��I���$��^!�


j;	�
m�8!�����ڽF�H�e���
���!��^޴7�lo�@y��7fA�&.����4����Hd��f�«h�Uu�z�;g�I���҈�o��0�<�8}��N�\ۚYR�w0~]����i���?=q,��j��%�{�
ɰ�F������7��W��
�||�
����#)�*�
�ee�e��;��O􌞼��ÿ@4���~z�ޡ�e
�uռ�z
��t���
����I�HJ��
���S��LT*׬��L��B�QY��zR
P�ۂ��o�W�
6�a�
���QӮ�-�w�[um�l��;zԞ,�0�^�R�����
S�1����Nu@�Vi%���*����`���s�
l@�^
���j��Yi�	�E61��Z jW�F�]:'�g��Z^Ҝ��
A���;T^m:X�F�J��*��#�[�C6���v9l�
��w���YW7�O7�h�^�]�.�n
ήG��A���t�?/�|
(�)T��(;����%�8���3�2y�`�����B���S1bw��v'���
�j�%y�y�{B��<�=����Kt~�]0P���5Z�����YF��=;א
�I4=�Q=����ǰ
�qS`�*�`o�������J
�:Wq���[G�/�=�H��('=N/4�q��
��eŬ_����
+N �]�����v!&�v@��Ҁ������hm�B��R
ý[Qmeu��FӐN�~?�h�v��$�����}!�b,���
_�-\D�


@�
+endstream
+endobj
+1739 0 obj <<
+/D [1737 0 R /XYZ 86.4 726.045 null]
+>> endobj
+650 0 obj <<
+/D [1737 0 R /XYZ 139.421 261.494 null]
+>> endobj
+1736 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F11 694 0 R /F14 697 0 R >>
+/XObject << /Im7 1731 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1751 0 obj <<
+/Length 2737      
+/Filter /FlateDecode
+>>
+stream
+xڽZKs�8��W�(W��$YS{�c����k6�^�Ɂi���!���_��x�R���^,���F����V��h������?p�JI��Z�ޭE�*f)Q��n���uB��O������X����<�6������7�R��\^~�����ۋ�/(l��[T�D��f{��[����/���4Y=�yە�)a0�V7���&B&+JI*%�T)%4V��('�L�?\�b��7}��
�uY��^��
0��!i#Z]є$L�MPz
��E�Is����ס1᜻)�%K��(]��ouљ�w#��k���f�m����h
3�zw	o���GY���r�c�jsg�����w B���cY����	{Su�`��#qJx��,ry%x
��hZw�
+�������W�M���pg�"��@=��)�[[٬�Pdy��q�F
U!yEB� m���23&�� �cI�R2%2�Kn�	�����&;�$�-S�O�v;�y8֔����k
+Es�
�$FS�(8�J��w��8z|�_y�h����x�V�>
�:z�[$�O`	As�>��ؑ9Q���4��I
j�n㬪�_o�
}NP������
�"�w��4�f�I5}:��-R������:R�tӮO,c�hIJ�>ۖO�С���������,�:�p>�P}>��ߙ}�/V�Q/����bS���uS�(��,Yԗ�&�u`�vY��I�M:='��x;)�bb�9>R��
�B�>�N��j}w��8hPB�T`锦/�@�a�T�b�؟�ܞR%(�0i��H
���"yyS�gHV���\�
<�$�GW��r���6��E���c<

��L��
be8�`
���S`������	�
W5C�.����\+��A����M8ꇨC(��<&A(��T�~%� ��>"D��t�.
���XK����&��
OG�Fk�S"*E�JO�� q�r�ާՆ lS�e}ovm�ʾ7�	�4$��RA�ߛ4��͞�`S<Y���;,9O�X�.�����y^tx?g��#0��	wm��a25ja*Zo�m�>��.�af�;(��f

�
_r�$T197�8��>�[J�	$E�	��b����$��eu*���s��P���NT
B�C�׹�Mу,��p�ɍ���18\4�{�Z &�O��CpFD�
NZ>Sȁ|G�e�������!×VUqgU �
��CV���p��#ػf�
�v�6���o�����kgH��fL+Ib [...]
+XN����5�fd&�Z�Š��z�4Z,P�=G�P��!&�17D�RLDI������RH �b|�,�1
"�'�ٚ�P�b[���P��e��h��%� I_L���
L�vgrƖ*
�#[�gm%�Ȗ�5>aP�vײ�6��`���tG%�D@���=S�Xa����*^��GJ��l
+$��`~��S���(��y��7uV�w��Q��`�D��9�L��sѕ?�v(��X3��L:�
��)
q�`�"��aN�<����
��o>����h ��ﴄ
�w6=(L�P�����{4�nX�^=��C��Z�Qn/dyx�$ϼ?��ގ
��9
N���#�e��'�M|o���	�D�p��[�g"��ަ��>�
p�]�mLh)gA%tGF�O��z��{�����[�8U,�D+�tԒC���A?dܠ���M�N�:c@�=���P0�b,�"��p�
���f�gx{���X�c��
+��1�N</��M�	�������C��S}7,o���[ず!
&C����
�\X����8��o��;���t>�[�
-V���6���m^�2DB���O��j�`S���+jf��nA��Q0]Ә�\6����щ*���.(`������ӆ��6�G]0[�`�\�(���Ə�wg��0�Ϛ�oY�����b�T?-�r[��j�s
+�=�l�ݎ
&N-=�s
4%��1?�s�4:�40��
b{������[�
+��&�=e�	�$'<��4�|y�΁���O�
��^��
y�9��?��踕
+���o����N]�x�쐌+�EӗB5��b3��������|�yl�Գ7~)����Sql��	�M�y<�a��G�~ӿ�7�tbYA�=���z��-� ��g�o�g�@��m �H����/�
�
@VAXr��:�R��g}
�T���J���[5�#rЂ���đ($��UV�� ���k��_���zm$,{��6�}���~( ��S�cǓ�F�,�IҘ�Q/��}�fa��������7Ghtp}��X��H� ��׃.
��.�
+X��T�}%���-3R.�*`	�W�R�{b�)�Z$����@|��
���z�/�l�_XjI���
��|���'K����ː����	
6q:�:s��O~m˺_$n�5H��)C`�?
}�ٞ�P$��]zL.%
�v=�@����s�����T����ۋ� 
	��
+endstream
+endobj
+1750 0 obj <<
+/Type /Page
+/Contents 1751 0 R
+/Resources 1749 0 R
+/MediaBox [0 0 612 792]
+/Parent 1753 0 R
+>> endobj
+1752 0 obj <<
+/D [1750 0 R /XYZ 86.4 726.045 null]
+>> endobj
+366 0 obj <<
+/D [1750 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1749 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1767 0 obj <<
+/Length 3739      
+/Filter /FlateDecode
+>>
+stream
+xڽZIs�F��W�6P�	�W sK�����8�\5UI	I�� ���_?o��FPK��
�����f��YE�7g�^��|��*
S+���z��P�b��V���v�K �=_

k�ɫ����JT�ͱ��wE�g
7^���s%��տ�w{(ɠ��
+;��'����Wo�ywq���g�_��q&�d�J���0�v�ٝ��[��B��(Ti���q��Vi(�T�.�~>�&7KVB��1���ME(b�WKB*���&�����&���'.�t�w�ý|-�t�Vk��Vļ���%�1R��JC
+���2��#�v�5HAl�e]S|��u����3늺�Y��>:�L��X/��&k�y�]St]^q����e����s�� "��h��nn
�?�9C��.�%4�89��G~
���(L��9M4��f=�`�j���i >�ձ����u����[���D−��ԇ��+�m�q	&� $�p�9VZ?č���yC
�ђ��lh����}����3'���*kZ|�K�N׌��
��d�͡�Ue����A%�
,��X���|����c�zxe��e�f4��n�y3[i[d7u��Q�S��Lԏ���ޗ�~K�_���Ż���z��\a��[X_p
�h<lܨ_#��rM���&:�Eu��o޿z�����nT�׸Ve�
�b�
�fnE�J��M��W-]��R�)��m��B`���Ou�:�,8�7T�	��s�ˣ�@�
+9����١tk����36*~P�D
�A��Tx�L�:���0���49
+m��Ů�<C�Qº�	3WQ�vJ�o�a�o��
�fF���P�Z$�J��F����x|����{R�+�6�{tê�K�G��j5�{�oj(oߌ?t��8���&RyA�R��$V��t���no=h��&A���T›��be��Z�
�
+��
��g�{-3T�����-��6��Dts�79������A��uwg(mH�`ޠ��Z�tc�(*��ٖ;���9�N)lf�"� �3b�����l5����6��
9���W�b����XK�)
<
d�Q�g76����#ǥ&����R$[؀����
�(���h[���	�ۼ��A5��yDF�
hj��(��[5h"*�����˚TM{����?ׇ�<��\p���Pn'�L������m
�,&I�`}U/�$�+��Tkg�
h�d͞iH�y��id��:6Xy��Sl:^�h 6��m��l�W�`�c��y�L�gGyl�A2	`��tA�
AS]mrU@�o�~��
)*`;,M�"���lߜ�ꘫ贪�cˇ��C����ፌ�X}ȟ2�
79�-�.s& �R����.֋8L2-��ss���wܐ�'v���=��K/v��
;6 ,Kм-$���:
N��r�Z�r�[�}��I�&^F��I48�^~?�o+��ݔ��GM�����d���a���s��:��+�q��k9x��b0�%
�
za��/
w�C#�i����q��  �Oۂ�����!a,�1��9aeb��ڄ:>e5p�o�j�PI�8h�

a�$(:>3�mX<k[P���H�-�$
u?f��2��
t�;"�a�^
���	� I�$L`�)��X	�8��)�Ș��MnM�q�
+|��P��!@���H[(��]]�t��ш��[�&�J�G��*$m7y�s��7�
v����)�Q���
��(��
�,B��m�
�-I��
c�6wJ���E�p�/�� 4t�`��9��([��I��Ob�Wy[�T$;�q�#

+
)����P��{)�L4�)�"a!}��v���]�
�|����T֟j�$9X��p������
?W@�����΄�p)8��SA�$oo3���.���=[J��@7˥��)��^���9y�%S&�ޔ�83�=���X|tp�y
�
 =��9�
�$m������i)���4/MR�^��!���ċO��������'��>o��n�1�8�m�@#�)2 ��B��E9��>�=}�	��0N\�猓�dr|�:�$c
�,�'���m���$xW���O��|� XH��	&r![�6����ĂK�d7��%1:k����q2��|�q�q�8�Ƣ��c<��y���)�[��x	�z���e{���	�����v9�
J�HE�_�b@�q4�5��.w�.�G%w�d����ܜ��3r. qOc�2 g<B��pY2�e��q�x�e\��S�,��=�ˬ��p﷈ˬ��꧵U�JM�Y��Y�Sp���~��,`3D���
����p>
+ca��4nZ3p�/G�P�
��Q�Xs���
+׋6�J#�F�6����`��2(��i�v2�h���a��h�H��>!Q"`BB�o=x�;�\��ӄ��L�Sx
B;g�/����I�4�j6r3��c5(s�o��gR&�A�'��48e#��"��R�I�<�L��`��;질�?�p�s�*�L�

�wk�]S���)�a�Lٿ���t�HGW��y�
��#�#
z$�Ozj8�
�����I� �̳����
��0�3
@܍�8��>�t����)��x�7y:�Gʋo�)G[E��G����z߼����/>����q÷߽y��:�f+e��^*O��]/>\�F
������Z��av{�儆i.I��m�Œ �[��'�/)z%o�R��c��c�^kd��9�ֻ|ܒ�����D2-��1���q
{[���E���R�N!�	�S
��ܳb~F�cGQ,�B�0��4S 
�F���M��R�Lc rŏY�=�9q��
+�9�Jy4ܹ�'b+�,,�H��C�q^:�EK�a�<��1v��}Z�w�g�k%>�p� �{9|r+͢'P̣�	���#m:>�,r:��>��f�pIP��
b �1 *g�?��Nn�@��y��gĖ$����.2�\�8�@���TRI�_���dGC �ť�JG�
ox
+6��yluf+�t"�'(4F�
�P	`�T.]b��3
�Wc�HLڔ�-��$��|�:����9q��p�
+�mDLf
+��n,x����6���/����T�3
`l�Ԣ����-'n�W
Y��1Q:��j������\���C�&��iB��A�S��vL+ �Z~�C
+�/6�#�	�f�B=�-��4�_���T�J��c�6�ɤ>Pšc��R�!�~�H(�d� s{ݑg�׊4���=�aC
�Ɖ�8${���i�a�	16���r�f

,aQ`��
^�K,E �C�����~C�����,_��$ݞ
&gj�5X�s::�Kg
�
�f��6�D^���'�^��� �۞���Ř��LS����#}0D�Lg�](w/�cS>{ż�P����S�݈Q8�4�([�u�D#���H
q
+�gO:�'8��D�%����rz����.�L�ғ�5�0�
Z�׳�P��s�*���m���>��3�HJ$��
3<���j�/,v ��jF�=��=��i:@ѸI�:x��S}���9���H�'�db��r���9�E�Œ�ԡH≱ �>ט�I�� �~]�l� `�mpt=&������/�ٜ	�R��YPM: JOIJt���w�����x�2�4i^:���O�Ebl��ªk) F�ԓ=��
����*�*�o,����G,	�49s"��l%�SL!(+D-_~���ԓ�?È��C�SnJ����h�N�;�n��`������/��oG�
+endstream
+endobj
+1766 0 obj <<
+/Type /Page
+/Contents 1767 0 R
+/Resources 1765 0 R
+/MediaBox [0 0 612 792]
+/Parent 1753 0 R
+/Annots [ 1747 0 R 1748 0 R 1754 0 R 1755 0 R 1756 0 R 1757 0 R 1758 0 R 1759 0 R 1760 0 R 1761 0 R 1762 0 R 1763 0 R 1764 0 R ]
+>> endobj
+1747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [442.313 671.562 449.287 679.975]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+1748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [454.661 671.562 466.617 679.975]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+1754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.616 465.467 204.081 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [346.248 441.434 360.97 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+1756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.066 441.434 379.789 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.489 441.434 415.211 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+1758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [88.171 384.815 95.145 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+1759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [99.563 384.815 111.518 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+1760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [115.937 384.815 127.892 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+1761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [322.99 334.381 332.455 346.336]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.012 310.349 471.734 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+1763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.069 310.349 490.791 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 310.349 526.596 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+1768 0 obj <<
+/D [1766 0 R /XYZ 86.4 726.045 null]
+>> endobj
+370 0 obj <<
+/D [1766 0 R /XYZ 86.4 701.138 null]
+>> endobj
+374 0 obj <<
+/D [1766 0 R /XYZ 86.4 427.963 null]
+>> endobj
+378 0 obj <<
+/D [1766 0 R /XYZ 86.4 283.85 null]
+>> endobj
+382 0 obj <<
+/D [1766 0 R /XYZ 86.4 187.989 null]
+>> endobj
+1765 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F16 461 0 R /F8 473 0 R /F48 619 0 R /F49 646 0 R /F14 697 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1771 0 obj <<
+/Length 3235      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks���W�*�ʄo��
���Ֆ-ۢ��U�=�ȡ4�!)ϐ��_�n`�$��H'�X�!��}/�]��r{�򂫞%V1ջ���"���%�����g�>r���	>����ջ�7[�_֟���x5JJ����7/�ף���z�?���e�e<�T�nݲO�oC87�S���vv~{���Q�V�Ib��gg��&��o��pkz_ݺYOpK<e��٧��ͪ0-V)��G��,%T+�m��O�8+6�����[ε�E'������RKe����Ǥ x�ˋ�j���Ȑ[��/��Hdl�`;L0X�N��0&�
���C�8��e��g��򩒧`�3��w/���޳P��
*Z?
2ʓ
"8����k?j�j��|���9�N���d��?1���d◤�R^�m at QD�U���@�����y@�Lj��/�|��-�.�Jke����
��2�C�"+���#�9�I�v�l����YN��
�9���w�
��$���SbBj"�8�Ip
z
+-p)��kZ�?%��"��!S�D�t�H[����;���������¿XL��/1���<y�K�H�"����`�pj���+�;p�����?$�$��K�t!/A�
"EX�S�h(=J��Ñ�m��n���� ���8/E�'_V �I)�R��"iD趢�L?䂂K�5FG
+�'L���QS�Hُ��Xv����P�h	���$���N)�aֵ���4+�]�r� ��<wd������Q � ��E��MqQce"d
:2�W�N*��l�6���O��€��PO�)
��=I������
2	
�չ	��P��
������`U,�
+�dp(�$U$s�~�*�D���o�d�"m������۫׀7S���mO4.}TN��hi�V�2���>���<�yD4�w�s���9�������Շk/ �%NAӪ��z��4ov9�V�
+7���˝r:��ZN�s����)�Ku9�VTjO�����o�߆���nNq2�����
����*�{6>ň�xİgeD���	�k��}2O�t�? ��_OW�
�����OL��I�
[E�4�ϣ�P	+�)e��`����7WoK���)���=����_[ִ֨ƴĻi��!��"�l�4QamО�����
+���`	T��)�E�|�$��\�
+³�����6�d��0@\����Zxn>	�E�P[㎻�"K�yx;aj��(��=-+jC
(�
�1@퀲m�ܼ�p=��_�C`�����5o��� ��
�T�\�z(�@G[F `�*�fOCe6�ة������'��W���o������D�B0|u�̆�R�m^�q���F8��]3��G�nڸj�A�(���\���h�
��w�
�`9��@\��Vŗ|�c{�
�I���H5�8��$�*�<fQ}hY խ^�k��	���CIb!�
���8(��&�2������
^���P��xv�W�����*��jx�j��`�7
j��t�ݵO&����}^o��2(�
�
��
�V!fp��N�Y���oQ3��8U\��	��
k�n�� su�yq^+��7w&@���Kw!�e>�*S��xӄ��V
NJ�$%�*V{@@cBkb$;�ʄ�b�T�v���/&����`T䊈���^�ځ�X
�DUy��� >��h5
��ks�`B�@��P�{�'!�*ȷ|���8Β�$9�|�,M�)g@h�]��f�$���
+t&NB7�*6ܥ�m� \��c�6ԕ�� �?L�%�
D��O�
E���p PP��u³�����5��q�!�rnBt���:���,`C
!�:��Cܻ���|����
���26a��1
׭��h�¸�:��T�E"����dM�F��m׊��p>di�G����w.���Ӡ1�f
���������2������b�#
�:Z��ȶk��F�h'�h�mW
+��1RC���x�i�

�TΊ$�|��sN!b���y��㋪�	�00���֨%K��8��7���̈́�n���8��%�@hW.
�0,)��x ��N��S���� e��ݶ^Q
�'��@��@�K��.Kj�R/�^-8_��sFN����!0S����
���
!M�c��q�+ �B�qm5�/+��Y:Kf�J��EhBO���Bw�-��d���nIp
X�k��.B��P,�UG ^��
�Y#���6w��]��#���l2�]�m_�h�&�`�!�����{8�*g��t�=z����qz�ȓPۺ�j��R�o���FZ]0)e0I��{D�:�����N�����X=��z�/���yu���$���ٿ�d
�� ��q�
�j#d��aj�
���qӁZ�lQ"�Ϗ���t�&���A�	��
bݬTc�HVT�w�dz!�4��
�}���Jk�m��*Ov��L
��dqQ�P�Y\��[X
�&Κa��#g}��
;�Gp��f
+�k_�QF�
������f��:��:��� �EyC��}=��o�y0΅8�G�:�*�&?�W���)���ŗĜ�VD���P��j�W2/J���u�C叩��n<"e��g1�r�1��:/a�d����t)����ݵ^�wGG�Ҏ0rm,؅�p�hP��t�X?�Q-�
�Y
�/�K��<V�w����� �9d�d(��z�p����,��-p'%�k�S������
\�;zHN�����Lp
d)
db���n�y����l5A�4�:�i+�=fɰ,�$%"�k#��~Q_�.���R�_`�p�_��H�W�.��[�~k>��N#����10��S��t�e�i�,\����8}�`]�	YU�J4�~�!�Cq��(�

�q��{�4RD�C�=����E{�H�q�h�6�|��&e0�U6�Y�Q�� [� xvU,��Ld��fĀB�A�)Dx�׵ <�K(����LY��ࡈg�S\�VۉD��o{	!8
Ї�"E�n�,��@�;]��.��Ae0
+�'���N[G]�@(L�VZَ���
+o+�.-��c��nո��#�����w3�
r�c;���^���NQix������"����/PI3��R�jw��������Lw�=:��S���2��(������7;0|�m��_5��{0L�*��{�Y��0�f�ɺ0�9�A:�U!Z�n'F�
+endstream
+endobj
+1770 0 obj <<
+/Type /Page
+/Contents 1771 0 R
+/Resources 1769 0 R
+/MediaBox [0 0 612 792]
+/Parent 1753 0 R
+>> endobj
+1772 0 obj <<
+/D [1770 0 R /XYZ 86.4 726.045 null]
+>> endobj
+386 0 obj <<
+/D [1770 0 R /XYZ 86.4 214.187 null]
+>> endobj
+1769 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F14 697 0 R /F49 646 0 R /F16 461 0 R /F11 694 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1775 0 obj <<
+/Length 1562      
+/Filter /FlateDecode
+>>
+stream
+x��WK��F��+t���x��r�n�[q٩8�O�B�]*�H��O�CB�0��I�QO�_w���G������
��AFR�����G�$�F��cL�N��+���|���"2��en<~;[���o>,��	�q
�o��gX�x���CU�C�E8�����x��!�<z3�}4�2 `�Hm�@��(�>~�����0bFGߜ�<�� 
+�"z��g:"!h�4%�k1��9BE<z��(?�us{��%<I<Y����nE
+GC
+�We�;Ҏ&ň��2��8{�U����B�i�P
�����
kA6q嬄�'Lx��^o��
+)ܨ+׋�,-���R��*��"�š3 hB�B��%U�N�Ҳ�m��v
�
*j
�Ť�
b��L���]�
�1Ҋ�z��xA �����SV�'y铔ڬ
���E>�C�%2&~
8��*�fK+X\N퓇l�F��E>�ϫ<[B8�����lx{�P�c/2ϫ'�.�h��!�4�K��+/=]���U:+Jk<U�����\��?b�(��:��a��Z_�V��`2��=����3K�F2*� Ve�h��p
>��Nf�O��Ki�m�4�n�ѽ,�|�2�j��2HV���P��R�:E�5B�b۝��m
��zV�y1��t��;!qX��
:�SqL�:��7��荙��U��
i�g&�c��U(-����o��6�"iNhD$@���A�e�
Z)4
+
Kva�	
��"��
����wCi<i�
+��04ڠ�@ǃ`IhOWp�`�o;I=�PH0�U vফ�v����eQ,->�Y�� ���@,��o,^Ѓ�.hI_!chQ��>�|@a�kɏO\n؞��ʅ�����N)*
+�4n�9
P�j�T'�nU�����.�pd�"��6o
[YWCY=#<�\<��|��^y�7J�B����-O��4�"����r8
&/P�
#qȒ�@��b݉� i�����s����L2����

#�
+�]�$��
���k���d#~��!~$�f��Dܭ�<p�w;�U
Y}m���{!8=��6"g��]j?�rx2�/���|�ޏ� ����}:��Y>�])�In5M(���F��L���S�\���z*E%;��˜����Ka��{���"��2�4n����%Sp�4���@�	�� ��n0#��������A���L�lߦ)
ysl����Tw(�M���f�T(��)�:�sب�]o3~+ �Vd��m?s��~��ߞ�0~�h��[������d�\An��㷪���Gi'�
�]�K�I���O�ؒ�6̟�OT`�d/���A7�>�=8����?�il�w�n�?��?lV��@�Ö#��&�D�aĆrS���?����3
+��o�D\����sx������-

����[��:���@f��!�!l������}�����j���w
`ҵ�K(���>�#U�/��p����{���Hm�x��
+;�u��<?�lg���ꬻ `�锻��=�F�4�c�ó�N�{I��;�:p' g��V?�q���
�
+endstream
+endobj
+1774 0 obj <<
+/Type /Page
+/Contents 1775 0 R
+/Resources 1773 0 R
+/MediaBox [0 0 612 792]
+/Parent 1753 0 R
+>> endobj
+1776 0 obj <<
+/D [1774 0 R /XYZ 86.4 726.045 null]
+>> endobj
+390 0 obj <<
+/D [1774 0 R /XYZ 86.4 701.138 null]
+>> endobj
+394 0 obj <<
+/D [1774 0 R /XYZ 86.4 529.11 null]
+>> endobj
+1773 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F14 697 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1779 0 obj <<
+/Length 2803      
+/Filter /FlateDecode
+>>
+stream
+xڭZQoܸ~��X(��4)R$u���������z}�we[�V�J��ί�
���]��
� ���3Ùo>R��_�����O7W׿H�J9�:�V7w+��Zi3��٭��|8
�)���UO�2Y�a���Л�k��W�3+$����_����gz�5H(����Zˤ�/i�c�E]C�6(Ť �Z�[׺շ��ؕ��]�,ש��f�Yy ��ɓ*��z�;z�:5�3�:�%8g��A�������U�e6L;�Y�����r��~����(w�sK��JV�=�

�%�L�84�O��X
^�"(˓LJ�.�;go���d�j#���^E��
i�g�����-4P��E��a��u��u��xd덒��鋽k��	n+����&pT�%>>��^G/�
u6�p�ʎ�j�؁�} ������1ؤL������P��N����U�	;B#}[E�e��H�,m��
��`{3�]�6@�D&��Q�/��L��u43ڜā�spE��Hl;쪯��X���
3u�yW��W��ٍ���-� �ʾ�y ������C��]���>��b}� ���l(:v���.��i��*zB��
"��.�TƓ��
��9���&��7�8x�:1�߿k��7(�7J�Ք��W��s�ӌq3N�<�g��E�ay����A�hȒ �3
@�L�%f�� w2��lFw����F����ۯF�Ur��\���g���-�|�!Kҷ����e�`�^.��,j�b�]q.CdL��b���{�p�i��FZ�c��D�Ĉ=_ ���m�����-Ůf2-t��`֌�q�l0�DT�(���I@
��8�
���֕
+�`�?n .�)�����
UTJ&�%�=c�N�ź��hר�	G�������0�<�Y��P���j��M���pE��?6r�ߠ��X�35wL�t�qW�hW؎ݶ��S�-*��+\�(VCu��bG����Eq�� ��@���M�J
5���Q���
���D� �/U�����ہ��&jS���
v�
��
��+�C�=/a7P��?��o%�/W)h���o
�r)��
��Ź �V� �2����I1�*���I#t���`
�y��_B��]�/���6�3��#
%���
����#*�;\�E9Q���\,�y�U��h
+�J����^�

+��p�C�[�#&��C��]�H#��� ������:�	���,{��jFY��<�!j��;����XGG��rl�G�"pr&�t!"V
�0%䏌�:�����)��#Ҽd���c��Qu�,��3��+�2Kkc"e:m�k٪��(��JV�3
+�ve��)�[���i�b%{?��4R8v%
:\~�>�M���<��
N�攃����h��
 �����cU�^�#<�X1ߣ��`�
�����A�(��`��A�u��*��K�dӘA�Z�ńbAG4nx�'F�V�9�⍸��^6[�z��Fl����6��BVNo,
+5��^d�6�{ �&P�����Kۨ2�<!b ���튮
+�
!l
���-�����Z��Xm�� �8T[�|^[�U"|TB5)�?�iԩ���}����ҝ+69"ڿS4�1�\WͶ>.�|؀L�
6�.åIδ=!Z��R�j2:(�s�E*��ej?V�kX��c��M�Ò�,3Qf��0E#mU��p/�m��b�ݐ���n,�P_�}�^���T�9/$�SYG�a��ݞ��V��fs[�.,?%�Jk���3n
��w=���Ѝ�����J�>
�tم|�q�Ү��=<�6��$�
t�U�멡�8����Ov9c9�a[x�)�בp��$^ɝ�m�Ռ.��
R�_ܩ�6P%�\;W��S%*!�J�dQ�N��u���8�u�4��q�J5P'A
�j (�c� ��um�;���'�u���2�L��!�'�u}D���%%���
�0t�oD+w)IT���%d��V�4Msܾ�5��qU!}����J��34�g�tq
+K_�+��ঽ����:uo^b��xc\n�S���t�}!��ᖥ:{+�'
#|v؀G}���_<��MqE����bbҌ6�o7W�>_�U�YfA&�60y����g�
���
�}���}������
[�lH�&�+��;
N��ԅV����c,b?9�h�]yW
��=�����:�����	F�����ڜQ'��Ґ���bӼ�w�J&d�fP�I�Նd�R3Oʏx���c\qK�~�8�n;���6���#,�'�
+ҡ����
��}�ۄ �k 2yt|�MRʧb _���>�:�c~��f���
+�.��,t��� ���5��i�
��3	M�q��(p�@�����P?�
*)��
��
�}”q��Ì�{}	���}��z�8
+���������M�鵶gZGo��;�l��~	:I�P`g�Exs��
���U;�1m����8�{ІN��l�Ο�����}H1
ZP��Ԉ���ò�-��җ�t\�#	|�KWŀg�}6�4��#N�St���*��'f����x���2w�"�����K�N��|����/`uj͜�,ٮj�9�v�Ύ�
?�
-��GS��8��C�Q���KC�H�l{�Tŷ�8���
���
u�j�A1�"��
���Գ�i�� �i>}W$G�I/7LK��x�W�-�0]��ކ�ę|]
���jDn?�����s,!�N~o���O�clǧ��p�x�%܍�W
��Գ;yj!~�i�kK�QX����#|!G��p���C�� Ћ�:1�
+endstream
+endobj
+1778 0 obj <<
+/Type /Page
+/Contents 1779 0 R
+/Resources 1777 0 R
+/MediaBox [0 0 612 792]
+/Parent 1753 0 R
+>> endobj
+1780 0 obj <<
+/D [1778 0 R /XYZ 86.4 726.045 null]
+>> endobj
+398 0 obj <<
+/D [1778 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1777 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F49 646 0 R /F14 697 0 R /F61 1781 0 R /F36 472 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1784 0 obj <<
+/Length 3393      
+/Filter /FlateDecode
+>>
+stream
+xڭZ[o��~��
+
�,��.oysڸH�&9�{R��-�l
S��K
���3�%���$@�������7�U��[��^ޜ]\�d��y%���"K|�H��OT���,��B
,WQ��ػ����/�\/W*S�����b�
+�5�
����;Ã��/���˦�
�ohD��l��,���������g!P,B{r�g:Y�wg�,60��"�U�-
i�n�U�G�g�>
\N2��0
}$�$�0M��b�o�b��2�~�ҡ�k��TU��R������f�L`g��ۡ�6e}7M~.�BW�Q��(G���n�7%
�3]Ru��An�O�n_��z,��f����)�(�*�o��da�΋U� �����6з�a��ޟA
���/C��C��޺�;R��t��:���㞂��.{��<
�<�m��I��t�������篪�m��4�ԅ��ZA�ڑԊ��c�
kaz��-�ɾ���5H�r���wgj�Z=��f���}ђ �o�P�v�m��2�s�
+C���=\��~�Kc��9���ݟ��,.�B�~�����R�Ϙ�5tO���U�t�/ͺ�KCjXS�Uc$�hD�?0Z;"��w��,�i���F`�v��긱�t�X��m
:[֦#�$�s3
+�ĕh�#
�
���
+
�4��<�;0+���v��i��X���;�5m۴�m����Q�rgF�H�`�J���E
4Y�L �����C�6�b�xX��3�ۂM��t����AQ�J$@;�j~v�ў#��2 ���v�d�g�V��{�B��M����\WO�'�D�͠ ��@�����t��Z�Sҹ�'�T����P-���E��r����Wy?�`>�֘��˂���Pȴ�~ؔ��ɞ�Vp�����q���`
����u�=#u�d�6;n	�i,
�

+��q��`D�H5K2p�<��lJ�$�A.�N=�K�
���%k�d���o��{�.lpu�C���� �ޗ���~�m�6�w�-��
.{ݗ�*�Iy��R��D��hm:@%�l(�]�4rs�W��W_�*a�T�y��0�
�=9���C�2�e���k��:�,vH����D~�Ǥ@����Nb�̽��=�A=o�,��͠�>���u�ۗ�i	�s�]-�<������VUi
5ҰZ<p�*�[b_�ԁa#�F����^ֲH��p�2|
C#B�����O�1RYmgN\���+�.рp��@�R��،��}��n
�
+���g�
G� ۡ��p'��8�K�<W�l4� �
��'��~
��w��S��~�F�[�w��AHl�5VB
�~ �
M)�;��f��B
��PI@�>�-oWgO<k�_Og��y<�)��-o�]¼�k ��A�M3�0Z��5
��N\\b���`�R6�R�B��$�
�4��n~�O�Z6pBm
�1�J����ih��u�`L����R�� �
+$ �I <ɹ̨e�	1��#�@ņ"�'�WWM!=�&
`��zn;²W�2f7s�l��~MQ���߿��x||�I����;V�0�~�v�/�	�T� A^2h�$!
o������!G������-~�a�h�S�8�c�."d�}2vRh�+�|��#��F�p6��ĝs
qە�NZe��k�z=� �$��_v`����\P�Cs0Ε�%E(��$A7& ܍H"kN�*���7Bȹ8
�u<d�t�JG~���a�s;!|;����	�3p~����6��?�;� � [...]
+WEE�H �d�%
�\��k�G� s f��hZ��wg�G��eS�=���%��O!�@}%��z�5C�v�vܦ�)4]W�6 G�����4�i_��ҵ<�%xݗ�eoӖ�����E@
����,+�j���t����1:����:,�E'~.�V��E�EOYD�
�WQr5�M�HI�l��v
��旻�EzF�66���Hq��O�D(��!�D���Lq"�L�G�"a���A�π������3���y��)Ys�
	�A?
�÷���ju���$��ADVl{�.t��௚�(t���� }N��{����a �z#�u,�.���2P����4`�]@/䌾�
��}Y`�A�FI�<u7�܏#,/0�rA&eK��SA�I��d3����ޖ�Z�k���xb�ò��#��)�F�YF���B0P?J�rH!��̐t::3'%����F.
��|
&Xr7֑M�DZ�hs(a��8
J����C�Ke�I��i����T��
\��@��~�S�c�F��C}[1��H�#zITt�0N'Y�
�M�-�
+ ��o�~��
�)K�EY���}SĎ�]Sٔ���+jt�3�޺$�� 
�Lujg���'�<�09��S!���P��t*��
{�+�ј��
 ^B�	Vq¥D��c�B%''�e�A�'��_
]{Q5�:�~��3ES[Z���+��yQߙ�
��z�7}O�
���tF
��y������˟_
�����C��(�� �<��U6>����<fS�
+R�@�}�����͛�����98N �M�����W�bi
�4���%�ʠQ��
�]{.�4m�lq����Wt"7�^��վF�W^��S�{�M���o���D�y��AA�
l�@r#h�rU�?�-[\��c_N��
���
�#k�����TA�S=�39	D�S
&��k
���K�)o��~0Y�ו��.N'�>�(�
��_l��0f���A}�x ��X�	Y
D��S�z���� �"��i=�=D����R��E��H�s݊
'\�򄱇^���F�P0�����oBh��{��,��"�T޲R��a�A|BQ�m�ew��`���۝��j��)�x>�ף�M!
���Lg��-�9"��\j�YvuP�x�x=���ټ�=%NO� �
N��kп8H�=�ۡ&�$�OoJ��
<V�ҡO��
���wXo�n����j�*�<7rJE
�d��Bf�P�B�l
��b�I�fEx5n��d��\�8O<��E���Ë瞎�[D٧������T�Z�:����V�vv4������� ��N����k:UqN3?�&t:�r>u�Tv O_|>��m���c���@5�3�3��

�!��
�Wm�jP@ܖ�v}�_1�A����л��
+�������<���Li����ƿ44��V
+�I�
�"*���3k���̽��=�s����Z�Rb�r��
qIR�0�:P߽�xwu%O��S��7ww�9�>(�s
�����Q��SL�;�E��us�sw�rx��#��ϲ��Y�=��+@���l��
+endstream
+endobj
+1783 0 obj <<
+/Type /Page
+/Contents 1784 0 R
+/Resources 1782 0 R
+/MediaBox [0 0 612 792]
+/Parent 1753 0 R
+>> endobj
+1785 0 obj <<
+/D [1783 0 R /XYZ 86.4 726.045 null]
+>> endobj
+402 0 obj <<
+/D [1783 0 R /XYZ 86.4 616.479 null]
+>> endobj
+406 0 obj <<
+/D [1783 0 R /XYZ 86.4 346.598 null]
+>> endobj
+1786 0 obj <<
+/D [1783 0 R /XYZ 86.4 161.836 null]
+>> endobj
+1782 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F14 697 0 R /F38 517 0 R /F48 619 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1793 0 obj <<
+/Length 1660      
+/Filter /FlateDecode
+>>
+stream
+xڭX[o�H~���e,œ��T���6��Vm�*�} @
�������L���K2����7��*���������@!%�
��A,"��d$Xf�������,|�>��3拫��3=�âl�d�Nڢ*�
q�B�������l9�gF@��X��� �̾~�A+o����{�op���:��}�a�(~TaB)�RD"iu�����N����"���x>êla,��	_�v���@�ì����Y�mU�/��
ۍ�M�����J���{�\�a��w�<b~���a�`ŦIi�T��i���k���Wm��y��
@vb$� ;��܊k�0��W�s~g�HZ�H��m���"����
	_ۼq
�Ӽ���ĭdyS����E�,��2��֝��l|�q��Xy�:�Z��߰�a���;����#!��p9�,�Q�
��瑽�6y� �
+mJ�R�$�
e���6��F�!�e��Q4E�K]�n��
�z|?��
=
��j��6.M��8p�$d҄i;
|�U���J��?��L�f�� \�$�S�}�(��"5��k�PR�Z�5�ڗ�d#;sW�M3U�F��b�d�Z2�?���8-
����|�›�R�JdđP�K/��
�
ҎA�
+ �����J�W�b�١UY~�l׭�H�R��նv�KOn��\�N����؎��j�G�g�����@8��
+YQ���$R�ۗ�R���2L�Mb��o6�! �4,�~�����[�GUQ���{pZupE�!��s�N��T�rD���~1��]�|��"�;	�*Ĉ+!���
+kgn��4u:)u!����
K};ך��]
�{更��Qin*S���^�i�S5{�W��|~3
�����M}�`�π�PϨ&?��0�"z�?6�J0�!��'�8x]%��ݺ0�.z�z��
QI�ʒ3
B�h^ 𒄯w�A�r�:��|!�
+?TmnN��,�"Y�7�[
�0�o�Z�b =�����:����#�'Y�ڃN/��09���\����q
�Gz ��+��vҴ�4́`���l0���~�9�]����>_�7v�4��Esk;���#Iz��l=8Z
�
���ɢ��ʓ
�I�0�p��:0R��۬ ����/��k��O�,��:�mI A�S0 0'H���q֕�f[f&���
Lؕy[��?�xU����ט
��M~w�0f������I�re��Y5�h�@J[w�|�KAKgH`6t˫����qa�Q�x%���Y�=sL��#�P�"�
+^L$�b/>\.O߽�
n"z�B"��P���g�_&��
��ц���s�����wg�����*�
��`aO��a�, B�B�����?'�)�;
e2})��K�,�L
�:��LP&���������6
��?F���#�<��"r�A�[�
�Tă
=ױo��Ne��f�j��IT`W�K��i᷻��aPo�]p� ��D��X�B��m3
TK
+ϵ�
��2#�:f�_���i�� MbM�s
�LLq�uO�1�N5�$�fG�޵�^?��v�cAiٌ�����ș&�Q<I�
5�/و�+gH�z/����P�%yBK��]O�4���	�C�1r;�s��7��C.H�B�(�]7b;ߦ����@*�e�Ҍz��]��	Nƶ
+endstream
+endobj
+1792 0 obj <<
+/Type /Page
+/Contents 1793 0 R
+/Resources 1791 0 R
+/MediaBox [0 0 612 792]
+/Parent 1795 0 R
+/Annots [ 1787 0 R 1789 0 R ]
+>> endobj
+1788 0 obj <<
+/Type /XObject
+/Subtype /Image
+/Width 953
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Length 104438
+/Filter /FlateDecode
+/DecodeParms << /Colors 3 /Columns 953 /BitsPerComponent 8 /Predictor 10 >>
+>>
+stream
+x^�]	�N������x����*�4P����h�ޣx��JD�"%/!
��兄\2OdHiz�
��{����>��g>�
��:�����k��>���:k��X���
L?�/�؁�#{
m_��ǖ�l�7;d8������lq�:y����b��Zp�������=�g"bOru1n��FJ�Q��:����9�r
���
�sh�d�{�{�w��)ț�D�ڻ܉����I,^!1�TB��Eo{9�=	
J�0�L�"�z?ڭ�_=���KGm>�W�
��L6��%&Ӣ�m�ŏ���Ʈ�߅l̡���f>��1\�D7�
J��
�@XH�%��e�Ed�@6e ��d�
��5BƳ�]�A2�^?���\%/��ԫ�$y�����^:nP��t�*�]!;;�v��h�9!<6�����^�~����ۤ�3�uO�d�ܬ}��v1l�Nw�l�9�Y�s7��t��P�X������e�����W
~�l�9�z�z%fET��L��_~m�ч�
O��,�d��be�o�qd_�ڷ}�u��Vm����?����ODϳ$���a
 L�²���w�Jw]�
T�zg ��fl)�l���̒f	QOjmQBE�����_����
�A��_餃U4]�$ʉ�dg�X���:���!!S��&�<���"�1QJ��u:d�R����+z����I��t�P)\)v}{�0씲�)�H7 R|XT�

+\}�ن5`�
����$e�Q-�>&���$.Z
4�bwjyzcC�}
Qɩ��j�[0���v�~����U�N���,���d/i
c9f$44�c��-1�W��
���Ϯ{�Q92>~��L���ru
+���
�^w�8
+�qƽ%;�~[��:��M�γ��S�ݪ��^j���i3�:G�W����#�+#�3b�]T61.�w�ĦqpKtm��>������]Q]
II��N
W��
=�񰰎�����[���	��9�K�~�-"���b��*�8�~zd$��ROU��U;�X-�D�D-�%�i��C���}Z�M���5U(��%�za@��W��zϽ3����C�T�o���\�;��
T.W�7�x�������A��2ϭ�����eK.
��u�9�ݷ8Z�¿�*�Q��+��
+�|��Q�h{ҥ
l�6���pb[
��	%��=h�S�'��d�O��;m��
40��JVN��E�g�(�j|���~�e_�(�3Ӊ4T�^��L��$��3g�	�
%&N*RH��
a۹)T�H��"Iƚh�,���zU7)���*YHԂX{�P���d��IX��=�~�*��!D���\Dʤ�(S�P��XI��)%ȝE
+��l%�hQ }T����
�pa�*XE�EuU@�C�-A
��ta�@R1!VvSn@�b�(������"�C1l/�&D��QX�šB���^D4*����F����tr��ZH[��^ԠQ\?l�6iP�
��3A������m�^`]7F-"�=���5D
U���%
�<
��i
���}�:4t]I�J�j���'8���[[��
(�4�oij���!�@������>�{����T��P�餪��
�nH���>��O�;�M�
F>�DZ���[� ��
���t�N
ζ^}���l+>S�� �C��_�dZ�H �~�sg�u�ꉇ�B�>��\˵���F�O-a��'�"�c�����6}�r_���������g�h8��"]

�q� ;���'��Z#�Y��+~�c��ey*FF�H=i�U�qB�P���Q��'M@��#
OXa��b�e��DܤՃM��
?B2
He���#)=�(!�
++ɲ-�
+[}�6)��)
Ùii�i��
^o;�4�`���H�c]U��/�M���-�p�@Y��v
����S�'
�Ɵ��L8��~<5!-5=-5#
i�ii��z�u�
+�"�h9�)$��5#U��v�zzډ4I������k7�r�a�NI�cwR��_�z����Wo��yqK&���� ��z
&&r��X�P6���d� vE�*��
6&Ȗ�Z�R�6�)��P��dQ�N	z��yAe�}/'"��(!ɒDJvHk�d�L���#�wJ�(u�
$�,\�U�
U�x'�MA�
%Փ�K�*��*H'�(#����Y�\�P��"R� ���%��d�����œ
	N."����� 6J`gQQR���mA���(*��/
+��*��b�X�pɡ�D7���
+p�
�˒X�k��[�2���F^F�
+�,Y.�.�np�qh]j�j�a�+oXNV)o&A���XE-A���}aO��F\G��
G�L٬���~�u"`P0�d� My�������3�|�"�nE��!*�Y���E�U
�IPD��
�4�ku�9�~���dzz����D�0"��lN <��/�A�'����a�6Y�%�k&J�W긤���zD�(�6�-�I������8�?����6|�:KĘ�줾��F������n�]6I��|L������/�s��;Ě�Y��t���|f���"����"������1��� }F��}H3fk��ނ�ʖ聨>�J}�)JRǩw�1��j�|N���^,�����CR���˲���c���a���[�u{�*���2��5#55
��Ԍ�i'���8
+"+���
ɧQ����zBk}Hn��"$ȿ�)$K��"��uP��4=�l�����J/�q�Ĥ���[��[���H�}�Е�da	��2H�zP�
&ip�v
+�$_1,ӂ[=
Qi�p.6�ip,ګ�>�3�Ƈ
$��B{\o`�qSk�Z#M�7�P�k)�]��k���L��]�b�75�|�Zr��u-��
<��TE�B{h�yU�~�*B����7l�{Ყ5�D:�y�m�".�Aq���,����z���T�)i$��S���k[B=�b����Ǩ����2Ac�Y;��6U���1�T���6�]�4D���z�~��U��I�cwS��j�Yw[�.>>���|&X��N���F2m���x�ې��c���OQ
�(� �����
om<�9wJO{��N�uz��̣@l
�_gܫ�x�$G�Q̫�>���ag�}��%�;�+ �L��`�V�n�B���ٮG'cNB�I�z
�W��=��X<LU�2ҧB�f��t��O*`{�$��!��^��=�W����?�5'���̓v*�c�Y�t ����ʓ@��nC�(Ѵ�NRsJ&ia��Q��=����z}���!��͈��8e�}Uʗ����޽
���> [...]
+%�n^>蹱�E+�HY���/�Lj�O_��q'���C"�˜�g�0
+I�L��Qg��4[ ����%�ǧUXT���?9ƥiݱ\�R�1o{H�H����d�c�Jp%��݌d�;���d���1Rki�#�#�nNJ��+1�ײ�^p�W�"B
�#�k!\u�TR�z���q[׬��t���&߿%QNO��'N$��?Oȟ�9�^�%�����-[�+
�4�շ!�"
��Q v�J9�[���	��Q���a�uG0���`
+�YF
k�z?{�����
+��%2��fU��u
J=����(�ᩮq5x��Bܒ�����
Ǣ�j�cO]D�r��@�[��=2!/3U��f��i�ɬ�#|��B���#v��6��t��ە}F��v���
�^�w�y5ҸuX�T��{����t�
�=ĻYGc��Y����]��o����%��t�F�銶س��� ��S{,�*���x'����TW+}�2���Ժ��jSQs�Ъ-eG|*�=Ѱ�i婀���ͺ�Ysw�㮛��o�1�����g�u7v<#�l�'�uH�^�b�7^��Gz}���D����1��{gB����;����Q]�Z�Z��ls�c�֮��Å�?Ęo�SM�����n›�V:���=#�ՠsN��N���	>#
�h��.����>�\�����fM���w��C��:I�)��
@x_����/�j�+�`��<�?��4P�
�C~�������w��U.
+�_���0Œ��S!]�����@��K~��+�)7
����=��(�	�!�[�	g	�J�� V҇�ɽA�W`U
����t� w
ru>�KXn�}�DQ!UJ-TB�,)�	?�b��B�p�(�2�J�m˧B�WЊ���[�%E]H@�d�p��ZJ�M.Q
{���B�"�7g�.��7�1��o
代����0>
	�-���/�,CA��C�u�9
�$DZ�.�إ
�p9�{H7"6�G�m�����z/��
��?�$��!Qz��	��S������b=N�c�2��gI�?�\���1��椚��7�o�
���G�&'ʸ�w����#��kf4
}J*ټ̫J�8�^j�E��sӏ�
��Q����It�$�9��׋��2��@� ��� 
+�=�}ˆ\И�n���>y�3�8
�lj
00lw����n/�3�����F�d���r�6�#@>	��L<��t�(!t˴djQ� ������t���˳
sƐMX��1�S�p��6HM)�r���d��{Z*�
O�����X�k�a3��g���
=�ǑC
���#bŶ^�OZ�8"
+���/�Xu���z������DQ�#G�\�(����HK=v��
�S���{�p��C
>�z� ���8��ǡ�r�F�\�T,
+�L�";�2���T
� ǒ�&�J-�����N��ivОV�$���S0v)�o��L\[4����4��SٚƧf�Iv���
��
6��W��n�s����W�HS��b�ʖX5qM��vn�8�����l��+ZNȓ���Xn3ވdKfl�o�q��鵬���3�-&F�ePg�mqz�-
+�Yw�ڪ%�
/dr5�=\��`�l�"KR.H69+K�c���,�2�)
eI�%�&^.X8��U�=[D
���S�F��r$�5	oMD��1E�I�b�mᥜ.�bT	�l�]�������e�
+�[���mP�o�'��z6����M\�|q���x��Џ�L�:R;.�������=1ˍ&M�{�
��~�;�uN�� 'he7Q=��cu9�(�f�2
���"
͂R>-�ƙ�\�Ѹީ�u
o�|�I�{иFn�8fVO5�ԨR���	Q�
�|j$�G]�6��.��	_�A���zX�x�BnJ
�i;E�X4!�J���5�d(�'�#�H4�5o���7Nyo�R�4kvl�KK=!ȿ�d���p#&2-e��r�nZ1f�R,[�=�e�.9Mv���q\�'�(Rk�!ɘ�#N�b�G¹Qր�Ϲ�~e�dUV}�U�)^OH&$��8���T���a��j=�
cϟǏ�G��Q>�@�$5�
�ӄ���
��X�!x
c
]�	H�Wi�%|N�wBz˿���)���>�k���덕�5._Ĥ���`?��
�3�i!��?��u�h
���Wr�E�`lߴ~���KG5k��ԏ��&���}�U1�
�iV�-Ҵ?a;П,AFC!w+58�}��4�;���3V�V����~��K$���ّ^���؆���uY�R��|���9��kI�
+Tr�WFK��E"mg����u	�s`�nH
����t���>��O��sFq����X��S�+����cN��Oxe����}�<�͒�
6��j�>qYZ��4d��
#�G��<��B��
DO}�FPe�{i�ط
���h!�;��Ig��+��.%��Aw^s�
|�G
5D�[�`XW�u��ը���KE�A����~����ĝg9��
��	(뭃v-��J at O�;_��ؖo1�m�6��Os���~�'>c/��R���W
�c�Q�DG�#�2�-f���C53O���Xmݤ���Q?J�<�>�w�h��R
Rc��������SUǃ�\���Y�ĕ�

�
qLZO�E6���ņ�-v��OmP�K#�؅X��MOJ��1�G��|X*��@�d<9eW2<C(�
*��)
�%X���T�ҳ�5u�v�w�����~�� u�q���R}����֬Vq��=��U�v�SJ���=����c�{Ͽ]��
}����@�jW<���^�~[�@t�V�	@�Z�L^���
+$g���ў�UOP��z�2�n��L?UH8kC0z�Q�H��p�HO���/n4h����,�>(�`�5j�sse���y/���֤[o�+6���@�7qijC��?���Iĕ�T��mS�t{V����r�ʉ?�sN���>�T������wϽ��g[����n�g�Uo�my(c��t����Y�/yC�eZ���x�V�w̨��KB�=omow�8Q�����ь��ٰ�*�c�9�e����u������G��S#�w;+�ׄ
3�}b̓/|y���q�#ީ�����:18����oy���\���?oVPw��E�
�
{c��ٵ��{���Z[�iQ���`)�h�E�Ug��=���b��c���Zٳ鹫&-��؜.���"=��i0��k�M~���F_U��[r�
	�״<[8Ɍ�S�1Qdpe0c1���/~J2
�,H3�HO
1��z3��鬬�J��Ew;��u���Ur
g8��d�
����%�I��)��`C!��Tֹ�42%�Z�P�Eݪyb��Y�C^ �tL?c�g1Z���T�_
7��X._4y]_P曤�Z�ߎ���	�9
U��Z�K�XB5�7��A�p����1)��+߼��_�
U<H����)�k�B>���� �9s�2zֳ�j���.����6�C�흟�*��f��� �]�Tp���6�h�I��T.?�/Ƹ2�EPdU^Ru'3�2�#�#7b�;���VR�jŹI��1+������1�Ѵ?��$�V/���[����
+����O-\�I�*�ך?ؘ����1_�T��5�ٞ5�	
�?k��)��>:k�Z�.t����qc�b�C���b��4h{��\F@�hC��kW��X���=�i�$A���>��NFh�B	����e�o������g�/~:5M�_x�V�~��%؊�_�8M���HH��2Bz�io挄3��iИ�&�����~���V2�4��i��M7���.�W��sjT�~f��O/S�L���
*���pcq&�?-iߒv{��S�����������o�N@�
��t@K��ݖnSqǀ
f������ĺ��ݺ5{㇤���V����W��MN {��$��E[v�i��n�g
�����A�?�>k���&~����ވ}���][�_ޭ��)V��ES iM66|�#_���$Py��X�i�%����{�(�fC*'���P��|;��:ta�@�z�DIa�W�P���+F����|-a��y߼4�������<
+UF.\��p��n��B?z���Q��
��&/BBI��9"c����B%�k��<���>���v�>YW�|^�p����&�*]i�)V+n��T�.Fk��bU�f
�������*j�<H��w�<����i�T�D�	�uד#B�UP�w9@Լd�]�֣�rš��N��Ǔ,z�P���bu���0�Ө���;y\@�@T�D�v �'5���
D�t%S�f_�C�H����ط��>H썱�{.�	#�e�ܭ��y�A���#�v��ة��H��>�IQzl���}홂cp�q
�-ȸ�kak#V��rw
v^��Ef\V�;�
=}��������Ka}�Πy\櫘uO��*�N}��|W�}��`>e(4
�2h�
}�!i򐼂�O=�FMh�d�����(o��Dַ�ˑ<2Y^�JŌ��G
9U�t�@�V��OB�<�Sו�)�1Z�"��"��
OK�.	'�
+�
߀5��~�,�vB��
i0���%� D�5���2�b{\.����%�ȴ����@
dQ�©��t�0W<.l]T�L�^
HMc�6�`��.	7�;[}���pre}��Nݙg�Ѽ٥͛7o*�&��4j�X��.i��l��JWhE���O�}�S���<q�K���owե[���JLY<]o���&uz�{۵{���U�FϮ
t���.�{�҃���.�l�Ko�r��K
��@�hߞ�W�~��:'����U����N�u�z�X�
AF�]yAQ�� J
�v�'
FB$С���tͫ�)�� /YNF��]�^�$����
+?Ͼ}V�����,+ڪ�z�7c��V!o�}��a�vh��-�e[Z�
:'���t#��O�
+ob�wyf˕RDG%aR��&�P�駋]?�ۓ*�JJdI	#���̚���
��l��ѵӛ+�6l��$����
���C?;�
"֝<�W{H��D�¢UV�
�f�w[W�bТǢM�L��|��#����$
S#
���*��;����B��rsS�8O�ǹ�:����]c�u��Tܣ*t�����nod#��w��F+�. ŵ����N�J`�쭏T�q��V����a��}a���g�Q�y��m�u��Q�z\}np\���WK40]
�������x�'���\́�MK�ca���6�JM��<=)(	�jH��[IiPĪ��
ꜮK�^re�$&�
[l[M���*����"ҳT� �ʕٌ�l�e�Zpi�t�
�2ر�Y�^=*m��b��\�M�ׁ���/p�7�����8��!1=53���8��V_�ϱjMW��)�����Ʉ|u�
�8d��,a2�Y��
+�n(Y
m��>��
+`?����	0)	
�2�H�'��u��8|��4�� ���
o���
��
�+��ۿ������,=�� �ܶ��|����(�m4�h$���h��xF�!C�yz旻�
KQA&6*����e��"�X���߽����Ժ������.�+s�R�Tl�P������"�Rm�=���mHJ<����&�p�헞{�����#)��/F7?�C�s;������/�t��O���;�ٔ����-ϻ
�e�u�$�ۅ0	+\d�z�l�����S�6Ϳ���l��|��Uu�_]��6'$����W��=��`��v������g�
�����z�zX�������{ˎ+��6%\ܦN9�zm�`��[�>�v���/��o?x|r2)�%7�\�

�����L.��}����橻`3�q��;�<}g�����I�d4��Р�$���dP7+�
c�=�B���Y���K��%�;�{�b�a���nܚ��
+��� %�}�7�r���0
薼���k_�(Q$�~�
8��Y�.Wy���;�̪o����CyYHq�_�V�XR�Ǻ��N�pϟ�r&�r��('���:�

�
d2�A
�ok�P�n���Pj�,
7�F����/v��_
t]kl��گF��5lqN��

Q�9Qe��
t��ub]$ۏ�{
PO�����죄o�Ab颍W_�#<ֈ�8c|QBJ,��L6T+��:D�]U�ϘD�eFX%J�ay��dI��H$/��2t�2��)H��=���*�J��\�
L�����Ęi��
ϖ�X�)/F�1U�h�5_P���[nn�'��2S���#� [�P�H��(�
+�Zl��>1�o�b�ܯV�&-pAL����s���'G2�!:@���Iœ�%'��Iŋ&/�X�DB���%2�Q�8�$/F�U�?ݗ�|�߈z��_���8j��d�	�%���H(^"Q�)�$�%"��E��ȩF�y�W�/W�����;w��1p�����O?���/����O;wn�v��-[�?p��1�X�zV����O%v���9���������q�$Vn���zY%ɮ��g�Ř�ik�ľ��ϼ{�IH�{ѣ�,�,������O8���us��M
^��l:���<������
���g>C��o��V�_[�[����+^���7.M���ܭ3﨓P��>˶��:gR�E�.ߪE�8�eD���y���mJ��
�,��u��k�jUd���Z��q�	�|q���{����s
^��+����k�����V�{[�P�B%��S21���z$��f� ��O&,}��9�-��j5���:�}���  :Q	�oz���Ο������o��Ǿ��Ճg~���>����;�&��e�
Qs김�p��7mM���$n���HF��{�z�p"k�:m�
�:���5�L^�F�5��Ns���]2bO�Sk�?=�a�>b0
�8��a2
����+ t x}�]�>GD9�n��4"����Jn�afqk�u�Z
�j����F�;n)���	
̳m�V�N��n�����ie5+�d�)��FhѨ��
΀�$ǁ��oZdQ��Zf
�9���}�
j[)u
��!����1�l��(ԧ��D'@���~�ȧ��M�L���}��I�֎6m��S����޽b�F��i����D��� ��h�ӆ-�H�!]2��|d�.2�ʧ�fU^^t��f̱pTF��\zvò�>��FKr.jzژՓP�b��t����f�R�ŏ��
1JM
+���Y�����[�P�Ȫ\�t�ޏ

X��._�J.R+�B���&R5#R��]D����\����k���D6g)PȔ!\9bJ�*\���[�Tb��I�J*Y"�T1�����Jb-Ak��9l_���c�UR�JB����KK,Q��l"�x���"��6a�e�n"?���>z���!,�����v���]�����o�~��g��۵�؟���z<tY_&��U�˨���m�W|��ך#��
x��}�V���x�
���Ҋ����Q�E�W0���1�ZBv�F��3�{�uK׋�W�&�=��Â�k~���^o�GA��U�wo^��k��1a���%Թ�˹	]{��#.O�?������<����yӽ)�bG���g�d�y���7���s��>1a��/�K�K�y�^���
+u.�<a��n����W��n��6Pb���ʨ����_����6�M���
���qw�yv�>m�v�m��ُ\5����o�
}�����޺���
?����������I<�{=�$��uۧO9b�Z�N"7DQ������Q�w�~*��;��Ukfl\	��c�%��Ѧ�|��
µ���5��?
lB<�T>
<��C1�݅
8xPV,�;1]Ms��#de��i)$� ߝe	�/y�&�T�(�j�l@�u��q:u��b���
+d
2_~L
cU-�x`�I
+<���\� �~"����0���K�������q��ur�K�A�~��� P�&b��th�ǁ��ɤ����kԗE
��/v�{����8w��v��
�
�F�n:��)$|�Z@�Z^�X����j�����n�(1�l�Y�#vHcc�W�)����`�k˕Y�1�!&���Ƭv�
�ǎ�1�>�x
�ʐd^Ǫ#..�!֝.y�ԅT$O
*�
�R���L�BE�
%f/Z,�H��I.RAn˞ۨ��׈��X+ɵr�6U.�k�6��k�bb�uQ	� ��œ����X��E(�\��E՚\g�iz
�gȵb��HեU���$$�(]�p�R�K��H�R�˖�Z�t�¥��Z�lb�2(�TF���zU�?z�I+�i�#�=�ʔJ��P�l��2BZ��e�ʔ.�eK��B���r�J�@��K�iW�l�F���,Q�$z4a�x�����w��]�D�b%J+^�h���E��ve7z��N�8����4u��s�ј��7��%q����
+��kt��ǂ�E#E�R�yr׷ߌ�hY]ƕ ����a	�
itv��g��44#��o��q�2����������x��}J��Z��}�JȎԽqN�E�����*d|�N���_�ݴ%s�X�LbF���딮%u�m��Z��m>x
n�mR>L��/��.
�]�.6�1- #�v�
	L_z at NvP��V��n�󛶜�b��vm�s*Y�
�z�IO��ͨ�
z��$Ӑ���gѤ
�������3�����'���Ye�!�˺p��'^��)��E��~}�3)�&��])�Ư��BN�W\��Ͳ�
+BiV�[��(���ޤ��	��xC��m�S���C6u�&�
;�ʫ=���N�z`X'�M%Zw�=1�q\������rMֶd"B���P�
k^�%I�t�C{�{s?�mO���IX�Q
+�26T
�|٘��ā������|����M���G��]ys�NH9<��qa��&߿�j��(�B��&G'iN�l�vv�
]T1֐��7�����6^-�F�0��TP�
t�lR�d���xn��נZ���g�%J�Ȝ�tO��z�Z��&�q��L�D
�,�XY��j�-�8��aZ��>�I�n��1���)O��P�Ϙш5Y�q2\2bS�d1͘��D*�� '
"�o$d-Q*�PF��%�+Z��X��?��X��������*kW��%h�03#���I��iI����,���OP��"E
'+Z�
���
+c-S6��`�b�\�"XA�˖)TN
M*W��²�cM��Z2UEd��+��^
A+D����ƕ婗�-k����~�!���
��כn������ٽ{Ϟ={��ݿ������ҠT,��2[޼�oi�m��錫j���8�������m7�ˍ�Fg�ۨ�x���W�:���v�(�_��!��e���׿v�=�WQ^
�o�
�����2P���qu��+��
�՛��]���K�'_�vo��QB���X�j�(툐�ԢhZm�W��/�l��%>��w����'v�]�����e�仔�D��+ �ʑ-��X��i'*�vE��5�b���2��悙���z�տ'���h�R�
+
+�파���',y`�VL���ӷ}�ZL��M��N�||��<5KpnDl;����-CQ�˲b�}�M�������۪�p���	�����v�R٨<)7����#G�Xz !�����}�룵�����-B~�Rw
"���D*�~�^D�k�$ʱ[�
{������q7$~l��t�?Ѳz
+�Ț^���l3o�v}��[�?���]��(�yg;��z:��#�u��
��������J���mi
T7c��<����R�2)ShyT�^̓�缝�H}��e�a�
�.�I�x
�fX�H���V�-�<�Q7֜
�
++�n��t'����J
To:
��z˱Μ�C��
4��,�k�1="!cic{�!r������ؕ�^�T0n"�^zi�{v���
�7�f�1v595P:)������.{i�RVX�NGT���;�2��ǜ"���2�*��
Ǟ;���G�z��<&Ԡ��u͘���I~��!mjnƬ��*Z����N̊S�
��Mf5��k/g�J�����#g�{������T�X�L����
>,ȭ�P��(�<��3q^����0%K�	l��*(�l�h�dX��ZXk��떔��\�L��e�K�*V�Tr���eJ-S:Y��
+�`�(P�t��0<���`
�Oa��
Q�l�R0T�2!�L�b�g�r�J�V������W�†Ơ3F;�"y�Ӎ&���sG?��
;~�A^�4KQ�k�0�r�/Xr߰7(�|�)�������X�^Zѭ�tBCL��{d
�o�Ҋ��8Ml����6�^��q�T�#�W�o<q-Vv������##˥������5��»�0����+���J$"6�]2F��1��c�
��bJ��O5}F��NH���D���i��Gz̻u�ӭ�?��[_
vEy�{�<r�G��2�嗵��,���/{_Z�?̬���	�y�c¿���mK�]�6�)�Ÿ�>h��K��<�v�Qϊ^,@�6��}#��������^�xU”��N�����/^P~��i���ϻ7J�ﳭR����%3~߈�k�ӨҁU��c�|Q���_{!����װ�c��27ѮÇ�����2�v���>w�WW/��%�����:&���e5�-}��M~���{6�p�V ���Y��{��G�u��س�y
����#�l��
 [...]
M�3l$�aR�? A�bї%IU�~�"�6�i��k�q�	ɩ��IJ����
]�@R���e�-�Yr��]��0��+Q
+�'�Al�83�05o�`��Q
�n/�_r���Q��W�
�GU�XM���A+�w�L�7�T`�<D���I��;����r��rg���›��	��g�����A��[Y��R
�O�3>�
xu�=mZˠ���$O�=���O��w����(�fH3{�
��O���@ܥ��/l��+�G�T�zd��y��
�cL��(�
+I�{<5v~�e�vQ1�cĒ#K
���b�r��H�B�T�~�z* n
D����j[%j�^���

tAݺ��Үt���-vC3�,�����#��3��&'Lxah��?��y.��CF�U�n���n�DaU��LZ]
+�l!j��>
�׆��X�ѝ�H(�x*>\��=�R���ç3&�y��
{O���%"����k��Hjn����o�ɖ���F�����;|Û��r�ƌx�����g�/����E�z�+K6-����b�#��
a���Uِ||��	��g ��jr_ʮ{�Qܺ�b#ߠt�M-zS=��:*6%b�O�"I��DWQF����E���R2v
��.T:��
0ݮ���:d1v�v͂���
�(N�ɥ������)H��Ope�"�8��L%�E"2bRrQW��vه�u
�"�E���u�
dW��\�9�:	�b���Ү�N��"A�3���^
t��,��P2F����*b~0�᧨Q����yd�!ͭ�+F���ם9�
7�~��x�!�����:s��
+���p>¼�

~~=
+WãD�J�i�nc�{�� �eꃾ�PE���_j`ƍ��e�/��du�<�
׏4�P7v������ǜ£u��w���Ѕ�d���y�eY;F:]t�����CR�]��P�T��w��R��~Y�	�,l�-��2vƬ��l�Θ%k�3�f*@�Z��-zM���W4:1�̊%ZԮ2y�
�m<���O���\�n�W���DټS$&�(�g�YBB� ��
@�Vk�X��
+jL=�3$_M��[tHˋ�Œ����Y
����՟�i+���Ū�,qn�z-���q��_�
��"D�>W6zKw��^z�7C&�2�
�
,&%�6�[���'�9�c,Y�e9C����� Ts��!f�?u���кo�:c&�pW�]���4h��ܩٞjERY�C�����z�SEK��W�l��T
X�<A
+T��mӾ���6♋
~�sU�x
'���A2��
n7P��J�yIJXS�>mW��}�@��}����Z�0�1l[�L
}��.J��~z���ogB��^
�&h�h��
+\��!]'��Վα�YKVI��Jc��	�^H�i�HuiX���i�n�����v=�+T_$�鲺n��J`G�����J��`Z�Q�7��A8AE��ųW���1X7 /���:'�r �
;�ُ�~��f_�~���cô����B
�.���
;
;W�6�ق]��aa�P�L�.밪h{��4�g�*�z���h�||X���2�d���RLN\�13�� YzF�vV
���܊�k6�U�1
%~�[�l��T*]L�kن�\mu�㖡o�g��
#5x�Ƭ*ޅ̽�},�F�9Z�
+
�Y����v�q��ٕ_�/��ĻMo=yG��2���-�2B�	�/�1"�a��4*�/*u����6��f�Z��,`Ut�&I���ж�)EdI�D�,J@	��
+��+C�%���?1˺�tL�A�5A

�<�8����e�����w}�p��ӄ�3�T%�OP�+���r�5���Y�^0`I�EFk��G�e�q�T at b���(���LFez{
Blwy���IQ�~Z�z�eCyu�"ۥ�n'���C�l���
}Ǵ��������{7�Vط���$���
7 [Q�U{P�S9�Sy��kM�]k�U�.�EHİ��#&S����A+A�l}����~F��4�4��xmp�s��	~f�Q-Õ��p�(ɷ&k��l�b���PXb�
+?�|�+|
Gc?����ꁥz����2/
|�n��*vY{��=�Hv�is5�
�m\
&���M-v+."q����`̊rZ%�{�U��'�nM�TE8e��VF<�t�Fb𺌴�JQ�YY at JP�
�!Dh�<FL�ԵJJc���*#��M� r!+�U�
<�
7����0UWR
RL4� _[�m'��hPx>+���%+`?
6��졁l�v���Z�k���\���J��z�I(���#�
�Ye���e�J��N�MB�L�����OX�
f��+	��DSZb�XB�;�&͒U�m���X�D��]ꪯqm�U�Kk˩C},�}��
�հ�QI'!�qr9`


�q�q
1�i�rj.
�2�����L�XPdŕŔGA�i�2*���1�aS��8�����d���f���C�
�W�P��j ���r0͠�Q�Rݪi�Yx\���y�ET@)_i:U �9V�V��/4q	�7��C���Y]�t}ʿ�Z5�/���}Ç�Q�
7�I`
��lL��K� x
+�f
4�%��h^�QR=�E$�Q�	�P�UD��ل�z��NG"��UQU�����hm������~����9���W�c,�۫�����N)t���bG�ve�L*F�� )���;����d�ʕY<t�Z�"���^���%�ɮY��4�蛆�59��x�QE�O�c%͋1۝�c�(��zN
+A&c�qn���A�k�>�E��t��J���t�ej�\�+��b2�(tY#lq9;��6��}�9�۞Ԝ:�P
?
\�[�0��t�v'��u^����+�
@2-˟*Q��U���ꇞ���e��RʭW�Q^��
���ԷT�m��i��D6fY4�n�2pD�M�mY�$I!dF%y2�K�(+�$H��{�vu�,Ƭ�_�C�:
$�M:b� ��X9�8?�/2-˨��
K� ��
Ӳ�F�
�@�(�_�
eyJ�WR��v#Q?��C���5]�ɴ_
+�X{6� �������̨��~Y�D��1K�^�^�4d;$Տ� ��7	
+�\�h�)7�|l?����?&����]c���a�he
_�l��|�4�nR�ݧ���&_��.D=i����t<���
+�m�

5��g��g�_�0,"A�BUe
�l�>ޭMx�[��a�
+��Na����G%��[�4�y�ܗ��V�l:���y��8����0oF��"�t���nU
����(�y��e� ��Y�+�Mtٺ��'��[���Z��櫴W\�0ICEU�#C��H0�S�]M1�:�x�)?_]X
��D[zΘ�e�7$+6l	�*c�>�r_J�����\�2����;ΨI��v�yk�=�
�
+
OdՆ��,E
�����c���?Ev:s�y��
3�ֻ�0�+r,Ζ|���C�K�eZ�ZW��&���k*�������7(i�L�/ ����G�+̟�;�_�c�apQ@#��*�F�}d#*ɒ3���S�Ǖ%eU�
`��!J�2j|�$hHbS�UW,��< F��
|���W���B�X���m"�2:���c��{�N��G�Ɲ-���Ȣ�����R���9�;n�������c��1D��0>����⟶
� qW	k$:�sʎ�f������M�е�X��o��Z�
,ե�/A)H3�9V��F��(6���
���
'y�;����45�
7�:�kf���O����$N����G�%�1c;
�UkA���[W�,��x�P%�3�SqC7���
{�:�3 dc�q��h|Q3��-�f��U�j��mW�#2��.�k���P
%f�Qd��2ٚ
���%L�DqhK��Zg�.%���h�e̦��~jB
�%bD��<���
��E���pɐ���~����B�,+@_V���db�M[�4c6�2�{�t#]�>
��G�>q�j�� �,ϋi&rLR$5���C��8��8�{�i��,@��t�����70��+e�9�&GU,�sQ
2�u`1G�Dȱ�KZtTR�Z4��Ƅ�i�1T�t'6l���tT
�
�ZU����JBL at JV�nA��GFL��È�b�B�bɱ`ĪQ�]2oR%֭�g��G�ch���[]t��
�
�49c at s
+�
ZL��)��>J��%ʖ��k����Џ�R_�7>l^!���
͸B܌�����
�0��4^7z;0Ϡusq�:u!j��(j�V�7
y���8w�k���N_�֝!6�-�,�ݤ��#��24��]	�3��tY���"U�0䒳�_p�`�
�AF�\rw�d�}�Qo�u��-��̶g�U�I�����`W�;b;��94�k�>X��Ω���Է��
"�$o�����8��2
C˸+ڞ����=&���f�S�,��٘X��ʰl��=Y�UW�����#�n~!�d]�.?f�1ӝW�Q����Lrɐ%L
,SaZl��� n�M�jâ�PT;i�&��t��^
�ˠ��!u����:E�g%E����W�e�p]v�a�����j��v�k�8Ujn����ĕ�b�
c�A���5*N�Ӌ����/6c	r�
,q�B�6b
�
Ed�sG�;e2
Y������c6H

�T163O�+r��֍����)���b�Ѹ}N���$�������▂
+��q*�n
+5�I�fu���;nz
:
<����t
I
7�`"fL'Cl���sϥ���9����g�:F���B��9��X�����s94��֍(�e����To;E���x����BʐNޅ���yּ~Ǯ���*`S�mP�)qnl�K���-E

��Ek�+�8b
�96^
������q��XY�'jQ��
�*�U��2)d\fa���� �cB�KُD��P�D��n5f͕�ҽoq�&j��֪U�v�p���G��
xJ\RB�3��w��n�[n��o���䰱�	r�*��o��a��M���Y����ʲ�w
+J��'i'�SK�qK�Ǚٺ.�$��#��6�TM�A���/?ۋEi��'���9Ə�C6
$�8����J%����<({d)@{4]&%�J�G��y'ѝr�MO����d<���I_O���I���e�&W^�8
w��dC4�Mv#[܏Z#@V�PT�{��6������Q� ���;N��k
"�L�-zkN��M%��z��d
`�*�<D�����g��N��)B�.��͊g���3Yg���ԗ�XH�X2� ��x?�.� u�
ꦱ���bEx,d]V����v
$�=�Y�Կư��B�u]�X��B��b��
�4�v@"Ȏ�����o��؇X��бD�=���3��G!X���J{�UwYK�� ��nv�S}I�m at _�$@]�֕aIS���T�qsPx
��`�
d-:�j�����*�[N
0Φ�����z�Uw[�b79Ͼ�Ɍ�s_��:l�q�e1h�A�?(��jH:
+��{x�e�#9�eߚcغ��]�qov��q<e���O��)�5���1e�KF�ƽW>����"UD{�C1jkX[��R�U�����g�}?���V��N=%UU�DY뢖
+i����B��U
&?X�?�K���R�A��3���t�
+k���3
̲��T�T}�z����QйP�v?�������\������]�ʭ.�V�h!u!�$Q�
���
�c#C�i��
+A�qغ�(̼�pҷ6C��sT_��U?��(��$�C)@�Q���M���y+6+`�U[�F/L퀄؀-����落�
Y�mg ���go�q�/�Y��΃���T�W���Ӎ���j(�nc��Wf��i��p���_暈[rx��z/���s��Ƣi�����
�A�ES&��9u-ys8Ջ�L�e�~ |E��qd3�ؚ�ˊ�Fi>	5w>����C+�Ү�qT+v<��
�捣���ު[�����X��@CM71�&O��+VH	�=�
����,+��{쨰Gz<�$I���0��1�4/�-b��3T�����K��QǮQDž{[g��9�}�[]����u'��U(|���
�co�����9�C�`��>vEݪ�����O�t�2���O3�̈́r
ⳳE5�
�eg
��w�,(�U5
ⲭK���W.r����N��
�ή��~%�of~�!ӏ�p�r~�-d�#>jf�<w3�[�\0
+��*�̬��֋�M�2Vsњ�V*��D�->}sPo(,V��+����C��3�c���2Q�:9���Ml`�k�_��V����Z]�Ƥ˾\���ϼ����f�3+C��2� #�0� #�0y��n�9s�??��{�0q�B�K����������U-����w��y�o�'#�0� #�0� #�^�6�C����_�~4�u������ʔ	;+Zq]F�`F�`F  ��/��2X2�\p�XF�`F�`�S����h1c���ՔFG��8u�[fF�`F�8�L�>���7l��hSژ��>�A���F�`F�`F�`!`��m�ʬ��
+
+���#��V��\�?�8�7"V̮b��
;	
+��&�
����
̴����	0Of[�P��0� #�0������V����6�ϴ+��r��U�+W9�\���
�)^���yηn�X�C�7i�.�۽�‹H���ǎ�o�(W���������h��*��LH�D���7�ts���Q��Y5������ B�W��It
�3��%3}2�;K����2�2�Vh߹ #�0� #�d;�	��hd��������`��^{�U�T	˻�y3��ֿ?�8 at P�"E�E�;:���'�
>|X�������Yw��1���Gjj�wu��_�X��>_���9�GL��B��Н'Nd�zpE=0���6J�Y����6]��|B5�� #�0� #���tٲ+;ݕ���߰,��V�X�J�ʴ���*����%e������6o~�g6hp�/�J9��[���
+�˓�}��u���3�_u�՛7o�vW�Z�5�������gaָ���͵E�&ϝ;W���������j6���}����5nBu�M���?_�9�����uv��k�FWf�ͻv�:xP�Z�j�}�]w�����B�1cF��W�sϫ��C
:xP�����V���������W^y�i�K�rƙ�.���g�+�		�f�+����Î
�FI=0ʗ+�SP�R%��᩵����sɒ%W_}
����v|���ի���
�5~���扦�_,^������_���(��sXΛ;�q�� }��M;~<��3q�pF�`F��e)v�
>�� �r���
�U��/����7�y��+W���ؙ�;��1�ܟ}$;���o���_>��'C��d�o�=;W��j�7_c����Eo���wf��ka�u��+U"<���c��M~���_~�
eRRV�/_>e�
+l��7��׫W/�2*V at s
.rW	@8)���!�W�Hy�mڴi�?iW�G�
��ȥK��P���#G�;��'��\��)o�uVu]�_
���>_T�P����������
4����_xaĈ�.,V�X��:��g�}��E������I�d�� d�;c>�kZ�W&L����Ӧ���'�
��+�Ё�0� #�0�@!@�-���N�}�r�
�� 3d���`mޢ��9�a�O
��?Ǐ�g��WT�zz˖-�1p��S�dʅ<��{��r����>�x�?֭[���ͺ�s��`�QF�ʕ�T��5ަ���q���?��5�駟v�x�%D4�NJ+�w�))�Q,eŊ�=�c���F�.)\�Pte�U����^���ip���?�����n0�
:�v�e-Q�Y�&O=�$��Z�'��k���5k`���
���ڵEɋ/nЩ�]���P��sj>��C˖}]a�ר�񐠵�9�x�K.ix�95
���u��

�~>��K�.5��=Om@�Twl����0B������c\Põ����)
r���bF�`F@���1ڲ
�_�
�XB�Gs�.��3��L��D澭[�����o�Q�\Zx�!|�?��O�q��-47p�S���?·��
/$ib�mX���ۜU��%�Ԩq�{�	s��+V��u׶QҤ��>6m�����������A��w�iִi�*=ٿ�W+R�>�xzz�=ݺ�
�bh��֮�㎻.�wQ�s�C��(�.�@۶u�ѣG[�U�
QB���k�~8���矩�ƫvt� �֊�R��ϧ�+�z���x(c�qOm@�L_���/���2�
%�����;�O�gF�̎gn�`F�`�0�1=�i�\�Y9�*'T?����q�g�i�R�~"]�����|�������/
.
�
rt[h�R�ʚ�#,����TY�C�3�{�
��"����@H�6k
++2�ʍ5*W���g��fݺ�+W�CNj ���3:w�<��W�

�ꄉ��q�H�;�:�3��9�?��y�%�s"]������)�

M0��̟���=k�����Ѻ�2�w!s
1�aժU#v-x�fB��0� #�0َ��*�~yŌS^:P}��ޣ6�=�fɒ%��5�2W��$>��nK�{�Y���������6X*����?���!�xv���m۶͛7��c�Ƨы�>��������6k��A���9�ȑ?�ؐi}d������T@�۶m=p�@���C͚g�ٳ�
D�áx��˖-��0O��)�֋(��!?�O�s��� D��ex���a`S�
�5j�HJ�Őɑ�F�`F ��f�v��(��)	��,���Frr�>}z�����{���;ڶ��Y�?
=zL<�c�v�����u׮�R�d�o�S�6n����ɓ

+�L�j�D�O���=�؛����y�K{�/�MÆ
��(}D��O?���CrF����Ë.��X��qi����<���˖�s��t���.k�211) at�H��_���;��W^����QϞ=�|j��yA8z{�t��1 B�C@��`ܜ�Q�Ni�#��\�A��k(<��Q���-N�?�9��7�%F�`F ��f�1
ɒ����-^�L���zp��'��y���\s�ĉ�-So 	�.m^��Ŵ^��2bij��~�u�_��Sz�zح@�ʕ�aȐ!�opA=84gƆױC��v�g���G�&���9sҮ�����U��еGz�nҴ���t�Y�����B
?�+T(?zԨwf����_{������!	�����s��a�]��ܹ�q}~ƅ����1�"�t9S�� D>#�c>Z�0����A��6m�Ŝ���ƅ6fF�`��!�ɖ�V��}��W���������/w��b�H?~��F .V�YӶ�M[��
Ǥ�*raF�`F�894��鯿<w���v�p��5k_�|��M�W���ĕS|�r������X-�϶��
jQ��6���O��F +�ӭsn�6���!�PWn��-̕C��� #�0��)B��ŕ�>�e'W&�lp�N���,#���\��-�mb�r~;��F�`���@��z�]�:�L\Y���D9���yzp-F�p!p��
�ig�%3�3ώ͌ #�0� #���I����dN��T�	#�0� #�0� #P@�T�aA�bƉ�06#��w�#w�`F�`F _"��2P�3��>�u6,�]�`F�`F� !�9�E���r������7��o�rƍ
���>ӆ!�+/� #�0� #�0�@�Gி�<�
3���gqe�,��?|>-���=dF�`F�ȧ��}�;v�^�j��ݞ],T�P��/ix�Yg�ݠ�}ĕ�99!�ƕ�Y�HpXp�̕���n1� #�0� #P0ذ�ŋ^uյg׬	Z���.�Xdd�
O�d�>t���ߗ˖^q�7�bre �3�` ƽdF�`F�((|����/jp^�څ��N�����㩩�ǎ
=z���#G��V�F�(��ɘ�G+-jn_b��������dF _#0eʔ�/���3���_���;ʝcF���ii�4i�s�G&�X���. at I?)V�8E�%��`��Î`
+(k֬���y�������'
�^�z]t�Eh��?��J�{��8p`���W�^�v��PQ��nhC\�`��� (rѢEC[,T��$���"Ոc�\Y����B�rF�`�1_~�%H�o����_?��'��eʔ���{���O?�t�ĉ�n���N�R�J���j7�!.�0���E ���;���>�HL��f�S{�uF�8�T�T	�q��������C����\s
���?����OϪ>x� n͚5[�l9a�m�c����a�>��z��
��n=��3Z�
+�۷�G�
�{�\0h� 4G����7ވ�s�9�l��j7T`F w" ����u�^�m��t��Ebd �c��;O2k�0'�bŊ�@
_74
N
��/��bΜ9p� �%]����׏?���_���VpȐ!˗/�6m�G}���߃�f��?��o���h����|8]���[�X�b���`d�b,�`�\� ��7_�ݷ���u�"���۷y�e�d���1
[ƾ\�EV�`��� ,Ǡ�M�4IJ���ݻ�^{�g֪U��\�lO
0` �͘K׳gO�V�S��.î��p�={v6����SO=U�v�F�=��C3g�$����+W�+W�v�lT�E1� #�;�f��C\um�sΫըIӃ���~�MU�,�
s[�ve��<�f��y�Y+F�894h� �ྈ.��/R��ׯ�ҥK����}��
�=��?`�N�:T̕6`HFX"��
,��?\&��D�{��?��
�N��A{�.�%0� #�/8�j��[_%��'%����U�rF�k�_�q!���ˊ+�$Č�`��/�w�`�C ^�}��ƍ?��ó�:
�a'�뮻�����k����G�w�� D(�������e���C#~|zpiF�`�lB����OĂ��\�h�T{�!M��H�Iʄ,x�d�`�lUΦ��bF �"P�zuPdD���oݺ�ab�]���ց�P�p���~�-�ܼy3m�L�"E��ߏ
� �}v
��i�&�
ړ]�Y#�0����[7l��*x2n㔑�8^@q�n3� #`C ��}'O��pl
.|�W�p�R�ڶm���O���[�a�h�%:u�bL��������sυb����w�v�?�m,~U�㯺�*�;G�q���r�-���
+Do7�MpEF�`���|V��+����DWXIF�`N"�˗饗�y�
�tC�	ĠЍ>���O��
y䑮]�b?�Z`bb�=��͛7��U����^K�50��X�������_���6m� FG�|�q���V�"#�0y��b�����o����^N컱A�N�=�c��y�?�3#�0�؏�-�o�9�:pӌ #�0���g�E�╏����ع+�U���#7]T��

�6+8�+�_�V�$#�0xY`
+�Ν;A�njs��78�Ì #��J6��s��ֹ��ZW�wޕ=k��Y�
՚w�z�=U��]�q׊����%-װ
J�1lLݎ�+S	&ʹ�\�R� #�{@$8�C�7��;�D��'�|2��ʚ1� #P�8t,��Ѵ�X�
?p���?R�
�^�����П1H0�O�*j�< ���#�f��w
�nj #PP��ː���c���/^�xAE���0�@
G@��) ��[$���}��8�LF��W����y�\��'����/'�Qn�`F�(� ֐]M��m�GSX9==��
KM��؁�J%��,_�޶���|��M����C�����gF�`F�(�H�lf���+g[���
0��`F�`F /#@�H�9|�$OQ���Y���i9�����n8����<��O�<P��
����Y��ԩӥK����7�{_x�u��=q�C�\p�={���_�z~��'�{�%KpilܴV�Z��`}L
�_��EU.�_��*� |��w�ׯ����F�lذ!>�?��Yԕ�>�b��bF�`�1��E���}�
s��_~��ڵk�Ν���
�J���[(�b�
+lG�
�g͚�I��~;f̄VA�*d�*V��W_}e�
��iӦ!�l�
=
r�-[֫W��c�bv�1���iҤIo����ᆱ���C8�r�������1����[B��{};w�С��,RET�X1����0� #��DkJe-�YcI�i~:Z��+G�ƨT�RF�w�yH~	�n @(Y�\9�\�2��@	�0Z��۷]�v/��rh��>��U�V�[�ƆY��_����>���_�z�g��݇
��W��C �H�{vӦMa/G�.-�O�OKɒ%C������$�c|[@vb����w�q��,��̟��#�0� #�g�0��6
�����
��ǎ
�3gli 
+�g�ȕW^���Z�?���2
+c�]�!|�<+��۶m�����u�]T
�
8P�^=��
O{vD}B��
8�-[vÆ
�/l�#H��U0��+j>�9w�`F��/������
X�ED��$+�\H��
�2��K��c!� ��v����vkd�ںu��_W�
;v��4-�g�ڵ���K~ �t��^͚5�{��ۇm�����]�>��hѢ�Á%�rʗ/
1�HOl�:�w3�� c����0� #�0�m[�S��1�PR��I`N�?��3�x0nܸS�a�]�����)SS����zΛ7����w��a�����ر�c�=v���(��d�b2������S�´�/�ƝbF�`�	*i_��++�dJ�'�hnիW�Q�F�-0�i��٨��Q�P�,b�2���}<�S1��`�$?�ez¨<hР�5k�
=Z+3`����ٳG�t�aT�v����϶�ו�s���;�K�������w��3g^q����4�<#�0� #�G :�$�&��Xٕ�3�ʖ�r��}�~o`p�� qX
ܱp��Y
�
M�4	�֗/_>q�D2�N�0�͇
2���R�  �z?�,

�8�%����� �M��n7T�,����Q��r��
���X�
�+��O?���y���6#�0� #���(��Ö�t�P:O�ܵk%�!j�g�a��1�i�&��ޙ(I~�0�b�1
+�UТ]�!��ͣF�����8+�/Fܺk��a��`

;
Uڶm[�B�3��z�͛7G�
���
�O�8���������@�������
4���{g8*��Ҹqc�Q1cRIx�cn(��0� #�0���
�,��\�U|e���
����P̋/�.��K���S�L�h߾=\F�
IbP��V�m��n�	�����vժU�r������D;{`vhw4
X�A_ at Vt��	r�y��*����(u��s�f�/?}Z�
��
>
�t|���ӧO7cR���L%��#�0� #���
���d=N,v��[7~=~�x~
G���/�����v,���{��3'3!�In��cF�`
+,���{�A�nk����������Xj����P*9%e����z��1sV��X���7]T��z*f��6��q�Q`�3� #�0� #�P�6
L}�a�r-O�p����SQ@�-w�`F�`F ����1ӱ�ۗ.Y�N�;�c���zX�,���F�`F�`�ҹB�X�r\c'T'R�eQD��sW�uc�F�Ғ�aF�`F�ț ŵ\���С/�QΝf�	9k�0� #�0� #�G�S��°�3N��aPƪ�2�H�XMF�`F�`F ��2���!���)ʅ{`�Y��hA�-�"�Y�HY�Ii�ty�нqT1+�B
w��eݺuQz��h�\s
�3����^B�1c� ��Y�Q��{�S�w�޵j�B���>�]���?�DQ��4���ׯ_�#�7l��l(�7��l�

�/#�0� #���^*�5�/����{-
+D���_�]�i�3�gϞ��GI$A�+V`;
+R�?k֬
 �
�X.\��~��{�e�^}�U��ݺuk��_~��*���o۷o��i�?�
�Hy=iҤ��~�̯��.���ˎ�.S��ׯr\#��b�Νͼ�mڴA֞���`F��K$&��d#����d9���qA3�R�R�*U� ��w"�o at E�,W�

+T�\�Q��|����,zH�
\��WF�=}�9�Q
6c{��K�.E��.���
#1��(
���_ͯ]�/-%K���.S�@�J�c|s@�>�"G������Y����2� #�0y��t+��TZ�+è�Crn_|˱c��̙[�B|5#��%8%%%��޽{7l؀�؎2ݪU+͕����_�
8P�^=*�
O�uh��{�
xO+[�,�"�u���=�w8aL,��� #�0�@
E at f���X��n���'��l���Zx2�
 ���޽;�nM^ժUs� �
�	ڏ
pel�۷��M��n��vu��E��\Yr
E�|���|����?6@��;$�_ZZ<��h�XmF�`F�   ]��/��*��Hr�WFT�
s����g̘��q���N����_�^�X`N&�����9P�5k�9!\� #0u�T��
2�wF�`F �# ���O��-Vq0�K��#I���kԨѢE
�g�={6�z�ad=�
���r��Z�*Z�s��s �1���|c�_�>M�r��`T.S��[��]�W�@A��\~�Y�����{��
4�W̜9/o��O���"#�0� #P� 7I��"����D��S�f1�/�ѯ'� � U)H
�e�,\�p�����ФI� !`����grÀ�2�bP���
c>"��_)���uC��b��z>C .@��X��
c�Sxe ��]wݕ�:��aF�`�r�
����<�&�a'�/��=ڳgϮ]�@4ǎ
�h�˞%�c۱cǦM��B{g�$�q�X�m�(
VA
�j���7oF [...]
+��W_}�xfl/�v���
:t(_�	�Dv"�����{�U��ָqc�W1cRK���av�ͲF�`F ��xq��r,o�r� �
��:|�>�| �Gǎ
a�%ep�)S���
�o�
�#G�$�Q��V�mG_n��&D��Egp�|ĩ]�j�\#�[p����z�jDVF-��5?|���ĉ���p��B��q�Fw�=���g��k��Kː!C�|:X@>D`������'O�>}���z�w3d*ɇ=�.1� #�0yiKY��ײ�Ob���n�����[�i_FU���c�&R���00RF���F�`F ����OB�A�nk����������Xj����P*9%e���fO��҇+v�p"IR��<��X

��
-`��0� #�0� #�<(u���
>��������r�%��ٽ�Ţ�I�1#�0� #�0�@�#�������s�h�_���ٯY�D
�ر���t�MsF�`F�`�|���q-b]ȉ|b����R"Ht��+��Ǝ�|ڸ�� #�0� #�09� ��"���'��&W�IJ(겶9�B� #�0� #�0� #�K!0�*2�W|eɤc12r�ڬ#� [...]
+��`F�����p���z�Y3%��
v��eA2��k�"�BrrrϞ=�AAId,C�+V`;
+��?k�,$A���7WY�p!r�!
	rY##�
!-2������/T���~۾};eMCrA����'M����o����ڥ��r���CHZZ�*U
+ ,X��S�N{���5.�_�ׯr\�	C�s��f>�6m� kO~�8��`F����p2ɵ���0K~L��"0億J�*U�R&UV�;�Tyn�P�\�r�_�relGA�a�F�jd�C���*�=�
�2����Ԁ�>�(��f
!`�TF�
+*\t�EP���a�Fa����j~�Ri)Y�$nٲ\|ذa�ɽ�:F��ɗ o%�1�9 u�	�;���qh�̗p�F�`������']-�Ō�� L.�Hǎ
�3gli 
+9�,�)))�a�ݰa�c;��DުU+͕����_�
8P�^=*�
O�uh��K�F�ŋ�P�Yl�B �ie˖�P$��Q�n]�|W�C}��`F�`r)�_�
u!��žL���r#��� ��“!�|�
���{�� �5yYT�V���.|'h?6����o�>�%;7m�:��;���E�-Z��g�qF�^����s�����Iy�{��4�˗�����^`�Y�Cb��i
�y���<#�0� #��P
�
���qM$Kd�2����ϟ1c
ƍ�;���+~��WxJ`�9��r��W�@i֬	�����{��q��A�+���d�i��?�:u*L���/�
F�`F �!���	we��2EV	�"X�	��իרQ�E���g��
O7��'ՃQ^�>
U�VE�z�y�`3�=�o,��ק�U���eʔq�w����
(w�[�u
�'N
:th�}g��9���Fe�A��+f����������#�0� #P @��
0e�ba��a��
D�B�8p�ԡ qX�
��p��Q����C�&M��cv
���e�
�A�W
+r����~��v�
m�Q�f͚G�
	��E(�znF .@��X��
c�6�2��Srs/X7F�`F�`# 
1��p����$��2!�gϞ]�v�h�
;�$`�E,,ǶcǎM�6�!A{g�$�q�X�m�9 at a�
+Z(T3�߼y3�!�h���
��h�-�WV�\I�iEW��E��U��
+��W_}�xfl/�v���
:tr���ki�p���(bq�l�2��8쁛z�פ��{�U��ָqc�W1cR0�O��<�%V�`F�(H�y}�
+
o
�
È����IH§�% ��~t��f]�= M�2e
+�.�@�����0r�HB%ᨀ
�jl;`G�5D��Egp�|ĩ]�j�\#�[������Y���4����ĉ���p��B��q�Fw�=���g��k��Kː!C 
+�0�?��Cp_�֭���\�.(��>
�o{���ӧO7cRi��!SIG���0� #��N(�5Qa햜X��y�6~�����en�wz��~��rg7X+F w"`&�̝�V� #�0�@�C >~��:h�mm�
8�z"=#==��
KM��؁�J%��,_��쩯�4g��I�5�w�z5ϿPڕi�����b�#�0� #�0� # ��e��DfŐ�C�d���@n](��{��EnU��bF�`F��+(��������(K
�O#�uJ�7vld=,]��+k�0� #�0� #p�@�8�nD�caM�a1��
����A
�ر�2bF�`F�`��.�c�T

�y�D��]1�
3� #�0� #�09���H����DZ�-/�(1�r@=�0� #�0� #��$��.�_�����b��Ϡ��V�5k� <-H���
�@��#������O��

���Y��K�.�֭
�S���Sb0#lsݺuyj`(�\ "HT9f�DP^�~��ްaC��?~<	���vQ&cF�`��� ��#���4��)���-�h�|uk׮Eڅ���={�FId,C�+V`;J�!֬YH �
{7n̴|?9�W�.R�H�bŐ
"�>\�E�_�~�q�
:H�ӹsg3d�6m��'T`F�`�S�@,W_,��l�_��9��i�J��T��nHȇ��f�<w=�,W�
�W�\�Q �|�����B�������g��j�
+��E.�#��� �ȝ��}x'D�t3�e�̟
&#�0� #��.T�
�
�R��WI��g9��رcs�́-
D!�j�E�씔�xjx�u�A�9e��Fօ�F �@e˖ݰaA�
x�hX�]E�^_�*#�0� #��L�=Y�%�q0��~2�\���d�ҥ�&M�P#�E`3޽{w��:�hS�Ν;�n�z��_v�e;v� k^�� P�|yT߿?	���~��/PZZ�[V�ຌ #�0� #p�/!��`��r�_4�� s����g̘Q�d�q�Ɲ���	�]��ʔ)Ss�Бl΢O�N�
+�2��0� #�0���Z��P:
+�,�_��/z���իרQ�E���4{�l��t��zR=���uS�.0��c�$?vYΝC6oi�o�>(L~�X�&v��A�{�̙3��⊈��y��-#�0� #�/PFc����ʂ�EYٔ#Z��D�B�8p�� qX�
=�Z�
�"v�-jҤI����m�/_>q�Dʕ=a��C:t(�M���� "��
�w�@�W�
漚��+��O?�뮻
+2J�wF�`F �" (r�1�O��#^�p�Ҳ,��F���ٳk�.L`;vlӦMa�=K.#F���M��B{g�$�q¸�mF(
VA�v
��͛7�5
+F�~8� �n9�/F��k���\�`�
;s�c��x]|��
�q�oiܸ1⎿���1��I�BoXGF�`F��!�!3�H:,6e:�
�V�F��7o~��w��Qc�_tyʔ) �`�۷�T��#G�(��r� �ƶ��n�	������vժU�r��!��+@�[<. at e�s6`��h���
>
�t|���ӧO�w
m �72�d�,�`F�`���pK���$K&��������7SR~H�
d�g\}~�;�{t��S��"K`
+fBʂ�k�)#�0� #pj���]M��m�GSO�g��g��c�iz;��B�䔔�|���c���'��(���N�����}�)��˧���:#�0� #�0� #p�Pɫa[6���MῬ��'Y�8��p���ĉqHᢌ #�0� #�0��2�<�A��񕥩�\3"N�; S�
+����t��3�$#�0� #�0�@�C�"�/�"�+Kz��"ŵ�Ȝ�4O8�gɅ��J� #�0� #�0y
ɃE�8�ape�(���$�2bYD�ܗ����2� #�0� #�0$��/���Aa0,�ein4Y��c
F�`F�`����E�տ1���k3���rP��5k� <-H���
�@��#+
ɦ���O��
����Y��ԩӥK�u�օ�%O�ZOO9�
���u��5��#����Q���K�.
m�
0$�3f
"(�_�^G
+oذ!�ٌ?���Od�d�F�`F w! W
I��Å��G*�(�.�gbߗ_~�v�Z�]@��={w%��
eV�X��(�@��Y�4hp��oܸ1����^��H�"ŊCz�����åJ�B�,XЩS��{�FQ��0�@�~���oY��{o�Ν;t蠑iӦ
��0P� #�0� #�k�i{D���H���jʟ�Z�փJ�*U�R&Xb��fڀz(Y�\9�\�2��� �0Z��۷]�vH�
\%@��
d�kժU�֭�A·l���a��.�u�q�
H(EU.���()	���_D�>����B�e˖�?1F�`F��uh�,�1Qb+�u�h���ȖE�cǎ͙3�4�
�02f���d]�Cbρ(c��n]�ti��x�⬷�
+ p*[��
��؀����U�P��U 1�.3� #�0��LY��i�,X2�����MGxGPZ8�N�4)Z�̔��x����v�(rM9;w�ܺu��_~�e��ر����8�^�z����aφ!0�X.��˗������Ol�:�wH�����bF�`�܊� ��e�����]Y�g��0'ϟ?ƌ%K�
7n\�*��
�.��Aeʔ)��V����˗��������W���==bMr?S�N�i9���2� #�0�_YyY�e����*�>KsT�r���kԨѢE
��ٳg
Y^nYO��2�����aʁ��B,��]��
X��=q�ġC��w��9�sI����M�/
����e~�9s�W\�_?�t��`F�`
+jb_�
���s�ȨLa2�T%Q�A�+ĉ' 9 at y
+���ѣ�U�p�(B�,Z��I�&Y��Z���l��eO�0�Ї
r4Q�f�#G�d��#뚳�<� "��
�w���W�
漚��+��O?E��<�
V�`F�(h��n�ˆ���G��e
�H
�{��ٵk&0�
;�iӦ��"v�#F�xӦMp`�ޙ(I~�0�b�=
+�U�B��X ��ͣF�����>[��r0{q�ZQƂ
pz����{��
��_~�e�ʕ�=�\˖-�n�.h����U����?�8*�7F��w�}ׁf�a:i���;�0� #��f��0
K��ز���rº,��E"ʨռy�/��cǎ�K�
+:e��]�����c��ȑ#	��c6����	��@Xi�
 qjW�Z�/�H�l�|�
x\��h�l�n
sժUa衇�5k֭[7ؕ�_97�\�����0�'O�<}��w�yǡ$�y#SI.ԜUbF�`�`፬��D$��_j�ܼ~��@	M�*׶�#�?y�!c���	)��⒌ #�0� #���W��i��ms�h����
�{,5MocvV(����|т9s��s��߄mYJ��E�3ϭg�"��$:KIV�溌 #�0� #�0�@
B����'gd�Z�b���?��
�d���9��'N�lU�=F�`F�`�|��
+�A�:ǵ��I"�2��>�F�La+�K�����
bF�`F��0d���II�[A�]Y�!�s#O]=�g�.�0� #�0� #��H��$e��WFI3N��&��J���2� #�0� #�09� q`6lٌ�,�3�\�
%9�KeF�`F�`r%�����D8'+�
aP&U�9�L����Y��hA��\�"�Y�H&��4~�<mh|
Ů(V�N�.]��[�.O��O>�F�,Y��.����z�#��郐���K�.�2�A�4%�j�B���>X�\y�Y��� �ڌ3�ׯ_�#�7l��lƏO�Od�<
+q� #�0� #2%������1�k�<%}0��n�ڵH��
x={�
V%��
eV�X��(:C��Y�4hp��oܸ1J�Y�lY�^��J�R��lÿ���)6--
��K�*�N-X��S�N{��HF���~��I��~�mw>���q���@�~���oY��{o�Ν;t��ۦMd������1� #�0y+i�

�ز��'���V���*U�R�
+L�0ĂG"�o@%�,W�

+T�\��'@>��}��m׮]��yHRݽ{�aÆ�p�
�D@�-Z�p�U۲e
�ʨ�v����;�@BAA�@���vn�
�
ݝ�-J��L�F y+A�_|�E���;�o��!����8�g���{�0� #��A;F�
8`
+��eW����˱c��̙[�B�Zq�D�씔��*۶m��F�>}`-���S�N�0�M�.]�/^쨎/�
�W�
��Ft;wM�L�@ �=e˖ݰauu���]�w�������
��`F��#P���B�,�]
��]�����N��L�9`޽{w���w��u���͚5��I���
.Lnʹ�q��� ۾���aφ!���۷�.N�Ρ�DT���ʗ/��`R����!�S'r
�`F�`r!j��.D���}+N%)��<����ϟ1cFɒ%Ǎ�NN���:v���c�
?~<b;����l������{��q��A�+G����
+�`�a�p��� #�0�@�E at F���_���W��`D�D���kԨ�_��ٳg
��冑��z0*��9��c��ܳg��ѣ#�/��[��b׮]fyX��1q�ġC��;��^�r�2eB����78�?���7.���̙3��⊈����#�0� #�W�/����1�Tt
3FFĎ!��ā�
�
+�Â8k�?��r��-Z��I�&Q��;b��� ���Q
�	�O��)�f͚G�
A��
+r���T
~��ώ��)P��
�X�
���1C8�+�W"��(踳� #�0�@n@����J*����y�W��#�

.,� �І���"v�W۱cǦM�����3Q��8a$v�q���*h�P�X ��ͣF��������(r뭷���G�o(~��0!/\���#��(ï�_~Y�r�s�=ײeK�

��!���ꫯ����D��X�A �U��
� �J�ƍ/�
[3�0W5�t�;�0� #��'�_�Vc"��_YY���� %����ƀ��� N9e��]������ua�ȑ� J��b��X��Zk�
 qjW�Z�/�� �L��oݺ�R?���4�0B«V�
+��C=�	�ݺu�]Y�+������{�]���S��
+s�|�����0�'O����؂x�B��|�_�#�0� #�� �d岬Llj�Ϩ�ۖ���A�zKbB�J%����֏'��sg�
F�LH��M�xF�`F�P�������ֶ́��'�3��3���4��
�Y�TrJ��E
�.���Ty�`E��j�רk�"��)�5/� #�0� #�0�@AB $��o�b���9�c�F���sv/'N��]��6� #�0� #�0y
����>�e�+�upeb9W����d=,]^;��/#�0� #�0�@6#`ČS�Ѐ��G��20.�u
w��r2u�F�`F�`�+nJ�|0��ʺ,7�+�/F�`F�`F�
+
G�0���,����
#�0� #�0� #P�0r�HJlreaQ�솱f��Ǣi�s���~��#������qwT1+�Bw��eݺu��	
+ ~3���{ʼt��`}p�#��nݺzj���\#�ZϞ=��D�1���$���zz��?�Q޳��(q��F �*nj���ׯב�6l�p6�
�D�˜V��3� #�0�@\���-
a_�H�JG���֮]��
��ɠ����$2��̊+�
Eoȟ5kV�
�3/8g5R�!?H�R��̂
:u�w������ի�)R�X1��0��]��iӦ!�`�
=�!�/-����?������9s���9��"����[�����Ν;��
�M
Y{�(��3� #�0�@�!�c]Pf�>�P��#�W�T�R�*U`ʅA��a�
P
%˕+��+W�v�NB>��}��E�<�?ϳ�-[`g
6l�#�6��!�^h�}�Y�V�Z�n�
�0��~��H���׺_����%K�*���
>n�3��P@�@@(F�c|s@�>�"���qٲe�t�Yl��3� #�0�@6# S[땄[9�

C.j�ǎ
�3gli 
+Q��Y�SRR*�.]G/^
�`�Q�pl�+“�>��F�~���z��&Ι�oVZ�Q��Nٲe7l�@��]�U�Pę~� �eF�`�S���A��!6n�A��
AiA�
<iҤ��츻w��[ý�W�^}�����a���TF�i~߹s�֭[Q���.۱c�[�B�k׮
G�1�S�-Z��o����ȍsp3�
+��:�˗���(l�:�w-���y�-�
�F�`F��~,K�c
+�ŕ��>#d\��aN�?��3�0nܸ5r��D�/_���_��ـ���d�رZ�]���ʔ)Ss��}��͛�%K�
>|�ܯs�4k�,;c�s@O�b�P�L�:��xkqyF�`F�89H2���>Ѭ�E"r^k�h�T�^�F�-Z� o�={���冑��z0*��9��VxNO�8q�С&w���äjժ�g`��N��`��鲌�0*4�f͚�G��U�
�B�7H���n��g:���x�s��B`߾}E~�X�&�77�{�̙3��⊈��٥�aF�`���

N���:ǵ����}�~�^p��� qX�
=
+NY�p������C�&M�
�=r�H��������&L�?�C��&��]|��{���t�zF��i�
C�oC\>s 
�1|��z�z�0����O?�1[2'�k1� #�0�@�" �0�����}�#2k�ܵk&0���iӦ��"�#F�xӦMp��ޙ(I~�0�b��O��E�C��͛G����?
 
�U�������r���{�e˖vh�D��k�����`��=5�m۶*T@�8j��K�I��멻��o >n���o��*����{����#
K�ƍw��w�u�x�e�F�`F w" ��.
����
)
+F���/���
;"j,�<��N�2dl�}����4r�H%� �
�jl;�A�7VZt�G��U�V��5�Q 
+�
+�z�!�w��
v��s� ���!؀��

q�
�JVB��eȐ!Z��z�*�����9���α�/�>|8�!���ɓ�O���;�8��`��T�/�ΝbF�`�<d;�;\$�8������n�J��NV+S���l��F��0w�8��	)Ob��#�0� #P���_���v[�6���H�HOϠ��R��6v`g�R�))�-��b��v��U�b��FFF�^2DL��:w�`F�`F��!�� ,�XT�W�l�� �d9.�ؽ��D�Y򊞹1ք`F�`�S�@FzFZZ�XO�O;At9�ę�۲a�O4>�R�+��𖹯�r�

+`ʠ�J▫T�+z�*��2샑N"w�`F �!��>��|�۟�K�2�K��j��]Gؕ
K���ݟ~����~������&
+��^r��yE�܆��0� #�0��)D`�o�_������O�������8Ȃ+�q���������P�)Ԓ�fF�`F�`N>���c��_i]���
�
���'��3�2�*��-g擯#��0� #�0� #��
+҉c��2dH�e#��|k֬�k&-H�� Ĕ@��#+
��~R?]�6t�
Ů(V�N�.]��[�..(��͘T��"�ʼt�R��h�l
�#��nݺ��@��~��	db��k�w��/��R�������g���o(P\ G@R�1c� �����u��
•j����4�D�
Մ�3� #�0�@� `q���!O�ڵk�v9�z��, %��eV�X��(�A��Y�4hp��oܸ1�JZZ��*U
+�,X��S�N{���h�Ѵn}���E�)V��Ch�~���_�p!r
+�{�˖-{��Wc�E���(������,�f���
�x[Ð�ܹs�
tmڴA֞ln��1� #�0�@N ��$�$j��nF
�1�R�JU�T�)]䦆�6 at U�,W�

+T�\�Q:�0Z��۷]�v�y��l�;�a�P
I���$ƣ&Ж�i�:���jժu��������������"
�HI�裏F隻L >n����ֹV� ��� �/��"R����7���В�6e�̖Y#�0� #�d7NlؕeF�x��
;vlΜ9���(d��J
2f���/]�4�.^�8.��D��٭#ʁ�zÆ
��
�|V��8g��Yi��FA �Ke˖Ő��؀�����*p(B��(��
#�0� #��b�#[<�%�U۔;��J���I�&E�9�\w��
`�>�3z��էO��/�
vh�Bٹs�֭[Q���.C8d�w��_P�Z�j�V����L�7��p�(_�<*�߿��c�Y�C—�3o�εF�`F ��4�Ņ�1�a�
+'�0'ϟ?ƌ%K�
7n\k"
~�˗/�ѣ����
�Y� �)S�
�Z�#�V���=q�����wJ��S�´\��̝eF�`� 6��rl_8IV]�^�z�5Z�h�6{�l��t�(T�P1�Q^Ρ>
���sz�ĉC�
����t:���L����V�Z�ɺ�s�gj+���z,Y#�o�>l�_>������
2s��+��"��>�0� #�0�;6b�)O
�Udƌ��~�8q� �IA�
=z!�
+.��~.Z��I�&хԬY�ȑ#>�Fh�j0f,&L�?�C��7A%� �	3��
osgG�������
�r
�}�^�^=�y5E�+�%s�#�0� #��$

DŽ<�s9�"{��ٵk&0�
;! `�E

+,#F���M����3Q��8a$ƶC<
+�UТ]�!��ͣF����&4���{��
P�xW�\��-[�
�Cc ��aN
�1c�8}��@?��
�n����Ih:4�2���� |�8���'��dx={��
�q�A5n�q�10
r1��I��1�0� #�0'����2&���@
�7o��
;v�y�|
@O�L��
6о}{Lu9r$�@I8H`�����J��� ��S�j�*|�FҐ ]�
c�C=ԬY�nݺ���
�
P�
�
ح���~�_��`�
mR78p����q���'e q#��Ç#`
�|O�<y������F��`F�`r;�i9�ę�]����"�y^<����O�nN�����~�@��	)��5F�`F 3�۾_�����ֶ́���W���A����m���
+��SR�/Z4o��
��ZK�����7����E93=�:� #�0� #�0�@�B��l^΅ݠp���ĉ�Jۼ�g���aF�`F "`�+��Hr����V��������W���^�4F�`F�`�ĕm	�r%OZ��䶳�W��m��>� #�0� #��6��Pʑc`�^�>� #�0� #�0�@� c�#�5��ܾ�c�5F�`F�`�N
�ܾ8:�
d�\s
�
�rp�Y�a�r�� �1�2`e�C�a�I�[����G�E����'�
�d��o./��b�ffy��
���!�~�2�Z��
+����ԩӥK�u�օ��O?�p�V�Z~�����)����T i�Q�>}
8`�����`F�`F�A�����I.�ܕ.\�\zȾ�l�2d����Э����۷o�O��(S��޿z��"E�+V
��*BN�^��P��C
���r�����W*�4��׳g���(�
j(�b�
+l�
+Gȟ5kV�
n����E8ꀅ7���*U� a���?�����H�7iҤ�Ba�R��o -�O<��NjC��pF�`F�`Ol���FD��%� 
+�|�
w��T|�>��>�d{�J��`����A�[�jպukl84;�޽��a�n��}�R�J ���,Y2�tRy�kC�@��N����ʕ��ʕ+c;T8
+@>��Hjݮ]�ༀ(Lj�MP+��w_jj*2�a{̘1����fx�	���g&��(}�2� #�0� #�0�n��C��-�r�my�޽6l@>j���\�����#ٵ.���=�l�۶m�c
�뮬��cǎ͙3�
.@��K�.�k"s�aV�߿��ѣ�����
<x�[��M%b��̩��F�`F�`�0��E(2�nu,�,���/(Y�Z5���\�t�#F�S-Z���ܹs�֭�_~9\,v��A�Ĵt��u���͚5sH���N�hѢ�ө�/]��
��3] ��ݻwg���r�-U�V�С^*�ի�P�a�nҤ������~qEF�`F�`��eZ�_��8�ײ�`�S�L�_] ~�|e˖�sÆ
�ϟ�]w�u
;v|�ǎ?n
+�yX'�p3iw�(�3f̀�Ƹq�r�NLLDgᬌ���ĉ1Q8�s���!�v�cF�`F � ����b�Y$:�
0��Y�=�[o�uȐ!-[��G�z1���\0��tY
0` 淁;�3��V�zu�ԣx��j�<��h����0�醑�$0���9+>
�˗�z�W/�Ā�(㬳�����!(.�0� #�0� #�����p��9��Š+b�����,���Y)��-_�|�ĉd'�0a�}
:��`
<wa
�/���-�Gfl�� qX�
=
+�]�p�(B��!>Y�N
�lF��&X #�0� #�0�@\H�
�5f
�A����w����W�\I���ŋ#,�"|2l��b�Y
�hDF<
����f$��$�~�PyL:D�9����
<��!�i�&(�ҡ$��!
+Fbl;d�0"iТ]�!��ͣF���1@�B9+���!+mq]F�`F�`mWV,9��2"��5"�2.L����Z�Ph�̌
�e�fi�Z��?~<��pޥ

������Vm�W]��4�.f�y>#G�$9(��r� �ƶC�M7�BO����7�B�Z�j�̙��Ov���j��0� #�0� #�$��~��5���IG�x��_�?9`���
F��� b�G/�%F�`F [���������ֶ́��'�3��3���4��
�Y�TrJ����2x��wWkis�_רqaW���#Z���g,�`F�`F��-v��X|�ܢ��
:ܲc�;N��M�S7�0� #�0�@�B�F�=���R�����z�̝�ܦO�z��F�`F�`,��e'WNL0`�2�t�e�ƩR3��s�p�vF�`F��G�{��
�y�����0� #�0� #�0;WV,9F��2�����; i<� #����T 9z�N�XSF�`F � ��
�n
�*���\s
���r��Y�a�z�:��yH�=�91���nݺz*
�G�=*��'� Sɒ%Kh����⋡���	��Y
��z��]�V-����ϓ�~!!)y�g�|�>}
8 at U
�kM
]6���q��
.��gϞy�C��'�
=z|��G9�ht��|�
.R��2�J��G��F�`�\���U>��
.D�:d!Y�l2�������o߾
?����ؼz��"E�+V쫯�r�9�z�B�=�Z��/�\k-���b�xV�+�|(����N�4���Fb��~AO��7�x�믿~�'�<뭷��b�
+lGAկ�$ڴiH4�E�9�`�)���^˩ �q�G.Lwr�`����fF�`��C�3F���s�=�|�
w���w�M�UDr;d���Y�fa[�unժU�֭���Xf��݇
v�
7�C�*U�b-ߗ�|�>��y��������S�:u��w���;��"=���_�~:!��+Wu+W���(�ϯ���~�� @�H���9	`$#m�y�Ж�#�v��СCJJʏ?��\�]�vպQ�K/�@�{ow�ڦ|��m��
i؟y�

�N$��Z�I���;Q
&g\�n@
��;p�@�G�����z��T�o�I@��`F�`�1w�/��l-Q,���ݻwÆ
���Y٤��
<�1�K�2�x*c�#���mۺt����+�m����k����E�z��
+66nܨ���K��
�%9�e�����
,s(q��� 
f���F��"����z�}��9�#�:�!��
:�Cn���z+��Ν;�i�����x����
��v�W�/��⩧�r+鐏$�𭂆-[�W֯~�O&��#�0� #��(�%i��Ɇ3�o��5[�Z5��`.]�4�@��)k�Ν[�n�����b��d�.li�.h֬�CZ�
t��E������_yb*d�
Pg�}=����޽��_nҤI���_i�ڵA�ɯ��\�@�F�p����g�
+��/-xOû�9s
U^y啥K��(�p�!O���6mڴjժq��u�ؑ
+;v
���ܚ�u
+�l|9�w���!�D��:u��?�w��~�	�����k.�0� #��b<���	����`�L���Z� 8_ٲe���O����ׇ���:<�{��Ǐ���7�dn&��2]��/�".
�
�2ѯu��b?>����
>�i��IC FYpP|Z	mq˖-��;w�1cp$'';��[��|e*�
�ׅ�����(�� �p�0[qȇ4�ӼC������ #�0�@�F <o_��U�VE���
�
����\����ٱ�\��7]�
 W�={��
=�l>�:�G���t
+��Qׯ|���QR�`T�79��_(.���[3�:�L�{��b?���
�Y���L��s�/xA�.��W�N;��r
\&p5�B�0a�C1�
{���}����}��*���C�%3� #�0���Dz-
�
A��ίѲ�U�X��
n�f�P vP�z�+�W�8q"ىA0��СC�
+�

�oǦpt�B�q��+�y� Lj�A�ᓍHm��C���fď�G/	��` ��x��^�K�|0K���2"�K6c��t��
/
L6ŧ����*�
�OqI�ެ��ʕ��qˇ4|3��K
U���|̹EF�`F ; �l-W��9z*��}��=3��I���_�oY�x1��"|2l�N��fy�l1�	�
�t(�B�Z�bk�V��<˃��~����Wl8���曈Q�9赓(���� ��M�B�۶m[���~��Ӎk�
��G|	G�8pJ�6F�=:F�< v�O(���`��)���0,�'X�u�
+$=$���#G�`�

:W(�'q����?��eɌ #�0���C�����>��:<^�P��G���Ax|„
����&�k3360�m���$��?~<� �p�

��ĥO�����G��v���s�=�*��x�;%:� b�a�!䦛n�
-t���0v�ާ��dN7��s 
�0�j�M �
�ax�M1��C��	��\����Eh
qO�$!A��O��V0#�vR��衾�����pmbz�����!�:��۟s�dF�`F�$#�X�:kV�z��ͲaaY��q��O
���ē�
+7��i�*���R|�l_𲔧�g; ,�`F� �q�á�i��ms�h����
�{,5MocvV(�������?2x����iis�~M�ƍ����_&O�A���0��
x;�W���Ē���&,�`F��^�
ؘ�gsY΍lY�[vl��$�[>{�fi
IJ��~h��LÒ��g��\�`F�8��Hr�9Y�[vlhOh��?����fF�`F��渖��^

nٱ�k��s��aF�`F�`N
�*��"Q��O�r�2#�0� #�0� #pJ���
�Unä�ݕO)l�8#�0� #�0�@~F�����+Gv����O����9 ~0�"Y�f
R �1���
H��=��O�`���
�֭���Qy�����L%K�,���� ��ƭO@w����U2%�����ۺuk�@�ri'�J�����B���oFb�P�� #�0� #�0�@n@�4-;�`D�o�
?�0��,[�
,�L��<۷o�
� 13?�^��H�"ŊCJ<w+�ӫW��c�^v�et�d)���

���l�k׮�}��
�D
y��4Ŕ���ǤT�Rs��]�`A�N����X.�0� #�0� #p��Y���?F���Rw�Bpe�����鐛Zw	fT�ŀDb���A���&Xl8����_w��}ذa7�p�>T�R%�Ћ�dɒ���P�li�������^�ݻ�-��
.���
=z@Ȗ-[`WFw`VG~
+��D}����� #�0� #�0�"`ؕ��2q�`weXI7l؀�̞��o�
\�����_y啺
"��(c�#���mۺt�ҧO�b�՞��9��Zn�aA���o�>R�ҥK���ŋ��i��0� #�0� #pJ0��I�
aVr"@�jժyj
�]��#F�D-Z���ܹs�֭�腋Ŏ
;`v�u�����f͚9�5h�@'Y�hQ :��T4�HMM
(������*U�V��!C����s�g�����۷/�3Nɩ�FF�`F�`�A������-#
��eaZ�2e
+���p` 1-[�,<�6l8�|}���ر�c�=v��qSܜ9st27�κ��`6_� ��'J�@�1��ȑ#�ݯ_��˗�%�u�+����٢0
aF�`F��)<�r���1ߋh-�%����˭��
+;k˖-�Q�^Lѫ!L�3]�
0p��={��
=ڔV�zu�L$ؙ8T?=�&���-���~��(��o��o�
+H
����P'N
:t�q�A˥F�`F�`r���R+�
�bŊ���p;6����SO#��`�d'�0aBJJʡC�t�r��

<�r�ƍ��&T�L�4��鏩��j�
+�K�Y�&��9�E5�:#�0� #�0�@N!�Àm\�rWe�	pÅ_������?�\���+�-`���ɘ
�`�X�;��b�ݼys��@�5�K3B��bk�V��'�M�6��Z�Z
���?>jԨ�>�8Peا��1��w��
0�'%y���j�F�`F�`N!����"1��>$
GDde\������hܸ�63c�I�&n�4�b�����IHF�Z���Q\��o � |r��m۶}�駟�yh��;� �
�
+���+=�ܬ�u��2�+�b�F�`F�ȅ$�:���ի{�{�PN���lX���Om|B.T�Ubr-���kuc�F�`��� ���u��i��ms�h����
�{,5MocvV(�������
<h��_'�8
X>��Ս7������p����4��`F�`F�`# g���$�W�bŕ3A��L�w����
'N��T%��'�?�
#�0� #�0�@nC@bI��ŕ]IHr�}Y�[vlhOh���mg��aF�`F�8�xnjˍL9!A�[vl�!o�S{&�uF�`F�`�\��6-îl��
��ȝ49W��J0� #�0� #�,̹}�+�
�yaF�`F�`G|�8�ʟ~��5�\?�?�\$k֬A�,�:&Xc������^xaݺu�T<*��xT��O>A��%K��~sy��CO�[��*�&+ZwA�dJp�OG?���֭[��/�
۴L���
ѣ�o��Ҕ�-Z�:u�t��eݺuT�s?���ќ[y*F����*`F�`F� "`����>3
F("
.|�ᇑ�dٲe`�V :T���߷oߎ
��(S���z��"E�+V쫯�rˇ�^�z�
;���.���{��Z���`��	�h6ѵk��&<�AG��G
y�#?R
BR�u�]�J��;w�
:u�w��PH�̬Y�4hp�����p��h�Oz��,�S�P�� #�0� #�0
pe�͊<��a�e�Bp�;��˦M�"7��f�ٳg�'���~P�V�Z��
�H
+ݽ{�aÆ�p�
�P�J��XKɒ%��S�>�&�v;�	O����o���p饗���B�l�C/���Yg���0t�A�G��v�ڙy��p��0]À�����=�
U�
dxi�4i�!����C��E�f�p��0� #�09��-FCVj�J�a���T�}����
����+��e�
D{
٭�m�ǃ>}����~�9��Zn�aA���o�>R�ҥK���ŋ3�4���D�{�ر9s�\p�II
!MH�����bYG �ۑ�
���x�#�ͱF�`F��.
��*�u��_~��U��Y
�� � �|�x�s�έ[�£.;v� �ZZ@
���߬Y3�4x#�d"�-
+P)X���f���%=����_Q
�
B�B�g�J����N
�����Żw��vb?
�~�*a�
h�Oϸ��™F �87�x��O?�i�&��L�81Ӣ�"#�0� #��$
vc�_�Js

"��t�iyʔ)��
��ܮlٲ�ݰa�����C�]w]ǎ
{��Ǐ�a.��D�L:[`2��/u�� �)"�1&8
9r�\����|�r�d��eӧ"^��p�~�8c�
8��7.T������@���]~8�
�'ڳy��xeryF�`F�8U$	^�X�v9�-�%����˭��
+;k˖-�Q�^X�j���L��

8pϞ=�G�6�U�^]'	v&��OO�	��۳�����~:
+���o�[�BRC/�.ÓFġC�FᲺ"�ʕ+W�>~8`?�lѢx99�{�a �a���j���v
����A�#�0� #��p&�Vve�BcG¬�+V�,4�۱�
+ D�N=�l0��5��x„	��=t萮R�\����P�����P}���,�?f�ժU+�/�f͚�7Ͻ3ۅ�I�&M��
Gh�0ۣ�w��Q�c��Q��-r� �bD�.�#�FA@@�S�vm�`F�`r71^lƌ�|9�,'$�
~��.f�\���+�-`��k���6��p�	St���O����Ҍl���ڳ���	=7�+Ed	Z at t����G���G
+�
�4�z 8b���p�&���w���:i0#ƈV�ڏI���P$��o�X�)��.�� |�z�����Çϛ7�O�	O�nݺe�X�0� #�09���P�ly��7F��2���!�2.L��FSx\4n�X������,
����Ǐ'� YNh�GG0q�
++B���ӂ����m�s���yh��;� 4�
+���C=7k#ؕ��+CB�Z�j�̙Hڢ��Á���fu�� ]��8�=fU�Y�|��#G�$9�z����
�����W��?Ƌ
���<���aF�`�lE�
+�\�F�5�W=��=D:/'����l��J�����|� blG�!bb
>���.�R��0� #�0�@0���W��i��ms�h����
�{,5MocvV(�������
<x�뵴�O�nԸ�-f\Fb�XD$^F �@�|48��3A�៣s�g�|��0� #�09�����C�eI�������
o�,)�rn�'��\${�
K��ã
1�֭[���f�\��0� #�09�@"�`<������|o��s��[����<Q��|C�������4�}0
+,�_F�`F G8y>2e�r��-;6����|N�:����e�� #�0� #��u�C&#�
ny
n֟`F�`F �"�C�Y�c�_��:�Z�s/��#�0� #�0�@�C at pe/f
Ζ?��S$�_��R.�5k��e��	&�F��Lr�����u���S�<r�Q�O>��J�,YB����_
�ޭO@w����U2%�����iкuk�p����r�ט̇
! �)�[ps�@���>h�$���������q뇿ޏ��\pAϞ=)�y��r��Г�_
 �Θ1c������#bw�v�aÆp�����N�:�NH>����'�<�'Q�`>��C{����7�D���dɒfs�O?1쑁>�_|�����,�`F�8i$9Hq8G��-\��吅dٲe`�4g-������b� Rx�)SF�_�zu�"E�+��W_��9�z�B��jy��Z�����H�>�&�v�܄�� �>�<��G~>$҃�
�뮻J [...]
+AӨb�	h�O�FW_}5r�h�~�c?�i����ߣG���
/��뇷
PF\2�;w�СC���in���x���F��i��j����7s��
$-��]�v����W�?E�
\�-Z�����^�J�l�/
dF�`r�
���'[D9Y/W��;`�D�e��� K3~Κ5˴'�:�j�
+&Xl8����ݻw6l�
7ܠU�T	�XZ���� }p4���/qO����r�Q�b�wܲe
�����%$
=������ʕC�ʕ+;X2�b����޹s'��f~D?�i���q�q�t�Ƹ�W(�� �)�
���x�]CBw�RRR~��G�C}a
�9�a�E�F���S��[�ٜ��W�̩n~`��cxy�����O���; L�˗/����	�0� #��K�(��,�`D$˰�nذ��A��!�2����a?F�e}I�A��Ǒ�z۶m]�t�ӧl���>X���t�r��.؏�G�U�ti�]�xq\M���'>
��nZ�3�.�C�����Q�z��:�E}��p�	�L���bx�*[�,.�&6��o
��x�BR�}��e

+|cAru-�ח���8�+��Bx������
f�:u�@l���F�`�����I\9�2'[��@�2y�V�V�S{x�1$R;/�l�u�Vx���.�0�꺰��k��t�Cp���;���T�>�&�e9�������+�T�Za�%m!�0����}���a/�i��-�"��#�ܻu�̵��O���C�ٜ���v��xE!��x�W4�S���ˣ;��)l�:�;F�
+
+*�O����rΜ9Y�8���
+��a�3�
����(/�i�˭.���l��$z�AWǠA�HTrrrֻ�F�`��E@`[l8eW����5&�)S���� 8(<�1�h�����u�]ױc��
{����f��`ʥ�ͤ�)�	�R�
П,v ǘ�x��2��?����:��_~��(
+�q
�{!L�f�L�{��!��

<X�ؐ@?��޼y`K��֭����S^F�(��0���5�\Qe\�I

�(��
�Ƙ�K
�Ct-�ǧ�;��`�FF>^K�(`��F�`��� e!ʬ����l8*��,�݈���˭��
+;+�O�(�.f�Ր
ȁ�<`� 8 �r��Ѧ4���
��ġ���i6�,�����O���~�
a $5�+/�$0
j�С�ƍ�r�ݸ����M(�t���p��d,G[~�c?�ʰ֬Y�<e��W(�nM4uȳ��α�oP�À�0pv��
�&\&L�[��
+�ʻw�6}$fΜy�W�M�s���4���r��Q-
����{|$���{�a�GtE�Ձ�d`�`F������~ጯ�՗��2�1k��vl�`w��e�	C��`�d$!��
+�L]4vMʍ7f�P}2!Ӭ�?f�ժU+�/��� �Nݖ�P��8����=KFi�FG��ж
�j��$�����x����h�n¿���hO�z��𢡊�\bV%&����UW]�������&h������p�>A�N�������(�?G���
��v��O4��`F "��ͧ|0�[��4��O�7\|]}��w��`���~
�$>.�.�
c�
��	�*
pZ�Z�c��7��g+q��;� �����# �Q�>��#�@A�A"
�1�'
+c!�
��=�yj�1���R�Sy���$��v���<
�&�
+Т�ſm۶��#x\��r��>+��$�q�P�f�ƍ��n\8�G�y�`��'k1آ�Sy�77�ᆜ��2�,wLB�+o�3�٢��~}DHD4�	m���ʣ#pC���Mn��F�k��K�$�|v~�;� #�0���lqe���H8��� �0!?��q�����hҤ��,�o����S'�q^�Xf�
+ƥOh�5��O�|�駟F(Yh�r!��8c���N�Yw��
�݈��n��l���� �m�Ю�
���Q��&B���B�>T��2�
x���
+
>
!S�<y�d|����ɂR�|���pb	�#
�
�� �Q�F��A�GIL
�����Wތ��W)]��Ý�_�_W=&�"*"����&xe���h�K	�
�B�:��
�;���8��`F � �X�F�5�W=�`�v��~�iO��;��M'�#��I@��
��0� #�0'|��k��i��ms�h����
�{,5MocvV(����|��
<���*�+d�z�F�'i�d�4##l^���;��0� #�0� #��,�xp�_�:�{ٲ���  �o��>�M���/�gF�`F �#�X�f�5�V�]�]E�HL�^�����u���@ O�1��s��s�\�6}r��M>�`�3��eF��
d�Ɛ�O�r�`�^�}Y��

��A�[vl��o���vn�'����F�`F�����
�e�jK,��#���3� #�0� #��N�B,�r���f�e�F�`F�`F��!@6d�.#��Z`Tۑ-���t��+ at h^�E�f��l"�1ID�ad(�
l�'��"�rݺu�T<*��T��O>A��3�����gʭO@w����U2%����j��g����N�h@\dL�C�n��fJS�he���z��I��pp at G��q���S���z�
+r$�3f
"
#�1�k(xy=p��	D�n:(5l��ZX�Y4h at Bh�XN?�f/�<���S�
ڃ�2o��&b*��Hdc6���a�/Z�>�_|��3�/��0� #��
+����]Y�D��O��p���?�0��,[�
,�LʅT۷c�`Rx�)SFwr���E�)V��"�{9��5v���.����9Bs4�����*�O�A�A}��
�#?�C�A�.U�rO �G�N����z��
H*��!Q_�
=t��p�ͭ������\ ���ʈK�s��
:t 4pR(g

� ����F	�`��qݺu��7R-YБ;�-֯��S�^ i���ڵCV���"A.�-Z���G¿L��+2� #�0'i<NLT$Ynj���4�/��\�`�EJ9��� !@/��5k�iOunժL��p�ə�w�>lذn�A2s�jەX��k6�_�������
8\z��q�l�K!��:,p@	��BO3)S�~}�	@t*ĸp at +~����o��
,���
��F`��vY
	B۫V����_���ؕ/��dC�
P�I��ȑ#��N-oq�9S�_y3������c� S#xp�v$�

w ���/_��k�e�S\�`F�8�&c�!���Ɖ�aZ�����tÆ
���Y�}����
����+��e��D{
٭�m�֥K�>}����98��ɜLw-�������}�Z�K���ŋg�i��>� �*�\$���gE�L(P`��=�lٲ�dl�v_�	�/�\20�g(|c��Z
��d�4�	G����]/~�	Hk��ԩSb����0� #��"dl8k1|0
�
�A޴ժU�� <wA�F���w�ܹu�Vx���.�0��p~�ׁ�t�Cp���;�� V�>�&�e9����0�JժU�wȐ!�-����=��o߾0�E9ӤL�ڵA��ot��8��������L����q
r�>6@���Ѓ>�Kvex(�]'���
�g-�4��ڵ�-�Q
^
0
ӂ�[]^�oٲ%<I�+���A������w�%0� #�09��;��\9Cx(
�r,�r��r��0-O�2u8 �{�"��S��ϟ�]w�u
;v|�ǎ?nʜ3gL����t� e6� 3@�؁
c��#G�0�T|z�K�� @��� [...]
9z�hSZ���u�`g�P}��4�~�{���C�o������Ej�V[���,��C��7.�
C�a��Y��	Et
�	�����o��
, 4���ݷo�˕+G{�ƈ7(��p�����
'��DC}o��
�¨�{�n�Gb�̙W\q��;G��_~h9z����I�Ɉ^�=�0冮�:�
̼0� #�0y
e8�\��2$QVq����GĬ5�۱����P�B��(Y��H<a�ث
:���F

<�r�ƍ��1T�L�4����o�j�
+�K���9���l
�
A?{/YT[WşJƥgv���h�����m �0Ӟz������q�L8*�re�|�(8N�\���	�l��.|Rsm�'X>Jj?+�Ђ[��C��������
1� #�
�U�`�S�������

�3�W�[�&A����`�Uń)A�B�m2���ڳ���	��	����� ��vԨQ}�p� �@Q,
~�0�
�耉=�i�ڶm
+5��ў 

z����?Xϸ��� �k�a��
�q��p���@p-���y�0�b�?�䓈0��}xs�w	�2�苐���WތB�?i�� ���<�)\X�ƃ�?�ܐ�>D����x㍘�Hߗ�L.ȃ���0� #�;�%�#ӱ����ˈ�IU$
GD�U<�aB6���A���ѤI�Y�v1�I�N0�£#X���	�!�f҂�����>���%
m�y�
���[�1`{���ݺu��6����
+Q�@�@n(iK =I������zƅ(������2��&O�<}�t
 r��1��1c�_���+x�
�4Px7��F���O
r�l��N��f\mx�*��
�B�ʸ�11Q��o�j�WV*�{�V��A-D�C�๳��5WdF�`�
�l9Y$��y����z|�ђp�H��AՁ���
�b��ʱ@F �" j�U�5gF�`�(���y�A�nk����������Xj����P*9%e��/>:tسsb����nqI�F��>�A�ĒG�b�F�`F�`��! \,���l���+K�,�I����q�S.J-
nٱA�
+�%��Qt�J�ܦOV��uF�`F�ȧؘ0�`�|����n�G�j�<8�` ��)��"�����������4��Q��8��`F 7 ��>Æ
>w�����Ce#�_n�M
nٱ�h��s�ùM���/�gF�`F /" �0,Nl�"��twr�F^��ufF�`F��+	�3�y/[^˹�a9�`�z2'�3�<��hA��lo9��g��,�`F��Ft|e�"�=���n~_|1�"Y�f
\6��C�ad(�
l�'��"�Bݺu�T<*��rT��O>Av�3�����}v���$��4�2ȡ�Ԙl�o��fJ#��!�~�!���	����k����"�4 �ӧeD3�#�[Ϟ=)�x >�C�����e��EJE����8_��-��@�
=��&b�L��1*p
b<gBH�*9-?�\�`F�8��|��E"�`D��
~�ad!Y�lؘf�k��퐃eʔ�W�^]�H�bŊ!-���Aޯ�c�^v�et�̉�����!K�w�
2�a�,
N��=H��|��J�BndJ�ԩ�޽{� �:Dii��G�-��
���o �
r7蒴i������O�bq�cB�l�/7>xU�޽;�MP*dT#G&����% ����^{-��0���s׮]
9�VN��!�Y,#�0� #�4]N��hWD���������kӦM��Zk3-�x��Y�����:�jժu���p�v҆��7�p�>d��
�����ʕC�ʕ+c۔��h�&M/��®��`F�a�@<:��QZZ��Y9��"�!��I
	����d �S$�c
B:q�'>HD�{�n�t�H���r�������H_(6l��#h�hѢ�
:��������G/6�P�K/�/{�x;5Q5��]�|y�u��D�v$�DJH*��ց�
+�Y����ի�~(������c<L�0W�JF�`F� # z��ʊ;G��+�
������ۃ+<x��+��R��3D{
٭�m�֥K8
�֛'ߦ�N�jZ�K�.��/^
Ws~��%$Ja��a�s�
���| 
0�(B"��q
��aQ~��'��Q�V���X0 ��#��a�_:
N���H�(�4�x�C��I�&��"ʇ��O?��o
�_�ߒ�f�J�Ŗ-[�+�B|�?��_��Dzeˎ3�O4#�0� #P�p�#�KeY #8	y�V�V�;x0���1�X��v��	���p��)
v2]Oq|>n֬�CZ�
t�E�e�<�g��7h-n��� ;�>}����G�� �C��U Vޗ_~�I�&��k��+
+�Q���y(555X��n�
v����ĥ*�C�Q�F8_o��v(D*T�7>Y���w�9s�8����+p��Q8��C��bF�3�<�y��U�V�7�
lJ�(�������駟 GI�믿k�v�����㛌��
#�0� #P��?�t�k��/��r0b0-O�2u1�8X����������C�]w

�p8~��)��\Z�L:�S�5L�f�9`N�a�o =
�\�&��IZ����
�)�����1�k{�����5�:����_P��pk��
+�;܁��yXpq$'';��[HD����)H6h�f1*��R���<y�d�d����>rF�`F � `pdc3惡��#L�Z�*�L�e���[o�G^|��G�wA�j���e> p�ܳg��ѣMix���
�t��,
��dJ�u�'N
:t(Ln���ϴV�� ��e�ƍ~�!���Q� #%f�լYӄ( �P�]���x��}
g�/[xv�� ��mڴ1]&L��� ��r
B��j
 aDǎ
s�q��.Tq�M�>
W������Ê&!����j��0� #�0�
�.ۜ_E��_\+V��Yq�c�{( ;(>.�N��ˆ
VJFbLf:t萮�ig�aS�	� �<�S88�#G
��f�P��Egp Pd3r�)��.@�Ae��9�o��橧��������_�(�`��,U
r�ˈ�.ٌ���t^�,�O+W]uU�?�[>	$g8�k��/�Q�K��`���	
+�.���&�����p��]e��,�_0�/��`F��!���[�f�!᷀�	���}�����
� K
�X�
�cj
L�p,�)KO�)�%��X{��cf���a?��0!�H��{���&�yP
4&� ��?�n#� -&I�۟�Aֶm[��j�լ�TaS��18|j����^pO/˜��<���NG�8�ND�F�="Є�
��<�����>O�;*z�'�����yN;�4�y'�Dċ�c&B�`?�
1�p�q�!�����(��28�=�܃O.�l �LU��
�)�^3� #�4,
aR}e�&я5
+���	9���B�ffl`��,��p�Ō"j��K
<:�O��ŀ v�v�:�|H�]@
�ݭ[7ؕ���C�G� � ��[�۟�A�Q0!L�#O���q`�:NY�v��!���9���ܹ3�0�|�h
=z� ,��a�7��b�)>|�����G�S>	D+�L�5���;���ǫ���a��s��.=H��k
o�� �xM��N�P��3
	�<��IgF�`�^<8��9�Z��O7K�,�toXm𐡫��3_u�;��0p��|��g)�x�/xY�Q�ٮ0
dF�`N�q�k��i��ms�h����
�{,5MocvV(����|��
���siN��8�n��.id�`(/�����yn��C J1|(�HN,9-?'tf�� #�0�@^G@���D���ȝ���
y%zC^�?w��ܣ�����$�
+��L+�F�`��� Y�U��'N�~�#w���
�:�����.���cF�`F P�c�i!���Ld:Z�):ܲc#���n�y]��ƃ�1� #�0� #��p�W����@��j��) �F1�TAE`w"F�
�E��
"�����p���F�/J æ(�����2��}g�ܩ�Z�g�yK2��}��s���>u��s��r&̙T����������6g
aYT��I���&"" " " " �r`�o�_�)�'�[�t��sq�36y[׬YC�,J��$m���K/����wbHK�w3�^M;�́�%���Kr<7mڴq��v��+MHNl
����n���7�. �H�";#G�\�z�����L�� ����T�~��S7��&�g+;���aP�jT!�?>Irrb8y
(�K�S�����/ٽ{w��๑J�üͭр�nJ'x��K�R|��� [...]
j���+�߸���

8�k�K�.|4���疏�4i����.�" " " �N����$�O� �Bc+S�
�,��Mm��rU���׿Rޙ
+�T�
n�?%�H(k�5j؞mڴA~�Tף�p�
�q�5r��)sM
���
�7n��*)��(��q�3�O?���}'N����%�
�}˯=��+�D@D@D�"H\�>�-[��X��zΉ]k֬y��w�Q���;q�ڲ�~��%��䥄��d��0�;v�X=�n�w�1c>?
�4�!"J���ڵk��0=�!"(�(u� ^� �n��3ĹLM�
u�QI'֭[7\��l��������G�y��x��ٳm7
XS�w�ܹ�7n\�vm�v�ڶm�~�z�L+g޼y�Ǐ=~�
��@ݺu!�m�6Á
Lg��lٲe�� �˯�����E@D@D�$X�c0b�0"Fa�*���c��ݻ�(a��_�� ���xG�֭�n=z����w���ir�!��^j֬Y�]��r�ԩr�3&z���Ǫ����Yk6> ��_�`�������:����k
�fr��ܠA�2����;��K
0h� ���_���
��
�p��^pΜ9�6m��X՘���7��!�ȡ�(g�]M�>=�x���ǪCE&�u�V�_�N
�;�
;v���6lࡇ�� "���
Ss�
!�$F�f���'[Ұ�W_}��?�뮻H�FF��{�H�k
+ȋΝ;O�2ż�@$�7n��C�
;6;;{�Ν�c�U�F�е}驤�D��p���M�4a-���������i�<L&Jn�ѣG���`ѢE&�2��}��GZY�I߆#yĈ8��ڃ���
_V����H��L�'k
O�o���Ѽk��jԨQ��p�GIց5c6�
<n�>�R�X	p6mڴ���s'y�i�q���XG�p��&P�Sy$���N�w�c�=FfeVڑJ�8k���ܳgO��E]D������ڃ��&�
2d��3��M�A�/<�@Ӈ�V�ZY���C��pO�2q��f��#��-��!�e� �:	�H�=a��{$MnX�'(�E@D@D��ȪwB�ŋ�������W7kp�!�^]�Xh�"P�+��:VD@D@D 
�8�
�s��nv޾k�O�s���1w��g�i��^ͪ��
��}g�С���쀼�q/�m}j�S��q�M����t���������d.��x�<C9��Q����ɞ
7{Fq�/�" " " " "���ž�}%�[��=;6�X�ND@D@D@D@J��[�//�rI�c�'{vJj|�#" " " " 
\�6g�-H"^" " " " " 16^9^޺DC0tD@D@D@D@D #	�Y��`Xc9x��|@z,w{��G��5k�=�XJ�o޼��
/��yI�M�6n��.�3rH�l:����	F��G�!���۾}��c���
�O�Pa��%�
�FI�.]�͛p6���>}��:�m���5)l��T���kGJ���ȑ#W�^�|�r���E���y��'�a�%U$�QD@D@D �	�le��֣
ݳ���������9���^{����Mi��~�z�1�.]J1��ի/^���I�n�:Z()r�!�ط��e��� [...]
ms�������CF�|:�1�X(ݷp�‰'r�Y
�ϟ��(ͥ�������7Fn���r�P��w�}7
�;�g�-CMO�]
�
;z
�K.�[yǎ
��y7Q&�h�6Bm��kժE�9s���c���
99y�\���˼�{��3f�kĐ*5$$c	rS�v�+V
�!��j������ѣ0�����rL���0s��cD�m���m
�ٳgۣ�u�K��M�m�ƍ׮]ۮ]��mۮ_����ҁ�q�Ç�PN
��K=z��V�Z�ښ���ܷo_�`��؋25�y�y晕+W�;w�+$`^VA��Ǐ
�o���!Cԭ[M�m�f�a��^������!�J
�(\gg��`ܥ��H�֭�`��9f�޽{�ֵ�*`
b:��ڦY�f���Z�4i�Fc;�r�)�2k������J�믿
�5�ʘ�ab|�Ł�q-��>Ls�ԩ��3�0�
�e� �P�PUJ�����@�#���_f�匋{��-�s�aÆ������w�qV/~�A�ٔX՘���7�yB��v�:dȐ��:�U[�n+W�|��׉6=a~��]&|bܸq��w_��O
+�N���M�6Ye�
&K�3��	���
;T�g��[��G�:u�6�r�����׿�5Q�����@����
ec$G0���~��W?���Didv{�����]�U�
;vlvv�Ν;���7�S���͌a:A]�?��~�!��g+3�lS�L1-��2�,�ga�-��ux� 
�1��f�&M����
��
�����d��(" " " �'�̓]�w�}���l���/�[���Lz8
�#F��ن/��i�:u"�1;��
��$X!f��ω��l��o&N��Z�h�C=��:4�9Q���{�gZ��e��kԨQ��~�;nD���
���M�6����]!
�����(�
+��
X3A� " " "�H��u!�v�_d�2k�&6
M�8��={�a.��"�X�G(��u��Z�(i��N��0��f+>$�ӠA*��p�
�S����
%^9Q����=��e������Q]�e� ƑT{„	<HL2H�����yIa����Є��A�3V2z4=b�!�Ϗ��P4qH� 9��8J�������� 1�~��
<�ۅ����������s���{��}h�W�jv��9sg
z߰7�]Z/�x�������g(��X.̴t���������d��B�y0�(���aKI
�ڳc�v�$M�E@D@D@D@�
�e��l�I^�r�x�KĦ���xq��	Js�"!���X��P��M
��)�"" " " "P	乒
�^ ^�y�bX�e�4Jg�� ��X��<I�L��8�)" " " "P��E��&�r�����
��
}�Q�[�f
��(�gl޼��
��5/��дi�ƍ�%tF�y�g:�
��� ��<5����o���9�2x.d?}�C������(]�t�7o^�����
�O�>�K�
��c^�q�W@{���*���9r$��/_n3�hтt6O>��a^Rͱq�TE@D@D����l��2���r,
F*�0���a�ֻwo�a�^{�6��~�a��R���Y�t)���W�N:g&��u�h���[����>�,��n��P‰��۷�z�5k֤6Ļ�{�Wnٲ%X��}.\Ⱦۙ�Ĩ��7`\QV���	�C�8p �<we�l�ꪫ.��2�3�ѩJ��S��" " "P^	��������7^���W�}�����˃�X��/(�wx�V�F
3ޭ�����R��2������S�}��
:t`�U�b��鴼��k�۷�|��aD)�~n��C��]�����/�`^0F�S�};�0���mڴ�a
�o����4?O��e,ʘc
��}�kM�8�K�j;�|�e��B������@y%����]���s/��邮g�wi�4�.����2�
e?�8q��n<�w�yg�^�l9h�c�b(w���c�^r�%��;v���̻��qE�a|�)m�jբ��9sR:ʯ3�
/��B���:=�~
�DI	)E��Ԯ]{ŊFv�8���G�
Y�g7�D@D@D@2�@rS�`
FJZ7o����={�=�[�n�x	�$��6nܸq�ڵ�ڵk۶����q�ڷH܆�9|�p
�� N�ԣG�nժN�`��!ܹo߾���
����=��<��ʕ+ϝ;׶�!?�Catӱ�@�nݺ��m�6�
;����%F��
��LPU:�����@$�N
FN~-���͘1���hݺ�=���?�,޻w��K��,�ɬm�5k�;
��I�&��m4��)���(�v0xK��������[���
&&�}�����
���P�tl�����|=�������Ka1��|�[%�H�<�O|'�s�
�Z
,������^���
�)/��1���o,n�,w��uȐ!g�u���/�V�\���m
z�����K�ĸq���1cƄ�	��:E":6m���II~0���cK��֭[����qg�
�;DN�_��מ8�RW[
+��������H���
L�ꫯ~���w�u��W_Mf��{�������j��cǎ���޹s�U�� �
����Dv3c�D
��?��Cq�v\� �L�2%�&��C9r�:�t	�	�<F�&M�|��'�JDe�M��,���F��I ,#f�2-��9n+�%TN
+����j6c���-ie�W&=
�#F�l�[�j�N�:�䘍
�ЅYrG�
�����D}H6w��7'��W_-Z�衇
�u

��\L�)q�
���������3����t^
��^1/�5�aӦM�߿?yW����"�`<ڲ�/�֌���rC 4#w�1c9�b.�`��]����Z7���F����ܳgO3�E]D�����t�ncvX�%
�߹!���lŇD}4h@Őn��p�?���}C㕙
�0�~���'*�Dlr�T�rH:/t�k/7�n��Ƒ�{„	<�$d�${a�k���&"" " �@R�7��_4]�xѐ�˾}�/<d���F���k."P�li��
H�E@D@D@,b �h�
<�ۅ����������s���{��}h�W�jv��9��y���
x㳘��Y�j��-[��W���k2Gp,�,���������@� �
qf��`�K���(s���M
�ٱY;���59
wq��E����-�Ne�ڳ�Iġ�HD@D@D@D��H����\�LS�i�=;ezRR^D@D@D@D����8߇
���;9V���#H����������6^YVr�8��E�#p�1ǰ�l5j�(�����R���YT�
��!��>�|@z,w{��G9l͚5TڣD��y�f�2P�׼�RCӦM7nl��9�w��@.d�ӂ#���
ү_��۷�>�
+�Z��C*��/�5|�@�ҥ˼y�癗;h�>}ܗh �#Ǽ���7������
�%�OcR==��K3_m�	\����ߢ�O���O�
�<U!Q�G�_��
U5���r�AD@D@�r
��Hb���`R���0o�ݻ7�1I�������:�?�0�~�w�n�,]��b~իW�
�+�zݺu�P�íh�|��g�}��x��v[�iK�g߾}��Y�&�!�}��+��r˖-�r����p�B���T'FU�%@�㊲��8�N0b?nI�
�3�pꖔ �D)�������������&�c�(�{�Q�E�(r�GD@D@�r��m�XC*�ʔ�;<o�O~o��V�CS��������ō)ܾ}�
:��ܽӧO���^c߾e�S'o���Q��%ꃟ��СCqW�����)�|��N�:�9���w;�i��S�-@�㊲��8�u��-�z�>S���O5�7�|��h��FG��jժY,�]vYvv��
(�nk^ڣ�8�
nҸ�meus�+?�pݺu��׮]K5x�kV�\�t�uРA�)�_���W^iذ�iG>k_|��߱c��)�x�<�0н�޻|�r>##G���=r>�`n�~�����0qne��5�ƌ���S��'TL��L;ϋ����>{�����M���rR�'�n" " 垀�Q������(�y睽z�����o0�rǎ
=��%�\���c��ͼ�H
W4
#�Ni�U���̙��Q~��m~�r(���'ߏC�(�
+�p+�q�|"eQ ?�Dx��<�*�/a�bS�}�֭���p�f����Ǐwߊ(�G
y�\���o���n&���:�,le{#ǃ�'�x�]�v�U֮]37"|�><\bF<�aP
+��u�]���n����"��
^~����0�?���v8L�6��?��OF�nݺ��誫��н����6�>t�q��&" "P^	`
W���^��y�涖��ٳ-#~�pm�^��8c۸q�F|B��m�W~2���0:������L�ԣG�nժ^��Ӑ�?�}��E
�
0`����
s"�W�N͝;�
+IC~ ���x��[�Z���V�r/��SO=��_|��Й֫W��\�8J�W�1c�琧�z� {ޝ<y�}+�|
�s�9�
���d�
�& 
+�.V�=�܃�����7�y��g���j����O�,%+¢_�>x�{��y�_9|~�6�	mb8,�G
yd�ԩvmC��DO�
�uP:oT��;/?����=�� " "P^	�`�1��`
�ﺭ�ѺukK����{��u�}����T���#�Y�f�d�)�4i��A5o[�EK�2k�������1���[c�
&&�}, \�n�T�s(�n�ؤ����
5jT�(Vq��d%\�K.tʄ(GN<=
\
٪U�z��D!�Y�
&����i��
$Jf)-W8+�q'L���!=Cg��G2A�c{��	�a=��.~e�]+9`\��u��w�f�[
CɝV6}�>��C�" " �@����K'���ﮭ�a��v�
w`���% Ҧ����t�G���O�r׮]y(��`7��V�\����[z&����K�ĸq���>\k�r:`���:*�OJ�9F7{lRni�ky6hРH� B�ֹsg7d��t|@.��RB��@�1 [...]
�Dv3c����O�dq�v\��aaO$�$T~(�BN�
�ȭd�-�ˁR�p��QF��5�P�D�
1�-��ʺX���X�D�F�={�K����zA�v��vL
AP<�iٲ�G�*� &<�2}x
+�vH�o�M�����Ž��
�q
S��s$\��#<��%a�E�
���:Q� }�*�rp�j
+" " ���.��|N-�J��\H$���j6c���-�p0xt��yĈ,W������E6v�$f�
�_Y�o6k�$��O>��	��iG��\����ͽE���l&���f$HU~(���bP����z��[("����yR�a�<@LCO�7�հ�xD����K:VR��'�O�q�z�G�,��ˍ+�Y�G�ڹc$h��*!�8w���E;��ظ�\s
�JX<`W��ɧ=�>F>q�,�C>��n��v#:w�+��ج5

׏9�O�
͑�&�I��O��C/ u(���\0^9n;��
~h	&6��!+�潺袋�� *�P
+R�Y�1;�Ջ��7��1�͆in�%���^lL©��?��
�W�5
N?�t�`"6�G��C9$�:��G�
CǍ(G�B	���`}V��=w�څ���0}���oaݲ�(#�=�@��)ؒ�7��4!�"ۨ����s���[o�꛵q�0�Yx���o�z�$q3�ù�e!,��sc�z	$������0�$G�f�'�|2�	������M7�ԤI��q�h 
��<
�Dl��z&ՇCR�z�����@�%`��xF�c9�FM�,^����fn��99�O>t�!�&�����9Ks(I�
a����
/��q�*?U�KK|ɬ���S�3U��_D@D�| [��Dz������w��i���9���=��>
4֫Y5;{�?�ͼo��a[c��ܧթ��,��� 
B��1�֚�� �z�=0�G�c+n���i����������@	u�R-�e�
�c�B{v�R�
�׫NY�?��
�9���X��*V��MU���H�G�-LO�ۗj�r�*��mZhώ'Gi�i̲��I���  �%�
+��"" "P��&pn��<�r^���o)p�M
��)b��&���_l`$XD@D@D@�%�k�g	_<�ils�SJ��
:ND@D@D@D@2��[D,�Vv2.g���KD@D@D@D@��@̓l
�xf�|�r���XJ�ؿ�X
2�nO?��IW
+�'@~b���t>��Lr
S�v<BL�5k֐~�R�%�_���K/��ITƤ�5�*0��
j^R�iӦ�7�K�\9�HY[�$i��߸�u%7�	Pd�rt�W�^�|����֤9#����T�~�?Q)(" " �@�D��vc�@θ��娓'��y�)ABM;�P�z���XϮ�wݺu�4��\��TI���
웁��@�\����?��/���ݻ��*��t�v7�<�ҥK).HM�ŋ�o9$p��`�^�BY��z�:�?��Z�ҥ
�tx���r(�l���^��hF" " "��r-�<C9n6Ƕ�<���R�G�>r��
��#��L�/<����F�%�aj4Ph�}�΁�
�a�
ƾ�L2�LS����/��2Cɺ�ԨQ��oӦ�[׶c�Sv�C��
�u�YSC����߸�
+�C9#@nr�c�i|����M�8��;G�
;���[~�匏�#" " M��;9�T>�R~�E�J����-[V�XA��}.��l�
;v���رc0��5k�}��x���N����t�1y)��	�F��0��$i��ݻwϘ1!P��
+H���ڵk�0sg��
+�AS�2J���֟�7���qi,�k޼����g�
j ����J
+��Z�j
>
�Z�j��u�˖��~���v�����ٳ�!<��ܹs]!7n\�vm�v�ڶm�~�z��ʙ7o����C��7�@u(g�֭ˌ�m�f����{��l�2b��F����_{9�鈀���@� `������m
�ǿ
i.x^m]
bC���L�&C{����?ǜݻw��c>�U�u��n�
=z�Zv[����Ŕ!r��U�fͲ�"��S�N%�c̘1���z�:T(_|1�^�ƅm���^��h�" " "�Y�r�0�)�"iذ������ՠA&i��I��]�2䬳Ί��;���
0`��A��T�v�1��vc]�9s6m�d[0�1���o,�sC��C#Qά�2��[��a���rE`�֭���߳q'Fđ�a�
b��
+�k/Wt4(��me�-.,Y\�,�ׯO�����0:� J)�W_}��?�뮻H�F1��{�0x1_:w�<e�#�$�7n�q��
;6;;{�Ν�!�g�ھ�(�c�R�a
�n&դIֆ��	j." " "P	�l�|+9%�r2Z��G�
M�
+�E�����^�I�
���l���HOK�2�
8�G�a�v��L ��e��������e
�	�
��4�w�
f�5�T
n�)I9�~�fC��ǭ��T��2�UӦM�߿?w���v�y|*,
M\D@D@��W���ˇa��mf
+�<��cdVfE
.�P�,�J�b��}Ô
qX�&a3�E]DP����Ij���t�v��4���uo�ӪU+�7r��
�W&���l��D���*�,"��%a
ɹ'L��s���
+#�R7�L �ux�_-Y�xĢ�l�����
���9
������++�JO(7�e�K����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3w���>��j+�վ�N=���Z$��&"" " " " EB�Y�G&�,^�
Q$�	���=;Q�d�r@D@D@D@D��ps�Q��:~�-3�is9{v�$���I+�L&�_�$C
d������d��MD@D@D@D����")�3��" " " " "P�
+��Yd�+Z��&" " " " e�@�V���dX�
�>���XԴ3�~���1w�\�=o��F����cf:�ۣ�>j�����k�˹iӦ�7�K�\9���6�- �g�e��J�'@Q��#G�^�z���67Z�hт�6�ֻw��W\������$'P g\ܭ��cy���}����]۶m������a�f

�͜9s��͉c-]��"իW_�x����Cyj����+TI�qCT8p 5��t�B!������.s��ek&M�d��kO�R'��籎��}�ѵ�^;t����?��gB���5jX�mڴIZ�j|�۷�С;�2Fi�(Hm��R�~��%���
:�1�@(ݷp�‰'^~���
�r�v�o���3>�������E�
�9�`����{��ѯ_�+���$g����
/���x%�
�rǎ
m�j���ݻg̘����$��X� �;�k�^�b��2;DU��k�" " "P.	��`�[����s۶m�[�.&.͛7�5GfϞmG�u�ʕMx��6nܸv��v��
+�~�z�L+g޼y�Ǐ��o��ա��[�.�P�`:��f˖-[��dq��Wp�������d��H��Q#��=���ݻ�z�{��-����5G<9�l\���]`�b�
r�!���5k�}9��:u*�
cƌ	U5`��c�A\|����m�Ư]0E@D@D@J�����&rb𲿂w�}��A��|��ǃ��4�!��^Æ
m��
�C`�ϙ3gӦM���|��7��!�ȡ�(g�]M�>=�x���ǪCE&�u�V�_�N
�;�
;v���6lࡇ�� "���
Ss��'�q��>9�V.�1
���{��Y�r�ʀ�`4�M�ƪ&l_�(�F���;w�2e��@��
�7���ǎ
����s�N��jժ�3tm_�Z��
+N��p���M�4a-ig�鋀���@�#���̕R��o׮]	 ��[���g�[�jV��
>6�
>
wo�
=:J�979@���
+���{ό�����N�:�晍
lqͻF
�Hlw�駻Nn��naK
�̝o)\b�
�6mZ���I�}�i�����_.��5������@qH�"�S�j�̺�'�|Ҷ��j6*2`��M��$�\r	K�
y��ɸIg�
��-ҨQ#�H�/mP;�Z���0�
�6�ׯ�W��i����:TdÆ
#a
ɼ'L��s���
+2�]D@D@2�@��og
q⯖,^�����y��/j�sϽ�'<�ᓑz"�Q��Q�H����f����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3w�}C����yi�s^��U�SO��+����"��
E@D@D@D@*
��+��}� �5�K�M����駟JX
'" " " " ���A�4����ɞ��tr:�" " " " "P�����{m��4˩��KKS�>ٳ��0
$" " " " �"@��Z��l�%�
+���
%��.�x�X��
UYj���������@I���
��+�R���> Ce�u�"CӦM7nl���lG}4o���o�������歙3g�s�9�g�
��'���3��o�M呹s��q����
}�Q+�O�>�@�͖
Пn�������c=
��-��qJ� EpF�
�z���˗�Y��ѢE
2ڸ[�޽yׯ��&��E@D@D�bp�ʹƲ��u�}�K�.�R�J���/^��~���1"�}�ُ>���n�o%�OM�o��뮛?��O?�����.�0����K)�����a�f
k�o޼9�z�1���F`�^�B/$�qCT��K`���Ը�ҥ
��UW]u�e��sq��P�Ǿ��^v9Hs(���:�y�<�ra,f��o߾C�츘=���?�{���

��衇��/��r\�����+
+k��k�
:t���z&̸f�Q���ߦM��eՂ�'�
嵩ݍ�9xh�qCV�2J����<��t�

'N�����-۾k�.��_{� �E@D@D�l�ٿ6&���`
�o-cc(S��5�]d��	ϰ�fb�-[��X����IA���=z� ��+�(̙��}�=����޽{ƌ�1�
+3��-���]�6���;D"��ijF" " "P�	��X�W)�(N�L>��7�]��]�v�F�_����Z��~���ѣ[�jelͤ����+�:ꨣ����={n۶�u���S���m��ٳgۣx�]�reO�s��Vμy�Ə:�߸��C%P�n]4��4������S-[�lM�F$���_{� �E@D@D���-��5��x�XK��
_�WS9P����p�!��ni֬Y��
Y��w�^�Ǝ-���s�=�{���z+r��	���։���?�k��r��ԩS	�3fL���
����_�rU��W�_{���I�����@�ȳ��&�'F��\(C��c�� ���"97dۑ�+W�|��׏=�X�)i�
��.'nw�}��A��|��ǣ�nذ��uB��l�9s�lڴ�6�
&E�3��ӧO
:`��cա,غu+jשS�(�
�
;ܸ�
6��ln�_{Y� �E@D@D���
Inr��]L D���'H�
�7��qǎ
����s�N#��
�����I���l̑{��.�w����t��yʔ)FH��v�jժ�3tm_aӱe� )�0��e7�7i҄5�eq"�YD@D@*,��p
+�()9�W�Z�5`6B����ɚ<�
����F?��
@X��/����h�"�_�ݺv�J�1�1���|:�$�p����t�e��F
�HTGj7���H

��^��x��>M�6������<�\��x��������3NDr�E��̡RV�r�hS'���lT^ ���4G��� �p@���;��
#�21�j�:q��:�'�|2XY7y�!C<�Q�Q�F�1X#��
�ޞxe#-x�h�ի�6l	�H�=a��W$MJXƦ$uE@D@D��0�/bfr,
#�\�:��fK/�|k9\�?��3x���.��0|4Q(r��x
," " "�:b��9xr�
;oߵ��9��瘿����4�X�f���s������|�4����9`J�-Z���$8� ���#D@D@D@D@D #	�gV�&�S���Ji�6}�g��'����(k�.c���nq[9�
�([3��=;6r�lMGڊ��������
+c%�ˆk��W�T�+��
ԦO��-P��������T4&�"Iݾ�B��@n����6�r��>������������@"ϱ즺(`+�"%��0>���c�ـ���)�@
E���v��G7mڴ_�~۷o7}L�݂����裱v��O�>�p���Kr03h�ƍ�>WR��)�s5��]�j�P|g�ȑ�W�^�|9ǭ�-Z����z��ͻ~��BG�������@n�r��|[��	
A��͛׭[GGJx�����}��g�}���>��ی�?����gg�
�G r�i6cX�m�̙
�(a�ҥU�T�^���ŋ�w�
�CPS�W�^�C��z�:�����qݥK
+�\u�U�]v���-O3i�$��_�x����������HYdV���߼�}��U� �>}:�^{�5��L=���?�zx�
�h-u�ԡ�a�
�~�i9f�Q��=�M�6Iˡa��o߾C���
��QΚZ�IK &�O
7���S�	P�
�g ���p�ĉ�_~�
�-{�k�.��_{E��������@��W�v�e��j�f��K��w�؁�cǎ����K8D�m�*L�^x!'���?�
CM�V�޽{��3��aФ:���@Dծ]{Ŋ�3;DE9P}D@D@D@2���`�`�r*j���V�ZÇ�<�V����o��v��ѭZ�J�6m޼��-2{�l+�֕+W�;w�;�ƍ׮]ۮ]��mۮ_���%��ʙ7o����C��7n��P�	ԭ[۶m3
��tv��e˖��ۈ����+8OM_D@D@J�@<g�	�ȯGb�+ۂ$)h�k��K���[�SNٻw�Y��ކ��iݺ�+�G�
����.ӄ�i�K͚5˾�
^N�:�@�1cƄ*0n�� .���s�6>
��_�`�������<���
7��	1b�r�
��]�v
2d�Yg��ckb��\����_?��cӞaÆ
mm�
�r�w�>gΜM�6�F�j�
�X��,#�F����6��[��a���
+M`�֭����q�F����a�
z��
"�k��45y(�New�J
C9��_$��ׯ�zO)ilMLd73F$Y�t�
�ܹ�)S�A�~#]ݸq�z�ر���;w��$P��E
?����[�	�㘘x3�&M����<OXs��K�Zȉ��i{��h�6q��1���c�� ��/+��{�=s8>f�?;u�tB|c?4��]#��V�F�:������U�Va͆͘8�[~/	ͬ��
�6mZ���I�M
�y���˅��E@D@D@J�@2+�ɯ
�#^��Q~s!|�w�Vُ2e7�,�
�C�E5jd���uo�ÚB�
��!l/�'^�8Q
k�����F�\}*,�aÆ�0�d�&L�G���&." " �O��s��d58�ْ%����;S����;��=������/��|�P�� 9�\������� үC����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3o�C��|V��
ى']��-m
����tZD@D@D@D@D��0�rn��b	U�Gl�'{v�`R�ϋ ������������\�R�b揱�K at 5�>ٳ�I�Q�hH$��7�s����8��O���<���������@�H�,ίۗ�Lv�����PD@D@D@D@2� �I*y�-�#a\&LU:���������@D���'�r�s9XЮ]�n��f2
7m���6�?���f�
}�Ѵ���o���n�y���Gc	�L�>}�����㏦����3�P܁��%�離�'�F%P�q��v��+M�1a
���(���7n�s�ne� EpF�
�z� [...]
+f�9s��͛�Ҹn],�
�F܊�~��NL��.]��J�*իW_�x�+�ȡ�5{��z
��z�:�]��u�.]��~�UW]v�e�\�27�&M�o���]�\D@D@�
����ǹ��3�W�cj��|��������';��C?�p
+�a7��y�b��V�F
K�M�6I˛apL�>�n�������|�S�긘��۷�С;�L#��v �>��߸����D<(��q�3J�-\�p�ĉ�_~���-�Γ��_��������:��1ќ�<J&��I�&F{vV�\�8\��1�ڔ��/��B�Q
+n�\r	��
;��v��1m�~���ž�PfD�зBv��=c�
|�F�~�@F �v��+V�0Z�C$OFi(eD@D@D@R%�|��lݺ�^u��1}��t����~���ѣ[�jem��͛ۚ#�g϶�� �r��s����L"�Z�j��Z�Z5ϻ���Oi܍7�]��]�vm۶]�~��KF��3o�<"OB9��z�:�Qu��E�m۶���tv節-[�&o#��Nӯ��r��" " "P�8��yfr!S��SNٻw�Y�g6ܱ��H�֭]�=z������2a��u���wVR��
�c�!�z�Y�f���r�ԩ��3&�"7�Xu(�.���s�6>
v�~���&%" " e���+Gq(�N��?é�ei�g؈X�De����c��86lhk��.��Խ{�9s�lڴ�îk׮C�
9묳�v?�~�Sk�|��7��!�ȡ��j�M u�0nءz�L�<oᎋ"�yˆ
xXa67�ȯ�LR��" " "Pf	�#��&q��
o�%W��U&.��mq���61&���"�Q
�;w�2e��g����'�)y�
��|?<����t�ƍ3��c�fgg�ܹ�s8!�
����:�3��c
��q��3R�f�鈀���@y%��l��-n+��S�uDž�������U�V������XI��
PVڽ��{��=�����"�ԩ�	�
��4��
n
F�E�7XEf�!����L%�t	p�4m�4�Ð��<0�qs)��n]D@D@D 5y�r�d�h�����]t�E�\s�W\�ɍ�T7�,��>�T6Im�zG��
԰nlvX�h�a9������+o�am6[�"x�h��W#0l�0Ƒ�{„	<'I�
��MIꊀ���@�&���fK�,���[�Y0b��=x�=�g�eD�&�ً@j�MJ� �(4b �d�
<�ۅ����������s���{��}h�W�jv��9�f
��g�
+�
p@̫<��[�t��Y�x���an�BOKD@D@D@D@D �	���6m�g�J(�_
+��������d.o-����_3��ٳ�I�Q�&�E@D@D@D@J�@^-�Qe,æm��"V
-" " " "PT�(cvr98���������@F�7�
�+�NΨ�$eD@D@D@D@J����ȵ����|��؎>��M���׏2�f�ݳ��Ժ3}���ѕC��^�z}��W��+��'�q��v鞕C��
=z,[�,���o�0�M{�>}<z���r�'�=a
�x��
+�W�^�HP�f�ȑ�W�^�|�ʹ��-Z����z��
�^$�H������@!	`[�2��c[t���>��>��G�v�m������?��

��`�F��ɓ�m�v����δ��ٌaa��K�V�R�z��
t%����^k޼95W�\:?�3g�ܼys���!�'���������C�8p w}]�t�6�UW]�g閧�4i���_{��W�����@�'�$g\D{��C=���)t�}`����V�N
�
v�a�e0D#�Y�f��r
f7�[�ߴ��F�V��ڷoߡCv\��ǹ;`� �	�
=:����oӦM�rk�!��(�M�k���~�*�N����<��t7��~�Գt˞�ڵ�Nǯ=��+�D@D@D���I^q���A~e\��C�ڈ�4��x��W	����]��ܱcGk�{��Vvvv�'���^���: x�ݻwϘ1�b��i+�3� �5�k�^�b�ѓ
"�2\g�'" " "�H�����i,
#�c9.��o�ʼn۪U�P��S [...]
=V
�4��/�����O���_{������A �V��U��Âd�믿~�dž�hذ��ҠA�3�8�
|���?����-۟CH/`ڱ�YHw\|c��'d����L�t��;�|#�{��s��ٴi�U&`\�
Q��mO�>=:w^�G�C�غu+J�`}6��v���>�ذaC�����g���������c&
7}�26"&2��"aD��.0�Y��'���
�7���ǎ
K\�Ν;=�	� &�0Za�t��yʔ)FH�q�U�F��؏�(�c3� )�0��Y7J6i҄�����t�!��p-}[���^x����#y���&01�^�<;u�tB|c3���g�}��c��ܽ��C�K��
�
+���{ϴ�����\Ė�~��?{ժUXKf����ㆪ�K�ۤiӦ��ߟ|,�!���/����J1?n��
��YQ�y��>Sd�M:;d�Z���9������l�aП��K�,y饗ȧz�廇0P�F�LK�m�Q�~}O�2q��f��)��
U[
2���a�HG��	&�\"i��L�_�������xd
uR3��gVl'N9�/+�7
4�w�2B�D@� g\���)" " "P$����s��nv޾k�O�s���1w��g�i��^ͪ��
�̛5��
���
�Ư��u-Ni���W�f.�IH����������A�1��Z6�7�MD@D@D@D@<r
+�ɠx�"?U&]F�f#��|D	(��s(��ˏK9~�L:�ĭ�?�@D@D@D@D�X	���ٯ\��$\D@D@D@D���哭\�N�f�����\*Ԥ��9����9��͖�n�����������@0�侙o+��Ae
�u�l�� d5�7o
�>���fQ���6/��G�ӧO���u��'���cٲeVc�͝	H�ܸqcw��gh�?��~W��v��G3D�~��o�n'bک�֫W�����m��>��V�̙3�9�
"@Ⱦ��O�v�y����׮]7�|3����v�&r�'�|��Z�sW>��Y�����@f����_|K�W5����w�WԬY��
���W^�e˖��b;n޼9������k�5o������ʕ+M�?���$�,\��}���K�V�R�z��/
4==����g��裏n��6;�i���mۮ��z�

�F�n�N�?j^w�u������=J�y���a�����$����_|�E�>����N��C*Dr�e��ROD@D@���1���5k�
:�Z��
{��_N��P(mڴIZ���CE΀.��ѣG9�~x�:u�9���w�SE�}��
:t`'x���DF�n���mQ@2�͚5��[0�qo��M����
z[28�)|�!�
+�3)��8��2�x�S����9��C�	p�>��3�֭�I
��
+�[��_��k�r�CJJT�k��ѭ[7�(�����
����˗s-�
9���$������@ �Z$�j���9s�D�g�/��Bb�ұc����P�د�tv
٤G�����O���M;&���*��*��z�e_�bu�C�b:��'��4i��
Ύ���2�sD��-
��P���s���{+��#�<�
.�ٳ'��
+޵kW��\u�U�;w�q5~G

<��3��	;�+T�:������D!���>�v���K8o�v��fe�3�<��ܹs�:�C���o=����ƍq�1n۶mׯ_�{;`���4�'w�V��ML���'�x"���1�i7��ٳi1��G
uT,�IUϭ[�r��
Lg�-�sD��-U��`%?���W�&@��#�C!r
�0Nb�ɏ3�{���	�Y�jU��x�	��\Ư��\��\rI�|u�B 
[��',X����
;v�Ͳ��C�k9�Z~}���6�]�6���g͚,-
=���"��{��k�f̘��o��������qi��NZ�n�����3`��sNo�(�(s��j8`隝�
r�e_�cZ�q��Y!�GrժU�d����N�Gh�F?Y������D$���M*9�/�7����ƍ���p�q\ҟs�H
�4"7X��t\�D'�X�qb
���/4d���
�"�/b�j`�
֏�}�S������㏻�܉�mР�w9�]O,!��5^8��sp�s���z�D  �(�
�VV�g/��&!��G&��x���>�lb�U�=�s��" " " ��?�EP���~  w/Ð$��&�����"Z���)S�$=0�p��ƙ�un��cǎ%�y�ΝϮ�3�?61&2�g�n�4$����������j��pj��C�d� �J�H 6�Lv��`�q�[�6l؀��C	s ׀١�O�}Ɏiٽ{7���/+D=���ܡndm�={�Г`z۟wy�Ig�n��u��S�\$<�w�d� �/9�p�.Z���g�u~MLL6�,���	2�D{��&��ۈ�I
�c�=6}�t�������l����1,X3GRg6v���% [...]
7i�$�T�T���P�G
yģ�ب��6��j&�az饗�/a޲5H�ži$4��mP;��]�-��0����?��O�B^xʱTX�g
s�?��t`F�y睇�O�(��l�%�W��I�#���qdٻ�kȖ@r�P΅���B����R\���{{	���y뭷�lx��;���{K��?��c�|�iLd
���SO=e��[o���t�}��B�� Ѝ;X����ej�#" " �@�Q'5�N}�X�:�ujx�A�f��k�VL@��D$�O7bOu(*<���s��nv޾k�O�s���1w��g�i��^ͪ��
�̛5���}g]�������)-Z�����'9" " " " "�q�b,*��l�!{v�: �.S)$" " " �J �V����T�,��m:dώ�ޮH�0�2I�"��m:d�N�<�RZD@D@D@D��TD[��`J��������@Y%�4�"��
V#��"��" " " " " [...]
=P
J� ������4W]u���[���=V=����_#�����@'`j��
��rD��5kp�
:�(E�)G��P��
z��N�=�	�؞i7[�5�
�ެY�[n��ږ�

��Å��4R�}�Δ>����`�~z�i��-Al�`�S��C�츒�
\�8��
:/�qS���M����<���O��n����[��{V���VX�E@D@D@������˵j�B�9s�㋫���P�'���W_%�C$�ᨶ���c����NOH�Q����I��~ C��+g���3f������|"XHD�Ԯ]{ŊF;D�R�(]I
�Ps�0�}�vܮ]�̟??�
����ѣG�j��ڈ͛7�5AfϞmE��O<� ,��Fb8���Çc�V�V-=!
�'�+W�<w�\W�ƍ׮]
��mۮ_���%�r�
?~|�>~�
�%L�nݺ�HȐ�
Lg�^hٲe<�18V=���_É�����$H�YK
ł
#�_K� [...]
+7�Xu�(�*����)����g��RFD@D@*&�4me`�]&�`ܸq��w������bx�|X�+W�|��׉r��6lhk��F�mǩ<x���?���8=��r`׮]�
r�Yg�
����ݻ��i�&+�|��7��!�ȡ�(g�7L u�0nءz�D	lݺ��L<wJ�I��F6l�!��ܠ
���^�������$#���l�a�����4��ͼ��%l_��Kl>Ld��"�����"9�5��	
���ׯ���JXc
u��yʔ)FCb�q�sa��cǎ���޹s�GB�1n;".u+E���8&��ФI�n��>ZD@D@D U,@�AK�V&+��7�L.3�
/Z�衇
�e�sS���`�f�V�"0�h�P�$ �%�_x����#y��p��
+�޸��y:뉋����3��c&�S�N$�fc�{���a�רQ�N?�t�)��'Չ�1�gڴi���'?
�^ȟ���/�X+" " "P2ұ�4h����n ���~e���GX0�+��f��#�<:
7�,����Lcv���� ��lT|Ho�P�<
���6jԨ�9��
^Z76;�e��0�
�6�v{�=�2�B��:�/>Æ
#a
ɳ'L��s����otI(rYG��lɒ%�?��3[���{Ь��fn�k#�"Pv	�3��*/�E@D@D�� �O�'w����]{~ڟ����{�>�O��jV��^0gެa���;�v�-�z�8�E�t��e���(bQ��<ʹ�2K����r�Ǧy���؏r9kMJD@D@D@D��@�rV��
�W17��ٳS|	4*&g�ZD@D@D@�
+�|[���\!�e��ٳSVΥ�(Zy1E+U�D@D@D@D@D�L��'{7��+S�Pʊ����������$
[��> =5��Ҕ�#�2U9XG
�.]�̛7�v���
}���9R��C��C�k׎� 9F�>}�x�1���v�tSe�W�^U1�z��JΜ9�s�A�#?�����w���SXDT�hڴi�ƍ�%��q�� Ρ�ԡTPtf�ȑ�W�^�|9���-Z� �͓O>龤jc�h�AE@D@D@�����m��•���w�WԬY�Z
���W^�e��
u�>��([
�%�)��M7�4�|�R�.T�l޼9Q�߸�c�Rp۶m�_�9)z��

ٷҨ�w�7R(}�~���{��qQfݺX�>J�����.]Z�J��ի/^��
e��C��G9��	
��w�\*W]u�e�]f��
+:�g2AI� " " "��@R8
���5k��W
:t(nT�N_~�����=����5j��#FPF��K/Žz�gX[����i�&i�4����Y�f��r
U�q�"��:u�s�a��o��^�VfF�Caj	��0��O�N��^{�}�ӹ}����ٱ��;�;z�X�	��q�3J�q�5q�D.�wY��LPX:������$�%j6,c=����x�kժ�xs��)$w<�X�NI�/��B��+�H�W_}��

���X��z�)�C�ol�
;v�?v�BB:
eZl��Īs��>�v��\*FCv�����РG�
d1�X��������@b���+�۷o�~��a<`� 
i.��͛��g�8_�5�6hЀ�C�
1G�ٳ�
�'��3Ϭ\��ܹs=�����O<S�?�m&�����J�"�����Çc��ԍ7�]�>m۶]�~=n�P�V��~�Q�P��֭ˠ����t��`����y/y�4������@
+
+
���q�W��/�5,X@��T�G�
m5�1c���Ѻu�P��㛅t?��u��o�k�#ٯ?�o��&q�����}�>it��<i�$��c����ń"��%_�f�
+k�5jThgu�d\�\����t��L u
�(�y��E1���+��vx�	�7n�}��7f�;ZÆ
m����#�<�w����֫W�8����޽; �B@���v�ʃ>����� }�6WF�k�k׮���:�,{w
,�;.����
Y�k��p���z�
��[�2�	:g㎈;Fo��^z�׿��"�K�th(��}�<��m�ı�ڵ
ۗ��Bؠ��][!�Ƭ�kԨQqϘ)d�2eJā����
������"}��/�@���.��h���E��رc���w��][��d$��8&�Q�I�&�|�0Qdk!WL&�B������@'�틑p���ʡ�29.؈�%�vժUZ�(L�I����L\��-"w.U����k�P����=�����7����.�
+��K��n�9
��
/�{M�8�B7o��ߺ�i¯���/��>L-8�����_�jU��|��
�1Ҹ%��Wp�N���iӦq�rgu�i�]}��\0
m��Ou�j��W������@y#`0L�r|���n�r��
;�R%�pY�Ư>��,iz�Gh'H g�
7�@8�����n�2k��a6"��b����?�0G�	�rX��`9�(��]���Ǭ���8�ams8��طr(,��Nfe��*N�Y�(".PϺ��iժU���v]���
6�.��0a�7���J%�hƚ������'�
q�Ve
uR��K�<�2	`
��
s�݃��ˈ�4u�E�� 9�{�������'w����]{~ڟ����{�>�O��jV��^0gެqԾ�y���3�W�-O511#��(G�.�T���������@9#�W�$�
v��撚�M���!��T(�8e]�BM^�������@�"�s@�?���}l���Nd�Wb��l�eώ���p�e]�
�+�D@D@D@D��	�-��H�WnN��;��|�1
�{�ۊW.ᓣ�D@D@D@D@��@����?��>Ϫ��G���-��s}�q+Z��Ew�$ID@D@D@D��0Q9�m�E�e�Z$��
�B�22=�)" " " " �!��L�����egm_ܥ��!�ra0�X��I oQ_A[9
{Qb���&9i-" " " "P�	C9'g��e<z�1�mF��ɉ��������@y�rb
F<[�V������L��H�
+|mh�" " " "P�	���"1�����e��+𵡩�������@�&��sg�l�����
+}mh�" " " " qwr,(9+�U���+%F(���/�Xl�^�|�r��\�Xh�" " " " "�K �al���me|̎;ﳜ˺lD@D@D@D@*�<+9~a��ܵ}�4vc�+�VD@D@D@D�����0
k+,���." " " "P���/ϯ��b9ׯl
e
��6�8��8�_9��_Ł�����������@A���W�w�y��U�u#" " " "P�d�����ŕ�el�c��ЌE@D@D@D@�	x��y��B%" " " " ��7�2����r��Ud6���������@E%��lj\Ƿ|��
�zUh�" " " " ��S�.����.c>�b�c���Pfm" " " " "P�x+��}�y~團�����r�TE@D@D@D@����y�d�,�r7�/" " " "P�Xײ5��xe&���&" " " " �@,Ty~�����1�e0W�kC��@��[9�G��t����������@�V�4����&���ED@D@D@D@D�ɯl
\�T�u!" " " "P	�`e7y\n
���M�8����ДE@D@D@D@
���
����+njh�EHD@D@D@D@*&� [...]
+��Z$b!" " " " "���+kI��
(H��q�L�8D@D@D@D@*4*���ـd�`T��A�HF �|�le]
" " " " "�K /�r��x�k����!" " " "P�	$��k�L�r�G$ " " " " ��	�����`�\����/" " " �@n�r
��+�Š�������������kCD@D@D@D@��:�f�/�����?�y�=�����~�3a�2G��/��9xr�
;oߵ��9��瘿����4�X�f���s��r����Y�Lsr^���SO;��WΏd.sH������������tle'�����"ТE
U�f
s�1�4[�5�F�
]s`����D�P�
��O�8�RRD@D@��@�Vέ�!�-o(c�mժU'N<��cy�c+����ov��I�
+ [...]
�ؿ|���3�<�좋.ڳgfh�
w�駳�/���e˖M�6�q�ơ��l�r�޽�w�>���������+�ԩ���#�M�6�G��馛�Ν�[��/٥K�뮻����l?}
�=��ӡz�uH���o߾M�6Y�?��/�mۖ�%y`柯P�
�%IOc�������.�x�>���(Ǭ�x�����2[�f���?�}��0 at ck�}��yp�qZ?��#o��F߾}Cq��7���?�1{�lv��FϏ>����o֬��'/�y�A����[
�[Ǐ>�(��
�/������&���7���_ۿjժ<�w�.�����u�{��8�����`��>���[�n޼yܮ��D8���!�G�
}�ᇸT;t�`�T�\��{�����c
�|��v�Bv;��֭|>��
x ,�(s�8㌙3g��_�z��x����������
.��c�
v�a��u�������&G}tJ��������@�01q�8''+'�R�k�#�z��_|1���/���`U�n�:T�9眃�Lgv;e۵kW�9������ [...]
+�x���ׯ���r�-W_}u�J�� � ��������u�]V�����q�_p��
w����X�v�B��
�s�]q�<��ܹs�>}<b	�:t(�Ə�[�
rW`�v��q�q��#�V�Z�V�C-Z������," " "P8��cl���}��
�
Lg'� �#p"��u�YD,nԠ����o
�[��=�0����f��f���W�^=7�wҤIx[1gmϺu�oc��|I
ף���(��5U )�$�$z�V�>H
��ŋ��x���8|Æ
��_5jd.��=z��\�V�!�i��K��_��W ��Ç�$^�dɘ1c�w�����SO����<y�d�������m�ƍp{��'��<�p����o���e�
˫����e��" " " ��O��W�[C�R��
e7
+�V�N�~���xp�
7�?jQ
�}l��۷�ر���(f���^���{5kִ����K/���c�U�R�0* ��\�5pT�Q��O�
X�5f��+�|���kg^�4�p$p����;aLs��$���0L�c-^v�m��k-]���ܴiS� �ٙ0a�<W���k����L�_���
���E��䈀�����D �8�Y�Df�R�o�!ùH�����q�_W�0
H�4pbg��D9�x`�'�>l,sC����!C�%�ʿ���y~衇�ƭ[��.�f��2�w�
}��>o۵kWړM䙓��=�9QWN�����"N��0�}���G��{98_QH����=<�?ĩ�������\�����]�����׿�5wV���u�QX�������-�9��N嘡

��9ˈ��[�.v�� �#�
+9s��
��������j���o&��=�'��1�m;�+�p���d��c
�N�t �8��qC�1�����dy;	9�u��IZ:�l�a�c��4-'�tR�3bn�C_�
�0�ǰ�
��y���$�
�g�x��
p
��
�2=�7
=/���_�[Sle|̡��AD@D@D��r'�,�

9��8����
����Ǡ$�Y#0�X��F�5
=c1���$bc�����e�#��X�f�����ڸ��[�
������͆A3k�,�$����N��
Xoٲ��gn;���>)2x���OG�d�ak�X�e;��c8��5�S]ۗ��	��}��D;���
O?���9(�G�;w�$��;��\>��S{��
�a�@Ƚ�i�j�8Z�oI��

a',��������S8�g0��[�^����� �
�k�!�Eǎ
��?E9/���
4�:��_}D@D@D@���k������Nv���$7!��7o6�ʘV={���������	i0`�Q����c��}��3f���ldl0�"�

�X40I".X�f���:1
n�����+121n��Æ
#a
��
���k���c8���mi��D�X������
m�d3\R�
�
���&�
E���$R ��(Il �9��W�a��>c!���ۨ�Qn�WR���e�l�x8k 	���_�~�%d�ߍ7�H��(煸|�"���X�(4�\s8�蓛/Y���O�c(�ƿ��
|��{�6n��B#" �`����7����s����M��۞�'w����]{~ڟ����{�>�O��jV��^0g�,��=��g��G�y��3N=�4��/�Q6�r<��h�U��ً@�H��3
"7�̙���:BD@D@D�P�9�s��"|YY�Fޟs K���B
���&%Y�扩HK��2@�P
�f�Q�%�e`�RQD@D@2�@��l���
�S�tme��سS��t|"��� ��U�r*��R$�|q���Y0��'�1����g7<��{�yg�#������H;^��X�ܒxe�B�y�M �	X.�^:VD@D@D@D@��X
�q�P���|+�Ԕf���J�DP�����u�(l@�����R2����i��.
�." "�9�/T��������c��+ǝ�1s�5��UJ
��M����T�˄����Ir���P#���
q+�q#�v�կ~E2O����'@~R}Ҙ�K�"�w�\�)����O�_���;����D12�;�8 R���3�t%�m����
+����
j�ڵ��v u�z�<a��:��(��"uJׅN��v��9
Ԟ�%��f͚�5*TH�z	LpW2+�L���׵�U�����R�L��L��y�[�̸��P3ϔ��������KQ�LӧQhh�"!@�4�>]w�u��������T3%�����r�!E2\��
:`,ں]�|�
+P��ȇ.��S�Q��ZZ�&M��O���<�4%�N>�dS���
����r.�Q��zs]
3f̓O>I�`9)����C^
���ʉǛ��Ԃ��
5�l�/\�`A�Ν��0�W��{/7�Y(��l�H�nݺaÆ�Z��xh{J3I:��p�ԩ�Yr�2{�l+���.�������0o�t�))Ig�q)�v���SV�����C3���IѾk���I�u�Y�N����6��ܷ���7��z2
gn��N���|?}�'=���W��Mࡇ
�V�T*?@��~�-��b�ۥK
8^Rx�}ӎq�?(��?���~�m"��ƍ�j�vB⁘CQX��-,�z��a��go$�����t���\p�1�
Cv&�fn3(��w	qc������'s�޽��
��ȡt1F�+�;
*�R��������/_�)��#`��6g\����^�Ȫ^�:��9c�4߳�'�������߾��
�o�lڴ�������-Bݺu��#N�v��<��6O�24z
+G�r�r�X�����߸��vh�E������,�OOJUs���;�<���n���.���J���o� =_y�
+>s5S��[@#�O��>��T������@9&�e˖+Vt��)�
/��l�
;v�b���$�����34M�b��t�M�<�
�� ;'�YYY�۷��2;��T)fz�jo��Q%�{�?[��tkԨV�iӸ��[
+m�C��ɡ�
�� g�L_�|y��6T�h�
s����}�s��������o�k�c�/]�����}NR��ƾ�̻Dٖ~��� �aӂ��
���Ƃ��ׯ����=�ܗ�V��o\�s�����c�]��G�ݻwG�?�|=�
���h�ˇ��pˍp�3�8#@��|��3G���X�xJ
�����oh?=�XW�6m�p�{+X��y
�" " � �G�J��Z����Ͽ�;0��� �՞���T0
0
�����F ^�E�̛<Wǎd'�^�7��(#�3���=�N�c������y c���NjJ�q�kϣ?A��Ǫ�����E����KܵQDy���=/�����|5a��ϼ��q�����xc�c�>⵵��fش��iՓo���
{N����m3���ؿw�o�^��Fޛ��X����Fw���	�����>�1�[�li[p$�P���{瑺y
�Kz��
�K/�D7s�_{4�?�W���hРkԨe� 9X�9НoJJtްa�L���>��C����s���)*
��`=]�ф
:�у�G?�����" " � �e��������d�z^s�5-��ЫW/,"M�(v����믿���E6ܥ��#���)�KE�{�M����ڧO��K��m���z�-B�񐲺�0�V�*U��]�4XZt=SҪ��
7��Ʋ��T��+W�@\�G:�������}�Laj�
ģy@��������S���t�؄
�?��'nj�8�4T-�C��~1�B̝_ю��y,��%MD@D �	��]K��p׮]	~�ѱ�	\q��?��s<
'|�C�߯|�(���`;�3(���9�̆E^�~}�!%{��TO�;�:nܸ�
+�c0b�5i�':��8$��k���`�
����14�#��QT�ùq�_�+����QV���
 �>ر�=%�f�N�ɖ�m��~�Qfb���'�@wݷ�ɉ���8.�i\�j����i��'Gs͚5VN���;*XO�?kQ�`��E%?�\�GD@D�"��!����C�/
�ڵky β+�X~[����G a�i��.��
�!i1
+c�D��R�+�
P,7��YDx�A�=�oܸѽ� ���9����J��7.�d�e2��J�vN*'@�?I<}
��o]_��>��+����"t�
�Qc9��۞z�)�(�9�ݱ�V��H��u
+7@!˜qx��4n
+v�''%U�8.�!g�}6K�C�k/��� �~z�D��s�
6l��%Kȕc�n��m
-��o�J��o�`=���\�<=`r������!U��/" "P�	����ZRF`��t��W�����7a��bIs�A�������㷕 ���LdleL#��0
9~�Rq���M1�b)��,"
h���lı
y�x�C>��c|�䓶�����(Rљ\~�d�φ�C7?��c`�_u�U��V���_�u��챕
��
@<��ӟ�D��#FqaT$\� yR��C�5���S��߸rx�Bv3�Z��̆"�!'UU��K 8�'1
+9�Xv,�OO��s
+$Wt��W[!���!�r�ص��L����zrr��y����3%��O�
R���" " � G0�03�Cp!',#+�4O�y�M*"
�����
+3�����Ӛ�DxC	ư�S��g/��)v*�x��@ln=`.�<S�
�
v	:�	�W1��7�GHNǾIcB�3Q
�g�F������g�@�U�E
�%�����-
i�3:���=����e�hG<� ��M��?X�T�d*��K���N�����.�}מ������ݽg�ݧ��z5�fg/�3o֐!�>8�3+����8���
+����\X�r��'7g{B@�
ʝ[��� ��!�]@�x�P�:c�EW�B�>]2A/ʔ���e�>�AD@D@D@D 
d�3�{�o��4(�C�V�j�l��WJf褣����9)�J�uXB�9!1%<}
'" " "P��F���\&1��y�tD@D@D@D@J��7
�y]��ʥ�O㊀������T4e�V&�I��ȡ�l]xᅦ?y�����>�$K
�W����A��%�RaU���m�8���)+>�僼f!" �C Ϲ

�����
+��)$�M,iS:�8� �z
<8���#�^���O���}��w�"�6eJ>��Cw"��կh�V�Z��U���n��Yδ�c�M��-��-Bt%" �H !
9ܯ�U��7�
?��#RC�r����e�
Am�(=3�ń�a~��q��+q�$鷧%3�P*Z�-�4:}~��RO(E�2V)�i��6p�@�ƺ�P���,Ԭ6����w�����/~A�]�vٹQp�Z��(�
A��)Aٻw�СC	T E�n�(
���332�a��g"7�[ԋ����O8�_�����f�|?}��1$�N�����(&��C^�������r����c���<%�Ǝ
k�5�MJ��*��
ؒ?�L\�I�W�����'��:�
�
Hz���@���;N���Hv�o^��K*?@�N]{��s�p���3�T�R6��3������Ͼ���o��
+�����@Q(�R�/�me;v���qpz�ERT�|x�h�f#���ɓ����}��<�9�������1c�PU2�=�	c�����H�7o
��[�<%Q�4��
~ ٷ1(��7�0)�|�R	3X��>r/^��믷k��Bc?}�~b�r5�~�믿~뭷(��ސ�B�x
C�d`�L�n�>_
�Eu������F���m@���z�F'�����3�2�N��P�
>~�������y��w�y����8qb�U�T�s��>ȣ��7��˚5k"����w
CP��%P�j���W;����/���v�6V� ٣�:
+G�X�ؠl�ͼ;s�Lۂ�.ְi�5k^X��駟�y����sp������ʴ�1ű�����CB��޽���Ǜ�m;/�Q�8� 	~���1�Q���
�
s
7$
ή>~o�ܹ�=�-�Ä	ˁ��;+-��0��y��\�~��s~�0tK<��^�~��}���ۀ�f�x�y�6g�
.c�H�W��PPV����|�[6���{>2�!�����
߸�
�85�'��=tj� " "�!��{^|}�w���j��/�y����o��37<�ƺ�^�|�kkzeͰi���Ҫ'�ZG�c;��4w����(�ߊo�vd�p�2դ	� <���G}�c��l�Ҷ�H޳gO�
=��ֻwoBL�/�Ix
��^z�n�(���n0�э�)
�3
�r�t�
Ži��O�
j� ��
8�Nt�l���_�>��Mˉ'�]H��]`�����0�+
+�T�[?}>ר�x��7���/�/_��F�f�5jt�5�p|����	���?
�
���������o�R~e|�QΚ������.ǣ��n+�T����ʕ+��}� �=-���
+.^6S����_{�'�|����OH�9ʯ�t1���n�P�(�#��"Ԫ�E�-Z�I?�
�wu��7Z������
+�ˉ��a�
+t��w�
,?Q��
+p��CL�l���b.�3"i" " �I �
��y
��|�!��*D F�*UXcj>{*?c�P/�c�=�m��~���f\
hF?$�g�J1&��4�Z��
Ŏi��O�rR��������?��3�.1�|~�C�����3�C�_�~�+=���n��I�zH��ڵky Ų��
�IL�8����H�+�/�5k���{�	���M7������gϞ<R�e��M�o�!� " "P��m��ó���+��뮻�ʼn���
z���<��SXo�'L�>�_e�ݙ�=���4��s�=��2�i�Xធ�3�����cS�����>�%w�E�
+�K/�4@��>��	��q6nK�C� ���eC^�m�e˖gi$�[N����T� �L�y
=�,v(����|�ǰ�׭�>�^��Gs�u	�g
�{��B��h�'�&��;l�0��%K�<����g$@���L�$6���ट_3J�yL�z�Q" " EE �V��NW<
Y���?��dI#F� ��H"
�Uk]�ti߾=a���ǯ=�������ӧ�I�T�~�T%��<
���;Y�O�/I�L;��$�;�������
y����O�r�F!|�
e�p�駳oz��G�'�,\Y��!;蠃��!\�S�N䤋B��<F9�,�)��6��J`�\�~��z=�ԟ�8O<��_��W�;aM�+�%�t^E(?)m>�$e瓎3�ꫯ=#I��	�"��j|cԨQ+V�@��痷��7Tu(2_�y[y0�,^2��-���:��&>ڙ�)�Q�T>c��5;;��4�(9���ק�����JV
�B/���zH����S�x%\D@D��
<�ۅ�������
r�������4�X�f���s�ͺoȐ�X
��sb)
^��������(*sqϟ,�J��B*S�(=�A�_X�ɢ{L�#G��/�*OS�\��T�[]?��b�\D@D@
+A �"�TV�c;�&M��^�<��zk<�49+�ҿL�!�a
<����~�YF0I��NyR>�up�J���S�.9�ED@D mnN����Ԝ�[�|��ft������E@D@D@D@*��c0�r^��u��2�`�8gZ3(�e.��9Р" " " " �I��ʹvr��$�Y|#e�ajZH��1)�M��GM�4��N$:�"<m�z&�=�yJ���U���`�i\�E�mJ���L2���"�O��U
��	�y���HI(n~�|s���_w�ƦM��T�SR�����#����
/�����G�i�Pَbd[��ȇ~��"�IvjHI�"ס,
+���m)@$��B�ލ{��>�-?�E^���ʇ(@��<KEI
*" e�@~
F�>N�V�*�k�"p}��m�ݖ!�"c?嵢(CM�(=M��Q���/>�#�?��"�IHI�"ס�
+�h�m)�)*��'���"�RZ<K�(��r
�k.c��Cx�i�Q��Lmv��oABV�[Q��cǎ�EΩ{�'�/~�
J^�ڵ����r�֭6lتU+�
B�Se��o8��d��٩
k�3�
.�����?�c��[[�n����O8�_�����f0� ���-Q�!����R\��p�>iϽ�
X&�[
+ s]q��iӆz�iG2p z8�T��x�&=�I�qc<�J.B&��`��t�-ZP��}��d<�%
�I?_I?��JI��u�]|�5�
;֞Ǥ�k3�ԩS����~��J���;N���H�{��O��<��W9���tD@D ���}�Z$��W���u��X!�Q
��|x�T�H�W��ɓ'S��/�x�L�M�6Q���wnjCU���4N��(�Ѯ];;hBl��

ٷ1(��7�0)�|�R��#��!`�z�q
���+�L�2��_�5kfV�� �d�u��?���ꭷޢp�{��I���
��>LI&�O�ya+���v�����Ӑ������(���
��믿�<�
=�=����<�3ز��qk1c�
�pO�����ǓC���7�T�O���M���_}������74�o���|m���
v	�����������7�yw�̙��~����5lZ���š�O?����ׯ����=�ܗ�V�&T��%?�
s
}�!��w��m��#DĶ��(g�qF ?�F�D=�y΂;_W��3�ho���C�k�=�\
x��u�(�OW
��*i/�(�I�Ǿ�N����cc�W�^�<x>b���>_~���y%�iR�w����2���	&D~���|�߷
e�̙���/@�[~��ͫ�}�h�" e����y��E�=7�	��|������O�����
{����}�5æ}v�K��|k
=���s���'�yV��L�����jG6������I�~
<T�p�޽Ԅ��hٲ�m���gϞ
=zП�w��<�4���'���|���Kt3G���q�ѠA��Q��oTMC��!6l�����;����r
:Q� n�\}���q)�ˁ�̿n���V��X�أ\��ŭ����+/_��w���/�_9�-��*�T��Ƿ��'�l$,�����
�|� ���f͚5j��k�A������W�|�_D@�:�����ſؖt2<������r�J"
�K������� š�Lei�с�����x\��~B��Q~�i`u�/y�1�����L�-"s��s���m��2?}�����/��ˌ�4H�Ȗ��
]��=
�� [...]
+C�\ ��T�[?}�}f��Q1�����
X�fM�/=��3g�y&�D�Ǐg�Z�Nt�~
��]>��,A����=����D��_�v-�X.�_�c=	=���w^���P7(�����>�_NV�h6���
���|�W�u�]�`�(b
�C=d퀧�z�_B��O�nm;
���ვ`~��>�l�
�?�}�M���K�p� n�B�K&N�������;����ч5�x�/���"ԧ��*�떤��{�>H;��
+C��z�#��PsǤ�H����;
w�?��"FH��*�26sY���}�n�>�ËL^�Y�ˊU"�L�"���!`^

]l}
+��o�e˖���(��N��j4�7Ax4i.I$��+3��<��Wa�R
+" e����u%�H��sc�79���?�"1b�@�=V�u�ҥ}���>������+�nj�8��������_r���h����(
t�x*��Il�
���<�x�>}�V��&���[��

��8�����0ؑC�@/K�2#*��6�>\�� ��S�N�K�JbԲ����O�6./���7A�m��E��ST�r�W��6��#���ᦛn�ٳ'��س��uR)�'��O<�׿��{
2��Õ�� Ϥ��ͫ0���2G �g'5[�dɳo������

��_Fd�d�FW
�wD
�8$��R�VΦS*
K~�гf:�[���
=�Xg��O�Wn��<�����+732)��*g�I���9xr�
;oߵ��9�H3w��g�i��^ͪ��
�̛5��
|c�	�����M�[�zZ����k�2�?m�uEщ��lQz��7]��M�T�u��g�$b"��g>��F�Z^�U�$PD�\�Q�	�r��M�4!�y6n���(�fԨQ&#�Q���]��A5Cd���0b!~���q;D0L�(VH5��
+�E���T4c0�r,�̍��hgH�H�@ab0nZ�ӝ
��\�r�;��@�CD@D@D@D@D �@Q��n/b0�ql�eʺ�D@D@D@D@*4�\�+���E�X����6`��(��ԧ�?yg����>,!23*�I�&eo&lŭO��'�.��3Wt
J캚4i��H �u媗���tӦM�>
��Z�+�:��!�;�J탫ԩQ�n��?�_ԫU�~�j��rme�?9n*[��_��M��T�S�O���?x�`W?����?�|tU��T����$k��~�Ҥ�O_=
O`���\u�]w�+j�̙d¦�f"iq
?J!%$^�Ex]Q~��э5�{��ͮ�T���
Y�(��el��k'Y;���z�����8N���'������^���k��n��/������z��M
'~�x����m]���^���u-����"0�J�Y��G}t�m�e_2�Sf,�2u�[��e�e(�R�&UV�Gѓ���z*��v� [...]
+�1���S��E%?��ҨQ���_t��Qd��_|�G
�"�k?�3(�N�����D@D@���������;�y`��u�m�����~7���������?������j�yc0��J�I;��(�E�6
���H�I
;jVw�ؑ��1t���L��/~�c	�����e�֭6lتU+
����t�Є:
B�2���ᶳ���[�^��'�p�/�K��L3X~�rv�؁!�򤝢ֱ�y�k�=��C8)8;�;N:��#e�M7�_{�F��
�ƕ+Wr�Qɼܹs'^��˗��T��B�]�'�zo�g϶:�ݻw�С�#�[�n�r4o��T?f�n����$��޽;'�瞣��y�*O���o������U�b����YD1���r�-�k�4�A�^ޤ�/�3��.�J��fSW�zv)Sσ&L[?���z����'��d�G�̓�̸\p;��s��NO�[��R���." " ��aڏ���}��@��ٳ{7&��~��~�������4�b?;^[�/^9ɠի [...]
+��������������z��~��O~�<��
+R����lٲb�
+
+D�t)�Ξϗ��s��?��
7���[&.nw1�����_r-�O�t`��,��7n�>d,�*J����	$<���IͿ�~�
���}������11��0bl��5�M�ƾ�̻Da��s܄Xæe֬Yxa����~Jg<R�sp������*��ǵ���
�t�ٕ�?����(<���E��v�7́&L0
+������1[ �Pm�0g�
��^���c��62G1_
g07<��W�^<CH�l��T#��82�>wp����=����O���)
+�3f���Iz
��Ǔ"�
��W_Y�p�5<ں�e�U���r�{�ϝ���ﺢ�o߾�N�xy�����b�P5}-Z�Kn�������]_,Q�a����������$�DƁ�s���۾���|��7_}�տ7�{�6��
z
۱�s��u��Y'�>��[���Վl�_�c>�^��g�:T�
�5��<�y˖-m
�d��ѣ��z���#o��Kz&���^��9ʯ=���b<��<��옖T����
J<�6O<�D����7n �C0�8_͚5c�5�\c�M0.-v��p
�J��3����o�J*ǼՠA�֨Q�g�[&vx����O� }NA��F������y���'?
�
�
��o��G�������s���]z�o��&�ǚ5k֮]Kn�4��}H͚5���F�rt����@E&��W_a	`�|�m�c�`,6���n<r�����ST����!�iy�Wp����,��z|��'�0�N�g��(���|.
9�����$T�+� 
�X^
nA7��#u���8ծ]'1� +�x�O�9ʕ����%��O�4�������4c�%�n�Bs���٣m2��/#$��.
�I�BS�J��m�_9x]���nD�X�C�T)�p/�<<�n�jժ)�nu�����fQ����4����V�w�%�@�–��}~�
�2��1���
%�sR~P��d�nv$�b��~��d�Œ�~Y����<
̏q��P9@��U�LOvLK������o�ʕ	S1?��3���n�5�Ϭ�����A��ps��
k�''���=��y�y��L���kN��
?>FO"<
���'���0����O~�<�2�t3;�2�_�>�"�u����w����i)��휞�~���늱�
�t�2}�tle|���B��
�`�n�j����8� �Ļ��Ա" " �@��-�]�������O�.ʮW��&�j��S>"�l��n_��:�����ʻ�^~�X��#
���UX�<��_>�S�מ�N��"�5.��d5N����g���4���cEZ��������ڸۡ�l�2�����ͻd���»���?Ƈ�?)O4Ī#<��$53����b6
syɒ% [...]
���R�#��<��O���[��},�s�n�6��|��5���qq��
��7�Z�������yI���(\�ʬ@
]��ǐ���kq=�&�K��.KuRn>��)�
+" " 8��4mV��þ���#
��f���b)_�<	�s�zd�?*O�� �|��g�9b�".L?�:���";a����kO�Kp�w��x_���!�
�T?�$��L��i�
*?%9��@�M7�ԳgO����v�:蠃��S��_b��>~��j˳r�6�y��'�9"l70򜝙_N�/�pr p��@@�
 Ǐz��ӧ�	 x^���'�D�
�Σ���xځ8��-��2YN�=�%c�y���ƒT'X�nތ�f��y����+�	��1��~a!�ڔ!���	��C��4&e�7r L[�C �q��-Ok�G�E~�d��f�'��v@�~�|��5���3޻�/������`�+D_>��!�=� ���15<�I������:)��ass���(��b�/���͗�\�*H��ܹsC��JR+�%" "P&
{`(�Hb��b9��[|�Ћ����<?���C�2��� [...]
+[�����e�ŝ��|\�{�3�љ9mi%" " " " ��l��_����R�	1���J���l��c~�e��l��
�W�VnJ^�g>���
c+�uL��o���hQ^i�Ĥ&�2�
��~���~��ى����4�n�Y7b���-?�=װ�����
�4cGpɋ�$f�h[x_�$�� �I:� ��8���Qg��L8&�s)x���Zș��R)M��T�
+�>��r�8'Qy䙥<`�R><�V�B7�~:�$J���R^��4B휢�cʓ����[,�W���D��S�d�߅HÇL$MEB�D
uJ�Q��,�	��ˏ�=�~�E�x�"H���<R�^
+��|D"]�	�RQ��_��:���f�
�
+�*�����iצu���w;��\�rx�o�V>��&����7p,ǂ���s�1�>�r,gY��:k"�8n
��f?f
:�b�
�`�2
'_��^��i�o�ۓ[�
���oz��|�}WX=�v2��J�U����5�sq�ݝa"}��pxA�
�ɔ�%�
?��ԣ�9k�ش>	.���@C�SH�)������Q��\%

�V�j
p�ۭQpq$;�
&��Z�
���\\	W[�k%o���@:�|�
�
&�}���v\v�<��ip/G�
�����I$ꕖ?ρѿ�
�c��o���.QB�Orȷg�->G�f_�I盠p�s��0�J
+?�
��=2�7"�
�iH�o�K&�J��b����
++�b����ʁwQ	?RAX����?[V=�_��r��w�m_�nK��9�Է5%���o���o�r�Y���<�-2�gO�٩�g�
�RV/�K[�y��7vH�>�_����7�y��h�;��Q�N�=�2ޘ�DZ��y�q�%p[\�t���I��ɾ�<�0F0o�y^r
?�㼛�#a�o�n�.qqy��܏B,ϱs��]��qNT�cH�_�=��K��%��a���;�y�I1V7s��8����/�<1v&y�&��x>��5wΆ�w�3����i��H�{�����'�s��k��W�:K�
���|
�����
2_{�a�	{���%�(~X
+>��2Iv������������,G��
|��()�~��n�W�(��}��9<��,t�:�*����gң�
|;&~y$�
�z�Q��\�{6��#���)��
�*
�Gr8Ѿ��
+~�'|�l��tz$u�$�-�
4@��_��#��$P���4��~���m�p���}�
+'9�����w�
+	>?P��ս���Zq�jе�
���J����`�������sE%�(0�?
�w
+�&�޴�i�ؠ�iY�
zxL�������
mqD����MӘ�������R)�r�oU�
X�2/+��V90�r޿̊���U)����Y�n�F����61a�c�v'BK�61ww�����7��Q�u�I
y(\�����Ʃ� �9qupNe��o�1�O-��'�����cX�6�k�H/xA$�$���k%��t��i�
)����V����c�:t�O}����G�6~“u/�͒�2>�^��Y�?��g2�I�5���{/�$�\��xeȆ�^���D~Ws�뾶�f:fbI/�g�#�+�H*Xa����i�T�����(W��'>q�M����,�ř{l�{�+ ~Ey�ǿ�d�׃���/��o��\��b�%[p�x�Ҹ g���B:����;I��a}��B~"�+�Ր��iL���
�\ͤ����
�d������{|跄�7D�C��'�*	��Hz��/����U%~�r��j�m�=�$������|؂߷�&�g��2<��xb���?%V������wGK�I� [...]
+*��9�����* I�:1�
|҂��7�/Ⱥ�|9�4����x����@��Ʋ��~��Z�~fy��I�S�a�
�:��!6=����zi���'
׾�i?����^~�4vp�V��_9�,΢o�1�c�e
�c��
�����~�����p���ǹ�r���Wy�y�d�r��Sl�_�俰>=?l�G,/ݓ����OM�;0υ�{xB�/�X��S1�/
�BY�w�bN�βc�Yů�_l!?
�m���=n^��_����
r=��:886pDc������f��*�udGK޷�+7�d��|��'ʵM}��~e��]���	�(H^��!���WN¤b
�7�G*����2O�5��~+�vC�s�徕���2�������:�8�d�݄#�����I6֤�*LI�؏�I�X��-����&*x�x�L��
+S��y
ac
኏��8�|q�_�QGL����m��6�A��"N6�\�����y��[?�E�%����/���Cn��.*��o��
�<C��=�^��o�Ԡ֟:
�{͜{�{:��1Y�<rۮ핷|�����
X�߭����+�NS~"
C).� �~I�I<�x��t�rͦ�c��(�]�ί^�3j�[�՜��QI���7sT�B�Ѣ
+��W��+�sQ�F�R��
+W,��
+�b
iQX
�������6��ߏ�cQ�S.�U��]�q�oy�����������TNd5�5*�O]���y�O�xF(
���/]���a�L��!=f�
+��,����f��/� y�M{i���Q�{�Yu�ɩV+��3��u�;�}��_�ݱs�'��!��%� ��5H,
4��o�%�C�.�4
��>E���W����(��B
�wR��ԥ�{�(�t�	�v��J�["lb��=�H��#�B�(��rQ�
+U�h:��X���?�E3��� o��w��X�I�kI���;^(R"R�(����M��;�*����T��U���j5s������X�
+endstream
+endobj
+1787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.939 544.286 345.152 555.134]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.1) >>
+>> endobj
+1789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.938 132.884 436.151 143.733]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.2) >>
+>> endobj
+1794 0 obj <<
+/D [1792 0 R /XYZ 86.4 726.045 null]
+>> endobj
+651 0 obj <<
+/D [1792 0 R /XYZ 141.991 204.57 null]
+>> endobj
+1791 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F14 697 0 R /F49 646 0 R /F16 461 0 R >>
+/XObject << /Im8 1788 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>> endobj
+1798 0 obj <<
+/Length 1163      
+/Filter /FlateDecode
+>>
+stream
+xڵV�n�8}�W�e�A4o�� ��c;�n�4���@[�-�DuI%���~��d�q6�C�I�
��
�
+;wv���{�3&
���™��H �T"��3_:_]©�S�����\�&����Y��+�Q7�|�.��'��%vs�Wu��q��\�p��,`@�E�ܔ��}��7��~�D�
�zPą��z_�cg	;
����c�9�IDa�:�ާ
n2i�h,"�a��~�0�G��w�fS�L���b�IgT��OG辁�;��ɨC$a�tX �o�<Sw:w�1�=�|�w���;����zm��qم#�
�R@�R�ְ�bٚ��Ƅt��(�Z�j�/U�V�X<@��fq���-��L�{�D�p��v�F
q�
M��!�].�qv�&���u>Q��x��0��J{�t�ҥ���*��
+Ni�E���a�*�������E�Z؛�b
+�/�
���i�B��,�]�$Uy��*�������~��������L���B��O�����^ ܸT�mڬTI]�ue�
T�ֹ�t�����eu���`'�����Y`�Mi
sw�nd�*Ҵ��>����Ԏn�U�enp��*ޤu+��&
��t����A�@B��O‘���h�. �����bp>�1����鏫����˟�u�%�l���i+��V�9��0~@h`}����
.����
{0��e�~Ҋ�-.�W�)��6M�&�W��H��lo�E�5��Hh
BBw��O�2 �� �o�

��^�+;��|����T�
#��Vȫ�6��
����:��TU�
�����H����l%�����
+Ltﳧ�]
��q�,��Z5��M��;��+�T5Q�ë5�[-�om�75�̝�
s`>:���B3A%�Z�k�o������
+L@�F�Iϫ�E��4.�C�����ж�j�v�(ml���
�7
�6���mU'Yc�;����I��<���=t�MU���P�Gܭ-
t�'������T���d::�� �!Jx�1�����,��_�w��e�	
TH��}p}�q4~���
��N2����m��c�
��5c��Su[������F
R8�J8�}���Kd��#�|1�Z�W(�"�]�!8o~~�/��
|
?w��M�1�@I<��7c
M�.��=c���؎��{H���g�
5
+endstream
+endobj
+1797 0 obj <<
+/Type /Page
+/Contents 1798 0 R
+/Resources 1796 0 R
+/MediaBox [0 0 612 792]
+/Parent 1795 0 R
+>> endobj
+1790 0 obj <<
+/Type /XObject
+/Subtype /Image
+/Width 953
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Length 105528
+/Filter /FlateDecode
+/DecodeParms << /Colors 3 /Columns 953 /BitsPerComponent 8 /Predictor 10 >>
+>>
+stream
+x^�]	�N������y
�W��H�L��^)Q����h�ޣx��JD�"%/!
$M^H%�L�R�
2�����o������w�N��|���ڿ��9����k%��2�M8�?��"�'�%1��	5rAdt4�E��N����h����wyw��-?bO����ؓ<]�F�접e�N�3us�\"3!�D�
�$مDA��ޯ�^��dp
+�':Q��.w�Z�beKTLL)�P�Db�����cwŸ��)[�h�����7����Q��2ĕ,C$5�Cmx�ɲhgE�o�#�䠱k�w!�s�ੀ����!w
W'�M����yÆ7� d��
`Yv9 Ѓ�D��29�G���t����A|�k�̨�ON�3O�
~:��F=I^7Ĩus�����6
�JqW��θd�]���xn�
��`�������6��Lpݓ-Y>7k�{�h����]
���-xNqV���?3��+�)�������K9{��5���'eN~��c^�A����ڶ������_?n��#�ҫ7O,U%�x�Ĕv#2�MZ���᏷i{��-�~��>�����y��Qq�2����TX�?���S	ᮋ݃jY/��
$�ڌ-��
4ݞY�,!�I�-J��UԵ��A𓺃?�1�+�t��f(�D9���L�Q�
Q��8$d�_�D"���Z$3&J)���N�lZ
+�UUE��Q�:)����*�+Ŏ��b���R�8�D���b��@���"۰��!����d��6�%�Ǥ�w��E���Z�N-Ool��!*9U�]
��=v
V~�������)Ӛ���!5��%�a,nj������%F�
�U=��w��u/1*G����Ex
CB]�Na
7=����.�BA�8θ�d� �okX�ݸ��yV;|*�[�T�K
c_P7mFU�(�괿0u�~e�yF�ⶋ�&ƥB�����4n��Ͱ�G�q[}�ú+��!)�~щ����r����2
�Q��z|�|��P4![�0GsI�o�E$�Q
�R�g�Oρ�R_�ʑ�j���E�萨%�d7-ÑuHu��O

v��������г�Z/
(���u��q�������>UjD?��Ϊ<Uʗz��W�������|k�7=���s+���J�R�F=ru�}�-���/��g&r�_����4J
�bO���
����Nl�C��t<3�d�3�
l��7?_�S�sNY�ѼaC��yEB�*I�H��
��M�:�~�#����t"
թ=�8���?�bD��YkBr�Ĕ䤢E�\�εh�bE��M2�D�gQT�P׫�!�hr"V�dQ
b�-B
ڃ�Œ���X{��PU�%�C�Xi#���I?Q�H�b�XI��)%ȝE�QX��T��(�>*Q�Y����L�Q�(���
+�=tH�E ����T��.�H*.��n�
(P<ŔB1�_T�~(���Є����<
+��8TD�Ջ�F�
:;�(���L'7I�E�����@
����h���P�>3$[�)��A����uc�"!�;�#�^C�P��*�
�]�Qȳ�����
��CCוd��d�v�y�{��^���5���RIc�n����O����[ꓼǩLu�
u�N�:��Q��:��3p���sل�`q`��z
�
��|���P��O����l������M϶��3�
;t���I�U1 ����<wVY��x8O�(d��ε\�{�m������.�8�Iȝ!�p�i�7*����xiڹx��Ӻ+���q
���yb�5��u���wYX��bd�ы4!ѓF\5����_)A
U�z�$�>���!:,v[F.qH��MZ=�d+��#4!ÁT�
+
;��S����,�?���gl�2JϘ�0�����������C�Hs�f:���d<�UuO���t����	�
�|�ǰ
?v,#�X�1l��y�τci����2��2ӱ�����)�z��]G�0*B���	�B�X3�D�h�g�O�$��=��|[�&�
6"��Ԅ?v%e
��m��~��]��d�xy1�rة�ab� lj��E������E%K�+*�WrJ
+ؘ [�j1K��,:H�PSCY^�E�:%�=���!�I����ޣ��H)�!��R�2�>
+��)���A2H��3�z'���.�N���vI*.�'��<U<U�NjQ(F�U1T��$�h�)E�|Ape!Jh%�.�#
+H��}K�$� 	N)*���(�� 6Jbg1QR���mA���,&��/
+��*��b�X�pɡ�D7���
+pҋ$�eI��^�P��e#/#}�K�,y�P7��8�.5�@�Ȱyە7,'��7���Ab��� �Dľ�'Lp#���g��#yS�
��TK��:0(�x�H���T^QZ�X荙N�bj�����Ҭ���˪�$("��@ŵ:J��N?����Y=a�b�ZF�?Z���r6' ����� �B_��ذ^����5�w�+u\���Q="Y��?���$}ǂ�@�q
؟���a>`�%bLVvR��c�Z����B7s�.�$Xm
�
�EL�`��⹊F�
bM�,�l��C�U>��qdh�|j�W���Nɘ�~]��
��q�>���GsoAseK�@Ti�>��%���;��\�S>�L�L�
��A�A�!)zA��eY��q�Mj�0fv�ٺ={� I� NÚ�����XZ������W
���X���(J��s=.��>$�EE�_���|j�:(ufF�
����ls�ueJ�<�[b�)����O�:-�{8�>C�JS��Z|�H=(��48[;e���i���

+����U8�4���`
֙S�C�h�=�70ٸ��5d���ƛ�N(vѵk��I�5a}u�RԮy1Л]�f-9f麖[��
Vm��z�=4�ۼ�e?f!TZx�6ݽp�Ӛ~<�޼�|�͠����OO�bX�^���@
*є4��)��b��-�
K1����c�t}vr
��1�
We��A��h*�vgƮ^"�B\�p�_�*��ձ�)Q]5���-U��B>��t�W�ɊB#�6�o�
��m�����1�\ܧ(�
+E�E����B��6
՜�%���}Q'�:��v�Q 
+6����
+�UR�_�#��(��{D��3���Н�|&�N�Y+T�w!���lף�1��E�$��R=�+E�OU,
��P�S!n3�O���'�=b���}sP/x�
�+C�X�����?l���A;��1K��K:�E]�Q�I�PT�!I�hZY'�9%����ч�����+�����c�~����]�fDxz�2���JM}yJ�>�m�y�Yտ�d��5k=�X��]ذ�_�R�Y;��/�x��m{?���X�� ���aȝ���;�Y��>�t�_��xNusO
��,G
�q<��X��
z��ߒ����C��{���6��jK�ٴl�S��U���|��_n�)��
+t��N�'͇D��1#�2a
�\��S1���Ii�@<M<�KR�O�����r�KӺc����c���&������ڕ�J���ɠw:KA�zUc���
G�G$ݜ� �Wb,�e%Z��Z��1D�:G��B�ꖩ�*����㶮Y;���5:3]�K���.�16�O��!~
�?�s�K %1��
[�BW8i֫oCE&�@�ʕrl�x�=���tsQ���`�s��B���@�~��7L�%�Y��Kdt�ͪ>��z`iu�QL�S]�j�Ȼ��%�E���3ƞ��
�t�4h���{$dA^V�D�Ͷl�f���G��S��M�G�6hm޽�6I�+� ����w?9����j(�q밺���� �a����
<�{�w���Bu��
+�/B����ƕ�1a�K,�馍@�m�gM%A68+)��XTU�!ri�N*#�+��V��e0f���uc�զ��$0ơU[ʎ �T�{�am#��S����u'���(
��]ɕ_{e����U�&�n�xF(�^O�j�z�2���҃���G剠��i�ƾ�Ƥ���ͷ�ս �V�R��������Y. ����?Ęo�SM������n›�R&��=��פsN�Վ���	>#
�h�s�����3>�\������͚��w�r%B��:I�)��
@x_���(�/�j�+�`��<�?��4P�
�C~�������w��U.
+�_���0Œ��S!]�����@��K~��+�)7
����=��(�	�!�[�	g	�J�� V҇�ɽA�W`U
E���t� w
ru>�%-�
+�>Q����*��))K��ńE�d�+�'��L�Rr����b�8���v)QP&+�1��VSJǞ��п(��������
g
�����(���<��G�~�*g ��5�P�l��u]�G,�q�
/v��~\��
ҍ�
��`�ii!-�ދ��G��'	��{H�^0l�0�T��i��,'�X��
)�YD�9!���{��G�9���z�
���wC��o�Q�ɍ2n�]����Fw�M�G��J6/�R'Ρ�dDk���#b��x:�F�y�za Ic������9�
�4�#�kl)��l�@��l߲!4���%&�O���:NC�qb�
۝&����挣��G���'Y��@�\�M��O�< �&�� ]2J�2-�Z�(@F+�'B,��,
��.��,ǜ1d�!q��,����
��ES
+�\2�$3�9򞖊)Ó�?)/�$V��k������v��G�q��G�q�X��W��?��*��*V�#�
��؟ii1QT��(�-��a�$�Ҏ
����k�
:�v����
:@�?��q�\��.צ���"S�������<���tȱd�	�R�r=����i�
��T(�=����]��۟�8���#�1��Æ�T���p���yi6�c5����U>���ܵ�r�U3�Ԥ����%VM\S����--(,y0[�������9�ƌ7"ْ[�[p\(`z-kf,��EaA����}�Y�@[�^9m�z֝�j���
�\��y''
�
�-_dI��&ge�y��:��W&7e�,I�d���
�U�j�g��!:_rj��(�,G^���Dt�
SD��+��^��
!F� ��ۥy�O��\�и�9�1���z�ۯg����(���E���팧:���"�#���j
�OI���h�d�琾ʰ!9q째�X�D

r�Vv���?V��rk�+��1�	n,��l(�ӂk�������[� ��˧�4��k�ƌcVa��Q#O�*��m���0ʧF�z�E�jh�ߘ�t��[����Ǎ!�䡘�SĎE���QMP�J�bz�9��D�^�0}��6�/�K�f�������{M�?�
+7b"�R��.*��c�*Ų�݃\���d��Iz��z��"�f
��Y>�-�z$��`
�����WKVe�g[����dBB���
KO+8n:V���c�0��y�yT:��� L M����8]H��>�௎U��0��Ś�|�^���4
qǥ����gzڟb[N�*���^[�x�
+EM�L
a��(�@?�n�"���X����\|%�Z�ƶ��&~�_:�Y
��~0�/y�,p���c/��]�� H���m���	ہ��`	2
+�[����
����AE���r���W��E^"1��ώ���6��X���+�z��b����i�_K�W��c�2Z
+(5-i;s�O��X�KH�[GuC�
ԥ�
N�Q>v

�3�
�8�Ś��_y���sF&~�+��wu�c�Im��o���LU����*�!{He�q=�m���B�� z�k�<0�*;�KCƾ�E
pG
���5M:��_�u)�/��Kl��=b�!��ú����0�F���e\*z
�n>����?�%�<��x�O at Yo
�kY�Vzb����_Ķ|��n
����e,��?�{}���%�Z
�&:�
ѕm1
�4
��y�\��j�&�%�x��Qz��@���
D�N����՝\��؍��:

�j,��ڴ �d���c�zb-�)��.6�l���/jˀR]�Y�.�*,ozR�͏Y>����zP�W��&��)���Bq�P�%MY�,��Gd����=��׽ǝƏ���;�
= �ӎ�}v�ꋭ�ԵV�JS_y��~�ܸC�R��}��ԗ'?�����~M�;���{�5�WZ�h�k�
�m�B�YZ' �j��2y-�_+��m*����V
8NMS����r
+�T!�
���G93��1##I�cT���ß�����@�{�7�Y���+�&����צ�x�m�q�x/�⿉��
���!��O!�,פ"�,n�֭ǓrP�{��WI�፳�e��n�����/����^}�M��?}��
_\�ؖ�27�rC�̱�{������z,�J]��+O�����}V����xm[�sĉڷ��
f���F�U���z(s�;���k�[�@�ߗ?�����&l�u�#�
}��;̝��
�N�t�.x� ԉ��=�=�ۗ�3��u��8����$(Jm0����O���ͻ�y��:�L�:6OKE�-r�:#������/}!�\?��Kk�����b�����&|�-��˼�c_����gέ`�Uu��o�%a��Vg�'�1y*!&�
�
f,f�
��OI���iF�i!�
[/b�5���Uiݽ��b'���3���QW�#�
�6�Lڃ\X��8��?��l(�"��:w�F�dW+
J��[5O�T1kp�
�����g��L F��x@�����&~R
��&��
�|�tR+ [...]
+nܹ��<����G��W�b����K
+��d&U�}Dq�FL{'c�>��JjV�87I�3f%_~���w0fC=��������Q�z����*�����E+7�[��Z�����0�K�/U���Y�����3fL�6���s��1�B�=_>a�p��Vjp�m�Zc�K(m(sa���x̀'7N�"���؇��M[$�3ྌ��͂:�b>|Z�u%N���������Z=�[1�+��K��	I�]FH�t�͜�p�U�
�Ԥ���\�o���JfB��6kڨY�F]x���}V�5N�v�e˕-^�D�"�i
+�i;g��Ӓ�~��
O�m�淾�����>]���	����H`�����[U�1`D��Y:��??���XW�3�G�����P����5����
�����	�`��]jZ!������ejO�����Y�����"�7b_c�uۖ����%~����p�HZ�D�́
_���{�`%	T^v?tZl�n����-ʨِʉŪ�%Խ�?�N��.]�$�
4QR�2�q���:�Y��_J�8|�7��3�o���}'�B�ыV�1�g����Џ^o�DA~�=���ɋ�P~�(D�����r��@���A�Z��+O���y7�]��F֕#�W*�~��2t�ɳJWm�Պ��-U���Z���XՀ{�ق���罅?>���8���
3���{�7�2q�f���s��]5/YiE����\qh誓���$�
*�#u�X�3�6L�4*u=�N
�1�0ѵ
H�I
,�&~�-]ɔ��W�'��E�<5�m(�{c���
u��}7w��u
cл��Ȼ��2vjm!���zR�
��v_{��
j\G
2�g�Z�ڈ��ܝ����y������BO��l���&���RXߴ3i
��*f��!���J��S��"���c�9�O
+
G�
�1C�qH�<$� �SϲE�/Y>�d�*ʛ:�4����r$��F��E1�3��BN�1�7ЮU�<6ē<���u�e�p���89���������K�q��(��7`M?�O8K��+�B�c0~	'u
+b�����
�
6~��sPdZ���j ��
�ԁn�W�^��
�..u:��s����`{��]�����-��y�`8���
��
����Ok���-Z4K�&M7i"��5�R�|�?�+�"��ꃧ��m�	�����%Ui�����-�yo%�,����|�ݔ./o�vc�s����C����Kwƞ������>��냿���}Rm$�=ڻ{M�7�%�Ή��x�EU���<b
�
:E�G�}W^P�+)��B�
��IF��	t���{:]�y
+�*%�KA��� D)A�W3���?���so��j∁�ʉ�괙�͸�uT�ۄ���|{Ⱥ�
\5�]
mٖ�1�Ή&A`9"݈8����›X�]�Y�r��QI�T'�I7}��b�����ʨ�Y�F�hu3��=��B�5��pt��������~:ɪg����(������u'��
��)���h���������֕���h�2Ө!�jĈ�D����'����7v�ʂ��"���}���Ԡ���q��Nz���.b��<n
q7��
+
���e������ݫ��J�
Hqm9p�{�S��4{�#Uw����pi+Ei��g_�8���vr^%�w{]ou��
W�
Wct��
LWCD%%D�a�<4
�	k<&�0Ws`d���Xi䥍�R�)OO
+JB��~��V@�E��p�j�:��ң�\�)��"��V���'��`�����,U1ȷre6�+[n٤\5
���
v,�E�W�J�+���<3�u ��%�
\�̀&��a,N��@HLO�
"� N$��gF
p��C�� dJn(-(d2!_]�*�+YvA=K��xֺ����KUG[$���#�؏�faeLJ��
>��I�j�z �._�2
`� ����P�;���������C{��ù:p�,K?e�<���˟|dЧ��d�=	xz:Z0'��vذ+���.)�FTP���*gu�v����(�-4q�wo�`˳j_�s�[�~�•9B)�*����
w��VA����
H}�AK�'%�O}��AS�:��Ͼ����q�gc[�ݩ�ٝ[N�aϒ箻sY‡O]wέolL����V�܆��s�
�
��B��.2C=I6~���ۨG\~���CW<��=�Z��w6%$����z�W���
?o��t�yw�=��'>?$
҉߿v�����7�ᗯ�����
W��nL��m�����ᰉ7|qߚ���|���Љ
e�ɤ��>����bm��u��FfrAx������O�	��3�����[����|�jW$�Q̇��&�=�&ˀ�Y)f���y�&�*�%�X��@,Yݡ�
�
S�%v����U8vG�(Q�����g�Y@�䭶WW\��D�"I�+�x�ѭ�:�t���'}ܑgV}C��%h
��B���ҵ�ǒ<�u�uj
�{���3ٖ�<D9	^�שo� � �Q|b�XO}[+�Zt�դ�R�dc��5Z��}������ZcC=g�~5<�a�s:�_��:Ή*+��H��� �~T�[�z:wW�g%|�
Km��Z���F���Rb�7g��Z�,�!z$8貨b}�$�,3�*Q���@
%K�LD"y���[��>�MA���yD�U�T���b̨��`B�%&�LS�� ex�
��GHy1ʎ�D����_T�rs�?q'����7
��
+W��@EQW��bK,�Y|#{�~���6�

+`�?���eu<92��
���$�LI*��P<%Q�H*Q,�D���%��LL)����%�'�DqZח�6�����#F��s'��O��Q���%��LH)�T�dB���BN�$P,���.ZOAN5���:|�2�X����ܱ}���C��Î�~��_~���_ڱc��l޼���G��`���ʅ�/{,�g��g����>�-�T$U��'�J�
�\�w�JIv�E=S-�LO[�&��g���٤nBb�

�p�&��n�.G¹׭x��k�oz���e�1g����M�.{'5u�<�	r�;�C������2�w�Y��{��k��e�-u*]�o��YX�Mi���e[��g��ȱ3`<�N�7�ᰅ߾��f�]���zqm�76L�5���^�-1s��/��T������}ꪄղ5z����>O�Y��`�)��p�9��|�I������x��Y�-��n=����:�c���  :Q	�o|�/�;������ޥ3��oSV
���c#�-~l��t�����2Dͩ��5*ߴ5Z���)
+�#5�I�iN�9��q�s������3y�����?:��vɈ=adO����0�����tl��G��d\pķ��Q��Ё���gtE�
�Ћ�
r҈ ��+�%��ŭU�kq<�7��q��
'40϶�[�cX8٢S��ԓ.
+��լ쒡�X���E��(v8��
�G�i�EA�j�y��̮��1s<�m9��yP�Ⱥ�~
ƨ���\P���� ��.��"��b793Ů*�y�'�gX;ڴ�SOit���{��
+9Φ=`��Fl|�����K�YN��#���tɐF�M�)���*�BD�Uyyщš1�b�QU�r�Q�
˲��L:(-ɹ��icVOBE����a�"o@��1K�?��{�(5)H��k��Bf2<e���[�HQ�Ȫ�\�B߇��E�TH���E�`E]H���D�fD����5�h�*�
���R]ds��L)��!�d�䒥�����J*^�H��	��cM,]���(�P
+kIZ�g���a����
{���V��,���X�xbɒEdI%b�&-��	k,w��].�ѫ�?b9���������m���~���O?c���]G�D����ci���2�
G�B^f�F�o�������%�&h�[��۵{<��C��t��V�o���.8��ye~�������k6
�e����_�t��}u����G�^S�����z�<
+
+=�x�g��<]���	���7��_��н�������蚨�k��snmyέ�ݙJ/v�I��HV�'h|�I�<��˓�
�L�Q������WHȬX��K������9�.}�qM�N�ƽo2%j�
��
+�KZ�岉
_ziÞ���y��Ы�w���6��
k�Ɖ����ϝ=�z1�����K��;/ڹ��KHXwh�ٚē���cH��[�}��#V���$rCu8Q����(%�jp��r��c*[�f�ƕ@z9vX¼
m�ɧ��1 \[�X�I���&��I��`�S�:��]؁�We�Һ��4ǚ9BVfzК�B�
+��Y����h�LՈb���dXw�S'�/v}m�@�!����0V�������
���	���!��
+��C�ݾ$-���h
��=P'���P�X,
5m"FkM�� x
�x�L*�	��F}Y��Y�bg�zh୏sp(n�ʾ���l��s�>�B�Ǫ����Տŋ
+���k������#ʖ�E?;b��16f|�
��;8>
��\�e�c�b�H�l�j��|�83��1�
I�u�:��b��K]HE�Ġʰ-��~��,R4�Hbf�b�S��Xkє�E��ٍ+]x�X]���\�4j[�"�6j[ᜦ(&VY��
�+,�I�����\D�䔊5/���js�K��i=M��j^@��.��ħ$!�E��ɥJ'�kѲ��˕�Z�L����`-W.�LY�I*+�d�^Q��wЊm��}O���e�T/W6����\�\R�2E �\�UD6�R�|R��H�yI;�ʚm�(���%K�B�&M����W^��ƌ�K�,U�d��%J+^"�X�#ҮL�F{���'#���^����4��M�`I�$�=���-�ߚ]>���%_�HQ��x����7c3[Րq%�|ef~�rDfˆ�١ə
�
�Lx���j���d���fff���|��W^�t�`�VE/b2��#����iq�a�����
+�߿�rT�K?�n���Y�LbF���딮%u�m��Z���m�ynomT>L��/��.
�]�.6�1- 3�N�^	���b���
��h)B���6k�`��/x骦gU�b$
X��3S
���7c�[ث�%��̔?�&e���}�W�����ח?��'�('�
�/]օK�>�.O�(j&�뛞I�5���J�7~=dr����o��TJ��h�"]D�4�&
��H�N��.n{�8��E-
����0	n���W^�
u���:n*к�p�)����
���k��%����Zl�X�,I����
��k�أ(���o{ꇝO�j�RX���b�����&���ƅ�c���o��F�="l��{�{tB�	�Qn�
�77���V�5G�
+7!8:Is�g뵳{�袊����A�?����:h�7��������J�Sg��'�
��s������?�-QbF�,���{������z|�6ٌc6f"%� d���"�T�la�A�
Ӳ���L"t�ԌY��Oy:F�ƌF��ɲ�����'�i�L]%R�6�9i1P|#!�X��)E2˗)Y�x���Ċ����"7Ă�u�8��
�5VY��Z�/A���Y
�OZ�LK�lE�e�|ʀj'-��R�X��XSʕO�Z�\J�h�F�rE��4�+[��8�T�<6��ɲ�cM��Z2UEe�%*��QA+D����ƕ婗�-k����~�!��͝����n���u
w�ڵ{��={��۷���}���hP*HO�ͯ��Ʒ4�}�x�5�ff�y���O�ں��况c3�l\W�	Y{�U�K�k?e
�/}�Rղan�k^��^-��/�_�����6(C���k��+��
�՛��Yz��_�O�������	�O)k}��P�#BS��i��^ݎW������/�o�S�PD�>�sϺ�f��+�/ ߥN'�,_�W�l�U�z5L?^��f��{~x�Y�7�-�x̋/�#���dDkԐ�UPXmgf��� ��{Vl���]�<~�;���ݤk��K'6����΍�m��l*�e(
+yYV�ݩ��)�����v9z[�۱ �g�S����.�B6*O�uϭ}���ѣ�؟�P���������U�t�!�p��V�f"C�b/"�5l��-O�=�S��L��?��n:��hY=�ddM/�i{���c�>���D����U���?���[=�����:b����̓�mxr%�Q�6	�4��1�O�`��k)j��)4�<�X����s��T��n�2uðT�a����� <��x3,o$��W^+�o
�kNe��q�Wu����A%�7
�Qk��Xg��!B���rt����
�����=���9sj���v�J�Y�c*7�X/�4�=;����}�rލ���M3ۘ	���(��zފXu�B��4~)+,]'�#�W\�
]�W�cN�IQ^c�LM�c�
Ic�\=�t
jP�B�Ǻf��Yc�$?
r��657cV�d-J�jo'fE�)��t�&�������e�KH�u��3�>���>:��*�-QR�_c������E�G�pc&΋���d�>�-�
SŒ

���
��R
kMyݒRRRJ�-Z�lJ���˔N)]&�l�beˤ�=Xa���˔-ó�
+	�Q��j�u�-
Cu!rʖ).+_��)�+��`���od
:c�S.�>�`2:�������k�?�
�f)�Mc
�R��������
+���6V���:�O#y�s�{ԔNh����'���[������=�>���+>�pQ%:�k��&��bEϚ�|�
2R�\�}@ᙿ�Y��X!�G�AS�K��Ǚ�D"b3��-s�򞙳j=$ːϦv��X�'D�넄�_yI�i�=��.{���'=�:q��߿���U��G�w��
�OYvI�˲͞����U����ڏ>��p���:'|t�u�[�n���m��&��N���C|�7���V�b��i��%d���N/>���+��}�SR����|��
+���D�eW}ڳq��l�zէ=.�����l_���ƕ��|��C��
���3	ϯ���55;ŕ����U
��״�u*����+���¿]�8 �>��s�s__R3!q����n�O�[a��g������~ҭў�;���Kj���4]���QU��㙑�(�M��qw�JY�Z���)�����&�� ��0)�� [��˒�*_?U�n�d��Ƶθل��^ObY��K܆.S )�a	�2Ȋ��
9n�.�z�Lݕ(�� �C�C��7M0��([��/9��Bc�ʨ��+�~ɣ�J��zC��Y��z*�q

+"���$|����H�QI��\�z�MH�ur�3�xqՃ���˭,b{)���N����6�e�X
G^�'�
��Vԧb�;X�iu��Q3$���_�Kڧ��e �����f�˕ܣ��Q�b=2�˼��
�1�Z�]���=
��;��2C����1b���
�z at P1K9��G{�x!W*L?i
+=��b�݁�h���	5O-����9�^��o�P�©����w�M�~���WR�ɓ&=3|����s�<�wK�!���>����k�n�0����~&�.�"[��d��B��<(�1�vt�8"J;������hڷ[�x��~/��}��v�D$�۾A�:"I�m�����l�l>l�����C�^���ː�6f����(�ӎ�O;�/�{�
,^�\Y�i��O�p�
)4�XC���ʆ����N`�<� ��W���Rv�s��������mjћ�)/��Q�)�~�I�''���2z
TU$?�.z]�����u���ְe��v����"ۈ�[�k$%]7��Eq��L.-ܔd$�LA��}�+[Y�Y�e*A.��������
�>D�k�}T�/Z��3� ��6�j�I�I@n�=�v
t�
	�������
,d�͇�1PL= T���
?E�bזv�#�
in]_1�L�θ��A︙��0`
ǣ
�8D��י��Wx=����]����Q�
%�U2Msts߳\1�.S�8�*ڕ��R3nL�-�~��$�[~��	e�~�م��#�
�>�
�s���D�o�.�$�Tl̓.��1����<��
��(�JW�b�j�E�cŔZ4��jN�eq`Soq\��3fŽe�v�,Y�Ř�6S��
+�l�k�ݤ��щ	�W*ٲNթ��m�ná��S}5��B�uà�◥�$��"1�dQ=����5l b�Z{��VPc���h�!�jB=ݢCZ^l�(�$\l�򘕷����HO[i��?(V�Tɳ��o9�
;�������!��ٸ��[������u�
2A��np�`��0)!�����_�
:��ɘ�cɒ.���t��~�(���f1����H�<��}3�3����r�ǰ��@S?��N��T+��R
�he�|�3�*Z�M�Jg�������	R��m��
X��QO\p��]���c8�of�� �p���oV��#�Ś��i�2��Z�}��"�)�aۢf����vQzd��CH� �~;�]��7A�$@{�T(ષ�:i��vt��Z�K�
��T��O�u���B"MC�D�K���Okt�]L]L��A]��"�L��uoW;��F�<V�_� �r��@��L�8�	*�},������yqe-��@8i���؁'�~��˗4�J�;�?�
��O݀�(�tQ���ع��	��B\
s��gvY�UE�s
�Y?#Ty��/D[���z�(�,�i'�t�G�br��٘in��3:����ŀ5�V|_��	�b�Y(���j��S�r��^�6��h�;
�
 [...]
+x��[B�8�y`�\I��O0���S%�QY}P���f��~w0�#׺�e���6IbM�ŀ��ưH)"K�$�fQr "@H�V�(�_b,�t�_��Y�զcb
���	.����)�e-KՄ�u��c��_�LuvyMU�����
+�
!�mP�,��%��tYd��{]�
�H$�
���`�dT��7�!�v���y��e�ծ7]6�W�,�]��vri�?���8��yq�!�wL��G {��Z�;�w#n�}�9HL�Y�Αp��_��9��9�W�:��D�صf]���]�$A
k9<b2e)=\|����G����g�J�O�OA���'��<�
+��g��2\鐞�Ǐ�|k�z϶/�
1�|��!�����g���q4�ӻZ �
X��)��.�b������y�b��GK�c �d�6Ws�a���a"�zQ��b�� ��Z^Ƭ(�UR�7X�I>yb��$IU�S6!�he�cOm$��H;�������@B�V�c��
A]��46+K�2B
�"��_���C
�qӭQ�=�
+Su%� �D�
���vbMLp���R�K\���`M
�
��l�:h�%����̕=�4.�7!��BQayn(=2�QY�U��]v��y��$4�4z+j���U�a`����@;I4E�%ƌ�!Ժ3j�,Y���+[�POtIܥ��ז]u�����:���y�Q]
��t�'�����w�� ���*��B�`,#Q
+N�
�ďEV\YLyD�&(�2���
6̋���qh�LF{��o
�:���}��n�&
ꨋ+�
�,!խ�����u�
��]D�"�S� @�cEl58�B��1|c=$�q��uIק���U��R���7|x��p���1z��D�
��W��j�AC�PҬo����!�3�QA�qu���]E� �ߚMH�/:�t$�iYU�lp9έ�ֶ�
.���]?l}��/{5`<Ƃ^�����y� ��B���,v�lW�ɤbTX^���;��+�
H��\��C����)R\��Eh�Z����JMӍ�i�[��ʋ�U��4?VҼ�݉9V�r���d2�疑]-
T���~�PĝN�'瘝]
M7]�F�E�B�
+&c�B�5���CikS:��ǚ��Iͩs������u
��MG?�h�q2�X�,���2�$Ӳ��U�X_1��~�i�llP�I(��zU�%i�ai?QL}K�ۖ
���Jdc�Ec�V_!G�߄ܖUI�BfT�'�Ď	��rL���]� jWw�b����n8��@Bݤ# �g���1 ��C�"Ӳ�
+)ذ�1
Ҍ�0-�m�ް
+Ĉ2���P���x%%]m7��
+1k Z]s��L��`��7a�
r� ی��POj�ό����uO��
����N at C�CR��������U��n�r����c��:l�cr����e1�i�6��V��ˆ���H��&��}���i�E��Bԓ�[N�M���(n�`��V��Qcx{�|��
�"*T�Q�a+����ݺф7�Ej�������9���p�Q"/���Hs�'�}ٸo%Φ��8�7ߏ�O�O	�v`�+�H=q�V��
>-��{A��]�
"��e��
+�D��۞}��{��8�l�J{E��
�4TTU=2d	�C;���C��(�����Յ�1�A���I^f1xC�bÖ@��1V�,�e����l<�e-��㌚t�n���V���`q���DVm(q��R�!ܯ9K�>;v�<�cd�3ǝ�
�0���`��ø"��lɗy>Ĺ�Y��
빩u�noR�ϻ�2A<��
|������{��;�z$
���I���%9V4���"i��GV12��,9�O.
+<�`q\YRV��6
+
;��,��GL��$65Xu�B��b��:���Iz1�
?,D��+��&-���X9(�w����{�m�ٲyi�,���
+�Q)e默C����گj]=��
Ct/
��nZ�-�i�1
w��F��:���jF+�O�jL܄]��M�����R]����4c��cu��kԚ�b#�.8�Q-��q���I��NSP��Pp����ff��9�:M1nM�D�ox{t�_�
3�ñ[�$�8�u��"
Q��
+Ur<s<7ts�ڰg�c;�J6V�i�V�5��ޢl&�P�\,����v5:"c(벼fm�
�Qb�E��1+��ɰ
�K^�4N����u��R�hH�f_�l�X�g�&��Y"F�8@̓h��!�]Ĝ

�
����WZ1����!��2�D�e�N&v۴EQH3f�.��O7�U�3A� 
}��'���J���f"�$ER#�ak������񱌃a����Y�D�OwY�/O�z#��rP���mrT��b=� s]s4I�

��EG� 5�E�
oL8��C��Mwqbæ��IG�a�Ы%P5�ᨊ�� ��du�{d��=�x*�+�-�

F�%�%�&Ub݊y6�}�=�f�����E�y����J�34�pΠ�J�l��__�l)m����>��.��}�#��bJ��ь+��xhH[hې
��
I�uS���
Z7�y�S�F�Ɍ��M@`}C����/O�s��f谾��%l�bc�bɂ�MZ_	1�/CSiە`;��O��
�k�.RuC.9k�
v�0ota����%wGN�W��6Zg�q߲��l{6Y5�t�m�	v��#�3pʝC㸆[00��ޘ휚�
?H}�o�!RI�ʻ��c��+�1�������kO_�c�iV
Q1E�"k����h�
�flޓ�Xu [...]
+i݈�ۘ.�ByH)&�������Jx�^o��-n)��.������PQS�4hV�=Ͼ���ǡ��c	�Lǐ�p&b�t2Ķ�>�>�\>�K��K�\|V�ctٺ(�˙���U���|=�C��l݈b HQ���I5�SD��W���!�
��]���g��w�ʍP��6�f��F�ƹ��O�R���jX�ƺB�#ր��c��1�1�;���7	���5~��?��Y5�+�B�e��!�~	R9&Կ��H4ie1H���Vc�\�-���o�6�l�ZEl7
+�^
�ztQ^ �ʁ��%%9�K~�{�����}��V�:�xK�� Ǯr��-�����8�%Nl��,�z��4}�v;�d�Dz����N�,o�1R,o�1�H�$
T����X��iR;͞c��|0d�@Ҋ�
q�x�T�;�O˃�G��G�eRR��x��^�w�)�����z1oJƓO<���Ș�t(��Y6mr�u���q7Q�M6D��d72�����5d
E��w^+�k�x�)�K�e
��j���
��!b�Tۢ��{�T"���g��G� 6H����Ct��hz�|�+�d��"��a(ެx�hH9c�uV�iQp�^H}鏅T�%�����r
P�Ƞn{mo,P�w�!�A�e��z=�Hj�A�C��O�k
�`�,�Y�%�5o.�	!�kPN�QK3k'$��:;��}{�f{�}��j�

`A���j;��x��-̭��G�[u��Dp��fw;՗4��eH�Ej]�4U�:J%
7��׀�
��@֢c���Q{��[��B����l����� [...]
],�+YIP�a����DzI,��X>3I�N�n��v�Q;��,+J_J�M�w�7Z���
�oA��
+
=<���ظ	~��n{��� �����%�Q7�L%�`
ٱ�162����$
��[���[
G!}k3Ԍ=G�Ej>Z��[�rOb18����
+!�T?��b��[�5o���H�
؂(��N�9����vb}{��
'������<�]�J5}���?�x�
+���ګ�b�6�qe�Y�V�G�(�e���%�W�����x�z?�}n,���Zk�qt\�1eBn>YQג7�����ϢNZP�G�W4
�G6㉭	��xo�� Ps���Y8>��)�*G尢aǣ���k�8�譺���
q̏E�
4Ԥq�n�tq�b��p۳�q/p>�̲B�}�ǎ
+{�ǣO��X�
3i�H�R��B!V^!�0CŬ��n︔�u�u\����u���ޗ���<�^w��[��G��8�@>��?�<��7?�Cq0���+�c�ի��'�{�b����u��x���l����-��P,'[�B���dC)����c]��r�kd�x�p
+���
�u��+i~3�;
Y~l����C�l!�
�Q3�幛��B�Q�Qa�`VEf�^�nz�����l�RYT%l�雋�xCa�J�p^�����\j/��
{�Ĕ��։�WTmb�^#��^���7_���mM��˕����[��v3Թ.#�0� #�0� #�_��]��S���W�k��+I.U�����ܺK���S��[�}t�-�䗾��� #�0� #�0�@vxq��N
�m�y���hR��q��h
q�%vv�⺌ #�0� #�0�@
@��_Rqe�d&�y�,�
+� #�0� #�0'=��b���+��)���q����0� #�0� #p�4s~���m�e�hSژ���>�A���F�`F�`F�p!`��m�ʬ��
+
+���#�+W��R��?�8�7"V̩b��
=
+��&r
+����
̲�Y��0Od[YP��0� #�0������V����6�ϴ+��r��ʕ��T=�\�����)Q���yηn�X�C4m�.�۽��
H���G��o�([��w�u���A�l��
+��,H�B�u��_w}ǿ�V��5������0
B�W��It
�3��%�|��;K����2���Vh߹ #�0� #��8�	��hd������Պ�`��^u�UU�V
˻�u3���G~ �hѢ9��-�o���
:��JOOgΜ[n�SMD�#--��ۺ��/�-��?�.^t��w
�#�UD!�b����dz\=��
3^
%W�ZI{B����	>
��sF�`F�(Hh�lٕ����g�oX��f+W�T�JZ�}�M�SN�̒��Zu_~��[�8��6���g�d��e�-��V�
+H�޽{�v�v��5���_7m�D�Z�RkrM�k���g`ָ����UŊ����{�֧�~�o��F�	
����иIS�;c�
����O�},-�3k�Y�&�2�6nڹs��C�Ԯ]��3o�����]��Y�Z��
ȟ}N�{�������?��nX����efd��‹͚_���N��O>9RINH at 7�\~$ ��o��0J�Q�|9��*�+�
O�O��|�����_�z%����vۿ�~��UW]��?���DS�ϖ,qk�	�c���/c`k�BO�9,�7�I�f ���O?v,���p�pF�`F��e)v�
>�� �r���
�U��ύ���W�x���+�?����o�9��q�ܟ}$;��������_>����ÇC�[��_����V~����tJ�b�_���Ե�ݦM�J�+�	�����i��?���/���2���+T���b9����X��ׯ]���*������ ��Td���˗���ڿ7n�8��C�+��cƎyv��V�bŧG�
7~���\�<���^=���3�>;�����H��

]a���-:hj��O?�̨Q#/ZT�x��w�3|��O>�ħ��-:`�Z�`m@�Bw�|p״�/L�4���g�x��?���
YЁ�0� #�0�@.!@�-���N�}�r�
�� 3d�ZgamѲ��9�a�
K���&N�W�6�U�vj�V-�9xЫӦeɅ<��{��r���?�`�?׫W����{�q��`�QF�*��V��5ަo��yٲe?��5���w�|�%D4��J�*�s�٩��P,u��޽�c�����ƍ/JN.]��ի�}�O�~�^x���ܳ`���p�N7]rI+�mެ�c�>
+c���с5��V���3q�
#�|��Q��
v�r�.6x� ;��Z��w�ҥ_FW��5*l<$h�`���
{좋�uV�{�k�ڵ�����{��_|a�{���������7a0�
�u����;�
�k����;K:�����2� #�0��2
c�e=ƿ�\9�����{o�'�`}c�L%�0�mټξ�_C�Zg�zϽ����4|z��$m����
��~����>In�2u4���/��f�3�z�mHxo���Ŋ]}U[%M�
�c�f�������~���;n�
�}Ǟ�͚ūң~�<���gdd�ѣ���φ��v��[n����:�
Tٷ�B>!�|
��[�
9r�^u�%$�[�퇳͟���gZ�jG�
+pj�h,�=�\�^��0��=���2���6 ����>���x]!C�P�
���=�xFV���x�F�`F ��ӛ͕���èrB�3j�	�ٚg�v��&)%��3ľw�~k�'�Њ��˾��Hrr��z��m���U�hN���ZZNSeыN�:�~�-l�/\2����!}lּ��0*7iܸ|�
+g�y��kW�X
/(���N�ڵ�_
6t苓&#���Ýo���N�����,X0�� ��
yJ��S ~�`&&%�?3��{�(�����uOe�3�.
B�:b��jժE�Z�p͂&\�`F�`r
;U�����4t��f�Gm�}v�R�J���O5k�a�"�I|��ݖh��3j��}�
B+���֯�T����-~dd �C��t�M[�n�?>Ho�Ν�O���}���w�}���7o�
�A���:���?�ؐe}d�g����T@�[�nٿ�����C�Zg�޽�
D�áD�K�.��0O��)�֋(��!?�O�s��� D��ex���a`S�
�5k�LJ�Őő�F�`F ��f�v��(��)	��,���FJJ�~�����z��
;~ں��9s�
;v\<�c�v������u��]R�T�k۵Ô�
6�x;u�T�(S��_0��Ï>޽~{��4"��hq�C��iԨ����� qꩧ���<aH�L�߹�{�/^".M����|x�RxN����
��%�Z%&& ��-�<��)?�����Inp�
������͟�>����g�$�
 t<�(
+V���
��V>"�υ����£�
��
��$��_|0z�\�`F�`ro�
���,�>�/��就����Pȼ��{
z!�Z�lu�WM�<�۲�����
^H녍."!�F=yꩧ\}�5�=6�O���
+T�R
�
vA���ՇCsVlx�;u:p�@�NzV_
}�k2�ߘ3'��M��9^50�]{�oߦ͚�~G�Z5��׿�)+��C�b�
+cnjyc��.��^8p�
��?r�]��
��׽��
;
'��g\H��8

�)�O�3��B�3�;�u-S<o����i��*�Y��n\hsaF�`F���l91�X�Z�6�{�?�88{����w��3G��k��0q!�j���
����&8&�U�
3� #�0���A��M�|���V|�m��whP�����gm��
qe�~M\9Շ+W��in���r~�l��ɥuNb�
�4�m�s:�:�emC{0"Ep�
���\9k.�0� #��$�Y\�]vre"�W~�$���2
ɕ����F�+�S��aF�((4��/ٕ�C��ĕ��>M�c�͚��b]�藟v�*Y*K>����0� #�0������XI�>
+}A%��0� #�0� #�0�M�
d+f�HHc3"��=qGA.$0r7F�`F�`
+$�-S e=���A]g�2��F�`F�`
+�[DX9.;嬭�~3q�&�!g^��/]��7c���0� #�0� #�|n���3�1����qW֞ʒ+?�ç3
+>*�CF�`F�`�����w��}��U+w�����"E�T�T�F�q�
��E\Y��l\y����W��\����#�0� #�0����Y�x�W\uf�Z�ř"�Eff��t�Ofơ�����}���.��]�a&WB�1�
+b�KF�`F�`�‚��|����ԩS$)�x�X�
;���v��#G9|811��)Uk֬��ڜ�Y}�Ң��%&`ΟX

x�OF�`
+4ӦM���
O;���/���9F�`|8��~Q�f0'{d�ժW�<��bŌSZ��Lf�<�F��"�z�j�K,`��~�~����°�ӧ�\�������4�{����
8pժUk֬	�S�6�F�8��"+V,��"E�%��F
���b���*�
0� #P����/A�_y啯����G
9a=-[��wޙ��~���Ǐ_w�u��rJժUC�T��
qF�`N.��?��lf��Ebe6+���ȭ3���F�r�ʠ�M�40`���R��7߼��+��v���u�]zV��@pkժժU�I�&i�0
�

+��9�ӷo_8Džv�'����bT`�޽�z�:���;�!C��9����Zl�u�Yd#W��Ҹ #�0yP�u_�]����[6G��V.#��
��y�Y+F�8�/^
Z���Ypb�d|��g��̓c�/�>�믿~���?�<����Æ
[�lٌ3�����
|4gu����7G�����������^����˱
�#gci� #��A@���z��=�ש[��߶Փ.k'
m]��`�2���.�J� #��X`9�mڴiR��U������O?�v����{�ҥKq�=t�x�A�`l�\�޽{���"O�>
tve��C�ܹssP}w�{�:u�4n�����={6ɇE�|��بR�
+���`�b,�`����7kV
<����ڞuN��M�
ؿo���l�
+we�H��۲�+[��!6+����Z1���A�aÆp� �Et�g�}�]�n]�n�4h �{�
wP�~�u�֥2`��C2��<�`����2��$�ߋ��nt�
ړ}�,�`���)ժ_��
+��0#)���
.����R\3�2E�
A�5]V\�$!f\&��9<�S� #���O6l����q��
;�m��?����
,;v���!B���~�_,
.�
���ӃK3� #���V��q<<7��Ŋ�كi�lFRNR&d��%Skf�r��0��5j�"#:��˖-0
#��g�y�$�b����~�-�ܴim�LѢE��ۇ
� �}N
��q�F�
ړS�Y#�0�����[7l��*x2n㔑�8^Hq�n3� #`C ��}�N��pl�-z��p�ҥ۷o��㏃��]�a�hɒ%�t�bL��������SO�b����w�6�?�m,~U�㯸�
+�;G�	&�p�
���
+Do7�MpEF�`���|V��+����EWXIF�`N *Tx���x�
�tC�	ĠЍ�
9��SOm׮�<н{w�'_
L�C��{E��<�L���C��ꪫ(�&bK@8Rc�
�����ֶm[����W �v��
+WdF ?"�X����|���O��ˉ}�6����/~=?��ufF�$" �1��}��7'Qn�`F��Ĉ�P����3^����E�f��u�:�|ù�
+�����.�0�@�C ^��c�P�q��]����0#�0y��ig�wսu����_�:��޵��yY��-zT�����n�Ҥ{�&�Wᢿ�o�
%у6�n�����<y�Y)F�Ȼ 
�!�q뭷"�ܣ�>�wue�F�(|
<�~�H�����?|l�i{�uփ�~��$��'W5N
\Y�{sn�v�;�cF�(�\r�%H�@ˈ1���O�(Q��"��fF �# �� C�-��[��f��W&��
�we�|~�Y���_���(��0� #�rk���Cf�Ծ��#i����I����m��Ί�SRS�-��;�[��d>~��_ٌ!W����3� #�0� #�^$K63M���s,J~��{�0� #�0� #���t$�
>g��(s�V�^��ʹ�{�~;
� 	���?
���L
��ӆ��QŬ�bu���֭��G�ٽ�?��z��
?~�!I�;�޽{���/n=?��ó�>���?�!��Ep�ڵkC���1q�~a~OU�LAE �����w߭[����;u�Q�F�<4q�D�g1W���	��`F��G�,�]���Y.���~��k֬y��RRR at C�Q@��^{
e�/_��(�A��9s0���oƌ��*�\��Zŋ�ꫯ�R;c�
$��ի�C�ҥK���3~�x����Q�F!�?M�2���_��7uy?}Z���P=�@F`��x+CȰ;Sk׮�:uҝE��J�*�s�F�`����aM��e:k,I4�OG�Sv���+WFʨs�9)��/a�
 %˗/�U�T�v(!F����w��������'��nݺM�6�0
��
4x�����kSO��ٳ�#��
+Up��`�n֬���ѥE��C�i)U�T��\��"���r�o
�N�w�W_}��[nѝ�[�������bF�`�-���u�惡�c6��#���ѣ��̓-
D!B�����SSSCk��?�QFal�
�3�wށg��s�֭p�@V��n����C�����ׯO?��iώ�O��\��! '�r�ʭ_����
x�>�
+ƛzE-`=��0� #�0��5c��"���	+sb��(��dŕ
�4�#`T���_�c!� ��v׮]�vkd�ڲe˥�^
+W��۷��4-�g�:u���C~ �t��
^͛7�{��݋m�����]�>��x���Á%�q*T� 
1�HOl�:�w3�� c����0� #�0ym[�S��1�PR��I`N^�`��Y��x0a„��a�]�����-[S����zΟ?����w��!��ꫯ�ܹ�C=t�ر�(��d�b2������ӧô\ �ƝbF�`
+*i_��++�dJ�'�hn5jԨY�f˖-1�i�ܹ���Q�H�lb�2���}<�S1��`�$?�ez¨<dȐZ�j�
;V+3hР���޽[�t�aT�v����ϴ�ו�s���;�K������w�ٳg_v�e���5�<#�0� #�O :�$�&��Xٕ�3�ʖ�r��}�~o`p�� qX
�1999�`���iӦB���e�&O�L��I�&������ftA*��X�СCa'�d���
c�"��)�������r�|� ��A������
K�#xe|����?>�v��fF�`
+<%|����N�BG�� �;w��D�5D����
� �<�7n܈��;%ɏFYl; Fa�
+Z��1�oڴi̘10Z���geɒ%�[w�UW!L2l��c��J���+V���q��o��E��_Rt��� � �
��1���!
hq�?���&x]|뭷G�[�4i�8*f�A*	�y�
e�F�`F o"��I�e��˲��
��r��s��z �y���Qc�_\sڴi �`
;v�K��ѣI
J"�
6����}�uׁ�Ң38@>�Ԯ\�_��"@
x\��hgl�펆
7�
ȊNVB2A�1/�RE

8���;���
���@˰a��`����#G"`
��O�:u�̙f�A�6����� C�}cF�`�5�!����lj�O={ˆ�'.�o᨜�x�պ����E��uOYyF�#`&�<�Mss� #�0�@�E >�~}�>d�M���?�v<#3##��
MK��؁�K���.[��9��4nފ�K����
j�[_ŌS�f6�\1
+-��qF�`F�`�B����惁�o:�\����ٽ8|*
+��n3� #�0� #�d��:f:Vs�2$��	��&]�a�
�K�MT�:#�0� #�0�@@@:W
[�k�D��D
+�,�hs��c���[Z�6� #�0� #�0�����Xb>:�E�"�yӬ�?!g�F�`F�`�	pJV^
�b�	S3
�X�WF>���0� #�0� #����B�V��03�?e@�p�իW#<-H���Ŕ@��#�
)K?)��.O�7�*fEC��nݺ�]�6J���+��{�
?��s�2n�8?6�"7
+��`r
+��۷v�ڈ����O�k���G��(*q�† ��`�!��u�t��F�!�
��B?�����eF�`�:��B�
������Yy�E�(1����5k� �r����;��(�$ (�|�rlGA
+��̙ӰaC�ң
�ˢE�����;�\�t�/�H��۴i��/�P��~�m۶m�5
�G�#)��L���믛���ڥ�҂t�Q��e
+
@�k���P�ڵ����m۶��S� ��2� #�0�	�Ą
�lQ02�,g��<.�bF\*W�\�jUDpCB>�N$�
����˗G�*U�`;J��u����E鲃�<��S��H��/R"g5��f
!`�T��/�@��
.� ��
#1��(
���_ͯ]�/-�J���.S�@�J�c|s@�>�"G������Y����2� #�0����
+��TZ�+è�Crn_|�ѣG�͛[�B|5#��%8555���={֯_��؎2ݺuk͕����_����_�~}*�
O�uh��{�
xO+W�
�"�����=�w8aL
+,��� #�0�@>E at f���X��n���'��l���Zx2�
 ���ڵ+�nM^իWw� �
�	ڏ
pel�ݻ��M��n��vu��ŋ�^Yr>E�B�
+�|߾}�?6@��;$�_zz:<��i�XmF�`F�0  ]��/��*��Hr�WFT�
s�
f͚��	&�M�.��_�^�X`N&�����9P�7o�5!\�0#0}�t��
3�wF�`F �# ���O��-Vq0�K��#I�5j֬ٲeK�g�;w.�z�ad?�
���r��V�Z�s��s �1���|ciРM�r��`T.[��[��]�W�@A��<~�Y����{��
0�W̞=/o��O���"#�0� #P� 7I��"����D��S�f1�/�ѯ'� � U)H
�e�LNN�S��8

�6m 
� a��,CnpVFX
* �R�c�G���+����nh���W/`��ȱ
K��c�z
+�
D6���
+Xǹ;� #�0�@�@@�ޣy}r���؄<��E�G�w�޹s'�����Mv�3�pl۷o߸q#�Wh�L�$?Nk�� ��*h�P�X ӦM�
�5b\���@s�n��b�
+��L
(2��e�(Z��sR��!^��ꫯ������.�����1���I���[o!�
+�ܚ4i��*f,Bj	3��8�ɶY#�0� #�d/�rT���S�䛡�]���G�d��ܹ3̺�
:m�4�]���
;��a��Ѥ6J"�
6������u�]�(��
��8�+W�ėkD
��5�\V��ʨ�ж�o�^
?~<--
�Z���0�������`^~�Ri6lX�O
(��
9�t|�ԩ3g�4cRo�n�L%���%F�`F �# m�"���ZV�I,^�����hK��L���j��y��OD�^F "fBʈU�#�0� #�d��I�>d�M���?�v<#3##��
MK��؁�K���.[���铟{w�v�B� I����Z���!\���El^F�`F�`�‡ ��}ٚçs\#��pYγd��9��X�3�=fF�`F��y����u�0cnM��^9�5
���;6��.�i.�0� #�0� #P��9�E�
9�O,WVYJ�γve
�رQ�Ow�`F�`F ��=Y�S��u���2I	E]�6�\W�`F�`F�`�"�PEF��,�t,FF
Q��`F�`F�`N "ӈp��y)�}�uax&"
��^��hA��\�"�9��6��4~�<mh�* [...]
+4Ȉv�W�=�)ɸq�٬��(Ì=�)طo�ڵk#r��O?
ܮ�_�yL�
+:��јnx��g#42iGQ��T����׭[�#�7j��l&N�H����vYPA�~1� #�0���2S/4k�D�r��0��"H��f��]HII�ݻw0((��e(�|�rlGA��̙�"ȱ�aÆ�*�-Bn?d!A.kd$�!�E�>p�_~������o۶m��iH.�
����)S^�u3��_��_Z��nIOOG
�ҥK��
v��eϞ=Q��e
+*
@�k�5a(v����ٶm[d�)�
�~1� #�0N&����bfɏi�_���P�r�U�¤
+�*x��*�
J�/_
��T���(hB>��H^��z�_
\婧�WF�=}���Dy،!����[�b�
.� ��
#1��(
���_ͯ]�/-�J���͛7���1z"�7ZG�(]�2�9�7���;!r��� 1͟�#�0� #����������q0����	��ѣ��̓-
D!�Ё%8555 at 8���ׯG~lG��[�n��26�z�
�����ׯO��i�m�L�2��dɒ\�8��_�=�\�r��66�ի����*p(��6�0� #�0�@
E@�+��.��Yؓi���Wn�v ���Zx2���r�qw��`�&/��ի�� ߅����26��݋�d�
Pg�|G������ŋQ��N�ӧO�~�.��Rؿ5)�rO�b�F�B�
+�߾}�
l�:�wH
?8��c>_���gF�`
+0��#]X9��$c�lS�9y���f͂C„	�&p�]vٯ��
+O	,0'W�ڂ��
(͛7'!�O]�lY�^�
8 �P_��5͵
+ӧO�i�`�{�0� #�<T�8���W���"�_�2AS�F��5k�l�|q�ܹ��醑��z0*��9�ǣZ�jh]��3�
lư��A�4��a��Q�lٲn��v�_��t+�.�c{���Çϳ�
o4��
9�W���7(�{��ٳ���_?v�UbF�`
+��	��],lq0�������W�N r�:$
ⲁS&''G�SM�6
��u0�z�!7
8H ,�_)�1�#�O�����]7�]G�Z�j
>|8x�c6���y|� 9�c	~�z�����@dC�N�˽`�F�`��t�0��Y>V��(�ʄ��ݻw��	�9~�xD��]� � 
����7n��흉���	c-�
� ��*h�P�$ӦM�
�5b\�6�
�9D� _Y�b�W�\�-
TE
:�+@�_}������ڥ��r��A������a�F���ѪU�ܛ�X�n>�=^��z�-�W��[�&M_ŌEH
�
?=�A�XEF�`F�0! ��I*,�-,/
#���'!	�ڗ�4��ѹsg�u�� 4qڴi �`
;v����ѣ	a���6����
��ł����v�ʕ�r��o�g�k��Fde�Bh[Ӹ
׋�Ǐ����C
8p �!�
w�;��˯]�/-Æ
�(�~��~�}��}�G�
�+��ra��<�:r�H�C��S�Μ9ӌEH��n�L%�
%�>#�0� #�7��D��[rb�j�l�����m�Z�����]�}���Λ�`�������2oj�Z1� #�0��u���7�o��H��̌�L�{4-]ocvV,����l�'s���ܼ�?$&Q��ľ���:�|iW�
06G0'<��G� #�0� #�0���R��A�C&
A���yu�p��.yUe֋`F�`F � �l�f2��¢,=4
?���)
�ر���ty���#�0� #�0��	G �T�A��5Y�� cs��W�uxc�F��\�`F�`F�F@�X~�E�Qq0��E,I
v��s�0� #�0� #����"I��_Zt.iY����Č��X$#�0� #�0� #pR�DXF�)~\��+���?��[�W�^��X� �r.Pڏ
~$�~R?]�64 �*fE [...]
+�[Gm�ٱcǖ-[.���K.�d����o�
#�
*T������#!� u���JOO�x�N\�`F�`N 2�"�1
cY���F�`N^�`��Y�J�*5a„�w6�
p}P��e�b�:���Y#�����aZfpF�`F o"��[�XJG����+��E�q]�F��5k�l���Ν���n�O��2�����aʁ��B,���.�ys��/����
��/
��
8`~�={�e�]�_?���eF�`
+�h,3�\Y�\�(+�rD˲��W�N r�]$ˑ#GB+999��-^��iӦ���Z�]�l��ɓ)W��I��}����7�
+3�r
�}�~����j���?����n+�(q�F�`�����șd8�$>���x1�-K˲�7U޽{�Ν;1�i���͚5���
��5
+
�7nD�
+흉���	�.�
�0X-�u�7m�4f�����`X��,Y�qꪳ�
pz�̻g�5��u��z����I�&�;��o:�
?L'��a
F�`�‡@��@"�ؔ�H��r�[9UNhѢŅ^عsgD�%e��iӦ��
t��S�F�
M0�$B�a��쯻�:VZt�G�ڕ+W��5���� �n9� ���!؀ݚ�a�
"�{<r�H�C��S�Μ9�7�p��`��T��
�DF�`F��>�-Y���,��-KT?g۷�LK�!C6�����s��z׃�>���Y#Px0R�^sOF�`��� | ��>d�M���?�v<#3##��
MK��؁�K���.[���7^
�њ��j
�����5��7��	���/��>s� #�0� #�0��	F@%��m���6����:�`��h��9���Ǐ�!��2� #�0� #�0^�@�T]��W��fr͈8��$ La+�K��ҝ��p�� #�0� #�0y�
G����,�1��ז#s��<�L�%��*1� #�0� #��/$1�����HRb�dʈe9s_��>k�0� #�0� #� �XD� ����\���Y�d5��qdF�`F�`
+9V����b�͔�Ϣ�AA�W�^��X� �r.Pڏ�x$�~R?]�64�*fE�[�n�n�֮]z�<�k==� s�6׫WϜ�� 4�"G	�;���MsF@#��6�ƍC�u���H�5B8��'R1��l��#�0� #��-�j!ɰp��y�HEe��"�L����/׬Y��
ȁ׻w�஢$2�����˱
ȟ3gNÆ
o���
6dY���U�V-Z�x��HA���ӑ�t����

�t�gϞ(�rF�0` r\�-��;��ڵk�N�42m۶E�
�`F�`�,4m�H29`I�\YM��^��zP�r�U��
C,rS�LP%˗/�U�T�v� F����w��鲃������}�[�nӦ
6H��͛aW
1b�E��[n�	���eq%%�
?��H݇w�W_}CH#�t�R�'#�0� #�0yM�%1&Jl�N"
M>ٲ����y������K
F������
w�A�9e��٭˔)�V�,Y���XB!D �@�ʕ[�~=�
���8�
+
�⺸
+!��eF�`F�$" ݒ)˵� M��K�0��a2���J
��)S�D���R��ڵ+�n
E�)gǎ
[�l���K/���۷���i��֧O�~��a?��0F�eB�B�
+��o�>��
Pg�	_ 8�`�1\� #�0� #�WDY�,�s��Ѳ+K��=1�t ��
̚5�T�R&L�R%��>�Lٲe1�
+
!��o�lٲ^�z
8p �ʡ�y�G�I�G`���0-�}=YCF�`F�p"`�++/
�,WVe�gi`�jW�Q�F͚5[�l	~9w�\!��
#�I�`T��s�}<L9��C�����2z�2<�'O�<|��|�P8Gv
��޽{�	��c��޸��!�gϾ��"���N�� #�0�@�A at M�K��b>r��)L���$
+:�~�8q� (OA�
9r!�����	(�x��M�fS�k9��c�aJ�=i�$�C<x��D�Z�>�}ߏ�k���r
�}Ҷ~����jj���?��V�EwXIF�`F��! \D�%
#�#o�g�q0"y,�޽{�Ν��4~��f͚���XF��7A{g�$�q¸�m�(
VA
�c��M�6�3F���?�l�w���=Ĺ�ꪫD
6���믿�۷/�J��+V<��S�Z�ʾ=����B�_�V���[?�0�4i�q��|�M��餅"�8#�0� #���>�p,�b���b�	����(�V�-.���Ν;#j,�*@�i�@v�:v숩N�G�&DP�
� �ƶ&�fa�Egp�|ĩ]�r%�\#iH0���r�q*��C��5
�ժU�Q����k޼y�
=`Wf�<��n#G�D�8��:u�̙3�x�
���L%yPsV�`F�`���7�f�����cӺ���� �LhzF��=
���
#�DG�LH��dF�`��  H��̸݇�}��GҎgdfdd�ߣi�z;��b���e��{o���n�Mؖ�ě[�:���F.JN���dGk��0� #�0� #��#(]xrf��u,f
M��Q�0Nt�)��{9~���V��cF�`F�(p�P䉡s\
��$/�*�s^���½d?,]�;��!F�`F�`�� C
NNJ��
+���*���y���>K|0piF�`F�`F��@b��')�-�2Jʘq2l�09�U��'�`F�`F��
���q`�f|e��A��j�(�
X*#�0� #�0� #�' 
.�d$�9Y9\�2�*��dr���o����E
�. �%��ȊG2�'����iC��bVD��u�v��m�ڵ�x:�|���0�����K���^����@c� $ ��_|Ae��iJj׮�H�O?�t��y��R'$�7n
"(�[�NG
+oԨ��L�8�4���vy"�6F�`F 2dJ&
�e�c�	�LyJ"�` �ݚ5k�v9�z��
�J"c�,_�
�Qt��9s�4l���oްaC�*(�t��>}� � �

hن��wSlzz:��.]�Z�pa�.]���C��9�}��)S������|l��b� �5޲��ή]�v��I��m۶��S��ϽcF�`�7V�>N�e��O�����$BG+W�\�jU�`a��D�߀J(Y�|y�R�
+�#�O�|����ߡC���󐤺gϞ#F�h׮
5�n˖-
i�6o�
�2��]$��[�PB�5�c�.��yaGw�c��#.S�@�J��g�}���N�ꫯb�.�-��Y����1� #�0�������emٕ�4�/�r���y������V\%�1;555��֭[�ѯ_?؆C
� (����3�p�eʔ��%K�8�������ׯO����
E.S0�cO�r�֯_O��F�z�t��]�3���`�½`F�`�	�it��)�l�BoiW��/����w��S/<r؆w��l�F�ݻw߷o_���#jҢE���drk���N������^
+{6
���޽�Kvq� u�'�\�� P�B���z�
Pg�	�"8��k/� #�0� #�P3��υp� �l��Xq*II$�aN^�`��Y�J�*5a„Hur���W_ݹs�
z�رcہ��e�0�M�-[֫W��_9��G��X!G �
C�����gF�`�.2�X
�� ͖��#B'jԨQ�fMx��_Ν;W�n/7��'ՃQ^Ρ>
�
<x��ݻǎ
A}Q�
;w�4�ú
��ɓ'>��
�B�˖-�OD
�X�A���Fe�q��fϞ}�e�E��/0�pGF�`����a,�����c�12"v
ѯ'� � U(H
�YC-�9D��Wl���M�6�"�C����O��N0s�LO�j�:|�0�?T�c�_�b�C�v}�L�B ~� �zl��]��^��џ�PAǝeF�`�䯬WR���E�k�
+F
A_Xpa�qD�6D����#� �����7n�흉���	#�Î��(
VA
�j���6m3f
�����D�o���>� |C�3�]�	yѢE$
a4D~����ˊ+�z�V�Z�_X��
��W_}��f,0?�#*��
+
x�z뭷/qT�4i�x)�؂�ᇹ����F�`F� !@�ʴ�!�����
=
(�^7D�%_p�iӦ��
t���
�G�&Q�`��v���lWY��� ��S�r�J|�F��gd}˖-��!�] �A�^�Z5���>L�ѣ���_y�����uw�q삎�_��GW�KF�
��q��=u�T|�p�Ļ2���rGF�`�� �%+�ee:N,qZ��6�w�"ԃXjW.uy���|0�@u�;��2fB�\n��3� #�0��B >�~Xt2��m�I;�����I����m��Ί�SRS�-^����/��G��V�KΫ~j�zV.
_�r\��0� #�0� #�&@���V,V*k��:�ad��[�P8g�r���(k�0� #�0� #��\Y��[����WWV!��i�?>K����S��2� #�0� #��0F�8 
��}*.
�rX�@qg�,'Rn�`F�`F��"����:���r��B��bF�`F�`<��p
+�
+��"���~��1� #�0� #�0�
+#���&W��n�W�Fx,Z�v9(��G?M?)��.OwG�"�!�q�n�֮]z�� �7c���g����_|�E�>8���\�^==5P�
i��}�w��HJ��]@^st==�뇏�(���P��@n#�D��ƍC�u���H�5B8
+���~"�en+��F�`F .l�ʖ���/[$Z�#�老�vk֬Aڅ����`UP�Pf���؎�7�ϙ3�aÆș��)���t��Pf�
]�tٳG��
hhժUE�-^�8�C���.H�3�h�W�^��������Q� e�q㜵�F���d��-
okw�yg׮]���Ȧ��=ٔ��F�`F �б.�	3oy_����+W�\�jժ0� ���0�����˗G�*U�`;J'!F����#[�Ο�Yq��Ͱ��1�dI��H/��O>��u��mڴ��Y��ՠA$�F�k�/�OK�R�t��zf
7�Y�o( \ � #�1�9 u�	�
���t�RG��l6��F�`F �����J­
׆��!��G�Λ7�4��u�,��٩���ʔ)��K�,�K0Ё(C86��I��;��I#z�B��K=Ga��7;�s�(�K�\�r�ׯ��؀�����*p(�L?Q��2� #�0��IA�����|�7Πq�� p�2eJ�u	v�]�vح�^ܧO�~��]z饰CÀg*��4?��رc˖-(�%�l߾���i��u�ԁ#�����ˋ/v�7TϬA��9��Yk�ke�
+*@\wH6@���|i�<����X#�0� #��<���1����bn�2.B�0'/X�`֬YpH�0aB��X~�˖-�{��l�l at O�a2~�x��.�AAeʖ-��V�>����χ���~��!s�΅Ҽy�\�]�'��=a�qC�"0}�t�����F�`F��  �0��S�D�*��y�����S�F��5k�l��m�ܹB��F�����
/�P_X[�9=y�����
zR�jժ鞁�b:
�ǂI~��2�è<dȐZ�j�
;VW�r 
+�� E�3��Rn��_���s
+��{�B��c������!�gϾ��"���V,�`F�`�" 2,8���
עzv2�!��{�	@ ���a9r�8errrT�|���iӦх��
>|8�g��
VMv�I�&�����f�	�.�}��ݻwGl:^=#���4Ύ�����!.�5	���T�~����j��W����-Y�ϵF�`F W�^�I{��>��5�D�ܹ���ЬY3�}�˨Q���q�F8Bh�L�$?N_���'
+�UТ]�!ӦMcƌ��������*���
P�C^�b�SO=ժU� ;4f"��UW]�`�X�N�ؾ}��+"x
5M���$����]p�7 7���7WG
���쭷�z����I�&�;��o:�<�2h� #�0� #�7�Fe�����c��E�^xa�Ν5�|
@O�M��
6бcGLu=z4��p��X5�
� �+-:��#N�ʕ+���( �s����w܈{��;kp�9x\��h�l�n펆�8��
%+���2l�0�Ot=uw�q�
o��X,�Z�
9��{�ԩ3g�|�7
�D0od*)�}�N1� #�0�
�
�
.K�Vg׶�~�K%�C'��-���{��%�w�;��@̄�'�Yn�`F�(��ү�̸݇�}��GҎgdfdd�ߣi�z;��b���e���|�v���Q�R�s�Fff�^2EL�B�:w�`F�`F��!�� ,�XT�W�l�
�d9.�ؽ��D�Y�y1ք`F�`���@fFfzz�X�g
K?Nt9���u~ۼ~�O�5>�r���v���^>�;��AO��-O��_��S� e�� �D�#�0�@�C }0>���?��e��p�y�O9���+8��Ѧ]����~���#y&
+��^��Eϼ���0� #�0��ID`�o�^���e��N��βm��8Ȃ+�q�����u������`�IԒ�fF�`F�`N<�����
���ŷ�
<z
.rn��W�Lϔ��V���O���"#�0� #�0� #p2� J����!
�U
��&�^���� ��Sڏ�x�;�Ii�ty���wT1+�Xݺu�u�v��P�� �7cR
r� *�_|AU
횭#s�6׫WϜ�W�O4�LlW^y%�.#���
Vճ�~����~�
�
�*Hj3n�8DP^�n��ިQ#�RM�8�����˜���pF�`F��,�
�0��[�f
�. ^�޽��$�z����˱
�5ȟ3gNÆ
o���
6TIOOG��ҥKC��
v��eϞ=T
m9�֭�Z��hѢŋGz-ܯ����-BN�;�s�ҥ/��b,�H�
e�q�
��8���9�����ok]�v�ԩ�n�m۶�ړ��8F�`F��
����DmW�͈C�"�U�\�jժ0� ���0�����˗G�*U�`;J� F����w��!8��͛ag
1b�#��-�܂�x��r4�[G��֭[�i�Z��~�#�6�2Z��)	|��(]s�	�Ǎs@��:�������g�E�>����Z2ަ̟9�"
aF�`��F�I�
����o��G�Λ7�4���U�C����� �eʔ��%K�ĥ �Z�(C�;�uD9�^�_�
y�#��N1��7;�s�(�}�\�rT����]EH0E�aF�`����xd���$�j�2`G]�
AI7�
<eʔ���/��]��֧�vZ�>}���w饗�
^h#;v�زe
�_r�%�L���.���
�T�^=ފq�w㜅���"�*T@�}��Qul�:�wH���y�-k¹#�0� #��2����6;�]���
̚5�T�R&L�e�C��Otٲe�z�:p� ���}6 
~ࠠ2e˖�\+t���к'���7���P)6}�t��
U���� #�0�@>D�F�W��
'ɪ�5jԨY�f˖-���Ν���nE��&F0*��9���VxNO�<y����
~�N��`���
]�jժ�0Y�soq�Lm����S�%k��݋m��ǂ71����CfϞ}�e�E��g`F�`F�� `'�F�8�!��̘Qѯ'� � ?)H
�#G� �Vrrr6��x��M�FR�V��l@[������L�4	��
���DX�&̲�s��i�
C�oC\>k 
�1|��z���1���
DD̖���Z� #�0� #p�0�-
�,����޽{�Ν��4~�x����1(��5
+
�7n�#���DI�ㄑ��(
VA�v
��M�6�3FkĚ��믿�۷/�Aa�]�bbS�j�*��Y��s�9yƌ���S��{4���o�'������
w�q�
o#�L.���쭷�z���դI�
��p��
?L'́�X#�0� #��b��ʘlZ�5hѢ�ot���U�y =�6m�.�@ǎ
1�i���$%� �
�jl;#�+-:��#N�ʕ+��ICt�/����w_���{��;k��2<. at e�s6`�6���5׀�#�2�EH���y�
�����9�����čF�
��q��=u�ԙ3g���\��J,F�`F���X��Ē���f�ʻ�d�yqo��>:�y��"����1�#`&���6�`F�`�� �o�~պ�qS�����!_uFF&�=�����;+�NIM]�x��aC�9|�*-mޣ�4i�46�/
���0� #�0� #�0�
���x9v��9���Ǐ�)m�y
+4V�`F�`�<���l�"ɓFf
+[�^��.gOL~�3g{��F�`F�(xW�%�˓<Yhy�ϒ��J~�3����0� #�0� #��H2C)G����z��0� #�0� #�0YG��ŎD���s���)�dF�`F�(X8
,
s���,2�]y��7 at l`���z�j��B�a����Hʀ=����&�^�zz*
�G=*��"3��N����g�
��,����8��OR�!_
wT��Z~ݺu�u�v��P�
��'�Ԯ]��w��Ց6ᓑ5�
+ m5 �ׯ�����v��`
B��� #�0� #�0!8r\?�#���E��K�7�.]�L
�������}۶m���e˖��W�ZU�h��ŋ#
�[E��ӧR �T�÷�Z�����J�9�z��
\
%�A
e�/_��P�( �s��iذ��7߼a�G
���f�Y�jU$Ly�����Q	��L�2x�`(L�A�_y���{�G��xq��.�0� #�0� #��m����H��DD��o���<����ԇ�lY����z?�s�֭۴i�
�f`�={�
1bD�v��ʕ+�\�R�T���I��
	�+;8�
J�/_
2�T���P�( �0Z#�u�
���0�m6A��u�]iii���q��5h�@��I$
0`��D0^
���0� #�0� #��"`�-+
e�,����={��_�
��=@vkp��~�d׺
��2�8�Ioݺ�
p<��۲Ύ
=:o޼��;	��/�S� ���	�Y}���cǎE���_}�Сn9(7��鲳��bF�`F��C�d��LLȔ�ձ@���/��d���=�s�2eF�NY�X1*�cǎ-[�\z�p�ؾ};��ҽ{�}��5o��!
�:���ŋCO�.��_��!�|�
���k׮,s�n��Z�j�:u�KE���
j at 2��M�6�\?^
��/��0� #�0� #��L�1㫝
G�Z�C,pڴi��
����\�r�`nԨт
����s��=�бc�L�0�
n&�n�!v֬Ypؘ0aB�=Ӊ���,����T�81&Js_�8�َ�b� #�0� #���
�X�8�D�wfQ"��r�76�U�V�(X/&�Ք
&��.˃
��6pGx&��jԨ��z�(Q"T-���-[�ߗ
�=�0����_x9g�ǣB�
+P�����`� e�q�z�8��F�`F�`��0N��?��Y�CX�R%�rs�
��Q !24+ET�e˖M�<��ē&M�����ú��.����%��W8~�E�H����$ˑ#G������	(��HdS��:81(�9$Ǜ`�� #�0� #�0q! �r,R\Ԙq��7�|��^�b�W�[�,Y��h�
���X�Ί�fy��i�4(�X����X��B�1����v_PO,𜆇�ƍ��H��p��(��퐉ˆ�A�v���M�6�3Fk� �
������uF�`F�`L�]Y��~ʈtֈ�� �0!Ot�kB�i336`�u��Aj1�o�ĉ�$�y�xt��6*�gX��_tn� ��e�i�<�
=��$B�a����]w
=-��ߵ>��r��ٳg#cH�>9U ^
r�]��0� #�0� #�X�ƹ�W��w�F
㞦��Ms_btF :�5
�0�dF�` [...]
d�8)��5}N
+�(#�0� #�0
]�Ln�G��:ܲc#�a�v��>Y��bF�`F��pZ��\91�H���`��
'Kͼ����eF�`F� !@���vl��K���0� #�0� #�n�\Y��Qf�\���>� ������~*S���?}bMF�`���@�2$;�q����_y��C@|b�E�z�j��B�e�
�!��P�<�`FX�z���xT
9����~�L%��9�7�g�}60�>�U<�#�_߾}k׮
U�~�i���/$#$%O;�4��ׯ������C���˦|w5��y����; �x(>\�#ЫW���?��.��o��E�XFT)����#�0� #���a��#�Z"�aѢE�]�,$K�.EF�����m۶�'R���W�ZU�h��ŋ��W�V �O�>H��S�}��k����V,@ϊ~����}��)S�����HL�/�	R��+�|��׏<���⯽�6�/_��(�����Ϙ1�A_���2'
�7����K��<.�ȅ�NN
Q\�O:ڬ #�0� #�{x��wZ~ꩧ��o��XC������Hn�,��9g�
l���έ[�nӦ
6
���ٳ�#ڵk�U�\���|_���xb�Y
�o��~�nݺ������o����Db��d��S�|yԭR�
+���?����
 d �"1JC\� ��������G[����
�S�N���?��#r�w��]�F%/��b| A�I�ݙj��i�M7݄�2�a�'���i'�SB-��$�z�(�3.I7 �x�
<x0�#]��o�]�F
��� �M0� #�09�����_Y��(��v��ٳ~�z��,�l���
��ɥu�H<��Ǒ�z�֭ݺu��m��޶W�`}�5�ʃ@���~��T6l�����
�d��\��Ty�w���5��։D 3�� �np�x
�������w�޽{
�b
��s�
�!��o�WP׮]۶m{��Ra���t��x�ë�g�}��c���t�G�y�VA�V�Z�+��?��'jn�`F��U�4Z�dÙ·]�^��g	x0�)S�
��ڔ�cǎ-[�\z�p��i
+v2]�4x4o��!�aÆ:���ŋP��]ѯ<1����澞���w������7m�4�\֯���N�:�����K
G�q��8_��	ճbŊ�v������r޼y�*/���_|��p�ч<��۸q�ʕ+'L�йsg*|��Qx_��rk�)������Wd���%Kv�����'܁~��'h�V �oh�� #�0� #���+{'��N`��6m�j!`�|�ʕ�3>/X�@����h衇�
;f6
+ޠ�}��tv��r]w� ��,�w�?�
D���������W�z<t�P���'
e�A�i%��͛7Ï����7n
����G
u
��L%�����w�_���d
�f+���p�wh�?��\�`F������
ѿZ�j(����q�k� �^8;֔

����A��
+�{��cǚ
�'R'�(Q�D�N��8����P�Jj#
��`�&�p�
��e�
xk`F�g���s��_쇑rȐ!�j�r@�嶸b�!��/�eœ����i�n���&\�&Mr(ðc�[��/4S7��~ZE��{�dF�`F�$# ��H�e�p!H���5Z־J�*!�����
+��SO�v��j�'O&;1&3
<xPW���СC������T�>Q~�1O�q0�<|��-�_t�ٌ�]��%��
t
/�kq�� f�b��^F�w�f����@��e�ɦ��r�W�ڃ��I .I���ܜB��2n���o&]t������9��0� #��$D����ʒ:GOEҿ��b�<)1��+�-K�,Q�\@�OƂ
؉��,�-&0!ԃ�RWKZLb��J\�@�gyД�o�~��
��W_}1
+��v��;\䃑ӢIUh۷o�V�o5k�q��C ���/�N�����GLj���{�n�	
>
�sC=�Sw�r��+���B�d��d���a����
+��$������
�,�`F�8qXtٚۧ�^�NjJbR��1c0=�O����pQ��{mf�����Ҙ���'N$ N����#���	����סC�;�Q/k�D@�9l;�\w�uxa��"������t2���Ƶr���FPm�	$�A
7
o��#F�y�\0��
>��S|��#�)�"D#(�̙3�
+f�N
+P
=Է�|� !U�ML�����?�P'�~�sa��0� #��`K�Qw������I6,,�w7�>�Aߙ|�U���|� \q@%�|�I�/��
^���
�2� #�0@ >~8t2��m�I;�����I����m��Ί�SRS�}���Æ��Z-m�?�lܤ��WV���!�2�
F��! o�*P���X�����e2� #�09���s�l.�y�-�pˎ
?��x��,�,��!�Xp��?�eX��,w�+2� #�0'#I�7'�pˎ
�	��1��'�4pӌ #�0� #�0y ��
�R��낡�-;6�`��|
8=�#�0� #�0���C at Pe�\$*���S�[fF�`F�`N*2X�#���Mb����I��gF�`F�(�x�_W|��.��W^	?��\$�W�F��:&�������~�z��T<*��T
\�����?���� ��ƭO@w����U2%�����ۦM�@�ri'�J��o��B����Gb�P�� #�0� #�0�@^@�4-;�`D�oѢE��?��,]�,�L��<۶m�
� 13?�Z��hѢŋGJ<w+�ӧO����_r�%t�d)���

���l�{���}��
�D
x��4Ŕ���Ǥt�����

�t�gϞ��r1F�`F�`�����r���1�������+#�
��HM��ԺK0�R.$ö��4�0�b�������gϞ#F�h׮�>T�re�Ћ�T�R���P�li�������g��۷�
7� 
.���^�zA��͛aWFw`VG~
+��D}'���� #�0� #�0�"`ؕ��2q�`weXIׯ_��̞�u��\����_~��
"��(c�#��֭[�u�֯_?�b�՞��5��Zn�aA���o�>R�2e���%Kr�i��0� #�0� #pR0��I�
aVr"@��ի{j
�]��Q�F�D+V���رc˖-�腋����av�u���o߾�͛;�5l�P'Y�xq :��T4�HKK
(������*ժU��aÆ���s�i������߿?�3Nʩ�FF�`F�`�A������-#
��eaZ�6m���p` 1-W�
<�5j�`�}�ꫯ�ܹ�C=t��1Sܼy�t27�ξ��`6_� ��'J�@�1������=`��e˖�%�u�+?���9�0
aF�`F��-<�r���1ߋh-�%����ˍ7�;k�V��Q�^Lѫ)L�3]�
4x��ݻw�
;֔V�F
�L$ؙ8T?=�&���-���z�(��o��oŊI
����P�'O
>|��	�A˥F�`F�`����R+�
�R�J���p;6����SO#��`�d'�4iRjj���u����
:�rÆ
Y�&T�,�4��鏩��k��K�U���9�M5�:#�0� #�0�@n!�Àm\�rWe�	pÅ_��o����?�X���+�-`�)))�
�`�X�;��b�ݢE
��@�5�K3B��bk�V��'�7��Z�Z
���?<f̘��8Peا��1��w��
0�'%y���j�F�`F�`N"����"1��>$
GDde\������hҤ�63c�iӦn�4�b��ĉIHF�Z���Q\��o � |r���۷��ǟ~�ih��o �
�
+���+��wܬ{���2�+�b�F�`F�ȃ$�>��U��~�Y('}v{7�6���6�=)��*1y��γ��b� #�0�@AE �����}Ȍ�ڷ�$�xFfFF&�=�����;+�NIM]���
2��d�,������4������p����4��`F�`F�p# g���$�W�bŕ3A��L�w����
Ǐ�T%��'�?�
#�0� #�0�@^C@bI��ŕ]IH�}Y�[vlhOh���kg��aF�`F�8�xnjˋL9!A�[vl�!o��{&�uF�`F�`�<��6-îl��L��ț49O��J0� #�0� #�.̹}�+�
�yaF�`F�`G|�8����W^	?�?�\$�W�F�,�:&Xc�������~�z��T<*��xT��?D���?����˳�>z���Tq7�XѺ
Z%S�[:���i�8\z�ئ��`�ט\�
]�����o�� [...]
�|��f�o?
h?�@��޽{���3T%.�0� #�0�@!G \�h�"�* F�}�\��[n��Y�f�M�q�u�ܹ�	�m�Թu��0�b�:�B���sĈ�ڵӇ*W�\�ZJ�*|��	�h6����Mx�D}Hg}�
7 ��/��W�^�y�fz�
}�8�
��D���
ʠ<�uw��������l$�N��g�J\ ��K�)S��/
w�u��+V,���
F�`F��=lq0��RV����#���Z
;vW>p� �Ǘ_~�.�n ����n�u�V8
����ج�3X���t�r�
���~k��j�)S�,Y���!0555bݣG�Λ7���KJ�iBB����>�ߎ��x�Ǔ�/�o�%0� #�0�@N!��WVi������/(P�zu�b��Y9 ��Ƴ
;vlٲ
�p�ؾ};����o߾�͛;��A'Y�xq�J��T4�HKK
(������*�@�;l�0�rN;�4P"��vb�g�u�`-޵k������T	�e@~zƥ�2�ƹ��k��7�mf���Y�F�`F 7���V�kh���+L�ӦM�_] 
�v�ʕ���F�-X�@���;w���C
;v�s�N&�f�9��|�d�O)A�1����� [...]

<x���cǎ5�ըQC'	v&��OO�	��۳�����z*
+���o�[�bERC/�.ÓF��ÇGᲺ"��U�T�>~8`?�lٲ%x99�{�a �a��'k��v
����A�#�0� #P�p&�Vve�BcG¬ʕ*U�,4�۱�
+ D�N=�l0��5��xҤI��=x�R�|��C��P�����P}���,�?f�ծ];�/�V�Z�7Ͻ3ۅ�IӦM��
Gh�0ۣ�w���c��Q��-r� �bD�.�#�FA@@�S�N
�`F�`�61^lƌ�|9�,'$�
~o��&f�X���+�-`��k���6��p�	St�-O����Ҍl���ڳ���	=7�+Ed	Z at t���nj����
+�
�4�z 8b���p�&���w���:i0#ƈV�ڏI���P$��o�X�)��.�� |�z���r�C�͟?�O�	O�
=z�X�0� #�0����P�ly��7F��2���!�2.L��FSx\4i�D������,
���'N$� YNh�GG0q�
++B���ӂ����o�
s��~�ih��o 4�
+���}��7k#ؕ��+CB�\�r���Hڢ��Á���fu�� ]��8�=fU�Y�B�
+�G�&9�z���r
+���W�>��
���<9��aF�`�
E�
+�\�f�իV>��=D:/'��𔁃���B������ blG�!bb�
9�
.�R��0� #�0�@0���W���7�o��H��̌�L�{4-]ocvV,������%
:t�;봴���iܤ�-f\fb�XD$^F �@�|48���A�៣s��|��0� #�0������K�eK�������
o�l)�r^�'��\$g�
K��ã
1�֮]��O�\��0� #�0��@"�`<�����|g�S��[����<Q��|.C�������6�}0
+,�_F�`F W8q>2e����-;6����|n�:����e�� #�0� #��w�C&#�n�
n֟`F�`F �"�C�Y�c�_��:�Z��.��#�0� #�0�@�C at pe/f
Ζ?��c$�_��R.�իW�e��	&�F��Lr���������S�<r�Q�?��J>��s�o.�>�l(�n}���@�h���)��?
EL�6m� �K/�T�7@�c$��d>�(M�����@���^�'��׮�
�w�'�[?��~��>��z��My�Η���ĂZ �wƍ��w߭[��s���5���o��v���HwB�i�XN?��1�<����
ڃ
7���*R����J�2��|��a�
�����ϰ��]fi� #�0��	C �A��9�TmѢE�-�,$K�.��D�9k���߷m3�£lٲz��U��-Z�x����=��ӧ25�Ts�{��Z���`D�	�h6ѽ{��&<�A�y��?��!�
� � [...]
 ���k��|�rl�B�4��{������_��W�^����~0�3f�۷�W�^��C;^
+
0 o���d�v�کS�
�5r��p�
���[o�T�o۶-�ո��+o澡HZh�
��Ґ�>X4�=��[�l����jժ9�_�0� #��.
��O�&�r4�
^�|�-�����M��!@�f��3g�iOunݺ5L��p�
I�{��9bĈv���C�+W�#�m��%@� 
�&`�
F�S$�C�\p���
7o�
�.��:,p@	� CO�'n�{���Q�J�*��L��؀v��h�w��㷙��ߠA�t�8��1���FA*�|� ��6�/�y`�Ő�
ġ������C_�`A�s}��ohx��%�g6����7s��Xh?�^����s�?��#��� S�e�^z饂tB�/� #�0?
+l�+�(�2���ׯ7m�&dȮ
�|��؏�lYBRke�qd�޺uk�n����[l֠�'k2ݵ��ì
�c��j�)S�,YW�~��	��>�����
�2x�`8uԨQ#��`Q���j�9SDi�ޣʕ+�K���
m��[84�$^��}�޽ه�X�\]����%��z/���
+�^���������nݺ����F�`F�#�|bWδ�ɖe9кL^�իW��
�� m�F���΋0[nٲ
�p��
#̮�.li��o>���.u�8> �O at E�	|Y(������*ժU�_XdI[ȁ;/
{`��o���a؋r�=q
��o��p�n]&k�:��`i�P`6�?�S�^Q�?$����T�B�
+�9u
+���Q�b�"E���x��7o^�;�/�B�w���9G�6��;�Ë�cZ�r�����Z��'I��tE��1d��������F�`F wP�Nٕ��q�E���tڴi���6 �� fL-Z�`�>t��Ww�����
:v����riq3�
A�l��2�'�
�1&8
>|��Oŧg�d����>��n܂k�^ӲY&
�
<x/6C��/6$��?>�h��C�t�'�|E���D3�&(
?xxM�cWAB�|��C%�>(�1����]
��)��[o�'��C�х����ƒ%K�CEqF�`F�D!@�F�2+��+��a.�d7"k��r�7��
+��>
+���c5�r`�,4 �
;v�)
� :yG�3q�>~z�M?�=�?��S!���~�_I
���
7	̂>|��	��c7n������A
+��.(>\)0�і���2셵j�2OY����[FM�� �s,xc��0 &
������	¤I�B;����]�L�ٳg_v�e~�
��9�/?�
9rD
����
I�fE���n�]tu���yaF�`�:��"�_8�+k��`�
D�Zs�
��G�
�q�v�#+X#�A`��9SW��]�rÆ
Y�1T�,�4����l�k��K���9��S���-Tm��;s�LϒQ����l>�-G�Z 8	b��%'޺��&���� 9�|8�S�~}��� ��U�ɩ��r�W����;���	�;����)~���O�b�-�ܿ?J��x������そ�ͽcF�(��r�)
�V~3��?���
_W�|�M� <�)���6������`�X��Ǫ�b¤
+\�V������Mb��J\�����fh�ku��@;f̘��8Pe�HD�@p
���Xp@�`b�@�Z�fL~��:��T
�k=�*�]?90î	��h5B�o߾=��
z�
x��_�
+�5	q�0T�٤I��o�
�{��
���	�Z
�(�T����
r@�!�_����
<�
�P�ʛ�Lh�(-�D�zB[,p����ܐ��<&,B�k������9	���_�#�0�@�D�23[\Y�fD�.��#"�*.L��xx\�"h336�6m�6K��.����	f�W3����q��Erͤ��_|���J�b�
B�� �����n�=z�}7���[1D��~�ö� ��m����'���pT/��P�1���)�L at y����#G�D��%O�:�t�?|��6�~�)�XB� �w3�iܸ1<s���Qa�5w��7�j�UJW��p�@��W�U�������5����	^Y�<<��R�k��!����3�=bF�(0$��Yo���/ܦ
v{^pʣ�����I�#p����0� #�0���D �����>d�M���?�v<#3##��
MK��؁�K���.[�هÆ}|���
+�s
��q�&I�7Y|$��
��w"��m1� #�0� #�0'
+/

�W���]���-;6����[>��C^�'����F�`F���$��Uo�ʕ�nS�/z68����|0�nL-��o��>�yM���oa��>��sF�`�9�1l��s�>��"E_?�B�=t��
~��[>���������|F�`F�`�;���"*�aY��K�u���� #�0� #�0y�����寬Y2EY�`F�`F�(l�
٠�H���vd�22�!�.�
+��r��^�.�uLc
+���h�ȥ\�^==��#�,�������
h�� �A�r�P��bE�.h�L	n��(��"�p�@��9��У믿�Ҕ�-Z��Fv�޽{S�� 

Б�`�<���3k�����\ �wƍ�Lj|���
+�F^�d�A���J�5���pFƆ
�گ��O��
.O�hA�-�� �̫�����z?٘��4~��/���g�}��,�0� #�0'g�>eWD9Qd�d9�/#����ߏ,$K�.�4�r!U��m�)��
e˖՝\�jUѢE�/���C�~�?��K.��fN��

��l6��
+���StPd2����Gy�z��K�.��H�ѥK�={���l(��4xH�׫W/]>.
ps��g��v�0@r;��2��ڵk�N�
��Y��$�/��r�QB.�`\�v-r�T�At�Nw��+o攡HZh�
�U���D�HЃ˹e˖���?��/��⊌ #�0���F@�I�1�(�2��
�� /WFF.X�R��u7@��
?�̙cړ@�[�n
,6
}Fr�={�1�]�v���kWۮ��
+�' _�	X��τ��Hԇt��(���/&��y�fX
+�
��a�JH\z�I�
 L �S!ƅZ�+��?X�x�
�`�-��� ��6�/�Ȱ�bH�^�r寿���7���|�E!bրBNr}G�
�74�vj!x��͙��ʛ���,�c����s�#Q����lٲ�^z)k��Z� #�0��	G�0KO
��%5N$
�B�
���ׯG�g�
;vW>p� �Ǘ_~�.��� ����n�u��nݺ��������O�d�k���
���#�*S�
�.Y�$
M�����;pV	�"Y���?;zfA�B[�Q�ʕ�%C`ô��N�~q���?�@�

�Z�-$;�)�M8����Bx��H at Z{�nݺ�͎puF�`F�$! c�Y��a�`'
�^��g�
6j�(�H�cǎ-[���.pa��Uׅ��̧;
�ۥN��� ���	�h6�/�%=��9U�U���Æ
#m!n�0��������a/ʙ&e�ԩ�~��D�! 7O������(},�e*T���c�S���߅��^\�+�C	�:ه�_�=k���֮Mn����������z�V��I�']tu
2�D���d�k,�`F��U�A0М�ʙ�CYX�cѕ�]�t�iyڴi���� �

̘Z�`�}�ꫯ�ܹ�C=t��1S�y�`
+��ͤs)�	0� �����
>L�y����3\2`_��P�������B0��СC�|�8x���?@�x�
�`!)��f������#{��ñ!����x�
+&���
Q���-������Sҭ�ފO��FF>^K�,`��F�`����1k����G���ܕ�nD�\���o���'}|w͚55��L���A�

oȱcǚ�jԨ��w;��㧧�D��S�SO=���7���,RC/��"fA
>|„	�����
;\�Z�L(��@Mx���O�x�
�`!)�����޽{�]�|yڃ7F�Ai�������8A'�$�{�� F�]�v�>�gϾ���&�9������Cˑ#G�p쇞�H�OF��醁(7tE�Ձ�$d`�`F��o(ñ���!����
hV�?"f�9܎��� ,dE���0D��
+�HF�I�&�^u��A]4b�С �6l����dA�Y�O�~�]�v�_2�/����f[�����sxyȦںz(�T2.=sJ��'GM�5�o9�٘�ԯ_��e�Q!�+��;D�qbŊ�Nx} `��| w�����k
=��QR�Y���
���v^�N.��`F�� �����>�*/�0�
_W�|�M� <�)���6	��6�x�:(&L�J�zn�9�$֞�ĥOh�O l��V� �cƌy����Q��b�����
� FL�
Hkվ}{X�<�����ӯ����zƅ(��� ^��
Co�M�4��.
 �k�d��	���GE��,���K��	F_��p x�$T��f���I
�чΈ�N���7
|�A���!*�����k�żF��e�pa
$�wF�`����-i��u�8<�`\F4�H�"�8"¯�r��
��̌��M�������IN:u��

�jťOh�5��O�����G(Yh��o �
�
+�����ѣ�Q���V�:rCI[pp�I�����3.�C!-�F�
��)��6u�ԙ3gb� ��G�"��Y���^�khh��»>G4n����x␃&`�5w��7�j�#HW��p�@��W�U�������}W��Ryx�÷
+�j!b
B�ϝ�r��"#�0� #��(e��"�\��V~���
6���3F�
�

2d��p�
W�2��P��9#�0� #�O��}?ͻ�qS�����
����Ȥ�G���6v`g��)��˖|����#���~�oˋ7���	�
��'�|
+��0� #�0� #�d
�b����d��G\Yd��O��l�˚rQj�pˎ
�Up/񖏢Cv��5}����0� #�0�@E�Ƅ�cŃ'w�?�U��Сy� <O	�y|n�FOn����g��vƹ�� #�0y�
��1b���6�n��!��|04Q6R����t��
~��[>�;�������|F�`F�`�#�
���F.�Lw'��a�G�YgF�`F�`��� �`_Y0c���嵜g
��
Ƭ'#�d�F��k�Nq1�=��O?�tT��R��~�^�v��P����v�:#�0�@Dt|e�"�=���n~^x!�"Y�z5\6��F�ad(�
l�'��"�B�z��T<*��rT��?Dv�3������q���$��{�5�2ȡ�Ԙl����zJ#��!�~�!���	����k����"�4 �ׯeD3�#�[�޽)�x >�C�����y�f�EJE����8_��-��@�^���&b�,�m�~*��v����d��
Xpu���,��*�~El7��,�
i7k p-F�`B���f.#"F�>p���#
�ҥK���0s�\۶m�
��([���jժ�E�/^
iܭ@�~�?��K.��fN�}V
Y��e�Q
�fapz�d�Aj4��-]�4rC SZ�.]���CP�!JK
�?"n��_0�W^y��A���H�L�x���I[,|L�-�����
+={�D�	J%��*`��d����$�����K/��-�O��..؝;w�"��p�eZ�]��_��Bs�UNV�9��0�@�F@��$͜iWD���������k�f͐�Z�3-�x��9s����:�nݺM�6�p`v҆���ڵӇ�\��_T�}�|��[�Jl���Ҥ��Tؕ�
̨0��H�GGQ�!JK
�?G��	�4�LjH�4h ��N���y�ĩ_�� �]���e#�2���H_XF2��#}
� �"�a���S�N���?��#��ы
-T��/��
�+�NMTM�؏������V�~��5jPa�X����q~'M���C
�l�O���h��p���_�뭷BO�Nq+�b18_~�e�c�
�'z?��ڭ�������Ù�;���n���8`'��
96�5�5oCǃ_�y?#�0�@6 =Vveŝ�E��v�������|ǎ
��
8 ���_�����#�8�[oݺ�[�np<��7��������M�w�2ePrɒ%q5�\B���
2G�p�y���;�� �"$bב��G}>
�k׎X��# 0� ��bx������H
�4ю�H��:��2e�y�!I���	�Z�W�/x����K/�o��ʕ7n
	�k�O�n��n�����m�П}��c�=��bV�T�ꫯ�
!���x�t���ڡz:���.�{��'_+� lc!
����x��`F �p�#�KeY 38	y�V�^�S-x0���5
+�X��v�رe�<��b��d�.li�lڼys���
��
�/�2����p���
�s�ӿ��
+�?�n\`�}���6m�91�P�N
���-�����҂�馛`���� H\�ra?7n����믇BT�bE|��'
X
�n9o�<G�^x�V
��>�_�dI�������O?���+W���0��g��w�ĉ��"f�&$x� �������l���Ox1#ep� K~��'�$@ {Z�
=��V��/?���t�˯]�w��'�k�q]c�<I��_�/��:̸ #�0�@|���q-r�E�Wn��iӦ�.6 �
B���`�}�I����رc�X��riq3��
�5L�f�9`N�a�� =
�\�&�
�p0�2|ʇ�+���C��� |�C��
�!��x�A�?��W!�#%� �Vh��?x|���WAJJ��
+���8���gN������
�ЩS�⥑ƃg�rH��_���U���_��I�@��
+�А
+�]$7�~�U
�3���|��~x�)���jQ��!..�0� #
�#�1
�
az_�j��$Y�=�o�s�9X��)��M�e� ��r���cǎ5���R'� ��,/`!�pL�u��'O
>|��	���e�
Apˆ
�}�]<M�Q� #%f�ժU˄( �������u��l�9��� �m��t�0�
���p�
Ղ�	\�
������*���3g������?xLѤR �]�L�v=��b�G�=QFH@����7:�$ܳwq�o�N��Cĸ
#�0�@V����U\�4����p;6�@�Aa+���!��
VJFbL:x𠮂�.C�aS�Jg��@>�
x�gAp�Ç;��͒�����8�٠�f��(�]�F��D�|�1�
+��pE7���G�ǥ|�,U
r�ˈ�
ٌ���	�/
L�ŧ�+��"��-NM�,p�E9$#
b�
+��
�2�૎Y�ݮ�
��n������

\2 U��-��+�_�t���8��+�!�w
��b��x��&\�`F g�qe�B	3̐�[�
xRb�>�W�[`�Q�e
9,؀e�1��h8��C����X{���
t��	YG u�۷/�;ã�)0�p�P������b�$��Y;��۷�ۥ�[�>>@6u����p��y���i[8k�q

���AA`���h
&2���s��
+��<�l��)oz8������o��
+�w
��;��'L
@C�i�v����K�֭@=G��G}���
�a3 �;.Mp�p>Ex�û�)��B�_��
�g�C:�<�,�������x�[8/%�5#�0y�C���V�,�TǤ�1c�`�

�0!?��Z����̌
�]s��1
����DM at 2�
���`�
��݅��� p
�t�
=`W�W�A�@
��n�o�N?�M� 0��<%��"ā%�8e
:t��
�B���Z@�k׮��m�q�ȑ'�x��MV|�X
&��s���~�
�q�=�C \t���� �qA��ڃ����5"<�N�~�z����{�	�� �U�	�����W_}U����Ъ1��N�Q醑!��ԔJE4�!��hʠ�4MD*�$Մ��H5D�A����t�%���
�t�S*��g���������}�9g�s�Ksf������Y���Y�z��I�w
<.ޥw<�,Q �ۮR��O�~fx�u䞖e�
��>3��ْ�>Y" " �G��Ϊ��3�-Y�w�g�A�k�����?�|�_�O3�$�� !4��F&�x�7n��T���%�o����q57��L#`��'*�}Д�
;�ܳ�ǃ9昿{�
��
�`�ꕳ����;C
2�
��<Vq���4o�����ѵ�i����,
�
a��V���t.�~���SfY
WQs�|(ol
�������l�e�Ni��P����Y�9Z�N�~h���.j�~��T�)��xbY
W�᫙�������禹ȷ�+��.b�0B��_�nٵc#�KD�蝖v���T-E@D@D@D���u
�FZ���&N��<,�nٵ��*P���_Z8KOHw~帵��s�.9" " " " "B��#�"���Qj�����������M�
��ïl���ͭL2�
.���r�Z$�֭#m%��x������_�;�ǗĨ�Tpn&5�9NA`s�yI�d�
ύ5jР�]�甃&$'��B�[dEu���oٜU���׮]�r�Jg�m����ƹ�T�~Nj@5�H�@���X�%�xT7�
+�

�H������@�X���$�=��g�ѵkW�����J�T`s�h�F7�\����)>GmۥK�:�2r�x�
j���#�_��'��
0�9ߩS'>ԹpU�s���4i���w\<E@D@D@J�����I4��!ԅ�V�$�ٖ-[R�ڜOŬ-[���o��3��
|<`���3�f�(k[�n���'R]�2��ڵc������N�k
+Q��D�~K�RI�
'@�t�c��|�駔��
��β䔗�o�
���J=(����z۶m�V���sb��ի�w�}x���
���������Z`�R��x���0�۷o�X=�f{��5k>?
�:�)"J��ƚ5k��0-�!"(�,5� n�g�>�g�s�
�4=��c=ֹsg\��l��������&M���
s�ε�x`Mq����;Oܴi����۴is�y�mذ��%���Y�`����C/�_��'�A9'P�vm�ر�p`��yo�b�
+b��FD���w�����E@D@D�$X�c0b�0"Fa�*���c��߿�(ag#��~�p��
�Z�r6�֭�e��.�q1M�8��K͙3Ǿ�
^N�6�@�1cƄB�7�\5� �_~9�a��Ķ�;.�" " " %N f+�Z�N39�`�W�
g�r�v��w_q����8p�����q?��׷�;H/�l�z�y��m޼�
Ī�4?1������
�̺��3g��7�\5(��o���kժe p�k�.g|�ƍy�a6g����
Sc�
!�#T��u뒂�3,���^�����^����^0������� s�C�S�N5����ƍg��cǎ���޽{���*U��2tm_j*�, %
�11�EÆ
YK*," " " ���;�����x���d��>X�d�ɯ�y���V�xeҷ�H
>|8�6�����
_V����H��L�'k
O�o���y��a�ըQ�H��%Y֌�l�sp���bK�"%�m�������ǝ�Yg���"�"�Q�E@D@D@��@W�(�2:]|��#F� �2+�H%k��d��J�޽�Q���.#�aذa~ǃ��L:;x�`Wcl�d��
^
z衦
;-Z��no#��
��xe�D1��f+G�[��C�K5�:	�H�=a��{x&7,���" " "P�d�9���%K���zFn
���{`��%�G�7�� 9�
+s��H� 1~gu4�s�;����`���9���}�>8X�z���E��3dȐ�o~vH^ڸWz�jެ�#g\a`�0:�"" " " " �K /^9�P�r�d��6}�kǙ=�(��lpp�®�}��[��];6�X�ND@D@D@D@J���n_^���RǦOv�W��GD@D@D@D@\
+��m�8[�D�D@D@D@D@D@bl�r��u��`����������@Fȳ�
����r�
+�>���X��'�`��֭;�(�gF�u�V�2�����%9�5jԠA�t��!U�i��?О#H0;�8N�ӧ�Ν;Ms
+���P��
F�Z��Aj�t��i��W�O�9ޫW/�h<.3FDM
+[�$Y�3r�H)_�9r�ڵkW�\i3v7mڔt6O?��9ͼ���8������d>����;�z��{�����={"��n4h�)M��c�Q�" �����)�W�jեK�:�`R��
���G
a�B>����?��G�q�
�(�9p���W_]�zujC����\sͶm�R�cN�={6�&��7.�]SS�G�
)�z�d�0�+�@ϵ�^ۥK�U٩��9�J��+FsTk�}G�mժU3����w˖-�+�|4~)cf��n۶m�v��qj�a1s�L�̘1�}���OA>�[�/�&ꃟ�.i�q���ꪫ(�:-<��Y�[��,��7.#��
���6�I���dʧc
��}�/�8q"S�j�p�B�ˌ�\ʈ������p���m�\N�����ã|�=��L�e�i����ܾ}{��{�W`+�ڵ
3�&��M�F���xb�588o޼�\~L�ɓ'����r��7.��޽{g͚��C*-jHH� �f͚�V [...]
6��]�0�vذaʉA�x�G�
ݢE�P[3Q{���ۿ
{Q��7�s�9�bŊ���w
+	��C�����C���7�D5��k�F�
;v}��t��
��������B���
~����iժ�����?�,޿?Ѻ� �
+؂�D$��iΜ9N�p-O�4��΃�v<��3e�o����J��n�	�5�ʘ�ab|�ʼn�q-;%�
}�i�P3fLa�
=W
J&S�T�*%E@D@D��p���/��r��=ʎ-�s�~��������w�}7V/~܁ڔX՘�'�7ùB��������{�N�5i�z���_�h��
��e�'ƍ��F�Y�� ���ؼy�U&`\�a�D9c�����-�߰S�~Fؾ};zԪU�hÝ!wh��!r���W�"�=#ԕ" " " �r��l�������^{��?���{I�Ff�^x�v����Z5~�c�fgg�޽ۊ ? y\���
1���1"
'��I'����ߧ�l�b��`�ԩ�H�L3KhY�~
9p�^<��qLl��a��tvMT�T��R<����p���.��o���j6c���-ie�W&=
��Ç�l�K޴
/��$�l��.̒;�l`��͆>'�C���n��8ѯ��jɒ%�>�(��и�D9N&���{�=s$x\F
�F�ղeKg���~-�2p;4}��~���w��-�.�
+ƥ+�<�f���AD@D@D �@�B����.eֺLl6"(8�
qX�ݻw7�\v�e!�h�P
+L�6f��zQ���]0R�ap��V|Hԧ^�zT
���	�����_9J�r�
�
�&�
��C�^sW�GD�5_K
>$�#���	x���d�d/,{-u��" " "Pn	d�=�!�����X�����'��~qT�����@
+���Y:ED@D@D�0���;���)�;vعgߏs
�1��;`�9��:�+gg/�7��!}3ߥ��--�7o���g('�X.̰t���������d��B�y0�('��aKJ
�ڵc�v$%M�E@D@D@D@�
�e��l�I^�r�x��KĦ�v�q��Js���VvX���P��M
��I
P	(��\�t/��x�|Xͥ�2Jg�� �e,W�N'S�(.�d���������*j���ɲ
l*����rnO<��[��J{��3�n�JQ����TjhԨQ�
�:#��/6
ȅL{� ��<5����g�Ν��9�2xN�~�ІJ%Ta
5P:u�`�������^�z9_�m�|�
�ҏ�߸���9V�����ȑ#ɠ�r�J���iӦ��y��
�j�刋�*" " �� �e���Ϸ�cY0�ɄA=��={"��n4h�����c�Q�b
����)�W�jU�9;qaR��
�����5�1���y���q�
���9p� ���W�Nm�w�}��k�ٶm[�
De5�,^��}gc����H�|�)�J��:@5�|
`�sWF��k���K�.Vg��S�&� 
E@D@D��x�i3_��;o�:�ﯽ������˃ᰒ#�_P��輭Z�j���}�nٲ�re�q��/e̬
��m۶m׮
;N�0,fΜɑ3f�o�2򩓇���_�>���+2w5﫮���y�\�V�Z�9ꨣ�w6nݺ��
[�|�)�J���Y���9�1�X(�ǽ�ĉ�rVۅ
:_f�(�������UWv�������^z���&a��K��~eg�눆�D����w
�{G�
�
4�w1�۷o�2|���
+l�]�v�o��Dɸ�	�0�ꤶ5j�~޼yI��טX�ɓ'�8RT�&ߏCZ���$@�M͚5W�Zet`��#��u�{v�MD@D@D �x��c0�ҺI�&���ܹs�;w��K�&q���M�֯_ߦM���;oÆ
�{�[$n��
6l�rb'^�ѣG�h��]�z���ܻwoԠ������Kj����sNŊ�ϟo�� ?�Catӹ�@�v�ڨ�c��
;��v�#D��?T�" " "P	����_�$ib�fͲ�<Z�je�����1������%� [Ӂ�d�6͙3����I�&��y�ؾg�y&������S�7X)x�M7�&^�;LL���q-;[$+?�Catӹ�O����|=�������Ia1��|�[�H�<�O|'�s�����Z
,�����n�^���)/��1�O�o,ns�,_y啃>��s��a��l��կ��:�ơ��O���O�7��
3fL����S$�c����6I��P�tn�ؾ};:� u6�
�Cs���W���+��Ֆ" " " l-������S���k����{�uב��^�ovp�b�?�رc���w��m�"? y\%��}1���1
+y!O:���>��g�/f�
�N��I��P�
�N/Yd��8&�Q�aÆ�|�S%�2ȦBn���S������@�$�3�Y��Sп
���*{���o�����wKZY�I��y���8���V�\��
/$�1;��
��$X!f��ω��l��n#N��Z�dɣ�>��:8�xS�]�c�{�g�����s\t�w�|N�
5�aӧO�ׯyW����"�`\ڲ��sk�J������@�!��;Ҙ��o1X0W��ҏ�_f���f#��d��J�޽����.#�E{�R`:X�1;�Ջ���ڐ�
��l��C�>��գb��7�L8���G����ʌk�~[�l�~�
�&�HV~(�q����23w��@��0�|�&L���+� �$�
�^��x5(K<�߬#�h��%����}��3�4x���F���k,"P�liƢ�H�E@D@D@,b �ht4�s�;����`���9���}�>8X�z���E��5��!>��g1iq���ޭ�5k�W��v�k2Gp,�*���������@� �,8��##^�/7-F���(lZh׎��Q�G�����������p���l-�����nw*۴Ю
W"M"�rN 7^y�|[H/���x兓�*�h4|�b&���b��D�
H[�����s{���%���n٬y<^ٺ�c�H� 3
AD@D@D@D@�A��+�JNN�(
�>� �"�
���#�=lڴ��Fݟ�i;;b���(���ߴ��v�i�PE@D 5	y0"�1_���'��u��Qi�}F�֭[)�@]_�J
�5jР�]Bg�\|�Ŧ�����p�GsJ�>}v��iژS\?�~�ОJ%�Kf
5P:u�`�������W�^Η��O�K�y���o\�=Ga9$r���AO=]���b�0�JY������^zi�)]���4/�~��_~��U�T	�y��Ҍj/�1O
W�~��K��Z��]\/$�Ԯ����$�c��E[��X��=���e2[Ϟ=i�Iz�
7
4�ԑ~�Ǩ�۵kW#g����Z�*���1����
�P��Y����<���ǻ�;BY$�s���	W�^�����5�\�m۶`9��v����;S�U�G�,�gۈ���8�0b?n����;5�$�
����o��"�S����.�~+V�x��G��dm.�(D�2���"��Bw����o�\�(
+�?�
%PD@�A 709�V�
H&Z�}�2��Z�jF��}�R
�re�e��/e̬���m۶m׮
;���9s&Gf̘��}�ȧNހ��K�?7~�!C����}�UWQ /����=ꨣ\?ϭ[�v�a
�o���m#�J�㐎����ͳ� =ӥO����[oq�رcG����'z��PW�~����4i��eZ�C��^Wel�|Nٿ?�J�?���:w�q�F#�\p�3���O�i�{��'Ǟ���t���o����i����ܹs�X
+�s�MeM��soi�s�i}8�2��7��8���qy���'�<�K�ah·KɎ�΢����
x��r�/n��={� ��￧��
/�`�����'f��=���>r�H�
<��,s
D\�SO=��{���>v�z������Q��d&G
F:2��Ľ���(�ڣG[��c�b(��2|���
+l�]�v�ov�h�&�W��V�F
�ϛ7/����1y��
ʃ�m����%�B\܊�ߴ�4
+
7n
e�q+�y��~���~�3fL�ڵ]��(

8�g7�x��-�|
����H �[��1+B����͚5�@&�&sܯ_?9�kW���'���믿ަM��~ؾK�z
ڼ��;O>��ĉ��.]�x�U��ˏv���q���|O����=\Jv�v\������QS�L�������۠>������#���?�!��
^�
0Ox
wY�������g�y�(�ꫯR����^�3g��O?
<�=�	����#/�E@�*��
+�:}�k�4i����p����Ƶ�v�Z~�-8��ׯ_��y睷a�ܽ�-<a�Æ
�PN
I�6z�h\n*I�$���ۻwoԠ����/\��0�
������p(�n�纸�Я�ݐ^�ʼ�e˖}��g�^{m�H	
+�>�׿�5�:
�$>�������w� ��\��b��)ʜ�e���Mc���L��ܵp�G���y� �HK
W�����‰�C
�"�2�w��J��%�`�����gX�߸���8.�~����O�{>\Ja�v\Q�^d��1O�+���@���e˖Ln��>���~w��g��=�����f��LE3����>
V0�p<�E)���Ia��]b
����b0�	�8O����C4����Y��\g�/ �^5k�$"�iӦ�"�Cµ��g�:[��|�2k�7O}�Bǿ��G?��ab���֭?B����P�칞�R���
5jTZ+?BpRb
:�����
o֬����bp�۷�Ւw�u�����Ė+W�d�6n������Q8-i��o�
#9q\��'�T�^=��M�Q�;g��3(,�Щ�7��8G�^�O�ߏ��2)�׊�2p$3���Ɨ�q�}�v&q�]wa�r��w����qap��W��R{��aD�n�����	�j "  [...]
��U�reN߻woD�~�Jv*�]G<漬Ɏ7X����A��`�|�㼸��[��?t�ޝGƗ�ӯw{�7b���D�f^y��9�%��" "�n�l��|�Z$*$U��_}<�f3�/�ݲlW_�8��ί5�X�@/��B�Q����0K����$o��ω��l���E}��WK�,y��G1J��
�錅x_���\	\�����OV~(�q�!q��gFh��E�e0>�yp���V���?��OL�18%peY,��A�A�N�ó#O���"�����g��,�>}:�
+8�'
|
'L��Z.&�]�efTb�~r�G;q\~r��9(�+\t�E���\&t��g����׋�#0.N$i
,����gN��3`\��\��눶|���[V��#���0pX�`>����>#�'D��Џ�
��_��I@׬0a�2ӐIđm����+O}������b `����q�9�`ete!��f#��#��a%�0#!
+��
�R	�`Ɏu��Z�(i����
+��l��Y�>����©IJ��74^��`
#�E0�'*�@l`e��C9x�

��G�1��F��f�H
�� ��ْ;C
�C���Js��UG�
+R%�m�` ���ٗ�|Z�����LR0
�p��O=���E�*bE���ׯ�
����SN�x� �f�<���GR���zq}$�ʼn􎇞up�kD���o\��\����W"� ���
+2B�o@��,d>� �!�~�)�P
<l�aժU�<�zg�b"�CG�N��U�>�%�" "P�1
���w,g
uJ�eK�>���5s�����#

�`�SE��d�@Y%��)L
#�*�t������YR���[Y
WI]|��AHcb���J���+i" e��]��8�t��a�}?
�9x0��ݻ��� �T�����_
f?8d�п��"�^-�7oV A<.L��\�/��&	��gͦ�HQlE-�O��(:e��q�v����J�����@Bݾd���K�b�c�B�vl֎b�%��J�����4�Ón�y��Iy(E-�O���7ePO,��*��G�Lj&" �H 1
9�<*�n_�q��8�4ue�B�v\�8��[�Ŕv��ODE@�� ��<�,� ����/n8�Tsn���E�xe�P�������$�P�e2��VD@D@�C }��s

�W6i��L�rsg�rR)��3<I��!યdc0d(g�5�&" " " " �L �K6�r<3\n����3b)�b�B��I�g�fS�R�T��# G))<��4&��铜ǧ�vG�q	1
(I at Q雗�c���/��,Q�'�x��ks�f�
 ��5jԠA���)�
��j
����&�����b���.s��w�ȑ��Z�r����z&�ӹ���3�x�H������@�!3�ㆲ��-�3.�@����:a�m�	��n��
+V/\���������/hCi
[���_|�E.^��}�y
n��A��°��?�3�v�|���C�l��t�x.5��jF=ޥK�:�5r�x�
�����#t~��z��=
a�R������^ۥK���r&M�d��;^��hD" " "��r-�<C9n6Ƕ�<����GI���6<j���*�2����R����o�D0 ���Kʽ�o�s6���9ꨣط����K�iJ�Q���T
%�TƹF�u���I<
��bi�ڵc������N�0*K{=`��7Ta5(c�M�q�3
+�q�G�eg�_�,þg�
;|��e���#" " M��;9�T>�B�9n%�F_
r۶mTL���g��a+�ڵ
?n���aU�^����ãL4����t
+�1y)x�
+�F��0��ij��޽{g͚��(�NuJ9$��a͚5����C�O9�!�����@)%@��A�O�C�!���^�פI[c߾}_}�bɐ�	��5j
6
�J�*�;w�˖�O�;�6��S��s��Sx�My����;�lڴi���mڴ9��6l�`㒝r,X0~��Ю��
=Q
��ڵk3�
;v�q�����Z�b��f#����x�ሀ���@� `��������`X�Ga�y�u1��

?�e�4�ڒ��9�����m
s�YNeZ�j�lܭ[7\��#�]`�b�9ͺ�9s��w���iӦ�1f̘PU�
=W
���/��e�fcb۱�
/Wp4X�,Y�Q� ����bé_�>�b�eeeիW��ƻ�]y啃>��s��������?p��(է�ʘ�i��.p޼y�7o�G0�1�O�o,�s�,#��D9�N�Xo��������۷3
�ƝG�x��7��lΠ ��e��#" " ��@��l�Ņ%�
eݺuI���kN�����~��>���{w�mdj{�
+��C�S�N5BHB�q����رc���w����@Z���+�b:�, %
�11�fP
6dmhY��"" " �@�V��*{��
<z�h2W`7,Y���W�����N�^X�/f�>HzZ�	���<|�p�
؜�
_V������hQ� �
����A��¬Q�F���oJR�����~��*�C�j����������6�B���������@� `��YYy�0�����L��#F�Y�u��C���+���G�R�
S2�a%���l�]vA,
+
&�LRK���1��M�A�/�{��-ZXw��C�^pW�2q��f��&��-�D��H��K�8�sO�0����
+#�R3�L �u�)�\�t��%_�*%W�Rg�̛�d&�'
D�� g\iQUz�����@�!@,��X��ҹc��{��x0���
�w�v�
�S�rv��y�g~p��o���^�ݢy����H�
2
DD@D@D@D@�B����LY�L9�"-�	���];Q�d�r�@D@D@D@D��p挋�"���3�\���];Qk��
���������9��Z$j ;�\�"��D@D@D@D@�%w-�r	A�m�,��	����������@�@�V���dX�
�>���XԴ3�~�m*z̟?�}�[���y��?�]���=��VN�^��b�
r97jԨA�v��S�!�
a
��دf�D$@Q��#G�]�v�ʕ67�6mڔ�6έgϞ�#v�f" " " EM�@θ�[99��

{��M����;/�������mư0��ٳ�nݚ�����)�W�jեK�:�5r(A��
=z�*��o�j 
��u�N�(�s��v�����Y�fҤI�-���)" " "P�b��\�qtc���>���
r�%��}$��;:o�V���ߺuk�rhT�k۶m�v��q*c�f��Ԧ-%��o�(�e� ��1�yB�ŋO�8񪫮r��Y}Ϟ=�-��e���#" " ��@�xe��
n0���ݺu�ӧ��W_]�#��<yrNN��S�a(�o��V�v6ػw�Y���a����� z�f͚�V�2Cf����3|�TD@D@�$���p� ��ݻ�ر�U�VEĥI�&���ܹsm/<��X��	��ۦM�֯_ߦMBA6l�`�i`�,X�`������z��s�k׆ 
+Á
Lg�ي+��mDY\~��9O
_D@D@2�@�Z$�p���]tQ׮]������	n`[s�e���Ƶ�씸
l\L�#�8�uTs�̱�"��ӦM#�c̘1���z��@ ��/��������;.�" " " %N���q91x�_���o����Z>�����
{-�W�~}[s���.���͛�y�f{��|'�7�9C���A��Yw5s��P����������~�Z�
��v��匏߸q#=��
"�;^�aj�" " "P�b9.�'���#0"�c`<��8kW�^
0
�޵��XՄ�K
E��C�S�N5�^�hѢq��?�رc���w���_�JZ���KY+�X�	�㘘xáaÆ�%-�L4|(u0��s�$sĹ�{�W@|��8p���f���:|B|6l�4�=zt�s�� ��/+��{�=�#>f�?/��B�<���-�A��B+۵l����v��l�)l�����-��� �aӧO�ׯɼ�:�,�y���+�ֻ:(
+
I!":��6���{����/1X�FE�S��b4���+�`	��?
:g������c��r�)� ��A
�h��f�0rۨ[��+^٥���o��jP�	

:��q$�0a�=<��g>�����d8�<38�
��ɩ�\�t�K�gT�N��y��̝0"�#�D ��3.��2" " "P
�7�t��a�}?
�9x0��ݻ��� �T����h���y�7��%�y�͚7��+'���<��E@D@D@D@�
��+��}� �5���M�������Yu'" " " " ��3�rI���];���t!E@D@D@D@D ����Ļm��4�ɮ�KIS�>ٵ��0�$" " " " �"@�õ
3�
��QK�J�," " " " J��]��ʱJ%�����"/�ۙï�L��>��
Y��Kԙ�
�5j�]�g�
w�q�էO��;w�ۛ�fϞ}��Av䧞z�#�N�~�m*�̟?ߏ�������OX9�z�2'�f��`��4��5&��<�����⺾��Pg�ȑk׮]�r%�ŭ
M�6%��s�ٳ'��
/��c(�
N�\c�]����˗W�T�jժK�.u�~���1"����>��;�oy��&�-��r�7.\���g����Ku�w�{��M)�����a�f
k�oݺ5q>��LP#�G�
�ɯ��ՠ�0` 5�;u��Խ��k�t��
���
�y�[~�K/i." " ���1��Ne^z�W.��L��m۶k׎
'�#�<�裏��
��-�G���>�(��UW]�+�����v��ھ��
r�%��^	ӯ٪U�f۷n�ڳ�Z������6��q?w��o��jPJ	P��g��[�x�ĉ��α8˶�ٳǾ�w��r��" " "P:	��_���H0�S����1�)g�4���p9�am���۶m[�j��=A���ݺu#��ꫯ.̕��<yr��:X��{�Κ5
�!�Qaz׹e� �u5k�dꚡ�C$R��F$" " e�@|_�U|�����Cٴi����۴iChĆ
l\�e�e˖ѣG�h��ؚ����+�:��c=�D���w��ѪU��שI�&���ܹs�Y<��X��+�9@+g���Ǐ�ݯ��ՠ��]�6�39���`:;�V�X�.o#����x)� �E@D@D���-��5�
�ʱ#qGs|u_aL�X@6"&�G
���9s�XX�vd������;���~�/�袮]����9Q�n`[��ea�Ƶ��rδi��3fLh�����e���_�rU�9g���2	A���%�g%�MbW
�<+�P�2#�*e܉�ErΐelG^�^����_?�
&������-�]N��チ���OFa]�~}[�4�S���͛�y�f{0@�0(�����9sfh�����������Q�V�ZFy�w���k߸q#[��
��;^!Hg(�(G��
.n���/�p�$uڢE�ƍg��cǎ���޽{���툉���v�׾nݺ�f�
w6��<�s�;uu�r:t�0u�T#$X�Q�*Uh���0����H��p� [...]
+�5y�=fc?.�p��߿?aͯ��
+�ǒ%KL~e�v�WpL~�_Ng�k��SX�G~:�2X#�[$�#5�3���H
��N�2<pn��O�ޯ_?����B
n&p
��&" " e��#"9�"�O�P!+��[��g�Al6*/b��p衇���a
_�{8���_<b�2+c���Ӊ;l�0�>�����:��
<���O9�s0X#��
�ޮxe#-��h�ժ�:t(	�H�=a��Wx&%,eC��" " "Pn��139��k.g
sj�eK���-�Cǟq��A�>�������@E�P�W��u������@��A�;���)�;vعgߏs
�1��;`�9��:�+gg/��`�Ї�
�s�Q�`�!S{6kڬyB�ं0�����$��YٚȎׅ�WB���];T<)!�ԭ�������@i#w��}v���y�m�F��M��ڱ�ӥk8�VD@D@D@D�D+97F\�\����_�(�r�6}�k'e�:QD@D@D@D��01
u���WD@D@D@D@�r
��忰y���9j������������#�
��Tle[�$8�|@z,R p?���8B�>��
w�q�5�ӧ�Ν;Ms�n�č|����v�x�^����%����`��
�%}N9hHm
+�8ϥ��S�~����P
G��;#G�\�v�ʕ+�8n�5mڔ�6έgϞ��w�pZ�l�B�
YΕ�o+0�#�ߺu�_|ACJx8+W������?��G}t�
wI~��/����ŋُ ����lư0��ٳ�:Q����+U�T�jեK�:�5r(AM�
=z�v��o�j 
��u�N�(�s��v�����Y�fҤI�-���)" " "Plrb=e�Y9������%�V�`�̙H�1c�v$G
y��GM=<�[��#�jբ�QG
�~�a9f�V��=�u�֞��0�۶mۮ];v��
��QΚZܞ% �'�Eg�)�({�q�3J�qO8q�ī���	�Y�|Ϟ=�-�����." " %B ^��a.�<V��6�W\���k�.���۷O
.^�!Bm�dA`�N�<9'���?�
CM<�j�ݻw֬Y��0h��Q�E 
+"�j֬�j�*Ә
"����6" " " E��`�`�r2j���F�Æ
�<�R����-[��
=�E�)ۦM�4��E�Νk����bŊ���w��iӦ��׷i����۰a��K����`����LJѯ��ՠ��]�6v��a8�����+V�X��dq�
/�<5|(f�q&#�
�ͯl
�$��e�.��<�ؚg�y����͚��6����H�V��B�u�k�y��
��4!r��Rs�̱�"��ӦM#�c̘1���z��@ ��/�����O�m�w\0E@D@D@��@�b����1[9z܅K�+��r����{��8�&���ի_��N8!�֯_��!��SN׮]�͛�y�f{��|'�7�9C���A����6��[@�a���rM`������q�F��3i�ƍ<�0�3���x���������@	�u*;{��2��
+�EҮnݺ��w�����Dvfƈ$+�F�#
:t�:u�9��o��7n��C�
;6;;{���.���2����(��e� )�0���7�lذ!kI��56(��������9�>`�I
��
p�39@���
+���{Ϝ�����
/�����~h�w�
Z�5�e˖���5k�`͆͘8�[v��FVX܆M�>�_�~$�&
��_y��
+��" " " �F��
+v�W���UR��
����u˻X��G�3�,�
�S�EN9�s��
^Z�6;�)��0�
�6�╉Ű6��
�o�զ�:t(	�H�=a��{x&7,�p4p�|�0���HV�S/[����5�y��k�?���7>�ey�B�@�	�3.�2%PD@D@D � 1�~
��ҹc��{��x0���
�w�v�
�S�rv��y
�<:�'��
+��xҍM�l����(X�O�ED@D@D@D@�=c+�()�Pe�6}�k�
+&�����������@��a���*�,f��T��];��Š���Dy1qC9w+
K��Cl�d׎����������;gq~ݾ|g�s�_��E@D@D@D@D P���+ڢ(�e�P����������D$`+���+�;���ٳ��n#�q�F�
{�1���> m�q�
��>}��ܹ�yܼ�����t�}�^���������_l�s��
�8��|?U�>�5r�(��
4�K
�rЄ�p�y�r�N
���xmԬ���ȑ#׮]�r�J����4mڔ�6έgϞ�K/i." " e�@B
F�E}Æ
���믿>~���^z�Y������X|���?��;������y�1�6{��[�&b��_�R�Qj�Y1�O�߅I���˗W�T�jժK�.u�4r(3A��
=z���~COT��K`��Ը�ԩ�߯���.]�8��,s3i�$������A������@�!��
�q�n�����Z���~:u��:�
y�G}4��l�<z1��V�Z5K�u�֞��08fΜI�3f�o�����$���i޶m�v�ڱ�i�ގ��' !x��[f���"@�t�c��P�o���'N�ꪫ�m���y2c��;.�" " " %N�`
F4�2��	�hذ�ў�իW'��,a
�6%���ɓs��Rp��+��w�څ�}��)��C��/�=�2=:
}+d�޽�f��w�aT�O
+d�qj֬�j�*�;D�d��RFD@D@D YN�/^�:���۷ӪV�Z�-;��.�x˖-�G�nѢ��)�4ibk�̝;����+Ο?��3��jԨA�fk�*U\�&��S<�~7mڴ~��6mڜw�y6l�q��r,X@�I('�~COT�RJ�v��h�c��?;���{�+V��ۈ���;^J9Hm(K
��yfr!S���3�ܿ�Y�g6ܱ��H�V���u�k9+�e�:��|�O��UI�_�.���C�4��̙�ԟ�ӦM#�d̘1�� ���sՠL����/���t�1�
/�4((]�_9�C9wh.�Ne,K�?�F��$*��'�p��Q�~}[s�tNL]�v�7o��͛]쮼�����{���~���'�/�<
�N�o,�s�,#��DW�m����~�N������y
w\D9��lܸ��fs
�
/��������Z�`�I�g+Ǐǒ+G�*��q��6���L�w�61&�3sE(1�8:t�0u�TW˺u�O�U�4Y�~
+��%�i�ƍg��cǎ���޽{��tBh�
:j5(c���8�����g���T���J s���[�VN§
k�
����-�k֬a�
��]��<�9�'���{����{�~�mEz��
�����A�����Q����C�V��l�sp�E1R�,Y�>M�>��0$�&
�a��KV7�." " "�
�<s�`2k4�Y�w�}7	�.��믿�ꫯv���TřD��
+Wl
*�$7�h���K�jX76;�M��0�
�E�v�╉7Ű6��@�o4�ժ�:t(	�H�=a���x&C,eC��" " "P�	d�;���e�����x�Xƅ'
>��A��:�|���E 9�&%w�Z������� 1�~2��ҹc��{��x0���
�w�v�
�S�rv��y
�
{��'��
+�
rH̫<�ƦM�6s����������ʅ
����������@�(
5l�f��P2���\�Z$����f6m�kǕ@�4M:��������� ��Z$�.JY�M���)A��ZD@D@D@D�
��N}Q���2p	4��"�o�W���QWIʈ��������,��k'G1�?���c�
w�q�5�ӧe��0�q�f�S�δ1/���
�����㫯��
�B�{b1Q�N4h`��Y9�|�֭ۊ+�����
#�
�ի�KO�2�_΢��'l!א���U��@��� �kF�
�v�ڕ+W�L�Hnڴ)m�[Ϟ=��E	($
c�W&�rl�.�����"|���?��;�Ü�a|{���_�x�y,�ș2eʎ
;n��&ۘ��t6cX�m���*U�Z�*%��i?cƌ&M�PSp��ա�?{��[�&�
�/R~����)�z�d>�p�שS'j�_{�z���4�&M���;��㕆" " "P�	x䌋h/y�G}4��lq;��ժU
pG
u�y
��iܸ��ߎٍ�ִ7��V�Z5+��zm۶m׮
;Nɴǹۿ�	�
=:����oݺ�g���~ѐtu��Ƶ��O�~CV�
'@�s�c�QP��Ej���Y:˞�ٳ���x��Wꉀ���@�#@
���ֹ�KC~e\��C�ڈ�4��x�����n�]��ܾ}{k����Vvvv��w���99.P���w��Y�f�S
�?e�tb� ��f͚�V�2z�C�P��,�D@D@D@	8-f�a
�X�
޲e
N�-Z�ڈDG�Z!��������m�6�a6۞w�Νknڴi���mڴ9��6l�`ポ��ˋV����|��@�bŊ���w�
���Y�`����C'�_��'�A��]�6Jd�d���� �~]�FĎ
���
���2O �9u�����<�����;���Q��jj��5�ن�o��&񝘧�}��}˶�V�Z��B�/&�G
�z�9s�|�<�i,ĵ�
�/rPcڴi��3&T��~C�U�RM���/� o�Sc��w�TVʋ����@� �h+G�*c�aA�����_?�Bqԯ_��
+�W���1�q*4褓Nz��'�[�=��^�
�nf!݉��v��e��2�ҡ~nO�FB׮]�͛�y�f�L@��A���۞9sft�q����O`���(i��ٸ�۵k����ƍyb6g������4�2L����W�F�Dƿ�F�~����uN~�i^�hѸq�z�ر�%�޽�՞�
bB
+��N�
�N�j�D�J�*�
��(�b:7�	�㘘u�dÆ
Y��
+K7�
�R����cǎu��!y���L`
b|�Dy^x�'�7v�7sж���F��s��[n	U/Q��V����{�Hh�x�Y�ElI˖-���5k�`-�͆V���d,n��O�ޯ_?��|ۯ��J�j+�D@D@D@�83<d��̊:�
���"#���� �
z�;��m6
ړ�vٲe/��2�4B/�|�)tt�)��#���M�Fݺu]��ġbЛ�V��7Tm5�dC�%a
ɶ'L��s	�䃙��tp�:���ؗϭ�I�r�_V֯�6p����u�`��D'@θ��RD@D@D -����}Д�
;�ܳ�ǃ9昿{�
��
�`�ꕳ��[0g�#�����_����ٴ�ۯ��*��AH����������B�1e�Z6�7�MD@D@D@D@\r
+�ɠx�_*�.#q��i�QE@D@D@D@J?��
�l��R�_"��9q+��O#(R��rY�+)?	({\e�d+��K�ej��2�
+5�jcN�d����?��fK|7�^�^D@D@D�E �
�EHr�̷��
+����:X6GM�/X� y|�i��]gd��?����ի��q�:��ӻu�b�
+�1��s$T| }r�
�K�\]���z��
#��㎣�>}��ܹ��
�*[�
=���+�q��O<a�Ϟ=��
. ���O=��9�7.?=���ٳ��n#4z>��cN����I(�u�%>wec8�����d&���l��7�r��|�������z���\x��w���m۶���q�֭�����3f4i�䷿���իM�?���$�,^��}�Y˗/�T�RժU�.]�ijz�F���?��G�q�
�
s���;v�馛����l��6ǩ�G��o�q�
�>���G�
W��~
�
F- at J��?���^rև��
z�� �	psH�H�_��)�D@D@D�,��6�׭[�tȐ!��=����*
+ԅBiݺ�g�#�<9������F�
m�
}�ѵj�b稣�b�)�*zm۶m׮
;����'��#u�
`�ґ9޸q��o�
3����
7�}2�裏b+C�0��9%`\zzr�k�cj)�G8��`�8�^ 5(<&�s�=��_�Kc֮]�������á%%*y�k��ѹsg�(������

x��+W2�F�
I��ED@D@D@ �J-�5jp�y�"ȳ�ɓ''F�X!�۷��������Lc�!�yVjzZQ����Y��
'���^#�B�Po��V���u�XL�d�$\���
��ٱ�x^�r�����@�xJ�_t�E�
qc%�s�1�\z�ݻw�/�Q�¯��J��\{�
:t�q5~g
4����	�O<��{�7T�������D!���>�v{��M8o�6m�f��s�9�������Cݲe��6u5޴i�9�=��6l؀{;����4�'w�-�ML��٧�z*���1�9n��s�r�D3{�Q��&Y=�o��Y��nv0�-�P��R�d	pσ���#��]�� !bo��#�8��u��8��'?f̘�]��
+'�f͚5Q��E&�s�2]3o���P�j " " "�@*�2r�OX�ha��v�›ec'���
�r���w�mZ�fM�
[ϙ3'XZ
+zۗET���w�՛5k֛o�I2��w�}g��-wҪU��F���
�sj�(�g�D��U�K��ԯ_�;.��
s$��=+D��H�\�2�,0ذ�	�
�(�K����~�I%g�E���ܸq>� �2���9w�ÝF��<;��Ktr�
�UJ'���BC��(Q��!b�"��V�a����78��ޝt�IO>���-wb�D�ի�_�]��E�K�v�Ne�
�܂9GWI-�"_�)��>++�K`����%��f��l�>1�*�ԵSc���q��a;~���� ������5�vt��� �r�ԩ�׃ b
.��8��΍w�ر�7�޽;�յz��&�D���l�MC�
��o���O��V

��;=TO�
�
�Čb��d��9".5K��ƍ�Py(aNd�
���/�1G���˻����
+QWw�=wh�Y[y߾}�$�޶�]��p�ٱ[�m����^D@D@���	�C3�
rY H�K5\�K�,!�ù瞋_��8K~�y�L`Q�.���ɧ�<��I
�#fΜi�<��X8���4�k�H�����s�!�bA��Pf?=
y�;v�X�N
��9菆f��;a�
�l���ͯ�9� ==ۃ��zć0^�b'N�إK�P΅
�N%���w��n���͛���)�Z��vX�͚5���I��4>&�X�ԅg/�W��
�h��>g���?���F��'?11�ܩ2��fy�Q,�뮻B�Uo�{8!F��9�d&ƀ�x~�	�������+c�M�4	#�$�."T���w)A.6*h8��j&�az���/a޲5H�ž9Hh�۠v�C;ݷ��À6۝w��g!g�r,�����菆f#
�~��c�9ʻ�8ۅw��
+�ӳ=�1�HG��믿�l	$�
�\�Q��(�u�Ɛ��m���SH��m�[o�Ŵ�]s�ă
\�-	����]�1�yû�<�}�����KH:پm�?�A|h�
,I�����24���I ���c�>�I�@��.����g��m�O@�D$�O7bK5H�����>hJ�
v�������s�߽��}p�N���ً�-�3쑇�x�\iY��pS�3�6K1F��'9" " " " "�q�b,ʣ�l�!�v�: 㦩�%�k+GX�W�j��s�ٵ�Lo��%LD@D@D@D�T(�~e�ٵS*/��(2��V.2�," " " "PZ	x�Yx��a5�J+�-" " " " ����|[9��e�(SU��q�!;�
蒄��͢P��޼$��a��3����CYf���e6�k8�Ӟ�t=z��b]]8;��TǦ�P
ͨ������������p�׼$�2�mР�]2蔃&$i�� [...]
�$�xs?��L��+g�޽�f�����>	,$�ej֬�j�*#�
"p
+)S��������,4�\&��w�ބ
�iӦ��
.�>�-[��
=�E��FlҤ��	2w�\+�
?��S	�0��m$�ø6lfk�*UR�Y~z� �bŊ���wJ޴i�����s�y�mذ��%;��=~��P}��
=Q
��@�ڵ鑐!�/;���{�+V�L�lD�X������ND@D@D �@��Z�(-ZD1�Z�1C����3�ܿ�Y�g6ܫ�&H�V����|�M�>1C���P�
p-
������ݺuõ�N���T"B��[s��q���ӦM#�d̘1�*�z�dB�.���X���g��RFD@D@�'�me`�]&�`ܸq>����<�	l1<l>,�իW����D9[���׷5AH#�<�SyРA'�tғO>py����+��r����{na������ڵ+)�7o���Y�wb|c��3d9
$ʙ�
H
��v��/V۷o�?�Ɲw��X��7��lΠ
��Ū�:�"���l�a�~����
$#�y��Kؾ�'���|��6E�ˑ��Er
�k�?���/gխ[�tѕ��<�С�ԩS���X�t�.���ǎ
����{�n����2b�vD\jV�H	�qL
�ѡaÆ��,A}Ե�����@�X��Z����LV��n��\f�=^�dɣ�>���.�0����֬YC`Ѻ�*:� $��ޱc�:u�<ΊB8V��N��P�\
������{�S�1�z��|��
��RH#��_�F�jٲ��)����'ف�}�g������#?
�^ȟ��+�Q_+" " "P<R���ի����o&����#~e���GX0�+��f���?
:
grY"%����`y�-�A|'�٨��Z�����mt�)��S���uc��ZF�
��!lo�+^�5.#-�O�Q��#0t�PƑ<{„	<g�L&Xt�K������@�	d
{Z�e˖��$VH�l�?|�}�7sӮ��@�%@θҫ�4�RJ�H?ͻ�ҹc��{��x0���
�w�v�
�S�rv��y
�
}���߉��mY�L���̦�R�+�R�R[D@D@D@D@��E-��(���,��[���d��ٵcc?��5(?��Y1s�_��l�g�N�%�(��5j(-�m�&r���m�g�Ni���SD@D@D@D ��b0�+U�D@D@D@D@D�T��'�7��+U�Pʊ�������ga]�I*��|@z,j��)�Gre�r�6�
�:uZ�`�m@�=���c�V_�v��hӦ
�r��z�r�c�'�k�S��*k=z��9��ީ��ٳ/���!;�SO=������6��8�EDŊF�5h���d�կy�9����Ό
9r�ڵ+W�$�ѡiӦ��y�駝/��X"�S�(l<����Z�������իS���w߽�k�m�f���߇ye����0�Ը��[.\H]@
+݅�ᔭ[�&������ܱc�M7�dNDA����x�b��4j��r�-�F�g�}6�#�_���X�>J�8+{/_��R�JU�V]�t�=ˀqv��=�U�L 0`� Kd�\{�]�t�ZQ��3���t�$�i ��W��n�:��C�
��J�髮��Bt��G
yt�V�Z��4|�p�h��7���z��g[[����n�ڳL�_{s�q�Ʒ�~;U�q�"�#�j�b稣�b�*����̈Ї�Ԝ:�0�fΜI�3f�o�c:�m��9;������{h_j�	��q�3J�q�5q�D&�U��,��LPX:������$�%j6,c=��ʩx�kԨA���+$w<�X�NJ��'O���u�%���^#(Cǯ;��V���vR�P�׮]���c!!
�2Gl��Īq��>�f͚L�!;D�XmyhЭ[7��g��RLD@D@D 1wr:�ʄ���ݻO�>D���G��x�&Ml���s�\�����w�ի���������gN�s�9�T�Xq���.�~�� [...]
��CeZ���C�R��'P�vm:%��t����#� %�{�+�
E@D@D@� P���V�{�Rw}��h�"B&��<z�h�٬Y�l��V�Z�jl<p�,������8@~;\�.�~�9��oW�y��w߅�B\˓&M�=��
l_L("�Y�5gΜP�V�Q�F�6V�L&��d�f���MD@D@�3�X�E,�����P�
W����.1nܸ|p̘1�������
��
s
�~��7��S��q0G�ӵkW"@�
9˯_��T
4h�I'���O�c��2�ϡ+������kO�n�E{'�7�9C���Z�]
�����C`���td��ٸ#�������_�կ~�H��
�ED@D@�B�U�/�G#��M�8�={�`���R��V��1��N9��1S�60u�Ԉ
�
�5I9�I�����E�V+�^̉���]��8ݹ�0���c�fgg�޽;��j��H
�qL

�dÆ
?����De���\1�<
+�&" " 圀cm_���n_��
j/�ろH\"n׬YC����$��+����d�rG�R�Nh�Q<�f
5���7bĈ�����&I�],�6�ݜ�8�ߎ
;�&y
g���7ݲe��?M�5�|�WЇ��W��aX��+Wf� ɧ���
#�[�r>�3v��N�>��˝�Yg�u�u�1a\���Ռ
���F�`�������1ʡ�r�
+�e]��㲤����8A8�o��f‘���?�Wv�+���*
f#2!.��C=��c�q��H!��iN	����O�)<�_<�51A7�mN'1
�V�E��ɬ�4\�)8�E��Y73;-Z�H�]]��e�СCI�B~�	&�|#1�!IQ�TR�F�������@Y"�W0iUֱ�5^�l��c� �P����7p��/KC�XD��	�3����|���1�>hJ�
v�������s�߽��}p�N���ً�-����w>�3�s��hִYs�3��
�(�e]*(c�
+����x�<���Fl�-�v��(.
+�Oi׿P���" " " "P��
��l�p�r���[e1�nٵc#z3�i�?��J=(fq
�@1╛�<a�.k(��a���╋��;��H6^�ᇆ<���Yr��S�ԴY^�r�o9nE+V9}�H�D@D@D@D@J	u�s��_�^�E�p/�+%Ó�" " " " "P�Q��-̍\v�틻�s#1�].
f�+" " " "P:	�-�+h+�c/�mQ_�$'�E@D@D@D@�4c(��
���G/;
e�Q�9hp" " " " "�A �\N���g���>��rL am_��ʊ�(�sCC�rL �h_������/n/˭\�熆." " " �@�j_�i�e�a8le�_�빡�����������ɱ�䬘W9�J����W[�D@D@D@D@D�|��x����y�s�b�ъ��������@.�<���Zη��1;��x [...]
+H4�
~�xӘGY^e���G ��$X��U�(�`,cc
�P.SB#�'�J��+
����������g��ʤS>?��G�<���E@D@D@D@�+��xeS�:����e(��Y�q���������0Ne��/n+���
�e�E2�C�����������@9"�4�-���sb�J[��頡���������ȳ����&jY��0nz_D@D@D@D����ek
;�l,C����������S�P���F
+���\��\N熆-" " " " ���}	�r��*�i����������@�V�4����&���ED@D@D@D@D��_�����y!" " " "P	�`eg��
k��q2����АE@D@D@D@
���
����+njh������������O&��#�E��>
��9�v��\>�F-" " " " �<s����
�<Dz�eM��N�@�r�P��\���/" " " �@�J#1[�8o��������E@D@D@D@\*云c!ʹ��
˚%" " " " " ����O�e�
��V��#���gY�CD@D@D@D@\u�DD@D@D@D@D ���n�9.Dzf�����������"
'�<����i^���������@A��ʄ��!" " " "P�	P�$��$+�\O
^D@D@D@D��@n�>�ʚ
" " " " "�K /�r��x�k����(�����}&\��# �rN�`���c0d.��ዀ�����@y'��
àx��>4~?��57D@D@D@D@D��@ֱ�5^�tٸ����/�Y�������ӟ
+����������:�����ҹc��{��x0���
�w�v�
�S�rv��y
�
~����,w�993n;��Yg�����̥��4�OwQ�Vv�1����L&дiS�8�T�b�L<���G׭{��~��������-������@�V�Z5����z}C��
+��~��u}��o�z����3����[�/�s[�
+�+ҹ��׏7�_|��g�}�iX�n�5k�t��ռ�P��ʕ+W�^}衇�#F��o�m^b�О#H0��甧�z�f͚�S�?�VN�>�u�	'����֭[�~�믿~��st�����O?�|il)?�.9�;׸�{��^�Dn��9詧�c�)��s�a��
9r�ڵ\�;�3~"�(���Fm�̏?���3���
+�O1虔zG
y�!C�
ڬY3F�Թ��[����W_1�����.����fi�3"�bh:ޤt�'.n��7)%�XD@��@���_9n(�v;�s�e2۳�>�qL��{n����ż�6��O^~�es
+?����߻w�Yg��
&�I'�đ_��׻v�r��g��c�ƍ�
J!Q��+N�:��ᄏ���?��)S�ԩS'X���mٲ�ˀ�С�:O�o���m#�J��:��
���ͳ� =#v�l��g�qF�N�n���k���K�.i[�B
8�y��b�;��k�5k�����"]1s���Ȏ
;\����fŬgQ_���&�@�<qqKo�I)��" "P"�u��/ϣ
���b�e�ͷ�~�/�������
1b�QG
u�UW�v�iFw�}�m�)���s�ܹ�8�����+���o~��]�.]:lذ
.� �B�>����
8w5���oX�r�o�-[\�

��� ����6��4?����pH���o��~�U�\���Ι�ג[&��O<�駟.^�x�ĉ��o����~�7h��_Xg�iÍ�}��#�<�]J
+r ֪U��<:]�`�6�%�Z׻3*���3�ٳg3��{�=��<���F
�Ս�J�*1�Æ
���j����q��r�v����_y��&7�f�f34�������
*��~�3
,`��	���i���;z$�o�|OnF����wp�%ٮ];��Jvv�ƍ�,Y�C�`>4���������=v�X�s�I��G
q�����<�ӟ��p\��՗�|8������?���1;
�z���{��p3f
��n�����,��E�x���)~�$�s�)*�_�����Y" "P�L
F�2����ɩ��Z�'�C=�G�fܸq<|��w1�1)\��̙3�����l
׆+�5��ؽ{7���_E?%�%�
ݺusڈ����%�B\���oÆ
�i��>Ta�<�j�*Ӓ�
����Ν;_}��8�/���^�z�,����
{��]t���~�u��6����c}ۀ�N$�|L(4+��k����KO<��{�״�޽��o��f�����>�hs�o��`
s�1�j��-���R��/�z�5����cnb. JK����1�9ÿ��/
9 a��
@J۷o����Ymڴa��1nKBg�g�d�侽^�z�\rI�޽�Aе�|����f��s�3�v��K�9�0.

�pݧO��Ο��g�oR�
���7�y��p	���ﺧv5u����\�1�rn�>��rṊ��bŊ8���ta
+��<�S�1���I8�����?>~/ܽ�-<m�<��PN
	�c����

F�����ѣQ�~��֭["� �9�w�yVH
+�8F��s]�R����w15�pRr�}&�fM�=��3
9�)8�-[�����) '�
M�d��o������c}��g��ň�����Ma�WFs�<0��|�L!�
-���'76?�0Nt��:���"���ņ%��k�_����E 7��<�!_�Γ�(���@�K`���]G
�ߴi�YH�G;ʃ�D����/�-������C����c��|/M�6mѢEFT���}�]�<iíS�Q3�蟋 }��
�~.������`�����$��4yu��6�P��uȡ��
���G�_t��h�z���?�,桳3ޗ  l��;w���b\��q�Z�I�_�Ac��(�v0x�ԇ<U���?�q�����ɓ1��-��̡0��s=��Я�y뭷:���;m�nҢs!(�;�k�fyv�4
5�
�vE��˗�f8�	Pa��H�B�x���!snQ҆
�(��5G��;����3:v�H_���{��7#��l�B�)����_s��`1�ň��C̍�%7j��}�Wm„	
܊JA%�S�d��E�=w2�}��s֣�>�爛X�C���q�G0��Tv�g(E�\�.n�r�M�����," )�<�y�1�٫���=�8�p	�mϞ=�V�c��/�ٴMy�=��L|!��\!˸����,q*��F3���'#
4t
~���#|�G�
8�x�*'���Dt��eR�9F7{�'���<�ѐ�f��
+l�ũ̝�rr�o�R3ycYY��
*�
��SN���pq��3qs�rR��,xJVf���~yr��Y&'W��3��ۢȌ�&q�Q�r��jP"��r)�w�}���Oɚ]
^��]7
4Nm"���7�� ��?��S��e>�W�x�g���&uݓ�ij/" EM 7g\ܩ
3��O94��W^��_����,�"�Y���]�UcC�&�U�V<��cغu+�.�[
ٙ��cfEO�S�{��b�� ��YOMB�r(� �����o�}<O���(F�3+��1���a.�Fm�m/�EM�SO=��A���$B�s��y�v������{{�&�9�-�������#���Y#����9Y���I���:�<�!p����o߾�f�	���9{n��+��&�4b����ߪU��z�;
}�:��N?�t;������aԨQ/��¤I�p��B���J�\�q�':�Ж�������
����+�\oDC
9��q*{z+�r�����w�2)\>8���~�pw�:g�
�o����0K��y�3�
}Nԇds�����c�mѢ�]w�ŏq���X��x_���\\��۷7�����9.:�;
q���Q�i}m�Y�D�
����5s&��N
"�m�!1�
~zN�ˈ��L2 at D;V2k��>횲���.��;s�y��={��m����1q���p�ȝ!�Bb[�r�k�?��LE�����e����r�Ap*K�/6C�����P�[��+�
j�֯g_Iq33��j��x,~s/d$'��_/�_=k��0�Un�=�"�`���'?��4��'�'��n�퍶M�4!�e0g���Y�a��x��F�Y�<.��?~
�Iv�pK��o�uOV%���!�||��W�G_X+��|
�&6�������ĨK�!|�J�z
�6f��zQ���
��?f�47��!x c��`�S?����}C�
�0�X|�~�
��&+?������x�i�oD9)4�~��NfA�<776.wJ��ir��
��b�
�����w�r:BHf�¤&�stg
ps�#��L��)���Xx�l�F���.�Y~��&YR�Y����emo��]��s���U N��n -L�D
+�z�,7�[�Zp���@ش�v%��=}��!� ��X���s����3ͺĉi�oy
OVO�����
^a�E
c�9�L�?�#x��gI �����
��s�~�3ُv ���
��ɪ��" "P�r���No�l�җ>ى��1��=������q�m�]1����/��XۤM(���:�۰`ȿ�O��]zU��������()��WD�� F���)�;vعgߏsXHe���w��s��u�W��^4o�
r�>��g��G�y�ֳ��uV�Z>k(�W�fTi+�E s	�D�P
"�͛��Z�~͈�a�1�+0��-q�N*���D@D@�	�s(�ny	��6���
B��3#\^���i�];6kG�*��Wi�?��F�e!����,>+�����G�
+�$E&�`�Ң��H;���OoBl�K���u�5}HN����4蝿��
�y�b�Y�9��ҮQ0�L�B�01�oL
F���ʵ�_�d'
e�����'��;����ڈ��������@H9^�i+W0���
�a�3p�RID@D@D@D@��@,^�8f(��f��lj/���߿xYy�F�a�O�eo0�L�\�%
)Y���O��P�" " " E�XŹk��N嘹�4��UJ-�F���h�Ν2�ךd�)o�2���j��F���o���X�O�1g�b0���O
+��)" " " "�
	n�
+�1��I�
Yv��*�ܡ��f)��
=
+-��}��م��� j�9ˆ�.���du�g�¢�ٻ�Lӧ�8�_��%��W�K���ajJS���|�*�#1��E�u�ЁԦ"4��
x��Д&/)��l{�
�jՊb]���5�x��xR�<�5����3�ą9w�\+��]v/O:�$Aa�
+��s�I)Ic�~)�u�M7�|��T��_
��OO���p�

��sϥ$�UϷ�+*�O�qy�i���)_|�=�X����� ��:&�_�E@D@D@D 
+k���o�ͽ�T�jU
+�
<�:������=�x�
��	��)S����S��Ǧ)�|�W�9Ȼ��]�v��(cp���6dģ� �u�2
t4�e���\�MVO�~�CM]�q�߿��/����3u��y�'�|�YùK�.�k�d?}�z���W_�0�K/�D�eS�:���>�=�c���^D@D@D@"�7�Ƀ�۶l�2z�h\�*�/����?�&��k��/2���q���Tܻw�3g�۶m�����MK\ԗ_~y��0u
+��/�z��3����Z�v�]����N
u�Q�Ȅ`9�K�x�R�4��w׮]8���^��͛7�0��/�
 �O�ݻwc%��>���}���)�S������i�����O��>��=�c
+�@��������@0�i\���,��oV�5ݤI*x�Ne�'�x�%�Y�f���}��u�֍�l7<R7��yIK�
����9��xR�0�_�ԫW��ժU�Xg�����MJɀ�7n�[��iڰc�����_~�1���tih����MRH�,?�uL�%MD@D@D�<(`+��丱��f͚���c���D2�삅��u�g�xI��}�݅
�����1c��=�؇
z�O��9��x
+�ij�؀
v�O�Q)q�)���S�t�4-]�,�QP'%?�똔p5K n
�Zĉ~e7(0��8�P��d�T���ر�5q0��ָ뮻F��m��~�C��
����c�I�����D�ӴL��
\�f�i��9�'�OO��u묜(�%��wV��V��>��	c�O��(cQ(��d�A淮/R��~8Q��ݲ��ܬQ{��G����3�`Emذ� fkKa`y
��_^��~�43o75DL����$�*���>����g�!|�/_������7b��$��E]4t�P��e˖=��Vk+ٸ�����۷���:X�aÆ�?91xz at tx�|O}��,y��0��u��첕#��
쁅}\p
��9��Çqa�.����S�Nm۶%,՚q~�Æ�~߯� 9��c
y-XQG�5�29ɪ��/��,���K~��ߓ���/�b��d8�YDq��]w�B�9�9ҲeK��[����
�'�ꫯf���+X��>�rH�ڋ������@4�Vqֱ�5^�t�_?��i&8��Ϫ�?h�;

MPq��s�A�Z`gw�>�e�J�I���8Q�/����ҹc��{��x0���
�w�v�
� [...]
�^�<}����F�e2~F�	�H��
�l�s}�-��A�R�re�d�nݺ��cp/��5�dNʶb�ҴiS�rfNHL1_݉������1N���V.�e�h8" " " " %E��μ.}~��~E@D@D@D@���g+�u����Q�Vǎ
M{�(Gi��m&M�D�5!3
+�z�I�-�	��y��W$�zE�)+:���f" " 
�˱0��~��lݱ�5jD�ߝ;wf���РAQ��<y�/���i�i?`�~������nʔ|��΁���H�*U���<�Լ-KW9�>�id���-��M#:��"$��
�W�*������裏��"T.�TРL]�3����ef������?^~��?��O�W�T�bŊ�#�9��J�D��������J-E@D�	���X�dg�uր��fu5��YS%����۷�<��8��_P:nϞ=��+��ҪU����hт����IAٿ��!CT E�Ν)
���1#��	/��g"7�[۷o�馛N>��3�86�
�紐�
Crڴi菫i�ܹN}.��R^���?wꃧܼt�`�ڵ��oD�s�=w�ر�]#߄�$z������-��Jż��^)�J׼����s
0o�<�_�{<��O;�?��O�a7�� ߓ��� ���
7����ŋC���>��=�K_x�s:;|~��w��}~����������@��}n+۾�V�������Nm(�L� ><L4�S{�yʔ)������?��æ��͛��뇹ɻcƌ�]�v��d�����o#y����t��Ӟ���$�6�������߿��/����	��t���_�M�6Z�>T?��:5�~�믿~뭷F�
�!	��:�����<oS�^.�隷~��}�Q�s��7���6:!^��׿f͚E������P�.>~�����;�n���;�<��'N
�՞��p��y�

mڴ�
^V�^
i~�_����������@���_��?x������߅7����!@��c���>�'6(�f3�Ξ=�
���[k�
�3g^X��駟�xÆ
�q�qW3�K�V�8
S
�����J<%T�޽{m~��ض�"
����৏�
�
U����p���sC������ݻw���4�0ab9�9|��u
u�UZ���r]_�
��l���O�ϵ߼
�
`���5�y��1��G q\��CAY�~�cX��nو����ȸ��3�k|���ub��,��{���@D@D�E������o_��Մ��}����������7�����g���uC����k�~�
Z���N�s�)y�V�gg�cN	�+SM��
+��+x�'\f{�f��
�����֭��z��Iȁ	W�%-	o�c���/�̜�w<��Lpt�"FRgEoLD��<
6��c��I��'X5MHE��
'�z��_~	��O?�
9��S�
�x
�
,�?o
s���Mv����F��y��h�o�\�r%��7>�S���z�q�G �|� ���Á� ���{0�`}��.*��W�g媩����@�px�sw�me�����X�z5�o]���ȫ������T~>��Ci��3f<���xh
z�!B�Y~�KS����]Qu�"9�uL�VE-J�6��=?�t�7������U
W_}5��D��0�@�~��;�
,?Q��
+p��CL�l���bN��4��$�o����<�D>�#B" �R�J,�15�]��1�Y(��eĈ���/�w<�;��������P!���6� ׬Yc�b�
��O�r�
�������?��3�]b|��l��
����gH�̟�~�+5����~�$;�m�~�z
@���2�S&�+��i3s�RZ�n���_� }�O�z����w��#5^�^��񆞢" " EJ �V��=kY���{w�^�(��{��G���3�<��F|�̙3�U6?	؝�ǣwJK�����O�.�N�>��IIp6&4��vl�|p�p�������YA����&@��>��	��q6nKhC� ���eC^�m�+Vgi$�[N����T� �L�u
=�46(�y�w�RcX�y�O��!��hν.����{���B�<�W~"m�Q^t�EC��\^�lٳ�>|E��I��TMb#�ܮ	����^�cj�Ag������@���.���x������3ɒ�Ną�D.��:u�Զm[�(�Ϗ��d��ߋ/��W�^&ISݺu��`��,��{�a�>�$�2�	�&q�%�\�����
y����O�r�z!|�
ehвeK�MK~�9��ě�+�#x�;�0n`����
�I���u�rnilSR���z�0-��O�d�CR�Ɋ��SO��o��$�b�<ǕF��������O:��뮻.�x��
�EHI�����Q�V�Z�4��/oy�7T5H�/̿�-�<˖.��6s��:��:>���O[�i�Ϙ5�d��Ύ(8�S"J��f�������g���G��I�x�BO)Rz�?E�W�E@D@��@�AS:w�sϾ�c��ݻ��� �T����hނ9
��kc�pN,��k��ݬ�Y��t9��z�d9�W�R��EiY���L�c"�
9G~TY�k�\����?ei�i," " � �oW(-Ʊ
mÆ
I�A���}�FA�sO�����(�Ku�m�������w�e����%�=�m��*�y��S����"" "�2gN����ք�[�}��f\��1)['���������)�`��zk�1���\~��F*" " " "P"
+�+�\.�k�NE@D@D@D@2����s���7�I���F�R��
!
�'bR��~
Ϛ4iI�Ht�Yi�l�z&v�=�yRʧQa�J#��y,<�y�Fm�e�f���Q~����P�TȌȳT�EJ���@1p�W�7�͞�u�jlԨI�]%��A?�.(;2hР(
+L�<��_��Ҵ��
%�ȶFّ?�0��ioIvjHJ���P��y[�I���ԻqΖ4�S��='y�/�Q���<KDIu*" ��@~
F�>�p+c��K��>��;�ȐQ����ZQ��� [���
�èow����'?��H��ޒ2"(���iס�
+,o���Ջ�R��K]�t-�%�]����^q[����6��J�!<묳(�F�6;T� !+խ�Yݾ}{�"��<����%����c�S]�U�V���oѢA�Ǔe��o8��d�ܹɞk�3�K/���?���M�yk���7�t��'�|�g��f��
��3�[�(C
3㥸 ����<�2vb���@f^1�Z�nM=�#8�=\A*MF�����Sgl��[�$�aB�
?}<;mڴ)���oQ㓌�
IA������0���GO��x��']�رc�u��\�~�M���}�=��}˗*uRO<���N;�O���
F?�=y��7�2�]�ሀ�����}�Z$��V������X!�Q
��|x�Tp�Z�X�S�L��׿���~شܼy3�k1
xw̘1T�
>��e#�
e8ڴic;MA��yX�x1�6������_*񺄻8t�� 9����ԩS_z�9s�`f�0�rrJ&��;3y��[oQ8�y��Iy޺:JV
+�x�	���9.leS��nT�1�r
+�=?_��_�bI�Ϲ����k���ѣ��1�s�����{[��8n-f͚E�
�	3?��xr��>~�Jv~�����n�W���-�̿!����
n藓�C�.!��}�
�����f3�Ξ=�
�������a
�#�pxa����~J�
6����]͜/�Z95��5/��8���1�O	��w�^ۆ!"��G9��8�	7�'���u��u�W2`D���2o1t������pN�ĩ��y�(�O�fߩ���Qz�}ɝ6oq���N�
=�yp}�B��}��>����
����w��q���	
"��ua��߷.e�͛���/@�[~�����}�h�" ������%߾0�	s��ܻ���6=;{�So|1��χ�X���N�졗�<���<�}�I�7�z�����[���U�9%�W�w3{��8x��q�����	�jѬY3{G�}��u�F{��={��ӄ�<&�����/�̜�w<���z��qV�j�p~�j
+�Nٸq#�@<�4
�1G��
��N�3�[�(�>_~�%S9�C.�2�2�����^�Q歳Ǣ��ot��W�\ɻ�Vf��Ư�–��J�C�����[���O7'ev�?ש}��g ��m�ƍO9�믿
5R��K��o\��Q{(�b�rV�b��`x����c���D8��j�n�bkf3��Y�F�Θ1�P<.=��u�,��)`u�_��c"�!����-"s��q9i���6�.��>E��b����_,3>D$� U"[ʶrtm��,�G��s�����{�� W_}5q�/���|�I�LyR�Թ" "PR��sm,���u�o7�\��#�U� �J�*�ر�
�Y���,|�뮻F��m��~�C�+��P�š5kL��#�R �[�ʕ�G���>�}�(���k\%+'��-W�����0��p>�Hv���c�3�,����L�����ի�|��;�s�&?~<��B�p����<����Ff	��� �
�\'�H�����yp�r�ʜ�J�]���7��@�D@D�40�c���|9Y1�����
>��?��k����{	��Q��G}���<�
�"�,Ϝ9��v|���;+��l���,Db�X�����&��p��$X2q�����܇�~�
�>�a�[�UW�Q��&���-I/��G
y�v��
+C��z�#��PsǤ�Hv���
������'#$^p*�263-I���}7Q����E&/�Ҭ�e�*_�qZ��q]G�[��1<.��lŊ�g0��i$�

�M
M�K��E�� �D}��U�Y�sE@D�4p׸���ql��&�џ��g\DÇ'�œ��Ǫ�N�:�mۖ��g�}6�x���$λ�K~��ߓ#�����ڏ�
v�ax⩨BX'���_`b"��z�J�>�MZI�[��

��8�뮻�0ؑC�@/K�2#*�y�3�`R"\x��K8�Ĩe�C���-[Z�����
��M� ��H��r�%ߓC�����С�
s
���zk���9�Ğ|�=Q$՞lBO=�����7�1��C��LO�<=��Wa&���RG 맧5^�l��o�����j���_�g�`�FW
�wD
S8%��iVƆS"
���Ыf|��� ^�)E:�D}���2#��iT�$�]��HY
W�L����@�AS:w�sϾ�#��ݻ��� �T����hނ9C
|�7֚ 
�8��ڪY󳼂n���e
��늢)E٢�T(j��EM�D�u��g�$b"��g>%�F�;-��J;(	(�l�r����rÆ
I�A���}�F�6�F�29��^mD�(h��
�I�6�<�����~���0�X!�(��*$�."P����ʱ��37��]!�WD@D@D@D ������[:b0��s=��XN�N�@9D)��9[�a�cc,�P�$(���_A��-����Ʒ���G���>5��;�}�a	�Q�
� 7){3a+j}�"�l�$N�\�u(�y5i�$��� �y�T��8	�O�
}j)" " .5�V�qX�#�wx���W�U�r�����S�J�U�����nr�T�V)�j�5"���4T	^���РAN�L
2����UM��d���I��?�0�AE�Z��֭[�u7�x�S��ٳɄM�
�D����BJH��i�W�_&c�)����9���R��RsdU��
+�ؾ�w�d��w�#,��u����@�!pZ��?�����ٵ���q_�
��y����^4a��[�Nں���_���dZ��X�r�_�/���U�Q}��Gw�qG��%�>eƢ(S+�EiYZ�P��(elP�~=)Ѽys��mLY�[n��|,�!ec9��&�󊢒�|�	i�(X��K/9��Qd���_~�O~�'"��g�}6ީX�4ԝ���@� p����9�;������o�;n�׿��}n�}�ͷ��u�-�us�?�ts�`$,c��v�YgQ��Lm��K���:vԬn߾=o�c�
���_���%۞��V�Zկ_�E�<l
=��B�8p
+�LpBR���~r�o�~�M7�|��g�q�l�,?Y9�v�By�NQ���<�
��=���)\��'�x�i����?��2ŦU�o�����ŋ��իWs�Qɼܽ{7^ҕ+W��)��j�I���ܹs����2dǑйsgJ9�����������o�<8�n�v�ʅ{�h�w
��'�Ө���o��׿v�G�wle�,���n��v�5z�РD/���˶��
��煺��ճ�]���	�֏?-���;���,��y0����K/e�K����
�%�-�n�_w:." " ��a:�����@��۷w/&��{���{~�����m$d�~vܶ�_��G�U�V�#��P
��D߳y�L�V~ŧL�B�����?���y�f~;17yw̘1Tg
>��U�1	v�;��&%�O���7

++��T�
��
�C�����zk����	��~����k��Kh
��g͚E�
�7��w�I �;���ON�8�
lР6��_"k5u}�/�-?9��t�R��mڴ�����o`�0,X����0]���O�%��:�?���-;�<�
������dy�Q7�pւ޶m۪U�(��T4�]�/+!��ΏR�n��/��LLnw1���������D>iӀ
�̾_������Y�=�"" " �Hx���Ӛ|���Gm���|�
n��cb
+	a��fk���}��w�´G��qb
�#s���
k�?��S㑲�����9_:�J<����s�N���4v������p�
h��E��v�7̉&L0
+�
w�7W�l�C����y�P�{!
��?
�Ȝ�x-�����=z��B�d+ǐ�9m0Ǒ�p����?���:�O� }� �>HQ �1;�Ύ�u�O�T��W_}eu��n�pi뜖��.����Q>w~���߼�x�޽��0
��+0��b�P5m�,Y�Kn������完/�(sXmD@D@D�I��
�G�x�q"�@޽k��
[6���|��W���?����ˍ_���'���‚/O0�Իf������1��Wv�ϱ�N�3N
*x\�ך�T.�Y�f��d��֭��z���#o��KZ&����_��9��x�7ExyD)�>�1G���OΗ_~	%
X���z���;��o �S0�^�7f���_o�M�/�#v��t
�J��+��%�\b��cުW�
�U��L���-;<�wi��>��J|��Cء��?���:��O�'�q�cƛ���l��|9D��y�OA����7o��&�cݺu�ׯ'�L
+BR>�z���7����
�(" "P�	|�����0y�l�}�
���``"��G����?x�ʓt܁��1D\G^}�U\�l��4
�h�_�
�~�i<L��♸9��xy���
�'O���\}��ģ��C �-h��Xb��=���5k�$f�
do��1g9�!<tt���*�����`��y��̒Sg�Bs���٥m2��/#$��.��H	��T�O
�6��
���DX�G7�x,s�GT��D��K
�p�S�r�.�����������}�$�}Ld����V�
w�%�@�–��}~�
�e��c"�kJ�����Ɏ�lO��,�뮻� �m��~�C�s50?�)�{C�@ �k֬1-�1G�5L��Ox+V�H����g��
���]c:��ڪ�?Q[
�8�	7ǯ̹6! zrQ� ���s��_|1q�D_t�E������c�$B���O� }��$�ax^G?���4���蜖qݺuy�\kZ{׸Kɘ��X��S����8���ЩS��3gb+�cV|]� [...]

���t�KWa���_\~��O���t"�x�q�&�q�
~��?�|���?
+�B��.�G�<����+Vl��wܼK&<�,�����g|x�=y�!V
���4 ��Y�Ɔg;x�С��˖-#Ǚ�t�.pB���f��r�.������'��yB�	26��O�G��:��O���[��},�s*F�
Vm�
���k�+c��.%�!άj�GdZ�����%q^�^��ʬ@
]��ǐ���k1�Y���ҥK��r��CA
��Hй" " "���a��u�<�ߟ��z����.;���p<	�s��d�?*�fN� r�Q>�s�>|8�
V
O�qM����]k~�
O�Kp�=���x_��� ���)�~�a&RE�� ����

SrJ ��[o�޽;�M��q�:����S��_b��>~�=��Y9F�����ك
�y��H�/'��tr 0ۈg �9
 Ǐz��ի�<����z!�
������xڎ���-9�e�\,�=�%c�y���ƒT'X�μI�(��
0����	��1��~a!N�)5B�=��'·dy)
ʜ+n� ���(" " � L�������2��"b���i��
NX�㐜�&\�����{g�{_D�E�
$��dW��|*�S�z���cj�
���;^���kO$��&���Yk���"�����7_�c!� �[����z*N�ԗ���@� 0��!�"��b��X�o�=B/�vs�P���w?���o��bYO��e��g���M|F�x���e�\�䢨���B>��K!�����M�6a"c��7���;�^��ԩ��J�i/�)�|�
i�_��8��/J�P�E�r1cWw" "P6�Hv���uJ�,璾�a
����9<W��P6�r�	ъ�)�
H��J��}�F�tԨQ&#a�QڗH�q
@,��~�;n&1j�
/%�it��ً���mI��2D����$�3���ܩ�(*U��t�б�^�	-������Lq�o�H�
~Vk��g�*Z
D@D@D@D@D 3	�Z���k����D
Q&�`�����Y�p�ڷ���
!#VC�
gz�V�``+�[�����e�ŝ��|b���?��љ9li%" " " " ��m���
>�`9���ʼn�I�@��3�5��	?;�Kc+�f��㕱���鹏�K܅���=��ܷ��^�$�4IbR
�~���c?�e|?������ki�n�Y7b���-?�x�ao��v��o{�gƎ��I>LѶ�nI����x�s�
+z�8���QG�l�pNt!f*��ǯZȕu]RI
��R�
+�>��9~�#Qy�%�a��>=�V�!��y?m%��
)/�k�vN:Ƙ�"~wD��k�)9���I��w!R�!IQ��/�B]�TT*0�h���cl϶_j�>
��^:��#��%!��#i&&4JF������G��
-�O
+�,�$�����kݪE˶����\�ry�w�V>�Ԇ����7p,ǂ�O�u��5?�b,gY��:k"�8n
��f?f
:�b��`�2
'_��^��9d߈���]�
Z��t	�.
���zz62��J窳���k�gr9�;���Q��us��R:��d'~◩Ks՜bS�$�<	���d���)���
��QfD���Ͽ*Q����vk��8��q�I���G�<\�+a�yϕ�A������6��$L��}�'�ᒰ=��,��tt�c}��\�D�����:1�7sAu,v����w��%J��I��
�����ߌ��9��Cǜ���1TR�p�H]��ɿI�pMCZ8�zO� +%����i�W�d����ʁwQ	?RAX����ZV=�_Eo	9��o��/w.�b[��9��ܻ%��Nj���[n�t����=y
[d��^l�S!�f9`��,^�c�;�e���)q��~��O
o~����f/v]c����������6�ٞ�7'�D�#N��wK�y���������>�Kn��v
���H��m���%..�3��Q��9vLW��LW�DU]�T�T/�.�]>79�k�/H�%λM�	���IR���i���ؑ���q}�5w\
���|>�>�)�#a�
����/��ϕc\,����0 at m;}
������	������0�]c�v��ً�����L�.�W���.����
��r�^c����%�_2���o[�>v�qzb��'&X�>�u�,������섻�ߎ�_
	oǿ^|s
.�=����|�<%>`_e���-ު��y·^��_�������!�:�����>�&�JϥХ�s���h+�����KT��T�9��
7�b|~����sR�o��Nՠ��8��m���m�A�
������5�Yf���;.��޴�i��Z��YY�
|lL���^��O4�I����MӘ�������T!�b�oe�
Z�"/+��V:4�b޿C͊���U!��!��Y��@���5�
m
b�>�
��?�N,
�#�������ƞ�߄FF���1�pA��b��bL\�ĩ��Rz\}{b�A|h��\�%�{
+�_ǰ�m>s�H/8!<���C�?W����H�vߞ�ώ�oʼn9?��P�N���
A�|tm�ܫy�oo� �<;i�Y�?��g2�I�
����1�
+��+#�@6
Ox^�G����^����ᘁyN�g�%�-�H*Xa����i�f�j�s&�lr���|�$��'�~q���s
��(���
��z0͜;�
5���|lf�Xi�b
v�Q�m(��~o;���&�[�/������
+~5�o&�ӹ��V��h!Fd{5Y��|������-��
�lW��^_%!?��)�/��*��c�=v����ȓ��2��w��o
vM�3WOe�~)
+~��\o�?%V������w�����z�=m�)������Z����R`d��E�k��F>9"���=�{<�d��g
S'6c[��
��cq�_A�B�z�����>��8[9&�e&�~w�/h쀸)�+`%�#�͗:�x�~��Nw1qi�X|��gk�w���*���Ѿf\�\N����_,g�?�N�v�Ջ����?�Q�w���

�a�~���vޚ`\�cI��g~�}���\�/��_��-��?�
S0�������4��H�-s�y��R�u".����y|rLW��
~.]�����I�&r~~5�B���1��y��p
6�����OD
+|��}�$h�0�|�/�1�7I�a��q��t�1�)��5����D+�O����&��f���~���S�s���τ
:l� �͘���g�{��6%��N☿9�恅}������B)A�S�[��6^_TH�ԉ��x�</�H� �����ds���I��
��#�e�{~��Z�~fy��ɕ��q��]{<���6��g���zy��f'�ض�Y��?��~~�5vp�V��_9�,�� �bc
���8���>6a��3��]�g�Z�q�3n
��u6�_�
���{ʡ� ���޿�>]?l�s]B�X^:/�����;0�D�==�q�A���P�@|�
l�P��
�����l�qV�
�-�g��� �{���&�/.лA�gܫ����h얘8_Ӳ���Z忎�h��6w��
lBg������B9mS�_A��w�`���%x
�|�$
*v�y%��𑊷����^_#ή��
+渡�h�o�v�Lh�������8��볛pf
���ԑ?����y�”��(���y���o��ܼ�}��0Q��I�z35�+L��-8�=�q�q ��|���衹��m��6�A��"�S��G���x��[?�E�yO�@���'���8���I���&o���3�{�e�.��i�j���I{��{������Cj
�u��w��Yq��~�pa�C+�����W]�w��YJq��%���&q�V�e��5ʜM���q��t6�
�zig
Ժ��ٜ��Qq���7sT�B�Ѣ
+�oWp��ET)��|�@r�T�%����(&\���!��[h��ߚa�H���:��p�r���`�
|���@�n�G=_�`�r"�X�yG�N���		��P�������4蒢�O
f��1+pV�-�����KO?�_A�fLy�S#�(�?�Ԭ���T�����۾��];������ڽ�O���n��$�E�7S���)~�(E�CAqi�'�
�Ҡ�[D!D�Լk���3��R��t�G�*6�
A���D��R�{^Zŧ�O!Gzz:��NY����A��U	)�S��1&)�	"���n���O��X��g���A�4�HrR5OR���#7�U�@��Z#��YU��T�����
+endstream
+endobj
+1799 0 obj <<
+/D [1797 0 R /XYZ 86.4 726.045 null]
+>> endobj
+652 0 obj <<
+/D [1797 0 R /XYZ 192.312 371.339 null]
+>> endobj
+1800 0 obj <<
+/D [1797 0 R /XYZ 86.4 318.522 null]
+>> endobj
+410 0 obj <<
+/D [1797 0 R /XYZ 86.4 209.644 null]
+>> endobj
+1796 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F49 646 0 R /F16 461 0 R /F48 619 0 R /F38 517 0 R >>
+/XObject << /Im9 1790 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>> endobj
+1803 0 obj <<
+/Length 1958      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�6~ϯ�9gQt��7���.�4���n�`�!>u �����wd��v�C�=��,�7��4	�-<�?9�����BJ*�ɝ�$�^@C$�&s��C��e���џ
F��;��x���,�M���&Y-;]p
������N����N a��R\z����`oO~�0b����
<�BD�*��'?�`�(�*�USaDi>�8
]<W�s�|.
D�0��R�瘄H�HP�
^�r�B��A���
<��v�x��g�$�vd����flxѡ�4�������u�vRq�K
+����m�������W

jZw)G!��
�v���B��N���
Jc�۬%@�7Xk��\
���ǚ�f.*�sie`?
��ף�1xI�
f%=77�⻚K�
	���\Z㡁
�ػ����
+18�q)긣��1���u
WK�$qf�#%’�zg0p�
	K��N���:��&���8�-�S�=�9�q�ou�ۗ��e�C��7�Ŝ�$�"ٿ���\"�D
u��M�M���?�_A���U���N	O���|H��;�h�����
u͒����U�`�j��r~���NB�1E�
+��~�)֭�gip��A
 2�$'u����M�~l�{
�
|;1w�t���e��#n�4�r�"��_��}��k�.�p5�K��[�I��r����\,~a�8^0\1W��UV2�؉@.u	�g�5 �/o���m˒�U�h�
87���

�4^���"���m�>�&���̹S N;�����z��) 
�T!a�o�/
`Y3�
�h��ܭ�/����@/ֲ�}B�N�N��UGm>q Y��
+��I
VP�f�	���H
�����T�fE8�SY��/���ͷ�d���y��g���'�@hڲĻ
�,b
+�6wA"-���Z8� �R�
+�
+�
�ZUA/�G�ֿ�u|"@T���q���x����d�A���*�"� ښ9��V���վEq<�t_`=4��+y� � Z�5�9�-�V���{��$B�
�V��A�vn�o�;�[07��	�@��v�Zo��r�����`!�
e
�[��AG1�*��4	)D��mɲ�\��Y�_�6��4l b�g�G��zЌ��,Z��M����j:E�؎���v2z�:6�u�X�f��Z-�'� �3�1�09]q���*�=���
+u��d�>)^FӴX
Zc=��)��e�_?�aF�Tq���'A��\����_��F}�\�N�(���If>��ʚ�i��}�4�NG�c4�!�O�cR��"1
	1"���M��þ�L#�
�p�t�
���-�ZSp��%�Q��N6{�(��D.�m$���^	M�̣�wi� ��y҅�@
��Nr \8��BA��P��U 
uP
���<,?��>�� �B�rr4�EJ
�!��Cu�v���
���_(Fa	�J'�ܒ@�����E��Pn9 .�U~�[`
nUa��
��M����u�Q �l�jQB�=TX���h��%����7���-�[�כYgh��b������u�;&���֞E-��WK���=Ivr���:�mV��E���^ݠO�q�,����zw`��c
+��@�Q�K�A+��6f�>ҷw�)�|Y�[���E�Y�e���K`̤Y(�1�
�C���,���-�߼_�����&/�A�i�h
^�k�n�ky1N��Yj�]�v9O�4{^�s�T�Q���\9��I�Sc�gz��y{��N{��/�v�~0-���ubl_
�p
+���
�6xIF8���Y���{��)-����#
��v��\
	�
��n�P^"*�0/���0��|C�
�R����k�Awƒ��՝1X�
+�

�jP�J�+Bs��Mb�M�������PhR�ߺ����wy3��KoT�g)
�k̠��XiIz���
�7���S`(�Js�.OB�b^�5zxL�(��AC����ɢ���
/^-
+endstream
+endobj
+1802 0 obj <<
+/Type /Page
+/Contents 1803 0 R
+/Resources 1801 0 R
+/MediaBox [0 0 612 792]
+/Parent 1795 0 R
+>> endobj
+1804 0 obj <<
+/D [1802 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1801 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1807 0 obj <<
+/Length 2662      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�~���[��C���<i|d�#�����-�23��ǎ���
�)Q�]f�����@_7��x�:�z��"�^D"ɤw��iI��XDdH�����O9
Y*�O
��.G��`�п
�̏C�O��} ����r��b�z�=ܿ���`�4��Y2�������?N(�$�h�Yͥ7]���{�����^@�H{?̸��È0h-��ɿO����"�wW$#J��vE翌�n���9P��Vf4���,BBC]�b�+
	�f|y=��džo5�/��8%"��Œ���Z�����%^n�}��E�#Ao(a�􆔒H8�g�S\.�
��s��ڌ
�a�\����?���H\��S
�S�Wd�|�d��
Y-^݀'���c�.f�jn{�U�&[ϳx��)&��qa�IX�p�;„q$
j�
�i�Х"\~J<�QK�I'������`s0�7#em��\�r(��E�%ʇ~�؎2O2ە��t�?Jh�Y�����B�������F��S
ݔn�lV;
�u�M+��
+���v^�8�Ŧ,���2�!��Zg��fi�A� "B"��ԕ��Y/�}�qId��%�������q�� `�ƴ�2X�+��6 |����p-�GC�}��l��:+��źb���@��b��Zo�A �Wm!�L2MQ
�j�V���a��A��f�
�K=�\p��3v�`��E��G�6[���Q/l��5zޖ�����}���D�V"!V�#�szX��"��Jy^f�
��|���¶���ֵ�t1�(@wY����̴R�D��m�ΓUL�>8�iTf�*���bm�X��xOb_ͬ�N�9����u ��(h�f��a����$��٤ױja�~g�c>���S���]��*}.ҭ<����E�4|��t���?2n�C�l4�f�Ik�7��фx�m�<!��y�P3o}�+l����
�Q�ƏE���Y�䈺ւ*��Y�ʰ�fa�ZU�
��Z��C�!DՒ�~XC퀊�0T
�bZK?�� �*�<��W*Sb�0�����

+q�
+�
�Bk�A
�E�v�$Ұ�!��^�f�'dH4��!�CR �
AJHc�b$tk�W�<�hB�
l'Ѽ����`�U^RY5��
��.�
��
o���Gzp�i�2Ͼ,l����h�G�U��
��l'ɹ��iQ��9`�e`�
 �/��>��c�G\�O�T{]
+-H��
�&�Q%��\��ms � �
�YbAjHߵh>'¨-�ӫѷ��
+5d��L�X�)���cܐRB�e�JC��{a�)�`�-Ʒw�����
��wB�Dhކ���+Kwg=�	�$ 7
���PIB
+�(H���^ ����
+��d�z�� v���x5<�]y�i�*��nf�8����Q�1`!�b��W��a�q%I�!5���Kj�&o2����%�Ź��C^<����t�pvޝ?�z�
���d����ݱ��vc�� ��x�O&��ߖ�@yI<K����AMD�7H�1M���>4��C�˯w��_?Z�y�X�ٴyk3�ף�Q��Ҷd��:�0���x��~�3r	����T �G<:<��8��
��)�ۗ��)�dL�>䄤(�����wA�za�9K(ڌ{��I��dg��ޭ7�wy��Џ�B0�{�b���nM|�m��&���
Z��k�x7�v�e<�
�~�YH!1a���))1�0�AR����d
o�)������=¡J;���\���6��-	��V�+͙��yvu
|c����N�N��s�u�I�q��rW$���� �ŷtδ����C�H*�j�!/��[��I��
�NժR5�l�
�.⪔d��d
L
�-G���#�-j�"����7�*���'3�U
��'���83����C7���U��Ҙ}���Wc!eמ��~���5>��j�x��$'R~J����H���
�
5�
+C�
c���m�*P�Ԫ�<6YZ�y���̺.B�T$$Z��b�-�Z
Ý`u��sfru{y82 at G%z�ې���m8���m򯃰y�q¬�#���,Y��r#�ª?��G5L
q�܃����������)Pm(xE�x�>�Yn��ñ"�Uñ��CXJT� l�"���E�@I9�{��7Cn�D,��mf�byzsu5�>��.sRV<��/+Wֈ��岎�u��I�
+�=A�H찳
+���+�W��������xȓŽ(�
6�UK<��Z��c��PZۦ]��q�XYpRX`�`�	���wr #��ٯ9�j�]?�v�H�@��ܠ��
��u>Da�,��~2~����%�i�#��`�v
+��V���85��}|(�EZ�s*�a������!�OWf�K<�W�q��8���K���k،��s}���ٶ��3`��h�cY fw��tQB���aTG��
+�� ��fy���d7���=?Yz;d8QA7��f���0�� �Y��ܒ�`�S\�F<ڝ�(��E՝ 
�����6�[A�
,WW`쩾#{��dMl]�S�
v�R)L����?��`�#� rGj���
 j�K
@bK[,a��ӻ���ɾ�z��J'�ґˢ4���F���
���<>�I�li��2�[Z�!aM9�o���Kǝ�����06�TVjN� �	;��-�
�%+<�t���Y�¤�jqȾ
+endstream
+endobj
+1806 0 obj <<
+/Type /Page
+/Contents 1807 0 R
+/Resources 1805 0 R
+/MediaBox [0 0 612 792]
+/Parent 1795 0 R
+>> endobj
+1808 0 obj <<
+/D [1806 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1805 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1811 0 obj <<
+/Length 1691      
+/Filter /FlateDecode
+>>
+stream
+x��Y[o�H~�W������s�x*u%JLK(
Dj�V�c��*ֆ����Ϙ`p�(޾��x|n�w.c
��r�w���F�G]K"�ך�Z���%�D.��ln}�;7[ԣvw�hRbG�� ��j��q�m��"�ī��"�1icƛ�f���W�"�
`�<�Z���c����ATz��|��bT"w
k����C�}��wh�+1���
������=�
�o���2�"L���J1���JI�?�
�����vo�-�"�Rx�ooA )��$�YD���*�v����B�]�U�Q��s��p��1��(��n��b��b
��z�V�l�zӬ	n�Dk]��Q��
+��U�uo���7��F�p�4���Mew�Y��  ���C�q�2�8�ڲ�?�v�����@Ɨ��!�X�%ρ���k�C�f���p� �� �t+�Q	�eQc�E
\f��5�f�ꏺ��+�B1��sQ�b$�nY�Ur+� W��Ɗ��8��Y�U\�o�`
�u0[D�I
��޳�˥
��:pP��)ʃ��Ig��i��k`���_�`Z��'�^�7i�>�g�F�Ȏ���߹�����
��
 a^.��
0�ܧ@ˬ�>�Մc��K�I�
�lU��
U��gW���zt��
�UPy�&S
+��e��8^.jW���۟�?�N���=����(��XG���],�D�j�pi���㻜ȶ�<�޸�
+�������Ai��L+
+�� <_m�/fO'wy4tԎ��D�
��)��|�S���ݺ��c2�
�*У
a�;�}x*sQ����L�����=�>��� ��]�AғeJU�eP(D��	�*8�z{~ī*&��rVTJ�(���� 8*kQ
5؅YR\[��n���V�s�"_��9��R��W�jT1
�;U�qm�4��D���?�q�W�،O2K��pP��Q�#��(B�N9ujP\Pg_�/��y/.�ξu��+�{ňu��[����¬
�Z�(���d���\	֫E� �������S-�p����n����>ۛSb��'J>`)T �˝|��}!�|>H��iUم6$0D	��/,���F�07J��#ү:1�
)jQ��dSpI�3{��:3��EI���cM�6�0/���R�	���G�X'��rU��#�H|��DJ}�@D�>�!
+�0�vw���ۦ��
Y`�
�k��e���A

[�b�_,V�C�TN�@��N;����/z�
��^�M��0�n�
#s�w��yk�\�˿*����Ή�4Ԣ')��:���j�s��\�"��۪iY�����r��jW_�d����JFp=�
�j��Q����8/v:;1���<%�ݗ$x?
�
�̙�
%�Bd	�{rn�8�b��np0﯃T5@�HV�:�����_t�FX]
��wr�պi0��.7�.=��_��
#K��V�44�t@�5J�Q�&���4���c�
("
�j߯�Q{��p)��>
�
9�88���u��<9yCq�0M�

ZM&�j�8ds�
~D��+4�*o׏[W�a��{4�u��pT��?���AEBr�`�Sg8
��G�P5OKn?���T
����|���e������o�������PE�B٫��\�#4��p�k@Wb��W.bz�Ί3'=����x����p�
+3��cF��s��9�F��/y��1��p�
����W�B
+endstream
+endobj
+1810 0 obj <<
+/Type /Page
+/Contents 1811 0 R
+/Resources 1809 0 R
+/MediaBox [0 0 612 792]
+/Parent 1795 0 R
+>> endobj
+1812 0 obj <<
+/D [1810 0 R /XYZ 86.4 726.045 null]
+>> endobj
+414 0 obj <<
+/D [1810 0 R /XYZ 86.4 386.427 null]
+>> endobj
+1809 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F38 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1815 0 obj <<
+/Length 3796      
+/Filter /FlateDecode
+>>
+stream
+xڵ[ks�6��_���ݑg"�x��NwFIܭ['ucg��v�CK��
%�$��~�@J��G���! .���
$���?O^ߜ�}'� f�fps7�
S�P��H>��~reNG"��
^|��b|y}:��
^�J1LNG|8�֧S���}�/U��yRgłz��,��I:]���o~89�9�󄃒`���5��L�'��;L1�� `2��v�|�d�Z�����`�$рsk-ڣ��3
w�1�L�`.��_���lq�p�Ǭ��V��N�E��_��m��YZ�g�Ek�
+#
1�얿��n_�,$��9�r1͒�g1e�Q��w��j�REf8E8���u��y��h���g?T�3]$�y����C��S�M�Bs~�N�d�Y���z��q��	��3��y�@�Ճ��@i��[^�s����NG:�,/FR��]��-��8��0)�XU�S׵(j0�v&�i�VU;�z����Ib��MO����L�ɩ���q.��X��e���3�]�|p�%f�v��
.�<V=��)��r���
��T�ܪ����8���1a1aX��%�^f��
��˸
_��f8&+z�MS7��{�i���
+x�/!}AJ�Om� #c"�6�>�5^_���e�H��)�+bO8��ڍՍn���E�����b�1�f�R�L�p`ɸѻ�`ōu[���Qʀi,a�>����ח���#�B5�9#q���<?����v�O�/��
of0��ŝ_s�:^M�2��E�������e��3 :DhԦ�9ňC��hX�)[��}N/�-Nlԕ���̚���r=��Q�6����H-�Wj��B!�I
��K�./^��g_1-�Q�՜l}߫����%+����:G�9+�E�4
3?�Z���m�D��7�O�E��Y�;)�8 y��'ɠȮ��"%
��gO\
(�
��P��p�k̈́�v��!҉�����EqK �av�c%�IQ��˟��r�Z��cV�I�,�O�2�u]��Ϡ�yB��3t��]�iX~s
�PǛ�v��dc/h�ۋR�N�
���&��^=U �P�X1I� �B��Z��~yȳIV�O�w���F9B{R�|�%u�
VQ�"��JoяNxڪ �
+
+��!],�"�i��R\
� 2V]q���9I.�޺��~8��^��p�Fc�V��&�">y�����/	A�o,0���
edb��f`<&�+�
+��d�|J]�w.U��
�}�n����oƗ�\}8���o�f 3g�E�?
�;� �\����������U�W>K
��p�G+�o��CR�Π��_�<$�O�*���H�駸*'Ċ��Z����K�R�����׈k�����vt�V�~$a'��7��עa���Qܹ

���� 9q����ts%�4�7O�2��w�>���W��*���;b̾+��[�n�.
�R��`��w�H��E� Y�9���m�ޢ�Y[�Op���ß���7ggw�d��OlR��N�K���l�|ΠtrwV6��yOL6p=+t�z�+�֘r+ A)Z�<F
+Q?�

�
%@Zk�?�v�"�Z��jYV����%'E�P���.G��ʵ���48�F�:�K!�
F�W��/K�f
+즥���@kɌh�p/�S�T�
+��	;9�Ю���P����P�v�7q����Ƿ��7ցaaȏ��F:#lol����s�Au%��N�J���۰e��A����i�c+�zktܢ�=��ш�DO�Y�A�C]hl�&d�V�WlI�I`�K�
�b��e_�$�D|��#�
77�'�[�
��ȑ��=�푡KI�b��ݔt%X��P�.*�cx%��*?�����=�ʴB(p�	sSaB$�Kڃ�2u�3��/
��tD]M��}ȍV�k_4�$eZ:~דߪH� I��!3ܼ�cD�	�yЮ�u\��vr���S����ܔF�!x �1��+m3ݗ �@(�v)e��	W�^

ec�I��q��8H��up,Q(^�|�Cx�2��
A����p�G�b��N�X��c�.T�

(m�:��QY$��K��O��&���� "G�]���T��o�_!7J
�~
x��
$t�`�G��h�
��n� �'zܤ�SZl��^4ѺI*��(nR�s��4p�JC����,-�!���,-����h�y�
�DDDv)Ӥ��nz�&��=��).
�6���
+�Q��W�����JX�0���\K�ZN?mN��&16�Ę��ҍOݵ�"/���93��怗� e�����i�O�>���[�D���
�A��o�q����]H
P^
�ȫ�f�NZ=)��<�O&O,���}���'�j�kR{��odгA�B����%�Sz��D��RQ#_�9���X��)�I��3n�j���ۗ�� �eū
� �'^/XI�2W
��v%ה�	��"��gQ`
� Ɔ;}� �@Z(�f >[=�� ��#��USo{+��&�.O(�|1�R�Mcz��W���Y�-H��xu���sP
EDr���T��C�`��[���"�]��� �M��xd����`
��ρЂ��]�rں
-���C�:���qHiY����9X��+���2c�����[�'�X�&�R��&�����F
Š}�C/^H��9AfOD���
�	�����߬�7*j�ήG�h2���4��GQ4����K�V�^�o�g��nӳ8��3%Ŷ"
g"��i�Xn�-Hz�,�ߧgHo o��>5Cr�|�6���n)H�9I�A�V��S]gs���kr�> !��ݽ����
��j�UMr�2��)��BDL���m4i)�������o��9p�4�ؗ�Ԅ������y����I
��ߤ���Z���9�7K_�[����H�V����i2퉄�͈�76}
��P�zW�.�]�,�!c����	m+�HC�6ό�t��ӣ1ט�+����,��m﮼�T�Ͻk�֭���A�}��!��A@Ҭ.��"o��`"�G�i����4���[��p��<�w
7i�0a���[w���"f��}���I�$=L3z�ї� �����{'Ʈ:/I�*����k4î�}�=�z�F��5W[M�D n�!��_q��*Y���<T�I|�����aM��j�}(	���ޫ4 at Wf
��=!Eqd�A����jV,s��j�5H�7o�.��q���l^���� ������]k�
���F�?O��ڡ��lf������-p�ۡ�]i�Zj��jn��xw)����zrГ�����Y��Ј��PO=��m=�&n�C쐭��X��3.����*|�P[�h�Թ���y������l>�X�p�����&}Jn�j}
+=���Q��@ ԋ�� �I���yIQo�z��
+�:$�E0�5o�p�O���"�ȍ;�3t��J*�[2C�נ�!i��
�L/c0���|�K�%�Pd�2�Ø
.-Z��mI�*�>,GV[_KH[���
+ -f:/l���1���8�����oo�"����6_����K�
p��� Z��,~��z���3��"�
Hѩ�\{zk�T�2)D=�G���0�
+�/	�& ��R������Eax��%U&��66>rid[ʺ�4�`.��[��(����,T9�A�$3�wOezXt��� ���!�g��?��A|��$��$�
�Ԫ��.�Bͥ���|yv^4����@H~<i�r7�{�-���޽/(�K��~X�7Q�,��N��lF�U��
x�g�4)G�� ���˼���l:������EO$�r�>��>ƅ1�
�.
+endstream
+endobj
+1814 0 obj <<
+/Type /Page
+/Contents 1815 0 R
+/Resources 1813 0 R
+/MediaBox [0 0 612 792]
+/Parent 1795 0 R
+>> endobj
+1816 0 obj <<
+/D [1814 0 R /XYZ 86.4 726.045 null]
+>> endobj
+418 0 obj <<
+/D [1814 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1817 0 obj <<
+/D [1814 0 R /XYZ 86.4 613.163 null]
+>> endobj
+1818 0 obj <<
+/D [1814 0 R /XYZ 86.4 415.436 null]
+>> endobj
+1819 0 obj <<
+/D [1814 0 R /XYZ 86.4 298.129 null]
+>> endobj
+1820 0 obj <<
+/D [1814 0 R /XYZ 86.4 156.732 null]
+>> endobj
+1821 0 obj <<
+/D [1814 0 R /XYZ 86.4 75.291 null]
+>> endobj
+1813 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F14 697 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1824 0 obj <<
+/Length 3132      
+/Filter /FlateDecode
+>>
+stream
+xڭZIw�F��W��g����dYv��eG�3��� ���,�<�~��
�)y��h4����
+�gw3�������w2��,D0���ES�P�,�|v�ξx�L�2�ޛ6_�yq�O�K���/ۢ���;}L֛�|��lνz�2��U8������룿�8��g�#�Y���r}��O�›_f>�q4{0��3%c&`��]
�z�Y�;�1g<
���-�<Y�H���hpVih
�s�I���
0
yYV�c��M���!o�iu?��m@�*Ý��g���꼴?�l�������J:���*s�DpO���/��{u��jȩ ��B�ӟ��ty��J�𘤗�>�Mɸ��6�G���r��Ӌ�7移j��	s�9Ք�s�B.�#/v/�>S�N�"�L+c�H��l��upP)���a<
˜)��p6ࡹI"zvqr���Y-��� �����۳�	
�,���

!���gS�2.���b�j�l²��s�M�Ώ����尐��~^�M�Z%
��R(�)�
�����X@���K����\1_�?��!
+W�b*�#�����<��c����R� �Z(��i;/�E�Ir��"v��cgթp��L�O��>D��x!�~K����qhkFׂ�`3�A�F��-dȂA5�\�a9	�-'���	<P9�&�?��”V6A%K�
W�W|�:�!���`��}���rեy"��D$���oZS)p�*
Ih��������ٺMV�G��$u���m��eXI"��.AN�|δ˄�nP�d4R(,��F�T��W�hX�U�$�H�a���i������O�vCC��b���!��ʑ�#F��J�ʑ�Zӱ�
+���j“"(A*�#DP d��gW����2�R=UQy$�_QY�jC�f��~����9�ؗ�э��lf��mY�����z��ʅ�;�0��C�
l'{�
�@2� �F��̳(ꑹG�|�*�� �U>��ޢ�����]#҉�Ј�œ�W��H�96��ˊ
2ȔjRq&��G�ś�s�]5k
�]���9ٲ,��su�V�
�/<�Y��/
�y`O�{��v]�!��|5�<C和!��D1�%*
�y��h_.�G��i��O:Ye�Y�ˬ{�)(
嵘�H��
������t��,�#�ʱRΝ��Y��B�e�ej(�D�S)�����@H��9�XV�P���8�ϱ������P�*���4G/ 
풍��ϴr��:1Ȃ(a	
+��
��4`H���m����E�}�DR���+��#=����a�G�Կ�9Q�G����c���\f�$?�^V��ٸ
���4��V������Wc@
+�%���һ���v�Y��T<a��|��u�Ø
D�F�QP'H�#�Tm1� ����b	
2��.D*�c��c���R���K���6�S!>ʖm��¨)}�$�	�Q2$W���
+I�
+�O^l]j�Y�v4��XM`��NJH�*[6e�
-�-z�QN P!t5{9�
��/�'���0����� ��!JX(h��bpAE�?�QVć�r�*��)Rڽ�ț�D
+&z������fl�1�
1�i�
1h$�\�
�	�2�Ei\�����CS`gP	�Ѹ$
��i���/�H�!#�E�UN�[
���M����:��"vp�����.���
a�x<�8@�C��ܠ!t���a
�nW����^�6����m1jB
�~��[��M&{�c�
�+��~��
;H�t��2�g�A��;Ā���[�M�R��s��
�fȌq%�dg&��u�,�̏����1��x}��p�R�ƥbA�Q��5Фʐn�W��!�2uV�Y��(5]���_�Xt6�u��Mjp��6�ya_$��h {�f��ِ4)��j�ˮ�
�f �鼲�[6fJ��d�d͒u�ٍJt�"(D1T,D��,2ﺿf�;n7^����m	8�W�jAW-��h�=;�A�	D��:H;u8qH��Mn�$���(�V
7�0���;/�r.��p`0!{��v�S� [
8dI[.T𡥩9��
��A=����F��O;{`����i��Z(�4`�,�a 
&A�{�B�V<�^��8�%:�c�7��uK�RH�x8v׫�M����,lq�H4悭��6�)����#=���@��쭳�'�݇�o��"�~к
8��A�{����c [...]
!�?�v '&r�9	Rg�?�Fu�Q

+V�!�yO�b1�DNr��N?�3��5��
��\�m[&�O�+7M7U�(��eg�rB!c�~�
a���4��դ4�������6�-�^O�����;�̏�
+6=�q�	�~6�˨�K����‡0¹e�X�W����>3%�+t�T��9���
f�X���4@��
��.��|$ŝ�����&>E?H��B��WM��(
O�Ɵ>�=ȸx���x
+s��Jh�����Ch�1�O����~?���@
�(O��`XX

�+�g���:Wi�`�rc�i��o��yEh�I{gO����lm��p�ڊV=�o�}u�}\�~����C+�v5p+��H�+ֵ�<�υ�)�s
�a�/r_(�Z�����7����2���Ma
+��_�Z��N����0%��X��/& �$UPb�(
+�Z%
�Z%
�p.�?�z@�	���=�F
)~���ɖ�p�
g� ��'�
��4S��\x�
���R�
�H�pO�W���JZvՠ'z0p"�Y��) g���۲���M
+�#��%x7��ݴ���]�Y���	_��u%t��Ƌ|_
�\;���(y��-�jo���>�n
{�/WS�#T��$M�:1
+�x��W$�z<������AȮ�)l��g�Ӳ�!�p�	�
+�
��DT׏㿛����zR�V�d�8=8C�5L�<
�q:��ߺNŎ��Si�<f�	
�4�������%Z��
C�‘�����
�{� L�b1~�~�����H_4P�
E
Cш!z�9]Ǟ)X�o�9{hڮ
�|���7��9Cb�^��
�H�bi_�/�xn �{� 
��/$��(Y�^
+endstream
+endobj
+1823 0 obj <<
+/Type /Page
+/Contents 1824 0 R
+/Resources 1822 0 R
+/MediaBox [0 0 612 792]
+/Parent 1838 0 R
+>> endobj
+1825 0 obj <<
+/D [1823 0 R /XYZ 86.4 726.045 null]
+>> endobj
+422 0 obj <<
+/D [1823 0 R /XYZ 86.4 646.538 null]
+>> endobj
+426 0 obj <<
+/D [1823 0 R /XYZ 86.4 428.312 null]
+>> endobj
+1826 0 obj <<
+/D [1823 0 R /XYZ 86.4 369.231 null]
+>> endobj
+1827 0 obj <<
+/D [1823 0 R /XYZ 86.4 345.243 null]
+>> endobj
+1828 0 obj <<
+/D [1823 0 R /XYZ 86.4 322.362 null]
+>> endobj
+1829 0 obj <<
+/D [1823 0 R /XYZ 86.4 298.928 null]
+>> endobj
+1830 0 obj <<
+/D [1823 0 R /XYZ 86.4 272.07 null]
+>> endobj
+1831 0 obj <<
+/D [1823 0 R /XYZ 86.4 254.375 null]
+>> endobj
+1832 0 obj <<
+/D [1823 0 R /XYZ 86.4 236.681 null]
+>> endobj
+1833 0 obj <<
+/D [1823 0 R /XYZ 86.4 218.986 null]
+>> endobj
+1834 0 obj <<
+/D [1823 0 R /XYZ 86.4 201.291 null]
+>> endobj
+1835 0 obj <<
+/D [1823 0 R /XYZ 86.4 180.727 null]
+>> endobj
+1836 0 obj <<
+/D [1823 0 R /XYZ 86.4 156.913 null]
+>> endobj
+1837 0 obj <<
+/D [1823 0 R /XYZ 86.4 136.728 null]
+>> endobj
+1822 0 obj <<
+/Font << /F36 472 0 R /F16 461 0 R /F8 473 0 R /F48 619 0 R /F38 517 0 R /F49 646 0 R >>
+/XObject << /Im2 738 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1843 0 obj <<
+/Length 1707      
+/Filter /FlateDecode
+>>
+stream
+xڭX�n�F}�W� Xk����M��i��H�@�+�E�$�������-:6�<i/ܝ�33gfx[/�^�~]�.�y�%$�X�-7����b���So�y�|*�|�
����w��\���/����9g~:_P�G_��ӭ��7eӦE��yU�`+
��VٱV���׳���?3
+M�v�C"E���O�/��k/ <��W���<!
�»��9
F�H�
+�E�zS��G֔+"�.ea��ʠ
+�U�ֹj�4-ݺ�v���U�v��T��ڎ��(p�\^�o�(��A����-�p�;
����9�����bXp�bN7�2��bB�	�I�������7��_XIN$���~�M��w�u������
�	��"s��2_� o�~Qv�[�5[А zw<�ǿ��p�0��c/`
+���Z$'wSNI��l�������\
D
{��[qs/�p�SU�k;�}K�~_x Bt9y�.��zT
�H$��k2_.�e���<D������Tu�qc"�[p�
8��$���Ժ�
x�V�FȎ!��z=G�g�p)��.5���r����	|���Ly
�� "�D���o�5S��$+�} ��������x
Ρ�9�~
B�;nZ봴{+��ܪ��]ZnM�ca��헍ٶy	�[���D�]c�-NN2�L��n��U�& ��>�_�����9g�%e̋ 8N��hr�Ӧ�˱
��`�o
+a�޼�]^�y3!Wp��"�ȱ��^^��u�}�=��$}4�WE���۝�Iߒ
+��S�O����j�L�#��6
lQ�͌�`$`�|	��l�]1��Hq>1 ���qX|�Ey�u��~50&:���Mm5����i���\�@�"��n6ǕI�1�`�1p8����{�'Θ/zf����2^�8c���"�΂�SO
�N=�w
��)�0ѕr��ѽ
� �;
�z�ț�k��z�VU�r�˷�K�5:�W`u��[�1^ͼO�+BG�-�y�
�9��\�z�3�ql�8��X}kU�8֓���J8jTZ�\D���񍽹5�x�������� 
M�K��&�$��`+nnv�Ff>�bl
5gt81��"A�IB
��jQ�v\�3��L��wU�plu2���_�[u�I8"�8d��؄Dž��2ݟ%m�t�|�U	�/VSe�rH�' ��Y��H�Mu
�\�8%P��H�g�9�1��о���}�vq�b� ��p �NL/���1wa�PW�:��I�L���j�2,��Ž�w�	L)��j���n��3ή���D��Q�$���օ��Gb�ޛ��;ދ"��ay�Xp|���
+���|��xP�4v��qoU�CG�"���-��ҩ'�����y�3͞=��tI�K.Ǩ<���*l�Զ��4y����t|G�O(E�d�4B†^�bJ�2Cs�����W.C3�hh�P�\��C<5�@:���MD.?{�4Vp<�d2�cK�;D��,�B���gZ��)�}�ã
¹�W:�:���
	ͷ���0%+�]�_��s,��P�n"m]!%�I�t�x4�F��kegYe�Me*B�=4�ե:n:�.�Q�caN��'�"��P(��oFV�Օk�lq��L�
W
m!�p'jE(��)˜{!
�hf?�Ox�ß�p��L r�|�Ү�EF�N:N�I 9t�����B���V8�P��* �!T5��'��gG�K
+endstream
+endobj
+1842 0 obj <<
+/Type /Page
+/Contents 1843 0 R
+/Resources 1841 0 R
+/MediaBox [0 0 612 792]
+/Parent 1838 0 R
+/Annots [ 1839 0 R 1840 0 R ]
+>> endobj
+1839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.922 578.75 484.135 589.598]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.1) >>
+>> endobj
+1840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.616 578.75 523.829 589.598]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.2) >>
+>> endobj
+1844 0 obj <<
+/D [1842 0 R /XYZ 86.4 726.045 null]
+>> endobj
+430 0 obj <<
+/D [1842 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1841 0 obj <<
+/Font << /F36 472 0 R /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1847 0 obj <<
+/Length 3256      
+/Filter /FlateDecode
+>>
+stream
+xڭ]Ms���W�h
��#��*�d+�T|�݃l�c�ȶV�l��%@M� 	6.#k�|x�{��������oW����I�U`�J��^y����������/�f��Vyu�����z���כ��_m_�����p��~��^_o�������3]��Y?m�ǟ�Bo�M�Kk��7���|����߯�+���]=�]��_=�����L��Ow��J��$��]���_W�Ա�Ϯ�
�Sr�W+k9
\
�z;�� M����O���O��
��=��O����x!nB&DH��Ri��>��:�K
�ļ?(��V�(��"6�W
-�qz
�,s��ư7A3

@AO��.���
4����)��Y<�"x�����g
�/-Kc�E�2�Ň~��w믍���K�;8dʙ1�F��
g�$�e�b������0�5���bi���ܧ��eF��>�G�]��@A��D�

?�c￱��[)��CI;p�	�FI;
��>�����
>6 Vv9�^ɡ�1ki� �
V�Q6�LQo0�O7�&��|��0xIBȩ�ӂ
"KX�Q����2\��p_̌
4�
���#��y����PY�U�
+2�
*0����N#h|r�	� 2�`A�HN��(:�ǔ�6Z�m��L����^� b���5�"�I��t����1:����(z&Wy�
\Oq"����*O9�>~���o�+��i�~�t��"T���'
�y���QO�L����S��j���

����fǟY�Z
+ح����F/ih
�Y�j�����nA\���k0����~��z\>t��yU| ���72�oo�K���\ڰ�h� ��U�Q6��e���6'�L`��=�>~;t�
+�nAC&���#�������&g��|p��E��Ϊ�(;K���.X%�}�6	[����h,%��2�R6VoPv�S!� )2�s���e�򳑆I���tϟ�g&�x���TV��^�B�����=l� x�콰�C��^�3��
���7�}}�y�1��ў�x��K�Q����G��g�-
�$�@ã=��m�4蒑ɫ%ӲA��� �߫��n݈k6��P/�9��m0
����_=Dy�ŤY��ЀD�-��E}��;�}(wq&aIQ������}>�x5�(�"S@���	

A�4�
m�N�	��mnxwc��z��n7�t��׃S7>#]4h:O ��t1=�s�EOl4�v����FA�f�����N�t�;�<ث�LQ��/���L�cΒX�"'�Nfh}��sH���aq��>01~Rff���ɾIA�%�"%
+��E��
���(���F�D�k�c�yەSIJ����Ao:�7=+E��)�/3�x�#0��Y�v
��,!=��We	z�R����Ա�DQ��;%�����A�Q
Q�$��(� U�I��I,���k�+0쮱tA�5;�3o$-_��
m�/�d�������"_�w�/{�塜1��xp2��d
z�y
+��e����1zB���i��E`Ə?THÌ�{��w*�
ܩ��^��je}��!�s���%�F5Dyz��)Ò\A'�'
+&�<W���-r擭5�(�"[�����D!5S>4Iұ�6�a����Ӧ
���<�H��Mo:�7=/`��Y8�"`_����)O��P
W��FC�q�[���ɡw���?cA�Z�A/��O�h�H;��!,K���M琧��W��Bܗ�['�
�j���8vVҎ1�,<bʯo���A��Ι��a�@dͫ1ʚs͸53D��0�8bH�y����9���-{�L.{
��w
+�"��r*~Jҁ,
+D�\=F�r
+X�M慎�����d�y`��[�7:��7Lm�h0E�d�X����F��F��(�sX�b[�P�El뱁5ڷQ=	#���0A

��g5FYO뙤�	*4�g.�����B,�dj9n��}��uA��2#�5��A��.��(����Tk��⦌n50�ÏSM{����|��Kפ���qZ
!@du�1��jX�@S0��-��l��mw*\���ъ�-��>��s���٤gn�|֤��l�e��ȊJ �(��l�������Aw�\G�%v�#v#��v�ïI�MG�;�NL�sO�� �MW�Q6���
1��qM"
f�bv�n��bqki�#�˦�;z�İl:���t�He@q��>��qy�P޹]��Pٳ�􌍀M�y�����R7��2�g�n�*����	(سz����V]�arCx�F=D�f2XƗ��l�!�
s����� ��j꺡�v�kLZ��d|�Ԛ
�
+;E��?��;�Dֽ����L3K���Ck��P� �
i����|�5ve9'��L/�
ӛWe��lg����"ۮ�l;'��T��2����\gW���'��ţǘ������J;E�d6c"h1� ��V�Q6|JN�q��y���L��)c��/vZZ� @dE�1ʊjX��@U4���M��s��+-� �y�L/GLo��NQ:�MI���7D�[5F�o
+�AS�(:�~�|��M�JΜ!U�(Y�j����̗"�@1ʷ��9W�%�<t���p�g7Q{�H�
�=s�T{�@d�Uc�
'��'@1�I@�|P�]:n.���-T؎�1ۮ�qV
�"��|"X�i��)�|�e��s_�
�x�6�v���K�5���/��o^
�"92�%��~r�un
^ $O����S�6=T �5=�ߠ�4WzMϪ��;�kQ��:��'�`ި��������ޤ����<_vg�@~���^���g ��f�$�j��p��%'�p�sq����R߸g����n(���|S�S�V��<Ӟ�3���|c'��'}C�ȺWc�u��	kf	?�~�̩#���˗��h
��ē#

tt��������0�y{���⻦����l�j���⻷���*0�l~r
�s�3��<Ƒ�e�!rS{���,Ui��)�l�e�i�����6@ѦI��|P�Y	JN%��~��&*��������
�@d�Uc��&a�
�or����SWa��l�WH�
��G���Vc���|��x"&_џ�/�s�0�@	'dv9���MT�)R'�q�<���p�e���k�D���M
+�+��d�rˑ�e���ͪ.S$?><�B�]5D�u��;�t bU� ����?��
�=G��,��M�.z��'�9�<�eB�Z5D�k>��N
p b]�����=
�V#�KV뱛��A���7[�
A�$�?B�h�
+endstream
+endobj
+1846 0 obj <<
+/Type /Page
+/Contents 1847 0 R
+/Resources 1845 0 R
+/MediaBox [0 0 612 792]
+/Parent 1838 0 R
+>> endobj
+1848 0 obj <<
+/D [1846 0 R /XYZ 86.4 726.045 null]
+>> endobj
+629 0 obj <<
+/D [1846 0 R /XYZ 255.116 672.857 null]
+>> endobj
+1845 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1851 0 obj <<
+/Length 1940      
+/Filter /FlateDecode
+>>
+stream
+xڭ�Ms�6���<J� ���ӦM&�i'�)Ɂ��D�Q${����
�	��dY�]�>\K�7_��1��jv�L�7�4W��3L5Vzf at 4W���\h���
������޽��qq�/@��Ņ��t��/���_W�?���?��M���q�}���~�9�Y-w�ŗ���߯f?g=��5s�47w�O_x�Ŀ�o8�����I��i>����+9�y�2�\�p�	��@��]-���z�9
0��/�c�oE�
+es����u���&�F
>�۬�w�n�����e�AͿ-�|�E�]�O���\�M��k~���n���q�X��^�(�l4�8q.x�$mb�D0-�9
.���I��^���̡�=D���r!;Z^�]X�$����X1)t����%��1a���0�M�4��rbܣQ�3 g�1.�w>��mo�8�wˎ�*���0�B_B�-SR%C�P�h=�%(�G�\Bw;�U
0�,�����;�w�+q��i+i�Tk�o ��H�c�\���I���
+t'⭐:�8^vH~[\8�6�>�Z.q
f�@
+S�}%O���nЉ<Q�D>���Ic�!�@������Ra��%@/�Y�8���h�#��9�8. at zv�����CH+����깱i��M�X�~$$�2F�@"hD��5� 9��r� �h�� �v��������P�ً�Q��5��D�~ �hf9�4"A�y�
.�}q)���OR�R��m�{BD�ӌ�FD(u����,A���40��5��	����K\����5LR�R���-��|��<�
7y�2I�BȤ�zb- h�LVk�3�;np�4�8Z�IjAjw�]o�])0ܗ�����z�;�%�!�S�b@ЈUk�\$��!
�	L�Pjw��>������� $�/��/�?GP�`P�s��A#�T��GI�:�W#
m���������v�:�BJ��gh�ƎA
r�v��]���ڍ�|�񕆇�-=���	LG�R�E��n7A��$��~���I�1�duT��
+ �f
t����b�F�.��h�M�D��D���C��ae�q��
5�9�
+`H�
�sy��HC��� nۍ�-{(1���|:�$w'�
@�滘�x�i� \4xѷ���S��"�ȎD�RGʚz$L��7��
�hD��5�0Y`RC9L8^i9L����SN�"��~D�R?�{$E�2+�%��)���SdÇs9E8^�IJRj����h�=�ȎD�RGF�{$EJ3|~�("hD��5�)\�*YN��j�Z�Z�k��r��xlj��sY���%����\�x�&��������
+ُX�~���H��;�5�A#bT���H�*JBw�
+���O�|
+��D�&���f��GB!�ĻH�hz�D��V"���S��7�L�Rj���G�~�@�g
+�}�V��.������~�c�o���`&�[���tD.5]���f���H�@���|�a�1g��
+GWu��~�Xa�2n���̹���
�#�G[�ҍ�,
w�Z#{t�H�ל+���p?�8���)���k��v ��0n�A	
i�&=����4֒$%5�aG_���AЈy�����#
��e(�cb���
%(�7��Aٷ�ܖ�ǟ*Ɖ�L�)u��5I"@eF_I�CEЈPUk�2�I���9�t�8B�Z��I�
��"��J}kQ�H4)�,�4E#�T���I^Y�p�擔���s�RzQ��#;q��|��DB�	,�ij��HS�F�&��[e�h�9ZMR�R�u�JR.B>��#�L�h�|Vk��xY�O���$�!�
[�`|yq ��Cߗ��%	��� �ǔ)�j�<N��PY
�#Y`��)�~Һ�V�b��
E��
��/IH���\�N)R4"V�y�0��UV)>��ťX���]�
��(Ɗ�Q�*�h��
+V"���:8��7��CfNj
+endstream
+endobj
+1850 0 obj <<
+/Type /Page
+/Contents 1851 0 R
+/Resources 1849 0 R
+/MediaBox [0 0 612 792]
+/Parent 1838 0 R
+>> endobj
+1852 0 obj <<
+/D [1850 0 R /XYZ 86.4 726.045 null]
+>> endobj
+630 0 obj <<
+/D [1850 0 R /XYZ 238.927 547.3 null]
+>> endobj
+1849 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1855 0 obj <<
+/Length 1680      
+/Filter /FlateDecode
+>>
+stream
+x��YKW�6��+�L�iT�,KK��
���b:��#�O;���+K6Ip �݀,˺����K�޽�������'?_0�Q�����yR �	}�
�k�t����d��Q������_�
2 �K�
�B�0����>|49�O�i���h�����SH	*��>A;�gz����=�\��=mǫ8/�h�Z�A�l��W����Ҳ�ԓ����j�̵[�݈z��b���qbGy�z0+t�'`'z��/Z��<.ʕ�2�	A����Ez�A,g��
�biF�
 v��ٰ\�,��+;�������su�j`�ΗiVؙ�Σ,�q�؉���'qr�{�ԙ�Q�xmD�� ��-
���0�7��(<���^�#�[�+���E듯߰��7�
bJz�պ�ǙBF+ov�%)[d�
#�S�� �$�� ~�K���c(��X���e�Y�jg��
�n�v��
�b䝧��TW� �8e�b�8�
y3ą�rX��H���H����<=?����DB5V`sJ��.��|p�����S���GƱ�
�����*��
�v�4 
�]�N�*���ջ����
Tg�o�@

+f���;S
+qt��ي*ǁ���0���O?K�q�l+�?��k{�U�
m�e���K�pW&�yU������L�
�#!�N�a�b�qc<�N����a3֏�Ou�K�#_v�؊IǛ�dz}<gf[��h��̒�"3w�*�T���L�vi���j�Zw�`H�n�[q��2�Z�RȢ�v"�B�dW�,
ݴXK�l����⮨��<2�\M��Q����t�k"
:�!$e��;3�N���� 2>�u�r���u�S\h���4�W;\���;�9c at j&;H�
*'I
�n��a
"�Z�G@��@W���o���(U7�ʚr�i���	:P	
�^o���}Չ��"�j�ϣ��M
�s����'M֖�+}WԯVO}`
��"�3S���N������(�w�������8
+� 
�wBH�I�+�&�7�`� �J>i�<H����
�N��Ǔ�zr~uq5:oA��3�T������k�H)A/[�}% ��:��v���bwr�e6_f��{��E
H��H/��=y���lv5���
 �σ�Q�G�}����BJ1[a�^� ��5�D�y���8�B�	�ns
X�8��P�Қψ���Mtd�
���a
��D`����
��

$e`H�vAh*�IA�#sv;
�fm]6���sR���l�Ϊۦ�V3�Na���䀃�J�
a�+�i'��%����,�ܴE8=�D,�7dW�t�N��5�!���0�;ʫ�ט5$�Y]x�lSU�zQ���& >զr�s�h������E��4��4�. �%!��w���8H����$lkz�x>�D*tPK�I=hi��j{�
K�R���Ҳ�
+��e�4���i�f\6H��K�#,	M
�8�XJUߠ~9���Ɨm]=MA�T���!��}>��.ޕ��;/�[�<.�y
y����D��b��EG�B@A:A�t����p29|?ЅPw?�#��v�����6�t"ԇ�3;B�L������H�&�
�K{a�����<�s�l������]��Gu��B$�
+����ET�ٛH#����QZ�v��n����o9s����{?�6X7?������^p�
+endstream
+endobj
+1854 0 obj <<
+/Type /Page
+/Contents 1855 0 R
+/Resources 1853 0 R
+/MediaBox [0 0 612 792]
+/Parent 1838 0 R
+>> endobj
+1856 0 obj <<
+/D [1854 0 R /XYZ 86.4 726.045 null]
+>> endobj
+434 0 obj <<
+/D [1854 0 R /XYZ 86.4 701.138 null]
+>> endobj
+438 0 obj <<
+/D [1854 0 R /XYZ 86.4 485.931 null]
+>> endobj
+442 0 obj <<
+/D [1854 0 R /XYZ 86.4 235.443 null]
+>> endobj
+1853 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F36 472 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1859 0 obj <<
+/Length 2783      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6}���[�5J��GWQZ������t�}�%��D�R�J�����&�P5vg�$qH���@��y��~>�iv��[*F)J���H	�F��HP<�-F��1'��ލ(�(MRx�TO>�S2�}3=����'�rSg���7���tv������n9RL�櫳��HF
��n� ���W�n5b4EJ���ٿϒ�k2�z͔ *�H�/��:��	EL�.i2E��
�!"N	
 g��
����IJ0�?L~� e�����	�P�Ƽ�L4�o�
C�tr� �XJ2���������x���q^���z�\�b��]Ӭ.6Oً�v@��|�����^䫬\����s�ƭ�@A])W�
��W���n
.�㧵)��f��mUQ�^�*���W矑��`P.�PHH�:�'R��8�l]���]��"�zɵA�^^]?�M5� �t'�D0�*3�
+�ɍj{���m�������4W�X��֭�P�V`X��r������R��~Q^

+�qհLM?
߶n�d�*�b���]ي�ɦ��
��_*���*�����|I:�#
}Đc(e����M*Qs�bDR
��h�"�4�aN;�I��:��suF�VR�K��"]��"ݠQ�nШ�ܳ*�E�"�O �c���r�B���8�r�J(y���Ԉ���I
���D�zbNO*���B��	�J�c����j�K)�� 
+,�
�jA
�)U��FL<�F0�ˢ�3��f���G8�~�xv��Ȗ�7pD ?��Ӷ��+j$w������V��� D`��r?�=|�b�Y\���$�=�Ȁ�
#"`$�
#P�cD���VϓD����[.J�"s��e���-�=.�s�B�Wq�W
R�R��;Jo�?N�S�Q��T����&k(5��s�F���=�X�.�)\�a�v���]��7��n��~��p3�
+��72�	�*wӫ �
��M/a��/&b�x�P\�pb
w�!R�{"����e���&��֎�p��
`�9���8|BW���zuw��c�:��
���H
+
X��BX���⠡��4����}
��z��c fci,�k��.�qO�'������y�\p�Cf<菧2�B�+��L�n�a��G!`�B��*$�UH�[!����I["
ܶ���ID�Y��R#}�������1����0S�6�&������u�g$	%�(�bʍ����tң��^Am��+(�UPv��pਠp���QA����(H2�l�k��^���?nk[Y��*)��A�d�%
V��ͦ �8�cR")��Nw������.
����� �h�B��G
�<�|���k�
t~�0kE�V���6AJꂔ�F���;�0��BKp����0�����1�
+2e�L<}|�0�['
@���	C	��J�����k�����
p�n9'�{�=d���P"�
���C�;��6������n���1�`n�n[g�e����&0�p������C@
ߑ��1�Y��]�v�>\�=�$.����Q"`��n�:�E�>I�	��ƙ��b7�������1��̛������t��i/B�ъ��v+���e��-#Mp���1H���7�7][}X"��(��G�����׷��]�� ���	��[�� ޴��;#c7��~)3kI�nN��x2~�VYO�O��v�z�Z_��<]hp���������љ�-��.�9H�}���k�yGLQC3�;�D@�$IO�� aq��حo���回�
�O�6�&3���yU|9���Y�ӻp�I
��nR�
?u�n&�p��X�q�ݺa���{Ģ��vcW�	�����/�� D٣�)8�t � 
�m�!��`K�l[
r(Y{�>��4��)\�Uw�8�an�m��m�:�d�Tvs���'�{�
X�IJ`R>�����6�_���g���
�)k���oL]��$R!r�p��X�	�8S�
����������~:�E���nm��L6\�Un��L��|���I��v���iS׎Z@"4
~@ˌHl��$��J�c����-8lFu��sڻ�#�h)����z�?���e~�t��U)~��w�*�#*�W�����/E�۶��;4�G����a2���w�
Ԙg�J�o��|�y�.��^�h��Wy���#�� ��4���!�����Kd_�V�b��U� ����mv�'�0���aIt���It���$�W]$������]1�cu�-/���m���C���JzS�}y��i(
+D�8���/f�ֽ��k�&
�J�,��<攓9�t4�
Py�
+|C*��
]1��ԽN�G
Pg<B�=�A�G/��{��\Kw��3��6��L-��lW�!4����kQ����Sl��>4玶
�DG�b쾢����������:�<��
��B�l���x�+J���$�GM�WC\Q
P��6�s7����*�s��D��l���@"4��f�
���
�r�)�GbT��Տ
��� ����������]�w'I[ǚ���1��l4u�h��J�d��]	)�r�s�
Ɣ8�)�
lf���;��ΗV`J�G�)Bln��|J�&L��;Qdz��+���ybNu��!��KǯO����L�2����+1g�*ۘ�ם
&q�Cܞ�*�Ki���J
�n	�%4�wCW8�}��E�1@]���z�%U>�'U�g����~y	aD�i%�Ez�*$ɢ�rb��G�E�R;�
+�j 
�Q�S+��������J�U�S�-��]���v�u�0���g+k
+endstream
+endobj
+1858 0 obj <<
+/Type /Page
+/Contents 1859 0 R
+/Resources 1857 0 R
+/MediaBox [0 0 612 792]
+/Parent 1838 0 R
+>> endobj
+1860 0 obj <<
+/D [1858 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1857 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R /F11 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1863 0 obj <<
+/Length 2596      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�8��+���Fh�M.݊�I�q
�Φ��Dˬ�H7%&����  ��H���Ԭ$�0p�O��h=
+Fo/~���튊Q�"A���q
+�F�DHP<�_�����dJC:�}�P2��f�~�q^�˽~�̳�>����n2%��h�9��y��b~���`���
�L��ۋ?�
F+x�~ ��oո����-.>]�����ވ *�H�'|T
�}~����14&
�P��DԇN�a�~���D�p���u
&��S��	��ż�}�W��]5��
	��P
�R�H@���)�cqS�,DAX^~]������
P��囯���g�8U��g�^?X���x�~�$���t����̣eYI�fٷ�
KR�0��,�j�hJ(F�����
�z��K&qV/y�l8^��鱎��8
+�%�y�@:���D�B����0���'��OM�w�'��
�.��)o�m^����q��h/A�y��_e����q�IV��g ~r���D8�^��A"����G�
@�������]񃽮�,�h�&�dk-�z�?��ͩ/��e�%��n�M�
�;�#���BC/ja
E���ߋ���Y
�`H
+�XHP	u�n���w��Q��nD�Ղ���Jӧ8[�gd�KW��c�-�����4��<�3��̊d����Ӎ�_��m�i�HB�`�����hW*X���L��;%ԏRa��V�`�Tx�JeS�ʢU�,G���o�J�ا�
��+��(k%Vv[��TK�$�Hϗ��;����6�H Im��mvz�NHa(gV �4K�B�yU̧����
+���ڱt���-�-�� F�e��z��
!��XA^�S"�.��a6�/DŽ��^dE�,��2��
ˍfpc�������q_Y�祐��C#�ߺ� ��w��	ї�P�"��� eIN\Л��xYZ�_�!>Lo�y!��H���
o� ��|l����& ?ja
�o��e�źt��7�=޵lHP0��:�%D�t-�Vn�@��\n�0%�B-��ccV׽��P�j9��;H�ȩ�ɡV�M]J %ʡ3��)�t�0iXUA�/_�T:IL0I��H�i�I�w��W�r
+�SJ���Sq˥�z�:
��a8����8Y�a4@�X��”U-L��������ڒX��%�`���TI
B��S%1���Xs.7��aE��n����P4�t�9�|��j����TF0C��PK�&h{5w��_\L�K?*���>L%L���r�#|�V�
̛���iG��rM6�c"�8�
PCi�Fy�'��(]�э/x�p���.q�?�A�k��Z�
G
+i�
U3�φv9G����ō�⯗LB�^�����F������������
� ������n��ңb������}Rԝ��x��������7��F��*k-�f�g����d�!��Lp/n�A1
V[rG�n���j�	��}q4vT��ͮfmN�v��g�x;���Ry�8�l����e��@��+q��tO���UUx���s�6QظS5ڦ𸫏¨D����B�$��e���!E|N�;)�g	9����Z=aHJ��L���w�
U��X�f�u%��
��M	`>��n��{
+2c��{5�z�),B�d^@�&	&.hGѫf��~J�ji�� D��e1x�l����nX�f��	~��U=�_J���������%h����“
����6U^\k�zVLhw[�%Y>l��*�Ͷ�3���IWk�HD�<W��j�{Q/LEC�{�����}8�
�
\�q��"!���
���ֻJe;��K.���5PƮ��s�jȉ�
q�S�*�r+qv�U�ef�z*��B��7guXNP�����AI�
+��!���d����e���
�"~���p���
���&��s�g��g�T	�z�>�`�m[�-3�U���t�#��Jh��7z^o��l�Q��u�K�:�I��I����Te�Dx��IH�Sp��߾�p�]���!
x9Eua�<E��Y��|�i�-g��v(	�v�e�`YhK�Ew���ix
��y��ߴ�<A������ormF�Z�a%�li֗�^}u�Hv骴
�,/�-�HV�ҧ�D�p䇆
�E����}7�|��cG�#^A��j��jޡ�3��a����
/yO�2pB���[J�]�OwW�����ׄ(�]�2D��.+u�]��ˍ:�S��*���u������^Z������Ow�����1�^%�̃
+DB?�S�	r���ן�=��k��ĵ�:@}E`�>PC��w��1E8��n
��,f��1iP�.Wڮ�5��ǝ����#���G�r�T������5�Yrx���h� �TC�&� r�v�t�n��T�W��A����*�r�GM�
�.��=�����M�>���^P!�"rQ[	!Tg�[B�S��\��:����İ'���
p���͂��?vc���(�B��#���fG!ݵw��Ks�.rm����Q�d�	/��"�
��>p�Owp�}�T��
��<�ū)%m�T��֫@����U��r�1����b��^�YME1,
�k���=���
M�a�C�Z�S�~j��i?A
�N�5O
+endstream
+endobj
+1862 0 obj <<
+/Type /Page
+/Contents 1863 0 R
+/Resources 1861 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+>> endobj
+1864 0 obj <<
+/D [1862 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1861 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1868 0 obj <<
+/Length 2321      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks"7��W�����4�
�]��Gְ{Ir��z�px����i���M{��	�E#���[�&�	M�.~�\|)t��Ts�L�$V��-X2�'?����_'o!Ii
+���<�������?V��n?]���wn��hr����4a�YE���lu��4���$���&f�V�)���._|���ǔ��)'˜D�+�d4�����Cd�R”��	\&l��qNx�"ԫq��Rh�8� /_��ց~��&���;�p�y�Ι.��8J��r�_�_�?���v��g}n{_W�����~�
�7[����E�6`����T�n^��P&Q�`)�`*��x=��V���� �����Yf�+Tp�ĭ8OMo5�o���1Q�:���C��
��?�Ϧ;o��氞������כ̃
�a�\�
�[�	�
+�����>^����?��7ݾh��
^V
���tWC
+m�6*
�F
+e��JC�
+��i<�TqB@�(��`�E�9'NPa]�T
TÈ���~z=>$��$���.S�m���b�Yϗ��f�����[����vs�/�!r|�0����
�$�)�����.Ԑ�د%#L��?�7ӑ�)�8�h�aj���aB����|�̄%���vS\�|���i�� ��|�ĕ- �o�>�w
?���f
��=uc��k��*�;
���wt�	�����~[���I����+lq;����M|3_T��Da���y��
+��^����n�$pY�Ṅ��K�����:��4
��㪸i�z�v4l-�������9A�4�!�y�dz��0EgJ�j�z4�i�!�����4
���t���
,,����bym�����;Jn{?$��4��r~���O��v�9��f�^��(�V^S�"?��\�F0P��PkԈ �>�u�p��Y��q�
n8�
e����,����U�^��!,� mD
[��F�
+�'‚��|�2�� ��:��a��Dx��:��\�����[6n:�o���.�#z
��8�LI�sa����Q��ps�qk��!�9
+�5qZ��$�A]�2Y/��n3ze&K��
��z�
�s �g.P֋3
f�
NvsK�†z5��]e�ˉq>l΋2l
/�
�(cv��:�ś�ls�����j�xﺝ���\::*:��(�H�Z
9�J��HP�DZF��v�
+��cV�hOy��5Lt(�?B��E�
+,|7z� ~�̥�����U�J��8�wX�-�6��)/*��r��ժ8ր��j��;��vnɂIQ��O�
8p�J�Ho1�-"������c at G��#z�%�#���^���H��e�?#�C�ϥ�����z!�7�d���]YB)�6Ea	��iG9� ��������f7���6
�}Q�
:k�o���%�8SF��CK4�(��AB�1f�)
��X�}�S���p� lTg
+�R�)�T�PP�!vB���V�����~�K
%� T�P4�=�&���z�ڬ�1P3�
a��n����
�Ha���#�R")���%�����w<�|��J�<����=��P�B8��A~^�B��R1�C���L�	(#P�$t�
+X�j�:SŚ�$Bz� 
����H"���}$��$��$
+
�)!Y󉄯�1PC�
�֜HD�F�~"Ѽ��\�*��S¶���V��
Z)­K���)GA�
FĠ�yrq*O�Aj{WO)i�X��P�h�{)Β�]����asj�a[�q>h`F�3�
�rw���������Fw�������2j�=%
�pO)B�����=��o��͔P�qF�[M��ru�;�T�c抪�Y��>ix<��]6�䱾����mn�<�>Ns
+�!�SJ��
7��eܖ���Bz��
���Ѻ���io7��Zbq�7u;��<5�F	���cb� ��Btj�|Ӟv#)�� �raݙ�m�>�c����6�|
Ԑ�#�nw���8�P��Ϳho���Е�o�9�g���W^NUd��}�uֻ;�{�!�RQ��fr�����B�9�>��. l��c��;�`O[�;�ms�p�Q�(��u�.��:hh����]�.���Z��ܑ�(nS���
ZH��!�G�5�_�=�f=��g.d0�S���,��̤-�6$�"ƭ��	ej�~��b�����o9�
�)��
+
+���F0ři)�rn ���(�p5�F�7^T#���B��(Ù�7���1PC��P��-
T_nE�
Z��1M�g�鮼0�(�,�)A�o�z��VZs{4�u��:j'���	~�mO�?��_a���,��
+endstream
+endobj
+1867 0 obj <<
+/Type /Page
+/Contents 1868 0 R
+/Resources 1866 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+>> endobj
+1869 0 obj <<
+/D [1867 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1866 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F11 694 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1872 0 obj <<
+/Length 501       
+/Filter /FlateDecode
+>>
+stream
+xڭ�Ks�0���
+
Ł��H�<p'��y�����2�������.&�@c'>p�2��oA�F�#߼��;�HC
8#
��P$��$N�3� ��Jz��KAﮢ�QѪ�WMݥ�������?�P�r���x�E�����c���k�ʐd�=�0�bfJHgɟmݒ(�@`T���������ud�+.ہg������#���Żbg�gx	\�=�#�K�i3��׷�� �(�
kBpL����P�@i1
+[h����˖z6�*��Ƕ-
+P
�����
=��N�I���ˠΗ�&��
K����mZ�ES&u^�]�b������#�x���H�q�98<�
�
U�`Xl����n��O��S����;���$��K�Zgx_�y{����o����E�v��lw��]�z�Z���
+:�}�
����Ƃ�V�vD��V �
��CPJ�G�-8'F�Z�C�54ʽ�$5��Yu��9y�sdo��Š��c���d��
+endstream
+endobj
+1871 0 obj <<
+/Type /Page
+/Contents 1872 0 R
+/Resources 1870 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+>> endobj
+1873 0 obj <<
+/D [1871 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1870 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1876 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+1875 0 obj <<
+/Type /Page
+/Contents 1876 0 R
+/Resources 1874 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+>> endobj
+1877 0 obj <<
+/D [1875 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1874 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+1880 0 obj <<
+/Length 2449      
+/Filter /FlateDecode
+>>
+stream
+xڥX�r�H��+p� #D�V��-ɶlmm�=��"!�b@�
�����ɬ,��p�\X{����ʂ�N�o�=���K%&���S`�H1�:x���w�����*[���/����F�M�Fi,b<����`�eč���������f,�|�u0�R��UV�9�Ux�5��E��F��t0�a��쀇�`?k첤
���ʪ�h0TJ��0aӬ�F��l�.
�
�
�i�GM���u��֣Y���
�k��{B7$a�(����`(Xą��#z�g�^
�pi^��������'
���\ő4q���$�tq��;
f��)`�LM��m] L�W��?H@�s�F2��&�%���a2|�Wy6�g4�eb�,s�J@Q����up"� �L�6��j6,��lJ��E�t ���/�-	qa4D
���J�`tJuL��Fj����k8`����߻��K��ֵ:|W-Q�?�S ���~��w/U��5f����o?�r� ��0�%
��O���<�匚?
���
�|x��O���xj��G�� u&���r=z��m��wHyś\�o�6�'|�N���F43i��wϗ�պ��pE���@sם��pvƙ4��i~Jzǁr��I�KvE���u�['
+��!�
��_?��6�J��
(�4��'@����:@?o����[�G,HAҀ��ٗ��u�`�T��O��.g���DƫU�Q��̽T���C�R
i��	A�3���o
+ ���dO �W �s�y.��H_������|JK��Z��
OTD0��O��i��� ��
�0�І���tx;�z΋p�7�-��K���O�����Y=G�D�\E�~(��O��(P��|f�"�i�F�ӎ��$��e���]5�<������pߐ���ll����;YJW0��o������h)���)�J�#`��~�ݯ�e5k�3MED]�'�|-��
�������-+e��1G	�
�"��3�{���m�M8
Ǵ|��Z�d�3��f��%�:���3��0p��!�5�"
-�h�]�s@�KZ�y";�!Z�.�2뵶LD������s8���� IBǂ
���;���S���r�ok���Ɲ�'z_TB�D�+�䨨DL�
[/*'$*���s�n��Ѩv�-���uk|(��9q��-��/�u
+��Ωal�mN;&TYQ��q}w�	��q���|�G�%�%G���˪�_r��zxu~��<��׷׾{���x���������"g^�n��)�k�G��5�@(>b3���tTw���d5�C����h� ��=�:@�6y��tb��c2�ʴԼ*�a����IFL���}������{�6�p��
�~-�u_�_L3?�Lh�*c�)Ez��D�x_6i��^�I6О/�yI]�
t��owb��Z��2)	�>��,w�$�r�L�0[nj��M� �y3<M���Q�o�u�� @���]��:��$�
:��0O]��]O]��<u�<ڈ
<��3��]���l��a��mE�4�e�?�,�I�����
�G1�G��:�X���x?���9�mU�8����Q�c
�䆊�>��1�����i/Fx�4
/�	�4����p'o����4�%x����T��x�DqKʒ3p�� y>���n��*�64U�����$�cgI�3��t�Iu�pm��[kKs��r��%�;�q4ĹL�[.�����2�:'(?�'m�,���:&D����'�.��Y�oׂ-��
CL�n�_�`�VE��4	�����3ט�i�m<Ld�Kٙ�jY.�5�X�~�ms.c
[�X���w�7l�Wx�z G�
uW`��s��k��T)/��+oo����h�a6�%d�
0���4��Uo}��( �оxӣ�`&#���'�6>#��5��
�'"
hj�%	\P�������+���]0RiI�:��I���uV��-�D���v����td�������c^-lC��k48Ϟ
���l�?.�M�H�
+y���U��3��We� �)�os��+����E�%L���N�h�2�n�9�(
+��y�XY��&6^-�d�)^h�k1��gt�ݺwBK���.��9JP�����-�UO���K¼W(�q��i�Vp���
Æ�����gڌVo�
Յ�٣?�a�.�O��(��c�v�+���^��_@����owj`��_�
8H�}^�d���D�Bl,9d��ګ��x�O�&
+�L����€�� ��U\�Ae:� ��V���
+}uɣD�#u���p��.��o��r�mE�H���2�I|bwn
+ ��- ��;�����ki}]UH�1m�v�=��_�gF|�Bk�(���FrH�b�
Mp��>��[|qsk
_p�|����ssw�v���� ��}���K��@ُ�����E%�|6�˦�w�^��� ����
�	�k��}���I�_%��������������M

+endstream
+endobj
+1879 0 obj <<
+/Type /Page
+/Contents 1880 0 R
+/Resources 1878 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+>> endobj
+1881 0 obj <<
+/D [1879 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1882 0 obj <<
+/D [1879 0 R /XYZ 86.4 566.755 null]
+>> endobj
+446 0 obj <<
+/D [1879 0 R /XYZ 86.4 566.755 null]
+>> endobj
+801 0 obj <<
+/D [1879 0 R /XYZ 86.4 570.789 null]
+>> endobj
+804 0 obj <<
+/D [1879 0 R /XYZ 86.4 551.662 null]
+>> endobj
+672 0 obj <<
+/D [1879 0 R /XYZ 86.4 519.582 null]
+>> endobj
+675 0 obj <<
+/D [1879 0 R /XYZ 86.4 488.057 null]
+>> endobj
+673 0 obj <<
+/D [1879 0 R /XYZ 86.4 455.977 null]
+>> endobj
+787 0 obj <<
+/D [1879 0 R /XYZ 86.4 411.943 null]
+>> endobj
+755 0 obj <<
+/D [1879 0 R /XYZ 86.4 379.864 null]
+>> endobj
+680 0 obj <<
+/D [1879 0 R /XYZ 86.4 347.785 null]
+>> endobj
+754 0 obj <<
+/D [1879 0 R /XYZ 86.4 315.152 null]
+>> endobj
+676 0 obj <<
+/D [1879 0 R /XYZ 86.4 283.626 null]
+>> endobj
+800 0 obj <<
+/D [1879 0 R /XYZ 86.4 250.994 null]
+>> endobj
+803 0 obj <<
+/D [1879 0 R /XYZ 86.4 218.914 null]
+>> endobj
+679 0 obj <<
+/D [1879 0 R /XYZ 86.4 186.835 null]
+>> endobj
+838 0 obj <<
+/D [1879 0 R /XYZ 86.4 155.309 null]
+>> endobj
+836 0 obj <<
+/D [1879 0 R /XYZ 86.4 123.23 null]
+>> endobj
+837 0 obj <<
+/D [1879 0 R /XYZ 86.4 79.196 null]
+>> endobj
+1878 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1885 0 obj <<
+/Length 1719      
+/Filter /FlateDecode
+>>
+stream
+xڝW�r�8��+x��,
��7���˘rfRN�[,S�CR�8���F��,e\��@�����b΃Ü������XN�Ł�ѽ��"�ɝ�Ĺu���?F�
�^
s�g�gó˓����7
�
�:?;8�
�.�����s��9��0OƑ�b�f�/cO at +w��_
f��V�m�.���À�q��f�v�s�S��}��*v�0�4+&����ЗB���&���]���#�K�	��h�?�U�Lgu;���
wE�N�l��4�Z?A#r˪!�����w6�q�+�1T�px1�3�
+��a��8�beo4�c=ý��R��
�tc�[�io1
�$�	�
�D�b	
JFҽ�
���U�y)��k?�~'UZ �nbLJ�Wk;rm-�����k���w���Ǯ����P�z��{����x�a6��;y���js#so.g�ak��Zϳ�W�[��W�EY�Y�ӊ�fw�O��K]�Wl�4�����J�1����ʂ��2�{�漟��x%�e�<Ţ6��]���.w���z����F�0t���p*�*r��fj�Iy߼ؽֲ&��N{Oߙb��/ߗ�|�q`|
4�h��^��f�ŻS/6�V"
��N�_�q�	�X�{�o:{�5�^U�C��j�/+��j�J�Yx���� &f�LL�R-�$a�?I(�G_R
+'�l�KA�~�I_�u{@h�[Sh�3Z���ZڭHvE�2�3]!|CpY�z�!4���%�<؊ ��Jۮ�[�J�@#�mh!����g$�]�,�R�B��@����R�7z�KD�3H��_����"�
�S��#�s���̨"�h�`�1x';���
 �XJv�׺�&*j�[8Aǵr��E�q(c��� �
�u�yZ����q�1J�VJ�$P���}NMQ|�Q�@���`N�=
���P��F 
��獮
+�R�O2�aH�,�Vfю��߯X��*K�r;#i�S/�~���<o2 �ig�t���y�ք�a���j	T���ι Ђ-�n$��sC��}�7�#K2����䇞��&�r+��������
�4���<lE{����i�'�\��i�h�3����Qh(`ʼ6�
X7#/]ݧc��~F��phVDY�M����'������B�u�M�d��'oR(�C���
ϷwU5
<�"KO����<��(�L��*��E��Ȱ���=D���w/�J��H˸ʞ(��o��M�iY�,�	��
ٚ��F��լ���x��L�E*]V��XhЪd�$��~d�S��xCRB.#�6K�tz�/d���
���
�"��$7Bg���(�Im�˲��˲�=
6��_�T�()��g��c*3�� ����Q.�@UU�d�\7S�@M��-�uf*�+n���/~
�"~�� }3��$MM�
�z��v�ԣ��cT��� ^p'��G�>y���D*3(|�RVd�4�ε��ɜz�R�hЖk�ڬx�	���u6�M��|D�J��J�����l��N���|nglV�@
��=m�	�6���~���(��5�=G��HnF��?ͧ�VH�`_ͻ� ��HY��RU���Y��$1��?ط+��)�&�T+T���Q��4��òX�/H�r3,�T�h�	�9�4�ݩK�H�v
+��[ٳ�^`H3��T�H����ݻl;�1�B?��6p�K�q����7H�r?��-���Xg��
�:�5\�
+endstream
+endobj
+1884 0 obj <<
+/Type /Page
+/Contents 1885 0 R
+/Resources 1883 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+>> endobj
+1886 0 obj <<
+/D [1884 0 R /XYZ 86.4 726.045 null]
+>> endobj
+827 0 obj <<
+/D [1884 0 R /XYZ 86.4 701.138 null]
+>> endobj
+671 0 obj <<
+/D [1884 0 R /XYZ 86.4 675.235 null]
+>> endobj
+753 0 obj <<
+/D [1884 0 R /XYZ 86.4 628.909 null]
+>> endobj
+1623 0 obj <<
+/D [1884 0 R /XYZ 86.4 599.519 null]
+>> endobj
+1338 0 obj <<
+/D [1884 0 R /XYZ 86.4 565.702 null]
+>> endobj
+788 0 obj <<
+/D [1884 0 R /XYZ 86.4 533.821 null]
+>> endobj
+802 0 obj <<
+/D [1884 0 R /XYZ 86.4 501.941 null]
+>> endobj
+674 0 obj <<
+/D [1884 0 R /XYZ 86.4 469.507 null]
+>> endobj
+1614 0 obj <<
+/D [1884 0 R /XYZ 86.4 438.18 null]
+>> endobj
+677 0 obj <<
+/D [1884 0 R /XYZ 86.4 406.299 null]
+>> endobj
+678 0 obj <<
+/D [1884 0 R /XYZ 86.4 374.419 null]
+>> endobj
+1883 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F49 646 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2028 0 obj <<
+/Length 2619      
+/Filter /FlateDecode
+>>
+stream
+x��\IsI��W�Q�h�s_�!56
 ;&
}@Pv�ր�v̟����dQ�ҕ�

s�V��2���R8����g~^O.~�e:�
)�H0�h�x 	GD�`2>\�������7/��z����Ҿ��7H
?ޞOW��c�r
��\�������	vV��etw|��4�D� �"bb�O���>��*$8�G�g>��p��ţX.��tg������'�YAK!	P-B��ӷ�~|^���z_2d°3�h0̕�_M�˄��a��R(����p�߳o���}�u<�x��l�)�
+U� �N�`)���4��s�|�8И����O�*b1MӧJ���0��@f|-Ő�.1���M�Nwr��I����&�"AM0[]|�
s�� #ft�W��*`����`�/�{�J 
�YQ�Š�a��"�4�"/Rei)3�j8�JiW�%�(���^�QL��
(86��
(����~�>'�`d�S�KQK%B#���D1�Ӳ��]�v|٦��|ޛ������t�J#.D�Г	�'�$�ǎ����@s�4���aٹ�u'��
h��b��ca'�����
i�s8;q�/�DX���l�
=�;��7��ʩ�t��[�:w���T�j�2��^���"]dʒ��]^H�H
0���QH�D�H�I
+u���!�Һ!�J9<��r:��x���r*��>`T#)����D�8����r������d��$9D�q
�3���Qy��@7�4�ۓ��\I�a�)�:�N'j�@�|�0�p
�
�
~��M�7��
�R����ը�i��.Y
��,A�`�J�̟dy�X���$D��y���
M��bb
�]�*�Uc���B,��
+�
0Sf�0�������42�U7W����
� JbS�W�)�Ǡ��Fl9�B"���
+�$3�ʳf^�;>R�����9�Ry!DI��~~�.���"b�T*pPo۽�㨛��:#U-���P@���fi�a%Sk�F.�4u�c�b��'�1Ty��kG���/�R4�jo4��_����I9���Ʒ����V*�4����'��dy��ղL��B
!^���@���b=���=�-W��T��|�g6�%k{$�+'cb Hi/����N'
+�Nz�A^�
-����ɼ�����vO�@�p/�hȳ$� z�����4I.���q�[H�j.=1^�]c�*c
̩��KjBa���
P1��TP��ds���
+��$�:����=�rz%��y}�+1�*�wܝ<>��AǤ\&��.�~+4A���I]ӝT����;q���:G8����
��u
��7��1���S]���y�!��n�����g��4a
�z`�/�
h�1��.4�:��K���*�z M�=
<�=��ST#ꧪFx�x+�
|���a�>�w �t�n�}?
��ݸ�
�(�D��a���]��0/N���� I�[��́�o���NSe�=�R������ ʽ��$,R�����ZL2^�J���~v��=���
����d�͎!Ǔ�C�B�W����B���]�$��"�����]�Фit@��<�&kuǰ��`KW���
+��w!�K؅�ZK��C8�=�-(��5���e���FNPe�z�!9�Zz�6K���J�9
�9
5�K��T{i Z<�;y

^7WD��ݼ����`A�B/�8q��$����<A|�J{�Y��?d�Fx������i�H;��x�pW����?�1�P>���I5�n��8���g�S4�a^(&�!��
+�v��q�̶���2�N,���^(����mE�yz=���
��?v~�A��?��*
$ ꢶ;�׭.GX��
�4�ċJA� ��J=��*=-Q��T�Ǩ���*)��N����S+��^:�
�
+&hc�T}�w)H��d�� }�f'�^�Q��Ɛ��Q�S@�ؔ�cس� 3 �`c�{�k����9��iR!b�$DQʘ��|�

z������d�Kݹ���s��nf�ow��;]�j���R710J�J~3�m��u��t��m�k_����
�އ�������f��,=�ju�ƫp��}�e��?��p����<�]���N���֟��a�˹��7an�Yma�O���Pu��+�D����Z��]��z�|(#���Kΰ���y>�Ë:��*T�>\��Ԋ �c�"?.�
XaJc�OG�P�k�r�����5���<�:"�������E���|���K��vͦn��n���ؕL/'vmw9Z�����Cxd�Y��b��P@`UT�f5���"2��*ķ{(Z�=+��駰�
��h���Z��r9}Z&�T�
<+�$?���u�P�
� :�
����}��t��)-���tE�P�+��
oL��~���x;���#!�����$�Ό��^�|
D1Di�
�'Zq�1��h���/���"<�3+�5|�ձd��q�,�)��qE
<Y�G�8n�t�Ty��?o��EZV�&���њ�#�N���V�7�b�����Xc��+{�.�5���C)
+5خ�Q%�Q,,���Gh�l_S���y,+��Qx&�����*�;^>=��
�p���C���M�z�
+e��v���ۥlm�3�K�ǶK��KF�?����].
�
+endstream
+endobj
+2027 0 obj <<
+/Type /Page
+/Contents 2028 0 R
+/Resources 2026 0 R
+/MediaBox [0 0 612 792]
+/Parent 2030 0 R
+/Annots [ 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R 1902 0 R 1903 0 R 1904 0 R 1905 0 R 1906 0 R 1907 0 R 1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R 1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937 0 R 1938 0 R 1939 0 R 1940  [...]
+>> endobj
+1887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.965 561.44 164.939 572.288]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+1888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 527.279 167.983 538.127]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+1889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 515.308 193.471 526.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+1890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.459 515.308 213.396 526.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+1891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.942 503.337 158.878 513.687]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 491.367 182.152 501.717]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+1893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.14 491.367 202.077 501.717]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 479.396 143.825 489.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 479.396 164.857 489.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 467.426 168.512 477.776]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.608 467.426 189.545 477.776]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 455.455 149.056 465.805]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 455.455 170.088 465.805]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 443.208 186.883 453.834]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+1901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 431.237 150.271 441.864]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+1902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 419.543 155.501 429.893]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+1903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 407.573 155.501 417.923]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+1904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 395.602 160.732 405.952]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+1905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 383.631 155.501 393.981]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+1906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.915 371.661 155.889 382.509]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+1907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.828 359.69 187.784 370.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.879 359.69 203.835 370.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.93 359.69 224.867 370.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+1910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 347.719 143.825 358.07]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 347.719 164.857 358.07]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+1912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 325.529 164.747 335.879]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.64 313.558 138.595 323.908]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 301.588 143.825 311.938]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 301.588 159.876 311.938]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.866 289.617 152.821 299.967]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.405 277.646 142.361 287.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.405 265.676 142.361 276.026]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.409 253.705 133.365 264.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.46 253.705 149.415 264.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 241.735 178.973 252.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 229.764 173.743 240.114]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.705 217.793 203.66 228.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.935 205.823 208.891 216.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.022 193.852 169.977 204.202]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.073 193.852 186.028 204.202]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 181.882 163.282 192.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.378 181.882 179.333 192.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.429 181.882 195.384 192.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.48 181.882 211.435 192.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.424 181.882 226.379 192.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.475 181.882 242.43 192.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.526 181.882 258.481 192.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 169.911 168.512 180.261]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 157.94 173.743 168.29]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.838 157.94 189.794 168.29]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.782 157.94 204.738 168.29]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+1938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.833 157.94 220.789 168.29]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+1939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 145.97 173.743 156.32]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 133.999 158.052 144.349]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 122.028 158.052 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.147 122.028 174.103 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.198 122.028 190.154 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.249 122.028 206.205 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.193 122.028 221.149 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.244 122.028 237.2 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.295 122.028 253.25 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [257.346 122.028 269.301 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [272.29 122.028 284.245 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.341 122.028 300.296 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 110.058 149.056 120.408]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 110.058 165.106 120.408]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 98.087 163.282 108.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.378 98.087 179.333 108.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.429 98.087 195.384 108.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 86.117 149.056 96.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 74.146 158.052 84.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.705 62.175 203.66 72.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 50.205 178.973 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 50.205 195.024 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 561.44 398.324 571.79]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 549.268 398.324 559.618]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.42 549.268 414.375 559.618]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 537.095 378.867 547.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.963 537.095 394.918 547.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.014 537.095 410.969 547.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.065 537.095 427.02 547.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.009 537.095 441.964 547.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.06 537.095 458.015 547.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.111 537.095 474.066 547.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.162 537.095 490.117 547.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.106 537.095 505.061 547.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.157 537.095 521.112 547.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 524.923 387.864 535.273]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.135 512.751 402.09 523.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.365 500.579 407.32 510.929]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 488.406 403.555 498.756]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.287 476.234 428.242 486.584]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.338 476.234 444.293 486.584]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 464.062 378.867 474.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 439.717 488.483 450.565]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 427.545 442.461 438.128]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 415.373 449.894 426.221]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 403.2 409.944 414.049]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 403.2 424.888 414.049]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 391.028 416.032 401.876]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 391.028 430.976 401.876]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 378.856 396.439 389.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.837 366.684 411.792 377.267]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 354.511 359.411 364.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.506 354.511 375.462 364.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.557 354.511 391.512 364.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.608 354.511 407.563 364.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.681 330.167 395.636 341.015]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 317.995 416.032 328.843]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+1996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 317.995 430.976 328.843]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.854 305.822 371.809 316.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.798 305.822 386.753 316.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+1999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.719 293.65 444.675 304.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 281.478 453.557 291.828]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 269.029 443.096 279.656]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 257.133 401.253 267.483]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.681 232.789 395.636 243.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.625 232.789 410.58 243.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 220.616 416.032 231.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 220.616 430.976 231.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.854 208.444 371.809 218.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.798 208.444 386.753 218.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+2009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.719 196.272 444.675 207.12]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+2010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.663 196.272 459.619 207.12]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.096 184.1 448.051 194.948]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.04 184.1 462.995 194.948]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 171.927 448.326 182.278]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 159.478 437.866 170.105]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 147.583 396.023 157.933]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+2016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 135.411 406.484 145.761]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 111.066 488.483 121.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 98.894 442.461 109.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 86.722 449.894 97.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 74.549 409.944 85.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 74.549 424.888 85.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 62.377 416.032 73.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 62.377 430.976 73.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 50.205 396.439 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2029 0 obj <<
+/D [2027 0 R /XYZ 86.4 726.045 null]
+>> endobj
+450 0 obj <<
+/D [2027 0 R /XYZ 86.4 574.336 null]
+>> endobj
+2026 0 obj <<
+/Font << /F38 517 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2174 0 obj <<
+/Length 2608      
+/Filter /FlateDecode
+>>
+stream
+x��[Is����W�HU�m��8zhI��Q2��I�3��)�@�@y���yXH�`���OU.��-�ۻ\g����O�go.�p<�	"��O��9�xHP��?9'X��ݿw��"S�]������]ܟ}>������9RL8�����\�	>y︈z��R|o�0�!�"g~�˙[�G����@�pGxa)J��48�RJ'�:��%�k@R�R%�sB&�����)(�^g at 9r]���_
+�JM�e���ՙ��h�y)�KV'5UIA�)&ȥ^Iq��]�Nu��+c����M���t"xC�L����j��y���9�K�v���vQ����YG`
9	�«�X �m���_ď��.�o6I|N���p�ga\��r/x*����\�6%)9D�=Th���kI3	>o�$X�\�,m�̥�r�P������v��6۬'ŏ������{F�� 
+;����9���'�?�����9(FT�8��@��Y%mS��W�c���9
�p�gJ�a��I�H�|1���;\�i��on4<�DJ+<�`�<o��plC"�]m؂�r���(w��P� 
��Wܛ�/~�0e �'m0e���>�vm 
��0W����\!Llb %y�Pz�wNl��Ή�L/�^��ؒK�8����

fV RHu���
�u�/
q{�oq��tu{ʐ�܊M���5����b>ٌZGC�>rZ��WAv��e�+�
+�
K����i
@�����9�x���X
+����#Ǝ�^�� �&�
�[��0�9�TWQ<�(1�U~�����_h����b��V���.r  ��0	B�0&r`"�X��bƮ���,�0�>XJ�`j���ىB��)1F���1+6R��jJ|;�|��is�8�VsȌ�8d|w1�pw�.]�%!z�EHs��O���B�V��d��v��xg�:����U�l[&?��\�/d�B\(+�RT(�hQue6�V]�W
]��s��8�C�8�!!���Έ@��g��Y�+E5�����
+Qޠ�~Q�����k� @��fg�E,0�Y�����>�$�Ö�
[��u/��.������K�ٍ�����f;�	Haǧ�Q���~z�/.��J��]
|�˔���%J���S���;
�����0��f���X��u
A9'�a�CTv�����-iia0�����݅h �:�c�\!��#���0��;&ݏI�`̃���D`d�IM!�)>{
K0<�X�"I�
+DA2>A�	��K�c�o�1'&�%����n
ƞQ|��5��:\��+�L�x}����e#�M8A
LJ�~��pf���I�;�$|�q�$�z���M�h'a��*?N7�S`,���-
+�L̉�0j�qw�~
Y�
�8"���s�6��1�¬�:@�5�V$
W�������2��3f���8`�H�p
f���n�U�
5:J���P��5�
s\���N�%�k^7�T�y�Cm��.��]�v�����P�_�{�]$�q�l�a����k����^�����̈��*��X'�k����z'�(�ӜLc3kg��9�Z��W�
���L��Aŧ�6�:��/�O�e�v�f�v�wЦ�lɄQ�E�
nJ�Y��g��Qw���&)�~���H�s1�j�j� {�R��a�A����^gX*B�M+�"J� X�H�$���
+`����Ё����K�������0ʪ�Y�ܵ�d}�'ŋ^��2�J�*'��l��W-^��|���� n��hN��&?�7s���a�`M����|Y]�i(]��2q��`]�j��n
K-�Xb;�V�����J״c�1b�qI�H��9��c�a����)eZ�jj��I�]i:U� yu���yuZ��@���������i[�b.��j��j��
+��.-e~/�4���qn��4�82�>����1FK�;������uЯ��NOGS���]�g�� Kzr�籷#�� �63F��m���0%�$���(dH
PN�R� P|����K7�+�V?e�/2항/2��qmi[�6�;~?h�n}?���g��K7{e�K7���t�`̺rd?ˎ�d�+[�d�����Ќ(f)M
���u��}���}�c:^_�]ߎ
�U�׷�UQ���3�{�ݦ����������Y��W�I:[���94� �`+�9'Ep���
�N�^��-:+YX�qt	:ϒ�ς��E���z'x��X[�g�fY+��@]��E�������SW�w�I�+v�A
$�m�$X�� ��=
�r��(��
4*Z&0�C���w��Ļ��c�� �I�k.��t�#t��A%C���
?Y�$


�Gp4Lq�΂e��,=�|
$=�Ma=�Mi��/H��~�0x�*�7��Y��	;�Q�҂p��p=��W;��C��Dٮ�?�4���h�(x�k�(W'Vƾ���^���0A��h��ͭ�Q;�7?����S�����B���.�uhS���|��&LE씥Z6
;�8wp�! �o�U���'
&0�u��iK��S��y-
�������ʥ��f*ywq
e�S<
>��8�C�.}�!����Z?eC���A����}��CM]V+�L-���L9��iu싵>�f����? ��$
+endstream
+endobj
+2173 0 obj <<
+/Type /Page
+/Contents 2174 0 R
+/Resources 2172 0 R
+/MediaBox [0 0 612 792]
+/Parent 2030 0 R
+/Annots [ 2025 0 R 2031 0 R 2032 0 R 2033 0 R 2034 0 R 2035 0 R 2036 0 R 2037 0 R 2038 0 R 2039 0 R 2040 0 R 2041 0 R 2042 0 R 2043 0 R 2044 0 R 2045 0 R 2046 0 R 2047 0 R 2048 0 R 2049 0 R 2050 0 R 2051 0 R 2052 0 R 2053 0 R 2054 0 R 2055 0 R 2056 0 R 2057 0 R 2058 0 R 2059 0 R 2060 0 R 2061 0 R 2062 0 R 2063 0 R 2064 0 R 2065 0 R 2066 0 R 2067 0 R 2068 0 R 2069 0 R 2070 0 R 2071 0 R 2072 0 R 2073 0 R 2074 0 R 2075 0 R 2076 0 R 2077 0 R 2078 0 R 2079 0 R 2080 0 R 2081 0 R 2082 0 R 2083  [...]
+>> endobj
+2025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.255 688.242 187.211 698.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 676.204 140.059 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.155 676.204 156.11 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.206 676.204 172.161 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 652.127 263.901 662.975]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 640.088 217.879 650.672]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 628.05 191.45 638.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 628.05 206.394 638.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 616.011 171.857 626.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.255 603.973 187.211 614.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 591.658 134.829 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.925 591.658 150.88 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.976 591.658 166.931 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 579.896 184.203 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 567.858 184.203 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 555.819 178.973 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 543.781 178.973 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 543.781 195.024 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.252 531.742 175.207 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.303 531.742 191.258 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 519.427 192.363 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 507.389 208.054 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 495.35 223.745 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 483.312 197.593 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 471.55 178.973 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 471.55 195.024 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 459.512 199.894 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.99 459.512 215.945 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.4 447.473 210.355 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.451 447.473 226.406 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 435.435 178.973 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 435.435 195.024 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.12 435.435 211.075 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 423.396 173.743 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.838 423.396 189.794 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 411.358 173.743 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.838 411.358 189.794 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.889 411.358 205.845 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.94 411.358 221.896 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.991 411.358 237.947 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.022 399.32 169.977 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.073 399.32 186.028 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.124 399.32 202.079 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.175 399.32 218.13 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.226 399.32 234.181 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 387.281 176.672 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 375.243 181.902 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 362.927 187.132 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 351.166 202.823 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 339.127 202.823 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 326.812 218.514 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 314.774 192.363 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 303.012 192.363 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 290.974 197.593 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 278.935 176.672 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 266.897 140.059 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.643 254.858 129.599 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.694 254.858 145.65 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.745 254.858 161.701 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.796 254.858 177.752 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 230.781 263.901 241.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [290.06 218.743 302.015 229.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.357 206.705 225.312 217.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 194.666 185.362 205.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 194.666 200.306 205.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 182.628 191.45 193.476]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.542 170.589 186.497 181.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 158.551 171.857 169.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 146.512 160.981 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 134.197 187.132 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 122.159 166.211 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.307 122.159 182.262 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.358 122.159 198.313 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.409 122.159 214.364 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 110.12 171.441 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.537 110.12 187.492 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.588 110.12 203.543 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.639 110.12 219.594 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.38 98.359 128.353 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.917 86.32 236.891 97.168]
+/Subtype /Link
+/A << /S /GoTo /D (page.2) >>
+>> endobj
+2110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.908 74.282 199.863 85.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.45 62.243 250.423 73.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.412 62.243 260.386 73.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.2) >>
+>> endobj
+2113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.335 50.205 245.309 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.345 676.204 448.3 687.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.218 664.165 384.173 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.004 652.127 387.959 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.506 640.088 381.461 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.554 628.05 377.509 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.17 616.011 388.125 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.941 603.973 389.896 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.889 591.935 400.844 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.335 579.896 412.29 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.788 567.858 396.743 578.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.404 555.819 447.359 566.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.684 543.781 372.639 554.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 543.781 387.583 554.629]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 531.742 449.894 542.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.402 519.704 403.357 530.552]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.225 507.666 354.18 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.276 507.666 370.231 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+2131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 495.627 364.641 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.373 483.589 389.328 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 471.55 394.558 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.373 459.235 389.328 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 447.473 384.098 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 435.158 399.789 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 423.12 399.789 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 411.081 394.558 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.064 399.043 405.019 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.525 387.004 415.48 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 375.243 385.562 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 363.204 375.102 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.197 363.204 391.153 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 350.889 443.096 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 339.127 432.635 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 326.812 427.405 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 315.05 427.405 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 302.735 385.562 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 290.697 422.175 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 278.935 443.096 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 266.62 448.326 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 254.858 416.944 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 242.543 411.714 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 230.781 448.326 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 218.743 448.326 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 206.705 416.944 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 194.389 453.557 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.984 182.628 484.939 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.062 170.589 464.017 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 158.551 427.405 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.293 146.512 469.248 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 134.197 411.714 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 122.159 443.096 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 110.397 411.714 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 98.359 443.096 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 86.043 416.944 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+2167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 74.282 375.102 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.197 74.282 391.153 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 62.243 385.562 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 50.205 396.023 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2175 0 obj <<
+/D [2173 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2172 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2337 0 obj <<
+/Length 2364      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�8��W�(Wm0ăx
3����x-9���
h�vXK�
+Ey��?�M��%|�Dl��^���_w
t����������B��L�
�sQ�S�L������'N/
Fr�On?�
g
�M���:x���$��l1�����K�ETI����-
F"�S�L����0Y��+�����O�<��Y���(�L�et����y{+���17.y(��98_�QJ�T�����+d����TU
��_Σ -�V`�!�
+;f��v�c;.�a:I�U�I���P�&��H\�A2��
+zZ�pw
J|���ǑF뾾`��/T��i�N�L!."�vL)��A��2�>�ɲ7$T��d
/�p�E���!��rN!���f����
����G!�Έߓy���V��l
�taF��;q�!�/l@	�q|��gi���q�e�&,���T]ò��
aZ8�����4�{'6H�.�$ hbmISHRa	�B��I��]��A�IT�0����,-�4^M�E��>��ݮ�䃟�}�B<�@ 7�rh�RJ�pW7�rY7|zQ�<z]n��u�K�Ǥ�b~���6���By	��=t�2
���T�5j.d�0�\M�;�)l�g�)ܴ�/R�ߌT7!sD�؊"j�/���(�vN܊R�B������
+1�{]��b�h`���<�\�=�J�5;�%PΉ'�(��\�������T�أ���
���NJo� aj
���JKq��3F0S�"�70g��:�lCq���q
�F��۶?
)W���)��AԾ;r��죎���[�
+��X��6'�R0�H���
z�6�P�’ԆO@ީ�qI^)l(-*ő����:��*�d�
+�,M���)+.Q�R]\bA��%�J������@[

:�c
2(�܊�A�ˋ����ӿ�??k(B���jС^��X��*�0K,
+~!VT�(Dm�NnOO�&���K��a���J�G�� ����(�zn����s
ƛť?;{���#��܈� �$�
���몘��Z
���%Ygg�'� ��V��`�;
�>i��(**KS�ۚ;���ꄋaf�f�.`y��(\~r�U����"�y��yG��ۀ����Ŏ�!I�����0&�7�k,��]���k�ApZ��n�IKFa�N:A ���L��w��̟�W�$>!r�=\�۶ꖯ �y�����'��2�{�6�`'?r�I�m&�"XfƦ�r����W��~�s�j���j2��^���Mڮ��>��9iT�J�Y�����.
+��V��7'x�����*�i��^��
O9
v�u�����F��ATLr�ݷ CI㋾
��[� w=���k���(CR�ȖG�]�Ė
�ؒy�h���҃�niZ��l�~[��e�T���r�"lY��!�!O�S	抷ʡ�.���=�C�_�xx�T�
+����z�1�H��jFe���j���9e6���Ų��z�O9#HI�0��\ .���E��ژXC/R�v�g���HUSFk�g'JD%gZ�b�!�X�E�Ҧ�d;��TpxKq��B;������=�k{��&�IPuf+��+����P���Т߳��;�:T�Ы};de�J\$<c*q,��
��|����u
:w^?Tja|�W(Q}��1��2��ؖ��T&I�B�ucy���(OGZ-�'A��{
��"�YP��
/�$��[6O������-C|��•�^�-�.�c�-�rxl�j�x�h�
��
u����\7�՝�ޒ�4\��&�!�ζ���.�գrU��dw(�'���\'A�4��=��=�ƒI
=���z�઎����ab�
l�
+&�SZ��%![�s��k��gA͔�R��t�\���
+��S0�Ǐ�J`l�4�j'�&�*��2�>Uz��đ
�8d�.W뫰nj�yn���R�Q 
�'
w
_Ă]X��I�=;&�d���e�g�BV
�����dՆEY����(7X�9]~f��t۵���{
��@,��,%�
���O;��^�4�7�+�O�
+�'��^��ovƦ�9c�}gl���D�����Z�Ȏ��74e���XX{�^���*H��Bs�4k(z�
)�hA�1n?�Ic���$�2��g����C�;��C����E���?K�Y�O��ߖ^�W�A\
+��#�N\s��W�Y�X��0
+Ӯ ����+D�eqb���6�{���e�?k�MY>\�~Ԍc=�<��N�cS�o�c�W^������l�ّ(G�Sb{V�8̳[������P$�v����7�r'N��o+�B5��N�<X�S�(���C <��?q&{��gb��K�����3�S��<4'����Dd4&�9~i�&�i������'
+endstream
+endobj
+2336 0 obj <<
+/Type /Page
+/Contents 2337 0 R
+/Resources 2335 0 R
+/MediaBox [0 0 612 792]
+/Parent 2030 0 R
+/Annots [ 2171 0 R 2176 0 R 2177 0 R 2178 0 R 2179 0 R 2180 0 R 2181 0 R 2182 0 R 2183 0 R 2184 0 R 2185 0 R 2186 0 R 2187 0 R 2188 0 R 2189 0 R 2190 0 R 2191 0 R 2192 0 R 2193 0 R 2194 0 R 2195 0 R 2196 0 R 2197 0 R 2198 0 R 2199 0 R 2200 0 R 2201 0 R 2202 0 R 2203 0 R 2204 0 R 2205 0 R 2206 0 R 2207 0 R 2208 0 R 2209 0 R 2210 0 R 2211 0 R 2212 0 R 2213 0 R 2214 0 R 2215 0 R 2216 0 R 2217 0 R 2218 0 R 2219 0 R 2220 0 R 2221 0 R 2222 0 R 2223 0 R 2224 0 R 2225 0 R 2226 0 R 2227 0 R 2228  [...]
+>> endobj
+2171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 688.242 181.902 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 676.204 208.054 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 663.889 187.132 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 651.85 187.132 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 640.088 208.054 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 628.05 223.745 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 616.011 208.054 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 603.973 218.514 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2183 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 591.658 202.823 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 579.896 187.132 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 567.581 181.902 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 555.543 181.902 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.481 543.781 239.436 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 531.742 218.514 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 519.704 213.284 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 507.666 197.593 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 495.35 187.132 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 483.589 187.132 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 471.55 192.363 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 459.512 192.363 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 447.473 192.363 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 435.435 140.059 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.155 435.435 156.11 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 423.396 145.29 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 411.358 178.973 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 411.358 195.024 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.12 411.358 211.075 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 399.32 199.894 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.4 387.281 210.355 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 375.243 178.973 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 375.243 195.024 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 363.204 173.743 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.838 363.204 189.794 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 351.166 173.743 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.838 351.166 189.794 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.889 351.166 205.845 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.94 351.166 221.896 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 339.127 194.664 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.022 327.089 169.977 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.073 327.089 186.028 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.124 327.089 202.079 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.175 327.089 218.13 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 314.774 187.132 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 303.012 202.823 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 290.697 218.514 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 278.658 202.823 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 266.62 187.132 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.255 242.82 187.211 253.403]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 218.743 263.901 229.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 206.705 217.879 217.288]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 194.666 185.362 205.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 194.666 200.306 205.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 182.628 191.45 193.476]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 182.628 206.394 193.476]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 170.589 251.614 181.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 170.589 267.665 181.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.445 158.551 249.4 169.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.496 158.551 265.451 169.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 146.512 171.857 157.361]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.255 134.474 187.211 145.057]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 122.159 140.059 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.155 122.159 156.11 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.206 122.159 172.161 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 98.359 263.901 109.207]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 86.32 217.879 96.903]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 74.282 185.362 85.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 74.282 200.306 85.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 62.243 191.45 73.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 62.243 206.394 73.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 50.205 251.614 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 50.205 267.665 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.026 688.242 473.981 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.077 688.242 490.032 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 676.194 396.439 687.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.837 664.145 411.792 674.729]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 651.82 364.641 662.447]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 651.82 380.692 662.447]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.788 651.82 396.743 662.447]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 640.048 414.015 650.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.111 640.048 430.066 650.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.162 640.048 446.117 650.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.213 640.048 462.168 650.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.264 640.048 478.219 650.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.315 640.048 494.27 650.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 628 414.015 638.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.111 628 430.066 638.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.162 628 446.117 638.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.106 628 461.061 638.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.157 628 477.112 638.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [481.208 628 493.163 638.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 615.951 408.785 626.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 615.951 424.836 626.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.932 615.951 440.887 626.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.983 615.951 456.938 626.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 603.903 408.785 614.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 603.903 424.836 614.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.932 603.903 440.887 614.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.983 603.903 456.938 614.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.034 603.903 472.989 614.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.978 603.903 487.933 614.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 591.854 414.015 602.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.111 591.854 430.066 602.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.162 591.854 446.117 602.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.064 579.806 405.019 590.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.115 579.806 421.07 590.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.166 579.806 437.121 590.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.217 579.806 453.172 590.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.268 579.806 469.223 590.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.212 579.806 484.167 590.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.263 579.806 500.218 590.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 567.481 422.175 578.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 555.432 443.096 566.059]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 543.384 453.557 554.011]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 531.335 437.866 541.962]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 519.287 443.096 529.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 507.238 448.326 517.865]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 495.19 437.866 505.817]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 483.142 453.557 493.768]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 471.093 427.405 481.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 459.045 432.635 469.671]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 446.996 422.175 457.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 434.948 422.175 445.575]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 422.899 411.714 433.526]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 410.851 411.714 421.478]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 398.802 432.635 409.429]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 386.754 401.253 397.381]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 374.705 453.557 385.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 362.657 422.175 373.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 338.837 488.483 349.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 326.788 442.461 337.372]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 314.74 409.944 325.588]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 314.74 424.888 325.588]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 302.691 416.032 313.54]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.24 290.643 476.195 301.491]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.291 290.643 492.246 301.491]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.026 278.595 473.981 289.443]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.077 278.595 490.032 289.443]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 266.546 396.439 277.394]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.837 254.498 411.792 265.081]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 242.172 375.102 252.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.197 242.172 391.153 252.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.248 242.172 407.203 252.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 218.352 488.483 229.2]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 206.304 526.596 217.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 194.255 449.894 205.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 182.207 409.944 193.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 182.207 424.888 193.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 170.158 416.032 181.007]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 158.11 396.439 168.958]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 145.785 385.562 156.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.658 145.785 401.613 156.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.709 145.785 417.664 156.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.76 145.785 433.715 156.412]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 133.736 443.096 144.363]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.848 98.399 380.803 109.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.428 62.253 416.364 73.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+2331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.353 62.253 436.289 73.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.116 50.205 418.052 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.041 50.205 437.978 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+2338 0 obj <<
+/D [2336 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2335 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2467 0 obj <<
+/Length 2087      
+/Filter /FlateDecode
+>>
+stream
+x��[[w�~�W��*�u�,?2�CI!a��9gM��X5�1f�i���-C|��i򒰈��}Ӿi�4^
��>�Z?�aj8�����Q@
9�bh���6������ �	
��{�׃�[���Z��������[�j�׭����B���0v��g��� �H|�i�s�L��R�@��,�:@�J�7���bp��&�~�����!��$i�
0-K	;���:]�GO�|G���Q�[?�B�X�)
f��T%K$����?g�(��kc`#���}��E�@���
�R j��E<���.�=2�
+�@;&e�� 7�âj���j��ҼfJ_ ��!�dzڱ,� ��v)&�
���z�8M}�z,0�$�!����yo���*�Q�a@�U�۝Rb
�,�lw
+l"���W�N������]�B ��O���g�
Nr�ӏ�\���|�@���I]tl��KbE������U��D?~��#�3�t���C��a���
Og(6%����2���V ��b��ڞu�ZI;�Q[�b5�-a��D���d�/��c˜�O0�ЛT�Ž>F�� %��^��!Wvv� aY�� �����v�������2�6X���=��<\m7�5IiA��.!���w�W���]�)	�|��^��ӅU��V�t�r���/VA���U�ZN�=�
��	Ɇ/$�Ko��yP�\�������b��oK��n���p�8�PX�Yű��2jI����w��6p��!�Y��W�*��
<
f
�C����~
�VĎU� &i艫\+OV���^����{8�X-��Ʊv
C�m
#�B���y
��
�
+M/�Ԙ7�i�C>Wl
���i	����o�⸾��Y��
+g
_r�n�_�Ґ9��
��e�]�+���b���}7q݆6v�Kl|���T��]�ݙ;�|q�_fӆ�
+�Uӫ���l�x�
+N,0�M��X(w��V��}��<�[�����`�N������]�s~
>5�Q��W]J�
�*�3��7����;�]���~�u����p!�2�K���{�s�P��0��^Ɏ�/�<�}��N���A�Nৃ�L
+ #�L��
+���
�	�#j�SD���.P��D��N�s�b����K/'?�����r�%��M��R���:�z���&8�YV��.{x�k��
B�Q�G��=��K�,�R(�q��E���A���TE/�W(�
�,5/�{��=�\��尉'F����L
6�<�l����:Nm�QY蜦M)4��ʒR�zg�*�<��Wؾ��B/}Լ�B
]�
*�>4KCO�:%��7)i� V�ָ�@Kh�t�?3@�ANh)��9\�ȓ�8\B���M>Hr���}<NK�1�_�"�� ��E:k[)�x�6>V�e�J��wq����QӋ�
+�O3t%�9�֚
��{-9���d�4j:Jg���4<O��@GY4��}Wt�.;��������9$ � �|Ã�\R�W�ɍ���
��`�(�U�L�p(.8	@�����3I+/ (PE'e�k�Jb�?��bSN4�Vm��A5!�q���W�
+�`�Z��XF���y���1�k��*
G�r�q�����%:t�6�]��Kb9p%.I�]"Z.�$��
c���Љ	X�U�*�'IJ�
���̂
+�/t3ϱ]���m�"��`8�쟝�52�jr�r�b�^)q�j�D�pY'��6F�;9���޺;�GQx�^-B�w"�'���/�@!�4,=����?²��Ŧ�v��ѝSݭ&i�c�k|ɽ�6L4I�y��is u_(-Oss�_
��f�X�@&n�لE���Ťl��З��AqY�(�֕k�i�=V�JY!CB+�5�d'����
7��j�uw'k����캨5���qV�������nP�NJ�$���� $l�
Ib����.a ��*�ACE"�uF�O�Gե]�ޛo�W�&�
�v"�����j�E�G���ȷU>�.��lYZ�D<�<�y�s�
��o:�nW
�Iհ�2����m�Hd������΄�ml�N
+
HV2�Ք���U�,�M�+���?6�%T^B
�X�c� m
+endstream
+endobj
+2466 0 obj <<
+/Type /Page
+/Contents 2467 0 R
+/Resources 2465 0 R
+/MediaBox [0 0 612 792]
+/Parent 2030 0 R
+/Annots [ 2334 0 R 2339 0 R 2340 0 R 2341 0 R 2342 0 R 2343 0 R 2344 0 R 2345 0 R 2346 0 R 2347 0 R 2348 0 R 2349 0 R 2350 0 R 2351 0 R 2352 0 R 2353 0 R 2354 0 R 2355 0 R 2356 0 R 2357 0 R 2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R 2363 0 R 2364 0 R 2365 0 R 2366 0 R 2367 0 R 2368 0 R 2369 0 R 2370 0 R 2371 0 R 2372 0 R 2373 0 R 2374 0 R 2375 0 R 2376 0 R 2377 0 R 2378 0 R 2379 0 R 2380 0 R 2381 0 R 2382 0 R 2383 0 R 2384 0 R 2385 0 R 2386 0 R 2387 0 R 2388 0 R 2389 0 R 2390 0 R 2391  [...]
+>> endobj
+2334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.942 688.242 158.878 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+2339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 676.187 182.152 686.537]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.14 676.187 202.077 686.537]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+2341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 664.133 149.056 674.483]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 664.133 170.088 674.483]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+2343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 652.078 154.286 662.428]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.382 652.078 175.318 662.428]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+2345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 639.746 192.114 650.373]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 627.692 155.501 638.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 615.914 160.732 626.264]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 603.859 160.732 614.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 591.804 160.732 602.154]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 579.749 165.962 590.099]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+2351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 567.695 160.732 578.045]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+2352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 555.64 160.732 565.99]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 543.585 160.732 553.935]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 531.53 160.732 541.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 519.199 171.192 529.826]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.288 519.199 192.225 529.826]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 507.144 160.732 517.771]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.827 507.144 181.764 517.771]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+2359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 495.366 134.829 505.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.925 495.366 150.88 505.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.976 495.366 171.912 505.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.64 471.689 138.595 482.039]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.625 447.579 186.58 458.428]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.517 435.525 200.472 446.373]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.838 423.47 166.793 433.82]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.965 411.415 169.92 422.263]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.531 399.36 211.486 410.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.582 399.36 227.537 410.209]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 375.683 140.059 386.033]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+2370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 363.628 171.441 373.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 351.574 155.75 361.924]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 339.519 150.52 349.869]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+2373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 327.464 166.211 337.814]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+2374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 315.409 140.059 325.759]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+2375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 303.355 150.52 313.705]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 291.3 145.29 301.65]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 279.245 150.52 289.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 267.19 145.29 277.54]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 255.136 176.672 265.486]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+2380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 243.081 140.059 253.431]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 231.026 140.059 241.376]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 218.971 134.829 229.321]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 206.917 134.829 217.267]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+2384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 194.862 150.52 205.212]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 182.807 140.059 193.157]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 170.752 134.829 181.102]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 158.698 187.132 169.048]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2388 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 146.643 192.363 156.993]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2389 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 134.588 150.52 144.938]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+2390 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 122.533 150.52 132.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.616 122.533 166.571 132.883]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2392 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 110.479 134.829 120.829]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 98.424 160.981 108.774]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 86.369 150.52 96.719]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+2395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 74.314 150.52 84.664]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+2396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 62.26 134.829 72.61]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+2397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [494.244 688.242 506.199 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.188 688.242 521.143 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [487.802 676.283 499.757 687.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [502.746 676.283 514.701 687.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+2401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.016 664.324 461.971 675.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.902 652.366 395.858 663.214]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.854 640.407 371.809 650.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.798 640.407 386.753 650.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.719 628.448 444.675 639.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.663 628.448 459.619 639.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.096 616.489 448.051 627.337]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 604.53 364.641 614.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+2409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 592.571 364.641 602.921]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 580.613 375.102 590.963]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 568.654 375.102 579.004]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 556.695 375.102 567.045]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 544.736 406.484 555.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 532.777 369.871 543.127]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 520.818 401.253 531.168]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 508.86 369.871 519.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 496.901 401.253 507.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 484.942 401.253 495.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.349 484.942 417.304 495.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.4 484.942 433.355 495.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+2421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 472.983 406.484 483.333]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 461.024 369.871 471.374]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 449.065 380.332 459.415]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 437.107 411.714 447.457]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 425.148 390.793 435.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.152 413.189 412.088 424.037]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+2427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.219 379.247 377.155 389.597]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.005 367.288 380.941 377.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.555 355.33 370.491 365.68]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.234 343.371 367.171 353.721]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.171 331.412 381.107 341.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+2432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.056 319.453 387.992 329.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+2433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.942 307.494 382.878 317.844]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+2434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.89 295.535 393.826 305.885]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+2435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.335 283.577 405.272 293.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.723 271.618 406.678 282.201]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2437 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.925 259.659 400.88 270.507]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.976 259.659 421.913 270.507]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+2439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.368 247.7 438.323 258.548]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.144 225.717 398.099 236.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.195 225.717 414.15 236.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.139 225.717 429.094 236.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.19 225.717 445.145 236.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.241 225.717 461.196 236.566]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+2445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.863 213.759 376.818 224.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.914 213.759 392.869 224.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.965 213.759 408.92 224.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 201.8 378.867 212.15]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.682 179.817 373.637 190.167]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.995 167.858 348.95 178.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.046 167.858 365.001 178.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+2452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.225 155.899 354.18 166.249]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.995 143.941 348.95 154.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.046 143.941 365.001 154.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.52 98.04 438.476 108.888]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.799 86.081 421.755 96.665]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+2457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 74.122 415.063 84.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 74.122 431.114 84.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 74.122 446.058 84.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.52 50.205 438.476 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2468 0 obj <<
+/D [2466 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2465 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2578 0 obj <<
+/Length 3134      
+/Filter /FlateDecode
+>>
+stream
+x��]Ms�F��W�(U�&��qt"٫�ekm�+UI��(�P�B����o�
4
d��$���7���hBg3:{s����7���9�4׳�_gV93�-���~���ջ���~��~&9'�)���L
���ۓ?N|��X�}E�Գ�Ǔ��{���3J���/��
gR8��_��Ǔ�И���0�	�v�
#��
+��8;B�.V��7�Y��ĂK5�_�8?����w}_T��"�����U�l
j�>�9��X�YQ��b;;����1�k�m�����~��dm�
�V��🣿p��]�h��_�֫��\�Ο�D�(6������ݢX�qs�pO�a���ֿ,���n�Xl�JWa��iq�[o�nR���ڶ��c�`ǘJ_��H�r�6�sP������2�!��0���|�-0�$�x�1�Wۗ�9�
j!s�s oyE�������)�Ƅ�/�/�b^��v���z
�)H�����Ͽ>����*
��D�&j?.���]G�2"lj���G� ��b��E�I�jс�5a���rڋ[kɳ|||���ڒ����x�!R���rۙC�!��Tu���L������k9��fgRYH`���
� G�r^��(��(�
�TV�߽������Ͻ�
���t����εC��]�	��]�!U�^~����D3$opף��P�P�P�lݤ������13�
9
�S�rR ��Y�����ُ� [...]
+�
�<�r�6q��/�U�w�(�,þ?���윝n�ؐ'J��5P��MG{ i_��=��ܭW���b�*6k`�{��r�a"�
�A	ߗ�q<l?��� ��j�AC
+"�>�L�t������ts�
|���<F�?b*�F�7��L�a���.�–����
��>=<n:VIۻ
M�@���
hr}��x%��]s�J�MI���Rr�������E��~�
�$&��
6�4�h��x��
A7"u���pt��kCOps5���IF�[���p�p �N�g��|\��T��O�-!-~*�-�6����YK�~�> �7@�[	��g
+B9��`I����� 4�$]��jl����bu}�;���b3H�T���
��
g-����
-6� v���|3_.�e��Q�/7�c�
��i���
r�%m�x��4r�@�~}ʍm��c��m89�!6X2a�=F�|��1��b��˝c2ٯ57�չ����Qh�!��5ώ;�A#vL�f�ۦ��os	���D���A�[�b��˝Ϡ�;���,���")0��0�J�!��*
Kڗ�O��N�1\
N+Ƹc"�s�����ֱ!��,8���48��C:k�!S��#ɒ3�
+F�
��T�B��i4��<�2�ՖiG��ɭ��<�����/=�F#z�c��l\�[�i���G�^$x>��w̢�=�X���d���/�0D�~���$��1���L`�g��2(�V�;�����ϼL�|A��4
ڸlO��U}������6믽�2�0/
�
~=��D苵�>Y
/b>�_�����d=`¿�2�}��m��&,?	����a�V�܃��� ����
�"8��}�K�'�9L5?k�O�q
E�Y��u�%����
�i��Ƹ���P�V~#���)�#��� q�#��؆�ᜡh
�(�/;�DP;�6Ec#�IBtóŬ@�\��+�q����
���Z�$!��g�����Y���O�y�
g���K�O
Fj�Km�&�I�o���b����ۿ����ӫؓ�mN)mr
*WMTtVNۼ�H��ֹ�=U�V�����Ej�I�^S�F�JG�S���ùC��8:�%�L�S�·:�Г����C��_0dSF�񼾛/�j��\�%���[�SM��k�Ę��
0�^��2L����
G�;Du�=�
olT
($8s#oJ=Bg�s�=���1™Ig�N��t3-���^t���SV:b�j�N��AA���Hf���L��)�L�$F�
ǰ�eKK/RE�*�.�[R�%i��ZK�B�$��x8QH
.�́�)�́F�
ǰ8�C��q{���4��"��Ǜ�V�)� �a'z��	a�yy
Cd0%�Qπ��A�v����z'%gb�MIZ�wŗ.�<�U“�Uu����)�X�b��QxS���+���QѦD�?�U�Ers_-P�ޔI#��#ЉN
�N�b���t�DH3
�5H
�N���vJ�dț�*
+�#�|�6�ߵ(�Pw,�m�iF��
zXf�^���)�


�������SeV���2��X�����a�����1�4����u�ɵFf0�?�� 3t�9��b�gq6}+"�,���PL�O
%�� 
T���:��J	�,9�q!o�j�.t>r�9F��5ԸI�P?8J��M�
+�l�]�b�ㆁ�a\�q�%�۔f�N	f@>��1n�8Ɲj�<21S�
+�ˠ*:4�2nP9Ɲf�<.���XNJ��5C��1pk�[�S�y��9
��b�L����Q�D�p��1.Zs�0�7�0�n�hHd� r��X�ѩbU|�v��"Uq"h�e�b����Xky��ߜՍn��輿���]�Z��%O��YQ&X:߽ZoG	kN�����(����!ݼ�w�v�09q�Or�!&s�&�2�?�S:�?{��ȥ\/������ ��֫��f_�������y� /�?Q&W�yC��o0�5-������w�����������b�ZO�
c��,v�f>H
L��l
ь5
�w������	M��-\N�
)��f߽��>�6�~�B�ح7�a���	���GZ�%�uY����Aj��|w�5s��	;
`
&�n���
���Q3�HJ��L at uB���eٰ���A�67v�[.�[<�
��e�$
�R�8O�8���f��Ȩ�f�������%�E��Սa?f�.O��`L�
�ZY3Dxv�����z��Y���ϷJBN�
+��"�c-���֘i0kic�	��Ϳ&"���/+f8
a�g���B��
+endstream
+endobj
+2577 0 obj <<
+/Type /Page
+/Contents 2578 0 R
+/Resources 2576 0 R
+/MediaBox [0 0 612 792]
+/Parent 2030 0 R
+/Annots [ 2461 0 R 2462 0 R 2463 0 R 2464 0 R 2469 0 R 2470 0 R 2471 0 R 2472 0 R 2473 0 R 2474 0 R 2475 0 R 2476 0 R 2477 0 R 2478 0 R 2479 0 R 2480 0 R 2481 0 R 2482 0 R 2483 0 R 2484 0 R 2485 0 R 2486 0 R 2487 0 R 2488 0 R 2489 0 R 2490 0 R 2491 0 R 2492 0 R 2493 0 R 2494 0 R 2495 0 R 2496 0 R 2497 0 R 2498 0 R 2499 0 R 2500 0 R 2501 0 R 2502 0 R 2503 0 R 2504 0 R 2505 0 R 2506 0 R 2507 0 R 2508 0 R 2509 0 R 2510 0 R 2511 0 R 2512 0 R 2513 0 R 2514 0 R 2515 0 R 2516 0 R 2517 0 R 2518  [...]
+>> endobj
+2461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.218 688.242 197.173 698.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.527 676.283 190.482 687.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.578 676.283 206.533 687.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.522 676.283 221.477 687.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.939 652.366 213.894 663.214]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.939 628.448 213.894 639.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.218 616.489 197.173 627.072]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.527 604.53 190.482 615.378]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.527 580.613 190.482 591.461]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.527 556.695 190.482 567.543]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.578 556.695 206.533 567.543]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.522 556.695 221.477 567.543]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 522.753 182.152 533.103]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+2478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.643 500.771 134.58 511.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.183 488.812 119.138 499.162]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.234 488.812 135.189 499.162]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.276 476.853 126.25 487.203]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 454.87 164.747 465.22]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.561 442.912 159.516 453.262]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 430.953 154.286 441.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 418.994 154.286 429.344]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.64 407.035 138.595 417.385]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 395.076 143.825 405.426]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.413 383.117 124.368 393.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.464 383.117 140.419 393.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 371.158 134.829 381.509]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.925 371.158 150.88 381.509]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.649 347.241 215.604 358.089]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.67 335.282 242.625 346.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.227 323.323 236.182 334.171]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.435 311.364 219.39 322.212]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.937 299.405 212.892 310.254]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.615 287.447 181.571 298.295]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.372 275.488 221.327 286.336]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 263.529 143.825 273.879]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.561 251.57 159.516 261.92]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.002 239.611 117.976 250.349]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.404 217.352 201.359 227.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+2503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 205.393 241.488 216.02]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 193.434 251.949 204.061]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 181.475 241.488 192.102]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.321 169.516 236.258 180.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 157.558 251.949 168.184]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 145.599 241.488 156.226]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.555 133.64 227.511 144.267]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+2510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 121.681 267.64 132.308]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.164 109.722 278.101 120.349]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 97.763 267.64 108.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 85.805 262.41 96.431]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.164 73.846 278.101 84.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 61.887 267.64 72.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.864 49.928 211.82 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+2517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.594 687.965 476.53 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.055 675.927 486.991 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.594 663.889 476.53 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.363 651.85 471.3 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.055 639.812 486.991 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+2522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.594 627.773 476.53 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.452 616.011 368.407 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.502 616.011 384.458 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+2525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 603.696 429.457 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.981 591.658 439.918 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.981 579.619 439.918 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+2528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 567.581 429.457 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.133 555.543 466.07 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 543.504 429.457 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.29 531.742 424.227 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 519.427 403.306 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 507.666 413.766 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 495.35 403.306 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 483.589 398.075 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 471.55 413.766 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 459.512 403.306 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 447.197 398.075 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 435.435 408.536 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 423.396 408.536 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 411.358 398.075 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.29 399.043 424.227 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.751 387.004 434.688 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.29 374.966 424.227 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 362.927 418.997 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.751 350.889 434.688 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.29 338.851 424.227 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 326.812 408.536 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 315.05 418.997 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 302.735 408.536 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 290.974 403.306 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 278.935 418.997 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+2553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 266.897 408.536 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 254.858 385.313 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+2555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 242.82 390.544 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 230.505 390.544 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.639 230.505 411.576 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 218.466 395.774 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 218.466 416.806 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 206.428 395.774 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 206.428 416.806 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 194.666 384.098 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.956 170.589 383.93 181.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+2564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.01 158.551 455.966 169.288]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.916 146.512 421.871 157.25]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.86 146.512 436.815 157.25]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 134.474 377.154 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 122.435 403.306 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+2569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 110.397 392.845 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 98.359 398.075 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+2571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 86.32 392.845 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 74.282 387.615 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+2573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 62.243 377.154 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 50.205 382.384 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+2579 0 obj <<
+/D [2577 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2576 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F16 461 0 R /F48 619 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2711 0 obj <<
+/Length 2548      
+/Filter /FlateDecode
+>>
+stream
+x��\Ks�F��W�HU-'�~
r�����D���[��"a	�|�8���	h
��:�{�h��랞oz���S���'�&'?\1d$���s�%⁢IF��,�4 ���:�)�#C���������?�\NN~;!�{
��}�4��tq��W
��_~
+0bF���-�
��i
<��|�w���4%
�_^�����sL�6\��/����2�X��8���%��#�
*ƀ��C����sQF��-w��%y*��?	>
c�i�@�mr�9"�CB��*�8�B-X�� |3zwsy�~��¯`H�YH$M
��ή3���\%������\	?���ST���鳅W"���
(�kV
�Z�%"���=u
L8��h`�]�MTr=`V��`
7k��+�3�<���
�`�	��� Z�
z?�$-�	✴��[rA��IZ0�]�� YQ�
����e^S����~RLq^B�]�%%��2�T���Z�Z	�a���2+$���řI�H�܊�]���6��
+�4�	,
8ɘ~3S�q7~}���p��Wp$�{�����
�`J�*yG�{��1��@
���e.F��H^E��~�LIZ&��������rU��N>�/�.
l�!e^�eQjj�ǯ�� %�{X�&�L0%�q	��*����a� \�u��+��'�U�ri�#�`J�*}�~�U�UTwA�tp8L+F����W�1ңOT�A�gq&`6��D�s0�R�UHwA;B��
�.���=���T2�+�}�R�?�Ҕ�!��K<=�V��툧�2���G/�R���QB��KDRs�����.hGD=���=r��>C/�'��k`ً�^�N�Tf�y�ᄩW�`XR����j������h�>.>��
��6��:�W�p~�����6��|�҆�
���y��¤��9
��j��4s)�'uo>
�������Ϣ�&j�����K�FI��p��tJ����
Uή�>��Vג"�V�?1��Y�|�Wv{��p
0�g�u�u�
l�Ǚ�C�l�Ϝ�6=�����j�3sg�8/2c���k8�ço�Y'�tْ���5�z��t�k��-N�b�9~hi��z\��N���^�$��bZ�ô
+���B���r�R*q����*�\���C�h�����f@�լ�_�
�\�+�5Gٵ"�W#�uM9�2��4|��q�
����نwu�Yf9	��S��z�����E�b��hD�<H��
+L��J�]��5n���e�o �E
�z���
�Ժ�X"ʉ6��:���O�)]�$�#���ff
+�5�����M�):�",�������[nJD���
F��:��6"{�r8�O�5�CO��P�W
�TJ�kiז���ѱ
���p��X��R;?��hӵt�3��D�p�]��q������g:J�3�
+�^�!9ӯ���̑H���L+��W��9��٦K6X"�7�ٰ�����5H�c����Ȕ�j
������R<�]Ӑ�͟�Jl�VH�fe���S�g}H�6O`�)ޮ��$��P'�y�g谩�ع$��s�o>�t"6��_}�.�.�cܷ�Dx��͏=�Lk�9���}��5)
�9"C�f��͞�|c9�P�
k��̗j�7���W��C�K�"����E�&�����Z7d��|s��������:�����kAȘB*���A
t��8�(�C�)Rա���́�v\�����<I�f��Y�L��s���Wʙ��hW�j�������~i����jm'@f{t�
�0f���6i��������Bi���U�Z\d�R�&���ˉҘ�	��M�[�E�����6	�x�Z
P
Q�+
Kc��A�W��p
}�u�.	���5X�(.m�����alY�4����%5��
)���՗�n�&�qb�Z�P�xSM��Oօ����-�$�vʙ̲��y�&q~�W�>w*����ԙ����|�*�||�6eO��B�FL���hěW@�B��D�z)v>`+��|0�p��$�G��Ugh�~9F)\;.�i�����
�omg�iђ>8��5)-�$�X�'g�l��
�dH��ČA��:7Ū�l7׷{��[��C�z0�����`.ⴈ�,J#�Ni�$l�h]�(�,{�EVo��SR\��Z]L����dt�?dT!y�6�
+���6nr}{�`=�0�
+���a�h
W����,m�A7.��H���e�.A���=[J�BX1?[W�l�
3fHQ�c�`I�2ę<��Fܫ��j��ʬ)(��]pX�d�]XT���
+ݳ�3��B��E(o#@5F(E��l �ҥ�u���~�`r�y����"J���̼7�e���t5��p9�:W���C���[u���(��mɏwד�%7�o1�a_��J.A���ڌG�.FWW�;�Rf^��q%U�3^��NVOI�(�k�ئ��_���ub�\B�/Zv�	��~'��Rl�?�� �H/x�_�K�LY�>X�6;����[
(
�jh���Z��T|֎_������e�'���h/.4i=
+�	�@j��
+endstream
+endobj
+2710 0 obj <<
+/Type /Page
+/Contents 2711 0 R
+/Resources 2709 0 R
+/MediaBox [0 0 612 792]
+/Parent 2030 0 R
+/Annots [ 2575 0 R 2580 0 R 2581 0 R 2582 0 R 2583 0 R 2584 0 R 2585 0 R 2586 0 R 2587 0 R 2588 0 R 2589 0 R 2590 0 R 2591 0 R 2592 0 R 2593 0 R 2594 0 R 2595 0 R 2596 0 R 2597 0 R 2598 0 R 2599 0 R 2600 0 R 2601 0 R 2602 0 R 2603 0 R 2604 0 R 2605 0 R 2606 0 R 2607 0 R 2608 0 R 2609 0 R 2610 0 R 2611 0 R 2612 0 R 2613 0 R 2614 0 R 2615 0 R 2616 0 R 2617 0 R 2618 0 R 2619 0 R 2620 0 R 2621 0 R 2622 0 R 2623 0 R 2624 0 R 2625 0 R 2626 0 R 2627 0 R 2628 0 R 2629 0 R 2630 0 R 2631 0 R 2632  [...]
+>> endobj
+2575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.636 688.242 152.572 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 676.287 183.954 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.866 664.332 157.803 674.682]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.405 652.377 147.342 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.636 640.421 152.572 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.405 628.466 147.342 638.816]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 616.511 173.494 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+2586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 604.556 168.263 614.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+2587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 592.601 163.033 602.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 580.646 178.724 590.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.244 568.69 198.181 579.041]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+2590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.014 556.735 192.951 567.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+2591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.553 544.78 182.49 555.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+2592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.093 532.825 172.029 543.175]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.323 520.87 177.26 531.22]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+2594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.093 508.915 172.029 519.265]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.25 496.959 175.205 507.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+2596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.33 475.563 134.304 486.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.015 451.653 200.97 462.501]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2598 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.959 451.653 215.914 462.501]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2599 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.284 439.698 203.24 450.546]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.228 439.698 218.184 450.546]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.433 427.742 215.388 438.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.377 427.742 230.332 438.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.321 415.787 171.276 426.635]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.407 403.832 148.362 414.68]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.351 403.832 163.306 414.68]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2606 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.135 391.877 206.09 402.725]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.079 391.877 221.034 402.725]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.015 367.967 200.97 378.815]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.959 367.967 215.914 378.815]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.063 356.011 277.019 366.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [280.007 356.011 291.963 366.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.885 344.056 220.84 354.904]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.829 344.056 235.784 354.904]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.284 332.101 203.24 342.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.228 332.101 218.184 342.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.959 320.146 215.914 330.994]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.903 320.146 230.858 330.994]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2618 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.718 308.191 213.673 319.039]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.433 296.235 215.388 307.084]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.377 296.235 230.332 307.084]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.407 284.28 148.362 295.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+2622 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.351 284.28 163.306 295.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.135 272.325 206.09 283.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2624 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.67 260.37 159.625 271.218]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.721 260.37 175.676 271.218]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+2626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.905 238.974 148.86 249.822]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.266 227.018 156.221 237.756]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 215.063 149.056 225.413]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 215.063 165.106 225.413]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.202 215.063 181.157 225.413]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 203.108 149.056 213.458]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 203.108 165.106 213.458]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.202 203.108 181.157 213.458]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 191.153 149.056 201.503]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 191.153 165.106 201.503]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.202 191.153 181.157 201.503]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2637 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 179.198 154.286 189.548]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.382 179.198 170.337 189.548]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.433 179.198 186.388 189.548]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2640 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.651 155.287 164.607 166.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.702 155.287 180.658 166.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.144 143.332 211.099 154.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.965 131.377 154.921 142.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.158 119.422 222.113 130.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.564 107.467 180.519 118.315]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.508 107.467 195.463 118.315]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.559 107.467 211.514 118.315]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.61 107.467 227.565 118.315]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 95.235 140.059 105.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.155 95.235 156.11 105.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.206 95.235 172.161 105.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.457 83.556 137.431 94.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.047 71.601 128.021 81.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 50.205 134.829 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 687.965 369.871 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.198 676.287 391.153 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.764 664.332 432.719 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.409 652.377 379.364 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.46 652.377 395.415 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.511 652.377 411.466 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.562 652.377 427.517 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.995 640.421 348.95 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.046 640.421 365.001 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+2664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.116 595.115 418.052 605.963]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 583.16 364.392 593.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+2666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 571.204 378.867 581.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 558.972 437.617 569.599]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 547.017 395.774 557.644]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 535.062 401.004 545.689]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 523.107 416.695 533.734]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 511.152 427.156 521.779]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 499.197 395.774 509.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 487.241 395.774 497.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 475.286 406.235 485.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 463.331 416.695 473.958]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 451.376 406.235 462.003]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 439.421 380.332 450.048]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.755 427.466 420.71 438.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.027 403.832 411.964 414.68]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+2680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 391.877 392.564 402.725]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+2681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.027 367.967 411.964 378.815]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+2682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 356.011 392.564 366.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+2683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.027 332.101 411.964 342.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+2684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 320.146 392.564 330.994]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+2685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.517 308.191 429.454 319.039]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+2686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.027 284.28 411.964 295.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+2687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 272.325 392.564 283.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+2688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.452 260.37 368.407 270.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.128 248.415 432.083 259.263]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.362 236.46 399.317 247.308]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.682 224.504 373.637 234.855]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.755 212.549 420.71 222.899]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.294 200.317 410.249 210.944]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.797 176.684 406.733 187.034]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+2695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.963 155.287 401.918 166.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.014 155.287 417.969 166.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.065 155.287 439.001 166.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+2698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.328 143.332 371.283 154.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.379 143.332 387.334 154.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.43 143.332 403.385 154.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.481 143.332 419.436 154.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 121.936 394.558 132.286]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.508 98.025 428.463 108.376]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.065 86.07 422.02 96.42]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.066 74.115 410.021 84.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.623 62.16 403.578 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.176 50.205 410.132 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2712 0 obj <<
+/D [2710 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2709 0 obj <<
+/Font << /F36 472 0 R /F48 619 0 R /F8 473 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2722 0 obj <<
+/Length 379       
+/Filter /FlateDecode
+>>
+stream
+xڝ�MO�0
���>���8M�+bLp@|Ti�a�e ���y���u��������Q0#v���1Y��[m!�g��D{i	!�`�OΎ�7�$=��T��&�6^_�aʞ�[��Kg,�l<Q���)(I��k� C^갛��`jS�ې��J�1X��)�>��e9_�����
+�f����qxf��.�B�f!0�B Jw��2���C�Ho<��K�w�#��>�5�zP
0咦��-3���5����:���N��)�9ݗ`�5�	o?&p��T�xo5
7��0��ʁС�_"�y���4���������To�
���+��l�_`mn��k�
�f��γ��DUF"��Z�t!�ϫi���|QV�>��q���W�V��j
+endstream
+endobj
+2721 0 obj <<
+/Type /Page
+/Contents 2722 0 R
+/Resources 2720 0 R
+/MediaBox [0 0 612 792]
+/Parent 2724 0 R
+/Annots [ 2708 0 R 2713 0 R 2714 0 R 2715 0 R 2716 0 R 2717 0 R 2718 0 R 2719 0 R ]
+>> endobj
+2708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.959 688.242 178.914 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 676.287 149.056 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 676.287 165.106 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.095 676.287 180.05 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.146 676.287 196.101 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.491 654.369 122.464 664.719]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.822 642.414 128.796 652.764]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [234.982 620.496 246.937 631.344]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2723 0 obj <<
+/D [2721 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2720 0 obj <<
+/Font << /F36 472 0 R /F8 473 0 R /F48 619 0 R /F16 461 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2727 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+2726 0 obj <<
+/Type /Page
+/Contents 2727 0 R
+/Resources 2725 0 R
+/MediaBox [0 0 612 792]
+/Parent 2724 0 R
+>> endobj
+2728 0 obj <<
+/D [2726 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2725 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+2729 0 obj
+[532.2 532.2 591.1 532.2 400 532.2 591.1 355.6 355.6 532.2 296.7 944.4 650 591.1 591.1 532.2 501.7 486.9 385 620.6]
+endobj
+2730 0 obj
+[513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4]
+endobj
+2731 0 obj
+[531.3]
+endobj
+2732 0 obj
+[833.3]
+endobj
+2733 0 obj
+[413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2 590.3 560.8 767.4 560.8 560.8]
+endobj
+2734 0 obj
+[441]
+endobj
+2735 0 obj
+[892.9 339.3 892.9 585.3 892.9 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 892.9 1138.9 1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 1138.9 1138.9 892.9 329.4]
+endobj
+2736 0 obj
+[597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.5 472.2 833.3 833.3 833.3 833.3 833.3 1444.5 1277.8 555.6 1111.1 1111.1 1111.1 1111.1 1111.1 944.5 1277.8 [...]
+endobj
+2737 0 obj
+[339.3 892.9 585.3 892.9 585.3 610.1 859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2 431.6 675.4]
+endobj
+2738 0 obj
+[446.4 446.4 569.5 877 323.4 384.9 323.4 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4 323.4 323.4 877 538.7 538.7 877 843.3 798.6 815.5 860.1 767.9 737.1 883.9 843.3 412.7 583.3 874 706.4 1027.8 843.3 877 767.9 877 829.4 631 815.5 843.3 843.3 1150.8 843.3 843.3 692.5 323.4 569.5 323.4 569.5 323.4 323.4 569.5 631 507.9 631 507.9 354.2 569.5 631 323.4 354.2 600.2 323.4 938.5 631 569.5 631 600.2 446.4 452.6 446.4 631 600.2 815.5 600.2]
+endobj
+2739 0 obj
+[444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8]
+endobj
+2740 0 obj
+[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 71 [...]
+endobj
+2741 0 obj
+[639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.6 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520 [...]
+endobj
+2742 0 obj
+[1027.8 402.8 472.2 402.8 680.6 680.6 680.6 680.6]
+endobj
+2743 0 obj
+[613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 5 [...]
+endobj
+2744 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+2745 0 obj
+[625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 [...]
+endobj
+2746 0 obj
+[833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 2 [...]
+endobj
+2747 0 obj
+[638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 [...]
+endobj
+2748 0 obj
+[550 575 862.5 875 300 325 500 500 500 500 500 814.8 450 525 700 700 500 863.4 963.4 750 250 300 500 800 755.2 800 750 300 400 400 500 750 300 350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475]
+endobj
+2749 0 obj
+[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544]
+endobj
+2750 0 obj
+[377.8 319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3]
+endobj
+2751 0 obj
+[354.1 354.1 458.6 719.8 249.6 301.9 249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7]
+endobj
+2752 0 obj <<
+/Length1 1815
+/Length2 12754
+/Length3 0
+/Length 13749     
+/Filter /FlateDecode
+>>
+stream
+xڭ�cx�_��c56��m�nl���v��64�m5hl�j��|��<{?����{�|�k]8׹ֽ�
+%U;#����3
#
/@L^T������,�@A!�4t���7t�XxxX�@#�������̉@���p�03wP�����:Z��
�́6�Ɔ� U;c
��#@����O�@�tt�0"�� L,��F at 3
[�4�ؚ���=l�b��S�@G'�( ��d� @"M�l�= &@S&;P7 H��Y����������?������7������;{g�#@���h��C5��'jg���8Z[�ؚY��
�p��p�(Y8�L
����ښ�o	 ��%�IBYT[]����_�J���j
��)�O����q�p�2��e�>������I�ۙXؚX98����
��"�W���	�
 t)fb��s� @�xL�
��PN ��?C�&N ���0��!n �����?��
`��C, &�?�
+`��Cl &�?�`��C -r���i��C -
+�E�?�
Ң�@Z��H��iQ�C -j�E���h�!Pw�?���u��C Ն�g�@y��!М��5���v�Fll��0��������T i����O +h���i�d�W�ӿB at d��?��W���\
������ ����\3��7����
A2-�B�CV!�����CL*s�Rm-l�̓
��#�l�?�A���3
*fo�������F
���� �������l��.v�����r�/�X@�w������(�	���hUN��c�X@��4� )t6w��I��8���� ����Lu�
A���:�l��T��/y��G
��'��߭��'*j����
t.XA�@��<���#���d��~R@����t���@c��;c� �Ԧ�R���2hZpQ��8������K���E#r�uZO�����n/N
^���q���\�
�{�h]��{�ۓ����7�ݜr�+�l��&i
|��y��D-�v�F�C׵�GF'��d��zhp
%�
+�7��0��u7Ԥ���@�P���+��|��ķ�`��0��N�a���V���[7�x8zCv�+��J'䙪z�u��^$���Z���v�>>튯����-	
j<�w���2�즥^���u��
�}������������*���F����mS�
��3�wG�C���0���BB�#3�?���Ś��Z̼��s�D�a�jo���=+mV�X
<2�d�rs�3FRC�w��\
(L��g#�Z���P�1f'��߉�����ŰE��RH\'M�y/�l⇢B7j��6���P�C���H���6��7�,�{<�L��:Q��D� �+P��<bX%��o&���2���wB�\�`��؍�\7&&
��T�l�z���vmg{v^OF�퍘��Š��7�8�.J�
+
�(�kj���


�@/ٴS.�%��
F�H�
��� m�)
:�nb���Ӣ�~d�׮{(T4�UM�k*��{�J�>>}N��aaɃq~�%��;
�Z��ۺ �~�'#xC�
�w\�Η9�[$�����ǣ)r]I`�=�P�9
��kJ����/
�J�R��b����4��k�q+���`�=b��>KIY���OlO�P!��?�	4�6��|QHڶ�Y;�e

�O�*
�
�E�]��Tݷg[f�1�
��-`k����S�vB�

���xX{��؞���h7�Q�8�לdw+
�M�N�0>=��
+�Ǒ,���_[
�~2�֫t�:��;��߭C4�뭗��Ӵo�+u>�vG�wŚ��0�(�-P˟�Yr���%MU�
����_�#91+
y���\p��d�ݓ���n1�$�Y�A$^���:��M���˻ P1���8�����ߧu�sH�-��rE}.�Hi���{���?5G�5�j�#�׾�4�p W<��ǯ&��6!�b�dgU�}���0��8"z߿�;�p�r��<5\�ҳ�o��
͓.��.qf,�
o�q�K3q<S�\�����"����K���p�N�� ��-}̏�Zжߨ���yJ�s�NY�D�"�����_�
n��kE�gf�����:9����mܟN䥎���p��L|oy5
shH@���Q��+R��W�w�lF��Ux�<Cb|0�
�Mu��f?�w`L�xO�>fĸG"wO�Nd��\���
?A
QH?899Bj�����+p�F�
M�暭Cͼ�BK{�{�����X���p3�e�r���٪'��P2��y��� �

O��nȷ�g	�>
�'5H�l�������$J�i��0�^��޶7��H�Oɟ��s�r�:\Gڻ�R6��3�~�_QƤ�4���oS�z.���s�HYm�
�?[>-/$5�a��/ߪ�N�62���µ�W��
p@�P�}ᮬ�zc���; O� ����j��6�S����AmZ�X���%a��f`tez
~o���>����D0M�o�R�躜n
ѳ�J���V��wٱ�P�׎ܗ�n=�����
��TU}����;�;�x��k�������
����p^N}�^U����
�b^#��
%�_p��Ԋ��K��%ޕ{�g��
�Jp=��FJ�[��s~�Ev_H�_�؎�S�u�dwLG�,Q���_q�r��y�9��6���r~�6����}B��zG�K|[���s<��|k
֖6���*���d��܍���X�KQ��{���!����[�|6g�۽m�(�c���1�kg�}�7j�*�s
+?1�}f���P���U�Ux�;wq��x&��T ߠqKU�Z��1򜠗��*
C�)���8�9Wz���)�cV�	��9 2-��!Γ��7���T��*�t����ie+d�4�쏣����x�����ש���a=��K��	4����{�����A*9��e�7�0A�(�W2+���v�&��6��=:bn9
Я����c�mK��Y��HD�j�V9T��r��0Â��E���!
��=
@�8렒Ob��=�	[$��2���o���O��O6U�~ʫ�\��-pO)��ˠ�)
�EtrM#�ؙP�p� �x��-Be*��PT�-H~�-��P5�$�
E8�S���w����K֥�)Wz*�
���Z�ţ֚$7�l+���G��b;9�c�8�Yy��<
<\���T�jC�Ϋ-5�E�f�;F/N�گ������l�N��yxH����T�2�0�V�w���s(���$0à�Jܛ
�'6	�,
�;�^�܈)P!�>uKa��C�TuDe�c��
����sz�2�Z]1�T�'g�	~r�!��'k
�o7�����I-Y������л�W��ӫA�dp.����a~k�q�Zv��/��ާz_���Wf�SxO��Y��??t�$9�2F7�3x+K���Mn�$I��SIkpᎋ����W�N����}J��O��5'�3���	e���#��/"b����u2�z��᫮�����!E
�	��׽o$(�6sc�8�-����C�
+�`�u���6��­
�?�
��[}_Zu'����[&�~����˰��8�6���I��K��I�����
8z
+��U������4���bۂ
&���g�UD�R��pw3E[���E
q�yE,�%}������F���b'�VG.���|6�b��|�
+e�@�З
��t`�4k(�Yc��Ƕ{���H� 
�Ƨ���ӠAϦ�D
���ty_&kv*BpϮ�`����8�(Mcɠ���H��J��:.t`�܇і��� �\���l�ס���{o��H���8���ˊC^���)��P�:�!h����

+eѬn�n�/���l�$B"�>�_)l]6%w7�_�wb��4��
�ZS.������Z�X�wr='�6?hI؇R���~�D����2ӝ�5����נv��=0�����o�������N->����b��2*'�t�?!}P�/󄠏�>4S&w�D&4��yi�-Z_n�e�8�9��?D�J�G����q�|��wdl�q��t\���_0
2Cg^�yf=W7r��A
?N85�-V	�3�F��g�S���>e<���eKs��6~f�6	o�"��gn
<6�?viZ6xT�;��l��e���w0�������fhg�"Sq��
+�ʭ�"W�7|r 6�\���
]��K)s�L���r���X��=zg8�/́�Y!�݃�
�1/���{X}�tRa3����m�	~�W�ݵŀ�`\J'�q��)����Qz)d�fq�,��'�i�Cs�FN����*�Ἧ쁅�iH�8��R�l
m�O>�����˖_|֑��/^3b`�܍7w��a]�.��6iI��N���+
R��e	l2�D�ZCl�'xџm�L�&�lTۿ���{�����꫃my�jQ����9\��ZP�q�\��t�͖�
k��#�\v�]$����p7�(��Y�(H���Fj��V�N�Eb��g'�1����a�g40U���F��t`dnmY��Y��>�����i�!~Ĕ=�ȧ廊3Ҝ����O/% �u�Tՠ���+��o�Z���t}3|
�ϫ�Kg��~g����%�Q�#�|q�ҟj:;�.q�J���d8��Ih��f���!`H%�ln�e������9`Z����⌿�E4��?G�4��E�x;����l��.�OȞ���-�R����mw [...]
�^
���@�소��=�ބ���0gk�s�dYr��j֜�MaVe�#�c���o6q���T�7
@!D���Y�Փ�)��{�L�ɬ�XՓbM&��jج	�d�e�b~hH�)>�K�=S�$&6��5�����^��M?*�O�
���p-LL\q!V����zr��vM�C$�g��󒲽*����e�lY�CLj���!�D_��\ c	b����͉���
���n���&�ީi��t��1�{�º))�l�{���
٘߹7�&�}�;�L��4�v���$�whP7L)�:=����t���/�7f�=�
���70�|��l\GF���0tі��y��,�j<�it�C]Rp=|seE[��}o���M�g6']:\D�B���h���D&~|�c�`t)�R`x��Z<�e{|R���j�>?�բ����85$A�����c�48�LԔw��>�*_��Ij�#�y�����AO�[1�8�{�@�
�y_��
#�
��٠�~�UD�- [...]
��͟
ڈ7	�#dm��
+&�-�%��niJN�~
%0�YG�6���B�?Ap��x�Ҵl��Ѻ���`�j��L
}���҉��U�Y��3el��$ɔ;���Izy��e��
��^GY���W<�� (�غbjS��F�IG�cYɘu��
r�1���|ܒk��k�����f�U	��T>�e�\�/�f$��_f�1D�I� �͍xWR�ם88Y���	��M����vp햃�d�b�)�!�/Rm���˸�-����?}y���ϫ�(��I���h�6��ՎH�Cܔ%��`�H��3ᎋ/k���:��r�C���כ�E-O�{Ye��U��ޡG�Q���
+�6���'h3z0�U;���Z:6#r��i ����
q��%=�.��^
8��
�>��X
9Y���Pr�O
�7��/�Ex�
�L��M���T�HZa2ښ�%e%�
�騻�֖`�H?��5�K&o!��s�[�7a��Rv_v^�[4!�;w�/=�=gB(3>�8��@֜k:�H��C����pv��.��T
SV !���N؍��
7���y.v�lb���")�<v%�讪��Čfš2ԑ������#)W3'g�!��n$�׶�췶���[&y�OdTWӚ��[3���C�+� ���v���riNعU(������Gxq�[�x�]�w���i6g��D��
��v�}��iES��
e�ۓ��)>kG��`>�v_�
���Կ��:�j�¹%4�Ç�Y]Ǽ.����+�
�%R}�
+*���3	Q�2����+��೧�z�
��
G��R�[6�>xA&S�`����@dymL�!Y�e�W�V*�=�����
���PK~
e����?�
�Q�4+���t��"츩)O�	`q碠<�t����&�k��O�:JT�F"�?�=��;�l��n:����M����;�k�e+JW\�k����:�:d��'��7�����K{;��b�
����P��F���3��Ecc%��3���.
�ܩ"�.�/pqbZO��h��W.k
LD�%����-�3�K_%&���x-O���°�/\�J���U
�ڶV\�S��g�fn�[\���Rb�=�\k��lZ��{�/�R���N� �k��L~��]8ɘ����S6h�+�ȕ�O��(jlYf1&� ���? q�Q_�t9����#ܽJ/JjU�

X��=�s��T��:�D#�LZ�`�B�w��A�I�^���u�h��|���m�1�zc��d�d�5YʩϗB4D_��U���H��[�3�F9���b��.H�b��R�I+�dv�N�&0K^�U�����$c����㘠��=�ܦJU[J9�nFv�8-Z6�
��TQ��F
�Q���^#��} ���ۚ,a�-֐�
THN��2BتK��a3͋v}XJ<�:&
��R�|Mԙ��6��f��Q:�h4�;x�ln�"�M���Zb���(y�kã���2��Ψ��XbrM�ٓ�%�fr��kB�3��9R?L�

�,�ŻD�l-�y��uǼ\�

�Ap��������F:�1�k
ȟ��6%
+���>���ïþy�v���e����	�h8��[�(��Z̑趞�^��*�cd]��C�v���}�&]���F1���Tp^f�̰0�&p�쥑"jH�`�����c���6��c0n�������*w
≓�v�L>zf�oO�a��0ZU�z�cj:���ﶯY<s��b���i-i^����wl�������𐏳�<���B��~n
#.���)�M�MB��:/����Rr�_��t�1p+�/�MdPE�1�X
�Bz����̋UjN8>.j�bڇ-@�*$\�w�]{3>��
��5��ܝ�S�e3�kx�gX�fG!��ہ7ģqV����
���o?��|��
[�^��>
X[����&�s��	�e�\�$��A{|XYR����S������\_�f���S'x�~Z���%�S��
���l�� ��>V�E�W�tJʂ�UAmd᣶���
Us�jS*+*��񶰈ю��سg�r�]��}
�!�PIY��wz`�(IW���A2��X�N�vȋ�:f�B��U���a����|f~�D�1�q�N�Js��g�go�O�����x�����r ���O�qb��|�0�V��ʷ���4)a�:�D��E��0��X쥸T�z[X��Mg�vm��5
�d	����_5%\X^]A��T��aō�����"?�]�_����(���P�;G.
��W����J���$+�V�� ��s(%-tW��0�I��P��܀�ԝ�9G�]B��c�=�[X�9WDl�뫷c"|�o
+>��ԅQs=Q����lnl��(�lD�0�i��g6�w�)t��߸L��l��f��#��ĩF�
+�^\)��f^��T7�u��/H|: 
+~*X3
���:zਏ��I����.�
��"B�T�Qh
��
+eh~���VNf!ځ��_ ��
t�ḭ��]7�^ŏ0�t�ڍ5?^���V at g�j����|{�
���^��:��p��f�����e���u�E׹��5f�/�$\�
 {�����}��gTO)Vԏ\]„Q���IxǼp4��Z���"�:-��o�S�	}��<t�V�<�02_���~t���M���ac=
�I�h��z;
���T��E�.}�]�<
+�
���Q'����
W��"BK*a��SQ"5HT�%:���,�
�V
��
u}�#�-B#�5����.k1�m�$en�%��\�O�0��pӚ�c���B��D�\=������3l+̖>ڪ��
ښr��Ǽ����;a0A���i
\��!i��Q��fJ�M�76���W����等u�J����	
�0`�پ���X�GX����/D�<���:�gg#��RH%]*������wײ�3Lԏ�YIq���L@�k�G�m�IM�ޓ�#��,_�����tX�4
��a�;�3!�Y��7u�X
h&����c17:m����f����ӷ
�z�@��Gl�0�z��ΎǬ�
������+❕���
�s��y*���Wh��6.�>б�?_4��Ő;L��=j^��������#���-��a����To�m/�ϡ�	p�3+����?:I�VP����#6lH�v��u�����N`aw�
 (U�ש�!<������XG����j*Y��̚u`����4*�'�� @��W	[&Z:��m P�{�ρ��_w�en��Q�}ǫ�S����Ǽt�u��궠�<�ܗ�mN
�Fi"�_�I��?Kw����to��]�h)���:�y<Ii������!�0�
����
���G���\��F
�cK�"%�.�
j��.,)����nʄ׬��\���
�2U�N厈��T�H��aW#�J��1s��.�/'�a7OG%�@V�;��"�yګK�V�䴊�%����(�z�!&
3�X���p���?A:��N�7�l��J�

���m�&W%���o��<\���(c�g�+埫��i�>��D.#�v��W�1�l��s�d���#_�����,t��
<-_S�|����y����
�4���AI�x]�S�����ƞ���J������a�����lvª�˥����L
��b�X��~����TT�&�\3������F�
K`.o�2�qu_�5ߤ�"\Z82�0�\��Eض�~>IZ�O1Fzxe"�C0/��f�N�|�n?��<�a��)����Nx����UD�͍vW`�I̛�
+��,r1%�8{�l�fPF�y/e+ �#��(!��vz6�j%kR^����&�!؟�����
�1.*�`��y�:IϏ��9�
�e�
?P̌�}�b�~=�Ot�&�g:��?k}��ؒ�sD�FŞ"��f���+
:�)+��HM2��]���n 8�oԛ���M;Β�վ�(�m�巘]{ &�{�Rt
p����^1����
nQ��,����b������9��w�H7
�/*Y$
\<WY[Z��F��Q?�
+ch�� ���"��Ҋ��\DV\�ŀ��"ː��S�m5���ٖU�o����Ѽ
��{S薮-y��_NMt4
��1��~��^f:�QI�兔�MO��������F�8ꭠ~(gj��5r����w�hY�mT�潽ϴOy���Ɋ�M�(
�0Mu�H\���~�Y��@S>(/�G�y��-��j�
��&���v2s��r����Np9T}����@�z�*��fr�vb!�M��v\�6�� {����x
��8��ٍ��J_��ρ�
(.R��Su�f��X���깆wx����YbhRMHjʧ�w8��T5_�6&Y=VX���_c�
�/�d�t����1���u��
\��$D� 
�1�wۆA�08%����
w?�=b�6t�+�"���� �V������*�uh�Ck"����6:E}:�3�k
�{ͮ�5%id�&�+�T{��P����uTN^�/(Jӥ!t.u?~���ܝ-�t2 JT�#���<��:DR��"�\�J�
�M|hq�:+��D�
lZ^�z�tΗȬjw�d�Yt�!b�xb*���X+�����X��
�j5i�Xp��3�p&_.�z��%f�QR�W���7��П]����o��hN�&�2�*�B_P��T+�4%W2i��!{f۩Y���6
�<^������g��#B�C��F�Ȳ=���g`����ov�9�ϧ���i�>�=n|�lY	F�����
`��a�t���W���h��vЩ���wo9�}{���>#�$9׽�v�~��S�k�܅�/ԔL$�S��*;��Gy,���-�p����H��m]��:콕f؁���,D,�j�F�C�
�S6|��]�s��kB~‡�
�@�̀X��Y[
�~]S�)�r�֔��E+�t� P2Gu�r<U��*�>C�ݒ�kQ�������#�=�
s�h;g���Ip��58�YӔ��μ�F�� �
?�с/�Z
:�}:�I��|{1��u��3y�(��t}�L;����
I�^;4"&��h0�p�]�E�f;m�V�D�𛒖�EF��̴��ww
�.�������9回qQ��Z�`�E�;!�\�f�1!w�;;��~5ճ��M�t�|��P?o�}f��=����2�hW��⩯���E1��䈢В�Ӯs� I�H�ȬHl���B�&�6���"A�f�k2�ޥ�%g�
[�
���I��S'Y�%�X��n�k�v��A�{�T���lfX
+�Z,����&�
y�8B�� �C����޼��Mڧ/�.��Vc�o>�;bЮ��$��}e0
��0w�G���U�8ݿo�B �-����v��0k�.���i}�R,%�]���c��֧�c�x��
�?l^vt�M|��<��	�s(�ʞ(k|{ �θ�J����/{p������Q^e�W���2:��7_1�1u����2JԦ��2 9sw�y���0�<�BeWmT�a�4�v��b��w�("��]ZZ�l��u��":ܥ��d8�	 �]E�Y���:�Y��N��'�Y�d�F)�K:��Ň����1��M�������j�.پ����w���
AF$�qt��!aN
"*�N�ұ0�'�t];H���
+⁙͑����v�'��)����h�Re���"q_�Be�Du��Pt
���x�rxt��Ca5D�)ٯC��&5I:دj�U؝X��H��9'Z�y�%��T�
�z�[TYd�Ƽf4K��8
�Շt�tL����	@�6���V

+g�B'�5\���0F&ܽ+���N�f�Y�r.>/0	�7�n:r�\���HԼͥ�.Z}�G`
+
�+�:�"F�[4�:%
S	�E]�GZ�� 
�
j��=��5�4�?tP���p
+�f��J��G��=W�C%h�;qʅ7f�cF �N�Ji	��	;�ݚ{C�J�(|w�K=AsE�B�M�
q�l>#=��
��� A)�F�Y����.�O���kt%/�R�-T?��
%\�bj��<\�dz�GM���H�0��'��N �pHB�6Ҹ��WK��^$#w_(�0�S�B�?�ث5joI�j����`��k�\�"�#2�OhC%хYp�`&��������:$�^s�X�t���c��/��8�l�ᵩ��*Ӆ���=���fn�*4`����[֗��X�T|
��0��_˶x���2�&F�W	`R�LJ�1��W�p��s���0;�=�P�r�H��'���c�
ĤH���o����}=��ז]�_����1N��o_J}!z�N�c8.�3EQ��]�����\�1�l32���
��
�'�'�Z ��Y�#�t�o�%i���Z�A�UL񺕇N�f�m�N�;�ڊ讲PV��%N�~��Z�Yt%��)�!�g�M��-?�b�����l�*��5�`�nTa��
և
�����Ig2Lc6�*�K+�Ŀ���[�������'��gnl�9
���J5���������v���
���]wG�Z>�P�>���H$��(A�����G˓�C�T��|�(`.�;�׽ڛ4K�-C�]�Ԕ|uŦ?MT8�V�n��i�>���:}��p�xQ�&
+Ӷ"
�(�a;/�3堿dX��Oi�A�t�1���X{�zg
J�P3��b�#t�����imrU��ΐ%�U��r�%���Q2s]��d
�K,�dH�W
,�5������
�-�3u�Nh�8Gi�����}�"����d��U ��:�X#���g���m�ĕd�*ڹ����0�B�a���#�Xۖ��e���1
$Ӽ�ȑ`��q��2���}1$'7�L�t���Ew�HRN��ȁ���r�G�2(����C�:݋�o�;�=�*�L�_���wd!Ii�룖W��FU�Y0Ҟ��X�L�64�'�Π�݌�~l���rA
��6�����-\�\�#���+YD^�R������z��L#�~"�:�
����3]\;2{HB< �_���Ϫ�w
�ߩ�D��m���J�"I��wјn��rx|�9����6jV�������E��<��R�B�z�m���Jbs$�uly��Ò��{
+uj6���R�O9�|H���!Y�n{
�p�����╤��/�5�c�zy؊R��ػ�%��7�JUB���fv��*�f
�D�q���`�dF�w%�پ��h8a�L�
P�ݔ1T�������o��S��ΐ�	����5�zX����P�B�@
$nRB
�}�>
\�ɽtoE��08CF���|��S{$Y�]�?�o�r�s�O�b
4�Y���P
+��i狣V^)�5K�̫����o;��S�bT	��7ϰ���P.��xE�\�8b
IgR,G;Rq��ށ��	������Rb�-�]�z2顾�������]��
���jٺg�vd�6�N��	q�M�^�&��
"�^����b7��齔KC�|H�P{���Ku���>c��xk�}�����$43PC�=��;ǩg*2(�%�}�h��=蕗��1�K��gĥ�dS�E��M����*�2�''9�[��ѽk��
f�d8�rr���Oc��3�
�!�i�J���5����\{s_�20��>�+>{��m#��O����8�*���cH��7�|� b/�]�!M�}*��θ���u'�<�h�i'���%�|�S�j1�7ʟ��/�	��
l�X����Ծ��|q���<�q1Gt�� ���n%�~nc�ʏ�_�˺��l�
o3wImIcj{���B� N�4���Q������$�4	FN�nw	s�B��opq7����
|<���c�(0&�p:>�ҷ��BX�l�?� [...]
,E*����k�4�Q?A#��y���U�E��H�(.�&���lnVN���l at S�����.�h����]��՞�;�"7�9���\w����䭡�Q
&C��+yr����dF,��D����	�=IW�n�`��D�XCw�[D�P)u�돵���&�B;NB������@��8+������`
pH� ������W�
k‘����n�D�čם
+iԛ�uj���
";�3cU�3��Vt���u9�ٵͳ��O!���,`/��ZRl&�셍��kTIg;�x���_�!�5�tE̊�CqJ�h2g ��%J/�qr^!K�3�q�.�D���4�K�36�w��M��T҇�Z0%���֧.i�� }gB
+endstream
+endobj
+2753 0 obj <<
+/Type /FontDescriptor
+/FontName /EQBYUP+CMBX10
+/Flags 4
+/FontBBox [-301 -250 1164 946]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 114
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/X/Y/Z/a/b/c/colon/comma/d/e/eight/endash/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2752 0 R
+>> endobj
+2754 0 obj <<
+/Length1 1761
+/Length2 10869
+/Length3 0
+/Length 11837     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX\ݒ�!�4��XpnAC��M�иw� �C��;ww	���{��!3����OߵjU=��צ&WRe�`1KB�
��,@>��GQ
 ; �†JM-f6p0�X�8�� @^^ ��	��
 �������D��Al\��LL
 tb��$�|�ۙ�
�

L�V� K�*dvpe|������
���9��XP�@���`61�Fe�G���1���a#G��^r��CE�"�P�FkKW���U��*��!��t��T0�����\�?�Vf������qt �>B��v��;U
�oq����F����
����
`�w��^��l�d� 2Xڃ�[�o	P��%�UVJMUM����
̬
>�����?��b�
Cݱ3sh�����������_�$�A#3k�������BO�� n@���� v�*fe��8@� ��x �!v��<Nn. �B�&n ��
�����U��x����l V�X�^�
�*�B
 V��z�BP-r/�"�BP-_�EᅠZ�C<P-J/բ�BP-*/բ�BP-�^�E텠Z>�T��
A�k���g����:
_�	�qA�@K�;��N�"VV/��l�a��B�4�
+PU�>�/	��_�2{�����*��:����������E�SWS��_�_
��/��h�B
�zA t��R\Э�f��֡�B^�C7C��2T���2����
��l�b'�v��'N�s6��-���#z[�OG�P
�2���E�?v��.h�=���O'�T������6i�U�`j��@'qp���Z��/����B�;��ȡ�]�Bhy׿���q�J_�v�n��0QQ��3��0�CU�P��s�y��D��
�]�}
�7������]� Թi���<�&��S"{��VԤ6J�W�D3��l4�eހ�-��O�������d����M��Ò�>�QISO�N��)_�5�R>�n�P\�
`6�L^��U
_
,����N?�9�R�����HӮ�T՞���^C2�R-(�'
�
+V�ma0gВ3V\
��o?O� �:ƅSH�#�]6rf�
���g�k��W�
����k�Jo���
�̏ɚ�J
��Ҁږgᩓ��L_��Zl��&��h�*"��,�
+�}�a�МC�SUN���v�G������P�4����su�W��ժ���ZI�@ƒ��t��Tϲ
rs����U^ɤ�Q��w�%s˃�۰(�����e��g�
�ω�u�r
��Dي�:��G���h�U$�� ���Jݠ�xʟ�q�\՜��|��&�]%+W���r�`�7������Qӡ�P
�agwψ�*���-���U̔?Y���r�YfQd�Q��&���'��s{��B�Fw���Sd��W�+s0�[h�3?
+쒛�ߍg|���?o �e���%xm�f��=i�L��v�QM�"
gSOzI�7�K�Ċ��rVRzg)	�e
�1�
�������AS�~�&���z�� ���/�`�S��`c��w����O^��z9 ���=�U�o�D�W~����c��v�G*���@
���,{FnZ��9����w|}�OB^�����rx�Rr�;��ې�N�������8���l
�x���'����1H_%��"f��c>�P�5�k4^Z�-Eo���Cb骈ߗz��$[�3���ڒҀ
^��k,���`�0��{9���`1�(�w��'��4l�8h:�-ô��gvZ�1�1�N�DB��v���n�N��np�DT6D1���"��i�K���Ү���O:��F0���>���R�J����k�NwK��R4L�a\�߄�p�-٨��h���_-�@p;Q
��O��Kљ�Gƪ��~���B/.4藧��~�C�hx��N9W�
��/�X���("�V1�_�wܛ��=�V���&SN
�~"�y�ɋ9�ϾQ�#�!S2ۂl
V���<t�.=�Kv�5�%B��
+�׎���!�-\l�jTIpGb��
>�t�'���J~�����Up�sP
�'|�]��S5MsBN����dK�����ߠ!"l%
:-�p�!R��+���L��;Z
�߃ZV���������}��Zʛ�V���X>~��M�u�uh/
���JP�,�;����
`��.�6c����!+
Xj����ƍ,�
+2�)����O�l�e��{�cJ��y
l��&Y-8��fT}0Sݘ��H�Pzƣ��C
G� ? �b�ʮ�\VE#�8�����2u/���sI��v��~U�
+�1�bҲ�9^�qe!E��ק&R{�d�ȳ
}y��1E:�ڮci�Qt���vx�����+~��f��
�5\���������A[Oi�}ր��I��Y�Z.Pu�#�Wߊe��-�����4�s}��_��$<�>�K<��
�[��
�
u*���-����H�[t8�'�u
�ɔ�)��$(˼h9��w]d��������}��
�6�u�һ
	U���I2�e���iʸ�v͛n�hrc6��m
� rB�v�񀡔D
d����k�$
�|l�$�K]�e��ν87d'bZC���M���3���:8�s�r�U�.�ޯ� +1z���G� ��������2��ڂ��47T�>zF
h�	�:��U֚�
,�	���kR����*���螬sy놳_t1��ك�טc4<� 9�z%��������&�
�p ��OLΓ:�E�UA�@��	_��oZ�V{�J;�G$�z1��m?�3��DCjL�N
wtF���֚ }�*�feh/?f�r��q�D�k����ST�c���5ĩ:f
f�$�O�2��I�^٥Q��ї�r.��t�U�Ӷ�zr��x/�-��������c����1b��fW�T���wX;o���We����ўf��k�����[j~,��T-���S(=����8�E�6Y�xGI����#�@�	��_ޙuWT8��ލ�.�:�,�uva��h���
@w2/�!-��J�c?��(\ �CWI}�O_0$Ž�d��0�-P�A�]��l2������wnIm��2��g�r��H�0 {J+.�(3��(g��ۇ��cM��>�'-�8�����T
峨�҈Ki��y�p�P�g
��^'4��pƅ
+}N�zFW��7�>��bK�@=�qݐ��z��tא������1����#Jy�R
c�-��]�=X�)-�
~R�Yj�e-m�͈�k���_F6���^�ēUP
+~
1§
d�v�k"�bb���j��x����H���|�K��ǢЌ�
Q��ߞ��az)μ�m^9/g�6�p�~b̭�uqG{8��ыT(ޔ3
 *�h��
������j��
�'��c�nH��N뺧c�+�g��f��j���M���D9�Z�4|�	w>�`����/��/.D���Mke��GJ�n�C[#{m�K�a
04
�)�>���!�	\'j�)�kεs�h�ٵn�x���*�9��$]k0ᨔ�f�\�Z�|52xFPk at Gq�2"4|]*�(w���i·���@ex~WG�<|(z�A�w�{�0�)F��ʀ��\�(����P�n���cn��˄��k[r�ѭ������� ��w���̂��3�>�-��Wv01�ϊ�'�1��`�,�G'�_i����&
+��7����,�U������7>g=�H �T�GiT�b��i��
e8������-rL�qbk%
�[�D+M[³�a���
+7���w�H�2�I)�z�-���"��f?�Cj��sqL��m�b��u�i�GF���&}��.(̐����1��;��Bt\j�+�]��_�v==_�40w��
�P��͊O���2�-��+������><�o�z��,�-7g�s�
"8��]:j?
Ćٺ�8{��92P���M�E[�Z|�@�s]�Q2J��çcp�2��?IΈ�ƀS������Fk���,�1�
+瀎�
+6�1�=Y�o�r-X7o�ʶ}�NX4�X���[3�Fj�����w�.��y�#�ϳ��]������op��]�͑�����}5r]���+�O�1;v���S�F4�xJI:��}��M������ �<_���N3��l��a�jG����2�:����*�s���C�����o
Ϥ̞�|���f��?�`�~K��~���z�ΖP,{����b�cLi�)g��c�1��
��c�c �-�'9"[��͓�� �<[x��Q�_pd1U�!h�	n��}"{R�Q���.���-�n�(Ko�p8cmJ���J�`��7'�]2�E�bj^^-�+�fC�>�:��\��汬&�dWz*x�����
��6�K�����Şq�\�5ޏ�������>����uJ'�jwf}���X͔u�fj&][i��)3P^�d8M=ښ�Q>������G��������-�H]@�w��$S��*��
�\����+-mP
`��U��.&aG�
�E�f:}��.������4���[�'�t%�n�6o_ª�o�98�9�#y�L�`�dk�L�։���˖g ��b4�ޗ�2V���]���Z���oj����֋�S�{s�دI�N�KDf����WLZ���u3���Q�O��
H?S<�mS)�]���
��&:$��JQ5L�c

ĕᔯ� �y�� `��F����V
dh�h��c1�^��>J��ڎ!bs4���*.�����ۙن�`�y�-*���^�L��u�����ߵ47�8}%0,Z�J`(4J���y at 5B֑��FI)�f�[��!�s_���e-H�-
��Wc�N��hv0�?�q
V[+�
%a:>\#�����
v
��
���tS��x��\�t�U��USa!�>#H4
�����2R�
�%��?�_&3�
�y�m
+�<�R��M��>~
���W
	_yt�
Z�ۅ�;D^r��L'�Z��!!�g<D�$�*v��&�T���� �,
.�wr�^�^oNv��L˟�Ah���x8�-�:
�5����pM����>3�ݛ��Vv0��,�"J���'��ۺ]����o=,�S�Ta"�W���~r�e�z�a�s
�4��\�b�0�ő0�#S�&	��z]���t�§1�@��ɬ�v�tA���˨��c̽,�_��3o�f��S�HbAz�J�އ	�	�#�$o��b�
I2�&�}�����`�]�?Z�3����ˁ�u��Z2lx�eHUO�Cq3K��Le9z
90'G��\�y���.��OtI҈>Mr>�����Vg�?���v�B�^�-��n�����P�H��hf���_l�q���t�yա\C�h�F
B������d�߮�_�+�7U���j~'=?��t�hM5ס�
�XJ�귊���(���M
��'�b��x�p�C0+��ɮL�~\v���)��e>~�.sC֪��
+z�H�x��y\���~�,t�F��@O�]���擥����8$�]�
৲��b�����bq���&vX���WE���
Y� Ӯ��(A�uYd�Pv�u�Y�̪�z�d7(;vN\P�*~sŒxa��9������V[w�M�ݗ�s���w3
	�QG��M=������Ċ���q�3�=�@�R�m6n����kh����z�
/u�v-u��Qk���Aeg|̳:�{��T��0�Jv��#]�4�|z{
la���ʍ�)`
��M��~
��(O�uG��&���
�,�<�T5 g�
+r�9G]�G&�!��s�`"�r����C~�O�4���s� �`��}�h�#�7WB�0���+��>32>3{�lo���y at s�oa��k�%2�P������*o{
��K;3J5����r��������
��h\w
_
ZW�~\�O|�a��CУ3a"��>���2NnXyx��Uiacq�BU�������a�"1�kϨ��4�=z�
������B{Ov�F��d!H���l(HI Q7:�h%'���{�����`�P��4�w�>
l
:�;4���Y:��O��h
���f�p�aREw��!4����J�

�>Q�8���-����Oɣ��~�`�PS�U�!񷊏ٙ�#7���,�.Ru�k�d{|�yU�:#lY3gH�giT��|
�.���d.]�R \�W�&�7
�*�_Ey�
+*�
Eg����a�]�U&��O}���?�O�"
�S�~��+۝n5����?6B��^!2Qf�Q�=�Z
�
�j��?Z�.
5��?A��̍����V,S���5���$��v�G
�ĺ^
��T�y��Y�®�ER��l]�
���Re�s�o�o_.�g��0��ӵ�9��Z�H�^t���޳�j�t� �X-��b\|�
���(u+kt�IC�,`/5L��E�<4G=��$�� �xh��eN�x����w��1B
+�
�����mv�C��g�5�
�.+�z��E
����[��5)̌B�DfM5��.v�i����[2?�h
�R�콣1��l���֘B�
8Aw�Ƕ�=�{�
+)����=[�`�߼,p�0�U,b�����밳�gL��
+xݷ3�K�?.���Qɫ,d
�M�6P�?�2�5E�~@u�+@���0+9������҇|QW~HW�
�=����?{"p䮛�����!"$T��l�>6�Z):N6��ZS?7֯H�tޯ��,2J��_�aF�%�r
%����,/�υ?�+��+�A6�	�{��(���C���5P\���׈�KڧK�
+�����߯XrW��b���kQŦj@ 
�:�>6�O@$��-����(
��ڐ/�gF�a���vv�G���1
D
+:�%�n
Nu��k5��D�h���'qE_p����G�u��gA�o���~:��J��|��
�f�ԏ����E4���~~L�`#�*-7�=Py�h�k��P��n�r>��St�����,��K���Pj,*�V���}��a��'"�3�Xf(�ݤ��?ʅE�:P�;�
'{}1q%4�
�
څ}tz#
�>�ok�"j� 
�Q1cUk|��.�ޅ{��M���Č��O)���q�09Z��l�J���� zs�����4z�0?��Ճ|}�C0�O\M��fH��
+��k
����^�R�n'�;�߷��X�Foh�:D�k�
���ԃ�#�&U���ka@�D9h��׼�E9�
+C���j(�5�5#Ԫ�cR�6$�R�+�#��K&��Z" Z����;Q�9�c�ݐkO�A����k*�=��e�9��iW9�z����ތ�
\@��n�i�lh"��&w-���G��m��R
���+>5��3�b�֥�Z�(�až���?N<j
=��b� �U8�{��f8%a�&gJ/oAQr5���n��
�9�tx�˻'Y�@�؆�VO)��(SǦ�w�u*�Q�f��c�N7��]�%Q��i��;���j���a��~?�唖�+S�f.j�9g3��l3������'��J���
"�oh\[��b��|�������n�����^�'�S�6})��Oy����B<e��kd�0���M��~��N-.�i
Kk�>6��>�t���
����Ɂ˩i7�g��bb�Z(�~�n��
��gm�0C�	).L�1���6�˛��+�
�
Y{�1��
�-�ER��,��#�(TJ��Ȳ�~��q���p�F�
�,c�;��ŷ�.���"-R6�i�i���u���y.�:�.���|���%��"oV�'7�^��
��(��W�k��<m�%Ӆ����"�˓�A.忇��p�
w,�'�l�h0�j�3���A�'{��d�m���?�WU
�#0�=s��Cݏ\�-J��S�W����ᐅ��{Υ��Iaû���`���}�����[6F��	
�o03�N�ڎ;��3�M�8��GH�!\�&���Q��|t���ZJ��b�t
 �M��CG
K�ۼlu̬�k���
R�8c�������ɤ���?��X;�q���?��Dn�J� �2�ZƊ�R�s�ݍJ����ښ���������@j��Ю���"�v}_�o��q3,yMг=(
�+���,�����F�� H�LΆ�q���|�*���$y��
t;E�V-�|�+���٣m��_Z�ֿ&���x��
�VZg�r���I�ZMZc�<FRB`�Y!��
+X�_�� V��ѩY�1�_F#u�_�(
��c_���Z���g��W6o$��o���%�����j=K�\N(G)[@E�{��">� �m9h�̒�c��!l��a�">�>�%Z��g�-�Gv��+`:B��%�
k�;_�zA��()Q&ߑ�(C*{bܤ/��>έIÆ��]DM��q�
��^i�n����9�J�V&���yV���2~
���3
+1�5�#=<Cu�H]�L�ғ�h2�O2��|5�x����^W���S�ߠ{A_��o�x�IP�ǻ���y9���g�?9;�#�9��͈�w
��v]���5�"��4�}#��؁���Ieͺ�����P��Ib�)mI�e5��wWsA�I<$�x�r���k����V
qz4^��:��Ę%U�DT���ǟ�k��E�d�+�j�6yf��R�{9��+��{c0�BT4O`�ʙ�ٰg�

����DP_�Q��Ǧ][H�g]���I�&
��B�g|O)���&P�&�:�S$�����{�ӗֆ��J���b��dH�.t���Y�l<���
F��r!.Lt��	��jeE�2So�\3c�d��*&N'�j�0��U֌\��'�+V�r�6�rob��z�~[���cc�U�ۇ�
&K!�yq�sЙ� �?��4���*FgFQ�ӐO���
+9`�UB3���9�f�
�� ��yMf�3�����
���VgGH;t.c	#3�K
���rfg:Di] ��ڽ�Q >�{t���߿�9�c(�%tǼ7"��&e����������F
��N:
�x��K��E[����]}r��� s����h
z�G�!���
��.?j
+.�u�
Q8��N��FM瀒��B�
)Ca@�^�
_
�]F��:���BKm�8��D.�:��NQe��T���v������c����M
��jY����� V]�4�'��Mq��r��0�O����W�����Ns|Q�72����,�����=��H
�'�J�MS��Q'g<d冭i:$i�R�%
O�� frr�Y�-v��_.qx�q��Q��ԯ��䩧�0�
(_���gH����J��9 at Ov8˥�`W9��&a�1��/r�v������g㌟���2:�Y,5H��!p�0�\���>F��-���%��J��U��(5�}3O���E)��0Yy*��.�]���M��p�@�
��
�Y�)zSD:���oX�:J F����BE�#���e�SF9*�[ۧjܣn��|CWӶ����zM���^�i;L&r�-���^�@��:3T&a[�5S�	�~��J�/���2�8��p��q��}
��)J	+�h+�G
�0�e����
S"�p�
4���F��sk6�?�=Du�<�Cг7���̷M1��c�=�7T�
&�A=y�8e�V[�����<
+�}��x��@���[ܾT<�����h�z�d�
@��Y7Rz��b�8��#��F.��VDL1�Ei�GĦxC@=�
+M��e7
<]l���]HZ����y�u����G��4��V���c���B
���!r�{ȑ�����ۉ��1%�T|�m�Н �PD
����0\*,q\����<4pW�Yd���G�s�S�"��H�I�氤�	c��S��6��{~{��o�J��Ɓ��V�R�����
a���
��B��!�nU-UƩ
���U$���ܯ�6������;��C�ZGw[q,]��iVخ0])�>�M������a:?v�X�
�B3l�٥��gh��%�|T�'�/�Ү�Aw��.��n�Z"������a
t�y4G���6UW�/��h���%S���/�(�Řg8���Ȓ8�٪�����+:Ka��
���6�����c,4�
�Lcp��M�*�4%
H�T���)�6
_�s�U���Qк��<���˾&Rl
@���'���[�+�2
���U3*R��?���4^/|R��r?{oOQ)�h��*�hݱxa��E���/��ҶTk
u�.�C\�zO �~@G{S_��Y����/� Xn,�
sdO�♰�u����kH�jUD�A���
aW�w�����p��Lp�Ɨr9��G�F��u!0K,0����E��@9��?(G�*	OAi�>�l{W���n�P3����iEuD��|�{W�[����6|%�h
6�ٛ�!ly�.Qsx~Ԣ�p��G��8�/ [...]
_���g����=O;�
+:ݕ@�{[fx�׬RQ�y��B+1�]Q߇_˪/��1�[�rn
��m��[��
+��@_�'���!�n���
����ȄO���!F��
��‘d���姕2��r��9�T
2���/�S1��k�d�1U~x1;����P �
F
��-��l� ��
f�D����
��$и����^4Ծ٘�5J
+�͌S�u��ќ�y@�l�^{SJ�nt����XP�	K�h�
֣���-����o�V
x>@2P�)�>>6m
��&�a�$a�>�ԑ�Mx���㿭&v׍H1���x3�=����z�ֱ��v���
+0l�-��-��%�xd�(�Ӂ]�5�+y<�i�X_�#���L7
^A�v��N�A���
LJ���?_�K�3!a!��z�?oQF����i�+���l��^��n�<�e"j"��#�2���oYi�����>R	�^0������t������S(
+�]|]Õ�c�,{�^m���l���.��<B�G]���y���d�i����0��jۥ������Hټ.z[BA���e�:ϔ7��p��*v��}9Zb��o??�aL.e�K9=1�o��d�sN�E�2A"\�&>Dц�SV�Fb(%`|�R��5����ܼ��\GS������3�a�p��۔q���f���4���@�R����o��j?R� �V��Um�����0sW����u��Dž'��%�Y"���DŘ_����w
4@)�����Z�K~&���q��F[R��b�?���R2ySu6X�W����zo��8�X�
��T�q��1	��FUU��yw���	��WM��]��P��Ґ��h��ޣr�&��a�2x.�H�3/�u<�
5;�)�A[/#�D=��k�-gռ��܀/L�:d
<"��(�!�����#����9Q�,v�
�R��5A�����w�ֺ��pH�H-����ְݗ��śš�;�,��$
cA��.gzi!�.ɬ(
+��f7�:�)&�ّ�%諳D
����
l�q8�A�]�<)�PI;a}���M�R¯@qA��;<
+톓���<��9{�j�ׯB�}{هF���գ���C
��쥄X�Q`

�˨
,;Q�Y_��~�fQ�R_�h�v�@�X�y�j|�ѣ���c�P\q�yx�V�j��ع��=R�0������=������x��8����BH][��,au��&o��V�H����4t�A�j��-c�m�bn�1�VEމ|�4�
��̄9�f1?���kE
-��j��C�,_��0�o�I&��$�k���w�~�U럵�8[/��Y{���t�SM[5<��[a�}0M�n�3+g
`.K�k
+��z�
w��;���;��},��)��.�>��V��(B�e��ة�Q��
-Q(�l��1�,n�;��<Z�ܐ3�G><Kr�;�������gu�
������W�
+endstream
+endobj
+2755 0 obj <<
+/Type /FontDescriptor
+/FontName /JGUSUK+CMBX12
+/Flags 4
+/FontBBox [-53 -251 1139 750]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 109
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/Y/a/b/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2754 0 R
+>> endobj
+2756 0 obj <<
+/Length1 882
+/Length2 2735
+/Length3 0
+/Length 3324      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<�k�I�Q�f?
{�3fb�}I�������1Ø��9�}+K�c=Q"�II%[�,c�FrD*�;u�yO�9�����{ݿ��u�<*
+�.P<�
�$��P�&\0�3=�j
��Z3
+���$s,��h4
0�� p] ���<���f�P
+�Ǘ
+
0S�&�L�A
+�%vX�/�ϩ��2� RC5"p��8�A %�kB�p O�Q/Ї@���y�&y��?�xZ�_[� %�c
+8�1�p,��$b(��!0{2�,����a��-iD�=��[�?��/֟@
�SC��QA
+`Gƃ�?��{�d���b��	ɇP8RS
�G�dI�*������q����N�����c�-1�
��mG,�Du

 �����7s�D!� '�4���
!��ku��Y�pd<�� P�,��
�p��P at 8
 ��` �p<�4Id*'�t&�&S ���`^�B���Kp-- ��Q ��rR�#�0��`����
`�P�Ѿ�{ijJ	�"� ���
��tP����h
+H�~�������A0�AX��8�����_�,�{o�R��-��i�����d�닼�4>wZ��#T
+e���	�{�&�L":�]`�C�
{�ԋ���}��=O��,h��??�-K~&�Q�ð��Dpˮj�y�C�}��__m~�:͜d	\�+�fCN4�^��M\z�u��\Lf�vJx^]�bI=�?7�7�\`�es�9�,֫=V2��R��0z�ι�o(�y�M:vq�/�/��ע�J����~[�zQu
u�;����,�|�+|�~����O��"��T���\+�N��^�?��X�l;����e5�Z�T��z�گ�2=D-P�{�N+�Z��dhw�v�<�E����
���-�����Ԍ�{e���S�W�R~�T���7ECZo�n��Ҁ ���K��-~�g2��٥>�U{f�-�A�8��g�Z�J<ğ���>K/��Mڃ�t���L
���d_[�[|��UȧA<����UB
S�wL���N�5k��ȍu^aAכm�
o��j%I�fY��lK�`�67�d�L�Np�*l���5�
β+�X�Nn:
��m>r��$_bU��.X [...]
/+W�wy;J�����X�a$"�n�1��)0l��h5
)�Ed*bf�X�k���Α"��(~�A�G��쌄��n���orc״�/Q�5+�w��J���E�6;�1.X�H�-�����.�'i�n0A��G�W���gº5�@
���Bd��������Y毞"����
�&lA��(.�}y7x�U
+,v���
S��P�_ۥ)S7D;Ш߰��$����:��ne���Uy��f����
���0C}�©��K���ly��������*HMJ�A�s�\
+�Bօ"�AZ+�Eb��x���
�2�}��'�>���,rY�<��_sj�Y;���ԃ׺&�c���0$��r���ڶ�r�f`Z���r^��L�	
YA*�iy,���x����/�<m%F��>K���Fߦl?�M��rBC�۔����wg��rm
�!..z
�;�}=�"3��'0���G�c�?�q��]I5��m�R�=3�FCUt�7�
+�
��t�o�6$ܓIT�
+�2�8��
�;/E���n��c��
wR��l*
+�~��{���m�`UE�q�Q�4AEE�=�E�������ֲ�	GqW��T�;�_����V��[�+���K
�s�:7-Ѥ���zcs@���ɘ5=�(�+{b�_ Hb�S�~=�nq�j
��\�l�����k�E��eW���9�c1ݧ��k��"y���P1r���b6��ϰ�N4q,^�W �4�Iq�q�^��6S
�h.l��Z�^ຐh�ȞQ�<t�mٿ�J/8����S��u�2u�:��.�O\3�
+���TG���Ek����R�T��i
}6��D<�7����|5�|O���(�F�a���HbzZ������y��%w��#����� ��q�Z�A'�
VO�ƒR7Vp�U�Wiy��Qf��
{87 ��`��1)�f&����|��)���^�yK�
+yg��e����&i����Bh�bݦH�˰��bL���";��	���?i9�q���Uu�<#�$�K�='ס��ƨ��r�ݼ�r�U�������JwJ�=
�A�}q%'����q����d����k�
����';�;X#����M�"/殉��
z�Uekn����v���'����r'zz��&��7�n<�l�eO��&%)||Y�N<��B��񔾉Z�u��On>�I}��'4���<�W
�[ܽ5dg��#�9}l>�h��
�{�x-̼V�)e]��٣��N�M�7|��u��c
���80�۪l=�T��;�t1�Ro��4�PC
.�������
b�{[�:K��f�7�s��c�Y�5�u6i�;ɘȗ��tH�_����Y�Yo{�OC��U\Z��|
���o
��TM�n�k���i��\������G�����ޘ
6U�x�;�1w�o�\ꮘ��q�����S�.��I�ʘ<��[?_&yͶm|���?���eFQ$��
(��* F�w�
���썙���g�\�$w�
��uT��RWEe������vSc�k��Et_:�-�̥�'���=A�<h��u8)a�M��
+��]E� �	!a��[Mx`!�ɩ����v�:�*z?�KR�|ȳ���V�qj�z��v�A�������1�8��d�'��cic�4��J��$
������~2���y4�����ݮ1#y\	��,(�.���ePö�;��>]2�y�uzt���я@襌�10%�%�'��lcb~Ȳ��=��4�M�
+��Z[+z�9eK�'n� u��
�V��S
�Z�g���
AKJf�9
M�ƏKμ�J���
�&�yz�ii6vvdom�~!�=_����c�hZ���Jk�Ջ���/�i7�]������6�
gN�_N�v��*��ֆ;ᎋ��0]��Ͱ�D;<	�l$��<�A�z>,�у9ː���:2�]�(���Hz�⠣
ۿ|��p��-]'���[g�5l���c�W+u>M�����Zx3��t	
�ۥg�bv�~��_{c._L�	����
+BE�^�*�1q-��pS�qBMr
��W:��"s*��T6��!}2��
���
okWD�쨜y����E�R��g�2��>����]^����.>K�r
+�����wF��|i���l[�
+endstream
+endobj
+2757 0 obj <<
+/Type /FontDescriptor
+/FontName /YWRFWO+CMBXTI10
+/Flags 4
+/FontBBox [-29 -250 1274 754]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle -14
+/StemV 107
+/XHeight 444
+/CharSet (/b/c/d/i/l/n/r/s/t/u)
+/FontFile 2756 0 R
+>> endobj
+2758 0 obj <<
+/Length1 1143
+/Length2 5291
+/Length3 0
+/Length 5989      
+/Filter /FlateDecode
+>>
+stream
+xڭ�w<�m��kWl�=��"��T�TJ		B"j��Z�ګ(��T�M횭�ZjZ����������������y����q��'<\��"�p�
B��.�!zcX
��@\0w$�Y
掐����@U{ X�������� !oW���;�"�;I��F�"ma�@=����a
C�1�H���(P����4B�!\��( 
‘��@�=� ��t����O����%,��
/��K
+ �p�3�G�@��Y����Կ�kz�P�0����i��J���(����A�x�#\�z8���ߩf����!�H�W��PH[Ug{(���M酀"�m
�v0��8��o	|��R AM�����L�Z5�!��M�]���;�/����"���D����D���7����l��#���R�@��+���=x����Hg8�
���+�D�1��-@|W��vW��J� A�ߡ�HF
���$����>S�o��g�M��`��,d��A�X
���� �(���x�?Pr�%�����p�#C��x/�?/���f�?!�������\�@���?o���5��@i ���[y��x+�?(�?��/���JM
��?KD\J�����H����<[WW���_�,�n������@x!l3�[�0Ǵ��%JI��3�Æڞ�d(�n�+Џ�֏� 8���9"�hS�锃�vR_Y�T��|�AO�����
�e���nY<"����AgG���Xq�ڙ�u��m#y��	��g�E\25yq�8�u�"
~k5`�۬��0�Xx6x�}S��)�g��<��k���˘�g�
��\=����?�����b[X�$�gԣo�(
;�^h��:�����e%��Nji�����[�<���
�,_y̫7��-�����N�aOC�i��!�un"�E�a6���S�G/Ŝ-<#j��K,��7�pŃg0��T�+��tyY&ِ��P2dU�\���d���-���a�O4\Ǘ
+�Lyu�A�7��[{�4.,�����D&�>P|?ԩ���HG{��p-����
�3œ`��YD)��6��8\N
^!�Op���V6��\̢��Nv�i�?`8�8�"�
g���
;BaT6�@��-;�|������m3ċ~���@�5��M��٥8_HdA}�璴�–�Y�F�n��i"���d�`����
�qU�������~��
�)z"�H��,{W
N�����8�'�[ӌ�醽�!]��Q�-%N���gÕ#��19 at V"��ci`��	C$�
��8^�%H�OF�)��,r1������[�]�A^[�pp��U��S��u1��l�@���q΀F���@����%�:}Q�\՛E����m��)\w�+��g�9XT�%h���C����'}v�zĐЫ.�-ʧ��l��g���:N�>�;�����<���dA���׭	F�/AߵAqV v�lj��>U|�97:O��7���=U^k&
�U�ƴ!����	��H�k��jA�������>SYe [...]
���o)=K咛��䛗������V(Hg�[�߲uc�R�
蜐7��<7[yO���}ݐh|�C�Сk *����R�͡ۍ���s�|���ˍ/lf�5�U-%E��=���}��=�2��b���z/�U����
+���� �	+�|�݁��{���Q�k*�D=
+���c	(6��?�02
�lH6!�)HQv����Ƕs	�4�H+M�U@ʓl����S�բ��۫⬖Al/`����iJ��FSl�z|�J೒3�ft����Y1�_�zƺ�����L��EZ����\B
(�d�Xp���Y�/
�oA��U�8	�


+
+O��_,Q,$8?�H�o���W��qG�Z�̪��I���fD�ȭd�'r�b�VP3�c�A��5���ӣGs.
ymϺ�H#�o,p�Pzaҫi���h(�)Q��M&��C#cJc0]���윍�	I���G�"��[��p�2 ��x�A�O{?8/�|}���<�Rt9����fe�Y�E7q�%�22��4�b�
f
�k�Z���Tޔ�
ꡰ��P�V�4kwqZ"
�ė�qk�:�fy�G���s�-`G��[�6õ/Rʵ �aԑW>YzU伯;���
��^?���
���61k��:�dy��V�����Mk#ʛ�H\�ɺ�]1�:�-�
���/�=��e��l�^.h��j�;
�8�#v��<p2-��gh�ڊ
�Dj̃�T
g��K�2hZ��N������x�M��שªCe7��aj_�)��'�WͶ}�<ꝝO�A��ܾAa�i���
я���i��ٞ0�q,��`p@��#��Z�8K蒴�C��=���6�6&�	v�W�s�GJ[���ų)c%e�cU)�:.����ݭ7�ѡ�.nAYI��Y�F��h��G��I�3|���_V�Ղ#Z-G
8qn���!�S �k���ڄ���=����_o�(�ӕ2�HR�Z5��W�
�W����X�;e}ؼ��X'�"���S+����yw}&���F[I��&ϝC���P�x
-$�*:�ܤ
�*u?�
+
\�~i�
��
�U�x��-VT3�#�sx�R�kgİ_��3E[�ϫ��-������r
�L£���
h�j������|N������^�3-W$x�
���?83�VՂ0M�p^���
)�'�B
�v����ЪY�m
S�=��{�(L<�4��d�=��5��_�M/�0���;&p�	�Lyi�ֲ�<)0u�$1
�0��
+���O&��	7n4Y�2lh�O&��@��/o�r�I� f�/8֥?�+�M�r�z��
`S�v���^U�����?�
:�Kz�k�q�c��,7
s�ڞnh�’��|�
n��ts&d������wl��V\���#?$��I^
��Ɔ`7
?��4�`��ڡ|-u�
���u8Aճ2�Yzh:*�
u��*���1��	���|�� ��\��t|�S�{���-�b
+�u+�`&��Y�
��^�XSTH�!�h��Om�`V*�*�K��Y
=�l>�auyľv,�����O-lK��׉����
��f��{B���|Wx�<�
�#>�Cc�xd�ԥ�,ުeV.�C:�oE�QҼk���4W��fR���S1�����ó�

��iOõ�;L/i��&�����8�m
W	E�Rc@�жd���

�Q�L,�¸Ո��{�u+v�'���"�	��k�|��q�V
�j�E�#�f�ц2��m�G�VV|ˣ[5%	4)Ͷ�up
[d#��6,@3y�$�Kz�|�⮍=KK��������
�V�Vqƞ�?r�R��r8d���I�
�t��e|�����~F�_��ΖE�G�T�xYU��PHk��(���;J#����g�)��3
�k���F���/{�au
�;zO���m���w<7�>�e[��lC{!�`{�e��8Ϣu��|�
�����m���
L
�D�Py�n"��y
�mS���P���{rϭ��^�s��𠯹]��:�
Q<�pvmX����0�5�"Vmi0� 
+o�Z��)�Ւ���Y?��2l0���&eF�Z(C���)�)�6S�)FZ`g�"�j�D���B�_ߠ�����	�#�x�~�T�����sj
+Ϲ�́,b�u!?��|�^�����+�t߾���3yG�*L
2�o&W���N~��H�@(�R���cl"���i�oU|䓩�5�/_۰��DVX�W�(y���~W��s���ܡ�%I�O��$eB[B͡����b=6�fUI�����//�
����L�5V�0%�_�Z�xr�j��J6D��1�����h6o���K��\���4a�&�~�y&��x��k�H�1>�� �@#R�ő~��v�+�"�z�
�]ʻ^>��p6��t,�4n
Xr��/B
�);������1���p�ӊ��Α�����j]R͌ w�*�@�A��_�/���P=�RM
j�)
kW�%?�a�I����83�c-w
q)����+�xr�}.9�TY�
٭���_=�e�$S�;@j-��঵@�۰B�a� ,�fF=�(h
�N1����� (_R����Aq�`�y&@�+��k
�ǖF���풼4G�LwF
�"kF�(��g�~ӲlQ��z�t���Yj� [...]
+%��nx��3_�����6���
�5*G>heXj.;V��e
'�������r����0�&��B����XJ{_�,��-%���X���
���cglڛ��/�3����	�"�M=�=��*K�~��%���p����Y�n2х<bW����e��{~Q,� ��9�M9�9d5v}�g��Y�˒�Cq"Բ��
�p����۔�W��Ń��^�kbQ��M�m�Sm��q��sy�҂����w��:�
NvmӜ��"E�x�c���1.�t�
��}憍��p�;q�'[�X�\_�[�O/�������#�ZS�u��É�ݏ��ς�D��Y$;=Ӈ1͕R2��uB��2��\L�]++����Ɉ��@�O�n�P����/��O�H&
�g��
U�=�����������f��O����Ӛ쭰슘��VD���ʨ1:��f볜����ʲrs�ٜ[��
$+�2���k�q�-U婀�E�~�[O\K��Um�]~|�ԠnW����O� oO�����m ;x�����f��c�k	CJ��DDu��
l헴Q)�Q��B���ӗ����z�

�cb�:�'��
;���3+]��4�P,�֦��zo«�� �k<�T9�!�����t���}�~Mno�����ɦ[oęH%O���ԣZЉ���It��Z��if�ѣ����t�}�h\r?�*�'Qp	IS�����=yNi�3�Q�z�y���	�S�h���-7�ު�	�T)$&W�� �މ�=1�PܭNO��H��Eux�,,b8��:�����l�Q��y|Aw�]^vt	��L�N���ӌ�欥4��{rx9v��4 �;����6�!3o������oT�,��(MK^�".�6�R�QO@���Յ�<���D�P\�(�������9�	�׵N�Z+�6#V��\ca.jđ��%cc�K�C)���/��KU%��޺Lj����k|Ǥ=�i]�i�W���D����$4vqN/��3 �T�3|�M�jk6*�8M��n���e�<�9�ȝ��Ρ1[;y<��&g��
������NP�a�s�
�>b�،�����`�lCFthHVy��ݤ�'/
���v#�t|)��m [...]
+endstream
+endobj
+2759 0 obj <<
+/Type /FontDescriptor
+/FontName /ZVGVLQ+CMCSC10
+/Flags 4
+/FontBBox [14 -250 1077 750]
+/Ascent 514
+/CapHeight 683
+/Descent 0
+/ItalicAngle 0
+/StemV 72
+/XHeight 431
+/CharSet (/C/F/I/M/P/a/b/c/d/e/f/g/h/hyphen/i/k/l/m/n/o/p/q/r/s/t/u/v/y)
+/FontFile 2758 0 R
+>> endobj
+2760 0 obj <<
+/Length1 1119
+/Length2 2830
+/Length3 0
+/Length 3493      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<��Ǔ%KI�R!
k�a�6�-Y����4�`4�f�FD![H"K�M��.7EdOiDBHٲ��Fuo����z�y�y��9�s��+!byR^�?
�q$y(����C(DQ�]BB� "Hh<�8�j Puu`�`J 
��i(��% =��?��E���� ],H@#8�
A���
H8�G�A�?��` ��D�$�?a�BIN��h
�¶�8<��ݍ�����"] ��R�kD�q z�+����@�����?��b0��v�os�G`��x��/	$ fxH��j~g�о�?�	�F��<1 ��݅&�� �MBz

��q�?E�'�M��)3[s+
�w�
Z"�8���Ͽi����П6}>4pR��J�����QL�ģ�8O ��
+ �?;}{�
+ �8H@2]��'я �\ <�����u)�& � � 
C{n���|��_�
+�;9��O�&�$ʿz���o���(�K�U�5�����|���/	����� ��Ӓ�🎠P������a��O��W���������jQh���*���|o��s��
 S�a���T��UM
v�H�/��	��ۤ��?���� H��/��#a�ɕ�A��]��2
�<�����>�
�ƀ��frVf�����4n�	�	�s���@��O��Ƨ���s�H;_#`��f�?�#�:����o�
+�E�p{A�C����lK��6��^��ht��x3LU�� 
s*��=I%k������s\�	L��A��ղC��z߿��f]������%���K�o|�V���A��]xq�Į@j�آ{d�P� -?!x��YZ��I���dJ�H��Vϙ��m��^_�
+Pd�,�*�#���E=y�}Xl�����5�n�T��b���0ц�p��*sSօI��Ʃ��#K��Ԋv�(&s����(^lz�l��
�I��5�G=
+fle�G����j�"�6�o\��CY{E��o��U����6N��J
+\-�����:��+��V�KMbu"��gX���-u����'�1��
~�u�4Ʌ�8=�
[�4� ��^��
w�"b��j��]�Q=�Pd���P˩bK�G#�Â�ͱ1�W5˥�i��%i

R��p��+)FȍG�]c����Al�C)�� �
��"�/�
�ˢ�>/n�Ʃ
�>$��p��_
n��
��2g�4L)���k>��_�������!%pa]7�Drj�'�.�(�i/�VHRd�z
;�E�#Ǐ;��މC�f�I�5Rѹ&n{���h�&�x�1‹M|��Jkμ8X?9�N1���?|�#�ZB�1��T��"M��	��p�R\���C�����‹R�(����NO�}C
+.Z�A��=
bkĉ0��b!���
4������r!�
�c��	n,��`����W2*�KZ_����~�|��tqH�b�̷�$=��yxhm��~r��j2��N���f�,�5��8'����m��KݑwƵP�1��JS�X��3kT�e�๔_��^ƨ��C��!�L�C�غkS4����+|�!����p!�=���kb
���]�+M�O܏�"�ݺ��%����e*�ت��҉��
�9CK�ͧLi��
+���O�4	�F�J�(��z�>k}��8�*twn�a�>��j��a��K�!M�����
�ׯP�00�[OT�WNf'�1�<��};s��m���WTp��7S*~S3��&5)�H�N.ǹ��kqV��[�ֲO�M#�a�&�"&=*j�p������|Ջ�*�i|�BO���,�
>.1Zo���d�L���U��1a�V����ٮ#���E�aA����N;�M�n�5	/~����
p��[��ޒ/�[�_
�����×1�a���ƺ��v�<j
+��y/�!��O�9�X�I�fU35Ǔi��n^N�}��kc#k�A~
2䷒Vӝ�.�`�Q�
l��
J���
x�2!-�f�@X[|o�^���
+
�8�������Wo�"�G�߰�}�u�5;~��D��ڠ���_��՚vk��I
?#��}�)?K�>|�
�T�
'��� ��UT>9(u����0W
�ڟ����^.�
9�|!�9^���H�
�}RGv@���F��ˆ�a	��!Ā
E���6�E�����
"�ԩ
�rz�,�ZP�(�[DZ\��c4���"9��y20蝹X!�8а^
+�� -se"�53
dE�.L���(<r�L��s��vtnq*�ȳ���[�O��hذ	��d.�31&���r��
+���M�
k΂Ոʽ�`\���\-�[���d/끃B�Ϲv�n����@��m+u:r�M�*NY)��@��}쌈��P��K����
+����H�w�3P�Zd0��(ܺ`6�=��Q�,w��93#��q#�/����E����,�*��J�+��
�ݕ���+�o��.F���R��p�j���ۢ��(�S(�0����ifTf�����uR��-�*F%焘c#.9�m�͞�^�Xw�<��@�7&�V����{�P������5#�ԝH��f����/�������Sz{�e$S��p�09��„��:Ò2�A��]���%5>Z`�"$¾Υ�5�ϟ�9"5y�<�.���jH�=^�}AL'a�iOt�B֧�2��Ё�ԘjtH�Q�wp���gC�KG®猉-��$���n�eQ�6�Ż?���
+��A]W�n�z�u�C��zY��4��`��
�
vrD���wH�{Ee�i�3&�L�_��rW�(��^��
.�u�N>���
,yi�� ��#|l�_�7<gE`��xdk%��P��SZ��ƃer���rl����ŏ��B�*��e�S^��}(t6��-%Z��Ųzn�o�8�^�Mv�b�v:<3�$wgG
+:�&�˾��;0{���X5�z�&��p_��
z.yU�;uB��9[5W�[�l!�m�RL4;���U֬�i���!���h�+��[P��^� �V\jt
���ߓz�A:�f!c���P��$%�LG[x���ܢ���~�U~p�*R��
+�RM��8��V�9u^�+�f鲐��#CZ
�lzp�m��M���ݛq-}g=/�Їr,65o����/�Lv��ͣ��Qm�?=����̫��~�M��˝��u�\����vۤ�ѤAQ��6
+�E�ٚ'�++Y&���*�zP��5Oy�����|���2Vi^��^�
�W⟣}r
+�H�Vs�wa�f�r%1y�\]�|�[g�9S%��$|>��<v�9:؏E̎���>.w���|�$�/oU_�G=�4f�����l��9sޫ�l�ճ��=K��v󉔏1�
�����;�91NAP���'��%s�Xud�)�1=��gU���t@چ��#3��&/�����<,���f#ʦc3 XK�O�|`A
[o1hk���9[t�w�&ke��i� ��b�5P�p������s�\����#E<X]7���t����㓛�Z�b=�׸t�yf�
+endstream
+endobj
+2761 0 obj <<
+/Type /FontDescriptor
+/FontName /UMVNQO+CMEX10
+/Flags 4
+/FontBBox [-24 -2960 1454 772]
+/Ascent 40
+/CapHeight 0
+/Descent -600
+/ItalicAngle 0
+/StemV 47
+/XHeight 431
+/CharSet (/braceleftBig/bracerightBig/bracketleftbt/bracketleftex/bracketlefttp/bracketrightbt/bracketrightex/bracketrighttp/parenleftBig/parenrightBig/radicalBig/radicalbig/radicalbigg/summationdisplay/summationtext)
+/FontFile 2760 0 R
+>> endobj
+2762 0 obj <<
+/Length1 1643
+/Length2 12255
+/Length3 0
+/Length 13197     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eT
���n
��!��;���ww� ����Cpww����ݛ�ݯ�/�몮z��>gH	�i
m
�Dl�
ih8����
�������F��f6�B��F� V���%��	@�������K
+��u�731u�
R����2�7�[��
M��>j �-�6 at 3#G7Z���%@�
 ##{g#CZX���``dbf
K��&qkc �-:��O�����C��_2) "
m�-� �Fưt26݌>�������E�,-e��)�/��O\�����3l�l�
���6�F�����j�_⤍
͜��3*�oi�6�4�00��3�׺���������#�`�o�`�u#k��T��߿tЉH+}�Q����WPN���Q���@�'�_��?L�7sh����3|$~|���4���Y� YX����n���X 

 3kC#W���b:ZkǏ-�g� �6����++
�N���"6 �࿉��c�?� ��CL :�?�
���C5%�+�N�}t��C� :�?����7�t��C���#�N�}�S�C
T�MW�N���q���-mM��p|(0���k`��W�C�����XY�U��C����������F�C�������5ß��F�kχ
���k�?���-��#���������!��/�hl�~
��_����/�0�����1������_
?��4rp���G=K�����_e>�����M��~�a���\[}{G3}KC3�?ó|H��x [...]
#
�?���ˢ��_�@'{{#k�=��������ed�j�]��r�'��x
�O���p��Z0�
X��E{�ƅ�۾aB��
+%�ܬ9�T���Иe�^�s�C�.pe �"7M�
x��6��ߍd���H�c�@u�D|���Y)u����}Q2?�z�m�3���bH�����"�h�r�
3�t"j�o�X8���v����ݽ:m�����-
>���CO�j�9ːnA����!��	����JN* ��0U���QR�
z{��c�0~Z��+ILU\��g.*�גG�Ԩ�[�Ê׺+x�J�բj��'���!�TA���$�F��y��=
��
�A�L��=�ϙ��b�
r&d�P]�4~�Q�Ol
�?��j�oӳ�A��1�>W
B��{��h��C-�A��q NK��C�ך{3�⨷#<�QGDPsM�Ui�j���3_�,B{�QD$���fa�!/�.
d�
%�i�b״k̉i�'*��#^)'k��
��D��@�i+�7�?�E���x�d���${Y��&Y���'�|�Ei�dI���%L�O��
�
϶��>�l�@%���-%E?��p٥#r��s�
��:_kG����Nţ�3c��.
����4o�BA�G����<3^�.,'���6���{��{�݂�
�p������ա
3�m��'b
��
ؕ���P��U��wG���U�
�W�v4
H,�����!|�fa���EG���e�V�Z��*��ZZ��aG��@��Fe���~�M/V��e�
$��̂�^(Y˽T�X���%�=�]�Y��,U���
��n#��?�$�rt1r�#���0��3�1%D1UN9ˁ+]�ĝ%���2ql�H���譸�s@���S�ͥE��Υ��+�c3���s��j
����6�!1����
E����SW U>S}N���\�ꗑ��Jk򡵈j�Qѡo*v$���_s�ɳ�ZaP#tp0χ�E/4��V
+�Ö�%WW�
`���W��j��/7 0�(Wzs{<�x�6��h�f2&
�M P��Y(�a��)[Q�!/�:V�۽��huق}QT�5�M�><X�<�vk
k&����o5�ÿ��ř���*���i�
��U%m!���W�����1�)kӾ

� 1&�
��@�����7��b��*9;r�>B���^��v\6�kA;�Y|O��S��u
��ՠx	8�N���9�}�s�r!Hs_oki�c�M^A��?НѰU
�p�+>���
�^#�\�ژ�

��Ձzo������NQ	��
���u��T��K� �a)A�e:>�ŝ�A�N�L���#]�Ik��Z
��Z�U���j�~p�o��KT$�4�+`dİ��M�.U������Υ�m
d�j1� �;�!�!V���M?J�d�OB�B�c�\,p�h��ohz����J�XY+Ϧ&�0�?
ض�6�3���Y�N5�c\���4�]�~e9��6/LOd��
��q`,v��;$͘��Cۢ2���`0Hѱ�7��b&g�jt
�� f@$_�����{�����1�޵�XP�X��]��*%��ȑ�@�,���.�v]��Y����/�Z�e���p���ğz��2��vX
+h������d+����J�k��|=zAthj⍒���͌�(��p��tU��y�S2
�����q�'��E
��x�J��W=
H���ɋ{0j=���bp*���!�3�/�tlw�I����5�@
Oh(�'��	X��G��&��kdž�H�⚦|<OD�mů�T�=�nG��wtAR��D7F�Yz��ˠvjPp�
�U���6���üy
H�:M���7b�ʵ��'*���H���s�2ng�Ǧ�@Tĭ�
+ۗ	�l��%���~����� �<
D����۽�M��c��,%��j6WYH�~�e�&S�X��$�2EB{�xa�E	0"��'��k�n���x�RS6qB@�
+L����P\�W

A݊pH���/mnNѲ�7�=�N��Hw
+��1��%����P�
�c��L] ����ޙ��]�
�����74�P�c�_�ͩ�ۆ���`��?
Z��)�&$�>�*f�MJꝰʖ�+
+�0w(*WVʹ� ���|��WQ7�|u��S��g�3���p�~��˽��=ylk�=�,L��O���0!�-�$����ϽZr�M�B���I��
���g����9�h=�
;|��,�@�}��pd�"�\�A
�7�- �i5g$�r�{��ISs�����eiYB~�ST5a� ���\�۴�dZr^�QӾ�a�E3^eU�*��̯����>P1O lj����
�Pt����&IY���|d#X�'�s�%��m��'��8
+��XFgb\�D6�$�D��8kľ��ל�O�3\��yMeiHo��k˞����
�H�#觩�<�i��4�AB�B���B�]
+`
�
eְ� ��G��,Vky��[d�I=滿��)ޞ�\�1=l�%A�=�S5�^u�W�x�[���m u��D�lV�]Fv�u���"L)�� ����o
�:��i�nV�>ә<2����o��
+����b����xP���ܰ�
 
����z����>-T�4��.����oR��m�’YC��
��5+
+��8��N
/���7��QF������aB��A���5�A���]�UL��U
����d3����<����~����ECb[ �#gSvP,���J�����	��cޕ��SÃ9,������J"�jb�*e
M
�y~�Ԥ�1pb�J�X��V�_�t��т�c�
YI]�K������
�s�Okt��
�񍿁.�����+b����Q�q{n�2�
+���#j
%�Ey��)�ab"W&�1ꐐs*H�$�rǕ'�����Ω*��K����׉U��+8�LEд�3��C[,��2
V�
Œ��
J�d�Ҭ�+ǔ4�>�O��˳.u�[{���xvL��Y���4:$:�J��
;+{?�����2�
+׹������g��2��_��zEѧ4�AZf�H
 w�mc�>�	e.ڶɦZX�rS��Mg��3E�3�� ʨ��E�G}������T:��!�G��7��E\#0_�	اSx;&�k4�0�u<͌�E�g$�v�x��awC6e�{�^��s�[k�?�ٱ��
�
���&2sC7��a�3҆�0�2e���r
�mT���g�V5��.xњ
��m��EKM?͘G��W�6��v��s^>7O(�S��¸�F�i�����'�k�O�M�Ϻ4��6#�@�g�Y�t�)
+!M&�U����
ٙ�ڬ�z�A��1��I������-�	-` Q�2�u
�P�:�"Ֆg�	UPғ�:M8X���Zj^m�ޯ����&b̶�{��3�r�|��w����u	`ί�R�P[��ҞgJ
�+���5���C�-Y}��+���Z��ߐ4��}~�p�B���7�@
�$�*z��W鮅�/V�6MT�z��6h$�cB
E U�ڙ��
�	W1�Ny��$[��m�
��w��
�Ib�x�	�q;Բs�ҜUT�HCh[�R��й���9�lbq�W^Ȯ
*+��yt
9fٸF�,�����V^�]��a.��3�,s�-0�l�[�ʨ���, {5�(���Q�/��Z���8Cݩ�buF��o�P��_��8������A��Q��.���+ף�l,�$�k�q��ڠJ8���o�fk��.�,��}�.�?���"�CNf�]*E�%
��A��ξB�j/d�ݏ�8�y3�x H+�m{ĺ�r�������P�
+a��}ZFC��W�,
�P�;l���Ph
��K�N4:�Z���h�끪 
+QE7a�E��� Q�&�(�aӀ϶n���SͿ)?�0
$�������z�	�*=�A�!�!.=�B�EY�=/ټg�:��Q��+18@}m���U�"��e�n<�)����
>DjP؊��њ����Q�[��A^��-�\��Ȣ�2ˌ�6K��V|��4 mR�߼�9�8��D;iđ/F�RqFl�y���ǿ6㹔�m�V�K#��P��
�k?���}
��1������t�l�
8���(����m���Q��w3�uFP�2�p���7��[�o�x�HG ��n�H]��
+�v�Ys�x�O�_�M��#&���/�#�,�d_8�4y#5���~��hR� 6،k��x=���ܷ�!5.
��
(
6 " �fꌖ��^�Z��ya9/,[z���
+�!̖T���Omi����?��Su�T�a��y�%�����M�u�R��^�� ��0?�tD
+	�k#Kǧ�z����}� z]=�.�����N,��rH_?n&�l��
+~�~�z�x\�,�˟L>V��
+���� �#�$`Sk
̪�k��O�^sW[�Ф7��6
����y������qz���� ���F?�q����a)R��M*�d����h՗�̞.F_��
��j��
�ȣ�S0�>-	qn���u at x��� ܩL��G��BosT/���"-�U�~i��W��"�����ip
r�zL�)jk��y=�?�����ܺ����t�
H:ݴ��Z�ʑ�����Ќ����t�z���
�����Eo���c�unq�L{Z��S$�C��xH� k�
N�X�_�s���\Y�-���@��h�49F/�B��^�B�w�q�{B0G9��gt ]�
6`�}mv��A�<bV�k]$h�ԙh<�a���;l{��p�*3�F����R4&���J�
�����\-dI�����ȹ|�{A�]>e2f�'*��O\�9|s<`�}�����	�[���R���C��~
�s�ѯ�
% �R	F�}�+��m�AQz�b��Cӑ^�H��搮�
<�	Zr�ӣP�!�K�+�^�]�8'0b0�
(FA��J�H����29c�!��5G`��j�
*dk�n���y���
}�:��Z|Q�1��+����9W�&&@���s3'�̓$���}ȩØ��"��e"j��G��2��
��
/��5�!�5i��c��.��\\�s>�	A
�H��&�ac��c�lՐ��s��.�^��
+\�Q�O�D-<���RrUU}z�cܠ�p�GD��*�������h1�*TnKz�U:L0�~s��
o���<jD44W'�-G뵩H�؀m��I��8V��ƿ�p+����qz+X���~���.\��&a��3�����Xާ��=7�����_�Y�
����@���І���
+��z�t�#�{�b��S�E��R��Ux��:�PN��/�̌5�ti������G2���Nð���u��N•ڰ�������dU�
<���,�Lr��N��I��
�k���
$=@Ҁ�)
�?^�Z�_��ň
.�<E6=:��x���*�'�������oW�Na�
e���$�lu-Y
���Kږxh��=��p�RG�l7�;[F%�v?'��O��j�/��-I�y������ތ�o;w�3�Ab<#!=i� 
�ΪZ!a����3�(� ���[a���d*���z�2�
<�/~�K@��U���I�Y��
��VR�Mط�}�
M�|·cP��1�������n�(��v�*�Qx������H�z���_��	��DT���#j)K�H�
#D�~

-o��h��т�yḿ�k�ĸS9bJ�O/� 
�E���܉׍���u�k��s�}'��:	#?Gz|�ʗ�P���,�O
W.��
�7qB�%®*I~V�qA������
�޿Mt�"F�E9����J�
�CD}�܏7@�?�U\�F�we� �\%���� ѡ��aMiN����?t ˸�=�
+��A�~�4/U�}aq�+��]�O�7+���XL+�/2?��̀��b�ϵ�E���,2	-;igEM�8-'��S���I�!W���
��̥C*#���]ޠ������f���)��-=�ԕ�Y|����]��=!�ns��=�cG)&�9w�*r+�{+�a���7�&1{����|��Q[ٹ�^�1�/��׈�����F+�.H�mCL	0L��1��M�ǩ�_󉔨ݘth����_6��s�߭3w蓱ԭ]
JZ�pP�(k�1
bv�
d+i���,K]�A�9��uS�CA�]F��=��m��p
�0,�}<z��|�a�c[נ4�en�T�q/J$5j�}+ŗ���aBF��n�/��4�u� ��<�/�g��+
+���R�kS9i���
}\�
�
��9��cIR��y��jP����� �����Iv��(��
��
Ӻ�9'
J��
+T�
�������@أSk��}7�7(�}jQm��r��rYP��� ��ݤ��������p��9�y��}~mW
�Q��H�Q,\D֦#��[ˤ�G�x��t�!1
u�I��œ$�;�E��pd�u�P����s�J�
z��+�gI.t\)��E�MI��4��%C�R�ejU��l�Ӡ++�o2I�i���B��=�p˃*����VTPSY��#�˞]��D�T
��(p�Tv_;M>�\BR�4z9O�fv��(
+��O�V:�4��'�0�L�.،yz
���y�e�dѾ��+�J�r�I`%�t6I.Q#k}
�J>�Ϛ��/�����8�\�n���m=
�U+i����OK��\��	�{��KkI=R���ǒ���EM�<�����
���	�=���9߇�z����x!��
).�ewi�x��I����0�I�CIqMͭ�ʏ�
lݞS��w���C�
+"(�`~���
}��\�P�"�������߿��6N��g�/�Iv��0-��)���G�go9��us%ȟ���o��/�X�[��s�
qp��/%&i��o�����YL-)��P*�
��˅܃�3I�������Ybvf~�r�U��:2��vO����8G.��Z@�O�2�WCs����¾���6
W�t/�I�m]\�o��ī$���8ٳ3�Q����uA���\�s�'�2a�8� �vB�
�����O��������`��5�TP�"���$^2���@�~��
�(8�"~�KCj\��o�Xb����!�z
��@l^$� )�v=m,R+�B����=x
ޘe����ԅ��5
WA3�ʳ�0C/���HdA�k7�2�,�l��dz���/��b���λk[�6=C��h��,�

+<�Sh�e��� Ϧ{��$��e�����3nPE
+޹�*x]L�bx�7��k�[Y/�ѭФ�^u�u�v
D��\�`�<FG6�}��:/��k�=/�>f
+�W�,P��I��`>g.��l\����s�����zR{�J�֛�
oP��8�+��7�?��k�-:t�6�w��%�o[��/�crei����
�aD��Pj9=�+No��`����,���s:
�%0,
0������^i�`�����.��*���Ut�`z��H�
~x�m
T}=���%B��!|����[���`��FA�z&5'm_
}d-���
������_k��}��� ^�캣[�KTu銲�k��]kDs�
+j�z��3(s ��
�f.;"�|P-2Q<#G!4Ҩ�Ӎtv�xoz�޵�d'
\�Q�;��2�L�>I�������S�&���q��k^�ZV��N�0K�Z��_n�X4, at a={����|�=o%�N�
�{�I�iן��	Hj\�����l�R�� �;�kF���
3��C�4�p�Fc_�j��0:A��~�X��]v"���X
+�3n&�*c����΍7�}�~�H�	�M�g���/Ziq�
�eK�U��M��<����������u~�7
+l�>

,�5Q
��� u[�@ȐOx�NXl�ws
K���u�:t�M�HѭQ$�;Y�a.V�����QO�R�
�|[:Ր��1�U8za������h�[e���; �Ʉ�#u�,`���
�!����d�D�A�_�� <� �і��q8�ܢ�6���+G�[33+�kcVx<`�M�	��6�|O��C6��8]����U�r�c�j����I717�6��٦��0����6�Π���.y���vib6����4k��)�Q�����{)��l��ۡ�Z���3l��%-�p%p�ʀ�b(Uu|l��K��<7s
M�V
Ba
��bA;�i�
ϴ�n�``�E4�&m��e#��fF`��.س��
�_�(E d�$�_'b

��m�D�`}c
d�^�w���"��ٍ��T� ��}ƛ%$72�ud�����+�
+�u����L6^��T ����OPW\0��,�{
��b�
A�[
W���(�i_;�
b�]L��]�`a#k�M�^�֥�����
:��/]0Ry�
b08�p��9����^I��S�7B�qs�6G�֟L��_��B��^
l'��S��D�����sw�5�ʥ���d'�
��#��0�zo
�.����#ֽ�u����yyUO�+6�@w�-Yr���A>��n_���7�~!5�$
�q�/	����uG�j<?���iN�4w�D	�-R(��K�5���d�')ww5���R7�����Ws�f�	N��@���l�@>��}�Nܠ��ySYWB�g���N�C����a����V��� Wu����q�\Y�
+�o���Ȯw2�3�KU���f�݄]���
��
��h57��2�	2�0B��:1���SST�����}�u
d�=�*�pXi�Bi^2}�
*rA�?������9DMW�ɲH�L�e�
(4.뚐y�V}$%�3���6���@���uR&�zL�AQ�k�*
t�lo��ܻ)[�^W���;eJ�HލRb
LL�X
|�����j�,�F�oCȃ���2u���W��7/�^���UƧ
D�x>iF���؍��)B2Q��Ɓ�,�#o�H6)*��G����~j�1�5�bm+��q��4b��'���3��'AE�t�c�/�
9�y�`�}���0�9 at w
�@?B%��|�
]�!�X�5?:U�{��Q+a� �YK%�9�Љ ��2ql%�A���&�,Ҹ�����ў�gi	�lƛ��f98O��¹ ��~
�];����Q��㫚
YsV�w�`q��"
�G�����閐ta;�_��}Ա���
+jQ�����K�L��
cC��#&�'6iddl��*A�89�$]/��)
�
b�f��wd5���J��SV�
:`T�������X�N��Ku�|�&	�ۛ��y���o3B1lå�O_�^�+
a����>Xޚ�'�%
+_w�U�,�?��"d'�o'���V鞣��8��Nj�+�O4���!	U�jU3��\�Rn
+D��qx�~{��}��ڇ����?Q�芎�ǟ�{C�}&����@&<��ng�DG8*^���q�w�ki�T�w�������s�AL�m���w�f���!K���ĨH��ڜ���;o�
xZ����Y׋�L�)OAL���1qA_/�z�E��s��q{p�SFI��Ń��GEIV�<��͔зxjHNe_�2:����I�x
L�Xk���6௡
�G��o�j���I���H��i
@��DTt�9�פ���D�Q�:Uఈ(-8ʻD?���=�&��_
]�̐�3	9�R�d�i!�
�$@�Q�$�K��+��`�P�R��^<4��g��6��?���7=�YtlCeg���(�/�b��^bA�Ys��v׽	��'m��6;-��,�=���D�^]M�_�]t>�g���/�f,9�ܤ��y�+ʨ��
�=d��߁�׵z�e�
J�&
����
�ٸ��3%��GQ�FL�
�:�Dֆ�G��c��=}U.9�7v��P��uj�|B��
�ӗs�gX�V
�)�p�qt��V[�p���{Gz��Y��d�MY�˲�ˡo
!�c��z�gL��V��!�I
�|�1	�/�Q���`z��}�6��1�ˆ!B�;W1�|�&���=U��}�4�����L5�ܜ���q��bƕ�QQ�!we�M"�4b>�"��>E'Q�>�+�t�	q�r�\i�E�
<_Q.���ś�e���a�~4��B(Ƹ4 )0��J~�;��<�
��� �S���2F�+�v
Aт� :��ڬ2<��'н]��S}^Yش�
+=1������D�S�l
�pi�b�{�э�|��
%�����0�M��eL�|H�-����i�"�
{w/5�ב��m��<ɗ�I���r���v��0AD�W>!�wz�JRب�=�o��DӍ�-�,
j�a��Yr�P`��	��!����H*���bt��¸�CЬ�5�=�O���֙���K@/�l��G�U	$�X\{�`��[y|�f�R)�E�wy�W��&=Ⴭ��D�N�]�8{a�o����	ң@�Ȏ[b�
�y
+�EP��ڟYs��1*���&,��
+	�aeOP��`W�َ�gcwD6Q8�~��+8�����)9�2h�&���.
v�m��|��kn�b�	�����Gӻ���2��Bݣ������_d�"[�=�e�Y��
+��r�l��/���>_��D�_'
%�9z�}�o���b���>�^;b>�h=cRP����h�F��xn漵��+K^���rt-P�d�z2I�ܣצ���2h�c���T��lO�Z(������<6�GU(��)=��X��DC�Ms�Lj�t�
���i�{�©D�j�!
��q� �#x��D1�¨W�弌:f5�4���� �_�
)2K��@��4ѐ{/�pts��1��3_V�$xUž�1�3>�r>�����ЛHO
op�wVF-�3�
����(ImA~e��"���lx�y�9+���쪦��NC�^j��.�6����Ȗ��R�ǚ�Mt:M���L�+6َ�Ê�S�VC/{��vs���2d:,~ZG`&kQ���)���7G�����<R��
ٷ�X�[�l�v�0t&�^�
+�� h�Z(R��!��=�we��;�tEl��y�	���X|��Q�Qș'L���
�&Uu9��{֐E�,[�E�z�Z�4��u5i,L���A�3�ݍ�F�+,'eR�XloU�Ml)Pl&^��}&�D�|��L$2�쬢YP��-?��'�9u�P�O|1K���a�TT��_%eӖF�����
�w{R����gz�S�0�v�b�M���k�J���Mɷ;Kz�B��������]K
_�RW6�_�e.�����ܙ�B��BV�R�or��u��Ke_{:/M��8A��$Q��yP
�^Kа�
d�b�m��
+ŽW׷���|jm��L���`%�M
�2̔�������IɄ	5N��m�k~!g��cƖ����h�._����~���
�����)Ųg �wz�8RK�:r�:��lԳ5Dv��qx΋���^�V6���c�ׯ��Q�uhr
��P�n��w������,&h3����Yb��
+�kčJ?G�WGJH���h9�-p�Ԭљ���9M=�[V� ܁"����)Ή�M
��Hn
.T9�M����6f�d�����Y�'��?[>����r��0G��p��
�ho.�Z��̳6�f�N

�<F2�	!.f��
+9��
+��0�tIF���>P|��#�c0���'x��;Rqa5oEM��\uƜ.7�SM����胡�
,���?��	w�2%���)RҒ��z�^��]�O
�)�������d�3�3;�
+
+��I���H�G
� a�7rɶ��͋�i?=zc�KN
E)�"�
���P�)���
P!~0��H
y���
��}��� 
��AAU;͓�A���!F���3<��eW$��ڮIih�DY�
+�#���^�&p%؈����5��g�Q��55
�w�r��L9�s�����o�	�re����[�
+���^��W+
�f(��R/]`x��/O:�:DD̈́o^�
+	�t7� iظ����sE`$�`������bW��O��g��:\��6~�z���c��� �;��Twc�}�&F�;��y�C5R��/7%���SYK]�:N@�
b���
H8r��Z�
T�
�R{�
3r$
h�j��"�L��N�D| ��{�X�I,
��[�g��L7�#�LT��k�	�㯵��
+;��u��:۴J���F
+��P9����? �y�m�&��ϰ�V���-,dF
��DFS�vI���{�%X��m����
}��5V?]�97�?I�d+�� ��T�h�%yr�-ߝL�i=��
�L7	���Q�'���m�i_�V�<�H{oc���avR
+���V�5�����:��DZ�b;U+p�~�����W
��b���hV�k�m\��R��hOS�Zu�Lg
T_����벽�z��u�\4�y-�x��kdu#��_C�^{y��d�?
+endstream
+endobj
+2763 0 obj <<
+/Type /FontDescriptor
+/FontName /FMTBNW+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/A/C/F/G/I/J/K/L/M/N/O/P/Q/R/U/W/a/alpha/b/beta/c/comma/d/delta/e/epsilon1/eta/f/g/gamma/greater/h/i/j/k/l/lambda/less/lscript/m/n/nu/partialdiff/period/q/r/rho/s/sigma/slash/t/tau/u/v/w/x/y/z)
+/FontFile 2762 0 R
+>> endobj
+2764 0 obj <<
+/Length1 1136
+/Length2 6611
+/Length3 0
+/Length 7324      
+/Filter /FlateDecode
+>>
+stream
+xڭ�u\�[װiD鎡�����������!�A:��N锔���C���8�|ϣ�y�}3���k�u��}�0h���Z�-!Jp�?/�8@

V�?��Ჰ�# nP8L��
"���;|"� ��?.
@
�셀�ڹ��9�
+�:AP+
 l�fq��ae�Ѕ[A!n^� YGG��_+\:W�b͋����Z�,!�P.�/%�

 �ϰ����< �{) �ߚ
�{Ik8��
`
��j��A�]�/���\���Q����
����p�:z�� ���� í!ؿC
 ���!�Pw�Ϫ�Y8B�da�� �/��?�PW%�'�Z
�fe��pt��=�Y������� *)���q��ؿ�,�07=/g��w������������������d��Z�0+�5f
 	,
/\��T �� �YC<�{a /
�v�p0~ 8����� @����!a P�7� ���$
+ j��D @��$ ����
��M��,� h�_�Ep'����w
+ ��/
+ߗ���=�o���jv�����
���{�?�����p�����a ? ��e��@A �����C������>�3�:Z��������{�����.���=}� < �������?¬������>��m��W�X��N��$B�S�J���J19\iҊB��C��$xw�$�&��z�c�PB{���j�@k�7�Y�~]`�
a?>	G�;]��]��hY}]��2#7g�ל��N�=�1+շ�Er)Da�LOݜ�;
��K�fZO�5�jQO�<�Z��r����- 7}wJ|;Kٵ8ᰀ�&�F��[&ȟbϨ�Vk/��H�-�I}�X�b��QzQ�P�^�gр�����S�9�����2
+Հ>����
2}_����Ŗ�\HD�h�~Dh'b��S����W
+��[+"3eBplqa����`
}'�`RLb�FUM��vWx�zy�whHC#�QMx�&�Vy{rV}╂
'ܴ���k۟^���x;K*��)�>>���}�����q�^"w�TxxA�[�,�~ua��݀GOxvw�3*Ŏw^�g�LQ�ձ��Z��Z9[˵������zm�S_��b8ǚ�h���/���l.$+��ʳ��yB��
��s|��U������,5
�S�yc�$�!i٪��Mf9��z4r��rB��P}��<wS���+f�	��[d_���?r��Ù�G�
�sDt
+�po�kd�H�Gl���1�e�#kߨ�泣�鉅1��z�l�f+�g�[Z�'M��`��d���iF�:��y-�t�J�T�̾"u��;i	ȥ������R�;���xmh.#��8���g��'x�
��
�2S��
>��	O�R���"�
�8x����+���k�Y�t�1�iK�[v�ꈔ�B�5�]tNO	UCN�SeR�����O���E�hw:H
+~���V�Ԧ��^2�piӮ�]o >
��)��w>>�
B����P|�:���΂�k�5m���h���)ًGh�k�ܭ-s�zr
~SǸ�I�����K
�`����#�p�y��~�yn3qҴ(���?
���l�+E���bLoؤ�j:TC�+Ҽ_����<�[b����-��%|U�W���s���
�t��ð�y_>�;>�\�6��G�ø�
��Q�k?
��e���w]�(���j4�p����k},�i�����A_�d�r�̎e�ɏ]�9�/�G���j
!1�c�_�
+?'�}^;*Y��|2S��T��:�C/��.��
8��(������c	���o
OXN�D�d	]�4t4��?:��� ��
{h��'�J�"�L�����i/
A6
[Yu���ϙ 
y��r+נNI)W|��;�Qr�J[7����K�}
_Ȯ
+Xp�?�K1�M��
|�T�� ���>NY�m)�\	!b
�}�zs���$�f�E¼1��r����J�x��q6����!r83���d�+��5��;[�mw��￞;���7�?e�2��Y	o( �u��H;Sݝ�S��	?�wN��T����r�W	;g;�������d
+<Is���S�]bR��lUk3�0 {���Y�y�qXu�P����%*Ɂ3�3���@:=L+���eɸ��N����ǯf�R�͆'Xړ��z�7��
�H��"!�D� >�
D%���������m3G�\��Čv���#a�(\��&'	{���j�2��h�F�a�-=���`������(�&)�d�X����
2ɴ���
	:��yҾ.[�Ͷ�1",r��2"
�r,��3�M�1�`?o�	[��$ -L�$Zp
��$�Qxc�����'�m��-|k�v�`�q&�ĝ>TX�T�E�Psqq�{Uh�_j��v)��4$F6�
��	���?���
vx�DӲ��*@~�:�yFVC&"��4������vH<��ڕ�^�1����y
,��p4qH������3�5'� X�Ư��q1W0�g���&�;�����A�H�@2w�f�cTA�Ȧ+�ү���I޴��.���
��$~uH�*_�����Et�)�Yi��bi�C�I��BfW��A0{�����T'��c�oY)E�s�h9��=3�]3D���J��9o��GIk����}l9\yL��/YT���V��K��+,�y^��F�`U]�&�84��:�N�;���m݇sb���� [...]
+J'������7��Z]��
�
-�����
]P��T�A�0#U#��	.�Ṫ '��*1%��ҴՔ����z�3�t۷dɪ�ţU���vu`�&��`�0F��@���	�h�G��թ~�5�
�.�(�;��x��u7�	��
E%�����]u��l
��*<̽%�D��A��7��
'W��G:�"���Q���Η6��w^�mu�`-�H[M$]�������L��Gʤ���\�F{0R!�.�!�:���
��n���ƞ�4�ʈX
�W�
bB���JF��7��'/|+Z�ݨ�$�{��ߵc�r�;�*��3[���c�
i��M����
+�%�G��|
�� ���;�>V4�4��-_���\�k��\�Ɖl�IS��Ō4���p�d��6�f��lb�8��[�
*c�`�\k���F��>!�V�l�S�X���.�DdIzT������~��c�'fB2���^Mn���Q<�]���$���q<��1v���͞�ueR�J)	�8H��寂��4���d��r�}
�W�8�U��t��_�n�|��/_�D46���v��0�n�t5��z
��1�ֲ=i��
�A)�7����[��5�<y\F��r��K.G� 5~v^�.�D+j�4����d��f P¥�u3o�T7U�V}[�w�������\�܀tR��t~��!�}�
���N����A N����'ws?%c�P����F���iD{����j,f�+
ĕ�N)
��.5E��C-��%
�j0��@�H\��C���{C�in}�]�W�λ�o��H$�x��"�^څ1�F��2J�v��n�ڇ���[%!�I��g���N�d�S�j)c�
�� d��d֝t���X�
��JV&Zk�	�qm��g)P�|Z8�!E��6��Iњ��d��@�C�W���K!�D�[)�O�H|���o����``���ͱ��ɔ+e�ׯ4Xe���q���
Te�k��\��*x5N�E����8�
�M|l^)�GD1�ұvgZ|Mkh��߆�:���e
+F]��
�H��Qd�or"hr[��S��A�0W5�E}J�5M��%��{T6�~�x)~��3DUP�_��ߓ���-�C�,�je'�V[��>7�⢱#m F�<�"�;�԰��NNL�-I�������-�Ƅ��=��H
�i��H�s���}.�M�9i��ܖG�.
+�##P�^"a�]�,�^l���c[�d�*GԪ�'4�l�r�r�M���
g�N
A?(ER���;�i:m�����5kO*������w�՜
9�@6��OA
̠�A-�
B�)�aS�`o8���ݽdx���n3�����L��D7'
�a��4ӌ���+ʘ��������Z�Rj�x���Һ~��k�(q�8
o_|:���=�2�VsvHӲ�������zw�b[5��6����
�ɉ�
�eӗ;��_ �⮅��`W<��G��/{\n�`Wt*%Ԓ�~�
YO�;�FԌ1ݝ�`��loiq�L�N_Ӑ��
�\(,�z��@хZ��?�6��(1�Ǎm;Ǣ릝(ͺ�����Ikv��C
&�-a�ڄ�n�
�%.���'�7��K����ِ}�a�#��7G��H\�m��e�r��#���OBdݍe�;��w� q�j���G7+
+}G�
W#$_B	�
�	P_3��&3F���<}>�׽;�ڇ
+�
���>
����o�����i2"v^
���]!ĥ�E�vS���L�m�Ж��г	$
bw�`��{���is�*$=��}RK_��h�<}8�2T��|��.fA��y��� �_���;��v��	Zn�
{g�@���d�1�?Ȝ���;�`!���h����EWC��%bSo�5(�1e�31��N��*�Xz6�U�
�T�r�
<�I�ob+\�u-M	rZ�J�d� ����<����Km�_���O�`�,�r�(��B�Y�txv�[���ڗB��f�ͭ��:,��c=/�_�,O�0
��j�,5���Bwxu�F�|09�ʇ�����E�4~q/p��%���}�~�M�/~�����NW6�1��S)�t*1���I񳓥8�Ž$ոXT5���ȯA�8v)�c��4�@˗B�w-������L�g�2��آ����Ǭ�Ϫbd�W���y�
�zg�9��
Y.�~��,9�
�K��!�
���B
p��;K��4\�į'��7L*aKt�= nj�n���sK!��2��
[�����Y3�%� [...]
+ڔ� v�
�{1ߵ��~�$��S���
���͌lfO;i��-q3o�0��#�|&ըP����W;���zz�
�7�@�j6eh!��L�k*l�^��0���F���g?�.�U�4�
d���Br�z f����|)!I��یc?�Z��Ya�N�2�ma�����k��w�m
+�(B	�'A�V6��|!]wd2J
%�?; ��N�}�_�
s����V�
~�Y�gz�)��V-��&F�?`ᐼ�Q]V�,���'��W~�4�K�ɼ�:��Y�6�Y�	R�,���� �ͫ�� �PJiu�����<K؜U��i$�OZ�s|n��ܒ�=�����S��ڬ��=x�y)c
��
+Oۉ��ޝ�Tˌ@�l��P�}m�L�(��JS�
d��l���2Z~����C���9*
+����gݶ&���oUZ!a�E�d��`�
�,�N��7T��^�<v��c�5ɽ�*ᧅ���]1`�8;����s)4x�[�1f%m�Cџw�p�DOY�g�i��f�6�u>���l�}��jR[.i6��x/n��T�@ɥ)�[t��6
c�wY����c-
L��&��R�(�����(� Q!��ܵ&^�.B�V�#�:8��b >�����EpՓ^)A=�3�ri�s�
#*e*�⇼�ϻ
Ɏ�$[�^
_�&�
,��P���H�<��d0
���܌��R$b<��
���?6�
'Oג�UǢ)�t�
�ǎ-Ιc�Lu�EG�i�Z�Ƿ{W`~��	
(~���"�G
�uxjOo:�
<���a�w,�HG
`��@���9s��̋���p�����9�uQ��%�Eh��~�$@3z
�[�
��#RHm��\�r'A�
���U@�
�x�Wg�C�a�&��;'m�[
����3a"
�d�艊���
��|
��V��A6�gk�~�%���Oe�B�NA;O��MH���ǃ��K�����UϺ�2��R9�+�F�T�P�w����3�*���R�Ŋ�ÔZ�t�&�_���U��>��5�$�L�<�;q�����
RJ9�����ȟ*�f��~fs }.�Ő�s6y��%Oi�h���q+��#�N�B~���	;�d
�DXX��s0�;�38X+~/bh����3��,#�sB�~�ز�	y�J!9ݧ�(X}ZS��d/?v.��"@V �԰�$^ ]���w��~Z�Ky ��g��U�<��a��W	(1���T�Z��W�w%nߎC�
@��z�za�a��wN�+�~��l|6ڧ�
+[��)��dEi����%���7+R�Ƀ�9��^���k�DZ	����U���7�$�}��o%e�p�5��� yix)FM#���h�˜l2�A\�z*���ػ1�=�4���=T�{3:k�eb��[�D��Ru����q�@�hrxG�&
5n���*ʘ
�t���h�q��{Q�i�Ӵ��s}
+v9/���b�$3�"�[�܉_̘���K�z�q�+��[��3F��؄@-��媃��^�}P7:�'�0b�
fน�a���gc�>�h88:LM�,���$S����GYV��q<�$7b�[/$��ţ�]&w��i(ȝ���#�2,��ݳ�%��K��
Fх�#�1�i@����8

K���]sY=��*���vȔ���S3=
+����Unz�����s�g�
�
1��Ċ�'9O~�no�(ہ�+ϓ���
O\A���A襥�=�ϡ�K�
SU����E��z
$(�h�O����m�'fQO�
+�^� ۯyB���j�.u�	M�]Q	�`}�>�VD*8s.w���]��S�i��`��$�14A�֪�BX��ҹ����"��
+]S��S�"�o��λ��J��ú�*�9R�u�\Y�[q�G^���(�Ȕq��n`Qƛ���x	�	�\/���
ٗI�ok��k�j"2��I�['
,�ۈꪩ�<�*Շ�E^Ϝ��WPm�!@�L�!�
+C��\��Z}��2�"���Z��-S�eJ�dm�����%)1�ˌ6� SZO�S��r
��,���B,��5�\/��Xyp/H����r]]}a��b��^��	ȡ[�
�nW��D�h�z��'��{DJd�l�{�쨁�
+J)܉����%�\�����������=֧�|���H�Xe~Og�p�z�����_e�0@@O_��_
��|��>�g�K�L�$n�g�9Z����<��q��h��d����㰸TOE��A>�W��2EKϤ�&��G�7٣��rm�KS�}����?��9
+endstream
+endobj
+2765 0 obj <<
+/Type /FontDescriptor
+/FontName /FFAAZK+CMMI7
+/Flags 4
+/FontBBox [0 -250 1171 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 81
+/XHeight 431
+/CharSet (/K/L/M/N/R/T/a/b/c/comma/d/greater/h/i/j/k/l/m/n/o/p/q/r/s/slash/t/u)
+/FontFile 2764 0 R
+>> endobj
+2766 0 obj <<
+/Length1 2195
+/Length2 16112
+/Length3 0
+/Length 17298     
+/Filter /FlateDecode
+>>
+stream
+xڬ�eT\ݲ��Cpw������4ָCp	���n�
��A�������d���7���fͪ{V�\k4%��*����\h�������DT^�������E��R���� �3v1�D����F"an��|�����OI"
+t�tXZ��Ј����M"lg�05�'�7v�2��05�%Q��]<�H�mmIT���L�b�l��fn���Jb0u!11���3�#I��H��o�����.��;9�D���K&-	H���֓����Y�f������\���V�������Y6��z�������܉D
hf�d�]5���M��
�j�W�]�m������$,�6�% 
�fJ S+
c[g�������P��%�YKMGMQ���=�ך�1��E���?Q�q���aPu� 
$�,��
A��M����7��-I�8�H����=�A�"NoV������H03�=���T_
��?
��$a���o�"a�C�$̢���Y�?�
+s[�?˼$���!nf�?��Cl$�R���Y�q�0��!�8�?'��@���H��iQ��(�!��?Ң�@ZT�H��iQ�C -�E���h�!����
+0��;����t��A3�V�&cg���m�l���!�!L��Mm�]l�-\����c�����H����h
���������6VP���be)7�;�;����
�bljjn���V�<�?�@�2�/5�l�t�vf��V�@�AW�o�?q
]AO�?�Aű�� ���������t����ß���]���r��
A���� 
�������/���,��[�������6�}4P����l 1vƦN5��
a����h� ����O9����k���2(������M��X�{~�A�@s�_m����
 �ktA�r�uu�+'���g^@
+
]�.�f&������������?+�mf���u�T�?i9A���� �=�������/NPgЃ�?�A�t����d��OZNPy\�����nP]܁m �p�
AMv�
A���P�n����/���8P$/s���_8""@oF6�B�?��//	/��y��:�z���9��/[ @o9sssS��E�)_�ujKh��x�t4
��ek�Bc�\B��xpےﲎt
ZO����_��v�(OJ\8ƥ-�
�
dx�h�ΐ��w �����2s�	�8�1^��]4�}9�+_�FL�v��O׭�/3��[K"�V=,����T5ͱ<�#l�
5)j}*��:
��~�
+���T����w��f���]e�S�P�(
��}p�V(��RՉ� zN�tPFhm�����%��py�
��N-�WJ.���=CvzC�"���,�	���h�G8����ނN��/[�>(�.��z�:ФH���8:C�Ә^��7Y���~�d�I�ޮB�¾%��]�'k�?E����J�989��r��*8N��1BW�"1�L�[z:JsQ*h�/��j>=���h@(�
!��j������$����X��9�t����ꡎ,�50e�
+��80nn
MtU�u߽�����x'���t:s
�S�`+���m�/�(.43��Z�>�#�8q����|窍5��#
q��`�#e�]�v�/��H:K,~6׼�rE��]"I;-o��BCI�N�����V��u�b+`y-lv��i>L���#���Oy��vl[�IV�v�u���32�"
3������`�{L^�����	/�Ls��8��
'
+.��Չu~�5i~��w�sy
\�
�Y�R���

��6�dg���ks&J��@��M����� ��쵢d�$oS8e�E��
Ή�̩�P�]X��+�	g����'i`�o��=aT��G˾q
lj7��w�&U!�;i�c�;N	G�
�/��@wY�����|̑�o(�����J0$�
G�'=��>���'qʹ�����|?jS
��	�1;
�8�k�g
�
��@Mո�0�l�
+��-J���{WT4�k�ʹ����o�G�I�O7�x
�%��w�$�K	B��M3��B3�v�l^��jg���e#��:C{�
+Y)��*�<��p
f�ͫ�&�į�wLY��YFgO���7��R��y�<DT+��T�W'��6);��2�2+��w��3Ans9(�ϊ����0_��o�6�LV�'Fh"���I�'b��8N
+��R��0���]�7��T����gc��3#���o3Y$�$iKV�
���W����ƺL��d�,�$�j�P�¾�w���8C���j��4�3��
�]i�R_|#ꠦ� �
�mO{�($�#���4t�E��P�b���' 4��DmiWL� ������Z��3s��0��B#rԅ�"t\��֯��ǣ��;��2�*��UQ���m��
��Jǥ
ҿ�di<矠�x��
�g��|�F��ucv����Z\��b0r
�Ȉ}a�Jڑ��odX,2nvzG�q[k�oP���_��r�h[F�)wpq��տӄ��L���B;<�LZ��F/Jn.c`���ܒ|�b*z�!XJxNȡ��~�R�K%D3�A�2^OaP(�
��-d��!e
a�;���u4���Йx�M
���8�9�)V:��jz-ۛm��WǑ�aX`�[�g)Q��(��<%^W���r�8��#�5'�}
�l��	��Qix�u��]
���1Öp��G�o1�,>��
3�E�e,�g��](t,�Yq�h�����I� �gS��}Ŋ#M����6VKy=�	��Ѷ
D�j?��Z���i��Ԧw�8�
�*,����
��oz0�o����P��
o�8>��g�L�tF��_�)
e�
+^�f1��UPʵB�
}�
<<%����~��,5 �m�.cE��uj@׀��`��.A�:D�eܺ�+�1��nθ��Yۼ���uV�5@|�mcXޫ0�֫�T��
Z�A��}
V�x���9�-m5��
)r
Eģ��β���1�$�,&q��CA
�_���e�y.�rRazB�0� �L�L����,\C��������=����G��������
�
�UO"B�ڝ�&��Ɣ�v7�k/
k
}C�Ŭ�����t�sdB��u��[���F��
����
 D+.;�/�_[y�1��
uA�Ob���ron��&����`hF~�2��5BS���b��^�B�M�}���<j�����h~�ό
��kn�����P���}��?��x`����
2pʭ��c~�Z0$�|
+��F�gbL�������7����ອ
�-��dY��/N��^_̴��e:�rq<��� ܏�]�O
 p�O�%���@�9��
��#�=�wvd7
Sή
��J��r����dݹ�5}��۞�Rw����`���Q%�eh*_P��Hr��1
�0��6(O�- k�B��e��/3�Y��i�yM!��N`	��"c_�6�7�_�oZ�Nd��
Ɛg(�1v'�I37$��:�؄^�I3Ԇ��?N幌o��Ǯ��0�6��i���{r�'���s=�lU�I(�=�t
,�,�����3�mԺ�_'6�A��yH_����@Kjj���pt���ɯ�@}y�
7�3
+�?��!��]D|;ɭ>�o��
�i�0�h�˶e�<#1 �lk�a
��W�&/��U�����
���zm��j$���J�~��'x&2qB���o#Z��eS]N?V��(x�ub�6�5
�C�K��w��=~��u6Zlԕ���L��Qb�W}HHׁ<w��!ϲ̕?�~B�j������)�p��˟�؈9}[����0��|X`C|"��tD�(FCh�*�0tm�kS=x!u)��{|��?Z~ơ����d\�)��yΡ�o�'����VS,�r���)�5���������E��A�q$��7y�%�� �
�C��A�
y<��
+/_1��}
��t�	/5�5�K4#��Vt�+��
9�O�uO�Yha�W��!�Q�B
��T/]/�W5�]I�dn˛���8-��v���[$>���<*�����:k֧�	]�c���$X���
+���`R�m�?.I��g�[��)ᩰ�� 	������ye6w�6��1󧟒]?�`[�P��ʻ�wFy��ʸ�V�}
ֳ���h��?��Գ�?���e��l� 9
�
��C���A����p@�}]��>�x��������ϝ
�7c�S*�fbp���^��ݍ4���<6�
$-j��[e�
+�?~��l9�b8�_�ycH�y���z�;2��4�N��'kx�%7�&�����|6!zԸ�:7�I?v�f�$���:+$a��k'KC��%#�T����l����dɀD�6�/
����BЁNc�JX�K�T.*A�T]�2 at h&M-��q{
x���/�G�)���Ц-���|��
���j�������Fc
�,�Y]nM˖�颵e?�Q5K~W3zk��Q���;@�|���IK�df:e��L��k�e��byyK1�2c�I��C<6u�3R�8�4��.��ᜎ�^��)���io
f�#�ͫU�;�����X��rp�C0�ee��O@�p�ԉq�I�:c
�nP��b��<�^�2U�l�p�]�,*�; �{�zA�:ϟ�VRK8����w�YލG��M��&B�Rb���7'��
+���Γޕ%���k�R��2
폳�Y�Cs|R��4[y)�>n�c�]ߺ������Em01l�8�Ϻ"��`m���O(� JK$����'��u'zE2<\ʇ
`N:��0N<����-��"������H1�
&=.O#
�}u.ᕱ�b���I�v��5�
y��� -,Oԃ�p�
â���|��SDw_˃v�QkB�?�� �x��G׶$�e��
Vˈ���H�t�O���Ib�2(�Z�࿱�+�\��4#�`��*�Ht@�XȬ����j��L����������t�M��\yFe��	�]
�^�m��$�f�Z�0V��|ز�HZ����ةy+�M�F �I��^�M>��Rʕ�8q�<<\��b)��A�?���Ţ��
fV��7��ȷ9�$56�>af��C���
+���'�g���7nz�
��.�He�(yˏ��ط
+�O�S��̸wg�0�4���t��-U��G���Ȫ+��-!f��rׄI���/�97??�x"�r�j7ۂ!�'}j�[5��7P��
+^g'
���?��������rR���+ΕorQ�Tn�����\*�g`sd�PCES�
!7��YׇB���>��l3��r,X�T�	%����D���:ў�R1���ibYڀ d�0u]���n1o
U?��4� �;���ٔ��j�_,�I;H���_�h�+�q��<!��
5������&)Xe{1E�
Ζ�]�N��j�G��KO&A�������iRw�bϙ�*�8BX+��O�P�g�����?��\Z�`��O�6ip��
��TH��Ki��P��]å����!�ת
�hS�Qe� Gkk^��6�!�@�{:<�#���B2�i�%EI׀������K�$��;
��X���t7�E�����f�[^��\^��Uh|�������'V�0j�������g��,^������7(r,SA��6�F����q�9�c ��=����v�;��g ���5�f/2��/HU� �m3d.	xh��5F���*�^�
��R�	=���f�ȡ��>����(f{W����P�x6�[2�����#MqN����I����t��K���|�tֲk���[
�Iz�b��Nh���)�8)��kV`/�R���6�����q�m
Q%ب�
|�Fw�O��vOY}���NB��=�i���r��6Rxuʔ������
3?����n��i^vL����n�^oRL����G�N��B��B.:s�{[�=AXjKu?U"�, at A�^`[�^"(�|;��ٱj8���8z�$T���KC���:����ܛ,�EW���őG�
�zD�Sb�3W�{==S���+��%F�t�e|^����������
�Ϋ���TB�Ԙזg�/�h)�t��j�?��\��!�� �c���\�_�I�Zc��Y�Y�{@���3�GC���+�7>ՠtڙ��&��c��p�c��h�2�K�� j�ҠJ��
+�
����RU��V�"�#����v��*
�X���k����e�g#o������}80��k<zd�k\;dwT�Z$�����Eke�.
�t�*0�^�c ��Xa��k�����Ap����)����z��߃���y��֝�)�^a�r�y+�=ݚ
��0��&�����|��T�o,�l��6�)��5�tjܠt/t�B
r�7r��:Q�K�S¥�����!
S+6 �K&~���s��%
���
yi\I~j��rY�t'�@�W�ua(zr�[`h��s�%k�5:3N�!��گx��}��

_15
+���)����m5��d�f�yD���Iz
pJ�z����B�^w�r��/�ذ)]�Ua{�ނP�6k0�;�{)ý��ꣲ�?s��l����U7՚X
aq*/ �Bc�}��:��
�/�
{_i:U �7;x0��n�@������g]���;�
�ڋ�1X
�i?�����
�Z(#T\.�����Ҧ�%74x�Qv��~A7T]Hc���x��j�`v��²�S�Z��}�7
�
�K����i���
36�u�7�o\@Ξ��y�Hy�ʔ��y��E��bT��CO��敬�/�0�*�C��s�Χ'�V���H���ǴLlv#�?jݑE��d'b�ːGEޯ� h�\l�u�
ҹY�w��0�Y�R��R�Ն켍��3,�U��������a������
��;m��hY(F�� �U�V�����k�%�
�N���fB�X�Rz3�p^�r�q
u��T�z]R�EƄùMos,�hY?�ž�Qr���N�E���X�i�+�8�U`\?��##�C����2
Py�%�c/�e�W� ��
O��a5��k����Ԉ��N�S�s9����6to�+�&���M�_���<�:Bc�*^�T�"R
+-�
��"_ϴ���5��o%N�$.XU9��r�$�m
����Ea �M�3 at o��Kī����	���#}=}��L���:;_�����8줯W����
��\�w���I7�1ϊ�=�N�Ʀ�7��k�EĬjk7�ׯ�ǰl�a��y��+W�xG�M�vq��.\��
i�o��-՝�
7�eh��ePn����k��(#�ov�i4�j�b�de8&۳q���TG�����	n�"��=��wx^�!.e���H
+
�~�������[�Z.��m[%̸z�M�
��~)
����������p�ݭL	=ʔ�[�=��;Vg�x�1�'K�G�>��5B�lcq
M����w��<�Aw<"��FJ��(�Ls��쎃��Y$4�TX\�l���/�zwI�~9�SH��
�409}o��dճ��hE�n3
��V!r��-�$���,w�
����u�
�W8^6Xp�d�
G�g��fW~���	LC:>���h��g��N/��1V�ֵ���wo�S(
i� F
�C�_��Ser><�M��$�}Y��(V�{>������SB�<?��4]�WL4�
����}�)�)��9��O��'�>�*)��*
����Y's���~�$������
+��C&(z6-K�ڈ�R�	��
��B���/g�^�v�4�Ʊj��v{5��
��?
+��0=O�t�<	������F���fm�
Z�Rֿ�ok`��?Zd` �K轝Q,�?�����{�9��5�U�D���_�L����N�-*S^z��6���z�����22?��\�a��JU��0)�`�f��|��M�|��M���Sq�{��r<jׄl>���~���i���^?gT�]z'�4rK
~��:c䈌 �%�
�V?WN�"�/���S^�ޡ��~WE���8�-o�y�,������QfHCi�K�'`�M��?���W�vv��CK� m��C3��̗��$�J���F�غ�I���G(<Z�#�0����݋
~i�{�)�J�˅Ə�]�v�>)eF����hQ��5�U��Ñ�/7^$���e
+��Q�
�G��Ʋ%Q(��2g]��x�ᚋ�2�7�'�ֹ2��րC�������
KA�V�ڽ�$!Z�Z���%���E���)Uԁ��$���.N��Y�b#fDv	��s[���<^r5�������J�_���{���z�~�^��A<k_�(��U߬�)9}�V��q ����E�u��
w�����Hn�����A@�[�_F&��c]
��+���F(�8m��z+A"��mF�
��|NC"Nz�����yu�Ot��[��Q��u6���R;�tt���st#~Q��2[�C���F|="�I�Ch
K�}�\f�����.�������<�˫�!��c�zoBO�t-��
+��4�m����&ϙ��%)ʃƫԾ��;l�����*r2!q�Aݣ
�Us�T�ED�E"V&���z���-���/�'2��n��
��.C^�
+�H�I��/�ȝ�iֽ
Hx��⦲���k��D�=
��N��R$m������g��N4`�3T
p
�
�SO
���d�\����sj��B�q��#��Tj$%:��h�M�t�*߭����Ȉ
U��E��Yd�%=��I���Eͷ�[���5�ɘ������x�

P�d�jnA����t�G_B�U��ɉ�l�v0<�>��S����Q�����v0�O��ؐ��eM9)l>G�z@�@�W���
3�� E%�w�{�mB��kM^燃��{c�7q"|5��_D��p�_��#��}
_�ћx�I
;���{�����tw�9�}��g�	��p�B����=«���5��c�����Bc�F4 at TX��-��m�F�a��U�=���y��U7|��sF�z��FJ�>e���̷��'|�R)�C��uH�������B�{��{�`n�
+�����is�A{�|A�
��H����U�}`��&
&Bȶ/���E�\@V|�jذ
�/!=AS��g!G��=g�+x��40��ך/l��ǚ�t
x\ۓ�R7f[M�׫!�.���|
+m�X\S�͆˙�́��!�)E>�"�
?Q�]�c�9~D
4�t a�`΁ ǚQt�0Ǭ9��}Zc;��9LZ?�[�ȑ��cMT��ؗc^�w(�u)}"��y%�thFU¶��4 6'P\fTA��c�uC��у��zSt��ͳ~��|8��KB�F|���}�5(��.{�#�?9S�a
�J�f��뻗{����
4�7��"�����C����D��	|R�}m�\~U?M�Ne_C�I��R��.8�_�.����Kn��E�
7�
�El�EvlNw4Q�~m)~#�{OtWЀd���,�`U*0�5��9Xa�TL
�3�V$=�S��0�֕d��Nh�7r��n{�?(<>iy�Nh�Y����P5}x�j�S��	�7B>ɮ��H��]�M�O���C�mA�	��D�4����-�C��w�{hl\�ܽ��6�3���߅��#6{���0gUEaj���*�
�q�Sif��	HXS���䕂����w�P
Y�����]��,Z��P�ܣ�p�+>c�gO�r ��o"
�5l�$
�;��^׭�'��`!?w+�#6�1T�d7
~�Xw1g�g�JڜB'��Z[���@��Q�%�uO�N'a��T�2Ѧji\N�MkN���T�3
[ڂ(le���}�@�e��	�t~��j�1�������az�F�� Mk�a1�F=��qD��N����.��������Ӭ���ob��H�:쏵]�*�����r"_��ϐ�Z�����x�!I��6/���~c%�
��m��?ɵ��U��9IN,�����%��
��/���

�&)��Lc*�xЯH�/�o˹\�1��/
��x�3��F���n{���z��
+�ML�0-S�i曏�tN�K�Ʋ
+i^g,��N���
��f�=����W��&ݙl�'0�g�#"�v?Kv����̡	�����
(���J�
�Wb���hĹX�#K=�8�ղ��#�)�}��5�D��b�~�ŵ�|��mPգK�����8�J�5�j�훫6�OG�IfF������c�8"̷�s&�_����	<�hU��,��e�[�V`�v�p�4#��S�H_8+w4([�_�F!N�kӲ� wE��축�v	��CL]t����Ha!.Y��Jj!6�ڛ�4D��/7�cf-�#��P	
+Z�(
/C�}.���F3W��j
�
+i�	3��%l:]�MW~:���[*`��	�09�����9m����#O
�
���X���Jm�'�
�����������n
��q�;B��1�
�#{:
�e���w
+���
�a 9�>gZ$I�����tL=�po�@����R���� 
�-�NC"!�F�,��W�{>;tO~��
��\5q�r��ﲊ�ˏ���}���}n#�+Gv
+C��=L8I�Yp� zL����8<���ufZ7��#)�(H�m�m���Q+<��R�w<���!����VN��~���U-��
��MGk��!0���{�ʹ�kT~�TLuV�%�oų���#���S��S`oSYc	
��c>����R�y�_.\���2Ib����@��EY^ ��(�cD��_�^X�'XK�#�ÙY�$������A�.��t��s�ܩ�5�3�Ѻ+�UԐ� �ZB\�K��y�0�+M��DWĕ�C��+9ɷ'�E�6r��7}ϓG=z����\�
���{���`0!N&��ne)ә�vz.l�Izl��0Hx����߇T� ���ㆻ+8
��o�6��
�>P�+'�X_���0�]�k�2�1��D_X(�u�
��+6
�\m
+b&F=��{2��4�t�c��On���B6K�O
?��
!���r={��g}vF	����gu��xdCv������t��p��R�%�
Ż��B:�8m��?O���>'2И$��/���[fΐ��`C�i	���ǟY�u��k�a%l�o�H�8��nt$MV9ϡw�!��
�{�]FjO%��\�t�
�z�Q�Wy�y����{��ԗ 
��FՍ	s+b������}�l�H�x����
�I�H,pC@�c�?�
/*�gj(���o�-�6��1�v��gSw�)��/B%�ְ?�	-���uS$#,���%(�:$�٘Hy�2�AS8���H5_C묖�ֳe����ɲa�nAg�D��~o�����~HO�����y�Y��t�K����~����H�F�tf�X�T�!�2�P,D��
���x#SӋ_�Sm>"���ϯ�n."8G (�F_ �1��[.C$�b*��!�HA [����#Pw��ʚtLA}��c��\҄�cY8NͥJ����
m��-)�y��� ���0�����8)|����‚u}�eb�r�&e�:�ߵ��6 "��(�i�xQ��K�!�$A�+6�"�^ZP��ܻq�J���9M�qP臩�8	wG���<D/g �Z�p�1ʃ�����V�p��(��J�ٮ�QQ���nx���p�/7Gn<{�	}�%��練+'":���X�O��W�?0Y�-���X��>8��D�߀q�h=�-�쥤r'��W7P�gU�n/�沴���0D���]-Z���h [...]
.p��4zV_���XB֢���;���r�Aր2�z2�.��ε\s"�Ȟb�O�mWc���G\��'�Dh��C(~
a��ԑ��,�,$w+F���~\d_�WJ���j#Z�2�Y ԯoV{��;;G�����
�9�Թ懷�L��T��J���~��[�}�??�b�8S$"������G�u�GGޏ�~w>�tqs��a7�oA3!���l&3�s�/�&���#������z���uK��	���C�[����5'S�Q��׳�
y/�	�e�!��/���قBKS�T�m����J��}I���1e_)�4�N�K�| e��CΎ����y�)�_�FEv���P�i���Lk�e\)R
�Q�'ߡh�C����!���.�苗h�^�'�]�S$T��\P�?���F����4�E����d�*0r�'����đ|�������痴
s��i��:��e-�ɀ�-,�l�l�r�ֹ.=��,Y嬕����"0���;pb�n
��8
:��LH�\�*"�-v|�Mc�<
�)�L��Z`�kj`z�������CY�����=N���{���J�
G��n-"K�
����h���X�SOtO�
+vO�bT.��h�
(#û͢�YF�|::y+��S՝�Uӳ�J�rx3�Ń�À�
�Lb%
9�x�iU�h��^B�w�H)�1i�$�vF�V���^�I���KEݍ�n�/����87�B]Ӝ�\���G
������͍�L�����y�2��{M`Y(�
�;k�R�0I�����W�b�G���G�P+�(#�c��5��ÿJ�A�k�&Ƽ�wW�U�L��R
����_=�4�Dl��;
k�d+A�<f���mu6ґ{r
��y$��9/\Y$WX;�!�z^���49��'����p���G �����$��_]�P��H�ے�����9���z�E�$<\9��GЌ�1V�ߨ��4��T�4��y#��w(kP5�d]R�	#2`
I���)�$\����h�0���4!
kiRn5k?���.�[��]D�
�eb��q�����HO�ԯ�e�����ބ��`ǩ3�E�
8�f��l�K��`e�t6���xK���O�E��-`��_�$�Y���g_
'J��;-Q#�o�nӮ�쬃� [...]
+:� �
Z��fKCΏ4`ͳzb�o`�~FZ�;&�Y*t
W��k��h��
���{?�4�r�ܜ�ez�
�PdrD
�$3!e�
+>�y�$�%-�y5r����Y6�� -�T(��'��!���.5�|b�I�{�����Ԝ:@��E���\ဣ�Ը�8�I>�%���
��H�U?���z�cx�/��] Ĉ_=�h���)-��z�7ub��J�MR!����:�A�ν�Z_.���
��-ѣ��-�����nu�®,gMO�nf>���<bZ~ƃ;?��b��}z�3k���/h�/kDi<�[��»�i6
ي{��!pB�;��!��
����
ǣ�,�86�0Xڄ�B
q9���;Ӱ��7<d�~����۠|�#�/
�x󋘩��L�P�
u9Ĩ��z�|��͊�3����R}*����g s�Lب:��'���JWKi����k������QϨx�.��F����s�.�2��[�6:
RJ�L,z*M�NfJ�$�pD0��z���EU�S�wy�?U
�j��h��
ԌC{>���=���M�ض��[�L�D��Ii�q�zg3F���:��~
�F���ӻ�\+�����V�Q����%_��t�v���앢
+`�.�
+�j

���j�M7���H^�Њ��U��4�}o
�������8�ٓ,��@Z�皨| ���8�{����,�
+����y<s�ꄉ|�ˠ���0����8� ��"o�\��x���=����b�qJ�7W�{<߷*j'��
�8���$�傇��aȬ�-e�u\�Y��P5�ꏬ�L�5,� �2����&�Z� �ꘞ��^�q
��@w3'�➷{����R�K
FDI���J��D6NJ��Ҝl��u|R�b�
2�%�0���]łԺ�
���15��|��΃s�y����e�1?�΍+�=ؔ-3b�n-+�"=���V�3�+��k�L!I���,�v�1�n~��v���-�V^�!|��V�Y$�|
���4�k�5��p�bHe߹��o^?EN�
�-EUO�����A���<���W�h
Oٻ�4��������]��֎G��V��<��:�'O	�EDk��_�>�Z�(
+Ѕ�b�����
Ma���p�ȁ6��H:��.���D&t{]����"���hL��iO,t�>�2��"U�k��K�53
Z�������c�a�h���e�F�"Atj��1摖��-|bU6�@��vV8����)�(��gM�	�׫�I
+�07�H�U�言2��<���X����űÛ��W�:�83�u��4�_{�n�`�:��ٍke�>�I9�-@�,1N�h2q� M	AB��:�k�����
 �n2;�k�
�%�d��h� ;�{��h�����<�J��)2�	FZ�ݕ�5�1]���#A���㍜͊x���^W�\
�ߜ�V<�v�v]ʚ�*}�XR�g�Ҁ�ђ
�?WZ&�*�7����1'���JNF���(�
Ē���'�*��2�B;��e㾰���F���������;3���w�h���%dMc�~��:��}����8��v���Ԭ�UV����u����4$׋l���w%x\&1x���~k��D����T��Io���w�V�4�J�Ã��H��P�n"��x���`_���IL
m�����`���G@���lK���̤
CƣfR�
?�_k
�,4��:B���G�P
c�ec�3���1�
+����ӊ�6����T�
��p(�M'y�hm�C_��T]�atCO�2yr#����,׼JW��_W�'z}<^��M�
�`����LW 8�lj���=u<�i�

0>��re
R�G���t�x@��ܲ�駌ޗ�bz���f��շ' n`��e2�#>�{��̤%����Ɣ��ss����
+����]1����c�~�"��&��$���{���2��H(� �Ԛa	��o
�N�hU'�/"�
ҶB-=��|^���Xf�ud凶�+�b9�GMǻ�γ{�%4-&���P�Z�?$���$$E�p�%�X�
H���,�
vh�tM*�\�-�f�:c���u/F�H���/��Z��9��4��=;!�F�/��{�|�c�ߡ�n���KR���!��������F��C��1J��)h�
4���b�P�@dw�F3�s��
+b���?�'E���Xj���Q�;:���Ic`!/{("����a��ؙA�a�
��E�g&]�d"%��
]=t&P
��g/F�÷>D�ͼwvu 
�զ^*�!��I�R�'\��NS�6�N����T������f�p�ȱl�5؏
�2c���A���[u}o,����R{h�W�	���a��$"E�c�����������w'�q�
��c�^v_k��&��#0|�=
��۳nd�qi�����$X��߾
+��M����Ar��4]�����,C$	Y�`��%�"9:��M҅@����vn��zG�*����L
��p��/u���L?�o�y��WYڌ�V����ܯ�}g��@�4��h����[�w.b����Y��6,
��+����^�b(��_�s P��rŶ�Up~
(������
<J��54���}�8��b�
΍�QUs.�$f��B��'��nN,��N'Cߴ�ycG���'�j��q��������.ZFlg��{G��717G
���Q�Ai��l��-Rz:I����G�-WݷΧi�`]�(�!D��\�f?_/K��"{wQ�� ��
[�6]�ֆ3|������;�a�fo�)��"���@
�Y�� �4����!"z������큨��J�ٍ� �-R,*¬��B�v����@�m��ݷ/e
���S��Eb
+��O�h�ڌ�[�VX���{�	�]8���AP��<g��nPk(��7N�}*v����k+��<��8_� �A���1ڈ�����P��i~
+L��e�R�:��
"|��*�c���#fv˥����䄮NNJ�kĂ����H��ghd0�y%�'<���P�$H�2�0D
O��І��\fc���\Vvs[a�ka������
��%�ҥA��+�pv��r�)���̽h-bW�
�
��Z.�����T�
+�# ��(K�����RF����'T�]ִ�A(�-�."�&��W�p�|����Zd��G
`�¸y�ڠW�Q�����!�ܮ[q�ɝEU�+>m�^L3&%�Z~"2k�
�uEnDG�Ui�ܳ�;w�hDM�$X������0D.��n������
�PkC�"c��p�
M0ܐꝽu�1�^�j'u
�=y��#|�ii75D	
u�_@�Aټ^ҵ*y;_�pV�[$ՙ
?8��崊Sg>j�S�49��}SB�Ԝ��o,O�dJu��
a�2}&�r�:�
���ܷ���
�T���d�N^I�����B	}�E�F�YI*q,�u^<u�������/	���9�8�u��ME滎t
1�䍶7�&�K�7�umR
kBfQ�~r�Ckt�
+�d�s���d��I�>'x���E�
��?em�!�
_d�N�
��6Rs?9�
�	#�
?��[`�߃�)��\ �g=WKl�7y؜�"�� a�H���Х<=R������5v9|��V!�Sx�j[��/
�/���Je� ����U;*<�ݰ��ԥ�߭+G�Z*���܃&n�(�I�
h���
0��lgr��^|?v ��HB'�_ ��"�����,�*�՛�	{gZ���t�iz׶��	iQ"���m`����D/p���kyo�4g!I�@
UL.Ј!͓�|�*@`j����y���V���&��ǖ�t�U�}4-���JZk[��R��A��Ɖ�6g�)
V�&^)O.�����&W�F9ş
[L
� �v�9q��n��P�a�s�S���3��7��h�.���t��!��ӫ�b~��2�(L9;i��;O�o��NV�q����Ssf~(
_�"O	5��L�qi.�uh����P���
����q�D���G����
<·O(a�#,�/���B�ː��Fk�k�}!t��		���\<�3��
�.t��]|i�t�G�D��qQ_�b�"�^�,k��	�e�"%cq�
A�H7
�  _��c���ۜ|Klz�p �#�6$C�5�/��U#;�Z�Q	<g�7�YM%b�.�U<f�.�
+��j��m��:L3��c�
� ��d��w�rl��j��O-Ћ�J~
�V0p:�
+endstream
+endobj
+2767 0 obj <<
+/Type /FontDescriptor
+/FontName /XTZTON+CMR10
+/Flags 4
+/FontBBox [-251 -250 1009 969]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/Delta/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/bracketleft/bracketright/c/colon/comma/d/dieresis/dotaccent/e/eight/emdash/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/macron/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2766 0 R
+>> endobj
+2768 0 obj <<
+/Length1 1180
+/Length2 5574
+/Length3 0
+/Length 6308      
+/Filter /FlateDecode
+>>
+stream
+xڭ�gTS[��)����HK��{�"ґ�@!	�# ���"M��4�
D��ҋ�H�9���x���ޱ��g�s�����
#�b�$�����0hW� H
+��k ��\\�88��A�@\�R ��$��f@bR"R at 0@���!���{ʼ���8$��B\p'|(x��"�^� E
+`�����s��)@  
	u���h
+�?
i��0 �an��H�p�
��
�$/ o�A�� 0�
��
_
�w��a�����P(=����h��'$��0NX7W8����q������
�!ݜ��j�BPH�"�
 �ZB��!=�0}�+���\���Ѱ����O
Bڪ:��|�矚>�v5�������?����!=@A ��?�y��W-U4C��@p8�~2�<�h� ��Dc\�[ ����08�?�S

R�c�/)�M�� !��$��M�HݿIi�D B�~���߄�!�o� ��M�� !(���B�  �����S ~'ėFxap�?"�k� ��(	r�� |��{E�"
���?6�����ŏ7��Ax?� ���o�x�Ϳe|�߇㋻z`�!�{���
޹7
����󧤄�|" "
+�� �����'���Ѯ~��!��!�#�{¡���s����?���R���J�ob�jZ�Z(�M��^�i;ߟ�6=-K���J�z���%�����n�sL��Ū��j�w��~���
+����uS���o`���K�
+:3���r���]��F�f�^ۖ�\L�T-
eT�-�f@��\*2�A�wen���C�[���f���d9��6>*X���D�O"&�PHx���݈���Ƴ��
!��z��'ٌx���[����>��~���?���x
V�e�|f�3k��4�	��ϡ��5��M������:�{8������P��]�qR]�B�2��rm�,:E��c�
��c.��q8mFEF*}X�W��3~������W#�ڪ犘�	ϔ�$N,����m�3[�pGC�U;Z�~������>
����f�������)P k\b�[��bJ���\S�~{7���Q����D��PҾ��unu���A
"!c�k���d�(��s�j�2Ť!�7=ip�e|�������E��qf��d��xq�k��x�n]�e�������7W�T��7���|�B4��g0�X��ù�3��(V��巣y��tw���k�<
+Fg��Z!�C�Ă7+	�_
�ҧ�w��z��i+��6w��E�A��M����
ț�}��<Jֆ���6~ߚ�	���v�Q�۾�f�����,�k�z���W���Ug0%�z���kS`���u*>����
��)Y
��,Ų?܃4�G\=C��
���G��X�%J�ӊ#�{p�Į]lM��;L���v<��M����#�G)�����]/�L�4�[� �|��4�5&O��Q���h�뉍DײIF������F!V\Q�2qL7x[��s�Ӿ��*��4wZz��<=H/����tč����6
� G���ѯK�+W}?~�ԯ�<��O
����;5yQw�~�d��GK�[?�@�tr�C�4-�!�ʘ#�3�����cQ��O˭--Ӿ
wCdCCo)�f�����{7�,K�yl��1�ٶ�k�Z��|�+IDx�Z<i�ZK�
l� �\
V��_�:�ЫY��*����`
+�y�zZ�W��w����;�>�w� �ONJhZ
�\�T�Ss�6�
CXNddu�8έ�d�¿�zL���^�~�8��]�;AM�cuQ����gWptr��S+���+� �]���2��2�-��f�O�K&&��
�
��=0kxH�'ӺAk�7����L�;Z~S�&I���+{�+��4����5%u�ˀS_^�b����-k��q},����<�.�]�����OPiv@�'e��0��O��Յ���
�=/�Şo"	��[�C�&4\J���G��`�~v��l���<������+_j^�
*�:��>8+�\G0��Vn�١/��g��U����n���5�\
����L���A�+yP�0}=~�>�%�X��p��1	[Ī�<�,4�?���O��gqB�	fĬq�7��5`Ŧ�r�0ϗ���E�4X��0×�+G�@�m��"�s�߉�K���M؝������*����H��ˉ�t>zqEk�F�99v{<�z�OX��0Ŵ���t�	�
���Id����/ [...]
+��a�~%3�=1�!)U�p+�iJ���-��a����<���OY����fo����?��i��jH�0_g/� 'ޔ��nu|Ig���~
�Y���="je<��$��FW�wn&��S���L�����u��u�1�J������p\�B��ϱ�x�L�0�g�^���Uu�j������+�
�#�o�M}�#J�I�z�
ž��?ғ�]�?P5�x��
^QM�%oo��_��d���
+�V�Bz��x
+�mBt�l|
��
4�6lin��
�:�16�N%W�! dI�rE�33BZ�
Sq
�Z�Rw/#���JR��
+Zg����8�N������q
����vP*���/y8O������T��&��ޙ/U?�������8�ƃ�����(�r8i�LEY�"ȸ�Z�߅����V�ٯ���w[L���
��?|�"c�Ru��F���p���j-WH�vΖRw��;�ͧv2U-|�k	�}�s�]Cd��
;�8IB4S4��p����TS

�OOh�N�R�
�'���诖2m�v|D�	%l?�Y']�~U&v~0b���+	����XI�$����9��v\�Εv
+[�|�7��;r�����^���@R�#�^Ķ����
@:x�f>�ҏ��z�Ggs`[���]5f�v�
�ъ,��/̜?b
Q��)��vmB�]kX}����9��Z	;D@;�=�����L�)���l��MW�s��'��Į
�:&�u��k��6��z
)�����>�BS�/m=����7¢�}]�g�^��</O�WX5���>�-*���xE���
U�K��a�{�T�P ����+�h(ٚ.D��N�
\�z�,��P�ӿ�n���BW.��b;�����%��4O^ή2�Uh
�ܻ�J`M�
q@��|��u���SJ�_n9���b��u�;�$�#���.���3�ސ|G
T�������͑��#���#�^_�A<�V����0n�"�r��W�e|C�ĎT`oAݴ��Gb� ��_]�޷��W*�=��hg#aRY���|<R�0<��s!�(:�ާT��h-�������۝<n�ۊI1ʘRj�����.f2
)
�K�K�)'��r��E ��^X�gf�{��d�7ȶ:2�]�bd��ӣc��LiB�����!W�����E�>
�v֙�\@6/N����Cd�	{J���d4%:s��̙؂MW�a���� (�D��zO�@��ZSÛ�.m������S��~z�&�O�0�gC��k���1j���h����$����gJ�W���|/�u��͈���f��LM@�a
+\<d7/'�R�,�_����i�:l�^�Q�q#�k0�ƻ*_�
-���s/z[
@!9f{��7��S~��s��A,9IP1���t���&tn� cH���V������Vk�%�?sT�3�,'��Dp�6C~S��,QOw�0�
+F�
��C/�R�
88�$�h�v�8���t�Lwَ�'��{
;z1�ق�XK��P�r�3��u�
���
+e���Kn+w�ݎ|o��pm�C@���%�d������R����ϙ�k��5��� �*h
���T��jس�Ci٥�+k�8�\n8u�ȈU}���^&��
U�F4'T�\��{ܔ4
/��3�J��y���Cp%�yk`1�o�Y��$;Z2#�g�L8<��I�i�Ot�yP�	�r�'ߪ�u��z?��ΐT�{�
�ׯPE{6l���
6��n�_���dLrK*�u��PÄ<B�m�	��
�`�.m�l^R[�3p�g��
�^��񓊪���m�f� ���:ਥ���`���I��̣s>���
+q�j:q�1�k����[����$s�8S9&q��rF�լ7he
45OS]'�媄��H�Ƴ�ɼa%2-�w'H�{j}C�I�ߥ���]�N�hŞl?�v�s�Z9��� �+˧1�/�����R�u�I���`

x��lk<�d�
����N�F�*�Yz��j�*�ds���
�U�|P�#y�X��,-[U��]M�r1إ`�hW��b1�o
���DŽ�ʲyL�=sl��X�;�P)Z��0�C�[��ɢ17Ok�p�t����ƺ��5�Z
+�tR���Ԏ��t�״3i�%&�<D������?8�����¯��{���jߪ(A�nֺq�Vb��XtpLI�<K�d�m�%7�s�Y�N:MT@�=�(�����?P�o����u�1gS�J�~_��ݽUߜ�
+XG�g�f[|��ʟ��� E��x<_:��ѷ���pA�4�>��kWBC���\�Ky��G��D�36������鞖�%��PrSG_A_ tz�΋���ũ�ї���7��4£R
ecJ���&E����|&��*��
MDҔ�
c�I�/Q�ތ2K�J_طIS��D��n
!��_61p��i	?fMS1S�w�N�R�BSB�a���,o�
+�kY61 e�{aH��3;#)dM�����B�m`����p� #���9�f�
n�
��g1;D�������k
���=���#&��[LR�")�V��u(
Wh�G*	��v�<A���&�P��vq����Y1ʗ�
n{�t4���)����)�N	N�zΰ~O�&v1�E��з�L'�
���n
+W׻����Y��h���$&�)��<Gޠ������O�):4d�&��� '�Vi|�?joO��w��
���1���
o�1��X9��5{��
6�kP�`[n�R;ɋtm�r!�� |�*ms`a����+"���-���ډf��<U=�
����z�ʻ0�D�Έ�n9ܘ�e�.Z;Yh�a�+��ߥ�����EJ�ρ;�o+W�Nv��C��0I�q�In`}��o;‘	��Z������ׅr��"p�Ϧ�Ǽ��$�
+��	o�� �	dBܟ
������;U��FM~
��o(h�
aqD1��KlS
��B2�A7d2�y¾w
��D�SO
p��T�J'ĕ�5�-��Q��+WK���O��H�/� ë��
J���5�-�U�g�g@�C&s"�/�_��'���t���t�W�+�`�����)�����w��BP�O3^9/>?��$�em��̏�
B���.��'^�¸�n	-Y7��9?�Ζ�k9���v�!#7<H,(sDv-" ���gk2�;����Q
ջ�X0���]F�

4f����MwIm�Y׿L�}

g�Z�ڜ*n_/{Z�
���8ĩ�S|��^A�/M/�M>*~�3�tI
J��p�[ح���7�"~^9~�~�i��&��Ѥ���lj�
A^�r��R	鱚�8�Cae�K'X�fj���@�R�cѸ�Z$�������&[[�9r��{^�J���(N
+endstream
+endobj
+2769 0 obj <<
+/Type /FontDescriptor
+/FontName /KELKPH+CMR12
+/Flags 4
+/FontBBox [-34 -251 988 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 65
+/XHeight 431
+/CharSet (/A/C/H/L/M/R/S/U/a/b/comma/d/e/eight/h/hyphen/i/l/m/n/one/p/period/r/s/six/t/two/u/zero)
+/FontFile 2768 0 R
+>> endobj
+2770 0 obj <<
+/Length1 1074
+/Length2 4131
+/Length3 0
+/Length 4815      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<����-���K�g0��c_*![;�,��0f�,C�]��";e�ʖ}l)Q�}�R������[��������y�sޯ������A�b�h;�&���C� u�D
��K҂��8
�@�n��p% ��T�� )I "�$��$%C
�����3R�Y$���1{
+�°�p7��=
	��p��8��DF?OxFpO8�� N
� {,`wB�h%~�A9����^����O�)@�dR Yt@����ܑVBM�'9��0�oqM/$R��S���'
sC }�[�vs���1 � Ǡ�]z��7(������Dث���p@��Sq�`���;�0�'��8
��o���iAB��X��L���3g C��&�����,��!��4

�
`)).)	!���߬��Ke�v@�H
!+�0�/-i3H$
�C �~��#�G���# i&8����y�r
+��?IA�0��H�%�E����?!�����R���oHB����n�"	H��AYR��i
%���
��
����pG�(�ѿ6쟰
)L�1��or2��7$y����'����
+H�eI�>���$�^�!i�޿��������BM
}�_LZ�"�*���2���Sg�!}����Z�#���p�=�=����r�KJmDQ�F޻b���jNuqz5m��BG�ɑ�}�
�����K
�2.Q-]�9���`د�%�#.u�x��v�_��o�����;�kL/j���e���^,�
ov���0Y�� ��[z?kO��7�|�4ŇW
H��ΦzE��'}�NM�

t��ԋ�E7y����d'
�P[g�вWnP
S>ο U�J�{����,�E�
J�(	��ƀ��9-/���]��J��t�񥍷a\�*��
�o\��
ި7s�B�JN
6�Ҿ@�w%�賊LjJq�������0�r�ʼnD��k0Ú�%?���޳��R�[o���˩|��S�~c�����������$��J�
���QqS'������a
t�h�
���xRj��K}
V�Y��M���a�>m��l�H���B
3XD�,��#��T=%59-�7-�|���j1.�$��:��+���>M??'�~+<
fޑ񈨃l@�
P�G��
��IA#��
�3]0j�J��Nd��!r:ĕ�a\⋹
��~
�>~�1�:�I�!@b&k?��Ĕ��0X3�)���{ƒ�-�3��
��Y^�\��g?_p��
��]4�_�(�_h�U\
+fI�q���j�J
�uu�͢���SE���[������g�vqR��w|_.����\n���L� ��|`Y�⣾
���w��}<v��2�q�	����kU�<�d�qB�&��k(
���ZS&�}*@�\������
?
9t�R�c:G�Xb���N�
�p�U�8���M;�����S��gobp�y'��-\Ey��Dʓ�1-
ti�a�@�u�ۙNE���^���;������и���e�ᓋ
+#vB�C�,��J%I<��&�������"z]�fw�ɑ�ֲ���������[O)����U�پi�-i��
>��݀n--D64
�h��� �������3���D2�<�8����<1�2!��2���3�����w� �������L6���a�sߓ)"����
�$�gdP�_�f�ތ8*a���@=އ�J
:���s��[iS�/NӏB�l^
+���s���R��� ��U�?L_�Hы=��^
���du�@>A��s����ܩ! uu���C�a�߹�0ی��BS|7������N�wx;,qC(jj�'?�U�s�
]���^���k�G
�JO�F�-
�ɠyw������?n�n�	�ؚ�
0HS~�P�����mmx��?��<�r��1��:��
`�
�W%;�Vo��Q)�C!��`�!je{,1t����o�E��Q�����f�;�_r�;(N^��*�
�c�T�گ���]�����@�Ah\
]�]�����o–ls	7kPDA �p���q�$ɧ���+
+;��~ȖYvs^�x�%��/c�a�0��w�0M1gGW#N�fkʫ����
+#�d�[�:�f:����l4�x���*�x��96&D�.���
?���tH���l���=�e�(����:��}�/����:2t�.S����
�
;}��.
��q��� i%�����t-���cD��8�XR�Ȧ�L�i��q� P��u�)����B�D��
g��k3ǩT�Q���%���x�~WT
+
�an83u�|�ȊC�+�6:��%��=���<�0����pD��|�����}�
�]���D�PQ
[���C�gU�c�
[�ty5��w�*�R�oF��)$1q�}�

��ˣ�����
+;V�S?	�A^��`�W~����|x�a������e!������I��e��c����zk���B�<��E:=�����i�b��J
[�R���Jq��ҥ�54��N��F�>^0��y�+7���O�}�pE١8p^�o���T�|%��%�2#��jR�-�@}�rs�
VJi�堽��!���**�ya���f,��Ŋ�f&��QM���E�S�7%b4{��P�7�����ǔ��7Fcru?g�gA�j��'+���͊OAl�:Ѓ�m^�Y�q��a9|Ĩ��-��7�ɂ�.��=�
+ͨ(�Y�
��ɸ0ϧi�l�Y�d�Z�w�yY���{
+���
Ȇ�dN�_m	m�{(�x���x��3�����'��Di	}��+fzq�Z�������:=4[-4���l��0�cn占���<��rj�I6�<����
�
/x�m/0�hr�wz��ilܲfWT��4Yc��9���lks"������ۏ� ��&��b|���D
���7

�s�ӻT��*���Qff華jX�5�g�Vg�L����(K#Z��|�Z�f@��^�FC.�R9����^�����_�S���f��[%t1%��Mg
�����QPa`k
;eJ��[s����Eկӿ#94�1�w��{
��vޚ\o�Q>���aO�6��
l�s'"�1H�"xW
�O
+��4�0ih�kk��n�.Au�W�6-6"_������]�f
I
��uJ�Ѧ�l"�Þ_��|~���
��Ƿl|�|m[Gu�U'~���6O
Z��Q�#��g��Cv��B�K�E7LCd�?–�*ĭ,���i��RDG� �8)�͸(ޟ����.q̯��. �1��C��#�s|)�㮜ȍbݗM��S
�X;D8v�#�w�L���3[��zG�>�);
]1�����kR�|�(�d��+�%�Dl��FGp
�On���*(�&��a{L�cT�l^6����nG�
�
�5��Y3m��Gn&���5X��R;��jz�2sƨ�K/sD�`�N���SQ���_l�bK����
g��:��ʚ�'���p���%,���7jh�0¶�x6b�ɞ�))�
+�c7mw����M<�ZV��^�e<K0*��Ӧx{�m��A� �߶o?ǭ0��M�^�"�J�^�{O�&Q��c��ߚ�#E����,7:��U�՗���l�Lsm��D�WQ���3�
/�v����o�l��'��������4��9qb�v�=�.y�z.A���6%;a���ʿt�fAT���:��Smd�'�W����b��
�&^����D�x��ܷê�'K��~^�D5Q�/�u=�?���D<#�!��bie8�,*�N?Cd"����Ot�
��k]����(M�$�bz�[�L).4�{%츩��ǐ �@\a��9�ձ��r�Et~!_I�����ƸI|�]NR�S�u�^�c�B,�4��#F�|V�waUf/�]GM]�v�.D�*�z��,����ɪ��ľ�zP��eoW� �ˡ
�KV�4!��d@~���w��-j�
+ړ�YV��W��ݸ��zxz�\��u��i�F�QHW��W��~[T�6�U���W���|��� pq�l�׭|��޸�WV-i)ov(9	�R�*�e�<�D�:�Ŋ��z�� r`4�kͤ?'%��n�`�:��R�
+�RX}NY��LP=7}���gLވ�:��3���H��*�H
�,=� :���i,�M��5�*��3�}����[��9��8#�ջ�&�����áMǵ0���g�r9��
�Uy0
+�/.
�͔�a�[5mS�K���m휌#g$=�I�s%�0�s��̏���y��������D7
�+(�����&D�y���6����]�j�
�˸�*��

2�R�M�B��>��/����	ѠBM�]n}WW�Wq�?X�����6�)'a���V++[�ȱ�X�SPb[rTv�6�+��+~
��l<��S-���~��O�s�>

L4�Dz����zF���+a�ٶ՗M��e
+�ׇ�� T�O܃��#��8����f�cO���<�
��A�!��Ɏ->��ڑ툇q�^8
+e6P)�Smo�Q2�z��˵���M
���r�W�B�7g��ioe����\�{=����5�*��z9�� ���~
_�i��B/�mQ-��	��So�d޽�e;�c~�(U�-�(ڟj�H����5���h�;�w�p���W
P6	X	�ɜ��v�|]���9�߭b�L�L8�lc�a?}N����~eO֯��+w���S���7�K
zt��vh�sTp/}��iI�0~���E�U�q���8
+�t�9H*]��;j��Ü�}��&���v�\5b�����ח����FO.
�G�� 
� �a�
+�r̟K��~ꨳ
+�T��/�@o۾�x�pI� W�~���Y�����R[Y���^+k\DױP�S�i�q����(��a��m*<H��{��g�l�
+endstream
+endobj
+2771 0 obj <<
+/Type /FontDescriptor
+/FontName /BTSFPV+CMR17
+/Flags 4
+/FontBBox [-33 -250 945 749]
+/Ascent 694
+/CapHeight 683
+/Descent -195
+/ItalicAngle 0
+/StemV 53
+/XHeight 430
+/CharSet (/D/U/a/c/e/f/i/m/n/nine/o/parenleft/parenright/period/r/s/seven/t/two/u/v/zero)
+/FontFile 2770 0 R
+>> endobj
+2772 0 obj <<
+/Length1 773
+/Length2 1328
+/Length3 0
+/Length 1874      
+/Filter /FlateDecode
+>>
+stream
+xڭR{<��
���LVm�8~3h\�b0;��Ff5.QR���ͼ/c���L��VK�u�-��JIB[��H.]v��T";t��9���y�?~��}~��y��k���nG�!��%vD
�
+��؎��#\P[�G"@`W��"�bP�z�~���T�=�lA��b?T,�X͋Ȁ&��.,�$�=�
!؎p�D�4���wD6	�� 
E$��+�_ ���pȟh�4��(
+G�C˅�V@
���B9�A!(�'�>
Rg��Zl+��
Ѽ����M9"�P��9"
+�J 1`!<H
/��C��� �@*Z<eJ8B�� |��
�
�y
$�P�FB
<��P��d��ms�Y�х�7G K|����k0�XݍX �u�D�P�|^-:�s� �{G'��9rAme��b�@ � �d�x
�H�[���x��Q���@x���O���Bi�_�#�%����G�� �X;��٫�D�P�
��Gɕ��,Y���]}�!u�$����n��| �TuJi���L�ZӅ_s³�����Oj
+�no��
�
���^�J��2��1�<\���M�8q���*j�*;�Q��l��y8fR�R�Ju�����׽�;�;
�rǚ_�{[��i��5�.6�
p"0��~�ɕ�Ih���҃��ziK�	a�:�6}��:�����gwO~���:S����Ц���T=݊����7� �v1Pi=�a�f*�V����|E��9f�F?Ȋ��T��h�4�?uanۜE����Vwn͓��_og��5�y���s`�i
�$:�d�T8]5��>k�������k]�������VG�ҍ/�Z;����W4����(��1��
�2�g�X����N���5F&�hM���i��&��ͭI;S[ۭ��w���|��g7?i��{��T%���?�%/q�E��>dMu2՘@ݓtG�%|?�
�cOjv��{�����{>N������
r^ʡ�ﻪ��5���#�d!�d� �
+?���fF>5k�ݼ���E}�T��[nO����_��C��X
��f�����&{��s\�*�7��
ϵYwt�\�
+�N��c�F0C�O��*��U����uCNju�e�r��6��-��Z���i��剘�
���wh�Xm�X�g�b��̜c�\�_��{�߸�k�c�
�h�U��9{����
��A�Hylʯ��$�����4I? 
���b��vܛ{
�)���uʁ%�^Ά��z'2�P��
+�����<4�d�G�u1�ʻT��d*x25�����G=�2�v�Sz9�a�����Ⱦ{���U
�fNP��S��mz���殠�_^{�*�y�1��Fg��������M�IK�؁��l$x��[�z<#����qD���|�
n�|����z��Vޣ� �K[�*��Gˆ�
gR�
�*W��k����!^	�(z�G4�����m�_#��գ��;�W��?D���F��$��
��~��BnT
+��ǒ�,V��&��i^o-�
4�K�7wM��E��ޢ�Gfg8e�ySAyݿgoEыw�ݚ�"^���AE�e�N�%׏n
+b����\�F����xl&Jd\�	S^�9�4
�Ug�c=~=�)]�
��5��|���}W&�
�[V
+Ltm���_nh�ؐG��F�

+�Qw�΅�V����M�i��XRF9����{2Xdc�̥���]I0�V�۩u��_.�e8)���,�)L�g�u64'g9+�
��v
��ڍd�*�7�&(��5�I��d���|\-
,�my��٧��X�
���CU�#zj�pqȊ����'���?��]�s�
^�7φ��ﴹ`?1
��P`�������%�MM�<�(~K���/�	�6��
+endstream
+endobj
+2773 0 obj <<
+/Type /FontDescriptor
+/FontName /IRHGLB+CMR5
+/Flags 4
+/FontBBox [-341 -250 1304 965]
+/Ascent 694
+/CapHeight 680
+/Descent -194
+/ItalicAngle 0
+/StemV 89
+/XHeight 431
+/CharSet (/one/plus/two)
+/FontFile 2772 0 R
+>> endobj
+2774 0 obj <<
+/Length1 1104
+/Length2 4872
+/Length3 0
+/Length 5578      
+/Filter /FlateDecode
+>>
+stream
+xڭSu\�i�&%$�$�a�����
`��a��F�C
���P��C�[�n
���w������=�<�u�>���
�쑶PU$-I�t
%  !arnn%��!�4T
+ ��0� �0 $.%")�s��n>(������{�@����A 
�	�Ӱ���v0(�G� �
�� B=�(O��9��١�PG�
��
� �'m�q�+�	Ey�Lxq&� 8��H�`u �"qgAqN�?L�[\��B\�����W��q��
Et��P�ߩ&�?��@�a�G5�8�N�����`
�0o��>
m�p��=��P���M��������������#��!�F>n�����¸ޠ`� sa!aa.���g���TvH{�b� 
+�!����@ �
�
�z���H4��kI ��"�}� �����> 4��D ���.��o��$�7�Pw
n�1b8%$�7 a��� ��/ ��8A��P��D@�Ʃ��
+�j� ((u@�bA�e�\��iܥ�������b�8�����8 ��\
��vBA���B�� ��/�{��_r��@_(����]EE��� X ����	H�	��D;

+w+���zanQ�Po�
��4�N:�9�]Dq�J�h	1?��c]�nM�D����$|xဖ;�r�)�4���3�gv���
�M�ê��S��=m>g�ֳ��d��l�q���R7����'��7�<X��8���Q��+}^e�M�E�vs���ga���Y�G���<"
�72݋��F.y�HM&Z��
I�^`�ل����\Z|}?И��y�]>ݵ�
���VUve��K?y��1�bw���ܭ퉯
++K�ZŲB��B
D�z��B��3����ƗkPsv���I�}Ő���[���j&�Xf���!��3���O��'wxO*��|�y.�=W��
k$#�
�EGܰ�ã�[kU�������f_(���V�y�g�
�WtqJLc	�Jn
_�nz��{D��<�{�
+
�vˤ�Lu��g���F�����}�"���Ķ���ƻX�)��f��T��z�=��R�褼Ł��qCAKk��e�
�C֝}ub����m��
�,��=e�W
+�&�ͥ���K#ԑ%W�,
���'Y�bU��g��Y5U���~:���cz�
��q�3�J�:��I�A��yi��J�F����
+t
+���1 >����C�E��j�;j�N`̭�9D���r�)iï��e٫*�c �E�j�2��|i��yI�
+�e���~��qړH�G���`6�,��맺H�,���(6
Κ
�=���2�Ϥߙ�8ߖ��a �9nX���%�ܧ���ˎ���l�ַE��l�k�e��m
gC�w2b
�ꦞ.�1������}j_�}�
+��TT	�w�L�&� ;ܺ����R|عI���i��ė���ͫ�où�\ub�m[=@�7�
/l��E��ױ��s�&ϣը:T ������bj��3�S�Dr�U��
hѳ�����c�b�T�#��
+�df�}\�� ]�`~i�FY�
�ꂓ�}��$�`�f�쒒�Ze�pD���\�7�3y>��/� ^ ^�g3�fF�y��C��V�vg)KS.we 
�Q��fQΏ*.M`�W_2$n��Յ^���0$3�'��Z8܍`u#�'~���6�͟0�wM����|j2$
+�&�ٿw��R�.���6%lm^w�a�(ވ�r�6�08RCB��6� PFz�Um��x�?
^�yG�;��}��U�v���o��������J����sc�Qo�������� Cg�m�Ź�v$�^�Vh
+���K�4�3oG���
ߌ���d�?N!�)�p�4�Y4ݵv�����}���Gm��9=�A��(y@�.-�woWB�e�l��&� �B?\�0�mdd4�v�>�L�*��a��GI���ϊu�!g�aҶ�
+4k���)䊸Z�d�}�E=-�UB���
b
eXA�!���LfH��D�r�fז ���}(��*��F��-�v��K1���"_^�l9`o9�-�H���'jtx�y���.GU(�ߋ|.�{�/��P�`zV��۵��S���KPL�c���^�`I�x�u:p�������
�ك�嫵�����P�i�7�Մ�W�Yel����h�������Y�<ȊT
�uw�ĪI
~,ZYY���̇7j'�
+�k5s���xS�ﶧ��#�I���.+�@W֊����Bb�楋}[��r�!m#���Euc^@qN�8�#�%
��h~�F�`)**�
+y��xvκs�4cb6UD��J��\k`%*B
+��� 4�
m"�Mx� cA�|s��ʬs�V���3�8�
+�&J�}��;!�N�����+���WЃ�-'?�&���|�[W�ZfJ�l	n�����.��j��`��(?2G��lŒ�m
%.��so��3_�
�����u ��
�ᾝU�"����H1c�����5���-�y���yN����e��s%}�6V�ӱ�tY�	=+����R9�U���
�|�2�l$��ey��;V~�s����
g>�(�<JH:�t*a��Mc�������$���"�)��|���L�C���KGPB�t%H�rg���?c���K�鲐K'���0�4�=�g��������(�� ��0��x4�h�;kf�n�E%���ǀ��T�y��#�����_�^�z�c��?�˧n|�`[�(�i�Fzܔ™�u�
O1Q��Ms3$�1������[�i[{R�٣�������sM���!�Q<���^�++��5+���
�="�,3��{Ɍ/�+�����,
�����w�Z��gD \�͊�5%O�xL9��j�C���U3
tE�p���P�N�k�{���
�z���ʟ��Y4I��):{$�%�4݌�VG�.<׺
}�������ݳ^�
z��*O���
���YM�p���C�S:��O����^��<-
��\��Iv��ֆ"��dV�Č��M�����V��*�Y���x�E�t�T�/������k���1_����%uftgH0�̓L|�ی�6���kx�ȗ�*c�
E�]��QF�<�^����*��e��z.�b��=k���3�VB
~�n�tg����>��&���q�+iU$e���
?��e�\c���
�*��m����=��q���$�?�GT��ϰ ����q
2!-NB���4�n�u��
����P�ț��H�
���I�,�"�\�w����Z�Y�]vz��]^���=���E�O�u�
F({�@Z~��
+\��G
+_�	o��+SL|��J��o������-���]��Х
+ñ9R�lM��/��j���/'�شV#��<nHr\���ō�.ֻG���FĄ�K�@�
�th��9�

��&�Z�E݃�����Dp����o%+��E+k$� [^�޸�M���b-Et�F��?��D��[�H���{�ws7���h�T
�F��I��C>U)�n��}��3
��
�C��R��!����Z�f.Рj�ҍH����9��JV��2�#�ri�e����&���!G�dU�o!������U�G�y��HuG�� |�u�nEcF��6�5�3��+��ˣ�gem���z-�o.c�xc&�:g�
(�ɽ)�
�ڮ�\|�ݼy�<ze���s��FKz'��U.
����t��[�Aok�L�n�j%O/�rq�3�t
��ﺳ0����Ly�v�����u"�y`'���pk�i�b�W���k�=��z�|k+5"-�����\�
�
+���s5o��,`[
��O�E+�Rԓ5�ʚ�pH�{���Հ��'v#�7:b���ڝ�\�NLL�sY��8ӛ�<��G�H1��"#��>���a~]?������8�Y��Hl�+HW�bZ�m+�m��<�x-�J��"��Q��<�}R��ޞ��W��U�*��d$el7�|��
�~/f=�Vh�
����ܣ��$}��p�_��,v���t#w�.�_�Ӿ�q��m`tY�R6�3�Mw"���S+ݿ,c\��i
�&���Q�~������'�S��5Ъ�/�e���h�K+q�L�'Z�Ĥm���i�(�”3 at s�r�ӧ��Bo��|�{,��r�ـ�Q����f�
���p
��K64y`ɠ���
6�5�7
ncS��Vla�\�-���HY���mB��-�%��r�����A�F��g���mܶKwl�1
�a������q�%�z$�cPN��;�0�k=!I����kr�XM��Ɗb �(�$`XDA��Wk�t+�͏z�u�ٚ�cWo^h��~��c�+��7�Ѧ��},��d^�m�����Rc�p��;"�?ܖ=��i�tXX@��t���0g�h�\��<͝��uVJ��o��X���dU7�1KMoXM_�>�g��h�ɋ4���xr��AǺUiЦ����f�o��u�U
�U�z�
Ǥ�m�UY��#�L��%�#3���~E44I�{L��2�"{�
��	�mz�t����>ߙ0�Vtl�$e���yOQ�4:t˱^|_��쏆�}�I�Y�7Y��V
+�#�/'�'�Z���P�#a���Z�)��803b3u
�I��!/K}i+0G�?YGo8�O
r��I����G���'���/\l#���I}��~
�x�p����d�֘�[C
gwp1Z�XOM#6tT�֣x��^��x��JGb.W��u�^>��u�~݋�^��#=H�ᮟ4��5߄ ʵ3M�d
fl�������fk9�
�Iɷ[dH�?�D8�nj�_{�L�L�[fgG������y&�q�{�N͏�ƣ���ų�xʷѮ�ās{*��	I`?�ŴBƄ���lɡ�r B�Q�
i�c����w�S��/�gN
j���i

�h֪�t��ɔ%Ĕ����0x��2

���*��׮���?����	�v�Mg]�
/�λשl�"B<�'�!%��4E$#�le��tB.HQ�}l�h�꓉��h=�e�

����_���m����|e�����x���G�f�p�K~'0����V�,�:X��P���<�*�JO[l��\@�ڍ��*
*戥�SG
+�;v%�BL��3z,

+)|%��
O��b_'۔�!�(��4Ӊ��-e���cK/��3�i�܋.0�o"&�:y�AfXH�Q3������\���Н�=�c3�Ihޙ�tP�K#A�ܸ�(�l�1M���rt
K�bl
�o�OZ�Z��ّ�VM�i�����Ē����m�2rt�uF玆��[��˃�Ͽ]M��t��Ĉ�
	��
pc��F+�b �|[�	*�y�|����J�W7�ݎ��YZ�o��v�1�"�*p�
lN�vA. ��
���,C�N�R���;´܊j��Z_�h����=��C at +�[�������F�
��2���֟
[{�˾Ls��_��J{�:dO�ޠ*l�L��B2~����Z�
>�紲�qK���3�˖>��������m�G���7
��:�W �L�d�U��?5%]��XMKݬW*0�Ò5نm��im��A:��h�
+��wr�_J�aʪ��SN�:
+endstream
+endobj
+2775 0 obj <<
+/Type /FontDescriptor
+/FontName /LDOHJW+CMR7
+/Flags 4
+/FontBBox [-27 -250 1122 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 79
+/XHeight 431
+/CharSet (/M/R/S/W/a/equal/four/i/m/n/o/one/p/parenleft/parenright/plus/s/six/t/three/two/u/x/zero)
+/FontFile 2774 0 R
+>> endobj
+2776 0 obj <<
+/Length1 1177
+/Length2 5280
+/Length3 0
+/Length 6004      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\�[�ƩAR�)�f�	iI�f��f
��V�n��n)E	�p�w<�y�������/��k�u��}ss�>T�!-�H'� X,
T�҇ �B 2nn%4
�A ����4,%*�� E@@������NTB�<�[
�O��/�$P��FXA��ZP�-���
+� |��B�1
B@���
�@}�3
�
+�	���@�
+��� �Ȅ���d�J�
������
+G;�L�p&oqaH' 
nM&���Ղ����wrUm���
��U�#���?�HG�
�j!ap�ӿ�F�i�a����@
V
+N6p ���Y���"0V�@k��3��8�	�o���eA����CME��n�%](�	c��'�/�_
�͸ޠ�@S��	q�ߞ������p���FC=�ps�#q��p��݁pw�_a!'$��k���&�u�����_$)V�M8�����N	u���l�[�Kf�����V�
+��@0P���Y���@a�?P
(l���8�<P�p�?���q�
�@�3���9�#�F��8g�ߵqZ
wr�[c~G����=���q
D�Z����`�Q� η��ہ�q�p�q�p��"��
���>EE�����PPD
� ��8��	�\�8˘�>l�
���������Vds�H�;Av/kCJ|U�ޗn�+���h�m�h!���w(
�|z�C�1�,���`����sD��ް�w��1�S���
7��S�<>�8����j'w��u�?
�$��wg��l���)|��ȁ�n�Zݞ$!i����04��G�C�:�iI�X�uB
��h��](I=��
�م�G�
��ps��)c�������iG[hd�:�{Tދ���3ly���{�Z��d�I��x��J�͸��Uf��
_������
7���M���rS�z�
�8p��T�=s�%dz��6jʨ��L�\�o�D�X먆#�5T������V1��wB�3�I���t
T]�y`!
+Ղs"�2Ro��o]���Rf�nO��f"�^S?`{��?��h؈��"���nB����(�0����rb!"?�@s��9�/�n�nK�l���+������z�v�������
��c,����y)o������P�R�|Z�l�_~�C4��U��5.�����t��;�gHiL��i
1�Z_9��Av�cG����Zt�`^���o�
zIv�w�o��� QW�ԫ���ɚ�r��@L$��G
��z��h쬼��������1�sw>?
+��[� �I_<�&p��_?t�����(����U�Ǿ�w��&PJf�
uk�6����4��H�*W��mŰ\�d��@JA��E�� ��TO��-E��-
+:�p0��E����Ȼ
�˚(&^;OGž���3��@��^��x1�+�Z`mE�|׏��>(�RY�R�f˨B:Q$����Z|��\aK�
�<��}8����c��g:��*�,������c��3|�e�_�1�Γ��Q�:q����׽�y?^s��7LI$�6�A�S�ie�nD�]�E����7|�:��	^x��5˷K����ܝ���o�v�43[���${E�K��d}�D/���Bv���SE(����9
��f,�	�ԭ�s,ɡ#�i镇�h����R>t�K���Ob>��h�
oj�5
��G,�?��M�Z�%�q	����WTMA}X~���������������G�
)?T
��n��_�|t|x���J\f�B�3_���3X�"Iٕ6Igd7Ǜ����l[^z���-9�o�����[u�!�电�
+)
�K�\b���T���{;l���z�WB1�*�B4$^⭧g��'fY
�x�+��n�\�>�	\6��]-����0�W�)�h�Q�Y+\�
ԣKj���;_�����c����Ԛ ���7HK(�薿��0� �N�;"�T���-}n���s�Z[y��,�/�"܊u���p
+%������e�\!y}{�
id(��
�H�Nm6^H�� ^h[�E�B
:�4�
�	KO��)`d@��Y�.��5J`�
>�=WGV���2���2*���۾��?
Y�b�x��.��K�V
��
�MN�k���_!�fז�����8��
�v�
w�!�
g[����)ׄ[E�9���
S}���˶T���5��R�������R
J�ݐW��)�P�j�����L2��	��M�OA��q�g�	>C#!ݝ����SPP!;{� ��:�Ƽ�m]�� L�S̐8�ԟ�8�����t��l�g��� �)8���Ш��E��9�� ������;r9�'���ai�v�wz�n�0��z'� �6=?䟴ʽΎ8��ݿ#�����
�3�Is_����
9�B��fBG�]�-W�}P
���3�.���O�N��l��BsFF�8��t~�|�Pe�
+
6�
ۚc��
ӻ�������3�
C���̪�S�r��vkе�F'���q������s6� {��p�w�~K�K�Jo2����s�T����)b����ym�i�=3�Fr-@|,�(4��,���
���FK5�1������T�V�LD��g�����o�r��;w����7ͱ��j�lX��"ݸ!��dᷛ[b	���_Lxy��f��
��}�t1hH_�
|^�����v��j�sDž����ks�1n�}R��R7��Ue�ﳞ�P��4�G��9�:�V���_
��'�κ�.l�P-���)-jzT��L87kT!��³����o_��SDH�*����2�n-k�
�O�XF��p"��Җ�YO>���	�
+r��
+'�c�����$
@���+��i�e���'
�*�J�Ue����~k����V�0R��Dq���S�֜�{���E���+��=��
՚t���
�#Y^
��B�^2�&����R�U7I>��6JL(�b5�$aZ2���E��΄�3mX�/V��1TqUo�Zc��HL<�ۍ�8���Q>
_#�^�R���e'	����S
*ILXM���0����d#~u='���)�M�)w�f�	_ഄR����ݳ_�X����/HR��t=U��R��2h��YA5m�r���>�E�����k�����n�ՏW��Έ�w�+<��X3��~3��%D�%�U&M8�1g4����L~}k�>���t�����kf��bA��B�W�Eݹ��6����fa	C���`����{��i�t
	������_��T,����ϼE7K��(c/��
+EP����{(��e�LV/Q��g@��1�����)��<�����0�xg^��~��Z��c�TD��'Dk�~�����
���ɸ���2���7O�~�Z#�B����cb��G��t���b�[l|� �5���g(�I��^��:
@����t�9i����t����m)��ͱ�갅��S�ɕ�
@��jn��YKZR�����n}��'�}u.��D��YSI�[������!+8�85�1B�Q]�X3!^p���m
��Fe��'-���4��+Ɣ�
�%x�I���X9�
&�s�`���9��ш�xNW��

G�c;��`]�j����Zv��z������
�,�H��wb��~Sf񇻾B��<�U��W`k��
�"���`Y�����4���*d�G��g米�_�>[eL��;"���튭\�+�`���m�Ǿ-f3�ʋ�&EQ���$Sv9H��a�;��7��ok� �!�J�Z>��`f�
��4�>Կ`�`�{nf�}!���?Ҁq�7O�S�?*ۨ��3������;c�^ql���
+3��d����
{�5䭅���33��
w�P}�祴T\1
t�ԌtWJ|%ù��Q_ЖJ~>��U
�h(Զ�nOq�c���N{�!a��v��x�ڒ0�BǾ�q
<!��
o��c���R|̂���r
;T�h'�g�����?	T�_F�
����]�{u:w���q|����)
+Qf�PI%Q&
U�v���զLyFP
�򹡓������{���U��|�Ĉ��H�7F�?8�h3>3�������6���`cK����Or�=�n�d�ޓ��gЊ
�M��S��1
�8��
C̻O��џ0[;�Z��:v7_�hbˌKl�4�cޛb9ȖJ���L���Y��ר�6j�
V��}��I�
�~�>k֢�U9Yq
�]4��6Tp�H�CcB�Q�A�I�SUY�mI��)A��E�>�
ү7�a�O��
�G���
K@����yW��h5E�#&��;�!�%[zO���nFh�
7�/�Nh�ˡ�9 ��j�E<�y�4�'?!4�?�4�ݾ�O�FP�*-\j���Y�D��O��=
�

+�
��Ѥ�S���A���
�;g�o��Bh\F�*
����4��dG��>@4�@�r+�.��;Z�F�tp�ףM2M���q�E���aIJ���reܣ�~f��ԋ>27���
X��d�qݟ^e��!�t�,F�#h:D�I9�y���Jې���Pe��mM����@�b�xe��Bؓ_Y��Qfqr�i��@F�A:��u/>ע_ö���V��3��-�|���|<5ß5
 ���o[�3яۨ�siB�99��b��RĄC��1ޔG"�g
Ʌ]�!��q����m������������
ν�X�“�'����u���,����
��
�`"k��c�Ԏō���z3��,e ���1�L�@H#h5���XM
6|���i(3��n��O�T;�&�
?�@S��L?��NT�
���j`�7��\�^y:h���
��4`�����GՕ������f���kq��jǚ�#��	�%7l->	��"}�ld�C@� ���WF.Y5dܪ��L'<7�™u=j$�����vf�}�E�e����4
+>6
\)
+�Qv
b���A���{�#r�׀U���8���ۧ/���v�he����#��0`��
���p�6�
�m],��'i����wS��z?�љ���}B{���6��3�I"�!�/d�3,�C�y�����轆��B=-ԏ!�
�7�p2^�@���(�||�V�ۦF\]��c�by8赕���	i��7���QbwRo�&��z������~�n|���U�󞉑7���Ƴ|�
��o����xz����M�`�A���'Y�eR:��U����%�S�]�[1[:,�B��
i��
�gW�P<A/���I�����W�6�$���ǟI�C��0%SX��Vi0x	�ô�zJ�Tl�=G�C��l��#��+U��͖�8)����k��c�Eȭy?%8;m�U�hS�F��O������/y�����ʸ��T^
|k����#��s
>G�߸��Q������1?���5�u7-���ou$�O� �2O3��_u�%����yo�_5ܴ�Ҝ�^�K�"��h=�N�v�V�����"�~��|x�z���c`|�Ѫ��	x�f�V�O`/s��==̳H�T�e<k�^T�d}\�҅��&�,V��M��"�3�n���y����
�7P��
���u�ז�؟�KT�&�
+���A(�X��;�q#�
z�Ֆ�؏OQ,��P���w"g29��j�Wm�Q
���t4��W
ZW���0
(��]�0p;���u9yr��E�i46��ʬ�f�άL�J����<1��@^=�ℱ���$M/ȴ��3��畎��d���qbS�V��Ì;.�>��4E�IM�L�IO�K�h�?
+���yԝј�L`k�x�Ǐ���UɄk�o�
�$o�v�����e��M|9�,��vE�8�� ��3����c_˩��v�7�4(�i��z2<s��}
k���lW��4	8���
 W�?��LDj�}ȱ���-n_|s�@f{;wJ�_�����մ��)�'�{)������!T�j�
�aC�Y�}�AC��[v��

��^�
&����[�
�S������s��睴������=Sm)��b
�����90�?k���
+endstream
+endobj
+2777 0 obj <<
+/Type /FontDescriptor
+/FontName /LDWUKB+CMR8
+/Flags 4
+/FontBBox [-36 -250 1070 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 76
+/XHeight 431
+/CharSet (/D/H/L/a/asterisk/b/c/d/e/f/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/period/r/s/t/u/v/y)
+/FontFile 2776 0 R
+>> endobj
+2778 0 obj <<
+/Length1 804
+/Length2 1837
+/Length3 0
+/Length 2386      
+/Filter /FlateDecode
+>>
+stream
+xڭR}<�kvB���'�F�b�
�Y&y*oyZۏ-���[楃�R�)/)	���Hy�pQ4	E��P(jtF��y:�>�����^��{_���n����Y���
:[�ĘV�n4�A���6Y�@"�ʠ�l���p�"�З�F��hS}��b0#XT
+�b��$2,A�D��D6
�� i��D�H��F\�:�W0d��d$��T8�S�PԒ#[�0�Z&�0�S� +Xb
+�"1�H,�tZ@��('��-P���a���;Ch4'b���������o
+F 3�
� Gd�����s�Ԑ��Y[6�F%Y��i ��C}-S�wR�A�
�M� ~DZ0�\�䟍H�[��rqw��@|��e҅H���#� ���^ƘX��x��h4F"����?=fM'1�T�d-�F ��"F@%�!AX P�d0
 �%�QH:�-i$�D~
t�S1��(p��
(���P������Kz#����d�G��z�X�� ����!)�����
���
�Q%��`8H��z$|�!^���h�]E�:�������x��A�����NwP�r��!j�R�[��;�Zi�F��
+
Tt.d��M�^���h�iiT
�:�R�9ʬBL�k����
+
�1�y�o�d
+�z��b:�E�3��/ҡ�sj
΂{_
q���Ɔq�!�o]�9
[�6>�P��s
�����N�߳(�\����N�C���ӛD�I��y�ٴ;����
���,W�/
+���Ĩ
p�ҭ��[�>HU�B���%r���\��ͱ�#
a�����܊b�g�����&֙�;�k*���s�*۝�Ǭn�o%׌���댁%�K
�?"m^���a��ݐw7j+3|���j����D���-��{XPl�G��z���zZ����v����탨�w\�"�Ae�k/��=)I�mm�Yf��������K%��D�>]��u��+Ul�k�4��
�5>��m��ʫ�hs�d��i�D;���.�V���V��us.�(�V��
���)�=�ّ�S�-;��4�TF�ǻ����yq(�zT���7�Z��%f�
���|C9�n���C��o��8��p$��1��&�0�u�j���#.r�!_hO�AJj
+r�{<Y���LX8��5��Qh�:�|��Y�䧷
����6R������������؟��U61v)���1XJ�G��`�n~��󹦩H�T}�K�7z���#�iQ��u��a���u���Ua
��v��W�~�tj�fѳ"��K���
˒T��Mb%��1��}��?��Z��H��+&�����(:
����NLz���1Z>E�ʪ��
+N)H#���y؆�Vir���
+���uf9#���ҚR���E�pBt-1p�kԟ=ni�
W�Y>ӣ�_��U
�T��_ ������(V��޵ ���Eњ�+;@�:o�?���UԪ�
&���&P��+�vȤ'>צ��jY���������]͆�rɲ<�m\9�ij
���z*�k7�
�ħ�c
y�]����N?�va��<ߊk��m+���e_�
���f[o�b��9��F�{��c�NN
G�&ت�J
��}�mߘ���=��3��\�S��` J��YsN����#�B*�LJ��?�������P䠾:w�[�ͱJ��
i9�)[R3����k�2��\������aS�v�҈!T�kbVG���=)�k-h�Z11��X�Ἑ��
��Y�C���i�?�t�m\�U�q
s!�
X#����|��<��#�g
+�>%��`�
+�u
9�	}fይ8g��b[�ݞ�C�F@�x�4�3������nS�����T�V5���g	rk�/j�ݵ�Ȅ�w��n�i�߾Y�'�g3V��qF�5��򐔂���
HmI\���W�]~��z��T-�I?���Δ.P�KD����>+\ y���

(�q4P�{���;�d�s�w�{�)���|m�¦��"
+i�ImM��/�nǥ�q�6���v�vgz��P���f
�{���p�L��
+x�B�{A��=��S#�@����n�Ȭ��(N+��6_G�� AD	]!��^�(��R�s��b�3|˔M�I�^3P6�U�]W�GX��	�Wv-�M9mZ��Jo
�a
�-�G!3˚{�b<콨S���O@���ׄVK�*�E�9M�
%x�
n:7���&}t�:�w%�>Mw����%�7�1����y�o����͞u�R�f38���@[��	�����B�/$��t���T@�'�T��zl�Վ�R8�v�JRX]Rʑ�ѾR˔	敓^۴�ٕ�
���i�`Ot���،�g�\3@]|\��?pQcC��$��&b~i�]�P��
�����������N��
+endstream
+endobj
+2779 0 obj <<
+/Type /FontDescriptor
+/FontName /PTPXIX+CMSL10
+/Flags 4
+/FontBBox [-62 -250 1123 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 79
+/XHeight 431
+/CharSet (/e/h/p/r/y)
+/FontFile 2778 0 R
+>> endobj
+2780 0 obj <<
+/Length1 979
+/Length2 4024
+/Length3 0
+/Length 4656      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<������YK��}�Œ��ke'{3�a�h
FֲE��$[H֒}�.KI!�.dM„,�������~������<�|���9��0���D�\Pz8,A�� �F�� 

��h�Qp�ՁP* LYh���P vQE
�"+�q�x��;ז�]�hz��h

�	�(/r
X�h! 
hb0���/| s�
+�B�A0�D#�
�
�A~��u�������I���>dS�8٤@���a1 �
+���Z(���S�n���ý~��=����{�1�]����%����c�]j��ۛ
+����w�
+�A#4�n �
���w�&���h�
p�c|P�QX俍�g��
���������;�+g
+Gc	��( �O�_
���£��=
��ȅ��?o7����E�h,�P(\�x<< D>
dR a �D�l���O �\�W

�{��@�C�2 A���P ��a ���?P����
+ �*�H��ad!�H���d!�?P
���@���x��@������!���wcZZ8b��E #� ��
+(*@��W!��Ga	����îh�IA��(h|���ZU���_L+�ÛV�9�*�x}�����%�o�-��]r���k/ HW�9�͠�@
H�[73�D�
�o�uG���vV�̘�q�E�Z�oB�Y�f�2�U�b.��X��ё��о�q��H��G�ٯ
��Vf�zn���p��=g
��8N�yڧ=��Ӕ�eQ��
1B%���} X�'�����!F�)�����:;�EY�V77��>w���Z
'����
Ax�N7�^p	7�AQ�����1V^>J�|C?PT�>�����W
Ё��
�@b{C�1u����1L)O�r��Ҥ�Y��u���O�wJ/��]`�����F�")d��Y�F��)yh�ԛ�s:���î�b-:�_���M�Js��6_o]!E���[�H�'|��x�1E��kJ$۪�H#���)�Z?g<Ds&
�Z}\H�֖�e�#5��Z��\CBw�O����B_ܺ��P��>N��{�V�
���B.��C��f�Z���|��i�f at i����ҽx�P��c��{"s�4�]W��37����O�]����
L>T�:�?%�m�+f�H��d�(�n9��/1�w�э�I
�����D�a�z��f��Dr����">�߽G���k��^���+�Ii����
�j<}J�m�
+O�
��i�6ފ�.+:�H��fI�6t���|;s粝ފ�f��Ș7ͣO�vm�!a�k7'PNR����j,Kb����/O�
+�f
�_xRp�MmkD	�q�@:|�i��B��XX��)�N��(+�hj�U��e�d��mz�c4�]�!v#.�
��V�\>�I�8/ڤ揧�!�8-�#x��$)�W+�
/�a�<�dğd�- 
TLo9�U%Nu��
����:M��+᥇���U�ZG��+ESd3<�GB�$�WC���-B�
�K��鿤Iu͗S����b�����Ν^�Ԋ�
�fE#�~�*_T��,	��&���v���jT��o�`�=B 	z��M
!
A�'�})����n����>nMѻ�~�p�g|��8�S�E)a��2���e�����f�_�:Y~뢕����J	���)
��Wz��x�e�*xz�a]F�yU�6���}�G
+)�^��L�����m���o-h9�?B����/0�HB�g�=�����1��S]�c�oh�T �V�xCy����|�h#Oa�6�!�d��,"}tR�K{,��GiB�si�|��L
z?���5A	�~j`
f��0S"dc#�
�
�;
����CW
6�v74�����9�:�9�N�
+=��]�=/\1
�)-4o���A_���;�W��S��{1
�5S&%�X�wΌN<�j����'%ԑW2R|���g>�p*fBV��XZ��w1��D#�N  �H�q9!
�f\
+����l�ԭ�������؂�٬��D���
+�jM�W�Bo�`޽p��d���Klyɣ:U,f���?_��-(�]x˘��)
��ʓFo�Πxox)_�m}�=<G�T�P
C�ͳQ�'�_af��m'Q#/Yvd�V��E��]��������I"s���|�/F�'�
�w
��a�b��=Dz�b^z����٬�Ð���tӮF���U��s�=
�A1Օ�H��Q�zl���7�U
C	ַLc�u������f&�!�5;b~�~9l�����U
+6?�
y�/&ϔ'|[<g?�}%.�����Ry��
+D���وwu8��-w�.@����*E��`�����Z�0g���0ܼ�u�t�@�Թ� ����g���޿0п�)	��`wAӼ�Yw�n���
�7?�c2��0��;�do���
A���1[�.ܙ�"rg",y�ϔv�*h�A���B�J�����^�4
�B�|��Eh�k��ac�4�0u.��
v!���>ӷ��y��J.C�������̰|�%1�t#TN(�|�8N���8X��
�j��[�Ƶ�S�E',�O�ìS�+I�f\�
/BR{�j�$+��Wxk��C���0�F
MY��f�a6e�?k:	$�5a��s�d>Sr]":���-{��'�Ʌ�%�)�������k�J��M�S��9�J
��#�j����%�
K������HNsT�T^�>k��
#���e%W�?�
��rU����#�*_F�x
ZRt�R�C/*�܌�RX���L7�V��}��v��2���TW;u�
Դ����|�
uH�V�c5�`��M����6A
9�[���s��r[/Y�mKP@ڞM-��`
+��k��Jz ca{���!�}�����P�A��w��&,{/�6��K�K8���$����=J
��L
40�&
�z����qџHf$��Um���4?���
+�ů�����NE�S(����_�Lk�.������^�k�X��ý|2�\k�#h����Ihn\��^z��]�S�C��
?�6�B
,��KmSu���"�js�&��N;�s7��� �gL�u��
A��ގ���y��ooh�1i6m���6=��
i��Ә��s�j�X0��!�6)礞����r��N��\_22�BJUo��3}"B{1ܶ|�y�cC
�Y�����ĺEFoeΜ��-�%m
�<e����y�>3-�������kl��@�bQߚ+5J#oK��˾��fB�j�
{����D�6[w�]����6n���
�ȶ�Ƀo�/�<��}�9��+i�s6���G`V4>9T)��6i�v��K9�����GŶx�q;(��~��62�qkMCw��v���q��D䥼z���Xi�g}΍��WB;·�pa
GJ�
�v'����l���H�^�vcѵ�_9��q#���I�1u�OFUb�Y�P{�N�
��{�X��/-0�6��ڄY^B�62��G��վ`�L��Л0�	��5t[;����ͯ�[;��t\o�/\�*����T�����{��
r
�e���
+�w�
59��~T�>����tG��S��䤙w���ᤔ��'L���);��_\���ι
1I&	�q��1��\6���S0pZZ��W��BZ�G�aKܽ[���MZgw���9Hwԓϗ���4� �d9S�[,r��/��M�P�M�+�X�>�c�l��<c(�Ju��

�i��P�����_�����;b�)}�~\tBz�/Ϗ��zcJV�
;}�8?&�2-Tu�~�V�+c}t�y#��-/s��y=P4�ǡ�~,eqOօ�%4�Lz����䯴`�pz������$�/�>+�.S�32
4�ۗ9	��_��'�,%Z�?8݁S[ƭMj�?\$P(�X�}?CY��G�"3��
��x<j�6
�Z3�S�Cd��O�_�X=�[�1��12�2���HXw~_��.�Mw�i�]����x'��\� ��ހJ�ww��8v8���z�XNTE�{$�p\����N��]�;��_���ۣ
ũ<�Y��7�v$�{A)�0��M,�{�X:.:]��_����f�l�՜ީjT�`��X��%�L��{�붾ᝧ�Q��@��v2{}�
8����e�g�Ipp��O^�\�
�{K5I,��67�2�D�fH����'z�/��^�,C�S�%�~nH�%�_ȷb�[���~g
%}>1[�v^u_5���x��kqS�7�O��B��Rr�����P8=�2n [...]
+v��_5f*�9�a����|�ž�ڗݟ��(_��Qv����GKy6�=M��L��{$$fV
��P`�R+Y��
�d�M�|$�r�bO;��.1�=�>�ȃD����E���,Dz���f1�	j�����Y=Z�tC̈́��nM�4�[�
��@G�"��{�x7�����_-�~
+endstream
+endobj
+2781 0 obj <<
+/Type /FontDescriptor
+/FontName /XWRTTW+CMSL9
+/Flags 4
+/FontBBox [-61 -250 1150 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 82
+/XHeight 431
+/CharSet (/a/c/d/e/f/g/i/l/m/n/o/p/r/s/t/u/x)
+/FontFile 2780 0 R
+>> endobj
+2782 0 obj <<
+/Length1 1188
+/Length2 3485
+/Length3 0
+/Length 4256      
+/Filter /FlateDecode
+>>
+stream
+xڭVy8���Ξ1J���'�b����}ϒ1�b2f���Ȓ�YRY���%�I�})Q$��Bv���t��������~������<��z�ŭ�
�D/ЄH�*"aHM����� �0DZڐ
��8"�M5��0��� ����TEA�C")����G
�~�P��?H�a��M��4
�#bp 5���
+
+`
R at r ��A�H ��P/�G��82%x�06��W*$S��#
�r �"�H�X��$2�N�?L�W�$ ��D����٥�ɣ�q��?DR $D,H&����a������5���8���HBY���b���Xk
�
x���'����h�O#p��F&���g��#P�I ����#Ō.�q4�C �
"�����?�0D,��(��h2

al#RB� ��i Hc8��D*�`�&
�&�!?ƪ�
+��$�H�0F�H�ĕ�8�L
ƒ��_(�0���1f��7�D�p/4� �'����chz���_�H���;�7�p��:�
RE pF�?H��q�:.�	���
WBp�W$���T4 8��#����
e<H���� �q� �/�Sq$��RU N }~�U
+
M�GW 8��QD,�a�a�w��->��oq$�!OFc^����( ��/�#)8ƾ����]�cLj�E%
@QC��H��B�����	 ��~�p��{���4�'b�.�ɨ��n|���
ι�r�� �s�'�7q�0;�lqj�t�heb����Cf�4>r�P�e��r>_ieln���U:콝`pdl:����i�Y�뷢Fk��c7�H*
,K�o�fc����]�6���{�6娄0j��G&����bKO�g4�`�;O�Z
RLbe_{�ry-�W�!�ށ�_��|1hx;5t��cOw�͊\���^l�+��Ćy�F�|sy&!o%ԊB9��cO��QxR��z�����)�n	��[��A
+3?��D��̸��2d���pa�z��Vu���칳ŵ:k�	a0��.�
+j��k��|zo
�6r8-;�c�,*Wӟ�&��'�T:�{��E��
+e�ڸWC��&;�	
�q/I(�(�4�ˢ3[M町Zk�U�$l��U'v��kD�N��Ru��ųN��,�dr�ZT�4Ƒ
��E��Z*���U��㳵H��˃��{���\��?�K�����(�q6�s�)��򐁇BO)�~|�9&yC�2mr'�g´JB�?ω�cȉ�(��KݘafOW��?ȱ��V�Qf�}=�kL�5 at _�nϻ��T6�s	k����A>B;!ꄭV��s�L����3��]B�+rD�#�"
+�3k��o���B��-�QK̼w�,$o�
y�+����n.����F���b������i��n]D�_�y����-�y����� �āB,�
�G*
+u�$�����L2��}��_Y�.����[���yըMsqf?K�K�zM�\Af7Ѭ�Eĭ3
B�a���>�t��7���\��<�jm���
�����otM
+�
-<[dg"zCX��
]<Χ�F5�G	�<���kߔqL/p�R���N�yH
&G�����4z���/�Rx�c�sF]Y at _��d 9�Z����0�N��0�luMk̳n at M&FN��n�nH�Po�QP�2��-�.e�O�C�
r_������Vh�ka0��9�ͭJN�����Zh
&��t�B��?�{V�?�{4�f
����
+D�b�î5
+��82�x�o�Zz���f
wk,o��#5�iU];AJ��6NFMQ���?e�zd=��S���vUӐ`�d|*��
YaP���h�a����ʗV��%� }���\~+�{3����_Q�
Nּ�v��r`�������T��v�}=�4_�A'���Bϱo$���(���5	<Բ=~o5ųa��`���闶�>�P�Ij��
/���I5�g�B�R���)6��Q{y��^	�<�a�^��̖%3�/�
N4�׷	��U�
qu�X����<8<�
g?�i��Ll��ኛ�����b�#;˞f`��)���$xGĚ�ã�
+�͕��W��L��	�r���}�=K����Ww"!Cz_���q�Ч��GQ'���鑻<�v�r�L��'�'�jr��\�x��f���͐o�ď���M��҇�f��
8���;�6j�'*uf(��v&�s��/.{|8�8����xC��
�Z��¸dn��U�{�=��
�Q�8gϛ�^�#��
����XM�e2
����i�)��m	���r��g���4
Ԉ��ҷ"@\��bQ�o���c�K܊Wj�q|�V���O�}���o�؛}ݤ����f��J�'[�0g�������4,` �y`4�j�����g��xo�]��S��io&T��'&�
�z�:,F���_���N�gH�x=�8�8
փq&'��'��_��N:�����/��)tiT�1m����d�o�3��� �o�r���oA7&��s�����`�K�)կY�i��TP6Fe\Ucq�����f����n��3�]�٘[�p�����AHċ~���
h�I��Ґb� ��xcv=G8�m�}�<]�Rƞ�����s��D�S*KZ�2:_
t9fꓽ��s�\"��z^���
sf͚�P3�[����ؽ��
+&o��J�FHu��
���.���$�iT�-��r��U`�+9�P���YA���ԇ�m��(z
0m����K�
o'<S_�`"@[7k6�J�x	>���4a��r���hI�:�
OG�3��;�pYE���ue^�{�B��K�(-E�_���Ձi
˴�k��Zϝ(3�t9�"�g��������h�/}+����O����(��)G�+��eI�d���F	�����cA���������{�W[��P���cF{#rp((f��Ԝ��o��{ "�����w�ş�����g(�5��\܎mHlz��?���<��
iK�bR몋(��5\H�N�n�T,�n�I����h&���F,](��z��	�۽�Jf��9a������=�yLV���:�̽ڇ��L=v��N�C������&3�=R	����/@=<F03�"gI��Xʷ��b�n3�
ȫ�
W��b��Z���-u�C����m����x��^Y�c�L��8��2���*�*�V���+��፥�uc�2OO�8�M��ó�x�:�?}�VƼ�Xv.$��
���0Y�0��/�3챴��;�QKߩa��W�'�͓.:��PΩ4�']���k>����wbҳ��C�e�폜}�0X6��)�yI$~u#�ȣoȉ����%��\�j�:?��&%�U�r��j�������p�2����6[�o�!�E�։:U���y��uF���u� 
�e�a�03����֚,���f!�q�1���:��`�6%�.�	�:
X:�?:�m~æ�#��U�d�&��
��t�d���&=5�o�Kp���̝{$���u�A
+��#���}t^C�b*~�]֗���VI9��Gd�k���M������ڦ���6�+(�>���(���37�8�����(�7��ze�R�O'G�Nx�j����59�X�c�/A�p8�r
+�K8+]��L��ʌe��(��
7�8 -�SH�
U3�ݯ8���
�p,_
S��q�\~�x�X
�|(��>�Б���پɛ�h�z�2�-0�
+X�1��9
7L^�;ғb��+R��V�M�4u�N$�%�,|Ȇ�=vU�'=H�z�! �Uʋ��	��&5����Թ#K�}Wv�^�4�'�O�(��Q��/

�z��M��9�&N]�mQky�G�d�X�6/��O��ݼ��r14��jy��u2���~j�
��̾�ej�̲�;7R�2Yk��_��N�u�l��aAႈĆ�S�Ll��DlB�}>�`��9��۸ߣҾ�XYҫ7c�>�Ԥm�ԙ7t�05m�=X�n��t��?L���k��7��S���c�+c0��X��+�f֗�•��]=o������Y��!_z��������[wM�$Ē��m�Ov%ޠ?n{� �KYj;*Oh
Y�^	�2aS20
%��2]��q{��tL)E��$���^�䴡��\��ъ��U�������h�?��٨N�I�T��H�8
+[f5��cO�����^ų�N�E��(�ٳ��S�q�O����J�1wu����4��{��>��BD�1p��E��.��7\zz�ŕ�5Oc�����hD#Ac�җ��-��o�����6
+endstream
+endobj
+2783 0 obj <<
+/Type /FontDescriptor
+/FontName /TGVDFU+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 85
+/XHeight 431
+/CharSet (/approxequal/arrowleft/asteriskmath/bar/bardbl/braceleft/braceright/bullet/element/equivalence/greaterequal/infinity/lessequal/minus/multiply/negationslash/periodcentered/plusminus/radical/section/similar)
+/FontFile 2782 0 R
+>> endobj
+2784 0 obj <<
+/Length1 745
+/Length2 604
+/Length3 0
+/Length 1118      
+/Filter /FlateDecode
+>>
+stream
+x�SU
�uL�OJu��+�5�3�Rp�
�4U0�3�RUu.JM,���sI,I�R0��4Tp,MW04U00�22�24�RUp�/�,�L�(Q�p�)2Wp�M-�LN�S�M,�H����������ZR������Q��Z�ZT����eh����\������ǥr�g^Z��9D8�� &U�ZT
t��Б�
+@'����T*���q����J���B7ܭ4'�/1d<(�0�s3s*�
+�s
JKR�|�SR��Е��B�曚�Y��.�Y����옗����kh�g`l
+��,vˬHM	�,I�PHK�)N��楠;z`��Fx�xiCb,���WRY��`�P
�"��0*ʬP�6�300*B+�.׼���̼t#S3�Ģ��J.�QF��
+Ն
+�y)�
+�@���� �( C�V!-��
�&
+�E�@���0���_Qmd��kib�`hTnniX��.���(5��N�a�e�/5�"5����d떬���Vֹ.���U��牵/o���Q7;3�6�t^�bzɒW
m�;,�}Q�+�z�p��^���/���l�Z�,bB��~����]�x�i���<\6cN�#i��E�gu*����\�g^�
�����߻�-�4IKI���
+���b�w�_�#���</:����A��o[���~�����*�������k�����U�/fk��[�j�+��U��L=�\�0����n��m�!*2%��X*�������&����
gUOR[s�y'wP��^S��5�>����򥐠�
OT	d(��,�����w9�_�w�\x�ۭ��9�9������Lh�_��*_�r~�&b6q
��r�v'^mޮ��c沷U�>�1viǬ\�J|���EL8��m���7f_>1߶w׉8�01�Ъ����/��\ݞ�|9���c�ɕ9]��Ϫ9�w�\��p��
�k�;zo���<�����_��x��]��]�4^&DLH��
׵6M�A!�K��|,���}�~����_n�h����y�������E_���ú���3��5O\B�C��.ts[43�~V���z��*�
sl�`���rMGB���h1��z�.�b�<�'>V����y������3��a�+�֬b�!�͌�#����~h����M� �!
�
+endstream
+endobj
+2785 0 obj <<
+/Type /FontDescriptor
+/FontName /EXPITJ+CMSY5
+/Flags 4
+/FontBBox [21 -944 1448 791]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 101
+/XHeight 431
+/CharSet (/prime)
+/FontFile 2784 0 R
+>> endobj
+2786 0 obj <<
+/Length1 763
+/Length2 673
+/Length3 0
+/Length 1198      
+/Filter /FlateDecode
+>>
+stream
+xڭ�}PTU�CJa�
�t���q7p�eŁm�%�
��g��w�]���v�@%5RC
CE0���DH�b���4i�00Q �&����6���>�s��;�9!A�,���`
+E2<��I�,=��X�񅜐
U
��d% [�R�`b ���0�X�	2Jo��6�a�p�)Hu�Fj	�UL>Ա3�*dQj
H	d:W@&4@�q>� ��
ȃZDrN�TRC��97��[&HX(�B��H�p����dI����S�!W��!=�V�a��@��F� ��!M.�n�sl�GF��n*�"�ZJj	xX4_��x��
)�
qb��@�"
pV�$��MoD�1#-;I
9w��=�
+�L�E��y�ƞ�lF42�\!_(�X#�����`�դ���"q
PѴ����Db1�b �84hf�|�b�%�M�h(��T!�i48�Y!:�4b����JJ��V
�y+��Db���Ǩ6�4$�ٗæ3_k�(�f���ݤ����;�eYC�꺞S/	ܟ8G��|�s��S�f��di��cdžZ>��n��N
_�C���-ߥ���9�RQs"��bq�V����b�ҿ#C�R��V�Z!頇ٸQ}�ܭ�#����u�������<��~I��k������
�a�ѡ����F}�j座#q�N4s˺�"�7��~7���xwv.�]��Y�0�/��]�/O�~"��W��<<\3��_�#�j�H��ᨎ��Y
-;Mi�g��W���+gpLJ�S
���vU��_���v=4/���5��b�����e�10����ƨo�Xgܹ�]^�){�c�'��NT_]Ե�Q��M�
+�^#���6}Vt4r��Z�M겊����}R��އ����G{l�V,-R_痕6T7�4>
�p����r�G�
���[�;�~W8�m��M:a���
��>T*#�՜R�Atm�bU�-��
�ع.��\��p����pG�l�r|[���?,���ך�B���1�Oޖ��8��l���4ojzD[I2X�X
���`_���E�:�gpf�ҖO
��
\t��q��|_�X��?�R
�8x[IKܨ��'��j+o�K��N�~}qh$ȴ�Ԑ����EnM	���}��k�Q��5�	X�wP�m%�i-�
4u����q;����M븉��s�c�� ��n��������^���?s�=�
+endstream
+endobj
+2787 0 obj <<
+/Type /FontDescriptor
+/FontName /ZQLTBN+CMSY7
+/Flags 4
+/FontBBox [-15 -951 1252 782]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 93
+/XHeight 431
+/CharSet (/minus/prime)
+/FontFile 2786 0 R
+>> endobj
+2788 0 obj <<
+/Length1 1369
+/Length2 10109
+/Length3 0
+/Length 10910     
+/Filter /FlateDecode
+>>
+stream
+xڭ�UT\�֨q
����������4 x� ���.	���]�kp��}���s_��~X߬�f}U���T�U5��,�́��N`&6f6~����
+����U
��J4�:;I���� 6>>v�4����������ƍD�p�����h%��J��9A�fN %3�
�񭆅�@����b�98 �����t�܁��Hll K[
0�
hm��򗓜��3��?aK��;���Ih�֤�IZ:;9x,�VH,��o��\�h�wqi7e3ǿ���S�ϸ������d8;~pA %gK ��Su���SZں9���
����B���`b�df��O��U��h�j
��X�9����,���m���`�S���b����{P���	���`�7�of���6	d�	0`}�e��ķ��^��dRNΖ�N� v.n�d�����#����	 z��0;9��n��/����׹rsX��
+��x ,�/�E�_��H�C<� ���m��'�E�_z���/��T���j��C�� �魦ƿ�VS�z{�X��!���f��
M����'�-j�/��d����Me��X�����ŷA�?��/t�#�M��|3����m��7s�?�M��Ro��L�f����8��o��Aη�f ���0�[�����X-ۛ���&
�߄]����?����|�w���=�E�7�?�M��o��E\���#7�����/)n 7����i�z[ ���[��/[پu*�	�@Z�s��K�-�ʛ,��s%N-
+
m�M`>Z��5LhI/1B0�l�ГN*X,��6��|>j��,`
�`��i��Y
C
~��Fs�
�[$����p�Dq���[�x�ƓKpS2?��������"r�%�n�ѷ�D����ב�c�<�łA<ôk��E���i��T��oJг�BO��t�V�cHl��d��Y|���k���3�ϩ�.(�����M��b�ļ?斀�:�*Ӭ�`6��)�b��/���'��;�
e3j�x
!������J3���<cU�?��b9�U��0����
!3�&`��^xa�?78ǽ��BR�O:��Lgi�j?�X̄�VJ����FxE�`�������,����Xu�%�.Z���x�SqvH.�
+OO�}2�ױL0Ȼ9C���1y����ҵ&�%���Ҙ�������G+XV)%���>$o^����c���d"��:A�kC
	3�\��x0P\N��e
H����A;�E�q�W��-��5Y�J
��q�Se�AG�,�U�\K^,X�(iD��u�CT����L
c)�i�CO�hkY(�R>ʿkݣQ*u��hm9�����O�~��E�d�;'�餕�ce��
��
������9cbe&�w�d��F��J
!lH�ّ�
����t���K��Pg<>��NG�չ?Dpy�@6�Թ�l�?�p#�e`��L�5k����E�
�}��Y�	u�4
$�p��m
��a�tnSy�����'���W�ߓtg�^�x�I��w_@`��2<$��ء0��F�>�Oe�x�tn
6M�A��7k�g�n���P�1��d�!�N��2�����r����_�:=I�2
�Q!�P�~��}�IO�@����W�
��EA]$F�Q �!�|��������J������u��"tQ�Ot+@#_i�@
�E�j��*�P�g��H�g�<�W��F
�⭫C���5�f��
����#�v��a���npA褭J�N�}�Ѕ�~���Mb>�U尉�B��I;����BO�<8?4�!��q=��
-�|K����o�x(�2��ey'ق���l��w�=+��P�n��������M~�
r�[J a�H���]��=��������C�
m���YoyXWfʿل(=�a��)�.ﶷJ	0OqӨH���ψ ��3��?@�3/��
?x}
H�lcq��;�s�
+F���0������NQ8���<��J5��
����]��z'8cI�,�`�N�э�\WV;�YE���{L�i��D})��\��֍���
�I�$[�+
+��ɓ'�ufy�`�
+�/�KS�+�����0���d;�j�� ��G��W4���d�b2M�[�Om�
+�¼g�
+Ǻ�*|?7�[����mYQ����Rl�Ie~#p�����
+�I�&��_�W���s��
7�3@

�#Q���dg�
�U�+��� ��^��_�7�
+P�4�8/S#~�2����`#�C#
+�S�i�J�\�?5k}���._��\��{B����E:#
~ ����5�,���K���]

(s�&j���Gi��%�iD�]�(���h�zH;�h��q�J�Z[�x��w�w���Y�r��B7�#�!�D�d	#�F�,;�t'���h��P÷Qߎ�q��x».x�-�fTq�+^Ad���K;
�Yun��d���^3�va �6����� ����#����D?
+m�I�.��E��^0A�Q=�x�TY]��<�F�K��7 
B[��evT��c�χv�;tt
�g����7���R]�}���2��ݪ4s6�Ļ#g�
���t��i�@����9��N�oc���)�\��5��v�~���h
��o�j�h�4: Jc�S�]����^�a���Q%�S��q�%x����´n>����V��g
�ՋMf�����)iV[k��)�P���.�
+�"X�rB���w
�j
��hd��fą6!>>� �d�CJS̪AG�l�#���!�d��5o��۪]��9��b�R>r��Z���:i�k.���
���Rk�=���Y��6�
�W�3·��EЦt������_H�.R��"u�
+
z�}��6���67O����-5�ŗ�� ��-I?��>��'�Ab�8���a^���	k���&Yav��
�Ru`#�;�	&��X:�0���9�vtGh
hM��2���[�"3ҵ
X��WA�ܽ��˼��XԌق���m}��OpA��:�z�X�������J .|�$�qc�k�`H��A���齱� �}q���:�P����M�
֐�
Bi���
�(�yRs}
R	�
��v_�����
+��1�A�px��:-��"��:
+���LBjB�-i��&��j��QBG+h	}J�8��8�+Cĭ?vJ�;̒��;�9]U�F��&Kd����6؟��t]S��[1!W�_L��ڜa1u[�~;�q��Lf�.������Es�`?�����/��ba��0��)%ʥd���T3�ֱ
+txQ��字��,o���L�viF.ڝ�\[�9g�
t
V���&���s�
�9ue�i����G7D�
P�}W�a���M�pW��,;U|���Ы9*��ǡ�
Y��&,.1l�n�$���
+T�� Lf?�J `V!8����!�6��˫�'�3�:w�($�L9�%}
}x>;��u6Ч?
+�#m-�~}�u$�=Us�_+�F�Ԗ�LUDN��u/=��
`ͨ�/��`8y�@
���	�����Ap�$��i~/0��� 5二 �>�(I�����~��솢Nv�l��0���_��7�w�R�N�E�J�`2Qw����N��i������	�*GR�zq����M�2C��*��SC;���?�<[x-7d�-���Q!<��?�5��dݪuT�� ŷ�5�qmʡ,me�Q��5�,����ڒڤ~�
+bYՔW�S�ʱ틄�CL��[��^���z��̇#�ag���%v��3`BA��J�)X7]��P-�Ԟ�s����ZP�'
-�/yX[S&T�X
+~�*��OA۷ȮU�M�"�����G�h�^]��3Wn�Q
))I��>���ERe#��w
�P�3�Qx�x}�+�/\��P������,�؛
+P�j��ӄJ{$6��PI�v��ƈ �"���C�%��"N���j�9AQT3ʋ/_O� �ax�j�(==Q/a*>N�_����6\#
�*tX����	�j�3��Zכ7��˖�E�6Jϸ���^5�gE�{ 㧧~Vd;�<�
��C�#
}�a!���S�</�P&
o���mJ�t��Fr���F�YPӻ���
FBq�� Y�^�����D◹M0荖$)�rF��������
��dIò:\z1b�1M�k���C�ʵnp��(x�x�Z����8�٢�5J;e�
��ݝkXf9�RvJ���b_
凉�~�>T��{ćbY��}Qs��њM*9�
J
m�
��~}?n
E��
%�-����r%dwAB���q:6��ǧQ
+IU<$�Vq��n��p�2�b��B[�,|�{7�CD��\m�%����L���(���m1JC���WB��3�N�����
B:�j_��nh#
�l���Ș�����˖E������
�)x�O�e�3���ƹh�+pDeAZ��ߊ�g�|o+��Jy���+@$hu����
��>0�M�&o��)��3�OU2sʷYz
�MN~�T��Pzv�w��ILz�v�i
�"�,���	
+/��������T���`T��Nb�'�
�9��=�a�y�'��Q���)�"��C��Q���F��v��$���S��nK=����z�ځ�Ǔ_vɈ��C4�n�{#�����7�R��d�U���І��^N�$��}�ݺ/#��krb��^G
ͨ[�<�\�JԳ�o"���\F�}�����n�������F2f�9z*�p��U�j�ǹ,^�
�₱?�
&"ɀH=��L���� ����fk��{��!�����w�E�y��&�������H��[��z�nQ�N�L�f
�8n`�.�e
�LK��	`(B��}%pB]z[�ᦦ.A�XP �Ȁ�]'��?O
19}��JU
I�W��ۉx0��
O����\���]�sa
+�
�궎/_����i���h� �ݞ���bv��"�*G�oI���(�RN���ɯ�6>�y2ل�B�Y}\������cJ`t
^�
+�tm���^�I��
}���X�`���_}��� �N��b��@"U���l at 4�[�Iɷ���D�g��W��d
���߱�ш�?��p"����5�q�^��Ek�x�
xX�l�#�{\���^�����6"#��ϟ�Y"�Q�I���I���$)���
�m>�IS�ݭiq�Ŭ&�:��Q��z��)�a$?g�Ay�����[��C�oC�ϟk��<|�߫-�Ev�X��r<�Ժ�\�Pi�ʟ�
9c�no��8�YW�����5�o'��&��N���z�)h�駔zٝ*!2j����\�M�6��%�hx|,�Zk4���W^Ar��O�4�Od�/�]*�^
�
l:!}�ǹ��|Fe��,��B����l�v�z� ?d!	��Fculq뗗�(��Wy;����W��M/��-��`9*iě�+�t�$ڽ��:���z$���8E�����L�Cy�.2��7|]ia�f�O�K�9<:�_��V�}@��d��~�
�瘑t�x��wN��!Mdv6���_�`�e

�='�]���������k��E��B
�qV
5S���[F�Eۊ�" �wT\�S4B�h�ݢ��o
a��C(�)�o��
�|?Q{�"���r�_�@�-����'��B=u��Ӕ/P����j�l<�����d��bJ����d��PX�Ri-
~�����^��a�){c
*���3‘i�q!�f
���S���H�U����"�Hq�/ۼLt�>}�cx����Ǩ�ឌ���D�շ?�����3�ԨU
�1 �Q�T%R4W\[v���XY��o�l;Oxm���)#os�vŶ(�|�BU
��$���;S�
����Ck���T���wh����T�� A�/%�I�D}V�b���a��.r���Q+��7.y|�G��z�
����Ó��R嚂
�
�5{8�汩}��V:�"|
Ley�Yhb�����.x�i?Մ�����
������X&��N��VA-�m[ڊƏ}��F�BJ�����b8
�N��A�r�x3Sq*4��=��t�V�p�C����LسS��/��(�R�3ѯL��D��:��{GE�O��A��Ŭ�Us�26�}،'�t�H6ib�ݨ|��2��
+�3�Wz�8��ch��߫�
}*�C 8�V��Ǡ
	�q��(�O1���C�)e�!bW�u�P��V��k(��U��
+ed���Y����E����O�
�)�^�WPȠ]���'���
�5G'.������`w�y��TCBFˈ�g}l�J�g����h+��E�`P��
��8Ӑ�
�:���8��Vޮ
��ؾOGL_�
+�
��J��V�`A�H��
c��Y���郢�*�m��pp�I�K�I~u�2���yq$e*V�ԇ�@���I���=�,�X��Wt���0��̰"D,]!23�Vlb�
��|	x�n�Z��6���y5�ExT׊Q�����c,k���,>���!18���r1��4���u��.l��q�#����~{m&�Ӵ�YGyZ)��8�+��
3
�xI�M�Er��ex��>`Ƿ�Jy��`(��y!82lm��R����f/�+��|�`!���^jCީ��fx6�!{}���Ǣs�6����
�ll
k����V�j�	{��a
(��OB��
��c��+X'X:��o�̻Tǜ��z�}{r���{>%���}ea�sn5�'�3�^W��Xw�͊� �8Lhͩm���)f���w<�Ve1����q�}��O
+��m�y�18?ɦ?�w̠����}t�pA�h��j��mgL� T-��2m�?|$��
>w��@j��D�J����By�ix-����Tq
��
p�+I1��
bj Rq��5%��ô]�p�n�:b��\�P�G��o
iﰑf�W7>����
+�J\�~l��_-�
��e����Pvl�:�ܐ:-A�X=��e�{��4�D�y/�����1�$-��O�|f������2�rro�t���&�J
z���!�.
W,�K��X�)�t�
�����

)$/ՔMːU�R{��x�P�?np8�R�~��AL�Mی=7T�2�n�N�qg��&%���ѿY
��O'�h��XLkӬ��4�:/[H/+��.�S	~�,�'�Z�po@�_�Q
d���a��F
+��'��9��vc��f�i
Mz #a����o����Qi��U����m���Q��L~��YE��*��F�H�"��隀����@�4/��P��R5��&��u2��w͹d[���
Xs64�;�,��uO�wi��|�G�A�%*�i�\�@��=�K՗xc��fg��Y'����d巡�H��
+��F��w���3,�
���$��s��ih���2�O:�\��zcc���G<ի<�ER��n�
��:�Rc��>I(LC�H"lC����/���ץxg?���Bi�A��T��,����O�.���Ϩ#+��
�
�X\9�����
���@��E���	T�
+�yH�d�
���!���4Ճc�(�;0���+�p���)Z\d�J�-����)mO֝V�.4xe;(Y�3�v��{��(�-�D�j��k�5bֻ�zq�wG����M����,L��.�A19�s
��?2F"*b��(f
+�C1���f:6��R?կu��b	3��ּH��JZ�B���E_
b͘-
+�G5$Ƒ <�I�
�V�L	�B 7�lV����~�X���
���Mݥ��o �󬅊�d�)*d���
+O�B�q]�����{���K�0������gwu8
w*���
�i��w����\�%*�d0K�;�f��b�
����`h���iKoW,5�T���!�kڝ���w��)ŋi����­:~c�����F���?�0�v_ʙ�'�z�����z�/�W�8�o>U�������!��הh��
�rD�W��*ƶ
+
���$T6��b����ڽq���:]
I���x\S�W^0;�D%d��쨒�k��М���
��2u�b�>����
ڤ5�KK�nL	�Q�IR��jx3�a]̽�T�iT����^��_#3
ҩ	D��
��Hf�V�S�S�������M}5����?���(L�R �{rA��֟�
-����-:iE�ѷf`���wڍ�����d�>E����*L��
��3�����_ߔ�
���'J��<���6g:sL��c#"���8Q��|����g�.+�Ϙ��<}��2��Y������3/�
���˽�c��H���.@�	���
�
�����p7L%{x�e��+1
�ns���H�Dp��]2�w�a��5�n�[��PeOmN�����W�(�� ���x�>ɍ�Jь�;�]Y1iC�<�j��Wh�?��r�i�t����M����Ѝ (d�>A�\�p��
\��\9_��@�An
B�ó{^�i�O=Q{lS[�������xT����A=C�Wκڜ�H�8��w�B,�9��� ���cۿ�ґA3`��S�
��Ca`5���d�?b{c��)R}���G2?��'�ɇG�a[�$|�~�,��x��O&�H-�
����X�bg��~hF��j7� j7,��s��8�G씈
K	l�����-��|L`�t��2
�݊�����ch�ķ��br?-���������`}.�f�J��!C�Ժ��Mde�!��
�fu�1����~!x>oڙVF�֔A+ 
N���ԻPz�^P��l��VEOD砨*�L
��
5��z��~���
+��Y���5N��;�z��oOA{7'�Iʑ��*c���_�U���&��e{B�ˎ��:%v_�a��Zr)����\S�!� ����89j��N	a2�nj'SA݅��mJ���:v��
;Vk�`��ˠ�����
��&}֐w>݄�L�Ux�_m#Q���ps|G�Ƴ�����+%�\#'�Z�W��^��\
+6�0vF�`=*����
+��|
I߁�ś� Bi�}
:��p=�xmc�J�4����!E�"��
���=��ƥ6HG���˪Ⱦ��|�����]��XL�Щ�`�MJ�˜Y���K
+o�X�3��j~	8K:;NI;�n�(�n#Q����~ݤM�Q�	æ/ڲ��c��f)s΄l)�I���̯�9�����v�Z�ne���FA���Uo<G��
���
�0`�qL;H�s��P�+��
�@��t��؇Q��k��Nnu��
�|�Du��U��� za��캝�tS��j�@m��;�,^��Q�~n�֍�vAly��'ȸ�4�iЫ���lک�{
2�,2loI��v߂
��_cy�
+�
+:�-/Z?�������Hs�Of7
��c��o	�.F��^0��*��,.EN/��'KgS�d��)�.��Qc�
>f�HR�%� ��Sc�&��ȿ(m
S_�'qy�pm�U��Y�2K�B��qۣ���[�70o*m�0()(u���(t
���ֲRb�ٞ.ycB�L1��gy
����x����@�°EQ�����MS/��A�Y��J��9/o �
��+��n7�A���n�-��|�B���ٴ���_S�2	��kܕ��n
ƁOo��e�5��^,|&��ܾ�cv�x���0����m�a���Y� ��BF�aZ,f1�V�n���+�E]�GE�4r�Z���jnw���LU�Cw�X�x.iXk�B�lt
]\����<?��j�f�^�w���/�/m_�0Q�r���*g4�n -6�-�H��GTd�
����
��JW�߫6Y}1#����C-M����絍��K\��޻�T�޹���͓���S����Z��
J�ZL)
+w��!�����u���-]��q����
=(c�Ar�|N}�~F!
G�Z���²���"��~R���^��ʄ�@�4�a/�򀶔r�<d<���
���VY�|U��iS��Ƨi]�][L��E��ҽ��X��r8
+#�%mk�S{ҷ.-��I{�7"R��l����h���
~s�z�����圶;d����/���"<��g�riA/
�q����Q����+��Y��nC���L�Bl���#��h�;���m�w��s'�hu����T$��2�L�0�G��uS�!�+��(��8�J�fD���q���(dž��c��ٜҩ��w��	�����(��y����b���u�u���(��
��YyB�P��+�6H�Y��]��CUh��P�V}j��eg��#���#x��y�%ٜb�$;4�)�
�����[�ϓ���/;0��͡h��gC��T;]ȓ�C<c�$:?STp��d30"����5�R�P�(�������$��9��@���m{��hfВ�EA��%
+l�f�
��D����e������
�"�W@�a#_j-�6LH�l�,'g���w	M�E�}���Q1�	�ć�8����s��C1M�:)��A�%\R�ə"�{s&bt- ��Lf���ֻ�Y�:7�)�B�	��zh���P � �]�kR���49��1A#
o2Ǩ�3��'�ۇ*$X/yh�.��kof���

+c	IvN?G�͏�χAJ���=p� U����m>Л<g��A� G/Aot��/��K�
��@�8�Ή:'��)�y�-�̋7</-���**�.�ҳ]���5u�vٟ+�7��y��
+-8u=�`�QW�d�T'M�\��g��
+	�*5�֋=��Ke@�6L+� �r�����?�榬-���N�J rb�J�]��՞�S"T ���Xp�A�s\��&�)z�JN�h���kS�� ���Aj����'���|\�d]�B)����"|8X�ǂiPz1�o�d��!�[��[�r�Gx�[�?D��2���O'��w��qO���;GJ�jD�:dq�J0dT`Qp�ί<=��vr�q1��6����69
+endstream
+endobj
+2789 0 obj <<
+/Type /FontDescriptor
+/FontName /IKYAIU+CMTI10
+/Flags 4
+/FontBBox [-163 -250 1146 969]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 68
+/XHeight 431
+/CharSet (/A/C/D/E/H/I/J/M/N/O/P/S/T/a/ampersand/b/c/d/e/f/ff/ffl/g/h/i/k/l/m/n/o/p/parenright/period/q/r/s/t/u/v/w/x/y)
+/FontFile 2788 0 R
+>> endobj
+2790 0 obj <<
+/Length1 1097
+/Length2 5697
+/Length3 0
+/Length 6380      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\�۷ǑnQ��G�Bf�#�Hw3

1CHHHI	H#J��"� %�H7H��(\������~�7�w�����ޛ󮎾��
���Fy
+@�C$M5� �&��T� `�H4J扐 P(��r  �D,&)*L�	(��|1HGO�G�g�8 �� �0�	�tD�^���\ }4
���ȹ� z�� �
�7��>)�!ក-��"�ӑ�

��+l�����7�qm
+�6	�-ڡQ.��
žTP
}���v��a�͕�\\�`���kJ�'sE��������� �h;��RcĿ�i"�^��̪y�\�p9��
�����+��PF� �t��pG�
���+�@��������!��d�hd���c�+�C�<
|� ����7_	������`�u����?��)��h;$�`
̗|�JHT� H�
�@�\;��B{^/�' أ1����( (�g�_$*���� ��� ��_���K�,���+m�&( �/A�`@��7� ���P���$�o�kQ�������kY���Z��o�\�~�k]�ox���� ����z����n�~�k]���Z��o[���
��%��G��
�B��?-
+���U��`(Ͽ���U��#�o'Ⴠ�N���RaNiUE�J�C� 挂����2��o�K�
�T Xo��rB��J��(��]d��{��/>y�����B�h�ma�ە��z��U��ۊ[5��4�ɂ�g�����<��h����_G��A��Sd�v
������SF
	��;*�|�ԛ.:�'ԗS
�s#γИlM���s���}��v��l���'z:xG3�MD7����
/�U��4&r7����s��n��
��et
/_������q����M�
����
��W2��`Klt
�Vc7
	s�r����.X
~R���eP�7c59o]�sf���j㋽w�ũvh�[$$U����>�	� R{�M�F�O�qX��͹1�����
U�j�[�5�'ƥʱ��
l:�pںx��M�&��b#t>6�N5���b�]��f��;k9��s������
�w�u3�<V��?���m����=��Y"�	��N�hR�8e& �F =X�k���,j �=�
A���Y!j�ָG�i�˓� �����ё�跃+#��AqAI�������u�|l�jT�^0�
Q�W�u���Yn��LN�‡=nR�
�x,��Α��/߈�ڍ�$�͓d��"���OE�+2"œi�G�SK*"�7D�z�8.t�}k���(�W��d�vn�r�څ��T��J��Ց��L�z�?&^N��Z�]m�(�7J������}uG���;V6t���E��G#�O�
0~>TA��Q^0�(�I�D��/�a*u�#�����,-P��iZM� ��_�?�i���
2
+�rl���&>Ό�	�c�/�'VHH2���ڟZ5��d
� �xJ
^N~�
Giő8AX��`�(��
G�0�X@��¦!��Z/U��8��b�J��
Vb�{6,�-�=�%�߄�dc�
$?��\�I5�|�q���kW^Fa峾�?�l�g�y%�> �����XUBQ,�!:m7�L���B5Ēv]U=����,BԈH�4�L0�[��-����ol���M��
�G�
�T"���`��%��ϰ
ydy`�W��
R�F�$���#��ԏ(�,	hioz��k�!m�&1�\
+��۩K
��ʩC��N
��1+<o���K�-�V��KR]а9?Pn�>+QL_��Hyk�z�jЬV��꒻z�:�������w��
+d�=M��� yFwԬ�I�[Iţ�N���'��#ݕû��Z��b<�C(s谄aAg^mX��`t)�w�ۉ�K<z. $��
+dN�Wn��Kwm���G��
E�3��Q��o��mTo1��Q���Ƌ�|�P�  �N�GC����HQو��D���A�i���^&_tՏ1m?�-,n^�6ܑ_�b%�R��3�c���>��
���
�[m�D����ލ���Kv�ܢ@�[/���)�SQ����
��3i���a(�!Uc���=���4(
�
#Q)�<��a�f�tb!>�$ _̦P�,\ٳ�P�22
�:J9
�|r�
+.��*�H�����N�P�E)!{�7C���*o��ъ�æU/����j��!�#�a��	\���v����c���9�謟��J���C8K��n�F8�������
�77Z5-�7��\�\TP'k�q��UN%\v� MM�%�"�T�T:�ų��AT2������e^�b&YIa���jM��ɸ[��j�����9�����j�ݙEr#��\��
��)x��Ԓ}�����U�z�O�D���::�jo���镠�R%����X�8���F
��h��<Ԉ	f�2�u�u��δp����8�$n�ү���1���Q��K�A��
򜒡y�"&77ts�����,�=��6���"�9i�#}6��U���$j"���Rғ�'n�{ v������(�^��^?6�4U��亰��j��뢏a'�լ�K��%X��P�*������<3�g�IM�!���)&�3��)�����
�*C��vh@��[�|[�FC��
��l/Sy��'1,b�����C6����zp:x���N�6aD [...]
�r���Xr��#�-k^�?
&�{7�&��[�(��,��)*|3�����dߗ�6�Vp�j���3c3�-��\_�
3��B>�P
+��)C&kvm�xf�,.Ic�E� ��ա����=�:�Tu8\�ꚤ9��l�D2�kpj�h
+;��s��4�Ѵ�	Y[�tE������\<zoh��9�ⴏ���U-A4��|���9%��\��œ���a�Z��5Š��|���'kX�w�\� 0�4X��w���!���
�{h��c0۰�h�y{�˹���R�x��
�^�7���%lB$�-AolR 0��B��N�����3��YWB+��;��-�,u���.�(�[*���o��g
{d랬�7Ͻ�
"�i��A�ᵘ�����=���
+�+g�B;�93��T��0��l@ͳbg�Z���M=J�h������l6�ܞ�J(
��(oI��� >9I�v|8i�/�Q
�!�]�a�
+oϜ����"�A]`��:�
&NJ��fҬ�������euO<CN���}��<<�Y�X�pAG)���}�
�
ʓE�,m�-p�2/Y�U��޴�;�^��]�y�,��� 7���$����;�LS��^��l�J����%�qѻ�4�0����}^��0I~c�`q2E�u����I��"�z'�՟~��a���֠;�OV`ė��@垾K���T�
�%l�p	$ěQ�k����Y��6ކ�=����\oz�6���$.��la����dD�HE��[���
 �x����Pa0D��my����/sb}��[e������������"Ŝ�Lv�F,�%���6C�P����w{/�"��m�q;�`���*��X� g�6
+��`�(,�%l��
+r��}W/�Ťwux��
C�&"�� �0X�i�p;���9�4N�B3u3�T�5Z��Z�0GV"�ĕت��j�y�� � Vw[�
)����ӥ1 �N�(�TW<
�C
>X��J>�#�H�Q��%�\�Z3
o9�R{@7ߔ���l�;�j��7��H�=�JF��.�S
ɁT*���HO0��s8�P�^ł�.Ō�'�<��D!Z�H����RgI6���#�fW��Ƽ�݁�4�K��.�vT:C&[B)LW���Ɲ����w��a�o�A�Q'��
�(�Aw�\��T�\�uQɼUǥ�,��K�7[J哕��^-���VK��e�C�����
+)-S�뚼�&т�g*��F.��~VjI������
����ߠ��x$td?t�M΢���I�5�r��;h�4O<���=��x�xs���Z����@�
+bUr[�!cpTᘃ��%�UJȗ�*h{�\�g�
Z"=Z�ʔ��^��s
�M
r
>٬��
����(�m��C�W|�.Mz��]������_n�=�;��r����;��O�M
U��I�g�	sj��J=+�1.Mk _��La3���-V^�[��6�J��C8�\�aFG�Aj��v��O�2�B.�8����z��o�������&�� �\��q�b��g{*�����:<ک)�Ҟ��1Y<�\��W�*C��bg9�/ڸ8�

�3
�µ��Jc]���<B�Jc�
�S"���ұ{"��T
�������OaZ���ʦi����g%V��1��=f�]��#G;�zfG�/���2���jh at 1<
<��G���Y�v��E�xI�vE��]c]�T�Bw�'
/�͓�Ռw%Է�y���0dwԨ�e6���5������0
�\��AJz퉶��d��)��O��u��i��i�م�1�4:I�٧�M
~m#��C��T[�,�U›�%G���������؎s�f�V~-��� � �s�
+��Ţ}�o�%�%#�&3�Җ��1�+ܟ*� �,��QR�W�savV*�f|�y��BQ�[�a�]O�r�x�	�:��8���l�ٕy�br�L��h���������2%�(j7��#�|E�;�&I��2zR9e��Q,�n*�Ĕ�B�#�b�H3��@h��r�ɣ����[���[X9���<��2��w3���/�в�=�2�b��F�=,l�R��x���Oԅ�=�X���Z#
�l�]U��7e����ٱ_�]h�X[���LV���_imvbOL^��
Yv_T?�|�o�}�}�s<>c�Χ+)H��s�p6�v������燀
'����B�>"��&�N�/����J�h��o���2�'m ���
G����X
�i�o��=.n��v2&���>�<up���9h�9�K=?K�$S��~i��<���4d��
���y�����4nj{�~�}�7~��u���;�%��N�v<�Q�2�>�u?�|
�d Q6HA�)��;���û��F?��\V��lNq\I�
k�؛)ϳ*�gC'?g
�C:��Q�=]�f^�J۲��h&�)"�E�
L Dm��i�mp���I&&rA�?ba�	� ��I��Y���
��Rf1��[�'5��_h�� a��� 9߃��
Ggcly
M�Q�^�~�O�U�|
ˮ��-w=����
R�~h at rj�v�V3�
+v�&��
�K-Ds�LU$� �L���3{�������۴�L���#�T*#�O?���)O�����
K�>x�
��_��xJ�n'�{�Q�}��*���s���b�N�(	K�,��S<�fɽ��
G���
�%�L:�\&����
�
�:7�R�M4ă.��!���5�/c7�U�uR�\��ʭ������f'XĎ��`j��Џ�
�, f�01�lmENG�)���In�z{����~���/�4B�nhCU?�ʜ*M�����h&e�(
+��K����2��2Lk+�
tM�<��m�L���G��EEj
�+��L`
+��L���@��<�Z�dѻ���GH�~���4jѳI�,�;/8룛�?Y��a�����y�Z��1��
�ֆ�
ɚ�̨�#wN��������Χ@M1�h�a�3�O���������G��ޭ��<{�5ˠ�n
l2{�Y��\����8�V����VR�)�/�v�C���3�ȋQf
.�wOm��������	��
!+Ԁ���!
�geI���2}�����[$���7���"��1��&�
+�������ݓ�Iw��¿�[��%\���1o�v�u�܈�3
��D��s��b���'�6�\�^�3������ߋ
+ܒ/U`����x�<��rJ��Kyݐ6�yCHQz�+�z5
,
"�&�*F�`S��q���B��y�v4^��6N�|��5�]j���^��\C��R����*B�8?J�͕�f�{�3n���(O�[�J@�9�ʍa���yǔ�,�W|O
+J\��4J����D���qU�I�i��w#{+���
+�'�{����SH��ߵ��@���h���W�R�
+}��V}w���nXN��AqwgS�"��Z��&+����R�Ū��jq�B]^�|�9҆��
rM
+endstream
+endobj
+2791 0 obj <<
+/Type /FontDescriptor
+/FontName /GEWDVW+CMTI12
+/Flags 4
+/FontBBox [-36 -251 1103 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 63
+/XHeight 431
+/CharSet (/A/C/L/N/S/a/b/c/d/e/f/fi/g/i/l/m/n/o/p/r/t/u/v/w/y)
+/FontFile 2790 0 R
+>> endobj
+2792 0 obj <<
+/Length1 2105
+/Length2 13859
+/Length3 0
+/Length 15000     
+/Filter /FlateDecode
+>>
+stream
+xڭ�c|�ݶ�
6����m���ضm���ƶm�1����{�sv{����Y����9�
c�k^��H^�V����X��Ɖ����
 ,���� `�c`�%%v0�w2���w2�0rr2�
 Ll F.&�� lk��`nj����lj
 hm�`n�o��w23��0Է(��;���� ��D8�
�
\���`F�N cSsX��$lLl��69����#
+@�/LJ �����
`dlK/k
�f
d��뿓�9[Y��[���_�����ͭ���������� ckd�`�߮�����162w���U	'}+sCAS+c ÿM�b�n�F��N�f 'g���m���8���k(R���M�ע������������/��G��`��d Η����/��*&jchkdnc
+`be�;8���P�<�6F�n c7 0=���0 ��7�����
ec�
�c��b�
�Q� z�?�@/�Gq�E��� �b#���������
�^��H�Q@�?
+�"�GYd�( ���E���(�Q@�?
+Ȣ�GY��( ��d��GYT�( ��dQ����h�Q�8��(f`���
�Q������ 	�
������O �����Z:Z�;��������A�������/3�����(�'	�͖�N�ǟ��?��
+ 6f��
+$2����g��bm��AF`�FI`I�?�#5�?��Y�w^B����	�������e[g���.�2�M��A��v��
p<f�vf�6y m�I ��_���I�$��[�2vt�k
87�?x
��)�
+�ecn�#f`igk�.Xӿ��w3��h`Nۿ�����Yְ�w0��?;���?�����@�!44��˕�_6sۿ�%p�vV�5����%�c�kʌ�F�8��
�����a�����ѳ�8/��T���1g��!e6�d�`�י 6��j�W 0��c
��
�


m
�� p]��@`׿
"`R��$���_8}�?��L
��&�_
BB�n��, Z&�^�33�+���f�� �%��t�/���&��7�����!�ʒ�!w�EJSH��h�L$��is�l}�|'\��8P��1){��:���t4��B�W\Lj/�I�
�������t�V\��t�_v���H�M
�g��rs�㥉ꅃY�C�y�"ʇP�D ��.
�Al�jb�V*��ud�D�ȩ��a,��ȉ�Ӂ>��-�kW�
Ψ�й	� O��"���6O[��bslh��>mDi� @ꋻ�I
2�zӪ"�lV�V�gv��j{�A^wa
�&���)�f8
Uϡ��!N�D�+d�-
�+Ń�~��b%�gȝSj���4�x|�KM4"7c%�t�4� �y��h*6D�Eze�5�$��?�v���V3�v��A�L���,������P䝒�`��PL�f�
+Yz
�X�m�+%��
C��r��R
���g���&~��C�r�1��B@)��dX��(�w�}�F�ۮ�ޛ�:r�Y�+�Ms��f�cYᅆ����/����}
%�@��g����E@=ch	�:��o���Һ��C��x������3�ܦg�ʷխ�
r�^����v�:��Mt3f���۬?�5N�m��,�����"�\[�3�����<
v�<�!b��8À9m��p��Qru�ݠeAr��@S��L�+��g�>�Z���<"�S�\�;'�vG�N1�S}�+/��eQ��2�!ml'¢wۨn=R�	rQ�n�1����"��P�s)
��=9
�����
���;0�
W��zD�����*��
�8�R�
�e�OD��
�?[��U�K��W�%9��"$��
+jFn�3
+٩wO$�ڜ�~n���6��%"G�+o�W��O�c�+w�!�u�Y�p���
�QJ�OՒ�'�q�����a�]�C��H'�Tڛ�����7K_8`y�\Ekq��$�sy/�$%'ꌙ��}����&�pF���
�`�j�T��+|���LZ���e�6�o�_k^�l���r�"A�m"ϕYH䪲z���
+ܟ�p����:��U�=`�
+��<�u�\H-�
�:�F�ʖN�Gk�B.��7�A�﨡��ڮ�0���ש?������R��^*ɤ��Mc�w��L�
�Dgh�dc|3�twA���~Hܶ���v���8ݺ*:9p��,t]5ͮ��A9��M9P�J����V������r*]z����tٴ�X� ��nY+�aS�]
WJ+)v<*s�Iz��t ~����r
�%)�TM�j�t���KMt���z��ָL�I���s-{��
߱�f��'���y��s	�E1��.�v�������l��
Q�����C#��#,;�k^A
�����d;���O�#�3
+J�rh�z�h���EI�
��
��	�e�l)6^9A&/�Ze��j�H&5�
=-
���w
�Z���
)�­�5
/�L]�w^��"�����'�\�P|��$a�~��T�`�;�G�H/�>�;*�}�J�C�_��ԛ8���t�
+�(A.�
5�ǵB��f��]�	�Swx
�N����~ަ�V��<0��Fk7H�a�z�,���o��c�쿭9X�"���>঑�_o�"�\-)�����3�o5�% ��caZ�K�F\���2�a��c��U�p�0���}���,�MtWЖh5/��h���e�L�H$�f�0�޲%�"&�o�gC�>
=G.�>#
K!c�(YBԂc�E�*
+�.�y��wC��g��.Sݻ�@�KE�v4�8��V]���_��D6�Zu���?c�3cv~���1����+^A��Ll����vb�
`��cE(q�>)T
�
��?UX���-3_�N<4
Ѩ.άA��
�-��
�	����⑔����.Yi��X}a0��)�2q�Uy�|���p���
U^�N�����/�lϢ;
�C�\�2*q~	
FlA�N�����L�h��`�ܷ��P�2m-ԝ9LI!��=h�?�^�Z��`�к�i��Me��
O�f��s0Z%~~F�$NI�A�ȏ����x
+⾂6kG�DXMT��Ie�d�5�
�;?J��Bl�Y ۻ+F��Q
~�r��4���L��_���Z?�C����q~��/NJVy1��:c�̧���$�X,b��� 
�/�qcL�K\�Y��)�0�pP�H�
+�ob������ZM���)D
���
ws���_1��o����{�3���r�|��9ۚx_�#����M`2k�1�/V��
s�t�
i�X͎�����؃�r��IP�6���yR2O�#�����>��C�fc�OG
]��u��5��f�M�8o0`+�
ϔv�4C���I��Vy�g�RB�؀ͨ�Q�N�Sݙ(�<�\µ���Sq��5��ӈQ�Um_פFa�3�Q����
�r�� ���Tv�'�ژ0
sɤ*8�t{�
�O��y��JĎr�'�_b_vZ��'���+"�1&���ZM 15��x������MM�Y�%�7��Ъ���s���|��/8U���
�0�,̌KY�|�
]T9�1��`;oߌh���CA�����-}�gc����~��w��0�@~h����#RU��U�}N��vV�����m[1���	�^�/
��]�[ qXJ�ꥇ�2bk��1�1��o�٥��D OU'�'�h�||��O���Wr[��>��_K��K�読�h��~�����l�M����孔
C�z`�ƹ��'huG`u�Na
DY~���1ZdX^w�[/�4�oA�O���8g;�Z˵���c�>�&�`�U}�e���ލ��(�o��U4�E�^�݊�?�������\':���\��R�"D�hޜjyE5��I |���ܒz�6���.!8
7�Tf����m�dV
 2y��h(�Mc�G�opG�Z�
�j.��2cW��(�
+r��d�|�&�Z���C ���Zx����CF%���#W���=\�z�6�
+}�}����A�2W
��;F�Cb�@��)��@�Q']��
�
+��M��
tK��y$mzv��{���4�*^�Ҍh��+�'+�ٯ�v�Ή�
���b3��<x�q+oY�C[�V���W.�`1������M��Zť:�2��d��!Kc�I�����G���{9����]�[MoT)��t��W
�/�
+�|�Lc��Lp����dP3�tq}��E���F�"JIZ��
Z��V�)���ﶃi�����/�KQ��
:���8&�hRnn�������1�
�Xq{��΃�Y�2��~�k
,�/�3&h}�9�x�
^+��	�l ���e�xP�p��$�'�5�2�*���M��Z"�[\a��� �& �W�P(�|�j�P������Ӌf�6���5Z>�<\

������Y��Q�g�[���1��I��fL��1X��
�8�`�w��&�=�Z%���L�ȓ
�{&ꚷ��/��̔~M�B�6�_�����g�(?�������r-vW���[u���a
�a�p���Q&y�5��ϒ5a�o1�|<k����Q(ѵ'h�K|�0�Ȉbc�^']z�1Z��]�v�"
+�5�Na�
+��wHⱂ�3�DZ�G`�Ȝ�"Br^������+f��� f7"��?�����,*�
Z�3֯
���	�-BRM�OUK�h}����7K���\B�C
+�-w�s�`;�䬲\�>\��5��YXz(8��=-��d�	���lcy|q~qh=:��%8��)�ī8t�P�r+wΓR�!s��-.�0��mc���kq�L�+5�o=T5߽�1�_�=
+#rË́��I�>�d�B�G_ɴ#(��h���rN�|��
3\JQ���,x��Q;U�&��Q�0�:T���|�7��Rl~F�~M�7L�����W {?�&��x���
G�}x5G��/�=?Q�|z>��SY.�}�����Q�JE���%��6P���ά#lG��нX,�:�f�f�i��Jv�<�3r4
+G���&Ө9An=f��Dpax��r0�#e�)��ڏ �X���6��F � ���o{S��'�=(�Ә��皼�	,
�O�`|��%p_GbG�P�B}G��k�t�w�v�Ӗ�p^xeC�&j�N�o�%"�a���0!�F�y���
X�I�(��RjajoX��n^ro�p�\Ɗ�B� Ħ�;�W�60���Ģ��n(e���(>���E̠�op�u��)��"����.�z�'�i�/�uL5g��v
7D��������J�q�?J��
��NN���T�d
{�`�����C�t�2�s��c:[
  �OC~�*�A0�2P�K�K�k��uc�!�>���4Q��<!7!�?�
�6
���w�p~#9�-ѠG��UE(E���X���t� ѨsGh@�~���5/
����c������ۻ�`~���~�C�6 ���:���A}��S�v	��J|8�?�H�NC
�X��9�
����,��QGS��+L���
�ˇ�#��`�(�6�7�B�W'��ډTYX��ǚ�&:2~CP�so��*R|��1(#N�=�Þ����)�ђ8A�cM��U�e��ZX�
Eg�!+�<��VT>��j Z�c�x�bBzJ�K��H�ɚa�BGA��@�o���C�<^���1 �qcX�|�H��ZL$�y�o��;)Y�"�Sà�Eq�������P�sz�)�[M`��*�琠V\�����&�`d.���lB�*ݥ�~��,ֶ&NG��T��+�$���5p��+0��؇����ZF-S��P�ϋ?�Dv�?
��~�s���0Ap�
Iw���M��q/����>��
��j�D��X"<;1��	�L���OA&�GU���л�
%��5й �ܯ"۪P�Ҵ+���t�+!`^���9ZT�'��'P]
�PLp�@[��ࠀ�9+�,�hD��Û��
�;�U��*
�o:�5
�)܎ֹQ>r�\�Y��E$�y�u/V��g�g��	��_���z�O�&L�'���W׵�,��WΚ��`��b�Ш��}
_т}3
�[��j H�����U�9�P>�����.�v�n5��bj���OQ��(�7�E��t릩
�,'��<*�19$��n�D�� �����R�l��,�pu�\BY����ڀ��l�2,��s��OŦ�����7��B����9�ٺ��
g��Bo���]�k�JKE:|-�v�q���iۋ����1&>���3�5��(�z9�Wg�p����}ta�|P��.���ד���xs,#�B���
�)~_�߅wy���&�����M�;3[���T���Ι�(-�Ō�m�6��W�m��R�em#��'f�@�w�����,M�Nb���Qh}�mt5E-i7��r-��?g��`P��rcr��WۈԾ�#T0P��v�'Ԥf�Wyڎ/����+�#�σ"x���Q'e�;��Z���X�rq'�ܪi� ���0hI>�#됧B�p	}'�u��ߵ��Hp�	
P����-�mF.]�
�%�^)����9��d�q+.���
��rD
sU���/�z1F�T=���٨5;*$�P���[>ɑ�p?{C/��\G`W�u)2F�U”�
�?�*�c�t(��ez<Hh�X^e~��$���|~(֔�B
��x���
��}iA�~������#v����38�#�!��	� E�Q�`������L�� [...]
-��2*nh{�Jt��-I�wZf2�E7�_�
� �+{o��"��w6�	w��J�|�b
jǃ����n����

�q��2
��a9D'pPΎC�\Fֹ�3�<~f����ٰ��&K��4C��~ӈGb0CM��t4�{��ɠ��"alk�
VƮ--�R}��:�sh�)��k[^0�$8]_3�>��M�
_�'P
q����
��^Ӷ+|�� ��
� �9L��o���y&���z���c������c�w`D8U�
�5���S
y׌+��lw�t��.�����
=�
�G�'�I�R��	n
6�wYy��bXV#6�ŞI,:���T)sw�SW�5K�)�������.*;�(r>3�:C���Xd�x���>/7�T-U:I�����+”-�S{3��H�o�/���hU�qY�5��2�C���K��e�MwS�Eʭ\�잣�}�*�����.�6
��G�s7I

��N��oeH�N\'C����P�j`e~.d�pE�)
+��8R�HQ=�0��6]�Oҷ+E�@��<F�Lir ��jܞ2F���d���
o
)�%��wW]
�pb*�3e|��y�ҕ��O/FWy$
��mxnm�]w�
�
��MQ��[~`��֚�i
�GӨ:l��
�����N�S�#�H�5�ijƲv�)���zٍ�~#ߗx�x�BG�y�>A�y5w
�M�؋Ƕ9&+yKc�WJ���2�]HW3�R�ԜY�ϛ��f�%�q
Z`���0� 4�4E�V�Z1ĉ��p��^�)l��kլ�0�\9Ý�����C�j=i���5�K��p�'��D4���g��`��
+��=�
��t�
n1��
͖�Rȷ�F�(�����Xɍ@p����uC
d�k����g�̌%�R�7�N>�="..�aϣ�������c�����
߈t�{��f]�;�•����HS���bFLd�,tR��4e��;�
Xxqm
6}�a�3�4�t�����>�@���pF�+��t��=���U�RG��M�E 0��7��{P��r�`d��No�rG&7�O6������-�M�"��<7�e�B�J
ItXs�)
�{,/A�2#�m���[��Mq�Hb��h���w�I�������Y���QCW�tN�w�W�å v
�`��rz4!��ϕ%�X,
�|V��8,+֯g����A3zc�/��ˣ�T�H[��6����#e���������j,�
�!Ӥ
�R0b�L��k v/���>n��d�����t 9
�sb��0n
B�#|�����<b�'���4o�u�>��0w���k�%[D�A���g��)���Єs&L7f{��9�#"�(h
O���:���V��c�ט`	��IE����i�
d4@�l�_�GN\ӂkfI/[	.�%�׷V�{�sK콹�-��w>�>?Q�_��F��
+ے
�A��$�îk�����EC����3N
re��c���Mt�׵�9�4�m��5�O�ݫKZ,]e�`EQ�a@�Wm~�9XȎb�ay�J�.]j?��썴���.��q���ElM2�ZY"W�KQ�&����a�K�Eݹrd nU�1�h���6;��"uk�z�ٛ�� q������J��C��j�	-mD���9l�'��5��	�o/����:\w�(A9O�kz��t�%�&���3�2�W��z]J��Q3R�
�������Q�������qlt"�FƗ(�(����0�V�F���*c�� .|]#�a�;�G��]��!4GB�j����61�l��:�VZ抎㶤�Ι�#��2-�L"�>��l+˷{�{Y�py>����;�%q���Cr��U�/��.�615��L�|˵����0]�
6�C�L�,�w?
+��_<|��HF$!�L
��
�I�jP.ݳA7FY�ZU��<fzS�d^��w
�H?$��9�(��"��$�D�X.��Q���	&
�'�
]��e���)?@%Ddk��1N����3�h\�<�;�����>{M����AR?X�>ۿ=
+�:n�	�Q�7Q�TQ2@	'jK{.��-9��Q�
'I at _ON��+������)��0{�
�:]ƭ�=vi�=H��
�f�
�%_�1:f�r-*'��x{�~�
�qLD��>K�:z9D�3FL�[K�}���IqؽZ�v0�g���ϼ���^3	cKr�Jو}>�㍖�0׿�~�@�n�W���|<am�]
rt�$
n�ݑVuf!C�
v9�L�E�`�`
鱻'�5lh@�֩��<QSi���I�&P�5�KJ��6fտOs����er�ۇ�&4�=q.%����$��
+����;c�
��2ݶ���L�-��{�`faX`
;���B��"^R���'�J�9a��g{��د�@���DM��c++M���h9����$��l����z'�ێ`�z�^��^E$�4¡fi�/�N)�ppW�b�K������ئ���-���M�.��P
�Ɲڱ�K
XVO�٩�d�R�Sz�MC'�6CՃ���Z���S>�	BI(��,�q؜!(q�7U���|	���"3!��􃕺� ՜��/c�m���L�S����z�,}v�R
+�0�c�~�\����z��A��m�#�'���')�$���l�o��i3�iN�Qj,I8�S���\�
�/�-}
\��B�������K���fb�ľJ�t��9�.0�����M��%���K},�ry�����k�p]]��Wc�`�;e�%m���[L��>L�^��g<��xOK
�[�T�Ԫ���tg������/���<[�ZF�$����,42ϖ�V~�8�dώ�i��(���Ie��aMG
3a���0��oK����ZI�q�7]r?d;��
+�yS��5��٭��H{�al����R7�|4		AA�4aNb�<eRo�
��F��=��/��t��iAV��!��Z��
��1�
+���;淐
]=�y�?�t�:�נ5k
�1�p�B�Wr��)�O�Z4��/�\�"�T�s�G���
�;Ĥ�R������u�ܮn��c��0�1Ϥ�Tt���7�� �ڃMotc�ܛr�%�;�p��~�-R�f�\�1*C��T�
+����O�J���
^�
4{��:��A�v�|
#&�
�Z�H�g
һ����{
�i���7�U�M+��|�d�	u{�:���$��߅�m =���=�,�ԏ�4%yr�.�5�F�<�NW���
�nh��ˉ�KIFu��Gd��bة�(J^Y.�Q�}.�����b��Vc�(���
�����bs��)��C�Sf���>��|۩+Wxr�|�g��4���Lg"dԃ���q�0c�KU�`�=����Q3�:��d�Вk�!>
�{��
<W�W��~r!�&J҈\G�K`�%��r��Km?mdx�@�����d^����..>�f���'�ֹ��;���<��Wp�)�yڲc&�S>�<�b�4u����AAB8���P䱶U��
=Y�״5
s�eI�&g�m�iQݞ�fݡq?��h��]�`V(�j�N�<����� }�_��[�)�´�eo{��k��ab�î�Y�{*S D at n�
�����u���=I��`�"}�q'�+�����Jb
�<
䤁�$º2Hd��`�&�,=�
tZ]�����S�ۙ:�����33s�R4
Uv]8�p9!8����K�z���!��O`��K?�&��x�@+��\@-�-04��
��
+0s�Q�z����!���҄�ߦO�"��a��:!�Cu��5db����Fx/��k�)�i�W '�K�Ә{��_"*�kT�o5��
\��D��ސ?�J޽��%�|(&`�giEd�4|<'_Ve��W6����To�cP	k4�thDp����Rz�����s|(�%r
+'HՉ�s6������Z�)�@���p�h��+`�00������h�?kz!8��K���Qل�@[��

�M5L�p��k�W
�-Ĵ7m(�
�,�߼�A��0r�{ h\@Bʦ̤��n�de����q�2/x��P�j�`�����o��nzH�d%�j���[��c�9|
R�����yS���@Z���4���z���^^_҄�c�C��_�����+?�W.[
�U�n�y��m{C�|^k�
k�pK�7e���)�S[z�@�I�+Ă".���;Hi�C�#J��ob�K����
B[L��e@��]��A���2���"�~�#��� +D��Y�m1�����&�A�R1"e�~6O�-�o�S> wsM��p_G{�i]��1̔�4bEOI��>��/+R>�Wf�Po4[�x	��s�
/�^gKv�/V=:CA7(��T.�H�Ja��q�y?
���S����X�A���v���*�
Rn٤�{�҅�a�,���&���U
���:�3X�fԤ�Rz���jղ�n[
R
�z�p[��6}G�<���*r��7j��x
#)��nTSt(}��`�-���a`�
e�M��Y�Zs�+�t������+nkR` �U���6|E֪����0ІJI3�a{��	[j�
yV`9��Ǒ�Ju�Z�V��"F&��G�)�JȻ�畻�\�Em�uS�E�q/H.xƱ���q���a37��]�6S�ge�_KRL�
��k�yI��9�7|�
,��Wh�
�6�����v�wCk
��OF�.GO6v�n�'>nS=��"�q���n_<~�^�7-�����TQ9��
�7͛j���0|Ʃ^{�ɥƖ� ���Z��0�ϱ{ڿ�CQ�	x��c���Uf�Y�[ӊ"]m#���]�E��D����?$���� �u��m+
(~'ɕ�"��
Jw�g���6
+�
+��A^�Y}TEbx��ԭ]R�+
��9{,Y���#sI�V�dž1�#�����&�S�8�CNr��9>#���
��E��+�}΢}����œ���[��d��߁�؈/i����^ȺL�	vD�6d���ȧfv 
�
}x �\�,�Cp<a��֔�d�V��P_q~7e�1؛��֤l�1qh���1�PǷ�!՗r�.)
�*c��+I����\�f~GN}�L���V���8z΋�p�

+��(
���͝�i�y	���'�t��C ��
�1��2�i��_8pT�m��D3�1��i<�=��.�gC8�
�Q:�7�;L{�nHE	�@�m�̶��I�i�-D��wGk����y`�g�
�
��X
��H㧓7���nY���WM�68��{s
��pv�ɦ%�e�I
D>�U��T�#PI��Aa\
L�N�2�$Eԥu�C��"�ץ�;`��OJ}���צ=��f{��4�}�����
#�Q0���ű�[9��t0 9W�������	i����o�Q�0�U�
`e<j��Q
+C�$a�A���-_�`g�3�Ta�j"vRrZ���}�}]�����25�ON0�{�Q}��p��G�>�R�R���=�BX"��n-Na����
h���,��>�3{Y��~Z�y3
ʒ���s�
u��(�o��ɂȹծ�K�
^0F�J�D��	��b��4_4�PcJ�ҥ_�I
Ả�ɴ�
+����q?�ok�
+�)��������5H��fWE��.�A3}h]��J���[�O��4c�`�03��;�t
���jt��S��`mSv�d�]Z�v��'�&�
��*N�lTCbbؒms�[�뛷X�fŷ�9��1� s���ܓKz�i:2D�U�R��{�AM5_ �
"'��
�bOwS���#�H1�%�Zk����
+z�q�h��6��X��z�� ��Q4�k��s�d0b^��[| Z�|*�2w� ��|
Df=�ЅV�����/
�Y
l���C�n� _��˧E[M�!�����Ǣ1�VV7����C��;��F���}C
jy���� ti.F�uƷ�Z�e}0J���"���=���0���\\�8�Sz������+��
}����
�a���y���%G��O�U݌x&�z��
��ݠh�x����y��l��复iD��A>�����G�1
+�ޛ#��Q��
E(5��m*��
�vm��\���q�eT)
,�s�4	�[NH]��]v���fN�w����tF�K��~J����M���8�_2L��ͪ���c�m����y�a9r�x�\U�M̐!�p���YI�&��"�$<u��q�~�����	ȹ�W
��
+�U�r��`+�2T��ݎ��%V�昰ݲj&
�7�~�c�A�)SZ�v�^u~H��T��(�f
���t�/q�H���q���P��T�G�u
+�Qb��
M�>���Z��0V�|��c��锴�e	�Y}�ރs*��L���
a&�?������ﮰ�bk}������@{*YC�Y�����o��q\��<ӳկ.L#��~ޕN��u�Ηt�
�>�"�{0IZ�$��A����$�
�座L�ַ�v�q�FI�Ӓb˨C)�ͧ���
��$�m�2 �R}�ڏ�W�ׄ�0e��XL�����-^!��I]L���D���R���<�
+��Y��1����p
j�ػ�Ɵ<�L�)
ȈH�����S�!F�A�ެ=BL���������w�-U��%���(����U��#�l���noh��½�gM��0��X^�U\��Õ?h��{�Dt4�
�J9��"�
+\�=��0�T�&�M��,ٱKW�%�E0s
+��ѕF�w
��{����� ,Ss�$U>㷙º����ٰ�	��t)�:)�?I
�Yo8^~g�mZ]�r�B��)����O1Ԓ6:���Y�
ϕ͟d�ʈLc)`_�S��S[��8���t�K�Tγ�
�c��̤����?+�H
b-4VoG��!Pшi�=ό�����
XhU!�SdX63��Ŷx�5����<���x�[�����
ϼ ��4�1���g.��?�Yՙ��q��U�p$D�\P�t�W)�q�h~'����Ȫ𵀬�; �r�Q��S���߰6��Z�&��G��(�|
+V�8��;��2��ϩ���2E���hcsk�{��}���7w��'�i
�p� 0�n>-�8*�y�4��0~y�xj>�'��=P�O\�X��ji��
O>S	��~Z�����Pm�R�
񤋊�
�WX�6U��������*�w����_�����{
��d��uZ?>��{Kl��"v��s�
h1N
��!��ՠ!�^	@o
�~|�֐�}⎥Q
�>����j�1?�� &����O�T
DX�0��D2�:O�j�'&������p�*7�h6
e�! Hr�F
���5ǩTz����Kp����?���P���qC�sG���5Vdem���R
+2�\�'�����Q���!{1�cc�|9AV`�3
+���:�^�z�:������r	��|�W.�V���U��M���Jt+Gk��K��7��:�J�3U.t$�b��Ol�m$:,���F��t�j[�D��
_�I]���N��9;�ʂ+wrm���?�IUN�Ev��
7„���=q?R)æ+��Pȋ�9o`�A�	�̛] _u�X2J�&������K���d�Q����8�W"r3"�q�|��)�#ۈ�`R��Lw��W������X�UP�<C���DS�Z`N��M����/0j��Dz	�B�)o�M�y� ؗ��
�
�]�e��W����������jU��f)�+�Y4]I�m#1�
��:�7�;�
�w'30��8�������>�����4pb�#t��l2&wCn��q��#���b��Aw�g����x�8�i���.!�'+w�<\"�;$A��6��/�
-���%�G��W��4��S\�L1��`Eb�C҃뢰),U��<�!���^2�.
@-h��.8���
��Q��\n���RJq� ΩG��A�:�GШx<��O��$�g����78qa���Ʋ\o�od����f�s'����g� )Ό��M��ѳ�ܥ�����ND����S�T �mԩ(h"�+��<
+�
G\��b�"?�G#R�
�ĕ֋#�2��S�'���}�\>(:���ے.�<ܐYq�J�I��>��&�&}"���Uo/����]Ƴa�R���z̸ҹ�f���J������
N�hF�]�Xq�[��/
��T���
\H|��m8��
խ������`n�M=���i
�@vg2[m��D�9�t�Z2��w7�L�ю�Q}tR��#v��v�ƢC at L�
���t�N�6�D"L��������#�V�z�}�g����>�4�Y&M��#�}
�	��
d�3]�i��.>���o3�9��3�ܵh
+endstream
+endobj
+2793 0 obj <<
+/Type /FontDescriptor
+/FontName /PZTGBU+CMTT10
+/Flags 4
+/FontBBox [-4 -235 731 800]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/backslash/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 2792 0 R
+>> endobj
+2794 0 obj <<
+/Length1 734
+/Length2 1058
+/Length3 0
+/Length 1575      
+/Filter /FlateDecode
+>>
+stream
+xڭ�}<TY�wRѬD*[�㭼��5F�ɧ�db�aHT�gg�\����i�0
+۔���L$m$moz����Q*�RԆ�H
+��J{i��������<��;����y�8k�,
fab�3�y &;(h)�\�D;;���L��'�= D�A�!W2��=��=�T�
`b�8)"��{�Øh	`�`)���'��Ex>k0>��\ EA�؉hG��X�B�  @�2
1�4�+����Oi�\�K�q(`�C: 
Q���8 �#�$?
�
�I����Yr���ڏ��E�'Bи��H"��R���T<Qbc�D.�X���P��
Q�?��h��
DƏ2�

O�b�Dܶq��UkB�N��s���!bYP�䟦c���7�͑"
+Jv!�!\��ϻ�'��-�cD���
�R^

<���@�X`�Krc2��-I ��8���
+H�X�����0�fg*pv�����h	����R),�����8�M�a�'�����Ԩ���ʼnޅ�J�8���~g�4U}�r?��
���M��J׍
�55��e��<:�Җ����6��4�v�p�r�ϛ��e�=�X�N�q�\7�J��H[�ZXs�����c�2�[��ꫫ�1eW���/Y��E�*,]H�
+4��T��M�k�ʜ�֘��4�tz8�]��
)4�����������;I7����W����UeTdZ�im��Bescy]Ok�U�+���}ү�
}����B�ٞ�^o��I���Es
�,}��l�[���˲NW�<�ya�g�i�0�*2`�	c�o��V
C�H�a���ߥ�cz����,Q9��w��x�Gv�_���/Ț<D\F�z�
p�WC�Pl5;I�ݼ�̺���z��7�*��Jt͋cY���dZ��̛���}� �o˼��e���x“z�>: �.{���������
�[
�C�Ӧ�[s�
+>g�<U��w�Ƨ�4��3��چ$��Աc�0Y�?��zS�Ѧގ��L�`x�`t�p#��t�6���c QsVZ
k^�Lz'	/%L͟�8o��eخ��Y�����˛���#Hi�恲���7ݞDդY�����: k�@E��H�C����Z�Au7"�f(��ؙ��
r�W

u��gJ�
yQݶݘ��q%�􌨨������m���$f�_�a��ڵ�JyM�34�ES/i�����g��^v/[}�(��s($��n��ߵ֩�V��I��e
+Rv��� ���a������
G��V��>l��
e���YxTeX�e����Թ�:���E˖C��
;F�J�G�-o�X��4��C��Je�MdO�{��s�٬�
+#���������^��]�i3�;ۈ�ے<V��0�Bq�{��֔����-��[\X1�uy,%�A��Xi6�gVl�z�hݖ6;�`����-����O��3}�Sgm�J�V�s>�b�.�'�������3�	�I!ן�A/s�B���7\�Mޣ�}嶾�Iph�~Վi
������E���\��2�>y�-��\���`�G�Z�U�xs��k��(�mp�5?��e)��iB7����`v��4�ԝ� ��
+endstream
+endobj
+2795 0 obj <<
+/Type /FontDescriptor
+/FontName /YGSWNA+CMTT8
+/Flags 4
+/FontBBox [-5 -232 545 699]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 76
+/XHeight 431
+/CharSet (/i)
+/FontFile 2794 0 R
+>> endobj
+2796 0 obj <<
+/Length1 804
+/Length2 1076
+/Length3 0
+/Length 1632      
+/Filter /FlateDecode
+>>
+stream
+xڭR}\S�ׄ�Y� �5D��!�對��x!
HyQ�l�1l;��ll����
+I��
+Iz�D �
��Lyɤ�J#�4�
:�����?�?�s��=��}�������:�-U�
+(�u$�  ���
�� 4&3��(��`������A�Dx>�P��ј@��I ʢU��H�@$ PA��APX ��T
	L��&�PK�*Q
�•$-
�'�[L�DV������ �F"':
  a�*
A�
+S�@՘�Ɲp�Kāh*�2ꟕL�0P� �2�(�*\��P�'Ҹ8��I�CM'�5�TK�Om��:��4�)D�Q�逵pj$9TaF��j�j0�T��@��Jaf����L��� '�P��.M�kR�
��{�,�F1
m���v=#�������8<
B���k�4��Wa:5�z� P
�GQy	� �N� ����

NR- at o$7RGF�&~�X
��$�L�HӞ���3Ā-����G ���7�Ni$�#'/�ZƳ8�V�*i��q����}��Y!��
�]:3P]Wq�\g���
�
���vM�he��϶oQ�S'�Φ̷��
lI-���X�iC_Qz�S�p��ҫ_�$���Fkף��U
��*>�-o-�x�l5+8���M���M�狷z�bdE�wr�ո�]"��O�xO�{+mއ�6���d%�ή���!�d�=<�t�غ'��_U6-�U���-i
U yw͸$̼�ճ���*�”NZ��q�_V�ӓ=�K[<��^�8q�Sz�_{ [...]
,��4YscS�lZ{�O�W�~�dz���w���ԲcV�X��s�+i�j
pH5�$�����gqLp at .
��w?p�>�u ��hd��m8k�ڸ�{{�����7���I��E�5�g�7���y�Ϊ!��(�7
=�c��-v�e:
�$ny�q:f�ws��q�E����
!9˿+�y�����(��>6��vUgg��e؀�-�v�L=�F�o���b�,����w�kۤ[
8jY���E%�6��/{�����x�kW���1��b��ೌ��䮰/����=��X'�R�w�]\Cl�~t��R�g(���pm} _�>rq���3]�*�86^��+i�v!�
�2�!�����PBu%��J�/@�Rl^;:�2?`�
�[)i���ٟ� �1/Ζ�.m

�LE�β��l�e����wImo�]�U4�zB�5��_�٧?��l�kԾ��S
�I�����*��=�,`<�}t�D�fܒ��ܽ�om����|��c��]� s�5��\�:�yH˲��0k�� ���b�/�c2>Kf��
2j���
��
+�
+endstream
+endobj
+2797 0 obj <<
+/Type /FontDescriptor
+/FontName /RXNEKG+MSAM10
+/Flags 4
+/FontBBox [8 -463 1331 1003]
+/Ascent 692
+/CapHeight 550
+/Descent 0
+/ItalicAngle 0
+/StemV 40
+/XHeight 431
+/CharSet (/check)
+/FontFile 2796 0 R
+>> endobj
+472 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /EQBYUP+CMBX10
+/FontDescriptor 2753 0 R
+/FirstChar 12
+/LastChar 123
+/Widths 2747 0 R
+>> endobj
+517 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /JGUSUK+CMBX12
+/FontDescriptor 2755 0 R
+/FirstChar 12
+/LastChar 122
+/Widths 2745 0 R
+>> endobj
+1781 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YWRFWO+CMBXTI10
+/FontDescriptor 2757 0 R
+/FirstChar 98
+/LastChar 117
+/Widths 2729 0 R
+>> endobj
+461 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ZVGVLQ+CMCSC10
+/FontDescriptor 2759 0 R
+/FirstChar 45
+/LastChar 121
+/Widths 2750 0 R
+>> endobj
+781 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /UMVNQO+CMEX10
+/FontDescriptor 2761 0 R
+/FirstChar 16
+/LastChar 114
+/Widths 2736 0 R
+>> endobj
+694 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /FMTBNW+CMMI10
+/FontDescriptor 2763 0 R
+/FirstChar 11
+/LastChar 122
+/Widths 2741 0 R
+>> endobj
+779 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /FFAAZK+CMMI7
+/FontDescriptor 2765 0 R
+/FirstChar 59
+/LastChar 117
+/Widths 2737 0 R
+>> endobj
+473 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /XTZTON+CMR10
+/FontDescriptor 2767 0 R
+/FirstChar 1
+/LastChar 127
+/Widths 2746 0 R
+>> endobj
+462 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /KELKPH+CMR12
+/FontDescriptor 2769 0 R
+/FirstChar 44
+/LastChar 117
+/Widths 2749 0 R
+>> endobj
+460 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BTSFPV+CMR17
+/FontDescriptor 2771 0 R
+/FirstChar 40
+/LastChar 118
+/Widths 2751 0 R
+>> endobj
+685 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /IRHGLB+CMR5
+/FontDescriptor 2773 0 R
+/FirstChar 43
+/LastChar 50
+/Widths 2742 0 R
+>> endobj
+778 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LDOHJW+CMR7
+/FontDescriptor 2775 0 R
+/FirstChar 40
+/LastChar 120
+/Widths 2738 0 R
+>> endobj
+864 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LDWUKB+CMR8
+/FontDescriptor 2777 0 R
+/FirstChar 40
+/LastChar 121
+/Widths 2733 0 R
+>> endobj
+746 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PTPXIX+CMSL10
+/FontDescriptor 2779 0 R
+/FirstChar 101
+/LastChar 121
+/Widths 2739 0 R
+>> endobj
+1542 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /XWRTTW+CMSL9
+/FontDescriptor 2781 0 R
+/FirstChar 97
+/LastChar 120
+/Widths 2730 0 R
+>> endobj
+697 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /TGVDFU+CMSY10
+/FontDescriptor 2783 0 R
+/FirstChar 0
+/LastChar 120
+/Widths 2740 0 R
+>> endobj
+820 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /EXPITJ+CMSY5
+/FontDescriptor 2785 0 R
+/FirstChar 48
+/LastChar 48
+/Widths 2734 0 R
+>> endobj
+782 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ZQLTBN+CMSY7
+/FontDescriptor 2787 0 R
+/FirstChar 0
+/LastChar 48
+/Widths 2735 0 R
+>> endobj
+646 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /IKYAIU+CMTI10
+/FontDescriptor 2789 0 R
+/FirstChar 11
+/LastChar 121
+/Widths 2743 0 R
+>> endobj
+463 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GEWDVW+CMTI12
+/FontDescriptor 2791 0 R
+/FirstChar 12
+/LastChar 121
+/Widths 2748 0 R
+>> endobj
+619 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PZTGBU+CMTT10
+/FontDescriptor 2793 0 R
+/FirstChar 35
+/LastChar 125
+/Widths 2744 0 R
+>> endobj
+1479 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YGSWNA+CMTT8
+/FontDescriptor 2795 0 R
+/FirstChar 105
+/LastChar 105
+/Widths 2731 0 R
+>> endobj
+961 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /RXNEKG+MSAM10
+/FontDescriptor 2797 0 R
+/FirstChar 88
+/LastChar 88
+/Widths 2732 0 R
+>> endobj
+464 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2798 0 R
+/Kids [454 0 R 469 0 R 514 0 R 571 0 R 597 0 R 601 0 R]
+>> endobj
+620 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2798 0 R
+/Kids [615 0 R 632 0 R 642 0 R 654 0 R 668 0 R 682 0 R]
+>> endobj
+698 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2798 0 R
+/Kids [690 0 R 704 0 R 742 0 R 757 0 R 762 0 R 768 0 R]
+>> endobj
+786 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2798 0 R
+/Kids [774 0 R 796 0 R 808 0 R 816 0 R 824 0 R 833 0 R]
+>> endobj
+843 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2798 0 R
+/Kids [840 0 R 845 0 R 856 0 R 860 0 R 880 0 R 893 0 R]
+>> endobj
+906 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2798 0 R
+/Kids [903 0 R 910 0 R 920 0 R 936 0 R 954 0 R 964 0 R]
+>> endobj
+980 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2799 0 R
+/Kids [974 0 R 983 0 R 991 0 R 997 0 R 1003 0 R 1010 0 R]
+>> endobj
+1025 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2799 0 R
+/Kids [1020 0 R 1028 0 R 1035 0 R 1039 0 R 1044 0 R 1052 0 R]
+>> endobj
+1066 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2799 0 R
+/Kids [1060 0 R 1068 0 R 1078 0 R 1087 0 R 1094 0 R 1102 0 R]
+>> endobj
+1117 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2799 0 R
+/Kids [1111 0 R 1120 0 R 1127 0 R 1135 0 R 1140 0 R 1145 0 R]
+>> endobj
+1158 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2799 0 R
+/Kids [1151 0 R 1160 0 R 1170 0 R 1178 0 R 1185 0 R 1192 0 R]
+>> endobj
+1205 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2799 0 R
+/Kids [1199 0 R 1207 0 R 1214 0 R 1222 0 R 1229 0 R 1237 0 R]
+>> endobj
+1248 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2800 0 R
+/Kids [1244 0 R 1251 0 R 1259 0 R 1269 0 R 1274 0 R 1285 0 R]
+>> endobj
+1298 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2800 0 R
+/Kids [1293 0 R 1301 0 R 1309 0 R 1316 0 R 1333 0 R 1340 0 R]
+>> endobj
+1363 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2800 0 R
+/Kids [1352 0 R 1366 0 R 1378 0 R 1385 0 R 1393 0 R 1397 0 R]
+>> endobj
+1405 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2800 0 R
+/Kids [1401 0 R 1409 0 R 1418 0 R 1425 0 R 1430 0 R 1436 0 R]
+>> endobj
+1445 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2800 0 R
+/Kids [1442 0 R 1450 0 R 1455 0 R 1466 0 R 1471 0 R 1476 0 R]
+>> endobj
+1495 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2800 0 R
+/Kids [1485 0 R 1500 0 R 1513 0 R 1524 0 R 1528 0 R 1534 0 R]
+>> endobj
+1543 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2801 0 R
+/Kids [1539 0 R 1545 0 R 1549 0 R 1553 0 R 1559 0 R 1563 0 R]
+>> endobj
+1573 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2801 0 R
+/Kids [1570 0 R 1575 0 R 1580 0 R 1586 0 R 1590 0 R 1597 0 R]
+>> endobj
+1608 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2801 0 R
+/Kids [1604 0 R 1611 0 R 1619 0 R 1625 0 R 1630 0 R 1636 0 R]
+>> endobj
+1643 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2801 0 R
+/Kids [1640 0 R 1645 0 R 1650 0 R 1655 0 R 1663 0 R 1668 0 R]
+>> endobj
+1681 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2801 0 R
+/Kids [1678 0 R 1683 0 R 1689 0 R 1693 0 R 1704 0 R 1708 0 R]
+>> endobj
+1717 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2801 0 R
+/Kids [1712 0 R 1719 0 R 1723 0 R 1728 0 R 1733 0 R 1737 0 R]
+>> endobj
+1753 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2802 0 R
+/Kids [1750 0 R 1766 0 R 1770 0 R 1774 0 R 1778 0 R 1783 0 R]
+>> endobj
+1795 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2802 0 R
+/Kids [1792 0 R 1797 0 R 1802 0 R 1806 0 R 1810 0 R 1814 0 R]
+>> endobj
+1838 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2802 0 R
+/Kids [1823 0 R 1842 0 R 1846 0 R 1850 0 R 1854 0 R 1858 0 R]
+>> endobj
+1865 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2802 0 R
+/Kids [1862 0 R 1867 0 R 1871 0 R 1875 0 R 1879 0 R 1884 0 R]
+>> endobj
+2030 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2802 0 R
+/Kids [2027 0 R 2173 0 R 2336 0 R 2466 0 R 2577 0 R 2710 0 R]
+>> endobj
+2724 0 obj <<
+/Type /Pages
+/Count 2
+/Parent 2802 0 R
+/Kids [2721 0 R 2726 0 R]
+>> endobj
+2798 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2803 0 R
+/Kids [464 0 R 620 0 R 698 0 R 786 0 R 843 0 R 906 0 R]
+>> endobj
+2799 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2803 0 R
+/Kids [980 0 R 1025 0 R 1066 0 R 1117 0 R 1158 0 R 1205 0 R]
+>> endobj
+2800 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2803 0 R
+/Kids [1248 0 R 1298 0 R 1363 0 R 1405 0 R 1445 0 R 1495 0 R]
+>> endobj
+2801 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2803 0 R
+/Kids [1543 0 R 1573 0 R 1608 0 R 1643 0 R 1681 0 R 1717 0 R]
+>> endobj
+2802 0 obj <<
+/Type /Pages
+/Count 32
+/Parent 2803 0 R
+/Kids [1753 0 R 1795 0 R 1838 0 R 1865 0 R 2030 0 R 2724 0 R]
+>> endobj
+2803 0 obj <<
+/Type /Pages
+/Count 176
+/Kids [2798 0 R 2799 0 R 2800 0 R 2801 0 R 2802 0 R]
+>> endobj
+2804 0 obj <<
+/Type /Outlines
+/First 7 0 R
+/Last 451 0 R
+/Count 14
+>> endobj
+451 0 obj <<
+/Title 452 0 R
+/A 449 0 R
+/Parent 2804 0 R
+/Prev 447 0 R
+>> endobj
+447 0 obj <<
+/Title 448 0 R
+/A 445 0 R
+/Parent 2804 0 R
+/Prev 435 0 R
+/Next 451 0 R
+>> endobj
+443 0 obj <<
+/Title 444 0 R
+/A 441 0 R
+/Parent 435 0 R
+/Prev 439 0 R
+>> endobj
+439 0 obj <<
+/Title 440 0 R
+/A 437 0 R
+/Parent 435 0 R
+/Next 443 0 R
+>> endobj
+435 0 obj <<
+/Title 436 0 R
+/A 433 0 R
+/Parent 2804 0 R
+/Prev 399 0 R
+/Next 447 0 R
+/First 439 0 R
+/Last 443 0 R
+/Count -2
+>> endobj
+431 0 obj <<
+/Title 432 0 R
+/A 429 0 R
+/Parent 399 0 R
+/Prev 427 0 R
+>> endobj
+427 0 obj <<
+/Title 428 0 R
+/A 425 0 R
+/Parent 399 0 R
+/Prev 423 0 R
+/Next 431 0 R
+>> endobj
+423 0 obj <<
+/Title 424 0 R
+/A 421 0 R
+/Parent 399 0 R
+/Prev 403 0 R
+/Next 427 0 R
+>> endobj
+419 0 obj <<
+/Title 420 0 R
+/A 417 0 R
+/Parent 403 0 R
+/Prev 415 0 R
+>> endobj
+415 0 obj <<
+/Title 416 0 R
+/A 413 0 R
+/Parent 403 0 R
+/Prev 411 0 R
+/Next 419 0 R
+>> endobj
+411 0 obj <<
+/Title 412 0 R
+/A 409 0 R
+/Parent 403 0 R
+/Prev 407 0 R
+/Next 415 0 R
+>> endobj
+407 0 obj <<
+/Title 408 0 R
+/A 405 0 R
+/Parent 403 0 R
+/Next 411 0 R
+>> endobj
+403 0 obj <<
+/Title 404 0 R
+/A 401 0 R
+/Parent 399 0 R
+/Next 423 0 R
+/First 407 0 R
+/Last 419 0 R
+/Count -4
+>> endobj
+399 0 obj <<
+/Title 400 0 R
+/A 397 0 R
+/Parent 2804 0 R
+/Prev 335 0 R
+/Next 435 0 R
+/First 403 0 R
+/Last 431 0 R
+/Count -4
+>> endobj
+395 0 obj <<
+/Title 396 0 R
+/A 393 0 R
+/Parent 379 0 R
+/Prev 391 0 R
+>> endobj
+391 0 obj <<
+/Title 392 0 R
+/A 389 0 R
+/Parent 379 0 R
+/Prev 387 0 R
+/Next 395 0 R
+>> endobj
+387 0 obj <<
+/Title 388 0 R
+/A 385 0 R
+/Parent 379 0 R
+/Prev 383 0 R
+/Next 391 0 R
+>> endobj
+383 0 obj <<
+/Title 384 0 R
+/A 381 0 R
+/Parent 379 0 R
+/Next 387 0 R
+>> endobj
+379 0 obj <<
+/Title 380 0 R
+/A 377 0 R
+/Parent 335 0 R
+/Prev 359 0 R
+/First 383 0 R
+/Last 395 0 R
+/Count -4
+>> endobj
+375 0 obj <<
+/Title 376 0 R
+/A 373 0 R
+/Parent 359 0 R
+/Prev 371 0 R
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 369 0 R
+/Parent 359 0 R
+/Prev 367 0 R
+/Next 375 0 R
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 365 0 R
+/Parent 359 0 R
+/Prev 363 0 R
+/Next 371 0 R
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 361 0 R
+/Parent 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 357 0 R
+/Parent 335 0 R
+/Prev 339 0 R
+/Next 379 0 R
+/First 363 0 R
+/Last 375 0 R
+/Count -4
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 353 0 R
+/Parent 339 0 R
+/Prev 351 0 R
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 349 0 R
+/Parent 339 0 R
+/Prev 347 0 R
+/Next 355 0 R
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 345 0 R
+/Parent 339 0 R
+/Prev 343 0 R
+/Next 351 0 R
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 341 0 R
+/Parent 339 0 R
+/Next 347 0 R
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 337 0 R
+/Parent 335 0 R
+/Next 359 0 R
+/First 343 0 R
+/Last 355 0 R
+/Count -4
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 333 0 R
+/Parent 2804 0 R
+/Prev 315 0 R
+/Next 399 0 R
+/First 339 0 R
+/Last 379 0 R
+/Count -3
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 329 0 R
+/Parent 315 0 R
+/Prev 327 0 R
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 325 0 R
+/Parent 315 0 R
+/Prev 323 0 R
+/Next 331 0 R
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 321 0 R
+/Parent 315 0 R
+/Prev 319 0 R
+/Next 327 0 R
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 317 0 R
+/Parent 315 0 R
+/Next 323 0 R
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 2804 0 R
+/Prev 279 0 R
+/Next 335 0 R
+/First 319 0 R
+/Last 331 0 R
+/Count -4
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 279 0 R
+/Prev 307 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 279 0 R
+/Prev 303 0 R
+/Next 311 0 R
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 279 0 R
+/Prev 299 0 R
+/Next 307 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 279 0 R
+/Prev 295 0 R
+/Next 303 0 R
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 279 0 R
+/Prev 291 0 R
+/Next 299 0 R
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 279 0 R
+/Prev 287 0 R
+/Next 295 0 R
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 279 0 R
+/Prev 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 2804 0 R
+/Prev 243 0 R
+/Next 315 0 R
+/First 283 0 R
+/Last 311 0 R
+/Count -8
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 243 0 R
+/Prev 271 0 R
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 243 0 R
+/Prev 267 0 R
+/Next 275 0 R
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 243 0 R
+/Prev 263 0 R
+/Next 271 0 R
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 243 0 R
+/Prev 259 0 R
+/Next 267 0 R
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 243 0 R
+/Prev 255 0 R
+/Next 263 0 R
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 243 0 R
+/Prev 251 0 R
+/Next 259 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 243 0 R
+/Prev 247 0 R
+/Next 255 0 R
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 243 0 R
+/Next 251 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 2804 0 R
+/Prev 83 0 R
+/Next 279 0 R
+/First 247 0 R
+/Last 275 0 R
+/Count -8
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 231 0 R
+/Prev 235 0 R
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 231 0 R
+/Next 239 0 R
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 83 0 R
+/Prev 187 0 R
+/First 235 0 R
+/Last 239 0 R
+/Count -2
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 187 0 R
+/Prev 223 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 187 0 R
+/Prev 219 0 R
+/Next 227 0 R
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 187 0 R
+/Prev 215 0 R
+/Next 223 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 187 0 R
+/Prev 211 0 R
+/Next 219 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 187 0 R
+/Prev 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 187 0 R
+/Prev 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 187 0 R
+/Prev 199 0 R
+/Next 207 0 R
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 187 0 R
+/Prev 195 0 R
+/Next 203 0 R
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 187 0 R
+/Prev 191 0 R
+/Next 199 0 R
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 187 0 R
+/Next 195 0 R
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 83 0 R
+/Prev 103 0 R
+/Next 231 0 R
+/First 191 0 R
+/Last 227 0 R
+/Count -10
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 103 0 R
+/Prev 155 0 R
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 155 0 R
+/Prev 175 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 155 0 R
+/Prev 171 0 R
+/Next 179 0 R
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 155 0 R
+/Prev 167 0 R
+/Next 175 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 155 0 R
+/Prev 163 0 R
+/Next 171 0 R
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 155 0 R
+/Prev 159 0 R
+/Next 167 0 R
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 155 0 R
+/Next 163 0 R
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 103 0 R
+/Prev 151 0 R
+/Next 183 0 R
+/First 159 0 R
+/Last 179 0 R
+/Count -6
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 103 0 R
+/Prev 127 0 R
+/Next 155 0 R
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 127 0 R
+/Prev 143 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 127 0 R
+/Prev 139 0 R
+/Next 147 0 R
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 127 0 R
+/Prev 135 0 R
+/Next 143 0 R
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 127 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 103 0 R
+/Prev 123 0 R
+/Next 151 0 R
+/First 131 0 R
+/Last 147 0 R
+/Count -5
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 103 0 R
+/Prev 119 0 R
+/Next 127 0 R
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 103 0 R
+/Prev 115 0 R
+/Next 123 0 R
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 103 0 R
+/Prev 111 0 R
+/Next 119 0 R
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 103 0 R
+/Prev 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 103 0 R
+/Next 111 0 R
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 83 0 R
+/Prev 99 0 R
+/Next 187 0 R
+/First 107 0 R
+/Last 183 0 R
+/Count -9
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 83 0 R
+/Prev 95 0 R
+/Next 103 0 R
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 83 0 R
+/Prev 91 0 R
+/Next 99 0 R
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 83 0 R
+/Prev 87 0 R
+/Next 95 0 R
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 83 0 R
+/Next 91 0 R
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 2804 0 R
+/Prev 71 0 R
+/Next 243 0 R
+/First 87 0 R
+/Last 231 0 R
+/Count -7
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 71 0 R
+/Prev 75 0 R
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 71 0 R
+/Next 79 0 R
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 2804 0 R
+/Prev 51 0 R
+/Next 83 0 R
+/First 75 0 R
+/Last 79 0 R
+/Count -2
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 51 0 R
+/Prev 63 0 R
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 51 0 R
+/Prev 59 0 R
+/Next 67 0 R
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 51 0 R
+/Prev 55 0 R
+/Next 63 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 51 0 R
+/Next 59 0 R
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 2804 0 R
+/Prev 15 0 R
+/Next 71 0 R
+/First 55 0 R
+/Last 67 0 R
+/Count -4
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 31 0 R
+/Prev 35 0 R
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 35 0 R
+/Prev 39 0 R
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 35 0 R
+/Next 43 0 R
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 31 0 R
+/Next 47 0 R
+/First 39 0 R
+/Last 43 0 R
+/Count -2
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 15 0 R
+/Prev 27 0 R
+/First 35 0 R
+/Last 47 0 R
+/Count -2
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 15 0 R
+/Prev 23 0 R
+/Next 31 0 R
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 15 0 R
+/Prev 19 0 R
+/Next 27 0 R
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 2804 0 R
+/Prev 11 0 R
+/Next 51 0 R
+/First 19 0 R
+/Last 31 0 R
+/Count -4
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 2804 0 R
+/Prev 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 2804 0 R
+/Next 11 0 R
+>> endobj
+2805 0 obj <<
+/Names [(Doc-Start) 459 0 R (Item.1) 760 0 R (Item.10) 942 0 R (Item.11) 943 0 R (Item.12) 944 0 R (Item.13) 945 0 R]
+/Limits [(Doc-Start) (Item.13)]
+>> endobj
+2806 0 obj <<
+/Names [(Item.14) 946 0 R (Item.15) 957 0 R (Item.16) 958 0 R (Item.17) 959 0 R (Item.18) 960 0 R (Item.19) 1312 0 R]
+/Limits [(Item.14) (Item.19)]
+>> endobj
+2807 0 obj <<
+/Names [(Item.2) 765 0 R (Item.20) 1313 0 R (Item.21) 1314 0 R (Item.22) 1319 0 R (Item.23) 1320 0 R (Item.24) 1321 0 R]
+/Limits [(Item.2) (Item.24)]
+>> endobj
+2808 0 obj <<
+/Names [(Item.25) 1322 0 R (Item.26) 1323 0 R (Item.27) 1324 0 R (Item.28) 1325 0 R (Item.29) 1326 0 R (Item.3) 766 0 R]
+/Limits [(Item.25) (Item.3)]
+>> endobj
+2809 0 obj <<
+/Names [(Item.30) 1327 0 R (Item.31) 1356 0 R (Item.32) 1357 0 R (Item.33) 1358 0 R (Item.34) 1359 0 R (Item.35) 1360 0 R]
+/Limits [(Item.30) (Item.35)]
+>> endobj
+2810 0 obj <<
+/Names [(Item.36) 1361 0 R (Item.37) 1362 0 R (Item.38) 1369 0 R (Item.39) 1370 0 R (Item.4) 923 0 R (Item.40) 1371 0 R]
+/Limits [(Item.36) (Item.40)]
+>> endobj
+2811 0 obj <<
+/Names [(Item.41) 1372 0 R (Item.42) 1373 0 R (Item.43) 1374 0 R (Item.44) 1375 0 R (Item.45) 1404 0 R (Item.46) 1412 0 R]
+/Limits [(Item.41) (Item.46)]
+>> endobj
+2812 0 obj <<
+/Names [(Item.47) 1413 0 R (Item.48) 1421 0 R (Item.49) 1422 0 R (Item.5) 924 0 R (Item.50) 1453 0 R (Item.51) 1458 0 R]
+/Limits [(Item.47) (Item.51)]
+>> endobj
+2813 0 obj <<
+/Names [(Item.52) 1459 0 R (Item.53) 1469 0 R (Item.54) 1488 0 R (Item.55) 1489 0 R (Item.56) 1490 0 R (Item.57) 1491 0 R]
+/Limits [(Item.52) (Item.57)]
+>> endobj
+2814 0 obj <<
+/Names [(Item.58) 1492 0 R (Item.59) 1493 0 R (Item.6) 925 0 R (Item.60) 1494 0 R (Item.61) 1503 0 R (Item.62) 1504 0 R]
+/Limits [(Item.58) (Item.62)]
+>> endobj
+2815 0 obj <<
+/Names [(Item.63) 1505 0 R (Item.64) 1506 0 R (Item.65) 1507 0 R (Item.66) 1508 0 R (Item.67) 1516 0 R (Item.68) 1517 0 R]
+/Limits [(Item.63) (Item.68)]
+>> endobj
+2816 0 obj <<
+/Names [(Item.69) 1518 0 R (Item.7) 939 0 R (Item.70) 1519 0 R (Item.71) 1520 0 R (Item.72) 1715 0 R (Item.73) 1716 0 R]
+/Limits [(Item.69) (Item.73)]
+>> endobj
+2817 0 obj <<
+/Names [(Item.74) 1826 0 R (Item.75) 1827 0 R (Item.76) 1828 0 R (Item.77) 1829 0 R (Item.78) 1830 0 R (Item.79) 1831 0 R]
+/Limits [(Item.74) (Item.79)]
+>> endobj
+2818 0 obj <<
+/Names [(Item.8) 940 0 R (Item.80) 1832 0 R (Item.81) 1833 0 R (Item.82) 1834 0 R (Item.83) 1835 0 R (Item.84) 1836 0 R]
+/Limits [(Item.8) (Item.84)]
+>> endobj
+2819 0 obj <<
+/Names [(Item.85) 1837 0 R (Item.9) 941 0 R (appendix*.146) 1882 0 R (appendix.A) 398 0 R (appendix.B) 434 0 R (chapter*.1) 518 0 R]
+/Limits [(Item.85) (chapter*.1)]
+>> endobj
+2820 0 obj <<
+/Names [(chapter*.2) 618 0 R (chapter*.4) 645 0 R (chapter.1) 14 0 R (chapter.2) 50 0 R (chapter.3) 70 0 R (chapter.4) 82 0 R]
+/Limits [(chapter*.2) (chapter.4)]
+>> endobj
+2821 0 obj <<
+/Names [(chapter.5) 242 0 R (chapter.6) 278 0 R (chapter.7) 314 0 R (chapter.8) 334 0 R (cite.BBH:89) 672 0 R (cite.BrHi:89) 675 0 R]
+/Limits [(chapter.5) (cite.BrHi:89)]
+>> endobj
+2822 0 obj <<
+/Names [(cite.ByHi:75) 787 0 R (cite.ByHi:98) 755 0 R (cite.ByHi:99) 680 0 R (cite.Byr:92) 673 0 R (cite.CoHi:94) 754 0 R (cite.CoHi:96) 676 0 R]
+/Limits [(cite.ByHi:75) (cite.CoHi:96)]
+>> endobj
+2823 0 obj <<
+/Names [(cite.DGL:99) 803 0 R (cite.DaPa:10) 800 0 R (cite.Fre:93) 679 0 R (cite.HBGLSSW:05) 671 0 R (cite.HeSh:80) 838 0 R (cite.HiTa:98) 1338 0 R]
+/Limits [(cite.DGL:99) (cite.HiTa:98)]
+>> endobj
+2824 0 obj <<
+/Names [(cite.Hin:00) 827 0 R (cite.Hin:92) 836 0 R (cite.Hin:95) 837 0 R (cite.JaSD:80) 788 0 R (cite.KLU_site) 801 0 R (cite.Li:05) 802 0 R]
+/Limits [(cite.Hin:00) (cite.Li:05)]
+>> endobj
+2825 0 obj <<
+/Names [(cite.RaHi:94) 674 0 R (cite.SaSc:86) 677 0 R (cite.SuperLUMT_site) 804 0 R (cite.Van:92) 678 0 R (cite.arkode_ex) 1614 0 R (cite.cvode_ex) 753 0 R]
+/Limits [(cite.RaHi:94) (cite.cvode_ex)]
+>> endobj
+2826 0 obj <<
+/Names [(cite.ida_ex) 1623 0 R (equation.2.1) 777 0 R (equation.2.2) 780 0 R (equation.2.3) 783 0 R (equation.2.4) 784 0 R (equation.2.5) 785 0 R]
+/Limits [(cite.ida_ex) (equation.2.5)]
+>> endobj
+2827 0 obj <<
+/Names [(equation.2.6) 799 0 R (equation.2.7) 819 0 R (equation.4.1) 1343 0 R (equation.4.2) 1344 0 R (equation.4.3) 1345 0 R (equation.4.4) 1346 0 R]
+/Limits [(equation.2.6) (equation.4.4)]
+>> endobj
+2828 0 obj <<
+/Names [(equation.4.5) 1347 0 R (figure.3.1) 647 0 R (figure.3.2) 648 0 R (figure.8.1) 649 0 R (figure.8.2) 650 0 R (figure.A.1) 651 0 R]
+/Limits [(equation.4.5) (figure.A.1)]
+>> endobj
+2829 0 obj <<
+/Names [(figure.A.2) 652 0 R (page.1) 670 0 R (page.10) 798 0 R (page.100) 1547 0 R (page.101) 1551 0 R (page.102) 1555 0 R]
+/Limits [(figure.A.2) (page.102)]
+>> endobj
+2830 0 obj <<
+/Names [(page.103) 1561 0 R (page.104) 1565 0 R (page.105) 1572 0 R (page.106) 1577 0 R (page.107) 1582 0 R (page.108) 1588 0 R]
+/Limits [(page.103) (page.108)]
+>> endobj
+2831 0 obj <<
+/Names [(page.109) 1592 0 R (page.11) 810 0 R (page.110) 1599 0 R (page.111) 1606 0 R (page.112) 1613 0 R (page.113) 1621 0 R]
+/Limits [(page.109) (page.113)]
+>> endobj
+2832 0 obj <<
+/Names [(page.114) 1627 0 R (page.115) 1632 0 R (page.116) 1638 0 R (page.117) 1642 0 R (page.118) 1647 0 R (page.119) 1652 0 R]
+/Limits [(page.114) (page.119)]
+>> endobj
+2833 0 obj <<
+/Names [(page.12) 818 0 R (page.120) 1657 0 R (page.121) 1665 0 R (page.122) 1670 0 R (page.123) 1680 0 R (page.124) 1685 0 R]
+/Limits [(page.12) (page.124)]
+>> endobj
+2834 0 obj <<
+/Names [(page.125) 1691 0 R (page.126) 1695 0 R (page.127) 1706 0 R (page.128) 1710 0 R (page.129) 1714 0 R (page.13) 826 0 R]
+/Limits [(page.125) (page.13)]
+>> endobj
+2835 0 obj <<
+/Names [(page.130) 1721 0 R (page.131) 1725 0 R (page.132) 1730 0 R (page.133) 1735 0 R (page.134) 1739 0 R (page.135) 1752 0 R]
+/Limits [(page.130) (page.135)]
+>> endobj
+2836 0 obj <<
+/Names [(page.136) 1768 0 R (page.137) 1772 0 R (page.138) 1776 0 R (page.139) 1780 0 R (page.14) 835 0 R (page.140) 1785 0 R]
+/Limits [(page.136) (page.140)]
+>> endobj
+2837 0 obj <<
+/Names [(page.141) 1794 0 R (page.142) 1799 0 R (page.143) 1804 0 R (page.144) 1808 0 R (page.145) 1812 0 R (page.146) 1816 0 R]
+/Limits [(page.141) (page.146)]
+>> endobj
+2838 0 obj <<
+/Names [(page.147) 1825 0 R (page.148) 1844 0 R (page.149) 1848 0 R (page.15) 842 0 R (page.150) 1852 0 R (page.151) 1856 0 R]
+/Limits [(page.147) (page.151)]
+>> endobj
+2839 0 obj <<
+/Names [(page.152) 1860 0 R (page.153) 1864 0 R (page.154) 1869 0 R (page.155) 1873 0 R (page.156) 1877 0 R (page.157) 1881 0 R]
+/Limits [(page.152) (page.157)]
+>> endobj
+2840 0 obj <<
+/Names [(page.158) 1886 0 R (page.159) 2029 0 R (page.16) 847 0 R (page.160) 2175 0 R (page.161) 2338 0 R (page.162) 2468 0 R]
+/Limits [(page.158) (page.162)]
+>> endobj
+2841 0 obj <<
+/Names [(page.163) 2579 0 R (page.164) 2712 0 R (page.165) 2723 0 R (page.166) 2728 0 R (page.17) 858 0 R (page.18) 862 0 R]
+/Limits [(page.163) (page.18)]
+>> endobj
+2842 0 obj <<
+/Names [(page.19) 882 0 R (page.2) 684 0 R (page.20) 895 0 R (page.21) 905 0 R (page.22) 912 0 R (page.23) 922 0 R]
+/Limits [(page.19) (page.23)]
+>> endobj
+2843 0 obj <<
+/Names [(page.24) 938 0 R (page.25) 956 0 R (page.26) 966 0 R (page.27) 976 0 R (page.28) 985 0 R (page.29) 993 0 R]
+/Limits [(page.24) (page.29)]
+>> endobj
+2844 0 obj <<
+/Names [(page.3) 692 0 R (page.30) 999 0 R (page.31) 1005 0 R (page.32) 1012 0 R (page.33) 1022 0 R (page.34) 1030 0 R]
+/Limits [(page.3) (page.34)]
+>> endobj
+2845 0 obj <<
+/Names [(page.35) 1037 0 R (page.36) 1041 0 R (page.37) 1046 0 R (page.38) 1054 0 R (page.39) 1062 0 R (page.4) 706 0 R]
+/Limits [(page.35) (page.4)]
+>> endobj
+2846 0 obj <<
+/Names [(page.40) 1070 0 R (page.41) 1080 0 R (page.42) 1089 0 R (page.43) 1096 0 R (page.44) 1104 0 R (page.45) 1113 0 R]
+/Limits [(page.40) (page.45)]
+>> endobj
+2847 0 obj <<
+/Names [(page.46) 1122 0 R (page.47) 1129 0 R (page.48) 1137 0 R (page.49) 1142 0 R (page.5) 744 0 R (page.50) 1147 0 R]
+/Limits [(page.46) (page.50)]
+>> endobj
+2848 0 obj <<
+/Names [(page.51) 1153 0 R (page.52) 1162 0 R (page.53) 1172 0 R (page.54) 1180 0 R (page.55) 1187 0 R (page.56) 1194 0 R]
+/Limits [(page.51) (page.56)]
+>> endobj
+2849 0 obj <<
+/Names [(page.57) 1201 0 R (page.58) 1209 0 R (page.59) 1216 0 R (page.6) 759 0 R (page.60) 1224 0 R (page.61) 1231 0 R]
+/Limits [(page.57) (page.61)]
+>> endobj
+2850 0 obj <<
+/Names [(page.62) 1239 0 R (page.63) 1246 0 R (page.64) 1253 0 R (page.65) 1261 0 R (page.66) 1271 0 R (page.67) 1276 0 R]
+/Limits [(page.62) (page.67)]
+>> endobj
+2851 0 obj <<
+/Names [(page.68) 1287 0 R (page.69) 1295 0 R (page.7) 764 0 R (page.70) 1303 0 R (page.71) 1311 0 R (page.72) 1318 0 R]
+/Limits [(page.68) (page.72)]
+>> endobj
+2852 0 obj <<
+/Names [(page.73) 1335 0 R (page.74) 1342 0 R (page.75) 1354 0 R (page.76) 1368 0 R (page.77) 1380 0 R (page.78) 1387 0 R]
+/Limits [(page.73) (page.78)]
+>> endobj
+2853 0 obj <<
+/Names [(page.79) 1395 0 R (page.8) 770 0 R (page.80) 1399 0 R (page.81) 1403 0 R (page.82) 1411 0 R (page.83) 1420 0 R]
+/Limits [(page.79) (page.83)]
+>> endobj
+2854 0 obj <<
+/Names [(page.84) 1427 0 R (page.85) 1432 0 R (page.86) 1438 0 R (page.87) 1444 0 R (page.88) 1452 0 R (page.89) 1457 0 R]
+/Limits [(page.84) (page.89)]
+>> endobj
+2855 0 obj <<
+/Names [(page.9) 776 0 R (page.90) 1468 0 R (page.91) 1473 0 R (page.92) 1478 0 R (page.93) 1487 0 R (page.94) 1502 0 R]
+/Limits [(page.9) (page.94)]
+>> endobj
+2856 0 obj <<
+/Names [(page.95) 1515 0 R (page.96) 1526 0 R (page.97) 1530 0 R (page.98) 1536 0 R (page.99) 1541 0 R (page.i) 458 0 R]
+/Limits [(page.95) (page.i)]
+>> endobj
+2857 0 obj <<
+/Names [(page.ii) 471 0 R (page.iii) 516 0 R (page.iv) 573 0 R (page.ix) 644 0 R (page.v) 599 0 R (page.vi) 603 0 R]
+/Limits [(page.ii) (page.vi)]
+>> endobj
+2858 0 obj <<
+/Names [(page.vii) 617 0 R (page.viii) 634 0 R (page.x) 656 0 R (section*.10) 696 0 R (section*.100) 1226 0 R (section*.101) 1227 0 R]
+/Limits [(page.vii) (section*.101)]
+>> endobj
+2859 0 obj <<
+/Names [(section*.102) 1232 0 R (section*.103) 1233 0 R (section*.104) 1234 0 R (section*.105) 1235 0 R (section*.106) 1240 0 R (section*.107) 1241 0 R]
+/Limits [(section*.102) (section*.107)]
+>> endobj
+2860 0 obj <<
+/Names [(section*.108) 1247 0 R (section*.109) 1254 0 R (section*.11) 707 0 R (section*.110) 1255 0 R (section*.111) 1262 0 R (section*.112) 1263 0 R]
+/Limits [(section*.108) (section*.112)]
+>> endobj
+2861 0 obj <<
+/Names [(section*.113) 1272 0 R (section*.114) 1277 0 R (section*.115) 1288 0 R (section*.116) 1296 0 R (section*.117) 1297 0 R (section*.118) 1304 0 R]
+/Limits [(section*.113) (section*.118)]
+>> endobj
+2862 0 obj <<
+/Names [(section*.119) 1328 0 R (section*.12) 708 0 R (section*.120) 1336 0 R (section*.121) 1337 0 R (section*.122) 1348 0 R (section*.123) 1355 0 R]
+/Limits [(section*.119) (section*.123)]
+>> endobj
+2863 0 obj <<
+/Names [(section*.124) 1376 0 R (section*.125) 1381 0 R (section*.126) 1382 0 R (section*.127) 1388 0 R (section*.128) 1414 0 R (section*.129) 1566 0 R]
+/Limits [(section*.124) (section*.129)]
+>> endobj
+2864 0 obj <<
+/Names [(section*.13) 709 0 R (section*.130) 1578 0 R (section*.131) 1593 0 R (section*.132) 1607 0 R (section*.133) 1622 0 R (section*.134) 1628 0 R]
+/Limits [(section*.13) (section*.134)]
+>> endobj
+2865 0 obj <<
+/Names [(section*.135) 1658 0 R (section*.136) 1659 0 R (section*.137) 1666 0 R (section*.138) 1671 0 R (section*.139) 1786 0 R (section*.14) 710 0 R]
+/Limits [(section*.135) (section*.14)]
+>> endobj
+2866 0 obj <<
+/Names [(section*.140) 1800 0 R (section*.141) 1817 0 R (section*.142) 1818 0 R (section*.143) 1819 0 R (section*.144) 1820 0 R (section*.145) 1821 0 R]
+/Limits [(section*.140) (section*.145)]
+>> endobj
+2867 0 obj <<
+/Names [(section*.147) 446 0 R (section*.148) 450 0 R (section*.15) 745 0 R (section*.16) 967 0 R (section*.17) 968 0 R (section*.18) 969 0 R]
+/Limits [(section*.147) (section*.18)]
+>> endobj
+2868 0 obj <<
+/Names [(section*.19) 977 0 R (section*.20) 978 0 R (section*.21) 979 0 R (section*.22) 994 0 R (section*.23) 995 0 R (section*.24) 1000 0 R]
+/Limits [(section*.19) (section*.24)]
+>> endobj
+2869 0 obj <<
+/Names [(section*.25) 1001 0 R (section*.26) 1006 0 R (section*.27) 1007 0 R (section*.28) 1013 0 R (section*.29) 1014 0 R (section*.3) 6 0 R]
+/Limits [(section*.25) (section*.3)]
+>> endobj
+2870 0 obj <<
+/Names [(section*.30) 1015 0 R (section*.31) 1023 0 R (section*.32) 1024 0 R (section*.33) 1031 0 R (section*.34) 1047 0 R (section*.35) 1048 0 R]
+/Limits [(section*.30) (section*.35)]
+>> endobj
+2871 0 obj <<
+/Names [(section*.36) 1049 0 R (section*.37) 1055 0 R (section*.38) 1056 0 R (section*.39) 1057 0 R (section*.40) 1058 0 R (section*.41) 1063 0 R]
+/Limits [(section*.36) (section*.41)]
+>> endobj
+2872 0 obj <<
+/Names [(section*.42) 1064 0 R (section*.43) 1065 0 R (section*.44) 1071 0 R (section*.45) 1072 0 R (section*.46) 1073 0 R (section*.47) 1074 0 R]
+/Limits [(section*.42) (section*.47)]
+>> endobj
+2873 0 obj <<
+/Names [(section*.48) 1081 0 R (section*.49) 1082 0 R (section*.5) 10 0 R (section*.50) 1083 0 R (section*.51) 1090 0 R (section*.52) 1091 0 R]
+/Limits [(section*.48) (section*.52)]
+>> endobj
+2874 0 obj <<
+/Names [(section*.53) 1097 0 R (section*.54) 1098 0 R (section*.55) 1105 0 R (section*.56) 1114 0 R (section*.57) 1115 0 R (section*.58) 1116 0 R]
+/Limits [(section*.53) (section*.58)]
+>> endobj
+2875 0 obj <<
+/Names [(section*.59) 1123 0 R (section*.6) 686 0 R (section*.60) 1124 0 R (section*.61) 1125 0 R (section*.62) 1130 0 R (section*.63) 1131 0 R]
+/Limits [(section*.59) (section*.63)]
+>> endobj
+2876 0 obj <<
+/Names [(section*.64) 1132 0 R (section*.65) 1138 0 R (section*.66) 1148 0 R (section*.67) 1149 0 R (section*.68) 1154 0 R (section*.69) 1155 0 R]
+/Limits [(section*.64) (section*.69)]
+>> endobj
+2877 0 obj <<
+/Names [(section*.7) 687 0 R (section*.70) 1156 0 R (section*.71) 1157 0 R (section*.72) 1163 0 R (section*.73) 1164 0 R (section*.74) 1165 0 R]
+/Limits [(section*.7) (section*.74)]
+>> endobj
+2878 0 obj <<
+/Names [(section*.75) 1166 0 R (section*.76) 1173 0 R (section*.77) 1174 0 R (section*.78) 1175 0 R (section*.79) 1176 0 R (section*.8) 693 0 R]
+/Limits [(section*.75) (section*.8)]
+>> endobj
+2879 0 obj <<
+/Names [(section*.80) 1181 0 R (section*.81) 1182 0 R (section*.82) 1183 0 R (section*.83) 1188 0 R (section*.84) 1189 0 R (section*.85) 1190 0 R]
+/Limits [(section*.80) (section*.85)]
+>> endobj
+2880 0 obj <<
+/Names [(section*.86) 1195 0 R (section*.87) 1196 0 R (section*.88) 1197 0 R (section*.89) 1202 0 R (section*.9) 695 0 R (section*.90) 1203 0 R]
+/Limits [(section*.86) (section*.90)]
+>> endobj
+2881 0 obj <<
+/Names [(section*.91) 1204 0 R (section*.92) 1210 0 R (section*.93) 1211 0 R (section*.94) 1212 0 R (section*.95) 1217 0 R (section*.96) 1218 0 R]
+/Limits [(section*.91) (section*.96)]
+>> endobj
+2882 0 obj <<
+/Names [(section*.97) 1219 0 R (section*.98) 1220 0 R (section*.99) 1225 0 R (section.1.1) 18 0 R (section.1.2) 22 0 R (section.1.3) 26 0 R]
+/Limits [(section*.97) (section.1.3)]
+>> endobj
+2883 0 obj <<
+/Names [(section.1.4) 30 0 R (section.2.1) 54 0 R (section.2.2) 58 0 R (section.2.3) 62 0 R (section.2.4) 66 0 R (section.3.1) 74 0 R]
+/Limits [(section.1.4) (section.3.1)]
+>> endobj
+2884 0 obj <<
+/Names [(section.3.2) 78 0 R (section.4.1) 86 0 R (section.4.2) 90 0 R (section.4.3) 94 0 R (section.4.4) 98 0 R (section.4.5) 102 0 R]
+/Limits [(section.3.2) (section.4.5)]
+>> endobj
+2885 0 obj <<
+/Names [(section.4.6) 186 0 R (section.4.7) 230 0 R (section.5.1) 246 0 R (section.5.2) 250 0 R (section.5.3) 254 0 R (section.5.4) 258 0 R]
+/Limits [(section.4.6) (section.5.4)]
+>> endobj
+2886 0 obj <<
+/Names [(section.5.5) 262 0 R (section.5.6) 266 0 R (section.5.7) 270 0 R (section.5.8) 274 0 R (section.6.1) 282 0 R (section.6.2) 286 0 R]
+/Limits [(section.5.5) (section.6.2)]
+>> endobj
+2887 0 obj <<
+/Names [(section.6.3) 290 0 R (section.6.4) 294 0 R (section.6.5) 298 0 R (section.6.6) 302 0 R (section.6.7) 306 0 R (section.6.8) 310 0 R]
+/Limits [(section.6.3) (section.6.8)]
+>> endobj
+2888 0 obj <<
+/Names [(section.7.1) 318 0 R (section.7.2) 322 0 R (section.7.3) 326 0 R (section.7.4) 330 0 R (section.8.1) 338 0 R (section.8.2) 358 0 R]
+/Limits [(section.7.1) (section.8.2)]
+>> endobj
+2889 0 obj <<
+/Names [(section.8.3) 378 0 R (section.A.1) 402 0 R (section.A.2) 422 0 R (section.A.3) 426 0 R (section.A.4) 430 0 R (section.B.1) 438 0 R]
+/Limits [(section.8.3) (section.B.1)]
+>> endobj
+2890 0 obj <<
+/Names [(section.B.2) 442 0 R (subfigure.3.1.1) 863 0 R (subfigure.3.1.2) 865 0 R (subsection.1.4.1) 34 0 R (subsection.1.4.2) 46 0 R (subsection.4.5.1) 106 0 R]
+/Limits [(section.B.2) (subsection.4.5.1)]
+>> endobj
+2891 0 obj <<
+/Names [(subsection.4.5.2) 110 0 R (subsection.4.5.3) 114 0 R (subsection.4.5.4) 118 0 R (subsection.4.5.5) 122 0 R (subsection.4.5.6) 126 0 R (subsection.4.5.7) 150 0 R]
+/Limits [(subsection.4.5.2) (subsection.4.5.7)]
+>> endobj
+2892 0 obj <<
+/Names [(subsection.4.5.8) 154 0 R (subsection.4.5.9) 182 0 R (subsection.4.6.1) 190 0 R (subsection.4.6.10) 226 0 R (subsection.4.6.2) 194 0 R (subsection.4.6.3) 198 0 R]
+/Limits [(subsection.4.5.8) (subsection.4.6.3)]
+>> endobj
+2893 0 obj <<
+/Names [(subsection.4.6.4) 202 0 R (subsection.4.6.5) 206 0 R (subsection.4.6.6) 210 0 R (subsection.4.6.7) 214 0 R (subsection.4.6.8) 218 0 R (subsection.4.6.9) 222 0 R]
+/Limits [(subsection.4.6.4) (subsection.4.6.9)]
+>> endobj
+2894 0 obj <<
+/Names [(subsection.4.7.1) 234 0 R (subsection.4.7.2) 238 0 R (subsection.8.1.1) 342 0 R (subsection.8.1.2) 346 0 R (subsection.8.1.3) 350 0 R (subsection.8.1.4) 354 0 R]
+/Limits [(subsection.4.7.1) (subsection.8.1.4)]
+>> endobj
+2895 0 obj <<
+/Names [(subsection.8.2.1) 362 0 R (subsection.8.2.2) 366 0 R (subsection.8.2.3) 370 0 R (subsection.8.2.4) 374 0 R (subsection.8.3.1) 382 0 R (subsection.8.3.2) 386 0 R]
+/Limits [(subsection.8.2.1) (subsection.8.3.2)]
+>> endobj
+2896 0 obj <<
+/Names [(subsection.8.3.3) 390 0 R (subsection.8.3.4) 394 0 R (subsection.A.1.1) 406 0 R (subsection.A.1.2) 410 0 R (subsection.A.1.3) 414 0 R (subsection.A.1.4) 418 0 R]
+/Limits [(subsection.8.3.3) (subsection.A.1.4)]
+>> endobj
+2897 0 obj <<
+/Names [(subsubsection.1.4.1.1) 38 0 R (subsubsection.1.4.1.2) 42 0 R (subsubsection.4.5.6.1) 130 0 R (subsubsection.4.5.6.2) 134 0 R (subsubsection.4.5.6.3) 138 0 R (subsubsection.4.5.6.4) 142 0 R]
+/Limits [(subsubsection.1.4.1.1) (subsubsection.4.5.6.4)]
+>> endobj
+2898 0 obj <<
+/Names [(subsubsection.4.5.6.5) 146 0 R (subsubsection.4.5.8.1) 158 0 R (subsubsection.4.5.8.2) 162 0 R (subsubsection.4.5.8.3) 166 0 R (subsubsection.4.5.8.4) 170 0 R (subsubsection.4.5.8.5) 174 0 R]
+/Limits [(subsubsection.4.5.6.5) (subsubsection.4.5.8.5)]
+>> endobj
+2899 0 obj <<
+/Names [(subsubsection.4.5.8.6) 178 0 R (table.4.1) 621 0 R (table.4.2) 622 0 R (table.4.3) 623 0 R (table.5.1) 624 0 R (table.5.2) 625 0 R]
+/Limits [(subsubsection.4.5.8.6) (table.5.2)]
+>> endobj
+2900 0 obj <<
+/Names [(table.6.1) 626 0 R (table.6.2) 627 0 R (table.6.3) 628 0 R (table.A.1) 629 0 R (table.A.2) 630 0 R]
+/Limits [(table.6.1) (table.A.2)]
+>> endobj
+2901 0 obj <<
+/Kids [2805 0 R 2806 0 R 2807 0 R 2808 0 R 2809 0 R 2810 0 R]
+/Limits [(Doc-Start) (Item.40)]
+>> endobj
+2902 0 obj <<
+/Kids [2811 0 R 2812 0 R 2813 0 R 2814 0 R 2815 0 R 2816 0 R]
+/Limits [(Item.41) (Item.73)]
+>> endobj
+2903 0 obj <<
+/Kids [2817 0 R 2818 0 R 2819 0 R 2820 0 R 2821 0 R 2822 0 R]
+/Limits [(Item.74) (cite.CoHi:96)]
+>> endobj
+2904 0 obj <<
+/Kids [2823 0 R 2824 0 R 2825 0 R 2826 0 R 2827 0 R 2828 0 R]
+/Limits [(cite.DGL:99) (figure.A.1)]
+>> endobj
+2905 0 obj <<
+/Kids [2829 0 R 2830 0 R 2831 0 R 2832 0 R 2833 0 R 2834 0 R]
+/Limits [(figure.A.2) (page.13)]
+>> endobj
+2906 0 obj <<
+/Kids [2835 0 R 2836 0 R 2837 0 R 2838 0 R 2839 0 R 2840 0 R]
+/Limits [(page.130) (page.162)]
+>> endobj
+2907 0 obj <<
+/Kids [2841 0 R 2842 0 R 2843 0 R 2844 0 R 2845 0 R 2846 0 R]
+/Limits [(page.163) (page.45)]
+>> endobj
+2908 0 obj <<
+/Kids [2847 0 R 2848 0 R 2849 0 R 2850 0 R 2851 0 R 2852 0 R]
+/Limits [(page.46) (page.78)]
+>> endobj
+2909 0 obj <<
+/Kids [2853 0 R 2854 0 R 2855 0 R 2856 0 R 2857 0 R 2858 0 R]
+/Limits [(page.79) (section*.101)]
+>> endobj
+2910 0 obj <<
+/Kids [2859 0 R 2860 0 R 2861 0 R 2862 0 R 2863 0 R 2864 0 R]
+/Limits [(section*.102) (section*.134)]
+>> endobj
+2911 0 obj <<
+/Kids [2865 0 R 2866 0 R 2867 0 R 2868 0 R 2869 0 R 2870 0 R]
+/Limits [(section*.135) (section*.35)]
+>> endobj
+2912 0 obj <<
+/Kids [2871 0 R 2872 0 R 2873 0 R 2874 0 R 2875 0 R 2876 0 R]
+/Limits [(section*.36) (section*.69)]
+>> endobj
+2913 0 obj <<
+/Kids [2877 0 R 2878 0 R 2879 0 R 2880 0 R 2881 0 R 2882 0 R]
+/Limits [(section*.7) (section.1.3)]
+>> endobj
+2914 0 obj <<
+/Kids [2883 0 R 2884 0 R 2885 0 R 2886 0 R 2887 0 R 2888 0 R]
+/Limits [(section.1.4) (section.8.2)]
+>> endobj
+2915 0 obj <<
+/Kids [2889 0 R 2890 0 R 2891 0 R 2892 0 R 2893 0 R 2894 0 R]
+/Limits [(section.8.3) (subsection.8.1.4)]
+>> endobj
+2916 0 obj <<
+/Kids [2895 0 R 2896 0 R 2897 0 R 2898 0 R 2899 0 R 2900 0 R]
+/Limits [(subsection.8.2.1) (table.A.2)]
+>> endobj
+2917 0 obj <<
+/Kids [2901 0 R 2902 0 R 2903 0 R 2904 0 R 2905 0 R 2906 0 R]
+/Limits [(Doc-Start) (page.162)]
+>> endobj
+2918 0 obj <<
+/Kids [2907 0 R 2908 0 R 2909 0 R 2910 0 R 2911 0 R 2912 0 R]
+/Limits [(page.163) (section*.69)]
+>> endobj
+2919 0 obj <<
+/Kids [2913 0 R 2914 0 R 2915 0 R 2916 0 R]
+/Limits [(section*.7) (table.A.2)]
+>> endobj
+2920 0 obj <<
+/Kids [2917 0 R 2918 0 R 2919 0 R]
+/Limits [(Doc-Start) (table.A.2)]
+>> endobj
+2921 0 obj <<
+/Dests 2920 0 R
+>> endobj
+2922 0 obj <<
+/Type /Catalog
+/Pages 2803 0 R
+/Outlines 2804 0 R
+/Names 2921 0 R
+/PageMode/UseOutlines/PageLabels << /Nums [0 << /S /r >> 10 << /S /D >> ] >>
+/OpenAction 453 0 R
+>> endobj
+2923 0 obj <<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
+/CreationDate (D:20160926151712-07'00')
+/ModDate (D:20160926151712-07'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
+>> endobj
+xref
+0 2924
+0000000001 65535 f 
+0000000002 00000 f 
+0000000003 00000 f 
+0000000004 00000 f 
+0000000000 00000 f 
+0000000015 00000 n 
+0000044412 00000 n 
+0001281066 00000 n 
+0000000061 00000 n 
+0000000093 00000 n 
+0000046760 00000 n 
+0001280979 00000 n 
+0000000139 00000 n 
+0000000173 00000 n 
+0000052527 00000 n 
+0001280853 00000 n 
+0000000219 00000 n 
+0000000250 00000 n 
+0000052585 00000 n 
+0001280779 00000 n 
+0000000298 00000 n 
+0000000338 00000 n 
+0000056818 00000 n 
+0001280692 00000 n 
+0000000386 00000 n 
+0000000435 00000 n 
+0000066878 00000 n 
+0001280605 00000 n 
+0000000483 00000 n 
+0000000525 00000 n 
+0000077650 00000 n 
+0001280494 00000 n 
+0000000573 00000 n 
+0000000616 00000 n 
+0000080571 00000 n 
+0001280383 00000 n 
+0000000669 00000 n 
+0000000705 00000 n 
+0000080629 00000 n 
+0001280309 00000 n 
+0000000763 00000 n 
+0000000800 00000 n 
+0000080687 00000 n 
+0001280235 00000 n 
+0000000858 00000 n 
+0000000893 00000 n 
+0000080745 00000 n 
+0001280161 00000 n 
+0000000946 00000 n 
+0000000976 00000 n 
+0000086486 00000 n 
+0001280035 00000 n 
+0000001022 00000 n 
+0000001068 00000 n 
+0000086606 00000 n 
+0001279961 00000 n 
+0000001116 00000 n 
+0000001147 00000 n 
+0000108141 00000 n 
+0001279874 00000 n 
+0000001195 00000 n 
+0000001229 00000 n 
+0000108198 00000 n 
+0001279787 00000 n 
+0000001277 00000 n 
+0000001325 00000 n 
+0000114034 00000 n 
+0001279713 00000 n 
+0000001373 00000 n 
+0000001403 00000 n 
+0000122209 00000 n 
+0001279587 00000 n 
+0000001449 00000 n 
+0000001485 00000 n 
+0000122267 00000 n 
+0001279513 00000 n 
+0000001533 00000 n 
+0000001573 00000 n 
+0000122325 00000 n 
+0001279439 00000 n 
+0000001621 00000 n 
+0000001658 00000 n 
+0000212744 00000 n 
+0001279311 00000 n 
+0000001704 00000 n 
+0000001753 00000 n 
+0000212802 00000 n 
+0001279237 00000 n 
+0000001801 00000 n 
+0000001854 00000 n 
+0000217579 00000 n 
+0001279150 00000 n 
+0000001902 00000 n 
+0000001931 00000 n 
+0000217637 00000 n 
+0001279063 00000 n 
+0000001979 00000 n 
+0000002010 00000 n 
+0000223127 00000 n 
+0001278974 00000 n 
+0000002058 00000 n 
+0000002115 00000 n 
+0000233517 00000 n 
+0001278844 00000 n 
+0000002164 00000 n 
+0000002207 00000 n 
+0000237485 00000 n 
+0001278765 00000 n 
+0000002261 00000 n 
+0000002328 00000 n 
+0000237721 00000 n 
+0001278672 00000 n 
+0000002382 00000 n 
+0000002441 00000 n 
+0000246796 00000 n 
+0001278579 00000 n 
+0000002495 00000 n 
+0000002552 00000 n 
+0000267177 00000 n 
+0001278486 00000 n 
+0000002606 00000 n 
+0000002661 00000 n 
+0000272146 00000 n 
+0001278393 00000 n 
+0000002715 00000 n 
+0000002756 00000 n 
+0000276548 00000 n 
+0001278261 00000 n 
+0000002810 00000 n 
+0000002854 00000 n 
+0000276608 00000 n 
+0001278182 00000 n 
+0000002913 00000 n 
+0000002969 00000 n 
+0000297331 00000 n 
+0001278089 00000 n 
+0000003028 00000 n 
+0000003105 00000 n 
+0000301515 00000 n 
+0001277996 00000 n 
+0000003164 00000 n 
+0000003237 00000 n 
+0000309654 00000 n 
+0001277903 00000 n 
+0000003296 00000 n 
+0000003365 00000 n 
+0000321020 00000 n 
+0001277824 00000 n 
+0000003424 00000 n 
+0000003480 00000 n 
+0000321201 00000 n 
+0001277731 00000 n 
+0000003534 00000 n 
+0000003582 00000 n 
+0000325669 00000 n 
+0001277599 00000 n 
+0000003636 00000 n 
+0000003681 00000 n 
+0000325729 00000 n 
+0001277520 00000 n 
+0000003740 00000 n 
+0000003797 00000 n 
+0000347750 00000 n 
+0001277427 00000 n 
+0000003856 00000 n 
+0000003913 00000 n 
+0000351315 00000 n 
+0001277334 00000 n 
+0000003972 00000 n 
+0000004050 00000 n 
+0000354924 00000 n 
+0001277241 00000 n 
+0000004109 00000 n 
+0000004177 00000 n 
+0000360705 00000 n 
+0001277148 00000 n 
+0000004236 00000 n 
+0000004310 00000 n 
+0000364039 00000 n 
+0001277069 00000 n 
+0000004369 00000 n 
+0000004439 00000 n 
+0000371584 00000 n 
+0001276990 00000 n 
+0000004493 00000 n 
+0000004544 00000 n 
+0000376009 00000 n 
+0001276858 00000 n 
+0000004593 00000 n 
+0000004636 00000 n 
+0000376069 00000 n 
+0001276779 00000 n 
+0000004690 00000 n 
+0000004729 00000 n 
+0000380214 00000 n 
+0001276686 00000 n 
+0000004783 00000 n 
+0000004833 00000 n 
+0000384283 00000 n 
+0001276593 00000 n 
+0000004887 00000 n 
+0000004928 00000 n 
+0000384404 00000 n 
+0001276500 00000 n 
+0000004982 00000 n 
+0000005022 00000 n 
+0000384524 00000 n 
+0001276407 00000 n 
+0000005076 00000 n 
+0000005154 00000 n 
+0000395170 00000 n 
+0001276314 00000 n 
+0000005208 00000 n 
+0000005287 00000 n 
+0000400855 00000 n 
+0001276221 00000 n 
+0000005341 00000 n 
+0000005420 00000 n 
+0000405422 00000 n 
+0001276128 00000 n 
+0000005474 00000 n 
+0000005540 00000 n 
+0000405542 00000 n 
+0001276035 00000 n 
+0000005594 00000 n 
+0000005656 00000 n 
+0000409657 00000 n 
+0001275956 00000 n 
+0000005711 00000 n 
+0000005764 00000 n 
+0000414432 00000 n 
+0001275839 00000 n 
+0000005813 00000 n 
+0000005855 00000 n 
+0000414492 00000 n 
+0001275760 00000 n 
+0000005909 00000 n 
+0000005966 00000 n 
+0000422872 00000 n 
+0001275681 00000 n 
+0000006020 00000 n 
+0000006092 00000 n 
+0000446965 00000 n 
+0001275549 00000 n 
+0000006139 00000 n 
+0000006211 00000 n 
+0000447025 00000 n 
+0001275470 00000 n 
+0000006260 00000 n 
+0000006309 00000 n 
+0000447085 00000 n 
+0001275377 00000 n 
+0000006358 00000 n 
+0000006396 00000 n 
+0000450091 00000 n 
+0001275284 00000 n 
+0000006445 00000 n 
+0000006480 00000 n 
+0000453641 00000 n 
+0001275191 00000 n 
+0000006529 00000 n 
+0000006585 00000 n 
+0000491451 00000 n 
+0001275098 00000 n 
+0000006634 00000 n 
+0000006686 00000 n 
+0000498726 00000 n 
+0001275005 00000 n 
+0000006735 00000 n 
+0000006800 00000 n 
+0000502994 00000 n 
+0001274912 00000 n 
+0000006849 00000 n 
+0000006910 00000 n 
+0000507668 00000 n 
+0001274833 00000 n 
+0000006959 00000 n 
+0000007020 00000 n 
+0000517208 00000 n 
+0001274700 00000 n 
+0000007067 00000 n 
+0000007120 00000 n 
+0000536661 00000 n 
+0001274621 00000 n 
+0000007169 00000 n 
+0000007225 00000 n 
+0000544742 00000 n 
+0001274528 00000 n 
+0000007274 00000 n 
+0000007332 00000 n 
+0000557187 00000 n 
+0001274435 00000 n 
+0000007381 00000 n 
+0000007437 00000 n 
+0000565719 00000 n 
+0001274342 00000 n 
+0000007486 00000 n 
+0000007544 00000 n 
+0000574698 00000 n 
+0001274249 00000 n 
+0000007593 00000 n 
+0000007649 00000 n 
+0000583180 00000 n 
+0001274156 00000 n 
+0000007698 00000 n 
+0000007753 00000 n 
+0000586968 00000 n 
+0001274063 00000 n 
+0000007802 00000 n 
+0000007838 00000 n 
+0000593419 00000 n 
+0001273984 00000 n 
+0000007887 00000 n 
+0000007938 00000 n 
+0000600521 00000 n 
+0001273851 00000 n 
+0000007985 00000 n 
+0000008046 00000 n 
+0000604460 00000 n 
+0001273772 00000 n 
+0000008095 00000 n 
+0000008138 00000 n 
+0000604581 00000 n 
+0001273679 00000 n 
+0000008187 00000 n 
+0000008221 00000 n 
+0000609110 00000 n 
+0001273586 00000 n 
+0000008270 00000 n 
+0000008304 00000 n 
+0000610835 00000 n 
+0001273507 00000 n 
+0000008353 00000 n 
+0000008401 00000 n 
+0000614538 00000 n 
+0001273374 00000 n 
+0000008448 00000 n 
+0000008516 00000 n 
+0000617632 00000 n 
+0001273256 00000 n 
+0000008565 00000 n 
+0000008616 00000 n 
+0000617692 00000 n 
+0001273177 00000 n 
+0000008670 00000 n 
+0000008701 00000 n 
+0000633545 00000 n 
+0001273084 00000 n 
+0000008755 00000 n 
+0000008810 00000 n 
+0000633605 00000 n 
+0001272991 00000 n 
+0000008864 00000 n 
+0000008913 00000 n 
+0000643605 00000 n 
+0001272912 00000 n 
+0000008967 00000 n 
+0000009015 00000 n 
+0000646858 00000 n 
+0001272780 00000 n 
+0000009064 00000 n 
+0000009098 00000 n 
+0000650153 00000 n 
+0001272701 00000 n 
+0000009152 00000 n 
+0000009183 00000 n 
+0000667267 00000 n 
+0001272608 00000 n 
+0000009237 00000 n 
+0000009284 00000 n 
+0000673622 00000 n 
+0001272515 00000 n 
+0000009338 00000 n 
+0000009372 00000 n 
+0000673682 00000 n 
+0001272436 00000 n 
+0000009426 00000 n 
+0000009466 00000 n 
+0000673742 00000 n 
+0001272318 00000 n 
+0000009515 00000 n 
+0000009587 00000 n 
+0000673801 00000 n 
+0001272239 00000 n 
+0000009641 00000 n 
+0000009677 00000 n 
+0000677505 00000 n 
+0001272146 00000 n 
+0000009731 00000 n 
+0000009768 00000 n 
+0000679549 00000 n 
+0001272053 00000 n 
+0000009822 00000 n 
+0000009858 00000 n 
+0000679609 00000 n 
+0001271974 00000 n 
+0000009912 00000 n 
+0000009950 00000 n 
+0000682880 00000 n 
+0001271841 00000 n 
+0000009998 00000 n 
+0000010057 00000 n 
+0000686784 00000 n 
+0001271723 00000 n 
+0000010106 00000 n 
+0000010150 00000 n 
+0000686844 00000 n 
+0001271644 00000 n 
+0000010204 00000 n 
+0000010282 00000 n 
+0000901622 00000 n 
+0001271551 00000 n 
+0000010336 00000 n 
+0000010392 00000 n 
+0000909166 00000 n 
+0001271458 00000 n 
+0000010446 00000 n 
+0000010488 00000 n 
+0000913405 00000 n 
+0001271379 00000 n 
+0000010542 00000 n 
+0000010593 00000 n 
+0000917325 00000 n 
+0001271286 00000 n 
+0000010642 00000 n 
+0000010691 00000 n 
+0000917385 00000 n 
+0001271193 00000 n 
+0000010740 00000 n 
+0000010808 00000 n 
+0000920641 00000 n 
+0001271114 00000 n 
+0000010857 00000 n 
+0000010922 00000 n 
+0000928837 00000 n 
+0001270981 00000 n 
+0000010970 00000 n 
+0000011005 00000 n 
+0000928897 00000 n 
+0001270902 00000 n 
+0000011054 00000 n 
+0000011095 00000 n 
+0000928957 00000 n 
+0001270823 00000 n 
+0000011144 00000 n 
+0000011186 00000 n 
+0000941924 00000 n 
+0001270729 00000 n 
+0000011236 00000 n 
+0000011268 00000 n 
+0000970678 00000 n 
+0001270649 00000 n 
+0000011318 00000 n 
+0000011343 00000 n 
+0000011934 00000 n 
+0000012046 00000 n 
+0000015620 00000 n 
+0000011395 00000 n 
+0000015502 00000 n 
+0000015561 00000 n 
+0001264150 00000 n 
+0001263277 00000 n 
+0001264005 00000 n 
+0001265597 00000 n 
+0001266181 00000 n 
+0000015280 00000 n 
+0000015433 00000 n 
+0000015480 00000 n 
+0000017177 00000 n 
+0000017006 00000 n 
+0000015759 00000 n 
+0000017118 00000 n 
+0001262836 00000 n 
+0001263861 00000 n 
+0000019239 00000 n 
+0000019392 00000 n 
+0000019545 00000 n 
+0000019697 00000 n 
+0000019851 00000 n 
+0000020004 00000 n 
+0000020158 00000 n 
+0000020311 00000 n 
+0000020470 00000 n 
+0000020634 00000 n 
+0000020798 00000 n 
+0000020956 00000 n 
+0000021108 00000 n 
+0000021261 00000 n 
+0000021415 00000 n 
+0000021569 00000 n 
+0000021723 00000 n 
+0000021875 00000 n 
+0000022028 00000 n 
+0000022182 00000 n 
+0000022333 00000 n 
+0000022487 00000 n 
+0000022641 00000 n 
+0000022795 00000 n 
+0000022948 00000 n 
+0000023102 00000 n 
+0000023260 00000 n 
+0000023419 00000 n 
+0000023578 00000 n 
+0000023737 00000 n 
+0000023895 00000 n 
+0000024054 00000 n 
+0000024218 00000 n 
+0000024382 00000 n 
+0000024546 00000 n 
+0000024708 00000 n 
+0000024870 00000 n 
+0000025025 00000 n 
+0000028075 00000 n 
+0000025300 00000 n 
+0000018811 00000 n 
+0000017261 00000 n 
+0000025182 00000 n 
+0001262982 00000 n 
+0000025241 00000 n 
+0000028239 00000 n 
+0000028403 00000 n 
+0000028567 00000 n 
+0000028731 00000 n 
+0000028895 00000 n 
+0000029059 00000 n 
+0000029216 00000 n 
+0000029370 00000 n 
+0000029529 00000 n 
+0000029687 00000 n 
+0000029846 00000 n 
+0000030005 00000 n 
+0000030163 00000 n 
+0000030322 00000 n 
+0000030481 00000 n 
+0000030639 00000 n 
+0000030798 00000 n 
+0000030958 00000 n 
+0000031111 00000 n 
+0000031270 00000 n 
+0000031429 00000 n 
+0000031581 00000 n 
+0000031735 00000 n 
+0000031889 00000 n 
+0000032043 00000 n 
+0000032197 00000 n 
+0000032351 00000 n 
+0000032505 00000 n 
+0000032659 00000 n 
+0000032813 00000 n 
+0000032965 00000 n 
+0000033118 00000 n 
+0000033270 00000 n 
+0000033423 00000 n 
+0000033576 00000 n 
+0000033729 00000 n 
+0000033882 00000 n 
+0000034035 00000 n 
+0000034188 00000 n 
+0000034340 00000 n 
+0000034493 00000 n 
+0000034645 00000 n 
+0000034798 00000 n 
+0000034951 00000 n 
+0000035103 00000 n 
+0000035256 00000 n 
+0000035413 00000 n 
+0000035569 00000 n 
+0000035725 00000 n 
+0000035881 00000 n 
+0000037551 00000 n 
+0000036091 00000 n 
+0000027543 00000 n 
+0000025397 00000 n 
+0000036032 00000 n 
+0000037709 00000 n 
+0000037867 00000 n 
+0000038025 00000 n 
+0000038183 00000 n 
+0000038336 00000 n 
+0000038494 00000 n 
+0000038652 00000 n 
+0000038810 00000 n 
+0000038968 00000 n 
+0000039120 00000 n 
+0000039273 00000 n 
+0000039430 00000 n 
+0000039588 00000 n 
+0000039746 00000 n 
+0000039904 00000 n 
+0000040057 00000 n 
+0000040210 00000 n 
+0000040363 00000 n 
+0000040516 00000 n 
+0000040669 00000 n 
+0000040822 00000 n 
+0000040977 00000 n 
+0000041191 00000 n 
+0000037243 00000 n 
+0000036175 00000 n 
+0000041132 00000 n 
+0000041546 00000 n 
+0000041375 00000 n 
+0000041275 00000 n 
+0000041487 00000 n 
+0000042778 00000 n 
+0000042929 00000 n 
+0000043081 00000 n 
+0000043233 00000 n 
+0000043385 00000 n 
+0000043537 00000 n 
+0000043689 00000 n 
+0000043841 00000 n 
+0000043992 00000 n 
+0000044143 00000 n 
+0000044469 00000 n 
+0000042574 00000 n 
+0000041587 00000 n 
+0000044294 00000 n 
+0000044353 00000 n 
+0001265743 00000 n 
+0001266299 00000 n 
+0000233456 00000 n 
+0000279902 00000 n 
+0000329154 00000 n 
+0000491327 00000 n 
+0000494574 00000 n 
+0000524439 00000 n 
+0000520970 00000 n 
+0000596425 00000 n 
+0000924353 00000 n 
+0000926726 00000 n 
+0000044850 00000 n 
+0000044679 00000 n 
+0000044579 00000 n 
+0000044791 00000 n 
+0000045730 00000 n 
+0000045882 00000 n 
+0000046035 00000 n 
+0000046186 00000 n 
+0000046338 00000 n 
+0000046490 00000 n 
+0000046818 00000 n 
+0000045558 00000 n 
+0000044891 00000 n 
+0000046642 00000 n 
+0000046701 00000 n 
+0001265451 00000 n 
+0000192441 00000 n 
+0000204333 00000 n 
+0000629354 00000 n 
+0000664055 00000 n 
+0000794061 00000 n 
+0000901498 00000 n 
+0000047212 00000 n 
+0000047041 00000 n 
+0000046941 00000 n 
+0000047153 00000 n 
+0000050922 00000 n 
+0000051080 00000 n 
+0000051234 00000 n 
+0000051388 00000 n 
+0000051543 00000 n 
+0000051697 00000 n 
+0000051851 00000 n 
+0000052005 00000 n 
+0000052159 00000 n 
+0000052313 00000 n 
+0000052643 00000 n 
+0000050718 00000 n 
+0000047253 00000 n 
+0000052468 00000 n 
+0000945078 00000 n 
+0000942104 00000 n 
+0000942224 00000 n 
+0000945440 00000 n 
+0000942164 00000 n 
+0000942524 00000 n 
+0000945560 00000 n 
+0000945620 00000 n 
+0000942704 00000 n 
+0000942404 00000 n 
+0000056993 00000 n 
+0000056647 00000 n 
+0000052740 00000 n 
+0000056759 00000 n 
+0001264295 00000 n 
+0000056876 00000 n 
+0000056934 00000 n 
+0000061761 00000 n 
+0000062150 00000 n 
+0000061629 00000 n 
+0000057128 00000 n 
+0000061914 00000 n 
+0000061973 00000 n 
+0001263570 00000 n 
+0000062032 00000 n 
+0000062091 00000 n 
+0001265019 00000 n 
+0001266417 00000 n 
+0000065964 00000 n 
+0000066116 00000 n 
+0000066267 00000 n 
+0000066424 00000 n 
+0000066936 00000 n 
+0000065808 00000 n 
+0000062312 00000 n 
+0000066583 00000 n 
+0000066642 00000 n 
+0000066701 00000 n 
+0000066760 00000 n 
+0000066819 00000 n 
+0000073084 00000 n 
+0000073237 00000 n 
+0000073387 00000 n 
+0000073545 00000 n 
+0000073701 00000 n 
+0000073855 00000 n 
+0000074008 00000 n 
+0000074167 00000 n 
+0000074319 00000 n 
+0000074473 00000 n 
+0000074624 00000 n 
+0000074776 00000 n 
+0000074929 00000 n 
+0000075081 00000 n 
+0000075234 00000 n 
+0000075388 00000 n 
+0000075542 00000 n 
+0000075692 00000 n 
+0000075844 00000 n 
+0000075996 00000 n 
+0000076150 00000 n 
+0000076304 00000 n 
+0000076458 00000 n 
+0000076612 00000 n 
+0000076764 00000 n 
+0000076916 00000 n 
+0000077069 00000 n 
+0000071495 00000 n 
+0000077222 00000 n 
+0000077377 00000 n 
+0000077708 00000 n 
+0000071139 00000 n 
+0000067085 00000 n 
+0000077532 00000 n 
+0000077591 00000 n 
+0001264726 00000 n 
+0000071950 00000 n 
+0000072185 00000 n 
+0000072232 00000 n 
+0000072407 00000 n 
+0000072428 00000 n 
+0000072665 00000 n 
+0000945138 00000 n 
+0000942464 00000 n 
+0000942344 00000 n 
+0000080861 00000 n 
+0000080400 00000 n 
+0000077898 00000 n 
+0000080512 00000 n 
+0000080803 00000 n 
+0000082317 00000 n 
+0000082028 00000 n 
+0000080958 00000 n 
+0000082140 00000 n 
+0000082199 00000 n 
+0000082258 00000 n 
+0000082672 00000 n 
+0000082501 00000 n 
+0000082401 00000 n 
+0000082613 00000 n 
+0000086118 00000 n 
+0000086272 00000 n 
+0000086909 00000 n 
+0000085978 00000 n 
+0000082713 00000 n 
+0000086427 00000 n 
+0000086544 00000 n 
+0001264438 00000 n 
+0001263716 00000 n 
+0000086664 00000 n 
+0001263424 00000 n 
+0001265308 00000 n 
+0000086725 00000 n 
+0000086786 00000 n 
+0000086848 00000 n 
+0001266535 00000 n 
+0000942284 00000 n 
+0000945320 00000 n 
+0000091075 00000 n 
+0000091230 00000 n 
+0000091386 00000 n 
+0000091538 00000 n 
+0000091692 00000 n 
+0000091854 00000 n 
+0000092129 00000 n 
+0000090903 00000 n 
+0000087120 00000 n 
+0000092009 00000 n 
+0000092068 00000 n 
+0000942584 00000 n 
+0000941984 00000 n 
+0000945380 00000 n 
+0000942644 00000 n 
+0000942044 00000 n 
+0000096829 00000 n 
+0000096984 00000 n 
+0000097198 00000 n 
+0000096689 00000 n 
+0000092290 00000 n 
+0000097139 00000 n 
+0000107152 00000 n 
+0000107306 00000 n 
+0000107460 00000 n 
+0000107614 00000 n 
+0000102102 00000 n 
+0000101870 00000 n 
+0000097371 00000 n 
+0000101982 00000 n 
+0000102041 00000 n 
+0001265164 00000 n 
+0000107772 00000 n 
+0000107927 00000 n 
+0000108256 00000 n 
+0000106980 00000 n 
+0000102276 00000 n 
+0000108082 00000 n 
+0000945018 00000 n 
+0000113360 00000 n 
+0000113513 00000 n 
+0000113667 00000 n 
+0000113822 00000 n 
+0000114091 00000 n 
+0000113204 00000 n 
+0000108430 00000 n 
+0000113975 00000 n 
+0000942824 00000 n 
+0000942883 00000 n 
+0000942764 00000 n 
+0000118486 00000 n 
+0000118315 00000 n 
+0000114253 00000 n 
+0000118427 00000 n 
+0001266653 00000 n 
+0000118918 00000 n 
+0000118747 00000 n 
+0000118647 00000 n 
+0000118859 00000 n 
+0000121845 00000 n 
+0000123276 00000 n 
+0000149572 00000 n 
+0000121997 00000 n 
+0000195007 00000 n 
+0000203498 00000 n 
+0000203652 00000 n 
+0000122383 00000 n 
+0000121705 00000 n 
+0000118959 00000 n 
+0000122150 00000 n 
+0000192501 00000 n 
+0000123164 00000 n 
+0000122532 00000 n 
+0000192265 00000 n 
+0000192324 00000 n 
+0001264582 00000 n 
+0000192383 00000 n 
+0000123650 00000 n 
+0000123870 00000 n 
+0000123917 00000 n 
+0000149552 00000 n 
+0000149946 00000 n 
+0000150166 00000 n 
+0000150213 00000 n 
+0000192245 00000 n 
+0000203806 00000 n 
+0000203959 00000 n 
+0000204113 00000 n 
+0000208222 00000 n 
+0000208375 00000 n 
+0000204393 00000 n 
+0000194843 00000 n 
+0000192652 00000 n 
+0000204274 00000 n 
+0000197834 00000 n 
+0000198067 00000 n 
+0000198114 00000 n 
+0000198432 00000 n 
+0000198683 00000 n 
+0000198705 00000 n 
+0000198977 00000 n 
+0000199246 00000 n 
+0000201363 00000 n 
+0000208586 00000 n 
+0000208082 00000 n 
+0000204544 00000 n 
+0000208527 00000 n 
+0000211922 00000 n 
+0000212078 00000 n 
+0000212229 00000 n 
+0000212382 00000 n 
+0000212534 00000 n 
+0000217051 00000 n 
+0000212860 00000 n 
+0000211758 00000 n 
+0000208683 00000 n 
+0000212685 00000 n 
+0001266771 00000 n 
+0000217210 00000 n 
+0000217368 00000 n 
+0000217695 00000 n 
+0000216903 00000 n 
+0000212996 00000 n 
+0000217520 00000 n 
+0000222148 00000 n 
+0000222304 00000 n 
+0000222456 00000 n 
+0000222610 00000 n 
+0000222764 00000 n 
+0000222916 00000 n 
+0000223361 00000 n 
+0000221976 00000 n 
+0000217844 00000 n 
+0000223068 00000 n 
+0000223185 00000 n 
+0000223243 00000 n 
+0000223302 00000 n 
+0000226232 00000 n 
+0000226391 00000 n 
+0000226550 00000 n 
+0000226708 00000 n 
+0000226872 00000 n 
+0000227030 00000 n 
+0000227188 00000 n 
+0000227347 00000 n 
+0000227511 00000 n 
+0000228198 00000 n 
+0000226036 00000 n 
+0000223523 00000 n 
+0000227668 00000 n 
+0000227727 00000 n 
+0000227786 00000 n 
+0000227845 00000 n 
+0000227904 00000 n 
+0000227963 00000 n 
+0000228022 00000 n 
+0000228080 00000 n 
+0000228139 00000 n 
+0000232228 00000 n 
+0000232387 00000 n 
+0000232539 00000 n 
+0000232689 00000 n 
+0000232848 00000 n 
+0000232999 00000 n 
+0000233576 00000 n 
+0000232056 00000 n 
+0000228334 00000 n 
+0000233161 00000 n 
+0000233220 00000 n 
+0000233279 00000 n 
+0000233338 00000 n 
+0000233397 00000 n 
+0001266036 00000 n 
+0000237267 00000 n 
+0000237780 00000 n 
+0000237135 00000 n 
+0000233751 00000 n 
+0000237426 00000 n 
+0000237544 00000 n 
+0000237603 00000 n 
+0000237662 00000 n 
+0000240850 00000 n 
+0000241004 00000 n 
+0000246426 00000 n 
+0000241398 00000 n 
+0000240710 00000 n 
+0000237929 00000 n 
+0000241162 00000 n 
+0000241221 00000 n 
+0000241280 00000 n 
+0000241339 00000 n 
+0001266889 00000 n 
+0000246582 00000 n 
+0000246853 00000 n 
+0000246286 00000 n 
+0000241572 00000 n 
+0000246737 00000 n 
+0000251483 00000 n 
+0000251642 00000 n 
+0000251795 00000 n 
+0000251950 00000 n 
+0000252278 00000 n 
+0000251327 00000 n 
+0000247014 00000 n 
+0000252102 00000 n 
+0000252161 00000 n 
+0000252220 00000 n 
+0000255692 00000 n 
+0000255401 00000 n 
+0000252426 00000 n 
+0000255513 00000 n 
+0000255572 00000 n 
+0000255632 00000 n 
+0000259383 00000 n 
+0000259085 00000 n 
+0000255828 00000 n 
+0000259200 00000 n 
+0000259261 00000 n 
+0000259322 00000 n 
+0000262801 00000 n 
+0000263199 00000 n 
+0000262665 00000 n 
+0000259522 00000 n 
+0000262955 00000 n 
+0000263016 00000 n 
+0000263077 00000 n 
+0000263138 00000 n 
+0000266586 00000 n 
+0000266742 00000 n 
+0000266898 00000 n 
+0000267297 00000 n 
+0000266431 00000 n 
+0000263323 00000 n 
+0000267056 00000 n 
+0000267117 00000 n 
+0000267237 00000 n 
+0001267009 00000 n 
+0000271920 00000 n 
+0000272267 00000 n 
+0000271783 00000 n 
+0000267460 00000 n 
+0000272085 00000 n 
+0000272206 00000 n 
+0000276180 00000 n 
+0000276332 00000 n 
+0000276668 00000 n 
+0000276034 00000 n 
+0000272442 00000 n 
+0000276487 00000 n 
+0000279965 00000 n 
+0000279725 00000 n 
+0000276831 00000 n 
+0000279841 00000 n 
+0000283160 00000 n 
+0000283564 00000 n 
+0000283023 00000 n 
+0000280127 00000 n 
+0000283320 00000 n 
+0000283381 00000 n 
+0000283442 00000 n 
+0000283503 00000 n 
+0000286709 00000 n 
+0000287166 00000 n 
+0000286572 00000 n 
+0000283729 00000 n 
+0000286861 00000 n 
+0000286922 00000 n 
+0000286983 00000 n 
+0000287044 00000 n 
+0000287105 00000 n 
+0000290504 00000 n 
+0000290144 00000 n 
+0000287316 00000 n 
+0000290260 00000 n 
+0000290321 00000 n 
+0000290382 00000 n 
+0000290443 00000 n 
+0001267134 00000 n 
+0000293451 00000 n 
+0000293031 00000 n 
+0000290653 00000 n 
+0000293147 00000 n 
+0000293208 00000 n 
+0000293269 00000 n 
+0000293329 00000 n 
+0000293390 00000 n 
+0000296833 00000 n 
+0000296988 00000 n 
+0000297451 00000 n 
+0000296687 00000 n 
+0000293588 00000 n 
+0000297148 00000 n 
+0000297209 00000 n 
+0000297270 00000 n 
+0000297391 00000 n 
+0000301073 00000 n 
+0000301233 00000 n 
+0000301636 00000 n 
+0000300927 00000 n 
+0000297588 00000 n 
+0000301393 00000 n 
+0000301454 00000 n 
+0000301575 00000 n 
+0000305373 00000 n 
+0000305716 00000 n 
+0000305236 00000 n 
+0000301773 00000 n 
+0000305533 00000 n 
+0000305594 00000 n 
+0000305655 00000 n 
+0000309219 00000 n 
+0000309374 00000 n 
+0000309714 00000 n 
+0000309073 00000 n 
+0000305853 00000 n 
+0000309532 00000 n 
+0000309593 00000 n 
+0000312605 00000 n 
+0000312764 00000 n 
+0000312924 00000 n 
+0000313084 00000 n 
+0000313486 00000 n 
+0000312441 00000 n 
+0000309864 00000 n 
+0000313242 00000 n 
+0000313303 00000 n 
+0000313364 00000 n 
+0000313425 00000 n 
+0001267259 00000 n 
+0000316718 00000 n 
+0000317120 00000 n 
+0000316581 00000 n 
+0000313610 00000 n 
+0000316876 00000 n 
+0000316937 00000 n 
+0000316998 00000 n 
+0000317059 00000 n 
+0000321322 00000 n 
+0000320843 00000 n 
+0000317285 00000 n 
+0000320959 00000 n 
+0000321080 00000 n 
+0000321140 00000 n 
+0000321261 00000 n 
+0000325456 00000 n 
+0000325850 00000 n 
+0000325319 00000 n 
+0000321497 00000 n 
+0000325608 00000 n 
+0000325789 00000 n 
+0000329217 00000 n 
+0000328977 00000 n 
+0000326013 00000 n 
+0000329093 00000 n 
+0000332371 00000 n 
+0000332713 00000 n 
+0000332234 00000 n 
+0000329328 00000 n 
+0000332530 00000 n 
+0000332591 00000 n 
+0000332652 00000 n 
+0000335287 00000 n 
+0000334867 00000 n 
+0000332863 00000 n 
+0000334983 00000 n 
+0000335044 00000 n 
+0000335105 00000 n 
+0000335166 00000 n 
+0000335227 00000 n 
+0001267384 00000 n 
+0000338066 00000 n 
+0000337646 00000 n 
+0000335398 00000 n 
+0000337762 00000 n 
+0000337823 00000 n 
+0000337884 00000 n 
+0000337945 00000 n 
+0000338005 00000 n 
+0000340829 00000 n 
+0000340984 00000 n 
+0000341444 00000 n 
+0000340683 00000 n 
+0000338215 00000 n 
+0000341140 00000 n 
+0000341201 00000 n 
+0000341262 00000 n 
+0000341323 00000 n 
+0000341383 00000 n 
+0000344747 00000 n 
+0000344387 00000 n 
+0000341622 00000 n 
+0000344503 00000 n 
+0000344564 00000 n 
+0000344625 00000 n 
+0000344686 00000 n 
+0000347871 00000 n 
+0000347452 00000 n 
+0000344886 00000 n 
+0000347568 00000 n 
+0000347629 00000 n 
+0000347689 00000 n 
+0000347810 00000 n 
+0000351495 00000 n 
+0000351077 00000 n 
+0000348049 00000 n 
+0000351193 00000 n 
+0000351254 00000 n 
+0000351375 00000 n 
+0000351434 00000 n 
+0000354984 00000 n 
+0000354564 00000 n 
+0000351631 00000 n 
+0000354680 00000 n 
+0000354741 00000 n 
+0000354802 00000 n 
+0000354863 00000 n 
+0001267509 00000 n 
+0000358153 00000 n 
+0000357793 00000 n 
+0000355121 00000 n 
+0000357909 00000 n 
+0000357970 00000 n 
+0000358031 00000 n 
+0000358092 00000 n 
+0000360947 00000 n 
+0000360467 00000 n 
+0000358277 00000 n 
+0000360583 00000 n 
+0000360644 00000 n 
+0000360765 00000 n 
+0000360826 00000 n 
+0000360887 00000 n 
+0000364281 00000 n 
+0000363862 00000 n 
+0000361058 00000 n 
+0000363978 00000 n 
+0000364099 00000 n 
+0000364160 00000 n 
+0000364221 00000 n 
+0000367069 00000 n 
+0000366648 00000 n 
+0000364418 00000 n 
+0000366764 00000 n 
+0000366825 00000 n 
+0000366886 00000 n 
+0000366947 00000 n 
+0000367008 00000 n 
+0000371643 00000 n 
+0000371285 00000 n 
+0000367180 00000 n 
+0000371401 00000 n 
+0000371462 00000 n 
+0000371523 00000 n 
+0000375727 00000 n 
+0000376128 00000 n 
+0000375590 00000 n 
+0000371793 00000 n 
+0000375887 00000 n 
+0000375948 00000 n 
+0001267634 00000 n 
+0000383765 00000 n 
+0000380335 00000 n 
+0000379976 00000 n 
+0000376291 00000 n 
+0000380092 00000 n 
+0000380153 00000 n 
+0000380274 00000 n 
+0000383920 00000 n 
+0000384069 00000 n 
+0000384583 00000 n 
+0000383610 00000 n 
+0000380472 00000 n 
+0000384222 00000 n 
+0000384343 00000 n 
+0000384463 00000 n 
+0000389489 00000 n 
+0000389649 00000 n 
+0000394803 00000 n 
+0000394954 00000 n 
+0000389935 00000 n 
+0000389343 00000 n 
+0000384798 00000 n 
+0000389813 00000 n 
+0000389874 00000 n 
+0000395290 00000 n 
+0000394657 00000 n 
+0000390085 00000 n 
+0000395109 00000 n 
+0000395230 00000 n 
+0000400010 00000 n 
+0000400169 00000 n 
+0000400333 00000 n 
+0000400484 00000 n 
+0000400639 00000 n 
+0000404726 00000 n 
+0000400976 00000 n 
+0000399837 00000 n 
+0000395453 00000 n 
+0000400794 00000 n 
+0000400915 00000 n 
+0000404890 00000 n 
+0000405041 00000 n 
+0000405196 00000 n 
+0000405663 00000 n 
+0000404562 00000 n 
+0000401126 00000 n 
+0000405361 00000 n 
+0000405482 00000 n 
+0000405602 00000 n 
+0001267759 00000 n 
+0000409431 00000 n 
+0000409778 00000 n 
+0000409294 00000 n 
+0000405813 00000 n 
+0000409596 00000 n 
+0000409717 00000 n 
+0000413897 00000 n 
+0000414062 00000 n 
+0000414216 00000 n 
+0000414733 00000 n 
+0000413742 00000 n 
+0000409965 00000 n 
+0000414371 00000 n 
+0000414552 00000 n 
+0000414613 00000 n 
+0000414673 00000 n 
+0000418371 00000 n 
+0000417586 00000 n 
+0000414896 00000 n 
+0000417702 00000 n 
+0000417763 00000 n 
+0000417824 00000 n 
+0000417885 00000 n 
+0000417945 00000 n 
+0000418006 00000 n 
+0000418067 00000 n 
+0000418128 00000 n 
+0000418189 00000 n 
+0000418249 00000 n 
+0000418310 00000 n 
+0000422377 00000 n 
+0000422533 00000 n 
+0000427334 00000 n 
+0000422932 00000 n 
+0000422231 00000 n 
+0000418508 00000 n 
+0000422689 00000 n 
+0000422750 00000 n 
+0000422811 00000 n 
+0000945259 00000 n 
+0000427930 00000 n 
+0000427197 00000 n 
+0000423082 00000 n 
+0000427489 00000 n 
+0000427550 00000 n 
+0000427614 00000 n 
+0000427678 00000 n 
+0000427742 00000 n 
+0000427805 00000 n 
+0000427869 00000 n 
+0000431416 00000 n 
+0000431571 00000 n 
+0000432275 00000 n 
+0000431270 00000 n 
+0000428105 00000 n 
+0000431726 00000 n 
+0000431787 00000 n 
+0000431848 00000 n 
+0000431909 00000 n 
+0000431970 00000 n 
+0000432031 00000 n 
+0000432092 00000 n 
+0000432153 00000 n 
+0000432214 00000 n 
+0001267884 00000 n 
+0000435484 00000 n 
+0000436182 00000 n 
+0000435347 00000 n 
+0000432412 00000 n 
+0000435633 00000 n 
+0000435694 00000 n 
+0000435755 00000 n 
+0000435816 00000 n 
+0000435877 00000 n 
+0000435938 00000 n 
+0000435999 00000 n 
+0000436060 00000 n 
+0000436121 00000 n 
+0000440453 00000 n 
+0000440154 00000 n 
+0000436319 00000 n 
+0000440270 00000 n 
+0000440331 00000 n 
+0000440392 00000 n 
+0000443179 00000 n 
+0000443460 00000 n 
+0000443042 00000 n 
+0000440590 00000 n 
+0000443338 00000 n 
+0000443399 00000 n 
+0000446597 00000 n 
+0000446751 00000 n 
+0000449879 00000 n 
+0000447144 00000 n 
+0000446451 00000 n 
+0000443584 00000 n 
+0000446904 00000 n 
+0000450151 00000 n 
+0000449742 00000 n 
+0000447294 00000 n 
+0000450030 00000 n 
+0000453762 00000 n 
+0000453464 00000 n 
+0000450288 00000 n 
+0000453580 00000 n 
+0000453701 00000 n 
+0001268009 00000 n 
+0000457037 00000 n 
+0000457190 00000 n 
+0000457587 00000 n 
+0000456891 00000 n 
+0000453899 00000 n 
+0000457343 00000 n 
+0000457404 00000 n 
+0000457465 00000 n 
+0000457526 00000 n 
+0000460821 00000 n 
+0000460972 00000 n 
+0000461308 00000 n 
+0000460675 00000 n 
+0000457724 00000 n 
+0000461125 00000 n 
+0000461186 00000 n 
+0000461247 00000 n 
+0000465055 00000 n 
+0000465269 00000 n 
+0000464918 00000 n 
+0000461445 00000 n 
+0000465208 00000 n 
+0000469288 00000 n 
+0000469502 00000 n 
+0000469151 00000 n 
+0000465406 00000 n 
+0000469441 00000 n 
+0000473602 00000 n 
+0000473755 00000 n 
+0000473969 00000 n 
+0000473456 00000 n 
+0000469652 00000 n 
+0000473908 00000 n 
+0000477272 00000 n 
+0000477425 00000 n 
+0000477639 00000 n 
+0000477126 00000 n 
+0000474119 00000 n 
+0000477578 00000 n 
+0001268134 00000 n 
+0000485555 00000 n 
+0000485715 00000 n 
+0000485870 00000 n 
+0000482032 00000 n 
+0000481794 00000 n 
+0000477776 00000 n 
+0000481910 00000 n 
+0000481971 00000 n 
+0000486206 00000 n 
+0000485400 00000 n 
+0000482221 00000 n 
+0000486023 00000 n 
+0000486084 00000 n 
+0000486145 00000 n 
+0000490490 00000 n 
+0000490642 00000 n 
+0000490794 00000 n 
+0000490953 00000 n 
+0000491112 00000 n 
+0000491511 00000 n 
+0000490317 00000 n 
+0000486343 00000 n 
+0000491266 00000 n 
+0000491390 00000 n 
+0000494637 00000 n 
+0000494397 00000 n 
+0000491686 00000 n 
+0000494513 00000 n 
+0000502162 00000 n 
+0000498786 00000 n 
+0000498549 00000 n 
+0000494748 00000 n 
+0000498665 00000 n 
+0001265889 00000 n 
+0000502321 00000 n 
+0000502476 00000 n 
+0000502626 00000 n 
+0000502780 00000 n 
+0000503480 00000 n 
+0000501989 00000 n 
+0000498963 00000 n 
+0000502933 00000 n 
+0000503054 00000 n 
+0000503115 00000 n 
+0000503176 00000 n 
+0000503237 00000 n 
+0000503298 00000 n 
+0000503359 00000 n 
+0000503419 00000 n 
+0001268259 00000 n 
+0000507077 00000 n 
+0000507237 00000 n 
+0000507392 00000 n 
+0000508033 00000 n 
+0000506922 00000 n 
+0000503630 00000 n 
+0000507546 00000 n 
+0000507607 00000 n 
+0000507728 00000 n 
+0000507789 00000 n 
+0000507850 00000 n 
+0000507911 00000 n 
+0000507972 00000 n 
+0000511969 00000 n 
+0000512120 00000 n 
+0000512275 00000 n 
+0000512793 00000 n 
+0000511814 00000 n 
+0000508183 00000 n 
+0000512428 00000 n 
+0000512489 00000 n 
+0000512549 00000 n 
+0000512610 00000 n 
+0000512671 00000 n 
+0000512732 00000 n 
+0000514883 00000 n 
+0000515034 00000 n 
+0000515250 00000 n 
+0000514737 00000 n 
+0000512930 00000 n 
+0000515189 00000 n 
+0000517268 00000 n 
+0000517031 00000 n 
+0000515402 00000 n 
+0000517147 00000 n 
+0000520605 00000 n 
+0000520758 00000 n 
+0000521029 00000 n 
+0000520459 00000 n 
+0000517392 00000 n 
+0000520909 00000 n 
+0000524225 00000 n 
+0000524502 00000 n 
+0000524088 00000 n 
+0000521166 00000 n 
+0000524378 00000 n 
+0001264873 00000 n 
+0001268384 00000 n 
+0000528251 00000 n 
+0000528074 00000 n 
+0000524653 00000 n 
+0000528190 00000 n 
+0000532120 00000 n 
+0000531943 00000 n 
+0000528415 00000 n 
+0000532059 00000 n 
+0000536721 00000 n 
+0000536484 00000 n 
+0000532308 00000 n 
+0000536600 00000 n 
+0000540041 00000 n 
+0000540194 00000 n 
+0000540408 00000 n 
+0000539895 00000 n 
+0000536911 00000 n 
+0000540347 00000 n 
+0000544802 00000 n 
+0000544504 00000 n 
+0000540558 00000 n 
+0000544620 00000 n 
+0000544681 00000 n 
+0000548366 00000 n 
+0000548519 00000 n 
+0000548733 00000 n 
+0000548220 00000 n 
+0000544980 00000 n 
+0000548672 00000 n 
+0001268509 00000 n 
+0000552101 00000 n 
+0000551863 00000 n 
+0000548870 00000 n 
+0000551979 00000 n 
+0000552040 00000 n 
+0000557247 00000 n 
+0000557010 00000 n 
+0000552266 00000 n 
+0000557126 00000 n 
+0000560453 00000 n 
+0000560605 00000 n 
+0000560818 00000 n 
+0000560307 00000 n 
+0000557438 00000 n 
+0000560757 00000 n 
+0000565779 00000 n 
+0000565481 00000 n 
+0000560968 00000 n 
+0000565597 00000 n 
+0000565658 00000 n 
+0000569528 00000 n 
+0000569681 00000 n 
+0000569895 00000 n 
+0000569382 00000 n 
+0000565970 00000 n 
+0000569834 00000 n 
+0000574426 00000 n 
+0000577692 00000 n 
+0000577849 00000 n 
+0000574758 00000 n 
+0000574289 00000 n 
+0000570045 00000 n 
+0000574576 00000 n 
+0000574637 00000 n 
+0001268634 00000 n 
+0000578007 00000 n 
+0000578220 00000 n 
+0000577537 00000 n 
+0000574949 00000 n 
+0000578159 00000 n 
+0000945500 00000 n 
+0000582598 00000 n 
+0000582751 00000 n 
+0000582905 00000 n 
+0000583240 00000 n 
+0000582443 00000 n 
+0000578370 00000 n 
+0000583058 00000 n 
+0000583119 00000 n 
+0000945198 00000 n 
+0000587028 00000 n 
+0000586730 00000 n 
+0000583431 00000 n 
+0000586846 00000 n 
+0000586907 00000 n 
+0000589284 00000 n 
+0000589107 00000 n 
+0000587206 00000 n 
+0000589223 00000 n 
+0000593052 00000 n 
+0000593205 00000 n 
+0000593479 00000 n 
+0000592906 00000 n 
+0000589395 00000 n 
+0000593358 00000 n 
+0000596488 00000 n 
+0000596248 00000 n 
+0000593629 00000 n 
+0000596364 00000 n 
+0001268759 00000 n 
+0000596890 00000 n 
+0000596713 00000 n 
+0000596612 00000 n 
+0000596829 00000 n 
+0000600300 00000 n 
+0000600581 00000 n 
+0000600163 00000 n 
+0000596932 00000 n 
+0000600460 00000 n 
+0000604243 00000 n 
+0000604702 00000 n 
+0000604106 00000 n 
+0000600731 00000 n 
+0000604399 00000 n 
+0000604520 00000 n 
+0000604641 00000 n 
+0000608738 00000 n 
+0000608893 00000 n 
+0000609231 00000 n 
+0000608592 00000 n 
+0000604852 00000 n 
+0000609049 00000 n 
+0000609170 00000 n 
+0000610956 00000 n 
+0000610658 00000 n 
+0000609394 00000 n 
+0000610774 00000 n 
+0000610895 00000 n 
+0000613693 00000 n 
+0000613850 00000 n 
+0000614006 00000 n 
+0000614169 00000 n 
+0000614322 00000 n 
+0000614598 00000 n 
+0000613520 00000 n 
+0000611080 00000 n 
+0000614477 00000 n 
+0001268884 00000 n 
+0000617752 00000 n 
+0000617455 00000 n 
+0000614735 00000 n 
+0000617571 00000 n 
+0000621223 00000 n 
+0000622604 00000 n 
+0000621437 00000 n 
+0000621086 00000 n 
+0000617902 00000 n 
+0000621376 00000 n 
+0000629417 00000 n 
+0000622488 00000 n 
+0000621574 00000 n 
+0000629293 00000 n 
+0000625247 00000 n 
+0000625483 00000 n 
+0000625531 00000 n 
+0000625936 00000 n 
+0000625959 00000 n 
+0000626307 00000 n 
+0000626403 00000 n 
+0000633665 00000 n 
+0000633368 00000 n 
+0000629570 00000 n 
+0000633484 00000 n 
+0000636811 00000 n 
+0000636634 00000 n 
+0000633815 00000 n 
+0000636750 00000 n 
+0000640561 00000 n 
+0000640262 00000 n 
+0000636948 00000 n 
+0000640378 00000 n 
+0000640439 00000 n 
+0000640500 00000 n 
+0001269009 00000 n 
+0000643665 00000 n 
+0000643428 00000 n 
+0000640711 00000 n 
+0000643544 00000 n 
+0000646918 00000 n 
+0000646681 00000 n 
+0000643815 00000 n 
+0000646797 00000 n 
+0000649939 00000 n 
+0000650213 00000 n 
+0000649802 00000 n 
+0000647081 00000 n 
+0000650092 00000 n 
+0000654640 00000 n 
+0000653011 00000 n 
+0000652834 00000 n 
+0000650376 00000 n 
+0000652950 00000 n 
+0000664118 00000 n 
+0000654524 00000 n 
+0000653134 00000 n 
+0000663994 00000 n 
+0000658152 00000 n 
+0000658387 00000 n 
+0000658435 00000 n 
+0000658872 00000 n 
+0000658895 00000 n 
+0000659292 00000 n 
+0000659388 00000 n 
+0000671543 00000 n 
+0000671700 00000 n 
+0000667327 00000 n 
+0000667090 00000 n 
+0000664271 00000 n 
+0000667206 00000 n 
+0001269134 00000 n 
+0000671856 00000 n 
+0000672010 00000 n 
+0000672164 00000 n 
+0000672319 00000 n 
+0000672474 00000 n 
+0000672635 00000 n 
+0000672788 00000 n 
+0000672943 00000 n 
+0000673096 00000 n 
+0000673251 00000 n 
+0000673406 00000 n 
+0000673861 00000 n 
+0000671298 00000 n 
+0000667477 00000 n 
+0000673561 00000 n 
+0000677565 00000 n 
+0000677328 00000 n 
+0000674011 00000 n 
+0000677444 00000 n 
+0000679668 00000 n 
+0000679372 00000 n 
+0000677728 00000 n 
+0000679488 00000 n 
+0000682940 00000 n 
+0000682703 00000 n 
+0000679818 00000 n 
+0000682819 00000 n 
+0001263128 00000 n 
+0000686965 00000 n 
+0000686607 00000 n 
+0000683132 00000 n 
+0000686723 00000 n 
+0000686904 00000 n 
+0000793692 00000 n 
+0000689003 00000 n 
+0000793846 00000 n 
+0000795658 00000 n 
+0000794123 00000 n 
+0000688857 00000 n 
+0000687115 00000 n 
+0000794000 00000 n 
+0001269259 00000 n 
+0000901682 00000 n 
+0000795542 00000 n 
+0000794297 00000 n 
+0000901437 00000 n 
+0000901561 00000 n 
+0000904073 00000 n 
+0000903896 00000 n 
+0000901856 00000 n 
+0000904012 00000 n 
+0000907105 00000 n 
+0000906928 00000 n 
+0000904184 00000 n 
+0000907044 00000 n 
+0000909226 00000 n 
+0000908989 00000 n 
+0000907216 00000 n 
+0000909105 00000 n 
+0000913769 00000 n 
+0000913228 00000 n 
+0000909350 00000 n 
+0000913344 00000 n 
+0000913465 00000 n 
+0000913526 00000 n 
+0000913587 00000 n 
+0000913648 00000 n 
+0000913709 00000 n 
+0000918176 00000 n 
+0000917148 00000 n 
+0000913934 00000 n 
+0000917264 00000 n 
+0000917445 00000 n 
+0000917506 00000 n 
+0000917567 00000 n 
+0000917628 00000 n 
+0000917689 00000 n 
+0000917749 00000 n 
+0000917810 00000 n 
+0000917871 00000 n 
+0000917932 00000 n 
+0000917993 00000 n 
+0000918054 00000 n 
+0000918115 00000 n 
+0001269384 00000 n 
+0000920276 00000 n 
+0000920428 00000 n 
+0000920701 00000 n 
+0000920130 00000 n 
+0000918341 00000 n 
+0000920580 00000 n 
+0000924416 00000 n 
+0000924176 00000 n 
+0000920838 00000 n 
+0000924292 00000 n 
+0000926787 00000 n 
+0000926549 00000 n 
+0000924527 00000 n 
+0000926665 00000 n 
+0000929017 00000 n 
+0000928660 00000 n 
+0000926898 00000 n 
+0000928776 00000 n 
+0000932183 00000 n 
+0000932006 00000 n 
+0000929141 00000 n 
+0000932122 00000 n 
+0000935162 00000 n 
+0000934985 00000 n 
+0000932307 00000 n 
+0000935101 00000 n 
+0001269509 00000 n 
+0000937853 00000 n 
+0000937676 00000 n 
+0000935273 00000 n 
+0000937792 00000 n 
+0000938737 00000 n 
+0000938560 00000 n 
+0000937977 00000 n 
+0000938676 00000 n 
+0000939113 00000 n 
+0000938936 00000 n 
+0000938835 00000 n 
+0000939052 00000 n 
+0000942942 00000 n 
+0000941686 00000 n 
+0000939155 00000 n 
+0000941802 00000 n 
+0000941863 00000 n 
+0000945680 00000 n 
+0000944841 00000 n 
+0000943040 00000 n 
+0000944957 00000 n 
+0000949849 00000 n 
+0000949998 00000 n 
+0000950150 00000 n 
+0000950302 00000 n 
+0000950454 00000 n 
+0000950606 00000 n 
+0000950758 00000 n 
+0000950909 00000 n 
+0000951059 00000 n 
+0000951211 00000 n 
+0000951362 00000 n 
+0000951514 00000 n 
+0000951663 00000 n 
+0000951815 00000 n 
+0000951967 00000 n 
+0000952119 00000 n 
+0000952271 00000 n 
+0000952423 00000 n 
+0000952575 00000 n 
+0000952727 00000 n 
+0000952877 00000 n 
+0000953027 00000 n 
+0000953177 00000 n 
+0000953327 00000 n 
+0000953476 00000 n 
+0000953627 00000 n 
+0000953778 00000 n 
+0000953928 00000 n 
+0000954078 00000 n 
+0000954229 00000 n 
+0000954380 00000 n 
+0000954531 00000 n 
+0000954682 00000 n 
+0000954833 00000 n 
+0000954983 00000 n 
+0000955134 00000 n 
+0000955285 00000 n 
+0000955435 00000 n 
+0000955586 00000 n 
+0000955737 00000 n 
+0000955888 00000 n 
+0000956039 00000 n 
+0000956190 00000 n 
+0000956341 00000 n 
+0000956491 00000 n 
+0000956642 00000 n 
+0000956792 00000 n 
+0000956943 00000 n 
+0000957094 00000 n 
+0000957243 00000 n 
+0000957392 00000 n 
+0000957541 00000 n 
+0000957690 00000 n 
+0000957839 00000 n 
+0000957990 00000 n 
+0000958141 00000 n 
+0000958292 00000 n 
+0000958443 00000 n 
+0000958594 00000 n 
+0000958745 00000 n 
+0000958894 00000 n 
+0000959044 00000 n 
+0000959195 00000 n 
+0000959345 00000 n 
+0000959496 00000 n 
+0000959645 00000 n 
+0000959796 00000 n 
+0000959946 00000 n 
+0000960096 00000 n 
+0000960246 00000 n 
+0000960393 00000 n 
+0000960542 00000 n 
+0000960690 00000 n 
+0000960839 00000 n 
+0000960988 00000 n 
+0000961137 00000 n 
+0000961288 00000 n 
+0000961438 00000 n 
+0000961589 00000 n 
+0000961740 00000 n 
+0000961891 00000 n 
+0000962041 00000 n 
+0000962192 00000 n 
+0000962342 00000 n 
+0000962493 00000 n 
+0000962644 00000 n 
+0000962795 00000 n 
+0000962946 00000 n 
+0000963097 00000 n 
+0000963247 00000 n 
+0000963397 00000 n 
+0000963548 00000 n 
+0000963699 00000 n 
+0000963850 00000 n 
+0000964001 00000 n 
+0000964152 00000 n 
+0000964303 00000 n 
+0000964454 00000 n 
+0000964603 00000 n 
+0000964752 00000 n 
+0000964903 00000 n 
+0000965054 00000 n 
+0000965205 00000 n 
+0000965356 00000 n 
+0000965507 00000 n 
+0000965658 00000 n 
+0000965809 00000 n 
+0000965960 00000 n 
+0000966111 00000 n 
+0000966262 00000 n 
+0000966413 00000 n 
+0000966564 00000 n 
+0000966715 00000 n 
+0000966865 00000 n 
+0000967016 00000 n 
+0000967167 00000 n 
+0000967318 00000 n 
+0000967469 00000 n 
+0000967619 00000 n 
+0000967770 00000 n 
+0000967921 00000 n 
+0000968072 00000 n 
+0000968223 00000 n 
+0000968373 00000 n 
+0000968523 00000 n 
+0000968672 00000 n 
+0000968820 00000 n 
+0000968971 00000 n 
+0000969121 00000 n 
+0000969272 00000 n 
+0000969423 00000 n 
+0000969574 00000 n 
+0000969724 00000 n 
+0000969872 00000 n 
+0000970021 00000 n 
+0000970170 00000 n 
+0000970319 00000 n 
+0000970468 00000 n 
+0000974936 00000 n 
+0000970738 00000 n 
+0000948479 00000 n 
+0000945778 00000 n 
+0000970617 00000 n 
+0001269634 00000 n 
+0000975087 00000 n 
+0000975238 00000 n 
+0000975388 00000 n 
+0000975539 00000 n 
+0000975690 00000 n 
+0000975841 00000 n 
+0000975990 00000 n 
+0000976140 00000 n 
+0000976290 00000 n 
+0000976441 00000 n 
+0000976592 00000 n 
+0000976742 00000 n 
+0000976893 00000 n 
+0000977044 00000 n 
+0000977195 00000 n 
+0000977346 00000 n 
+0000977497 00000 n 
+0000977648 00000 n 
+0000977799 00000 n 
+0000977950 00000 n 
+0000978101 00000 n 
+0000978252 00000 n 
+0000978401 00000 n 
+0000978552 00000 n 
+0000978700 00000 n 
+0000978848 00000 n 
+0000978999 00000 n 
+0000979149 00000 n 
+0000979298 00000 n 
+0000979449 00000 n 
+0000979600 00000 n 
+0000979751 00000 n 
+0000979901 00000 n 
+0000980052 00000 n 
+0000980203 00000 n 
+0000980354 00000 n 
+0000980505 00000 n 
+0000980656 00000 n 
+0000980806 00000 n 
+0000980957 00000 n 
+0000981106 00000 n 
+0000981255 00000 n 
+0000981404 00000 n 
+0000981552 00000 n 
+0000981701 00000 n 
+0000981852 00000 n 
+0000982003 00000 n 
+0000982154 00000 n 
+0000982305 00000 n 
+0000982456 00000 n 
+0000982607 00000 n 
+0000982758 00000 n 
+0000982909 00000 n 
+0000983060 00000 n 
+0000983211 00000 n 
+0000983362 00000 n 
+0000983513 00000 n 
+0000983663 00000 n 
+0000983814 00000 n 
+0000983965 00000 n 
+0000984115 00000 n 
+0000984265 00000 n 
+0000984416 00000 n 
+0000984567 00000 n 
+0000984718 00000 n 
+0000984868 00000 n 
+0000985019 00000 n 
+0000985170 00000 n 
+0000985321 00000 n 
+0000985472 00000 n 
+0000985623 00000 n 
+0000985774 00000 n 
+0000985925 00000 n 
+0000986076 00000 n 
+0000986226 00000 n 
+0000986376 00000 n 
+0000986526 00000 n 
+0000986676 00000 n 
+0000986824 00000 n 
+0000986971 00000 n 
+0000987119 00000 n 
+0000987266 00000 n 
+0000987414 00000 n 
+0000987562 00000 n 
+0000987711 00000 n 
+0000987862 00000 n 
+0000988013 00000 n 
+0000988164 00000 n 
+0000988312 00000 n 
+0000988462 00000 n 
+0000988613 00000 n 
+0000988764 00000 n 
+0000988914 00000 n 
+0000989065 00000 n 
+0000989216 00000 n 
+0000989367 00000 n 
+0000989518 00000 n 
+0000989669 00000 n 
+0000989820 00000 n 
+0000989970 00000 n 
+0000990121 00000 n 
+0000990272 00000 n 
+0000990423 00000 n 
+0000990571 00000 n 
+0000990722 00000 n 
+0000990873 00000 n 
+0000991024 00000 n 
+0000991174 00000 n 
+0000991325 00000 n 
+0000991475 00000 n 
+0000991625 00000 n 
+0000991776 00000 n 
+0000991927 00000 n 
+0000992078 00000 n 
+0000992229 00000 n 
+0000992379 00000 n 
+0000992529 00000 n 
+0000992678 00000 n 
+0000992829 00000 n 
+0000992980 00000 n 
+0000993131 00000 n 
+0000993281 00000 n 
+0000993432 00000 n 
+0000993582 00000 n 
+0000993733 00000 n 
+0000993884 00000 n 
+0000994035 00000 n 
+0000994186 00000 n 
+0000994337 00000 n 
+0000994488 00000 n 
+0000994638 00000 n 
+0000994789 00000 n 
+0000994940 00000 n 
+0000995091 00000 n 
+0000995242 00000 n 
+0000995392 00000 n 
+0000995540 00000 n 
+0000995689 00000 n 
+0000995838 00000 n 
+0000995987 00000 n 
+0001000313 00000 n 
+0000996197 00000 n 
+0000973539 00000 n 
+0000970849 00000 n 
+0000996136 00000 n 
+0001000464 00000 n 
+0001000615 00000 n 
+0001000766 00000 n 
+0001000916 00000 n 
+0001001067 00000 n 
+0001001214 00000 n 
+0001001365 00000 n 
+0001001516 00000 n 
+0001001667 00000 n 
+0001001818 00000 n 
+0001001969 00000 n 
+0001002120 00000 n 
+0001002271 00000 n 
+0001002422 00000 n 
+0001002573 00000 n 
+0001002724 00000 n 
+0001002874 00000 n 
+0001003025 00000 n 
+0001003173 00000 n 
+0001003324 00000 n 
+0001003475 00000 n 
+0001003626 00000 n 
+0001003776 00000 n 
+0001003926 00000 n 
+0001004077 00000 n 
+0001004228 00000 n 
+0001004378 00000 n 
+0001004527 00000 n 
+0001004676 00000 n 
+0001004827 00000 n 
+0001004978 00000 n 
+0001005129 00000 n 
+0001005280 00000 n 
+0001005431 00000 n 
+0001005582 00000 n 
+0001005733 00000 n 
+0001005883 00000 n 
+0001006034 00000 n 
+0001006185 00000 n 
+0001006336 00000 n 
+0001006487 00000 n 
+0001006637 00000 n 
+0001006788 00000 n 
+0001006939 00000 n 
+0001007090 00000 n 
+0001007241 00000 n 
+0001007391 00000 n 
+0001007541 00000 n 
+0001007692 00000 n 
+0001007843 00000 n 
+0001007994 00000 n 
+0001008145 00000 n 
+0001008295 00000 n 
+0001008446 00000 n 
+0001008597 00000 n 
+0001008747 00000 n 
+0001008896 00000 n 
+0001009047 00000 n 
+0001009198 00000 n 
+0001009349 00000 n 
+0001009500 00000 n 
+0001009650 00000 n 
+0001009801 00000 n 
+0001009951 00000 n 
+0001010099 00000 n 
+0001010247 00000 n 
+0001010395 00000 n 
+0001010543 00000 n 
+0001010692 00000 n 
+0001010841 00000 n 
+0001010989 00000 n 
+0001011139 00000 n 
+0001011289 00000 n 
+0001011440 00000 n 
+0001011591 00000 n 
+0001011741 00000 n 
+0001011891 00000 n 
+0001012041 00000 n 
+0001012191 00000 n 
+0001012342 00000 n 
+0001012493 00000 n 
+0001012644 00000 n 
+0001012795 00000 n 
+0001012945 00000 n 
+0001013090 00000 n 
+0001013236 00000 n 
+0001013382 00000 n 
+0001013528 00000 n 
+0001013674 00000 n 
+0001013820 00000 n 
+0001013970 00000 n 
+0001014121 00000 n 
+0001014272 00000 n 
+0001014423 00000 n 
+0001014573 00000 n 
+0001014724 00000 n 
+0001014875 00000 n 
+0001015026 00000 n 
+0001015177 00000 n 
+0001015328 00000 n 
+0001015478 00000 n 
+0001015629 00000 n 
+0001015780 00000 n 
+0001015931 00000 n 
+0001016081 00000 n 
+0001016232 00000 n 
+0001016383 00000 n 
+0001016534 00000 n 
+0001016685 00000 n 
+0001016836 00000 n 
+0001016987 00000 n 
+0001017138 00000 n 
+0001017289 00000 n 
+0001017439 00000 n 
+0001017590 00000 n 
+0001017741 00000 n 
+0001017890 00000 n 
+0001018041 00000 n 
+0001018190 00000 n 
+0001018340 00000 n 
+0001018491 00000 n 
+0001018642 00000 n 
+0001018793 00000 n 
+0001018944 00000 n 
+0001019094 00000 n 
+0001019245 00000 n 
+0001019396 00000 n 
+0001019547 00000 n 
+0001019698 00000 n 
+0001019849 00000 n 
+0001019999 00000 n 
+0001020149 00000 n 
+0001020299 00000 n 
+0001020449 00000 n 
+0001020600 00000 n 
+0001020751 00000 n 
+0001020902 00000 n 
+0001021053 00000 n 
+0001021204 00000 n 
+0001021355 00000 n 
+0001021506 00000 n 
+0001021657 00000 n 
+0001021806 00000 n 
+0001021957 00000 n 
+0001022108 00000 n 
+0001022259 00000 n 
+0001022410 00000 n 
+0001022561 00000 n 
+0001022711 00000 n 
+0001022862 00000 n 
+0001023013 00000 n 
+0001023164 00000 n 
+0001023314 00000 n 
+0001023465 00000 n 
+0001023615 00000 n 
+0001023765 00000 n 
+0001023915 00000 n 
+0001024065 00000 n 
+0001027791 00000 n 
+0001024276 00000 n 
+0000998754 00000 n 
+0000996308 00000 n 
+0001024215 00000 n 
+0001027943 00000 n 
+0001028095 00000 n 
+0001028246 00000 n 
+0001028395 00000 n 
+0001028547 00000 n 
+0001028698 00000 n 
+0001028850 00000 n 
+0001029002 00000 n 
+0001029154 00000 n 
+0001029306 00000 n 
+0001029458 00000 n 
+0001029610 00000 n 
+0001029762 00000 n 
+0001029914 00000 n 
+0001030064 00000 n 
+0001030216 00000 n 
+0001030366 00000 n 
+0001030518 00000 n 
+0001030670 00000 n 
+0001030822 00000 n 
+0001030974 00000 n 
+0001031125 00000 n 
+0001031275 00000 n 
+0001031427 00000 n 
+0001031577 00000 n 
+0001031727 00000 n 
+0001031878 00000 n 
+0001032027 00000 n 
+0001032177 00000 n 
+0001032327 00000 n 
+0001032477 00000 n 
+0001032628 00000 n 
+0001032779 00000 n 
+0001032929 00000 n 
+0001033079 00000 n 
+0001033230 00000 n 
+0001033381 00000 n 
+0001033531 00000 n 
+0001033678 00000 n 
+0001033828 00000 n 
+0001033976 00000 n 
+0001034127 00000 n 
+0001034278 00000 n 
+0001034429 00000 n 
+0001034580 00000 n 
+0001034731 00000 n 
+0001034881 00000 n 
+0001035032 00000 n 
+0001035183 00000 n 
+0001035334 00000 n 
+0001035485 00000 n 
+0001035635 00000 n 
+0001035785 00000 n 
+0001035936 00000 n 
+0001036087 00000 n 
+0001036237 00000 n 
+0001036385 00000 n 
+0001036533 00000 n 
+0001036680 00000 n 
+0001036830 00000 n 
+0001036980 00000 n 
+0001037131 00000 n 
+0001037282 00000 n 
+0001037433 00000 n 
+0001037584 00000 n 
+0001037735 00000 n 
+0001037886 00000 n 
+0001038037 00000 n 
+0001038188 00000 n 
+0001038339 00000 n 
+0001038488 00000 n 
+0001038639 00000 n 
+0001038790 00000 n 
+0001038941 00000 n 
+0001039092 00000 n 
+0001039243 00000 n 
+0001039394 00000 n 
+0001039545 00000 n 
+0001039694 00000 n 
+0001039845 00000 n 
+0001039996 00000 n 
+0001040147 00000 n 
+0001040296 00000 n 
+0001040447 00000 n 
+0001040598 00000 n 
+0001040749 00000 n 
+0001040900 00000 n 
+0001041051 00000 n 
+0001041203 00000 n 
+0001041355 00000 n 
+0001041507 00000 n 
+0001041657 00000 n 
+0001041809 00000 n 
+0001041961 00000 n 
+0001042113 00000 n 
+0001042265 00000 n 
+0001042416 00000 n 
+0001042568 00000 n 
+0001042719 00000 n 
+0001042869 00000 n 
+0001043021 00000 n 
+0001043170 00000 n 
+0001043321 00000 n 
+0001043471 00000 n 
+0001043622 00000 n 
+0001043772 00000 n 
+0001043923 00000 n 
+0001044074 00000 n 
+0001044225 00000 n 
+0001044375 00000 n 
+0001044523 00000 n 
+0001044674 00000 n 
+0001044824 00000 n 
+0001044975 00000 n 
+0001045125 00000 n 
+0001045275 00000 n 
+0001045426 00000 n 
+0001045574 00000 n 
+0001045723 00000 n 
+0001045872 00000 n 
+0001046021 00000 n 
+0001046170 00000 n 
+0001050824 00000 n 
+0001050975 00000 n 
+0001051126 00000 n 
+0001051277 00000 n 
+0001046379 00000 n 
+0001026556 00000 n 
+0001024387 00000 n 
+0001046318 00000 n 
+0001051428 00000 n 
+0001051579 00000 n 
+0001051730 00000 n 
+0001051881 00000 n 
+0001052031 00000 n 
+0001052182 00000 n 
+0001052333 00000 n 
+0001052484 00000 n 
+0001052635 00000 n 
+0001052787 00000 n 
+0001052938 00000 n 
+0001053089 00000 n 
+0001053240 00000 n 
+0001053389 00000 n 
+0001053538 00000 n 
+0001053689 00000 n 
+0001053840 00000 n 
+0001053991 00000 n 
+0001054141 00000 n 
+0001054291 00000 n 
+0001054442 00000 n 
+0001054593 00000 n 
+0001054744 00000 n 
+0001054894 00000 n 
+0001055045 00000 n 
+0001055194 00000 n 
+0001055345 00000 n 
+0001055495 00000 n 
+0001055646 00000 n 
+0001055797 00000 n 
+0001055948 00000 n 
+0001056098 00000 n 
+0001056247 00000 n 
+0001056397 00000 n 
+0001056548 00000 n 
+0001056699 00000 n 
+0001056851 00000 n 
+0001057003 00000 n 
+0001057155 00000 n 
+0001057307 00000 n 
+0001057459 00000 n 
+0001057609 00000 n 
+0001057760 00000 n 
+0001057912 00000 n 
+0001058061 00000 n 
+0001058210 00000 n 
+0001058360 00000 n 
+0001058509 00000 n 
+0001058657 00000 n 
+0001058808 00000 n 
+0001058960 00000 n 
+0001059111 00000 n 
+0001059260 00000 n 
+0001059412 00000 n 
+0001059561 00000 n 
+0001059712 00000 n 
+0001059863 00000 n 
+0001060015 00000 n 
+0001060167 00000 n 
+0001060319 00000 n 
+0001060471 00000 n 
+0001060622 00000 n 
+0001060774 00000 n 
+0001060925 00000 n 
+0001061077 00000 n 
+0001061228 00000 n 
+0001061379 00000 n 
+0001061531 00000 n 
+0001061679 00000 n 
+0001061831 00000 n 
+0001061983 00000 n 
+0001062135 00000 n 
+0001062287 00000 n 
+0001062439 00000 n 
+0001062589 00000 n 
+0001062741 00000 n 
+0001062892 00000 n 
+0001063043 00000 n 
+0001063195 00000 n 
+0001063346 00000 n 
+0001063498 00000 n 
+0001063648 00000 n 
+0001063800 00000 n 
+0001063952 00000 n 
+0001064103 00000 n 
+0001064255 00000 n 
+0001064407 00000 n 
+0001064557 00000 n 
+0001064709 00000 n 
+0001064861 00000 n 
+0001065013 00000 n 
+0001065164 00000 n 
+0001065316 00000 n 
+0001065467 00000 n 
+0001065618 00000 n 
+0001065767 00000 n 
+0001065917 00000 n 
+0001066067 00000 n 
+0001066216 00000 n 
+0001066368 00000 n 
+0001066520 00000 n 
+0001066672 00000 n 
+0001066823 00000 n 
+0001066971 00000 n 
+0001067121 00000 n 
+0001067271 00000 n 
+0001071512 00000 n 
+0001067482 00000 n 
+0001049706 00000 n 
+0001046490 00000 n 
+0001067421 00000 n 
+0001071664 00000 n 
+0001071816 00000 n 
+0001071968 00000 n 
+0001072120 00000 n 
+0001072272 00000 n 
+0001072424 00000 n 
+0001072576 00000 n 
+0001072728 00000 n 
+0001072880 00000 n 
+0001073032 00000 n 
+0001073183 00000 n 
+0001073335 00000 n 
+0001073484 00000 n 
+0001073636 00000 n 
+0001073785 00000 n 
+0001073937 00000 n 
+0001074087 00000 n 
+0001074236 00000 n 
+0001074386 00000 n 
+0001074537 00000 n 
+0001074687 00000 n 
+0001074838 00000 n 
+0001074989 00000 n 
+0001075140 00000 n 
+0001075291 00000 n 
+0001075441 00000 n 
+0001075591 00000 n 
+0001075741 00000 n 
+0001075892 00000 n 
+0001076042 00000 n 
+0001076193 00000 n 
+0001076343 00000 n 
+0001076493 00000 n 
+0001076643 00000 n 
+0001076794 00000 n 
+0001076944 00000 n 
+0001077095 00000 n 
+0001077246 00000 n 
+0001077397 00000 n 
+0001077548 00000 n 
+0001077699 00000 n 
+0001077850 00000 n 
+0001078000 00000 n 
+0001078150 00000 n 
+0001078300 00000 n 
+0001078449 00000 n 
+0001078599 00000 n 
+0001078749 00000 n 
+0001078900 00000 n 
+0001079049 00000 n 
+0001079200 00000 n 
+0001079351 00000 n 
+0001079500 00000 n 
+0001079651 00000 n 
+0001079802 00000 n 
+0001079951 00000 n 
+0001080102 00000 n 
+0001080253 00000 n 
+0001080404 00000 n 
+0001080555 00000 n 
+0001080706 00000 n 
+0001080857 00000 n 
+0001081008 00000 n 
+0001081158 00000 n 
+0001081309 00000 n 
+0001081459 00000 n 
+0001081610 00000 n 
+0001081761 00000 n 
+0001081912 00000 n 
+0001082062 00000 n 
+0001082212 00000 n 
+0001082361 00000 n 
+0001082511 00000 n 
+0001082659 00000 n 
+0001082807 00000 n 
+0001082956 00000 n 
+0001083107 00000 n 
+0001083258 00000 n 
+0001083408 00000 n 
+0001083559 00000 n 
+0001083709 00000 n 
+0001083860 00000 n 
+0001084011 00000 n 
+0001084161 00000 n 
+0001084312 00000 n 
+0001084464 00000 n 
+0001084614 00000 n 
+0001084765 00000 n 
+0001084916 00000 n 
+0001085068 00000 n 
+0001085220 00000 n 
+0001085372 00000 n 
+0001085524 00000 n 
+0001085676 00000 n 
+0001085828 00000 n 
+0001085980 00000 n 
+0001086132 00000 n 
+0001086284 00000 n 
+0001086435 00000 n 
+0001086585 00000 n 
+0001086736 00000 n 
+0001086888 00000 n 
+0001087040 00000 n 
+0001087191 00000 n 
+0001087343 00000 n 
+0001087495 00000 n 
+0001087647 00000 n 
+0001087798 00000 n 
+0001087950 00000 n 
+0001088099 00000 n 
+0001088250 00000 n 
+0001088400 00000 n 
+0001088551 00000 n 
+0001088701 00000 n 
+0001088852 00000 n 
+0001089004 00000 n 
+0001089155 00000 n 
+0001089306 00000 n 
+0001089458 00000 n 
+0001089608 00000 n 
+0001089758 00000 n 
+0001089907 00000 n 
+0001090057 00000 n 
+0001090208 00000 n 
+0001090358 00000 n 
+0001090504 00000 n 
+0001090653 00000 n 
+0001090800 00000 n 
+0001091782 00000 n 
+0001091010 00000 n 
+0001070223 00000 n 
+0001067593 00000 n 
+0001090949 00000 n 
+0001091932 00000 n 
+0001092081 00000 n 
+0001092232 00000 n 
+0001092382 00000 n 
+0001092533 00000 n 
+0001092683 00000 n 
+0001092833 00000 n 
+0001093045 00000 n 
+0001091582 00000 n 
+0001091121 00000 n 
+0001092984 00000 n 
+0001269759 00000 n 
+0001093434 00000 n 
+0001093257 00000 n 
+0001093156 00000 n 
+0001093373 00000 n 
+0001093476 00000 n 
+0001093610 00000 n 
+0001093756 00000 n 
+0001093782 00000 n 
+0001093808 00000 n 
+0001094319 00000 n 
+0001094343 00000 n 
+0001094670 00000 n 
+0001095281 00000 n 
+0001095656 00000 n 
+0001096138 00000 n 
+0001096280 00000 n 
+0001096975 00000 n 
+0001097617 00000 n 
+0001097686 00000 n 
+0001098350 00000 n 
+0001098734 00000 n 
+0001099376 00000 n 
+0001100079 00000 n 
+0001100717 00000 n 
+0001101229 00000 n 
+0001101636 00000 n 
+0001102113 00000 n 
+0001102603 00000 n 
+0001116474 00000 n 
+0001116920 00000 n 
+0001128879 00000 n 
+0001129313 00000 n 
+0001132757 00000 n 
+0001133002 00000 n 
+0001139112 00000 n 
+0001139390 00000 n 
+0001143004 00000 n 
+0001143428 00000 n 
+0001156747 00000 n 
+0001157161 00000 n 
+0001164606 00000 n 
+0001164893 00000 n 
+0001182313 00000 n 
+0001182908 00000 n 
+0001189337 00000 n 
+0001189642 00000 n 
+0001194578 00000 n 
+0001194874 00000 n 
+0001196868 00000 n 
+0001197100 00000 n 
+0001202799 00000 n 
+0001203105 00000 n 
+0001209230 00000 n 
+0001209540 00000 n 
+0001212046 00000 n 
+0001212277 00000 n 
+0001217053 00000 n 
+0001217307 00000 n 
+0001221684 00000 n 
+0001222110 00000 n 
+0001223347 00000 n 
+0001223574 00000 n 
+0001224891 00000 n 
+0001225124 00000 n 
+0001236156 00000 n 
+0001236488 00000 n 
+0001242989 00000 n 
+0001243262 00000 n 
+0001258384 00000 n 
+0001258948 00000 n 
+0001260643 00000 n 
+0001260862 00000 n 
+0001262614 00000 n 
+0001269848 00000 n 
+0001269968 00000 n 
+0001270093 00000 n 
+0001270219 00000 n 
+0001270345 00000 n 
+0001270471 00000 n 
+0001270572 00000 n 
+0001281139 00000 n 
+0001281313 00000 n 
+0001281485 00000 n 
+0001281659 00000 n 
+0001281833 00000 n 
+0001282010 00000 n 
+0001282185 00000 n 
+0001282362 00000 n 
+0001282537 00000 n 
+0001282714 00000 n 
+0001282889 00000 n 
+0001283066 00000 n 
+0001283241 00000 n 
+0001283418 00000 n 
+0001283592 00000 n 
+0001283782 00000 n 
+0001283968 00000 n 
+0001284163 00000 n 
+0001284373 00000 n 
+0001284585 00000 n 
+0001284789 00000 n 
+0001285011 00000 n 
+0001285221 00000 n 
+0001285436 00000 n 
+0001285636 00000 n 
+0001285819 00000 n 
+0001286004 00000 n 
+0001286187 00000 n 
+0001286372 00000 n 
+0001286554 00000 n 
+0001286736 00000 n 
+0001286921 00000 n 
+0001287104 00000 n 
+0001287289 00000 n 
+0001287472 00000 n 
+0001287657 00000 n 
+0001287840 00000 n 
+0001288020 00000 n 
+0001288190 00000 n 
+0001288361 00000 n 
+0001288534 00000 n 
+0001288708 00000 n 
+0001288885 00000 n 
+0001289060 00000 n 
+0001289237 00000 n 
+0001289412 00000 n 
+0001289589 00000 n 
+0001289764 00000 n 
+0001289941 00000 n 
+0001290116 00000 n 
+0001290293 00000 n 
+0001290467 00000 n 
+0001290641 00000 n 
+0001290812 00000 n 
+0001291007 00000 n 
+0001291224 00000 n 
+0001291439 00000 n 
+0001291656 00000 n 
+0001291871 00000 n 
+0001292088 00000 n 
+0001292302 00000 n 
+0001292516 00000 n 
+0001292733 00000 n 
+0001292939 00000 n 
+0001293143 00000 n 
+0001293347 00000 n 
+0001293556 00000 n 
+0001293765 00000 n 
+0001293974 00000 n 
+0001294180 00000 n 
+0001294389 00000 n 
+0001294596 00000 n 
+0001294805 00000 n 
+0001295011 00000 n 
+0001295217 00000 n 
+0001295426 00000 n 
+0001295633 00000 n 
+0001295842 00000 n 
+0001296045 00000 n 
+0001296242 00000 n 
+0001296440 00000 n 
+0001296643 00000 n 
+0001296846 00000 n 
+0001297049 00000 n 
+0001297252 00000 n 
+0001297455 00000 n 
+0001297684 00000 n 
+0001297927 00000 n 
+0001298171 00000 n 
+0001298414 00000 n 
+0001298657 00000 n 
+0001298900 00000 n 
+0001299143 00000 n 
+0001299424 00000 n 
+0001299707 00000 n 
+0001299918 00000 n 
+0001300085 00000 n 
+0001300203 00000 n 
+0001300319 00000 n 
+0001300440 00000 n 
+0001300563 00000 n 
+0001300682 00000 n 
+0001300800 00000 n 
+0001300917 00000 n 
+0001301033 00000 n 
+0001301154 00000 n 
+0001301280 00000 n 
+0001301405 00000 n 
+0001301529 00000 n 
+0001301652 00000 n 
+0001301776 00000 n 
+0001301905 00000 n 
+0001302032 00000 n 
+0001302151 00000 n 
+0001302272 00000 n 
+0001302375 00000 n 
+0001302468 00000 n 
+0001302508 00000 n 
+0001302695 00000 n 
+trailer
+<< /Size 2924
+/Root 2922 0 R
+/Info 2923 0 R
+/ID [<EC8B551D69FBB59529CA709B260B4949> <EC8B551D69FBB59529CA709B260B4949>] >>
+startxref
+1303027
+%%EOF
diff --git a/doc/cvodes/cvs_examples.pdf b/doc/cvodes/cvs_examples.pdf
new file mode 100644
index 0000000..951c575
Binary files /dev/null and b/doc/cvodes/cvs_examples.pdf differ
diff --git a/doc/cvodes/cvs_guide.pdf b/doc/cvodes/cvs_guide.pdf
new file mode 100644
index 0000000..7970805
--- /dev/null
+++ b/doc/cvodes/cvs_guide.pdf
@@ -0,0 +1,34146 @@
+%PDF-1.4
+%����
+5 0 obj
+<< /S /GoTo /D (section*.3) >>
+endobj
+8 0 obj
+(List of Tables)
+endobj
+9 0 obj
+<< /S /GoTo /D (section*.5) >>
+endobj
+12 0 obj
+(List of Figures)
+endobj
+13 0 obj
+<< /S /GoTo /D (chapter.1) >>
+endobj
+16 0 obj
+(Introduction)
+endobj
+17 0 obj
+<< /S /GoTo /D (section.1.1) >>
+endobj
+20 0 obj
+(Historical background)
+endobj
+21 0 obj
+<< /S /GoTo /D (section.1.2) >>
+endobj
+24 0 obj
+(Changes from previous versions)
+endobj
+25 0 obj
+<< /S /GoTo /D (section.1.3) >>
+endobj
+28 0 obj
+(Reading this user guide)
+endobj
+29 0 obj
+<< /S /GoTo /D (section.1.4) >>
+endobj
+32 0 obj
+(SUNDIALS Release License)
+endobj
+33 0 obj
+<< /S /GoTo /D (subsection.1.4.1) >>
+endobj
+36 0 obj
+(Copyright Notices)
+endobj
+37 0 obj
+<< /S /GoTo /D (subsubsection.1.4.1.1) >>
+endobj
+40 0 obj
+(SUNDIALS Copyright)
+endobj
+41 0 obj
+<< /S /GoTo /D (subsubsection.1.4.1.2) >>
+endobj
+44 0 obj
+(ARKode Copyright)
+endobj
+45 0 obj
+<< /S /GoTo /D (subsection.1.4.2) >>
+endobj
+48 0 obj
+(BSD License)
+endobj
+49 0 obj
+<< /S /GoTo /D (chapter.2) >>
+endobj
+52 0 obj
+(Mathematical Considerations)
+endobj
+53 0 obj
+<< /S /GoTo /D (section.2.1) >>
+endobj
+56 0 obj
+(IVP solution)
+endobj
+57 0 obj
+<< /S /GoTo /D (section.2.2) >>
+endobj
+60 0 obj
+(Preconditioning)
+endobj
+61 0 obj
+<< /S /GoTo /D (section.2.3) >>
+endobj
+64 0 obj
+(BDF stability limit detection)
+endobj
+65 0 obj
+<< /S /GoTo /D (section.2.4) >>
+endobj
+68 0 obj
+(Rootfinding)
+endobj
+69 0 obj
+<< /S /GoTo /D (section.2.5) >>
+endobj
+72 0 obj
+(Pure quadrature integration)
+endobj
+73 0 obj
+<< /S /GoTo /D (section.2.6) >>
+endobj
+76 0 obj
+(Forward sensitivity analysis)
+endobj
+77 0 obj
+<< /S /GoTo /D (subsection.2.6.1) >>
+endobj
+80 0 obj
+(Forward sensitivity methods)
+endobj
+81 0 obj
+<< /S /GoTo /D (subsection.2.6.2) >>
+endobj
+84 0 obj
+(Selection of the absolute tolerances for sensitivity variables)
+endobj
+85 0 obj
+<< /S /GoTo /D (subsection.2.6.3) >>
+endobj
+88 0 obj
+(Evaluation of the sensitivity right-hand side)
+endobj
+89 0 obj
+<< /S /GoTo /D (subsection.2.6.4) >>
+endobj
+92 0 obj
+(Quadratures depending on forward sensitivities)
+endobj
+93 0 obj
+<< /S /GoTo /D (section.2.7) >>
+endobj
+96 0 obj
+(Adjoint sensitivity analysis)
+endobj
+97 0 obj
+<< /S /GoTo /D (subsection.2.7.1) >>
+endobj
+100 0 obj
+(Checkpointing scheme)
+endobj
+101 0 obj
+<< /S /GoTo /D (section.2.8) >>
+endobj
+104 0 obj
+(Second-order sensitivity analysis)
+endobj
+105 0 obj
+<< /S /GoTo /D (chapter.3) >>
+endobj
+108 0 obj
+(Code Organization)
+endobj
+109 0 obj
+<< /S /GoTo /D (section.3.1) >>
+endobj
+112 0 obj
+(SUNDIALS organization)
+endobj
+113 0 obj
+<< /S /GoTo /D (section.3.2) >>
+endobj
+116 0 obj
+(CVODES organization)
+endobj
+117 0 obj
+<< /S /GoTo /D (chapter.4) >>
+endobj
+120 0 obj
+(Using CVODES for IVP Solution)
+endobj
+121 0 obj
+<< /S /GoTo /D (section.4.1) >>
+endobj
+124 0 obj
+(Access to library and header files)
+endobj
+125 0 obj
+<< /S /GoTo /D (section.4.2) >>
+endobj
+128 0 obj
+(Data Types)
+endobj
+129 0 obj
+<< /S /GoTo /D (section.4.3) >>
+endobj
+132 0 obj
+(Header files)
+endobj
+133 0 obj
+<< /S /GoTo /D (section.4.4) >>
+endobj
+136 0 obj
+(A skeleton of the user's main program)
+endobj
+137 0 obj
+<< /S /GoTo /D (section.4.5) >>
+endobj
+140 0 obj
+(User-callable functions)
+endobj
+141 0 obj
+<< /S /GoTo /D (subsection.4.5.1) >>
+endobj
+144 0 obj
+(CVODES initialization and deallocation functions)
+endobj
+145 0 obj
+<< /S /GoTo /D (subsection.4.5.2) >>
+endobj
+148 0 obj
+(CVODES tolerance specification functions)
+endobj
+149 0 obj
+<< /S /GoTo /D (subsection.4.5.3) >>
+endobj
+152 0 obj
+(Linear solver specification functions)
+endobj
+153 0 obj
+<< /S /GoTo /D (subsection.4.5.4) >>
+endobj
+156 0 obj
+(Rootfinding initialization function)
+endobj
+157 0 obj
+<< /S /GoTo /D (subsection.4.5.5) >>
+endobj
+160 0 obj
+(CVODES solver function)
+endobj
+161 0 obj
+<< /S /GoTo /D (subsection.4.5.6) >>
+endobj
+164 0 obj
+(Optional input functions)
+endobj
+165 0 obj
+<< /S /GoTo /D (subsubsection.4.5.6.1) >>
+endobj
+168 0 obj
+(Main solver optional input functions)
+endobj
+169 0 obj
+<< /S /GoTo /D (subsubsection.4.5.6.2) >>
+endobj
+172 0 obj
+(Dense/band direct linear solvers optional input functions)
+endobj
+173 0 obj
+<< /S /GoTo /D (subsubsection.4.5.6.3) >>
+endobj
+176 0 obj
+(Sparse direct linear solvers optional input functions)
+endobj
+177 0 obj
+<< /S /GoTo /D (subsubsection.4.5.6.4) >>
+endobj
+180 0 obj
+(Iterative linear solvers optional input functions)
+endobj
+181 0 obj
+<< /S /GoTo /D (subsubsection.4.5.6.5) >>
+endobj
+184 0 obj
+(Rootfinding optional input functions)
+endobj
+185 0 obj
+<< /S /GoTo /D (subsection.4.5.7) >>
+endobj
+188 0 obj
+(Interpolated output function)
+endobj
+189 0 obj
+<< /S /GoTo /D (subsection.4.5.8) >>
+endobj
+192 0 obj
+(Optional output functions)
+endobj
+193 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.1) >>
+endobj
+196 0 obj
+(Main solver optional output functions)
+endobj
+197 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.2) >>
+endobj
+200 0 obj
+(Rootfinding optional output functions)
+endobj
+201 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.3) >>
+endobj
+204 0 obj
+(Dense/band direct linear solvers optional output functions)
+endobj
+205 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.4) >>
+endobj
+208 0 obj
+(Diagonal linear solver optional output functions)
+endobj
+209 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.5) >>
+endobj
+212 0 obj
+(Sparse direct linear solvers optional output functions)
+endobj
+213 0 obj
+<< /S /GoTo /D (subsubsection.4.5.8.6) >>
+endobj
+216 0 obj
+(Iterative linear solvers optional output functions)
+endobj
+217 0 obj
+<< /S /GoTo /D (subsection.4.5.9) >>
+endobj
+220 0 obj
+(CVODES reinitialization function)
+endobj
+221 0 obj
+<< /S /GoTo /D (section.4.6) >>
+endobj
+224 0 obj
+(User-supplied functions)
+endobj
+225 0 obj
+<< /S /GoTo /D (subsection.4.6.1) >>
+endobj
+228 0 obj
+(ODE right-hand side)
+endobj
+229 0 obj
+<< /S /GoTo /D (subsection.4.6.2) >>
+endobj
+232 0 obj
+(Error message handler function)
+endobj
+233 0 obj
+<< /S /GoTo /D (subsection.4.6.3) >>
+endobj
+236 0 obj
+(Error weight function)
+endobj
+237 0 obj
+<< /S /GoTo /D (subsection.4.6.4) >>
+endobj
+240 0 obj
+(Rootfinding function)
+endobj
+241 0 obj
+<< /S /GoTo /D (subsection.4.6.5) >>
+endobj
+244 0 obj
+(Jacobian information \(direct method with dense Jacobian\))
+endobj
+245 0 obj
+<< /S /GoTo /D (subsection.4.6.6) >>
+endobj
+248 0 obj
+(Jacobian information \(direct method with banded Jacobian\))
+endobj
+249 0 obj
+<< /S /GoTo /D (subsection.4.6.7) >>
+endobj
+252 0 obj
+(Jacobian information \(direct method with sparse Jacobian\))
+endobj
+253 0 obj
+<< /S /GoTo /D (subsection.4.6.8) >>
+endobj
+256 0 obj
+(Jacobian information \(matrix-vector product\))
+endobj
+257 0 obj
+<< /S /GoTo /D (subsection.4.6.9) >>
+endobj
+260 0 obj
+(Preconditioning \(linear system solution\))
+endobj
+261 0 obj
+<< /S /GoTo /D (subsection.4.6.10) >>
+endobj
+264 0 obj
+(Preconditioning \(Jacobian data\))
+endobj
+265 0 obj
+<< /S /GoTo /D (section.4.7) >>
+endobj
+268 0 obj
+(Integration of pure quadrature equations)
+endobj
+269 0 obj
+<< /S /GoTo /D (subsection.4.7.1) >>
+endobj
+272 0 obj
+(Quadrature initialization and deallocation functions)
+endobj
+273 0 obj
+<< /S /GoTo /D (subsection.4.7.2) >>
+endobj
+276 0 obj
+(CVODES solver function)
+endobj
+277 0 obj
+<< /S /GoTo /D (subsection.4.7.3) >>
+endobj
+280 0 obj
+(Quadrature extraction functions)
+endobj
+281 0 obj
+<< /S /GoTo /D (subsection.4.7.4) >>
+endobj
+284 0 obj
+(Optional inputs for quadrature integration)
+endobj
+285 0 obj
+<< /S /GoTo /D (subsection.4.7.5) >>
+endobj
+288 0 obj
+(Optional outputs for quadrature integration)
+endobj
+289 0 obj
+<< /S /GoTo /D (subsection.4.7.6) >>
+endobj
+292 0 obj
+(User-supplied function for quadrature integration)
+endobj
+293 0 obj
+<< /S /GoTo /D (section.4.8) >>
+endobj
+296 0 obj
+(Preconditioner modules)
+endobj
+297 0 obj
+<< /S /GoTo /D (subsection.4.8.1) >>
+endobj
+300 0 obj
+(A serial banded preconditioner module)
+endobj
+301 0 obj
+<< /S /GoTo /D (subsection.4.8.2) >>
+endobj
+304 0 obj
+(A parallel band-block-diagonal preconditioner module)
+endobj
+305 0 obj
+<< /S /GoTo /D (chapter.5) >>
+endobj
+308 0 obj
+(Using CVODES for Forward Sensitivity Analysis)
+endobj
+309 0 obj
+<< /S /GoTo /D (section.5.1) >>
+endobj
+312 0 obj
+(A skeleton of the user's main program)
+endobj
+313 0 obj
+<< /S /GoTo /D (section.5.2) >>
+endobj
+316 0 obj
+(User-callable routines for forward sensitivity analysis)
+endobj
+317 0 obj
+<< /S /GoTo /D (subsection.5.2.1) >>
+endobj
+320 0 obj
+(Forward sensitivity initialization and deallocation functions)
+endobj
+321 0 obj
+<< /S /GoTo /D (subsection.5.2.2) >>
+endobj
+324 0 obj
+(Forward sensitivity tolerance specification functions)
+endobj
+325 0 obj
+<< /S /GoTo /D (subsection.5.2.3) >>
+endobj
+328 0 obj
+(CVODES solver function)
+endobj
+329 0 obj
+<< /S /GoTo /D (subsection.5.2.4) >>
+endobj
+332 0 obj
+(Forward sensitivity extraction functions)
+endobj
+333 0 obj
+<< /S /GoTo /D (subsection.5.2.5) >>
+endobj
+336 0 obj
+(Optional inputs for forward sensitivity analysis)
+endobj
+337 0 obj
+<< /S /GoTo /D (subsection.5.2.6) >>
+endobj
+340 0 obj
+(Optional outputs for forward sensitivity analysis)
+endobj
+341 0 obj
+<< /S /GoTo /D (section.5.3) >>
+endobj
+344 0 obj
+(User-supplied routines for forward sensitivity analysis)
+endobj
+345 0 obj
+<< /S /GoTo /D (subsection.5.3.1) >>
+endobj
+348 0 obj
+(Sensitivity equations right-hand side \(all at once\))
+endobj
+349 0 obj
+<< /S /GoTo /D (subsection.5.3.2) >>
+endobj
+352 0 obj
+(Sensitivity equations right-hand side \(one at a time\))
+endobj
+353 0 obj
+<< /S /GoTo /D (section.5.4) >>
+endobj
+356 0 obj
+(Integration of quadrature equations depending on forward sensitivities)
+endobj
+357 0 obj
+<< /S /GoTo /D (subsection.5.4.1) >>
+endobj
+360 0 obj
+(Sensitivity-dependent quadrature initialization and deallocation)
+endobj
+361 0 obj
+<< /S /GoTo /D (subsection.5.4.2) >>
+endobj
+364 0 obj
+(CVODES solver function)
+endobj
+365 0 obj
+<< /S /GoTo /D (subsection.5.4.3) >>
+endobj
+368 0 obj
+(Sensitivity-dependent quadrature extraction functions)
+endobj
+369 0 obj
+<< /S /GoTo /D (subsection.5.4.4) >>
+endobj
+372 0 obj
+(Optional inputs for sensitivity-dependent quadrature integration)
+endobj
+373 0 obj
+<< /S /GoTo /D (subsection.5.4.5) >>
+endobj
+376 0 obj
+(Optional outputs for sensitivity-dependent quadrature integration)
+endobj
+377 0 obj
+<< /S /GoTo /D (subsection.5.4.6) >>
+endobj
+380 0 obj
+(User-supplied function for sensitivity-dependent quadrature integration)
+endobj
+381 0 obj
+<< /S /GoTo /D (section.5.5) >>
+endobj
+384 0 obj
+(Note on using partial error control)
+endobj
+385 0 obj
+<< /S /GoTo /D (chapter.6) >>
+endobj
+388 0 obj
+(Using CVODES for Adjoint Sensitivity Analysis)
+endobj
+389 0 obj
+<< /S /GoTo /D (section.6.1) >>
+endobj
+392 0 obj
+(A skeleton of the user's main program)
+endobj
+393 0 obj
+<< /S /GoTo /D (section.6.2) >>
+endobj
+396 0 obj
+(User-callable functions for adjoint sensitivity analysis)
+endobj
+397 0 obj
+<< /S /GoTo /D (subsection.6.2.1) >>
+endobj
+400 0 obj
+(Adjoint sensitivity allocation and deallocation functions)
+endobj
+401 0 obj
+<< /S /GoTo /D (subsection.6.2.2) >>
+endobj
+404 0 obj
+(Forward integration function)
+endobj
+405 0 obj
+<< /S /GoTo /D (subsection.6.2.3) >>
+endobj
+408 0 obj
+(Backward problem initialization functions)
+endobj
+409 0 obj
+<< /S /GoTo /D (subsection.6.2.4) >>
+endobj
+412 0 obj
+(Tolerance specification functions for backward problem)
+endobj
+413 0 obj
+<< /S /GoTo /D (subsection.6.2.5) >>
+endobj
+416 0 obj
+(Linear solver initialization functions for backward problem)
+endobj
+417 0 obj
+<< /S /GoTo /D (subsection.6.2.6) >>
+endobj
+420 0 obj
+(Backward integration function)
+endobj
+421 0 obj
+<< /S /GoTo /D (subsection.6.2.7) >>
+endobj
+424 0 obj
+(Adjoint sensitivity optional input)
+endobj
+425 0 obj
+<< /S /GoTo /D (subsection.6.2.8) >>
+endobj
+428 0 obj
+(Optional input functions for the backward problem)
+endobj
+429 0 obj
+<< /S /GoTo /D (subsubsection.6.2.8.1) >>
+endobj
+432 0 obj
+(Main solver optional input functions)
+endobj
+433 0 obj
+<< /S /GoTo /D (subsubsection.6.2.8.2) >>
+endobj
+436 0 obj
+(Dense linear solver)
+endobj
+437 0 obj
+<< /S /GoTo /D (subsubsection.6.2.8.3) >>
+endobj
+440 0 obj
+(Band linear solver)
+endobj
+441 0 obj
+<< /S /GoTo /D (subsubsection.6.2.8.4) >>
+endobj
+444 0 obj
+(Sparse linear solvers)
+endobj
+445 0 obj
+<< /S /GoTo /D (subsubsection.6.2.8.5) >>
+endobj
+448 0 obj
+(SPILS linear solvers)
+endobj
+449 0 obj
+<< /S /GoTo /D (subsection.6.2.9) >>
+endobj
+452 0 obj
+(Optional output functions for the backward problem)
+endobj
+453 0 obj
+<< /S /GoTo /D (subsection.6.2.10) >>
+endobj
+456 0 obj
+(Backward integration of quadrature equations)
+endobj
+457 0 obj
+<< /S /GoTo /D (subsubsection.6.2.10.1) >>
+endobj
+460 0 obj
+(Backward quadrature initialization functions)
+endobj
+461 0 obj
+<< /S /GoTo /D (subsubsection.6.2.10.2) >>
+endobj
+464 0 obj
+(Backward quadrature extraction function)
+endobj
+465 0 obj
+<< /S /GoTo /D (subsubsection.6.2.10.3) >>
+endobj
+468 0 obj
+(Optional input/output functions for backward quadrature integration)
+endobj
+469 0 obj
+<< /S /GoTo /D (section.6.3) >>
+endobj
+472 0 obj
+(User-supplied functions for adjoint sensitivity analysis)
+endobj
+473 0 obj
+<< /S /GoTo /D (subsection.6.3.1) >>
+endobj
+476 0 obj
+(ODE right-hand side for the backward problem)
+endobj
+477 0 obj
+<< /S /GoTo /D (subsection.6.3.2) >>
+endobj
+480 0 obj
+(ODE right-hand side for the backward problem depending on the forward sensitivities)
+endobj
+481 0 obj
+<< /S /GoTo /D (subsection.6.3.3) >>
+endobj
+484 0 obj
+(Quadrature right-hand side for the backward problem)
+endobj
+485 0 obj
+<< /S /GoTo /D (subsection.6.3.4) >>
+endobj
+488 0 obj
+(Sensitivity-dependent quadrature right-hand side for the backward problem)
+endobj
+489 0 obj
+<< /S /GoTo /D (subsection.6.3.5) >>
+endobj
+492 0 obj
+(Jacobian information for the backward problem \(direct method with dense Jacobian\))
+endobj
+493 0 obj
+<< /S /GoTo /D (subsection.6.3.6) >>
+endobj
+496 0 obj
+(Jacobian information for the backward problem \(direct method with banded Jacobian\))
+endobj
+497 0 obj
+<< /S /GoTo /D (subsection.6.3.7) >>
+endobj
+500 0 obj
+(Jacobian information for the backward problem \(direct method with sparse Jacobian\))
+endobj
+501 0 obj
+<< /S /GoTo /D (subsection.6.3.8) >>
+endobj
+504 0 obj
+(Jacobian information for the backward problem \(matrix-vector product\))
+endobj
+505 0 obj
+<< /S /GoTo /D (subsection.6.3.9) >>
+endobj
+508 0 obj
+(Preconditioning for the backward problem \(linear system solution\))
+endobj
+509 0 obj
+<< /S /GoTo /D (subsection.6.3.10) >>
+endobj
+512 0 obj
+(Preconditioning for the backward problem \(Jacobian data\))
+endobj
+513 0 obj
+<< /S /GoTo /D (section.6.4) >>
+endobj
+516 0 obj
+(Using CVODES preconditioner modules for the backward problem)
+endobj
+517 0 obj
+<< /S /GoTo /D (subsection.6.4.1) >>
+endobj
+520 0 obj
+(Using the banded preconditioner CVBANDPRE)
+endobj
+521 0 obj
+<< /S /GoTo /D (subsection.6.4.2) >>
+endobj
+524 0 obj
+(Using the band-block-diagonal preconditioner CVBBDPRE)
+endobj
+525 0 obj
+<< /S /GoTo /D (subsubsection.6.4.2.1) >>
+endobj
+528 0 obj
+(Initialization of CVBBDPRE)
+endobj
+529 0 obj
+<< /S /GoTo /D (subsubsection.6.4.2.2) >>
+endobj
+532 0 obj
+(User-supplied functions for CVBBDPRE)
+endobj
+533 0 obj
+<< /S /GoTo /D (chapter.7) >>
+endobj
+536 0 obj
+(Description of the NVECTOR module)
+endobj
+537 0 obj
+<< /S /GoTo /D (section.7.1) >>
+endobj
+540 0 obj
+(The NVECTOR\137SERIAL implementation)
+endobj
+541 0 obj
+<< /S /GoTo /D (section.7.2) >>
+endobj
+544 0 obj
+(The NVECTOR\137PARALLEL implementation)
+endobj
+545 0 obj
+<< /S /GoTo /D (section.7.3) >>
+endobj
+548 0 obj
+(The NVECTOR\137OPENMP implementation)
+endobj
+549 0 obj
+<< /S /GoTo /D (section.7.4) >>
+endobj
+552 0 obj
+(The NVECTOR\137PTHREADS implementation)
+endobj
+553 0 obj
+<< /S /GoTo /D (section.7.5) >>
+endobj
+556 0 obj
+(The NVECTOR\137PARHYP implementation)
+endobj
+557 0 obj
+<< /S /GoTo /D (section.7.6) >>
+endobj
+560 0 obj
+(The NVECTOR\137PETSC implementation)
+endobj
+561 0 obj
+<< /S /GoTo /D (section.7.7) >>
+endobj
+564 0 obj
+(NVECTOR Examples)
+endobj
+565 0 obj
+<< /S /GoTo /D (section.7.8) >>
+endobj
+568 0 obj
+(NVECTOR functions used by CVODES)
+endobj
+569 0 obj
+<< /S /GoTo /D (chapter.8) >>
+endobj
+572 0 obj
+(Providing Alternate Linear Solver Modules)
+endobj
+573 0 obj
+<< /S /GoTo /D (section.8.1) >>
+endobj
+576 0 obj
+(Initialization function)
+endobj
+577 0 obj
+<< /S /GoTo /D (section.8.2) >>
+endobj
+580 0 obj
+(Setup function)
+endobj
+581 0 obj
+<< /S /GoTo /D (section.8.3) >>
+endobj
+584 0 obj
+(Solve function)
+endobj
+585 0 obj
+<< /S /GoTo /D (section.8.4) >>
+endobj
+588 0 obj
+(Memory deallocation function)
+endobj
+589 0 obj
+<< /S /GoTo /D (chapter.9) >>
+endobj
+592 0 obj
+(General Use Linear Solver Components in SUNDIALS)
+endobj
+593 0 obj
+<< /S /GoTo /D (section.9.1) >>
+endobj
+596 0 obj
+(The DLS modules: DENSE and BAND)
+endobj
+597 0 obj
+<< /S /GoTo /D (subsection.9.1.1) >>
+endobj
+600 0 obj
+(Type DlsMat)
+endobj
+601 0 obj
+<< /S /GoTo /D (subsection.9.1.2) >>
+endobj
+604 0 obj
+(Accessor macros for the DLS modules)
+endobj
+605 0 obj
+<< /S /GoTo /D (subsection.9.1.3) >>
+endobj
+608 0 obj
+(Functions in the DENSE module)
+endobj
+609 0 obj
+<< /S /GoTo /D (subsection.9.1.4) >>
+endobj
+612 0 obj
+(Functions in the BAND module)
+endobj
+613 0 obj
+<< /S /GoTo /D (section.9.2) >>
+endobj
+616 0 obj
+(The SLS module)
+endobj
+617 0 obj
+<< /S /GoTo /D (subsection.9.2.1) >>
+endobj
+620 0 obj
+(Type SlsMat)
+endobj
+621 0 obj
+<< /S /GoTo /D (subsection.9.2.2) >>
+endobj
+624 0 obj
+(Functions in the SLS module)
+endobj
+625 0 obj
+<< /S /GoTo /D (subsection.9.2.3) >>
+endobj
+628 0 obj
+(The KLU solver)
+endobj
+629 0 obj
+<< /S /GoTo /D (subsection.9.2.4) >>
+endobj
+632 0 obj
+(The SUPERLUMT solver)
+endobj
+633 0 obj
+<< /S /GoTo /D (section.9.3) >>
+endobj
+636 0 obj
+(The SPILS modules: SPGMR, SPFGMR, SPBCG, and SPTFQMR)
+endobj
+637 0 obj
+<< /S /GoTo /D (subsection.9.3.1) >>
+endobj
+640 0 obj
+(The SPGMR module)
+endobj
+641 0 obj
+<< /S /GoTo /D (subsection.9.3.2) >>
+endobj
+644 0 obj
+(The SPFGMR module)
+endobj
+645 0 obj
+<< /S /GoTo /D (subsection.9.3.3) >>
+endobj
+648 0 obj
+(The SPBCG module)
+endobj
+649 0 obj
+<< /S /GoTo /D (subsection.9.3.4) >>
+endobj
+652 0 obj
+(The SPTFQMR module)
+endobj
+653 0 obj
+<< /S /GoTo /D (appendix.A) >>
+endobj
+656 0 obj
+(SUNDIALS Package Installation Procedure)
+endobj
+657 0 obj
+<< /S /GoTo /D (section.A.1) >>
+endobj
+660 0 obj
+(CMake-based installation)
+endobj
+661 0 obj
+<< /S /GoTo /D (subsection.A.1.1) >>
+endobj
+664 0 obj
+(Configuring, building, and installing on Unix-like systems)
+endobj
+665 0 obj
+<< /S /GoTo /D (subsection.A.1.2) >>
+endobj
+668 0 obj
+(Configuration options \(Unix/Linux\))
+endobj
+669 0 obj
+<< /S /GoTo /D (subsection.A.1.3) >>
+endobj
+672 0 obj
+(Configuration examples)
+endobj
+673 0 obj
+<< /S /GoTo /D (subsection.A.1.4) >>
+endobj
+676 0 obj
+(Working with external Libraries)
+endobj
+677 0 obj
+<< /S /GoTo /D (section.A.2) >>
+endobj
+680 0 obj
+(Building and Running Examples)
+endobj
+681 0 obj
+<< /S /GoTo /D (section.A.3) >>
+endobj
+684 0 obj
+(Configuring, building, and installing on Windows)
+endobj
+685 0 obj
+<< /S /GoTo /D (section.A.4) >>
+endobj
+688 0 obj
+(Installed libraries and exported header files)
+endobj
+689 0 obj
+<< /S /GoTo /D (appendix.B) >>
+endobj
+692 0 obj
+(CVODES Constants)
+endobj
+693 0 obj
+<< /S /GoTo /D (section.B.1) >>
+endobj
+696 0 obj
+(CVODES input constants)
+endobj
+697 0 obj
+<< /S /GoTo /D (section.B.2) >>
+endobj
+700 0 obj
+(CVODES output constants)
+endobj
+701 0 obj
+<< /S /GoTo /D (section*.261) >>
+endobj
+704 0 obj
+(Bibliography)
+endobj
+705 0 obj
+<< /S /GoTo /D (section*.262) >>
+endobj
+708 0 obj
+(Index)
+endobj
+709 0 obj
+<< /S /GoTo /D [710 0 R  /Fit ] >>
+endobj
+713 0 obj <<
+/Length 459       
+/Filter /FlateDecode
+>>
+stream
+x�uSM��0��+|��z
�
�m��J+uÞ�=8��"H	I���f۠�B����{��X�g&ٻD�g}]&7oX� 5+�+P���B�\��f_Ӈ�2��*��3�LZ�Z�e�nl�.�=�C���H�f�hA �2rU�L����q/�V����(��p����1�@�G��DyM�Y��㩫���g��
+/�D
+3�2 5D5a9 
+I�p$�l���M�k1�6}�tu����v]
�{W�"bKnB�� �
�Z��B�Ad�1� ��rn�}�3���V
�G	���u�
Nc�=�
+X2o�z�s��Ua����쇶.R��a��
���
Qn�_׌C-����䵉�[}��;(����$e^E��$��Ltɛ2:"ɀAa��!%*��j�	u�
���aܚ���͇�]�|��e�GF~AoŢ��Xid� �
����ĕ����s����TӶ
+endstream
+endobj
+710 0 obj <<
+/Type /Page
+/Contents 713 0 R
+/Resources 712 0 R
+/MediaBox [0 0 612 792]
+/Parent 720 0 R
+>> endobj
+711 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./doc_logo_blue.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 721 0 R
+/BBox [0 0 142 147]
+/Resources <<
+/ProcSet [ /PDF ]
+/ExtGState <<
+/R7 722 0 R
+>>>>
+/Length 723 0 R
+/Filter /FlateDecode
+>>
+stream
+x���[�.�
��g��(�P�e8[8@���C�����c�s�iZ-�X,��ϧ��T��������ϯ���e�ۂ�'�;��Ӟ��q�,�ާ�^˼�o��R����2��5o8���׻~~|��^����������No�
����q��>1Y��zE9�ث�1��>fi�Y<6c?gsi��_�)��g�Vz��l:�9�W/���N+���6~M�<%p�Ƕ��s�N�Uvf�_>?F��XT^2.����l��
�Y��noW�6�
���(�<��m ���f����"RZ�Ҷ<�1J=��\z�Z���/����g�mO�m=Ơ�!�@s�g�s7.
��6��
���Y����. max�P	D�߇��A�X_��/"�N�!Ѐ"�]x� E��x�U���}�vF��!L<s\+�p�~
@�i��}�5�jgrU`�
q���t�v?zV`��v*���5���R�]��	��O6��Qk
��?�%Ai�6 EU�w�|	K�~kw��2%�ajNX���	�e=z�sLw�Vɏs�WV~�L�p 	ƞ�RR����5=0m
<ە���Q �s% o�b+	h�1�89 �)[�����ɭQ.�[���������9���N@�%��4��?�۝��u��˰_^��W\s�;�a�7yv���g�PB�>z�t��`�#�2���q.��:��k��9��
Jrtb�2���CӀ�W�FM�F��

M�	Ԉ'.٥'�o'��`:�_�!K7.
h�T�N�[��(�����ҧ4�Q�*L���j27
 pV�~���b��Y�l�.R��k���!,䜮�&*%�x�6�
+������Q�"
�|풇�
+=�[�+��P� /h at w�Z,f�T�"���h'�#�'y��� 9��^�Zk3���谮Rb��k��%
+P���p�*M�
��珟2V9���D�W�X��8�8W�b�$2���i����er6�H��ɽƋ ꦭ�:���
~w��Rh�
��>�A�J��y���$�OqB�jb�U.IB�$3.Uf���nIb���s[	ym׽d��-��
��-�)�w�#*���D��
�
�R�q�
�f)�Ӫ2a�$bMu	Y;�K7k�<�~���~
��7�v�
�E���E�8B�ϟB�0v��Ҡ�]�跏λ��lR��(��>e?*����G�@�5sm�C	x�w����Xw�k:�l�R���)J�)r�Lz��#i$�X �}�|R:T��j9��d~��r��(�\���T��K!̒_*�p	�t� hduk��~�
 v���d
MҒihA,o�A�_@��{"�� ����h��"���`���E��
�0X��:G��
j��R>�)M@�L�a��݁�
�����#��K\�6O�މ�$Fs�_zqd���
<�ʬ�#��G�h7wt�㪲����8���B�&Z
:YKrt��Xj���Q��ԒG�
f�
#�2' B	jM;���!-��tՋN�9%����
�Y
PVtԃ�
+�NPɂi�����
D���F
6H���SL���x�$�z^���'Cu�'�
�(K���i^`�2 ~D�dT�]�O|ݥ���:
�B����	�!���0ƜI�A<�ӊ�be���A0��n=�lj�힪�jg���|��h���oC��,G@���N���Y�"��C�B��z^?��
��с��$�@?�dLM<�X2��
�%�z��l
+e�=�^�Yk��Z�̺?Ö��:H�m]L��R��n��J�2!�&��d�'T0�
+��*�5����1��W�ŝ���U�a�͓v,]1�q:!و��m�U�s�o�
��F�,r�ZT��R��DEPHSj2�#S�����<�O�W�͐B��i���d��%�&mMO|�W߷|`d2��>`G�*�d�0�w�T��Ǵ&�$�
�5dӟ#�����AD�s�����x� �ZHRRP~~ JE�C=�v�[o��J at 4[Y%B��{Tn{3Ç��$�.uy8_��T归��2�4t�
I�bqQ
֚��b\��
+�ͬKa�l�
jh�O����� =X1l�vh��Ty���J�`�_|�+�Y�Q�@�q��y�Þ��D��B'�Q�4Z�dYc����FQ޳�
���P�e��о�8���i=e�%	��"�L��O$���G j>�����l���p�0�̓2eLÊ�K�pi|4R�FKh�A_��mdo:4 (
�>���5����xM5ŧ���f�f
+��6q�ֈ��6�p��'�8u��s��~�ƻ���R䮺
ת�A��h+��
+�����NU���i��/�8���ʡ��������BlY3	x�
+��FS�6 H8�zg$
;!��7̹�񕚄��|Ohm3WK��p�[q
E�_�d��	��=�#�T;��!�&���e?~�;Pg��|h�R.�*{Ǩ����c�Wu::3޵X�2��!�P٬���������Tvh𺦉u���<��rֻ���=7V2}8����
B�QG^���-�mjrUC���}���>sGJ2h�V����ˠ[wcx�ڟ�EW�j��+,jlё
�KZk3������w�wG��>O8�'/�gϙ³�ğ��kj�ZO�懥�s�D+[|�p�G��g��rzn
n}ɸ�ڣٮ�G"��}�uF뷵'O�d�&Ξ�S��8ꆭQ^뛝Y˫�C}�
˟l}wߒ�dM�M��D��is��+��R��t=�2�sg������a�Fw�<���3�J���vkz�
Cs��z~��׻�����
^i|o��5�:!<e;6�Y�Z�;5�4z���=��7��7j)���]wԆ<�Ўa�
뤛L#;�
����v�Z���+���m��c��1XN_�8���;Jj��I�ntt�G���#�v
��F#vֻ6O���io&*�
����I�U �&�eY�|3�,_sb�[�%ܾ�)����t�Z�2��lDK���~�SVO��/����?~JT%�/����
+endstream
+endobj
+721 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20160805102442-07'00')
+/ModDate (D:20160805102442-07'00')
+/Creator (0.43+devel)
+>>
+endobj
+722 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+723 0 obj
+2952
+endobj
+714 0 obj <<
+/D [710 0 R /XYZ 86.4 726.045 null]
+>> endobj
+715 0 obj <<
+/D [710 0 R /XYZ 86.4 701.138 null]
+>> endobj
+712 0 obj <<
+/Font << /F15 716 0 R /F16 717 0 R /F17 718 0 R /F35 719 0 R >>
+/XObject << /Im1 711 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+726 0 obj <<
+/Length 1166      
+/Filter /FlateDecode
+>>
+stream
+x�uVKs�6��W�H�D
ߤ�'�v:�>��)�&!	c
+� �U����Ą�H��>�} �긊V�E�������Xm�m���a�UXժ��a��}��<~}y������������T7
+��JB�Zm�8��k�Oʮ7Y�M��$UPg��@8f_�^�7�F6x�&�������V�;�����lO�:m����:)�ov4w����[r'��w�ܨ�ℓ3�61d�{<�
z~�i4%V.�,��sf�I��
���0��0�h����<��
;�B�{s;�Uΐ,���S�-;~��`�C��u���]��çYFgD���Q"�ME2!
��s�v,��)
�<�7:�+\jc�ύCJ)���P~k
T
Q��&�u
�J6^� ��Z觟�ᡕG���?*�����BI!���\%

���� Ģ��Ҡ� 
餆����� �XT���ZK:Y��H緹d����Le��E��#�`=�78`e�
���
Y&b"��Fٺ�,�
̡���H�1d.
U#k��9��nh>�α ��������͋ ڿ�`��ES�s>��-NS\��A��G�0XR��
d����i�Z�
�Y�L(�Y�ZѨ�yfD�,gX��I$+ͻ�1��_ΈƳ�8Ko��ga޼�3�7
D�#�[.Y���紌�UJ3G™�q
+�Td���N��yE�
�t��*"!u�+�̓�TP(��G�t35aM�bڂ
��
��
+��Ѵ
�
w!��Z-��Qo�������8�k�*D�u��_Wa�Va��1�w%/>�}�]�4�K[�6�`
� ��f���w,�X@���!1�
0,��$�
�FB���*�Ɏ����%�e�K��
+�]�8p�A�a&���A�f<�a���G)�8$@�f8B'�z%B"�I����@�!u�w^C�����/%�S�.p������V���i
VE~����t}oL[O�U�6���=�A7�oTn}����=�A������/!S��"��
]��Q���
"OZ��_��"����qf#���7o�J&�
�3��`��ɇ�<p�9�<>m�1��<�D��}RB���<9WUn�`\�a
� �{\�S�6\�>���V�L�Ja�o^�J�\p�;
��4%4Fު3
�R<O��� �:�
+endstream
+endobj
+725 0 obj <<
+/Type /Page
+/Contents 726 0 R
+/Resources 724 0 R
+/MediaBox [0 0 612 792]
+/Parent 720 0 R
+>> endobj
+727 0 obj <<
+/D [725 0 R /XYZ 86.4 726.045 null]
+>> endobj
+724 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+771 0 obj <<
+/Length 1524      
+/Filter /FlateDecode
+>>
+stream
+x��Mc�F����
+�,G'���n�ڊ/nk�����r����~!K�
\Ů-����=;;�λ��ċ�w{�=�
�:$��4�X��х�҈z)Ba�7*�3�M]�����6�m�#\�zy��8U�^��(��\q$�.	#~}���y���R�a��C^�nB�8~��Q��=0x��ZJ�Ms�^�b
���n�t('��a���a�߷F1��Q� (s����oj��l�I �n
B"�a7Z��!�/��E	��`̄�+"����?֍
�&�?�����?&M=�� dI�GA���C
h�?���p��y8
#��~��e��23���H�h�x}i�\5�Z�3���|Ѵ	p&�e�\9n�dL,�c�
YM
�n*-�Y+sn2��Pk�� 
yކO���ɗ���N
�c`��b[��0��XT�M����
Pg�QC������݈R��W*Qm�d�REg�;�
���9�lև�Nב&(b�J$�֨q�-���S�l�x� �Wa����O h F
a��
+r
��3��b/\|خ��'�]�:�^�F%�8��]�$�X�496���T\�Ϊc�~Ղlhx����ek$�D=&�����BWCg
�����g3�m]�� �Y�-S� 1:,.�A�
�z�s#�uUH5ZSB��0�>Q���I���v!t�\*I);�{L1.奴ʧ�0�s�Ў'�!�]��5����̯�_cD+�@�d���C�
���<���M�xeǾ����|8���]�������S��0P&_�bʛ� oAmAο^�6����V�	i�^�Ot�s�}��;]��
�K�MMr*�=γ�+�oND�j���
lm�ل�ϕ��l:��Tm5�z���;�u��0_�x���=:6���ZE(
o���3e(kB��U�)�\�j��Tr�n�7�݈#j���
k��J��r+DWՇͺ
*��I�����չ,�d����5��P�W���7U�QT���
����
+�SeR�ϠOv�;V衅����h�_�6q|��f����oX7��<i���\y+ң�<-��� �ɹ?7|'b|�7vX��S3���ߵ#|�����~���E���9hHr��ۼ�L�07��7OUR�t��Ė��I�w��ވ���E���Қ����S�̅�
+F����
+/N�D�*�ݵ�0M����=�
����w딸�����9���i��Z�W6%+�F��$G�e�x����︁:�
+ͪZ�Tw�����NK�
�g���*
j�څ���
�L��̋˛�;�o;�?�sI������1���pɥ��USO~�YL����6������1/K��'�f�1pt�'�����]$�ûH�>�"OU���e]
/��w^�L��!�7>wS��
���������Xz��v�W�K��װ��^�Or�2���d%x�o��G7��*'���1�
,-I�3��z\�
!3BJt�1̿K1yZ]Y]>z�(�"�����c6
��S�oG{��2��
+endstream
+endobj
+770 0 obj <<
+/Type /Page
+/Contents 771 0 R
+/Resources 769 0 R
+/MediaBox [0 0 612 792]
+/Parent 720 0 R
+/Annots [ 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R ]
+>> endobj
+730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [512.192 548.452 526.596 557.363]
+/Subtype /Link
+/A << /S /GoTo /D (section*.3) >>
+>> endobj
+731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [515.375 526.363 526.596 535.274]
+/Subtype /Link
+/A << /S /GoTo /D (section*.5) >>
+>> endobj
+732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [518.875 504.273 526.596 512.686]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.1) >>
+>> endobj
+733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 492.215 526.596 500.628]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.1) >>
+>> endobj
+734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 480.157 526.596 488.57]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.2) >>
+>> endobj
+735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 468.099 526.596 476.511]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.3) >>
+>> endobj
+736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 456.04 526.596 464.453]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.4) >>
+>> endobj
+737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 443.982 526.596 452.395]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.4.1) >>
+>> endobj
+738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 431.924 526.596 440.337]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.4.1.1) >>
+>> endobj
+739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 419.866 526.596 428.279]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.4.1.2) >>
+>> endobj
+740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 407.807 526.596 416.22]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.4.2) >>
+>> endobj
+741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [518.875 385.718 526.596 394.131]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 373.66 526.596 382.073]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 361.602 526.596 370.014]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 349.543 526.596 357.956]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 337.485 526.596 345.898]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.4) >>
+>> endobj
+746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 325.427 526.596 333.84]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.5) >>
+>> endobj
+747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 313.369 526.596 321.782]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.6) >>
+>> endobj
+748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 301.311 526.596 309.723]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.6.1) >>
+>> endobj
+749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 289.252 526.596 297.665]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.6.2) >>
+>> endobj
+750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 277.194 526.596 285.607]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.6.3) >>
+>> endobj
+751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 265.136 526.596 273.549]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.6.4) >>
+>> endobj
+752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 253.078 526.596 261.491]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.7) >>
+>> endobj
+753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 241.02 526.596 249.432]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.7.1) >>
+>> endobj
+754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 228.961 526.596 237.374]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.8) >>
+>> endobj
+755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 206.872 526.596 215.285]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.3) >>
+>> endobj
+756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 194.814 526.596 203.226]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 182.755 526.596 191.168]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 160.666 526.596 169.079]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 148.608 526.596 157.02]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.1) >>
+>> endobj
+760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 136.549 526.596 144.962]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.2) >>
+>> endobj
+761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 124.491 526.596 132.904]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 112.433 526.596 120.846]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 100.375 526.596 108.788]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.5) >>
+>> endobj
+764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 88.317 526.596 96.729]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 76.258 526.596 84.671]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 64.2 526.596 72.613]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+772 0 obj <<
+/D [770 0 R /XYZ 86.4 726.045 null]
+>> endobj
+774 0 obj <<
+/D [770 0 R /XYZ 86.4 571.538 null]
+>> endobj
+769 0 obj <<
+/Font << /F38 773 0 R /F36 728 0 R /F8 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+830 0 obj <<
+/Length 1780      
+/Filter /FlateDecode
+>>
+stream
+x��Ms�8����->@�
H:v7I����n��K�b+��6x��~������c;ƙ\�������?R���ğ����㯷o��y,����~ �`@'!
 ��|���^�S �����B�|�����!'Kߦ�:<�����,I<u
+
o��?���
���CΗ?�$UO�/��]L>� �%c��F�(� z>!��a�q��E
E;"^M������g&�J�#��\A7W<J;�z@҅!q~�D�
�I������1@'�k(p0�<8�<����(���E�g��B�<J5�
�l�
ڰ+V��L�}'�"dP�X��bdV|��Ҍm��7uI~��l���&�I`C�}��(z�{AP�j�1=i

+p���O�����_|�㹈��z��((�gR"ԍ��)��4���j�2\V��"��� Z�[Ld�A�ܳ�ٕ�>�
�F;�}�O��v��
��C?k��A}���]+q�*�2ذu��U���l}P ;��g`%${6�ZJ )% E�̍Xk��/E��ʛյ��2$(�)
!
���pj�7��G�[Fy0`��A^s�r�U�08Q���VY��"�"���H
��|a�z�%�
��B�1��q�bȇ��+㩛�W��(%_S�3���;��"d��{�B���Wt*

U���cթ21����>[;�؇��&

�4ML\�,�
LuT�ۓ�㫠S3$�5C���{�E�`�*���,��
�(��p�m�ތ����``
��VƇh�܉(.ǿ�I��Ɂ/~��%�����R�]���se'����O�
�ss��
ƒs(
PZ�/�x�iX�e�!k�� ���h >|��� �=�<?\m fyb��*5Dֳ\/�s$��ѥ��CFC"k�bSMV���
�Y��,���u���5���,އaV���t���գN��(�4"�
�h�>��A��S���Ri��J�$�&ש�<����|G���
՞�˕Zd��"����AK�=��$nN	����h���n�1E(Fec j����I��=~k̲e��7�Ì���h�?̇/uߌ�����N��f��I��]�D�T��'1`M,ؽ�8��T	�֬J��ʸ������*rEz�F� 
��h��Fwԥ[����_p��y�Þ}�c
YR�
Zɒ��A�T�;3�f�yi�ڷ�[B�["/`2j�������J�p҉K��k�ܻR��:�՝76HW�c\: [...]
eY���H	=K�G�� _����I����(��Wox�I>ߤ>����;�J�O��̷���!!�a���:~�=�[�'(RA��2�t��(��'4�j-������΅��DV� �
��ECV�4(�����L��b*���y^���**�}�QQT�**��'������a�8��R�*��T�����g�+�SMPeEΖ��ڌ�H���h�`4y��iό��V���L�]�&��Q
eӵc��YRٮi1j
+�:nK�̚)

|;�8`�,��Jj��m�A�{���C�@��<����X�X8�i�E����:��XȠ(p=�R�Jj�}y�S�ķ
.2D\�J\�4�lO�}u�m�6��];��
3s�/��(כ-��nFs�m';<(6���"#V��`
�]�����M��~U��6�J�6�����j'U*��LcTKc�r>���c�
�;ܗw�^'Q��qu�	w�{%~���^��� �2���m�h��R��)E��QA�x2Y��G)�hķƇ�n/��1z�
+endstream
+endobj
+829 0 obj <<
+/Type /Page
+/Contents 830 0 R
+/Resources 828 0 R
+/MediaBox [0 0 612 792]
+/Parent 720 0 R
+/Annots [ 768 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R ]
+>> endobj
+768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 678.103 526.596 686.515]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 666.026 526.596 674.439]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.1) >>
+>> endobj
+777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 653.949 526.596 662.362]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.2) >>
+>> endobj
+778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 641.872 526.596 650.285]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.3) >>
+>> endobj
+779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 629.795 526.596 638.208]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.4) >>
+>> endobj
+780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 617.719 526.596 626.131]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.5) >>
+>> endobj
+781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 605.642 526.596 614.055]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.7) >>
+>> endobj
+782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 593.565 526.596 601.978]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 581.488 526.596 589.901]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 569.411 526.596 577.824]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.2) >>
+>> endobj
+785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 557.335 526.596 565.747]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.3) >>
+>> endobj
+786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 545.258 526.596 553.671]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.4) >>
+>> endobj
+787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 533.181 526.596 541.594]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.5) >>
+>> endobj
+788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 521.104 526.596 529.517]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.6) >>
+>> endobj
+789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 509.027 526.596 517.44]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 496.951 526.596 505.363]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 484.874 526.596 493.287]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 472.797 526.596 481.21]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.2) >>
+>> endobj
+793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 460.72 526.596 469.133]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.3) >>
+>> endobj
+794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 448.643 526.596 457.056]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.4) >>
+>> endobj
+795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 436.567 526.596 444.979]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 424.49 526.596 432.903]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 412.413 526.596 420.826]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 400.336 526.596 408.749]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 388.259 526.596 396.672]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.9) >>
+>> endobj
+800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 376.183 526.596 384.595]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.10) >>
+>> endobj
+801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 364.106 526.596 372.519]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 352.029 526.596 360.442]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.1) >>
+>> endobj
+803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 339.952 526.596 348.365]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.2) >>
+>> endobj
+804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 327.875 526.596 336.288]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.3) >>
+>> endobj
+805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 315.799 526.596 324.211]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.4) >>
+>> endobj
+806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 303.722 526.596 312.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.5) >>
+>> endobj
+807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 291.645 526.596 300.058]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.6) >>
+>> endobj
+808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 279.568 526.596 287.981]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.8) >>
+>> endobj
+809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 267.491 526.596 275.904]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.8.1) >>
+>> endobj
+810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 255.415 526.596 263.827]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.8.2) >>
+>> endobj
+811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 233.294 526.596 241.707]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 221.217 526.596 229.63]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 209.14 526.596 217.553]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 197.064 526.596 205.476]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 184.987 526.596 193.4]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.2) >>
+>> endobj
+816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 172.91 526.596 181.323]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.3) >>
+>> endobj
+817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 160.833 526.596 169.246]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.4) >>
+>> endobj
+818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 148.756 526.596 157.169]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.5) >>
+>> endobj
+819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 136.68 526.596 145.092]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.6) >>
+>> endobj
+820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 124.603 526.596 133.016]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 112.526 526.596 120.939]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3.1) >>
+>> endobj
+822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 100.449 526.596 108.862]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3.2) >>
+>> endobj
+823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 88.372 526.596 96.785]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 76.296 526.596 84.708]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.1) >>
+>> endobj
+825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 64.219 526.596 72.632]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.2) >>
+>> endobj
+826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.3) >>
+>> endobj
+831 0 obj <<
+/D [829 0 R /XYZ 86.4 726.045 null]
+>> endobj
+828 0 obj <<
+/Font << /F8 729 0 R /F36 728 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+882 0 obj <<
+/Length 2128      
+/Filter /FlateDecode
+>>
+stream
+x��[Kw�6��W��Y�c��e
��h��vဓ�L��i��{e�ƀ��	I!�&���w����wn;~�Ño?O�G��ˎ�Ǽ3�� L=�d�+�!�Ɲ��G�.B�:�4�g���B�h6�"g�.��M��q�l�ѷ(�b�ܻ�p�ua���L�J��\c� 	�e�Sf��[�	��u���u����m��Ӈ����
=��p���J�
i�E�	\�=��
+V�@�L�K�Y$0�C(����5��[�^��
���a���$
+�V��ld��
+��X��� �����S�n���c�|�S��\��"�ݚ�<H�Ȑ�8a���3����	N�B�=�h�,Y	����|������Ǿ4��f at 4��$��U�`��7�׹������1�
��� � �4?
��ٽ},�~-��*V�8�֮�־�
��D�
�D96�_��5N�4�K|c>�;K�%��
ssD��y٧��|�J�!C�þ'g��-����Ip=	
��
m�z�����pG���.��@,
�j��<��QT;��f�L&q�G�ʧ3��ǡ}.J�W p�T�%:�60��
N"N�k�d\���VD:���:��6�,pb�Ob�<	F] �e at 3�;5�,ҡ3���DL��
~�6+O���&a�F�M��[�gF��_}D7lm��`�Q���j��D�0c/K����!˳��h6�ZēoY�M�E�Ī�d�@�G|g�4C4�?hlޫ��+�����ec$E��W� ���%
�9��1���U���[~~�^,2�*�,��^��
-�#�<)+pʲ2̅�cQl��-�-�-Fy�$�23
�X�
�����H	�W�P�
G���X
Ol_��M��=~�Q�IP�PR
�`
$��,���1���O�~��d9��O��L4�B�G�XS��5D=ܑ�M�e��k^) _7"Z%�y���F[�F���	�x6"�p�tDd�����NJ,.�>�P��r4 �+M�QU_�)���E�A�$ʞ����]�_Ҋ��lT��aW6������=*�R�^
pX�P[-PR�#/�k[W�z��l4��~V�ӂ
�{�š�n'��?ؐ�M�}䋳��*�n�2|ܻ"�\D�p�4�6��[�$�^��<��m��Z4GK��;cs�pil�>)���
7Z�i	7}Q�[5�g��X��Y�qӬ��j����<Ř��v>�PW�R
�.Ԟ���dv����svlm������֬r�~c��;�R[N�
+D��
�C ҭ�.���㲻jH�Xؼ��9��Q`M9ҎV:�/�/��
����d�_��3
%�(5�azg����ߣ�Όƶ��A��0��i!J(�ߤ��J)Mq;w���B)���fE}/#
+��E���ߛ'���5
Lh��e��/�QF�0�1�)�먒�Ԑ���,!��ڎ%b�%��6Y����@�%0�f�~o���+k܀�un�
�
-L��n�
7X;n��P����8S�=z4@�
M
��
+��*�_�i܏�|6x�e9J��i}��0̊�a6o����1��Z\{�����o
^���
��ռ_�bwZt9���,�1z	"��8�
���L,�'�4�y!���3��)P�e��qP`qz�%�'3aW��wӜѓp����ǯ

j�
�E7��MI�,��t��tur��	ձ$lo�7�4e�E�_��{����4�v�`�����DCu�
�H�
��i(?n��M�iC���G��ص\F���7P�3ܜ$���V7���j��b&�

�e�ѱo�<A�=�-
,�
�>
�$�[�H����r�;
^\�
�d	Μl��n�(�aq��nQ��
�[e���zã?���%���|"H'$G_�;cx���{D�����i\�T0�tG?U��R
��DB��A�����O�
t�C8�5+�7W�(�d��I���U��bd���8�f%}}���������0Y(�
+����f��q+��*��(0}����k�ˋ~�ˏ�z�p���*��V��5$��{��`
����/{�g�z�|��9.Z���V
g
��W
�Yʚg����#1CƣZi���#
!��Z�y�'9�����r;��Y3=�����	z���r���m�;�� ��:z
+endstream
+endobj
+881 0 obj <<
+/Type /Page
+/Contents 882 0 R
+/Resources 880 0 R
+/MediaBox [0 0 612 792]
+/Parent 720 0 R
+/Annots [ 827 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R ]
+>> endobj
+827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.4) >>
+>> endobj
+832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 678.05 526.596 686.463]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.5) >>
+>> endobj
+833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 665.921 526.596 674.334]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.6) >>
+>> endobj
+834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 653.793 526.596 662.205]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 631.585 526.596 639.998]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 619.456 526.596 627.869]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 607.327 526.596 615.74]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 595.198 526.596 603.611]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.1) >>
+>> endobj
+839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 583.069 526.596 591.482]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.2) >>
+>> endobj
+840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 570.94 526.596 579.353]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.3) >>
+>> endobj
+841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 558.812 526.596 567.224]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.4) >>
+>> endobj
+842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 546.683 526.596 555.095]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.5) >>
+>> endobj
+843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 534.554 526.596 542.967]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.6) >>
+>> endobj
+844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 522.425 526.596 530.838]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.7) >>
+>> endobj
+845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 510.296 526.596 518.709]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.8) >>
+>> endobj
+846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 498.167 526.596 506.58]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.8.1) >>
+>> endobj
+847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 486.038 526.596 494.451]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.8.2) >>
+>> endobj
+848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 473.909 526.596 482.322]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.8.3) >>
+>> endobj
+849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 461.78 526.596 470.193]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.8.4) >>
+>> endobj
+850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 449.651 526.596 458.064]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.8.5) >>
+>> endobj
+851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 437.522 526.596 445.935]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.9) >>
+>> endobj
+852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 425.393 526.596 433.806]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.10) >>
+>> endobj
+853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 413.264 526.596 421.677]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.10.1) >>
+>> endobj
+854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 401.135 526.596 409.548]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.10.2) >>
+>> endobj
+855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 389.007 526.596 397.419]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.10.3) >>
+>> endobj
+856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 376.878 526.596 385.29]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 364.749 526.596 373.162]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.1) >>
+>> endobj
+858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 340.665 526.596 349.077]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.2) >>
+>> endobj
+859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 328.536 526.596 336.949]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.3) >>
+>> endobj
+860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 316.407 526.596 324.82]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.4) >>
+>> endobj
+861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 292.323 526.596 300.735]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.5) >>
+>> endobj
+862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 268.239 526.596 276.651]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.6) >>
+>> endobj
+863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 244.154 526.596 252.567]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.7) >>
+>> endobj
+864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 232.025 526.596 240.438]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.8) >>
+>> endobj
+865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 219.897 526.596 228.309]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.9) >>
+>> endobj
+866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 207.768 526.596 216.181]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.10) >>
+>> endobj
+867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 195.639 526.596 204.052]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 183.51 526.596 191.923]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.1) >>
+>> endobj
+869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 171.381 526.596 179.794]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.2) >>
+>> endobj
+870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 159.252 526.596 167.665]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.4.2.1) >>
+>> endobj
+871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 147.123 526.596 155.536]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.4.2.2) >>
+>> endobj
+872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 124.916 526.596 133.328]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 112.787 526.596 121.2]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 100.658 526.596 109.071]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 88.529 526.596 96.942]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 76.4 526.596 84.813]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 64.271 526.596 72.684]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.5) >>
+>> endobj
+878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.6) >>
+>> endobj
+883 0 obj <<
+/D [881 0 R /XYZ 86.4 726.045 null]
+>> endobj
+880 0 obj <<
+/Font << /F8 729 0 R /F36 728 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+922 0 obj <<
+/Length 1449      
+/Filter /FlateDecode
+>>
+stream
+x��Z�w�8�_�#�3X�$����tW;]�33�@���"x ;v���!�����m���EBB0������X�Iͪ�
Y��

��op;���P�PZs8j �Ƶo��p�&�06.�t�����I5:ud,�)
3h��h�u�u�Ѩ��e��
���^����[
~Q-7��?;�}3�
���~L��.agU�� ���(
�(�=���1������E�|>�
`u��m��0i%�ǧ�Y�k��61 �\	0�˱m\&q�`�.��c�h
+U3?��̗]� �D�qx'���=5z1\�1��~�VS�\�-�`��ʂ��O-sYX)=8��,���'�/E�C�|�}`����
�;��+�~6�m�
{gK//�g)D L
����_)�8��$�G\STI��O�D��x(�|/
��a��n)���x@+-���{�yD4pw
Ĭ�9�IYp�Yg~�'^(��*�%m�(b���,g�8�#1��rR�	W'����#�X=�%0�?�$�፲���ܯN��0I�����Š#G�h,�o5/N��-�V��[bB�A��x�" kXû���W`�=/��u˩��dX�

+ԱB�9�l'����(�S+�NjdR�I��C��D	�.!j���������g9�!�
�`���P��������%M�; )����9{	iZ��hӬ��x��f
V��w�;�=��
~����m���_�
���VpIp:ne�u��=����M��%핎�.-�[���>��j��
+Lס
\]v�ݫ�pp�"h�'+�
V��|�\?�J��g��'�$.O�E�l��>��w�a��߽����PlA⁔
�8��+� ����j����%|
�� ���]nk�K6�[� ֦�
lckҼ�I�{��Z��
�[p]�%n��l�n��&�a�2߾�{��H���
jx�)z
����޴x4����?�'�#������v-�5O�.6�=�66�k/�7��E,��&���I!5��'��e��8�n!:�'A4Q��
• 
?�a��,��}QS������"焸�>��)�Bw_�`�JgM�M���Ra&��zLqx�e[�{�������#�$�`�	[�6v����7��;�
��뻱E��ίb?!NnKS�d7��9�P�w���K�1����&h��.)XSس���\����X
E���NԹ�-=�
+�&�z������7X� k,Q���(�k�c�?�"�s�R!�N�V��&D[��
+���Y
��IV�U�񽱯�g~���L�-��e�
�3|��3|��//��[Wb9���c����Qh��
�f�L�t�� �����G�cM�z�jZy�Vv<϶����7u�
���i�aOov#L�~�%Q�c
�p�O�h�?��⁕��Gc��Jw�W,۪	��A1���u�C��`engx�/�{<T
+endstream
+endobj
+921 0 obj <<
+/Type /Page
+/Contents 922 0 R
+/Resources 920 0 R
+/MediaBox [0 0 612 792]
+/Parent 720 0 R
+/Annots [ 879 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R ]
+>> endobj
+879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.7) >>
+>> endobj
+884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 678.224 526.596 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.8) >>
+>> endobj
+885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 656.306 526.596 664.719]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 644.351 526.596 652.764]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.1) >>
+>> endobj
+887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 632.396 526.596 640.809]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.2) >>
+>> endobj
+888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 620.441 526.596 628.854]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.3) >>
+>> endobj
+889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 608.486 526.596 616.899]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.4) >>
+>> endobj
+890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 586.568 526.596 594.981]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.9) >>
+>> endobj
+891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 574.613 526.596 583.026]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.1) >>
+>> endobj
+892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 562.657 526.596 571.07]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.1.1) >>
+>> endobj
+893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 550.702 526.596 559.115]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.1.2) >>
+>> endobj
+894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 538.747 526.596 547.16]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.1.3) >>
+>> endobj
+895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 526.792 526.596 535.205]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.1.4) >>
+>> endobj
+896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 514.837 526.596 523.25]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.2) >>
+>> endobj
+897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.2.1) >>
+>> endobj
+898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 490.926 526.596 499.339]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.2.2) >>
+>> endobj
+899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 478.971 526.596 487.384]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.2.3) >>
+>> endobj
+900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 467.016 526.596 475.429]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.2.4) >>
+>> endobj
+901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 455.061 526.596 463.474]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.3) >>
+>> endobj
+902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 443.106 526.596 451.519]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.3.1) >>
+>> endobj
+903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 431.151 526.596 439.564]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.3.2) >>
+>> endobj
+904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 419.195 526.596 427.608]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.3.3) >>
+>> endobj
+905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 407.24 526.596 415.653]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.3.4) >>
+>> endobj
+906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 385.322 526.596 393.735]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 373.367 526.596 381.78]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.1) >>
+>> endobj
+908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 361.412 526.596 369.825]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.1) >>
+>> endobj
+909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 349.457 526.596 357.87]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 337.502 526.596 345.915]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.3) >>
+>> endobj
+911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 325.547 526.596 333.96]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.4) >>
+>> endobj
+912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 313.591 526.596 322.004]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.2) >>
+>> endobj
+913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 301.636 526.596 310.049]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.3) >>
+>> endobj
+914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 289.681 526.596 298.094]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.4) >>
+>> endobj
+915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 267.763 526.596 276.176]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 255.808 526.596 264.221]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.1) >>
+>> endobj
+917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 243.853 526.596 252.266]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.2) >>
+>> endobj
+918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 221.935 526.596 230.348]
+/Subtype /Link
+/A << /S /GoTo /D (section*.261) >>
+>> endobj
+919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 200.017 526.596 208.43]
+/Subtype /Link
+/A << /S /GoTo /D (section*.262) >>
+>> endobj
+923 0 obj <<
+/D [921 0 R /XYZ 86.4 726.045 null]
+>> endobj
+920 0 obj <<
+/Font << /F8 729 0 R /F36 728 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+936 0 obj <<
+/Length 833       
+/Filter /FlateDecode
+>>
+stream
+x��W�n�0��+t����*RǴM�EF.i�D�De��� _Ҕd9�'u�\LR
�F�o�
�w�A�j���trvI��)�#o:�D�!(��4�������p�s7N���r��*�=�~v)����~DAL�F�H8 g���%� F�ı���<�2�H@(��2�+Y�8�"[���]�<�¯U9���m�L橝Pm�SI]t��U��*�jY�"ow�
Y�Y"s�w��5n�T*u��;_J&����{t��E^ivrs5��BA�O�;7���x��?f�!���+�̺�]5u�B�����w�% ��ء
+(�!�4�+P���t�0"f��R�z� &/�)�0�
ܭ�Cb��@2_g�q��DH�Sr��P��d�ESHQ�1V�dg:��$����EK��H@0(�Ä�P�d;�1�g� c�
+�l��ljh˘�@���
ʲ�d��+]뵮m
{l�4Zo����E/L�S�,Lb��q��)��2�R���唿96����0Az�!wy��[
�@ÿ��I��M�*nړ�*�j
?Ѳ��A�
7s݀q�o���<+s���@լV�Vm�ټ_"��x"���cLGǃ*! :	����4sb�����WU%��P�%��}h�P���ۋ/�뛎�8U١,��@�d?%|
+b��mslPs葽>s��ɀ�M%�[xg��qL�M��8J��i�{R%��i��e�ll�
ƌ�AY9w~H�04���nA8?�}bV�R�]J�ݽ��
��?�����aȟqQ9�mN�-L
+'�,�b0�ދ
�J11��
"`�.Ds��\k���b:�
�>��
+endstream
+endobj
+935 0 obj <<
+/Type /Page
+/Contents 936 0 R
+/Resources 934 0 R
+/MediaBox [0 0 612 792]
+/Parent 939 0 R
+/Annots [ 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R ]
+>> endobj
+924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 548.71 526.596 557.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.1) >>
+>> endobj
+925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.2) >>
+>> endobj
+926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 524.799 526.596 533.212]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.3) >>
+>> endobj
+927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.1) >>
+>> endobj
+928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 490.927 526.596 499.339]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 469.009 526.596 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.1) >>
+>> endobj
+930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 457.054 526.596 465.466]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 445.098 526.596 453.511]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.3) >>
+>> endobj
+932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 423.181 526.596 431.593]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.1) >>
+>> endobj
+933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 411.225 526.596 419.638]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.2) >>
+>> endobj
+937 0 obj <<
+/D [935 0 R /XYZ 86.4 726.045 null]
+>> endobj
+938 0 obj <<
+/D [935 0 R /XYZ 86.4 571.624 null]
+>> endobj
+6 0 obj <<
+/D [935 0 R /XYZ 86.4 571.624 null]
+>> endobj
+934 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+952 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+951 0 obj <<
+/Type /Page
+/Contents 952 0 R
+/Resources 950 0 R
+/MediaBox [0 0 612 792]
+/Parent 939 0 R
+>> endobj
+953 0 obj <<
+/D [951 0 R /XYZ 86.4 726.045 null]
+>> endobj
+950 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+963 0 obj <<
+/Length 696       
+/Filter /FlateDecode
+>>
+stream
+x�Ֆ�R�0��y
+-텅����:�̔�څj;��/�i�O_)�MI
�L�l,�>����u$r��������J@R`0�Cb�!
�Rp\mFT����W&k�o��Gg(�b�ΘA��b
E,}wqaDHpQ���3�+�:�H�����"�/���`���ۥ}'���]�+���2oL�-*�e��>��쯃��_n(mR��m��C|�2�vQ���]�Š8��XC)
���r��'���.f
��a>��o�����I`
����h%d��p�O�paJy@�@_�h�L,eܻ��n�2����#\��ep�?�^
_^�V�*�(�׬�)u(\�n�h۷���O�C�Gʲ�bgVIg��&�Ѽ,8��:\MO{�K�7f�y�sĐ< �����b�4��:-tnt�'�]c֬�׹�.]���߿�:�R_�tg��G9��>f>�͔K8��S;����e�AwO33��I5D�	���ƒ�KRA�ȶ�����AO�ji�6K�v�M�E�=
+�>�?�@7e^�S����=20���
�#��
rT�SX�m�
;�
+a��
+]�KPs�r‡�%!�AR��l������M�af���ML�ٺ��г��TQ{T��*�Ķ�����('
]��
�`��H�*b�n��0�����F�Z�D2��N�F�$��
+�0�Һ����s:����wG
+endstream
+endobj
+962 0 obj <<
+/Type /Page
+/Contents 963 0 R
+/Resources 961 0 R
+/MediaBox [0 0 612 792]
+/Parent 939 0 R
+/Annots [ 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R ]
+>> endobj
+954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (figure.2.1) >>
+>> endobj
+955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 514.837 526.596 523.25]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.1) >>
+>> endobj
+956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.2) >>
+>> endobj
+957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 480.964 526.596 489.377]
+/Subtype /Link
+/A << /S /GoTo /D (figure.9.1) >>
+>> endobj
+958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 469.009 526.596 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (figure.9.2) >>
+>> endobj
+959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 447.091 526.596 455.504]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.1) >>
+>> endobj
+960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 435.136 526.596 443.549]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.2) >>
+>> endobj
+964 0 obj <<
+/D [962 0 R /XYZ 86.4 726.045 null]
+>> endobj
+965 0 obj <<
+/D [962 0 R /XYZ 86.4 566.804 null]
+>> endobj
+10 0 obj <<
+/D [962 0 R /XYZ 86.4 566.804 null]
+>> endobj
+961 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F48 966 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+977 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+976 0 obj <<
+/Type /Page
+/Contents 977 0 R
+/Resources 975 0 R
+/MediaBox [0 0 612 792]
+/Parent 939 0 R
+>> endobj
+978 0 obj <<
+/D [976 0 R /XYZ 86.4 726.045 null]
+>> endobj
+975 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+993 0 obj <<
+/Length 3266      
+/Filter /FlateDecode
+>>
+stream
+xڍZI{�F��W�~�� h�����Nf�dbk���"�dG ��"Y��S[ 	˼��T�U��UC�j�
+V�_���ݫoީ|~�F��n��S?^�a��*]ݕ�߽��ԛv�QY��?���cb?˳��M���y�O�Z�^�60$��a�ۦ�qa�*�"�R7,�s\�m�Q�5��X6����WE#H�w�C�p��I����+�RJ�����'�H=���I�=���q�柮���(���n
����V�\��2��A�
�n{�P�VW
LjC?+F�oכ$-�O������KSW�6��
�%o����BeZS����a�o�|��:�M�(?P�j�~������v
���3�4��j����jڎ^��(��U6+��`ex7�1��m��v�t����,�
+?�F�����3���	�^�
,�H��n�8�J}�›�z�u�T
�$~�;B�,�D�E�dl�{��S����lG�c��n�q�$p �kTT߱�U��)�ϊ�AˉC��
0�M��5�q_g at -�}�d��ܨk]=w�D�m�I��
+�L�/�-H�$��Զ��(��ײ������]6R�z�F�vWr���:��͟;��I���'�x������2G�GTd�A���w�r�����E�f�-m��g��^I{1x�-��k�v�"�����-���q��tY�I�ox8ޑ���#wv�g�C���p~E�(<X�
r�%{ ���T��Aw2��Qa�̨�@�
+n��
+��5*.�N�C��m�
%.��	�N�
�<[3"u���IP�_�.�j,+ĕ�?���^�,�X�*N#�Fe��'}0�0��G����[�+��{�����o�a��a�H�Y��[Gn:ն�^
+�DS�8��8�;��
+x�����0���df��ɑ

+O�zj�.��P�F�
?r��Q+�D�#a�#���t�:�3���e��
ve
m3t�H�d�Sk�
�u�4����/��5��6�|����O�����_��]o�?�
FvpzX��Vq���غ��!��������q�~��6��6��=�/4,��u�!"s�J���\��or>[o�a�js�
�
��
� B�9@	�)��k,�Q���0EB�N��~e�mͶ_��|"@BJ.�(g�KSr����u������z����2\pl�cta	��-�v"�
 
���5{<Uvk��0ڛ8*
��g�耺�^y�Hm�sf��)uf@*����Y`�t
S��F>,���&��P7D�k:����#�ܲx�-�8
+�[�;�͵ �]Ҥ˫�|
d���o���nr�Ib(*a�f'-r��.�T3w�����L���UCX�u4y �-�v~�s�:�!#�rZ룡@k�����O���
��PB�^1��ڤ��=&80�\<.��
O�
+�N���/b�
=��1�3-�;K�|ȦbI�rh#�n���'�
+b
\���1�MF�
+B��k�ée��z}_���A�sE��㒲>k��yv-Bw̾%ډ�*��|�����F�n�*s摣y`
̓�
+���'�'K��4��`^�����
�=޲L$�?��O2�KE3���W6G��� h隡�J/�m:�\0��"���=�D������
ܪ�t�	@�Mg>�r�Q������'^J�s@�l��:O����� ��ua�v�<���$�UX|5cUYt

+*?��X
nvf�%��6�
+]�X���|ĸ���\�km*]��7<���e���s��)R��� g��[�ZxR^Q�6��1���O1K��"����e,��8�R<O" z���-��(X4ͩm�9Hn�9�9G�t����]�:�[-�.��L
����k�_�H���y��en!H�$O/ ͡ͷHz؈6QZp��eB���k�߸66�lk{�D
* j�AW��C�K�!���k�����n��	0{Z��t{��
[߷��#�a
��,y<z�ߎZFy�⦒�M�[ ��{�k���G����ֹ�Z�dfX
��zP�(�۠;���
�>�n~e��`�<q�ܓ9�c�W�.�<���7��|n�QrN��
2�޽��5�l+]
���r�c r�m���`��>��o/��xls��{��d��e�N��.�� �PI<%%���&	R��A��+qy̠�}��r|�h?Ѻ'�2C9��(	8z�!/����m|A�j.����c	d���(�?<`
� �"b���@�1�f�p�M��(�`P�z�����}�]��āG���Y��5�p4h�2���S�0[� 
+l�m�ϗ6�B�ؒ�k�|��;�z��[F+H�.ΞF�>G`��N#��J����)��
�{��΀�V�x�uh���Efq�96��XB�+�x��%g倿�n
��D�_�V �'q|�x���`�@K�J(���.6ί��관�
�3�Z
�1ϲ�%���Gq�s���z�7�Cg����z
�p��J��]�A�)C�zi6L
+F�L�<I��lZvӒ'���\{Z��N�jh�]F�
‘$q`�>W)ʽ�0�u66(�
Vz2i')�%���F��E�j��t�"p��2r(X��TS2�e�
�V�}��[� 

��
~�C�Q���	�`G��*��(�,1�l&�
+0��gC	q 6q��q��nr�M��Q�"�m !f���pf
+&- �=�E� �
~c[G��(P�n�wG��8��0�����d�R;�C�S�μX������uWA�# ��v�E�!��
)	�._�H��ƌDE��Yt
�7K/1��yrk����$��	�\r��o�Ʃ"���6�v�k���F|���۽��@�Ĥ�`dHL�C�
[R�WA$�Q�ֆ�h��\� �
O�g��
:�@�a
ߖVMP�5m�vn�)�ݦ�,$�]�
��P-���~z����E���˪
+�[?4V�?V�0!�
@�
�
W�R
*#:'O�3 ��\ݵ����b��ȇBz�Y;7O�b���������
+#�[�$�%�#~��t���/����
���x����C�a�����m�&�}K �e"Z�b��A�dhP����*���\���20Z*�)����
+��+�����AX�&���
r%z!�����㋞&:��so�z�
�Uo���#�v�[��٣m�z
lK��0��H��!}?��L���R2��h�:a$anc%eD;׵��<M+'Y�8
�/��
��xz�夸�K[����~Ɲ����y��ӱq�=
y��.����/%#.�gs�o�^�P���
+endstream
+endobj
+992 0 obj <<
+/Type /Page
+/Contents 993 0 R
+/Resources 991 0 R
+/MediaBox [0 0 612 792]
+/Parent 939 0 R
+/Annots [ 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R ]
+>> endobj
+979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [126.563 510.78 138.518 519.193]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SeHi:05) >>
+>> endobj
+980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [198.02 498.825 209.975 507.238]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HBGLSSW:05) >>
+>> endobj
+981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [288.009 376.972 294.983 385.385]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BBH:89) >>
+>> endobj
+982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [358.582 376.972 365.556 385.385]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Byr:92) >>
+>> endobj
+983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [330.741 341.106 342.696 349.519]
+/Subtype /Link
+/A << /S /GoTo /D (cite.RaHi:94) >>
+>> endobj
+984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [488.658 293.286 495.631 301.698]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [474.755 281.33 486.71 289.743]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CoHi:94) >>
+>> endobj
+986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [490.806 281.33 502.761 289.743]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CoHi:96) >>
+>> endobj
+987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [332.292 256.4 344.247 264.813]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SaSc:86) >>
+>> endobj
+988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [123.142 244.445 135.097 252.858]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Van:92) >>
+>> endobj
+989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [493.428 244.445 505.383 252.858]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Fre:93) >>
+>> endobj
+990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [414.553 64.097 421.527 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ByHi:99) >>
+>> endobj
+994 0 obj <<
+/D [992 0 R /XYZ 86.4 726.045 null]
+>> endobj
+14 0 obj <<
+/D [992 0 R /XYZ 86.4 701.138 null]
+>> endobj
+18 0 obj <<
+/D [992 0 R /XYZ 86.4 430.658 null]
+>> endobj
+991 0 obj <<
+/Font << /F38 773 0 R /F16 717 0 R /F8 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1009 0 obj <<
+/Length 3920      
+/Filter /FlateDecode
+>>
+stream
+xڥZKw����WpW�DD03x.�N�ĩ[;�$Y@�PB
 JV��{_3 HPVOW���>�{��n��������oL�*�"����n��a��t�F�>nW�����?�L���I`5�m�����^�w{�
U��������R0.Z)�Z�q���~�=Zm��U�"_=Ҹ�*6E��T�>\��*��NMO�"�8^��
+U��Y6�Z���x����	��Isw꪿^�E
<v�0�F*�p�%�ܰ;6t����k�O�<ܗ��22�?
��:
l�[��N�-�
�k�U�G�]Ҩ,L��
�_��v��<���za�8,r�
�])I��!�|
`�1��Ra��?ئ������dyP��z��Ɋ`S
��
+�W����"�
+�A����{��e��)e�p��m�`� ���k��6Y^�׳�C���[.-�B�Ɔ}Y�(Y��u��v|�Hn���^7�m]5w��T͏�
=_~z}l޴��q(QhP4��:g�V����,�Q�>Vu�u�?���V�K�������������53Y'p}��dؔu
�c���
+y�{#�{Q@:����௣��R��y<ή�x@�O�����(KE*��%f!ڮ��@ĸ�����<n��T�zK���TΊd\�o�#�(��͖
��3��@�9�3Q�%��dƁ�p3`K̲=��+�v ��u��8I�o�blm
^�S]ߌ2�#�vjv��`�^F{�;�r�{�,�6m�
�@l+˛�ؤ�:aWgk`
+��v�Q
+�.������He�1�x�)��)��=(>B���
�e�>�݋EX�S������%��0�����
F�J�D�4�憊��޺!u��G�Ol��Էr�ӽ*��⡔�����@y*�{����<��D*�}�#p����r��sb�2�2����
6-����4e��:tD��
+��d�h�]W�Cw�k,u��XK��������2�lXo��Ey�'6�H�����m���!*�|�
hGEf����	�@f&����ɂK~����9 �C�9�ew2������
�*v_
+
<�!�_a�h��wV�=�Ǔ
휁�ϟ���y+?�Ť畁��c�Mv˽�,'aC�뫻��ZE�I}34m��V��9���{�q���ڛ��O�S.���ViXD
��G� �jgW��0�c�P�E�Gf�
���ٳs�Zz�%���
��i�g���<0�S$^�攀�	}�&� -ü��^j�/X�}?]��-h_ɪ'
+dL�F�,e°$c�eS�A�HA�9��p$u���Pw>�����V��
�w��!��g�=0��j�$�YX��y9
Y�Kޤ�]E�3Q@����	 Q��'=Kʔ<��˜ �g#�^DZ�">�ҥs(RG�U��~A�T��x�P'a4=yL�3ٍC��B<tc�
+U�h=5 at P �����|s^e��
a
+�R��t���~�"�a���}�
M���
>�� j���
��n��)U�V
�١#���K���NXt�v�"�
�m��_u
(8KNT�kuA� N��ׂ
+�/Π����tH��ϖ�
m� �-��g���*L���E2���E�cn<3�c�$0��Q
��t}%���
+��D�r�!Q��
L����c�w�߮���x�yZNc
��T��=7�MM�~��l�����R��0��K� �e5�%~7D-N�� 
A)�D�]��С�Æ}�� Ya	l
��\`�b�l{0/�&��Pk��^��	���g}]6w��Ύ{��� ���K�$^�0vJf.��+��^�*�Ce��\.�QD��T]O���Mm�w�a����i�����\�Q� &�v��t�0�^X�\kD��)ت�ld+
�q8�2��C�A��`�:��
�U�3����u{4?�Vhy6��9��p�n"�E2Gh��4L����"�'v��(��ն������#����4��(�>5�ڈW�`�&���8'�;[�"�O]Pw
���i�F8A�0�f?
�D-����o��Boҹ���0���i�Q|�v�'�����R�!���,�1�-g_tFKe��i���l��5r��>s�(�S���_ZS5qz�ZʩNC!
\]����1_}�hp�(�'���
DXIR�H��0��Hqɛ���	-
��v\,��h�������
f�g½@a@���Ua����U
ȏ�NE z�^ש��L�X���wC�z�L:�!�~�P̰�@���]69o�Z�/{��e��v�MG6I�dz�v]`���'1c+�
���G3f�p�ݕ|A
/YE����˭/�c~U�iB�
+��Q��u
��G�m�@��zGf'�@%�͇�=J��56`���=�ZrJڀb�±障L�5t�8�Syq*�
�5H�(�,}�	�e;y�x6
M���Fh#���?��6��g���O�N�$J���|0x�VIcT$RJ
���P�0���t���
^��%.�&���	���M���x>��*�-�h��l�B����'�`Ӟ��:�<�I��o�炗d���C)ֆ����-��U�%�_2
i���a
9�b��I�R�j6��S�yFx��t�����^���?��|��i�c��Εy���H��9�ys�*aRd�TFT���v�DW����S
fi<�y�
��Y@!�\w��Ih�/��kSd�Q'(�$"5`${�����S�
1ZȢ�a��gJ����V1�v�M��-

��4Q���r�_�(Y���
+4.������-��`���
���if�u�]��$J��R\&�D^l��B�>���RzF�F6)v�c�'��φ�2.ú#�C�,=%e�M{t��%)�I��,l��
+qB�o���l��h�o��L�gIu��/=�M��L�_�8P�9�UkZ���gn�T�s�=
��x��(R��`�e�3��������q�X*�!����'�$0� F�&��]SB��
E#�xـ2I�t?�-�P:\�ñB�1�5i�{PC�\��]�4
�0�s
t��[�:�<�<k
L
���k[�ɥI ��+Hl�E�
+�e�u��}�!�g@�R�Y���P:�k�$�g��[��t #qO'�mN\�N�-���읤]��j3�sasKq��
+>�C@_=��ۮ��o��s�	Ϗ g~������?
+��r��o����A�n�{��� � ]
�(|�ĆdO#J~P��H��;���=�f���q����ğ"���/C��@,&=��}���O�$?3s��/
�<���JWc��ɤ���P��D�u4�Ȅ	�n|�D{�
� l�s�1�eI��I��J�3`Q���IWA���3���ɫ:f���tbHC�Շ�B���
�)��U/��H��2��qo�~��3D�-�
�ֳ�[�'
6F��{\L =u{Gy
(��:�=������#1<
��q��{wٳU��(�Y	��q��C�-���_~��2�~Ɵ5L�9�c��k�.ƫC�iVR���F�Cy[u�Kt�^�kW�=���™ɼ8��A��?8�$뺬�|��{qp���%b���
��B�T��'�B4�
+���i�/
2ǰm��Ţ�Iz��#3��9����2��h�=wO�ɵ�,����,
+�,���~�q�_{z��!��k�3�_�-e�0�����LPp�JЀj��5���7��:��Fs�R"z%.
��a#�b��3a����p�OqkIݥ����y��z��Kܟcn߅�/̓%/z�Z���2�L1�1d�S�Z����Pޔ��qΈ�fnN���K8eo#�d�Ξ.M& !����t���.����l��8��_�*��\�UbBc���rL�(\�x�5�,�eIJ���Z����d�ט
9��
7¤�8������={U��O�/P㿙��
+endstream
+endobj
+1008 0 obj <<
+/Type /Page
+/Contents 1009 0 R
+/Resources 1007 0 R
+/MediaBox [0 0 612 792]
+/Parent 939 0 R
+>> endobj
+1010 0 obj <<
+/D [1008 0 R /XYZ 86.4 726.045 null]
+>> endobj
+22 0 obj <<
+/D [1008 0 R /XYZ 86.4 422.556 null]
+>> endobj
+1012 0 obj <<
+/D [1008 0 R /XYZ 86.4 373.627 null]
+>> endobj
+1013 0 obj <<
+/D [1008 0 R /XYZ 86.4 86.776 null]
+>> endobj
+1007 0 obj <<
+/Font << /F36 728 0 R /F16 717 0 R /F8 729 0 R /F49 967 0 R /F6 1011 0 R /F38 773 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1016 0 obj <<
+/Length 4685      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[w�8�~ϯ𣜉��[�3{��8i�$��rzw��<�"e��"�$ǽ��
+�Aq��'� X@u��P
+NnO��7O^\?y�ZF')K#�\oN����X�,���:?��3qz&�xy�շE�/j�i�-5���S��;z�t*Ţh���/�ZE��B�����'��O~�a��۩B���d�}��'9��t0�&'�z��Dɔ	x�NVO><	�KO�+�R�x
�ʻ]�v�+
y�랞���t*X&�7��l�g��E�P�
�
��˾+rz�/�;z��LgW�eVѳ��=C{3}����럯�e��Y�}U�ӳ��eG=���Q����8gihxz�5)Y���@�
H�Ȩ�q�۬o����� 
^�^RǦi�����o��~�4�
��:7��x�M�5=�Ǣ#�� L�p
{!M�ǎ�J*�TbG2��	
���L���
|��eW<����z���E��%�7��eݴ���l����u���z�����L^8�4a<�C�D��b.fq�ڑ���`لc��>/j��Ƅ�aƫ��7e��
+&iG�V�4D1Id�o����_�M��Q���;�9إ��z���ȶm�;��Y� ���-����yv(e���d1�-��-%fu��*��l�
+��D8#��`"����-�ߌ!78L�'4�$.M�Y�FJw�S��
}P�H�ᡬA����ܚ�h?���j�ڕ}*�
����~B���6�ׅg��.�0q�������i�
+
��;�"�x���l��{��$/ �j$y#[��y�&P0�t��m�`�D��;����DuyƟm��V�8
L̃��@
N��C�;�
�W致��՚,&g#ı��׿�W�nǜ���6�n��^��Hm"Xc'�����v�
��\蕷�EK6M���0��`u�νz�����s���W��T�D������ƪ٢򇉳 �H;k` 6ܓi�#ScL�
A�6m^�oqg
�r�5?!K-��!n��'%A�]�ٷn����$)a�@���e��JM-�f_�G���=�?�L���}�.j<e2�<�$A:?(�ei�Nj�H#
+
�A�Ki�H
Rg
+aLi�
M�LC�|C�����l25��������@�-Q8kT���V
FlO9|c���
l�]�Oٺ�)����G�ߚx]��!�������`�B9جWU�*�W�
��u�b�3!1���W�`E1��d�
���	�c_�(�H5�l�i���ԁgA�^���bi�=���]U9�H8
"9�*����i�d���x�xv;�i}��,�	�O�>=�e�0��~j�OϦ�

�x��A�ޛL;���x�9����*��f�u���-�`��ۊ;\;�
+��sR\
����p�j,\���Y��q��pw�����<����^1\)����I�+�
f��)f�����L:V�"��:�O$%Asn���y'N#&��.�~$b:����pR�C�d�aR���t:i�����3�<�:b��0��g:_-۲����'C���i��LL
!�a�P�@NaRk���6,��f_�.q
+
&��6���눋` ��;H��k4�Ɗ@�>����DĒ"�h���¯
0Z������fk�]� �O�1į�cDF�f�0�����z���r)&L�)z��ý�fЇ��P����mw�O�c�=i:({w��m�
�����B��ߢ���êU��
!��Z��Y!BO��.�.JC>�5�= 
+>�4ʅ�fB�F�v�
���(�H40)�M#@��u�w����p��������&�@�C�0R`c}�5
��!F��b�G��1������6GC��]�"aT\ f�i�}6�Ǧz�
o;�k�����&
©�xBPp/�S��#zM]��/uZ��>�
�
	\�d���z��}өVS"iB:���S�
!�)�[V�d��
�(bI�x{ڷ��Ɖ��a��$@�!�21�OI(Y��=_� B�F��y��q`� �px�sh��+�t�u"
����$������Y��2��q�O�j6�M������ҝ��.G�!�Z���36UC�K?�8��L�� �EN�w��
'��g
2!
H" _�p�k��6� "Πs��ڗ�#��pH~�0v���Ber|�TXN7ʜ��� 3 
�Tg[�$kJ��ւ��u���3
+��;�r�d���l�3�&IH�rL��[���L;�]̌��%|��������02�:L�n�?�ƙ�Sr��>\�����W˛�#,G���j�{��iz����ݷ/�}s_�
I�X�ǩk�
Q�B>���i Ɵ&)�tf0��U�n{��L�����W��*�ȉ"���y2^���d�2�����Q����W�#���D$�++|�W�'�\펈�|A�(�`��!S�K�
�:}�fDۢ3
t=��w�J�ŵ�ă�d��@aL�r�o��"��8�F���Հ�x|�IH��$��'��l\�A�|���_N��;_�

��@��FwVݏ8��r
+�LH8֐%A�M9�
+N
IE܅5�9x��L�b�t2�k��S�fC��r����s���B����������xA����xlM?x�$`B��?�H(&7�.pWek�D/t>�)���T*���dq�'�'7dwekC�����1I���ջ��0K��"o�g��b�
S����ऌuq���+�R�΢�g�x�CU�� !G5u�6�5���ë��D�
�,�/��۶��3̤TUQ��u��@Є@!�c��ʶ�������O�{��P
w���o�{cÅw��ș�g^�M_��+&�;e[q��
���D�����,�קHJ)�1x~	+�
+̎E�I(��R쿧��
囃�;ʸ�`��
W2{%�������|�ju�E�y}F
�2f�H��AY�4R3-���S͉r������u_�~w޵�C��Q��\�.���=�p�����V�]@o�q������ozs�_��[,�ߔu׃
e���>ČG�*����5�mc����}#��"��3W��^��~��1�o	$�D��F��,S�vC�ga��ֽ�C�-��
(�����	�4W� ��f몆B�8$&���M

|*�
6"e�j�EW�֦8g�m��+���
h��)[����HY�tu��lYW�pzkQא�oMiFd�Phҙ����EFZ�c�/2�&%Y6]�E�[���7�G��4!<����
���]���R����N��I�_/	��Td
�)�b	�d�'x� 
�̪�T٭��aV���f��l�����
��;E�
79l� �����܁z/NR�t#��	1���:����G9�:U����@�)�Q�BB�����4#�� [...]
+݊k�騣4{��M��"���hM�Os
�m�^��tg�p�G�y K#_�]���]j��C}�GBgA����LӒ:%Xw��Z?�WÔYk�ԡ��u�(���n�B����L�.����_�<x����eE�1j�F��)�(Q�{2jڡ$����$e�r��s������}׹,
��z[
gd^D��n�b<��W@KB
���٘8Q_+�X��yb��6mN��,P�P=�g��� X&Yr]� �����������Dl�J
+|r�t�S�V`q�+| ���FD������}����:�G{�{eK���_p�_��h��wM�ˇ�W%gHB�HϪ$*/
;� �Foq�1��xѠ�0�L�`�
��n
n�e�-`�)d
]��޶�
 �5V{�q���ֺv�beW�
��hj�Q��R �>�9G>��[RN���[��AJ�-.�D�5��

���b
+�;z��j��Fxu�Ў}���i2;�Bv�Y�g�؛0�o�o�
+�Ɠ���������	,r���YF�NV4���FU�95h�UX�

��ݤ��S��-2�[��G�6zs�b��i�#o�Kwl
@�&efWAU7c
h�SkiN/}&k���]6>�g�o�����c���x�m�#UG
��Ef�9�a	�K1��&挚��D��j�	�而�
+a�ũ6�u��?*s��`��3R
�ۢ߷�?��/"C��4��ip�����(�wX"I�wXD���z�B��#d#R]ق}��J?�A��F\P�)������R���J3��!h�I��c2�M�@(#f����̞	�n3���9Ʉ
���-EsM��S��}�F��
7 V9U�\���o��f*��cP��)��(�0�y�
-C�R��a�36��ғA��4��"1��cO	�H� 4��r��~[5~4:��D,N =AP��!=e*����8���e��VŦ����MH��q��d,�u���[�W(���t��vw�ƈs"��!
"�,U�{{|w�k�
Z��Hv}�B-�-���:dm���N���u&*��S5�R�F
+AF9ݢͧ�umo���V�d>�['����N�ж��)��17�ض�x��b�v�+�����$
+5��B�
,��0�Ro���Je#TWI[�qu���Q��ψ�*�x�7��W/=�BУ�
fM@ J
��n�Bq��A,�yEO�X(�����ˢ��Q
�,�bVɤ���0P,�Ň�N���6�0G��0-��H�ɴo/^LSyE����e�(ƕ�&	k���`��)�]��~FH+��o��v��ƒ9
+endstream
+endobj
+1015 0 obj <<
+/Type /Page
+/Contents 1016 0 R
+/Resources 1014 0 R
+/MediaBox [0 0 612 792]
+/Parent 1020 0 R
+>> endobj
+1017 0 obj <<
+/D [1015 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1018 0 obj <<
+/D [1015 0 R /XYZ 86.4 249.374 null]
+>> endobj
+1014 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F38 773 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1026 0 obj <<
+/Length 3956      
+/Filter /FlateDecode
+>>
+stream
+xڭɒ���>_��\8U"�[�J�d[*��X�����H�@��2����m� H�ȉ}!{��۷��گ��뫗7W�_�x�yY
ƫ��U{z����`uS�~Y���nޮT{���)Z|S_�pݷ����aחM������|�9Xh���x�;^��*`����T�����q�U�0�V�~��gإ� �(
+
zqxA3&�
�zo:�#��e��w��">�_����&�<�4?{s
�k�!���u�6כ`}��t}k�~h	2�ZS�)x��#���� �f���Zln������o~~�+���V�(�		�>��}M)��C9ba����z��h���9������D䗰�6HN���6y�㮩���<?=0-��<���3��A���
+�_V�������S�Cx�x~��-�m�O
Sw���-���t�����
��#���R��	Ҍ��nN"�XZJ�����ͮ�}��CIx�`Q�f7>G�S�����ڦ��z�[$�b�J5<96u�7-1����qA�
�^�
�j����.`�#��eZY�"�҄0	�"���Ņ��
���
+CA��E9�W|��wG%�e��8�\R+���ƃ��Ϋ��Dᄩ^�@�w&<��-ik�'ڊ�m
ye�ӉU��Q���J��:y�����h��X�S
)
C5�ݹ:o����l�h"=p�\�2ּ��s�,h"�M "P��:���
+L.&o³$Fy�0Aa����9S`2x�.cjKO#ԕGB������i��0ZU$���Jy"������{�H8��.��t���k
T����(��.L[=��#q�!;K��=r'�U,x�3��ؽ<��I�
b
QV�Y#@o�ܙv��iʺ�
?Y�A
��
M�
ı��]s<
=� S�}��r�i
#'aP�]G�X�6��	�>��oŝ�	�D�w.n���ӏ�Hs^L$%����؇�(n�'���G9Ҁ1V
�S�[)��yoHp:�<g��^T�Eg�%�=b�V%�H؟X�p鄞��;���X1�ʢ���E���B�pY
��#��Ԛ�J�W��M��C=�+%V�����c#���O�x<�|dC��3q@$N���
px��	�	����ۡlZ�k
E8Sx �?6Gy
1��}���ox�C�dx����!>6�����l���M���)��'��5�_U��/�x�/��g>&�ǎO��Q4��%.��Dz*�a�̨�,�*���X��]��#�`����n�W�q|jI/K$���M;sј�zB&Er��lszďM��1H� ��t�
$����<���2�t��ҝ�r��g6t�EyF��h:�&S�
���0��̹_ }���݂�c/	C��Q��^� .~<
���c.�"���?�+��p-�:͖OX���`T�}����eA1D'~rW�=Q�� m3�s�� �$��|4
$0(�G8΃�B��dsM�|���^��ۡ���L��Y�asĿ��9
�I׷&?V�0�IBg
f:���ċu�R����v�
�KJ�FHӚ�[2�w��7�Z�гY���hu�7�wI"��
g\�}eM�
+ٟԎR���Bɨ
��H�8�e�ZS�dlvg�bub�DW��>�1
1�i�g:����\ut����	8�0
���u�~A�QB[2�M�h�YaCC�J�aq] �Z�4<�lZ�:��d`�u�g�I�V�����?�v��r�.xm����^g�����e!�O@�6����P���E2�^̺|�$�g��q�t�$�#
"%�ٿm˜Br�
�E
��)O|�T�)�T�mkYd�	�
p*�}pm��Ʀ+�LiA,F�
���0���s�|Ȯc�:� _�.I��ө�޻fhw�� �ޫ3�5z�t�zQ���_���ͮv/]�������0��(/����ʼnh���px&�6�Kb�U�r���*\���(�LƧX����� �ڑ!�v��
��nw�%2|�$l3��^��X�? ��
�̓�
K�w%y;� ���<�O:
�F\Z�<C�o�{���)›�j�>{f���)�"��: ���iĞ��o~��?vwMa�ӯw��B�
��Q%X��Ҋ;����e�ޱB^��)�$a�(�F�|�Jù;��CY��=t�9b�
K拫�
F:��Q0���w�
缴Z�P�U?
sj��Μr�"�^7l%jafٴ��i�
÷	�Y���^�
k�\.D����I2H<\�j-�պ���
::-�
w�����0�X�U��3F ׳�r�g�;�;��b�
+�)P|�/�s%M虣�۟A!_-�Byi�X��;'�#vg7��/�N-U�A�v�������>�$U4v����Sz\�<�H�$��
/������x�6�(i|buõ큶\\�]/2Ki�
�td��}�VPB u*
<��'�4�͓�]e�y�$� 
+Bu"��_?~x��A�Μ�J�:�4����Y��1e�ʸ�P
�֧eE�B�P0W6����
�I
[��^�� ���R'^���B�\�7�T�j�g
_�8� a`��(�VI�}��p�@��u*�O0r[A�
+�ԋC5gּL� �m�z~sgjf���S\�a���f�c���̻��ReAv�p[x��
rfoӨ�VQd�Y ��J�Y_�O
�r
+h�4��s�i"�;8�]
ϼH�quI3|Ќ`1e�۠�X�O
���Y�gl�*���@�Lx�d\�R/+�K�$
|�
��/ J+/��H�}�#�,���̃��b������Ҝ���#��x�~�3Ft���
U�J���辧cg�Džt;�:�_}?\ ����K�S�
2��]�Qᢧ�8��!��4���DA4"�%�|�

�,�Y��o���ikj�Ҝ2$�c������ø<-�7{Y�
M��\�
+_�$�7^jw{i�H�����7^}MǞ/���:CM}��Wl.�4����_�� ��ӱ�yfy��r���$��DP[�
��sA��2p
*>�y¾�
+&����%㴔e.i`�\2N��kg+�
+K�����2��a��*��G;k|	�_�\V ��q�� �
��ȵ&얮d�iu��O���o�h�&�U�g}��]w����͆���1�HB�R{
����v���M�٬�U�!Gɺ�V&W2�P�/�
��p��?�%n�j�|�������][��Z\_����Y}���|�j�-�b�ם2�q�9}����$��/�ɗjY������+ڿA�h�ZT�����u�Y��~�ܼ+��ȝ�x�/j�E�����Q6O�_:v�ǯ"�ٮ�3O�)�d�M�|zE��+�ӈ9��
/-{H�;�K�/���^b���������|WH��Nh,�8�Ԙ
��1�R�%tD��]ߋ�М�A�†�7g7^�����Q}�3�̤��*�9
v/�=��
�Xe�NUiϾ�wͶ��
U�_L0N
䶶��.�<`�����C97�Bx��ǯv_ps����
;G�οN��c����B�"�K{iA^r�vwhMaz�P[O:2��
+��]^ot�l������
���'�}�q��D $xq���Dw��x{�β�[Yj��ػ����QN�]^/|)6����C��T|�:mw�J�9�c2�����h�Rہ����
tmk�ހ�r�h����?�����'
��e��/~�KXtq�"������
�G�m�Ÿ��K��緫O�� ����qn/�``�CWn��}��R_������]O��]6�v\tʞ��*
\/5�'�ԄCw�
?��nz��v_�J�"����S�@tA��Î?�z�$ǒ2
+Gӵf;/f�
��`)O���%6��/��{:����:;��|
�?�Z�^�j6��p���8麍����|��_kQ�W�IC����>��������4�� ���u�g
+endstream
+endobj
+1025 0 obj <<
+/Type /Page
+/Contents 1026 0 R
+/Resources 1024 0 R
+/MediaBox [0 0 612 792]
+/Parent 1020 0 R
+/Annots [ 1021 0 R 1022 0 R ]
+>> endobj
+1021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 389.683 519.955 401.638]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+1022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.267 146.977 347.24 158.932]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+1027 0 obj <<
+/D [1025 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1028 0 obj <<
+/D [1025 0 R /XYZ 86.4 681.933 null]
+>> endobj
+1029 0 obj <<
+/D [1025 0 R /XYZ 86.4 403.362 null]
+>> endobj
+1031 0 obj <<
+/D [1025 0 R /XYZ 86.4 184.566 null]
+>> endobj
+1024 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F49 967 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1055 0 obj <<
+/Length 3115      
+/Filter /FlateDecode
+>>
+stream
+xڥ�r�F������`,���,v955�D����Ch�H@�i �����BB�&>�����

v�]��p������q�+�"�����.O}�ˢ�O�p�P�>y����y��ltU��(o8�=���X

ƺ2�wQ�ʼn��������7܄�V�
�݉��tW�n>��*X�a�q��i�i��`���o~�	��旨�E�Yʨ�7Uc�4��5<0�πT�uv0�ƶ"�a�t�����F9׏{؞{UmoC��r�l��F^������?h{0����Z"��O��'��lF`m\�S�E���|��-�Կ�K��{��N0>uLY�Uf�u��6t��.������/a̻�h2mU&��D�AD��ݧ�8��w��L��>#
�;�1��`��*
����1(K�N�}����Ʌ�a�'��vKϞ�苕�
{��u���g�l�'b'  $<+�n�Pw-o~1�m���!$��q]����'r
�6��@�"���65���+�������<u�Icc6��o�Q����џ1S�>Ey1Ye�	]�>�R��T�����q��9g
��5�`�޽y‹�Ս�=3�_�d��+z3
�1
+�;�fw�n�� '��^V�@47fw'\��-�>p�t8
=��
�i
���}��r+��i�!k���|njw��F at T�3�p��>@EW@��@�G�
�=�"�/��~�6]U��LE޻���
_yo��$#2(�5}�0� z>V��S�)��%��@�k�ods_vb�����������������q�3~H�=�i���FR�
�*=h6)�d����@���:�I�%$�D�@��n*
�_��������sK��鬵�Ng���,���Ey'���(;TD�ۏ��5
/�Wx<���pxrs8!7��N�;�z�E��2a >'�|η�t[1&|�n�3]w�
6PY�XN*�I+���t�@���P%�XHGM€�jy��1��8�C��W�
g7�
���^JS�Nf�:���
�8|�~����
���0?�%���E�܏�����y��1�� � )P8�9ہ�~ �cc[Y�Mۃ�yC ���׬'Ϯ��$`���}M^760�
 Se�I�_8��
�v�ǩ�+eϝz�|�^�s���B/nl�	�YL�x�t��t+�;��y�����U{pk� ]Ѭ-M�芒��ؾ��=�a{����D���<���C�:��`��
��Cn���! �E�R7���eƳ�J̬K ���kuU�����ر_�\G��h�	�Z&�iĖ	Ϸ@/C2���S�_Ā6d?i̷���}����/����ú_&���P�$фuex�
�T�ѵ1"`v�	I�e,�M��<0�$�u�'�k�8�<( R�7�F`^���{�h!����Μ�y�r(�D�m��
 N�	<�$����P�� �Iח�Kb:]4�`g1O�%݅�e�<���
����~����S�����`��YN
�ig�i#�45(�V���q��: ���)��
�(J�ĥ))�
.��4��^ ��-�+^�D6�
�%i~��
+��fS�$9�!�|mڹQ�BU������5[#Ak2�c#_)|�0���
+gm%��>g�[0']��Ѐ
�D��c�SBԒx��i���
�i9Բ@�:&�
�� �b��Ot����U��-�D)��t��ݛ
����D"�.~��<���t�Ae
���
\��Qu��Z�D �Ǩ���Vv
�]�L��_ŚQl$A��
��9+:d
Y�2�u@�*�g��lf-������褲k?���x7�3>���ֈ.qO3��C.����#b�9�����'M^
FKF�
�mH:�A�݃j��kE$
,y89:l�v���Y�K0`���"
�����'�����U�Q6i�򆉟����mێ�N��"�֬��[9�J^��Xs��|�|s
����j��P�VOA��C�Kݴ
��՜̃�Ӌ.��
�U�Y����]=PN`m��ӫ�VD\��Cr�n(I�K���˺Q_%�y��R`@.J���u���
�=W!A?��׺�߈�Q~�.JIp
੘"w�W�1���N���*p�w��R�vv��[��� ����x�Β�Ѝ��k�
*c��/<�di,%�/\��=ʌF�|�ov[(�D��=�'I�X�Ia��'J���6��K\��hn���
�Y�g���Q 
z��.��7�C�'8M

��A)�ny��u���v{��v��Ȼ�N���x�@����:�b%pik+!�F��z4z�&E��3q���7��{�R��E�pq8��I���9
+�N�[���v�R��#�-�����U��[\�jÌ\co�S���\4ו��w�/;z���K1����
+�0�J���ϒ�v㓰X��<���O@��f��
C?+��T,�Ve��Z��ņ֐�M�YX�OՓqx:�k�q�T!����m�\��z�ש*V�]�Jz�ޙ�����e�SA���VX
�毀!̋πP�J�
#��`ğ�*��
E���C7�ڌ����k�' �p�5�)I!y7,
L+1��&�>�;@���
�.
S�^̽$�\��Y���Cm@�O�y;��|fN(H-H��[
+{lg
�axVI�cr���`�:q�|��f�r=Z��;�F
���<nx�I�̾�u�Jq�W@���;�DlT.���q��%+�H��X7�Dž}���C�Ч�G3%Z��|Y��nB�߿�
����$�!�Ԁ��ы@�\�H��F����
�c�NO��"* }
+_�l��#���n���/��QK�FC� ��
��ŏ����t@�I���"�.� mC���
��+��;P�H�/�?I�K0�b�Y.����F�q�|�s
+v qA�ۣ>��l��M�2UF�*��<��+��d��
&�gF��1��9�c�,\w*ͳZ���"�^|I���K��e�E�#�n���ә�{�(�d�d�BΤ��f�|�S :����W��9y��H%)58Ӝ4iCqŒ�*-J7��|�]L���в_��څ�_HR��������A���_C`�G��*��jCL�&�
��<��$f��7Tm����n��kN
+endstream
+endobj
+1054 0 obj <<
+/Type /Page
+/Contents 1055 0 R
+/Resources 1053 0 R
+/MediaBox [0 0 612 792]
+/Parent 1020 0 R
+/Annots [ 1023 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R ]
+>> endobj
+1023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.066 676.287 140.53 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [263.929 273.549 286.4 284.398]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+1033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [311.528 273.549 333.999 284.398]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+1034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.011 73.562 230.734 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+1035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.136 73.562 301.109 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+1036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.989 73.562 365.46 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+1037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [509.106 76.052 521.062 84.465]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvodes_ex) >>
+>> endobj
+1038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.271 62.16 422.994 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.6) >>
+>> endobj
+1039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 62.16 526.596 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+1040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.496 49.651 149.967 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.4) >>
+>> endobj
+1041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [285.57 52.142 297.525 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvodes_ex) >>
+>> endobj
+1056 0 obj <<
+/D [1054 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1057 0 obj <<
+/D [1054 0 R /XYZ 86.4 641.907 null]
+>> endobj
+1058 0 obj <<
+/D [1054 0 R /XYZ 86.4 594.856 null]
+>> endobj
+1059 0 obj <<
+/D [1054 0 R /XYZ 86.4 511.939 null]
+>> endobj
+1060 0 obj <<
+/D [1054 0 R /XYZ 86.4 452.932 null]
+>> endobj
+1061 0 obj <<
+/D [1054 0 R /XYZ 86.4 357.952 null]
+>> endobj
+26 0 obj <<
+/D [1054 0 R /XYZ 86.4 163.103 null]
+>> endobj
+1053 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F38 773 0 R /F16 717 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1087 0 obj <<
+/Length 4001      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks���W�-�*
&	� ��qj]��:�$�j�1�c��]�ק_�k8Z�'�h�H4������&����w7���M��$N6��7i���řJt�y���$��}��.Q�����[
}�lo�w��eS���?����&�q�&�_�*5�fw����p����6��Y�yO��3C�������p�]:a.
+#���$Y�"�
���i���/�F�h�z�A�mA,~�Y��
��@B��m<n�
�zW���-�ޗ���"����[n���*���|��I^B�)}ÿ�
m�ßh�g\0s�w��O[��� ��FFe���(R����`UM�/qeȪ�)}�����LD�d�~�>�N��٫��q!m�L��W�J�%� �>�IyAw� �;�N������\��z_��w���+syjd�ښ��
�ӗu�=��8MU�W-3��2w�2�
�
qU��7J'Nige�,�/Ol�N�=׸�D�=SD�:~b��y�ˏ�����D�
6�xE�sʼNVeׄ�B�w/�@���C;��[b2K`���-��CSf��@Ah�'
�p~ؑ,
N5Y����/�+K��@�3K�ya�t�ͷ�x��-PMG�~�n��W�.
+�ݼ�w��?)�㚶��G��~Ůj�	Bmo�����,e?��H9��1ˉ�CdT}ߴ��ڽ,��;��DzG��7��
�
�N
h8u����D]��P\i4w�!~
=�������
~�}�Kix��9G���<<Ф�y��!�|;D��>��영
3a��;6�<����H
�4��t�c�/�_E
��b��%^)
��I�y $�Bm���r��#��ŗ�K�B�)o�
`�
�"+
k��+�۪XEW
=v���g`����C߂�A�
�yH�ߗޣ�NYm�
����~_懺��r��e��&E�t�G�H%�+�k��3�P�%��L8 �P�
,z����Z֪]����*r�b�uQ컩5�D�
6�G[aТ5�s�Bjeb�P� �xfa
��N0U� 
+r��{�
^�
��=�R���d0�*5ȃ�C����^Ѿ0Q6}�o��2�Д��u�
��=4��t�@Eف*�����h�"a���<��t*��1B�w��KF�������4��
�;wL'�@l�Uv�qe��	�C�� Zv���}X�%,� ���
+�3$
v��y�����4�	Q�*�@_�؏�&��r�束��[ȋ�m��4⺲�֞��;G��
Iw.��MU1pF�뾘�P�x���A�çBĖ��t0]�5�A �3~�u��C�8y���D�;��lB�E��3EK�A$ �E�i�b�I�sAOX��1Ċ~%��ڗ�SnLw�=B4a�  �)���M�|Y�;�U 񑒺�\p{��k15��S�_���
J:�H�HgJZ�Y8��,
�
ͅ�9Z�r�%S��>`�̮�.gT��P
���8�rWVcF��X�����It��b�C�*��A/�"���
+{��`n���e�
�*��K؂��Ug�NJb�9�{J�Ä3��-!�Dzx/�{�eM�<pQW�	�����%�
T`
/��
�ԕ��Q,��!
�Y
�
M��ľJ��y�gr��@X�6�^�		j)� _�S���G���g"�m��8��8��@��D�8Dn"0��xAc��ܱ&tLc��'����W��*
{��'ڭ�(Ǖ���f�o
C�\�V.t�ʭ�u%�I���ͱ���X�5�=�z�{�
�C^��HF��`Dk‹btƼ4�%����&`⫙��R�[�!���8LU�f�^�?
+mL��Ça2�d]�#nD�@a$�9 �C��A
������>eZ�1�>�O)�C:$�ݮ�d�\�n 
����=$��
�7�F�!�c~s)��v�����VdK&�g �86.#�cbK�?� ���|W�K���-?������G	���LUg.��x_?U3P#��_�|O��
�K�Gb�M
uC�0�^�E�H:)70�@��[�?�c_hf�h���`��d�x���O;
+��|!�PD�	P��.YM���6�ٲh1����{���獏
�3=m��^$�6�)H���p�Cm(�v�A&Q�v/ܡl
�;��c�R�v�e0$��5�¦�KM=pJ�e�I�$5*r���&wi#H��'F�e�).&�c���nס��������O\0)z�E�����FN�
��Ԁ�#A�d���xz�q�+i-�/
 (N(��z�"$4���3Wv𩔗�
����M�ɦ���K⇙�,��2���3|��/0B��	�am�~]�;ʁ��i,�@"��sx����Õ�[��U~W�7�z��g�X��x� ��`��xK�K;3����K}�Xi�z�Wym#/�	���q���O�r�O��}A�S!_���o�Q�V�aH\�#��͸�.��+�(̗��Ev
���z�[���(�G���\<w
�<�&k�`�u�r�J�c-B�b�9�<�
+>�fM��4C�fΪ<�1	����t<z�V����N⻤�HhKX?)!<���Ƥ~�9�� �Q�*�%rql�&�Uj�w
	\���������+�� ?kC1.�c�����Q��t��>pz
�V���I��W�?��Qat|�簢�ywM�_�Rɭ���{*7@��i�ِB�&$���gC�³!�}�?W^
7
2��d	�bf��H�F*/�����2�B��⠱A�
�zt4A\p�"�
+�
�������3}qfNEv_��澥�wmY�s��a��D���l�@85�w�R�Ƥ���Հ4�r5 &�
r��屩]�
‚�bl[6gb�u*��e&�>��:=n>W�/�OR�Gϔ-"���ID���\F'��v�2Z���y� ��%"x<YF?���e5�h��r���|�f���bj$�J]�@�
b�s_`JgI��4�C�E�쇋!W�Q�@
+��Lᮞ&�
Ͼ/�
��� �X
����x�]UE%G;�QwyW�#�$Vi�6��iY����z��R��Q:
�LUҾJH�*�:�|�Ts�w�=���v"���2W�gj��,&j�� 46'��P��-�^
KT8©_�L}�D��*M�l�?� 烪�jQ��W����� ��b�ԋ+����e�
+� �8z�̹��g���fЖ!1��+
>�o�i���M7�Jo�w��g�C��8H�Ke��9�,�4��z)1��s"���
�Z,�2������
���Gt�	E�~����4���IJb���&�t��u
X�

ˆ�n
:�uf�$���5�|��rʋ]2��1~��c�����_uC����-��
U��s����_�:�OÎU�
 6��h���6
��/'����(��W�r����i��T�J��FԱ��G�]�;1�<�;w�
,u[���Y*�}#��^>^
���ȹ�7�BG�
�dh�u駟�ܟ����}�Pa�WW�a`%�V:�+%�������-�ڹ�=Н�jϏRt�|~��$Σ&�Z
6�n
p&e�
=�*��Y΢郥P�Z�3�+��e��r*�
tX��[s��-���C_n�S���e
yI������ۤ�v�w��7uٯ،S������R�@�i�<]?�[�ŇS٭w;0j�dy˄�u�����-%� ��ce�h�#��}I�hU�{>Y"�T{�@���^�Si:���/�
S&v�A��q�3��L`/�l��,Ό7~����}Q��YG`s1�gO1)"N
+�%8�r�Ɋ��S=��
���!��
�9�[kI@����rn��e�n�[��8`r�	Ա+V�'T�Xn����+�nvO�J!
��W��.?�*��i�����r%��1t ��
�’�P�,� �on�U����=nٟ{�t�����a���z�\0�Ej�P�!�ܢ��1o��C��܎��痐����\
`�nF�I	q{�$n�M���9��������	�5�X�"��vǛ�oB�R��%�-���
��7�������F��
+endstream
+endobj
+1086 0 obj <<
+/Type /Page
+/Contents 1087 0 R
+/Resources 1085 0 R
+/MediaBox [0 0 612 792]
+/Parent 1020 0 R
+/Annots [ 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R ]
+>> endobj
+1084 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./warning.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1089 0 R
+/BBox [0 0 26 26]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1090 0 R
+>>/Font << /R8 1091 0 R>>
+>>
+/Length 1092 0 R
+/Filter /FlateDecode
+>>
+stream
+x��O1�0
��f')�W$�L�*�5Ca��$m�Ď<�u�;�&2,d��e
�@�
B�y���jE)�z�ܗ!6p�T�c�������P�>6��|����︭���	��+t�N�4��A���ciZ���P���P���f�
8'\�| ��8P
+endstream
+endobj
+1089 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20160810091351-07'00')
+/ModDate (D:20160810091351-07'00')
+/Title (warning.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1090 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1091 0 obj
+<<
+/BaseFont /SOTQNP#2BTimes-Bold
+/FontDescriptor 1093 0 R
+/Type /Font
+/FirstChar 33
+/LastChar 33
+/Widths [ 333]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+1092 0 obj
+152
+endobj
+1093 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SOTQNP#2BTimes-Bold
+/FontBBox [ 0 -13 251 691]
+/Flags 65568
+/Ascent 691
+/CapHeight 691
+/Descent -13
+/ItalicAngle 0
+/StemV 37
+/MissingWidth 500
+/CharSet (/exclam)
+/FontFile3 1094 0 R
+>>
+endobj
+1094 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 328
+>>
+stream
+x�cd`ab`dd���M-�u��Iq�~H3��a�!��]����;�,��\V�n
�n
�E�o	}o�����A�����b�b���ʢ���РpMmm
������BR%LF�%�83=OA
�(K��/�M�+�Vp����LVHϩ,�(VHLIIMi
K�I�Vp���,(�/S�p�T0200��~��I��
+A���y
+~��
+>
+��)����


��

L
L��,�?:��?��n�c�|ƻ�m��[}7�MM��^��k��
;w�n���ySt�w�){V����~�"�39�Bs�|��+f�ɭЙ9�7?_�����g[��]�{�
��
+�xx �~}J
+endstream
+endobj
+1042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.671 675.733 174.394 687.689]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.8) >>
+>> endobj
+1043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.778 675.733 467.501 687.689]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.322 663.778 289.793 675.733]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+1045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [500.415 663.778 507.389 675.733]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+1046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [305.225 651.823 319.947 663.778]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+1047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 639.868 519.955 651.823]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+1048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.937 627.913 435.409 639.868]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+1049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.441 615.958 243.913 627.913]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.4) >>
+>> endobj
+1050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.414 604.556 411.137 615.404]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.7) >>
+>> endobj
+1051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.15 592.601 293.124 603.449]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+1052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [159.902 582.583 171.857 590.996]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvodes_ex) >>
+>> endobj
+1063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.465 549.358 168.439 560.206]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+1064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.944 524.894 203.667 536.849]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+1065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [323.651 524.894 338.374 536.849]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+1066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.726 524.894 438.449 536.849]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.4) >>
+>> endobj
+1067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.404 512.939 470.126 524.894]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.6) >>
+>> endobj
+1068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.612 500.984 133.335 512.939]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.7) >>
+>> endobj
+1069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.876 481.355 484.599 493.31]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+1070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [309.336 469.4 324.059 481.355]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+1071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.83 450.324 156.804 461.173]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+1072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.249 394.83 156.223 405.678]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+1073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.533 370.92 476.507 381.768]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+1074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.471 327.38 155.444 338.229]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+1075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.68 247.976 156.654 258.824]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+1076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [273.128 223.512 287.851 235.467]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+1077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.453 211.557 171.176 223.512]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+1078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.94 211.557 461.662 223.512]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+1079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.612 199.601 133.335 211.557]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+1080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.081 180.526 156.055 191.374]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+1081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.081 160.897 156.055 171.745]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.9) >>
+>> endobj
+1082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.607 128.76 286.072 140.715]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.144 116.804 325.193 128.76]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+1088 0 obj <<
+/D [1086 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1085 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F14 1030 0 R /F16 717 0 R /F48 966 0 R /F49 967 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1097 0 obj <<
+/Length 2803      
+/Filter /FlateDecode
+>>
+stream
+xڝY�w���_�O�'�|�}rl���n6gw�Mj�6�����1cㄴ{�K<#i4��h�ompuv��}�4���z��
҇���`lx�c�t=�C�Uk82]SI��,��	�,%ηy���
+�U^��ۚ���������Ǚ�h]�U�r���i�5p>
4����3���������˙vb�;�-մ
�`���>v:��aw-
�
Ka"-?^���k��a��㲲tC
NN=���l54\���v��[�05��p�[��\=�C\%/��T�z�����C])�y-��E2����T�#۱�-��ܾȍ~�:߁nءvTx.<����m�QZ^�I��T��h�xOy��&�����d-�WT%K�ZX��`������m����b̒M���^�l]4�mV���
��m���v[�Cc��
�/xd�9��5�M�l�sȲj�P��4��aZ�=ƣ�o+��̼l[��x�\�d��w��ͳ,���a���"�'�?
Y��D����������՞'�[
����1�p�FX��n�S2���=
>fu��l��:�

=��ߑ�
���?5[��o�LE������1MU�1�i0G��%������*H�/ֈU���(M��h�����l1������ϐ
�e(�å%�G��:\����6&��m�
G
�s���1L�`�9��ݤ�
zA��l [...]
�:p�L��R�!o|�<J�����Z�9�AL
���̎f �2�r�l24�	)9SvU-�ض.V
#Qi^��K9��I��#|Z��\b��]+�'�=n	�!��6�.�ʼX���v����Z�y?���OC�e�$7g�-�_X���(�A�
� �^L+Ė��
���w�j���L��!H"@E+��j2i{�w�O��)��mN��n)`�)�S��bh2@�� �?��
�(�"�"��%�����E�l6d�vU�;�&�.j>V	�l�0h��GT��z�����aW�cfO�71�V��p�$�\QB�����_�-�}Q��7���
~�d�T;���&��j\
���	{��Nz6�}d`@�
+���j��'=6W�߽a늡i���J9 �Tu�IJ�
B�ϵ�t EY
]F��Y���u!�
������E-
�=*�nd��܂P�ͦc�iO
M0I�kUgmUˎ��l�-�Zj�l�a.�8��S�G�E��eu��ܶ-e�Ƃ�/eP"1�C�����.�x�j"8�h_8����J�Iԙzr,G^�&/�E��W*W��������
H.肶y#��
�EV~o�e���=̄�b���j����i
���?���1d�Eӯhp(�~�T�Y��˵�qm0õ�_/4̱��o��R�>
#��qlw<>��
D�<|o�
2퀹ԘS���]00 at A���S8"�/���q��Q1��S�C
+B
�n��+�C��UQ
+ �i� Y"�H�$,��u@��?�!^I�C���7y��*P�JeYJ�j䛄��c�����R�X��plD���h����1��`b�L�ԛZW�e^�}*�
��f�G�6�0�NU�<�ZE�a�t��'�F�{�O[���tc��>�>�{i�������}�x�����-wq��P�{�Ep�#�{�TpP?�_I�eV��=TЦa8�c��	lG�)�<��p�Sӭ-t�;D��z���ǚ��X�
�����
���-��E}y��������+��jK��Lo�P_��]G#��:o3tn���hUY��Q��/@f�����в��riY���9
���)�'��u�=�4�Lx���f�a�u��)�
�=��0vxt����Q�D�!�{ G�
+��

P ��+?��p5�+�f_� =i����-}�_ٌ�N�1l�
�S��)N��W{�鋱�x���J�S!��pGO1x.ᷦ
'��4�?�J��YHlړa��{��Mz}B1�
6�8��4(n�.g��&{X|��Q�a��%��+�k����k�mx��Ş!�Zpv��W5M~�ɞ^sd^Ŕ�\ú��{�D��vp��T��ޯ$p���O�G/,��$_�M�@�Q�
�퀌(��[14��
i��1G;��]�4?���:����/��!�
hu|&I�"F����k0�gL�����ġe�/����:e��<���P1�fR(J��b�΁��s��sͰ���x@
+xp���E�'Bn

��E�BT
'�Di�Q�C�'�B2���Y]�9�ăh.!���5A*W���!��GgW��ht0�
T���	K�/���'O��I_/�0H����e�F|^�yI7
�ᯊ1�M�騷�'�ƃg�2^��#.N��q0
�i8	n|z�x�%fDs����Q���z�<
'pD]���h*4��W?��K�Ѥמ4�G�?��̟.c86�,
��sf�W����
I3�pX�ߐMHG����K���
��S�?�>�\��-\0�qW{|t5N(�p0
b���$�^M��&�.CAL z�48��}���;A�ۀ����0�,Aq�>3�
+�mrC���(��H�ntێ�n`rt� 
n��B�
�@�7�W�Hq
+R����4H�)��5���|��N�	\���`�'�eZ8O��%�.� ��SQ
��Nλ�Li#�T&7�X&�΂�?���,}��Z&�F�-D8�f��B��f,���y$	w,	A:�h��L�H�l>g���1O �������ӳ��l-
+endstream
+endobj
+1096 0 obj <<
+/Type /Page
+/Contents 1097 0 R
+/Resources 1095 0 R
+/MediaBox [0 0 612 792]
+/Parent 1020 0 R
+>> endobj
+1098 0 obj <<
+/D [1096 0 R /XYZ 86.4 726.045 null]
+>> endobj
+30 0 obj <<
+/D [1096 0 R /XYZ 86.4 701.138 null]
+>> endobj
+34 0 obj <<
+/D [1096 0 R /XYZ 86.4 568.288 null]
+>> endobj
+38 0 obj <<
+/D [1096 0 R /XYZ 86.4 521.615 null]
+>> endobj
+42 0 obj <<
+/D [1096 0 R /XYZ 86.4 380.739 null]
+>> endobj
+46 0 obj <<
+/D [1096 0 R /XYZ 86.4 287.684 null]
+>> endobj
+1095 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F16 717 0 R /F55 1099 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1102 0 obj <<
+/Length 1372      
+/Filter /FlateDecode
+>>
+stream
+xڍWM��8��+|4U���6G
�
�cOR�$�-U�Ad{�~��2B����S���~zS{�Lm5����zt|mjL}�ג�������
KKr�
��'5'�
��`��j��z+��Ƽ�Z^W�8Z&��#
�L��yF��ZV��~7�
V>j��LC�(�J�u��
V�ţG�0��69jV�S
��&y���P�'�K�q�
�����C���/jm�LcF������f�~YD�A��j
����r�1з���ylY��9���ђ�1��eSOe5{�b��z��1�g�/|���>�����KB>�G�^�ry$ y�bB������2�����姥:0R�f
��'�w��)��=���m
GT6���H�q��e�D��8�[~�4�(�cLkfyΑiA;>�
26u�3&���Y�l�щ��U�q��u♦��yq\_�(��{L��
,�Y[����Օ�(
�w��n]�3Af�)#2�W+Ҭ%��۽
+�W�^�� k��hKF�T�
�ˊ����\3p����[l%�0Vh�7��j�c0K��/O^���q���Q�JV��e-�IϽ�[�D�H�Z����|X�;��Ԑ���b9J�ܳ'f��ف��vU?��~@'��M�'}�<���`� 
�gOUD4^*�b=쩭�mڲ��U�Y�*T�>�ZU�(ׅ��u��g1�:�[t:�sF������M�"�[�;W\�d��PԴ	S`
�v�LH�!7

�'�E�H���iٯ�`��X�s8��Y���h�4]9<#��(x�ʋ��W� ��xTM�Ѥ�W;a�ɭ���=��
*�f'T����
O,� jW���]�-��QN}��a���蚘ʎ��
���~8�������<!�'�5
+�W����;z�?nj���Ɋ���:�F�
�=Plh��˷
��U���F�9� zʳ�	^�)���ԁ��2���D2�X1�M�=�m�ǃs�>�Y��x��E_�]o�,l�&��ePmiK9�
ϭ��b
��7�r3��%���ڵ�7�yUr���1�d�
>

�^����*�*-�ßޣ�+S�#÷����
`'�,���Jt�e0�)1y>L�eh0�5�8 ���mײ�x�$�

V�hX/]�ޗ`�pU��eP*P�����,��| o�`��N$� ����������*ҭ����n����:����]�)k0Ee��d�?�
2�*'�>�
+B+Xj .w�
�H��Wծ3Y��&�H�C�{ 4Xu�]Q
(�1��C��%C���z��/7�}��^��ԸFld����
.�|��4���w��;Xܻ�����4��(Hq�Bt�qE��\I��1�U�-o@�h�W���&d��@W���Ұ�G���lX�
+endstream
+endobj
+1101 0 obj <<
+/Type /Page
+/Contents 1102 0 R
+/Resources 1100 0 R
+/MediaBox [0 0 612 792]
+/Parent 1020 0 R
+>> endobj
+1103 0 obj <<
+/D [1101 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1104 0 obj <<
+/D [1101 0 R /XYZ 86.4 639.37 null]
+>> endobj
+1105 0 obj <<
+/D [1101 0 R /XYZ 86.4 595.534 null]
+>> endobj
+1106 0 obj <<
+/D [1101 0 R /XYZ 86.4 537.806 null]
+>> endobj
+1100 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1112 0 obj <<
+/Length 3295      
+/Filter /FlateDecode
+>>
+stream
+x��Z[�۶~��У��Bq#@6����4M�fROڙ$ӡ%
��D*$e���w
^@A���Mg�"� �],���|�j��?����O��\�
ə12Y��_����ŋ����'�����J�d)�~|�zG3�Z����Jg,�^�*��>��u���>����
�A��f���H�WHK�'�~}'��~n:��R�ho��m����f��˿}�5ʪ�J������wǂ
M�rW��+?���7-���]�o
+X����ۤg��S
3�3я��C�.�’J,�l�;�\�I���7�}�nʮy QR#�vM���b%M�,�+!X�$D�n�nXÒ$
G���J0;r�p����a�Yd�Y'�gܟ.� �0J:��b�����û�06ƋP
�=YLDKX���p�s�e�(�(�h�]�Y0 7�d(e�3/d~JI3m��d)��i\���$�
ɔ�fi�cD�e
s���0"mO�T��^�`�tL
+ ,��f��M3�
���B���Az?b���	���d�B�`�ʪ��gA�
�>Nbw�D�埑�2z�8l[h�?�Z�����E�H�
�%7EUw1i<�a����|��N��*�A�~�ؖ�3;���9�U7����
��
�2
+<Ѧ8��EhUH��)�V�eޠG���>��)E;
}O^m����;��|�{��n[��fI��SL�vԵ.�./+z�,���K��xI̱H\����*~%�X.�qe�Qw[zl��.=
���
+D��3�`�-�<��kty������o��m���K>���^9��~�hg�[#��
�Dє���
�.��6�h
��-�uAo��ԛ{�����&?��Mz�|��t��{�xE�~[�w
5ښRʝ2��r
p����1�
��{��Z��C� �rMH?'�)/����r��
���Ե��NBh�i
��G�M�����z��)��}� 0�b� ��Ʒ�?A�Ƅ$�5�}|ubO�g��9��;���c{�(5x�C��Z at g����p��ʈ�͠/sX���V�e�	X	�Ia���,Mz���RO�
8�J���ʸ���W�)^�͐7�)Hø�^ ����>��f¤������~g�%y�Wwx�I	��
p1��)F���6`N�
N���v5�&i���q�����9�~���������x ���!0���2�wSR4���}B�e�9�K�0xd����4�!��%�Ȇx�ٔ9�L6��&o� 8��
�҂�|]vd�*
<����-�!׌{�c
 �G����e���2 
�a�����\�Le%_~��I���!���b��S��$�T�t�Q�m@�L6�H�p�PX��20�Ԇ��5��p����S���
D�;����7]l���x#�pdo�5��c��󫗞��\[@��P�����͎������ԩ�'[��WM�)G ˝|Imy�Po#�25bDgt�7�����Z��8E� ���|oJđ(fg���@�  `�V]s��L���@�Q�H�$��&%��Ʉ ��8@������
zvB�
 �T��������
+,���
+
+
z�*r���ێ��O��<M���ʹGTE��m��
y�#2>�r��Y
���_����`�UZp;��% �X
+T������u�}W���nj/i�	�A%E��T��(�����G�FHrfB��>�/O�d��}�ł��`9`����!�9%h\�����2��
��d�Cd5B@�&�~1?Ih#�0�y�-)<X��'Q�	�"Lckp?�(�V��wj��9#O�G
���<v
ݸQI���p=���f�����yD�J��s�x��m
���R���� �P�w�T�Ҝ�q�!Rr��u��S̈$X:�fpä���C-��,[�CS�_����Z?�WDŽ����0�7�9�:W�A�s���)i��y"fa\y'B�����7��de��hV%���1�њ`�5�&9�{`=��G��3�3+�B��y��P��ƻ6o�*- �H��N�h<ʓ��o�
C�L*y#1c��0�
+�p�p ��X3�.����r�\�
�
R��j�oM
k�8E8�a���RL
+i����P�Ď��+��U���$�l��lgR,����!IpG�b��&߷��j`
���������wbA�����H

0��C0��T�@y�
.JD����ĻqA��?�ss��(�8eR�V��9��d��*���˜U8�Ji�
Ub�vS^ ��
+��,	�=�vi�f�k:��+��F���9�i����O8[N�7���"C�t��Z9�Qi�^�'-�NrL�g�SǍK��C��Ϻ���>K
+$��&��` ����
l%%�VA~�Z绝
�V9@�K�Y�
+H[�R�s�d�
��$��T�~��O�u��0��^��PE#/�!jT)��D��Q�
F����x{�s��OT?n�"c��G�+obw�@�����u����L^���f��f
�xwFc�47
N���p�9A�Q��:�jG��j��cU�|��ݛ��^w_V�_�k����ZlO�Mtl>�"�+�h�Y��C
+.�P���b=j1d�[�qu���Q���?A�h�e	ez/Ta�sW���5�P� "�G�rs�z�fvZ��|�� �Y_?�p!��,���˿�����
)3���1����LN^
.0A����;�qX֗��"�>{��S�� g�th���,�
(g�j �>Ų
�d��$}
���}��\�4�����{
�f��Hq
<*�
�
(c�S4x˪���Inus��6K
S���ѻ�(�Q9��͇�7+f
B�;S'���������d̵6e"��΋e���m���b^��2�
���I��������@e��pF�zj��3��
+�h�Hrr�]��T�3�ur!���K�j��Ց�baKE�}f-}V0P� δ
/
+~�ޫ��H����S��J�@�R�oQ\�Ê�����{��p���Ph�P`��Z��	��Wr*��HI8�x��R 4�����
�{#}pK!5�ĭ��q�v9a�����U�r�
������x�9����G�ϗ
���ݺ��۷T��S>W��t,;���
���uߋ"�Aa�v���3���W|�����c�w��
+Z*�"t��j�>��OJ�_o\]�N���l,Py���v"+���f�!�4�᳙/�2!g��1˞7��G�o��1�3^� �0�q��n!����C �v�ȽO
���kq
+W�[4ZlL�[A°
�S�š&���g/�����
+endstream
+endobj
+1111 0 obj <<
+/Type /Page
+/Contents 1112 0 R
+/Resources 1110 0 R
+/MediaBox [0 0 612 792]
+/Parent 1123 0 R
+/Annots [ 1107 0 R 1108 0 R 1109 0 R ]
+>> endobj
+1107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.854 422.5 187.576 436.122]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+1108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [395.249 149.69 402.223 158.103]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ByHi:75) >>
+>> endobj
+1109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [428.458 149.69 440.413 158.103]
+/Subtype /Link
+/A << /S /GoTo /D (cite.JaSD:80) >>
+>> endobj
+1113 0 obj <<
+/D [1111 0 R /XYZ 86.4 726.045 null]
+>> endobj
+50 0 obj <<
+/D [1111 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1114 0 obj <<
+/D [1111 0 R /XYZ 251.167 502.882 null]
+>> endobj
+1118 0 obj <<
+/D [1111 0 R /XYZ 86.4 408.415 null]
+>> endobj
+54 0 obj <<
+/D [1111 0 R /XYZ 86.4 317.893 null]
+>> endobj
+1119 0 obj <<
+/D [1111 0 R /XYZ 228.95 260.755 null]
+>> endobj
+1122 0 obj <<
+/D [1111 0 R /XYZ 218.85 130.125 null]
+>> endobj
+1110 0 obj <<
+/Font << /F38 773 0 R /F16 717 0 R /F8 729 0 R /F11 1019 0 R /F7 1115 0 R /F14 1030 0 R /F36 728 0 R /F10 1116 0 R /F9 1117 0 R /F49 967 0 R /F6 1011 0 R /F1 1120 0 R /F13 1121 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1134 0 obj <<
+/Length 3985      
+/Filter /FlateDecode
+>>
+stream
+x��Zݓ۶��B�'��b�f<�q�v�Lc_'�(��CB�2I�|�� 	J�;;�δ}�����b��
ċ�"^��xvu���D/�(�R/�������<҉X\m�"�\�Lh�|]�7���.WI�,�m��n������ի��.>^�=^?[eJ/6��w��Z^-�(ɳ�-��/T�G���ۋ�.␺�8��H����Rf�����,�HK�e��e��Eut�A�Z6�H��υfq
����4���
��ۛ�����G�+���e��m���ۢ�pՏ�m߸f�;.q�-/Wb��R,��-
u�]n��8�����uY���]ח�nf7��b�+�GJ�L���-�82��{z73���Ȕ;�!^�(7I�
�H*�P�	w���	��(����}��3�$4��?��D�@�W&n�'�r!����q
��
����}��
+��DH��΢ɖO�8�#�d�pv�&2*�}^��h�,If�5Ѱ(3������{J�4��f�H
���i,��O+�,2RL��u���n�B���Dy�a����NśD��G1kʠ���^�Lc�Ĥ�(�䄼�Ez�S�
+TOK`��
Ϲm"����>������&b�|ʥ;X%�s"P��x`@Qo�l��&��͓E�d�90�fV��BY�vC
?�)%�E�	�Q��iн�l��)�����(�����:��4
�t��zN���&��\�WR"u��Eϯ�X�e�q�u�r]?�
�
�[ױ��-�vӗ[�?���.��	B7"{���AO?�����B��d �`�M�?
Z�k:�ۮ��� hG�m����J�!���uU2���"�|��7����mŶ苈�1�RӮ�x��ւ�.`	�¤����7Pí�ol}�ۃ�iڶ�~z�Xb���
N��\6۲��
�W�e8�
q�b_�A�ح�">%:C�M�"��nJ g�2*���[[�M�Gsp�H
?P�|��v�
�ʒXӀC)1��d�����r{�J@|���@|�0��}"�-��k�Z�k�
�
�3��Xo��pX�,kђ43�8�Em'�ukY'���-]��bo�!�X��� X!�X2R#$���2p$�gӟS$�H��A��y��Z۱�`m�	���
OY	���)�F>��HP
�>��-��O�J�k��_����u�#���mP���v�Z�v�����ls�N�9��oN'Q&���xJy<�';b���(F#r��$/��ܮ�R�ڀm�Sk�+��$�
(���D@��#'���l�>����K�
D���@�U�v!��BϪou��Y�l�Ҝ�����]Ŗ���
+��$�8Bp�q������sVMh	 �|�Y#��\6<=m�A��l
RS<D �F�;�ȑ�)�0b�ۊc�"?��`+vMM��M>8����}(
+�^纰�U�iֶpͤ����a�G�e��xx�&)[�#v ��
w7�Pv~`h�,��=k+����|����{L�^�˜��΂$�N�=VM�	�{��H����MR���9���(��"!@���r_Rڢ�R����A�UE��š ��z��n�� GH����.�eA�ky+��q	�=nec�`��֓�ؾb&� <�!���%z��	x����u׍
���k�u��r���a�v,��r=e�!�C�8��?����C���x
f��
+_�:��
 �l^ �=d����_n�`�ә+�n
z�9�1e��\��͋
�>�ɞ��ɽ�i.q��ÓP(�,�՜@�!;i�\�=
�f�-l�,�)2C�`}��,���,��g�M�Ǒ��f2�O�]!/��	/u�Kh|���|	/ab�|�3a}`�&D;Y@}p@����~z8p�;
��
�"�J�ݏM�l9L^�Z˘ Ǖ�����.i]��p͖�L]5�ka����d
�Z�t�!���aUA�f �� MH�?�*J�(/�3�T�D

��
�Nb��
�@l-땃��'�j���I�|�Ah>Z�a�����[6����M�"ު
�6���C2B?�Pg�Q�k
7��Q
+'̚��
v�vNç�q�At� ���'��a3��x�滷܌g�ɹ�x��X��_�8P�7eg�G.A�A�z��
k� 0:X�x�9�}2��8�/ھ�O�r����c��<@���y�U��ĺgv�틷}����O�j�_��As^����$Y���0&��.4����#=��.��x�_��8�m*��1��e1�(��!�>���縏�^��.ȡ+�L�Eݱqi:R����L-)ɀ�~:�]
+�cG��)�8+ɔޓ�����S�?d��-��ݕ����,�>#�
�c����pt�t��a�nu��\��9� be�é
ca�tm�!��\Е3ó峿?��^�y;��h�w;�R�;��p�
hj�T�I���'�
�w2��I�D��_h���ё_|��vg�4dϢ���w��{g��o�p|#~0&`�p}���g^5>[��(IOr�kF���9�`

5�;g4���v7
���C�,;6��K^��e��vd����
2Hǻ��8-0��e���O3
+af�
%-�+��>T
���~�9
�AZՆ�� ���`4����ʧ�!D����R��w�c�)�
7�����]r3�S*J{��6s�N2�I�Nώ��:̊ }����[�Abz8�/
P%J	�z�� k���?� �b���.cL�>YژI��L���ã �d��֌� �q���N
m�y�_&�z=��q[b�2�ɻ�o=^֓�%A�^w%Y�B�+
��m����PY�m�v�^��|5����*wQ�^u�
V�}fR0
��8Q�7B��-1��n��n��m��W���W��#:�l�mN�j��'� �78��]�6�xc�+,����T
+g�d�<5_D�e~~���aN�ܦ���#�m��g7�f����r>��`o,$8U%ef�.�,B+��c�[8��1LmS�u\�Wm]�u1Թ�
0�k}�
��ͱm'��Π�\��i�*����%ݳ���������Yo�
%[��?i���	8q0e��X������N�H������3���
��s��(�T(ާ��d��A
+���u���B${��H��Ψ����WO���,��'=�S��c�\�n�q�t��%�b��<���f�w�N��$��xL6H�	I�0�}���`�f��+y�L��G^�<�L�Ϫ�Տ�����uO�G��O
d�lj��4�q�N�*##^ �3
�~|�r������Ϩs&�T�����b1!8��%�2�tA����	���<�'Ŷ�-�WdC�X ��������P���Lj�ɺ-H
+N���'lun[��d�|!F�`�6��\jw\w��
�=#�X̄�5�=���=Ix��0
+�m/��{S�{�OD �P�������
��`Ifڃ%�y������8-OM�ql
 1.e�	���P0%`��,����F�)1�kI�%�K�V�[SVz�]������iA�*��E(��ϣ�P�V�OD9�k�R�>Sz��1Q8l�91D���#���l�4��[K�����G|��"���o�La8+O�u�>�)�®,���˺�Tl\��B
��	0�-x�5�#��<��T�	��sH��BY��kʢpE]�%f�bz�8�
#t�ҹ�
m��`���㦟{D,��ƣ�zu��5�v���L��4뾰CJ�c�f�=��a��bVkh�xlz;Zw�Ąf>�y�ahb��ZA�z�"�� �-O���=����C��,t���f0�
3y��R���}L��{I�1���<�s�	w*uH��h6�#
�m��]Rl��UN��
��p����X2
<�	[�"?IE���9��2aX%9WM�b�f
�� ���M��n�����u�fſ���bW��
�n�g@(0N���˷ӌy3p���F�X6T��s��sνq

+�C������������!F�;
+endstream
+endobj
+1133 0 obj <<
+/Type /Page
+/Contents 1134 0 R
+/Resources 1132 0 R
+/MediaBox [0 0 612 792]
+/Parent 1123 0 R
+/Annots [ 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R ]
+>> endobj
+1126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [433.789 435.668 445.744 444.081]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+1127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [449.837 435.668 456.811 444.081]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+1128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [303.98 423.713 315.935 432.126]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+1129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [320.322 423.713 332.277 432.126]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+1130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [336.664 423.713 343.638 432.126]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+1131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [247.01 234.442 253.984 242.855]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+1135 0 obj <<
+/D [1133 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1136 0 obj <<
+/D [1133 0 R /XYZ 230.262 683.712 null]
+>> endobj
+1137 0 obj <<
+/D [1133 0 R /XYZ 200.356 652.338 null]
+>> endobj
+1138 0 obj <<
+/D [1133 0 R /XYZ 242.095 180.154 null]
+>> endobj
+1132 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F7 1115 0 R /F14 1030 0 R /F16 717 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1148 0 obj <<
+/Length 3859      
+/Filter /FlateDecode
+>>
+stream
+x��[ݓ۶��Bo�'>��$ǝIg�L�&����!�O�δ%Q&���}w� 	򠏻���I -�~���Lf7�d���_�.��V�Y�r#��j5�
S�T��H>�Z�~�
Ɵ]�Lο��O�P�^ﻪ�>����L���J9;�s������
�Ɍ{��e����_KfKx�j�0�g�[;n3S2gZ��?/�q�8
��W�^y™Tjfr�xj���	O-
�_~���-�l�MWmo`YRλ7%6�|����r�|Bf4�%�	˸x�ԛ�)��Ŗ�	��]�k���x&����D6wï�]�C�u�.����V�E9Yκh;���쟗EW~�Ź�%0���X��1M��0H����`Y���a"M����ӯW*
�!} ��;g�ܾ]�MU�n� �
��}aN�Ԍy��f��>���Dg���]�ޘȆ��JY.�1Iێ�
���X��c��L�~�?G��0͍��?���p������V���Y�x�-贷��rUtŚ�b������){[�z�8�y���S[�Y,�MS.��� [...]
�VJ�D��f�8����ܜ����P2�XPҜ������d�_?J�P��q
0��(��jTz
C�{em�����
څ�������
Z
lu�jg��7
�
+�(z�V�)
�l���Wv��`|�ۑ�թǔ�bAjex�cy��i�����:$��-
iʵ���zB�E�q׭]���_��E
�Z�-��\g=V����Ã5қ"7�u����xS[R�G?ɜ�E閝z,
���mY4�.3u������7nq_6���):ޠ5ZO:`h:#�5��
 �o
�e�.�ʹ��][2Ft�
PG��
m��K���gćE������pc�ᖌ�A��ܐdfX�ʌ�X(v�pLj�i0F�/��e�H�w��i 6I��v���q�7`�Z�%�)��
+��4�5Ϋ;z(�'<"|vGd��
+�h�Ի�w����{;91�"���
|�hQS��/*9�8t�!_�P�3�u*&�(�!lHb�ꇀ�)���^vnF��J�h�����|��h=�r[[�n��B�(?� �>
O�
�zI���ks��?wa�j�ܹ[��Ӆ�Mt�
��/�P;�-�,ý�
+9

#��
+�_
+J.#0x���
������)���:u\�L~܀�L���S����]����Y7[
���-b�Rf���𜈵��0����B�
�#�Οz�
�l[lj�5�(��
+��\ �OY�3\+{�y$��U����m��w��\����\[B
چ�;j׋����÷��1���}\2X5h�H�Ũ�嚣�V-

7�zs^��i�NՆB�A
��
��
+�E��'p�ΝɈ�]RP�!H�s<n5�l�Ȯjx0p8�m����
��qPm��*րiD���g�j�
�jm"����-a"WSuk��Z)�ttR�����\ȇ�)��o�^ɏ���\��x4�������_�#?ABdi��ϿYut·!-������-f���|qf40��D̨@6�3��-��+���^�m��'�+��_?q=���\�(����.-�{�G�ݣ�<�,�m8�aB
����
l���$�7]����A��
��4����^���+�lu4���%rd�%��� �ŸgSp�׉��\�D:�V|��ɘV�
+W1wx̧��N���e6cT����Tt��b�5�

:9��S��wg��C
gQ���;�!�2��o�v�%��]�Ǡ
� �2��#�<��?R���J�AЛ�2a���(#r*�[5�VP%�V<����ȝ�H��`�A�������n�����KN�wq�"��=��ш/����f�d�O9�Ͻ�#g��݁h��Ne\�M�S�G}H�a���Cԡ?�n���_eS��ecU>�W�`�䐼�����9.X
�΄��F���|�3�"ߔ� O[
���?�9����찄��B�
V����O������:��?y��y��Kn�8�P�g)o����
�k@ ��$-vo�ֵ$��:�P��͒aXD�z~��h
�J�O�jS���`
6�`

k�-k�ͅm��;3�
���4`Y.�E�)I�!��w|-J��1����R����]D6L
+ �"�GAl~
+b���v{�cl�qb�#�;Y1)�Pm�0@O 3<�rj�7��{'/q��5\�����Q8�vr�����y�
�����&�)�h�sY��o\�e�)D�K�t�B����M���5��N�'�.̓?�r�W1�0���n],�a� ݰ7o�H$U|$��
_0�:��q��%C�ȡ	c�M*1���x���������l ��7C@��	�̵���m���(�j�,�����6�S6�N�^?���qu^�E�b�
��د��d�/AUPT���9|�x�I��
���A�_��H�H�
"�c�9p�}��t𕹚jQ��o�
y�ߩ{�����P��Y��%�v=V��

\}�A�! ��
h�湫��Z��+�0+��p�;@zJ�T"��!�>*�0����M�Ij'e6
�Yo=��~�=��P}�
	8�G
�y
4�wŒ��[�l�F_��4����R��M��P�x3�^H=`Ok��v0� , 
��I����+9lt�
+��}B���Y�
+���NU�=m0w�G�H5�n��aC�:��`M�}*Y���U������`��U�{V����$v4�����˚~�u��U;.�L5;�"�f�o�	|aH��U`cT<���
+5Ͱ9�DxoY]S��WAA�,x[7WX��W,;9F[����^�
��3�2z19g)�^

���?�~l�H�
%���d�t2
+������ ��b��b[��=PE �#sm��[���k�����|�����
��v�����Ljo��n��JO��х`�c��1��oLnº9\Hw߆�<��rX+��
���su�%�y�����;\����!-Z.
B.��Rg�C�s9�~�G}l�ђ4�^m�z
��3 at cߢ
DTn���M���q��U�i��8�zCi6c��-�c"S�l��yd�8ARݟR2��p�sʧ�t���8# ���~q*N�:�2�]�����FU�磋g�#�����9Ò,�s<���r.�sq1��r~;�ak�&7�x�w�G{
�䂁2�sLWާU�ESnJ
�XX.V�/�
+�
����T4�
+�ko����7^Ȁ�����Q���{\Ԛ1C�w

H����`&����তsS���p�<g��3#Y�屏�S�Yu�����1B J�Ѕ��u��S��!�]\���L�cz~��]�Q�A�cM�b|��GP'������J����� p�vZL�\���bT����
�[L
+endstream
+endobj
+1147 0 obj <<
+/Type /Page
+/Contents 1148 0 R
+/Resources 1146 0 R
+/MediaBox [0 0 612 792]
+/Parent 1123 0 R
+/Annots [ 1144 0 R ]
+>> endobj
+1144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.558 408.505 244.281 421.834]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1149 0 obj <<
+/D [1147 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1146 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F7 1115 0 R /F13 1121 0 R /F1 1120 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1152 0 obj <<
+/Length 4549      
+/Filter /FlateDecode
+>>
+stream
+xڽ[[��6�~�_�3O�c�!.��z���d.���ݬs�����-:��&)w:�~��"�R{��K
A�P��WU�tq�H����7_�Q��K��f��naM��t�Qb�z��i)��JZa���E�-�EW����JY��}}h�M�@�n߾�����7n̞.D�-K�6���槷�bo�[��rv�H��
�\"��[����ݤc��)qƉD䆉{ܖM��~�G!F#�ML�a��O%D��YP���.a�8
�Z�-��x��oR�^F�qi��~�7�R<(_�����,1N-V"�.�q�9=yb2��	$����%�>��ֿ�x��e�;�/�Y.��&B��y��&�����t�N݄��1��1{��MS7̴�[�/��~{+��;(���PnxHu��7iF�a�i��|��XD&��"AL�D��
K`��@�H\�E�/8�Ӟ.�`�C[rߺh�[�]xM��v�T�d�AM��X5ecf�%ι����ȕJ`�a@��+�_�Ef6:QYJw��½��-�O�
�
 [...]
4�LJ�]E��¹#9w
۲��GW�6���ୋ�8��,�|�ih�͊���L�
�{d�
+�8��_��X6/H5�b@����6O;���ܽ/�mM�ۼd�2��aS��1V�{�r_�c~���/vJǮ����g�`�À&0E��/�]�
�L"�EF�^
'�]��->�a�M
cc�C�
v�ew|�/��p_�.~�x�
���T���v��?���
���b�R�	���6�
'�T��x�uǣ%P]c6�uw!6��Ȱ��b|���-�v˿�����R��"�������@��
�!����熬Җa� {^0i��[0&C
��\��F�Q*�Lo͉��S���6���.�M�i�3�l &'s�����p
&u��T���_İ#��:�Ԝ(H���~6=�ԩ�Ø4���o�}`����6�z@:dp�	N���!�"F���f,P0�\�s�*�ȼf��6}� �;�O�b��X�����U��%�����1H|9,`��~�L���>Ff�a���/�ֶf7E.<r��LͳR'Y�
۶�8���@Y
+(NM��7�?�r
(�G�.]�3�Dfjdž�Y�͕�z ��4�@�	PV��2��g��-�U�������÷�x#�
@��xT��o�`J��{�%Ԣ
��2��HI�z�`�*���Uh?���$�5��;
��gc��3�\�
4��oB�����'~l��e �h

vya6nV����*ptd��w��\!>��u��wO�s.��.cεw��s��s�-P�Ds�����(��>�,���59e��|�a[��o�C@�Ľ,��[�β�x���ڵ��
��7�h�Ȇ�C�]&[��+
�)
8�1DuM�\
�9~9>x��aM8���A�o�_
lj�8��_�ͦ�a%@{%�p�;Tg��a��nbg�v�c������e�
��`>�4�.<�V�-۔�������\��i�
�v&�M?�$��x�
I�O��
�OR#��2��t"���m��Q`7{���z�4�,�8��)�(��
GcF>8���#���3 �|�� ���
+R�K
��|
+f�q��Sx,#�A��~p �J��xp`F _I0[5�~@O�,�
�r�C�dSR�RcQ�D�aS����ní�m����c
u�>�f���+T;4CZK���������^�ն�mZn�
�äl>�%�&�8�3�ɍ�m*�m"��Ht�3�)z�(�
+
���p~��S�s�3�&���f#�h�xd�=ңT6 ̠
L���}|*���p�X�LC���LkݧX��D6@���p�|��4������bq
���yΏf9D d�e&k='l���>�G����{1�����'���);awsY���S�H��" �Y@�8�6�8���d�&C%�O�K4$���p���+F��
��&a��
��I����B���\�~��-�d�Ia��[>C�����f@xbRA��#����d��ʭ�uӔ�ޡ���'(}Sa1�lJ��dC at mDLj >��Lbjh��u��
�招�x���|�
�]�Fd�EL6"��l�r"�}ބ�,
���ʚ$R�5��e�G�?�:�Sr��n�K��.�~`Zt𐔈�)}��Q?B 
�s�D�(�
9��f�.�ZVbFml�R_.�༲DK�
:�,S�AӢ��E
M�Y1�ɸwi���������_��$&˜#��Qj��}M� �rӓ�<4�~��
+�{L�m���t_h��y�b��U����lۻ��~ʋ����_��)߃��<C�/���ɇ�f&�=�﷑s X�*gf��{�j���q
+rmH�ק �4��E�-z>V��񻻐��:�%�3��b_b������S��@��8�Y@��
�*;�T�B̗�5�M��WۨNb���!MM���3��"q�5dt��ɫ�`�r��j90�,�<�
����%���M�k����0���Z�?���l)�2�`E5��X�+� ��w�/��R�
}���Mו�
�[�_�Y�g��5���2.X������	�
��8:>�L|zJ�el��L�F�D`�mJJ����l	M��s.;�@����r�
+
N֔-�&�����ZVы&�e��Jen�_Q0�j���	H1l)d�1]]Ѱu�ǻ���v
𣿣b�y:����ӕ#�}�f]1�pd����NdzRM��p��K�j�F@����.
����]�+�
<�ʎ

�k�{����2M�xו�P��\��� /���
Z(�dž�S��W��彫���0'K��Q�}�G�	�I�Ǐ�Zf�Aͼ��9��� ��^,��-
B���͡
߁yG�C��X����PŬ^�M�ؓ5h��>lNɈ��zG
+�f�e��啩+E
˦��^{R�D&��KRo���O�{x��2�1��Rg��`&{�
���W+�ɚ
��������tx��J?� �g{0$���0
+�u��<��\�\�p� �
+�^�
C)��	�Q�LR��?v� '
�Y�.�	|������賿x%�R×��y�@
���+��"�ȹ�n�H(����C�~r
+�}�����a����9	�/�؇�pi����0������_�����P�+:-\��_Α �!sr-0J�q��.�+�R
+c�����
ފ�Rv��
+n����"�3���s(�T�C�&�壬2L���q��?���y_h}��A�rǓ�U��R��
+��ԧ
�+�{N$�oY��'��5���%4}�Zaz�!����{K\i�/�~�/�B�K����d����V�~���p��B9-?m=;�/Ǧ!�ZdF��w�a5;�jv
j"y�̣k�M��A�sr'$���ЉM��j���vA�Ɂ�
�a
���P��u�l�_�Oc��p,i=N�_c�[������bˇ��iT���I�<�7�}�+�����Yo'u�˧3�+��{�w�q�m��խ���r�_�cf�/�������d���"�xx����X2
��_��<
�M��i
��Ѡt�>�;�?D��Ԉ1��e��*���%gpc!%�Oj0u�i������=�
<:�Lql,�� �.�!��S=\\	ˑ
,���
�λz�71�+�nrC�/(�v�u
�A�x�%�nM��5���Q�͉�-�"����aas|
\Mo�df�꾞����:��/LN���]�q(9�J�W��Z��:
L
��
��K����#�w��α�VeӫlQ"K>q�?�q%�a�����|��ލRC�����
{ʚ�e���TM���]9�7��?
�aX`>$I�;M�������
< ��\�@&�.3K�>s�� aSq,�o�LJ���0��p?:���H"6s�Tt�8����&
J��w�C�����
���Zڌ� �.s�����
+�8�d���
�I���$��ô�K��ڔ˯^%���$;z5�Q���l0v���h��b�J�hA�3?�)�Iz�-�^�[�([���P���#�p׮�i�u@��%8�}Š
���զ�:�C�s��L�<�iO�7@̕�
5���3ou�NpYO�J���r�"���P[��k6���V�x���ρ�CQ4�
��(ḷ�Q�!ځ����^�I�w�*�"P�‹.�=���6R<�����g�W_@�E��<���@�����
b�!	ȸ�_D��se�_��l��"��LQ]ҟsZґ���z������7��ȹ�
+endstream
+endobj
+1151 0 obj <<
+/Type /Page
+/Contents 1152 0 R
+/Resources 1150 0 R
+/MediaBox [0 0 612 792]
+/Parent 1123 0 R
+/Annots [ 1145 0 R ]
+>> endobj
+1145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 687.329 519.955 699.644]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+1153 0 obj <<
+/D [1151 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1154 0 obj <<
+/D [1151 0 R /XYZ 238.266 583.579 null]
+>> endobj
+1150 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F7 1115 0 R /F10 1116 0 R /F49 967 0 R /F14 1030 0 R /F16 717 0 R /F13 1121 0 R /F12 1155 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1164 0 obj <<
+/Length 4593      
+/Filter /FlateDecode
+>>
+stream
+x��;]o�Ƒ���<q�
���&g�[#��{�����CI�9䄜������&���f6w1�E�_��*%��M�����ۛ�}�̦�
#���~��Xo2Y�F���n�c$c�n�r}7�U��c�wM����O-�8�
+6�k��ћ?����F�`�n�4ε�T��J6;���IbU�'�n�Ѫ�%���7�}��7��4��Ef����.�T��O��Q?����nG��Xhvl���7��uǓ���
+�A8iE����+!��-b#�f+e������D
+Z��v�dҡ�û���h_>��[	�O��-�
��"�������E�r^���V��4-��R�*��wJZ�yKL,�t��6��;�w[a��.V�*K�[m�y[��
+�	i�ċ$N��?�!p�<V�D�p�
��1�Za�<) !x��*�85@>ޢ!2��	�x�2p�E���ne.c��L��'O��1�;,)����T��hD�*$&VFl��"�4G֡_˧�h�]�LͲz'�豩!N�w�&y��_���4{���m*��?�'��V�E:j�����{�"��T���� N�T���
+�i��
rQ���&��^�?�Aƙ�
 �?y��]o/
h΁AT4/�"e�3� (�DBn[�+�fЮ�e�P�4���v�߇�N���	��� �����8+�e|x
`QYv᳚��Z�
%�yᱶ�7�zǀ��+D�H����G�;=��/?�<�
+�~�&��
O6��,�E��B:�3W��
�	�%�t^��!'����|
(�r
4�־�"5����4�@�>�<����uy<
5O�N����$&�^�Ȩ��7g�TY��܃%����S�kvv��-����t@�@���Lt?���PzM��n`�,�^��>�Y�"]�u�9 !�#jb�����hj�h�ـ|	�V�=�40�"���h�!���6����6Q<Ef�;1��n�~�z
�b��O��Z#
�,�
�32���
��5�M
�Eo@"��I�=�F�#`�ݷ��/���
��ϥ�OgoRd�m����g+0��tb,ss�DOӴ�-yt���� aű�t<���&�jOuH�% ��>�0�)fk/ [E�I��ai��`�6
�. 6M�@�[�0؞�
,r�!;�H-5Š���%���x�Э44*��= �=����bb����#��HӐ� ٟ���]�
�z�|d�y�@�C�P�af
$��]�%��}[
�ȳ'2�ԃ;�](�w5u��~CJ{�!�H����#���.`K�M[޵5�
:h�
��C���d `�4C
½�8
(Q�MTب�ˬM%3
��a(�4S��B��$k�z����j-ޑ��.<r:������L
$Ε�RψlZ��w��t ͱf��d�$�=�rt~
ɯ��
�s�`8L�
�o
bW���
��o�&�/l����p� ��֦��Ŵ������)��:GΎu���B����9�u
�$��� 8-�t�[Q
+#��OǾ��}}|d
�|8\4������cM�]�����ː�^���w����A�����D�~"���X��Fȗ i`>a�Qc*b�gKj�
VIB��f�����_���,~F�p[3B��>��@�b����
\?)��M%�<�kR�KS]��<j�8�B�
BVo�y��^�"0�
@ӛiq���\��y�]��:	b
&�V�~p�
�ܬL�ɖK[���
����b�J���(G��ݩlip�H\��7�4q|tߵ(c;"����5pڣ��W�+v<���x(��B���jž����
��9X3fm� �w���D�=S�o+ɫ�œ'3���0�� -0
i�SU��xj���<�� )VJ ���&�v��k_ ��Wg�������h�"�����s���<�{�s�*< :
��]c�.4��`����
F�{�w��M�:�h�
���jꮲ6���y�q��E��g���A�Q(u���
��b&��d��X ��$02+V�xIU�s
9�q����?�-�2�a�s����e�w�����L��b�~��c+:�±�x���oH0`�$��6�
�UA�
Io�/��v��C��|N�j.�j��r�E|
�$,A7�K@�o�xͳ}̯�:�0���]��a�*S����N�q�VfY�'j�z���)
+.��gR���f�g�?"/hٟ�6v
V<�b�]&�˭����R���qh}��
�}`�j�͇E��h͈����^"�y�s^���kxi{�$�P�9��ZX�+�Li<������Fs�X�!�ɈR���]�w/�C�
2�1�h�U2�\B�� ��ED���A)�E���0��\��K����ߺ��i�����w8~
r��Z�_Y
]#��>mD��Ǻ�V��Ҫ��:j��7�Ki1eӽT^�?
^������`lW�t7��ٹ�lܗ܊�c 9oE�]�J�eY�%�:��l-�X���	�`ؔ�

܊�S�e"6�%w�&�!�f��,��U�NYEmH���`Y��MO�?�c��h}ҳ��gcݍ�qK����107�Od��*�˗�\%��5(��Ϡ[-U�7�0�,
��G:�\4�}�C�
��$_
&����=
q���~<n�CSQ ���x]d�Dy=�����Z�C�&��_��u�§�p
'.��¡髴��N��2߳�˄�����3���w�-�w����L��E4��({{�i#�
�9� bJ�|�t;�k4p��cN�N��v��
yo\8|(wu�T���ȉ8�e]�^�D�P
k��������B�_Y^��\�G-�/x
+���ЄN�p��z��b��
- ���9�;�ZyD��E:y`é�?�|H����ow~���×ʢ#-C���p��g������#���iȳP�O��}?���
�3�s�bW�8�^�v�s
�2��:�!�-�u72Y
�r��
!ޏ�.��^6�<T-�X���d���~$Ybt�%�������X��h�n�l��WZ���)
+���z��Ó� �a�������{ ~��9�%mw�����Y*��X*�/��N,�c����u`E��倲�Ο��ꡱ�
+�d�ȷ��h*�Z �`8i|�Ē�-6#��̈
Ko�+�zz��!��������j?ߌi��q
 [�~΢`e�����'d�h���?a
Å
J�p�

����4��"��
�Ʃ�B
+�ᗃŨ�L�*D;}����'�������'чD����|E),4<�E*&vʎ�k"{jZ
�Z�
W�ʉ�Uy�����\l4�j�,1����,�e��^U{�ـ<���e���������c?��0�2�'.VgB�X�Tz6+٩.
	����x�R���7-�g8��^!XV3���?��ɦ�z����PK���tlO�����4P`J���@Z�
�����ag�`�I
]�	�hvʊN����Se��z�JW�<�GW�
��<畭
+�X-ߗ6Mg۽��\2ʪD���F��n��T6�f��R�A�
��
+�u=���ʢ�d.t �6�+�3�
$Y�L����qRANS/\�Oe��5e*�$7+Y��O�l��X�T�)\�ﶩ��1c�E��,��g_
�+��:�Z0 at Z�ѷ�6��9����'�����nv<��l�rJr�î�b�˰�g at h�B�����Z�}
+�v��DT|��%\��P,���72NE>�(� U��&��WH"�+�����Z_C^^AXS�;������u>�/
��–M�k2��&��=�9�"��-w]r6�13Q�~�
+׃i`��
W
�E�uk�yA�N�X�+���
�4�c��ʗ��^��z��A&ͳ�Kg ГLuU)촪���P�w�dO��N([q
%jÓ%
M�B�S]"
+��@:Žں��n�v�6��{y�aA�i��k�rd����P��z-\�6�K��,G7�
�:����,��
���/OAQ��q�PZ�8�/�p;'w��~&�=�e��މ��\�X�$�B0����K�i
&4�[��!�Q�(4v���J�kڞ�N�����
����0q��w�+c���(U�W�
��X���H���X�#.���`��;�'����B_"��
Sd�/�"��.H?�X5����Q���v
O $�
eC.)�S��#π�+O�f�
+�����B�ؘ�p�4�|r�}9���ah��r��#�M�������SGPqhu�;$�('[Z��/mપۉ�q	���؆ 3��eSE-�5�z�\q��M�@���H��P��Qf�Q�6�j��: �*��\��'+ui}#=�4�uy����/�����x,��Q	[�
C�R����\�vn�.
8/��T:E��Y�Nڠ��u^S���(�?��@��7hw����j�n��?�d��q&��G#?0&!�
��p���KF5ӵa�a���P6����F������@��y�����\��h��/�
z�+]�
�G��o����?��PC� ��x�LX���VS��*�p�)J�~a
+ғ�@V�z��:J9����x9u����L'
v
+endstream
+endobj
+1163 0 obj <<
+/Type /Page
+/Contents 1164 0 R
+/Resources 1162 0 R
+/MediaBox [0 0 612 792]
+/Parent 1123 0 R
+/Annots [ 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R ]
+>> endobj
+1156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [172.328 597.076 179.302 605.489]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BBH:89) >>
+>> endobj
+1157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [183.397 597.076 190.371 605.489]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Byr:92) >>
+>> endobj
+1158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [194.467 597.076 206.422 605.489]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Hin:00) >>
+>> endobj
+1159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [346.563 597.076 358.519 605.489]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HBGLSSW:05) >>
+>> endobj
+1160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.651 489.636 387.373 501.591]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [146.065 348.664 153.039 357.077]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+1165 0 obj <<
+/D [1163 0 R /XYZ 86.4 726.045 null]
+>> endobj
+58 0 obj <<
+/D [1163 0 R /XYZ 86.4 530.854 null]
+>> endobj
+62 0 obj <<
+/D [1163 0 R /XYZ 86.4 115.693 null]
+>> endobj
+1162 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F14 1030 0 R /F10 1116 0 R /F13 1121 0 R /F7 1115 0 R /F16 717 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1172 0 obj <<
+/Length 4630      
+/Filter /FlateDecode
+>>
+stream
+xڝ[K���ϯ�K�n`GIQ9ر
8@'$�4ju��j�#��;���)J����2M�Y,��"'ޝw��O_?=��;�Hu�{:��4Jv�.�Ԩ��q��^%�G��4����.�����l�&7�?���
��t�����>=��A���N��l�'鮺>��s�;B˟wqd�|���]w�)"
�v����=�!uy@��Ud�d�*RY����Rw��$��@
����|�5�
	�r3��X��M�>�C���
+9�l
e� 4}��A�}�G��c򨈭�ykY��:�l���A��r8r�7�O�2� �B�Ԕ��|��!O��p�Q�����z�����Q��OH��Q+
�L�
��
++|�8�h�t����`<��-�m�}ѻ�O�~m���
+b�	(��G�hd��
ǩ|nky�ˮ���6]JY��V(�/\[��[[�
+�h�f ^�F
�e˖��S���S)�؟^
6��^��߈��Է�i�ҥlO�����Ո���6
���=6x�e۾p%��?�6�=�o���oRj~����/�ۯ��8�����,AKb��_���3Q���-�ã	��;�4*ϫ�׬�#���3�8J�� <��Y���&��b;�g�ˎ��ͷL��,��8%	0��L�`IŊ��~���

 ԏr��{�@��
yֶg��R�m˜U:��X-�����f����Ӂ
+&����*QjOV)��y�R�pΑ�,۱�Kwl��d].}�T�H��`
d�.,�t0�ĝں
�`;+:2a�]cݍ8�1<�F�g�;`7��MW�ByD�`@[�6��ڠ���،-���e���)ֳ5���pY3������*�>�ze1����~��T�$e
C@|��|��8��?0� ��N��	MzFJ��s{%�VE)��@����w�bͮB֯ʱ~�i�
|�^
	����xC�%D��`���Rʔ�~�Y9��
�I<��L�
+����X��v.[F#�����pVr�b���f���,<
��à��ݫ-��r�[�˶c �KSxW���81��E9 ��ۆ�0�h�u\.7��0
~��`�$�ϙ<�),k���c��'��H�PK6�f�$
�Ʀ����)�1�29��U{+eII��F��&�&4d�3F��~PZx?���iF1�i�X,�8�a�t�����Wª�Z���
^����f �;�.$oTB:y4�5n�X˭0e�'`� '��a�>��
+
�)�������0uz4�q��G���2)�Nb��w�3�bF��^
+D��T�
��#����|���3>2��&[

pe����oݜ�<~9X�����‰֑���kojq���� �K!;���ʠ:��tm�H�;gjg���4��Ȼ�x�l���2nY�\��'��NY�1O��å��m�QKC
����I|�r�K�W6�ڐf�2!"t��
1�SU���H���k=u��+���Я^E�����Tj
���_��Q��j,�%��e���<P��=�0�֬sR���,�k���^bE�	6���� �HD>WFY%�r�9��4wr��S�
oƏ��M�2
��]-�I
��<���9��{�N�1�=�����ϝ�8��DfFI� Fq��j at i��
ع���18�N��$HN�B8
+[�:�� �c��\�*P�5Ƙp0䙆�9�^��1�A7�
µ7��?�!���hZ��,��
"�6�g�� +�c�����/�\.4���G�Ig��G	&O���+c�:
�(��2�,ɧQ�o_ă���z,�"d�;�xߏUӶ�OA��1H���H	��
˶�q�LY���\���o)�6�O'��7��o
����U���71�r��%mP�k���
�kbb+
ʨt:����� {�q��� �$�0�ŒgK�`lFqԎ�Xp��2|;�m�ڑk���Vք�<6��;D:���>�.$q���ܛ��/qoX"�FEt[�.A
aV�N%�<�����M����B�-��� �m��,�E�n�
[�ä`c� {d[�$��;^yƞ�kuW9�Gm$FE2�b�-!����n�Q�Ko�yq֎�47����k:�p\�?���w@��M笢�d+A����߫%�
ڡ+�,�0��$�;RD!͹�+)�CGg��y�_Z�����%��B�7c�m������NNϝe�Rs�Ah�')��؈у�S���_d�E��K<�
+MC�ݭ�O��D���8�B�ح����.�a6Ci�R[�O�������Wr
��$p
�g$G�n|ZQ�������Z:C4�dٔ��
!�L�M~�2` ��^8b�RhL���t0:
~Aխ
��q�ږzPT6�(0��qB"��7	4�w
��V������Y&l!�-T�S]M
Tm�_�=[
(��
��
MIQ:V
R��$8ґ� |�vb,
+��~�W}m
�
�Gy*į��;r���V�Bc�Du�� �A�2���s�[��[Y�t�r�J呵���b�[(���Gh�uu"��s
�+@�8|�
$P�W3���rB52o
�jkKAƧ�d
# �p�U�d�
��ش�
\�Y>A�X�y�p5n� K�<T9��F��a��}%�4e�i�
]$�JrK��_d�dg3�P��v���R2���3R�6.n	G/v��c��
�n� �O�z��L+���9)zH�#�Ǎ�2���We{���C9�J�&��
:�e
FL���SWik�RU��]ǀKK�
ko��5�B
����+̏-�n"�AjR$[��GA�a>�M4��~��rp{�vB�q9

ӭzF�X[�O�8�{q�X���X�#]���p��ٿ��A_&m|�
+5?�0gָ�^KoplF�.�n��#W�
c#�f�Nm9� �JhCc)�J9D�5�bXT>�(�7݆�G�Q_tm�E�R�
L+�*
̍~u:0IX�Q�N�s��T;g��\������
+DS��^ܥ ��H�r��Cl?�}�`p�п,���0U�6WbC4���
4��h͖���N�%���
	��Tr��T���uylZ�XΡgӺdB�}�*3��3w�<�$J�kK4� �ߟdr!S�.i��T�s��b��8�C�t*����ȣK�� 0v3!�6�ȉ�$M)j  [r��BJ�|�j��`e�O2�3�]&)�B�Ǟ�����ȃȔ�v
�ߧ���o���=�� �scߐ�

��2��'��{H�~�v��x�
}@��Dv/5™��1<<�#�Vl�������0'_��C�*�/
Ppr���l�./��|ź�<
+��<�^z���4e!XƯO���qG��k	�i<iD�1��gb궥�'%�W�~
�3TX���+y��c��Ɓ��.�>�{xp<�)��/ V�o�9��,c��E�� B
c���;~:S^�� �&�||25l�&����rdJ"����qh����z�{�
�d�i�rH#�.��3�;��h�gL8\��r-��7��$������O�����h2�u�z�^��t��
vK.��t��M�o���A����H0���\���LJ�} C�od͞�3��ؽt�S�
+!A���;�� :M�(e
	�{�4��
I���ip�(��Ӎ�
j�v
��
+�(2��^m9�y��|�k����PC�ZV$��+�Ko�[w�>�hp�R��qV>�	rRIm�Z���a�+'�8ؓ �&00���������*gXh����qh�yb�����[itw�X&�`!�&���^G\�@@����P꣺��w6�[X����DŌ�>�Pi��JHg��}31ƽn��;�{��,@�К�}ȋ�a��=�L���;Q�B�4I���$�]P/�Y/.RHzg��K
���ʼn푋rd�>ƺT�
����?�JP��Y:�!�>78��v�k(e�r�y%���+(
�($���?>��GD�Į��
�|SLa&~�Yz=N�:�R�+b���
��
��le,�̰NM�	��537����Ux����̹["��ԃ�>��f�4H;�4�Al0�
�
�5�bZ5���|:	���Q�|���b���87��wz��&I����
�$�3I
+��/T��
|g
+&&_ �,�竤?I�\M�f0uA��Qr��½Q�	��@V'�:`��/��]	N�uq�"�|2F4���+\�
��F�v��x<|	��?���ᮡ�q���h���|^]X�E_v��o9*��.r�R��B����:�7{Z���~
ԣ�x<�4�D9�
�Ĭ�A`�߹�zR%ڇ."�*ޥ A��"-��:e��d6v
`V���?噏��߃�����]�j\���׹Y�+A9�xj�Ή]~
=�黭�À����M��N#3��rS��f9w7P�+��ž~غrQ62�����q����Ve���F:����~�c�"�
��}r{�t�ĝ���(}IH�;E�r�U,9K&1���rxn�S��Е�r���=��<��"X����G�p�3����<�T��B��=aFUh��w�צM��rٍP��� ?�
�S���%
�%�pD$1�&C��ݓG��X=P
+���.}�^ ��
+�!~�-���w��T-���CnI ��l�p[�&c3/Y��mx�ߐV��5�}B^�H��Ľ����tqJP��Xn7��w��>=�f崆
+endstream
+endobj
+1171 0 obj <<
+/Type /Page
+/Contents 1172 0 R
+/Resources 1170 0 R
+/MediaBox [0 0 612 792]
+/Parent 1123 0 R
+/Annots [ 1167 0 R 1168 0 R 1169 0 R ]
+>> endobj
+1167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [484.447 352.337 496.402 360.75]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Hin:92) >>
+>> endobj
+1168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [311.141 280.606 323.096 289.019]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Hin:95) >>
+>> endobj
+1169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [257.633 85.517 272.356 97.472]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+1173 0 obj <<
+/D [1171 0 R /XYZ 86.4 726.045 null]
+>> endobj
+66 0 obj <<
+/D [1171 0 R /XYZ 86.4 140.991 null]
+>> endobj
+1170 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F49 967 0 R /F14 1030 0 R /F38 773 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1180 0 obj <<
+/Length 5199      
+/Filter /FlateDecode
+>>
+stream
+x��<k��6r��W̷� ;:�)�����!��A��F���N��i�%����O�(Qj�L��\�H>4Z�(�X�w%����Wo��ݛ��Q�����rW��_��0W^U������ꛍ*���.��_�}�Wf������m�i�Zm��
:��p}�\�ˍ��߽��/߽����+�Ei���Ûo�W[���+Q誼��=\]
+��W���_߈�r
��d!�#pUΰ•4Ee�Ս�Eey�W͡�����kX�[XHKص.Il�VQn��[!�a�
��}3�[n�
?�
`��
���н�R��<���q�޵#�RPo�G�)`�h�;|`W�!,�f�F;!&󛡽�+�F��R&X4�0�A�{
 �\Qy]����.Lexf��.��Wɘo�����6�m����t
�~2�ԅr>|b23M��U�sH���ԛms��f��ժ��9����ȋA{���y{w]?�7N���﩯�����*���᎘[�zX<����OHuMx��S0Ӣ+,ȕ1��0��	���=�q�%60Y�������l
���Zn�[d2�  j<�� ���� ,��M�7Q�
�Em�-��
+�0�LG�Z0`?�Ԫ�/A6Q��?����6,K�xi��v%L���-aM����^b�o`�����Gk�Hk��'�O6ZCG�#
oy\*<�
p�
W��%P��\e�߅EJ������.za�����[p%I��?
?PW �0
�4���$P����<�
��R]��������a!?q���i���6�p�G� �
dV"AU�� B��[mD���Ԫ�)���3�
T���8
�,�
+$��u�8�'���H�H�
��C�B����;j0
�-[T�p���-����F�<�w<�:�	�Y
�=�
���X�t|�,
+�������C��X�	�v�"K�Z�>�
l��8������-�D)��dw���qDaq*�lY��]$�|Q�i�;�{†���w�6g��}�*P����	ޜ��
:�(0A��i�
�Gj�
�X}���N��}�+d�oAQ*�Tٙ������)0���?!5=��|�@�X������n
tF��6F�O�PР��1�����e౸^�Ä-��s�o
+!ե;��u\J�n���gș��P�<Ɏz�]�%U!J�Ģ,�KӢ�63CU�R��KRh
��Ӻɶ
x�hdU��A5<�h
)_�Ƚ�A�
��r
�P�?�~����\m�}{�
[�v���=��>�����ǻ[0��~$g
�2���
�8��ģa���2�Jܒ���H%x�L��m/�ҕϣݬ$ �
������xŀ�Q�fA;�Q����=�^�����H
�����GAWI0�Z��]M[ƒ��TQ˜DQ.Mrp�*}!�Wjv�� &o	Wh
1 A�CW��X�uB�
/{�����u�`��K��tm
l�1Z�Aj��
�q&a��'۝$���{v݁����{�ۏ��H�Ck}�<#�LU8�.��a��@4�/����?���^
+�R �	�At���d^�e
�n�c�x5�`w�Y@⦪��?��h���jhܷ�7�M��᪍=;�������Ho�s7Ho���>X�
�Gr�
x��^k�)��BL��������0N�蕟��0|А�
e��eN/Z�S(D���/hI�4=��=#8=P�]SЂ艄R9
3zs�(ȈTXs�(7+�P鬻
/�(O0�
{�T�Zv�Ղ
q���Bb�=@�R�W�Q���<�������7��.�M��BX�;���Lz�1�"
+���h
-W�E���'��J{b�Z;[!بw�?�Q�XC
(�!�.��A`Ӹ@�1p-�0s��!�ȋteTQ����	>�Yn*W�$W��<�Y��D|�l�
*Z�� �����?���}�Y KT/[�YBq9Bi�@'��G-��$�!g����1o�^׮0Z��^PgU�� ˡ�w�h���;x�����%�
����L
?4?�о�쓱�/:��
��|��מ��#0mf7l��Bb��2I�W�5|9�x=4��t2�P��Vea��f����̅�k��)
+	s��B.�'�
4��^�z&.�B�R�o ��8p &A$s�qU
+|Gp,��H]���F���V���1���}�D�9	�2���"��4��=����@z���-ن3	���!aʆd-*_x�"�4���f� p^�&@�
��_Fᡗ
���AG��\a)poZ
+\�a\��҆���tC��[PQ!�
��8��U���
���\�
l�B
����ƚ?�H�a^�	�l���W�b�
�f�A#D�BZK�Z����z��5WΌ���Y�55��
�r.L�g��Iv�}2�S}�*F�(��o�4�[%x*Ǚ`w���V�&��
vw��~b��P����̩��=��Ĕ ��%f��b���6�h.DĔ)�QЇ��R��f˳Q��c�
~G���;b�����G�]�m��
+�B!7"&y<I�	�t��X�k"�(��� �����V�Jf���^��c��S�
����ɩƞ<�j
[:�#TL
��<�Ɓ!���<t=�0��5�����LU�Ti�+���34A�*��
���
+ʼn�Z�A�i�9.3�9��q�
+�'��M_t;��P��\�K��,T�#��Ʌ��!Te4���Χ���5
+YM��Gf����<K���e�Z̹���9yҺ�,�s�|����W!n������˂q��r��*��(Ϊ2��\m�ʞwsl���x��=�V���:�d`AgM �>jóN2�*����͔��.��U1W�c��|x���8u\	��t,FJ��MЌU!C(-���O
(p��ۦy���X��Mach��B2�J�$W�	��iU��yB�ri"Cs�멍I�~�-?�6�e�)�`^�
��k�$�~��2�n/X
D}�/���$��Z��c�K9���

��� ��?��W�^[��OE/�!����i~
�lA�d�9�,>��ڥ9r����F6\N�X�կ$Q-0O�U��,K��
K��fK
s����<TZӅ�>���
��!�|מkL
Cݪ��CF�8K�
mhY�ʼ
-�6����Ҝ�X��CC�BN�O	s*�N5�m����(N�JÊ����
K�
WrvN�MN�$]F*i[8�>g��#�V�S7
�Y
���Du
"'�b��@cΆ+� [...]
(ٗ��sLeV�������3�+
+��oZI�
"_�dU����y�)�`l�
7v�
�i�P9�W
�5v���]G�MiW*���#��sֺ������
ۥ$Y{���%~��

�B��	��-,N5E���v*�X��ŕgR�\��V��R��n�"�����d0���y�q��7�m<�A�+g
-ʥ���a��
�e��W��}�J
+�>�
+鷫E%�H�z�Lx��^�n�Eiͩj^�H'Bm�"Z�)��I��X��3���e������`Vl���d�'�_
��Q�.6�셮�=q
Ϧ
>G�y��ybqf:9L������,u�(�g#'
.�,�,"@�K'_�e�����=�{Ȇ��-��2��!��"�j���2zq��R
�5QFq����Ǻ��1��`m�_�eui�{90�C`�b\��#1��>?هos+*=��+2���gY�CGP�Nl
�Ps��C�ɛ>A�a�o�‰;�i��/i��֠�<�F�k
+�!�C1]߄b�Y�
+�<�!���0�n0\�n�*G0��9��:���U-���Jd�\|B�xA; 06K�ׅ/WGZڢ)0�cB�!�=��+V�g>��
ϕ,l� ���*�C8���t
:�{���2F�t2V�'c�=�`��v�3NS<��Omw䑋$S�
x�QK.�օ>W�h��<�)
t�d��/��X�ԎM�ҕKX�����Ν�Ɏ.1!o'�mu
+qG�!�
�  �W�����ZC����O��B� ��quX
�b�x&�!\E�n�\�"�;���LjTJ>���
1-]ř�����/�JLy&��@�k��EY!O"���%��e�{�2�Z�N�vq�2
��
=/�[�4Z8��O�&`���y��`��o;�P���
�x^�Z���Ւ�oT�6��\α�@E^�Mmj:��
�����3^���*��q_��t��S٢c�
����P�
����pQO-�*JY����]�W�_�:,�#�܈Ϥ��(��Duˏ̧O�P�8��j� ������u�,�~�m������{��!��ϕ��c��뱝�19F�O���p��5
+_
�g���ͬp����������K
E�揟���0��sxdY)����  
���^�JO�Jb��E���z���r��^��R���$�TA#��)4~G%���J
��B+�|�JJe㷫�]~�
+���*�
�
t�Q�(����
+��a:K�p�
�mL�ijD��9[�Y��:��Y$�9��`����L��*�>xK9�&K4�O0���]=�S��'����c*|� VW�S��
����_��c�G���ʦ�8�
+�&���q��SP��~����C|�Ws�������i��1����G珄1�Ypbl��z'�Ԍ��
�
�3(M&�_sG�Ĝ5z��`���4�R}I�N�	6�+#�)q���t�R� `;<����,�q���`%p�<
��-}Țĩ~|���Q���d��~A� ����<�V��I���qM�O>�L~c��ɂ�>ʹ�e�R�*
a�
+D��*΋�%�&��W���Y
ԘM�f
��
+;A�����!r��]�K����3<�g�@�> x�[&~ael�T��R`꾽o��2~Vl���x��
��z��O�g����[���/Y�r�۱n
��"fҸ�#~a��7�ܴ��v��oX�lQ��,��di�d���>X��Oo9S�R/����ͯ^<�#�(�C@ϧJ~|��!����?�i#g�E�"��bR�Ù�z�W�^�O��"{�Ο��L_��Y)�@���*��F�kc��.E�ʤ,�������;S
+endstream
+endobj
+1179 0 obj <<
+/Type /Page
+/Contents 1180 0 R
+/Resources 1178 0 R
+/MediaBox [0 0 612 792]
+/Parent 1184 0 R
+/Annots [ 1176 0 R 1177 0 R ]
+>> endobj
+1176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [495.343 618.448 507.298 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HeSh:80) >>
+>> endobj
+1177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.575 129.99 180.298 141.945]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.7) >>
+>> endobj
+1181 0 obj <<
+/D [1179 0 R /XYZ 86.4 726.045 null]
+>> endobj
+70 0 obj <<
+/D [1179 0 R /XYZ 86.4 182.695 null]
+>> endobj
+1182 0 obj <<
+/D [1179 0 R /XYZ 250.293 120.22 null]
+>> endobj
+1183 0 obj <<
+/D [1179 0 R /XYZ 249.377 65.093 null]
+>> endobj
+1178 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R /F14 1030 0 R /F7 1115 0 R /F13 1121 0 R /F38 773 0 R /F1 1120 0 R /F6 1011 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1204 0 obj <<
+/Length 4414      
+/Filter /FlateDecode
+>>
+stream
+x��[Y��~�_���#��$����#v�$^ ֛@ӭ�V�n���;;����:�9�� O�H�X,�_K��z�,�?�����ߙlQ�E���۫��b��ugF-ޮ�"��_h�2�.�u�)�zY6�ƙ��v_���t���g߾=�p��z�P�Z;�-���w��
+Z~\$�)���m���R����gɔ;w�\V�X�3���+`%7Q�.{,Y(�{�㧍����y�EeSmϵ�|ϖ�
�����%�|8�+�աꛪ_�(�h���Zq�v�9���]��^T�A���6j�mUvB94}��
��|�T\�2�
��6��vS��j�U{��
�mt�
���;�&2SF�.ˁ8��.S����ڷ���I���]n}�����SXΑ��iF�4)�������&i�,�\���V��j�R�%�'�
?+c��㷦��r���<x�����)W�D���D��YN�_g�T~
K���vU�v�uf�����W�j���o��[X�
��h
���E��~�����
��ϠU�Zyc��_<�U�*>�H���آ�nH~0�<����JYըRY"�
�e��������z&-"u������ם�O�ܷ
����]�Tv��-�غ
+ҲE���
+uW^6�l���`]�ȬS��*ZKy�n�
�<8S~�Ȏ>4W��M�_vh2:�fA@��r�^�4k��o�y�Or�{���0=h��
+p-	���t�`��"4�A��A�����*Z�Q��H{�RB�Ds��q1Ќ`�
l�W��F�&��N�b�r��E��оj���	
b�h�Ny���5�\��-MFG{�R��I'��+�@�i4
p =i��$��⮸ #u�U�+��BV���:<�DK�$c�q��m{$��
>�#�
�(7<��j�5���9Qٲ
+
��gW�}�`n��
�2ov���B2ծ��\�9ERW]��a�V�v=u\}��ޜ0�}�>I��=�q��C�u���KǏ�W@�
IUt\�[����԰��0_(?4_{�|]�!LA��*�~8
i,oHW�N�z�۲�j)�?@xA%R�i�?�~
s�4����\��M�R��9X�Z}Ɛ��9e�t�FQ��U���"7��G�+ ��1���ȭ��s�T�V�ї�fw�I �ध��TZ�Op�� =@�Ev?kzac��=��bq1��J�)K�Te#>J�SB*�S
��BG��iU�>-ij	����è�	I�a���0�-<_���\a��^
_r�|�+�u1 '!'汁�&�~8��y�
�<N���:�6 �SZil�YL:�m�Xf��Mq:��mVL��p�̰tI�
�=����g�%lp�^��x��gS܅`��j��4�"�d�(�ǯ5Zi���׎���g ��)�ڛ�W	h�h�>UN0u$P
+�
��>���U����TM��@�L�
+M���������(�l]�2{0^�>l�O�
�
;�huzjʎL�փ�Y�\��̌� Ŏ+L.�&�Q��?�����L�,q���/��>��YZs�߅�1&nnɿ<���x���,�`���a8۷Ս
��0"�To��
-��yz�8��O
ߑ	�h
T��K��G
+��
G<����,��m&�	�2Lb;j[ ��,�iR<� #�� �12F\�U�%6rX�w-_�k���:t^��������
�nֵw[������%ֲ]!Xg��3�!��j`����Bȕ� t�ׁ���Tbϭ�;>��Ë��Gp�V1���!al��;�E�qg�Z��ya���97
+���{)�>�=x�{��[�,A���:J�z8-�ӷ���0`
+�w&z��'.@�k��cTb��)��@O8�J����nS}""EԔ]��8��
��>�Q5����%���Fz[~2r��� =���T��_#�=�c|a�9@�ĵ�2��vO �K
+�`
t�ܗ�4%�2|A�g��Š �,Q�HL�H5�}���g���� ��!	x�Ij�O�L�������Jt�hA�7bX
�9r�SC�ڔ���
�r
I�1�5n�+����Kh����Qr3`�
�~��M��B`��ocX�����y�$��������47���9���Wm'6�*$ �L�	�t���\�QB�O�jb��� �c�Q9L 
V�[8�Ӄ�[H���;�Oot�i5�\d	-��d�C6�I���r
Fs�_����3�jAQX��8�&Y�2
q���\���J��\	���z�3��BA T��m��q�d��bG��ıf���􉿕�1L
Rۼ�O�e<^�.�(=>ɄZ�� �+�Ch����O�(p������
N�2c
���aa���>�>䮀#8\v��@L�a]
:���SHGȢ@&��r�ǑQ��:��!��j
�`��Y�o�����\
a at +B$3��e��#��{8�ХtJ�}��>�^>c����К+�}����o��p<G�q������{�3l߫�i��F ��~Q0�
 "� )#��Ͷ
T����8����l*Z�i�a�kχa�Fq~0��8?�b�, �[7���d�vtc����r�3'��>O7
=��7Az�Z��M��
+;9����)�*{u�����ōu�����}�;����h4��Ԝlt�2c�/g���j*�a�����˻��t�g٣� �l��u*��Mb����Ψf0����b
ra�+$AU�I��Gs�>ٜ��_:�B�`2��rV`�hjOV��tt_���
��mޅ�.Q��6�Uɀ9��S%�E��Q%� ��7V%e@;ҹ.�2<����D�J�9/�&��0�!��˚1y�rS���n�3N��	@4ȥ�
_z��D��`nW1���r�%����&7~�֌�>�]���
+�_n)
�d��Q�J<�pb�cũ��I=⯿
�|�h��7磈՘I�,�����m=����)��C`?rhs>��l� �7G���㷗��8���5Ͻ[�ZE⩫i("B
�1�}��^`���";劒E��I1�T���{��/U�XX<���&tݐ�)�*o���I2��C�
�Ѥ�
ʏ�� )���I�J�j.������`�F��Ib�6�a	� �:�A�6�܅7��O��3��_����(�,��`�(��Sj�Ɏ~
I�q��F�*��q�;�]�w(��I��z�z��w��t�/i�I:�
o~׵
��Yr4ܐqg����(�zG��b��θ��SL��&1��$��Kj��S���@q,
�+|ٔ��W��!�#�+�AJ>�t�3)��
P1('BB
C�`�R�C�!����X�lT�%?S!�F����ɇox�Q��B�Tۨ������,U�CC��t�2A��T���Br������R�G�\9�����6;v(o)$�1 [...]
�0��zXQ��;t�5��By���ʰP��\���H<],��R퐫*�97
+�
��JG�̊�r>ikt��y
���5]�e$ҡ���-��O��Vc��c���3C�#3D_�]E���S�?�v���m�I���{�)L�G�8���%c�L��y	�������=UQ#���
W
�W
ŷHv��������&�JZ���Ð������Qs'�Y
�1̶�����y��.dJO�R�2�X9u��p�}��C���/�� �'N?mZ:���;��\�S��ɵ(IUsR\��������v4VO���%�b�#Š���NM�؎��u2	x�I����.����&P�eW��E
+-QWIg��F��P
�)�&�6�
W�F�T� !�� �_��\y������ ki\���9�g�Uh��.�Sc���ܳ�R �
�u�i�v�������wᘆ
#��`�i`��Ƴ�^���zL��}�t����G��г�b��' ���
a*�$ch��Ƥ
��.���}�����N�������諙E��`X�{]���&��o��k�}x?�q�Sl~������x�~���ww���<��� ���s����#�s�M~�;ؽ'�l�/f���fB ��� ���rY�z�-G6�����F����;���XC�P(��Ӂ�u����
4/�$*N["
+=�a(������@(�.'d��ڣ��\��1��=7pLj���/1��u���w򫊴~�*7{������zCM]�_J��Jȶ���z��Mjt��F�f���n0�'�w�Bq¡@)'���g��P9z ����۷g�
�:�
+endstream
+endobj
+1203 0 obj <<
+/Type /Page
+/Contents 1204 0 R
+/Resources 1202 0 R
+/MediaBox [0 0 612 792]
+/Parent 1184 0 R
+/Annots [ 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R ]
+>> endobj
+1186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 651.823 104 663.778]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.505 651.823 132.228 663.778]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+1188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 615.958 104 627.913]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+1189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.404 604.002 179.127 615.958]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+1190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.297 604.002 359.019 615.958]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.992 592.047 232.715 604.002]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.84 427.666 503.562 439.621]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.461 301.124 433.183 313.079]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.616 277.213 186.338 289.169]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.54 277.213 236.244 289.169]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+1196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.089 217.438 424.812 229.393]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [186.826 76.052 193.799 84.465]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CaSt:85) >>
+>> endobj
+1198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.154 73.562 311.877 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [503.018 61.606 522.722 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+1205 0 obj <<
+/D [1203 0 R /XYZ 86.4 726.045 null]
+>> endobj
+74 0 obj <<
+/D [1203 0 R /XYZ 86.4 480.925 null]
+>> endobj
+1206 0 obj <<
+/D [1203 0 R /XYZ 225.953 343.742 null]
+>> endobj
+78 0 obj <<
+/D [1203 0 R /XYZ 86.4 156.677 null]
+>> endobj
+1202 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F16 717 0 R /F10 1116 0 R /F14 1030 0 R /F7 1115 0 R /F1 1120 0 R /F6 1011 0 R /F13 1121 0 R /F38 773 0 R /F49 967 0 R /F9 1117 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1225 0 obj <<
+/Length 4396      
+/Filter /FlateDecode
+>>
+stream
+x��
ْ��}�B����7�-�R��d��r�}�lR\�3C[#�$�����xIб��ĩ��@ ���1��~�-���㫛�}��"Os+������T/��S����z�:���]*���ns��ͻ[%��Ysg[n۪�~�:�~�N��b��V��R:aD"��W/o�|u�Ӎ�g
�Ȥ^�������l��7/Y�r�xG�
Z婄�f���_o�)�~�"U�]�\��Y��x�K��>)�"HI}
~��>)y��ږE�cڧ�+����o��\��z�]忊U�y:�@[<�%��]�<]����l�K�eS�
1󻯄��EY�z�a���ox�l�:UB�� ��3����}@�߾�	��/��ħعX*�����𘛀?8Txa�GDվ�'@����Hv��u��`|�
�;�Q�p�K��\ɨo��н���2�`F�o��!\~�fy�0`؅���h��]��0|̘����7��]��J�� �/
A6�ѻ�j��<L��&�9j�M�e���ҫժh�b��N���
��ၻ�~�)�����,h�wE�וM;CSn iSB'��0�;2��s��"����~)�N�*��h��+��K>[x\WM��#�"0
j"�5w��0`T��vL=
r����o>��uٮ�*�\X/<m����ү�P��Ic���1��Iw���k�'�ۥH��
�}GYlxȪ&
+�1Eۆ��¹Cg86h����>�0y&0�T��G�~�Vx�
��"����ҩd�-:`��H
�{������!��H`���-8z����-�2!@|Fl�=W`O1̩۰T�Tm����⮩�@��j]�]�

 ��`U��
��/[�T~
+��̋
+�
+�zG���m݅��;�|�r��K�|a�0Ս*s�5��� S&5�tP:�z��`U=
+�(��*��,�>hݿgAi��t>�E�~�����+��-(�z߲��S�4�F&ԋ�t
&�܂*q��_��"�b
�螱3�>�j��Ր��
U�p��n��%���nS����X���`W,8}�a��@�8���k�+�K��?�
Mi��X>�1eLc
�W�
3S(�e�D>�R�c1���/
q��M�R�m����s��lX�
c��w`
�Y�& Ǧ"FHDKND�{��#���x?Fx
��1a�ԫ�Qh�K�G�S`�~�S�-l�;�q �B^ñ�:�a{�=�j��1�-^l�l6�Z�pIQ�"
FD�\���
�%��A��5��!�9�����y	
]�*3_�s�Q.���aʎqh���TH}���6�ce
d~�ds3#�
$�E6�R���Gы�Ɯ� �a>
=gޏ��"g!�Td��b�"J��K0�T�S�?G��؉	�
+3�
���+�@=K�R�toe�
+'q�D�������)
[, ����C�uj�p��T_�0��-�$<�ו6�&+�K+��>��?��y��P�����)�����K>秧� �taqbq2���by/�$^�x�n��h粡��}�Ĕ�?Aږ�P�����p�� �B2� �"s�@2�w�z�ڎ%��
j
C
F%R �
,�	6��M9��S����3����MN�yr%�{p� ��[����� �
����=��fF�v�Db ������u���e�z��g��C�����"�>|�\�	�rצ�K���!lg���%9�6����
!0|�b��s�
#��Ϸ�#��=yq�,x�c�@+44�aߖ�zL�
+�`��N����l�2�����@=�b�
+\��\$��{��-c�H���Y��h�TbnU��
���I��к����3�w�A��餹u$�``>ƌ�Q�|"N"�����ֈ�����ɝ���Kc+�t�o���<����;��
��		��|0����+1�\/�\�*�2���@	 
+@� ��
�Cח�
+e�C��XB��<�B�4C;R�_�쯖 ��|48y�9XFBm Y�ˑJ����s>��
w�gS�oS���:�B������2@�3�{�ǝ*�0
I/���s�}����F.&����q�Lt e���R
l>5#=��9�� �֠ �d���U�{s�O�!���s��A����lYV����:�<�[L������p���a�O8?u�39�oyX�2Ѓ�#�<�ey��H��`/A��\�!�r �c��� �Q������8�Q,���`V1�"B�b��b�D �!1`o	Υ���
<(
�h�:i�&�F����6�
mU2���_���U���X��̇�zuo�43Z���F�Si�9|U�sO��s���R��A:
��D��O�.I-<#P��'�qޕ?�+ at hp���ʟ�
�_��볮�����~�)`i��tL}�;����C����]K$R��tz�}Pr����f�v�
+�n�'�C��ܮ���������`��_�����b�s��b�݄�(��q���{N��(v��&x�0�S�
��d_gv�\���f���=}:D���<�����/���)�h��|�
|�(�`�sB��e��|�?�rU�wF��9[Nx(�DO����FS�ے�D��5`���- at 4i1>&��}ף
+
TuP4P��U��^inl�s�)bޏ�vO�v��v���]��b��)6�`	9�~ux���,�OA/�bث
+
�xj#@X���Q<�m������v:`���6�^��D*�CS�6��:I2���ۂ�P�-J�g}�:�#6��d#!�ʶ���c>^���;��/�X*����h6�/Da%�|]���8؂|a,���ʵϯs��W�E�1 at J�ϩ-�:�!�B���_ae�k
+
�X`�3

+
0�R��l��Jߝ�.��au���l5�\
(y�I���eJ؞�Ɉ����IH�!Ql_�=
'=\�
+pr��c�4�D3�i	L1(֬�2C���b{�[�㳢� �����ʰJ�?m�U=���Xƴ &�%���
����#�#Ο_/���|:G���|�V�a�x��_�
�f�92�W������ͣ���*K��-K�B��TE\f%�
=R��i�T%�Vv��{�s�؁̝��L0W�T�W�C�	��cgU��
�I
�?�X�3
����9�20!ԕT%gA�#t�T�#t��Z��b Me~n6
բ˜�2ө8_�.0�zt�C?�X�4s���eK9�r�g


�\_�}?U��S����+橵�ˆ����Q���Tk�A�����q�����1���( h�:�_�V�-�u
��'�Pk�V�Zc���@sɡ�`�*�?%��[�>�&I�A�I�yj�
+�=��uUՋm4�k������l&.M]>��ET��Y�
��d��
�S�=���K?ܸ؅M�M
~���G�1�.#�A�
��.N����|���x���'�?!���g�$5|k1�`\�%�U.���&�/~��j�~)>)bu꼟�:-c�,
+�
�� @ 0)�Rc�9SLf���D�5ו��k䇾�4��<��b�0�1?_�&�
������6��2�ʫ
��ˆ�˫�u�����DB�Q%v�$���$>��<�;X3G18�������t
6���wwn�#^���A����͚�!>�;X��_��I�L|�
�+�MIi[����x
ov�
_S
��.
��� 5����Q-<B�)�!���o^w
�e�h�
��0S$���
��YͅS(�Q�Ɋ5�JL�|[� ����+�X��e���V�vI��(H)b���[�k�lJ���5���&���ʑv�v;�P'�
+kQl~1�jC 5�!|ˣ�8�;�:�H}�ۍ�ղ��[W�#����u��W��
,���.ė������"�weBU`�ϯ��0���ý��;�u-B^
:�Nf�s�x���%J�F��MĹF�������x�p�y��$eK���A���_�j:;���[&��*�n�vxa�Vخ6�5���7s��Kˆ�i����^n�	�-�5��As
E����[��
��ns)���qE޶
���M$Pnұ�p���{f�c�U�`��l���th��_S����0-1)��9���@L?�Ѫ�
�ҏP̲�8���"T!���
Xg"H�� ����&jC��|�6��������6��0~��gB��ѕ�
���[���Rq{p.P%�+�P���
=yy�-,�sj���ν��9д�eHf�T�-�@Q�����O�惑!�;�Q�
[�ӳY=����7����� 
�|�t�a$���'�9�ى��ߣ��@g��^�� �)��}.�D��\M�+�DP�*A�2Թ[H��>cd��K7�c���s/���"��i!�α``
'�yF�h��5t|M���P��(��y
�L�*_�5)͆+N����S���~���߰[�
+endstream
+endobj
+1224 0 obj <<
+/Type /Page
+/Contents 1225 0 R
+/Resources 1223 0 R
+/MediaBox [0 0 612 792]
+/Parent 1184 0 R
+/Annots [ 1200 0 R 1201 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R ]
+>> endobj
+1200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 687.689 519.955 699.644]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [509.106 654.314 521.062 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (cite.LPZ:99) >>
+>> endobj
+1208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [181.941 581.45 193.896 589.863]
+/Subtype /Link
+/A << /S /GoTo /D (cite.MaPe:97) >>
+>> endobj
+1209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.184 567.005 128.907 578.96]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.92 567.005 278.624 578.96]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+1211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.775 495.985 476.497 507.94]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.781 368.092 212.504 380.047]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.701 344.181 219.405 356.136]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.207 320.271 374.911 332.226]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [189.983 273.808 201.938 282.221]
+/Subtype /Link
+/A << /S /GoTo /D (cite.FTB:97) >>
+>> endobj
+1216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.637 271.318 481.359 283.273]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.585 259.363 273.308 271.318]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.661 247.407 214.365 259.363]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+1219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.796 144.055 386.519 156.01]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.193 132.1 363.897 144.055]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.13) >>
+>> endobj
+1221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.799 73.562 170.502 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.13) >>
+>> endobj
+1226 0 obj <<
+/D [1224 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1227 0 obj <<
+/D [1224 0 R /XYZ 245.466 486.951 null]
+>> endobj
+1228 0 obj <<
+/D [1224 0 R /XYZ 500.14 216.599 null]
+>> endobj
+1223 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F16 717 0 R /F14 1030 0 R /F49 967 0 R /F10 1116 0 R /F7 1115 0 R /F1 1120 0 R /F9 1117 0 R /F13 1121 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1241 0 obj <<
+/Length 4569      
+/Filter /FlateDecode
+>>
+stream
+x��\[w�6�~�����'-q'gO�L�$3�����Iϙ�N
h���H�#Jq����Bx(�n�7/- �B]�*��-����Wyw�ǿ)�(��J�xw��m�N�Ub�n�x���z)sau�]y����^����U��f���jm�t��o��~w�˕�ٳ���4�v��^��1[����E��"_<�qۅVE*�i������!u��8[�T8K�� mIu����iN%@*?t}
5�zmlR��r����Z�%�}�>�W�͞��U�E&�P�����U����������6�/�@K[����a�}�:4{��?�M���u&R%
0�o8
�6-����Ժ�R��04��ACֹ4��ܖ���^���R
�f��L"-
3x�x.���
+��t��~���}x<T0�H��O�Кg�EߢpT�����f`)P{s�V{�jn��p_
�SE��Q�4T���{`��ZyR��<�V���/�~-:���k钛zG_�c�EE/%�����!��

/�į��fì�e��I�C&���
ʼp at _{�x�+��QcI?��~cд�aCz
l%�^Z�ov�Z����8&�y�qڎ4Zu_�r��W��Ҡf(�yp��x��,�މ�7��%�͌
:�ݩz/�!
`!����²٭��p�u�Y���
+�{�
�(�d|?!zu��N	���r���a�z~`��1e�g&y>�˻�1ް-ܳ�lQV(APM�����
����4�O9z�m?d&�ޔ������?�~kI�����6�Bз��fC� 
@�w�^��92�`,wLjy{�ؔɋA[
�Y�y6@��� �5�.uJ;djS	_	i��M����&8h��7����
�
�p3-��z����w*A���F���fS��j�ʛ�*/��o`iiY8��M-̋;��1`o��a�n�9z
���,:�@�V��7l ð*3]�
+�ȤY�hVઝ#*
��Ѫ��Ѐ^�`�z�^��k�]��R�6R�!ǵb�kei��r���
���~�M�"9؋d`S7G/e?uXs�$K|^5`�-�ݺ��15���MC��5jY�Y���ݦ
N�Z$�'N6����bS݆�0!�v.�7�r�Oe;Y��wv�`ۭߚv��
_Q��;`��c!�;q<�!M���y!{�2f(dW�o�ca�
+q܄8�I���Q}hdDӠ�H�ВChQ��#}
�r1BN�/�[��#7>z^���a�IM���tM�J���#3���<���	 䝣x?3A�y�k
 >�o�O7dΏ`\y�%�������G.{Q�G


^I��
0cJ8�^�t ���ޭ똻:�Jp�nl' ��¼t�
�WZ�@��l��rF�Qi���M3��1-@
���HhQԠcEym
2;B�u }R�S,�Hdf�A�yBϩ�O1�����L��B�
�B�"�
�r��zF����bb
Ei��бX
μx
�
+����o
�j|�m8�P̚M�'Ob�����k�jS�r�a����Q���y�����PI9-btZ������
���#7�ܖ���J��� �0���vׂ��
��`��5}w{X�e�O�37��-U�����1�=h���
܀7����4]?���]M�
���BB�(�
+�d<,=�����kĥ�z��
�
 �l����S�
���7�O�_t�݆����5
�CS���<:�
�QV�=H�
��8J/;�i�^.T����0±�
I�9,�U�[��
Y=l��D����+��Lt�T�4�Һ
+8m��u���j�?*3a#�&�+E1#t���S�='T�����50)�����kL| �(�uk"#�Ɉ�~J9J��=
@
�mB�q}{��
�Ș�`xc�+`�B? �9�׈����^
����y�e��D�q#u�Ɛ$��O4�6p���i���/��CIE�����c������Ƅ��
�����52 ��q����K;�W���PN�拲z�b���Q:���/x��F�D(��jø��ΰ��T`ab��"U�n
5bb��3nϠ��R�RT
+T	#y.
w��7\��a������RE���S�' <
{aU�پ~S�w��
+v�%3_�Sՠ��k��蹮��ɼ���\im)�L
Yp�M�6����
�9X��
+!rZ?�T?#��&�@s���?
�������'֜
8�vS=�5��q��h
��o(���Q�K<"��}�L�_�s���{8������涼쓕U����zi3D��hM|��P�0�գ�4;�w��0��\�#�ːե�?T>w�T�t$P=���;\������,��f@�
����?~��8�ȦnkO�$�W ��u8�!��#�X�
+��߳攧Z�9q�r���qF��ͭ�wz^ᰛ�����#gV��M�e�z�[��C&�B��<.ù�Km��08P���סȥ��o��j<���@�$E�⿑�o����%��t�Ņ)��y2W�@\��`G[��E�w�
���j�?�b2��
w^	Z�7X�[�d8����ӕ��|��B�
PY��-I�w�����:�=0iII�G>[�&�{�N+��I体 ���Y$��� �P�P/r S��� P����

 �vN~�^,��0����-W�U��#K�3f*�K�f�	��-|ɐK��T�Zj�*︨5���R��ùHf��5x�)����0?�
z 	�5f�ɗ���BD�M��d#"S�4�k�/Gq٨�Ʊ��� ���vbx
�c1R?��J�n(#Td�J࣏�D���w���?ϙ���e*��P����XG���
DfSi�K��_ U�R5���/��B�d*���>�L�R�[�e�A�{=���:
*���F�$c�+

��q6��+�|��Ƃ6�~
F��/ EN4%|
�s6�+�[�Ϻ�`��'��C� �҇�'�'��a��������a"V����L�)��F�t�$m����;@h��J
�-�7�8�y�!�)�̘
���5>��7���K
�D����t<2����E���bے�X��h�=2B$��"��G9х�F�������lZ�J�t�i&�v*-.�]�
�ƌh��ib��ӊ9 at S��N%�!b�E�)�q�v�$���rV��fj��
>>�|�Dfx3���O�
��}�
�����	��&�uZAY'�WJ��o�Z�!'W氡�oy��p	� s��
0Z�����6�}�qB���eE��
Ȳr�&uf���wU��+9�.�f�|5�J�cw:)��Y^���z$u�
�
���?Eݑ��M�+eŒyzrWT
+�r�kt�}q�(p���u�.ꯉN�� �yj�
.L'X�*
ɕ~�^�j��
�}�b$<�M
������
�!{
+
 e��,K�T�'�_�N�iP�V*��m1v��'�.χ��9�p���'�
F�܊T�㘊f�[d�
�x�r�����
F2���OK�{���u�*4�

]�t���G�}�cC��
X�~W�<W��+��f�Z_�F���	p�Udj �ZJ�Z<�(-p�.d��R�Y��ɳ���E��+��� ^�'}�(0����K��Jzjcz*5���?^d>U�Uq	R�Ù~��@��C����
u�p_~f�����V��'u��e�z��>_����e
��)�]&��1�;�w�a�*P�	��e�G�9s����?�
����|3>�?9�/@z��4P�`i��

�QD+@ݼ
vS9��\�#��`��
ݳs\ǟa!�}F�j��-��fTk�f8N6�9���Q5.�cOTga�e>n��ЈP�!��a
��؞g�@��j�07⾈&�0sx����闀��}P-�<��(
\}=k��MT���|�}�KƇ�'<�g����0{�u�RPs�0��xx�`#�����
q�s��������rW�?�;�K��-��g!M�O�\�N-@�-�S*�9_��f^� 0=��#�Xa$U: �3`S{��<�	>����ͫ�?ƀ	�6�'œ������$�a�y>uՌ�_v:5�8�ρ�_�:-��g�LΊ�"I�yI�	DQ�g'3��4��H��!]�;���-�R�cs#�qq
���!��8�����-��
z
�L���	���y��%��d[��Tyf~�̓�h
���g�1�IU�
�=>���H@%��`&� �"�	G`x7g]>�kt���@<K�G�� �y�
�L�S��)C�� O��}������%�xzq[
��e [...]
+E�����
n>-�TLナH>�
����,xS2�D@��������^A��%ZX>Š���F���pٻ�=
����0���
��ɖϴ��x��=حN<�}��*
���
�� �i
+endstream
+endobj
+1240 0 obj <<
+/Type /Page
+/Contents 1241 0 R
+/Resources 1239 0 R
+/MediaBox [0 0 612 792]
+/Parent 1184 0 R
+/Annots [ 1222 0 R 1232 0 R 1233 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R ]
+>> endobj
+1222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [278.126 627.913 297.83 639.868]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.13) >>
+>> endobj
+1232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.364 392.208 500.068 404.163]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+1233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.512 248.746 165.215 260.701]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+1235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [500.251 194.11 519.955 206.065]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.14) >>
+>> endobj
+1236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.132 73.562 268.836 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.14) >>
+>> endobj
+1237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [282.341 73.562 302.045 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.14) >>
+>> endobj
+1238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [334.405 73.562 354.109 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.15) >>
+>> endobj
+1242 0 obj <<
+/D [1240 0 R /XYZ 86.4 726.045 null]
+>> endobj
+82 0 obj <<
+/D [1240 0 R /XYZ 86.4 615.125 null]
+>> endobj
+86 0 obj <<
+/D [1240 0 R /XYZ 86.4 426.094 null]
+>> endobj
+1243 0 obj <<
+/D [1240 0 R /XYZ 500.14 240.422 null]
+>> endobj
+1244 0 obj <<
+/D [1240 0 R /XYZ 396.799 212.541 null]
+>> endobj
+1245 0 obj <<
+/D [1240 0 R /XYZ 500.14 134.128 null]
+>> endobj
+1239 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F38 773 0 R /F16 717 0 R /F14 1030 0 R /F1 1120 0 R /F7 1115 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1256 0 obj <<
+/Length 4237      
+/Filter /FlateDecode
+>>
+stream
+x��[Y��~�_�ȓ�V�S�I�x�A� �<�6MK�-�GjKj�N~}�X��f���_f$�"��:��b'��*Y������o�z�ř�z��2:���g�l�P���x�ޯ������<�AF]YwU_�\���J��:�߯Y��U�����d��x��ݟ
�~�c�p�b~!�W���~HV��y��"3�;�y%Esxگ�q���dJ����
)W:c1K5���+��
�
L�)�c[e�S���枧��E4��zK=��N����ʶ?��y_5����D%���|�؄
�d�Y
+�ZJ�O�p�����T
�b��՚�2S4��Qӭ�X�D�1��W��^OW�qj�'�6�GljG(F���
�����Gbr�
/�peY{63YW�;͢�wQ�e�)q�՚k

�`w,Δ;�����r����i`�Ŵ����{�"8ԟ�4d�_�����]���1��k���ʍ�_��þ|�7h��b��
��\wUQ�M6s�vl�����3��
4�i-��Y��)��m:kGM���G-��þ*�
}��
+J5�x����w�k��'�c�F_�[@�xef�p:��M:L�^��W�U
s�W�1(�m`%���C� ؆��-$�S��y_�_���!��
��ΝZ��pt���p�r&Eق��$�)��b*:����
���X�l��
�{a+-a7)�d���L����:��!̥�Zi�c&���V`V����
!?O`!p]�1�1���Ha�T^���{
$�
~�
~�S.��%�7*�_&'��17+
���1
�}��i[~
+�.��䌞��-h�NCJ�T,
�Cg`�fNd-t�؁i�M.([�IG�!@
���׈'ĕa�����'fP�ݦ���$�F�=Eܣ}�!�q��ɉ
_���b�ț�E��0ꂾ�C��d�/a���Ҁq@)ѱ�ux�
W�˱+�
�ч��f
+�S�660g֕GMQv�C���C����t\g�O��=5���[���!�X2
%�Ӡt�����=�Ҟ��L��F~�(��S�_E��9���H�
8�t妩�uӂ���;mY8��Yl��"�1���c3�����R�c�<lS�,ߑ��['sg��\/����ʏ���s�]���
�诰����J{~�oR/� ��EI�OI�$չ���c'/��XR��#"�j[S2�࢕5q\h�j��	[A�w����
wL�֩ ��ˮD��K��\s��B���!x
���nD�MQ�;zjaED�v����
f�3��i�#��
���}Gxb=�������C�S�i8
L
+�I��U����v�
�r@
+�W�&���8�hkj�oɇ>�54��r2&��
�����9i��j�����թ��_[�{��r��"���A�)�0x���
+9vC\
�?SkQ:�V��'ԕe�Q	xBf���\�����A}}0�\�*��"g ��
+
+��@�M
��	��3	��>h>��l�EG)��{
���R���mS~�gP�M�-�N��t}�(�2q�.}��
+t�5>�X
��M�Fl˺l��ާ҉Q�6�\�;z�U�lGF��fn$�
+naF�EJ��9��6
+.�7mP��ճ��ޚ� ��*
�^ .Bl5�
����
>�{��
�y3l����SM�+E���s�Q�pj�o�c��e\
��1<��d
�G�b;o �j�.��5���vIr��
)
�9#oӼ4N�0r"�
-�
�BkڞZ�(��4GD���p�3K��/,�.r�.����G�8Y��N|�������0&���O�ܒ�� �y�Cx_e�2�e x�Ts�€r_hG�?G��c	��U��Y��k�R5�G��f�	�'I2�z�9(��� ,4I*��0��:��"��M1 '����#Q���r.v���J#n�F
���;Ev l IS3�B����17��IW
ҿ"�~5yK=�C֍k8�y��[�MdJCL;�Ch��@T�|�c㟰� Q��+3ai�� ��&��
+��F�
hC���	ŝ���%0P���t����
��
����-3�y��]�?ٙ0
+>�=e��=]�zda���҆��=
+�i�i�Z�B�5`�l�
����?b��Y{6\a���՞�ت�/�2���іѳ: 
�,�߶�k`
,�d��.CuC2Tݘ�;G��-u8��I:3UP��hب����y2A�.e�l�i
�
&���
�O)B����c��<�2 �\P@�|0ߍ�&%\Sc��a[
�8'ƩƊ[Q��~!�o�`�"6#<�"��,h7 Uo��dq�-v����k;m9��2:�m_QP$���CX I9E�6���X�TU��b-H� ������
����@��-J��
�5m\��k��æ�+�J��+��;^�C3&�n�3n|
V��Z~�����6
L�%���B
��e8pM�ڳlj�gjϭ��:šz_�e�Ҩ�ٓL���(��̜�a�wNĜP��{&�i1�Y��N|ٍf��F��L-Y���#oE��OH�$
�.�ɠA��>�M:R�D ���F��jS�'��n�
�������()�,F�
L�F�M��+!�^	�帰��J���yq8~��ѩ4��fl��h�1��� y@ܐ$��_�!?
l���.Q�����ꦭ
B)��jB���
0�c��g���
;j�(�
��0ƵaCY�z���j,%d4�9FpSћ�-�-�M'�`�
�ܚ��o^B��*�լ�b�\�e��╓l��n�J��OGg`�.�K�lv�Q�(��P�����?����׮��#�[�U�)���f̓�E`ya
>y�2��,����ŷ��"��߯5��Î�
�t,a=?d��%

.���6��q��#DZ��
+Y��d��IT��ul*�c���	<��v[��M��Ǥo羮��y)��D���a
�MJ�ۓ`���
�Û&J��
��`J@aKrp���1�:
����;�*=c
�IJݠ
��L'V�Y$ gא�Ԇ��A�<����-0�����|,,��VӛH�D�A����N�,͋6[�#͑f��!

����6LOۆ��|�M�mG��۷+N��7f8�t5
�7����%5��0VQ9��Q�h��ٲl�0��aC��gJ���g�
��tI	t�G�����h����'
��=R
r2�+f��X�Ace������I��o�jwz0
�z
�/.������伐O�I瑃�@������H�*�nM�((l.[�\�"�;��P�Kǫ����@
! �iN$�2@`�&���8q2�>�L�oIH
�p���m���$�)":�oC[c��w���E����=%*�L��1�~Vt��Lar�+���EqN��]��a����E�&�(o�
�b��
�/7�X���x
I0f�5�
�Uo�i(z�b�A�~ك�T[�g�1r�V�m,�
�s(��bu�O��O��	&�1�����V�[��+�=�P�/�0�
+z��\�f�s>��}PV#������`n<�x
���
Wo�~���ߒ�	�{�˒a��c���@yJi�ͱ.��$�we�\��_," ��[��⑪�
�
��ݿm��Onۼ(���a1�t3�����ň�7���T�,�}��a6f�§��Y���
08�:�@p):[^�������:�t�@�az	�w����yWo���T2��,����\�Qq��
�"�I��c�m�pI��›�m�)�k>��qb��&��
W�َ�������O閾e
1p��r�y�F�9.�`C^d�^��\��C�4��l�!�C� �H>Ҽ���﹞\s���ς;���(�0�4���%h�LH�����4�^3�D������p�����o�������B��l(�-��#@["�4��@�;�i%D��I&�
��E��,!D�e�(l����v�X��u�vfiCB�<`�

��*�2�|g��	�����b.
�
jb�/(2l|4U(� &���6����G^���p̀i���.�
��.\
g� [...]
f�Rů��/,��3���;�
�9ϔ�/�u���)E�F�X����/����m~1�;�O~28fz]�f�����D�D�
�%�Z,��:�������y�
�;�g
���'@>���v��/ �
+endstream
+endobj
+1255 0 obj <<
+/Type /Page
+/Contents 1256 0 R
+/Resources 1254 0 R
+/MediaBox [0 0 612 792]
+/Parent 1184 0 R
+/Annots [ 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R ]
+>> endobj
+1246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.547 599.755 240.25 611.71]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.15) >>
+>> endobj
+1247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.576 526.888 456.298 538.844]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.5) >>
+>> endobj
+1248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [272.473 502.978 287.195 514.933]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.742 502.978 446.446 514.933]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+1250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.421 432.367 342.144 444.322]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+1251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.66 387.922 511.383 400.237]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+1252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.401 234.822 200.124 246.778]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [209.33 141.763 216.304 150.175]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CLPS:03) >>
+>> endobj
+1257 0 obj <<
+/D [1255 0 R /XYZ 86.4 726.045 null]
+>> endobj
+90 0 obj <<
+/D [1255 0 R /XYZ 86.4 561.844 null]
+>> endobj
+94 0 obj <<
+/D [1255 0 R /XYZ 86.4 348.926 null]
+>> endobj
+1258 0 obj <<
+/D [1255 0 R /XYZ 255.723 220.205 null]
+>> endobj
+1259 0 obj <<
+/D [1255 0 R /XYZ 220.814 124.779 null]
+>> endobj
+1260 0 obj <<
+/D [1255 0 R /XYZ 185.591 70.186 null]
+>> endobj
+1254 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R /F16 717 0 R /F7 1115 0 R /F38 773 0 R /F49 967 0 R /F1 1120 0 R /F6 1011 0 R /F9 1117 0 R /F13 1121 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1281 0 obj <<
+/Length 4119      
+/Filter /FlateDecode
+>>
+stream
+x��[Y�㸑~�_�GU�E�"H��D��i���X����	Kb��D
EM����K$�C���v�C�HL$�_^,1{�����_?=��[mgERXegO/��&f��"�ZΞV���J<.T.���g٭�m���r�й����
�U�b
W��?���wO?<HP3��In�l�}��{1[��g"�E>���mgF���f�ׇ??�1w�)s����,3�q]�xj~8>�m��|���W�_��e��/��rDPj�\
+���S&K&E���M�!��3^c��W(��C�⫮a>Wծ���}�v�2n ������!�U6��F�[���U��*�x8�(K����
N7���E���ܜ�f6)2����l���)R�##TLbl1M��q!m6��~,�d��k

g%F�)�䢘,�_<��E.5Ͳ	�v!����o�ә
��߳�k�9�rzi�0�H�<Śj�	� ������y�B���
I�x�P�*pV�����5��~�y�w�<��=�|�U�l9��3���R�;��q�U���Y+H:�5�oB�~�
I���tb�
�>�M�{4��%q�H�h�S��
q�9�u������c�����e[N&R���HO7:^�H�
l R>���C��Ir�T����9�0/����T��Y1�S2c;I*G#��4��6�&&�S���Yd�~�<. /��r�v>�&c�5��<�B� �w���*
��
+pV�~;ߌ��0Y	,/���:b�
kN�q� �7|���F
+n&��%Y��NYF�e�z.k��Sw
+��벰{Z�
+��^a�{��� �
װ8�����
(��S��$�z�x�9$5�hH�I�5�(*�
/|}NP��pg�t1�y�>�;
\���C�x���s@��i��G�2KҴ����9a�Ǻ[3��:�)��WKO@�U(z��c�C�;�$֌����(��(�J\�PhPP����`�I�,��+���:��$tr�RhXЬUd_2�Jho��Z�h���|�����3���i���xw
i�F>�SDl���(��5ӹ�a���Bu��LB� ��6���#
�wxd�
a��Q������mG�
T��A����|�F� 5��_J�nM����b���\N���R��{⴨ΞD�'J�e=��[�C� ·5v�{�\u!|?7`��v���3����A
��3��H~3�
��5����?���@^�S�Nm���
!d6>I�bգ��Q>�(��(�gi�mq��
޲�1�gv t�?�<we�s�����l\��� �?U��.������oBj�� [...]
+���ע�O���}J
�l,$��B���$ �*�"JL��ޖ�­��RY0r#������D
+䁉F�|7��	
��_�<��2�YJI�M��n��Q+�
��i+�\[̻���U![oxf�\6G6��j4[�0j���z�M�--�@��1�[��D�V��U�������pO]�/ϯ�N&��ơ��q�
_׼"	F�{�t���`9U
�
�HM1Ŏ�����ڇ�%��ʇ�~�X�
����4GQ�:V�w���g2���6�/���p�f��)pϬ���0�!�5)�$�yZ at 6��z���
9V>:+����mQ�d���OU�;�js3
0���7����7;cw�D��1��,z505?���N_�g�/��eZ��\�|��_�����ܕ0L������l��,@�*;�d4��d�ݝHă�"=����20�����*��Q��G��4�a"ɮ{��e1���i��V�bĆAiv�硧gM��1b[�LĐ{�Rw�PH�h�c���?zK���N�~wk8l�9�y��\N=�K��4��G_���ꇣ۬�F��
e.���1�}��k:�$åo���I�Y��S1��:�r>��.�ݴ"?g�GH#�v��{�"�}�s+8v�J�y��덗�� .��ϱ-��+�:C��?�/A�,�
m�$?�����@�<�G�];+�/H���å; )�j~�"(��3mr�,�y
�@K�uO�u��&�D��-	q��w<��?E
;�[
B�I�Z�hF��2��q�s�i�iO�h�
F+=_6�U
���BbX���ud!mU?��O��80Ͼ��]�R�������.�pt��
��N
��G]ZFr���:�
�74������_4��/�
����
7��|Y�q5#"�ik~���0 �+	��V�Laԍ����Iݓ`�p���&
[�e�l
߄.�5��d�uW/����E*ͱ�

����}q
���6]�q�a�O�F�]ͽD��#a��3
�<��?��zYnB�K�d�
W�h�L�B:塐�k����V]����
'<��>v�B�7�0"#9�6��$�=.65�a��#[*R@�;�1S�'>�<7u}Qq����O
�/`�9�V~�~1���Eꛒ��� �q� �;97��+�xL�T���i�d�L%��0���I�#�$J*�$Y^o�k}�%��.���r�^t��U���2��56��[0h@�����UYi��� [...]
��O��CѣV���
-9{�%�����H��b�ԟl�b!����aMە�"cwm�-�~�!Ș�5�E~�Nϔ� �M��H�~�ɨl�?n�:C�95�����Ü?o�~��y��L\�K*��v�g�U�����ˀi�5<T��bJ�����&�W���*��NM�6�� XZhC��%��?����M�DŽN�
����D��$!f'�e�:�s���7��j�}\�-ѿ��?�+��
�}�ʮ��w �Ԛ�,r�m��q
9��1Z��,	lo�MlIn�A�Gb�lW<p^���~]�
�%��~o�n�:��}Ǟ�߆/@�?>*5oVU�x��q���ʄמ��rI��evw�ލ��s�G���O_?|���m{ho��V��}�p�.&]� :�K��]M~�|{.9��Cj�i�ͦ}@����{��v^O0#C�jNV�/�
��9��=��a�C0�p&L~�E��k��C�"�_��
+��T��7�j���
��V�;���4�t~pO�ն:�X��Ij�q�֫��G�����T}�z���H׿W�
l���*��@
�U��vT�>}���W~���7����8�ȹϸ���:��F�겈<8���/�m�Ƅ�z백Pä��&�$�C��-q��rv_��`�I���-����
+�;� ��_\LЍο�������蓘��_kJ'΍ِM��Ĩ��\�?"��QLf���m]�u/p2{
>g��q�x �:����e�#�٦����d��}Fh��$�����f�W��I�)��rJYo���Oܖ�U�x�Y/��E�S
����	��ۛ�r*�ׂ�d�ࣾM/��ݮ���������C�,)��
�hm/��� ��'~v�v���vU�︠T��5��~��CM"�Xw��V2�o��T�UL�U���rb�/�%i��
��B���N%
�j�A�
+�C��æ�ĺ1o[��C��U��

�8�c�z��Gy���r�+
F>����-o����[����49��=^{T�'�7I���3�KBo�
+�'�-��T�(>�K�|�?��Opa�.?h�e��q卖�O��R�'�H�
�򙂓C3�T�՝&(�%��B)+Nr�u�x#
�q8�F
�ٶ��
ɯ_:�	�'��3��]��. [���+R�n�����&濂YV�f ��k����$v
+�F���ӑeQ�����Xj�g��ʰ�C�7���~�ϖ{��
�}�}b3�kN�G��Ɠ�!��*����*�WIB#��PG�T�#+�_��}��\�"10�}
��
�k
Z�?���V}�E^�Ȁ�����}
���p��U�(���)r��]�����,��:v�	
�K0��ݤ�fހ���\�.�
!0EM&l�����".�ឪ���pE/r�Nß0��i�e�#`����==�Fɟ[
+endstream
+endobj
+1280 0 obj <<
+/Type /Page
+/Contents 1281 0 R
+/Resources 1279 0 R
+/MediaBox [0 0 612 792]
+/Parent 1184 0 R
+/Annots [ 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R ]
+>> endobj
+1262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.802 522.4 191.506 534.355]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.16) >>
+>> endobj
+1263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [308.035 481.472 327.739 493.428]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+1264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.815 399.922 457.519 411.877]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.19) >>
+>> endobj
+1265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [328.002 299.936 347.706 311.892]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.19) >>
+>> endobj
+1266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.031 287.981 466.734 299.936]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+1267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.183 264.071 141.887 276.026]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.22) >>
+>> endobj
+1268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.503 264.071 243.207 276.026]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.21) >>
+>> endobj
+1269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.381 252.116 197.085 264.071]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.19) >>
+>> endobj
+1270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.675 252.116 245.379 264.071]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.22) >>
+>> endobj
+1271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.24 240.161 188.963 252.116]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.276 228.205 241.999 240.161]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [490.141 228.205 509.845 240.161]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.19) >>
+>> endobj
+1274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 216.25 108.982 228.205]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.22) >>
+>> endobj
+1282 0 obj <<
+/D [1280 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1283 0 obj <<
+/D [1280 0 R /XYZ 86.4 641.835 null]
+>> endobj
+1284 0 obj <<
+/D [1280 0 R /XYZ 221.255 578.49 null]
+>> endobj
+1285 0 obj <<
+/D [1280 0 R /XYZ 212.176 455.458 null]
+>> endobj
+1286 0 obj <<
+/D [1280 0 R /XYZ 86.4 370.807 null]
+>> endobj
+98 0 obj <<
+/D [1280 0 R /XYZ 86.4 202.9 null]
+>> endobj
+1279 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F7 1115 0 R /F10 1116 0 R /F9 1117 0 R /F13 1121 0 R /F14 1030 0 R /F1 1120 0 R /F6 1011 0 R /F16 717 0 R /F49 967 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1300 0 obj <<
+/Length 4124      
+/Filter /FlateDecode
+>>
+stream
+xڥ˒��>_�#�2� ���Y����c'S�خ��H�R���fv����G��*B���n�
6�M�������7�L���,����q��~�It��Fm���Ϟ��ۭI��U�[S
o��z�^g�]�WOU���ʏy}�U�KWu�[��i�iu����7���|�Q�p�Qn��O�xS
n~�5ؔ���&�M�n�	�	M�kh՛���t���fS���J�*q��7���
��m�t�����l�60�OC�g�N�$V�KNEY�k� q�]�;����5���mD���>w}��Us�������\����[�$އr�CNç��;F��]�V���C
��;{�W'�g�?oKtM}
��s
K)o�"��o��(�
�$�xHM��%�kݭhdEcF�0F�����8��R&��f�{
p����;5UJ�����X<�j�5��s*��*M
fg����IbaXy9��pj�C�Y� ����
+◵G�����w��u���9����d
�T���0-L����p�����E�oc`�J�|�%�-�%�4�&[����d`
+�>R^��>+N�^}@��2�GZ�	��m
+���H
W'y��Vu(������;������Q�eY!3�`�LA���Xs� ��U
�D��'ق)'X�g���^�K��m��dӋ`%��O���
�yoy ��{h�n���jiu
%%��L�q��-d�p � 07�sq
�l�ΙP��P�a�p�ﰙyygK�6��
�������a]��[���U�%��� �.V��ɏ�b�
7�t��WuN�D00
Wo�(����aܹ�-�J[T%�ǵ�7�d��@v���J�!�j�?َ
+6��%&%��Ah~�	Vy��|���Y�xe��|�Oy�v
�%���b��a�8�r�J>b8i��(N���M��:��y��dU�Liq~�
+}g�C�[��݊k����>�Zgk[�D饉��2a)��,% |�����&\jۅx�?#��V~�$W���L �Od�
0�bl� c�5�O�ƙW䝴HE��g���,lK�eV���/G�/h8Bꄀ��_�њ�2��p��|@~��m�^a��۔���-�͉ٙ'�
�W��
��eSv<F�
J��
���2��ލ�w
+�T��{2�k�h��ˊ�M
}�g�)��N:�6����Ξ:�����(���\K^
�8�A�$����
!��Vu`�=6���qGMC�c�30���z+>������>��@�5<2�-��$�y r�����_sV-xϼ��p�Nu5���7珠��}58n�[�5�짼��7<iay�
+��r;wh<��yF�I�43b*Ft�:����iK���8ɗ��W2Fy.&[l���h
���m-
����0!sSB]��2���-m���/!��g�����I}
"�H"��E֡&���r��'n����S0��
+ d�Ӻ�ie�Wt��l�rn[��((IT�Q
A� �iW.�f��H��>�
 g͗�8��៻����'���f��6|!��(F�]��O�� �����d��
�
+J2�"�,��\��a2%���zo��U�l���O��z`!m��KS�@g�u,�\v����u
"�!�tZ+K=B^�&�,��,s��_II�8
�|߬�z��_e1�Cc��k���!"��A���E1hT�x�_�֪h<)��>U͹�0�
�{�p)8�.r%2���
q�Yꇡr
�Vc�t�e�'8�=%;i�K^�+V�L2?H�c?��w���Y��N�"gOx
g`)�<1k _�O�?1�*����맆�\_e/���^�b/�5XО�K�+~��'}�a|=*����	�"B^c�O��mG&�d)�w"�G�
A�]�c�)��
�� o�`2S�c��Ƹx���;�(���
��s�Ul���͑w��R\�ºa��⿿��[&��chB��d}5��-����	2r��������,����@�%7�/5H[��<N��*

�0�ՖPA��Rŋ����:����"h���m�ܙ uq8�u�9��CŦ��0�Xdi�����
� [...]
vhu_��. +	XpQ]��@@68|��'�\J�D2��u,Ը��`⃅� �����[S w�ڹ�)��B�—n
>w2T�zt�b$�*���6�]�;

CAG� �]/-�W�3�c��鱡�N���$:!幖��qU
v��#�1g��8�qbzy��\L{.z��g�KA�"t�)v�.
+/��)�L�
F�-1���[(�_o��~���KT �;:��t��wo�YZ��.0���b0M���SS�%��̥ƽ���ϙZ:-鬒S͟ ��t_����V±�
�_B���&d�q2Vp�U�B� -ZO�� �x�K>�	H�2B�w�u�y�����c�F�~�s
��11#��
���ɸϲ"x��0-��K�x%�$�^9�m_g�x�[d��H;I�1����c7l�n����ږUW���~wf�VUG�N�vrH[�H?����H���V��ٸ��v��
 Z)/���ݗ�"��
 *m�������M��0��f���x���u��\��R&G�]{�������g�+)�m"��	�/5̥�8N&u�K������*R`b�TW��|o0ܭJ�g\�g$��\��M.�_�f��X���3��o
]e�K�f�s*�(b
���A��=_�}'�|�d\Z8F�.��\
+�q�zS�V ���8���$��Dd��4V*x���5f;�8��v�I?�<C&���KP�1
�Ћ8p���r*�X�L�a�
�
|�l�@���|���N����CRW��ņHo���I����
+Պj�N�C���.mĭa��q��q���ݜ�\聥��W�fy�A�-�͔�БW��=w�jw 
�h8����I
����*���2g�\����+F���
]4m+��b����%=�����XP;>[����;�rM��U'Y@��
+���F�ӫ�ҙȌ����^�c�-
���h�ӆ����+��d"���_�ɓ�S-g�T
&�Pqp� d���_��PX�+�0��bA���;�/6~��/y0��>Z��=�
Oc�v��g�_���t!���e� }Z�:c�6ǦnvUAiu��#J���Ď�Pn��ʓ}
+�Ogj���b\

�V��cƏ)�}"}�zt$o%|��S�0QH0�j|OZb�w�<i�b@"�R6�k����!K	i{��W��@�q�i���]�#�/�c��r�.�I%۔W��d
�Y��+o&i�׏�j�+��x�����uS����4��ȡ#�s�;Y���]�S���8M����ʊ�w�ca���U3`<dI�����ƨZr����X�B��3&� ����s>��{�G%�Ɏ���.���ZA��Q�7>�~@���&�u�
���x|�5%�2?̶.b��E��W8sLS�D�fJ���™����C�����
���e5e*
+endstream
+endobj
+1299 0 obj <<
+/Type /Page
+/Contents 1300 0 R
+/Resources 1298 0 R
+/MediaBox [0 0 612 792]
+/Parent 1307 0 R
+/Annots [ 1275 0 R 1277 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1276 0 R ]
+>> endobj
+1278 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./ckpnt.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1308 0 R
+/BBox [0 0 492 152]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1309 0 R
+>>/Font << /R8 1310 0 R/R10 1311 0 R>>
+>>
+/Length 1312 0 R
+/Filter /FlateDecode
+>>
+stream
+x��Zˎd�
��Wܥc`*I�����n � ��
l��IbO �~�C�W��m�Ć.��(��CJ�:�5�����?^��u;��t�/�
_��2�щ���͛��o�:�Q���i9�EE3�㤏��%/:��.�.:�A��L��u�Z�u�GGD�떬�8�
���|8����S|ܷ�����ڢ�ZkQ{�I�֢f΋�f�K0A3�-ؠ��D!
+�A/tk���[sљd��
z��/��.5�h]BN4ݽ���.?��ў?�?
_=�_�#�u�я�o/�o�(W9J����������OLה�D3���Ç�)&l�Xׄ��7��
�����6&Ԙ�&��d�?�

����V��_^J�-������MS�R�/���Y�2����y��Em

=^��P�Y�KtE�ؕV�1������B�Wkd�
c�����y�뒻A�p�i(�����t�W�O��!Aeȓ�g����Vk<=9�3��-嗤���WI�������`�‚"�T���a�����˻�?
�y���g��p��z�8eëTRt�+&�w}��r��W�#?�
� UAW`i�`�ٿm�{i��m��jY������(�ve:hY�w��7�'�(8�F��Bު�IN'9*�YDL�ݤ�Г�,�c�C���ٔ�s{/����~+��ɔ��~/y�z|�;|�J:~0����"m�;i%�x��E��1�5C(��}�mj�� �B[�f]�����ܴS��٢
ە�k�&�Bk�9��dU�O����b]E��u]e�������5Alb������N���
���z*���f�I��
�2����i�uH���LQH�F���1B�2gTqB����NÕL��K�%�p
�mꆓ붙�9��Z�ә,����.'��{�gI��{u	X�X�f����3��M�����m��_M���tsq�io���s1xG6ud��Z�ק�dx����FX�v���q�>.
�Dd�/b9���Ge̮�~ec�mÉr���M
���}�`C�ޝ����OD	��~�|u���S"
E��2k�Ƹ��l������z>����X8m��u���Y+m�w��swI�d}��r�<'N�9��k�s�SCg����&+ch�z
V-�&���#�/˂\`�i_u�N���A���'�����yO��@��.^M�d;����=N��Ȩ���5	N�bCT�#trF��ڽ"�̗�L�b3UN�zƴ0�y"��ēTS���
�B'��^�:�҆J�y-�*���iR��	wz�j�u

�6x��K�v^x*����b��O4���`����v漁�
��9:%��r�	
�7���x?��Q�9H{8�JOzm'Ϙ�{�k&7�͈
Ϗ^Vͧ��Dz��o��m�~}��~kq�aj�� �'���R�gY�~/F2-���k�(�T at eS
+���I���Od��w��g
�u�U�^�Xu�g�� 8�}f�7,����O;2%�1����1Q��1�i��D'���B��KY(��1!O���(�$t�X5֘iSCљ���`u
�"��J�[Lm�6�4�^�!���d�eҌ��\���&
+ar��l��FHc� 6���:ŕ���$�f���vi�c2S<,s��ܬ+k��<ј�	^uH�Rаo�T
+%� +(άuw\�%s%�%F���[��h�oe�>���+���R������yT��,�8%��K��s�S�i���3���`�G��4��M�Z a�д�ڲY���f'�f��m��>f
6B� r��#�͝*6���7/cK>u�C&��w�2�Nez:K��@��CC�o��i�#�
k�w�T��P�
6�x=<厰��4k��<�
�hO�ʽ&�������
�<�� �N�J;H%��
�Ҁ�KZ�$|��sN�X�֪
 .
���K�������
{4)+��w�j�Ō��X�D��Z�R5۞>��bf�'d�g�ҋ
kn8H+4��

�zXЊ�# ���}F�y�\b8�7��3�C�+cr��T'x�Օ��q�r6	*�&c#�8E��S�ƻ�(����2�Z��Pz�"hZ����lԇ���Тz��@
�y�@�=}d�on�3���h��'���g�d軸{&vnb�3*��
��˾U
d�L�AVG��~�5���`اK�O��}���	��w�N�G�:���x��^x-$����hƨ.[@��ї�`�5�!�����6�ށ������g��c�YF��
���
W׷[���x4�Ƞ~֋Pd)O���d��
+Er�{�
4oY
+K��{�:xx�-|����G .�Zi]��m�a���k
�p�I9P����d-H�=ӣ_�=�
7�䣌�]��3�^�Z�0����q�Y�!�k�������Gmc�>G���/eR�f����Q�B95���IS�m��wh��)�
���r����Z�	n�1��
+�V�G��{*�+Xn��`۾��o�r��2h;�y�y|�"H6�h��M}Z�Ex��?S��%�f������ڻ�*�%½�
O�5�on���6��u��Vz/��w:��
v�$��9.e��ӵuc+8N�'{��[x�3Ƅ
��-�v8��.J�N�ݜ��7��E��<$� %�
$�Nί"�����H���07��҄i���+�#������D�
h{GH��픷��/���ڼET%8�FI8�6S�7�Fox��33C�|f~���7
�&��=�[x�����ïR �J.^&�R�
��H�f�ͩ{rGyrz��F%6�%�{|c脷��bԞ�Z�Q�㰧����I:Dl�"<C��1��5B=ڬ�
j*�Pm�>�ϸ�U
�z��[�-@�|�.��T����^bf��!�o�Bo�]�h����x���V��'Ұޏ�zS�?T���]�j�]̈́���
`�F��3}7��6#����.�V���`�/�����T�]�!��e^v:e��]Vctw������	ϛ[@$ KL�A�{x�OB��?mj��?^��M�#
���y=���>m�a۠oT%d"؟3l������?B�\�
+endstream
+endobj
+1308 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151030085606-07'00')
+/ModDate (D:20151030085606-07'00')
+/Title (ckpnt.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1309 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1310 0 obj
+<<
+/BaseFont /YVKWHI#2BTimes-Roman
+/FontDescriptor 1313 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 119
+/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 444 500 0 333 0 0 0 0 500 0 0 0 500 500 0 333 389 278 0 0 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+1311 0 obj
+<<
+/BaseFont /WJUQVW#2BTimes-Bold
+/FontDescriptor 1314 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 46
+/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 250]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+1312 0 obj
+3029
+endobj
+1313 0 obj
+<<
+/Type /FontDescriptor
+/FontName /YVKWHI#2BTimes-Roman
+/FontBBox [ 0 -217 694 683]
+/Flags 32
+/Ascent 683
+/CapHeight 662
+/Descent -217
+/ItalicAngle 0
+/StemV 104
+/MissingWidth 500
+/XHeight 460
+/CharSet (/B/F/a/c/d/f/k/o/one/p/r/s/space/t/three/two/w/zero)
+/FontFile3 1315 0 R
+>>
+endobj
+1314 0 obj
+<<
+/Type /FontDescriptor
+/FontName /WJUQVW#2BTimes-Bold
+/FontBBox [ 0 -13 210 156]
+/Flags 65568
+/Ascent 156
+/CapHeight 156
+/Descent -13
+/ItalicAngle 0
+/StemV 31
+/MissingWidth 500
+/CharSet (/period/space)
+/FontFile3 1316 0 R
+>>
+endobj
+1315 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2238
+>>
+stream
+x�eTkTSW�1$�� ���#7S���(0�R|LUD;���b
"	ABBIHB$Bx�g B�Q[�����QkgYۥN;v�̹�돹�k���?g�s�9{������,��`�lj�"yH�L���n��\� �"3!%��=�1k1�Ĝ
���߯e�lA :�>r�C��0&���wD�r
+r��y��>Z�j��N�"""�
����قe�R$��HE�y���m�D�*Ȑ�d�)ii��w�R$�,�N�D��#S
+VD~$


��u����
+��W�}�A� V������ð��ܝ���Դ�,AhX�0l	�
�b˱8,
KĶc;�(l�1���@����84O�֍���dܟ9�1s
���&+����ʎdw�ƣ�5`f-lV
����@�z�,o6"<�s�qf%��V�S�:=����p�N��
+8'T�o�7�n�@���3
+?�#C�n�7�nw����p$
����/|��Ə��s_�1�OC?�,��F/��ʴԼ��������K�a?T��؝n��#A�դ�-	�"�����.F����{&���\��U�Z��2�_�
�Q�ڗ�|B'�N]YE-�X�vmMKoR���;�.x9~�.��EI�MHj�%�
+|0�ς8'���,�C'�v�Q�m&��1f�Y�F�s�	�Z����
+�O�h7|���CK�{Q�W
��
�G��"^���S��ʭܞK����>� �<�5�h�����A7���x8Ŵ�
��6gy

�B!A�px�d�S4���w��nx �{����i1����f��Ʈ>�G������n�HPd�bT� �"lFW��s���Oo�8��
r�&/�T���岻���|���X�U�:�V������y���]Z�F�p�^���P_3��Jm=�P6Z�?����� ��Z�<���5��5q'��}�nqK�"��]Zj4���@�*�U���P(*O.�
�y�7u:��<q:�Q%<a�,Q,q����c��2(�B]l{Me�'�	�K��f4���%M
ݘ�s^޷�GP�
Y��zyC���.����h�O&H��@�P{��8��A&p9��!��)���&��h2�⒓
+K gZo2�,
����V
+8�/R_���$_97�>����*s��k��	t�L��
0�����=
�k:��7՘�j�r}N��
�� �.
l���ہ�j�:�'ޮ���
B����������`K�������o+uZ�B�ep�ԡ��U���G����קW��!���
C������C������I2�=��S��Ig��w���Y4��Gt��nM�—�
Aȶ#�y����OkeYU��(u�9�
x{[��y����pj�^uq�H�����="�:2�2q��q
�jR/��
�C�ڧ\(��Er�̨� S�����a�;�!�G��
���(���!�� tϷ��˻O|.}z
Q�pȚ
+Z �����R���#��lj�B�.�P<^���C
�||o{���
+xg������>C�SL���E�'X
xAY)�B�Q\;F�7h�$�3
{ԼB�Q^


8
�	*��Ԧ����P,�Cj��?�Y�=���

1���Td����!��-��X��?�x�h񛪗���.�/t�k�PP��i�l>5�Ro�n�7��34B�����v�ߛ���I⤰8�l�����ņ��E�%��]n<¦�� ���Z��܌�h˘ar]����jtI�[%�SVk�;�й����
+M=<�C�8P�m%�
+���slfhF����Ҡl7[h�4�\�BPBp����kc��������pS�Z�������F���6Ԁ`r^R!*�.>Pȓ���F��	�d��B�WLd�����)���E�ِb�Q��/�'�x��wz��A �
PJ(�=ķ��N�Ҝ�(�P�n���(
e�"�3�_�X��@�gL4B�>	ei���ʊ&{c%ME�S�E�=���y�F�QkM)�	�v��
k��|�+�ɶ�
������\]Uz��x
�b6ڌv<���C�
�獏��
R���Ě,��K���}��!��
�~˧kև�N� ��\�.��G��*�{,�Ĺ�B�S��V�n��8
w������������&�]M�P�Uf�U�y�sx������S���:a3mH��;�X�dϥ����
�4GsR��]<��Ѿ��eT�����%�R�f�
�{���{�L�����?��?��X�E.
+endstream
+endobj
+1316 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 282
+>>
+stream
+x�cd`ab`dd���M-�u��Iq�~H3��a�!��]�=��,��\V�n
�n
�E�7	}������A�����b�b���ʢ���РpMmm
������BR%LF�%�83=OA
�(K��/�M�+�Vp����LVHϩ,�(VHLIIMi
K�I�Vp���,(�/S�p�T0200��~��I��
+A���y
+~��
+>
+��)����


L
+z

�
� 7��+�����Du��
~7�MM��^��k��
;w�n���+��#q����lk��+p�Y���]a/ Te�
+endstream
+endobj
+1275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [256.042 370.701 262.504 383.294]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.1) >>
+>> endobj
+1277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [304.153 370.701 318.876 383.294]
+/Subtype /Link
+/A << /S /GoTo /D (figure.2.1) >>
+>> endobj
+1287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.545 284.562 185.268 296.517]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.061 248.697 203.765 260.652]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.16) >>
+>> endobj
+1289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.128 188.612 124.851 200.568]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.385 188.612 269.089 200.568]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.19) >>
+>> endobj
+1291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [289.729 188.612 309.433 200.568]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.22) >>
+>> endobj
+1292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.07 176.657 283.774 188.612]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+1293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [304.922 176.657 324.626 188.612]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.21) >>
+>> endobj
+1276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.151 97.472 118.964 107.435]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+1301 0 obj <<
+/D [1299 0 R /XYZ 86.4 726.045 null]
+>> endobj
+968 0 obj <<
+/D [1299 0 R /XYZ 138.673 602.201 null]
+>> endobj
+1303 0 obj <<
+/D [1299 0 R /XYZ 101.643 138.319 null]
+>> endobj
+1298 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F49 967 0 R /F11 1019 0 R /F10 1116 0 R /F7 1115 0 R /F19 1302 0 R /F18 1304 0 R /F21 1305 0 R /F24 1306 0 R >>
+/XObject << /Im3 1278 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1327 0 obj <<
+/Length 4527      
+/Filter /FlateDecode
+>>
+stream
+xڽ;ks㸑��+T�I���ă ��T�
���*��d��aw+EK��]�Ԓ��:���R	���$_l��F����
W����~���2�<ɍ4�+g��2O�����k)o7�	��*���P�ն��n�S��j�ڕ-����������_n잮İ[�8mV����?��
���U��ܭ>Ѻ�J�<�0گ�z�7i �[	�(m���E"���%�v#���-�M��4- ��lݕ ^_}��[%��<Y������o޹	��j#E�G���vǮ��P�8
��<#K3?�YZ&��
<�j�{���g��`��-�������W���:�'x`����V:���k�쪶��ӣX�
Oo���ԗ�B.D�g�&]@	�q���x��5���VZ����V�aG�nap�,��:��X+�;��G~����߿���m��}y�gET!f`.h=;���
����w����p����
o�I[
 F {W�������#�p��H�bw�o�ٕIr
���M"E�R�K�}�N�	��D��L�?.9)KD�����@��F*qVk�c{H-'{ m$�P�Ƒ���C�uUQG�p"�#
;^0�
�tf��l
�3�7ʬ�;.w�i"��l�*8v�㶨�{�f�Xs�{�����]��C�~B�)Z��D�Y�pr�vz�+���
�ؙVt�AS$� �ʁB�*��u����
�M&T�ReI�0R&���t%hCk�,II��^���g=�i"`cР�]�+�h' �Q��֣8Y!�.I���i�Df�����t*���$P>ѹ�C者�T�&�~ �E��� �E������̋r�%wB���1ܤI�{
�4�@kA�0#
D �6�Ni�
�9
@u<.��a4Y��(�fz&8��N��| �
+��
Hc�����4�6�mw�*�9
+o
+:+r�se!��6�t�o�DC�{:�i%/��T�e���1:k�3���He�T=Z��j��ڦ.�h�F=E�����ߝ�=Z�4[^��s�AEV�
�pP���W�t
��vx�ٟ�
�S�@����W�D{N7�Eb�~�>�sח�����ͽzTy�
�
S�S�����<qI	��PBq��鿦R/(!�����$�ºM@,%��.�ZP����&�T�pp�jDުBmT��4��;S��K{坍о���hc�e�_T�ـwY"�_�_v��\bAkO����^�U����a����Cnݨ�]���5^�'��b���y�����hI�4�`fp��\eZ%V]w0�Ɓ�]q0� �
+{) o`���n ��{����˜����͌�j����H��v�,Mu %J����B>��*��d
�f�( t���yƩi(b)�M�
r�9�}����<�0`h�xi�ɦ� ���Qa��
h\څ���$����=~fI��~����WR�.��j������� 3�í4m�ΎZ����~X�=�
&Xp�+K
�OE�x�t]��-�=OC �V��'M&^�B!+���Tm��{�'<��k�<
�O��-�OÕǢ-e_�� U�8!�_x3P׭?�����
�=�TV���`C�'$�OM���:$[n�
%��r"���Y�YH�ӫ���#�E{��5\�Dz�L&�������/��c�=��
��[m�{����Q`{����U��-9Um�_Bl�Ҁ��g�vk�T\�5hd�Z��o� �o
+��T�h
by�)4 G�iC�%p
9�x�����5�i�@�J��H)��C�S��*����1MRmf����KT��^Rx2����
+��?P�͚��Dޓ�i0�Q	��l����b�]s^�r�8I��.rfL�҃��m��mOz�!d�S���\x��&lʁB�yL�|`�J`u�MrX�~j����1�D+�AT��A���*��<<1�p_t%M��<��!�

�]����Bi0�t����st�B�_�P|�o8��'0��B��`����21�>���G�cI��a�� 
�����}��'
qh�b�~�-H%�:%X�,��dd���8
��ڟG?�l���w&�I�<�$�4��M(�`��DdLD� �a�Q��9�p����1��{���C�Ex����G<ؾk����WS�B~�U\
+v*
N�=���<=pH�����D�hL��{��a���e��4j G*��Qp•S��g-9K����O�p@ǜ���hpڥ
׎���	N��
����+';('�sN��ocҟfI9�ő�zݷ�'�
���`0�0���(x��43䀒��X���e�N
�
+��V9R�
Gw��OI���
zs��Ro)	
c%�T��$��ƒa0��&�%b�Mb4&>�ƺ_���ѣ\`�f�rNa/h�kk�e½|
+��v5$�C 2�_+�����n��X�M(fm@��f@3:��>��p��x��Y��
.�\օ��E���J�`Q���Ĥ��(+bݟE���ﲃ"xspmx}�أN�����k��b"�S³8��?�����8�ϩ�ь���{��gQܕ���.6��8�EQ���<E�����@����a��G��A]���&
+��piRO�j9���t��g
��i��k�
�"��t���,��3
����=�K�
Lhd�t�)Zy<3�+���B���6̝�,��ub�ȝ�a�
޸�_S{�����f�qAR9�;O1���Q�~��}UqRM�Q�v��c
'`$%��P�J�6{%��.�64�B�Y>�,��ΓF��0���/U�H��Rڜ�K�Y���#���O�t�W ��=F
�B��R]���sd�z�<d^:6
+���J���\���b��޹ld�
N�g�1vTf��DD�])�d�)#R 
+٪@
+����@aE� S.�u���^��W��7VX�%��oR�3vϼI�~�*[M�9��*
e�7aD!R��ηQ�
�7(�+�|6S�bX�
)���^�i���������R���[a����I
+��eq]
�{'�Pk��֐�5�u��fZ#
+&��_—�-�����M������"��-��������k�ۤ ���?�
V]g�4�j(��_�J���XCL���{��x���b�� Z�E٫
+#^��Ej
�y���W�F9(?�
+�(�M���uK`
0\+�
#��	Ր��&/��	���]��\�#v��G����}����D��h.,�xQ�+W���*?�J����3����z�_��﫺,Z��6\��j��I*Y97
W�O�����E'}
^�#Ƕ�����|K+d�Us><��ʐm|V1�*���O.��V`�0맪~,;
o�Ӷ�O'��+=f��d뇂KC�,�u���W�;���ٙ���1یOE�g{ �:6���K�)��gYsX��0�K��s�:>���f5���Z*���9i
��5~Dyg��a_Щ��ה?٠�5h������C�
Xˌ�=*_Je0����3�؞|����d�[c"�ߡRa=�T��')��
VӊI��y�,,��z!m	 �w��
�T`��4
���iay5
�U�,l��*����\������xKG�0A�Q��
Kٷ��yϒ��c�^��c�؎4�\����F��'`��bnU�G4� ���J
;�$����w�NS1P��W��]�վ�܂�k�����);��!-����zQ��uvc�W*	�5_TF�¿��b��W�0�~�/���gL�|�X�
}�t7���+�ϙ�ǐ�郒��vj����=���?�
��I�W�}j$��>��j�ݶ�|I�g�
~l��XV'�
����[X)�ͮ�(}ekF��
�\�+��[b"��o��Nj���S0=ϯ	�F`�9Cago�K���1�e�2��n2�-�y���{��R\�+鈥XR�MiW
�#l
��/��z8g���mpt�we����<�؊zM�7��*��m���<�����g""�s�}&ٕK��$�+1%�`�`�
���Թ4|���I�����y3�wp��p�o
x�
�~�3��ds1\�?����2V��@r�_����
��`��%��"�1c��D�Ǜ)���
��O�W�W[������]4�
����r��?����0�V����T�/�f�Zg�z����ώS=�jo6|���c��Z���s�����4��o��}�L���(`s6�n���?ߪ��8��t#p+��
�*�Dr�CO�찟�Bo�|�l�kx���r(��z�?����W����ˑ��mP2��XȃC�I1�L	��j�?�"ou��C�W�2�
���r8�݀ӑ�
�����y�
^�4��1�rڡ.�C��O��4H׏H�%mH>^>����#Б۱m%���kT�p�
|�~��
���B�(Ia��g	�߱�r��*Ǽuv��� ����{
��Yƴ
z��
IeH&Pc�<�K [...]
+endstream
+endobj
+1326 0 obj <<
+/Type /Page
+/Contents 1327 0 R
+/Resources 1325 0 R
+/MediaBox [0 0 612 792]
+/Parent 1307 0 R
+/Annots [ 1294 0 R 1295 0 R 1317 0 R 1318 0 R 1319 0 R 1320 0 R 1321 0 R 1322 0 R 1323 0 R 1324 0 R 1296 0 R 1297 0 R ]
+>> endobj
+1294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.069 653.913 411.792 665.868]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.619 641.957 138.081 654.55]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.2) >>
+>> endobj
+1317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.042 512.568 417.746 524.883]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+1318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.673 475.734 429.396 489.655]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [296.38 429.242 316.084 441.197]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+1320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [339.978 429.242 359.682 441.197]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.21) >>
+>> endobj
+1321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.377 222.562 401.081 234.517]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+1322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [324.175 189.187 336.13 197.6]
+/Subtype /Link
+/A << /S /GoTo /D (cite.OzBa:05) >>
+>> endobj
+1323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.003 134.707 147.725 146.662]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.956 91.821 167.678 103.777]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.726 59.614 406.539 69.577]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [381.46 52.142 391.921 59.271]
+/Subtype /Link
+/A << /S /GoTo /D (cite.OzBa:05) >>
+>> endobj
+1328 0 obj <<
+/D [1326 0 R /XYZ 86.4 726.045 null]
+>> endobj
+102 0 obj <<
+/D [1326 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1329 0 obj <<
+/D [1326 0 R /XYZ 86.4 308.248 null]
+>> endobj
+1330 0 obj <<
+/D [1326 0 R /XYZ 101.643 81.532 null]
+>> endobj
+1325 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F7 1115 0 R /F11 1019 0 R /F1 1120 0 R /F10 1116 0 R /F14 1030 0 R /F9 1117 0 R /F49 967 0 R /F6 1011 0 R /F16 717 0 R /F19 1302 0 R /F18 1304 0 R /F21 1305 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1341 0 obj <<
+/Length 2860      
+/Filter /FlateDecode
+>>
+stream
+x���r�6򮯘#U��@�q��U�M�]K��ImQCh�k��aE���F|�P��ު�̀
���w7��v�ޜ����볿��*
+Y
Gju}�Jb&W1�_�������.��Ls�Z�����
�t�9�	Wk���
����<�
my�l���+늺vsɄ�#�[i�%i�`�|�y���o_^^�|Eh�#4�*ei
�I�YqBr�����m�/�'aP������Q�����ܚ�19Mw5A������
�Rr
��sھʋ�l�	��)��u��j��k�t�J�H[���LS�x@+���
�)�q�-��
���4�
�&CƇ���*��"���W�|��fR�+�K�r<yh;�oa�@��L����TTp���(&yt�
eP�UYT&s�Y�57MVl�sv�ZF�1>h�b9�ȑ�1!�/.�EB�ⷐ
Ә
+��=X?N
;_�J�q.�!�:�s.���{�m�&Oл�)���-h��qP��ڔ}nZ|>W1ȿȈz�\���ȓ4P�8�Ok 8����D
�|_t;�P-�
\��� ��E���@K�*+���J��.��E%�5������(ݾ-�-����3��2 ��#��&�Ik
����
b!�ܛn<@��m��4���%at���
+p�q�E�::�n���8�9"��Y�ͦ+�G��LD�<�4��s�Y_%ѠQu�`p�(��$�p����
+�n���e�ø'����%�n��:��1�/M���u�IF�!p�?�1Y����R�C@?Y#�6�X�s�3D�TzEq!1CG
jP[�K<�p(�GN['+����Aۮ�7]����n�u4a��+���	
�h*�l!Մu���q�_[+�ኯ��8x��l�q-Elc*-��O��>I
+�%ޣ.�~?
T8R2�,!�Y��s
�
�"X�ci�.���s�Ed��p�=5����p%)SQf7�y��U>;E7Y���h_m�wf%����R
mI���+�|��,��!ܻ̇����3�Np�x���=���s~�:��K�n�v6��Bb
 
N&�
ʄ����
|f�	���sdP
��w
�j���������0
p�
�P�
Ӹ��b�
�t���b۱�,T]�*��fm�
�B
�ȳ};c�~z����D���N
��tcM�Fݐ��
�h#���?���m tz0�����7)���:W�`9*�}
��7�1�R�PJq�iVa�ǹ��^=�����1�E^E�i��X%��Q�X�B�p
{� �0}�X0.�'m%d���G[�F[�����|Ӈh��﫭Y���:��Ӎ#.(Ϳ�<
O��*ۀ�
�>i?
Kҭ=�P
'c����2|z����P��/�e2N���5�3f<,�R$���!����9��d+bzI
�
+�c�!��ʿ2?��?t�O7]���[��
�/�A�nB~,��A��ǜ�U�ܙ�6P�nP��.���`p_����P<��:�R�h
�
�)�sDĴԾ��ҋ_�G���-��j
������
�v��B�
K�\�X�M�u�X�����R}���8�bI��2��#����~����/���Z�]�5c��3�R��T$�1d�����^IKp.��ۧ����x�*����YǴZ�5R��
�ƴm�<
�:����A�*`�j9�~8�A���@��S�!�ǥ���x 7It|b5�ƴ�HA�,{U�ow��{GB����C�<Z�!�h
��-���� g�hJ�7CC'�b"jȡEz���H�k�U7�=��	@2RN��P��"4�Ƴ]YoU�����^���,*U�-���GԬQK���D�I�R�=k�9�)w��`����9�ʝ���P��
�~�M���r�홚���pc]��?�����C������
L�����+��b|�`����B
+3��T��
V���'�^�J`N��=�, 'wE1@�]��F=t���F�	@�,�qɹ��А�v�6�v
�Rp�R���vP�b�6�hM����g�Y
�	�a��q�R!W������U��z��duo��!$r��ruu�/z��

9/dW�E��;y�tH�<_���"�� C
[Ď5�GXs�27�v�!�9S�u��6e��9͌����ˀ �M1�
��P����M=
��q.	>B=�[s�y��4��:Æ;ƀ:sr+���i���!�-}��9�2��掠�m,
+�$�n����,b9N{{i�+[�C�2X��b��
+�5u�Э�_�]�ѧ��0��h���}�z��aѶ=5Se\�;R>*ce8s� �Ԅ;��� e��>
�o�ς�i<�|:i-�����I
��4�M\��lO6��!����
S��ŲTz:���̆b
+|�T%�
�v�Ӟ��������.�'��a-$J��غ�O'^�߀�D9J�~�+Jo6rB��t�x�6'H���' ������M���#
U�T��R���7���19�P�����2�u��B��0^V:���T\�in	<{�A�Q|������?$3�q�ĖB���
���m-a��a
+;ڥC:q}ǹjJ��ϯ��Rp���lgS�q�/��2uߖn�/mC��T���Fa���<O$���u�M�t��p|5�!��
�l�)�D3��
(�sX��s8�zZ�����ֳ �����M�w���{�7���"�T��-Uu*a	ON��ǜ������>���q���<�ɠ��2U,��g�v�k�L
}�V��+�0��|V��Qڔ�J�P�8��G*���8X� ��ѐGAE}��@r�b�WJ0!��$<��iPE
�W��|�����w���C�?>B,eo1���)�V�9���%�)GzN��ś7�޿z9+��?�_�^
+endstream
+endobj
+1340 0 obj <<
+/Type /Page
+/Contents 1341 0 R
+/Resources 1339 0 R
+/MediaBox [0 0 612 792]
+/Parent 1307 0 R
+/Annots [ 1332 0 R 1335 0 R ]
+>> endobj
+1332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.72 423.776 422.442 435.731]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.1) >>
+>> endobj
+1335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.181 205.622 408.904 216.47]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.2) >>
+>> endobj
+1342 0 obj <<
+/D [1340 0 R /XYZ 86.4 726.045 null]
+>> endobj
+106 0 obj <<
+/D [1340 0 R /XYZ 86.4 701.138 null]
+>> endobj
+110 0 obj <<
+/D [1340 0 R /XYZ 86.4 521.972 null]
+>> endobj
+114 0 obj <<
+/D [1340 0 R /XYZ 86.4 269.729 null]
+>> endobj
+1339 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1345 0 obj <<
+/Length 551       
+/Filter /FlateDecode
+>>
+stream
+xڍTKs� ��WpD��-譭�6�L;��4bGcY8Hn���EB�cRgz�=vѲ��`�9�P$��@#-��Pq�S�$#�(�=�<}(n �
)EB���ҌQX�0(���i�?��\ӗ'���%�1 �@�K��&��!s0bZ�_C�p�
�,������34N)J�h/	F�`%���|HNmc`v��`���!�
��	� 
Q G:�� 
'��(�,�	�f�P��J3�)��Ym��ϔah렐బ�ڛm\��l\uϦ�g6.�76.�Ӕ
�n�άz�M�hZ[�h]5���Һ:�������a��m#Ə`��mm�R
;[��G��&�`�L#.E�ӫ��������U��s}_�K��%9�RNn1~�R
+]�K,=U6k�Q۫�(�J��2��J��`A~���j�����mMP.�&|ˁ��`�
Hå\ ����h��ɂ
�+oW��dm���n?��+?�n�W��
�:ܶ�B�<
�E(�
+d4�bd_T��d��
����)rq#1�p\�������2�}՝�_��� q
+endstream
+endobj
+1344 0 obj <<
+/Type /Page
+/Contents 1345 0 R
+/Resources 1343 0 R
+/MediaBox [0 0 612 792]
+/Parent 1307 0 R
+>> endobj
+1333 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./sunorg1.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1349 0 R
+/BBox [0 0 719 456]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/ExtGState <<
+/R7 1350 0 R
+>>/XObject <<
+/R8 1351 0 R
+>>>>
+/Length 1352 0 R
+/Filter /FlateDecode
+>>
+stream
+x�+T0�3T0 A(��˥d��^�U�`nha6155Գ4V0�3762���&F�
+.�\�@ }��
+endstream
+endobj
+1349 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160728-07'00')
+/ModDate (D:20151010160728-07'00')
+/Creator (GIMP PostScript file plugin V 1.17 by Peter Kirchgessner)
+/Title (sunorg1.eps)
+>>
+endobj
+1350 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1351 0 obj
+<<
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 958
+/Height 607
+/BitsPerComponent 8
+/Filter /FlateDecode
+/DecodeParms <<
+/Predictor 15
+/Columns 958
+/Colors 3
+>>
+/Length 25421
+>>
+stream
+x���	�չ��N� Ⱦ��

+
+�b D"�I@#D�E�""��b���;��
+��q�`�"( .�(qe�,�0���JQ[W�������{xxzz��O����Ϝ���7�|�   �����   @Dg    �3   �   ��
   Bt   !:ȴ�K��������w�|�Ŷ/�n�t�e
ڵ�g���vo֣s��uk'�" (*�3��z}�GSnyl���nHZ5iX�
vОI7 ���
 ��_�ʟf?�t+J�q=;����I� ���
 s^_��ɓg�ۻ���q=��wE�����%�0��o�j�G��ު���㶺�����!ن@q�dKՎ��ܩ�ithW��3�6iX+�F�ϖm__q��E/n�ռ��}��#�4��t� ��� ��%�O���ƛﻼ�Y[ՎoN���?�T���?t�o~�t� ��� ��ϳ������������I7'�^\Qy����j��[�2qh����#:Ȗ�'�~}�Gƍ��5?�:I7'��o�������g��7��ts ��� ���ȫ�vT7�ئ~��'ݜ��:�uㅻ�I�% PDg ��u�tuㅻ [...]
+�Άc��<w�ز�Z����6k�Dg��
+�3Dg �Bt�-��
�*�z�0:[��kt�.g�
�i�P�qFgsɇ�����Ú��Fg��
+ܟDg Bt�-ѣs�ȫ�7n�*:���� �9����
+�+V��Eg�[�����л����:`t��WYY�`�It�!Dg ٢��ƌ�P��S����ye*���֑f�1�謂���K.��z	3�����?�� 2��
 [��:��3�1n��l��>X�®q��l������l.V=E�hs�8�\g��
+��
 S�� �%���T�5�^�y���ͼ{�U�D�ζ�϶^a�k��	�@��dK��:�Y�Q�zFH�_�N��<b����
��8/X�L{†���z����u��+x�#:��3�lш�*�Zg[������V[tv�ԠWt����c�-Z4�.�J�٨�������Et '�3�lш��`3���^stV
0[k͋�ٲ�����}���#�Ư��S-1��Wtλ^����
 C�� �%��D�Y�;?l����蜳�0��J�;�\l^�μ2��zs�j��f��WDg �Bt�-�s�́d���!�9���kt�
���"�ŋ'�x���e󅌴}�=c�8b�tλ^y�d
+�@�D�� ��� 2��
 [���":��3�l!:Nj�
 S�� ���
/�3�L!:��s��� 2��
 [���":��3�l1��v�(�^��)Dg �Bt�-���Z����]��l߶"��[Վoz��P�&:��3�l�x��E/�i�8�w���K��I��Wy��O���m~�%'&�
 (8�3�l��+��L�&�U�2�s6��r��G�l5n���႓�&�
 (8�3�lY�y���\��ڸ=��ѿ�5��բ�N�~��}����o�d� E at t�9�~�;�ۇ
Tg䀆
��N�I������B�7�������N�I P
Dg Yt����⽤[�>�߫ڱ�Yc���o�8���,�&@1�d�]
^�5�y5sC�O�oi٤~ҭ�ӯ{�����_�1{ YAt�]����G^�ǚO����x���J�H��
�i�|�
;hϤ� EEt ��8z���NN� ��":�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��B
=�7��qҭ@p���ؕ�. J��{�z���I�"���B1ڔ.�K&�.�K&�"uI
+�Y(v�t�^2Q�t�^2Q��KR��B�K�
�����
�����D]�Bt�]"]��L�%]��L�E&���P��B�d�.�B�d�.2Q����b�H�%uI�%u���$��,�D�P/��K�P/���L�%)Dg��%҅z�D]҅z�D]d�.I!:
�.�.�K&�.�K&�"uI
+�Y(v�t�^2Q�t�^2Q��KR��B�K�
�����
�����D]�Bt�]"]��L�%]��L�E&���P��B�d�.�B�d�.2Q����b�H�%uI�%u���$��,�D�P/��K�P/���L�%)Dg��%҅z�D]҅z�D]d�.I!:
�.�.�K&�.�K&�"uI
+�Y�W���٥���?�~次G���ۦG��ɵ
L�%]��L�E&�"�Y��7n�vҌ/��m�?z����j�H��z�D]҅z�D]d�.�e�|�c���zϑ]����!I����L�%]��L�E&�8��,�7�����z�D]҅z�D]d�.�#:�c}C�[I���L�%]��L�E&�,��8�7�����z�D]҅z�D]d�.�":K��P�V2-��L�%]��L�E&� ��ݚ�7��⟫�����}�ns"m���o>۸�Iú�e�i@��
�iۼ���z�_�V�iC@�+'�^�%'�.^�WNd��K��x�.	":�WՎ�Y�k�KI7��ј��[Q�_�g
�Y�n�bG�\%^/��*�x�^��uqE]��KR���26��'��ǚϒn�Dƛ��&���?����`�����ta?����$��V8D�o�������j���
�wm�F��J�;k�^���˶���R�s�A{^=nP����^Vr�E]����
���S/�bE]d�S��#:�xg�g�/�S�
޿����l{�xd��)��W�/?s��d|�'��l�����ta?����$��VPD����۬y����>�-�n�,Wܱq��_7ztnٙ�nN
��#�zQ�G��~$u�I�񭠈�5����g��cܸ��&���K�9����j�����3�i�QI7���`�����ta?����$��VPD�G�:�m_7e��I7G��
�������]�$��z�H�^���Q���D]dx|+(�s��ç�/ܵ{�-�����
!���T���?��ta?����$��VPD���������؏҅�H&�"���[A�k�K���KP/�Zdb?J�#���LҎoEt��.�O�.A��qj���(]؏d�.2I;�ѹF�]��Ww�>���Z�x�1���
[VVk۶/���-{o��~W]5���㎻j�����4�4運/~�|��%��u�W�������[�~i{�Y�N1���v߽��o_]�N���I�%4ꕮ͙���!3]DZN-fQl���Qf���q��m�B��؏�B׫W{��i������':���H�~P��xV���H�b�gil�$u>�ݙ��
��wF!��VPD�Uj���٨Q=c7�s��j۵m�fbS�*�G�B���s��G�t�v�˅/_ZN-�5
g��t
������i[H"{V��#mAB[����=^[Hq�e?
+�@U�~�
++]u	r��*�����ٿ������5�
�̷}��g�GWۨ����uW1ӛu!�bUts�ʃ<&�v�P�JW�l��|��h�w���Ԣ���>;�N���7�)����ظq��1��ܜ��]$�Y�ޏ�pM>
����B�#�Qp��B,ǫ��U���y���ַ1�蜷��}��G�񭠈�5�U��׼��j�;mS��Q��WPԆ��G~��v��XGL�
��]"x�RW gc\�N��RpjQg�>}:�w�/�8br˖���%^�t��EQ�l����)�����(���-�s����g
)�T�G��
+�
��JW]lG!�#���:ֿ�
�"��[A�kh�lc�^��0kVS��uk����_QQ�s�
r4�N�.�^i,�9�D�8��>7�\�ko�<"�mV��1k�n0
+d;�v>OHسһE�3����R
�؏�+P���JW]�
�\K3}�	��
��=�O�G9�i�v|+(�s���9�p��xd{�u,�:���~�֮[���l@�?�I�%�F�t�9�6�M������<=�����b�c>F�`�@m5��g�w?�(Hh�v�Q_�-�8��G��
+яWa��.A�T^�y����wFg���r��&��VPD���ζ���@�N�N�v�أ���>����]ۏa�za�i�X^��c��Y�ݏ"�m�[HA[k���R�*D9^����9Ry�F
�T9Ǝ��u&�k��
��\��6r;O	����d��7�r���$m��}�FNj�����O�����p����[\G\�qh5*c�(i{Vz���4�
+�o!m�I�~J��w�
++]u	r��)�9���~�3�����#��QPD��L�8g��u�5߯�����O�&�8?��([�*tֿI�.�c�b
�L{�ӿ�D�Z�����.
;�:��p��ǘNqN��g�w?�(Hh�v��_���&��QX��B,ǫ��U� G*��؎�{�\�ơ/B��:�ѹF�C��0�k��?��;��Q�n��)׫��B^G�|!.N�#]��P)�:��\����J���鬵�=+��QyC����n!ř�!|?
+�U��xV���H�_�����
�z^���d
�
+��\��_�b��sa�Bq��1�H�%��J�
!r�#i*�����z&�N�q�u��
��ͅ8/�bkC"{V��#ma��#�R�9����
+T��ǫ��U�o�~��ϻ����(9K�G9��O�񭠈�5
+�Eܮ��zG��I��_���K[���
��2ɧ�)49�uI�;�>M���C�
+�}��*��c�ڳJ`?��+��l!ř�!y?�P�*D<^�����_b9�����a����"�\ȏ��� :�(�)$�����_�N-��~�.�G2Q��
�
+��\�]Ÿ�]�z���"�Q���D]d�v|+(�s
v	�v	��S�L�G��~$u�I�񭠈�5�%�I�%��?N-2��
��L�E&iǷ�":�`��'m��^�8���~�.�G2Q��
�
+��\�]Ÿ�]�z���"�Q���D]d�v|+(�s
v	�v	��S�L�G��~$u�I�񭠈�5z���jG�\��&
k�}|�H�%�����E]���
��L�E&iǷ�":��ô���YS���l���u�n�,����؏��ԭ�čg$ݜ��G���.>؏҅�H&�"���[A�k�y�3s�b��}X�ɧ5I�9�ܿ����ɸq�~�_w�o�nN
��#�zQ�G��~$u�I�񭠈�5^\���W~�e�ם���j'�
9�����\��f#9k����%�ՠ^^��u��~�.�G2Q�d
�
+���-c�0v
�FE��F
װ�au[5-K�QIڲ��E/n��/������c�V��rbE��>�^6B�E]l���
��R/�bC]dR��#:k��C���bۗI7D"cO�zܠC��-����`�����ta?����$��V8D��zg�gSn}�k>K�!5�l��_�"�V�hմ�'��?���
�׋��J�.^DՋ㞉���.&9E�	�K����_���eᄒ�#u��|��VMwI���Zz�
��*��/B�%�(&�^��$�.^�ԋ�
u1Q	E�	�K�������?:9�V (�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%]��L�E �� ��P��B�d�.�B�d�.Q���b�H�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%]��L�E �� ��P��B�d�.�B�d�.Q���b�H�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%] [...]
+��\���ׯ߼5�V�jGuEyYҭ@ 2�b�.��qO&�"�̢Mzv��I����5���t�n2�b�. PL/�uN�M(8�s
3:?q�qɶ   ]��x��At�
+�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�9�,q [...]
+�Ǩn	��1vZ\����}f
�
+���v[��w%����ΙCt%�A*�����\�=��tkm���:TÜ�w��{���A�l硰e�kg�J4:�j�S����I\�9�v�{��r.������W���.]-$�謄괈�J��Y���^t.�Y at cW�؞��9D�P
���Y�8����
���M�ӭ���u�
հ��`�S�H��[4^�\Y�v��T�sؖ8��s��ot��LE��Zl�4Q|��U�b��T�+U��
dx2�MEBt�:�z��WA��(q�"Gt� �s(�GvŚ,��������SK����{-�v�u=�bۑ1�i8H���~X�m��Ow�b=7x
���K�I��a+�7F�eV��8�
�m���a���ۭ�zY����n~����(�_����
�l�\�~���r�m*6��)����_l]Q��@�U�=#/�s��C�9Hy����q<�����<�l[�qc�	Oo��?=��3^'"
����
�K��e
+�N�J(:k�ĩ��Z�x���v�\��#�&��/籿D	d>s6��5rqG����oS�)ftv]_��\г@�U�=#/�s��C�?H��G󷶃l���2t
�O��
�A�:<�sX�0�_�uVaF����
[���ԨT���FK�
+�s�F��P�m\)0�旷(��EV��ٮ����
9����\�@�Qg�5ǂ�9D�P�gz��w�ck^���>���/qAV�g(�:d�8Wtv=����t�Y�R���z-q�7:�4x��s���3��6Bm�>�e�l�6��E1�)����|��4�(��r�m*6E��^�6:�,e�M
3GAt�
�s(a'�:OfA>����7~�U3�O&�F�7�z4�ّ �_��V�E����?�9H;�*��1Ak�8����x���o�t�U�
F�c�A��i_x���N>;����
!^��e�����;-�M�&`t.����ms�?
h�J��ȋ�9D�P�
�\��y2�J�ϸ6�q��j�Ot���@�+W��9�O���l�2�m�^�
+
��|">��l,�����P����s��6,ž�!:���\�(����Tl��}��P�/�Y@�0�p���ΙCt%�A*��,ި�2}��<8�����&':[�^)/��j��1�
d���"F�P�m._����+�ͯ�����f�4��
<J�괸6�bFg��
��c�g��Y��)�":g�9������|��CO����:kZ��B5,�=�9xt.ܥ�\?��La۩W�B�u�{�":[f�e��W�"�u��:[��}97�B�uVl�k�֭깡&/������Tl
+=�9����T�1
f��
�s��C	~�ҘB�
+�C��x��W��'�|����Nb9��=Q9?s���s��Wt�����X>���5'�5�Y_�ͯ�W�PlU��k��Ό��0�Nsm���bS��	��o�J�,j�5��
 �9s�Ρ?H��'�?a��G��^~9�7�Y��]��Y��u<-\t�;�
�+tt֨T���FK�
+���!Jt���z}�f�W����
+p]gg������#w��@\W��i��D�Tl�s�
��
^������s{��~�3��
J����r�����
+2Re
�q
�ް\�o�
�>aú|�Y1ѿ^+��5*U����E�cÈ�5�[���U�����^�
�yO�
2�k�����nشi��o��Q(Ƌ���\|��M�.N絾�+U����W�8���J� :g�9����_
���?�����9e�V�a�`��r�\�|!'��+EьR��}wؖ8���sfj��	���|��4�ۀ��u��g�^l=��1 +�:�|Gj]����v\��
���l*6�?&q}�E;
�]e����ΙCt%`&���ܼ��?n��ӡ����x�M7i7,�6%��닸��ˠ�xMJ)\t��$�,{t���E��F�q��~�uۭ����j�
��+���9ǻY�|c�̅촸6�5*tt�Z߀�m��������a�3��
J�L�S��c�Q���g�A�6�0b��+VFlX�#@��Bb��>
�y�P���TA�s��84:[7B��|댫�
z��v��{��y:����*ū(��ڞ�W���B�;-�M�k���]�7�n[̳���Kc{�+�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt   [...]
����VI�����I3�~�)�V �޷M��[����;	J�a��'r2 ��8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
 ������������n�s�I�v��ڴ�5�vq":y��Ϗ'�������;hOu{P�N�z�\� @#:w;iƗUն��v��{�J�I@��@~G�����{jW�=w��f��' [...]
<O
�wĀ�I��Ӌ+޻�E�ۜtC �]��
G
wx��
�n����� �i�Z��~���[
�$ �KEyٳ��N�¢3�o �B���u��B4 ���]�$�aљ�7 D�qj1���\~j����N��At�3�O\t\�-�t9��y��@�!:{":�
�3�REt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgOy��
:������ι�k�.��.]�����u��]���zu�G�1b����
?����;ͥ9_�M���=Q�vm뒫v�����
X�`�Yg���2m��i3�q]�W'l߾���C��Ze[es������)�
��>��e���k�w- MA����z
�a��m#N3ᢩ���G
���Ɲg�{��G�Z��� �1={��rşz��`c!���a�E�-�]���q��K�cG���x�
�f�*+�.е��f\���Ì3��f�3�3a��t�����և9l]5�
��k���f�cl-1��h��c򮝭�

z��#\HCt�T���9��Egk�uM����J϶Xl{93۞e��7\_V��O'�%�o.�i������>�ٶF�k�Ȋ�s;�Ak�S��Œ㏊�F@�ջo�T皌6����K�������*�9H���Wf��	�9Gz�>�\��R֖[�
����::�"~��
وΞ
+�����#�*z�Y��?����-���z-�
�5_׶4d��z���c�I�e�����8�m��[��-^�
p���"+Zt��[#�9Tl�t�N��cߺ���d>�

+5c.�6�l[�J�9K(4�`.S����S۫�>�ˡ�|�/.՝���W^2���j[�������3�����=(:�
�9��۫{�����o�	͛53�V����n��
�Ij���ag��
�}��Uc6mެ�mk�^=	�p��s�9�Hg
d�*P�<�y�&�T����W�f��9���
UBU1w�->��΃O8����^H=Ҹg�=�Y��c���^�)ht�-��)@��Ξ
+���7~�U3̼��U�4�r��g��h>�u	>s�Ն��
kD�ޯ^���"�ȱ5([3�zp�U�F>k����ϻp�U�Mnּ�j�E.kP�NlP1.o�s
E��|�5�Z�
���(���6�j��f�����qg��8e��5�u|`��g��p�٧��2:A�us����9�ڀLDgO����#����*��/�\gs0�=����vm��hF�6m|�¼�67�9\mmF���
+�	ƫ��wyW9�����+Nt6��K�jdG�l�ٖeՏf������?m���l����a
�{��ޫ�ն���yWN�t����Z��WGs����9��N���ױ�uv�<��[��
$���@�YeM5d{��SCEg[�
�D�L��}�N=%zt�M������������(��EgUԻt����l�	����
+�ή3}�+>��k��<��[�:���u:�
iN]tVld�3�":{*Pt����ᇡ&l8�#���0?�|ʯ�5��h[�	���l
s��L�&>=
p�lk��
������ff�׼o�#k��1f�p�f“9a�����L_�p�s�3��>=�L�2�?��-:G��ѤYs��1*:��еRy���&o@,����Eg��Fg����,���^���̮Ͷ=�z�9��	Z��y�fO̹�K��7j��s�>=�F�k�:M@A3:�.�f
��ȱ���56�X�T��1A#�^1e�3��|L��AC��♃��aWk�?��_�7�X٫���~t~0��kg.�믿q���1����
F�7-@��=.:�v������5�_��L�^s���Fg�P��w�S�6�4x��s����O��Q޵p-��)ft������l�<u
+믂�:�%��^��� \�ęm���l�q�:Ҭ�ֵ�]������Gg�
�krr�=���_n�}�񿀱�J��uV1�޹s�W����kڱyqe׋��<&�8?�h{��+Q\;�vq�\��pQ���o�k� ����9g	�������/�7�8Cm�#:�j��uq:��
�I-Y=�G�[�s,_���KA����3�>t~%J��������ٌ�A�����{�9�ڮ�����{�)>WA�囶am��a>�
���P�
����(�Z (��Gg3nڢ�y�m3`t���"n�
�N3�� �����l����� �k[
g`u�p��{g7��n��
@����� ઠ� Dt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgODg �CtP���� ���
�T�=�@�@�":{":�
�3�REt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgODg �CtP���� ���
� [...]
I���rD�4#:{":�
�3�����Et����V����7�n|k�-�;
+Ӵ�(��_����iԻc�ݚ֏}�%�υ�(%ӇQ���%ߟ����
Dg�sz�=iD�7�n������f��>����~���{��,�~.DG�(�>�"b�g�?������D��":{
+����i7=c�߶M�>�;�n٤A���l�h��Uk?]�²7^]�����̑=�n�0�%�X?��|�XFK�g�?C�����D��":{
+�o\�r۵m}ڰc
+ٮ�y�%�/}��
ͦ��-��j?��Q>J�����Y�� }Et�?�3�9��Ξ�F�s�|n����6��vm[�])SYY5�����)�;�,
,�~���|�jF���֟A���
A����<����5��r{��ZU_~u�ً�l�������g�}����4m�����Z��O
ХU���_9�����ԭ_a>��Ϭ�y�������%_?iɫ[k{�ރ���)�KV
�.J5���j��AtN;����ѹ��WU5u�Iu�T�]�3v�M��.TR��
oG�(�>�B��3؟y���
����MO��C�
������؜7��������*��p��F�=b�>*�Z=|�J�Y��E���Ҭ�[�ӨI��&u�~����^Ⱥռ��o�^H��o�֧�":�
��S��N3.8��mJ�xa	�sѢs	�a�����$:#�P�Y
���k��ɖ�������9��M_�Fg[�urFgg�����ն�m�x&:�
���9.D瀈��*��<�i]�y��]c\&��·�b���^?�λ�ol�Vk�.��e͸k�������0v}9gt�
9+��s�������)��iú�=ܾ}�yϐ�Ɯ~ޥƍ7V,
}�Q;vT��ڥ����[\�n=�)
5�����Tn�>zh�M׫m�lѺ���ki�۴�eErR����G�^5;�{o�g{�v�=�]{O�Ze^Oq�pD)�ήەs�mW�
�[Ͼ���':��ٶu����%
��vړ�<8q�u����k��al�o�Zn�3a����B���F6�s��/=�f��]�
����s'�t�g��ȸ֩�J��~h���_7��r��l}	�af�����L��&��'	��Li�8�QƏ��Χ�]u��;�*|�hh�V]��TD���0t�
Tש_���ڮ�ؼ�ڇ����+TT�
sj�>�{/��fl�F��G�ߠae�6�Ul�y��� $:{uڬk�ͺ�2�]��]U��ᚼ������'ǘ�sDgD*:��AF��Ո�so[nFg됰�q���5ܫ��s��5[�Eg��UF���9�s��=��ι�d�W_~�8S���j8�믿�;�� 
#��ٖ<���ymW�>4��נ����
x��M�M�ʈ�Fu�Ϲ��q˖��蜳���E眣Ӝ���,+�s��s�m���8g�茈BEg#)��+�{{�s���6#�Wt.�
u�yQD�#:{��U�3N���>ѹ�/���eg���������
泈ν�������ymW>)��O>��Qq]��D�hУw�1�ׯ��ت�c�Y�Ϊ�Ԑ��Y�7~�AtFDa���#�Ft�}7���i?�ꜧ���
+�^ѹ�T���F[�vEtN;��'���8A��~��d5�Q���x�~
�Ă��h�-c���;s��9�4�6s���XH����۫�[g��Cqݮ\�
��}��W��K3���G|YYit���;��G��v��%?a#o�Y'rDl at pDgD6:��Fg5*��~�^y���y^�9��t�p������6h\�l��s��=	��^���SN>�#ҝ:��g\�
vjRo��
f|�y��mF?o6���m���ěsή�
��ӮF��<j�ӏ�W� ���c�q����v��Y����}��ΈH#:;���P��c�s���W��]�s.�W�خ�����杶AtN;��'��9�
��߸m���#���1�
�Ր��n~��Ǻ]�	�j]'��.�'u���g���ؓ^?���F
p�:��h^|&"!�٧ӂO؈k��3"⋸���Et�$-:���z��
+_��#U^A<F������������NA>
�ڽ��|��[&�~��?���ʥ��G��l��2�Wrt��8�׳����LtN/��'Q�9���lYЌ�jhJECk�[��*������ψ�����b�����]Y/T�Ja}V�m�6a�x��8��m�aj��\gU��͚G#9:��&f�.N�ڟDg�Dt&:��ٓ��
�+Q
��W9#�:���[/�뺴b^�*�E�e�yب�m���|��9�7g)J,��s
�U�O�9�p��Y�x��Ӎ%=���yE��w�^
��9���(^��I^�Έ��LtN/��'��;.2��@)��%#��"DgDDt&:����9.D瀈��":GtFDDg�sz�=��Bt��,�spDgD��s��Ӌ��I/:_q�Ȳ�ؾL�4":�d?9:�dF1:g�?�Έh���o��QҭHL˦
f_��7�%���)lt>�W�y���n٤��J����	W����7
�xl,
,�~���|�jF���֟A���
�>Y���ob�z�Ξ�F�+Z��k�:�S����])���w�{�]ˆן�3��j?��Q>J�����Y�� }Et�dDgDAt�6:/�9w.1n�O�$Z����[�~xϼ'�UV�ѯS�.{Ʋ̒��Bt�����("���3`_�!�Q�=��Ά��}��n���UWW�ei�&}�
�Ү�ԡ�Ǹ�R��v��R��(���,�g��":C2�3� :{҈ΆWVz�S�V��0�J�ݚ��ݱ��n�ľ����u����(b����g��":C2�3� :{ҋ�  �3$#:#
+��'�3 �!:C2�3� :{":�
�3$#:#
+��'�3 �!:C2�3� :{":�
�3$#:#
+��'�3 �!:C2�g��ۤ�ۻm��?��t+��� ��MFJ�tݦ�[��l���w=Ѿm�d�al}~z��c�t9ą���
 z�Φ_���w�I�v������l�z�y��s��=�@���k�t����9��Ξ�� ���l":���w?��Q��
_Xe�ߧ������d���� ��MDg�\?��-���Ӄ�O
3 �� ,��'�3 �!:��ΰٰy���7��g�͓��s�Ӂ���
 z2
�����Q��r�?ỳ�
ܾ��4��g��Ӆ���
 z2
�
����W߱޳�n-n�4<��@��3C��Bt�Dt =Dg��3Cΰ2�rN
��'�3 �!:�v
xf�6��3CΩCt�Dt =D����
9
q냋�{�[!Q�n
�=�oҭH��'�3 �!:+j�!g9z���tl�����-.��� �Ȍ�I�8&�>�3цn	����
 zdFgy#��B�BFtE��Bt�Dt =��si�,�c�+�%��'�3 �!:'%
���n	����
 z��I��:FA���[B!:{":�
�sR���Q�?��P�Ξ�� ��蜔,�c�g��u=�}�6�
w}h�6��U?n߾}�#W�\>�1.��Y]��Y�k�������K�cG��U�֫����
+��� �����u�"Tt6c��������*�
���O>�ע�ծ]�|֐a#T,vf_�g����F�2÷��c�(DgOѣsU�WO����5뗿���-��5M��u��m����M��g�:�I7.��Me��Z�c�K��\��F��(P
��(��_����iԻc�ݚ��zX)Eg�Pb��Q����u�љlB�At
�C/:�̼j��o���]~�U������7aڤ	f��Eg��ǿ��s�|�EtN�������O6O}���m��Q�и~�����
M�nv��m2��[�k7\|�K|bd�3�u:��-�����
�ļu�3���r�O|q
wܼyS�1�­c����Vq���O
3�x��)�=xX._t��9E�Ξ�D��F��Qԫ{tϟ�ѦE�&���@q6l�b��O��u��z�)=}�Pd��&���z��|�M���mӢO�έ[61���MPee��O׿��WW�./�5sd��[6t>�d��3
)���5<9����,�:fJ�	�5���a��W��� #
�h���0�	�ϊ2׹gᆴ��b�(DgOQ��Wޛ��k��2��Au�T��4�n��'V���
v;`��ۂoe|�
.��{�•s_\ݮm�ӆ
S�����cK�_�F�=�M?���%���d�=:�
�,�:fJ,4���y�
�G�m�T�5�)�<�Q�!:{��/������Ѱ�z
|@��ە61�{ׯ3��&�|+��dp���s�|n����6��vm[�m�TVVM����u�����m�DgÂ�
8k���1��/Ȅ��c�]��О�a���1�M��cڌ�w>�7Nj��9�=ﳈ�)Bt�%:���[*w\p���w�����fUWWsq9�&�
������ꯦ�;)��c�ܔ�8B�RtVF�8~��
�*
���qG[�	;Y�û�����)�����
���y�EtN���(�Y�6f\pJ�mJ�s*�6\�7㽚���n�p�k���~���6l��dS�cG�1��cɋ
�UYU�r;ojN��7�q�5onT��k���9E���Q��a�
��
P֢s�r������6�hM6�
�� ����-bt�F^�N�0ݫw_�L�E�/0�Y��R�gY�Ra�����x�mr��ۻ>^��X�
+���9
+��4Y�&g]3���?�ع��vXD瀲��x�9�NW}�UA>&h
w�^��?O;Y�u����
+�ٓ��iú�=ܾ��o%wi�����n������G�����CNs�y�Z�ՠQ��_ZQ��z̦���m�b[���� :Kq��n�-Z�Q�ϖ����{WY��KG�9jҭg�i��S�V��,�K�{���z��M��]����
�xt�lu{��k��?�bS��
�Wm��'yp��궹@��W��\�Bt�}7:�n��Yp��j��9�
�𭮤ad���:t��a� ��
j�cv�?��P�Ξ�E��G�tk�Ĺ�N��v8��O�e�i�eUzpFgs���Ncz&:Ke�tn<���0���7����[V^a���u�Ye]��wf�U�ߡ�{�
46Z3�
?zH�
++�97]���UvT�09p���֮nk�oq��v�z

+f]3mֵ���'j�}�Fu�O�GI���钅u���qE��Bt�$6:����W_~�
m2N�
����1�ϼ�杶ắ���+:;
�Y�(ۤs
��o��fzk�g{���|�s��
x��M�M�ʈ�F�?�6��-[6�o�3�M2b�}�]k�_c�Fq��v����-U�/0.Dg����Q�?��P�Ξ�FgۉP
/
���F�m���W��%��>���+������'���̿�GGt�&zȳ���z��l�t}!�Yơ�G���c��_���
�]_���Y�W]�<���.���Q���:FA���[B!:{���&8����s�_
=���Z�����8��w�!O,�ߋ��2fx?��
�ɕ�,M�mҜDk�#k
y�,h��`���I�W1��G|YYil�F2�|��
�7�u�-�xj��:������c��<
+��@YX�(�WtK(DgOҢ���s�q^��]7��O����ϼ�x��c/�q��D�̊e�4���'k�B}�4��T:��������|��
�G
x������s�u.�h�l�U�C�+��5Htv�y��z��@YX�(T���M at DgOb�sΒt�H�J��X��Yy��̈́���6i����g�ƃ]ߤ�&��6��)�Gϼ��'�~�cg���tU"���0�$.N�W]u��
5a#��.Dg����Q��:��w?J��l�`����fXDgO���{���z�)E�é��g�^ዏ	fJ��d�	�9���z�3:_4��	��p���r��\#s 5�Y��\�9x��

+�
�7���
����
+�I`M#��'���<�=6�^�tkF�ؕ�,ubv��\�.
�l�*���]�K��ζ���2m6�g��?��x��q�s]��͚�>iQq��v�z���{q:�>�Tt�Ȉ#i,-��)Et�$-:;�]B]4�<;���I�9
+e
|%JE�&�v�nۦކ��9�MZ>�Ԭh۬$�?������Dz��fr�_����z-WR�Q��)Et�$':��Y����"�@D�":{":GAt��m28�s at Dg 
+�sJ�=�� :K�6\��|�y#���:^Z��(��)Et�%:�����2{B5�{٬��j��
l���zO���՟l
��A�[6)B�D1�h•w~?�͂?
��-�ȋ�RDgOQ�󙳞}s�ӆ
ۮm��ە�9�e�\ϩHDƷ��Bm�W>���>�ux�~=-B�Dyu���=ծe��O���-�ȋ�RDgOQ��
W�}q��{�6j��q�+�z��G�~��
ͦ��-��[�&�
��.�9w.1n��Ѕo�o���=��VYuF�N����| �ȋ�RDgOQ�󧛶���ɪ�z��~=��?��c�������rD�ݒn���m28����g߼��o��F��-d���
��]ڵ�:�pׇ�����)Et�%:�y��i��ng�j�A����~�a�.{��/C�p���m2�([�+�?��U�?�\��I�[���;�
�m������)Et�1:�\���g�2N��5*ڵl8��vGv�=��E6����z�Btβ���λ~�t+R�·�V�n�A��$���j
�ݹ�<%:{�
� ���Y�k���Ӥ[�?��.��
�}�n��-[=�����!��Gt�Dt =D�,3��S����������Ïu��@�\q�c
��Ft��
 ���eD瀈�VDg=Dg (D�,#:Dt�":�!:@) :g�o��߿�J��͜��^�~�����Yvߣ/��ʸ����w�Q�u0��j
9:s߬����s�V�lڠ��͍ۍ�=��r/�Et�Dt =D笩�Q=t��6o����{��"�&�u���\��v��ޝO��Ŝ%ϵ7��0:$��At�Dt =D�
2����������
H�=bo0��ƛ
��ٗ�jܰ^��J��7�~0zC�U�Ξ�� ���A΁g���؆Z3;��zC��s����
 z���d
x�ӭù'�M�=bY�Z�<�X{C��s����
 z���d<�2�Z3>䬘�!�9Gt�At =D��R�����P�q����z�~���sDgDg �Ct.�[\|ߣ/%�
+�N�Z閌�޴"��'�3 �!:S��ӓn�\A��%�
��[��'_�Ct�Dt =D�bR)�/�	�-����+��>�^G��'�3 �!:SR���+����
?�3 �!:SR���+����
?�3P|U�_=��+׬_����T&�
���)߷M��6=�˞��'�
D�b�B��@tvEt6��Gt���O6O}���mI�!�Ѹ~�����
M�n�
ѹ���r4�]�MD�����Z�c�K��\���T�H�9�RQVk�6��kӨwǶ�5��ts��j�MO��A��G���
mZ4o�kҍj��/֬�t��_7�7
+}�)=����\LYH9�ή��&�s�����v�������gD�3�u:���I7$���7��7�e�Ƀ�ԩH�9�p��>���������$ݖ���)`ذ~]�C;l߶ͼ�a�]Z����mG�8~��
l�qʘSnj5�2d؈	M5�پ}��Gnܰ~�s˶n�⵴�.
<�ώ
U�_�
Y�r��|�X׶Yk{@��1P�v�X�%�#
ֵ���O�zuH�z���4j�X��k��+k._������l�����P��
���=n�5�VY�ߖBt��9
+#1�v�3��m۴�ӽs�Mԫ�t�����j��_X�ƫ�V��՚9���-&�(?�����Ѱ�z
|@��ے61�{ׯ3�B_տ����*:�D�XQ^a
�-Z�63�z�Ot6e]��+�Iq؈Q��kR9������l{!�s	��
�
+�<��Y�GL�qݯ3~�y�4�ߜ�
����O��_�εC��������ԓ7h�p��m�~pV3��(:k��z�At�Bt.
7.\9����ڶ>m�1I�%�
xl��K��G��'vK�-~~u��-�;.8���
wI�-ir�e�����
���Ť�s;'�\��l=���_x�')*�+>0��3�M�6i�m��ui渣��1vK�G:;�?ӛ�[^^������_c[�A�:oڸ��i3�����o7~��ߛ�_NU3��":��^{�':� :��s�|n����6��vm[%ݖ�����p�����
�?��Qak��$ݐ�;妜��ѹ�R��=���
+2q�t5|�
�j|�:�kNl��[�?�6��$���y���+^[z�%W
p`'g�������E}�٧�#�&u��You����Υ���WU5u�ILZ�@f��!:�Y\�s1E��aͣ^��:5��T�6�S{{��fbL�����
d}-��l�T��uQquK�G�fS���z���޷�X��!�7oRk}P�C
���3��u蠣mQr��;TVn7��xgҵ[���5kw�lt�X��St�":Ǐ�
1H��ʆmF�����)��Տ��֥��먳=������y��b~���!�(���A�����F���>��
��
w��+�M�Eɣ�9�����R���������1AD��A
Ef���e�ٴa���n�^s�mѺ���/��]�z��K�]o���u����a��'�rҘa�ζ=�pý�w�\s�|c�����Ɛ�EY_����m[�x�D{�e��\L�6l�'l�Li�Y��h}z��u���†s!k?X���?2�
S����u�=��S�������9�
?q�/�~\Roe
�5V����\:b��>ah����w�q����ٴq�:�&
��֭���B����v�=�j��Z�ڀ
+�?��
Uǎt�pj��LW6ѷ�f�
+���M�"��/+�03�zb���*{����#N
;b��k��9}κfڬk/S�ڬ�u�?zH�
++���27�W	Nfq��Ŕxt6�7�b�WRt^�-瘺��1A[;����a?&h[q���z�6ci3����?�']j,�uFG��������KG\��?
�Dgלd�6��F��-[�-uy=%xt�
+U�Y�

���&�6c+��~k�y7&:;�wn{�
x��M�M��X����Ϲ��q˖���l8�C_}��(�2�Kt.�ģs�tجyssj�3)��k��ZǏ�ȼ.N��{ը�m�:z��z��%9ߋ�Y�$:�K�EgcicF
_���Eռ�TGg��!:�#:�����
+�s��T^^$:�,�F
H��}B�9��ܠQc[b�ζ!g�\Z�=۫g��
���1~�~ݧo�\f�8�����aI�ι�&"��߱��˷�;��i�l-�0�(l�ͬ
�n�;�7�#s���':�:Ĝ�����%���t�K곕i��aW����\:��^a(u��'T�c�fT�5nt���+;7���ٖ��/j��nG�U�j�����4�
cC�|��
�7�5:3a��9�,|g����_�m":Ǐ�
E�s�}�P�	*'�~{�m��Z�m�G�&l��*�s�ی��?5Y��c��G��l}��T�~z����O?>��鷌��Ա�8�b���֭Z�����)
)G����Dt��9�د����>&�5��h����O�":ǻͨ����5>:�=8�	�F�=e��w<<����~�����Y�?	*��D�b�B��@tvEt6��Gt���s���6L���5��
��B�9�mƙh�Gg��o�Z>~�?�1����2���h��'
��no�\��&9��zQc!� 
�����)
)G����Dt��9�]��+
��m�&��Gg�PEt��ͨ!a��'�&�h_���c�u�z��8���ј�ϼ���
�� 7k��!��D�b�B��@tvEt6��Gt�"�������R��uj��>�'Ht��
h|R�W\W��*�PEt�e�Qo����6��ι��EqFg5+�Hؿ8z�Wt�}�E��!��D�b [...]
#4ѹ��ւ?
�t[vBtP��Ξ��Q�v�ӫ?�<���Z�l�t[��HW�����o��+������}��mԐ��nKj<��k�<�R�=�M?�[�m�	�@�":{":Gq�CK�x�^�w���Фےu��Z}���ڵlx�)=�n��O7myݓU�_���A�z���W�e�態�o�������v�E�a��F�F�p�zE@Ab��v��`og>B,-�s���R�h%��\��
	��S�p6&���dֹ穦�q
�/˕���
�J:'I�6�������ФsХ�L�����ҋ�����7�ϕ���>l<|�2:7��Da�=�u��ۿ�O�<���ݳ�tj%���sK�������,�����g��s���ϛ�������C���'n^�]�-=�/�3P+�$��k��ˏk_��
2�Μ<>sa����0Y�3P+�$��Hg�V�9I:��@��s�t�#��ZI�$�
�G:���I� �tj%���3@
�
�J:'Ig�<���tN�� y�3P+�$�� [...]
�Rƫe���Njob
��ܺڟ�;SzE����
�FG^- ��V: @gIg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�/$�W�
+endstream
+endobj
+1352 0 obj
+64
+endobj
+1334 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./sunorg2.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1353 0 R
+/BBox [0 0 720 504]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/ExtGState <<
+/R7 1354 0 R
+>>/XObject <<
+/R8 1355 0 R
+>>>>
+/Length 1356 0 R
+/Filter /FlateDecode
+>>
+stream
+x�+T0�3T0 A(��˥d��^�U�`nhi�g
+6506ԳP0�3762��&F�
+.�\�@ m-�
+endstream
+endobj
+1353 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160732-07'00')
+/ModDate (D:20151010160732-07'00')
+/Creator (GIMP PostScript file plugin V 1.17 by Peter Kirchgessner)
+/Title (sunorg2.eps)
+>>
+endobj
+1354 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1355 0 obj
+<<
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 959
+/Height 671
+/BitsPerComponent 8
+/Filter /FlateDecode
+/DecodeParms <<
+/Predictor 15
+/Columns 959
+/Colors 3
+>>
+/Length 41818
+>>
+stream
+x���
�՝���}��	��
�9���<��L�WDNDA�
 =��Qs
l�0�hP2N2Ĵ�o�`$��>  ���k�t�w�u\��{Wծ{��~
���z�뿪��^���_|�   �B
�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3�85
o\��ڝ����k�֝q7�4_���
��۳˥��۩}��� & =�͖ڏX�v}
wC�׮u���]6|P�� �Gz�_���G��w+����|Eܭ �t#=���ڏ'�\"�۵>i�em/�Uv�%����0�
>��
��~�K5�?��( [...]
�T#=�Z���1w��=�r����}{gBs�����Ś:�\ZR����=:���Q �V�g Q{�f�
~'Dh��݉�z�}���a_�}ܐ�[ iEz����+���Ob��k;�����nNs���#w�|O�����.�>.�� @Z��D�{������3��Ľ�.��e��i.i���2'&o�^xG����"=�ڀ�ɅW�<�m��mL�2`������Ew�� H/�3����vQ�x[�ܐ��?�3�����Bz �H� �Fz�
� �#=��9.�g ��
 j�縐��?�3�����Bz �H� ����{�����:uj�}�#�
U�ee%����&�H� ��@�H�q!=��g QKlzv��I� �̑�D�Cz^�t�رs�rϞ�er�ٜ���<��iCCcǎm6l�U^�U<‘#��UnܸC,?�\���O�
{֟T���Is6,g�G��dٲ
+���55��
+|�=Oz �H� �Vhz~�Z�E^Tkd�ܷ��>=����cɝ��d�����o`yR7�ȧ(..���Q��V�X/��G}.pE��C��� �#=�Z��YsՃ��سH�
N�8q�|e�mӦ�
K��o޳|���b�+mۖ�mD��ٰl���;g���
�9D
�66H� ��@�|�=�D���e޵l)#����֠��
Öϫ�g�سj�>�Ce����3����Am�� �#=���y�9�
d��{������f�x�
[��6;=�Ib��t���ɇ�
 ���D��=7�����?U
�QX9(�3���2s#�o͞��X/'~Ȉܽ{��ک�e	��h�w������� �#=���y��9�ۭ[{7����禦&7�%�s��f�{��F��C���ر�3�#ђ�A\���6�>���?�3����c��P��6���̐vy�:5Gb�©;w�aZ
x�����x9��&Zȇ��瞑���m��7H� ��@���R��3 �Gz5�s\H� ��@�H�q!=��g Q#=Dž�
 ���D��
�3 �Gz5�s\H� ��@�H�q!=��g Q#=Dž�
 ���D�U�ߵ�XX���Yws����_
��G���3 �@z�{~�b�����}�;
�&��4�}�0��>
g�8e郓�n ��@���n޳����/({�^�ߵFH
X��Ś:�0��3o���� iEz��>�즙K�7�囯�0�N��E�{�ͺ���W.?x�՗^rn����"=��~����
� 
�v5>��9�a� |#=���K��~
w+
WZ�B~MP�ѹ����uj�\s ��
 

�._��uq7� ��{

�ڷ*-)��9������&_At �H� ⴥ���/���|&�a�piL�".�{f�+����/��- `�3 ����;���XX:{B�����
 @
H� �� @z �H�  �3 �Ez ���-�3 ��
 n�� �g p��
  =�[�g  � �"= H� �� @z �H�  �3 �Ez ���-�3  ����k����o��
+x���#��9w+��ƿ��[ܭ��8a655��
+ @��m�{4
$7=�����Ƹ[  `�k�^��
��nE�$7=�u��̉�G�n���nO������b��������o�ݐ
>R��v��~n�
	��}�o{�7r8*� N��S�+���"���-�(�YNz�&����/͌�!����O��0��n
�x�"� N�.yU�Gz6���3BA��F}�Dz�DznH�~��
+�g6�k$�3$�ss at z���PP>�Q_#��!���ҳ�g������
���
��� =#��l��H�gH�����G���gk���6������n˒⛯
s���3�5R}C�ͻ�
���|���il,MB,6m�p��Z���濾����_-��Y���\�댘�����]W�:/{��)WL�z@��I�ĥ����+�ZV������
����J�Uײ��o�}v�XڃX�wP�}��,-~��.
���*n�O���k��kD}E�E��jR�$.=g�
�)B��F}M�=���s�������
~f�P�Kϙ���C7](�٨��,��
<7O�wȼ=6�>����IL���ˡ�:��l��T��3�͙���Ǧ҇�x� ��9�
�
�iD��F}M���xn��;d�
�M?3��MBӳ<z��nQ>�Q_S���z���s3'�!���lr���go��3'��̉�n��|f��a����^X���
m(-)*).�����s�dzT"�w�ߞ2�����Ds8p���m�Z [...]
+X����y%6�4aKx驣Nkƴqq7$"�?�$C�����?��3�
`ꡝ;=�����Ԟ$��G�jo�1�1��
IbKO
�%�X!�82�KP�lƔ��⒞������2$�-=u̖�b��>���.A��SnS�KzvFzN,Sː$���1[b���#����fL�M-n���h}��3f~~��̩jjjR�-KJ
���fj՜��񏖕7
��櫮�ۏ�׫��۴��?��]�8������cG+&�:����kJK[��B��)�
�!I��:fKl�t�a�>�(�.��/����}*o��'���]���/w�GkAL-�i�Yߦ[ǎ�������^���A����η��
7�vh���AҳK��Kl ���[,
�9J1v����ѿo�oM�����aT?�9ᒕ�
����
�s��(���[�
?7����9�Ȩc��KGz�RB�sQQ����g#='���,��
;��/�X$�uu"���C,746�t[w�\�E��ظIl�����~��b���?�r���������c�j��6�"{�Zo���.Ǟe��6�[z֏��u��IS�u5��O�.���ba�;��tu���b��7L�r��91{�B����ް��?���}����/
��4m�ao�cY��m�3_�����Rg���
�[O��U�o�{[-��������+�!#�/Y�/��D�>�x��Wv?��~̶=���r�U׉�QVy�C
~6�v���x�Ot^�
:�oG�6��r=�n�<��Γ8�
���ՙ�~\w�~�^A�	��^�-E��zj�Cӧe�Ͽz� �=��Ψ~���s�
n����[�0��^��������D~c��pv�
6鹤�X�6e-�6z���׿� [...]
+�6H��'�5��Ǖ�Z����o��ϜHl+�.���浘zX��Oz�!,�ʓ�M0rD
�9�rm�}T�2z�=�$���&XRu���W\&i�C��7���r��,��#o�o����y,�ھ�9����
$=녶���Z���y2�fjq���Ȝ��a?�l3f,�k��,�H}��߹�b�%?}}�FF��f��o׬U	�~���O��~��쑤BQ�^�����6��
����E�cϖ�N�s�
���L�����-��Vaz�-7�<�������w
ƞ=��ّ��-+=��|�sҳ��g������Z��0����5(��\�c�r��m�o
���Cˤ�R1�쒩�eH|�����7L��oe�9l��=�d�'��4��)����Ǟs��f�>���f�����=�E�-).
]9�IG
��;�<�|�Y_�Һ�D�͞�!ӳ
�r�H�6?����%2
+s�
�����n��(}*�
�ʞ߬ϓ�����k1��
����;'�ym�8�����:�����%Vd)=r���� �
+��l9dD��޸���+�m٤2��_�T�37�y�هy�C�g��\���y�u
��#?�-����g��y��	|�s�׾x;�g3����sC$T9�+����ȗ���i��sC����E at _��!�n��'{������6��
�����\��Pc]⧖������S���eH�����N�_Ӧ��
+��:d,����O��ߐ�rc�^���KD�>��s�c��V
�~
6�ܐ�f��(��2=ۜ�
j!���=7.��='_sK�)b�a�Ė�:fKT�¾�o�>�B��D6fn+��v��⒞������2$�-=u̖�b��� Q]B�o.����ǡ��XnoL-.���9�L=,C���S�l�*�9	�%��/�&=g�~.�,������X�
�!��O,�Kx�BB�aҩۂ3y6�� �7wzVv�9$�ߣs�H�H��ްc2cPi�6y�-��P��ztn�lΔ�
� � 1�����;u[p&��u����5=[
+Fz�L�}4�dd=ǤҤ�YWN���K3�nFeˤ8��39�Ś�-8��z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(���yϾ��u��(A��s��+�n�/�LTe9~��P��9�?\sg��n�/��X	�9����H�EP�y���)�ߙI��7�3+��M�
� �DzF(H���q�
0=S�D!=�Kuq��P���1��Kz������� �BzF(H���q�%=�Hu�I��R]\ A!=#f��#G�
�ܳ���폔���f\}I�6R]b����͗��ei��2	����3BQPϩ~e�����]:��Wr�M���{�a�K}3�8�<��N�S��x��A��24�`0�3BQP�s�ӛ�}(.���2W�$+��o���{ӟ��7C��[z�����o�T��� 
FzF(
+M�"`�q�U������j�%���Q,WT
���qԨ��w�+�����o�:�;b�����-{��.���f�׿����w����6#F\�lYEqqQ��3��[hz%����fHω$+�����E���?q�I2C��-8~���Pt
~��]뎩ʌ���O:�E�W_��t隱c�.\8�u�b���r��^r�X>��SŖ�:�W֦�&�
:*�_vYqqf��{�����թ�B/�f\}e}���f�>�_��&�O����}^�7H	#+�_벒�۔��
�/ ��
+��ಖ%
�|�UWq�U+�K��Y+V������_T�j�^��l_YY=w��6l�U^޵��q��__��۴*iYR��D��]:{��_����ȩ���.�6n��ř��q�H�3BQ�5x�����e�������(ΘQm��
+����5=��M�7m��WP˖��s�^�^��Ξ��Xoy��'rd�����s���`~�=˲�>�G��
�_ �@zF(��{����2'>�9��9sn��xf͚�"�˭�h�W_o�3���EAUY%�_ #=#���۔r��c�����u���ƍ;�dV�������|Y}}CC�篚�q������,���9��O��ޭ�e%�/ ����B�
�̀��R&�ˑH=��J��}A̸�T_���
�s�D�J���� �/��#=#f���0�q���o
��{zN�T@PH��93����n�.1��^��
 (�g���W_ҳ�T���l/���3BAz�nj�/��F�KLz����
+��*=�*�W_ҳ�T�`�s>��
��ѹ��g�KJ�
 (�g��ϙ<sɖڏ�kQ����~ٜ)q�— ӳE�s��Ҁ�9���Mu�
8~�DzF(�9f
��9V�s��ހ͑��@���
+z��«/='^�g pDzF(�9f#=���
 �H�=�l�gS������瘍�l*�3 8"=#�
���MEz G�g���c6ҳ�H� ��P�s�oz����^X�S'��A}�|E�
 =�#�3BA�1[�陿C
�3 8"=#�
�%!=Ϙ6.�g����.ɐ� �H�=�l��0��3i��c�i���${N��/6@췐�>ɍ�P�s
>��~��Dz�9��i9z�R���Xz��/6@췐�{�$=#��
��2�
�>�:=?���爅��U�F����ǎVLup��
�ה���֌l��L��e�+E�/HΞi�
�-$I8U��� ���E=�iSb
�3���Sd�y�K���]ٯei����������G����[�~�����r!=��,)��猉/6@췐$�TIzF(H�6H����%����tl{��A*CǞ�C��K��=�s�� �[H�p�$=#�g�g��,ӳ\Vz�M�d<]~�q��b����X�����+&]�x��X���L������I�v�u�����r�C
~6��cG��媅�����>��㽭b�S:u�_45���|�S<r��
+�I�$����|h������g��+��J3q��T`��$	�J�3BAz�Azv|d"C�7
o]V:��cχ
��Ej����^~~֏o��^u�Wz�4,�qY��"
w��%_4����~�����=�-	��(���%?ʜ(��#ҳg	L���cPP;�T?in��}{���c˓p�$=#�N�G��T�gϡ��)++	��I�6n{�7�]��f�����E'�mU���<<���kV�(�%�ʱ��M�Z߸���|�~}H[`{hX&��(�����7��qW��y� ��c�#=g���%���sz��������
+�9կl��f�E����Ċ�̠���Y&��n��	b���y�P���~K�R{��!%�qz
s����"C�	��ە���!CKN���<㬯��zJ��O���{o�
+'�&��ș<�v�g٪�z�Ё};j�e�����#Y�dy�S��[�hΝ���L�O�ICz��sdB:�[�i��34�9�"N�z������ƞ�Í���$\�L��`��%Y�_�|�I-�|�-
+�i]�\8��s,r��⒒�|y����С�g�eE���u��+ߪu��M��
+�#���]T�����:�X�w
�>��~?���!}� �wY��ۭw��Õ�"�o����S��c�L©��PxH�rY����ު����Q,WT
���qԨ��w��{����ۦN��X/ñ��زg��*"�G��_��J��w����6#F\�lYEqq�� j�˝Czvo޳5���?�����$!����\Pz�q礷7�W�m[6��<y#	��h*�o��v�;��G-Zd:��j�]߳�u��������I�b�K�<����
V�v?���gzV���W%�Iz�U���-ח׼�2��ѧ�G0����2���5���e�t�E��N<��k[*r���5e4�͑�w���
]�̪����K׌
;w�©�[�
55���+����*��ԩ�H�MMMj��С�b�e��9Xdb��{�����թ�
X>cF�x�U����,._
�٧ �X�����p��e4QIN$�5������$\���o�xs�_?�l�>�,\>��[?().r?s#sb`L�#�f��dI�j�K����'�� [...]
�}v���+��"
+�׻�����AD�#3A,37��ɞOw�l�>JjI3���e���=g= ԯ��.+��-�ww���|���bi�O_���I�h�<��Ȝ��Ӯrz��gn�P�s X������'o:�is���H��-Uz޹s�Z���ٳ��-O'6���r5sC�a�92���D��Un�+�W
𗔔�4�{gˋtv��\׳ӳ
�������?�o��U��
6-�7��>]��n^�%���z at 4_3��]VJ�[���,c��D��-=��,׻O�9Ǟ3'�2�
��97VT<�f����*.{{���
B��}"=�'��~����uGUn���L�*1��D^�p���a#_Z���l�BǞ��w]�*���̗o
,M��+ȷ�͜ל;'��_��� �wY)�oQ����=��[���r�F��P��?�l���%��YNҐ3����Yr�ƍ;������#�/����b�E^/--+�͛�/^g#=�DzO���7���62�S��Vn��d�
�k���J�~��ݝ~�
��L�p�$=#�����{n��r��>x��j{�;=���!='
qڛ����O�3���56ҳO�g.�R�q,O
�
��/�3%��~�O~�PHϙ�T*.)�o�g��l��Ċ����J��Rwx���N*�|���t���%w�Zҳ=�3BAz�AzFb�^��M��NϦʙ���3
Dz�AzFb�^�tM˱̴IW�
�=��� �[Hb��FzF(LϦ"=#��, 8"=#��
�ߣ����'�
��� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍��*���{��E/���8	4|P��&_w+ Ć�P�s��&gSX���� ��v�]q7@lH�E =��obqf0U��y��*Q�ߙI��
�'�3B`z��@A��x!iHώ
8~�DzF(H�6
��uf�ㅤ!=;2����� =�0��lz���Azv���
+�� =�0��Kz������
�4�rϞC۷?RVV�㧷� �BzF(��w�>X^~�e��Y�������/xI6��Kz���{��G����6n��.�ד����P�s~���i�9�[}%�9�Ҟ�	X�xK�'�
���gh�
�T�g��О#��f�Ez�&='V��]���sN����������]:{��_ٽ��m�F�Se肊��[��"

�b��bxUՍ�FUmܸCH
�S�~G���?[���YUP=��l���Uq����ՋmF��D
�����._oz�
 (�g��[z�T�.4Z��
�l�0�����v��u���;�w�PSSٻ��2=�
���Ś�{rIv�N��
>[�~e�H�Ӯ�gh�s��G�"C�;x8㮸z8^�t�رs.�ںuK� O�R,���b�N�ډ�555�"
:tT�+G�X/v��}����,�1�Z<�U[�x�/-���3B��,2��|�����h�_��fy�,--�ô��=��
2d�y�&N
"W��$�
�\}��g��gh�'�FV6�S�
���}��iYZ<��~�{cK�]qU8�#�^PUh�vWfkqت_TQ[���Y�����;�w�T��_�.B��E�_����
+���O���pݱVe%
Lf�&=��#/�����w��C/��Nu
�yI��M#
������p��}��52C��pu���$�3�9�en�y�.
ۺk$���{X������'o:�is���8�,[���s�^�^?Tg�~^��<�����ՉB�i��3B�g���Ӯr�Ћ
+�TÇ�R:b�%*?�L�r�Q�JuIvy6�������5�;����������f���񛳸���
��97VT<�f�L�����|O]P��[\ A!=#�ҳ��reA�Y� g�ܰ�g�++��8�IyY
��lπ�o��-���7VoxO����v�'��᜿{��y���s�侸�[]��rЉ��3n&Y�G��詡�Qm/6��y(--+�
.��7���3BQh�8a���%�Y�!��d3sC}kp��w7l�նmY �d��?3���y޳�۪0<���ZJ��v�^
�zu�LjW�7�I� �BzF(b�k)�FU�$�9q�
3�
�A%��YN~���a>�g�o��u����!=�����7�0�o
�-���3B�ؿ5�\}
�o}Cc�����
O&
��Qz�
 (�g���lÀ�o���`��[bҳ��@PH��نW_ҳ����(���3BAz�a�՗�l/�%<=�k�!��
�������� �BzF(LϦJ�՗�l��,L��dK��9���ܣs�es���
+ �!=#��
��oڥ��lz6U3Oϱ?
 ���P�s�T}y��4�g pDzF(�9f���"=�#�3BA�1�5� 
��
+z�٨��H� ��P�s�F}MEz G�g���c6�k*�3 8"=#�
�Q_S������瘍����
 �H�=�l��T�g pDzF(�9f���JBz����^Xj�2|P��&_��IQ�
��b�f��P�s�%�����&!=���[�
{�_�4��y 
�g�"���u(������79�yƴq�����]�ɓ����B�|�@�EzF(LWk�
�M�1`��LʯC��F��Kzv��
4[�g��te#��J��6R]_ҳ{�g��"=#�+�NW��������#=��� ]�Hu�����T�7��~ɏ���tlk�i����ъI���|���Җ���$/=�����)��)��
��H`�:r�~Р�={m��HYY����:]I	���{�����.��ϲe��E�1�n���F���Ξ��ό���ͣ����
��
��(�������і���z�sbzfs���|��5C/�W��(��,:�X���c��@z�Fzt�g����S�ʦ>�\\8��S���|�Oz���3��	s>�t���:L�~��Ф��2=�� �}�Re�n��q
+�2��n�,��_:t��Oطw���ǎ
�^y�Y_�Q���N]������2VE�����b�ՍǏ�_i{r�'��~Zϰӳl�y��v���
���������X��
�K����V�f[�s�=Cz<#=#
ҳ\�3t�c�o�U+����8u�w֯?{����
�l�0���k 
PR��$o�Y.�
]h}s�F��^�Nۼyg��
jj*{��S��ѣ]�b�X3p`/Y��w���ٳ������|غ�z�͈���S]�h�����l���9$�6�JZ���g~Q�x�
:7���
g�y��}�}KD��X��KJ�#�Ѻ��Gÿ{Ô;��R��H��g�eE���u�x�O>�)�תu����#�f��Y���=��eڼX��"=#��x&3����h�"��|��Q5B)�X/��Z/�TUՍ�G1
�:]I>�9���
kUVⲾ�
٥ٷ�N,���aZ��{F2s޼I'�+;uj'J�����_P7Hu}�9����77������c���.�6n���� *ӳ�"A�5������R1�j��1r�K�H*�b�W}�k��\N{��NϪI��j�9�=z����o����Օ9�L�N]Hπ7�g����э[?().
+#=�X�~�ع
N�*�#�|�AIu���׷�W����Ғ��]=�t+�r�~���{x��
E�[.]�F�[�g��-sv�{��++������O!R]�(��"C�yϙ/ss�{d�P=;fN�|��Ж�,cҖ�,S鱣GD���P�|r��q�gՆ��Xҳ��i����Ϲg�7���Px���Ѯ���ܘ=��3������Ⱥ�z��F��D
X��-����y�����
���Ja)M��,g\�w>"��rg��s�ޜ�@vKԯ;Ju}�O�zn�
+�❌�߽a�y���#��%���Y��A��gnd�=��tW����-,c�nfnXƞ�=���
+o��r

/=�{��eNb�
o�Y�f�����ț]��
+5I�����%�9�\�T�7�s����Yr@g�9i�k+E�,))��t��-Ga�s�e�6;=��r*H�37�y����������=�Kؤg� �g������7�YƟ2a�g}���z��Jr�RƦ���UU7�Kfn�T�A�;���}Un�<�����
{V�\���
f�m[�8�Y������B�ő��&�_�̍��ܐ�R�n"߼g�������|i�����=��ﺚU��/�X�c���o3��6��P{��g�3�3B�������FU�
�9���1�\����v#��J���9K#�q��,�x��D��sύB�A���I8��~�g����j#�Bzt�g�"��99R��$�k#��M�9��@�g at GzF(HW6R��$�k#��M�9��@�g at GzF(HW6R��$�k#��M�9_v��ș�M��^
��P��l�:]I��F�뛄s��K��~
c��ѹ��9S�5)j|��_,�l��� ӕ�R��$��(��� �H�E =�Q�Ċ����
��}G���qIo}9��#�3BA�1[��
ł� �H�=�l�gS������瘍�l*v; 8"=#�
���M�n G�g���c6ҳ��� ��P�s�Fz6�
 
��
+z��HϦb��#�3BA�1[��g__�º�����7��X��# 
��
+z�ْ���S�a�� G�g���c����ƅ׆X��蒌� ���P�s��&�9<Ƥg>
 `*�3BH���X������.����e������ |"=#�g��	d at z~�U���
ӫ��
���
��4����.�)-m��H�	g��
�'�3BAz�a��7�������G����[�~����[
I��8~���P��mp��8=�����7m���g�P�CBzN8�_ >��
+ҳ
��ѧ��>����
�9=�1��m��rۓ�?�x���WL����q��7L�r������X3�붿�g����l��ǎ
�U
����
}�y�{[���t�*��hj�?�x�x���{S�����[�Z߄~���}�����.�lYEqq��_<r�~Р�={m��HYY��fp���P$'=�p{A-�W߸ҳ$3��ř ƞ< ����|��������R1�꬯�RiX&�V�E�ة�J�2%��r"����>�/� ����.=�ꌪ���A��gh�3 S����z��
���
˥7CzN��ҳ���ⶭK����=<���kV�(�%�ʱ��M�Z߸���|�YҖ�
�Igz��m�tl�gh�3 S����zN�+�~��r˥7��
ҳ�D�
�f�����y�P���~K�R{��!%!=/�=�����w�������7=�q}���V�8
NL�ر͆
��˻ʸܫ�i�7��޽CMMe��w��<z�+V�k�%��w���ٳ�:��cN������W�|غ�z�͈���
8~�DzF(<�g��g�0ƞ�]Ps^������l>\}#>3�:s#��g��g}eG�V9��ۍ8����rqQ����W�YqHVUݨ0��W'�KK��0-~t�=#�
�9oޤ��ȕ�:�rSS�:�
:G
�b��ߖ���

�6������y
�z�so�hdz���f_�x`���55��Vm�
���ɀ�o\�9�o
fr�{֓���\Pz�q礷7�}b��m[6��<y#	��W���J}C�m�k��`��B��f!��H�����{
z�8ZŖK��;v�
SE���ٺuK�^?	�X�^߾��z����t
� |"=#�G�DNڸ���� ӳ~�̞��}�=�y�+*���tP
��F��C�c�
iξ����ՕzbIz�k+�}q0	��ۼ��ώ�T
+ql�q�K��
5CC�_���J�;w�U���]
Ԗ��؀��O�g���̍�6���
y�̾�ʋt��[~,�t��K�
��I83���9=��ނ����ʞ�aI��ج��f��'��`�c�
p���PxK����o�Y�Ͼx����
� �W�$�H�a�P����v�f?��я/9�l3sC}kp��w7l�նm�����u�������W�
8~�DzF(
+MϿs��s�L�9�U��싷X)��_ZZ,
D~K�Oc�|]���&��@zC\kpԨ*q�eNL�3�
�A%��Y~o��[��c��=7��]���� |"=#��k)�.�9/�ݺ��9%��@z�ۑ�/ �H�Er�sp�M™AvS��ˀ��O�g���lÀ�o�
�g.�R�q�
O���͙�S��
p���P��mp���`*ҳ#�_ >��
+ҳ
���Lxz�iמCr�G�v��(�>~�DzF(LϦJ�՗3�����Ԛ����� H�3BH�abkbqf0U4�U��. �H�=�l��T�g pDzF(�9f���"=�#�3BA�1�5� 
��
+z�٨��H� ��P�s�F}MEz G�g���c6�k*�3 8"=#�
�Q_S������瘍����
 �H�=�l��T�g pDzF(�9f���JBz����^Xjb7|P��&_aY�
^x>�G�]��)H������|v�H������&!=�P�Ϟk�eY�L^x>�G�.b�*���AzF(�9f�
�=�#F}
����I�3��
�
1���%��a���;�Q�.b縗���AzF(LWk�
�M�1`��LjӕD}m�����-�!�H�~����+�NW�������#@X�`�8"=�AzFj��l�:]I��F��Kz� aт
�����A����t%Q_��o���k/??�Ƿ���O[�����e@����
��4����m
��6�ϰ�K����/����0v�\��ҡ�~���X�ᓏw>�x�-�����iA���9��sbw����������1]��}�����.�lYEqq�\y�H��A�{�
ھ����?���h�NWR2�s��[}G��o����n
�]?䚡�?u����E���s�.�����@����K����l�Cf�9i�k+�d^��^5l䘿?f�(���c��f����z�{��gܕ�Z���IωU�a�=O_��9C�9Q"Nϒ%C�L���
?�����0��Cj�{Ѥ焼��g�
"ڷ߷�~౻���ܵ�
O��Q��Kϩ�9�g4S���W6���]:��y� =C���Ez.��0pœ� [...]
z��������l~d����!=G�s����a�Y.��z
=��+���T^|q��O�
�����
ů�
�%3�ƍ;Ě#.��[_ٳgg�H��ҳ\����ƞ�z�V����q���_�~�z�+
;�ٰaVyyנڐIy}�9�����?��
G�՗�;�g�Si7O��ߴ�F.�q�9r�M\�<`Y..)ɾ��;��������sX,�%��!~��^��[�n��UX^�>x�����F����9���!*��a���Q�g���xH���$�19FNz�	r�-�'3����h��{z�瞑C�̜7o�ĉC�\%�sii��Mmۖ�����g̨Izժ-r���O?�ԩ�����&��rsN�~��t��X����ҳz�$*+����ݻwP�E����1��)R]�h��K^Z�
�m�z�Ϊ�Uc��ҳ�,s:�+�.T~y��9t�F�ob����D���
�
Ff�
+=��O��_����Օ9�g�N]�J�j�3��6?��,���0�s ;'	}��eM�Fz�	����\�q�%�E��s�~���{x��
EH���U

�j���ϋ�\Q1\���t隱c�.\8U�o��c�|��������>)-))=�X�^�.����)ՌT�7�s����fndN|�,�-�YF-H^��
="���/
*�On�1���m�%٨�g�
+K�QÊ6/V_��ӏ�ܟrH2���p?���{n3�	*���(����s����IB���K�~|6�&�<s#s"7O7���=��ܨ����k�/=�e��2'�s�A�{eH�?37Dn�v�`��Pgn��B��
���{�:�q��l��,E���o����^��y��漟�%�H}�D�̍B_r�q�=����*�I�qD7��[����5���������{N��
j�$���A��[zV�Y����E$���f��'�G�g��dJ��ޯ�9�=��-=��,W����=��2U3s#[����;FY�Ē	�u*���VL���Ζc]�Wk��Xv���g�r�F�/9{N�����pm^l�9���Odw���(�@����>���G9�����
��9I�c�og��{����B����ܦ�f)�o
�^��
��ukE��_1,--+�͛��M2�YW�A�;���}Un�BM�z���׉��"dz��s*+�g̨f�.��
�_Kq�s��u�D�S�������|i�7S{u����Bą~]�*uC�̗���*,�v�m��X��!�����Rd��AJ�Ě7_%ߏr��8	='ؿ���IB�����3B����"�.v��~�k
���=7�⯥��ƨQU"CgNt̘o.X�`o�����.=�Qd���z���
%�/u�������LW	��t%Q_��/�9�g
ҳ#ҳ�g���F�ӕD}m����g�o4(�ʱ
<,�{�?}l��߿6��&����{zNu#=#5HW6R��$�k#��5 ='_B�br�C
�S��� ]�Hu�����T�79��x��b��q����
�)`�2UJӕD}
���IHϓg.�R�q�
�W���͙bY�
^x>�G�]��)H������|v�H�X�ݵ�P��;�����Kz뛄�
 	GzF(�9f���t�X������瘍�l*�3 8"=#�
���MEz G�g���c6ҳ�H� ��P�s�Fz6� 
��
+z��HϦ"=�#�3BA�1[r��g__�º�����7����4	��������G�v���]�NSr�+�3BA�1[r�3r%XIH�f��%��79v��]�N�e�+�3BA�1[���i��kI,�tI�y�g�j�R��7�����a��˹��iR�~EzF(�9f#=���l^M]"={Cz���l��H�s̞wˬ֠���Fz6��.���!={Fz�AzF��9�ϻ�>Ř���/�ϟ#*�W
9��#�;Z1i����/\^SZ��[3�����e���
��3ҳ
�3"`z^��g0mJ��wfH�A<��S��}{Ǐ�߷߷�?�TQQ��GȐ��=��%?��ұ��#ǚ��
;zD_Y�p��u5���>}����������[zN�>���/���{��s�]'v�k/??�Ƿ���t�:Kl�O��n<~�k�ӂ=�݈l׹<�&m�{0fHψ��
���S�{�f���7�
�����sH�Iz^:{���?3��~zY]�g���:��>��#G����O�%0=g�:�*�W

6R<{���"���}}��n��Z��#��99{��t#=�#={x�G��*�kYZ��-��Y�@k�m�mOn����.E��0e�
��a�aW]���?�-�?��g�o�-r|E?�xo����N]Յ퓏w�G�~Z�}����1�<-��O�rB�e<5���Ğ��OR����Y�t�<~ղ<K�����F��7(tx���̽'���\�g{�gO!ӳ\Va���e�{>|�X
.R�
��Q����K�a���Z������什�8"~��O��O.i&����U��I��e}���'���sz��S7�3�o��g��Ӗ�g���
�[E�x�W/�{�X��gә/ߘ�|oz��O�6���ڡ�v�n�hs<r�L˞Q��ް
A9wx,�yƝ��޸V6X��k���.��f&�;�Ӿ�|�g�{/!c���!=#$iL�G��T�gϡ��ijjR�ee%����&ҳ˧�'�Vq�Im[����O���kV��}*�gޑ�M�Z�X~������� ���e�Az�7�g��
���-2
 [...]
��i�b�3ϱ��җ�KJ�/�G���a��L����>QyE�s{]�>NiպMΗi�3�G�{C?������n�^x37��Yp�k+-��w`�w]P37��
��vN���sVox�������C�z�sbEpf�?��v�K���ұm}���e�3��;����~�=T�!=�ߒ�Ԟ?�4>=����77������c���.ظ���⢂�5�-I�R�\i!/��{
�^}�,�J
�CY��(��(7�KA}k0�}b�F���엩g8��������Օ9w��iO�T�Nݓ��׾����!=�w�y��` {/!c���!=#$�
q���#�E�y� =Cǘ�ݤa�s�g}��-�oz$�̍�ƞ�?~��e,�ӳ$2����9�������
~�={�����W�L�{S���0��-3��2/b�X>�}���s��$gT/-�eZ"��V6{C_��ӏ���r�6�g����u>Ǟ}
��vN��xH�rY�Ў�Y�׍w��#.Y��b߾����.���XnhhT��С�r���/��Ql_SS [...]
+�IZ�{.(=��m[6��<y�Y�g���J?�Y�c�҆���ڝ׻o��1K�
�
�� !37��|�z
�w
Y\�
A�T%�y�:5�)�k�B�・}���=�=%ރ1��ɐ�7�VmȄ4��7Z��Kϕ��3fT�
�j��p���ڤ���b|۶-S��i[d_�}��
,�Y����UU7��}0��Ϟ���%2��Cz�`�K��-3|�c������ӳ<Y��,g�y��`3I�}��`�Q��%?���ߌV���Ryg 9^�]t�0a�[���s�37�'ٓw�_�eϨ�c�7�M޵��~�y�u�{�}��ī��vsϵ��`�XW��K���o�dH����Ѧ?:�犊�"��5�ҭ{��_�b�رs.�:q��y��8wϞ�-����
�9(��A�f��s�+=;~�_�}��.�������Etxi���O��g�"*��Y��Z��2�X^�ej��l�Z�s��5���O"W-��{i�u�Ǟ�콄
��vN��x���ɚ��r�F��d
��g�1�{�K��w� [...]
.]�f�ع��gd�c�r��m�o
���B���b�)��l^M]"={Cz���l��H����6=7K��yԨ*mE�---Av޼Ic�|S%ڷ��@�cΗ������D�͞�!ӳ
�r�H�6bKKD
�yɤ砘z�'=�WS}����
�X�s�}��ǖ���k�%v���s��
��毥d�s���H���5�=4�g�~6�ܐ1=sbƳ�
�aÆYݺ��q7��vS����D�=�H�ƞS��g�gD*�k0J��L��dK��q�"=:�_6gJ�O��ʚ��ȥ|��l�3��LϐHψ��
�ɔ����ȥ�o��-���d�9��u�4%g�"=#�g{�g$� G�g���l��d�� ��P��
FzF�PY pDzF(�9fϻ��;aA��`**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨����g__��:���@���o�q�@lH�E =��obQ_{�o������ ��v�]q7@lH�E =��obQ_G)�o��y��*Q�ߙIm}��P��
���`ڔ�>�"��o��%]%
+��Q��
 �g���l��,�����(���3BAz�Az�HW	Dzv����� =� =K���P���F����Ŗ����ȑ�A�*��9�}�#ee%��Ó���� =�h���ݿ��}v�ʠ�Urr���t��������*��<zи+����
�T�g�����z�{���r��$#=������x�O�3��l��y�9�w�8�����Z�V���[z�
]:��3t4�-��D/���
^���zN�+�~��r˥7���,��M���v�
w��{|�晞E�
"=�

v�"={ +�t����{���
����:���H&���ު�lhh�:�;�׿��^�Jǎm6l�U^�5�(��/�@D����k3�!=�e=C�L���~�uC�]<��5k^k�z���^x��e���l�˥�-�6��1"��ǎ�-/��e=�DQQQ�ˬ|��q�<��	7O�v�m�o��w�?�w;U<NSS�e�z��<��/�;��E��o�1�yڸ!.���k�
S������3!�=����nܸC�
1�e�*���|�'��JV�?q �Ȅ��
:Z^~�e�����w�֋�WUݸ{�A�����R]_ ��'=�=!����
=��7Z�p��KJJ/XުUk��E&��k+<�������g��

:`Y��Zn<��>��<5�,��}��*F�?�O,�
�S�~j��ݼ:cҳO��J:�-
6=��
x`���55��Vm�
��ٞT�
de�	6��7m�P_#����Ȅ��W�X?v�܅
�N�8$��
QϞ���!���s08�Z��X`����l��AIq���g��o��Z��8�k5�d2���k�������-�w˻VQ[=�>sCEj��ꟃ�y�zv9��Ș��y���n
�]?��U��Ǟ
�U�g?/BsE�p��}6CI���ϼ�L�ώ�Hϲj�N�{���z�F��D,w�Ԏ�
 p��`p>�C���9�������
��ܰ���Җ"47����;g��qC���D�qy��=fy������&=�_T��3��=��|�Ћ2�|k��\��Ԥ��س���{
Q�=������ 
�s08���ҳ��r���,�oŏo����9��z�_~}j��-CȊ���س
ҳ����R��s�Z�t�� �A�T�
<��w�;��՛��3'�y����D��'	�ʲ�����}37 �!��
�
^=�
��O����on�s��?=;vT~�O};�~��>aZ%c�����=����~�V��Ȳ2��\h�+ŏD�.--2o�$�}�'�g����A��

5�J4sbfΘ1�\����v#�����{�>x���D�U��
����̉�����1}�Y�熺uF&��.u?���jV�ܮ���O��)�=7H�
�t��rU�n��.��99R]_ �7=���߯I���24���~�琐�%�U��
��� �*=��f��z�&�=!If��罐)�|�ߢU~�:jT�ƍ;d���]��ݥ(�@��ݺ���6���毜O�@zN,ҳ�T�
HώR]_ �p��ԣs����
��wz.�ںuK���R,����/ѻ���\�o_����r>
�9�H�6R}6 =;Ju}"��g��W�X��z�V�����/����
�j����s�aì_��uo7�|�sb��m��lxz�iמC�/SR*���(�={���j|� ���[ӓO�t�y����G��-[��s�ޜ7�7��<����˽��5������'V���T)�o��y��%[j?������
��/�3%�V �M����w��~α�̉��#G><g΍ϬY3�������ƞ�=��Ah�sl��i���o ��&P�����Y  $!�����a������@޺U��7�P_�[��{�o���ohhT�{��+��
+��T�g p��5�}�
�^N�����sCm�=7 7H?�"=����� =�Y!����
 �H�� =�Y!����
 �H�� =�Y!����
 �H�� =�Y!����
 ��I�6R}P�3�	ҏ�H� �(���x�������(��T�g puzv�YH>�SS����@�8NM���<�����.�e��>�M�B_����Y�ؠd�
�- 9�mdH� 
+�qj�$�gǯ�$���.�j|��Ջ
J���oA���f�g �85Ur��i�Bm��?�$�'P&��jV/6(9wZ���|�62�g �85�ٽf(�Ջ
+�9<����@�8NMEzv�Y�f�b�Bz�9�gP�@�S��:��Y� =�׬e�z�A!=���
�3(T ǩ�_�I��N�2=�_�#��.
�Z~j��?v�bҨ��?_�������m2�
�z��hj
+�eJ�^�3��Z<�X��^5l�B_��v"�N�9=�t��o�}��o#CzP� ���E=�iSb
�3Czv�,KgO���g�]���у�
Mz�&i������G����[�~�����K*����7=�w��o�9x�g �H�6H�.�E��1�<-Z��:�ϵI��bL�ɔ��4��p�{F��HF�f.&�7ɿ1~P�qI�6H�.�嚡U��I�T����e�����n�,��_:T�
;�
=��򌳾��v�)��>��e��0o�O��n<~\�Jۓ�?�xe��z���e�����C���&�T-\ާ�7�B��X^�hՎ���7ےNr�Pӳ^ ��;����ߗ��m��㝢��.^Ȱ����Ο���Z��˦�ݢ�S����/߾
�t�ٲ�n������~��
�;l���E�s��=��S$#����{����r�!=� =;�7�g��
��#��۴*iYRl@��PqQߴ�F.�q�9j������⒒�K��l��
S�_�ss���N�".�f���BeZ�n��=�� d���t��g\�L�/�2�*KV1��O�K�L2����U֪�x�
;u��N ���l@�$�����[��S<��k[*r���5e4�0���zf��ؽ�%����n
+=3�74�TdY�9=��}�����.�lYEqq�\y�H��A�{�
ھ�����B��ϣ��
����77������c���.�6n����CFFq�Wh�浗����[Է��+�.T�|�E��
�Ѿ��Os9�!�;=�&ɖ�4��
=����훭/�yue�=�'�ҳ�`U8�G^7��;�Μ��S�$��
�~���8�Ϊ��T=����Hυ!=���
6ҳ�+o�w��^�
pr�2���@Q��E���3_���g�ȸ;d�ks��'�r|Ѳ�e����G�����ҡb���
�JϪ
��54h�l}��O?�s��a�(�=��'GI�)0���{'	j�s��-��9x��g�/����%O?>��\�sHH�a#=�8a�G���Yh���M��"=G�\2=�Y*萑����0��}�aE%�H�>(+բ���=����]9ۣ�1���IN��g%�o
fώUS�
J�9Ǿ�qu�@�s��-��i{��֠�琐���
����\nۃ�Q�\U�
v�c��y��GW�X_SSy���*�
:tTn �o/��Q���`��^2oܸC�1����={v�q��
�s�7T��Yrs�̸sҚ�V�+tII��?�w�
�ʾN[Ʋ���[~���
}^�}{,/AeA�f��l?6i�z%{{��'�ܶe�j����qr6 �NHz�~�E�?�yϪ�om�o#CzR�n��3 ='y�f�ez�Cdhq�iۺ�Oz�瞑C�̜7o�ĉC�+�sii�
�ڶ-SQ���ϘQ-��U[����*~کS;�[MMM��e�s�
+����v
+򂭆��Mi�Kn?x�ȗ�/q?!��س8�լR7%�|�,���ͷ��7�r�(ǞkV��'6K�u�� �?N�/���I���X�[��S���w&�Ihz~���|���짾i��b#���
�f���������}X�Ш��f�E��񽢢��s�~���{x��
��n����j�Y$憆F�~���Eh��.EX�t�رs.�*���1c�Iz�Kr{A����AI�ͭS!���R�?IϹ�Q�E�KǶ7�
$3t�{���xGz[�O���{��"7O�~���:���\WW��3�"_z�#�r�F��t5=p`�
��\�sZ*��_rJE�$=�~F�7����?�F�n'�e��i��"Zn���r��M���K��lnPo�,)��x��{�d�?=��{��
>{'�9Q�O*?\�q�$�*�W:��7���G:�=�g�==��,W�Lϝ:����f��'�ȱ��r�L����;��g
��=�sB*��?}�A\����>����_���Iz��������_v��O:�E�V���_��+�6� �y��|7�ݶ��&�j���^���d��WO��r������m���X��ٰ���n��a��V>��7P˲V�k��+�r����+t��7��
��W�]�O�f)�{n�
�����n�0�[����Y$c����b�r޼I#F\¼g]r�sZ�
��JfzN����T#=[]y�<KnVDn��{��+?5�O��]�ݠ�7	Ͼ��
%���s~�4�S����
��ܿ='Ϸy���>ӳa�7������.��%��Z�C��{�L�9��7n�!b��O�-h����)	�y��%[j?������~ٜ)��5�P�/��
+AI��M/������qӶ���'3��N��}v�]{������V7-+-��7	�wCo��N<��a#]ޠ^��㗅3���=���
۽>�_�
v�o��*BsS��~��'�x�]?��ܥ�9��#=��0��BP��rd�oɹo#���,��A%r�q�/pA������V���[N-|p4_�
GI
��{��	v�9��ڽ>�_�
�6��9���;&L���sf<���j�8�9�H� `����W��,�41�&r�$<�
���f�K��
�g�{����9��ۼ��?�{6`���|A{��}+��)���,��$='
� ̖��\�Ш��,zSut��~��7�>��s����{����r�z����w��|;'�{n�}�����=��r��F�|@zN�3 �-��9[���j�����{�x���:���T�g 0��
�s�H�!IZz���̮=�2�^H;?O�x���Gr�� �X�g/�^���y��(�OzVrN>�
+�
 
�,=�'��
�H�AI�ɧYa���Ԥg��ͧ���@���I{gBz�
v; 8JMzR*�w&��76�ܦ4�_�w)����gS������k�\�����ߚ��&�����#
`�Z���"��3����	�����&+���D�a֠�h� :��G�fȬ� ����DŽ����:t�~�{Ow����EuN�v���s?�w} 
 }��=eU�N�s_7�c��ٯ� �)�g < �8N;  �{�����{�
[������sޔ�
�)�|  0�
��=�!�C�bq~���  `
+�  {�C��"px��@�  ���� �g=`�bA�  �����M
ش�
�p�'��S�H�s��m[5���!�����������t �_�= /���������K|����=�VH���[o��^N�9��F�G���
�̱u5?�+,	�E��3J� ~�
��<�Zᦏ�-���zG�[�P\�g�)�Y ^�Z4�\[�Ó#��J�yΫk���[��Yzivo�-�MIE�'�Q`� �6�g ��ȱ�ç�����/Np1
�+��z��#�N���xpݞm�,-�g  � ��Z�Ύ��d�Y ~�����&�#r͞�?��G���3�WV
$˭�&���V[�c0s̥�I�#��f�t���eب�GI��yeͲ��Α��u�={=�瞫�.'�K��,_nj"�N|C��閰
�,-�g  � �9P����5da�9YR<��=o\:��l��_�B
:s~�""�|���,� �<����/�;-��{��=�
S3nޢ%���̘�%��
ZHM^�ݩ�j��{��;w~�������ך7O0mw �3  �
�>=��O�>��P
z�{�,T=.������/�=1�]��\R�1f�������R�+_�xQϞ��6M`G��){>]}6�%S�
Pݜ�g �_�=�v�.�Z�;��@�z��޲{Ǟ
+�����ǿ��[R�H9�}
��s�o��Om�8{f��Y�j6(
�grQ�OZ�,�1<�wh[+7`�  �=`/R�z+j�ZWzV��\���
��QO
��=�պ�~gUe9-��l ��3]�
ڎ��g�U�/\��������ն��$%�ڷoI�n7����_EG��ys0>>.�`(�g  � {�m�[!��.�3�f�(ʞi�3oҬ�9,{^0;�l��U��*
 ��x�]{�����"ԞϜi��mƐ!=�'&�:��ډO��>q�t
[g���
6���/*:D������� �g �E���
+�+=ß>>H��y3E�u4Ӭ
sú=����31���m�=8�i{V�~9P]wVj�[�|>a��֭{z�����
>�|�m�I�ҥ�iG�rP�3  �
����mE��+�Vn(����Lm����9����D�G��M���ې���&��� �pڞ�����R�3��;س��=�,�q �L۩
���y��R���$4� �=�V*�@�<z{�޲�E���Ln�|��M{��
+
j�T���ߴ`�&�Nɯ�U�d#yy�D��	��q���uܱg�>by���!<d�z89��ر�D�������֬ٹoߒ�
1� �`�b@
+�G�|l�~�,!�� �g1�?z��me�‚C�'܎�R�'n^���NaϦ�� x՞e���)�#,{��y�3p(���}���r��j#�=���MAo �ўOW�eS�2`� �˞�z#��}`o	]�ҵ;����:�3
ux��Y/o�N�1lt���Þ�)�gS�� l���9�۶j>3cP�
)�����
d#{�3ʪ=�1�>�ٯ�g���
�X�^{�Sv�a����9�M�g��Y;yIRR�}��t�v3?%���a�@��+7,���%�a��^Y���ߟQ�v��~/��JI: @
,��ƥ�"����ێ
;�~��9?_m�� �ĉI{�N7�v�ӹ�O�C�/^\H'�**:�f��2
�3�#��i����Y�9
�g��\Y�?  OcɞB�
b�Yo*Z��g���t�WQ�NQ`�@���y�����mD���1�f/�3p(o�|!GI��{b�= �)���}�"�����od?6
�g
O����Lm����9����D�G��M���ې���&��䞁�s��3i?z�
��l�
  �8Q�L�y�
�Z�Q���{��T���
V�qc)��5�x`�@��
<�  L�מT��y3m�Þ���M��!�Ԟ�
ϟ�i��M��4�_���F��2�vG��{
�
  ��hϛ>:��r�j�g���;6���r��9=�ߚ5;��[ұc"�� �{
�
  �xu�Aـ==`��C�� �س`�@�挀=`�  `
+�Y
�g�����#j�؏_�= �)�g1��AL!�g�{�
[�
+ٔ���sޔ�܎��g  0�
{�+�g#����-P��9�� ���Y�o��"�;q ��{��WRo}1%�={��
+

+>\<�
+ v�=[i	 $�l
�s�{��w�+����+�1 v{ �
��:��p�"� �Ƅ
�+�����.��g @����{w/^P�3 1
� 6���)��s_7U����OV����O\j���:z���݋W�
@�{ �M���Ğg>>�whس<�ޞ�763�������$h�:�|�̇}��I�aR`� ��� a�=�ޡݵg+6
{�c/�����!��귰�Ȁ=��g @��?ҙ��}�����C�zu�bf��_��"�#G�޼9X]]߭ی!Cz��
.1�=s�����m���d������� 
�}VIV#+?��}��_C��:d���V��-���fm���$>>� rس�^6.�􋜷2��M
7�wh׋`�Z`� ��� a�R�BhӲY�c{�?ӂ��
�
�������x"��[7g��Mܗ�ߩ�M*{��%n������u!��t���H���{��
���9��B�@<��V��_e�A��g�МW�����V����>�
納]n�����]�ͫ�ޞ=mSƣ��f��t�"yI붉��u��6�홆tw�O��VWUV���u�={=@Bƣ:U����a��9䙁=1�g @�8�{��

� ^K[���U�[�|>a��֭{z����u�|����ګ֡��Gb
�Yo/��٦��F�У��S��7r�W/'�y`o	]�ҵ;�^i?'jx��V�
���Ŭ���W#
��5�%��%�J
�g�$�z�K�u��7$�-[��Gu�W�a��LS{f,
������ a�|�3o���b
�ܳAθ�
z�L_[_�H�ȑ��rrr�:|�•��{֒���t�ِ�"ݪEB��x+�L�$m)�����ӂ9��F���l\ǔ��bȄ+�ƾ��-�
��홅D#g�gm<�����F���Kwm
yf��;���
����S�:C��s�1+�̸8��ƍ�&�.
1g�h�g�b��6{j�Eb���=k�SV���ߎW��	���̌A���p*7���4	�ZM��V�3��Ɔs�,�

J��&&�e�,m<*{f�k�� [...]
+1�ѮCVPEBt� rس
�f�u��5oN�#E	��;���L̺;��ae�T��g���I_�+7����=2
��B���R���=3P�
@�x���7�3D��Ir��SK��s
j�܈����_���g��xcnPMW�V<A_�f�}K:vLĘ¡��{3�J/�`vfi�6b�		�`�g���,��#U�[�=��Z
+�d�_�l
��������
�
@X��}
��f��Y������7��L2�J6܄^�3�p���a�?,,�^
}��-)b�f(�>��Q�n�Ƈm0�;3�=1�g�{�{��9\$�LU�ak��@�
 �9*����0�g`�g����E�^��3 1
�9*bО�Y�@O-9�g����E���{ f�=G�ٴ=2�SK�
��o�r3Þ�#�Lݶ�> 
y�9����+��tC!g�3���L�t�N��rT�8l������Ϡ伲fY�st���@ډUU�h0����D<񬞭:\�{�)��
S
�<!dSr��>q��,����<��Bڳ_A�
 E^{V���Q�M�`8L:�O0'��S����2��nZYq��v���d�y����٠���U��h�y{��f��J��x�Y���L�} !'�|����4 1�,928����>Mi?y(�p�Ї@ �����7/+J>��O媄�ݔ����TVm0b(�^;T�6����A5�lH" [...]
�y�x�Y���=��v+���i�X~W  L�ў�}�
+>�2�WX�g����z��Ҥ��ܳ^��I�p'��ێ�L?0hK�aϾ��Wpe ����zݳJ���,ۿ{U���C����nj=���X��l�K���f�
��O<�w�{���+��  `���Y�~�
6��*�ˬ�g�B�nZ[��ܳjbU�17T��F?��ijz'��璢�i�����i�X~W  L�מ��s���
g�����܀=�8�_��  S�gE�a�a�{�
8�_��  S`ϖh���-
V
+]��{���+��  `
+�ٷ���}���
+�,  ��{� {v ��+��  `�����)O�!��Ua��
+p,��+
  �Hm��y���Þ�=�_��  S`��:�����٦��
۵�����N�s���
+�,  �{��?i��ok>]���Mn��=�_��  S`�@0��X at lϐ��'���)�1��)�
����/��� `+�g �s, �g����n$��xe�}Y%��  [�=���c;�y�Sc�lMZ��ݢHo]��y���@�@�'�Q���  [�=���c�s����  {��=����=��3  �
{�`� {��g  ��a��?9v�,
����
�~֣K�@|���+^�vh@<�
u��m[5W5ž�!�+K������]�
�=�>]׭ی!Czn�
������Ν0`��ߟ9z����ڠ�(�{ ���v�.�Z�1'��c�����{��ƽLn	�whس<Dpe�[36�z���x��= �
+�clṕ���;$��t}P��> ➁���3�аgy�̞�OZ�\���
Z�=��
 ��3Ƒc'�O�c?"��chϰq�p_�>g=[f=l�
+�̞�k~
5~p��}/+�KJw���+��uo���M�������@3��ã�g=�M�Ț�
ye񪸸+*v���.^�H�3
�D�
���Ɔ�f<^��a��!�Io�ڽ����v
h$!��!{�ʞ�>;�?��~d=�ה��yܸ׷l���d���wc�{�L]��ymݺ����п����W���#{S��o��=�e�3  J`�@$Y��ٱ�\A���ОAġ[��b0V�9!!����E��Ԥ���,�6w�,j�;v~@��v��V�;S�Z�zMW�y��Q���n����\A6��_J��6i`�Sn58�s�
 >�%
+{�3g���
��2'O
��.��@ ~߾%�[7g��xq���I
�
��ә�69�
yUSS��
{ D ������x�7�g�s_�p_������������r��ŋ���xMm��������<tqIo�D�7�q��CG�d�m
'�g>9��m�M^�iz[�sXW���K|ɖr-��f�J��������
zon����,�L��
K�}����4�#�K7�N��u�&�������
 ��3L֢w�[)��&ʺg���g+u�z�
4#���Ϧ��
����^$vK�W�>�lj�|��Z�6���o�9��g����h����+:�z�L3ʴHC�Z�������P`�  q���u��Ɇ�{ݎ�
+#�7�!�� ��ƞU�
*֞4����e��S�ӳ��\����vN�U�*��v�ڳ�%�M�=�
�M>�X�g�#�JtO
&'��?��ɓ��f���3�`j�������= � �
����Iޟ�%����]��ꔨ��UO��y��zu��ϛV\RD<;!>���
�b��ش���g���A�pu��17ƍ{�㏏�۷�c�DS{&fL1
�Ic^^�ȑ�Q�
 ��3����`f��a��z���'�q~�A{V��)�*̏�ѩcg���17�6�{�#z{޿��h����-z,��
�� ��3��3�f� س?�= ��gy�j��:]�3��9`�� �
 pڞ�*���S�3��o�/�`�m�h:xs���� �=�?��3��o��I`���7�=  b`�b�M
+{V�Þc��j��
��ߟ!���o�^�B�� �س`�b�=K�؞a�‚C�'�lJrR�'n^��vF������,�u �
+�Y
1h����c++��>�漺�l]�#�t��Ϊ��v�7�+,���<�9��բ�G&fe�z�b�g��h<~ř+�� �i<c�� ����7�j��v��fk1h�o����zy��{K�B��݉=�'$������j� ?� �<����/�;-��;lt��0`ϒ��+�g  0�F{~�`W�{o�s_7��,9��3�Q���+��9�������L��g��
�,9��{  Sl���9���U{��� ��b�Y,�g%��
�=3{f�iس�����3  �b�=�e��B�yܸ׷l���d���w�N�J�h����%d���{�3��7}k
�3����5��ӑ{�`?~�
  �X�gQ{���+���9�^���9y�`�w�=���-iݺ9S�ŋ
,�DL���]������mȫ�����eس�
fg�o#r��f�y6{i��Cy{�
9J�>@ݳ�����3  ��=�mռU�+V�=��u�ᇳC�ޛ���r}��=c�p�k_��}"�����ƍ�&�nݺ���?����=G?��g�~��s×�~�
+�  Lq�r�x��1}ɿaSW(Q�s}�yE��BϞiF�i(W�9X��

+��z0�3��ǯ�� ���y3YP�~j09�����N��_4slŞ�SKG��uG�Y�3��ǯ�� ��9k�;�wtb�L����ٷoIǎ���L̘>bēƼ�̑#{��Y�3��ǯ�� �OΖ����Ӈ-Z�XX�s��3��ǯ�`�y�}�a�^[ň=�My�o�P��S+
+�ISp�D�$ۍg�Yr|fϒ���W��
1�v�J_o�Y�^�U7���%�V�72�7�8o
�g1�ƞ�,,8Ty��(���>q��,�� ���g�
��+�g׿3%�Wd^	>\b�`E��%*Λ@����,��3 V��gX��Q���k�(��g�ĔP������ �go{1�9b`Ϧ{�[ĔP������ �eϦ����r��6���
Ҿ# �s���M����)������bŞ-��zўQ�
b�s����^>/�
��CRk�omu
:Ij]͏�
+K�f���'�|ؗ��D
&%��}������B0'w���p�(�8� �&�؞=zެ�#���{���@f"�
=r�d�
)�vس$8i��N�E�[�Ӧ��;4�92d�����
٧W��s^]�!��ܵg�7������
��D���k�{ʪf>>�ѡ?��aϒ�=��YO��y�v�{mس�YN�gـ=;� ��ƞ7}t�,���&ޡaϒ�=��Oo
+s�Q��)fJ�Y++��>�RϠ���pN����;�*��%߼�����&��䣇�f��t�"yI붉��u��6�홆tw�O��VWUV���u�={=@Bƣ:U����a��$䙱՞�
D"�����ٿ����N����][�#9�a��=�%]9�5�r�������I\�
r��1�r�D`Ϫ�6���_�?������,�~ V��33���
�+�
;�~dml��5?�?8������%��H�ڕ�����U|uds�vҷ�u

�>�l����@�
�o�+�W��ő���eO͘p�j����$����R{�W[W]y�+�;�ڶI�_S�9�V���]�W
;�ܮ�G�
��	i�NW�
�+�ЭZ$4K�7PZJ���-�
]�vg��u������[xC�Y��L̚���#���3q�]=�e*Ӣe������8l�N�ajό�Ì�`U9Tzɂ9�ߝ��dDȨ���ռEKr�I�
�L+�vB��M"$���y���	{�b�  +пPQ�ޑR]wť��9!!@l�E��Ԥ��,�6w�,��;v~@��v��V�;S�Z�zMW�y��Q���
�o��
w�>5��'��]��o��Gd��`aτ=eU{���w5|��`ߟ���9?_1P��
��CӖ���/�;�=eEVزq
{�g.�Mh�پ�;�b�ke%j{f!�ș�h����}�o
6�\�k[�3����.
����'Y4-g�����D�=;޼už��/ �
+�r�m[5�<�/�7l�
+�B�ŋ����Vo��^���,�C��f�z����@��Б/�j��...�y9}acc	���d�S��,
����a�
�д�Y����R+ʿ7+W�Y��E�j�t�J��~c�9���g�P��61�-{f1h�Q�	K
��/��~e�3CӊN�=S�YRZ3���NH\�ID�=;|޼už��/ �
+��=3o&
�Yݳ�=�.�Hs�?��g/|8c诟{�3���o�Pm���g)%��3����М4[NLL�=G
�gޛ)a=xG����uwj/>�����^4��|�6����'C�����Z1'Un���S���XVR
��܎q�n�$B�������,�~ V�ƞw����L�؞���N
N�^�r��߿�9�V��
U
+� ���wߝb[�Vn������5u�
�
��ٙ����;tBB�hij�Ki�K�>�J�iň~�M��w�r��+5�Gu�
�֫+5�M�=�KV����m���#����	��7�{v��y���=K�_ �"�
�SV��=��fJ����(�Ӂ�e
|����g�ZB7�nTn�A��!�S�o�,�W�J��?h��

�,�
+�L����A	�k§�GU�����c!ό��璢xcSy�u
���N��\�I��gWΛ��Oس� X��
�Y�Z�LD�Wa~�
*�tͰ��`C|��5ȯ��7�84��CFl����AF�s�>޳EDUn��(d��xt�noݟ���}���a�^�w�'F
�9o�C+��	�p�hϳ<'��
�
�ԭ���qس)����+��g�=��oJ�6���R�oDO�7I��[�=G
���݂{��J�Sx0�z��ܞ���oW��ǼržC�ڳ�w�G�rKI�7�id~S��[�=�
��m�l��YOž�B������Y8rvt�"�=��s��ž���
�g!H�{�س)S
�<�b �Ii��yy����E{���� 
+={�=_�_�s4����,�X{;�=��
+��~�Pp�D�$ۍ��|sRk����
޻u���a|c�2�d�,��z;q����  L�ڞ�[�P����{F���$� �Y�`���=�|lH��zȞ�$�� �)
�g�"�C�,v�gg�=?�+
  �Hm�-�'44^�8�ʡ��i�LBt:�;���ԉo��5��,l8�8l�������弲fY�st��\�w���LmuUekW�N�xBNw�=d�Y�T���Ջ�g?�d�](׏��¶r�ڳp`� \pe �I�9-c���z�}>s���:��q���w:�z0'��S� 
���xd�jf�ʊCL��.'��[�T�*I�a�}���]G��k���p`o	
F{P4f~�.]��� ]�OH0
�R�=��$3�V�N4�
�ʩ�ޞ��i:i*
�
)=KƟ7
��AlB�c�\Y  0ER{>P����U���O
r����_2w��a�ӕ���e�:j9|&�M�N�E�S��b<_</mD
�U�C������?�S����(���j��{��IVe|�.��j�V�d�<[�����}6{)9">�NϘ��
���3\Y  0ER{��Ġ���%�/�pЬ!�;��3p(Yn���ؑ�
6������!��G�L����FW�iT������쳓
ҞY�ڰ�gZCr��T���l|�`�@8��  `��Y�yAUZ�'d�*�h�O�j��2͏���N�r�Kf��=k���I��=��ɐa��U��g��L�0h���=�3p
\Y  0Ej{~ c��?޳�R,��Y����m�0�⽊�T�-*��ei;}`N+�k�dO�U�		�#�
��pH̪�h��2�Ξ�g�dm�3/�ڰ��=�MLz��ٹ
��� ���,  �"�=G��Se����� ]�+6���"�5?ZO��ӵ�����`0
�*���l�N�}v�ٮU�`��
+�J���������
\W  L�=;�3㋉�s�=;p���E����Z~1�7�g�.��  `
+���g�){v�s�{�lغW��b�zΛ�P�/�= �)�gK�.~V_B �X�g����/��1�s���B��Þ �سo�={س�[��Q�M��ݢ�� �f<`� ��3�
�s���� {  �ڞ�,,8Ty•]�������g��3,�y��c	�9v�= �Hm� x��?�T�ilj��Ԧ��7��vL?AE�YN`�  � �g d����ǿ��t}�֎7�
K"��
;�zG��
�,�3  8 � �=?�Zឲ���~t���vس`�  � �g d�����d�
�аg!�f�>
�;�q� ��
��xžgf
��;vW
9v���
�؞�k~
5~p��}/+�KJw���+��uo���M�������@3��ã�g=�M�Ț�
ye񪸸8�|���.^
<�IdM�8���x�W��r����]���������W,
�j�za�0F>�ȑ��t��|鷿�/���� ��Y��g�c��  O {@F<aϢH�#��37�p��='$���hђ*)1ԝ���.�E�r���r�.��
+ugjU�T���9/�<j��z�KLL"����D4����,ן���L���T�~��qUH�=j�&�L�9�]�ͯ�z�,�hޒ��.)�t_�Sn58�rڳ��R��< <
� �=G�{n۪��1}ɿaSW(r�D=/^��RL*�,]\Rě���+6�q��CG�d�m��n�~
�o
#..���wߝ
+�Gޘ���1?6v"K��
�v_����
@�{@"T����Kda���t�Y���/�%�O}l�ۡ]G�u�̛ɂb�Yz�4#���Ϧ��
����^$�J�u��+T[ ���_JI�{�[`k�3i?��ɐ{��B�Y/Y΀=;���
�D�^���S5��ɒ���h�yGi9�͔���pyYp������+������Sn�M��[%�ܳi��={
�3 1� �8�R�I�OW��?\95��.qϰ��*�{
+�͔��=ާ}V��Gi�t�u��-��12{��
���uўC��
{ ��3 rQ������O����d��\�'$�5h`�ʵB
^��0؈��17�m�$���B�QH�Y�/\��#yKb����3Sf�� ���
�t
���
���EO�k�܍GKl��͛.
O�}�k�ڑ�e���#��"j��g b
�3 ұcwy֢w��C�}�r��� ��o{5�w�[E���jӐ�S3g��C��8!�U��k��cG�H�vW�  <
� �ŋo}���Wg�U�h-	��g޴5�`�i�Te�ѐҾ��=�1�w�nw��d�*���M�c�3 1� 9r�$�O���ݎ%��g����)��s�o�0�H��n��f�Y���|���TL��=���O�{�lغ��(�0b@�ySďvg�=!�bu!G���Ⱦ!�y{�8��i��g b
�3 ���x��3LYXp�򄨭�2)�7/�r~�!G�b�Q��3 @8�g �C�a��
w�x���#�
�Nȑ���s�CzS3�5ԫ{�= ,{@<�g A��D=�������A�%%��
{ X�{��$T86՘�{@��à�g b
�Y��P�?
+����� ��5{F
+|
� �= �������0`� (�� >�,
�{@1��;����|�^�= 1
�Y�g�˞�763�VV
$�}�yu�ٺ�'G��r��U���o^WXR�uy0s̥�#	<21+k�KV�
{�b<����٭q� 2 {�0²����_�<w]ၽ%t�K��Ğ�V�o�t�m��?�Gk��R����̝��
6:�t˰g 3��  
�^{>r�����S�4�|����ӏ��2[�aπ�=�e�˽�~���ڸ�xj�Ī{�z �0`�@fp <������*}�z����2�3?w��mž#��
�=3{f�i۳���w�G��= <��L��C��B	s������]�e��wz����y�*�:�����Jg�bs�*�٧�f�T�5E�l
9���]�W
;�ܮ��J�3`D�� �1?21k�/��Z��������=� �Q,ٳ@�C�j���c�		��5�-Z�d3��,�6w�,j�;v~@��v��V�;S�Z�zMW�y�����f�g����$��t���s�l�Sn5��
a��ٙ��ۈ
��-�9���}��/�()���u�2|%�3��`�  ��=+מ�+�L$���
*��B����%EԌG
��v�������#_2�f[�+7�R�����Ns����^
CȘ̞I���_�{�
سp��`�  ��\���}�f>>h֫����9hF���Mٳ>�1��ϽHė���7W��@������v{�/d+��A�`��p�=
G�
��]䡚xU���"mI���'\��'��!{��L�W�y�4�g����S�ӳ��\����vN�U�Bf��䞁c����,
�{$�w��j�����Euk��`yb��e�F��v{~��b��!����@��cO�y��̌�g
��a� `�z
9v2��m���s�t@;:���Z�{������&S�n^�<\Bv,~=X�<p��D��Գ�سr��y��+�d3?�:Cь�AG�{~޴⒢�m���KJ�s�
"@��TB{~��B�z��
�3��C�̆��=G	�٣ĠDRb��a�zHm��B��*�R}�'�=o�� Y���M�C{�[��`�Q{�(1(��<pس
�ga��^
c�‚C�'܎�
+)�7/��Y�3��
�
w�8r�$��9�i�`���z�%ї���������Wtw=�J忤Z���qO>D����!i���e`���������
ˑ��Ԟ�a����!�{�(1(��<pس
�ga��^�(�2���>+jk�w��P{��n0�g;FW=g���.��'��]�vU�Y�
*�OQ���qe�;��o����
GH��=���L����q]a�^j��:�왏�rS��G�:X~l{:X�p���3`���!�{ ��SV����"x�*�l}
+R�F7�]\\
������zO*��j��if� �r�
>x�r�ڳA�\��=���%r�5g���!�5��92<d�GQ�kۤ�s`ϲ{��5{�+�� 0��=3o&
������n�;ހ�Ӕ�ڳ^04A����F�#��
3	��g�rC�V%bp����
v�����x���Aa��I��=~R֬�`ϲ{��{��$T86՘��=�(-罙�=G9������C�o�
���=�wz�B�$�G�.�mj'��:����
納]n�����]�ͫ�ޞ=m)~F��mW�o�t�m�3���ԟ������ -��
+{�z@�~�Q��(H`U_�G���'�n{y�w���]��;�BZ�<:�
=
z*���PV{zg�o��ģ���O���~����(9L�*���w/�hA�moI[�
ڰQ��q�]伲fY�s���	
�/c`�z�`� ��eOYUj�ޛ)��s���[�{��X�g��h��`����� i;Y /a�
\2r�W�� ��|r��o0������_������%t�K��,���{O���~Im���*J|�{&��l�ԉoH�-Z�
+��(诌#��
���Ds�VV�0kk~T����78d��w��re�!�;���_��s��2�o���B�]w㻗_�?"�9�y��d������-�=d��� 2�=+Q��n�;:�? *�w��N����=C7E
2b����^bd̍_���?7X�CR�����7�`d'Ԟ�2g�-���_2wZ0'w��t�–��T�2۪�Z�y�Di�,*<39mH���\�q��r�m!O/[�ٳ�0!+7x�W
����.�=�!���3�ف��e?�84�	��ۓ�w/r�1Gp���a�z�� �#�����l7�۳
+�r�zs��f���*7��_I�T�j5UNZe�,9ǴF�,tҞYڐT&�r����T�'��$
�g��w�W���%�!��=,�LdQ[���9v��w#t���Lڿ;�ӻW�=3A���{ � �Y8
�gޛi�����<21���^!�@%p�H��$_$�p�^R�m�*�h�rC�{f8S�lGw*J�>�{f���
�$�+��'�gׁ= ��-{�
9��
س3|���
�xo���ɂٙ��ۘ�=�������3�'�,t�r��I5)�	G�W��g���=[�8�n׮f�Q���K����
�\��u��H�ݺ=k�e:��Y�3 �}d�=� �ٳ
я���@��Z8]а�DY

n���2$U���j|�cn���X�Y�0I�oW���L�Y�~T
+vz���E�17B�ӻ7�ܳv_�����= ����������2����
[����
�����=;yB"��Y�3 �}|<
���czسl���F�sl{   /�gـ=����
  @^|oϞ#'����Þ��=  �o��k�ٯ���X 
���
  @^<T�*4�P��-����������	�`�y�}�a�^���zΛ��Q      �p����5��     �1�ٳ��E���     @س0`�     ��,
�3    ��=
�
    �{bȞ���xMm����MMMl9h&d��g     �c�=��>K��Ԛot؞����3SfÞ    @��k�{ʪ~��V���0�vҞ�:?5c�cc'�z&�o�M�
     ,b�=��YO��CGc��5?�?8��}�uՕǾ"-kW����޴=����,^u��j�k�<3{R�W��j�:v�?js�t��6�������b�=    �
K�<3cpd[?�]ͦ���C���CJt����@���]��zO�<����E��Z{&f��_��ܳ^�ƛ�W���l𳿔����{ [...]
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      �����
+endstream
+endobj
+1356 0 obj
+64
+endobj
+1346 0 obj <<
+/D [1344 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1347 0 obj <<
+/D [1344 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1348 0 obj <<
+/D [1344 0 R /XYZ 86.4 83.712 null]
+>> endobj
+969 0 obj <<
+/D [1344 0 R /XYZ 250.14 46.905 null]
+>> endobj
+1343 0 obj <<
+/Font << /F36 728 0 R /F18 1304 0 R /F16 717 0 R /F8 729 0 R >>
+/XObject << /Im4 1333 0 R /Im5 1334 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1364 0 obj <<
+/Length 2417      
+/Filter /FlateDecode
+>>
+stream
+x��YIw�6��W��~�M
��)�L<�XJ.�	u#a�m.��_?U(�K7��qsib) ��vt��л�����򍈽,�b
{7w^�KxĂy7����lE*���n�z����o�]^�?�^7�f˳8�|
m>��p������#B��-� ��W
.��f~��@d��`��Y��Uy�?_��E�]�&�$"��>^�A�%Qd��m3�ف�������
��f��lOKz��Q �E��
� b�}��F������Wm^U4���P�#esG�~���7l�=�� �sD�q�)UG�s�D�q�(�y�����"?ߩ ��ۀTR�
*؁�9�U��B&
�K��
+h��ٗ�������u�t�W%��`8
+X$�-cAB2
n��GXf~�
u	Ԧs
�&~���O�{�L��-����J�Nժ�u��"	 Y�c���v�|��+�����
$hac���-K��s�F��[)��"[ ��������}޻��1 ��o�qK �үt�̾�
Yo;:���?棄M_��:��������H Ш{��t�t�����:����U�WH�+�U�P�^ƴ����2����vdA���`u���3W��0�S�,
�L��<��l�g��	7;E۷7�D7
����iDw����c�=vb�1���
���4�M
+
����#���MF
��R�rui������� 2F�&�:Q4�#)�@��t�)gvMLШ� æ����"�
��D�	�VHk����9Ǔ�\���X����I?+;0�.e�8��i��f+
[]��������ׯع��bp����0
+;�<�\�"���}�8 ���^��Չ&Ip���<��������4�}�aQ�vr
^���A�oV�D�4�� �0�D�ؘ�麨\l�i�ծiu�?P��i��^��[�f
q8#Zz�cK�Qln��ۄ>F��
��t��u�" 
���Y�q��V���<
�ӆ_lޢ�ٕ%�4�ZU���C�kE�A�#�o��&G6�h:l�w�܊�n��6��l<
X�z$_-��:k�g��X�Ɗ�t�Laf�
�`
ry8�–lj���7�q�@z�#R͂
��`ЯԊ�CPd$&�}ʃ�\�$�$N����V��$�w�����gi���D��m�\ذ+ at FVQ�7o���,
�	(΁�Z��&$���#9=v�:,	 �������=ug�����Gh@�
Ώ�Ә띮󊆿���(���v�1o{]Pb��h�B�"�ƫ`��*5�kM:`C% pwDւY����3�Mj��{[*�:��ifM �R�<�F��O$��@:��w�`}��v��P�O^ky���d0H���UT
 ͫ��� l%�ZQ�{L0�Ie6G"T�<6���s6ю���U��J���D
*:ꢡ��o8
Z�nEv�X���&f�q��/hԺ
+y�z4Jm���l������M&��$f��i��%�@~l]��Y�
+
C�d���'9
�"��]SU�g<��9���J��"�X+>7ꁞYJ�b���m��i3���ER*h���o���D�U�c�=P+s��)W��]~�R��F
���^7d����B
�D�0����8�]�n�
�4�*�TN@{YN���EO$�Db\����B1�1��������
�
�9�d	�.���Q=m�(f��pa���0
�y2G�r}�ȢNҴQ�� Jx�Xr�f�o�5iqw
A3�Q�� �oJ�4</z��}����E������Aˁ��š�Q�Յ�U��d/fo���̈́3r�ɚew!WH���$�!G|W���T}b���sPo	�-���-�o�T{a�q��
g�2�9:�9r8Gk8G#�f�j��
�Fu7�n0��9��
��b
�a
�0'���!��V�
��sՖ<4�s�dN �!96� �A����)u!/�T�� �Զ or�� �/�_��2��=�H
�+�Y�P�g�p���X�
�z
���'�7ؕ���œ�f�������93���d�F_;{9��0�^��{'(�R�r&]N�	��.y[�f�֞� "�䳢,T�r^����B՚D�ר)�Z�UY	���@�̔5�QV	�܉��gʊ����zZYqv��8pȭ�[~����c�p��'���X�o�
{�<��R�H`����xB�f&�b1=�!�B�>Awn at f�v�1 �|�!&L|����ÍPB�?H����	$e
+H��H2c�Ȩ�v�@&���0%œ��+���
1ٿ�ߤD��U���U��%a��&��M>��8�� �2�Z�yyW
���6+q��y�;�k���b$��^&��^1��%�HR�#x`�ES���K25D��Ա䑁l
 �	�t—�� Sg�W��qwhW�e��Y�5��`���r@=yq�_�}g��òH�{�v�t��
��?��5�
+endstream
+endobj
+1363 0 obj <<
+/Type /Page
+/Contents 1364 0 R
+/Resources 1362 0 R
+/MediaBox [0 0 612 792]
+/Parent 1307 0 R
+/Annots [ 1337 0 R 1338 0 R 1357 0 R 1358 0 R 1359 0 R 1360 0 R 1361 0 R ]
+>> endobj
+1336 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./cvsorg.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1366 0 R
+/BBox [0 0 735 408]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1367 0 R
+>>/Font << /R8 1368 0 R/R10 1369 0 R>>
+>>
+/Length 1370 0 R
+/Filter /FlateDecode
+>>
+stream
+x��[Ko
�����[vp���Q�f
Z��h���z�xs��O��&{F�Ln
+
X��QU�*�&���&=*�'�_��>��ۿ5%���!��!��e3:�ը����~�ip��3�����V{(�
�����@���q�X����k��%������?�/��'0C��S�9�O�l
=�4������ᇻ��������{��韃��
��n�v�?_]��?�e��N��?��w���PF
�.}:n�o�4|O䘼�
T�	�tdOؠ
�v*8����`}��ӥ�z���z���?σ`�R�
����X��d<ԋ,Aσ3N/x
Y
+8�\ìB���.�Y��L"�=�������s�A�1���S
����_�on����%}TVc,�����X�5Z���-���F��TZ���Fg��\�%U&Z�Y�σ�*4rv����h*!I?D,}$�U&�4K`�".�l7������ޗ�(��X�DB��~�Q��U��X�������!� [k�0_��
ٗ
+���Lsi�?8::��`��,
��8]�9��
�]A�
0
��
+���r@��!=
�*֗%0M��NFzy at 9?�
�
NW7{�帉(���d�:�,��
�
*�l�N�^�Moө
��V�����������1��'�C�>U������
+�&�Ҥ���~�{��&DL{�i~��b�a���&W4����[mn�2'4?U}���؇�4�x�魚�
OD˩�5�},��oި�Ž�)��np�`
�0���O?�#&��
w�ɢ�:��9�E�)ழA����.�R �p
��@
+�*`?J(ZNƌB�-L��,!��N�6A����K�3
,�-��X�ʄ�f	L�r���u��?�d���i�:
�S�q�1߄�p��F
,
Fdj���@m�u̡`��s�|�xuw��ۢ�q��}U�W�/Q[���62(�d8�_-J�彐�y��7U��q
�
'
{��0�a���Hit���Ua�E����_��G�	�qK�UTX�[	��
+{Aw���Z
+����"�`R	�~
Y
��HVU�p���F�y
	�:��TX�[	��xA�M�
+�7
aH�dB�
Y=q �i��q\,��$��C��V�V�:�h�
�o�
4|��
H֘ܒ�' $�ŋ
�j)j$1�
jL�UX�[	��
+yA�M����C
+$C����Z/v
Ka#�)�Pc�@���0���K�o�����CB)�"����!BdܙUj
�*�*f
�gd
���inu�T�
g���[�
n���m����N�D�Z�N�J�V$�!gvE����ۮ�kk�gtݜ��
F
��:��_������31�E�e㖵=�^���sn���zu=#aZ;��}�B.-�~M�Z�5�B�Y�zf� ׇ�]�؇vL��8fhk����k�[�ⷖ_�;����ʹ^)�3����������F
3��ut����\���[��li�|Q�g�
�X�������'jC�G�#���,��خ�:���C����c
b��I
���1��J�c�z�̚>;��uS��.�(�y��,4�7smu�(����1��>ؠ�QnL�g��1f�XfM���i~%�|��5�Z�g�s�f���
�ʔNZ^�m�^V�\3�Z�!�N���yuVG���6G��c�&��"IM��w�_2o0�����BM
?��}��Q]����b�:��&��k�1����;����(�Q6�`!�=
�yq���"K�����[�?�5U�J񕓪_GV
+
c֋e֘���J�O~66ЗP�
nLuk�wQ�i�k����z�Q4�}�Q�|�[��@w�$����*Ȳ�`)��(�_Px�"l��Gw1����k�„�f	L?�e�{0�It��(-���(+t�b
?� oO)yy"���T&|���:�Y)ysb����R`=�6T}�b�|���kA�Y
3a�Y�Y
޼���5(���E��ɪ1]��dČʈ���	�%��2b�rjFl�i
� �G
&.#$�(L�M$�q��0��ʒ�Z4���-���� @����I©L8����ty�[F)��-�
Y������%Hja"J��&Q�����Ah���N��*���N4MΊ�IY����@���&aig���]h?U-���D3�͂d�&2IB3}��H�
`�{����� pr���]�/�	��1��
��SP~,\2�V�������pȉ��mV
D
tզ�0��6�:	�<�
�]�
a�:tpy)�� [...]

I�I���ɺ��+���Aw���C0?��b�ҘL"��k
+��p�~?�R��^=V��̮�����m�[�,����u��u�����k���V��/��T/j��� �l,�6��l6���]\��@�^X�H+Z~.qn���i�h
o��/h�ǮG~���ͯw�C����Ϗ����ۧۇ��#��f������'B
G	��{,|�rQK���S(�7��X*>8�`��
���r��L����
��<~��U�|�\^_�~Ȱ
�%v���"V�=�?T^���/�%~��
+endstream
+endobj
+1366 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151030085632-07'00')
+/ModDate (D:20151030085632-07'00')
+/Title (cvsorg.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1367 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1368 0 obj
+<<
+/BaseFont /SYMKKU#2BTimes-Roman
+/FontDescriptor 1371 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 86
+/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 667 722 611 556 722 0 333 0 0 611 889 722 722 556 0 667 556 611 722 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+1369 0 obj
+<<
+/BaseFont /GQZABY#2BTimes-Bold
+/FontDescriptor 1372 0 R
+/Type /Font
+/FirstChar 65
+/LastChar 86
+/Widths [ 722 667 722 722 667 611 778 0 389 500 0 667 944 722 778 611 778 722 556 667 0 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+1370 0 obj
+2685
+endobj
+1371 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SYMKKU#2BTimes-Roman
+/FontBBox [ 0 -14 863 676]
+/Flags 65568
+/Ascent 676
+/CapHeight 676
+/Descent -14
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/C/D/E/F/G/I/L/M/N/O/P/R/S/T/U/V/space)
+/FontFile3 1373 0 R
+>>
+endobj
+1372 0 obj
+<<
+/Type /FontDescriptor
+/FontName /GQZABY#2BTimes-Bold
+/FontBBox [ 0 -176 921 692]
+/Flags 65568
+/Ascent 692
+/CapHeight 692
+/Descent -176
+/ItalicAngle 0
+/StemV 138
+/MissingWidth 500
+/CharSet (/A/B/C/D/E/F/G/I/J/L/M/N/O/P/Q/R/S/T/V)
+/FontFile3 1374 0 R
+>>
+endobj
+1373 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2025
+>>
+stream
+x�mUkPW�f��N���ԔX ��*�Q�1��1�(� @F`�q�yɀ���kf�Dy�(nV]�n�y���h-�jvS뺎n��lO��6&�T%�����|�~��N���A��W|v��0dG~nz����H�߃[ ��+L���n�/xy�ޟ��A�s��W��kBD�l���|�� ;K��-ݵc�������eUxx�,C�Î,J^���'[�_4re�*W��^/�ħ���}�,�V�(��gf�3���t�<G�5[��R�kdK#��V�\�*?��f�f
*��.���E�vȳ)�
~�C���Ȩ-[�m����]܎��d�:��XL,!����r"�XA�A�$Vok���:"� 		���$��W�.r�#���W�+���sJ���*����Ŵ�6qޮ�Ў��r�i']	vij��&�m����[D�n���c��c�Y�d��Y{,նZk�zE�Z��`��� ��CA�9�8â�m at MRD�
��=bo�z�|��K�����H#�P�c���ZW�t [...]
+�����$H�-�?R}�Zh� Z
�0���TY�Q�Io(�7'�BV�����; �Q��]�*�$U���=����o�[���q�ѰE�����b�!ڛ�#�ѵ���
+Q�#���Z�z�{���V���
����{

a&�9���
5z�dP
ZL߇V��-�r���ه(N�D�JD�J�-5^a���[J�Ԑ����XU$�(�M�׎� ������
+L�g�z�O�N�2��e�Q�V���PR��OmIiH�%'�
� >mY��+q��n��
y�C at sF�!
�X�S��7zv���D�S��+��`
���_����%6��p��[6�_k;��g�XLX��垽$M�}�"��r�ZW�Ȍ׆�.a��ri�������� ��A�8��/����|_��ڜ"�:�
�;�j4��=�����٪����u8�^�?��K�*1��R�X����ӰHφ��8��Fq'<c� ոϋm���^*��po:�I�q�I�u�p�i�n�5�j��[Yz��v���]ߘ1
��vK9V�od�q��G�w
-��Kp�����b at A�A���GX�
���\aR~'��/�SB�V^� p*�Q�߀A���P�Ӽ����џ���9���KIgB�
�
[�v���
+E�6R �Mqf�āg����y2v�9;>�q��M�1�.
+V���VW�T䐞:�z�܅KM�]W���_`L?�:�ϱ�'wR+%iŲ��C�l���o,{����:�C$JN��]_ߍ��'/Z
���E��*u �k`�
�N'2�w\Av����)�#>��~j��w�����y7

<-
;% ��$�X�Ks�	�^Z�q��n/f��`��H_�B��51ZKI���r�=�
#h�TZH�&=�
H9�(>&0�<�����>����<�?�+����M�b���F�oۿ�!�/
>,>��Pj�a7�w�D�q7�g��7j5Pȼ���:�2�N
PS��B�AI��[��VG�e8�nx�<��G��?����N�>��K������ج��39��'��4����1�c+ֻ����u&S����k�V��
�hDA����`��r�A�F���]T";��fnj�s��N�C�!�"��ă&��:��[~���Mö2yI�j���MI]��ھ�!�3�n�p����z
1�'|y�	{��A�
��rೳ]c�p����k�;Ƹ�K�t��\�f�|()Ss� �ȗF_�e�`�5�U�@s��g����1�~|5:��m�P7����B�|oT�]��%���v��ՙ�z��fڼ���đ,�
+endstream
+endobj
+1374 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2127
+>>
+stream
+x��UyPSw
��S[�f�$c=�����B�V��*�	$!$��n��H���'*EP��V�J�Vtf��];;:�V�������/������;o>���}�Í�H$�۴I�9F��u;[� '����|=DZA:�
+9"
��ܑ�G��Q1>p�}�
��Q���ҼΘl�	�T���-;g̚5��'
�-[��3�}�
T�h
�i�"]�7&'�
�+���j�^�W��7'kR��*�Z��lG�^��\��k����J�u3��`9,
+�&ť�(��b
�0�2e�2T�Ҧ%��
���������ƐаMᛷlݶ��&SPS���4j:�OͤfQs���<j>������ZH-��P�!BQ
��z%�H��6��w_��>�1��3�����
�Z�6�a���b��#
	��
R��.q	�Z�����8Elg�1��S����]��C���J�EǑ�J8�{[�8H��W�%�4��[�);�r攱<<`���/�+��
�H�
���_�������2,�5�����T��x�ے�,�:M
���
��r:
�X	
� �3�մ*4��� ��m�9{���_��0�Hv��t/.o�n3�v-��<ܫ�=>�Y�����9�uF<�TA��.:F�I.A��c*̖��&�|j2�銍��a�7\�D�Y�; n�u�Ǭ����t
�Yr��
M~�	��Ci5�ͻkw#��3�\
��`:�{��8�����c�����|����p��|��gOd(���\F���-z�r�
qX	��,�Nsyf��1E�8/n�5����ַ�[v��%hvƢ [...]
/~�t�Jj��2�	���mY�l��(� tVU�Y�8<�GgcZ���r��3��~XrI���@{���_�`��?�`h�s6��,N��w�\��`!����3��`�͘�h�#�i���ӍLM��_�\�6�ގFS�c\�����;J�[�����|����D�6��6������!�bA}
�a�ybg��Gݤ��v�;��)�$�g�1h��n������	Ha�;H���.sΚ"B����4գ~V$d��6
U�~�3��f���Ym�(AR,H���x�

�ۆ+��W<�ԞCH8�2�&>*�lm���T���lU��vk;T�:�:�DTW��xNwa7�J9t>xk��|^�<Hv�@��@�Vf�5�q�[ͫ�2V�3h�������gn�
�O,�J��P�r�8�x�|���9��sw,�!sZ�5'o�������e�0"��v�E���{�z�G�K����7��72hSn�J�����bjDC��c���D�B��7��\p>/{�u���	2I�pO����[X��A[�s��x��U��F�4���:�JO��h���u
�E"�
5��@_gޥ���柤��$��2�&V�c�K�;������
c�
��#u2p�cȒ�P�̄���[��Q�7�wv��?'�^�i`�k2�P�^�{�ak�M�v�7dV�a���;��Y(�u�Bs3�����|��|,0��)�F�X.B��h:\����hL�����S2tE��L�F
x�q�.
%K,�*5�=(ꈶ��X`3w><�a�9��G�
*�3H�c�L<��.�
,?y:��ht��)����D7QO�p
���薁� �"���Pg�HdU? ��V�
�7��p�վ�G� 3�\K�G™q7�	�dKC7�c�񿅃ߊ0t�>�!��`���'��-
���H!��"���3�
�UX,5
�bꌙ
��JLW����>H�u��;��d��%�,O_n�h�2HJb���ߟIZ�_�V�r�$Z��ĥ���G�!�E��c����~�?�Z�y�pI-O��i˼�0:I[���T�jK�]��,�!����
G�V����w�	��W����;g��\ޮi0�7�#�tx�%`q


�������\�q�BK~
�ϊ�
�-�<�=ٓtDJ���R
)=I�����!v����?���
+-O�=`+B�(�4/3s��q����WR�l~��V{�w��Zn+'e�3�\.��/l�j��q-4�������ac��N���g[��(���PԿi���
+endstream
+endobj
+1337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.866 353.779 216.588 365.734]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.6) >>
+>> endobj
+1338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.604 353.779 266.075 365.734]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+1357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [241.988 144.057 253.943 152.47]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+1358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [257.746 144.057 264.72 152.47]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+1359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [386.108 100.967 398.063 109.38]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+1360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [403.537 100.967 415.492 109.38]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+1361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [420.966 100.967 427.94 109.38]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+1365 0 obj <<
+/D [1363 0 R /XYZ 86.4 726.045 null]
+>> endobj
+970 0 obj <<
+/D [1363 0 R /XYZ 138.65 447.376 null]
+>> endobj
+1362 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R /F49 967 0 R >>
+/XObject << /Im6 1336 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1379 0 obj <<
+/Length 4074      
+/Filter /FlateDecode
+>>
+stream
+xڭZIs�6��W�(W�bᖜ��tj�Y*iO�!�%�2'�pi����m Qn'��x ������&�|w����L�ɂ,����a�Ɓ�$:
b�6����[
��r���X���n�����3z{(���?�c^�������������n�:�(7h�6��O7?�n���M�,�<�icMh(U��7?ބ�d8eV�	�*T�3�$f��
��Xp���t�Tr���λ����N�l#z�/oוּ�n�W�`�=���ٞ�b�ԇW]H�7����>������������Ւ��R�"���͝�6�G��?�j����^.(�A��?��������	��/(�
��$	�,�#
���W��mj��Q�,�G֛C�]�n`��S������W�3Ձ�v�����C�#O+�aL��b3�w��q������&
��h���)�|������6��<�Q����`���}�+��+��(
�ZH�=Ѫh�=�m��
UYy+?���GG/m'�ҡ���C��m��khx*�Ǖs����o<�h<G���2S߂,�|1o �3YX�|��c���ԭ�a�V�y��A��;��,Y��'D�l�WǦ���:�Sw(

+ޤ�93 �p�f�����1�4tE+<��cY���oq:Wp�����?���\hZ�~
ΤUE
.��T�@g� Q�k ��,�<�h΀-�8>
(��h/�v�8�*.��0/�6��)(�|$�Ou��$ذ���)A��8�NW0AU�ڼ-Iƈ�P��B��	AnWD
lH'N���*�V�*�$����PI�u���`���M��O� l֬�֩)��-�1
%@�C�/D
+
�)��lE�{�G��¡H��#��7��F�T%)N�`
��Y;��/0��G���;)!8�~
p at 08d�M �*��G �[�N��V�,j��r?A<�qd����R(N
�ΓͰ$���G�Wp������F �ǂ��L��!^�����v��#A�G���Q�8
_�Hy���
�x��Cd������64})�߽�6@�����p	D���c��t��9_2�
�s�����
+eA�d��VN9��e28�i��
+��
�,tR�v at 1����-���뱐C' i�ٻs�vŴ3�+ҧ"w�
+�x�ծ��
�{%���k5\�ϝ#��@B1�
�Y��p�/���I6�J����tBƇ��
�AZ��m�
l5WH&�irHP�en��!%�C�&��=E��|+�|�H�!0J�I*YhM���y{`��PC�T������	OD`�;��o�H�
+�0ZE�el�̀�G�Ώ���=��T�eIwQ&`��绪8�|ꐁr�[���g,��
?�/l�?q��ѿ+�[���ML5b�g��q�qS�Y����t�-�Q�(�j�+Ү- k�{ŠŰ
?-(N/���M�L k
������ ��d*� EN��>bnr���
s�)�����S�3Ɏ��
'�{E��
�}�(R[>s��:����
�b�Ek�m��2dU����"�yY�r��8)�
��>`��s�a:���.3S+�b�&-��!�\y(9O��S����H+�E�p�T�j
.GG#�,,��&8
+�1D@�Z�kF)�Ύ�n��(� �
=��ΰ�(��½4�
]v��(
<���[p�ľE��T4s ���\`8r^s4	�`�"��,�BB��"�6|ka�P<�C�s���)���e�;����Usl���l/��
+.ϵHm�P���8c�$�qa���̅l4�{(#���[e��m��3vk+�Yz��ڣ�K?}w��,�w�J
�n�%�/�J���qt�]Ќ=("�q���9�PO* �6��kr�� l��1��웂jX�N0Yn��p*���� di�c,	E��/
k��fQ�Q�)CY10\��W�o��W�7-
|��S�����
��I��h�
";�P
���
�A�L�K��P�P�񋪭XSi��Դ/\��V�ݧ=��;k�9j�z�\ְky%y�w�
�
���J��~Y���Aܨ� ��)���f2vS
��k�w/]_��9oR��1�8�C[�@b�^�(v�Ď
+�LY)y�D"
#SH�`�H�BH
+p���Y2���|��?+�N�!w#ƞ+�
�"�������&���Aۇ-
�c�Y�R��s��
����:���sSn��:)�L"�19���� ��<�`�_V�R�Tkk����%���,kI�l��<
Ue׻L��[�h�]c�ۼZ
��@�oM�z�w��8˃ˈ?���Ug#7 pֹ۔��:Q�R�8�P�q�]&�� [|��'D��
�G����xG��JxOR�j��Gˁa�P��D_�Yk6����L��O��7i�Yie�чZ��1ELav��9_h��'8Ð�2K�MG��(6�H��#9P!w)�$'�|�������N|t at X<�
����j�Ϙ(H����x<�TO�����MLj�
M|�
�����b���q�q�����0`:�ZP���16�jb���e�1�0��Mh�{���9/��n"�=Wf
fA��Q��	�2���k�7�z��˕՛0��ӭ>`w��<Z�'=���";_X�����d���җ��ʅ���pCY�=V��h�Ft3cH0�/��w�Pƨ��>�wO��DϭJdz�֙�u2J at T���
�>��
�8l2�	v<@�8���$d����F|`��=��J��^� �ݦWE(	t�|F�t�a�Z^$	"�	֓�zv��
�J�Fg�K��(��z�4�rF?>I��h`��ī	N4��Zw�@�ڲ�19K��k�L&2o�1�X�xY˃�@LeI O/�I��2K&h��r��S��
A�

�5���./O+gtH�#J,]�Vwgܡ�&�	X61�ءR�Cq�i
����O��q�g����k���$ʈ�*����;O� � �\������&@[yr)
�+7�N�$��.h��@��uA)������?��ܧ^��8	Rk�|��)��@A�(�&��DQu�i�z�tz����x�(G���^l9�x%N:�,a�>`��2%$������O:vqX�H��f�[�>�����RW���ۙՔ
��|��:��*���

,~%�
~�1����K8�\���|�t�
C�й�W�GJ����'I//�C�Zo�ƴA��%9�7v~I��CJ^���B�&�@m]�pfL�_��'#�_�?:���i�6��ߜ�<���0
�v��5��Q� V�+QV��o��m��'V�,�qC������]:�hw��F��e�9�B��%Ǐ%���iv�n~{��]�n�w��yC
��#l_O�0X$�`�}ӶE'f����
�\�p��b�.yE!V"�<uE6�|V�6	bޭB9잞@�n���`�'��(Ⲃ��Cr0��W7�d���?�s�5��m���ʛ�
��rm����
c,
Z'n���ס*V�߂�;9X�{��q5���T,�
��K�x��d'���1���n��}
�!4��;���}>��1 K���f������sH�8��9Qg11�f�e����
K;� ]`
X��m��R�����`5��Q��7��
�~<qF�v�œo� ���`]�{|hF.m(�N��l��o���>�E�J��e�S2h�s����Ġ�_e�n�=|�-��	Zi��Z<=�=V͎�
*�AVZ^��k
 p��}_��8x�أt�W�&6�����1O�].BɃ%��#���H��q���
��BI���(���E�{��q��)��'��gW~��ܤ[>&�w6��.��
Od
+}$�F
s!5�J�|�
K��x���
e�3
�Sr#���+�;t���P�ܭ܆�О}�7#�7ᇷ����_���ğ�M��ٛ�����Gg}4 }��O
z�x��	bK��M�q�enEx�}yvov3�p_����t
X-�����+���� �����v��AI:hC�$��P��K�F� ����x˅��6e
�����lG"�]:���
��>Œ�1w*���1�1z�K��p��<�Ƈ�9q�_,ļ蘞
+!��
��2t��nh�\��K��I
+endstream
+endobj
+1378 0 obj <<
+/Type /Page
+/Contents 1379 0 R
+/Resources 1377 0 R
+/MediaBox [0 0 612 792]
+/Parent 1307 0 R
+/Annots [ 1375 0 R 1376 0 R ]
+>> endobj
+1375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [88.171 431.151 95.145 439.564]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+1376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [100.205 431.151 107.179 439.564]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Byr:92) >>
+>> endobj
+1380 0 obj <<
+/D [1378 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1377 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F16 717 0 R /F8 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1388 0 obj <<
+/Length 2941      
+/Filter /FlateDecode
+>>
+stream
+x��ZI��D�ׯ�m䉮l�")ul   ��
.�AegU)Z���^��|/_J�l�ML̥�J����-�xs��7�\�������_k�Q�HS�ln�66f�J�M���~�k��Cq�]���Y���7��
#2�I�o�M.�Լ�箬�y���l���������]����y𶩆�lj>�nr��*
�&ZH��7eG[l��*��ʢ�ES�\[�=O(�~�?8��RF᡹�Ke:�UB ��p��u�~�T��]wI��B�qa�
wme��٨��O��ɭ˾,*~x�M����@ӱmn+w
�'1$��W
+"`s�T"d�m��y����v�������"�k�qO�YԹ
Q��uE�/�q߃+�$M�KS��W�>��V���t�
=�g�E$g��#�w(@��s�-�*��W���x��+O��r.ۻk�v��۵�1��c��~��K�fJ�I�"�f���]QUT��
�nv���~i7
�U��gK����d�_�����T��s5��
��Ī�2���%�����v@�8A�o�w��w)��$�BX��*���+- ^��i	4h��7Wx�Tx�X��߃��X
�u <�ۨ�5�c��)[DA�No�(��
"#��cGS�Į9
��;��ӐE��0��V=A�6t�Q��4���k��@?<��x7T�S����
\���(�X7����t�έ?6�P���M�{;��
�T����� 
���ЙEx�{~��0�
���v���m$]:
��™@F=��=����j�h�G�pD���9�3Η���

��<c�nB?a�.�OK
�Q��
՞g'��
�]�`�Kf�ʺ	� �#�-O���F�A�$
�~gh�Vڗ

r�ED���N
83#��{@6"ʅ�L"b��e��ƈ�r)8�!�J1�����VG��<r�7�Z���4y�VH�����+�J%0���Vĩ��W��
o�x�������B��a�y{��=�+�̄MC2qܦ$VH�U+�HErlBS��Y*��sEìz�U
������՝�ɜ��
�M���L�>��5�-f�
��Ё�'CRvfH]�(���
���~�l��z��Q��k�ݒt��/��t6O�H*ׇ��S���w�2���5�eQOql����N���qE_Z�:����].�Y���V-�"�L`q��w��x�
B
�G�{�a�r��d�@�葓f�N��M��}�a)��R��ɜ�?I���µ�Gx�2�tƏ`��D���� ���\$�$�5�M���䇬ĵ�p�/�J3!�}Fև�:��j����F��]Q󠩫O,�)�%Z�]t�
�ɞ�#cs!!Gm�� ��@$�+a,N�Fq瞮����"qt��R
�eՔ%��!�E
+�۳�.?���P�r:��c��Շ�k�ɳV����Ѐ{3$�

+��Qa.X8�(f��j`�OL�ȧ�o=ȧ!N��O �� ��I
MzҊ��w)%<���UT��s{��ۙ�H���%$pB��v8������cQ�&MaѦO	O���K�ͅ!Q=J$tRl�
�p�D
5\�
�v�sewJ�WJ	-�B?��, �����m,�=��	�5'��*�,r�9	�>"|#A��|��
+Mp�&�2~�68q,+�
�p����L;
�?n�!3��DopثP�X���L�ޗ�| ĺ�N��^�x	���#�ߞ�~�y��a��9U:x�<�9�[=o]&�"%��ӵ�,h1i
+�� �/J;�Ǣ	]ְ>�E�
�����g����q��~[6C��
���
��������b�!����>R���x���f�1	SI3M�
!�_І��Q�w�
�7~�R�q�j>�멧��3��dg��O��v��
+�[�0���7��q&�\Ia�MU%2�`<�Cv��mLsJ�DF<zž��h�����DZL
NT�0	�XD�T�0U�D}���<xR'�g����۶h?����
6�
������%�����nˢ�(
�5!{�d�
+
�iٸ�������=O{<�AI6TU!ǥE��P��E�3#�����S5oGޟQpl�wn?�a�N�B(�F�:�^i.2{O�
_��7睟`���r�*�i��F����jѡ���Z��'w_�{�F&�%�@}@�x����+��uw�V�24���u]	�p5�p8t
DY�V��q�ܡ��,C��US�WZUS�w8`�
2����S�nZ*�r�;��6
}�t�<�%��6ǖ��*�[��T���@;���
'_�c�U���4&_�
��
+�$�?�����-����
:ٟ7u�-�	](�L�*ǘ]�e�ѧ��7���U�,3$��P��"����6!��b(�Fq�6�Ԛ`V̢�T"VS${��� ?�$�y*2`��%�0:�Jm�!wq�D��I�J�Q�$
v���r�υN�Un͢�zT�� �$��F��D*Q����� R:
+�yJ���*R����j��J(j� u�l�0>�
��Hh�X��K�
����M�����c�ꎛ�x\�\�)jI�4�
+�H�mArEr�c�?��I�����	������dw\�٨{(Z.
+m��҅K��y��� i�WQ��_jyy��vgW��V�O,x�� �&�%]z
�NX���Yv�1����0�
8���x���)��UH+�����8���5�V�޽fxyj�����W�Z`�K��#�
�A��s{�>ozF�s8�*�����`tA�\]4���x�>��i��SK�
�r
+�8�a��B5=p��A
��1Iɘє�
�YlO�W�����CՏ�!�2ߚ����|�`T:��*�0�����(��
�׫�I�U����;O��}��.�h�:F�KpM��t~ח\r�
�sY��uY,R7
+�j
H���I���Τ��zf�5��=���n}����Ȁ��F���۹ ŸS�L�=2M���E�
g��
+endstream
+endobj
+1387 0 obj <<
+/Type /Page
+/Contents 1388 0 R
+/Resources 1386 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1381 0 R 1382 0 R 1383 0 R 1384 0 R 1385 0 R ]
+>> endobj
+1381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [206.948 476.642 218.903 485.055]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ug) >>
+>> endobj
+1382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [366.137 464.687 378.092 473.1]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvodes_ex) >>
+>> endobj
+1383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.855 319.288 388.905 330.136]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+1384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.066 252.899 140.53 263.747]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [284.031 49.651 293.495 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1389 0 obj <<
+/D [1387 0 R /XYZ 86.4 726.045 null]
+>> endobj
+118 0 obj <<
+/D [1387 0 R /XYZ 86.4 701.138 null]
+>> endobj
+122 0 obj <<
+/D [1387 0 R /XYZ 86.4 305.604 null]
+>> endobj
+1386 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F49 967 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1397 0 obj <<
+/Length 3984      
+/Filter /FlateDecode
+>>
+stream
+x��[K��6��W�v/��Őx̞
'�u�kg�q�����83�H�BR�����h�)hF{kOAht7�~A��v�~x��ճ�/��eQf��]�̬��,Ydd2�Z�~�
{�&N������^,�U����
���~��;���ƫ_~�A���-����W?>���ٟ��ϒn
Yef�ͳ_�g+��qG2���n�f�d	�ֳw���,>��
��I$���,���0�o���X�L�ۻ��V����ݺ\�8ױ̷��Z��?���^��j��
+��ח�!焌#-3P�_~�b^���Cr��l�̷��lq���h�&0[ɴ�.��.1�'�΋e�o��
�
+&�-��!i5[$I�iϹ%��Am^�;R�9���|�ί�uA������%1�^s\��7�d���c�uL���b�������Ƞh�Ê4JӤY���������#�+�W������'f�4Q����gq;
I;���I��v��$�X��ί��)�C0�9TI�;K���LL�W��#!7vu��l��4�{���r���/��C�����-�D�1�m��o���]�_��^��

��C6�b�q��T�Tϣ�H;KN�4d���:�$�HX
�"������m�R=�"P���T֊g
��I?�Uw��O�H��m��U���cK���4q
�,y��Xi{$s6^�!�qSř���]�Dw���J1hU��\
+!U��
w ��*h�2+������bu�1p�x�3
�^�u����cUt�i������%-pNj��F ̊[׬�h�8
��LP8����i�b1��Z�%��N�I��2�
��=��*����9Q��V
����ka����[�#1��|ӑ"w�L�}rf)"iz�ܬ�FG8dp��q<
L򀲫j�aq�x���B�����FY�c�"�A㨞�Y���r2s���J�0��XLZ���u�n���*�d�@%�<m�$��zQc52��b�`Mg^���m��=e��X��;n�Hǭ{��I&"{�nCG�?�C:�U��w���Y�綳�,� �9�@��k�9�'xo�[?�lwSt��C��q���ɡ%�d}����&��_���"J ��;z��t��#�i�X)��V�pz�/�X��ίsrxpR�s۷��(���r_�Ew��
ɉ>(;�F
H�%�T��q� �X�5�����2���Dl3�_�W#���5�bG2�ͷ�~8�$�&��P8W87���߿x
�+����$��
�0�|�׷E���Lt�Å���ޓ'
+�
q7$��}��`7o�����
�H$�L�'�Z
���_/^�>�0i�hD���
�����M%0�C|�n��s�5�
0�h68u�x�t�����
#,4R�%�B�{W���y]���zx���U��i$a)4�_!(�
�N�37��:����wo//��9��"�,5_�8���vY��9wą;
�G�dB^6��oJ �u"�8��j��r[nh��&�s�Ҧg�?�����Y[�����mX��.zboTT
1�Ψx����
4"���9���
:3�h��m@���
?���CS�ܸ�����ջƃ��Ə�|YW�K�3Rz���/߾ywu��Cs��$�������]�Nn����E�j:�8���r�E���!Ըη]�@��I� >ު�]�)`��>K�a%���_�św�j�L�m�S/�'��ܳ�
�))�8Z$r���Cv�@I�, 4�c�=&7���p�\[Յ?���
�/�צ�Ɏ�BP��:_rf��F��/�����v��U��ێJ�.b�a$���G� [...]
L�h쌘��3����b���=���_8d�,fI�ٶ:��8
Q׷a.ؿƅG�2~����S���Lpv�
��!���
��	�z�:�l��?~�
tޞ�
�MG�>�,�ߞ�,�w$��;0%�<ɦv������uh�0���Ѡ��B���M��'߷�x�t!=o���k���t�>�=3@�*Qvx�˛�
@ ������ @4�A��x�
����V�ʼn�҇�z��G��Uo!���/���M&�G&Hd2�M�
�4�������-��F�QO�b{�d���`���'����vܛ�ΕǤ%�QEM
�?�R���X�9^!Gť�ܶ�m�\�iO�Ѭ�ј���8{A
��9WE�_]��T[T����	�
�
�p�u=��7X31g(	��$�U�~�� �
�
+ &s�� ܤ��w�.��4;9芁\J��k�cLct��f��^��U�Y�}%l�;a)��Ӳ�����P���{~ �n��7�TNuA�f�j� �ܵ%D��\y�>���W��C~b_���cdh��ɻ�{�vX�U��W�ƨ&~GJ�N<C�>.�O�N�83w6�����
?��|�`�_�8�� �M6쏃�(N^��!�'��T:1��P�sp��h–�)��A�| �T�tq�V�ܹ���
+~$
ʛf�qa��o����f�ָ�ur�uʦ

+
���]�k#<�!$!���
E���Mn¬P�ʿ��6��%\;��k\�ĥ&DJ��e�o�E*p|���-�e�/\�]'�#����
p��*3�
8`?fuE5Z��xvm���
�r��G�oy��_����UB৆{h�����Q�!���,!~{
+�5���_(�K
\�3�~S�eh�`ɐ�b�+�B��5�n�T%�~k�w˽�5L<���9
VE��k?O�2�"�s>��/^ <�2�ߎ/�Ha�E�ri�T����YH#���

zw�
8��*"�ܨ�z��5
:��

w
	F�$�Ȋ�����R���됫�ۜ�Gcŗ`��G����� �ScJ�0|��K��dJ�_4���v�i��]���g��u� ��)H����H��*��2��
��N�����P0X~�;F����}
w�^,8�,���
S{�Yc(
c]�e��ל<�
1ټw�he�x
��fc=ro&¦>�D44G��C
�҃��Q^�
+s\9����b/�J�s�u�Vc�3/ K��H�|)�*��m?5
Ŕ8C�����{�x
+'�b��]I3%)�-�Yw���f�ѫ\&2�H-3�"uZaӃ��g]�ñ�C%k{�4=
�<��(.x\Wպȷ��pd\�~dM{��k��$�Ǒ�����w��X�T>�y������}h
*��Q���!Ǥ
u�
���e;� cc@σ1��P���{�ືA*=,�n?�w�3	I�!qVR���*�|Bi��hm4h��E!7���v q�`X ����^�U�ʹ��f��b��*�#:HS릒�����W_������X'�w���_��;�#�}�ٯ���ķp_r�k��!��w��]]��~9���f��
hTg:h ��k�����@��wS�����S@wwr��O
�eD�Nι�
+h$�,����6(�537��v�!1i�����n3�7T
�I
-�n�:_���o����%H�Ȏ%�Q�
�rℎSl�C��������j.K�M��6M�N8p]8�*���C�ʥ¨�M��
pT^,��}��{4Y��g�=Uӵ�.��+r�es�����o<��?����Q.;x�;�
�w��~�����E�c钏h
�)<t
�O	]ݝ����4>��C�|{���o7��GG�	j^�
8����c�z�EW����+E��s"��Do
��AJg��K��{�-2�mf���ӟ�1&RZ�L�#qUl��?%���?�AH�������<.ѝy�����^�T����ym��*���/�j��~	Vk
Ȟ
\� ���V��׽c�*}�A��8�����J��
+endstream
+endobj
+1396 0 obj <<
+/Type /Page
+/Contents 1397 0 R
+/Resources 1395 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1392 0 R 1393 0 R 1394 0 R ]
+>> endobj
+1392 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.842 560.74 237.805 572.695]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+1393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.831 293.111 114.793 305.066]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+1394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.194 138.38 230.168 149.228]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+1398 0 obj <<
+/D [1396 0 R /XYZ 86.4 726.045 null]
+>> endobj
+126 0 obj <<
+/D [1396 0 R /XYZ 86.4 638.089 null]
+>> endobj
+130 0 obj <<
+/D [1396 0 R /XYZ 86.4 278.823 null]
+>> endobj
+1395 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F38 773 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1405 0 obj <<
+/Length 3618      
+/Filter /FlateDecode
+>>
+stream
+xڵZIw�6��W�6R^�`9��0Y�_w{rIr�%��3%*$e���
+p�)[�/"� P�W_�g73>{�����,���.�g�ez�dʬ���췹fz�T���/z��-���e�V[zP]ӓ�6��}���h��Ɋ-=���M�mK)��s�.�����˳?����D��a������?�l
O��q��d���mfZ�LB��]��|��n�pWBv%�`J�M���~���%���x���K����}�Λ�+Z1%��Y9�ܢ*��9��а{s��2�e�;v�_���p� %���b��?���t�[�b^4t����P�����3�ػ0v�+�M�]�d�fmQm�˨^���m�����W�6̻.�|�R�,�yV�gKgY���R�����*��+y���@#�-IK�(�O�4�2����`&��Y�͔��H"SJ
5���1��Ɣ�Ac�G�
�@��J�
���{�>/YP�N�hէ���LX�&�U�D{W�$+-�-$����
��B̳�7;ɓ���
��*{��5kəQo#|�J)�v���r�i�T`
|SU�h�U�xpC*�6� z�
+�E*���~!��x�G�S���Nأdi���8�F#wb���˸�:��q��� ��w ����/
gN�O�z����7�>L�x���fSOšeV��VC�k�������Ѭ�2_�	v �j�.0�wޟ���5���
+?pO�Q~�N�Xa�����`o��>�>�WD)n>�W��ս�^q*!�����MsÐ�H��q�X��b���PX,P���O:��<�~ah��l
f�K��/��W�/��n����q?��r3�����^�D��X@�O��F9�ԛ82Ne��[o���ve� �W6��%W�k q]YY
@�\'8te
p������
*׿��B��L�n���%�M�jf�
k�z!���I��,I�H�0tj�g����[p"������e�Ѓ몦{ұe��$H���$=`a��S����++�E0� b�מ���
L>���{��Ы��r��G�a�$���,��;�Q	�<�i��N�W٨�@N%�4Rh��GAI�@ɌA	XZ���z����l0W���~��
�X�A�EU���-�!	0<���چOHihX�
l?+'����6o!E�R���[R�<ț��~�
S0ddC�v$�47��dm�f��n[|�1p9J^��n�&�E>�ݝO���'��1a[�$d�a+_��y־�{��8�5l�S��,�.
�_
)@Q�ð�~�9���LD�d,�M����vd����_8��a�+�z��r�L�q�	�� ��
�TA�2�;4|F�
�
h<O�#�Tn�MDF��`�c2	M�	\�'ظ�H��ݩ
60V���`WGQL KJ�K1V'@Z�I�|���o��w
+�"�� *���$ø
[
�
�FP��Դ�����*�)95���A��G�,
�qP�1'�L���u��AXF���MN���iG�
m�"?���Ƈ.
N�
�)"�#Ds�
�r�7��
��l�]�C�l1�c3LJǤ.%=e��;覹�8��?��!���}/\G�����!d` 2B:� ^ S�n*��
��:�T�:t�v�nxCҦ�A=#����-H��E�vA��rD�	i�h�
D���_�i+�!��SY��N�83�
uC��}�n>N˙Hhq�j-!�a����(w7
C�*�PO��*=�Zî�'Ԟ�l�Y�O I�W0��d毑�ULC�SY
�$�L�rU� 剈�
��n���L$=�H)���Wx�R��DQB쫈^>Y�C�0�
B��iv$P^I�gG��
������V (�c��au��\�Ӹ�R|�}�m�Tw��6��^
 �tp�~�ypF�sj�f�y2I7W
 ��6�הh*��ժ��$5x�VxM�⠣_?�{��u��֟Sg�zu��*��x�֖��$|�blҫ㔴�����T�ij�0�D�G~���_B�L�T.	u���q�@^
�[|��F�9���b��3� ў�7y�~
�\e}����3xI�Q�z���R�I�lE��kPt���x�<u\��V}F���Z�
�#ڄ�6��}JS4��%����s�.4��R�o��<��N3��>
qb`��t�:~a� �ѽ�pŢ
��D�0]21���|��P>L����}Dc
1N��0%�XK9��7�Ӛ�M݀ ?1":`L!��Efz���q�՗��79 `?�Q��K_p����L�UF+��(
|��a�#D:8fb
��;���E�=
�\<*�Fw��p��x��DZ�E	Y�!������H�m��(u�������
x�ףӰ
ht��i\�N�s�F��
+��*+��x�FC��
���`7�?��NZG�
���Z���o��}��O谌�Ϋ����'�v޴�.pŬ�#i\�!m��b��9��R�����
ҁjڕ��y>=��o�������K'��p�����fm`m��gv��Z�������������v-��$��� ���^w��;�� �U��pEO��&<�3������bA	oЂ�p����|�2�΄u�=���u�
�ډ�L��
+vP��sF@��\��[<YY���?��Q2�O�K.�g���G;l

�
�=�30xx_��vCmT>)��n�
xخ.�zN���,UI{��zHc��@�dG&��v�; ���$�0ڼ��YB�1�O%��E9Y�W]��vT�R��H���dR���
�i�4AHQtM�N�
+Ob�p��o�sGo!,�@�wb,,2��SZ�N�U=�H���,a�U��`^�["�xo���>�DdV�� ?7
����?�������s�m)9s.�����Ћ�%?��%gZ�eM(����+vܫl����%�
�#=Һ���s��@���Z�혃��	�����Iu�ϗ�.�AބŒ��ljl7��h�x
W�i�M{;�F���(�UV�T�b��Α���j�bDҁ�xC�JUvU������3R�5
�
U��m@�՟�
�BD�T�
�y���^��L�+&K��WH��/��/Վ
��
+�<�#B-I�?
q���l 	 ���:�bO�ϛ�Υ�:�R�=rB#����P,����ȟ~K�{�z���q��M�
CKE��J¨�"�AԿ3��Y�U��t{�j0�ﲺ-V�2�����r����A<8J��t�0�B��
�UW
����%v*�;X��D>�~a�o� d���qHFO0|
��W/9l Y�L��c�&�{��7]>L
������
�_É�گ��]>u��!��o�M,
 �~��>�1�
*�Zn:��=��6���O�*�nDi�>R���Ҏ�@�.��]>i��WKV�!�L�(�?��eN����(���-��i�?ˍ
 �Q���`Vd�b@|t؏S�����Y���&�?M��j�[�M>M
�����
��V��Ip���z�G
��&���u�=rl���N?�q�]`E:ѧ�
;�N9[W�u�u����8r���j>�[�o�I��f���[��a�m"
��|�����hj�=�5������gE"f
+endstream
+endobj
+1404 0 obj <<
+/Type /Page
+/Contents 1405 0 R
+/Resources 1403 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1399 0 R 1400 0 R ]
+>> endobj
+1399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [230.118 361.786 242.074 370.199]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvodes_ex) >>
+>> endobj
+1400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.808 257.389 230.782 268.237]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+1406 0 obj <<
+/D [1404 0 R /XYZ 86.4 726.045 null]
+>> endobj
+134 0 obj <<
+/D [1404 0 R /XYZ 86.4 322.049 null]
+>> endobj
+1407 0 obj <<
+/D [1404 0 R /XYZ 86.4 244.125 null]
+>> endobj
+1408 0 obj <<
+/D [1404 0 R /XYZ 86.4 192.523 null]
+>> endobj
+1409 0 obj <<
+/D [1404 0 R /XYZ 86.4 137.599 null]
+>> endobj
+1403 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F38 773 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1422 0 obj <<
+/Length 2582      
+/Filter /FlateDecode
+>>
+stream
+xڵZ[w�6~���#��ą�=���v�M�n�mh	���H���u��
��D)��}1A�����d5�'�/~����
'1�CN���(dj�E�B�'׋���3�Z{��4_Mg2R��)�n��{��y{�S�[�
|���.�*�]����/�^_|���՟�K�"N曋?��'
����g2�&w�n3Q2fF�����~_�'4�%
�hƜq
Z�o�"��A� ����TVz|���v�”�}�a�ԉ
ݥ���y�evT,�uT��<��T_*���'y�-�@�?���P12H�x��S���˨�
�d�
�2
�C�ܼ7���L�-Ҽ6�*�̏�sH���B
x��ş~����[�
�Y�e�2�
&3��
@��,
�+c�v��������_:�=W�r�����(�D�lь�M��`jv�
+�V{�gR6� ��0u�f�;�����X�c��B���X�Gљ�`���F�5���4����Y��
��~|
��~{ڭ��:�ak�����5�½����L�[�홲z9CI�O����qA��K���.Fyh��i�&Y���NM�~4�X;G�
	4�Lk�<"���
6
+�a{x��3
��#�
+P�u��9%Ȃ��
8 ��N�Z �
?ڃ� ���l}�
4gQ 'a� |�)��cN���
:|J��H�Am�9�*���
�6� ���
�Q�KT���֦����
�@�#��8P�&�S
��L� ���NE��-�7�5pA�ď
@�F���� ��.

-�T��G��Te'��
�Ϙ�	ļ�����X�IB� �	61`rL��霣]�����2~��!L����:Gc�
��at��C�aR
NhN� Py�CĈ���
��}H�ϢF,t�H5B��3
��|����
��1A��6
Brdr�;풧D��ܞ��s}X�0$�:R���Vcy�K�}v2��Y��W�"(�'���];pU�U{�>��D����ciSj�����+�!׀"8
+��"��t*�? [#~����
�C�1����>�y�I �
�Cz��A�㋧8>�v�%�
+|i�n�f��_߀Vi�f��~H!.�c�+謂6�ԅMfm�$DW+�@
3�0���@梼��o���e�����٪L�V����<]޻�`(8(�pu�UM�o10��Ճ
;AjIs��v�9�:�j�=��IP������ ���CE'
��lf�@��!T`�֗zF
�2�xp��Ի2�,
%6&m
��"ԭ�cE
gc� T��+F�c�.V[��.ws�
+�Z#_�ȏ��K����h����
+��q
+��xS�#`�C�?
�jE
=��Ñ{Iᙑ~`�Y)�T�4RA��Áw��'3&��H�AA��ۖe���&J�u��f�~����/]�b�5����L�ؗ��'��卛�y�ٙƟp�
-\g�@׽P8��<*��
+RE��Q�����^2f��~�^ca5��с]Ij(���u�9�Pq���@6�i*� t��WMM N߭S��us�E�vp
t���@�qL��@�Վ��lx5�O��g�ef���r��@
0T7U�V �i\�r�KI�\�X8�"�C(W�D\���G�l��ͪ�
���� O��1��ա�ﹺ�Ȟ�n��{]�^G=�
ҿy}1�)�D3�q6���Ez�4&n�4��[�8�i���0�7�9���V�W9R4yKŁ�_�
6!�2�:�8�a�پ��s�qL잮9��}�����6����΁X)#
�[�u"ps�=��A$Zy�2��fIF�
������&���)ό
�R�̪�5�n�
+3�},A�]>w^=䡍�L���=$_ at f���}W�P����]zԮ��U���s��8�C@-t�����ՠ��Dȋr�-����O�%q.I_A�$����K��pTl�
�jk���� ����b��_��c@
�-�/�Sе�&?�5�$_;����%�ъ=�;M;�$��m�z��
��[i���6�ֶ�OQ�8
�9r+
+&b��*Xt7�˲ظ	|(��8�SR�3f�@��fF��O� �#t�=g�`xfr�U����>��a�����S�����7� z�]f�{���? ���wi�j�
�z1z��s�
�.*���ז��\`
(4��m����V�$
M�+x
��*����E��T�w�I$]����;&�����Z���0�0;�G��C��ڄ9�Ǒ�i��C3�������W�W-��=h_���讣�>&�d��L�v�y������^���������I��
��M�xfW���Y����C~'����?bTr��c$�@��W*��yk
0�Fi��0��I٬n���ጔ�.#�����U��V�X��K
Z�H��c��3��4e�o�>�TB������H��>k·��j��7/�d|�p�F2�
}�#id�:T&#So�a�K�R�> ^��i��p��8�;5|m�"9����:�.{���n��A+��=ɚv��lM�@X>��=��K�b���� [...]
���p�;�>�������hэ
+endstream
+endobj
+1421 0 obj <<
+/Type /Page
+/Contents 1422 0 R
+/Resources 1420 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1401 0 R 1402 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R 1416 0 R 1417 0 R ]
+>> endobj
+1401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.701 676.287 139.423 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+1402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.752 676.287 155.474 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+1410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.561 623.485 332.284 634.333]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.5) >>
+>> endobj
+1411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.412 623.485 372.134 634.333]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.6) >>
+>> endobj
+1412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.974 560.659 376.446 571.507]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+1413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [287.645 497.833 310.117 508.682]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+1414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.187 423.052 417.658 433.901]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+1415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.555 372.182 245.775 383.03]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.1) >>
+>> endobj
+1416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.822 320.758 196.293 332.713]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.35 72.184 240.821 83.032]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+1423 0 obj <<
+/D [1421 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1424 0 obj <<
+/D [1421 0 R /XYZ 86.4 619.439 null]
+>> endobj
+1425 0 obj <<
+/D [1421 0 R /XYZ 86.4 556.613 null]
+>> endobj
+1426 0 obj <<
+/D [1421 0 R /XYZ 86.4 493.787 null]
+>> endobj
+1427 0 obj <<
+/D [1421 0 R /XYZ 86.4 419.006 null]
+>> endobj
+1428 0 obj <<
+/D [1421 0 R /XYZ 86.4 368.135 null]
+>> endobj
+1429 0 obj <<
+/D [1421 0 R /XYZ 86.4 120.945 null]
+>> endobj
+1430 0 obj <<
+/D [1421 0 R /XYZ 86.4 68.138 null]
+>> endobj
+1420 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F55 1099 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1439 0 obj <<
+/Length 3579      
+/Filter /FlateDecode
+>>
+stream
+xڭ\m��6�>�Ÿr��A�@RwU��m^*o����*��ff���x6s���Ւ
6����B=��~�[��p�8
g_�|qw��;�gI�h�gw�Xr�$Ђ��V���2��[�������B�y���bK7��S?eԱ����7i��ۻ�x,��△�ɹ`�?���͟7
�	g̡� �z�����G8[��oga �x�ь�̤H�����n��j��bX(��NX�"M��qW��6]�_ �k�-a�%\�8����	�0����͓_�Z������f��4�5�Q��຀��d���<]����:��n�x^Կ�LnW����AI��lCn�{3�NP��^�P��|�/lN�%� �:�EIg�L�@�,H����kF�f��2j����t�z��l,n�T��YF�g��m at H����2�%�����?ud"�.
�Gd����12)t�&��D�:�5B�Fb�@
�臢$���y�4ctK���E>E
�v��Ij�*hOz�E$��@F	�YZÎxɢ�) [...]
+Hii���� 
`��, u������2�P� �̤�B�O�jG�c�c���(Z��8t�/�Թ���ʬwn�3�8[���21
mo9TJ�H��CEC�㐏�2�2�g�ZR�y�nl+m,����Q1�V7��3�~�y	O�e"�&I)�8'Ml
i��1_�-�
���(8�vR
����)�
+��MuL"�8�>�txR���13�Z�	�<�E���?Z�2P�i�c	��.)��6��
��WYm뎝����)�T����31���!տ�W
ZFw�����.Q�����k��5U=�%$^!{-â$`a4�4q�i(�3t�5�+l��)�
jo�)q���f�k�	��6UA4-��	D���.	<�
+�@�
k�B�<)��RlvP����5�UF�p���~07)tWnYaa��!a��I�+��z� �M֟��
�",�5�Oޣ�/���KU�]�+� %�v MwP��ʜ� L�˽Y(9��{GtSĚ�nzPdēsq�WA���l�|���bxHxh�Mf-�֡.�V��x�M~8��G�X2;�dL�� ~)%�TJ[����V�t ��C.'AV1�>�����+��Ϗ��R�X��6���H4�"��[��>QP���
���>9S
��	�Ri���Q.g�����(���J��F�T L!��;� ���fȱ
˟S�0�{�/!�@�
��HS�d|(+ۑ]�(���.�K�oݖl��O߼���?���y��
lswH��d&!)�GHJ�qd�~;d��~�ml��山������8�
t���
+ 3�@
+r��v���3��O�M%��L1��<�T�Ђ𞥥�]S�^�a�v�B������ҭ�

<��}fm��h�.�O(��r��RV��

[�)��2�!�
�x�'b��?>�T��
��y�v���X�L��FU���y�S�^;N�|��<��(^�4~�m���l�3̓l�qA�+�����6]쫜��Df��.��~j���b�F׸��h�RI`��Bro������ЕfhI�G�����0(��a_���

H����sw�-_d|��P`��0{D�����)�~��B
+�M@�?�J�T��Ӝ���a�)���n���Ƒ��̖�r�;Ċ"(tT[�+S
T�h&�wx�����)��NB(��I�
�Փa�Gt��{����1��t�*��!]f���v�J͡�6Ҹ�
lcu���
�p��I���

��� /	�6�3
W���6Χ5�s�?�x��WXƈ�ІHaL��o�X����:?u�^[���:F�L�(���!�hv<���
+A�B��I��sD�h��`���S��������1��V�� 񡠵��`?l�o��ʨ=���Ipb-$�.��լ�6F�VP���fӷ�W��
��O�v�=��!��I�w�S.1G
�5iڨuH����k��sa䀥=�-���|]��f�5
��h'0&�p-.}8/�'\�ǥ�]��2��lk����u%����#�#t��n��.����Sp�Tae��.v~s��1dq{��V
NY���?��Þ�����4� ZG'x�ۮ��e b,g�!N�=�`3���:� #(���2�a����JQB�w��/�
2�=�"�!�l���Dt>i���E
)�j��M��ۊjծ��]g2�
+J�H���b��۹��t(�è��;�q
@�Ӭ�o�8��`����|g5
����^���򛦮;�t��'���[o	�>+�a:��
�br
+\�!q���ɰ��f�.�`U��m
���v
�X�C�	���~��n��O��4��I�hF�#���S����Y�l�Z`��
��6<B~2�uW�y�հί�|)t�*��q��V�vt�TΘ8RP�uD
#ա�^�w���e�J�
����갸-�/Uwx����9m��)Ц����#�i��cT�d�7<�"�
��L�)�+#�D��`ek�c
҆�oO��#>M 6���F?�ۇ�	0� GR�����b�
��,]�����{Z��R�%�!��$��_�)��_`�v�QW�v2���è�!O5�؞Qr;FM��5�I��*ǨQsXFM�tǨ��;F��1*�����`�A�
�w�;�VW�wq���G��;�5�ԎZb{fM �5i�5BQ�Xc�pĚ`�X
��!������~,�OmNx5�����dU��V�"v�j�ОTR{V�������^O�T#�p��nG��e{N]/���� ��T����#�i�}�a��a�u��Tj��Q�b�.M �'ӀܞL`z6
aZ6�P��Ә9
�&X�#���=�F��%C��$�� N����.+��M�ë�;yՄ���Ő
��@lϫ�=�&��´��*ϫ1s8^M�tǫ��{^���k�-�$� �;��v����S��vr�	�ǩ	 9~>��aL��)0
0='��

´
�2������`J���AL��)0-� =�/�<�8���4
Ǐ����~g����;yހ��������S@:��Cz�O �I> i9>��x?���������S at Z��#z�_�xB�$
+�D�Yk��}�|<O�P;���a�x@��!DK�	
�
��#zV!�' t�
 t�
��9=�hI=��� ���'���1	�c��E�ѵI����밻�݄������C���S Zb :^O��=�H���{ ��zDG�!D��)�����6ؕH�W�QGl��
��!ҳ�,R�/���ϳ�
q�7�*�N���G
��Z"t�
�'j�"oćEH�6�` %9�I�7�?(���p
+D�ͧ�C�P.'A(<�B:�x+&
"B�a�/�
���:�ݯ��E������9��?��?�
+endstream
+endobj
+1438 0 obj <<
+/Type /Page
+/Contents 1439 0 R
+/Resources 1437 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1418 0 R 1419 0 R 1431 0 R 1432 0 R 1433 0 R 1434 0 R ]
+>> endobj
+1418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.926 676.287 272.397 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+1419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.399 676.287 346.619 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.5) >>
+>> endobj
+1431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [278.248 609.207 300.719 621.162]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+1432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.061 567.144 369.533 577.992]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+1433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.801 342.55 168.523 354.505]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.1) >>
+>> endobj
+1434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 307.238 92.377 318.086]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.9) >>
+>> endobj
+1440 0 obj <<
+/D [1438 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1441 0 obj <<
+/D [1438 0 R /XYZ 86.4 668.54 null]
+>> endobj
+1442 0 obj <<
+/D [1438 0 R /XYZ 86.4 601.46 null]
+>> endobj
+1443 0 obj <<
+/D [1438 0 R /XYZ 86.4 559.397 null]
+>> endobj
+1444 0 obj <<
+/D [1438 0 R /XYZ 86.4 487.612 null]
+>> endobj
+1445 0 obj <<
+/D [1438 0 R /XYZ 86.4 445.273 null]
+>> endobj
+940 0 obj <<
+/D [1438 0 R /XYZ 138.11 274.639 null]
+>> endobj
+1437 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R /F16 717 0 R /F55 1099 0 R /F41 1446 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1451 0 obj <<
+/Length 3470      
+/Filter /FlateDecode
+>>
+stream
+xڭZKw�6��WhIω�A�Y�N�IO�tj'��t�H��)%�$����.��(Y��"	�qq�߽@0���.���x�^D��O"
��3�r��-f�y�_^�(�c�S�o�/�����%�>_
+�}|��V7	oYV����/��,vM^n.������ş
�3�V	}%��|}����l�??�_$j�`��gR$>�[1����E0�Z͘�xKv�0���-���1
�쬺��E�~)2P��r��k�jM����ǀ`vŹEv��U^Ӷj�e�F
���W�pGy��Ԭ2�����X�G2��f���Kν�����r=;:��iC�M����5~�%�
!�q��ۦ�Z��m�)�,����,��y���Hov���OX��'�e��4����Z
+#�\ҳYAM
�����Ue��*[`lȘ��R��p�c/��W�ad�V
�
�=䘓,{\�!��-��2�F�V�[�����!��/y�g(��a�ch�'�v_�J�׍�<~�M�!��>͉�
��D&*�JL
i�|��5��r���:t��g���kb��	������۴J�t����iO�zƞU���|�����h���c��;Pk�w�
q�봀�%�8I��k��ZK<a��X�Ct�
y�n�T\+PZg��ʖF����}]�c_���!�A�T�,F��*�&���l��GY-2����0FU��0�ڧ
G�/B�ܗABk~�����ɡ�U�-@���s͍�ٍ�9Ť̻2J�磶Mv�6y�����R[c��ܺ
�Yg�E=A
5�ɘ��ގ#	`/�O�

+��)j'��
+
��������{���'~n+2*c"�f[k2G(��~/�咁��ɴn �jR5c�\�ցb�E�LwEm�����2�)����+�v�u���non�8\k�q�J
�hJ�I#P(PZS[�8��qV�*�Tz�V�����N at AK3d�nFxȬ�*��!�jd�	�:�&
L�P��Yܭ��K2���ݨ���W�%~
�q"�yw�0��`>��M���R����N�,2������A(�B:P V�D�=���D(�Ԭ����O$���
����~�(�@��D���,��b��I�~�:����إs�����՜C-��Q��\<�[�l2c,f�=]%e�	�qv���2j���r�-�Ƙ6�H�ќ7�m	٦�)�~�\ �Tk��l]V�4�-c�f���<����6w
+�VR0h�~0_�e�mm�U������~�$�<��
}�c8�
T���I2� ��RǦ@o�@�4���g�`]*�T0��Z��g��ڰk�x�Ϸ,>b��@��
$j���X�!�3m���Ѷ#���Nɰቭ�`J���(>F����g3�u �DBc��[��G�����+���&����hK���N.u���ZYl���)�6���"�G$��~8epAІӑr
��*[��7���st�i�t�� K��l
�
[@�f,�]��z��@3� �s��ޒ��ڐ
-����Wa��42N��� ��$
��+�M�z+�7��n�9
���JB�G���9�|�V�	��>�7�>3͑8��a�k�)f�6�/�[Z�;E����ik�:FQ	A�q����>(z闥]�M
+Kj�䥬
�B�M��\�������	.��
�
d	̰o�
+�Z������,%y�6[Ky���Ϸ�"�	4�5���2@��@v��O:���3P��0��߿}�����|-8���K�*HxRH�3^���i
�#
O�)
G��]i��CN)&Ҟͥ����2pB�wf���$��K����ҟ;˱��9"[��c��a1٢��
��1 g4U�r���wo�
L
0r�ߨ�,����� 
+B��$ KO���ts}���͛�&"�=ƞ��0��X)"]�ƅk_���]�|n�-�^��zˀ\î�g}�1{51
@O�i�M�ڌ�H�5]T�;L WȠ�1��>N��F�/��Ad��T�ӤC��c��`
+G�IS�>咁�(R����}q���A��h�$H�9�"��Rdk��S&�l�(#8Ryԃp��i��,vph���ɑcZ��c/j@�R�#� �)>���UƆԯ
:������'�@�J�C���)����47B�axt�ʫwsx�z�+^M�u�!`'�u�[��V�")=(��
G0[QiA?	>+o�=�^]�=�ك�*:�wA���z�/.Y���am�Ѩ�����Śt���PDl��]�k�/(���)j�
2Rzu �m�ZR��T���r
+B�ؖ�7�~��)�}�� b��h~
+�pK	q3��
��S�}6y3�Y�����c)�3v�����#��,����^�_��*��B@�f]�_���
v �U��}6�}y
�,*0 �&�RU�SU�y�������ߺ<�W�iw�H_���A��J��k ��\��G�jX�

�})��ٝu�sh[��	㬔�#��Ytei��Qj�O>RK�3/]�D
 ���"�(�qɑv�s����M%]y�H����@���m(�
��
�l��&�	@��S+�@�+ؘy�̪L2�P���@�N�X�C""�ii�����5L�GD�
�����~��IG�9t�,8 =Jv|���ж`��M�;��+�c���a���*�_͸ZK�]ks���c}n"Z&�����>��œ��ѻ���Ƿ�|z��U����UZ�� ����&
�x���j\�p�E��ݒ��*֞rƁ�c/ʭxt���Ң7D-�&5Ÿ*��A�hI�
�/ۃW��]a��"kҼ�-��<�Dv�d��+&�N<���’����48x��y�N88b%'�a^�nBظ6�_�z9��
x
Q�M=�v��t���*��ge��bC���6� |d�Vj�c�
+-j��͛�:=F�K&�'��%?:�"~c^{�Ȯ��+���B
P��G�}����K���S)��g'z���\��ݿ�76
�[�`�؋�\$��G�)5:㛬��
+XV�0/;̈���f*�.�~��~w{{����'�-��g{���#)A��Тs�:�G�p�ȕ�`�s�X�#�A���<��?��y
+Z+���,�*f�
uՆƒ�aB���Y��'�k��oq W��� W��3����M��K�=-��YU��~E)=�U�5/wv�ܦPg����I�c�\">7pfH�B
��Q]
ϡk�;A�ΰ�ӵ����|8]���T�̈́�:������ �eD����V�,��.[
K��˞!�����
+�$q��%N��
KZ�
�������"�8Pao!
+/u���k��qk'�����|��G��Z�}��i�
�5��䦴E����(V��.DBkȠ�o�x�'�wU�-&K��G�oLv5޴�KZ�]�u�9���N���+>���Ҹ!������]����,?�LJ�П�A�c
�
+endstream
+endobj
+1450 0 obj <<
+/Type /Page
+/Contents 1451 0 R
+/Resources 1449 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1435 0 R 1436 0 R 1447 0 R 1448 0 R ]
+>> endobj
+1435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.231 653.621 363.703 664.469]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+1436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.706 629.711 182.429 640.559]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.177 592.838 435.397 604.793]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.1) >>
+>> endobj
+1448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [266.892 200.17 289.363 212.125]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+1452 0 obj <<
+/D [1450 0 R /XYZ 86.4 726.045 null]
+>> endobj
+138 0 obj <<
+/D [1450 0 R /XYZ 86.4 701.138 null]
+>> endobj
+142 0 obj <<
+/D [1450 0 R /XYZ 86.4 577.938 null]
+>> endobj
+1453 0 obj <<
+/D [1450 0 R /XYZ 86.4 506.987 null]
+>> endobj
+1454 0 obj <<
+/D [1450 0 R /XYZ 86.4 314.556 null]
+>> endobj
+1449 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F48 966 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1459 0 obj <<
+/Length 2243      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs����W�Sa��nؕ�-�Sv͌S#�>@$(�B
+ J����^ b#E�{�<'�����-�{ �
���닯~`2�P$�
�ׁ���FH2\���!Gb6g��ʤ�/��v6'a|�M���.[Vi���9�$�!c�߮�xs}�
lp at j�i.������p��'?�HOv�}�Y�(\m��ſ.��Oc�=FG0�B
"��5"Z
#�)�Rz�T@�e�) !#����X�7�*��H��	���Y�ԗZ�H�3������Ӗ����+`���^��SZĨ�']u��e���━2,�|Dt��"l/���	���|��{�MO��{s�5R��hx���I�,�㼝w��sB$	�7��T+p�	����=������&nk{'�K��k�S:Я��:y���-<��f.�*Y�۷3X�-2�ݭ�"yL�]�n�(����)��]�/�
e
+	�뭨k�9g�A�u��mq��O2#dU,�v�e��qk���ôtO�z˃�>Oݦ��s��l�2�v�D!���3JCP�
��R2�w��7,nk���v쌟�k/�='^2��"NiM�1O���_G�����V��}K3H��N�]�9q
gB��쒾�n���c�R��Hl������'6�?�̟IѕJZ��#�M��o�� J"P�#�YSq�"C�V�73F«��,��p�ۤ��e�%��'��WL8��Q�>ٗ���8���R	��*3� ���J�]n��-� 
�S�ݹ[��X�nk>���lܕ�[݂[���1�hb���ۥw�e�~�I����>F�Zq��zb�Wi�,��Q�h�,���a5F�'�&I�6>R��]i%��4s��ڳ@k�����nף%���,����t<眅��ʳ�6qU_�('>Q�{-����G��t�<�xm���M��	���Ǖ-�m�1K��T�V�����F@���hI���� �CXODVHc�Rm�hy��hb���"� �q [...]
��`L
+N|-(!㢮[H
.Q������m�ow.C�V��W?J�9g��,܀�
+a��$��
 �"ə%EY�G��֥6�#'�^�O��1���
�T
+�d���T-$�!<�
G�x��'c�
Y�
+о�qωطq.@��  �sL �z~k
+ 
�3r%��K�>��>�T
RIQ�
6�at\�H"��Wܗ
��>cŻ	�e��z���8����)����NE�N!tTo7
+�����
+f�i��4A/Ĕ[24�SZ��=>�E�y%)6�I}ԝ�Ir��
+|&X�:��I��U	V
H-)
��\|��|�X����'BGx)��V��,֎�g��%�R�w��J�E�ws�Q�*��Ģ�#�G��޼��QE��	@�������o�
!T6�X�
Ǧ �p~R���D�bq��~�2��L���4�,��E
+}Do���Rfn@��������4f���6��	�z�|�YO��
+�Ugx���$�����~5�h����$h�;
�}�����1O�2)� [���\�5�/�l�.@�Zσӕ�����-�p�D��[�
/����
���P��?��
�$0�SI���~�>9�\u�a
���î�
��[�
N*�k��C��	���
Ph���dr@�V1�����9erp�=+& '�
P%��l����Y��_i:�䠣ʔ�u���>|t�i}��a"���'�a���uwr�g4�_��$�D�cH���ly%&����zh��]�w
6P
+ ��J%�L|�6|���g�6��״����gȨ�;	$d��|~��A�c5�����:'G����/(�i�ۣ��Ź�Z��?a��É�(���\��z��2 �� D�?L �
)Y�!����|nb:;2�LɐD�0����[:L��@���	=2!@]�I|
H1-_��L���@:,��C�S����d�eHQr�
d
+�u.i�<k��W�>�;5
��G�<<kF ͋�[��o����ī��yĽK�G����22ߣ
P�E��>�?�
��Ƥ�`��8�&�p��F4�6�S��u�?�%)���c�y��1�jvX�[{��7�ݱ��y�%ɪ���
�{t4�j�R+�S�����n]c�$��|�gp�3���
F�}A�_�Z��U
ҩ<�=
|
	�6D�-5��� sM�u
+endstream
+endobj
+1458 0 obj <<
+/Type /Page
+/Contents 1459 0 R
+/Resources 1457 0 R
+/MediaBox [0 0 612 792]
+/Parent 1464 0 R
+>> endobj
+1460 0 obj <<
+/D [1458 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1461 0 obj <<
+/D [1458 0 R /XYZ 86.4 701.138 null]
+>> endobj
+146 0 obj <<
+/D [1458 0 R /XYZ 86.4 599.977 null]
+>> endobj
+1462 0 obj <<
+/D [1458 0 R /XYZ 86.4 520.988 null]
+>> endobj
+1463 0 obj <<
+/D [1458 0 R /XYZ 86.4 303.612 null]
+>> endobj
+1457 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F38 773 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1468 0 obj <<
+/Length 4767      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[��6�~��PM�Բ�,.��[���8S�J6;n�y�䁖�+�!)w:�~�
�El�=�@�qp�wnP���D��������M�n�0Ou�y�dih6V�a�����c���N#k������ƙ	^ߨ��M����������v\x�����m[���mn~z��o޿�兂U��r�$af������O�f-��Da�g��wژ85������d��y�(4��6O��i�癍O�|�fY�2{m��(Me
+"�ɦ��C
S��
+�M�t�?����o��.��ٕ�%%T��,W��TH3�Y�|*DS
Ȗ,��$4Z�9�����1���*�u-��P�%�N�����%��3T^�#��P�1��ju�8q�����F�(
M��G9������pn`#�'�N��HslUƱ\���~�U������ǭR�
+�K ����ZlN�(�M�h��)��:Թ�߃TfA���)�i�~�<8�e�����uU�+&
S����.��kƑq}�c1�}9��p���lc�Yf��
+�$���n��P��v�P}�o$�����;�
���;�� TPjF8
���N~�.�&
s
����9,�\V�.��I���P�
U����v��������w�\h��
�!x8V;�t䖢+�. O�L,`a`,;'־�Kmh�8>�4�X6��_›�1&@�C���D��!:�
��*�WnEp��-/���;��f� ��Y���\+k�$J�s
Fq�G�ZY� BeaS9��"� l��<�H�ċ0����j�8񟗼É��t�/�e���xe�W6��*�:U�6�e�z7�"@� �mhS p�{�[Z���g^�+�s�d�����B8�+����@b�$�^��؂
���L�L2��'n)�@�%����a�f�bD��
�z��ի���_N
2�W
Ri꩸�
+N����/�o�����ð�&��x����
+o!���
�Lƙ
�ԍ��	���e at Oz=`B ��H
�K�,P�
���M�E}.��2�"Q�Ы{jĒh��Q�ͬ�5u��L�ۃ�č� 	J�um��!��f�VДR�
�P��D7�	���5�m�~Gi9�5/l�l���*R*�Ce��y�ak F`�Ăɠ�Ԧ��4�iqnx�����s�_�p�D��:
���C�-�^.D�����s}
�t6�5Rϡ(�F�?_����e��wo�[S�Y���Ƣ�e�M4[����+�JN���/SCc��������2  K�u(�x��Ѵ�����~C��ñk�`��G�?�]��j�2v'��f��ab󹝵ʇ�d�����h;W�Wy
. ��k�Le����jq}�%m
+���K~���o�}�� �Rs�E�x��5O�G8����Ӭ�
��/x,DM�Mлl�٨܇<�,^��i�Q9�_���l ��
+���jWr����X�v�G����=�k� �v����@�t��<8�x	��`~��#V5XY��w�}W!+S�+���+n6�
�

B%�\x at G���t��1
+T�W]Y��+�`By�)�����`��������9F�kl�H]#
�{���`5lI
�1_�;g���6�U✝7\�
��C��!�F��d5zKD��`) �
Vt\	�M
d��]Dž�
��
gʣ��41/�Il!���k�5A�����~j����HX����jsp_�/��_��m��P���G�.M�R�8�F��N��`y3�\��5�4�"	N�SPE�*������t�X��&��CZ�
�����
+ԟ�46U��7�	d�^z�~�BW����2˙­+�����R��k\�;tH�D
�V	��`�%�#����r�M���L#�a �M

����=cj�0N���R�u����B��aG�B�Hy��������h��G�rkb{�$���� JQN�EW|�e��Ύa�sㆀ���[�
+cn!LI�7��h
+:��U#`UtţN�W� N'��
k�����e��7���}�sc.�I
8��� l1�/_K�|a<�}���t��\��c�.<
�0e����;����w���m�T�c�����|`
%�"�鄟C{d�4�Z��8����b�W at E�2#T=q�/)�����?^,�Q1�
+��tB	Z�Ws|
U��Py����e`2�gEX&
[�����F� _5�a }	hGo�`s�kq��K
���Q
V[����c�Ӫ��F�8�Pt�l�N�}{�sX4��߈!��[�#;�t�a��ߡr���i+

2�oe�����Y(=�0����-h�5Bc��9sbź��dn^�@_4a����z��iy�lPH�
+� �U����v�#���~�Y�oq�h��f�htҟ��J�'�+V�l�s
��'s
Ҵ��M
�EF��$�5b���
��+`���XRu�U���(X`r�����&�N�)x�
�&��}��l��Sc.w�
�$�KR7�5r�=�x����
��@,J�=������u
��c!|�[[��n<l
+Ĵ'��55'_���ѯ�U�m���0}Υ�j�Q2�
|�3
�'�m)
<1�V6��0�̜������S�
k9�|
0H������j�4�JE��~5ά�P�_b��k�>3�3���B�<�,�榚�=�R�~w�{V��@�~ɔ���S �$�[�
�NƇ
���<7Z�����Ox�����,
��W�qjF�	݁Ho�W�ǀ��`Lbv����A�"h�
X�QtMy0(�Ll,KF�#p��,Y���:�Y�ek.d
+H�H at BRJiu8�H ��>�������Ŀ+��Y��t&�� fE/�����R����{7��#��\w>��-����F���y��t�.��+w_����v�WO����,��tD�tr��
( ���P�� ��t�})I�f_�X��d��)R
+,q���G��e�Z�-3fy8�n���tT��\wW������MXaQҤ��
r����)�A*��8�S�6��j�_��%{
1�y
�tC��\��:��}哮�Ŗ56�'��Eo��䶠�L�,
���e~�����	�G�|�ʌ�Hqf>�҉A���N��/"́I�.
�ń���W����� �����Pޓ2t~"�Q��u%��n?��'w>��q&6С�"s� ;� ��u�b�KL��F%�;�J]j���.���R0o^q�
��00�u�Z&祧+��7���r����N�	d'S?��+,��Pp&w�\)�8t�i�{]��b0�T�U����ܬ�ʡ{��1@
u�r%ٗ��Iܞ��3i�&�0V���ܝ�b�����/��j�{���.��pV��,!1��*��p
�%=�ٺ~3"a��fO�Ϳ0��>+��`����b6S��(��=>J��"�QL8�� 
vax�L�G*rQZ��_� T��-;�1�E4�Ȧ��  [...]
+����+�ι�oP/�jf��h�Ld�
���$��s-)��㊕�M�D�[	4Df�
"X��q��s���`�LJ*�`X��_9�d�R�J��d����^�SK��:�^�o���h�T���t6�8֥�v�s�-<��0l�2����Gii���.�P�6��˕�q&�{�֕��A��-�P�����k�s������ulF�x��x�TΌ^A���w�m�0�|���ϺHN=�DV��2x���m���&��	�4'�yE�M^P�d��bW(U�a�j.2$F�&���<ܣ���}ݒ'�I�w���
#�u�
s3�fgs`a�`���J&�d�5��Vi�w���	+VI�ͯ5c�'���ٽD�^b�BbL�H���e��wc�l�^b�\M�i�
H��VywTK?u�*�F뢑K����)R
+��*ඣ�	|�R
SC��~Ց���~�
>+�6��Z%�9!6��H���{��P�%7����S���'J�X�OsZ�u���٥�jnC����:~�o����`L�Ԣ7��y�� �	ێ5��M��Փ��!��4�ɪ�
0M&��\}!�Ve���p|�;�j�	���g!�$%��9J��ǿa �؜�s�
+�u���v�T�y/�����'
�)��g��̻
l�� �h/�l�āF� ��I^�C0/ťBF
�nZ��(����2�~
y4�`q���(ח�(qm�i��1ŋ����Ω���
��j_J+�����G.���|:\�����e<�mJ���ɚ�h�d���53�Y�i�E
�A�a�:�x̕D�Ve�^"�xi5����69DI��Q�jK-�����*�;���3��$���Y�s8 (�{_OF0q�'���
ZUW�:3��}{-�A�A�u����s�Fԓ�2zU8O���6Aw����,X"1�'����y>yiN���ex�f��,�
>Ͻ��\~��
-�/��5u������N*\Q
N;)+~�,����7�_�?i
�
+endstream
+endobj
+1467 0 obj <<
+/Type /Page
+/Contents 1468 0 R
+/Resources 1466 0 R
+/MediaBox [0 0 612 792]
+/Parent 1464 0 R
+/Annots [ 1455 0 R 1456 0 R 1465 0 R ]
+>> endobj
+1455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.99 631.689 232.712 643.644]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+1456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [474.059 601.207 496.53 613.162]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.3) >>
+>> endobj
+1465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [88.171 359.212 100.126 367.625]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ex) >>
+>> endobj
+1469 0 obj <<
+/D [1467 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1470 0 obj <<
+/D [1467 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1466 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R /F14 1030 0 R /F13 1121 0 R /F7 1115 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1479 0 obj <<
+/Length 4337      
+/Filter /FlateDecode
+>>
+stream
+xڭ[I��6����m�%�X����.�k�;ܮ����&e2�e��e~���&(������xx�ކ�7�x���ۻ�����E����~���l2U�T���n��Ȉ�v�s
���n[�Ms��Qy�Xnޟ��P���v����Nn�}���_�n���0M���l"r�n���?�
ov���&��7�h�act!���������e��U��2Ky��b��qW`YI}�MҨlΖ��c{nvX6�=�4�\Gu
����`]��r���Εڎ{J����µk�z�?�Ndi����t�|L<1{@
+LRv_�K�j�ch�W���v�
+P �c�R�"q

q���}:8��͜gF
8 ����
��$����R
msK�l�=1��:�;��sS���U{�u�q�DR�f�i'7�e��6�q�"Z���k�4
mKj��lFL
+��V)�qQ �P��&3�e�����p���:���
��q{��z@b�J�,znl�����.T�qO�+Id�����|�4˹����d��٪Ł|�ݖ�,�(�q������ɨ�n%K�I��p�ܻ�%T,wԮ�%���tjj�H������-\/ ��}�s��с��ݚ,����>њ������_���-���c��D�	I�.�T��6�6���YԷ�%��Ή�s�=�rǭU��
+���
��M�c�K�1Y�UuoݨzϿ�#l�
��	�Y��ms
,O2����c�K���[t���

��Y\N�4�@%!<t��v��c�`�~n�
�ox���Cu��Q

�"U�Tm�����"��d��:H8V���T%
�L
+����rQ������k,Lt��Ǻ=��h��ϧ�����E�7�i ��k ���
+����:B�(��A�Y�m���#����|��{��.yt�aE�=8���؁��dM�@��I�=�����,�!8^�sU�I���[r��vgl�9@��#�]}:5����s�Y�(�6.�oꤺ�����pKe��O���8F�i�;{ٿX��E
���&@)�4��x�8|��T(�
3Q�М/���' #OP�K	f�֫��P�v��0\M��:}ziq��U�x��Mj���+H���C�9���Wѹ�
�g'39�!p�g)�0���M�Z^�D^�d��N% ���z�>0)��Mף�$�t2)��{G�Υ�C'�;(� 3*G�t=5�n��hP;J��`
�}�
���"���z�&B��t�H�|�
��������g�W�*������<�
dN����%�
�����&d��"M�3���-@,_�Y�
�f��D����uP��,��-�
/kX�d!LR<

��FF�Lt��jP�T�e at Q���6�'�>rMxnh(�MᏮw��x�U:�\
d�4 R�x��ՠ��QxdTyO ,=4����ə
�O2f�l��J=���#XPUsF�5�yŝ�(lw,
PN�=8♂C�@%�w����k��_M�RL| ��'X�wt at F��B�%�KІ~�A#�<�N���Dd�b���L���&o,�MOc
+�d��W��x`���ٽ-�������؎�k�]�t�~�Bx��p`P��G,��F�
��O˜,�Tf�㧔Q�I>�g�
|�|J��{Ne׻�����!�f���E�>�}&~�PF5�ԇ�HG�:E��VB�3�0��c�(�G]�>)����h����3���DA�	TUq�T<	���}U��UD��Y��x�0�{`�9����=�^�U�a����J��j)`O�h�$_���{ײ��Ǜ��,������a�a���Ls�i�:�j����jۣ|d� hx�r�������_�Q�����MF6@g�,��i*���	�$\
!�X�`��\�&����X6��������i�5� �n)	$��Ⱥa����!h�J�BʼX��'{�S�aA
�Q��ٌ�m�
6Vb׎<2�(�
��
$����2|�սFi-GŲ0��㠉�B�XlwBn�[�� r�	���Y
b�҉X�{��/�m��B^�!_
���E
D&��0
���Ls���
��o����
 ��7I
ݓ )��Q��̡COT��ehHT�@f~(�P/N/hx�0H
?ip镃�E&�� [...]
R!���\|�m�}���P޻��l�H@��Ua ���������ns� ��g��&W at +DG3Gǘ��
L�U��J�f2��5�u�
+�����!�D�&y��	�w���~����4�
Ȗ��� �����j������A
�)
�p����P��
��J6lv$L&^�+/G�{,L&��`#n"�=�����|/���a
�Gvc,p5�j���	
��	�ܱwuc3����a�I!hg�?�
P�$w��r��d��e 8v�"��?
��ܴ=Y3vE�^D�*53��������%�̜Л�}���� �
+*��B
*OW��UX�,#
3�}�|�4�z6��$j2�g��=�H���f
�XD�uF�:����/
�x�Gg�y˽�eSV���C籠绺�
+s�͍�`��:�
��/yH�c4k+�
L�dȡ��
+�@�T��Kr\J�Wͨ.g�@_��l
����D�`]�DʹT+��6z*S�dw�ܦ1�����ψ�o\��̉n�

���頕E�np ۊ�!U�	�(L6g��?�v"�����L
+6]�2Ǽ��

�8G~
+��
L0'�
}������vX6Kxǡ�7��12� A���	L7Rc�MT��U�4)d��,b�{̂���)G����
��}�Z�zz�0��V���Ө�����
��@aa�'0��#����
� 6� dlJٰ3�\��ܔ�E���ݚ�
��4�	�?�<����~%������
'�0i�>t�;�!ʙ�"���v6M2?�W�0f��],_)�)�����±{X�,��U�Q�(�
��~�B
ݪɯz���$����4��G�zQab�Y���',/��Ņ�e��bZ�_��E�sAEO�������鷟�NZ&m^C+싒,�fg����R�r|<�R)b��	��j2gk�%�� _]D�:��$����#@�OV���@�(|擐���S��U���
F���*:�=Gõt�'5���8��`?�P^ŭSb�~i@y��=��
���9���@VK�&�ש�k� �)�j��cI�f1��1&�3OG�5��_
�,.�> Y�3�\�_d�w�:g T1ۏ�p(G_`��,�V/�\r�>�	H<�g���r%�=�
��&^ƶ3�z�B��'��zш�#i8	�T�/�!K
��(<�� �@�QeRg{����
*���
ǽ�<Iq��PW�x&��1j��J�ݔ.גD�e��b��S�
{n�GzE�M��H}-���������p�/�ӡ���x�r��}����xt�H��6z�	,�ޟ��|Z�n(�+:�?��K at lr���}i_�S����k�y(���D�F}��cL1{����N'��c����;�Ӥ)�?���4,q؋ bG|�
q�r�i���B����9'�6��؎����(|� @��
��4�ӟ?�
�:�X��AKi�1(�$w
�ǘ~��h�It�����?W�4p�օ�)䍵����F 䊈�^�d(��9=[�~�z�CX?x߰q����Q�X�A�%�
�s�9)l�o��p�C��@ߜ�f�~O�����<���=� �*�*����W�!Iѷ\.�pv(�u��ϔ�TN�+�c
����6{�Y�=����1�9���r�ub|��:i_k(P��ļ+�iT.����g��&���<��nJ����u�u<�.QϿ��S
+��x��lOW�$*_�Iby-OV�d
=�%1�:K�T�,�,�[F�m_u�ӝ�x���]̓���cyB��Zd���b�_<$�g9����.N6��ǂ >�/
xq�)
+1&�жd
+��!
�3/DS���G].[b��v����{�����?��-�i���;�w�d����8=6�7�Xn�D���:���.Ұ䁂[T�8g�?yvd-wp�x��"���ՃG��7�(}����R�i!��e�I�w$���y0]�T:�KN���F�02{6b�-�b��۶B��+�
Z��]�h at G_fz/T�3���+��H��V����(}�0`Z���X)��c���=�~��Q�mT6��1�Y����ޓX�����?
��&
+endstream
+endobj
+1478 0 obj <<
+/Type /Page
+/Contents 1479 0 R
+/Resources 1477 0 R
+/MediaBox [0 0 612 792]
+/Parent 1464 0 R
+/Annots [ 1472 0 R 1473 0 R 1474 0 R 1475 0 R 1476 0 R ]
+>> endobj
+1472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 578.961 519.955 590.916]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.661 314.863 217.132 325.712]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+1474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.26 314.863 256.983 325.712]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.724 278.117 241.447 290.072]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.288 122.598 234.262 133.447]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.9) >>
+>> endobj
+1480 0 obj <<
+/D [1478 0 R /XYZ 86.4 726.045 null]
+>> endobj
+150 0 obj <<
+/D [1478 0 R /XYZ 86.4 613.785 null]
+>> endobj
+1481 0 obj <<
+/D [1478 0 R /XYZ 86.4 107.917 null]
+>> endobj
+1477 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F11 1019 0 R /F38 773 0 R /F16 717 0 R /F14 1030 0 R /F7 1115 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1484 0 obj <<
+/Length 2894      
+/Filter /FlateDecode
+>>
+stream
+x��[Iw�F��W�6��}q�
�΋��dF�/v	IHH�H9ί��K� DEp��
��U]�W�%4���ٿϞ\�}������ bvq5S"f3It,(�]�f�"*�
"��ћ*˯�
�X�t���s���=?7�htU�n��۟�G��z�ˊ|���˳�g��a��f���c��l�9{�3���//g(�Z�>��63FuL`������
uw�:��Lư�Lh
c)ܾ/nR��ѾJ�Tf̢M����,��d�
6s"ờ{���z��w�
���,��`c��v,��m�J�C>�P�~�ƨ�c��SհjY
(RI�
�J�*�o���aH��ݤ�*-
?�f�4�{�:[P8
!�l�yLu�
���M�ω�vU0����Q �p
]�
�Ks�%0D
",e,`�Brˮ%�I7�^C�
I�-�G

�.��lظ-��|�	��9 g�Xu��^��fTTdNxN�,�=��]ӓ�vTjNHT�U�*�;
j.ʏn��ua)/
�_� &X��)s�4�S�k�

G1���ܺ0��H.�w�\0
�?$���\�'�UX��k,�p��>���7��Ko�sΣd�OÉ�
��9��f�U��Ye������!G��V�*������S�!
+��#�ɃV��%�y�V䞫�����sة�^xĭ���W�#�J	���^a)
�,��7O�>???U�.m̚I�ڎu�*G�A�V��.K����RVr��$^��~�L��j��Ò�)��%�%M�c[�HC�a^�?<�a���f�$D��qH���W�FN\$nC��`8��`� ���SpA���!>p�LN�7&=�֭�
�dTB4k
#M{
�1������! XY,2��
�{��:6Q�c��?������>���}DE�
JU�o�a��fLYW˘��b��b���=�v7�S��'���0j`[J2���6]� J�kA8����^6.ܯ�}H�W>��h�)BO���RL�<�D��$_<��t�ا
�b�	,����/p�
��0ü���:{�J�u�:�+�P•��.���
+��h�@8�0n�Ygy�G�I��������l]e6�N�)�F~�f
�̫�
�~
u�w�H_Z�:���WcZ��TD?1F�1$
���RG�1a3)t@�r�5��6[�+���c�������}�\Q
B^��
,
+�������Xh9��-�SPx6n9��r�L�`�JD{�C�
�
� �4�-'��_Ps
�w�G����2�T?��L�Tv)�
�b���`���|0�WCǫ!y'w��
�����H0��ݔ��)��ڤ�9 at k��
��(��b��4�V�8���M F���M�q�_��Jbà|�ա�U�M��>�=\OW 'y�}�a>����hʮnj�X��9��Z��'m��/�H�d��@��	<ڜ<
+i�?���7nC�M���H]�ck�YZ-�l�T;qc�}
�pt�ϗ�W��0����n�ې��1�*]��V��p�`�Q�<%�"tUa� �³q"v�AX&&�7��`_��L��3���S�ڞ�Җq
	������
[
+D�%�=���uO�I��W˵Հ��'��#�=
+���Ҳ'�2V�O��R��e�/��y��݉�N8S84��;�+a���W��t���j���GQ����>~��G<,����ړmT��҆��@8m�9]��`A�+6�C�z��<���А�v� ڵ9����h
�j�Un�r�2[�l�bV/�綾�}0�8��Mo�#�W�q�6Zun��Ԥ6
+���
y-Y
�`Y��_�8 `�+�A�0~_�r�u�ABQ3�Tp]�c�R�i��cȘ
+����p�\
G����pJbq�hLM�f>�IJ/���Q.��>��eD��>�)X6Gl"Pl�C��"�Z���a��*�~
���~�M��a]|H�;q2x@{(3s�>�!!�:�'M>��ax !�Ň#4�֛5�rpY�U�Y4(�³��f`�q
i
Lf�xϠ���f`}F�;��'1:�t��_e%���ҡrx�@w:���e�
خ� �
B�M�<�m���	��Y
+	��Fr�-��{� �C���X� fA��S�6��	����oZ
��hS$=+�7ʹ���#,�}8�U��d}�0��![���ݸ�֓��̠�yx�,��,�ݓE��y�v�\1����ۺ��~�6��u� Hߙ]���I��4.�~nA3
�
k�K 5a�t�o�护��{m���*Pw�

y�S#�y���L���?4���=�@�;nS��V�&Ef)Qw ~��a�G5�ȟ�w���=n���K$���bD�p3=Q{3
���{g&��	�����`�ڱ���m��h��D��$��!��))����3��Ҿu^�3��:�Q��Zg4�)�n����h��K�r��(ic����1i#�y
���ʽ�*��~We��B����Wb�U�UvKZI~�֩�[�9��� !ݏ�

`f氐�Y7LĄ���&ܬŲ�5��a&@
����
�u�3*�O��uV�%�7�9�H��
D�ݚ
��xҽ!e
q1���
�����Q�w�������`�h� f��6
}��#S+�r��#�b��gj;R��N��:R$V���u$�k��]G��f��q2��r00�u1'�:�2�:��>W��0Z���<_��VC�S��,)ڋ+8[P��{
�q7��^��Q�y������VW���u� �b��x��΅�_.�9����` �l��ml���l�I{��l�k
A���Ɛ
+X��>�pTZ_�Fqv4��u��RAu�="lHP���r�e`+%7�bG��!��]�ƨ!���
+��`�L��a��
+endstream
+endobj
+1483 0 obj <<
+/Type /Page
+/Contents 1484 0 R
+/Resources 1482 0 R
+/MediaBox [0 0 612 792]
+/Parent 1464 0 R
+>> endobj
+1485 0 obj <<
+/D [1483 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1486 0 obj <<
+/D [1483 0 R /XYZ 86.4 522.462 null]
+>> endobj
+1487 0 obj <<
+/D [1483 0 R /XYZ 86.4 363.078 null]
+>> endobj
+1482 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F11 1019 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1490 0 obj <<
+/Length 3010      
+/Filter /FlateDecode
+>>
+stream
+x��ZK������-dʜ�{��|�e�%Y�R��
"����(�
���O�� ċ פ��r 
z�{��u7��nB'�_|s}��$�\O�o'�&rbxH�`�����T5��@L?I>���r6g��f��۷�u\�ٺ��y�e0f�����7��^0X�NXEV�@�I����
�,�ɻ	%"
&�v�j"EH8�����^P��.
J�T|���aM�E@��D��F���ْ��S���ASR!1���aF;Y����hş��֋��RĈ߱x�|���i��qk#H(<x����ך�<��o���l���~�����*?d��/	nB���%a<
�D&����1��P��U���m������M�W��1�aw�
N�t�,mU�A#-�o�"��
*{��ɧ9c�M���$��Mgu��8#:`� �
+�ރee��[$�$.
\�L����gM� V^�n�
+
լe�N��m�Ȗ3n������ ]/�8*��]��S3����י�9�V����rKX
g<�~��B�|fl�)SY���Ē�M�;�
+�
�)��(]���<�ˣ��X�ηE��u��.�۵��g&̵؉
t��+��	A#5x�fwHY��0C[R�x�,����AIE�����ha��2�LH[
�	%aS|���*Y��ˢ���P'`.(�k�-q�������A��@
���2s�����6t-�Uj���J/����6��&Oq�)�u�r��҄�a^�	+o��P T��s.���Ռ�D�3���ӛ
	>\W�b���A�V�K���
�C��P�ͧ벿
	e|�MyO���A?%�6���0Sj-�IW��;K�Y�����8�g� �$�ŠEBd����Cd�5e�%I�5z\H��I�9��@d� �Yš5 �� wL%��
�{F�rtž$�=+��}
m����>�aԀ��f�l at WB�b�*�g6A�A����޶;
�2O�2O�2Yx�3���^X}Q��
+��Q�Uqf�V��+Ƒ���e]4�`��h�~�����Taw}7��ޒ
�5�r�;��#�q�W� ��A�J�#�9�”ُ��M��
�Zq
'�*��6u����#e^�l�sx_����|
W+
+Q��3k�}
RK�ۮi`�S5Ē �ak���#f-��A�5
��Ͱ#�@�
�\��p�	 �p9h�E�8��ְ�>d�-
+!���s�
:�?(����i
+R�X$ŨO}AvwC�}(G`X��H{�-�1�'������	a -��]	,f�X�KmZ f����l<d�����

+�;���H��$/�e�*
�i��D�S�U���:�Y��(�,3�����g��@�d�Q�
i����
xm*�P��>C�z X�����O(�`�F��s�0�����C|���!�` pZ� ��4��
+$��q�^}|����Ո�C(Q��\�ڻ	_��uZ��2�-��>��E^��6�����.ɸ@� Tb�Gj̑"�����U-R %}���7?��`&�
kr�
D{�ˏ�ߏ� x&D�;T�G8
P �3���� <�nq��@�[�ܐ/���gH�ܥz
<����U���x�U,8R�(`�s���{�����u��E+
k�y����˵��(0SG9
+@�NIw9�l.5�
��t��n`
��j���<66p�cZ޻	6��[�r3�?d!
+�V����l����vڷrs��B��.a�_/S%�X���[!)��#�����Z�Wo��W�<�����Pa�F�ȓ_�I�o�t�,z�1H��>��2���(eG�0�aؖ+�tX�Do�j��
�m�.x�6�v7�i� R��0 �Zw3#\k�d6��#�9!��p�Y�
��]�iɆ��dn���R,��"���CLX�5����]g7i��m�����Onl�ō
�hܰrŕ�{����dc_��[u�����mV�^� #�ô!l��F
����eت$r׎&›�ۚ,��M;1y��߃���̥�vY����f���,@��=h5o��0������Dk��Mr��	��ms��c�ձ�+V	
+��8�Qq��X�����9ؾ>T��!0(+�����Αa����U;�#3��p>^���	u�b�>Z��D��aMpF'E�l���~���\�ۏ�M�I��I�T�k^��ʌ��@5�r�ה���
h�"�=�,M̮�?|^n\'�Z�u�H��F�
+\�4z���v`��8@�a)X��i[����Ɏ�7�g��.�ɣ��p�����0G������Oz\g7TL�!$Z/)�1E8
ۘ�˖�� �(�!!CٟŴ�bZ��BN
t2��ǖh��݋�[`�7�d��{
+zW�e�� 2c��Z����3
V`�D�G�
+ ��|y�[��ֿ%�W
ojyZu�{]��(+��Q"�
lc�2��
���=x� ���n��L[�6�!1�

G�?�RM�~S�(��]*�A�s�2�5�
�a
0I�w�
,aӓ��v
{}�z �`iK�	 ���$\��
�OCR�
�K�_]�̮A�<��Y\?�6�,,y��t��wIu�
�֭s�i�U
�<����ƚ+΍��yR�#�C z; ���a�r�Z�1$y�d{���gp7
�������_����:��@�� 1eN9
`���!)�7���v��Su�y:x�NG�����V�cݧ��@-f;�e�c�\=�0���xj�ؓ���N\WG��0���ܽV�0�
ܳ_�.�0�Օ�Ў�Q�	�i5xkl<yJ=
sE6t|I�gy��o1u�I���>�������}�s`7��e��D�r��g�	�6�nhT�2<sI�҆�V[�t�CiLs��Zg�("Cv:
����dbc��C`u����)5�9�
(���=]!�\gX�jWk�3���
�]��-=X-�h�*����w��
�\�‘�|���9H��i��6��6�����܇{8l���f�7T�á�[�K 
+endstream
+endobj
+1489 0 obj <<
+/Type /Page
+/Contents 1490 0 R
+/Resources 1488 0 R
+/MediaBox [0 0 612 792]
+/Parent 1464 0 R
+>> endobj
+1491 0 obj <<
+/D [1489 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1492 0 obj <<
+/D [1489 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1493 0 obj <<
+/D [1489 0 R /XYZ 86.4 536.899 null]
+>> endobj
+1494 0 obj <<
+/D [1489 0 R /XYZ 86.4 302.088 null]
+>> endobj
+1488 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1497 0 obj <<
+/Length 3544      
+/Filter /FlateDecode
+>>
+stream
+x���r������-P���$��x�qƞE�4�Tl0$$�h�����y���Ip�ɔS)_�������~DF__|y{��%W#�Z����ndT*F��Tq:���~L��
3E�N�7Eu9�F$/.i��%�ɻ��n�O��_����o���ղ��˟o�������T2�-��F��ŏ?���|3")�f��훍�)�U9�����I{az�S�S8v�,M�V��?ܼ��Ɓj�J��r-���S�M�� X�S%x
��՛������)�A�|�굃�r����p��9|p����8Of��^<�Z$YY� l�L.�4ɖH��e��.�_Vy��wYQ��t^���`���H��ljx�);�8�� ����o�}�
�r��s fԤ�����%�dS(��ɲ�o��_|����R��
Jf�ZT��?ek	�����2�����:�L�B�y
��˼���8�J������^��d�T(�R0��\�]���Tr�n*�*��\X�4u�钙$�gAHR4�}U/�bR�栋��o�\,��%X�y���
+�Yfhs�������3�����S>Y��B
R2��4�2ܶ��LWe�^�5W�;�&8�MKP}�P�B�- �?|��/�~*�(n|��
����`�U5-���HSm;.|�J��U�8p('@
 "�T�XG��k��Kʼn�/UQX�/'AP�&_ )ZGK��d�1G1�V�� 
Ԓ�i0\�
�>�4�Rw����y5�bS�YKHVM��k�����`V¾sP��I�1���"ϦCj��N��E0`���
#�_i� \צ8:@Z;R��
+6�9v�����
4X���P����<_�~��v at W$z��{�|��
O~��hN%R�@��=.[�E� *�� �L&��?=�D$�|�����i.�:�Zۓ\*�RBmL�,_x|��l<��!�9�s�Rr����m��8B���ՏW)c&�_��dQ̻8��s)U��\�dr��&�̀�Y�
-��Ph�:���%���Cv[��ι7xr��-NIi����ྋ�g�gnQ�K�dnt�Ūq� ��B
[k����4�l���i� ڠ(��9�H!
+�k��$�2�m�+���K㏚eE{���/�Y������ ��&�j��c���0��,�+�
(���)�w�O�Z�`�rG1#Z��>
*����
@���DEk��a#hfi`b0����6��ǣl�[��r�3�xT��-���x�mA�7 a0vk��TSo�:�ցb�?�
sA^]x�y�DZ�@8	2�=��d,iUk*$��ve����C���	���?��V�b�8�����x(��i9.�
+
����
�A<+�8Bhݞ��g ��XX�z+�
'��3\��R����������m�O>?�eq��2
݊��ZJWd� ��,"���
b��,��6�`��X�C��_�Cp�F�0`{�~
.�)���$� ���b���-œ�
�rH`f��B���zC0�����7��
+Q������߲���L���1�j	�گ��m(��=��?���J��@
<��}Z��l������R
+B��F�,���N1x��Zw-����o
����E0n�a,�<����v����7٤�Pd�V
,�0�{W�|���6+W�f�%	Y��Ů�شK�@d�0y�a
B|��6pY"�
/i��C�f�u��I)#�*o�����]b2£��@���>g��xf����/�nn�U��8m��1��=6�"+[K���3
,mV�I�4w�򀯄`N	�§��h���p�jSֽe�3�tU�������B��ܑ̛eB�l��`��lLF
7l���Ca���	��U��-���M˺
�_��~j��4�@2%�YT
���Ł}�=�bg �u,�����ӕl�LH��6�s��t�s

�	kxѯX�s�X�*85زZ,��*���X���8$�
+v��g��� 
+t��|�t���q|q@��V�y��$�1��
0�ZE�h`fR��Y����c�l��p�@� ���v ���0q
1�R!0�|ED
�B�D�y'|�	��wb��w��4�  '��8�wd��%}�Y����D�����_g%��M�]�8Q�������q�p!dl!�W*n��k�)*���(�{xZ�*��~O��@x����6����x*��RŁ6���$%;�x`ɨ�/
�k!�٬� �D��4��:5J�Q��
v���6ρ=�,e�#�~oc����\p5�3��%�5����=o�,��ӵ�����,�&X�2��h��
���
+,:O2o�*�[���"��~Wq�}�̸��¿������u�.}��;�$\5�N0�BC2k�;��$��G$��o��K����h:, ���_. �v��_���
^<{5c��j@����
5�h;)�,��m��Ę�I��V׷m!�L>?.�%��aDﰗT�C?�ʐ/3�
68Kr�*k��꘰=�Q;�
�ɫ;O\֒�B~䍫
+��π���y(E�ܑ+�r�O�*�@
�)�TM����ߑ
+k��;H�"�]��V�<���²WN���

g�wV���
z�]�0���BN�
:5\��@oz��P�J@{�ΕP��P=\Oݴ�7T��]����\sq����?��S}�
n����$8��I\��) ��kP�(y�^ 3��dc%H�l�/�J
+	�ݜyqmNdh��{%������қ�©r��a�+h���tGȾ��S���
�8<;���YQ����:��ȧ]�6�I`Ĵ

,B1f���
��6�������
��_
K�U�[�?�/����
���=���@�̬�+J���!2z�ﶂ+z�jB+�����

�an,���i�{�96C-�k)�06ð�$�����l(�dB�t��c*�
��I�?2C�/v��42�����`��N�2	x������
2��y
�fٯ���
͕5qc娙����P
�AT�f[OE�\�]�\�y�ڣ!

Y1��E3|4�G��Tl9� �-��!���I�uv�J���
��0��\G�
͍��9bn��H����
�8�@�9�ax���ϱ���F�!�Cz�B��X�n\��EJ�� �&u5-�t�i
ᚶ&yl;��
5q���b�Ӈ�
ׅu
߅ݲؐK�����^
���
5�2���V�$ԕZ�(!��wo�v���F�%.gp�6�a��k
Q>�D��� wB�;J�`F^_��=�R�!*�@
SJ�Jρ:�%��V��_}��!��F�
�}/1�&\�������
D��BbGc"�|w��S[��
[
+
R�3��iG[�4�I�bCg�A�����0��_?��o�`!�
+�Y}h��$|]���03�B�&���
�
�M�0T���X�NRḿu=�i~���e�M`�ix�E+�,����WC�%�P *0�(}R/��$�x�h��<���(d���m�6�[m�{������n����z@��r�!���I)xn<��yb���'�_�� �� 
+endstream
+endobj
+1496 0 obj <<
+/Type /Page
+/Contents 1497 0 R
+/Resources 1495 0 R
+/MediaBox [0 0 612 792]
+/Parent 1464 0 R
+>> endobj
+1498 0 obj <<
+/D [1496 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1499 0 obj <<
+/D [1496 0 R /XYZ 86.4 616.944 null]
+>> endobj
+1500 0 obj <<
+/D [1496 0 R /XYZ 86.4 213.844 null]
+>> endobj
+1495 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1506 0 obj <<
+/Length 2663      
+/Filter /FlateDecode
+>>
+stream
+x��[[s��~ׯ�[��������V%G��(�v��D��$!�]���� �/�r���C\��g��;��(�
��������s*�ł�`4
�@,�$F��`4	>�
���*~(�b8Nf�����,����Ÿ��E9�X0�x���Ǔ��ɧ
j� �b9RL����ߣ`��D��*�b��FcD�j\��r�mF��2��.f��@�a)�O���x{��
�<iWS�wm�"LU���J!
1_�w�JI�#��$��
�+}���[��>����g(,�~0�Gw�^�!1��5���$�Cq�~�P1�bߌy:�;�N�aRo�
"L�y��G���Y�ac�
+\?X�/
��I#
���'nH t����X�C�LJD��%�@�_8�w���J�0󔾿�0zT����8_L2]!��XXi�=hoʰ+
q��¬q{�V���V�+�F�"����.�d�M���H\�V
�[A����YD"|H9Ve�׶��W���W��!W����2��xr�hۛE�i���]=M�Y��8mN�\��y�����C*�Z�-�5+�xLWu�����q�@o��g�u �hd���t�	{��
�N�-/|'��7�ή��T!0�ʳ�����
�[^�v���">
+HS
���*�[�꬙e�4q�R>��Fs���G�|td�.D��I�pk���hK;�Ż۱�%uHyx
��S�f���A	�@�
+��\�&��oƷ
�����G�]3]?�GX�!���`K��}h����h��X\4Ng��`�	���v��m�2'F)�⨂�!3`��H�v+��o���3
N�Q- �9�D���F���r\d��<�%7���E
%�ztk�:�V���	e:K�U���� �]e�)&��t���`�j�JQ�*)��
��ثq��Pw����͓lQ����H\��u�X�u4[�gˉ{��r��7�܌ *���9��;*��$�BQD��i�Dw
g�Mg�K�I
�~�0���]�R i���*n���B@�W
�o[r
+Ks"
p�Ə�l���F��C�[�b[ȦA�E~�������lb��
9 ��8�b�?3ӟ���rCB��V@
	�Z�
+���1�A���±����h
��Lʴ�X
n9A
A?z�f��c� �c�����'��3
�.0{`�
�ŭ�����d1�s���k��`���~�5��Q������t3�Y���Ax ��K�
f
<�؈"��~�o�zѱ�!%�dX�������B�!
8>����Q;�o��G[l��l�:����'���֡*	
��[��x�C��¼u�&��I ��B�AI�iF@�"E�o��G?�;�=c���?�k��U�QJ+�lf���8�d �����FzY>���|苟�(���g��\ޔ����Z�V؍���0P
��K�dR�vud����HbRl�6&�4Y���y�/��Ƃ[�{F�Z
`�*�c�;�̈��x���?��
���I���q���
+�ʹ��Wi�,
 �yc��(Z��b��F���������1bz��Eu�W@T>:`
sf\nz�)�ݽ�뉊zpl/Q� rJ��J�(ئU|��������l�&։σ���N�̲�4�
��,t�r<N�r�����i��O�A{a�p�Ze�p�=(��'O�Ss�}�a�kό?!w�����]kQ��]���	3O�3w��V��~\�1�<��>^g�ٶ�o����Cz�ey
�#��Ub?j�Z_��ה�𵆣����u���[+��K}�&�U�D�@�o�.KbS$��$6�-�x���3��Ħ,F���aS�炵8�j����Z
�p���*^7

'���&�) I��#���hl��Y0�i�B
�c
�$`=τ�xl�8
?	��D�|�1�`��Qu�4v5�t]�t����l(�c�	րD�ϲ�4|�za��(��x����}s�-@����
+�
��E1��c?��_��&졽��Z��'�u��
��M�t<v[w<���'�{0��=#�y��
���zᱵ(Ξy�o��& 
e�
��E���c
��c�x��GrQ��{���(���{PZ�Q�ҧ������ٞB:[3��^�
Dqr�݃�&�<��t��[�B��.����!t��:϶u~�t�nj� (`��Ԏ�7�idI�h�F��� ����\?�˻+�u�l}kn^�4o��x�Ⱦ�m4�/gK;=���
B��"&
���
7��X�	����J��pzX��o6s�瓑m'D��DL8$���M�8�P�b
�ù��r�X=Oz��ط�j��+z��33�Z��}r~�f������~Z�מ)��#�[zš�Y�V��ޗ��
NR#.u�?e��߅������h�h��|�0ӵ�J뗌�EQ�g�
֎2�z�Yu7a��?��L�
��4O���#��5�?y1I+��4
���|1N�
���a�.�Y^ؘ1��?�f�Bo�05����u]=C"B�j�rfߜ�xx�t*�����\���"������fF5�m+؊�2��Gz�,n����ɲh�5� ���;���0?�M��̫<�. 7͕ؼ�V�G�v2+](5s��j�PW��-��ꠁ_�-[%�'��!�ax$���䨡9��X��
+endstream
+endobj
+1505 0 obj <<
+/Type /Page
+/Contents 1506 0 R
+/Resources 1504 0 R
+/MediaBox [0 0 612 792]
+/Parent 1510 0 R
+/Annots [ 1501 0 R 1502 0 R 1503 0 R ]
+>> endobj
+1501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.506 631.739 243.229 643.694]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.506 381.909 243.229 393.864]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.506 132.079 243.229 144.034]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1507 0 obj <<
+/D [1505 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1508 0 obj <<
+/D [1505 0 R /XYZ 86.4 614.984 null]
+>> endobj
+1509 0 obj <<
+/D [1505 0 R /XYZ 86.4 365.154 null]
+>> endobj
+154 0 obj <<
+/D [1505 0 R /XYZ 86.4 118.964 null]
+>> endobj
+1504 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1515 0 obj <<
+/Length 3791      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W�Em��y�`S�*G�SN%�ג}Ir�IHbB
+ ZQ����^A�b�r؋5�3=���a:�����'�^�|�F�IB����fb5����\/&?O%=�qM��~(���ә�rzvʦO�^~w~����&/����w~�U��T�|}���'��'�0�J',RQ�J=�ߟ��+�,��JDb'�n��D��p�&W'�9�a��u(%R�u�$F'�B�T�L���Y3���j
�p���͹�XB'�0�=��>��}�Wo��j�
LS��/��〶�$�>��- ���(�y8B�Z���Oz�֌���}�JABW�o��~���?ÃmVp+��ܑ�,;� L��$����}������Ϻ�n�a|
�a_��^i�)#�Nf
6������y�|�;~:�yƘf��
�f=��z[d
D��ȵ-1�nÀDQ'���v�͗�P&�����
+GF�~���y��7~B��Y�}
�[�
0��pB	�I��m�B'n���������GD0=i�A��'�5�PU_�Θ6ӧ��� \׬���gJ�,p#Ǐ&3!A� pG$Q����9	3گ�zᇏw˕{*7E�j0X��
~l��7���W�Oq����,�HG�^���l�Teg�Az�C����j�G�}�1c��Vb�ZV�ш��Lk�[wA$�s����«�?Dly�j��^���]V�{��[�//Nm�f(�
�N9��"+��`'���ɯ�i��i�t�T����,��'|�4��,���
u?+��ʶ7�
QBƩd��΄�
(Y�$�g�F.IQpxϹ��z�"�$��۾���ָK���A�
+��
�`4RA	�l�Ԅ[ud�6h�ɜ�N%��6IZ�GXl��㳏h�߬��*A�dO	@�
��;�
P�b���ljՍӎ��-
�D�L���E�nf���gM���$��g-�[�0�Gu誥$Z�oZ
p�j����z۹
�\� V��%`�ǻ�
Z��� ��;��2���9;FNgR���jx���m�
������ �h�������Q��-[�����
]dU�\�}�Ai�CB���'�|��4]m���� �����˓��
+�A�[��2��
�
+8�ߧ�|�0/�p�:�
٘�`
+viE�qg\�� |�DAL�${���(��-���Ѽ�pvv~uu�k��l��?��mV�G	?
NJ�,=�ܧ���f>���f�7�`?u��2ƣ���%?
+;a)	�������!�e	7�(D-�-�:
�~�q�Ѿ
+Ѿ������${`$W	��8ל$�vOPdO� !�Z��:��e�DZӜ:�h
�&��8ɱmL5*_��͑�
�R����F�j}�������ۇ"�_[9�l #�
K�%x�|��݀[�F}�k	<5�
/
+�~
��R:r�mP�a��hd}��Ż����^
��	�~��I��j�
R-FA)�sT�U��6Ր�D(1 ;`�þ�0������0�nA�
�<�E^e����N�"fH�ˊ$z��
�o����။0�w�4��M��_>.���z�}��X�`��DP6�>��!p '��́�D��
(�3�x5�s~��! ��jM7
R�T��!�w�Z�Ѯ�����f?�<Fu-��Wu(�n!�p
�^�@v-	�M�F�&���o�n� M_�����0I�9��m��D,��;�\���
7A,��v�wWMۻ��i��ITl'n\z��*�
̃?,ҕSV�C����\G�g���p��������)�!��߄h
�����8&_n��!��w{�(~V��u�.�i���$��� �8X�P�p�@�}��..�)37aGp�(\M�-���}� �bk\t;��O�h�A�0n����?��\^�/��
+ェnG�̀�����OL�fw���g���<��D(@2e����Sj����w���|��z�ٳ�o�7���|x�)����3��g��OY���}�
ot�V'�2�1WYu�\���N��B
4���E��&-ZΠ�O�>�Hv��D�	c��,�Z	׻�P� �V�e(a9��� 
`n��P�
�������O�!f�ǫ?�՝@
&!M	4_�`�A�����S�o�0|j���@k��٩�5)��
�%E�q��E)�UG��f��
A�O��?
� '}ƤLL���Y��
���1��$��t�J�p��9:E�J��*��DJ�Q������0�"̞\�
i�v8�:x��H�����!;,q�A�������C��������w���y~�(�Z���v.�}av�����C{:2g.L-���@����ϰ���B�����l^�c?X��c���\6��U�mi��7��F�`/[��2V-��
x����2�
+���/b5
��K�VRT"�)<`
+!��������owz
������7e�'���M:3�^��#`�Dj*wde�VA�����P�Sp�TB�b	�گE�����
4/.���z �#@����3�9��pN
Dt|�f�{���U���O����{����Qa���
o����	|ߖc�%�wλ��!}-��m�ʏ
Ҳt��#P��Ԭ�-���Y�&[e)%��!-��
����@L�v���t�'ѲaKp�3>WN���*�..B ���[���[e7
��}�� ����
�C at a����R7C�9�ϛ<�@�T��r;Y�ad'��m�LJ�C��Tm+����#%�@�Dy�UN�p)*��\^�oU��z��*
+�I�D����m�n&(X`@�]uz+E�Z�a�l
:_��o����+�\N]MvK���R�
+d�(��x;-��������?�lq
o���C�L=��=
쎟D�xN8
v9�@G�f:4
���N<�2@��s�o�>ϋ"+}m<�I^�i�E, �j����Q(��'�W?�K�=�@�Xd`(��ɻ�
��1E��
BGF{&��4XZz9�&���^���G�;qdے
+9lI
�5�p�%
i^���
!�q״�2�PÉ"����c&3�(�_�B��3.%�>X"! �wVg,��1؉���Ȋ"/J�ëA��+�G�:��\�b�_��4�c��5N`4,�^(�"��<�c�'�?Gr�E�t�D�
l>��ـ0b�L��3]C�oz�,��4��/k:e��qܾ�(%u��vQל��XL���
�Lj����(=F���#=F��
�l�;L�U���\P��<źE��^:�+0�긶Y��~0�I
�m!b��
���B�������� Yk��(d��[P������_������R5Ӻ!�B,T7���Y���+��<��j
��ԀH��+,P�Io#(�I7D��G���b߉�":�Ky3�"<��d��m>�l�U����S
	a�k��ϼf3��M��
E�)��l�����!�<��T�s��J7�T�o��
�@4����!4�l�
��>/“�8�PU �r/\��CF:��e6>���b�|4��v��E���{^���1i
����e��h��[��k%�/f��[4�w���"��
�l
Z�+�&�]c�M"��M�m2�g�o����4P$�nZ��A����'��������V��ۮ�qw��r�6��V5�s_��N��4�ps��Kqk +a��v�#�
-um�{�e���w���}��&���
��r��:�����
+K�8�cS��G�uCp8$Z��1BP��MB�/��d
px�\VC��5^
5C��G�
+i�ې
M��ܷ�g�����~f�nt-�pG�qmʺd��w�?lU�j
+endstream
+endobj
+1514 0 obj <<
+/Type /Page
+/Contents 1515 0 R
+/Resources 1513 0 R
+/MediaBox [0 0 612 792]
+/Parent 1510 0 R
+/Annots [ 1511 0 R 1512 0 R ]
+>> endobj
+1511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.501 589.193 348.973 600.041]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.4) >>
+>> endobj
+1512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.906 115.26 494.126 127.216]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.1) >>
+>> endobj
+1516 0 obj <<
+/D [1514 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1517 0 obj <<
+/D [1514 0 R /XYZ 86.4 701.138 null]
+>> endobj
+158 0 obj <<
+/D [1514 0 R /XYZ 86.4 474.96 null]
+>> endobj
+1518 0 obj <<
+/D [1514 0 R /XYZ 86.4 392.858 null]
+>> endobj
+1513 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R /F14 1030 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1523 0 obj <<
+/Length 3966      
+/Filter /FlateDecode
+>>
+stream
+x���r����-T�
+�<0���F���Ȓ���T�9`I�BL
 �F��tO��AB�6�\r!�����ֳp��?.ξy��,	#�l�0�M�gV&�Qb�X�~�� :�P����Yu�L7��
1O?n2~��&/���B&F�s-������jq��3h™�`� �f�ܞ���p����ga��x�٭�δJ	�����_�B�f�߮�{�� vfkhǗ?
o at Dq
�*���{�iD�Dr�����RҊI��"�ar������C�O�w���0�w�o
$������y��y��75�� y�����\e���x&��_��\���M�N7o�a E�u�ͨU�V��^�	[i�	�fB�@h	
$ �A]n>!. �{����
ڼ	�<���:/����Vf�x<�f6i��G�i������~�1
+����Ѷ
�ͦĭ|� ]�y�7��I���/�
翄Q����M�ɪ�X"
+�?��ޒF����G:�
+F�5�*���?v�ߎ�qYnw���  �@��1�;�FVUx`�tǛ����zؙ�g�Ư�MYܪ���2�߲���j_љ@;'�YU eF�����n�ݎ�$�{�%�
���|�YZQ���ϋ���M��# �y�E=�[�"����=�cb��<�҇��r�0��|=&H�A��ʀ���)�A�ZqbJ��4w{�6J���ߚ?
lwgq�r� 
��[��
+�2�%z9�y&lw�A�#��UQ��[�l�ە	{��nY~b�2T���*�@F�a��k�2���@i�/�Ͷ�o"�M�w�r��c�������!k�
5�u�B�+�'��@sD��3L F�
�[϶*#z��H�0�bE��#uӆ�i�Ήc��f�
���&���As|6pd<�z�)� �`�z�q�z�hb�$��<����;��
�<^H��m��Z�ز)��C�c�G>t팧y��
+�[���:]�܃�Ye
�^

�w]�KJ�ag*H�+��캍�����p.no��G�@��� ���퇫��#�����f��
m3�Q珰�
���9
;e�A��Y"
�d
�Yo��f���?�Qm������#ƒ
����}3�g��
�T�>P���Ro�)��D��Y�D�~�
�Q�N������
�*�9�[81i-���N
�ak���:s+�
e'�	������x�
A�ؼFB&@�%������P���)���ab�X�v{���²�3��OE>�
��_G��I�y+�;�8V��K�h��Bx���G
h,߸i
���8�x���xO��Qt��>����!���A��Px�X���t�iH$>�G
�g,F�D'�8
ۑ!��^)C����aq��1;�P��i1�5ܤ��ba
$��z���z��9�KQ8�k�
�$��ZAI
Z�~�Z�x3��$j@Y �
+�0R��HO����ڪ�>ַ��_�H� ���R�Sd9p
DY�3�q�'��r_�K
^e[0G?�іk��'b�:��8��,�snY�x�4��B��I8$�%����

7R�q}��޾���{��vʼnЌ�Y�f��
�0,�W�A����"���@�W.��'؈Po��z�G��&�Y#�OJx�:xs�n���ҠX�A �(V{K	#�o�2RY��44X΍�=���{�� ��j5|��c�P�> �nU�?G
LXӆCc0��� �j��cqPX�C
}�a�;�[�8�
+ ���,x2VA��պ^�0�ٛ@���!���C
+��B1�����ӂ��8͡�H��-�D`�ΊeF$��"1t�I�Q��ʟ[���:�ss$�|N�"���]��Ǒ��e1�Ĉo ���P(�oŹA'A�=yY����
��:������Q�����
�.�`��I�@� ��~�~1&v�s1�@�� 6�-��KBС�|�Ө��Z��w� 
n��. h���
����+hL�hJM� (��7��p���+D���I�&6C�'�Q�
$�L�%�M|@!7�5�
5{�~�q
�9����/�lY�4-�u���"���oh��I��d>��p{���
T� /Q�����b�əL$S�z*�#��(�=OIX��X��@I/}c�_L�׈%�65��P�����>����
#h�DN�#N��>��J�
)���^<r�h�ʎ�dGA��n�g�h
逢���
qTxG�uYO=L������
fo
+�l�h��	�a2b��d���}O�
f�o4P�ot�7���{�)/H��CN��c���6���H�H
�U��W5g��>wZ��,F�b���dR_����

6Z�a�'9���
�G��&�0X�2��X�C9���v�
��	��ny>a�
��
�O�\�n=�W��5`�Y
oy��%m(HS�Q�'
'��v�2�w9�dٱ�΅1ֹQ�s�^5T q9�n���Xz�K�k�oz��'t�]�{U�l`*���Ʊ0�V��@��fx(��j:��]
��F���K{}N�� Xη=���C�6G�[� 7]|�^pe��;M���"�������|AL�ի�
�Ӛ��񶚠��K�ͱ�c=�DFĒ8��c�:�{ÉlW�&����zA��	i®�;\�U�9`r�O!�����h��Ҋ�~M�VX�e
h������Q?GKe��͠<�g*܎�[/�"�K7��p��
�'�hk�"'�8�
7
Q�
�]
�W���=̴�Yؕ��.��eW�1J�$�
+�N$F���|
+ܦ����/ܜ�\�ĪU�c
����u~f��T���)��Å?_(cc��~���
� ��U[O㗾:�]���]�t���W�����]��AW��_El����F���������>ڙ& �\ �e	��
�kȤ�g�P�tEc ���3_2V�kd��vP��
�sN\��Ź�
j3�(VpIe�9��?��֎����T���{�hU�=2�?poo�Ʈ^�
&@*�N������T���2��ߌ
��.��Li�r7�]=�#���[��U4/{$r�6�F at hE����z����5���A�;%@��
0�LERJ�Y���#;[�7�{h�z��Xe�5C��.�̧s�f��yN�:[��ʷε�UgGu�١�	�����4q8��j^dkp"I�3�Шq}Im򆱁l���*l%�a���Q����x�tW��#�*��{�GǨ�n�(:QƏ�?@'uP�΁��Y��3�!u�9�pc�Åv^�*0�\���]�kT4�-��}�w�#\.�M�J�K��W�g\]%�a)�
+q�<\��U� :�\"8,��<�P|X�T��ZS�8�x+`L�7�Q����	2ۈ�I��I맺Že	�m��=�O/++����)'�x�4�|MGp����N�

OE_��Wc=8�u�r��A���d
:�v
�X��!��h=�+��q�pU`ũ���O
��s�a{�졡8F��b�q
����-uH}��]�}���X؅:��
�����J&�Zv�^:�	V���Fqlۯ����nwH��G=�K��W�~�
UE
�8i
Gw$UQ��
K�Y�/�Fʝ+&\8���]Z�#z��:�����xS�?Ũ8i����g`͊_Gװf�
L ��L8�r^����D������
+��Bܬ^�B����n�U=��$�M��#>�p~-u9���y���u-?zY��T�R
'�
+8ѧN=8�uP���A_(�՘W۲�:����

(�����V���sQ ��@�v
��Q��TMzƺ�c�sPr���j�JP	��ļ�N���`{��DU|��R�Ȳ����a���Ư
ڭ��}�:r7��f��C��ܐ��
r>h�䆽�
s�b
+��B*��\�96���
+� �������מ�U#�B��
[I&k�v�}N������-�
+endstream
+endobj
+1522 0 obj <<
+/Type /Page
+/Contents 1523 0 R
+/Resources 1521 0 R
+/MediaBox [0 0 612 792]
+/Parent 1510 0 R
+/Annots [ 1519 0 R ]
+>> endobj
+1519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.808 62.16 160.53 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.2) >>
+>> endobj
+1524 0 obj <<
+/D [1522 0 R /XYZ 86.4 726.045 null]
+>> endobj
+162 0 obj <<
+/D [1522 0 R /XYZ 86.4 121.341 null]
+>> endobj
+1521 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F7 1115 0 R /F10 1116 0 R /F14 1030 0 R /F38 773 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1528 0 obj <<
+/Length 3040      
+/Filter /FlateDecode
+>>
+stream
+x��ZM���ϯБJ���V�C2;k��vl���`�@K�
k9ℤv��>$��j<��T�$�@��u����"^|~��ۋ�^�d��4a��v��	
�R�p��]/~�[^�$V*z�ۻ�%�"�Z�����_/�o�+
m��5^���u���][T��O�_^\�^��b�xA�Y$�"Y�
.~�)^����ELx�l����)ah�����.��U�񢓔��h������]�,�yf_ꨩ��K���wz��������E�Tm�:��Y;��.��j��c��KVS�݋��q�m�~�G��NV�}ܵn
<z������������.���Cմ�%�U���v����ƌ���?c�$NRȴ�VX1��u޸������|���ET����Լ\e[�h���s[��E0� i*;��X�pVQ�y�����cLwCI� gxE��.Ӑ�������%l�,��Pz�[�T�v�ں_�|��ښ2�u����{
��N�E��ɞ�knvە�ԸM�]�s=�
��(��XuK���(4'D��N��0����C73LI&|P>eeS��W�������5�$���ܬ�ݡUo���K)�}�7~d�m�-���p����Tf9��Z��-U����7e��LFs?�^vc�|(ʲ3�ve\��=f�{���8���
4���7IB�*����v{*�N�/�Ǿ=K�Sg	p��6`\[��l�d��+��`��E��k��>�s��z�y���?,�%_�|o�
���G�P��Z�1�F_T��{V
�pdLҨ�8y�C��ȍ�uH���m�g��D��ӯ�bn����_e>u�~@p��F��A%tB��^m��X��nPat�����A�ZG+눰o�k4^� #V֔L���v��@N�Sa��:v���x��
C��6{�
F���΅4��%
ʬ�k�R�i|0� p!G±��Hh&
kI��q0^��B�� �g�3C�I�ȃ��)QZA��裆.�*J��c`|�O��|:"9'�z�2���F�N(�L
�����H [...]
+�*�

7�?�pk�am
������f�E	!�T��+'�eެ��O
�@�M��@�]&�XHz2���AW�G祫�x�	`f����oUaݬ�.*���v�3#K���Q��I�S������R�+�{z�m��s���x�>��{�1�z�k��a�� C�|���vr�H�i)�"Ju
��fHG�����M���Ih�a
+��b<����=��@�`�Iu�Y�Bh��B�ج��q�I�A ���,3��b�����OO�P�U���U�v����c����8�t|h�>5�M���U�i���?x!6\��%���Y�yߑ9�@-h
n3�Δ6�3��1��S����W�gV_�k]���Ã�9S�P��М��e��g�c(�q�����! "�a�|�W&�'��*��� ?"a��8�R:���ض���
�ҹ=J�mP�
7
��™��q�v‘��hT�B`@�<GN
�2+*N�)޼������1F!	�S�����l疸s����a0yw���٭V �ͮ,�+5y;�?�L��wy��8�B�Y�Q��nί���BYM��g�T#ы�p�o�|��
��vb�4�6
(*�D�`�F�α
&���4�m�`1�Ĵ_�Y�:���R��� ��^�a
��#�3�X3*�(=�|�S���e�ŜD�>�t���զ8#�W�MB�C�ע��?��9�	
+~���~k�5��4������́l&�K�C�{� ��.���Ғ)f*G6idN@�|��./��S�Xj�<�e�?�~|�/y�J�Д����z
Ā0���
�
u"�%
�j���d!M�A� '��<bٚ�3��X�	@�I���1Hv
�ӧ��2��^\@g�m�)����w q��3"X��8�U��q�.�\О��Z
Zq���)���r�C�`
�,��
�bz��
�[u\��
|��yQ=Ga
�H��ǔjϏy��p	S���0bʠ�.���oݯ}�u�/>{��/+��w��K+�rO�A�n�3�B�Êr"�5u���
��z�B
{�4��mL����@�1�[�]���
D��	��3 %��h(5�F��4�$	H����p�RU�yn�
�
+�
+���T�M��5<F���tM��Ά��n	2}g�Rb�"��
gs���+���<�JD��:X�:k�ORF�
+�����(#��,ed*n&��k6C
�I�n�}x&�ԗk�b�2 B��6�6>A��t�
U���W�@�;;To3N����m���&�
܊%�?���p+ݿ�ɭ\��w#���qJ`ZW
U�p�Wމ,[�y�QD�H�?�
5y>��4*.!����&l���KA�ɰ�f#
+��x
�PC:C
oD%J
=c<Aa��Ǟe��W�f���#�6=Rv��M
L9w�	��`X���G�����E��ˉǨ˩&q_J����
��0�?=g�
#J��s8�x.!��>p�X�p���@���Q�
���D
+N;p`���j�`s�q��*V��:T94¸���liɕ�����(�t��h�if�%X�8�͚�F-��:�R�@��cRO��������Q��6�ϩ�k��0$z���x2���Xe���W�Ķ��!fN)N�9I���}G��\�L5�#�krp�#:2g�Gyw����&�Xg�ظwå<�K�;{U>�j������|:�;��`�D!͚1���
�Q(�o<�
<
+eX�����8/�\l��p�X�X	0a&��<�Ba��/�tJ�cO�eV�-�C�w���a�x'{b�����)��Y��ƣ�O�LX������i����	��x�}�
�B=&f��=Y������ɌH}e�"{c����~C�<}&B0�
j�J��|�%�J�Et��'r>$�.O�ֲ���(�

�=hx]!�*
�w�;+�� 1��x���SICB�����`��`�e��S�"��RΊ?8Q���!�0Q��.���Z�
G¹z�y1"���h;��? ����"B�e�I����
8�Dt
+endstream
+endobj
+1527 0 obj <<
+/Type /Page
+/Contents 1528 0 R
+/Resources 1526 0 R
+/MediaBox [0 0 612 792]
+/Parent 1510 0 R
+/Annots [ 1520 0 R 1525 0 R ]
+>> endobj
+1520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.344 676.287 344.067 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.811 240.131 466.282 252.087]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.2) >>
+>> endobj
+1529 0 obj <<
+/D [1527 0 R /XYZ 86.4 726.045 null]
+>> endobj
+166 0 obj <<
+/D [1527 0 R /XYZ 86.4 629.417 null]
+>> endobj
+1530 0 obj <<
+/D [1527 0 R /XYZ 86.4 559.286 null]
+>> endobj
+1531 0 obj <<
+/D [1527 0 R /XYZ 86.4 326.966 null]
+>> endobj
+1532 0 obj <<
+/D [1527 0 R /XYZ 86.4 138.423 null]
+>> endobj
+1526 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F48 966 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1535 0 obj <<
+/Length 2803      
+/Filter /FlateDecode
+>>
+stream
+xڵ��v�F��z
+,���J���^�
;�儴{�d��s@�@9���&�B�zEY�����k�����������;f[
�lj[�'˵�
�!�k��~�q$�
�ٗ,Hk?��
2������!^�ag��l��8����pu����@5�"u��ֻܶ�������`a�<��V<��8���"ky���d��,d��j"\D1�l��n)|5u�NƠ
�?��|���z�H����x?'�C���|JR)��;���0��A�E��9��dd峪x�����k
+�v�cQ�HS
+u���=Jɴ�؈2q,��o4�n+��ò�&�<=�P�
G��f�	���2\�<��ʀ��!�"ڮ�r�
E	�T6A�
6 ȇ�mK�	��$v �Ή���gϪ�:�,�wA[�
�O��
 Iȉ����?D��
Ju耊�
s�`�~gT� Ln	z0x���sFg7���
;?�xdI�"�
RCp��Ҷ�C:*6�5v�บ,�1r�AEh>ϩ;K 
�C�>0OꞢ�
�4���
ݙ4L%wu����
+��2�o��.�L94��&�TY��8lһ�6c.�d
+��E
����=C��?ꑻ��0=z��"��ϥ��؀t|X������\ "#��2ڀC̞$��
OѲ!rfV6`��~7�a��q���8��������O_��
�zW�FGIQ��(G�W
�����aWL�M�
?�Y����a���7��n�Ä�)�Rk� �!���T�X�_������z�z��!�i�o6�.�Ax�T=aU�ń�Ǫ!��O�q�:[���I �v%p� �������af�y��x?��BP-ʈ��]D�S/����~��.�	h�B���%��Π�}��@�ͧ�nY���<�)4�Q%���ӷʶs�b�O�
%F/��7����a�m�O�8�y��B��)�|*no8��q,�i*+~��zn�"�������b$�}N���7�08Z[��Ql�s
F�&_��H���d��u����XO�l�Aĩw>"[:�\K�K����g~^m�e��Fa>���{��(���˙l����0�z����݇�� 7@���~�7��[��ն��R}�
���j��}
�a����\5�?��
JуT�� �(9(0��F�QUdy��o
({W�f	���)P
+��]m�}
����̒�Pf/o�3piӳU�5}s�A;:8
Y�~�L�r�:�H��|
+�� FHDŽC2��9Qq��0�z��Je�=�v��utU���w�m��ؓ���CLT��Z�wE�jx�)d{��<�酳D^�{&�n
k��jc��p�_��C�	��x at Up�7��펍�w���n��K&Iu���ҵEp�΃L������Cd�ԇI�SWE+���+>���
R|���ǀ�w�m�Fw�I7�ܾy��Q~�=̃�/��;Q��G��U�

+U�A�����5�U
�@�w�-�
>=<Er3O��/�N�M���
+�m��
s{�b-pU���:�_���q�i�"Lk��U�i���S�5s	����.7��hd�à�Nl����@��>�
�{�p`;�
8iIe�2�����`��ml����0��_i���<6�l���SG�]-�Q`�.Qw�
�L�V�֬�A����0_� 6
SE ?00�]i����)��L8Ȧ�o�4X)�
8���d�N�,
�m7�a��4UU5�ߒ$?*�f:>6
SUFy:������n��aw�l�����0;^>L��%Ŋb#����;)ӧ��(<����b{6���6����X5�)g��w��0�y=�Q�鍾���8�	��i7��մ��?���b�[��]��

,��$�����Ruq1Ϊ
�௓�Я�;g�.
��U��2H�B�2]\� *M����W�z�ن)�G�\Cc�CW9�V^<ֱ�{��p��ǩ��qJq�h�KCS�`�ٻN-MJ�]>�����q=�i5��ld
^�9���/J�.�\{��u�b�)f�娺l���iW��r&[J�f�"
+`�R�;�-���E�y�п�6M�E��b��Lq�<w~���4��`��'�muL
m�4̟w�p�)��U5^���
�}(5m
l��a�* �
U}��D3eHR�]\?ܿ�xc�Bo�m+�x�Ķ���	�ꝠH�<?������ev���
6�z+Ժ�����w�F. 84E���
��f���~�@�[��eT�
<��)����ҭ�ʟ�`���[��_|�^r�O-U��o�A^�֝]���d��Dޘ��4_��/��V/�
qR�{�V�zb���]�-^�^J���W����3Vu
�Byx�}
�s���i�:L
��U��bw�d�r
M�6�d�D[�m���큊�@UM�Ik�ޞ ,
LUÙ�o�Z[<�'_� '�<�ʃ�������oŁT��>���&��I�|'1
+R?^�.��@���
G����>4$����O`�
/���ޅ^�;7Y��Dz��� �w�/�Y{r��.�w��Z>�
7y�nL��l�[����O�w �ģ0�1d׻�`��7����o�ċ��pS��հ�荥�h�wKs�2��Y��]��Q(�%�*��-
f�-��6� f�)������K��ߣD�3/�e��c�����j�+{1�$��^⬽Xm�G�9�_f�a���K���^��`��@s������UjmDl�Ϛ���B�}$��.������i��aƬ�⭇8��j�{�G9
��G>��]ڮ{!`�Ņ�p�c�۲�3
��v�\^�in���L	�s�ZT�$��_e\:�d
�����b
+endstream
+endobj
+1534 0 obj <<
+/Type /Page
+/Contents 1535 0 R
+/Resources 1533 0 R
+/MediaBox [0 0 612 792]
+/Parent 1510 0 R
+>> endobj
+1536 0 obj <<
+/D [1534 0 R /XYZ 86.4 726.045 null]
+>> endobj
+941 0 obj <<
+/D [1534 0 R /XYZ 205.524 615.203 null]
+>> endobj
+1533 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F11 1019 0 R /F7 1115 0 R /F10 1116 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1539 0 obj <<
+/Length 2967      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys��~ׯ�#��c�=�dS����[+��ʻ	I�%� e�ߧ��A��z�)?��1�����P8������xu��9�E�����D	�&�DHP<�ZL��MgD�Ro�4��Ψb����Ο]�K4��7��Ż�v�e�ܖi�M������ɇ
R�	��p����W'�
'
���$D4R��f�j�h�
-'�'oNB�갾z�^��0�R���;)��
�Cip?�<���Ĭ��d�~��0��K�;'�>guY�*RsA7��֎�"
F�1��<�o�����3hq
�UA�*��z8�����#�nm~lgO
�˂<s���M�$�0��*
+
E�����u
��B
+��� C�!�Q��z�팭�
+E���pĬ�˷gg�./[��?�8�u;�V������6�MX���w�S�5�ZI���b;�'Eq�].?ۑER�AE�q%AO�
�'A
�(z��Hȭ̋g=B�BD�Q�*
SDM�/����e ����M��i"&�j��>_$�}�F.����P5��JV=����۠��l
+?e��Q��c�>+�4���ɛ
6�Q
���e^&E���*x��p�1O	1KO
�ؐ`{�P�}X&%,�ob[��U�5X�)�`3���ek��T�P+t��
 �

��u\���ߔ��� �f�v�^�՘�m6�QTj�K;�.�
+��V(
v
q�?�:�פ���$v9"��nW�U2����+���cZ$�$q��AB�~�H{�Қt�,P����G���[Ft��~�c"! �`�⏃�T��TD�A�CPY�<�"Ȓd�-ʀ��"�5�jse�fI��W�|im�����z���l�j_H�5�`0���!���x�
b�F+�R
���7:�p"e�U��b5�]x�bE&�9h獿53S�js�h� a��0B��fg� ?/��-h�W�JB�y-��B�E�Ȇ�d/*��j�
i�{���C�i��{l��<��Ur����u�]7��E�
M��6D{8$(�� ��0�,�:ec78����90�&(b�_�*$`#7�Ҵ�E���f�U��
�� 0I
��a���p�)ϴ��0
+>Y��3Nx��i� �h��'��06M�x���OC*m�r���U�)�,4U�� ��,��Yz��M��5M-5c�i��F�J��&�������U+�V^Y	�ݥ6�W�Bn&���8Dl7؇�~�<�,ӢL�.�@z��7��*)�r��E��8ohh촖
�t�(���-XA�rB!}=.#� ����UFr
qυ �����x��q��
�}�ڗ�L�5\_��!hY�k\��%�
Iwڛ��
��N��*�p�qH|����k��
�CP�%���������!�{P�+ګʷɋ�!wj.�
�1���]E:��3U���vh`��S
M��&~���,�(���SJ��M4
���&
W{@o�	�l�
���0vDob
��7�z�7�)
�7�aD���j��whM�#Z��5�E�Үz��A�¿Q<L�@EB^8[�{�B+k}���Ճ\��Ms��0�
�ٴ%�!�;#�
��6�Sc�C`�z�
 
�~j��ʀ�����w�GZV=��Tׁ3
ܧp�o��uZ]��R�c[]V�X at bvrn� �j/ױN{� (S�������'�=(���@9u8�\�w��7="%�l�r���ȋ��6�1L��g�
>��78�H˕0N�]��<���l	��٢O�"4��M����X������I(���yh˺QD±���M��
�kO��'
�\4
A��� L��+��k�� �i6�%��7(��0m��H�d�\�u�/���D���m�IV欪�� �|���[}��fB��e%;�)i*�P#0O,$9̢M�ły�e�k�^;�kA.�o����mګe���$ާ{0
�,�Y
W����e/���R��o�-��~p�1��j���WӬU�4�i!s��F��Fj���!���`��Q@@
�M-��5�(8�ĝN����L�E	����^B[
�<�� 5
�ը~�U��
��Vib����$v�q�l)��F��L����pk9�[�1A���F8��]Y��c��&d��kZ��AN��}'s'P��
+nco�bZ��؇u�F_�8c.ƿ釓�5�t}�[���*XLm���_��,�պ��%�hh�kE�|r#�m�
+n�����Q(9�dct��TB�:}6��l�-�́]oS�a`+=*tq)}S6���h��%q����M�I肵Ӽ��E�7�F��|+1B�@O%	��l����'�JVM����B]k�!��6�F�Eռk���j��f
�z�wE�����|��]��Dz�T�����xo�tX� � PW)��*ݤ�kf��Mjr�ي�.�[� 
�Z� &����	4Y9e��cX%���E�*�x�N�~��J�����IQ�>9`=G�jٴ�ņ�U�:	���*p�l��)����-���+��
$P�P1\�o��AM
pH�����Q� �W�.�o�ފP"���U�T�#
+�}�*�KB
����KB����P#�K��Q/�)P����n�5�
�爒8I����JB�p.	�>�hxL;
���w�9�d��B�N$S�0��E|[M��6YT��
`_V�}�baC5(��
4º���Q��@0����3�>���|�bZ/>�x=K����%������%Z DH�)
�b��id�����J�T����U
Fؗ)�"�`=j��zPﰣb1}�x���
d
;�
J$��z�o��ŇK�H %FyI3	��|IsD��l؍�$�ɷ���D�b�.�+���7Q�
M}����ࣾ+ B�ލ�}]���c +�3Fhpjϳ�6����}P���1KԪ�*u��w�[�-�y\&n%�oV��,�W
�VhS���S���� &�8����]�].�^z2�z�x�� �°V
+endstream
+endobj
+1538 0 obj <<
+/Type /Page
+/Contents 1539 0 R
+/Resources 1537 0 R
+/MediaBox [0 0 612 792]
+/Parent 1510 0 R
+>> endobj
+1540 0 obj <<
+/D [1538 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1541 0 obj <<
+/D [1538 0 R /XYZ 86.4 590.678 null]
+>> endobj
+1542 0 obj <<
+/D [1538 0 R /XYZ 86.4 381.728 null]
+>> endobj
+1543 0 obj <<
+/D [1538 0 R /XYZ 86.4 207.563 null]
+>> endobj
+1537 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F49 967 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1547 0 obj <<
+/Length 2750      
+/Filter /FlateDecode
+>>
+stream
+x��[K��6�ϯ�Qڲ��ܔ�#[Nٮ�g�=89p$�
˒8)?��}?<�G�xhg+�ED����kB��zM�y�����?q5�I���\\M�"b�YL������T9�sço�t;_$��lN���*���v�E��b6g�f*�����Ϟ_��qF!&��jXI�P�������d���'᱙|t���c��k59?��Y��'�����8]bF�:#�8�(c5����H�T��J���b�1��)�Zym=�5_��iy^&�/�����W����=E(
sED�7��WZ�tX��j;����%�I���W��z6�LN�K�����o���t_%�bKc?����M���]��xYw-�t��O�(WK7�Coq�A�i�0ʜ*�����b��n��wޝ��S���������O�^��a㝵D��;�X%x�F�Yf��L
/*��ײ����O��U|���3����*[����R?Gw�����K��k"��^�6+o�������w���-��pz=M� [...]
+
P�� ���e���dS~�M�W����t���[D�
�\E�\�Tns�]�����黱j�?��Z at n�c�1a� o���q������2X,��<�b���1C����������<B��O
�M̡>�k㔲��
*���&-wۍ��LJ��]�
2�B4F��]o���
��� ڐz��xU~L�n�g���!	�f�u��=�	ž�e�w�|V�M^b����:��!.5w��!1J�
fn(�v2��>}����T_�w-w8�����o��k�I� �[���(�v�UEZ
�
J`�چE�=I$ǚ��'
%t毞��C��!�P"��+��ۗ/�
���ښ� ��M�Gp�A�cL���"�`ϑb��Q�P�9���� \�/V��V�U�>��'F`�9h]B�f]�Vы����5��ʺ:B_����^��ve�m�$�k�_�U�ez��iy��
����}>��|9�E�d��� ی�b����Ŧ�G
+����n8��i��+���eđ_%P���Q�Z?�T)��:S�J�L��zq54
�-k��6O
�B4���H���x�ٳ�(l:� 
6�Y��d~x:��ւ�|���;��lf"e73q�xz�M(pS�$.�B	O�?v�lc�8(&��K?[�T/e>�K��X��+��h(�
+����F�*_�y�"��
�� 3�O��9Ɓ���-fQ�=Չ�E��B���^"
+�s�h�|/B����wI��>c�"x+3I��j�0��3 �S
ߦ��²��
+��R��C���u!j"�6
�����XYHh8�镅^l2P}D��X��T��� �cGOW�ነ .I:nE�R¡zP�ph��5U�E� �YIS��6NjA�C|A1���� �FcCV��
h�i`�
4J�EC���m2��2�r�B��?ia0�p�-�"0���,b�L~��<�.o�(]
WD%F��N�����qe�x �
�ʠ��t��'�����IY���ҕ't���MR�kX�
 ����1��Buh���mR�5�Ds������p�WA�VD
�_ț��z
�e�B:vj��?�
+:-�=� 
��Z��'
ŵ>�
+2���S;B�TA�$q�F������
&�#�]�W(��� �.��$�8�r�'�#U

�#����y cUצӢ���G�
+N�YÉ����eNگ�jפv] �n$�����
ޅ��Ж_����:0���@��Mf2�r��1���@
 �QO�5��f
D#V���I��o#�఑V���#i3�v~
Њl#����xe̩���:��ͫ�5$�l����FW3���~�I��$���J�ɲ7�NOdS^��pBwe��*n/�M��Z����C
�K\�]z0�2��>��r(p!�IZ�a
��{��}��#[H?�
���ͽ�)�j��b,��]V�*��E������{
+��S�OW�a�
�Ch�x

��
�� d[���!#
�YG�v�O�ݔH�E���c�0L����e!�
a�7 :@�!.��/�}�Y��W<�ؑ�#���#�e5�ur

�-ís�v{&e�3F���b��"�!�g
W6�;g�;� �_��l�~�A~����
g��KIi����U�����f�ݣE���43`r�ZHwW>�N��CG��H��w��-�,Pc,p��A�H�:��W;�`#�`�(z�PU`>H�ǐ�z[�=�0�"��
+�E���+P�fZ�����
+cȬL�-�^��g��y�p���mGؒm
+�$�n�M��5kx
��}s�=�'T{M?-��՛N
�ǁ�m\'�2jb�[�
��Ԅs���v�7��G�cW���y�nI{�+<B^*!�����.Jw]�rJ�؝mx8
��e�Gv9F�� 
����"��i$
+G�
��z
��B!�C�$���6	M>}Mʢc���Hhc ������$�\	��mh��{�t
+��<�+�y�)�m�굷)��5����JN8�c0P�;~'��hu�^����x
+endstream
+endobj
+1546 0 obj <<
+/Type /Page
+/Contents 1547 0 R
+/Resources 1545 0 R
+/MediaBox [0 0 612 792]
+/Parent 1553 0 R
+/Annots [ 1544 0 R ]
+>> endobj
+1544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [268.357 644.633 283.079 655.481]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+1548 0 obj <<
+/D [1546 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1549 0 obj <<
+/D [1546 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1550 0 obj <<
+/D [1546 0 R /XYZ 86.4 485.757 null]
+>> endobj
+1551 0 obj <<
+/D [1546 0 R /XYZ 86.4 306.064 null]
+>> endobj
+1552 0 obj <<
+/D [1546 0 R /XYZ 86.4 126.362 null]
+>> endobj
+1545 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F14 1030 0 R /F16 717 0 R /F11 1019 0 R /F7 1115 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1556 0 obj <<
+/Length 2330      
+/Filter /FlateDecode
+>>
+stream
+x��Y[��F~�_�#ڲ:}�f��UYg��T�u2�_�<0���`��ί��� �<d�J�E�����}
�>x���տW߼`�
P ��kOK�=E$�+���lN%V���ɇٜi�?��݌�?�_ߘG�_�Y���7ՠ�t�/�4������zq��+R�Gj)i.�������[��<�X���帝�Y�(��z7W?]a�k��=׭��,�ɀ �d��f~*�P���E{��H�
�
،�ːV�
�E��|U���8�hk-�`̇
ĻU�~W=osc�����	�۽�M�յؔ���]�(���%�m �8Q�-P��&�����ː�"(Ѝ
�@���lE���9�
+a�ڜHިF�
�,�*�L|?���U3;6��x�f���z~�5G�qnLm��b�L�?$�)H�F�8)�*JU{��ʏir����9�Q�\�=�O#"4�`d)
+6�I
��<U&
d�$(�\J��y����뛛s���Zzg�>�Vj��d+�7�5�-�Z�Q��(�/�Q�����g�Q�F
%9���N
1�ΰg�v
+3�J\Y׼�~5 SiDa�25A
���o�q�/
� cm��#�bX�q��>]E}5���@	*)
+�v��E��,
+�p4YZ%d'3�Q�dT_Q ����:% ��6):
]$�������4�KxS�|i]=
_��������v
C�ʆ�&�i5u'�eqSK�I�ܕ"��"�7�	��U#��^�|n��}Yl¤^�Qx��ӅuՅ�
O��G��n����B !$�ݸ�b�w�
�
Gm���Q��m�������fP�OZ�������
݈�D�P5�Զ��"��0������.
+�
+i��I_v��M�>@
+�c�
@
�Mh;�XRH�6lb�h�m�&���
+V�����@�����"�[Ļh(;!$�|]�|���&p���{@
0���� B)bT8�j.�01g.]#<u��0���R<G��j�0ʞ�	�gզ�
vc��?FJלB�*X�X�G�2����J[e٢�5��}��v�)%���نB�������.�_ >G��	nSd��ܖ���.]Ev�W5���,��\�ZP,mJ� �U�
�߅yQK�@a���^��K#zS����5!t`q�L
;4���ei��2�V�jk��q�wه����Vݳ��H��	
@�ah��P� ��R at z]�s$J�HE/!��i����o}�A�fz�����9��!�� �
�7���R�M�&l@�4���vk=l������Ebe�=^O�C�ͭ�Fs-������L����r8���|�J g�C���&ݛ�*�@�dC�LL��tB3��'��\�s	=0��$���8��Cx0�ը�i���E��I��OSuW�B��R��d�
+`:	Y�~��P��c ྎ�]'g�uz.]�LT�uN��������g��)��!����7��?z�;
+BA
�Z�v;�
+ >�C�a���u��|6�;MV
b��gY�
�,8�P=�M%��&7��l���d�R���"0A��}�@�!�Zcz�ߊ ŵ��	,:��͛u
�k�f)���55 �n�Ks �z�-6aQ{�k���]
}t7��Y�;��y
���
/3�  +z��3	���8?�r&�)�΀���Y׫��u�-��x��|�b�� e/�G����,���T�	�5���w�1���-�X�
J
�V3��(t`��S�OSv��4�ʮ��
��*`]�>9���
J� o�E��О=ƒ����m53�^�0�Q���T
˶�6
��
�gQ��sQ���"��6��-�G;0W�ה�����ͯO�VHk:�6KIX�g?�gW	:%Ѿ�����gN�ݜ7�c�j2���N���Y�&
�w8�o}mwЄ����=�������ؚ�'���J��DL�͇�@�?'���]�g
+;�RR�3��B-5r�>2��@��};j��طAd�9̾��
�Ϻ �c��b��x@W��
�
��B��
$P����4���Kp���P��\���)H����KL1�8L�55�hc�o@�Q���
HC�
u
��L��t�kD�����1��J
��N�t�
�\br�l�E-�!�A�T�K��i��Rxf5� HP�Ҍ<�������-G�ǝ��,� ��l�A�zƞX�$,��
z`U��c,�Z�QhR��mg��og���1�m�
�Z �{ ݠ
+@��x��5�$lV2G�J�u�I�����Tc��i�E>2�x�5�h+�W�

�
0�����
+endstream
+endobj
+1555 0 obj <<
+/Type /Page
+/Contents 1556 0 R
+/Resources 1554 0 R
+/MediaBox [0 0 612 792]
+/Parent 1553 0 R
+>> endobj
+1557 0 obj <<
+/D [1555 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1558 0 obj <<
+/D [1555 0 R /XYZ 86.4 580.969 null]
+>> endobj
+1559 0 obj <<
+/D [1555 0 R /XYZ 86.4 379.343 null]
+>> endobj
+1560 0 obj <<
+/D [1555 0 R /XYZ 86.4 209.431 null]
+>> endobj
+1554 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F14 1030 0 R /F11 1019 0 R /F16 717 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1565 0 obj <<
+/Length 3115      
+/Filter /FlateDecode
+>>
+stream
+x��[[w۸~��У�!�_��=g�$=���'}��-�6[I�T����@��(Z�՜^�d
+��|3�0��L��g�<{�J�#Ns=���XM��pG�`�����T5�
+��ʴ�/��j6g��j�����fQe���͹��N���z������og
��V�U�J=Y��>�J'Kx�zB�pv���[O�p���j����g4�ٗC)����a�aY#�#A97��f͘
��	�:�𶒶m+G
�Ўft����|��M�7��y���*�V�9�3DY�Z�L��!��ǘ������^E4�s��F��Oz�� �+x�{_����\q5�S�3d�_����оo�)q*h`��� L�fB�
#�$ԉ�d���Y�k��oנ	��7���9�h2g�(���i�(�;��η�s�4�^�*�T��4;�d��dm�CN�ՈQC(��G�
�d��"�D�?ɧU� �2[Ϡ�v
�lf��h�
+_�E~
;�U�I�"(���Y����$�1x`�N�

�
�	
1.0���Y`�`
+�ζ@�WԺXgU�.C�r[d���o�grZV�
�y
=��$�7�u�ը�N�����72q����!��̀#I�E)�w
q>��6�J#h�Hk�i|̳ep�?�{�����k�g�x�h�*oѕ�(�N�°bg�Z��
+�1��=a�y�9H�Z�~���/2c��I"��A

�y�PQ��_���ñ��
��}�WG�yT��M�4!��p�C
;@@���'�S�� {���_{����&
Ȃ
�@
�Bw�y� 
펐
+O;� �w���
4�<��w�
(���Q�V�.HN�m�	c�)�ئ��(
{���KXB=�vYhOm�����W�
-�V2Zj�O ��<�Q at zVHŠ�
a��(j{9���@xR���(�	5�I�I��pyט0��w��/߾
A�TD4�ЬZ�Sc�
+ӆu�a����$�#�#��H�],Ҳ�ޮV1@�i5
�:�M��0j'
��ʓ�	D	��|���Pv�A-#����~�q,y(�(o/;OC���=�9x�2��W�
��N#��
��0j�JP
U�3����`m����vT?pq(�=�]�UZ�����|~�^'�U�U�  q� )R\)'3��.Ɍb�P'!3��E:u��OX�������P��P�<^��1@�0�1��3��h����t�1�h��Ly%8{�`X%���1�ͪ\U
�4��"JcUC���U����M��l��F�V��er�V>�o
�Ϣʋ�n["��'���v�U�� cJP>�I�xq��OeZDz5!���)�=����?�%R(�p�z�0
��(��k� 	�A�� 	9��o<�)<(njD��i��>ߥ��u��Yo&�h�"K=W�H�b�&8��!B�˜<DP�5Djy<C"9���U,��8B
_l|�8_��H����tGQ���M�#)D$�Nb'U/�(�9��������	N{�O�f0V+M(��FZv�!	�?�p���0?�
u��K�#6t�w��`�.c���D
��h�&�4Ύ��8)�O��'%E�
��`�
+�w�I����ð�Lv|(e
&CLc�$�A����Z�G��^�[C(ջ
RC�+==�zTg�^��N��%��>4�C�:���),Pʁ����e_��j<�<AQZc"'`"��|������ 
|݃���_�p�ո
+{ ���-��l�A�:�{�z��f0t10��#����SE��pˉ�I�	�D1 at Q�3d������b�A$��ƕ�b0�N['�ʃC*P����]�_��8��᧋�* ����`$����W�@$��H�~��p ͜�S�E���R�H��I�}2�
��v�x�s)%�1���F����9�	q��=�,���	۝ſ���#hہ
+k?�@���m�w��I�O8�]ߧ�!�����`���:�^����I]�@��	ʝp!�wIY�7��X�o�|F�C	ShXS(N`5a���ֱ�q�~3��dnL{)4�O�=��D�t���t/�"\��mxp [36m�-h��-��[���C�2��dU��(W��S	��֬� �o��۪�%ܷ��
18�4Vt��y�&� �Ԕeڕ��!�
�r��e�
f_;t�5�R��|�M�L]=gh��o�tL�pe>Ƿ�Cka��;�]����H�M67�f���Y���<h��p�A�w+����($�U��»TG��20mفB�j��A5��Ps��s. ܓ):}�n����'9x�{������6��qBp D^�
+,�n|��_5a xK|Os
+�Y�����
�\�v�����$�5hh�VjὨ�G�pĖ��a#�ll]�kP?��
����"G���:����x^'��*K�p�Zd�ۤs�������
�/��
�������k<��/g�v(@HjX� I�:�arn��
�k�.�@���8fb��˨��/V��80ի;�PMH�v>
U�oK��
��&4�ۻ;��
3y~z����e��8��M�ޥ���	�C<ßb�
�[t�7�aʷ�y�U=��0�Z��EZ�Oh�m�W�#Sh�.l�n����ߥ��OPtD%QC{���Xv�F���`v9C��@�ƻ�u�QX�̆/p5������Բ�fc;�
�6��X�3Y<t��l`�x��=
#:�����-�Qk����~0���Mo3\�mZ�y��� u˫
3ž �
��3�aϱP���9'��)�Х

�6���_�: �x>¡{J�G)ᐰ@��.�*���&���۞Z
���@v奖��b�[bM"\]�0�j���;�<l�/J�f����۳�bRs�z��M���*��
+-eUlն�
#�AL����c()�„>�W�t
~,����z�e|�[~��{�)à���^X��Fs�iz�.�1�;�y�}�ا�ٜjH%T���mUߌy�ʯ0�
���5�#�5�K�M��}�(�

9
նw`s�����q��2��(��J
+��PP�Sy�};��Fnm@��P@��,��-��"���B��D�
+���ŠN��U�D��
v�
<�\!
+endstream
+endobj
+1564 0 obj <<
+/Type /Page
+/Contents 1565 0 R
+/Resources 1563 0 R
+/MediaBox [0 0 612 792]
+/Parent 1553 0 R
+/Annots [ 1561 0 R 1562 0 R ]
+>> endobj
+1561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.664 471.004 260.386 482.959]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+1562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 192.855 173.628 204.81]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+1566 0 obj <<
+/D [1564 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1567 0 obj <<
+/D [1564 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1568 0 obj <<
+/D [1564 0 R /XYZ 86.4 529.521 null]
+>> endobj
+1569 0 obj <<
+/D [1564 0 R /XYZ 86.4 367.867 null]
+>> endobj
+170 0 obj <<
+/D [1564 0 R /XYZ 86.4 165.232 null]
+>> endobj
+1563 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1574 0 obj <<
+/Length 3226      
+/Filter /FlateDecode
+>>
+stream
+x��[Is���W�JY0���!��25vK���MIL��2�Y���
 �ZV��O
� 
���?v���ě�_|}s��7\m,�������("6�Y�8���6?F�\^1k
�/����7"zuI�.9�����5���]^��?~���t���*ˏ�?߼�xss����6T$1Bm����7;x�vn�棛w�n	��~s}��8�z�N
!��:�XFە+Hk7�B�^[f3+�p��/:K4,�,%T+/�W?�ޗ�i�:=���d�͌0�.�����a$
Yc�#���f�JK�L�$���ޛWF�+J8���;�'�)����g*��bo?�t*N�D��/�]c��M���P8��l��!=|�w��O��}ЯF��W�bLK\QE
V�:-�E�تw����+J�n
R4���m3k�7J-ẕټ�
7cт7o��@�D�6�)�"-��FUCz�
�!,��f���H
�����
���V�[)��
�X)=�*��<����E�T�
�2�UЊ���V�ׇ��r0�$�Z�����(
�A���
՚(�2.�*͊���(͚-�jϜ7'�;�y�� [...]
+.�c��J
�(�w:�������1?<�`�U�g&��Eq�[Ӥ�[E��ot�*ކ�E�)pH���d�b��o�<B�of
+��Z���
+�Q�BN�����
�:
�Sk�"������e�B��/\�
+/�t�1<�Ɇ!)�f��_�T���a�~��RO+����&a�e��g��^/_>�aR���x��8�.
+��P�]�
'��e����"�^��ns\�	8@�6|�~�b·��GU��z
�D᭹�&V�+@r����{r}̪?��G!	2Z?er�A��䜇��ͥ���0������	'�����������>^��f3D�6Z�.�rڹ�)��&X�<^��?d�F߀�Altԉq�o�RCij��ҊY1``�0��h.O�Ts����*��Q�w4�,��h/�띁,��%�4G�H4��BHpH�%9��bۂ�R�j|R%�9���'r�#���;�.3z�9,� �0��c��������Bm�#�
+��m�&Uxڒ+n��H��OY����0+ضkR�Sߜ^��T�ɷ{(s �^V0����J�[���_g����
�`k�K�τA�)�֡]	�12�����xd�x�-:E{o]b|��{���Z^W~��!
3~�~���
+��|�=�5p~_$w8�o�Nj�����j��@��eA�_�!g���-�%ߺf��I��e���Fhj4a�
zӻFBE^�?�4_�;gU98�������NT�����wZ�����24ġz��=4�!iFQ/��12D!���a
c)���.�uX�C�bvV\���,�玾�_���P
��Y�p���p!�xL-��`!
��B�h���m)�y�
+�bmn�n�P!x2����*$
Q�
��P�����g��R"V�B/�n�
+�	�²k
�B��<�|�%���aC�|�Ol���=��@ޱV�x�h��ÂCLB�Y�l�dQ�R�!�
+����$op�
\4�Ѐ�?
8�`g���?z1� 
��@�Ŏ�ː���g�A�v (���) ,�
���P�OAAJ�x�B�� XمZ)�}K�9�[Q�R��̀��� ����D����|�I��)b9&ȷ�3tV h%�R�Fv��
�ib�����@j}�
+��
p[�H75�X��iPG׏I����Ȋt[�/Y[4�9,��^h7�v=�᭐Vhw0c&���xu�V]��2��D�゙�&~�JkpCÄa?�/�Ǵ�ׇ��
�T�3��Co���ԙk
+Zzq;P2���"�嚌0%��)�U�~��am����th@�����n at 1= �Tt@�'U��o����9-�b�TL����*��
�[�~8�}T
�:T
.0Qw�?a˘:Sփ ���W�%`�U۠,��OA�wA
�7��0�k��,�?[x����֬�c�
Z<�nB�e�~o�~8�F7k�23�܏8!��襨
Q��v
+�ܧ���� �ڰ����S���
+����9\�Ҫ�N�c��[����Ͷ�� -��҃��
;���ek=&m�q�����-��S~��A�
~ɸ��$�������s�\�@�����k��"�V���ں��	N�����ؚ�,�y�E����O�G+>ﷅO_�ȫ�8
��%1J��I�5���+���f9�u�?�Jq,��#�����Zk����^��3���Yv����Cr��.`ʦ=�&,^�e&l�t(�_9�oe�˾��ˀ��(�lʡl�k'���jxP(��.
\����Yd6���f`Ї����k��cl
n��V@���QÏ]��[�
��� 
�(;�(�0ڌ�k����al]�bDk��
���}Ĩ���N<�ֵ�O���3�49_�7� ��X(DD
+endstream
+endobj
+1573 0 obj <<
+/Type /Page
+/Contents 1574 0 R
+/Resources 1572 0 R
+/MediaBox [0 0 612 792]
+/Parent 1553 0 R
+/Annots [ 1570 0 R 1571 0 R ]
+>> endobj
+1570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.574 505.848 403.045 516.696]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+1571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.653 196.17 382.124 207.018]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+1575 0 obj <<
+/D [1573 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1576 0 obj <<
+/D [1573 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1577 0 obj <<
+/D [1573 0 R /XYZ 86.4 391.856 null]
+>> endobj
+174 0 obj <<
+/D [1573 0 R /XYZ 86.4 178.16 null]
+>> endobj
+1572 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1581 0 obj <<
+/Length 3317      
+/Filter /FlateDecode
+>>
+stream
+x���v�����
�^э��0
�yc��ĚI�	Q�A���h�>U]��E���y/'��Tw�[��636������
gQ�"�����0P3#� �|�n=�q��XJ+�﫤\��,[,�<�����:-�j�Q��\E���}s�ջ�_�8
�f�����j{���l���of,���=�uۙ�Q �+��\���k��0(-���,
��-�
E��� 2�
X�a=G*e���c�,�x�MH�z�����I�]\V�7�����<����}�
p�1�
:�>���ў﯑�x�f���Rh�q��x�Xj���?���i��P��C�H��A��a$.m��!W$��
��m��=]��g��{�?�P�X
+)0�
�E��eR��t��>�;�q�y����Q!d��jt9.X`�j����
oÙ�H6{�
虝'��'�URљ5
.�*'�[p��� ��M�Vǻ]Y, ��t���_�qp���MGw+����-���j���u0$��
ɀ����~��x~]
֟$iOH7`�����o�KD��J:P!��#"|
�h���>�}XӢ�H�$��;��m
'����Dx�	���݀��Qo!�
(XM�jF�J@�(	�mV��Wx�/�1���
+���,��v���4�|�Hs�����;}H�=z�u�ʓ'k"`� ��	��Z�;��@������������z
g�dlB4c�)��1Ti�D�����5�������,�7)SDM��ٜ���}�`��!�ӊhU�
+8���h�trH;�����ʮ-4���#(ɽ�߼�����S%�e\'Hj$He��ӆ�j|���ΰG��گVIU���kd�������
j�s�

���&�bͱ�}��T$q�E�L��G�}}}�{`_��}�
�>�te�g��0:P�€���uF��=%LN�QR*�a���с'�D���eL���;Oȴ"�s	!P��~B�"���ę�098��\'b�"6p�c�%�Oxe8�
��('�p�:8�~���~;a�A�B�z�
LR�%�*�
� l�c���/���@�0)�`��:����a���F��mQ'�����؉ ��v>Ҝp�J���gD�_�%h�1\��ޣ��J�wC�ޣ f*���
�r��0 at D$Z�� 
̈�h���Ԗq��(��{GnA�����O�q���LV�w�����ȈapX&4���Ϗ��cL?Ҽ��|�
+����>��!ge�[���&\P��q��R�R��-I���7�p�H0H3H֬�h�>�7��A�o�nF������XI��E�))
��h,��o
��xw��-��#1�nO�%q�\�(���O)�bX/���/�eҴ:�\����)
Q
E�ҵp�)���Rd���'A8]&i�Uׇ�8څ�KkQ)����椢S<��!�.ӏ@%n�$���t0H|��<y���Ͷ�W�ԱW�l����8_�$�J~�~
o��y�贻xUeKڨY�ػ@��+چ���n�_9)ӕ��UD���+
�X�z���с�q�����<��:��ߐ'�<�8ˀe�x��`tf �#�X>:
%ٯ{��OO)�$W�"��_�
+��'W��� L�g��N�֨B"�;��^ ��࣪K վ��d7�:4\�X�>�G�+�_�i�Z1�b�ݟ
�'d �Q<H�dk����¯.1�W�D�T�(��h@B4���%N�!,�TE�����@���q��^��!y�?qa^�>��1�2`z:��+��a�/T�l	@͉�@[<ݩJ�ŝ�2v�@W�̛��'�E�y�Š� ����$�^>�S��K�/�B��
���*��G
�����":��Y L�t���.&l��4�
+�c4mk�n݊�%�/
��
rp�nlGS]�ꍪ�c�ҷ'�{ �&,I���N��u5m��b��%�!�C8PmK����S
��\&�|�cU�謲�Y���\z���O�*'�
+Y��H}�ل��~ѥ'����O�a:
�O`?�(�a:�O9n��K
*!3/�c+��#(�l� N��
a��,&
���?��(h'S�Ў�'��JG=F)m[�3)��q�Mp�BM�����pع \
�o�⇫��D/�Ã�Yc7b�+��8
S�[�� �.�
� k
��b������v�F�Էp�wq�
�f�s�eȚ��s�:
av"��a�	��E�UQ��(a
zH�7��}�*��,���O\:��I���2��.
{߆�=�SB�}�J�\L�0��X��(i� 9���W�c9�����i<�ۀ; �PR���ޑ�4�0��	�� |�/ʴLS2����*qqк	��#X�n��c`a���I��O��ĶI�A�vi>:pW�TH��T�W.��}��%�Z<S��N�p������F2C���D����o�M��{
D�@���ttj�P�@�m��ʛ3#��K��2�� F�������B�,.�?��য়o�]�P��
�y]��ƞ=���1�
` 4��`�8��z����8����7�0�ˎ��;Y�
yʜ�ֻ����78���;l�5��a��\�6
������
��
�y<���\�o��t���Ğ�!/?�L��ķ}�����.�0SL� �9�֔&Jp,t�˱�,r	� �&�:��[I��ɲdgmA1�3�cC��y��PKu�A�*�)
�������՛���+���%
��fs��AY�f��s.1�g7���]���qXH5���O
����I� v�:.l��.�
�@cO�a/|�
�����k�Q@&
.�=Q�S
���
�����7~zỌN}z��Rj�DVtѕ�8�G��aJ��eR���5�h*�@�W�o���IR4���.��Q|ۘe��ã�tG
+��W�)O�T 2�@��]!��UMln����D$��nٵN0��p�J��S�t B�<�z�Q�|��whI�:��
�f�g�~����dS&�}�Ґ�`2�}ujö
���6�)�F�X���X����!��	ځ�2�{�����ワ5��6&m�L��jD�N��_<\�we�z�����c (���\<���r�Q��[`�<s�r�Ʈ�'�o��{3�]�^���nkQ%y��/���VR��6�{}���c
r��+����N\E#�P�|���:�ws�Ce(�UBC4/�zťw7ÑA/�ڔ6�N�nm�Ѓ��0-��4���?��������&A^��׽��Kf�7�,M�S��^	}LS��=
ak�W�p	Vh�^�n����
~�
+����
�_��
��
+endstream
+endobj
+1580 0 obj <<
+/Type /Page
+/Contents 1581 0 R
+/Resources 1579 0 R
+/MediaBox [0 0 612 792]
+/Parent 1553 0 R
+/Annots [ 1578 0 R ]
+>> endobj
+1578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.804 533.033 408.276 544.158]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+1582 0 obj <<
+/D [1580 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1583 0 obj <<
+/D [1580 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1584 0 obj <<
+/D [1580 0 R /XYZ 86.4 430.889 null]
+>> endobj
+1579 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1589 0 obj <<
+/Length 3058      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw����W�-`�i��@�r�%9O�d;&���8�x� #,Z�}���`@*
'���
����ګ>���Vt�����ξ�F�UD"����vj"W�GD
��ڮ~
=_sM�	��4�;_�P��Y��\��//qH�E�.^���M�,��N���立��Wg��P�+�RQ$�z�ٝ��3]m��Ŋ��v�n%ED8\e�˳�Q��>����>���>��*�V:T$2bi�-	�Vn2
�-"&4+
1Œv�{����/���r��(�9�T�5��LD�덑�
@8տ6�Py.�,�'o�L8׌���}��`"���o�o*���������$BrK��Va"�X9�
���d��
�8�
�4a�$G
+
w"��}�n�}9��p�n�Z3���K_$զL��3�KW?��,��O�גG�m��oډ�S1Ή᭪��sb
�D�Sm��@�&��2�TH1
�t'W;
gwE���;�����{ps?�
-6�<,�Áxj���d�ᑄ ��� ����Zhp ��a�l��ɶٸ�%D���22���[���_�Uy��
ZW���r�9�f*$!��(!�bZ�o`�ۭ�P�y/��D�zG�1��xx_�[�.����cN��>��I.�t dP�)ʡ�
���s
ۤ��j��Q;.�On盬��7H����̄�Dh(�o��f�C���"
�@-���	З�[I)�1aAuB���.��C�yCj:T8���I^ԝ�

o�l�a�:� A�0�A܇:��{�
�7/����;R{��Ͽ{����i�U�y\7e�9Q�������&������ܭ{���I�(����c+��$BB���y�@�
�
9~q����;�
p8-̿eVi�L��=W at v�+�6b
����|}9W3I��Z)�
OrI,�+�V�{���~������(��] �W���D��S�}x{�܀�M�$�����&���&�|0��z9��@�N�C��J[�FR�o;�7/��ELa��4#Cؘ�ׯ_/K(��j�Ъ!J-�j(�Hx��s�I$�1>QO�("�un:�F�K
2#�f��]+�����GȎQ���%�6Oa]��>��򪞷�u�5"����W�e_�e��>K����|��iJ��A�P�!4���`W@�e�
3ܗF%1�c�Es0�,K��Z��B@
�o�:����	{�m�۸��IR�2쫍q>��ŗ�S�� �/U��8!��iA�3h��qXAj(n�<� �&�v��e�O���o��N�B ���cLE�����(��)�:�0'�c� 
5
 >��g��!/��,6q�#@o�����Ԫ���>
+d�
n�������1K��?��(Z �jݒ�C޵}
+��;7�T0�[��7�y�����f��ŠCcc0�Ț�L

98
+���u|>H
>�	�F��c|
��� ��
+Ju
+ �bZ��x !

@�l҈S �7�K ��x��5�mvi���m��]�$��
�0@��G�F];����/��҈��֗!?��f޵�f�ѠA
���u�������ܨF 2���Z#�g�w��P�1�� ��)T�w��

�[@}&��nSPJ�f��6q+����!����­�y�s
+��/R��>'8
�
9��>��RBF9�q�V܄�@}NA�Y׈�o�9�-�3b�����_��|���Вsh^�m����
+��@�
%S4x����s���}䒥y�/_�"s���=
dx�������z���4$
$y�_߰ ��{s{�/�M�oS��5�0���lw��ƿر7[������d�u7Xx*�-��A�T��l�A������}�`�4e�
S�FJyO�^@���pnS�~1:�'ךs
� {
��1v�!DPE��(
���{����v	À�����
W�{��_Ը3�o0A����&���ȥu�
��Ο�*F��7��+P�̡$��[���.����-$�L��(
�,���@��Ѻ(��V�m@�����QQk���<b
�Ӂܹ�hMn��^��E�)n�8_�I��֍n�:v��$ٶ��;^��B��S�
�2��W.�̴�����P����m��y�
��<�e�ȋ�ϱ�?-��!a���U�����2�.�{w�(�#UIO�ū ��Q(�؁^!"
�'�M0��M۶N��9������w�T�OY?L���tF'��$dQ�Ȇ7$��Ad�T�1h$G��T���m(�֨S����h��D�U���1�� �O�ܥ5	����y�ct�{��2M��4
7��z�Iyx,���uE���3
{Ȃ
�9�O�R)�A�5便�
?ׯ�=�
+�IR�[�\}_����a@=gX�m��^�R
+��R�Ƹt$�#bt��lİ�8R�#c]�Hg�Bb�YV
+�<�$;�Ro�S?B)k	���$�|@��Ɩ� /jw1u
�
+���O�Ǖ��-$�[‡31)�x����  M:櫙Lُ;�����Z��%%�	i��0P�<>T�Z=��]M��Ť!��	$Cw
[t �fy��e��eJu�l��~sW�H�����QH�7Y�s7.��ͷ~������r��_�m�B��\�H>&�ƇP�;��!ږ��&��"�c��:��}mu�
�o�����"=.9�`��Pܕ�΅H&�H�AYS��
+
+I�pMueנ�u�P&�U�7����ZM���A������
�(��c��׸
+DZ�Z�ڂ%��(Y4�z$�K�� ~��b�JK��
+û0 �e�q]�n����bA
w�}�h��K��K0:ݽ��ۄk3�a�3Y�"3�;�o�

��d����Ta}
?V���	[��im�lL�u�kp�/�����<�u�Kl!�
�9�P�g��
ݛ�3O�t����h{%��hm�6��UX��x����`,�2�7~ݻ��Ӥ�zh��@���^�!���s�?���%_����%P���
+L[�B�M0�����a ]�`�lp�7�x��v���[7X����W�<R
7Z@�
+5�6�|�Ͼ��|�/�IV�
+endstream
+endobj
+1588 0 obj <<
+/Type /Page
+/Contents 1589 0 R
+/Resources 1587 0 R
+/MediaBox [0 0 612 792]
+/Parent 1553 0 R
+/Annots [ 1585 0 R ]
+>> endobj
+1585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.264 157.525 222.987 168.65]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1590 0 obj <<
+/D [1588 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1591 0 obj <<
+/D [1588 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1592 0 obj <<
+/D [1588 0 R /XYZ 86.4 476.024 null]
+>> endobj
+178 0 obj <<
+/D [1588 0 R /XYZ 86.4 236.963 null]
+>> endobj
+1587 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1599 0 obj <<
+/Length 2666      
+/Filter /FlateDecode
+>>
+stream
+x��ZK�������L��y?����W�T��h)_d ���K�	p�ͯO�
 �ŗ�**�@�����׍��MD�O�?<:r�i���ud5���h���<�0�D�'Š��,YOf�b1��Q�q���כ�,OW�l<�NK;Rl���������
lh�J��X����Ň?h4�^E�g�O~�]$�#
~-���]��6m{��1Œ�����DJ1��K�!Ga?v����}����S&�bm~�^mnn���|��
+��Ṭs�Di��l��vu�.��$Ϧ�]���̞/Ë���$���ߩ�Y��uL�rF��庿�*��7�2߽h�CɫW$����E�d׫u���Y��
�ϓ	�M��XM#N:�cv��x������ѧ4��_��G��d�Z�S$��ó
�O���_�h |T���O)������J�l�
s [� ��k��Ӝ'(�25�y�t�|���h!�*D٬�'=��X.JU"��/3��1<����>w�	[��w�7	I
�.����N����K�>��W^ݕ�
+ �u��<�����5�RVwY� d
��N�]����ׯ{����*xJ3��mac���?�Y��
�#d��}�eAP���I�Zn-��6M
������I��9y{��AY�`_�
0
��ߞ@W(�����$�
9���J!C^\���dNv�J
�
��|�	N����AA9ipf.�>�,bw��u�
P�D
+�Nyo�Aޑ�3K��䍴��S!OQƁ���D��0���eK��Ui��E|3�(�F�
�]��p�=@�u�"$#
+nC�����@�7%�K��gI���nV�U�h�[�8��
$'L�J] �S����}(��˜f��O�R�
',m�wKg׏ڵ�ZVq��zY`��;�
,�YP�փ�
4��A�
򇖪�?�E��O
+�h������.		-k�?ʻv8
3 ¨������Y�QxRJ��a�x�
mx�
�ꦩ�xX���s�I� ���+�|_5��
`��V
�b��1�#�`_��|��N �j�(\�<g���C���	s �<,���B{!��(PQ�ǧ�
��+��(a'L�!�v����.l��,=
`
x��-*�l�.'�B�f��.��2Mz
��\�ܷ�����Qn���&�аP[Z�L��,����
+����i 7	��ls�����}8�P���
�u�
/>����b����
�5�Z�z������6�`���bU�=G����Oߐ���0]�=�@h��.18K�!����B�!���}���'�Z �ΥC�,�ʾP`��tÁ���g�.���u��t+_��E�
����p��Q�uO*⤰v��͒,��,�UP�5M�ne��j3 "
Dm at J9�r�K��
�!�rj�B�&�2��0�@&���(��G��VA�
F ���
1��ߊ.X����,�
+;?v�����"���8�8ׅ��c�L����2�$�f��/sD+1 O�8ؗ5x
�1P��]kࢶ�eX�z@
	�X�H�I�-BUa������=EBΆ&���x��׿8��N�b��\�n�Y�I֮SB��bv�X��
7����0i�Q����`?U�ƒ����)��g�gng�>y��εt0BH�>[
�9���׎B�8�2ue����F�Qx���Le0��F��D0�l���B
�=-��`3~�DR�H�Ѐ�=,�C/s�>ں�ap�.�K��+q��4��oV"�o�q8�:gV"�>-����0�;b<"����wl�x�3n�����
+R��=A�yɽ�և��m���p�:1��.f����H���/;JC��!F HJ3�}r�d;��>�U
ྦG�ܽ��վ��7��@���վ7�_�� ��C�z`J�v_��n �j�U�v�-�P�͝�3����LY$���0-[�ӯ�j!Gh�b|��6��X:� 
Ii�
�l���\��۵v��c8�1O���"�cL�@
��U�c�6ֶ�F&���,<��]�Y�k>���!��:YΊ�nVyZ����=Z����֘����?e�v3�=���4
+v����X�I	���Z�	K�N��j���C6�^��:yp� ��疎�eR�q���
M�� G��M3-O�� pl�� �N�j��}%�>���F�@ba'�М�����հ�c�S��}3�y҅
ps��r� dޔ�v��|�ˁ�4�\��9S!�����U����[����	@�l�`�������e��iv��o�
�%��90`��+1�� II%�
83gȉ�	ͫ�;CO� p� pE �V @��	�Ù"�q�]�&��]�4�+[e$���vE9"�g&޾�|��k� O������Jn�bmg���e�����PO�wrv" &)f�G��e�
;qH��|�4<�
I	]~��|>=|��+�&t�Twl�0ߪ�u�P�Cc��^���o�0�F��u_E�
{�������B��+XS���N>��Ni0�ſ�־�h
� ��
��J��vk��
2WJ��#�j�,�ju�_{�6�a�V��h�v��iG�
d������y��:�oy��ɻ�e؉�V�(ņ�5P’�پ,�ޛL�gY&��7o�OO�&��jY*�m���P�Ox�N��b��bE{�T��*+i�1-������x�
+endstream
+endobj
+1598 0 obj <<
+/Type /Page
+/Contents 1599 0 R
+/Resources 1597 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+/Annots [ 1586 0 R 1593 0 R 1594 0 R 1595 0 R ]
+>> endobj
+1586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.193 687.689 434.664 699.644]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+1593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.14 445.941 431.611 457.066]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.9) >>
+>> endobj
+1594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [314.35 433.986 341.803 445.111]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.10) >>
+>> endobj
+1595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.726 233.821 429.197 244.946]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+1600 0 obj <<
+/D [1598 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1601 0 obj <<
+/D [1598 0 R /XYZ 86.4 638.361 null]
+>> endobj
+1602 0 obj <<
+/D [1598 0 R /XYZ 86.4 416.463 null]
+>> endobj
+1603 0 obj <<
+/D [1598 0 R /XYZ 86.4 216.298 null]
+>> endobj
+1597 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1608 0 obj <<
+/Length 2747      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�j+
c�3��C"�.ee�1e_�
 �PK
+ ������
@�HQ�U��E�c0=���u��	�� 
^��ru��W�%V1\-��4�Dq\-��N�L�ZO�����tʍ������SN'�=?��#>Y����x��
���m����?�~=9�:���0��I�P�|}��0X��_��pk���u �%
�V�����Я:l��t�,%T+���i����Ô+m&W���T�br���t�Hp��~��8ef��47?.���

�V�/�6�
����ZM<�A�Q�y�J6q��	�էS�'q����{���cH�<�l(J8���Rb��p�����	�|
e��1�~����m�&V
0A��_�&�ٍߕ�/;�D0S}"�$�cJ�G	��u��E�����
�T�7q���:ݠ!�*Y�U��
+�a$�k��*��y����O�FUr���ME�s4�-xnt:��
\��x�p��Y�.�
w�i������i9�4Kn�M��;1�t*�$Zmc��͕��0�7�!�v����� B��
�F
{�f(�eGc�6f�L�:{?�KV�,.^ή�U��0"Jч/�k�^?��8��{%л�N�Q܇����*_�LN~r��6���J��a���B�vHN(7�6���!�д��:^��u�n)�
՚�LUD�,S�O�v�<��y��հۀ=J��G�.H��1"����~��
@Ϋ�m��s'�a5��Y�������dQ��iVܦ7)�U�ox��}�Cم'��T��s�#�H�9)n�ʂL��
+
�YN���+��u��Kh��z�jXE�fG_I7���>]:���xop�0b�0g�ܠn8
�N^D��ȇ��"�ը���/.Ο�=SX��ԁ��S
S��[+a&J����Y�2T�ꥥ���!�����������������vE�@�q�=�5D*I�qu@�
Z����$���<Ͳ�;5
+�Хt|�u5^��r�¹�W{���
�Fn�{�y2�d���h��\m�5b�G�{2�|ԅ
�Ѯ���
+iC�����sv�]�
/�YuXR
������?i/�&
+�E��)j�< ���J�Ʈ��	)^�j|J��߿
��iNG]!�]"q�CX�MA���}��!��;�2��q> U�j��싛�z�<���C�oJ-q�"h�P��v	�e��C�l�A��b�o�]�
�n]_��>�m??������Ma�������q��6n(�dY�u�"��K�8*��E�+�p6�¢g %�h�a�d�����QNroҍ�*]
v��o��7����6>��!	�'�j
��(���ٻ�����X�w.-��^Y�^�F�$�(㍻ͷ�y���m���H��G��Vu�^[	H���b+�J�T�(8��Bl��BY�ach[��w����r�ܟ�sB
m�I"�H�~��
�F-5|���u�!|^}�� |WIT&��%����c�ʻٱ^���p�u���TB{K]�q3K���2ʈ$kI����>6�Y+�v�,�Ff Ղά�F*r�D����*+ka	�lR��|wR�
+2D �	�*O0�{v[Y�rB��
1�~�TF��/./��Ӆ֨���ͻ��J'I72]��Aqu��� A�Ρ��&�%Yt+�/�mg�{�G�y/��Tcb(T����7�
�

+�
��O�M^��8���F�T�:Tƶk2��2���,�hs�HV�����M��
ͼ����Nc�o�%a��y�ckF�n����h�������w���a5�?xv�f����$� s
�|��p�
�k0-E�:�������L��e
EcB�e�����d��5����x��W��mȑԵld���ڐf���A�4�ц��*YF����!��Aސ��}�p�)�}��
�����
�
�}��.�qןo�,v��3�}2�'w�B�ͅ9�昘kF�|�XP��b���J�B���`3� h���h�c�[.�s$��8I���A�^ǟ���1L7{%@Mz��Q_����cF�xp*e�S<#P<

��x�8Z
WN�#��K��
D�M�#Z�h>����
�w�j��Ie���!�����/��4��������5؝��	
9܎6�1�~'����,'ҌB��T�~ä�R�B�T\
C:� �j[B�6�4�
�tj��?D:
�fJB!0���T<4ǰN#H�X����_����4(�(�N��1��BkTi	}
��k����H��7j��i%�E�i�o���[��}�	���<S�<C����L
] I��X
[e�5��
+�.���^��W�(�dr�SE�-�	S�٣V���VyZ��"�Gh��Ŷ҅Wݛ�Y���0<��#�x�A�='è�D33��0
I�{
ϫ�� (E�Åw���%���0�C5-��K�
�3ijB�dh)ٲ����Զ��q;k�����*QQ��a����B���;�{���9C�k��͝
)!ꓬ�k�Ƴ5� ���u~����:��
+����0�p���r}4���%�����uu��E��
�������:.n�ɝ���)�$
1��¦M�F�(Z��8��ߩ�R)�@Eh����=%�(Y���a)�E
+��F,�.���ڑ��H�
��3|
��N]<��PG�J�q���LU��&�
�	��D�1���EV�ES��&-F��qM%�A�Br��97!��#��ˬ����o�����9�JY�r
+endstream
+endobj
+1607 0 obj <<
+/Type /Page
+/Contents 1608 0 R
+/Resources 1606 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+/Annots [ 1596 0 R ]
+>> endobj
+1596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.131 675.733 231.602 687.689]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1609 0 obj <<
+/D [1607 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1610 0 obj <<
+/D [1607 0 R /XYZ 86.4 647.293 null]
+>> endobj
+1611 0 obj <<
+/D [1607 0 R /XYZ 86.4 411.212 null]
+>> endobj
+1612 0 obj <<
+/D [1607 0 R /XYZ 86.4 198.766 null]
+>> endobj
+1606 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F14 1030 0 R /F48 966 0 R /F16 717 0 R /F11 1019 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1615 0 obj <<
+/Length 3334      
+/Filter /FlateDecode
+>>
+stream
+x��Z�w�6���Бލ|��}{�&m7}m^;�C�-Q_%�%���_�3�ߒ���^z"	���`>~3 _�.�⫋__<�R�E�R+��z�H,ӋX��*��^/�G��˥JT�Ϋ�*��.�"�nv95o��US���r)S��Ȩ˟�������
d�B�i
K�]����5�|��L����_h�2	o�����ܳ����Ǯ�1�i6LĖ8~���w����r!
�h�s�(&T�22C8I��zH��7�L�J����)�J
3cň���];�ALϿ���`�R��F_oq۔�VǪ��2�l�Ѯ8�YE�u���]yE}EM�W�}��[6 �X
+#�L5��T��l�z8��R�8�
$<�g��KG�=5�Ǜ�.[�n��K�Q��C
�Ec
'�<M����w�}����
��� z6[?'i�k*��	ܴ��ٺ��
+6tl)K�_ߐ�*k
�V����Gnx��8��/��k�H�����ꅅ*S�z�y;�LT�$����H�HP��e
�\oQZS�H
+�N�It��5
+
��
+[�
�=T��0���l�F
DŽ!��
H,���p뤺TZ��ۡ\W(�mv�u{����=)_�x-���Ey�i��Kc�lw̝^с
�8��w�f����,쉒��
vNj&u;�G.�T�3#lÉ���S?����	�ѓT:��&k{[n�Q��e.G����`��P�;���f(Z��DY������ƷMYu�в��A���I�������v�t�V����빹R�?U���2�e_M'4�I!�੟��j<o��M�vSf�����傳�u��k
�}���{�xU�����Z�\��d'"�I9�Q�}Z��B
�E�#��A�qX���I[�9��[=
։DP����Oߔ�]����&�OG��
���g^�nȋ�V�AE����Pza�ހ�r�X�a�t=
���3MU�ꭢ�tD��@��ݖU�l��~0�0��L�2+:1�����h���,���ؓa8IY��0���	��\�Wy�,�WE�����%�����&0i�Y
PT2�\ř�^�^�
!��MRD���e��F��_�F���JEI�b
+���3 �誤.g��gp�.*
��<�����Y
+�
�뫼^U�]��=d�d�^�p;>%�m�z��j3�&NFh�&�
�瀜�D���P�oΨ+��r�o���k�����pqxp	eb�
�|���sG
�'�.�<�v�
�C�
c�B�����=�=
B�i�	]1�]n��j�Y?�a
+��ڴ�tFq$g6�A�gt@�$n��,֤���;`w��
�-Hx��;�c�z�꤇�$8]�T6mAP�/+�n��#ݟ�9�)�l�E�)I����	 N�cX
���C�b�P~R�Q݀��kVU�O�Ƃ�]~�m�3�aUq
f<T��p�l�m�z�I�<qj�iG��xH\�hkN�xC���! 0��(�D+2�_X�Ơ�.k���� \�m���u�D���|g��Yp:Kr
2�X��{�~IK���r�|�!-����T����D�R��2l��n0��CD/��_D�����ܳPV3���$�|^�?M)Þi �r$@8�)]y��6k�-�_W6!Y��
�H*z��q�l�n?�c\�n�9�����;�����[i���Q���T
:��T�����[@0�0z8��4�� �jW��.Hŝ�r>e��n�^М}a;�s†�3x�W6pH��V
+6�
Cz��
�
	�~˫rً����+�٘%�C!ҡ6�n�`��c�=��<����C��C���[
n
+�,
�I=!
+�.��)�iw���
�]2R��cb�	�*�ɩG
�܆��`G�[��8G��vڄ�b
+� SK�4���P
B��9�
0��a
��303J�J��,�bQ�$L%]�w4�޽|����Cm�k�ltP*q��̋����W��j����
��ϣ
n�� 
��S�BL}1�	<}q��/����	8C�4�X�i�y�����N5`���{�08'�<�"��\H%�Ex<���q�Z�
Hu5]����(h�S)��~
{��$�P/k ]L�D�`*
2���V���hP��G��*�xcWѡlf�>sq
D�6۪<�n}�5�vmihF�%�ԒǠ;3�q!rY;�\��D�X�+���wK�Ң

��$k_������xYn�s�<� ��Se.%��������:]�RX�1�)�\
+��j1�W�)_�����oV�պp
V�^��	�Q���Z���r�4���D���d
+r'dD&�坕1
�pM��/qY�ֱ�=%.��+qI��%�y�
�������)j"Y��љ�6ι`�G4R�ʷ+<�rϺ��4�˦}N�O��w�c��u�dV
�^wy��k_�*VY
|���kFuo�Xn��bu7(D���
)����?��&-l�ST�p"��_U��U4PP0h�$�_B��1���)pN�c���K�����
R�<"���-O!'�*�ݳ��S���O��K��p�$�Ќ�bҀ+�l���? �ȿ�)�^
o��s	h�MǑ�75]��/R��|�.��
6PH�!����JHq��uMMΪ`\F�^l ���a<�B� ��I�F��B���`��r�{B8�-�r�i
�Q|\�S���N�}��b����A|C�O:Q�!ȋ��:�}�/Y�D�)1
+8,����3�����q��F� �S&
ݳB
7���Ka?��
+,L����
V��N�s�B��
��~t�T�;!�*K�r�ln_�+-���vŘ]>Ϯ𧹸�M��-��s����Di
a頪�������
|��
A�C

�)|�,�S��1�Tj���b�
+��O��r���‹;`q����S4����QA[���+
�����,�"F����(���;�Qm��P�� ��>\*�����;_W�MT
"���k�VP�vWߴ5=L�����Z��Io�)\:��.��*o^��iF�$���t'��^�U3l�+6*o����ek���_�T|oqk
�&ј~"�uXI'X9�ҕ���ßa)�x��s�eqT����wz�@��V��G��f�\A�2��@x3�4u�*�%���/�pñ�����(
�p����jo-X����6��\��G'�3[
:uu.���;�^��:�B1�.��}�;zw�>�߀��%d��Z�#��QjL����R6��iCod5�R���
�D}�M�g��R
dΕ'�t�^��:wY�
���C}�N�������d���sI��5Jm�Q�A�T3ݝ��K�����
ZwE<
�U'9���,��- }6-�òK��4���m�dSV��9 |�*P�9
+endstream
+endobj
+1614 0 obj <<
+/Type /Page
+/Contents 1615 0 R
+/Resources 1613 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+/Annots [ 1605 0 R ]
+>> endobj
+1605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.76 659.819 292.231 671.774]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1616 0 obj <<
+/D [1614 0 R /XYZ 86.4 726.045 null]
+>> endobj
+182 0 obj <<
+/D [1614 0 R /XYZ 86.4 600.066 null]
+>> endobj
+1617 0 obj <<
+/D [1614 0 R /XYZ 86.4 555.803 null]
+>> endobj
+1618 0 obj <<
+/D [1614 0 R /XYZ 86.4 329.659 null]
+>> endobj
+186 0 obj <<
+/D [1614 0 R /XYZ 86.4 131.359 null]
+>> endobj
+1613 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F14 1030 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R /F38 773 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1622 0 obj <<
+/Length 4008      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�6��W̑ڲ�
�+��vRy�F����
�j�xf8&9v��~�� _�d[��Հ$� ��u��E����뫳/�z����zqu��:�
��T
��Z-�$J�_p����V�����2yqΒ��%��|u��DrS7����?��e�9tU�;�����WWg��̚-X�E�V��r{��l��/�/�T�v����.��S�����g�_��N��R�St�LEf{B*�ڪ47�	�-Sn=�8inj�Sc�B�,eF�^��W�e����1��R�}�ܳ��xc�Gl?K�΅��H��~�f�
��v�Y*��/��ͦ �P\%_�ψ�g*[���cNp��Z�f6��ND�İ�c)pcҌ��Ml��3ZO���ߕ[{>���˳T�
�S�ŗe�l�}��a���c�%W�%M�%7��2�-�1l�����L�A�6/���Е-M�ݖ�0-؏x{LR�|�~���U�T�ϕN�~�I�>�a�7�M�X���vl�8ߋΓ�����f`%�s�H��
I�I��)udl,J��Tf
D��\)���` [...]
+<�'Icf�`ţ>�rW�3���<Y
��ܝs�t��������ܔ�}�-�xŒ�׬b���?3`>����i���������>�EpA{�Ʀh;j�&L�	|�v�޷����a�,���٠
��eI�+W���q7���7��}٤�R���ƷeC}��hdS�;�ms�
+�e�q!
O��S&~���I̺��`�Ϗ)J�H�=�!e�[6�8l��㏦~���w�r�y�<$S%�D��OB��=�D��-6/lNڇUI��H�D��S��/u�r��&z��A�\л>t�b�GC\нx�9
=Z�)>v���@
N����	_5���/��
8�
��܃
�������g`C�PK�D��x<6<�8�(3fE3�q�{_W+–�DBر�p�D�G��Խ�#1v���Y�D�d0��w�y
l#����
A����(_oj7��}��� �A�-�

����=���&�ց;�tw�2�"$�s�
.P&Y7�����EV�UIL.��|��*)������������e�n=DV
"�$��X���=����'�A�״zp!+�����i?'����v_ �2�c��=�,a��BT�~�G���	z̀m�O᱂ϟ�h�?GR�̦�P�������2:�.�]�<�#HT
d�㞗5)mQ��H�8�H�n]$!zfLo����Ӡ�� ?z�,Q'�N˔+1��=AW�!�t�ÁLMr�_����H7h�h��lZe��3N��1w��)�*q
�`K��9�������
y�S'�$�|��Pl��]��'���ҏ����c�$�ZP]�
��gEJ�r�@������ŋW��s	Y�}'k,� ��ǡ�r��`z�N�ݩmK
��SlI)ehί�zC%6�=ɤ��F�I�s�gF��8 P�z���)Y���k0�b��vM�!��X]?�O@�C��j𴓸rR� xǞD�
bW�}z�I�>�'���S����CV��훈f� �A5>��C�����'UuX4#������]q��ނ�����
+F�'Q[�d{��~��Ak�s���_�r3��Y���Up
"�dž�hxB���QK*��E+��Ԉ^�~���#(#K������H�DȃT�Ɠ�Z�y�H�ӫ�N��	&
�
O��dҾ�	���'�W�X�w�l��>F���L
cq
q w�n�v��YL��w�$���k���	o6���wh�t~�x:HoB �GC
!
{ܙ�Q��
�E�~A?C��Vڸd�Ú�Kp%M���
|?���2XJ��0*e��fB�e4
��
r������]��]�!y�1�aVD�<Ws�?m��+
��˻��1��P
�
��Y.b�/�X}L�8ADd 3M� ������3��%���: ζp"���E�
�R�o�=t����⮉A�8N���r��ܜԟ�Z�)��,�ϭOi��P �mE�Ka'��8`-�<E�ܵ#�3�`h��䗡�
h�W�];��6R���C(��\B�رoj\��
+�^ˀ���P�r��'�Ԗ
5\V}�%���m�;,�ʸ
+�֝��@���5V_<��ȅ�=[P�m�[z��/��V&6�-pAX�9 at t��B�[�Xլ}���
4��q����j;�3�
Y�9�?�it6�OAJ�
�
�]DZ\�������t�1�����ZWE�9
+��� ?����ݥ�v%':ţ}T�w��f�D
+jZ�);�$��X��N���܆|�;�逶rw���_��xY��09
6��#��lq�y�
�Ut��Hۗ��CK/��!


+���mPF �u�>�j"�n@�.�A�+�^�͖j��Q���'�Ό>�|�i��=�
�L3�س�G��� q:"�˅�UM�L|��o���S$ߠE�~h�W��oJ�ɲP��=
]�O
��e}���k\s��{��#�,���tS�/6R�x��,ڍ\ʙ9
?M}Xߒ�e�z
~���ҋ/
b)a�
kî�;�_ɵ�³���C �)�C��-�>Gp�C]Ѱb[;!�r�W@�Cչ����2M�{�D����h��n�����.�x�j@����Ƨ.V7n�7��<���n�0�������I�v��
_t��r��+x=���*ԧ/�S�����A��ƅ�,
=A#2���~.?tAg/<:�|�~њ��٨��
��jW��w���u�h�����Sѻc���R�A���1�v�̿�����������t� �嫌���p� ��:���)IF��>q�w�z'����^Vx
+8������x�S-���W(|S��j B��- �s��y^�neFN��mZx
��$`u��1<�Jn������Ѿ&SѾ���
~��+4�J�����;�������g��;I�ǥ�D6kNl��^a��"aO'�
+��~�Wet[�w[�T�}i�C�Q��{{<�AGl��*�^~��e}]���;��}�w�
+��t�dp��"�"Ft8��[:^s�V����X�)8��Qoi�@��8� ��Z���s�x߯��h���
+{"S��d�=G ��J �� ;;��� 
L��S�Ѕt|2jS4k
+�X$4)�s�Jjx��
ޏ?�M���2���0|��d�oE�{-QJH�z�
+JA�^	0 
z�V�{�� �y���p���n��}��)�&
v
+�;}F'w�(��y��Qr��e����E���!!k2�]H9��[�uFr�Y�'9 05�
10���'�M�
ltBp�Q�1�Ƨ��X���R>.�
�5�sK�zOFy��
�x��"�/㜒�9%9���Q��b�S�
:
�A��=��)���I���2��k9�^{̡�`7���i��㋇N�
�<!��^����k_,����X��,�� ��
+�@�@o62b(H�+h�j�>��4.CZI���E
+�[0�9�¿_]A�B$Vݓ�0�wz���T#T75�\����5
+\�[�mϯ����ex3��t���� 鴠sdp���x�0dw<��-вi\܁�KY�o�f��
�R��������{#R��8� �mAK��p�̱:�����
�
�r�U��`W
+p
�撍�0���ɽ��k�x_E�t���rC
���2������Is�}���Y�?2��CX
s\�X�e��͒���
���}|��̲
2׀k3=u�cM����6��
+
�oP�ߕ� ���>����c���?�C��
�����}��+qH�F��G�0V��b�P�F���B���]h<��M��{�����sH��
+endstream
+endobj
+1621 0 obj <<
+/Type /Page
+/Contents 1622 0 R
+/Resources 1620 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+/Annots [ 1619 0 R ]
+>> endobj
+1619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.232 339.917 164.955 350.765]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.3) >>
+>> endobj
+1623 0 obj <<
+/D [1621 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1624 0 obj <<
+/D [1621 0 R /XYZ 86.4 701.138 null]
+>> endobj
+190 0 obj <<
+/D [1621 0 R /XYZ 86.4 386.565 null]
+>> endobj
+194 0 obj <<
+/D [1621 0 R /XYZ 86.4 154.082 null]
+>> endobj
+1620 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F7 1115 0 R /F10 1116 0 R /F14 1030 0 R /F16 717 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1627 0 obj <<
+/Length 2873      
+/Filter /FlateDecode
+>>
+stream
+x��\Kw۸��Wh)�Sc�'���
�d���t�D�<�D���i}?�%ȀH�$]Y��~�~O J�x\�����醊E�"A���a!b��DHP���.~[2�W�T��?ʤ���Y�����>K���M���ruI"�����w/��.�}���
�-ˑdb��]��{���'��\|���-��W�b}�������g
[j�1ňr!�D
�B
�n�Z���
�K�����g�}����*��
�|���t�uV0�(
+�o�
o^V�,�mR6��H( �{�/��
+dt\j�YV!!�[Ej�����hD��R��@�j�j���ֲ
�

+
�{N�{�N
#
+b!x�(
v

""d�
�,DX�5�i�"��%L��E�1���Xm��/�Q���.N���
0(�(d���*�6���ǻ��1��e
@,�
+I�6Y $$	��>��`-�o�>���(Y~~w�n���i�K�g/곤`���2A���!����#m>
A��o���M{��%F!]J�'�
�OWE�d�&���	����G ����=/�U>Ǜf�3q�g9��8�L��
+��O�_�Za�g�~8@
G���p�[+;��!���E�J�k������eG;�����$)��Ze�<I�g�]�+Z->
vk;�^
+g�<��
:�A���S����cX�@m�P���=��~����y�=���֐jly*�_�l�pw&��Չ@�A8��#Ƴt��E�q��P(����|b@<lT�Z���ի!i�L�Jsb���m�_�B9$�3S���D%"�>�
+���K9IQ�
URV�
 A�f�")�7���j
z���z������
�"�H�g�]2�JM�뢸n�t0�����	�D4OD	h�ek��b�ǡL�ʽ=�E��h;�,.��l(I���l'_Gܱ
`��yw�`��l6O�p4Id��$.VW�s񸪒�s�(5|�>��U�䏣C2��ˠ��p��p?��3
S	��C9O0�hx��h��hw[i�%��C��A
��4Ԛ�ϲ���,�Tr�O�V��Ҫy�M�d���Ye�G7����o�]-їd;���ј2A�-)�E&�L���ϛ��U�t�Vi���%<yn�Ǜ:������w
g�{�� ][����I9,%�p�1�Ѣu���*�]>�E��I'�a('��s��K���L֡���<�
ă�<�]o�v����DP�D�!5}�h��dWF7�U���!�;����м�÷�_�kt���D]��V�"�7�ӧ.d�2�G�6�����
�.����r�m��0u	#�Y��I�`Tm����}x���M� [...]
������P=X)����!"����vj�p�$�n��z����T�fH?+��V����Ҙ$�H
Ih���g�#�7(�]
E���S���o�,LM5���(�a?���	���	���/y��'�
�I��fiY��X8�
�Pv.�3�?z���N�[�
�G�!�ԇ1�g�>�(Z����Ci(ԐE�:.˶wM��췴zj7ƻٺ:��?��A���&�9�&_j07Y��i�ލ;�2��:�0O
+��{7�2I
����yw�^����ɥ�!�ue�KByx۝$���yN�)����M�Y^ߘ��o̰�7f<Q�=\�
�f�+3�L�U�<ϩ4�Q�I��M~��m�H^V\,��06�y�Ӭ�h����һ3
+�h�m�yN���#*ϝ�����هn/R7ۧ�V�6��i����5�����g�]
�,M���3�(LyT��f�%���ug���ͱ|��fs��^ߠi�^mdLh��
�+�[�)�,Q�v@g�
Z_)��@��>��<��k���i2�
rbUFȷݯ%�]s�����!<�g���>��ڝ�]'T�,K�'��hޞr�
��J:��8S!Cx�bAB���wy�
���Md?˭!sb:�H?N뫜1��A�N�,�

I�����Uvqt�zq&�{w�>�㞥�N��bj�7�N�Q�L�~�p�%�3Ү�ne��xK�
�TJ5�x��d���v~��5���5��8#�J���V�

�`~��A�җD��~�n�1��jW8��87��E0O����#6�l����:@�n�l��$:�H�Y�?pq�?O�J�tJL���
����f�w
QD$������&'�t�L���@�ʰ�%F��n��_�5���
�2@ё�_>x�zwTV�0{ۼ�C��囋XH�C�=��=Q�]\�
��o�O���Q��C{�Y�L��ܸ���)��<��֑
n�7r/�
��1��A8��3@�
��
��R�'^;�:��'\Frbr�1&��7%(<���E�oS��]�2���i'\Cy��/�p��t�a�Y1��� ��;�_����k
�A��%�
���d[u��l�@"92%]�^�� B�:�/�
}�O�y?�v
��OT���
1���ĐA��|�=��<���
O�`�+8e���<�R�}'R��}:�0d��`�ɐ��ǜ~�*h�"������$�f	������g�Uݘ� S�\g 6Y0�\Ƹs�%�� 5V�;
+endstream
+endobj
+1626 0 obj <<
+/Type /Page
+/Contents 1627 0 R
+/Resources 1625 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+>> endobj
+1628 0 obj <<
+/D [1626 0 R /XYZ 86.4 726.045 null]
+>> endobj
+942 0 obj <<
+/D [1626 0 R /XYZ 178.531 680.401 null]
+>> endobj
+1625 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1634 0 obj <<
+/Length 2773      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W���dރIʇďTR�w7����DB�� ���o� 
#�2��������׍Ƌ�^|w���їo�\h�%��ӋE,_(��ddq�^���\
S�����Yq�<f1�^.It�d$����'��.��]|���I�o��,����p�����#��iw(�r��>z�^���
���w���gQ��'G�=���c:#.�

-��
��z��B�i��(��
��S�r�q_n�X-�&�(�$��\�ߥ�/e���&Y�SA���X�ǟ`$�^)��
p��HE��l$ynOޮ�.	bT���E���*���D
+�b�W�ps*�����
9+x��
;S�0
#�ɐ�����;տ��z?�;8�z�h��1�a yLb�ܻǫ�^U�Mg�����cB$�N�R��M�j���
��[�fx03�]P�ͦ*j�Os��'}�I�-X�.)�`�zJ�)�2�%��nR�ͅ��bI�I/��=�3��5�uyL"�p����h(�c�5�q<��7���:ud����L�
c"�#��B2�4�mc"J!ə%�0�i�Z(\������g(V
�e�v��E at +�q�'G �2�YGe���@鞆mAaؖ�h
JvV
��GG�</��+��4���s
a��%f�oF~`�B?F|yY���͔��hDdef%��6�-kN�,*/[+���K��7G���V�K!�$߀�힠�=	�`<~�����Ϋ�a��2��&�ۨ��7�ڐdn<NР!��Jd
�S��{��g��C
+{�q���aު�[1�Q,F�Ń<<9>15nE�	~X�"Jh�]2�.���A��̼
�"�;��!C�Æ�{y� ���&�^��5Ҁ#
)&<b8y���듓o �9�VZD`r�e{�mn6��9��+x���.��]�uzH�����%׺����u��;��H .u��w��H���(�����O��
#��!����|�����3�mL�j��;�p��(���
+u &��Ђ�
b�|L#L��� ���)?���v��
+h[4�O��M�[�-��
�0&U
}olW��\]��҆s�:
+��MU�����k ���d�_`Y���<���@=�m� ���ٵ� �F�\9�����K
[IT#+CTwI
�@4
+��{
�`2��	�� �8�ڸ�pD���(J3��˶.���2<s����>��_���y_��c�	��Yc�ե7��'Aqڥ
p�Gas�sw�.�'�f�B�p��W���}M��ܺ3A�ͷ�ZV]�X!
�g at BBڤC9�����{�P;���\�.�msf��>H�޺ˊ˯F!h h����ĪM�D̈́-{�ru���|�� x��
���	mk��r�H��@�g��}PO"A��;��{`
`���2�@�W�Y 
(D��a�VaM�tE\��WM�#����d�S�4��c
�k�"��S%"�S��s�f� ��a�}�}ll�.�
 d9�6��5e�VI�
+��8F�t���Jv4�P����<
�G�7���!
��ޱ��0��J
���*�B������g� D��iҮ%�>ùXʶ1�+�:�
Ќ�2���Q������D��׺
�MXR�z���USD�P�M�с/�j�羌�@D�1L�B�
$X��M]�� t��(�V�U��1�m5ⲛ�e��� ����,Zgu��F�}��&�Ԗo���B>#:_�K�4lpK�
b@�jײ�C����
��z9�c�3H���j���g�N�]�)��/�4
�
:L�!$m���H����&92;L����
�R:�JUs$�xӾ�)Gj$
�#�P�dL�s$�>�B��H���f�� "��
i~�
i޻'G*�H6�"�_��(�t�����eHI�
H�P��A���8v.�E��(7]�nUq�2�5�]�#S
�!S�
��\
���*K�P���Q���m��Sk������;�a�sN��h�0�A/�.���C4TR�!���S�֏TQR%y�čC��9d��j��T��OZ�eU�qPQ�a(~���]
�����RD��"����5C�����)O��
U��D����^6�!x�����ef�m��b-�q_n�`�|zrx����xh� ��@l�l�|�&��@
`}���j��O �:�z
߬�k�~s�� �
���!�=J'�(g�p�m�t�x
�j
���`�>
����7C�h
����*v*������>~2я��഑1w�C#7]jHwڴ��\�S��Y���<i?p�g=hS�_��&]�g���d]%ͦJkO�Xitc
B��!���:-j��6���Y��iP�^��YZ$�y�F@���$ػ%�4
�^�[���n>c[m
6�T���}��A!���s�dƤ�6���&�r?S2
(� d��!(����Đ4�G�v
#�"���@����I��ԡoaII
���z2�~(��903BcP�!��Z!̎�a���	
&�3J������ڟ��/"�R�4���C�_Z���W�R&z�oQ��/ئi�[�"g�Ci?)����<��)�mIU6$RM���M����.�ߘ���p3�'|
����q\��\�e���󗱁�l��;�[�H�X��>z{��1B%T���c�(��ѱ�Gǜ�~Jv�hn.�
��ոM<�g�jKоһ�"��|�d��V��Ə�b�J9��06��|��#��U�e�7�gֈ�0kk�AF��M�;��c;i���'���4���y
������M�
+endstream
+endobj
+1633 0 obj <<
+/Type /Page
+/Contents 1634 0 R
+/Resources 1632 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+/Annots [ 1629 0 R 1630 0 R 1631 0 R ]
+>> endobj
+1629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.306 521.737 298.777 533.692]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+1630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.962 226.018 292.433 236.866]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.1) >>
+>> endobj
+1631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.561 226.018 340.032 236.866]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+1635 0 obj <<
+/D [1633 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1636 0 obj <<
+/D [1633 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1637 0 obj <<
+/D [1633 0 R /XYZ 86.4 203.662 null]
+>> endobj
+1632 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F14 1030 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1640 0 obj <<
+/Length 2061      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�T~ϯ��
��}�(�����})}pm%� [AK��{�]$k�bךP�y���,�پc	G��~����⛟��
2����&��HQ�$#��:z;�H�L���<��e��d�|����M�[�t���H�gB��]�rqy}��58"�X�4��j{��
��p�#ft�nqf�oItu��fv�`���cr��RKjI�DRkD��WS��
"
V\7�2H�i"Jz�^�I���q���q�_>,���11p�t#:HH����$p3�y��\_l����=
�%A�
+8㮾I���b�����O,���1aD E�,q�!�t�P?.�h�%m;���_{�������mǿ��eq�� 
+am���|�m�mƷ��.�dv}uA����^�1��r�*��L��	2�T�dqQf��@UQ��ͩ���9U��pD�b[��?���O[�ՍiG@	5��;)g�����+w���ZH��ֈ���fm{��Ԇf2����m����E޺��t;�FDA��"���9'��RHr�4 O�,���T���&�@�Ҫ��!ݬ}V~�9�uS
�(�C|�,�x���
�.�����E�}]aP����)����R��3p8�>x���i^Y���ְ �#�^�e^X(���|
+�I�
]g�+��pg -[(���y�+���
���d��GD�#���H�^����q��%T��޽��9T�2)�n��c����3Z#�*a��{vSM���P�E�Ü��
� %Y�����h?N��t��M;�j��4/�
�	3��Hh�X��(��ԉ�U��^�xqyu5��\ `^��:j��,�$�]��}Y��F��讽[tB
+�!�y�Z�y~S&I��<.��ںЪ]���I�rZL��:��_/
��QE&Q�	�۴��z���XW�`ڌT?š�se
�M�S�)ܠ�4dmˍ0�:�e&��C��Y�#�!=늬 ��;Ck��6|I�Zm�UZ�y�m1��\!\b_%��љY�����f�`a���$�
+��a@�N�N�d�i
����q�����_�Vi��gn�̟��

�.}� l��,�
+�f�@�n�8r��]�X��'�]�
I���ü
��z���,^���ƶ�*a���u�����'�8eFW�avxG�F#��G��?��	̠��^l_nvW��d����Fa��[O7���8�)`��i\C
aSoi-4�V5˪ �8؂�9kU�)�Iۡ��W�<���d� ��m��Հ���j�!ÆC/y:݁Yf�z
���$7x��5y����+�Z��ֵ{���2� F����}�mw����omO�����SlmV�4⨭M��S�[�-"LѼ���E8��)�~��67���r
X�|�8�۫
�5���Ã�Q(�`���Y��[���v��v���쿭�N�y0�հ�bacJ"�&A
$quĺ6�ʰ�5U>�v�ծ�t��X����	��
cD�%V�0kg
;s&x��8CL��e�]�y��r�
�v��>Ž. �Hz
+�
F�L�ڛh��v�̅3���H;��i��$�qq�y��Cx�GPv��8e��i9@ٻ��)@�����XuE�w��c8��+|Vtˍ�
gY.)@��Fg�2��G
X���^v��eQ
��S�0z��U�e��?'��5Փ�w+
+k���e�G.���\�J�����,����8��nay*}��O����p�'��Vӟ�!b9	j��
�L�2���'���;Q���*ﶭ�Qw���ìۆL�IX7�
)��N/�y�[�8�i��!aA��g���6�l�H���l�Fa�gc��dN����l��
I˓��;s
'� ��t�M�z�
&K��H��M1����
L���Vew�-�^wpwቓ?�:�k�����6��T�<��Ӣé-n��
'�*�@���T�@̤��J[Q\=S�	����)y�I��U� �"���"pw�?�[����nI�=P�
���qM���0kŐQ�k�������z>��GQq��Gg+�^=�+|���u�~�h�§��Q�	��
�Tz=
+endstream
+endobj
+1639 0 obj <<
+/Type /Page
+/Contents 1640 0 R
+/Resources 1638 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+>> endobj
+1641 0 obj <<
+/D [1639 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1642 0 obj <<
+/D [1639 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1643 0 obj <<
+/D [1639 0 R /XYZ 86.4 514.113 null]
+>> endobj
+1644 0 obj <<
+/D [1639 0 R /XYZ 86.4 353.943 null]
+>> endobj
+1645 0 obj <<
+/D [1639 0 R /XYZ 86.4 195.333 null]
+>> endobj
+1638 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1649 0 obj <<
+/Length 2208      
+/Filter /FlateDecode
+>>
+stream
+x��Is�F���8��������r�(J*)'�D�/v4	�����v�_?�� ���ȮX'bi���{��	
�D8����g����� #���W���G�$�����X��9�X��e�f7�s�y|1#�#���\^�K,^�?�������|���<��v������g���Z�\F�����p��;?D1���n�6�� 
+G����3
����qA��BӤ�ԑ ���ֈh5&FS��
"\�n�� "�!�(�w�*_&�%�Ů(����X&�a8�QHh�V�B!�BF뇄�SA�3A*�8���o6����^ $H��ѫ�
�EP��b�
�x���(FFx$�
�!�t����0�6���6�~�
����ZB���-�2�$9'��^�7I�(��&��g���H_��N��.[�{�+L*
Ϛ�E�d]?T$ծ�J��U�7�fT�UrS̝nww�T�
�Z�K?*/�`<B�"���[7,����J��

+�	3p@`��7�ia,��x�%V�RmM��7�JY9�� u#x
����x�_7�m⥔�����#�FG�z
„=&Ո��pH5��&�I��̂����&ڊ���j�x��K���:L
f�-��Hߺ�̛)�s��9L�Eګ�'�GoFi
,�*���G��yq�%���T[X����rN
G\�|�p���
	�����4��	��!�Q�
+\�]1vb��8ٕI=2
���V�T�n�@`*9��N��Օ���L�x��%��#0�FǞ�.�3���q�NJy'Y�U� ��݌�D�`;(S4i郙g�+P;�I
սn}�j���v�*4<@
��@Ç.H�(L�2s������j$��@�i�ͬ�nQ��n��[��*
+�(�4���y�N��$�v�[,��\�6�P�eR�W�0@"�[��a���$l�@������C}Z#��$J5�6]�?�|�b�Q
d0m��a�C3�ʜXo($�PS�A�]��n��WXr�1~h1pEv�琞ME�!:X�
m��#�/�F|�]ѓ�)]0�BN�-�S�.��ZD�^���
+��P�I$!6�x^���tC0N�x���y
�12�.���W���eF؊n{�"���9����"]T��s%���3��>���7+����Ryu����]�����0���n��$���F�
M�p` xg�b� k[�
�h� m�����(��3h?
��uFME�E2�Tw�ɡܖ�@�|
�x�:p�u��$�	��z�|
�[����X-,��g�~4V��|��=�{>��8,;�Vs�/7d���(j�=�z
+��;J��'p����*V3�嚏o�b	�;���4< ���ɚi�@72�����A�>؆~
�y2�|?�x�$ԅ$���)†~���`����M��H���
�����`���oI��ڶ
vd�{��	��hu��
�<H6��
w\�� �������������m���fK�O��f�Rs�_���{?2��=|O��={�{Rq��}y����_	�@�1��)�.�d��*�� ��S	�֓�
D)l���S(
<�Q��<>�5�w��Ty�B��r���{�
�TM�	x��Ji���׋j7�|��G��b�vvlF?�����q$��L*3)�w�1F���X"�Z=*���!!Xן6����#�4�s
/4�Cv��	2���'���镟��=K�w�q�s{P/������u�
n���ݑ��
+�s�e����`‹�:#O�N�?��S���z��	x�W��E�+�A�8j���*m�u8�
+y�쏸�m�:�RMA�V��� m�
�WN6E�=GA{
+��;J��'p���h��PԸ���S^%e�o1�t|����P�8]�_O�Z������@��ھ��/j�bh������{;�U��
��"������C�z��Sԗ�|w�v��pI�s�0
���r�;�uu�Kj@��G
WIu��4CR7
�K+�]��	:���m
+��t=�'>��J��Xc��<�q1p�]
1�V'�
��
]�/'�]8�����W���l�C�� L�=�	G�s�}�B���������_�g�.[�G�x at H;��4�A���"���:����7��mp
�e���b#�ָ7�����ȇ(���'�oѶ��9��Ӯ6A\^�/��|�a֠(���~���S�
VP?���ՄX�SRyh\���oe��"ϖ��u4��Њ�y�

+endstream
+endobj
+1648 0 obj <<
+/Type /Page
+/Contents 1649 0 R
+/Resources 1647 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+>> endobj
+1650 0 obj <<
+/D [1648 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1651 0 obj <<
+/D [1648 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1652 0 obj <<
+/D [1648 0 R /XYZ 86.4 549.366 null]
+>> endobj
+1653 0 obj <<
+/D [1648 0 R /XYZ 86.4 395.784 null]
+>> endobj
+1654 0 obj <<
+/D [1648 0 R /XYZ 86.4 242.201 null]
+>> endobj
+1647 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F7 1115 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1659 0 obj <<
+/Length 2395      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs�8��W�4#M�� k��N��]�Lu��>�,��
.q{~�<,��E�
s���/���-� G�G?��p~��5�Q�bIet~i�x�h�$#��:�8�H�L������2M�
2[^��?��v�2�v�|Ac��L����>yu~��@78"�X�4��j{��w
����F,�эk��8���4:;���av�`���cr���HjIq
I��jL��KD8[q}h�)!c����Z����є�U��]y�lM�$���D�R+k�K�é�ݙ�J 
Ӡ��k;������ F�q�/��f�T̾���x�
�mˆ@���E�Tb�0�(ԟF4Ғ��ٚ�w~\)WU#!�(w(cAE
�,�/V^�KS���ں{����If�W6(�}P�V��
+Jtm�#�

�
ј��䦬rp����s�$̩���A7zV�|�LC[+�]�f��M���?��mo�"a
Vw�%ႠX�{���mc����!Z&�G���Ə�h���W
�� -aA�B���x
Q
+IaE���e�9(FR�z�֩�!�5>g��{����kuЇ�Lc�kȨz�5�h��Y���a�^�&��[a��7�t,zUHɸn	
+g���|�f�����h,,H��1\p�U�`#�R�C�Κ�����	T�ӵc��b�5� ���m,t=�p���\�y)��B̖ie��@`
�c!`���"�3�J�=�)G��3�.�JV��9	�3������dW$��{6M
+o�l��nG]C�@5k����@0
�ׄGBs缏	fiu���ϳ������F<�
((h��Z���P�Ö�U�oa��F��j�s�Mo�l�je��J�]�)�CJ�H (�%�a6�y�I̦lhj��/�~J�QE&�T�q�����7o�2�@1��3�wq��\�w
+�)�jPH
+��~t+���
~(�� �k�9�g���z5)��pt�

[���"H���Y@
+aPz'@΂c�5�
��V۳ry�&��3_���Y��8���� D~�E����,ɤ z�"c@�QH��!�
�%DX�P�
�+�ܬ�FҀ��
}�V�8�&H1�E�G
��Sq,���,�]hV[��z�_��k�m�,Q
�3�@>���y���e� 7s�[�n�h�]���/$萤Ps��]�l� i֦4�4��2�dyR^m�[�!��!"?���^�?������D�zq��`��Is0�
��C��)� א�%��XQT�g>�>ЋOS2�4ۅ\9a���z���0{�������zgt>S��H)8c����؊R�j�7N)8@՘�I�����St(E��'��QS��J��cT at P�:k[g�)�y�I�g?لBkp��	���	�-p�!* R6��y�
$�0�n��.P�]V���.)�M���C\��Xi�>�y
H��2�ȗf ��
+ Q���Q8��$�
^#��f�.�
��
���
�[% (�½������Q�V��.�1��$�:J	,�������J>���
+�F��Yz62���2��
C=x��qt�𸀮1ƙ������~mk��> ��7%��N�LKK���,-.���y׈�%���q��T�.��{N'W
9O�)��E���0�@�`
^��n�H���*�(����]&�k��Jh��>�|��ٚϻʪt�m�W ��
�Lxqc���*=������_��O��U�/W���a�ɵ��|��W��^Z
]��6��Z0����.Pi������
���YQ@������^�_w
��2x�
��b#*������y��Ƶѻ(���4�Wi��:���3��_29
+�l�&�$V����gr�*`#�$fQ�ރ�M�g r�}>1��@���
j�g��XBd�q��J9Te�5Q����6����+"� �U��f��U9�!D�B �>����x����Y�5�������c? �
w���:�ReO̍��| ���/9Q�9�

+��򁶻t軆�
��Ga�9A>'3�a�<�8�6r��
+�ֽ_�-	�u
+%��ƫy�$[��ж5c���ΐ���:�
� S��.
$�ܭ�G���H�X��[S@��������7�t���&�G�vu]��k������:R��:�����T�0�0�SP	��筣	����2%�x{lQI���?n�B�h�7�y��fxI��t����솼c_����-;{Ƚ�o>�t�
�����PO�^ �1�6Hb���7�]��m��0�[LW��.t��a�O�\
�DM\��?�j��.�x����Eȑ �C�Z��龒�%ҁi!v���9:�V�D��
�'NX�� >�vgW>�@�u����n

��iK����=$�_H�5	
+endstream
+endobj
+1658 0 obj <<
+/Type /Page
+/Contents 1659 0 R
+/Resources 1657 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+/Annots [ 1655 0 R 1656 0 R ]
+>> endobj
+1655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.551 492.971 431.274 504.926]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+1656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.846 148.532 388.569 160.487]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+1660 0 obj <<
+/D [1658 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1661 0 obj <<
+/D [1658 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1662 0 obj <<
+/D [1658 0 R /XYZ 86.4 550.44 null]
+>> endobj
+1663 0 obj <<
+/D [1658 0 R /XYZ 86.4 370.853 null]
+>> endobj
+1664 0 obj <<
+/D [1658 0 R /XYZ 86.4 207.562 null]
+>> endobj
+1657 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1667 0 obj <<
+/Length 2710      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs����W��PSfzoT*��V�<e+���
<>@$$��d,�8�>�7ARb9�*��u�~�{k�F�a���?��~�'A�"ADp}(�X I����2�8����P���2����T�٫s<�pN��_�/��+:��
{��ÿ�|]Wi�����������U� �U8RL����Oa��/?!��
+
͸M�h�ܭ���_�B�u�N"��
L0,��ԡ��(J!��
MP(�#a�c�
]�$�FX
+
ޫ�2�)�.��m���E��*2�>z`%Q��1`�mcP}[�#Ι'^�
�~N�%
��ѷ�̅>������[���|�B)F
sÄ&&��S��4��
�]y6��e-Y'��kO�6�9a�
 1���X��rQ��������9�ϮW	x������
��-n�����
+Q���"��"+�j�]��
Ή�%��x'|�o�>�YY���J���:OW3X�
1뢮Xs�}�P�{qWo�L�U��	Y��c	:
A��"���},%ڿ�Í�'�
*�x���(�"%!
�ti�釡����j���{y�Z��*�ʷZ4�p;FK�I�؝2�F,�J$E�G��y��R���������z�#�����4o���L��C�ǀw�+&�@@6�x��	����!E#i��`��`U%moaz
�a�����T;���Y���~��a�

Ů};��U�<�0DXǴ}P�Ή�}��n�rl0)A���f�H\��������Y�ĢI�����E�WF�WHa�H��
+L�Фw�~��ի���	{g
A�$n����`
Į�꾮|`�ªь]��
}�]֋ER���z�\�L�i��/PCXwe�� (��$�)Hv�w��b�BD�,��:��߾�
+�
E!ikjh������&���)� 
�t��b���s��0?�:��
%b
̳�H� �E�!>��
�:���e^%e?nQ!����納f�.+�

+I?+7t����L�(��y
]
+�
+>�+Ϋ�A�
+���M���
������^��fC��9����ܐ��h
+h
C`�p�Q�^th�xَ�KG
Ő B�4 
#���j�#�g>���#
I
&�:��D�'�[~z�c��,��YrW��C��C<4e���!P�����pQ
)L��A��m
?�!�XwP]�m2
�
�je���0�jP5!!yLһ�H�c0,��kj�xv[��|X���
+#%
�bx+��DP��qfE����`N�펮?t�v&N��((Sh��2� �Iub֏�\���Ƭ�[���4�K�b�o\ʚ��|��Dgj��� ��Yvl���U��fFR΍�c�[֛��)��)��-&Ȓs���+W�,�� 
�`�|�
tL��q�fk
�IG�"� V:†A���ݕ���bc��p��ś<��B�/��*/�O0᱔Ki���;�`��I}_Xї�35\oب���� ��ߣ
����1_�j�L�rT��˗z��A�/T�G��_'zP�ux���蕴 $�v��H�7�씨o-�z�m���")
Q�=bT@=a׶[e��ឌ
��
31�T6.�j?.���\��]�f����xӮ�^�w�$��Ẋ�x,wA�a���1���=�
C�R(�b�{�"����d�H�@��m� �a����t��k�tM{]�7Y��1X�UWcm3
%l��棏�������1"L=e׬��d�L ���"
+���fZ?=��m�����y�M
�5<�|d��:׋l�f���[��J�e��y
�U󰨋�c^�b�f:��������e�+����#P�
]z@�<��{[{�2d²{�
0$�y���;�BPc���_W(�-��?Xv�
+%0��U�p+���+	�E�E�]����m�3m[���+�����t�f�&�YtP�P�K~�jW
+u��u�6LL5
%g~
��<sqr�	��!GBS[��F�ܘ��U~���e���n*ב��_F�־.#y�
1�o��r�
��F�S ʎA�>
Q]y�C�m�)G���
��#��o�����{�bCb�mho�7
+�&^:4{�B�	�mpbG���vR4]���ղ��C������o	B��0���5;�c0p�dꗓpT�}����<����g
+�������~w�d��s�c�4R Ż��+�?'
+�=|��G��?���,���lAC���Y�+]O�N�����}r�ċ���
FX�` oZ�mQ�]���	�aur�8^h/3B8E������k��k
��q(N�
'Bb�lWU���vF��{<
� ��
�h�R㺯ҍ� ț�x�,�����+ G�8 ����<��J�P�S
cbA[DO:���N�
9�-�ٯN+���C`�Î9��Ɲ���,KpG�O�$���g��Xԝw=�,x�ɏD �޳`}
�B}�LAa
9�
���2��8r�k����� c�y����/�Zc�F�e������
+�;o ��.2Q@�=��>
�Y��1�L��uәz�6���N2hX��5#�<���9b�wejw��ִ��i�
+0|ɟ�&{�¤��9<Ă��!!tk����P��q�����{aG�cCa�uhO�$.������]C�U�OD[I��p.��*�Z�؎����GL�ۼ�
K�N������!�=[�
a��|����c��?y>�e�s�v'3����V���̞��v�uMK���y@�����?�
+endstream
+endobj
+1666 0 obj <<
+/Type /Page
+/Contents 1667 0 R
+/Resources 1665 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+>> endobj
+1668 0 obj <<
+/D [1666 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1669 0 obj <<
+/D [1666 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1670 0 obj <<
+/D [1666 0 R /XYZ 86.4 455.143 null]
+>> endobj
+1671 0 obj <<
+/D [1666 0 R /XYZ 86.4 153.028 null]
+>> endobj
+1665 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1674 0 obj <<
+/Length 2353      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs�F��W�4��N�݈+����T⪉�8>�(�����~^/ � �F�+>���ۗ�5Gw�~����ŷWLF	J$���:��H�IF����}̑X,�f�]V-W�f�X�8������}����-�4�\ǒ,>��x����
lpD�i.�����
�“#�X��Ov�6�,A��D����^L��뎸�+d#�D�t���P "4҄ۅL�)"L�2��%��<�߽~����2n�����,���{c=�����.ݘ;
����}�nB��f����=<MT��cO�#�
n�������qP�ۭ���g�kV��l�NK� �U�$
%�:��J�
�Y����<~��S�Ud�� �����w?�4�9�Ӯ�`m�.ň9�f�X�fC=��dRs�A�=֡�l�$
N&��6Xʼ0Tg���|7����y�1Q�2%�%���I���%�!�E�q at A$�/#��S4`5EXʣF�	R��1��!���o�b�����uY<^ [...]
��/O�(@���
�eP��6l��j�2=��z���q�Mz�X
+*���e�*�b��D8S
Q��0���	q�$���^�NĿ�j�!�&�
n�ВH���%��l��r[|�w��K��h�����d��ǂ7V|:�z�	5W��	UV�+�EE\;�<���ߚ�o
+��M��]
`m!/��?Y���p͉�z�AsSi���zGu��̵c�}�
�i���O��Gû�V�|�V���nÆ-}L93���{u��f����'�(#
+�(t,��gE�*9��gA!=�0��-z&Fb�!�Z5
���E�7�0��f�K�8[��j
�e�%߅H�)
l��z
Jc��H�1PW��
+.+>n��
��N��pġ�9��P��&��9ܔ��PyQ��2iĆ��]�=��I���
l���1��:xuH֦H?�	�a�hX[~���^',��W��V���G+ӖM�n�2G40n���r��Z�����>�yy��D ��Cc�
��E�y2x 
Q�‚1�9�q3��0�!e���{SK�uF��s��	#��ʦ�
fR�y&��
L=T��0T�A��j�Y���0O�iT
+z`E�CuMAk>T牲
-�W-����z
�CfPx�|Az�0
 ?���k��L���9��9�9
 ���K�,pΌ�z
+�<��ݝ��4�ÞpVWx�Cr	EX}K����,�t`7�� �0FN�`�Ш;P�߁L~����o c������{�������Ե����?L"u�H�p�s uC���+R���,����;�����~6^�ն?��M�Hİ�:�|�Y^`fa���<3�!E�"3
�|��4�9if����Y�/<�̠F3�j�Yg� �'f���
�YM@�'&��OM,�.`�����T���v�qJ$@�s���j�Lך�!��F�~ϸRE�ƕ��қ���`0��|�\�(yj�l��<�
{%C��X`�Վ-�60?�f�
� �F���䭰��a"p�����o��
"Z������mn��m��Y$L=�?ѳMv�0;;(�9y�0.c��. ��ޒv^��m�
t��80 �#u(�' ���C��+&"��N�r�L[cnZ�|�߄kߤ��i"�$�
�u�n��]]�aba&� ͋C���/H>�; �}!�
;���yt�_��E�0�BU�=�� �`
&ǿ��
+�Y�Cx�: 8� 
�n��*�'Hh��\eM�y5l�}2��>
t
+�T��31��n�'�<��[�㧼�woV��^:�
ku$��RL���<���J1��
����n�e��b]��,��$�C��
����t#L�8"��Ss��5F�ڊ�
�,wƟu�aX]���a'�Yv�r_�>��eE��s��wC�H��
7+=�(���øM��I��~���+�}i�-M��s�-r?���%r���<�my�i�6�����٫�?��.�?��8�
1�̱�fH�u���l��$��_���9F4x�
��b����t��ܚv�9�7Yq�h��-c�=�^#�
�[#��f�[`����V�Ɂg������Y�kфaI�l%�x��H��c���ЏL�"����e� ��֙.��:� ’.��ڞ~q�������%�4�Z�Q��
�'�aF��v��?�ޜ�Ib<FI�<�B�W�����3�.���:�{�G�Hx?d:i��P^sH���\�~hA���Na���"v�1ޏh
 C�	�1���aL% ��-�p_�����zL ��<;������Y�v�lx��
s�(�ܚ��lڠG�Fp�����=
�"b���
��]������'���.��,G.��/�ys�ʍy�
+endstream
+endobj
+1673 0 obj <<
+/Type /Page
+/Contents 1674 0 R
+/Resources 1672 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+>> endobj
+1675 0 obj <<
+/D [1673 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1676 0 obj <<
+/D [1673 0 R /XYZ 86.4 657.443 null]
+>> endobj
+1677 0 obj <<
+/D [1673 0 R /XYZ 86.4 507.94 null]
+>> endobj
+1678 0 obj <<
+/D [1673 0 R /XYZ 86.4 344.44 null]
+>> endobj
+198 0 obj <<
+/D [1673 0 R /XYZ 86.4 237.454 null]
+>> endobj
+1679 0 obj <<
+/D [1673 0 R /XYZ 86.4 192.82 null]
+>> endobj
+1672 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1682 0 obj <<
+/Length 3340      
+/Filter /FlateDecode
+>>
+stream
+x��[K�������*����J�dAf�a�
Y
,4��[`KƲ��_ϭ�
%��n�r+K�R}���We:���ɧ���x�Г��������h"'	O�lr����j>�sM�d�U]�7��0r�rƦ_������K;$����_|������j��U9�����W?\0P��PQ�H=Y�/�}K'K<�|B�H����[O�H	��jry��
\�>���g2!Xv�SFX�� /�>d�)C
�n�H�)
a´<��Ԍ���4�x�������5�H��D�~�捣�(��'�w��Zm��W���;X�S"���������
\I��s�����X�u���E�����
L�L����g�[�bZ�#II�f͋����$���$��dΕ"��ɜA�L���]^��ͅN�{~���n�݇���pc.�u��̽�{�"�5a�e�&L�M�����7�=���*%��A+�9-C���’��le~t[y�va����~�u�/��K'Z
+�p����ҿQ]��K(Ѽ5�mU�j���aʼn����w#��$Ѧ�0"� R�{��}>��\��ڲ>ۨ�\��n�\���bYl�_��WLη�|1����W�������<��Ϻ�)(s���/���?>���FD�O�g�~B�d��/ݢ\l��r�aPg��b�DV�w1k
BZ�t#
F��F@�EtH۽��R:�X"[�X��j@*�˼�t�K(���\=	"X���Za���"��m�~_� $�k�&�zt�Zy/����un�e]m���
q�k���d
+�Ã��,�!���C� ބp�I=�B!,����%�=j~�`3;
��l�'�*D�/{2)�$%�U�rA�(��� z?����D�>�fsB�K4
̝0�N��<cR�d,���IS �}����ן���V�H�F�5)6�0��	�
J
�@rz�X=Q�c���J���
�
��A֏dGy"PK�^e(�W���5|C=���ǵp�5c�����,�EA���s���&̰���i�C�Ů�*��b�֞��P�ו��z_.�Y�\�HH��5j-1/)\.��s����=�]Cp��1b��;{����U ��{3\H�
.q���a�u�
��ny���
bD��Ƨy��lVE��Q���m���V8����f$�Ǝ�N� ��xs>������砮?i�GL�%�I��(���2M� �H�j��P�
+��	�r��#%�IZ1�b�M�o#y��r!5����[A�!~�

J.��N{3���
+dc�<n���&�Y�ߓS��Ri�rU����'�(Q�S��NJrw(�D�#,mz=�3_¸���l6�~f5[EYZ:��k=�<�%��+;�;�!J�ރJ����5��l;�(��JB�.�k��)<�OQ��,�co
%@v�]��a�$Q_F��hsg���;FV�E[��n&���
nf4���ďN�&Wn�:�?
(�$`�@�Ę��^~������!��~��t9-[����n�ߍ�YPO0�<lw�_,�ޯV���|wڧUJ�I�K���&��>��$
+�T�G�*� P����A�U���C�*���V,����!�S�\Y�/�g�ң��+� �(�,��u���	��^��=_��j
�4�vbU9���[��Ӿ�Q��6tPͽ�A��l��G��7�ֽi�f�A��*{�j�Vk?a<us��G{v�
+;uN٤m����U^4�K�Z�u���z�-C���=���0����rh�T�s_Lr��Yĵd/iR�&�m�ĥK�x�S%>���"+���L��]���9��Ib[ܸ̹��z3�X]��i[�IQ������7�ɲ���e�K�o�r�h$���?��l��:��X[1���V
hғ�z��

+�7�L��~�ƭ���p���F�� 
����P�l��
�U�F����|x�J��2[�!�����`z��V<��;�kV��2<’������*�`U,�l��P[aw��Op
�
�h��m���
����e�Y^s!�ْ�on�$7�G�Ǒ�Fci�\��LA�/Fh
�i‘p�>�^	Y�b.�
Be�П����%��r��T���U^n��8�i�����·�_��u�fYh����c����+ at 5B�𤲩5^�j4��E�tQ�(T�d�*����LH�P��K΄�
���F([�&�@j"QzHM���m��'7�)��7��$Fm� �Q���Mç9����?k�R��&TW�ʧ �iʨ�ʴq���v���L�i
�	��
+��a�@)f�y8Gp��m�$D$��6�PB`
��dK���[��[Z
�
��8�Tv+��n,p���2�`a1�Ȇ~[|IЄ��8�d����ė~=��r��`j!����,"������F��O�1�Rh[m��d����N�9��i�"
+Y��mA��~!��lK���Z��=<�%cw�[g�2��> �q~}_z$�'ڂ ��h���k�<G|�+I�
��E�p��m���/��6���~Wv
��y����k�D�������9���T���Tط�A3EF�)>����[��K�);�<1�M$�o���G�G>
��?Y�����Y


�����J�
>EN9��`ˇ�cD�:C���e�x Xe�p�l�"�_
|�M���8q
?6��̢�[{�4=�[�x��<���J��	�!$��������{�CO��f[�_�밂x�+y�"�E�ۑ
�����$��n���8'��l��T��e
���0�/�mO�$��ޑ)ϲp�����
+WX4��7�D�*I�5�ݥ�y�Sˬ��Zp
Ԃ+�����Ѷ�9Ah��D��5�޴�U2.4:S5�F�D� ,Kz���۶�K�
�Cr`� ��6޴-�`ڊw���s�Aw'��:��ۄ�:`ܒ��V�s��}�����8!G�bcl�(oϼg��5{
̞u�<�b���������|�ȩ!L�{��o6�����1��h1�����B��#Z7��a���'];�TJ&�Ne�4XL�~&�|d'
�v�w����m�bHK��OK��a .B������c`��E�dߣơk&`i�I�מe���qA�ilgp��(|͸�{���~
�9v��
CLy:CM`~z��&Nc،QbDzV
���S(6|.������8����7���
�1U�+��O�'akY�!l=����P�]u�\[J���(�aXﶿ�˪��'���U���aP~ts.$n��n��͇���6st}~
N�o�Y8�o�G�!�v�

V���Ӈ:A]p��+Q��'6�쳇��Q�
>
�tFm���4г�]���?f�0�_ >�b

+endstream
+endobj
+1681 0 obj <<
+/Type /Page
+/Contents 1682 0 R
+/Resources 1680 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+>> endobj
+1683 0 obj <<
+/D [1681 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1684 0 obj <<
+/D [1681 0 R /XYZ 86.4 615.985 null]
+>> endobj
+202 0 obj <<
+/D [1681 0 R /XYZ 86.4 471.111 null]
+>> endobj
+1685 0 obj <<
+/D [1681 0 R /XYZ 86.4 378.475 null]
+>> endobj
+1686 0 obj <<
+/D [1681 0 R /XYZ 86.4 136.412 null]
+>> endobj
+1680 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R /F16 717 0 R /F7 1115 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1689 0 obj <<
+/Length 2506      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�8��W���EmY<	���0�����xw��^�90m��"
�r
�~��"(��eI.���@���4�����ד^��t.�YL␇���Y9�<&�`����u ��/D$��:��$��
$o���n�e��E=_�8�Q��ׯNήOޝ0PCg��H$��r}��:[�̫%"�f�ͺ�L��p��ϮN�sB�6i��p�a�ӡ���i��
+ؙ��\� �7��O+d�z�(
��S�����O粯���P�
��6O���".	��]�*Z�Z�͜���`�(� 4X]�gE�+�)���gVzV�
�
+��=д`
+6	�����_�����ݻc\��Y�����>A����>s]�
5
Q
+#*Tʪ��y����j���c����.�|@�Krw�M� ��4�'�dho�������譽���y�Y.Ӻ����G7�6d�z�F`<I4�� 㩘0
�x*"1�V�og��(�>u��&�Wyysq1qY�Q��m�z:�D��F���*�=׊Ș
�\G$��u�
	��P����2+��ѤUl�G����{��� ;P�.z�}�C��8~���&���p2�@�Q{����^b~
��r"J�p3�%1�u3N��*�w/���SnQ�i��.�ǹ��P��ؽ�""(��~�҉���5�l�$�>�W�쩈!�z�t���)�ϓ��ABX��e'd�jNh�
i�t[
��״�ܬ���
k����)��Z(&�c�iT� ��ļ@�2m!#�+��/W�?�Lj)����["Ws��e�R�D�U��@�:���kq��f.�	�}"Z\p"A�-�V�/i��2SE�	�-��2p��P���N:� �R ar��VU��4)w�ƿ.�*���l�D��u�rO5�'���E/
�0@��g$�r���<<�Y��V4���{���I�c2�
u�lg
3�ڸaTm>
>��7�IHnz��o�Vi�t#�B������oA�v��U�,�f�1=�n�9B��P����:�
�e�pnݿ󟫻�:�����{\�- at JHRq���$�^��W
+(	����5�tw��2[���hA���c`@�kG|?Z�4�bk�9�Xp�
i�îV�����ѷyi4/Q���Q��j� 5tYb
+bCnV� ʮR��˒�LE2�zb`E�]xh1
��0&X�
�l���K;��p
�j�
_�᫷�
c&|M�K ��#�
�a 1\ĔO�~P�Ϡ��W�9����W��`J�6L���Ni
~ �<�RC0=�6�<�)Z����#�R��R�QT�C��:��)��f�p!��_�.�&���J�:rH_��Չ�iU�
��S��]���bYAD��
��z�e��QF4�n�H��g��&��q�m���l�=P�k�m�&s�
ާZ�|���X��"���Nv�b�O���
"*�
��S<]�0�ϸ.��9w�a�!	C�|�C
`���`
Lt��b��5�;w���+�EIEPX���
;��[��'�9
�1Ϧ�躓�
���hc�2�M(ݥ�-�1!���S��n�*��[2�4�[%ճ�f�
�0�	 *�~���W�Ѐ�#�@�c���~9ŵ�v(�?�~���
v���aI-ڲ
ܱ@��3R���"D�"<$�:���� ����,���H���f��)Ea����
�5¹cDi���Pjx�����G8E�s�s|{<�KM�4T>��@��x��:��)�~x�S4�%�N�  x �wH�nf��
�y'$���d}F	n�,7�h�ك6b�{�{q�Bwp91r �A�H�PCA:i#�p�B������aw1#J��Nqquv}��]���,>�Z)8��W{���'��S{p���	�ж™~��!�|�/�(`�!�i���8���
��:H�mL�����0�^
�`Y�ua'�����;��4���xL;���q����~���
Ⱦ�k;�)��&VYrg��}W3�|S�yڲ+T̓��
��ŲܴY
����M��w��9(~���O��dٔU�)��S��p�[�{[j�+;�oKS���Gߗ���뤩�d��R��H�w�����>7�!����t���p�z�Y�6ߥwp�GD��f
#"���[����`�ct����~���#\&�1�A�C�y�.���DZ7�
CLw�7�߃��:xб��o
t�;?#��k��'?������
�+��n�����X#�7��辮 ���${
+2@�fے[u���e/˪J��m&L��KF���*+
m�t�k`i���z_�zm�
���,b�6��Ƅ��c��6��ЩK<[v�S[AR�B�g��?�)n�K۷�	�2��@��\���Y�pBɾN�wha-�*A�0�v�&@���m
��]�7e�s뀈U��vj���3/ԝ�t�3���it ��q B�
��W{��:��Řw���FK�F���:2X�m��ʷq
�[�e��ހk��o�9�&��.��BF��P_�5<��
+endstream
+endobj
+1688 0 obj <<
+/Type /Page
+/Contents 1689 0 R
+/Resources 1687 0 R
+/MediaBox [0 0 612 792]
+/Parent 1694 0 R
+>> endobj
+1690 0 obj <<
+/D [1688 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1691 0 obj <<
+/D [1688 0 R /XYZ 86.4 622.446 null]
+>> endobj
+1692 0 obj <<
+/D [1688 0 R /XYZ 86.4 391.985 null]
+>> endobj
+1693 0 obj <<
+/D [1688 0 R /XYZ 86.4 169.704 null]
+>> endobj
+1687 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1697 0 obj <<
+/Length 2634      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۸�_��݉q��N���d|i{v҇�=0ms���/���. R$E�r��i^l
+v���-Ag�3:{}��˓�^	=�I���]^ͬ&rfxL�`����c����Ԙ�}���Oτ���S}8,�Nj�8$����o>��O�(�M��ӟ/ߞ��<�|€+����"V��|y��g:[���3JDlgwn�r&EL8<峋���i�u�3�K-	' :c�F/��X%��+�Vi�����T�(
��u�����
#�z���
7�9��-}��vD��3
+�;��7)��Ơ�</N����pyx���@��2,Kp���Q��ɧ��VK�T'�*�
N4� ��b~�Ȁ��w��2����F�M����L’;��(���<p/�ϛ�L��
+���3�m�~m�g�c�j�
��H��'��QG%;\���$�q�1��b�-�+��9�&��n��U٢y
Z�SlT\z"?Q&WY��-2xi����&��S���v��@�f�#��'U��ޔ΄�w��O'� AE8|JFFi��8�\<����8!�wE
��7I�
���&-���J��	��Z�ߍ=ó?�M��`yy�Ua�X�U6ofg��?�XN�:<k���x�0�X����q����h c�e�����Qg>�ap��Ϩ6 ��իPvu�
�%�_쪙	3����*��;o��hy���n��O
V�9��"]'��0m�
+�$�c��k2"��Ī��+OW�ݘ�`%������	��J7u"�2JI�Yh{T
�TL	r�̖��@���޾lL�5 at I!���
̯���g.\���CM�la��B=D
�|c��F�+l��Y2ؼfD��
��2��*�����4��m�Q�`���[BE<�!��vv�D�h�{[Y��g^�?�����'��_��=���C`����i5/�u[4kg�E4
�R�6��c��1k�8n=}ab��V�>�W��x��`��
�U7~��K�@קɣ�'���e=x3L�0��~K+�W�Z�U���}y�i�no�A&�ǖ��:�������T
aK
lHK�HIa[c��N�6�<r�X�n����<r"�c�%�|�]�(]4灁
2)
�v�
��t�F 
���!F��6\�_<�O������2�t�Y̨����=T�ls�!
+̋U=٪�݌dFT�2h-�z�w[��
H���
$?˺>RY�x�T�,[m�uU�y�2`�I)������̞7N���nv'�:
�]�4!	
�j8#�����0�X���}�݈�|�=H�R�5pV�o�0J	L����w��PE�M֨�/�}}L� �@C}�
$SDo��� �p
+�*�:�������DY�����B=�6���D=.�
�HI�������//v���:� w�� �[���y��P�4�Cl� ���f>G�V��&�C
��zڿ��ؾ{߫Fma��HQ%<�^�0�4�	��1�r
+�6��������A^eBtOnpAMj�{�
n)�Qv�mX�����Pl
|-&���6V
+8��aB�A�Q�N��3md
U��Z����Q�
H
�����A�	"�cp���Y��=vơ��|�������
��ږ�-?����{8�"�

+�	+��:K�
�o.�,�9
5'L?c��&-���ެ|�
[9,*��*?��F��q`]�r�m7��!���\��n޻$D�6� ��R5,D���
�`d�8��
I<������,�_����8(FdE|�CY%8����?�����rcQ�k�H�`�T/�1����D��]~����� 6 ��6�o���I^�%p/�:b�\o��1�jc���b�/��Xy�1��@Hc��M�1��JQ�Cz!X��?�H)&{!\t�>�$C
+Q���~���(_�p �C�
��­�p�GfS�e�"� M:h�V��:��E��]�߶�~
��ۏo[=�_�M�^6 H���0�� 'n?������Q=���a��"��
��g��0�oô�>n8ԡ� 
ʇ�}1Т����
7����MqȻ�[^���
�n��E~y�1��!PR�}y����@�;b6�o����

f�#ǡxIi�� ݧ
�����!��r� �\AmG�Q�����#0
����A�1��A}o_!����~|+��a?��i��L�Az�}ē|OZ�!-KUi{	F�5h�є���yU�K��au��ϛ��K鲩
`�k����<T���
+���C�0V_O���$�
+�1���=���ns��d<�9�Vx���a�-����
���'m?Ƭ��3 ��X�Y�ܱ�Γ�~�����c�`�����i��4���
�
L!|
+J��}���§�Hp��V�W�+/�}W
��2����ixO	��QK��>�@{�.��p�
�ڒ�{��t{�M��ccx��z�M�F��7���T���،�'rq
�����0��:T
Z�o���C'�'�n.�ԃ�;P
+#�K�ޑ���Pf��W��=����wt#��7��T`R3~�8B�L,���������JR����Y�����0���(����d+�����x �~<�bwy~�����
`��
+endstream
+endobj
+1696 0 obj <<
+/Type /Page
+/Contents 1697 0 R
+/Resources 1695 0 R
+/MediaBox [0 0 612 792]
+/Parent 1694 0 R
+>> endobj
+1698 0 obj <<
+/D [1696 0 R /XYZ 86.4 726.045 null]
+>> endobj
+206 0 obj <<
+/D [1696 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1699 0 obj <<
+/D [1696 0 R /XYZ 86.4 606.189 null]
+>> endobj
+1700 0 obj <<
+/D [1696 0 R /XYZ 86.4 403.296 null]
+>> endobj
+1701 0 obj <<
+/D [1696 0 R /XYZ 86.4 191.274 null]
+>> endobj
+1695 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1704 0 obj <<
+/Length 2533      
+/Filter /FlateDecode
+>>
+stream
+x��Z�r����+�J�)�����T�Gr٥Q��<�,`���� �x�>� � eq\)�+�x��s�i ��fx���o��]19
Q(���nfZ">S4D����z�>�H�L��]�U���	�i�No��U�d�b����:�b���ۋ�ۋ�.��3R
+��r��^����p��
#��G{�v�Y�(
����?/��&nNWwg+C���n�7Y�~�����I��7����|���\��4�
cp��;��q�DsJ�;wk�&ӈQ^�Y����
\9����&J�x���v��Hc���諟�u<`�aXݔ��|����Bԣ���1A�R�1��T "�
.��mc�#"I������w���$�t��
�٫�o��~��7J+w@ȋ:l�
�BQ���̀S�P$��-�q����4�
pJx�����4��G�;,���I�ց�����}'R	٢`�*D�>ljTr�M<`$���f _����8�I�W�e򔰽pnKv�d���λ�>*�Q�~�\�]��8���nNu�������b.|������F�+$�ʇY8��Qap��n��ݠq
��|!B��{,�m�nl�����(-2w�P��|�qga�$�&* Cu6)��ÝE�>������da��];�0`Zk�#�� 	�Ȃ��=�0�~0�X�Q$���"
���L %�
�jm�˿_�|9Tj
+)��bVA>c�2{*^��>*f(�kbZ�*�U�I[#�0�I"�'��;zti�4J�P�B�P�T�����
+P��F�ń!j �����Ӝ��#l+����W��4�D�=T��B��"����,�AL���huo �	�����<y���!:Z��$
6
+~�z@�p�akO� ����.���2��`��M}��k�*%=�sqz�@+ �e����	k�*��x0@d�@L�`�
�`%%�H��w�>��ݿ R�nE�e~���Q����o!0�l�~rGQ��󥝽9�ɭ*
���`��43�6ɘ�����o��F�5&l�������DDw��&���m�{�>�i�K"ML�Jܮ��
mֶ
�Sczuw�8Z����'Kgn�<(���6�u6
Q��S�
Y�
�s����3�8o%2rNi�1
��n�РĐ6j����C��|��<^��ͧ�.�rOJ
`@�rOb2
�'��پ|ؗMg���r� �T
��X_R-�M���Y�GO�D�gmX&
�(�
�
��
WJR''퀹I)s�0jF�X�SEZ
��b�Y��i\�����|��S|��
+<䧻qƍ�-ܩ2�՚�F��C�<y����[ؓò!>�vkw�.I
)
H�g����
�(Y��q!�K��)���6�����d�Sp��t��S��<F*�d���N˴��t�߂�/#���*@wA��ϘD�f��S<1�(8W at Q>�P�&�&=O2�z�4��f`��	(�,ˠ�5���Z�����֟v���\��)^.���~��@�0R����p
Z�>�����Ph
���`�
�z�0��hm�r�Q
3P���(�-( �eE� 
r
��!�@��dy���h+
"��T�l
�B���@1;F��d!Q
+<��P
X��D�Q�MUuT�>f�ڥ���@���;�'�����I��
��@���Fj
,e��� a�Y��������o4-
rġ����E�+wƒ�?Ł�P��\j���je7�HIP�
mO4kc���|b�� 2כ���m�7��
+>����?3�9�A��ReH��H����d6	#�Y�w����q`�H��f(	CY��w�^].��&q-�j6lVL�k	1�]Jfv�"�#����y�_�����J�q9]�惵/Ev��@4�9��9
+�G�/
bS�<u��B�m�����D� d���~(��y�rGZU�cTA�Ѱ��z:ڃ

+x�1�b�
���!��6	��D7�(T&	;x,�L�;O��(�}֑

�ے�ۤ�j¦�#)Fp�~���f'��UV��*�ͼ����������.+kQ�p��L�4���t8�aX�1��XLR��﬏H5¯bg��e�������(�|{�&�DR��O���<S�tLk4��^�Y5Z�)����ƺ�h f�"��4ډ�͔H&�
}֤Y��
�.]}�̓NT�X��Y�����
�#[)@#O*r���ۜ
S����
+�>
�2C��I��K�������jQ�JG��:,$���?ZE�
1��
��
� ���4��d+��l˘����G���?��
γ��z�2���a�j���/��ΰ�J�����i2�ɱ8K��P�ST��zY�2���>b
XV��ؗ�}!GL~	2��J��G�
���i ?Q�&V��nG?���@Mj=u]W�o��a�Ӓ�hl"<Ӈ<C����0���*!zn~�C4�����Xs����7
pʲ
83�:

� �$'z�
k�~&��������/y�	ş�%W���ۗ<c_򜀹�� %���OO�^����
+endstream
+endobj
+1703 0 obj <<
+/Type /Page
+/Contents 1704 0 R
+/Resources 1702 0 R
+/MediaBox [0 0 612 792]
+/Parent 1694 0 R
+>> endobj
+1705 0 obj <<
+/D [1703 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1706 0 obj <<
+/D [1703 0 R /XYZ 86.4 635.42 null]
+>> endobj
+210 0 obj <<
+/D [1703 0 R /XYZ 86.4 529.212 null]
+>> endobj
+1707 0 obj <<
+/D [1703 0 R /XYZ 86.4 475.05 null]
+>> endobj
+1708 0 obj <<
+/D [1703 0 R /XYZ 86.4 313.731 null]
+>> endobj
+1709 0 obj <<
+/D [1703 0 R /XYZ 86.4 147.03 null]
+>> endobj
+1702 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1712 0 obj <<
+/Length 2728      
+/Filter /FlateDecode
+>>
+stream
+x��ZI����ϯ�)��v�]9$��JV��H>�>`H
e� pF���  ��H,%rt!�u��{
�'�	��x��o�191�H*'׷-�(j�ddr������Ψ�JE��4_NgL��ɔDo��D���镽Ģۢ������*�M����O�/�]��'��"��r2_]��
Op��#f���=��pf��lru�
|�ki"Jz�9���N����:)�:��2%��,͓8p\��UV�f��|Ǚ�]l���Rn�WY��}�;L�Ɍ I�=�w@�K��,+�TGN}��vw����I\�e�]r?2��,�ɚ��b�j � ]UP.� ^
��j�f#��^9��c�L���&K��3�Y�0�**�߫u<����&-�U�[����n;���
4��~G��feo��	��2
��ߴ��Ro
P�%\�q��E�5�[&���>t
zۀ��	��D��
��h��P��մ;X�	�[��YXg��}���ެ�a��8_���
ԙ���
�;a��2�
C�3�C|�
:�x���"�7i��<�y]��ƺll:���@vH��Xx���e��s
1�s"sL�*]$�Ȃ
,e�`�
��	���E
+�,)��쭮T�����R� ����5x�}�r>�qb���,�£%�XO��W�=Yl�x�6$��6F��kQ�[�����4zUԉ�Q����=�K��j8��U gu����
8~�B�l
���CZ�=�+A�"��X�!��<|y�p�Zt�����f���k���*N��:?���1{}���
�x�0F��^^�����'~��Y�e��Z��������N��g�����x�H�b��bܑK����8"���,�ˇ1��D����ɅBSH|s!�A�l��A3R�;�갃ˣ=��AJ��P
b<�O�\�
�cR�����
!��}<C=�zE�c�Ы
+�(� ш��xo�
ė1�&��,�t-�����F4a}d~_,FTb
MQˁD��"���n�5
��BK�f��.=_	�9M�����q��BF��ö3"�a��j^��nk�N�B�H��� E=�D�I��
'D;f�ȭ�KH�en�"ǒ]fō+��b���T��E��ݢ�0��O)�0�[B6�x��	:@��D��e@�աx�P_���e^�X�{�ܴ�U���\u�
�)��D ��p�}�2a
��\�.x��(FRu��%�U+�}�.��u�6 �����1B0��Y��qPȲ����F��1� <��-��UQ~�;�d�š[���C�2�d��6p�6t'm�Ѡ��Q`V��Ҽ��W��tZ�
+�^#Yb@�n���#q�!��V�m�Uy����k)������ՈЖD/�[��B~h��
������� �
�g0��
���
��ہzˡ��� ��}��O��V

+X�L����J���q��ڪ��4�'cla�Y<jG��Ґ];��E�tj?`[#�~j�$����}��
�
+4�0�4��``�a+�H
����O�<�:9
Z�uZ	+�k}7��V�5�:\����z��C�n7Y�Z��1m����=�;(���
���	��OO�%J1�@�3�X!!I���/_
��R�X�\��ٛ+}��p�q
9����/F�/!�m������mW"��ml6*کY̶ <�f�B��Ǻ��(���\��B����
����*%)��
�#~
+2x����ʁ�
�;ێ�i�Yg�`G;eLX�u�ֺ�b�aZ�q-�]���a�Ph#� l�:�0a1�t�
���X/\U��%Hf~^�eq��W�۾���}���G
	���sF�o�OW�Npd��M����
:5I��
�$��3vƒ�V�x^o,�;*V�)h�{�l��T&�`
��A

�*v���
��<qy�}�nl�uJ!v�|����ix�4H�N݇و�"�&v�z綤�,Y��s�
�XV2
+=ă��X���$�p_�P虾�d�Xš?�9�"�vڷ


�d2��r��6[
5o+�D�

ό���E~����8��I	7󑂗cD(� f�3�<L@ɘ�C� ����Q�ڶ�ݘkH����m��梏��C{�브�,��B�N���U��k��bX��z�K@��
7�H�ү�6�U3�.:/���Y�ݼ߱�qQV��ʌD��SI3��3W�G��3̕��7>��ڬ^��}E[�U0`*���L
����CE

,SÑ�g�+wTqh�L%�"�������25��I�,�Yx92I�RĠ�?i��4m_��Azw�<p�AuD�O�cdK�nh�mubR��u���B���ї�۷e��� ��gE�!���^m�����t.�9��v+��S����_�5�7e�0tQ���x;|��cۯ9�.O�
�ѯ��6��!C�9�
v+ռ�(Z4U�Н�JRu�@�
D��`���
�C?��
ɩn���,n[	&O��j3�Q�3w�*
�
�h�e�tU��,�
]��2##5�"��

�#Tr�fc�
+X��y�*�U�*�e���V�:+ BN ()h��
|
+	h]qz���60s��G�#>�ak��5�~�6WiAG��0�f�
n��w�pÕ^�t�+l�ll[+���˽�g�n<d?�-�|vc>Gå���
�����v�S�-Ҵ[>��<����w�
�7�m��چ
h��� �M�
+endstream
+endobj
+1711 0 obj <<
+/Type /Page
+/Contents 1712 0 R
+/Resources 1710 0 R
+/MediaBox [0 0 612 792]
+/Parent 1694 0 R
+>> endobj
+1713 0 obj <<
+/D [1711 0 R /XYZ 86.4 726.045 null]
+>> endobj
+214 0 obj <<
+/D [1711 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1714 0 obj <<
+/D [1711 0 R /XYZ 86.4 583.735 null]
+>> endobj
+1715 0 obj <<
+/D [1711 0 R /XYZ 86.4 322.102 null]
+>> endobj
+1716 0 obj <<
+/D [1711 0 R /XYZ 86.4 157.23 null]
+>> endobj
+1710 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F11 1019 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1719 0 obj <<
+/Length 2151      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s�F}������N߻U[�����v�I%cO^f���+D at x���{Z--�,l�U��H�߭��9H4�
��ۋ�\|�F�(&��:��EV
-Xt3�>
$Q�b�~��G��|>
����<�g��$O��f8ⱖv���盷�7�]0����*b��&��?�h�;o#JDl�/źE$EL8�ͣ�/hi&=4W�s�4b#
3Œ�������^][���N�Z�f� L؝!
��%��P���ׯ/������
nS��׋�7�.�B
��
�x�~�A�
�A������P��x�-�ގ7��'���d�o��I��̶���$'5SF1��81A,��;c�b���A�`�+���c��J"9�C)��Y����WW-�%p�B

�
�%��j��.�&
~XEbՏ6&4�X$
oYe�c�2lUdK�.��ȓ�O�t���DhVm�B
+��1�	oO3�����4ӂhezI3���z�W'�

O�>�rƉ�Y���<C�bz�gL���f��7�#�3�ղy�L��Yo���;�ĵ�u�L�`���K�U� ]�9�Q:���+6N���Z
+�dk[e�a�;| A��kn���Ւp{�P ƚH
I��盋׷I��v��:�\ލ}��`	��|3��~-�9�����d�tQq�7�[JNc�a(�I0��?G�����Gs0>REO�/�F(q��dLy ��r�v���+o�?���4����bF\"�!gĀ)T	U��l&�����È1�ʁk��4t��X�3�t�Ժ-��a]m['�v� �ӖWj�|�`�pUX�����f�s�r�:۪{	 �r `<rj᱉���d�)��+ ث�������W�h�G�
���ו�`1�&���)@��v�h��]54"I̾�}I�ۦ�ɉ�w�~�~
���7Wחǒf�~*��'	 ���01�Y�.?�6��Nt�,�A.S���|Ԭ�8G�,Dq���~jhP��n��m0F�ٹq��Sٯ�

�Cq�gCp(2���7�*C�V�7�|�6�+�w�+68��K��i��'N���ŀ���d�N��w	�<[��4]���Ȫ��BXV!�l�^�YX+KS��T��e)˲�%����=*AeX.����V�'�wTE���O��
|B�
F�1��\
�H�p�.R ���lҀ�r����xNp����ҒY���ck�) ��;"[�M��z@�N�k�y�i����J�K�b�:��
�V�3P���?<�
���O�6�l/��׬�B>{�Z��@�� ���J�θ
���|J��}��)���'8�5��4�Od)p:ێz,����Ǣ�}J����sȧF+���ƪ0B�ǑOw:�;��T��C>�_X��	��J>)�:I>��Sk�\�U����<�tH���|��U1�� �5�_P�P|-��g���X�5����
{�[2CQ�y��T(ׅ�\�ˁ�P��B��
ǼR�D�X���>H�f�{�+|H���§f��D
+��t�x���9�B�\0���A�0�+�Ai�
+�O�
+��ó����!+t8԰^��q�@ǻ��
�V�0��<X�`9��V��D��`��b��#���P��i,���<]$�S%���R�����`��BW�����ƒp�C���8��򣘡T�	<:����u|.�,��AԐ����4��ֲ��
a�ix2	}y����z�sC�(:�^V�

�܆���x�}J�ˑ�>ɳ��e���r�94�@tj��O
+
��f�T�C`��@.�Bz�N��/���ꪔ�
|X����P�S@�_r
+�,�_:Q����T7sz!�
�&�@�
��"
+���=�O�\�
Ѿ��.0�J��'� �Jޅ�����}���A���`J���@��a��H��=�>&ќ7 �w�'9�0�l+����76�h�|�#:T�O��P��=�vȝ
�)�c�
�a��9�{�#^]wx��=�ET�l;��0�6�ü���*���S�W�d�@�nA�,�MYm�v�W��:�|[4��K�
+g#B�w;^N˒O�wJw
�gYY��5Q�%����-`�I��Y{>0�N��1^�k��{�;Uuh[���@�:��Z�i_x`��oƜP�:�P��E
��E��'�Oۅ+σ��/��:���X��
�3/O�:P��e���k�
+endstream
+endobj
+1718 0 obj <<
+/Type /Page
+/Contents 1719 0 R
+/Resources 1717 0 R
+/MediaBox [0 0 612 792]
+/Parent 1694 0 R
+>> endobj
+1720 0 obj <<
+/D [1718 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1721 0 obj <<
+/D [1718 0 R /XYZ 86.4 645.994 null]
+>> endobj
+1722 0 obj <<
+/D [1718 0 R /XYZ 86.4 482.522 null]
+>> endobj
+1723 0 obj <<
+/D [1718 0 R /XYZ 86.4 319.049 null]
+>> endobj
+1724 0 obj <<
+/D [1718 0 R /XYZ 86.4 155.577 null]
+>> endobj
+1717 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1727 0 obj <<
+/Length 4012      
+/Filter /FlateDecode
+>>
+stream
+x��\K����+trh
Lo���a�vf಻1���� �_�/��U�jI�^o��1�V��+3+���*a��#6z��Ǜ�=�f�3o��LG�djd�ό䣛�ѯc�..�a֎�lf���ҩ�
>~{!����
_�-9������۫���j���Vˋ�o�?x|����l�+):sʌn~�������ˤw���s���>�����z�ʷf�W���\�
Î���&L����g/��߂;�_���Շ^Df\��E���8S���7�
=���w��I�g�e��~��͇
z�r��'�M��I�W;�z{�ۆ��.�O����M��Vr�<_�����m��Lw����N��:�M��3\��%Ws�T�Y�	��
�b^�/��*�ʔC�f��X��o^�8`-	�J�6��7S�U��~Z��y8�y=�<�����X��f���
Ջ�޲�-/�g�����6�)�IëV*�Ǭ��?�f�ޘ�u3#3�� n��WA�
?C��r����z
K=�gP�g�~�� [...]
+��\�8
����|3
�¿?���s
������zv_C�֊����2�i�҉uF�ʹ�:��K�2>xl��u�ݭ�� h[I���te��XU����7[��j��\
����
�������2�K�t�x���?���e ���I^��>�b2=�ZgL���)�A������;��ˌ�#!yy��2s��Ƨ��.��_�Ō]{8
b
+٨�v��&��E²��ޅch0mQkjÄW�^���
+ɷ$��!�����Ê;�,����jY��r�?�A��
�G5V�R�O	����b
_#�i
+rt?,#�J.#���W��*htב�wK�	E���1�h%�XC��}�� ��.
+���Y)R1
J��	�|A�	��� _3��P&eB(���	g%)\-�
tHM�Sƺ;
+�5s��nPNCI
�_ϛOT��`�����u'���V�9����C�#��h���Y9R���0���<�Ԋ6GR�O�[��%�z
���I���U�!���èӆl"N'�9�f��x |{/�^.���N�
�&a�f���׎�Q�:�	y�q�&e$�P����7W�b�wz�J�y!#�O~xv4JP����`�0�18�BSF�<�σU����K����Q��������
C� 	��`4���+�%!�>�� RX���*�`'k�A�«���7?�~�(�
&��
�r����W?>z�ʤ&,�^
��X>��D�
��:�T*_8#N1��į� R/���d��Pש��2ф�뫛'�RkK!��7Ϝ���J+N������RH����Ld
+��!�Z 	e��fYY�ռ��Q^��+�ɾ@""�����Blpq
X��M.>�	���0�2�0��8!K�i�f`g3G�(J�=/#�YX
+�	W��_^�}�Z"�!W����垓���8��ef�:��*p��l�)�M	��8݆����|�.���e�B��

)j.���n�\�O^��^����l9Y�!Z�5Z(n�K�E�1�	nIؠ� ��/	�+΃U:��!�jz���z�PhR,���0hp����N�t�"x ������ȅ�=1+V�z���
��n��u���9,R�r'pؚ�~�$��#
 $�y���q~^4!4E�����U��ͳ��DY��0�\�\����$�b�D*�!�H�ɐ�
�8_�y�
w�u~��*eHK�����L�-眼�S޲��T�u�a�
��w+����;x����y��j?�)ߊ�L&F�o�����m3�t�|��TE{
+���"�/a \F�b���ҥ�{��a�'��i� r5��#��㩖��
D*���������O
^EQXQn���=���Tm2W�j�lO�;P�s9{h;���}�~�N�`עy�m�T�&G���8V̗�
zdBy��Di�s$='w1YP�U��i"R*���!dr[��H���ێ�L���$ܮBO0~�);0����&4~��,.��-����6|}�.���;��=nj�C�
Ϭ>1 U��ń�wg1P��b ��-��z���j����j� ��Ş��}��EZ
�e9^L���?��
:�Y
�z_⥴����?�I�-��jW`X�v[Eڲ��7��'�V1�fw�ۻ��^�+�������&���%�9�v�
�lj$��M��+}�$b�I�OU��'����$ў�-3�8�"$��ϥ��\P�u��
�;�T#Yd���S�T??l�9@��>=�7�	�0Y���!�Q~f5���T�R��C�,�a$���� =���@O���)w�맇�jҷ�C�� z�Ipu�ig�C�Q2Σ��ջA�(�Q���~nH[LC��-��Г���PCWRC�c0QC4�b���*����Y�I�����-�<��"��C��V�ݧ��Z�=m���1WU�ɔ38���n��C�	C1���C�3�� r��y,��PO�z����vr��S��<)��U ���e��e:(c�
;��~<pLU 7�� 1�M������v�^8U�>��
+̽�,%3}��d�9�H�r;��SA
r�>���[� X� 3��a��� �7����q��$��d�����\K
E;���D:�F"xN2
�=d��8�Z[TǘꡦS�
�.=���@�j�iZ@���&�j�o��v��w'�D�� 51t	5!����
�&]�j�H"N��9��j�����g�;O1�����(`� B5��0����:�'X�V��S at iU^��Jp�U���1
�<���mM��i�v��
u����gX�x��^���^un����1�\U���XnOJ�j�D(�����
��Q��,�`>�QI�P��:�I��U�)!uؔ��zr�+���4p~tKB��[�����@O$	#O�T��
+�Q�86y��B`����W�%Yl
+
 �6�f���T@|��J�<�����9!u�U}Q�H��v��Q�)�OC%.�G��DO��
+\�pO�$D#�{
+C\`C�
+��d�G,t}P��ϓE� 9m�Q`���*��L}�2w�ak��t.i����X
�O��+%|}s��0k��v��o�p���XU��s��G��^���o� X�	��TO$���BY��v謴����f;)[t��,��v�ޮ��|S�
`�/����j����B���{��"���f��d5i[�O�)���j��a�R�4/����%j?��a�S��d�d��4���j�@ͩ�3�t�"D������{�����c֚�
�V��v]�Lk/��*���ߴ鵾�� 5"T�[m/΂R�&�
R
�L��Z���t汲x_Z���%
HmE�ä,�n
���2Wl)7]\��Cq�P�fT]x�?�ފ}��3�j4��,�!�J��L���sꤎPWp�ne]Nf���}W4����F���$�Y����z �xX
f���>���?�EA��D9ں�q��Gq3l�ϔR�2Ӫ2j�z���F^L�����y=�������<���Q������Q��ä)"�;AM���L?�=3�
7�|��
Cѿ�-�}��v�,�:�
�]O2�6�I�$��ˠ��a���θ(�Y��7Q�
��-�yh
�I�-J�����G����	a���K�l�A
���~NZ
+endstream
+endobj
+1726 0 obj <<
+/Type /Page
+/Contents 1727 0 R
+/Resources 1725 0 R
+/MediaBox [0 0 612 792]
+/Parent 1694 0 R
+>> endobj
+1728 0 obj <<
+/D [1726 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1729 0 obj <<
+/D [1726 0 R /XYZ 86.4 614.667 null]
+>> endobj
+1730 0 obj <<
+/D [1726 0 R /XYZ 86.4 215.581 null]
+>> endobj
+218 0 obj <<
+/D [1726 0 R /XYZ 86.4 107.83 null]
+>> endobj
+1725 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F14 1030 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1734 0 obj <<
+/Length 3752      
+/Filter /FlateDecode
+>>
+stream
+xڭZIw�6��W�(��� A2����%�L/3�N.I��L(R!�v{~�|��H�ZI�DK�P{.n�����ξy-�"
2
����"ՁZ$Qh)W��/K��K���O�i.��v[fM]jy��V]QW��e�EQ����oW?���:��L`�p!<�8H�^�6g��.��q2K�v�f�dDh���g�=
�(���L"ь����Ҵ�J����CC(
H0��U�ߍ������ի�� �nE� �m��x0�]�����\��E�խ[U�`�1�l�Ų��Í
���
+�*
/"��ܗBY��wS7D���) �{��6�ui6��e����ܹ¡܂��}�Z�	(hf��B�s�6�U����\-)?umJ�F�D˶.wD;F�����9D*j���r��f�E=�P�|�ǿ��(P�B�6�5��Rj��Lp~�w-�yX��e&��b�|}ᭉ��w0�eΠ��jE�2m{�+���f	%Q
+u�$�e?���Z�3pU��d� T3�����E�@YJ
q,���JŔ�#nI�冾$ɐS�m.
��EЄ
+2� +
+"1�++�а]��wx�X@�ũ򖤽h6��]�X�l�w���䟋�9! �7ԗBɺ;��5wԤ�kӐn�Ԫ�ά�5���,/t�%=3�Qݬ�Џ4��v�f��;T53C� (�e��b[�
�2�;�@cK'���P�zl�H#�_}����Ed&t�m�^�պp�  �;�u�*��*i���S�,�zb��A
+�#�8C
�J�����r�I�1Ա͛
� ����!o�'l��
�^d��{���(<mM�W��ʨt�k��T��"����М��̡ �@*=��kS!��b�2N�y7 ^�ݬW��7����D���_>�q�hџ|��G��q�:�kO����������3<��n��"�y�
��W��H�|���!Tl�>��1����/��!
��D|Q�U��r"J��n9�X$�f͆�2SA$����̚���!�
�[�&�<é�^�Ee�;a�?���?�����s��9�	�|
��6Eޙ�H�G��ٳg3��0��Af�C�ͥw2I ����Y5�5#�fZ�K�]�6Gr�����Q���I����?�_��8�n���$����=1�h��5�ӥ#q�$��m�}t-�����-�5�h�E݋�?��0G�U�$D�P�l*"�+bO��6�Һ�r�?fJ�ON�W�}ņ
+�Z��M#�>Xwh��mQ
�q�19Dz4��}GhSk]�pq��v� f�%��"k�&���_�n�GɲL._}^�m�CLZ�k-p49X��� ^0_IJ�8�
+�e{� x at n���9w���[f~�>������2\�n��λ�^��b&tw'%��D��C;l�5�ty��e	5hI��Z�b�w �����|�����
�����wMyA
6���Z�y�s�D&i�f�߈y�N(��m?����9m;bS���@K{
+��I��]L�ќ�4�Vh�'�%E�l����c-j�t 9����a{�d��Nh@
+K�]GBM��qF8�x�НX¾��k���e�_7G
;1
[���5�X8�5�_��������Gxk4ެa�
9"���B���b���`.��� :��l2�I�i/
����⋄
��ƞ��r��{84�~�C��	l6��"��Y�#柉FHP{gRT��񶙜���eF� a�ł�z�z��ʦwZp������w9Mc��\ė<Nd���B��Ծ��s&�Yp�
 �q6\[D���y$LI�k����k�ŀ�v��US�-[V���i��J��[dj�)�}
��HZܖ�͜*@��

"O�lT�p1���ʵ�6��'��FG�������VS���br,����+�\N(Ѱ�E��Y�
wU#	!2V�MN �ʦ����X��6�A����B%d��k�p���4��T��.��� ���p�z1�)s�=�d���v�	V�l�ǘ�Cs���m�^��Z1�
���^�'�|�9�x�$��Ǻ�:X�p/wp�-ޡ��
���9-w�^�/�a
^[
��?���]�E������x(\�d�D�%W�0�c�)J�ɓ�`�7w�`��ӌN�@n����̌6�
���͆����f�G�C�Z�"�S!w�.�����Ү�Q��GK�Z2
�w FT� �1$���R���c�f��I䍳Qʞ���3�;{� ���{�?^�V�	Z�,��+�k�NMڨO�n�
Z#��'F�6쓫)NI��/HSawN�W��$	B�M�1�
Ƨ
]�!$�����Ɛ�:���FAH�3h/
�[��Gy4 ��K�I�Lk#��ʷ��a�
�����$���P�3��m
+
�f�<�Z6^^`�"/��"'�zB���݉z���Ѳ^�%{�
��I�=��2C�m��E�7�����$r���H����B���q��E���JZP�E��@#u�
\8��i��S]�Y2�}����%U&���'p�(��}��$ĶCi�+� �=+��A�����Gp�>@� )i���u��]��
+�v���v�BQ��pE�
�/�X5�-��;!�B�8N_�Q]����Q`B9)^��$z7ct�4�B�ʊ�3��JF�"����i�.�Oœ��3�[{�8E0,Z�S��� ���qس�q��Y�c+f����Y�y)�1����i7E{a�C
vP3	�pyZT݉�pI�
.i��2�~l4���
]�.8�=nb
*�S:���8
R��M���*��E��\I��O/^����T=�9�g�|�*���4�[
��:\QSx�Z���kBl45�Lj�I ���3B����!�}�v�
�A��'�4�B�<���Oo�
aL��r̿Ca�R'��4P�u��R@������I?�;�P��6�pk�
>�?9�+T�����8
�$��b�]��㔱����9�V��������e䧎�<�O#k ��x���9Q�pgO�%T
+�;����7o޿8&k:��]�[-�
�x�"���\d��f"�,>16�� 4�}Q�]Â	V�׽<�Ue[���q5��
#��gS����Gj�0�lg����Ԝ&��͢L�Q�+V0�)D�� zȥeg����l���d�w����d����,��\�%�9W�
/��˲@���N\�]m�
+ at einG�
W�"0�v

8���;��G\R'�����.�ZGK�4�_��`�k�
_̾�@�S��P�AR^R��kM�nP��2
�m���[�?]�S��;E�y��Y��RH��M�pSiу�@�ґU�_R(���ݤ�(�N&�����iC�!
+d��o��}c����aB�_a��ZE����ɵs1)l�{ml}�=]�p
��ꂻl�k
.t}����8���;S�d;=ᅫ�R�k��t�{˃�}��3{��I�]���;̈́�6��Sa��~�p�G'q��K�4<@/�N6��%�d:&��<J2�/%���|U_yu٘��/`}Q�gm��ua
���|�:�o<ͨ�L�w��z������,u��2�r���ѱ�8Į*����~�Q������)Y���1�W����Y�Ѹuw�]�P�8���[�.*	�j�ꑟX<�vt�Ŀ���]���dB�[:���m��ݦ
���]�5��H{��S{{�N�ސ@ѳ��;wg/�b�q'!�"{�{��<��T�?Q��=rqo���
�c[R<���4������}]�?�}��?
+f���>>����٪"<��ݙ��
+endstream
+endobj
+1733 0 obj <<
+/Type /Page
+/Contents 1734 0 R
+/Resources 1732 0 R
+/MediaBox [0 0 612 792]
+/Parent 1737 0 R
+/Annots [ 1731 0 R ]
+>> endobj
+1731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.577 580.073 158.048 590.921]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1735 0 obj <<
+/D [1733 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1736 0 obj <<
+/D [1733 0 R /XYZ 86.4 433.815 null]
+>> endobj
+222 0 obj <<
+/D [1733 0 R /XYZ 86.4 189.863 null]
+>> endobj
+226 0 obj <<
+/D [1733 0 R /XYZ 86.4 84.358 null]
+>> endobj
+1732 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F49 967 0 R /F16 717 0 R /F11 1019 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1740 0 obj <<
+/Length 3700      
+/Filter /FlateDecode
+>>
+stream
+xڽZK��6�ϯP퉓!ċ 7'���8��$�ؗ$Z�$�J�,Iyj��o7�K�<�L� �W��n ^l��W�����V&����Hw��M�Z��D���z�{d��Hbc��MQn��Ҫ��5�>]K
����IF�����O�R����Uy����Wo��s�a�x��*�Y�,V�����k���"f2����P2eZ�Ň�߮b���<q̔��aҚn��:M���C�
S at o��$�S8�);�\�
L���q��^z�kng���{���kXj�7eo��O�f������sU�
��	�	gRh��F����:�\/��QQ���#��w�
���^��
{S�����N�%e����,O/+����TJR���t~�W-*/��xa)��ev�b�b+��b];`�%��O�R��뗪XS��M^�lU���L$��zÄbq*�TI�7���
���D-��B���%�L���
�{�'6��|4x�;z
��܇���X����[��������v�S�5�b [...]
���z�̉��]�?�"eԴY���*��;m9�ހ��$
<�^3�D���2Xr��6Nd�	��U�=
<�ͨ����
�1�����
(%���c]f�?�Y
��NL� &�K�£iy���a�\ڒv��Ra���2�63׫�Dnf�AHńM��
��4�Y�.(���`~����v~��=�_�oul�7]0��ʄy6s�H���+��l���,P'�t�pp�JLtn޽�`�D
�<˽s#���M����_�4s�pL�/�CC�%r�2,~j�	7v��	`J����T���5�t�5M�&
k��`n:�|��Z���#P������眯T)�V�����=���mL"������� ,�D��Ā�,t��ͮ:�j�DuX��(�Oņ��q�ʛfs���ԅV�N��j�
t��=XN�
=_7�c�|U�Ȉq��{o��v�
����ʹ�5A%�4�`�F\x
v�
+'��
��	�y�%U'�lED �f�mf�
����Ҷ�ᾥPZ��}�Zt�]D�']Ge���"�C��:V-��d��)'|;�
�
6�l%
�ƼV>�.u��
2~9Ɛ��|�
+���3��cC�v �sS��x!Ɗ8Y-%LZZP~�,�
+ Ʀ�Me����On?�{}���)�
+�ˆ�·����k�'�P2�|}-�;@|�|�
�Um�L��L��^���D
@������	�r�
�.���<C�I @��n�hw��K��'�bJّ�����	V�^*)�~Đ�����X��Mh �9ק��:�x
+��U_��
+r0n����[���=��Xe{�F\����_�Ro�m��Q��! +��G&�$lC�
����tظC���$+cZy�� S�{8����N���xFpn���?���DMu�[|@�d��G?|Sζ
<%d�S׈#vy�U���2���%W�0PV�r<��z�a�D��{�H>6��XLV��
��Ҩ4z���
+����=z�R�̇l���X��ա�b
�Z�8�8�e" �ٱ6�Hr
+E�$�0>���Y
��Q��D8�j8��Z�,�s
+
7�^�a��q5
�!�ʼn]��/�d�lu��c���5�UyB$�����C(`��t%�>c
+�s��[v�Hn��tD(.ps<Yy�z�u�5U��x�E���I
�Q
[}=ߜJp	��j����\<�nYK�n�UU����g´&T^�R{��C�
��}Q�YM���;J�k
���
�B~Cu'��m^'�7�R�9F�h-�	�
¹�^���h�]��#
���J�u��%2
۟I9��X��!��S��,��9�K/��!Ҩu޺A�

KI�
��1*v#���N�s��U 2p#.
�2p�]�MK/mq�L[k�-���
+�9�����d���	�D�]>�%II
�zߕ: ?�s�wL�q�3_��*s�չ���/yp2�s �`�!D�m�C뾮`�|�l���sQ��ǵ�������s��T		$�U|�>� _.��(Ĺ��������N
���
�ҹ�;���ߟr$�
i��C�J|`�!�j'w�5�<�"�Lz
�|KhH5d9���z�n
l�ڇ�$�E�8a�� 8�r�!�b�v������DF��Ad�8��7��Y�`��x��C��}``��.�]��o����8܄Nf���v| 
#�
3��;Lج�>Nܚ�����r!�c}�?�̑J]&���r{q9{�^y	
�/��l���R�*fH��������a���e�z�JB�b��k�͐$
�vW�5��z�]��
r�����<TY�֠Jon���\
�������ԑ�J��L��A4������b��疂<&��+k�`�]۰@h��C�
�o��ޙ�
1<(��$9

R��D�7fRp�4�'�m�� �|L����aB�1��cFh8
u���P-٣����0��Q1�
<��M@">L
�g��#I��E9��s1���� 
+*գ/�=�`�;�n�<��!O4�Kl��4�����rБ�~!
���N�;9Dg<�
gfl�G	6�≇�6>������>%?U�
V�)�����-�%L��9��7x�q�u��R�H�֕H��N��)�౺Pn*�}������e�
�z�e�d�x���)��Y�B��>Z����3'�%)�\8E��

�/f�NJ��7(Ea �� �q6�yS������W.���!��"�\�1fO)�p�%�lӆ
g��6�
�[�h��E4�(�(�}�!(a����L�h�pB���!�>�DWž �r��{?{EON�`��
8^|=c�,H���f�����f��*��4�Ȝ�r
f���e�}�
+�R�
Y�>�{�fƆ���H�"����$
�z�v� ۍӗX�5�iF�>�t]'���#�a#��"m�	�Y�b	��\�荇CF��6M���j���0�
o��
+}Q����p�svWKz�R����SX��d�}K/
V��S��)��o�(��cՃ9�� ��(&�ˮ���O��1��}{r:8
6pJFι(=<�-n�g*�2È���h�ă �!oA`�E(�.cf5���ɐȅ�
[�P���щ�k�/�G�Gi��K�s[������'��O�Ls��$�����
���@�����
�ޛA_{��Q�h���
+EJ����)}���G��.�7P��ғ�5]�
'&���}����A�V�����RWX>s�s�Z���G��*q��+
�l���S(<CR�������m�����z��+�
dwI�����(V�u��M�u4��� xѹ��T�� ���of���m���������
,�
�ts:a���-����
# ��"�`�<�Z;p�S�p]�i���c��ڵ��1 �/�.-�=�[܇/�6_�]�+�Q�/�85������]h�b|�
���Xs��<�~Q!��
,Z��>x�& [...]
+endstream
+endobj
+1739 0 obj <<
+/Type /Page
+/Contents 1740 0 R
+/Resources 1738 0 R
+/MediaBox [0 0 612 792]
+/Parent 1737 0 R
+>> endobj
+1741 0 obj <<
+/D [1739 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1742 0 obj <<
+/D [1739 0 R /XYZ 86.4 701.138 null]
+>> endobj
+230 0 obj <<
+/D [1739 0 R /XYZ 86.4 231.477 null]
+>> endobj
+1743 0 obj <<
+/D [1739 0 R /XYZ 86.4 161.86 null]
+>> endobj
+1738 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F16 717 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1749 0 obj <<
+/Length 3208      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs���W�-�k�E�ˇ�>�u%[����
�ae�Ԓ�U)�>�x�	�$�$�JN�`���������͊��|�����ߊle��x���^�ȕ�d���6�_I��
�E�S[4���vW|$��C��ʺj�/��\%���v��ٛ��Og
��+D�D�l�ޟ��]m��w+J�ѫ;;n���w�Տg?�Q�"
�*�HU&���0�T�ݷ7V����oǟ��G����B$ݶ��MS7�پh��� 3a.��
&�L�Zl�`�&��U�2b�:fA�н"��1)���sn�.?�j�Hj�xՒ�$w�[�:��eu��h�Ӯv�C��
/�6e�^�����.�B�(2W�p�j
4��HRE8�0�d0>�[hj�I�Ӡ�m��zz��m�~�ͱ\������x|���?ݛ��K^mvE�Z��(����S7ɜ�|����ˢ;4�s���i��C1�𗋔��eDY�	c���p\=0]*{�B����y뢥:gI�n��j�Um�(&5�29]���+� [...]
+�D�ܤk�ш�HB��`	IU��]���pO�-�������xw�#�-���JS�����a'��XC�XCd�c�������^�Cd$���l�w������%WB%﮽9���h 
� �T��J��n�w�Ϝ�y_�ݳ%�Y|�^�/�us�պ>�aA��`�Q/�}�gk�����
��1��R#
��! �K�
�
U
+DAJ��#����j�"�č�Y�]��2��� ��N�&�3?�`~�&o|jT)�`IQ�l�O:�
��%�ݛjBa
`+�%�;���x��
T㰁�V_��B�4�9���
�>�)_7�n�!�����ֻC���˫u���ff�r
��s�s�'�Y5���'NJ��Y�?kVA9�c	QH(
��u1���LNv�����[�άR��`�9��������.��
 ~?d]�����Y
���3��^���!�{[V����/���{T���M�xFH��
+S��a�Z�hѯ�sD��l&B�ލ�#FcyF��d�ZF
+��C<
����ӽ8��nh�i��&�Pj��ٱP���[�b}�m^x����U��J{K|��}d�I�� �b�)I������CGv�+e 4���y|i}�
����X�� )(
f�fX]dq�h���} ����s��T���W5%:
�{
�x����&NT��ق��6¥I0�V�L<�`e���a��4��-�P�����A�3�ܕ��{��#��q�e-���'��|�_"��n[ٛ�W�d�>BY#���'�Jع3͍�K,JNԬN����M�?�?�vX�8|V98$�
�U�3��.p�L[
����ng�]��z�z#��ޖ *��>�B
n��9&FsB����@�`i�������1ώ~�ijţ ����IC��ԃ��*�=�ݖ��)��#t��Ŧ ?N�n)��ݠ�~�́·��/���$$
�C
���J5���,�K�V���QC�m'QC
XtD
(�"��r�EѲ�M��a�j�T��D-l�qs�9�f@�I�����&�Q���,�)}�05�+֡��E՜�eLh
+��l
N4�o�5�4�IQ�R���C��6 ����ess�����<)n�g�L3
%a������U��^�z̮6^��wM����z��/s?�n[���v6�h+�T[
��������S��t
+�p���Gg�#$�5͔t%��m9���Ё#*ed
x��ˇG*gVi��<��
��갬�"�3����1Ob1yJ
��i��c���}�XL
XL�C�XL+�u�
`1��&��������F�னL�FZ���DxL\T�1��
�15�|
��D��utN-H�d0���(;-������tI]f�-W�~T����e�=��<&
��Q	 p�o=������m��ݽZx!=셈\�T�
"S�lS�j �K���I�~Ù+�XH9c$@��ll���G�X�X�N^b�@�·�iqޞ�^M�4	
�g3�A���֒Ծ&�+�-lG鷝��T��I� �<n#�? �0�x�Q�D̋
+יhvo���qN����U
+>�m_7Xu�����}��m���w(Sk

�
���6E����]�ڦ�U�R<����+j��>�Q���p��x���w{�z]b�п�p�.F��}8����Iؗ�5rE>��r
\ҧC����o�T$�b�9��h�k7Y�{��Uu�^���-v#�&N�r@�
�$Ǡ��A��A�ĵBu�ٞ�S�H�>�6E�\r��
��v��<�
+/_�65TT{���g����������
�^��5?.$֛��?����a����o����+���P
��a�$R��f���@�gA�*$

?�
+�5��d����Շ˺�gF�����R&�
C�G�i�9v�I�\ԪS0	
]y8�
l0�
��f�w�<_=������8ִ��۸g�@&4E���nHw��G�Q�U�8��hkI
���Bc
�T��n��x��bT��`?���ssN!J�
g	 Dž����Y h���S�Q�"�T#X�_���rH��,w�!�_�%+���f�=i�7�=0���{F�\���w�
$�*��>�R��+���o��;:uw���9���f��~@�QH��dGx]5�u=S�jt��,t��MHҙ�fԻ#~�M�?d]�;�k�S�[��>�rp�)(��i9%M������i�e҃M�c���6�`���8���g�
����8��_��P��E,������vOr���F���i���k�7�/�O�A�M�OŵN�ﮨn�m���?�
x" ��lV<�
ϳ]{O�T~�b��4�`O
�А��gl�`�9�Y<
cx�"O�á(δ��x�)�pQ#�_�p��'�F)�2}����ú���e�{�.���5G���X��5w���.�Y`Ղ�F�c��I+�qW6ox%0�KԜB�Aө��'Fy[��EO<&������[�81Ex:�1��2��~P��[�E����
+48:��K����0�[�$������۟޿��!
d2q�Y!:8���o_��k�f:�0�:�T)��a?Cj��[oA懮�ä����0Lju�2J�2h2�z2
���������p
+endstream
+endobj
+1748 0 obj <<
+/Type /Page
+/Contents 1749 0 R
+/Resources 1747 0 R
+/MediaBox [0 0 612 792]
+/Parent 1737 0 R
+/Annots [ 1744 0 R ]
+>> endobj
+1744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.59 534.18 460.313 554.504]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+1750 0 obj <<
+/D [1748 0 R /XYZ 86.4 726.045 null]
+>> endobj
+234 0 obj <<
+/D [1748 0 R /XYZ 86.4 600.81 null]
+>> endobj
+1751 0 obj <<
+/D [1748 0 R /XYZ 86.4 509.186 null]
+>> endobj
+238 0 obj <<
+/D [1748 0 R /XYZ 86.4 302.975 null]
+>> endobj
+1752 0 obj <<
+/D [1748 0 R /XYZ 86.4 241.085 null]
+>> endobj
+1747 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F38 773 0 R /F14 1030 0 R /F11 1019 0 R /F7 1115 0 R /F1 1120 0 R /F10 1116 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1757 0 obj <<
+/Length 4592      
+/Filter /FlateDecode
+>>
+stream
+xڽ[Ks�F��W�P�B�AR[�^�N�啳��K6��$$$� �m������CJ6Y{!


z�{��~�-nl���?�Ͼ%�"�S#���faM��Hc#��z��-J���0,I��MQޞ_H���s
}8�<z���;�%������?�B��U�m[T���ׯ�^^��u��l�����*�Xn�~��-V����ej�ݸ�B�4p�^�;���Pm�ǩ֢'ۤ<�!�Ulb}~�����lY},��JtT�@�&s���a���:_�t��ۻ
+Ny�������Vy��t�M
+Os\���숏lq�ml����`�RQ{��I�><_e��t�T�O�"�rM�vOЫ�,u����<6�sT� y�����rK
+���&_������-A�� sb���/
	;k!1��a��S��$��&�ϖ���c�
��I�
Bڥ��2[��z)���k�{�e�^��׳_:[��FX�7i����^�����(��g�)�*V�v����]�d��(u��w�j���P�t�
�UW���UN2:�l˥WZ�B���{�
�i�<���c��׍�;(ȫr����I�Kj���qU�e�ѽ�=�(
+xՁ
mu,d��'��4]0<B�C3�h3c��Ll�8"�D9򽫞��A�����Y 0X�Y0�ivn�
�_�m�
�Eћ���
�5�;	���*eт,�w3f�r��u��
GeK'W���f���U��^�Q�Ő�8�n��!6ȘK۳aW�J�X�tʂ`3�����Jl�I��*NQq��,'����PS���W�	�����}��.�
�H�(�Y�ٺ���a��YG��QrJt��"U�er��8&�(��4�S��T�8�n��~ѢkHғP"��0%‒)
�F�����`vQ"q��8��S�it�a�
�U�S��mM��"O;v���tt}G�U���P��f���~����{u8���\)�Z�
�3}��m������8������
�-�,��NW<�00�
B�VyW�  ���ߣ��ї������E�̎�������6��J�����mĚ��'��԰�~�\ @��u���M��<>�.h�
�b��
�7�{���
|�?�ε���6C��E���Q�Pݖ��
+'0QV����U
Q�ӥ�l!��A
�K������1��sDw��F�DTf�|�0����WŲu�Y9�̦�xL���)��#��� ̡�xG�&�m2����V&�9�aIqFdD�������O��
��qj{�܄X��'p��z�#��$!�s
c��:�!�6r���}+�m
V�n�L���.��?�hv
}4� Gؽ�#��M�V|
,�M"�,�%n���
Tb��y"�aI7��2	��p^��01a��.f��7wĩph]�:?G�8�d�	/4����'kh�࿵�V=� ��@�0	<:�O��4�
��^+�V�3�>k\�-�
+��BH
���^~�V���}�||����=dx�FI�c�6
+hЕ;�<����:P>u�f5
+]�
�A
Ќt��䛪~�{�z]���Z�R���q�'�I�M~��a�c;[H��S5E+3,atњ ld�R+��
p4N�u:���D����b�K��e-	��]0z�A�r�m�D�Om$�����./4�e�1��u9�x4^g�Y
�n;C���s7�O���g�|G�>�tG��m]���
�kƢ�Bde3�j�;��ڮ��� �* ٔt��P��A��l�K�v��f�FtĹ3��_�mAޛ

C�~&�=T�KJ��'j������IwX1n��෌��
�	eC1W
+�i�Tx�̺T%7� EŌ��^"�t6�%t�X�i�E�h����jL{ `FZ���c�I%��Wጪ�]Y�m��`m{
_gM���A�`�!
��P�
��5f7�;HP$+�~�Yg����6 �Yr%�48ءd��o��E'h@",f�<
+1�0W
	 � A�痯�_]�("��W���B�x1}�//?�p�,�|�Ӓ̍�
3
�.J��FP���K��������`
p���
�#�m��;�n��0�k	p��5
"lly:<�O���u��M��]�g�,X�� Ԡ$�_L
��̙�2�k���]~��`�AI�
��()��X	3%q�ex޼{y����kQ1�I�
+�8M�����&�� e�U�f�.;��ɒ����&
�O3Y�3�7YcF��d�$y��2�J{�
g�,(�#F��)
��	^�
B��{�_�1YS��E,�2��&��j�f��g
x�*�.����� �߇�����Pnë
Z�m��պ����L�p��8��S�t/s*��TC�R��N3Z���0Vy
�S�e+�x��4�١j �g	Ua8�<ޑg����jL�4AcL,2�c������L�[D
o�a��nx�P�����wOS�2�B
H�a!�7^!G�a���z�O�ȅ,z[��E�ʪ�o^W����$_
q�	)gظ�]\�|�B%��	.P���A�ư��
ֶ��
v�{�2�6�}�y�!���
$Q�K�[����b��s`p���t>�-�S`IL��Y�9γ
u|��L
ʳu9͐Q�“y�
���R!Ḑ��vqW�L�)w����-3���AK��P
+ƃU���ؐ�x����ˀ2�~�B$I��Qa�Sw�!�J����7/��2l���	����
�%��Hq
+�B��'�_�}��C�٥�@�>�D�NP>��|R�a-"[y!���s]�~|��0C
���	xJ�ͣ�ڵ5�.:�
+�Jk���'sÿ�K^��:���\��1$�;��ƶ\���������)U�u
�J
+��T�/�
+�n��ylK=2�-�'J>��	h��\��q�
���qSA4�7��׾�]����5D��
��H�y�d�׃Ȗl,����q��Gx��ӻ@��僾э��Am��0�L���&�Z���&1�9�x��=ܙ�؊�k
�&W����}
}E
<��B�?Xo!~ `����
+4�	,$�*Y�i0�g��$B��0A�t�^���Ӣ��g����(URD��9\�����0�<���1kde�,
̲ۧ ]~�N=�H��
,���I�M�
�p$MmU�0���έ�F����a��o�z�L_K;	�Y��e�1��WpV|��mBq�2��}�ͧ�J
ު
uc
`���[j�U,���
�q:tpo2?dr���,
m}W�k�#�W�^N:�<k
���	
p1A���$�캱b�z�l~,��R��

[v$�/��췤�
%ˣ�Y�@�g0B��L����x�  �`Yt�{\a3�
8"�J�=~as�5^��b ����j{
+(�h" �ũ���aϔ}""����8C�wK1sv^*�p�S^
+�r�k�J���KWfT��Ɨ�7o�I�7�[.�N�\����U��r{��>XM}�x��Ւ9���'z_�yqR��k�c�)i�`�nK|�d��Op��kܠHl�
& 6��
\
v���(�� Z<&Zw"�5 e�=�OXJ�
�wS#��#P�	
���j�$S�
�������F�0�@ Zի��&�뾉
ơ���F�f6\F�`���~���<uxZ@`ßhW���QB��!
+z_�zE*�U�E���s�F<��S�
��5��}
X �l%�kW�F

+���p*����[kw�g]��>	�WfB��
z?�#�c�l���='�Hipr��l�
����=��oq�925ɖ�D�՛!�W���qrVS����3�t6<6t�P2
+�z4�w�	߿*�p���i1����`T �
k
,9NC X�`�J�=��H�����Re݂����x4s� C%\�b9
+0���j�d��k��fn-X��
+V�gEͬ�:Q
p�z���]�����wm;�o]y��4�BB���~�s\C7Z���=��l:FS��a4����P]��:
=�6�-0�,�i��O���W*:N�c�Dz�A%�XKy\�-���T��������̡
�,���<���+��nS��[1u� L�ѰL�e�n��˫(������OU�>����tޮ��I?�T�K�����4���6��t2	ĭ��uA���޹*�"Kʕѝ��U;h5|w� + �t�

L��.a@���
/Z��x9�
>������
哹��i
<�k�3+P���]��,|��G�����.�6�����t/��U>�a�Y��1}�9���
n墏c $��-w�Z�������<r`=g��%-��s����W��e]�!��G{�0>��.(�d|�˩��&[��	
v;y��]�b�8m�)�k�"==��o�UgB%%��7��P5�׉0�^�>b�0G&' \@�
���x��0y
+J�x��6���	$
�c1i��)o�
��j�w�o�U�,��#}�2�nAPk���#b
ۘ�Z>P��Ā$�4$���,�l�U�f��~gp�1��>1
�<4SA�
H����|��u(ȑ1 ���q��}��q&
H�mo�_�x��U�[H��`���NB�`a�`T���P|�ܷ5ǯH��q�xE�Um�����.��t�����
+endstream
+endobj
+1756 0 obj <<
+/Type /Page
+/Contents 1757 0 R
+/Resources 1755 0 R
+/MediaBox [0 0 612 792]
+/Parent 1737 0 R
+/Annots [ 1745 0 R 1746 0 R 1753 0 R 1754 0 R ]
+>> endobj
+1745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.965 656.898 164.939 668.853]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.041 656.898 196.764 668.853]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 114.445 173.628 125.293]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.1.3) >>
+>> endobj
+1754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.802 62.16 502.022 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1758 0 obj <<
+/D [1756 0 R /XYZ 86.4 726.045 null]
+>> endobj
+242 0 obj <<
+/D [1756 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1759 0 obj <<
+/D [1756 0 R /XYZ 86.4 642.922 null]
+>> endobj
+1755 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R /F16 717 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1764 0 obj <<
+/Length 4203      
+/Filter /FlateDecode
+>>
+stream
+xڽ[K�۸�ϯ�Q�e1x@R���k���:����&Z�fhK䄤����F�OA��I��~|�h��͂-�z����?����%.���va�D-�pI*���f��R%��JZ�����Us������r{(�mQ���J8!�����}�����8L��R'V�������z^/X"�]|���J�D��n���WlL�
QȕI`�E�x�MJD����2l���t�d���]�'����z(�mU�����g����2�o������WjB�����<?�[ze��M
w]�м4?_Ҽw�2$�xx�ku���*o�WZ�eQ��3)l���a!�
���^��E9a
_��&�2?�b%�K����Ӂ���7�]���=�Lϛ�lBWS�`O^ӳ_1\�
+�j��j�6�á�7	-Dڅ�J
\�*剄�]I��T�҇��90�u��>�_
+�w1C�1�6E��[z���-��j�Z��t�1+7yh�F���1p�&�	"�o[\J� >vb�(��1K��ƻnn�����%�wW��E3�Ѫ�	Y���Ej�eI�D$IJ��KNj����k�*a�H�-Т���D3
��s|8�*h<X�#=h�Pj�F��v�|��b��fP��k�;oB�v�7����׫�/�^��M��7*䚧���-��'�����)Q��>5�
��A�D*�E�5Q��Ȧ�滺§/�&�ތ�;�y�Q�[�
+
̝p�?��?�ǫ�x�N���M�/�U�^gM ���<�_�?�0���D��f��s��ۓ4th�r��
o�ʧao�'�����P.�����4o���`u���t\4���J�m������0���a
�����|;8�f�;�p�Tl����]#]{p�y}�W}�~���D����=�!}�vz{�=R�D����6sv$l��{,2#ǴI� Z>�QF8��ߟ�B�m��O�B	�sTl�k+.%�۔m �?f�Ű{��/U���)9&��{�R�
0�S�g ���C���o�6�FFI9�:�P� �0���$�)	g@�(e~��;~F�
l�� 
Ҩ���t�3�,X.�t:�ƃ���C���ifH��9Չ�:
�Q����N��G�5ez���������{aú��
�
��@�̀�F��
4or*��
��>vc�m���
��~�� /�%�F�����t<�����h%}� �gD�GX�h	�]��p^ֈf�L�0p���L�C\�?ז�x>�6����ro�l�f�'q��ۀ�aQw�>`��<9�V4؊Z�,��(�
9�_��屴fu> [...]
+2B�m�ۮP
���6��G`�A{���o^{����>�u����˵ր��	2
�ٜ���J��a ����"��|�B����BTM�b��(
蠅�q�?�����#��|
�ƴJ,�l���'�!78@�M�nC,�zɦ
+9�I�">��	+�F
��!��
Fl�Ě�E��Ҍ���w�3� z'B����Iݰ1�� 9�m�eN?�c=��?��&�}n"��	� �Sց��n�U��
5�Q��Q>��3�ů�w)
?
�0Z�9�`�gI+��#79U�8��Kl���L�x
+L�F$
+�1��X+
y��$��	���غ`甆�dJ�;tz'
W���=ª+�B\��
��0XCoaW,�g�z
+Nam��/�$����L��F����jXQτ��i(�!��Z	i6��^|�6����l��9a���s)�@tҙgh�(L������Q~t��HtP4#ف�}���{j�0�
+��Z�R��zL�d'�9�1�n�S�BBd����	o����i!�2	��2
��02೜��[}�-ָ�[Z�:�.�B���1,�[7�Cz��l��0v���'�R��fv�8߇����!bE����~���#
Yh���3���.[�s8�
+��`
�x����P�s9
�4c��ł�R|�b�,ݐ�J/���C�*'P�.Ŗ���z�O�l�U�p��'� C`W�ŗ�(�'8m,|T��
+7���W$
�6Q���V{�+�8�$�76��s�%�9�5e� ����
�kR���hK�\MD�M�x�?��]`A�R�^�q��Ƅ�3t�e�
��3��?�� 3��z��M�
+K�\RS��=���&N�Kxb
��>�@SbNF���\	������w��D-J/A=N�Ԕ���_������h4�E؆g`�Ӊz���O��r'�
�*�d�R��	
��&�_:�����^[�n��Xn��P�:�N
A��+h%�4�z�gwcU3�?���1 h>�s�?���Y�
+g��hp��b���!
�aE�En|�Iv,�$莆�̋����
L/R�ǓRz��8&8�7�^����,���]`N �A�x�W���&���7;S��|R�a�����:i���2�	̼��$p~�:q�>h�t���� �
��	�g����"�u��L'���	��8
r��t� ��j
+�Vm���L�����C�I
S]L�&11ScH}{�E����]��o�M�	�t�Ph�M<���t��_�X��8�V7Q�.���}(
ẛ������*���.�I]�I]߂�L^9�7���7�*��d~e��D)
I!��b=
��s�{
+��o�L:LP�C�J$x{o���f½2�.�^�Dj˪�-���~Pp
���N�9a�P���(܁FZzA`ɂ�'
�}演�*��Aa�uvh��	�f�����4W+�H���ܢ���H�xZ]�{�@�¦>��dW��p>y_� �M��R_�NOA�3��
I��
��N�2���y
Uv	 m]W17�@�y���!b�a��7fl(�$;�����RD�囗?F���vg�
4yp^q�%���]�t	�Q�������$s��OJ�� Hf� ]|h
�d/��͹�0O�q ���Y;`�Gm9�!�|TWd�
D���
��K��u�m��
����m�
�^~�
<����3��Z;k��pQ��a��>�\`m�7!}�.�eMc��6�}^��|͖�}A�'�u1�
�M^��q���K���yh	��=a[4%���������3J����0�<�J��4 at D��y
+z+�&�B at T��PF�$=��P3P��x�!xQa�?ᮔ�*"�
�{�c�1p��
>X���?=�W��H	 ɳ�kf��AŎ�+v4A���$�2�X��¹�3?��K>N���=ݱAB*
h�5�C���k�*�
�����¤�������
]��
'�x8��,T��(eB�n0f�G�K�l:�e	EB�w�
�
��U:�}W
�Ec#
@v���5�X��xl�#��m���f:�?�K��.7��3��GA�d�q`˧�2��-�/�`d��uV���T��L��ӥf�	�sXu�r��Ir�
�k{
+`
��s��.��L�†qq�x�qI	�iT��;��4�7!���_�Pk1����Tͷ�8!`�,!0z�;�DI�]��K���<y�?�
+M��<�AW;p!��
��3`r��ўD�T��2
	:�����f�
`=���w���k�s����pM�(�Z��Mb@İd�)X�Zc,����ȳ�����t��W]�\��$����1Huz�M ���(�hm	
+)~.s9��P�e���Q֭�[�����`𢫱zL
+�:j5h�P�Rx��������n�x`
�,K��|�q��PL�|ƺ�s��Z1��?�S�KW
މɧe���[ FbL��|
{N�
,d5�l���!��
�yV���
+�!)�3AE?fd7U���i
G|C5��#�7� ��
�z @y�#=��
�%�w�F����|��0
�6ևQ������ k��&����u�M�B���/6��iZ��
�%b�4�e��@x�ĺV`4��)�(�9�y��Fe �����֑�L�?w�����H�CNQ��`��.?=<���o
���_\L���Ӹ���FZ�
�I���EI�#1'τ�X�o4�ĔCY�&Sv/.�
�v�Z1L���ԟ
������Hr6�Cp[	��~�$H!C <���u)d�O�6U��S�;�)��9`)ˊ�胟Ű5X�!�q
+0�G�6m��@<�
i
+�]a{��mHF
�e� �W���(�(�����i�8�M&�-9
O N���N%��	���]
��HJ
+endstream
+endobj
+1763 0 obj <<
+/Type /Page
+/Contents 1764 0 R
+/Resources 1762 0 R
+/MediaBox [0 0 612 792]
+/Parent 1737 0 R
+/Annots [ 1760 0 R 1761 0 R ]
+>> endobj
+1760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.423 613.122 161.397 625.078]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.729 613.122 191.451 625.078]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1765 0 obj <<
+/D [1763 0 R /XYZ 86.4 726.045 null]
+>> endobj
+246 0 obj <<
+/D [1763 0 R /XYZ 86.4 659.275 null]
+>> endobj
+1766 0 obj <<
+/D [1763 0 R /XYZ 86.4 599.711 null]
+>> endobj
+1762 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F38 773 0 R /F14 1030 0 R /F11 1019 0 R /F16 717 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1775 0 obj <<
+/Length 4498      
+/Filter /FlateDecode
+>>
+stream
+xڽ[�w�6��_����ܞ=g�\z�M�nl�a�}�%��JTI*���� �
+���g_$��`.�
��fA?��pq�B/R�j��
��\�-��b��-1�t�55&�l����RX��:e��S��_^�9�&�\W����㯾�yU�ۢڞ����ɛ��?N�J��E+�b�9���t��'����.��~��)�pU.�O�yB�TK;��IC`��NaF{·K�;U�{ ߲䇗g�	a�%�
��0�-�0a{Zi���lJë_�Nʙ!�>˜���t�7���

����̭��y&װ��̘��t��J6K��6���!Ey��h
��Q)L�xzЅ&���"��bɈL���~��M��Xe�n�t)�M.ns����7���ۤm�E&յ�B7�d�� �����ᔊ�����֏	��o�~�U�],����U0�����l*�'ir&��M�Z�M���N���"��U�.�Y}盳��p%w�a�]�_A?_�6�ڷ�[{[4a�ݮ���s��������O�
+�})��M �q�
�+����a�VA�bI
���3
B���, ���U�]��M���Wߊa[�V�C�Mb�ҔP�q�u������"@�-�z�h�@Lw8���Rݽ� )-��/�6D�'i�T
d�u�iD�-�T�4�@�e��7n�A`��q"A�&{u]W��Zr�Ăj����F��U�Z���vy
a�׾Ы�b�lj��l��Kt���KY��<�%�&eV;�K�+P��^(��oF���MU�����U�߷����d�SCR�
[܁H
{'�B+�L�S�!�n�8T�|���ٹ�0����!�KpE�r9�{��/k`
L��OY3 zL��D7k�	2k��e>Ǥ��N���<d
�D�^��[�LFyI0�I�o���ň�!h
+
ϱ0Td�~a�lUW�9ʰ�e�WTl��۰�u����`T�
5Ⱥ�
6�s��v�Y���NE*+K4A
��=�
^�։%�^{�����:gZ�6���N�7Y�%�����0��m\m	�A!	Y��ہ��H��˵8��6�
�����Ħ�!Q�'��)B哜�0�q!�$�A{�DK��ţ�2�z�%��3��ɳD=d�O���k�9R�,ă�DA�?�`��2�>)XM�>n�a�ҁeu
����ʙ_XWN�W�
�k���6� � 
#u
�+�o’?�x2�FB�Ы�/"�k>�s���g�,]��?!
� ԫ��h����)���F���� *����Ҕ�'�z�]�X�M�7~�u�A�u�]�����
`�q���iaD#�tl}���/o�;�
b�Ӷ��=�o�N�h�_������ڶU�/��
���7�~G}KY4����g�w/���:��o��u=y�i�]�*����E���$�k����
������q�
�
��:(
��)�V��TWmV���^88&9
���)���5��\&�z�;e�����]���HH ~�sX}>Ti�������TP#I9�P���p�o%t�f�4��#m�u�L
�"
�8X�(�� N�)đ�	&%k��QR� ;��K�;E�+�$O�`����~W��Ǽ�.�C!ҹv7~�uެ��ʻ�@B��1�	�n���Kء�[X��Iݲ�E�3E
ΌB]A�]�%�f9�r
�Q��!�88����짋H�(���G	���I��ʭ�R,���/�g�y��p�$�����c6����YM�a�`S��M�s�֊?ǚ� -�-����
���LM4C0���3B��:�>��i0�x�d�N(�;������
��h$�
���� ����g���X�H���@e
�q�4�i1:k&�y(�$S"L�zYa����b	$ĕRLx�@�B�EA�g�KA+�#�e9}m��B���
��v��3�'�e� 
�J?n
�
a��qس
X��YN���{��bO#w�C�V`U��3ۙ'�c� N���.".�(a��D؀)�uQ�6D�y{�t��c��]VwAd7��p��v��'T���P��]��6�Ȭ��'
��@>�H��:��R!�8�h�x�G�y�����$'1E G^B^��/#�/%��Uu<=&�9߃����",��_O������z*�����k��agNʽ�:t���0���G�x1Q�
�A���A�ַ�@
p��s�ҟ��A��~�������es�����q�x槮�l���
 
8���^)  �;���*M�*��Q�F�,�}�
� ���H�H���z
83P�?M���>��hL����ރ�6���~/��ܱ{wƁ`
�����w���͹�������wm��Y$�X
�o��<�@h9j�Џ`-��w��!����!Cr�~����"�@�9�M�>�:Gş�b��)�#�T;mٓ������Ƒ4cC�r�w�pi�cr% ���cֵ�
똧R��|ʽ��QLt���Ī�	�
��PZ�(y���0��%�����c��?U�s� a�_�_���C����=
�TA0���D/.f�N3�3�Zmv�6ofN��؃��Cn��83��Ч����(vL�(����;�N�X���o��.
+��
N���.�
b�ݮ�[�]�j
+2��M�,ƀ�iB��<��_x�>����C�@1߄i�
+�|>U*��}ؘ
t/�u�%w>�ޮGH
 ┺Ȯʜ
s$KO��]'jwj!�ݛsc���u
�����߿���Z�j�,ɓm��˻�x�c�|]��MD�|c��q,�L��!�]4�
�VQ2c���J�L�����빔�w�Qꬰ߫�\��'u���S�g�u�eC*��z����j�>�<�}<�8K��)���}3�}���EM��5��o�

�X�n��G��<�	��)�ɭ�#un8�F<Ǒ:��ϓ��=�� *�O�o���l
�˄��	dz�����
�p$)�O�a�����i�t_I~<-�%p�30I�}RRřtpRnz�Ƀ�L�e!j�x^}Ʌ�3��.
}�������9Ap�_>`��h�詔!>�:Tg�G����È���lB��qi�pR�7����4l��2
*f�4��Z0x�
��Na
��a����5�&.�ZzWf�G�O+i��
e:
Y�y�ா�]�
.��D#���J�<�7d�z�G$��h�[�Yg��M Ƶ+.t&�a�
+�a��I
�����z�����+C�N���C�����Sΐ��4yyO��P:���j@�}��ڗXϡURw���b$[��+0��aU{<K�^�5v+�D׸"F|�E[|�������c/?��^�sQ��␵��
���R'!������Ur�c�Iqɭ�
	ޮ\�NW���$�@�3��M�0_MD�ͨ���:�(0��i
a�[����
+�"<�HU��[2��>*��ٱV����q�Ӥ~���~���x�.f�jM
?I�H�+/�����!�ƣO���5028hT�ev�]L��j,�$���<r§�+|�Q��zJ�����^���
-��Y&N-r:�7�>~��M�&@C 
L�5
�n�A��e���h�������'ڡm��)wW�a41�L���_�ꉳHuw\�� ����[���
����c_�T�R2V�#��L��v�:�
k�F>'�A}��e��`����H„<���7����Q��aV�\��dڷ/zUH��A]�t�r0'��;�a��@��
z���v�7���;9�Aqs�"�
X"����-�r��J��
��;��丹��x�
�
������5wxV���1��g�t�˳{,�+;8�b
�S�vV�ysp
��L.��-A�ve��
%@�z�39>����
ܕU��&�I�`�]�ҏ��x�`ᾧ��������@{R����hQ��DH\
��!�O�%֏m������C at 2������PM�
�G��z���J�=��d�š�	�z�����SD@c8�n��"�U�
r4w���%�/<�ӥ6|r���:z���d�
*������l}��̿��f
����Caa�qJ�)@���!���r}���0�`B��w5�h|��WZ��a%z��}��1,��:j�~�G��l��
ۣuU

�l���a#�솻��0p_9�������T��q�=���V(Q���N,��HͬKz��>��|v���V�
��d�|�!Ӆ�î@��0
o��w�ؘ��2N��>���
�����o�B
�d����L��z����ꦟ+k�$�T��v|�c�q�0"
+`;�j��%S]ސ��<��٦��)s
+q��A���:9��!��06�Ae8߰�����0]$yǘ!B���t,�c�Ah��������J�ҁ�gg���[�z�o�p�{�c��O

G�\0���?Ӭ�+!�s����?�W])ż6�~��-��3 
�� w	�꿂���
+endstream
+endobj
+1774 0 obj <<
+/Type /Page
+/Contents 1775 0 R
+/Resources 1773 0 R
+/MediaBox [0 0 612 792]
+/Parent 1737 0 R
+/Annots [ 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R ]
+>> endobj
+1767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.682 599.957 241.153 610.805]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.1.4) >>
+>> endobj
+1768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.208 547.537 477.428 558.385]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.965 442.485 164.939 454.44]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.041 442.485 196.764 454.44]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [503.308 50.205 518.031 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.2) >>
+>> endobj
+1776 0 obj <<
+/D [1774 0 R /XYZ 86.4 726.045 null]
+>> endobj
+250 0 obj <<
+/D [1774 0 R /XYZ 86.4 489.205 null]
+>> endobj
+1777 0 obj <<
+/D [1774 0 R /XYZ 86.4 428.218 null]
+>> endobj
+1773 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F11 1019 0 R /F10 1116 0 R /F8 729 0 R /F14 1030 0 R /F38 773 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1783 0 obj <<
+/Length 3599      
+/Filter /FlateDecode
+>>
+stream
+xڽZ�s�6�_�sv֬�M]�3�ko���m{ݴ/m[N4g[^IN��� �O�ޤI�$�"A� &��Y2���W���f���3�ZϜajfEʌ䳫�엹b�r!���T�բ>���"_a����eS���r!R!����߮�^������)�oIj攙-�����V���,a2u�{�o;S2e�6����H�,��\Y�f&�[CL~��\(���m�/j~ f�V#3��Q��:e\+ ��}���M�~�Uu�6[��рa����.����yWů	�y��9�|8�M��.��7�;���/�Y����Yg
\�6^8KuXX��h���T2�� l7ϗ8�ZR��}́��
+ԫ�w�8���~
-�!�
�+zn�Kغ�@)���3�Ԓ-�y]SۇCF
X\��
X,��@T�M+ Ɲ�g��a�KZ6Eݰ�E����m^�~�n�9��G7zy���ກ?|�_��
����UUV�z����W�ԡg�,��/A����u���RI�\�,R�Q����l荄臔��V�!ÇB���(#C-R���¹b�ӭ
+.�tp��tf�f:Iϝ2ɸt�)�k4�t)K���Z�ͷ���A�-SQƹ`�vG���s��ڗ`\)�x�F���&;�\(&;��ݪ��]��t"��`j�>G�jY�EoV�U�M޼:�\��R�Ԟ�QJ��*��UqM|EmE0J\
�K�v����J�n�d�fb8SµC�a<
$S
�p
��xi���	x���nU����e����-}��hY�bx�-p{=��Oᄏ:�nR�B��N��
�
+oȑ��9���w_����&�*���r��;���6DMF����dUd�:rR���V$8�B
W�<���
/Hfz�d����/\�0 j�tޟ9��
�%x���}�ඊݺ�ȑQï�N��,�.%ՠ��_��д:,�ƏD��v��璋y���Kh �
/��
6ޛ��wF��C{�l�]�U�^��;����|�z��L�^�o�U�n���:��Ё��쯗7*p�� {f^V1�Ц�\��b�!ƚ��YQ��� ���{C	3�
����貅�S��l�i�ǿ��d	@�1�i��	�4�`c2w+�aÏ�
 Dp�2{jj�P_#~MI�pr������!6���U�ѣG��s�l�Ȁ�b.#�L87�~���]ۼ�9��Q�X�R��F���|]n�X�����ھ���Có�a���A~t�CM:���24�An��-����te�w�epfL�ۣ��=LR�8�-}e��e�_^
��'���/�
C<RFK�V�:;l���@u��	��
(�HDc0�N �yہyj���)�
+"�$2v"<Ҁ������CQ at W�9x
��р�
+t�K�g�J�I�����S��8�t&�� ��)�8)z�*�5%���5y��o��L�``�!n�D3��^��	
+�|���v
Hd*M���? X�x}?����݅ '†J���/��J
�my���w��X@�b��<۠tC�v�c	�3B,>�<�c�4� )��1�ggX�˰a$sp�O��~�������XQ�W�J:�,�U�؟	3�9m=%��3b�+I�
L��.
+�Ǔ��l�x�>���Q�!U�
��D+��撢��0����
+�\�Z��m�-}�ug�[k]{q�B`�+?�"���}�>�
p���BD�y��d�
�`�����u��ԣ�a��>��0	�=q�
+�w$�̻�s���� ��z�g�ݳ/�z4�Qv� �QLwu���u ��������p� Z��-v9�
���� t�_���Uv�/-���7�,(�_Vyh@��q�D�����i�0;���<�
r��1�p@�[�r�i@��n5 ����UEv�ɟ����n!�|Ŀ
����j�׳�
4���
Hƭ#I2�tC��)��|:`l��
fh��y�	�Bh"Ǣ���6;%�d"��N!)��8{yb�H)�=s�6.��᧷�ε9k�
9���y�ζ�-��׉����'���f^BH
+�V:.�����y�U��N��2�~a���BH�@�#��S����`_G��e���Nj��L��rn�O;���$��h�]�mɃ���/�j�0=���%����
2��Z��}C��Hi@ZX.c�Pa��A�b���y	�
Ia�!6<N�*؜�^�|��l���z��]�-ܡn����S��RY����}�̧hC֔�1��1o�njO'PT'	e��]/rz��������)6س�kloQ
��4�0e���
�Tu]�>�
�myج�8���k���,��B�l$��a�9  ��.�"%�+�ˊ^�VX��Or>�+��p�yM�
㋑���A�]�/C��灃vï�򠽢/�뭄��&���o
�����6��e�_���w�Y�

+
�W�ٽ�:��:G|
a����$J��Ęd�D�@��kʵ�K{�D΁�q�S�`3��� ]�\(���B9���֠�P�F�3+9	�}��2�������|Pņw�b�_,.1��g%��H�
q�<	_
Cm����
+����`��m{8z�"�f�'ǒc[˖�T�j��z\�ƞT��z|�e��]�Z�z=�������
�T�>��C���irBb�k�
s\�� �����
�%<)����u�{��k}
�����`]`�|���ln&l�U�}��k�,�f壊�	S�F��H�/V[r7+�<Z�Na�ݟR���
{
VhR�"6��a��ad�
�G~�/d�,F�L*�ruf2^�� ^�		�Z?/fYC
�������3j�
+�"0�kR�3!�k:_Ŗ�ؘ�V��V��P��q ,
5�����uW.�����6���v~|�:�<�t�$�����U*�;j$�L+z$�5�>bC�
%�E�b���vo঑���
��p�I���b%@�f��.���#v��	�)yz;+{3;,�{  `b�H�dl
+N��
+�VwN��2
\|���X�3zl�uCoe�Qy�M8>�:Ҏ��+B
+��ߞ`Z��R�纅鞷�
+̣�gM�uV7�����H��
+����P�J�˻��!M���Ȗ���~�'���OQ��"����}�'�%�Ro��>\�D��C��T
/l$�I��8S��K#�R&��_'Wg�H2�
��
+��"�E2�"9_�xk���b/���޴ \h������z� bLy����԰�U��%�X��E�ɺ�k���M�y1������(Ꜧ%pJ�HhI(��t�[
�-�}��]�fGl4;��d��}�(�B��
�n

�R�#��
+��tE�:��ho��?qۀ��հ}������<�����o��0a�9iL�gޞ��T
�Fw~�T
�� _&I�ܫɴ
�PE=�)��g��dj!��?���5S/„kd�0q��
^��zf!���Y�7��P2Z
sV��#���0��SL|l/f$L��U�&�n�r��@�DRa��n��~�΂�@��4޳|ֵ
^�b(=��B���s��
ù?yc�}O���z�
+endstream
+endobj
+1782 0 obj <<
+/Type /Page
+/Contents 1783 0 R
+/Resources 1781 0 R
+/MediaBox [0 0 612 792]
+/Parent 1787 0 R
+/Annots [ 1772 0 R 1778 0 R 1779 0 R 1780 0 R ]
+>> endobj
+1772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [321.137 640.421 351.358 651.27]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.059 565.341 113.033 577.296]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.272 565.341 143.995 577.296]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.802 240.181 502.022 251.029]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1784 0 obj <<
+/D [1782 0 R /XYZ 86.4 726.045 null]
+>> endobj
+254 0 obj <<
+/D [1782 0 R /XYZ 86.4 611.201 null]
+>> endobj
+1785 0 obj <<
+/D [1782 0 R /XYZ 86.4 528.492 null]
+>> endobj
+258 0 obj <<
+/D [1782 0 R /XYZ 86.4 210.96 null]
+>> endobj
+1786 0 obj <<
+/D [1782 0 R /XYZ 86.4 116.123 null]
+>> endobj
+1781 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F38 773 0 R /F16 717 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1791 0 obj <<
+/Length 3406      
+/Filter /FlateDecode
+>>
+stream
+x��˖۶u?_�]59#�x`�.��αO����]�Yp$j�	E*$����{/.��(ed�dӮ�y�/ Z�/���W��z�JƋ�%���ۅ��Z��X���f�����+G�,�k���z%�Z~y͗�%_���K.�UM����ҤwUqh�������۫��8�-x8E3���zw���b#o��]<�y���	�*��uy��!�v
+|�p�ML��=�{ �.�&s`����)��}��V���PR��_:��S.���p
˳��ۇ�f��l]��
�f?��i�

����D�0n5
L@�2Y�J3�p�b��y�يGL�8̨��P�
��界"%|����HҤ/���.+Ͷ-����3):l�ђ10���ɧ4\�ڟK#��^��!��j;Y��`Q�,B��eVn(� ^�u����5BaE�X�����c���7�u
�!�u[��F'J���P��*6����Xfa���D:��D2kT'r��ĆX6� �Dl���
L],G�P4������m����*�,Py�4O�"/��
�K��׏�y���`ʪC

ؖ��"9�ݧ�]��P5�H�Jk�������,$,�"LI���������
�M��ӿK�:����9��iw��4'�V��v���Y�ԗX��~��0L���Ds��Z#�����H0��y�1�Ԃ���l�����6Y�HHk�$e��VEV��:�����;bu
'�Нo��6���yU��e�C��lX��v��"��0�ABY l ��`�4A��X�] [...]
+��ጼ�
�i����!�@>9���%�@�n��f�E�#�;	[��h�8ǀ�ҋ����w(=	@�2v�O
�u13`�,��~
W+% �4
mb��\hmS��bkK���ҰU�=\� a/o+�����e�$�Ա��
�H
ƧBS���YQ�rHg�v>s��:k�=:��Ν
+�#�ܩST��K
+b��"�ؑ�� I��l5���XI��#
+�)]�ע��+���5dnh.��Uwm�T��
N3�x�|s,�"�Q)���`�9��K;��Q"�2���'���{E!��g� ��� 5KA���
2B0���/�W���}Y��� �kgl0��/@1n�lF��
��/�G"u�{O�o��R1%:�$ȌO��g�R����..�jU;ߊ_櫓��Dz�m��X��[����8ܬ�gY�1ʓ�`�T�/$�kʸ�i�t f�0D Ә9��8uz��FF��
�:eVZhp���g^+�I���k��#���D�$Ḑ>�xL����\5��>V]
��܂QwB�	����p����Mz6^X���<
+�(m�rJ�
I�X�>n
�q�r$<o`�Iw���@p޶qk�V
�DR�e ���ȷVz�H�(f:5ݧ5`�a�6]t�u�,ˀ�#
�d�S�c���r&�]�~��j.+Yܗ���&����� ���e�p!�
dI ��u�vٮ���l�&�͢,W��%����"|�;�|�g�s>DE@�s
Q)�$�Q����O�e ���V2��c;��7�z|�׈�����$XhAD�r�{�P�S����,��:�
9�ǵ/8
+�e�.���IuVG������xƸ��4p��X�wTH���m�p�"���vv��d�#�w1�(p�M�< 
�c��w��� ՗IG$��3K�sv�����
�|�l�e1��~_�����קRnq�$���e�8�m
�7�H�Zx>H�a
q�8$�i��4���`�]��u~9� 2&v(c���1��	Ѐ�p���EA�>�K
#�<۠WC�!�p�
���� �ǞmJ���r~
"�]s
♐��'7O�g*E�ŹDzC(�����h	zF
+	�L[
+g�dJ�`�.�s��oRJ�*�
�o�uu�����s���#o
^cbn���'����#���:����Y��*��2(L
+��� ��S��r�^7�}�-pF�
+�+`
n��u����HKzI��l���÷����@�~\��)}����y��ǣ�ECz/8S���U݄�l���q X��8
wY`�j���A���=�_�3����Aj. R=0L�n�EO�mUP����[8	Bj����GK�<�h
k�4 �綀�
+2��.�&��!�`Z�sĘ��0�/�`JI�\@��R��8~E�ɻ���ݫ=�M�� /[j���2hp�����B����w&
�(F�I�)��?%
��q���!C��N���������u��`l�n(��
k�'�NUYZ�������}4�ُ�C���o�Ә������7~�Y�"�KxM+ %�$j(�-�m���*
$h�4��bẀ�H|RԊ,��v�B�?�d���� M>
q��O&�W���Tº�Կ
�`+.�Y��\�?����{̢w?�1�QCgf��n�;-7/(rT����=��\D�����!V�~�P����Hz�L��n��
9 �\�l`�����.�Ԧs����\��w������%��k�̥-ƌf�]�o��P�6G�h��
�'�ux
�{
;�[��\O����K�e���i����̰u��̹�!L$a3w!
U��?�=��?�������B'��&0��$����S��}jA�Eey���\wey���<��ey���<����6�0�f
���[SQ�]��
U�I}6��^Y��5��7J��_?x�'5�B�����HJ��
��q lvШ3wO�M����3�yD���$ q2[*����}�K
i�t�|&�sZZf�����ꋿ�{yL
tdݚ
��
�M�8�<�
C}=�
��42
i��!M�f�����JP-u.�
^�ථv4Ҭ봥��
�"��*�����!%�^y��{��z��#
[�Hi�g�kᄿ
��ܕA�I�����(����y�	�
����Tan��B��OZ��5Er�9U?{�[,�j��c�
C���k�e
b>#�
+A� ��-0Y/`
+_~�v�J��J|�5ׇ9�Ʋ����x�
�[�)�'Ŗ���l�'c6��6\�ޙ���h9Sm�r~�jô�ϼݰ�H5~��ŋ
=���'3W
8謲�����A��B�X��
ݻ¼&k���T�2u�r��B�ר�\�����I��&�J��f
+��JЛL%}U{H=)��c�orNpQb�'F�&zl�������SV��	����Іt��T@�����I�3 ��� �:�y�^�l�-6��<�=
+endstream
+endobj
+1790 0 obj <<
+/Type /Page
+/Contents 1791 0 R
+/Resources 1789 0 R
+/MediaBox [0 0 612 792]
+/Parent 1787 0 R
+/Annots [ 1788 0 R ]
+>> endobj
+1788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [490.102 552.462 520.322 564.417]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1792 0 obj <<
+/D [1790 0 R /XYZ 86.4 726.045 null]
+>> endobj
+262 0 obj <<
+/D [1790 0 R /XYZ 86.4 410.187 null]
+>> endobj
+1793 0 obj <<
+/D [1790 0 R /XYZ 86.4 352.264 null]
+>> endobj
+1789 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F48 966 0 R /F14 1030 0 R /F7 1115 0 R /F1 1120 0 R /F10 1116 0 R /F38 773 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1798 0 obj <<
+/Length 3394      
+/Filter /FlateDecode
+>>
+stream
+x��ZK���ϯ�-Rj�%�U){׵[�8�������(��Dj������� �d�ݪ
f �����
����_|�����ou�H�4
+���n�D�Y�A�EZ-n��_�ƋWk���r��e���-Vk��J�v�<wu.��.���i��
�mQ��j
��O�q�����՛���+r��rۇ^b���t�˯�b���
��i�x�y��ѩ�u\|���ʷ��c�L2bK��ò�(U��#�l��N��>|�v�Q�{a�~�\�n���=?�,�Mv�j���[�Ɵ��Ib�ݿ|ʤ�ҩ���M��g�$Y�Y]�{٦(/�����v���.>�l��������+텪g꛹5���܌wv�͈=
��?�
+��D�0Z��!(�Tj�L��8&��֘�*�X+�i��g���SER$6�(�=�tI{J'�.��N
x�Fq�%`�w�f�K�
N�`�;I���.��e�#ƣ�<�V�d~x
��j�6~`� �Mv����Y4�R��$^hz
+�d��3~�5�d��~ἐ.d��k�9��Q/�s�4��2Vѷ�u��\c�4�+[���]Wnȫ̈ �`��F��\m�y���n��D{Q~�&���Lh��؞�j�{�O�/N��?�=e�fC�D�HKB_�
ç�TՏҗ
�;�Mֲ�1��j�_�!V-��cn�`?�9�
+�<Z�5#� �9
l�zF���x�����]�!/�D��9ߴU��a崄=
�
�r�6Yi�4!
+�wk�e��DIѺ%1?�i��)
���\
���:؝ߖ31!�L����ś�$���}
���60��aœ~���m���0�� c�=�
,r��.�~��:���
�\�ǣYx�Eݽ����UIJ�v�c���J-Ik!���� C&O@�
�I����9S�.�W�-�����LA�2R�.��ᐃ �a4m(O
	�^�n�a��f�
��:�1x/�0��,�<�f
@|�
���ˁ^|��n�8/L�
+Ys�e���6@������<�>�z�f}˛=ɼ&c���]�b�)$�'�{����;_
*f3%m~����x�	����[�++�C�K�Y��q �++|(<��Y��~�����B���бU;
w�����C�
+
�|`� ��N����
[���Jz��u��
^���D�B鲲�v(�:]�p����@��A聘:H��9u����闙E�9v��N�r1�Iߦ�Ȉ�
`ʚ��� Z̟���٦�-���\�YID���p�	�t�:V˿��]Fn��݉]
#bX�;�v	5��U�
�}-!�Jj �4J_��Sa������hO���[xa8a
L��M��2�%Y]�2�'�Cgrps,q>m̱ؒ
���Ǥ7V1�m�%5��^
�4�k���n�il��O2
+n?
���
��%�aD��'jz���hҲ�
�g"�;�v}�$�$��W�d�3�D)5�}w��Q4����`�GޒLC'
�#`�J���9�JkϤ��cw����#��T

��xeͭ���Ғ��"���	x�Ul���J,��mg��9|4r���3d�,I�h�߽��εsS�lO���
+���#5�0����jө��Z� Md��TRa<����r�K��ɹ�L���V&���CǓ�C_S
���l��c��#�K8yAh32���L�<>R+XA=�6/���\���D*�m��C�l����AU���>gA�
�]����-�pP�6@͞�;��6� ��S3oC��������`t��M#�m��Z��a��몶�*s����-�(TxNl-D��u����2��EO�Xtό��3y��2�����W��d���o�z�CױhZ���h�پ��#����tu=p��F�����|Vm`5=,B���"K#��vC�`ٛ^��zx�f�]���D���_ږ 0,������b��m�2)�w��8�U��g��4��gs�4E
�ȋc��H��/�Cm?�tl�!?=�P
�:1�c at a�@�\]QI :�`��/+A%!0C�K�ru%
�d�%��u���
<W8J|d�Ӫ��y��8k�^�s#�l�fS6g�$�
�R>80�'��I~��
+��ʇ���x��x��/)q�
ϙ��y����E��r[��q�M3n9A��E�ٛ���9����!��x���j)T�@���Ga�%��!sCK�)������ۧ�f�
QH�96�㧘���t8�R*�c3S�����k�d4��	G��9o��
�D�Rz��_���TG3Q f
C4>��\���5�
+B��P�4���N��N-��h���>C�z|��
`�8��[��h�73
�^l8J%9h�g�.kA_��<"H���=1Ult��K��+��Pm��U(9bh9�w��g�q�H�kc�*Ȓ��WJ�(K�.�%̎�8ׯ]z�/ڌ�:-VY��<��DTU�s��H#
MN��6?>�����>����
�N����̰p	�V�yV�e�c�*��l��
tH�Us`E��r+
�U_3�儞�Lj:��Q�d�t���%f��",�?�8TA�>�s�ރ>��O�
�q=VQ9�]R����O(�T�}8�)>��o�i��B�9%U��j��I�i
�;�d���PY�h��#k�tJ���$�����Z�.�]V�H�w��e����{�C�A^��Q^(�����M�Q�|o�ٶ3%^:�b�<x*W/���5{W��'=);;�_D^�	s�N�� od��F���b4��'��IF���� ����*!����[N}Q
�U���nBS#�/����E�`{w [...]
V]����^�< ^�� �׾(C9�2���LP�/��
p&�7I���p���G���Z�'�E�Giº= �m����9��⾨��$����;Y���3
J���'^d7��u HXd\^s��2{�;���
;	��5.	'�)�|b�RhHu4^k\�Ւ��x,�f�Ǔ{ŋ+\/
��"��qU�S���K��T볕�y
T���Q�V�ظ���3��Ґ(5� x}7��|o�H�5d雈�k7d�q�b��6,��:X�W�Gw����}{��e�
\+Zc�5����Y��
Ȝ�L?s
�
G0����(`�Q������1�^��u��
+x�
�$ �	�sM
Q5ԛ�=�
w�T �?�*�CI��*2|���a;���(���>�N!G�.��Ɋ@���_���߿!��a/�%z�^����+��g���G�~��^����7��K���&Ug�Ne��ܵ���on����c
+endstream
+endobj
+1797 0 obj <<
+/Type /Page
+/Contents 1798 0 R
+/Resources 1796 0 R
+/MediaBox [0 0 612 792]
+/Parent 1787 0 R
+/Annots [ 1794 0 R 1795 0 R ]
+>> endobj
+1794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.208 368.482 477.428 379.33]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.8.1) >>
+>> endobj
+1795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [331.121 239.455 345.844 250.303]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1799 0 obj <<
+/D [1797 0 R /XYZ 86.4 726.045 null]
+>> endobj
+266 0 obj <<
+/D [1797 0 R /XYZ 86.4 340.713 null]
+>> endobj
+1800 0 obj <<
+/D [1797 0 R /XYZ 86.4 234.058 null]
+>> endobj
+1801 0 obj <<
+/D [1797 0 R /XYZ 86.4 212.43 null]
+>> endobj
+1802 0 obj <<
+/D [1797 0 R /XYZ 86.4 132.743 null]
+>> endobj
+1803 0 obj <<
+/D [1797 0 R /XYZ 86.4 113.33 null]
+>> endobj
+1804 0 obj <<
+/D [1797 0 R /XYZ 86.4 89.765 null]
+>> endobj
+1805 0 obj <<
+/D [1797 0 R /XYZ 86.4 68.138 null]
+>> endobj
+1796 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F14 1030 0 R /F38 773 0 R /F16 717 0 R /F49 967 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1816 0 obj <<
+/Length 2485      
+/Filter /FlateDecode
+>>
+stream
+xڽZKs�6��W�Hm���I�0�yԤ*����e�-Qk)�!�q��~�����c�
�|��h|������>��Nj�\��A� !��*��Z�<!J��f
|	c�XrE�8������Rh^.Xx�,������J����7�n����b��U���旋�7]0����%"Z�`����'
��嗀���Ѵ�R$��]\_\]Pg5
[�G�'��W+g>1��}It���`�������81�3#�]
�m����.���,u�n��+~���+��"�MpW����l��,�S�W3�:k�U�������+-�׼|طͳM�v��7�<�5���� ��D�(-�>OWԶ��MHĺ&�Ǝ��y���%
�n%ô�g�]��O�u���lܰ�ӻ"k�t��cIX"��$��f�u��ҢxZ� o`,!�v��o!a�H
��&Ͷ�k���/][��"�o�v�V�J}w�I1a������M�]��>�S��&/M<d�����
���&���*��E�e���:���p��!c�u���#���Hn�����k���{vC�
^��S��oq��%�����vl��ٗ��Kߠ�V
VikB=X&��@mK�HE�\pN��6�`�v�g��'�\g�0��)\�a���b)%pm�Yw19v�����}�`�s�yΒHޣ@ ��/�,3`�:kӼh���
+�]L�
�q> {V��%�̱NBg~@շ J�`b�}]_΍��$�>JE�s��̀�zIC��$,����{�
P�1�>�Y�ۇ}c�3�+2�A%c�(���-�i3�I9 
c
�V�Y]��RW
`�mZ��M2m� [�
+M/���<�4mׯ��\����&v/?x�72{7��y��b�R���A?�d
+~����
��k{2��z���;���7�6ߝ'?��
�p}�w[��v
�],�o
�gF"�CͽH�h#�pD`	Íb�+
Vw�[��7��@Wԩ�h3i0^��0�F|��xM�>�}]g�n4��j.��U ���Gk<F�� ‰DJ�!��+��w
����q�ث}{��30zX{�@
�$�&}'`��� ��mC	�]]�Nr �b+5x

 �Ǧ�'c�m�눡�tЄ�\l�o����h�&���7��^�n�3��.�"�;���gV�.z��tI��>a1_�6
�V�������9Rz���,�۱�Z�~X$
+ �3~�k��ܰuy"ӯgj^�������]
h���I9od�T���p��>jW)J���
0�h���.����>\����ԉ]���FԈ����P�	؁ZǾ�5�����2�u�ֶ>�ć&km��zHj(�	Dl����-��G3AV�\Ln�ی�g%z�D/zj�-$�"�KV�Q5ׄI6Nh`5<
+�ơg�ѥ�]��lD�ͺ����z���D��la`��Ч��'�� ����0�L���ʭ2i��Cn�Xu���@���Ů�*������}*kS
�+�1�����>�rl\Ud����}�9�1Ĥ����;v����qMCl:t�)��
��[`��k���<6?
)Tr�
��(T� +��Jo�(I�p"�>5�Ԃ
��6=h��:���;0 ķ�)J����O֏���������4H
+�}�t����!����b	�u���x
@�\}����Z!��[��{)�q��Fp
I��WHc
�\���+�
�ө���:���$�们Y��C_8�"c��p�p���L��$9�G`��ϫ
j{J�k���D5PC^=	��!���OC��e��b�? ��1҈88��X��P<�,,Ĩ �⸧1W񛫐�b�!�s���~�s�ڱ
�,��t3�h��{	�X
%��1�{�� �Pq��3@��k��-vg���ɷU�! U"
�K�8
��y
��j=W��Z^98O�:p�������
+�wF��FGQ�.��o}"�H�욒��Q���%H�8(o�N�Q�6y�]�b�6�#�
+�$c�����fET28�pX
���)����l��ځ^�6p:
E�A�l\
@
#�b*��G$:���j��da0��b����&
���0��T�
�p�):�|5kՄ��D<)��A�"�$P�U1xhg�X!m&��2S��
�fm�p����菐u�嶽G�[�AG")����s�q��	#q�f\�mj�u�1
��馯2m��8[[�(�9��Û�r��\���4G@�O�1Ӝ$z����׊��m�&zh�4y��i�#qwT܎~T=��;��
lw�ڇ�bj��
�RJ چ�kg����<��H�h%�s��a���Q:$
��
S{�_hOh
�
 )=����'��Ds  4��X��3J�E���p;
�.��_��r؁q>$GYM^��x�,J
�ϗ�3j&���K4�X 1�#�
+��������'�LFd����f~3�i 2 ~���b�u�T1Ҏ���U�4�ddV
���_$��
+endstream
+endobj
+1815 0 obj <<
+/Type /Page
+/Contents 1816 0 R
+/Resources 1814 0 R
+/MediaBox [0 0 612 792]
+/Parent 1787 0 R
+/Annots [ 1806 0 R 1807 0 R 1808 0 R 1809 0 R 1810 0 R 1811 0 R 1812 0 R 1813 0 R ]
+>> endobj
+1806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.24 579.363 373.712 590.211]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.1) >>
+>> endobj
+1807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.701 517.499 147.172 528.347]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.4) >>
+>> endobj
+1808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.125 458.528 526.596 469.376]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.3) >>
+>> endobj
+1809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.701 375.647 147.172 386.495]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.5) >>
+>> endobj
+1810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.907 289.934 440.862 301.889]
+/Subtype /Link
+/A << /S /GoTo /D (Item.29) >>
+>> endobj
+1811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.194 278.532 200.168 289.38]
+/Subtype /Link
+/A << /S /GoTo /D (Item.22) >>
+>> endobj
+1812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.868 278.532 232.823 289.38]
+/Subtype /Link
+/A << /S /GoTo /D (Item.30) >>
+>> endobj
+1813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.713 95.718 352.185 107.673]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.6) >>
+>> endobj
+1817 0 obj <<
+/D [1815 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1818 0 obj <<
+/D [1815 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1819 0 obj <<
+/D [1815 0 R /XYZ 86.4 687.095 null]
+>> endobj
+1820 0 obj <<
+/D [1815 0 R /XYZ 86.4 664.141 null]
+>> endobj
+1821 0 obj <<
+/D [1815 0 R /XYZ 86.4 626.187 null]
+>> endobj
+1822 0 obj <<
+/D [1815 0 R /XYZ 86.4 576.278 null]
+>> endobj
+1823 0 obj <<
+/D [1815 0 R /XYZ 86.4 514.415 null]
+>> endobj
+1824 0 obj <<
+/D [1815 0 R /XYZ 86.4 495.335 null]
+>> endobj
+1825 0 obj <<
+/D [1815 0 R /XYZ 86.4 445.426 null]
+>> endobj
+1826 0 obj <<
+/D [1815 0 R /XYZ 86.4 422.472 null]
+>> endobj
+1827 0 obj <<
+/D [1815 0 R /XYZ 86.4 372.563 null]
+>> endobj
+1828 0 obj <<
+/D [1815 0 R /XYZ 86.4 351.546 null]
+>> endobj
+1829 0 obj <<
+/D [1815 0 R /XYZ 86.4 330.529 null]
+>> endobj
+270 0 obj <<
+/D [1815 0 R /XYZ 86.4 265.382 null]
+>> endobj
+1830 0 obj <<
+/D [1815 0 R /XYZ 86.4 206.807 null]
+>> endobj
+1814 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F38 773 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1834 0 obj <<
+/Length 3083      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�8��W�(m"o���CƱw25�c'��
��Y�Ȅ��x~�v ER%ǚ�ݪ��$��~|�u�tt;����t}��\�QD"����fd5�#�#�]�Gǒ��TX1~�M���"^��)��!�������_}]��"�1��YWi���)��FcM���������	�����+b�
͖'���9��ˈ��77n9�""
������C�ے��-&
�iG:b��wv�a{LYb�t�QCk�	[��G�f$R�-����
��n�Q�ZF@�m����I�����;��M7��.��/�Y�/8%�D՘����q>OJ?�9� M�j�2Y��8��on�q�o�|�/�,]��"�3��9�4�v
^���/E���Y�X�����no?MZY�?� k<-�x�l/T�D=�tԚv*� Z�єIB�9��!�٣�L�Xt��
Ah�?M���
�?��y��#�	�֔c0]�o��~\����n�t��ۦ ���E���&L�5]�+�}���B;~�pd�8����(���e?[E2��?
+���\��/�� �l<^��S&�
�܈�E,���o�����]�5�.�拤@��wE����By�7�l��$~
8� ��2E�C��4H�%�IK�׺�	��z���	4d`�
�����D�q\��E`��G�"yT��EBG�D�
��Jd$����
+�A��1���e�=]�e��.�՝7o�s����!��� ��=(���i��A�Fa%�U�r�U/,�ժ�y�x������7\s^|.�ij�cZ���l�J���Fʛ
���|�	B��f�#��#H��R��N�\wU��'�⭻X'/{ԧ�X��E�߶�*�FT���gF�9d�z}ϼ:~�����w߲�3�=�d at -��d��}�F����2
��� �Av����q��_�iv۳}�	mغ���=�l֗�#N�0
=�2Iz*�l{�d��xV����K€�5��)���D:z�4�z�
�E��*��� �F�ȦJS5�T����f�@�
�z��	@B􃄬@�>
+$���Q@"�_	�x�0� 9-bu,�H"l�vn�q��DZ�
ǜ0�ql7U�TPVS�>�G��-��.��
-�J5):S&7�5_hHw����������x���t6
C��
ʧ
x�c�W�x�䡉���� 7�W��L�l
+5�(�aI6j��i�,�֚���@<3�~�I]µ�r�q���$
���P���޺O@}/:�j��[�J~��y		�����
+)\M���K�ʗ���GU��
%ZD�e�r�v9��C&S�hp=�P�t;K���@�֚���p&�ِs��TÊ����qY��>�(_�]�	�!�f0�Wn�q7E�
o�~�[D�L]ًZ��_�P�Yu�}QQ���J)+5vZu&O��3���`YÄpW��U�����wD�X����Re;C�+�ʾ��kK�I�o`��!��ހ���f�X��N�t{ ����
+�����m�z���ᔜ-���C
tBY]Yv��W��ܿ�
+Nf��h[
ȱ��I�@D�Ч���d� �>�kz��� �
�S,ҕ�U^'�H�T��\aL�Ez02X��������![a\ܧsD 
+[Di�E�*����/
g)%9��8.�
+�&uMC~� ��C!�5#���,�V���ri4���KC���[@N�^�Wu����"f$Q�,���|�)�>�BCt�T��ڋ��}��6|{�Fn\o�>O��+����⨶o�:��5��3C�[=jH�v����7��٤�T�(Q���0�p�.�5��y�S��1ʻ�A
+<�ZŞtZ���vS	b�C2[��ᦪ�W�zօ���:Q�:���~Y�
)������eg�Dj�߬(���
�(���7뮢j��
�t;��W�6=D���I�lJ]�#Yz����}�A��=�f=��Mވm��[Z�G��<�X`���
�x`a܊6�

�p�c
�A���^�?==���4� 5ϴ"� ���5`��ɡk�T��r=�j��2n|L���3%��ܖG�%����#�#�
'J-��?���O$�������
+����{@�qD@c�"/߿z=�=�9��o��y$ơ���7h?�p8�M‡�
��֑�7�e�y��^��*�q���k���6���C�|R�,~;��ED �ne��T
1w�ɣ�t
p�
+�o�c
+�
b��TSw��>L���J0)�
�
��*f�]��ajO
�%
���
���;�p�
�=BΡ
�?ѩU{^$}$+�����?�O!�����cB��Gj�ֆ�
+n��G�$Hb�iL��ܵ
�do��4	ڶ�*{BCU6�h�Jz[�H�+�
+c��n31v�,�����k�6��jcq$�ƨa�<n
m���%G_�X���r�b��������v}yMr���rW����j��u�_�uw��թ��y���OX�G��$K�xћ���d��
�v�zp�������� �`
�Fl�?�$�u�������y��޹�;������*_Bx����� ��ȶ�D��W���)ݾ��
�IM�A�8t�R��5�h ��[��(�X��N����
+��Qxnu�O\l�}�ǚ�;ySQ�����"�B䇸�ӝk|lS9]���J��fE�"l��2N�Dn���ŗ̀��cD@`*զ�;�3�A�%���j���-�kF(��:�
%
ըs�se�Qս��!j0;�!M��*���W$QDu��
�5����t4�
+f|�Tk[ݥau3��{.j ��.�$��=
,�&��8, |�G�&T���S
Z/J7>����x�'��	�rw��v���~R=DA"\�L<
+U�廟���_��0?	
;�\�]��)w�g�J۪�\�v��Ez{�Bwz�:������bl���i����ix���Hfy�P���
&
+�,�
�ž�
6֔���
+6�o]�9�M��u����u�A9��B��TR��8�L
C.�DZ�=��b���k� `�1�L�v&��ռKk��/�W
��Ӥ�\m:<���t�s���
+endstream
+endobj
+1833 0 obj <<
+/Type /Page
+/Contents 1834 0 R
+/Resources 1832 0 R
+/MediaBox [0 0 612 792]
+/Parent 1787 0 R
+/Annots [ 1831 0 R ]
+>> endobj
+1831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.85 78.151 160.321 89.276]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+1835 0 obj <<
+/D [1833 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1836 0 obj <<
+/D [1833 0 R /XYZ 86.4 447.436 null]
+>> endobj
+1837 0 obj <<
+/D [1833 0 R /XYZ 86.4 244.695 null]
+>> endobj
+274 0 obj <<
+/D [1833 0 R /XYZ 86.4 124.029 null]
+>> endobj
+1832 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1840 0 obj <<
+/Length 3194      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�F~ׯ���e"s��G��p�î�J� ���I� h���o�
�Rt��Vm�
93L��t}
��nB&ߞ|ss��+�&6������ĨDL4���tr���:5�t��z����w�3n���Nߝr:�������(}���_���b���b}����'7'O(P%���5��N~��L���	I�5��n�j"�M������&]�r�,M�V���w�ԭN�1n
�r}�Pn���(!	6{$�.~�9ߦJ�%�(d9I������Woߜ�P�<!T
��V	��O�������ի�+pʖpx��ԁ��'��ʻl=�@Y$��YU��m�/7eVa�M
�>3��7e�-�T
��{�ԭ�����b�����>����K�ټp��p����ʰ��L�/aA�ˢ�����ڏ�����M�(����2���e��}�^��*_d����z�v��Δ�ӛ���S>�J9M�0�0�s�\�8���tY��@���|2�)3�a��DN�[?��$6���aZ�M߻Oê^ [...]
dݸ�e
m�J�CC
±�n8c�np8
o�# 
>p���b�~S��u1xk6��Y	�'��~�9i�;�L��ʁ`�a4b
<�(��+��Ѝ�J�`JXҬ�����-DcH����@��1�w� ���#
x�M�`
���kۀ��>���:+��4�
����0��`���e����CE����\g��!�2��63	S֯+�p`�29�����g]�Qy��\��:�ܚD2�W}
���#�s�
k'�;x ��[
�Y�I��d����W��E|

,����y
+�ɵ��:�D�雄*�x�w�"�;�����n���_xw0
+��
~���z~��\0D��c��DQ���U6Υ6����%7N��~*��@k���9h&D2�l�
9�m&��ڹ
�œ��wq�h1���u`�=��ST�o���NĤ���G�+�` �����sv( ����p"|�GSN��d6	��$����&a���-�s�q��3�
h���I�����mBdsP�z\M�X�%�͈���1
iY��?������O�ߟs�L�Ns��ML�x��3�$m}�*�K8�����w�_I�N��Ve�m�\{
Hk'��	��=K�lv��=��'�0��)�f5Z�Hh e�� >ܿ������έ�S(�l8���F��>�k��v�‘I����c,;�,�/���L�I �zF��@��Po�l����,0�/1��۞�iF-$����<��e��)�W'��+�,��/?f��#m\6Ԓ�O����<�T�D
i��6сV�y���.P�~
#��o��n7��`�l��C��$�b5�1)��Lo [...]
+�s
�bJW
�=���~(�Oy������Eơ��y�\F�1 c}
C���z��(

�z$$�my�|%di�K�[f�~�0����F��6HO���
�"sͽ�hC���+�b�e�<��.¦�Sm�N��
����1��f��q�ͭ Db�Bi�j�[J����u�f7���b��;�5�J�>�\uP.���!�KBB6�y{ol�
@~���68����V܎���`�;�Qa��y^r����K:�N$�w�t(�I��	W��y�Y�>���$
!��۳�����9H�
����h$��p���{��� �մ>{� ����,%l�O?�91�A� j at V����y��c�+�� #{v��I��:8d�}�Ħw����
��z�ӽ�
[TZ
�xa)�ރ��q�q
�x�M���ۗ��/�C
+������>��Xr��
KYKW�ƪ3}��K�Y�:��0���(��i�
����
�;�hs]��?�c+� .e�<h�G
�n�N4葼��
�  g}?𦨳j�'W ɯ�7��U�hB(�޺](�MD��E��E(Ogb�ZU�]�ň����yHBtF��P�vg-��.c���c��)lbضjδޗ�It�c
��a�RG��r][*C"�82Lg@��P�a��՜�

m��"+s�Թ�<�H�5Ж��\���b	o`���
b��.Vy�
K�[�Ǔ#��{*��6S�PW��G;�{x�B�|���Qݙ2�����?��(�Y��"ٝ�PHU���Z�Mk?�p#�Ox�?�%dĸa뼙
�6�_��,
+��RY%��ww�=�yJ[��|��|e�Y
�j�	����U������t��*�D����C
����E^B�
������|jSe!�߮2�3
��;M��(2������A�n�*2H��;qb�f�7�/'? �n�p�2�_���A�J��t�K��Z
�:���7��c}�!�/
�bB+�#�Bf�*j�N�-X���Bw#:�
��,A��c
h�/��
C��bsA�u
҄+��?���M�	�v漣�H1��Y%EF!���,)b=P쿒8����L�����%Ř��
�B�`��p�[.:����p/��~������*�_f7YB��H[�@�٬� ,������� 

謐͍���]��o�;��/�H���F�G�x�G�o�
+ݦ�ھɧ��Sa}d�����MN�-�:�I�Ő�UW�z�ߠw��.�!��0Ń���A���z��G�SK������M�궲t�?D�tJ4������;!���虴��h�ab��I�t�=��@�g"�_�C��'�]-�
�n�+�����*|D��� ����V���W��d9<��ųY��
��y'v�g� p�|���¾p�S�����)��*
h��x=�h����|��J=���J��|I5Tx5Mycn�������;��(!��Gٷ��.��d�%vIn��G�ig�D�Ex#�) rk��9$�G�"'
��->�J �����#]
+endstream
+endobj
+1839 0 obj <<
+/Type /Page
+/Contents 1840 0 R
+/Resources 1838 0 R
+/MediaBox [0 0 612 792]
+/Parent 1787 0 R
+>> endobj
+1841 0 obj <<
+/D [1839 0 R /XYZ 86.4 726.045 null]
+>> endobj
+278 0 obj <<
+/D [1839 0 R /XYZ 86.4 577.156 null]
+>> endobj
+1842 0 obj <<
+/D [1839 0 R /XYZ 86.4 492.561 null]
+>> endobj
+1843 0 obj <<
+/D [1839 0 R /XYZ 86.4 248.649 null]
+>> endobj
+1838 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F38 773 0 R /F16 717 0 R /F11 1019 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1846 0 obj <<
+/Length 2730      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs�F��W�H��v�K\9x���8�(�S5�� ���2EH (����ktci����'4�����= O�'x�7�'/�391�H*'�ˉ��O5H22�\L�N9R�3�������i_gQ����4]���]�6Y�F��h�EvMQ��0Y$�:?�Q̱�jr����'g�'�'��'�b/��r2�=��'�,�����ѓ�r��3�(�V����쏃���u,��i"J����}{Dh�	/2%���a��COI�4���sO�
����J�,Ͽ�~W2����}�
K�nq�9�5Ʀ����J���>ڹ(w+�i�f�uvA��*�olu����
lw&
ZNf�#��ZQ
+1�G�
+�"�8�o��:jш*2
+SM�|���/�P
����R�����)U�x^��}��F�]��ŷ�s�(���5�$�!C0�DWK>}����
F��jͰ��pjz��%��Q�
�,��<�J�m����|����۶HG\�f���&���h}
�g�Q#�
�5�5�W����Lzpd4i���G{�˫
�
)c���WQ^�D+A3"Jd)���@�c�"B
bD#0�������HQ$�q�b8�W��
�h$9�
+��*���
L��i���)
+U�� a�৴��0��-7JZ�(�V^���g���Q�&v����
7���Mo�<�*��������Kx��~��q��E�&Z/V��Yn�s�"�)�X���b0`���
+q�.�b���
+ąd}�)r7^�|`p�N��SFZI��n��~��!i�i����M�~z���|H��5����i�h5}L��n*�wn�ʝ��^��]穓m���b��(�/ݵ}z{o
ə=�d�w?s��&m�
��
+	<�W��yh at A@L�BZ
�i��A0���� �P�� �ch�".lv�eo�^;aFC� {;z
]1��R�c��ֺ��&޺�BL��U�˔�*{�	?�˶ ���`v["
�n�4l�����$��Yn��n[��`���j �(U�2�ÜW�8�g�]��`G ˸�M��]��,#�Jn��nƀ�꺶���1�^z8p|��cg=��#���-)���(�m>	
N��FY]�
]��Y윔���K=()c�2�+�%w��m�#�f��1�A^����4/х�
�	L��s;a9�o��Ǥ�I�"�U��u4#�T�)Sf���e��'�
+��F(�����ٍm\6")�L��k�ݦ�v��	�nU~qQ��{���o��$��ދ��5�!�����Q-�Z>��RvЍ�^ Pl�N�nغ�Z%��ָ����冏2A��:����
V
��
1�(IEL�� ���wE;+)�&
ɦ����GӠhU�!M.���c�p^�&G���z�J��bҦ��0��-;��R��)8p�=9�W���\���=0Ӏ�j"�$�Y�cx���F���.�>��/�n��a=���>�� ����mJ떭�j���Y���6��܆�
��� �@��߾�� ��]i����V�o
v�ˢ�����/�����Ԓu��[w�� �oU�
+C�o1Hxݎ�M����He��؊����=�+�
+���~�
�-�O�
���ٺ���!=R�=�Z�S����	�6�h�1Cx�c��i�ZJ��,/��}{vq1��\�&��Zk��=��%�7ܼ8l��5�6�o�~��f��(��Z���3)�Ɛ�%%8w<=�uw[b
��-0�z�w&z���M�ؑa)#8�Ǡ���1|��xTۤ�|_d��S��>���遝/�ר:���@��QL
H	��~����v�
���M�� H���J������J(VmeN<����ǐE��6��E/�c���M۪V:�!��
Cp�
��l��:*
�
+�	�(
���3I�Z��.���܁a4��ȏB�
+qYoޫA�ul��-��lj��| 
os�
+���I�@�
]X�((�*2���O��-V�r�Z�'^~���w)X�y�h�h�ZĶ�*C%�1��}�e1g
[ɠd�:%���2��.�
+7�Vd�بP������vT[�DYm)_mٶS��h������v
CgX
�����e��u~�Ӹ�v�a�:�e]�*�ԍ=��J��:
dj��
�x� ���Yd���-5p'I���"նG�F�,R���A'�b�A��o�#�>��A
�)$#�x��n�c��h�����Y�u5�5
�i/f�
+vt����o6r
+�
#�A�FF�`�R
�趓���p�\s��(sc858�éwr���
?���զ��
�nR� 6���[��Fȁ���C�Z�\o�<���=h�VOG��>�h��n�]g����N��v5��m�>|t#�
������[�
~B�qj[���k���ͳ�7f?d$*32J�ƒRD
ڽ	,�o��؎=9�{C �lF��R���c���:`�ZC�i�z�o��; ���!d�aC
@Jaz at 3m
���0��L
{
�j�@�#��~�4L���
zit�_��
+�^�[�q#�����^��6���������`��d�-d]����/��uu�
7J�ý��`
p����-��T��$����EW�>
�w�8�l�����ٶ����}�4S	��� n�R�W�z= ��tu9
{��f�q�����q�����)l��:g���Z�ww@��W
+�c� l�~��C����.��xV�
+endstream
+endobj
+1845 0 obj <<
+/Type /Page
+/Contents 1846 0 R
+/Resources 1844 0 R
+/MediaBox [0 0 612 792]
+/Parent 1851 0 R
+>> endobj
+1847 0 obj <<
+/D [1845 0 R /XYZ 86.4 726.045 null]
+>> endobj
+282 0 obj <<
+/D [1845 0 R /XYZ 86.4 616.963 null]
+>> endobj
+1848 0 obj <<
+/D [1845 0 R /XYZ 86.4 560.242 null]
+>> endobj
+1849 0 obj <<
+/D [1845 0 R /XYZ 86.4 302.657 null]
+>> endobj
+1850 0 obj <<
+/D [1845 0 R /XYZ 86.4 122.903 null]
+>> endobj
+1844 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F38 773 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1854 0 obj <<
+/Length 2304      
+/Filter /FlateDecode
+>>
+stream
+x��ZKw�F��W���Q�ޏ��"���IN�c���d�%ds	7 ����s�*�@I-��L��P�ֽu�W�
|w�ϛ���0d$���<��@Q�$#��,xjz>�+����|�4_����9#�����
�Y�.���{�:KWe�-����������8 ��4��tq��w
���F���c��"�� 
+Wip}vu������ޘ=�
+��@���΀<N�,��fQ����0��0p�z�7,�}�#�!�D�N
Gi��1v�m��	�D7d�caR��<,bw��Fi��k�aT&O�T��i��s��h9�Qǂ��&F"�U0!
�9��]1���kI�FFH�'���a�Y����M�J%ފw�_ly���!����	�
�[l`
�i𩐈Hm/@=s��U��UF�*n|?�7�D�]#�Q�����*E�4��6�rD[����7���'H�GH\��oM䷪'�r[>�
+Y�۽��[�Ϳ

L"`�������v ��&<�\ ��)�D$AF�J5N���W�ׇfC�j٣�aQ�̆u�nݪ��w�
��7^���j:��b�J�O>��r8�%�}
s�� �K6��r��G�b��chT�HJ�5^�~�z`U6��e�ZE�<�<�
�,mv��=ܴ����G{ϭ

�Y��«$L�$J�dz��($e5@S����⧾�Ј��1�j�86m���?�8� P��̓�C1�ɥ�S6�{:�0H�a���V,�EOU3��j���1�7n� �!
+����:%#C��9
`�$�>"�0C�>F��(N|%�ޯu��������˟oo���V�i���qUv�w�W�{��
"�p0ib���փBe�~:�5N8�
Ad�O�"|��J�٪Ņ��/\|جM��
+�6Uz�&�ƠX�[�49�4�T)zЎF�40�1Ϭ-Oɬ2Wj���gi�Y�сu{ke+�,	�y��d`PT�W���]�>枯�x��g�vWF�P��h�~{���?v!��dY��
 v�L*�!zTV���t+X���=�V{��Y GBQB�j�-Z�1��XT�!�6Ĵ��� �HH�&�a}��K��.W�_
���(-z�#Ȧ�
?��/T���]_����Cn�ޜ(M��
T
FE
�N��?ܿ
ްhvG�`  �V� �O�L����]��nn_,�W��
�f�XM�`@Exᾎ�i�<6�w�(�_RH2���<�k'�+��3;�.G��ۯ�
�SW�z�TZ-��;����?��ZD3;J�*9[b�F�+\j�ZO�����b˓��*�'�r��r2�Okot)�������W�ؕ����AѸ#ˆ�ЙE���Q}���Y%	k҂%;b	 �T�F��%3�_
Α�����Uk�ݫ�l�^���M��Y�I�]�U��V��!$^��B�sr�=�4[���K�w��,m������:�g]����!
�ȟ-���b
��_��9��LmW�0Fڈ�݋�w/�~�Ή-b
�nE#ݾ�(ʞ�̢�҃���
]�f���� j'���L��6+�2y �
C��7-�{4�P�t
�J�aP������49�A�C4d�:�AC'��b �*�w�l
�~ˬ�rߖY�>�e���.c��,;[g۴�Y����gh��i���X>�v1A!��i�E���E�&Jz��Pw��s�������0�b���&�@�6=2D��N���0~Ҧ
��pv˨M�u�s?�=�
;��3�d�Q0B�
��D�:	�X����ʲ��p0Uo���EC���m����iU%t;�E1,�0m�e])�z������
�˓� Bj��p�����`�@v�18��D�
���y9��(�B
�C~
	c�$��@6p;Dl��&M������|�!
�M�lS�c��p�Q/$�Y��)�gF|
(gE1�� Y���Q����!$k
��d��>3����d���?#Y�.�($ˊ�b?�C�'Y-�N�e��
&Y�޲�A���H�}����}$����6>p�k��?�Ů/�����B[x"�q�0�"
+(�$��3O���A���0�-�X���Y3���c5�����W�>�W���3\�dX��>�Վ�N}�)�D��5�2-�c4�ɸ��� �p7�Yx-�9ΒԴ����<�|�C�d��O����F9�"J�2/\�t�T��3}�K � 5���@�5�����-8Nf�T�	�V�U�喭�1vX��|����KC��Q>:մ���+�.ie��U���8����U���m�|f�u�5��4��p���%�>
+�I��`[#(�dkSេku�X���v�
+endstream
+endobj
+1853 0 obj <<
+/Type /Page
+/Contents 1854 0 R
+/Resources 1852 0 R
+/MediaBox [0 0 612 792]
+/Parent 1851 0 R
+>> endobj
+1855 0 obj <<
+/D [1853 0 R /XYZ 86.4 726.045 null]
+>> endobj
+286 0 obj <<
+/D [1853 0 R /XYZ 86.4 583.885 null]
+>> endobj
+1856 0 obj <<
+/D [1853 0 R /XYZ 86.4 525.559 null]
+>> endobj
+1857 0 obj <<
+/D [1853 0 R /XYZ 86.4 362.738 null]
+>> endobj
+1858 0 obj <<
+/D [1853 0 R /XYZ 86.4 199.918 null]
+>> endobj
+1852 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F38 773 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1863 0 obj <<
+/Length 3885      
+/Filter /FlateDecode
+>>
+stream
+xڽ[K��6�ϯ�i#�,�x��ڃ�G֩��y�{Hr�%ΈI�Iʳ��~���S�F�L�a��э~|��D��I4��⇛���J3�Yl����N�ajbĚ䓛�䷩bv6�NN�mgRL��H�l6��|K�[z��EJo��ɲH�Oմ��Xe����E��x��쏛�.��\|�జh�k�9e&���oD�%|�i1�ɽ﷙(3o�����E؉�l�!W&�[C\�ϫ����A����X7�YႥ��˴�75�̄���'�u<��"�B�M�ɋ�|�8�woUw�;ƵJ�|zy�fw��zv;*�˺�ET
HYfN@@�/"��������w1y���.�Os?ռ3ׁ�8t�͘��⚖�v[����;�G)����y�WԜmg|�@]X��m�.�v߱Z�iQ�����LV���m��L��*�ɲg�З�#
U�"�߭�!����&����&s�Y�S�>���:�.��7E�
+��L�X�\�3�Y��g�$o��(����\
=�=n�>�9��J&D3��/Ff�Ӯ���c��{�*��<fQ�Ö���m2ִQ26�2��8�K���q�P0ܦ�Y�jw�Vk�M��/^SU^�#. �?�b�Lܸ��x
�K�''�Β)
&�������:;1B���ȯ����_?w`�1��
% �5Ls�
q~�a&��
����pn8�`�a�n��]O���6����Ґ�f���
�?��d\�������c*�}V��U�m{{�~I�e��2�n�l������N<���<���uZ.�l�k&87�
����5�N���
|�`�qP��^1`"�� y7^k
��� �S�22�u4�����`�D���
+�;��"O�'Ÿ;�;֗�\F�G	�b@/���&%b�x{��
�*nӑ�hL��Vq
a.N9�h�	}�]5Vt|u4���9۰�%ϖ��ߎl
p��q��λ�ީ�E ��P

+g�׫C
`��S
o��씣��X1�0TH���d�!���@���68�l{
5��p��a���'�zA�=f�'„�P�
 ��
�k�����r$�<�M�}�ia
+qW� �8��b��	�K�3ĩ�F�rT�΋�zq�i���8��bL	0"��L���>���Z 	n'��/3
@�ȒO�
���Ķ�g�����a���O��[GQ뷋c#6p�t�hx 0DL=��j�T(�`��y�������#�1���
ɂ��۴����a�N�"ݫ�#V;� �jn �>)lC�)�T�.��ëWo��O�4 �66&�����ï}��W]��-
j�JP�4�_�
HÞ���"�(W��{�C|8�����O;�7ӓB����g"L%t��˛_�B�c��g!
+H�>��~��Tl�,�Dw�
K��x�F��9���6��G�3�›Տ`or�,�疦��ZF�!������Y�~\=�c�9L�A�p&����1
�,z��0P�>��/_��/ K\6�鲩A����̗���W5x�L��d۬ʒu��t�h�`�T
��u
��jR5u1f�p� )���n�ΰ�!�n���"�|��b��I�Y��`�X�����p.nG��Fw�k�_󴠩��A�$E�*wu�
Fw*]оÐ�{?�-S�У�
t�V�1	����W[g�b�Ev�¹��*�.}�aP�)�J�D��?v�SM�~q���9

+��KRy��
��Nx�Y�vIM
������,	�ԯd4�`ZG��J���l��P���l����'n�Y_�Z�N
®kSP4��U�vD�
$-���q�� ����OX�}��#�[�'�2�2rǫ7ҁߓ��7�
��(�CW
+II�hه�Zگ`�t�FBR'!�
e	�+�A]�d]=��ez�"~��F�mG$���V��GP�*�Sޏw�e�X�B
+|Jq��BF�c�����T��
�kϪFV& /u��B���I��9V�O��
Y��2���I�S=X��L��gX��	��
[&U�h�K*�tI�YW���/�)'a��I	�;N
+-�
��4|�_�
[���������o#��	�l�%��]F@>
n�>�DWX�F
	��ӑl�LCo�˻�嚡�»9�M�GR3Р)e�h�E�T��=2=`)7y����XSa�z$���V�[���^PU�ž(FD��CV= 6�r~ʎ�`o�u�Gr2��
\~��1B�լ�v�5�*Ëm���\uh+=�Yz������n-ᑲT�'r \tzY�m�.O�qՔFnC��΂sD/�:Xd��/�l�BL��9!����4vl@���E�M̸��%�� �]l�yUxR~�y駊\�����lx�Џ�֟
G���b��
�P)�G�����i�.)K¶j���n�q���:�0�{=JP�iObGT̜ӽ���5˗c����\\���r���ȸ�m
�#|D��~��/�a���G�e̼��T/$��z�0����§4�^��ec��&:�żE{���9����gٮ����ޯ2d��O��
;!A4�*���D{j~��}�8��t����/b#�
����~Ie�؝:nӻċ�z�Y�ly({CW/5|�ɱp�R�
��0�5�.��o��@��R��Z2ʚ�d𓗌�@w/॓F�%=W��[06d�C�D��x��c���U>������
���S)
���?��~x�j�2`,�g�l
�Aާ��廱j�f��#EQiPl�����Dc��}��@��;~��e�Ҡ�q�]%�j�Є��1S� R$�*� U<W{��o��.#൙l;b�
�l�O�%�^�=G��9ȧ��K�|��dՑ>�8Dg��~�BW�N�a��-�$�nT��V�Q"����!��Y��F�\�ff����O�]	8�W�凉�
Yc�+��'Dt��U�@�km���slYf�G\�E������x�C�)`h`1E�+�2`u*���Eb�'�tB�t(��˾�C�7%��)BXۖ٧l�Ѻ���:%>
�&�W����e�s�UX��a�
H>z��/3<���dD��L|�v��B
��U�X�6ɢ�Kz�-�
��	]��:�
�Q��_�l�R !�n�f�N7]�7>
��H��;�8m��*VAz�R&�x���*T�'$�A6a���;�Y�$�[�3�Hu;so_b_�����-�p�|����S�n<"/)�� ��k^w�!䆫Pb�+(�gt;`P{���K��y��)ݽ��ҵL$��!l�%��Z�x������PJ�B��"�8#V�j�Y��v��A��X��x[5sxcy
	x �?B`,w~*n�#�u$[Gޭ�x�Д˴�����p�������.puup�� .�C �:��i�ԣj��CƿDM
�M;ƍB�û7+��
^7�_��G�ɩ���{Ãg����}�� ��H4Y��u���1}��
��xcɪ�'� �u/�4��0�Y�FP˙ν=Gf�m�����}\s������
0����!
ݯ�0���B��S+��&Z��̥�ފ4�R�?Yr�ei? ���.��s�(�"g��9��Y�[(�9���Kg�m|x�r�ҍbθS
���	 + [...]
+��&<�Y"9=9=����ܷ:f�xu[��L�Um
���Υª���8N��ń0�
��@uE(@~x����?8Ȧ�sKr&�=n�X���������Ȟm�cgN���h(i
+endstream
+endobj
+1862 0 obj <<
+/Type /Page
+/Contents 1863 0 R
+/Resources 1861 0 R
+/MediaBox [0 0 612 792]
+/Parent 1851 0 R
+/Annots [ 1859 0 R 1860 0 R ]
+>> endobj
+1859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [333.475 127.679 348.198 139.634]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+1860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.326 127.679 388.049 139.634]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+1864 0 obj <<
+/D [1862 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1865 0 obj <<
+/D [1862 0 R /XYZ 86.4 631.904 null]
+>> endobj
+290 0 obj <<
+/D [1862 0 R /XYZ 86.4 469.167 null]
+>> endobj
+1866 0 obj <<
+/D [1862 0 R /XYZ 86.4 398.58 null]
+>> endobj
+1861 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F38 773 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1871 0 obj <<
+/Length 3014      
+/Filter /FlateDecode
+>>
+stream
+xڭZYs��~ׯ�#�ǘ
GR[��v٩r6+�y����H�  �e�ק�
$$�k=�8
z�{��>F�b��/~z�앎�H#-�_/�H�E�Ri�x�]�$f�RQ���ۢ�-W:1���
>,�
����+���u���͇_x�U]
�����{���ŧ
	��
�w�"1�bs���p��7o��i���u��ѩP0*W��'\'
i�6��َR)d
1�F$˕���4������#��
5��`{,��{�*)!\���rx��a�6A�{(�MO2�@
������ܕ�R%�g|�A��M��qʑ9��
���m�3�;X���Z��q�nK�g�[x�v����d/\������ɳ�t|��>�6��FA��u:��M}��+���ƫ
vF���r�&x��CF��LaU�.i�أ��}�A�
)�
+�6w��U����j*�&�C���j9�x=^�#�櫉,�eioH���@�<v5�T�PuE�l`x�6 Ǟ C#d]����UPo��E'BZ�WWt���m3�Yg�c9���"��/
�J��JgTҊ0N�>�=���"Ա_�<[�7б&2S�!�պd3�����ٮ��
I�K sg��
�T	)����<�&I*�:�
��Ar��hC�Z�"֦wz!��?gO�+�e`g`�
+�� @'�	
n��	���R6��M�G��k�/�$�%�ր������f����AD� ���f<�%'T���M{�`.�qJo˃Zaq�u
֦���g�ag�[tA�79���t��"�p���)�~{���3M�rt�}o�-h��^��2�^��i-���Ϗt�VL�С  ��
+��S�?�������xwoo�-��

��WnA��`�l
a"6Ȋ0���rƓ���h�_f���=������[ŀi�t��a �  
+o�y��g2����E�f����`��Ѥ�7��6�S[

˯I�|M+T���!)4��P0`�S[8�xv!�ϲ�z՟2�,q>eH��q=
��'X
+%�#���kZ����`��b.�� p���H�#���}3
��n��z��<��KV�
+�e:U����A��2v��k0(w�Q�?砚x(�-#[J��G�ă_r~�
�Ր8��8T
+ W���y	i�?c&��3�RAia#�S�х2���d7.|)�%8٧Co�M�.�j��!('�7���F a+����twn

�DY?o{�\���5�(咁S�[�iP��|N8J#΍I���<II�y��
zQ!O��$(
�(�$�z��!�h�-z�NN�c���h7��a.=�Bz���Yf�.wt���ҵ�
)���f���*J��}�6ƞ��R�Q4��N��J7P���O[�Xi��?<#e�?��?{���V����@������%v�@p:�l�
Xq1z
+-v��7��-�M�8w��[�?N��rE,
Ss�о!Ӄ<�ٲ(F-]j��W�I�
+����1ivU��\�r O.�pԧ{����E�4�z��eq9W�!�Q�
+�y<���W[6>Ir�� WF8����v��*��Y��iY�:
��q��
��}�
&�Te�� &�Q~�_�*�g1Z��?3qN+Ⱟ��/����\_���'��0��C#����0���
�cr@��9=���j���f+��D�'V��"��)�
;�Ҫ�aD�r�@9U��ڔǭ��}����U�$��L:
2	��X���7�-|���������R'}{��2�
u�+,�\�f@P���8P(���FM�k�S��\J�S(iASTq�
��T'�H_+@���;�6�+�=�=RqP�%�h�eI�wK�/�%|Ӗ
���a��2s
P�ı�v��;��
|��U�ߴ~Y���%bk$�v�

�k,ŇN�G��2︛46/.�9�r9̖��j�el�T�\М� �F"��
��X����~���6�8�
+ߥ��E��������#�8�zB���g�*︓�#v3��!�Z���>����
Eȉ!�+������K��|�q��5
+<>�`��2��Y
�o�\�~��8���9\ձ�:���6�����b
Y
��_��c�Kb'z*�y2�#X ��
�Q�u\�PL��q�hFk��n���]٧����O0�������i㉦�=�?�U�m�w�v��+4uf�oU��8�$�n.
��[Y_��d�i�NZ)am�
`�QI<�l�dUw�X*3
V��G�y���fwh����4�~�DD�B��Z$0���rs�dV ݻ���=
�/%���TG�.��5he��D�yP-���jI� :O��D��|� E�=(e�U�X�����]z�Z��
��0P��b
$�aJ��z�X%R��D.
�����p�*����ߓv������	uO/cNI	�R`�5��'��"�
��������$�ғ
!�2��\��轢7wi74�G�b���9S�K
�L��u��`[3��
f�2&���QH
+���έ��F!��d�*=+˙M�~¢�:%F��O@	�g�
� �"��n���a!4)
�x�m���
�
+��p&��=���ߝq"��cT�P�J����Sw�Wl
�t�f]v� Ϥ	�ӧ	C
6�O�����zm��w55��W��M%��S�>�[
S�����D��m��}��g�$zyG70
�1u i���[���g.��QZw����h����BQ���~8�����u8�3�虇����8�4#}��O�o���۾!C����91�vPS=*�DLO��
��`��O
O��[(-�Y>h��G
7c�c��
+����9~��Q\A737�a(�������tOc�,�FAV�Ԫ<���~���5M`����>:�<�ہ?���o!��O�à
�4�k�;�rO.�]��v<�?���P�S7�n�͌�oۓ�[�ۄ����}��3^ĝW��
m�S�_GS���a����yv^(�"�
��g���Q%ߗ�s^�!v�[�w
+endstream
+endobj
+1870 0 obj <<
+/Type /Page
+/Contents 1871 0 R
+/Resources 1869 0 R
+/MediaBox [0 0 612 792]
+/Parent 1851 0 R
+/Annots [ 1867 0 R 1868 0 R ]
+>> endobj
+1867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.534 476.282 420.256 488.237]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+1868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.953 440.97 279.675 451.818]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1872 0 obj <<
+/D [1870 0 R /XYZ 86.4 726.045 null]
+>> endobj
+294 0 obj <<
+/D [1870 0 R /XYZ 86.4 701.138 null]
+>> endobj
+298 0 obj <<
+/D [1870 0 R /XYZ 86.4 617.765 null]
+>> endobj
+1873 0 obj <<
+/D [1870 0 R /XYZ 86.4 439.693 null]
+>> endobj
+1874 0 obj <<
+/D [1870 0 R /XYZ 86.4 418.95 null]
+>> endobj
+1875 0 obj <<
+/D [1870 0 R /XYZ 86.4 400.144 null]
+>> endobj
+1876 0 obj <<
+/D [1870 0 R /XYZ 86.4 377.465 null]
+>> endobj
+1877 0 obj <<
+/D [1870 0 R /XYZ 86.4 356.722 null]
+>> endobj
+1878 0 obj <<
+/D [1870 0 R /XYZ 86.4 335.979 null]
+>> endobj
+1879 0 obj <<
+/D [1870 0 R /XYZ 86.4 259.148 null]
+>> endobj
+1880 0 obj <<
+/D [1870 0 R /XYZ 86.4 188.149 null]
+>> endobj
+1881 0 obj <<
+/D [1870 0 R /XYZ 86.4 138.238 null]
+>> endobj
+1882 0 obj <<
+/D [1870 0 R /XYZ 86.4 119.709 null]
+>> endobj
+1883 0 obj <<
+/D [1870 0 R /XYZ 86.4 67.861 null]
+>> endobj
+1869 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1886 0 obj <<
+/Length 2955      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s۸~���SGJ",q7�I�d��z��i�}�%����do���
 ���h�V�tfS$x ��w>"݌��۳��g?��j�X15��
E�H��(NG��ї� f2冏?��Y��g��X�k�'Ƌ���|���d�b����_.ߟ��<���4шVb%1B�f��/�D�9<y?����ގ[��	��|tq����/3j/�tW�bJ�Vn��;{�*�����f����mw�T*
�gE���j�NS����'S:���v���x�.���`�p}S/q�"Bsr/oS|�7�=7�`��{vw�,竵ٖ)aϒWW]�Pn�Œ5�������%y�G:w7`��$�	������D|s׳$ϳ�����R��</��l9�c�X����.��=N�$'��CN�a�q\{A @�%(є��ьDJy�qD�91�F�(A��䫿�u���5�*�y����� I����!Vq2�0T�
�]+J8���\�	M29���	U��HF��b��ꂁ��fvr���f8���{�5�(4���3��s�w��.rX}>s,R�ה*�B�Ŀ��l���1�WG_��*jcrʅ����]�R�(,1����/�:�"J�݄^�&��f0���tP�Z��B�؆�
SL�d��(Б$f�DI,���N�fk� 8��!��M�^&V��DTiώ�.��"ۄ�w4������f�H��2Lԇx�
w�Zɑ4�P�(w�Z%8�QY���A�V�UKD��8'F�۸+��s�'���c� [...]
�{�H6ǩ���E�
������ ����[��8
�٧t�]{	w	I7ߦ�#������F7qC"n�R��&
���B:@�|��zO�S?�G7��G�T ׻Z�xTŦ��`Z�j�
�������w.z�9�^ �B��J���H�$�]nދϯ^���8�yk�!�s�:ᥘ
�
��}ߺo�uZng��,���pH2j��"��u* �
�P*�RT��~�sJ��0v�IY��T4����f�BJ9o�q�jP�E��ڃv%�����s����z0����W�y�7=�ȉ�E�v��
��:�p6mR��Z���f��S8���
�l���v���o^�;��^850JT(\#
+����Dĝ���p�
S'Y����`=�� ʣ'1�B
ى?�HL��?Ŭ
:j
�(����g�Q�"����nr��\ey4�
�:��l�&> �"�����u��6@�����v�\�A��8�cb�<6��j~�‰�$�]�;����{��u����|yT��2A]��
[Y&��C#�6ث��l��f �P=��p��u!Ɨ����X�`�U�e�g+q�U�(�����r]��@�-�.�d��"D�����h�+m�>E��|�
p��T��q
��_�B
|���+'�g�b�G
+��QS������yaAZ+ݽ�S�F�
ø�V�
����מ���1�E�����YXc��Dۗ �2��hyE���=b(�Z��DϮ �HZS1����`��b)x�h�WH�B¨
�)תv�
+pG�5]�1��>
��Y^�>���Y"�6S�
G�o��$�����v�]o��
[�����
(�^��-}��n?��9�a��fJ֩�œ�c����S2JH
��t]
K�VP��!=�Vs
a��n��6���X�X%�>�A')����ާ��}W��5��p#N�\��1�`s(
�J�i
���E��짡�������ˏ���|��P�%�wxlqa7Le�w�ծ+u���Ԝ��2J�-lS�\z��x�ň=aK#��A����D=�M4�}�reA at I��Ai�����+��
vW����=]�a���S��(�A����~4]���; 7=w+�V���0��w���C�Ѳ���*!	m be�H_��吥�!B��+n�ö��جt�>w���Ƒ�?Wi��i0ѡY�PU#����EH��IfW���6�
ؕ3	��i�l�\�����ې
6�0�A�]��&A�h3��F�
 �kl
y��t\��� �Ÿ;Ws
+er��[�� �u�Y+"+��("k��!��O;�R4�U�ЭSDݼ�XL��a�����x�����]:�hZl�Bʾ�[s�d�2�{i�X֝���]G�KZ����m���C~r�Zd�=4��Q�r���
+�}6�a:�:g��i�Ү��{��Ԝi����x��
+�3�pX��8�m�q{K���YX^.����Q=�
J)�y��6׳��C�id��	�
+�pm��}������P���wCxS~�����:����B��R8��?�
�����y�
���
�A
[㠊+�MgC�B�S?L-�3e�@Aw8�ДÔ=ۅ�M�h>q���楧��9�����U3wZ;��#��u�vǙ`��<��m��錄g��
\Z��˅�+�ۢ���dwXS?�>$iG�1�f-}��uy��

4�1�¦7���O�<y�7�$R:���KhQd���
+��ۂ��Т
*U�8��0�d
q�]|�-_�%�L�"C$IX��+�h��Q�0�E�$MOOj��1Dka���]�x�GP�aD;j�Z���r��"~�>�Ȃ�>x �2k����t3R�;4N����:m�}
����x
Ŀ�H��-L��m����g�c��i��P�c9^g7��[�޺Gp��P8�U�K�7,U
c�P�7��7�<����#
ts���'x�s�)�U�v�&�W,��e�hY�ܿ]yB�[p�p��
�
p%N��!�;
�@�>���9ݦ϶�1�Ή�:�
5����<F���:�1�������V�y Ҧ	i
���1������o�_�
+endstream
+endobj
+1885 0 obj <<
+/Type /Page
+/Contents 1886 0 R
+/Resources 1884 0 R
+/MediaBox [0 0 612 792]
+/Parent 1851 0 R
+>> endobj
+1887 0 obj <<
+/D [1885 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1888 0 obj <<
+/D [1885 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1889 0 obj <<
+/D [1885 0 R /XYZ 86.4 654.797 null]
+>> endobj
+1890 0 obj <<
+/D [1885 0 R /XYZ 86.4 382.676 null]
+>> endobj
+1891 0 obj <<
+/D [1885 0 R /XYZ 86.4 148.725 null]
+>> endobj
+1884 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F11 1019 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1897 0 obj <<
+/Length 4416      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6�~ׯ�G*���L�j7�g&�8��N^
?Pݔ�5��!�V4�~��Ò�I�j_�$ ���(��n���/�|s��i��Df�ݼ�٤V��S��Zn��7o��^n����~l����V�&zq)��.������kl��M����?]��uu���x���7/�\�r!a�x#�U���
.޾�7{��f
���{w��	O����?/bOu<�>]o3)��L�Ewn�@��ч�$���\=�$���$��7w�j>�ş�f�kI��X�0-tS�<j:H�����
'q}�Sw��E��p7�B+hBp���[�/۝�/y���_�G����/�]/���(M5>��)���O������Z|25�i��$��$��$&�Ibs6������,��¯|�����
���%�H�~߃���[^�͟������+Ӳ0i�]�yt�(����nW��͹�
|KщG�����4�.{.�J�߅w0U�^����W�UU
���cU%�p�t�U����oXzz2 [...]
+�#5A
+�.U
XQ#��b��u��{�3/T��f�� S'���C)�$�gh�ס�(�hݜa;>D,(M3��s:�U��g����;~�k_"�����A�>g��.��M�F����)���Y/�A	�Z�22	�FI<��j��T�9^�Tv�eB��:���X��QWw��T�F�������
@8�)o�HU�w�
�k˽�i�
�-zߙc[�Cʖ;;�fp�H�����| b�̫����(�}0S�FEnZ�l ���R�C+�F3��=T1"
+4t �o��%�)o`ɢ�7�)��
+5@��Ÿ��}��������<~��(�
�B���ò&�i�N�Ί�M���L|&��g�SY���7�V���ՇK/Bz?�����-oC�ԁS��ћ^*�~�4>
�iU-�[zzپ�Ȗ�
88މ%�y�ћ�h�4*�溽/��.���Z���$*~U
+^ ]}��E C�-�WuSԸ[��4�X��s�H��7��i
@���~/A�`)���EwW�tўH2�0���v������n8^*�� ٨
�]S_�w��l8�{��
�`�.��ˠo�h<��U�3�0�<�ES=�&�{U
�������e;\}�8�q
�B��؆P������r��"�y��3uwy�7�
���K�X���!�%c�N���%��<��{��[��Pp{�'T	H+�A[�W���-������-m�
��-�S'���֓±��h�;��ޯ�Ҡ{���O�,*oB;�qr��
�,�/tO'f�{�@D�خ��k��
���|
+�O����*��[�"�e?"��5[_S~ Į����cQ�[��yT�Π"�k��a��l�ɩa%�1�{�D�
~wL�7���[
��2�/��Ff��L�I��s���r�ٟ���z��e�Q�&�~<�;� 
+�(g8���@�1k-�\%8�_O�)�8s���M�O�kp[2�+����Q
�HH����=�u�kQ�xd9��,���}�瑜6���;
�hى`�Zs2��	"^��97������M���vU޶�!x 9۬���y�0������i}�q3�|��~|��vFjR^�㨌�<O��� ;�w$Hnd���S�S�}ĕ��'}�3�‡�
i&@��/|�*�
��>D�t���m�
������q
ok� �#�
��D��!c���B�m��rKaZP���};����'��

a�d�Ս�0 at 3�K�|�.�ޟ6��1��0̶�ϭd�7�Ha�����<S�s�Z�IGS!�̭K놽�8k�HǤ���cmD;�
+~�l����Æԃ���e�̢͵@B�4��t
+6[�dJf�=��ѥ��r��Vd�UL4�\�
��{)��ߜ;��ʬW��c9D�_��y�O#n�7]�9�f�
�'˱�
s�;8�������b��
��,=���X�#��m��\�
O.������:�P������|ߘPY�|Џ>�>��N���+
�>gA�C4������v�ؗs�~5f`0�jU�1l�λl�ۡ
�C�
K�J=)']��Ihqc	U�$Fk�Le�������{���zf#�n>�-e
�� �sh����<�/�﹉$�y;Ƈ}} �)��cV
N�.����4K{gġ
y)#.��^}�F���_ܸ���(�X����S�g 6C��U�FcDl�
��m=A�U~:��ݗGrIFG/�>���-����3Os;�;z�X
}F ���G��D�������wܑ'\�?3�e��C�r,`zc hR��E�, _�L�_�S��r@(
"���y>�@	G0s�s�09��~ffX�
+�$K-U�Q��l���"r��-cӊ�zGZ]����Ih͌El��>aP5�T�TЌ���[_y�^S> ͼ@���՟��w'\-Ȃ��[V�L�}���cU	$T�����Իl��k_Y��=f�Xr�Ri%�
�0%���
P;� ���N�!�gEqh��Au���d��k�
V�������r�Ú8�����顂6ZdjA��l
�d�D6l�&��,�#��8�6}(7*YJ�G���Ky�Зdzu��J02T��r�͒?�r,� 1	`
?
�*��.M�
P�
R�!�"�p�>SR>�m��z
v_���� +`����'���g�{�b@$/S�$�Jl���!X���Y
+�I���
j'ˍ�A|㬻�(���PH7��!�NiƃޏFV��+�@�� k� ~�e����=\�A��(��oKA��xA��7��8�ҮD�b &�Ƕ�5!N$`C�1�]�3����v7a;��7!��J2��z�¥r����g`~�c���!�mp�.Q��z:�:Vɒ�����!�pJ�ۄ��(3%d_��ǥ(ۧuw�
r����)�0OQVqJ#ձ0VN2]-�-h9.ڼ?4h��
�
�JEb�o�X*��0� Iƨ�Y�O�����P��[�Q�(�Xr}��|�?
Ax�7��`
CW7��Ј���>ݡ�ۻ����`�}��
<ܷCg��ۢc
�38�˜H�g2,����0*�L�c��@#d�������+�,}���
�����EIm&��Tα��k`7�(�̓�:O��n�VJ��'���ҭ�I�!<d�7O at KU

+�<�� *�� 
+����!
�Ǖ�u��Q�z�-36>s#�P2�F�l���x��"y���F�|
+�z���"�-���qI��\�
�X�q��_�1d��kCS�^����L&�?���e�Ӭ�\|��
+k0J
�ty+0���Bh�!��ɔ�
{;
�໊IA����uQ1��X$ㅜ
�� ��"~�N4/.�BF]�O�
��v�,�@�����Z`���)P��hǍhgp��m0��^����CH�	���Q�*H��LQQc�$�.��f� !C�J	g�R��کY�3;�`�[�^��<V`BDjZ�'����
+�@ �z��G���f4���#P�#PNK0��R'���5�*�6��$�3�k�����O��ׁ���nRj�CN��8F&xO"�&@>�h�>	
 �lk��?+!x�t�A�5P"
+/R>�|P
��c��+�Ԇ?��/��>�sݕ�P�����+;e?r���T�����4��Q�Y8���y�/xʐ;�����o���Q�)l�?��gn�l#O�}�;���C�Y챆�%?t�lR�[���O���NRk�,����?fī!x�[�lq��r�ݵ���x�3
N��_���`��̠w�2a�����<�s�k?�bE�
��(][�vŎ�J	�1��hj~����t>��Ox� %����!�pC����g�k��l�Z�s�P�
�
�"

'�~����L
��&h6�������dt
�2�:]
eq���j`� �?�d
� 6O�v>��b��d�����K����_���
+��#���Ίbve�0�-SF]��-Ɗ�*�����\~}�T]S�gX�O��$e :�������{��,���+�����NyIO~���䇢��kh��
���J\o��š�o�[8��i'��w�uI7�&��nUt�Di __t�j?m 
i�.n
?
�����6�ON���?��5>�rCG�t_�uS��nj�Kd=�zz�Α�|U�<܍զ�
�� 
b��Ms�+�:�~
�z�f#���Cx�AF3;��]���o��yW�nM:�����X�u�8^x� -�2�ya~
+��5�lf��z�j>��
_��}r�����׈����/_���?(|o
+endstream
+endobj
+1896 0 obj <<
+/Type /Page
+/Contents 1897 0 R
+/Resources 1895 0 R
+/MediaBox [0 0 612 792]
+/Parent 1851 0 R
+/Annots [ 1892 0 R 1893 0 R 1894 0 R ]
+>> endobj
+1892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.585 533.63 477.307 545.585]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [480.882 464.389 492.837 472.802]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HiTa:98) >>
+>> endobj
+1894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.867 330.392 359.59 342.347]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+1898 0 obj <<
+/D [1896 0 R /XYZ 86.4 726.045 null]
+>> endobj
+302 0 obj <<
+/D [1896 0 R /XYZ 86.4 593.364 null]
+>> endobj
+1899 0 obj <<
+/D [1896 0 R /XYZ 211.209 277.938 null]
+>> endobj
+1900 0 obj <<
+/D [1896 0 R /XYZ 251.436 225.832 null]
+>> endobj
+1901 0 obj <<
+/D [1896 0 R /XYZ 274.306 193.802 null]
+>> endobj
+1902 0 obj <<
+/D [1896 0 R /XYZ 290.484 97.124 null]
+>> endobj
+1903 0 obj <<
+/D [1896 0 R /XYZ 279.824 65.093 null]
+>> endobj
+1895 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F38 773 0 R /F11 1019 0 R /F10 1116 0 R /F12 1155 0 R /F7 1115 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1907 0 obj <<
+/Length 3487      
+/Filter /FlateDecode
+>>
+stream
+x��[Is�F��W�6P�Dz_&�l�J��ʌ�\�
`Q!	 �h~��ׯ��MJ��
&�@��_���&[�.��_/��~��+i>�F����™\-��|q�^����]-���wM���몫�}�`��v5<E�>l��j)<g*s����o_|}���
�a
��s��b�{���l���o,��->�v���>�]�}��lJ�;��x�sk��b�J�̺M����)�5�Koﮄ���
�(c�����XuuS���%R����+�'�
fs�5���.6a
�{+
61�,�X�\yM�v�j�
�r��b���nk���}jB�̊��+����
+�������g��-����Bx�u���jWm
�Aβw0�R�
����*n�}��J泻ٖ��cU���9t-��}[�˦���nCì���P��I:*욲�v���2�v��m�umb/�\�^��B��
Qgw�ոŤM~�TBe��@�iY�[��ۖ/�
T�گj��J�Ea��0aQ?@���l��v��ve��%�lM���:p?m��}ەE�@��$�A���
q()�$4)�^ÆK�Lr�5X��n
s�U�s+m�n�6_L�*�[�
N�l�
+���T�l�wMЉ�U�w,�9���WHtK%]�R�5�U��[)sgݑ�����'n=G�Cʚ��CՌ���4��V�ˁ)��zu:�Rq�
��L��i4�*w�t�r�R���u
\|�O����ʾ!L�i��*��
��.0�f�U��Cc�������v����,-����&�s�̹fߛ�#�4�3?!�%F����>�Zrc�&��T�
cg���l����D�Ą�3r
�&E��
с���j�[][�li���#1Bst��,ے���ݣ���I��P���Ќgw������{~I̹�����7	��>�v��A�a�Q��9񶖏��e��%��CDq,�0��_
����]KE�jZ�`�
*@`U�F�
+�r.��{{w�㰯V}��d�/�_���'�#|�ﯴ����P��/Q�\T9*<Q4(C��.fr��c�
+=D
+`�۞�&�Tq
Ś\�|	
�~�6`�sa
��=��m� q�%l��%��K"eYn���rBN�c�;�C�1��Ϯ�%�U�*Z"�ڃn��X���jI �A$D
+>����?
w5���^�瓗"^	憈7D���4S�%¡��Qɺ��z�nS�-���wE�|BKx'��KXթ}�
o=jg�.ߖ����$a���
�JB��)

�H�d���z�3��'����
d��mJ�abc��c�6J
D��0��қ:6ÖjKE�]����
B��
vŻ�=Uc�\��#4����U����`œ�N�*B̈CqQ� �B
�`X�
����"�Jҭ�*��j6��W�3��p���0c�"
R��;��=9q�'�;Ș�!�;эiW����G!�rȄ�����s�Z�&/Q�Y�#���9��P�/
�¦)�@�99�oW$a�.a�vS<x�ב�u
i�
 � T�r��}^� ���^]T
!�%u6���GC�� ��0�93欰��YgZ at 3&��t� �~����s��
˿
�h�����Jȹվ�
���h��\1ƨ�w庄 M
�2�
����d��8�lk�j��o���%}@~���請�oN����$�o��'�-ď E�q�S\���eL�
�7k�r� 
�\*,xa/�B� /8���NH����}
�Ux�$m���;�g L��s����Fv$;�xCJ�g�s	v͉
{94�ַ���ǥ���e�6e�!���.�E��{�t�>�IADN�J��q2D&�>*�ø[�웎���ź�W
+j��=Zt���r�ܔ1����+��
XS�
+z�9������R>W;7
�N� ����tt�`�5��îM�)������a7D����jo���d����{�8n��
r�i#UfGڋ��r�m�K�vI� 
g��0������m��Z���Ĝn]��ވu=� �ESA�Y>�`9�͏"��	�%��
�`��|4U�O����QV8��߽�iK͍��қ\h�Kͭ�Ŵ�G�gV����c:�q���ڐ�Rb\�3&<����8͚����@�1�L��S�\��y&)���N3�ğ���h`E�,�ʂ�B:[���#ra�g�?�ѣ���O�
��TyQ�\�f,�<mعS��}��`��@H�5Ae;�ܑ
�X��Q�P����
���
�4���S�jr��&�k�E?�* �ԣ)Bb�eӄŲ���Mӟr@�,�)�
�->ǻ9�9��
�r=9и"�
m�R�1��P4�)����u�	'���U�� &\�Sb���/o'�@�ejޡAu�
U�Ֆ��4�Y�1��_�薉�$3fN�Cā1��7w{[�C�
��̭d���6�������
���qj::f��MI�$H��7A�S�"�;����&E�*�⥂��'���P�0�2Q�_�������:�;&�e^G�l�W���LZ��q�ܴ`Ơ����7u
���D�(J_J-��#|Qf�v�F�܀=|��A�8����������`��}Y�17NQ��ŖD=�ys��E8=!��n�GD��
��)��"�	���=~�
2Bl?�>/����
��	XF�²��v��C�> BX<9�:�E=
���q�{��;G!¡�3� ��d�37���>8�

l�M�p���ҙ!�C�ݮ k?
w���_,�&�N��I��=�cw2c�k����9�
�
b��W_\n¹��K�\p�πt�:r�O�֎W���GL|�x@�;� 1���? �"�|4��P@ح�_�>�\@$
+
�I����9��R�z
�$P���&�Yn���8h�AA�
+������ȼ
�t
+-��Tp<=Ƴ���͆ԉ<��=
����l���Nj�g��IF��p���ա�ht��	%��L��N3�0�6�cS��y8�*�i{I����Y���L5�,�:!�����й�H��b�F�b�����
+��) ��s at 28�����3�GdR<�K2��G\m��q��3�1��5qzam b�(@(�1$VX�b��1�Q
+{���D�X; 1�%����_��Ab��fI��v?#�t��x�

��
�
�Ff6����7��j�`�ݻ42�yM��
��1Xū�t���Ũ�T2����(�
�����&(ZS^֏
���j�P�X��3刃�
�5�C�b����<��x4n�z�V`c�T
+��B��a}L�ׯ�^��U�'Wa�$�-:#��޻��q�qp�{

��A����D�8O�����
�XF<�Dž[y�;BRw
cYJ����L&�$=[�, �-���xhr�!.�iOӍ���9���96�|C"�iR��T!b��n�2����û:к*�4S�C7挷�;��:l?�
+[����^�v�$�-�ռ>�
+endstream
+endobj
+1906 0 obj <<
+/Type /Page
+/Contents 1907 0 R
+/Resources 1905 0 R
+/MediaBox [0 0 612 792]
+/Parent 1911 0 R
+>> endobj
+1908 0 obj <<
+/D [1906 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1909 0 obj <<
+/D [1906 0 R /XYZ 86.4 533.958 null]
+>> endobj
+1910 0 obj <<
+/D [1906 0 R /XYZ 86.4 281.768 null]
+>> endobj
+1905 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1917 0 obj <<
+/Length 2302      
+/Filter /FlateDecode
+>>
+stream
+xڭYKw۶��WpI�c���=w�<Oz�4���E�MB>d>츿�3�"$Ƶ-l� 8�0�|3��9o/^\_|�F�N’����L:���Pp�:w~w�x��C/��ߺ�ޮ�"���w?�w~��
+���iZj����&]5��M���������
V�
>��X�NV]�����0��1��ν�W9R$̇V�\]�r��Q�3�\F
�9a��B�]l E��*��*ܴ^���Soߘ�Na#qqN��j�z�� ���Hk1lH�2۲�Ғ�ͧ	�D쏳�j
��}g0�eI��*S]��ԟ5U� ���f8�W~�
��M��U�
�|��0�ޜ"
�/�8~���ZD�^�9gI`4�Y\�ga2�?� �������o?���f�B_Nߤ�1!�0��U��
r�S9�f
42
&�aw�t8 .�q��_�x��Uٻ��OQEpF<'��^����l�8�qa�`��(��`r���E2"/TW�
+6!}�Pcc��\�� �K�Q*�Qo��P��i|�^d}_�٪mk,;�2�Y��ط�M��q=ڒ�9�s�
8��t�����s�[㥿�=�3ɤ��H&�G䕤A~	+K��
�
�"(��`��
�Ǥ؆������V-��1A�}J�P*XV��؊
�*��-P��2�ڻ��ފ:+��|1}:
���J��2�Hu��O�$�I.���G��:����:
�%�h%�X
���N��d���]���w��\ee�^<��&7GL�O�P+��GJw3ԙ�J�m�7=�}ؓ�t�
��DJ�[}�Z˃KdӔ�T�{O�	t
=S|�n7TED�CC�'�QXլ���Х[5��A}9�
�Q�^�jߍ��ެ��A�����M#ඩHQӾ�I��>���g�1��_T��'m����K~D��~
�R
��@[�e�>3�7��f����x`gk_���I6�g�%:����j���>Xلr���ߊ��O?������׵����g��?�+����(�ˋJ�
X~�l��N��ޭ�窱'�%��c�7�j��nJd5��Z�ʳ!٪�_�DQ=9���p&�
I1��Ib�4��/��S�M��}0�ٶ�=�5�I��4G�g��m���[l��H�QҜJU
D��<���v��1ƏT����j��lx��O�O3|���B�C�N�ʢV�I5��DM�p{i��ff�����6
�CD
�H�`�y���M1C3&~]�[����x��V-�Ҥ������Ő�|%���
��4)R�%A�;��+�V��K���	�!�qx�@o�
�r����|T-7��	j�v
�� ��($.�$�W�`[ѣ:�7���䚜	�]<�6�H��^�B8�XK�8��D�3\��,'	a����
X�5�
��������2� �t�2���ŏtR���+�6�b�p���E�Uf7f���]Zn�70���]���&	��i�Րߞb�����K����9U�(ǃ��&�
�qx@�I��B�CB�-���
�����f3L�OEQ�, 
+AG}��f�G��+�� ��9�6��ې�ZT�O��T<:��p��, ��P����������:ω��x7��৹����U�y�j�if�z
+ ǎ�%,�h26q�*HVKJڈFaW�	��I4�ΩQ����rH0MZ�cp�8
�
�X�Bf�RT�Z�X �	���#8D��gۡR��p��F녞�0>�$e��)�H�B�1�uUi�Cs_�I{G�Vgma�[&�K�UG�;
����X� oq�������$r;��HKmEzv,xߠ1�"2Y?�t�p��v�P�Ԯ3o��Q��mћ�����´<�{j
�'Z�8w����I��m����Lf�%Բ��B��R�]�
��n_��B����)�:�X�_A�Ԝl��.]l��{�b@s����}N�k�)���
+�*1<{Hџ���V������v9Oj�~��eC
�-����Bo.ߌ��v� ��0r�"��Q�W�3�pk�CM��*����ˡ
ү E�ޔ����E�0�өã�
�a	�p{p掆s���ŗx�	ۖO�]}�\��a�8?������i?]��la�
+���|
+M�K~?To7��tɓ8P*�@��
E���?�;�l��J���SZ��9�<׍�ʙ��TDz���.ζ�7�$t[����gK��\�jQOy�p:*]~K ,yV�}��1�������%c�Zs�������h�B�K�0+>�C�靯�Y=�M�{���W���am\��4���� 	��
���D�
c��C=5/k�og+�H�V�����H�?�5�5
+endstream
+endobj
+1916 0 obj <<
+/Type /Page
+/Contents 1917 0 R
+/Resources 1915 0 R
+/MediaBox [0 0 612 792]
+/Parent 1911 0 R
+/Annots [ 1912 0 R 1913 0 R 1914 0 R ]
+>> endobj
+1912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.809 658.986 470.532 670.941]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+1913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.402 610.526 256.125 621.374]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [291.424 61.606 298.398 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (Item.56) >>
+>> endobj
+1918 0 obj <<
+/D [1916 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1919 0 obj <<
+/D [1916 0 R /XYZ 86.4 604.956 null]
+>> endobj
+1920 0 obj <<
+/D [1916 0 R /XYZ 86.4 583.587 null]
+>> endobj
+1921 0 obj <<
+/D [1916 0 R /XYZ 86.4 558.343 null]
+>> endobj
+1922 0 obj <<
+/D [1916 0 R /XYZ 86.4 536.974 null]
+>> endobj
+1923 0 obj <<
+/D [1916 0 R /XYZ 86.4 511.73 null]
+>> endobj
+1924 0 obj <<
+/D [1916 0 R /XYZ 86.4 488.424 null]
+>> endobj
+1925 0 obj <<
+/D [1916 0 R /XYZ 86.4 465.117 null]
+>> endobj
+1926 0 obj <<
+/D [1916 0 R /XYZ 86.4 374.93 null]
+>> endobj
+1927 0 obj <<
+/D [1916 0 R /XYZ 86.4 277.911 null]
+>> endobj
+1928 0 obj <<
+/D [1916 0 R /XYZ 86.4 225.713 null]
+>> endobj
+1929 0 obj <<
+/D [1916 0 R /XYZ 86.4 204.344 null]
+>> endobj
+1930 0 obj <<
+/D [1916 0 R /XYZ 86.4 149.932 null]
+>> endobj
+1931 0 obj <<
+/D [1916 0 R /XYZ 86.4 126.902 null]
+>> endobj
+1932 0 obj <<
+/D [1916 0 R /XYZ 86.4 103.595 null]
+>> endobj
+1915 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1935 0 obj <<
+/Length 3658      
+/Filter /FlateDecode
+>>
+stream
+x��[K��6��W�qY� �����[v9�lf�K�G�fX�H���8�~���K��;��^f@l �����Ì���컻g_�z��Ds=�[Ϭ&rfxB�`����׹$�f!���Xg˪\廼*���|S�>_틬�Y�Q9����wo�}���3���d�Rϖ�g��Ng+x�vF�H����I��bv��_�hX��D*~�����%4 ��d��%̚S$`4'T�@±J�>�b��NaF{f�������zS�C60MIb���G
�֐��/� �K܎��"R����(���7�}kFW�ƍ^���Bq5�����7���c��y��$Br7�>��0aۭ
J�;�c��M�y�TT˴8�_H�"Ʈ1���(�
�>L�ٯ>�f�MX�laP���D����Y�m��
V��


`C��\��a��H\��-������Y���-����ٯ�"��w�6X�z���2
m�q
+6`�.
h�p)���88�1yZ�������Z�vQ�g�v�Lw�=��.��
tL
ܹ
����~Ժ�}��1�K`}��X-�`X������KD(J��"	|Zm��p#\�ڍl~�
��p��
�y����a���V����L�A10yE
N�s��(43lB )K���E��3�mx\"�jB_�����*_y5~~�b;�}rN�b�uZQ�z��r����i�
+ӊ�{7�ρ��Ĭ&8͸�Vb~������
�HpG	4$a<��#^��$��*BR�{/tU�U�}^N�d�'���r�Af�-w�T�}V>�
O35�E͐��ZO�
:�ooO��~
��+�SH�zL���>-W����>�n��������y��|7h��/t���(Y���0�þ���u�1o����"��aHYV�yZz.��m]����i�{�
�]���6�	v��&��
��}�?�n�o�{����o�v��a�yx;b9�X��/Y�0���t	J�n��P�}_���"�/t��.�K�n9�ѱ
��#s�gN�?���_�'U�����[�ʌ]c�b��;�b�c->E�b{�ta��tY�������5�Zgi����.TUJ��A�V��&�>E���Mg�0�9���6\�-4s/����2@�q�χ����K

�7Y�ā�q���;���I�@�tzޥ!7

ˡw
����p_�y�L�Cށ�N|��طd�A*@��]C�Q�!֑�3-�LZA���]"�����#)�OB��Ǭ�)q]��U���DI>��;�~�<F�v�]Zh�<�����%�,t�#� �i��`��)���Qf��c0�g��6 I���Hڌ��� l�����9�ϊ�	c~yM~��;ľ��	
6�v��-Xry,wӄuS�:$�%��(����:���G���K-�|�q��$�@۴,~8\�"�N�h@Y$��7�e�L�&�v��C㳄Iݍlb
��P�Q�a=��D]�xu��M������
�q�.������fR�"�Q!�B�r��ōTteO�&��˵:�D�=��ǘI [...]
+�@~*O[��Q��+TvAD�����O�n_�1U��}6�~)��wq���/�>^XB�
�D��$|�^��e�Z�L?w9�
+� ��Jg �N�a�7^� k��;^�P�P;�ݫ_n|��v�~a%|�`��X���Vũt��
��o~�����K=@+��3�P:�'|���˖����!�4��/�����L�E���

�y�j��]��@J�0���0Q���H��W��S�&L���w�NH &�/�C���ƞ��r������&��`�:2=�Zu�*Q�Vo&tQ �k�^��A�.�q�Q6ĒI����L T\EՀ���ړ�l5�?��o.״�^:]�WƳ3��tq2kBz���_��i^d�3�K�N���!�Q,��<��j��<@J\cR�@�Oz��9�+���\v2��^~l�y1U����֎����`{MU�" ���=������v��b���DO}�\9s���\��"~�7���v��I[CL��ǟ�ȧ/��4��"w�*��^0�, ��m�+4�s�b+/���
{� �"�����
��F���px��j^i�
+���<�8�
���.k��QhH�� ��Tx����'�T��{�U�ԥ��s�@�t��7U| 6�γ��d�b�klk ���W����`/�r9��JU�a����)�s���˾��Vr_C��
�L��rf�Y“����
��>�V��ٟ�,[5#ҧ0� ���s'��wҕ�
+
 ޓІ��HQ�{�w�d_�+�P:�X�����
ܬ��ژg�?�(6�E�m�t��b!�%&�MC�0�f��wǦGX�%�-#f\'�=�BH�
)�޷8�*v�W-�
)S�\V�*/��7Vx��|�������_b�ɀKGm��v�蠦���M�.�,3'P
�
�8y<��F�w-�	��=����r������
/0
���������
����ĩ�L`驊�%���O�YXA��o�
��$��
��ʮw>�U ������8A���
(
�v �C�yY4�ޑ�@&�%�nW��NGܫ:�>@�v������`��v������;;2��;m_u�d����yrn��}�(7 *.>d�"A�6���C.�ao����0���>���ѫo���O���װm
+
����y�Ž�B����A�N��#������A��iD�PΛt�9!C�|ܫ{z��UX�B�0t����r��=)��פ��B�'�]�e���렠
+ h;���
5�'�Cꬽ	` ���a�.q��;.u�H��
��G<|�&��5�I`���Bg>��0��wا�{�:
Щ�h�j�2�cf��0N��T�y`o�<³�-�|)�زj)ցf
UV����!�ǻy&.)�`��d�(!�fں��	Ya��
+�R�d{,
��X�B��BL]�<w*�8j� axZ��zztG��˵w�;i:E,�{l
+�����;_�<r:�$��^%�Ze?e�uHM!K��t$]g��"���� ��K�T�ĨQ�v�)�ua�5�{oZ�c�c@
���x_���d
�����L[�=�Dٶ��磆
�M����zf�R�E��2^�����d at d_� ��X[���^=� sy�;��y�7�u�뀅���~ֶ�o�׽습�
���=@r����qT|�:��
3\co����*Ƅ�X��]Lx���h0Q�BR�]@�^t�|#�$����V��������i�����S�8脴vE��
�P�������9
���A������
+��Q
N}��y�h��0hb<�%�%�d�d���ʗO
��&��h3m��R�zn�v���'a�f�T�����>����:��%x�[O
�J�'�[�Z���Bˍ�WU`�W>m�cS�YL�A�GDz�a`Dx���Y�o�`qj2~$�(9�c^4ϟ?��v�wª�
C{X��

7������
��e�hػ
+�*���h'~��N^W���q��<�Xc��[
��n����m����>�-�r�����%��P�?��
8�S�;*pr!̓*;	 5���~�s�S�ޏc��R�
�N:
+endstream
+endobj
+1934 0 obj <<
+/Type /Page
+/Contents 1935 0 R
+/Resources 1933 0 R
+/MediaBox [0 0 612 792]
+/Parent 1911 0 R
+>> endobj
+1936 0 obj <<
+/D [1934 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1937 0 obj <<
+/D [1934 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1938 0 obj <<
+/D [1934 0 R /XYZ 86.4 79.512 null]
+>> endobj
+1933 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1942 0 obj <<
+/Length 3216      
+/Filter /FlateDecode
+>>
+stream
+x��[K��6�ϯ�iK�X
� ��C�8)�
�7c{I
3�2%ʤ8��� ��(M�x�����@<�nt�Cf�32�����_~��,
+"�����,T��i����d��<"�
����7e���\�P̟\���KN�����>��p_��}�]�Y�M��寯�_<}}���¨dF�Qd
+5[�.~�������<
+gl��L�(`�-�]]����Y������UD����w�\香E�������_��+��W�e����E�W�H2	��.������^f��y�N���,h�a|߼0���q��fJ7�F���.�T������u�)�n���6��2_')N�A�
GR�?=(���ʬ/Y8ߖ�����`y�'fצT�@9SZ�FSf���1�5cq�%��17�ʬzS�c&R���"Ɉ!y�f�y�\.$��G�sXp��:�m`+��<u�tx.��|Ҭ�=���]26 ˑQu�UT����'��u�ۑ�8�` Do�
�@�|���*y?���
�^�c$@����v�?������fq
��i��_��c����k�ؿ^��=
�fv�ƒ$��Pn
+�^���|�z/wm��
��l!d���h�)��u�
��fS����t�ƚFܡ��;���
;���pY�
�� �.�w��[�����
�-��
_�� �'��q��Y!�L�&�tN�
g�Os$ބxw�/0X���ǒ��.
�j��FT�\�+X�MT�?�7c��l��i$�`��?{
vk��3����Á��6D욪
.JJ�L�Ebn�*���rt,�YEk�AD�	�&v~��vD
+X��<_��&��֙"�é�$u�)罹��]O2ҀT�1F`��ȫu�#��a��?ܥ�q�y��e�]Po�v���.R�Y���5$d�k���M\ZNv���X�
0���Ơ��X"
+�_��� w��w2�!,��O�>��l��/��
(�*3�i\�aiž7���a at x3ݛ,�
��Xo�o.���>��j,P C��zG�2,��.�HKgH�����������c'kz��ً�
+xU�X��I4,
J��J�<��͓'O�������q�5tiOx)b��b��{T�j�4eySe��1X���
rU(HB�΂*t���ǧ?��09��
�2��hЗo^���#�`�yא�f�(#tx�2����#����+���v�"i����oF��C���5N;%GĚ�}��0΂�8�ag���<;�!��	��
gH%?àP��bi�����y蛑2��`�i�&��j(X0k,��k{k�yV�1:�Ϻ5�
����׹O��v۪��$�.��P>�ƞ
+���Е�#٫i#�>jc����1ڋ�`#F;ya<+h�ک
�
+�=7��O��>�iihY�+��!]y�oM9�'\az���(�щ����'��\���k�GFm _�0�ҍ���X?`ܖ�ԥ�T7���|��֕-ڕ-jnE=X���4&)���8�����w=Rp.f"���T#	�2��v��ˑ�A�wX!#�h�$5�ؑw��:�{���̿�t��d��Quޡ�H��zc����� RL�6��D"�I{v
+�`*��C!��:
U3sOp��2/�K`��ܥFԥ�����)��0�Y-V at xNa�X��b#a�7;9e
���n�m?��8
Ƶ���i_g��
t�{je�	R���U�PTU���6��r^Re�=���P�N�vJ
ފ�
$� �	��}@k,)���,
�,�Bb�f���xw���c\�� ��=xC$�Ў��������,F&�y_��߾v�X`�� s�
+� �0�ɡ��Y3��� �y�&��̬�8�΃�>����y�0Z��yG���`�������	{}i���?�
����Q��p�Zw!s����L8�Q��s:������
nM�����
\�*ޕv=�
�S�!����+���CnECq�C�7:��
�>���������e�Ԣ�64�uJLai��c <樀���G�BX�pm��M�V
f 
3�a�\T�֮�gO�z�d2
��=���i#ap�D��k��_�F��v–E�a�SD@>��L@�4:
+��+�'+��j��a���!1`W���;�ޒw@���
um������&oU޺�/�vzwCq
���
�Vi>v(�B&9���a�Z��
����s��齽e���,:ۑ
v�
�Lk�g��{�>X
��?Co�=7�qu�|;S�kZ�z 0�(G�أ��y��}
?��`���O���Qh�
��D[���	�j��Ʈ��
�"hL��¢iS���=I[
�k�*]�cHx�/���J �� ��@	�
�ai��}P_F��w�lFg!���Ÿˈj���~v+��xe�����K�ŶU-{�Ж�u1��g�u
F�
��j��N�*=�����e ���e@ԣ�8H��Q��
��>�#���̲���(S��N �a�|hy�٘`���=k
4^5Az���|I�>�U�?�
8�K����22xжB���u�7t�l�Y�Y�����al�r��$�*������3�’�zš&�(�]��Pc񌨰�蝢����1	a2*�2�����?�e'��o̞u�����- ���q�O,�)���;�P�7�nLQ�haG��;S�w�Ǵܺ�����8qɰ���./�;���Ƿh�-l+�f�èe}O-���;+�8��!i+^��G�i�l���kW8��yL
�LDO��
+[�d
�>��92�Q��e���f��>vg׃D�t@��1�!���!hL��T��.vv�ǔ|�U� M�E��r>h���~��58��s:|H
+���B����j��{����jG/�]���oG3r�M�mT0/F�(���sĉ���ު���/^�t�}�j��R3F �}���ط�,FO�u˞�LG󤲡�M
+�F�x[����zה���
���K�~q��y\�P��}��t�V,��̤�f��$:�M�<���'%�j�?��<3�,�ȁ�	U�82��"ủ<�k��������trt'>M��^I�,H�H��_���mT�6��vS�gU��*N�[v�v���d"f���Z�fo�C:
��$	4��П�F�B��s�[�/�˫���:8��tl
s���!�+�퐟���ɫ�/
������'��_�6Q
+endstream
+endobj
+1941 0 obj <<
+/Type /Page
+/Contents 1942 0 R
+/Resources 1940 0 R
+/MediaBox [0 0 612 792]
+/Parent 1911 0 R
+>> endobj
+1943 0 obj <<
+/D [1941 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1944 0 obj <<
+/D [1941 0 R /XYZ 86.4 452.371 null]
+>> endobj
+1945 0 obj <<
+/D [1941 0 R /XYZ 86.4 194.094 null]
+>> endobj
+1940 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1948 0 obj <<
+/Length 780       
+/Filter /FlateDecode
+>>
+stream
+xڭUMs�0��+t�3A����M:�8
�qzIs� �L	���N~}W����b�����"h���]ͽ�&��Z�͗(��#j,E�=�
G��E̟U&)�4k��0��q���g���ԓ Ԕp_����λ�{�=
+0�>���(y�	J��
"����~/�3�C8����摎&9�ˣ��+
i��S%
�O?
f�Ӈs4�鼙�a��h 2
E�=��_ߟ������4�J�cԯ��i���tys#�&
>��󵱾�7��!�\E�O�[,�M�9
���os:��븶�ꗍ;/`4"ߘ��d��y�fRl1P���X���[��D�q�B����{��
I-&��)+����������29�
�Sh���DH?η��/ �[8H�IY7uǭ�˶�$��:�k֬G4�
+��C"kI{?`�՛�S���G�X
��˷�
��C�"ϊ�4�M=
ڇCo����f�2N����z)F���k�O��K�y�@���y�T�L��yB�/n��Ąȁۦ.�a�&{�q��fZj�8�@�H{0�ܒ��g��r�(�2Ŏ�T,�yt�鄃�J
\�l��xM����PQ��p
+��H�a����j~]�jl �����"d�lV;��p
ʍE��Q�+.��>	�=
�)L�0t��l�
f\U��(=Q���R9;������	�����2n���&�ܦƤ[��H�[�?� ��1?$$�6 �閻�K�Uw�|?]�
�C8����N # R|d�p]�� b
+endstream
+endobj
+1947 0 obj <<
+/Type /Page
+/Contents 1948 0 R
+/Resources 1946 0 R
+/MediaBox [0 0 612 792]
+/Parent 1911 0 R
+/Annots [ 1939 0 R ]
+>> endobj
+1939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.715 636.268 395.186 648.223]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+1949 0 obj <<
+/D [1947 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1946 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1952 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+1951 0 obj <<
+/Type /Page
+/Contents 1952 0 R
+/Resources 1950 0 R
+/MediaBox [0 0 612 792]
+/Parent 1911 0 R
+>> endobj
+1953 0 obj <<
+/D [1951 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1950 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+1966 0 obj <<
+/Length 2547      
+/Filter /FlateDecode
+>>
+stream
+xڭYKs�6��W�TՈK�rr&3��%��wrHr���]�`H�
��~��dyj���"�h ��F��p��_%��o�~{w����\�I��i��ۭ�<6�\��]��5z�����.�([�~��a�,�HVS�e^����g���ZE?~���w^�y��L�G
��W�eRX��e>�nt�{p2=�ۮn�F7�媊�<�E�L�)Ͼ��F�Y�]�EgX�h�덊�7v���z����io�q
��G~�[�|��2e�������4�<,�\,]�	�H8'/2�C�d�ѷ��������.Hu��u��.ؑ�D��(�a^��Pq�e�w-��כ�����MJ'��q�ơv
������A�m]ߢ`HzD���������i��s��e��J��U8�*"#H����[9��4f
�:t�Ǻ���T�Fg�#�Ut2���~�p��.*٦}=1��?|�'7���C�&�giݎ���6���Ç� �&�{�|����,ςS7��-Q����0�x�{�� [...]
+Ͳ"�BV&�k$>�eJ��n�x�\+ܳ
o�I�#��
��������p�L�^�W
ą�����Kh���}
�<]\��ß�}����Զn�1L ����\���X��E�]5�oI��
u
k?AO�.�Y{�C�KAwu�8�e���;�{�E���+qe�A�����=��٣H�:�FFя����qt|'{�Γ�΃t�*�J�L-����Mc�d�s�Pp*X�w5U�͡���ؾ
��@cଃ?��Dq
i�޵~��^��Q
��GXK�%����,LZ���s�y������{
���3]�q�����eK�QEhChwN.�A
4�5

)t��_P�
�I�tb�<~A���J!��;�/nڃ��
����=#��WCC�QN��wƈ	�y��7H�N
�̓	|�í�y��}=����r�,G;.�Z�W�Sk̍����H��$0^�e���e	h 
���u@_l��V
=:��������(D�v`�c["p6�T���pܒ3?�?
�+If�#�q����%.�F^]V�6�����ߓUCp�XW��+
+��Ѯ>����Μ�pF���2�7$)�y;���8-p������r<���S�$�L�I^^��fՐL�av
-f�/d��z�s�1\ ��a��
�����dq����
+٨�������
+�di��$sT".<8�k�j�
+� r҅1Λ
<����J�y$���d!�$"Rb��L�	�$w�6�F�hte�,`s	�$
+ ����DB
J@���@�l��-h��nGϤ�A�h�:b �'ۊ��w���D��q�_�4�ۋ W�C�2qe̹�~Y�:��&���u�/ݴ��*
������Ã��opn��s6%�r�9e��?4������� �ԇ!����m=�G���g0��E`\��
+��O�0 �2�(F^�%3shJ�N03���ΜGZ"�!�2�	G<a at adK}Z��"
m�m�O5|�+���m ��)8� O�Uo͹o����.e.�f<���bm����R�8�R8�l
�Bas��(X
j�`q�P+B,��
�6r[�"��
���)�"�BK�[�ӑ���-X��_؁��?�}��ڀE&��<�Na� .$P�X�!�:p=@6����u�D����۹�P׫�
�1��1�)�o
��;N"*�\��;������"�
+5^�P�� VlB��e
+{�
+yJ���<�8�{��̃�n�GV׵�H�W>$G>�yn$ӤU4������@eg@�
67����
��qy\�E���K�;pD��/F�z
+�vKn���k����v+�]w��,�_�_������8�pl/l֌�u�83Źf�bvN5�� �D`�zᝢ��^�0�{�ۉ
x!x�w�
`�lR�L>�|#pxϱ��e(���%ю�T�}#�kDFdd��(Z}E���2���]�G���djEg[�8c;ɢﰫ� r(ʲP�O���� +�t�m�v�6й�H)����٫��d�䃛��%2�l�0nx�U
�0h{�b�������\
�Xc���	oL�ނ2�_6	=P��<���gkJ�)Qi�
�؁(�!˴H�W.6�F�d�k�ũLt�E^���z'��9�{�q���#.���I
+4�,R��4Aw	����
D�<�S���m{lxH
2�����A��U������(��}?�@���0
T�S@��gF4��	Y뗞TU]f^7*ϯ
'�F���D���ڶ��
�$/�?�}�%��{{�
�?�Dݺ�������>���-�ő���N�c;9d�L{��dB�:
|p���&7����
�
d�s��{���ȉ.����M_����ҝ�B@��
�Qz�CM��O�*6ү/�cc�����+�_Ԧy5	߂'Lײ�.b}z�D�g+�2N�yEw��o�	_s����R� {���b����~M�LA.��]�4r_����j���
�'�t���>�[=i�
jB �D�ww7�rG]e
+endstream
+endobj
+1965 0 obj <<
+/Type /Page
+/Contents 1966 0 R
+/Resources 1964 0 R
+/MediaBox [0 0 612 792]
+/Parent 1974 0 R
+/Annots [ 1954 0 R 1955 0 R 1956 0 R 1957 0 R 1958 0 R 1959 0 R 1960 0 R 1961 0 R 1962 0 R 1963 0 R ]
+>> endobj
+1954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 409.564 108.982 421.52]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+1955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [497.483 409.564 519.955 421.52]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+1956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.855 350.287 388.905 361.135]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+1957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.765 314.366 262.739 325.214]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+1958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.951 235.291 454.673 246.139]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.302 223.336 511.276 234.184]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+1960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.711 211.38 358.434 222.229]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 198.872 101.233 210.827]
+/Subtype /Link
+/A << /S /GoTo /D (Item.73) >>
+>> endobj
+1962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.236 198.872 418.959 210.827]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.886 174.906 208.608 186.861]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1967 0 obj <<
+/D [1965 0 R /XYZ 86.4 726.045 null]
+>> endobj
+306 0 obj <<
+/D [1965 0 R /XYZ 86.4 701.138 null]
+>> endobj
+310 0 obj <<
+/D [1965 0 R /XYZ 86.4 300.11 null]
+>> endobj
+1968 0 obj <<
+/D [1965 0 R /XYZ 86.4 172.747 null]
+>> endobj
+1969 0 obj <<
+/D [1965 0 R /XYZ 86.4 152.268 null]
+>> endobj
+1970 0 obj <<
+/D [1965 0 R /XYZ 86.4 131.235 null]
+>> endobj
+1971 0 obj <<
+/D [1965 0 R /XYZ 86.4 112.14 null]
+>> endobj
+1972 0 obj <<
+/D [1965 0 R /XYZ 86.4 89.17 null]
+>> endobj
+1973 0 obj <<
+/D [1965 0 R /XYZ 86.4 68.138 null]
+>> endobj
+1964 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R /F36 728 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1978 0 obj <<
+/Length 3414      
+/Filter /FlateDecode
+>>
+stream
+x��Z[�۶~�_�G)�Bp# �M�q�8u

�����W��2�H���U}g �
+�vm����H
f��f@:����/W�����P���������("g��D	6�^�>�S�X2õ���)ʻ�R9�`��
�����;�%�U����W����^���eS��C�������6���������_�~���t�@4:c�(	1R�V۫�����:�D�f����ΤH	��f���oW�/���hF+L��\�Vn�����wI2��������j�qG�{v�wy��V�ڢ�����n�6�$�J���-9�&��o&�
�~�f+��;�6E�g~�j�r�{[�����M�d��|{��#��X횰��3�5����K��lS�;wr}�g�:k�u�����&�>s��[׫�����y��|g�%/�yiw�K���%�]�O�G�d�En��Z��g�Mgr<�")̶�ɉ7t�@O�/A���N�7�킛��b	���
�~T�
U�{�&��?�:_C��<0֒	�(=�����4��,�m\��X�{��:06�Jg}�7����06�J����Nd"I8lȨ [...]
	��
+�PY�&��:�W�F&X
+)	%,!��I�=2�D�����1bK*�}��{g�U�~�,Z�`�����aC��<����,�*�����!>�sl�.`g����,���2�n�R��Z�s�U-�l�"
�x���F�	v
��{�̻�u)x<��(��f�˳
]C
�)��GKB��=2N8;g���
��Q�{?3���6���u�f�մ�~eQ-b<��q
�l��(G̏IM(���b�>G�a���ϒ�0v'0�v(e���J|�l�Ŕ�nݨN)��"����+��6����"F�/Ǘœ��o�,�80t~������ �����B!�!�k�T��2aާ�aa[��hM.&�x�{p�/WS������.s
�4��9��#�ӳ��D��^q�,΋p at K���a�����$ !�(�&�P �[�A�ɨ՛�[\y�
Vm��
8�I�R�Q��G��&F� �$u�W��d -|r�G��:Ђ��q�cВlZB�%P~g�s�ʲ��p@
]0� ]n�MD��Q4�R��}���Za� [...]
�n��"8d,g��%�:QJ�5D���&
��g��
��)�K�G����6����D�|;f߈_���K��xI�x/���y��$��(�_
+֡24
��;꫁��\�q�3wد}�r�I�?
����F�\J\
+&>I�!M��J�7���\���OH0���d��cܬ��;n�p��ڪn
A�/�r��,�� �	�EV6�\3o�b��T���ʕ�5̃>��W|��Ǜ���
.����c\�M�8b��_0��?i �&5+W]eMk�ML�+,?�ٹ���}EB���ET�@�H�e� ɰ�U�&���$�
+�
+ޭ��3��z�^ψ����]�:�)x�36�+
��}�����A�u�_~�W�F���
wQ�C� �ߴ~&�p�X3��V�oe�վvƅB���=����Ӓ�6�+�v�!�F%� ب�.��ݧ�hk�ԏ,�k�;7Y}��b�0�0�eϸ 1��'2�����
��^xU��C�i}��r���k+���
��v�������j���_j%��9��"
+Z
 }�I
����6����L1�w^��F ��*"��T�E"O�߈��?F��T���
+'ZM��'��@���#���
؇
���Rz;�M�gB��L�n�y/|RX`���\�E��
'���< �!3�ި~���6W�Rm���QX���P�L��S6%��
+~ɦ�e���xJ�NQ�~Q?D�K��zr�)ඌ�5�h�Hx:��
������\�[,r���S
ܖ� 6
���i=ev�F �[fJ��0�A��k���8v�����HJ�"���ͳh�	���Sl��ʱ��g�)O)$&�������ʂ��)����W��V	İqM\nDx
+yA*
}�A
Ȗ����� g
+�|����3�����/�Ww��7)��l�Y���q]8Vz�Xgp�x�V88z�CR���g
+���C
I%Itj������
d��u7����h�(��.o�m���+���9���|�x��������J�.qç��~�;:�Ѩ�q�\H_�*�p���ͼ|A�~�S�H�d�CT�P��g/���
�� �M¯9���迦����7
+�������5��IC�Ĩ��~�1�K�Eg��
M�,���j�EC����~("�[İtd�V���B�w��������v�Y�&��Rə��!	VF�m��GV"�-�Lz������P$��R�4�4(���%Tw)��鮔�$dz�Ӂl@��i��uy�w����h�aH[b �]V��j��s��8
b[�`�%RIS�}��r;��%9w�#�yG+�)o�
�_u��j���������!�qYZ,�j�tz!����WX!��j���/�
�k�{�|b��3{�2xSp��&vVY �
ߧ��Ia�� ����������E� �
"��B	j�"p���P�����
�S�� ~�.��P���~��恄|-#_`섒���C�
�0�����0
�5���P����
lG6O2Ӟ�
�%�>�
�;_e�(�3V�ڊ�Pb �C���'�CE#c�?!��Z~��!� 
x�Ʋ���O�G!��_��Z�8!�
��˻>F"D���}^N���ˤ�v$^&���jRK΢&Z{
+jz%l��c��W�?K����1�}�}r?�f��G��UAD���өa*��� kK/�+��^
�NžF���2��
+endstream
+endobj
+1977 0 obj <<
+/Type /Page
+/Contents 1978 0 R
+/Resources 1976 0 R
+/MediaBox [0 0 612 792]
+/Parent 1974 0 R
+>> endobj
+1979 0 obj <<
+/D [1977 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1980 0 obj <<
+/D [1977 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1981 0 obj <<
+/D [1977 0 R /XYZ 86.4 685.635 null]
+>> endobj
+1982 0 obj <<
+/D [1977 0 R /XYZ 86.4 667.032 null]
+>> endobj
+1983 0 obj <<
+/D [1977 0 R /XYZ 86.4 644.554 null]
+>> endobj
+1975 0 obj <<
+/D [1977 0 R /XYZ 86.4 624.014 null]
+>> endobj
+1984 0 obj <<
+/D [1977 0 R /XYZ 86.4 198.648 null]
+>> endobj
+1976 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F14 1030 0 R /F48 966 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R /F7 1115 0 R /F9 1117 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1992 0 obj <<
+/Length 2631      
+/Filter /FlateDecode
+>>
+stream
+xڽZ�w�6����m��K� v�
�I��
�vkח�Z�l�ʢ����~�)��;N��g��7��@���,�}�����߿��,�Qfv��Y#�,Q�0��]�f��P�Ed���:��l��/d��lr
��}Sl���eE�

�
+�jſ���.��hh����m�9�>�:R6H��oW?\|�����L�*��j3[�_��[8[�f��R;{t��g:J���fvy��o1�oՎwjR)dbx�2n����id"dl��n���
��众�
F��o��(�5	��҈4JX�{2�����T(�Lۅכ�v��U
�����.W�%����'k�zK�~��9]AJXR�S��$I���r�P1�$6lq��:�@�B>�಼��o!� [�-:[(���I�4�y=؈V�0��|Ŗ�5y4ш����:��v�rp�*8�vˇ�R�=qJQ"���X�8�|Ţi�������ѻ�_�8$�y�5�}�
Ju��H.P�z_����0��0	Wr a
bQ9��lő�F���
��_ �˼9uk٢�)7y�m��̛�"��	"//ω�����PWB��T��_ ���sBS|u�rؘ�
�|%,�s`��X�f������H��V��3�Â<�-H�5
����б��`/ �xN��*�g�]��e�ۜ��Uy�g��Eŏ�|��7
���bPӾ��m[&�Ko�x�[��2/`Y2�U���)Qz�}X����1`~��7�
��r=�taQ�
H�i��s���%�s8^O|h���]䵘/��ϗ�xN�������ǀ��1��a�m��t��H���O_��PA�,և6r#e�k(�vEf��yQs
/u�f���|��L<�ݳtIܞ`�#�����Wkl_@�h*�
C� ��e%�Fޭ���(�lI��z������߫��W[~vn=��6N|r��2�NG�o!�HvP�l��{�_�9�\V�m���>_���i
��K��
��4\���GI<�a��S�V���o������L@��
�
��V��9fQ}�$i�xW�=@0� '9�<�M�Ƞ�<��_rF�`�꓿r�
�������]�T�~��L�,~Bh����p at 5d�:�'?�i��ZE�m�
�
+'���I�ZI�w�I��l���Rn���4�ˑB�AE|�c�ԡ�QC���y��Q"1�x�DŽdJ�D�l7M�s�b�&zJڇ�'��X�
+=yؽ��Ԑ瀊�(�����&�
��)a��Iؤ�">�o�7

r��@Ⱦ�'w�W�#�v�s6���dtϏ%/Ps�	q������;Gn�Ҹ�h����Ļ_��miz[�B�-;��+�0��(�5�R�E�7�Y�<]�M_�!�����=�-�5R��}�9��F��U�*ȔLr��I.�
�����w����O�:�"!�
�L�s�
_��:;��3j_ �5���?�r���Y�]Ue�S���~
�#lsT�͛7�8��ܤ��&���D@&�I� f��¯
�̦g����#`n�P���`Y�o��L|P��u:�Ms�M�x
��@���.,M.
U
��Q�Z�D�:�4��
+!�˘S��}ԏ�R��
Sxk�/�a_����`�׭���M�9v{苒�f��l���#i�.[z���A���y�;5����筋���x��#/����"�BQh_�e6�æN�
�Y�v��$b��r�!��p����lY�9
��*k2���U>�t��$��7
�C-}��q����
��_��~N1����@�t�ؕ�T�.�c����jGڨ���Hh��.������2$q�O�7�~x��"0p�1�5���;N��AN��;" �&�i��+@�[V�/���v��Q��3.�ؚY�n��H)�]MN�d�UqT���S�we����D�~$���b;��Z�q��<3�>ѧ}�,w���U��	������Lԗ<���.
���:%m�~Ǐt5�
�r�0�z̍?�9���u��Ī��ۉ��Q-,PN�J����p
�C�lQWl1�m�?[�pH�_� �/{�w�ND9���?���}Z�}���

�� ���
p����W��Woڮޜ��<�v��h��*͗:�a���(�
jXFΨC"t�V��9������X�w9 X� CL�5�:S ց���;��/��P!�.V���
�\�s�y��@u��]S�[Ӫ�:u1!�
�!
��w߄)o�]��;����0i���U�k �}�9�'
��j3tC�Ws}������јP�K��n�"�C�c����\
�8��$��vY�@@�$^R���㌈�̘'
���&����4�GY�	E�|��cP�����v��Ȍ�NzAy�L"A<:��[f�m���7��-�yEK�Ƽ*����v��]=���
Z_�$�]��TR�B)B.�d[�~p!~���{A>g$��Vi
�ɋt+B�<�
+wә��^�B"��Ӧ)�7��o���ey�+��Ԏ���
+
	�#��5��]|�������������>D	O�k&�Q����A]ltD�hb��3�R�0�
I��Xؤ��CY��W��kը

C�j�;�!_Og�I�e���
L�n�����T���m̡����8H
+��վw���B��J���#���$
+endstream
+endobj
+1991 0 obj <<
+/Type /Page
+/Contents 1992 0 R
+/Resources 1990 0 R
+/MediaBox [0 0 612 792]
+/Parent 1974 0 R
+/Annots [ 1985 0 R 1986 0 R 1987 0 R 1988 0 R 1989 0 R ]
+>> endobj
+1985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.266 658.797 461.737 670.752]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+1986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [490.963 620.743 513.435 632.698]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.2) >>
+>> endobj
+1987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.477 570.733 412.948 582.688]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.5) >>
+>> endobj
+1988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.976 454.577 236.448 466.532]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.4) >>
+>> endobj
+1989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.181 219.351 444.904 230.199]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.5) >>
+>> endobj
+1993 0 obj <<
+/D [1991 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1994 0 obj <<
+/D [1991 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1995 0 obj <<
+/D [1991 0 R /XYZ 86.4 655.612 null]
+>> endobj
+1996 0 obj <<
+/D [1991 0 R /XYZ 86.4 617.557 null]
+>> endobj
+1997 0 obj <<
+/D [1991 0 R /XYZ 86.4 567.548 null]
+>> endobj
+1998 0 obj <<
+/D [1991 0 R /XYZ 86.4 546.983 null]
+>> endobj
+1999 0 obj <<
+/D [1991 0 R /XYZ 86.4 527.803 null]
+>> endobj
+2000 0 obj <<
+/D [1991 0 R /XYZ 86.4 451.392 null]
+>> endobj
+2001 0 obj <<
+/D [1991 0 R /XYZ 86.4 430.828 null]
+>> endobj
+2002 0 obj <<
+/D [1991 0 R /XYZ 86.4 334.713 null]
+>> endobj
+2003 0 obj <<
+/D [1991 0 R /XYZ 86.4 315.809 null]
+>> endobj
+2004 0 obj <<
+/D [1991 0 R /XYZ 86.4 292.754 null]
+>> endobj
+314 0 obj <<
+/D [1991 0 R /XYZ 86.4 260.382 null]
+>> endobj
+318 0 obj <<
+/D [1991 0 R /XYZ 86.4 194.028 null]
+>> endobj
+2005 0 obj <<
+/D [1991 0 R /XYZ 86.4 123.136 null]
+>> endobj
+1990 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2011 0 obj <<
+/Length 3341      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6~���#���_��C�q:�n;هn��9�H������= )���V'�;y�@p��9���fFg?����䛗B�
q����jf5�3�
тͮ����O��rc�7M^ޜ΅���)Kޞ
+�����
+�D����xy�tR����'i�
\ee�������a��2->69̟4��_�xr~}������u[Q�J=[�O~��Ζ���%��ٽ��I��V1�:���F��.���Ȥ!0�L;F�с�˰��o^�~�(Q���REq�hVA�Qݘ�lÐ�����;�0�I{�aC&�)��f�ߝ��oV��*�6�DdV���̳&|�VaD�.<,��ݦ͖dD�`�sC	Sz6g�p�����cG�?
:�JoBצɖ�WUlj"[��qϞ�c�x
�ΪشyU��묽�<��+s)er�6�ՇS����t�K�-K
�t��9sDid
#NE֝���dN
�Tδք3uH�a��ʼ���q�$�SQ����7���_����j��8��� +ݧ&�?�0	���
�A�ʎH�~����_��̕�m�ۑb29��T��j� R�N��9�ξ�MR�Ly���jF�8�&��i1ӊ�>EҚ��0?���
'i�z1�wwu�.Н�>�D�
+ȓIӦm(M�eh욏E���`0���wE�]$j;'B
�>��l4�S�`��^�1m�o�Qh4�:��|��
*A��ՔN*pH�NZ��� `�~�NZ���T����q���>��$��ng�ȭ���y��Sߌ�/�r
��)HW��X�e������>6(!����֏��
+��6o»t]mJ�m��NS��.x�"�:Dr�L�q�
�E��q�t������h�fuڹU�t���Ѓ;x���<сz*E�r��A��9�O�o��E���IZ �i�d��88�t���
�9��9˭9G����݅�Ge
�� ��4F��U�i }v(�;����M���£M�t���7v��Z`;cǮ<�\���H�iEh�y�,{��Z�<
��m�)��BwEM��ZM�
Cc�
xF4%)n3�&�;�G$c�mڄa��c���
ڹ_�\nל�_�=�
5`���㜦nwi�E<
:,*o����Y]Wъڬi�;�4�0F���1!��[D��o���"��A=F��7M���A��� �I�W�2�g��̓��Lj��riQ�ƾ�A'd4Р.��[�o��f�[���[/{���e���v�;C�]�C���R�N������Y��E���:��4�g迢 �[�7�m�
�\�-E�@��u8K��&�pT��W�:t9��-�����xrwj��
+b\X�-8��*���d�|��+�A�+��M��;�x�%�[?�
�ҺNcB���$ء����FG�.�=?�
��7a��@wJ��NP����0h:�|^r��E�pQ�#$���m�����  ��"�z������|�_
o�(M�;K��b�0�!��_@���2.	�|W{��@X�$20͟Ja��":�.y�()��=gWU�
6r����!2DY1��na�
z.�Z-�b:L�Zp?���t�ޜ��_=:��^�
s�P��9��*�2��rQ��7����8��f�Ț��a��,xŇ~� ;aQ
d
��0������OkK�aGYr%I�`��7�^
@c���ד1���g�
�J<��ل�{�
����U�1M�!�����w��P���

pm�������6��C~���C^m�^ۼ���F�I
��e�]<�3Dp���'��i#Ğa"sPӤ&�(z�Ǩٓ�l�����ױ�]�.(��RE�{1m�d Ӈ�u֐
 ��Pt�|L0 @}���+2�vp������.�E��i�
a�N&�E/ys�x�tI	 :i��:
U��2�oJ΁ߒʛGy�$�҆��ݤŨX;�!�Pd
/�6kưChc�_B���ׄ�>���&sٻ��'� �,�:�;B)(B��|��\��3݄3�#Z��e�J7E
z�Yzp�|
GduV.��7@�00���|p�8�1@�u��h�զ�zH��H���A���%��P0�����))"�y��ㇴh�� �l‚{{��q�&��ƒ/���
"�EVGԬ�cuy�4�������V�Ur��"*�i��i&�/� ;��4�Ռ���&
S�	{��\�Ƚ,X/
Z� ����#N��U��D`�D�:�
+����u:���J�N��o0ϩ�8&
��-���+����L�ZY�B�	I@�k`��J�����nx���b�g/*`ů����j�3��'�Bޓ��n����E�*[T%��K7|yl�x�;U��u��S*�A�RLZބ��]��3�l
����
%��y��Ѓx���Xҹ^�(x!���CSPyT�T��oMwD�O�(h��؟X}��@Y�

u��a���-
��"
~B�C�U�����g����L�e�_\�'�6� ⳰��&6�
������+�����3�0���Y����_F������1�M�h�}A��c���H 8�d�e�����_��1
;C�3��qP�G(
�V����	W���RxD��
:T�U�"m�g�r����Ŧ�c��l�?������ԑȽ ���)h�S�?N�k�]�^!(�xm��TB?T����$xHa�~�i��{3d��n �m������Xx��
��=�fX��4�]ʴg&�S,?z�- 2������4�2����z��/��ù�<�
�N��}�����#��r)�
+d�~����@���<��ϳh�ו,�E≫!���F���i2
�]
y_�Cl���/}_	ǸǸ��Sю����&�+1Lw���p*
+����J;�.��}%���+10Gf�1�+����_�+���W�_���m���l�B�
�!K
�2�
0�d#³�B��G�
��=dĔ�KH�VQ���6����<#
�5�?�Z�!�gb ��P5ѝ�x�6e�;qX��
t���Ǘ�z'��d؎ޢ*'/�ݥ5�i0�ZI�	|�Q�R��
�MXYM�����)��A8xVx�(6Ko>Н�S����Nѱ��X_We\
{�nW��'�a�Eb���K��~�Cj"��B�d
�cf
��I�CbB�
�D��LD��x1��DK3�=�-J�[����7�V��[ nwO�]@W��
+@�x��*�v�t�"GC�����;>��߇��}�*�3�0���|���ˈx�xo��,�M|�6c<ƒv<ƒ�;�'��#3��E	��g%��Ybw��]P6u��C�
�_r�v������a\U
���M�
+endstream
+endobj
+2010 0 obj <<
+/Type /Page
+/Contents 2011 0 R
+/Resources 2009 0 R
+/MediaBox [0 0 612 792]
+/Parent 1974 0 R
+/Annots [ 2006 0 R 2007 0 R ]
+>> endobj
+2006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.45 537.285 429.172 548.133]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+2007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 49.651 519.955 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+2012 0 obj <<
+/D [2010 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2013 0 obj <<
+/D [2010 0 R /XYZ 86.4 332.248 null]
+>> endobj
+2009 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F14 1030 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2016 0 obj <<
+/Length 3220      
+/Filter /FlateDecode
+>>
+stream
+x��[Is�F��W�M�N���T�-����%{I0	I���
�V<�~��n��HS��*
l4zy��V��͌�~8������B�bk�gW�3���
-��j9�9R��΅ћ*-�d�:��(y�J�pYl�,O+��(�A��ݩ�QR.��*ͫ��>f5�<Y}�2��I�m��_�~<9�:�p��tƚ#)b��-�'?�JgKx���ٝ���IO����Nh�"�^U��U�4���f����%s'h>��y�E��a�M��*�s�
+b�j�<}{	�~}[�繟۝�91Zv�cHe��[ߦ�#�e�P$f�)���e�hm�	כ|QgE���@�[�sQ��oj�<
���(��evs���m�/��*[��h�5�;�3&	�m��*�=��sn
�a�ճ�G���ü�ƿ �g��Sr:�RE�OAJ�L����
+��?�i�d��٨����K��
%~�E�*o�t�
�X�[�)"z� Cd =��y�A��
��8hЧKzL�����P�Bk�V
��A�������#��n)
+K�-ߦ������58 ���/�\Yd'W&zlTd�����/�"L����,� %��
�Pe�!q�[JT�/ܱÌ���;|�w[�I�g�M8	�+>�	Y��JE�j�VA؍"F�Aؕ���
��}�V}i�/�S��P����ޔ�_��s wsEit�(V��!���b�*����
+K���N�!,�pja�T���,�'X�`� �`��lt�
,o�@�F��.V��w�{�W��KYѧ�ӷc�a�
��9���
�Q*�[�s��囧O�./U������AM�D��b��1�2E3s�g5��h�d�3wH��
+��Y,Ҫ\ݏj,恚
X�KM�
+D-9a��^�����X�
;ʦ�I���o^���A�)D��c��a�l-�`�G�2��/PX)Z�_��D����V��Bg��cw���M��� lC���.�@}
^�s�#�ޗ�Ǭ؄o��9�S1Qf�q�Bȸs��R��L�:
_J�D{��Ț�Dqs��)K	�GQ]�8� 矗�cld����'�����8j�Ā���^g ����we�LY�?�m0�f�#�.��EK �}�������F�<��4W��iÕަ?��:�-�0g9����-o6�4Gm
#�*Cܥ�{`�p2�kz��Z'A;'a�ʉ ��3�E��ml�7:O�D��0�Xj�3���"���"6�;�X��n��e�H\#�k۸�����-��d���h��H
�:��2��i�|ؠ���
?�3�"���2��x9
+�0D��)衏�
'�=ʟ_w�ȣ�,}���k��x��L������a�>B�u�UU��۲�gH�<�g� 9U� �&�u���zG����>�U���1jV�'�
�^p$)��q0��!L ���/���.����x�J�~��,1�Y- �a�`�O���V�
!�y�f���yO�l���P2��n�1q����0:�$6�L��$��X�Y����:s™���������x�i}�]�e�E���E�h��,3'\���[�9
JR-���h�
����|
m���:W�(��'��2
F+�0�J�n5��U�� #�;6O]7g0{ �=5w�
��iq��.�ín�Ҽ�����L�D� 5��Ҟ�O�
لp�
W�Q��c1�Ԅ<P�UO�{�l�Xu�
;���>r�6q�7�o'H�1�7#�|[�`	����n���I�ƶi��Xx,A��o_�̱�a]����i��@��nz�#2�@L�A7[p0�
dG [...]
+
Q��������/�x��R%k
}�\�a��eB����2�f�\�›xE
��y�� �]�Y���(GB�NJ�c�x��B>]��.�׵�dqS�~tk���7���J�8\��j6��U�r��6��T�V�ќ���`�\��-#�إ9�U�
Lg\��r�;�.��'1�"D���^�����1uk����԰��&�V�Օ����URU�u�R��
+�`ƥ�z����"o</��7ށB������$T��;�Z�N�����B `-4���2"�Q:eC��dT��q(D��\Y��T���=� 8��}�jq������
+�<W{�(�ө�;����X+�D�x'Y�yQ�V���	 �
�'@����K h���+��î�sHu뗮
+���3� ���#
M��
n�X>�D
X������)���O�Q��{
�9�ەd�$೴Z���F��IX�N�
�Ӥ�<��>
+d�Ŝ���җ]?O��
R^�n��I
�K�H6.�W}�$�mT�3�	�f3#A�Ռ��X?�
 �F
r��r{S1�4�>-
�l�����jm��㶊P/n�m\�4p�m|��	>���uH\yX��%�Gh"�wmz|$����
�f�.�O�w�S���l��WkC��^���m�Eݦ�W�]��-S�绊n��uI�輮e��� o8�=��
1�Rz�M�8ŸY�X,
�`l��n�@/�_�yq����՛��u�MU=4V�
 '��?�s�?�Փ~8{}�l"ub �xE�p�!��6v�o!
�i���l6ӷ��'����pW������1e
��G�å���>8P�q!' [R�O�Iy����Eş�}p((L�!$H����!.���V~_
+po�w7x� �=D�ڂkz�K��O}l��+�7����!���|Pxj��zN?��������Վ��?�}_ckÎiy�f4\���?��o�Ϯ����������1?��Ǖ���--a�V��6[
c������ƾ�uczY�(}}��d����Ք�	���!&)��mxyv�$�VZ�l�B�(�:����7�R��
+��
+Q�k
��2d�p���M$�;m��V�7��<ᤶA�#1[�: � ܤ�=0q���_
�_RNZ��Џ
���GiG�	���^�#l�4#w��k;K}Q+��R��r��Sg�:Jér1�]�߲i7�l���n����P�ff
+endstream
+endobj
+2015 0 obj <<
+/Type /Page
+/Contents 2016 0 R
+/Resources 2014 0 R
+/MediaBox [0 0 612 792]
+/Parent 1974 0 R
+/Annots [ 2008 0 R ]
+>> endobj
+2008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.899 676.287 457.621 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+2017 0 obj <<
+/D [2015 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2018 0 obj <<
+/D [2015 0 R /XYZ 86.4 281.747 null]
+>> endobj
+2014 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2021 0 obj <<
+/Length 3053      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs�F��W�H�Dݍ^�
<�ʩĩXr.N	R����ri~�|��
)�rjj.$���|oi���$������ŋwBM� V\M�W��h�y
(�&��ɗilfsf�6��U��gsa�����>l�뛷W�$���t�f���י�Ӥ\�	Wi^e��>�Q��*O6U�������.�^_�}�@Z8a5)20��,�_�
'K��4	��W;n;�D
p<m&W�]��h��M��*f�ʝ�c�K����ɗ�P8��f6�α�o�|��tWQ��+���]t�8Q�b:�]����2��J?�8���!&
����I���v���"�$[��TuwQ�&Pa�if���b�y5F��\%P7N�\00�'sƂXzf%�rl�8z|a6\Y��sY�h�d
�@ƴ�
�v=p8�c���Ӳ�J���5��b_���r�"X����-�F��p�Ti��<�o�VN(��5��P+�
����&�/$��;+�<g�ە��xv�pmE+���LJж��V��o�U8���ε
� [...]
"
��`
4h��E�W���z�ox�a�'o
+��oM��.5?Xk�
C�Oqhاe�n��zZf�[��9�׵U�2�'�`0�-!=�97,[�{j;�wj۸uڽ�o��_g`wR��
�%��?��{oqy(尫_����A
7��
+
+d{"�b�m�*��٤�d�:�
��.�FqdDL�V�8Y�?��������"���Z�)�`��V����&����K�=��_�����7#�&e�x ���ܺ�s!I� ����`��� k�^��I��FO�i��xhLv�kLȉ�Ê�2)R	�m����߼L7��t��(��?B�ŵ]�/��~�wWf.�Anc3�!q@�� #E=[
s d�Oh����d��;��W��Ԃ ���G-R��pqJud��V��2��PdlN-�J�J
�b�[J
�H���L�!�L�A��a�>����8p:`��Xq��j��sz�V0�V���/��0<:'�؉����%|�2]�aL�]����`�"؄����o�jQfw�S�A*c���@Ĭ�<��J�eɸ��zVS�
�M�!,!P�x���ғc� �-�,]����p�ut$
+�k�m�ZS��g��|��>+�~�G��u���磏`�$��x=#n�:0
�N������@�����	���:�^Ya�T�s�
fIf��!g:�Q��3�?�i5<��޴k�w�Br���6��mG6I�%�)��9�A���tJr9�a�
+H��Ch0���;��)���ܑӆ�=����'
Pp�
ӳ�ċ-�r)��)KY�L
�Ts���9��p�N�L6��
�I�� 	�i� O	
h��ع��&	P1��2)*��P�
�Ń{v�&�������h���Y�n���~����=��-�@���
Nĥ]��iR�\F������Oe=s^Y��R|џ,z,E��R���I���0�3�aK��j
a�{hE��2M��N
-�Sc�7��1�U����� /6
�\"	�U�3p�k��ݓu���
lT������\��
�ķ�K��L��]���t����~ӈ������EZU���1�8:��3A��	V��+kn�M�
[Y�����1�qB#Z�^)���l���� M��=
�#�� S/{^kU�
,��"�J����,
��t��H�.
|��8��0\Ύ�q�	�����bt�h8��FA���z���Z������$�ـ����>NG�B"����D�͹O�눡��݄HY��k,��.�g��1�
�;�~^���a�;
8�(>Κ��Ј&E��M���M
��r�9�gW{^�
�N0Cv-�vn����E@�!S�����5
�G��x}��"E?�P�(>3�>K7�h!���PN�V�B�
-d�B	�T�Y�	��(}�c����u�'�dz�����s�GM2��q�
]����8�CgD����j�F�
�j��X1�[U��}yl� >4A(��z�I�C�9P8j�;~D��G�~�ڢ�m����W����S�
�����;���*�.M�*>�*� 
+
K��(��W�_�~{u՗�A�r#�j���r,��j�	N����-V�3x��\��K����_��2�2tþ˦`|��M?~���1;8�z�&�.�pD�����7rA��B
��l���`،�B98ޘ�33�,_��i��U���ـ#�U��&���s}�KWAo̬��%c4�Iƨu��Qcb=n��:��Ẅ�̳��<�"�n�
�
1λ�̋wP	G��ǹ@�
+�s
�ȃ�
��!<a�U�fq�>)`����!����w�&-/���Bg���@t�H|����=y���@����)��]ԗ�x�#���q��l`_.P�֦�x�T�fР��*�U���V�mk7�.�qlo}��

�P{�|�
�۵'Ovu0��Q�퇮o?��+Y��ݪU�ډ�K�V68}<��پ-m4^��X� �
{N!v�+R]^ǧ�$����"�T�V��B�"l��\WWJ0���<��d�y��O��鄑	j��|цY6�������D)�
+��� �l���z�ƘC������+ AW�-�������"
���������1}
�9`F�4��"A��Oص��'�{���.M�W�������w���u����n�����XH�=29Z*b��U&7,!�ۊ��sfJH���W�������'
,�݈���	A�h�9�����n� )P4"���9�ƨlF�J�η����WoH��
�@�ڟ��Ǥ��?
�&ݣGF٣�����J���vP���2����+�i�I���vL�C
|��q
�$8ԈfQ8�,���%�~��/
w? �RJ�����
��e'q��������m�yU�lS�ap�G�1��{��j@]&��R��g�:�{�/0D��S�|7*
�~c���׬��o�O�U���
	��=� ��'���/�R$�
+endstream
+endobj
+2020 0 obj <<
+/Type /Page
+/Contents 2021 0 R
+/Resources 2019 0 R
+/MediaBox [0 0 612 792]
+/Parent 1974 0 R
+>> endobj
+2022 0 obj <<
+/D [2020 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2023 0 obj <<
+/D [2020 0 R /XYZ 86.4 568.019 null]
+>> endobj
+2024 0 obj <<
+/D [2020 0 R /XYZ 86.4 384.032 null]
+>> endobj
+322 0 obj <<
+/D [2020 0 R /XYZ 86.4 224.074 null]
+>> endobj
+2025 0 obj <<
+/D [2020 0 R /XYZ 86.4 165.987 null]
+>> endobj
+2019 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F49 967 0 R /F38 773 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2029 0 obj <<
+/Length 3019      
+/Filter /FlateDecode
+>>
+stream
+x��[Ow۸��S�H�E�`�z�:N7�v���l�D�|�H����~��  EP�,o�i���H��
f~3���fFg?�����"�%$�y<�����ș�	��]�f�#E�|!����Y�X���|���j����6y����B��ǹ�QZ�ܓ:+�����?�Yi��?�9,fRp%����'g�'�>a "��V$E��g����t��'?�(��}��63)��j=�8��	�[���J��*�� �Y�0�t�v{�n_ �
1LډB�C2„�d�3�(
�x{zzvqa��>�_�(Q	��闷�y!"g
!dԔ�x�
%�]t��\eM��X������.t���
̑֎~�]’�z�&)�
N5I���5����jM�擨T��h�󧳟F�jC�f�05�H��L_����F`r!�V�&`���a�������
7b-a�����6egJR]�����D
�ˍ�5��&�e�.�d���Vn����|s�nR�sWe�y��k�ρ0��J��	���=y��� [...]
Y^��>.DLD,�x����3>�A��w�����
^o������]� ڈ0� �W�U��� ��&C�!������AA8� �Ȝ_
+�f�wL�
ߺH&��cH����(�
+w�~��{\,��Oq8
���@J���3��m�mp
���������M�sTy�3T����n۸�^2�sz)
�݀C��PF
 1e�$Ac1
�
,(�$�)��C��$��34f��}/ޅI7��
|��1�@�0��.hd� PA�Ѵݍ��
pS�;����f�P\Eu?��������Z
��QV����qfXVpn��3'Y��A�
�^�x���/|}�%l% �F��/�zY�w6n����C(���m���X���q��N���1���w6�g��ʤ=]����V�v�
.7ґ�[@��ʍ�9˦�+ӫ�
�L3'�0[��m�
OwU!�:g	��]u��@0nM
�?��
�#�!R�#�N���	
II�ȭ
p�e�y/C�eQ����}���'�i���
�U��v�;�eUW83��L��[���P$��g"�!�D�U�l�ᤝ�p�X�O
���P�S2�������1vQ�ͧ�i%d$9b��
���8�uw
u�fUUV�stx�	`>: '>�M���c)� �5@
1�g!���Hq[�[��l�;m:��Z���Zb�S����R�x� ��&�'���X���?��s��s�xvu��C�>������)f,>�>%�D����B�
�ŮJ�{S� ap�'�@"	g�
,x� .��&�����
� ���M���>�?�Ӎ!X*u ��0kx�0G@���=P�HM���c.Hњ~¢����W�ipr#�a�
+�
+q)׭?��ڑ o��fCࢠ���MUo�]��,	���F���b㎫ģ��Q,:
��H�� ��?�m���~�
K��)�K��A��yq����0
���9TJHkژ)jC$��K��}m�D)�f�rIq�K���/���z�_u/Q2M8,��׀R���`�{�˧�1^�
qp�6t�&��M��m4��8ac�i�q���I�U�$
`$��<�7�6@L�ԏ��W��J
*�&��m���H�
+a������!-
���m ֠=�+��{E�
����:��]�!�a�3��+H���&���F�ڀF\�@1����QT�w8��
���y+IդN���mV�A��N%x�5mg촃O�,[�-W7�j�f]ä���O�UY+Bp��Fl�����)P���G=n+��@�H
6��;�	@�fFc(
F���	U���nf�� �y<轝�
��}�C] ~�����b�
ܾ2�h�
��)��v ��1M��!��yl��|�A��o��]�
��ʧ�g#�
N���[L����*.%FK�M�AHdG�Q
����e�b
t��C͠�!�����6��O�וM,�����n���]�u�6�=�w�a^G;fP�y2)F'��$P��ث��"%4�t7�	��q�8[HP��K��y

��}j$�U�O�5�љ88S�K�:0��
Q�)�.��/݁9"����6
u%��*�sF����k;yDf
+���
+���a��@�%
+��$-?$%���6�,}&`���0Cw\oF<�=�x���K؍s	���Vڀ̵��g�D �d�Z�
�yqvĴ���q��|�?��o��r��}�
+Q�0M�_�_�i1:5g�E����m8q�u1���C��5�/���(e����0�B�u�D�4���
�h�[�ou
��C ���e$%c���Ղ�W@�k����̃j��a�tc��K
ɽ4pTD�w/ �N�.^�x_?���¤�)Q��/
!zFߗh���k��	�be����Ge�^�n-��� ��kqZ?s�,�*�e���tt@o,��D�� D8�$,��q �$�H�s
�?'�P �p��m����/߾>
	d�u�I8˘ �	9���ա���!jߗ�#��
�aq�?H���
+mU_/���u��3?Ǻ�H��mQeKk>׆�ܿp�&-��z$-!�U�qhٚ����ĤԱv�}u~q9bO�<�x��)����O”��$��k�������e�Q)qϓp��$[f���$L�͠"�w�U��䴮c�h�b
+�J���|~��勇
g��o�Lw�	�z���}�Ӝ���
+��n2א�؞���RG
J-�Ue15
5n�twl�[O���M�W��-5?��|Y
Hy�
�E"#�H���
3�dܾh����O�No'Z�ǧ��C�6<n߇��X��\Ŏ�.e�X��
����*\	����eQţڶ'
�!��+��rwPq.B:+��Ķ+]�W}
�w�ő]�׀j�{���m�?�[<ԫm庌X��4���\[�
��i�~�n+/[��E��_p&���:
+endstream
+endobj
+2028 0 obj <<
+/Type /Page
+/Contents 2029 0 R
+/Resources 2027 0 R
+/MediaBox [0 0 612 792]
+/Parent 2033 0 R
+/Annots [ 2026 0 R ]
+>> endobj
+2026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.618 131.406 174.089 142.531]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+2030 0 obj <<
+/D [2028 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2031 0 obj <<
+/D [2028 0 R /XYZ 86.4 602.993 null]
+>> endobj
+2032 0 obj <<
+/D [2028 0 R /XYZ 86.4 340.523 null]
+>> endobj
+326 0 obj <<
+/D [2028 0 R /XYZ 86.4 177.988 null]
+>> endobj
+2027 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F38 773 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2036 0 obj <<
+/Length 3273      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s�6~�������L�m�����Nfv�>�ms"�.I%���= ��d%V;ӝ}�)���;���ft�����g_�z�Xs=���YM���h�f���/��|Ό�"z[e���\X�<gѻs���_]\ᐈn��?�>�uT����r�\�y��ه��᭟�U���U�G��o�ߟ]\��~��ltƚ�(b��-�g��FgKx�����G7o=�"&
�V�����p7ڿ���;�f����w��cC��n�0�}A��-�]z�A���o/�\�ܥ�8���$d%J�nz��۫�o/�(A(�'�l4a�)_�y�6r��u	H9�^���������T#hh
(7�<�����Ϲ���}���qM��M��������}����L����2�Y��EZ�E�
���n6�_��b�Vn�Np�9c$V��]R�"
=�fQQU!�s�b�_�ު�6�V�2�?ָ}��/S���W&e����
+��,���J-�2��W�0��O�����FX2����WpX�����E�!{q
oQ��
g���ֿHn�
����1��iUw{�����l&��!�r�6n
܅)������Y0_

�y�� "E8��nT�_I�X�Wf�!����L�{��
�'�Wh<�%�ƞ�w(��Iz�@:80�
J����a*\'���}�t��So���4��
6KV��e�>X
<'~�"Y��S]����ǔp�[|��X�轿��w�
�c�L�bb?Ib�&wc�ہ���\
+��B
��GT���q�&����Ýq`�Όs�X�!�o�=7��h�
q�-+�S�
�IJe��#`���K�mO�@�M4�A�}�J�9�jT�p�N�2O_�ǖlh:	ڛ��'��GXH'�	6���_�[STG��lN����Ml�(��h���A�m&}̜��U�>�i�)s��}���87��
�[j��f��.u
"n�g���0by�E��`��r6b�U'6<�@Zn��s|��e(h
1x$��N�ܩ=x���,6w��;���m�6���j��a����ZW�|SJ��!\�c�D���*�g�F����0���^lacb��� '	�S�o��v�(E��
�c�
s<t�*:d��?
����@Y�oW	�MA�����s�W���C0�!+��	�<�
�4�S0
�����wX��g�8���6���
+�^
�~sƇ ��K�٫�Z��Cc����/`�y�(��ȴW����Ӓ�W��v�ƻ��S�R;��
������[�E��
Â�b�V��f�-!�Gѭ�mh�e��r��Pis�
��.h��92r���n��h�د,8J7��
3�(�f�S��>1�0DK�� �;�^@fZ6��L�<Ѐ��l����nl��1/��3�<�L%"�����ֿ|(�Y��\��w	:g�㓺q�7-H!C�4ԁi��1��M��#��9�nD; y���U�)�-�dUoҽ<V��.#�x
�����Ȣ{�0��>�].Y� ����a!z�B�9�(�@=����|�����:K��B cO���c��n+��;��
+|���H�2i��� ]�
��|DŽ�JL�P
�q^s�E�c� ���
+��M�;~8�|6Ym�q�P��(�Udϊ��	�Z�A��u��Z�O�CX���Cm�P`�?p�+��<S94U�b���L���?�k�U
��-eУ��/_^\]�� a�0��-��	޾����&�,߰�i
����'a�7��?]�4� P��N@��h< y����t��S
�
�gx��G�}c|,�	��{Ixs����� �e�'���$:[�L����[OC�� ]$�..�%�S[���܊�_���e���}pQC͋ڏ��1�� Yr~�H��%y}
+��V����W����)��
}�ÿw��ҥ	�=�C�������
(@�A.pY�i5>�����
��ʮ�$t�4(QH!LS9I�G
:���AְaTԾt
�=b�Ͼ�$��=�*���
��D�]
v��}�w?Ce	ܸ�{:����d
*0
��8wү�U
��Lh�R
�I�j]%U�/U�x�(&�4k�$T�0��	O59��s(EV�
�`ʫ�Se1F83�EJ$�7��p�����e�V�s,q�f˴�<L���ԁ
+�̆�{ȼ��e賬`6)�]H�VۼX�G
+[8u��G�tT[��*(O�aè�C^�j_
�q��	�T)�����`u?�Z����\K�K{�d��8�{m�������D&�NN
��
+�W�z�%��F���&pl��ބ�,���eO��)9
*~c`ˬ��a�=��m��${���b���C���)jr
膪Gʊ���c5M
�,j���8 at AT�N~� n�^?d��&ؕC��.j
�5�s�
+G�?
�ƆĒ
��6���������&&�ʵ_z	�q�Mn
�o�
��l��'o
��8��/�����9�n�"(��A}蔐s5
+��!,\et���&�{����QO��rf�V����rQA�STAq+lk��
+�WTA���t�m��4�<k�E�+e�#�p��Q@	�(|e4�wha�s|�� ��I6h 
���&���� M p�n��{P�Dy Yb:]�7UhP���=`xD#Y>h�U�P���9�a���%����n�;
��-~s����g,Fs=�_u����| =v���v){�7 ؠ�G7�x�=�?�zf����[�.�t6�~���G!�cx�ȵ
O=�ٿ�Ď�){bc4��~c?��N��X�(���Z3�-.�
+�µ����Q"�E�m(�r��'�>�N��$8p�����c����I�6��(a�
�E�!B9u`F��7�?T�﹋�ATH�eGLȘƱd��wyB�*b at 1��[��������@���@
��1��zb8T�p+�4���@L� ��L�F�BB�|���
t���EL� �Yq���V��>�x8�P�
����	���
��[7b
^��B/`'��v�
N at 0t
���7��$�B���]�P
�ڣ8n9L|��*��y�\
��.m%��R������S��ʢu{���%��ps
+����9B�' D�'���=sj�T�s��B�-e�({/��.�:񅭵��F���%��������_ z�&z����)eA�����uX�-���Axe�wJ�Og`',�=�.' ԥO��h�B��?�jM��R�x}sH
<������N	�du��_�
�
+endstream
+endobj
+2035 0 obj <<
+/Type /Page
+/Contents 2036 0 R
+/Resources 2034 0 R
+/MediaBox [0 0 612 792]
+/Parent 2033 0 R
+>> endobj
+2037 0 obj <<
+/D [2035 0 R /XYZ 86.4 726.045 null]
+>> endobj
+330 0 obj <<
+/D [2035 0 R /XYZ 86.4 641.452 null]
+>> endobj
+2038 0 obj <<
+/D [2035 0 R /XYZ 86.4 557.454 null]
+>> endobj
+2039 0 obj <<
+/D [2035 0 R /XYZ 86.4 304.225 null]
+>> endobj
+2034 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F38 773 0 R /F16 717 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2043 0 obj <<
+/Length 3123      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys��~�ا�2�
�=9y�u�|�e�rUJ��
�(-�+�����
��q�Bb�陾�k�ήgt��ٗ�gO^
+=KH���]^ͬ&rfxB�`�����\~�V�_��v�L�������3?�-vU��J����ċ�s���v��٦̫�}^���n��C���L%挲�_/�9{qy���
��=)b��-o���Jg+��͌��ٽ�w;�"!
�ֳ���h���D�0Œ�G|y���r���hg�0��5����_��N���m�r�LÝt]���N�?�߫m�����]�M�l
Vw�s��%.}��۬���<Шv�
2
N�`�$*����\óB����_\�6K�y��<y)�
I
19��s�ʾʪ
` �ۓ
#��89ݬFd	�
>�0��D[
��w��~�Ln�YB���� �z] w�˧{tEkN��t�HbtR+Kg�$3�(a�
ZfsB�K8=�p�&�XK	P5�����3MIb>�z��a�Gp��l��
�p��޹5h�5�j�^��r5����a�/T��{�[I�䎶IJ,l}��$�5:���n?��K�ͪp�������>��SF��S$I��=���6�s>����
بf�Kg����8f=�C���h����$�JO������y9\�Q���Eu�xDa�
]�
��9�{Lj3���W�{����n�p�k�zl�S��2+˫��[�?��W��v�LV):
��k�T�HW<
f8I��J����6��i����I��G����j�q,�
Sl�+D��q)-M��ԖS�ߌ�7�Oؘ����W�(�:䪀��r�
��Ž"��s��UE/,�^�탿y����Ů\?�{):z\e�V>
+`8u�7�1g�p�5��7���
KC��z�[t!$(�D��c��<�`��*y
�Y��
<�T
y
�l�o�h+!u�a�h�m���K5s/
�6
��ݮB�9è��9���d*���yB�6�E�.[�5�tN��!�xȐ
�L��+���]u����
E�ă��0��GHF�n	�ˑ�Bd�I�3���q��`�C_�yt���� p�%�3�1xvI8Ƞ5縠�MӞ	<\L)�W#��ZB�	�K�G�~�+
�K\	��#�����ά6�eq
�eծ�r�am@圅����j&�`�j�����O����}��R�wY?� 

�E'Z���
���
c&(��R\��<�惊�<���&���zz��`��zA���#!VYb�
T"	�b5�%�-���y��ٳ}AX0�#
�,�o��?��@R�#�W@�@y�$��*w�)� KA��i~������n�$D-�*�t��z��wc�����d��p�8�m'd[=)'�2��h�ܘC<� _K8?-]�T�(�
ʇC& U�M'P
\���Ø^p铐4�)�T��ŋW���v&�p<@|��
B�S:�)��.@��������|T�ѧۭS��M"
�,
���/���)������x�r
-��f�f��>b7��
.ְ��&�G��I�uR�4�J.!�M7����z*a�09
���Id�!����N at 4ʴM�����
ԡ'#�UB��}��
�@�=���!�P9�G
�P�O!���)��x�Q4m����6WF���쑚
��bӛ�e���|�UQee_�ƺ��jh�U�
+Ci�rL<BOn�M�k�a:lz'��7��/�����u�5@�DЏ�/�󯫰�������}�^���4�s3/S/'�k����E�<2A�Jִ�U5�
e	�D6��>X
��F;�?D���2�{
��$T�{Pya�17�AH�(/�R��
���B֮��7�c����<Of�aX^E�U���Ȅȼ�� �B�
\�G�.Aѹ��Ih>��o�����) =�Zư@�a�zA�~L����H�d�����(�v$M��z\k�ms�K �=���C�~�V���G�b�t�9$,Rt
R�5
�i�m�9���:xi�i �Ă]\
��Mq�); 'a�� W���w >I������)I�,
źY�(��,Dz�0x|��=�aJg�����$�l
R��4�+
�
�m��eeJ�$0�8(�e�>�T�@&��<�I��>oq˻��K^�7O�M�yu�J$�)��"���ӏ��!P�f��
+�B�ㆼ�Aހ�Ƭ�8�?36b��h��J�:O���[<@�~�FBݢl��9�����[!����
+�{g�QϷ��.L�]ECǘ�_��Ǥ�'2|��C�x�Gl
G���}�ÑU;
�x���V)�����?�\
�m/iH�l�l/�G��
�LFt��O�`�AlSt�p)t�o1��-�G�a�"�ز��-�7��� 5���&xc��"]��WqO=`[;�F������s�i��N?Z/�u��B��
b>�+�ak
�e����S%@^B��wǒ$�]'v�85�'��Rœ�
�q��ƙ�Y]s���lu
Ygq:���:IK
����D��!:h����MЇ���?$ɑ�F��p��T�T�s�?R������=
�g&!�O�hå$?�h��dh�uH�mLC��&i��RR��h��h�m���2�a
_5��iDP�tz�zHb1Aq/���I
xj��ě���~P">m?�C��#�2:m&���RҜҫ��hT�6�����)����O"Q|������x�Q�m����
r05#����p\���H�h-��j����A����$�5
,�6�O�~>� lە�kU�����
�I=&psPd>IK�u
b}xXa& U�M�'��%
֣nܛ}�
s,�t��Q�O
�����p@��|s�s�V���Yq�(��K`����8�&/
���D�`�
E.����D�_������
BH�1�������Y�.�;��i cq �1>�@ʬ���~Y�?AËT�Q��";W~��Q�>�|�W�U�[Wc��
j���#3�h����h��7��Հ�
�'�
jU��=s�A�!�t_zUF��^����Aؒ"l�
a{뼬J�i'�X�-^��NO����h�
��>��A���j��
atV�oq l§Z��i���7o��bc3�}U��4_����m��~����ٖYxka���_
Q��
+endstream
+endobj
+2042 0 obj <<
+/Type /Page
+/Contents 2043 0 R
+/Resources 2041 0 R
+/MediaBox [0 0 612 792]
+/Parent 2033 0 R
+/Annots [ 2040 0 R ]
+>> endobj
+2040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [330.319 62.16 345.042 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.1) >>
+>> endobj
+2044 0 obj <<
+/D [2042 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2045 0 obj <<
+/D [2042 0 R /XYZ 86.4 662.946 null]
+>> endobj
+2046 0 obj <<
+/D [2042 0 R /XYZ 86.4 404.212 null]
+>> endobj
+334 0 obj <<
+/D [2042 0 R /XYZ 86.4 107.528 null]
+>> endobj
+2041 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2053 0 obj <<
+/Length 3474      
+/Filter /FlateDecode
+>>
+stream
+x���r���]_����p��b�L:�ZrG[�%9}p� ���)	� �K�����%)Y��f�!v�8{��/�ht;�F�8�����/�%$QL��#���,!����|�~L#6��8���]���)�b�bBǿL8
�9=��)>^��}x9IԸ�>M8���~p�u�����ؕϋt�������v�����ɇ
+�E#�q�D
5��N������QDx�G�̺�H�0xZ��NޞD�lC8QD�d��PX�0�B�A�I2RZ��}0`5#�R�!��]'$*���ʒ��/�<�����i��Ā}	�
�+ %Z?�QW\�PZT,���;J�\��7��+J8��Ƭ^,S�'���G��M�_#�>��6I8�&�X�N(��y���)�g�����w�{�{�V�q��
 G
�
v�XL��R
qpO�zV��M^�oG倫*:���@=�
/��̯ 
�@$垐a	�#��DS꿨�'S���,�5�"���Uy��Vn���&��0/��e�JQ_xF�,��[S��Oqo8�A��C�DJ��� �1Z .Ƴt9[/�&G����-�ҧ��IN��ϫ��*+^S��?H�v����
�	$J�O�+��D	n@	�[��#3,"*f
E� �9�q{��e>�B��m���\w�Q$<[���%��1��)���.��h�9�l�7ԛ06
+d��$V�_	.�/�Ͳ4;�p��}�bJA�F	$�����N?�tU�.�/��N�IFx�����S�*�K���EE�eiU�N�q�\�i��δzg�ұQ=�gYU�5�:���I>D�,�8�r
p�x�6���K �@`�	��m��(���@T�F���
�e�@��#ݥ%�L�=GzD�(�i�c�.Z�/޽z��
���PѬE9�
���d��Z׍ū�e�Ӗ��.�?ƈ.�v 
ͯ�?< 됗0�/��~�6���
���N�M��5�*
���Z1�ն
c��*���X<�72��A%���
�a���}Z�5�t��6����;C��]Z�E��'�gv�w� 'B#�W��iѵ�h) �q;v6)Q�:�\�|�Zq������}�
��s��cC��_�QL�qZ�ߍ��a��(I�68��t�)��U	�#��®���
�t֔U�̣V�qv��S��Z.	�-u='@��l�X��Fy$M����;C=L�K
r���Mmf�
+���ˢ�
L'�-�hq�[�� !��D���6>�Y��}[[
�
6B�o�<����a�1�'/�����J:p�T�1�Fq�c�aPq ��c
T
Ak���_d��Fot^���&ֵ�dm�ɸ�Y�pX|��M�tg� xNB7�"H�4�
����� U���_���օ��`"��|�@mDZuv���d�.��� K��@�ĺ|��a
�P���X���D�V�[��h<#�y�4�  �}h�� �Kp\�Ma���sS��pщƙ<���#�
�O�g`�)����<��0��Q�Zt����r�D\�J���&ఊK��
+� I��q�Pl�B����)�-�A��D�x�?���x/~	$�RC�.F��֧$�
+�P`�W�^�8��z��m�V�zE�
�,��˻����Z����z=�V/�˥K��������}���Nğ��	@I i�|}�:TЄA�t�M5%"J��z;��3��k�3""NT8�L�>�)0�H����7����>��F�َ \=�
**$DF�� a��Q$L���
�MH�8���el��-��.�i>��
��DsS�gڕ����	�m߅��g��q�-�3H~��G6 ���c�@�ĥq�N���z�����w�� ϝM;eP�8f�nI�\B�9��CO1"�r�E�d�Хsk�@��m�ڌV�{]�čOh��*�es_�qѵ��%Rmde�\C���ڸ'W�.�s�m�S�i�
+�U��NX$��h  'lS?&^@�x�(L;J�"��'���5�~����|�F�%HI�Y�)�CB��YC���ZS�z(}�cā���~j�3�gg;
�H�݋8}�:k��y@�0(��D@:Le�p��,A2,�c(����N���
���I����~L"
+��'�q���a6��ӷXPj�]�J?nfa���hf	��y������gueh�)i������ty) 0�i�UY1����[��k�J����}oR]�u�<8��Ayh��Ԙr�^@��ͱ�;��!�]�Ĺ:�g�C��.�Υa�ͥ�0��׶n�1�8��t�ds�ʀ�n�D�3���@�_
]H"I
�o٦�(*u�6
	�*��M��6�51Ǯ�=,A�jP;k[�Z�,�������j��
+v�":>75_x��^�3k���Ί��(�1r�B-�u�ƀK��6�
xV΀��_59��>�<;
�����J
J��c���`

+I��Ord
��+�HEN�^������� �Q�$�Ԛ+|(���G�7[�
+J�`��Mn�D]y�a���F�����
���

��1>�fv�f�<Dz孝�?卭-�+
–��D(��xLE��c
+m&�ex���L���D`٤EV�k;k�� ��`��O���|6E��A2�<�8N�4��n"�V�}�M`1temDZ�K۬#؆��!H*�,~~��'
�DB
#�gF����O�PL�R$ƛj�?��y�M]��-~
����;����p!;Jy���Ռ?��v�M���6��������1%R��
W��r���$��`��
|��;t�
+���Ѕ�Ûء
r�](^-�j��_ȁ�������羯j6���O �2
�{l�+�֜�
�
Ю��,��gj��۸D�k읒7L`�P�&P�Q7k��2	��u'-���8�e���u
���
"�M*�/gtt}9Ѣ�����6�
+�`�H@ѰH��F����5V�����
+= o: o
	�
A�hC_��r�'+�!1ۺ=��!^i��^w�:B���%\�e
½_����4��M�x���SuBv��r�@���b\����Xc&�%cgV��y��,]�"	}f��:"���=Xۺ_�7}�
��HF�U
���{�\�!D��m~Xmyֱ���b�TV
�Z�}
C�7�� 	r�
�� �4�Ȱlv���\��&7�3�R�]��R ����1p�>�e��l��
6� �~žA^����C���챇�aH ZӉKBm����h�ˋ�E����N2��=���d
']
�8<$��r��qL����P�"v��uY� kW�A0a�|7G�� G��=��y�t�8�vQ�F;�G$���G��^e��G`���)v�2sVUe�o�ڳT���۞�N�~
NA�v��2|�:`A�
��./���:���G��L	�����^ti����V�������WEY�%�R��� j'��� ���vy
x_��M����O��cu��͏�.�f�㥇���72$q
+endstream
+endobj
+2052 0 obj <<
+/Type /Page
+/Contents 2053 0 R
+/Resources 2051 0 R
+/MediaBox [0 0 612 792]
+/Parent 2033 0 R
+/Annots [ 2047 0 R 2048 0 R 2049 0 R ]
+>> endobj
+2047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [487.871 590.06 502.593 602.015]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+2048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.323 564.093 374.045 576.049]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+2049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.367 526.172 377.09 538.127]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+2054 0 obj <<
+/D [2052 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2055 0 obj <<
+/D [2052 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2056 0 obj <<
+/D [2052 0 R /XYZ 86.4 419.611 null]
+>> endobj
+943 0 obj <<
+/D [2052 0 R /XYZ 253.378 134.976 null]
+>> endobj
+2051 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F14 1030 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2060 0 obj <<
+/Length 2801      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�8��W�%mE�
�>�f'5S��&v���#�6k)�KRv��~��)��X����%A������B��&��7g?^�}���(!�b*����""�,!���j}�H¦3n��Cm��<���N�O���U�j����麬p p�0�l�V
���E�5�}���_�i�Xg�1�Z�	�������ί��sF��8�-O��������q��7?G1቉
ܺe$xB�����׳xSF�!"� �H%�P���i�:�7^9)����^�͏EBtl����կ�m�L?���u���@1� ��o��Z�Gm��*ml���]UN��|Φt�tzn���o���]�v8:�CV[2���L.ʖRs�6�&��@V)i4��$2�|?�j��+;"'h[s=.'���JB�h�}[4&��v
#AC��oS`D�N�1����!C;�\L�o1�v�5efb�G�`���FaM��5s|}�7�,!�������V3"Y����[au�����A	"X�#*|��/����~�,��m�fyM�1�Vf켵ʫ�n�u�� [...]
��`��tǁ�
+�RA8��<��H�$ ����o����0���N$�	
<�8吀Y_��]��l٪���%�B�6�n�ʌ1M��ŔW��Wٝ�+�@E��>��'׫bޮzc�$b
�
��LJ�;���� Z�3���ܱi�1^�Ō�Te�'���c`�]�Q^ �GT��I�۴'7�^�az��w��Y0��������H��{돲�
�B� ��H�_��
s�Z(���Ig.{l��D��"Z��1s�A'�}�-����P
A���s�y�ِ�ҿ���v��1l��ڛ26
�#�BrR]r��*d�Oy�vvI��d_�QH`�$0 yM�:���hPB]�<E���2�i1���&��%e#����K��d`�n�g�~
+�7@���O��Ȋy�Z؅w
�`en�o����������u�5QQ6~b��7�
�x{9�	�Or��"][K��C\L.�:��LL��^c�AVa���mVU�Ɂ�eWPoV��Z����Ы�!17��-5_��� [�sa�|
,h�� l����hF�wI '�h��
++� Uy��~/�����\4VORi���BRH^������|�#�i���˗��<�J����J�2�|��M�>Ч �`t�j>�u}��[\R�f8�	�P����^=�Ur�N�' EU�ߝ�KZ�}z�M
Ƙ���Ň�o�e-	U*�<��
+U�N$_�(�)�`��#�#�ށ+%$�
�c�ѹ�H��d热�FBlG|+rIp��#v
�-�� ����U,[��b,8Q�ZX��t9�%�3�ȍA��@a&�J0|R�'��Oc��|a�A6�"�
��w�9^ԭ�|Sx�|�-�� }�>(� K�T��pfB;{���\�5��S.�s��i�M�\�>���vs�MuSc3I�qu2l�}�>����u�	11�+�M�I��id�U��I�A����!�:my* ����S<]W�ҏB	A�%�Y�2l)���[�6/���@��`�U��_���w���<Q��/Rڶ�@�u���gU�����	�=�����<�l�7'��L�M�T`���nN��	T'hN��m��.�|QyV��
	�
XP�
X��=E�{��D0q�
E_#�z�E2�س�v
r� ГiݫX���euD�BAz��
z����
+l@�^Ŷ
26D;*��nݴ<����m��Ex�Ԫ�
W���y^4�^� s�4u�'�p�~�����v��`F�K��n���ػ?��I���� )Mշn��!��O�
9m2��Z81�Z��а���sֹ�z٦��3���?�E
?yף���Gk�z�
0#������/a1�7t8�4�ݏ��Z
_�bЇ�3��6���H*���g��#LN�I�09�G�N�ih1�6��-��Ѷzb��[
�P�a���XՋ �xn at K�8b�O���.�{*D����Y;���r�ܭ��?�B�
��-����*'��.�l�1Tl���;�i�
��-Mk��of0i� �����&��U{��t3y�\��@�e�
�f�{��Ep��y��@�
��I
_��#�r�zdJ�\�4]�T�P
����µ�߫���~���	0\�����H�����!���W'�s��Ae�iV,����U�}���;�]�&���=��������<���uw��^.V�����}��A_�
�Ƨ32T�Zm쇾x����t�w[
�p/6��t\p���9
�@�5��Kq}i7���
aD�l9�rv��X����
��d�
|���n]ci
��
+_2�x{-�
[��
�l����p'��Te7�.��n�:�8[��]��x�J�!�$��#%a�A��C��
O�]��h��u�.�l�
��x
+/��ۚ
u�j�c�A�v����̯21�=�Zd��
sw�O1��՗���i'��Sa�59�Ҕq?�
ƛ'�2���-�2�|�-���υ5��>vq��1�C˓\���7
/�/c����
�"`��
/�/��?dr��Q�A��۝S��%�ݳwԃ{ZY��y�_� �Uh��

+endstream
+endobj
+2059 0 obj <<
+/Type /Page
+/Contents 2060 0 R
+/Resources 2058 0 R
+/MediaBox [0 0 612 792]
+/Parent 2033 0 R
+/Annots [ 2050 0 R 2057 0 R ]
+>> endobj
+2050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.842 676.287 427.565 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.6) >>
+>> endobj
+2057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [273.135 222.607 287.858 233.455]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+2061 0 obj <<
+/D [2059 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2062 0 obj <<
+/D [2059 0 R /XYZ 86.4 643.644 null]
+>> endobj
+2063 0 obj <<
+/D [2059 0 R /XYZ 86.4 431.998 null]
+>> endobj
+338 0 obj <<
+/D [2059 0 R /XYZ 86.4 269.832 null]
+>> endobj
+2064 0 obj <<
+/D [2059 0 R /XYZ 86.4 199.699 null]
+>> endobj
+2058 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F11 1019 0 R /F14 1030 0 R /F16 717 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2068 0 obj <<
+/Length 2980      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs����W𔀩a���)
Yr�5��
5���CB"*$(���_��
@l�H
⪸|"�����
�g3<���wW_�293�H*gw�3-�)j�ddv�����
�f��"�
�
�yt='яsF����,���������sF�8_��$+�2}JK;����:���������w�_��]�rE�6<#-i.g���O?���|?È=����f�D�i;[^��
+�p�G�eQ�����7�2��W�f?-�T:�.�/8c��:��c����j������:.�0�������>,�$�C���G�p_�m*�":�Q췇2�:vI��G�h]��!���@�LĨ�-AF���}|ؖ0�(u��IB�#�Ƅg�#
����Xb�ȓl̘�þLX��ҏ���%��+���Q�=81�	�cx��I9��m�>l
-�M��
�8.<�E�D`2�(
{ƥ��O��4_H���M�'�~�+����	7�q���sv�L��m�g6'rP4B�y��6���hi�
(����A��vvH;}܆G�&��8��a���i�� Z#�yG]��ZG�q
�6$ya�+�R`w�}Y�+?
~$�R�ʂ��{�q��+��ƿ��:�H;T

�iv��`����\˰[�}
B�c�A��G�
�m
+r��q�)�+\�O�N�
+I)�z�U�VGg��@3�؀��=`6
#e����w� �$E�
,��ɷI��>o�Z���P�U��t�H"/�Ƹ�F!�CT���<�
�#��h��↠"�����U����˅1�$�
+�Ǹb�0]�ԇ�1�O��]�{�I�Kv�
��j��;<6�YP��6�eqt��$�*O���DB$��
+�
*:䲈��u%�!a�d
���\��<)������:����/����
+���X#),��g���
y�0�q_��/D}����
+�_ſX?�
�~7a ��'�-;r
[���Ǭ*^ٜ��1��E����:�zo�ܹ��P'R9R]lBmpu���_��]�n;�8�hNQ
	
��	ط�
K��l���8�
aD�)F�9����eH����}�������2`X7�#^�!9�3;ʃj�*���43W��Xvޜ��d�L���b����>��w�����ʞ�4���pĵ�v���
#"�%���<Ӭ
H[��]
+z"����`���IV'a*#�ϐ���=c�I��?s�p.�*ET;-
Ț�c�	�����϶Gb�#
�|�
�_U��t����;iwީ]Kba�[��oZ�S�X$��	�V2U-
�`ʚ�5����I;9��(լ-��|�А���
)�?�I� �me1w������r̚@��~
,װ�]����>�d��C�������n� �`%I��8�VIQ���O�F��.A$�
+
A�!6	9
��)�[YW����懡��!�$�
�!^`�>���ׯ�"��M��:х+�L����BM��^h��_Dz
¤&~(:9+�s�9�gm���z1��z��U�
tFUL at U
:9���V�R���!
cOs���}���͘'�\��:���5s=(�����,��c߃*�� x�l_l!�L�m�[��
!m_y��t�q'a
�������E�������g�
���~��n~��cG|�l�^��ɑa$�Ⱥ�#ð��}�zr��R`0΃��Da���U���
&�!L��<o��~�ϱB��ֺ\!c��ʟ�y��� �:���o�����(o�t;T�3���_ at LG v<�6�Jd���<
R�i����u �]
�
%��^����E��f`�����gZ P�1�I3�jp1����"��	%�D+�s�^�W�}�����
��[�B�Y
��<߇)��J��Skw´�{+�C���?��A���"O��je���*G�t>�C���O���}���㶧�1��gPJh,���'��+;
+���
+q�
�%�8�K�op�3K;,#sr�F�#k��^��6������ո�x
� ���"�� 5�9bS=I�
�2��Q�Nqh�q[���5�lT5n��?X�K%$�t˄�05�ָS
j�֑�5�<�ƕ�S��@��_�J]ոR�WV���

SF�}>k��N�(un���go���4;
u�ڭ��&UT��Ŷ"2q�Gw��ҧ_�>q�ĸ8��P�VA��ѷ�oU2���8�u8������/���͓���ߐ�kR_
xeo,ش�ai_�@�T/�j�ς�ǔ`m��U���F3�l���&�1?(v��_
l��7�p���3Jmإ��|�BZk����������~s���rಃDXך0h��A�q#HG�V�g�Xo;5h���~������
+�˺���N��A����!�s����Q���&(m�ђ<�E
��>V��+_T!��9�`Ƃ�g�'^赮�
�`��GB��!]14�l���
+F8�o��tc���e�

���/�Ġ0��ƒ�.��
�C��@u�y��E��i�{z��#�
*��f��/��]�T86��u��
#h^LI
+��(eS@�����|(�R����&Q?}9����Ƥ���7�jL.���	*'1
+9��'0t��F_���
;��N�2
�irqQ��bj��@���$�B$��C٦Y0�Oa>��G�$����o/`4���Xƨ�T��i�—��1�.&���$� aIxй�cΥ9�� ��?�6�
[����t_���༌�ap��4���e�)�`���
,� ����N�6#�,
eP<�9��}��Q��P�����I����A�7���G�������(\LNeo�Na� ��� ����
��nd�=^F��Ԟ>��Oτ��I� );7SX�4+}
+�2~xH�$�X���
�Iy
F��_j
��C0�������<0>�"^F� M�GA8�*.&k6�C����+����
+endstream
+endobj
+2067 0 obj <<
+/Type /Page
+/Contents 2068 0 R
+/Resources 2066 0 R
+/MediaBox [0 0 612 792]
+/Parent 2033 0 R
+/Annots [ 2065 0 R ]
+>> endobj
+2065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.482 233.631 348.953 245.586]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.5) >>
+>> endobj
+2069 0 obj <<
+/D [2067 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2070 0 obj <<
+/D [2067 0 R /XYZ 86.4 623.283 null]
+>> endobj
+2071 0 obj <<
+/D [2067 0 R /XYZ 86.4 408.259 null]
+>> endobj
+944 0 obj <<
+/D [2067 0 R /XYZ 250.334 194.752 null]
+>> endobj
+2066 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2076 0 obj <<
+/Length 2466      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs����W�"Sa��%)��<U��\j���
	J�P��Ec����A*D�c�\������~l<������^��[&gI��v;��IFf�����@t�d����q�\G��bI�ч]�_giY$�8�O�4�
n�Σl���>O��))��g�+�G��<���)����/��]]�^�����TkHs9[?\���6��F���G��aƙAZ����W8�+c�
�CC��ZRK�0f&�@F�1Л#���3�M�
RZͤ!�(�~�c��_��
+��)�$�U�{Z�E���Q��[N���ĎW���T��
��wؑ���jDI�-`�{���KA��+�o
�����'��G�I��Qn!
�kdg
��}���I ���
⇿���i�K��[�
+�C���jSВ*�HZ�d8�o�|�%�E��[CgH2���RϷ�~]�꬐�KI��)
j��p�@@58�n�>�s��������� o�<���t��[�P
J;��8��� V�
AF?g�[�����6�a��iSƾa�=�����ð����Ͼ,n]�"+'Gm��A��G�uvW>�n�E��~�
+�H�8ԈJD��I,�3�IE��#�G1��VK��3�G
iUo�)M6^���W;�Mq����#M<x�y��bN#�(�
7
+ô�ނ�9 8��L!%kM�
�ٳ��a����v��1�$�#�
48�Xya
3
A�����F�W}v�>��d_�w�	4�DZ�7��Mզa��v�ִgo�E�7oδ��lȴ�A$x�[&��y?�i!�<ڕq�_	������c#���4�N������[�[�P��=/Hм�@k$S���c A�C���aW��o�%l�e
;a*<�
�F��P`�`��xi])u��	s�޽zu��e.�U�>��E�h�]��cY�G8G������<!$���r���|[�vϵ֍ۤ ��Tț�>6�3��6��B�����C�[#��$�j�86�Io޽y3�AC0m�T_���seND 
+�)�۠<1�Sk! u,� L���ge�
q�Y�dQ/�Z
?����m�?�b\B�c���"����0�a
�i�T0l�5���f�@0'�B�.�P;+�:n��<�>-���aX�K�ozq�
!�8s�qލ+L*
zo'�X��iy��������Y\%n�ƿL��	��[��&�X؄ҽ!��/��h���h��̽8��~Ӕ�5����v1h�u���x�|�V4��:P}5,!�#���h�V���C���eq�֥`^V��U\��������
�2�<r�P��`B5�uGC^���e���7���A���C��3 �
$g�W>�����g���i��r�F_C��0A:5TH���Ϙ�8حM��ʺyS+1,���`s��.����2 N��"�1U�:�#�
����Q���<�8�¡W���9(�0�	҅K����˫"*�!��D
��W�L�a�g�BT�3-�1z��K������I���
 ��V��v?E����
W��*.�Qb;x� �D������
1p��Sm���%���r���u��C�M����R=����HY۰���_T+���H���<���I�,�E.n������J�
���*��H�!�,-|h�wYZ>��
��eV ]�(^�Y_H��H�`�#
+
��%�C��A�E�N_�w�6�dz�,��w��wI��l�1򥋚�z w�����֠	5�
+�4�_�M�P4h��͵o�w(hm-Qs��E&q�/�w���j;���0��HMa
��=R�����*����B�ρ$��,
j
eU q���,>�wV���y�s�bj���9Ҋ��B��$�<��@	� ~L��PȚ���#
������_e^.r�	S�.!M�`����@�IpQD�3H�)&
�ik�OL�N���4mm��D�����=
+e&Q1��I�t�gڜ�s�L�T
+��O\נU�v�K����d��+�R�%�װ�Y�S
���B����_��.0
���B1ΨPl
59�r c�V�s�<�E�˼
�d(�����>�՜���5"���Y�f�� �
"?ڊ��DCN{�������
���a���Y�>�
�����"͂��̇�3�Nq�.�p:_�Yh
��H
b�Xr�-
y�e�A�x�<f�����x���X)u�N��� ��O�
�I{�K;�ȅ�%�Q��$�4R�h����*zQ��_�1W�UKw�>�
/}~�%��`�2��:?	��!>�:1dEQ¾C�C�w���9�4��$��J��L���+��G�N�
۱���y�5ˢFj1P��ܜ+3k7�/j%��|���	jZ��Yh9E�lEa-��~�(a���i��R���d�(`'�2ԯ�)?q�z�&�굹�?؍��$w�@W�d�:���tmN�Ǹ�|M�W����P�a&(̪Թ]��>d1��25�
�$cu*2�����"�
+endstream
+endobj
+2075 0 obj <<
+/Type /Page
+/Contents 2076 0 R
+/Resources 2074 0 R
+/MediaBox [0 0 612 792]
+/Parent 2081 0 R
+/Annots [ 2072 0 R 2073 0 R ]
+>> endobj
+2072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.32 501.127 233.792 513.082]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+2073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.723 171.386 402.446 183.341]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+2077 0 obj <<
+/D [2075 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2078 0 obj <<
+/D [2075 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2079 0 obj <<
+/D [2075 0 R /XYZ 86.4 480.021 null]
+>> endobj
+2080 0 obj <<
+/D [2075 0 R /XYZ 86.4 233.341 null]
+>> endobj
+2074 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2086 0 obj <<
+/Length 2443      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs����W�)�My��~$��BQ*�l�"R��>@ H��d KY���y�
��3����1����������
޼<���ѷ/��d$�������o5H2�9;߼���
Q
+��M���
�<:ޒ�햑��'���.��_���-�Q\��NӼ���:����~�<��2�U�_ξ?:9;������4kHs�I�����7����
F���'7�jÙA���ӣ
��Xƈ
�$�H�����a�Fj��VK2`4EX� ��뾁
R B������o���eZ[�:\�*�}�����괜1
�iX���32��
+��c�w
=�
��L����-��fd
+I�V�}�����?�ϲU~�'�0bj
��B��H��:
�[ݦ�Ŕ��r��Uz��_�_��<
�!�ڗ������A��J��c����ͻ
!�Dg��
]
�5Z!�a�+��JÅ��i�y�և2���u3}��*:\m����
��Q\�n�4��Ivv.Лh$$�	2"�{lu�Ic�� ��*=��<�0
U
h����m����@C��K
����<\���PW��w����(��d����
�I�@FZvN��O��R��fca�5ҪU��ν��u���}q��9E捗�]�
����E�D��u��R�g|�)��iF��E����p3'v��%���.8�9$�&.L(0`�},�/� PY^O��H�
g�Ǿ���t�co� �nT c�'|�ѡǿvQ��]o����!
#����
U����U�F�9s��KP����Q����
�C��9�[}Z8��4X7dj�,X�����[v
+�lh��3�.4҄o�� 
�A�.-R'�P��<}s||rz��\ �dA�v�
+�;�}�� ��?
j
�(�>���`��i���$iU]
��}UZ/�
�
e��8z�&��դM�~�O~��e��"kL�	��
�|���PY �i���
�͕�%�PpL�VP�<(�J��2�)�0i�>��.���p��cc�I�2�~;�S��p��\B",�*�%���^�4�]
��U���|u8��ɫ%
�,MX�Y_l���]l��\�N
+&
ž�
+�� `A^�ao!_f�>��L���G�%_uZ�S
+�J��ۙd��8td4/�<)SW�)xy�B�
^_��
�0{�DYu5�gڴj��%�*�BB�X߂�R	�e}
D	���ٳ�/O^�<�� (��&�3I�#����94j��s0�g~�dFu1�g�*m�Dޏt�
D�����
>e�(/�:�'�q�!QDF���[?x��A�Rw��=���%�BӍ�腥���!@`04�҉����Ȩo��J��`MB�J��-��v�
���呡!�.�:����*K�آ㪝�?@G.�'�c;R�j��-B�GG�b� �
|�1�g�c�

Ǯg���H�ef��t��_N*��P6[W���瀠�[W��
�U~�$����]

Vxr�A��W*���{�M,?��sa�`RN:����sw5
l
����K�N
~>��2C�q	>g�"Kլ��f��AW�s�!c*bn�;����E����3��X�Ic�������e�<�<&|��rg�]��3(�Ԩ�c����g����6�ϒ���e��[��/���m�Y����C���;ԔC3
�փB*ph&ph�B!@� 
�hr� ��I��:�x+�Kwe�O
�
�{(ӪA��n:A��F��#=ے
�reN?njMgkPpV'O
�*
��%
+�U�;ؐ߇�c�
�(�|�,�p.К0)/�<�Ք��
ڨ'*�Q�8-��|��ߊ�R�_Pq0+=l��(�n'�֘4�q�I��[A�����'#�M����bv{0���[c�@�
�|"��`�
����A�YQ؈�%�VXC�ͯ�+&��7r
B��eB� 
+��Bc�0 01ei�tы��)�1r�ȓ���V���
����3r]�<��Z���ù�
+��f�eݛ���Nq4�6 �|5���
v�Mql_t=���=��*܌I�0���t_AfG�ٻ	p�!
g�i8;�&�
mק�d�7H<����*�ް
mǝYmgo��;K�ٱ��
��@���[ v����{�
ov0�w֪K
��U�^�\W�~3�G1ԽD�A�Q��E~�qi��:��;��� ��Ō-���c�,�w6��
ػ�I�h;
�R��(�
�#%�
C�f��ݟǣ
+�S,���c�-�x YX��xS�����dB��)�[O��I1�+�}��%�r�W�gIF!\���  kXOV�YJ���Ap	���O�(^��k�k>����t��G�ƶ0
7�&�1����5�Z�u�Ϟ��1X�`��&��P��/�Ўw�[� ��w;���	�؛����А�=�lg��jG���N�����?������_9��7
+endstream
+endobj
+2085 0 obj <<
+/Type /Page
+/Contents 2086 0 R
+/Resources 2084 0 R
+/MediaBox [0 0 612 792]
+/Parent 2081 0 R
+/Annots [ 2082 0 R 2083 0 R ]
+>> endobj
+2082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 524.11 173.628 536.065]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+2083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 288.653 173.628 300.608]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+2087 0 obj <<
+/D [2085 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2088 0 obj <<
+/D [2085 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2089 0 obj <<
+/D [2085 0 R /XYZ 86.4 466.374 null]
+>> endobj
+2090 0 obj <<
+/D [2085 0 R /XYZ 86.4 218.962 null]
+>> endobj
+2084 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2096 0 obj <<
+/Length 2966      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�8��W�HmE<	p���I�l�Om��%3F�-�J�#R�x~�v ŗi9�L���"�@����I��o�~�<�ፈ�����˫�DD��$,�\�CE�l.�?��n^�on6Y��!�}��i���]sq7<L��+7X�y�U�mV�ԽL�d�4�eL������o�?��_�}=c�O�z_������h����JDl�;K�
��	��M�8������Hŧ�0#ID��S���� 2��ZL� jI��
���i�:&�� �a:r�~��b��M�Eu�[��.�ۋ"�d���ܾ��]9�
ה�����X�y��S�Bۆd�viA
ٝ,�l���gz҈\�����$׳��*���{\0�RE��@5���%�8�R���	a�4�*MĚ��gۦ�n�����G�g~C��#�Y��$^s<#�x�N��.���"�<|�3��r���<�ë}���z�d��1D-�㌪�9f�Qy�����ҭ\�-�0�q�3��/0��t�(�+����X+���F0��SpfFb�
wT]}
�yh��/һ��Q��
E� a��o`%
�l-.��U�p�,qskwׂ x�ޓ|�[v5�M����
���0�2Qt6�R�&L�����4�)"�	��9�6M��h� �˗oߞ<͆JU�D\֛[&eJ�66g�!d�$_����*�*;
��8%Ӓ(��X����A�H
+�J3�8��D��[D
Q� F7Ǹ-��s�
%+�Ħ��Uo�E愇��
���6&��1�\���f�
�t�I�&:�kJ8p��w��l
+������9t�&F�HŎY�&��dt����G�,�
���DPٕ��($
��Kг��-.���׫l�~>�
B�l�^���|�ά0�x�»
™��� �ݔi�ɳj��Q�1Q"�H��f�6؊�B=~����� �`��\�����e�b���U6���l���m1q�Hh
C�>�p�L�v�T�l�i?�)J]4C��CO�5(
��t�9$9���V��q�hX-�1k,M�C#
��h̆ގI,�w��SW?N���tLt�v4h(C
 ��
�g�,��P�ܲ�~�ŧW���	G�P4~�h��iB6
{��n���5FN��v�x�x;O����r����

̍��4b)p$���5)5
���$RV:�ч�cq�@\g'YԀ�h�]�����S�
�
�ۚ�8?��G�3�T���
+�5�c���s��P�l~,xZ'�HJ0��#k
B~���D��71s��1�X�$&��Hz�˘�	BO����02�%�SH �N��x�1�}PQ�[�܏4��X�:I�
�򺅄#K6��jgP}��v��ҲWD����e�u� �/�R�|����M�L
-��1�� ���H�Ԉ��ˮ��k%*4�@��ii����}v����5���ݖ�
�f�~�K͡�C��t2��T��Hc���.�Dc��Gh8�3�[�z����
&
�WE~�&�6c���
ېP�(s������6�����X�?���g��!!]�_)��>-$��	l�t������������S���G����GǶ��lK�AW�Ԟ�~'�=��)'�����}�l^�Q7�n��H���r��ٔ�:�-
�������@�N*w�[���{
+��#�r��٢ Yآ �ZE�
�h[=K�퉴
��Β{m6
�<��
�Q���g�L1 
�9��j�yfS��X鿲)"
��q|����q��)򌦈�|�pr�@��)r|BWD�z�����ܵ�XW�L
:#05�`��ɝ`{��#
e5��Q� �-xXt7�A�A�M��S8_̻�2� �\X|�\�$8<��Hg1�(�Y8�

���D8D��G"]/���n���m�?�M"@ڐ���CV�F�}
GDM�`=Vl�JH}D����>Igѿ�Or�c�}��1���$ǘ��sV�1��IN���t���'yZ��6
�!��c�
�����%�E����`w at H���9GJM�� )��U�#�se����	�
�``�Q�@*ߕ&}��� ��d��|iw6gf�
�
�A閹���/n0��!��sࣇs���V�>y��'���-3�и��߽���w�^�Q�H�$'�
=Ӵ/ޙ
�֩?�����
vLY0�T�x7esi�dN]�o��0��Z]/�՞qb�q�<RR�q��s��__���]a��l��r�ݟׂc�|
^&��~�Ti��H
�ˮ�6��N����;k���>�>�}VQ�
���eD�� '�������bt�X��
Jq�ş�Ѧ������z1�Tx�
 �ZO�&	-��y�+e"ݹ�G��*��In�~϶�ہ�7�;kx�y����q
E��_�xz�֗ba���e���F��K�����V���lgiLZ
?y�Hq���o��B��wfѲX��/<b�R���- ��l	�U-��*
q�e
Y�k�m�F�V��M
<�&O
�6u$yVn݌W^�����*Y��W�(v���t��U� ש��m�n�r3_����U����ů��J��`vl%�Y�h�� [...]
@c0
�����+ȳ��>_]������ˋ�_>-F�q��G�
&
n� �RJq�p(\ 
�
�no���� d���
P�
z��YpS��ti�?\�f���a�KkV�Ř @X�ŝ�;��;�W�{�

�)��%�K�O$[Q��v�� ��N��%�!E�.5���m��A
����W�!�AM;ߘ���i�x�����
a��r@�m�՟�A3�y��R0�$�@&��`�K����K��������ʮۮ�~��5/_|��SZ�7��RP�˃m�?��7���Af��v��6�]��ў;8���c�
+endstream
+endobj
+2095 0 obj <<
+/Type /Page
+/Contents 2096 0 R
+/Resources 2094 0 R
+/MediaBox [0 0 612 792]
+/Parent 2081 0 R
+/Annots [ 2091 0 R 2092 0 R 2093 0 R ]
+>> endobj
+2091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.925 197.93 434.647 208.779]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+2092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [278.817 173.467 298.521 185.422]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+2093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.61 61.606 491.314 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.11) >>
+>> endobj
+2097 0 obj <<
+/D [2095 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2098 0 obj <<
+/D [2095 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2099 0 obj <<
+/D [2095 0 R /XYZ 86.4 471.49 null]
+>> endobj
+342 0 obj <<
+/D [2095 0 R /XYZ 86.4 240.715 null]
+>> endobj
+346 0 obj <<
+/D [2095 0 R /XYZ 86.4 108.929 null]
+>> endobj
+2094 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F38 773 0 R /F14 1030 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2102 0 obj <<
+/Length 3482      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�6��W�H'#o������GvR[����$F�-VI���f��� �$�cmr� l4�����݌�~�����o���$�\�nngV93<%Z���r�)a�^Ι1T$�b{w9V&�.Y��R���o��Hn��7�^�:)����'Y��\�ۺh�/E���ȗ�l�P@?�/��������
��kyQ�J=[l.>�NgKx�����W7n3�"%
Z���ů4�mJ�R"?FGK"����4�ik	��	�	�:�p�v(ߔ �SF��^¯>�p�V�����D�o�|" m
I�}� �PK�TI�QDs����o��-�o��~:Y�fDpo�W��}��o/犫��6��U�H���Y7�}��7�<[#
�k^��3&�|6g��J�����X*fZ
b�<&A�腲��<�J�Hi
���/���!�aC(M��`C(�y��eD47��T�.#�@�!# e�>s�=\���g�Ch�?z��^L���XL_�b��꼊0
�g��58�T=oG�"`V��iXfM�ݡ:=}9�Az�mRv_z��
�F2O�‡0���
��?&�hHb���*�1g�Hm<����Kx��u>�x�i�5U�ͪ�/���v�]8�4Y���]��w�*����z@��?����%7I3_e�eX,�'.�b#[�I���.��ÌY�t"8ؑJ��EN`g�;p�\�d��vu�ޱ�<���
��14�`k�
1N��[��dJ�m���	۠p쌚�G�{🍴	6Ou�EH�_4]Ĩ� :�$5�"0@ؼ9#2
�-�gD0=�9���dM��J͈�I����C�1��;8"��Ȣ@4���,�L����9��F
��o��?,����H�C�r�
����Y��Iю#c3�K�@gV).�eu���[Ԩ�
}pP8bǒ��h�m
+!�
!�Ů�¼�͗K���v��@2,Y��	����c�k@�E��:'�p��s5gd
��_���ɚ�
��@
~UN��Έ�*�|��F>b5#3?.;��Dr����*P������A�_��
1w畟�
ק.qQ��dŶ� ˏ��>�-����M���a9O�4�J宁�ڷ_z�i�&	�D�
�yٻ�9��䗭'��Y�i���F|:���E����
��=Bc ��@�}��3}���8���`��
+@��9h�N$̪(�$��8���B֞R>�`@)��&�]MR�L���ʿlJ�����y�
k��
e���j?
+_�kCx׻��� 9I�9�$a��Tq!Md#���g���}V��2,���k�%�l�*��c�̯����utN
Y�U�=��q��L��
�}4rß�@~��gUt�4Ѣ۹XF�`o@�r]@	�Ih�si���i�J��1 %��Xt
����YE��L	v��1Y��Ց��*�
V��g[?�
�������6䛐�TF��	@�.��4�`z���v�7�j;
��$HQ���9dNX*NrȚœ��׫r���H�T-Ц�C���w��b����n��J�y���+!
{��<t[*�#��m%~�?����yU�Z&4K����
֌m�\\����Saی6^-�:�:�[1����X�	�r
�>
!����C$�5������P���
��ޱ��a�6�˜Ȍ<i����:��o ~�kXi�l�0�Ƣ�ma҉H1]�o[�H����WN2�O���F��*
)6>���*[7(p�C�2r�}�������J���U���8�+$Ń㿾�����_E&�b(?��FC&�F�}��?���\Mp�Q�U
�Z(�Hv��h��r���]�a�<ޗM^O��Р=/ѐ�^��1�-�b�,�s�V"��
<�ȣ��A��iވJ���L۲�S-�M��{�C�5x�̯Y�V@���=�����/(��]��
���m��u	;�k�j�H��"�
��!
P�a�g�BX�n�:~�("Ԩ(|<���˟~zs��5��p<+�@xv_���ī X�U,�T(�ץ������K
�Z�nۘ=f"<��]^21��HçI$j��GZ鶼���\������
\)��A(�X6��ܬ�*��7k�n�����Ӡ�:�w�^�;q�ap��):6�@ZN��Q�'��t�Ű�,��c֦Dg�hݝ
҄:1
]� [...]
+V����~�R�[��d���}08l��qlH�+����>�G�
@�b':H�z%�n]��x����c�����uW�/Z�
4m{N�����>ٞ�@^Wl���
Z�n
���tH$�À�Yy���j��A2�K��0I����02�GN\
�aA�;�=͈e�q؊�hb̴�pN�~8���	�����7�º��,�	���͙��gY/6Î'>ٚ� ��7���
xs�g��jڃm ���v2�F�o<b2jx��]W���
�g�/�܆���F�l,������p�,��t`�۬��!9�"�
+�+�{c�L� �6Y{�	
@�����R�Z)�����bP�
����3����=�q�
2g�cZ�2
�����hli`֝bٲ*ww�-���s�9 at k��w��)�$�3���$;�%�
ռ�r)Z;`hX�U��M�N��@���x�J�Oo�<�:�IJO]�&ʌ+��
�*`@�&hOB���Q,�nW&��ߋ�،�;�[��\k�uJ
$���Cfџ~EK��Cv��ŻZ�~�-"��a����
�L���'1T<Q�34T_#�)��1����e �
�.�/���+�O��P(PuSEs
+�zT�Btj�c4�����Qn%�W�;���y�d��Q�R����9�C�
!{�G1��txR��3�<�A��Z
+�1F�ӦG,�Z5ͦ���`�O�p0r�Y$�_VLC*y�&ӀO�8�mM�F�x|�ST�܉��g�J `��t	
��� ��-�����d�pa�{�2���P!`�$�>�NP 	I	ʞvaEr&64�M��1��9���ɷ8vw2\Gd����3\GDR��q#~��ў����z��^p�"��$O��	`
���i�wSQ��!�
�c�z���~��,ڏ;"��oqB�/��K	�s���q��.��{���������Ğ�<vz��^~�zt��=Nl����6�=�ahv�6'&X������e�:�ۜ�i�*l��>/]���i
z�{�r�.=���J�W#��?��f�s��i
c~����13���=H\�|
"�>O,�#0bS�g^�S��*�f�.z�t.� ��;ơ3M�b��Z,��s\+է^+�/)�m�J�_p���{�y
+endstream
+endobj
+2101 0 obj <<
+/Type /Page
+/Contents 2102 0 R
+/Resources 2100 0 R
+/MediaBox [0 0 612 792]
+/Parent 2081 0 R
+>> endobj
+2103 0 obj <<
+/D [2101 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2104 0 obj <<
+/D [2101 0 R /XYZ 86.4 701.138 null]
+>> endobj
+350 0 obj <<
+/D [2101 0 R /XYZ 86.4 275.358 null]
+>> endobj
+2105 0 obj <<
+/D [2101 0 R /XYZ 86.4 181.83 null]
+>> endobj
+2100 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R /F38 773 0 R /F49 967 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2109 0 obj <<
+/Length 2766      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[s۸~���[�!.�����u��Nvj;yI��� ��DjI*���{@��U�
���\��p2{�%��^������Գ�eZ���zf5S3#2�%�ݯf��)S�
i��]y-żuu��
>�Jj���������P;�Vs?�EU6Լr{xsW���!
-�뺪q��^QC�ʦh�/��`����y�]�v�����W�_qP ��(pʬҳ����o�l-��&3;{��v3%3&�m;����U
��
�l�\��t�7�l��׏�^����q	����,�ݠ-��/u��ka�-�|�N�y�=8��6�hڼu�+
s˶�_���o8�
j$㩎+?Q��d)J��&i21�d֨ا=�C��y����)�[x.8L��iU��?���|^<l�����M^���)V�*��}swa���$�@���[T����(W�+��l��}^�;׺�>!W���p��.Q��h�1��rO�c��b;����,���yMK_����:��
�Y��$�����
vŘ�A���gX�{�'u&g��:��M��d�v���'yߜ0O�����J�Č
�t����k^x��PG}O at O(�Rƅ��ym�&Dy/$
��^��"Y�L�� ߚ�iL�Tͫؤ�@
+��	e
D��4y��T��4��<�Z
ft�b�z�&j�kI�:̖��-a9zJ
zKA�_�Pق�O�A
+ƭ�V?��$51���o�h�|�Ø:�uXuh ON�)�P%� �3	9�BA��#mWP'
+�L��8�V]�m�B�@�1�k�9>�9��
+|���h��mEO���k�ʐ�i�� ������K�e�XNI%��D_�H
+|��t�H#�(f:��Tj�7�cT���k!�l����c�rw�� Z�4���L��P/ƒ����0��ݞFŧ/(G
�~�\��I�i����ޟzM at .J4uj���� ���S�,pÏ>'����k��c�� �Ӓ�2�H;Pg�,�]ݴ�� v�	�%/i�X��ǡ�;�5����GU�ș�"���7�7��彇�m
E+�: �帊
~
N�o��

+���w���fS
���BND���
�������5���DH��lZ{�&
�Ͻ2|���A�[V��
��������
�p
q������8�_s�k�����"l��.��eބ0�z�v��� ��CO0
iʻ���vK
�-���e>!b*�j�"/KA2̣�9u,!<|	}ȏ6��>u��b
�-��cQNGȳ΋����.{v�d�'j���d
�r�ӛǿ��KAE���U�k<7���+b!=�E;Is�G��8�@�R��)�0�ǀ��$�Oet ��ۿ��|x�vbe�
5Y9SP��p�7��>Yr�
�iȣҠ,#�R��)��-4 ��� �}�R��aBjc�o�ې)э=B�s��(��h;�
 �#�#�2�"1�p"Ţ����vS�)h�~�g% �����	 ��<�Y�~�������
�b��G
�Z ��/wG*�%�`|��)tnh�j��M�
�
a[I_�z2O2��>�5�ƾ�C�
H)S�
�n(���V�p�T�頕����W� [...]
�>f!*��:�
�y��6��
+*8��!ہ�q���2;�R_i���/����ݎ�
j�����Od
��k���#a��bB�H1�{PjP�����džC3|���kz���m[4-��r톪�y_�+���6LWѓ�#&���%+~>��21P��J֌���
��ݘ��o�  �4�+}�:V���Ƶ��
+$���������n��K,
T��
�}>k�����B���pᳳ�w��9���
��P>
��E��c8����}�+tB����_��w�2F���e���_�`�H���U&a
�Ϝ�"�
��*:�v�p_���X
+;�}�/�?�ROh%Ƙ/��)���z��[ē�UC�Q¹J�#�oq��>tox��`�b�9�`��3�?™o�m��nˎ�z�G�`rt
F�#Sjț����g��1ܰE�=X⳿��R����:�0Svr��
�����0_ gxR��д�c#������K{F���@������}�J��G%�i^>ij�u]�Ɨ;���k��h�`м�]N��$
�W#櫎�`_��Q�~pr{rtŔ膤���y0�p�
2Q�Dq�(ա=9���T�Kƌ
m�%3��t�O/�
�*��e��]	�o���-�
w
Hjp�ۆ�ۚ�;D
+,��a�nj��\��u���KQW���W�O	�=xb�Ѻ�c¡-A΅H�MB����}�Z�d�|ݑ��b�Y�]c�vɾY�pX&//�4�?zl�1S��/ȋ�F+H�|����D
!�N�
���e0#�m
���g�����
�g���3��ԣ�
pʒn��+|�c�8ȥ_ʘT!����wzG_>��="s
�����{��\κޒm���d�����H�����D�X
��
0��=J�N$��ݳ�YMh0�1��"TxZ�1t��Ű��砈��hf��Sx�#�фA��
��!WR�;ZTmX�U���/&uK}9y����aUx��U�{-..&��%^!`Ej_26���a�����	���n4
+endstream
+endobj
+2108 0 obj <<
+/Type /Page
+/Contents 2109 0 R
+/Resources 2107 0 R
+/MediaBox [0 0 612 792]
+/Parent 2081 0 R
+/Annots [ 2106 0 R ]
+>> endobj
+2106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.33 300.387 394.052 311.235]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+2110 0 obj <<
+/D [2108 0 R /XYZ 86.4 726.045 null]
+>> endobj
+354 0 obj <<
+/D [2108 0 R /XYZ 86.4 394.381 null]
+>> endobj
+2111 0 obj <<
+/D [2108 0 R /XYZ 86.4 296.987 null]
+>> endobj
+2112 0 obj <<
+/D [2108 0 R /XYZ 86.4 276.182 null]
+>> endobj
+2113 0 obj <<
+/D [2108 0 R /XYZ 86.4 255.378 null]
+>> endobj
+2114 0 obj <<
+/D [2108 0 R /XYZ 86.4 236.511 null]
+>> endobj
+2115 0 obj <<
+/D [2108 0 R /XYZ 86.4 213.769 null]
+>> endobj
+2116 0 obj <<
+/D [2108 0 R /XYZ 86.4 192.965 null]
+>> endobj
+2117 0 obj <<
+/D [2108 0 R /XYZ 86.4 172.16 null]
+>> endobj
+2118 0 obj <<
+/D [2108 0 R /XYZ 86.4 153.293 null]
+>> endobj
+2119 0 obj <<
+/D [2108 0 R /XYZ 86.4 130.551 null]
+>> endobj
+2120 0 obj <<
+/D [2108 0 R /XYZ 86.4 109.747 null]
+>> endobj
+2121 0 obj <<
+/D [2108 0 R /XYZ 86.4 88.942 null]
+>> endobj
+2122 0 obj <<
+/D [2108 0 R /XYZ 86.4 68.138 null]
+>> endobj
+2107 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F14 1030 0 R /F16 717 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2135 0 obj <<
+/Length 2533      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�6��W�He-  ��V��פ�l&vr��A)���g�_��h�)J�lW��%�ݍ�0�n=�]�������2�
3az�+/����P
+�:�>�B��\D��U����2V��L�Τ���������(i�~fB�(��d�/ʄ\�y���CV��
�|�/ֻ*�~5�����w�g_���=��Y�Bo�9�����Ǚ4�����xJ�h�]�}<�N6ޗ1
��D:%���K�������?�~9֘���1����ҚD�z�F��[�Sq_g�!e�����|��!�s��<,�j(�Ә|��H�5�����r`�a�a*�ަ�蜿�m�8H�E�-ӆ0�)���:�2
E� DȌt�_ς���g��z����s�"�_ߥ4��]t�%��Î��R��uB�of� ��\'K�O�8�����U����V��*��dߝ�ϓ�
����$��;���x
+��&�����QU^�
+i���
+��y�g��a7tJdz���,6�`�2͹_�pT�2[��="
���^X��S����!��E�8bYb�
+�F�/��`P�
�XAFm
0�5q����v���v��$���ߤ�����2]�́��q`�lM��8���\)D���$T_��`\G���9kA�B调��.��
+Z�j����'�!9��"[Wc{�
NUɑ����I(z�4���-��(|t��G/3h=�g��1�wey1EZ��q�%=��L��ޥ`�%=�7/j��_�
��p܂>l+�)F��u˘E ���	�����jY��1��w˂L�,��i�.�xWVm�`��?�
��T�4�[nq
V�
�Ћ��)���.�i�ȗS�.����+�������UMO7$$�T��@��`0�U�?��%*1�3X��C)F��v<�
k
W��(���G
+^������Y0r���0A��
�����WKg�$�Aw�� �;�o��:ۤ'g/��/�Z���b9J��A��J �|B�=D2��eD�Dc�¸u��	��iacfD���ŷ�&
��#vl�I�S_U&8Bv��9���#O�8
~q����:4(գ��NZ�&�O�[��1�)�5�&i����� ���zD�-˔P�}CGl  :�
�U���C�G9rug�C9T]�dR�Ig3����C��_R���|
+ZP�6��s�
�O���b[�
��K�!�Au?3���!?�n�4 �z*�C�n#5�6���$��҆r�б�O�uw�y�v�v\�j�Ȅ�‰��/���_�t�\��a@!_pkLj� �_
�gP�
M0x5�y�Ra��
++����{�J�7U�(h�	�u$���b�3՗��0vJK����m=��1���gؙ9�|N��6`�G�k9��T&�W3��Y޶k���o�]��`P�%Ob/`��c�����`6����`o|��Jpu H���b^��j�+0Jv����o�EN��N�o����s7�Li�b5�/�g��"T�M� Ǐ�
�m���a^#�)�\P�X�(���Y9p�T����Vbc� �M�������K
d�:�g�"�>�j���h���
l4�H���m��ø� � �m�.i��
���
�=<�]�&z�;{�8H�>�2�R�:�6,��
�rƥ<��ыZ���-�\��u{8� �����4 +z�E�������ԹK%4p5� ��
+�,}�
�U��A޴(�.ǁ�ܦpû�r'��ܮ�u�Gtı���^	9�꠬��>^��40,�ۺ"k���
e��*F8��~����� ̙	DWv6b8K}Н+!�J
5����P�%S���XlZ� �ȸ
+}��jO��5D����:�/�
�J��ҳ�\H� jh��/�N��q���Ң�l��-h
+e���~���@����y:���N �Vm�����
�����
+��l�o_Q!�P����8���Xص���n��bQl��U���G���b�O�_���cLǃ��i��O&�&	
�����#Y�=���=K����n����~1�
~?`f���\�qݐ�o�'����Z�eM/��{d�r��t"Da��~8p�*0yQ��W��^;ݯ�k��c�G(�l	`�(����,+�(Y�#cȿ����d�*���	����w�&b:Ú��A�� `���B��8�#��)Mm� /��!��I�>
+�*C2!�V��㐠��@�b�ē�4n��x�ј�},K��8��fD US�T�2��k�@�$�z��?�a��ԧ]k�u-�C*�a
����5P�}��
�҆���O�"�R�
+4����"�
�\B3�G���+J(�콘M��8����à�R����h"�[��]Z���g��n\�;T�
��v("y��4��ء�"{��ibc�Gl
���_3MeN,�Z!
�,![�huI�7�s��A�
es�����~q�Vv�;��D��f����7q߿i�2Sț��[�L��
�
+�~�E�b�a?<���6g��G�?H�b
+endstream
+endobj
+2134 0 obj <<
+/Type /Page
+/Contents 2135 0 R
+/Resources 2133 0 R
+/MediaBox [0 0 612 792]
+/Parent 2081 0 R
+/Annots [ 2123 0 R 2124 0 R 2125 0 R 2126 0 R 2127 0 R 2128 0 R 2129 0 R 2130 0 R 2131 0 R ]
+>> endobj
+2123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.047 599.983 410.518 610.832]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.1) >>
+>> endobj
+2124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.189 537.921 446.661 548.769]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.4) >>
+>> endobj
+2125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.125 466.599 526.596 477.447]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.3) >>
+>> endobj
+2126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [279.343 362.106 301.815 372.954]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.5) >>
+>> endobj
+2127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.22 232.97 241.176 244.926]
+/Subtype /Link
+/A << /S /GoTo /D (Item.100) >>
+>> endobj
+2128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 221.015 97.359 232.97]
+/Subtype /Link
+/A << /S /GoTo /D (Item.101) >>
+>> endobj
+2129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [285.957 221.015 297.912 232.97]
+/Subtype /Link
+/A << /S /GoTo /D (Item.95) >>
+>> endobj
+2130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [318.613 221.015 330.568 232.97]
+/Subtype /Link
+/A << /S /GoTo /D (Item.102) >>
+>> endobj
+2131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238 137.459 252.723 149.774]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+2136 0 obj <<
+/D [2134 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2137 0 obj <<
+/D [2134 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2138 0 obj <<
+/D [2134 0 R /XYZ 86.4 684.96 null]
+>> endobj
+2139 0 obj <<
+/D [2134 0 R /XYZ 86.4 646.808 null]
+>> endobj
+2140 0 obj <<
+/D [2134 0 R /XYZ 86.4 596.701 null]
+>> endobj
+2141 0 obj <<
+/D [2134 0 R /XYZ 86.4 534.639 null]
+>> endobj
+2142 0 obj <<
+/D [2134 0 R /XYZ 86.4 515.36 null]
+>> endobj
+2143 0 obj <<
+/D [2134 0 R /XYZ 86.4 453.298 null]
+>> endobj
+2144 0 obj <<
+/D [2134 0 R /XYZ 86.4 430.146 null]
+>> endobj
+2145 0 obj <<
+/D [2134 0 R /XYZ 86.4 408.93 null]
+>> endobj
+2146 0 obj <<
+/D [2134 0 R /XYZ 86.4 358.823 null]
+>> endobj
+2147 0 obj <<
+/D [2134 0 R /XYZ 86.4 337.608 null]
+>> endobj
+2148 0 obj <<
+/D [2134 0 R /XYZ 86.4 316.393 null]
+>> endobj
+2149 0 obj <<
+/D [2134 0 R /XYZ 86.4 295.177 null]
+>> endobj
+2150 0 obj <<
+/D [2134 0 R /XYZ 86.4 273.962 null]
+>> endobj
+358 0 obj <<
+/D [2134 0 R /XYZ 86.4 207.438 null]
+>> endobj
+2151 0 obj <<
+/D [2134 0 R /XYZ 86.4 123.882 null]
+>> endobj
+2133 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F38 773 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R /F9 1117 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2154 0 obj <<
+/Length 3125      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W�m�ɼ����cK�XY[�/�
`�P!	 �8�~�g  �43�n�*�A�`���hr���_g?\�}�R����N�o��L
wD
�\ϒ_RE��DX�^,�OW�m����	K�exPބ��l��U��2�a`U��:<���p��|9+����e�zSV�H=�f�A�/�bU<�_�KkX�;���dz�g�| MX�`E���tq�˯4���J��ɣ��H�p���<�:{}F���FH��&
��v�0��^Tw��+�����^v_R�(�~���8w at XkT3�ٻװiW�o���0�;�X"��d�?��E
~Wwyx�u�($qܴL��2F��̈́��r��
+$��9��]������
+�ذ
N$�-�8�&�8�a����Ʉ�T�6p�
N�TIgַ������YZ�ޝs��e�I&\��8�T3xKR呉��;x=�m���>N<,�
+`�/�Wa^�x�A3ޢt�x�]��ax���b^7�����Ҹ����G<!��ۈ�7CdI"y+/PI�{0�� l��7Q�P��D	H}|}EO	��m
�Ԃtm���ܣ��0�ʠ��J�a�՞����,���
+Bq��c[��i}
������‹Բ 6|T, �<�<�+�f�u0C4`
+~�8��#��� 3��@
+HMt�$p�C.���
'�
��B����79LE}b��"&����+̪v�1�{��1
��v{O�$\�..� �A����t��0�\Z�T,W#�@����
�3!d�>lp�)��#�U��'7�|^�
��<٫

­�m�w�pf�
�ӌ�X����i�=��
����g�^\
�eZO�foV�Ȯ�K�o�N9��sh���o��{�Ձ~��N�����p
+���hpl����/Fv�H��J�3D�Y�j `��H
+���^�a��u�Ȭ����O?�"�,�����8s��V�眧 �z[\B�[j�|QVAE`�#j$�o��*\DW�����{o��u�?"��
+��8��W��b����zV��*�^)xl%ڕ�G� Q2m�.�S���>	���n��G�	�uY�|zq8��3Ј
5C�vr���+d�zf�@����
�(
j�nè
%
>��IQ�>�<&t��IX
�k�,�^\�3ĠtB˞%��
s�h��y'-�������>�u~-�˨�p5��\�����
��B^'�m�A%l���=�l�0�����G�.	h�)��4���E��tY�>;	S
�
u���~{�_�
+����*[�|Ld�v_i���譝S�c��T��=ـ
Fl\��������©�2��(U2��rȥ0��֣

c�)�IV
ŀ_r�9$��Ĥ9��
+W
��5ZE�˗��y��N�h��`�q��E#�)�m��#�x���
��?l~�`3?|w������}4	�&
b����3��0C��`�
���Q�r�@hbd��ĕ]`.���-�o^U>������麪�ٷ#kr�u
�U[�F�ټ.'�޹�D��m
nV� �vb�@���d}[���9��;�Xf�;fH�!��
t���Z`��e�it�����(�
�1
��3{u8��=�fU��
+�`V���#e
��T��8F�
l��q�L�W��~/q�~�`�㌲���ȃ�5D@&�D����w�
��͆��_#��������ڤ�Y̤��.����l1	*�S�W�����&�4�c=L7{E &��������s���
�U�? 밐 ]H柌e}0�n�<_V�#�
,�i���cR``r�Ү
;JF��{R�F
T�ن/֟��
��
䭀
+��
i c�
��f�^��5WW�V%�l9
�옐�����t?���\r0�_D�۲o$ݟ�̀��X+Xy
��݄��A���X�Pu
G�f�Ք�P��o��e%d+����C+a�W�Dq�_���k%�qF��/"��+�
�H��DH���@S,�s:�T�zp=*�7���}��0�I��z
��U8:�2�#<e*��Xޡ1��,���8�ú9�h����W%D�>��֐g���zi�IP�U�M-�H�	C'U>�V�*���j��,�65+xL1�)o,f�&Ţ7
�VD�C�
+��1F�Rh"���409������mb��cZLԦJ� 
6Y��F��U%�����¬_��TX�������e
�\�:��f-�z���y��9��ȅ�!s��͛�\��ծ����Ĝ�4�7����X���q���4S��(mA�A{�w��iO���ܞ	u��3*�z�P
��y�n�A ��l��n���Ɏ&	� ��{k���0��:V���ʱ�*���R�
$��*a�i87����ϰ�ΉP��5
��pb�=fzm"v�.�!��*z�g�=%Ϙ�w�W�����gd'0:�>�����"�q�P�YXbL
�I�c�0օ�D����'��p��ԼW�{��Ӫ��H
T��,V͍��},� �
�M�6x���桘��<��s���wc�
���zZ@<'�M����)�/
�3M��bPN�8�^b1h�'��+�/�8>��/��*֐:��n1���=�n�����A�܁�服�P���8g㈽����w�E�6��������l��6�A&e���0�k���8�,�v��Z��~
����O��@�*��b�<��N�̓�e_�y�v�|�n

TZy�sE$ŭ:��ޢ����g�C� [...]
+endstream
+endobj
+2153 0 obj <<
+/Type /Page
+/Contents 2154 0 R
+/Resources 2152 0 R
+/MediaBox [0 0 612 792]
+/Parent 2157 0 R
+/Annots [ 2132 0 R ]
+>> endobj
+2132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.747 663.778 224.218 675.733]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.6) >>
+>> endobj
+2155 0 obj <<
+/D [2153 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2156 0 obj <<
+/D [2153 0 R /XYZ 86.4 289.364 null]
+>> endobj
+2152 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2161 0 obj <<
+/Length 3222      
+/Filter /FlateDecode
+>>
+stream
+xڽZYs��~ׯ�S
+LY��1�T
����ͮ6eW��~�IHB�l �W���A��Yy����tO_:����Og?ޞ��г�$������h"g1O�lv������s�TDo뼸��
#��9����~��Z�����=��':*��s���Z�����&�
~r3_����a�������������^1Rϖ����lo~�Q"3�j�mfR$���z�8{sF����PJ���I�I��`�J������C;�lT�V������3�0�b��{�\eo��
+%�ʲ]A0ÈI��9� �k*���ۉ���%�F�c���<�
]3"��7Ӈ��*�|����sm�Vp�X*�^&L����y�@ɐ�M����#���ΙQD�Bp"��2��U����b�v���1͢ۇl~�c
�m�e�5∱��앋[�_���
�`N�4�

����E���L�L�l��AGŇ��I���� �*m���%��	؟�F�
��EMv��ld(�s�o'0ᖼ�̭�wD&b�D&� ��∌�ڽi”��\e��K7
�Yٱ>�q`�K��|�s
���]9������X�"��A�H��#��[�y�4
{ٔ�)'���c��bW�_'� 1�v*��X��b�
��M�l�±�8W
+�`��%�hO�l�Sb�r�!���W]�uS
�Ӗ��8 �lhA�e��X�б�^.��gEV�����	��y�e�_d��eEٸ���2Q�~,��Œ�ޡ��,<l�z�
�D`(���5�G�S~¿a�t۔�����7��@0�9��4!�o�@�G�1�q
3�M puD�CE
�€�	,M�TE$����A_�S�XEu�~���{ht}�v��xWV$Y��;Z��������8,0+ҏ��
F�a��*G(�Is��e
����;@��N#�S��I�
-�YX����t�8U�@����|�P�u�AFi�H5
+���k���(�� ��ս�7�'��%�(�F�Vq.��~.�ڬ�3/!0�
��<䞻eZga�?�h �X5v�
��m�[��$�[�^���t]���G�v�,27j��cJC����ǂ���C�
  %Zbn h�f���D& 3f����|O
� ��G�Jzh|���y�����D�� �SP��Z
(_��
ȝ�'(ą�vS

�3�������i��
�}��g_ݥ�`x���5 ���LQeK�So�O�w(��#>�/ ����g
P�Ҝ���Â�@� $1��^��Y�N�U�OAU�!a
P=dq��<K����
H
)�8HWṫ&��\
=M��
�ÅX��`@���;���)�
���(��A���
3'�'��*�S�r[����_��
�d�E��
cQ' 
L�O�9&uQviZVAƹDm+�2�j��
+���
+��
�mUYKQ�N3,�/�����.߄��m����U��%���sCk��$�A6� �BbQUeU�g�yy#W�� �=�Ү^�9�/���`�*�w�_s�W��
�}�|�҅cHl&�@mO��Ý��xd�8��M\4f��l2�wUƠYJ�<�R�C�RTC)J�V�%�*�me{b8n��A��|�SP|���O
�>/ �ҵ�����?�V�i]o7��'��
���/���&}�U�x�:T��]^,��U@��$�ҝ֏����-x���ˁ~�EO�+<9��
+R{xh\Y0�D����TiPc�l���
�~��w:
���(V]�A��}�n�!����֖#�u��VnE[���������<Q-P���
J�װ��A��OX��b����*J#" O�\*�H������Z�@~q��O�������M6�p��=��E++��41�ٱ]���e���m\CL����]��)�h<�ޗ�J^6��~B�#�
:�l�~���{v5�$��
�
k;�yXa3�a��	As
+žn#τ\�uu�E�-��Yl+���eB�n��%jgg��(M��p��,��kZ8��ۮN����Du���%4"fpH
�jcq��r��A�+m�$D#�Q~l�����w0�U�8�n��X5����q�Z��s�!(#�p��P0��w܀��'���	��Y�OY\{*+�Dk�l�#�r���
����k	�S����c	
���GS0I�n�wِ0���A6����/
8�~z����g���z�݅d�p_�E�~��e�����w�Q;2M�׏����� #D��
+ȉ3[P��<t�d�ﹿPtwt��]{_����v����n��u`�E}W����
֏=��S���5hr��6��_�
e�{�A���qn���W@�P�Ia��ڴzt�n4�����"����m��>W�c^n��:ߘ�v��l��%��Dh:�����	F#��+I̽U���f;F�U�����S�n:!�6��\ŻIjo�
��z}q�
��=��l�@��{�5�G����P
�|����Ľ3��V0�\%�.@� >�h������3�Z�U�)!����� c�	)�D^Q��ǿ�@b��0f�6�ܖG�J��)3aȃp���zP	6�< �
� �	l��z�f�o�p�b���E�짝�b�����(���
�M�*�3��@���� S�F�Ti߇�U��V<�H�x{qq�X�u��GH/#�j�ֻ��G�o�I5���T��W��
�
}%N�p+��~��m�h"p�I�B�Ά$�����'����<sf8�A‡���?�2d]�O*���z��ƀ�ҹ [...]
�ͫ�ߧ�	h��$O
�j at rqu}(���>�X��	 '_]���/.|͋�3����E���‡8)Uv��a+Fշ��A�}�o޾�|��
[	�� j��r�R�'�f����Em�P�$
�p1����=W7P�~?E���O����	D���C�i�Bh�����E�NQ���t�j�����	���^������1F �z)�l�����,���7�8X�+@�D�KT.?M4�e$�S�Ua��'��q��t�2�>o
�^�����Z::�'����C[��"o
+��x�^�ѧ�������::�ALa*
%�no=��9o
r�s^���N�o��
+�~꾆���K��
�~?�q��E<��rO6|}�c{�U���CΣS�s� ���y�}�5�M
���� ��4��3��7Xio�
�&�U���
���N�C�ͫ,|4ջ������wd��p�_��t�
+endstream
+endobj
+2160 0 obj <<
+/Type /Page
+/Contents 2161 0 R
+/Resources 2159 0 R
+/MediaBox [0 0 612 792]
+/Parent 2157 0 R
+/Annots [ 2158 0 R ]
+>> endobj
+2158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.85 513.951 160.321 525.076]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+2162 0 obj <<
+/D [2160 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2163 0 obj <<
+/D [2160 0 R /XYZ 86.4 701.138 null]
+>> endobj
+362 0 obj <<
+/D [2160 0 R /XYZ 86.4 561.738 null]
+>> endobj
+366 0 obj <<
+/D [2160 0 R /XYZ 86.4 389.892 null]
+>> endobj
+2164 0 obj <<
+/D [2160 0 R /XYZ 86.4 302.737 null]
+>> endobj
+2159 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F38 773 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2167 0 obj <<
+/Length 3061      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�F~ׯ�����}ػ�夜�)�dWm9~@HHB�"e �����s �E\�v*�!`�=�����<�����g�^���;&gI���z�%�3E
��̮V���@|�`�E/7sF�"���"�/H����k��a���.K��<J�F�n7��J��F�f�nn«?�z�}���l���&O��#�%�>׊D������^\�}8#� <#��\Ζwgo���
+��0È=�����83���zvyvq�� �t0F\�!:KD�(5(cfR
d��9�:Pp��u}
RZͤ!�(�����*�>).@ȗ ���]aC���<��
��J�S��*��%GX���x�vs/�i-_Ĩ�'n��:eTD��?=��
����"a�B�
(�``I
��u��������%w��y��}�]����������i.(����S
O�<ɗYzom�����I��[ka�f�Y��Z�%� �J!
О�\�H��w�L�/pZ%Y�q.d�qNu����᷸��(L�����1_X�^��AF
Ϸ�[΂1%�b���F|]$Y��?@x�\&y~�[��~���:���ȅ�"i
+�+
+j����Ps�`DLc˞e7��dc%S�ᣔ����4��L2�$��Q^���9R
�Jyt�SU	��X�<ҪZ��m������L�X���Q@j��
��0���?-����u�=���Y�1����CP��z�,�"Y�{�Yr}@�T74��&-�3�
+a����Et�8�
�Z u]:�b@�C�8E�Y����
m��_[�F�ً�.\Ņ��t�.��n���"�]
���(���
�x��P�|!���l�/M���#cA&��zdk�����Tvy�}��(	�!ص

FX�)-nS;MB�
+�f�=�I����WL�Ʃ�T���:�
��&0$�k-
j�/����4h�u�:���K���9��X�c
qnF���R�������nz�	\
����n�Ui�.�-����:�W���BDh,���)���l)��BY������DK %�ip�o\,;�
����o˲��[��vwi�{��ʵ���=���1���0/fx��z;�Ӎ����6Ry
`�����~W��Au�i��m���{��UZgo�a:Wn}{r����Q��.O�v�&v6D��
2��P�O �]�^〻Z8��F;�2P)�P��5 ��w��¬W'�9i�wJ�o7Ii�O����c��z���@ń�c��h�Q���HQ@�����_\^���r�FJB2�x�	��'+ц�o�Q�醞�����a�&�AB�)`�%�J�?���/�c��I��H���?�4
!B��YUvq�uUZJP/}�2"!&S��	���ʀ[�b �T���.%��� �>�yu��t\�����j�A��66�I
[_
x���O���IXBH$�������;�7�ϕ.��!�w�\4ɂn�!n�K��{.��;�����q�sc�����$'Ge?� �Nj���O�E��Ỻ�Cơ��"�c�v	��4]n�2�f}�����R: �o���m��ّI�j9�i2=��?��(�TP���
+2)+��u�@
�{dh3 _���?CA��vlߦ�z�-$.�ՀH�+����	})��-]��
����3�
C�͘�i�u�?���I�}��ɚm�,�G馝�ś��/!�"�^���VJjO{�}م� ĩɞ��H=y��i���}��}pI�IU����`�O�
�G��Dev�9Be&`Z�L��Ր�'�[��;P���_��$G��K�����)b�g���J�MTD�h^�+І��O�J�z��ۧ¹���Óx�o��>5�;�ߋl#��T��Or���>�I���O`{�m%�,�ֿtc���a��D�.7S��6��nn[�*���Ǿ��N�HO��"ʪ
2ެ�A0;L�1җ�r$qE��F�ku�qЌ�m� ���?�%���n����pώپ��G�e�ߊc=;f c�
�q˰��!�Ϡ%�>�b�
��uL��,�:2ԭ���X����Q	���Hs)�n�ߊ,);vi
.F5�(E�fad\�N�c
;��i�
��뀏�]�քx�����{^��\��M��7�v_`^6��w�yኺ5����(�m��������>��CG��ȡ6
UW���m�1�\7z�
+�%%J��W#�35�B�`��W���3���sU����ʘ�[��^��u��koB�g������< �1�
\��_��b�2�p���mg�˨�c=

�5�
0(͛:�h4xZj�]H���2
�ַ�����U��6r��'?���(�T0Ϥ��G��G��(��ʽ#�˵(�nm��fB!�:65��rm7j�ݙ)�n�����h'V��r{�QnK���W~\�ӗ��u����J��jE
�"��߇�dA0=�E���)�rK�r}z�/���j�Z�1
�II���ԓ��F��qXŘhIM�ӵ��
;
�`	x2p��̅l6�1�?R�X-Uf|��rT2�� )�����,C������ws��q�7&[
�x��ި(m��S��4�x��w�.�M0��ǻ��HIŏo�,����4�Fԃ)��?��i2��0�Pn0}yyzA8(�{_EXA�L�̹�j‡=%�
�F�" i�E�`O���F��LÞ6�
j��
���X|��]��k����q�
�K�f̘�����!���v� 0�:ymA�����b��K�F���u�b��k�^�)H��R.�%ذ�j��ʹcO` ��t)\
t]sD��
�,
�NQ��:PԵ:Sq�k���������*�߷E�ü4��F�������FY�;o��D�(|�
ȄG@���3�G
��K��m���IJǖ�����L��k֍qo����U5���!p�~2���lo�sYV>M­S#�F _;5�,�
��j

N�
��@(>�!���gu�ğ��ED�(�
��"�����E��p3
�a+�=s���G��y�fA��e�[�
ɾ^�=C�m�ԣ��葅�ծ��#$ǎ���� ��QD
+endstream
+endobj
+2166 0 obj <<
+/Type /Page
+/Contents 2167 0 R
+/Resources 2165 0 R
+/MediaBox [0 0 612 792]
+/Parent 2157 0 R
+>> endobj
+2168 0 obj <<
+/D [2166 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2169 0 obj <<
+/D [2166 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2170 0 obj <<
+/D [2166 0 R /XYZ 86.4 406.478 null]
+>> endobj
+2171 0 obj <<
+/D [2166 0 R /XYZ 86.4 175.279 null]
+>> endobj
+2165 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F14 1030 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2174 0 obj <<
+/Length 3051      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�F~ׯ�#�e���
��#�)'�R
+eWm9y�IPF�"d�����s�"H�6�[�'���{��o���n#
�p�����WLDiAEt���@<�T#�Ht���DŽ�ɔH�Y�v��o'S�x|>!�	#�/�3s��ˢt�&Z�E�u�h��
��,[o�*��W����r��
69ȏ7��o~<��9�|F`n8"a.	R\D����hO~�0bZE_��3�(\������k��5r�Z#���Hh��n���@x����	F���v�o8�flO*CJ&aL��ܐ���ʖ2�RM��=��8��a³��[}����r0���\de�e�$q
+O�}?�]�+�
+�p��
+��̪m���Y�_��R�V�eS>�l0%��8#�
�^6F�??��S��ʏÑ@Z2e�)�PM	�:q�7�F�&*j�1vD=�uf8e� �H�c�^[|z������ �X!
o)��P
3D�
+!�wc��U%�("�S��9z�F� �h7�8&.��E;J��y�6w�4_�
�


+5s�q���~[��Tp߄�6���_.�
�n�ƕ�+�D��]���ݙIl7`�6�������V��?O����A�`�K
smfo7Yٍ
"�v
+.�N;���|qo;K��Y���SH"�z3���F�D�u�U�\���C�ڝ�rH̚�0��]��~Ȫ�m�0�{��
��HS��];�b��S,_
L+J1�T{S��z7
H��h�!F��D�X�V�~���=?������<a
K�$�6��<���0�AU�
)��`3
X��(����QOZ?d��̊"�G�ϗ?(�̼5�R
��Uy��͛���s� �H�Q&C
+A۝�]v7�W�0�����t3�9 ��p��^�aPY�z,0 Y�����H
+��M�(Y��Hz��P$2��QTJېꪜ]^
�Q�@�֦~5�����1���R�b�+=<O�G�rwaߪ�t���ĕ	�G��v�{����
#
+��G�3�J��//Nr��2��,�_d�R]/\#`��ޮ��0��>�ʬ�t^��bt�������Q�x�߿��ّQ�*�l��*���;�� ��S,A�����]5P�u�#Q�Ak��	�P
+�Q��9�;OW��R��`:�!x0a]
��E�ǀW�-e�>�4?��}�W���� ���̕Ð{��P"{�-��m��?�� ��'��
�Q

+�V�xt���m�?����ǟv�="���w��@��wA�wC�/�uҒ
iEP���ŋ�
!��[-��*�
v���‡�`�O�h�
�G)|�(��1!3��2m�7��@��
u�
��ډNQ(I�h��,�v�`G���
j ��r,A{O�&�/�U^@I�d���߸kG �E��c$~�ں��n���V��}�
� �>�n�&��ަ'�� �ڣ��˄�z��d����/���f�4��Y(!�]�hJ�
H|��R�?�V��-��y�NX`R�b�S����ٛ���Q��wj�M�
C��V
�9UΥ
[��
n���=�*O4J��T�r��V;�#�K!
��ͦ �/��i
%�^k�����,�s
C�;}}C����S
��U�>�#�{�sȿC�	ƚ(��D���
��Б{Zm� ���5sPP�=� N jXg9�j?s3��b�zf����7�
p��|-B�"����>$y{��n�x�Ԥβ�

|���p^�Q�+� ?��-�˽�_?f����S�_����7w:9�
��hfs��DB������ʵEFf�€c�MeJ�N���.��xSYP5W���+
>҃��q��
D|L���M�
��zYKz����M��^L�p5Ԫ
i
ƭ�Y��

��1�ak��u�f6<�^
.�ͪb��^5�ka�dR�����Ӱ�w��֍�)�6Xl�隢����.Ȳ�]����gB�w��.r��Fb�6*ڇq��Z���+���!�m���q�U�L~Y�n��F�=A;
+���X�LY%�$cP�F������,�|�����|)�ſ
wcvh��"��t��W���?�Z�X�@�#�uÂ�ҟ|�G$*����FPC��o��?F$�SL���N���}6�hI�0�;�"b �����Ve%
�hn�\����%���F�>1c>���
��}�����Pe�Y6T��ɀ�_�^>F971S�=m�x_5\��7���ڻF��kx�C�Ýb֭o͠��E

+�f��4�دX��sB|fi��L�|�o��9k��
=_#�XT��w���Z =�Q�%k^���fx
7Mi�2
wf<g~
$�Ϫ�G�=��l����!�
+T��<������;�%�~�0n
��0����F��?����ø?��ND�8����q�
�(��'=c��'=
�'����kd8�a�y
5��(�FR(����
+��[
+����
�/po��*�l�K�K���L�����g(
QRj�B�gHΆ�,& }]��娚�VG`������r�Ze�n�bu
z�>i`�ԣ�P�ۢP�:GC��ږ��f�DMo��4_��!�X٪����!!8�b�	b�P�|=�}~��0��x���Fd�u�hjEM[�v�1�͇J�~X6�GF�k�mp-:��yЯ͵�N�����ܭ"��
+�ӱ$�ʲ$�S������5���̨��09٢�M���,��
+��a���o�T�5�-��;�Y���b|����<aCb��/j�e(��
�ÅN�����
��!r����g��71���~��\Q���sAž<��5��=���[�0UL�f�\��u�.��5�Xf
L?�.N04V�%5|q��`F�3�7���M��A�X0�lr����?�c[z|
�U�<D!��
�:-C��j};k�~m�;�m�5i\���D�P��������ݓe��x�'�r!�F���,]
�rܜ���DG�c
���wɥ:�/^S����)O�#k
�M,,>=&�ROy�e��>P���9�a�DI���G�j<�=�L�y���
a��r
+�[zD��#����|ǰ|�p���i� 
+endstream
+endobj
+2173 0 obj <<
+/Type /Page
+/Contents 2174 0 R
+/Resources 2172 0 R
+/MediaBox [0 0 612 792]
+/Parent 2157 0 R
+>> endobj
+2175 0 obj <<
+/D [2173 0 R /XYZ 86.4 726.045 null]
+>> endobj
+370 0 obj <<
+/D [2173 0 R /XYZ 86.4 518.994 null]
+>> endobj
+2176 0 obj <<
+/D [2173 0 R /XYZ 86.4 460.372 null]
+>> endobj
+2177 0 obj <<
+/D [2173 0 R /XYZ 86.4 178.881 null]
+>> endobj
+2172 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R /F38 773 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2182 0 obj <<
+/Length 2395      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�n��y� [{���VR���d��� ���Z
+�P.��o7f  R�vs`qLO��n�7
�u�ϫ�o�:�H���V��D�GD
\-���"r6V�?d3��*�)�*��Y�g�F�r�7��m��2L�B��Y�n/�{�0ɖiv����U^|���b�n�IV�U� ���ְ�15�p�������3
Ѐ5V�J
,�������P""|���RD��h
\��9�^ tW���IC`�@G�0��,^��? S�X&�¨�3„m�0 at S3)ޥy������˚ps�o��}
��
+�S���E�
��=
+?^�L�3��x��7o��]��͹	�$s�r�X$e�ڬן��2�H�x��s�76�3��d#�ׯ�de$Q�j4��?IV�-l���j�?��<@4��$D#CX���۟~�
fDŮn`moWN�4�Y�xȗ�>�P�5��
n���|�%w�h]~	e�9�/�a�f3�����GZ�$%�5�FF=�P�v�q�'�72q�7jJ���x#l�l�Yy=dՂ�iH�r�B����Ř�KM,�)/��n�D}�����r�x�fJ�q�,��_B҈�	�i��Ÿ�d#�]�o޾x�(�i�����aڴ'|ڃ���j�Ow^m�Q��:jb(�Dm����>B��f�tl��I�
ы���#
+�����I�+'�ɢiv���uR��"��P�Օ%71j�F�Mh"�	C�-��
<�,�Q;�łHuP\6�0eqByk�t�t1~\���t?qA���>HO����Yt���V�θ�f/��z�7�L��gW�
Sq���
�oT�	Z `dT���=Š���=� A�NW$k8ћK?���z
+gc��9�P���`���UR.�����g��s���$�X��d�fU�'D�u�Qc�
!�����҇�E�e�
)��x
n
��n�W�dȖ��r�䒯7U�*��]0���|t�
�I��7���^7��ġ����$+;`7
&V
�D�	0��Q�� �C��mZ��=�_0Ӳ�Kgx�ק ���v�E�!�A6ߦ�z+�[��Fl�7�<	X�	�[#���/�뼦�@��O�,�D�
�l|�X���a�����}��	d%+ž�Ҳ����q�&�w��ȋ^�g
�CI��	,��~1�Q�$
��Q�<����U�N��5�wuL2VM4��d�–X-gn
E����]���#:�4-�C�N�(j�<W�i|�N�vߚ\U��p��%��yJZL�)�)984eC=��d6��
(y����x����� n͙=���("��-13�]ۿ|����B��$-�"臭v��;(�F����&&j��%R7
�խۮi��0W�K���Y�a?�	L>ܧ;8~I��񅊫8�{����mǩ8�D�9a	�����6��L�
tl��@FТu�4�ħ����P�oK������%�Xa�Β��#e��unŞc��rTB<�TO"&�
-5G�S��]�I�"|A��@
h���y6T{6́4?�� [...]
+���ӷlw�qB�ρ>0A˶���?�)���(�z��������`�[� �l��QC���J;Ҭ�OW���za}��Ckھ,�F�[�����NX�MX�E�|vR�
�m�Y/��ڗ��$)��������΍�ۼ�k�
�~H��2w\�0k���i��{��E}���0��a�
+”��N���_
�/�Y��a����_m�?��™~j��C�U�+|����b��h.'����b~
+�u1�!����	�h��ϩ�?��dP�E�M፸�ǫ�)H���C��}���V����7�J
+{\��l��K�9�� |�H{I�"�����66��6B� &��cx�v�ͅ1!�
*��d�
~^mX�Ж�/�aV(����ݷ��y�	(O������]�p���pK"#�id����ڔ����^P���vwؔI���N�o��8��"(��)��,p����6�� ��;��N<�@��KS{���qN�Q�DqB����
M^Ǔ�� ���m��'
+���~�E.F�����T��8�a�S�	֔g0r�
*��S�<u7[����M]
G�0ֺ�N톧���7
V��:��O.�Mƿ@��R�8ʜ�
�JW.�K 
x���o�ZEH%w��u�~i��]k�ps���w��䮦Y=oQk�XH�}�3�k���.���
���
��ā
+endstream
+endobj
+2181 0 obj <<
+/Type /Page
+/Contents 2182 0 R
+/Resources 2180 0 R
+/MediaBox [0 0 612 792]
+/Parent 2157 0 R
+/Annots [ 2178 0 R 2179 0 R ]
+>> endobj
+2178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [304.756 136.365 327.227 148.32]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.1) >>
+>> endobj
+2179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.873 124.41 249.345 136.365]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.4) >>
+>> endobj
+2183 0 obj <<
+/D [2181 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2184 0 obj <<
+/D [2181 0 R /XYZ 86.4 603.386 null]
+>> endobj
+2185 0 obj <<
+/D [2181 0 R /XYZ 86.4 343.017 null]
+>> endobj
+374 0 obj <<
+/D [2181 0 R /XYZ 86.4 102.072 null]
+>> endobj
+2180 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2188 0 obj <<
+/Length 2494      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s۸~���S��Tq��C�8;���
G����#���$$e�����&�EI1�t���

�� ��$���_�g/^Si���]�b�$	���I�6�X
�Xʄ�7e��
�b�� Ƿ���^]��'�-
��z�E�,
��i1qF٢̫�!���'���"�=�9Џ����?�]\�}8��[��
G��h<?{�{M���(AT�����G�jD�m�ή���&�$A��.:�I�5[S�Q�ZG�*�]4�7�y<+_��嫑T2#,�����r���UW�tb�t������E(�2��ɓyi�Ì	;E
ɶը����aI�lfycbQ¡�����`V������!��$<?@�h(��
i9��w-�"L�za�j�"A2��Eͳ��
Y��j�y��?k�&5$�!
+��X �hG�UV���}�/����!8
����x��j1�LbLZ�
cFu�0c�o4PdժX�n�*̽�����`�Y��w��1����?�Zn��� ��Z;��!ͽ0WeV�`���p\������"���I��4]L\�2w��Z"�.������_��yf�Q���G�
CàQn��b08�
C�����R��:
�F*�h���6(Rrm�|�
����`&Vd�
vb~o5�̝��W.
�}�og���t#�[�d-�G%�B����e��(��-��c3�QW˂ȃ�e1�P/�-�쐢 )�'Hq�\�(�/��1
y���q�D�:���(�эѵ��l_�_L�,~�\�4$���[��y�m:�s$�!I	\��76B8^
���l�5CO����)-#��S�S�d��9C�m[i�W�>�T���� �&�
�[��9��������Z�U-���i����օw~�D�B
+l�+�(��
+"�VbIa��`ts~~1u� F�ΰ�ޖ6+�3����z���_P�p��}�������w�����[�fޭˬ��eȴD��+��By�?�r�a��#�R�r��z�k˜��A�̩%µ/o~��CQP�n+j�ơ`R
H\4��EI���-�筆gi���e�e�+�
+���y5$� M��%
�G7-��3��$L��@*aAۿ��4��L)!�%Ԧ��y�jtq�
�M��@QO�I���b��)�
V��
�Ś\u_@�Hm�
+m�
�X���Q��)�Y�G6A{� ����

�4��a
'|^� �8c����(�묬^�y+��&\���i�Ƴn�iʤ�q(ԩԟ
+�mK�
�I��R��
8�02���m�9��;��4�!O���hTԍ� lJ�#��g��n���̴U��љSM�g(�M�7���X
�٣8�f���ʀ+��
��!ԱM���"O�Ͳ��#9&$b	0� �
�� zP!�� �@ra�
�Hn�
B4S�S�x
�#�@NƦ��r�d��e�l�?��Eh�EX�Eh��`���1�g�h��ur�G%�L���7��X`��G��>=��1�i�)?7J�a�����4�M�ԇoRM��� J�aF�j3~5 �Jb��y�D�l��A�9�\ E&�iT��i/����w��O�6|��tV�����)�nxF$B�?	<�ȣ� 
+P�0�ij�.)``�YmMd�]�
-;�q�� &?攍��
й��pY݀��l�7gHF$��m�d�x�x�� ͿGS9e�<̏M�p��6�
Hj��(2[������ٗ�Z�0�d�!ev��Z&"ɯ��L>ia
u
+o�����
h(E�)"�l����9�D���,�M08&��X8U��ƕq�=jk=�#e�M���
1�ky�d�����K�_���~3
��l��US��̽�TaT�W��D���;��h/���R�
+�#�Q=�R$�G��>&��6��Fw=�"���:�2tG�&�$�8'�w��1��w�)���n+-Qsg�Y/�UV6�Rm♹�傔=yX�3�.ḡ�]7U
�J[�
+���T.
aJ@�n���mh@
B��;{Π�m�i?���Ë��$z��_�����p��p3w)%hk�)�2�.b��0������ ����g�+��:39a�M��mG�)ĺP1m�3�b9sm�ll��45�r�?=w-&�W�b����~H��\PrĠ��UHR� �j �< ��D�
�W=�P%�h�@j^���� �����]���V�b��4��k�lm��
���'�(�F=�u�/�@]��5���M�m����&��
yS�*��Y�0���[����;+֋Y��1���<���M��@\'�sє�g��"��]
��Os�ʢkC�@@U�����n.
���r�o.��7#v�#vY8=t�M6��^cj�(O���`���67%�q`[��
dq)�
�
�0C	L�e�����}�nwFh�Y���
���/�	�L��ˡ��Vo��-��e����
���o+���m[

a��=�
�JXHY
u���G���
�{m��1u_�	O�
+��;̿
+endstream
+endobj
+2187 0 obj <<
+/Type /Page
+/Contents 2188 0 R
+/Resources 2186 0 R
+/MediaBox [0 0 612 792]
+/Parent 2157 0 R
+>> endobj
+2189 0 obj <<
+/D [2187 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2190 0 obj <<
+/D [2187 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2191 0 obj <<
+/D [2187 0 R /XYZ 86.4 537.121 null]
+>> endobj
+2192 0 obj <<
+/D [2187 0 R /XYZ 86.4 372.965 null]
+>> endobj
+2193 0 obj <<
+/D [2187 0 R /XYZ 86.4 150.842 null]
+>> endobj
+2186 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2200 0 obj <<
+/Length 3798      
+/Filter /FlateDecode
+>>
+stream
+xڽ[Ks�6��W�Rv�O����gwR��c{rIr�H�͊D*$e���o7
IA�&v��	h��_7�dr?I&�����ŷ��bS�ۻ�VDLRf��tr���2�D��\���r�ٴ���-fs:�J���s�l�%|��9��i
mQ�����7���y�,�{?�t]��	g�����eS��#��0^�N)Mg��~qy{���
$,�j�X_��[2Y—�'	�FO�l��DpC<�&7�.π��=�2��T9>\�3\.��Ǚ��l���z�$�_�2I����U��ѧE�&	�0�%t���]�~'&,��5��e;L��X:������4F�� �4
.��p~*	l�7?u�(=. at R~W@����9��P��!%�{޽��PpTj�)09��sJv�P�
';+�!%F2;����w�.onFk폂A�˰�6H�ڠ�f+����涛m�8�TV���� 
g����D�e�l�
�i���j���LMޒ��L%a�^
+b�
����e��� 2�lF���)���v*f<�/�5
G�
+Q�:$y���N�l�$�/��i���S��c��w�����&X��6��:_G�͐�v��,�*JT�6�;�;ܑ��Nk�F�I�a��U�%
+�
t�
{�H�:�
+Sq��m姘Rs���T�+�C��>�}syu�IE4���7]TBA��6�������$G�0�{,:��
����̀�h\�������٪�_�$NְS�
Z��A�`	s�M�>l�(���M^ϛ�f�*r��̰�ݶ\�5ط�v��;�4l���u��d���#b�9�q"���k���D�ށ��CW�Z��
��A��kNM�F�@,��
��9G6Я[:�����7�n�@PO���_�g�6~�M]��c��d�W�YdC
��
+N*��� �5���1^��x������CV.][���ݮ
Q5�	w�;�3�
��\	��	�4f
������6���[
�i}�
�QД3FP@�|*`���'NاU
J{��+�;�?UG�t���S�o#�$�����
|�6�Wx
+bk�h�I�N�
�K���*�w��T6�Td�LR��x�4�@�I�v�ʅ��p<G���U|���1�m�s���]d
���5ѩT�ܪGj֟���US�%_š��e�є�N4�A�3��8QRLLDC@�K��� �
��P���}
��Jm=/��z
4�]�B��N〟*:����O`m[���� 
�݃�X:���w�je=�S�ݑ4	vM$�qT��]

��Xo`U����<��EK'2
��8 �5���qx*�����P at g�}h{�dR�
n��{8��6�2���1+��[���'�w��0V�C�g+�ǽ���ꐇ�+��
םj�0%0Y�!
~�-F$�{�
��4,2�Vdm
��27xOs���b"R�J�T�k�9�#�a�u�����:>-���	�<���l5�i�*l��T�7�C�>n=V�����P��c�ǿ��@�l5X�2k��V������&D��/�*eq��
=�X����WY��DK~r%�­�Y͜'ܤ�������OD���S�t��^H��E��l���*)#D�7��	}��´�(��}#4v�
K&�aT�p�2��j�#��4�+���V����e4g�J>�%�����$��3m
�j�w�`P�����d��Gb����a�^mp��C^
+Ô�9ϋ���v���
�����%�
+]��pYL-ͭEQ
<�C�Q��Os�����^�b[�=E�q{K�
 rz��IM:#}���l�YB���7no	#�}˅8��͹����,��S��`m�v�L�ˤ0���{�Uܕ�xlNl�m���������-@"�4*
+rHdB�>�G�JI��x��D�O�c�HB�N���^T���)�3I*��PL�n��.�SȬ(�y�
���?i��܃ ��
�ɛ�a��9��b��p�e�S^q"��TMz}N��ʵ����ξ�5#h:��`��p7kDh����s��~J����\�d5Z`'��r ;T=c�XA�Lp�;�T�t�;��1&>�hBmZ<�[q�M
3�<�*?YQ�C��������;ua1E<�7K��irj;L�X���0�,�Gw9L�O_6Y���N�/����q�e~��Xk%���sMBk"��"0È"5[�
vd�M�@� ge'c��o�R���3����ggz�(zZ@��������C����3+#��m'�,�l�����z9���cM��T�C�/��)$�{�sNP&�_j
��
+w�(w� <y�^�S����mx�%rJm��B��!3
^��~��ͤ :_T�����@��׵�d�nB�0��,���S�rʧ��垝�!�p�5!�R���$	����cS0��#W/U��O�j�e-��u/֝#�
+V�h8Z�����2��z\�b�%�`�����|�9k�ʗ
�67*XlK�L�c��^
k��5ܳf��
9]Ą����j��q8m�OE�T{���x(f�L0�V/*�PMD��T`Y��y���o"T�� �5�
+N#�T?����s�mݕ�|y�cL�\C��0Ͼ�ڼ;�R=}��zk��G�i�|]ջPد�7hx������IBo$۶�/�UP:,��#xJW�1�sӳL�p� �M��/��<��h�}�I

�����	�X
+f����g0B�>
�B
f�x�f���8� �p*J�3!N�X�V�
��>����3���̱���Gt��S�z� 56����BB"�
?��qQqt�E�uܼ��yE���8�Rx�	�P�_�D(ع �Ù��_X�l�E2�QB(���֓�B��F
��ުl�/Ū���܈��fޛ�,������b`������g�����cT}x�_������L���`oE�Cu7���{qk����٢��|WWk��g
�
:&']<*�pX
͂��7�<6�c�\5V���(
wW# {�<��&��rѽY�b�/tg� 6���Z`�-B寄۲�i��$���{�^x�XJ�[��^A� k�
+��j����k
:
+'�|�Uֿ���.p����E
�˄������$�Ӯ!�]KVO�:%^��B�EI�7�E�.5�*#�{㲂�h��N/�X�����,��J̄rN���2��A�N�ų5�t
2��;,��N�~�
�;vC�{�>ϸ�#X�c��@�>�
P��K����*�<�f��nY�Bpw�G_<�Vd ��5�;���'<x�2K���먟;�ߏ��+��
+���SϻKDء���1�+2¹�?P�ޱ�d
�6�%
m�#w�E7�
�džpl2���2	��T�~����!�dڇжO��6t�=�]GAԍ�Htp�,���`�GKLb_�}>�_ �
(m���f1�G2P� D�|���� �HM�E�Oe]
����D��z2`P�W�+U�x}s�-b O�� ʙ=���t�އ�W�"�AD�u)a
_�����9��@�N�:����7�R3*i�F�����¸
���%���K� 7��r��ԡ��6��=�K _��������6����`�z�o�z�j4a��|LV��u���fc}\b<N��tU�yV�Fw[n�b�޸��}�l�_���^澻��������V�u��f�g����rH�;
��C�X8j��?s�ּ���"A\L���#�ƙ���?_]_��#*�+Šʌ=a�,���5C�F���	�m��9����G<�
+endstream
+endobj
+2199 0 obj <<
+/Type /Page
+/Contents 2200 0 R
+/Resources 2198 0 R
+/MediaBox [0 0 612 792]
+/Parent 2203 0 R
+/Annots [ 2194 0 R 2195 0 R 2196 0 R ]
+>> endobj
+2194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 544.617 104 556.932]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+2195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [333.475 129.853 348.198 141.808]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.326 129.853 388.049 141.808]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+2201 0 obj <<
+/D [2199 0 R /XYZ 86.4 726.045 null]
+>> endobj
+378 0 obj <<
+/D [2199 0 R /XYZ 86.4 619.576 null]
+>> endobj
+2202 0 obj <<
+/D [2199 0 R /XYZ 86.4 515.338 null]
+>> endobj
+2198 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F38 773 0 R /F11 1019 0 R /F10 1116 0 R /F9 1117 0 R /F16 717 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2208 0 obj <<
+/Length 3687      
+/Filter /FlateDecode
+>>
+stream
+xڭZM���ϯ�-T��&� 9lֻk;���8��I�H䄤fv���_ I��YW�$�
���uC��I6���p��{�oʸ�U�y�o�<6��8������i��O�Mt���i�{]���6�~��4��wQ��}�s���̣��jU}�|t�Ќ�s3��3�|�V��C�G������=���.ݒM�u��������ߒM
-?n�X�����7F����i���ow�bm�&5�6�
+���4Nm΋��
&OU��
(e��k��"���SՏMu��{Z)w��`�����b����^�q�d�oa����l4tgǥ��{<���
T��^��ņ"†5n�U/�O�ӥv5��}w��x�
pK�
�g,HUU����
�L*��#�#w�����xm�=�.�[�ILl3�wZ��y�T��n�݉{��:.3��s�
+�%�D���UD��E0¯*�&�金��S��
�ǎEg��ٴ��
���j��J�
��]N���$��d��X�n�LGMˢ�Ï�\�U������.�Q�R`�x�ʌW���r8���S�c̳�.Xm��
M
��.��H8���U+��3"�(�-�螤�����	��tm�;�FoX���`����
p��+c���3��z��Muh�alv��B{�[��#�6!��[C��p4��
�k?��I�ݪV�$��)aY`�5��K˭���v�4�8f&;�_���QI 	��>U秓L��\�b1T����?�Am���$��oS��]5�1�
ϗ����
�Ѱ�6.�|��d6Z�:��a`�#[7Wx��6�
�4$�bi�r�����g�E�'p�*�
n�
Ɔ񈚢D�:�Œ(��Dև�5 ��P�F�J�zC�p�ώa
M�g̠��C���F�-���XD�����f8������)x��@:�Di�H[ �>¶�\��Y�d�ܩf,���U��#'<�{c�$�)��
+�j�^5�xx��hޢ��t\@q۵��e����d����a�� =�@�i��|��$.�py?�rS�.|lTػ,Vqz}� ~�4��3*�ZV���v��X/�=��d$c�sA/�%�����tW���5�hr��Y��Z���_�2>��λ�۵�VR�85\`�V�S�h
L�5d炨0�ibx�l�Qtb�`[�zb�bB���a��	޿����z ��B����8ȀD�Ţ�`
+2�����l�4�X�e�⼩�Ǹ�Ɗ\�X:\ 8(��n<v�8b�xr+������~

��8��?9�̟ο�:�4?�
>Ϯ
�"��'l� �3�ث�XQ�8w��A�F<B����n�OXM�b	
PF��d��F�m��B}"R`?�~@Z�@g�|�З�؈�d"i��=��`�ie/}�$�Yս*�k�GQ �X��;i�sXc���)��
x�
=�kO;�%�B�Q萑�чx֪?,_��͕o{�]
%

K�������'�����.-�8��B�5�&8��&���ti�
+��)��h
p&i���xr2�������r�MJ+&�Th��
�4J�YRN�����c�#�,���r	�	 Sn��B��
jq�

Rx�S����a(���Û����"����JhS�",rU�"���E����W�OW��jvt��[�'G�5'��q����ȹ��@Zn�B�Z���A��k��hnu�Tv�&Mb'���{��q��/�a�XFf��C3�
+c=�����)b�0e 1@�g_��Ԉb���q/����]���a����>�+#:sñZ���}{��^RF�w(y!>'���@
œ�Y�ϕ���eX&D$�kkr�(G��_?�-x+;y�+�Qo���Ҧ
�J�Ĺ�_��s����_�{QQ5�*�F��z�����(�@�G)4`��4�r��a࢏N�
`|��>�?��G�y�v�A��N ��:^��_��ɮ�B�Q�����1�� �����=��FP�93���A[��_�]t����N�
k�4|/T��v��ND��}՜��{��8Z��#Y�\#���ʠF+�}ċ9����7d�kƔ�l��YS'y����7�Y��e���-tԑ�r��7�0�ԍ�'.�
,�#PI
g�g�
���1�E�=5� ꧘=�a��#����"q?���$яծ{l�֏
��A3�e�
8ǧfޱ�f���s	���d���u+Y#
��γF+�\ƙ�e�
C�+�P�z��[�%x�0��P �sƦ�Ɗ[9ATN��]5���|3��s��$��3[l�T�����,��A�պ.�~���%�V��2V��`-O
�b
ԥ��@|�GNx�e ��d ���!NWɴ [...]
���wlX�d��=�E =�~�D���
=��7�bM��ꈳ��
��ШU��W
��F<:�/�2+@����NQF�M��@�>G�i����"�ِT�l
ѵ~����S|���XV�03
zpPt�j0����� ��9�
���t-���B@	��e�5�'z��.�����Bw
��XS���U���ۂ
>���c�t����r82ttO�a%�&�}�2���C���> O/�S��D�nr�I���ܱ{�^��
�(�U-y-Fh%i,�d� �pJ�������M�p���h�l������L(&Wj�'0����Q�{�H��.�V�5o��U ���f��!�M�0��ˁo���
����7-9�B�/���A�����!}��2\����
���<t�QH����?�J�E1�yI��,
��bۜc[�
��g���4JfW��?���_QW��X��,��o��\0\��Nj��H��od�j�U\�E
H��������L�va�&ڂiD�]�t��f�<[��ji�X����9˚�A
O4Lb�3Er����{�
+���G�)��dAdG�
��#����[�_C����$���Wl����
'�����"G=��$S��<z������
�w{��E�^�������[~�'5�it>5��o�}�FN���G.ٖˋ�
's)���v���2����	Z~
VV^�QP7��Jt�~d����%
�%N�
+5��9d���«�5���i�<:�3��$�\��7�Y.�,�^X��y�5�z��q
+��P���̤�H�xLy�\4��H^�lY�*�'^���H���T�E��<���DnU�� 	>1
� 
K���?zmy3�>�oʯR�β �v�;���p\����2�����z�M9�H/
����G���/�Y�%� o���}��Z
h4M�������a�kĔ-9����Sj�����Xߔ9�N���Z���W�7.������K�,t|D9;��u��Z��U�՞��b�}���P��7_�62�1!�s��c��r����vN��T�p�Y�:]
��p�t����<�K������ێ.e��/4.�����l h8ݴ7X����@�d:un΢۔(�r0k׻[���,�&�y���/�����8� $�B8-�TG�H@�-�r�Z�2�L�h��8��5P��P��!^<.��ww���

+endstream
+endobj
+2207 0 obj <<
+/Type /Page
+/Contents 2208 0 R
+/Resources 2206 0 R
+/MediaBox [0 0 612 792]
+/Parent 2203 0 R
+/Annots [ 2197 0 R 2204 0 R 2205 0 R ]
+>> endobj
+2197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [407.103 632.493 419.058 640.906]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvodes_ex) >>
+>> endobj
+2204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.735 582.182 273.207 594.137]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+2205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.372 546.316 342.095 558.271]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.6) >>
+>> endobj
+2209 0 obj <<
+/D [2207 0 R /XYZ 86.4 726.045 null]
+>> endobj
+382 0 obj <<
+/D [2207 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2206 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2221 0 obj <<
+/Length 2409      
+/Filter /FlateDecode
+>>
+stream
+xڵXKs��ϯ�-T�����f'�[�C��8�C6X�,�P�Rv&�>�%J��T�s����u7���*[��.���
���]��,-˼X=lWu��U��2��v�����
&���*�r���?�
�Vu�pO��7MZ������k���������
��������8!Gd���f]?��?�	I>˞�v�G?��U�6e^�
+�֦��; �ׅI6�N���D��M��{�wB4�
�#
�d���<;D�*m@)�y^�y2 ���h���H9
r�a8Nr�8K��=�T�c���J\��c���Џ�_ZV#�j�Wu��
���)
+>�t�2�&���t
�k��#O�
s����:e���
̔ETX�8���8�N�qh��l��^��ȿI�u��&R
€g=�։
��|�Z�U�:����`�)
7�1 ��r�N
�LU2��`'�5N>Z�O/�߆g5��������";.�����y틿#�N;;�\���
�:2�9a5tG���L����B\%C�O
L�_?���um�;�z��W�iO䬒�uQ�|~8�<!vak7N�Ч�7
��@vmռ2�)�7���f���	��7ϋ���/

IWγ��	 6�]�������U=���#?�ol��GrR}t!Ɣ��A�/��A���8�w��΀�����u��9
+�e�"gr���E�C<g�`�te�3e�,Ku5���P��|z�G-����b 9�7�˘9�l�P�&
н*��R%�^3�
�nl̗O�TZ�dyٹ�Oi��9�1������F��s�3 ]\�
l<e��Y�N&0��*U�=�
{v2� �d
���)��D��6V�!�H!���2��9,��j�/Y��
�ٳ�ZL�8�ۏ�@�<U��rއ9ءx/���y��-
��"W��G$F�,~����ؖ�^<�:��a/���mA�ϸ��_2�]�)
+�
�
J����ic$���P(�# p�Ee�8p�# j$�h�E�y�C��
+)��L�����`�AA�iM��ʱ�sm�#�S�yp�SS�
�j�;1ކ�)�
Ci�Ш��߈
lT��F��Ώ��Fw��g�f 4���œ��^�+��݅cA�)o��Z�#�U
��	��o�"
Y!�my8�
�޽���"�[)�p :�ˎ����6wnhg
^�`��c�ȍ�
+B�
+�t��;��i��Ԝ@���р\�
b�(5W�eD��d>a��\@8$d��™q�*_�s�Z�.kO �p�
+�B1�v�	�i��R��c���8��8ȭ�8w*��]J㳌��/����t�f@�ڔ�4Z���2�L'����=�!�ГD?��E�b�.~7�
+#���l_rh_�:�/��e{�C�@Xv�/����I#N��?��.��w��x����,Z4��r�)Lo��5V�7Uv漪� )�
E�\A+����2Sեj�hH;;{�jYa(�!��ad:2���Z��`�6`��<d��c߹Q�w�ŏ��ӵ(�n0�5������X���>������.9h.������F��O
�*���_�
Tq��hv�X�,��8+OL:MN-N�u�9��U�f�l�� |ig0s^�-�qnX+���q���p(y�ýP����υ�7}U�U=W��3H;�kg�r�J��H�~�bJ��<��؂��:e��
A�!�CD��K��?�l�m�i���"#�Wa
����\k �Q�E��٠�k����^������o8@5�	�SL��0�c"��\��
y� �$���{�Pf��[���A�Nk�[ܸ ��vc�O\�^
��o<ϼv^��
��x��[
XK.��獆� ��iV�ۜZRei��x��O��^D�'����t��pֻ
 �
�����A�&x�%�Ȏ��|�U�Se������<'�d���;f�tw
�ƤU3k3^$o*��K�fq6�٣,����������
��Y��2G��E��%!S���aL��Qy��fn=������b��Qd%�/� ���w��X-�h��9b�.1
;y���
7p��zR:-��P
��OϨ� ZC�:;��lc-�,78����+��
;+
�q�����[�-�ٽ r�U��V��E�
�q�[S��o@
�����s�h
�f��>	�����
+c"�v�kP*�!�ӝ4=�}�+��!�h�	^�o�
[v�_���c׹�Qb�د5$�n�(������æ���g�~���W�&�
+�0
���g)�*�4',,S
]�5��^���е@���B���
�u�*�v�ԗ~3}}t
7?���Z�G�~
u2m�_I/_�d]c�����iq�W�;��"��7�ͳS��V�����/�LL�o%�p��VY�����k]҂#�y9s

�
1���M��x�?\�7n
+endstream
+endobj
+2220 0 obj <<
+/Type /Page
+/Contents 2221 0 R
+/Resources 2219 0 R
+/MediaBox [0 0 612 792]
+/Parent 2203 0 R
+/Annots [ 2210 0 R 2211 0 R 2212 0 R 2213 0 R 2214 0 R 2215 0 R 2216 0 R 2217 0 R 2218 0 R ]
+>> endobj
+2210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.733 409.607 457.436 421.562]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.19) >>
+>> endobj
+2211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.048 409.607 499.752 421.562]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.22) >>
+>> endobj
+2212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.855 374.253 388.905 385.102]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+2213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [277.351 338.347 284.325 349.195]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+2214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [306.931 259.373 321.654 270.221]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+2215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.088 247.418 395.062 258.266]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+2216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [318.419 235.462 333.142 246.311]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+2217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.665 235.462 356.388 246.311]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+2218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.283 235.462 399.006 246.311]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+2222 0 obj <<
+/D [2220 0 R /XYZ 86.4 726.045 null]
+>> endobj
+386 0 obj <<
+/D [2220 0 R /XYZ 86.4 701.138 null]
+>> endobj
+390 0 obj <<
+/D [2220 0 R /XYZ 86.4 324.151 null]
+>> endobj
+2223 0 obj <<
+/D [2220 0 R /XYZ 86.4 231.312 null]
+>> endobj
+2224 0 obj <<
+/D [2220 0 R /XYZ 86.4 157.505 null]
+>> endobj
+2225 0 obj <<
+/D [2220 0 R /XYZ 86.4 110.146 null]
+>> endobj
+2226 0 obj <<
+/D [2220 0 R /XYZ 86.4 89.142 null]
+>> endobj
+2227 0 obj <<
+/D [2220 0 R /XYZ 86.4 68.138 null]
+>> endobj
+2219 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R /F49 967 0 R /F14 1030 0 R /F36 728 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2236 0 obj <<
+/Length 2757      
+/Filter /FlateDecode
+>>
+stream
+xڽZKw�8��W���I)z!`1�$���>3��؝M�T!�L(p������^I<����§(�t�}b\4�������B)IW��e�("���D	\����q�ٲ�J����f+���<������]��uc�����
+7;Ky�����E��w���J85�k�v���/g�/ξ�1`��g""�T��p��O��K@�H����
)R��
��~;�N(:.�Ȗ2"(�d���)b�~K���k����O?�u�8����Ioʲ�x��:m�
��B�aa�<d�PZ��>�͝�Dv�zX��3�&�
7M�+��g�}��n
{[�H��1��������'��j���+'I]�&������b�Yv��Lw�����J�oQ�
�vvg��&}9T�t�
?�-�eQ��I���w�����b8?��d��
L�G�%>&}������F�B���]��:Qً��sA5+�� �B�ߎY�wl���Q�i���ZKr�/�RN�^�W)£�����r*��$�r`���:׿ț%����[�CE�WY��FVNOO��p�''.H�2���<�HR�|���X	�ѿ6y��U�L�`�`�?��^���k�.���d�;�<�3���|����&۟�Xټ&���z��
���Q`P�T [...]
+pۈ��F
\�7<w���v' ��;����u���1$"
�L�Z[
���
�D
+�s��3
�e��inRI$r�"��<k[I���w}#�T"�u�e�Z#�m"���
+C�[��
U��
�F�+�`�
��k��=d�� ��TY���j�x@
�-�㬾�\���i�#��h]���K�㽮Z�?�c:�����||�1�!:�kɊl[q�8�u7E�RZ�M�^ڬlk�[{x0:�)�D_n¶����%T �f���	�.�:�����N#��2�����9����Z��p�iJ����!��I1����I�����ay����Oq+bl ���n�-
\a�z<�I����Q�{@%����Y�
�YQ�S
L���y��c$����R�ɸ��CX�<�/���
�.ϖ)lR{,�H��&D&��FR&���4���.I8�G	8�F������Kq�"�D)�]6��@��%w)�,�"d��b��_�>�
$��pުʀRQq�ʸ�IBy �Y��:�%�d�(h��}�r��	���4F�ؿ�����~���y
+���0�K.G�7�+F���R�^�
t^�p��v
�-ZKd	�:&�Й�t��D1�Ɠ2�b*��\�#9
p���c�򄀋���\���P��
W*45�髀��(��st
��k�A�t
n]���
4�P4aU�����>
��
+��������3rj���"	$GO�����}
)Ęu�����M�kJT${V/V������u�C��t��`���#+
Di�HI�K����_W�V�
+�m_��,�UD���
�@�V|D0��
�
���
+���
P1�2���'���+ �4�ҕn 
w�X(z+��L�Xx��g�m(��\�����Ŗs��֯4,uu�]�E��P����!u)�=�=�UZm[�z��
fKI�C���A]�X�*Ǔ�
+`E��ٲƃ���"j����+�L9�M���u������ݳ=5)�-c�|/b����^���.�
�٩t�(�k1��t���Z��J�	�T��H�Ty�Q2�q�{
��
����ɉd,4c|��3�&J���Ia�6������=Ό�Ex3�IS:+�&�+hZ��q��hkC��@{�衴�}ϋ9�G*�G��p���Q�Ķ<M���X���7.W��Ԭ�v�.���4rr���
L�}{�!�i��P�.�O�D��r�o��;���M-��n摸�<T����Bg�f�{%q�|L�[Œ���,��6|�
۬�i:��MD��놔����1-�6Λ�wTug�`:6��6�K~��ͨ���5�����=�d�2�fm����
l���cn��@c�#�0I���ۈrh��Ng9B7�b����B��~73�D�
��8S��촣�It�ӧ��k;[��Ap6*�ӥ�`�5jvf��\�k3��c �)���&/ /+m�j�˱b�xnj�K�S7��N [...]
+��"h95�]�!��k�����UF_f�������<�Z���
��ڍŪ��+�w
+<x�6.�W0[��'Q��4�g
+�O�#���76��x���B��q�:wX`
m/�˓
A�~��ٹH�u]�gE��$t �A ���5�MC���;
,�kd�n�z�	�k%��wK��j�<�W����/Ŗ%`�i���"V��s-�O_����):o�Д[�{� ��gN`�CF����8}L����xb���x��1
���Gޢ�	!���E��ht ��J�^����"I�.���l at V����B:��'�{!\�[�}����~,G��k��
N4�;3r�vg��n֎h������ޏd���2�=��i"����w������V����z
4ճQ�x��E�+��i0���6n}���t=n�'@gsGKӦ���
�a:�y�p
+:�3�Ox�������~4�
+endstream
+endobj
+2235 0 obj <<
+/Type /Page
+/Contents 2236 0 R
+/Resources 2234 0 R
+/MediaBox [0 0 612 792]
+/Parent 2203 0 R
+/Annots [ 2228 0 R 2229 0 R 2230 0 R 2231 0 R 2232 0 R ]
+>> endobj
+2228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.125 486.315 526.596 498.27]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.1) >>
+>> endobj
+2229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.532 462.404 407.003 474.359]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.7.1) >>
+>> endobj
+2230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.486 399.997 273.957 411.952]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.2) >>
+>> endobj
+2231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [285.821 198.376 308.292 210.331]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.3) >>
+>> endobj
+2232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [468.683 112.058 491.155 124.014]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.3) >>
+>> endobj
+2237 0 obj <<
+/D [2235 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2238 0 obj <<
+/D [2235 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2239 0 obj <<
+/D [2235 0 R /XYZ 86.4 684.615 null]
+>> endobj
+2240 0 obj <<
+/D [2235 0 R /XYZ 86.4 663.054 null]
+>> endobj
+2241 0 obj <<
+/D [2235 0 R /XYZ 86.4 641.494 null]
+>> endobj
+2242 0 obj <<
+/D [2235 0 R /XYZ 86.4 619.934 null]
+>> endobj
+2243 0 obj <<
+/D [2235 0 R /XYZ 86.4 598.373 null]
+>> endobj
+2244 0 obj <<
+/D [2235 0 R /XYZ 86.4 564.304 null]
+>> endobj
+2245 0 obj <<
+/D [2235 0 R /XYZ 86.4 543.298 null]
+>> endobj
+2246 0 obj <<
+/D [2235 0 R /XYZ 86.4 521.737 null]
+>> endobj
+2247 0 obj <<
+/D [2235 0 R /XYZ 86.4 458.777 null]
+>> endobj
+2248 0 obj <<
+/D [2235 0 R /XYZ 86.4 358.059 null]
+>> endobj
+2249 0 obj <<
+/D [2235 0 R /XYZ 86.4 308.161 null]
+>> endobj
+2250 0 obj <<
+/D [2235 0 R /XYZ 86.4 257.709 null]
+>> endobj
+2251 0 obj <<
+/D [2235 0 R /XYZ 86.4 171.391 null]
+>> endobj
+2252 0 obj <<
+/D [2235 0 R /XYZ 86.4 108.431 null]
+>> endobj
+2234 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F16 717 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2266 0 obj <<
+/Length 3502      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[w�6~�����=J\��OI��6m���M�67���R\��̀7A�4=�`
 A�f�o�7�h��٫˳��j��Df�]\^/R+�"Q��Z..׋ߖV��N��%��e��\�eY��fK�kz��-��Е�?:*o�jK�wms���RgK����ߟ��<�t&a9�B��c��(6g��-����E$t�.�\����L((Ջ���Ϣ�v��nd�E
�
�I!K�:��W&���{*��CՖX�����?�mNż�9l��J�{\��o�d��1��&����[�6��$c�;���eJg�STk
��=��l����w�ʋs�,?�a߼]S+
�չ\��I.7�J[���
W��>���LSg1��b>�o~m��7m���W�;��&�����ˋ���Ҍ7�E�e��N�$���e�˷3�aT�_�Ζ_#)/~s�]7-Nl��%�M�7��j�b��JF��&[�@�l��JN��lA& �~!��}��5iu��
���$(�%'.��w���(���
l
�" [...]
��
�ϕZ��t�G�A�L:�ac��ö�>�4<�?(́]���u{��k�Z����`�M{�FJ�,���v<�X$8H��+�P�R����थ��e�8�Z��>�����{�Ɏ�	[
���}7�M����+���p:��(<�WO��BW4S�Ӹ�,�e�{G]� c�5=ڿN�
�p^9�4��2�0�*�
�y� ������ն�q�����2�7h�j�>ԌDsl�cl��Ǧ�վ���8��ʒDê��V���R'\TyUЁV5~=�D�:wp�ʕG
x^ RVۛ�X��۵h
=�k���uFMU���?�h��F����v!%4ȋ
L)0����@���:0���J��8j�]�ˋ����h�T��e�p'g�e��{]�7y��U��݇�0ҙ�ӗsqؕ�?\>�nB��
خ�3� G��ٴ!O��X?8��6<�Uqsj,=��a"��������O�%&R$���"at���.��*N���ƙk�y� ���v�m�����_h��J'��m�Y�x�� [...]
+�L��-U��y7�3� � v�3�~L展��VS?�!��g���ޅ��uㅠ�-�8�a�8@�>�v���KB����w�1��h�L��V�k�(�F-d���p�3O+���q
��ȧ?��h�Nj\)��hp��;4� �gF
q���L�Y0����'���C�ns��7�?+��d
���e�^W=���1���{�	�
*ߡ�S�I6��o���\;2�:�gq,��&�3L�
a�:�a0�YJ �
xq<"Pj���Y��U��(M��k�.;R��y�5T���:��������
e���C�P�m���x�j�
���B ���s,�`���
��!�p�l=<f�P&��ݘ$��XP���u at X����t0V���,
/\Lc�:�p~�@�b�=f�f 4�q�,��r#�a ���&���.V
d�LDG�'�L��b����
+�,�=Ǹ��9�.H�2ia�@�G�xJ_�
$�
�jȽ�iȎ,�B�$�V�4����
�"a�B#�9���.�¡���k3	��QIOfGEO]���
v����e��)j
Byx��ͻ�(�C�:��̳@�Unų������D"��0�
�b�~��eo����l��|�G�X�*{Rn�d�[5gp1p$bh�:�}iD�Lu����f:%
+��E�TXC�?�-'�.6!=�͈A�YM����������%#��铸�
���oOq���;F���bp5��x�����K>�H�S����i;�B���8[o�T�d�c��R?��ާ�>_�����,��9J�P�@h������w��]e����0%�,B;�ꨅb{G�`�%I�J��n��?�	L
+[���
���*#��^\��)`h�ZI�.>�)Q���]�tʮ*ȯ�`�
+����Q
�]U����X��2ڰ&z�
!��8HS�1j
��Ύ�!
��$�c�8�\-����a_m�r��s0-"=Q�#�����8�6r�鍜
y�
��S{�u`"�&�y�:�-F]�
�2�,u���\2G��:~��~�I]�!�J�i����i�lGA�?���A��5���N17 73��o���J��c'f�s�x�ut-'�t
+�oLh���Tn/Nq`��?:c��D<���zs=t`e�33�yr� n���2M$�8RVxhn#
���1����w��M�K����>�L=vK�~y ����Eh����
�3,�uI�0Ӣ'��4������ R��fW�D
Su�偅��<{Mz��'N��v�����mY�]���T]�
&��#��I��c9�
$��mQ
����n�
���n�
�}�Xh��:�S�J9Q�g�
{8at?�8�
�`���1z
+�3tx����zC�aC0F$jjo�2@�cp�v�

����8b0��{(`�[]�-f*!������]���G�A`a�Z�K�ZVV���pI�� �	 �|
�������4���p��n<
a/|�;��g��ӧ!��&J"��k7Wܞ\W�̱�p�kpk��fBc�&ME*�D����t�鐑0I��R�
E#��M��ytD�|]R3�`ƺ�%6 E�_���L��=E�Xz��Y�
e�t�k?ǰ~���K��?*��0s�.��*��(
��H)��
���_�L}�Q衚��d�- ~�CY���<�Q�V�>��?���
�����k=�O�W	�݃�5�
�%} |�/H܇�|� ��0�4{W�^�?����
eb��;�_�g�4rj'���!N�S� I/B�%�:o`v�Q#�s��a)�r�t]�S�Z�"J� �WrIߜ�;���.��跨���6�+���G.I�l-���E�t�8�V��@��7,�aUyG	����P�_�g�%D���pP�°N��.i_�@u��
�=V���0:95�� tw(���Z [...]
+yu�*��8�t�o���[��,��?��!1�7c���jݡ((�쪡�
�g
 D0��w�
���� �paIJ�%~6���މ���>���=1��u�q1Q�my7���C9�$�=��� O�S!�����<�Q�}sy�?|7�4
+endstream
+endobj
+2265 0 obj <<
+/Type /Page
+/Contents 2266 0 R
+/Resources 2264 0 R
+/MediaBox [0 0 612 792]
+/Parent 2203 0 R
+/Annots [ 2233 0 R 2253 0 R 2254 0 R 2255 0 R 2256 0 R 2257 0 R 2258 0 R 2259 0 R 2260 0 R 2261 0 R 2262 0 R 2263 0 R ]
+>> endobj
+2233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.553 676.287 216.024 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.4) >>
+>> endobj
+2253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.989 597.246 129.461 609.201]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.8) >>
+>> endobj
+2254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.008 530.713 362.479 542.668]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.5) >>
+>> endobj
+2255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.809 440.27 436.011 452.225]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.10.1) >>
+>> endobj
+2256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.279 349.827 293.751 361.782]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.6) >>
+>> endobj
+2257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.537 271.893 462.739 282.741]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.10.2) >>
+>> endobj
+2258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.367 192.852 405.839 204.807]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.1) >>
+>> endobj
+2259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 99.854 101.233 111.809]
+/Subtype /Link
+/A << /S /GoTo /D (Item.127) >>
+>> endobj
+2260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.31 99.854 122.265 111.809]
+/Subtype /Link
+/A << /S /GoTo /D (Item.136) >>
+>> endobj
+2261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.412 88.452 159.134 99.301]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+2262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 61.606 101.233 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (Item.127) >>
+>> endobj
+2263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.31 61.606 122.265 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (Item.136) >>
+>> endobj
+2267 0 obj <<
+/D [2265 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2268 0 obj <<
+/D [2265 0 R /XYZ 86.4 668.534 null]
+>> endobj
+2269 0 obj <<
+/D [2265 0 R /XYZ 86.4 589.493 null]
+>> endobj
+2270 0 obj <<
+/D [2265 0 R /XYZ 86.4 489.585 null]
+>> endobj
+2271 0 obj <<
+/D [2265 0 R /XYZ 86.4 397.205 null]
+>> endobj
+2272 0 obj <<
+/D [2265 0 R /XYZ 86.4 318.717 null]
+>> endobj
+2273 0 obj <<
+/D [2265 0 R /XYZ 86.4 264.14 null]
+>> endobj
+2274 0 obj <<
+/D [2265 0 R /XYZ 86.4 173.42 null]
+>> endobj
+2264 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F16 717 0 R /F11 1019 0 R /F7 1115 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2278 0 obj <<
+/Length 3367      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s��~ׯ�#�Z�^����Aq��[N-93�$	I�y
@�Q}�� A����>�	�b�{�߹����
�q�����^�|�2��|ps7�y�F�,�|p3�2�B�_p�������
i�����R
�~��~��ݲ
/��/�
��3��E5]O?N�4�g-F3�:|����o7?���9����(6��Y���_~c�	��8`�tv��ϛ�t���lp}��3�b��ʤ�E�U�x�M
��3�

���b<��F���=��,���rQş�7��"o��j�7��_��9�=!lp!df����x�����^|6[��#�0�8	/�����O�m�q�I�A�w��
+e��"�T�z�
+���QG�PZ�0��\�᨜���"�?ï\o7�0|��
� ����"����2P���
+'2��N<��^N���\I�D��,,8/���q��圈��.�	-8��d$���
+LZb��v4��[��i�:ع_s>+��u�f�	�|]L��--=e
A.�^��C�K����nZ₝�Z��v�����*���/��Û��v����.�ǘLY
��*P%k��
+K"xZ���b�k/�
���!�]���!���vn�
 š%��q
-Z�k����d�x�56���;�������
mֵ�
Y ���?
�s�����f# �L}
M	��4��]Q�2�����X�V��z�
���{t!z�&�e� ��n
W����\�;D���+~_T�r�J�T�u�
�<���>�u\pP���<�i��Y;� 	"T�fl�Q9�
<b��{@
���O�GT�&�����h�B��1|Z+Ȗ�
���1 at 0� ��Yo���(&
��
�(�� N��iu rq_�Е}^�F�"N���#���L�ŵ�'����»��
+
�ȔK3�����
�u칊3� Ϝ�钛e��02�b����fB�AcNb�
�_^D|U�-ڲ����	;�]yq,�B>�<
sBj C
�c6]| %��Z�7��_˫��m���gNa���l��b����"�G˵.��ͼH+5�A{��$��������)��h��X�bDm�0D�L�u|% �3�̚�����$X�_��[� if�ę�����½C������|8�D����~`���y�k���\x��	M�e�-���h�

A�m��MՓ4�
+R�u�m��� 철��l$3"
hBp/x�D&@�
�cu��c�>[.�� �K�"�(^i������>���zM��i���GE��j]���=&�k���(���2
�Q1�
J?/(Pi�Q��
 ��E�Eْ�6��B�
��
��oˉ�p�
��E1��ʸ*�0SnD����x�|Z��5`cΦ
+>K���/�H*
+zj
�+��.*�2�
���}
*#3�_�Ī𧷯�u��ͫ�׻Dm��
�@4�ˋ�n�C| �CV����k�E)2�,���^�{���E��YΛ#��*'�:���!�Sj\L�aE>$U?.��)56h0�/���t
^(��t
=	����[O��eQE�'��=�$�����)t�&E
�D�"i��Q����uTCY��N2�]��v������@��lSt3k�XL�=�{�ѵ&�lK�V���W�𢅫,�9�\� N��j���|�|>~4R��H��7�c�V>A
�s�]�k��G
+�9+�*����_�`)������_\_�?��'*�GY��x!��r�6�qQUw���X"�f"}��{`���2"��o�rM@��'�Ԣ @6������b
�C.kO�
�Ugg��0�
+ ��ł�[��)R����r��鬛�wՒ+�� 
�
+$���O�Z*7���bӨ�֦W�_��q�Ln_�C�I�veJw�I������G�?�uЫQ�g��j<��K�<��*J�_�'�4鷵��O�o�v��
�M����I!V�r4/���a��b`G<����7}
�A
�{��h,��HF�
���y�OUFfQ%�f�k$�;i
ˌ�tzRC7lގw���Y
e��`&���B:j�r"�x&P��RyΟNi5�C�uþTV0u���Е:	VPD��#S�n���¸��]-cñ	q276�;-�.ex��
+�G���ģ`�R?�n��W˰��a� mS�K�m/Q�
z�[o�7BmSӴ��h 
����Q���-�Z�6qA�S<�P<ӗV�L�2O��0�*���v����ʠ�n8"�F
�X��v�h�.櫴�:�:|�
]렺�bV���Xr�
"5pb�)��g���Q�*�is�ª:@���X��l��6��
�d.3&�v�b~�C��
�A,eXL�FU��bO/�m0j��v�WĪ�V�Y��6�邖ƛ�,&����.�����3gj��f���IU,&U$!<���G�E���ӂ7��{@�;+�t4��9ד�=�.Ժ�z�u�s=���[r{W�9كS��߼�?�_
��>�b�I��� 
�A|�@(g_��:��b(���`y&��
�qv����
��ZD��7��,�g"Uت���D�Ƕ��n+

��]g|���|�FU����;�Bt;N� �\
�Ȼ�
�����F>(�3���O����xS$
��9��A�0
���;mVZ,�/�Ӝ�n_P]{N� [...]
+���ܶY�=��h����H- 
[l�b���Q��u���}ˇw��[�{4/�SbRF�diIL�ۋ�R�>Iq��&߹���,�=�ҝ�3D�5ج��'H�ӧ���g�
�{n�
q�Zw:=q���7�I.%�۶�S�;{�w����)���×����� Z4
D�� �ye
�MiƿU�*֘�*9�m��J�x��b'���ֵ�Y����ev{ۖ��3�Lѳܓ�w��E��{��kT�
+endstream
+endobj
+2277 0 obj <<
+/Type /Page
+/Contents 2278 0 R
+/Resources 2276 0 R
+/MediaBox [0 0 612 792]
+/Parent 2203 0 R
+/Annots [ 2275 0 R ]
+>> endobj
+2275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.764 451.393 367.235 463.348]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.7.1) >>
+>> endobj
+2279 0 obj <<
+/D [2277 0 R /XYZ 86.4 726.045 null]
+>> endobj
+394 0 obj <<
+/D [2277 0 R /XYZ 86.4 701.138 null]
+>> endobj
+398 0 obj <<
+/D [2277 0 R /XYZ 86.4 678.52 null]
+>> endobj
+2280 0 obj <<
+/D [2277 0 R /XYZ 86.4 611.89 null]
+>> endobj
+2281 0 obj <<
+/D [2277 0 R /XYZ 86.4 300.668 null]
+>> endobj
+2276 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2287 0 obj <<
+/Length 3806      
+/Filter /FlateDecode
+>>
+stream
+x��[Is�6��W�i�5ca�
�T�J�qRN9VƖsIr��)�v7�!�r���= 7�b[Us�A,o��'��d��ſo/��W���������("��Dq��]/~[*�.����wM^_�����.����u���U[Te��b��?VEy�ٲuo��l��x(Z�|��l���1劉%e��۟.^�^�yAa�ɂv����Xm/~�#Y���O����,>�qۅ�)a��,�^��"�Γ$DHvl
���0�h��
e$I5?6��?���0C:�D
+QB�r�~�k����|N*%��+����Z|��������(�I
+��#�x�ֻo&�V�p&�����'2Y=����L0"��Z
++
�9'����9ٙ� �z��m����w�����D
>���	s�'oVu�C�}���RE����#L��#8j�#JA�#�="�$B�����-�v+�Y��ѵ�|���ڏ��/�g�Kf��>�߬�oAQ��?ԙݧ�^�Gf����n���-4(I�ty��BsPh���]�?վqO5�ۘ� e@[3%���bNF�
+�"c�_1`g6]���ܝ��1���1�S���ͣke�G��� H�/��n����pJλ��
.[�A�����Ȏc8����Eا�;�Su
���:o�u�̵��6����`� �}� �	Ѡb��C<z^����!$
��������������n���2����Q�a	1q(��"�	c�3/�e�d�
oLٍ͎h\��u��3��J8���Ix����
���$�v�q�\¿���a^��`*!s9O}��Va�p`�ٯa�
��7j���?5�l�;` �B�c�� S�
>d
�D"������أ$��ֽ��\�
+%�>w�?�����Y/�
K��o<��u�f~d=�g�-�)�L���sHщ��!\�����;I��6氌��ß
�yJ�;��
9���]�ɛ�
�J?W79��{��5�T;�IP�T�U
��B�sك�	?Me��
ܼ�
'E����6[��"�iPn��m�R����o�nɲj]㽕	�&�5_w/���
��{pt�y9�ʢ�H.:�(ZE�lE��j�'d�]^d���q�G�uP�)x(`dGG��[h�h>B`p���m�Y\g�� ��!���ѣOO)��.S���S/v��<�:�X<����J��
z
Ao@,��LJ�(�B�Q���8��OM�-6J��NƠ3���"4=Wse��:|8�b�s�g�h*�A!��m:~R1
�I����]A���]�7S�T�'�s�ȉ9����JQz*�g��iÛ��9z,�8o[�9$^1@���콧��s�~��;��`BǮ� b���C	f�����#Ə�|`�"F}>�P�b�/
K:�v��ڞu��&��V[l��xB��u��Kݳ�+b at eOJ3XM
5c�6-�4J6��A7 
�k�A
b�A�
+��z=�
�D� 73�Wh�|א6��C$tJw�5�W���Gb<o��
��
�͵EI;��3�
��JA���ZBī�š�1��!Iz�$�{i�G)\{�Z>RP��.�Ch��;�V��SkJ���}.��¿���ˢx���}�����Y �l��
�>�X͝�yۨ:_DY��n
l�r㣰��,����;8Y7+2�	�,D=���>۵�
� �u��rdx8�0`e�P�W����.Y\z�b��bǶ���g6�|j p6���L� �I
=�� D��pI$��Pu"��H�͉�H81��J�$y`Υ��u�g�	��	&g?�=�Fӯ�
�m� ��|�~��&��w�vMN�7�$:�f�}�🹝�վ��G0p����om�|�������9(���|EJq<����
H4��
Ҋ.�#�gt�-r����C\e�h`"
~�����n@�P:d8W�O�D�8
���~3M�7 ^z����|3���$kg�u0�E����h���/��U�T
�,y? �6�H0���o�j�5Q��TZ�R}D(�gU�
}ۘ�LL��|������GD
Nl��Q�N�'����9?��c
��M��>�
�:�i��
9NW4�4���^ 	��`D�_B�:�6��.RbD�tޢ�e�����b�\�C�����t��zW�v�o�(�w�m��x�ϛ����I�O����+Ƨ����'�����\�� 	�(;�J|a��|���2
q�����M><
+š
�xz)8��S9�'f�7l/�0��{�W
げ���
�
��'�	���6�)iQ���"�0Ga�2q~O�D?�E�.V�3<�e8���b�c��
�����,|3$
����<w=��A�VTX�!�kf����U�k�H)��
f�1���������V��͛��_E�k�J�&�:��+f
m!�) z��8z�s��a�_f�|���3D%z'�
�]s����,nA�~$��a��M�Z��i|�-���Nm|���yU���|

�
�����ĊCt���:�歋�!T��tt�^�R�K�Z��Mj�W�����;��3�+a�
� 5c�vQ0���y��*�X���}	�>��G�R$�)�<G�P0!)i1��T
P#�m}T� 
+��3�I�or�@
�v&�Yߛ�/"k����<Ś\=]���_�‡�$O�j獡��U%�y*O�u��I��a�u\��+��	���T��c=�W�����Hl���f��n�{��${�4��i���
"3]�
�|+P�_L����#���'��iF#ՙ�ȅ<��8�
���͜'�gm�zV����C��K�78�t2����2uN)C��)��썩��
���o��a 0Ǽ�6S$M�(��i3����:����	x��Wt�Wh�l���ua�{9�N!6�Lk(��"tE��:
�ӧc��R��>����>�_L8*���Ԩ�P: *��)+�=�j��{��COC��q�g�}��|�4��[�y��
��Lm���u��eˑFt�� ���x+�ᓢE�"�c2���"��d�2���� 
�#�q��X��Y&t��b�w��W
�Wm7��=
I9b	\S3Z��{��u.[4��P�f��$
������n��RL�'�9�y%�WlFu.� fREѕ��ҕ <r�,�V��6!8���f �B�����ް�{����jX�X#]Q�r�1?|U�a��"�u�fŦ3-��l
+F�O%>U}�D\*`�c���4��f)�W�tQ��bv*���o�=�����U'�u����Qp  �Wy�>�)‹c��������`�œ��bƋ���ۛ_"�C4�O�,��x�e����޼��� b
"�F|�32�k&��)����?�9�٦s9��.
#�p/=�{�$"�O�=��%޹~sssc
hĹO��QD�t�j�y���3�l�{J{���e�;��eWuޢes0O��WW����˲+N;�E/WY�s��@%N�Yx1�(�)w�6l�\�
+m�
��L��?6lK�|����

)��u{-�̈́0�_1H"���)�=��|�qJPK=.����o��}Y�UV*�}֧	�
2��S��U�A�\�]��:?�D���2M�
+
��-Ѹ�v��y�
+��c�u��k~'Y��j�81�|Ȫ�   
?�&�DI�L
���]�0V+�xS�	�
+�93Z���W�n�
�%1}�r�%g����0���K���
�m�[��.]�N����mDw�ty��/�v�m��l�n�]��W1����S,i at U �-���w��&Sn�|������� �9�� ���t�G�(�
���mH��
����E
+endstream
+endobj
+2286 0 obj <<
+/Type /Page
+/Contents 2287 0 R
+/Resources 2285 0 R
+/MediaBox [0 0 612 792]
+/Parent 2291 0 R
+/Annots [ 2282 0 R 2283 0 R 2284 0 R ]
+>> endobj
+2282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.565 486.684 432.036 498.64]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+2283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.325 439.417 393.299 450.265]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+2284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.679 146.632 264.15 157.481]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+2288 0 obj <<
+/D [2286 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2289 0 obj <<
+/D [2286 0 R /XYZ 86.4 701.138 null]
+>> endobj
+402 0 obj <<
+/D [2286 0 R /XYZ 86.4 520.946 null]
+>> endobj
+2290 0 obj <<
+/D [2286 0 R /XYZ 86.4 415.891 null]
+>> endobj
+2285 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F38 773 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2294 0 obj <<
+/Length 3803      
+/Filter /FlateDecode
+>>
+stream
+x��[�v�6��+���9-� �Ln�;ә�=i��"ɂ�h�
�TH�
��
+�!ђ
�d%�P������(
}{�����B�L`W��ۑVA4��	�`�����1����0b��*��'BG���_�;��o1�-J*��>Y��5��L�*������'�+O�0���ʪ�_��;:�:������󋐁��h�8���p4���Fa �
=�~�Q$L��4]
�p�M���E��9�L;R�,V�?����ԁf��(b�m
"`B7k��X`$�Ӽ�� ��� D5
���~}��M�<�>}�<TAhT��O��c�z�|��7F&�@�r�>�W����㴤�8�p=.~é��ưW����Uu��n�^"
+� ������R�Q��ͪ��i��Ϩ�55�i2ű�+a2
b��
�hc!<

g�O�v6��&Bq8Q1�0a���q
D,>`a*��>�= Q�.�
�}=��]�'��/�+���	��[�
�"�`���'�P���t�*������$��n�
N�De7 
�*"��΅��b&
y&iQU�pR�(�7P�
r:�F/@�d�
�� ����٧O[w �
q]��O>|��t��� ��x���%�=�C8d4gUM_�I6_�i�_lL�
�\"gmw�Ϩ��qڶe
?r�*�ŵ��)��u6�A$�&�|���tNq��c6�a�cV;�Lm�kXL��Ϯ�
+D+�;
� �S�ށRH��� '��:�p��=�	�Ӹ}/�61���m� p��D@7H�"	0�0�Ѽ8��� ;U�0}��E!��
_N
�J���|�h5`�S+�w��=�P�
+��
+��G	��F0�L�aD+�!aht M��_��.�X��`0���]��]D#�O4��DC�d���4P����SE�!�/Ϯ��;@�
x�&X�*��� OS�s���y��II��]��r5i�ZR�v�O�
䉾@j��@9su��]�e:-:r���
5��<-k�8�(8�Jr�x��dz-\< ]�b���"蘆��x� 勪[���
N��$t�\]�~��`���b(�x1C�=
+�S��A
+SI���`� ��0$c��<y��6�M����(���f('A�[���X�ғ��y6�)��Q��I�2�XS��9}.��!+V���E��
p�C�&� ��˪�

$s�S��'ξ�-?Q����՞O~�j�x�.�ب1���6�F�,��W�5���3�9�[A�Q�/�
��ʉ���t�}�л����6���ڰW�L�
��/O
d�G�	�+���4��$�ȹ7�
�
L�h� ��
�y�W����p|2��P�[p��#T�T~8�xr�����w��;8F��lSn]%�1j�ž|=�XpS�@Yō��Γ�!��-�׀�̗��nj�K*��[
Tm�B�@)Փ���D&"R��c�;a��
���?��:�D
 r�U��盡U�R4b�*��YkU֙�y)#�Z�X����/!�o��E�p@u��E�EZI
��&����:�j
lvV��9,�F��\�>���P��+p�,�
+
x,$���Ur�ޭ�rF���-��[���K�����p���M�
=[w<eb�
u��,�J��
+_�S�DcNHj�l	�ꖰМ3�ڤ�_;�'m�V�a���I�
M�͞Pm�'��p}��D$C��ʈ �M$2.B�4#�t��;��li������;�jEI
+4�\
O����4/0�pwO� ��8�U�� ����v���
c1�uWv�ܖŢ�B'���ek�>&��bp�/��� M]�
��ϽU%~�
���a�v�P^��=
7[Q�l�G�ٱ��
UQ-���(�wC(��[k�[����{�=�!=�!w@��2�3�}$evk7f6�W�C��C�>�� =�
�	��j��h5J�� T�t����Jʆ�;��RFa�뇗�o@�Mle1R��3R�pF5V�@�S�JZ�PVn �������S�%����Ȍ[��/C�t0o�A
4/�df�@�����EPm�oKvgX�'����
�mw�qg��"n,d�e	���A�,�'�
F`s��|�b�J_����#J鐌��4�*��`y޸$
�����
�#?ɧ-�7Tn0T����*-���j���qh�`����S%�)㶟�w��'UeZx�w(�	�j�uK��1�04BE��R�G<v�2T�j�,���-�,�
��0i�f���S>1��̆p����m��V���
>zW���C�4�SM:s�X`�/���yHD��]��8��]X-�ui��G��RO�X��,$��ZI���
�&r	S�@ {��`����Wބ��zC �
�� �̒y�����xt�0#*5DF��j�>��UF`�u����N���`
+uぢ�
�ބ��
��a@<0���7�aEWUf c�9����q Eԙ�����J�������P\M�,��P�M�Ɣt��Gx�0��ZN���Hpaj�K������>�����6�K [uӳ{�h=b�(���Ԛ1N�
+ځƧn`eג;W&Zyg�H���
-�����ҍ�IQO���msA�(7�\�6����$$g��8�KK�y�ci�lK>A��i
+�	0"�J��G$ЙC�lJB� �1̤�02�´���?A|}����b/���^��eh�F[p�s9'����D�n��~�'�>}����؀<qKZ�W���F;���!oh=���+f M_���}6�G}��-�	32��Y~� ~�V�2[�a7�˜b��?ܖFd<
d{	�CK+c����A��٠�Q�U{�0��58��5��G�5P�kZ��t��
t�8-
+j#�w�]W��|��dz�<X__达����Mys�Ϳ�w�E�]�n����
��+2���_��%F^;��f
���	�PkQ�
>���6
�lFr��.�ϙTTʽ(!��)Z��	���X�	�X5ad�G@����k+�Hzν�3pMB��l�'���U
�@(�iw�4�f��aR�׃W����=s��=1̋
k����k4�3�
�

�[hI��}�n�p�N��&��r��eA0U��̽�`�J���Q�z0P	dԉSLI��ۖ#�l�U�x�W6�N��s��w'�x�
o~h
��`�B�u�F�
`�"�3ժ��������v�3p$𲧇tkH���0
�82t�����i顊m�Plʋ�
�����ecW�[s�����M�Hܣ���N�f���� �Ak�������� 9	�'Nk����tuq�������"T��A�͏�/�����Շ��*"�v;��w�r�U�u� s�%��rn �s.��xI��U�����#�Y����3Q���
��u�zk��G�d�+����v����X�׮|��4��QPjoJ�(���\�λ�+���2���/<fE� �ͅXxÛQj�z���A�.lRȞܜ��g��7!﹖��[R�6MZ��
!�0l��ύX߶�A(��h�v`	{��[皑	�y� "���p�������%�ɵ�ݶ'
�D':�1��Qp������������@��{�Sk��!$)-(1�}���Rj����?��pT�G	1�1l�����^~t)�_�8$Y�%�҅� k� '����b�5a=��:oS��������B��F.ҁ�/x�
�0�c%v��: A�̫Kp�+/h�/|�%�6o���֗��� yz�����׫I6�Z�;�w�����/�C��E��Ɠ{D�yy���w^�q�/>���J����k
+endstream
+endobj
+2293 0 obj <<
+/Type /Page
+/Contents 2294 0 R
+/Resources 2292 0 R
+/MediaBox [0 0 612 792]
+/Parent 2291 0 R
+>> endobj
+2295 0 obj <<
+/D [2293 0 R /XYZ 86.4 726.045 null]
+>> endobj
+406 0 obj <<
+/D [2293 0 R /XYZ 86.4 346.337 null]
+>> endobj
+2296 0 obj <<
+/D [2293 0 R /XYZ 86.4 276.077 null]
+>> endobj
+2292 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R /F38 773 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2301 0 obj <<
+/Length 3122      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs����W�H���I���픷�vbɾx� ���
EhRZ%>�3�'A���$��E
�=�ӯ�M'W:������ӗBO
q������DN
wD
6�\L>N5�3a��}��y�Z���4��J����z���u�r�,~ͳ����MxS��2�d��'��u��/3�1��)����O^\��v��tªC)b��̯O>�B'
x�����ί��H���jrq���fҶxd�!�D;F�с��eZ GҺiR
6��N��O
&�50���&�q�k�����e��)�#�xBI��7EWx

����t�yR���2]7/�&3&�~f��"?���u׻�@��L��n�GA-қ�b��*��B��md����sD[�<
��n����l��
j��MS
��d�靔x�idUբ�T�@��Zb8��Nx�B���>���r���	t.��V+]�ĕO_ʶf)C��8��/�W�2gaig�$V�je�W(
�c63b��Z��6(N�u�LK�����`M,N���vm����Wё69�YG��6��|���Z�*$�����d���M<IfP3v����:�v�s�:�FT
��2�-��4�n�b�ͷ��hY/�,��/�4�s%����~�J�
+O�IT�r�fŧU�

+���4��qj��)G�����P�M4�Dq7FVsB��$�w�ܺu��R�(f�T�{v&�p������ ��zxONY���[x��7=�5�^k��Uru:S\M�����o�i�"��D+���i>ƈ L4|�ʀBp]
���'�8w�l���bY������������Xno1cVaѴq\�=�{��[���G0͂��N?���� ��<�&�v����Dn�:/�]
l��aår�2Ƨy�3er^Y�t�KV��{��G)OF��f
��0�f^ܟBz]
��:޵����;.�<�04��H+�HK��8�z�<��Yq���β�?HY�h#3�(� �h"�c��C���@��#��)цW'D�P>���6�Aw���#�mr,\}Ѓ�n�L��=}����v��ߞr>�Q�vw
���
����B�
���f[��o�,��kx�q^����a��ZJ���L��`5KWaw�'FĤ(D��H)[_�e�һ�)қ"�(��b�2	�����p%��so�7.�5.1l\�A3@Ý
Agy��8��nY�\�5	�D�TV����r�����k���J�PԓDi�5-��<���n*�f����j#�Kg�N��u��j
�X=�PdWK/����I�+A�a�

+b7���:�=a���0��L)��4��e�Y�3��!D	��������f
=�T��/�D���E^�`
)� ��&��H�
H�18 ��@R�F0�H6əר]���+�r.�	a掣E�I�U
ceZ�l(Ix���
M�+�"����#��u ��CXAx+�Y. Kz��2Z�5ǴYp����Mz��Z��
RX]��өn �88�����e˚���
���g at -�0�׋�.7�V�r2���
��� �rg�J
�
�"0�R�l4?4|	2UL��]��֟
+��=j�W�ѽwօ|�I��h�5�;A:�s\�y3`�Ԃ��DJN,S��u�Y�Ii��t��r�CQ�G�����S� "o�;�9�V����@�GHY_��02���=
5�E|]��N�OɅ�f5�<6��A/�Q���&`�=���)@��v�
V9
��Wh�sP��c-dH� y7iԃ��]����$�:m�s
��:���l}��QSc���4���@� ���"��9m��ht
ܓBX���x~����P#����1Y���i�A�+\>�
%hhX��yZ�v���. ��8���@�0ǸK� �V�y;�D
+poG��@�hlw˟��~��|Dz
���X	���!%C<M: H,�*xc5�����,ߖ��F��ŗD
p�!��p�TE��
8\󋟆D
� Nw�M-#���o޿~�SB� ��Uτ#��<�l�T��ĂE�yB2�x�~ܼ�\�v�k;5��a�:S ,�}�jh8�QGQ
 ����5f�Gز2���Ϟ���-����a�ךP����;
+���� ¥<�h��<�={>b�Gش�������P+�#\�D����&�
BBZ�Wp��n�1fO4�nBa�! ��"�.
ȃl*�!�R�
S8Ӫ��CVGo'0~3�Yȼ��κM������*��ٰ�t
.�2U��Z
|�:
+�BR at 6��*��a�:¦�ju6}���S._AJ��:ݤC�-�^��Ҟ_w��V��*j��,�
I�Cm���ŗ�J'~/4f��2�:�@��� aME�~P�]�[~D�	H�X]S�B�X����a�:�� ��\��
B�ā�
+/[�z� 	�����M(�=�geU5��ف��E�`�~��h��H�Q
����'3�8�*|�SU9��)�Y`MG�s� 6�HQ5�ȡ�:�6�(��<�Z� e��ם=BO�6>_��A�a�-��.���]���:j�>�M:1�]
���E�1��4�
+ҽ
$���$G[��4߮6`���qǤ�e�>�_�1,�S��
k�(DZ��1b���%��
��Z����^�B�ɧ�U7̾�����7|�A��� p�p7�,mA�j�bP���i>���� �8���7!pp���܄p1օ ��Z�wV�qy���Q����.���kC�H���F�����l��r��n)`�k�vp�v!�6Mߜ��L(��O��b�
��e�O;#R�6"����A��k��_�0
+#�э���Q߻�w#���.�E;€���ʍ�]�Q�����X;#�Q��1��2��h;�����Վ �ﰸC�
�B֏��
 ��y���Ў ��
A
+W�#�|�sx
+u%D���$&��v���~���!���#�����	�:��2�Jנh�{�R�X*���	���	�+�&���%�z��%�
�-
Ԛ@�\��& ���$_��[`�;��ja
QE��
�>`#Ƈڃ
�q��� Vf�� ���
p�n ���w�/��Uh?BUZ���^��?�ҿ��W
+endstream
+endobj
+2300 0 obj <<
+/Type /Page
+/Contents 2301 0 R
+/Resources 2299 0 R
+/MediaBox [0 0 612 792]
+/Parent 2291 0 R
+/Annots [ 2297 0 R 2298 0 R ]
+>> endobj
+2297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.017 490.901 404.488 502.856]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.1) >>
+>> endobj
+2298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.938 121.316 425.41 133.271]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.2) >>
+>> endobj
+2302 0 obj <<
+/D [2300 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2303 0 obj <<
+/D [2300 0 R /XYZ 86.4 615.536 null]
+>> endobj
+2304 0 obj <<
+/D [2300 0 R /XYZ 86.4 247.888 null]
+>> endobj
+2299 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F11 1019 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2308 0 obj <<
+/Length 3258      
+/Filter /FlateDecode
+>>
+stream
+x���v�u�Вʉ�A lO�JNr&3�ؓM�G��le�%i;���^<H��(y�i���H� .p߯t�q�.�={~y��7\.r�K&�W
-�X(����r��)�L.ϩNM�7����k���q�Y���

��jWۗg��-~l�ʋr�Tmu_�8��Vm�
�<6U������W�g�:�p�tA�!2��\�n�~�%]�������\/
̺���9a�Y\���,u�J��zp9*�m2��*i�7�; �4�T��\eSg�rݝ!SR�g,���m��$��� J� x�����G�W�
��p)�Y~y]�8�n�j���
��r"������ݺ�n
d6+��x�n�뢱[ow�"\$��L%e���ۺ��vw��Ѯ[�M�&��G9�JE�Ɂi�	�U�d\�BY؊�̡��1�j��ts Ք�4��y��u���O�4eY���쟇��p6�y�`Dd��ܔ7�L at s�R��a�tR4��u4�~��Z�KIκ5G8#���	�!9�9��5`+�T�g �~����?�ă��
��$����<ax�ԋ�h��
���d�-���^NH�
@���^>O��
���,���)��⠭n��� 4��Z0#a�D�
��tw�6�ڀI{���{� ��e}��d�ϰ[�㗲�3��
+������b<��^ۉ�z��
϶8�

;2�i�
h!�J�/��nc�
�-@���	��I39
k1��)
�;���5P�Z�7{�4���,�-��
+G�JQ�e=� ����
+��ݢ��Д�m�F��O�M�J0���G`�5�V����e�%L
P20Q�P���xx�1Ng��,�d�圧 1�Y�sW}�<���.+��q3l��Lf�;>\��:1�x���󻫲��
���vd51���L�������>
� �@mAT٥B	
�"u��$�5X��Z	�֙h�ڛ][6c?�K�{��Ů~�
��ؐUa��8�c
�`
�R{�j�D2I�,W�Ǻt u�#@�8�՞`A)g�'��	��.��A@���X,
��йA]�� Hp�\�C#x g��@�
d��e��o�cW:��ɒ�[�vb	��Dd\�#�č��yxP�w��fzweg
;l��p3N�Oi�X!���&����d{��A� \]��ŝ�^���c+xg�$0�4�]ig�a��|�҅����ǔ!�HO c&�m��S��OY6^�i7�v���.no��V[Do&F����D*�ʑ�E�C��J,�9hyļf�
�	��/�-�Mc;�E���:p
`��I�(��������v�!ur��Yh���D��LA��A2��U����!���*��\�4y��x �]ڷ��hcƈi�02�t�72�3ݍWhbyJ���s������s��*g+�Jm�Ry�A�PZ�
�=~+
���O(�V>>p�5k:hn�0�0����!{� �54�|�.o��^�11������NIƲ��H���n���,�;b�l�W��fd#�N�T�P���}l�|ɇ��
>�$g !L��/�׶�ŷ
0�
q ��˵
�x0)m�b�����
Ʉn�m�~�E�p�.6)��Y�ʚdd���B��
.����VB���:t�
����
���z�S��=��)9�;�l��g��ܼ�o$O8�
"��� ����]dl���Bjp�&�C���D�Pp�Hi�����F�0�@x��@c 
���`�� o��9q�=�
���#�Y�WW�\i����1D��i�
Jө�P�����+�c Á�K����ĽC��� 
��щ0���Ye���lVuu�=� '	�Iy&
+��f٧�M�@E�_?��)U�5�4ND���Sa��4Nx���\����ٜ0�9���
+�!,^��i�?�ITpjn��AB�  �d�Z"CGH
+{���;��}Mp=܎Z2Z����HN!��ш��өۇ����`��������b��&�u蘿�K0Q�݄���{�b��ꢇ���eɟB�jq���eN����h�s��)G1
��e��!wL��O�f2DH;�}2:�n���6B:A�Q�N�Z��;�S��^g�͎���)
��I�M@�� ���
ؾK��`��X
+�k�{���/
�,jmg\��*
 Q��s�� ���{1�)��W����eJ)&)�ي{���r����]Vyw�k��`�[�!޹��� }�0�.;�|
� �j:�@��K�YF��\z/p
��:��ȉ�Ҵ�!�C�n�N��#�O���yN;Ue�|.c?��}��$�P�P�+�9%�-�x�%z���
?@���#�O��f��1U��&��Rǭ���_�xuqq��w��qVo��觜}����
�ޭVe�\�m�T5�{�N/	aH
�xl2a�<VH��+$ ��
	)�6@��"���犟�=2PW�
��u�
��E�7)*?�0����L2�s
�℞�c޽��;_ժ���
E���0b�������u3K?nE9;�a� �4L ��V�i5���YH
[���Ъ2P�b�OoU��(�Iu�U������L
_�yߥ��{���,�m�d
vƶ�(Ӣ2�?���/x�&JT:�K���g�Ma���,m���ȳzS� �y) ���N�d=V*C�#�؜��E��MA�pϽ�0z��Ne��
w٧�
���d#Iޗ3Oi$q�f ��Tf�N���� [���HˆXG�,�\��lʺخ�*3��|&dU,i�j��
++{]Q�N���`0	?B0��L��@����k�C��؉	ib'|Z�*���73D���D_�2��~״v�.FÁ/��m��}���1 .�n���ss�
�3��ըK�P��e�7�Fl�����c�c��j6�髽�gS���U�	�'�e
uŨ/�@X���>�
�FX*>����Q� �SS����k;P
��G�l���UA���g�X�L����'
a�L`Mo0��t���s���(���(�a �=�h�h���_Nm#Sp�x��.7p��nT|hp����N���O�G9��U3�c��0�c5��I[c�,{Q��Ǧ�
+bim�R�p}��y��A���a̔��>oI
{
�iy?�$�[q��(��]	Au
�^��Y�?�1EMW֟ձ���Z��
+Y���k�k�LY�;�x�2}�
�4
EHNC��<T��o�ZTs�G*�@�,����O��dܴy�qgv����$��j���
Q$q3
+endstream
+endobj
+2307 0 obj <<
+/Type /Page
+/Contents 2308 0 R
+/Resources 2306 0 R
+/MediaBox [0 0 612 792]
+/Parent 2291 0 R
+/Annots [ 2305 0 R ]
+>> endobj
+2305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.672 541.714 397.144 552.562]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+2309 0 obj <<
+/D [2307 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2310 0 obj <<
+/D [2307 0 R /XYZ 86.4 481.04 null]
+>> endobj
+410 0 obj <<
+/D [2307 0 R /XYZ 86.4 241.433 null]
+>> endobj
+2311 0 obj <<
+/D [2307 0 R /XYZ 86.4 183.568 null]
+>> endobj
+2306 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2317 0 obj <<
+/Length 3154      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs�F��W�HM��ޗ�������L$��R	�H(�H�ʯ���
 ���d���
4�����IG�#:��������
9�4ף����D�
wD
6�����5��a��S�i�X�O�8�^����:���,-�4�q ����,I����"N�d��'+|�V���H�c&4�c����W���\��~ƀI:bS�X�Gӻ�/?��
޼Q"�
=���FR8�a�]����!iSXi�2il;Ҏf�����m���2Y.F��A&l�CM͈S�M����=D�%ܰA�ZF$um�>]\�T+=������B��r��<ƵϿcMo�F�j�����q6�
����%R�j�]|�������";�p;��ß����sn�Q�'i��$�����?X��l};����[��}��÷��3��rD7�0T��*�u�K��@�Wy
��m��!J�Ⓨ2[��{K����$\�#|M+`D
�kZ[y��s5A�0$��-l���_��5M��M_�!�`��"�X�M��(�Y�vo�iz,�R���j�w�jB��5�5�8N��(��70簧�'�p\b`��p} [...]
h3�ia+xQ�| �?L
@�
+M�~�tut����f7^ݫ��I�\��p�-�<J�q��< ��v�o��㣘�H4�A��)F��Y-lk��)�<����
��;�e
1��V�P��z�y#��
�YC0w:]EPp��t�ʆl7�S �<���s
*x}�n���Dq5����������{x����9π��)^,��앷e���g�a�L�a��
`�e�E�΀K��=
Ho���J�y��b�'�
+��oG_ ����
�no�b�aZ���Jmf
X���bY��x��D���
��(DZE��������i����̏���*�û�"[�}&�+A,�?>�RUJU1ۆ��$xKKi/���
 3�Y��G��_bR-�FJJ�3��hg���܊SW��
��4@��"��=�͙Z��,�y�[O�
��v�㤷4VX��8p���M�
��t

+#��:��Mבj
��y�Yy��<����P�O���DU;�*��
3A���)VJҞ�)5նu��=۠g�6�p\ޟ�`:1ˮ�)~���y��2Ϡ�ۯ04�"���uCjL�X=.{�'��=N�����&�� Mf
��y�坜a�� ��v�,�C
+�as8��`[؋��S0��2�˭�i�g�G�Ö��X�t����/!d��Y� �A0��
�
j/���K`�Pb�
��uQ�����%�]�q�|l)��2hX�>d�e� O�}����N�C�M�F�T�N��.�7V���C���}-�@(+����Z\�{�Rw.�/?�z�����cU�7C���0[=)2pHj35J	9.�S���Y/T�0r*���%�@�AZ3����� �ѿڀ��6���-(�
�kP��� ��%�d��H���50��&�00V�N
6� $+7I�_��0�p�G3�iq+yTp�!N������5���Ó*DŽa�� �nDoxW7���a}#w�n��f%��6�G�6c]lL��PS��<�Jq9������C���nJ+���L�%�㲎�g	��s��$g�F(Ϋ�I�I��<+���
�W�*�G�,��\���I�xVTT���M�;��3
MͰ<q
W,�L5dqTF�yP
^�f��
�m��V!�mT%>�`������{���
>)���(	A4�\]}j‰�W�$���Y���s�z��:ը<k�w��J,��S(��:<
��6��bcu�Rf����
�=;��ܿ��ap�^��sx��=�HI�;2��p��|Օ,�
?�"�A�
�30+7Hf�
�fPb%��hDju(C@��D
�jL���R6���|oĶz#����R�� �cF��yV�oÑ�%�|�_�T��Dob��p���ۀ�?v�QH��O $b
4��4J��Z-3
Q�b��IY<zu	Imu�
�;�}��u���lYYgk�9�,F3��W�iv�D�D��iCU8�Ggu
�l!>c�@����K#��:]�>��mU͍���>Ѧ��w~)�^@�=���%�O0��2m� �n�
+�(N���h)E�����!��
WK�-{�7�R	R4�&�py���Q7��oG� в�

j
��Ǡ���b��t/�s�9ٹ�>�
�h�͜H�P
	�P�f�\�l���ҙ��X��W]�"��p�M����Jm�}��8����=�H�!
K�5G��i�� ���\����j�&آ���
�4K��7����FR�PUKXw�;
4HxT]H=�����in�`��>����@& 
�j�b���8-��5�/��~�抯�sϗQ:;b�0�[/�q^���N!w-��o�
A���8���v7���Ν.���ŧ�W��_�����q4+���'����O�+
7�b�E��#�P�\����A��F��.^�F�zz�'PY���Ti� �J���VPG
]�
 ��9�ږn�C;.��u/�0�Lh�n
�
�N�5���8��w,
}��S�h��[�+EM�uui
^�*��k�o�n���|�uLw]�3A�q#(��|��;�ڂ܉���{G�PKmڵ���֭�mɴ Z�Ed�
ߺ����	q�g����m�Y��h}G��L��ͬ�_�/.{~9C
���ӕ- %����	�-��AQ0bY��

�Ch�
]���*���)�%���ʒ��0� )�%L�c��NP��/��a]��v���q{�kI
�/UC���I�
�*eՐj���3�; ����>o�L�h��-��i�v����7��:��P
+Xa� )5�P�4I
�>&���E��&�'7}���\��>
�{
��/`k�ѧ����
"
���
+�v���
�X�,�i}U/B���Ѹ%���H��z �Kt~.[����K'����cgY�d���)	��D�χE�5���TA	"�"UP~ឋ��� $��s)�$�Um�8�C��)�h"�
�P
����A�͆ �A��}��|g��!���_���bA%�Rb ) #+�|Pq��
�f�aa��z�o� ��E�e�
+endstream
+endobj
+2316 0 obj <<
+/Type /Page
+/Contents 2317 0 R
+/Resources 2315 0 R
+/MediaBox [0 0 612 792]
+/Parent 2291 0 R
+/Annots [ 2312 0 R 2313 0 R 2314 0 R ]
+>> endobj
+2312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.517 295.687 442.988 306.536]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+2313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [304.25 271.224 318.972 283.179]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+2314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.039 247.567 444.511 258.416]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+2318 0 obj <<
+/D [2316 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2319 0 obj <<
+/D [2316 0 R /XYZ 86.4 615.414 null]
+>> endobj
+414 0 obj <<
+/D [2316 0 R /XYZ 86.4 341.832 null]
+>> endobj
+2315 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F38 773 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2323 0 obj <<
+/Length 3935      
+/Filter /FlateDecode
+>>
+stream
+xڵK{�6��_�[��j�x�~=؎�M��Y�Im�D;l$�%�$�_�3�)Z�7��Apf0�@��v.~>:�>���
ˬzq}�0��E,,Ӓ/�W��.��	7����*�o�O�Q���c)��go�Y7EI���_E��˚V�M�*���Y���~U��jp_e��׿
]\�}ā�p�""f�^,7G��.V��EȤ5�/n�f��eF��ۣ�
��M���F�hw�-g<ִ+��@Qp�,�%>}A�r$�Q���A�ޖI�9M�l�{�xnz�
�$���_L�;�@���!S�����Uz�
WF�G��a��vo*�P<��4���6(n��~��/,���_�_ܕŇu�a�'�	���豤U��,Y��i2�_��hhh�=,NlĢ� S��zR��8R�Ny_��`��f����B��j�)��\4+7I����G�>p
1	þ
v��5ļ]����VA�c�2�Җ����
x
��)���Ux�+��H˔��4]���qT � [...]
+����+D

+�\�
�
����~�o��ҿ�i��h�F97�u2����cA�����}PX�p�Fp���fY�U���Ѿq���2��R��'��rUV5A+�
��LZ��RD��䧞ȺY��m��N�x����)ă��:��%��ƙ�@E���.J��
���k��VI��C+[  `��C��iɏ{_|�=���i����ߚ���%�,m	#?�S� 
��SY����
�݆�'��VH�g $[�#p���Jv��ɧ�}���SJ�8M|�ا.p�����@��@`#٬Z�����EM�2��eN��ݲ`�J�����O ��qVW���Ȁw�>� _��C��0aNjp��r�����=�88[1rr�%?��q*fa���YʁׅG����
+
� �ʲ̼[YќZ;U�B�e\�]��R.Bf�>@���[>@4���G'Q
T�;o륟)ieQ���W��}O��6_g��N�Y$���'(�
�>Cuƌc�6HR�*O1yM>

��e�0VG�
%�ҡwhw��}�
+[�T����a�܁�ȶ����jp�
H���fɄn4�!��
�`��4On���_N���ȡ�)�$dz� ΋>�(05'��<�
��S�z
J�n�� *�C���p�(����V
5��Xl�+2��3zXeU��[R��;
98�*�bqت�g���l]� 
��0��~�_E�"��
����
�d�&O���*/�|2�Sq+���3a� B�J�]������ �좏Bf��8�1�Ό����y���@�C0�=%d�<��j  �HD�f������� \�5ئ�nb %�	�x�C��P
2���x� @�0���~4�X�D�k�s�+��|3�TP>b��_'�C"�4��y�d�Ͼ�rA at X���8!�߷ơ�
d� 3�
�ߤ�����~��I�	��?��6�\+�4*<x�����ӻ&���.~�м3�}�FЎi���N&��� ��s���
z���:�a_�11��iy�ݤM���� 
x@�<V�"Z�(fJ�o4�c��t���������;����\0ٸ���"[�����z��<(�Ҳ�����Ġ
+]V�� ��m�	H7EyO�)�����i�y��6���F����> 1W���b@���<���kd�" t]��MЪ83jBm��ӯ����d���
N��\l�u��^K�M�]b���~�X�d{֘��@�3'o����et'mb
�
�E�C�E"��8�Ab�?|�8�/�*>� 3�����_�C�.eM�K��nm��a�)‡
+
+(
y?���P_A|_(2%���edqJHA(__^�:}��DH"!'<��A�X8k�
��*j
9
U�W��1����X����q��������<�oG�7�S
+k>���_V�>RCA�G�׶���NU唜so-0�ViyR���a�JkB�WAi�M'�k����5�!��+'J�>d�>�<M9�&zA.Q�_R���!
q��p����T�M�@�*Hr�K�\_�_�
�C7	�մ[�H�ݨ㐽�����l���)6���|\�A���,��^̘4,�G|!�,"�M��Ijo*��/&p��Ӑẃ
+��
����x3�:�t��T�pN�u�^W�h���8���WP|&�Rd����ə������ݾ# 
�O(�%�v��C�W4*8t��2�e#�a�����la�J
N6��i�7
�?��
���p쿀�<�<
��
T�[�l���] ��.��
k�

�zr�D�_2W�¨k���+�Z�$4��)�k�I�@4�&.��؜�� 
@��]�u��+���&9T�2t
ɡ:~�lGS*o�M]���h%vƢ��
I��{����qٟ��Q�-���M
+
+������oǚ&�iN<�ʩ���v�t�K��˹a6
�j{w��X�Yv,���|u�j�~����
H
g
+�����^�
�X��<T�	`B
�9������zn$W�?
�Z��r'�$��프V��*

C���a��W5�`Z�YT@)��4uJ3$6��@�,Q�}���~�W�D�t\<���m[;(BOWM76���?���yAw�Amcܕ���V���%��Ջ�2���zaA�D<�h!#
4��v�^��g�
,����|���ݑ)<��p-�L:��Re�J���C��<Xgt0��y4o�f!e蝧{\'Sg�@@�4�E
��*�G��1^�0�������P<A_@�Z����q}�e�/}��{�O���
+��0��X�߅!�D���fv/|�
�s ������wׇ��.s/W:�뵠��n[7'6�t�Q<��9Ά,<�M֏�rp�<!�J3�f��JAuB~���
)΀��b��ӷ�
*���Ul��M�r����i)Dk�I>
�m�*�X�+��q	�\�',K����s}y�G�3 md�G�����'R��@�2VBfe��o�W�HP#t����`o��C�i*��^�N���
x�E������o}cٝ귁�m�N�SY�哚m����R���*E
;��(%�!;�Fc�H��o��jl�����a�d�mT�HupMRg��=-ho;&��L�~z�n��g����!L�A�Z��ȩ|Ul��F4V��*g�T

�U��Y�n%�������a���׸��/^���84�]��;�2a��}
�-<�$�z��
+�r^(gw+�-���̽�ݻl�|�ږt~�P\�ׄ㶯�t9�	O����k~��"m �5/_Oa5�����j C�v��qq+(ẋg��7�[��-�p�oE_�0��=�[�<,�	
�� ٝ��c+|��m���ɔ�[;oΤ�?�J21OV���&Ux����ݛ	��B�,xm��+��
����A�{"�	�Y�&%�;��]�g�z{G�{�p���'�?���y�.�����Azj����~�1O���������S�
,�,X-gF��G����
�l4�V�`_]��]՟��7+�rħF��0�s��r��`J�����<�(�fB�"M�
+�v�O��v�d�}�;����T
+���<�i�w	�0���u

z�GӞP2��>�[�^�O՚
�c�|X�O*�|�S8�_
�oQq������B�Ҽ HQtH�b�>�룼>�<��D.�XnE?��(��5��DkL@3�N˻�؅B���r?�q�B�0�[~mϝ�L�Y�=]V��]�
�|��S��
/��z�/�W�)
1�s�@
+�w�W/�6򤗚��R}�O���,����&���o��*���r�	��Ƚm�u�
�k�i�S<�l�o��ܔ�K]@���h�7�઩�����Ǯy�PK��'U��M���B�T
+endstream
+endobj
+2322 0 obj <<
+/Type /Page
+/Contents 2323 0 R
+/Resources 2321 0 R
+/MediaBox [0 0 612 792]
+/Parent 2291 0 R
+/Annots [ 2320 0 R ]
+>> endobj
+2320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 352.021 173.628 362.869]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+2324 0 obj <<
+/D [2322 0 R /XYZ 86.4 726.045 null]
+>> endobj
+418 0 obj <<
+/D [2322 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2325 0 obj <<
+/D [2322 0 R /XYZ 86.4 515.762 null]
+>> endobj
+2321 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F11 1019 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2329 0 obj <<
+/Length 3009      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�8��W�Eo��fwN�L%�����
2s�%��D=$e���v�S�LTS�U{�H�F?�n��nft��ɋ˓g����$�\�.�gV93<&Z���r�%҄�΅ѧ2-�d�:��(�Z���z�YTY�)�k^�����y�9<���2ݔY��g6>�^�d�Xf0�	�e�x|���ۓ�˓?NIg�&J+�l�>���-���%"���o=�"&
�V����Oh�$�nV��f�4���f����ϻ0e�e�uFM� ��adM�H�x���~5����v�E-#�ƃE�޼s��
z��;FQ�bhw}�6 .!��(�|����97�b�-�t雖�$΢�Zݦ~4rU�M�������c�
4��%E���A�֤G�lΤ�bx�$��'�C^�e�㗹��Fg��B��:ɀ�նH�{�V�b��O����6-�{Rwڤ7@�=�Z��#O!�E
+D���Ȩ���D�?�Wɍ��X��$���Oߣ'H��u�|����"�
�@�.����/?�����"s!��b
F]U��$CޕN
0E��o����t�H��7���}
+�]U��*|Y WoS��膿<�J�gq��m�U��	��*��Ae��U3�	��njڐ_��|�I���}\�Pnj^ݻ3�4Ҵ�޵qN1�̴D�=6Ω�Qn*n�_���E��r)��(�DX�_�����]~qIT�{���{�ƣu�NP@��e�W�!Yz��,B��˱
���K�	��*��
)�s^*�,��M��)��9(�wF6��ڽ���S�H�`{ߚa�z�
U�v>:�W��tIN���Ŷ�?y�O���R�	�4

�
�i�Ǹ�z<6���D�m�H�Dc
��i?��h�8��E��F��	S��"���$�U�((��vy
+�?�
�WU�mzn_Fe�ں�0F
�;��e
G�ܪ�
!U>��y	��
6���,���(`�1�,<�<�i5B�BC�uǤ�c�
+���|��(#�5|�*�Y�&�Ȩ ch:	��7'�q�e�6�1)
f��������߾�p��������
bY%-�a�y������*���k��+Utq/#�U�S���ƿ˹j'`���No����lq��V�	ϏH
����3K�~�UZ.����.�b�Z��C��m9x�}�E���g˴<�?��~�w �}����I��ML\�@���7�uZc�n��4m�.1�U1���� �!Z
+7��ѥ	-Qj�8_T�1\
����}�-��}/1���Xp�=�����=N�f��̈�{��G��' �U!�Ӎ��
�<��
�ש˕�#:Ɖ�YO�_�GT�%d/(�?@l�2J�f ���,�Д��d������ZA4fF腑�J���ZϨ�
wo�����~Ѓ
s� �U�x7"'� ~�	 h��$	YJ_O�p�Q�
+�Է!� ��.0͎X!���ΎŌc��u[0L�}�
+�'��M�hp���E����'�	
�VaJj$
��e�d^�j�����qset���_������r%�a�T�����7bH� i8&�����6F���1$;c� �_�?���꾟ޗo6�
�0.�-��i�g
+vdE��S8	�(8����y/>�|y~q��{$S ��6.�klp�v�H��z�z��x0���O�s�_Ga̤e��?��y�5C	���O����~��E
���
��<4�qLh��f�h�
+]ۭ7u���Q	 ��oP	��B��LŴ	[�8���Q�4�����<{�v"�	�����C2C$�'�g���l���n����:i������:?H�|[�
�B�v&ES0��}S�1r��G-N��P�y,o�܏�h����~�t9%^�B��.)�u���HI�v�4z`|�m���&A�>�G Y�
��d�
rK�����B����YF۲F���]Vu�'�c���%��xdd���D��$4N�ku(�Z�
+
 �1�(�?N �r��X�
�ެ��U����4�s�;��F;��Iޔe�2�
1���?
dž�UP��
2��1we�d�߲��X�ˢ/j�RWeE��0�6h����zG�h =�^� =w~ej�J!�eQ����޵Pu�q���L�;��IC)�2R���24��-mV�ˡa���\����B&�%�>�t�ɝw�)drK�?��&"�|��ɭ�R.��C~��q��!���$
� ��t9wȆ�&׆��p��
#&*�
I�`��=��
�
+��
+��'떜�a��-yl��[2j�0�� }bb��)UY�E5%%F��~=�K"dm
�@���c��R�@
+[��
8z�T��
��P��98��;�P�h=/��[�ȉc��0.��
��
 <���Q��6�u4����Ӯ
�T�^��G@��!�q�#Y�Sy~ܢ��q�QR �j1e��
�J��tk���r�Ya4)��x*��s��P��+c�����M�g}���1
	Uoѱ
+�����$4>
+9
L��9Pj!�XyL�:f
��C!�(�S��SE�c,�(�%�(��g��E�W�P�i㜻[i�K���L
mH
?�$��{E_�Fn��
9@~��=2�e�@�ޛY:C*���+.�
Y f���.r�M��F+����D
�����`�5
+�PߩڮB��RZ
0
+>���� ,���3z�h�P$w�̡M����l`�� -�n 64<�D:
�cGN�o�b��h��"ɉ2�\�-�
�'R5t�'��]q
�P^����Y
<k�׶b
$�
�|�[|Zb�H�E��\If
,�/�mR�Oa�����߉,C�2�Ev�8�s$;a�9�����6�q�鮳s��q^hĉ��r��;wHT�f��1[��]��
'u�d�܌����˵V
�� 1��A�uW�A�h���؞��"�V�bF�W��5��p�M�S�G�J���<�$^(~>��@X�/�T�
+endstream
+endobj
+2328 0 obj <<
+/Type /Page
+/Contents 2329 0 R
+/Resources 2327 0 R
+/MediaBox [0 0 612 792]
+/Parent 2333 0 R
+/Annots [ 2326 0 R ]
+>> endobj
+2326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.29 74.642 132.51 85.49]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.6.1) >>
+>> endobj
+2330 0 obj <<
+/D [2328 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2331 0 obj <<
+/D [2328 0 R /XYZ 86.4 574.863 null]
+>> endobj
+422 0 obj <<
+/D [2328 0 R /XYZ 86.4 358.276 null]
+>> endobj
+2332 0 obj <<
+/D [2328 0 R /XYZ 86.4 296.019 null]
+>> endobj
+426 0 obj <<
+/D [2328 0 R /XYZ 86.4 140.53 null]
+>> endobj
+430 0 obj <<
+/D [2328 0 R /XYZ 86.4 119.057 null]
+>> endobj
+2327 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F16 717 0 R /F38 773 0 R /F14 1030 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2338 0 obj <<
+/Length 2582      
+/Filter /FlateDecode
+>>
+stream
+x��Z�r�F}�W�܊&s�dkl�޲K�wC�/N*���$���~��\ ��
�6Uz"
�g��O�9$
}
��?O^_����ɑAFR9��i��HQ�$#��x�eL���9�����)�||�y����������7��_���ҥ}X���d��Ez���c���`u�����׫�'o�N�sB`RxD�I��
�'_~ţ��aČ
ݻq�gQ����'�>�aQ�O�H�wi$�r$
ADI�ʛy+T���?�>gq2M�Oy�>����/X��
��m�,~��o��m������0��ݮ
+ܟ��8��]���
W�A')
�/��=|\��/���;���f1-�U~��C^�;�˻eZX]ܦKg��5�˧_�Go��G�Ƞi]_���8�!/��}��v�6N	FPu�D"A��zu����9
��b�^�k2��1���[���f� 
���v���Uc���x/�jr
+]֙B���tY�����;Ɖ7=����vB�ф*X���n�C���!��6i.���K��|w0��˽�egjv���{���7����iۭ&�
UO$?O�^4�3u
��:�C$I�X���n�d$@&!}��a�B�6zAeƙ�$������A�� >%�)�>_��F��*5n:v
LH��,�hZ\���-��
{�>ˬ��$	��E�y�8Cء#�}C
�6�/TL1�� �bJBb4B���é�Ȁ�!�B{��W�N/���
���h9
;d��]���RW����W
S
+	Y/�4N|զ�`“5��j,	P�	�ܿ"EQ 4D��9��ӜyjI�2qPW�#���Β�d�^�|��6���U�f�,1Aa�M��kϸ�C
o��Z��	V�:��ݴZ�8C�T@=O�I�YZht��x��d�7����#�P�ג�c�~\4�����:�wW��z�,ʱ�l��6 #�b_
�7�,��3k�ޓR�}�p�3�f;���-���3��N!i_�,����äC�����)d��[6� ���}Q���<���R�}4{�|��P��uϘDs'� 1ꘝ�ql�<Gp��fa) �n��+��CdT�C��v��9
h�_Q;�m�	͠5���Z�y���lK�v�YcW�QhdrZ 
j�<�g��z����|I,��t����rW_��������i�J����<����,,O
+��lp	6�����Z^Aۺ{H��a5�Ӓ�0᭗��\�z-����,�uw�9$�5$��IP}OCj�-/q����f�>��R~��;�8@L9��1��&ə3%���'�(FR�R^�E��V�2�2�.y��N+�Mmw٥I���6`o�
Q���Ql�{
+�9N��
+)iʑ��l��-{��s¦�#�
|�"�K����:����'��o)��,sG�)����ӑ=��1��!�@���:�m��c�
+a-�w͝Rv�u��}����)q�igC,��zA�
4�ho��cN��.�ʙ���~��.�r���mP���D
�.φ`�v0ޅs�q@�*�;�h"�3}�,M9m��m�m|�{�Ӓ�g�`���Z�Ue7?�f
0Sh�54�0_L��)Sԉ��5�h���Oggo��V��=��
+�j�ڹ|3�%I����C g)��9�R��Q�)JCG���C�d��A��H���p ��r
=hOS�B�s� ��Bfէzj#����8PvԦ	t���V[6[
�@jH�6ǥ�Ճ��"��H:Z#�� >
bm�>����}0p*�~]i-�)c�ӵ�m'�ZX�Zϖ�&�9@�K�M>��k?��p|†
^h�� �S�E�bO�CF�
�J1 at m�i���"���`�U%຦J0]Ʃ��*�'+��E���z���)�i�U�?l����vQnA~G]u-��p�^���`fq�����h���gX��g�-I1v\�a�EeI1��Q�Gi��� N}s��,u�}B�&kA�*ZG��H�b&��+=
+����e����gI6+%Rz%�=�T
w('e��:m�̊$o�R&����
.���;�����[!�+�1
�;A#�a\��
���Z��z�!,�f��kH����@*2

���i+}�
+� /}����
��J�@j��J�O�l�
+^ 
?��VH���#��_�\#������}b�%X�OA�o����
�/f��7}���h�3�>���>

�G�v�}0�{�>\��UGe\;*��r�l%�A�ӥ�q&�Pę��h`�l�32��7��������ާ�La��B�a��e�Y�'���m�N�1���~��-[��*X-eI�x]Hɫ?��IާK�)�$1
I=���쏔/��,�א%��S���[ ��4�IjdK����R#,�Z$̮'�ht��е���s�p�������I�p�W�S��'��� &C��%
R�<�
I�����)��Z��<A�
©;C�\>W�
`6A��M�//P8��QC��%d�(��ʚ���^cSQ
]��˨�ȓ��3���._�ɚ8)�?�Ie�~� KJ�'H��t]���E��~�d�1�O�OP&a��?��8�<�C�]�M
+endstream
+endobj
+2337 0 obj <<
+/Type /Page
+/Contents 2338 0 R
+/Resources 2336 0 R
+/MediaBox [0 0 612 792]
+/Parent 2333 0 R
+/Annots [ 2334 0 R 2335 0 R ]
+>> endobj
+2334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.804 289.956 408.276 300.805]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.5) >>
+>> endobj
+2335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.035 55.742 413.506 66.59]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.5) >>
+>> endobj
+2339 0 obj <<
+/D [2337 0 R /XYZ 86.4 726.045 null]
+>> endobj
+434 0 obj <<
+/D [2337 0 R /XYZ 86.4 553.848 null]
+>> endobj
+2340 0 obj <<
+/D [2337 0 R /XYZ 86.4 496.403 null]
+>> endobj
+2341 0 obj <<
+/D [2337 0 R /XYZ 86.4 274.144 null]
+>> endobj
+2336 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2347 0 obj <<
+/Length 2600      
+/Filter /FlateDecode
+>>
+stream
+x��ZKw۸��WhI�D�NO���ԓiG�l2�`D:f"�*)�I}�@�/�R´��llo|�����_Ϟ]�}��г�Ě�����j"g��D
6�Jgo"M��\X���r�LV��9�����_���m^���Z�� �$}_��s����Re�*��w�?�Y�d���a1�ˈ	v���˳Wg�<c $��Z(E�Գ��ٛ��,�//g�����ݼۙ1��-��qFoRnj0��MKH���%��˼��Y6T�;�<+Q��~�-�t6g�;����H��D�z�ۢz�
���M�ɰ�d�jJ=Ggy�E��}Ɩճ!�,*2BA�EA��mq>��t�LB,�����}���
�n�K�ӂ��,
+��&K������8�(�6e�p[�,v�nPjЊ�
)
��Jy�q�s!�YV�I���w8$�?���\�Op���
-)1�
�
F)�9k��CA��LsK�a�h�lN�ց�s,ٶ����f�Cd�_���E�E�z�,X?�YC�v�}= n�)z�D�
	SD����G��%��kFo\�z��EW�_���"~��.�4jD0Jd��kڐ L�f;C�& ���Vn��'^���|y��'K������6�9�p 7g��!E>Ϫe����,����,���n�\�#�#&�`����te�
Q͂j�cy��F��*�0DD:��R?􊷹��%���@�Ac\�o'����C(+Ch��0SD���S���<Ӻ.༛�M,d�0/��U�<8W[�O�w��l��!����x
3�(�fJ�Pn�x
3�h)
)-U�z�
�@^��2�*��}��+�Ի�F��ضɱ�d�+X�Qy�N`�-��&C���k��4X�p5�踞	.�O�r�mw�ڻz
+p�4����B�\�Y�͆��'���Tr(?ͅ��2�E�H!�� XDQ��$_o�bb��ho�2۔Y�Nl"�"�DDy�ۇt�Rqݛ���
G}��M}qF��܈YpJ}�Lv(�(zJ
u��~3�p�{�iҘ�1%��l'A� �-$�~Ja�$\vs�/�A=Żs��d���9]QZ��ڥGV����t�/�Up������ğ0K��mD�m��
7̫�[밫������HjEGw`��Ł�J��Q�$	��8�W��/�AݕT
UD���Fm�n��2�Á���FuS�#
+��ָ�BHJq��������U�0�>�uY�z}y9�8��@Q�J�&��+
n�'�Ԟac�2��'�j,0c���D��AY�=�U�A�W4>�5 �x�fIQ �w���a��Y�M���*}����/����M�n���X�p�;�������|$�iM�mJ�M*��vz�,��wy��V�=Ap���{h̻5�1�j���Mb^ �u`{�@�G��p��c:��^�(S�5�e- �y ��'���	
���m'x���y����J?
������
��'hb�>�1��w"�#�@©�6ӊr�T_�W��
�.~�L6���t5T���.
������_Bs>��)nB,�L=^Z&`�KK�嫿��:�@���I��6�fc&Ӷ��i�{~�̈́I��
�G���[Ml�fOC�����f��mr
D��^۬��Q��
I��.pN�#�L
+h �ѭ�e�ݴ�!]���`���	e[�
+�y�n?������ҷ85o�`(D��c�	pj�t(��|����)@>a
�&�Cp�X�B�"�
!�� ��S4q�
�+�|��8�� 6_�Y�v����a���8��D������q>�75��|��V�0��a�ynk����gd|9#�����k5��I�
B$���n�/;��A��
���ބ�_
¼�O�M��
+�[�L����dev
+I���B���Ӑ䚔ZÑ xA��^�g�
��@
���#)*�������8r��ȑtk�)�=@�K= $������[��ƒ�4Mi��؀~C#�Ch$W�(5	₤D]hN�#�j��ޞ�G��rz
����'Q� �s~
9Swh��\<ri
���G
Xq�!N�l )?GN�2��m��Wh�qO-�j��!��xr9׀Fv�~C#�xh$�>'p0$�u|9SWX�,���_
�
k�
��
�H�U���ҹ��

���K�2\"]�TY}�hg��nU��͍��+���4WJy@\�!\�
�U
+~�?+X�F��x�m\��v�%��j�����v;�d���+� f'��{�zjؑ���U�.�C�e���lo:|
�;
�Ź���h�������G�z7S[��G�w�Xb�fC���0w��05C��΄ލK?Ҿ;mX}/�����

;DF*�
�b��V�2Kwˆ_Q�Y��
�O����p0�o�!8ㅛ�a-����5�ZBJڗA?��G-���B����Mnܾq
+�o��	����W�
mX({��#��fCk����K��Ry�
+�u���A�CVE�rT��:Cn]�p���"@YTa�;*��?a�mk��3�#7�>#�A&b�ā}hR�e��&�s����$M�&���*[�&��/�yG[wOF�4pN~�������r
�}ꤛ���)�
;0�c
+endstream
+endobj
+2346 0 obj <<
+/Type /Page
+/Contents 2347 0 R
+/Resources 2345 0 R
+/MediaBox [0 0 612 792]
+/Parent 2333 0 R
+/Annots [ 2342 0 R 2343 0 R 2344 0 R ]
+>> endobj
+2342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.574 417.431 403.045 428.279]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.6) >>
+>> endobj
+2343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.804 161.826 408.276 172.674]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.6) >>
+>> endobj
+2344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [313.943 62.16 336.415 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+2348 0 obj <<
+/D [2346 0 R /XYZ 86.4 726.045 null]
+>> endobj
+438 0 obj <<
+/D [2346 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2349 0 obj <<
+/D [2346 0 R /XYZ 86.4 641.963 null]
+>> endobj
+2350 0 obj <<
+/D [2346 0 R /XYZ 86.4 398.313 null]
+>> endobj
+442 0 obj <<
+/D [2346 0 R /XYZ 86.4 143.194 null]
+>> endobj
+2345 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2355 0 obj <<
+/Length 2579      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W�Hn��y� [{�e{ˎlgM)'�IȄ�"� )E��ۍ�xRb�T��>�A�LwO��@|	h�ϓ�'߽:I��.���

�,�X'L��Y*��2O6_�3a��짩��/^��\L���
�.���on��y�ɓmr�l����� ur�'��7'//N�s�`R4`�$�R�듏��`	w����wŸ�@��p8Z��P���o�Hik�
5�:�!#�h�ʫu+S\M��~�~����C�z�l��L]ܦ���u|��ݿ[%��?�</6���Y������71>���˄��#�:�u
o�g�8c?�:�?-Vi��S�U�w7qv~��b�߽��x�(��8ؘ��^���")���l�o�JO��.vR���h�.ޯ���K"XX����WN�v����f:��>��S=�l�]�L��l�$/"?�U�:n�܀��
+�A��*>��3���"��qveۜLgR�����fL3"�l� (���k�	�a����C�

+[m��bL�'L!���B-DQ�YCBC[�5ʾ�c�N\���q���M
RU>�����' (	y�g}R`��������M��p4q�*�����]k
�Ԉ1�-�q
�ܰ�ۗo{�B:W��5jm�:8�ڹ��t����PN��
JJ��
�N�dX��o�܉ޤ>v"��7W�t���X�3e2Ί�fR����S�fP�v��6I7�B�2����0��Q�9�����WB�=�#
����$�C����GK�䄂���)a�i)}���E��`��Z��zM��`�g�!aY5������T�9$FKkZH0
*�Q���:��8���o�ū��$�,?~-;(k���;4P�m#9e40�Q�"�_�{�L;+�d�L�-��1E���d �`C�ɘ���j����h��$��6�#�]�A
J�<��/�|�%7���!9h��R�6UV���P���
�V1��p]e��㕅�T�S�-��,<���~N����&K1���\G����\�cZ�Zɮ�Im�� [...]
+R�I��@�HQ�� ��h�
�^^G�}P��=��M�Ha���
w;oP�r$�i9t�<�\(����{;CA��[o��,��h`��

N��z�s1��R@��CȚ���9��hwu)H�B6+Ā�8�$D@iZ0a�#�
��w�An�8� 6��
":��Y����a�F2��Hm��Ot�� �Ms��pi�`��2մ!��l��q�E�pa�
��2���`0�L��©$��rʇ��
TUgYO�R��k`��D;K�
��
��:�(z]|?e�����w�a�1j��J��?8L!
i���ZfT�C�4�X&T�D��:�<;{9�w����%TY�ؾ���8^���{�A�J��<� �
+>�
@��@��B�O��*k�,����)����ʕ"��2�b�9�A�`��
�0�)v
-�@hhr�q�ݫz"�R���#�w�{tB��F�2b��7t��xs��M��J�E�]�񏂶8
x�t��ծ����PՒU䋪k���4޸S(��I���
�,��yh�s
+:B~�{���B��^E��/�["f8�VN9-�����*��T4
,!1��M
ex,'y����g�^�'<(��#<S�~��H�'�:�
q ޿K�+w+r�F {��
�l7���L�>�~8��B�ich\zHR����f7T#�{�j@���P�IA�9.�8=b�CQF��PY\�PZ��ʒJ!
d�N
+�*]�������09(�=�
�c�䛖�c=�;�yB��F�
�)@����]���v)�؞�XÂ7���)g<�
����4Q'EAϲ�4�F,Wԧh�j�U��J¯~9)�2�^�����@L�
+����:��D���x��fl�����(4r����p!�Z��ѳh�W�c�Ô���=�(�o~��ӄA��9�Q/��Bp�\�0�7��
�_��
��q~���
v��� [�t���nK�U��E�c�;}
��n���
�&�C�A�S0FR��Vq�Cel�tg�W�]��5��8��z����d�]�-�<v��Vq#��}�2�6�,}���k�O�ě�J^}�����OPr�N�1�=��Z#(�R��FP��?���ɸ�$L�}�6
�R�^���>����,���%��r�ͷ�|�/�3��^>��|Ts�����\q
+�+;�c��>0�9ˣ�Kh�>��d�
��(e�#��1�
fC��/G���/����/��-Fa�Q�a�r
���l��F_vݫ�Q�
�o�ǐ�O��˺�o��_��d�T��RZ��r
���4T�_P�s��
�0uY,{<��<�[��1ïw�fx@ ��Ӱ�������|}��Qf
�D�q�����"���ē�
:
+�
!��%�슮
��,�@�̠*(Uk��d��;[����~�����:-̿ܭcw�}�]T<o{&��u?��%���f���ʳUR5|����E�u����
O������
���YO
+endstream
+endobj
+2354 0 obj <<
+/Type /Page
+/Contents 2355 0 R
+/Resources 2353 0 R
+/MediaBox [0 0 612 792]
+/Parent 2333 0 R
+/Annots [ 2351 0 R 2352 0 R ]
+>> endobj
+2351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.035 379.783 413.506 390.908]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.7) >>
+>> endobj
+2352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.265 112.637 418.736 123.762]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.7) >>
+>> endobj
+2356 0 obj <<
+/D [2354 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2357 0 obj <<
+/D [2354 0 R /XYZ 86.4 606.565 null]
+>> endobj
+2358 0 obj <<
+/D [2354 0 R /XYZ 86.4 361.115 null]
+>> endobj
+446 0 obj <<
+/D [2354 0 R /XYZ 86.4 94.369 null]
+>> endobj
+2353 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2365 0 obj <<
+/Length 2476      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�H��ɼ����8[v9^'�sqr�HH�C\�����3 1 ��]$�fz������G��xzy�ݏLFIety
i�x��A���r��HD�3���m��E�ZMgd_���z�^l�l]��,�|/?d�z��d��ɺH��]��?�����S��`�$�����˗�//�sA`�8"բ�\F�ۋw��h	o^F1����w�gQ�ZE�/�W�=ƈ
:4a
+	�Ꙃ�1��ņ怯9���P�릡
RZE�D�t�~��|���y�}�'�l�L�a��i�$�2�?%-k��J�s���Σ۾#G�y}��إWCZ6�1*�M���*�����ݿ���

��˖I�.�+D�,�A��a�V��AL`Dy��mr��[����⽿��v�yZ�e��Į����|s��
��G3;�*���<�X=��ѻ!�L.�C�q%l�M�daCq�•���'���=�5���q�ԍ
��Mêa�f:�z�,��0�Ia�'�j%�`o��� �u�^�g oj�AkMˍ��»@KX�%�
�O�⅝㏏�o�/�k���&7ylG��t3�f����7��č+��O���G�W�d�;J?���RHrVN����o��(FR�j�6Hz|�N�j�e��y�7]7`��nNG�
8w�*�W[���v�ʩH3�(
b��zSJ'`��G�BJ��KP8�?��_e�d�hXf�pĵ�
��de�؏ w~�����'|T���;1���;�
�ܽή[���:X?� ����J�W��R����D;{/��,�c��-'��5�:��� ��›7���<J
q�_E�
�?�b�XV�At��[���"D�_���ڍ��
+@��.i'���1���Ј6T1
Ry�c 
+���T;��*(��>	 
+��{E]Z8�Br����~#l��B��
�y�jރ���P	!�*�"�֐y9�☿}���|>�P��/���"^9�a��۽�����
+,�&I�v��n�H��z�Z}��n8�
���
7�
bc�Tu����z*e
���1�R
��$���o_���jR��J�8��1�#5���
_#��� L��s��
e�W}Vi֩2
��:��
+nԹ�Aui�1��"�O���m#H��B�LB�
�hY@�f�v�'�8Wz_<6��TN �֙k�����5�L�1�M����W~+0H�Ш�I�����pw,�$	
���M\���߶ӥ
:_��G&�ab�2)��e��'?�
�k)B�TWI�'
�Aܘ}���d��ݙ��K���c���
��"�.�vE���I���K�DB�s��.|
�Ƕ'����V?�?\h�����o�^�1Tތu�x��mb���&�7��MJ
'L�4�Gy�W�.�*c_���̧�t��st*F]�<��mR�3�J{�ٻny�
+��������i��Ri�,�p mѳڒ���WiY20

��Y�c��f40�
Ԉ����7�����;�/�&|�
��L��B�u
�r]~]��S
�-��oAU)���
��1�d�ZA��u)��*[1"{� n�- G��mlo,���W

��	h����k7�:s���
e��p,�{����
+�W�)�F�E��;lU�#\����&�:5ۺټ��0t�ͶT�a��D��Sr���P<p!G`�9�P�#,���0?)ms�x*�9���9�(A>3="��-d�E
�DێA�:
R�󐋞�@FC���}�hl�*B�*i�����3����a�A��a����/���W����-�>�
������i/JrN5�9��ED�.P)K�/b�<*0�]�'}S�����~��
+���~��D�^:áY�@��I��
�&şϙ3���r
��N%�z�̿ g.��
�
�"�f�
���Ou����X��9$�;?
�<��
1�	�2ĉ�9�����#u�`�ܜ���G���LR����T�-�,]8��`*���#���@�}��1���`=_=qN�
��xL��:�8AjE�R�������m�?�v�LJ
��.ѳ�M�+��d���ع��7��G����#��>�H�W�9MҜ��HsC�U34Ӝ
eͩV��%�ĹW�E���
+��w8�.�
�}�
�C'������¡Yq��C
: �-���
�@�$:(gItU��p㡪O
�0�#MIt�B
�,It�_u�p�"�
y���*$��bY�A����8�y��s"�
Y�,��s"(2��@�H�;�_Ƌ��6)~M������셴����c�8'��1'#�9�o�!K�e@�� ڜ
��[����w'
��i�ׁm̎q��.I^Y��)m{~|�#�Ę�A�5̖]��z�p��r�b�;�p�[l�,�6#�,˃��귻���/x�
B�(�3�
3���_�M(���Lk!C�-Ȍ��ljn�iWliv"�ڋ^�F
2�ЙK�x��$�� �#> 
+endstream
+endobj
+2364 0 obj <<
+/Type /Page
+/Contents 2365 0 R
+/Resources 2363 0 R
+/MediaBox [0 0 612 792]
+/Parent 2333 0 R
+/Annots [ 2359 0 R 2360 0 R 2361 0 R 2362 0 R ]
+>> endobj
+2359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 469.082 173.628 480.207]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.9) >>
+>> endobj
+2360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.256 469.082 226.708 480.207]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.10) >>
+>> endobj
+2361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.568 196.61 185.04 207.735]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.9) >>
+>> endobj
+2362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.744 196.61 237.197 207.735]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.10) >>
+>> endobj
+2366 0 obj <<
+/D [2364 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2367 0 obj <<
+/D [2364 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2368 0 obj <<
+/D [2364 0 R /XYZ 86.4 440.706 null]
+>> endobj
+2369 0 obj <<
+/D [2364 0 R /XYZ 86.4 168.233 null]
+>> endobj
+2363 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2374 0 obj <<
+/Length 2523      
+/Filter /FlateDecode
+>>
+stream
+x��[]W�F}�W���{��[�g`8�a2٘��I
�%@Y�"�
K~�VHvK�1�2�IxB�Z]��U�n]<������˃7�
E(�T�.�GZ">R4B���e2�2&�N�Ɯ�?����p�4>dt���tj>��u^����<[���9M�eVe�Yen>�Q�x��ˬ<����������G�^�@���lq��g<J���F,ң;n1�,B���������
��#\!�v$#���nǟ�?�_L�� �Ûn4Sb�B"L7
�1�5"�������O��p��7�6_���ᗷ)���q~We��c||(�8����۸t��'T��t�>���,-���|��F�i�Z��5O"
��hB"D��,%jg�TXx�N?t�R��t�+$$	�~���"p��˄`*Ƴ�<I{�#�
�
��$��,҅1	�&����C��q���8"�a��©(�8m��

D��C�
�
��=D]l�@1�0J	E*"��Np�|)P��f�Zw��+]��ݗwټ�

�-S^�g�4.|��{s���"@ 6^敻0P��P�-��8���o��>=q�<BB��b�؅x�9ʼ�?�، �#:�M�)b,4yt�~�Y3���
��^-g�{�QD�G
�8��ynN�s�v���mo���>�We��x>O���K�DR��� 
�0��R��s�X�X�r�
�F�����3a�s�wq/�*-z |㕇�lvۃ��-~P���p���U�����Vfo�����Y�Gg?a��"<h8ZH]S�5�uU˫�l�5&��\��:��z�sa�WY8C��u4O
���g��"-?��w˷=u��9��2�IZΊ�CV�l܁'�� .'����7dB���1�c�M��HZ�[~�8�e�b^�]QGD�=nw��](xA�]s�hn�i[��)�`&a�u��Ӵ
+=ޓ��2��J�΀�����F@�u��B!*k��څVP�m��z
CK"������ꏟ��[��ƀ �up�"�ƀ�S������,
+��_�{�*�
�3��&�)�"7�͒����H�3RhG
"@?T;k7�V�P;m5T����e���O�V�@)�
+`��*���Tf�������jf*���b
Än
��E��te���4�êL�)��@��U��g���W�>-��ӫxfV��qq������9pm�!I��I��䡍�4��w��Mϛ�e�}��yTܬ
�Cl�+	��5Q
	��k��ˈ
���N�j����6��TM7a��'!�U����T5��a��c�9
�؞N���Y��h��֮^�
���Ew�I���>�
1(��
ϫ��.|] =��#�<��K7�`���e�
�eD�n�\��/2\��md�t�|�)�wo��
ɥž!7��:z�K ,U�"�$I���x��c�
b�ZcW���B
�ǴZ�\�N�i��xMȊmo��zE�tP
��*;�9m�� �=��9
p���
+��KS��V����;m�� ,�ݓ]	��m�sSy�P�۷�:�� �
�h
+�C�{�ͺ�
l~�X7�r�V,��V��;�
�F�1S�ZJ�-�
`�V��]�n_(`D�0j��J���.�n �^�
L��Ժ}�i��
�.����{�u��>4�����jݶ�_{�N�\�pP���D��nW�u!�r��-`L�e�����]��/a	�P�����
E`|���t� ��Jt�	��9���a�:$Nj�9
#	6�/�ݔ�9���9 be
�:_�R�8٩�Q$��Js1.%���_�r�`�,s��!��"�i ��3����v���,��
yQ��7���~�'^��ތK��9�N�B�S�����Ng>��\��CV��P,��М�M�u�(��5}gk�
D_�T2�f��r�|�ul�iƘ-ە���W
O��8��e9_�U���u9G��
>���;?=�#@����|����&p�PZl?�=ʜ�8C�7 ���@X��
�
_
M���G}�
�� X>�PR%�\>��ud��3��Xu7��
+��^
\&�U�����p	n-�p�R#qϛ�Wu؛�1L�b�QD)
w6��2�Ս�����������o���2� ��l�K
��B��|�͇І�T��Wm��׆ E��
��qNK������@Z��o�[ �C6
d�
+l*:��U�V*0���i4D�K�3��O,�PDQ��T��=T����@`�ke�!��u�`=x
؀�����L%"��<��Z����O�7e���	�T�UO����:p`�U�;_
� ���0��G��l�~���U`���*�Qt�S*�æm*��
�Q����
+l��b��K*�H/Ԙ�5O�mh$|:ot���z�x�n�7�t�=p��x�*dñA�f�
�3X
{�V����j^�9l�
{�"�kik��BMq�j� >^���D�J�KN+�)
j�N�Z�@���^�#\��c���e���2�w����2��o
��A6���p�
@�k���z����|AG'9���W�
ѯ�
+endstream
+endobj
+2373 0 obj <<
+/Type /Page
+/Contents 2374 0 R
+/Resources 2372 0 R
+/MediaBox [0 0 612 792]
+/Parent 2333 0 R
+/Annots [ 2370 0 R 2371 0 R ]
+>> endobj
+2370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.956 609.216 434.427 620.341]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.8) >>
+>> endobj
+2371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.186 359.998 439.658 371.123]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.8) >>
+>> endobj
+2375 0 obj <<
+/D [2373 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2376 0 obj <<
+/D [2373 0 R /XYZ 86.4 586.465 null]
+>> endobj
+2377 0 obj <<
+/D [2373 0 R /XYZ 86.4 337.247 null]
+>> endobj
+2372 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2380 0 obj <<
+/Length 2869      
+/Filter /FlateDecode
+>>
+stream
+x��[Iw����W�*�l�ހ���E���6���g	I�� M�r�_����M�d��/�t1�4����Om:���ɫ�ggG�_
+=	I����]LM���h�&g�ɗ�&�x&1��Ǜ�<Z.�gl�/c��b�΋$Ks�m�BN�şY�

>-ܛ<N�H����Ui�����	��	u��ٛ�����G
6I'�ܔ"�ԓ����t��7o&��0�|��V)B��j99=��z!�t(%R�!:�"\Tt߫0�hx1DVK�O��Yu5��f�CF��N���u�N��i\����|�U3�Hq�-���Ȼ+�ֽ%h;�6�Pz�=p��7-�5#�+xcW_,����j���i��w���:[�]]�P��
+˝�aa"���ڂ����5YūGnO߮����^�]����ӛqƈ�3
K�#�"��d����v�eƘfӳ+�'�yO���S��.���0-��Z����
$Y
�`�]����,3|p����y���~O�d��
�r[�Nj�ʚ$��0f��P)��Y2{�괈�!ԅ��� ���%����'�xW��

-r�T�̻�S���ts��� 
����N>w�?10�ZP�Cu�?1c��8R2T�?
�
���[D�ﱾ ��ĸΒ��ɿw�.@�N�9U���1+��bo�"so�1�d��`(�;�
s>
�=\
1:,W�����Q>_:ϑ��P��1l�p�2_�l
�OQH��Q_�]�� !wՆ���J���)�N���e���m^��
j�jXz�6��u�s�ɪ�$�&����:�j at 2(�=��Ӆ����N�T�h��/�I;���X���b�񔯏��F�m�N��R�3q��/ڡ)Bm���OG	
*JC	��0����@�� P
�]n�M*1K�R�O�CEa��:E��뷧=.��(�"4?(�a�Iq-
���ϟ�����Q+�e�&FK'<XO;�ٗW�W
+��}
��6���q�_l�K�c��
�VH�:l��~e��Qt������ɻ���B��|���4k�|����N�A����aiE$d����Yk;� �B#$�U���g��!��rY)X����"����1�u
	�A�1|Hi�;Ϸ�8�dJ���3N
$�׎w��	#���v
+�qi�]��cs��&��\�˖IG��������U07� �iV�f���2$)̓l�D������1�
	�����9��(���:��k�C�
<�c��!�,��x3`k��в���B����'O�F�t̯5�A�m�v�z_'�6/�<��bؾ�����}�
_q6N�R��n���\8�*�7�����l��
������&�y
:ۮ�!��>�:�V�mͨ�5�~�X8�F�OsS���ɢ��n��
B7l6<�"�ۅMhx�՜va��M�����­��`fH+���q����/����r �}������P�F�����=�;���0�3���
ys��T����M]��]i�A�z�.� x�+����Lk��(���]$������Y�Jƫ䢇e #h�S�~&��\���Z�����
��e���(�,=�b��1')�rxsi�դZ������*�뭭�l�,�^3J��(*.M�
� �[�q���A�̂��rrr�<Q���

I8߃�t	*�T���
I{�
Hue�S��`"5B!��}=kڗ�}X��
�^�ɋ
^
��I�, S2
@C��z\K�S��@T���V�D��H�»���6Zw���&i���
���v���Fx�{3\U�
+Fx%������z-
`��*;^"���UA"A�� �o�^&�� /�V#���r9
��!�uAޚ۴,��j�Zu*w

��
���
�
�;ǔt�Q6��E��:��/��s���U��[^"¡mG��6�E��饽J��n�'D(�ᇏ���0E
)A�g���6Pp��D���U
+��&**�4
����0�2=���0�4�����QhNkȮ��Bï.v�{��8��>�ݒ*��	s9�'X Rڼ��;)�ױM�n{\��������TX]H��*��LR��U�LQ	��$9
~�4S�v�=ع�#F ��I*���/��������*
�
HJ����LK@���{��1�����~���s>��Fq��v��p�%x�`� �ﵶF�Ha��<���,��>�*m��1� \��x>�*�7��<��A�

��>�< r�v�s��<u�:�9�l��p6��c
�ލ���
tHE��A��-�����j�}�<8�l�Y{ {h����"�.
wSk���=��k���Q�΍�B����G'P�P1�Өb�o���%
����3����1ܲyHf�ރ�Taw-���%]$󨰐H�-�a
Ʃ��B4
���i�&��s��ub��%�����tj=�Z���*����g0[�a�!�t�e�<E�a��a��fd��R��
+n�n�;�A�T� ��������
+��=@��������=��A�p�Z�Ӟ�9
��}����N-��>B�3�Rܑ
�:�u^�b��
5B��sr�#�H
���#`�H
+W>`�X�!Xd�8~��F����:q���Ȫ~כV��3�ˬ�p,P	w��ӊГ
Q8�b�`|�t��2�b��%��C"ZQ��qa�,�a|x�Fx�{��C�aA�
闁�ʋ��(��R)��
(��|�=yyv�lH�ɂa�s��1��!1k�����կ};������?a�T� z�=�#$��1��
ad
�}8�u��;����{����
a2
cʇ����1̓��ྩ<L(vm���YVG	k,�����)���N��S`����C��z
+endstream
+endobj
+2379 0 obj <<
+/Type /Page
+/Contents 2380 0 R
+/Resources 2378 0 R
+/MediaBox [0 0 612 792]
+/Parent 2385 0 R
+>> endobj
+2381 0 obj <<
+/D [2379 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2382 0 obj <<
+/D [2379 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2383 0 obj <<
+/D [2379 0 R /XYZ 86.4 441.135 null]
+>> endobj
+2384 0 obj <<
+/D [2379 0 R /XYZ 86.4 198.818 null]
+>> endobj
+2378 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2390 0 obj <<
+/Length 3395      
+/Filter /FlateDecode
+>>
+stream
+x��[[o�F~���ӂ.���g�b'-R���N���-�6���T\��s�›(َ���
�9��\�����}w�����B�R�j�gW3����-��b9�-aB���%�bs}:V&g�NO~|��
�ErUV����_e�����y�o�)>
އY�l�&�uQ��q���ۋ��N0Eg,2���z�X����-���3JDjgwn�z&EJ8\�f�'?�а)�ߜ���1i,;�)#�h���O�?�{�����Q��	�22A�Z¨
~���v�r
+�W�T9�ĤlH�����
�(����Q$�
��79�}�-���D�,>׷Ū���K	�3�qڪ��ڈI]�>�r��ha�&��Ŧl����
����I�
bI�����pGF[��dJ�ap�U�U��D���b<
+��	�iJXʏA�SN��|����@S˾��د��ES���
����O�2w���ѾքZ玵+�vM���*�\��zu��-��*_
V/g�(p���W3�Ͱ�~�.��ș%���(��(�FD?���␊������\��6��u��Մ�AoƘ���M���U.� ,��T9h�M��6�i�$�xZ��|�`hU���2�.~�L��
4�4���4����֡�l���Ό�*�����L:�]s���݇T�u.p�,yC�

���̏Za�s�2xy���p�os������΢�,!&��Rq�A���
�����
3�� ��?p��^�Q��� �s��z9z٭��n��,��
�O��hc. at R�SE�<�
9B�Z��AH�&�u�_����FM8Q#�"=FN犉 a��Ã�9���w-�
+bE��1����O���ica��)o�
+u��o�|��ʀ6W��{SLY���Q�)Rޣ�
@��6�?@^��>5C�DM�d�k���UU����	0
��Oh݌xF �<�p�)]!u�0��E
+bf\%?ޢ�1���%)������4�p�D�/.�ũ`ɟw�7��~�*/W�zW*��H��f�m�-7E8p#M|��|���K'��vf��
�I�_)뒜S��wSy������^,��\y�����Ƴ�v���
�]�#^�䈷�Ƣ*�ޗ�4X4$|C�h���C�
+��O���u%��|� �R����ny�8^�MJ.�u� �C}���l��y	�)�����쩴,0,�->C ��&�����<Z����XR�n;�T#�l(]� }�7_�ڄ�Dw�w6� ї|�M}�g5�wڂFߩ4�8�Y�)�!=��=.��f2�L
�G��%���:_�ս�p	\yM ��OO�;}��'f����
+�!�ZE
��)U%�6ކ�j�U/ܶp�:
A3�cx��+�v���V|�bug�
D��"c[o4�oA

���wۆ7�
�.$
q�t���q��p���}��G�T�P��r�%�,Ȳ6�
���]�����%`�$��%�6%�X~�zT����#���t��'�0�. |� �A{��[�	EC2w��>P����:
�vb�v�	�l��~N�a
@�2	�}
�`�?�ϔ0+�ß ����?�$�l���/WK`��́��쑅�:���nc�O�@��jW�`�z �V:N�,�4�
+�f[9ܵ��x�h
�m-ۇ�X9�G�mg`-��K��&"���N�e<�:��C�=Fߐ�
�81��k�U/�K���	P&�GqX��RQx��^�M��[&LJ�n�s��,��D�9��X�򮱀F����A��LD�Nw�[i]\�..�E�gM���6��NU҂(6����7'��O,�n��Z^�A�m6�Q �J���b3ј��K�;ݴ2nN�ǘI|�1�iG������ˠ�NG����IM  ���/��&02��
WP�i
�C	�t�9�)�	��-Eu?4�6�PG=�J�7�L(�pƾ�!
+	*}Khe�g�#
#e���H�z�ҏ�HI��#qe�e��@,��Ml�:#3� ��Q���{Ѥ�r�Z���*�&��*��>;K!Y�	I]��9	��
!p찕A��UW1�n
pܮ��"iS�ȶ�0Ғ��:(v�������wk>{S�?���n�yo���3�MA6K�p
�]c�[�5�ː�_F���mV�SJ����h�Q�
~A��YX�6�L�ea?�
m݅7m��AO�>��g����v����|F��&��A�5-C����zk\8
I�N�
��Dh��|�
�M~[=)jF8m[%W��z29��]��mb>q

+�)� ��C�3�!%����t��&����ԁ��&YT��/T�1���1�Uh
+^�a2�R'~�`]�����,W���W������� j�˪S�~� ��-���j:�@x��|Oe~��M�Sx8�0��N��,��׼��-2���P�;�p�$�r��
o�A����5^��ɳ
 �^�<��@-�G�a�P��?8@��|o򿶮m�E�a[#k�H�Ŵ
�u&�}L�&-�:��T���k���7�LGf��LǵF\n
+��+����*0z����T+��%��/��$AM/ P<-�E�I��!
�w���rq��&����\߆Ͻ�zm
��	m���/ �x����9���a)���h_#�K
�?��)����>J
����$�,�N���D���m���ۇ�)�����qH�x�t�i����%p���M�<IK����[����&�N~�l�T!(
NF�đB
n�p�)�D�׉/L�
��w�$�H���P�|I,���:�ݫ.�H�C>_1�A2*��Z^�w��
Éb�m���P�9
+a+��h�0����h�0p�Ԛ��q�G�8�1[8��
+��'�:�r���S�Sq ����@q�
�ѰY�'��}<(,��U�G���'B�'<
O	{��-(`�� w�E�7(��O���+)5��1��a�[&�"%�2�>ϳ9`
�v�l��O��)��;����!��P�t�0�
�ot,2�D

��>�;
)Ԛ|NgU����Z�,��Ib3���?FeɁ~
 �0_�m���&��կ˩0�C�}��
�pE�Ĥϋ@c1wK�n
��ggo��wrI�		�Z٨�����\�j�z�VAIJ����R��y!�JJL~��
d��
�$�+M$w�[F�S����b�<~>7��D����iaJhW�F�N~���X7��ɤ�GE؄hb��6a��QlV��/�{{1U�Yp
ʎA�+
uX���Wo.��1�4���ħ���-?�uQ��\n��X��"�,�U��������]F?x�vΔR,�
��Cr!�~��}��٪�f�
�n�E�Fܩn��B'���*v��&;����
��j���%�
+endstream
+endobj
+2389 0 obj <<
+/Type /Page
+/Contents 2390 0 R
+/Resources 2388 0 R
+/MediaBox [0 0 612 792]
+/Parent 2385 0 R
+/Annots [ 2386 0 R 2387 0 R ]
+>> endobj
+2386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.615 615.534 233.086 627.489]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.5) >>
+>> endobj
+2387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.365 534.399 124.837 545.247]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+2391 0 obj <<
+/D [2389 0 R /XYZ 86.4 726.045 null]
+>> endobj
+450 0 obj <<
+/D [2389 0 R /XYZ 86.4 582.841 null]
+>> endobj
+2392 0 obj <<
+/D [2389 0 R /XYZ 86.4 480.843 null]
+>> endobj
+2393 0 obj <<
+/D [2389 0 R /XYZ 86.4 247.57 null]
+>> endobj
+2388 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F38 773 0 R /F49 967 0 R /F11 1019 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2398 0 obj <<
+/Length 2958      
+/Filter /FlateDecode
+>>
+stream
+x��ZMs�6��W�(oE�fkc'�5���N�K��"�6����L�_���")J��J6��I$H��x��->�
��?O�.O>��(c��vty5�鑓�J�.��Ɩ�Ӊ�j�����l�X�N�x��"��W��l]��U�]�t����O�by��x
�T��*�ŇbM����tq_�X(+�X(w����'_]��|" $�Z(ü�����w?��
O�
q�2?�޻
i�1�������	�lҏ�`�1�٥��6�d�C
+!��l:;Ub���$贜CTgƴ1^����WW����t��M���
Q+���/}K�|4
rDž߬H=B�W��}�Z����G�!=�!
�8�y|pW������&�0]T+�Ҙ���5�O���
yq��7��N��$O�ht�ಖ{�ߝN0�/�װ���?R��Y�]\A�U��4�1� �Z�	9�^�K8J��{v:�R�_�ft�
+�(�����3L��8/�B�����1�e�+�s�~5��b�����l�:ΰ�����Ќ؞�bx‹�=�L����f�Ỵ*~���7�*�
+$�a>3]=��i-��Xюdz�:�CpLL��K�R
��oW�}�`L�
+�YLů������A*R��㗤��
4k�
v�
+���wA����}�
�Y���d�C�EQi���&�Bsz�Y�ڬ�^�2o������m�`
K��,F����骆��L	���̯��E^Uqe���o�w�t�t
+
U�jG[�!��n
)�&1�<ES���5�
�AiH4t^���	�/�#|�|i;Kv��b�>��	�.C8��.w��8��S�4q���*.�X;��
��N�C���u-a�o�@-�v�hN��è��HLBf=��zT]�T��d��*�6�вmr�e��*�a�Ϊ�*�~ڌ_�Yn�Uǻ�s�	��P��0��{)r SJ
J�f	�3ig�Fyf�>4�VL�4C��
���׍�V���E��

O�����{}����;L��ْ�����9�#����m+���v��3�
��?]
p�>`dW�3N��ݡ�($��d�2�̉�&O�Ey>���t]�To�����3N���^�3O$�
,r"��x/�jVw5b4���CxY�p%S�pEHθ��
40�D����J%"�(s
Ln�=�R�Ί��1�T�W8��L5�R6С��
��
A�`+r��"0��@t~%�S��.�ZȞH_���n���I��h�zQ^onSΩ:�?ʕ���p~eF8&���
+��
+S)�ɬq�.G��q
+�wR̻fV�<���v=IaǾ=��f�^�j��2�j��a*�N�cY���)�|rwUD�m���v���`�pg"2
ԣ,��
+[���������zw�2��v��$���:!�:u�{m�������C������
s���	����^.`�g��jA�'��	��~u>�\�o�h�liJ2/��&��V�`ҵ�	љ�dK��y�����6�`~�

�\�شDY\�KNn"c�XUD`@B�P��"q.#�9䀙�q���[ m�]DdbH�#wD]��DdL�%�


�cm�
�
��G�?=��'7��Sb�>������r yg =�E
�o���A��
S)�D�O�ӳ�a�`�����U^��n;.}���0!��봋o��������^�^8P�n!I���"�6��oL�=��~����C�4�q�Q��g뺖�R4��t��pj��IP���^=/��˂���s=ĥ�j�����\BYä�]��mQ���&��#|,��@��`�\���)ͤ���Fa�l�*VC~�S����b�H����S-�=��sn��p�6�`������-�7z��C�S��[�PNb*�_
׼xw~����c��1o�'Z4P*�tO �F���&R�T��,�����!6$�>[��>
�D�����7�|��i�L:���L#*;��y�����#]�;l�
T�(� ,q0�ɓH|/̲�!�����ћp���s��
�
5r	��0Y`5�p
C��i+��
0��,I�b�K�������ӷ\�	�C���^����'
+�~l����T�R���<�����C��T��-��󇢞#�L�
�9�i1���1Q�E�o/��ūׇ��iS��(��S�ÍCfz4u�j(yխP�����j(�=�*�� �Q���l�,�(�k�Fi�����.m�&����6_���oҜ�{����V��!.�գD9�tΎ�t�
�Y:�8{�31��(
+�b��L���C]4	���Z(���W���Ƌ]ݟv5
s,��~����i�`�a��tݳl���z��
�mӴ�{Ϋ�-���U�W:���K�?��?�e��_�N3.�Q◎��n����(QO_�� $J/��p��/�d^�5��CE�
ȈӺ�������e����u��m����~j�k�=�<�ԯ�=\�V�����z��O+mK�ʹP9D��?R�~o�߻V�a��2?H�1�aݏ��T��ߣ�/Aȵ͎Q駩�����W�����ߪ�?�C`��
�D��}�~�>X�l{�m��3�J�t{��/$�J��'���"=3ֶ
+��o�5 ��_M��Y!���]@
}���<؛~������m6E�
�b��M��ӓ�.�.�?h�4?�W����'�I*���W�^<�ȯ,u�5�p��"���T�Vh*'������E~�	E~HT�K`�S��ʩB�c���\��O)�s
�|\�*��6 cx�>���X|/�LjS�qќJ����`o`�5�F�h��;B"�s�e��T���gmdR�@L)�B
+M���4��M���:��.�cF<�K�Y�<�>1�����#,��R�%?�C�|i�A[�?w �Ҍ�s��
wv��`j���7�5+8ώ����0���#,�b����M_�h�(��ĝyD[�K&�t���wv�I����)
+endstream
+endobj
+2397 0 obj <<
+/Type /Page
+/Contents 2398 0 R
+/Resources 2396 0 R
+/MediaBox [0 0 612 792]
+/Parent 2385 0 R
+/Annots [ 2394 0 R 2395 0 R ]
+>> endobj
+2394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.342 428.9 376.814 440.855]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.3) >>
+>> endobj
+2395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.567 164.24 450.039 176.195]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.4) >>
+>> endobj
+2399 0 obj <<
+/D [2397 0 R /XYZ 86.4 726.045 null]
+>> endobj
+454 0 obj <<
+/D [2397 0 R /XYZ 86.4 701.138 null]
+>> endobj
+458 0 obj <<
+/D [2397 0 R /XYZ 86.4 609.201 null]
+>> endobj
+2400 0 obj <<
+/D [2397 0 R /XYZ 86.4 553.074 null]
+>> endobj
+2401 0 obj <<
+/D [2397 0 R /XYZ 86.4 288.415 null]
+>> endobj
+2396 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F11 1019 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2406 0 obj <<
+/Length 2958      
+/Filter /FlateDecode
+>>
+stream
+x��[[s۸~���SG�Y!�l�v.;I�I;��d���(�[YtH�^���
 �x��g���%A 8���:����O'�'�^	=�H���\.'V91<"Z���b�eʄ=�1K%�~*����LX9}��T���//�YL�Y��-~��5�,�̋d]�ez��8�f���:}(�����7'//O��08����X�'�/���޼�P"";�w�n&RD�ï�����	m^�6��(#Bʉ�aF�k]^'�3n���L��L��̖�WL�mN�4^��M�����&�p�.��b��&lz��j��
���=��
?z{
a�y
�}�?fF�d���c�*�W��&���<^�P��ɌI��f��H���HBY�2\y����(�t�Y���t&�����e��)`F�ʳW��N
ldx�=��-��x�1y
�>�+l[�����NS�t�'�N��s�]����3n���*����t����
+�^$E��
W`�p�[�'\d���� ���<�W�8=S��KsC���.�SR��C��J�U53.�
�6��q��D��iy�9Y!��<�K�M�;��#���Ғ��}Q"um1��*�&Z(��^��قHvp��b����vB��U�}~0K�5{��,��T��Y�4�v\�L�*
��Zӹ9����}����Wӿ�?]&�B���X��RB�p�Ѫ��F���6}q
+3
k���
��:�_���)
���s��v3�41�ߌ���ߋ����3����0@�<֢W�3h`��-��@C(�Q��EǶ�@���k`�Y
G@�W�qj�����W���/,Z
�R�
�gFE�D��"��C����p[)�j��1B��PM�%�5�5�t�uh ��6�c�
*f�s/�2���mŚщ
1b˽S����!F�>.��ZW��J�}=c�$�F��r#�f�f��O��ǰ/]��
0�"볭V�t�.��2��'\�r��<ɮ���O��c��]_�9���
+�9�\|��s���j���f?'�b��5-�jV(vw��4^m�;,�����1�<@S\A`$�ز�<��Ԣ�QB��d6`��>&p�u}t���iE���]+� )'���띘�����
����6ľ��%̓��>� ��Z;Q��
f�
�!���~PPp#+ڎ �>�+K,���`\c �a+ز
+�.>=����Xs���#耶}�âN��?�a&XL��ϓ�XnV���SN�m���Q�h�����ҁ��/
��N�F!j�4j}����^�D���8�ւ�r
0L�;�	�A��@��Jy��g�Y]�`D|���
܅C�cUbgt�c�lţp��C�!�Q�B�P�ųo�X��D�����'�V�QԲ��oh�}	iM��}�u
��:+[���۹��a
0��Ph\��x�J������X��V��#l~
���[D_��~�O���:�=�\��
��b
D�36��Q�]�|�$E�]WX��BVzP,Z��#�b����"��H~��� �E�ç�G[܇F����WR��g8��Q�:���Ճp�������:L�K�5!|�^��UX5�i��U��
�Xʷ����p�u�rHE
x�1��&x����
6��V&�"���.����o�<�I0���J��:��xK��mΛV	ĺY�I�;��:5�2�$m;�}��IэC�66��#y�|�I�c�š�����G޳XW��T�#�E�t5�s��`� �&)��C�fҀ���v���ϖ
���� ���.v�o閹u0`eXA��!��b^�0�
 ���sH�Ǥ
��I����vJܶ
tA�S�FNa6b��6�>]�r����S�: K�ow
�:�D0�̈́ae��za�NC�uz�ԤREȋ�m�$���?T����q&mj
��]�x������«dm��Cv�Ƿ��U�m|��Yd�gk +KU��zw(���H�Қl�Qm��
@\ͯ�~�"�$��K !�.!��� �:��Z_Ub�/݌]ZYz~���!�l(��j�;����
#4?`�Q�/��·�l�<�v���
��#n���!V��x���{�
�J" �^�殺p
poۗ�y�����?�?(szJ�C�����
��b@���@�DSbeE��
�E��	o��|
�=�c?��݄F3`�V��g�B�2�n��Nً
s7^aR�=�?���ѽ�h��
ne��v��'tZ�8�l6�I�*n���%#V�=ݖ���\�f����h� 
+Lֲ�����]�{S�nJ���#�l��^��j�pI���z����Ok���g7��d�s+h�C���On�
��
?Xz�7Lu����x�@;�
+��
���F8��Y=��m����>"�C,@�m#�'5!� U��n�������[��?�� 9�P�h}jb��TM��y�hB���
+S��~d�KJ��~�V�����hV
���$CA�E��
��h5$(0q
��V̨â
�d%�&�'׺]y�[�F	40�!&��i�-븭�(�&a��<�<0f}��d��M�/���
�*E�x��1��lĎ���)⣌E(b�(QnUWB���� ZI�E��߭1�
���5�������cm9]C���g/�jr�� ���nmZ�j�)�G��	�8r�,�=���4>�3Ky�?\w�.�����p��d8��l��<2>��݅
�8̯�0r�.5��WI Q�E��98Y�
Sl�H��f�lU�]Y���:�q&��j<�C>���jA�4�ISj�

Q�pB�=v-�>
�]��E/aU՘`d��y2k�.��5����fz�m���O�E�P�f�;l����
~n�
,]+�\�w�e�x��kkڛ�%�p��Ƶ)�)�5���?�3o��Fs �-��mKh7��GVN԰}��~ 3��V���?e��g�� �2X�
�FDCn��¢�Y�����u;���
��o��z�
+endstream
+endobj
+2405 0 obj <<
+/Type /Page
+/Contents 2406 0 R
+/Resources 2404 0 R
+/MediaBox [0 0 612 792]
+/Parent 2385 0 R
+/Annots [ 2402 0 R 2403 0 R ]
+>> endobj
+2402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.702 354.9 317.173 366.855]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.3) >>
+>> endobj
+2403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [285.426 62.16 307.897 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.4) >>
+>> endobj
+2407 0 obj <<
+/D [2405 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2408 0 obj <<
+/D [2405 0 R /XYZ 86.4 649.983 null]
+>> endobj
+462 0 obj <<
+/D [2405 0 R /XYZ 86.4 400.236 null]
+>> endobj
+2409 0 obj <<
+/D [2405 0 R /XYZ 86.4 340.551 null]
+>> endobj
+466 0 obj <<
+/D [2405 0 R /XYZ 86.4 118.345 null]
+>> endobj
+2404 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2418 0 obj <<
+/Length 3949      
+/Filter /FlateDecode
+>>
+stream
+xڽZ�s�6�_���;J|�u��N��3��iܼ��Z�m^%Q!)����.v�)�q�L_$��b��_�7�x�����ɷ�u��D��dqy�HaNe"�rq�^�%B�.u��_��^6��~Sk�2��a�j�j�Ј몦F��oU�N��Z�h�]S��]ٞj����.��7%|,��U$uv��囓�/O>�HX`��݂�HM�XmO~�#^��͛E,t�.>�qۅљP��,ޟ�;�y���a��6�%"MI&�t	��z�ߜ.��ѿ���j]�/�w�|�}]��v��6^�A����
�t[�n�]���ڽ�a�;�P_J)2�(
$��}[m�:߭��d�b���S~���1Q�Y���o_�ٻ����[*%ljh��E���%0U{�w�v�ݩM�|s(h��)�V���~�}
�RF�Nvcp�5QiO�����K�
ͮS�f���ܵǓK+ at FF�K�z���o�S��
ৠ
x�4�������<��[��f:�l�cU
�dmQ��m��F����v�q/eb�Szz�D��
+[&�V�AVX%���>_~8VHi
�"�Jd�>��ZH��:y�{�982��)֌�?h&�k�W �$"���g��N<R��(���t~f�� ��
A�����ؕ����,����
Q�U��
+>�}]ܕա����U��x,�w���K��	7�v�<��_�<��v��̽��� Q�]-�
+�,�����Ͽ^��H-b<�b�Z��j����t-�P�E6�G� ���������h�X�#��_��s]������� �NS��tS�U>[R{t ��6�^ %��
�vhy�v�za�?��U�B�~B��k~�,B�>�\
W%��
�#?����x���6/w
����.�
��L�����8ف�ܫ���٫���c�Od��3V��\s|:N��ޖ�\ �f�)���qګ���L�0�7,տ�p2%e�Q�' ���g䍰%��Df���w�1<(��]�[Co�*�
+��E��

��~�����8��a�
>	
'�s�ijp
25l�T�6҄�6�Y5U[X at U�`�8��6��	3�yg��
�~ԑ���}]]m��c�-�x(�bM_���?�eݴ���9�Hn��Xq��o����1
�:~Q�)��k#E��TW��[z�	MP��m5�A�V�9�(3}+���ڀ=�
`u:��Š�3K�3%`Š⩁�|h�(/
:�Ѓ]�T�b	��(hqv����hL��8ZpT�
1(�^���
F�|�.2�Xf�G��z�=w�p�(Q��|�/��w>�B7`�8����7$ �+ն�m_��O$���d���r�/X@�M��ѡ��md��
f)k
��V������Æ?+w�PƊ8ɞ�x��G�J5.������6���t�CA�UU;^��Ӄ#F�nʓu����
P6#`�C��C
���Bz�G������*��-�A��'�'Tѷ�±�M����|��->��;8�m�odv�,Cm[�8"��(x�믨c�?����Pt�u��
+�0)�
_"z��5��
�
���7�r:�Tȴ�КjC1Y��-"�(m��!�po�E�@�?19��
+��97�_N�N�Y��t��zP?Fr��)*
�:�0l <K^3���v�����#�}��?yաV
+Q��SH�N#FF��
!8����ȫ��7�	[�"�� xJXC���.�JCn*��j�kB�#GP�_�CU��+�����x�;�*
��ڪa4A����
N��p}w��l��m�t�Y�6��@�FM�7ԯ���3�
n`:����6�w� �fw�:]fy�{k�aaj��@��v�GSu�H������6� 6��
+a4PI�]�4�]; ��ߣ���
`1R������I�|��'��t��Չf�n����=����C梽��⚒u���
�o:� �aG]�
NCZN�=�6C��/O9���B�Y���~(V-�
+��A�
a�K�
+X�g ���Vh�<ge
+d؈3I�
;�A`��WY 	��c�XW�Q�U�J��7
��
��!R�
+�2.�3Ӆ��6?�S�#���"q���q��|�9�m���.��.o��6r����Q�����q
��7
}ހ��!ǧn�g�^�x���C|��:�!A�ʂ�SL���h
*X�
���ϵ����]�$�	<
/��������shda{K(�6�� ���M�o��7-�>�Q��XU��z��CQ隌JǙ@�CH
�
+���9�z0�
:���(����3��
�7��O��G4'U�G۱��V����
+����<���b��>6\^��
NT<f>��,��Iɶ��o��5Ƨ��׃���߇�\�
+��_�!օ��qGWȅB��
��ܝ!Z�/ڵ�
ؠl2�y5���ZZ}^R<�p�����j-ܓ��<}�L���h��ɍWuS���ȩ��ge��K�-l�e�Θ�2J�X=��n���O%c5�Ə
��0���9�)�����Г<#�A��������
��i�fJEB�`̴Z��h1m��[��/NE&�\�
��g��n
+�t�։��|
��Y(~��&O��
x�}\�ܒ�S.�K�ʹ(�.�}�#�}��3�%���S=)F�~h�aD��e�
��	���z4D�5��/�u�p�܃K��2�ܖO� �$��i1
-��ӄ25��>)O����Y���) ���J�[z��İ�j�l��Ɍl?��]q�<�OF<�>��-���K��B�a׳��PŘ̝������QrZw��z��9Ÿ�7.�a'��-�]}��[�P�Ǘ�i��<��tq?�/T�
�J
-
�X��](d��ω@�b0'e�:����}�2T�B��}
�l�pB���ŏ��U,25��1G� x�݊ă6E�U[4s$�P6��6]M*?��t��.*р%}�7ݏ�; G+��*
+�����!|K�gӹ&����7.oC	(`m�����cV(=$��)�6���Pi
+�
�~m�Cjd}��\M�V>��in�n�vdC=�`�����H��ٸP� o��v�7��L�$�9H�T��I�����cJ�����``�����"�=|2��	'1DR���ʗD8K
+���7�������>��.v6 rM5�
Kq��h����R����j�޶2O�l��+
]t�yn��@
�?�n%�����*7}��Q�NW@�Xe@���S���Z��[�gt٨�B�Ӟ}�+Mز�6�59�
�:4��u�
o�@�.��0���6_�UC펡�*T��
��@�M����bl���pkk�w}|��}��D�OS�%7T�����
�|��B��wEU|���dU�UW���>_p� ��a�PN�C7^o���x&I��v̔
��I<��
�i�k� 2[�*�v�� D�O���I�+�D� �@Yci�5��r^����f���a$1E�l�¹�Κ�%s�`�1��Z��Q0���[
g�eϺ�A���q�T6K>��nn�8����%X�p��/��pB
�9cguBM[��y�
Nׁ�@KeG<H�Qx
+�Q�E��U�2�>�M$΄Nc�#��qt�k�2*U�Dc��3l��ȱ�8X�p�Qa�[�������b�e�?
��-T�c���0��_�X廣T0�L2�e��6x�28>X��S��W
+rp��L��� ��0��\9w�_�ѳb4fP�
+��tYa���Ub�p^�Ǿ����uJ�ծ�~DV ~�����h5��a`u����} !��b��J=H�ҋ.]�	Ԗ��07܆�Q}��sV�|�IC'
֦"ś�1]��x�����n8w|{�U�W�Ļ�Ւ�Zs
�n��ke�䊜1v>�N��nH���|���x@�R=
��m��]f�����f�tw�ӹ���C��L�'�g��~�~��0�����
+endstream
+endobj
+2417 0 obj <<
+/Type /Page
+/Contents 2418 0 R
+/Resources 2416 0 R
+/MediaBox [0 0 612 792]
+/Parent 2385 0 R
+/Annots [ 2410 0 R 2411 0 R 2412 0 R 2413 0 R 2414 0 R 2415 0 R ]
+>> endobj
+2410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [325.349 593.207 347.82 605.162]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.5) >>
+>> endobj
+2411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.213 569.296 417.685 581.251]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.9) >>
+>> endobj
+2412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [278.651 323.302 298.355 335.257]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.19) >>
+>> endobj
+2413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.637 323.302 339.341 335.257]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.22) >>
+>> endobj
+2414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.175 106.109 472.897 118.064]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [498.025 106.109 512.748 118.064]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+2419 0 obj <<
+/D [2417 0 R /XYZ 86.4 726.045 null]
+>> endobj
+470 0 obj <<
+/D [2417 0 R /XYZ 86.4 554.562 null]
+>> endobj
+474 0 obj <<
+/D [2417 0 R /XYZ 86.4 452.406 null]
+>> endobj
+2420 0 obj <<
+/D [2417 0 R /XYZ 86.4 392.979 null]
+>> endobj
+2416 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F14 1030 0 R /F16 717 0 R /F38 773 0 R /F11 1019 0 R /F10 1116 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2427 0 obj <<
+/Length 3473      
+/Filter /FlateDecode
+>>
+stream
+x��ZM�۶��Э�<C|���ǭ��qk����-qWl$qMRv��� ���]�6��"R 0
�����,��������/���q������Y
˙�i���[�>DL&�sfɢ�u����
+��<�Nj��鿈n�ʿ<_��,���=��m]4�碡�}��֠�뢾����?���t��T2c-*�R����'�%��<Kb����o3�"�9�ֳ�7IQ��&&M
j3����
��������\gMQn�3߿d}�h
3�����|�yT.��w�O$Ll�h{6Uq{�W5V,e�m�s���EIs����>�s��&+ֻ*�)\5�� j+��|�m���.����vA
 �fs�$q�9^X����/�bAV!d�X��MD�l��7?^H:ҹ��X|#M��,�U*N�ê�������M׫��ʛ]���+�X0Ց=V�B�BδIc��)����Eq
+2�
�J
w� 67�ۿ_�|����i��1g�)��,�
�}���/�����V�� �n�.sa`0X�
֛H��X�
�Ƹ"k��KX�S%��$m�J�5ejr�@-�u��
�fUqW�Pݍ��aG��o��GP��FtH-��$�PJ�����uT���>��b���"66��D^�`"Z�c/�0�
C�=�h�Ɵe��
s�����6tv�w4��On��3�)�q���ʿm��]�
xp��M
�R}H(�\N����'E�y+�88g]�M0lbbOK4Q>1�ᱱ=~��_n�&U����K����� j�Zn���-�K���]Y��D��
%��;�Pi:S�wD�s$Лlj�'-ЦX�)
S����X��o�z�|�Y�����!Fi%=�/��m88�
�]���m�w�2��(x�b�����|w�1j�rD
��}�g��z�C#�D;��������h��拆�M�?͆L��OÆ���sl|��~���y�uN0ǭ���m�>�9�"�%
J�"�:�U4�y6��q�α�,[��\� 8�2���&1�=_�E���0�̚�����
\�Hu�b���L���Z�X���s��[��/Y� ���>�P{��Q#[�&]]��
>jsQ�CT��xؙ>��M�����Hh��\�c��	��a
f��C�>1
\��
�X�6������s�籲S,
h��O`��Զl�zQ�ҡ�G�� v��7iד��]G/�(�����71�l���ޢܭC ��1�������W��6h�[R�	F:R��
�+��
Χh���y���Ȣͅ�W��M��z��~��� 9�
pmE�
-vU&�_`��!�v at Av�k��2��T�R��B�<�5g�9���O\�
� “& _|����Cn>;�
��,(�����+� OXopg��ط6�R
+�q\e�a�˛����|=a��G�
�dX/�Z�Y��"+�.�p�8���0Kh���1��2�e�GF
��
�r�'*
�����z���N�(r?h�R�)^�]s�k�{���m�`�8R۩P�e�Z,�_��̧�N�'�zq�tZ�%�H6�2�z�&�
���6���Ncn����qȖ!DF�H��o���l�@_!�j�y��f�֒B#oBO�!S?��Y��&�wY]��%�Nx�|K5�?]��{��r?J�l�2=(��$d��
#�[_����$��O%����H��9��W��P��`���M��p
/���b��56ŕ�����;��u��_^zxB��2h@ޣ�g��fX���yU����(
�΂�+��١�tqM�eH��EV�SEW�4�EWe�Qa�d
��]��8���J0�h�Ʊԣ+����6��DCZ���$$�l�g*�:�D[��;o
�ܙ�@N���A�����!�s� /I at G ���Au�C��CAf�bˁ�S�V��u�z�
�I��j%�nVa�2b��
�rK.A
+$u��RmʀBēL�b�	N|�b��
.����y]6y=�)B=�r�3�츴��7e�o
oՔ�40��}j���k8�Ǯ���owdЬ�턵�K?�+�(���"bR�c#i�[M�)!ZmM;~?Q���Ae�M�
�[�O�����G(yʌ�ܮ;Z���m�����|�+^���x6ct7�������TMG�Xc�BX�d󨚎���:R
��E��]�| �4��k��(��qrCD�v���TJ��{�D��:�
H}�P �WL
]�*�N��T�,~K�ȫ�>@
w�I-U~W�u�䬶��o�r3��侚�j6����q������i�,�㩬�k'������ �l4߫v�!Ԅ��
��K
�@CԨ�	Y���c�.��@J�3=� c\��\�| ���D�n��ׁ����.�Cu�
������/�$C�=WN�FG�lQ��w[�ކ�
�Fݴⰱ��'lF�TE�~7w������\
����*dB�K/u�G��Ư���r���Q�jzL�pTۢ3�(��bOԩ:��@�w���)S����n������rJ&��iN�D#���I�g�#h�*r¥�b��ԄZceF��l�ҮXܞxQ �m�b�K8S�`yߒm��ם�.��(�O�t�s�&A��u:�
�ki¼�pQM#�P�	R
+h��qk���Q��:6}D��.��W�l\j��
�Y
/+��y�ȡ�O����ё"�ӽ0���e���`6[���7�v�,;�#��: u� �vDORl# *���Gm0Kp�#�06*���n��|
���>\شK���2<5t!d�

P��
��蝁[w��,tf.6aJ�����:?Tq8d(G�`�ls�m[��'��p�U1d�b
�@���D�tAzW9�)<�k'��1烩xK
���4P��?S�3��+8���] ܖpu��qKP��L�Q��*�`"�*�%��Y�5����w��3��%��L]��(u������l�|Y�K����rqͪ*w�+�0��6o����M
�
W�S�OHEݧ���ޡ��W>{QB!�
>�yG��9���閵> :�3aC��j$����G��Du�8�c�M��Cm��Q����4�}u֧m[����U(�>��d_���������jD)����U�L�~ �b�pp0�S]��@� [...]
+׉���JLjf ׏-Ʃ8j���^��K��ɑٜ��j��>]���%��2��G�\���QJ�:��Ӄ����
+n��-�4Wj5`랗ϐn'�*������}/��
8�?*B�ք	!�:}򑁎�Д��wt
�8 ��������
Bv���C*G���;�x�E�
+endstream
+endobj
+2426 0 obj <<
+/Type /Page
+/Contents 2427 0 R
+/Resources 2425 0 R
+/MediaBox [0 0 612 792]
+/Parent 2385 0 R
+/Annots [ 2421 0 R 2422 0 R 2423 0 R 2424 0 R ]
+>> endobj
+2421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [278.651 518.782 298.355 530.737]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.19) >>
+>> endobj
+2422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.637 518.782 339.341 530.737]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.22) >>
+>> endobj
+2423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.138 262.9 185.86 274.855]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.988 262.9 225.711 274.855]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+2428 0 obj <<
+/D [2426 0 R /XYZ 86.4 726.045 null]
+>> endobj
+478 0 obj <<
+/D [2426 0 R /XYZ 86.4 662.405 null]
+>> endobj
+2429 0 obj <<
+/D [2426 0 R /XYZ 86.4 588.663 null]
+>> endobj
+482 0 obj <<
+/D [2426 0 R /XYZ 86.4 168.999 null]
+>> endobj
+2430 0 obj <<
+/D [2426 0 R /XYZ 86.4 121.16 null]
+>> endobj
+2425 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F38 773 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2437 0 obj <<
+/Length 3084      
+/Filter /FlateDecode
+>>
+stream
+x��]s��ݿBo�2'
>	p�t���e:7��%/�<�m��D��|տ�.��%�W;�L�[$��],�೻��������+���2�}����陕	���}Z�>G1S�r*����E������
+�tt��-��Uq[���]仹QMU���:�빒сf��ts�r�,��2Z������>]�r!�A>
C�9
ϖۋ�?��
+�|7�L%n���mgZ%L��fv}�ႇ��B�p�q"��1��My��f��tQ]y>�H^_�.�X0%
|���ޔ>1�K�@ₕRQ���AG�}Y���anL�n����	 Z�����d�Ug���q��yz��؀�
����Bhf�$���2naE�e.-𻢏U�٣F5p�KP����W,(����7\�
��.qA?�i��Y/��_.W�ש���ž����
�AN��� ��|�����n�.��nEcU�ʐ��Rq���
n?\PF$��n at P�=j7(h�4 �-��,�A
�%�y��U���2�8�ﵾ^�{�c%b�=���L�3nJ1�\림[�QV2-�G%MpM��Nϩ�7��P�SR1T<�;��:+������ȫ`��6�*�����U;u��"�u�
���Xe�Y�1�m���;��V�[1[�̘��o����>f����)�&~^Σ7
Zۘ
� Z�q]]�&x�-�Gުu�ߠ>'6*
���'G�L\T�ˬ�n��Q7 ���>�ys��/9b�ͤ2[��������`�tǙ�}E/�� �I.��Z�Џ��|G�_ֹwRkz]�U�Q�M�tL�V�����`[��� �rњ�|�!�i]g���^P�I�� W� (풨a;%�]v�vde\p�$+  Yy�'��
!Gr��n�|���h���@�Z�����r�W/DN�rr�]�R��A��MM!
+�V:��=+�P?3��J*WM�[(
3۬?n�N8(㘃
2 0
�g9�iI@3�<��q}���oǔ%�LK��%W�>�7��9 8���Pӆ�Ehɸ�}�򾨳j�OTl]�f�	6�
��&�o�mQ
BNS�S��j`ݵ;��
���1�ڀB�<9��
�_
�U�A
��j
�͓��D����i���
��z2x
&u�
c��v
��\1�ڶ�B?��X
Q@��'LJ�,IZjm�3X1S�T���7�k�"�u��`��0D��!Ďm��~l
+$��J����sL@�
	�s�ʓ���񢁬�]!*
���(�E�W;��t��|	�C���v$O̬ 
X�w�$.����]i�|&<P6�� Ov_fU��7$6_��D�j��Ԉ�\LO�R�3L
�jɛ|�ׁZA3S�
[��@"�5`��%f�P��&��$J�P�Xn�+���%�B#�4��A�K�t4�9C̕��ad�.ˢ��۲�Ҥ,
1hl�J��V�v'v~� ���~�m��'������P�{�l
>T��!
+�__�|��M��tCُ\��<�-s��1��I@;��߻���a�!?�O~�}�XLe+���+e
6���qt��W��
����x�;EY9f]�$�k�����U�2%�-�����ר'J�LRC��u?���dT�� �9�O`��$��� ��aK*��y�o�bq��4�-R=/�CB˕���ҏ�6�ɸ:��qih�U֤����;���?!��bʻ����
s�Vi �
�X*5�G

Q��Q�j�|�vՔI�l���h��B�%,���?+O��C�2|X�ҵ�
�s��M���BJ��-D�٫�
-|�bB�!��֜o7@=*[.�D�3*F|���m���Ƒ�8� ڰ6	rn�x��,�C�NҸ�'wUp0Qe�o���q/ �F<�J��2�zTƈN
惘4Q��Vj?���sW���m�ip�6�6>>o����^�z��d��%~KB�*�"-�U�M\>ڙ�㡪���
 %g�Bd��n�.�VU`��߬i�uX��z]��5
��
�ޤ�FU0X	[�q�Q~�����ͯl����w[9{[�J|h?-ע�l�f"
,K
�_HX���VMC��ѩ�2�@!��H��h�=�T��:$;1�9�f4A��J� ѶsR�Z.&����O�B�ر$}D�1d�e~w�yndB
�o���
"��}��ė<��Oz�P|�lɤ8,�yo����P�w]#�uz&���~d��n��Es>����hw���N�f��)!�4���x5�ٱ���h>
��X��{���&f
+�D%L�X�D'��V�e�[(D��^��u^_r�|��	�b�Q#��M\{0�4�b��s�'��Ÿw��w�9 $5�s�~��92�1�4|�1��:�������0�=�
��X��Dm�B�o3�A;|���������FF���r2vfbۉ
�'¢��3�J�4
 �[��z��� ZKZa��wM3����cW��0�"ZH��&�(
�s
�

+�E2'u�Q�+P��r���
(��z���|��O_���f	б+xK����?s
58e>�g�
��`ҹ���oz"��e^�\��~��TPqH��G<>�IXVo��������X
+�
|�?~��oׯB�S����ݔ���TS�d�Yݳ�#š
+�,Q��N����^��m�2|�p%N���AL��9�C���8�k��R�
L�?��P�i����SR������B�	�`T%p���o��jt�(cn ,`]
+�q��b�p{���(���@Mp�c�����f�

�#D;�_={���� G'��C�B��ģ��I�;/����Ks����+JA���د�qKOI]H�E��4�#q���lHpp���GH �WL*�2�c�9�� Njd��?b�
c{U �w�>��袑��W�~�+E*�M���+E���^���n���ڑ�ıS��$xw%
Ϳ���*�qz�V��
B�N׊��U/q�1%��U�� -yj%�=S9�Vd:׊��׊L�d׊�LJߧ�
�ʸ�����t�ȸε"4���+�O�W�~�{E��^�y½"<��/r�� �z���t�KE
��۝���/�i�\
+endstream
+endobj
+2436 0 obj <<
+/Type /Page
+/Contents 2437 0 R
+/Resources 2435 0 R
+/MediaBox [0 0 612 792]
+/Parent 2440 0 R
+/Annots [ 2431 0 R 2432 0 R ]
+>> endobj
+2431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.665 468.547 401.387 480.502]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.516 468.547 441.238 480.502]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+2438 0 obj <<
+/D [2436 0 R /XYZ 86.4 726.045 null]
+>> endobj
+486 0 obj <<
+/D [2436 0 R /XYZ 86.4 369.865 null]
+>> endobj
+2439 0 obj <<
+/D [2436 0 R /XYZ 86.4 303.953 null]
+>> endobj
+2435 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R /F38 773 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2447 0 obj <<
+/Length 3952      
+/Filter /FlateDecode
+>>
+stream
+x���v۸u�Ю��d���I��4��N6�Y�e��D���q���K���|�t#� p��b��	��������Ki&I�a&7�Il"5�"��䓛��Ӕ+q9�1S|���7w�3���RL����k|��eQR����E���5���6U^�_�;��M��Ӈ*�.�y}���ŗ
�b
6��X��|}��76Y����$�|s��%�H at k5��xw���X�p��l&�������3Z?L�|�Ic��ժ���x:O������Kz��uQ�I�r O_��RܪH�@�u�\-���uG��a`�A�O7�U� ����
���.�l

�ο^
+1-t��"REJ5;�p�d&4 ��Ɍ�(њ���g#G<@?�a
	>?`#�l3�z g�2�1S�M	c�1Q���U2�Q���n�m.��u��9te~�ՊHY|֗�N�@y;
C�&Ҷ���}ޕ�G�ډ�:R��ʈ˸�^ǭ��$���^?f�:p\o0��.%���.9�!����
�3�p�|��]��m��1H� ���^Z[*E_�'�
�N�*]�VN(�P�K؇�x�Pf�2��"vZ;�.g6��7�g�[^yN�`#K���~�% =\�-�}�5�x+n�W��j58Ů�ʿT�
+� �,���:�P�r��W9!f
=�
z��yVU�ρ�c��}X�uJ�9ªjϪ+�W�Y���v
�{;�4n��:��~�e	�����iWN][3]�󲨨�,�5�����
Γ(��<o�
`H�����m�]eA
+
��\
Ƞ�����6䎀�*��
ߜ��Xow����43 P�+�f�g��B��\y�ؤOP���f�0+z�u����d��c8ID��}����0N��۲@���/�
+`Z��ug��:�
��10�
UP���b���Y	r���t�_��Ho@��΄�o�a2��\Q�۶k�n��T�@�t��� :��B�H�#�V)T�`ȌR��[�@
������e�
�1�6��L,���ʼa��BQ7���$x�������
v��=�=G��ƌ�V�h��Y���jShwv�"�s�o��7h���ݧ0��H���FV�Ea�S�4�P$���F}3py�ּ�6
��H���ܦU���m���DՁ�֖
w~�nm���Ոo$$�i�6��"�i1�D݊��/����������
1A�?P
��toI�Z����6�w�Y��:JY�@p�>NZaAF��j0��&�� 
n&�� �!�J�;�<LY<ܮ
+86�E�I�P�Y���C at _��VNǭ�
p-@t_
+�2��,�tD�p
+L��z��0�u���Eu�n�'#�C��9)~ 6in�lQ�N��q���|���i폁���/���=�����J�U:
�Шr���z
+'�_.X�o��:�p����ZL^��O3jց�
r�D�P��%�%�
{�c#
0�蝂�΀
+�w�HN�r�`$�v�gpX෻2x�b�W
2�!>��t

+.J��|WV
�f#n^�О�W�!V02�DN��ը���.s�	���
��E
���*�O�4_�J�����cM�_v�p�
 �����Feqp�)���M
c��
���}�Xz�1z	F/���H�1�u
�@a�b{�pu5uK�Ġ�8-38�f��x�
��
qu�_w��&$���h1�t�������?�_~x�|d�(o�c����`�z+�|��͈2c�T�^���K N��V��*�aapLC�l�]�!z�΋�ܙ5f����64��%�l���`���H>��
I��gT���Tp���X�}�����tA
�e�(
��!���;\d��i�v�N���`�̎#s�QKHe��f/����x&��U��H��%w3h2y��Ӕ���:x�4�E_*`::h�7���Ųl�YN�%�ٝuKa����ހ�%��(���R����Qz5�����d��K�t��?h!�����S�q�
:6�����k��9�b�g�y��}�=���
����e��Xj���yjn�ԇ~��b��Ťaz���È��#"Bɀ�����q�$��rU]g�# 0����X�4
��GW�c�!��\d
I�(��h'��Y�Q|�"�q�ĤLk�@[�4H���Et�6Y��v�78�D�#
&��v3��wiAr���
��+�
1���ӹ�	���I2���9��3�
3�����v������;�XfH��B���� 竄����	�5p���
�[�M�(�����M8��l�'h�x�����OC� ��U��Go�����j�X!Pz�}�X��"����|����ç_��OBd��a5}�2��GB+�G�gmMB\�� q�G�vuE2���e�V<���X�>
�0
+#�3��f[�Z�
j�4
����pY��b�,��I�$���_i�F�NZ`����Tz��zˏPW�
��v���񝈀������$Qe=� �H����S/(�����x;��*���]�R�l�	���}H�-���%�� �ѷ�}8�
�ac��Uq<���}�ԥ􂳏CPa�1����s�]���5�2�R��;M��v6��Li{�Y3��-z6�*�Z��GH��6���:$�F|u���@�
���Sb� ����<�T?-iX��g�*�����������?�|W�m<#;�~]���cL�ȼ3�Yt&+�
�Y�cf��a:�?�(,.�d[
+B@�k����0�CA�����՟x"̳"c�!c�B�G;����̃���EHS5I�
����H�p�ML�X�.T�]]̆���a&���t�
G�GBp��%z"
���
]�\g�/(�c;9
�Ó�e�����@��$� ?X at xd��*܂�~ �2��$I0�I��NP½I�w��
�>��������5��\�X�fg�?f�%�����b���Q�u/�w��t��
�Q+�J�����t�t׊$�{5���
�Y��x���g�0��]:&{���p�au��1H� �:Z9W��X0/Ϭ�������U�!
J��x7K/]�rv�ܺ�rЩJ�%:,V⥭$�'͕�%��&� Rc�If���'h�ҭ?I�R2�]ȝJ���X)?{ڦ�l��	����}��=�va�kƦ��.�q�
?�������ح��5:T)������%�V��ܥ��j�[=A����1^ո랗����1p�J�t�4Z/�T��p��}Ǻ�����
[U
+�q���u�V���
��?Z����~A!�5�GM;p�\��_!v�{Y�����vu2V�)lڮ�2UV�ևV�\\�U�/�X|ъ����:�r�7.�(���*��aHm\zR"X�b���\�]�Â��6�`(Ϻ�"Z�u&�;1��=/�	a!2W����8^�~����\]��4�콲�d��	����iJ
�9����5=1JHq^�\b@ŪES̵
�|�IA�pɚu:
^��a���n���1�wA��i��sE�Zm�xr�>���:l[�&�6&>0�
/���
+֒�m�s2)�X�JB	����7~�N�e��X��Ŧ��ҫ�nX��C��^q�*�1啴�=��`W'*��1�(�.&
CyqkOP^&�`LF����bp�b��f��EQoq�]����
����@<f��]�#���˰�̪�v���~�
+Q
~m�<��V���ڥ������tA��W���G���B:m )x͹1��T1
�
���:T�?͑�UG��0���M?�޻fc��/�@�.����gJ�tA?S0
�(���B��P;��#ڍ�K�
�I��z�_&���LDd�=�o*8��������Tj����Qm
�Ȗ�
K��������Met'}�
�V��|.��.�Z@����P7�ƍ�+�#���N��,�ɞE��5�8
+J�MT�v?v���S��,�Xz�x�D.
+endstream
+endobj
+2446 0 obj <<
+/Type /Page
+/Contents 2447 0 R
+/Resources 2445 0 R
+/MediaBox [0 0 612 792]
+/Parent 2440 0 R
+/Annots [ 2433 0 R 2434 0 R 2441 0 R 2442 0 R 2443 0 R ]
+>> endobj
+2433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.138 600.003 185.86 611.958]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.988 600.003 225.711 611.958]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+2441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [312.618 448.038 324.574 459.993]
+/Subtype /Link
+/A << /S /GoTo /D (Item.133) >>
+>> endobj
+2442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.939 448.038 356.661 459.993]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+2443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [346.925 436.083 369.396 448.038]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.8) >>
+>> endobj
+2448 0 obj <<
+/D [2446 0 R /XYZ 86.4 726.045 null]
+>> endobj
+490 0 obj <<
+/D [2446 0 R /XYZ 86.4 507.849 null]
+>> endobj
+2449 0 obj <<
+/D [2446 0 R /XYZ 86.4 411.705 null]
+>> endobj
+2445 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R /F38 773 0 R /F11 1019 0 R /F10 1116 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2456 0 obj <<
+/Length 3553      
+/Filter /FlateDecode
+>>
+stream
+x���r�F��m��9��`jO�
oٕ�&��K�DB��Њ�?�����)�b��U����������4Y$4�����ٷo�N,�����&I5���h���y��Dq>��|��jZo��E>�)9�٬gMQ�k�⦬� ��Z�s�&����u]4ŗ�9|������.�c&8�&��/W�ξ�:�|� A����"���lu��/4�Ûw	%¦ɽ[�J����h�\��xF��=��4�%�2Œ�$�U��2_V2�d��ons
�I���0U�rr>�i:��z��'�����*�C`��9��ux�;f�ץ�w}>�����qA�?,�	߾�}�0�R49��e�
����K"R
�du�8
kx��2�L#V�WYS�Q
+8g�����Z*3�4�
�o&9
v
���~�,[.�_�W)b\^��OG�f��L���p�7�S��;�"�1CiҸƳ`
�T�40D������Av 
+�� ���
s!�d�G�r3U~�W�;[����d_�!����N���W� ���%��H��%�&*|�%>����"�1�3
�&f�ҟ��n�U�b���e�Y^��n���ք�V���ICE\U��(=�5"1kH�E���,����_}�
+��ɒ�
�]�ڱ�cg������'��5(�
���zD>RAt����t��ȥ-�g_�9���
!� �v%^�:�]���˹R�l�ɚ@��T��*7�[?�>hب�T*%i���2cP~>�$u/㿛���ķoW<y]�.��}5���=`�$P�y�wNe��
/-���ن���O#}�
x�xi�
�H����*W[������΃H��ȎE�=!AJ���F���9K��l���B�J

����Fŀ�س#���Zu��+wݸ���f]����?y����n���T�X�O���D�Bq:�P�t[�୿]�cؐ���3�fr�-
�x f���-
+��U�D	�]5��Ũ"�eG�7�j]��rB5��  �i�Q� i�8�
�NB
+�
!	�����>�0�-X�ԪSlk�z
1���˷ߏ�-������D2
�Iw9G=�
Jr�U`�G�&(�
�2��]>(ʈ��|P앱C>�,��.�SP� �r(ã��N�u����]"��:"� �
*X
+B�
$��w/_������Sl�%
������w�>}�}@.k�T�d�o�

�aԬ"ڶ�
�W�&J3B�! �j��8`�I
@e 2j�GO�({:�<���9�{�
l������ϔ�u��j�S�b� �@k>
��y�N9�������O�,K���?_���*�P�Sf��2Uj��z*�Sx��JCAu�!C>��6n���,�(�L
o�n�
+\	<�,�
A���V������~&	k��'AD
��D
.
���4x���fޏ�
"�
ΓC�98�������<0�I�$HF�!�g �� Q���A��Y��xst6��b�Lz1P*
�j��c���p�)P����Q�U<�c9%-���BP��Q��*�n�с�����>�S�����������2�TA _���:?���qbV��6>zImp�a�.7�<s\��������oqh�t�%��](c��`	~�{��\Xm��'�j�cp�E�B4Q��C!|���,����6���[��5t��] #��<�=C�5F�8Ӣq�}
����KyM�G1m���^V�M�R�?ʎ�< -J�Բ^��'kbVg���u�.�%u�G���

���/��B��7.ª;�l
Ӏ�FB9����@h\>�71)Џ��ذ�1�>�!�
+�_�N�ßH��~z_��r�gB�K��(�_A���e�O�cJ��C�Yw���� �W�ˉ���d(��;�6��~$3�o��<c�h��.��c�k�rs�8u ���m��1�k�
-Dx�����\�
+�^��s���m�+��
'�����U��up����*o
sV�P�$뇫:%Zوb\F���s���%�;os$��I�L�[s���+�D���B�u�,7
���'���&�r�<\��щP[y�ُ��L[L`"S���D����x���Q>�&� ��fS�	�5�ΌWg���Ӟu��������C�
A�wY]�A�F3?pЁ�.y�7X�|
��
+�Sb��8EIYW�`��G��a
��G���g��T�X��O;���*_��()���
	rڹ�+DT
�W����j�qX�
9 UgX����,Kph���܁[���#�B|0�}�����㎬Y��f��j�f���z�
��%�a�	�&վ���.n���ϣ�7�*�h��sC?h�Q�K�tY���]6˷
i��x:�?���=�
+����#D�°�)4��o�_ߖ�%�Q2*~L�_q���+C�l�/��JQ��|
��
9�g��m�i%����
-�7��!�e�PJ����$W��)t�1��qO����R#9z��Ǖ!����e��5(�pu�V3�����r|w�m����r��F0R����D��A��(���b�}-��H�	��E�i	C
�|�9��X9�~��h��I�ƍ%����{���Q�"���W5��?|\独�z8ӻz��W��7���
�r���J��U�V!
�n���]��[ؘ���-\���@O��_�N
��zg>1&�)�ǔ2{��2��Rf
+�m�1Cɞe�2
+dA	�'k��S��9žӴ�C
��_��3�ksT1�c�)5&C�i4���c��K���bF?���o� {�ʀj
`@S)bS{��AS10R��4�nA���`�X�'�}ߗM^��Gi���ޟr�I��q��5��؅]��sI�M��'���B��6��M�%w����_��ψ����)�Z�t��qcS";7d��n�*_4�XK��\�v��mR����A�,Eۊ� 5[K�ю��A�k���Ab�I
LcG�a��tJ�a
�c߷~�È�(��!\������� l�m츫�`�V���ZGH���0��
�T ��u�	>liK}�c#��Y�E������
5�ݵ�6ڐ�;���
+fjB���6��j��w�!i��Nl%K� �UJ�j��KeOj�OwFuK����`I�	�T�v]t'�OH���n�gۺ> �C�.��|�V&�Q�dl�v����--��Z
���j�FK�
�����p
�:v�ÚI�꫏uX3>��q��"�Z
c?�|'u��-ޡ�^c�|�RǮ�����c�*��g�Ҵ�a
���S��aF�M��ަ]m;��tA�h�������>�>y�#����Z�Ho�G�K?���ڱ�
��s쩎��pad��]�V�Չ����.	1�d͍蚬�	‡���1��OH�|�>�e
ǔ�#�kYǙ�e�躚��h���K��۶����ѭ~��Qt�~���vk۫p��m�w��_���<��)v[�����f�����{����Z?�
m�u�
n��+[�'�@m?�c����4�Y�w}r��v�P�N���
+endstream
+endobj
+2455 0 obj <<
+/Type /Page
+/Contents 2456 0 R
+/Resources 2454 0 R
+/MediaBox [0 0 612 792]
+/Parent 2440 0 R
+/Annots [ 2444 0 R 2450 0 R ]
+>> endobj
+2444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [290.412 664.332 312.884 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+2450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.178 130.56 480.649 141.408]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+2457 0 obj <<
+/D [2455 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2458 0 obj <<
+/D [2455 0 R /XYZ 86.4 575.625 null]
+>> endobj
+2454 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2462 0 obj <<
+/Length 3481      
+/Filter /FlateDecode
+>>
+stream
+x���v�6v��n�œ fVq
=�I�6N�i��e�fK�*I�u���^<(��9�降D��}� �\'4�����ɷ�E�Xb3�%���hnI&X��2�%eR�.�����r}}�F�/>�
+�����9���n������r���_y^�۲+?�
ޅU���][���}���Շ�?O E�P��,Y�N~��&�0�}B��&�u�V��px���O�(�0F�R��*��0�y�2"H0����e}Q�k@�fi�ZVyW�n@�W��#^���/�ȗ�����o�\��MS_T��/��*zY6Ų�﫢��ᑥ�~��n��D2Bm�,� V��E��,p��a~��k3�٢�
Ƭ������
anMzY���)�D�r]�n���)7i���77qК"�V�Wv~a=�H؉o _��-*`D����a�
�� X
+���8�A�=W�U�t��d"�KR�9d
��nS��ŧ3��l�{��~`��qb4��y�o���@Ӏ��#��t�W�.)��cmWl��{�o�����$�ŭ�<�{�v���ver���DY���
�‰�:~�6�
Y˞�,�7߶N����QRw�T����syY�_5����O�;N89.��D16gW�	 �0}��e՞

+ T��zF
+V��a��]�z��QN�����E1#
�C-�åav� ��G
�	d��<K��etU�٢�`��"<������j�ڭw�8�^Qvu���DS5���l|D��{�vF)a�<䴍"\�N{�6QF� P4I�e���#��щ��c
���+�W�?a��3`��4+
z�YO���W��t�
*DŽ���{���6�ez� ԕ��?��~3�	*�W5��h���ϳgN;X�	��lC4��b��l�>ros
���-���e*�ۯ��w�B�	"V���!�
„�پ�4�0��J��5� fa����<�
����Ì)�9HPb(f
@d܁ʨ���� �
'\=

���
����,�H�'L]�!���8��K��
D�f�)@��% B�
+��K8HY̳.�.�h3.�����e���@ev���j��b���)P���P#��#� ��{4� vZ���S J
3��pN�?�8J���(`
�t���m|h��b�t�
�7.��4��#�d6]֫Ͷ+œϓ`8��8�ˇq#�d�c� ��Ѿ���蔑H���P� E��H�ƥc&���K!0����
���)]�4ɲPF<o��1�oG�
+>7CA���0[vX�d��/pzWc����� ���"�@�`��b�,=.��P��@v4ySL�	W��p��� 8�2�ɫ�
+��"���
�<nS�J� �YL�Z
�m���|>U*ͫm at j���Z��"d�����%~���
��p���d`�]7.E����ΰ|����K.�����
@q���c��d$_��ܔP�"��Mo�-��~�����c�C����X��$#�E(,�6 at 5�6��r�����ì�C������3��vƂoŎ����3�n�Ê���ᢟO�Xf	�2B���d
LC�g"Af!ww��.	PŔK�'�;jln�_=������&~�.��*�3�7y������s 4T��eq^ta����I�h�e} ��&)
�)'�á��+�qAԥf
�T�!'+��M�
��U��;ʔ��C�����uq�7��y� �wFĸ�1�E�R�����WJ	
7	�

+��e��8�GP��3�=A
	�{�s{S�d�Ɠ��ס���v�
^r��Gx��}7�(��
7��ߠ�ֺo�F]�U�g�;�a���脂I9�\7����b��ri�P�!W
I����6�i0�d����
�P��B���¶7��
+M���P�h8U���v�t-Զ��V���|;OEmw�%�A>�W^�zHY��)�������a�h�5P�qB��@0E�Pf`w�o�/_�hy�G�y{�٨)��p	h�|T;�� *�+�mYU
pޡft�ř6�V7xp�
������e�nw��w�D�^ۢk�–�R�m�o� r�$K8OT�ǘ��Pdk
�((^�U�_Ϝ�	��Ǵ�9ó��o�g�����Ɂ/��GEYKA�$���<�)�����w/���\�V���u����_���~�{<#L�A��5ѕ��F��k���|`J��^������8��;<_�
�'���z�8��G��)
<��3x�vҦ@
���p̆�T
��pB��m�V�
��)
+�$c�(�8��1�O��k[���rpD3��<̩ �2
�c���+o�_}���\��է�W+��l����o�Ψ�p����K�.�V�<�[ѿ�2��/�.F呮���]אG����bZ�2�|Z��
��A M����	�E��`�hߏ��q^`49�i&�
%�8fд{WwE;M|D�
d>
Ŕ+V�v��J
�8�
<|�x��kw��
+
��M��~?X�y��9�14_ ι

,�I����J
\1mw;}!m_	I�4�G�lfD��OR�p	BJ
ڵ0TTŮ�\GW������d:5.G�R��#us�h��q� �����Mm�������ܹ8��DXǾ�����@�:�Ħ݁�k���
 1�6ɋ��
���c���d�u����O?��[Z��Pf�kwâ���`͞���Իj~��#(�1$`�v��Q���?L����$�z���B�`&��eF�V7�1�ࡃM\c����z�w�����Y��,ܒ�]������.|�ۿ�ӈ
B*3��� \e_��hӫp�m����$�����c ���MSD�S�'�
�f\��<������q���e�o�����-za'��@����j��K�����t��`j�/�
����{���5
�
iCE�>Ͱ3�(f{S�׿Jb��0R����8�[9��Q�a�)�.L]M��x2����P�M�u�����.�`�0�@�]f
2���k{!�p�K
0�Ю(�3׈�$<���F [...]
+Օ}6\�
,h��+�E̫�^M����[8yq���뀒�	`��N:L�h�Mj{�
3^�g���Y-��;���34H:��}�X�4�VĊ�L�e"��e���s��O\����>h�F���ĭ�~��Ey��{�j�o?{OB� *�����

�ܥ��+w
"���?����j�)��h�~s�.!�gO�+��Ѯ��������JuD�Q���e�����e�����!���x|ўQ�wC)�� ���I_*��i�؇�~u�
���BT�*
+endstream
+endobj
+2461 0 obj <<
+/Type /Page
+/Contents 2462 0 R
+/Resources 2460 0 R
+/MediaBox [0 0 612 792]
+/Parent 2440 0 R
+/Annots [ 2451 0 R 2452 0 R 2453 0 R 2459 0 R ]
+>> endobj
+2451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.522 641.789 319.477 653.744]
+/Subtype /Link
+/A << /S /GoTo /D (Item.133) >>
+>> endobj
+2452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [337.915 641.789 352.638 653.744]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+2453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [333.109 629.834 355.58 641.789]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.8) >>
+>> endobj
+2459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [309.618 122.648 332.089 133.496]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+2463 0 obj <<
+/D [2461 0 R /XYZ 86.4 726.045 null]
+>> endobj
+494 0 obj <<
+/D [2461 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2464 0 obj <<
+/D [2461 0 R /XYZ 86.4 601.769 null]
+>> endobj
+2460 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2471 0 obj <<
+/Length 3578      
+/Filter /FlateDecode
+>>
+stream
+x��[[w�6~�����=�;ȳOq��I6Ͷ�����D[l%Q%��������WѲ
���E�� 3��7��nf|�������^+;KXb��]]�b���ɄY%fW��ϑe�|�b}��r^�w�u�-�IG���΋mE=���
��oE�=W"���ʶU^�_��\��F��t}W�0X(�e$�9������Wg�	X ��fA��������%|y;�L%�����̴J�������3

��i#��I��m�
ƛ$��8f"v�(@oɸ�������2N�6L8KR~��պ�H�˷������PЕY+�b#!�ر$�O�kK<V�
�.!6^e�p��9*�g�;�LI_���n�-���&ʷ5=��
�f,h�a]loF��g\|��΄uL91�
�ch��P欄A�m�ú��
�*�+�t�
��u ��p�@������=*wń�[�j����yR���5
Nw�2�6�?�2�4��e|swI2�V��C�M�Hr��V

�$I�x�<)+�.��c:~�u�Y)�_��]P�9X��#!����5�o���ȗA�{��۬,�8�t�*O�fX����5a��i�6�(i�O�\aXŸgs���B�7;qd5��y��h�Q
_�lD�^
+$e�,3��H
+H9�2�<u���#Gݧ2�
+6��p+$�q_���2��*
��<����j�Q]K�"xI�(6�}��o�*�����R`#�z�9OÀ�����\����s�>-�Ժ+���lC}1< ��!��0nE�<�Mw@ 	��oRZ�RIT�Gy�b�R�Cl�F�"�H���nWY�ט���:Z/���ŗeF�̶ˊF�9X���яFA�:��gnʼ��2	��xQ��7�WW��'�l
�G�� ^���{�T�K%n���R�Q����cb
�
P�8(xؓ�x�a���B�?���6����+�g"+�(}Ⱛ.|��*]_�Qo��.^Q3*x��j����_��}Y]�/_΍���>,j�J�V ����q�i�)��#��r�7�q
\e�6!U)��� dp)JT{#|���]��b Oe��\sb5[�
�/�Fp˰�2�w�
��4�	Hx��[���Ϡ����
�_ൢY�"ͷ9�c��>
�N��~���5s�
 a,�.���W���ߨ0�A"�8���Q�������f���W�۫�e��F~�qB�V�eXbP\�g�%P
�+��f:	���Pu)��9.J�X
+3�N��_/�b_�	��"�>���
�C�2���[?
��M�t0i
`O>7
+'�X����=�DJJ U5�RJ�S
��̑7�",��3���$��ߑ��tęһ��� X�t��`����R,�ˬ�֫��Q1#f�h���d =tz1�8	y���xώ�z,B�� �T��e��lS�X��
]��
��%}�:
W�hx���|�	Noj$�]\�,Hh�x<S�2��S

�0���
����Vh���v�{,�"�関�t�<F�ρ�Fs�#���}7!ÙЦS�A-kBsζ��8�l��L��!H�қ�	��޹(F�K�8�:���
S�Y�/��`0��
�ы	
����ʘ5C%eӿZ�5HQZ�a��SS~M��~��0bV��~�-:�؃%�܋�!�
�E5|%J�Tf
�)���CV��3���Z���K�!�>d�>'�����܇���䐢�
�2�d��
X���AM�3L�U�A��zM��բ�o�8[�Z`)D�����\qfb���c���	ӼU�*��)|�0�[F�iUڹ�"	7`�~����u�'%t�����p�࣭��
6p2V VN�T��T�
K�`�
+ܳG���p��5")�Ą�/^�������R:&�~�����r8��_~�p(?��i��@�"oc(��&��4oRo��
M;V�+����S�����Т���[�N׳�;����q���kci�߀\b1�ܔ�$Xۧ�藌�;|db=p�>��C,�v2��b�
����#[�H�m�|�׮�6Q�
+!�K�e�R{N��*�λ��>�81+xu�?>Ǽ� ���y_�x�nB��m�r�S:/�ʉ�|d[��
 	�w;/������h�W_�ἄs'8/�/��=���2�
����t��.�!�0-�.��~|����b��@Hİ$1�A�:�ƸGY�/��F���N����;|��;|�����AG�gS����E�z�4�F���p Җ�&{=��ܨ
�
Q����>WZ�ォ��C1
�H1�ϵ� S���OT�G\��|��a�ٷ��~���+��g_ح�<�i�
Y��=@�:L�
�jӦ)G/���U�=��x���1�o�?�8�����0�
;�
��,s\L�sƔ
���§#�M�M����ӏ�֡_��Z�0BA�{]���1�
t
&7 at 1'�AѢ��:d�_��
�"�	���!�$y/�=%�k �md
j��c�Iu�L�v��\��n'�͛g�����v'o��mv@�n|H��ϭq���q[l��ʂ�
|t���V�5��\��m���|9
~ۜ\�D��t�b2h"�J�^T�{-|��/�}5��x��N!��ve��ϓ������Iн,�\��E�)!j�ګ���Q��W��E�`kL�D?x��ӣe���􊚋0��RH̫��}	�Z��]����|I7�d8q	c��(�W+�{#����<��Xk��jd_T�u��p!���@
>��;�}J�cR
+\شä�r* 9M	�����G���+!�cR{z)�1-��?��jfƷ2nBj�m��Z�q��u  �0��	x�ø�
�s� o�
�'*���o

A_}V�x5��K�|�����Н;����R ��(^
2
0`
�Z��۞萪��~���D� �*[�*��͊����m�a {�	����g���c������79{U v���4'Z�
��+|B;��f&,��1J�Zk���I���q���|�ni
:TuZ�G��e�}�bC#��2
�r��M �<�8���cW��Z
+�
��ZyX�TPT!Nԃ�X
h��
+�JF�)OS���z�|�o.нyx��{.E�^њ*�	s�uG;(*�f���m����iTAN(y����h�C��x�#�-H HǀW�V| �#�HI �@����g�\��f8�=E�{Nj
	�Y愂�钞�k
�>�k
� ���1��[��
�
5������3L��<�>����k��$*C�A�����?s�h���1��)�Y���8`>t>�j�Ɂ�
�_ʌ�sw��S����|��7Y�€Iu_
��� K�	^��K��λ��&kV�#ӡ
���A�o�y��ڕ@# �,
Y
$A_��\x�˗2pD�$Sfi��nQ
f��/Ghn��
+R�
�JZ�Y���8����l�$�26(���;������P����ӱ�Y����]V�����ԝ

>�j ��,�HmU����Xw��R
T�n/:
�kB������21��͡G����!�?�X��
nҞrEɎ�d�_�k6��ёI5�w;� ��ʪs�
+endstream
+endobj
+2470 0 obj <<
+/Type /Page
+/Contents 2471 0 R
+/Resources 2469 0 R
+/MediaBox [0 0 612 792]
+/Parent 2440 0 R
+/Annots [ 2465 0 R 2466 0 R 2467 0 R ]
+>> endobj
+2465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.794 187.437 211.265 198.286]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+2466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.387 49.651 306.342 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (Item.133) >>
+>> endobj
+2467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [324.245 49.651 338.968 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+2472 0 obj <<
+/D [2470 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2473 0 obj <<
+/D [2470 0 R /XYZ 86.4 701.138 null]
+>> endobj
+498 0 obj <<
+/D [2470 0 R /XYZ 86.4 109.29 null]
+>> endobj
+2469 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R /F14 1030 0 R /F38 773 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2478 0 obj <<
+/Length 3710      
+/Filter /FlateDecode
+>>
+stream
+x���v�6v��n���t�gOz�L;YL�-Q���!�$���� ��d;V{f������}�t�����/�/�}#�����]�f�&rf�%Z���r�kĤ����J}����r.b��x)x�W���]D���ϗ�*�
N�~�U���:���8xV�
�FwUV]�~�����_0@��X��"�Գ������l	3?�(6�}v�3),��Ϯ.~��}�d<&J[F�ў�����*��n��JHov/�o��c4&J� �}$�%،���f�ܫ	�L�m��oT�*M�:&{
9%��f��*ϣr
�����!pI$oq��
�y���س˹d4J@
VE��nQg��dT��h�K���Oԛ0�*��q�5���\S¤��#V>�n
�W��B�����9���ߏ�^kAqB�V�@/����ڙ�1�� �jI`aBk,1��i%H�X_�#��bFb�
������<����
[)Oƫ�7��.s"�+Lj��U�K��m�LAWQ���*�7|AÙ2Mr�ί����w�lqL,��x�X�"t�
�c������1]�h�p��g^e
�S6,�Œk� ��(n��V��%�b/N0�2�<h����8+��sH�^#��J��A�
ʟ�l韾�WiyH���p�A�Q�I�R�zI���2��m�%�zd�N�,��,�EP@
0��޲��k$��@E"��<�
+oX^�3��C�bC��g��� j
+=�
�w#�ԇ2��Q��9<��}�}KQ�#��JE�8�˜��3:Z��}��9��`�r&���7Y>p.���&Y�o�����r�Go��&O�~-D'�D'��%�ɗl�$l�@ �$`*DTO���"2�r�~��7��y��o�
bWW��3�'����p֬t�E
O �ž,��~�ӥRQ��S���� "G-�얽�%~
�*�8JN��y at k�о�����*���	0Y����'��.0F�g�W��/��PD7N�㎬��l$��?h.�����o���/��e��γ~8�!&Tmܿ
+K�Lk�h��=61PM�
�q"1��ͬ��4+�`�Ր�躿��ž{��	�����
+\h-',�YN��5e���Ÿ�*��
�	ib�eOqL�p����Š|�UB
5�S�	ǣa"̇�N˾� �7�c�
�J���I }�TU� 
f� �@hHY�e
+)���UC�(A����
]R4TE�b�I���W��WФD6Q�������v<��m�-J,BPGrX\� �]�y_Ǡb`�
g V?�� �

+�xz4���ղx&(-ĩO
+�AY!�EPtM
Z`�ܚ�ϛ̅,O�"مL
��R;
An���Sx��}7��� 5���,�@zÅi���t$Z&NnhZ��d��p�|���#
��d��c#��x<
�ާ��܍
�(tT�F�'����G	�B���jS�s`$�2*
�����l�_��b��۬��>��K��
S�4���>�DR�e���(�o�t�̶w̥��8����
`�$��N�s����.��v���W��H
vMyK
+l��V�
��G`��	�5�
��fy�'5jH�_j��`�����l�5n)b�O���Nӡ�G��؝�a2�B�RT��ߦe��և��
��V�u5U`�lɶ��IUO՜b�G)�OJ
�hL�� Ä8%OևT@��T�ؤ+bX��G�:D�+�y�<�\|
 ���o>�{9��U�S~�}mL�
l���ˏ�'�i���/bv��s���t
9�?�~����~k��*�^�����h߅�l41z��7�W05p
+�
+�7�O>$a:j\�l�R�u��n�
|�)]0���0,y1�T�ֽU�:��K�A���@8�'
�C�i�&��C/�������?O�
�J�6�a_I��Ht���o�<��=i��LX(K����i�N���,�ڑO8i�4pD��?n�d�O:�4���[l�'�
+��(
+�a�
C�;�}��1c�1t�sb�9p��� ��v����Y�ՐH�������SI�fS7���i�0 {W�i5��61D`�ti�
��6Ϝ�c�K6� ل�^�޶h��U���"	��&]�L1��{�sW�(r'��
+
%ǫu��N�HL���ɾG�a���(��Jk��*J��U�
V��&%�%�G?Nc�~0=̏����<�3;��2�^D6e��4�W~;��=
�d��H�F�)��I˩�
L���N
��g��W^��
M�����/CH��(>e��\�[�6����F�@�m�I�"��tr�v?0�c�s~���/_&�+a�
���9,��h�ޣu�6��HX�"a_�\ yB.����6��̥�4���}g
��No��L�均�~�*<W�����Aq�'"T�����`aB
�du�M�,���7����7�d��b%���j��q����Q�YW��i���yL�*�xX׈1h��Ib��
Gm��}���m�]O"l�+v�I�0��'����n��	$�"&�eE�}k5�!�j���|��[�a��w�l� ��C��q�
6�{,��s�䋽 Ǘ;?7�.Sg�]�GIR�~�N�I�ݥ�2]�Zk
G׸
��J0d�M(��8��Q%�q�*9uX��M=�C���מ
���l[���;�7>�D$*�
�=^�C�QR�����,]-�St���f)���K��U]%�.���;�j�-�b
�ݻN�P����B�v=�%7�u傓X��T�;������.�ۮ_�
�V�p1d��f�r�p�����HZ|���H���e$��<��(��˴�W��#�Y
�V��d��tCm�
�a���E�
�㐶���;��ދm����2TUי�݅jd6%N��8� 	s(�����t�$�
V��ܙ_nx��oc�m��@���#�z�O9�a����B�[yt]��w���M9���
+כ��o�+6~u�O�7	V��C�* ���ˊ���$vsͯl���o�n��UY�/��܁��`
\�b��@�����RZ�sW�� 
��:�C�sk}��_P�I�'�hU�����ƁQ4�׷�K=l
���+W-�v�	��r{@ڔ>@"J{�Bt�R���7�����Tݬi�b/8���YuFS�Q'=N�7.������K�a� 0T�c�*h�Ԥ
0tPq��#I��x�2[��(�	L�OTٰ�
Z	�-X�
�ۼ�v��X���	H�U��Հyb��
+� ��Wb����&;�=�L0]
���?��`�z�1�B6��f��h771��"�0�Zq�1ZŒx���v�4�,���ᾏ.�
ުf���;����+��W�$k���U3�]�y:6���Kp�ۣQ��W� <�
��VcQH�W]��z��j+��X�(��O�:l��Tm@��n��+�J�r�А*v�Q4���j��
���
��d`�(z����$d�M?��׼
��,xH�����Ϻ�]#�Q����I�/
	's����.z�K2/m�"\�$�y�5op����Ɉ@�	�<�ȣ/y.��
v.$���_����>�7��X��x�[�izG8����ZQ]������m�_�+��}ۃ�ߏ<�6
+���;�7d
��0�gM���
|w
�|�'��
r,�0
\��H�F(���{`������"�7�@������
+endstream
+endobj
+2477 0 obj <<
+/Type /Page
+/Contents 2478 0 R
+/Resources 2476 0 R
+/MediaBox [0 0 612 792]
+/Parent 2440 0 R
+/Annots [ 2468 0 R 2474 0 R 2475 0 R ]
+>> endobj
+2468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.547 687.689 368.018 699.644]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.8) >>
+>> endobj
+2474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.783 249.056 230.505 259.904]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.2) >>
+>> endobj
+2475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [320.078 236.824 342.55 247.949]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+2479 0 obj <<
+/D [2477 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2480 0 obj <<
+/D [2477 0 R /XYZ 86.4 663.869 null]
+>> endobj
+2481 0 obj <<
+/D [2477 0 R /XYZ 86.4 157.38 null]
+>> endobj
+2476 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2488 0 obj <<
+/Length 3873      
+/Filter /FlateDecode
+>>
+stream
+x��[[w�6~�����9�+n��ٓl���N
��-Q2���T������7A�{{�b� �
�\0&�͌��qqus���gI��,�ݬg:��L�$�9�ݬf���_.����MV/��nW��
+��|�/�m^��
��j�HW�����yk;��l�6���������i��MS��S�.�ys����$3�	���l����72[��73�D�>�qۙ�IĠU̮/~� �A2dTO��Q[>_ԛ�6+/�����c:��Wb8EL#�$�1���OƋI��Q?��ۻ
b��׵[ؾ�x)�<-��}�֓@�t��v�
�&+W��~
��:Oo�,�5����G�r�}�'��.���%S@�ʾl�b��g@�� �t�ο���s��<y<�bE�EV������MK�E����n`��D	�X���o;f4�E�
+?��
�6v�ee�H�2/7��6�C�gMG�p��#�	g@�� �
Q"�]�K�+�{�'*�-h@�D}��cʌx�Y8�(T?l|�bYn�
��|sg�Yܥ��n����;J�^F�L<�N})���"�8DDZi`:�ӓ�C�#-�l0�$9�#F�X�ޤ�G�ڷ���c�����s�M['�f�֍
KU�y������/��=��CSEc0AJ�d"#���V<�\w��X�1r(	��Tܫ�*m�Sr�`�8��)���QՔE5#�����8\���w"�&�:��n�]�4�S:�� a�
�����Uv���I|癙�e
%�3�gtI&��b�5�vG����LG�3#�������(%��Hc����w�m�=!�|Ң���%(�ʾ���#ss|���r��?M����C�B��5���X���:"26S	����f����ݡϧ�|���Y��ii�S�$q��9j��]��	oQ��B�$�B�:x]4� 
^�
LX���O�7���h��}Cd�ҍ�!w�
@W���������@s%Cl�Q�
_�v_�S{0��$d�"�$��(��.U��h�}��T���@�؟|m��r�5�z_|�>�2�:�ɸ# [...]
+6|
+8i
��t5/
+;qڢN����Y���-�G
+� ��
�Ӡ�bО�ߋ}�0��O�d"�~�ϳ���1ʧ��~���~�
�$!��4"k���ib��i�
�
+2�9@���1�� T4D�8U
��:+E�9$����;ʂ��x����p}H=ar�$�s
+a��P����W�߾
,���O�0��r���_~x�[
Q�� 
$�g;��{���6��x'zt�a�9�Н��w��ֻ�-�'Gz_
B "+M��m{���N���8t�Һ'��vvS�.�����ޥ�o�&RG
+l�\Ϡ�Y�
�<����
n
g,�3��yQ�2��oJN�T1x�f����y��Ẩ	RЧXW�%�u_�x�á�����}�H%�aI�;���P
�|��s�b1�:�x@���4�x
`Q�j&�����
8F�4S)v�`����:�xZ����P��xT�!�GO0IM�ba�I� �G
�{���ǔ1o�qM��3碹H�m�f��%�p�'�&��H��O:�>i�=�O[��}�ڧ�J���x�]�aĵ�s.
V��m7
��5�.A9:z:�A���m�XN��
jѿb���������8e4� >���� H5��CK
-5h�8�:qf������������ﻓu�)�DL>�չ)�mF�|���P�'�I=
�
+�,�
�� �0�
B�gA���_�_��&��7y������l7׌˷!B�T1���G�?%�8"���p�=ʈ
)�ӭcֆIS�1ɴ>��ՠ�d��
�r�%0��-����A��� U<fاp�(����z��65q�0������lk,��
����&����J	:��Bcfsg� ��3�să(�,]��-�>�MkXM�^K
�n�I�������
���2��l!��M�ĥ�P
|�l�o�&�������%4^�>��g�L�`��v{��eT���we@`	�p�
J
�|�}3�]e���]eU�'��{�cOޑ俻5t�/�?�#wb=}���-07f�Gw� ����]�#/���D��Zwׂ���|��#��D]-�۔�'�>�}_e��Sw��J�~�,[e+��7~�|�tw��@�qvָ�7t��ޯ�.�� �p0��
�Dpf%!(s���wV�ڌ���t�8F��m)6����6p�0/�

v�c`21n� ���M�>�ɂ
��!T����/[s��
� �R�����3��3��n��j��<+w��O��Lnm-z}5���+����s�b_ٗ�s���{H���BG��iݩ�g禢�]o���n�����c��o��Qr�X��A� LM��Uւ�4)� ̙�6�pZ�O������
���[w3��U`�~��K
:��_���L\��|Irt�[��e�7�Qhd�c
�	�Y�<b; Ȏ�ᆘm��W���Wٺ2
+�X���n4O�������3<��Fq8��ăҫ���HD��^��̛'��ЃAA{W;s

y���e�� !i���$���
@P����N?�u<�e��*2�^-�\��d%T`�)�1*�ڥ�
��B
��x$�#Ӌ���@ ��ֿ\��v�z=,���I"
�p����ھ5�|����էӛ�M�4
���
+)�Ƭ�T ��?'U at C��&R7sa�˥n�P��Q��Fk$w�
+O/��F�.=N9�����G7�.��
�u�j���e׀�A��8�RL;
��H�ζzH�QF��S9G�@,B�K :|\bY1��T�'���
������� r�n8����p���(������ 1
�5.x
��LnX��
�Cr���-
�9L^���et�}�df*�3���#GB>�
�u2&��%K
��I�c��ÅO�
�A���+X�*��wF*A$"}
f��3����K����
��|cK�bՃ�Q��V����*[
���c]Nč���|e1SЈ$�-��e�Ǎ];��:�0Ď6�k���5\��R.������8��G�.k3�|�.�o����*�Mh�
q����f��*4��5S�<���v:
��
�_R���!&���k���(2bd��1<gl����鈩�
��q���Y��H�'��
C�H�I �����07tX��f�#.&�a$cis��������_�8��6u���氞��<
�
�P����^WG�N��l��+�3�
.p�0��ԃ�Ź��1�Z5���K��#ИMd��s0�b���h	N+U "`BO����(���?3%!���
D K7�6k>d��fb�޽�/�b*	�>&�H�t8�	���2�]�+���}������]��`�%��ekx$���ڈo�X
�
+�!U1Տ� &1��
�����P]f����!(�cN��	1����x
~`�lǶ'H&x�
��q�G17��S��R|�
+��S�$T(�Tx�a
C&a�)�WD���-�Jz$Ҷ������W��,\6+btx�daEOlD�)���b�kx����U�=��`*)��nw�=Qa��X��0	�=���>o�YL0�i��
Z.��M����ɚ+h��!Ɩ)տ���P~
�����	�K��Uc��u�t��	z��'��Q���"�-�o��y��/�����j]��Wg����H�Ա2p�����(�]e�j�ΣV�����������֗&m�����l�"|y9���p�ّ5�g���O1a��˴�g!
�Ɲ�Qُ��������^�
+endstream
+endobj
+2487 0 obj <<
+/Type /Page
+/Contents 2488 0 R
+/Resources 2486 0 R
+/MediaBox [0 0 612 792]
+/Parent 2491 0 R
+/Annots [ 2482 0 R 2483 0 R 2484 0 R 2485 0 R ]
+>> endobj
+2482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [479.509 363.162 494.232 374.01]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.2) >>
+>> endobj
+2483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.426 339.251 227.897 350.1]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+2484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.342 202.546 158.297 214.501]
+/Subtype /Link
+/A << /S /GoTo /D (Item.133) >>
+>> endobj
+2485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.4 202.546 190.122 214.501]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+2489 0 obj <<
+/D [2487 0 R /XYZ 86.4 726.045 null]
+>> endobj
+502 0 obj <<
+/D [2487 0 R /XYZ 86.4 261.848 null]
+>> endobj
+2490 0 obj <<
+/D [2487 0 R /XYZ 86.4 189.503 null]
+>> endobj
+2486 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F11 1019 0 R /F10 1116 0 R /F16 717 0 R /F14 1030 0 R /F38 773 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2496 0 obj <<
+/Length 3238      
+/Filter /FlateDecode
+>>
+stream
+x���r���]_�Gjk9�{q�*�
ɪ*�ƒ��v� ��%	 %���t�
N���j�r��Bs4��>�N�'t򷓳˓��
+=IH���\.'V91<!Z���b��I{:c�J6���7ק3a��ՇS���|����tY������|���_y�m���o��a�&]��ʫӟ/�O�\��r� ):a
�X�'��ɏ?��f�'���N�ܺ�D��pxZM.N�uBQ�O��=�4�Nt�3�ӷw�o6}���A
+
�r+ՙbZ�d� ��]Yf�Sn
�0s{��4]�2�Z,G��lZ�w��L�r�'�b���b�@ h�
ySKٔ��4
Θƈ@��H���Α��w��%k�mOgH�f�(��Uyz�ʾ��?�e~}���n���/��E���m�NЀ�Wo�aȵ%Z%
�˰�N4I���Dk,PMd"��3��O�&V�Io�qV
+�	g*��-�*+M�i05#'ZZ�s�*a�rc�+4�H& �!	�s_]�uzL�,V��
S�c�43E�uVy�����G��G"��u�R@oӪʂ
�c��
`\ ԡ��C��.����놘!
֒�M$����P����qz��<�?o��G��G�G����E�V��-��5r ǜ{o���Z�������cl�ٲ�CU���D
A��y��I�V�8H�*���
�́t�$ܶvw�ϑ�O�<uf;=K���H�ȫ@m�n�
\�:�#<P�0�:͹���<�_����n�c���|kԴ��A�e�t'
+З^�.�58OU���o�y6�@�M�;H�6�#A���]�����g���3%�L�f��O
+SΓ���Z�؛D'�\�&
W A�c��Ȼ����"tk�M�[-�';��
�y@�ڹi�U�r�
+(�A	�8��C%��߲2�
���ee9����q^���/��)!��*5�-���.�.���t<��fDp5�wE�Uc�
+m���ә�ܹ�Y��nW9*7��Wy��ݢ��M��m��b7��H'g|[��]�VE :�$o��H��ku#��ۈ��N8�K���
N~BR"�
�o������u܆�u��  w�E���J��>��<x ��+�~m��ؑw��?QEc�o��l�G}H?X�h��e
1���>��~M�l�c �v&��@�f1"���g�b��x���~��m�����b��	����h�EP^9ᡋ֥�L�.���wP]����[
�*�K,�>"�+dcD���G���I�B)�jh+^|F�u���a��u����`أ�X
�� +eX8>`�̪���o?��׻u�ԫf( �~����by��
݀���Rnu�q�|4c����N� F?�`���~��.��Y
�� �ɡoS�5�_��ư������P�����zg�h4<��[^�
���� H�� ��)ԞU��
tyrT11�w$#b �v�1RKh���� P��
�TC/�y���`� [...]
+r�e�`l64IK/��	K!!-��]
���P�}��Cd�e��1��� ��Q3�ƿE����d���T�mt�2�u�:��ҭ��g�<yH�k3��r�L8��h��8��+(
 �$�H��=
+Vc
qoFbb��H�Q���g�dpjݹ�h,Ɯ��
+�z'%5;.J-H"O���'��&o*
�e�!
mlk���� ���*�8{P�p:�?
+ʼnВ.=|B�( ��F
)
	����������
�J��q��8ǜ�D�(�-3���~m}?�"T
(:��Av��%�v1�t8Y+Q��c�A�|�2G�x���c�XR=�\�G�
�-	I�OS/!��SAQ
��올 �_IᰵG�X��2�(>b�m�/3��Ca ���؂��ZA�����+

Q'.	���
|^�!�!
|��),ѡo��H���V�
\㡼ߕ!
�
+,\S!�
�e?0�R5�B��|8�����H�L�6{��� ]�u
K#d?�v�����
ݖ>�a�~��D
.����L�����u��č=�3j�MHߛ+v��;Ь���Z
>��dexlgc�.����0����H�AY�VP/���^�!
��}�g�j9�����
ķOh�����?�k�
���=�"��5.q�!��-��0���P��W�[hm��-��P
L0�U�jx4��ʰ�+f����+ׄ)���g�|��V��S���10$����g�5�o�A.��GS�WRδD�R߅���3!�7��?���<�]�3�N�����sk�OԚ�vj�DkAq�<���[���4W�P���[�
9��sk�woM
ֵ��y�IY�ܛ-�hy�|�������!�(��AoZ����M�X
�8�M#Mo�y��so��7�ܛ�s�������DH����G��
���
��֟���8���{?�D���iMc�B�#RE����4*��G���
Ҽ߳p�&�;9#u������Ë#�5���r��PK��S�B��#�ol;��w��P�

j=�P��
+�fu�5�����Vb�lZ���Ps	�5{�!�C��ߧA�>Q���f�,Q��=.CȮ� 	�C���}�Aڻp
)����w�
�S8FAU�7�dP�h�]f@�W�&CW��T�R���u���ծI�'�
)

�_�
a� Q ~�ǝ%����i�+=%�FNY�C�r&��:L
+�
_�E��x�+մ�aS�͚4�z:��o}
��%^�ڞ6�����X�
��ӉWxI���
����H˰�K r@	׉
_ ��`�o�
2�
��U��[�X]cz
 �B	9҅W�7y�V�3���iS�Z���H��A�I���-k?Y
'�B���+]ք������i]濂/�ܟ^��>wwÏң�ӭ
w�m�[4����
>��A6���3�Yei
��n�����N�cf���j�<��q�5�+����G�����/j�{�N&�5Q�aDuw6�E\&:9��1V<�zWL�� �٩�!=�~єb¢�((�?I�$l�P

+�t^%�'�vZ5����B~��䴊�kKQ1pwN��
~mx�<
�;ޛB�B�g�d�Yf�� �
�8h�%>�_x&�Ke`��
�_�0��*��mn�9��tH�
��vK�ml�������@�d1�B-��l%��?7���D�����Q5Ǚ�2tR]�{@��O��b�V*��σ`�Iw�� �]WZ�3/
t�Y��h{����� �h�+
+endstream
+endobj
+2495 0 obj <<
+/Type /Page
+/Contents 2496 0 R
+/Resources 2494 0 R
+/MediaBox [0 0 612 792]
+/Parent 2491 0 R
+/Annots [ 2492 0 R 2493 0 R ]
+>> endobj
+2492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.781 524.727 448.252 536.682]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+2493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.986 146.938 426.457 158.893]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+2497 0 obj <<
+/D [2495 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2498 0 obj <<
+/D [2495 0 R /XYZ 86.4 493.867 null]
+>> endobj
+506 0 obj <<
+/D [2495 0 R /XYZ 86.4 132.078 null]
+>> endobj
+2494 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R /F38 773 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2501 0 obj <<
+/Length 2293      
+/Filter /FlateDecode
+>>
+stream
+x���r���]_�G�cn�����j�N=ӌ)y�� K
� (��~|�^@ H��8�^pq���
+G��~usw��&#���2��G�D<RT#�Ht�F�'��)����T�z�Z�I����Ŭ�ʢ���/I��2+��4~�6E�5�c�\3:���I��:�̈́QL'�����^����?W�i	(�2�-��������0b:��
�2�L#
+oyt{��+

��qA��!X""�S��:��@Z�c8 �#
N�<�
+Y#�Hj���^���v������n��Ѽ)n��A4E
�?���
�~��9r�]���#Ek�ʷ�&�Ȭe8
ڽ1H����j6+����TP1Ɋƿ|���
���2Inwz��~�/:�5�@��4���",�2��>�)��c�G3k����7����T�$��� -��#�I$����(�9�1fM�;TR��n��c@�.B�a�
�cn	�BH�����c%���zDգ�
���)�R��8L�GO���
J⾤����,�IKy�Sj�&	�p�c��
��|���c��,)G:~���]�B9T*
�I�
�7�#F�%��".E���������?

Wɔq�0`���UpQ
�w�ju=��Mos�~J%���
u���yM&3�{�#aB$x�k�nj��Y��W�s�Y��7uc���o��!��SX�^��
�z��Cv� I�[�?��"	��T�ִ�����df����M��^U�}n��/�)���
+Dq��
�KS��M��pZH9�D%-d6�l]U�`���Z�I����Y�2���x0E����f	��


��@(
�z�/��
�(+И�i
,s��So��xA�d�
�|A��Dk�jh��(�b,Ͽ���a��LI�z�:K�6�s+�غ�y ����h�|+���N����;��޿s\�6�S"��t���/֑����#
���٩.qO/yV���ypP�z��Ӄ^ڀ�
��rBkٗ����hV.W����~�����K�ӓϧ��%y+�dn/��6(f�`�w�i��2i�쿯�l�y����sĶ�
v���m�]�>TU{�?�@(��6�}��`qo;"FhP����
��
�v�F��ڐ��P�z
	I��Rϳ���Ϭ�v*���M�3����{o4�d�i�8 j`s�yc�Kt�4͢t���76.,W����yl��m)
+�/L/�	NZϿK�:�Q(�+��*�$�
�bQ�:���0XYO=�jt���G2S��N3��1�V�!~���gx�'��+�=T���Zp�gA����q�e�"��= ���lM�q m�T	X+�UR�άR_�Q(8���m�c�:J��)���5���};NF
#���?hx��vh
���+�� �c� �5�\�eYm†</
�,qQɮ��c���6���_���߄x1"5�R|k'c%(��4+@��?�H�ԧ0�.u�3��
f[x����\A��\͒"X��C}�3�����

k[�]^XV?�dd��̰$#p3����{Ӭ�b���]�1��A
U�a�;�kWAA��J���m�Al}�f�~����=�~/�u���΀tQ���#hs.+�P>���W�|�����g3S��u�n�ص��pp^а1�˚%��T�����ZP��t�w�m?͒:�{gh)ilc���<�o;��#!�1�mg��}ڂ�0>֩�^��|4�.��g;�� [...]
+�K����~>$<������o�n�śgG���瑱B
+J�
Ӄ~�A*@�鋐�>Fƫ�m�C���	=sN�&���H�g�<@0���x�>W��!�ǂ&��XA~ZD4��D�d*���c����pjsZq������U�
+�|��bp���e�
2}l}�u
+��6V��Ju��9SHj�?���D:�9�1VPt׾s�|��<A�t
�'X�����Ϋ�'HD%;:O����8�+�'t�������u6���g�f�_:(���c��<-LeΙ\x�=V�{
�:e��䲨.��/����l{�{��?~��۳9J�,�ٜ��Uh�l��m�΁rKW�Q��K/�$ۍw<����:�pnu�6~�?�������e��2���?�e���~�	��
~�)�q��G�p�������_v�CBR_b�C�-��s�
H����J�e��������X<
+����G�
}^�>���g�����1
+endstream
+endobj
+2500 0 obj <<
+/Type /Page
+/Contents 2501 0 R
+/Resources 2499 0 R
+/MediaBox [0 0 612 792]
+/Parent 2491 0 R
+>> endobj
+2502 0 obj <<
+/D [2500 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2503 0 obj <<
+/D [2500 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2504 0 obj <<
+/D [2500 0 R /XYZ 86.4 381.523 null]
+>> endobj
+2499 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2507 0 obj <<
+/Length 2530      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs����W��e�1O
����T\����}��"A	6	pP�����==$HI6��a6��FwO?��V]EI�Wg/�Ie,3�D����Td�H
]̣�1�����D��c[VW�iU��ӹ�?߼�ⳌuC���/uY�ˎVN��-���p�ί��%P��ڲ=�����ۋ���80�D<0��U&���>��Dsx�>J��lt�֭"%3&`���g�:KBوs�i-z�L�O
Ie�d
�B��bVWsಮH�T{�`�]4��g��_o������9�q}�,V��K���([����+z1ϻ
^r���;���$�d�����&�]a�x�͟Z�\o�Z4�)~۔MцmyG#����q\�>'^&M�̻bNK�']�O\�_Y75�m<+�6�����s��|�AB�q�@n+��	�4O�t�p�)e\��
U��4u�>Q��
$�QYѲ�
Q�I�Y��%p�Ƿm�i����z_���2,Xl�ꏨ�
�K_W���D�^.�s��-�C�����ȩzM�>`�F)&�8f�<1�+�z at AgYd�9�D
���Sp����a3��42R��sz�i�.�-�´�6�wի}!x&��z2�z������zx�ݍX��	xzS��pU9q2��;j0�I��Utw�b^��k�e�� ��وnБ�]S�K�I�����Ӿ�d�1�d�����!2�����D0
3�?��?��y�ĦL�i
�q�5��{Pb��.���&�bI&
)m�k�������#K��0
d�))�Læ��.�zY����~�����=�2�4��܉C��W�<P��˹'�!n_!J�)i�0�~�B�IXb�#eR���A

BSf�g�<h,�X�q{
+cAR)��;�n��G�E%�T���F�㬈�*����v+��h�I4�R#Gٓ.&�e'�mS��2d&
�� 26
���-��ϐ�
_PO�v�L�
Hhi:��/:)�
+��>�M�C�=��0{��
�{�>;q�����؈rw��5�1����.���Y��,
o+6�Ť��f��'�ڬ
+���vWw\b�",
��������q��$�
�i�d6�ɛ�i�=c �x|r -N8�{$Y��tG
K�9	
>
��O*���x��M����� ��x^x4Uͷ6��L�)s���
�-8	�z����R,�.hn8z�q[/7����3�7�d
?]�W?P ��t�9�QGu*�������љ\C���m9C�T��-d����K���BLF�����ʼ�#�n��i���&�4���@�j��KkcW��|t��h
+жίh\B��坿'��� e6�r$�ì���8T�0�*D����}���������)��HDŀ�{i��C�1a������ba߽����,\z*��w��L�������}��6G#��B,�zE#T�����7e�ii�tf�6�_���� ��r'5��H���byG��q�>�
�!�Z<M�C��{�����ۇ��
+كK�lh݄ʟd��[�	jq�霅�\�p
�^�=\��
+Ǜ�/�oQ�-�,�H�O
�"4K���\��͉_r#ǡ�T-قH��7;Eɖ�Hg��
(�S���CU���^��ߖ���z��fp\T}{hog�2��/_�|�'�ؔ�Ά���.$b�Ʀ���s�x��M��X�@ei���~�
+��,AR�o�j;�(Ɂ�
(JpG��=ԧ�ѹ�,8E[x�r3>(����7@�B|�
�"��3τ��O���*S;$X����WB��Y[�M�*z��s�iPԹw$���\n�:�p��=t����� ��q6,�����\p�3te�`W_�$�
�c���"UP��WK�d]lfU7w4αq��"ܸ���CW�z
+[1)��]L�����/$
>\�<K����
7��S�U���Q��w��~	�š� ������	se�E��P�5�.��)u�D+ 2�
�~�/\�ǧ�@��{� $�b}�{2���}�FxO���28�(��`jf�����,���^�"5qB?�~��
����Xg
i\;E� �3-w�� ��G8��\�JB���i�D+�q�e)�8�[O��)�W�\[.�Dl���_�dP�u<3�`Uq�+Ȱu� � �6��]s_	y���
� ��zl;,$�
+�?�
�	(�f���eGܳ]!3W6
�}��=҅�L�>AB�*{�c:ֆH3���7OQ��6���ďkCL�܇PP��j�}w���P
�ӆ8�d�Lf'a�Vr��gw�pǭ%���"<˘��)nn����ok����9����!bN���cf�)"H*�框�#���I��yƍd6���7�C����9�ɷ�C���$��
g�_t��y�
"RP�
pH��B���@�Cn:&p��)�*��{M���uc܎b��j}�nҷ.`��ϊʢ=ڬ��f�t�[��L��[���ag�n��[3}�@��MR��?��6�|�]n(`��H��� ���ۥG�T�4���X��ѻ���ҩ��
+endstream
+endobj
+2506 0 obj <<
+/Type /Page
+/Contents 2507 0 R
+/Resources 2505 0 R
+/MediaBox [0 0 612 792]
+/Parent 2491 0 R
+>> endobj
+2508 0 obj <<
+/D [2506 0 R /XYZ 86.4 726.045 null]
+>> endobj
+510 0 obj <<
+/D [2506 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2509 0 obj <<
+/D [2506 0 R /XYZ 86.4 645.123 null]
+>> endobj
+2510 0 obj <<
+/D [2506 0 R /XYZ 86.4 240.69 null]
+>> endobj
+2505 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F11 1019 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2515 0 obj <<
+/Length 3285      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�8��W�HoE
� A��
�I����l6q撝-R���Î���o7 �eg2U�' 
ݍ~|�P�ڭ���.��/^��*�G���*�|�R<�#�V����k
�s[T;lJ��_.�����'�tl�M]eEW�U����rͼ����2oi�6��}N��ts	sn�q˴���M��
�Jb�������o�/~�`@z�b��Џe��
.���2��~�"�W�z�a%E�sh��O��
��X2
��I�ö�(a>SI��J`W�|;^

��S
dUX��6}���%�����]����}N�z;[ps�<�
+W(XFR�Y~�\�@^e�
%n��"��#p���3ϟ�?aym8X3��D����b�����i�����>۾ڠ�!�/�26��G���%qk���O��q��c׾�L_Ѭ1���j5�s^�BD>g����%�շ�(�DP����w4�����&�Q*�~��4��>��7EZ���L�<��,�R�\�yf��j��!բ�M�Fz��5c~�Dڦ> -z;)��0 yMD ��
7��)�<���v#������O��,��,t� 9��N~�
+��!�
+��5���0�m��P4RzG��&�+꾥�B�^T�jK��	����II�
h� R�go���os�ޏ��S�2dO������o��Ex^�x�0Nf�
���k�I�%
��� ���*�cVű}�/6(�=u��[3��P��is3
+�|*p��
+�'$�A����~SCʈ^�#M��U-)
e0�C�3�u��b�Oi{�
�5�}��O�\����}���!���n�2mh0=���G�"�v7[�s~��f�)�~C<2D��4�(�Eݕ\���)��3; ���%�� La�=^�9I	 	BL$řv%�{$��
H�}3g�p�fH��
c�1S��
B���Җfu{�Q���'�0yFd�)�
�g�L�����";Q_JK�1m�C�drL�6GV3cJ
`<u�˦�5H3���K����30�z��8���<e<����aw8��F�_
-�3�3��)�o�i��!<ѯ��I�BP�C�<P;-�Z��8 cơq�Q1� R4;�
/v)�Ach�1A
7��C�"zhRM
�B8*��PO�}i�ܚ)�
GB�К�9�X�L�c��d�c��M5G���_�axה~pp�fE<��ƥG4L�	,�9
#O���R�63&��� W�T��Ni�u_�
D��N%���U��
+�~���vۗ/pV��Cy�$�
\�=�tM
6R�A�
�Ѧ�ie\����+�����HS��I[���Z����eI���M'C@�3�
/����G�� yY
4���,��+b�b�fȈ
��p�~`���X�a"��L��5�]c�$|�Qq��
Q�	�-dĵ��( )�d�T3&c�j��:�f&���\�p�0ɨq��$ph茚{�x�.�F�Bf���5XN"����w�'�v6��?�
+���2��H��!mÁ����
d��	�Tz9 �H�xA���<=�@S�
qӿ7�QR:�u��ʁ� ����e�#rFv[��%/4�H�,*@3K��>�6�J��1 Q��<��c'� iݠ��^�o�~�`e�Pz^#�tɠ	���ĻtGk�J�c�p�Q�Eb��8[�����(�
W{��Y�	+m�e{�
0d�	�@i�C2@�y˰�.��4�L�I?=��h&v��
.�E��ʗ��
�9�Q `�,�p����x�鮁�]]�0��x��O-.&a�Z�K, �"6��f��3q�F"����0ɷ��
٠�R��v��W���UC�Hb��UWn��c%`Ϣ��\AF.9CA�=�z��@�)>�}6�}B�
�@�>	�
+��ի�_�����'~`=�x	�/�MC$�kQ00�R=PT�W�4�uW{	���}��R���a1<�������PwIRi%��ؗS�a=cs���YK�D�3

0 �HM�
x�4�Q
Ԙ(�(�c�=���1���\��ՠ.L8���<>�q��%wK��l� ��%p�n���Rh����*�6z�1�)u��"6:�������Ö�4�F�
����%�b`4�ى�b�'5e
�Y;�
+Ҏ����{_w�)�����, G1��k�t�±2(w	ۅ��� ؐ2�-�u$
�CP�d*�]B�Db���L
ʍCG����@St��b�:
+��y�&�^�� �\vX(�ƺ�8.��&DK�^�(Ø�
�m㢇�HG�Rb泡��%jBI�D���
+ShiF��+��1��<[>�A�N!�$I۪���-�\D�U�b���#��D�/��ߙ$�n�����.:y
�Ss��s�Aa���ij�䨢�ld@|H�v����<
5����&S[XN7���
���{V0�
$�Dpʃ�d�<�Ca��}�"Y�L�Ƅ�I�*��P�J���[���(e�з��� �$�p�(	�nk�&��HMh`����˼2�D�G')�
QbJ��6�W�p��GITh*g<
��
��w9}�s��9�Ό�|!�1@�b�� �E>��y0��U"$�.���
�Q���p��P�fq�
+�(
�8��@�Ҳ���eC�X��ecT��J����
���
��TlN�lY����;�-s�ꎓ�!$"��A��!@?
Dѣ��@i�V

v �ؔ�@� ���\-T���J�Ο� ���ijE0y����,
+u-��@�9S�4��K|l	��@?3��l� ��
+�'���O2��:2OD6e�=nhʑ{Ӯ�L�лV�d���)��9�q(ٴ\�ZݣU�q����Q
+!���O�#^U�OThva܏�\�Y���97�-gӂ��h
��$,fH��o��������0��Tn
l��K"��.u�
+(��
F�V;uǞ"��`ev�����6�Fʞ <�7� 4Iۼ��4��������:D/��JJ٨���[��,�B������������Ҕ�I,��cNx"�Q<E��+�#��A�uta�OL
�U��.)Yz�8�T
qL��!���Af�]ouʏ�
+��c��
�`j�g��ww��rl��EF
�/
�
���
<�ҡ�e�T
+���Q�|��/5p��Vi'{�
*���9�+�n!����S��������@`����jSb�<�i�p�"^]����ue��
$�krAun� 5I�̲�|��$�$LM����G)��
�o��O����}�Q͛�2�F�]�.G�`p�{z&��d�� kS�}�Լb3�?��n����V�
+endstream
+endobj
+2514 0 obj <<
+/Type /Page
+/Contents 2515 0 R
+/Resources 2513 0 R
+/MediaBox [0 0 612 792]
+/Parent 2491 0 R
+/Annots [ 2511 0 R 2512 0 R ]
+>> endobj
+2511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.9 289.874 199.371 300.722]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.8.1) >>
+>> endobj
+2512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [247.166 217.244 269.638 229.199]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.5) >>
+>> endobj
+2516 0 obj <<
+/D [2514 0 R /XYZ 86.4 726.045 null]
+>> endobj
+514 0 obj <<
+/D [2514 0 R /XYZ 86.4 457.521 null]
+>> endobj
+518 0 obj <<
+/D [2514 0 R /XYZ 86.4 336.151 null]
+>> endobj
+2517 0 obj <<
+/D [2514 0 R /XYZ 86.4 193.347 null]
+>> endobj
+2513 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F38 773 0 R /F16 717 0 R /F14 1030 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2523 0 obj <<
+/Length 3257      
+/Filter /FlateDecode
+>>
+stream
+x��ZKw����WpI���
$'
K�{�:���$Y@$(� �������  M�l�E7"0��w��
��Y0������ׯx8�I
�pv��E!3�br:�]�~�S�K����Yq�X�H̯�/8�����7��盲2/��.��٘�7iQgM�)k����*�
f�?�Y�������ۋ�6̨ۄ$�g���Ͽ�5���, <�f���v&xL<峛�]�PA�p"�
�
+E`�YSBUhη�/�ܰ�_��Ȁ��u�_`����DJ�>y�I&�Yј����¡XoB�X
+�����'�L�C�o�wI�~��̓i+7�yH��]��1�ȤZ��]U���ּ�NV�]��-�-qW���DQ5[RJbi��q8�o�6i�� 
0��R	 n���6�
+&��?-��'�>����A0��=c��Ј��xD
9�6yr?�	�<@��nL����n�DX�$�@ϕ<)08*��/0�
�~ż,���7=��`����z������h$`(�*��PǬ��A2V0��QDh �T���ywu����T�oe�J��
�)' �Aq+����:�~[���"k.��Ɗ�����b�l�_�Һ��srX^��/)���9�~`a*؅x��xQ";Ǣ, )��_�Ջ�7GD���q�@~a$�M�e�d���`$
+ċvo���>����H
}�����DbЂ0~�@X@иs��$
+O�Ǘ��ʣ���ޜ.4��!���[�>�O`ILj$���
#�I{� �p�Ѝ��T��mZ��6Fi��O��v�v
�9����~��!���<S˂�0a��2�*��7�
)�ϱ*��(Dު�Q4Ƞ��8�Kc�yV�Ie}l�r9�g�w&f��$Mc�����˘��9��SQ�����I�?â���E|���tol�L[�M���i�%U�M��t�/
�V�V.�^0�b��
)�

H�K;
�}��i��d�AR�D�I��!�GwU:6]��
ױNm*�2
+ADm���b�2��p~���j�B
��M ��f:����t+����Ml�� Hf(d��(i�i|��-�0r:_-�χ�:K�K�V�
}U�
���
+�]������O/ǘ����C	5O
E�N����z��
ٔ(h@����X06��P���6�.	(O�ڮ^�k�R�adɛd�W�0��=��a�F�1�ep��i�AĐ�E���V���K�p��j�ԫ*�f �����t�����E��w�_��?6ֿ�`
ċ� 7p�I���b"���{4Ic�����
�j�ޗ8p
� �'�*��z  �
 ��!��\�S��͛/V�fp5���6��'��~nWI�y'Ӻ�S��n�3ɹ�jh�|�G��dX�/Գu�J��U=X\O���c7�����z��4�SK`�L��s���
+�CAk}�'3r
]BPk��
+�Bv<��@���[�)��=�T����/B�a{����<�(p�	0�y�\c=��ׯֺ�@5�ӿ�U,��Sh�l���
�Z���Z���p��� �a zoX���D�Zm��+x�Πy�`[쾯 �Ζ���:')Z.o
D2��:SZ�XK�iѾ�^���EV�Aa[bs�N��<-֮|`Wzp���\x
���ձ ��5�p"̑ig�C��q�� �u��Ī��!=�R� u�#Q<)uΨ)��ۨ��'����X1<l�<�xl�����Ҏ��g
��x�
fSc����펍�ab
�]
������a.5ƭ�XWf�o�	�}�
�7q ���ִV��S�?�᧕�*v�c�UY�X�� �=Ӏ���u"�
���Љ�4r����f�
���� ��&���|�Gy1�f$Ã)>x:)�J�~-�A+���&����Շ�����w4,�s�'�[�r���#D.��3��^uU�;��C�Js�F�P#\��/c[����9����
�Ճ}�1/� .��v���>���F�{�'m��t��?Vi����a��yUn����[R�.�Ԁ�
��סb�r�~ٜҐZ��D��J��C����PA���6DG�:?\��LV�ں`�uA�O,
Az`j��+
#١L�*ȃbuRР]���{
+
��~���!�M��/M���TA�TR�0����
ZU)�O'����3��2?��Q�
�� 
ȟ̜��M��S*���j��7�
��ر��"���ϲݯ���Kl�(������54�rLl<�$��Ხlؕ���
o�P���u�/zU��p�/;�PQe g<��}ፋR�q��ݸ�r�R
(�bϹh�Tb����&�N
��Ք� ��v� ��jg?Wʣ�2�;"��s?�=�.��e aY[�3yW5��m�1O��;�s��6
^f�h�'_S�ڱ󌹻�?����l����MSMl軖)d�i�@>��#�#��������+�4����zZi*$JS@)\�D��n1hI�Ӕ��b���GL��&C-T�|�^'SW�m�4w�m������;�
�
�2�6�A���#ګHE��
Q�w��%<���cH��
��H�M6�g#�P�wFi+�>�[�*�r~P�r� �]�7��@��b��f���>'�L*�_X��?�4��[����C�-�9l��W;�
�:��ϗkٌ�H�Rмyڥ'b*�I�F9�ɒͿ�R�mkϦ�����Q�f�z�~�r��0�.�4A���Ǫ�Y��t
r�M��
KMyܔ�B��\��9�����9'S#�����i�n�}�G����Y"Jd�&>=���]y���+>
+��ED���G�6*d
�-Ey��=�^��k{��5�=Z��Y�/���
y\�<��~X��h�fZS�.2�!~���n�Wv3W�Xv���Q�B
Ɵ�ܿ����5J�\Ut%�o&j����\1����� d����s�.K��\�U1�]!�"����&	e]�c��h��骜0e��-o*
v=��\|�C|n-�
+�30[�P�?�DDALЩ3V�^�Go=��[��Pi����e�ƈT�){�{�����qJ}��5�"3D���A���C�7j`N}�4M	�3��D`7���k��:��hf�.�ćrg��*

+/)=�Œ���w*���T_
� ʵ�M��TS�<��}����i]���(Ňy��\�����rw�k����`�q�@U��pE=�f4 ��oG�J~z�������N�������4
����V�cF E{�w����/]7�
+endstream
+endobj
+2522 0 obj <<
+/Type /Page
+/Contents 2523 0 R
+/Resources 2521 0 R
+/MediaBox [0 0 612 792]
+/Parent 2491 0 R
+/Annots [ 2518 0 R 2519 0 R 2520 0 R ]
+>> endobj
+2518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.844 573.683 273.316 584.531]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.8.1) >>
+>> endobj
+2519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.422 515.54 248.893 526.388]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.8.2) >>
+>> endobj
+2520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.831 411.014 401.303 422.97]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.5) >>
+>> endobj
+2524 0 obj <<
+/D [2522 0 R /XYZ 86.4 726.045 null]
+>> endobj
+522 0 obj <<
+/D [2522 0 R /XYZ 86.4 560.828 null]
+>> endobj
+526 0 obj <<
+/D [2522 0 R /XYZ 86.4 454.864 null]
+>> endobj
+2525 0 obj <<
+/D [2522 0 R /XYZ 86.4 398.159 null]
+>> endobj
+2521 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F38 773 0 R /F49 967 0 R /F11 1019 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2530 0 obj <<
+/Length 3337      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W�H��ɼN�!��-�
�ג}Ir�HB�d ���������C����T.8L�t�t�=Ƴ���������7L�
2�����LK�g�$�]��_�0p�`��?�yqc����)���z}�_�Uٲ,Ҽ��"����tA�%<�y�Ye���
����?\%�S����]2��v��j��R='���v����˓/'X�3Ҳ*��r�\�������F��ٽ���qf�������'8l
E��@�+�Τ!�(�p�����w�\��K?�)����
#�Z#����ϯ�&J1G��c�X!!ɘ�߾sT[)}�f�
����
7�G�}g�z��|��V�y���Ě���/��n��ۤ��I��R4�6bqa0<�ق00˃�@��
E!������4;}
h����pu\����[�"�t;g��L��6�@F
g� lF� �D
�m�J���:+N��7�h��3����$
�]�"��6��s��apzO�2��D�Q�
vdpֻ
v�Y�cP��"eȘ�#����^�?���Ȓʫ�.W_��\
�+p0�_�4
�}����}�.�Q�KQ�=�A<���|���}�����޸���)�z*x�<��wI���f�
>֎�V�A/ xA5�> !Dp2������:�"s�@�?�lZ/D��BDH�R@�ǖ���7v���=O�.`
?�EK�=\y��;
-�h�/��_.N��E+u~
�
������O�R��&��L�F�Y�$�0�U���L��S�z�~9��)�@��1g����zu�*N� �S4��L�T��!� �H6Yp	���Gp6��6܃��=@�C�bi��rl���{a����;+��13a�r�o�M�r�q�������ֵ���� �1{[��Y��(
�ѧ30��0�y9=\#Ȫ��]h��
+���ji�[����^��b��g*�_��;0��&s����~
�
E�;Y��j���͗���
��y�?[~�{\�	���$�G�UV/���!�ᷳ_�K��B0�Yw�hQ�@�;�1s�� �ӱ�o}i�HkOl�'�Q[<�J��l�+u�)�!���\x��0�
+|)��Ի��N�Q|��
"ُxW��d�;,�(��� ��>+�\�����d#ܺ
a$U�K�A�XCZu��Z�pl����υ
��r$�d�J�C 
 ��@���;�t�#T��.���
ඕ��^�m"�l�"K[do
��L����g�}^eI3S�=�ԙ���:�GM ��y���d+`̆lk'�B>��`�����g�דi����8v����@
��w��X�_�EQ1p�4�����
�o�n�0t���WI��穅SL0o�£N5�·�3(ᐫ�҂��
+�eUV,���i_6@�lr+k�2E��S���
�8E&�kY^�I@��
�
+��|����7���/ o
H�����.ڒ7�9y�߀��������4_�##y[q/��
��Dy�$~h�<�e�	�
+�
+04����\�*/�U�����e�����[|B�eB䥴#
�(��<��bO��lұ}\@o 莲�/���Pr��:}���N�d�?���i�&��(���QvV�닩T c�Ghu;�ሎԆ;�k���{��i@�g�\
Rh�o��_�o"�S���{����j#�QѰKI�<�O��/.=Z��i`����Q�
L
Wᛶ��J��2�����
 A-�X,�v��HV’
P(~>ͶT4��w��3Ȉ$��Ї]�Sq�>�@�UȈ�]�?�>|�~���e�)���G14XJ�PF���t�m�~D�I��C,m�w�lC��f�����ʪ/��U�׼�ԫ�>�<�B(�7��SU+)b�
E��쐮��v�
R��teא)
%�ڥQte�@���#����ו	�@TX-��
N�T�@��o
�&bD{�_gmՉU$AC]A� "���&���TXVU�����$> L���52�H�wz(-�kX ����Zԛ��U��]>���l�lljk�᤻��K�_o�
E�X� [...]
/�E�W7�]�k?�3a�
+i� �UV�.���վre���Ȼ�
+�;�3���P���
�
+i
#�lnC��;���8�i8=�;(��ޖ���`=��Jյ�w�tp{}>�OW{}�2:]mB]XΛrt"k�a���-Ձ�+�
+�СYYTaմ��m�T�q*�4��3D���F;���i��+
+;��c��]l���;���I�o��O% 
0�� ��=l��}jٶcm�ȷ��{�����f�}5�=X��n$k|vt\zw�WvN�R�*��WF�o
�[̮�Ǩ�Y��K�b�H
��e�z�@��E�^i�����>֥�J�./P��&�F
S�n��X;�-"ۺS�(l�]Fv�qӲ1h�:Դ�7
�6�Lqмmc��J�&y�B��x��w>l��<��*�Tbn3��W4sW1
Du��
�y y,����O�� ��c�^�x��&Z�E\��m"�f��
�r��` Zd�*Rԥ!��B�L��%� ��=9��p�1V�If6���6��$�1����v�L��.R�Y^2�1�u�c�!���a�I!e�]#�0��c�{6�4���/�<<��i�Z���1n�t\����!P
!�'=���
�{����q
U��/��k6�
󔎾gkTJi�y-\̆7w��"��*�Q��%�<�����73��TU���\�^t5�s]�6��	��x�j�̟���?o?��i�r�ȕ���Z5{e
k�7߾�r�@�8b�x�ʆB�އ��[V�>�%�^5t�}�Dn��o~ �H�
^01�~l�@�Ie�AOx ��N
CTL�.�Q	��B����y��/�
�fW†
@���K�o�̔Q��FC�Ji[��Kď�7Lq��3�u��"!���K�"��а�=�DA�bG�0_Ѹ��@���땃B.��l�FC�I���=�
e����X�F�E��R�8�;
��h��a���AQ
+endstream
+endobj
+2529 0 obj <<
+/Type /Page
+/Contents 2530 0 R
+/Resources 2528 0 R
+/MediaBox [0 0 612 792]
+/Parent 2534 0 R
+/Annots [ 2526 0 R 2527 0 R ]
+>> endobj
+2526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [244.402 330.028 266.873 340.876]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.8.2) >>
+>> endobj
+2527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.223 237.637 280.694 249.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.8.2) >>
+>> endobj
+2531 0 obj <<
+/D [2529 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2532 0 obj <<
+/D [2529 0 R /XYZ 86.4 606.871 null]
+>> endobj
+530 0 obj <<
+/D [2529 0 R /XYZ 86.4 317.352 null]
+>> endobj
+2533 0 obj <<
+/D [2529 0 R /XYZ 86.4 215.497 null]
+>> endobj
+2528 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2537 0 obj <<
+/Length 2522      
+/Filter /FlateDecode
+>>
+stream
+x���rܸ��-Ԗ&�+���G�[.�˾x�@q�&
RKr�UU>>�h�C��m���
T�Fw��Pl�(�����ٳ��	K�0��M`
SA,f$����ku��6R<����|%�
+_|:�"���W�[�7uC����E��
A~ȫ��/E��w
�JK�޵E{����g���~?�@T�ͬ2A�;��[�a�� b2��W�
�L��Q|8��,�LEc��1o&�džx�g��
+H�2�r�u������#	>�t�8���-S�0��ŧ�˗o�,-_W�=�K���z_��W����D(�È���l�Y��-J�朇���e
��|{�6��x�a��n��'di\V#0�üI�˜��f�d+
R�"Xq��%���*
��3�l�4���~�tTT4��-2D���,ms�k�q=�.ZDX��v.7��r�Z�%aN�.��v������Y
Te
�QR6	{�S��M:��a �ɀ�������
<.��H��1�Dᾚ
�����ur�O'�ms�HX��M�~X��ڦeG'�0��
�(y�t���\PCi�0IE��.�[IeX|�?��V�������䔹J� ;��3�ə��Y¡�����>�_86���I�M�'��~���\t"b��:Ʀ�b�%g@V\�Dܻ�#�
�ib^m�ved���
\?G���
j�
�������v�� �6�h��=�W��A��
�:灻�zGX�"�����
�^�]J�*�רi��oN�lO��H
+=U�2���	����YPF.Yl�mڒ'N�&O�)�
+�
3y^�纮�
V�iБ q�؀����
h�
B|- zə

�7�=1�6o�Z��`Id#bf@��uJ)�P���S��9	�r�#� ���yͽ�!#��"�0�Ò�v����"���%��\��mQ
�d�
�
�
bn����p�?�aK�:-���U���t���x�li�`
W�-wWj�Ax�?��uk������ij7;���*�V�j�k�rp �D&�I�4O{D=�}�������9h���o�z�#{X����ܧ͚&�b
+;_�؄o<ڴ�߼��
St�]toi�l؝X<���g�&֖� �8n�-����<d��M���yH�tnlu����}s�����j] �yCs-D�[�9D=��no�U�]&x�Q$'��<0,`��
��6������K���� �@:�� ��a�m��E`��:�D;��rf�4L;T&JN�n� J�n<Ź
+��49�������Z1	a�]�Y&a`�V����
+�`�^� 
�-�Ti�#3��/ �{g|��i�9�XpC�iG8]si�'{cz��
+�|�
p�
����
��BZ~K
t�

В~��'���]�A�� �('}u~��R�7]�c!V��3��Xd�D��ZAߋ��]�vI��-�&#�'�43yT2"#��\Q�d��^p_�bM���I� �3�<U
+�1�	U.E�{���L�	G�VL�����~߇�vV�
i���Ԃ+��*n0�^r�z
�F1�$>�o;�""������g�t��CM<�Po���r�I�;�@���
+K�O+9-��?�lI�
�x��
�9$;��
��R���{!ӈ�^��������~�!dB�^�#��?*�b�
+d=t��4A<Ճ�_���5��R�e���{T�I�a��T|ϛ
jt����\�wT'�ܼ=�������'qiI�$r�e,�j�m�)��G at E
lY���Q��X����so0"э�rM���w�
����Hv
�9%G<�6`����1�߸������E��
.���w�"G�@b�y�>��|Y�5�e=��a�C"��+n��Q��X@.
*����=��
�ʉ��.����G���Ӣ�ca�1�f|����A�L�a���v��5F �ۺ
ђ��S�
�Bʧ����"�Eypӷi���A&�i��P�*�
���ج�8��?.�>��G`��2�BJk����N������6�(q�uQDbgoZ�4�
h������
=
+XC-��G��9�.�Q��u<-�q��.��U|z9��_~0�
��!�x@T�|���S��
&��Y/KN�
+�[x�
Q��'��Hk�7�������/�AeifZw���
R���M3�eM5~{�C���*
Y`�5����ݜy�0k��N@�]	������\��\r�P��|w����bZ�J{S`��+�p��It_�1�ă׮ 
��kG�x����Oz���k����)��`��ޟp����˻G�7 �HA�Gq��l�_[m�;���V�sa*��t<
�gy(�B�
QjG�eG�ZH5��z$$@jP�n.M
��ѣ�T�&�'*��~�����B�H�֟c\�
U�
�,qM}�|�/,�H{��.��`��� ĭ�����
?ҳ ��
�P�
�1[b
ҩ� ���m�7�j��v��ƜEjpqˉ�&�$�zz��*�����L
Jk�X���/���
+endstream
+endobj
+2536 0 obj <<
+/Type /Page
+/Contents 2537 0 R
+/Resources 2535 0 R
+/MediaBox [0 0 612 792]
+/Parent 2534 0 R
+>> endobj
+2538 0 obj <<
+/D [2536 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2539 0 obj <<
+/D [2536 0 R /XYZ 86.4 555.577 null]
+>> endobj
+2535 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2542 0 obj <<
+/Length 1547      
+/Filter /FlateDecode
+>>
+stream
+xڵWKs�6��W�Hy"o��[���
�i��d<
	[��H���z2��]`AI�(ˎ�� �O��K�F4������W?�"L�)њ���&2��H3M�f�U}��,�Uo��\$*Nf_�~C
I�0�C��LIJ
2��]ޖ��ljdjn��/,.>|z����N�c�)1&0/ aq��,�2��\E���`��"�0�G�p����t�(��;&%I����63nb�v� g���][����
�
_E�g�.�j6w̰���
��Y]ۖ��Rg�}`�*\4������	�o-0�9~�ayߴލh��Gs��:�*��A=0����w]"M2���Q\�������
�X�%�T�L��k�����F
BĈHMt�I�� 
��FU����Q#]L������Oޛ�F��a�
-�f}���
_��q1x�w��z
n�
e��~~�73��Xem_��*k��	�|l�7'L���
Y�\Uv���C0tB�c�������Z�yV�b�63�ě����-.'�.v��t�渹ӟ���f+l���?I������0��\ɾ驉�`�
�7����Y
l�i�m�����K�`���1
�9沟�xuxl>X��x\嫭��Q�����&ܚ�DOZ� -�E>�!(k{�9���(�z��
C�� [...]
+5����������� �w��a��p�/U� ?7p�$��Ӆ�cb�CJVa#Ԭ0��s��&�u�n �]c�3��d;���9�_�
�DA���+[X��U�|\_�
��p
��ۗ����+H���� �w��� �6MY
9��V�q���q�e@�"�|Jٿ�''l7?��} �Ԑ&�3B?
 �=�tN�!
{�}��2�yŊ�_�+�j
+��P���c���?Л
+�S�"zS���
��8f.���h�wh��G��v]��ǫ{<��*a6�ܔ��>���Yu�������Wm٬����p
x84	W�f��C�+
zX z�1z�G�
��*�jg��zl���[�t�p�����8x���r����D�
�pF� )�`�~	v����
��(&�N��m�mʱ�n��G���{
oqU�!
�
���ڬr��2X%����6�_A�B�>ljiI�ޱ�? �*k���zy(�@d�|���
=����~�;�Q���m=)�(7���.�*������[w��'+�͓���V�x\����1 M���x��e�Oݴ˓�}��[�\ɐ�
+endstream
+endobj
+2541 0 obj <<
+/Type /Page
+/Contents 2542 0 R
+/Resources 2540 0 R
+/MediaBox [0 0 612 792]
+/Parent 2534 0 R
+>> endobj
+2543 0 obj <<
+/D [2541 0 R /XYZ 86.4 726.045 null]
+>> endobj
+534 0 obj <<
+/D [2541 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2540 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2548 0 obj <<
+/Length 2985      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[o�~����:�2�Sj� '�$hO���K�l
�J]�����E��ח5��I
���7�
�F7��?����OBG	I4���uk"#���.��o+�����'�Y���}�W��Z�rU]�X���{������?��zw��ն+���/<�xy����i��D��RG���o��h
=?F��$���]$EB8<���?��x�2
-<�$֑NaF���YZ�{Xg���I�����wMY�;xe���_�f����>_+�V����ˆ�֌�D=K�.m����''R�&���\�
%��U�?*�`K2rW���䃀M�ۧu$�Y^����*��t��/�,yy�fM�ڳL�*�����]��Y��
�%�a���]�|��$��A��.�[+���ʬ�7�+6�
%)�?�坝�P�T��a��
.�x��±3Yf��--��=��l�ت<�/�Ƶ�a]w�ꦴ��
$����>g��*Hݴyy�Ǖn��1#4�W���d
�D�� ��`K&�
��JPIŬ(�����G�'q�d��U
+ at P!�'
'�x��Uμ�����˪����Z7�N�^}�Wٵ�k�p6S8s
+��z��p�����	<��7]��
&%c���M�����z�q�bW�!�X�߂C�-�N�"!���M�4�ֽ����?���$�	��ͤ�7
���0��~
�S��'�8f�`$a*Ry�	
+��Eu��io� vݦ�ꌜ�����s����`^
�m��T��������9
O�3�*w�����·{�v�̭�Y�ćãw�r�M�xk��|��al�v�Ĩ]�u]�f�=���`u �`�B�U���a�\
'��#�´$F�H18k��̅iC�Ap6����=�X~�
z �-����p
� Jx�	�������V�V�+5`�҄ٿ
.�S����L�ӧK�S>�

+V����{
���ߙ@DE8!>
��
��nU<�D�g3
����b���x�l#�(�)�����m�myׄ�Ìa�?�,c,"ЌC���@�H�|~�L������g�o�8
�]�f`]hNm
+��V���NY���"oZ���RQ��ID�
�
^�pڇ��
�8b��sH��K��_q3U򧼄�<�"��
]�2*�s��K��d���9B�<O��ii�LpBk?�lE�2�����nX�X]w�Ʃx��!eB
�b
( 
�R"4;��1C����
��/�2s.�Ӈ�m'x}�F�z��0;��ɑ-l�q�R��Q}�nd��J��<����}��%^L���ZB����mÑ��
 R�!��@�f ���h�h��Ɓ?.0q8\a����=\-)�1w�J��
���E[����
I at d�q��C��R�78$��	���4KǑ4���"�jҝG�a�6fZ�
HYzY_ 
1�.��F~b��!O`4��7P���P�!��
+Z������ܾ��j�y�������	5��+�Q�+x�{�A��B4�b@�4�z
+�/��h
vwb=��������IH"��*�	>�R`RĄ-��u�`���͒�C¼���<��TCP:�ΐ5�#��R�!r1��&>��Iy��C�N4}��c�o���u͈�t5Л�/#��3O���=��Y|m�ؒ����u�w|�I��c��W����
��]S�Z"�&G 	��
+	�F��k.$a (J	� ��LH�ԫ�* /�	�T�����T�8$vn��AU@��G �
+2�#��0��	���6N5�!���z8Ύ�]�
E-�
$�U��b�,�
��3��yd�#9����S��w���)��Bm�[5>
�!�߉� <�bv[���(Dj5h��B%$�0��d���'V�S�XLؐ�Lӫ��P�g���W	�R�Uf+;�=<6���|�h!�Q@��3�G�� |��vM;M�a.9!����H�1��W���0�E���]M�
+�|�jlΑ�m�D���C����ܡu	,K򣨋�G
TFerꂝtp	�Q/��?z
(D�fW
/9�>����x����+b����]*
�m�:gU�JP��]�i��`�q�ֺ���
U�᭹�:{��|5$>s�ٕ�

+ �k�em?3׋�Ta���W�6���]���ut���A߮��T�iQ.���52����
��\�'9���jvv��>��"����\Yi� �(���[MB$:=d�'�[cN��V��@��=��ZzV�i�w�����:��j�st�<�4�a�<r㵛=�cX4���n�1��M >Ll�5uMV��'���mrװ�
��ٴú
�1؀lE������:���>Y9@�ƴ��@�'���p�(�	�
��u;Xz_((���H�a
+qj �H�i&����-PӇ��E��
z�[��ʮ�`.�Ғ����%���nj��e�Z���(֧�pݝ���� �}ۭc��|�/k:�{
5��MF݉#�*	�	j�xp�CQ�$��H��ĤAW/2i���|=�!�AS���
���-���:\l���榷�}W{;l2
���G���7�
����w��:�o��9��tSW�{��>Qf����v
�Hϑc���F��W[���#
���φ�wM���=���S�Q��Zw\�9
E�؁e ��7�~w��x���,��x�>&TG�* 1~Ztƣ(a�+�*GB��O��c��qH�8�{֟zؐp,�J
'�):o}�u!�Hޗ�����i�,�H�\�֙���G���Y�~%6cv<5^5����nM�'����������]2�p��8�8��I������<�O^o�+ ����-h+�����[g�j:v�&��p:��M��y��)����
���O���-0kI���?y,��`����� [...]
+endstream
+endobj
+2547 0 obj <<
+/Type /Page
+/Contents 2548 0 R
+/Resources 2546 0 R
+/MediaBox [0 0 612 792]
+/Parent 2534 0 R
+/Annots [ 2544 0 R 2545 0 R ]
+>> endobj
+2544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.801 437.184 127.523 448.032]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.691 70.558 214.414 81.407]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.1) >>
+>> endobj
+2549 0 obj <<
+/D [2547 0 R /XYZ 86.4 726.045 null]
+>> endobj
+946 0 obj <<
+/D [2547 0 R /XYZ 86.4 61.537 null]
+>> endobj
+2546 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F49 967 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2553 0 obj <<
+/Length 2841      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[s�8~ϯ�i�Tu4�vjz�3==՗l�N�V�<�$��6'�?�HB
6�q�%�:}|�"�D�Q}8����O�pbS��]$��*#�
Q�F���{L�>�������?O(<�D4J0L�T�h2?��GM��oQB�I�';n
	n��Ytu�ߓ�K�>ZM҆"�
+B5�T*��)r}��8���g��X���3!D|�7�I�,ݝ��|q�t\�'TL��X.��V�^/O�XO��ʧ�ǧ�zpg��Xc����м\�3���כ�jV�
���
m���щˬ���bZd0�
شRP�MG��k���M�")M#�%�B�9��p%��;&Q���&��)�
�@�����RDj�
�95*8/�����a&Vb%���گDu�Y���
�����Q�(hM[p��Q/g�M�V5}�݋�
����o�uF�	/0��W߾�����ծ
��Sn�
�#|�����` �m
+�rs���	�kF�C�$ݲ����y�{9�-�y	t���r�yɖܤ�G�� %��`P
+F�~1&a�Pf
L6�
��`��
�'�^������

p���XWeq�	Qw�ϗ�
����f�|��������G8�
W3���&�A��;P��,
�
��/�V.��M�p<Xh�qS�׋�/�/z <���-�+�;�
n��~��^<��p|�*�
�
-����k�G�/�<����R���
��;Xf at oC������o�_��w��|[��<����+��/��p�t��
�
-��	��1�
��˙��d�m
+>���Bv�B}
+������u����6�?`5��*��R�4U]I_ฬ�Ֆ}MH[�?ښ�V��!>
,�M
DƏ��qi��Q�Y(��y)�q�c�sKp?Ƈ
�1�zq~}�n?�_�d�պh�]�UG��Q"A���䵈
5�[J���>^d�uJL2
+k�j*#^�h����| у�D7���vu��s��{9 �)��:/�V���XL�tc�YW�y�
��p�v��
�
-�����^��Ƹ� �O at -���8���9${4������w
��s#�����륿�U��s|���|�|ow��H!�H{�X0M(�
�G75$a���P�0 ��a�k
INAR��g�+:2�z��h�@���m�����-��
�kabG#I9����82%i���Ő���&�H;3�ܮ^�]��ͥۻR�]\N(O���H
+E[�͇���յ�`4��FM�@G2��
:�g
�"�p �P��; ;sOؗ���G�b
;B��B�O  -�
�����9:��-�0
+O��y�)�f�2�>u�
b�n#>�!�ݓL��d�ޅ':���`{}��R����n�(�]���x&%�?VND�ެm
Y���2�+��8Ytƀ}d��3�Bv�y�����Sl�
7�9�

3�ܞzs�:�X���+i�C<�8C��{�^�
�7xAC��nR�b{�����τb�]i3
+x
UDS��
��*�I��V�|����	��&ҳA/�@��N$����r���>��,�?��.����h����R�-F�W��>��n�|�/��:m ��>���彷���I��>T�
+�a��� ���� $��t��!$v�
f�(��%���l���>ư4�TS�����F��3HF
g]��$^
�m�@ɣ��xq�
��`@'��~W�Y�/$�w2^�O
$�x�����Kp���L�D2��t/
qbX�
+4��4f�ٵ��M����-�u�W���Ž��
u�a���4�-��M�qҵo�@$Ӓhi�Q�fZ�:�&����6
��	
Cl
�M1�j�"����}Zd�W���uY��	U�
7�G���
wi�n�\e�Jw��䰄OB]b�aM�(�ږ���0�"OX�m��},>୲�%��A�����,=��0L��pxS�c����z�O�Í
�є�rn|��=ƿ�ˏu�6d�����{y����8O
�|��E� ��a�c�zY�ئ�/����
��li���!v���
��ı���]�X���Բ8^�`q��gq-H"{H�F[$�;�*m�e��h�$�Q���8�NwI
{e�ā%-��N������&	�-T��v`��iVe=��z��WD*(����%@Q�C���

�W[o��P�-�Hu[��|�X��o��a-6��4I���
m�6F��e*��S�'R!��p�`3!$�
+u�h���F9���3,�g����QP���/�a��J>q�]��ޮ��
+��E
��z��Z���z^.�כ�~ $E�4x�^^��;T��	;�Rf$�C�B��(�Ҕxs��&=�����4p�pSknٵ�e�x��'o\���Y�N���۱���
����
+V��E��s�g�7Hv��\6������MQ�s߬�C|(����씦Ҫ���0�'R[-�L���+�
ڛ��{���?�lM�	�c HG���	!G�,}�����I��y�7٘��������t\����L϶����
������p�O�}��0��0 F$Bw�r*(��Lo��ֵ&���FВx���v�����L���f1q
p��ͦ��چ�Z.f�؊}�P�>�}���c�qۧ�
�A�y���~�jYA���� �[�ۨ�s�D�B�^�f6u��?�9N
�����2�a�������=�
x�����?LaCJ� ���
|��ۻ.�N7�x����ny�W�a/���8���m��mv�Tz����|��٤e
kMzlS,�J	�h`�F�Ӵ�ʘ�r�����b�:.����/+߀�㢣��0�m?�74m�L
+endstream
+endobj
+2552 0 obj <<
+/Type /Page
+/Contents 2553 0 R
+/Resources 2551 0 R
+/MediaBox [0 0 612 792]
+/Parent 2534 0 R
+/Annots [ 2550 0 R ]
+>> endobj
+2550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.073 462.148 492.796 480.315]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.1) >>
+>> endobj
+2554 0 obj <<
+/D [2552 0 R /XYZ 86.4 726.045 null]
+>> endobj
+945 0 obj <<
+/D [2552 0 R /XYZ 161.495 696.212 null]
+>> endobj
+2551 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F55 1099 0 R /F48 966 0 R /F49 967 0 R /F62 2555 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2558 0 obj <<
+/Length 3338      
+/Filter /FlateDecode
+>>
+stream
+x��\Ks����W�U�ȼq���
W\���Ut�}�(�Ą" �J���=� 8 D�J�r@`�������3C��݊������������V1����2*+�l�8]]ݮ~��4�k�,�ѷi�ɷ��6�_��Q�	�<*�S����o�~�ſ}��ʢ��.���ꇋ�.�uA�c��uG26B�6��NV�����5�Ϯ��Jp3�ۭ>^��T���[nG�0
SJI=	ʘX9&���JY	p�Sle�wJ��,���+宕�6�*�\�����-�D��S�=�
�vIQ����FwWI�c	���c�H9.`�M�Ŕ�q��x��N��n�"f�{7}H
�SKc��"�R�cBE�ۿ�]����Gm;ȇ��l�N
	������`
L����V�Ƽ0���4�
�S�Y3.]3�F��c�M��i��@OZt{��>-������l�/�|$���	��
+O�I�\�%��{	��	k��b$��oD�'�C�	�=�
#)M,
`l��a9_��HpT 01�!���!��kaa��ED� g:�|F�`qOˬn�:�9H�4p2�4ٕ/��o�n'T����%0�ŋ�S���>
t�!$���

�	Ąv*����<fZv}u�n�,��>��Xc\|��LD��ٲ�B�Z�PQ�Uy� �	��n�� i���!-����ߌ�>��W~f��v
H.��1��n���5��L�u<w�2���Z�mes��t�@3�;d@���i�+7��H"
Yש8p�_�o
��<���:
��<; ]I��m���ѮR�P �q��x�G
��	UM�u�
�6��`^n�/�����0"
3a�?%

n���ܐ�[��6��m�$��;ǩ�!&�"ͷ�3��C�ܿ?�V��'���$*
�����U$]�
\�%�?8v�?;�𦼇q �P�w8����yεI�>�+����8� ���{0��qR���R�s㜵��enX6��?׷��.s3
�����n�6L���[�D�.�僗�ܾ�[eA�=m�q
}ނ!."i��	Kބnq���]
]m�1t!m"yH�L.�"�HJ�:Q
3#l�$]�uz���Zf���5O���fKX͈�.Ǎv4Q�gfS��|W��G��Du�d,�0#:[� !� 
����*u}η��2�J�xS���:ԩIp��`#�˙���wͬ�3�
����v�\mE��K7Μʪ���~_=�sȤ	��DVk!V߀��8Z�wR�cM��O�H���m�eÑ�cߠ�+x��H��]����x!ۍQ$
+�*��V.f�HA!�*'��)��lJ���x�
C2�!U��Ii�ufvp`)����Dm�@��pC�T��;�V%�\??%�P%&*�������L�8
�գ�8�ذ�4�{��>q
�?��L��� ݦA�<�O��J�>uP
��Y���[�@�
3w����wx|�m=��z��b@Ș�f at Z��G��,�&�������s��6����
!3�����D�%x����"� ��exA���
3�xxfKX[�Д�5#X�ފ
�����������T�/��|����n3A0�b3��1���R�F֟}j�I� ��٪�Û����^�	O;�cG����t�C���L>��<���0}��[�! �B|4Pw�r*¶��$HH��>�Ӏ0 (*���
+31Ս�Xj��գ�원[�9��C�C��5���_l�
�vB�S]LP�[7&?��G��0�#�%�6\�l�첹�OB��V;�x
a8���#߀;����
���p����|R�i��S�30�Gͫ)Bub�A

�Xq�
`������U���dR����
�X5ՙ���Wx�Y�����L�`O��s���F_!G�!�`X���d�f�D$� ���J���E���/_��unm� hxc�o��м�ǘ�c4������D�/�B `)Փ,㚪EXH���o�=��a2���&,m�|Skrj)���kIƹ������V�9
�l�
�����ǴĂ�+y��P�=�l��+_�@D��=� 75�a �LU��O̧
[�M��KpG��&����o�c'��$n��Rn�r:1�#����>���a�e�}H���B�`ѱ��zq������"��m��p�I�3斟�F��.��
��L֑�L�Ev�;=^��g��	|	C�
2ei��0��৖b>�Z<��h��Ϊ�1��!� _�v&��
�gӄ��g&Hl�qR
�����W]��*��3��Nzv
o���h��9����mQ�|��e�
.�Q�K�A�PC�٠�Y���|	�
(�*�����
3�d����P�& z�X�BOғb�7�'�E	)l��R��T⼚*TR�XYq~��T�����gѷ'A�D�����@�01�E6cB/��
���>� �v6�~��q�[Z#n��7��.��
+��� �a�
��"���gl�tl W N����'�������8#YW��
4��Who��M������-�rk�
B�l'�1���h
Y h5��@�����:� ��q�U�. ���Zs,�����I�^�:�zH����
OK�G.ȇ��1iőA��
J���v-���
��L?R^GM��?�h�y��1r)�-f)[|>�iQVg�֌�����̌o�EFO��dw����7�M���7+���ַ���3�O�>��7�o��?4���'��"l�5
nl���?��b�x 
+�;$yRm��]��w��.��y� � �w�[4�ݒ}���b�[&U��U��QY����R�&�"
̰X��
lf�"
�
�?����d	Kk(�2��S
�Z񩀩�5��W2��Џa!��Z�8[� �b�
�K�\�Pt�S���
�T�M&�;�k��a�9G���,b���Fg�k�7u�
����;�#[��Վ+�~/9t�
S� �&�q��EL�ny�ˌZ��iqؕU�����PV��bc�^Al�ڕ=sa3�+K�1�e
���_�7�3R�O=\�Y��gR�2�P͘Z����x��M1T
��d�	C��oi
T}Cۅ�$<�mz?F��-��Wz��ax�V�v
+~�����Mp�_��3dp�2��`<�͉v
+p����S�
[

�q�
���?w�:>Hn�lw(�OP(,Ұ# �B��hJ��:�����c+�@�cm��r

��(�DQ٧�j�p�Y05�
w��`'��e8�me���ɾ����U�3Y��x�1�r-��f�?Rh
�-��B&F����W����O
���p�~�������ZQ_�
*�6,
+endstream
+endobj
+2557 0 obj <<
+/Type /Page
+/Contents 2558 0 R
+/Resources 2556 0 R
+/MediaBox [0 0 612 792]
+/Parent 2534 0 R
+>> endobj
+2559 0 obj <<
+/D [2557 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2556 0 obj <<
+/Font << /F36 728 0 R /F62 2555 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2562 0 obj <<
+/Length 3446      
+/Filter /FlateDecode
+>>
+stream
+x��\�s��_�GyZ�����=�I�I&�I�y�e�:Kg+�$�$����
�?@�<��̴/MA
�b���.@�����~�׫�?�M�#Ns=�z?S����pG�`����9S���o.����p��t�fV	��R�n�?�Lg+��%��ٓo��I��������Y�u9�'\R7�1VH�I��cUJ�e�)�	��k>�������D3��3��f���n~����?�W�
!���a��+1�_
O��ay��릩D�Ї�1��J
�2��q�
ׄ�EJf��Hn&#	g"���6�8s�Pa&�9C(��n�u\��Š�r�Sc������y8m`�ڧb���y�b�T(P��	�c�P��62�����l��Y
�͔N�M&l1�f��BOFV{��z�1�>�Y�O���rb
�BSN5t�T�-U����
�����^%�t��5Q�����������ExSD��@RL���t�K��t�k� ���傛�~��5�����%ت>���$��mV�ɂ�8 M͘Y*Tt�^ߜ��0�Oa���HN
�l|�}h�T��u�!�|�?��q}
w�����|���f
f�
��
�
��f�ތ�Y/�;�bF�BcF�J�`i *�瘥�g��$ARņ8��
��
+B6�?��B�-��L� �Fg�8��i J#�@�2��4��5
���5z���H�LA3SSEObt�=�H��Y�7x�
4�DuE� �/5z~�LLC�����L=ک
dڀ��Ç�?^���L�,� V
s�����戀!ʢ	#�
)���n|*����(�:�/0/6_�c��簼-���������n�����׌���
+��������]���
�a6�:�r��?ޯ�v��E����@
���K���9݅��.�ָ���
+�#�n�.��n�7�Lm�箪����
�~�%d@
0���-�{�j��}Z�vgp) ��Ǩ!&�(

$M��� ��1�Ec�˘���Tz���j��~	A+��B�<�vi�s�	�͸L\�2�yד�
�C�k��� �l;�*���(#�^�
�QK��8+�sX�������򰎰I�,��8�<Ġb�+�Ż�
`��B>ph~�s�ck=� ���
P'U�*���
e
֧���z�
&�=>ޟ2,c⻪b�f�(nG��4K�����x�DZ>.$�EQUe}0�OQ��L3v��Q�EVK$�SXv�6q��� ��/E,�R�?D��W�C"�.JD����DĎ$"f
��ADJ#g������KR�IRw�8a;Swl�;I�+�x�����a�J��	t-����*����# �
�S��!�s��u/����7�u��ܛ5- �Q%R��2�C�,w�A�Y�<�L=����K�!�<f��,������얇���
+y;^< 
ξz�9����&`�dLR��cR��`
���>.RP�}�Fsnj��)q�� ����MF#��'��j���+J9ԉJ�pg���Δ�h�

+�e��03��0rg+�,�9�{
o	����A�3<���ܗhдVu���؏Xqa�¼Q�'A{���4��l
+�/�x�f�����M����R�z����^�}Lw��](?�
+5��0�Ru��!��V�.�
��
��|��})a�|�l�&�6/)
��+_�l��L�M�o�
�G�U�E�k
+����h"��0]^!kL
A/ �T�(�j��T��Ȱ��h?��W�s
+�t&�t�_��a!�I�TZ	��ua)6�v,��x��a{L����K��wo0�@�
L�ʗ���j�w[��;@�;v.(�
��ٵ��`��
+TL'k�*sj�O�V���
�U�뉱��O��z�[
?<.��ʌfK�U�x"`R�H�.
ܰZ�Qb�<���Қ�9��X#�+��Q|9��łì0i �`�r�YR���zŸ!T��Y�;
X���,�W�P�irj���x)-9�Bm��ɩ�eXS��
+�.DI<'���3}�F���i�o���}V�R�"���� LEkd����5��[Q�<��Q6%)�Ԫ¸q{ �o����Y���a�Yԥ�;���Z�Aw�R�d}���/8�|�ʚ��ݕ5l&���Uz,B����G�@�""�����������s��HÆۦ�M�ib����
��p팁K"��3�2��x�1�݂1��H�w��w���;0��


�������*n�r\de�
� C|�n��s���:�v���q�3<u�����NP ZZp�w��{/���fw.���*�N���~�-m�Y����	76yܠ����pX�m�Uv���э-��,��U9HP
^�R ,v���J�����B�w�K�/J2�,lV-
�����39� Y�]%$\_��{�e�"�#,�Sa�ᮺ��r,�P����ic�7i%�gY�(g������t�WӋ��IJ�ث����ϫ%��
�u at U���ݵ
������Z��i=D
�9E�5b�c:Y�v�6����u�fރ7�A� 7�7S�f�qLv�f)%W��ys���7�];]�B����������}�&�[��*x�9]V�ܛ.��
�cu����i�u������O��b��|�q�x��VU�;1i�)�Nlv��	��Yg=�;�>�4��g�0p�_��N���э��L�i0�����������+��u

�{��1�;
)L
l [...]
+[�S<Jk���#
�-B�A��1<iMr�r*��`eF��x�UW���15V{���T&�=h����l[ G5��ڷ-�Ħ�2���m
�gA������3�kߜP�4�6ҬE�Q����6��	�LJ��"�̩)xA���oY�L�i
�*=���5�YAL�>	�p��E�_�F
�
.��
�sbZ��������~1^U��$�+��8���-��*)t�a^ {����ţ��j�I�-=�0ؘ�����d�$�?
,ʡ��ؚ��Mu�J
G
[��$�[K5I Q at m��
 
+?�$������n�����աk����fO8FuŠq�e�}��0�
+u���X� �[2�=�
��
C$>f�Adf
":{�/���
𳖑�p�ҳi�����A�q6���:��xJ|�W��Ъ
�K�{<۩�<?���l���V��lS�BPH�l���.
m��]
+m���	1�ʧ����?)�8^f$�Y�E������&��
�0��x^����)�%H>�s�x��&!T�M�NZ��?���},JZ�V
+a���n��[�ULI`6V%��`���j��İ���ж��
sc+o��
+w�+�j���9�SLan�o�
�^(N�	�.4�� ۠�V�M�
-�>C�w���e��{І�/��H���n���s�� 7��
+endstream
+endobj
+2561 0 obj <<
+/Type /Page
+/Contents 2562 0 R
+/Resources 2560 0 R
+/MediaBox [0 0 612 792]
+/Parent 2564 0 R
+>> endobj
+2563 0 obj <<
+/D [2561 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2560 0 obj <<
+/Font << /F36 728 0 R /F62 2555 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R /F1 1120 0 R /F13 1121 0 R /F7 1115 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2567 0 obj <<
+/Length 4095      
+/Filter /FlateDecode
+>>
+stream
+x��\Y�Ǒ~�@ľ��޺q�Z�e:dj-����azf:�c�f$m��/��O ��}aw������2��lr7a�o_�����Y��/�fr};q�P+|a$�\�L�9冽��
?�SY�7�öZ�^^I���[������7�?��������W1��-ʗ���닷�/~y��0��f!]8e&����Mn��VH�&Oa�r��/��/���%���0Vx��#l�9og�`�+���f�X^x���wFL
xg�΋BZ;1ᚸ7���m������D���f��;9]��m�{���ӻ
�4���ϧ1�I}|�Sl2��B
'A�B�#=6
T�a�U��2���l��8��`�^dU�m��.��zv�4w���Z�W�âx6E{����<G����1�����:�\F���4���w��:
��(�d��k)�_�3�d�pŏ�V��%
�
+]`��
+����j����%�u!da����4�K����L�_��d�����>�#��r?�|
dJ�OЈ��s�d%� ���
�Pnk��gMX����17]����!�����X�BaZ
2鵄�	�`�=G�R�Bq=���r�]o"��G
+��([0
}�u
��j�e�����)7u�g 8���h����$7�&���F�fQ�h��pQX0���7�>�D��R�0��T.��f��
�UC_0!?}����M�|���U���p���{�YǻǗZOg�]Y
������8�*�,��ɡ䅷��H� ��¨j�^��̤7�u�d�h�z�С
+�xC����cӊ�������}pV�sL$
�m'��^^�6�M9�R��T�e����61!7���ċm.�⏫4���ð�9~d��ࡲi/� 0����&
���zU)�C��mV��,^~���]��Uz[��݊p"=��3n	^�wzt��?��}�a9u��P-��.��=#��I�졟��|Ɣp��5۔q��z�L
R��w�9��i]��!�{�� �(��W��D
�	��L!���n����@��ʆ�5��橪��p�<'��xI>�2PK�Y�SPK���@����Y����o����h��mb�`��F[�~��m�4y� W��'���3R$���y
_�ø��S
�]���	����,��謍�����z�X��<��<�q�~��#��'��F~gpta �S��
�oo�2��AR�
���6��ڑ�l8���
+�{D��&�ʬ)x�ڣ��B�A��EU���g3�^�*�
�ca�Bh5��_�`y���)*
E���1E1q�)�p\�b�8Ŕ=�^g�R��, ��,9�#嗩?F��cck��I
�_ m�0� >�y����z�ۨ�kV_��!}R
�,W�/�²Q����=d����l��䪃�ᡁ��0��N	� ��-4�AYh,�%Rv
+ 
+��a�0}�oq�rQ. �ɕP@�F�u;��MD�!�EH=�6�+���e�݄��@�]Γ��ѩL�����X���
2�w

�z�vEnۍ
h

+(�q�]���]��!��' �!e�O����l�]�fc�
����/��"�n��ʳ.���	�
8>}j̕'��f$��!��^� Q�T���=�TCƯ���2�
*i�D%��
+
ݔ]ǠYT0R����1<4?��u%"׫�oiQ��+
�i��!��YJ'���2\~�;�:�X#�5�`F_"sRV��҉̉�9�/�9
V���j���z[��#��K�����ꗓ��
��
���0��,��i�[���\�O%O�g�X����:1����p���9�OʐkI�S4]B�醇&<�CrT�dY-CCq����h�/�˝;Ř����p��S
+v�r���l��,B=\7��
�����>v��"9D��n�
𯇅�Dd&2™�6/	ʓY	<�'��
Y\o
9Sx�7q�tEw}L�<լ2Q0S�
i��hC�SEᚖ�E������!���'��'`���~G �� 7�Z������H�P�����n���(��OC|Xŗ1��f1�ܥ�Ǘڄw{I�a��?��vߔ�R�
X����9��(��7��H¢?�}�]��
+��;L��M�#,��!��B?Gq�"6�&�"�ݗ��r���^�	���T
�V@[��@�R�D�7�
fC�
�mml{(��>��0\�X��D�

O�v�
��E[7�Գ�!�~��p�"�jq養t�>w�O��
��:��nϣd#�f&L N�
)��(Ԇ�L�|x��;�b��Z>D�!af��d��^�5�� q֥�@%4ȧ.7�a�o�#��Ӆ�)����@(^���z��QGQt(us�p�'L��	u<ĂС�/���56!sv��{��uI��L��s�G��0aid���Aɐ0��9X�²�a&�]����֢��-��s��sQԚ#��uJ���	S�]�Cs��m‹��5���!sU.�[�o�H��kes�?���D�
��D���T�=�p@�.ՠ��=t=l<��i�n�~5�h������ӻ8*�-;]����}
�����NQ�s��������u�&I
���
5�R�V�P�.-��,^͘��ۭwu��f�Mog��,"
'�!,��\R��fk#x
г��J	M��ր�O�SMR�����O�b`��E��
Q6L%�S
a��QY��b>�W1�����WA��ҁ��$��*7�}��rz�WX�[?T�
��d
$65�
��^�1~C��U-�Yͧ������Ӈ�����U�
�6D݋5i
�Vi��˯�ѺuP��q,D��v�
�)g�n�w�������*�%����~�"�A$�@�������[
+c��b�
�/����zB$kpI�D6E"��ʵ��f���`!�5�$�
'5�A_
�-�MśC�1Z��Sr�c�i��<�}䩲��ՙ�������f]����f�� *S��e��o�e��%8�F�E��2�YxH�O�f	`�M�����B���»�T���Y�+
v��;1bd?267n"�;0���	��t��T>+JR��f&�·�A�A���d5[�(e�5��C;�A��cs�
�q��FM�+�s?�k�
}�FG?�����
���% �`�;�sH���a&�8�o����uf]CǢ�%�5��$����]!�F��~�W�!)t�Y�箊BI�Z�ī�kn�� �^6�`�
ۗ8e����(X�?v���B"g�HoN
=�-�*\M��=
�lץi|e �v�Z�9�r��7��
�T��'�+
B��
h�žw|��qa*fe[M�f
�k����(�V�̋2ZN��)�*�jH�A��Ԩ�,���29\�l
C���B�*�F+��G�.�� [...]
+^�cw���4:|v��y|1����1t^AOY�)�X�����K�[���䵿��\
��-�p�E
?\�Oo����;p��Y��U .
V�p���i����Q� 6���ك!>�S��HR.�*�V��gq��b�;�(Q��D+
���D�����Ʌ5
�	ǀ�If]��	o��M��ݒ�\����MB
�t���TK�1�TӇ�f {�2�������;xq�Ҩ�������� f�Z~	���L�ऑ�'�~p
Nj N�P�\4iO1S�W������Y��I��F��p�� QbHi/��q�O��k� ������� D�+�� �R�X{b;Ay�W#{up��xy�%�*%��h��6�KU�M8*dD��<�X5��_V��1��}�,)�p>�ѓH0��S/���.���/�� Ÿ�d�p����`~h���nj
��?
+�Yj�aG=k�yk���<��+����N�����&�I�.�����`�1Nn�1_R�$�tPX�ý�*�
�� �m#ќ�Ӏ�ϒj
+D���m�a �4p
��:>��^�;W���
�LC�
+�O�BJ{v��4'<jesN(�`�M�j�W���̟���_J
ު�?.3�[��)�gl���x�D���C
+endstream
+endobj
+2566 0 obj <<
+/Type /Page
+/Contents 2567 0 R
+/Resources 2565 0 R
+/MediaBox [0 0 612 792]
+/Parent 2564 0 R
+>> endobj
+2568 0 obj <<
+/D [2566 0 R /XYZ 86.4 726.045 null]
+>> endobj
+538 0 obj <<
+/D [2566 0 R /XYZ 86.4 395.998 null]
+>> endobj
+2565 0 obj <<
+/Font << /F36 728 0 R /F62 2555 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F10 1116 0 R /F14 1030 0 R /F38 773 0 R /F16 717 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2573 0 obj <<
+/Length 2902      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o��~�� ������r�Hs��
���C���Bu�h�������RKʎx��Ŗ(rfv���of���
goN�69y��� #��&_3-�5H2�Mf٧�B�t�4Mn
���.>�����p�e��������pF2��=�����������2���٣�s�1ę�O����	3���h[ry����wޘ��nQ,��)��2/O�d4_��a���$�օ�	��쳍3�hmn�J7M$1,3i"Jz����|��߬��T�Jk̋׼��"H	��
{H�R#C����^g�cgF���
[� �Ƃ��_�����6PƑ�l(SHJ�������ׄ^	��� zE�X��g,��!~c�8��W�-�mb�A\��c�"�0�
+ �����N 1���\{$^���X�
��
+�)o�����5l���cm2���t�9�_y�ek����n����J�ƌ2�1��AF��g�h�/	{xa�0�V"�DeR��УFbg��Di?Vmp)��j$"�GZHmk��V�p�0�*(@�E�$�!ٓ(R����
��4ƔCu�"

��Z���A�(WV�1�
+Lm ���`�Q�����?�J�)�
$H��۪��z��P�~N���iV|���*�_�����//'/�ڸ�_�^����_L7���~\]��2�ow��֧���OW���u��{��
+�M]uE���εc��(R����z&��H_N�u��L��RG�@�`̉�*l�[XݾRN�t��CM�u^�
�I��M���CFX����焛��Ex~ɧ��r�m�;֭
2_��d�0���
i�^޹ |����>j�u��ex�9u�Mno�ּ���U�� 
4��>�~�Pp����)y��9

+y�J2�ݏŴ\o��̀Rh��)L�ة��8%M6��l�!Q3��abH ��R!��Q��Ͳ+
+s�k�$b�����X��g�4-�!�VH�(-���ؒ�����MU�ܗ���J"�(_܇�����=AG��2����U���ئD+�IU�ⴤ	!p"��N�����]D��H�vX�7�pLЮ�Q�N�9q�0��ɯd�F�8)���
���9IE	k �~m&�}�C׭5y�
eO�((K�>F�E�6l�ҥ��F�
+֯�&( $JM�N��(k�o��MUݾn�K�	\��}�J �JQDM4"����1N�#kHP�ބ�����J�����-#�.]�L�}kt���m�춃mB0^��FD[����KL�Z��}�%h�6w�5�{BFU
+�
hWuin��`%2�$
��qb���VNP5���y�H�&mo��k)���-
\�f�X����\WR���ޮ��\��gm+�.4��n���
+BF���|[��a�MN5���G�-WTW� ���E��u��&x�Û����#(�U�&��.9Z�K�P�}S�k��2��7��Sy�ކ[fB�|�)���@-�-��ψ���M�0���Ö��$��#
�qe��Q�+;��N��|�!
��e�
t�
+� ;��]�CsL�0q)�0G�H#�v�$�@�)��f�-
�'�jm�!Dz;�g	9kx� 0���
�~r��⻪ۙ\���'.�?�P���͵�$���w���:�sQ+����b�~|�x�K�l6�y����
���x��0[,l�$1�6��v�s_�N us
���u�	���Fqk��~̜(Jº>^����Z}�
)�mO��9l��jZ��Ƨ�"/��S���v�m��2��U7
���X�7߂8_8��"�*�bs`֎M%v�A��1��D�s��ۍXQҘ��ce0��)��",5���/w�\���U7D
G����6;�


^\�=	��0���n3�bm���4_��d�+/�&�?��S��8c�#��qfEnvqv��+SBjw�0�jE@%�UwF��G��k@��67ઢ͍�����cg�
�0��w
+��T{
�
wB AH��$;8
Z�:��Uט���U������s�ju�|�.qv��;�"X�� �7�@��U�v��
+1����8�g�Lg�f�*�����H4;���v.k�.h���;B�4��4�wՏ��b��:e
����8��4��l�P9-.U��f�B�k53_��j(i����D�u�87V��Fw�����w>H�D��
�ؑͨa��f�ؑ���q�f���Q>�d^n��W�����c<y �-��gahW���]c����~h>�6k:D>��8	��_�?
+ﱗ�h��b��� &PB��<6�39L�G>?;�}������ۓ�����P�Z�K
�Oj������W��4rEws�(�(�h��DUj���k{�����l;��ߐ��c�5�
`�p�;X$e�,=�
�$�0�эb���%A�E�\6@�Eb�	�=�+Å<<�D0\�@0�J�0l��bW)�g�
+|ɧֶ[�3TΆQM��"�B"�;
顈4���%���A��,un����-Y*����>���39D�YQ��x��_6ܓj#(e�s�
pPd3Ɉ��q�ۦ(�5c�2&T�p���4̄�]���XH�
��'D^��D{���^xӔ?�������s5hk�d��?���1E��9��
�����vR�&�>�ͪSf���4ѥ��/)��oy��H
��}�R
9��b���x:[b	@� &ؒ%��M��
�6:���I�'��kp=;�
���`(�b
�Q�9���vpw�)�����uڜ�	[Qi�f
��Y]��d�x������Ք�L�Cˇ戩!�"�zC�MQ�����
�|9�b%A�w�
)��i]Ʀ(�7�����
h7;�_ZJ^�n
طG���w���'�V at P��N`=�#����/��
+endstream
+endobj
+2572 0 obj <<
+/Type /Page
+/Contents 2573 0 R
+/Resources 2571 0 R
+/MediaBox [0 0 612 792]
+/Parent 2564 0 R
+/Annots [ 2569 0 R 2570 0 R ]
+>> endobj
+2569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.579 474.868 117.302 486.823]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.749 474.868 353.471 486.823]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2574 0 obj <<
+/D [2572 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2571 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R /F16 717 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2577 0 obj <<
+/Length 3864      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[o�~ׯ ЇR�9���A
+���*p'܇$V�JZ��U�K;j���sffo�tJ>�pvv.���
��ÄN�q�����o��8�4ד����DN
wD
6�YL~�2�/g�;����|]<5EU^΄���
�b�<�q�����
oW<�t�Y旿�|{����

�	kR�J=��.~��N���	%���g?n5�������4n���� �2"��h�3:��gʌ�B��˷�>�-x�_�n�1C��
+��W&l�_���R��x*����~]�Mb]ʼn`�,�*E�/�!_��}�v8v&%a@�
[h�<5�S�����Gr��..ٴ��f��A
�1�B;mB�xf��:l�w}�a�����]S�͍N�%�Ȗ]u��6��!��vL%��f\s”
��SU,.g����m��m���TQ������}f
iьK�(L��dU�����-)
�.|�T�Pm�J�^���#�xG�K�<�d�T��#ܴB>���$l̫�S^#��s�zn�{�>�2AC�׌��#(�ۉ��X{�

F���O�m�;�!��O�b )qN��{㴙M�J���֑9\ϋ<�m�TF�+��cgu�dEٓF�5��bĩ��}{=P@��:ß���"K��	b�i��i��
h�,�(lj�P���1��LF�Y�Y�:����4#�ig؁
Pv��o^ݼJ,	�CQs�5-�( �p���^�w�	4[R�2$+�{��=���<��+
�5;�I���9�(��a�O�/I��6��h
��;PhtX��
��i�T2
+{�"�|�
���M�'H"
��n��l1��

b��4��OeL��U�X8��gX�I0-�5�x�(�&$1��m��fU�`	9dNf�b@�ѠPг�BJY�
?�+�������:��f��<'�֖P?��A��d���CcO�EJ��2�l gʫ�vΙ#�m��ׄ��%���,㠪����I�=T&�9ؙ8�>�U�,� ��o����rp"^�E~�#|R™=�>��D(��"�
��@*|�h7�m��- {���ߵO���
/�V|�M���{5�S�s���:�	hq�&���Z}.:

1� raS�*�E�њ���1\��+�6,����
�߻Yo_���&1���`D��҇p��ɤ�ˎD!��ha|���7��9�� ܝa]I��+���+6t�RQ�
D 0_F�c�q��� �￴�؄DW�P�w�(K;-�&4�����G&9������f��u�΃�ы���!&��0�f�cV�C�#���-���
f�|� [...]
Jb� |w�~����ؖ��	��@>�S(6f� ���� E�f�b��
:�Y����
q ��q@�� �T��b,�
��
�G�n�庸+�0S
���"ϖ10�gM��ǻ
cd��fh��ۚq��v��昛��˾��b�9ɧ���bU��g#D���?���p��1�.��}h�;f���r�0��E2١n��S�-Q6»��J�#�A�X�GK
+^��R�b����
G�zZ櫘<�B�1�-k�i}&%&�
+������i������KB�<���)�>��P�e%Q`Qqz�N��`m�h�{�Q���m+[?lV}&
���3X%hl�����
�œp]��h�N�J�	��u�@0f���}Kɼ���$��B�y�p�H
q>��B^B"�x�9$&<�`�^���!
(�yYo|���r	�ׄ=$���MS�y
>��/�[�"�fDm�V��)
X5
���'eT��>����P��`A
쌏i=�6���!�s�8ǼE��y��:�^�1H��]H@�k�la�LL��!�Ȅ��$�D�אH��[���&��1����ExU���f���,��o�5jo��>�ǡ�`��
a��}ȋ�soV�#��DJ9����I�
xe��8�d�(�
+ۥ��
+'ϖu
	U���!
��h`���7C���yx��$%�N�f���ǫ��:�W
��OG��!�����Χ1� �w�l��
	���h���bW�]��3�w9�6���	�'��(}
+ۤB�B���}�m�<Ŷ��L 3F��'jf�;����H�d|p/�<�~�,ʧM����W��DF�мo�ft|>�q
��0
�:ɽ8b{o�EO~hn����	aK0u�+��v�5�8:q��Z�p�d~L*�5���y���{����N��$�EM�
���=rc!
+�B��uZ�� SM��B�-����"���3�i��6��*k�~��`P���=ʼI��_Vx��
�Ƿ�.�r��B�x-#=*��?5n�
�|���DW�٬��|Leq�ooi�I�#����fK������`��h�f,^��;mhd�
��>�	N	�
+D�p4�hH1 ����ݨ��b7h�HQ��)5���c�o�Kl[�K�"��K'��~|��ݛwa/�[.X���

�0׌�/��R��e�D�q�Ȥ%��@ģ',S�0��T��6��
ݴ��J��0�%\��3��a��sk%p�� md�qj�O�
TD����jʓ�M
l�؏:�^�s���w���[�& �;��}��*as�������@Wzo�y���f�_��W%�M҉Q���R�~n�M����Cqޤh�&
+ �:�&ł� �TF��))�'P[�
w?��,<�f��7>2������(}
HKV�xXVwm��2&^*��˼|h
�{�\����X��WŔ�eQ�
@2�&�S��4�Ϫ���
�2���5��c�V<l�M
��\�2�u
�î�"$P5]%����� (-Ġ�}�o^�V8��,�Y{hӦ�A9x�V���`�Y���2��o�?	ᇕ{�%}��- �w�<�jŀ�A wL;�8�q�H���^H��%�Y��S0�m�WW#Y�6�cU"�g(�A�p��
]��T
�Ԁ�ds��ٻ�L��mk�^��}�Z��?�׾0i�����
+�6(�/C�䛠�ɏ"��U^���<|�q�J.�������@�o_���q(�_E(�=��J�bX�f{��y��g�<��!:/�
n5Ԏ.����"
�

+m|榓�汭7Y
�;�T)W¥�1�u>N`68�'��p0 �O�#㞢 ��]�a�g��
�q��d}]���u�abJ
.��j�4	�W�V�|]ա�R�{�Ep�!�Ok][��:��U�ag�vm
5�Vp��8w�,�A(3���� ����v v��Zm
+���!�[>'��S��'PY`�0
}�Ӓu
�I
�z�;�>C�!�V�P���D)}I�x�� �+�6]~n����sh?u؇C�
8���Hйtf
�)U�	��,xY`N�DK
a3N��
�������M��ⅴ8�����x�Og
+�7j_E�W����"p%�A�E
��1�v�
��*������
2^
o��
�����x��|-R�\�XBhBY�;v��[���^��CK�5�5���;�_`9?P։-�0J	��Rb8(k}��Q8T�+ f��
[�<C-F[ث'�Xba�3,
VӁ�
.��P���]��S> 8��P5����3�
�
��r��}���zZ�X�v*7|o�E=o��>A��TR�9tg81�J>;6<� ��E���܍|�A�;��#�E��
�/Wn�Pa&�z
;En����	@�m�S�����XP 
B�:\p�������:��Z��x���ݭQ�6�1f1%ط_�����-
�?-����[P��(u;�
�
+��}�
����6�F3�d�	d��f
�
+endstream
+endobj
+2576 0 obj <<
+/Type /Page
+/Contents 2577 0 R
+/Resources 2575 0 R
+/MediaBox [0 0 612 792]
+/Parent 2564 0 R
+>> endobj
+2578 0 obj <<
+/D [2576 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2579 0 obj <<
+/D [2576 0 R /XYZ 86.4 638.039 null]
+>> endobj
+542 0 obj <<
+/D [2576 0 R /XYZ 86.4 375.504 null]
+>> endobj
+2575 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R /F49 967 0 R /F16 717 0 R /F38 773 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2584 0 obj <<
+/Length 3157      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�~�@U^�*a<��TR%˲,E*
+"?�.D��p0 H��>_��.v��.$��{�v����uϐ��{������w?)�
,Xi{����L��
�*�Mz����Py�}�҅�_��bt�n��藋���_�=��1c��
��..>��{���Ǚ
+��9�\����j����?j����]U���`���=��|y�D�
���x�O��@��v����x��}aա��
��6I�U`���g
+�e�	]��
���� �p6I�.����Oڗ>�Wx_��Ѩ���D�ʙf�
+�*����Q�*���W5L�`��N�j�B������y
Sk!^脩��8W���X~�Sy�aR���^W�X�}h\� 1Dw"s�4R��)),sNt�U
+\�p��D��|����!
ۉ��0m�<�����˫W��kXP4���
����@_Jx�YI83FTD~uy��1u)����8�r��[�5�p~�eo�6Z���7�8J��Ƿ��&��Ϟ������d�4�<��t�1�v��FnW�oL^x�0^o�w���w��
 �����(PM��~<�O�5���L�]�8ԭ6�i
�������VŌ�������v�Z*Xa)}�h
�
�S��)]J�<��7���r���p��
+#�C
~g<�F�
%"���8�/����X#M�o�>�]!54.dU�#!�ƭ脫�LP
+-s}�7�	��ZK
����f
+k?\<�}�
_<�?��.f@�p]�x-�G߅)~

���v�~
��
���kz*�/�����f��ޮ�ﯖ;��ãCH���4�$�$D$%d�����(��d~tu�Z�
{�� �R4D	~��Q�e
+������!R4�
��O5�!��c�!�y��xC��b�@�8�<�-i
xP�.f��
+�ՙ�{�
��u�QOhS�Z��r8��*-�	�/��9BAeI�zW��PXk��� ���U��c�Gʊ�w��4fY�.U�<�DQqs�ܜr�!=T..���S�g�������L5��HJ��hX������
�mFs��3��–Oa�ǰU.|�xB��P��b�J*��N�,
+�r��"&
+�P� �,#W.�f۲چ�{-�^U� es�	�l
�/��j���B4.
��w�5�ӶʺE`q�Q�v��T��Dy
+qNkW�����jx�Ex�7�C����Sz��~��*������C�1�& l������ֹ�h�VW\��
��<o,27��,wq�9�cD�z�Y�13�(U��oDB���Hv͗~O��Y
�
�����,��k�
+l����"j$#�U���u;�]�M#�Y�Z���@"1�} �͚"�=�A�Y�lL*��`{��g6�(�H�PadyZVTF�ӁR��BЩ���(H�
�wH��»1�P�j-N�iL+�R������׬`���vd�EV��m�T

+�����0wx��
CﷹI�6֮i��O�`Һ?9��3C��H�p���m�k ��-/�>�R��S
+mEu$
<����)%���	�D��U:�י�6�ft�3��
�N��j��ULMT����n!���[�}�
y���L�w��4�7׿^�P��lH�8ӧ�b؋��˫Qi����˛]�2�m
�){
+�F��QQ�T���vn�B�Mn�_2�](��w�V��jٖv]+[�ô�:��	�:ީ�5��b��H)�	���͛��ZǸ��p5
>[eZ�W�������
ڥ��)�p���i6�nғ�1ۉ�>&Q|T�ME�
 �j/W�����[[���j� �~\�nDZ�I�7�I��[4��@�k�bbvGs�T���+S���������R#���X�E�O�0��_�l��E�B�E�
Fl�����<'�
	d�_�qi���K`�n��,��5���9�.��s��ΩPs�:g�FM�1D����!ό�yl۔�X�0�m�R�8�RQ�
�^��)q37�/�.
+�p�XN��u
f�v�ܦ�V�zg����vZ}�)n�W�j�����O��I;����h�ۋK��;��pR�{@��(�l]�º�
c��2M��٬��s�|{�2�S����V�0Vg�6��6_��������6k�����K_T���HÈ�A�v�r�W�(u�RS> 7���1k]rsd�F2�Wr����d��	�|��|���f���rş��*�264-F�_v�ԢJ�U��-;m��Ôv{E�:�l�8C�B-���������eFZ16'�s���

���5�c�)
/|����i�"�v��z~��sp(��@;yj�
+�3�Z���}�a�֫E�l�H���
�a�l��(D�“~��ű�+�ų�������.t.�)����HN�AA��2�
+�\�}�
+
�|s�^�W3��^ş�G� �����#$�]�>,�����>����=�5^9�>t�
O����� v"��`�<u�8�
+5
^��ɘ%'����ݬX!W!g��#��1�T��f�_��5]ǥ���g�-a��23A�h��b4�|��
�"���F߽��}����r9�=
}ʁ茤	��
/�
�j�.V�c��$�%�����&�3ıTn:����C��S���}�0c�y�j��
A�XFIx���Q,���<?�r�~�*���,yӔݳ�ȋ��N9�
�Y��L���hH�.��&��?N7��ꏺ��&��A�-�3U�ǵH�V�h��C�B�N���.y�a�q
+AI��%-��D�6�:�#��N�5�8W ����yׇ����z��������h<��(N� �D��;r�����=1���q
�|��I�(+!��:	uV��5� �w�c<`*Q�.�sﯦ��7:`���MA���p���M�o���x[����b^����/������F<��ҹN:��^$#z��/��nG����j���7��Lj
+nH�7��)��y���Eћ�.U<���gBf�Y�e�"�����6;�Pjz?+z�%���Ҳ�����~��<
ЬL�+;�2�����ag�/��p��Ɵ��	稲n�gC��f�ƞ��ޙ����`B'���:�0m{�S�>O
̠
 R���ޔfnw��,�7
g3�b���Jh�����\>�]^�
̶�J�>]��y�?ɳ��{�ow�hw�y��,�
��<��e��yH
+endstream
+endobj
+2583 0 obj <<
+/Type /Page
+/Contents 2584 0 R
+/Resources 2582 0 R
+/MediaBox [0 0 612 792]
+/Parent 2564 0 R
+/Annots [ 2580 0 R 2581 0 R ]
+>> endobj
+2580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.431 260.275 129.153 271.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.025 260.275 363.748 271.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2585 0 obj <<
+/D [2583 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2582 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2588 0 obj <<
+/Length 2912      
+/Filter /FlateDecode
+>>
+stream
+x��ZY�۸~�_��h�f`�G�����-���N���őhk%q��4q~}��H�6ê$O�@��������
����/7�^
�p�i�7_V�0�-��f���dZ^^s�[�L�U��WY���V.�/x��.
7�>�zq�׿���
�|��o��O7?^��������t���R/Vۋ���b
_~\P"�]<�vۅ�p��,~����F�iwLv&�(#Bʅv�0��
~��x������󓿃��Sa3��;FM�+������qhOE_�?%�
�IC��
�(�?���H6�t�?{�m
�G
���)b�
�o�T���nA O�"M�?D��:���a��]��Gx�M�y�-����|_
���g��|#x~Ȫ�p�/����ȱ�![�q�uRŎ���d�+7�o��B������+U�����G.�(�Y��^/�u���T��]^���"�����Fk� ��(=8R��A��
�[�j*G
��	�L�|O
+~�#z]�̋K�ec$YU��/��z�5b`H �?
7�8'��}��Xq�Oh�kX�������vZ����/'�8X�kƈ]��6��kh��p��W���&�}�� �?z���v�8 ~S}�OC���Qc��?�L�������`.jRF'g�&��Ț�^��ҰNϋ"�v*�γ�
"p�a]e_�	�B���ձa�D�]�H"�W0�l���cڿKv�-PJ�i
+^��f9儷԰���r +��Y�.��y��l��.�yv%@�L��w�x��=#k�j�������@
rș�M�v����gF��j{_
��ƚA
�
���+���!V
��[�A7�ЫA7~�������.^=�MhLJ��
�[�Ǡ
!�V���n8��s	�Xr�&+�.��{W.o�
�
œ��Ӝx������(q�AZ�גQ>�G�u$�5{�,s��=����Q
+���+��h��]TE�m���?�
Bp.�o�b��51�1ڞ���j�H���	��
�c��Da����v7B��#v�%�� �	���G�����K�	lHQ$�d��' Q��=IS����0M�u�	p
,[XN
��`��̀.9�njz���*@
ŖO��$8�v%�:?��(@�
"�;���E>�h�Q;!!c�DT:=�J�$j�y`7#�#�
��R"�ϢO)Q�|}2���%^
08Fe�jy�n��)W��ȑ�9�WG9�狳�sD���Սm�H7�]Q[��z�S���!� �el���H�7���ЊP���S�������98h�C��o1��
5���H:)D]6��t�nS�W�I{B�Z��ː�"2��yTEH�y�L@����
Ӱh�`�a{�Ê�( 
x7h=� �o*~$� 
���<�M�Ҧ��=Sȱ�!�U��,|��^�3��Ҷ.��/��
�� �a|�q����?�h$�!)��}�bv���lܬ��>rQxY�V�(��LV��}Y��}u7�ܥW�Yx:��Ų%t����˫P

ĮΫ
���Q�b�w)��N���gh/ܩe��
�)B�e�Y��{� j�?���_H��gK	)�q�
�K--���I1Ű���(���ދz��
�W�xȀ�,�*4��
!ŊJHA�z�5H���>ɢ�/��*�vG*� �[����e�/DUۨ�iE{�<
�d��/�*
��sF���\ۧT�_]�j�-q �&�a@
�*�E`�l_���o�
j5Q���1�����
m�P�N68$m� ld�V���ViY�ǜP6�_��O3�J8
$O��c�i � ˮ�„-�5S
+7
���C@��J�A�E���>'�ˡ���3��Cc�yR�
+<)��#O
�c�W�
�`�Z�0��.t� ��lb�
*N��u�2,	P�=��K��b�3�^�|H��
v%]]�y�>���L�C��:4��I���|�j ����Jې�Pf�9�*�GZ>
���v�a�!x�j
<��|9PZ٤��Ac�����þ�ήYb��g�CB��=[��	��f�bxb�'�(e##�R�+��%����e�<�x�f�/s���ӵ��ӗ�Fϊ��z_xl���t�
8���\[%|�
�1�Iߣ��1������A�q}�F�-0�X#��C0�[ȱ���oy5Ѝ&L������I���y��&��To�uMp(��N�YF�P����<��6���M1Ѝ|��cͰ�&����(���2��4�ۈa�;�N�G�p���)�~��TU���չ�������e�a��¤ŀa3�!fm$12@�n�9�h)<
r��}e�d�	�b
a��`�
�s�I��w��2� m��8��:a؉=K�i��fe_�sV�{����Rya�!=ޒ����.\�}���:\VI�^E`J�hnI!�
+
��S,iY'�ev�m��s��N:���Ѻ�4�׋r"��
�~��F!dž1
��f,��UGc�<a��f�M��m�ጨm�+
+��:F�O�|E(�z\~��|l��tO)�(ޠewh,��Z����Ms�H�$��#�7��
�Þ(���5����g5͚d��v;#��G��RR���%mql0x�C�;�]��Nė1G*�UH��
���
�Lei�b��'Q#�0�z��2��Ո�_�۶���S�xE��o;���[x
~C�.�^������)�{���G�}�5���r
x��fk#%0��z�F��|dM>�C>��}��6D��F��i�

7��CK���|_e��
?'�+��:܏��QJ6NB�N SԊp��*�t@^��D�Kc ��*
;:1�C��Id��P��Սd���a��0A��ۖ�6�z

<���w���)BF�M���
�O��
+endstream
+endobj
+2587 0 obj <<
+/Type /Page
+/Contents 2588 0 R
+/Resources 2586 0 R
+/MediaBox [0 0 612 792]
+/Parent 2564 0 R
+>> endobj
+2589 0 obj <<
+/D [2587 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2590 0 obj <<
+/D [2587 0 R /XYZ 86.4 217.914 null]
+>> endobj
+2586 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R /F49 967 0 R /F16 717 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2593 0 obj <<
+/Length 4663      
+/Filter /FlateDecode
+>>
+stream
+xڽ\Y��ȑ~ׯ`ľ�7DL݇'�Y�L;�ny��y�:��ƚ{R�xc��ff.�H���4�B��*�/���&6����^|�N��ϼfrw?q&S+|f$��-&��L^ͤ�ӻ�o������w�?]���O/�޽����؄O���������,�ݟ&,��M�Q��DfJZ�[N~~���4�g�wv8�ۏoo>|
�)WO�bUTWRL������麂�Ni1�F�..MgN�SsS�g�������x&���3nM��+��zs5�O����p�bS���c�
we5_�Ex���U��v�WM�+a��bs��c���v��-����`����;��P"N��iZ��b��i
�DSp�i�i�I��"���g�
��te�4���e�
��sP��s�̑��hi�-�z=�V�CLfR�^Lf�g^GJ�C��o7W�}5��Z�KxX�_h\�s������&�2�6�B7Szw�������1�^�~� ,�BO��Eoo�߾~��y����ۧ�?�w�pق�N�V6/ì��p-�r[���q��DzNت�[ޗ�,pGW�����uR�iP>1�f�\$z�\������ϔ��&!��j����Xl���
,N�*�2I�Wf���-���';�a��C�|�Z�y�r��^&Bg�����K�����n�:�_-B;���AT�
� �v�sDL�S��\�ZA%$x>)�:!�}xy��P�U�v�4�^~H
���)�bn*O
,y��l��{YKDž^J��q����7?�!�l;��~�;˜n�3yb(0 o[��"5޶}��H�˴p����XRZ�Y��/�g$F7����1�9zz����Q�+Wz���~�q�2|��
ݎ$�\�%LeZ��5��u�W�v�q�1<��oq����I� �M���u��fYm����Pj02
|@z�m�M�G��b��x
��b��T����b�_w�B�e�r�|R��*��,X����rR4����@C`�}^.w�k�Oon���.�
������&���ƭ���r�Rջj�NDw at 2RCLF�������
]���@��a�P�q��}��=&ĥ3���-
+\LUԉ� S{���ܼ�~���Õ(
�
c%�2
A��
	�$��@�1H:��z$��5������Ǡ��3ߧ�N�nH���\��~}VI��+56�c�w�+1y��n_��H�v��L�ۀ?D7a	�:��/�K��?�"�J�
ؐƹ
�|맣�""��6��Y�ì3
|W���ѫќv�r��Ġ�B���
؀d�
�v����@/���uR�~pIl4J]�����C��FH��
Ew)M�2
=4��<�,B
+: ^o�-d�0� ��1$`B䈹)h�Yp
A�
+���a�V�~Z�OKq#[x�z�
�eJS�x������C<
+C9��m��u�ħ��I��
��a63�2/��{J�P'����i�F�*`���/�?��F���߷r�Lm�e(" �	���U
C��j@�R��SNA^*��RR<P����`W�Ǽ�XB���^Bp�¤a�\e�N��
��\8����b�񊋀Ac�!>������_rLC(�w4�i2�����j.��"�qm3��`6+7׈�
"��>���GL��xC�x
��p&��r[���棧M�ŀ�(R`#��6�������>P�쪪����t{jRVz�>n ���*ȷr����i�Q�1�U�Zo~�J��T��pu"v(p����E�,��?�a[���
�a����K���k�&u���zz�|� ��2�Α[)��
�ʏQ��X�9y�W��
f�D��SQ���)��bP��1�P<0�I�C{�1���'q�U�IN�|���tv
�H��x�c�SO��5���s��w��E�m�Ln�GR�oU�Z� ͞ȩ�X?o�C|��E�-8��a�.����Q�E^�[�X�2`
+��.��>��
�M�� �ܓ��J�h:d�����[��
>
��y�o��"x
�����P9 �	�B��)���)B`i��Q���E|�{
+-_����qpe�j�ٰǠ� э.�e���0jx��0,+�~�P�!�X�
'�>	ہR�3.B
�8���
�
�
���A�lo(�y~�P���=!ga�%���;��b����Kr�˿�E]���qw��+ͯ4n�l�TQ+i��
W��m R{�2'[��$���
��L
+y	j��RA��"濟�(,��6b�k�
<��Ro7��v����uT�2 
+l
�nZ�1|ٙ�p�x"��n �&~��>'G��R���8ᇲj�fN��K3��a���dt�o��|�Ƀ��]"��Rt;
`k
��
+_�*ڡ:	*�<]�H�_�„�A&
+�1��{��tK�P�D#��
�X�i���c9�%?����ВԹ��1bP+6�c��2�p�\a��u#�pD$�9��P[�{h���k�zt�$o��V*:F�F	���X��8�z��)۾���vL�c��4 �jJ!��7m�{�`�S�<2V� ��
,�u�<�o�hhz�?!��L���a�n�~��_֤��ߞ��4�3�)�ֽ���a?�Ty"�j��
E�}����o����Ǜ�F2m}�O��F0�&�7u4��Tq����Ej��2*Ao[94��b��,{Ju�����=>&.�:C�d ��P
+���d��	d�R��X��>�$u�^.�Y�@�����
)]>߬��.��A6p�{>ovtS�׭�-–~h$c�A�TN��r��b��c��
j(�=ġ
ujx at J-���
A
�w� Ѐ�����#p��7m<�@f�!�����s�`ҽb#��!
��*_b/�j�m
�}�Z��P���ћ���'�� {:%��
d�>,��Z0�)�JX��z"!�����-:��$V m��qs���.� �
G ln�!�
g�b��Qf�9��h��A����:��`1�Z�EC2\
��Y�u��&�69T‘:�9�O at a�-,X� �tYٖg
x�Cqi�@a�I'�=�����-BY܂���Z5��p�VўE�)ƃ߶v",�Fo/R���5
%�k7*�
��J�O�I�O�X(��1f.�� �g~�ƄC��Q�^8m����p�k�&L��c�$Z ���	�K�N�"v�%%����)�%�=��p	&=�Š5|�lHx�Cf̄���^�$�ci�	
�@�˼6�g���D���>��Q�8�+����7kr�~��*5�Kp�
?��EqO�}�
���@	�%>vw�<{�g�?����d$Q1
37
� ��1�`��`��������b��|���U*��~�Iڽ�&ћ&�8,�

B��N�q�Z�"!�`:N>�[B�L�QD$$��w1�H��eڠ/Қ�߿�����],߻Q�$i��=��lJz>ʼ��y���_>�b��Tx!Im2���t��Oo_��9\U&���Ǻ�~�� N��?@�u��+:
�xxn2��T�(!��C��m�&r?!��a�{��]��f
+�9
u���X��҅��.�

 0��8g��� od���V��g.����Ǧ2�X�՚L�
3<!A#	c{�Y�o�G
+�H�S��,s�9
�
�����"��fH�
��$�;�t�Fr�TZ'���(#�AJAY��>�%����^D����Es*׆��:
���*~V��
�°�w:8��lSt������#�
V��	G ��mங��2Ђ�`�4���L���5Y�뉿W��ŝ7}񉟎�2Sl��I�U{�K
h����dt��aJ=O�~W�
+�1�B�&�39j=���U�g t:����$ Qn�v��}��
����j����Lk>0�ގGj����h��hB�\Z�O
J�s�It{�_z\���J���^i��M
.�����+f�3�b��t��9���"���O��}��PYW�9RJ��s���eRk�
��<b�%n��
xbC�1��;1t��p4?�`rv�V
tC�g��NN���t)5%/0��H����R<K�/�&vA��/�:�o�u�}ғy���'<�ƨ��M���jE*k<����U�AʁK}�+:�<�>��2��Jh�d��i�!��[	sY�ơ+���9�У> �F +�)�Q�ݣ�6��~E=

c6�lo6�BZ��}�6���$�Rݯ��I6�q|��lk&�Y6
�%�H)��'�NɟE8�ӟ
1�����i(+��V�U
+�C��>Q�qK�
���F��/�� ƙh({�H���"�B��/EԐ���|5a
_��!�3q���L��L��s���b���kP�Uzo����Sp=
+Q�J˴��2O�m�������{�MiSz��u�9�i�<6I�?
9����x�Y�R)�'�}v��M�
���
#=�5Aݵ�ٱ���1?]w��+aG��0���U�����*:O�%����d��QV��i�˩*��}�G1D�$, =�Tl�'����a�G�<�#]NU
�F�M(�L1�"�W�J��3�T�~�p�<)ñ��Ï�!N:##��8<J�.�gb�r� �r}F�=$�c�U�N����t��+ڑ�`Sߧ7�o���%����G6�gh��
��o����d�r0
+endstream
+endobj
+2592 0 obj <<
+/Type /Page
+/Contents 2593 0 R
+/Resources 2591 0 R
+/MediaBox [0 0 612 792]
+/Parent 2595 0 R
+>> endobj
+2594 0 obj <<
+/D [2592 0 R /XYZ 86.4 726.045 null]
+>> endobj
+546 0 obj <<
+/D [2592 0 R /XYZ 86.4 578.672 null]
+>> endobj
+2591 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F38 773 0 R /F11 1019 0 R /F49 967 0 R /F14 1030 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2600 0 obj <<
+/Length 2787      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۸~�_����7B���Τ���M�\s:�$#���R�����@�)َxM_DQ�v�ŷ��.��nG����?&gO_r5��*�F���QD�4�Dq:��F����1�l�"_O�b�)�����,o�ʓ͗����x>y��?],�ʒ�v����zv19����֊$1B�������
��:J	�f�Ս[������������
Ӛ8���T����j����Y~S�07�$���ųɳ�wo����>���͘��.'��h���l�5�).�1��p��u���|5y�}��yy���8}�����~����ߧ��.�7_�<��c͍՟���e��
+�2D�g�1�z�?�6���~��U�1�9R��T�c��r�@��.�9���2�u�v�*��
�Tbm��:��l
sf�N�`|�y�Ȧ��mqw�L��'�t
+�N�u��,��9!�/�YqN��b������r�/6	x.M��K��	2�#�ex�;uU���o�"�J��h�
��2��o��Bj��^����'XZ��0Ɲ(�B��ʧ�eյ6��`��P�@l��Zo�@�I�^��"���Y�����Yy��[�eݵ3P��
C�=a�
|N+�D�#�f\��� *�s�5���IQG���B�Dm�u`��Z����#�C��sX���
`�I�(Zi��s)�l�
���yW�
��ࢫX�(�1
���I<	����
�XB�F�]��
(9��/��-
��+CF��Ӡ9a5w+���?%�iQ�:Q
D
��dI;�R��ku�t�mW���R.���?@����E
{��c�CR
$��
+��nֺz�d���
��F^*>;�}S�̨�>�u10=
����^�U�Oi,���1	D�(����n7�r�
�6�+_Kp�f�!E��j���1M��
�[3�C��������rJ���к3�).]�M-6�5{�e�h*�D��b5�kOϐt�ܳ���Bp��>߈�`�(>�p��0�8���T!�.ozs�(Q���wMz�
s�I������S��H#��
$Ai��׻\�%x[7C�D�X���]�2�'�
�(�����׼:��

+#%x�E����F��U�?���&��E��@'&�!�`�s���ϡ��F�n�5߿:}p��&,b�!�X�f��me�pއ�P�-?o2�����T�痮�[�è�����sM/QȪ6�(ok�������D���X*��`3էKM��� ٘]�����.��Hd�.��4'���Qǂ���F��C�-#
Ҿ��P�NY���`��P!
�pE��Z~��A8Sj�XO�॑�Dj�[�������
�b �Kz�a�B��[������
�1t��u��͜���<���,�s��G><�f���+�`�v�W�i6�׾��R��Ib��n�y�?��)�p!����B �*1�Ŵ��0
�
��i�.\]�_W�Ch��{��n���
xfUr�-��SƬL�U�m��(+g��
w
�=�=\�e��?wl���_���c7�=R�`ԑ��H�%�J
.�O1G�o�E����{,8K�U��:w�v���v>�����G;p���^w�\�M�D�	�.�3��j���Z]��
+{zy
���5��ڣ��|��r�@
���z����d�H��?��v�C�����/��"ǫ�'��b������i�j������~*-1\
j����5�j?u`���{X��o�Ѥ�
)�
ÿ��D��K"�{bSƀ?� �)�qA�Xi���;�K�a�Z]>W
��k��K��͛�&@E��+YwE��hD�K�x�H��J�>7tP�������՚A�%ǨC����_y_��,D���"��������f��L���d�E�,u�,�&Y�P����>*��v���ǫZ�,h�u��A���}��F�

+*3?���v�� mZQ�rӵ
���1gg�
+�������Q�h�Pl��V�B��
(��$&B�v��F
+#v}��:�ߐ]�!	�Y�!8
�
�����*�L~�����߆��:���
+�xؠ��`���`�'}�Ժ�?��`ֈx
+#M)Q�|G�F4�|�,0q��iI��w�u�
� -���N�۲�]�B7�E�����=����9?��v�Z�oP�&��q����?�|2	A/eC��IMl��� �S1
���F�x
���4P�>$
)ZHƻ)����C�n�Cs����������k����S�y}PF�-(ʄ�I�M�/��O�nJ���f�rN0wB��pO���?�zBR�V=���y��.8p"�C4CI$(JQ����O=�$㎰D�8����7��v���Uy

4�����Pw<_|3G��	
�� e����
s�cɪ��ߺ��5;m��'~t�N�z�� �>H�OjOzF@��A�bV�[���9��߳��MM

\P�1&#�
[�;D< ��s�i]B�/V:Q�ۇS(���1LaJ�x
+;�Q�
���DP�4������!V�)� ��c�Y\0d���p����J��_H��zZq�nY̚D�
��챗o����
?�� �dz����Hu
�U�yӜ�w_\��9�n��
�>�6���
V�T�f[a��~PZ�a��<
)�ds�9
��S�|+
D���Fja�|M>~�
+�B��.`�S6�V)	���҃��P!
��U�ol�]��E���ﭷ�v����t/��i�\"��߽���-���{L��z�H�s;�P�W����o�
+endstream
+endobj
+2599 0 obj <<
+/Type /Page
+/Contents 2600 0 R
+/Resources 2598 0 R
+/MediaBox [0 0 612 792]
+/Parent 2595 0 R
+/Annots [ 2596 0 R 2597 0 R ]
+>> endobj
+2596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.295 520.385 128.018 532.34]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.531 520.385 357.254 532.34]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2601 0 obj <<
+/D [2599 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2598 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F14 1030 0 R /F8 729 0 R /F11 1019 0 R /F16 717 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2604 0 obj <<
+/Length 4432      
+/Filter /FlateDecode
+>>
+stream
+xڽ[m��F���_!`?�fa1���9��7�X�'ɬs at 60h�3"���H��.��S�M��Z�d%��l6����婪f:z
�������_�z�%��zt�0�:�#óD
6���~
�D^M���yAr|�������~�������`,
��&Qʽn��t���_��
��:J���g�s9�W�я/�����4ɬ�Srw��ׯ��ѓS.���j������y]�Wh2L�1��İ>�X���"KxK`:�/����]�E�&n���
�ݵ�$�r4aXZj�K�H��{�v^qWhw}�X���x���p;^?��G��l���f��
+�����i��b�^>��+�ل��ۺ����?_!_��vo?��
	����I�#mXb�
�|&l�{�	�&Rk7�ҁC�i�k��)�#!/�j�{�~ڌ��s�
K\�7���%	~ՁSk���
+��u^�v��ģ	�l
�>a,��������[��lr���o?�y���IL*�?
��Cj�6#��[���^�l���
���S��:��(�������"���"Dh
�}"�}u�*2kFC��̚�D���f}����J?�

+���V����oc핐�w:-�*��Ff'��=�)�K,LB<�5�{�s�KDYo)�\��r�.�_���K��2Ѱp=���!�S4!�S4�'U��mU��A�imID�X���a��I�2�p�e��F�*ؒ�z
�0	ks�99�d�'�I1{Y�M���m6�q�9^��m���$C�e�4�k�a��G=�<�b"��aMD��
;kK8���iNg<���������Z���.ؠ?���b��.��P�w>%"ɉ�R
gg0���
PNV�fz�io�_�ȴ�%m�E������ap�™�C�eb�u���k]��
�^/�=�x���I����K�!�KR�LV*�߬�OUԞ��>k�@J��5�6�*��jg ���H�
6������Y�ѷkP�}�h�ǚt�Kʺ� hM�LS����(1�<�
1�S��٘*���ޜ�nUN�_��9�jm�71`���Eo^�����0�Y�r�D��X۠!HEbS�����T#~����EUo�_b� K��]`^��� [...]
+E�7]
��-:=�\lG�g4z�b�/�
ǒ4WCZ���ѩ����-`���>/��C�x���A�K��̴��6N��g�E�����e����s�������As熻Yy)��S�y�l�8ͫ�%]Z
+�
��yM�})E����4l��	���c��H>l&��D�"_��d��� n�6�vyB�AL���}�8����nE�8�(̾��bL
�|��/��?]�����h(G1�re%�)�ɐ��zo�i.6.�U�F9`��1L��,Ao˘էV-���[�
+(lRe��,R��ޔ�;����x`��O�T�P�<�4_Ȩ��
-�g��.����Ca֋���Xn�6����&H��9	��pW �1
�hš��"ȇW���}N
d�_�H=j
)o	�7��e��������&\x
Q��_}SpxF�]սZ}[�
߲)�`�v�8��𲨂]!��`Ut�kit���2R#�ܞ�@2'G�
�3@�x� ɐҠNŪں,��
+&��7;���Zo�rUT��yc
+�U��u���m���I���A��)���H2	�jP
H�@�[�8T�V{�ĺ?�LtH_�Ġy�)`�g��!���t]��`�� k��L���]�2R%^$���	v\�3��^3�֋OR�M�<��m���
+�����zC��;y}ȧ��ҧff�9B��c�W�n����*��
+�3��,�k��U�Pƚa�+(\h��{ZZ�gE��h��.0�j��bQ��B���T ���|��]M�zG��b�6)�������}H�M�3b��T_�\��m(������6�
+�MU1���_�ʺ��sN���"{	E�:;���a�8� ��*�
o�b�����|x+'�S�c/.�l)l�Tz�
)h�
!�j�O쎀'X�
n��_3�IaҒ�m훼���ݗ3߅v�������̨V���)≒�A]lg?ix���Csm��"

���g{�����Z���h�L�a����7�
����
���4nF��UT�&a��ù�4��2������Rk唁�i�f�t�6
���Iތ�yݺD4���ީ�
Q 7�h9�XSm���\��R��|o��~v��&��g÷K���vS� ��U>C\}hQ��f���7�r���kx��E��8�=�.���窷��@_叡�o�ƹ����&\ ]�2�w���;'��M��rxRT����B��U)l3O�1��>c`�/�u�����2�?��~t+�=2��k볡6;(탎��j��֍)�dg���!S��5�U��& ���s�B蒜:�R~�a�W�'['���L��K�sb\���+
+v�j�?�����6�ժ����t{�7�.ȕ�����
 q��jk=^�,B`xh,2ltk]��jV��>�
�ȝ��")�*�K�$�h
¸���Msc#~�`r���m�W5~��ŀ^�� �#kBR=7<	f\ܷrQ�\j�+C`u��7�	�(��P�)�
[��@�ʼr&z��?�|�7
��]�0�QVQZg�4�D�!��
0D �Ё�-C�:�'ڝM��$��'A�U��z��⢚;���8�7E�D�l���w�B߀׷����<R����X=�����-��%K��e�.�.��ud�	�Y�<� ]
+
�)����
Q�������߶`܌���職t�"-:(mKq0�)�
l�^.�u�U��}�X�_��x��[>����+�e��{�rY��v�
�ڳR
:��R)I=����W��y-�e�a� :�`�	v
$9`�ub�=��
�6��PY�*9��u
�_�k���W"2Q\�H
tvV�!��w�n(�-���/�
���b/�;��t��&�?��*��
 ��}U1(�w��M�
�Z?�O��D*9X�g	G�h͙�3@`
��9]�إg}!'m@������z����Mh���Ȗ
xP�P�I[S��^��!r\_7�JEt��;�zXp�T��=�Q���4|�[����z[�G�$��Ԟ��( �|�w�g�`�W�9��H�FC0��ޘ4�)UqR��7�dK����'�7��M�i^���'�#�i�Ĺ�\k9
|_���esP+R7{���^y�C��pu���F�P�pN4��x6v�-�M�|�{{��
����;�g:�
�B�v7�H{>��C*�̹<L�=�{�����&lX��l/��`�O<�
>G�J��ԢWB�~������R�ZJ���
o��P?�u^_��E�N��/O��
y�@;����>�x�μ�.?�q�W�C��7kz'�M�[ùn)B�JҼ(�g[�塂�,����;l�v0J��N�#yx��@_���
+OMb�;ƌ L#���tS�m\g2?d���P:�=�$Y�����d��3���w�l�O7��_{��SaLa��ek�KH0е�><tڌw�jt�Lo��i*��S��(�T�Qό��0
+��m�4���r�v��v�%i�c����aN������p�~0::qމU:E����i?}�h�w����z�/��)���G	�w=p��
+�x��M��=������؁_�A:��4p��.U�X�
�t8
+�������}�l)�1�X�I!֟8�q��)}>�(K���B����c���I)v���ݬ�����C\Mœb۾á{�E�a��he�RO���#�i
+s��Pt:x"�N�6���1��:����h�|\-�O>���wi�O�C�d���o�g
JW�
E	�Pc�E5tGa�t�.N���|��<!'��R~T�8}
e�E&��e�O|w?���d�\T� Ɂ]G:<|�%�K�V��u�
I�[�����
Dh�տ�1j���
Y��Mx��|@���՗����=
���J�a��	:.��<gַ7Y���p#��Y�଱�&�C�]�s��vwu,
�����M���l���5��_u
8^Mg�%���@/���Q�H�SJIH�;c�2	W"�ĔBӛ3
+�(bbCߎ�n^2��I�Y>�h�*��'���|�.1'ā��N�)tn���Ɋ ������ۿ��lƅ-��Nsi��!Q����TrE�.ɷ;M�]dJ
�����G2y@���#,����	7X��Y��>T9�7��Iw�J��m����>�wu�>��<�8�]�� �����PN\*�pcG
+A�8+̕
��|�?
+��t �� ��Y
+endstream
+endobj
+2603 0 obj <<
+/Type /Page
+/Contents 2604 0 R
+/Resources 2602 0 R
+/MediaBox [0 0 612 792]
+/Parent 2595 0 R
+>> endobj
+2605 0 obj <<
+/D [2603 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2606 0 obj <<
+/D [2603 0 R /XYZ 86.4 701.138 null]
+>> endobj
+550 0 obj <<
+/D [2603 0 R /XYZ 86.4 452.084 null]
+>> endobj
+2602 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F8 729 0 R /F48 966 0 R /F49 967 0 R /F16 717 0 R /F38 773 0 R /F11 1019 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2611 0 obj <<
+/Length 3330      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�}�W�*/Ԗ	����*g�ծ�x�΃���ő�
+E*$%�����p@�C�
'y�A7��ݧP1����6>{��4ϼf0�
8���
+ό��t�vȍ;	�>/�W���f�\���S��5����C/.޼�n��u|{�įN������^���u�!��Z�fN������?��o~
Lz7�����L�j>����gE[q�қs�da�sƭ���I-��p�^�n���\�ᆔy��jn%� t
�{�W����B����]Kƥk4�&����*��:�l&�#-��/���;Bq���C	��.�����Pc��kil*���]����qa�_Ȃ	߬˺ܬ3�'�Eѵx0���œ�1gs���;���jm���aLnX�~����p9<�pS�����M��wW��&�\-o�G��tQ�oI��H(������J�`���."���z�ھ۟_���
�E"��$bR�g��))4�6�$D�����
+>�O�Dt3�
֣D�|��e�.k���Z7��X�����'���.\������.�h�Nd�-��r2���d�ՓfW*Q���3��|
+\@�.X��%–�X#�u�~�ZM��'|+C��� -07�IUrLk޶d)ec��D��vE/�`
$����+����G&��V�}kV�00x>���q�1�j���i�����}
L��c�RHx_����
�u
�1J�y�h D�H��qWaѥ1G��#�h�4��*� ]�J�� qՎR��JׇBL�Mu�����s,�v���*���`���GXG#+:qjX�{y"��|{�sXO���bC�fS
�l>��s�;��lJ%���bG�W�x�a��>�]��@R��8���|��!CvEV�-s
��ڞd0�T�����`%���>����
+��=`+�X�V������|*JR��

gU��u�_�
f�f
������&����1Mh���
�&2��B��#B�zD�Y�itF˴�舖��L�]�1�JU�����w�
+���� �>���*'���؅,\�~������f�"/��� �|�����_<{�[.�����!X"Rk�R���1�Ա��F^wEL�ƶ��X^�G�U���>�*. 8�G�~-���I���oC��x3] ��j��)r@������뭡���
+||y�s"�<>��C����{U�yz��H�~��t��nMw���!����%�gD�Ii�a�RkV8އL��>�y؂=��}�ED�ަr���Uh�l/�`D����2�
�ޢ?ۃ\]LPnז�A7����\0,
+�5����챦7��M7Tˀ!_��Ez�قЁeh��N
N�LJ���GVUrsهXJ��ّ{�gE���(S����ݼ�s�	�D|���"��O��z�(k�q���Tx��31�m�}��b��b�n5�����r[����1�_*��%Ŝ�Kdլ�s��_V��KD�	;��6=O�窵��p	��|��]���7i�*|ҕ�
+*_k�24u��n��������O��}��3�i�C�Bj�S����6�
X�N�2�����j��	���
���L��J�lX׉�r'a�-�3�����~2��ZEZ�	�G�]�:ު�j;�ĵK�uK$W�\���U��EFd7�`��
yRh4Q�S�I�G�lO��EΤ;>M�����>J_ }
�|�
+)0�&
��gU�]T��tRr�|�:t���D��@p�>��:�S��y2�g7�c�㻆�6\��DC$�
+԰}�y͖
�3m���}�<����n�Ѫٰ�
�;�B!�ev=ji�]�B
+�v��M�a�R�`�S.u�<N���u:Z$�
Cd�
s��C��Y7
It:Z�,�|��_��BS,��1�)8�uG�
%�/��z)�It#)�ks@:�5f
��}-һz��H�߉[?����w��'3%�&5V��M
�W��NQ4Qn��/���j��	�q��y����m��\�����n!�bi���nvTK�ֻ̆����ذ�ˌi$�p�������
�"�s
+S�?�
�q2L���e,
���_l���1� 
���D ״3�BWT[r�֒ W5(�sR��pNj��J:� d��"��lou�����
.|���J}�_�g�M9�h�H��Riqj��G����3y_��󷺩&��g����e"!�ՙ
�h�f���br��������f M�]e��l�r]ƶ'�
7���]5' ����0���
��JI�F�H!iO�7D%-A]q[ӛ��AķL�}�Dd@%�a9
�ke=�D�$
9Q��Iɏ`
+�>u%xeo����j�)#ͼ�H&�im*��,R���G������h�U��U�;0��n�AC'ϴz��
L8x�T:�Nc���
Ƃ�,�C��ۑ^/����c�e�p2���IL���ƫL����jD��`�!:�����ۮ$���˴���%�9�P�R0
�r��<�
]��0�(?
N�����Dh�8��#�
^�/��S�2t�)�W��4>�Т�������ݖ��է���<�a�O��!u&�/���;�dT�X+�������1����@�lus_�j�!
+�(��/�v�, 	��q���8�R�2�#j��8����?�tI(�����|IK/g�Mu�����z=�yӪ������-�
�Q:+d
߇�RW�^M΋ۻM6� >T�O�l9��'�;�6SB&�-���Jf��8Up;�e���pB�u
��^�PE`'�#��e�I�g'Z��l7q��lk*qL%V�U�
�A�̄��^���/N��vD�]�EE�**���LVϙ�M3s@��7Cݳ�:mz�BtejV����?�\��2��E��2l*�+T:�y>TZ�2A�ۆJ��
.b�tu��gM��>�a��&lt�N��>�]��f����_ �m�v7B���i��e�3|�J�4�7F�Xn2G�ilk1�
T������Gz�y��SmN
���'%RD�=Y-

z�Y��k��8�NA:�n�8��g;4�o>�U%�o
¶��k��ʳϣU΂+$2M��3U��|�ʝN���N�@p��S�
��# � x���0�x��M�
+��Q��@�`#��z��_l�Ǡ�6'}�
i�N���h���s$����]X���K� �n��Ic!�>>�O�L�U���H�wp|����}t�Bz�0�]X�DG�J���nAzՆ2�G(W8�֓E|��1=��ȹ?�cIW�>���
+�a��tf�ԓ+z�!���5�S����O�71�6�"�vN

��_N��O~�DX��|���s�/���h�q
�
+endstream
+endobj
+2610 0 obj <<
+/Type /Page
+/Contents 2611 0 R
+/Resources 2609 0 R
+/MediaBox [0 0 612 792]
+/Parent 2595 0 R
+/Annots [ 2607 0 R 2608 0 R ]
+>> endobj
+2607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.418 373.238 140.141 384.086]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.688 373.238 369.411 384.086]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2612 0 obj <<
+/D [2610 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2609 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R /F16 717 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2618 0 obj <<
+/Length 4162      
+/Filter /FlateDecode
+>>
+stream
+xڵ[m�۶�~�B�����
�L>���\&�^�;�$�%��Z"/$e���w �$��D�'R$�����.V���"]|s񷻋/^p���*�w�F������n��9�D^^qÓ��
oDr�����������w�]P�,]�5�X��
|��\��k�X���)��,>���'�k�[/^]���)�FOgr{iU�������(6�|����%m�UyyE��&����.,M#������sK��ұȨ�5��
�P�����/)�n
+�w_�f����MD�T�|�\�yYRn���
E�O�t~��Λ��>�ΗmU?�����$��R�c���
9��m{_�٪���x1n~E)�
-�H�4��������ݶ\�
w��</6���?��l��.��I�Y��BӪ�7��flk��F�#�T��l���f��ZV۲ݟ4��|���u��]������n�7�<2�����
!a`gJK�acO�!-��+�1{��_m�l
��-�
���
Ss->�}L��(;�>�wb$���Dç��`�Z麒�Ư�ٺ*�y��HP�3L�q�`=��a���}���V���ҪQrF�
�?q
�	��8"�盇6"O!R"�Y�)��
/O
+x�k����T�a��� C2�ܼ���n�_R�B
o2��_?6O�](�n
`@K��O�8�+��(ؤ�g�#�e�Y�t%�7{�&o����^=w�֜0~���Ħcϸ%I��tG�� ky.�:o�uyI����������%`�[@k��o�
|�a��y��<l�����	���QФ^�3*���ҙUIj
�ϡJؕ��۹�
�Vwƕ�p��2��H�d�-�
B<N�
�T�DeiC�^���
t�?�(���ӈjV[�
�Pp����]U�-�@�
�E@�
PX5��no
��;L�
+܆M�k �JfpS�y3��>r�7��A�=����Y���I���C���>�p/��k��m�,���e�<�I0g�
�
�Y�"�,#�
�Ʃ&
h�LI�I�?��{K'����c���
+�運J'E�R�{��A�jY�^u��*�^��	��mV��$
!d0X۔��;�B�׎��ϏE��t����-�}ʅ�}�E+�sTa���*k3��_�x
��J
�>�$��p6���O�FF5��
=˨�F�t��;�xg�Ѱg��Y���:tۻDCZ�M�vR"
��V�&�^�
k�V9���֟�_#�i�b����e�4��
\ �{�?�{
@)��N8T�/�
���m�8nݫ{Lը�D�
+ ozZ���Ai��&�QJ�;c�
cZA`
&C5{R����
<�6�̒#
+���B��4D[zz�]�
�o�O�+�
IC�S����N�~lt�$�ǒ�!qr�1	��������H��C
U
+�#�Y����ퟔ��ځf��J:�Cc�α
+�"B��ޣ�{�i at h�0!1�y�4Ѵ�f��H/LGCp��
%t8t
3��"%ƽ��a�><��z�_W0��WW���Qgn!;��@{ptŇ�����V�	�  �}��S
�0�"\����S)w�l'a'B���
��w�H�O��M!d�-����_=�t��
ҹ���L&��V�[�1�PnQ��w9��3��YF֌PƧ#�k��� Aqrs���E�>{�1:.��l�p�s��&��I�
�a�F�IY�]⚂)�0��ms@:��z�W<dO
ې&	�L�c���6e���7
02�
+��?��q�ҟKD�R�9k�K��b������Rד2��	��z��bX��K�b
���<j��P�
Q��?f�/	�q�$q��%^\wץ�6�%��}�jYfM�$(� �>Bt&�!꿄�Q�7]��o�u�v�[��c�ON�
ٯ"oɏ�0�2��k�l
O�0�8��>���.
O�bt��~/6ſs��Ob,?cG�&t�]�VU8���!r�bl��^(TM�b���{���d��`�)�G���b�ʓ!����j��!�p����ޣ�g�!�ܯ.
����&ِ;������OCg��>{��S i�; ��T��sњ���/�i!��  �v2Ճ)�}�����͐
+��*E�n<J����?�ߡ�7����l���@�t���u�̛��C�� 9���t��L
�\���!с���p�*@�4�H�ٺt�����?pt}U۶(���u_,��X���jN,���6
bF��
�Na&P���S�j��-e;�c�=�g�?��uHtd�d��B8����w>���M�	 �)��j<�p:�kWG��p�4JĿpp�ة��j
r��r�ޮr�#��m[���FA_�e��t���j����:��"�p�
���>�>	���-�iؕ���y�}�e���j"�&�~��8�Q
h��X|W��X^���Q��C�v��������fۖ�*��7���~���ۗϟ~�*<�~�2���ָ��Q>&��ע,�"[{w̐`�u/�P�:���j��s�$@/O�K��o1�R��K��k:ݖў:
+��o�D#��*
�C�<B� ?�s:O�05�W�|ض��`r�w��Mp;���ɒ)Xq���:aI|*h�m*v��%�5|�U���A��H��ӝ��ю��|(JX}�S��n����e����'�	
[4o�"Մj�C��]ug�t���c����3	|���ʗkpk���o����{���W�����c�dX~4���� ��d;��P"����x�</����ϘQJ|�.��}�������� /�}wܞ�\�w^轺��P���ߗ����m���pd��S�p�Qޗ��}^�I3��ˊ50����O���P����M��d)��:Y-��2n�C����\1j؏q��dL�q}�
���������
�������K�]��
+b9�W;�
/�i&�G��
+��NA(z
+Xc
H*��
+�)!�T���=h���j=�E?J9
+�����Wj��GW��f�\�
=0l0}X+�q|2���p���!��-W�=�i-1�
Z�"
}��C�vI.؀]�ˀVwE ��Q B�{/u�_Y�C��>
+��pS^_��� �5@e�*,
��.��|
nƑ9����\���E�[�ٿD�?]a�Z �
'ϣ���C@��
��mg
t DP���5�s��!��`xz(͂�~��[^J@���6�g�F
0�\���e *��/-L`��a�I�0���'.��
�@�]n
+������K���e�E��*�P��0ѡMN�߯���S>�#�ɮupG
ֵ�׮���zp��NE����� �`��"�����+u�
{��M�Hdg�c�����vߩ�N��j	<��������g�}�u�m�i�>���w
pj�B�]��������(��]�l
�(�e�bw[���2�X]���o���� ܹuWؕMþAJIlJ���TJ�.
+R�#9ű`;�v�
  �?�x= t�w���H�[���>������
�&�I����<v�~
�s1�q�+�i;��^z�ߗ���>{I�
Y&QlZ�������?$�
D<�}��/>� �T�[4?|��Q��n �Kv�`��
� ҕ��
m��Pя:���u����������
�
��34�Pr��D�9�x3��Y��ː�_���ߐt*ػz�{�Zuw��_tR�< ��M
�
Hpc���mޥ�pB���Gb�ʇp�p��^��p�����J�]G)���8@����_\&�r]|���“�y��� �z:��a�xŁ�B�6�ؽ"�j�DƓ�.v<K�q�K���
���ޏ�f�bO��������WUXK��B*u����M����j�
+Qa!��ұ��y��
��7��WH�R Ȕ�)ģ)�'���P����)?I�*���O�?B���hl#��ۢ��S��•Nc��k|0�>|�w���x��
+�
�v���K|z?�©�)������W�ɠ�.N
G )�%���ܝ��Q�h����й*
*a�A�e���O�h<��6���U޺Ҋ[`�}���+08*őJK$��A �9�
�`Y#�����"���ЈA��S[fX&���w
+���{���;Q�	5�xW4Q� �b��U
+endstream
+endobj
+2617 0 obj <<
+/Type /Page
+/Contents 2618 0 R
+/Resources 2616 0 R
+/MediaBox [0 0 612 792]
+/Parent 2595 0 R
+/Annots [ 2613 0 R ]
+>> endobj
+2613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 49.928 100.126 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2619 0 obj <<
+/D [2617 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2620 0 obj <<
+/D [2617 0 R /XYZ 86.4 531.315 null]
+>> endobj
+554 0 obj <<
+/D [2617 0 R /XYZ 86.4 284.078 null]
+>> endobj
+2616 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R /F49 967 0 R /F16 717 0 R /F38 773 0 R /F55 1099 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2624 0 obj <<
+/Length 2507      
+/Filter /FlateDecode
+>>
+stream
+x��ZK��6�ϯБJY��'�c{�Jf�����\���L�Z�������Di�V�$�l����P��_���W�����
W��D������("�EDq��I��励�E��i���]���rō�;��A�I����훛��nK�eA���姛����\���pA[F������O�"�/?/B�#�x�tۅ�a0�����U8�
ʭ"J�VN�M\$y�,Wd��d&��c
�%><���i��}�N��r�$�
+`喲�wU�(�|AS
6�	����S��J
��
�z��%6��QjPWV;�@
�리�s��(73�yK��8��/�I������S7x̚��ϓiNB�Z�}�dq^od�#MD�+JI$��-�P˪�b<qi��@������)nS�(�c������n����(��

�K�r�a��,i7�{���"M�4eq+R��ޔ�<q����n&N���HF/9:CdhZ±`&�3����W8�c"��+G�) 0�
��8�e��hs�H@�:�m�lJ\7HjϨt�V��
�N 7H@�p(��^���m�owyj���N�$���2NGf+hD��
� -J��\Nx(:˵;b)@��b��t�T:��ͷݱv�&*�
W~w���C����!�ԝ��i3>5ԕ]Z
צ�yڭ�~x�<����
+�JJ
P*)>�yPn�
+�IJ+�ζ(�	�����YX�FD�G<w���� :�
�G��~_�[�p�Prp��?
׽:��e2�x��%�h7�v]������
+>1꿹  o>9��`�`��B�c���CZ�s�W���j՛d����	��Y~s��(x3����6�S�%(5
O1
�B(�C(Y
!9��B{|�Hw�/�	�3<֓ �TF�
 ƏF��:"F����wz�
W �x����
	c�
�/������؏#��]vʗ&�
+�� �]Un�{�P{pf��f	��f ��`���
�þ� ��YiR��{Ǻi�S�!�	���hf^���p%	+Ym~��Mz|Ad�y�?C��LX9�p���Sn�ΰ*�4�vp
�qS�&G#CL����B�!.�
%�
uG11���B���l=(}~~`b
+Λ�g^
��%�;�ptb�`w��Qԙ� 
���\U�Ї�9�%壅<~��$�d���ŊA
i��ABW��q�so�HU�o�f�Fv�C�{RP8�y{T�
�
��0$)T��4����� �!��8�<���Ƿ�]3aeHh�_�r*��) �$�]���Y��[:q(x�Z�
ʺJ�&��b�S���sȘtOe~�!H}N�
�&
� �$8S/�`�!��e�k�3�#梨.7��ݗ�5�
�W%�dk2���Ɏk
+W�������+ڴ�M&]�vs��嗉�C�N�dd'
d%�4%�m�C"����g���d�Z v�°�뇟>�)�[G���+� /w`�y�
鲢q���9O��f�&��:yb�}^~�&����9�¨"��mm.�!
%B��1p)�5u�k�u��C��z��*C�؈�Iw�
�@��]������]�S�.�!.��
/�]{��_�ZZwt�U�]U~u��Dq��o���
�	�d���ݝ�O�;B�q���1�����a�S�>$.槾�3� d�!8���u�t�Y��[v
Ju�a�nK(@`,�~�ݐ�N��c��y{��i~w���,	4x�I tb�:��!�wO�ۭ3A�K�k�
T����j��vk�����D:G5d�|
��%��I�j2Tj�z�
+
{Ti5�Ҷ��9�áq�д��p(��	֘V��i�c�_\
�qt�*NV�!
mlm���d�
C��bHBM$��	E�HXI0_L߾����]���x"�����\N.2b,�IXR(��m!N$���
$��V�m�m?�
3�=����^��5�=iۡ=(�a}R����L�G�>�
��P�mcTt}�7e�ps6�B�
�� �]FdE~�y��
+���e�c�
�ƥ�9���
+Y3�
�G@��r�7�j�O�\f�v�;l�!��G�ml$�
�k��

�66H����;5����-Z
�b
��]�9�\�4��Z�F���)�#���R�j�u7)�������v��
D���1�����2h~S��PAmS��0E��n����1���s� �
+(,GB��C�7�d�ajd�JS��K�a<��Oj�u�N�l
L.�a�@ӧ?x?]e�#���
g�w�E�3
����	d���c�
=�K1*�o���p�/i/����Z��? °�3�|��F�8# ��/ ���]����%��K��
"`(SZ�E8���a����tB���iB�
N�r9�.8�{c��"ODs�p!3�
�E�.���?Y�p�1l
��,����<Y�|�P�:hyYW�w�'%a4K���N�C�9xx��Wl�Rbr��d� �E���P�U
�=�	�2x]���+��K��ߎ���q>� �.��5�&)����qP�ͪ����/����uJ�
+endstream
+endobj
+2623 0 obj <<
+/Type /Page
+/Contents 2624 0 R
+/Resources 2622 0 R
+/MediaBox [0 0 612 792]
+/Parent 2595 0 R
+/Annots [ 2614 0 R 2615 0 R 2621 0 R ]
+>> endobj
+2614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [330.574 654.314 342.529 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ex) >>
+>> endobj
+2615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [182.976 642.359 194.932 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (cite.arkode_ex) >>
+>> endobj
+2621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.908 627.55 414.631 638.398]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2625 0 obj <<
+/D [2623 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2622 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F55 1099 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2632 0 obj <<
+/Length 3991      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[w�6~�����{*�����C7M��i�i�f�
Z�m��V���ݳ�}���IN��"�0���
��F����?�.^��(�҄'��ۑI"9�<��FW��籎�ˉ0b|u�Ӎ
�����տ~�������W\0�GlČ����|>]\|�-
����Q
�Ԍ
m��HDRh��G/~
+
��q�=
ɇ�W_����<_��K��uV�6^-�75\��f���3S��ɡ�I�F�
Z|XSI�"�7���:�l��W/�0ٟ��R)G
G*��3����}b��ܶ��=f<�q:���2�[3.*�(s�e��܋z�_L�y�MW���(
�p���խ�([�`^���Aph�k�
���r��X�d��82GV�	3\�A_B�Hie%%~�?��zUzհ7#�ѫ�#�Š�Y�ϧ�SǠ-��i�䛀�t��7xؕ m�����:�l\��h�̱Z��[Д�F�D��&�E)�VN��.�)���������nE$�i:���Z�����tº�� ��p>~(�������I�],��V��(y�jq�"Ʉ�4
+xȧ�������j/�28�N�p����^[��Y��}
�#+
����X���F�i�,P�����t�����p��
���{`{��X���g�u�Z�EV�,P#00�

����t�YN�b���C�ah�����^x�{�5`2��%��D���1
�1, h����珯��)�u�����w��$v}
+�)-(�3e��
#�,��t[i?f��!�Ap�gQ���I�M�����Ԡ�C��œEu�����^�����-��i��I!"��9�^	���K,aڢT�S at S�4�p�g��g̀�Ⴅ�
`�\��w��>l��/�-��F�S�jbEMz�܌Ҿ;�D��ӆȭ
�F(�%���D
�"��}
+
q2�~��K��Y��ӵ�;C�J��lن�;����������
3P��G)I��CH�!
+}�*�8'�(g��O��U]���~��g�Y���)�{�k�h�~�
�>�&�� �1�3
^�8zHm=D�����&��>�98����v7Y=�8Q�j at J�
ȆvR�L�x���:wϐ������?���+�j��y
aJ�(3ur��d�L=��G��)TF����� ���I��
kgt�����>
xd�M�(��m��?c���P����
21
-�8qZG)S_���A����-
;�6�K�aG�+��4��o�V���=���6�ыM���˼j�yU�s|dm�}�r���Iغ��@���~�Y;�|�W��W�F�i\i:^d_�E����!&��r�Dm�:1��k�r����f�a�t�6�eɀ6&��;����	�"����a��
��K�a_�oI׺1�D�,��f"��!�-J��D��e����H/Z��������4�dMz��dM� )�#����bUZ;S4�3Cp��%�4��.#��ī3� ��p������<+�6͂�yͼs� �Szy����z4��{V�@@�~��2�� [...]
��3);�dʢ�MU�$9�z��f4$J$��%L��ad|��E�e��y?څ(=`g����yV�lR����m�l���*g�h0�
*��1gJ%��͉3!�)���*��q�K�Z�/�sF
+2�U�����H�U�
�K�7V&1,�c]�5���
��BȄs�|.�Ad:e�(�3	|�-I
H`��G��[I�59Y^W� ��~�-��u��f��Zg�kStc�+0�-~#�
].�u7�h�)U��>
5
Hl�+�D��&i�1u�:����0�^�(�K�
�n��5�D*��p�s�1�Y
ݲ�	 
�
n*�	ԨA��m
��� uˆ��БD�I�Xr�cS2���v&7�3����
r�ʹ��L?c
"KG��E���W7BH��kh����͋y���﫡�
găni���q��VȪ�h.D�fkg�·����Q�ɑ���Þ"�U����]@:@�
 ��Ͳ�f}�3�k�.7.t:�-\[ƃW0FE��.`�L��V0O�>1LKb�2>�d$�}�vJ�x��i��YPʼnn�b9��;�œV���e^V���?�
,*D�����
�VG"����.���eO�� v�&��1Ĺ��+�~�|���������zɭ]����CM���3_����C����C��q>��wt���e��i��O`8״��֟�}���)�M�ׯ��m;����a���/w�$��m��HS�lfC��� ��9� ]���A���7v��^=ڽ(��;JԤ����A�۝�@�N
��Bm>T�ѧU�
��bVT{���>��	0�W6@��Y΋�/�b0�%ܯK���1%-�U��E6�B, [...]
2`x�Τ�������϶��� z7�����'�	�iN}�]�E�
���������6���PUOS�J��\��6
���*Vן>
�*#&�
����%P1�-�]*`��E_��{�-
�a�-яM��9!������w8c��t�QUܪ�-ߖui)�f�J����f at L�M!pg��5�(�a)�������,�t?&�F���7���+
d�gD�1_<��~p<�
4ǣc7§�D��$"H�zN�+�d4U��
�&�+����O
\�Kw����
���k�0�-����~��Z�kҚY�R5E*x�/Uv��_������L�	!C zљ�d�y4zQ5Hju��E��N�"ze�0�	 z�Aͬ���қ��
���]�-|��A�
��˝f���)�=�6,}�
�c.�Q�6p!��
�W�#�Re\X��iN���
+��CW���7TH�%[��-W
w�|�]����l���Z�5+3nD�Q~����ї=�y9
�R��n��i�$��s�Ղ'
�ˣ�(�wȔ:Te���\�c�LA�q�	�?
+�(�	u��9�j�,�ٍR�S
��(���D�K���Y��	
m��T?krG���h�����
��^�Q����
oW��Gg�x��fyb6�җn�7i�fB�)�����q�۳O���
����G��?�8$�"��������
t��v'����J�I�mtu�X�
�nh�f��k��������$�2����4>���t�!
��I��T��u��g<]qֽ^����ne�py��NW_K���8��&34kw �wd� 5�G�
?�L����A����`H�;�L6*,o�i��A��ݎ��TW��hS��U��=���D"�%��rŸR�s�
+����~�� ��*~�0����&J��9�N�&��������P��
ݚ
��
+�OwTϫ\sDl	+D�5Հ�X����MW�&?ڭ���G���c� �c�
�<|Z>�
L�\�� 2�s�&��Aodt��8�K���
�$]�i���W����a
=�oM���|�*��
�/�/�U��7q��Š�	�`'�1ژ�/v?�H=��=��vF~�޻��W>N���9[�ѣt{6�����s���&�DJ郕�U�w���LW����n�I��SL��v�nr��!�a�lk']��v��X�e�E]���0��^�%��B
+endstream
+endobj
+2631 0 obj <<
+/Type /Page
+/Contents 2632 0 R
+/Resources 2630 0 R
+/MediaBox [0 0 612 792]
+/Parent 2635 0 R
+/Annots [ 2627 0 R 2628 0 R 2629 0 R ]
+>> endobj
+2627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.106 289.163 523.829 300.011]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [350.583 243.28 362.539 251.693]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ida_ex) >>
+>> endobj
+2629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.097 229.174 415.819 240.022]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2633 0 obj <<
+/D [2631 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2634 0 obj <<
+/D [2631 0 R /XYZ 86.4 701.138 null]
+>> endobj
+558 0 obj <<
+/D [2631 0 R /XYZ 86.4 515.543 null]
+>> endobj
+2630 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F8 729 0 R /F48 966 0 R /F55 1099 0 R /F49 967 0 R /F16 717 0 R /F38 773 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2639 0 obj <<
+/Length 3217      
+/Filter /FlateDecode
+>>
+stream
+x��Zے��}߯�[H�a����Ȓ�.[���`�\��E�$h����szf $x���T^H\s�>�}�g���(
}s��ۛ�o�
��j�G�w�DGrd���`����13|2��r;�:���|]��j2�
w�/��C�/޾��������|<�.��o��ݼ����a�x��T�H=�-o~�-
���Q
	���\��H
+q\-F?��t������Ȥ��X$b=ҖE�h������fUQN��+��!����.�6�_c����1�'��n��(/�0�b�.GS,Bk�G�5ff�δ�'q�ΡX3�r���L|R2"b"i$�#���p]���!��UA�cq1��FG����N�4��7�S���
M��l
Pw��o�
!�w��, N�q�U�r5a㍿O}�5 ���|5�_���iU�F
�x�]ͳr���4X�
�7����=�+g�Ңn3�>N�;�F
����Ҥ�pv�,%�م�����&��fpRW\'A��*����,���)��:�1�8�Mdw
+�0�bi�\�Y��U^��>,��K�1'ߓ�W�m�E��½��t�
�3�`�خ�>4�H�F���#6/�d#�p ��͋Xv��Q$�W
���̨G�"��i����&��̂D�D��YP�BȌ�ᴳ�
2s͜�^4�����X2��	!�bb�
+��z����L �k�i��c��i
�2n�D#�m#�*
��h;����M�θ��΂�Q22z�22z�kd��,?kd	x�9od&�bM`]�'�h
7�+Ɠ�F`�j��
x�!+�ѳ/���z���.��)
�0�+�+B�X�X�1WE��<7Y�
��
}��0�,����g�8��Q)��2g�@�/�5�?
�T
橆p8�MD���4Te�|:��/���\DR��$��B���Q��vT��2�‹e�,�g�.�3�|�<4%�҅g�Ԫف���.d�����Y��ٴ������O����Fv�yS��,c��R��̥А��F'R��Z ���P
�
�r�H�{�Bp.~�=� �0,	
(����
a�H�S�ޣDs\�[]i%�����=k��dV�t~L��6�;�wG�B�!Y:"G¤5'�(b�
9�"�},�9
�,4�A��C��7�2a�:T#̨G�SxD���y,�y}����M
݈rq�`�?�ac1�m��A=����]�{�7,��`|�a��+:�
����p]��+b3Uh�� f��yz�:�M	����L��A�&S6��Q�XD�^W�hS+p�j^l�^s����v�:_�ث6�x�?ϭ(y���O@��#�	����H��d?�&!��]�1)�
��v�Q,wm��b6�6�vV,I^5��I�� �F_|��=9�K%ed3pU{UN�H���X�r�� qh�Q�ig؋<�>�����:=(X���)r�q^yE��,3�lh��[�th�"�&4٧�Lg�K���czJ:��y�G��R�p��=�VH*w��O=��VK;��,��*ڀ��Ġ+�݄���.E�#�w�,�: [...]
,�BWf�e֗���RB'�/ɋ|�3ɞ�^�)6+ G6�4B��.Nd zڗ`
��q~�(m�ec�Tx
3k����I�qG�{W���u����K>����~j^M]W�V_n�}۷\d(6�S�R�'�٢ֲm�8n{��iշ�	�b��'g
+�R{�mNx���,�i���}�z]6��(t�4M�|��ϯ�J����d��?�����
}`�h���:��c
`N`EC�lM�b�
����&��v���U��M�w S��
1w�0we��v�`$��a(5�����S�Xx3\U`��#֘.�I�*���OֱO25sE���!\
��Z5|�Ȏr?f�Ƴ^�cy�F_��n�9�syKǧ(�L�A��{7�0k�t��q{�
jMK�Mq�v��缝@���l������"NԞ�o�ݡ�V0�Q�cz��n>���]yPm��F�S�8K7ً OZ��K��Pz�7��D6Y��P�)�MM�7��|�W����p2�:{ �zO��b Y����w��7���
�sy�$b��
ț�O�2�3�w�ѳ<[͞'�tIw��y-ZaۡL=�wsWs����

����B��u� fAN��
Փ��f�(-_��2ds�/������Wn��K��E�AaQ����(�CDZ���E�0�hơ`	bڗ�iœ陈���{e�u���Dtgz�7�d�iy�]���j<�����
2���?���io�N����E}�l
_���m
�pF'����a���6U���H=���
��
�l9 ��=�d��R�l�ٺ:��e�����9F�W���U����3x/W���M �\�N�Iih�L��J�$���ԕd�4ܖ�e|�y��x�4��'�o�voCY>l4����wgh�I�������bI��C�Ծa(:���~%�l��-��ݴMd&�%�Z�h���������d�Q›��,n�S��
N�k�y�u��d��c/Gn
C}��?�}fw��6U��:K�/Z�M�Ձ�dl����QI��:-����ǰ+���
Ũ��
齃)�.?~W=@�s�:���k��q\A%���>Z�
L6��/���ߓ\��$��yo��ֶ1�
+\�dž@�T#'��]cD���]�A�vX�z"
BI�;��D�O������tW�w-)h;�<$�p��Lp�!��>�4۔`osN#�۳pE��w;�w�2_<�~]��U�*%BqR����*̡�f�`�{z�ek�D�4Lo����E���
^x��P�]�o�����G��!uwn4���$���S -9�p�X
���m'��G�>v����J3(�J"��Z�5'�+��b�'�mn����
�p{�P����O(}��׋�Rۨ�~��v at c�.��
0 Pw,��T�����d��B���y���sv���
�m���H*��kX�;�I�O]ã�O"� ;`@�$k;��2iOTbnk���TJ9~�;i�OVg]���c�2|�pSo�+B��[Y�nk���b��/{Q/
+endstream
+endobj
+2638 0 obj <<
+/Type /Page
+/Contents 2639 0 R
+/Resources 2637 0 R
+/MediaBox [0 0 612 792]
+/Parent 2635 0 R
+>> endobj
+2640 0 obj <<
+/D [2638 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2641 0 obj <<
+/D [2638 0 R /XYZ 86.4 341.138 null]
+>> endobj
+562 0 obj <<
+/D [2638 0 R /XYZ 86.4 158.545 null]
+>> endobj
+2637 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F14 1030 0 R /F8 729 0 R /F16 717 0 R /F49 967 0 R /F38 773 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2644 0 obj <<
+/Length 1819      
+/Filter /FlateDecode
+>>
+stream
+x�͛Ms�6���<�m�Dfrp
'3�6Mk�.I��$�H�+�ɯdP�M�Y�|	���|v �N��Q���1蝾�*2�(����(UDD��8���c��>����烿��'"����W�|u�gF0
S�O>��.��z�']�$*�{?'�����M�V��#�
ap4�.{��߹$�$A'iB	"R����秄�
��N߈4x�:�
�̓|U>�/匤RVv��Ou���M��.��(�Ę�.��!)(H2I!@��8<���b~U��ڧo��&���+yy�B���<+-W�E<�O�C
_�/��읰4��n�q>.��{*[L܅���-�~�{�7'R��l:�ޛ� ��Xc߷�i
+�����הH%P؃)�d3{I�>Tt����2��iJ
U{z ����y��� �ҟl[�����N߃���DK
� SL5���w�P��K�$t	u�ڃSq
&�N6Sx/Qu/Qk/Q��h�%j��܋y/��qƈ�J��n���8pn��5`֤)�׀)��f�A��^*��e�-��̗;���ʭ<�*�
I��W0oHc0g��dC�3M8�G�IC��@%
����CUS
^�J�4>��
+ ��*f!�-A/N��o���@�4�Wy�\UOW<���Z����p�X�l2���*%���
A�z��lq���G;�I�A��)��|C��P�8�s�ȳ���|ǔQ�6S��l��4{�
,I���f��0��~__{��R�)Q	Ea�D҂��g*vb5j����h��h�C
LIC�i!HzZ�b'Z����Z	�Q&=֒N[��uE�*삊�N�w(I�H
LA0P	�hЍ�
�P��Q{P����P�piP@�)��1
+Cѓ
+;��
R#7�<b\	C`�F���h^�aHz`�bb|'���s"(,s9*0%y
T�
U����ڳ�?��*��΀�4k^�cHzX�b'X����&��Iř]p�6�

C���)v�%����ч-��]%
+���I�C�
;k^��s�aph�)f�g���V�؅���O�#�9��'՗W
b`J�-�!Hzb�b'b���3�lp�����R�yC��
+���m`}Jd����
/˜�$�ٺg0�H[l�cH:f5�.��=���0; 4M	��\������
Z����ֱ�D��D�
L1���*ϋ��K�8%<e[��o��ٺ�%,w�����e����i�m�&�̬����zV>�g�%I�ኝ����lZZS��f���e�8��,&Q2E��[(�`{�sn���j��Gg��㣈k3IQ��7�
E
+���S���� ����ӛ
�b�~�&ӛ�jZ,��?�]�j��O]c9A�:ܰG
#	E�Ԥ0I[�
`H:t5���8��-��z�1�-+�����Z�U�(w��#>#��)���e��Q�ؑ�-���-�i�##�} 
��d�~P �%ڢ: A�3
+;2�e���|��?.[����b-�����
O�ב��D��F�hjK�r=@m����2�N$�)���Cѣ
+�g�U˹��k�ˬѪ�]����]ʪ��A����H�`	�s	�
N} XҲyA�a
��g��#
2�I���l2ylյU�Ȩ5�-���<�M͡"O���)�Aߴ�@t C���ܽ
+���a��|f@�u
�M0N
+��jYT���qY��&�[K�x���
>
��$"=��'9�
�����X
�낾.���ݽ/��`�����ῇq[LN�)�Y6��(�-���Իz� �XG�|P�wM'�y�W�
�k
�����_P��
+endstream
+endobj
+2643 0 obj <<
+/Type /Page
+/Contents 2644 0 R
+/Resources 2642 0 R
+/MediaBox [0 0 612 792]
+/Parent 2635 0 R
+>> endobj
+2645 0 obj <<
+/D [2643 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2642 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2650 0 obj <<
+/Length 3506      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�6��W�(W��
dk�yd��$���
&9�ls�"5����o7 �d�R�rm՞Dp7���p6��e�o��qy��
W3K�bjvy33���f�(Ng��ه9����1����kM��uu~����7���;
~�z���_�誆_6_nKw����go/�>�Q`��h�H#�l�:��G6[�����pkf����LpK<��_�~>��³��m�f�p!f�RB�
+{�=��/���W����?�ҵ��륜#��˵|jɜPn�%�%N�Q.��;K�1�RP`�N�R`9�x�[�j��r~�n<]h�i�	���
�������3S|~���-6u�����ϙ���iR��r�گ�֨Q-�`�=�,��eO��'_��!������כ�ryd�~��#;����fDS;��� ,4%�4� JL
��FL�����!o?>���~�#X09���5+���Ŋ)Pl�8w
x�@���(���S�� 
+|
�[ ��KP��%Vƭ�pޡ��|��m���exp�[�
+m��x	���xB��I0��>��p� 1|
���Ȫ�9{7�i��i0��:��� s����
��e 6:�=�P7��c���f:��`

v#�
�VE��� ��/�%��D+~
+
")��A
��e����o�ٞ��
+�X��t
5Ÿ��Ϟ���q��v�{�~�:CnVO��H �y9���4 �S�
H��>����zs�zO�j�(�^�x�ӣ��A��ڄ
���X1���+>˨�1ǫ��j���H+�шW�s�d|j��v�}��0���v�v���6Ր�u �\��/j'|��A�>K�0�1h ���A��e�����w�}��# pyn !j7A~(�z�{����������n73$�ɧ��/��A-��e�Ҙ#*XQ�N�%�e.�P$>>���7��Dᠶ/S۝v�5>mt�fӗS'@D�O�N��凍�,�:'
1��y[o
+W%
O1�����V��X�b�g�J��O
>
jl�͢qhTd��]ˇ�_(͠t+���Z
��)L�0A�\���vj*��;%է�'��I�l�
+�(!�@��]�J��~p�P7
J-�7�j���6�n[�����9�����
+_~z����r̀
���^�w(.�e�ױ����F�����샟�	��6~����+�\!�*�Eh _ht��3|���v��E5�����/�f;8T���cw�c�%�B�ۻ�x>!:�fIiF��;Z
X?��K�>�
+�DK6��:_�?z��: ��*����@J����S{D���dt~�.�
o����w�x=��Xa��ٍ�҆	 �v�7
�`D��Z�eZI�d0��q�`��u�]ajci Xv^�U��m
r�G��z��kȏa�*/��"4+�m�׍����� c��T�
R�Cb��yS�����*n]@5D.Y�H^:U���F�m

[��~$�񈣃����)٭K�d�����T�(�rpDz7���\����e�Z�[Q��VU�������:�K_p�s�o+���6az�P5��u���H���`
+�����p��� u��1Ӧ|��
N$=VzR�g���u�g�@�uU
��/6��a� @  �{%��{&����P�Ç;�q�����?$�y�`�
��D��j��j1��6<)�?���tMJ
[U#�.˔�9��%β
�uӹ�	Q���
�
+/A�!�N����"/Y���o	2��*�(��p����doWM����>�JRP��1���m��*=�A	�.8?�พHas�H��Z��D�"��ׄ���
!%Yf�
�F'Y��G��p9���r�P,Q����h�۵k��rQ��xO.DDp+�0��/��2��E��PgT�C��ޔn,:L���
O��T����DQ�L��]�
˸�N���?�
>!�/��?<0���>a�:~Y��OU���jNW��a�5ȱ��jpT���cRZ(�DI�1���8�Qk�2�Am���#)���ћz�^&7�o7N����E^����.��}�	CCN ���1ĸ�&_�0�=�2%�3�#�wql* ���$��J�3�xm�E2mfD��CA����[�%ez^��� 
+��w���2hB���FO�a��"�eB
�fDIX<���g
�0ˉ�ʓR�
�xo�
{�
UB��o��J�b��3(q���b�w��������
�n�)O�o
$f�"�)��%��;�u�Op1n

�j(\��`EUxݩ����L*����#��\��z[�_��7P��*�A����1��=S�;�O�1��Z���y�a�@S��I��4�Mq���03����
�4�t
.X�f�Nw����< 	zHsgx8O��S�UxiG��wȂ
U~�1��
��z`*A|�fZ���1�=��ʹ&�OJg�
��
++b�C�Cب��I,��5J%9f�
3̩㜽ҹ`
J�ݚz�o�
�p��h�3O��S�Ii)��	k��2;��
�L�>4�Ӷh\
��.
ٗ�1�;�|�CҤ�C>�J�`[
\O���m�m�:A+}�l����!��8��|��Rv��A�����	�[�Ŝe��D����=-���­7�������q[���a�&�Ё����+�*�X��9�
H0k=)m�	�Ӄ�����]{�E�n]x\���R��A,0�g�qZhD��
�����v��2$��
f�]ulcPr�ېB
��T�{Ћ|ۭ�_��<�J:���i?�wJ�4b���.�NI7!�ˉ�N�d'�1����}[��g��d�
��JlPAYk��
',;\!3ɏ�P;�+��-�|�&���?�m��Sڸ�:����0>:.��Buh�T��ӑ�]0N�F��x�܊a}�.��E<�(�Ż�U9���K�>��nkp��
�H��h�FxUL6�M�GX���1��mL at 0�x����r&���.o�?]x
~0�KF!(
��
��4��8 �	,���6�	r��sqM^�b����>ix�y�m���bx����Nl��t��3�ɑ�N����v��%�
+
����Q�?r�
��"^˪�������F��%�ʣ�"�v�
��SQ�_�E���r���P�n\���yof	{�
b�m�
�x�L}�����Z��egT+���&���
"��H���ǎ���cs�
s҉�4a�'�H%�
N�o��DZ
�3�U�hRE��88z$Q�ȫ���{
�� 
X����lpjɺRI͌p��=���D�ҐR�ܒ�;��	AH��,�v�!T��������ҟ���������,�����g]����)Q��\eO�CΟBՒH�N�~�
�[�l��K?���TS�_,�$��g�[Z��������z�g���R�}-�,2��F� g
�?s#
����>_֑��#3�B���.uȎ�r�E��³pɼ�3\�N�����K�I^���$��86��b{H�0z��M��Ȭ-�ݱ�>�h*W���D�
���ᶏ
+endstream
+endobj
+2649 0 obj <<
+/Type /Page
+/Contents 2650 0 R
+/Resources 2648 0 R
+/MediaBox [0 0 612 792]
+/Parent 2635 0 R
+/Annots [ 2646 0 R 2647 0 R ]
+>> endobj
+2646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.281 418.282 142.004 429.131]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.3) >>
+>> endobj
+2647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [256.613 179.179 271.335 190.027]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2651 0 obj <<
+/D [2649 0 R /XYZ 86.4 726.045 null]
+>> endobj
+566 0 obj <<
+/D [2649 0 R /XYZ 86.4 459.032 null]
+>> endobj
+2648 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R /F38 773 0 R /F16 717 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2654 0 obj <<
+/Length 2647      
+/Filter /FlateDecode
+>>
+stream
+x��]Ms7��W�(
���co^�I%�8ٕj��T�H�T%�6%g��~{�iCB�f[>�bI���{�i`@�/>,�⇓^�|�������vq�~�-�
'�J,�W�?O
�g�ʫ�w�ۋ�_���O�~�}��<>���i�����L��/�������˷Wg�KeO�3g]�t����Ӊ�
�B �a^����ɟ��
+~�ӂ3��?����V�I������_'|��𿻚|R���i�0�3h���� ����U
+jT�8;�Z��|���O�n����������v���r�W��0���_����^�MA2k
��#�Hy�Y����i��1gC��@���j x��|��_cͣv
+���va�*:�K
�^2�]��1�v}��Ʋ � �7L(=
"��� ˤ1=���������1�<	��
�Kq��� }7
)�%:f��sŌ�3����e
+S�3�+u
Ae��*:l_��J�?����Ò����pT�Ax�0��R�3L��!꠰��w��u�M�?�id��!갪LM���
�	Q+itP���q�q�>�j
�-.��)x̔�¨ònrU
�k�?����
+��ƾ<*� ��]|J�F��b��ͼg�WÜ�T�XP�\�, at 7����+���Er��
0o
�W���'��
�d����Ee(��x5��~X?w�����
;N%�
+��o�W
�
J̻V�6P��aX�`أa��$
�-���-A����
�-E���3`�2�+&��"���Q"��p�������/KSkX��]�3�$M�sfL�]�o
�QάU�&|b9&��3�x2gF�
�VJ�ɺz�(��F0�u�M��+4	F4	
+�D��i%Y��ES!���sDOQ�Yah�"� ,��c�˗=Ei&���i.H��owJ�]�����/W�Ym�UR꒫L�̸J������FWi���R�DW��
+]��]����Ҡ�U*���B�;u-,�V�`�J���	�ڿh+�C�
��p�)�",D�S�G��:��v�,��̲����P�ɜ�`�_P0P�
�?#Ꟃ��op/D�WBީty���
n
+Oӿ���!��e�;�hZ��l�$���Eɘ����̺��fQ2�ɜ�`�P0� (h �h 
4��B4�ʽ
��w�]Wލ��
+�A��^�LhQ߫�8��lU������ma�bn�Yͧ��O�<�<	c�<	c�<	c�<5O�4O�4L�H姌!j�kXu�L�du/?�d��..xG�
P�1e�*`���ms�����<��<gvn�v��+�e�,�L��L�@9���ɝ
VkG������P�w�������:'�
��D{!`������'`Q��؋̓x��qV�&��RvW����Ug�ef����Q�J�h/
�
+�#ʟ��r�`��	��&�T&�E�&~�7.�ꏦ�8�KŜ0�0�h��Rx�F���w������CA�3��
�)wi�o@U_�Dѷ�
�;�(�#ZP�
j�h)�)3�B���B�@Ki�>�t��/:!��<dy���'�f�AΜ���ゴ-�
F������`?�JͺO�[����;!@�=�
��P+
큐5��|�h�j}>�W�B6T�+
�%K����0a\ܩ�����⌓$�0TnƔ�o�ͪ��f���>�3��y�ѡ�7�C
Nt�'��Wh��
4
+:#���ēMJJX�J�G�X���� .
+��a<�]���
(͘�����`3+�ZDJ[��ɜ�h�w��Z�h-8�"j�h�^�E0�EP0�"(h�T�RT+�wmT+�����b�8o�
�
QvW����[ʙ�fM"%.�DθcQ�DSi���R�DSi���R�DSi���Yj�hB-8�5K�3�V����Ɖ&ׂ7Qj�h��93~�a��'7�:;i��M
�+d}n�8#D��)����<�l�s+�ZbJ[����G�,��1X	c�
+Z	c�<	c�0#U������
��h"a�=�����L�B�#������gn�9	�hK�̙�p��qJ�捒�䍒�`��	Q�
�<%O�H�*
���t
+֢��9��}�P��j�
�_��f�9��%LI
��e�f�����[nV�)wI��93�o�w�}-o�=%o�=uO����`��)�{�W�J��ԅ�
����7%`J#�����i���cw�y.�
�^lF�
T1U9����
Fm,���F0��)�b
+����
+P[�Ik�{�qOW��'o�MT�Rv�,��n�-
��Yl�ѝ2�
�S)3�'@��	�`
+x>D�/�K�@�·Hu'�
3,Y�ĵ�U`F���
qN�&�wJ���}x��wf�Y���%�6��	UN�dΌ�[��Z�h���#Z�=l���Ҁ7����B�^E"`��
��C�!��6�~�/���aʇ&�~	c���c��f֙5����?�)3~B�@?�`�?P0�Q�
�/�K�H��9�P���;	mV0���Y�Y˧������r[8�0�ڌ,)(˙]��ȥ-(��Q�FS0P��(c
+ʘ��2&`�
+�ĥ��/��mT�%Ӿ�
��8�e������ui~z��*&a
*������TL�{P1	cP1UL�TL�TL�HhäW�/�
��_~t
+endstream
+endobj
+2653 0 obj <<
+/Type /Page
+/Contents 2654 0 R
+/Resources 2652 0 R
+/MediaBox [0 0 612 792]
+/Parent 2635 0 R
+>> endobj
+2655 0 obj <<
+/D [2653 0 R /XYZ 86.4 726.045 null]
+>> endobj
+947 0 obj <<
+/D [2653 0 R /XYZ 208.742 550.853 null]
+>> endobj
+2652 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F41 1446 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2658 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+2657 0 obj <<
+/Type /Page
+/Contents 2658 0 R
+/Resources 2656 0 R
+/MediaBox [0 0 612 792]
+/Parent 2635 0 R
+>> endobj
+2659 0 obj <<
+/D [2657 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2656 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+2664 0 obj <<
+/Length 3191      
+/Filter /FlateDecode
+>>
+stream
+xڭ�r���]_��@U��p8O�k7�z���Ƀ���Ȃ��C�\��tO�
���s�t��݊67���W�~sw�׷*��(�ci6w�M�z
�k���n�s��!���V%&H������0I�g�ͭ��T(:�C�\+<����HǾ� B��
ߕu�3�M���� ��$�JS��}�D������Mf���b#�4bL�?͂mQ_�$�ۼ�C"��2:4��a{h�x-e����4T2q;���L-.tM	��P�Ϸp�VeQ��R�P�
���!�p�2�N �#�����;s��L��=�W_�74�o��m_6uZn�fx)7�B������Jyk?t�+�/v4{(Z^g�,c�3B�S&�e�?��H��fN
F��JW����3�P����F0���u0āz�O�P�
޾-�3�	�)���Z�\ߊ��AY��/�00x�N��$�l��C� �Mg��r���'�p�����
+���
r�'�J�Jx�,�&� �dqjF������+"��yU��"t,�M�L�wV��m	��-S��F�
��'�n8��ER`3H�1��Pz��1���ky5�cѡwt��%uS�-�.�6�e^Өq��ۦޕ�� �B�5 ������D;��qj�k�
��"�|@������r�?��^P�%�v�k��1�1�/(*�N�,�I���5�p���Ť:�gF
7qu�zZ΁���+�&ycN�CW��h����iUS�%�
�EMS�kZn�	f�w��o���/����k��������6ힴzG
R�!�ds�R�}���
B{3�;?w���
?~ć�"�C-��ء�I	�-�8x:�[D��C�.᪢����qCLa���� <z��PQ�y�|*n��{�g��0

ċqF��;SgH�}�X
���'t2�$�9���i�Kn���n�E��V�R�5
,�>�\i�Zf
v};l����{��WS���_�<`|��H�2�x��S�9^`�m�d8���]�v%XZx�(��+C)���x���f�B�*K7Ov�q�B�P��͇�R�;�Q�o--(0E,�LJ*<�f$�9L�FI$�����9�0����0�
+�EH�P(��L9���N;Q��ކ��wW8��Pj��o����8��6:�3��ܹ[(��/Ħ�v�
>8����
M}�x�f�(<���
򞮘�S��s��6�LAG�^[&��'w3&�F�/
=�D�탵gx��l�s'�*2�t�$���|���
l h+�Q�z�&^���N^�\B�^|9�e*] ���k�gQ���O�<Sa���"(5�/������KD�X�1��*֐#g
".�������|_��T
)�L��M_8{�Z�_6[e����\�8q���$�Ʃ1��

^���i�?�i��1��~5�նb��|�d['ش�oC�;$0�G��ȁ����b�d�:=1ex9GW�4�]�% ]0�x"u�{�e��� 9G��sD
+GǜB���y�5��B\�\lbA!�D��N��pN�6{��N�*�d�
��6�{���͊�I�$�8Lyx��$Y�mZ/֘�Q�*sn
)�?����&��a�
gE���D�����޽[�(�䴊���
�>aq�L+H� ����͢pz`M�8YD|^��6��ؤ��)�,�p�/�%q�_wL[ё��8}�\��
d�N��\�m1X �3�vt4���PU�������0�(�	�i��๲���a:��S
>�鉕��{��(#
!���ӛ1���S�_�q���H�κa�l�l�b���U$eU��
�<�o�~��ͪA�c�ڀ�OeW��e
H�Qh[bR�Ki�ȺT���<���
+u�΋��%���gDN�f��c�$
��fsC%"w
�mYo�*K�:��"ޟ�TM��%�����AMiCj|���:Ek]����\�I�Y�7�p )��~LK�Yj��aXX�5Ð%`RDA�c�E�s����t�v�:�%!�M$S{�1
�

���� �T欺�������T
�i���2U5(�������y(R�8Jl�_�҈�҈�b���Јd�Hp��`�A�j_.�];�9O6&\�khB��*{_`���ߩz��y��K
��>���i��E� ��&L-�M\
�kk]\����)*��?��b�X���l;G��i��%�|�����8~���X z��i6��Ϙ�xf`߁��]�
lw�>���!�N���N��A���?�Z%"�c���wO�;<tt�,\��o��5:�'~m��?DA��c=��'
��{�mk
���F�`�z�S=�I&Hѐޕ7�#�ƻQ`@Ӌ0ls+�R������Q���j�M{��-��a'�
�XccW�pY����@_|�`\۲�l�.�G�e����dnw���	
�R7~�V�>�>
���6�g�
��Ы����Ɵ<�N�B���
U{��Q<d6���Gc$ӉSC�$3~��L����I��L
i���
���`��
z� $�mq,��~���b'2pw����o�k�P!�P�KR�؜丮� �K����`��;�I�����f<Z��ښ�b��Ι4�}^.=�Ԧ�(v�7���T����hl#/�#uWv=�g�`�����Q�;0�<
#���$��ƺ���j��a<iCa�DG�+�2�
� Y;���
+�� 4�K#��9�`D���\�
>���L� 0_ﰬ�9���V��	9��l���u�1�u��A]�Z2�9c �����0f;��_��$v]I�*�?L����
-��Vî�~��F��(�,���Wg�J�"�����$��4�AWѭ��ñq�BcV2`y�X�0�S�`�8�[t9�
+^��Gb�r�BN�L�>�e��$Ԅ2�8c'ǛP'�J���H���X�w
3\j�����_���,ҝ�KR�����,'�8�8؆dCk�P��b�O��@펓.���$�#��N����liGR�����Ր��r�7XoJl��lJ*�Ĩ�pw
�u�
G���wG:�co��=�	LBP�y&N6�8F����}��Ķ�ݖ�+CLI׮����>����sǡ
͙>����qXV\HPqf�lsfN��JhWԲߜ
+	5s���иy�[�,L�BdN*`x�I�(�ɇ�b��Z�]���R�>�����Av�3������X�k�
+endstream
+endobj
+2663 0 obj <<
+/Type /Page
+/Contents 2664 0 R
+/Resources 2662 0 R
+/MediaBox [0 0 612 792]
+/Parent 2666 0 R
+/Annots [ 2660 0 R 2661 0 R ]
+>> endobj
+2660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [100.98 360.486 123.451 372.441]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+2661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.472 61.606 476.943 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.5) >>
+>> endobj
+2665 0 obj <<
+/D [2663 0 R /XYZ 86.4 726.045 null]
+>> endobj
+570 0 obj <<
+/D [2663 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2662 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R /F36 728 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2670 0 obj <<
+/Length 3647      
+/Filter /FlateDecode
+>>
+stream
+x��ZY��~�_�G�kE�˩x�8Y��r���~�H�ڒ(���N~}� x�slv��"�`�����lu��V��x����oT�*�"�������^YY���w��/���r-3#E�cS_*�������r��J��u�9���Z$�����l���޽�!��u�}
�2ٞv����ݷw�� f�������|��_��[��›oWY�
+��#��J�"��ڭ�^��"
���H��Y��
�/]����?^/�I�k�7E�a���<2��7z<]��\kX���������L8���W�.,R��ȡ���v���r��
l��j繯�_��m�mS��	�)��>��ӥH����
+{�RM	S4܎|T]�wA�eX�EfR�,4DZ��c���ma�B'��
qDb���h8��E�7�/�L`���
R6刔{���{�������r��H��M��d›�=
�
]�|�w�[6[�=6�	5l螟�-�AG[r~�R�T����js{ο�Sa���3�DŽ�l�����
+�2&-�
�kf�[9�N���F��.P备H]v~�=t>6��$���&"P��5�T	ڮl:2f|3^�`;�b8W8�s�U�K�\�Mun
3^�_�z�%��S�)h%M%�a���:[Wg.5E�
k8��t�r��¢ҥ��K,��=zQ��
+[pB�~��m��L��|��¤�E�|�Z���
���o��iV��~���H
Me��A����jA�
+��L
^�kh��/
t��C&h晏�έ��jע;�*ywKN�8:�1��G"#ħrעg�T�Р3
�d���T�
~�#���hx��
��(Q�i#g��a�!�*�v�ֺ��o�,e�*�
+ғ�� �l�[~\pb��"ʗM�n<1*�ͣ��1%� *)����(��3�w�B�Ԋ�+Z���2$80,t
�`!�d��-M��mAjB(�����V�v�izf�a�� �O~s�hQ����H�5�v�b:9{��jbz�D�f�� I�[��[q�7M�:����
��Nxë�����㆞��ƀ	!P	=�u����6�),״a�0m�������O�����$W0o�8�`�����t�֠\��y} �UW���?~ϻ��<Rt-7���0"�Y��V�>��\�ߦģ�iPs
�c����l[B� ��SZ�4[�Bg� K�zx
�k��M!�$O�2��9	�\fųМK��q1{ a+4z��ǃ�=[<�A��� 
+.�j�^f-M�jk�:z[�,Q�d��~ �S�3F�����y5���:���
�I|�
�����P�
�+
a��
��͸��@BVb8S�AP�
�v��a�e��3�9�����m9�%˺�����<�[`{�aX��`�2N��T�p�ȃ���5�3����q�@���{��1qa5S
[���얼@���qN
I3ao�ւ��F��ܺ䇺��@�
^g�`e|�
/(FH���fw����gb_\�VZ�ʰd=[z_VK�8
�O�U�,�r�<�E
����#����@��
wo�Ѐt��I����U}j���J~�D�؅
��rY����s�ȁ�턌��J�k3�`���2h5���KJ���ջnhϓ3�+�0�(���g
+��9��b�)R��$�j��+@�ڬ�t$�W������q#M]��|�f&�:u,GFh4
 (i����S�N�1�be>�J "��I
+���c�8��+RfD�ب4
-��2)�
e ����
c�5���M-L�4Wr�&\�����8Ho=
%�
�p���@R:Tv����*H�P=
�]
+��cg.ӂ0$�d���*��)�-&Po\�Zg��
��L�)�`���Xv.���!��@
���Z���D��y�O���Z
:Gc��6 ���� �_*VH�ޝć����K
{
*6	�2��L�	nE��0p-`oEP�OMH�Z?��e-s�Il��ǔԳh �E�'
�TɌ
��#P�#�P�p�ER�Tp�m �x=�}���X��A(aN ���B
T��dN��9x�i>���w��v�Z�UBI����‹�!5��ׇ�st�m�m���3�@�� 
��*�L��hۄ1C�9PDzm�]B���P���",Yq GB�<�v
��ͅ�as	q[R�����+�']�4}�;*��f� "�(G
H?d
��e
��
+�b�^��.� ���i ��a��
ՒE�a{jBeD
�
���b��@�� K�?Om�&�
+O՛ө��2�M�Ԣ�jnN�
ߌ<��-y/a
̯@���O�^"�S�4�q�����ඬ�8���
ɫ�+��H�sȌ3/��?|��Z<Q��>��2��.�Ύ6+�Y��������>b
��k�,K�Z��Z�J�
Ǭ�����GF���k͸����������N�2��tY���/
1TR���‘���QϮG�#�7���BO��$P��k��K�j^�
+Nyp�Y)(��1���VvH\��\���f�U��v����-q����i�*�
��q7��؇q���
�}@��sO�V	�Ċb.����r�؏_v.9�������V)2`޾ l�
��
+�
�2R�O���IP��H{����{6!C�����BJ�l��~	�Bb)�L��7
�K\���`���a^P ����$�.=U�Rʎ�[蜦��<�����U]�|y�;>�}sj~��?峹�]β�E�w8������(
9i45�/�
X%�?΋|�
��@� /X�u�x��dB��K��N�Q	�ʒ��Rc9� R
��GBBn��,
�~xC�\)�f�߃�p:��lOW\��w��D=�� �
�T�0��*���Ҏ��+\��@f��S�5"�	��0I{�<*2r�v\��
b|V$`~���e�0V�d���$d�H(-��
+�瓩<��
�:�ׄSu��
r�z�Y��?8�վ
���wsr�������ën�‚=d��5�	�z�`S�ECM2�fÖh�al�W�,p�x.����~A7�"
1�[�P��@��?S|�����	.�'4�����oE��˧>>w����_��g�P���L�]�_�aw��)���cɞr
+����Q̧8]�ȇh*��S�HB�/�0�"L�)���[N�0L�
`
1M�
�gd���A΅^H��� ���j -�=WtA�nO�㮢<IO��І�ɱfS�6ۥV��ȘT�&F�IfvW�=��5��N����t�o�Gh���[�p4�3Cq��rS_Ut��
��X�X��
�6�/Y�}ĚA
�)&���w��p�Tb���b�7)U���/��vr�
�EUp�����C��b~��P�-�|��e���wI�>��9�״/ꍔ�
�<�RU���5(9}��t����m�{�Av�4�u
.�6�
�-�J�2�
Ұ�W�
EsR`��e1��"�|��@N�g��
:�I@]�"��J�6�	*����o`z]�� p�o�qh����5t|��0�D���!J�,���<�� 
�����a��E�^-d,���[T��o�g��b��
+��,(�VB���
A�
W�c
���钣�gs�m�k3܄�g`aዳP��

+�U�uO�6� �F���[<��BT�/�ħ�
+endstream
+endobj
+2669 0 obj <<
+/Type /Page
+/Contents 2670 0 R
+/Resources 2668 0 R
+/MediaBox [0 0 612 792]
+/Parent 2666 0 R
+/Annots [ 2667 0 R ]
+>> endobj
+2667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.419 143.051 263.141 155.006]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2671 0 obj <<
+/D [2669 0 R /XYZ 86.4 726.045 null]
+>> endobj
+574 0 obj <<
+/D [2669 0 R /XYZ 86.4 496.786 null]
+>> endobj
+2672 0 obj <<
+/D [2669 0 R /XYZ 86.4 440.521 null]
+>> endobj
+578 0 obj <<
+/D [2669 0 R /XYZ 86.4 296.992 null]
+>> endobj
+2673 0 obj <<
+/D [2669 0 R /XYZ 86.4 239.897 null]
+>> endobj
+2668 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F38 773 0 R /F11 1019 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2677 0 obj <<
+/Length 3722      
+/Filter /FlateDecode
+>>
+stream
+x��Z[�۶~�_��R9+�� ��:���'qR{��$\	�e#�
+I�z��;�x��Z�ޞ>�`0���g7�x���o�.�|-�,c�zv������ӒϮV�_����B�2�Pm��RD_U�ޗ˶����WogJ����ɰ����ş
z���*=[n/~�=�����Y�d���ݸ�LɌ	hmf.�y��fʕa at m�3θ�����"�/_��Ќ���6�m�;6
%%�`~T����"*|ʨ�Zj,��Ʈ�c����\����-�<��
%����.�iLt�o��*7~x�PϺ��m9&j��߀�m �{#l�ĿH$�P���,�X���ۢ�����(����_�ݮ�vu�����)�
����z��!�[
+����6_(
Go�04пG��8߇9h� ��|Y]y���8��Jb��į!osP7)�[��
�W]#ɇ��N�o%��k�L܍�y"�W[����$��5}��}C�eT���S���ۿ���_��jM϶�Zb�j�0g/A�Aư�ph$��z�<_�7�-�F����<��L��*�w�Fɓ��\�t����)���˴�Kg�c+Ӹq‘J� �[�
M�`Kz�
��#�Cd�|�ֳ����0�0&P�E"a�ݪ 	Ҏ�~G�Jy
�B�X3
�����-n�]q �N����G��c&��]�M�ȖUy�΋�	�)�R��r�nyIϢ�9x��o ��
�Ik����
\K2z��ٔ{@��حO���Ig���u ���EyzZ�O��9
�4�[d��i �r0����{�7z�0:�
o�A��Y~BK�> ,꺿-�8���ʐ��
L���
+f�֪�  ���N��%�G�� v�
��p�yk7;j���W�hY�,q���0���q��<�1��p��k��#�k����Sq�})�X�$�%Iz�����UCM�nH�eOֶ�=U��jѝ�Y�i=o�MS�f���1������':�7{ې}����� �
�i�:�M`U�l�9e�ؒ=
ê�	���t,>V�����#�b�	��8�S�Le�Yx�i)�<_�|����_}x�:��
+Į�w�R�~C蕺!���
+��~sA+Uz�;�z<\[��8��m�U{Kֆm�oU7-)��13Ҍ�)��(
v�"�n���;�pUSWG
�����`뺣a�֓�wҀ6b
q�v��+�}C�y�ZW�G;���I��2��8�]�\����޷�-t-FZEx�6�!�Ʈ�g�,jA�A^�?�II
޳XP2���=�T�N���4�
)�c�߼�v��;��9x�Ē1˷�֓0!�+�
+��I�ƋB7�^�r �*��gS
S0�
�|d�HU5Gm
���yg��U�
B��?XV0,[�x����*V��]|��ԛ�~����>��v�����
�As�)F>s�O�HK�h�
u
�I�7xy�|��cc !(řw�$�k����#7bl���KZA�@BA:�*~�
+,U��C���R����jJX
�F�
cW|j̷��R
v-��}��e����
b�f_��e�pv�C{��s��aj�_�C9���OnJ�
"��{��CZ� "�
P����
�}�
kG\�����c���d�� R��_�[��
�=�{ �:y�s9
+\��0�7$�
�=n.��,�a��c�{,1�PJx班��3o��fo��c�Dv�����U��!3�����
6i3�m���=B6�&d�
�	w���7�C"�S�v:
�H�G��î���٩�hI�w��խ~&f8+��ñv��y�N� �E�����r8��2PHsn�Dw��%N������QO�6�W�Aic�y�
cWJS� �T
+g��uP�Ͷ�K�)sՂ%ig�ݦ�ŠK/d>L�Y��%�P+똠7� !Yڗ��F�3�= =7 �0;qɞUN�U��n0��e�t�s���Ol|& }Rc��/�͟��Ӷ>�jj2Y�K|m�D���[�����pT_xH(�>�e�HQ��ƕ6�Bs�d_Ba�E��խ�ٟ(�[ �����SHD3&�$��E�"I�
W�~5�q1r.��)(� J�mT׈��v�S��q
=��6���n����]n���~�C��v+t���>���/��0�BHl��O��Cg���
�]�IEoP4�I� ��	��;�B�x����6���G��w&	`
�!G��%
+3\�`ie��E�9�&h��
+�aMeXn>0Ʉ�3I��c��*�ϭ�F�֕���U0W�M�T�;��H*�ј������g��?�\��!kq=�
6��kP�8�*�(���9�
�gQ"��E��}ŧ���$)8?�(��Jm���=
�

G�z���O
�h�p�8�<����^��]�ἅt�.0k���i�?_�RR3՟پ;�$�HS�2tu�U'�JA�9RBx]��b�'�w5���*������;�4L��S����Pq�"��z_��lc�	4�~��S��y9X��c������y9탡*��4l��@�v��˥m��
��JR���u
�_W
��B�
+�Vt�J��k t:nw%�!�b1'M�eI�	Ҙ��7y�{h�{h���` 0�Ӯ��
/
L�X�XM�-�{(�1(���4����
�r�b��uW-޵��샩������~�3,�W�G����e�`^\1���D�Ν����
	� �t���D���������r�x�Y��G�l]My�
R*���
3�g�����S�q�R�B�l:�H�KqN'IO��т�Z?�^i�Lj��W�Z��

�
إ��|��$���?z���%����o��y�-��7eK�
��/HX�kw\�L]�&c��n"i�Y!0��i�����Kb>���v�xKn��s��
��� 
J�ibLp!�N��B��^�� �(3��wS�I�=��]��d�y�IhC��n�I}<��O�*��	���g"�R(��3Y�LP��>�-��Y�-< qD~����
9��$����1@`��3 3�]0��=���f�������
�д�6ͨ���a)�(� >$΢��3�LD�ݸS� ���z"�a���\R��
�};U�1�����Ԥ
�3P[�xw����y *B���mw�P� @��mc
X�jR
�U�O�2<F �}�'�*KA+6���r��D��?����>*FP�>����
�_��O��a�������֨,&zAoVԭ$ֶ
!����O�r
�M�ڈ"&�rDp`R�xmg0���q1��� ��daqb��G��	:@� �wї �d�f�GbQ*�w�c�u�
}A�Gw��2�PўT[��T�O���I����
���u��,β�JO�_�[F�G�t�s�b�#v�.�N#$qz��r�m N)��gy%��RI� [...]
+�OA�}c���pؾ�E
rNbyxap
ݝ>vUL[�� �� TSFG
+endstream
+endobj
+2676 0 obj <<
+/Type /Page
+/Contents 2677 0 R
+/Resources 2675 0 R
+/MediaBox [0 0 612 792]
+/Parent 2666 0 R
+/Annots [ 2674 0 R ]
+>> endobj
+2674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.008 117.004 496.73 128.959]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2678 0 obj <<
+/D [2676 0 R /XYZ 86.4 726.045 null]
+>> endobj
+582 0 obj <<
+/D [2676 0 R /XYZ 86.4 238.79 null]
+>> endobj
+2679 0 obj <<
+/D [2676 0 R /XYZ 86.4 185.265 null]
+>> endobj
+2675 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R /F10 1116 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2683 0 obj <<
+/Length 1820      
+/Filter /FlateDecode
+>>
+stream
+xڽXͳ�6���N�I֗�m���޴���(�g
;���}w%ٱx��)���~�vW4�F4z���f��y�������fED�yJT¢�u�.f�.W�J���M�Lx��X�v�JL?-;�TY�\�������f����.?��E���_
���m�n^.��,>.C#�3����Ż4Z��ˈ�$5ѝ��G"I	�e�v�ۂe�X)s��JaZy��6���VKn���q~���b|�b$�v���ӥ�Lb��hyM����
�;q'�pK%�������S9%J�^��+'I��,�y���]̵���
�q����ޚh�U�S�us�o>@H��.�	�wכ�W�=M�`� UDQ�_�������o*�`
+IOG�
0�sŅ!ܘh��–;r{�f� &M�l�i���i��e��o����`5
ۼ��`a6֏+B� ��b��\@�+!D|�sn���u�9
��~�̪�^H�
����L�O��HJ1�
+R�+RJ¿����*rj�;
&�y@�D��X���
�
���4`�.+��߳��m����y�wb{2rh�ƞN_:�KN�
��@B#ER
�
$)4��HE��҈�LG#�%,~������ �4� &o^,��=1
,�6hR����W)�h{�
l��k�O�-��hp!0l��� �՝E��:F
��*�-�����y�?
���)�Z�1���Z��ދK��V�z֩�
S��ίl�����Šs�	�4[[�a������	������֭_A�0sޣi��]��0�z�3R�}�CP��̚/�ǛI�������]$w�z� ��ѐ "��X��r��5�
+�	�_�
@��,��	��M3���^��Y4C��#�얄= B7�r	����\5�I p�h|�\uT�D�yg�{'G�
�����"�l-z4爄�Co�̓ʯ����&�\8��L
�Zi��	&�hoR>��3obD
+�v��W
�z-!�ˣ=Cԕ��U�K�
'L��4�3=�$T�|s��(*��]},�]ʄJ��3�sp��n�Z!�ITG��p�1.�
76�O@����9����";2=_��]��!��v-��<v�;�(�
+��d��U���a
���9�
��$P����c�۶�E�[��<�>o

.��b�zN�r7���j��|"ό���Jbh�
����� �w���+���d]g������.��x�L=袡r\�yҬ�Gu�����������BԂ؇��D�d&,!��(:b�4.|N�6����
��#� `���� pB���71.�W���e���6��_E`y��BvP�C��� zӣc�ֻ?��ߵ}O����r�f�h�!�
H]n;��0�
+���|~>�V��x`��	or���!� �x�
+��@�>;$�����4�;S�l4e)a\���+�
*y���gr!�4���i��+�z:������B��3 ���J�?7�s
��� 
���
)B!�&*��<��C�X
+�;KC�
+�|}l„�^,��<͊�,�N�P5��Rע~(�CłLr�	 ���*`~�� �\��^�qܿ
��e�l.�f4L���8��?ـM̟'��׬] �����ùo�d>�|K`p

�RLN
s�� �
�#��
G�GO8����M[�l�o6m���!��8�3`���04<������
�G�pͨ�O`ޭ��Mx��Uuw�P��fl�_��^�x���3?��c���䱦b����j7�j�M
}���p$<'�P�q�/m�_�[G
�o$2X�Is�{�p�{���J�IJ��6�ʏ�d����oõ�
+endstream
+endobj
+2682 0 obj <<
+/Type /Page
+/Contents 2683 0 R
+/Resources 2681 0 R
+/MediaBox [0 0 612 792]
+/Parent 2666 0 R
+/Annots [ 2680 0 R ]
+>> endobj
+2680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [481.384 659.793 496.106 671.748]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+2684 0 obj <<
+/D [2682 0 R /XYZ 86.4 726.045 null]
+>> endobj
+586 0 obj <<
+/D [2682 0 R /XYZ 86.4 530.487 null]
+>> endobj
+2685 0 obj <<
+/D [2682 0 R /XYZ 86.4 477.069 null]
+>> endobj
+2681 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F11 1019 0 R /F10 1116 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2693 0 obj <<
+/Length 2358      
+/Filter /FlateDecode
+>>
+stream
+xڽY[s�6~���#5� ��Ӧ�d�M;��}J� K��
%*$�K��
H�-�3I
lB����p w
�xy%�����/t�H�Ȳ�.�oy&�"S��f����m���w�Y���I�|w�
�1��N��X�B�J�a_�?���W�.��˛����*�]a;\���<���=�SI�
;�ֵ�����������
Ӓ/
+Qdi)�J�2��3.�y�ݗ-����%��v�T�@���|Z�yx�&�림Y�Ʈ�g �-.E&p8��k��	�O�:�
�vmO����[ c
+H�=+h
6a3��*;�Q'
(G2��a�)}՞
�(ኢ�����9��?ݗ,
R�J煰�.VJ����	T��-~�9rI�!G.�J�2��8ѷ<�m �ν_� �/�M�]h���	S���mC�e�d�,	%t7Ӊ�z�?�nݕu���x̟В"�3�+�02}\z�~�D"5)['m���w����u"H�ʈ˜8?Z��} r��G�h�l��
*�V�VJ�T�'��
+Y
\E��5w~W���$Y��P�M�u�eU��5K�67�1ֈ̹~{�͂�ΐ������hoPܝm.O�{r�{-�hả�7e�`�ƨ�
�jK����Z���}S�ң[��ۺ�F>
���b:��hG�?��0p����Q� �2�g�d�i<z`��3jC�� 8��wM�&��
������6<��d.t1R�/��O�PV��o���IG��4i׾
+��=��E��}%d3�-��W�)��o�qߏ�K��a���JXs��$ P�
,z�8�
&�N�m������(
bK1�l|�ㄮ9��C�>�Yܴ���緃�ϙ��O�%s��H,�_Oy#������+�rw��'��y�Q,2G�m"� IT��d&�1
���I�S*w��j��
����T	��nvm8��N�Ժ�t�[�fS�
�ȑ3l�G�s|�M�ζ&ۆ�>�j��a]���[�̛�pw�?♃��~$�/q)��ŀ~������8R�$"��H��U�|�ȶ���c�i<
�&���X�:��WS����=�<�8Q�
�ӹC)j�F�t�Q��ߤ9������s��	DQ�"�uGH�kg
Z�)��^�4~�E�C�6�C� �!� ����o5�9��
MR�@n&�Xm@
5���ͳi�<�|��+?h�F�g�$�B3JNC'PP��#�ݨ��K�%���M��[��[�����xG�!�
����a.%�6��M����lׇ���vD���r��ἰ�2 at 0�@^?���H�S$o���'�j���A鸆4��ü�[OQ
o��G��v<Rv���$M�P [...]
+����t�;���D��
I\$w�M�
�
;j�8�BS:N����
k�(yI
铵�rNh ��H��բ���q�
��)��!ğ
+�=
-ǀ��<��z
F�%*�\F�&�7��n�� J�d�yR�`���u/&3܈�̍�^����71
�x:�},\��L
'�7 at n�.@��	n�.�NrzQ��%Æc�����������,�f}7#)%L�������_���M�*B�,#��� \i�M�#��0gS��}(�N��~������%�R�(nD`n�^`-�J��by�ok��i�&T����@���!�v���̄��Iű�߆��X\��0�w��-) S4��f�׵q�y�{#��pѴ?��-3�
� R�9f�I�E6&�c�~���Շ+S��NX
_	7{�/�۫���b��, D��M�.�PcK�xs�;�LL0t�o�x���r�Y�<G�od�U�}I@�ue�
r�/�
+䨈%���sf�fF�4�O(� �I��1�yO����3s�a2����/����#���Vٔ�C��+��H{tÞ|�tZd*�����!�"����c]m�
 @�o
=|�-�+ {f�
+?�`1��*��|R1|����7�h��:��{�)RZ5N��w���^�殊\X�
+LAԓ��N�Zf��I�n;�I�/L#鲿�������[X���xqd5�Pg���Ie�^�bI��8�b%}��S]�<t�W ���<��Rh=>M�
�'�
����V�	�r��[Y�Lr��/OOny:�I!W$
�t����a��
=�
��75�����l�2=
���n�Y����V< pd[����k㗸�����Pf�o�
+�mz^�eG5�]�Or��
�>��&!� �B00 ��yHĺj���C�"���2���
������
+endstream
+endobj
+2692 0 obj <<
+/Type /Page
+/Contents 2693 0 R
+/Resources 2691 0 R
+/MediaBox [0 0 612 792]
+/Parent 2666 0 R
+/Annots [ 2686 0 R 2687 0 R 2688 0 R 2689 0 R 2690 0 R ]
+>> endobj
+2686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [434.163 261.844 441.137 270.257]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+2687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [445.232 261.844 457.188 270.257]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+2688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [516.855 242.069 523.829 250.482]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+2689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [110.31 230.114 122.265 238.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+2690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [126.361 230.114 138.316 238.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+2694 0 obj <<
+/D [2692 0 R /XYZ 86.4 726.045 null]
+>> endobj
+590 0 obj <<
+/D [2692 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2691 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R /F49 967 0 R /F14 1030 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2697 0 obj <<
+/Length 2638      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o�8~ϯ0�/�`͊wj��6�nm�ۤ� ���"3������`���CR�d˱�x�4/	-Q�<����F������?q5JH��]ߎ�"b�YB�����׈6�P���څ��b<�G�j�
��6��ë��<�,����r���ʅ]�U�?��O����]����lz}�����#��D#�(����[<����G1�}q��#� U����uw53ۊ����W�v��Vy��Q
ݖ�o��©�y���̆
�ʦ+;�?R�PDu>_�{ZU阙�!|�.B�z�V�2��z9��bL������:��������u�?Md�t
��^��R�Ƞ�
��7<�_���
+���ӕ�����%/
+�6���A<�Ƶs�Ԣ�.<C���O�d��	����
[V6+�
�تn�ΚQW�͜�Ĭ����|��u��^9�9�@†h����'ڍci�����5L'-j߱B��n�h�4��
���*����nh+n�
����T4�B���'�;nFT.�/'�q��
AF!B�&�B�R&�k�'�2:��r�y���օ�
Od
G��˫��Ճ��W��0J

�x�JD���(\ �pݲ��|q�����Ɛ��5�O��9�i��!�����7^¼�4�o`�<t*J�Y�d8L�a��60Eb�d8dz^����g]�%�2�3��w�-5���L��<4a���[8BRz@@|�!@6�S]�
+�24��{�$��MwV��L�ަ3bp�\������'0m��r�04f���1ˈ��y�/�b=�/�g�1$�d5̎H����Ǽ�]����J�TRS�c��Z�	��l����R�	�('!�s��� �.�7����"�1C!�W�	M8D�	T`2&Bn���:�WDm�sHJI����
�-�I���~�����OS��
�

�)4` 5���@ �����D�E�<����=�
��w^�}�K
8O&6&!�
��r]e�1Ps��@��LԷZ��E]e����$I�M�_�
��>�5��>4B��,�
`�|Z0���,{*
�@\��)4�
�_���0�0�>�m;
z����m�Ī]�o�j�2
L�]�R7����;��A�ݧ;�ݙP��"<�$<�@w�N�(J3��	�	Th0�����X�IX38�V�
+e�8Di����	4h�NO���wN�@�wz
+��w��w��2��Ӥ�����|�*�X�U�aY�������P "����Ow�r��>���"�`*Z9.����?��{����.����d�{��W�gX=�|���1Ŋ)��%�ϻ�DQ�H�öL8a�Q���c�\�
+E	-w�h+�{p���T��~
K,�zo0B�m��F�%��Da}�-���~�����}&���D���e����&gɼqz���օ��r�+�{aZ�{  ��<�+��l� p�)����Y`�ݗ��+5�p�Ʈ��}�����:R&���
b��\�<����@f��ARٴ@~q
	
א��;�ьv��ߏ��<�ڗIY����;2X�+��pV����p>��[G
���
�&�|�@�&���2 at R䳖�y�D�,$���O��M��W�'��&���Ϗ�7W.���8O���	�铘	$�:
C\]\�}�L�
��Rw��VRO�����&��^n�_������!�A!��)Ff(B���C�ڿ�
"�=��"��KDʹ���ic���W�@B�_7g��55�ChAac�6�zG��k`unk!ճVq�z�$�B0~��Q&T�3I`M��1�N/�/��
���	�"����q߿��G'��( �o4߭x
,]1d5=L�����=�a��`0f�Dim��A{����ny�;�
\�������@�͞�̭��N��
�mvz-���!���qܔea�Ű8�� �z�g�AAp�6��[I�4�;X
▧||��������F_�sgj�aV}���F
�������Eq��Y��J�(ILS��[B��N�>mA;�����3W�4\��
1�'μCqC%8ô
p���塹�
)tWҫ_�ڭ��U��o>�K^
���%��j���B[v����ԇ�eď��Q�_�}�]v�0/0Ծ�/R�������	���a�=��S���d��w�0^�a���4k���ʹ��Cº���/;�
�?x�p.��������j�4c���f_�
7��x�)kkVH��pl.��eZ�+�
8�Ti�we��
�߁G��9 �ZY0��\�q�d͍X֍ho�l�ތ9u�ݖ���)���j�^
ŋBI'``�sp�%`�[|�'}�b�.x+1��_�CIIL���’+�1��d�w�

[�5Q5����I� 
͖��ne�5��ٴ��N��Zg�u,��q��ՒE�����
+ 0皘��o1'EW�
���n.��
=���=��y�O
]2��,[?�(��C{*�Ր�t��s�
�ޭ�&��I.�@}=�v���C$�:#Q�[��|z���C7��݀]ھ��x�r�B�@�b�Ϗ:_ݳ8�g��
�-�r�~����X��ng5(�,�a����nޟ/C��	,�N
+endstream
+endobj
+2696 0 obj <<
+/Type /Page
+/Contents 2697 0 R
+/Resources 2695 0 R
+/MediaBox [0 0 612 792]
+/Parent 2666 0 R
+>> endobj
+2698 0 obj <<
+/D [2696 0 R /XYZ 86.4 726.045 null]
+>> endobj
+594 0 obj <<
+/D [2696 0 R /XYZ 86.4 650.819 null]
+>> endobj
+598 0 obj <<
+/D [2696 0 R /XYZ 86.4 244.583 null]
+>> endobj
+2695 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F49 967 0 R /F38 773 0 R /F14 1030 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2703 0 obj <<
+/Length 3101      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s��~ׯ�#Y����&�q�v&�X������$�$���e����gq%�R��/�r�=����'�>����˳��);q�Yi'�7��2=��cV���rr5uL��*V�˻z���4���*���*��u67BL߼����&�%=���7���&E�f�.9{{y��� "�DT�k;Y�Ϯ>����2�L�x��[O�rL�h5�p��3�>D�?�u������`� r���p �w�}pe�q,�_X��mx�����z�/c�s\:�K�@N�t�~�
L��hZ�οq���rK��7=Y�ٖ�nQn$EX-���M�Z�3��&Ĕ˥�^�eZ����
��c��uR�<�dn#Ҙ̅`�yj�Ra�����a�b��
ެ��a�}FiqU=�I�%��ɑ@��װA4M����
��yŨ���˹���@��,���-g�}H+\���mjdĸs5�SYfu}�/����|OQ���
+1�^p����Pq��^G;;
+kXd�J����1�QG5u�q��+F�%x�b)�a�Yѻ�G�$��L�0��ڻ�����Ĵ�����Z��D;t(��H1��)Z�vפ�=R�j��
��V&J�W�l=�CҸ
1�4Yf�[�bx�-�7t�4�i KNՖQm
+`�ۛi&uK��
���k��Wäj)�u1�EJw��L�d�%���G�mP@%�FO˜�&���[T�|�
��"@]����:pr
��Շ+�dU>=
�6LؚD�"K��_�rCJ�"�S��v(�D�q�t1h�涼�1j(^����_Џ��H<��_o�C���
�
��X
+`�֞���0�첢��z�{����l|��t�Z}?��h6��
.
��]�߁���q�}������}�D�Ij�
���
�+I�y
��|~��h|@��k�2
X�c`���}0cj�~�
��,@���J��z�_L�	
+N�f�n��(�4��u0Nf>ȃ���C�n=����
l�k���
-
7�⟮����U�i
�b����:*pp�1TV��6
)��������w�
Zo��I�iYsw���4�� �~�����wF��Ŷ�?
�mSY?~�m
W '�`���l���/B���kdm�h�q�NGQHz�>�wQČr�
�_�^���&�!��z
� �m|� �Y+ڀ�� x.>%I�E'�
@;
 :��q��G�։�?���#<!�;@2@���s�-3�J��
AϺ#�'�9�!hxػ�t�
`�\Dpr���]��
s(k�hDu���O�"������
[������Pf[I��d��,�`�Q���G>k6���l���8�1EL}2����AP\T�,��mH>������?�%���Ӹ~�UB�/��H�!痌k�U1<�! ��n�L�ՓOi��B��w��
�&)}��Od�
C	`���
+�q\�t8�tn�� r�b�
O-DbT
�3a-��Y=ш�
�jaD�e�u
�x�i0
%&0���,GK���
+q�T!N/Uh��C�	�
+\HUEA_�۷�^�
+I�<�P��s
+#e���
+�W�Cḙ��w\�G]��S\�x�ĴB���5��nL�93��1h�����]�����=f����p� @>�|U��
�Q[����%��!��t�N,�

�.^*"�
S��D��߈EB�Z9*0!��KH�c��$����Jg��{
<� 05���}����v΀�W~%���X�m���b��HnѳZ�7�ʁ�[z1��5>�6G�t�0$��I�&#ˢ��6��d�X
Ot�6�#Hx4�#��T�a�m�s"g�H�t��CF��B��E�+�MJ
���x_��&a�H�l��h�&Y�\��!S��_�t#y�s��ڂƯ]�Xx���~�"K6��U^�����s��kS�x��ލ
�`DO�ʝO�?Ϩ�3Ɇi�#���t^;�TG�4�^g��	5�!���rL�sq~�W��݅�8_
���\5����v��$�E���
uK9}H�2KV�O晛�Fݢl��
���&60E
 "�0���K���D�3~)L
�O1�n����Nv���
���.����
�n���.ERV]MJ�`�z��	�h�j;
ᰶ�C
6f��Cj��L�E
4����v��F���]����\�r��7�|�
��]��3��H�
�hj���
Y5]_3D�����*�ouJ��Nmw̅S�ǮkL#U@޴�|�-����^,T{�UdT,�y����xH)��
+_��:v�o�j at 7��!L܄���	4����t�O�؀�

�
t���i��1��ࡳ��ףy�Hq8gp^��c֒nw�'�OU^�i�V/�8Ѵ�*���4�VV-N���-R�" Foj��{9&�h�
{ ������k0�mK��x�y��#�CT��ԕɦ"^�S��y
�=U�J�I��@�s„��n�]��mTq*�� U�>�v�l�3{�[‡��,��h�@V�A��/C���������.tzu��	�`u/���Ɯ�6��7ap���\��;ژ�c؈f�Q'���l����u���	߽���z9TUa�w�w��
W�
����.������������;}���������Ba
�L�T���ze�Dӹ0HU$��
� 9x��8�=$\*���
; �GMaȚ$��E\� ��t�G�R�V �5� ��Aw����ڂi�Hm��R�-���#�8�H>X�QL6�6$&��xx�^�=�B��JQ��> [...]
+endstream
+endobj
+2702 0 obj <<
+/Type /Page
+/Contents 2703 0 R
+/Resources 2701 0 R
+/MediaBox [0 0 612 792]
+/Parent 2705 0 R
+/Annots [ 2699 0 R ]
+>> endobj
+2699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.087 452.478 464.81 464.433]
+/Subtype /Link
+/A << /S /GoTo /D (figure.9.1) >>
+>> endobj
+2704 0 obj <<
+/D [2702 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2701 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2708 0 obj <<
+/Length 834       
+/Filter /FlateDecode
+>>
+stream
+xڍU�r�:��+�������ˊ��Tq3�����LL���![{�CX��n
�N�)�"�n��Urq-4��j��j��&��-Z��'̌L3&s)�Mٖ}Q��0
JgH��jˢ��]�#
�q��k���qז�s�C�T�q���Wo^��M���&�V���Af�)E���I>}�h
���a
���Ia	�F�ɇ�ƛM�ƤD�B
w`�J�Q4��m�vŅ�7M��:��0�2��
Az.�)��j´
T^W�]�X�sl	�'͔`��*�}ф�n��!�
c��8�t}0�0��\�)ƾ�y��r��0���ky�"7�X�!��z��C�q�`D>EH;W�u�/A
+N�S�s0C�Q���}���qv��\N��c�<�`�(;G|��/�0J��'0�1�5
�.e��D�y
c�
+�fx�f��Y��z�e���k��Ƈ����]�%�.?層��x��>��z���u�@E�B:,�D�|:��-P"�����)�%RP�
+l�x�RT�/�x����ᓯS�
+ at W2x�w�;��a6WE0E�V�V徫wM����r��b��Q��
()�+��1�k\"w����k�wM��4
�E�Y����V�H�t�GA��©A�܇��g��B
+
+��GR=��\����;PB
RQ,��.8�9B
���<k�:�_�\Ŋ�˶�%�IC�=��]�z����ߔ���)�fA��U6۾|�
+*��R�1 �b�k�0z����?���v������q�
�>�����;�k
���R��f2/��7����ϯ�O�W���n��2a9a<�\鰡r��ķ��>;����9��
+endstream
+endobj
+2707 0 obj <<
+/Type /Page
+/Contents 2708 0 R
+/Resources 2706 0 R
+/MediaBox [0 0 612 792]
+/Parent 2705 0 R
+>> endobj
+2700 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bandmat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 2710 0 R
+/BBox [0 0 473 537]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 2711 0 R
+>>/Font << /R8 2712 0 R>>
+>>
+/Length 2713 0 R
+/Filter /FlateDecode
+>>
+stream
+x��Z�n
���W�.�^������@��D�
I
����F�0����U��]5�f�!%��w��3��3�O�9�������}�2��l��m��_���l��S����O&�>�t���R Jw� �P�
+Q �\�C�Eq :致P��o���8c�8ca� 	�� 8�B8�ę�ƙ
�I�DA���8�8��*�I�$�4'�b��i��3N�Nt��N�Zg��W����TVEze�G<*�rk4��0�(M�䀡G
+C�'�j���.���l�xD8ɮ@�/ae����2�#��xe�\�����X�L�Ger\��W��.L�g<Ϝb21��R��qs��S˩�5�C3���l���`�ZO��)�|�bc���
����]u�5��H��\z]�!����S'޻��o�y@P�[E���M��.��A�ԮV�ApFu��;���`8	�H�x%ϴA��E^Dm�����5�ED����I��H�j�Q�0�E̼�H;;��."�+V��l ((�
,�;�Ti���r��u�n+f�E׶�p����ĩ'��J�F2⡺(��<$���(�"ϼ !&2�v�i-L5�1ҪJ	p�
��w[���Ƒ8�CM�bAN�pb][h����(�"	ϼ�Y+ײ�z-�2�2�b-����H%�εl�^��ϵL�X��� �Z�TWlFϳA��Yt�Iс�at����p"ș��,:p��\���.���C*��^wR�L 
+{.��B1���f��ic&���]�f���
�:
3T�4����l����O�:��y�ux�~�B�B@�Ck0��%S|&���<1E%R�Q����Lʬ��f�����.7���ø��
�7�ۅ���
�|H$?�\ nD�4�
\@KN��F��鈏s�ɜ�
�
�-A �Yg��>҈,gj�2O�Q�b�e��,���
am���
?U��d��Q�W���M�d�;��A�Z�������5$��!��

�vY;��
+Ӡ�n�
{G�(��!V����hT��ULGtl����U��5�fOi��e+� $� ]t3n0MN��t�+ɶT��Ȧ��p��7i�]>j��
���]_���B|�!(|�� ]L
� /�
r�ZM��)��.4�jH����ɦBqv�q4u ����
�T�E0B��LQ��h�����R�ME��� t15Ы-��Yn�p�
����{ƴ�'���iu�V!;�<
�-*V2Wm5++T�����Š��Kk�+k^�u�;�:�9whs��VfW�֯0[�Œw�K�Ya��n��J_Q�M��lm�� �X�'��F�����k�;H��s��
ĉ~�b
����s冰���U��׸]�y�K(
+���������c��N����p~��

��"X�_�dY�`�`��f9U5.a����K3�%�������̫�,���fNKbf�K��
��(Ғ�5QK��4
��������fI������۷/�t��}��m	›�j����v��������a���o��������{�~{�S�y�~{}����p}�j�W��}}w�����
�\�Y7փ�[�;�~}c�sW�&���4d[ߞ�[ߘ
5_��P�qq�c�ط�� �
�`��/.b~�A�5 %����n�ߜǑRߏ��������%�m��zh|a��Oh��8�����߽��o����9�c޺�}4��{�uS��0�m|���m�f����ڱ���B�����B{�p�����+tG)3�+��e�5f�O\�I�Ѱ��C�L����xP�,��$��Ǝ‰�WY�8Ӏ�SH��P,'��]8�V�$Npt(I��wr���d'��jړa�A8�p8�+���4��1� 	��ᝠ�j��|�0�t�k��5N�'H'9 �te�4E�4�q�$p���/'����a��n�����pZ˫$��
 �SHqsY�W����@8�ѡ�Ud�Z�O���4iog-�32� I��i甮L���X��L;Hgf�9e����a҇�� _���5�D��Q��"��;ؙBJ��2M.
��

%��B��@�k�硧sNg	n�,>+��{���I��)�7q��qF˵�U8�AP��I��t>m�b:ˤ�M{�L;Hgf�G
+)��z��ګ��ګ��uu>m�c:�_���p�X�K4Hgw��d�6eN���	f�k�4qvo�6E�x:�8L1��M�A���{�
�*�������ƙ,�JV�L���$pF���I��Y�z���A�$�2hW7ѹ��;�
3�Y��|�L�������'
�^��t
���P�k6e��?�V�����/�
+oU/�y�/~b`U
+endstream
+endobj
+2710 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160529-07'00')
+/ModDate (D:20151010160529-07'00')
+/Title (bandmat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+2711 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+2712 0 obj
+<<
+/BaseFont /QDOSHK#2BTimes-Roman
+/FontDescriptor 2714 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 0 333 333 0 564 250 564 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 667 0 0 0 0 0 0 0 0 0 0 889 722 0 0 0 0 0 0 0 0 0 0 0 0 333 0 333 0 0 0 444 0 0 500 444 0 0 0 278 278 0 278 778 500 0 500 0 0 389 278 500 0 0 0 500 444]
+/Encoding 2715 0 R
+/Subtype /Type1
+>>
+endobj
+2713 0 obj
+2333
+endobj
+2714 0 obj
+<<
+/Type /FontDescriptor
+/FontName /QDOSHK#2BTimes-Roman
+/FontBBox [ -70 -218 863 683]
+/Flags 4
+/Ascent 683
+/CapHeight 683
+/Descent -218
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/B/M/N/a/bracketleft/bracketright/comma/d/e/i/j/l/m/minus/n/one/p/parenleft/parenright/plus/s/space/t/u/y/z/zero)
+/FontFile3 2716 0 R
+>>
+endobj
+2715 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus]
+>>
+endobj
+2716 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2797
+>>
+stream
+x�m�yTSW
�_
�}P�-i�%Im뾠���.�S+RE@-�DHH� �IX�r!����"�"HQi�(��im�Z�E��N��i=��2ϙg���9��޻��~������{����`FKd���QrYr��}
��A-]@-c�ř�_�;Xˈ�&�BȄ�~-K��	F��EmO��g&���w���lI�X)\ut�ڵ�~��i۶m���F�{D9��L�
+�!O$�+d�L�k�pz�T*9)L���
arj�(շ,6Y*��H%
+�<O�*|�psh���mk�D���#|�0R�M!���J���� ���2w+r���ꃚ�H�$]*�Z�:a���b9�6�q��&b�Xb7Ol ���Fb�q�8HD
Ÿ�$��D ��x�x�&��	?BD�eh�8 ��/����^e��W�K�߃c���G�'+I������9����ޤʂ���ōP�{��f�;�&��6�R/�g����xE�6���B�� !��UWY_��#r�G��)�YPσٚ��
+R�j��9��.D�.VU����gўYf��[]��B�ˡ�`
�QF}\)�Cb7����� ���ąֺ>H^l��`��1ߤT7��*��I�?&^�uB�9�g��������� �Fج�

����2?z�Nz�w
��V�Ys��"���`+#9�*�
�o�
��z.�	8�>'�u*��j�t�8�[H����=4��m�»���w܇p�<���_��<��䥞Tf�S��C2^���?:����cs�L'l~=6q����e��&5��z����wfQ�\�젖q
;t@��n:.�x�h<TBrVh�p�i;-�Z�!�6���v�yH���z	=���5G�c_�kL����5;�=W�o_܁Ǐ�~<j��D�L�
j���|���ig
�
��-EKYFvyyaqEE)�@��XErkrsmYK�GŅ�=� A0�>�ߘ���
y�D�jU��:
+�
WI-u��N�����/o��o,��,mZ��GS�^��{{P����
���;w�k�j�ds?�1MR���.d�gC8P
��|��lgEe	������$�NJЖ����b�bXf)�,'9����g��'������>��6/[cʅ�S���,�<��M�7MEy�W����f�>�K#�s�kf�0֎
�Ox3��i���:<F� �f�ިȕ� ���^�iD_�z0QV��'H\�O�}>t����?:�
+�[�%�`��z^u�t5j�Z�
|�k��!�
T�
W�/0� �,��� N��u�I͇ �~W|�ғ����i�UTU�厊h';{[�]�̌�G�ᠦ(I�����t�1�8=6�29�縎V5�,�-u����5Jͅy9zya
$���Q�
�k#�h��K��Yj�à�4m�D��m(ԖV��
��n
PuI}�
��`��>j%�8EN�6k4��+U�e]�Ҡ�u��L�����Xh5U�������������7'����
�:Wo����������@�1����
+�)w��a��f���5��U�zx��誽�rݮ&�q�Y�V���,
�bev���� _ԫ�J�u��
��
�BR+�Ϳ˪�����0�W���f:V�5hxz��0���F��j��
�p ������N����W�t�B�K�I�@t1:�P�,=4q��IVPW��2H�љD}����t@�ӂK5���Ô"��@ԫ�=I�0
/���ق\���/8 �����lS&$â����]<
+����S����/�(#�j�s��U﬷
�hB*0\V_�.��
i� ���\J��;T�QX_t�89p���R�qQ�42_�~�2{dP�P7aGR���3�����ʧI4�.��ԝ�+<�r
���"���
��F��V�~�"���=��[{�hN�v�k
I�<�O�<h��{�^���7N%q��h���VguY
����&
+��p�q�O
Ln����	?#
*�qJ�\ު��nk��R�e
+h�8������O��
�P'���CJ�ᐚޙ*���8!�͡I�?
��lc~�I_��:h�kZ�mz��Na�&7��}���]�\��%λ�}B7���f/�[ͮ��Y��u��~�`��a��7�A���	? �A���Fdڧ�嫙Ʊl�17�"|���LWe�O3O;�	\�;RA��v�X���%� ������6�8 ɱV�^�x�h���R�A�E�o��
+��5�C�j�"L��h
.*:\LO��A�Uf54��<�P@��7�e
�᫯J:c`"���"�;��Ʃh���Pe���aL�1ф7��+A�u�Ğ-��C�Z��K#	�s'3����|@q'��.������F׍��Ϧ�
4�3
�
Rpg�-�����9�0�˽=�szh��7?C��s�
��(e"��ho�v���Nq���7kw���C�"R
!K
?L'�
��::��e�I
���N�6�[�����}N{|
��ma�>	
�a �
Y�Y.��Gr��A
+$��r��Ϧ�ģ�5��
�$}�����0
����g��(%|NKF�j��n�T�9IV;��%5�%E�S1����^�����Fi�k8-{�5h�[�To���\�?�
>�h�	�~b";�5&kN�a�,���{d(�r��
G�>F$D
I�
���!��,������(Q�uk�?Q*_@�9��e��ߢ	K��
�7CYzPWUk�Y��6'$[
�
���)���B}Y�/��`�E�$��{�X���{
<�S��)p!A�����
+endstream
+endobj
+2709 0 obj <<
+/D [2707 0 R /XYZ 86.4 726.045 null]
+>> endobj
+971 0 obj <<
+/D [2707 0 R /XYZ 139.066 218.119 null]
+>> endobj
+2706 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F11 1019 0 R /F14 1030 0 R >>
+/XObject << /Im7 2700 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2719 0 obj <<
+/Length 3716      
+/Filter /FlateDecode
+>>
+stream
+x��[ے�}�W�xa�#'�R"9U.[���'���vּlfH����07C�j)U*O���@��8�} ��������߽��[eg9˭��w�3g��e2gV�ٻ���y��յrj�=����d�ů�/���yyum���~���7�k�Y�����յ��™�_�}��ͻ�y! ���SÜ�����Ͽ��_��q�r7���gZ�L�i5��ſ_�� �L�#�Q�\0��nL^]
!���bQ6Ͷ�t����E�m��m[��c�C+U���0V��ߺ����Z8f�
�yUiλ���:p�r���χPV��5�^�Ͼ)��ۆ��.�*7����c���`L�&�Pm����r%�0	���?b#�r
[��P���]|��]�y^����z
+�xXU�
+���̗Ů�'=ov�~���e�P��e]n����M�
�CH�����6A�_*��`�]�n�
�r["-f}~��a�Y���clHw���V�m]�/�hXv0_���v�H���^��ٯvj�]�7e�,��[Մ��]�
%cUӷ�.�V�?.�+��5M�&(�)c�M��6*�:��!h�
+�#K�}o��e0O}h��i�?�`äB5���t�r��[Ӏs��m((����Mx�
���j�G�O�WExH�'��Jo� rJI�fVY�ry
+'��'<>�zSʰ\��,����_�kE�̸V,�ñ�B�,�4��Xp��."y.Y�=Y� C���
+;�	�g���_-�|t�� �[&�ߑ�`ڼe*�&Շ�rS�N���P���m��f�6��IƳ!BJk���,�t@���h���=,	�70�sC�?�O��	;҈`���N��)���8�}�u�#B�(�6t�P{���Q��;�q���x�b
_��/2�t�Y�����
K\���
�^���:F�_{�� 9����
+����$�Og�%,�qgg�Au�9�-4��Ծ%
Ï7߿�!�
D(�Wl�EU�����LhKF�s#2"�`5��9��2f��MIi����
�U��=
[�$
?ű@�`�
s	��ɱ �X����$xp!��亭�<���"���l�n�g���"R(�W��|~@Tj�FG��[@��	��� 4��PO,!�Q�n��-� �ip�鷘\n�W�xB�߿J�|����$���(5���G&j�1�h�!۶1F魫��D3#$|�^�_3Ľ\�^�J����xJ6Ŝ�z٤Nu-�X�b�fL7����S&����R�?R��I0�}C씋��4
&89-�gpr>Xʋ�Q4ea��1����O�r�c��[�u���Yc�&Y��4,"��#��"�,��BH�AMc�� �CP
���'���
,��M-I#N�춇�$�v"v�3N<Gcbg�������OĚҜ�OŔ�g�S at g�$|*8,{��+��:�!P�^�
3}�2
T6ק�*g�H��
+�c���ڪ�6#�#���{!3E�tȹ�H-�y8�
~�eg��Y4���b��gs�ϭo
+^j�%�
�S'cդ��c�/V��e �?%l�2�=�q���ݕ�{B��3�� �

+�������R���$����Y(J�|v��`D�1�OB�4I� м�u�l���d�����
���
+�
h���gi���B�'t跮��6��P7����uxⱥmb� G@�`���z�'���N7��l��B�A���d�9A*��3OR!р 
��RO4�X��X��ٹ���Mw~a1i] 
1��I�� tK�pX�6�!=��if}C�����~MBg.�(ț]�o���B
�#�G���������
(#|RF(�(#��4e���ź!R�Xt��4cD-oCocƈ�j�A����3F:�b�,\�P��Q�D�B�����D�B4���iu�3�-��D������(�F/�,�H�?雲&�d�H��v���� �F}F�H0��t	�s��

+>R�Y��B�c]@�~f��t����Ⱦ(���Ge��L\b�PS:�'	#5��-�<F2���Q��KF$��S��$�Dƣ<�:�Uư�̩���0����j�܎\�.��
�A���D�0T�W��we
�%�
��;eΥG0^{n�NM���
�Wz�m��8L �}:��I��~��0��[�p
���E��Eє��!}�	�"
wO�� M�����v_#�]�ὁ��m2��Hz���e�
O
9c��"�W�[��,p�ޘ�|
+���X�'P�S���c��J'��+���I%����>��<��d�_�!�)q��|n4u����B_��T#:�M��)�A-/!��cI�D��&�e�I�b��]d���V��&�:�w�t�[��˪x����#58��`
��
L
7O�2�h�ev[Az³g9";}҇`�c���iϮ�8i�'�<{Ɣ��xv1ڗѓ�2Z�Ǵ�K�e��K��gE�����N�V.�`q̜
+&Z�hy(8ɒ
+:�����?��
��!c9�����X���z
K�d�'��4�?F�h��rI5 IG:��t��<}� ���n_�C[�ӓHp] (�ۣSA�
�`�Z� _�T�L���gu
t&�gt�0&���c��m�(
��H�S=GJ_�#����#��wUw^�U��S*����B!g!�3#��]fݟ�k�٣����G��J���?[�#�PZ~�ܗ��||��SZK�.ѩ����>'�*X�����UR�<��_EMIaOi�9f��H��
_>�eU�A��Vd~�Υ��^�:�43���."H��n�H�ifN�g��	fN)r��>�.�:?�1̜Ctf."��cr�v�9g��:�ȸsm�`���}���
M�&�6a5�Ǥ�������B���
��8�\�
�I�Dx���ώA����ë�"��a瘞o�{+�� �8.N�Xr���I��Mۮ6AE���~�YDn���!��e昱r
�q�t�+�q��s*AD���~?���4�UL
a�k��S�>j�M�B��v�>�7���ޣ�؆�P��6{���3N����Ʀ�!T
�
��?�qҗX at A��i$�O3�����$�U�!�=X
����}�k�
���&,b#��yS��۷W9�' M���!ht�-��ko���}���v�u��������ι�v}^w��\�BM�������!�z,�O�m]�M�y7�p�
�b]�{1yL���z��]�I�D�
E�iBJl�Lρ�
$P���
R(����c�+�]�C�PA[��k^(X��3ixY�'�vH�#�O„�a��B��#(�Eޏ-ڞ�������S����R�jꈁ���eZ�&A�q�)�SMM	]F��Q�F���K��i�@��1��7�U�g��y_��k/X�;J���TCO	���^}#��@z��N��ۑuI
T�1ʸ%S��M�~X�ԭ�
���-)č��]|Dh�WJ���n�Σ��^F�շ�[�uИ��
R�jUܬb����8q����g{
x�gU~��-�kk$P
!Զ�ç����"
$�=8I�,a^�&
lo�򀽾+�e{��@���{��9л˖�=�X5�lOJb�q��c���I�mcY��b���|���Owf� �f�?7:=e
B�

AY��x4�<eO�8Va���ؓ�����$Ir]��խ���o:\�
�
+��E���G�AͲ��m��9��
��Z�$>n٧\}(�]���V=�j���%�.�[�T)/�O(�9��z�"R�oa���Q�
+endstream
+endobj
+2718 0 obj <<
+/Type /Page
+/Contents 2719 0 R
+/Resources 2717 0 R
+/MediaBox [0 0 612 792]
+/Parent 2705 0 R
+>> endobj
+2720 0 obj <<
+/D [2718 0 R /XYZ 86.4 726.045 null]
+>> endobj
+602 0 obj <<
+/D [2718 0 R /XYZ 86.4 701.138 null]
+>> endobj
+606 0 obj <<
+/D [2718 0 R /XYZ 86.4 184.221 null]
+>> endobj
+2717 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2723 0 obj <<
+/Length 2737      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw�6��W�ʳ`� 2����S��Ė|���-1�&�$�r�ק�pG/�&yys"	�`���
+U���
�^������+&giI��f9�%�3E5���n�����ኳ�u��e�:�`1�>T����U��I�����sF��??/���Q����+�R��>�}q������͏g/oξ��
�H#�@1������'<[@Ϗ3���g�v�zƙF�V��wgد
�WHxo��8�IMQ�-�L��y��+
�^�w�a�\fy�&��
O_��qҲf�����h�ϩ�jX1cQ�^L�1"B4�XU��G
+�����̾�9��\yT�I�Hʅk-��f[�Ѻʸ T")��bD5y�6ަ����YY&��̒"%yO#��(Y�@`G��
+���b鮉}��&<�1��{�7B�T5ӯ���@�+��@���
(qT��iY�O,���l-��
�g�}5���?�g�]H
&��[�^�y��~y���T�� 
+� p���^hZ����Y���
+�n������l<��?
�˽�
���.	n`W-�H
��&����(�D	�
�
J���m&�`�
�����m�-�����C��M27�~s�
�����11��z�R����Aq~
&��du�-rN�H�-Ro��ڳE����$%�Q�6i�
+I;̙
mL�|�r�2����]���mU����D�����p����qy�VuY�NDžG�2M�S_���9���ev��u��
^��O��ý�uZ��M�" �BX�7�U�,��N��v�,�t�3
1	p%
����X\�}�Y}��2�g��Lנ}9��l��R}�&eMoQ�1�� �uSdu�{m�6�������K��~
p���݉�͍lŦ'-�nc��8

Xl��Bh�p=OV�1;�����}��l���Tx!9�
+0S*
Şx`�
#����e2��2����=b�&)������]
+�.��Ht�'��\��
���x�����m���[`cH���?� �<ٌ�<��^���*3Q�}��n�����*$dL�z�w�
|�	@J=��?�t:�����m�W16Th
��}�+i�^�F7��6�(��v�����
<5���i����a{�	|�߅��xy���#L٣�Ȼ�)���q2�Au�>9i�g?dX�[�$��y�]��|*4dk�
��'=�
�Bq�&�r`����(��!��@�1�������o ��P��Ͷ����Q��d����%�,�E��#"�ӭ����

�ne���1Rq����d�:;��UR��d�|��(+N6v��g�����MRM�'�� �	07�< m�o��hc��>
��Mw��d�v�ca�NU��7�9�Ev��'
+��YK���y �.w�!m@
��r�ƏK��
҉�d�i�Y�L r��L���"���|n
p5JP�u�Z�!�:҅�&Zrn�l�t��빐&�p��M��ݶ�VۯX3�|�_N[��N!���z#D�ܦ��xW_){����}c'V�xv�&�N�M��~��@0�mS�h'�m�:)����ڳj�M]�ń�Ú	�Or>�~�t�B��;*�!�틃i<'�T���T�xtY��2��e�����-
������d���z� 
+]�
�)a"�A1n����ljKnS��-}�vT���'c]�_���.�;�\�_�iU��y�Cr��?���*�X*�O�_��!h� ��{x4�'���rr����
��f�~���N	t״
�L�{� 7�|���g�V�
+�ɕ86�RM�+�c����B�U3�7����!<e!�)�Hq=�3~�ݱ8��n14�ߟwR�
Ӿ��8�U�Qy
��.��}�@L)Q<�����x"	R�
�2�xw��~p�S=	��>V�=�}
���tf�|�����S��j$T�eZ��u�FM�6����,�R����߾�k�}�O�/\�@k ZqNW�:mK`���pu4����k�b��sXc�G8�
�t�4 at y��8���F�
+�[
���)��4X^v��t�D^��
֩B[	Q�u�X��3s�)t��OǑ��lV9�w��:�	ൊ)�K/+O�	����Itǚ
׆6C}I�ŽѺ龰A
�Z�ڮsw<��&��GH�s��I��a��iQ`r�q��7��C�fH���
��$�1$|"q_1j��J�Z!�3*��2�bD=M�G��I| ��K��n�mP�o���l��
�@�F�&!v��ǣjX��c�,;ԃ�����/�y�8�e�^�
$�MJA��ej�4���i�
w��!��H�pP�
�L��x�����l�	��1C������������F���
�xG�I�{�9����p�<�!�V�i��8�?��щI&�݋���??�X��\��U/��q�M
��e�IL�ܾ3p���C�|�:m�L���)�\�	�G�D��
�'���
Z�4_k�0݉3�R�0/�+o6�1mmjc�R��>�R��C|
���2Ds:�>�r%�@j/�%w,�|�r)�,�aM��S�X�=,�*��r*��]D?�3d��qd�-�y���-ݩ��ZnëmHcZ�4vd�"�ޯ�
P�3�5�6)���
��)�
����ԛo�2�����u��
�Y���t~I������_��o��q
+����\��� �
��M���}q��>�Gbن]���u�Jk
���Ԋ�ڦa��45��
C�k��3�������~���i�����9����!
+endstream
+endobj
+2722 0 obj <<
+/Type /Page
+/Contents 2723 0 R
+/Resources 2721 0 R
+/MediaBox [0 0 612 792]
+/Parent 2705 0 R
+>> endobj
+2724 0 obj <<
+/D [2722 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2721 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2727 0 obj <<
+/Length 3232      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۶���Б��Q�$�t�!m�>w2m���Z�c�%R%�:�_�] $A
+��f�ͻH$.�ŷ��.HW�Vt���ww߼�*%i�����*��\i��X���f�1J	�����
s����nmˮ�
mۼyuy��~x����4+7��w����S�,ї��t�����
��+�
�H"��zw�������V��4Y=�~��)�p�]�^���n�_
��beDH��SF���z~��N�{2�^2W��t��M[W/��:{������D�����T�=�0���[_fBI�;�u�7�ɣU�%�
+\�$z��&
�{y,\�X��y��¦��u��;���d%��{�e���(�~��QbNt,��W!i Lx�nfe)M��d]�FU
�	��c�	��g۳f��d�G�������k���W�(���j?�
+�!�]�_��00RMd�#c]�
���@�XF��@Q�����3A�[�Ō�jg��ں�
�����#;1����R�<�oV���J�0�1�	�P��c���C��:��04O��l
��r�=�|�����P�y�⚶�.�[�
�sa'�p���oev���������:,[��-��0ag�$U$U_�^o67p���i�p�����i:���!��IR
��"E?���(O�(� �ra���P~5�}��50�Y�Ĕċ�A�Ǩq*��$*6�+
��%�������"x�5c�e�߸�t�T�ĄX/�"2U�kVD����,��W�����[�������Y䙧s८��~J�
ٺ�j�ҹ�	sb���T��|R��|<1��I�O��
0��p$!ith���cvh�"+�]�-vE��E�����^����(
� �4��(�ƽW-'H�Ut��]őy�/h^?�Ek��[$+퇂ƶT!�iO�EW��r�iE�F|��m�
nl�O�L|������5�<�S��v��b��T�X
1`�k���s���j��8�
_$<_"�q�R�@���'nV
���9�r^_^K���^�M�p��{��[]_
.�i�gnKA_�m3k��Y�r� t�q��
��mI����K�I������,RFc=T [...]
�Ñ��� ����'��(�L6!����J嘴ֱDCD��u�}��S3
1�fՄ���%��E5�D�P~;�m[�E^7WA':�}D�W��Fb�8�����+0���^Kp�7�jn*�V9�&LN��p�(S-�C˔�G���;z)y'/�T
�ak���
��PK"!�G�K
���P�;!>~xo.u�
j�b�P��$����
��X�
`�~.0�4�Z�//��� �mlcf�|���6
^�w��%�i4=uO��lGc�H�1y at o���M��ZK&�xsfi��qoΦ

�4^����6���� ���@�^���z0������C>L!��'�8�)�9N�:kr�(���
|�-4���~at������=��|������ܸA�V���
��\�uv H: �j��\h��|e��~;[�6O]i�ju?W��ֽm4�vHX>W�I�T�B�D�$�頫�`'���e��'ּ@�
8�˥���>�"��	-��#^8x ���燓��B [...]
1)߷
�3U at nslKl� ~�B��o@Z�u��d�����v�|n��

RkD#���8�zS c|����N(F�%Ij�D(��	��c�s8��C������MS��(��f��I�Q�3I�����y��	�(�
�x�{̍�/\��uz���3?�{���M�s������� /�~Lw�vW�.�&��@L?
P4Rd5:Y���$1^��}�/
���}��6�z��f����E�9�TF�?��6&C�vs���~����
�����8��� f6�	A(=�� UB��6�
�o�
B�
+OR��L���-]�F�=
�
�B�S��V�&�����rh���׸]
טBp�g`����
��ȔNϟ��r�m�Ӄ{K�0
�A\$�
��<S�q�]-��x�'�h�0U�'! 	[�
O���E�g��+���#'(���0�)�G����pF�
0�q��ʷfÞ݄�+��+���;�
�.�-��$�����j)I���+��6NM?
+��}�7ޗp=� Fu�X��ZR���<���$��P�q����־6�u�C�̠��~��
V�ƾT	����qg�z�ć�
+\v���C����S'��M��6/?Y>:�>`r�%O�?jMq�q���������bӕȲ�h�w�κ�

;��f���q�����]�
��
+endstream
+endobj
+2726 0 obj <<
+/Type /Page
+/Contents 2727 0 R
+/Resources 2725 0 R
+/MediaBox [0 0 612 792]
+/Parent 2705 0 R
+>> endobj
+2728 0 obj <<
+/D [2726 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2729 0 obj <<
+/D [2726 0 R /XYZ 86.4 452.387 null]
+>> endobj
+2730 0 obj <<
+/D [2726 0 R /XYZ 86.4 421.932 null]
+>> endobj
+2725 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R /F49 967 0 R /F11 1019 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2733 0 obj <<
+/Length 2635      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[s۶~��У4c!ĕd;��i�L;iz;/��,�'����ן] �I��ħ�I ��|�-�h�0�&�.^�^���j��T15���$��I�R�8��.'�Oi���TĂOߙ�T:��y§�k�
1}�FW��M�?�8����\o�Ŧea
+
hj�RV�>x�����ٟ��\����낂dф��H�5Y�/~�3�,a�IDx�Lvv�z"xJ�����Njȟ,����	iD	b�RJh��!��hlEh�{u-��K�v�����ӯ?�+�tN����H_�/��;��������O)���z��)�*m�X�|��uc@]L��fe\cS�Ј���q�P:�3�����D��n¿K�
IU;��cHV"mgܗ�M㏚>d�3�m���h`�]h��X��u�l�t���(7�C�
+,7� (qN)I�to��J�x'��l.���V�

*���QVͪ|(
ty�uSe_C:�	�I��ǀ��h7!�݂�X�9p��{�q��px�l�:۬�A'���f��S`*���;�e�n���G�pNX���4�X���3
@�i3��!/Q	� C�p'��H&G����H��G��G$�Oi�f�5<S}� ԱTY���z�X������l[�e� ��|-��~�t�
ǁ�K���!��lzk���������!��A?�!a�`̫���$,}* #""9���|Dr�aH��׻�qb\Qz���|�1�p1m
&
++]=��������0d�G�aǤ)��YDbon�U7���ǒ�v�z��F>b[��8I()p*\ q�sI!%�G��}E��s��U�(
�Q��AN���#9!!1���5$-Wt�pɣ.((8`�
QM
U�+��^��ޤ$Rb���Q�����
rJ���Q���	

��a�L���ʝ�B�A����nfJ at q�Ȕ���,�m�h��@ߋ]��_��x}��k�K�"8cn��x �>
n�4G�$�&�h~יcd���>��}�=�B������+�]`��@��ء7���Nk�& ?]
+��cw���7eU���L�̊7��kS �*u �q�
+A
;��EY�
��`y��$�x/U
$�v)9)x��k֍�+��)��,�&k,m�NnHYol�Y���^�FY�_�x��u�E����V�O��L� ���&��-Ɂ�'l���u
�)@	����zm@�H'��:��H���Ђ��^v�N��h�^^���,�����m����֫�qj��,|Պ��2��0�xe6�Z�
��6�s���z��
�9��ƽmX#�ч���
�2D�s�3w�O��0�S���b
(�y6�t�Vx�e�:�ӕq�Y�gxI��܋�`%����Ȕ�
0���:��;}�I9����v��A	js��04�k\	":�Vm���kOJjc<�XyK��^�r�s칳��K�Q�V�z
������e�
N-bNҔ��|9����|m����(�A]�T��
$� �ա��P�!]
(}ϑ���K ���! ��OƇ@ˇ��%��
��?��r=)�wp�f�	�dr;�D}d�AD˅��s>c��<ą ���~4��#>�
+G�-e��4�U@c�����MU>=_
�UCk�.[��(#"[��E�ǿM�:}"	�̟>�����ʊ&(
�D�o`:&���Y)��nͦtʅ�V,u�}��6�ms��a�(���"�=��
+�S��P
0a�
1P�����`�m�jW�u��A��$����
P�f�,�`��mg}[��Q���qL������X��������s��=��s�I���F
��ys��N;>d�$�/���G
-c���Њ'C��~��w��S֣b�А��X
�4,�,

gi(W���N����� �ܽ4�k�*b`���0��1$��j��ܱ>m����"��'���Fߑ�$|F��(#��
���$Bv�,^;5Os�et�o�0$�U���V����VgK?�X�q�$ً�Ɗ�+:�<E~�a�%Io��4�� <"f�'�1�m�S�U�$���\^�xr�
+T�V<�%	R]-�?/M�d�s�
+�ϊEeֶ�s��&k�m]���Tw]��8�����˚����W�v<�PT
K� 0~*7O�$(�r��e
��7��}��sV�p�A�o:t��<[��C�
���)����
����IP������oJ��5CA
�۪���vZ�5���07�<
$��(�
^2K�
�� W_�!RΟQ}��(�n�m�.C�)�L� $�E�
��+xF�(����o ��r���F��������A�@
��
�+q�|X�:4,<�q�B��_�_��*�K��]�I�/���:�J�^�����Fw���[��<
 �
+�]nY��r�����y��!p�
l?b����놽˭N�+��H��S�7�k1���>m��Q�g-�$����o��c��|�s�!#��~�ҡ����a'��7���1�(:�g� �?�0�
��e�G�Pm�AI
J�����
2>Z��~���e��)����O�y�/
�� v��
�2�:�
����@?j�n�

S�{0A�[ﱦ�+��vR��YK�?�ѠS-G|�pi�엘��0�H������/	�0u
+endstream
+endobj
+2732 0 obj <<
+/Type /Page
+/Contents 2733 0 R
+/Resources 2731 0 R
+/MediaBox [0 0 612 792]
+/Parent 2705 0 R
+>> endobj
+2734 0 obj <<
+/D [2732 0 R /XYZ 86.4 726.045 null]
+>> endobj
+610 0 obj <<
+/D [2732 0 R /XYZ 86.4 564.762 null]
+>> endobj
+2731 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F38 773 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2737 0 obj <<
+/Length 2784      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs���W�(WI0� ��a�ڙ��7UY{N;{�)�f
%jIj�ίO7��R��7�T�b� 4����0]<,����_o/��	��H��^��/�&raxD�`�����eD��ZX��}L�A.o�o|˶�_��
r�ጩ%���o�?]�x{���E肵�*b�^$ۋ_��
����DDv�Ս�.����)_�\��6Bҡ�L�e�!�BG�0����(3N����w�>rO���ү�ٮ��,�g���L���OT�
�a8���pNˈ䢝4�sP
��$��
+�"��w�/�t	]�������%�DՉX�0�Zӟ�p�:}H�jf�
+L�8���,/v�k�LP�.!�S�\K!�j/uyɖ`q���T��=����{��U�ֺh~E� v�e�^����F��H��_5��m�g�}��0%�r?>
����}suH����9
+.�
�i}@qO��"E������קJ�p�)�]���!��o,��iU���8�?fW4mwNK�>���*TH�!G�
~��3������!��<�?�ǻQC(��]K�w�
�]�0�-�I��b���;7v�\��� ʙ"�
C�s�Q�z� �+�
�
�
�����
�[x��!�=�%%ec�{x�P2
o�����W���C\�1��C��
ⲅ�B\�
�,�D)�:�����
ƻ�9R�`�IR��9�K5�!l����
���Ĩa���t}"���˥� h

n�����
�%�m�Q�1j<F�1���0�`��a��)���
HUϓ�
�#>����v��/SG��Q8��4��ւ��5�C���
+b�W���YI"��J�ƫhN���
&���]
Qb0/]H�el��M1Ɯ��E"m���II����o�>���Q��V�U|�m�ipdI�`���[&l�p���%-1�e$H$#/D�=�|�xw�8�e�bq.`Q�OO@�
�%{�@�}&
C3t��s�STHC����
%O� ��3��i��^�m\��S�
0��36�I1�SaH��kI#�?r
��,�fv�J�-#a�lY0ѫ���I_q��d���|a��7I��S>�:�)�U
N	���+��,��
�T�m�S��
�7m3���+Gb�
����6x�)�w�2>7���J^�aB�?l66���1YGx��͠��ˁ'eg�
a�kPo��q�7��
�FY=��AOg�@�W��������r}���s��D�Ơ��}��E��;5�U
��9�B6j�KB�����8�P�օ̠��7���V�C����>>TU�
+(���m��
��5ň�P��q���0�"�Ծ�}~�/�̱fQ��Pl覄�.7��ԯe�
+7l��<�2:�~*�83����T�DR{a�v�����:�x?���N�tߊX�	Vo�;�:ɽ��&����:Ux/�s�'�Z5U:�>U�;�'��h��
+�i���!�8S��R�~z3�7FGݯ�"���.B��:*�ӹ#Wz�ä`/qT�̙i�m��.�K/V�\����ظ~Q����9��	́(�s���FN�
m�(@����^{q
:��Y�h���Te�Q�Ze�
+fH�}(l�;�bDT�H���f���v�DC�;���dK
j�;��w�
?�/���ǵ'��q��`�����މ��;MFl�7�>���N��/q�N�� Si�
+���6}��oN���@�q*њざ9:���*@1
�J�\Ne��
�8r�jx2�R	�˶��L���0��j2
�
\A͸�(��)֊3,)@q
��X����&S4�{�1�V�/(f�"�v�$����N���?Bڀ
wy0�6���C���
+�%��k�\L�'T�E�������&0��ʀ�
pR?��C�Yz��
 58��(v
9���Aj����,�H�����2��~a�tB�]� �[�$�-��U5c�iz:0����wW��]�����<�3�)>|
v�,Ϋ@����{��~�"��0�z��}�m���f]��J�	p�v�G4�q��f�
G�<x����k���A�}sU־���K��*NJ|��I��G��7�
Ǯ�@���bg��g�2�
H߻��"�o3��L��а?���g��b������.o��
�g���
[n��J�:9�� t΀����
�&�
N"�6�	��eû?�z!Z�d����*�HC=NK�L�t�/���.#�|��2~H��h�^�/h���8Le����.��L�,%�v�_���� ��!Ŝ� I�� �p5[��}�Xp��<�4��ӫ��!pE��R�e��<�Ss��}Z���o!�(!�rax�
+{|�5�>��N��i�=-���&:���]ë09iHS�
���#Ja���K��?����������¸��,��?�_fI��vL)�b�)�dF�ƛ�QR�VS�5�t���
5z;U
��>��� O��a�*�%�a�^MS��`5��C9*TB��L�Omwtբ1ƀ�X����c�g����먅<N�w���7�������k$�b��B�o�a��%��o���g���Kf�}
Ҙ`D��[!������3��>25�-l3a�p�zG
+��h�W/̩6����_�/��5DG�-ď�;��_?�!���נ�y p(���� @�
+B�  f�
ʏ�@!���s�`Ё�I���
��Ӈ~���V����*e�΅��f�ԋ�����n�UU&3!G��ِ���0�F������
P���a�I�!��hC�p�o���_���d��
+endstream
+endobj
+2736 0 obj <<
+/Type /Page
+/Contents 2737 0 R
+/Resources 2735 0 R
+/MediaBox [0 0 612 792]
+/Parent 2739 0 R
+>> endobj
+2738 0 obj <<
+/D [2736 0 R /XYZ 86.4 726.045 null]
+>> endobj
+614 0 obj <<
+/D [2736 0 R /XYZ 86.4 215.234 null]
+>> endobj
+2735 0 obj <<
+/Font << /F36 728 0 R /F14 1030 0 R /F48 966 0 R /F8 729 0 R /F11 1019 0 R /F38 773 0 R /F16 717 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2743 0 obj <<
+/Length 2640      
+/Filter /FlateDecode
+>>
+stream
+xڵZ�o�8�_a�^�b��>vq�4�eѸ���]
�q�S�T������
��%�q�M��Iq������h5�wG�̏~|��Q��HF���(��
�2e���r�y,R>�
+
k5~gK[g�d�5��X
�����YM�U�u��������Fr\��ąuC/���������?�
�̏�
	��Dˉa��F������V~
q��dt��݌�J��Q1�8����,ٽX�
+&�.��,�	LMd<���d\�WW~����mmokX�}

W�&/W�i��v�ο��������w}=cƵ͖N.0��
]X��ou�Mi$㩂;8
�M�̳���J8��ܕTlIH1��NBN2��&�JgQ�W��]���Z��$-�Y�W��~��h��(��@���;I
�M2ͣ�t�!���
�h*K���6[ �M�g+�@��%N�J��}�e�����Z� 
t����
M%g��頝x�>Kn�2�;7��_6`K
 /�xiQå�"�J�tV�dU��U-�&��/+�$LH
��}�l-h�N��28�D�n�mV��om�P~�
�&S�b� �眷7㫪(*�|GnS
+���a�v��I�^�7�¦Y�/��Yz I5����%��:���W9�f�9aDjX���aڤ�q!�&,���$
��x���/�O��J�Y
�/AW*�R�ݏ�'ǧ�f$ A��h(�T�p�"r��
�ظ8��;(�����ԧ���k��K�	�R��������ɛ���=�L^����hH9$���)`Ÿ�QS��Bju�q3+|H��i|,p�&V�F�=�d�j��զ\��
9�(^�D�(-�'�W�1S#YR��y	�3
;�(ibb��E�T�
D/B4M!/�!�w'�����}���<����L�jH����o=c����(��+��=�_�� .
�KB�,����p!�,�$ ��<uGI�s��&��p�a��Q
alZ���#,�! h0VI
En 
�'duؗt�e�2�+ at 4�`�eU6+��E �8"/$���/�����H [ ���EaDi�??�0���s� p%]0��1��Ν�M^
E�L��v$A�B�#cRp��EZ�$ [<I�F�q,dE
+@]��Y\��"�
���.��W��؂3�q�
��0���Cy	�Ng����
�Oz���r��jJ
-�
G)
�OR�ߧ�e�
���2 ��R$�պ
�4�,)�	@��3��«	4� /���'J8;WT�u_�Y�x0Մ�(~��[Κ�-�QUcQ#%�ޱ�
%�'�r̂8Z@�
����is�Ս�.�bsS�r��☒+nw�
�W��x�^$e�;޻��
��m�o'P�;#�-0%W�S�\�\�.'�oq���7��.���7_�-}A��غ�-T� ��Kڞ5A ���
H)�K�c
�
����Y�$�	���#�I�
�:'!c\MӃ\��22�D�pa�v�
e���k���jR-!
u��L����֝E��-�m�{ ���9��O��f�?
@:
WK��ɲ���@���wޚ6��H�:�w�h�nj��f���8����8D8��rXLw��̹��
fxl��IJF��g(4�MEA�E�8D~�q���u�|�'�}y��L|�s$04u��*�ɋ�a'h[��!��P�V
T0y����I�4��7P��'I�~���K���g��?�<{dy���hw���
t�^-�uv�'�rx߫�\�o_�����v]7������p�+�g���=�4 �=m���NR�������@��g�X6�D���ڹ�H�
+
Y7�ol[iM{������+|���V���������`e`�~��!R"F 
+���f�OO����{��K�@!$�
��[��
������wG�!���1=vi����1���8���1K���$��P�b<�֖(��ѹ�k��,�LnH�A5�y���S`,�P����
b;���'��?q`�g�3�@��b�ԓ�o&ײ��H���L��!V�у@;;Ċ��ݬ�>�	�L�x��� /���x�
��[N}��(�À9��Z܆����oK��ݢα`�	�
+�������#xT�
U���
�E�F#�
�-W�wq
�����}t_`���k�m9P
�v 3G�NŐ�u朦i+�����h�b>
R�`q��MF<�\���r�lE�]���4
+߲���<`���AE7�+���<t��ˑ�en@:��I��WR�m[X/u(U{jv=�AƝ'<

 ��%�S�_�A~�;x����G�:���A��6
P�� �k�xK�yLo�Gg�#`���o\q
+y�%j����Xl,=�� �h�m��$_ ����ˌ����+o7�$�A$��H�j��E~��1
�p?��l[�ȁ"���M���A��T�oF?���M�ihQ�����k�m
�`Su��>@�yvYXO�}M�����Ԓ��mK����,m����5���W�^�
����
�K
( ��
�x��]N��>�	��u
�v��
6����o��/
{�
L¸�;���s�Ca��3
w�ΰtt�+�x�Xu~l����LGP�+���
4��
m����k�
WH&��2
��(�
+��W*aZ?��=�
����� kP�8
+endstream
+endobj
+2742 0 obj <<
+/Type /Page
+/Contents 2743 0 R
+/Resources 2741 0 R
+/MediaBox [0 0 612 792]
+/Parent 2739 0 R
+/Annots [ 2740 0 R ]
+>> endobj
+2740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.452 241.895 331.175 253.85]
+/Subtype /Link
+/A << /S /GoTo /D (figure.9.2) >>
+>> endobj
+2744 0 obj <<
+/D [2742 0 R /XYZ 86.4 726.045 null]
+>> endobj
+618 0 obj <<
+/D [2742 0 R /XYZ 86.4 533.175 null]
+>> endobj
+2741 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F16 717 0 R /F14 1030 0 R /F38 773 0 R /F49 967 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2748 0 obj <<
+/Length 2376      
+/Filter /FlateDecode
+>>
+stream
+x��Z�oܸ�_�O��3�%
�=4�q=�/M�B�ʶp�+W�f���;�!)i��h9�eI��!9��
�|q��?�������/JV�2_\\/��酕%˕X\�ﳒ��*Tvq[cEg�oϩe�B)��n�=R��R,?^�t򧋓���/D`jX�������G�XA�O
�TY,��n��
+&��zq~��ɟ^l^
+&lN�m�����2�Y���B���o��H�Yat�Q��SY���"k�����UeCK�}^������]O]���
�ž_�����_���i�F�0o�
�hFS���@�ii���r]���7
������f�M�TfM����-1�a �@\�+b�h��j�����T>V�����n�j'�4V�bq*+M
�����~<�g���
5^���fK����G�F:ɺ$�����Z����u��Ǧ��xդ�n���:��ȶ	�))��6gU
��f@<Uڲ\(�{��0�
ݓ@�L�rD\�1�uh���8"�
�	:
ĂY��bɸ(b�)Cgk��-��<Z�y��Ͽ�J�J)��d�S�m�fY�hDU��=\LV$8,*���Ǣ!�S���C(٧f�x@�9V���68�������>"zs}Ⱦ!#j���R�9gB�C�
�E3��)W�UJ��m1�����G�//�R���p�=���2��
�ܨ<kR�9U�0N|&׀�����x�ܲ�4aJ�Hs��@��u�g2
+>FS��d��9y����F���.8/�>����LƂɠ7�U�#�}����Qi����}�ܹ�q�*�N}(E�
L*X��Z���$x�S���5�9Rwry�s"�$��HP�B�#
WU9E at m*{�
^Ά�������0���Q��6�{���
��&Q��Q

������8�w�D��	�iV�D�B'	\W���i7���ϸ
��Ods�u�Vg����r���b]� b��#m�
n����(���b��O[�$��
�nK���-�J�ܒ��uNa�w�/1:
��A��Jp�PuR���w�B���\��R��W�?
�/$3R?+q�ճWV�L��)�{L�6	碰DE������6��/l
+!��W�\���z�΍ײZ9�)fu�#�Sl<����*q�+
;�T�[>�"���ʮw��c�H�m�
+=��+�
�~�4r�v������]��fuZ�TQ

>>H����&(`���
.d��s��@�-�]��55W��d؎b�vWî��ZlaQM�]�G���[vC
l��j��D�Nr㊎���~��-��'���w\����+2�˪w�(y;ڃk;��H؇���vՍ��i�=����@
���p��
LK�s3
}���،b"���-�1�H�b��HD�
��;țF_�����p
�w�+�u�2�]&!}"-�}�"��.
�'+)�cŁ����.�K�<hZ�H�o6
�
RB�$��+�����G��8��o
+���'��I�@x\˯��0��
�b�/�N�J+����/�d 
"����v�X�!v^�{D`�'��~
3�{t	g���
U0
�9�pc������;�
9;��q?�p�7�~�����`��ְ”_�~43�~�U��A����3�8g̙�*��ܭk�*r�����I&������<^��q����$v������H��X�I{0˘�Zf�J]c

�!E�;�. �a}Ǻ 3��]�;*9!�<S��䩬Y��y)Sġ�

��ŊG8�Oq>,ͱ�f�4h_�a	�ۄPmB�O�M�o��*u�tQ�<$�y8wk�\�$���p�᫄���zA�h���ɳ���u�V;󮣗�߷	9y��-���"��*��)՝�h��),�Ȕ�Hs�yFt�$�lqB�/��+��X�l�W�Zk����	'N~:-8����L���BEX�/�r�����gqg�l�C�:lЗ�礊�v���ō$r��!��ؐ�Y�xHÒ��G�K��T��}����z�F���$�}�P���
��3
��f�1�^�6����
+[�gh�uN*[��
]��M|���τ狑
��W-5#�j�j�Z�ZS�x���l���ܦ�C7U���>�<�M�=� ߥ�(�c����-���7
h��n����A����_ -�]g�P��0�N���𓞏z�~��@�t	)K'w'?	=k�g�Iq�޷/� 
7bֻ�
�v���
{�u
��Q-g9�3dU}�ߣ� e�
+�f��_
vj�_�Fk���x�
��c�ϕ��Jݳ@ ���OP�m�9�x����>�3
z�*�@�`���ڕ�0�C�˕u�m��@_+
��'����4��L�la�\
+endstream
+endobj
+2747 0 obj <<
+/Type /Page
+/Contents 2748 0 R
+/Resources 2746 0 R
+/MediaBox [0 0 612 792]
+/Parent 2739 0 R
+>> endobj
+2749 0 obj <<
+/D [2747 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2746 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F1 1120 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2752 0 obj <<
+/Length 1308      
+/Filter /FlateDecode
+>>
+stream
+xڍWKs�8
��W�(��
ߢvO�Ͷ�N��N�˶=���#��$7I}AB��Xy
<�H>| a�l��Y�}�8y-t��\s�\^%F�d<'Z��r�|NYΗ+&3)�7E]4�Z��駶���/��6�x᪟K�Ӣ����n`�SW���Z<T���O�goO�_,�^�[�{���``M�`�"F�d�[|�J�
�K(�In��.�"'
fUr�����g�8hcR&<cD���ǂm���<l�����;��9P�1n����De��<��˜(a���v�����s�RJ�g��6v���
+��:ș��\c���+����x��m�ͪ��M[�֮��j��ٮ)�zM�-y��CL`(<�'���h�1�-����C�1F��Y�4c�E3���\e��鱲���@�@R�\�"Ujk<�����=���Kȉ��h�J��FAh�9?6�q�x�
F�"�0������B�k�G

EV�� u[vר}�| `����vs�D�;��Ü����տ�ơJ�Wp�,�H|��"-}X��O׶+6^q�4'�� �UQo��'!��p�����ϣ���c�!��F�l����qe�zS���U{�Lf�fbd�b at g)iz|�=YD�z��L��
.T�pɻ��6�m������Ry��åW�ۡ�a��!��!��'S���Ij�c��H
�
+�+�/v�0�k�@BֻzS�[�Nko
�E���+��@���~yfy⭾Y(e>x6��
��g�q5����
% ,
���))�؁�a�`a6vB+"�~�u*�^;�^20��0�_q!
+��hc��%�w~
�IL?	o���W����
�0��An�1��L�!RDo�+���X���1I����uC鸏��@�1O�
+ at A5�Jj� uo�C��[6E�|)
+���
+� 
*�AXN���������N�<��X=4MT��p�5� �X٦�@�)�ڙ8 O�Ȟz����@ZB�f�{B��|7���4 0�M��ܘs"�y����g
��J����M�W����`�g�5f��
�G��76��L(�y7
Á��eŘ���ѧ�j�Lq�fL�T���,���eU���Ǽ�4Ӕ�{}=-q��E�Q�*��"��N
�I �e�����Њ�g*�����@���~;�L�4ϵ�Q�ȴ�աكF������\ �/Cc��k�VA�t
/Yw{��
�{� �����/���1t�p`��
h�ݾC)l�
0�anS}]���l�!�`�س>�E����cE���=��u��!� ��qa
�5<���ÿS���~4ҋ
+endstream
+endobj
+2751 0 obj <<
+/Type /Page
+/Contents 2752 0 R
+/Resources 2750 0 R
+/MediaBox [0 0 612 792]
+/Parent 2739 0 R
+>> endobj
+2745 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./cscmat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 2754 0 R
+/BBox [0 0 473 483]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 2755 0 R
+>>/Font << /R8 2756 0 R>>
+>>
+/Length 2757 0 R
+/Filter /FlateDecode
+>>
+stream
+x��[[o\�~�_�o��H���yH�"@�u�"@�0d�m�r�i���΍���#��'-G3��7
Β�{�׽��{���ߛ�ݧ�,����t����H���˝_|ۇ�-�X
n�f�B�s�
ykط�9�����_!�m��r���;W�Z~i��7�V���W�L�#�������|f?H���?�
Y,��ݿD7 �
M�*�0i
��Ct
+��b
	YA�-D7C��U�n�X�@D�@�q��Dt$�0C\�@D�@DV"�=!��Zh�[
y:����!6ʁ����fZJ�&XT���� ,(�1)S��w�O]`U�7�[�� zc��B�'VVrN�Ř�����nƉ�e�\s
ʂ�IԪ

f�X^�9N8YPcR�����}p1 N�C@�)Fr�O����
hy
+*�	1���N
}
��/�P�!��&
���[R���	�oAp5p��{cBLR���	�o�u_������8k
8k�q��q"ep� �	1y�e�Y��)�����
q��
;D<&���`��U����PV[����*�-�]lN���ւJ*\
+�Q��f��$�7L���/Ѡ�AY�!���{����'@{F��d�9�ml3�Њ#��� 4o3�,g�9���
���
4�R7
x�g� � dg2P�a���� �j2i��Tl�f�-6�aJ ůd0���CS��Jp�	�6
+խ��B;��9Q��=�R"J���E�ʕ�v���U�]9��p���HP�!Y������y�(���NN>&��ɇ�;Y���]�ͪ��M����s����<�;Y���*H�t�Eg� �����A��l-
$�;#ٔTH[��v�3��PS�~{��
���vC>��n (�0�皀�=͠"���E�,ER�a
S)~%���
���v78�h7p�,"�Ft�.��YD�e���Kv)K��cÔ@�_�`a������������
��[��.-�$:�&�
��	O�¹\A}��4k
qt|v�"����}�'*r�duش ������Ó
+���q"��e���5�
֟&%&>�
�0��Hv
l�>*��
R�{+W�>t�f���&[�8M
f��1�N�x�����Zax��:!5�4�Y��,M7-Ɖkv1�����
��㵆dh�Q�ҴXݼX��moݼ쭛w�u��t���c4n�u[~��9��
n��x
O.����R��D�	ѧԝ/�Z�G���i.���+��c.�*sß֞��
+S�� fg6�)I�]��t���
�gi�:�q(�p��*��hR:�Ϗ ��l �!�2�!�*�^H�\[����/Q�9Ѭu��EZ�*�� 
��*��G fg6Љ����
��)<K��
@jX�5
Wy��y��~
a�n
+��}
QO���
�R�֠����-�5���A'`�����5E�U�k�#V�:��d	נ�֐]i��긢��8���zT����)�	ǦL���x��tR�ЇNg�S�-��J\
VF>$��`�ٿ��w����toe�a;:)��l��������鞟O6�MNp�`q����+�O�Q����f���1n�K�7<
h�DK�>{��6�8�pcp�����Ԥ!��+��
7R[���1���.E�FR�^�Is�a�l�@��el�B��/�&��8�8�9.��<��e=
Ӥ?��
T�-����
���R��w!�Իk,�~)�������q�lF����h�=��.
|�w�~�zw�q3����i�K��Lsv�M�qH/Y�ͽ���]�������V<�rr���6w�܇���0n(�����w}�ڻD��w��
+�q(��Y��U==5���xL��ps��>x�R�/7�[f���HSҵ69���D������/�s���:�i�f`�A�i�>i��٪�d�&�����

��|]կ_}i=Y�{�6���f�S�]�%�����Vh7i~E���8 at _��0����z��.ɲiի����������>���b�G���kߙ�8��qk�V��9A1�W`f�S�~Y�.Ex
�5i\ogx�=p����8^���t�����m����Y�1�B�R�{
E�L˟�����w�~����a�/9�A���^�ղ���]�~��Փ�w�!֫�O�w�zw���������������W��J�⻑���!��p��jw��'�Q$r(���Bh��h����o���$�$����v��5(6b���|����/�LߍR��.�~��?��O.a�h���w�O^^�uwI�R��~���Eץ��j��.�6xb݀�E5�MD��߿�
+4D&Rė��>i�_<�����ϳ���H�_~�'p%v*�l�Kخ�4~z�ɳ�]������ު�H%���������I���?p4W3O_�b
}q�˫��7�R>�������k��Oܮ� 
��g�����\C��=��k&D����p���T�]e���D�7�-�B�a"
/I4�2Fo3�I.�P��d�/&���Fr�/�*sM|
'�%jq��}eqV�&&̴0p�2�L΋/�
N�bp6}a���
ә�({�s�S�eG���&Œ��4�=�^v�,����M����
���6]�l9�Em4Q�����
j���頡��L9�@�6��z��#4�Ƚ�l�8�;m��Y;,6h�q�����h�m�mg�������I��q�c��6f�
Rg1h�]�閡����,�6�����~�u�Z!=A�0D"Dwj t���D���"����O��E8&1m8�N�<7
"�;5`:�frj��e`?�6
�
�h��h�I,�Ρ�uYꌄ����b ��9,s����,S���ȋ�s(�J|��G4Y�����,�����H�Θ$��y��Z�/����v�I�=}0�tr��]�.�=�7���3&I;��e‰-"��wF�jL���s�i����K?
���;hͽ�j����^�c���e*;
r5&���9��锃n�'�t�%�r��A����g]����+[�"�՘d{
?�f:[8�2㬱��q�YZ]
��6u
o��{5
r5&ٞ���N>�vz.;
r�w��.gL���Ns��+��Tv�jL�=��L:
 [...]
+���!#~
y�
����0��ڛ!����[
+endstream
+endobj
+2754 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160615-07'00')
+/ModDate (D:20151010160615-07'00')
+/Title (cscmat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+2755 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+2756 0 obj
+<<
+/BaseFont /JTFGJT#2BTimes-Roman
+/FontDescriptor 2758 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 0 333 333 500 0 250 564 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 564 0 0 0 722 0 667 0 0 0 0 0 0 0 0 611 889 722 0 556 0 0 556 611 722 0 0 0 0 611 333 0 333 0 500 0 444 0 444 500 444 0 500 0 278 278 500 278 778 500 500 500 0 333 389 278 500 500 722 500 500 444]
+/Encoding 2759 0 R
+/Subtype /Type1
+>>
+endobj
+2757 0 obj
+3203
+endobj
+2758 0 obj
+<<
+/Type /FontDescriptor
+/FontName /JTFGJT#2BTimes-Roman
+/FontBBox [ -70 -218 863 683]
+/Flags 4
+/Ascent 683
+/CapHeight 683
+/Descent -218
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/C/L/M/N/P/S/T/U/Z/a/asterisk/bracketleft/bracketright/c/comma/d/e/equal/g/i/j/k/l/m/minus/n/o/one/p/parenleft/parenright/r/s/space/t/u/underscore/v/w/x/y/z/zero)
+/FontFile3 2760 0 R
+>>
+endobj
+2759 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus]
+>>
+endobj
+2760 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 4513
+>>
+stream
+x�mWytS�ֿ!M��bc$��T
�(CU���c,*R�t�`[h:�M:ej�6�t�4s3�I灖��2We**( 8 �{�>�pn�۷�w��[�ﭕu׽���}�o��o�� "�
caJa��bu��$�4����fP�Σ
c�Kg�:������\2�ˆ�G9�Q����q1�d0������0��2�Ԥ�+�yfտ�yvÆ
1����&&^TQ�_���Db��DTZ�R�v�Z,.<
�/VJ
*brrsE�����E�1/�
�R�,��+c���}v5���SXr��"���c�H6�$�$���9���
A���J�K3�+*�d�
E���nU�
Qb~arQJq��$�O�^�t檃Y���2�u"�XN�%^"��"��G�'҈mD:��� �5D&��XK�L<K�J�F�#v��b7��`b>�K, 
 6��M��!"�X�Q'"q���o^�<Ѽ
�L湈�6�
+�
;���:���
���|���-x�����p�B�h�"Ǣ"u�5��_G����
�\ܸx|����?$�"g�`�
�
1f��oX
�봅z�'gӹs�]�
+]uf#_�2� S��k��l^�I4����cϴH
ePÇ��}M�9�����>D�}�H����o3>����0�2���6{ ��Rgi3�IzMZ=�F~�֬n�#$:
+N��h��.�N!-0A�J/���
���!�|�u~�A�j�+���h�P�S��أ��z����5�}�DV*�K?�
-���[��PԏG�d���B��{��3�c4�W���uMȄ����5�SW�	"g�j���&�0�Y��ǭA2��m�U����j{F �y n�q��);v��@z
\3��\��׾�

�|r�sRٶ5~gI
�'��P�X���1I��;4=qaZvxB0X�_#�	�VU�����Q7�K8u.�1���.H
u�
+ ܯ�'�H�
+��7�����!ѳ`���0	I��[��@�w������,��dI�hST|���������l�I���e����A$�������⹪d�L^UQ��I�$�fS���Y��N �7�zخ3�Pk{g�	�U쭌=�s��,55�P<+����c�q��A-���.s
$�]�YB�
+`�ѸK��j�W�*?�@�*0x�l��Ug���
�.kߐ,T�SZ�!��Y�U�k8�|C�.D�	i;��]A>Z�Y�>@�s�ѣ,=������T�&h��m$��YU�\�1)m{���2����P��*����

+����S{���c�l��ق��IpA_c'����[���?:[1����&ޕ�ݰ�?q��䅁��:��a�Z8�Eu��;K8_!'&���d���&���Tc4�R�3��I�Wz��X�6���$��7��/d_:3�5=$�zd�*C��{��q���Wv���B��j|Q���V��,��}P�9)D?��ΐ
+\ih1�t��(��h��*�����G'��Vt�^��|jx��m`��OF������Yq����x64�9�
�&Dm
1�2|Z�f6�
P
��z�St
�	�2�|�Ňm
ǰ���ij0��0�\��<��j��ڕ�Z;�C��?�
F�y��
Vkѿ
|��Q��UPm��K���y/�J�I��;<�Sl>K
F�[�T�¡�+c�L�S�W�ntC7��8�6�U��Ag��Б���x-%N�
ڠ��҃�������Mv�w@�+0���g^ۤ��.@$�h��t��uE��=���	j�U�J��SC����� N�����F����\�5#�2$��ju47ٚ
�FW�:�����3����=�^�[U�-��k
+a�IK�ʚ�:�>=#�x���dǢ�����W��/�P\W#�Uh$52HH�
6x��Z4�
���3БG�A?[
���0J�}�{�f��~N
�&��:]U��ΤSj�O2�<
+���u
�1X��.0 �#����h6����X��W�'�@��y��7$��
���i6YL�ćJc}Q#���b��5��%
)���U�4�jUAn�2����i��B��k>�m���ɫ�;ȹD���
��:������i�-\A��;�
�$L�hL�@Mu}���(|����|�^����;�[�!i at O}�ީBl��g�����Օ	�MY�BM��b�)
�f�\^Q4X>����h�[B��Z�
���0>�X���O��2��ܑ_��0v�g�����G��<��^唴)�!��#�y~ǩ3������Y�W�F�~���<182"���1�DF��"��2c�j�ǜ}���;�`�N���ҡ �f��p-�1\^�u;�+�es�����
��:�n#�p�Fg���`S���JRO�<w���j���
��U6�M�Z_�*�IÚ.`�j%�O���6����2Vs�έ�j��g�}�޻H~��~2pѓӬ P65�H��bݡ� [...]
J=��?��f���o�C�Ώ�N
���F�A���J!��z��\�����X
�0`Qa���
+'"��R� ^v��>��y�#�S��_��&�q���$�5��R
+�Y�>}�ȹ݀��� {p��

Y8���AF�*��ܜ]�
&����
�1�P�
�fص���KF����RTx�4
n��~�
�n\BĤ���Vq=������%�Ù�&
��	tvT���
�F�%
1zMq{[�z�-���x����xNjƤ�������൲9�8gj�����������	�Ѫ��OH���E�:
�(�ʁ�O'��@�1[*���z>��t��q[��#T�io�*�x��M@�����ɓ���2H�ٺ=6�Wt�H�P*U���R�
ʡ�EwL
�_Z��}��~�q�grZ0v�u��+&�Zi����R��u��
MVl�6��(���
��ó���S3H�ƹ��!�g�3��fH��ws.�z~o�T��;yVhC�q/�
�<ң*	�
+Z�\2�����9������x�?
B��Eݺ�.�C�Ý���Ӱ��5� ��~ߡp�A�r��4��N[�~L"8T�q���IGe_gG_eg�K3R��c���kw���%�G���8��]_�׫�bq��!_^��8:f��J
��
��4��"?M���6� _M?���Qd���=@�:؜����������[R�M�ND#��ۿ}��
ͻ&\v1g
+�E�=9v�Ĥ"Xp��WH$����t��و������C��An�5�R�MT�L�����
��.U�p�A 77���&��V���P�+;5�j,�JUU�D�[hޥ�h���k����
+�z�/�
��D�Y�;� �
z}\X�N��f�S�r�v(;�ydۄ6��f�&z��݅�A�ߧ�8?�
�%�2�8Vx��[�)���&��a{�K����|؂9>�G	 �Я[�-
�k�i��`
YSc�	jT�ggY���s�j����{�ꕓ�N���gi���Ogk��M�z\kk4
�"yT
���t��{��%��pG2E����9Ť�
�Z_��̨�)P�$i,A�E�%��]�-0
ftIO)���>� ?�x>s�/F�ɣ�rM�譟o@����ギI�I�)y�ƌ��a1v���b��9���V�
�T�6������f��MR����W�
/����A��cӌ�wPB��
�a�ku���
Wu����m�����r?�gQ{�8���8�Gw���aHNu�Ҹ@'��I���$��^!�


j;	�
m�8!�����ڽF�H�e���
���!��^޴7�lo�@y��7fA�&.����4����Hd��f�«h�Uu�z�;g�I���҈�o��0�<�8}��N�\ۚYR�w0~]����i���?=q,��j��%�{�
ɰ�F������7��W��
�||�
����#)�*�
�ee�e��;��O􌞼��ÿ@4���~z�ޡ�e
�uռ�z
��t���
����I�HJ��
���S��LT*׬��L��B�QY��zR
P�ۂ��o�W�
6�a�
���QӮ�-�w�[um�l��;zԞ,�0�^�R�����
S�1����Nu@�Vi%���*����`���s�
l@�^
���j��Yi�	�E61��Z jW�F�]:'�g��Z^Ҝ��
A���;T^m:X�F�J��*��#�[�C6���v9l�
��w���YW7�O7�h�^�]�.�n
ήG��A���t�?/�|
(�)T��(;����%�8���3�2y�`�����B���S1bw��v'���
�j�%y�y�{B��<�=����Kt~�]0P���5Z�����YF��=;א
�I4=�Q=����ǰ
�qS`�*�`o�������J
�:Wq���[G�/�=�H��('=N/4�q��
��eŬ_����
+N �]�����v!&�v@��Ҁ������hm�B��R
ý[Qmeu��FӐN�~?�h�v��$�����}!�b,���
_�-\D�


@�
+endstream
+endobj
+2753 0 obj <<
+/D [2751 0 R /XYZ 86.4 726.045 null]
+>> endobj
+972 0 obj <<
+/D [2751 0 R /XYZ 139.421 261.494 null]
+>> endobj
+2750 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F11 1019 0 R /F14 1030 0 R >>
+/XObject << /Im8 2745 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2765 0 obj <<
+/Length 2736      
+/Filter /FlateDecode
+>>
+stream
+xڽZKs�8��W�(W�� H��
�lej㚍��dr`D�f-EjHjl��o7
)��f��
"�@��놢��*Z�������\�Q�����*�D����tu����a�W<��ۇb}��d��'[��
+�0J�5U����/?�^�~A�hEݦ1I�\m�_�E�
����W��Q�mW��a��V7���&L�+J��c6p)%4���'�,^�Tb��7}��
0���6���FX�e �_HGڈVWT����Ԁ��c����X����x�ι#�#Y��F�:/~�����|��_���7�lc
�C�5P���޴��k��������n���nw	g?dm�c^����1{Su���#�8%<e��\^	����+�։Q���ʪ{���+
+'�fau�!L)з�������w�|��B���Ё�n_�efL0�A�$$��JƊ�*^rCN(O7��79��
��V\Y�vh�p�)A�����|\I�H�(8�L��w���
��
�ׄ����.
�մ'D�������'0I
As�>��ؕ��ށw�4��ij��ପ�_o�
}NP������
�"�w��4�f�0I5}:>�-�{�]{qh�+vd�'�12�l�϶��+th�~,��,!�%S
�C��q����<� �$�z����HD��M��h�eQ_Bؚ�ց
�eu
8'M�7�TN���qqL$�X�
Or�>
}&p�D�
�����q
+�`
�R��U/�@��8%�V�u�OonO�
p��Hx�?8OR˜��p�Bޔ���U��0�3W1I��� �_N
�f����b1}���!��d�!V!6P� j��?�qߙ쐙 �qW�t��;:��P�k�S0�S�zQބ�~�:,���/�i���T�~��D����ZD�|���G]<���
�� +��M��OG���n�X��P�NkA���N}N�
�LQ���9��+�� &X�Ґ ��ޤ���z�R

+��邥b(|�K�S�����]�6ϋ�i��=c�p��
+�&����6�y��>��wW�4ݬ�#z�K�����`M��9��xN�%����	��bz���s���T����A�
+B�<;QI8 ��_�N7E��6_��O$7����a��p8��0��d��:gDD����3�
�w_f�X�?��>d��j�*�
+��A{���"?�""Q��
+���-Dz%�P��\@3(+���3�+�fL+$Iq`ZM�
� �>�n����XIh����A�J�-t�^(c'��u�~���
�3i
��m��-�P�3=�ѲqMw=�^t�֮�n �||�i����
a����m���
��t�
��.��]��@X)_Xކ<u��>d�ز���erS���	��|h��2[UV'�����.�v��
U�c9�d&�
�W�"-�y�g��&,�:/,���6���ܫP��F<I�
q
+�*L[8 qXll
�G2y�1�t��0&��yu�#����.l������M-�X�I?����fш�TkQXQ[�Fk��ꃶ�j�pb�8ƆX� QD��8Z>�Y���˘�j
���I�E��*("^l�7y�Z���->�[B
�P웉�޴�I��,���L@��Ȗ�YA[F�<�%s�OX��=��G�
���*X8�"ܑ�"�}ie��l��
R�+���1�j6-$��`��0𽧲�MS��2�o�2�&-�6�D��9@�h�����8�͕X�0���L:�
I� ��0vp���@�6�d��0,�&A�&A3.�����
�w63(L�Ц�ڭ36��h���l�zF��ˏ��r��p{!ʃ�[y������Y��p��
�\��x��O�f1|<��H
nAzc��LEz��d�P�1ȷ���	-�,(�������޼�����o�-\�8U"�D;�tВC�!��<d��A�+����N�:c �=���P0�d,�"��p�
^��0�#����`,��A���U����$	�O٦��Gh
+�i���!\���C����x�f����!�
+iu�`�P��<�H��7��
��`:����6+�}[�!i�W�
��w����'�W�np(�Xv��*C�6ԙ
�=���e�q�:
��2�����	OM6�4v�=��ٖ{��Gq �5~4�;;/� �|�8|��Z<��4�AR����mY��
�)4�(پ3�
7L�ZxJ�"`J�c|J��it�i���
bg������BMp�b�	�$'<��4�|y��)���OJ=����3�>s�~���(z�]�v_�������i�!�Ћ���j0��f�T���R�d?��'o��VL={�¹,�<��^�������
�Jx��7�+{�O'�d��s�2S����6���Q���,
��xL � K�������*K*�N�T��Y_�;U�z�����ɀ���
���G{o;q$
+��J���>�`��o��6��a�gz�^��~:���_t�%��~D��%ɤ��:
b��3b�%
�9�l�]�}�P������S|	��z��#��TKٜ
+��dU ��eF*��Q,��*��p�>��I���R �G�O삕z�/�l�_���
+yq��F�_9} ����`��2dh �k@�C�΍�
���Ã_۲����X�
+�2��0ǘ�I	I����cr)�Jk�C
dmn�8�=�pj�O��>������
+endstream
+endobj
+2764 0 obj <<
+/Type /Page
+/Contents 2765 0 R
+/Resources 2763 0 R
+/MediaBox [0 0 612 792]
+/Parent 2739 0 R
+>> endobj
+2766 0 obj <<
+/D [2764 0 R /XYZ 86.4 726.045 null]
+>> endobj
+622 0 obj <<
+/D [2764 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2763 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2780 0 obj <<
+/Length 3739      
+/Filter /FlateDecode
+>>
+stream
+xڽZIs�F��W�6P�	�W sK�����8�\5UI	I�� ���_?o��FPK��
�����f��YE�7g�^��|��*
S+���z��P�b��V���v�K R}�:�*x�Wy���k���S�cA�*�n�����J��W��P�A]�vt-O**7��O��~������ξ�<��L�ɢ��'1a��j�;��h���VQ��duG�v+��PB�\]��|Mn���Scd5��PĖ�C����x��?��ą��"�.p���ŘN�j-�Њ�W��<�d4F�PCiH7�V~D��)�M��k�/\��6]�f]QW<4���G'�	Q�eq�d�=��k���+��a�\�,v<�Uv.��3D�͙�͍���7g�s�Ŵ��'��B�'�.M�Q�X�)r�h���z����Z
��@|�cc{���^���.�
L��%���
H+W�۬�LH��
Zs��~�����6:t�%����ҩ������q�g4N��{Uִ���������ɪ�C���T�5��J$X�ݱ�����?h������X�+���h�u�l�f�Ҷ�n�*s���t+���_W�/���~�*Ϸ�w�e���˹œ˷���
�xظQ�FB��,	UMth�ꆫ߼��K���ݨ�q�ʺ4��6�n�܊D�~���u�Z���7�SP)

ڼ�+��h�����u0Yplo��Z?"�&><�G��r�m�ͯ�C�ּ+��
�gl(T���84��-��Z�$�u
+חa'ir�4��]5y�r��u�f���씎�0���
��5�9�͌	��ܵH^�8�(M����m�����W�%l*���
�U��l�2��j��6��4P*�
+��
�
pl�
�M�� �&I�h���O���z�&eM� 
���7'��ʞ�v�
�;<��F�Zf�#�34+[�l�����Por>����˃f���Pڐ���A���,���QT`?�-w���r�R��,>�EjA,�/f0��Lw�ɥ�&j@)
mt-rne�&���	iױ�nS
:x
�$�f�nlFK[�mG�KMX�7&O�H��-
7 
�Q�%�Ѷ
+
)|�y��5�j\s�$;��v�UQ��j�DT����!��5���M�eyr��2ষ���Nv�\�y�m]9�8HXL�����^
+I�WB����j9�vɚ=��
�D��Ȥ�ul���#>��t��� lz��
*`{�
���L��2�zώ��\�d�'��"��9�����(���v�*RT�vX��E�՟پ9W�1W�iU��屇"�-˙�����?eJnrZ�]�L ���c]�q
�dZ&	0��&'��!�O
+&��{b��^���vl X��y[4H2=%u����.
+�'��b��' �LM��
��hp̽�~��V��G�)
Jӏ�O
% ��T/P�v]i�f4�u
��
Vn�:3�r���`$K:���R�_:��F�ӂ�ݻ� #A ���o	�C�X�c�
�5,r��Ċ'�	u|�j�>�߂�P���q��²IPt|f2۰xֶ�
+[��[�I�4~��Ie&�.�>wDD��8�]W���I��NS(���5p�}S��1s�ܚ^���BE!��'�C���#���P<���X�x`�Oa�M,'��C�(�U0H�n�p�l�o�=�A_�SH5���; c!PN�9�Y��S�T=f[���=�Rm�웽�~�_N�h�,
�N�s�YQ�
�%�����򶸩Hv"�&GRr#��͡�-�R�h�S�E�B �����8Q���8 +��u��?��Ir��5�&t'
���2~���Ý��?�	��R"pv����I��f Y�]���{��?�n�KgS'�pW�s��K�LF�)�qf`{(������!�<(9q����PK҆*��<}<O���yq-@��$%�5*R�z�J�������>��|~B�=��<�
���h�f
+4�"0�-��[�Sl쓌��瞠}	��%q�8�H&�'�sH2�q����B�^��
N�wK�;�D@H>�������5�B-d+׆�6r��Xp�8c���7�$ Fg-7�!�=Nf at w��2�1n���XT��c��'��"�6�<�p��/�V���l��T#;A�s���.g�A����X
�5���
U���%���qC]⏑��ST~F� �i
\�G���.KF�,1=.�"���{
+�š
�q�U�.��q��rX����P�	:K
:K\v
+n0�3�o�� l���
1��a4Xv@
�Ga,�T�F�Mkn��
+
�a�a4
+kn�b4Z�z1�[i�_�h�Ƙ���l�T��>-�N�
W
a4��
A���'#JLH���o�x�����q�6��}
+�Ah�����01��FX�Fn&z�e��m4�Lʤ>(�@ۛ�l� �ZtR�0����)�r��x����gv�^�������n�k
+<�?E=���	#�W���.��
+u>/#�s��~�`�C@�$�I at O
'�=�b<8���y6�3�"Ѓ�zf聻Q`gY�G�����!4�B���&O��Hy��->�h��V ��V�<_��@��_p�Ň��>n���7/�['�l�l��k@婒��Ň�׈!~��]k?>�nO���0�%ɞ��XD|���%E��-3B*Luy��k�L89�z��[�֑��H�ew;�>��co
1��`���_
+��!$�7��b���{V����" �� S
fx��f
+�a���<ຩw\�i
DN��1"+��='��]�7�U)��;��Dle����u	�{�6��B�a	V ���'��0��r�O
����~�ć
�v/�On�Y��y=��pq�M�G�EN'����V��.	�=2�C
`0@�"�Ǖ��-�:o�ؒd1ҟ��EƘ+�

(��]�J*���B�q��(c����T����O���=���lE�ND��
T����*l�ʥKlxf��j��I��%3����_'�9'v�7C�^����L�؍o~�<3?�2���`�V�Jt��M�Z46�?�e�č�#k�2�"&J��OM:9��{�k� y���W1M(p9(y
+֎i�Q@��y�@��ņ��q��8�p�LX�Ǿ�ؘ��KQ��P) 6t
��;���8t���O*B;d�OX	E=�,dn�;�
�Z�Fܚ��8l���8� ��$c��;-7,>!���}Z�ٌ��%,
+����s)�e��u5��8�o��W��b⋑��ۓ��LM�
2bNGg�c�l`���������k�?��`ݫ�
�s۳��W��5��a�]s�x��(���
��l�g����4>z�A��1����`��A�h����#BAq��I�b��6��︄�p�XN/1ؚ�Ŕ�Qz���CK�z�� J�y�Q�p��-0����`
I��q�a�ǖ�W-��� TYͨ���'}<M(7�^� /�q�O
�:' �0
��ĔL@,>[���9ǿ��϶X��:I<1���G��<I������M�
L�
���$vYB �2U^�E<�3bX��<
�I@C�)II��?X�N6��Z�QF�&�KQ^���	�H�͸XXu-��z��7�qA��]Y�_���
��%A�&gNd��
�$}�)e�����/1�zr�g�SwH�`
+�M)�w�@M�i|�-�
��ܠ�����`G�
+endstream
+endobj
+2779 0 obj <<
+/Type /Page
+/Contents 2780 0 R
+/Resources 2778 0 R
+/MediaBox [0 0 612 792]
+/Parent 2739 0 R
+/Annots [ 2761 0 R 2762 0 R 2767 0 R 2768 0 R 2769 0 R 2770 0 R 2771 0 R 2772 0 R 2773 0 R 2774 0 R 2775 0 R 2776 0 R 2777 0 R ]
+>> endobj
+2761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [442.313 671.562 449.287 679.975]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+2762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [454.661 671.562 466.617 679.975]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+2767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.616 465.467 204.081 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+2768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [346.248 441.434 360.97 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.066 441.434 379.789 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+2770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.489 441.434 415.211 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+2771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [88.171 384.815 95.145 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+2772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [99.563 384.815 111.518 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+2773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [115.937 384.815 127.892 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+2774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [322.99 334.381 332.455 346.336]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+2775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.012 310.349 471.734 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.069 310.349 490.791 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+2777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 310.349 526.596 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+2781 0 obj <<
+/D [2779 0 R /XYZ 86.4 726.045 null]
+>> endobj
+626 0 obj <<
+/D [2779 0 R /XYZ 86.4 701.138 null]
+>> endobj
+630 0 obj <<
+/D [2779 0 R /XYZ 86.4 427.963 null]
+>> endobj
+634 0 obj <<
+/D [2779 0 R /XYZ 86.4 283.85 null]
+>> endobj
+638 0 obj <<
+/D [2779 0 R /XYZ 86.4 187.989 null]
+>> endobj
+2778 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F16 717 0 R /F8 729 0 R /F48 966 0 R /F49 967 0 R /F14 1030 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2784 0 obj <<
+/Length 3235      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks���W�*�ʄo��
���Ֆ-ۢ��U�=�ȡ4�!)ϐ��_�n`�$��H'�X�!��}/�]��r{�򂫞%V1ջ���"���%�����g�>r���	>����ջ�7[�_֟���x5JJ����7/�ף���z�?���e�e<�T�nݲO�oC87�S+��vv~{���Q�V�Ib��gg��&��o��pkz_ݺYOpK<e��٧��ͪ0-V)��G��,%T+�m��O�8+6�����[ε�E'������RKe����Ǥ x�ˋ�j���Ȑ[��/��Hdl�`;L0X�N��0&�
���C�8��e��g��򩒧`�3��]Ƌ�4��,Ԇ������򤅇��?�gD�ڏڇ�����*�'q���9�A�e�O����2��%鼔�mPiU�e>��?�&i
�/��z��"�lK�K���ZY-�h`�!�̹���Jy��HpN{灝"[���~����y�f���6�2��e������H.N�@
��B
\
+"��O�x��aȔ!� �&�����<�oe9`��u ���/S���K�:��1O
��=��H���=X<��>��J�������I<Ir��;]�KP:�H�D��&J���p�u[E`�a�+E!�n�8�K��ɗHaRJ���H��h;����r̓ёn�	S�>�c�ԿR���2����>���_�.h?ɦ�v�S
+q�u��G�)͊}��
0�$A%�
�b�_�E�_g�2���i�~S\�B�Ydž���պ��ʣ3۠�1B��'q�0 �)�SoJC�5xOҦ<�8���"�LG~un��2�<q���o�~�?XK��; 
� I�
�_�
+0u7��$��H�d�?�|���5��͔`%�fۓ�K��!Z�U��'��Ͽ�;Dr

��\~aBv��xs��jt���
�z�Sд*夞''����DN�������r���?��S���rz�=AJ�R�DN��ړq�������!l@!��S�� |p��'�$�=�
+�Eƞ�O1�.
1l�YQ!��d����xq�̓<
�������|�B.����ӄiz��V�.���(�T�
+u�Cd:خ{������՛��R:|u����b�w~���ז5��5�1-�nZ�}&�<��MTX@�'#�>�`p&XB���{�g9�,	�� ת��,+��j1�
2Y`!
�(�/= �ú��O{Q8�ָ�n�Ȓx
�NA�+=J�|�EˊA@��
+�B�x
P;�l��67o>\�n���h��C�d�[ �+3x� Cb �9W�
�(��Q��������D�
3vj3����I2�<�����=8��">�ƃ
�_]?���T{��
�����aD�L`�ѧ��6��}�"J1�:W�$a�3q�A7�] l�-X��:׬�U�%_���
(G`D���?RM$�:	n�
+(�YTZ�� @u����A/�u�f� �P�XH�Bc,8�(�I��ŭ"��%>����;��%���ߕ�(��)��)��
���,����%
qw�I�,�c�כ�
Jwr�`G�U��*�`V��[�
�ðp`�D��l|k<Ú��-F#�\
b^�׊h�͝	�n���]�m�O����=�4�f�U�����<	�A	���
ИК�N�2a ��5��],?�ɾx�"�"��:���v��V;QU
��;��q>Z��C���;��D7P�:Թ�^�I��
+�-_�~4���9I)�A8� BSu
+�Y�@���0	�(������
�J�
w�~�>��`��
ue�)Ȇ�O�v�~�k��GA��� 
 �xv��l1���rM�e��n�����>������&
� �PGȾ���P���'�2_|?(���sy8�
�M�C��q
B�u+� �0n��g;�c�H��h) Y³��c�Ƶb�C3��YZ��dd��K���4(A
��s�ஆ6�6����q��i���/�H���l+��Z��QAhډ)�0Eە�#g����#2�ym��<��"�<�e��S�j�}������v�
��0�5j�һ<ο�M=fv3a�����,��}I*ڕK�%
KJ�#
��S��3�56@����}��W�G�Iu6�4� ��,�˒����
�W
�װ���ӫ=#z�̔�+��*�6AGH��ıw
�
+��}\[���
+�i�Β٢R�t��S���Н�G��)����[\C V���{���u9�l���?�B~�����͝�l����A#"��s�A�$ڳ���u�,1�4�
��Y�|(
l�
�"du�
.�$�DĶ�����۶���VLJ�L�����
Q�N$���D�y�ƽ(V���^�K�f}^
h�(	�>`�o!C��  "v
肢���lb�Z����b�t���.�C��������$����rt@p�  �X7+�X�R���]��l��
0w�~f��Z}�c�ʓ���%SG��7Y\)�A���Ǹ��fب���Y�s9Î��}����W}�Qc�)�/�5F�����n��n�&�tQ�(�_~_����n
�s!���ξJ��O�U�6zJ���C�e1��U�f�?ԡ��vƕ �̋��� �F] ��P�c�#~��H�w|�Y
�\qL����K� � Yc-�=]��t�gw������ё��#�\
va<
-�8
0�gTKh|�B�
���� ���
|�8��$4>@�i&
+��
5
b�q=
��a
�I��Z��%>;�{��
�����{<�YJ�o)��s
���8[M���r�Jg�Y2,�'I����ȱ�_T�A��/��T���)���xyk��ջ�,��:`�����G�����`���_
�p�~=]e��$K �c�"���N��XW"DABV���M�_iH�P��<�)�_E��j���
"��a��}l�
7Rg
<Z��4�o��ILb�
ud�j&�� �]
�m�1�PqP at 1D
+�C��u- ��J���8SV�&x(�Y������v"AQ3��^BN�Hѿ[-K?1����N��ˇ�|P�L���I�{����Q�0
+S��V�c4;�����u�KK4���[5���Hcs;�!�݌:����N�3���p5�ST
$��:/;��k��
T�L�Ի�ڝ�6�k���/�
}��~��`�
��#
+��)�?����
�b���CM��

Ӏ����Þo��.L�v�.
}�g�c�_�����F�
+endstream
+endobj
+2783 0 obj <<
+/Type /Page
+/Contents 2784 0 R
+/Resources 2782 0 R
+/MediaBox [0 0 612 792]
+/Parent 2786 0 R
+>> endobj
+2785 0 obj <<
+/D [2783 0 R /XYZ 86.4 726.045 null]
+>> endobj
+642 0 obj <<
+/D [2783 0 R /XYZ 86.4 214.187 null]
+>> endobj
+2782 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F14 1030 0 R /F49 967 0 R /F16 717 0 R /F11 1019 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2789 0 obj <<
+/Length 1564      
+/Filter /FlateDecode
+>>
+stream
+x��WK��F��+t���xz��T�Mv+.;g���A�إ"`��
����H �xH��Ѩ�Տ�����cD���͠��������(""�,Q
��8��UI�<����2͓>7<�Pdn!��y�.���"��pg���b��+/���}(�ph:�|��?^�}H>��~�� -�ԖHb��F����4�7%ܚ蛗�E�[�p�G��=���D �J�֮)
�
+�Y�	G��x����2~����>,g
|B<^噳��iD�F}0hIP�{hF�Q�P���y8z�Uā0)j��t�0��H���
gA.j��[��OD�A�h�3�h�VW���i���e��t�4#��C!�0�u�}h[�d]�ҫ�F5�-�Ӯ�B�dma:wx�Ɏ{�5���5����ӋQ���䵅�<���8+B�R�5��t��g�l�wZ�>犠0�ǃ3((�r�p����=E�m�(Fi�����2-0
N<���fڿ�(�a�e�Ba4&I_�%Xs�e����<��2��3������1|\��pb:/��j�~���	ڶ�Ȝ$��\T �Ȭ��y<��
̨�T_�Y0 at 8C��>��VfIH0�e��vhƬ�ѿ̳l�3��r����,;0N���:#���fU�]w򪇮q|�iYd�$�����	�պHg��›������~3] �٘�8[v�ɉ�]f"��x�*�B0�(��1�6-�:`�Q��� �D�
+'��`#�Rl
�j������� �5k��ލ�񜧣�8��;
+Ð
�t<
���t�	!�Ŷ�����IM$[� ]w5�,t~�����7��)�з��d5�%��E�-�k"U�-*
��v���P
�F��WX�g��!�y���}��ʥF/�b^V��:Պ�_տ{p6�K1
�c�}嚷�����Q=#�|<f�l��^y�5JA+t����up�����r8
'/R�
#qȒ�@�|Պ@  4�)d\�s����
�X����
@�DTU�]�$��^u]J�`wq�)�V�,C�H"�#�����[f
y��v
&ˬjdM�5a���U�� %s9�&HhS�>��3�K��}A�
���~p� �����I�9��1�Z�Mr�I�X��k4
+�f��\�i�;
S,P)��!��Xp�G.E�Fڨ��>R �%�2H���g�L�U���o��F�E��5��V�Et�1�SM�2U�}���ʛg�5՗�G��Co.�5�gR�n�pԅ��F���z��;A1�� v"[��c��3~�90~wn���fM���*���~&�s��5�SE7�?J[�]S~ܕ��*��4Ď���0��?���^J�݃m~}�{�Gt����1��a���P��,kۑ�W[��CM���a�B����������!�G����P�����:�ߩ������p�W���X��<�8�
��<<��#���Z~"�?\M
�y� �|[��ry
��<J7���{ ���{��`�V��M
�P�淩��Ώ�![�w~���>�.�:�.p2DO�p������t^R�N��	�!-��'6�� :�
�
+endstream
+endobj
+2788 0 obj <<
+/Type /Page
+/Contents 2789 0 R
+/Resources 2787 0 R
+/MediaBox [0 0 612 792]
+/Parent 2786 0 R
+>> endobj
+2790 0 obj <<
+/D [2788 0 R /XYZ 86.4 726.045 null]
+>> endobj
+646 0 obj <<
+/D [2788 0 R /XYZ 86.4 701.138 null]
+>> endobj
+650 0 obj <<
+/D [2788 0 R /XYZ 86.4 529.11 null]
+>> endobj
+2787 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2793 0 obj <<
+/Length 2803      
+/Filter /FlateDecode
+>>
+stream
+xڭZQoܸ~��X(��4)R$u���������z}�we[�V�J��ί�
���]��
� ���3Ùo>R��_�����O7W׿H�J9�:�V7w+��Zi3��٭��|8
�)���UO�2Y�a���Л�k��W�3+$����_����gz�5H(����Zˤ�/i�c�E]C�6(Ť �Z�[׺շ��ؕ��]�,ש��f�Yy ��ɓ*��z�;z�:5�3�:�%8g��A�������U�e6L;�Y�����r��~����(w�sK��JV�=�

�%�L�84�O��X
^�"(˓LJ�.�;go���d�j#���^E��
i�g�����-4P��E��a��u��u��xd덒��鋽k��	n+����&pT�%>>��^G/�
u6�p�ʎ�j�؁�} ������1ؤL������P��N����U�	;B#}[E�e��H�,m��
��`{3�]�6@�D&��Q�/��L��u43ڜā�spE��Hl;쪯��X���
3u�yW��W��ٍ���-� �ʾ�y ������C��]���>��b}� ���l(:v���.��i��*zB��
"��.�TƓ��
��9���&��7�8x�:1�߿k��7(�7J�Ք��W��s�ӌq3N�<�g��E�ay����A�hȒ �3
@�L�%f�� w2��lFw����F����ۯF�Ur��\���g���-�|�!Kҷ����e�`�^.��,j�b�]q.CdL��b���{�p�i��FZ�c��D�Ĉ=_ ���m�����-Ůf2-t��`֌�q�l0�DT�(���I@
��8�
���֕
+�`�?n .�)�����
UTJ&�%�=c�N�ź��hר�	G�������0�<�Y��P���j��M���pE��?6r�ߠ��X�35wL�t�qW�hW؎ݶ��S�-*��+\�(VCu��bG����Eq�� ��@���M�J
5���Q���
���D� �/U�����ہ��&jS���
v�
��
��+�C�=/a7P��?��o%�/W)h���o
�r)��
��Ź �V� �2����I1�*���I#t���`
�y��_B��]�/���6�3��#
%���
����#*�;\�E9Q���\,�y�U��h
+�J����^�

+��p�C�[�#&��C��]�H#��� ������:�	���,{��jFY��<�!j��;����XGG��rl�G�"pr&�t!"V
�0%䏌�:�����)��#Ҽd(4;��9(�Q��rX>C�ؽb ��6�!R�Ӧ����R��dU ;��mW.JQ�����>����*V���(K#�cW���w0n��sp��	^�Í��jN9�:{m�6)� `�k�0�^�=V���=�3��=�
+
+�ߡ��K
��6�}�Y'�����"޽�M6�䫕[L(tD�7|bKa��S+ވ[
�e����=l��Z;Zkso-d���ұR3��Efk3�P�o/�(
���*��"Ш�ۮ�����
+}���/L>:������C����UX%2�G%�Q����F�j�]�gn=^-ݹb�#��;E��u�l��ˇ
��H�a��2\��L���+E�&���?W^�j[v��c5��e/98�4<,y�2ev��	�1Q4�V��
+�2�V
�*6�
���b
��ڗ쵪�I5l���B�=u�ut :��K}�퉘j�Hn6�E��R�S�����M �8���z��O�qh �x�n�H���D���@K�]ȧ
׎!�z/���j��N��A7^���������d�3��1���r~
	���L����X��B�!%�ŝoUεs��x9UB���H�N�D81\kn�c�Y�N��Tu�a���:��
 L]�v��YA
+|r]��_!�,c��{�Ry�[�Gd��p �QRR{<��
CW�A�r��D�z�^BV�m�O�4��_��
W�'�)�ΫD�>CCz�K���u�mn���K���S��%����7��9�
.�QO����
nY���"|�1�g�
�p���*��3��Wdx�wy*(&&�h��vs���Xe�edBi�����^qf�`x��0�w\ܧ��۫����aʆdn"�������$
L]H`5��8:�"��#�&ٕwű
��/:[J��_ͼ�@0adA���P��uB�-
y��,6ͫ{'�dB�o圑�[mH�,5����
?���)��x���;k3�ȹ?�¯qB��a� 
��|����׾M��"�G�g�$�|*��
��#�3��Y1��
k�N�Nh��B�)�BG�
�ߍp�_�(�vؠ�9���
��
�
ߙo:�Cy����|�!0�ޑ�'L��8��Gї�����G9�����
+oQ���|�����^k{�u������藠��
Uv�[�77��q8
]����/x�*�C�m�d��˦��)�۩*!ڇ��ŻO����;,k�2
,}	�K�<�@�w �tU
xv�W`3N#xq:��$>E����~B`&�M܌/\,sg.bp����t�`��,�wZP>m|�V���9N�r��&
�#jg
��h����!т ,�w4��#�h=u�o�4�ȶw
KU|����^��Qx�P��S,�Y���O�L=�j�қ��wEr4��rôTK)��|u�R
��Ux�m�I��������F��S�|A��>�b����z��T9�v|Z;��Z���{���;J=�#���'	�&������*?�rp4~��?4�> �����
+endstream
+endobj
+2792 0 obj <<
+/Type /Page
+/Contents 2793 0 R
+/Resources 2791 0 R
+/MediaBox [0 0 612 792]
+/Parent 2786 0 R
+>> endobj
+2794 0 obj <<
+/D [2792 0 R /XYZ 86.4 726.045 null]
+>> endobj
+654 0 obj <<
+/D [2792 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2791 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F49 967 0 R /F14 1030 0 R /F63 2795 0 R /F36 728 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2798 0 obj <<
+/Length 3393      
+/Filter /FlateDecode
+>>
+stream
+xڭZ[o��~��
+
�,��.oysڸH�&9�{R��-�l
S��K
���3�%���$@�������7�U��[��^ޜ]\�d��y%���"K|�H��OT���,���<[��@��w���^_��^�T���Ky�rzkl=,�w�_�]_TUїM�=�{�6Ј���
�Y�u��٫����B�$X�����t�X����+Xl`�E�<[<Ҽ�B�܏�U-���}��d#a�*HI
�a�0/�~�6�ze��r�C�U�`
8��f��c�����)͞���f�}�CYm��n�
+�\\��(�P�Q�����PoJ8�g����σ��3��ݾ2
�X�����9�R�Q�U^��o��Ɲ�(	@>+`?��m�o��T��?�8��;�_�^	�(��u�w��-���3�1tf��E�=�tE]�(�'�fy�y�ۦ�1�"6����'
���U�_Uy�mi:�
I3쵂H�#�5�����
��`�+Z�/�}�)4�k�x�c��Ԧ�z
+�͖ǻ��%@�H�,����me6���^S{�����'��
��s֭)z�?�
zY\�s�����׿ӥr�13�k�6�	ޫJ�^_�u��԰�*��H���N"
+`�.vD"�31�ҫ%Xt��-�	��^�
+L��qc7�P����t��MG�I��f4h�+-ЌG<�*XiP�y�w`VY��
����.7�w�kڶieۢ������Ό���-�x��A��4h��� NS}��m��W�T�gV��
@e��ߑŃ���H�v@���У=G�
�)d f���V%�b�6
�g�<� ��tKOK����!N҉
+ޛA拁H�ou���-�l���s�O��<�)^�Z蝳� TI�
�}q��~��|D�1U���)���i���)��=��r�IWI]���ߋ��	,{�5�{F�pɶmv�`?�X00;RS�һ�"�&*p3�j�d�yf�ٔ8H��\��z����y�K�|�8���^���]"��ꞇ
�OS�2�/G/����2�m4�[|q=\��/?ZUP��(+j��S�Ta��t�J�?�P�5
�
i>�洯���UŽ���,]a6;
{r ����eP�\y�'s�v�u�Y�h?�����I�IE���{��
zV�z��Y,2+��A�} 7���f�/+���޻Z
y
+���
�����j�a+�x�
U�ľ��F�� *oM��e�N
�`�d�8�F�4�%R��&c��
��$�W6z]��l��"��B�I-�����0�
�����A�C'%�N�q8�y�(��h�6=n�O��B��~��!J�@�j�^��%����4Dk�� 4�� P=�$RDw�����<l3䡒�}�[&ޮ Ξx��$�0�|
��xpSv}[�h��y�� h)��f�'`��	Rk:�ߝ�&��z]

�f�l�'��� �INzily��
+��,%�l��<rc�ro
Q��Z
�N��D�#~%6���>�9VH@�kq�@"x�s�Q��bF3�G
��
EO.���Bz$�M<�D���v�e
��e�n�X� �
��F�}�qq������M{w�za��$H�"�_@ȩ���d��IB�kQ-fEC���1��[��
�l�ʧ,�
pb�]D�8�d��W��o3 Fm�L�4lFщ;��+I��� Eׄ�z�A�Iʉ���$|O'ù���`�+�K�PB7I�nL ��D֜�ULG�o��sql�x�
6&
+鶕��$��d�vB6�v"���dg��,5(Gsm�aLw
A���/�^~��/Q�t�`>��БJ�ث��n���T�
:�u�\!�R_�`FVKP��
��M��}�믈<B?�s�f�,m<����� ��^K��J��"(��A�@�(IѴ
+(����
����2��{p�MK�
+�B��2�J&���k�v��M)(68Sh��m@��ޛ��i�Ӿ*�%"�ky�K �/o�ަ-�#�ǟ���<��}UY$V��>';��m��%
bt�v-�uX�Q�N�\l��c/������)���j蛾�,�2�,>@!P�D�/wË(�"Tml(7����)?�,�PbC��>{]��D6�"ʏ�?E�Tg�ȟ	e�
��gZ�-�6%S��$;L�~:x�oq��0�l��I
�郈���]� ��_5SQ�&E��đ���M�
-�@@�F\�X�]�͙e�NG[i�L��^�}�=p����������y�nN�G>X^`��Lʖ2H-����T��f�ݕ��-��f�L?���j�e��GhIS
�T��
�=��`�~��35�B��?�!�ttfNJJ���1�\:O�8L��n�#�J�cy��P�R�q*<���Se�(������L�����3���s���ʧƂ�@
���bBQ�
+G��Ta�N�
��f[
 |������QS$�0��`ga���
����)1W��(gL�uIC.������SO�OlyTar�!��B���B��T6й��W�1S� ��$��K�|�� ��JNNd�>���O�1ɿ���j�Eu"��$g�������W*�3;j �o��2�;
=�:�1��@����/�?�:~_	C�`�Q
��y�&�l|b���y>
&̦��*�
������7'�����?rp�@���~��+�,��
i���KH�A�0��9j�
�\:i�����
+��ݯ�Dn~�|;�}� ����4�6�ƙ�޲�'����⃂����Fи��[
��8�-ƾ��G;u��G��ӑ�I	���z�gr��8LC�&
{K��S�$��`�ү+I)\�N0}Qp=�����a̲��1����@j�������%�^M/uA4E6i!�(z�{�����-�-�H�N��!�	c�B/�G���`R_�߄�*��,)Y�'E���e���Î����b�2���L��#6*[�;U��`�S
�|��G%�B:�5����}[�sD"!���
����L�z
?��y1{J��@0(��4�נq��{@�CM�I|�ޔ,�x���C��u/���|��w���Uyn䔊8�ɔ���F�Ѕ6��FIź��U͊�j��
�ɨ鹸q�,xJ9�^��G��=
۷��O}������u�!3���h��?1���A^+�ro��t��f~�M�t,�
|���@���|
�)����ǀ�-e�j�1f
g�N�
�C =,ί��ՠ��-!���s�bj���齡wky6��'=��ydG����G/�g�ihݭd�h�ET��&f�v
�{M�{��0 k1��$���4���⒤�a�u�
�{{���J�N�
�T�o��*s�}P��8Z	�+
�4����w
�.M������0��G��e�-��4{���W����Ԣ�
+endstream
+endobj
+2797 0 obj <<
+/Type /Page
+/Contents 2798 0 R
+/Resources 2796 0 R
+/MediaBox [0 0 612 792]
+/Parent 2786 0 R
+>> endobj
+2799 0 obj <<
+/D [2797 0 R /XYZ 86.4 726.045 null]
+>> endobj
+658 0 obj <<
+/D [2797 0 R /XYZ 86.4 616.479 null]
+>> endobj
+662 0 obj <<
+/D [2797 0 R /XYZ 86.4 346.598 null]
+>> endobj
+2800 0 obj <<
+/D [2797 0 R /XYZ 86.4 161.836 null]
+>> endobj
+2796 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F14 1030 0 R /F38 773 0 R /F48 966 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2807 0 obj <<
+/Length 1660      
+/Filter /FlateDecode
+>>
+stream
+xڭX[o�H~���e,œ��T���6��Vm�*�} @
�������L���K2����7��*���������@!%�
��A,"��d$Xf�������,|�>��3拫��3=�âl�d�Nڢ*�
q�B�������l9�gF@��X��� �̾~�A+o����{�op���:��}�a�(~TaB)�RD"iu�����N����"���x>êla,��	_�v���@�ì����Y�mU�/��
ۍ�M�����J���{�\�a��w�<b~���a�`ŦIi�T��i���k���Wm��y��
@vb$� ;��܊k�0��W�s~g�HZ�H��m���"����
	_ۼq
�Ӽ���ĭdyS����E�,��2��֝��l|�q��Xy�:�Z��߰�a���;����#!��p9�,�Q�
��瑽�6y� �
+mJ�R�$�
e���6��F�!�e��Q4E�K]�n��
�z|?��
=
��j��6.M��8p�$d҄i;
|�U���J��?��L�f�� \�$�S�}�(��"5��k�PR�Z�5�ڗ�d#;sW�M3U�F��b�d�Z2�?���8-
����|�›�R�JdđP�K/��
�
ҎA�
+ �����J�W�b�١UY~�l׭�H�R��նv�KOn��\�N����؎��j�G�g�����@8��
+YQ���$R�ۗ�R���2L�Mb��o6�! �4,�~�����[�GUQ���{pZupE�!��s�N��T�rD���~1��]�|��"�;	�*Ĉ+!���
+kgn��4u:)u!����
K};ך��]
�{更��Qin*S���^�i�S5{�W��|~3
�����M}�`�π�PϨ&?��0�"z�?6�J0�!��'���}�n]�k�{
=��t�(�$qeə!E�	/ xI�׻� S�A
zh��D��67'qxQm�����-b��7w�m1���|�KU
+�މmo��̓�k�A���Z�
���w�B�r�}��8
+��#=���g�;iZl��@0t��6�@rk���ƮC��}G��/�;J�ᢹ�
Yo�$��d�

���Ok�d�LY�I��$gb�^q
)O�mV�h���
Iڵ��KA�w�¶$���)���O�Y�8��D�-3�f�j&�ʼ-bʟV��
�n���ʂkL�����&��;`�S�VMs��I�2D���X4c ���M>ҥ��3$0����ӿ���8�0x�(h�A�?�́�,�9&o�ݑH�s\/&[�.����M7
+=�`!�Tr(����/a}�|�h��D��9�r��㻳�}[hd~[h�������0z�C!E���埓ݔ�
��2����%W�v&e�Nv&(`ZLF��Q�J�
{F�����L
~G9Šͭ��}*��
����7xc'�2]o�N5�ʤ
+*���%����]���0���.8c	v�p�\A,K�z�ʶ��%��Z��Gj�c
��/V��4�x�&��&�9_&�8ݺ'͘Q��m�p��u�?�ZG���j;����l�~���i�L��(�$g���l��3�b���Mhd���<�%D�'�~���͡��
йr�̓�!$i���?���
�oS at ky�I �2�iF=t�.�z�?
G��
+endstream
+endobj
+2806 0 obj <<
+/Type /Page
+/Contents 2807 0 R
+/Resources 2805 0 R
+/MediaBox [0 0 612 792]
+/Parent 2786 0 R
+/Annots [ 2801 0 R 2803 0 R ]
+>> endobj
+2802 0 obj <<
+/Type /XObject
+/Subtype /Image
+/Width 953
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Length 104438
+/Filter /FlateDecode
+/DecodeParms << /Colors 3 /Columns 953 /BitsPerComponent 8 /Predictor 10 >>
+>>
+stream
+x^�]	�N������x����*�4P����h�ޣx��JD�"%/!
��兄\2OdHiz�
��{����>��g>�
��:�����k��>���:k��X���
L?�/�؁�#{
m_��ǖ�l�7;d8������lq�:y����b��Zp�������=�g"bOru1n��FJ�Q��:����9�r
���
�sh�d�{�{�w��)ț�D�ڻ܉����I,^!1�TB��Eo{9�=	
J�0�L�"�z?ڭ�_=���KGm>�W�
��L6��%&Ӣ�m�ŏ���Ʈ�߅l̡���f>��1\�D7�
J��
�@XH�%��e�Ed�@6e ��d�
��5BƳ�]�A2�^?���\%/��ԫ�$y�����^:nP��t�*�]!;;�v��h�9!<6�����^�~����ۤ�3�uO�d�ܬ}��v1l�Nw�l�9�Y�s7��t��P�X������e�����W
~�l�9�z�z%fET��L��_~m�ч�
O��,�d��be�o�qd_�ڷ}�u��Vm����?����ODϳ$���a
 L�²���w�Jw]�
T�zg ��fl)�l���̒f	QOjmQBE�����_����
�A��_餃U4]�$ʉ�dg�X���:���!!S��&�<���"�1QJ��u:d�R����+z����I��t�P)\)v}{�0씲�)�H7 R|XT�

+\}�ن5`�
����$e�Q-�>&���$.Z
4�bwjyzcC�}
Qɩ��j�[0���v�~����U�N���,���d/i
c9f$44�c��-1�W��
���Ϯ{�Q92>~��L���ru
+���
�^w�8
+�qƽ%;�~[��:��M�γ��S�ݪ��^j���i3�:G�W����#�+#�3b�]T61.�w�ĦqpKtm��>������]Q]
II��N
W��
=�񰰎�����[���	��9�K�~�-"���b��*�8�~zd$��ROU��U;�X-�D�D-�%�i��C���}Z�M���5U(��%�za@��W��zϽ3����C�T�o���\�;��
T.W�7�x�������A��2ϭ�����eK.
��u�9�ݷ8Z�¿�*�Q��+��
+�|��Q�h{ҥ
l�6���pb[
��	%��=h�S�'��d�O��;m��
40��JVN��E�g�(�j|���~�e_�(�3Ӊ4T�^��L��$��3g�	�
%&N*RH��
a۹)T�H��"Iƚh�,���zU7)���*YHԂX{�P���d��IX��=�~�*��!D���\Dʤ�(S�P��XI��)%ȝE
+��l%�hQ }T����
�pa�*XE�EuU@�C�-A
��ta�@R1!VvSn@�b�(������"�C1l/�&D��QX�šB���^D4*����F����tr��ZH[��^ԠQ\?l�6iP�
��3A������m�^`]7F-"�=���5D
U���%
�<
��i
���}�:4t]I�J�j���'8���[[��
(�4�oij���!�@������>�{����T��P�餪��
�nH���>��O�;�M�
F>�DZ���[� ��
���t�N
ζ^}���l+>S�� �C��_�dZ�H �~�sg�u�ꉇ�B�>��\˵���F�O-a��'�"�c�����6}�r_���������g�h8��"]

�q� ;���'��Z#�Y��+~�c��ey*FF�H=i�U�qB�P���Q��'M@��#
OXa��b�e��DܤՃM��
?B2
He���#)=�(!�
++ɲ-�
+[}�6)��)
Ùii�i��
^o;�4�`���H�c]U��/�M���-�p�@Y��v
����S�'
�Ɵ��L8��~<5!-5=-5#
i�ii��z�u�
+�"�h9�)$��5#U��v�zzډ4I������k7�r�a�NI�cwR��_�z����Wo��yqK&���� ��z
&&r��X�P6���d� vE�*��
6&Ȗ�Z�R�6�)��P��dQ�N	z��yAe�}/'"��(!ɒDJvHk�d�L���#�wJ�(u�
$�,\�U�
U�x'�MA�
%Փ�K�*��*H'�(#����Y�\�P��"R� ���%��d�����œ
	N."����� 6J`gQQR���mA���(*��/
+��*��b�X�pɡ�D7���
+p�
�˒X�k��[�2���F^F�
+�,Y.�.�np�qh]j�j�a�+oXNV)o&A���XE-A���}aO��F\G��
G�L٬���~�u"`P0�d� My�������3�|�"�nE��!*�Y���E�U
�IPD��
�4�ku�9�~���dzz����D�0"��lN <��/�A�'����a�6Y�%�k&J�W긤���zD�(�6�-�I������8�?����6|�:KĘ�줾��F������n�]6I��|L������/�s��;Ě�Y��t���|f���"����"������1��� }F��}H3fk��ނ�ʖ聨>�J}�)JRǩw�1��j�|N���^,�����CR���˲���c���a���[�u{�*���2��5#55
��Ԍ�i'���8
+"+���
ɧQ����zBk}Hn��"$ȿ�)$K��"��uP��4=�l�����J/�q�Ĥ���[��[���H�}�Е�da	��2H�zP�
&ip�v
+�$_1,ӂ[=
Qi�p.6�ip,ګ�>�3�Ƈ
$��B{\o`�qSk�Z#M�7�P�k)�]��k���L��]�b�75�|�Zr��u-��
<��TE�B{h�yU�~�*B����7l�{Ყ5�D:�y�m�".�Aq���,����z���T�)i$��S���k[B=�b����Ǩ����2Ac�Y;��6U���1�T���6�]�4D���z�~��U��I�cwS��j�Yw[�.>>���|&X��N���F2m���x�ې��c���OQ
�(� �����
om<�9wJO{��N�uz��̣@l
�_gܫ�x�$G�Q̫�>���ag�}��%�;�+ �L��`�V�n�B���ٮG'cNB�I�z
�W��=��X<LU�2ҧB�f��t��O*`{�$��!��^��=�W����?�5'���̓v*�c�Y�t ����ʓ@��nC�(Ѵ�NRsJ&ia��Q��=����z}���!��͈��8e�}Uʗ����޽
���> [...]
+%�n^>蹱�E+�HY���/�Lj�O_��q'���C"�˜�g�0
+I�L��Qg��4[ ����%�ǧUXT���?9ƥiݱ\�R�1o{H�H����d�c�Jp%��݌d�;���d���1Rki�#�#�nNJ��+1�ײ�^p�W�"B
�#�k!\u�TR�z���q[׬��t���&߿%QNO��'N$��?Oȟ�9�^�%�����-[�+
�4�շ!�"
��Q v�J9�[���	��Q���a�uG0���`
+�YF
k�z?{�����
+��%2��fU��u
J=����(�ᩮq5x��Bܒ�����
Ǣ�j�cO]D�r��@�[��=2!/3U��f��i�ɬ�#|��B���#v��6��t��ە}F��v���
�^�w�y5ҸuX�T��{����t�
�=ĻYGc��Y����]��o����%��t�F�銶س��� ��S{,�*���x'����TW+}�2���Ժ��jSQs�Ъ-eG|*�=Ѱ�i婀���ͺ�Ysw�㮛��o�1�����g�u7v<#�l�'�uH�^�b�7^��Gz}���D����1��{gB����;����Q]�Z�Z��ls�c�֮��Å�?Ęo�SM�����n›�V:���=#�ՠsN��N���	>#
�h��.����>�\�����fM���w��C��:I�)��
@x_����/�j�+�`��<�?��4P�
�C~�������w��U.
+�_���0Œ��S!]�����@��K~��+�)7
����=��(�	�!�[�	g	�J�� V҇�ɽA�W`U
����t� w
ru>�KXn�}�DQ!UJ-TB�,)�	?�b��B�p�(�2�J�m˧B�WЊ���[�%E]H@�d�p��ZJ�M.Q
{���B�"�7g�.��7�1��o
代����0>
	�-���/�,CA��C�u�9
�$DZ�.�إ
�p9�{H7"6�G�m�����z/��
��?�$��!Qz��	��S������b=N�c�2��gI�?�\���1��椚��7�o�
���G�&'ʸ�w����#��kf4
}J*ټ̫J�8�^j�E��sӏ�
��Q����It�$�9��׋��2��@� ��� 
+�=�}ˆ\И�n���>y�3�8
�lj
00lw����n/�3�����F�d���r�6�#@>	��L<��t�(!t˴djQ� ������t���˳
sƐMX��1�S�p��6HM)�r���d��{Z*�
O�����X�k�a3��g���
=�ǑC
���#bŶ^�OZ�8"
+���/�Xu���z������DQ�#G�\�(����HK=v��
�S���{�p��C
>�z� ���8��ǡ�r�F�\�T,
+�L�";�2���T
� ǒ�&�J-�����N��ivОV�$���S0v)�o��L\[4����4��SٚƧf�Iv���
��
6��W��n�s����W�HS��b�ʖX5qM��vn�8�����l��+ZNȓ���Xn3ވdKfl�o�q��鵬���3�-&F�ePg�mqz�-
+�Yw�ڪ%�
/dr5�=\��`�l�"KR.H69+K�c���,�2�)
eI�%�&^.X8��U�=[D
���S�F��r$�5	oMD��1E�I�b�mᥜ.�bT	�l�]�������e�
+�[���mP�o�'��z6����M\�|q���x��Џ�L�:R;.�������=1ˍ&M�{�
��~�;�uN�� 'he7Q=��cu9�(�f�2
���"
͂R>-�ƙ�\�Ѹީ�u
o�|�I�{иFn�8fVO5�ԨR���	Q�
�|j$�G]�6��.��	_�A���zX�x�BnJ
�i;E�X4!�J���5�d(�'�#�H4�5o���7Nyo�R�4kvl�KK=!ȿ�d���p#&2-e��r�nZ1f�R,[�=�e�.9Mv���q\�'�(Rk�!ɘ�#N�b�G¹Qր�Ϲ�~e�dUV}�U�)^OH&$��8���T���a��j=�
cϟǏ�G��Q>�@�$5�
�ӄ���
��X�!x
c
]�	H�Wi�%|N�wBz˿���)���>�k���덕�5._Ĥ���`?��
�3�i!��?��u�h
���Wr�E�`lߴ~���KG5k��ԏ��&���}�U1�
�iV�-Ҵ?a;П,AFC!w+58�}��4�;���3V�V����~��K$���ّ^���؆���uY�R��|���9��kI�
+Tr�WFK��E"mg����u	�s`�nH
����t���>��O��sFq����X��S�+����cN��Oxe����}�<�͒�
6��j�>qYZ��4d��
#�G��<��B��
DO}�FPe�{i�ط
���h!�;��Ig��+��.%��Aw^s�
|�G
5D�[�`XW�u��ը���KE�A����~����ĝg9��
��	(뭃v-��J at O�;_��ؖo1�m�6��Os���~�'>c/��R���W
�c�Q�DG�#�2�-f���C53O���Xmݤ���Q?J�<�>�w�h��R
Rc��������SUǃ�\���Y�ĕ�

�
qLZO�E6���ņ�-v��OmP�K#�؅X��MOJ��1�G��|X*��@�d<9eW2<C(�
*��)
�%X���T�ҳ�5u�v�w�����~�� u�q���R}����֬Vq��=��U�v�SJ���=����c�{Ͽ]��
}����@�jW<���^�~[�@t�V�	@�Z�L^���
+$g���ў�UOP��z�2�n��L?UH8kC0z�Q�H��p�HO���/n4h����,�>(�`�5j�sse���y/���֤[o�+6���@�7qijC��?���Iĕ�T��mS�t{V����r�ʉ?�sN���>�T������wϽ��g[����n�g�Uo�my(c��t����Y�/yC�eZ���x�V�w̨��KB�=omow�8Q�����ь��ٰ�*�c�9�e����u������G��S#�w;+�ׄ
3�}b̓/|y���q�#ީ�����:18����oy���\���?oVPw��E�
�
{c��ٵ��{���Z[�iQ���`)�h�E�Ug��=���b��c���Zٳ鹫&-��؜.���"=��i0��k�M~���F_U��[r�
	�״<[8Ɍ�S�1Qdpe0c1���/~J2
�,H3�HO
1��z3��鬬�J��Ew;��u���Ur
g8��d�
����%�I��)��`C!��Tֹ�42%�Z�P�Eݪyb��Y�C^ �tL?c�g1Z���T�_
7��X._4y]_P曤�Z�ߎ���	�9
U��Z�K�XB5�7��A�p����1)��+߼��_�
U<H����)�k�B>���� �9s�2zֳ�j���.����6�C�흟�*��f��� �]�Tp���6�h�I��T.?�/Ƹ2�EPdU^Ru'3�2�#�#7b�;���VR�jŹI��1+������1�Ѵ?��$�V/���[����
+����O-\�I�*�ך?ؘ����1_�T��5�ٞ5�	
�?k��)��>:k�Z�.t����qc�b�C���b��4h{��\F@�hC��kW��X���=�i�$A���>��NFh�B	����e�o������g�/~:5M�_x�V�~��%؊�_�8M���HH��2Bz�io挄3��iИ�&�����~���V2�4��i��M7���.�W��sjT�~f��O/S�L���
*���pcq&�?-iߒv{��S�����������o�N@�
��t@K��ݖnSqǀ
f������ĺ��ݺ5{㇤���V����W��MN {��$��E[v�i��n�g
�����A�?�>k���&~����ވ}���][�_ޭ��)V��ES iM66|�#_���$Py��X�i�%����{�(�fC*'���P��|;��:ta�@�z�DIa�W�P���+F����|-a��y߼4�������<
+UF.\��p��n��B?z���Q��
��&/BBI��9"c����B%�k��<���>���v�>YW�|^�p����&�*]i�)V+n��T�.Fk��bU�f
�������*j�<H��w�<����i�T�D�	�uד#B�UP�w9@Լd�]�֣�rš��N��Ǔ,z�P���bu���0�Ө���;y\@�@T�D�v �'5���
D�t%S�f_�C�H����ط��>H썱�{.�	#�e�ܭ��y�A���#�v��ة��H��>�IQzl���}홂cp�q
�-ȸ�kak#V��rw
v^��Ef\V�;�
=}��������Ka}�Πy\櫘uO��*�N}��|W�}��`>e(4
�2h�
}�!i򐼂�O=�FMh�d�����(o��Dַ�ˑ<2Y^�JŌ��G
9U�t�@�V��OB�<�Sו�)�1Z�"��"��
OK�.	'�
+�
߀5��~�,�vB��
i0���%� D�5���2�b{\.����%�ȴ����@
dQ�©��t�0W<.l]T�L�^
HMc�6�`��.	7�;[}���pre}��Nݙg�Ѽ٥͛7o*�&��4j�X��.i��l��JWhE���O�}�S���<q�K���owե[���JLY<]o���&uz�{۵{���U�FϮ
t���.�{�҃���.�l�Ko�r��K
��@�hߞ�W�~��:'����U����N�u�z�X�
AF�]yAQ�� J
�v�'
FB$С���tͫ�)�� /YNF��]�^�$����
+?Ͼ}V�����,+ڪ�z�7c��V!o�}��a�vh��-�e[Z�
:'���t#��O�
+ob�wyf˕RDG%aR��&�P�駋]?�ۓ*�JJdI	#���̚���
��l��ѵӛ+�6l��$����
���C?;�
"֝<�W{H��D�¢UV�
�f�w[W�bТǢM�L��|��#����$
S#
���*��;����B��rsS�8O�ǹ�:����]c�u��Tܣ*t�����nod#��w��F+�. ŵ����N�J`�쭏T�q��V����a��}a���g�Q�y��m�u��Q�z\}np\���WK40]
�������x�'���\́�MK�ca���6�JM��<=)(	�jH��[IiPĪ��
ꜮK�^re�$&�
[l[M���*����"ҳT� �ʕٌ�l�e�Zpi�t�
�2ر�Y�^=*m��b��\�M�ׁ���/p�7�����8��!1=53���8��V_�ϱjMW��)�����Ʉ|u�
�8d��,a2�Y��
+�n(Y
m��>��
+`?����	0)	
�2�H�'��u��8|��4�� ���
o���
��
�+��ۿ������,=�� �ܶ��|����(�m4�h$���h��xF�!C�yz旻�
KQA&6*����e��"�X���߽����Ժ������.�+s�R�Tl�P������"�Rm�=���mHJ<����&�p�헞{�����#)��/F7?�C�s;������/�t��O���;�ٔ����-ϻ
�e�u�$�ۅ0	+\d�z�l�����S�6Ϳ���l��|��Uu�_]��6'$����W��=��`��v������g�
�����z�zX�������{ˎ+��6%\ܦN9�zm�`��[�>�v���/��o?x|r2)�%7�\�

�����L.��}����橻`3�q��;�<}g�����I�d4��Р�$���dP7+�
c�=�B���Y���K��%�;�{�b�a���nܚ��
+��� %�}�7�r���0
薼���k_�(Q$�~�
8��Y�.Wy���;�̪o����CyYHq�_�V�XR�Ǻ��N�pϟ�r&�r��('���:�

�
d2�A
�ok�P�n���Pj�,
7�F����/v��_
t]kl��گF��5lqN��

Q�9Qe��
t��ub]$ۏ�{
PO�����죄o�Ab颍W_�#<ֈ�8c|QBJ,��L6T+��:D�]U�ϘD�eFX%J�ay��dI��H$/��2t�2��)H��=���*�J��\�
L�����Ęi��
ϖ�X�)/F�1U�h�5_P���[nn�'��2S���#� [�P�H��(�
+�Zl��>1�o�b�ܯV�&-pAL����s���'G2�!:@���Iœ�%'��Iŋ&/�X�DB���%2�Q�8�$/F�U�?ݗ�|�߈z��_���8j��d�	�%���H(^"Q�)�$�%"��E��ȩF�y�W�/W�����;w��1p�����O?���/����O;wn�v��-[�?p��1�X�zV����O%v���9���������q�$Vn���zY%ɮ��g�Ř�ik�ľ��ϼ{�IH�{ѣ�,�,������O8���us��M
^��l:���<������
���g>C��o��V�_[�[����+^���7.M���ܭ3﨓P��>˶��:gR�E�.ߪE�8�eD���y���mJ��
�,��u��k�jUd���Z��q�	�|q���{����s
^��+����k�����V�{[�P�B%��S21���z$��f� ��O&,}��9�-��j5���:�}���  :Q	�oz���Ο������o��Ǿ��Ճg~���>����;�&��e�
Qs김�p��7mM���$n���HF��{�z�p"k�:m�
�:���5�L^�F�5��Ns���]2bO�Sk�?=�a�>b0
�8��a2
����+ t x}�]�>GD9�n��4"����Jn�afqk�u�Z
�j����F�;n)���	
̳m�V�N��n�����ie5+�d�)��FhѨ��
΀�$ǁ��oZdQ��Zf
�9���}�
j[)u
��!����1�l��(ԧ��D'@���~�ȧ��M�L���}��I�֎6m��S����޽b�F��i����D��� ��h�ӆ-�H�!]2��|d�.2�ʧ�fU^^t��f̱pTF��\zvò�>��FKr.jzژՓP�b��t����f�R�ŏ��
1JM
+���Y�����[�P�Ȫ\�t�ޏ

X��._�J.R+�B���&R5#R��]D����\����k���D6g)PȔ!\9bJ�*\���[�Tb��I�J*Y"�T1�����Jb-Ak��9l_���c�UR�JB����KK,Q��l"�x���"��6a�e�n"?���>z���!,�����v���]�����o�~��g��۵�؟���z<tY_&��U�˨���m�W|��ך#��
x��}�V���x�
���Ҋ����Q�E�W0���1�ZBv�F��3�{�uK׋�W�&�=��Â�k~���^o�GA��U�wo^��k��1a���%Թ�˹	]{��#.O�?������<����yӽ)�bG���g�d�y���7���s��>1a��/�K�K�y�^���
+u.�<a��n����W��n��6Pb���ʨ����_����6�M���
���qw�yv�>m�v�m��ُ\5����o�
}�����޺���
?����������I<�{=�$��uۧO9b�Z�N"7DQ������Q�w�~*��;��Ukfl\	��c�%��Ѧ�|��
µ���5��?
lB<�T>
<��C1�݅
8xPV,�;1]Ms��#de��i)$� ߝe	�/y�&�T�(�j�l@�u��q:u��b���
+d
2_~L
cU-�x`�I
+<���\� �~"����0���K�������q��ur�K�A�~��� P�&b��th�ǁ��ɤ����kԗE
��/v�{����8w��v��
�
�F�n:��)$|�Z@�Z^�X����j�����n�(1�l�Y�#vHcc�W�)����`�k˕Y�1�!&���Ƭv�
�ǎ�1�>�x
�ʐd^Ǫ#..�!֝.y�ԅT$O
*�
�R���L�BE�
%f/Z,�H��I.RAn˞ۨ��׈��X+ɵr�6U.�k�6��k�bb�uQ	� ��œ����X��E(�\��E՚\g�iz
�gȵb��HեU���$$�(]�p�R�K��H�R�˖�Z�t�¥��Z�lb�2(�TF���zU�?z�I+�i�#�=�ʔJ��P�l��2BZ��e�ʔ.�eK��B���r�J�@��K�iW�l�F���,Q�$z4a�x�����w��]�D�b%J+^�h���E��ve7z��N�8����4u��s�ј��7��%q����
+��kt��ǂ�E#E�R�yr׷ߌ�hY]ƕ ����a	�
itv��g��44#��o��q�2����������x��}J��Z��}�JȎԽqN�E�����*d|�N���_�ݴ%s�X�LbF���딮%u�m��Z��m>x
n�mR>L��/��.
�]�.6�1- #�v�
	L_z at NvP��V��n�󛶜�b��vm�s*Y�
�z�IO��ͨ�
z��$Ӑ���gѤ
�������3�����'���Ye�!�˺p��'^��)��E��~}�3)�&��])�Ư��BN�W\��Ͳ�
+BiV�[��(���ޤ��	��xC��m�S���C6u�&�
;�ʫ=���N�z`X'�M%Zw�=1�q\������rMֶd"B���P�
k^�%I�t�C{�{s?�mO���IX�Q
+�26T
�|٘��ā������|����M���G��]ys�NH9<��qa��&߿�j��(�B��&G'iN�l�vv�
]T1֐��7�����6^-�F�0��TP�
t�lR�d���xn��נZ���g�%J�Ȝ�tO��z�Z��&�q��L�D
�,�XY��j�-�8��aZ��>�I�n��1���)O��P�Ϙш5Y�q2\2bS�d1͘��D*�� '
"�o$d-Q*�PF��%�+Z��X��?��X��������*kW��%h�03#���I��iI����,���OP��"E
'+Z�
���
+c-S6��`�b�\�"XA�˖)TN
M*W��²�cM��Z2UEd��+��^
A+D����ƕ婗�-k����~�!���
��כn������ٽ{Ϟ={��ݿ������ҠT,��2[޼�oi�m��錫j���8�������m7�ˍ�Fg�ۨ�x���W�:���v�(�_��!��e���׿v�=�WQ^
�o�
�����2P���qu��+��
�՛��]���K�'_�vo��QB���X�j�(툐�ԢhZm�W��/�l��%>��w����'v�]�����e�仔�D��+ �ʑ-��X��i'*�vE��5�b���2��悙���z�տ'���h�R�
+
+�파���',y`�VL���ӷ}�ZL��M��N�||��<5KpnDl;����-CQ�˲b�}�M�������۪�p���	�����v�R٨<)7����#G�Xz !�����}�룵�����-B~�Rw
"���D*�~�^D�k�$ʱ[�
{������q7$~l��t�?Ѳz
+�Ț^���l3o�v}��[�?���]��(�yg;��z:��#�u��
��������J���mi
T7c��<����R�2)ShyT�^̓�缝�H}��e�a�
�.�I�x
�fX�H���V�-�<�Q7֜
�
++�n��t'����J
To:
��z˱Μ�C��
4��,�k�1="!cic{�!r������ؕ�^�T0n"�^zi�{v���
�7�f�1v595P:)������.{i�RVX�NGT���;�2��ǜ"���2�*��
Ǟ;���G�z��<&Ԡ��u͘���I~��!mjnƬ��*Z����N̊S�
��Mf5��k/g�J�����#g�{������T�X�L����
>,ȭ�P��(�<��3q^����0%K�	l��*(�l�h�dX��ZXk��떔��\�L��e�K�*V�Tr���eJ-S:Y��
+�`�(P�t��0<���`
�Oa��
Q�l�R0T�2!�L�b�g�r�J�V������W�†Ơ3F;�"y�Ӎ&���sG?��
;~�A^�4KQ�k�0�r�/Xr߰7(�|�)�������X�^Zѭ�tBCL��{d
�o�Ҋ��8Ml����6�^��q�T�#�W�o<q-Vv������##˥������5��»�0����+���J$"6�]2F��1��c�
��bJ��O5}F��NH���D���i��Gz̻u�ӭ�?��[_
vEy�{�<r�G��2�嗵��,���/{_Z�?̬���	�y�c¿���mK�]�6�)�Ÿ�>h��K��<�v�Qϊ^,@�6��}#��������^�xU”��N�����/^P~��i���ϻ7J�ﳭR����%3~߈�k�ӨҁU��c�|Q���_{!����װ�c��27ѮÇ�����2�v���>w�WW/��%�����:&���e5�-}��M~���{6�p�V ���Y��{��G�u��س�y
����#�l��
 [...]
M�3l$�aR�? A�bї%IU�~�"�6�i��k�q�	ɩ��IJ����
]�@R���e�-�Yr��]��0��+Q
+�'�Al�83�05o�`��Q
�n/�_r���Q��W�
�GU�XM���A+�w�L�7�T`�<D���I��;����r��rg���›��	��g�����A��[Y��R
�O�3>�
xu�=mZˠ���$O�=���O��w����(�fH3{�
��O���@ܥ��/l��+�G�T�zd��y��
�cL��(�
+I�{<5v~�e�vQ1�cĒ#K
���b�r��H�B�T�~�z* n
D����j[%j�^���

tAݺ��Үt���-vC3�,�����#��3��&'Lxah��?��y.��CF�U�n���n�DaU��LZ]
+�l!j��>
�׆��X�ѝ�H(�x*>\��=�R���ç3&�y��
{O���%"����k��Hjn����o�ɖ���F�����;|Û��r�ƌx�����g�/����E�z�+K6-����b�#��
a���Uِ||��	��g ��jr_ʮ{�Qܺ�b#ߠt�M-zS=��:*6%b�O�"I��DWQF����E���R2v
��.T:��
0ݮ���:d1v�v͂���
�(N�ɥ������)H��Ope�"�8��L%�E"2bRrQW��vه�u
�"�E���u�
dW��\�9�:	�b���Ү�N��"A�3���^
t��,��P2F����*b~0�᧨Q����yd�!ͭ�+F���ם9�
7�~��x�!�����:s��
+���p>¼�

~~=
+WãD�J�i�nc�{�� �eꃾ�PE���_j`ƍ��e�/��du�<�
׏4�P7v������ǜ£u��w���Ѕ�d���y�eY;F:]t�����CR�]��P�T��w��R��~Y�	�,l�-��2vƬ��l�Θ%k�3�f*@�Z��-zM���W4:1�̊%ZԮ2y�
�m<���O���\�n�W���DټS$&�(�g�YBB� ��
@�Vk�X��
+jL=�3$_M��[tHˋ�Œ����Y
����՟�i+���Ū�,qn�z-���q��_�
��"D�>W6zKw��^z�7C&�2�
�
,&%�6�[���'�9�c,Y�e9C����� Ts��!f�?u���кo�:c&�pW�]���4h��ܩٞjERY�C�����z�SEK��W�l��T
X�<A
+T��mӾ���6♋
~�sU�x
'���A2��
n7P��J�yIJXS�>mW��}�@��}����Z�0�1l[�L
}��.J��~z���ogB��^
�&h�h��
+\��!]'��Վα�YKVI��Jc��	�^H�i�HuiX���i�n�����v=�+T_$�鲺n��J`G�����J��`Z�Q�7��A8AE��ųW���1X7 /���:'�r �
;�ُ�~��f_�~���cô����B
�.���
;
;W�6�ق]��aa�P�L�.밪h{��4�g�*�z���h�||X���2�d���RLN\�13�� YzF�vV
���܊�k6�U�1
%~�[�l��T*]L�kن�\mu�㖡o�g��
#5x�Ƭ*ޅ̽�},�F�9Z�
+
�Y����v�q��ٕ_�/��ĻMo=yG��2���-�2B�	�/�1"�a��4*�/*u����6��f�Z��,`Ut�&I���ж�)EdI�D�,J@	��
+��+C�%���?1˺�tL�A�5A

�<�8����e�����w}�p��ӄ�3�T%�OP�+���r�5���Y�^0`I�EFk��G�e�q�T at b���(���LFez{
Blwy���IQ�~Z�z�eCyu�"ۥ�n'���C�l���
}Ǵ��������{7�Vط���$���
7 [Q�U{P�S9�Sy��kM�]k�U�.�EHİ��#&S����A+A�l}����~F��4�4��xmp�s��	~f�Q-Õ��p�(ɷ&k��l�b���PXb�
+?�|�+|
Gc?����ꁥz����2/
|�n��*vY{��=�Hv�is5�
�m\
&���M-v+."q����`̊rZ%�{�U��'�nM�TE8e��VF<�t�Fb𺌴�JQ�YY at JP�
�!Dh�<FL�ԵJJc���*#��M� r!+�U�
<�
7����0UWR
RL4� _[�m'��hPx>+���%+`?
6��졁l�v���Z�k���\���J��z�I(���#�
�Ye���e�J��N�MB�L�����OX�
f��+	��DSZb�XB�;�&͒U�m���X�D��]ꪯqm�U�Kk˩C},�}��
�հ�QI'!�qr9`


�q�q
1�i�rj.
�2�����L�XPdŕŔGA�i�2*���1�aS��8�����d���f���C�
�W�P��j ���r0͠�Q�Rݪi�Yx\���y�ET@)_i:U �9V�V��/4q	�7��C���Y]�t}ʿ�Z5�/���}Ç�Q�
7�I`
��lL��K� x
+�f
4�%��h^�QR=�E$�Q�	�P�UD��ل�z��NG"��UQU�����hm������~����9���W�c,�۫�����N)t���bG�ve�L*F�� )���;����d�ʕY<t�Z�"���^���%�ɮY��4�蛆�59��x�QE�O�c%͋1۝�c�(��zN
+A&c�qn���A�k�>�E��t��J���t�ej�\�+��b2�(tY#lq9;��6��}�9�۞Ԝ:�P
?
\�[�0��t�v'��u^����+�
@2-˟*Q��U���ꇞ���e��RʭW�Q^��
���ԷT�m��i��D6fY4�n�2pD�M�mY�$I!dF%y2�K�(+�$H��{�vu�,Ƭ�_�C�:
$�M:b� ��X9�8?�/2-˨��
K� ��
Ӳ�F�
�@�(�_�
eyJ�WR��v#Q?��C���5]�ɴ_
+�X{6� �������̨��~Y�D��1K�^�^�4d;$Տ� ��7	
+�\�h�)7�|l?����?&����]c���a�he
_�l��|�4�nR�ݧ���&_��.D=i����t<���
+�m�

5��g��g�_�0,"A�BUe
�l�>ޭMx�[��a�
+��Na����G%��[�4�y�ܗ��V�l:���y��8����0oF��"�t���nU
����(�y��e� ��Y�+�Mtٺ��'��[���Z��櫴W\�0ICEU�#C��H0�S�]M1�:�x�)?_]X
��D[zΘ�e�7$+6l	�*c�>�r_J�����\�2����;ΨI��v�yk�=�
�
+
OdՆ��,E
�����c���?Ev:s�y��
3�ֻ�0�+r,Ζ|���C�K�eZ�ZW��&���k*�������7(i�L�/ ����G�+̟�;�_�c�apQ@#��*�F�}d#*ɒ3���S�Ǖ%eU�
`��!J�2j|�$hHbS�UW,��< F��
|���W���B�X���m"�2:���c��{�N��G�Ɲ-���Ȣ�����R���9�;n�������c��1D��0>����⟶
� qW	k$:�sʎ�f������M�е�X��o��Z�
,ե�/A)H3�9V��F��(6���
���
'y�;����45�
7�:�kf���O����$N����G�%�1c;
�UkA���[W�,��x�P%�3�SqC7���
{�:�3 dc�q��h|Q3��-�f��U�j��mW�#2��.�k���P
%f�Qd��2ٚ
���%L�DqhK��Zg�.%���h�e̦��~jB
�%bD��<���
��E���pɐ���~����B�,+@_V���db�M[�4c6�2�{�t#]�>
��G�>q�j�� �,ϋi&rLR$5���C��8��8�{�i��,@��t�����70��+e�9�&GU,�sQ
2�u`1G�Dȱ�KZtTR�Z4��Ƅ�i�1T�t'6l���tT
�
�ZU����JBL at JV�nA��GFL��È�b�B�bɱ`ĪQ�]2oR%֭�g��G�ch���[]t��
�
�49c at s
+�
ZL��)��>J��%ʖ��k����Џ�R_�7>l^!���
͸B܌�����
�0��4^7z;0Ϡusq�:u!j��(j�V�7
y���8w�k���N_�֝!6�-�,�ݤ��#��24��]	�3��tY���"U�0䒳�_p�`�
�AF�\rw�d�}�Qo�u��-��̶g�U�I�����`W�;b;��94�k�>X��Ω���Է��
"�$o�����8��2
C˸+ڞ����=&���f�S�,��٘X��ʰl��=Y�UW�����#�n~!�d]�.?f�1ӝW�Q����Lrɐ%L
,SaZl��� n�M�jâ�PT;i�&��t��^
�ˠ��!u����:E�g%E����W�e�p]v�a�����j��v�k�8Ujn����ĕ�b�
c�A���5*N�Ӌ����/6c	r�
,q�B�6b
�
Ed�sG�;e2
Y������c6H

�T163O�+r��֍����)���b�Ѹ}N���$�������▂
+��q*�n
+5�I�fu���;nz
:
<����t
I
7�`"fL'Cl���sϥ���9����g�:F���B��9��X�����s94��֍(�e����To;E���x����BʐNޅ���yּ~Ǯ���*`S�mP�)qnl�K���-E

��Ek�+�8b
�96^
������q��XY�'jQ��
�*�U��2)d\fa���� �cB�KُD��P�D��n5f͕�ҽoq�&j��֪U�v�p���G��
xJ\RB�3��w��n�[n��o���䰱�	r�*��o��a��M���Y����ʲ�w
+J��'i'�SK�qK�Ǚٺ.�$��#��6�TM�A���/?ۋEi��'���9Ə�C6
$�8����J%����<({d)@{4]&%�J�G��y'ѝr�MO����d<���I_O���I���e�&W^�8
w��dC4�Mv#[܏Z#@V�PT�{��6������Q� ���;N��k
"�L�-zkN��M%��z��d
`�*�<D�����g��N��)B�.��͊g���3Yg���ԗ�XH�X2� ��x?�.� u�
ꦱ���bEx,d]V����v
$�=�Y�Կư��B�u]�X��B��b��
�4�v@"Ȏ�����o��؇X��бD�=���3��G!X���J{�UwYK�� ��nv�S}I�m at _�$@]�֕aIS���T�qsPx
��`�
d-:�j�����*�[N
0Φ�����z�Uw[�b79Ͼ�Ɍ�s_��:l�q�e1h�A�?(��jH:
+��{x�e�#9�eߚcغ��]�qov��q<e���O��)�5���1e�KF�ƽW>����"UD{�C1jkX[��R�U�����g�}?���V��N=%UU�DY뢖
+i����B��U
&?X�?�K���R�A��3���t�
+k���3
̲��T�T}�z����QйP�v?�������\������]�ʭ.�V�h!u!�$Q�
���
�c#C�i��
+A�qغ�(̼�pҷ6C��sT_��U?��(��$�C)@�Q���M���y+6+`�U[�F/L퀄؀-����落�
Y�mg ���go�q�/�Y��΃���T�W���Ӎ���j(�nc��Wf��i��p���_暈[rx��z/���s��Ƣi�����
�A�ES&��9u-ys8Ջ�L�e�~ |E��qd3�ؚ�ˊ�Fi>	5w>����C+�Ү�qT+v<��
�捣���ު[�����X��@CM71�&O��+VH	�=�
����,+��{쨰Gz<�$I���0��1�4/�-b��3T�����K��QǮQDž{[g��9�}�[]����u'��U(|���
�co�����9�C�`��>vEݪ�����O�t�2���O3�̈́r
ⳳE5�
�eg
��w�,(�U5
ⲭK���W.r����N��
�ή��~%�of~�!ӏ�p�r~�-d�#>jf�<w3�[�\0
+��*�̬��֋�M�2Vsњ�V*��D�->}sPo(,V��+����C��3�c���2Q�:9���Ml`�k�_��V����Z]�Ƥ˾\���ϼ����f�3+C��2� #�0� #�0y��n�9s�??��{�0q�B�K����������U-����w��y�o�'#�0� #�0� #�^�6�C����_�~4�u������ʔ	;+Zq]F�`F�`F  ��/��2X2�\p�XF�`F�`�S����h1c���ՔFG��8u�[fF�`F�8�L�>���7l��hSژ��>�A���F�`F�`F�`!`��m�ʬ��
+
+���#��V��\�?�8�7"V̮b��
;	
+��&�
����
̴����	0Of[�P��0� #�0������V����6�ϴ+��r��U�+W9�\���
�)^���yηn�X�C�7i�.�۽�‹H���ǎ�o�(W���������h��*��LH�D���7�ts���Q��Y5������ B�W��It
�3��%3}2�;K����2�2�Vh߹ #�0� #�d;�	��hd��������`��^{�U�T	˻�y3��ֿ?�8 at P�"E�E�;:���'�
>|X�������Yw��1���Gjj�wu��_�X��>_���9�GL��B��Н'Nd�zpE=0���6J�Y����6]��|B5�� #�0� #���tٲ+;ݕ���߰,��V�X�J�ʴ���*����%e������6o~�g6hp�/�J9��[���
+�˓�}��u���3�_u�՛7o�vW�Z�5�������gaָ���͵E�&ϝ;W���������j6���}����5nBu�M���?_�9�����uv��k�FWf�ͻv�:xP�Z�j�}�]w�����B�1cF��W�sϫ��C
:xP�����V���������W^y�i�K�rƙ�.���g�+�		�f�+����Î
�FI=0ʗ+�SP�R%��᩵����sɒ%W_}
����v|���ի���
�5~���扦�_,^������_���(��sXΛ;�q�� }��M;~<��3q�pF�`F��e)v�
>�� �r���
�U��/����7�y��+W���ؙ�;��1�ܟ}$;���o���_>��'C��d�o�=;W��j�7_c����Eo���wf��ka�u��+U"<���c��M~���_~�
eRRV�/_>e�
+l��7��׫W/�2*V at s
.rW	@8)���!�W�Hy�mڴi�?iW�G�
��ȥK��P���#G�;��'��\��)o�uVu]�_
���>_T�P����������
4����_xaĈ�.,V�X��:��g�}��E������I�d�� d�;c>�kZ�W&L����Ӧ���'�
��+�Ё�0� #�0�@!@�-���N�}�r�
�� 3d���`mޢ��9�a�O
��?Ǐ�g��WT�zz˖-�1p��S�dʅ<��{��r����>�x�?֭[���ͺ�s��`�QF�ʕ�T��5ަ���q���?��5�駟v�x�%D4�NJ+�w�))�Q,eŊ�=�c���F�.)\�Pte�U����^���ip���?�����n0�
:�v�e-Q�Y�&O=�$��Z�'��k���5k`���
���ڵEɋ/nЩ�]���P��sj>��C˖}]a�ר�񐠵�9�x�K.ix�95
���u��

�~>��K�.5��=Om@�Twl����0B������c\Põ����)
r���bF�`F@���1ڲ
�_�
�XB�Gs�.��3��L��D澭[�����o�Q�\Zx�!|�?��O�q��-47p�S���?·��
/$ib�mX���ۜU��%�Ԩq�{�	s��+V��u׶QҤ��>6m�����������A��w�iִi�*=ٿ�W+R�>�xzz�=ݺ�
�bh��֮�㎻.�wQ�s�C��(�.�@۶u�ѣG[�U�
QB���k�~8���矩�ƫvt� �֊�R��ϧ�+�z���x(c�qOm@�L_���/���2�
%�����;�O�gF�̎gn�`F�`�0�1=�i�\�Y9�*'T?����q�g�i�R�~"]�����|�������/
.
�
rt[h�R�ʚ�#,����TY�C�3�{�
��"����@H�6k
++2�ʍ5*W���g��fݺ�+W�CNj ���3:w�<��W�

�ꄉ��q�H�;�:�3��9�?��y�%�s"]������)�

M0��̟���=k�����Ѻ�2�w!s
1�aժU#v-x�fB��0� #�0َ��*�~yŌS^:P}��ޣ6�=�fɒ%��5�2W��$>��nK�{�Y���������6X*����?���!�xv���m۶͛7��c�Ƨы�>��������6k��A���9�ȑ?�ؐi}d������T@�۶m=p�@���C͚g�ٳ�
D�áx��˖-��0O��)�֋(��!?�O�s��� D��ex���a`S�
�5j�HJ�Őɑ�F�`F ��f�v��(��)	��,���Frr�>}z�����{���;ڶ��Y�?
=zL<�c�v�����u׮�R�d�o�S�6n����ɓ

+�L�j�D�O���=�؛����y�K{�/�MÆ
��(}D��O?���CrF����Ë.��X��qi����<���˖�s��t���.k�211) at�H��_���;��W^����QϞ=�|j��yA8z{�t��1 B�C@��`ܜ�Q�Ni�#��\�A��k(<��Q���-N�?�9��7�%F�`F ��f�1
ɒ����-^�L���zp��'��y���\s�ĉ�-So 	�.m^��Ŵ^��2bij��~�u�_��Sz�zح@�ʕ�aȐ!�opA=84gƆױC��v�g���G�&���9sҮ�����U��еGz�nҴ���t�Y�����B
?�+T(?zԨwf����_{������!	�����s��a�]��ܹ�q}~ƅ����1�"�t9S�� D>#�c>Z�0����A��6m�Ŝ���ƅ6fF�`��!�ɖ�V��}��W���������/w��b�H?~��F .V�YӶ�M[��
Ǥ�*raF�`F�894��鯿<w���v�p��5k_�|��M�W���ĕS|�r������X-�϶��
jQ��6���O��F +�ӭsn�6���!�PWn��-̕C��� #�0��)B��ŕ�>�e'W&�lp�N���,#���\��-�mb�r~;��F�`���@��z�]�:�L\Y���D9���yzp-F�p!p��
�ig�%3�3ώ͌ #�0� #���I����dN��T�	#�0� #�0� #P@�T�aA�bƉ�06#��w�#w�`F�`F _"��2P�3��>�u6,�]�`F�`F� !�9�E���r������7��o�rƍ
���>ӆ!�+/� #�0� #�0�@�Gி�<�
3���gqe�,��?|>-���=dF�`F�ȧ��}�;v�^�j��ݞ],T�P��/ix�Yg�ݠ�}ĕ�99!�ƕ�Y�HpXp�̕���n1� #�0� #P0ذ�ŋ^uյg׬	Z���.�Xdd�
O�d�>t���ߗ˖^q�7�bre �3�` ƽdF�`F�((|����/jp^�څ��N�����㩩�ǎ
=z���#G��V�F�(��ɘ�G+-jn_b��������dF _#0eʔ�/���3���_���;ʝcF���ii�4i�s�G&�X���. at I?)V�8E�%��`��Î`
+(k֬���y�������'
�^�z]t�Eh��?��J�{��8p`���W�^�v��PQ��nhC\�`��� (rѢEC[,T��$���"Ոc�\Y����B�rF�`�1_~�%H�o����_?��'��eʔ���{���O?�t�ĉ�n���N�R�J���j7�!.�0���E ���;���>�HL��f�S{�uF�8�T�T	�q��������C����\s
���?����OϪ>x� n͚5[�l9a�m�c����a�>��z��
��n=��3Z�
+�۷�G�
�{�\0h� 4G����7ވ�s�9�l��j7T`F w" ����u�^�m��t��Ebd �c��;O2k�0'�bŊ�@
_74
N
��/��bΜ9p� �%]����׏?���_���VpȐ!˗/�6m�G}���߃�f��?��o���h����|8]���[�X�b���`d�b,�`�\� ��7_�ݷ���u�"���۷y�e�d���1
[ƾ\�EV�`��� ,Ǡ�M�4IJ���ݻ�^{�g֪U��\�lO
0` �͘K׳gO�V�S��.î��p�={v6����SO=U�v�F�=��C3g�$����+W�+W�v�lT�E1� #�;�f��C\um�sΫըIӃ���~�MU�,�
s[�ve��<�f��y�Y+F�894h� �ྈ.��/R��ׯ�ҥK����}��
�=��?`�N�:T̕6`HFX"��
,��?\&��D�{��?��
�N��A{�.�%0� #�/8�j��[_%��'%����U�rF�k�_�q!���ˊ+�$Č�`��/�w�`�C ^�}��ƍ?��ó�:
�a'�뮻�����k����G�w�� D(�������e���C#~|zpiF�`�lB����OĂ��\�h�T{�!M��H�Iʄ,x�d�`�lUΦ��bF �"P�zuPdD���oݺ�ab�]���ց�P�p���~�-�ܼy3m�L�"E��ߏ
� �}v
��i�&�
ړ]�Y#�0����[7l��*x2n㔑�8^@q�n3� #`C ��}'O��pl
.|�W�p�R�ڶm���O���[�a�h�%:u�bL��������sυb����w�v�?�m,~U�㯺�*�;G�q���r�-���
+Do7�MpEF�`���|V��+����DWXIF�`N"�˗饗�y�
�tC�	ĠЍ>���O��
y䑮]�b?�Z`bb�=��͛7��U����^K�50��X�������_���6m� FG�|�q���V�"#�0y��b�����o����^N컱A�N�=�c��y�?�3#�0�؏�-�o�9�:pӌ #�0���g�E�╏����ع+�U���#7]T��

�6+8�+�_�V�$#�0xY`
+�Ν;A�njs��78�Ì #��J6��s��ֹ��ZW�wޕ=k��Y�
՚w�z�=U��]�q׊����%-װ
J�1lLݎ�+S	&ʹ�\�R� #�{@$8�C�7��;�D��'�|2��ʚ1� #P�8t,��Ѵ�X�
?p���?R�
�^�����П1H0�O�*j�< ���#�f��w
�nj #PP��ː���c���/^�xAE���0�@
G@��) ��[$���}��8�LF��W����y�\��'����/'�Qn�`F�(� ֐]M��m�GSX9==��
KM��؁�J%��,_�޶���|��M����C�����gF�`F�(�H�lf���+g[���
0��`F�`F /#@�H�9|�$OQ���Y���i9�����n8����<��O�<P��
����Y��ԩӥK����7�{_x�u��=q�C�\p�={���_�z~��'�{�%KpilܴV�Z��`}L
�_��EU.�_��*� |��w�ׯ����F�lذ!>�?��Yԕ�>�b��bF�`�1��E���}�
s��_~��ڵk�Ν���
�J���[(�b�
+lG�
�g͚�I��~;f̄VA�*d�*V��W_}e�
��iӦ!�l�
=
r�-[֫W��c�bv�1���iҤIo����ᆱ���C8�r�������1����[B��{};w�С��,RET�X1����0� #��DkJe-�YcI�i~:Z��+G�ƨT�RF�w�yH~	�n @(Y�\9�\�2��@	�0Z��۷]�v/��rh��>��U�V�[�ƆY��_����>���_�z�g��݇
��W��C �H�{vӦMa/G�.-�O�OKɒ%C������$�c|[@vb����w�q��,��̟��#�0� #�g�0��6
�����
��ǎ
�3gli 
+�g�ȕW^���Z�?���2
+c�]�!|�<+��۶m�����u�]T
�
8P�^=��
O{vD}B��
8�-[vÆ
�/l�#H��U0��+j>�9w�`F��/������
X�ED��$+�\H��
�2��K��c!� ��v����vkd�ںu��_W�
;v��4-�g�ڵ���K~ �t��^͚5�{��ۇm�����]�>��hѢ�Á%�rʗ/
1�HOl�:�w3�� c����0� #�0�m[�S��1�PR��I`N�?��3�x0nܸS�a�]�����)SS����zΛ7����w��a�����ر�c�=v���(��d�b2������S�´�/�ƝbF�`�	*i_��++�dJ�'�hnիW�Q�F�-0�i��٨��Q�P�,b�2���}<�S1��`�$?�ez¨<hР�5k�
=Z+3`����ٳG�t�aT�v����϶�ו�s���;�K�������w��3g^q����4�<#�0� #�G :�$�&��Xٕ�3�ʖ�r��}�~o`p�� qX
ܱp��Y
�
M�4	�֗/_>q�D2�N�0�͇
2���R�  �z?�,

�8�%����� �M��n7T�,����Q��r��
���X�
�+��O?���y���6#�0� #���(��Ö�t�P:O�ܵk%�!j�g�a��1�i�&��ޙ(I~�0�b�1
+�UТ]�!��ͣF�����8+�/Fܺk��a��`

;
Uڶm[�B�3��z�͛7G�
���
�O�8���������@�������
4���{g8*��Ҹqc�Q1cRIx�cn(��0� #�0���
�,��\�U|e���
����P̋/�.��K���S�L�h߾=\F�
IbP��V�m��n�	�����vժU�r������D;{`vhw4
X�A_ at Vt��	r�y��*����(u��s�f�/?}Z�
��
>
�t|���ӧO7cR���L%��#�0� #���
���d=N,v��[7~=~�x~
G���/�����v,���{��3'3!�In��cF�`
+,���{�A�nk����������Xj����P*9%e����z��1sV��X���7]T��z*f��6��q�Q`�3� #�0� #�P�6
L}�a�r-O�p����SQ@�-w�`F�`F ����1ӱ�ۗ.Y�N�;�c���zX�,���F�`F�`�ҹB�X�r\c'T'R�eQD��sW�uc�F�Ғ�aF�`F�ț ŵ\���С/�QΝf�	9k�0� #�0� #�G�S��°�3N��aPƪ�2�H�XMF�`F�`F ��2���!���)ʅ{`�Y��hA�-�"�Y�HY�Ii�ty�нqT1+�B
w��eݺuQz��h�\s
�3����^B�1c� ��Y�Q��{�S�w�޵j�B���>�]���?�DQ��4���ׯ_�#�7l��l(�7��l�

�/#�0� #���^*�5�/����{-
+D���_�]�i�3�gϞ��GI$A�+V`;
+R�?k֬
 �
�X.\��~��{�e�^}�U��ݺuk��_~��*���o۷o��i�?�
�Hy=iҤ��~�̯��.���ˎ�.S��ׯr\#��b�Νͼ�mڴA֞���`F��K$&��d#����d9���qA3�R�R�*U� ��w"�o at E�,W�

+T�\�Q��|����,zH�
\��WF�=}�9�Q
6c{��K�.E��.���
#1��(
���_ͯ]�/-%K���.S�@�J�c|s@�>�"G������Y����2� #�0y��t+��TZ�+è�Crn_|˱c��̙[�B|5#��%8%%%��޽{7l؀�؎2ݪU+͕����_�
8P�^=*�
O�uh��{�
xO+[�,�"�u���=�w8aL,��� #�0�@
E at f���X��n���'��l���Zx2�
 ���޽;�nM^ժUs� �
�	ڏ
pel�۷��M��n��vu��E��\Yr
E�|���|����?6@��;$�_ZZ<��h�XmF�`F�   ]��/��*��Hr�WFT�
s����g̘��q���N����_�^�X`N&�����9P�5k�9!\� #0u�T��
2�wF�`F �# ���O��-Vq0�K��#I���kԨѢE
�g�={6�z�ad=�
���r��Z�*Z�s��s �1���|c�_�>M�r��`T.S��[��]�W�@A��\~�Y�����{��
4�W̜9/o��O���"#�0� #P� 7I��"����D��S�f1�/�ѯ'� � U)H
�e�,\�p�����ФI� !`����grÀ�2�bP���
c>"��_)���uC��b��z>C .@��X��
c�Sxe ��]wݕ�:��aF�`�r�
����<�&�a'�/��=ڳgϮ]�@4ǎ
�h�˞%�c۱cǦM��B{g�$�q�X�m�(
VA
�j���7oF [...]
+��W_}�xfl/�v���
:t(_�	�Dv"�����{�U��ָqc�W1cRK���av�ͲF�`F ��xq��r,o�r� �
��:|�>�| �Gǎ
a�%ep�)S���
�o�
�#G�$�Q��V�mG_n��&D��Egp�|ĩ]�j�\#�[p����z�jDVF-��5?|���ĉ���p��B��q�Fw�=���g��k��Kː!C�|:X@>D`������'O�>}���z�w3d*ɇ=�.1� #�0yiKY��ײ�Ob���n�����[�i_FU���c�&R���00RF���F�`F ����OB�A�nk����������Xj����P*9%e���fO��҇+v�p"IR��<��X

��
-`��0� #�0� #�<(u���
>��������r�%��ٽ�Ţ�I�1#�0� #�0�@�#�������s�h�_���ٯY�D
�ر���t�MsF�`F�`�|���q-b]ȉ|b����R"Ht��+��Ǝ�|ڸ�� #�0� #�09� ��"���'��&W�IJ(겶9�B� #�0� #�0� #�K!0�*2�W|eɤc12r�ڬ#� [...]
+��`F�����p���z�Y3%��
v��eA2��k�"�BrrrϞ=�AAId,C�+V`;
+��?k�,$A���7WY�p!r�!
	rY##�
!-2������/T���~۾};eMCrA����'M����o����ڥ��r���CHZZ�*U
+ ,X��S�N{���5.�_�ׯr\�	C�s��f>�6m� kO~�8��`F����p2ɵ���0K~L��"0億J�*U�R&UV�;�Tyn�P�\�r�_�relGA�a�F�jd�C���*�=�
�2����Ԁ�>�(��f
!`�TF�
+*\t�EP���a�Fa����j~�Ri)Y�$nٲ\|ذa�ɽ�:F��ɗ o%�1�9 u�	�;���qh�̗p�F�`������']-�Ō�� L.�Hǎ
�3gli 
+9�,�)))�a�ݰa�c;��DުU+͕����_�
8P�^=*�
O�uh��K�F�ŋ�P�Yl�B �ie˖�P$��Q�n]�|W�C}��`F�`r)�_�
u!��žL���r#��� ��“!�|�
���{�� �5yYT�V���.|'h?6����o�>�%;7m�:��;���E�-Z��g�qF�^����s�����Iy�{��4�˗�����^`�Y�Cb��i
�y���<#�0� #��P
�
���qM$Kd�2����ϟ1c
ƍ�;���+~��WxJ`�9��r��W�@i֬	�����{��q��A�+���d�i��?�:u*L���/�
F�`F �!���	we��2EV	�"X�	��իרQ�E���g��
O7��'ՃQ^�>
U�VE�z�y�`3�=�o,��ק�U���eʔq�w����
(w�[�u
�'N
:th�}g��9���Fe�A��+f����������#�0� #P @��
0e�ba��a��
D�B�8p�ԡ qX�
��p��Q����C�&M��cv
���e�
�A�W
+r����~��v�
m�Q�f͚G�
	��E(�znF .@��X��
c�6�2��Srs/X7F�`F�`# 
1��p����$��2!�gϞ]�v�h�
;�$`�E,,ǶcǎM�6�!A{g�$�q�X�m�9 at a�
+Z(T3�߼y3�!�h���
��h�-�WV�\I�iEW��E��U��
+��W_}�xfl/�v���
:tr���ki�p���(bq�l�2��8쁛z�פ��{�U��ָqc�W1cR0�O��<�%V�`F�(H�y}�
+
o
�
È����IH§�% ��~t��f]�= M�2e
+�.�@�����0r�HB%ᨀ
�jl;`G�5D��Egp�|ĩ]�j�\#�[������Y���4����ĉ���p��B��q�Fw�=���g��k��Kː!C 
+�0�?��Cp_�֭���\�.(��>
�o{���ӧO7cRi��!SIG���0� #��N(�5Qa햜X��y�6~�����en�wz��~��rg7X+F w"`&�̝�V� #�0�@�C >~��:h�mm�
8�z"=#==��
KM��؁�J%��,_��쩯�4g��I�5�w�z5ϿPڕi�����b�#�0� #�0� # ��e��DfŐ�C�d���@n](��{��EnU��bF�`F��+(��������(K
�O#�uJ�7vld=,]��+k�0� #�0� #p�@�8�nD�caM�a1��
����A
�ر�2bF�`F�`��.�c�T

�y�D��]1�
3� #�0� #�09���H����DZ�-/�(1�r@=�0� #�0� #��$��.�_�����b��Ϡ��V�5k� <-H���
�@��#������O��

���Y��K�.�֭
�S���Sb0#lsݺuyj`(�\ "HT9f�DP^�~��ްaC��?~<	���vQ&cF�`��� ��#���4��)���-�h�|uk׮Eڅ���={�FId,C�+V`;J�!֬YH �
{7n̴|?9�W�.R�H�bŐ
"�>\�E�_�~�q�
:H�ӹsg3d�6m��'T`F�`�S�@,W_,��l�_��9��i�J��T��nHȇ��f�<w=�,W�
�W�\�Q �|�����B�������g��j�
+��E.�#��� �ȝ��}x'D�t3�e�̟
&#�0� #��.T�
�
�R��WI��g9��رcs�́-
D!�j�E�씔�xjx�u�A�9e��Fօ�F �@e˖ݰaA�
x�hX�]E�^_�*#�0� #��L�=Y�%�q0��~2�\���d�ҥ�&M�P#�E`3޽{w��:�hS�Ν;�n�z��_v�e;v� k^�� P�|yT߿?	���~��/PZZ�[V�ຌ #�0� #p�/!��`��r�_4�� s����g̘Q�d�q�Ɲ���	�]��ʔ)Ss�Бl΢O�N�
+�2��0� #�0���Z��P:
+�,�_��/z���իרQ�E���4{�l��t��zR=���uS�.0��c�$?vYΝC6oi�o�>(L~�X�&v��A�{�̙3��⊈��y��-#�0� #�/PFc����ʂ�EYٔ#Z��D�B�8p�� qX�
=�Z�
�"v�-jҤI����m�/_>q�Dʕ=a��C:t(�M���� "��
�w�@�W�
漚��+��O?�뮻
+2J�wF�`F �" (r�1�O��#^�p�Ҳ,��F���ٳk�.L`;vlӦMa�=K.#F���M��B{g�$�q¸�mF(
VA�v
��͛7�5
+F�~8� �n9�/F��k���\�`�
;s�c��x]|��
�q�oiܸ1⎿���1��I�BoXGF�`F��!�!3�H:,6e:�
�V�F��7o~��w��Qc�_tyʔ) �`�۷�T��#G�(��r� �ƶ��n�	������vժU�r��!��+@�[<. at e�s6`��h���
>
�t|���ӧO�w
m �72�d�,�`F�`���pK���$K&��������7SR~H�
d�g\}~�;�{t��S��"K`
+fBʂ�k�)#�0� #pj���]M��m�GSO�g��g��c�iz;��B�䔔�|���c���'��(���N�����}�)��˧���:#�0� #�0� #p�Pɫa[6���MῬ��'Y�8��p���ĉqHᢌ #�0� #�0��2�<�A��񕥩�\3"N�; S�
+����t��3�$#�0� #�0�@�C�"�/�"�+Kz��"ŵ�Ȝ�4O8�gɅ��J� #�0� #�0y
ɃE�8�ape�(���$�2bYD�ܗ����2� #�0� #�0$��/���Aa0,�ein4Y��c
F�`F�`����E�տ1���k3���rP��5k� <-H���
�@��#+
ɦ���O��
����Y��ԩӥK�u�օ�%O�ZOO9�
���u��5��#����Q���K�.
m�
0$�3f
"(�_�^G
+oذ!�ٌ?���Od�d�F�`F w! W
I��Å��G*�(�.�gbߗ_~�v�Z�]@��={w%��
eV�X��(�@��Y�4hp��oܸ1����^��H�"ŊCz�����åJ�B�,XЩS��{�FQ��0�@�~���oY��{o�Ν;t蠑iӦ
��0P� #�0� #�k�i{D���H���jʟ�Z�փJ�*U�R&Xb��fڀz(Y�\9�\�2��� �0Z��۷]�vH�
\%@��
d�kժU�֭�A·l���a��.�u�q�
H(EU.���()	���_D�>����B�e˖�?1F�`F��uh�,�1Qb+�u�h���ȖE�cǎ͙3�4�
�02f���d]�Cbρ(c��n]�ti��x�⬷�
+ p*[��
��؀����U�P��U 1�.3� #�0��LY��i�,X2�����MGxGPZ8�N�4)Z�̔��x����v�(rM9;w�ܺu��_~�e��ر����8�^�z����aφ!0�X.��˗������Ol�:�wH�����bF�`�܊� ��e�����]Y�g��0'ϟ?ƌ%K�
7n\�*��
�.��Aeʔ)��V����˗��������W���==bMr?S�N�i9���2� #�0�_YyY�e����*�>KsT�r���kԨѢE
��ٳg
Y^nYO��2�����aʁ��B,��]��
X��=q�ġC��w��9�sI����M�/
����e~�9s�W\�_?�t��`F�`
+jb_�
���s�ȨLa2�T%Q�A�+ĉ' 9 at y
+���ѣ�U�p�(B�,Z��I�&Y��Z���l��eO�0�Ї
r4Q�f�#G�d��#뚳�<� "��
�w���W�
漚��+��O?E��<�
V�`F�(h��n�ˆ���G��e
�H
�{��ٵk&0�
;�iӦ��"v�#F�xӦMp`�ޙ(I~�0�b�=
+�U�B��X ��ͣF�����>[��r0{q�ZQƂ
pz����{��
��_~�e�ʕ�=�\˖-�n�.h����U����?�8*�7F��w�}ׁf�a:i���;�0� #��f��0
K��ز���rº,��E"ʨռy�/��cǎ�K�
+:e��]�����c��ȑ#	��c6����	��@Xi�
 qjW�Z�/�H�l�|�
x\��h�l�n
sժUa衇�5k֭[7ؕ�_97�\�����0�'O�<}��w�yǡ$�y#SI.ԜUbF�`�`፬��D$��_j�ܼ~��@	M�*׶�#�?y�!c���	)��⒌ #�0� #���W��i��ms�h����
�{,5MocvV(����|т9s��s��߄mYJ��E�3ϭg�"��$:KIV�溌 #�0� #�0�@
B����'gd�Z�b���?��
�d���9��'N�lU�=F�`F�`�|��
+�A�:ǵ��I"�2��>�F�La+�K�����
bF�`F��0d���II�[A�]Y�!�s#O]=�g�.�0� #�0� #��H��$e��WFI3N��&��J���2� #�0� #�09� q`6lٌ�,�3�\�
%9�KeF�`F�`r%�����D8'+�
aP&U�9�L����Y��hA��\�"�Y�H&��4~�<mh|
Ů(V�N�.]��[�.O��O>�F�,Y��.����z�#��郐���K�.�2�A�4%�j�B���>X�\y�Y��� �ڌ3�ׯ_�#�7l��lƏO�Od�<
+q� #�0� #2%������1�k�<%}0��n�ڵH��
x={�
V%��
eV�X��(:C��Y�4hp��oܸ1J�Y�lY�^��J�R��lÿ���)6--
��K�*�N-X��S�N{��HF���~��I��~�mw>���q���@�~���oY��{o�Ν;t��ۦMd������1� #�0y+i�

�ز��'���V���*U�R�
+L�0ĂG"�o@%�,W�

+T�\��'@>��}��m׮]��yHRݽ{�aÆ�p�
�D@�-Z�p�U۲e
�ʨ�v����;�@BAA�@���vn�
�
ݝ�-J��L�F y+A�_|�E���;�o��!����8�g���{�0� #��A;F�
8`
+��eW����˱c��̙[�B�Zq�D�씔��*۶m��F�>}`-���S�N�0�M�.]�/^쨎/�
�W�
��Ft;wM�L�@ �=e˖ݰauu���]�w�������
��`F��#P���B�,�]
��]�����N��L�9`޽{w���w��u���͚5��I���
.Lnʹ�q��� ۾���aφ!���۷�.N�Ρ�DT���ʗ/��`R����!�S'r
�`F�`r!j��.D���}+N%)��<����ϟ1cFɒ%Ǎ�NN���:v���c�
?~<b;����l������{��q��A�+G����
+�`�a�p��� #�0�@�E at F���_���W��`D�D���kԨ�_��ٳg
��冑��z0*��9��c��ܳg��ѣ#�/��[��b׮]fyX��1q�ġC��;��^�r�2eB����78�?���7.���̙3��⊈����#�0� #�W�/����1�Tt
3FFĎ!��ā�
�
+�Â8k�?��r��-Z��I�&Q��;b��� ���Q
�	�O��)�f͚G�
A��
+r���T
~��ώ��)P��
�X�
���1C8�+�W"��(踳� #�0�@n@����J*����y�W��#�

.,� �І���"v�W۱cǦM�����3Q��8a$v�q���*h�P�X ��ͣF��������(r뭷���G�o(~��0!/\���#��(ï�_~Y�r�s�=ײeK�

��!���ꫯ����D��X�A �U��
� �J�ƍ/�
[3�0W5�t�;�0� #��'�_�Vc"��_YY���� %����ƀ��� N9e��]������ua�ȑ� J��b��X��Zk�
 qjW�Z�/�� �L��oݺ�R?���4�0B«V�
+��C=�	�ݺu�]Y�+������{�]���S��
+s�|�����0�'O����؂x�B��|�_�#�0� #�� �d岬Llj�Ϩ�ۖ���A�zKbB�J%����֏'��sg�
F�LH��M�xF�`F�P�������ֶ́��'�3��3���4��
�Y�TrJ��E
�.���Ty�`E��j�רk�"��)�5/� #�0� #�0�@AB $��o�b���9�c�F���sv/'N��]��6� #�0� #�0y
����>�e�+�upeb9W����d=,]^;��/#�0� #�0�@6#`ČS�Ѐ��G��20.�u
w��r2u�F�`F�`�+nJ�|0��ʺ,7�+�/F�`F�`F�
+
G�0���,����
#�0� #�0� #P�0r�HJlreaQ�솱f��Ǣi�s���~��#������qwT1+�Bw��eݺu��	
+ ~3���{ʼt��`}p�#��nݺzj���\#�ZϞ=��D�1���$���zz��?�Q޳��(q��F �*nj���ׯב�6l�p6�
�D�˜V��3� #�0�@\���-
a_�H�JG���֮]��
��ɠ����$2��̊+�
Eoȟ5kV�
�3/8g5R�!?H�R��̂
:u�w������ի�)R�X1��0��]��iӦ!�`�
=�!�/-����?������9s���9��"����[�����Ν;��
�M
Y{�(��3� #�0�@�!�c]Pf�>�P��#�W�T�R�*U`ʅA��a�
P
%˕+��+W�v�NB>��}��E�<�?ϳ�-[`g
6l�#�6��!�^h�}�Y�V�Z�n�
�0��~��H���׺_����%K�*���
>n�3��P@�@@(F�c|s@�>�"���qٲe�t�Yl��3� #�0�@6# S[땄[9�

C.j�ǎ
�3gli 
+Q��Y�SRR*�.]G/^
�`�Q�pl�+“�>��F�~���z��&Ι�oVZ�Q��Nٲe7l�@��]�U�Pę~� �eF�`�S���A��!6n�A��
AiA�
<iҤ��츻w��[ý�W�^}�����a���TF�i~߹s�֭[Q���.۱c�[�B�k׮
G�1�S�-Z��o����ȍsp3�
+��:�˗���(l�:�w-���y�-�
�F�`F��~,K�c
+�ŕ��>#d\��aN�?��3�0nܸ5r��D�/_���_��ـ���d�رZ�]���ʔ)Ss��}��͛�%K�
>|�ܯs�4k�,;c�s@O�b�P�L�:��xkqyF�`F�89H2���>Ѭ�E"r^k�h�T�^�F�-Z� o�={���冑��z0*��9��VxNO�8q�С&w���äjժ�g`��N��`��鲌�0*4�f͚�G��U�
�B�7H���n��g:���x�s��B`߾}E~�X�&�77�{�̙3��⊈��٥�aF�`���

N���:ǵ����}�~�^p��� qX�
=
+NY�p������C�&M�
�=r�H��������&L�?�C��&��]|��{���t�zF��i�
C�oC\>s 
�1|��z�z�0����O?�1[2'�k1� #�0�@�" �0�����}�#2k�ܵk&0���iӦ��"�#F�xӦMp��ޙ(I~�0�b��O��E�C��͛G����?
 
�U�������r���{�e˖vh�D��k�����`��=5�m۶*T@�8j��K�I��멻��o >n���o��*����{����#
K�ƍw��w�u�x�e�F�`F w" ��.
����
)
+F���/���
;"j,�<��N�2dl�}����4r�H%� �
�jl;�A�7VZt�G��U�V��5�Q 
+�
+�z�!�w��
v��s� ���!؀��

q�
�JVB��eȐ!Z��z�*�����9���α�/�>|8�!���ɓ�O���;�8��`��T�/�ΝbF�`�<d;�;\$�8������n�J��NV+S���l��F��0w�8��	)Ob��#�0� #P���_���v[�6���H�HOϠ��R��6v`g�R�))�-��b��v��U�b��FFF�^2DL��:w�`F�`F��!�� ,�XT�W�l�� �d9.�ؽ��D�Y򊞹1ք`F�`�S�@FzFZZ�XO�O;At9�ę�۲a�O4>�R�+��𖹯�r�

+`ʠ�J▫T�+z�*��2샑N"w�`F �!��>��|�۟�K�2�K��j��]Gؕ
K���ݟ~����~������&
+��^r��yE�܆��0� #�0��)D`�o�_������O�������8Ȃ+�q���������P�)Ԓ�fF�`F�`N>���c��_i]���
�
���'��3�2�*��-g擯#��0� #�0� #��
+҉c��2dH�e#��|k֬�k&-H�� Ĕ@��#+
��~R?]�6t�
Ů(V�N�.]��[�..(��͘T��"�ʼt�R��h�l
�#��nݺ��@��~��	db��k�w��/��R�������g���o(P\ G@R�1c� �����u��
•j����4�D�
Մ�3� #�0�@� `q���!O�ڵk�v9�z��, %��eV�X��(�A��Y�4hp��oܸ1�JZZ��*U
+�,X��S�N{���h�Ѵn}���E�)V��Ch�~���_�p!r
+�{�˖-{��Wc�E���(������,�f���
�x[Ð�ܹs�
tmڴA֞ln��1� #�0�@N ��$�$j��nF
�1�R�JU�T�)]䦆�6 at U�,W�

+T�\�Q:�0Z��۷]�v�y��l�;�a�P
I���$ƣ&Ж�i�:���jժu��������������"
�HI�裏F隻L >n����ֹV� ��� �/��"R����7���В�6e�̖Y#�0� #�d7NlؕeF�x��
;vlΜ9���(d��J
2f���/]�4�.^�8.��D��٭#ʁ�zÆ
��
�|V��8g��Yi��FA �Ke˖Ő��؀�����*p(B��(��
#�0� #��b�#[<�%�U۔;��J���I�&E�9�\w��
`�>�3z��էO��/�
vh�Bٹs�֭[Q���.C8d�w��_P�Z�j�V����L�7��p�(_�<*�߿��c�Y�C—�3o�εF�`F ��4�Ņ�1�a�
+'�0'ϟ?ƌ%K�
7n\k"
~�˗/�ѣ����
�Y� �)S�
�Z�#�V���=q�����wJ��S�´\��̝eF�`� 6��rl_8IV]�^�z�5Z�h�6{�l��t�(T�P1�Q^Ρ>
���sz�ĉC�
����t:���L����V�Z�ɺ�s�gj+���z,Y#�o�>l�_>������
2s��+��"��>�0� #�0�;6b�)O
�Udƌ��~�8q� �IA�
=z!�
+.��~.Z��I�&хԬY�ȑ#>�Fh�j0f,&L�?�C��7A%� �	3��
osgG�������
�r
�}�^�^=�y5E�+�%s�#�0� #��$

DŽ<�s9�"{��ٵk&0�
;! `�E

+,#F���M����3Q��8a$ƶC<
+�UТ]�!��ͣF����&4���{��
P�xW�\��-[�
�Cc ��aN
�1c�8}��@?��
�n����Ih:4�2���� |�8���'��dx={��
�q�A5n�q�10
r1��I��1�0� #�0'����2&���@
�7o��
;v�y�|
@O�L��
6о}{Lu9r$�@I8H`�����J��� ��S�j�*|�FҐ ]�
c�C=ԬY�nݺ���
�
P�
�
ح���~�_��`�
mR78p����q���'e q#��Ç#`
�|O�<y������F��`F�`r;�i9�ę�]����"�y^<����O�nN�����~�@��	)��5F�`F 3�۾_�����ֶ́���W���A����m���
+��SR�/Z4o��
��ZK�����7����E93=�:� #�0� #�0�@�B��l^΅ݠp���ĉ�Jۼ�g���aF�`F "`�+��Hr����V��������W���^�4F�`F�`�ĕm	�r%OZ��䶳�W��m��>� #�0� #��6��Pʑc`�^�>� #�0� #�0�@� c�#�5��ܾ�c�5F�`F�`�N
�ܾ8:�
d�\s
�
�rp�Y�a�r�� �1�2`e�C�a�I�[����G�E����'�
�d��o./��b�ffy��
���!�~�2�Z��
+����ԩӥK�u�օ��O?�p�V�Z~�����)����T i�Q�>}
8`�����`F�`F�A�����I.�ܕ.\�\zȾ�l�2d����Э����۷o�O��(S��޿z��"E�+V
��*BN�^��P��C
���r�����W*�4��׳g���(�
j(�b�
+l�
+Gȟ5kV�
n����E8ꀅ7���*U� a���?�����H�7iҤ�Ba�R��o -�O<��NjC��pF�`F�`Ol���FD��%� 
+�|�
w��T|�>��>�d{�J��`����A�[�jպukl84;�޽��a�n��}�R�J ���,Y2�tRy�kC�@��N����ʕ��ʕ+c;T8
+@>��Hjݮ]�ༀ(Lj�MP+��w_jj*2�a{̘1����fx�	���g&��(}�2� #�0� #�0�n��C��-�r�my�޽6l@>j���\�����#ٵ.���=�l�۶m�c
�뮬��cǎ͙3�
.@��K�.�k"s�aV�߿��ѣ�����
<x�[��M%b��̩��F�`F�`�0��E(2�nu,�,���/(Y�Z5���\�t�#F�S-Z���ܹs�֭�_~9\,v��A�Ĵt��u���͚5sH���N�hѢ�ө�/]��
��3] ��ݻwg���r�-U�V�С^*�ի�P�a�nҤ������~qEF�`F�`��eZ�_��8�ײ�`�S�L�_] ~�|e˖�sÆ
�ϟ�]w�u
;v|�ǎ?n
+�yX'�p3iw�(�3f̀�Ƹq�r�NLLDgᬌ���ĉ1Q8�s���!�v�cF�`F � ����b�Y$:�
0��Y�=�[o�uȐ!-[��G�z1���\0��tY
0` 淁;�3��V�zu�ԣx��j�<��h����0�醑�$0���9+>
�˗�z�W/�Ā�(㬳�����!(.�0� #�0� #�����p��9��Š+b�����,���Y)��-_�|�ĉd'�0a�}
:��`
<wa
�/���-�Gfl�� qX�
=
+�]�p�(B��!>Y�N
�lF��&X #�0� #�0�@\H�
�5f
�A����w����W�\I���ŋ#,�"|2l��b�Y
�hDF<
����f$��$�~�PyL:D�9����
<��!�i�&(�ҡ$��!
+Fbl;d�0"iТ]�!��ͣF���1@�B9+���!+mq]F�`F�`mWV,9��2"��5"�2.L����Z�Ph�̌
�e�fi�Z��?~<��pޥ

������Vm�W]��4�.f�y>#G�$9(��r� �ƶC�M7�BO����7�B�Z�j�̙��Ov���j��0� #�0� #�$��~��5���IG�x��_�?9`���
F��� b�G/�%F�`F [���������ֶ́��'�3��3���4��
�Y�TrJ����2x��wWkis�_רqaW���#Z���g,�`F�`F��-v��X|�ܢ��
:ܲc�;N��M�S7�0� #�0�@�B�F�=���R�����z�̝�ܦO�z��F�`F�`,��e'WNL0`�2�t�e�ƩR3��s�p�vF�`F��G�{��
�y�����0� #�0� #�0;WV,9F��2�����; i<� #����T 9z�N�XSF�`F � ��
�n
�*���\s
���r��Y�a�z�:��yH�=�91���nݺz*
�G�=*��'� Sɒ%Kh����⋡���	��Y
��z��]�V-����ϓ�~!!)y�g�|�>}
8 at U
�kM
]6���q��
.��gϞy�C��'�
=z|��G9�ht��|�
.R��2�J��G��F�`�\���U>��
.D�:d!Y�l2�������o߾
?����ؼz��"E�+V쫯�r�9�z�B�=�Z��/�\k-���b�xV�+�|(����N�4���Fb��~AO��7�x�믿~�'�<뭷��b�
+lGAկ�$ڴiH4�E�9�`�)���^˩ �q�G.Lwr�`����fF�`��C�3F���s�=�|�
w���w�M�UDr;d���Y�fa[�unժU�֭���Xf��݇
v�
7�C�*U�b-ߗ�|�>��y��������S�:u��w���;��"=���_�~:!��+Wu+W���(�ϯ���~�� @�H���9	`$#m�y�Ж�#�v��СCJJʏ?��\�]�vպQ�K/�@�{ow�ڦ|��m��
i؟y�

�N$��Z�I���;Q
&g\�n@
��;p�@�G�����z��T�o�I@��`F�`�1w�/��l-Q,���ݻwÆ
���Y٤��
<�1�K�2�x*c�#���mۺt����+�m����k����E�z��
+66nܨ���K��
�%9�e�����
,s(q��� 
f���F��"����z�}��9�#�:�!��
:�Cn���z+��Ν;�i�����x����
��v�W�/��⩧�r+鐏$�𭂆-[�W֯~�O&��#�0� #��(�%i��Ɇ3�o��5[�Z5��`.]�4�@��)k�Ν[�n�����b��d�.li�.h֬�CZ�
t��E������_yb*d�
Pg�}=����޽��_nҤI���_i�ڵA�ɯ��\�@�F�p����g�
+��/-xOû�9s
U^y啥K��(�p�!O���6mڴjժq��u�ؑ
+;v
���ܚ�u
+�l|9�w���!�D��:u��?�w��~�	�����k.�0� #��b<���	����`�L���Z� 8_ٲe���O����ׇ���:<�{��Ǐ���7�dn&��2]��/�".
�
�2ѯu��b?>����
>�i��IC FYpP|Z	mq˖-��;w�1cp$'';��[��|e*�
�ׅ�����(�� �p�0[qȇ4�ӼC������ #�0�@�F <o_��U�VE���
�
����\����ٱ�\��7]�
 W�={��
=�l>�:�G���t
+��Qׯ|���QR�`T�79��_(.���[3�:�L�{��b?���
�Y���L��s�/xA�.��W�N;��r
\&p5�B�0a�C1�
{���}����}��*���C�%3� #�0���Dz-
�
A��ίѲ�U�X��
n�f�P vP�z�+�W�8q"ىA0��СC�
+�

�oǦpt�B�q��+�y� Lj�A�ᓍHm��C���fď�G/	��` ��x��^�K�|0K���2"�K6c��t��
/
L6ŧ����*�
�OqI�ެ��ʕ��qˇ4|3��K
U���|̹EF�`F ; �l-W��9z*��}��=3��I���_�oY�x1��"|2l�N��fy�l1�	�
�t(�B�Z�bk�V��<˃��~����Wl8���曈Q�9赓(���� ��M�B�۶m[���~��Ӎk�
��G|	G�8pJ�6F�=:F�< v�O(���`��)���0,�'X�u�
+$=$���#G�`�

:W(�'q����?��eɌ #�0���C�����>��:<^�P��G���Ax|„
����&�k3360�m���$��?~<� �p�

��ĥO�����G��v���s�=�*��x�;%:� b�a�!䦛n�
-t���0v�ާ��dN7��s 
�0�j�M �
�ax�M1��C��	��\����Eh
qO�$!A��O��V0#�vR��衾�����pmbz�����!�:��۟s�dF�`F�$#�X�:kV�z��ͲaaY��q��O
���ē�
+7��i�*���R|�l_𲔧�g; ,�`F� �q�á�i��ms�h����
�{,5MocvV(�������?2x����iis�~M�ƍ����_&O�A���0��
x;�W���Ē���&,�`F��^�
ؘ�gsY΍lY�[vl��$�[>{�fi
IJ��~h��LÒ��g��\�`F�8��Hr�9Y�[vlhOh��?����fF�`F��渖��^

nٱ�k��s��aF�`F�`N
�*��"Q��O�r�2#�0� #�0� #pJ���
�Unä�ݕO)l�8#�0� #�0�@~F�����+Gv����O����9 ~0�"Y�f
R �1���
H��=��O�`���
�֭���Qy�����L%K�,���� ��ƭO@w����U2%�����ۺuk�@�ri'�J�����B���oFb�P�� #�0� #�0�@n@�4-;�`D�o�
?�0��,[�
,�L��<۷o�
� 13?�^��H�"ŊCJ<w+�ӫW��c�^v�et�d)���

���l�k׮�}��
�D
y��4Ŕ���ǤT�Rs��]�`A�N����X.�0� #�0� #p��Y���?F���Rw�Bpe�����鐛Zw	fT�ŀDb���A���&Xl8����_w��}ذa7�p�>T�R%�Ћ�dɒ���P�li�������^�ݻ�-��
.���
=z@Ȗ-[`WFw`VG~
+��D}����� #�0� #�0�"`ؕ��2q�`weXI7l؀�̞��o�
\�����_y啺
"��(c�#���mۺt�ҧO�b�՞��9��Zn�aA���o�>R�ҥK���ŋ��i��0� #�0� #pJ0��I�
aVr"@�jժyj
�]��#F�D-Z���ܹs�֭�腋Ŏ
;`v�u�����f͚9�5h�@'Y�hQ :��T4�HMM
(������*U�V��!C����s�g�����۷/�3Nɩ�FF�`F�`�A������-#
��eaZ�2e
+���p` 1-[�,<�6l8�|}���ر�c�=v��qSܜ9st27�κ��`6_� ��'J�@�1��ȑ#�ݯ_��˗�%�u�+����٢0
aF�`F��)<�r���1ߋh-�%����˭��
+;k˖-�Q�^Lѫ!L�3]�
0p��={��
=ڔV�zu�L$ؙ8T?=�&���-���~��(��o��o�
+H
����P'N
:t�q�A˥F�`F�`r���R+�
�bŊ���p;6����SO#��`�d'�0aBJJʡC�t�r��

<�r�ƍ��&T�L�4��鏩��j�
+�K�Y�&��9�E5�:#�0� #�0�@N!�Àm\�rWe�	pÅ_������?�\���+�-`���ɘ
�`�X�;��b�ݼys��@�5�K3B��bk�V��'�M�6��Z�Z
���?>jԨ�>�8Peا��1��w��
0�'%y���j�F�`F�`N!����"1��>$
GDde\������hܸ�63c�I�&n�4�b�����IHF�Z���Q\��o � |r��m۶}�駟�yh��;� �
�
+���+=�ܬ�u��2�+�b�F�`F�ȅ$�:���ի{�{�PN���lX���Om|B.T�Ubr-���kuc�F�`��� ���u��i��ms�h����
�{,5MocvV(�������
<h��_'�8
X>��Ս7������p����4��`F�`F�`# g���$�W�bŕ3A��L�w����
'N��T%��'�?�
#�0� #�0�@nC@bI��ŕ]IHr�}Y�[vlhOh���mg��aF�`F�8�xnjˍL9!A�[vl�!o�S{&�uF�`F�`�\��6-îl��
��ȝ49W��J0� #�0� #�,̹}�+�
�yaF�`F�`G|�8�ʟ~��5�\?�?�\$k֬A�,�:&Xc������^xaݺu�T<*��xT��O>A��%K��~sy��CO�[��*�&+ZwA�dJp�OG?���֭[��/�
۴L���
ѣ�o��Ҕ�-Z�:u�t��eݺuT�s?���ќ[y*F����*`F�`F� "`����>3
F("
.|�ᇑ�dٲe`�V :T���߷oߎ
��(S���z��"E�+V쫯�rˇ�^�z�
;���.���{��Z���`��	�h6ѵk��&<�AG��G
y�#?R
BR�u�]�J��;w�
:u�w��PH�̬Y�4hp�����p��h�Oz��,�S�P�� #�0� #�0
pe�͊<��a�e�Bp�;��˦M�"7��f�ٳg�'���~P�V�Z��
�H
+ݽ{�aÆ�p�
�P�J��XKɒ%��S�>�&�v;�	O����o���p饗���B�l�C/���Yg���0t�A�G��v�ڙy��p��0]À�����=�
U�
dxi�4i�!����C��E�f�p��0� #�09��-FCVj�J�a���T�}����
����+��e�
D{
٭�m�ǃ>}����~�9��Zn�aA���o�>R�ҥK���ŋ3�4���D�{�ر9s�\p�II
!MH�����bYG �ۑ�
���x�#�ͱF�`F��.
��*�u��_~��U��Y
�� � �|�x�s�έ[�£.;v� �ZZ@
���߬Y3�4x#�d"�-
+P)X���f���%=����_Q
�
B�B�g�J����N
�����Żw��vb?
�~�*a�
h�Oϸ��™F �87�x��O?�i�&��L�81Ӣ�"#�0� #��$
vc�_�Js

"��t�iyʔ)��
��ܮlٲ�ݰa�����C�]w]ǎ
{��Ǐ�a.��D�L:[`2��/u�� �)"�1&8
9r�\����|�r�d��eӧ"^��p�~�8c�
8��7.T������@���]~8�
�'ڳy��xeryF�`F�8U$	^�X�v9�-�%����˭��
+;k˖-�Q�^X�j���L��

8pϞ=�G�6�U�^]'	v&��OO�	��۳�����~:
+���o�[�BRC/�.ÓFġC�FᲺ"�ʕ+W�>~8`?�lѢx99�{�a �a���j���v
����A�#�0� #��p&�Vve�BcG¬�+V�,4�۱�
+ D�N=�l0��5��x„	��=t萮R�\����P�����P}���,�?f�ժU+�/�f͚�7Ͻ3ۅ�I�&M��
Gh�0ۣ�w��Q�c��Q��-r� �bD�.�#�FA@@�S�vm�`F�`r71^lƌ�|9�,'$�
~��.f�\���+�-`��k���6��p�	St���O����Ҍl���ڳ���	=7�+Ed	Z at t����G���G
+�
�4�z 8b���p�&���w���:i0#ƈV�ڏI���P$��o�X�)��.�� |�z�����Çϛ7�O�	O�nݺe�X�0� #�09���P�ly��7F��2���!�2.L��FSx\4n�X������,
����Ǐ'� YNh�GG0q�
++B���ӂ����m�s���yh��;� 4�
+���C=7k#ؕ��+CB�Z�j�̙Hڢ��Á���fu�� ]��8�=fU�Y�|��#G�$9�z����
�����W��?Ƌ
���<���aF�`�lE�
+�\�F�5�W=��=D:/'����l��J�����|� blG�!bb
>���.�R��0� #�0�@0���W��i��ms�h����
�{,5MocvV(�������
<x�뵴�O�nԸ�-f\Fb�XD$^F �@�|48��3A�៣s�g�|��0� #�09�����C�eI�������
o�,)�rn�'��\${�
K��ã
1�֭[���f�\��0� #�09�@"�`<������|o��s��[����<Q��|C�������4�}0
+,�_F�`F G8y>2e�r��-;6����|N�:����e�� #�0� #��u�C&#�
ny
n֟`F�`F �"�C�Y�c�_��:�Z�s/��#�0� #�0�@�C at pe/f
Ζ?��S$�_��R.�5k��e��	&�F��Lr�����u���S�<r�Q�O>��J�,YB����_
�ޭO@w����U2%�����iкuk�p����r�ט̇
! �)�[ps�@���>h�$���������q뇿ޏ��\pAϞ=)�y��r��Г�_
 �Θ1c������#bw�v�aÆp�����N�:�NH>����'�<�'Q�`>��C{����7�D���dɒfs�O?1쑁>�_|�����,�`F�8i$9Hq8G��-\��吅dٲe`�4g-������b� Rx�)SF�_�zu�"E�+��W_��9�z�B��jy��Z�����H�>�&�v�܄�� �>�<��G~>$҃�
�뮻J [...]
+AӨb�	h�O�FW_}5r�h�~�c?�i����ߣG���
/��뇷
PF\2�;w�СC���in���x���F��i��j����7s��
$-��]�v����W�?E�
\�-Z�����^�J�l�/
dF�`r�
���'[D9Y/W��;`�D�e��� K3~Κ5˴'�:�j�
+&Xl8����ݻw6l�
7ܠU�T	�XZ���� }p4���/qO����r�Q�b�wܲe
�����%$
=������ʕC�ʕ+;X2�b����޹s'��f~D?�i���q�q�t�Ƹ�W(�� �)�
���x�]CBw�RRR~��G�C}a
�9�a�E�F���S��[�ٜ��W�̩n~`��cxy�����O���; L�˗/����	�0� #��K�(��,�`D$˰�nذ��A��!�2����a?F�e}I�A��Ǒ�z۶m]�t�ӧl���>X���t�r��.؏�G�U�ti�]�xq\M���'>
��nZ�3�.�C�����Q�z��:�E}��p�	�L���bx�*[�,.�&6��o
��x�BR�}��e

+|cAru-�ח���8�+��Bx������
f�:u�@l���F�`�����I\9�2'[��@�2y�V�V�S{x�1$R;/�l�u�Vx���.�0�꺰��k��t�Cp���;���T�>�&�e9�������+�T�Za�%m!�0����}���a/�i��-�"��#�ܻu�̵��O���C�ٜ���v��xE!��x�W4�S���ˣ;��)l�:�;F�
+
+*�O����rΜ9Y�8���
+��a�3�
����(/�i�˭.���l��$z�AWǠA�HTrrrֻ�F�`��E@`[l8eW����5&�)S���� 8(<�1�h�����u�]ױc��
{����f��`ʥ�ͤ�)�	�R�
П,v ǘ�x��2��?����:��_~��(
+�q
�{!L�f�L�{��!��

<X�ؐ@?��޼y`K��֭����S^F�(��0���5�\Qe\�I

�(��
�Ƙ�K
�Ct-�ǧ�;��`�FF>^K�(`��F�`��� e!ʬ����l8*��,�݈���˭��
+;+�O�(�.f�Ր
ȁ�<`� 8 �r��Ѧ4���
��ġ���i6�,�����O���~�
a $5�+/�$0
j�С�ƍ�r�ݸ����M(�t���p��d,G[~�c?�ʰ֬Y�<e��W(�nM4uȳ��α�oP�À�0pv��
�&\&L�[��
+�ʻw�6}$fΜy�W�M�s���4���r��Q-
����{|$���{�a�GtE�Ձ�d`�`F������~ጯ�՗��2�1k��vl�`w��e�	C��`�d$!��
+�L]4vMʍ7f�P}2!Ӭ�?f�ժU+�/��� �Nݖ�P��8����=KFi�FG��ж
�j��$�����x����h�n¿���hO�z��𢡊�\bV%&����UW]�������&h������p�>A�N�������(�?G���
��v��O4��`F "��ͧ|0�[��4��O�7\|]}��w��`���~
�$>.�.�
c�
��	�*
pZ�Z�c��7��g+q��;� �����# �Q�>��#�@A�A"
�1�'
+c!�
��=�yj�1���R�Sy���$��v���<
�&�
+Т�ſm۶��#x\��r��>+��$�q�P�f�ƍ��n\8�G�y�`��'k1آ�Sy�77�ᆜ��2�,wLB�+o�3�٢��~}DHD4�	m���ʣ#pC���Mn��F�k��K�$�|v~�;� #�0���lqe���H8��� �0!?��q�����hҤ��,�o����S'�q^�Xf�
+ƥOh�5��O�|�駟F(Yh�r!��8c���N�Yw��
�݈��n��l���� �m�Ю�
���Q��&B���B�>T��2�
x���
+
>
!S�<y�d|����ɂR�|���pb	�#
�
�� �Q�F��A�GIL
�����Wތ��W)]��Ý�_�_W=&�"*"����&xe���h�K	�
�B�:��
�;���8��`F � �X�F�5�W=�`�v��~�iO��;��M'�#��I@��
��0� #�0'|��k��i��ms�h����
�{,5MocvV(����|��
<���*�+d�z�F�'i�d�4##l^���;��0� #�0� #��,�xp�_�:�{ٲ���  �o��>�M���/�gF�`F �#�X�f�5�V�]�]E�HL�^�����u���@ O�1��s��s�\�6}r��M>�`�3��eF��
d�Ɛ�O�r�`�^�}Y��

��A�[vl��o���vn�'����F�`F�����
�e�jK,��#���3� #�0� #��N�B,�r���f�e�F�`F�`F��!@6d�.#��Z`Tۑ-���t��+ at h^�E�f��l"�1ID�ad(�
l�'��"�rݺu�T<*��T��O>A��3�����gʭO@w����U2%����j��g����N�h@\dL�C�n��fJS�he���z��I��pp at G��q���S���z�
+r$�3f
"
#�1�k(xy=p��	D�n:(5l��ZX�Y4h at Bh�XN?�f/�<���S�
ڃ�2o��&b*��Hdc6���a�/Z�>�_|��3�/��0� #��
+����]Y�D��O��p���?�0��,[�
,�LʅT۷c�`Rx�)SFwr���E�)V��"�{9��5v���.����9Bs4�����*�O�A�A}��
�#?�C�A�.U�rO �G�N����z��
H*��!Q_�
=t��p�ͭ������\ ���ʈK�s��
:t 4pR(g

� ����F	�`��qݺu��7R-YБ;�-֯��S�^ i���ڵCV���"A.�-Z���G¿L��+2� #�0'i<NLT$Ynj���4�/��\�`�EJ9��� !@/��5k�iOunժL��p�ə�w�>lذn�A2s�jەX��k6�_�������
8\z��q�l�K!��:,p@	��BO3)S�~}�	@t*ĸp at +~����o��
,���
��F`��vY
	B۫V����_���ؕ/��dC�
P�I��ȑ#��N-oq�9S�_y3������c� S#xp�v$�

w ���/_��k�e�S\�`F�8�&c�!���Ɖ�aZ�����tÆ
���Y�}����
����+��e��D{
٭�m�֥K�>}����98��ɜLw-�������}�Z�K���ŋg�i��>� �*�\$���gE�L(P`��=�lٲ�dl�v_�	�/�\20�g(|c��Z
��d�4�	G����]/~�	Hk��ԩSb����0� #��"dl8k1|0
�
�A޴ժU�� <wA�F���w�ܹu�Vx���.�0��p~�ׁ�t�Cp���;�� V�>�&�e9����0�JժU�wȐ!�-����=��o߾0�E9ӤL�ڵA��ot��8��������L����q
r�>6@���Ѓ>�Kvex(�]'���
�g-�4��ڵ�-�Q
^
0
ӂ�[]^�oٲ%<I�+���A������w�%0� #�09��;��\9Cx(
�r,�r��r��0-O�2u8 �{�"��S��ϟ�]w�u
;v|�ǎ?nʜ3gL����t� e6� 3@�؁
c��#G�0�T|z�K�� @��� [...]
9z�hSZ���u�`g�P}��4�~�{���C�o������Ej�V[���,��C��7.�
C�a��Y��	Et
�	�����o��
, 4���ݷo�˕+G{�ƈ7(��p�����
'��DC}o��
�¨�{�n�Gb�̙W\q��;G��_~h9z����I�Ɉ^�=�0冮�:�
̼0� #�0y
e8�\��2$QVq����GĬ5�۱����P�B��(Y��H<a�ث
:���F

<�r�ƍ��1T�L�4����o�j�
+�K���9���l
�
A?{/YT[WşJƥgv���h�����m �0Ӟz������q�L8*�re�|�(8N�\���	�l��.|Rsm�'X>Jj?+�Ђ[��C��������
1� #�
�U�`�S�������

�3�W�[�&A����`�Uń)A�B�m2���ڳ���	��	����� ��vԨQ}�p� �@Q,
~�0�
�耉=�i�ڶm
+5��ў 

z����?Xϸ��� �k�a��
�q��p���@p-���y�0�b�?�䓈0��}xs�w	�2�苐���WތB�?i�� ���<�)\X�ƃ�?�ܐ�>D����x㍘�Hߗ�L.ȃ���0� #�;�%�#ӱ����ˈ�IU$
GD�U<�aB6���A���ѤI�Y�v1�I�N0�£#X���	�!�f҂�����>���%
m�y�
���[�1`{���ݺu��6����
+Q�@�@n(iK =I������zƅ(������2��&O�<}�t
 r��1��1c�_���+x�
�4Px7��F���O
r�l��N��f\mx�*��
�B�ʸ�11Q��o�j�WV*�{�V��A-D�C�๳��5WdF�`�
�l9Y$��y����z|�ђp�H��AՁ���
�b��ʱ@F �" j�U�5gF�`�(���y�A�nk����������Xj����P*9%e��/>:tسsb����nqI�F��>�A�ĒG�b�F�`F�`��! \,���l���+K�,�I����q�S.J-
nٱA�
+�%��Qt�J�ܦOV��uF�`F�ȧؘ0�`�|����n�G�j�<8�` ��)��"�����������4��Q��8��`F 7 ��>Æ
>w�����Ce#�_n�M
nٱ�h��s�ùM���/�gF�`F /" �0,Nl�"��twr�F^��ufF�`F��+	�3�y/[^˹�a9�`�z2'�3�<��hA��lo9��g��,�`F��Ft|e�"�=���n~_|1�"Y�f
\6��C�ad(�
l�'��"�Bݺu�T<*��rT��O>Av�3�����}v���$��4�2ȡ�Ԙl�o��fJ#��!�~�!���	����k����"�4 �ӧeD3�#�[Ϟ=)�x >�C�����e��EJE����8_��-��@�
=��&b�L��1*p
b<gBH�*9-?�\�`F�8��|��E"�`D��
~�ad!Y�lؘf�k��퐃eʔ�W�^]�H�bŊ!-���Aޯ�c�^v�et�̉�����!K�w�
2�a�,
N��=H��|��J�BndJ�ԩ�޽{� �:Dii��G�-��
���o �
r7蒴i������O�bq�cB�l�/7>xU�޽;�MP*dT#G&����% ����^{-��0���s׮]
9�VN��!�Y,#�0� #�4]N��hWD���������kӦM��Zk3-�x��Y�����:�jժu���p�v҆��7�p�>d��
�����ʕC�ʕ+c۔��h�&M/��®��`F�a�@<:��QZZ��Y9��"�!��I
	����d �S$�c
B:q�'>HD�{�n�t�H���r�������H_(6l��#h�hѢ�
:��������G/6�P�K/�/{�x;5Q5��]�|y�u��D�v$�DJH*��ց�
+�Y����ի�~(������c<L�0W�JF�`F� # z��ʊ;G��+�
������ۃ+<x��+��R��3D{
٭�m�֥K8
�֛'ߦ�N�jZ�K�.��/^
Ws~��%$Ja��a�s�
���| 
0�(B"��q
��aQ~��'��Q�V���X0 ��#��a�_:
N���H�(�4�x�C��I�&��"ʇ��O?��o
�_�ߒ�f�J�Ŗ-[�+�B|�?��_��Dzeˎ3�O4#�0� #P�p�#�KeY #8	y�V�V�;x0���1�X��v��	���p��)
v2]Oq|>n֬�CZ�
t�E�e�<�g��7h-n��� ;�>}����G�� �C��U Vޗ_~�I�&��k��+
+�Q���y(555X��n�
v����ĥ*�C�Q�F8_o��v(D*T�7>Y���w�9s�8����+p��Q8��C��bF�3�<�y��U�V�7�
lJ�(�������駟 GI�믿k�v�����㛌��
#�0� #P��?�t�k��/��r0b0-O�2u1�8X����������C�]w

�p8~��)��\Z�L:�S�5L�f�9`N�a�o =
�\�&��IZ����
�)�����1�k{�����5�:����_P��pk��
+�;܁��yXpq$'';��[HD����)H6h�f1*��R���<y�d�d����>rF�`F � `pdc3惡��#L�Z�*�L�e���[o�G^|��G�wA�j���e> p�ܳg��ѣMix���
�t��,
��dJ�u�'N
:t(Ln���ϴV�� ��e�ƍ~�!���Q� #%f�լYӄ( �P�]���x��}
g�/[xv�� ��mڴ1]&L��� ��r
B��j
 aDǎ
s�q��.Tq�M�>
W������Ê&!����j��0� #�0�
�.ۜ_E��_\+V��Yq�c�{( ;(>.�N��ˆ
VJFbLf:t萮�ig�aS�	� �<�S88�#G
��f�P��Egp Pd3r�)��.@�Ae��9�o��橧��������_�(�`��,U
r�ˈ�.ٌ���t^�,�O+W]uU�?�[>	$g8�k��/�Q�K��`���	
+�.���&�����p��]e��,�_0�/��`F��!���[�f�!᷀�	���}�����
� K
�X�
�cj
L�p,�)KO�)�%��X{��cf���a?��0!�H��{���&�yP
4&� ��?�n#� -&I�۟�Aֶm[��j�լ�TaS��18|j����^pO/˜��<���NG�8�ND�F�="Є�
��<�����>O�;*z�'�����yN;�4�y'�Dċ�c&B�`?�
1�p�q�!�����(��28�=�܃O.�l �LU��
�)�^3� #�4,
aR}e�&я5
+���	9���B�ffl`��,��p�Ō"j��K
<:�O��ŀ v�v�:�|H�]@
�ݭ[7ؕ���C�G� � ��[�۟�A�Q0!L�#O���q`�:NY�v��!���9���ܹ3�0�|�h
=z� ,��a�7��b�)>|�����G�S>	D+�L�5���;���ǫ���a��s��.=H��k
o�� �xM��N�P��3
	�<��IgF�`�^<8��9�Z��O7K�,�toXm𐡫��3_u�;��0p��|��g)�x�/xY�Q�ٮ0
dF�`N�q�k��i��ms�h����
�{,5MocvV(����|��
���siN��8�n��.id�`(/�����yn��C J1|(�HN,9-?'tf�� #�0�@^G@���D���ȝ���
y%zC^�?w��ܣ�����$�
+��L+�F�`��� Y�U��'N�~�#w���
�:�����.���cF�`F P�c�i!���Ld:Z�):ܲc#���n�y]��ƃ�1� #�0� #��p�W����@��j��) �F1�TAE`w"F�
�E��
"�����p���F�/J æ(�����2��}g�ܩ�Z�g�yK2��}��s���>u��s��r&̙T����������6g
aYT��I���&"" " " " �r`�o�_�)�'�[�t��sq�36y[׬YC�,J��$m���K/����wbHK�w3�^M;�́�%���Kr<7mڴq��v��+MHNl
����n���7�. �H�";#G�\�z�����L�� ����T�~��S7��&�g+;���aP�jT!�?>Irrb8y
(�K�S�����/ٽ{w��๑J�üͭр�nJ'x��K�R|��� [...]
j���+�߸���

8�k�K�.|4���疏�4i����.�" " " �N����$�O� �Bc+S�
�,��Mm��rU���׿Rޙ
+�T�
n�?%�H(k�5j؞mڴA~�Tף�p�
�q�5r��)sM
���
�7n��*)��(��q�3�O?���}'N����%�
�}˯=��+�D@D@D�"H\�>�-[��X��zΉ]k֬y��w�Q���;q�ڲ�~��%��䥄��d��0�;v�X=�n�w�1c>?
�4�!"J���ڵk��0=�!"(�(u� ^� �n��3ĹLM�
u�QI'֭[7\��l��������G�y��x��ٳm7
XS�w�ܹ�7n\�vm�v�ڶm�~�z�L+g޼y�Ǐ=~�
��@ݺu!�m�6Á
Lg��lٲe�� �˯�����E@D@D�$X�c0b�0"Fa�*���c��ݻ�(a��_�� ���xG�֭�n=z����w���ir�!��^j֬Y�]��r�ԩr�3&z���Ǫ����Yk6> ��_�`�������:����k
�fr��ܠA�2����;��K
0h� ���_���
��
�p��^pΜ9�6m��X՘���7��!�ȡ�(g�]M�>=�x���ǪCE&�u�V�_�N
�;�
;v���6lࡇ�� "���
Ss�
!�$F�f���'[Ұ�W_}��?�뮻H�FF��{�H�k
+ȋΝ;O�2ż�@$�7n��C�
;6;;{�Ν�c�U�F�е}驤�D��p���M�4a-���������i�<L&Jn�ѣG���`ѢE&�2��}��GZY�I߆#yĈ8��ڃ���
_V����H��L�'k
O�o���Ѽk��jԨQ��p�GIց5c6�
<n�>�R�X	p6mڴ���s'y�i�q���XG�p��&P�Sy$���N�w�c�=FfeVڑJ�8k���ܳgO��E]D������ڃ��&�
2d��3��M�A�/<�@Ӈ�V�ZY���C��pO�2q��f��#��-��!�e� �:	�H�=a��{$MnX�'(�E@D@D��ȪwB�ŋ�������W7kp�!�^]�Xh�"P�+��:VD@D@D 
�8�
�s��nv޾k�O�s���1w��g�i��^ͪ��
��}g�С���쀼�q/�m}j�S��q�M����t���������d.��x�<C9��Q����ɞ
7{Fq�/�" " " " "���ž�}%�[��=;6�X�ND@D@D@D@J��[�//�rI�c�'{vJj|�#" " " " 
\�6g�-H"^" " " " " 16^9^޺DC0tD@D@D@D@D #	�Y��`Xc9x��|@z,w{��G��5k�=�XJ�o޼��
/��yI�M�6n��.�3rH�l:����	F��G�!���۾}��c���
�O�Pa��%�
�FI�.]�͛p6���>}��:�m���5)l��T���kGJ���ȑ#W�^�|�r���E���y��'�a�%U$�QD@D@D �	�le��֣
ݳ���������9���^{����Mi��~�z�1�.]J1��ի/^���I�n�:Z()r�!�ط��e��� [...]
ms�������CF�|:�1�X(ݷp�‰'r�Y
�ϟ��(ͥ�������7Fn���r�P��w�}7
�;�g�-CMO�]
�
;z
�K.�[yǎ
��y7Q&�h�6Bm��kժE�9s���c���
99y�\���˼�{��3f�kĐ*5$$c	rS�v�+V
�!��j������ѣ0�����rL���0s��cD�m���m
�ٳgۣ�u�K��M�m�ƍ׮]ۮ]��mۮ_����ҁ�q�Ç�PN
��K=z��V�Z�ښ���ܷo_�`��؋25�y�y晕+W�;w�+$`^VA��Ǐ
�o���!Cԭ[M�m�f�a��^������!�J
�(\gg��`ܥ��H�֭�`��9f�޽{�ֵ�*`
b:��ڦY�f���Z�4i�Fc;�r�)�2k������J�믿
�5�ʘ�ab|�Ł�q-��>Ls�ԩ��3�0�
�e� �P�PUJ�����@�#���_f�匋{��-�s�aÆ������w�qV/~�A�ٔX՘���7�yB��v�:dȐ��:�U[�n+W�|��׉6=a~��]&|bܸq��w_��O
+�N���M�6Ye�
&K�3��	���
;T�g��[��G�:u�6�r�����׿�5Q�����@����
ec$G0���~��W?���Didv{�����]�U�
;vlvv�Ν;���7�S���͌a:A]�?��~�!��g+3�lS�L1-��2�,�ga�-��ux� 
�1��f�&M����
��
�����d��(" " " �'�̓]�w�}���l���/�[���Lz8
�#F��ن/��i�:u"�1;��
��$X!f��ω��l��o&N��Z�h�C=��:4�9Q���{�gZ��e��kԨQ��~�;nD���
���M�6����]!
�����(�
+��
X3A� " " "�H��u!�v�_d�2k�&6
M�8��={�a.��"�X�G(��u��Z�(i��N��0��f+>$�ӠA*��p�
�S����
%^9Q����=��e������Q]�e� ƑT{„	<HL2H�����yIa����Є��A�3V2z4=b�!�Ϗ��P4qH� 9��8J�������� 1�~��
<�ۅ����������s���{��}h�W�jv��9sg
z߰7�]Z/�x�������g(��X.̴t���������d��B�y0�(���aKI
�ڳc�v�$M�E@D@D@D@�
�e��l�I^�r�x�KĦ���xq��	Js�"!���X��P��M
��)�"" " " "P	乒
�^ ^�y�bX�e�4Jg�� ��X��<I�L��8�)" " " "P��E��&�r�����
��
}�Q�[�f
��(�gl޼��
��5/��дi�ƍ�%tF�y�g:�
��� ��<5����o���9�2x.d?}�C������(]�t�7o^�����
�O�>�K�
��c^�q�W@{���*���9r$��/_n3�hтt6O>��a^Rͱq�TE@D@D����l��2���r,
F*�0���a�ֻwo�a�^{�6��~�a��R���Y�t)���W�N:g&��u�h���[����>�,��n��P‰��۷�z�5k֤6Ļ�{�Wnٲ%X��}.\Ⱦۙ�Ĩ��7`\QV���	�C�8p �<we�l�ꪫ.��2�3�ѩJ��S��" " "P^	��������7^���W�}�����˃�X��/(�wx�V�F
3ޭ�����R��2������S�}��
:t`�U�b��鴼��k�۷�|��aD)�~n��C��]�����/�`^0F�S�};�0���mڴ�a
�o����4?O��e,ʘc
��}�kM�8�K�j;�|�e��B������@y%����]���s/��邮g�wi�4�.����2�
e?�8q��n<�w�yg�^�l9h�c�b(w���c�^r�%��;v���̻��qE�a|�)m�jբ��9sR:ʯ3�
/��B���:=�~
�DI	)E��Ԯ]{ŊFv�8���G�
Y�g7�D@D@D@2�@rS�`
FJZ7o����={�=�[�n�x	�$��6nܸq�ڵ�ڵk۶����q�ڷH܆�9|�p
�� N�ԣG�nժN�`��!ܹo߾���
����=��<��ʕ+ϝ;׶�!?�Catӱ�@�nݺ��m�6�
;����%F��
��LPU:�����@$�N
FN~-���͘1���hݺ�=���?�,޻w��K��,�ɬm�5k�;
��I�&��m4��)���(�v0xK��������[���
&&�}�����
���P�tl�����|=�������Ka1��|�[%�H�<�O|'�s�
�Z
,������^���
�)/��1���o,n�,w��uȐ!g�u���/�V�\���m
z�����K�ĸq���1cƄ�	��:E":6m���II~0���cK��֭[����qg�
�;DN�_��מ8�RW[
+��������H���
L�ꫯ~���w�u��W_Mf��{�������j��cǎ���޹s�U�� �
����Dv3c�D
��?��Cq�v\� �L�2%�&��C9r�:�t	�	�<F�&M�|��'�JDe�M��,���F��I ,#f�2-��9n+�%TN
+����j6c���-ie�W&=
�#F�l�[�j�N�:�䘍
�ЅYrG�
�����D}H6w��7'��W_-Z�衇
�u

��\L�)q�
���������3����t^
��^1/�5�aӦM�߿?yW����"�`<ڲ�/�֌���rC 4#w�1c9�b.�`��]����Z7���F����ܳgO3�E]D�����t�ncvX�%
�߹!���lŇD}4h@Őn��p�?���}C㕙
�0�~���'*�Dlr�T�rH:/t�k/7�n��Ƒ�{„	<�$d�${a�k���&"" " �@R�7��_4]�xѐ�˾}�/<d���F���k."P�li��
H�E@D@D@,b �h�
<�ۅ����������s���{��}h�W�jv��9��y���
x㳘��Y�j��-[��W���k2Gp,�,���������@� �
qf��`�K���(s���M
�ٱY;���59
wq��E����-�Ne�ڳ�Iġ�HD@D@D@D��H����\�LS�i�=;ezRR^D@D@D@D����8߇
���;9V���#H����������6^YVr�8��E�#p�1ǰ�l5j�(�����R���YT�
��!��>�|@z,w{��G9l͚5TڣD��y�f�2P�׼�RCӦM7nl��9�w��@.d�ӂ#���
ү_��۷�>�
+�Z��C*��/�5|�@�ҥ˼y�癗;h�>}ܗh �#Ǽ���7������
�%�OcR==��K3_m�	\����ߢ�O���O�
�<U!Q�G�_��
U5���r�AD@D@�r
��Hb���`R���0o�ݻ7�1I�������:�?�0�~�w�n�,]��b~իW�
�+�zݺu�P�íh�|��g�}��x��v[�iK�g߾}��Y�&�!�}��+��r˖-�r����p�B���T'FU�%@�㊲��8�N0b?nI�
�3�pꖔ �D)�������������&�c�(�{�Q�E�(r�GD@D@�r��m�XC*�ʔ�;<o�O~o��V�CS��������ō)ܾ}�
:��ܽӧO���^c߾e�S'o���Q��%ꃟ��СCqW�����)�|��N�:�9���w;�i��S�-@�㊲��8�u��-�z�>S���O5�7�|��h��FG��jժY,�]vYvv��
(�nk^ڣ�8�
nҸ�meus�+?�pݺu��׮]K5x�kV�\�t�uРA�)�_���W^iذ�iG>k_|��߱c��)�x�<�0н�޻|�r>##G���=r>�`n�~�����0qne��5�ƌ���S��'TL��L;ϋ����>{�����M���rR�'�n" " 垀�Q������(�y睽z�����o0�rǎ
=��%�\���c��ͼ�H
W4
#�Ni�U���̙��Q~��m~�r(���'ߏC�(�
+�p+�q�|"eQ ?�Dx��<�*�/a�bS�}�֭���p�f����Ǐwߊ(�G
y�\���o���n&���:�,le{#ǃ�'�x�]�v�U֮]37"|�><\bF<�aP
+��u�]���n����"��
^~����0�?���v8L�6��?��OF�nݺ��誫��н����6�>t�q��&" "P^	`
W���^��y�涖��ٳ-#~�pm�^��8c۸q�F|B��m�W~2���0:������L�ԣG�nժ^��Ӑ�?�}��E
�
0`����
s"�W�N͝;�
+IC~ ���x��[�Z���V�r/��SO=��_|��Й֫W��\�8J�W�1c�琧�z� {ޝ<y�}+�|
�s�9�
���d�
�& 
+�.V�=�܃�����7�y��g���j����O�,%+¢_�>x�{��y�_9|~�6�	mb8,�G
yd�ԩvmC��DO�
�uP:oT��;/?����=�� " "P^	�`�1��`
�ﺭ�ѺukK����{��u�}����T���#�Y�f�d�)�4i��A5o[�EK�2k�������1���[c�
&&�}, \�n�T�s(�n�ؤ����
5jT�(Vq��d%\�K.tʄ(GN<=
\
٪U�z��D!�Y�
&����i��
$Jf)-W8+�q'L���!=Cg��G2A�c{��	�a=��.~e�]+9`\��u��w�f�[
CɝV6}�>��C�" " �@����K'���ﮭ�a��v�
w`���% Ҧ����t�G���O�r׮]y(��`7��V�\����[z&����K�ĸq���>\k�r:`���:*�OJ�9F7{lRni�ky6hРH� B�ֹsg7d��t|@.��RB��@�1 [...]
�Dv3c����O�dq�v\��aaO$�$T~(�BN�
�ȭd�-�ˁR�p��QF��5�P�D�
1�-��ʺX���X�D�F�={�K����zA�v��vL
AP<�iٲ�G�*� &<�2}x
+�vH�o�M�����Ž��
�q
S��s$\��#<��%a�E�
���:Q� }�*�rp�j
+" " ���.��|N-�J��\H$���j6c���-�p0xt��yĈ,W������E6v�$f�
�_Y�o6k�$��O>��	��iG��\����ͽE���l&���f$HU~(���bP����z��[("����yR�a�<@LCO�7�հ�xD����K:VR��'�O�q�z�G�,��ˍ+�Y�G�ڹc$h��*!�8w���E;��ظ�\s
�JX<`W��ɧ=�>F>q�,�C>��n��v#:w�+��ج5

׏9�O�
͑�&�I��O��C/ u(���\0^9n;��
~h	&6��!+�潺袋�� *�P
+R�Y�1;�Ջ��7��1�͆in�%���^lL©��?��
�W�5
N?�t�`"6�G��C9$�:��G�
CǍ(G�B	���`}V��=w�څ���0}���oaݲ�(#�=�@��)ؒ�7��4!�"ۨ����s���[o�꛵q�0�Yx���o�z�$q3�ù�e!,��sc�z	$������0�$G�f�'�|2�	������M7�ԤI��q�h 
��<
�Dl��z&ՇCR�z�����@�%`��xF�c9�FM�,^����fn��99�O>t�!�&�����9Ks(I�
a����
/��q�*?U�KK|ɬ���S�3U��_D@D�| [��Dz������w��i���9���=��>
4֫Y5;{�?�ͼo��a[c��ܧթ��,��� 
B��1�֚�� �z�=0�G�c+n���i����������@	u�R-�e�
�c�B{v�R�
�׫NY�?��
�9���X��*V��MU���H�G�-LO�ۗj�r�*��mZhώ'Gi�i̲��I���  �%�
+��"" "P��&pn��<�r^���o)p�M
��)b��&���_l`$XD@D@D@�%�k�g	_<�ils�SJ��
:ND@D@D@D@2��[D,�Vv2.g���KD@D@D@D@��@̓l
�xf�|�r���XJ�ؿ�X
2�nO?��IW
+�'@~b���t>��Lr
S�v<BL�5k֐~�R�%�_���K/��ITƤ�5�*0��
j^R�iӦ�7�K�\9�HY[�$i��߸�u%7�	Pd�rt�W�^�|����֤9#����T�~�?Q)(" " �@�D��vc�@θ��娓'��y�)ABM;�P�z���XϮ�wݺu�4��\��TI���
웁��@�\����?��/���ݻ��*��t�v7�<�ҥK).HM�ŋ�o9$p��`�^�BY��z�:�?��Z�ҥ
�tx���r(�l���^��hF" " "��r-�<C9n6Ƕ�<���R�G�>r��
��#��L�/<����F�%�aj4Ph�}�΁�
�a�
ƾ�L2�LS����/��2Cɺ�ԨQ��oӦ�[׶c�Sv�C��
�u�YSC����߸�
+�C9#@nr�c�i|����M�8��;G�
;���[~�匏�#" " M��;9�T>�R~�E�J����-[V�XA��}.��l�
;v���رc0��5k�}��x���N����t�1y)��	�F��0��$i��ݻwϘ1!P��
+H���ڵk�0sg��
+�AS�2J���֟�7���qi,�k޼����g�
j ����J
+��Z�j
>
�Z�j��u�˖��~���v�����ٳ�!<��ܹs]!7n\�vm�v�ڶm�~�z��ʙ7o����C��7�@u(g�֭ˌ�m�f����{��l�2b��F����_{9�鈀���@� `������m
�ǿ
i.x^m]
bC���L�&C{����?ǜݻw��c>�U�u��n�
=z�Zv[����Ŕ!r��U�fͲ�"��S�N%�c̘1���z�:T(_|1�^�ƅm���^��h�" " "�Y�r�0�)�"iذ������ՠA&i��I��]�2䬳Ί��;���
0`��A��T�v�1��vc]�9s6m�d[0�1���o,�sC��C#Qά�2��[��a���rE`�֭���߳q'Fđ�a�
b��
+�k/Wt4(��me�-.,Y\�,�ׯO�����0:� J)�W_}��?�뮻H�F1��{�0x1_:w�<e�#�$�7n�q��
;6;;{�Ν�!�g�ھ�(�c�R�a
�n&դIֆ��	j." " "P	�l�|+9%�r2Z��G�
M�
+�E�����^�I�
���l���HOK�2�
8�G�a�v��L ��e��������e
�	�
��4�w�
f�5�T
n�)I9�~�fC��ǭ��T��2�UӦM�߿?w���v�y|*,
M\D@D@��W���ˇa��mf
+�<��cdVfE
.�P�,�J�b��}Ô
qX�&a3�E]DP����Ij���t�v��4���uo�ӪU+�7r��
�W&���l��D���*�,"��%a
ɹ'L��s���
+#�R7�L �ux�_-Y�xĢ�l�����
���9
������++�JO(7�e�K����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3w���>��j+�վ�N=���Z$��&"" " " " EB�Y�G&�,^�
Q$�	���=;Q�d�r@D@D@D@D��ps�Q��:~�-3�is9{v�$���I+�L&�_�$C
d������d��MD@D@D@D����")�3��" " " " "P�
+��Yd�+Z��&" " " " e�@�V���dX�
�>���XԴ3�~���1w�\�=o��F����cf:�ۣ�>j�����k�˹iӦ�7�K�\9���6�- �g�e��J�'@Q��#G�^�z���67Z�hт�6�ֻw��W\������$'P g\ܭ��cy���}����]۶m������a�f

�͜9s��͉c-]��"իW_�x����Cyj����+TI�qCT8p 5��t�B!������.s��ek&M�d��kO�R'��籎��}�ѵ�^;t����?��gB���5jX�mڴIZ�j|�۷�С;�2Fi�(Hm��R�~��%���
:�1�@(ݷp�‰'^~���
�r�v�o���3>�������E�
�9�`����{��ѯ_�+���$g����
/���x%�
�rǎ
m�j���ݻg̘����$��X� �;�k�^�b��2;DU��k�" " "P.	��`�[����s۶m�[�.&.͛7�5GfϞmG�u�ʕMx��6nܸv��v��
+�~�z�L+g޼y�Ǐ��o��ա��[�.�P�`:��f˖-[��dq��Wp�������d��H��Q#��=���ݻ�z�{��-����5G<9�l\���]`�b�
r�!���5k�}9��:u*�
cƌ	U5`��c�A\|����m�Ư]0E@D@D@J�����&rb𲿂w�}��A��|��ǃ��4�!��^Æ
m��
�C`�ϙ3gӦM���|��7��!�ȡ�(g�]M�>=�x���ǪCE&�u�V�_�N
�;�
;v���6lࡇ�� "���
Ss��'�q��>9�V.�1
���{��Y�r�ʀ�`4�M�ƪ&l_�(�F���;w�2e��@��
�7���ǎ
����s�N��jժ�3tm_�Z��
+N��p���M�4a-ig�鋀���@�#���̕R��o׮]	 ��[���g�[�jV��
>6�
>
wo�
=:J�979@���
+���{ό�����N�:�晍
lqͻF
�Hlw�駻Nn��naK
�̝o)\b�
�6mZ���I�}�i�����_.��5������@qH�"�S�j�̺�'�|Ҷ��j6*2`��M��$�\r	K�
y��ɸIg�
��-ҨQ#�H�/mP;�Z���0�
�6�ׯ�W��i����:TdÆ
#a
ɼ'L��s���
+2�]D@D@2�@��og
q⯖,^�����y��/j�sϽ�'<�ᓑz"�Q��Q�H����f����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3w�}C����yi�s^��U�SO��+����"��
E@D@D@D@*
��+��}� �5�K�M����駟JX
'" " " " ���A�4����ɞ��tr:�" " " " "P�����{m��4˩��KKS�>ٳ��0
$" " " " �"@��Z��l�%�
+���
%��.�x�X��
UYj���������@I���
��+�R���> Ce�u�"CӦM7nl���lG}4o���o�������歙3g�s�9�g�
��'���3��o�M呹s��q����
}�Q+�O�>�@�͖
Пn�������c=
��-��qJ� EpF�
�z���˗�Y��ѢE
2ڸ[�޽yׯ��&��E@D@D�bp�ʹƲ��u�}�K�.�R�J���/^��~���1"�}�ُ>���n�o%�OM�o��뮛?��O?�����.�0����K)�����a�f
k�o޼9�z�1���F`�^�B/$�qCT��K`���Ը�ҥ
��UW]u�e��sq��P�Ǿ��^v9Hs(���:�y�<�ra,f��o߾C�츘=���?�{���

��衇��/��r\�����+
+k��k�
:t���z&̸f�Q���ߦM��eՂ�'�
嵩ݍ�9xh�qCV�2J����<��t�

'N�����-۾k�.��_{� �E@D@D�l�ٿ6&���`
�o-cc(S��5�]d��	ϰ�fb�-[��X����IA���=z� ��+�(̙��}�=����޽{ƌ�1�
+3��-���]�6���;D"��ijF" " "P�	��X�W)�(N�L>��7�]��]�v�F�_����Z��~���ѣ[�jelͤ����+�:ꨣ����={n۶�u���S���m��ٳgۣx�]�reO�s��Vμy�Ə:�߸��C%P�n]4��4������S-[�lM�F$���_{� �E@D@D���-��5��x�XK��
_�WS9P����p�!��ni֬Y��
Y��w�^�Ǝ-���s�=�{���z+r��	���։���?�k��r��ԩS	�3fL���
����_�rU��W�_{���I�����@�ȳ��&�'F��\(C��c�� ���"97dۑ�+W�|��׏=�X�)i�
��.'nw�}��A��|��ǣ�nذ��uB��l�9s�lڴ�6�
&E�3��ӧO
:`��cա,غu+jשS�(�
�
;ܸ�
6��ln�_{Y� �E@D@D���
Inr��]L D���'H�
�7��qǎ
����s�N#��
�����I���l̑{��.�w����t��yʔ)FH��v�jժ�3tm_aӱe� )�0��e7�7i҄5�eq"�YD@D@*,��p
+�()9�W�Z�5`6B����ɚ<�
����F?��
@X��/����h�"�_�ݺv�J�1�1���|:�$�p����t�e��F
�HTGj7���H

��^��x��>M�6������<�\��x��������3NDr�E��̡RV�r�hS'���lT^ ���4G��� �p@���;��
#�21�j�:q��:�'�|2XY7y�!C<�Q�Q�F�1X#��
�ޞxe#-x�h�ի�6l	�H�=a��W$MJXƦ$uE@D@D��0�/bfr,
#�\�:��fK/�|k9\�?��3x���.��0|4Q(r��x
," " "�:b��9xr�
;oߵ��9��瘿����4�X�f���s������|�4����9`J�-Z���$8� ���#D@D@D@D@D #	�gV�&�S���Ji�6}�g��'����(k�.c���nq[9�
�([3��=;6r�lMGڊ��������
+c%�ˆk��W�T�+��
ԦO��-P��������T4&�"Iݾ�B��@n����6�r��>������������@"ϱ즺(`+�"%��0>���c�ـ���)�@
E���v��G7mڴ_�~۷o7}L�݂����裱v��O�>�p���Kr03h�ƍ�>WR��)�s5��]�j�P|g�ȑ�W�^�|9ǭ�-Z����z��ͻ~��BG�������@n�r��|[��	
A��͛׭[GGJx�����}��g�}���>��ی�?����gg�
�G r�i6cX�m�̙
�(a�ҥU�T�^���ŋ�w�
�CPS�W�^�C��z�:�����qݥK
+�\u�U�]v���-O3i�$��_�x����������HYdV���߼�}��U� �>}:�^{�5��L=���?�zx�
�h-u�ԡ�a�
�~�i9f�Q��=�M�6Iˡa��o߾C���
��QΚZ�IK &�O
7���S�	P�
�g ���p�ĉ�_~�
�-{�k�.��_{E��������@��W�v�e��j�f��K��w�؁�cǎ����K8D�m�*L�^x!'���?�
CM�V�޽{��3��aФ:���@Dծ]{Ŋ�3;DE9P}D@D@D@2���`�`�r*j���V�ZÇ�<�V����o��v��ѭZ�J�6m޼��-2{�l+�֕+W�;w�;�ƍ׮]ۮ]��mۮ_���%��ʙ7o����C��7n��P�	ԭ[۶m3
��tv��e˖��ۈ����+8OM_D@D@J�@<g�	�ȯGb�+ۂ$)h�k��K���[�SNٻw�Y��ކ��iݺ�+�G�
����.ӄ�i�K͚5˾�
^N�:�@�1cƄ*0n�� .���s�6>
��_�`�������<���
7��	1b�r�
��]�v
2d�Yg��ckb��\����_?��cӞaÆ
mm�
�r�w�>gΜM�6�F�j�
�X��,#�F����6��[��a���
+M`�֭����q�F����a�
z��
"�k��45y(�New�J
C9��_$��ׯ�zO)ilMLd73F$Y�t�
�ܹ�)S�A�~#]ݸq�z�ر���;w��$P��E
?����[�	�㘘x3�&M����<OXs��K�Zȉ��i{��h�6q��1���c�� ��/+��{�=s8>f�?;u�tB|c?4��]#��V�F�:������U�Va͆͘8�[~/	ͬ��
�6mZ���I�M
�y���˅��E@D@D@J�@2+�ɯ
�#^��Q~s!|�w�Vُ2e7�,�
�C�E5jd���uo�ÚB�
��!l/�'^�8Q
k�����F�\}*,�aÆ�0�d�&L�G���&." " �O��s��d58�ْ%����;S����;��=������/��|�P�� 9�\������� үC����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3o�C��|V��
ى']��-m
����tZD@D@D@D@D��0�rn��b	U�Gl�'{v�`R�ϋ ������������\�R�b揱�K at 5�>ٳ�I�Q�hH$��7�s����8��O���<���������@�H�,ίۗ�Lv�����PD@D@D@D@2� �I*y�-�#a\&LU:���������@D���'�r�s9XЮ]�n��f2
7m���6�?���f�
}�Ѵ���o���n�y���Gc	�L�>}�����㏦����3�P܁��%�離�'�F%P�q��v��+M�1a
���(���7n�s�ne� EpF�
�z� [...]
+f�9s��͛�Ҹn],�
�F܊�~��NL��.]��J�*իW_�x�+�ȡ�5{��z
��z�:�]��u�.]��~�UW]v�e�\�27�&M�o���]�\D@D@�
����ǹ��3�W�cj��|��������';��C?�p
+�a7��y�b��V�F
K�M�6I˛apL�>�n�������|�S�긘��۷�С;�L#��v �>��߸����D<(��q�3J�-\�p�ĉ�_~���-�Γ��_��������:��1ќ�<J&��I�&F{vV�\�8\��1�ڔ��/��B�Q
+n�\r	��
;��v��1m�~���ž�PfD�зBv��=c�
|�F�~�@F �v��+V�0Z�C$OFi(eD@D@D@R%�|��lݺ�^u��1}��t����~���ѣ[�jem��͛ۚ#�g϶�� �r��s����L"�Z�j��Z�Z5ϻ���Oi܍7�]��]�vm۶]�~��KF��3o�<"OB9��z�:�Qu��E�m۶���tv節-[�&o#��Nӯ��r��" " "P�8��yfr!S��SNٻw�Y�g6ܱ��H�֭]�=z������2a��u���wVR��
�c�!�z�Y�f���r�ԩ��3&�"7�Xu(�.���s�6>
v�~���&%" " e���+Gq(�N��?é�ei�g؈X�De����c��86lhk��.��Խ{�9s�lڴ�îk׮C�
9묳�v?�~�Sk�|��7��!�ȡ��j�M u�0nءz�L�<oᎋ"�yˆ
xXa67�ȯ�LR��" " "Pf	�#��&q��
o�%W��U&.��mq���61&���"�Q
�;w�2e��g����'�)y�
��|?<����t�ƍ3��c�fgg�ܹ�s8!�
����:�3��c
��q��3R�f�鈀���@y%��l��-n+��S�uDž�������U�V������XI��
PVڽ��{��=�����"�ԩ�	�
��4��
n
F�E�7XEf�!����L%�t	p�4m�4�Ð��<0�qs)��n]D@D@D 5y�r�d�h�����]t�E�\s�W\�ɍ�T7�,��>�T6Im�zG��
԰nlvX�h�a9������+o�am6[�"x�h��W#0l�0Ƒ�{„	<'I�
��MIꊀ���@�&���fK�,���[�Y0b��=x�=�g�eD�&�ً@j�MJ� �(4b �d�
<�ۅ����������s���{��}h�W�jv��9�f
��g�
+�
p@̫<��[�t��Y�x���an�BOKD@D@D@D@D �	���6m�g�J(�_
+��������d.o-����_3��ٳ�I�Q�&�E@D@D@D@J�@^-�Qe,æm��"V
-" " " "PT�(cvr98���������@F�7�
�+�NΨ�$eD@D@D@D@J����ȵ����|��؎>��M���׏2�f�ݳ��Ժ3}���ѕC��^�z}��W��+��'�q��v鞕C��
=z,[�,���o�0�M{�>}<z���r�'�=a
�x��
+�W�^�HP�f�ȑ�W�^�|�ʹ��-Z����z��
�^$�H������@!	`[�2��c[t���>��>��G�v�m������?��

��`�F��ɓ�m�v����δ��ٌaa��K�V�R�z��
t%����^k޼95W�\:?�3g�ܼys���!�'���������C�8p w}]�t�6�UW]�g閧�4i���_{��W�����@�'�$g\D{��C=���)t�}`����V�N
�
v�a�e0D#�Y�f��r
f7�[�ߴ��F�V��ڷoߡCv\��ǹ;`� �	�
=:����oӦM�rk�!��(�M�k���~�*�N����<��t7��~�Գt˞�ڵ�Nǯ=��+�D@D@D���I^q���A~e\��C�ڈ�4��x��W	����]��ܱcGk�{��Vvvv�'���^���: x�ݻwϘ1�b��i+�3� �5�k�^�b�ѓ
"�2\g�'" " "�H�����i,
#�c9.��o�ʼn۪U�P��S [...]
=V
�4��/�����O���_{������A �V��U��Âd�믿~�dž�hذ��ҠA�3�8�
|���?����-۟CH/`ڱ�YHw\|c��'d����L�t��;�|#�{��s��ٴi�U&`\�
Q��mO�>=:w^�G�C�غu+J�`}6��v���>�ذaC�����g���������c&
7}�26"&2��"aD��.0�Y��'���
�7���ǎ
K\�Ν;=�	� &�0Za�t��yʔ)FH�q�U�F��؏�(�c3� )�0��Y7J6i҄�����t�!��p-}[���^x����#y���&01�^�<;u�tB|c3���g�}��c��ܽ��C�K��
�
+���{ϴ�����\Ė�~��?{ժUXKf����ㆪ�K�ۤiӦ��ߟ|,�!���/����J1?n��
��YQ�y��>Sd�M:;d�Z���9������l�aП��K�,y饗ȧz�廇0P�F�LK�m�Q�~}O�2q��f��)��
U[
2���a�HG��	&�\"i��L�_�������xd
uR3��gVl'N9�/+�7
4�w�2B�D@� g\���)" " "P$����s��nv޾k�O�s���1w��g�i��^ͪ��
�̛5��
���
�Ư��u-Ni���W�f.�IH����������A�1��Z6�7�MD@D@D@D@<r
+�ɠx�"?U&]F�f#��|D	(��s(��ˏK9~�L:�ĭ�?�@D@D@D@D�X	���ٯ\��$\D@D@D@D���哭\�N�f�����\*Ԥ��9����9��͖�n�����������@0�侙o+��Ae
�u�l�� d5�7o
�>���fQ���6/��G�ӧO���u��'���cٲeVc�͝	H�ܸqcw��gh�?��~W��v��G3D�~��o�n'bک�֫W�����m��>��V�̙3�9�
"@Ⱦ��O�v�y����׮]7�|3����v�&r�'�|��Z�sW>��Y�����@f����_|K�W5����w�WԬY��
���W^�e˖��b;n޼9������k�5o������ʕ+M�?���$�,\��}���K�V�R�z��/
4==����g��裏n��6;�i���mۮ��z�

�F�n�N�?j^w�u������=J�y���a�����$����_|�E�>����N��C*Dr�e��ROD@D@���1���5k�
:�Z��
{��_N��P(mڴIZ���CE΀.��ѣG9�~x�:u�9���w�SE�}��
:t`'x���DF�n���mQ@2�͚5��[0�qo��M����
z[28�)|�!�
+�3)��8��2�x�S����9��C�	p�>��3�֭�I
��
+�[��_��k�r�CJJT�k��ѭ[7�(�����
����˗s-�
9���$������@ �Z$�j���9s�D�g�/��Bb�ұc����P�د�tv
٤G�����O���M;&���*��*��z�e_�bu�C�b:��'��4i��
Ύ���2�sD��-
��P���s���{+��#�<�
.�ٳ'��
+޵kW��\u�U�;w�q5~G

<��3��	;�+T�:������D!���>�v���K8o�v��fe�3�<��ܹs�:�C���o=����ƍq�1n۶mׯ_�{;`���4�'w�V��ML���'�x"���1�i7��ٳi1��G
uT,�IUϭ[�r��
Lg�-�sD��-U��`%?���W�&@��#�C!r
�0Nb�ɏ3�{���	�Y�jU��x�	��\Ư��\��\rI�|u�B 
[��',X����
;v�Ͳ��C�k9�Z~}���6�]�6���g͚,-
=���"��{��k�f̘��o��������qi��NZ�n�����3`��sNo�(�(s��j8`隝�
r�e_�cZ�q��Y!�GrժU�d����N�Gh�F?Y������D$���M*9�/�7����ƍ���p�q\ҟs�H
�4"7X��t\�D'�X�qb
���/4d���
�"�/b�j`�
֏�}�S������㏻�܉�mР�w9�]O,!��5^8��sp�s���z�D  �(�
�VV�g/��&!��G&��x���>�lb�U�=�s��" " " ��?�EP���~  w/Ð$��&�����"Z���)S�$=0�p��ƙ�un��cǎ%�y�ΝϮ�3�?61&2�g�n�4$����������j��pj��C�d� �J�H 6�Lv��`�q�[�6l؀��C	s ׀١�O�}Ɏiٽ{7���/+D=���ܡndm�={�Г`z۟wy�Ig�n��u��S�\$<�w�d� �/9�p�.Z���g�u~MLL6�,���	2�D{��&��ۈ�I
�c�=6}�t�������l����1,X3GRg6v���% [...]
7i�$�T�T���P�G
yģ�ب��6��j&�az饗�/a޲5H�ži$4��mP;��]�-��0����?��O�B^xʱTX�g
s�?��t`F�y睇�O�(��l�%�W��I�#���qdٻ�kȖ@r�P΅���B����R\���{{	���y뭷�lx��;���{K��?��c�|�iLd
���SO=e��[o���t�}��B�� Ѝ;X����ej�#" " �@�Q'5�N}�X�:�ujx�A�f��k�VL@��D$�O7bOu(*<���s��nv޾k�O�s���1w��g�i��^ͪ��
�̛5���}g]�������)-Z�����'9" " " " "�q�b,*��l�!{v�: �.S)$" " " �J �V����T�,��m:dώ�ޮH�0�2I�"��m:d�N�<�RZD@D@D@D��TD[��`J��������@Y%�4�"��
V#��"��" " " " " [...]
=P
J� ������4W]u���[���=V=����_#�����@'`j��
��rD��5kp�
:�(E�)G��P��
z��N�=�	�؞i7[�5�
�ެY�[n��ږ�

��Å��4R�}�Δ>����`�~z�i��-Al�`�S��C�츒�
\�8��
:/�qS���M����<���O��n����[��{V���VX�E@D@D@������˵j�B�9s�㋫���P�'���W_%�C$�ᨶ���c����NOH�Q����I��~ C��+g���3f������|"XHD�Ԯ]{ŊF;D�R�(]I
�Ps�0�}�vܮ]�̟??�
����ѣG�j��ڈ͛7�5AfϞmE��O<� ,��Fb8���Çc�V�V-=!
�'�+W�<w�\W�ƍ׮]
��mۮ_���%�r�
?~|�>~�
�%L�nݺ�HȐ�
Lg�^hٲe<�18V=���_É�����$H�YK
ł
#�_K� [...]
+7�Xu�(�*����)����g��RFD@D@*&�4me`�]&�`ܸq��w������bx�|X�+W�|��׉r��6lhk��F�mǩ<x���?���8=��r`׮]�
r�Yg�
����ݻ��i�&+�|��7��!�ȡ�(g�7L u�0nءz�D	lݺ��L<wJ�I��F6l�!��ܠ
���^�������$#���l�a�����4��ͼ��%l_��Kl>Ld��"�����"9�5��	
���ׯ���JXc
u��yʔ)FCb�q�sa��cǎ���޹s�GB�1n;".u+E���8&��ФI�n��>ZD@D@D U,@�AK�V&+��7�L.3�
/Z�衇
�e�sS���`�f�V�"0�h�P�$ �%�_x����#y��p��
+�޸��y:뉋����3��c&�S�N$�fc�{���a�רQ�N?�t�)��'Չ�1�gڴi���'?
�^ȟ���/�X+" " "P2ұ�4h����n ���~e���GX0�+��f��#�<:
7�,����Lcv���� ��lT|Ho�P�<
���6jԨ�9��
^Z76;�e��0�
�6�v{�=�2�B��:�/>Æ
#a
ɳ'L��s����otI(rYG��lɒ%�?��3[���{Ь��fn�k#�"Pv	�3��*/�E@D@D�� �O�'w����]{~ڟ����{�>�O��jV��^0gެa���;�v�-�z�8�E�t��e���(bQ��<ʹ�2K����r�Ǧy���؏r9kMJD@D@D@D��@�rV��
�W17��ٳS|	4*&g�ZD@D@D@�
+�|[���\!�e��ٳSVΥ�(Zy1E+U�D@D@D@D@D�L��'{7��+S�Pʊ����������$
[��> =5��Ҕ�#�2U9XG
�.]�̛7�v���
}���9R��C��C�k׎� 9F�>}�x�1���v�tSe�W�^U1�z��JΜ9�s�A�#?�����w���SXDT�hڴi�ƍ�%��q�� Ρ�ԡTPtf�ȑ�W�^�|9���-Z� �͓O>龤jc�h�AE@D@D@�����m��•���w�WԬY�Z
���W^�e��
u�>��([
�%�)��M7�4�|�R�.T�l޼9Q�߸�c�Rp۶m�_�9)z��

ٷҨ�w�7R(}�~���{��qQfݺX�>J�����.]Z�J��ի/^��
e��C��G9��	
��w�\*W]u�e�]f��
+:�g2AI� " " "��@R8
���5k��W
:t(nT�N_~�����=����5j��#FPF��K/Žz�gX[����i�&i�4����Y�f��r
U�q�"��:u�s�a��o��^�VfF�Caj	��0��O�N��^{�}�ӹ}����ٱ��;�;z�X�	��q�3J�q�5q�D.�wY��LPX:������$�%j6,c=����x�kժ�xs��)$w<�X�NI�/��B��+�H�W_}��

���X��z�)�C�ol�
;v�?v�BB:
eZl��Īs��>�v��\*FCv�����РG�
d1�X��������@b���+�۷o�~��a<`� 
i.��͛��g�8_�5�6hЀ�C�
1G�ٳ�
�'��3Ϭ\��ܹs=�����O<S�?�m&�����J�"�����Çc��ԍ7�]�>m۶]�~=n�P�V��~�Q�P��֭ˠ����t��`����y/y�4������@
+
+
���q�W��/�5,X@��T�G�
m5�1c���Ѻu�P��㛅t?��u��o�k�#ٯ?�o��&q�����}�>it��<i�$��c����ń"��%_�f�
+k�5jThgu�d\�\����t��L u
�(�y��E1���+��vx�	�7n�}��7f�;ZÆ
m����#�<�w����֫W�8����޽; �B@���v�ʃ>����� }�6WF�k�k׮���:�,{w
,�;.����
Y�k��p���z�
��[�2�	:g㎈;Fo��^z�׿��"�K�th(��}�<��m�ı�ڵ
ۗ��Bؠ��][!�Ƭ�kԨQqϘ)d�2eJā����
������"}��/�@���.��h���E��رc���w��][��d$��8&�Q�I�&�|�0Qdk!WL&�B������@'�틑p���ʡ�29.؈�%�vժUZ�(L�I����L\��-"w.U����k�P����=�����7����.�
+��K��n�9
��
/�{M�8�B7o��ߺ�i¯���/��>L-8�����_�jU��|��
�1Ҹ%��Wp�N���iӦq�rgu�i�]}��\0
m��Ou�j��W������@y#`0L�r|���n�r��
;�R%�pY�Ư>��,iz�Gh'H g�
7�@8�����n�2k��a6"��b����?�0G�	�rX��`9�(��]���Ǭ���8�ams8��طr(,��Nfe��*N�Y�(".PϺ��iժU���v]���
6�.��0a�7���J%�hƚ������'�
q�Ve
uR��K�<�2	`
��
s�݃��ˈ�4u�E�� 9�{�������'w����]{~ڟ����{�>�O��jV��^0gެqԾ�y���3�W�-O511#��(G�.�T���������@9#�W�$�
v��撚�M���!��T(�8e]�BM^�������@�"�s@�?���}l���Nd�Wb��l�eώ���p�e]�
�+�D@D@D@D��	�-��H�WnN��;��|�1
�{�ۊW.ᓣ�D@D@D@D@��@����?��>Ϫ��G���-��s}�q+Z��Ew�$ID@D@D@D��0Q9�m�E�e�Z$��
�B�22=�)" " " " �!��L�����egm_ܥ��!�ra0�X��I oQ_A[9
{Qb���&9i-" " " "P�	C9'g��e<z�1�mF��ɉ��������@y�rb
F<[�V������L��H�
+|mh�" " " "P�	���"1�����e��+𵡩�������@�&��sg�l�����
+}mh�" " " " qwr,(9+�U���+%F(���/�Xl�^�|�r��\�Xh�" " " " "�K �al���me|̎;ﳜ˺lD@D@D@D@*�<+9~a��ܵ}�4vc�+�VD@D@D@D�����0
k+,���." " " "P���/ϯ��b9ׯl
e
��6�8��8�_9��_Ł�����������@A���W�w�y��U�u#" " " "P�d�����ŕ�el�c��ЌE@D@D@D@�	x��y��B%" " " " ��7�2����r��Ud6���������@E%��lj\Ƿ|��
�zUh�" " " " ��S�.����.c>�b�c���Pfm" " " " "P�x+��}�y~團�����r�TE@D@D@D@����y�d�,�r7�/" " " "P�Xײ5��xe&���&" " " " �@,Ty~�����1�e0W�kC��@��[9�G��t����������@�V�4����&���ED@D@D@D@D�ɯl
\�T�u!" " " "P	�`e7y\n
���M�8����ДE@D@D@D@
���
����+njh�EHD@D@D@D@*&� [...]
+��Z$b!" " " " "���+kI��
(H��q�L�8D@D@D@D@*4*���ـd�`T��A�HF �|�le]
" " " " "�K /�r��x�k����!" " " "P�	$��k�L�r�G$ " " " " ��	�����`�\����/" " " �@n�r
��+�Š�������������kCD@D@D@D@��:�f�/�����?�y�=�����~�3a�2G��/��9xr�
;oߵ��9��瘿����4�X�f���s��r����Y�Lsr^���SO;��WΏd.sH������������tle'�����"ТE
U�f
s�1�4[�5�F�
]s`����D�P�
��O�8�RRD@D@��@�Vέ�!�-o(c�mժU'N<��cy�c+����ov��I�
+ [...]
�ؿ|���3�<�좋.ڳgfh�
w�駳�/���e˖M�6�q�ơ��l�r�޽�w�>���������+�ԩ���#�M�6�G��馛�Ν�[��/٥K�뮻����l?}
�=��ӡz�uH���o߾M�6Y�?��/�mۖ�%y`柯P�
�%IOc�������.�x�>���(Ǭ�x�����2[�f���?�}��0 at ck�}��yp�qZ?��#o��F߾}Cq��7���?�1{�lv��FϏ>����o֬��'/�y�A����[
�[Ǐ>�(��
�/������&���7���_ۿjժ<�w�.�����u�{��8�����`��>���[�n޼yܮ��D8���!�G�
}�ᇸT;t�`�T�\��{�����c
�|��v�Bv;��֭|>��
x ,�(s�8㌙3g��_�z��x����������
.��c�
v�a��u�������&G}tJ��������@�01q�8''+'�R�k�#�z��_|1���/���`U�n�:T�9眃�Lgv;e۵kW�9������ [...]
+�x���ׯ���r�-W_}u�J�� � ��������u�]V�����q�_p��
w����X�v�B��
�s�]q�<��ܹs�>}<b	�:t(�Ə�[�
rW`�v��q�q��#�V�Z�V�C-Z������," " "P8��cl���}��
�
Lg'� �#p"��u�YD,nԠ����o
�[��=�0����f��f���W�^=7�wҤIx[1gmϺu�oc��|I
ף���(��5U )�$�$z�V�>H
��ŋ��x���8|Æ
��_5jd.��=z��\�V�!�i��K��_��W ��Ç�$^�dɘ1c�w�����SO����<y�d�������m�ƍp{��'��<�p����o���e�
˫����e��" " " ��O��W�[C�R��
e7
+�V�N�~���xp�
7�?jQ
�}l��۷�ر���(f���^���{5kִ����K/���c�U�R�0* ��\�5pT�Q��O�
X�5f��+�|���kg^�4�p$p����;aLs��$���0L�c-^v�m��k-]���ܴiS� �ٙ0a�<W���k����L�_���
���E��䈀�����D �8�Y�Df�R�o�!ùH�����q�_W�0
H�4pbg��D9�x`�'�>l,sC����!C�%�ʿ���y~衇�ƭ[��.�f��2�w�
}��>o۵kWړM䙓��=�9QWN�����"N��0�}���G��{98_QH����=<�?ĩ�������\�����]�����׿�5wV���u�QX�������-�9��N嘡

��9ˈ��[�.v�� �#�
+9s��
��������j���o&��=�'��1�m;�+�p���d��c
�N�t �8��qC�1�����dy;	9�u��IZ:�l�a�c��4-'�tR�3bn�C_�
�0�ǰ�
��y���$�
�g�x��
p
��
�2=�7
=/���_�[Sle|̡��AD@D@D��r'�,�

9��8����
����Ǡ$�Y#0�X��F�5
=c1���$bc�����e�#��X�f�����ڸ��[�
������͆A3k�,�$����N��
Xoٲ��gn;���>)2x���OG�d�ak�X�e;��c8��5�S]ۗ��	��}��D;���
O?���9(�G�;w�$��;��\>��S{��
�a�@Ƚ�i�j�8Z�oI��

a',��������S8�g0��[�^����� �
�k�!�Eǎ
��?E9/���
4�:��_}D@D@D@���k������Nv���$7!��7o6�ʘV={���������	i0`�Q����c��}��3f���ldl0�"�

�X40I".X�f���:1
n�����+121n��Æ
#a
��
���k���c8���mi��D�X������
m�d3\R�
�
���&�
E���$R ��(Il �9��W�a��>c!���ۨ�Qn�WR���e�l�x8k 	���_�~�%d�ߍ7�H��(煸|�"���X�(4�\s8�蓛/Y���O�c(�ƿ��
|��{�6n��B#" �`����7����s����M��۞�'w����]{~ڟ����{�>�O��jV��^0g�,��=��g��G�y��3N=�4��/�Q6�r<��h�U��ً@�H��3
"7�̙���:BD@D@D�P�9�s��"|YY�Fޟs K���B
���&%Y�扩HK��2@�P
�f�Q�%�e`�RQD@D@2�@��l���
�S�tme��سS��t|"��� ��U�r*��R$�|q���Y0��'�1����g7<��{�yg�#������H;^��X�ܒxe�B�y�M �	X.�^:VD@D@D@D@��X
�q�P���|+�Ԕf���J�DP�����u�(l@�����R2����i��.
�." "�9�/T��������c��+ǝ�1s�5��UJ
��M����T�˄����Ir���P#���
q+�q#�v�կ~E2O����'@~R}Ҙ�K�"�w�\�)����O�_���;����D12�;�8 R���3�t%�m����
+����
j�ڵ��v u�z�<a��:��(��"uJׅN��v��9
Ԟ�%��f͚�5*TH�z	LpW2+�L���׵�U�����R�L��L��y�[�̸��P3ϔ��������KQ�LӧQhh�"!@�4�>]w�u��������T3%�����r�!E2\��
:`,ں]�|�
+P��ȇ.��S�Q��ZZ�&M��O���<�4%�N>�dS���
����r.�Q��zs]
3f̓O>I�`9)����C^
���ʉǛ��Ԃ��
5�l�/\�`A�Ν��0�W��{/7�Y(��l�H�nݺaÆ�Z��xh{J3I:��p�ԩ�Yr�2{�l+���.�������0o�t�))Ig�q)�v���SV�����C3���IѾk���I�u�Y�N����6��ܷ���7��z2
gn��N���|?}�'=���W��Mࡇ
�V�T*?@��~�-��b�ۥK
8^Rx�}ӎq�?(��?���~�m"��ƍ�j�vB⁘CQX��-,�z��a��go$�����t���\p�1�
Cv&�fn3(��w	qc������'s�޽��
��ȡt1F�+�;
*�R��������/_�)��#`��6g\����^�Ȫ^�:��9c�4߳�'�������߾��
�o�lڴ�������-Bݺu��#N�v��<��6O�24z
+G�r�r�X�����߸��vh�E������,�OOJUs���;�<���n���.���J���o� =_y�
+>s5S��[@#�O��>��T������@9&�e˖+Vt��)�
/��l�
;v�b���$�����34M�b��t�M�<�
�� ;'�YYY�۷��2;��T)fz�jo��Q%�{�?[��tkԨV�iӸ��[
+m�C��ɡ�
�� g�L_�|y��6T�h�
s����}�s��������o�k�c�/]�����}NR��ƾ�̻Dٖ~��� �aӂ��
���Ƃ��ׯ����=�ܗ�V��o\�s�����c�]��G�ݻwG�?�|=�
���h�ˇ��pˍp�3�8#@��|��3G���X�xJ
�����oh?=�XW�6m�p�{+X��y
�" " � �G�J��Z����Ͽ�;0��� �՞���T0
0
�����F ^�E�̛<Wǎd'�^�7��(#�3���=�N�c������y c���NjJ�q�kϣ?A��Ǫ�����E����KܵQDy���=/�����|5a��ϼ��q�����xc�c�>⵵��fش��iՓo���
{N����m3���ؿw�o�^��Fޛ��X����Fw���	�����>�1�[�li[p$�P���{瑺y
�Kz��
�K/�D7s�_{4�?�W���hРkԨe� 9X�9НoJJtްa�L���>��C����s���)*
��`=]�ф
:�у�G?�����" " � �e��������d�z^s�5-��ЫW/,"M�(v����믿���E6ܥ��#���)�KE�{�M����ڧO��K��m���z�-B�񐲺�0�V�*U��]�4XZt=SҪ��
7��Ʋ��T��+W�@\�G:�������}�Laj�
ģy@��������S���t�؄
�?��'nj�8�4T-�C��~1�B̝_ю��y,��%MD@D �	��]K��p׮]	~�ѱ�	\q��?��s<
'|�C�߯|�(���`;�3(���9�̆E^�~}�!%{��TO�;�:nܸ�
+�c0b�5i�':��8$��k���`�
����14�#��QT�ùq�_�+����QV���
 �>ر�=%�f�N�ɖ�m��~�Qfb���'�@wݷ�ɉ���8.�i\�j����i��'Gs͚5VN���;*XO�?kQ�`��E%?�\�GD@D�"��!����C�/
�ڵky β+�X~[����G a�i��.��
�!i1
+c�D��R�+�
P,7��YDx�A�=�oܸѽ� ���9����J��7.�d�e2��J�vN*'@�?I<}
��o]_��>��+����"t�
�Qc9��۞z�)�(�9�ݱ�V��H��u
+7@!˜qx��4n
+v�''%U�8.�!g�}6K�C�k/��� �~z�D��s�
6l��%Kȕc�n��m
-��o�J��o�`=���\�<=`r������!U��/" "P�	����ZRF`��t��W�����7a��bIs�A�������㷕 ���LdleL#��0
9~�Rq���M1�b)��,"
h���lı
y�x�C>��c|�䓶�����(Rљ\~�d�φ�C7?��c`�_u�U��V���_�u��챕
��
@<��ӟ�D��#FqaT$\� yR��C�5���S��߸rx�Bv3�Z��̆"�!'UU��K 8�'1
+9�Xv,�OO��s
+$Wt��W[!���!�r�ص��L����zrr��y����3%��O�
R���" " � G0�03�Cp!',#+�4O�y�M*"
�����
+3�����Ӛ�DxC	ư�S��g/��)v*�x��@ln=`.�<S�
�
v	:�	�W1��7�GHNǾIcB�3Q
�g�F������g�@�U�E
�%�����-
i�3:���=����e�hG<� ��M��?X�T�d*��K���N�����.�}מ������ݽg�ݧ��z5�fg/�3o֐!�>8�3+����8���
+����\X�r��'7g{B@�
ʝ[��� ��!�]@�x�P�:c�EW�B�>]2A/ʔ���e�>�AD@D@D@D 
d�3�{�o��4(�C�V�j�l��WJf褣����9)�J�uXB�9!1%<}
'" " "P��F���\&1��y�tD@D@D@D@J��7
�y]��ʥ�O㊀������T4e�V&�I��ȡ�l]xᅦ?y�����>�$K
�W����A��%�RaU���m�8���)+>�僼f!" �C Ϲ

�����
+��)$�M,iS:�8� �z
<8���#�^���O���}��w�"�6eJ>��Cw"��կh�V�Z��U���n��Yδ�c�M��-��-Bt%" �H !
9ܯ�U��7�
?��#RC�r����e�
Am�(=3�ń�a~��q��+q�$鷧%3�P*Z�-�4:}~��RO(E�2V)�i��6p�@�ƺ�P���,Ԭ6����w�����/~A�]�vٹQp�Z��(�
A��)Aٻw�СC	T E�n�(
���332�a��g"7�[ԋ����O8�_�����f�|?}��1$�N�����(&��C^�������r����c���<%�Ǝ
k�5�MJ��*��
ؒ?�L\�I�W�����'��:�
�
Hz���@���;N���Hv�o^��K*?@�N]{��s�p���3�T�R6��3������Ͼ���o��
+�����@Q(�R�/�me;v���qpz�ERT�|x�h�f#���ɓ����}��<�9�������1c�PU2�=�	c�����H�7o
��[�<%Q�4��
~ ٷ1(��7�0)�|�R	3X��>r/^��믷k��Bc?}�~b�r5�~�믿~뭷(��ސ�B�x
C�d`�L�n�>_
�Eu������F���m@���z�F'�����3�2�N��P�
>~�������y��w�y����8qb�U�T�s��>ȣ��7��˚5k"����w
CP��%P�j���W;����/���v�6V� ٣�:
+G�X�ؠl�ͼ;s�Lۂ�.ְi�5k^X��駟�y����sp������ʴ�1ű�����CB��޽���Ǜ�m;/�Q�8� 	~���1�Q���
�
s
7$
ή>~o�ܹ�=�-�Ä	ˁ��;+-��0��y��\�~��s~�0tK<��^�~��}���ۀ�f�x�y�6g�
.c�H�W��PPV����|�[6���{>2�!�����
߸�
�85�'��=tj� " "�!��{^|}�w���j��/�y����o��37<�ƺ�^�|�kkzeͰi���Ҫ'�ZG�c;��4w����(�ߊo�vd�p�2դ	� <���G}�c��l�Ҷ�H޳gO�
=��ֻwoBL�/�Ix
��^z�n�(���n0�э�)
�3
�r�t�
Ži��O�
j� ��
8�Nt�l���_�>��Mˉ'�]H��]`�����0�+
+�T�[?}>ר�x��7���/�/_��F�f�5jt�5�p|����	���?
�
���������o�R~e|�QΚ������.ǣ��n+�T����ʕ+��}� �=-���
+.^6S����_{�'�|����OH�9ʯ�t1���n�P�(�#��"Ԫ�E�-Z�I?�
�wu��7Z������
+�ˉ��a�
+t��w�
,?Q��
+p��CL�l���b.�3"i" " �I �
��y
��|�!��*D F�*UXcj>{*?c�P/�c�=�m��~���f\
hF?$�g�J1&��4�Z��
Ŏi��O�rR��������?��3�.1�|~�C�����3�C�_�~�+=���n��I�zH��ڵky Ų��
�IL�8����H�+�/�5k���{�	���M7������gϞ<R�e��M�o�!� " "P��m��ó���+��뮻�ʼn���
z���<��SXo�'L�>�_e�ݙ�=���4��s�=��2�i�Xធ�3�����cS�����>�%w�E�
+�K/�4@��>��	��q6nK�C� ���eC^�m�e˖gi$�[N����T� �L�y
=�,v(����|�ǰ�׭�>�^��Gs�u	�g
�{��B��h�'�&��;l�0��%K�<����g$@���L�$6���ट_3J�yL�z�Q" " EE �V��NW<
Y���?��dI#F� ��H"
�Uk]�ti߾=a���ǯ=�������ӧ�I�T�~�T%��<
���;Y�O�/I�L;��$�;�������
y����O�r�F!|�
e�p�駳oz��G�'�,\Y��!;蠃��!\�S�N䤋B��<F9�,�)��6��J`�\�~��z=�ԟ�8O<��_��W�;aM�+�%�t^E(?)m>�$e瓎3�ꫯ=#I��	�"��j|cԨQ+V�@��痷��7Tu(2_�y[y0�,^2��-���:��&>ڙ�)�Q�T>c��5;;��4�(9���ק�����JV
�B/���zH����S�x%\D@D��
<�ۅ�������
r�������4�X�f���s�ͺoȐ�X
��sb)
^��������(*sqϟ,�J��B*S�(=�A�_X�ɢ{L�#G��/�*OS�\��T�[]?��b�\D@D@
+A �"�TV�c;�&M��^�<��zk<�49+�ҿL�!�a
<����~�YF0I��NyR>�up�J���S�.9�ED@D mnN����Ԝ�[�|��ft������E@D@D@D@*��c0�r^��u��2�`�8gZ3(�e.��9Р" " " " �I��ʹvr��$�Y|#e�ajZH��1)�M��GM�4��N$:�"<m�z&�=�yJ���U���`�i\�E�mJ���L2���"�O��U
��	�y���HI(n~�|s���_w�ƦM��T�SR�����#����
/�����G�i�Pَbd[��ȇ~��"�IvjHI�"ס,
+���m)@$��B�ލ{��>�-?�E^���ʇ(@��<KEI
*" e�@~
F�>N�V�*�k�"p}��m�ݖ!�"c?嵢(CM�(=M��Q���/>�#�?��"�IHI�"ס�
+�h�m)�)*��'���"�RZ<K�(��r
�k.c��Cx�i�Q��Lmv��oABV�[Q��cǎ�EΩ{�'�/~�
J^�ڵ����r�֭6lتU+�
B�Se��o8��d��٩
k�3�
.�����?�c��[[�n����O8�_�����f0� ���-Q�!����R\��p�>iϽ�
X&�[
+ s]q��iӆz�iG2p z8�T��x�&=�I�qc<�J.B&��`��t�-ZP��}��d<�%
�I?_I?��JI��u�]|�5�
;֞Ǥ�k3�ԩS����~��J���;N���H�{��O��<��W9���tD@D ���}�Z$��W���u��X!�Q
��|x�T�H�W��ɓ'S��/�x�L�M�6Q���wnjCU���4N��(�Ѯ];;hBl��

ٷ1(��7�0)�|�R��#��!`�z�q
���+�L�2��_�5kfV�� �d�u��?���ꭷޢp�{��I���
��>LI&�O�ya+���v�����Ӑ������(���
��믿�<�
=�=����<�3ز��qk1c�
�pO�����ǓC���7�T�O���M���_}������74�o���|m���
v	�����������7�yw�̙��~����5lZ���š�O?����ׯ����=�ܗ�V�&T��%?�
s
}�!��w��m��#DĶ��(g�qF ?�F�D=�y΂;_W��3�ho���C�k�=�\
x��u�(�OW
��*i/�(�I�Ǿ�N����cc�W�^�<x>b���>_~���y%�iR�w����2���	&D~���|�߷
e�̙���/@�[~��ͫ�}�h�" e����y��E�=7�	��|������O�����
{����}�5æ}v�K��|k
=���s���'�yV��L�����jG6������I�~
<T�p�޽Ԅ��hٲ�m���gϞ
=zП�w��<�4���'���|���Kt3G���q�ѠA��Q��oTMC��!6l�����;����r
:Q� n�\}���q)�ˁ�̿n���V��X�أ\��ŭ����+/_��w���/�_9�-��*�T��Ƿ��'�l$,�����
�|� ���f͚5j��k�A������W�|�_D@�:�����ſؖt2<������r�J"
�K������� š�Lei�с�����x\��~B��Q~�i`u�/y�1�����L�-"s��s���m��2?}�����/��ˌ�4H�Ȗ��
]��=
�� [...]
+C�\ ��T�[?}�}f��Q1�����
X�fM�/=��3g�y&�D�Ǐg�Z�Nt�~
��]>��,A����=����D��_�v-�X.�_�c=	=���w^���P7(�����>�_NV�h6���
���|�W�u�]�`�(b
�C=d퀧�z�_B��O�nm;
���ვ`~��>�l�
�?�}�M���K�p� n�B�K&N�������;����ч5�x�/���"ԧ��*�떤��{�>H;��
+C��z�#��PsǤ�H����;
w�?��"FH��*�26sY���}�n�>�ËL^�Y�ˊU"�L�"���!`^

]l}
+��o�e˖���(��N��j4�7Ax4i.I$��+3��<��Wa�R
+" e����u%�H��sc�79���?�"1b�@�=V�u�ҥ}���>������+�nj�8��������_r���h����(
t�x*��Il�
���<�x�>}�V��&���[��

��8�����0ؑC�@/K�2#*��6�>\�� ��S�N�K�JbԲ����O�6./���7A�m��E��ST�r�W��6��#���ᦛn�ٳ'��س��uR)�'��O<�׿��{
2��Õ�� Ϥ��ͫ0���2G �g'5[�dɳo������

��_Fd�d�FW
�wD
�8$��R�VΦS*
K~�гf:�[���
=�Xg��O�Wn��<�����+732)��*g�I���9xr�
;oߵ��9�H3w��g�i��^ͪ��
�̛5��
|c�	�����M�[�zZ����k�2�?m�uEщ��lQz��7]��M�T�u��g�$b"��g>��F�Z^�U�$PD�\�Q�	�r��M�4!�y6n���(�fԨQ&#�Q���]��A5Cd���0b!~���q;D0L�(VH5��
+�E���T4c0�r,�̍��hgH�H�@ab0nZ�ӝ
��\�r�;��@�CD@D@D@D@D �@Q��n/b0�ql�eʺ�D@D@D@D@*4�\�+���E�X����6`��(��ԧ�?yg����>,!23*�I�&eo&lŭO��'�.��3Wt
J캚4i��H �u媗���tӦM�>
��Z�+�:��!�;�J탫ԩQ�n��?�_ԫU�~�j��rme�?9n*[��_��M��T�S�O���?x�`W?����?�|tU��T����$k��~�Ҥ�O_=
O`���\u�]w�+j�̙d¦�f"iq
?J!%$^�Ex]Q~��э5�{��ͮ�T���
Y�(��el��k'Y;���z�����8N���'������^���k��n��/������z��M
'~�x����m]���^���u-����"0�J�Y��G}t�m�e_2�Sf,�2u�[��e�e(�R�&UV�Gѓ���z*��v� [...]
+�1���S��E%?��ҨQ���_t��Qd��_|�G
�"�k?�3(�N�����D@D@���������;�y`��u�m�����~7���������?������j�yc0��J�I;��(�E�6
���H�I
;jVw�ؑ��1t���L��/~�c	�����e�֭6lتU+
����t�Є:
B�2���ᶳ���[�^��'�p�/�K��L3X~�rv�؁!�򤝢ֱ�y�k�=��C8)8;�;N:��#e�M7�_{�F��
�ƕ+Wr�Qɼܹs'^��˗��T��B�]�'�zo�g϶:�ݻw�С�#�[�n�r4o��T?f�n����$��޽;'�瞣��y�*O���o������U�b����YD1���r�-�k�4�A�^ޤ�/�3��.�J��fSW�zv)Sσ&L[?���z����'��d�G�̓�̸\p;��s��NO�[��R���." " ��aڏ���}��@��ٳ{7&��~��~�������4�b?;^[�/^9ɠի [...]
+��������������z��~��O~�<��
+R����lٲb�
+
+D�t)�Ξϗ��s��?��
7���[&.nw1�����_r-�O�t`��,��7n�>d,�*J����	$<���IͿ�~�
���}������11��0bl��5�M�ƾ�̻Da��s܄Xæe֬Yxa����~Jg<R�sp������*��ǵ���
�t�ٕ�?����(<���E��v�7́&L0
+������1[ �Pm�0g�
��^���c��62G1_
g07<��W�^<CH�l��T#��82�>wp����=����O���)
+�3f���Iz
��Ǔ"�
��W_Y�p�5<ں�e�U���r�{�ϝ���ﺢ�o߾�N�xy�����b�P5}-Z�Kn�������]_,Q�a����������$�DƁ�s���۾���|��7_}�տ7�{�6��
z
۱�s��u��Y'�>��[���Վl�_�c>�^��g�:T�
�5��<�y˖-m
�d��ѣ��z���#o��Kz&���^��9ʯ=���b<��<��옖T����
J<�6O<�D����7n �C0�8_͚5c�5�\c�M0.-v��p
�J��3����o�J*ǼՠA�֨Q�g�[&vx����O� }NA��F������y���'?
�
�
��o��G�������s���]z�o��&�ǚ5k֮]Kn�4��}H͚5���F�rt����@E&��W_a	`�|�m�c�`,6���n<r�����ST����!�iy�Wp����,��z|��'�0�N�g��(���|.
9�����$T�+� 
�X^
nA7��#u���8ծ]'1� +�x�O�9ʕ����%��O�4�������4c�%�n�Bs���٣m2��/#$��.
�I�BS�J��m�_9x]���nD�X�C�T)�p/�<<�n�jժ)�nu�����fQ����4����V�w�%�@�–��}~�
�2��1���
%�sR~P��d�nv$�b��~��d�Œ�~Y����<
̏q��P9@��U�LOvLK������o�ʕ	S1?��3���n�5�Ϭ�����A��ps��
k�''���=��y�y��L���kN��
?>FO"<
���'���0����O~�<�2�t3;�2�_�>�"�u����w����i)��휞�~���늱�
�t�2}�tle|���B��
�`�n�j����8� �Ļ��Ա" " �@��-�]�������O�.ʮW��&�j��S>"�l��n_��:�����ʻ�^~�X��#
���UX�<��_>�S�מ�N��"�5.��d5N����g���4���cEZ��������ڸۡ�l�2�����ͻd���»���?Ƈ�?)O4Ī#<��$53����b6
syɒ% [...]
���R�#��<��O���[��},�s�n�6��|��5���qq��
��7�Z�������yI���(\�ʬ@
]��ǐ���kq=�&�K��.KuRn>��)�
+" " 8��4mV��þ���#
��f���b)_�<	�s�zd�?*O�� �|��g�9b�".L?�:���";a����kO�Kp�w��x_���!�
�T?�$��L��i�
*?%9��@�M7�ԳgO����v�:蠃��S��_b��>~��j˳r�6�y��'�9"l70򜝙_N�/�pr p��@@�
 Ǐz��ӧ�	 x^���'�D�
�Σ���xځ8��-��2YN�=�%c�y���ƒT'X�nތ�f��y����+�	��1��~a!�ڔ!���	��C��4&e�7r L[�C �q��-Ok�G�E~�d��f�'��v@�~�|��5���3޻�/������`�+D_>��!�=� ���15<�I������:)��ass���(��b�/���͗�\�*H��ܹsC��JR+�%" "P&
{`(�Hb��b9��[|�Ћ����<?���C�2��� [...]
+[�����e�ŝ��|\�{�3�љ9mi%" " " " ��l��_����R�	1���J���l��c~�e��l��
�W�VnJ^�g>���
c+�uL��o���hQ^i�Ĥ&�2�
��~���~��ى����4�n�Y7b���-?�=װ�����
�4cGpɋ�$f�h[x_�$�� �I:� ��8���Qg��L8&�s)x���Zș��R)M��T�
+�>��r�8'Qy䙥<`�R><�V�B7�~:�$J���R^��4B휢�cʓ����[,�W���D��S�d�߅HÇL$MEB�D
uJ�Q��,�	��ˏ�=�~�E�x�"H���<R�^
+��|D"]�	�RQ��_��:���f�
�
+�*�����iצu���w;��\�rx�o�V>��&����7p,ǂ���s�1�>�r,gY��:k"�8n
��f?f
:�b�
�`�2
'_��^��i�o�ۓ[�
���oz��|�}WX=�v2��J�U����5�sq�ݝa"}��pxA�
�ɔ�%�
?��ԣ�9k�ش>	.���@C�SH�)������Q��\%

�V�j
p�ۭQpq$;�
&��Z�
���\\	W[�k%o���@:�|�
�
&�}���v\v�<��ip/G�
�����I$ꕖ?ρѿ�
�c��o���.QB�Orȷg�->G�f_�I盠p�s��0�J
+?�
��=2�7"�
�iH�o�K&�J��b����
++�b����ʁwQ	?RAX����?[V=�_��r��w�m_�nK��9�Է5%���o���o�r�Y���<�-2�gO�٩�g�
�RV/�K[�y��7vH�>�_����7�y��h�;��Q�N�=�2ޘ�DZ��y�q�%p[\�t���I��ɾ�<�0F0o�y^r
?�㼛�#a�o�n�.qqy��܏B,ϱs��]��qNT�cH�_�=��K��%��a���;�y�I1V7s��8����/�<1v&y�&��x>��5wΆ�w�3����i��H�{�����'�s��k��W�:K�
���|
�����
2_{�a�	{���%�(~X
+>��2Iv������������,G��
|��()�~��n�W�(��}��9<��,t�:�*����gң�
|;&~y$�
�z�Q��\�{6��#���)��
�*
�Gr8Ѿ��
+~�'|�l��tz$u�$�-�
4@��_��#��$P���4��~���m�p���}�
+'9�����w�
+	>?P��ս���Zq�jе�
���J����`�������sE%�(0�?
�w
+�&�޴�i�ؠ�iY�
zxL�������
mqD����MӘ�������R)�r�oU�
X�2/+��V90�r޿̊���U)����Y�n�F����61a�c�v'BK�61ww�����7��Q�u�I
y(\�����Ʃ� �9qupNe��o�1�O-��'�����cX�6�k�H/xA$�$���k%��t��i�
)����V����c�:t�O}����G�6~“u/�͒�2>�^��Y�?��g2�I�5���{/�$�\��xeȆ�^���D~Ws�뾶�f:fbI/�g�#�+�H*Xa����i�T�����(W��'>q�M����,�ř{l�{�+ ~Ey�ǿ�d�׃���/��o��\��b�%[p�x�Ҹ g���B:����;I��a}��B~"�+�Ր��iL���
�\ͤ����
�d������{|跄�7D�C��'�*	��Hz��/����U%~�r��j�m�=�$������|؂߷�&�g��2<��xb���?%V������wGK�I� [...]
+*��9�����* I�:1�
|҂��7�/Ⱥ�|9�4����x����@��Ʋ��~��Z�~fy��I�S�a�
�:��!6=����zi���'
׾�i?����^~�4vp�V��_9�,΢o�1�c�e
�c��
�����~�����p���ǹ�r���Wy�y�d�r��Sl�_�俰>=?l�G,/ݓ����OM�;0υ�{xB�/�X��S1�/
�BY�w�bN�βc�Yů�_l!?
�m���=n^��_����
r=��:886pDc������f��*�udGK޷�+7�d��|��'ʵM}��~e��]���	�(H^��!���WN¤b
�7�G*����2O�5��~+�vC�s�徕���2�������:�8�d�݄#�����I6֤�*LI�؏�I�X��-����&*x�x�L��
+S��y
ac
኏��8�|q�_�QGL����m��6�A��"N6�\�����y��[?�E�%����/���Cn��.*��o��
�<C��=�^��o�Ԡ֟:
�{͜{�{:��1Y�<rۮ핷|�����
X�߭����+�NS~"
C).� �~I�I<�x��t�rͦ�c��(�]�ί^�3j�[�՜��QI���7sT�B�Ѣ
+��W��+�sQ�F�R��
+W,��
+�b
iQX
�������6��ߏ�cQ�S.�U��]�q�oy�����������TNd5�5*�O]���y�O�xF(
���/]���a�L��!=f�
+��,����f��/� y�M{i���Q�{�Yu�ɩV+��3��u�;�}��_�ݱs�'��!��%� ��5H,
4��o�%�C�.�4
��>E���W����(��B
�wR��ԥ�{�(�t�	�v��J�["lb��=�H��#�B�(��rQ�
+U�h:��X���?�E3��� o��w��X�I�kI���;^(R"R�(����M��;�*����T��U���j5s������X�
+endstream
+endobj
+2801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.939 544.286 345.152 555.134]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.1) >>
+>> endobj
+2803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.938 132.884 436.151 143.733]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.2) >>
+>> endobj
+2808 0 obj <<
+/D [2806 0 R /XYZ 86.4 726.045 null]
+>> endobj
+973 0 obj <<
+/D [2806 0 R /XYZ 141.991 204.57 null]
+>> endobj
+2805 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F48 966 0 R /F14 1030 0 R /F49 967 0 R /F16 717 0 R >>
+/XObject << /Im9 2802 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>> endobj
+2811 0 obj <<
+/Length 1163      
+/Filter /FlateDecode
+>>
+stream
+xڵV�n�8}�W�e�A4o�� ��c;�n�4���@[�-�DuI%���~��d�q6�C�I�
��
�
+;wv���{�3&
���™��H �T"��3_:_]���S�����\�&����Y��+�Q7�|�.��'��%vs�Wu��q��\�p��,`@�E�ܔ��}��7��~�D�
�zPą��z_�cg	;
����c�9�IDa�:�ާ
n2i�h,"�a��~�0�G��w�fS�L���b��
+p���7�~ǁ�2�0IX�x 
H�[2�ԝN�g��DO<���
���N�wv�^v�g\v�fFGi��T�5�e�X�f��1!�K(ʣ֦��K��1��Y�/m|��,��
D�
��m�ݣC��G�ch�`��c�ݧ��t�O��3
!A$
(�Ҟ?ݨti���"���D��E�e6|��JK6&&��$B�������Ë���&vڸ�qK{0IU�,��~+)n�8��,�뤴0Ū1Ӭ�n�P���a���7.U|�6+UR�`]Y�U�un&
�d l:{Y
�4D$�Ia��Ee{oSFZ�ܝ�Y��4-t�;E?�4��[}U{��e��7i݊+��	�*1���?Dq��/����S�pd#����
�8�C4���L.g��t���z|6��g]dI?��1|�J��eN~#�X���/����x��
��y�����
��U�h���M����m3R�3ۛf�c��!���ݠ���
� 
+%C����v���U(�����o8�7�z�OU�1�n
a��Zk��PK
+H�;KUUۑ��Ѝ���_
�V�J�J;��D�>{ʞ�ՑW��H�US���y��[
�NU�=<{P3�ղ��֖xS#�ܙ�0�ë�,4Tb�����Vڪ�K��ѫ�D �l���Z[��N�9d(1+
�m{�qj�R���
��!}�pl����Vu�5���������3�l�C��T��@h
E�z��zв�AxR� H)<�M��L���
B"��W#I�K?`Ȣ��y�[&���@��y���G�'q
��pH�$�۬O�v�>V����\3���<U�e\n�N8�o��!�#��ۇ?^�D�O9�X���x�2!�߅1����W�" �����s�.�j�t�	���S�3&�є�� a@�36{��(�����/P�/+u
X
+endstream
+endobj
+2810 0 obj <<
+/Type /Page
+/Contents 2811 0 R
+/Resources 2809 0 R
+/MediaBox [0 0 612 792]
+/Parent 2786 0 R
+>> endobj
+2804 0 obj <<
+/Type /XObject
+/Subtype /Image
+/Width 953
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Length 105528
+/Filter /FlateDecode
+/DecodeParms << /Colors 3 /Columns 953 /BitsPerComponent 8 /Predictor 10 >>
+>>
+stream
+x^�]	�N������y
�W��H�L��^)Q����h�ޣx��JD�"%/!
$M^H%�L�R�
2�����o������w�N��|���ڿ��9����k%��2�M8�?��"�'�%1��	5rAdt4�E��N����h����wyw��-?bO����ؓ<]�F�접e�N�3us�\"3!�D�
�$مDA��ޯ�^��dp
+�':Q��.w�Z�beKTLL)�P�Db�����cwŸ��)[�h�����7����Q��2ĕ,C$5�Cmx�ɲhgE�o�#�䠱k�w!�s�ੀ����!w
W'�M����yÆ7� d��
`Yv9 Ѓ�D��29�G���t����A|�k�̨�ON�3O�
~:��F=I^7Ĩus�����6
�JqW��θd�]���xn�
��`�������6��Lpݓ-Y>7k�{�h����]
���-xNqV���?3��+�)�������K9{��5���'eN~��c^�A����ڶ������_?n��#�ҫ7O,U%�x�Ĕv#2�MZ���᏷i{��-�~��>�����y��Qq�2����TX�?���S	ᮋ݃jY/��
$�ڌ-��
4ݞY�,!�I�-J��UԵ��A𓺃?�1�+�t��f(�D9���L�Q�
Q��8$d�_�D"���Z$3&J)���N�lZ
+�UUE��Q�:)����*�+Ŏ��b���R�8�D���b��@���"۰��!����d��6�%�Ǥ�w��E���Z�N-Ool��!*9U�]
��=v
V~�������)Ӛ���!5��%�a,nj������%F�
�U=��w��u/1*G����Ex
CB]�Na
7=����.�BA�8θ�d� �okX�ݸ��yV;|*�[�T�K
c_P7mFU�(�괿0u�~e�yF�ⶋ�&ƥB�����4n��Ͱ�G�q[}�ú+��!)�~щ����r����2
�Q��z|�|��P4![�0GsI�o�E$�Q
�R�g�Oρ�R_�ʑ�j���E�萨%�d7-ÑuHu��O

v��������г�Z/
(���u��q�������>UjD?��Ϊ<Uʗz��W�������|k�7=���s+���J�R�F=ru�}�-���/��g&r�_����4J
�bO���
����Nl�C��t<3�d�3�
l��7?_�S�sNY�ѼaC��yEB�*I�H��
��M�:�~�#����t"
թ=�8���?�bD��YkBr�Ĕ䤢E�\�εh�bE��M2�D�gQT�P׫�!�hr"V�dQ
b�-B
ڃ�Œ���X{��PU�%�C�Xi#���I?Q�H�b�XI��)%ȝE�QX��T��(�>*Q�Y����L�Q�(���
+�=tH�E ����T��.�H*.��n�
(P<ŔB1�_T�~(���Є����<
+��8TD�Ջ�F�
:;�(���L'7I�E�����@
����h���P�>3$[�)��A����uc�"!�;�#�^C�P��*�
�]�Qȳ�����
��CCוd��d�v�y�{��^���5���RIc�n����O����[ꓼǩLu�
u�N�:��Q��:��3p���sل�`q`��z
�
��|���P��O����l������M϶��3�
;t���I�U1 ����<wVY��x8O�(d��ε\�{�m������.�8�Iȝ!�p�i�7*����xiڹx��Ӻ+���q
���yb�5��u���wYX��bd�ы4!ѓF\5����_)A
U�z�$�>���!:,v[F.qH��MZ=�d+��#4!ÁT�
+
;��S����,�?���gl�2JϘ�0�����������C�Hs�f:���d<�UuO���t����	�
�|�ǰ
?v,#�X�1l��y�τci����2��2ӱ�����)�z��]G�0*B���	�B�X3�D�h�g�O�$��=��|[�&�
6"��Ԅ?v%e
��m��~��]��d�xy1�rة�ab� lj��E������E%K�+*�WrJ
+ؘ [�j1K��,:H�PSCY^�E�:%�=���!�I����ޣ��H)�!��R�2�>
+��)���A2H��3�z'���.�N���vI*.�'��<U<U�NjQ(F�U1T��$�h�)E�|Ape!Jh%�.�#
+H��}K�$� 	N)*���(�� 6Jbg1QR���mA���,&��/
+��*��b�X�pɡ�D7���
+pҋ$�eI��^�P��e#/#}�K�,y�P7��8�.5�@�Ȱyە7,'��7���Ab��� �Dľ�'Lp#���g��#yS�
��TK��:0(�x�H���T^QZ�X荙N�bj�����Ҭ���˪�$("��@ŵ:J��N?����Y=a�b�ZF�?Z���r6' ����� �B_��ذ^����5�w�+u\���Q="Y��?���$}ǂ�@�q
؟���a>`�%bLVvR��c�Z����B7s�.�$Xm
�
�EL�`��⹊F�
bM�,�l��C�U>��qdh�|j�W���Nɘ�~]��
��q�>���GsoAseK�@Ti�>��%���;��\�S>�L�L�
��A�A�!)zA��eY��q�Mj�0fv�ٺ={� I� NÚ�����XZ������W
���X���(J��s=.��>$�EE�_���|j�:(ufF�
����ls�ueJ�<�[b�)����O�:-�{8�>C�JS��Z|�H=(��48[;e���i���

+����U8�4���`
֙S�C�h�=�70ٸ��5d���ƛ�N(vѵk��I�5a}u�RԮy1Л]�f-9f麖[��
Vm��z�=4�ۼ�e?f!TZx�6ݽp�Ӛ~<�޼�|�͠����OO�bX�^���@
*є4��)��b��-�
K1����c�t}vr
��1�
We��A��h*�vgƮ^"�B\�p�_�*��ձ�)Q]5���-U��B>��t�W�ɊB#�6�o�
��m�����1�\ܧ(�
+E�E����B��6
՜�%���}Q'�:��v�Q 
+6����
+�UR�_�#��(��{D��3���Н�|&�N�Y+T�w!���lף�1��E�$��R=�+E�OU,
��P�S!n3�O���'�=b���}sP/x�
�+C�X�����?l���A;��1K��K:�E]�Q�I�PT�!I�hZY'�9%����ч�����+�����c�~����]�fDxz�2���JM}yJ�>�m�y�Yտ�d��5k=�X��]ذ�_�R�Y;��/�x��m{?���X�� ���aȝ���;�Y��>�t�_��xNusO
��,G
�q<��X��
z��ߒ����C��{���6��jK�ٴl�S��U���|��_n�)��
+t��N�'͇D��1#�2a
�\��S1���Ii�@<M<�KR�O�����r�KӺc����c���&������ڕ�J���ɠw:KA�zUc���
G�G$ݜ� �Wb,�e%Z��Z��1D�:G��B�ꖩ�*����㶮Y;���5:3]�K���.�16�O��!~
�?�s�K %1��
[�BW8i֫oCE&�@�ʕrl�x�=���tsQ���`�s��B���@�~��7L�%�Y��Kdt�ͪ>��z`iu�QL�S]�j�Ȼ��%�E���3ƞ��
�t�4h���{$dA^V�D�Ͷl�f���G��S��M�G�6hm޽�6I�+� ����w?9����j(�q밺���� �a����
<�{�w���Bu��
+�/B����ƕ�1a�K,�馍@�m�gM%A68+)��XTU�!ri�N*#�+��V��e0f���uc�զ��$0ơU[ʎ �T�{�am#��S����u'���(
��]ɕ_{e����U�&�n�xF(�^O�j�z�2���҃���G剠��i�ƾ�Ƥ���ͷ�ս �V�R��������Y. ����?Ęo�SM������n›�R&��=��פsN�Վ���	>#
�h�s�����3>�\������͚��w�r%B��:I�)��
@x_���(�/�j�+�`��<�?��4P�
�C~�������w��U.
+�_���0Œ��S!]�����@��K~��+�)7
����=��(�	�!�[�	g	�J�� V҇�ɽA�W`U
E���t� w
ru>�%-�
+�>Q����*��))K��ńE�d�+�'��L�Rr����b�8���v)QP&+�1��VSJǞ��п(��������
g
�����(���<��G�~�*g ��5�P�l��u]�G,�q�
/v��~\��
ҍ�
��`�ii!-�ދ��G��'	��{H�^0l�0�T��i��,'�X��
)�YD�9!���{��G�9���z�
���wC��o�Q�ɍ2n�]����Fw�M�G��J6/�R'Ρ�dDk���#b��x:�F�y�za Ic������9�
�4�#�kl)��l�@��l߲!4���%&�O���:NC�qb�
۝&����挣��G���'Y��@�\�M��O�< �&�� ]2J�2-�Z�(@F+�'B,��,
��.��,ǜ1d�!q��,����
��ES
+�\2�$3�9򞖊)Ó�?)/�$V��k������v��G�q��G�q�X��W��?��*��*V�#�
��؟ii1QT��(�-��a�$�Ҏ
����k�
:�v����
:@�?��q�\��.צ���"S�������<���tȱd�	�R�r=����i�
��T(�=����]��۟�8���#�1��Æ�T���p���yi6�c5����U>���ܵ�r�U3�Ԥ����%VM\S����--(,y0[�������9�ƌ7"ْ[�[p\(`z-kf,��EaA����}�Y�@[�^9m�z֝�j���
�\��y''
�
�-_dI��&ge�y��:��W&7e�,I�d���
�U�j�g��!:_rj��(�,G^���Dt�
SD��+��^��
!F� ��ۥy�O��\�и�9�1���z�ۯg����(���E���팧:���"�#���j
�OI���h�d�琾ʰ!9q째�X�D

r�Vv���?V��rk�+��1�	n,��l(�ӂk�������[� ��˧�4��k�ƌcVa��Q#O�*��m���0ʧF�z�E�jh�ߘ�t��[����Ǎ!�䡘�SĎE���QMP�J�bz�9��D�^�0}��6�/�K�f�������{M�?�
+7b"�R��.*��c�*Ų�݃\���d��Iz��z��"�f
��Y>�-�z$��`
�����WKVe�g[����dBB���
KO+8n:V���c�0��y�yT:��� L M����8]H��>�௎U��0��Ś�|�^���4
qǥ����gzڟb[N�*���^[�x�
+EM�L
a��(�@?�n�"���X����\|%�Z�ƶ��&~�_:�Y
��~0�/y�,p���c/��]�� H���m���	ہ��`	2
+�[����
����AE���r���W��E^"1��ώ���6��X���+�z��b����i�_K�W��c�2Z
+(5-i;s�O��X�KH�[GuC�
ԥ�
N�Q>v

�3�
�8�Ś��_y���sF&~�+��wu�c�Im��o���LU����*�!{He�q=�m���B�� z�k�<0�*;�KCƾ�E
pG
���5M:��_�u)�/��Kl��=b�!��ú����0�F���e\*z
�n>����?�%�<��x�O at Yo
�kY�Vzb����_Ķ|��n
����e,��?�{}���%�Z
�&:�
ѕm1
�4
��y�\��j�&�%�x��Qz��@���
D�N����՝\��؍��:

�j,��ڴ �d���c�zb-�)��.6�l���/jˀR]�Y�.�*,ozR�͏Y>����zP�W��&��)���Bq�P�%MY�,��Gd����=��׽ǝƏ���;�
= �ӎ�}v�ꋭ�ԵV�JS_y��~�ܸC�R��}��ԗ'?�����~M�;���{�5�WZ�h�k�
�m�B�YZ' �j��2y-�_+��m*����V
8NMS����r
+�T!�
���G93��1##I�cT���ß�����@�{�7�Y���+�&����צ�x�m�q�x/�⿉��
���!��O!�,פ"�,n�֭ǓrP�{��WI�፳�e��n�����/����^}�M��?}��
_\�ؖ�27�rC�̱�{������z,�J]��+O�����}V����xm[�sĉڷ��
f���F�U���z(s�;���k�[�@�ߗ?�����&l�u�#�
}��;̝��
�N�t�.x� ԉ��=�=�ۗ�3��u��8����$(Jm0����O���ͻ�y��:�L�:6OKE�-r�:#������/}!�\?��Kk�����b�����&|�-��˼�c_����gέ`�Uu��o�%a��Vg�'�1y*!&�
�
f,f�
��OI���iF�i!�
[/b�5���Uiݽ��b'���3���QW�#�
�6�Lڃ\X��8��?��l(�"��:w�F�dW+
J��[5O�T1kp�
�����g��L F��x@�����&~R
��&��
�|�tR+ [...]
+nܹ��<����G��W�b����K
+��d&U�}Dq�FL{'c�>��JjV�87I�3f%_~���w0fC=��������Q�z����*�����E+7�[��Z�����0�K�/U���Y�����3fL�6���s��1�B�=_>a�p��Vjp�m�Zc�K(m(sa���x̀'7N�"���؇��M[$�3ྌ��͂:�b>|Z�u%N���������Z=�[1�+��K��	I�]FH�t�͜�p�U�
�Ԥ���\�o���JfB��6kڨY�F]x���}V�5N�v�e˕-^�D�"�i
+�i;g��Ӓ�~��
O�m�淾�����>]���	����H`�����[U�1`D��Y:��??���XW�3�G�����P����5����
�����	�`��]jZ!������ejO�����Y�����"�7b_c�uۖ����%~����p�HZ�D�́
_���{�`%	T^v?tZl�n����-ʨِʉŪ�%Խ�?�N��.]�$�
4QR�2�q���:�Y��_J�8|�7��3�o���}'�B�ыV�1�g����Џ^o�DA~�=���ɋ�P~�(D�����r��@���A�Z��+O���y7�]��F֕#�W*�~��2t�ɳJWm�Պ��-U���Z���XՀ{�ق���罅?>���8���
3���{�7�2q�f���s��]5/YiE����\qh誓���$�
*�#u�X�3�6L�4*u=�N
�1�0ѵ
H�I
,�&~�-]ɔ��W�'��E�<5�m(�{c���
u��}7w��u
cл��Ȼ��2vjm!���zR�
��v_{��
j\G
2�g�Z�ڈ��ܝ����y������BO��l���&���RXߴ3i
��*f��!���J��S��"���c�9�O
+
G�
�1C�qH�<$� �SϲE�/Y>�d�*ʛ:�4����r$��F��E1�3��BN�1�7ЮU�<6ē<���u�e�p���89���������K�q��(��7`M?�O8K��+�B�c0~	'u
+b�����
�
6~��sPdZ���j ��
�ԁn�W�^��
�..u:��s����`{��]�����-��y�`8���
��
����Ok���-Z4K�&M7i"��5�R�|�?�+�"��ꃧ��m�	�����%Ui�����-�yo%�,����|�ݔ./o�vc�s����C����Kwƞ������>��냿���}Rm$�=ڻ{M�7�%�Ή��x�EU���<b
�
:E�G�}W^P�+)��B�
��IF��	t���{:]�y
+�*%�KA��� D)A�W3���?���so��j∁�ʉ�괙�͸�uT�ۄ���|{Ⱥ�
\5�]
mٖ�1�Ή&A`9"݈8����›X�]�Y�r��QI�T'�I7}��b�����ʨ�Y�F�hu3��=��B�5��pt��������~:ɪg����(������u'��
��)���h���������֕���h�2Ө!�jĈ�D����'����7v�ʂ��"���}���Ԡ���q��Nz���.b��<n
q7��
+
���e������ݫ��J�
Hqm9p�{�S��4{�#Uw����pi+Ei��g_�8���vr^%�w{]ou��
W�
Wct��
LWCD%%D�a�<4
�	k<&�0Ws`d���Xi䥍�R�)OO
+JB��~��V@�E��p�j�:��ң�\�)��"��V���'��`�����,U1ȷre6�+[n٤\5
���
v,�E�W�J�+���<3�u ��%�
\�̀&��a,N��@HLO�
"� N$��gF
p��C�� dJn(-(d2!_]�*�+YvA=K��xֺ����KUG[$���#�؏�faeLJ��
>��I�j�z �._�2
`� ����P�;���������C{��ù:p�,K?e�<���˟|dЧ��d�=	xz:Z0'��vذ+���.)�FTP���*gu�v����(�-4q�wo�`˳j_�s�[�~�•9B)�*����
w��VA����
H}�AK�'%�O}��AS�:��Ͼ����q�gc[�ݩ�ٝ[N�aϒ箻sY‡O]wέolL����V�܆��s�
�
��B��.2C=I6~���ۨG\~���CW<��=�Z��w6%$����z�W���
?o��t�yw�=��'>?$
҉߿v�����7�ᗯ�����
W��nL��m�����ᰉ7|qߚ���|���Љ
e�ɤ��>����bm��u��FfrAx������O�	��3�����[����|�jW$�Q̇��&�=�&ˀ�Y)f���y�&�*�%�X��@,Yݡ�
�
S�%v����U8vG�(Q�����g�Y@�䭶WW\��D�"I�+�x�ѭ�:�t���'}ܑgV}C��%h
��B���ҵ�ǒ<�u�uj
�{���3ٖ�<D9	^�שo� � �Q|b�XO}[+�Zt�դ�R�dc��5Z��}������ZcC=g�~5<�a�s:�_��:Ή*+��H��� �~T�[�z:wW�g%|�
Km��Z���F���Rb�7g��Z�,�!z$8貨b}�$�,3�*Q���@
%K�LD"y���[��>�MA���yD�U�T���b̨��`B�%&�LS�� ex�
��GHy1ʎ�D����_T�rs�?q'����7
��
+W��@EQW��bK,�Y|#{�~���6�

+`�?���eu<92��
���$�LI*��P<%Q�H*Q,�D���%��LL)����%�'�DqZח�6�����#F��s'��O��Q���%��LH)�T�dB���BN�$P,���.ZOAN5���:|�2�X����ܱ}���C��Î�~��_~���_ڱc��l޼���G��`���ʅ�/{,�g��g����>�-�T$U��'�J�
�\�w�JIv�E=S-�LO[�&��g���٤nBb�

�p�&��n�.G¹׭x��k�oz���e�1g����M�.{'5u�<�	r�;�C������2�w�Y��{��k��e�-u*]�o��YX�Mi���e[��g��ȱ3`<�N�7�ᰅ߾��f�]���zqm�76L�5���^�-1s��/��T������}ꪄղ5z����>O�Y��`�)��p�9��|�I������x��Y�-��n=����:�c���  :Q	�o|�/�;������ޥ3��oSV
���c#�-~l��t�����2Dͩ��5*ߴ5Z���)
+�#5�I�iN�9��q�s������3y�����?:��vɈ=adO����0�����tl��G��d\pķ��Q��Ё���gtE�
�Ћ�
r҈ ��+�%��ŭU�kq<�7��q��
'40϶�[�cX8٢S��ԓ.
+��լ쒡�X���E��(v8��
�G�i�EA�j�y��̮��1s<�m9��yP�Ⱥ�~
ƨ���\P���� ��.��"��b793Ů*�y�'�gX;ڴ�SOit���{��
+9Φ=`��Fl|�����K�YN��#���tɐF�M�)���*�BD�Uyyщš1�b�QU�r�Q�
˲��L:(-ɹ��icVOBE����a�"o@��1K�?��{�(5)H��k��Bf2<e���[�HQ�Ȫ�\�B߇��E�TH���E�`E]H���D�fD����5�h�*�
���R]ds��L)��!�d�䒥�����J*^�H��	��cM,]���(�P
+kIZ�g���a����
{���V��,���X�xbɒEdI%b�&-��	k,w��].�ѫ�?b9���������m���~���O?c���]G�D����ci���2�
G�B^f�F�o�������%�&h�[��۵{<��C��t��V�o���.8��ye~�������k6
�e����_�t��}u����G�^S�����z�<
+
+=�x�g��<]���	���7��_��н�������蚨�k��snmyέ�ݙJ/v�I��HV�'h|�I�<��˓�
�L�Q������WHȬX��K������9�.}�qM�N�ƽo2%j�
��
+�KZ�岉
_ziÞ���y��Ы�w���6��
k�Ɖ����ϝ=�z1�����K��;/ڹ��KHXwh�ٚē���cH��[�}��#V���$rCu8Q����(%�jp��r��c*[�f�ƕ@z9vX¼
m�ɧ��1 \[�X�I���&��I��`�S�:��]؁�We�Һ��4ǚ9BVfzК�B�
+��Y����h�LՈb���dXw�S'�/v}m�@�!����0V�������
���	���!��
+��C�ݾ$-���h
��=P'���P�X,
5m"FkM�� x
�x�L*�	��F}Y��Y�bg�zh୏sp(n�ʾ���l��s�>�B�Ǫ����Տŋ
+���k������#ʖ�E?;b��16f|�
��;8>
��\�e�c�b�H�l�j��|�83��1�
I�u�:��b��K]HE�Ġʰ-��~��,R4�Hbf�b�S��Xkє�E��ٍ+]x�X]���\�4j[�"�6j[ᜦ(&VY��
�+,�I�����\D�䔊5/���js�K��i=M��j^@��.��ħ$!�E��ɥJ'�kѲ��˕�Z�L����`-W.�LY�I*+�d�^Q��wЊm��}O���e�T/W6����\�\R�2E �\�UD6�R�|R��H�yI;�ʚm�(���%K�B�&M����W^��ƌ�K�,U�d��%J+^"�X�#ҮL�F{���'#���^����4��M�`I�$�=���-�ߚ]>���%_�HQ��x����7c3[Րq%�|ef~�rDfˆ�١ə
�
�Lx���j���d���fff���|��W^�t�`�VE/b2��#����iq�a�����
+�߿�rT�K?�n���Y�LbF���딮%u�m��Z���m�ynomT>L��/��.
�]�.6�1- 3�N�^	���b���
��h)B���6k�`��/x骦gU�b$
X��3S
���7c�[ث�%��̔?�&e���}�W�����ח?��'�('�
�/]օK�>�.O�(j&�뛞I�5���J�7~=dr����o��TJ��h�"]D�4�&
��H�N��.n{�8��E-
����0	n���W^�
u���:n*к�p�)����
���k��%����Zl�X�,I����
��k�أ(���o{ꇝO�j�RX���b�����&���ƅ�c���o��F�="l��{�{tB�	�Qn�
�77���V�5G�
+7!8:Is�g뵳{�袊����A�?����:h�7��������J�Sg��'�
��s������?�-QbF�,���{������z|�6ٌc6f"%� d���"�T�la�A�
Ӳ���L"t�ԌY��Oy:F�ƌF��ɲ�����'�i�L]%R�6�9i1P|#!�X��)E2˗)Y�x���Ċ����"7Ă�u�8��
�5VY��Z�/A���Y
�OZ�LK�lE�e�|ʀj'-��R�X��XSʕO�Z�\J�h�F�rE��4�+[��8�T�<6��ɲ�cM��Z2UEe�%*��QA+D����ƕ婗�-k����~�!��͝����n���u
w�ڵ{��={��۷���}���hP*HO�ͯ��Ʒ4�}�x�5�ff�y���O�ں��况c3�l\W�	Y{�U�K�k?e
�/}�Rղan�k^��^-��/�_�����6(C���k��+��
�՛��Yz��_�O�������	�O)k}��P�#BS��i��^ݎW������/�o�S�PD�>�sϺ�f��+�/ ߥN'�,_�W�l�U�z5L?^��f��{~x�Y�7�-�x̋/�#���dDkԐ�UPXmgf��� ��{Vl���]�<~�;���ݤk��K'6����΍�m��l*�e(
+yYV�ݩ��)�����v9z[�۱ �g�S����.�B6*O�uϭ}���ѣ�؟�P���������U�t�!�p��V�f"C�b/"�5l��-O�=�S��L��?��n:��hY=�ddM/�i{���c�>���D����U���?���[=�����:b����̓�mxr%�Q�6	�4��1�O�`��k)j��)4�<�X����s��T��n�2uðT�a����� <��x3,o$��W^+�o
�kNe��q�Wu����A%�7
�Qk��Xg��!B���rt����
�����=���9sj���v�J�Y�c*7�X/�4�=;����}�rލ���M3ۘ	���(��zފXu�B��4~)+,]'�#�W\�
]�W�cN�IQ^c�LM�c�
Ic�\=�t
jP�B�Ǻf��Yc�$?
r��657cV�d-J�jo'fE�)��t�&�������e�KH�u��3�>���>:��*�-QR�_c������E�G�pc&΋���d�>�-�
SŒ

���
��R
kMyݒRRRJ�-Z�lJ���˔N)]&�l�beˤ�=Xa���˔-ó�
+	�Q��j�u�-
Cu!rʖ).+_��)�+��`���od
:c�S.�>�`2:�������k�?�
�f)�Mc
�R��������
+���6V���:�O#y�s�{ԔNh����'���[������=�>���+>�pQ%:�k��&��bEϚ�|�
2R�\�}@ᙿ�Y��X!�G�AS�K��Ǚ�D"b3��-s�򞙳j=$ːϦv��X�'D�넄�_yI�i�=��.{���'=�:q��߿���U��G�w��
�OYvI�˲͞����U����ڏ>��p���:'|t�u�[�n���m��&��N���C|�7���V�b��i��%d���N/>���+��}�SR����|��
+���D�eW}ڳq��l�zէ=.�����l_���ƕ��|��C��
���3	ϯ���55;ŕ����U
��״�u*����+���¿]�8 �>��s�s__R3!q����n�O�[a��g������~ҭў�;���Kj���4]���QU��㙑�(�M��qw�JY�Z���)�����&�� ��0)�� [��˒�*_?U�n�d��Ƶθل��^ObY��K܆.S )�a	�2Ȋ��
9n�.�z�Lݕ(�� �C�C��7M0��([��/9��Bc�ʨ��+�~ɣ�J��zC��Y��z*�q

+"���$|����H�QI��\�z�MH�ur�3�xqՃ���˭,b{)���N����6�e�X
G^�'�
��Vԧb�;X�iu��Q3$���_�Kڧ��e �����f�˕ܣ��Q�b=2�˼��
�1�Z�]���=
��;��2C����1b���
�z at P1K9��G{�x!W*L?i
+=��b�݁�h���	5O-����9�^��o�P�©����w�M�~���WR�ɓ&=3|����s�<�wK�!���>����k�n�0����~&�.�"[��d��B��<(�1�vt�8"J;������hڷ[�x��~/��}��v�D$�۾A�:"I�m�����l�l>l�����C�^���ː�6f����(�ӎ�O;�/�{�
,^�\Y�i��O�p�
)4�XC���ʆ����N`�<� ��W���Rv�s��������mjћ�)/��Q�)�~�I�''���2z
TU$?�.z]�����u���ְe��v����"ۈ�[�k$%]7��Eq��L.-ܔd$�LA��}�+[Y�Y�e*A.��������
�>D�k�}T�/Z��3� ��6�j�I�I@n�=�v
t�
	�������
,d�͇�1PL= T���
?E�bזv�#�
in]_1�L�θ��A︙��0`
ǣ
�8D��י��Wx=����]����Q�
%�U2Msts߳\1�.S�8�*ڕ��R3nL�-�~��$�[~��	e�~�م��#�
�>�
�s���D�o�.�$�Tl̓.��1����<��
��(�JW�b�j�E�cŔZ4��jN�eq`Soq\��3fŽe�v�,Y�Ř�6S��
+�l�k�ݤ��щ	�W*ٲNթ��m�ná��S}5��B�uà�◥�$��"1�dQ=����5l b�Z{��VPc���h�!�jB=ݢCZ^l�(�$\l�򘕷����HO[i��?(V�Tɳ��o9�
;�������!��ٸ��[������u�
2A��np�`��0)!�����_�
:��ɘ�cɒ.���t��~�(���f1����H�<��}3�3����r�ǰ��@S?��N��T+��R
�he�|�3�*Z�M�Jg�������	R��m��
X��QO\p��]���c8�of�� �p���oV��#�Ś��i�2��Z�}��"�)�aۢf����vQzd��CH� �~;�]��7A�$@{�T(ષ�:i��vt��Z�K�
��T��O�u���B"MC�D�K���Okt�]L]L��A]��"�L��uoW;��F�<V�_� �r��@��L�8�	*�},������yqe-��@8i���؁'�~��˗4�J�;�?�
��O݀�(�tQ���ع��	��B\
s��gvY�UE�s
�Y?#Ty��/D[���z�(�,�i'�t�G�br��٘in��3:����ŀ5�V|_��	�b�Y(���j��S�r��^�6��h�;
�
 [...]
+x��[B�8�y`�\I��O0���S%�QY}P���f��~w0�#׺�e���6IbM�ŀ��ưH)"K�$�fQr "@H�V�(�_b,�t�_��Y�զcb
���	.����)�e-KՄ�u��c��_�LuvyMU�����
+�
!�mP�,��%��tYd��{]�
�H$�
���`�dT��7�!�v���y��e�ծ7]6�W�,�]��vri�?���8��yq�!�wL��G {��Z�;�w#n�}�9HL�Y�Αp��_��9��9�W�:��D�صf]���]�$A
k9<b2e)=\|����G����g�J�O�OA���'��<�
+��g��2\鐞�Ǐ�|k�z϶/�
1�|��!�����g���q4�ӻZ �
X��)��.�b������y�b��GK�c �d�6Ws�a���a"�zQ��b�� ��Z^Ƭ(�UR�7X�I>yb��$IU�S6!�he�cOm$��H;�������@B�V�c��
A]��46+K�2B
�"��_���C
�qӭQ�=�
+Su%� �D�
���vbMLp���R�K\���`M
�
��l�:h�%����̕=�4.�7!��BQayn(=2�QY�U��]v��y��$4�4z+j���U�a`����@;I4E�%ƌ�!Ժ3j�,Y���+[�POtIܥ��ז]u�����:���y�Q]
��t�'�����w�� ���*��B�`,#Q
+N�
�ďEV\YLyD�&(�2���
6̋���qh�LF{��o
�:���}��n�&
ꨋ+�
�,!խ�����u�
��]D�"�S� @�cEl58�B��1|c=$�q��uIק���U��R���7|x��p���1z��D�
��W��j�AC�PҬo����!�3�QA�qu���]E� �ߚMH�/:�t$�iYU�lp9έ�ֶ�
.���]?l}��/{5`<Ƃ^�����y� ��B���,v�lW�ɤbTX^���;��+�
H��\��C����)R\��Eh�Z����JMӍ�i�[��ʋ�U��4?VҼ�݉9V�r���d2�疑]-
T���~�PĝN�'瘝]
M7]�F�E�B�
+&c�B�5���CikS:��ǚ��Iͩs������u
��MG?�h�q2�X�,���2�$Ӳ��U�X_1��~�i�llP�I(��zU�%i�ai?QL}K�ۖ
���Jdc�Ec�V_!G�߄ܖUI�BfT�'�Ď	��rL���]� jWw�b����n8��@Bݤ# �g���1 ��C�"Ӳ�
+)ذ�1
Ҍ�0-�m�ް
+Ĉ2���P���x%%]m7��
+1k Z]s��L��`��7a�
r� ی��POj�ό����uO��
����N at C�CR��������U��n�r����c��:l�cr����e1�i�6��V��ˆ���H��&��}���i�E��Bԓ�[N�M���(n�`��V��Qcx{�|��
�"*T�Q�a+����ݺф7�Ej�������9���p�Q"/���Hs�'�}ٸo%Φ��8�7ߏ�O�O	�v`�+�H=q�V��
>-��{A��]�
"��e��
+�D��۞}��{��8�l�J{E��
�4TTU=2d	�C;���C��(�����Յ�1�A���I^f1xC�bÖ@��1V�,�e����l<�e-��㌚t�n���V���`q���DVm(q��R�!ܯ9K�>;v�<�cd�3ǝ�
�0���`��ø"��lɗy>Ĺ�Y��
빩u�noR�ϻ�2A<��
|������{��;�z$
���I���%9V4���"i��GV12��,9�O.
+<�`q\YRV��6
+
;��,��GL��$65Xu�B��b��:���Iz1�
?,D��+��&-���X9(�w����{�m�ٲyi�,���
+�Q)e默C����گj]=��
Ct/
��nZ�-�i�1
w��F��:���jF+�O�jL܄]��M�����R]����4c��cu��kԚ�b#�.8�Q-��q���I��NSP��Pp����ff��9�:M1nM�D�ox{t�_�
3�ñ[�$�8�u��"
Q��
+Ur<s<7ts�ڰg�c;�J6V�i�V�5��ޢl&�P�\,����v5:"c(벼fm�
�Qb�E��1+��ɰ
�K^�4N����u��R�hH�f_�l�X�g�&��Y"F�8@̓h��!�]Ĝ

�
����WZ1����!��2�D�e�N&v۴EQH3f�.��O7�U�3A� 
}��'���J���f"�$ER#�ak������񱌃a����Y�D�OwY�/O�z#��rP���mrT��b=� s]s4I�

��EG� 5�E�
oL8��C��Mwqbæ��IG�a�Ы%P5�ᨊ�� ��du�{d��=�x*�+�-�

F�%�%�&Ub݊y6�}�=�f�����E�y����J�34�pΠ�J�l��__�l)m����>��.��}�#��bJ��ь+��xhH[hې
��
I�uS���
Z7�y�S�F�Ɍ��M@`}C����/O�s��f谾��%l�bc�bɂ�MZ_	1�/CSiە`;��O��
�k�.RuC.9k�
v�0ota����%wGN�W��6Zg�q߲��l{6Y5�t�m�	v��#�3pʝC㸆[00��ޘ휚�
?H}�o�!RI�ʻ��c��+�1�������kO_�c�iV
Q1E�"k����h�
�flޓ�Xu [...]
+i݈�ۘ.�ByH)&�������Jx�^o��-n)��.������PQS�4hV�=Ͼ���ǡ��c	�Lǐ�p&b�t2Ķ�>�>�\>�K��K�\|V�ctٺ(�˙���U���|=�C��l݈b HQ���I5�SD��W���!�
��]���g��w�ʍP��6�f��F�ƹ��O�R���jX�ƺB�#ր��c��1�1�;���7	���5~��?��Y5�+�B�e��!�~	R9&Կ��H4ie1H���Vc�\�-���o�6�l�ZEl7
+�^
�ztQ^ �ʁ��%%9�K~�{�����}��V�:�xK�� Ǯr��-�����8�%Nl��,�z��4}�v;�d�Dz����N�,o�1R,o�1�H�$
T����X��iR;͞c��|0d�@Ҋ�
q�x�T�;�O˃�G��G�eRR��x��^�w�)�����z1oJƓO<���Ș�t(��Y6mr�u���q7Q�M6D��d72�����5d
E��w^+�k�x�)�K�e
��j���
��!b�Tۢ��{�T"���g��G� 6H����Ct��hz�|�+�d��"��a(ެx�hH9c�uV�iQp�^H}鏅T�%�����r
P�Ƞn{mo,P�w�!�A�e��z=�Hj�A�C��O�k
�`�,�Y�%�5o.�	!�kPN�QK3k'$��:;��}{�f{�}��j�

`A���j;��x��-̭��G�[u��Dp��fw;՗4��eH�Ej]�4U�:J%
7��׀�
��@֢c���Q{��[��B����l����� [...]
],�+YIP�a����DzI,��X>3I�N�n��v�Q;��,+J_J�M�w�7Z���
�oA��
+
=<���ظ	~��n{��� �����%�Q7�L%�`
ٱ�162����$
��[���[
G!}k3Ԍ=G�Ej>Z��[�rOb18����
+!�T?��b��[�5o���H�
؂(��N�9����vb}{��
'������<�]�J5}���?�x�
+���ګ�b�6�qe�Y�V�G�(�e���%�W�����x�z?�}n,���Zk�qt\�1eBn>YQג7�����ϢNZP�G�W4
�G6㉭	��xo�� Ps���Y8>��)�*G尢aǣ���k�8�譺���
q̏E�
4Ԥq�n�tq�b��p۳�q/p>�̲B�}�ǎ
+{�ǣO��X�
3i�H�R��B!V^!�0CŬ��n︔�u�u\����u���ޗ���<�^w��[��G��8�@>��?�<��7?�Cq0���+�c�ի��'�{�b����u��x���l����-��P,'[�B���dC)����c]��r�kd�x�p
+���
�u��+i~3�;
Y~l����C�l!�
�Q3�幛��B�Q�Qa�`VEf�^�nz�����l�RYT%l�雋�xCa�J�p^�����\j/��
{�Ĕ��։�WTmb�^#��^���7_���mM��˕����[��v3Թ.#�0� #�0� #�_��]��S���W�k��+I.U�����ܺK���S��[�}t�-�䗾��� #�0� #�0�@vxq��N
�m�y���hR��q��h
q�%vv�⺌ #�0� #�0�@
@��_Rqe�d&�y�,�
+� #�0� #�0'=��b���+��)���q����0� #�0� #p�4s~���m�e�hSژ���>�A���F�`F�`F�p!`��m�ʬ��
+
+���#�+W��R��?�8�7"V̩b��
=
+��&r
+����
̲�Y��0Od[YP��0� #�0������V����6�ϴ+��r��ʕ��T=�\�����)Q���yηn�X�C4m�.�۽��
H���G��o�([��w�u���A�l��
+��,H�B�u��_w}ǿ�V��5������0
B�W��It
�3��%�|��;K����2���Vh߹ #�0� #��8�	��hd������Պ�`��^u�UU�V
˻�u3���G~ �hѢ9��-�o���
:��JOOgΜ[n�SMD�#--��ۺ��/�-��?�.^t��w
�#�UD!�b����dz\=��
3^
%W�ZI{B����	>
��sF�`F�(Hh�lٕ����g�oX��f+W�T�JZ�}�M�SN�̒��Zu_~��[�8��6���g�d��e�-��V�
+H�޽{�v�v��5���_7m�D�Z�RkrM�k���g`ָ����UŊ����{�֧�~�o��F�	
����иIS�;c�
����O�},-�3k�Y�&�2�6nڹs��C�Ԯ]��3o�����]��Y�Z��
ȟ}N�{�������?��nX����efd��‹͚_���N��O>9RINH at 7�\~$ ��o��0J�Q�|9��*�+�
O�O��|�����_�z%����vۿ�~��UW]��?���DS�ϖ,qk�	�c���/c`k�BO�9,�7�I�f ���O?v,���p�pF�`F��e)v�
>�� �r���
�U��ύ���W�x���+�?����o�9��q�ܟ}$;��������_>����ÇC�[��_����V~����tJ�b�_���Ե�ݦM�J�+�	�����i��?���/���2���+T���b9����X��ׯ]���*������ ��Td���˗���ڿ7n�8��C�+��cƎyv��V�bŧG�
7~���\�<���^=���3�>;�����H��

]a���-:hj��O?�̨Q#/ZT�x��w�3|��O>�ħ��-:`�Z�`m@�Bw�|p״�/L�4���g�x��?���
YЁ�0� #�0�@.!@�-���N�}�r�
�� 3d�ZgamѲ��9�a�
K���&N�W�6�U�vj�V-�9xЫӦeɅ<��{��r���?�`�?׫W����{�q��`�QF�*��V��5ަo��yٲe?��5���w�|�%D4��J�*�s�٩��P,u��޽�c�����ƍ/JN.]��ի�}�O�~�^x���ܳ`���p�N7]rI+�mެ�c�>
+c���с5��V���3q�
#�|��Q��
v�r�.6x� ;��Z��w�ҥ_FW��5*l<$h�`���
{좋�uV�{�k�ڵ�����{��_|a�{���������7a0�
�u����;�
�k����;K:�����2� #�0��2
c�e=ƿ�\9�����{o�'�`}c�L%�0�mټξ�_C�Zg�zϽ����4|z��$m����
��~����>In�2u4���/��f�3�z�mHxo���Ŋ]}U[%M�
�c�f�������~���;n�
�}Ǟ�͚ūң~�<���gdd�ѣ���φ��v��[n����:�
Tٷ�B>!�|
��[�
9r�^u�%$�[�퇳͟���gZ�jG�
+pj�h,�=�\�^��0��=���2���6 ����>���x]!C�P�
���=�xFV���x�F�`F ��ӛ͕���èrB�3j�	�ٚg�v��&)%��3ľw�~k�'�Њ��˾��Hrr��z��m���U�hN���ZZNSeыN�:�~�-l�/\2����!}lּ��0*7iܸ|�
+g�y��kW�X
/(���N�ڵ�_
6t苓&#���Ýo���N�����,X0�� ��
yJ��S ~�`&&%�?3��{�(�����uOe�3�.
B�:b��jժE�Z�p͂&\�`F�`r
;U�����4t��f�Gm�}v�R�J���O5k�a�"�I|��ݖh��3j��}�
B+���֯�T����-~dd �C��t�M[�n�?>Ho�Ν�O���}���w�}���7o�
�A���:���?�ؐe}d�g����T@�[�nٿ�����C�Zg�޽�
D�áD�K�.��0O��)�֋(��!?�O�s��� D��ex���a`S�
�5k�LJ�Őő�F�`F ��f�v��(��)	��,���FJJ�~�����z��
;~ں��9s�
;v\<�c�v������u��]R�T�k۵Ô�
6�x;u�T�(S��_0��Ï>޽~{��4"��hq�C��iԨ����� qꩧ���<aH�L�߹�{�/^".M����|x�RxN����
��%�Z%&& ��-�<��)?�����Inp�
������͟�>����g�$�
 t<�(
+V���
��V>"�υ����£�
��
��$��_|0z�\�`F�`ro�
���,�>�/��就����Pȼ��{
z!�Z�lu�WM�<�۲�����
^H녍."!�F=yꩧ\}�5�=6�O���
+T�R
�
vA���ՇCsVlx�;u:p�@�NzV_
}�k2�ߘ3'��M��9^50�]{�oߦ͚�~G�Z5��׿�)+��C�b�
+cnjyc��.��^8p�
��?r�]��
��׽��
;
'��g\H��8

�)�O�3��B�3�;�u-S<o����i��*�Y��n\hsaF�`F���l91�X�Z�6�{�?�88{����w��3G��k��0q!�j���
����&8&�U�
3� #�0���A��M�|���V|�m��whP�����gm��
qe�~M\9Շ+W��in���r~�l��ɥuNb�
�4�m�s:�:�emC{0"Ep�
���\9k.�0� #��$�Y\�]vre"�W~�$���2
ɕ����F�+�S��aF�((4��/ٕ�C��ĕ��>M�c�͚��b]�藟v�*Y*K>����0� #�0������XI�>
+}A%��0� #�0� #�0�M�
d+f�HHc3"��=qGA.$0r7F�`F�`
+$�-S e=���A]g�2��F�`F�`
+�[DX9.;嬭�~3q�&�!g^��/]��7c���0� #�0� #�|n���3�1����qW֞ʒ+?�ç3
+>*�CF�`F�`�����w��}��U+w�����"E�T�T�F�q�
��E\Y��l\y����W��\����#�0� #�0����Y�x�W\uf�Z�ř"�Eff��t�Ofơ�����}���.��]�a&WB�1�
+b�KF�`F�`�‚��|����ԩS$)�x�X�
;���v��#G9|811��)Uk֬��ڜ�Y}�Ң��%&`ΟX

x�OF�`
+4ӦM���
O;���/���9F�`|8��~Q�f0'{d�ժW�<��bŌSZ��Lf�<�F��"�z�j�K,`��~�~����°�ӧ�\�������4�{����
8pժUk֬	�S�6�F�8��"+V,��"E�%��F
���b���*�
0� #P����/A�_y啯����G
9a=-[��wޙ��~���Ǐ_w�u��rJժUC�T��
qF�`N.��?��lf��Ebe6+���ȭ3���F�r�ʠ�M�40`���R��7߼��+��v���u�]zV��@pkժժU�I�&i�0
�

+��9�ӷo_8Džv�'����bT`�޽�z�:���;�!C��9����Zl�u�Yd#W��Ҹ #�0yP�u_�]����[6G��V.#��
��y�Y+F�8�/^
Z���Ypb�d|��g��̓c�/�>�믿~���?�<����Æ
[�lٌ3�����
|4gu����7G�����������^����˱
�#gci� #��A@���z��=�ש[��߶Փ.k'
m]��`�2���.�J� #��X`9�mڴiR��U������O?�v����{�ҥKq�=t�x�A�`l�\�޽{���"O�>
tve��C�ܹssP}w�{�:u�4n�����={6ɇE�|��بR�
+���`�b,�`����7kV
<����ڞuN��M�
ؿo���l�
+we�H��۲�+[��!6+����Z1���A�aÆp� �Et�g�}�]�n]�n�4h �{�
wP�~�u�֥2`��C2��<�`����2��$�ߋ��nt�
ړ}�,�`���)ժ_��
+��0#)���
.����R\3�2E�
A�5]V\�$!f\&��9<�S� #���O6l����q��
;�m��?����
,;v���!B���~�_,
.�
���ӃK3� #���V��q<<7��Ŋ�كi�lFRNR&d��%Skf�r��0��5j�"#:��˖-0
#��g�y�$�b����~�-�ܴim�LѢE��ۇ
� �}N
��q�F�
ړS�Y#�0�����[7l��*x2n㔑�8^Hq�n3� #`C ��}�N��pl�-z��p�ҥ۷o��㏃��]�a�hɒ%�t�bL��������SO�b����w�6�?�m,~U�㯸�
+�;G�	&�p�
���
+Do7�MpEF�`���|V��+����EWXIF�`N *Tx���x�
�tC�	ĠЍ�
9��SOm׮�<н{w�'_
L�C��{E��<�L���C��ꪫ(�&bK@8Rc�
�����ֶm[����W �v��
+WdF ?"�X����|���O��ˉ}�6����/~=?��ufF�$" �1��}��7'Qn�`F��Ĉ�P����3^����E�f��u�:�|ù�
+�����.�0�@�C ^��c�P�q��]����0#�0y��ig�wսu����_�:��޵��yY��-zT�����n�Ҥ{�&�Wᢿ�o�
%у6�n�����<y�Y)F�Ȼ 
�!�q뭷"�ܣ�>�wue�F�(|
<�~�H�����?|l�i{�uփ�~��$��'W5N
\Y�{sn�v�;�cF�(�\r�%H�@ˈ1���O�(Q��"��fF �# �� C�-��[��f��W&��
�we�|~�Y���_���(��0� #�rk���Cf�Ծ��#i����I����m��Ί�SRS�-��;�[��d>~��_ٌ!W����3� #�0� #�^$K63M���s,J~��{�0� #�0� #���t$�
>g��(s�V�^��ʹ�{�~;
� 	���?
���L
��ӆ��QŬ�bu���֭��G�ٽ�?��z��
?~�!I�;�޽{���/n=?��ó�>���?�!��Ep�ڵkC���1q�~a~OU�LAE �����w߭[����;u�Q�F�<4q�D�g1W���	��`F��G�,�]���Y.���~��k֬y��RRR at C�Q@��^{
e�/_��(�A��9s0���oƌ��*�\��Zŋ�ꫯ�R;c�
$��ի�C�ҥK���3~�x����Q�F!�?M�2���_��7uy?}Z���P=�@F`��x+CȰ;Sk׮�:uҝE��J�*�s�F�`����aM��e:k,I4�OG�Sv���+WFʨs�9)��/a�
 %˗/�U�T�v(!F����w��������'��nݺM�6�0
��
4x�����kSO��ٳ�#��
+Up��`�n֬���ѥE��C�i)U�T��\��"���r�o
�N�w�W_}��[nѝ�[�������bF�`�-���u�惡�c6��#���ѣ��̓-
D!B�����SSSCk��?�QFal�
�3�wށg��s�֭p�@V��n����C�����ׯO?��iώ�O��\��! '�r�ʭ_����
x�>�
+ƛzE-`=��0� #�0��5c��"���	+sb��(��dŕ
�4�#`T���_�c!� ��v׮]�vkd�ڲe˥�^
+W��۷��4-�g�:u���C~ �t��
^͛7�{��݋m�����]�>��x���Á%�q*T� 
1�HOl�:�w3�� c����0� #�0ym[�S��1�PR��I`N^�`��Y��x0a„��a�]�����-[S����zΟ?����w��!��ꫯ�ܹ�C=t�ر�(��d�b2������ӧô\ �ƝbF�`
+*i_��++�dJ�'�hn5jԨY�f˖-1�i�ܹ���Q�H�lb�2���}<�S1��`�$?�ez¨<dȐZ�j�
;V+3hР���޽[�t�aT�v����ϴ�ו�s���;�K������w�ٳg_v�e���5�<#�0� #�O :�$�&��Xٕ�3�ʖ�r��}�~o`p�� qX
�1999�`���iӦB���e�&O�L��I�&������ftA*��X�СCa'�d���
c�"��)�������r�|� ��A������
K�#xe|����?>�v��fF�`
+<%|����N�BG�� �;w��D�5D����
� �<�7n܈��;%ɏFYl; Fa�
+Z��1�oڴi̘10Z���geɒ%�[w�UW!L2l��c��J���+V���q��o��E��_Rt��� � �
��1���!
hq�?���&x]|뭷G�[�4i�8*f�A*	�y�
e�F�`F o"��I�e��˲��
��r��s��z �y���Qc�_\sڴi �`
;v�K��ѣI
J"�
6����}�uׁ�Ң38@>�Ԯ\�_��"@
x\��hgl�펆
7�
ȊNVB2A�1/�RE

8���;���
���@˰a��`����#G"`
��O�:u�̙f�A�6����� C�}cF�`�5�!����lj�O={ˆ�'.�o᨜�x�պ����E��uOYyF�#`&�<�Mss� #�0�@�E >�~}�>d�M���?�v<#3##��
MK��؁�K���.[��9��4nފ�K����
j�[_ŌS�f6�\1
+-��qF�`F�`�B����惁�o:�\����ٽ8|*
+��n3� #�0� #�d��:f:Vs�2$��	��&]�a�
�K�MT�:#�0� #�0�@@@:W
[�k�D��D
+�,�hs��c���[Z�6� #�0� #�0�����Xb>:�E�"�yӬ�?!g�F�`F�`�	pJV^
�b�	S3
�X�WF>���0� #�0� #����B�V��03�?e@�p�իW#<-H���Ŕ@��#�
)K?)��.O�7�*fEC��nݺ�]�6J���+��{�
?��s�2n�8?6�"7
+��`r
+��۷v�ڈ����O�k���G��(*q�† ��`�!��u�t��F�!�
��B?�����eF�`�:��B�
������Yy�E�(1����5k� �r����;��(�$ (�|�rlGA
+��̙ӰaC�ң
�ˢE�����;�\�t�/�H��۴i��/�P��~�m۶m�5
�G�#)��L���믛���ڥ�҂t�Q��e
+
@�k���P�ڵ����m۶��S� ��2� #�0�	�Ą
�lQ02�,g��<.�bF\*W�\�jUDpCB>�N$�
����˗G�*U�`;J��u����E鲃�<��S��H��/R"g5��f
!`�T��/�@��
.� ��
#1��(
���_ͯ]�/-�J���.S�@�J�c|s@�>�"G������Y����2� #�0����
+��TZ�+è�Crn_|�ѣG�͛[�B|5#��%8555���={֯_��؎2ݺuk͕����_����_�~}*�
O�uh��{�
xO+W�
�"�����=�w8aL
+,��� #�0�@>E at f���X��n���'��l���Zx2�
 ���ڵ+�nM^իWw� �
�	ڏ
pel�ݻ��M��n��vu��ŋ�^Yr>E�B�
+�|߾}�?6@��;$�_zz:<��i�XmF�`F�0  ]��/��*��Hr�WFT�
s�
f͚��	&�M�.��_�^�X`N&�����9P�7o�5!\�0#0}�t��
3�wF�`F �# ���O��-Vq0�K��#I�5j֬ٲeK�g�;w.�z�ad?�
���r��V�Z�s��s �1���|ciРM�r��`T.[��[��]�W�@A��<~�Y����{��
0�W̞=/o��O���"#�0� #P� 7I��"����D��S�f1�/�ѯ'� � U)H
�e�LNN�S��8

�6m 
� a��,CnpVFX
* �R�c�G���+����nh���W/`��ȱ
K��c�z
+�
D6���
+Xǹ;� #�0�@�@@�ޣy}r���؄<��E�G�w�޹s'�����Mv�3�pl۷o߸q#�Wh�L�$?Nk�� ��*h�P�X ӦM�
�5b\���@s�n��b�
+��L
(2��e�(Z��sR��!^��ꫯ������.�����1���I���[o!�
+�ܚ4i��*f,Bj	3��8�ɶY#�0� #�d/�rT���S�䛡�]���G�d��ܹ3̺�
:m�4�]���
;��a��Ѥ6J"�
6������u�]�(��
��8�+W�ėkD
��5�\V��ʨ�ж�o�^
?~<--
�Z���0�������`^~�Ri6lX�O
(��
9�t|�ԩ3g�4cRo�n�L%���%F�`F �# m�"���ZV�I,^�����hK��L���j��y��OD�^F "fBʈU�#�0� #�d��I�>d�M���?�v<#3##��
MK��؁�K���.[���铟{w�v�B� I����Z���!\���El^F�`F�`�‡ ��}ٚçs\#��pYγd��9��X�3�=fF�`F��y����u�0cnM��^9�5
���;6��.�i.�0� #�0� #P��9�E�
9�O,WVYJ�γve
�رQ�Ow�`F�`F ��=Y�S��u���2I	E]�6�\W�`F�`F�`�"�PEF��,�t,FF
Q��`F�`F�`N "ӈp��y)�}�uax&"
��^��hA��\�"�9��6��4~�<mh�* [...]
+4Ȉv�W�=�)ɸq�٬��(Ì=�)طo�ڵk#r��O?
ܮ�_�yL�
+:��јnx��g#42iGQ��T����׭[�#�7j��l&N�H����vYPA�~1� #�0���2S/4k�D�r��0��"H��f��]HII�ݻw0((��e(�|�rlGA��̙�"ȱ�aÆ�*�-Bn?d!A.kd$�!�E�>p�_~������o۶m��iH.�
����)S^�u3��_��_Z��nIOOG
�ҥK��
v��eϞ=Q��e
+*
@�k�5a(v����ٶm[d�)�
�~1� #�0N&����bfɏi�_���P�r�U�¤
+�*x��*�
J�/_
��T���(hB>��H^��z�_
\婧�WF�=}���Dy،!����[�b�
.� ��
#1��(
���_ͯ]�/-�J���͛7���1z"�7ZG�(]�2�9�7���;!r��� 1͟�#�0� #����������q0����	��ѣ��̓-
D!�Ё%8555 at 8���ׯG~lG��[�n��26�z�
�����ׯO��i�m�L�2��dɒ\�8��_�=�\�r��66�ի����*p(��6�0� #�0�@
E@�+��.��Yؓi���Wn�v ���Zx2���r�qw��`�&/��ի�� ߅����26��݋�d�
Pg�|G������ŋQ��N�ӧO�~�.��Rؿ5)�rO�b�F�B�
+�߾}�
l�:�wH
?8��c>_���gF�`
+0��#]X9��$c�lS�9y���f͂C„	�&p�]vٯ��
+O	,0'W�ڂ��
(͛7'!�O]�lY�^�
8 �P_��5͵
+ӧO�i�`�{�0� #�<T�8���W���"�_�2AS�F��5k�l�|q�ܹ��醑��z0*��9�ǣZ�jh]��3�
lư��A�4��a��Q�lٲn��v�_��t+�.�c{���Çϳ�
o4��
9�W���7(�{��ٳ���_?v�UbF�`
+��	��],lq0�������W�N r�:$
ⲁS&''G�SM�6
��u0�z�!7
8H ,�_)�1�#�O�����]7�]G�Z�j
>|8x�c6���y|� 9�c	~�z�����@dC�N�˽`�F�`��t�0��Y>V��(�ʄ��ݻw��	�9~�xD��]� � 
����7n��흉���	c-�
� ��*h�P�$ӦM�
�5b\�6�
�9D� _Y�b�W�\�-
TE
:�+@�_}������ڥ��r��A������a�F���ѪU�ܛ�X�n>�=^��z�-�W��[�&M_ŌEH
�
?=�A�XEF�`F�0! ��I*,�-,/
#���'!	�ڗ�4��ѹsg�u�� 4qڴi �`
;v����ѣ	a���6����
��ł����v�ʕ�r��o�g�k��Fde�Bh[Ӹ
׋�Ǐ����C
8p �!�
w�;��˯]�/-Æ
�(�~��~�}��}�G�
�+��ra��<�:r�H�C��S�Μ9ӌEH��n�L%�
%�>#�0� #�7��D��[rb�j�l�����m�Z�����]�}���Λ�`�������2oj�Z1� #�0��u���7�o��H��̌�L�{4-]ocvV,����l�'s���ܼ�?$&Q��ľ���:�|iW�
06G0'<��G� #�0� #�0���R��A�C&
A���yu�p��.yUe֋`F�`F � �l�f2��¢,=4
?���)
�ر���ty���#�0� #�0��	G �T�A��5Y�� cs��W�uxc�F��\�`F�`F�F@�X~�E�Qq0��E,I
v��s�0� #�0� #����"I��_Zt.iY����Č��X$#�0� #�0� #pR�DXF�)~\��+���?��[�W�^��X� �r.Pڏ
~$�~R?]�64 �*fE [...]
+�[Gm�ٱcǖ-[.���K.�d����o�
#�
*T������#!� u���JOO�x�N\�`F�`N 2�"�1
cY���F�`N^�`��Y�J�*5a„�w6�
p}P��e�b�:���Y#�����aZfpF�`F o"��[�XJG����+��E�q]�F��5k�l���Ν���n�O��2�����aʁ��B,���.�ys��/����
��/
��
8`~�={�e�]�_?���eF�`
+�h,3�\Y�\�(+�rD˲��W�N r�]$ˑ#GB+999��-^��iӦ���Z�]�l��ɓ)W��I��}����7�
+3�r
�}�~����j���?����n+�(q�F�`�����șd8�$>���x1�-K˲�7U޽{�Ν;1�i���͚5���
��5
+
�7nD�
+흉���	�.�
�0X-�u�7m�4f�����`X��,Y�qꪳ�
pz�̻g�5��u��z����I�&�;��o:�
?L'��a
F�`�‡@��@"�ؔ�H��r�[9UNhѢŅ^عsgD�%e��iӦ��
t��S�F�
M0�$B�a��쯻�:VZt�G�ڕ+W��5���� �n9� ���!؀ݚ�a�
"�{<r�H�C��S�Μ9�7�p��`��T��
�DF�`F��>�-Y���,��-KT?g۷�LK�!C6�����s��z׃�>���Y#Px0R�^sOF�`��� | ��>d�M���?�v<#3##��
MK��؁�K���.[���7^
�њ��j
�����5��7��	���/��>s� #�0� #�0��	F@%��m���6����:�`��h��9���Ǐ�!��2� #�0� #�0^�@�T]��W��fr͈8��$ La+�K��ҝ��p�� #�0� #�0y�
G����,�1��ז#s��<�L�%��*1� #�0� #��/$1�����HRb�dʈe9s_��>k�0� #�0� #� �XD� ����\���Y�d5��qdF�`F�`
+9V����b�͔�Ϣ�AA�W�^��X� �r.Pڏ�x$�~R?]�64�*fE�[�n�n�֮]z�<�k==� s�6׫WϜ�� 4�"G	�;���MsF@#��6�ƍC�u���H�5B8��'R1��l��#�0� #��-�j!ɰp��y�HEe��"�L����/׬Y��
ȁ׻w�஢$2�����˱
ȟ3gNÆ
o���
6dY���U�V-Z�x��HA���ӑ�t����

�t�gϞ(�rF�0` r\�-��;��ڵk�N�42m۶E�
�`F�`�,4m�H29`I�\YM��^��zP�r�U��
C,rS�LP%˗/�U�T�v� F����w��鲃������}�[�nӦ
6H��͛aW
1b�E��[n�	���eq%%�
?��H݇w�W_}CH#�t�R�'#�0� #�0yM�%1&Jl�N"
M>ٲ����y������K
F������
w�A�9e��٭˔)�V�,Y���XB!D �@�ʕ[�~=�
���8�
+
�⺸
+!��eF�`F�$" ݒ)˵� M��K�0��a2���J
��)S�D���R��ڵ+�n
E�)gǎ
[�l���K/���۷���i��֧O�~��a?��0F�eB�B�
+��o�>��
Pg�	_ 8�`�1\� #�0� #�WDY�,�s��Ѳ+K��=1�t ��
̚5�T�R&L�R%��>�Lٲe1�
+
!��o�lٲ^�z
8p �ʡ�y�G�I�G`���0-�}=YCF�`F�p"`�++/
�,WVe�gi`�jW�Q�F͚5[�l	~9w�\!��
#�I�`T��s�}<L9��C�����2z�2<�'O�<|��|�P8Gv
��޽{�	��c��޸��!�gϾ��"���N�� #�0�@�A at M�K��b>r��)L���$
+:�~�8q� (OA�
9r!�����	(�x��M�fS�k9��c�aJ�=i�$�C<x��D�Z�>�}ߏ�k���r
�}Ҷ~����jj���?��V�EwXIF�`F��! \D�%
#�#o�g�q0"y,�޽{�Ν��4~��f͚���XF��7A{g�$�q¸�m�(
VA
�c��M�6�3F���?�l�w���=Ĺ�ꪫD
6���믿�۷/�J��+V<��S�Z�ʾ=����B�_�V���[?�0�4i�q��|�M��餅"�8#�0� #���>�p,�b���b�	����(�V�-.���Ν;#j,�*@�i�@v�:v숩N�G�&DP�
� �ƶ&�fa�Egp�|ĩ]�r%�\#iH0���r�q*��C��5
�ժU�Q����k޼y�
=`Wf�<��n#G�D�8��:u�̙3�x�
���L%yPsV�`F�`���7�f�����cӺ���� �LhzF��=
���
#�DG�LH��dF�`��  H��̸݇�}��GҎgdfdd�ߣi�z;��b���e��{o���n�Mؖ�ě[�:���F.JN���dGk��0� #�0� #��#(]xrf��u,f
M��Q�0Nt�)��{9~���V��cF�`F�(p�P䉡s\
��$/�*�s^���½d?,]�;��!F�`F�`�� C
NNJ��
+���*���y���>K|0piF�`F�`F��@b��')�-�2Jʘq2l�09�U��'�`F�`F��
���q`�f|e��A��j�(�
X*#�0� #�0� #�' 
.�d$�9Y9\�2�*��dr���o����E
�. �%��ȊG2�'����iC��bVD��u�v��m�ڵ�x:�|���0�����K���^����@c� $ ��_|Ae��iJj׮�H�O?�t��y��R'$�7n
"(�[�NG
+oԨ��L�8�4���vy"�6F�`F 2dJ&
�e�c�	�LyJ"�` �ݚ5k�v9�z��
�J"c�,_�
�Qt��9s�4l���oްaC�*(�t��>}� � �

hن��wSlzz:��.]�Z�pa�.]���C��9�}��)S������|l��b� �5޲��ή]�v��I��m۶��S��ϽcF�`�7V�>N�e��O�����$BG+W�\�jU�`a��D�߀J(Y�|y�R�
+�#�O�|����ߡC���󐤺gϞ#F�h׮
5�n˖-
i�6o�
�2��]$��[�PB�5�c�.��yaGw�c��#.S�@�J��g�}���N�ꫯb�.�-��Y����1� #�0�������emٕ�4�/�r���y������V\%�1;555��֭[�ѯ_?؆C
� (����3�p�eʔ��%K�8�������ׯO����
E.S0�cO�r�֯_O��F�z�t��]�3���`�½`F�`�	�it��)�l�BoiW��/����w��S/<r؆w��l�F�ݻw߷o_���#jҢE���drk���N������^
+{6
���޽�Kvq� u�'�\�� P�B���z�
Pg�	�"8��k/� #�0� #�P3��υp� �l��Xq*II$�aN^�`��Y�J�*5a„Hur���W_ݹs�
z�رcہ��e�0�M�-[֫W��_9��G��X!G �
C�����gF�`�.2�X
�� ͖��#B'jԨQ�fMx��_Ν;W�n/7��'ՃQ^Ρ>
�
<x��ݻǎ
A}Q�
;w�4�ú
��ɓ'>��
�B�˖-�OD
�X�A���Fe�q��fϞ}�e�E��/0�pGF�`����a,�����c�12"v
ѯ'� � U(H
�YC-�9D��Wl���M�6�"�C����O��N0s�LO�j�:|�0�?T�c�_�b�C�v}�L�B ~� �zl��]��^��џ�PAǝeF�`�䯬WR���E�k�
+F
A_Xpa�qD�6D����#� �����7n�흉���	#�Î��(
VA
�j���6m3f
�����D�o���>� |C�3�]�	yѢE$
a4D~����ˊ+�z�V�Z�_X��
��W_}��f,0?�#*��
+
x�z뭷/qT�4i�x)�؂�ᇹ����F�`F� !@�ʴ�!�����
=
(�^7D�%_p�iӦ��
t���
�G�&Q�`��v���lWY��� ��S�r�J|�F��gd}˖-��!�] �A�^�Z5���>L�ѣ���_y�����uw�q삎�_��GW�KF�
��q��=u�T|�p�Ļ2���rGF�`�� �%+�ee:N,qZ��6�w�"ԃXjW.uy���|0�@u�;��2fB�\n��3� #�0��B >�~Xt2��m�I;�����I����m��Ί�SRS�-^����/��G��V�KΫ~j�zV.
_�r\��0� #�0� #�&@���V,V*k��:�ad��[�P8g�r���(k�0� #�0� #��\Y��[����WWV!��i�?>K����S��2� #�0� #��0F�8 
��}*.
�rX�@qg�,'Rn�`F�`F��"����:���r��B��bF�`F�`<��p
+�
+��"���~��1� #�0� #�0�
+#���&W��n�W�Fx,Z�v9(��G?M?)��.OwG�"�!�q�n�֮]z�� �7c���g����_|�E�>8���\�^==5P�
i��}�w��HJ��]@^st==�뇏�(���P��@n#�D��ƍC�u���H�5B8
+���~"�en+��F�`F .l�ʖ���/[$Z�#�老�vk֬Aڅ����`UP�Pf���؎�7�ϙ3�aÆș��)���t��Pf�
]�tٳG��
hhժUE�-^�8�C���.H�3�h�W�^��������Q� e�q㜵�F���d��-
okw�yg׮]���Ȧ��=ٔ��F�`F �б.�	3oy_����+W�\�jժ0� ���0�����˗G�*U�`;J'!F����#[�Ο�Yq��Ͱ��1�dI��H/��O>��u��mڴ��Y��ՠA$�F�k�/�OK�R�t��zf
7�Y�o( \ � #�1�9 u�	�
���t�RG��l6��F�`F �����J­
׆��!��G�Λ7�4��u�,��٩���ʔ)��K�,�K0Ё(C86��I��;��I#z�B��K=Ga��7;�s�(�K�\�r�ׯ��؀�����*p(�L?Q��2� #�0��IA�����|�7Πq�� p�2eJ�u	v�]�vح�^ܧO�~��]z饰CÀg*��4?��رc˖-(�%�l߾���i��u�ԁ#�����ˋ/v�7TϬA��9��Yk�ke�
+*@\wH6@���|i�<����X#�0� #��<���1����bn�2.B�0'/X�`֬YpH�0aB��X~�˖-�{��l�l at O�a2~�x��.�AAeʖ-��V�>����χ���~��!s�΅Ҽy�\�]�'��=a�qC�"0}�t�����F�`F��  �0��S�D�*��y�����S�F��5k�l��m�ܹB��F�����
/�P_X[�9=y�����
zR�jժ鞁�b:
�ǂI~��2�è<dȐZ�j�
;VW�r 
+�� E�3��Rn��_���s
+��{�B��c������!�gϾ��"���V,�`F�`�" 2,8���
עzv2�!��{�	@ ���a9r�8errrT�|���iӦх��
>|8�g��
VMv�I�&�����f�	�.�}��ݻwGl:^=#���4Ύ�����!.�5	���T�~����j��W����-Y�ϵF�`F W�^�I{��>��5�D�ܹ���ЬY3�}�˨Q���q�F8Bh�L�$?N_���'
+�UТ]�!ӦMcƌ��������*���
P�C^�b�SO=ժU� ;4f"��UW]�`�X�N�ؾ}��+"x
5M���$����]p�7 7���7WG
���쭷�z����I�&�;��o:�<�2h� #�0� #�7�Fe�����c��E�^xa�Ν5�|
@O�M��
6бcGLu=z4��p��X5�
� �+-:��#N�ʕ+���( �s����w܈{��;kp�9x\��h�l�n펆�8��
%+���2l�0�Ot=uw�q�
o��X,�Z�
9��{�ԩ3g�|�7
�D0od*)�}�N1� #�0�
�
�
.K�Vg׶�~�K%�C'��-���{��%�w�;��@̄�'�Yn�`F�(��ү�̸݇�}��GҎgdfdd�ߣi�z;��b���e���|�v���Q�R�s�Fff�^2EL�B�:w�`F�`F��!�� ,�XT�W�l�
�d9.�ؽ��D�Y�y1ք`F�`���@fFfzz�X�g
K?Nt9���u~ۼ~�O�5>�r���v���^>�;��AO��-O��_��S� e�� �D�#�0�@�C }0>���?��e��p�y�O9���+8��Ѧ]����~���#y&
+��^��Eϼ���0� #�0��ID`�o�^���e��N��βm��8Ȃ+�q�����u������`�IԒ�fF�`F�`N<�����
���ŷ�
<z
.rn��W�Lϔ��V���O���"#�0� #�0� #p2� J����!
�U
��&�^���� ��Sڏ�x�;�Ii�ty���wT1+�Xݺu�u�v��P�� �7cR
r� *�_|AU
횭#s�6׫WϜ�W�O4�LlW^y%�.#���
Vճ�~����~�
�
�*Hj3n�8DP^�n��ިQ#�RM�8�����˜���pF�`F��,�
�0��[�f
�. ^�޽��$�z����˱
�5ȟ3gNÆ
o���
6TIOOG��ҥKC��
v��eϞ=T
m9�֭�Z��hѢŋGz-ܯ����-BN�;�s�ҥ/��b,�H�
e�q�
��8���9�����ok]�v�ԩ�n�m۶�ړ��8F�`F��
����DmW�͈C�"�U�\�jժ0� ���0�����˗G�*U�`;J� F����w��!8��͛ag
1b�#��-�܂�x��r4�[G��֭[�i�Z��~�#�6�2Z��)	|��(]s�	�Ǎs@��:�������g�E�>����Z2ަ̟9�"
aF�`��F�I�
����o��G�Λ7�4���U�C����� �eʔ��%K�ĥ �Z�(C�;�uD9�^�_�
y�#��N1��7;�s�(�}�\�rT����]EH0E�aF�`����xd���$�j�2`G]�
AI7�
<eʔ���/��]��֧�vZ�>}���w饗�
^h#;v�زe
�_r�%�L���.���
�T�^=ފq�w㜅���"�*T@�}��Qul�:�wH���y�-k¹#�0� #��2����6;�]���
̚5�T�R&L�e�C��Otٲe�z�:p� ���}6 
~ࠠ2e˖�\+t���к'���7���P)6}�t��
U���� #�0�@>D�F�W��
'ɪ�5jԨY�f˖-���Ν���nE��&F0*��9���VxNO�<y����
~�N��`���
]�jժ�0Y�soq�Lm����S�%k��݋m��ǂ71����CfϞ}�e�E��g`F�`F�� `'�F�8�!��̘Qѯ'� � ?)H
�#G� �Vrrr6��x��M�FR�V��l@[������L�4	��
���DX�&̲�s��i�
C�oC\>k 
�1|��z���1���
DD̖���Z� #�0� #p�0�-
�,����޽{�Ν��4~�x����1(��5
+
�7n�#���DI�ㄑ��(
VA�v
��M�6�3FkĚ��믿�۷/�Aa�]�bbS�j�*��Y��s�9yƌ���S��{4���o�'������
w�q�
o#�L.���쭷�z���դI�
��p��
?L'́�X#�0� #��b��ʘlZ�5hѢ�ot���U�y =�6m�.�@ǎ
1�i���$%� �
�jl;#�+-:��#N�ʕ+��ICt�/����w_���{��;k��2<. at e�s6`�6���5׀�#�2�EH���y�
�����9�����čF�
��q��=u�ԙ3g���\��J,F�`F���X��Ē���f�ʻ�d�yqo��>:�y��"����1�#`&���6�`F�`�� �o�~պ�qS�����!_uFF&�=�����;+�NIM]�x��aC�9|�*-mޣ�4i�46�/
���0� #�0� #�0�
���x9v��9���Ǐ�)m�y
+4V�`F�`�<���l�"ɓFf
+[�^��.gOL~�3g{��F�`F�(xW�%�˓<Yhy�ϒ��J~�3����0� #�0� #��H2C)G����z��0� #�0� #�0YG��ŎD���s���)�dF�`F�(X8
,
s���,2�]y��7 at l`���z�j��B�a����Hʀ=����&�^�zz*
�G=*��"3��N����g�
��,����8��OR�!_
wT��Z~ݺu�u�v��P�
��'�Ԯ]��w��Ց6ᓑ5�
+ m5 �ׯ�����v��`
B��� #�0� #�0!8r\?�#���E��K�7�.]�L
�������}۶m���e˖��W�ZU�h��ŋ#
�[E��ӧR �T�÷�Z�����J�9�z��
\
%�A
e�/_��P�( �s��iذ��7߼a�G
���f�Y�jU$Ly�����Q	��L�2x�`(L�A�_y���{�G��xq��.�0� #�0� #��m����H��DD��o���<����ԇ�lY����z?�s�֭۴i�
�f`�={�
1bD�v��ʕ+�\�R�T���I��
	�+;8�
J�/_
2�T���P�( �0Z#�u�
���0�m6A��u�]iii���q��5h�@��I$
0`��D0^
���0� #�0� #��"`�-+
e�,����={��_�
��=@vkp��~�d׺
��2�8�Ioݺ�
p<��۲Ύ
=:o޼��;	��/�S� ���	�Y}���cǎE���_}�Сn9(7��鲳��bF�`F��C�d��LLȔ�ձ@���/��d���=�s�2eF�NY�X1*�cǎ-[�\z�p�ؾ};��ҽ{�}��5o��!
�:���ŋCO�.��_��!�|�
���k׮,s�n��Z�j�:u�KE���
j at 2��M�6�\?^
��/��0� #�0� #��L�1㫝
G�Z�C,pڴi��
����\�r�`nԨт
����s��=�бc�L�0�
n&�n�!v֬Ypؘ0aB�=Ӊ���,����T�81&Js_�8�َ�b� #�0� #���
�X�8�D�wfQ"��r�76�U�V�(X/&�Ք
&��.˃
��6pGx&��jԨ��z�(Q"T-���-[�ߗ
�=�0����_x9g�ǣB�
+P�����`� e�q�z�8��F�`F�`��0N��?��Y�CX�R%�rs�
��Q !24+ET�e˖M�<��ē&M�����ú��.����%��W8~�E�H����$ˑ#G������	(��HdS��:81(�9$Ǜ`�� #�0� #�0q! �r,R\Ԙq��7�|��^�b�W�[�,Y��h�
���X�Ί�fy��i�4(�X����X��B�1����v_PO,𜆇�ƍ��H��p��(��퐉ˆ�A�v���M�6�3Fk� �
������uF�`F�`L�]Y��~ʈtֈ�� �0!Ot�kB�i336`�u��Aj1�o�ĉ�$�y�xt��6*�gX��_tn� ��e�i�<�
=��$B�a����]w
=-��ߵ>��r��ٳg#cH�>9U ^
r�]��0� #�0� #�X�ƹ�W��w�F
㞦��Ms_btF :�5
�0�dF�` [...]
d�8)��5}N
+�(#�0� #�0
]�Ln�G��:ܲc#�a�v��>Y��bF�`F��pZ��\91�H���`��
'Kͼ����eF�`F� !@���vl��K���0� #�0� #�n�\Y��Qf�\���>� ������~*S���?}bMF�`���@�2$;�q����_y��C@|b�E�z�j��B�e�
�!��P�<�`FX�z���xT
9����~�L%��9�7�g�}60�>�U<�#�_߾}k׮
U�~�i���/$#$%O;�4��ׯ������C���˦|w5��y����; �x(>\�#ЫW���?��.��o��E�XFT)����#�0� #���a��#�Z"�aѢE�]�,$K�.EF�����m۶�'R���W�ZU�h��ŋ��W�V �O�>H��S�}��k����V,@ϊ~����}��)S�����HL�/�	R��+�|��׏<���⯽�6�/_��(�����Ϙ1�A_���2'
�7����K��<.�ȅ�NN
Q\�O:ڬ #�0� #�{x��wZ~ꩧ��o��XC������Hn�,��9g�
l���έ[�nӦ
6
���ٳ�#ڵk�U�\���|_���xb�Y
�o��~�nݺ������o����Db��d��S�|yԭR�
+���?����
 d �"1JC\� ��������G[����
�S�N���?��#r�w��]�F%/��b| A�I�ݙj��i�M7݄�2�a�'���i'�SB-��$�z�(�3.I7 �x�
<x0�#]��o�]�F
��� �M0� #�09�����_Y��(��v��ٳ~�z��,�l���
��ɥu�H<��Ǒ�z�֭ݺu��m��޶W�`}�5�ʃ@���~��T6l�����
�d��\��Ty�w���5��։D 3�� �np�x
�������w�޽{
�b
��s�
�!��o�WP׮]۶m{��Ra���t��x�ë�g�}��c���t�G�y�VA�V�Z�+��?��'jn�`F��U�4Z�dÙ·]�^��g	x0�)S�
��ڔ�cǎ-[�\z�p��i
+v2]�4x4o��!�aÆ:���ŋP��]ѯ<1����澞���w������7m�4�\֯���N�:�����K
G�q��8_��	ճbŊ�v������r޼y�*/���_|��p�ч<��۸q�ʕ+'L�йsg*|��Qx_��rk�)������Wd���%Kv�����'܁~��'h�V �oh�� #�0� #���+{'��N`��6m�j!`�|�ʕ�3>/X�@����h衇�
;f6
+ޠ�}��tv��r]w� ��,�w�?�
D���������W�z<t�P���'
e�A�i%��͛7Ï����7n
����G
u
��L%�����w�_���d
�f+���p�wh�?��\�`F������
ѿZ�j(����q�k� �^8;֔

����A��
+�{��cǚ
�'R'�(Q�D�N��8����P�Jj#
��`�&�p�
��e�
xk`F�g���s��_쇑rȐ!�j�r@�嶸b�!��/�eœ����i�n���&\�&Mr(ðc�[��/4S7��~ZE��{�dF�`F�$# ��H�e�p!H���5Z־J�*!�����
+��SO�v��j�'O&;1&3
<xPW���СC������T�>Q~�1O�q0�<|��-�_t�ٌ�]��%��
t
/�kq�� f�b��^F�w�f����@��e�ɦ��r�W�ڃ��I .I���ܜB��2n���o&]t������9��0� #��$D����ʒ:GOEҿ��b�<)1��+�-K�,Q�\@�OƂ
؉��,�-&0!ԃ�RWKZLb��J\�@�gyД�o�~��
��W_}1
+��v��;\䃑ӢIUh۷o�V�o5k�q��C ���/�N�����GLj���{�n�	
>
�sC=�Sw�r��+���B�d��d���a����
+��$������
�,�`F�8qXtٚۧ�^�NjJbR��1c0=�O����pQ��{mf�����Ҙ���'N$ N����#���	����סC�;�Q/k�D@�9l;�\w�uxa��"������t2���Ƶr���FPm�	$�A
7
o��#F�y�\0��
>��S|��#�)�"D#(�̙3�
+f�N
+P
=Է�|� !U�ML�����?�P'�~�sa��0� #��`K�Qw������I6,,�w7�>�Aߙ|�U���|� \q@%�|�I�/��
^���
�2� #�0@ >~8t2��m�I;�����I����m��Ί�SRS�}���Æ��Z-m�?�lܤ��WV���!�2�
F��! o�*P���X�����e2� #�09���s�l.�y�-�pˎ
?��x��,�,��!�Xp��?�eX��,w�+2� #�0'#I�7'�pˎ
�	��1��'�4pӌ #�0� #�0y ��
�R��낡�-;6�`��|
8=�#�0� #�0���C at Pe�\$*���S�[fF�`F�`N*2X�#���Mb����I��gF�`F�(�x�_W|��.��W^	?��\$�W�F��:&�������~�z��T<*��T
\�����?���� ��ƭO@w����U2%�����ۦM�@�ri'�J��o��B����Gb�P�� #�0� #�0�@^@�4-;�`D�oѢE��?��,]�,�L��<۶m�
� 13?�Z��hѢŋGJ<w+�ӧO����_r�%t�d)���

���l�{���}��
�D
x��4Ŕ���Ǥt�����

�t�gϞ��r1F�`F�`�����r���1�������+#�
��HM��ԺK0�R.$ö��4�0�b�������gϞ#F�h׮�>T�re�Ћ�T�R���P�li�������g��۷�
7� 
.���^�zA��͛aWFw`VG~
+��D}'���� #�0� #�0�"`ؕ��2q�`weXIׯ_��̞�u��\����_~��
"��(c�#��֭[�u�֯_?�b�՞��5��Zn�aA���o�>R�2e���%Kr�i��0� #�0� #pR0��I�
aVr"@��ի{j
�]��Q�F�D+V���رc˖-�腋����av�u���o߾�͛;�5l�P'Y�xq :��T4�HKK
(������*ժU��aÆ���s�i������߿?�3Nʩ�FF�`F�`�A������-#
��eaZ�6m���p` 1-W�
<�5j�`�}�ꫯ�ܹ�C=t��1Sܼy�t27�ξ��`6_� ��'J�@�1������=`��e˖�%�u�+?���9�0
aF�`F��-<�r���1ߋh-�%����ˍ7�;k�V��Q�^Lѫ)L�3]�
4x��ݻw�
;֔V�F
�L$ؙ8T?=�&���-���z�(��o��oŊI
����P�'O
>|��	�A˥F�`F�`����R+�
�R�J���p;6����SO#��`�d'�4iRjj���u����
:�rÆ
Y�&T�,�4��鏩��k��K�U���9�M5�:#�0� #�0�@n!�Àm\�rWe�	pÅ_��o����?�X���+�-`�)))�
�`�X�;��b�ݢE
��@�5�K3B��bk�V��'�7��Z�Z
���?<f̘��8Peا��1��w��
0�'%y���j�F�`F�`N"����"1��>$
GDde\������hҤ�63c�iӦn�4�b��ĉIHF�Z���Q\��o � |r���۷��ǟ~�ih��o �
�
+���+��wܬ{���2�+�b�F�`F�ȃ$�>��U��~�Y('}v{7�6���6�=)��*1y��γ��b� #�0�@AE �����}Ȍ�ڷ�$�xFfFF&�=�����;+�NIM]���
2��d�,������4������p����4��`F�`F�p# g���$�W�bŕ3A��L�w����
Ǐ�T%��'�?�
#�0� #�0�@^C@bI��ŕ]IH�}Y�[vlhOh���kg��aF�`F�8�xnjˋL9!A�[vl�!o��{&�uF�`F�`�<��6-îl��L��ț49O��J0� #�0� #�.̹}�+�
�yaF�`F�`G|�8����W^	?�?�\$�W�F�,�:&Xc�������~�z��T<*��xT��?D���?����˳�>z���Tq7�XѺ
Z%S�[:���i�8\z�ئ��`�ט\�
]�����o�� [...]
�|��f�o?
h?�@��޽{���3T%.�0� #�0�@!G \�h�"�* F�}�\��[n��Y�f�M�q�u�ܹ�	�m�Թu��0�b�:�B���sĈ�ڵӇ*W�\�ZJ�*|��	�h6����Mx�D}Hg}�
7 ��/��W�^�y�fz�
}�8�
��D���
ʠ<�uw��������l$�N��g�J\ ��K�)S��/
w�u��+V,���
F�`F��=lq0��RV����#���Z
;vW>p� �Ǘ_~�.�n ����n�u�V8
����ج�3X���t�r�
���~k��j�)S�,Y���!0555bݣG�Λ7���KJ�iBB����>�ߎ��x�Ǔ�/�o�%0� #�0�@N!��WVi������/(P�zu�b��Y9 ��Ƴ
;vlٲ
�p�ؾ};����o߾�͛;��A'Y�xq�J��T4�HKK
(������*�@�;l�0�rN;�4P"��vb�g�u�`-޵k������T	�e@~zƥ�2�ƹ��k��7�mf���Y�F�`F 7���V�kh���+L�ӦM�_] 
�v�ʕ���F�-X�@���;w���C
;v�s�N&�f�9��|�d�O)A�1����� [...]

<x���cǎ5�ըQC'	v&��OO�	��۳�����z*
+���o�[�bERC/�.ÓF��ÇGᲺ"��U�T�>~8`?�lٲ%x99�{�a �a��'k��v
����A�#�0� #P�p&�Vve�BcG¬ʕ*U�,4�۱�
+ D�N=�l0��5��xҤI��=x�R�|��C��P�����P}���,�?f�ծ];�/�V�Z�7Ͻ3ۅ�IӦM��
Gh�0ۣ�w���c��Q��-r� �bD�.�#�FA@@�S�N
�`F�`�61^lƌ�|9�,'$�
~o��&f�X���+�-`��k���6��p�	St�-O����Ҍl���ڳ���	=7�+Ed	Z at t���nj����
+�
�4�z 8b���p�&���w���:i0#ƈV�ڏI���P$��o�X�)��.�� |�z���r�C�͟?�O�	O�
=z�X�0� #�0����P�ly��7F��2���!�2.L��FSx\4i�D������,
���'N$� YNh�GG0q�
++B���ӂ����o�
s��~�ih��o 4�
+���}��7k#ؕ��+CB�\�r���Hڢ��Á���fu�� ]��8�=fU�Y�B�
+�G�&9�z���r
+���W�>��
���<9��aF�`�
E�
+�\�f�իV>��=D:/'��𔁃���B������ blG�!bb�
9�
.�R��0� #�0�@0���W���7�o��H��̌�L�{4-]ocvV,������%
:t�;봴���iܤ�-f\fb�XD$^F �@�|48���A�៣s��|��0� #�0������K�eK�������
o�l)�r^�'��\$g�
K��ã
1�֮]��O�\��0� #�0��@"�`<�����|g�S��[����<Q��|.C�������6�}0
+,�_F�`F W8q>2e����-;6����|n�:����e�� #�0� #��w�C&#�n�
n֟`F�`F �"�C�Y�c�_��:�Z��.��#�0� #�0�@�C at pe/f
Ζ?��c$�_��R.�իW�e��	&�F��Lr���������S�<r�Q�?��J>��s�o.�>�l(�n}���@�h���)��?
EL�6m� �K/�T�7@�c$��d>�(M�����@���^�'��׮�
�w�'�[?��~��>��z��My�Η���ĂZ �wƍ��w߭[��s���5���o��v���HwB�i�XN?��1�<����
ڃ
7���*R����J�2��|��a�
�����ϰ��]fi� #�0��	C �A��9�TmѢE�-�,$K�.��D�9k���߷m3�£lٲz��U��-Z�x����=��ӧ25�Ts�{��Z���`D�	�h6ѽ{��&<�A�y��?��!�
� � [...]
 ���k��|�rl�B�4��{������_��W�^����~0�3f�۷�W�^��C;^
+
0 o���d�v�کS�
�5r��p�
���[o�T�o۶-�ո��+o澡HZh�
��Ґ�>X4�=��[�l����jժ9�_�0� #��.
��O�&�r4�
^�|�-�����M��!@�f��3g�iOunݺ5L��p�
I�{��9bĈv���C�+W�#�m��%@� 
�&`�
F�S$�C�\p���
7o�
�.��:,p@	� CO�'n�{���Q�J�*��L��؀v��h�w��㷙��ߠA�t�8��1���FA*�|� ��6�/�y`�Ő�
ġ������C_�`A�s}��ohx��%�g6����7s��Xh?�^����s�?��#��� S�e�^z饂tB�/� #�0?
+l�+�(�2���ׯ7m�&dȮ
�|��؏�lYBRke�qd�޺uk�n����[l֠�'k2ݵ��ì
�c��j�)S�,YW�~��	��>�����
�2x�`8uԨQ#��`Q���j�9SDi�ޣʕ+�K���
m��[84�$^��}�޽ه�X�\]����%��z/���
+�^���������nݺ����F�`F�#�|bWδ�ɖe9кL^�իW��
�� m�F���΋0[nٲ
�p��
#̮�.li��o>���.u�8> �O at E�	|Y(������*ժU�_XdI[ȁ;/
{`��o���a؋r�=q
��o��p�n]&k�:��`i�P`6�?�S�^Q�?$����T�B�
+�9u
+���Q�b�"E���x��7o^�;�/�B�w���9G�6��;�Ë�cZ�r�����Z��'I��tE��1d��������F�`F wP�Nٕ��q�E���tڴi���6 �� fL-Z�`�>t��Ww�����
:v����riq3�
A�l��2�'�
�1&8
>|��Oŧg�d����>��n܂k�^ӲY&
�
<x/6C��/6$��?>�h��C�t�'�|E���D3�&(
?xxM�cWAB�|��C%�>(�1����]
��)��[o�'��C�х����ƒ%K�CEqF�`F�D!@�F�2+��+��a.�d7"k��r�7��
+��>
+���c5�r`�,4 �
;v�)
� :yG�3q�>~z�M?�=�?��S!���~�_I
���
7	̂>|��	��c7n������A
+��.(>\)0�і���2셵j�2OY����[FM�� �s,xc��0 &
������	¤I�B;����]�L�ٳg_v�e~�
��9�/?�
9rD
����
I�fE���n�]tu���yaF�`�:��"�_8�+k��`�
D�Zs�
��G�
�q�v�#+X#�A`��9SW��]�rÆ
Y�1T�,�4����l�k��K���9��S���-Tm��;s�LϒQ����l>�-G�Z 8	b��%'޺��&���� 9�|8�S�~}��� ��U�ɩ��r�W����;���	�;����)~���O�b�-�ܿ?J��x������そ�ͽcF�(��r�)
�V~3��?���
_W�|�M� <�)���6������`�X��Ǫ�b¤
+\�V������Mb��J\�����fh�ku��@;f̘��8Pe�HD�@p
���Xp@�`b�@�Z�fL~��:��T
�k=�*�]?90î	��h5B�o߾=��
z�
x��_�
+�5	q�0T�٤I��o�
�{��
���	�Z
�(�T����
r@�!�_����
<�
�P�ʛ�Lh�(-�D�zB[,p����ܐ��<&,B�k������9	���_�#�0�@�D�23[\Y�fD�.��#"�*.L��xx\�"h336�6m�6K��.����	f�W3����q��Erͤ��_|���J�b�
B�� �����n�=z�}7���[1D��~�ö� ��m����'���pT/��P�1���)�L at y����#G�D��%O�:�t�?|��6�~�)�XB� �w3�iܸ1<s���Qa�5w��7�j�UJW��p�@��W�U�������5����	^Y�<<��R�k��!����3�=bF�(0$��Yo���/ܦ
v{^pʣ�����I�#p����0� #�0���D �����>d�M���?�v<#3##��
MK��؁�K���.[�هÆ}|���
+�s
��q�&I�7Y|$��
��w"��m1� #�0� #�0'
+/

�W���]���-;6����[>��C^�'����F�`F���$��Uo�ʕ�nS�/z68����|0�nL-��o��>�yM���oa��>��sF�`�9�1l��s�>��"E_?�B�=t��
~��[>���������|F�`F�`�;���"*�aY��K�u���� #�0� #�0y�����寬Y2EY�`F�`F�(l�
٠�H���vd�22�!�.�
+��r��^�.�uLc
+���h�ȥ\�^==��#�,�������
h�� �A�r�P��bE�.h�L	n��(��"�p�@��9��У믿�Ҕ�-Z��Fv�޽{S�� 

Б�`�<���3k�����\ �wƍ�Lj|���
+�F^�d�A���J�5���pFƆ
�گ��O��
.O�hA�-�� �̫�����z?٘��4~��/���g�}��,�0� #�0'g�>eWD9Qd�d9�/#����ߏ,$K�.�4�r!U��m�)��
e˖՝\�jUѢE�/���C�~�?��K.��fN��

��l6��
+���StPd2����Gy�z��K�.��H�ѥK�={���l(��4xH�׫W/]>.
ps��g��v�0@r;��2��ڵk�N�
��Y��$�/��r�QB.�`\�v-r�T�At�Nw��+o攡HZh�
�U���D�HЃ˹e˖���?��/��⊌ #�0���F@�I�1�(�2��
�� /WFF.X�R��u7@��
?�̙cړ@�[�n
,6
}Fr�={�1�]�v���kWۮ��
+�' _�	X��τ��Hԇt��(���/&��y�fX
+�
��a�JH\z�I�
 L �S!ƅZ�+��?X�x�
�`�-��� ��6�/�Ȱ�bH�^�r寿���7���|�E!bրBNr}G�
�74�vj!x��͙��ʛ���,�c����s�#Q����lٲ�^z)k��Z� #�0��	G�0KO
��%5N$
�B�
���ׯG�g�
;vW>p� �Ǘ_~�.��� ����n�u��nݺ��������O�d�k���
���#�*S�
�.Y�$
M�����;pV	�"Y���?;zfA�B[�Q�ʕ�%C`ô��N�~q���?�@�

�Z�-$;�)�M8����Bx��H at Z{�nݺ�͎puF�`F�$! c�Y��a�`'
�^��g�
6j�(�H�cǎ-[���.pa��Uׅ��̧;
�ۥN��� ���	�h6�/�%=��9U�U���Æ
#m!n�0��������a/ʙ&e�ԩ�~��D�! 7O������(},�e*T���c�S���߅��^\�+�C	�:ه�_�=k���֮Mn����������z�V��I�']tu
2�D���d�k,�`F��U�A0М�ʙ�CYX�cѕ�]�t�iyڴi���� �

̘Z�`�}�ꫯ�ܹ�C=t��1S�y�`
+��ͤs)�	0� �����
>L�y����3\2`_��P�������B0��СC�|�8x���?@�x�
�`!)��f������#{��ñ!����x�
+&���
Q���-������Sҭ�ފO��FF>^K�,`��F�`����1k����G���ܕ�nD�\���o���'}|w͚55��L���A�

oȱcǚ�jԨ��w;��㧧�D��S�SO=���7���,RC/��"fA
>|„	�����
;\�Z�L(��@Mx���O�x�
�`!)�����޽{�]�|yڃ7F�Ai�������8A'�$�{�� F�]�v�>�gϾ���&�9������Cˑ#G�p쇞�H�OF��醁(7tE�Ձ�$d`�`F��o(ñ���!����
hV�?"f�9܎��� ,dE���0D��
+�HF�I�&�^u��A]4b�С �6l����dA�Y�O�~�]�v�_2�/����f[�����sxyȦںz(�T2.=sJ��'GM�5�o9�٘�ԯ_��e�Q!�+��;D�qbŊ�Nx} `��| w�����k
=��QR�Y���
���v^�N.��`F�� �����>�*/�0�
_W�|�M� <�)���6	��6�x�:(&L�J�zn�9�$֞�ĥOh�O l��V� �cƌy����Q��b�����
� FL�
Hkվ}{X�<�����ӯ����zƅ(��� ^��
Co�M�4��.
 �k�d��	���GE��,���K��	F_��p x�$T��f���I
�чΈ�N���7
|�A���!*�����k�żF��e�pa
$�wF�`����-i��u�8<�`\F4�H�"�8"¯�r��
��̌��M�������IN:u��

�jťOh�5��O�����G(Yh��o �
�
+�����ѣ�Q���V�:rCI[pp�I�����3.�C!-�F�
��)��6u�ԙ3gb� ��G�"��Y���^�khh��»>G4n����x␃&`�5w��7�j�#HW��p�@��W�U�������}W��Ryx�÷
+�j!b
B�ϝ�r��"#�0� #��(e��"�\��V~���
6���3F�
�

2d��p�
W�2��P��9#�0� #�O��}?ͻ�qS�����
����Ȥ�G���6v`g��)��˖|����#���~�oˋ7���	�
��'�|
+��0� #�0� #�d
�b����d��G\Yd��O��l�˚rQj�pˎ
�Up/񖏢Cv��5}����0� #�0�@E�Ƅ�cŃ'w�?�U��Сy� <O	�y|n�FOn����g��vƹ�� #�0y�
��1b���6�n��!��|04Q6R����t��
~��[>�;�������|F�`F�`�#�
���F.�Lw'��a�G�YgF�`F�`��� �`_Y0c���嵜g
��
Ƭ'#�d�F��k�Nq1�=��O?�tT��R��~�^�v��P����v�:#�0�@Dt|e�"�=���n~^x!�"Y�z5\6��F�ad(�
l�'��"�B�z��T<*��rT��?Dv�3������q���$��{�5�2ȡ�Ԙl����zJ#��!�~�!���	����k����"�4 �ׯeD3�#�[�޽)�x >�C�����y�f�EJE����8_��-��@�^���&b�,�m�~*��v����d��
Xpu���,��*�~El7��,�
i7k p-F�`B���f.#"F�>p���#
�ҥK���0s�\۶m�
��([���jժ�E�/^
iܭ@�~�?��K.��fN�}V
Y��e�Q
�fapz�d�Aj4��-]�4rC SZ�.]���CP�!JK
�?"n��_0�W^y��A���H�L�x���I[,|L�-�����
+={�D�	J%��*`��d����$�����K/��-�O��..؝;w�"��p�eZ�]��_��Bs�UNV�9��0�@�F@��$͜iWD���������k�f͐�Z�3-�x��9s����:�nݺM�6�p`v҆���ڵӇ�\��_T�}�|��[�Jl���Ҥ��Tؕ�
̨0��H�GGQ�!JK
�?G��	�4�LjH�4h ��N���y�ĩ_�� �]���e#�2���H_XF2��#}
� �"�a���S�N���?��#��ы
-T��/��
�+�NMTM�؏������V�~��5jPa�X����q~'M���C
�l�O���h��p���_�뭷BO�Nq+�b18_~�e�c�
�'z?��ڭ�������Ù�;���n���8`'��
96�5�5oCǃ_�y?#�0�@6 =Vveŝ�E��v�������|ǎ
��
8 ���_�����#�8�[oݺ�[�np<��7��������M�w�2ePrɒ%q5�\B���
2G�p�y���;�� �"$bב��G}>
�k׎X��# 0� ��bx������H
�4ю�H��:��2e�y�!I���	�Z�W�/x����K/�o��ʕ7n
	�k�O�n��n�����m�П}��c�=��bV�T�ꫯ�
!���x�t���ڡz:���.�{��'_+� lc!
����x��`F �p�#�KeY 38	y�V�^�S-x0���5
+�X��v�رe�<��b��d�.li�lڼys���
��
�/�2����p���
�s�ӿ��
+�?�n\`�}���6m�91�P�N
���-�����҂�馛`���� H\�ra?7n����믇BT�bE|��'
X
�n9o�<G�^x�V
��>�_�dI�������O?���+W���0��g��w�ĉ��"f�&$x� �������l���Ox1#ep� K~��'�$@ {Z�
=��V��/?���t�˯]�w��'�k�q]c�<I��_�/��:̸ #�0�@|���q-r�E�Wn��iӦ�.6 �
B���`�}�I����رc�X��riq3��
�5L�f�9`N�a�� =
�\�&�
�p0�2|ʇ�+���C��� |�C��
�!��x�A�?��W!�#%� �Vh��?x|���WAJJ��
+���8���gN������
�ЩS�⥑ƃg�rH��_���U���_��I�@��
+�А
+�]$7�~�U
�3���|��~x�)���jQ��!..�0� #
�#�1
�
az_�j��$Y�=�o�s�9X��)��M�e� ��r���cǎ5���R'� ��,/`!�pL�u��'O
>|��	���e�
Apˆ
�}�]<M�Q� #%f�ժU˄( �������u��l�9��� �m��t�0�
���p�
Ղ�	\�
������*���3g������?xLѤR �]�L�v=��b�G�=QFH@����7:�$ܳwq�o�N��Cĸ
#�0�@V����U\�4����p;6�@�Aa+���!��
VJFbL:x𠮂�.C�aS�Jg��@>�
x�gAp�Ç;��͒�����8�٠�f��(�]�F��D�|�1�
+��pE7���G�ǥ|�,U
r�ˈ�
ٌ���	�/
L�ŧ�+��"��-NM�,p�E9$#
b�
+��
�2�૎Y�ݮ�
��n������

\2 U��-��+�_�t���8��+�!�w
��b��x��&\�`F g�qe�B	3̐�[�
xRb�>�W�[`�Q�e
9,؀e�1��h8��C����X{���
t��	YG u�۷/�;ã�)0�p�P������b�$��Y;��۷�ۥ�[�>>@6u����p��y���i[8k�q

���AA`���h
&2���s��
+��<�l��)oz8������o��
+�w
��;��'L
@C�i�v����K�֭@=G��G}���
�a3 �;.Mp�p>Ex�û�)��B�_��
�g�C:�<�,�������x�[8/%�5#�0y�C���V�,�TǤ�1c�`�

�0!?��Z����̌
�]s��1
����DM at 2�
���`�
��݅��� p
�t�
=`W�W�A�@
��n�o�N?�M� 0��<%��"ā%�8e
:t��
�B���Z@�k׮��m�q�ȑ'�x��MV|�X
&��s���~�
�q�=�C \t���� �qA��ڃ����5"<�N�~�z����{�	�� �U�	�����W_}U����Ъ1��N�Q醑!��ԔJE4�!��hʠ�4MD*�$Մ��H5D�A����t�%���
�t�S*��g���������}�9g�s�Ksf������Y���Y�z��I�w
<.ޥw<�,Q �ۮR��O�~fx�u䞖e�
��>3��ْ�>Y" " �G��Ϊ��3�-Y�w�g�A�k�����?�|�_�O3�$�� !4��F&�x�7n��T���%�o����q57��L#`��'*�}Д�
;�ܳ�ǃ9昿{�
��
�`�ꕳ����;C
2�
��<Vq���4o�����ѵ�i����,
�
a��V���t.�~���SfY
WQs�|(ol
�������l�e�Ni��P����Y�9Z�N�~h���.j�~��T�)��xbY
W�᫙�������禹ȷ�+��.b�0B��_�nٵc#�KD�蝖v���T-E@D@D@D���u
�FZ���&N��<,�nٵ��*P���_Z8KOHw~帵��s�.9" " " " "B��#�"���Qj�����������M�
��ïl���ͭL2�
.���r�Z$�֭#m%��x������_�;�ǗĨ�Tpn&5�9NA`s�yI�d�
ύ5jР�]�甃&$'��B�[dEu���oٜU���׮]�r�Jg�m����ƹ�T�~Nj@5�H�@���X�%�xT7�
+�

�H������@�X���$�=��g�ѵkW�����J�T`s�h�F7�\����)>GmۥK�:�2r�x�
j���#�_��'��
0�9ߩS'>ԹpU�s���4i���w\<E@D@D@J�����I4��!ԅ�V�$�ٖ-[R�ڜOŬ-[���o��3��
|<`���3�f�(k[�n���'R]�2��ڵc������N�k
+Q��D�~K�RI�
'@�t�c��|�駔��
��β䔗�o�
���J=(����z۶m�V���sb��ի�w�}x���
���������Z`�R��x���0�۷o�X=�f{��5k>?
�:�)"J��ƚ5k��0-�!"(�,5� n�g�>�g�s�
�4=��c=ֹsg\��l��������&M���
s�ε�x`Mq����;Oܴi����۴is�y�mذ��%���Y�`����C/�_��'�A9'P�vm�ر�p`��yo�b�
+b��FD���w�����E@D@D�$X�c0b�0"Fa�*���c��߿�(ag#��~�p��
�Z�r6�֭�e��.�q1M�8��K͙3Ǿ�
^N�6�@�1cƄB�7�\5� �_~9�a��Ķ�;.�" " " %N f+�Z�N39�`�W�
g�r�v��w_q����8p�����q?��׷�;H/�l�z�y��m޼�
Ī�4?1������
�̺��3g��7�\5(��o���kժe p�k�.g|�ƍy�a6g����
Sc�
!�#T��u뒂�3,���^�����^����^0������� s�C�S�N5����ƍg��cǎ���޽{���*U��2tm_j*�, %
�11�EÆ
YK*," " " ���;�����x���d��>X�d�ɯ�y���V�xeҷ�H
>|8�6�����
_V����H��L�'k
O�o���y��a�ըQ�H��%Y֌�l�sp���bK�"%�m�������ǝ�Yg���"�"�Q�E@D@D@��@W�(�2:]|��#F� �2+�H%k��d��J�޽�Q���.#�aذa~ǃ��L:;x�`Wcl�d��
^
z衦
;-Z��no#��
��xe�D1��f+G�[��C�K5�:	�H�=a��{x&7,���" " "P�d�9���%K���zFn
���{`��%�G�7�� 9�
+s��H� 1~gu4�s�;����`���9���}�>8X�z���E��3dȐ�o~vH^ڸWz�jެ�#g\a`�0:�"" " " " �K /^9�P�r�d��6}�kǙ=�(��lpp�®�}��[��];6�X�ND@D@D@D@J���n_^���RǦOv�W��GD@D@D@D@\
+��m�8[�D�D@D@D@D@D@bl�r��u��`����������@Fȳ�
����r�
+�>���X��'�`��֭;�(�gF�u�V�2�����%9�5jԠA�t��!U�i��?О#H0;�8N�ӧ�Ν;Ms
+���P��
F�Z��Aj�t��i��W�O�9ޫW/�h<.3FDM
+[�$Y�3r�H)_�9r�ڵkW�\i3v7mڔt6O?��9ͼ���8������d>����;�z��{�����={"��n4h�)M��c�Q�" �����)�W�jեK�:�`R��
���G
a�B>����?��G�q�
�(�9p���W_]�zujC����\sͶm�R�cN�={6�&��7.�]SS�G�
)�z�d�0�+�@ϵ�^ۥK�U٩��9�J��+FsTk�}G�mժU3����w˖-�+�|4~)cf��n۶m�v��qj�a1s�L�̘1�}���OA>�[�/�&ꃟ�.i�q���ꪫ(�:-<��Y�[��,��7.#��
���6�I���dʧc
��}�/�8q"S�j�p�B�ˌ�\ʈ������p���m�\N�����ã|�=��L�e�i����ܾ}{��{�W`+�ڵ
3�&��M�F���xb�588o޼�\~L�ɓ'����r��7.��޽{g͚��C*-jHH� �f͚�V [...]
6��]�0�vذaʉA�x�G�
ݢE�P[3Q{���ۿ
{Q��7�s�9�bŊ���w
+	��C�����C���7�D5��k�F�
;v}��t��
��������B���
~����iժ�����?�,޿?Ѻ� �
+؂�D$��iΜ9N�p-O�4��΃�v<��3e�o����J��n�	�5�ʘ�ab|�ʼn�q-;%�
}�i�P3fLa�
=W
J&S�T�*%E@D@D��p���/��r��=ʎ-�s�~��������w�}7V/~܁ڔX՘�'�7ùB��������{�N�5i�z���_�h��
��e�'ƍ��F�Y�� ���ؼy�U&`\�a�D9c�����-�߰S�~Fؾ};zԪU�hÝ!wh��!r���W�"�=#ԕ" " " �r��l�������^{��?���{I�Ff�^x�v����Z5~�c�fgg�޽ۊ ? y\���
1���1"
'��I'����ߧ�l�b��`�ԩ�H�L3KhY�~
9p�^<��qLl��a��tvMT�T��R<����p���.��o���j6c���-ie�W&=
��Ç�l�K޴
/��$�l��.̒;�l`��͆>'�C���n��8ѯ��jɒ%�>�(��и�D9N&���{�=s$x\F
�F�ղeKg���~-�2p;4}��~���w��-�.�
+ƥ+�<�f���AD@D@D �@�B����.eֺLl6"(8�
qX�ݻw7�\v�e!�h�P
+L�6f��zQ���]0R�ap��V|Hԧ^�zT
���	�����_9J�r�
�
�&�
��C�^sW�GD�5_K
>$�#���	x���d�d/,{-u��" " "Pn	d�=�!�����X�����'��~qT�����@
+���Y:ED@D@D�0���;���)�;vعgߏs
�1��;`�9��:�+gg/�7��!}3ߥ��--�7o���g('�X.̰t���������d��B�y0�('��aKJ
�ڵc�v$%M�E@D@D@D@�
�e��l�I^�r�x��KĦ�v�q��Js���VvX���P��M
��I
P	(��\�t/��x�|Xͥ�2Jg�� �e,W�N'S�(.�d���������*j���ɲ
l*����rnO<��[��J{��3�n�JQ����TjhԨQ�
�:#��/6
ȅL{� ��<5����g�Ν��9�2xN�~�ІJ%Ta
5P:u�`�������^�z9_�m�|�
�ҏ�߸���9V�����ȑ#ɠ�r�J���iӦ��y��
�j�刋�*" " �� �e���Ϸ�cY0�ɄA=��={"��n4h�����c�Q�b
����)�W�jU�9;qaR��
�����5�1���y���q�
���9p� ���W�Nm�w�}��k�ٶm[�
De5�,^��}gc����H�|�)�J��:@5�|
`�sWF��k���K�.Vg��S�&� 
E@D@D��x�i3_��;o�:�ﯽ������˃ᰒ#�_P��輭Z�j���}�nٲ�re�q��/e̬
��m۶m׮
;N�0,fΜɑ3f�o�2򩓇���_�>���+2w5﫮���y�\�V�Z�9ꨣ�w6nݺ��
[�|�)�J���Y���9�1�X(�ǽ�ĉ�rVۅ
:_f�(�������UWv�������^z���&a��K��~eg�눆�D����w
�{G�
�
4�w1�۷o�2|���
+l�]�v�o��Dɸ�	�0�ꤶ5j�~޼yI��טX�ɓ'�8RT�&ߏCZ���$@�M͚5W�Zet`��#��u�{v�MD@D@D �x��c0�ҺI�&���ܹs�;w��K�&q���M�֯_ߦM���;oÆ
�{�[$n��
6l�rb'^�ѣG�h��]�z���ܻwoԠ������Kj����sNŊ�ϟo�� ?�Catӹ�@�v�ڨ�c��
;��v�#D��?T�" " "P	����_�$ib�fͲ�<Z�je�����1������%� [Ӂ�d�6͙3����I�&��y�ؾg�y&������S�7X)x�M7�&^�;LL���q-;[$+?�Catӹ�O����|=�������Ia1��|�[�H�<�O|'�s�����Z
,�����n�^���)/��1�O�o,ns�,_y啃>��s��a��l��կ��:�ơ��O���O�7��
3fL����S$�c����6I��P�tn�ؾ};:� u6�
�Cs���W���+��Ֆ" " " l-������S���k����{�uב��^�ovp�b�?�رc���w��m�"? y\%��}1���1
+y!O:���>��g�/f�
�N��I��P�
�N/Yd��8&�Q�aÆ�|�S%�2ȦBn���S������@�$�3�Y��Sп
���*{���o�����wKZY�I��y���8���V�\��
/$�1;��
��$X!f��ω��l��n#N��Z�dɣ�>��:8�xS�]�c�{�g�����s\t�w�|N�
5�aӧO�ׯyW����"�`\ڲ��sk�J������@�!��;Ҙ��o1X0W��ҏ�_f���f#��d��J�޽����.#�E{�R`:X�1;�Ջ���ڐ�
��l��C�>��գb��7�L8���G����ʌk�~[�l�~�
�&�HV~(�q����23w��@��0�|�&L���+� �$�
�^��x5(K<�߬#�h��%����}��3�4x���F���k,"P�liƢ�H�E@D@D@,b �ht4�s�;����`���9���}�>8X�z���E��5��!>��g1iq���ޭ�5k�W��v�k2Gp,�*���������@� �,8��##^�/7-F���(lZh׎��Q�G�����������p���l-�����nw*۴Ю
W"M"�rN 7^y�|[H/���x兓�*�h4|�b&���b��D�
H[�����s{���%���n٬y<^ٺ�c�H� 3
AD@D@D@D@�A��+�JNN�(
�>� �"�
���#�=lڴ��Fݟ�i;;b���(���ߴ��v�i�PE@D 5	y0"�1_���'��u��Qi�}F�֭[)�@]_�J
�5jР�]Bg�\|�Ŧ�����p�GsJ�>}v��iژS\?�~�ОJ%�Kf
5P:u�`�������W�^Η��O�K�y���o\�=Ga9$r���AO=]���b�0�JY������^zi�)]���4/�~��_~��U�T	�y��Ҍj/�1O
W�~��K��Z��]\/$�Ԯ����$�c��E[��X��=���e2[Ϟ=i�Iz�
7
4�ԑ~�Ǩ�۵kW#g����Z�*���1����
�P��Y����<���ǻ�;BY$�s���	W�^�����5�\�m۶`9��v����;S�U�G�,�gۈ���8�0b?n����;5�$�
����o��"�S����.�~+V�x��G��dm.�(D�2���"��Bw����o�\�(
+�?�
%PD@�A 709�V�
H&Z�}�2��Z�jF��}�R
�re�e��/e̬���m۶m׮
;���9s&Gf̘��}�ȧNހ��K�?7~�!C����}�UWQ /����=ꨣ\?ϭ[�v�a
�o���m#�J�㐎����ͳ� =ӥO����[oq�رcG����'z��PW�~����4i��eZ�C��^Wel�|Nٿ?�J�?���:w�q�F#�\p�3���O�i�{��'Ǟ���t���o����i����ܹs�X
+�s�MeM��soi�s�i}8�2��7��8���qy���'�<�K�ah·KɎ�΢����
x��r�/n��={� ��￧��
/�`�����'f��=���>r�H�
<��,s
D\�SO=��{���>v�z������Q��d&G
F:2��Ľ���(�ڣG[��c�b(��2|���
+l�]�v�ov�h�&�W��V�F
�ϛ7/����1y��
ʃ�m����%�B\܊�ߴ�4
+
7n
e�q+�y��~���~�3fL�ڵ]��(

8�g7�x��-�|
����H �[��1+B����͚5�@&�&sܯ_?9�kW���'���믿ަM��~ؾK�z
ڼ��;O>��ĉ��.]�x�U��ˏv���q���|O����=\Jv�v\������QS�L�������۠>������#���?�!��
^�
0Ox
wY�������g�y�(�ꫯR����^�3g��O?
<�=�	����#/�E@�*��
+�:}�k�4i����p����Ƶ�v�Z~�-8��ׯ_��y睷a�ܽ�-<a�Æ
�PN
I�6z�h\n*I�$���ۻwoԠ����/\��0�
������p(�n�纸�Я�ݐ^�ʼ�e˖}��g�^{m�H	
+�>�׿�5�:
�$>�������w� ��\��b��)ʜ�e���Mc���L��ܵp�G���y� �HK
W�����‰�C
�"�2�w��J��%�`�����gX�߸���8.�~����O�{>\Ja�v\Q�^d��1O�+���@���e˖Ln��>���~w��g��=�����f��LE3����>
V0�p<�E)���Ia��]b
����b0�	�8O����C4����Y��\g�/ �^5k�$"�iӦ�"�Cµ��g�:[��|�2k�7O}�Bǿ��G?��ab���֭?B����P�칞�R���
5jTZ+?BpRb
:�����
o֬����bp�۷�Ւw�u�����Ė+W�d�6n������Q8-i��o�
#9q\��'�T�^=��M�Q�;g��3(,�Щ�7��8G�^�O�ߏ��2)�׊�2p$3���Ɨ�q�}�v&q�]wa�r��w����qap��W��R{��aD�n�����	�j "  [...]
��U�reN߻woD�~�Jv*�]G<漬Ɏ7X����A��`�|�㼸��[��?t�ޝGƗ�ӯw{�7b���D�f^y��9�%��" "�n�l��|�Z$*$U��_}<�f3�/�ݲlW_�8��ί5�X�@/��B�Q����0K����$o��ω��l���E}��WK�,y��G1J��
�錅x_���\	\�����OV~(�q�!q��gFh��E�e0>�yp���V���?��OL�18%peY,��A�A�N�ó#O���"�����g��,�>}:�
+8�'
|
'L��Z.&�]�efTb�~r�G;q\~r��9(�+\t�E���\&t��g����׋�#0.N$i
,����gN��3`\��\��눶|���[V��#���0pX�`>����>#�'D��Џ�
��_��I@׬0a�2ӐIđm����+O}������b `����q�9�`ete!��f#��#��a%�0#!
+��
�R	�`Ɏu��Z�(i����
+��l��Y�>����©IJ��74^��`
#�E0�'*�@l`e��C9x�

��G�1��F��f�H
�� ��ْ;C
�C���Js��UG�
+R%�m�` ���ٗ�|Z�����LR0
�p��O=���E�*bE���ׯ�
����SN�x� �f�<���GR���zq}$�ʼn􎇞up�kD���o\��\����W"� ���
+2B�o@��,d>� �!�~�)�P
<l�aժU�<�zg�b"�CG�N��U�>�%�" "P�1
���w,g
uJ�eK�>���5s�����#

�`�SE��d�@Y%��)L
#�*�t������YR���[Y
WI]|��AHcb���J���+i" e��]��8�t��a�}?
�9x0��ݻ��� �T�����_
f?8d�п��"�^-�7oV A<.L��\�/��&	��gͦ�HQlE-�O��(:e��q�v����J�����@Bݾd���K�b�c�B�vl֎b�%��J�����4�Ón�y��Iy(E-�O���7ePO,��*��G�Lj&" �H 1
9�<*�n_�q��8�4ue�B�v\�8��[�Ŕv��ODE@�� ��<�,� ����/n8�Tsn���E�xe�P�������$�P�e2��VD@D@�C }��s

�W6i��L�rsg�rR)��3<I��!યdc0d(g�5�&" " " " �L �K6�r<3\n����3b)�b�B��I�g�fS�R�T��# G))<��4&��铜ǧ�vG�q	1
(I at Q雗�c���/��,Q�'�x��ks�f�
 ��5jԠA���)�
��j
����&�����b���.s��w�ȑ��Z�r����z&�ӹ���3�x�H������@�!3�ㆲ��-�3.�@����:a�m�	��n��
+V/\���������/hCi
[���_|�E.^��}�y
n��A��°��?�3�v�|���C�l��t�x.5��jF=ޥK�:�5r�x�
�����#t~��z��=
a�R������^ۥK���r&M�d��;^��hD" " "��r-�<C9n6Ƕ�<����GI���6<j���*�2����R����o�D0 ���Kʽ�o�s6���9ꨣط����K�iJ�Q���T
%�TƹF�u���I<
��bi�ڵc������N�0*K{=`��7Ta5(c�M�q�3
+�q�G�eg�_�,þg�
;|��e���#" " M��;9�T>�B�9n%�F_
r۶mTL���g��a+�ڵ
?n���aU�^����ãL4����t
+�1y)x�
+�F��0��ij��޽{g͚��(�NuJ9$��a͚5����C�O9�!�����@)%@��A�O�C�!���^�פI[c߾}_}�bɐ�	��5j
6
�J�*�;w�˖�O�;�6��S��s��Sx�My����;�lڴi���mڴ9��6l�`㒝r,X0~��Ю��
=Q
��ڵk3�
;v�q�����Z�b��f#����x�ሀ���@� `��������`X�Ga�y�u1��

?�e�4�ڒ��9�����m
s�YNeZ�j�lܭ[7\��#�]`�b�9ͺ�9s��w���iӦ�1f̘PU�
=W
���/��e�fcb۱�
/Wp4X�,Y�Q� ����bé_�>�b�eeeիW��ƻ�]y啃>��s��������?p��(է�ʘ�i��.p޼y�7o�G0�1�O�o,�s�,#��D9�N�Xo��������۷3
�ƝG�x��7��lΠ ��e��#" " ��@��l�Ņ%�
eݺuI���kN�����~��>���{w�mdj{�
+��C�S�N5BHB�q����رc���w����@Z���+�b:�, %
�11�fP
6dmhY��"" " �@�V��*{��
<z�h2W`7,Y���W�����N�^X�/f�>HzZ�	���<|�p�
؜�
_V������hQ� �
����A��¬Q�F���oJR�����~��*�C�j����������6�B���������@� `��YYy�0�����L��#F�Y�u��C���+���G�R�
S2�a%���l�]vA,
+
&�LRK���1��M�A�/�{��-ZXw��C�^pW�2q��f��&��-�D��H��K�8�sO�0����
+#�R3�L �u�)�\�t��%_�*%W�Rg�̛�d&�'
D�� g\iQUz�����@�!@,��X��ҹc��{��x0���
�w�v�
�S�rv��y�g~p��o���^�ݢy����H�
2
DD@D@D@D@�B����LY�L9�"-�	���];Q�d�r�@D@D@D@D��p挋�"���3�\���];Qk��
���������9��Z$j ;�\�"��D@D@D@D@�%w-�r	A�m�,��	����������@�@�V���dX�
�>���XԴ3�~�m*z̟?�}�[���y��?�]���=��VN�^��b�
r97jԨA�v��S�!�
a
��دf�D$@Q��#G�]�v�ʕ67�6mڔ�6έgϞ�#v�f" " " EM�@θ�[99��

{��M����;/�������mư0��ٳ�nݚ�����)�W�jեK�:�5r(A��
=z�*��o�j 
��u�N�(�s��v�����Y�fҤI�-���)" " "P�b��\�qtc���>���
r�%��}$��;:o�V���ߺuk�rhT�k۶m�v��q*c�f��Ԧ-%��o�(�e� ��1�yB�ŋO�8񪫮r��Y}Ϟ=�-��e���#" " ��@�xe��
n0���ݺu�ӧ��W_]�#��<yrNN��S�a(�o��V�v6ػw�Y���a����� z�f͚�V�2Cf����3|�TD@D@�$���p� ��ݻ�ر�U�VEĥI�&���ܹsm/<��X��	��ۦM�֯_ߦMBA6l�`�i`�,X�`������z��s�k׆ 
+Á
Lg�ي+��mDY\~��9O
_D@D@2�@�Z$�p���]tQ׮]������	n`[s�e���Ƶ�씸
l\L�#�8�uTs�̱�"��ӦM#�c̘1���z��@ ��/��������;.�" " " %N���q91x�_���o����Z>�����
{-�W�~}[s���.���͛�y�f{��|'�7�9C���A��Yw5s��P����������~�Z�
��v��匏߸q#=��
"�;^�aj�" " "P�b9.�'���#0"�c`<��8kW�^
0
�޵��XՄ�K
E��C�S�N5�^�hѢq��?�رc���w���_�JZ���KY+�X�	�㘘xáaÆ�%-�L4|(u0��s�$sĹ�{�W@|��8p���f���:|B|6l�4�=zt�s�� ��/+��{�=�#>f�?/��B�<���-�A��B+۵l����v��l�)l�����-��� �aӧO�ׯɼ�:�,�y���+�ֻ:(
+
I!":��6���{����/1X�FE�S��b4���+�`	��?
:g������c��r�)� ��A
�h��f�0rۨ[��+^٥���o��jP�	

:��q$�0a�=<��g>�����d8�<38�
��ɩ�\�t�K�gT�N��y��̝0"�#�D ��3.��2" " "P
�7�t��a�}?
�9x0��ݻ��� �T����h���y�7��%�y�͚7��+'���<��E@D@D@D@�
��+��}� �5���M�������Yu'" " " " ��3�rI���];���t!E@D@D@D@D ����Ļm��4�ɮ�KIS�>ٵ��0�$" " " " �"@�õ
3�
��QK�J�," " " " J��]��ʱJ%�����"/�ۙï�L��>��
Y��Kԙ�
�5j�]�g�
w�q�էO��;w�ۛ�fϞ}��Av䧞z�#�N�~�m*�̟?ߏ�������OX9�z�2'�f��`��4��5&��<�����⺾��Pg�ȑk׮]�r%�ŭ
M�6%��s�ٳ'��
/��c(�
N�\c�]����˗W�T�jժK�.u�~���1"����>��;�oy��&�-��r�7.\���g����Ku�w�{��M)�����a�f
k�oݺ5q>��LP#�G�
�ɯ��ՠ�0` 5�;u��Խ��k�t��
���
�y�[~�K/i." " ���1��Ne^z�W.��L��m۶k׎
'�#�<�裏��
��-�G���>�(��UW]�+�����v��ھ��
r�%��^	ӯ٪U�f۷n�ڳ�Z������6��q?w��o��jPJ	P��g��[�x�ĉ��α8˶�ٳǾ�w��r��" " "P:	��_���H0�S����1�)g�4���p9�am���۶m[�j��=A���ݺu#��ꫯ.̕��<yr��:X��{�Κ5
�!�Qaz׹e� �u5k�dꚡ�C$R��F$" " e�@|_�U|�����Cٴi����۴iChĆ
l\�e�e˖ѣG�h��ؚ����+�:��c=�D���w��ѪU��שI�&���ܹs�Y<��X��+�9@+g���Ǐ�ݯ��ՠ��]�6�39���`:;�V�X�.o#����x)� �E@D@D���-��5�
�ʱ#qGs|u_aL�X@6"&�G
���9s�XX�vd������;���~�/�袮]����9Q�n`[��ea�Ƶ��rδi��3fLh�����e���_�rU�9g���2	A���%�g%�MbW
�<+�P�2#�*e܉�ErΐelG^�^����_?�
&������-�]N��チ���OFa]�~}[�4�S���͛�y�f{0@�0(�����9sfh�����������Q�V�ZFy�w���k߸q#[��
��;^!Hg(�(G��
.n���/�p�$uڢE�ƍg��cǎ���޽{���툉���v�׾nݺ�f�
w6��<�s�;uu�r:t�0u�T#$X�Q�*Uh���0����H��p� [...]
+�5y�=fc?.�p��߿?aͯ��
+�ǒ%KL~e�v�WpL~�_Ng�k��SX�G~:�2X#�[$�#5�3���H
��N�2<pn��O�ޯ_?����B
n&p
��&" " e��#"9�"�O�P!+��[��g�Al6*/b��p衇���a
_�{8���_<b�2+c���Ӊ;l�0�>�����:��
<���O9�s0X#��
�ޮxe#-��h�ժ�:t(	�H�=a��Wx&%,eC��" " "Pn��139��k.g
sj�eK���-�Cǟq��A�>�������@E�P�W��u������@��A�;���)�;vعgߏs
�1��;`�9��:�+gg/��`�Ї�
�s�Q�`�!S{6kڬyB�ं0�����$��YٚȎׅ�WB���];T<)!�ԭ�������@i#w��}v���y�m�F��M��ڱ�ӥk8�VD@D@D@D�D+97F\�\����_�(�r�6}�k'e�:QD@D@D@D��01
u���WD@D@D@D@�r
��忰y���9j������������#�
��Tle[�$8�|@z,R p?���8B�>��
w�q�5�ӧ�Ν;Ms�n�č|����v�x�^����%����`��
�%}N9hHm
+�8ϥ��S�~����P
G��;#G�\�v�ʕ+�8n�5mڔ�6έgϞ��w�pZ�l�B�
YΕ�o+0�#�ߺu�_|ACJx8+W������?��G}t�
wI~��/����ŋُ ����lư0��ٳ�:Q����+U�T�jեK�:�5r(AM�
=z�v��o�j 
��u�N�(�s��v�����Y�fҤI�-���)" " "Plrb=e�Y9������%�V�`�̙H�1c�v$G
y��GM=<�[��#�jբ�QG
�~�a9f�V��=�u�֞��0�۶mۮ];v��
��QΚZܞ% �'�Eg�)�({�q�3J�qO8q�ī���	�Y�|Ϟ=�-�����." " %B ^��a.�<V��6�W\���k�.���۷O
.^�!Bm�dA`�N�<9'���?�
CM<�j�ݻw֬Y��0h��Q�E 
+"�j֬�j�*Ә
"����6" " " E��`�`�r2j���F�Æ
�<�R����-[��
=�E�)ۦM�4��E�Νk����bŊ���w��iӦ��׷i����۰a��K����`����LJѯ��ՠ��]�6v��a8�����+V�X��dq�
/�<5|(f�q&#�
�ͯl
�$��e�.��<�ؚg�y����͚��6����H�V��B�u�k�y��
��4!r��Rs�̱�"��ӦM#�c̘1���z��@ ��/�����O�m�w\0E@D@D@��@�b����1[9z܅K�+��r����{��8�&���ի_��N8!�֯_��!��SN׮]�͛�y�f{��|'�7�9C���A����6��[@�a���rM`������q�F��3i�ƍ<�0�3���x���������@	�u*;{��2��
+�EҮnݺ��w�����Dvfƈ$+�F�#
:t�:u�9��o��7n��C�
;6;;{���.���2����(��e� )�0���7�lذ!kI��56(��������9�>`�I
��
p�39@���
+���{Ϝ�����
/�����~h�w�
Z�5�e˖���5k�`͆͘8�[v��FVX܆M�>�_�~$�&
��_y��
+��" " " �F��
+v�W���UR��
����u˻X��G�3�,�
�S�EN9�s��
^Z�6;�)��0�
�6�╉Ű6��
�o�զ�:t(	�H�=a��{x&7,�p4p�|�0���HV�S/[����5�y��k�?���7>�ey�B�@�	�3.�2%PD@D@D � 1�~
��ҹc��{��x0���
�w�v�
�S�rv��y
�<:�'��
+��xҍM�l����(X�O�ED@D@D@D@�=c+�()�Pe�6}�k�
+&�����������@��a���*�,f��T��];��Š���Dy1qC9w+
K��Cl�d׎����������;gq~ݾ|g�s�_��E@D@D@D@D P���+ڢ(�e�P����������D$`+���+�;���ٳ��n#�q�F�
{�1���> m�q�
��>}��ܹ�yܼ�����t�}�^���������_l�s��
�8��|?U�>�5r�(��
4�K
�rЄ�p�y�r�N
���xmԬ���ȑ#׮]�r�J����4mڔ�6έgϞ�K/i." " e�@B
F�E}Æ
���믿>~���^z�Y������X|���?��;������y�1�6{��[�&b��_�R�Qj�Y1�O�߅I���˗W�T�jժK�.u�4r(3A��
=z���~COT��K`��Ը�ԩ�߯���.]�8��,s3i�$������A������@�!��
�q�n�����Z���~:u��:�
y�G}4��l�<z1��V�Z5K�u�֞��08fΜI�3f�o�����$���i޶m�v�ڱ�i�ގ��' !x��[f���"@�t�c��P�o���'N�ꪫ�m���y2c��;.�" " " %N�`
F4�2��	�hذ�ў�իW'��,a
�6%���ɓs��Rp��+��w�څ�}��)��C��/�=�2=:
}+d�޽�f��w�aT�O
+d�qj֬�j�*�;D�d��RFD@D@D YN�/^�:���۷ӪV�Z�-;��.�x˖-�G�nѢ��)�4ibk�̝;����+Ο?��3��jԨA�fk�*U\�&��S<�~7mڴ~��6mڜw�y6l�q��r,X@�I('�~COT�RJ�v��h�c��?;���{�+V��ۈ���;^J9Hm(K
��yfr!S���3�ܿ�Y�g6ܱ��H�V���u�k9+�e�:��|�O��UI�_�.���C�4��̙�ԟ�ӦM#�d̘1�� ���sՠL����/���t�1�
/�4((]�_9�C9wh.�Ne,K�?�F��$*��'�p��Q�~}[s�tNL]�v�7o��͛]쮼�����{���~���'�/�<
�N�o,�s�,#��DW�m����~�N������y
w\D9��lܸ��fs
�
/��������Z�`�I�g+Ǐǒ+G�*��q��6���L�w�61&�3sE(1�8:t�0u�TW˺u�O�U�4Y�~
+��%�i�ƍg��cǎ���޽{��tBh�
:j5(c���8�����g���T���J s���[�VN§
k�
����-�k֬a�
��]��<�9�'���{����{�~�mEz��
�����A�����Q����C�V��l�sp�E1R�,Y�>M�>��0$�&
�a��KV7�." " "�
�<s�`2k4�Y�w�}7	�.��믿�ꫯv���TřD��
+Wl
*�$7�h���K�jX76;�M��0�
�E�v�╉7Ű6��@�o4�ժ�:t(	�H�=a���x&C,eC��" " "P�	d�;���e�����x�Xƅ'
>��A��:�|���E 9�&%w�Z������� 1�~2��ҹc��{��x0���
�w�v�
�S�rv��y
�
{��'��
+�
rH̫<�ƦM�6s����������ʅ
����������@�(
5l�f��P2���\�Z$����f6m�kǕ@�4M:��������� ��Z$�.JY�M���)A��ZD@D@D@D�
��N}Q���2p	4��"�o�W���QWIʈ��������,��k'G1�?���c�
w�q�5�ӧe��0�q�f�S�δ1/���
�����㫯��
�B�{b1Q�N4h`��Y9�|�֭ۊ+�����
#�
�ի�KO�2�_΢��'l!א���U��@��� �kF�
�v�ڕ+W�L�Hnڴ)m�[Ϟ=��E	($
c�W&�rl�.�����"|���?��;�Ü�a|{���_�x�y,�ș2eʎ
;n��&ۘ��t6cX�m���*U�Z�*%��i?cƌ&M�PSp��ա�?{��[�&�
�/R~����)�z�d>�p�שS'j�_{�z���4�&M���;��㕆" " "P�	x䌋h/y�G}4��lq;��ժU
pG
u�y
��iܸ��ߎٍ�ִ7��V�Z5+��zm۶m׮
;Nɴǹۿ�	�
=:����oݺ�g���~ѐtu��Ƶ��O�~CV�
'@�s�c�QP��Ej���Y:˞�ٳ���x��Wꉀ���@�#@
���ֹ�KC~e\��C�ڈ�4��x�����n�]��ܾ}{k����Vvvv��w���99.P���w��Y�f�S
�?e�tb� ��f͚�V�2z�C�P��,�D@D@D@	8-f�a
�X�
޲e
N�-Z�ڈDG�Z!��������m�6�a6۞w�Νknڴi���mڴ9��6l�`ポ��ˋV����|��@�bŊ���w�
���Y�`����C'�_��'�A��]�6Jd�d���� �~]�FĎ
���
���2O �9u�����<�����;���Q��jj��5�ن�o��&񝘧�}��}˶�V�Z��B�/&�G
�z�9s�|�<�i,ĵ�
�/rPcڴi��3&T��~C�U�RM���/� o�Sc��w�TVʋ����@� �h+G�*c�aA�����_?�Bqԯ_��
+�W���1�q*4褓Nz��'�[�=��^�
�nf!݉��v��e��2�ҡ~nO�FB׮]�͛�y�f�L@��A���۞9sft�q����O`���(i��ٸ�۵k����ƍyb6g������4�2L����W�F�Dƿ�F�~����uN~�i^�hѸq�z�ر�%�޽�՞�
bB
+��N�
�N�j�D�J�*�
��(�b:7�	�㘘u�dÆ
Y��
+K7�
�R����cǎu��!y���L`
b|�Dy^x�'�7v�7sж���F��s��[n	U/Q��V����{�Hh�x�Y�ElI˖-���5k�`-�͆V���d,n��O�ޯ_?��|ۯ��J�j+�D@D@D@�83<d��̊:�
���"#���� �
z�;��m6
ړ�vٲe/��2�4B/�|�)tt�)��#���M�Fݺu]��ġbЛ�V��7Tm5�dC�%a
ɶ'L��s	�䃙��tp�:���ؗϭ�I�r�_V֯�6p����u�`��D'@θ��RD@D@D -����}Д�
;�ܳ�ǃ9昿{�
��
�`�ꕳ��[0g�#�����_����ٴ�ۯ��*��AH����������B�1e�Z6�7�MD@D@D@D@\r
+�ɠx�_*�.#q��i�QE@D@D@D@J?��
�l��R�_"��9q+��O#(R��rY�+)?	({\e�d+��K�ej��2�
+5�jcN�d����?��fK|7�^�^D@D@D�E �
�EHr�̷��
+����:X6GM�/X� y|�i��]gd��?����ի��q�:��ӻu�b�
+�1��s$T| }r�
�K�\]���z��
#��㎣�>}��ܹ��
�*[�
=���+�q��O<a�Ϟ=��
. ���O=��9�7.?=���ٳ��n#4z>��cN����I(�u�%>wec8�����d&���l��7�r��|�������z���\x��w���m۶���q�֭�����3f4i�䷿���իM�?���$�,^��}�Y˗/�T�RժU�.]�ijz�F���?��G�q�
�
s���;v�馛����l��6ǩ�G��o�q�
�>���G�
W��~
�
F- at J��?���^rև��
z�� �	psH�H�_��)�D@D@D�,��6�׭[�tȐ!��=����*
+ԅBiݺ�g�#�<9������F�
m�
}�ѵj�b稣�b�)�*zm۶m׮
;����'��#u�
`�ґ9޸q��o�
3����
7�}2�裏b+C�0��9%`\zzr�k�cj)�G8��`�8�^ 5(<&�s�=��_�Kc֮]�������á%%*y�k��ѹsg�(������

x��+W2�F�
I��ED@D@D@ �J-�5jp�y�"ȳ�ɓ''F�X!�۷��������Lc�!�yVjzZQ����Y��
'���^#�B�Po��V���u�XL�d�$\���
��ٱ�x^�r�����@�xJ�_t�E�
qc%�s�1�\z�ݻw�/�Q�¯��J��\{�
:t�q5~g
4����	�O<��{�7T�������D!���>�v{��M8o�6m�f��s�9�������Cݲe��6u5޴i�9�=��6l؀{;����4�'w�-�ML��٧�z*���1�9n��s�r�D3{�Q��&Y=�o��Y��nv0�-�P��R�d	pσ���#��]�� !bo��#�8��u��8��'?f̘�]��
+'�f͚5Q��E&�s�2]3o���P�j " " "�@*�2r�OX�ha��v�›ec'���
�r���w�mZ�fM�
[ϙ3'XZ
+zۗET���w�՛5k֛o�I2��w�}g��-wҪU��F���
�sj�(�g�D��U�K��ԯ_�;.��
s$��=+D��H�\�2�,0ذ�	�
�(�K����~�I%g�E���ܸq>� �2���9w�ÝF��<;��Ktr�
�UJ'���BC��(Q��!b�"��V�a����78��ޝt�IO>���-wb�D�ի�_�]��E�K�v�Ne�
�܂9GWI-�"_�)��>++�K`����%��f��l�>1�*�ԵSc���q��a;~���� ������5�vt��� �r�ԩ�׃ b
.��8��΍w�ر�7�޽;�յz��&�D���l�MC�
��o���O��V

��;=TO�
�
�Čb��d��9".5K��ƍ�Py(aNd�
���/�1G���˻����
+QWw�=wh�Y[y߾}�$�޶�]��p�ٱ[�m����^D@D@���	�C3�
rY H�K5\�K�,!�ù瞋_��8K~�y�L`Q�.���ɧ�<��I
�#fΜi�<��X8���4�k�H�����s�!�bA��Pf?=
y�;v�X�N
��9菆f��;a�
�l���ͯ�9� ==ۃ��zć0^�b'N�إK�P΅
�N%���w��n���͛���)�Z��vX�͚5���I��4>&�X�ԅg/�W��
�h��>g���?���F��'?11�ܩ2��fy�Q,�뮻B�Uo�{8!F��9�d&ƀ�x~�	�������+c�M�4	#�$�."T���w)A.6*h8��j&�az���/a޲5H�ž9Hh�۠v�C;ݷ��À6۝w��g!g�r,�����菆f#
�~��c�9ʻ�8ۅw��
+�ӳ=�1�HG��믿�l	$�
�\�Q��(�u�Ɛ��m���SH��m�[o�Ŵ�]s�ă
\�-	����]�1�yû�<�}�����KH:پm�?�A|h�
,I�����24���I ���c�>�I�@��.����g��m�O@�D$�O7bK5H�����>hJ�
v�������s�߽��}p�N���ً�-�3쑇�x�\iY��pS�3�6K1F��'9" " " " "�q�b,ʣ�l�!�v�: 㦩�%�k+GX�W�j��s�ٵ�Lo��%LD@D@D@D�T(�~e�ٵS*/��(2��V.2�," " " "PZ	x�Yx��a5�J+�-" " " " ����|[9��e�(SU��q�!;�
蒄��͢P��޼$��a��3����CYf���e6�k8�Ӟ�t=z��b]]8;��TǦ�P
ͨ������������p�׼$�2�mР�]2蔃&$i�� [...]
�$�xs?��L��+g�޽�f�����>	,$�ej֬�j�*#�
"p
+)S��������,4�\&��w�ބ
�iӦ��
.�>�-[��
=�E��FlҤ��	2w�\+�
?��S	�0��m$�ø6lfk�*UR�Y~z� �bŊ���wJ޴i�����s�y�mذ��%;��=~��P}��
=Q
��@�ڵ鑐!�/;���{�+V�L�lD�X������ND@D@D �@��Z�(-ZD1�Z�1C����3�ܿ�Y�g6ܫ�&H�V����|�M�>1C���P�
p-
������ݺuõ�N���T"B��[s��q���ӦM#�d̘1�*�z�dB�.���X���g��RFD@D@�'�me`�]&�`ܸq>����<�	l1<l>,�իW����D9[���׷5AH#�<�SyРA'�tғO>py����+��r����{na������ڵ+)�7o���Y�wb|c��3d9
$ʙ�
H
��v��/V۷o�?�Ɲw��X��7��lΠ
��Ū�:�"���l�a�~����
$#�y��Kؾ�'���|��6E�ˑ��Er
�k�?���/gխ[�tѕ��<�С�ԩS���X�t�.���ǎ
����{�n����2b�vD\jV�H	�qL
�ѡaÆ��,A}Ե�����@�X��Z����LV��n��\f�=^�dɣ�>���.�0����֬YC`Ѻ�*:� $��ޱc�:u�<ΊB8V��N��P�\
������{�S�1�z��|��
��RH#��_�F�jٲ��)����'ف�}�g������#?
�^ȟ��+�Q_+" " "P<R���ի����o&����#~e���GX0�+��f���?
:
grY"%����`y�-�A|'�٨��Z�����mt�)��S���uc��ZF�
��!lo�+^�5.#-�O�Q��#0t�PƑ<{„	<g�L&Xt�K������@�	d
{Z�e˖��$VH�l�?|�}�7sӮ��@�%@θҫ�4�RJ�H?ͻ�ҹc��{��x0���
�w�v�
�S�rv��y
�
}���߉��mY�L���̦�R�+�R�R[D@D@D@D@��E-��(���,��[���d��ٵcc?��5(?��Y1s�_��l�g�N�%�(��5j(-�m�&r���m�g�Ni���SD@D@D@D ��b0�+U�D@D@D@D@D�T��'�7��+U�Pʊ�������ga]�I*��|@z,j��)�Gre�r�6�
�:uZ�`�m@�=���c�V_�v��hӦ
�r��z�r�c�'�k�S��*k=z��9��ީ��ٳ/���!;�SO=������6��8�EDŊF�5h���d�կy�9����Ό
9r�ڵ+W�$�ѡiӦ��y�駝/��X"�S�(l<����Z�������իS���w߽�k�m�f���߇ye����0�Ը��[.\H]@
+݅�ᔭ[�&������ܱc�M7�dNDA����x�b��4j��r�-�F�g�}6�#�_���X�>J�8+{/_��R�JU�V]�t�=ˀqv��=�U�L 0`� Kd�\{�]�t�ZQ��3���t�$�i ��W��n�:��C�
��J�髮��Bt��G
yt�V�Z��4|�p�h��7���z��g[[����n�ڳL�_{s�q�Ʒ�~;U�q�"�#�j�b稣�b�*����̈Ї�Ԝ:�0�fΜI�3f�o�c:�m��9;������{h_j�	��q�3J�q�5q�D&�U��,��LPX:������$�%j6,c=��ʩx�kԨA���+$w<�X�NJ��'O���u�%���^#(Cǯ;��V���vR�P�׮]���c!!
�2Gl��Īq��>�f͚L�!;D�XmyhЭ[7��g��RLD@D@D 1wr:�ʄ���ݻO�>D���G��x�&Ml���s�\�����w�ի���������gN�s�9�T�Xq���.�~�� [...]
��CeZ���C�R��'P�vm:%��t����#� %�{�+�
E@D@D@� P���V�{�Rw}��h�"B&��<z�h�٬Y�l��V�Z�jl<p�,������8@~;\�.�~�9��oW�y��w߅�B\˓&M�=��
l_L("�Y�5gΜP�V�Q�F�6V�L&��d�f���MD@D@�3�X�E,�����P�
W����.1nܸ|p̘1�������
��
s
�~��7��S��q0G�ӵkW"@�
9˯_��T
4h�I'���O�c��2�ϡ+������kO�n�E{'�7�9C���Z�]
�����C`���td��ٸ#�������_�կ~�H��
�ED@D@�B�U�/�G#��M�8�={�`���R��V��1��N9��1S�60u�Ԉ
�
�5I9�I�����E�V+�^̉���]��8ݹ�0���c�fgg�޽;��j��H
�qL

�dÆ
?����De���\1�<
+�&" " 圀cm_���n_��
j/�ろH\"n׬YC����$��+����d�rG�R�Nh�Q<�f
5���7bĈ�����&I�],�6�ݜ�8�ߎ
;�&y
g���7ݲe��?M�5�|�WЇ��W��aX��+Wf� ɧ���
#�[�r>�3v��N�>��˝�Yg�u�u�1a\���Ռ
���F�`�������1ʡ�r�
+�e]��㲤����8A8�o��f‘���?�Wv�+���*
f#2!.��C=��c�q��H!��iN	����O�)<�_<�51A7�mN'1
�V�E��ɬ�4\�)8�E��Y73;-Z�H�]]��e�СCI�B~�	&�|#1�!IQ�TR�F�������@Y"�W0iUֱ�5^�l��c� �P����7p��/KC�XD��	�3����|���1�>hJ�
v�������s�߽��}p�N���ً�-����w>�3�s��hִYs�3��
�(�e]*(c�
+����x�<���Fl�-�v��(.
+�Oi׿P���" " " "P��
��l�p�r���[e1�nٵc#z3�i�?��J=(fq
�@1╛�<a�.k(��a���╋��;��H6^�ᇆ<���Yr��S�ԴY^�r�o9nE+V9}�H�D@D@D@D@J	u�s��_�^�E�p/�+%Ó�" " " " "P�Q��-̍\v�틻�s#1�].
f�+" " " "P:	�-�+h+�c/�mQ_�$'�E@D@D@D@�4c(��
���G/;
e�Q�9hp" " " " "�A �\N���g���>��rL am_��ʊ�(�sCC�rL �h_������/n/˭\�熆." " " �@�j_�i�e�a8le�_�빡�����������ɱ�䬘W9�J����W[�D@D@D@D@D�|��x����y�s�b�ъ��������@.�<���Zη��1;��x [...]
+H4�
~�xӘGY^e���G ��$X��U�(�`,cc
�P.SB#�'�J��+
����������g��ʤS>?��G�<���E@D@D@D@�+��xeS�:����e(��Y�q���������0Ne��/n+���
�e�E2�C�����������@9"�4�-���sb�J[��頡���������ȳ����&jY��0nz_D@D@D@D����ek
;�l,C����������S�P���F
+���\��\N熆-" " " " ���}	�r��*�i����������@�V�4����&���ED@D@D@D@D��_�����y!" " " "P	�`eg��
k��q2����АE@D@D@D@
���
����+njh������������O&��#�E��>
��9�v��\>�F-" " " " �<s����
�<Dz�eM��N�@�r�P��\���/" " " �@�J#1[�8o��������E@D@D@D@\*云c!ʹ��
˚%" " " " " ����O�e�
��V��#���gY�CD@D@D@D@\u�DD@D@D@D@D ���n�9.Dzf�����������"
'�<����i^���������@A��ʄ��!" " " "P�	P�$��$+�\O
^D@D@D@D��@n�>�ʚ
" " " " "�K /�r��x�k����(�����}&\��# �rN�`���c0d.��ዀ�����@y'��
àx��>4~?��57D@D@D@D@D��@ֱ�5^�tٸ����/�Y�������ӟ
+����������:�����ҹc��{��x0���
�w�v�
�S�rv��y
�
~����,w�993n;��Yg�����̥��4�OwQ�Vv�1����L&дiS�8�T�b�L<���G׭{��~��������-������@�V�Z5����z}C��
+��~��u}��o�z����3����[�/�s[�
+�+ҹ��׏7�_|��g�}�iX�n�5k�t��ռ�P��ʕ+W�^}衇�#F��o�m^b�О#H0��甧�z�f͚�S�?�VN�>�u�	'����֭[�~�믿~��st�����O?�|il)?�.9�;׸�{��^�Dn��9詧�c�)��s�a��
9r�ڵ\�;�3~"�(���Fm�̏?���3���
+�O1虔zG
y�!C�
ڬY3F�Թ��[����W_1�����.����fi�3"�bh:ޤt�'.n��7)%�XD@��@���_9n(�v;�s�e2۳�>�qL��{n����ż�6��O^~�es
+?����߻w�Yg��
&�I'�đ_��׻v�r��g��c�ƍ�
J!Q��+N�:��ᄏ���?��)S�ԩS'X���mٲ�ˀ�С�:O�o���m#�J��:��
���ͳ� =#v�l��g�qF�N�n���k���K�.i[�B
8�y��b�;��k�5k�����"]1s���Ȏ
;\����fŬgQ_���&�@�<qqKo�I)��" "P"�u��/ϣ
���b�e�ͷ�~�/�������
1b�QG
u�UW�v�iFw�}�m�)���s�ܹ�8�����+���o~��]�.]:lذ
.� �B�>����
8w5���oX�r�o�-[\�

��� ����6��4?����pH���o��~�U�\���Ι�ג[&��O<�駟.^�x�ĉ��o����~�7h��_Xg�iÍ�}��#�<�]J
+r ֪U��<:]�`�6�%�Z׻3*���3�ٳg3��{�=��<���F
�Ս�J�*1�Æ
���j����q��r�v����_y��&7�f�f34�������
*��~�3
,`��	���i���;z$�o�|OnF����wp�%ٮ];��Jvv�ƍ�,Y�C�`>4���������=v�X�s�I��G
q�����<�ӟ��p\��՗�|8������?���1;
�z���{��p3f
��n�����,��E�x���)~�$�s�)*�_�����Y" "P�L
F�2����ɩ��Z�'�C=�G�fܸq<|��w1�1)\��̙3�����l
׆+�5��ؽ{7���_E?%�%�
ݺusڈ����%�B\���oÆ
�i��>Ta�<�j�*Ӓ�
����Ν;_}��8�/���^�z�,����
{��]t���~�u��6����c}ۀ�N$�|L(4+��k����KO<��{�״�޽��o��f�����>�hs�o��`
s�1�j��-���R��/�z�5����cnb. JK����1�9ÿ��/
9 a��
@J۷o����Ymڴa��1nKBg�g�d�侽^�z�\rI�޽�Aе�|����f��s�3�v��K�9�0.

�pݧO��Ο��g�oR�
���7�y��p	���ﺧv5u����\�1�rn�>��rṊ��bŊ8���ta
+��<�S�1���I8�����?>~/ܽ�-<m�<��PN
	�c����

F�����ѣQ�~��֭["� �9�w�yVH
+�8F��s]�R����w15�pRr�}&�fM�=��3
9�)8�-[�����) '�
M�d��o������c}��g��ň�����Ma�WFs�<0��|�L!�
-���'76?�0Nt��:���"���ņ%��k�_����E 7��<�!_�Γ�(���@�K`���]G
�ߴi�YH�G;ʃ�D����/�-������C����c��|/M�6mѢEFT���}�]�<iíS�Q3�蟋 }��
�~.������`�����$��4yu��6�P��uȡ��
���G�_t��h�z���?�,桳3ޗ  l��;w���b\��q�Z�I�_�Ac��(�v0x�ԇ<U���?�q�����ɓ1��-��̡0��s=��Я�y뭷:���;m�nҢs!(�;�k�fyv�4
5�
�vE��˗�f8�	Pa��H�B�x���!snQ҆
�(��5G��;����3:v�H_���{��7#��l�B�)����_s��`1�ň��C̍�%7j��}�Wm„	
܊JA%�S�d��E�=w2�}��s֣�>�爛X�C���q�G0��Tv�g(E�\�.n�r�M�����," )�<�y�1�٫���=�8�p	�mϞ=�V�c��/�ٴMy�=��L|!��\!˸����,q*��F3���'#
4t
~���#|�G�
8�x�*'���Dt��eR�9F7{�'���<�ѐ�f��
+l�ũ̝�rr�o�R3ycYY��
*�
��SN���pq��3qs�rR��,xJVf���~yr��Y&'W��3��ۢȌ�&q�Q�r��jP"��r)�w�}���Oɚ]
^��]7
4Nm"���7�� ��?��S��e>�W�x�g���&uݓ�ij/" EM 7g\ܩ
3��O94��W^��_����,�"�Y���]�UcC�&�U�V<��cغu+�.�[
ٙ��cfEO�S�{��b�� ��YOMB�r(� �����o�}<O���(F�3+��1���a.�Fm�m/�EM�SO=��A���$B�s��y�v������{{�&�9�-�������#���Y#����9Y���I���:�<�!p����o߾�f�	���9{n��+��&�4b����ߪU��z�;
}�:��N?�t;������aԨQ/��¤I�p��B���J�\�q�':�Ж�������
����+�\oDC
9��q*{z+�r�����w�2)\>8���~�pw�:g�
�o����0K��y�3�
}Nԇds�����c�mѢ�]w�ŏq���X��x_���\\��۷7�����9.:�;
q���Q�i}m�Y�D�
����5s&��N
"�m�!1�
~zN�ˈ��L2 at D;V2k��>횲���.��;s�y��={��m����1q���p�ȝ!�Bb[�r�k�?��LE�����e����r�Ap*K�/6C�����P�[��+�
j�֯g_Iq33��j��x,~s/d$'��_/�_=k��0�Un�=�"�`���'?��4��'�'��n�퍶M�4!�e0g���Y�a��x��F�Y�<.��?~
�Iv�pK��o�uOV%���!�||��W�G_X+��|
�&6�������ĨK�!|�J�z
�6f��zQ���
��?f�47��!x c��`�S?����}C�
�0�X|�~�
��&+?������x�i�oD9)4�~��NfA�<776.wJ��ir��
��b�
�����w�r:BHf�¤&�stg
ps�#��L��)���Xx�l�F���.�Y~��&YR�Y����emo��]��s���U N��n -L�D
+�z�,7�[�Zp���@ش�v%��=}��!� ��X���s����3ͺĉi�oy
OVO�����
^a�E
c�9�L�?�#x��gI �����
��s�~�3ُv ���
��ɪ��" "P�r���No�l�җ>ى��1��=������q�m�]1����/��XۤM(���:�۰`ȿ�O��]zU��������()��WD�� F���)�;vعgߏsXHe���w��s��u�W��^4o�
r�>��g��G�y�ֳ��uV�Z>k(�W�fTi+�E s	�D�P
"�͛��Z�~͈�a�1�+0��-q�N*���D@D@�	�s(�ny	��6���
B��3#\^���i�];6kG�*��Wi�?��F�e!����,>+�����G�
+�$E&�`�Ң��H;���OoBl�K���u�5}HN����4蝿��
�y�b�Y�9��ҮQ0�L�B�01�oL
F���ʵ�_�d'
e�����'��;����ڈ��������@H9^�i+W0���
�a�3p�RID@D@D@D@��@,^�8f(��f��lj/���߿xYy�F�a�O�eo0�L�\�%
)Y���O��P�" " " E�XŹk��N嘹�4��UJ-�F���h�Ν2�ךd�)o�2���j��F���o���X�O�1g�b0���O
+��)" " " "�
	n�
+�1��I�
Yv��*�ܡ��f)��
=
+-��}��م��� j�9ˆ�.���du�g�¢�ٻ�Lӧ�8�_��%��W�K���ajJS���|�*�#1��E�u�ЁԦ"4��
x��Д&/)��l{�
�jՊb]���5�x��xR�<�5����3�ą9w�\+��]v/O:�$Aa�
+��s�I)Ic�~)�u�M7�|��T��_
��OO���p�

��sϥ$�UϷ�+*�O�qy�i���)_|�=�X����� ��:&�_�E@D@D@D 
+k���o�ͽ�T�jU
+�
<�:������=�x�
��	��)S����S��Ǧ)�|�W�9Ȼ��]�v��(cp���6dģ� �u�2
t4�e���\�MVO�~�CM]�q�߿��/����3u��y�'�|�YùK�.�k�d?}�z���W_�0�K/�D�eS�:���>�=�c���^D@D@D@"�7�Ƀ�۶l�2z�h\�*�/����?�&��k��/2���q���Tܻw�3g�۶m�����MK\ԗ_~y��0u
+��/�z��3����Z�v�]����N
u�Q�Ȅ`9�K�x�R�4��w׮]8���^��͛7�0��/�
 �O�ݻwc%��>���}���)�S������i�����O��>��=�c
+�@��������@0�i\���,��oV�5ݤI*x�Ne�'�x�%�Y�f���}��u�֍�l7<R7��yIK�
����9��xR�0�_�ԫW��ժU�Xg�����MJɀ�7n�[��iڰc�����_~�1���tih����MRH�,?�uL�%MD@D@D�<(`+��丱��f͚���c���D2�삅��u�g�xI��}�݅
�����1c��=�؇
z�O��9��x
+�ij�؀
v�O�Q)q�)���S�t�4-]�,�QP'%?�똔p5K n
�Zĉ~e7(0��8�P��d�T���ر�5q0��ָ뮻F��m��~�C��
����c�I�����D�ӴL��
\�f�i��9�'�OO��u묜(�%��wV��V��>��	c�O��(cQ(��d�A淮/R��~8Q��ݲ��ܬQ{��G����3�`Emذ� fkKa`y
��_^��~�43o75DL����$�*���>����g�!|�/_������7b��$��E]4t�P��e˖=��Vk+ٸ�����۷���:X�aÆ�?91xz at tx�|O}��,y��0��u��첕#��
쁅}\p
��9��Çqa�.����S�Nm۶%,՚q~�Æ�~߯� 9��c
y-XQG�5�29ɪ��/��,���K~��ߓ���/�b��d8�YDq��]w�B�9�9ҲeK��[����
�'�ꫯf���+X��>�rH�ڋ������@4�Vqֱ�5^�t�_?��i&8��Ϫ�?h�;

MPq��s�A�Z`gw�>�e�J�I���8Q�/����ҹc��{��x0���
�w�v�
� [...]
�^�<}����F�e2~F�	�H��
�l�s}�-��A�R�re�d�nݺ��cp/��5�dNʶb�ҴiS�rfNHL1_݉������1N���V.�e�h8" " " " %E��μ.}~��~E@D@D@D@���g+�u����Q�Vǎ
M{�(Gi��m&M�D�5!3
+�z�I�-�	��y��W$�zE�)+:���f" " 
�˱0��~��lݱ�5jD�ߝ;wf���РAQ��<y�/���i�i?`�~������nʔ|��΁���H�*U���<�Լ-KW9�>�id���-��M#:��"$��
�W�*������裏��"T.�TРL]�3����ef������?^~��?��O�W�T�bŊ�#�9��J�D��������J-E@D�	���X�dg�uր��fu5��YS%����۷�<��8��_P:nϞ=��+��ҪU����hт����IAٿ��!CT E�Ν)
���1#��	/��g"7�[۷o�馛N>��3�86�
�紐�
Crڴi菫i�ܹN}.��R^���?wꃧܼt�`�ڵ��oD�s�=w�ر�]#߄�$z������-��Jż��^)�J׼����s
0o�<�_�{<��O;�?��O�a7�� ߓ��� ���
7����ŋC���>��=�K_x�s:;|~��w��}~����������@��}n+۾�V�������Nm(�L� ><L4�S{�yʔ)������?��æ��͛��뇹ɻcƌ�]�v��d�����o#y����t��Ӟ���$�6�������߿��/����	��t���_�M�6Z�>T?��:5�~�믿~뭷F�
�!	��:�����<oS�^.�隷~��}�Q�s��7���6:!^��׿f͚E������P�.>~�����;�n���;�<��'N
�՞��p��y�

mڴ�
^V�^
i~�_����������@���_��?x������߅7����!@��c���>�'6(�f3�Ξ=�
���[k�
�3g^X��駟�xÆ
�q�qW3�K�V�8
S
�����J<%T�޽{m~��ض�"
����৏�
�
U����p���sC������ݻw���4�0ab9�9|��u
u�UZ���r]_�
��l���O�ϵ߼
�
`���5�y��1��G q\��CAY�~�cX��nو����ȸ��3�k|���ub��,��{���@D@D�E������o_��Մ��}����������7�����g���uC����k�~�
Z���N�s�)y�V�gg�cN	�+SM��
+��+x�'\f{�f��
�����֭��z��Iȁ	W�%-	o�c���/�̜�w<��Lpt�"FRgEoLD��<
6��c��I��'X5MHE��
'�z��_~	��O?�
9��S�
�x
�
,�?o
s���Mv����F��y��h�o�\�r%��7>�S���z�q�G �|� ���Á� ���{0�`}��.*��W�g媩����@�px�sw�me�����X�z5�o]���ȫ������T~>��Ci��3f<���xh
z�!B�Y~�KS����]Qu�"9�uL�VE-J�6��=?�t�7������U
W_}5��D��0�@�~��;�
,?Q��
+p��CL�l���bN��4��$�o����<�D>�#B" �R�J,�15�]��1�Y(��eĈ���/�w<�;��������P!���6� ׬Yc�b�
��O�r�
�������?��3�]b|��l��
����gH�̟�~�+5����~�$;�m�~�z
@���2�S&�+��i3s�RZ�n���_� }�O�z����w��#5^�^��񆞢" " EJ �V��=kY���{w�^�(��{��G���3�<��F|�̙3�U6?	؝�ǣwJK�����O�.�N�>��IIp6&4��vl�|p�p�������YA����&@��>��	��q6nKhC� ���eC^�m�+Vgi$�[N����T� �L�u
=�46(�y�w�RcX�y�O��!��hν.����{���B�<�W~"m�Q^t�EC��\^�lٳ�>|E��I��TMb#�ܮ	����^�cj�Ag������@���.���x������3ɒ�Ną�D.��:u�Զm[�(�Ϗ��d��ߋ/��W�^&ISݺu��`��,��{�a�>�$�2�	�&q�%�\�����
y����O�r�z!|�
ehвeK�MK~�9��ě�+�#x�;�0n`����
�I���u�rnilSR���z�0-��O�d�CR�Ɋ��SO��o��$�b�<ǕF��������O:��뮻.�x��
�EHI�����Q�V�Z�4��/oy�7T5H�/̿�-�<˖.��6s��:��:>���O[�i�Ϙ5�d��Ύ(8�S"J��f�������g���G��I�x�BO)Rz�?E�W�E@D@��@�AS:w�sϾ�c��ݻ��� �T����hނ9
��kc�pN,��k��ݬ�Y��t9��z�d9�W�R��EiY���L�c"�
9G~TY�k�\����?ei�i," " � �oW(-Ʊ
mÆ
I�A���}�FA�sO�����(�Ku�m�������w�e����%�=�m��*�y��S����"" "�2gN����ք�[�}��f\��1)['���������)�`��zk�1���\~��F*" " " "P"
+�+�\.�k�NE@D@D@D@2����s���7�I���F�R��
!
�'bR��~
Ϛ4iI�Ht�Yi�l�z&v�=�yRʧQa�J#��y,<�y�Fm�e�f���Q~����P�TȌȳT�EJ���@1p�W�7�͞�u�jlԨI�]%��A?�.(;2hР(
+L�<��_��Ҵ��
%�ȶFّ?�0��ioIvjHJ���P��y[�I���ԻqΖ4�S��='y�/�Q���<KDIu*" ��@~
F�>�p+c��K��>��;�ȐQ����ZQ��� [���
�èow����'?��H��ޒ2"(���iס�
+,o���Ջ�R��K]�t-�%�]����^q[����6��J�!<묳(�F�6;T� !+խ�Yݾ}{�"��<����%����c�S]�U�V���oѢA�Ǔe��o8��d�ܹɞk�3�K/���?���M�yk���7�t��'�|�g��f��
��3�[�(C
3㥸 ����<�2vb���@f^1�Z�nM=�#8�=\A*MF�����Sgl��[�$�aB�
?}<;mڴ)���oQ㓌�
IA������0���GO��x��']�رc�u��\�~�M���}�=��}˗*uRO<���N;�O���
F?�=y��7�2�]�ሀ�����}�Z$��V������X!�Q
��|x�Tp�Z�X�S�L��׿���~شܼy3�k1
xw̘1T�
>��e#�
e8ڴic;MA��yX�x1�6������_*񺄻8t�� 9����ԩS_z�9s�`f�0�rrJ&��;3y��[oQ8�y��Iy޺:JV
+�x�	���9.leS��nT�1�r
+�=?_��_�bI�Ϲ����k���ѣ��1�s�����{[��8n-f͚E�
�	3?��xr��>~�Jv~�����n�W���-�̿!����
n藓�C�.!��}�
�����f3�Ξ=�
�������a
�#�pxa����~J�
6����]͜/�Z95��5/��8���1�O	��w�^ۆ!"��G9��8�	7�'���u��u�W2`D���2o1t������pN�ĩ��y�(�O�fߩ���Qz�}ɝ6oq���N�
=�yp}�B��}��>����
����w��q���	
"��ua��߷.e�͛���/@�[~�����}�h�" ������%߾0�	s��ܻ���6=;{�So|1��χ�X���N�졗�<���<�}�I�7�z�����[���U�9%�W�w3{��8x��q�����	�jѬY3{G�}��u�F{��={��ӄ�<&�����/�̜�w<���z��qV�j�p~�j
+�Nٸq#�@<�4
�1G��
��N�3�[�(�>_~�%S9�C.�2�2�����^�Q歳Ǣ��ot��W�\ɻ�Vf��Ư�–��J�C�����[���O7'ev�?ש}��g ��m�ƍO9�믿
5R��K��o\��Q{(�b�rV�b��`x����c���D8��j�n�bkf3��Y�F�Θ1�P<.=��u�,��)`u�_��c"�!����-"s��q9i���6�.��>E��b����_,3>D$� U"[ʶrtm��,�G��s�����{�� W_}5q�/���|�I�LyR�Թ" "PR��sm,���u�o7�\��#�U� �J�*�ر�
�Y���,|�뮻F��m��~�C�+��P�š5kL��#�R �[�ʕ�G���>�}�(���k\%+'��-W�����0��p>�Hv���c�3�,����L�����ի�|��;�s�&?~<��B�p����<����Ff	��� �
�\'�H�����yp�r�ʜ�J�]���7��@�D@D�40�c���|9Y1�����
>��?��k����{	��Q��G}���<�
�"�,Ϝ9��v|���;+��l���,Db�X�����&��p��$X2q�����܇�~�
�>�a�[�UW�Q��&���-I/��G
y�v��
+C��z�#��PsǤ�Hv���
������'#$^p*�263-I���}7Q����E&/�Ҭ�e�*_�qZ��q]G�[��1<.��lŊ�g0��i$�

�M
M�K��E�� �D}��U�Y�sE@D�4p׸���ql��&�џ��g\DÇ'�œ��Ǫ�N�:�mۖ��g�}6�x���$λ�K~��ߓ#�����ڏ�
v�ax⩨BX'���_`b"��z�J�>�MZI�[��

��8�뮻�0ؑC�@/K�2#*�y�3�`R"\x��K8�Ĩe�C���-[Z�����
��M� ��H��r�%ߓC�����С�
s
���zk���9�Ğ|�=Q$՞lBO=�����7�1��C��LO�<=��Wa&���RG 맧5^�l��o�����j���_�g�`�FW
�wD
S8%��iVƆS"
���Ыf|��� ^�)E:�D}���2#��iT�$�]��HY
W�L����@�AS:w�sϾ�#��ݻ��� �T����hނ9C
|�7֚ 
�8��ڪY󳼂n���e
��늢)E٢�T(j��EM�D�u��g�$b"��g>%�F�;-��J;(	(�l�r����rÆ
I�A���}�F�6�F�29��^mD�(h��
�I�6�<�����~���0�X!�(��*$�."P����ʱ��37��]!�WD@D@D@D ������[:b0��s=��XN�N�@9D)��9[�a�cc,�P�$(���_A��-����Ʒ���G���>5��;�}�a	�Q�
� 7){3a+j}�"�l�$N�\�u(�y5i�$��� �y�T��8	�O�
}j)" " .5�V�qX�#�wx���W�U�r�����S�J�U�����nr�T�V)�j�5"���4T	^���РAN�L
2����UM��d���I��?�0�AE�Z��֭[�u7�x�S��ٳɄM�
�D����BJH��i�W�_&c�)����9���R��RsdU��
+�ؾ�w�d��w�#,��u����@�!pZ��?�����ٵ���q_�
��y����^4a��[�Nں���_���dZ��X�r�_�/���U�Q}��Gw�qG��%�>eƢ(S+�EiYZ�P��(elP�~=)Ѽys��mLY�[n��|,�!ec9��&�󊢒�|�	i�(X��K/9��Qd���_~�O~�'"��g�}6ީX�4ԝ���@� p����9�;������o�;n�׿��}n�}�ͷ��u�-�us�?�ts�`$,c��v�YgQ��Lm��K���:vԬn߾=o�c�
���_���%۞��V�Zկ_�E�<l
=��B�8p
+�LpBR���~r�o�~�M7�|��g�q�l�,?Y9�v�By�NQ���<�
��=���)\��'�x�i����?��2ŦU�o�����ŋ��իWs�Qɼܽ{7^ҕ+W��)��j�I���ܹs����2dǑйsgJ9�����������o�<8�n�v�ʅ{�h�w
��'�Ө���o��׿v�G�wle�,���n��v�5z�РD/���˶��
��煺��ճ�]���	�֏?-���;���,��y0����K/e�K����
�%�-�n�_w:." " ��a:�����@��۷w/&��{���{~�����m$d�~vܶ�_��G�U�V�#��P
��D߳y�L�V~ŧL�B�����?���y�f~;17yw̘1Tg
>��U�1	v�;��&%�O���7

++��T�
��
�C�����zk����	��~����k��Kh
��g͚E�
�7��w�I �;���ON�8�
lР6��_"k5u}�/�-?9��t�R��mڴ�����o`�0,X����0]���O�%��:�?���-;�<�
������dy�Q7�pւ޶m۪U�(��T4�]�/+!��ΏR�n��/��LLnw1���������D>iӀ
�̾_������Y�=�"" " �Hx���Ӛ|���Gm���|�
n��cb
+	a��fk���}��w�´G��qb
�#s���
k�?��S㑲�����9_:�J<����s�N���4v������p�
h��E��v�7̉&L0
+�
w�7W�l�C����y�P�{!
��?
�Ȝ�x-�����=z��B�d+ǐ�9m0Ǒ�p����?���:�O� }� �>HQ �1;�Ύ�u�O�T��W_}eu��n�pi뜖��.����Q>w~���߼�x�޽��0
��+0��b�P5m�,Y�Kn������完/�(sXmD@D@D�I��
�G�x�q"�@޽k��
[6���|��W���?����ˍ_���'���‚/O0�Իf������1��Wv�ϱ�N�3N
*x\�ך�T.�Y�f��d��֭��z���#o��KZ&����_��9��x�7ExyD)�>�1G���OΗ_~	%
X���z���;��o �S0�^�7f���_o�M�/�#v��t
�J��+��%�\b��cުW�
�U��L���-;<�wi��>��J|��Cء��?���:��O�'�q�cƛ���l��|9D��y�OA����7o��&�cݺu�ׯ'�L
+BR>�z���7����
�(" "P�	|�����0y�l�}�
���``"��G����?x�ʓt܁��1D\G^}�U\�l��4
�h�_�
�~�i<L��♸9��xy���
�'O���\}��ģ��C �-h��Xb��=���5k�$f�
do��1g9�!<tt���*�����`��y��̒Sg�Bs���٥m2��/#$��.��H	��T�O
�6��
���DX�G7�x,s�GT��D��K
�p�S�r�.�����������}�$�}Ld����V�
w�%�@�–��}~�
�e��c"�kJ�����Ɏ�lO��,�뮻� �m��~�C�s50?�)�{C�@ �k֬1-�1G�5L��Ox+V�H����g��
���]c:��ڪ�?Q[
�8�	7ǯ̹6! zrQ� ���s��_|1q�D_t�E������c�$B���O� }��$�ax^G?���4���蜖qݺuy�\kZ{׸Kɘ��X��S����8���ЩS��3gb+�cV|]� [...]

���t�KWa���_\~��O���t"�x�q�&�q�
~��?�|���?
+�B��.�G�<����+Vl��wܼK&<�,�����g|x�=y�!V
���4 ��Y�Ɔg;x�С��˖-#Ǚ�t�.pB���f��r�.������'��yB�	26��O�G��:��O���[��},�s*F�
Vm�
���k�+c��.%�!άj�GdZ�����%q^�^��ʬ@
]��ǐ���k1�Y���ҥK��r��CA
��Hй" " "���a��u�<�ߟ��z����.;���p<	�s��d�?*�fN� r�Q>�s�>|8�
V
O�qM����]k~�
O�Kp�=���x_��� ���)�~�a&RE�� ����

SrJ ��[o�޽;�M��q�:����S��_b��>~�=��Y9F�����ك
�y��H�/'��tr 0ۈg �9
 Ǐz��ի�<����z!�
������xڎ���-9�e�\,�=�%c�y���ƒT'X�μI�(��
0����	��1��~a!N�)5B�=��'·dy)
ʜ+n� ���(" " � L�������2��"b���i��
NX�㐜�&\�����{g�{_D�E�
$��dW��|*�S�z���cj�
���;^���kO$��&���Yk���"�����7_�c!� �[����z*N�ԗ���@� 0��!�"��b��X�o�=B/�vs�P���w?���o��bYO��e��g���M|F�x���e�\�䢨���B>��K!�����M�6a"c��7���;�^��ԩ��J�i/�)�|�
i�_��8��/J�P�E�r1cWw" "P6�Hv���uJ�,璾�a
����9<W��P6�r�	ъ�)�
H��J��}�F�tԨQ&#a�QڗH�q
@,��~�;n&1j�
/%�it��ً���mI��2D����$�3���ܩ�(*U��t�б�^�	-������Lq�o�H�
~Vk��g�*Z
D@D@D@D@D 3	�Z���k����D
Q&�`�����Y�p�ڷ���
!#VC�
gz�V�``+�[�����e�ŝ��|b���?��љ9li%" " " " ��m���
>�`9���ʼn�I�@��3�5��	?;�Kc+�f��㕱���鹏�K܅���=��ܷ��^�$�4IbR
�~���c?�e|?������ki�n�Y7b���-?�x�ao��v��o{�gƎ��I>LѶ�nI����x�s�
+z�8���QG�l�pNt!f*��ǯZȕu]RI
��R�
+�>��9~�#Qy�%�a��>=�V�!��y?m%��
)/�k�vN:Ƙ�"~wD��k�)9���I��w!R�!IQ��/�B]�TT*0�h���cl϶_j�>
��^:��#��%!��#i&&4JF������G��
-�O
+�,�$�����kݪE˶����\�ry�w�V>�Ԇ����7p,ǂ�O�u��5?�b,gY��:k"�8n
��f?f
:�b��`�2
'_��^��9d߈���]�
Z��t	�.
���zz62��J窳���k�gr9�;���Q��us��R:��d'~◩Ks՜bS�$�<	���d���)���
��QfD���Ͽ*Q����vk��8��q�I���G�<\�+a�yϕ�A������6��$L��}�'�ᒰ=��,��tt�c}��\�D�����:1�7sAu,v����w��%J��I��
�����ߌ��9��Cǜ���1TR�p�H]��ɿI�pMCZ8�zO� +%����i�W�d����ʁwQ	?RAX����ZV=�_Eo	9��o��/w.�b[��9��ܻ%��Nj���[n�t����=y
[d��^l�S!�f9`��,^�c�;�e���)q��~��O
o~����f/v]c����������6�ٞ�7'�D�#N��wK�y���������>�Kn��v
���H��m���%..�3��Q��9vLW��LW�DU]�T�T/�.�]>79�k�/H�%λM�	���IR���i���ؑ���q}�5w\
���|>�>�)�#a�
����/��ϕc\,����0 at m;}
������	������0�]c�v��ً�����L�.�W���.����
��r�^c����%�_2���o[�>v�qzb��'&X�>�u�,������섻�ߎ�_
	oǿ^|s
.�=����|�<%>`_e���-ު��y·^��_�������!�:�����>�&�JϥХ�s���h+�����KT��T�9��
7�b|~����sR�o��Nՠ��8��m���m�A�
������5�Yf���;.��޴�i��Z��YY�
|lL���^��O4�I����MӘ�������T!�b�oe�
Z�"/+��V:4�b޿C͊���U!��!��Y��@���5�
m
b�>�
��?�N,
�#�������ƞ�߄FF���1�pA��b��bL\�ĩ��Rz\}{b�A|h��\�%�{
+�_ǰ�m>s�H/8!<���C�?W����H�vߞ�ώ�oʼn9?��P�N���
A�|tm�ܫy�oo� �<;i�Y�?��g2�I�
����1�
+��+#�@6
Ox^�G����^����ᘁyN�g�%�-�H*Xa����i�f�j�s&�lr���|�$��'�~q���s
��(���
��z0͜;�
5���|lf�Xi�b
v�Q�m(��~o;���&�[�/������
+~5�o&�ӹ��V��h!Fd{5Y��|������-��
�lW��^_%!?��)�/��*��c�=v����ȓ��2��w��o
vM�3WOe�~)
+~��\o�?%V������w�����z�=m�)������Z����R`d��E�k��F>9"���=�{<�d��g
S'6c[��
��cq�_A�B�z�����>��8[9&�e&�~w�/h쀸)�+`%�#�͗:�x�~��Nw1qi�X|��gk�w���*���Ѿf\�\N����_,g�?�N�v�Ջ����?�Q�w���

�a�~���vޚ`\�cI��g~�}���\�/��_��-��?�
S0�������4��H�-s�y��R�u".����y|rLW��
~.]�����I�&r~~5�B���1��y��p
6�����OD
+|��}�$h�0�|�/�1�7I�a��q��t�1�)��5����D+�O����&��f���~���S�s���τ
:l� �͘���g�{��6%��N☿9�恅}������B)A�S�[��6^_TH�ԉ��x�</�H� �����ds���I��
��#�e�{~��Z�~fy��ɕ��q��]{<���6��g���zy��f'�ض�Y��?��~~�5vp�V��_9�,�� �bc
���8���>6a��3��]�g�Z�q�3n
��u6�_�
���{ʡ� ���޿�>]?l�s]B�X^:/�����;0�D�==�q�A���P�@|�
l�P��
�����l�qV�
�-�g��� �{���&�/.лA�gܫ����h얘8_Ӳ���Z忎�h��6w��
lBg������B9mS�_A��w�`���%x
�|�$
*v�y%��𑊷����^_#ή��
+渡�h�o�v�Lh�������8��볛pf
���ԑ?����y�”��(���y���o��ܼ�}��0Q��I�z35�+L��-8�=�q�q ��|���衹��m��6�A��"�S��G���x��[?�E�yO�@���'���8���I���&o���3�{�e�.��i�j���I{��{������Cj
�u��w��Yq��~�pa�C+�����W]�w��YJq��%���&q�V�e��5ʜM���q��t6�
�zig
Ժ��ٜ��Qq���7sT�B�Ѣ
+�oWp��ET)��|�@r�T�%����(&\���!��[h��ߚa�H���:��p�r���`�
|���@�n�G=_�`�r"�X�yG�N���		��P�������4蒢�O
f��1+pV�-�����KO?�_A�fLy�S#�(�?�Ԭ���T�����۾��];������ڽ�O���n��$�E�7S���)~�(E�CAqi�'�
�Ҡ�[D!D�Լk���3��R��t�G�*6�
A���D��R�{^Zŧ�O!Gzz:��NY����A��U	)�S��1&)�	"���n���O��X��g���A�4�HrR5OR���#7�U�@��Z#��YU��T�����
+endstream
+endobj
+2812 0 obj <<
+/D [2810 0 R /XYZ 86.4 726.045 null]
+>> endobj
+974 0 obj <<
+/D [2810 0 R /XYZ 192.312 371.339 null]
+>> endobj
+2813 0 obj <<
+/D [2810 0 R /XYZ 86.4 318.522 null]
+>> endobj
+666 0 obj <<
+/D [2810 0 R /XYZ 86.4 209.644 null]
+>> endobj
+2809 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F49 967 0 R /F16 717 0 R /F48 966 0 R /F38 773 0 R >>
+/XObject << /Im10 2804 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>> endobj
+2816 0 obj <<
+/Length 1958      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�6~ϯ�9gQt��7���.�4���n�`�!>u �����wd��v�C�=��,�7��4	�-<�?9�����BJ*�ɝ�$�^@C$�&s��C��e���џ
F��;��x���,�M���&Y-;]p
�����N����N a��R\z����`oO~�0b����
<�BD�*��'?�`�(�*�USaDi>�8
]<W�s�|.
D�0��R�瘄H�HP�
^�r�B��A���
<��v�x��g�$�vd����flxѡ�4�������u�vRq�K
+����m�������W

jZw)G!��
�v���B��N���
Jc�۬%@�7Xk��\
���ǚ�f.*�sie`?
��ף�1xI�
f%=77�⻚K�
	���\Z㡁
�ػ����
+18�q)긣��1���u
WK�$qf�#%’�zg0p�
	K��N���:��&���8�-�S�=�9�q�ou�ۗ��e�C��7�Ŝ�$�"ٿ���\"�D
u��M�M���?�_A���U���N	O���|H��;�h�����
u͒����U�`�j��r~���NB�1E�
+��~�)֭�gip��A
 2�$'u����M�~l�{
�
|;1w�t���e��#n�4�r�"��_��}��k�.�p5�K��[�I��r����\,~a�8^0\1W��UV2�؉@.u	�g�5 �/o���m˒�U�h�
87���

�4^���"���m�>�&���̹S N;�����z��) 
�T!a�o�/
`Y3�
�h��ܭ�/����@/ֲ�}B�N�N��UGm>q Y��
+��I
VP�f�	���H
�����T�fE8�SY��/���ͷ�d���y��g���'�@hڲĻ
�,b
+�6wA"-���Z8� �R�
+�
+�
�ZUA/�G�ֿ�u|"@T���q���x����d�A���*�"� ښ9��V���վEq<�t_`=4��+y� � Z�5�9�-�V���{��$B�
�V��A�vn�o�;�[07��	�@��v�Zo��r�����`!�
e
�[��AG1�*��4	)D��mɲ�\��Y�_�6��4l b�g�G��zЌ��,Z��M����j:E�؎���v2z�:6�u�X�f��Z-�'� �3�1�09]q���*�=���
+u��d�>)^FӴX
Zc=��)��e�_?�aF�Tq���'A��\����_��F}�\�N�(���If>��ʚ�i��}�4�NG�c4�!�O�cR��"1
	1"���M��þ�L#�
�p�t�
���-�ZSp��%�Q��N6{�(��D.�m$���^	M�̣�wi� ��y҅�@
��Nr \8��BA��P��U 
uP
���<,?��>�� �B�rr4�EJ
�!��Cu�v���
���_(Fa	�J'�ܒ@�����E��Pn9 .�U~�[`
nUa��
��M����u�Q �l�jQB�=TX���h��%����7���-�[�כYgh��b������u�;&���֞E-��WK���=Ivr���:�mV��E���^ݠO�q�,����zw`��c
+��@�Q�K�A+��6f�>ҷw�)�|Y�[���E�Y�e���K`̤Y(�1�
�C���,���-�߼_�����&/�A�i�h
^�k�n�ky1N��Yj�]�v9O�4{^�s�T�Q���\9��I�Sc�gz��y{��N{��/�v�~0-���ubl_
�p
+���
�6xIF8���Y���{��)-����#
��v��\
	�
��n�P^"*�0/���0��|C�
�R����k�Awƒ��՝1X�
+�

�jP�J�+Bs��Mb�M�������PhR�ߺ����wy3��KoT�g)
�k̠��XiIz���
�7���S`(�Js�.OB�b^�5zxL�(��AC����ɢ���
NS^(
+endstream
+endobj
+2815 0 obj <<
+/Type /Page
+/Contents 2816 0 R
+/Resources 2814 0 R
+/MediaBox [0 0 612 792]
+/Parent 2818 0 R
+>> endobj
+2817 0 obj <<
+/D [2815 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2814 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2821 0 obj <<
+/Length 2662      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�~���[��C���<i|d�#�����-�23��ǎ���
�)Q�]f�����@_7��x�:�z��"�^D"ɤw��iI��XDdH������6� TŸ<\�]�Ɠ�0ԡ;��ԟb��@r?�'���*/��".��
+{������i2+�d����'��'�P�I�ъ� �Ko�<�������������~�qK��a�Zx���n%AsE\�HF�P%��]ݎ�'�s�L��hX�Y������>W2����zr?�
�j�_.��qJD��?���,���K��,��?�$G��P2�"�
)%�p
ϒ��\�
9��͵�1Ž�^	̿N�ϑ����<h������<ɒ��Z��O�+��2]�����6&��M��g�2oSLV���ғ�
�w�	�H�b9�?�F�KE����x�	���NR�ף��s;��`�oF"��r����P�+��K���9�
e�d�+�'�F��J�$��iۅ����5��h�8�)�٬v��2�V��|9���p(�MYtYIejC�����l�҈�6AD�D2U�+/W�4^��r��Z�K���YYs)��±�0�i�e�2W��aWm@��#E?�Z�����,y٘�uVT#�u�č����:{��D� ��B�-�d��8��
+
����n'���͖\�z�����g��t9�
)��:m�\)�^؂�k�-����O�*g��DB� G���*�>�J
E�O�+���*�1�4K7�m[ec
�k]�bXQ��X/��)�i�V��	�j�'��X}
+pӨ�FUf�]�ڎ�n
�ľ�Ys�
��� "!�Q���f).�L��Ijq�I�c�‚%���+�
|
+���c��U�2\�[y*?͋di�r�D]�5~d����h��r��o
�
7�	��� !xB4/��f��JW�R�G�
�9�t���1��4�u�U�P�a���t�, �,@;�����XC��%E
�����a��Ŵ�~$Q�UJyB��T�"$�.aH	���"����(l3>�l���-H
+�a=Cm��͔OȐh`�Cʇ�$@�����r�
c�H��P3�y ф<;
+�N�yc���3������ja΁]�63=�NK!������/e�}Y��>���ʏ$�R�=���N�s��Ӣ�1�s�b��>�9 at P_��}��
�Џ���V�.��Z�$�;*MƣJr͹�%7,��@605@9L�Ă>Ԑ�k�
|N�Q[�W�o�
fjȀ�'����Sf�Ƹ!��~˞������XS"�8[�o��/.�3x;d��&�м

�W���z(LPI at n�S롒��3P�$�ݽ�
�#��<7ɮ����!"e�jxj��rӌU����
q�����rc
�B���ӯ���b�J� �Cj\	�#ڗԞM�dn
�K��s�ۇ�x�[y�����;B����߳˻c�' R�ƞ�$hq�l�Lv�-m��x�d{����� o��c� �1�}hH�m�Ɨ_�Fw�~���.�l�i��f¯G%���m�|?t�%`DQ����g��'���@�xtxģq�|9�S޷/�S�ɘ�}�	IQ�}Õ��H��s�P���˓2-��&�r��[o���f
�х`���	 ����ݚ�4�JM��?=�����n����xt;:����&Bb�f	��SRb�aЃ�}��8��S���3x�{2�C�v.�I��*
+,�mw[d���W�3�{������㫏�B
����>���S���'n�H;1��A>��o�i
}݇ΑTX�
�C^��}�����\��U�j,X��<|]�U)�:���:�[��k�G�[�VE��?�o�U}GOfD�6֥O,�'qf?�7n�njm���ץ1�&u�	��Bʮ='C�JY�k|��Ր+�$�IN���RC���(j���Ɛj%یT���U9yl���zWΙu]�p�HH�
��Z[���;7���~������p
d��J�!)!z��p�����_a��O�Y�G���Y�p%�F�U
Y�j���
#)Y����1S��P�>���^}ֳܤ�i�cE���c�����H@�~E�5p݋��r.r�p�Uo��Z�>X2�̰�����jt}��]�>�xry_V��O��e
�򯓦7r!z,
+�ޑ�ag��W*��l#I!�!;%�7�'�
Q�;l��x0��:�}�x���M�. y���र���D	lM?�� F(�_s����~��*̑6v�t�A	�)���|�žY���d�pw��KZӖGb=
�T��'���3��qj����P�����T��w��C`��̼�x� �4}qn��4/\!ְ_��������m9yg�Q��cDz@��0�预���=è�`���@)x��B���ne
{~��v�p��n��<�a�=A��N]�%��/��>�x�;7Q��	��;A8��y�3�mZ���=X����S}G��% ɚغl�.9�4($�R�l�3�`��GJA��
&
�
* ԰�<�Ė�X�*'�w����}�#��L�N�#�Ei���j��x
�y|����ҀKe���C
+šrX���c���;'%
Ϗal���Ԝ�A$v��
Z�;XKVx��.h5����I���ȹ
+endstream
+endobj
+2820 0 obj <<
+/Type /Page
+/Contents 2821 0 R
+/Resources 2819 0 R
+/MediaBox [0 0 612 792]
+/Parent 2818 0 R
+>> endobj
+2822 0 obj <<
+/D [2820 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2819 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2825 0 obj <<
+/Length 1691      
+/Filter /FlateDecode
+>>
+stream
+x��Y[o�H~�W�����an�x*u%JLK(
Dj�V�c��*ֆ����Ϙ`p�(޾��x|n�w.c�uga�]����1גH�Եf���"n	*�ˈ5�[_�"���
?���Q�&Ȣ�Z�v�d�`�6�*i���\���ه�?k�� �[�� ��V�l|���9<�`aĤg���--�$�p����?���
�ޡ��$�W�q쏆�c
��2�̄s���vF
+%� VJz�Q������{�o11���|{
Ș�'��"R����V!������Z/�ҍl���\�X-B�t���6�.6��-�AH��o�f��7͚ �6M�֕�^� _�]�Z��I�}ü�a�. �I���Tv��U�P�[�r$�
�I�0�-��i�
+. at A \\ 	d|	\"OD.J0�
��	��>Dh�l{
+7a	2o2M���]5~Y��e�i-Q�+����;���+;
9��E�$�nY�Ur+��+�VcE� x��ڬ�*.Է�Q0�
ݿb�Qv���{{
�v�
�(a���vҙ|~�:����(���	��M��ٳQ)�c�~�w�*�C��v�xy��/Uco�S�eVQ��j��K�I�
�lU��
U��gW���zt��
�UPy�&3��e�Q���������������h9�
���i�Y�#���.q�D�{�4P1�9��ȶ�<�޸�
+�������Ai��L+
+�� <_m�/fO'wy4t̎��D�
��)C�|�S���ݺ��c2�
�*�c
���{xQ&sQ���L�����=�>��� ��]�EғeJU��P(D��	�*8�z{~ī*.��:���(Q��AppT֢j�
-����^5ݚ�7�$���"_��9��RA�W�jT1
��U�qm�4��D���?�q�W��LN2�H�8�pP��Q����(J�N9ujP\Pg_�/��y/.�ξu��+�{ňu��[������
�Z�(���d���\	֫E���������S-�:Pui1�f
�}�7��h�O�|�R�@��;����$BD�|���Ӫ�
mH�_Xv�Í�E�(}��I��H��RԢ������ag��
<��uf ���(��ǚ�m�a^.�v٭�(�N��,�'G�
��)����4���}nC
����U���n���kpd��.X�M–=T�q4l����~�X��S9͒;��NT��g�X�u3�{�6
$Z��3��m�3�ar�/�N�8���;'��P��<�@Jp�K/
�Վ���s��0$�ٷUӲ��
�
��P�ծ��\?�5=���z���r
/�4��;N�����2�`�Ļ/I�~
�0̙�
%�Bd	�{rn�8��X at 78���A��  L%/y�0�m&��g�]�Vׂ.��s�n����
�K.�}|���?��6
M6
p��bT��ka1��q���X
E��"X���2j/� .[���#�A��08�.��''o(�Lp�V����-�9\?"}�d����ǭ�����?��:��w8�����T���!�P���3
��l���%���E*���w}>{u�wz�a��ٷ��[�Fgi��Q��U�b.����O	8�5��+���+1=zgř�
�YRY<�sL\��x���	��
ڹ��v�y��㗼����	8�Le�
0�=
+endstream
+endobj
+2824 0 obj <<
+/Type /Page
+/Contents 2825 0 R
+/Resources 2823 0 R
+/MediaBox [0 0 612 792]
+/Parent 2818 0 R
+>> endobj
+2826 0 obj <<
+/D [2824 0 R /XYZ 86.4 726.045 null]
+>> endobj
+670 0 obj <<
+/D [2824 0 R /XYZ 86.4 386.427 null]
+>> endobj
+2823 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F38 773 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2829 0 obj <<
+/Length 3797      
+/Filter /FlateDecode
+>>
+stream
+xڵ[ks�6��_���ݑg"/�dw�3J�n�:�;��;
Z�-n(�%�8��{. RM=��~h
 pq��^ |p?����99�N�A�b#���n����Qbp3
�6�\��$Wa0���������t�"5�:Ur����pB�O�F���
^,�:��Ί���UY�!��t�,����pr~s�� %| ��i3��O~�7L1�À3G�G;o>�*f�|p}��	�8I4��A ۣ�X0w�1
�B���zX����=���
�z�Z�:-I�~]f�eRfiE$�}�1�F"b��-3K�
��Q)�
+s�j��fI޳�6�蠙w��j�RGf8e8���T
u��y��h���g?T�3]$�y����C��S�M�Bs~�"H�d�Y���z��q��	��3��y�@�Ճ��@i��[^�s����NG�,/F*�û"�
Z��q:�I�Ǫb���EQ���3�N˴�����L2�'nxB��e�ON����3p)���u.������[�(1��ӧ�p|�X�,+��F��CR6,RJs��:�_��V�ƄŤaQ�-��2˧�X��7X����46�1Yћ�h����ח�cL[\�W�S|	�KRb/}j�����
���r|M-CG�^N�_{�a��n�nt[��/y̸��>c��̴�
����pń	vY7&���V���R�X�p�>����ח��٣4R7�9#q���<?����v�O�/(8�F43�[��ί9K
��Y�N�|r��~����
"4zS՜bġ�R4��4�-tz�>��'6��[ef���j�
��(&0����H�GLh=�B!�I
���Kqo
��?�?�ڳ��X �Q�
3���W��KVj���u��sV��i:f~>��+#ۂ�h��o�%���t3
�<wR�1y��'ɠȮ�Ţ
��gO"�P�`���~	�D0i�]�7D:�\��x���(n	;L�w�d2)Jrr���WNY
��|�*?i�e�iY澮�t��T8OH~�q��4��\3
�o!b�&���h��
Z�����t�,�I�WOH�6VL�&��P���&�_
�l�����]��@�Q�О?gI�C�r���H����G'<mUD
�	 ],�"��补�>HAT��
+��as�,\8�uQ��pV�������4��M�M�E|�|#1�M�_�6�X
4`���9���6��xL�W����<�����B�>,�7<z������?.�_ߌ//���p���/ߞ� f��O��w�#

���/�wW��׫��v�|�:Tn�4�V��bᇤ��A!�<yH&�XU��3��
+�m�OqUN�럵2�Y�
f%�̥�s������a��ˏ�ѕ^�����NFCl1�
�E�BE;��s=�_���7 r�*����J�i�o��e��O-�, }��a�v!
+U6.e�wĘ}Ws�^��m]����o�`�0����A��js��mz�Ngm]?!$�*n
V�ߜ��%�e^?�I��:�/���i�9�:���Y٬��=1�����%�I� Zcȭ �li�
iD�0��0�(��:�X�����)��<�P˲��\/9)J�\.�p9�P�W�E���a�0���X
+��0���~	X
+��nZ
+�}�V��	��i0����V8�L��	�v
�d�6�U�`�&�+�Ɉ��o.?�=�q�

Cq���S1����o/><�
TW1L�d�=M�
[r�uk�b�/�i��p@���(�E�{�y7��l�փ
����"M�j�&ү؊ )��0�ޗ(6;�v)�˾�HX��(G�nn�+O�Z9���#%�{��#C���b-�)�J�pea� �U���
+��P@�b��2~����*�
+���&�M}T�	��/i���Y����t��u5��!7ZѮ}�HE��ia��]O~�#�8�R���"�&�J�A�
+�q�۩��{N=�j�VjS��\"c��ׁ�t_��y �ڥ��g&B�{qx��5���͍���A�
��c��@���
�#͐Y
���&׿�c=r����w/�*
�v�cD��@iˈ��QԌ�"��Ǘ���.{M�5
D�@��c��?�F�Fn�>���;H����G��L�?�VO�Ik���&{�D�&����Qܤ"���;i(����^/�
YZ�
Br
���,-����h�y�
�$� ""��iR�w7=@SX틞�t����`���r]�L ��(Sw�+Yl
a��M��V} La�%�Ұ���O��Sa�I��*1��t�Sw-�ȋd�l�L��9�ebH�.&��uZ:��On�� �}���e��/�h�� �2q�*�W�;�j�Y�VO��(O���osv_|>�ɱ^�
+<[�s�{6Y��9_��xJ� V���_*j��>��m@������:%���?��v^�}y^�YV��Q����� +�U��
	lWrM9@���-�}fq��%06��
� �� ��B\��h�l��W �|h��VM��0��l�<���d� n�;d�rD��B�lA��ǫ�����("����r�
B- 6��Z�@�����u�m�Nv�� 
:����
�@2��
W�B[ף��1{�!"����(�����oK��
+g�_!�Ԑ�6/���f�r>yƂ6yVzu7��|e5�V�z�B*��	2{"b=G�L(
�W&�f��Qћwv=�F��A}���`�8��a%!�]����}=[�w����i%�i�q��H�jS�hAҳfa4�>=Czx{ '���
�MF��b�� ��s�z�V9�������T����A����+v�2�{���V5�]�
+��J1��� m�IK��n��p>~�́��9ƾ�&
ug�_��{-�U%pN�XV�&�֖�Ү��ѾY"���J�=LGr���W��L�iO$�mFܼ��[�n���]�C�xwճ�����C�'[�D�yf��CĂ
����^��t�e�tm{w�-�r}�]�nmF��{p���fu�]ys
1"�O�<]
�A�h���XGxT�)�k��IS #��k��uWx��+b&��w�\��I
+�iF�5�2����~�:��ص@�%)Y�zYy�fؕ�ާ^��S�h���j�)��M
� 2���+�R%k��j#�o���2�	U^�J����*
�U��p`OH��!�p�"�R͊enU^������ۿ�*m�|#��7��+{
D#?�T��޺+`́��"�#������	2[;�����l�qv1����s;4�+�VKmy^-
�� �]
+�:���
��x��OGӬ�Ch��C���
Bݶ
B7�!v��Ch�n����b�?]>h�-|4�
��S�������G6�T,Y���CZW�>%7W���� �
}���o< �r�- �l��u^R�۲^n��� j
�@�Y8���SP���
����b%�-�!�+osH����'�K�� d�^�c� ٥L�0f�K�V>y[��J�ˑ����V�v�Bq���LG���vX�51&�
g[x
t���W$_�l�
��s�� ���<�Em��_)�w�t&�q��V���):՝��kOo-��Q&��'�(��;�� \�%��p���.eL��
+-Y���XQe~nc�#�F���{J#�Rۻ�n����I��B5��
tI2�'��P��EG
�X P��k�~&M��S:
�I�A��A�� I�����.�\؞̗g�E��*xJ��g����'w��'��"������b��t���yU��?餮�fęQ5I�Gy�H�rD�
B�h����̦�yZϊi_�D�V�X�c\�
)
+endstream
+endobj
+2828 0 obj <<
+/Type /Page
+/Contents 2829 0 R
+/Resources 2827 0 R
+/MediaBox [0 0 612 792]
+/Parent 2818 0 R
+>> endobj
+2830 0 obj <<
+/D [2828 0 R /XYZ 86.4 726.045 null]
+>> endobj
+674 0 obj <<
+/D [2828 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2831 0 obj <<
+/D [2828 0 R /XYZ 86.4 613.163 null]
+>> endobj
+2832 0 obj <<
+/D [2828 0 R /XYZ 86.4 415.436 null]
+>> endobj
+2833 0 obj <<
+/D [2828 0 R /XYZ 86.4 298.129 null]
+>> endobj
+2834 0 obj <<
+/D [2828 0 R /XYZ 86.4 156.732 null]
+>> endobj
+2835 0 obj <<
+/D [2828 0 R /XYZ 86.4 75.291 null]
+>> endobj
+2827 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F14 1030 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2838 0 obj <<
+/Length 3132      
+/Filter /FlateDecode
+>>
+stream
+xڭZIw�F��W��g����dYv��eG�3��� ���,�<�~��
�)y��h4����
+�gw3�������w2��,D0���ES�P�,�|v�ξx�L�2�ޛ6_�yq�O�K���/ۢ���;}L֛�|��lνz�2�'|=������룿�8��g�#�Y���r}��O�›_f>�q4{0��3%c&`��]
�z�Y�;�1g<
���-�<Y�H���hpVih
�s�I���
0
yYV�c��M���!o�iu?��m@�*Ý��g���꼴?�l�������J:���*s�DpO���/��{u��jȩ ��B�ӟ��ty��J�𘤗�>�Mɸ��6�G���r��Ӌ�7移j��	s�9Ք�s�B.�#/v/�>S�N�"�L+c�H��l��upP)���a<
˜)��p6ࡹI"zvqr���Y-��� �����۳�	
�,���

!���gS�2.���b�j�l²��s�M�Ώ����尐��~^�M�Z%
��R(�)�
�����X@���K����\1_�?��!
+W�b*�#�����<��c����R� �Z(��i;/�E�Ir��"v��cgթp��L�O��>D��x!�~K����qhkFׂ�`3�A�F��-dȂA5�\�a9	�-'���	<P9�&�?��”V6A%K�
W�W|�:�!���`��}���rեy"��D$���oZS)p�*
Ih��������ٺMV�G��$u���m��eXI"��.AN�|δ˄�nP�d4R(,��F�T��W�hX�U�$�H�a���i������O�vCC��b���!��ʑ�#F��J�ʑ�Zӱ�
+���j“"(A*�#DP d��gW����2�R=UQy$�_QY�jC�f��~����9�ؗ�э��lf��mY�����z��ʅ�;�0��C�
l'{�
�@2� �F��̳(ꑹG�|�*�� �U>��ޢ�����]#҉�Ј�œ�W��H�96��ˊ
2ȔjRq&��G�ś�s�]5k
�]���9ٲ,��su�V�
�/<�Y��/
�y`O�{��v]�!��|5�<C和!��D1�%*
�y��h_.�G��i��O:Ye�Y�ˬ{�)(
嵘�H��
������t��,�#�ʱRΝ��Y��B�e�ej(�D�S)�����@H��9�XV�P���8�ϱ������P�*���4G/ 
풍��ϴr��:1Ȃ(a	
+��
��4`H���m����E�}�DR���+��#=����a�G�Կ�9Q�G����c���\f�$?�^V��ٸ
���4��V������Wc@
+�%���һ���v�Y��T<a��|��u�Ø
D�F�QP'H�#�Tm1� ����b	
2��.D*�c��c���R���K���6�S!>ʖm��¨)}�$�	�Q2$W���
+I�
+�O^l]j�Y�v4��XM`��NJH�*[6e�
-�-z�QN P!t5{9�
��/�'���0����� ��!JX(h��bpAE�?�QVć�r�*��)Rڽ�ț�D
+&z������fl�1�
1�i�
1h$�\�
�	�2�Ei\�����CS`gP	�Ѹ$
��i���/�H�!#�E�UN�[
���M����:��"vp�����.���
a�x<�8@�C��ܠ!t���a
�nW����^�6����m1jB
�~��[��M&{�c�
�+��~��
;H�t��2�g�A��;Ā���[�M�R��s��
�fȌq%�dg&��u�,�̏����1��x}��p�R�ƥbA�Q��5Фʐn�W��!�2uV�Y��(5]���_�Xt6�u��Mjp��6�ya_$��h {�f��ِ4)��j�ˮ�
�f �鼲�[6fJ��d�d͒u�ٍJt�"(D1T,D��,2ﺿf�;n7^����m	8�W�jAW-��h�=;�A�	D��:H;u8qH��Mn�$���(�V
7�0���;/�r.��p`0!{��v�S� [
8dI[.T𡥩9��
��A=����F��O;{`����i��Z(�4`�,�a 
&A�{�B�V<�^��8�%:�c�7��uK�RH�x8v׫�M����,lq�H4悭��6�)����#=���@��쭳�'�݇�o��"�~к
8��A�{����c [...]
!�?�v '&r�9	Rg�?�Fu�Q

+V�!�yO�b1�DNr��N?�3��5��
��\�m[&�O�+7M7U�(��eg�rB!c�~�
a���4��դ4�������6�-�^O�����;�̏�
+6=�q�	�~6�˨�K����‡0¹e�X�W����>3%�+t�T��9���
f�X���4@��
��.��|$ŝ�����&>E?H��B��WM��(
O�Ɵ>�=ȸx���x
+s��Jh�����Ch�1�O����~?���@
�(O��`XX

�+�g���:Wi�`�rc�i��o��yEh�I{gO����lm��p�ڊV=�o�}u�}\�~����C+�v5p+��H�+ֵ�<�υ�)�s
�a�/r_(�Z�����7����2���Ma
+��_�Z��N����0%��X��/& �$UPb�(
+�Z%
�Z%
�p.�?�z@�	���=�F
)~���ɖ�p�
g� ��'�
��4S��\x�
���R�
�H�pO�W���JZvՠ'z0p"�Y��) g���۲���M
+�#��%x7��ݴ���]�Y���	_��u%t��Ƌ|_
�\;���(y��-�jo���>�n
{�/WS�#T��$M�:1
+�x��W$�z<������AȮ�)l��g�Ӳ�!�p�	�
+�
��DT׏㿛����zR�V�d�8=8C�5L�<
�q:��ߺNŎ��Si�<f�	
�4�������%Z��
C�‘�����
�{� L�b1~�~�����H_4P�
E
Cш!z�9]Ǟ)X�o�9{hڮ
�|���7��9Cb�^��
�H�bi_�/�xn �{� 
��/$��f�Y
+endstream
+endobj
+2837 0 obj <<
+/Type /Page
+/Contents 2838 0 R
+/Resources 2836 0 R
+/MediaBox [0 0 612 792]
+/Parent 2818 0 R
+>> endobj
+2839 0 obj <<
+/D [2837 0 R /XYZ 86.4 726.045 null]
+>> endobj
+678 0 obj <<
+/D [2837 0 R /XYZ 86.4 646.538 null]
+>> endobj
+682 0 obj <<
+/D [2837 0 R /XYZ 86.4 428.312 null]
+>> endobj
+2840 0 obj <<
+/D [2837 0 R /XYZ 86.4 369.231 null]
+>> endobj
+2841 0 obj <<
+/D [2837 0 R /XYZ 86.4 345.243 null]
+>> endobj
+2842 0 obj <<
+/D [2837 0 R /XYZ 86.4 322.362 null]
+>> endobj
+2843 0 obj <<
+/D [2837 0 R /XYZ 86.4 298.928 null]
+>> endobj
+2844 0 obj <<
+/D [2837 0 R /XYZ 86.4 272.07 null]
+>> endobj
+2845 0 obj <<
+/D [2837 0 R /XYZ 86.4 254.375 null]
+>> endobj
+2846 0 obj <<
+/D [2837 0 R /XYZ 86.4 236.681 null]
+>> endobj
+2847 0 obj <<
+/D [2837 0 R /XYZ 86.4 218.986 null]
+>> endobj
+2848 0 obj <<
+/D [2837 0 R /XYZ 86.4 201.291 null]
+>> endobj
+2849 0 obj <<
+/D [2837 0 R /XYZ 86.4 180.727 null]
+>> endobj
+2850 0 obj <<
+/D [2837 0 R /XYZ 86.4 156.913 null]
+>> endobj
+2851 0 obj <<
+/D [2837 0 R /XYZ 86.4 136.728 null]
+>> endobj
+2836 0 obj <<
+/Font << /F36 728 0 R /F16 717 0 R /F8 729 0 R /F48 966 0 R /F38 773 0 R /F49 967 0 R >>
+/XObject << /Im2 1084 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2856 0 obj <<
+/Length 1707      
+/Filter /FlateDecode
+>>
+stream
+xڭX�n�F}�W� Xk����M��i��H�@�+�E�$�������-:6�<i/ܝ�33gfx[/�^�~]�.�y�%$�X�-7����b���So�y�|D�
x
����vs��v�������|A��
}�G�O��nޔM�E��U�W����0`�Ze�Z�?/_�^.g��(4	<�I�����>}�
;����Dz_�w{O�0�
+�v��,Y"=*�M�Jh
YS�������z*�J0��WuZ窱Ӵt����Wu�}�Si�j;�;���!�ry-OP
��D2��&/�8¹��4@\�/ަ_�L�ʞ��N�aa�q�9�
�,O�	1"$�&�w�c^dVJsߴja%9��_W��6MC����^^�ӛ4�&�����|�}�E�Qna<�lAC����
���S�9�äӏ���)���j���M9%a�:�qj
R?��s5M4��n�ͽ��qN�U����-
|�}U�����8f�Qu#����|!��2w��W@�c'wSսƍ�o�!3�
�R��Z�S�r�H�ZM�!;���^��
��I¥쾻��c�I"�Sl'�IHp
+�3�u8�����:�i��@Lij��,�D~7׃�~�18���x���	h����̖r�:?wi�5����^��_6Fd��%�o�kX1v�
�89�x3��#�)OW���Db(� ��ꏗ�	� �1/��8�ߣM|�eO��.�."���)L��z��vy��̈́\�I�S��4#�b�xy}�׹���\����0^�:nwz&}K*X�O	>|�ת�3e�<��,@�E�c436����'�% �!vM��"��TĀ�G�M`�]�i֍j���T��7�o4�ո���ަe��ra�Pl+��
W&u�4�����*���8c��	~�b�x1�%$W�L:
�O=-;���5�����DW��RG�z܃��0 ��"o��
��ZmT��u/��.5��dn\�ՉRo]�|x5�>��
U`�<��s
�؃s
>�y�XDZ]�
�c��Ue�XO��
+�Qi=s�':�7���0�!_���t4}.����W�8�k��|�����U�4��5Ԝ�=��0�I'My|.�EIX�q����J3$��U�ñ�ɘ����n�Uh&�(~�9�b
6�t����
�]W%t�XM�U��!��h�8Bcd)�# !6�5,s��@��#�������B��
+RLT�u��1�Q<�@�(:
0����܅�C]m�to'�2��ʪ�K�|�h��vީo&0
��v���s��V�8�6�f�:G钔>�[��

�
zo�j�x/��;`��e�c}�=�J3(�2���f�A���
�*ƽU	
͋�Z;�h��K���NXfg+��4{� �
�%�.�h
��$cP���ISۚ><��	�f��
�>�ْ	�	zً	(��
�����&^�
m@̸�e�A�C�:p	���L���Wd7}����LX����T8�-����O��
	B��i	Z����Rt��^���ؓ�.$4�J[kC���8v�~պαP[C-���u���&A�Q�Ѥ�
��}�e��7��I��V��X����o�Fm��9!���@���C��r�=XuWW���Ž3�.\y��h������c"h�4�����?E�X�UO�3�}��ZH�B��:	�8�$QX���՚�b�
+q/3[�\C
�� ��P�d�����F
+endstream
+endobj
+2855 0 obj <<
+/Type /Page
+/Contents 2856 0 R
+/Resources 2854 0 R
+/MediaBox [0 0 612 792]
+/Parent 2818 0 R
+/Annots [ 2852 0 R 2853 0 R ]
+>> endobj
+2852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.922 578.75 484.135 589.598]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.1) >>
+>> endobj
+2853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.616 578.75 523.829 589.598]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.2) >>
+>> endobj
+2857 0 obj <<
+/D [2855 0 R /XYZ 86.4 726.045 null]
+>> endobj
+686 0 obj <<
+/D [2855 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2854 0 obj <<
+/Font << /F36 728 0 R /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2860 0 obj <<
+/Length 3256      
+/Filter /FlateDecode
+>>
+stream
+xڭ]Ms���W�h
��#��*�d+�T|�݃l�c�ȶV�l��%@M� 	6.#k�|x�{��������oW����I�U`�J��^y����������/�f��Vyu�����z���כ��_m_�����p��~��^_o�������3]��Y?m�ǟ�Bo�M�Kk�%w7���|����߯�+���]=�]��_=�����L��Ow��J��$��]���_W�Ա�Ϯ�
�Sr�W+k9
\
�z;�� M����O���O��
��=��O����x!nB&DH��Ri��>��:�K
�ļ?(��V�(��"6�W
-�qz
�,s��ư7A3

@AO��.���
4����)��Y<�"x�����g
�/-Kc�E�2�Ň~��w믍���K�;8dʙ1�F��
g�$�e�b������0�5���bi���ܧ��eF��>�G�]��@A��D�

?�c￱��[)��CI;p�	�FI;
��>�����
>6 Vv9�^ɡ�1ki� �
V�Q6�LQo0�O7�&��|��0xIBȩ�ӂ
"KX�Q����2\��p_̌
4�
���#��y����PY�U�
+2�
*0����N#h|r�	� 2�`A�HN��(:�ǔ�6Z�m��L����^� b���5�"�I��t����1:����(z&Wy�
\Oq"����*O9�>~���o�+��i�~�t��"T���'
�y���QO�L����S��j���

����fǟY�Z
+ح����F/ih
�Y�j�����nA\���k0����~��z\>t��yU| ���72�oo�K���\ڰ�h� ��U�Q6��e���6'�L`��=�>~;t�
+�nAC&���#�������&g��|p��E��Ϊ�(;K���.X%�}�6	[����h,%��2�R6VoPv�S!� )2�s���e�򳑆I���tϟ�g&�x���TV��^�B�����=l� x�콰�C��^�3��
���7�}}�y�1��ў�x��K�Q����G��g�-
�$�@ã=��m�4蒑ɫ%ӲA��� �߫��n݈k6��P/�9��m0
����_=Dy�ŤY��ЀD�-��E}��;�}(wq&aIQ������}>�x5�(�"S@���	

A�4�
m�N�	��mnxwc��z��n7�t��׃S7>#]4h:O ��t1=�s�EOl4�v����FA�f�����N�t�;�<ث�LQ��/���L�cΒX�"'�Nfh}��sH���aq��>01~Rff���ɾIA�%�"%
+��E��
���(���F�D�k�c�yەSIJ����Ao:�7=+E��)�/3�x�#0��Y�v
��,!=��We	z�R����Ա�DQ��;%�����A�Q
Q�$��(� U�I��I,���k�+0쮱tA�5;�3o$-_��
m�/�d�������"_�w�/{�塜1��xp2��d
z�y
+��e����1zB���i��E`Ə?THÌ�{��w*�
ܩ��^��je}��!�s���%�F5Dyz��)Ò\A'�'
+&�<W���-r擭5�(�"[�����D!5S>4Iұ�6�a����Ӧ
���<�H��Mo:�7=/`��Y8�"`_����)O��P
W��FC�q�[���ɡw���?cA�Z�A/��O�h�H;��!,K���M琧��W��Bܗ�['�
�j���8vVҎ1�,<bʯo���A��Ι��a�@dͫ1ʚs͸53D��0�8bH�y����9���-{�L.{
��w
+�"��r*~Jҁ,
+D�\=F�r
+X�M慎�����d�y`��[�7:��7Lm�h0E�d�X����F��F��(�sX�b[�P�El뱁5ڷQ=	#���0A

��g5FYO뙤�	*4�g.�����B,�dj9n��}��uA��2#�5��A��.��(����Tk��⦌n50�ÏSM{����|��Kפ���qZ
!@du�1��jX�@S0��-��l��mw*\���ъ�-��>��s���٤gn�|֤��l�e��ȊJ �(��l�������Aw�\G�%v�#v#��v�ïI�MG�;�NL�sO�� �MW�Q6���
1��qM"
f�bv�n��bqki�#�˦�;z�İl:���t�He@q��>��qy�P޹]��Pٳ�􌍀M�y�����R7��2�g�n�*����	(سz����V]�arCx�F=D�f2XƗ��l�!�
s����� ��j꺡�v�kLZ��d|�Ԛ
�
+;E��?��;�Dֽ����L3K���Ck��P� �
i����|�5ve9'��L/�
ӛWe��lg����"ۮ�l;'��T��2����\gW���'��ţǘ������J;E�d6c"h1� ��V�Q6|JN�q��y���L��)c��/vZZ� @dE�1ʊjX��@U4���M��s��+-� �y�L/GLo��NQ:�MI���7D�[5F�o
+�AS�(:�~�|��M�JΜ!U�(Y�j����̗"�@1ʷ��9W�%�<t���p�g7Q{�H�
�=s�T{�@d�Uc�
'��'@1�I@�|P�]:n.���-T؎�1ۮ�qV
�"��|"X�i��)�|�e��s_�
�x�6�v���K�5���/��o^
�"92�%��~r�un
^ $O����S�6=T �5=�ߠ�4WzMϪ��;�kQ��:��'�`ި��������ޤ����<_vg�@~���^���g ��f�$�j��p��%'�p�sq����R߸g����n(���|S�S�V��<Ӟ�3���|c'��'}C�ȺWc�u��	kf	?�~�̩#���˗��h
��ē#

tt��������0�y{���⻦����l�j���⻷���*0�l~r
�s�3��<Ƒ�e�!rS{���,Ui��)�l�e�i�����6@ѦI��|P�Y	JN%��~��&*��������
�@d�Uc��&a�
�or����SWa��l�WH�
��G���Vc���|��x"&_џ�/�s�0�@	'dv9���MT�)R'�q�<���p�e���k�D���M
+�+��d�rˑ�e���ͪ.S$?><�B�]5D�u��;�t bU� ����?��
�=G��,��M�.z��'�9�<�eB�Z5D�k>��N
p b]�����=
�V#�KV뱛��A���7[�
A�$�?��h�
+endstream
+endobj
+2859 0 obj <<
+/Type /Page
+/Contents 2860 0 R
+/Resources 2858 0 R
+/MediaBox [0 0 612 792]
+/Parent 2862 0 R
+>> endobj
+2861 0 obj <<
+/D [2859 0 R /XYZ 86.4 726.045 null]
+>> endobj
+948 0 obj <<
+/D [2859 0 R /XYZ 255.116 672.857 null]
+>> endobj
+2858 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2865 0 obj <<
+/Length 1940      
+/Filter /FlateDecode
+>>
+stream
+xڭ�Ms�6���<J� ���ӦM&�i'�)Ɂ��D�Q${����
�	��dY�]�>\K�7_��1��jv�L�7�4W��3L5Vzf at 4W���\r���
������޽��qq�/@��Ņ��t��/���_W�?���?��M���q�}���~�9�Y-w�ŗ���߯f?g=��5s�47w�O_x�Ŀ�o8�����I��i>����+9�y�2�\�p�	��@��]-���z�9
0��/�c�oE�
+es����u���&�F
>�۬�w�n�����e�AͿ-�|�E�]�O���\�M��k~���n���q�X��^�(�l4�8q.x�$mb�D0-�9
.���I��^���̡�=D���r!;Z^�]X�$����X1)t����%��1a���0�M�4��rbܣQ�3 g�1.�w>��mo�8�wˎ�*���0�B_B�-SR%C�P�h=�%(�G�\Bw;�U
0�,�����;�w�+q��i+i�Tk�o ��H�c�\���I���
+t'⭐:�8^vH~[\8�6�>�Z.q
f�@
+S�}%O���nЉ<Q�D>���Ic�!�@������Ra��%@/�Y�8���h�#��9�8. at zv�����CH+����깱i��M�X�~$$�2F�@"hD��5� 9��r� �h�� �v��������P�ً�Q��5��D�~ �hf9�4"A�y�
.�}q)���OR�R��m�{BD�ӌ�FD(u����,A���40��5��	����K\����5LR�R���-��|��<�
7y�2I�BȤ�zb- h�LVk�3�;np�4�8Z�IjAjw�]o�])0ܗ�����z�;�%�!�S�b@ЈUk�\$��!
�	L�Pjw��>������� $�/��/�?GP�`P�s��A#�T��GI�:�W#
m���������v�:�BJ��gh�ƎA
r�v��]���ڍ�|�񕆇�-=���	LG�R�E��n7A��$��~���I�1�duT��
+ �f
t����b�F�.��h�M�D��D���C��ae�q��
5�9�
+`H�
�sy��HC��� nۍ�-{(1���|:�$w'�
@�滘�x�i� \4xѷ���S��"�ȎD�RGʚz$L��7��
�hD��5�0Y`RC9L8^i9L����SN�"��~D�R?�{$E�2+�%��)���SdÇs9E8^�IJRj����h�=�ȎD�RGF�{$EJ3|~�("hD��5�)\�*YN��j�Z�Z�k��r��xlj��sY���%����\�x�&��������
+ُX�~���H��;�5�A#bT���H�*JBw�
+���O�|
+��D�&���f��GB!�ĻH�hz�D��V"���S��7�L�Rj���G�~�@�g
+�}�V��.������~�c�o���`&�[���tD.5]���f���H�@���|�a�1g��
+GWu��~�Xa�2n���̹���
�#�G[�ҍ�,
w�Z#{t�H�ל+���p?�8���)���k��v ��0n�A	
i�&=����4֒$%5�aG_���AЈy�����#
��e(�cb���
%(�7��Aٷ�ܖ�ǟ*Ɖ�L�)u��5I"@eF_I�CEЈPUk�2�I���9�t�8B�Z��I�
��"��J}kQ�H4)�,�4E#�T���I^Y�p�擔���s�RzQ��#;q��|��DB�	,�ij��HS�F�&��[e�h�9ZMR�R�u�JR.B>��#�L�h�|Vk��xY�O���$�!�
[�`|yq ��Cߗ��%	��� �ǔ)�j�<N��PY
�#Y`��)�~Һ�V�b��
E��
��/IH���\�N)R4"V�y�0��UV)>��ťX���]�
��(Ɗ�Q�*�h��
+V"���:8��7��A�Ǐ
+endstream
+endobj
+2864 0 obj <<
+/Type /Page
+/Contents 2865 0 R
+/Resources 2863 0 R
+/MediaBox [0 0 612 792]
+/Parent 2862 0 R
+>> endobj
+2866 0 obj <<
+/D [2864 0 R /XYZ 86.4 726.045 null]
+>> endobj
+949 0 obj <<
+/D [2864 0 R /XYZ 238.927 547.3 null]
+>> endobj
+2863 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2869 0 obj <<
+/Length 1534      
+/Filter /FlateDecode
+>>
+stream
+x��YKs�6��W�(�T(� ��-?:��Jr3�$V�$v(R�Î�}���J8Ӌ	
,v�o��c�-=��^`���^�~�|�b$%�t��qO�+�7�{�:�ͦ�c���y�
FJt.�_�؝
)_�{=
 �0���.l]&v�U��E�t����{
+$�n� ��N饎�.�;/�
�>Tu�
�Q^�Q�v%�.��t2���,6��̩�s@}5U��	�cT��q�rz�a��Q���FBg
+�(�avZh�v{�s^�:���kL$BX�t�A�3�:/Q�2#n.���
X�u���N=w�1�Թ�]ݥ���*�
+;3��,�6E�&v"]
iX�0��%�J8b\R	�(�5$�t� *���7���������ðG,��Y�›�/>}��
V�9���Rɭ=�Da{��?-M��a
e
+)E=�D�
��������
�GT�pd%j�e>��vg���
.o`���9C��3��w�
PĔ�8e�b/G�f�KY	r|C%C��o�$X"�����u�qr
��*xj_��A�?�y�1-�&T���I&�`
�Sojr+�`{W����x� �m�p��y�
�y���/�� @<Pm�n��������jz?��a�&���`�ڽ>i\~o�U��˕��(��Y����Yh&����S�[�9�qǍ���t4lJ����P�lc�u�(���o�(�;�
G��朙�dGce��2Kr��%�|S��E�1��%�:�W^�ֺ%�H�$k�.pg�.���R
+y��V�RH���+�LN �!�avHѷ�X��gF�U%y9��<_�.|�K� 	� 	���j��pW�
��?>=L����q��D�䊡��i�j�Y�ezV��u�"�^�T�9��:ɣ"z�
+WG�� �iK���BQҊ��(�t����ƃ��ܤ�K��!z� 0��ٛ�H��$�
+�m8�R
8���!v�C����tϢ�*�
�"'��
����9E�7�
��
�ڒ�j0�6�V
�W��'3�U�37送/���3_˴����	7��j�E��fY3m�N�b�=��7��
++0H��N\�� ڠ�bi6י��(0-������x=�9��#�({����i��hNz Ҥ��Q�8�nF��q�7�
��A�S����@d�6ˡ
_KXp@�
+H� a�`�v���%,�SpB~��߅3/��
�'�?BTTh
+���@��3�<�0RH�����R`�G`�?��
����m��륐Z��-t���YЀ� HY+]�λ���~:h�
=�ھ�w:[Cun���3[��q��v�X�:����(�s�������������
ھ�]�ĺ7��L�����$]G�����9E-0۴[�Q���A
+"�
)�\|o;�g�{my
�7��϶q@ψ`�A
q@�жЌW'A��MFTJ�K� 
+���u躕*�(	��
x��:ġVI�yd ��ecƿc���V,����J���f���u�8�̶�ۆ�E~�E��������H�v`��D�}��o���=�
Y�\������/�_��?�'�W
+endstream
+endobj
+2868 0 obj <<
+/Type /Page
+/Contents 2869 0 R
+/Resources 2867 0 R
+/MediaBox [0 0 612 792]
+/Parent 2862 0 R
+>> endobj
+2870 0 obj <<
+/D [2868 0 R /XYZ 86.4 726.045 null]
+>> endobj
+690 0 obj <<
+/D [2868 0 R /XYZ 86.4 701.138 null]
+>> endobj
+694 0 obj <<
+/D [2868 0 R /XYZ 86.4 485.931 null]
+>> endobj
+2867 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R /F36 728 0 R /F48 966 0 R /F10 1116 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2873 0 obj <<
+/Length 2938      
+/Filter /FlateDecode
+>>
+stream
+xڵ[Is�8��W��r�M,�rtd%qǶKN�TO��Y�H7�d��< �R�
+�d����}o�
L�&���ٛ�ٯo)�(�8���Dr�&�(�)��֓?����Og��)�.��K�t:˳���s��Uy��귳���3
s��
+�d|o���3����o� Q%'ߛq�	�
+hm&˳OgAmL�֦�BL8��?��>��g��1�H�o�H��1�a*[��21(��@������ݑX)��D�/�j��H�<[�U�gi���t�g��$�y�l
��D7�t�<V�+��;��
O��ω�V�,c��
�0�R@#r���������Ո�(��K��~JYT %A�2@�j$�[��JqD�t��VUeb�u�7zY���%V�h{���w?oӵ��Ka��ɺ.��������zvy3�� VǹBA�s�a

+�I��B@��U�UH���2����@�
+�CU��0C�qbu!��lrH�DZ>#�1	���E8��ꥮL;v�N;��8�����!�0!Ȅ)L��o�L�uRڏ���JDx��m�f�9������0ϚT��u�I�>&���sQ�d��R������@���X�A�\>�f���0c�ة
\;uO�u
'e�X[�=��d�X;-�u��.���Q K
�ױ�<����0g�ǫ�j�q��Q�"�r0<{?_=�ߍ�: U+�y�}���
+7b�(�?c&�Tj����_�?�۴�$2>��3m�(_א��ZV��K;�
��~�ρТ$��5Ps���a*�,���ՈT�
��`'D�
����OX��H�L l3�]R�g6@�y��
�c�A^���d�������������ݻ��$i�)�ƴ*���	o��ȦduC���M�#I�:�
�V���18Ωv�E��O�0?A��\��c+0��6z��1S�Ԙ/B����ۇ����J�Eh =��/�?��/�����m�[5���&Q LM�����8�:��Ra�l�����}�4D$l��:Ԥ�Ji���4
����fm�Yn�Z��E � 'b���f+����9'�+,
vM��^��!Ԋ���A��__�q�y���z9���~d@?����$�\I�B�v|���

+~�|��<����4�㺈b۽N�)��/�>�h
��\�;��.���
]()�
%;���~H�$X�B:&��32����I�C�%�@���뛇��X� [I�Ơ
jI0/�F��I"T��1J7��+͓���E�
nûy�
��g���v�&�ӳ4��O���D�P��<
��DvSi�n5_��%ݐ2����^TT��Sؼ���/�n�u`� ��������҇T�[�
��-b�
f�3�̭�xJ���`L�t��X��wX�t,�:5�
�tS�H��ҦMD���b�wk:���p|���v�$���Z>�>�X
O��)��a��^�3af�����^
ޕz�j7���N#e&��.��H�
�,�,"&-�=c�K�M�4ڤ����Ǻ�Іp��`	,^��T�^���.�f	���2�3/r	���� 
i�D�!�
DtOR��J�^ L�)���Ⱦ�3]�������pf N!K
+O���)LED
������
�:H�rO�T
�,�� m��/�M:��^�Ǿ��]x�f��k8DW
D��Gr
r/��(�2��/�>܍
�0���y�̎t x
^H�0��}x	�<'Շ3�/_<7%)z����H���oR�e�y
���v8��g���K@�S1'�����H@�!�Fā��4	��@��X�r(u��
��w9d��M�����M�A\����T}��V��h���)
W�
C`*�����?<u��	�!;<�5�脎sCv�}r0؆
�%��3��
��9��Ğ TI�5�^X�6ޅH�T�`�Z�ٽQU��LJ{��p7~%��ǃXǞ���ǃ`ß�ؓ4�xh�(ц(h�B<5
ҍ��v4(��D�2��I�LUSwf�A&
�i�{�����LA���F�@RH��Sq��_
 �&�>��t �`�B{��Aő(�

鰠���F�_��W�KO�MO��3���.�yu,�����5�IHq��L%���r;�=\�!��B���k�@m��y�K{��lsg�m':m��j}��R܏�4�O��oB���B�
nN�w�?��0Ĉug��7{�8���aB)=�
+�|�BA����&�R?�����i�~�k���&��F�E>��X�c渻bv}ss�\
�:r
��}|X��.�~�M��ǝ�|XCK����5N
+��&y�6'��	�	X�g
+�О�ߍ
�a�V�x�	��n ����f1?o!�K��5�����@FE:���Fv��
�
3
��痵�}5}�u`��j��
��F߅7ux�kWw����K3�*�=��m�
ۃU�j�HV(P��(���
?�~nr]�pW��\^
1hB�A��~8����N}���Þ;�
+v�\�X��dX[w���H��d�w�؀{OlͰzvwUZb���+����U��O3����"�R��Iu
`B
�}��x�#���jG��U�jfتa�
c�ݖqX��&*��C�*�ڰi��%���פuA���-=U at O2TB
�}�W�}�|��23(��ٚv\�c�t,}�`E\I�$��+���	k
P�S��pCLJP��@��f�����8�c[
�g����AE�>d��Ds�>/�ڮ����Y�ɷ��#J�؞�
+��|ˇL�o
D~z0�~<ۢn����ET���r@�T�v��C}s�IW�@}mm1�M���
+�[_��
P�M0/�!G�E����z�HuX�\w�ӿ�����Y�� �/"u{{-��@Jm_d������^�O_
i
+FM��+������B�瑎�
+endstream
+endobj
+2872 0 obj <<
+/Type /Page
+/Contents 2873 0 R
+/Resources 2871 0 R
+/MediaBox [0 0 612 792]
+/Parent 2862 0 R
+>> endobj
+2874 0 obj <<
+/D [2872 0 R /XYZ 86.4 726.045 null]
+>> endobj
+698 0 obj <<
+/D [2872 0 R /XYZ 86.4 649.263 null]
+>> endobj
+2871 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F38 773 0 R /F16 717 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2877 0 obj <<
+/Length 2426      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�~���4S#ĝ|�5�v�d-9�N�Z�-6�KQަ�>��H�̝E3i�D�G��p.�G/Q
}{v9=�斫(%�b*�>G�""�,%��h:�~
]6>�	]�8�l�����Ũ�47��7��u��ءY�ϙR4
1JǿLߝ�L�>�Q �#�H��Vg?�Gs��.�	O��s�o	�g�hr��,v_X$�
��p�#G8�o
/z KcN�Rm�T���9�<�""�X
���a2�A���A�HF=���>�_� 네)
�0����<< �7�n?�9j��sP
�����||.b6�4��M6��fSۦ����Ř�Qs���96�Ѻ����ySΚ�*�UV,s�'ḵ���#��s ?h���XB�H�sJI*�y�Y�\���g�S����-HI�$�a��	�j1n~�^��R �NK.� 1@�br����jb�
}r����(�ʈ��22›;��"�
��#���&7M�f�y=?T��D^gOK0�9��ׁ�$$�`#��� ����x�psuBO`;=��� ���
�'��k��k
+����8�VW���
+�v��GZ]asfMtZB�fUs\T ��Q=�Q��Q	��9ul�^��Lk�6OW�u���(a<��T�-;���`RM
+" &�	�څ���OAa$�#	[I܎!����8�Y=7#���6�`�j�עAN3���J��1b����!���UcN2���XJ_���(�^�:IT
�|r��T
�̨
���iY2�(�o/���e���z�K[�
+�M��`���Nz��D��N��W]��m��qS�����NQ��t��b���2���N�HH{Y���|P
��
+v�f��lb�<$V?��4d���}��]�|�}̤���p�mZ
Ǧ�j��us\s��Y�(
�h
+L1��!`;M��4 �j�
�)/��">�^���=�M6�ஈ�y�|@�^Rk��3��I��$�&R���`jHR��
;@T���\�A�~H�}!Q
�&�h\�uc�2���}�OC��RZI9Q��"��rsy���#)cA@�"��>�]_J
o'�	Bz^�у������B�������ks\f�K^��f���9�F��w�BO��:�F��G���q���%~V�>n�f�_ʹHR�y�є���2&�)c<����J�g,e���5|�
+B���u�n[
+�cZj�5���k
)���u��1)%��ǔ2�.e��$QaHSJ�A�LX�!x�����,t���{S!	�g�?�e@�m��S��o�2!`;Q��CD ڊ�E
$���bf��@�����)fB�v�ra��* �U��<HU�jF�g���]q%$��]�v���}�8#*����1�y�
^���9$��{��<!L%ݠg�V���7���j�:��d�p�¯e��ƌT�G(It���#���9
+�[�;5-����a���C`�
߃��~�_��tW�ѸK/
_(��Um���6�����A�%̣lY��X��q.~�g�DR
��z4@A LK�
y���
+�D
+��y��ꩥ����˰jn\_��`p5���pP�fmMq5�
�i�q!/��6��.'����)�����s��!�z�Y[ff���I�� ��'`J�z�TP��N/�>&�u�0��q�E[���\4��6��mS�1s�6l��
��x�6�����l7�j�F�l;�s�0<�ܠme�(Z�,������"I6�d�U,�H�RAjd4%Rݕ3w���g��T��	��
��
Q;��V/�m���Th�..
+�lu	

?xg�O{�+L�F[�B�}Ty�i�F�
�R���6�v�
į�AJ��
�d��X��B�Z����{�T�� �����i����lS�șlSκ(_��7�bۇ���^�0����J%�\��ð	���/�����}tB� yTN	K��
+�ezHg��.�ڲ�.9�R�z�ֽ���O�j[-���\;V!1HR.��BR$�2
+9��]�4_�VG0C�
گ\e��oF�c/����+#��bZ%^���ea)���e�+S�@҇�<^]�Lz7#0vtc��DL6�Y�^?o�6���{��:o6uyd!!�%����o֚��f0���~w���X��J���}�;M!Vr'�ur��A��bYg�ռ�z�qEP���@���3V����ۯ���*w��.#?�$ʼn�ۙ�?FP<�l��^uq�Y�d߷�V����03J�_�������%BA����zD^1����ؾ�<��/��/�EA�n�k�J�d��3�m���ɔcy�`�.b�s�襘�
��2�%Ć�aL��΁;3�G�G ��x��?<N�t �-�5�o1
�-�vڲ��R�[8B���!�z��\4
s�௭mk���A�{Q��dW������
+�3�
��H/���b�$V&��0nr��G���
6J9�
+endstream
+endobj
+2876 0 obj <<
+/Type /Page
+/Contents 2877 0 R
+/Resources 2875 0 R
+/MediaBox [0 0 612 792]
+/Parent 2862 0 R
+>> endobj
+2878 0 obj <<
+/D [2876 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2875 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2881 0 obj <<
+/Length 2303      
+/Filter /FlateDecode
+>>
+stream
+x��[Mw۶��WhI�����U�4n��Uv6=]�2m�<�r))i��߀ $�")*Fz�n������`p9���
�9�����L�R�J*G��#-)�"����n�[B	
O%B&ӏcF���.f�F�d�*כ�
3�l��߯/�.���8#�7
ߗ@���|y���xt�\�0b�
}��-G�����b4;��n�����R��R#	W�ԃ�~|�nv�LH���MS���3D�ށ�JME����/-�L#IxLN�4�|}�����u`0.3���L�xB��9��x�̗��/sϒl�X�'T'�lS�J�������}�ϊE~�,H0�	�Q���T�a��a�G
�k�4tU�^�O_�\M[�E�Q�%ER����׋��_IP
���H������p��W�E�l~�-�{���}Q���嶬��j
�}2��Uv�p].��̫\�a\�ag�H�4t5�����&�0��)L=f��̶��&��UDj�B�(��R���}[c�zL&��$�<u��`�9���� [...]
+ $��(��&u�}�ҏ-�
���Q`��^ݼk٘�@�I*m�JU�,�ͬ����­"�l�]ۇ�3s$y.�
�s��������O��:�I��
�Oj��f�D��9�������"Ä�m�$�)Ĩ���0Um	H�r��\��+��Bp�?�H���o˫��p�o�o�ߴx�F�6��/rb!B������b6;t(BLl�6�Νf��<_��
{Ð]�mUv�b
��`��OZ�VC��z���A��c`r�����6�H�}:ٌć6��|���O��e�(�$��Y0 �Û`��x
+�;��DV=l��!,l����r8#ɐb��e��(F)�E�V�b�;շ$�^�YP��r�+to
+1Pݦ���N
X�{����+����+���kH��>�̅S��W>�[���:�>�~����F�tl��fI��0�
E�l�qk୵tG�x9��
�Շ���
�
bטz�2H�N
+�%p�%�
H��[g���s�y�Ml�`�l��G��qH]�~w.?�s�N(�T����
� �1� ��~���m�����Fa�9\u_���}�ŀޑ��
�F�E���1���ֈax�Jr���
�G ��o�2����aUf
k�
�X�޺��?l�ٍ=;Qۼ��`
����iZ�+�U��f
��HIW*8 � �Si�)�0:�
�����ǚ��cV���ɺ�s��c��+O�½�J�ܡ<���Yi�!���|��tjR
��^R��UQH5])=����� w��$���:��)}.Q�gkJT�!Q����� �a%*r A�^����10��
`�jT��j��HT-g
+�_�qp
��B(}ֶ^���
h*x
y����~�a���1G�v
=��L[.H
�.��Q7�W%uC�3;�TƘ�銦r�Dz�n�
�F���4y�p%IcL��P�$�Qu+��A���[�'��]1N��
�7�@uys�:H;;M����)� ����݃7��vA���i�BR'��B*tŴ�4|�� �F ڡh�㨢�b=�T��9�1\��:9�ܘ�bB��1I��a�YU�4p'-|L��͏��KT
�z+�+Q��i���z���NH���{qw� ��'��]q5h�� ꝱ	�
�z
�>�H�(Ƈ����/ϧ=�9��}�����x ��̦�AMrpp	4l��M�j��@�
_8���I�b�y\���s8R8���?�\
�'���s?�]f�s���~���8[?���������7ݕ%`]aI�}ev�����7�s�W;���
����m���]!�~�n������
�y�u
�'�"J͖�Jzأu at 1�
]�К-�M�l�s��~��t��2�3��
ƒ�6��iQR�8K�R^��׊����{��0a��o�,�
6%6�^+��4�~��Z(��
��2X6�����̧�]����D9��
�R
�+��I�9$���g޶����'�5'/��L�
K& �4!iO���ZG�M�����J����.��n���jj�lE����
+��=�lɡ��`��Q������-�����*0�B�ð�ɗ����ÐJ(��l�I�_��U���!a�q�t�D͖�@}�@�%�g��I��q�_��5[�����Ln��-��m͖�#��
��2;�W7���Yy mz�'C�=
.�C��Ɍ��m�
+��`��
+endstream
+endobj
+2880 0 obj <<
+/Type /Page
+/Contents 2881 0 R
+/Resources 2879 0 R
+/MediaBox [0 0 612 792]
+/Parent 2862 0 R
+>> endobj
+2882 0 obj <<
+/D [2880 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2879 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2885 0 obj <<
+/Length 2345      
+/Filter /FlateDecode
+>>
+stream
+x��[�r���+zIV="���LK*�<J�7I-�-��A��<���E bO
+Go�f
�i�;�6qv��������/�LfIev�%��LQ�$#��4�u���i6
2:x����~��n��ۺ�MV��6_���pD�$x@	�~������3�8#@ �e6Y���;Φ��F����r�"�� 
+W������>0ו61�2	�O����7^��9�&v]�
6Ҵ�3D����xBF�o/��`r���I0E������
��eu��)v��1#>
�w��
�b|�(��{��|���`�og����.������%�͋)r ���b،���	„'�}����J���/8bX$A
+q�b�w�����dO���~-
�Lf:�{^��F/
�ݼp7��w�\m���`���}�-a�|>��?�/?+�X��H�Tn���YG��`r���1���׵�H��`����-����lYL�
9��Z�io����.���opC�n��zu7/�gN�T̜�̍�e�!PTDP;��:��S)!�(��#�����{Qgs	&��J
+�e1l��I7��+��J�́�|�7��wKc�?;z7�CI���X��B�z�
�
����$P���'��u��W�
��iJ4��T���%o
�k�/QL�)���x�����#6��;��G��#�X���u	�Ɵ����-�D,d
7��^ר�.�
+`�)��I�x�i<���9���{g����-����b}�肁'�c{�Z��H���X LŔ���u.����$������A_~_�<�Uc�®�n�B�d��������
�w;
�_���lf�]>�r�p�&�Mw��$)pL4	G0�^����>7���>JF��I�a��=A��^�5 at J�[���60�n�%�8��
`*.�2?^_��o�3��>c�pRvHN���f�����(����q�i��������
+���ڏ�'��z�W���	��Ҹe�N�8?ܼ������aKU���#P��14��0"Ƽ�
C �e/
�VI
� ��>���n9	5
�e]�U�v��k�=�!�)�I
i,�A�緯��ƴ ��AU�m$@�⨂��Q��:���f�r��-����km�V ��(�	���.(G:�$`"|��mK�<1�b��J�)�鈊@
2U�Z
@�L!��:�Oq�v����j��z�z��@hIP
+1�TPv�
ȅ�7hHx���ũH�É\�ȡ
w�W�U\)�t\���1F�Lo��!��3��A���aO�
c��IBL%MOo� 6x�
+l�3O �y�ӻzo.��)z�;����n�4K�9=�װm,�%۩����^n�8R�:qD������)�N�4O��kة�v�W�g
1͒@�
��*d}G0AX����Q�<�ۿ�
�]����<H���M}��a�{3�sE�LR L�����PP��6w�R��X۫��ԨPD��K*_T҃}J}]G4f����&�85�<��J
��P��O�F/���5z9to�e���F�v8b��$��2<Q
+QpH)�]�֔<�O�#���<�O�#��
�7E�d/��#-o��5���
+D;��@(FX��$!C�2�5t4�J��}(��^-�?ܿs;��Pr�Za�~���t�2���?·���\��aX�\3�k�o2��ov�iQ7��-����[����Œ5�}��7x(%�v�������(
�6�QlTN�F�X�O�I��T���>��h)@�G{��G���c��%딵H�LŴl露d$�OF"Ԇd��9�����Y����xh�6�R܋ 	`�{ l�fCqF�s�t��y����	��Jv�ў����*nC:�9��&A�
+A�@�h���vS��þ�C��f�
�|���q:l�F�C��ziT1{H��R�&s��+��a�TB������!�VQ�N��{L$	�=�1�+7�0ϸ�ҡ
+
�W����@�������!C�[�l�`(A�nO%�Xu\��Cد���+a.��TQ]o����N%�;�η����=�mw�)P�w�@���1�>��J�<`�1I�S�~Ya
+� �j�4`zi
 �	�6V:T�(��4NC�sf��Zq����{
a6��w����J_.$���Ba*e�[+���շ?��
�-�m�?�ȿ�Y��S�.�����iO�S���<BmO�S���y���X�P�g�X����:�
q
S�SU�R�&�u��!��:(�ܪ�T�g+�h����@^���[�v,�I�
�a��t�~
E
,�,�b��:R�������c����v�]o�
+endstream
+endobj
+2884 0 obj <<
+/Type /Page
+/Contents 2885 0 R
+/Resources 2883 0 R
+/MediaBox [0 0 612 792]
+/Parent 2887 0 R
+>> endobj
+2886 0 obj <<
+/D [2884 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2883 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R /F11 1019 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2890 0 obj <<
+/Length 1389      
+/Filter /FlateDecode
+>>
+stream
+x�͚Ks�:��|
+/��E��Ҳ%��L�> �t� �I�����~�{lYD�F��&�������y%8z�p��n�{s�d���TF��HIģ�j$�&��kL	�%B���>��dz�~�X<�W�b��3����Eo4�����#bm	����e��7
���#�U�Z��8ӈ»E4�}�a�ٸr�MSĒ$��
+/�Í?���'�f����!���%�"�E�:�x}��
vʃ@�DZ��������]�Ҽ<<���bJ��>xg:_l�x�����k��8_����-�d�
����<�7i!�N[�	r�
+#�*�����Q
Wpİ�	�5��ğQ8rM�P�M��p�˂�Ds�eV{y��.��Y��f�b�/���N^�o�q���~�J�9���{�H63��&
YL��Jy�C��Cj�E��(R`�¾�|��xtX
�V
.�C
��8\��8�sq\L��n>]
��2�
��"_�+�9��^p�� �/�.\�&G�s ���.��
�{2ijBȪIm�䈂jA��h�6?�d����������A\ fBH�sȌ���]�@�B�n('(�	���lI�b� �9�x�ZK�j�C4��.�<ޥ�A\3�h�-��/����1`S�]�`2PY�@��/'��\aU��A= �u���P��Bo���:F<ٹu at _׫L�}QUu�߮N��Qx�:(A����`
+3�Y�Zu��u���p�~�8R�B-�ix�
+Z>&p�)
�|r ���.�#�����R(Cb�ٮ

p/ex���h���f�Ao���W�n�?J�\DBq胅M��}v�c�6�o
0 '�����穙V,`[�rÊ���h\
 |�,�c϶���n�I�J������ q��'���W_Z�S�`�Y-�x�z �$p1���p4
���TҵG�k�
wS����N)���5	8-����⸭��p�
�)  A%��yv3
��
j�K{*�l�w��˕>�ɬ��sﶅYR|�l���϶Ӆ�n���f����h�M���-D&��L	��ô:���ֹ�Am��A*���i����
� �
�dG�Mca��L�@{�\��4��3��qUh�[#� ��=D�m�+к�@hUƄP�����۲����p�
�@��p�
���fh]��)���LI}���Q9 �Fez��
+5
�����S��3E�/�,ĂD��T�ı9Z]Q���%U�>GS��ߝ�=k T��Ou��O�A*Q��-��2	r�KS��
+�!�u�w���{h
�]聮�c���t�FN�t)@
+�i��
�U���}!�V.�C�V.�O���;>@b�2L|�P���}j�����>դ��o��ZS3��.�N�?HW~
+endstream
+endobj
+2889 0 obj <<
+/Type /Page
+/Contents 2890 0 R
+/Resources 2888 0 R
+/MediaBox [0 0 612 792]
+/Parent 2887 0 R
+>> endobj
+2891 0 obj <<
+/D [2889 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2888 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2894 0 obj <<
+/Length 2579      
+/Filter /FlateDecode
+>>
+stream
+xڥY�r�:��+����,
+  >�Sl'�#;������,h	�0C��$���O7�^T�V��xC`���0��
�>�1W���
ދ�
e'1�&�^ҋ8d������3O�)�U�Z��_{�'������iF�Xi½�OZ���[�}�+��O�/�������X��]�T�'���%�Ϧ�>���2=���z֘��#�Te�k��K)�E/L��Y]
��t�7�~�%����l�
�@�փY���
�k���
!�
b�Y���y��Y�C�'����z��������_g
�0�{\F�H"O�$<�˳oߙ7��[�"M�;u�`�j�7>�� ڵ0�i bew�\Й�&`&�ɢ��LϨ�Z��[�2kY�E��ژ���D��IE*wM:�f�\ϳ)Y4ʃyi�8��?MV����>����0�i����R�aw-58�u�+X�
X\tZ���O���T���D_�sp
+��n�ʕ�^�B۱�ϊ-��KW~4�l	�[@;����������3*�Z+V&{�u���O���hjta
G�`!U�e����=x/�]\݇[K���
�`�J�[<������3n��U/��jݸM�|%
�b0���†�
�D�ƙ��w
\�	�d
+�{(`�{WZ(���dm�
���+w�-��!@��M
��f�#v��nd�YM=��,1���{_�F/�.����+��u9
����V��:�f�P���R(�
� ��L��� ?�x| ����<t~
������ 
.!Χ4t�s~f�
-�
+��4
��z�)��}`m�ֆ�YhZ�5;�:���nS��Inܢ������Y�� �2X�	���g��o���`G=3�"�yWD����S�X��r\���UOqf
+d=�se�A�~]4f3����]Y��$`߁������"oBE��U|��?�|.��&<�4
�J��!_
+�أ6.��9���Ţ�Iϑ���#C�9�E����͹tsvC6����
��m��9��f��!�Zj�{��K����04�
ה��U>��ϕC��Y\.� �
��ֺ�����mY�2ܠ6�ʿ�5�n'�8��d�~?ށ{��楋o�<�ڋ���Q�:�*a �C�r��6���
+��]��Ǯ���,Z��Ѐ��a7��ʂVR�B��[Em�!V
�7��<��4n���1
�I�LJ&�
2�d�e\�@(����h�
2����
�n��J��� �t���)&���|�j�I�	8L�$:
����iB{��cq�zF�u�\ǣ-]���W���
��v
+�g���@�2�O	h�F݌��G��9D<�,�MM?e����x�m���\?U� 2�)Rn	��O at NN0���p+wΥ@X]�q��Ԡ�K���a�����
��

t��� am
%m���j#�b���D�\��W�L@��/�K����Y
�\JR�F!�}�妝�rg�4�1�дljSڤ�li��3��k7s��˪Uc5�:�
�
�
�I{o
+�:��[U���|�J��˚fn ���	�7 E�d�����"����?��)
+#�6EA�-�vD&Ω��=��H��#	a{���P�^�'G\, ��O@���g��CyY.tAU����\��u�Ʊ�`�R[��ڇ��i7i��ZOq梠X�)��yQ��~Y5n���Q�nh%Oȿ�cd������~�
3�+
P����e�@�(����j�>��}�k�U����V�e+�g��[���p�h�Ӛ�{�VvB�K]l�EmS���A,1�
'
�(ǥ��T�4����۴CBR�qxt�BJ	�R�&�6�D��V!�?�u�����Ȟ2M��
���L�M�ݝ{v޻5���)�� ol�IE�ѼQo8%e1�~
�����9�e���Tz�PW��l}l�
�����k|�i���Y�6�T����
Qu,&�
-���
+9� 8���mJp��
.��1�$
^�x����G���^.5�mD����n��7!ڸ)I0�_n�حQ.t�:�����W��ʢ\״be���i�U��

�W�{_�&�{\���ı}��<[׵��
]�f	��T��p#O�y�
Ҿ��C�M|0������q��4	��0W�l+S��R�F&Š�GG���R�@�H��7�%w����vN��F�]iS@����NP�j�mDG�
�;�	h�~" ���d�~��Q'Z�AF��&bT��VM`�^ɠ
e�\�ǐ��I�oeNe�� O�j�ԫ
d���X$m�w�Z���E׻K
�L
B�Zn���M�-��Q$��z l�
�&H)�Cz����@�Q�㸅�6� +kݷ>PiM�Xg��ߙ�,)�0��f��Vؒ3�pI=t3����u�D�W���^ -�YuR��y,����������0:�R./d��d�Y
�~;9�����a�Q at O0���1i���&'{#��x�-Wƾ��pi�Y"{�&��+|ݕ������
���Ӿ�a=y�^j\�
$\":8B]�=j�6V�z�_%��xœ!��&��������${r�3|���y�����jm���
*9�k��zr�?J=x�
+endstream
+endobj
+2893 0 obj <<
+/Type /Page
+/Contents 2894 0 R
+/Resources 2892 0 R
+/MediaBox [0 0 612 792]
+/Parent 2887 0 R
+>> endobj
+2895 0 obj <<
+/D [2893 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2896 0 obj <<
+/D [2893 0 R /XYZ 86.4 566.755 null]
+>> endobj
+702 0 obj <<
+/D [2893 0 R /XYZ 86.4 566.755 null]
+>> endobj
+1140 0 obj <<
+/D [2893 0 R /XYZ 86.4 570.789 null]
+>> endobj
+1143 0 obj <<
+/D [2893 0 R /XYZ 86.4 551.662 null]
+>> endobj
+997 0 obj <<
+/D [2893 0 R /XYZ 86.4 519.582 null]
+>> endobj
+1000 0 obj <<
+/D [2893 0 R /XYZ 86.4 488.057 null]
+>> endobj
+998 0 obj <<
+/D [2893 0 R /XYZ 86.4 455.977 null]
+>> endobj
+1124 0 obj <<
+/D [2893 0 R /XYZ 86.4 411.943 null]
+>> endobj
+1006 0 obj <<
+/D [2893 0 R /XYZ 86.4 379.864 null]
+>> endobj
+1261 0 obj <<
+/D [2893 0 R /XYZ 86.4 347.231 null]
+>> endobj
+1207 0 obj <<
+/D [2893 0 R /XYZ 86.4 303.197 null]
+>> endobj
+1001 0 obj <<
+/D [2893 0 R /XYZ 86.4 271.671 null]
+>> endobj
+1002 0 obj <<
+/D [2893 0 R /XYZ 86.4 239.592 null]
+>> endobj
+1139 0 obj <<
+/D [2893 0 R /XYZ 86.4 206.959 null]
+>> endobj
+1142 0 obj <<
+/D [2893 0 R /XYZ 86.4 174.88 null]
+>> endobj
+1231 0 obj <<
+/D [2893 0 R /XYZ 86.4 142.801 null]
+>> endobj
+1005 0 obj <<
+/D [2893 0 R /XYZ 86.4 110.722 null]
+>> endobj
+1185 0 obj <<
+/D [2893 0 R /XYZ 86.4 79.196 null]
+>> endobj
+2892 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2899 0 obj <<
+/Length 2813      
+/Filter /FlateDecode
+>>
+stream
+xڥY[w�H~���#>'"t7��o��$�ȗ������K����3���֥�H�g�E at uuC�嫯Z��a�>
��
����Qh���F�����ݑ/C�Sbt�}����~
)׳�P�<��N糫�7��O������џG8�D����-7G_�9��|
9�
+���ی\������_G��,��y���y�����g|�7z}=g�u�
ǚ��cJ��\?%�j��=ZӸ��U�=���4��e`=�HY�QQ$qQ�B���t�����'�&
aѲ�5�x�g�����\�]���ff�>���DZ�8Mߑ��c�~8
a���0^%U^���nر�����!g��q[EU�gQ
+/�uU
ka��,*�Y2M�p��I
gURk�����%��ks�x��׼�	ZZ��C��q+�_B���ƿ��betDJܪ�9�ɒ1�v,U`;�5����ڪ�3�k]qYڻ�
7ւ�����`0
��x�x8��!��gM��y���@%r���~x�X
����j
�����L��-Z���=_'+�����|>���a�m]�]o�{a��v��&��)nH��vCw�uUk�е~�u=��%�%ċ�;�=�Q�^��9�ݷ}���C����䢒ʺe�����h���9�Q |6E�����!/�j����ǁ
��DZg�C'�ďp-*|9���gS�v�5nN�ښ�/�ù7����}GKAސ���8o
+F�
�����8��e]Ï�4��E��#3:�����XD���q�'3>��qlFn�dwQf�ӝ�`p�o�n�歌a�O_؃1��"G3�o`!�VT�`n���/���d���]P-�I��B�`��ZYY��IG���(_�3\a�}�>�wE�,Y56���e
�}� ��4)t,( 
.�����
��E8e�I8N3�]��Տ��
|[J��r8�Q~ʼn�ԋb8�ԃ@;L=Ƿ}G�H�ˠé�I�z�H�G�N�ߘq�	J,�:�+�<�1�=Ѧd=@s�p7e��$m�v��[
 L̠ML�R��II�
%���t�	��*N��$[ �SPƅo<3׎a\�H��o
�Ki})	P<��^n7&렃1�.�6��F�������^Cv��	L(�)M���b"�
+l{�dzd"H�
�
�Ha�Y�
��(��Z��q�-�y�B��
3P�<q��M[tǀX���
t^5�wh@�����s+�ڍ1�$ް
@�ѣ-E�5�
�$
@�Nqܙ���rq5?�kF�(M�%DT8x$f)�&�L�t0���D�-*��⹬b��Ҥi�OPq�"����2�Uh��8 at Yh��b���Ios��u	VM	9H�
+(�9"��$���F�9�}|/�Sr�SRVB4f�1I�� ��p�a�
CzPN��"i��$�K͌E?��O�x�M�
�8�d�� ~�M��-D�%�T�Z6*�Mo�BR9�|T���"'��W��
N
�7Y�����z
���š'�
�C<7�zM�U�3OWF�3�~3*�a���0�E�Aϑ<5,U&�K=�I�ODK��I��C?D�����
+�
+�6�
+@��-tWk&O��%�Fd���/�:�L���g	�!p�n����
��U��>oQ�Dx�E�n�W�
+oK� ?����W8��<��jL6	6\�)�齙�5F)�_NXԶ
��Nh%�i�`ʖ�;���V\�G˸�9�
H��?P/1y �����������2Jk���}�
"��
���6~Xď�@�r�'}h�u�O'���[�L
=�d�	6��6
n�
+U"�?�`B
+��>�WZ�z@����:�]8LG����mƢ
+�P⽞�dE��g"9�@�-���ZV�N�5p��E�xa��9jx��f�h���v�?�N����o�e;>�O�;i����j�0�
+���3*�F�d{U�n��~
\��*e����y��X��UR��m
�`J$п�T�f�=_˦b	��Jw�x�z��~���:K���[�&��}6�G��9�LL6"6��7G�2�n�05e��FXT��q�x
+ u7�3�[�V���w(�,�r�״��5^��y$�w�Z����H
���B3z^�
4e
p�;�ѱ	��M^�� t�15'�*��H��=}�j�XS<�6�ĝJ	���>�W�O�>龉O���ze	2m�
��5~� �J"�J��
��
>1����旦G�P;��-�Łz
��vi
 +ʷ�"�Dl�\�e���+���j�&p���ߩ��(�"�W��Df��
����O�e
4E7�֜���8����\��dɆZg[�2Ym��k�?�����y�
=N����U�� �H����/	�c
gfZx��T��H#���}���{	��"�>�]�	�~�w�t"���q�{7dX����@
+0��hA���
�,w��8ΰ�Y� �;j��Aω���tp��q�����aJ�Ŀr�Y�
�G�"H���w�p��՚of�i���,����O̒$�SX
�6,��D	��5�_=���
lJ�q/M,�`��sm
?�
�~z:q
+���
�=�Q؁دR���9���]����N�"�dqq~��-��
�+��(Ǖ�L��B:�P��
>w��wu
��t
�l���0�0�	A��'l��=�Z��l��wOل��D��D������U[�� 
��Ô��#��(34а�d|�qA�arzҬ���t� ^�
�6��y�F��cA�����_��̎�
��7�\�5S�!����
��!���>�U��l�ؾ�
��y
S���7��~�u�)��nK��������.�S
+endstream
+endobj
+2898 0 obj <<
+/Type /Page
+/Contents 2899 0 R
+/Resources 2897 0 R
+/MediaBox [0 0 612 792]
+/Parent 2887 0 R
+>> endobj
+2900 0 obj <<
+/D [2898 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1174 0 obj <<
+/D [2898 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1175 0 obj <<
+/D [2898 0 R /XYZ 86.4 661.343 null]
+>> endobj
+1166 0 obj <<
+/D [2898 0 R /XYZ 86.4 629.463 null]
+>> endobj
+996 0 obj <<
+/D [2898 0 R /XYZ 86.4 599.519 null]
+>> endobj
+1471 0 obj <<
+/D [2898 0 R /XYZ 86.4 553.193 null]
+>> endobj
+1391 0 obj <<
+/D [2898 0 R /XYZ 86.4 523.803 null]
+>> endobj
+2636 0 obj <<
+/D [2898 0 R /XYZ 86.4 489.986 null]
+>> endobj
+1904 0 obj <<
+/D [2898 0 R /XYZ 86.4 458.105 null]
+>> endobj
+1125 0 obj <<
+/D [2898 0 R /XYZ 86.4 426.225 null]
+>> endobj
+1229 0 obj <<
+/D [2898 0 R /XYZ 86.4 394.344 null]
+>> endobj
+1141 0 obj <<
+/D [2898 0 R /XYZ 86.4 362.464 null]
+>> endobj
+1230 0 obj <<
+/D [2898 0 R /XYZ 86.4 330.03 null]
+>> endobj
+1331 0 obj <<
+/D [2898 0 R /XYZ 86.4 298.703 null]
+>> endobj
+999 0 obj <<
+/D [2898 0 R /XYZ 86.4 266.269 null]
+>> endobj
+2626 0 obj <<
+/D [2898 0 R /XYZ 86.4 234.942 null]
+>> endobj
+1003 0 obj <<
+/D [2898 0 R /XYZ 86.4 203.062 null]
+>> endobj
+995 0 obj <<
+/D [2898 0 R /XYZ 86.4 171.181 null]
+>> endobj
+1062 0 obj <<
+/D [2898 0 R /XYZ 86.4 127.345 null]
+>> endobj
+1004 0 obj <<
+/D [2898 0 R /XYZ 86.4 95.465 null]
+>> endobj
+2897 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F49 967 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3117 0 obj <<
+/Length 3301      
+/Filter /FlateDecode
+>>
+stream
+x��]KsG��W�(U���~
)�RS�MRI�R90"csWG�����/z
�
5�i� qR��E�l|��4�
���\
�'˃W���f�;1X�2���	��������z���O�o���:�����6��c
�:��p��}<:VJ
�n���
K��W!���!J����o���(R�X��}��;1O�������i�i�t$����Ww��Ϗ��(i ��)��\�u��~s
���<�;,�n�޵>�>���	
���7��M.m����;ʆ�|��\؊¼dN�?֧#)�כ���U�*ʹ�7;t(E�;��L} ��1t}j�����c{���5��*�ệ��w�#х#���w���Q�W���LJM�,�OG�
�n>fJ�А��V|ؾ{�Y���
+&�sm��䶌P6J�5�>\�lU������͇̳6�Ͼay]A����ڌU�csT�Ŏ�ט|���a��o�!?Gս`�t�hQ2���n��5|��۬
r
?��|���<dn|����~�xw
���e������
oW7����߻l�+�����p���w]?�wOŴ�6�D��\���|�4��P������!���L
6�K�&��j�w�sr�6'��Y6h�<��@�w, at HT�N9�׷?��k��o����e_�
(&`iホ���m���P�qX�(�
+���&/5#
�A$j�)��w(Gô�G)�i�$Q��\Ք�
+���%U
�����&�ˆx�!X}5�Xø5(�Xɼ�1	�� �/�

��wW��z=���i����#;ϴ1��'�Ǔ\X5��8��Ѐ��Z!�^��b���7`;�!�a���_	V�O�r� 7�)N^{���uC<��vN��)�����b��+�v�3[�
l��v�>�h
+��g�Q5y!��F���Ձ(X���A��g�
F-OZ�����d�X�O�M�0l�@*�B�5�1�B&���&
�Cp�m�n�$�(ݾ 
&C��tq�B�̖��8 ����p�3]T�u��0�w����^�3@�a�������&g�c�L(�:g��H˄I]:�6`���L�E��X���@�Q��E�ؔ(
+ ӆʽ������'S�F��
��8G����PX
��� ����	VyX„Kahɪ*�x�J���a��:�8,}t�+�6ŀ������p�g`;�ϋ�<�ַ�kS/����ZμKR/h��*h�j
�W�D�^� �*�a!B
�I���F�����.�a�_�Q�IJ�0J_�Nahɨ*����
�4X
JK�SI�&YIb��C�{�����.OfW�?sIN���
+�B(��'��/���n-#��-	.�
P��;���-�ti�q&Cz����M�`ť�R��Y���v	�a���U�$�
A7%�h�
�Gg{N���\���e܆�:Ǥ
sIܗ�|��N�$� @B�T��V χ���|�p$m�����4Bj4U;��0#m��,h���@��E�n4��_� �5�
+�n@�72`5jw�(�I)��_̵9�/���	@�s�*���7��iS	=�
���uyS�-��c���������!7`b��~+�x�
����k4Q�$8]�ʓ�=FVFd�_
+X

+Ka
v��p�K��y<!�;�ѷS��X�l�O�Lύ�#1��ˣO3-li�*���^�j.��Q�?��>�:t'��
]p�lМ	/Iؠ��|����l�¶�9p�� ��u��\p���qɔaXX7{��=D=��u� �4l�۰��ak���_t�Z�0��Z�@� ʄD�%�--[�]t�������*r�
�vw��u�@�
�@4qD�q9{f��󳞛��Rg^���� `�@�*Q�,�s#_��ٴ�}
+�㇮3iG\g����P@
$쉢�s-������"+,P�j�,�u���]Ȏ
���m
+��n�Z�N��a�(
+���M����x�SC=�-��Wٴ�~"}M��A��hڲ!���r��[	�6�i�l����dA�.���ɤ�W	@K_��N��=
J!��[i`�B
иZ^D�q���t��P�q��N�K�Jw���
ǻ|�8?5��܂)�9�|��tC!��`1��bH��0��p*�G�׍(�C�/���M�
G9�H’�Q��Ec2��[�[��~�ے�H�
mvO�&�W��:E�rɘ,F˫7M
+vL
+\
�7���3��Z"��
�^��H��!���
;B���"�c�aK�{'�hʠ�
g�ѐކ/�v��l�ݨ���%髸�e2�Ah�&"��B�n�g��(Wv�6����2h�/�@	쁮M8l
"�+84Ed�zI�
�TʧW
��
s��� �x�����%m���[�tm[���
�
; G@�n	����k���ic�o%bw��3;�;t۝ü��c�0s���Mm�%�'Q���#�a3")�%�8���*#����l��/_�L��]"���x ��2 J�"��� ���,
+LE�:����ޝ���
Qeco���|�/�
2�^@Sp#J�Zts� ��F
���uoj�t�v��x�T����7N�I�-f��*fq&�g)7���
+'�nA�MQm�R����d2;�$as���hlP��n��ц�8KGyz(-�N�M
+	0K
+V1�^
�zV�]�}��.�V�#ՙ�f������[��
 J&�\�%;*��
��t��ޏ����Y͓QE��Y��^|�m��
U�f[��]9
���
+�k�~c_�+L�-uvO��QR��E�������
�
��RB��,��b�)��R@�q4

��+ g���:'hQ謁.��7}�K��6G��E�3���t���f6�a:�
����j��uW
+/ؑ0<�����O���(P���*E{�@$�ݻs�@9��M ���y��:�'A��
[G&h�������/�y��d/����0���O\�e��&���{Ⱦ��Ab�]
��&Y_
�^�@r�E��7���[���
+ܢ=��K���)�'0	�8�yG�-~�<��UF[t��`�o� ��xj�W�9�
!a��4��i�%�--[�M�`K ]^��A��a{]���k<(lېH�Z�Ҷ5خ[��ŭ�p�v^��]��oL��i9M$:-li�*l��J��p\E&�T�7
��
~H<$9��9��i�)`ml��5د�f��������0���s4F�� ���
+�l�ܿ�&�,6�5���j>�󋃊2Ս<V$
���W=,�8`�� @-vUԯ ��_h��_^h�_^M���hv�pT1�Ar��+%�w�u�2w�/O��Q �
+endstream
+endobj
+3116 0 obj <<
+/Type /Page
+/Contents 3117 0 R
+/Resources 3115 0 R
+/MediaBox [0 0 612 792]
+/Parent 2887 0 R
+/Annots [ 2901 0 R 2902 0 R 2903 0 R 2904 0 R 2905 0 R 2906 0 R 2907 0 R 2908 0 R 2909 0 R 2910 0 R 2911 0 R 2912 0 R 2913 0 R 2914 0 R 2915 0 R 2916 0 R 2917 0 R 2918 0 R 2919 0 R 2920 0 R 2921 0 R 2922 0 R 2923 0 R 2924 0 R 2925 0 R 2926 0 R 2927 0 R 2928 0 R 2929 0 R 2930 0 R 2931 0 R 2932 0 R 2933 0 R 2934 0 R 2935 0 R 2936 0 R 2937 0 R 2938 0 R 2939 0 R 2940 0 R 2941 0 R 2942 0 R 2943 0 R 2944 0 R 2945 0 R 2946 0 R 2947 0 R 2948 0 R 2949 0 R 2950 0 R 2951 0 R 2952 0 R 2953 0 R 2954  [...]
+>> endobj
+2901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.965 561.44 164.939 572.288]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+2902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.916 537.498 182.871 548.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.611 525.527 240.566 536.376]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [244.662 525.527 256.617 536.376]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.355 513.557 236.31 524.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.299 513.557 251.254 524.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.225 501.586 224.161 512.434]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+2908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.964 489.615 241.9 500.463]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+2909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.996 489.615 262.933 500.463]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+2910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 467.626 142.191 476.039]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+2911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 431.524 167.983 442.372]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+2912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 419.553 193.471 430.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+2913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.459 419.553 213.396 430.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+2914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.942 407.582 158.878 417.932]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 395.611 182.152 405.961]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+2916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.14 395.611 202.077 405.961]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 383.641 143.825 393.991]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 383.641 164.857 393.991]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 371.67 168.512 382.02]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.608 371.67 189.545 382.02]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 359.699 149.056 370.049]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 359.699 170.088 370.049]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 347.451 186.883 358.078]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+2924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 335.48 150.271 346.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+2925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 323.786 155.501 334.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+2926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 311.816 155.501 322.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+2927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 299.845 160.732 310.195]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+2928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 287.874 155.501 298.224]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+2929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.915 275.903 155.889 286.751]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+2930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.828 263.932 187.784 274.78]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.879 263.932 203.835 274.78]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.93 263.932 224.867 274.78]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.963 263.932 245.899 274.78]
+/Subtype /Link
+/A << /S /GoTo /D (page.196) >>
+>> endobj
+2934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 251.961 143.825 262.312]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 251.961 164.857 262.312]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+2936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 229.767 164.747 240.117]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.842 229.767 185.779 240.117]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.64 217.796 138.595 228.146]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 205.825 143.825 216.176]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 205.825 159.876 216.176]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.972 205.825 180.908 216.176]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.866 193.855 152.821 204.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.917 193.855 168.872 204.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.968 193.855 189.905 204.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+2945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194 193.855 210.937 204.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.033 193.855 231.969 204.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.065 193.855 253.001 204.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.636 181.884 152.572 192.234]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.668 181.884 173.605 192.234]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.7 181.884 194.637 192.234]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 169.913 168.263 180.263]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.405 157.942 142.361 168.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.456 157.942 158.412 168.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.507 157.942 179.444 168.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+2955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.54 157.942 200.476 168.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.572 157.942 221.509 168.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.604 157.942 242.541 168.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.405 145.971 142.361 156.321]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.456 145.971 158.412 156.321]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.507 145.971 179.444 156.321]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+2961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.54 145.971 200.476 156.321]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.572 145.971 221.509 156.321]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.604 145.971 242.541 156.321]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.866 134.001 157.803 144.351]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+2965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.898 134.001 178.835 144.351]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 122.03 168.263 132.38]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 110.059 178.724 120.409]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.409 98.088 133.365 108.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.46 98.088 149.415 108.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.511 98.088 170.448 108.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.561 86.117 164.498 96.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 74.146 178.973 84.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 74.146 200.005 84.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.101 74.146 221.038 84.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 62.176 173.743 72.526]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.838 62.176 194.775 72.526]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.871 62.176 215.807 72.526]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.935 50.205 208.891 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.747 561.44 438.702 571.79]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.747 549.245 443.684 559.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.78 549.245 464.716 559.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.287 537.05 428.242 547.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.517 524.855 433.472 535.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.517 512.659 433.472 523.009]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.568 512.659 454.504 523.009]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.6 512.659 475.537 523.009]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+2987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 500.464 383.849 510.814]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 488.269 394.558 498.619]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.654 488.269 410.609 498.619]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.705 488.269 431.642 498.619]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 476.074 387.615 486.424]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 463.879 392.845 474.229]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+2993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 451.684 383.849 462.034]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+2994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.91 439.489 386.865 449.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.163 439.489 402.118 449.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.415 439.489 417.37 449.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.668 439.489 432.623 449.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.612 439.489 447.567 449.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.864 439.489 462.819 449.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.116 439.489 478.072 449.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [481.369 439.489 493.324 449.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.621 439.489 508.577 449.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+3003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 439.489 523.829 449.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 427.534 361.791 437.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.868 427.534 377.823 437.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+3006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.9 427.534 398.836 437.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.913 427.534 419.85 437.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.927 427.534 440.863 437.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+3009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.94 427.534 461.877 437.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+3010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.954 427.534 482.89 437.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [486.967 427.534 503.904 437.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.893 427.534 523.829 437.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 417.516 366.772 425.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.761 417.516 386.697 425.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+3015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 403.383 393.094 413.733]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+3016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.456 391.188 397.412 401.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+3017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.777 391.188 412.732 401.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+3018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.721 391.188 427.676 401.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.042 391.188 442.997 401.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+3020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.363 391.188 463.299 401.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.665 391.188 483.602 401.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [486.967 391.188 503.904 401.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.893 391.188 523.829 401.538]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+3024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 381.17 366.772 389.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+3025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 367.038 398.324 377.388]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+3026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.42 367.038 419.357 377.388]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 354.843 382.633 365.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.729 354.843 398.684 365.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.78 354.843 414.735 365.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.831 354.843 430.786 365.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.882 354.843 451.818 365.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+3032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.914 354.843 472.851 365.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.946 354.843 493.883 365.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [497.979 354.843 514.915 365.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.685 342.648 382.64 352.998]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.629 342.648 397.584 352.998]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.688 342.648 413.644 352.998]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.748 342.648 429.703 352.998]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.807 342.648 445.763 352.998]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+3040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.751 342.648 460.707 352.998]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.811 342.648 476.766 352.998]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.87 342.648 492.826 352.998]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+3043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.93 342.648 508.885 352.998]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+3044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 342.648 523.829 352.998]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 330.692 361.791 341.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.887 330.692 377.842 341.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.831 330.692 392.786 341.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.882 330.692 408.837 341.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.826 330.692 428.762 341.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.858 330.692 449.794 341.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.783 330.692 469.72 341.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [473.815 330.692 490.752 341.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.741 330.692 510.677 341.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.682 318.497 373.637 328.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.733 318.497 389.688 328.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.784 318.497 410.72 328.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 306.302 377.154 316.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+3058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.25 306.302 398.186 316.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.175 306.302 418.112 316.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.207 306.302 439.144 316.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.133 306.302 459.069 316.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+3062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 294.107 377.154 304.457]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 281.912 377.154 292.262]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 269.717 387.864 280.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.959 269.717 403.915 280.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.01 269.717 419.965 280.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.061 269.717 436.016 280.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.112 269.717 457.049 280.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.144 269.717 478.081 280.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [481.07 269.717 498.006 280.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 257.522 377.403 267.872]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.499 257.522 393.454 267.872]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.443 257.522 408.398 267.872]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.494 257.522 429.43 267.872]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+3075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.526 257.522 450.462 267.872]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 245.327 403.306 255.677]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.294 245.327 423.231 255.677]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 233.132 377.403 243.482]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.499 233.132 393.454 243.482]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+3080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.443 233.132 413.379 243.482]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.475 233.132 434.411 243.482]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.507 233.132 455.444 243.482]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+3083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.54 233.132 476.476 243.482]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.682 220.936 373.637 231.286]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.733 220.936 394.669 231.286]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.765 220.936 415.702 231.286]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.797 220.936 436.734 231.286]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 208.741 382.633 219.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.729 208.741 403.666 219.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.761 208.741 424.698 219.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.794 208.741 445.73 219.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 196.546 399.54 206.896]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+3093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 184.351 392.845 194.701]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 172.156 408.785 182.506]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 172.156 424.836 182.506]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.932 172.156 445.868 182.506]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+3097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 159.961 413.766 170.311]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+3098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 147.766 403.306 158.116]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.517 135.571 433.472 145.921]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.747 123.375 443.684 133.726]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+3101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.287 111.18 428.242 121.53]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+3102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.517 98.985 433.472 109.335]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+3103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 86.79 403.555 97.14]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+3104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 86.79 419.606 97.14]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+3105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.701 86.79 440.638 97.14]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+3106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.734 86.79 461.67 97.14]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+3107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 74.595 398.324 84.945]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.42 74.595 419.357 84.945]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 62.4 398.324 72.75]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+3110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.42 62.4 414.375 72.75]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.064 50.205 405.019 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+3112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.115 50.205 421.07 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.166 50.205 442.102 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3118 0 obj <<
+/D [3116 0 R /XYZ 86.4 726.045 null]
+>> endobj
+706 0 obj <<
+/D [3116 0 R /XYZ 86.4 574.336 null]
+>> endobj
+3115 0 obj <<
+/Font << /F38 773 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3318 0 obj <<
+/Length 2869      
+/Filter /FlateDecode
+>>
+stream
+x��\[W�H~�W�ќ������!0$���9�yF!���
����[�%�d��m5��}
+�r}�_UWUW�����
��~9e�c��TvƟ;Z"�Q� �Hg|��ԥD�>��p��!
�������?���?�
wH�}�4�������q�>��`�|[?w��� 
+?M;�����U}�!�(��}�F5
+q���1%l�
��q���2��9�|�o�
+�X�e	^Y���� E���(3P���k�6�,�2ņg�OG��.�:{`Cp�H
+���
�0��+�@l�Aa<#x�vtz}٫�3��
+��%�L��plL��/�.���`Fl�f�)!��(��1#��&�
��������mF9<��#��y2j�7�ʾ/d�	�0q$aQ��l�)(b���)^�φ8#�`���N��� |������^�?m��$���;5]F���w���{0)��r������
�C�<��S
�}� ��?"�u��	2"�V҇0�DW�/(���f�ҍ�^
tM�e��#�(O�	��?����3;g�a^D1{�zU
��!�
+$��(,�r|uUS#�
A@�����A{��Q��H��ꘂ8��+�]�^�
+����0� ��-���+|	��hTΑRe��^oۢD 8��gQ���rߪ���8�^���h`J9�M�Q^ 4��"h��@ͼ������
�%�����:�r��L΂����X�������Bج�P�
����˚� ��������6HP�������
a���ח�~�b� ��I
+�vw?�^�6��[&m�*�q��͚�	�
+bV.��O�� 6�k�����4����C�t�2t{�V+�-���J*�n[�R
Ƒ��Ͷ`s�aw[V*�4�6���޲�)Xa�
�qCX�PӺ���D�)�A����u��S�
5�� �y�/"�
+���n�B6�(���(E�j�xxy~y֢���VUO�D�N�NƕN���&����p�
v���hq��XΧO�Tu���*�P��͸�&�$�m�=<,�Tw�L�U2_��w���恛�ÿ5k�6���Z����⯍�E��c����Y��j� ��ȫ0W��=œ�|Qs3!ֽ挵����{�L���
+�}��Ld���C�b4ݬ4�=<���S>}Z�-�ڥ���qլ��i�If�_�S�W�w���a9l�
��n��N�w��A���C&<�!�Q��<[^%��T��d�\���B5�e�jB��"����_�<2��n��'�0����x9Y$k�m*Rx���7�>}i� ���.�\�
O4�m��-Y}ل�����d�����������qڤ^��6h/�&�t�L3-??��bٰ��k��5��{��xu�x?���?E�eMmFӾ�v=�
�*���(����|�u�Mjv#!騈
+�I&l�&�3H�[@mL�� 
+d�vX%ů	�pd��U��U�a&�
ov����D����r�X�sU�U���`xC�q�)p��

��<�X�s1m�w��[&k�#,s���0M�3��2}*g�}<�
q�cez��%=�}��L��kz0
]�L�NUl���*�"��zE꓃T��y(m�/d������erj�J٩��a�#=�d�
�%��5
h��v�Y�c&�d���m<[ָg��O��Ǖ+�W�|����A^��!l���v>�����ۡ�#'t�4�L���Y'���7�������|�����Lۺ���,N��̹�a�wG��
�y�YItHi���XM��Pߑn޴�����^+t��Е/�M�/n���|� RX���>�,��~���r�"����Ώ϶�a�PP��P�������t*Ig�0�A
���s
S
+�Dz�y��z�r$����;
ʓ���8
� I����뿫�X!�tP���,�^^-g�$wgX;2,42��D)����3�9q �܉��^~jp��X��?����3��"܅� �9�EP��Iqs�op��M\�>�@i���M@�|~���9��A*�+.x-��x5����i]װK�
�6�j*��+
�bF�\X�
�x����d\F�q�����-�XzS�#��%�U�c0��:L���+�P�v[�#��T��V��(QA@%</d�R�8�3����|Pcd��d5#$
+�y3�sN6�uqܫ�cJ�<XD�*���Ö%������ג��N��c���d�}�(��
Dq�\�
 8�{x=�Xgy�Y��������FB� �QLj�qjS��@�*�j�JԻ�*��ѥ��xwB�r�c���)�662GQ�z&�3| �<�0C
	�x*-�<s/���߫x�DѼ�`'8 hNp4ĉз��wܯ�q_��+:����s�vs2�Q4o�\^��AF� �B�QZ�1��\���
K��u;���UH�:;E�������b���K!�O��<�E49����h�h.�K�l�\_��R�g\��ʱ8.Q"��.J'
��v
+2Y�l�E���n�1�)�f���LV-
֖���]�
+����X��H.��K�ʯ�H��"N��xeٜ^*p�^���]�� Ujۙ]J�Zzf��\���*/*�ac�E���L� L�į�ݤG���LG�x
^1��S�#u����۽Vh��y^���붗��{0��	�[I��J&�<}�>��"���u��������x��y^'Z-�?A&�E<_�Ƌdv���w���|����o>^>����I�/L�$jzy��.7ӈ9�iD�jQ�M#�2{L#�
͋�G���RF��O�'�q2KVI4M�9�HR�~�1_%j��I����vri�I�wMg
G$��tn�O�dm�C����v����Ǎg�T�_�_���_!�?q�����.�:
+endstream
+endobj
+3317 0 obj <<
+/Type /Page
+/Contents 3318 0 R
+/Resources 3316 0 R
+/MediaBox [0 0 612 792]
+/Parent 2887 0 R
+/Annots [ 3114 0 R 3119 0 R 3120 0 R 3121 0 R 3122 0 R 3123 0 R 3124 0 R 3125 0 R 3126 0 R 3127 0 R 3128 0 R 3129 0 R 3130 0 R 3131 0 R 3132 0 R 3133 0 R 3134 0 R 3135 0 R 3136 0 R 3137 0 R 3138 0 R 3139 0 R 3140 0 R 3141 0 R 3142 0 R 3143 0 R 3144 0 R 3145 0 R 3146 0 R 3147 0 R 3148 0 R 3149 0 R 3150 0 R 3151 0 R 3152 0 R 3153 0 R 3154 0 R 3155 0 R 3156 0 R 3157 0 R 3158 0 R 3159 0 R 3160 0 R 3161 0 R 3162 0 R 3163 0 R 3164 0 R 3165 0 R 3166 0 R 3167 0 R 3168 0 R 3169 0 R 3170 0 R 3171  [...]
+>> endobj
+3114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 688.242 173.494 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 676.2 184.203 686.55]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+3120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.299 676.2 205.236 686.55]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+3121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.331 676.2 226.268 686.55]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 664.159 164.747 674.509]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+3123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.842 664.159 180.798 674.509]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.893 664.159 201.83 674.509]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.022 652.117 169.977 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+3126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.073 652.117 186.028 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.124 652.117 207.06 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+3128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.278 640.075 156.233 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.222 640.075 171.177 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.708 640.075 189.663 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.193 640.075 208.148 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.678 640.075 226.633 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+3133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.622 640.075 241.577 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.108 640.075 260.063 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [266.593 640.075 278.548 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+3136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [285.078 640.075 297.034 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+3137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 628.12 137.209 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.725 628.12 152.68 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.196 628.12 168.151 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+3140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.14 628.12 183.095 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.611 628.12 198.567 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.555 628.12 218.492 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.008 628.12 238.944 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.933 628.12 258.87 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.386 628.12 279.322 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+3146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [282.311 628.12 299.247 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 618.102 142.191 626.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.179 618.102 162.116 626.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 604.123 163.282 614.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+3150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.553 592.082 177.509 602.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+3151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.604 592.082 198.541 602.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.637 592.082 219.573 602.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.784 580.04 182.739 590.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+3154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.835 580.04 203.771 590.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.867 580.04 224.803 590.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 567.998 178.973 578.348]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 567.998 200.005 578.348]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.935 555.956 208.891 566.307]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.166 543.915 219.102 554.265]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.705 531.873 203.66 542.223]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+3161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.756 531.873 219.711 542.223]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+3162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.807 531.873 235.762 542.223]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.935 519.831 213.872 530.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+3164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.968 519.831 234.904 530.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+3165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239 519.831 255.937 530.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 507.79 154.286 518.14]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 483.706 263.901 494.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 471.665 217.879 482.248]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.357 459.623 225.312 470.471]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 447.581 185.362 458.429]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 447.581 200.306 458.429]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.402 447.581 221.338 458.429]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 435.539 191.45 446.388]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 435.539 206.394 446.388]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3175 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 423.498 171.857 434.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 411.456 134.829 421.806]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.925 411.456 150.88 421.806]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.976 411.456 166.931 421.806]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.027 411.456 182.982 421.806]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 399.414 145.041 409.764]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+3181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.099 375.331 171.055 386.179]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+3182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 363.289 191.45 374.137]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3183 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 363.289 206.394 374.137]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+3184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.272 351.247 147.227 361.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+3185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.216 351.247 162.171 361.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.873 339.206 243.81 350.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+3187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.799 339.206 263.735 350.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+3188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.138 327.164 220.093 338.012]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.189 327.164 241.125 338.012]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+3190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [244.114 327.164 261.051 338.012]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+3191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 315.122 228.975 325.472]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 302.804 218.514 313.431]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 291.039 176.672 301.389]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 278.997 186.883 289.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+3195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.099 254.914 171.055 265.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+3196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.043 254.914 185.999 265.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+3197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 242.872 191.45 253.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+3198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 242.872 206.394 253.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+3199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.272 230.83 147.227 241.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.873 218.789 243.81 229.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+3201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.799 218.789 263.735 229.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+3202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.138 206.747 220.093 217.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.082 206.747 235.037 217.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+3204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.133 206.747 256.069 217.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+3205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [259.058 206.747 275.995 217.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.514 194.705 223.469 205.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+3207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.458 194.705 238.413 205.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.509 194.705 259.446 205.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.434 194.705 279.371 205.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+3210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 182.664 223.745 193.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+3211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 170.345 213.284 180.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+3212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 158.58 171.441 168.93]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+3213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 146.538 181.653 156.889]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+3214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 134.497 181.902 144.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+3215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 122.455 192.114 132.805]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 98.372 263.901 109.22]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 86.33 217.879 96.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.357 74.288 225.312 85.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 62.246 185.362 73.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 62.246 200.306 73.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.402 62.246 221.338 73.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 50.205 191.45 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 50.205 206.394 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 688.242 396.439 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 676.204 364.641 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 676.204 380.692 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.788 676.204 396.743 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+3228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 664.165 374.853 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 640.088 488.483 650.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 628.05 442.461 638.633]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 616.011 416.032 626.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 616.011 430.976 626.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 603.973 396.439 614.821]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 591.658 359.411 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.506 591.658 375.462 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.557 591.658 391.512 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 579.896 408.785 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 567.858 408.785 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 555.819 403.555 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 543.781 403.555 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 543.781 419.606 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 531.742 399.789 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.885 531.742 415.84 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 519.427 416.944 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 507.389 432.635 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 495.35 448.326 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 483.312 422.175 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 471.55 403.555 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 471.55 424.587 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.683 471.55 445.619 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 459.512 424.476 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+3252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.572 459.512 440.527 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.623 459.512 461.559 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.548 459.512 481.485 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+3255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.981 447.473 434.937 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+3256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.032 447.473 450.988 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.083 447.473 472.02 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.009 447.473 491.945 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+3259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 435.435 403.555 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 435.435 419.606 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.701 435.435 435.657 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.752 435.435 456.689 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [460.785 435.435 477.721 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 423.396 398.324 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 411.358 398.324 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.42 411.358 414.375 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.471 411.358 430.426 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.522 411.358 446.477 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.573 411.358 467.509 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.605 411.358 488.542 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 399.32 392.845 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.941 399.32 413.877 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 387.281 394.558 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.654 387.281 410.609 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.705 387.281 426.66 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.756 387.281 442.711 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.807 387.281 463.744 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [467.839 387.281 484.776 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 375.243 401.253 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 363.204 406.484 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+3281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 350.889 411.714 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 339.127 427.405 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 327.089 427.405 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 314.774 443.096 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 302.735 416.944 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 290.974 416.944 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 278.935 427.156 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 266.897 432.386 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 254.858 422.175 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 242.82 432.386 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 230.781 437.617 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 218.743 401.253 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+3293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 206.705 364.641 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.225 194.666 354.18 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.276 194.666 370.231 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.327 194.666 386.282 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.378 194.666 402.333 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 170.589 488.483 181.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 158.551 526.596 169.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 146.512 449.894 157.361]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 134.474 409.944 145.322]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 134.474 424.888 145.322]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.983 134.474 445.92 145.322]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.909 134.474 465.845 145.322]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 122.435 416.032 133.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.123 110.397 411.078 121.245]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 98.359 396.439 109.207]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 86.32 364.392 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+3309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 74.282 385.562 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 61.966 411.714 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 49.928 390.793 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.888 49.928 406.844 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.939 49.928 422.895 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.99 49.928 438.945 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3319 0 obj <<
+/D [3317 0 R /XYZ 86.4 726.045 null]
+>> endobj
+3316 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3454 0 obj <<
+/Length 2066      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�8~���1�٨BBzlR��N�Nco�;�>��46����~���.@���6�s>}�#����������
��ԛ=x���
}(F�l�}9��}3�k�u��
|@D�����
Mf�#$~
=tx� Po�
}�
+����;̙�s���
0���ʛ�>��1����P� 
+i����M���Q��(��:~������=�
+Z���ގ�/��3�JM��v���1?��&N�qO���7��a���@
_}{F���IB
|�X�� 
��vb�����ϲ��
“c���K��jKWk� d���	�hS��~eܚ�x3i�7BX�"�Dz �a]��1{�fh#DF���j�O�+�b_�#:�RL@�J�^_�(�(��m����yB|N�Σ�q � #x at l(
@��c���
M�9P��7�m}C<
ڛ�������<V��Ժ�X�y+a��#�_�I�[�k-B���]���V*
 T�� `��T��	�"�5�!�5YPJ��0�;��ϴP��&_�y

+�&! غ��K�j�T)��
�
ػ�1[W�
����[u�
+B C�����*�7i}���.Z��cZě&p�� HCK�D
aM�J$��U��
 ��8P�Go ��ڀ��74
�[
]����=��y�
��_��<N��"�����
'&�J
j��
��B�ґ1K�q_�
D��7���,;ft�*�$�?���[�������d[�d�h%�d��oF��{F�N�x�GE�O�HE�(K��eA�”Pn�m[T3��@�v���R��.%u at 3
(#����$�6KWI:�VO��9أF��n-�so��(Y��b0��5����H��5���5�i���m�t@��訄����'�Y��f Błr�JV7/x��X��0������ݷm����İsa>1����Gt"�Y$���d�O�w�B�'@�G|��w�FM�c�}�,�O�5B>�E��9o�0�66�x{�y��
L���$/��ma�@@H7���JV+e�Nϭ�b�C����\J���G}N{�tKL&(��^B)gq=B~�LPB@=���Y�Y�Р��zUg�}T��;zC
8�Ðm�;�Q����sЋ�/bu(LR��"}�;%!#��,��Q�&r�p8)��5
+�
�N
��SqXFiy����ҝ�`���*Z�F����t u��eYq�>d=3��.A��S�ƉkR��s��RL�Z��Q��/��wj�s|��q%d��+�Y7�1�'��F�toH�u�8fr��v�H�j�#��{m�xLӞ�� �CLJ�d7�	CQ��Pv��t<�'?.S(#��1��'���>Ȱ��&lǢk+�@�#��
T,s'��
���
��lh�`JijzT����ѥ��.=�V�y����y��O�y���s�?N7�<��?�)Y�����]p݌R��P�Ī�`���
}dJ�jj/�-'��o��Io�Cj����Ն�[�Z�o��椞9�傗+�݈�������S��SSoD�֣�Z��� 0ؠu ���p�n{��Ԥ�Vq
��X9���HZ�.t��	)Ѩ�ح#A~��r���
G
���pQ����6v
Тn'�����8x�ʒ�O�����4Nd�a�ؠ��or�H��:u�n�]�
��/��n3�jdٻ]��s$U��
I��ܯ���<��{m�y�l�$K��t�=��1���@x*}��Әг�E������̓"I�����y9>G&Z|�Nɀد�}v�8&�,Zƕ�m����.�M��v=y�گd�-�T�
9�>�
���罢�buQ �<��J"�v��L�eJ����c
X��N�h��cskZ��ͣ��;��m���1Զ&�háHϋX%i
I��f+�^x&
�8@����.Y���Y�i�'�c!�b���`}E�Q�����h�m��T�d%����/Z �m��
=��j�]$Qiåb�Xx�m��إ��\ɪ�~\�zF�A��U�z���/�\����Qn⺔U[�v�\+Z<�
�0��JVc��Ci�*���g�eW���m�|�[���@�'�m������?��
+endstream
+endobj
+3453 0 obj <<
+/Type /Page
+/Contents 3454 0 R
+/Resources 3452 0 R
+/MediaBox [0 0 612 792]
+/Parent 3456 0 R
+/Annots [ 3315 0 R 3320 0 R 3321 0 R 3322 0 R 3323 0 R 3324 0 R 3325 0 R 3326 0 R 3327 0 R 3328 0 R 3329 0 R 3330 0 R 3331 0 R 3332 0 R 3333 0 R 3334 0 R 3335 0 R 3336 0 R 3337 0 R 3338 0 R 3339 0 R 3340 0 R 3341 0 R 3342 0 R 3343 0 R 3344 0 R 3345 0 R 3346 0 R 3347 0 R 3348 0 R 3349 0 R 3350 0 R 3351 0 R 3352 0 R 3353 0 R 3354 0 R 3355 0 R 3356 0 R 3357 0 R 3358 0 R 3359 0 R 3360 0 R 3361 0 R 3362 0 R 3363 0 R 3364 0 R 3365 0 R 3366 0 R 3367 0 R 3368 0 R 3369 0 R 3370 0 R 3371 0 R 3372  [...]
+>> endobj
+3315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 687.965 176.423 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+3320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 675.927 171.441 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.537 675.927 187.492 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.588 675.927 203.543 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.639 675.927 219.594 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+3324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 663.889 181.653 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.38 652.127 128.353 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+3326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.643 640.088 129.599 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+3327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.694 640.088 145.65 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.745 640.088 166.682 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+3329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 628.05 178.724 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 616.011 178.724 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.82 616.011 199.756 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+3332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.745 616.011 219.682 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 603.696 171.192 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 591.658 171.192 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.288 591.658 192.225 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+3336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 579.619 181.653 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+3337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 567.581 202.574 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 555.819 139.81 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+3339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.906 555.819 160.843 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 543.781 160.981 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 531.742 171.192 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.288 531.742 192.225 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 519.704 139.81 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.906 519.704 160.843 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 507.666 150.52 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+3346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.616 507.666 166.571 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 495.35 218.514 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+3348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 483.312 213.035 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 471.273 171.192 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 459.512 155.501 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 447.473 208.054 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+3352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 435.158 202.823 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+3353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 423.396 202.823 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+3354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 411.081 160.981 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.076 411.081 177.032 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+3356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 399.043 197.593 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+3357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 387.281 218.514 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+3358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 374.966 223.745 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+3359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 363.204 192.363 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+3360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 350.889 187.132 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+3361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 339.127 223.745 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+3362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 327.089 223.745 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+3363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 315.05 192.363 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 302.735 228.975 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+3365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.402 290.974 260.357 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+3366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.481 278.935 239.436 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+3367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 266.897 202.823 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+3368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 254.858 228.726 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+3369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.711 242.82 244.666 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+3370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 230.505 187.132 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+3371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 218.743 166.211 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.307 218.743 187.243 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 206.705 176.423 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+3374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.518 206.705 197.455 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 194.389 181.902 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 182.351 218.514 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+3377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.711 170.589 244.666 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+3378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 158.551 223.745 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+3379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 146.512 192.114 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+3380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 134.474 197.344 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+3381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 122.159 207.805 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+3382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.901 122.159 228.837 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+3383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 110.12 213.035 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+3384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.481 98.082 244.417 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.632 86.32 270.569 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.711 74.282 249.648 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 62.243 218.265 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3388 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 50.205 192.363 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3389 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 687.965 443.096 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+3390 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 676.204 411.714 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+3391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 664.165 390.793 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3392 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.888 664.165 411.825 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+3393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 652.127 396.023 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.119 652.127 417.055 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+3395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 639.812 406.484 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.579 639.812 427.516 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+3397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 627.773 411.714 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.81 627.773 432.746 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+3399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 615.735 448.077 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.293 603.973 474.229 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+3401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.293 591.935 474.229 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+3402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.523 579.619 479.459 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.905 567.858 510.841 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+3404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.984 555.819 489.92 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+3405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 543.781 453.308 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+3406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 531.742 421.926 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.941 519.427 530.877 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.905 507.389 510.841 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 495.627 443.096 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+3410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 483.312 416.944 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+3411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 471.55 375.102 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.197 471.55 391.153 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 459.512 385.313 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.409 459.512 406.346 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 447.473 390.544 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.639 447.473 411.576 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 435.435 396.023 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 423.396 396.023 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+3419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.119 423.396 412.074 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 411.358 406.235 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 399.32 411.465 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 387.281 406.484 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 375.243 416.695 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.832 363.204 463.768 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+3425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 351.166 421.926 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+3426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 339.127 421.926 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+3427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.021 339.127 442.958 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 327.089 432.386 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.832 315.05 463.768 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.832 303.012 463.768 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+3431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 290.974 437.866 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 278.935 437.866 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 266.897 385.562 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 254.858 395.774 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+3435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 242.82 396.023 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.024 218.743 424.998 229.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+3437 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.499 206.705 461.473 217.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.2) >>
+>> endobj
+3438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.49 194.666 424.445 205.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+3439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [468.031 182.628 475.005 193.476]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+3440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.994 182.628 484.968 193.476]
+/Subtype /Link
+/A << /S /GoTo /D (page.2) >>
+>> endobj
+3441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.917 170.589 469.891 181.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+3442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.345 146.512 448.3 157.361]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.218 134.474 384.173 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.004 122.435 387.959 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.506 110.397 381.461 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.554 98.359 377.509 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.17 86.32 388.125 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.941 74.282 389.896 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.889 62.243 400.844 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.335 50.205 412.29 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3455 0 obj <<
+/D [3453 0 R /XYZ 86.4 726.045 null]
+>> endobj
+3452 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3661 0 obj <<
+/Length 2684      
+/Filter /FlateDecode
+>>
+stream
+x��\[S�H~�W����Z}L g`�C0d�*;�F;��H23���{t#�ܖ�V'���Kp�>�;�ӧ�qF��3z{����՘�B��|t�8�
ёp����OǮ��vw5���&��������_��.�>a��3��z�$�����o�h?�9�(9������\���G��M<rv8".q��d��{s?99%�
���4��HJɢ�r��h�	~�
���y��9�.r�*	�U�/��ĕǙ�qtR,���c���7�>���VV���zV�diV"��@�mJ���ڻ����oZ�!o��ϲ8�Wl��2�:�6�,^�@Ad�j��H�)��}Z��RB�  ��&"�C���o�z
���G�=�������Ҥ取��)�o��!pC�Wc���S
��)�d�=�s?EO�b�Vj��d+�֖�%��P�X"�w�8j�F�0�/�XD�_�b��;
�Q9U>x�\'/��HK�r��)z��L1�paC\�(���;������ǖ�A� [...]
+�(	U��õNX�#̰%a1r��m�D��V�R�U�
��7�}x�j�Xp�"p_�RX����� Re�Y=������	���
�x�#���2��T�l���n�b�dg ŁT%o��Y/1�ĎĐ ]��FZH1U�:]��$\/3��L at j�$�=ˆ�gA�)�ċ�,�ċf����*���j�Q�r� ���wp!I���hFJZz=\F�$d���w��J�ǫ4x�.`A�����[v(
���a�]�
+��
��� b����@IK����b\H��hjb��	лx������(��Ɣ��FEK���"I�A�t
��w�] ���	�1�tƀ
+�;0jb:cdypL3��v\��k��%-�&.3?����"�4t����,���^��m!
l!wp�[��i�����A���ۡT����(��h�J� �L�(
��KtHp�Ƿ����>�L��<T40�BDp;��h�S��$y�zp�}�0K���z��
��
���I|y�,x�o�8�#D㖄!%UO0���eEL��2:��u���DHC/��
�@X�%�_��.�b/���60���#w�� ���Z$F�V����[Y������)�M��q��m�1r쐃�
DgQ1��.4��ù�o�։{�N2��:X���@
Y�-ra���
���@~pe�O���˼�����m��H�f �Y��(a›����}��߯��6� ��_���@����y)�}Ju��b��w�%��Gn[���9�9��$��^��؏�H��11�VQ�}W�/�M�.�����!�q���6�b��w�v
cl���}ż��Qq
���YY�\����S*��1Q��
P�
v:��� �
�V�o�:s��V��zz�\�
�q7�J���I�%�����<�7�pz=�=|#D�h��Ҡ���7B
$�*H��6�����) t��”��3�`:���xK��L�J��2\�
�t�1�g��|ǭ[�$�W�V�$�X�V7-�^���'g�P� �Za,1r��f|{)o����v�83sC��ٓ�RifJ&�Š)���)-0�M���~�ǘF
�`L\\4�&�H;�	�8������;
W����<4�+�,$�6��}Y7A����	�0�B#�L�h�^{�aB��vbH1Ym��F�˰�u�d:~}9Ԉ�t{L;nb�z�υ΂�	, ŀT�X`Z�d�����_h���~�
���W@��*�&�un�������1[�m��ϯ4�
x��c�v���)�*�
�߷��eU
ݼ>��������f���|��E�"�iYB�v��qN�:�KM���.�ӡӨ�ɪ�9�F[�o���K�q�-����
��
��v�e�`�^^y��g/�w�D�Q�҂���u劘x�C��h[�R�E����$�A#�)��:::�-u� �
>#'g�-���S�n
t#ٸ6����(F�"h�sDm�̞�G�-���2s
����ǟi
>��ʛQ�S� ��i�����j����?���C�u���_x��б��mi��2N��4��:H���8K�Š�R�W9n/,i�j�g�kڍ;'�øv�H��n�87���/�koY%�,��A�~b�B�\��Qq��C%����x���~Z9�h)}��,� Y̏sd�,�k�8��n��,�x��[����h���w���v@;�m��
+�NZ],����z�M��s�:�2D���Z�֟���8�ʃR�6��h�Uv_���\�\jgT�D��֕
�JaDxA�>�ӟ<sQ�Y�(
$q�e˹s��%N�tu,`
�[�V��d�
��LȐ��B����I
g)V�X�8ѵ_�$�Mdx'�;\�*D��5��灒�~X'��8�O�AH��t�#\��m
$,p

�Нԍ��Ia%9�
t�oeu�����6a����J���9�J��u-���2��=�6=��̀T��H	&LL�Ԇ� %,i?�����M�-鷏�0,�
�qb���F���o��91Ά� �:�_��{��m��@����;���r�&G��C�aϳ�v[Q̉����Y�Mk�g�e��m�p�D�nץiw�L'
+�.S���aV���]e#`������u�^̢�
�|H�
�J�Y��|�:�S7�=�

v������woߚ_���
>xL7
+endstream
+endobj
+3660 0 obj <<
+/Type /Page
+/Contents 3661 0 R
+/Resources 3659 0 R
+/MediaBox [0 0 612 792]
+/Parent 3456 0 R
+/Annots [ 3451 0 R 3457 0 R 3458 0 R 3459 0 R 3460 0 R 3461 0 R 3462 0 R 3463 0 R 3464 0 R 3465 0 R 3466 0 R 3467 0 R 3468 0 R 3469 0 R 3470 0 R 3471 0 R 3472 0 R 3473 0 R 3474 0 R 3475 0 R 3476 0 R 3477 0 R 3478 0 R 3479 0 R 3480 0 R 3481 0 R 3482 0 R 3483 0 R 3484 0 R 3485 0 R 3486 0 R 3487 0 R 3488 0 R 3489 0 R 3490 0 R 3491 0 R 3492 0 R 3493 0 R 3494 0 R 3495 0 R 3496 0 R 3497 0 R 3498 0 R 3499 0 R 3500 0 R 3501 0 R 3502 0 R 3503 0 R 3504 0 R 3505 0 R 3506 0 R 3507 0 R 3508 0 R 3509  [...]
+>> endobj
+3451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.206 688.242 172.162 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.822 676.204 222.777 687.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.102 664.165 148.058 675.013]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+3459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 664.165 163.002 675.013]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.357 652.127 225.312 662.975]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+3461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.82 640.088 178.776 650.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.873 628.05 243.81 638.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 616.011 145.29 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.022 603.973 169.977 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.252 591.935 175.207 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.022 579.619 169.977 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+3467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 567.858 164.747 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+3468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.482 555.543 180.438 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+3469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.482 543.504 180.438 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+3470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.252 531.466 175.207 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+3471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.713 519.427 185.668 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+3472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.173 507.389 196.129 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+3473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 495.627 213.284 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+3474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 483.589 171.441 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+3475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 471.55 171.441 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.537 471.55 187.492 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 459.512 176.672 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.661 459.512 191.616 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.712 459.512 212.648 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 447.473 181.902 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 435.435 213.284 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+3482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 423.396 213.284 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+3483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 411.081 197.593 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+3484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 399.32 181.902 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 387.281 208.054 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 374.966 187.132 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+3487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 362.927 187.132 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 351.166 208.054 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 339.127 223.745 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 327.089 208.054 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+3491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 315.05 218.514 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 302.735 202.823 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+3493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 290.974 187.132 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+3494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 278.658 181.902 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+3495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 266.62 181.902 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+3496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.481 254.858 239.436 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 242.82 218.514 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 230.781 197.593 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 218.743 223.496 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 206.705 213.284 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 194.666 213.035 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 182.628 202.574 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+3503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.481 170.589 244.417 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+3504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 158.551 202.574 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 146.512 197.593 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+3506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 134.197 187.132 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 122.435 187.132 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 110.397 192.363 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 98.359 202.574 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+3510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 86.32 192.363 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 74.282 202.574 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 62.243 192.363 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 50.205 160.981 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+3514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.076 50.205 177.032 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 688.242 395.774 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 688.242 416.806 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+3517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 676.197 401.004 686.547]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.1 676.197 422.037 686.547]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+3519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 664.152 411.465 674.502]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.561 664.152 432.497 674.502]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 652.106 364.641 662.456]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 652.106 380.692 662.456]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 640.061 374.853 650.411]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.948 640.061 395.885 650.411]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+3525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 628.016 380.083 638.366]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.179 628.016 401.115 638.366]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+3527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 615.971 369.871 626.321]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 603.925 390.793 614.276]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.888 603.925 411.825 614.276]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+3530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 591.88 385.562 602.23]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.658 591.88 406.595 602.23]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 579.835 403.555 590.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 579.835 419.606 590.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.701 579.835 435.657 590.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.752 579.835 451.707 590.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.803 579.835 472.74 590.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 567.79 424.476 578.14]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.572 567.79 445.508 578.14]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+3539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.604 567.79 466.541 578.14]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+3540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.981 555.745 434.937 566.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.032 555.745 455.969 566.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.146) >>
+>> endobj
+3542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [460.065 555.745 477.001 566.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+3543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 543.699 403.555 554.049]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 543.699 419.606 554.049]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.701 543.699 440.638 554.049]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 531.654 398.324 542.004]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.42 531.654 414.375 542.004]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 519.609 398.324 529.959]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.42 519.609 414.375 529.959]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.471 519.609 430.426 529.959]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.522 519.609 446.477 529.959]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.573 519.609 462.528 529.959]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.624 519.609 483.56 529.959]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 507.564 392.845 517.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.29 495.518 419.246 505.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 483.473 394.558 493.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.654 483.473 410.609 493.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.705 483.473 426.66 493.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.756 483.473 442.711 493.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.807 483.473 458.762 493.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.858 483.473 479.795 493.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 471.151 411.714 481.778]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 459.383 427.405 469.733]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 447.061 443.096 457.687]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 435.015 427.405 445.642]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 422.97 437.617 433.597]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 410.925 442.847 421.552]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 398.88 411.714 409.506]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 375.066 488.483 385.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 363.021 442.461 373.604]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 350.975 409.944 361.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 350.975 424.888 361.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.983 350.975 445.92 361.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.909 350.975 465.845 361.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 338.93 416.032 349.778]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 338.93 430.976 349.778]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.24 326.885 476.195 337.733]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.291 326.885 492.246 337.733]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.342 326.885 513.279 337.733]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.026 314.84 473.981 325.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.077 314.84 490.032 325.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+3582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [494.128 314.84 511.065 325.688]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+3583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 302.795 396.439 313.643]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 290.473 364.641 301.099]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 290.473 380.692 301.099]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.788 290.473 396.743 301.099]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 266.659 488.483 277.507]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 254.614 442.461 265.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 242.568 409.944 253.417]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 242.568 424.888 253.417]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.983 242.568 445.92 253.417]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.909 242.568 465.845 253.417]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 230.523 416.032 241.371]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 230.523 430.976 241.371]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.24 218.478 476.195 229.326]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.291 218.478 492.246 229.326]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.342 218.478 513.279 229.326]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3598 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.026 206.433 473.981 217.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3599 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.077 206.433 490.032 217.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+3600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [494.128 206.433 511.065 217.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+3601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 194.387 396.439 205.236]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 182.065 364.641 192.692]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 182.065 380.692 192.692]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.788 182.065 396.743 192.692]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.02 170.297 414.975 180.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3606 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.271 170.297 432.226 180.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.215 170.297 447.17 180.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.466 170.297 464.421 180.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.716 170.297 481.672 180.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+3610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [486.967 170.297 503.904 180.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.893 170.297 523.829 180.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 158.342 366.772 168.692]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+3613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.868 158.342 387.804 168.692]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.076 146.296 416.031 156.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.647 146.296 434.602 156.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.218 146.296 453.173 156.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.162 146.296 468.117 156.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3618 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [474.732 146.296 486.687 156.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.303 146.296 505.258 156.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+3620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 146.296 523.829 156.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+3621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 134.341 366.772 144.691]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3622 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.761 134.341 386.697 144.691]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.793 134.341 407.73 144.691]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+3624 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.826 134.341 428.762 144.691]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 122.296 408.785 132.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 122.296 424.836 132.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.932 122.296 440.887 132.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+3628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.983 122.296 461.919 132.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+3629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.015 122.296 482.951 132.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.661 110.251 410.617 120.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.002 110.251 428.957 120.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.342 110.251 447.297 120.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [453.683 110.251 465.638 120.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [468.627 110.251 480.582 120.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [486.967 110.251 503.904 120.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.893 110.251 523.829 120.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+3637 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 98.296 366.772 108.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+3638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.868 98.296 387.804 108.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 86.25 403.306 96.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3640 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.294 86.25 423.231 96.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 74.205 414.015 84.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.111 74.205 430.066 84.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+3643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.162 74.205 446.117 84.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+3644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.213 74.205 462.168 84.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+3645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.264 74.205 483.2 84.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.953 62.16 405.909 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.116 62.16 423.071 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.279 62.16 440.234 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.442 62.16 457.397 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.604 62.16 474.56 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.548 62.16 489.504 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [494.711 62.16 506.666 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 62.16 523.829 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+3654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 50.205 366.772 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.761 50.205 386.697 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+3656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.793 50.205 407.73 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.152) >>
+>> endobj
+3657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.826 50.205 428.762 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3662 0 obj <<
+/D [3660 0 R /XYZ 86.4 726.045 null]
+>> endobj
+3659 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3807 0 obj <<
+/Length 2278      
+/Filter /FlateDecode
+>>
+stream
+x��[Ms�8��W�(U�0�I�8NdWRv2��3S��L�+������DP�@��v��X6��׍�Fq���:7�����k�;!}�;�G���8
+����X:_�>���5�{��!z��A���l1�>�⯮��{�߉6����R<�� ����o�
$>%�|�e�
�!T�����ܾ�c���↗��(���(~�>�VH ��_�0+|�J��9_��O��
+�`�lM�<	u
�v�wY�t�įM
z����@�N ��
+	5 �X�^̞�����P,A7e����8�P���
ŗ"Ek'���Gm�؅'�O؂d�%O�
��bѩ���r�nM���ipr��]��)��m��)K-R�AʟY�m�e�F
���We�D�G-����Gש)0����^O`*c&2�i*"�5��R����
r����{��
f�B�X����@
�D�l�X8 �2@� �CI���e������y�ߒ�
+��,�3X����sӃ���'8��Uo�������ŵ/6]ŏ�r�~&M](A��*�C8
+��]h�*c-
H���e\�Y��s�Ҿ�(���W�'>'1����-�z�t�]
+�YI�V���t�h5��3˜f�B���QLDOŶ|� 4��1d��a�?�S����Y!8A���kg�śT���!fi�
�������x�䔐&�]���
����^�ݓq�Nƴ�,�l���.����lY�U��j@�V�fIe;N������[�0���r�u""�,�C�w�v:�lW����� V�#��*�	
��|�3�&�ve��ӓTơ�� 
�z8Ƃ_1�6-�
K�
�3PD���
�%V|F�E�|4j
+	����]˱cϒ���NES�=�O��n��d�)����{����Ny�oIf[FԒ��<�)l"OHf�/y
�+�;�d��q��T�
1ye�G�?]H"֗���N���L�Dnf��� reA�m���C���P�F�T��P�!�sۭ��C+�G+�0��:S�ZL�p1y)��|�����P�����GN���wo���tq��0Ԍ>�?�H�78�X[8D����37���u���@x�:wX�0���~W\,�qT��
���[�1����
�k��+�w��	�W��]�h�t���t��%[�aIb�ݷ�
�1��#ʳ���1jM�*	W+KГ<D�������c�9�
�|jU;S�� ����O�Y�8B
`:�'�v
ȉ�0=
�5� ����i�&��[�L�¡�Yd�B�p#VY��=�x`
\��zq�tv;�k��\���9�O
�L$�
S�ָ�2��r�A|(���;�O@������ÐzG�e��3��>߇r[�}3�rmX��.��se��|���o�\謨�Ϭ��u���ѽ���r�������7
�t�fA�G,�o�(����<g��ֵ��!B
�����ň%[�5\���H�d�ضG�MeFl�hz�S��ʢ�(���Y�`y�JTH�_�Z���!B��x-Y�Z������9�b���Ӥ�y��U�U]�<��9���V�{Cu'W���RծI��(
�/�>�e�T7}�@�&�7fy�
޻�ׅn@%�*:��F�0bp������lxQ0�ۄ�aʹ�rΗq.��+Kk����%�����L�Y�Lxni�_L�ʎ'�̍����\�&��:��`��
x�u��1�H,WC-��U^N���uj��%�E\��'�PdɮT [...]
+;���j-�|�@*
�J.���ddž��@w��>x"6��m�47���
�&=��SW+O��9� 	i.���6��nfe�Yy�R����V�N�~Kv���ؑyýv�)c�˦�`{��Z;��}�VF�a08���DZ4���_�X��CEM�z�oބ�W<�1͹�/��MH�]��v\,!.��;�}�+c���Oh���6����P}^h����a�$Yɖ�+�Az�	i��l�!���*HU@�gUk
��s-=��&g��<�*���˲fy�-
��/w9��lwy���H\��q*��� ���}��f���Nm����B\sv���2>�-
�m�G�y��=�{���%+�D����̓�_*�'�Kx�8�M�t�	�pEG�����=.M�I��1��Ƌh�T�;�S�n��G��[����ƦUI��	�9W{$<����X]�{�%}+֍m����.�p=���� �Z��
+endstream
+endobj
+3806 0 obj <<
+/Type /Page
+/Contents 3807 0 R
+/Resources 3805 0 R
+/MediaBox [0 0 612 792]
+/Parent 3456 0 R
+/Annots [ 3658 0 R 3663 0 R 3664 0 R 3665 0 R 3666 0 R 3667 0 R 3668 0 R 3669 0 R 3670 0 R 3671 0 R 3672 0 R 3673 0 R 3674 0 R 3675 0 R 3676 0 R 3677 0 R 3678 0 R 3679 0 R 3680 0 R 3681 0 R 3682 0 R 3683 0 R 3684 0 R 3685 0 R 3686 0 R 3687 0 R 3688 0 R 3689 0 R 3690 0 R 3691 0 R 3692 0 R 3693 0 R 3694 0 R 3695 0 R 3696 0 R 3697 0 R 3698 0 R 3699 0 R 3700 0 R 3701 0 R 3702 0 R 3703 0 R 3704 0 R 3705 0 R 3706 0 R 3707 0 R 3708 0 R 3709 0 R 3710 0 R 3711 0 R 3712 0 R 3713 0 R 3714 0 R 3715  [...]
+>> endobj
+3658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 687.965 197.593 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 675.917 218.514 686.544]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 663.868 228.975 674.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+3665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 651.82 213.284 662.447]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 639.772 218.514 650.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+3667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 627.723 223.745 638.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+3668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 615.675 213.284 626.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+3669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 603.626 228.975 614.253]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 591.578 202.823 602.205]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 579.529 208.054 590.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+3672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 567.481 197.593 578.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 555.432 197.593 566.059]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+3674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 543.384 187.132 554.011]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 531.335 197.344 541.962]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+3676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 519.287 187.132 529.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 507.238 197.344 517.865]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 495.19 208.054 505.817]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 483.142 218.265 493.768]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 471.093 223.496 481.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 459.045 176.672 469.671]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 446.996 186.883 457.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+3683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 434.948 228.975 445.575]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 422.899 223.496 433.526]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 410.851 228.726 421.478]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 398.802 197.593 409.429]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 386.754 207.805 397.381]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+3688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 362.934 263.901 373.782]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 350.885 217.879 361.469]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 338.837 185.362 349.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 338.837 200.306 349.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.402 338.837 221.338 349.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.327 338.837 241.264 349.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 326.788 191.45 337.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 314.74 251.614 325.588]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 314.74 267.665 325.588]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.761 314.74 288.697 325.588]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.445 302.691 249.4 313.54]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.496 302.691 265.451 313.54]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+3700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.547 302.691 286.483 313.54]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+3701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 290.643 171.857 301.491]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 278.318 150.52 288.945]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.616 278.318 166.571 288.945]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.667 278.318 182.622 288.945]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 254.498 263.901 265.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [290.06 242.449 302.015 253.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.357 230.401 225.312 241.249]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 218.352 185.362 229.2]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 218.352 200.306 229.2]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.402 218.352 221.338 229.2]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.327 218.352 241.264 229.2]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 206.304 191.45 217.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 194.255 171.857 205.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 181.93 160.981 192.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.076 181.93 177.032 192.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.127 181.93 193.083 192.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.178 181.93 209.134 192.557]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 169.882 171.192 180.508]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+3719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 157.833 218.514 168.46]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.846 110.447 191.783 121.295]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+3721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.771 110.447 211.708 121.295]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+3722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 98.399 193.471 109.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+3723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.459 98.399 213.396 109.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+3724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.942 86.35 158.878 96.7]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+3725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 74.302 182.152 84.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+3726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.14 74.302 202.077 84.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+3727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 62.253 149.056 72.603]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+3728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 62.253 170.088 72.603]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+3729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 50.205 154.286 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+3730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.382 50.205 175.318 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+3731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 687.965 416.695 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 675.98 380.083 686.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 664.272 385.313 674.622]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 652.287 385.313 662.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 640.302 385.313 650.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 628.317 390.544 638.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+3737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 616.332 385.313 626.682]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+3738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 604.347 385.313 614.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 592.362 385.313 602.712]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 580.377 385.313 590.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 568.115 395.774 578.742]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 568.115 416.806 578.742]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+3743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 556.131 385.313 566.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+3744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.409 556.131 406.346 566.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+3745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 544.422 359.411 554.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+3746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.506 544.422 375.462 554.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.557 544.422 396.494 554.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.143) >>
+>> endobj
+3748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.483 544.422 416.419 554.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+3749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.515 544.422 437.451 554.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+3750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.221 521.978 363.176 532.328]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.206 498.008 411.161 508.856]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+3752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.15 498.008 426.105 508.856]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+3753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.428 486.023 433.384 496.871]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+3754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.479 486.023 449.435 496.871]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+3755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.098 474.038 425.054 484.886]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+3756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.419 462.053 391.374 472.403]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.546 450.068 394.502 460.916]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.113 438.083 436.068 448.931]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.164 438.083 452.119 448.931]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+3760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.152 415.638 412.088 426.486]
+/Subtype /Link
+/A << /S /GoTo /D (page.195) >>
+>> endobj
+3761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.135 391.668 467.091 402.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+3762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.642 379.683 435.597 390.266]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+3763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.586 379.683 450.541 390.266]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+3764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.637 379.683 466.592 390.266]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+3765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.688 379.683 482.643 390.266]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [486.739 379.683 498.694 390.266]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.936 367.698 460.892 378.546]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+3768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.88 367.698 475.836 378.546]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+3769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.545 355.713 461.5 366.561]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+3770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.545 343.728 461.5 354.576]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+3771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.596 343.728 482.533 354.576]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [485.522 343.728 502.458 354.576]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.219 309.299 377.155 319.649]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+3774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.005 297.314 380.941 307.664]
+/Subtype /Link
+/A << /S /GoTo /D (page.182) >>
+>> endobj
+3775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.555 285.329 370.491 295.679]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+3776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.234 273.344 367.171 283.694]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+3777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.171 261.359 381.107 271.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.196) >>
+>> endobj
+3778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.056 249.374 387.992 259.724]
+/Subtype /Link
+/A << /S /GoTo /D (page.195) >>
+>> endobj
+3779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.942 237.389 382.878 247.739]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+3780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.89 225.404 393.826 235.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.196) >>
+>> endobj
+3781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.335 213.419 405.272 223.769]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+3782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.283 201.434 411.239 212.017]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.925 189.449 400.88 200.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.976 189.449 421.913 200.297]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+3785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.368 177.464 438.323 188.312]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.419 177.464 459.356 188.312]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.144 155.019 398.099 165.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.195 155.019 414.15 165.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.139 155.019 429.094 165.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.19 155.019 445.145 165.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.241 155.019 461.196 165.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.863 143.034 376.818 153.882]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.914 143.034 392.869 153.882]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+3794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.965 143.034 408.92 153.882]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.225 120.589 354.18 130.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+3796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.821 120.589 392.758 130.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.995 108.604 348.95 118.954]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.046 108.604 365.001 118.954]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.52 62.19 438.476 73.038]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 50.205 415.063 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 50.205 431.114 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 50.205 446.058 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3808 0 obj <<
+/D [3806 0 R /XYZ 86.4 726.045 null]
+>> endobj
+3805 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3928 0 obj <<
+/Length 3051      
+/Filter /FlateDecode
+>>
+stream
+x��\�r�8��+����h��$v�Nŏ�RS��B�8nUdɑ��S��sA�(S$`^sf%�E�spxy :�����뻣��
+=r�i�Gw�
YM��pG�`�����1���ϻw#I)qL�}��/�����8:�;�v���t����R�&G����)|�nD�pv�3��a$�#
���>
��|l@�1M��#�aFo����������|�MON�ǟ��_Ɠn���<��x�����?r�[j����G�O�mL��->�C��
����2F�r[��l��rњ��}�Ld�l1ɶ�}_nf����t�KSG�u�5eMu
]
���plD<ў��&?B�8r&E�C�����s��]�n�Ɠ��x�5��=d드��i6�,W/Ⓤ���b��<
���q�<9���͡���1�y\߅E�
G���q�:
��B�M
2%T��BOֹ��,L���'-d�S|����:����1N�5�̝œ�!�E6.<x��o�z���B�U��u���Gpt�l�#k@�H�X }���ƛ�t#���.
���xj1\�E�Q�p�&L�X\c[q
c5g�?<<Ee�@��*R��v�.R��Y��ӬA
C����k�5�}&|k�a����3
�'5�Ns
^h.WӞ>+e��8:-��Բ������]e߾�V�C�#�[µg��O��&&?��M�sD��1삂���Sv�:a�#��X 5�z\5���D��'��r1�mf�E��x�=v���|9�����x<	_{<��kQv�*��4� ��Ï�
w��x>ž,P\�p~|��8�Xn�1��
�E�c��@[70�أ]�몜�U3����Lj6g�}�[�/=P���b�x��j�GE����n
�Zf�����������?�
+
�d�h���
„������B�F(��%ɋ���
ɝ�c�J���~�a��?����.��4��<}�TV�	��ĥ$ڸ>�:��ܒ,���7s���N��j5��Tdk��U�]��j�(g��^fm38��CC���1ﹲ��	�@ �B��3�y�W�}K�:K��h��
3�.!h
����Z�gP�
R�
���y�P�JF���[��
�[�{6�XIQ\,i*���Ϡ�;� r�=jO�6ѷ��*FJ��%
�R�F`P�]�p�m֓ޭ6o��I�]��0dk��`I��d��3��)�n�Ze��w ���v�m84�Cn�s�I��?�J�‡l5�{'I�H4�[
���'�CE���㦡cLY�T�1.���
�tyQ�0v�3��{���1
�I�!��x
S�)G` ђC;H%F��|���x�����L`�e�A�]�1��A#H��u왚��Qi
��8K�r懂Q
+3�H�gJޟF%yȣ�D�X%��Y]3P��B`(����L��Өyt�i�NK�,ֿ=�왱�?�R��0�ZZT1>0�0DU����Y�ެ��Z�˜#�`͗1h�E��iE��h��?�u�{� �(�D	[#0Lm�4W�F at m�K�?~)tH�j���=&�p8-�8�����M�P�^/��k����Fi/���q$$�+x��0�Y��>�r�u
n �	�"8��n�9��'Q
+
rd�

;�=�q��!q9�"7���=G��$J�Chh.���p�RQW~��9���P�
0�,������9g(j�)��v����c�<u�S�U
	#36��-�E
Aw;�>^d����~�W�����hB�
� ś�DJ� �
S��,qR%茀]�
b��Iu>�h����=(R��:Aj�R�{�<V��۫��. H��$�Z�������=HK�
����Pt��Ԃ�r2���9���%����P���[\�P�
:
������A�]�p���C�

B��z����
0dSF���K�C�!z;h�93��,!�3��Û2��x��`�5ʠ�JG�Su�A*;xu��b�'
H
8�Cޔ���:$F�-%a
+ʖ棈�c��N��t5%�!2l)r;HDN�c�S�4�7��i��`K�CX�EPֵY��x���d�җxKJ�(�P
}k�-y&�	ia�8s=ޔ��z:4F�-Ea�E�4~�"ʌ�7%mYR\g?�f �FA�?gЪ�:HEQ�N�y��Ca0%���v�PK�CT�Y"���*E�+J4�$�7%�����8D
h�pM�?>_�Tޔ�f��5F at -5Q�ũ��e�›b'�m=B�,
+2$
�t
y����
Z2����[�����K�Ch�&OtL'�|��L!o�L
+yS\%�3t�t=��[���2
�gRț�LEˌ]�\�
�۳�86��Xۆ��ݶ���K�C衶�&�
�u߭i��`j�9.Bi�R�z�E��<(�� (ņ7��'t��-6
���/
�R�qU�
f29�-�#m
�h5E�%q�R�v�����, qp�*����T9�
f29я���V$��d�����!�?����E�1p�S_P�(���8�E+.\|��vd�$�f"�q�<Q�����5\�‚'�E���x1m<Pq"h�It��z,��^# ?�'l5��D<z{�/���r�9�۝^��E���S��� a͉��;����d����=����E�_�M��
�;�/�4�L�\��u
K�p�)k8:7L6��Ͳ8�w��,��ߝԻ�֛.EX3�}
+3�d�q�(������?� ��džP��3b�����6��67�x13������"j��XCm�w�ք���F�W�H�Y�E�RZ0U-꽹��;��kj�y�K
XC���|��O&�˴J_�mQ|@�,�J����:Va�R�����.
+����W��AQLU�y��" ����w=O<dڤ�o�
��]�+�O�]�����!��KQݗAb���LTKxg��^����eZ
0_>�*	/\B�@YR[0�
��T7D
�h��B6��Z4��1�"`���/
m�˗�b�1���
+e�Q��\�����!�ˆ�D��< zn�,d��#�"U_��y��������:X��0�-���g�;䗍�{����T�R��T���C� ��E!$F
+ӭg`�`�
!>�8
+endstream
+endobj
+3927 0 obj <<
+/Type /Page
+/Contents 3928 0 R
+/Resources 3926 0 R
+/MediaBox [0 0 612 792]
+/Parent 3456 0 R
+/Annots [ 3803 0 R 3804 0 R 3809 0 R 3810 0 R 3811 0 R 3812 0 R 3813 0 R 3814 0 R 3815 0 R 3816 0 R 3817 0 R 3818 0 R 3819 0 R 3820 0 R 3821 0 R 3822 0 R 3823 0 R 3824 0 R 3825 0 R 3826 0 R 3827 0 R 3828 0 R 3829 0 R 3830 0 R 3831 0 R 3832 0 R 3833 0 R 3834 0 R 3835 0 R 3836 0 R 3837 0 R 3838 0 R 3839 0 R 3840 0 R 3841 0 R 3842 0 R 3843 0 R 3844 0 R 3845 0 R 3846 0 R 3847 0 R 3848 0 R 3849 0 R 3850 0 R 3851 0 R 3852 0 R 3853 0 R 3854 0 R 3855 0 R 3856 0 R 3857 0 R 3858 0 R 3859 0 R 3860  [...]
+>> endobj
+3803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.858 687.689 247.795 699.644]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.891 687.689 268.827 699.644]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+3809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.939 664.324 213.894 675.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.527 652.366 190.482 663.214]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.578 652.366 206.533 663.214]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+3812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.522 652.366 221.477 663.214]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.858 639.853 247.795 651.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.891 639.853 268.827 651.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [272.923 639.853 289.859 651.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.143) >>
+>> endobj
+3816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.939 616.489 213.894 627.337]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.939 592.571 213.894 603.42]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.527 580.613 190.482 591.461]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.527 556.695 190.482 567.543]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+3820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.858 544.183 247.795 556.138]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.891 544.183 268.827 556.138]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+3822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.527 520.818 190.482 531.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.578 520.818 206.533 531.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.522 520.818 221.477 531.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+3825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.858 508.306 247.795 520.261]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.891 508.306 268.827 520.261]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+3827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 474.918 182.152 485.268]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+3828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.643 452.935 134.58 463.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.178) >>
+>> endobj
+3829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.183 440.976 119.138 451.327]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.234 440.976 135.189 451.327]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.276 429.018 126.25 439.368]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+3832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.413 407.035 124.368 417.385]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.464 407.035 140.419 417.385]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 395.076 134.829 405.426]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+3835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.925 395.076 150.88 405.426]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.649 371.158 215.604 382.007]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.67 359.2 242.625 370.048]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.227 347.241 236.182 358.089]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+3839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.435 335.282 219.39 346.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.937 323.323 212.892 334.171]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.176 311.364 186.131 322.212]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.227 311.364 202.182 322.212]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.278 311.364 223.214 322.212]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.176 299.405 186.131 310.254]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+3845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.372 287.447 221.327 298.295]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.561 275.488 159.516 285.838]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.612 275.488 180.548 285.838]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.002 263.529 117.976 274.266]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+3849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.404 241.269 206.34 251.896]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+3850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 229.311 241.488 239.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 217.352 251.949 227.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 205.393 241.488 216.02]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.321 193.434 236.258 204.061]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+3854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 181.475 251.949 192.102]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 169.516 241.488 180.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.555 157.558 232.492 168.184]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+3857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 145.599 267.64 156.226]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.164 133.64 278.101 144.267]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 121.681 267.64 132.308]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 109.722 262.41 120.349]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+3861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.164 97.763 278.101 108.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 85.805 267.64 96.431]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.864 73.846 216.801 84.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.156) >>
+>> endobj
+3864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 61.887 251.949 72.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 49.928 262.41 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.594 687.965 476.53 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.363 675.927 471.3 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+3868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.055 663.889 486.991 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+3869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.594 651.85 476.53 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.452 640.088 368.407 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.502 640.088 389.439 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+3872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 627.773 429.457 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.981 615.735 439.918 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.981 603.696 439.918 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+3875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 591.658 429.457 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.133 579.619 466.07 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 567.581 429.457 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.29 555.819 424.227 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+3879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 543.504 403.306 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 531.742 413.766 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 519.427 403.306 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 507.666 398.075 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+3883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 495.627 413.766 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 483.589 403.306 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 471.273 398.075 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 459.512 408.536 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 447.473 408.536 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 435.435 398.075 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.29 423.12 424.227 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.751 411.081 434.688 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.29 399.043 424.227 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 387.004 418.997 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.171) >>
+>> endobj
+3893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.751 374.966 434.688 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.29 362.927 424.227 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 350.889 408.536 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 339.127 418.997 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 326.812 408.536 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 315.05 403.306 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.172) >>
+>> endobj
+3899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 303.012 418.997 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+3900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 290.974 408.536 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+3901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 278.935 385.313 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+3902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 266.897 390.544 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+3903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 254.582 390.544 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+3904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.639 254.582 411.576 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+3905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 242.543 395.774 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+3906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 242.543 416.806 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+3907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 230.505 395.774 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+3908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 230.505 416.806 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.189) >>
+>> endobj
+3909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.956 206.705 383.93 217.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+3910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.919 206.705 398.874 217.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+3911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.01 194.666 455.966 205.404]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+3912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.916 182.628 421.871 193.365]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+3913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.86 182.628 436.815 193.365]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+3914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 170.589 377.154 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 158.551 403.306 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+3916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 146.512 392.845 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+3917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 134.474 398.075 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+3918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 122.435 392.845 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+3919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 110.397 387.615 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+3920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 98.359 377.154 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 86.32 382.384 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+3922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 74.282 377.154 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+3923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 62.243 408.536 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 50.205 382.384 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3929 0 obj <<
+/D [3927 0 R /XYZ 86.4 726.045 null]
+>> endobj
+3926 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+4079 0 obj <<
+/Length 2450      
+/Filter /FlateDecode
+>>
+stream
+x��[Is�8��W�(W��ؗ�

�Y�b;ck��Lh��Y#�j�r:3~�M&) "�3�sI$�|���V<�0z�`������w�G
+(�y4��$4XNP4[D_&��^������@���0&��'��_O��F���Iy4:��
��/?G%���uO%
+`�iݞ��v��r�W �kث��*���uD0.��
�>
��{���}L�8P��@I���Kȟ�u�c ���?Uժ��N7�O�/SB�q�\P3;@�	"�i�2�fV(@�
¬��
�l �.���>���hr��\J��!W���`
�[-	r4���1[j���:-�#xe� �jQ���������Ƀ���}��KCN@
�1�`f%�k4��L�:hϥX��Ip ܖ�.n�� ��2$�� 
b*�-i
�`[z;���h��=r.R 
�Z$�UI������R	A��^����mX��
�u&P+�E	-���륥� m�Zt�������	mR�׉�|��/
���.�"�YKQ�mɬf
ژ��4k�Ƭ=��I�
V�� e����f���W�
��ڴ���lvfJ�HW6
T��B
�y�(�j�G�S'k��-E�]j5h �֢]P�E�6&킾RKQ�bʉ��'�@��KQ��w��
 �ڳ
�g �ƞ]Уg\^6bht{�(<Lg_��m�m�h �֢]P�E�6��
��;"��|v}�L�G�k����)���v���`��MISL����l]�KV��Hj_��@�_A�.�l/O+�t���dW�H
�K����������8_�V�7���!�]kê�ʗ�^�c��*~����t��y�ys:E��
+Q��Ë]�%Ⱥ�E��$�x�yL����7��>˻n��OJ�W���AZ���sZ�b1�6�MD>���ܴH�Hk&kb5�Z�J˝���A���{�=���
��m��1].�H
JB��C�c��cBZu��D��������e�lt�iO��PN�MI�:u�U���8+������$�5;t���5�0��2om#
�N��'
3Ȑ�u����O�@��J���*\�f�����
+
��N��L�u��
�.��ᅮu��3
�%�NՔOFU�Z�JՒ�w(!�O��G-�!mշ����O"�+�*
�_ ^��=׵E2��C���֣^j���N��ɂ�R�RJ�p�=K)˚�
��)�r�"1��/�:���Y��v��8�<f��$	�z���o[%��*�%|t�ļ�:n��٘��G�ڑ�s����ױ��+�}W�74�E��$ϳ&��U�}1ϖ��e�o�e��������
�>�� h7�k3�I�H6�Y� ���ʻ:*
�R��4s�yHM��
+�@�&[�E|�.�
Q����A�|sqn��AU����ΠQ���(%a�
A������b��6v0G|gDy:$C���~:C�P��_��b!�ג�b�s
�f���1�3!�g���t��������!1B%Hĉ�Xc�
	��,!���?>{���S4p����#�2$Q�V��/NW/œ��W��9�7���cE����
pÌ�֤�к6`n���%�Zel�b���j�3�.�A<��.���v����v�^�V����N��W)]0���
�0��}�u�G|<�?��f?$
+H���W|['�v����j��[Z��iio��F�t��{������x̓xᚽ��*z�� ��m�o(
+0m��
���<ź~� #���ؔ�
����|9Kk�U���I]4"e���Za[Vϯ�n
u��k�غj��LY���^�4G����F'̓t�������	�>mu��<}x��f��;ؤ�f�u�]��h���d>�X���2yrƳo�AZ��t�1cb�5&VV���ܡK�h9�����X�����s
+M

�i,�RjZ
��Zܴ?{�H�l�ڨˮ��4�a�ӹ��&�|d+���٫�7����w�F��#�O��~/��ܛjK0��E�^:0v����m]�z�?��0�G��(�T�M���$L�@�-|_�	]�E��
�V��MY��+�Z� �)^6�Ч����\�Nٟ2�
����q��\�Ł�)8�����g�>�� �E�q�
��]#U�"�1��٧�2�n���n[9��b�Q'�"-�9G�|gI�&�n�V�Y�
k�i �F��<[�	�(�B���z!W�M6E��U�p���3P�.Ϟޖ�
�P�z�1��0��9��07�J��H/����¨�  �Pn�3(p��0�l�;�a/n��2�1
�uӼ�c�Z±
@
��ֲ^����퍡I�s8��5
�2	�:
	�Ea�P�6��������of�v�����S��.?$�$O��v�������
m����ѫ�c��|w-������v�m���/;ˇ��@��
��'EV���b?bѮ�_1�C
+endstream
+endobj
+4078 0 obj <<
+/Type /Page
+/Contents 4079 0 R
+/Resources 4077 0 R
+/MediaBox [0 0 612 792]
+/Parent 3456 0 R
+/Annots [ 3925 0 R 3930 0 R 3931 0 R 3932 0 R 3933 0 R 3934 0 R 3935 0 R 3936 0 R 3937 0 R 3938 0 R 3939 0 R 3940 0 R 3941 0 R 3942 0 R 3943 0 R 3944 0 R 3945 0 R 3946 0 R 3947 0 R 3948 0 R 3949 0 R 3950 0 R 3951 0 R 3952 0 R 3953 0 R 3954 0 R 3955 0 R 3956 0 R 3957 0 R 3958 0 R 3959 0 R 3960 0 R 3961 0 R 3962 0 R 3963 0 R 3964 0 R 3965 0 R 3966 0 R 3967 0 R 3968 0 R 3969 0 R 3970 0 R 3971 0 R 3972 0 R 3973 0 R 3974 0 R 3975 0 R 3976 0 R 3977 0 R 3978 0 R 3979 0 R 3980 0 R 3981 0 R 3982  [...]
+>> endobj
+3925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.405 688.242 147.342 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.636 676.185 152.572 686.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.405 664.128 147.342 674.478]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 652.071 173.494 662.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+3933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 640.013 168.263 650.364]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+3934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 627.956 163.033 638.306]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+3935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 615.899 178.724 626.249]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.244 603.842 198.181 614.192]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+3937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.014 591.785 192.951 602.135]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+3938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.553 579.728 182.49 590.078]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+3939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.093 567.67 172.029 578.02]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.323 555.613 177.26 565.963]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+3941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.093 543.556 172.029 553.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+3942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.25 531.499 180.187 542.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.155) >>
+>> endobj
+3943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.33 507.779 134.304 518.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+3944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.99 483.665 197.926 494.513]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.915 483.665 217.851 494.513]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.015 471.607 200.97 482.456]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.959 471.607 215.914 482.456]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.01 471.607 236.947 482.456]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.284 459.55 203.24 470.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.228 459.55 218.184 470.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.279 459.55 239.216 470.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.284 447.493 208.221 458.341]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+3953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.21 447.493 228.146 458.341]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+3954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.433 435.436 215.388 446.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.377 435.436 230.332 446.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [234.428 435.436 251.365 446.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.354 435.436 271.29 446.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.02 423.379 221.975 434.227]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.964 423.379 236.919 434.227]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+3960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.015 423.379 257.951 434.227]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.321 411.322 171.276 422.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 389.246 142.191 397.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.179 389.246 162.116 397.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+3964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.407 375.252 148.362 386.1]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.351 375.252 163.306 386.1]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.135 363.195 206.09 374.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.079 363.195 221.034 374.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.13 363.195 242.066 374.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.055 363.195 261.992 374.043]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.99 339.081 197.926 349.929]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.015 327.023 200.97 337.872]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.959 327.023 215.914 337.872]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.063 314.966 277.019 325.814]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+3974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [280.007 314.966 291.963 325.814]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+3975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.885 302.909 220.84 313.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.829 302.909 235.784 313.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+3977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.284 290.852 203.24 301.7]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.228 290.852 218.184 301.7]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.959 278.795 215.914 289.643]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.903 278.795 230.858 289.643]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.284 266.737 208.221 277.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+3982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.21 266.737 228.146 277.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.208 254.68 231.163 265.528]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.602 242.623 234.539 253.471]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+3985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.972 230.566 303.909 241.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+3986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.718 218.509 213.673 229.357]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.433 206.452 215.388 217.3]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.377 206.452 230.332 217.3]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.02 194.394 221.975 205.243]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+3990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.964 194.394 236.919 205.243]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.015 194.394 257.951 205.243]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 172.319 142.191 180.732]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+3993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.179 172.319 162.116 180.732]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.407 158.325 148.362 169.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+3995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.351 158.325 163.306 169.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+3996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.135 146.268 206.09 157.116]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.67 134.211 159.625 145.059]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+3998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.721 134.211 175.676 145.059]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.772 134.211 196.709 145.059]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+4000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.804 134.211 217.741 145.059]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+4001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.885 98.433 268.821 109.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+4002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.905 86.376 148.86 97.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+4003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 74.319 149.056 84.669]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+4004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 74.319 165.106 84.669]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+4005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.202 74.319 181.157 84.669]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+4006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.253 74.319 202.19 84.669]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+4007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 62.262 149.056 72.612]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+4008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 62.262 165.106 72.612]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+4009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.202 62.262 181.157 72.612]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+4010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.253 62.262 202.19 72.612]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+4011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 50.205 149.056 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+4012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 50.205 165.106 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+4013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.202 50.205 181.157 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+4014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.253 50.205 202.19 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+4015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 688.242 378.867 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+4016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.963 688.242 394.918 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+4017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.014 688.242 410.969 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+4018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.065 688.242 432.002 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+4019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.233 664.332 389.188 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+4020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.284 664.332 405.239 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+4021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.725 652.377 435.681 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+4022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.547 640.421 379.502 651.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+4023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.74 628.466 446.695 639.314]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+4024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.084 616.511 407.039 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+4025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.028 616.511 421.983 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+4026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.017 616.511 439.973 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+4027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.007 616.511 457.962 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+4028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.996 616.511 480.933 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+4029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [483.922 616.511 500.858 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+4030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.893 616.511 523.829 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+4031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 606.493 366.772 614.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+4032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 592.324 364.641 602.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+4033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 592.324 380.692 602.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+4034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.788 592.324 396.743 602.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+4035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 580.369 374.853 590.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+4036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.038 568.69 362.012 579.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+4037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.629 556.735 352.603 567.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+4038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.676 535.339 426.631 546.187]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+4039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.167 523.384 466.122 534.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+4040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 501.987 359.411 512.337]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+4041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 489.755 369.871 500.382]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+4042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.198 478.077 391.153 488.925]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+4043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.249 478.077 412.185 488.925]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+4044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.764 466.122 432.719 476.97]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+4045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.032 454.167 432.969 465.015]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+4046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.064 454.167 454.001 465.015]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+4047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.866 442.211 432.802 453.06]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+4048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.791 442.211 452.728 453.06]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+4049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [467.284 430.256 484.221 441.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+4050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.541 418.301 440.496 429.149]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+4051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.421 394.391 388.358 405.239]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+4052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 372.418 366.772 380.83]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+4053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.409 358.525 379.364 369.373]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+4054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.46 358.525 395.415 369.373]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+4055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.977 346.57 375.932 357.418]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+4056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.883 325.174 467.838 336.022]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+4057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.96 313.218 430.915 323.802]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+4058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.116 277.353 418.052 288.201]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 265.398 364.392 275.748]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+4060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 253.443 378.867 263.793]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+4061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 241.211 437.617 251.838]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 229.256 395.774 239.882]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 217.3 401.004 227.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 205.345 416.695 215.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 193.39 427.156 204.017]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 181.435 395.774 192.062]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 169.48 395.774 180.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 157.525 406.235 168.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 145.569 416.695 156.196]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 133.614 406.235 144.241]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+4071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 121.659 380.332 132.286]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+4072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.755 109.704 420.71 120.331]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+4073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.027 86.07 411.964 96.918]
+/Subtype /Link
+/A << /S /GoTo /D (page.196) >>
+>> endobj
+4074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 74.115 392.564 84.963]
+/Subtype /Link
+/A << /S /GoTo /D (page.196) >>
+>> endobj
+4075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.027 50.205 411.964 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.195) >>
+>> endobj
+4080 0 obj <<
+/D [4078 0 R /XYZ 86.4 726.045 null]
+>> endobj
+4077 0 obj <<
+/Font << /F36 728 0 R /F48 966 0 R /F8 729 0 R /F16 717 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+4126 0 obj <<
+/Length 1082      
+/Filter /FlateDecode
+>>
+stream
+xڵX�n�F��+f)�dޏe�D��i
�`dA�c�-_&)n�C�Mjw#�=�q��K!�|��]��,� jAX�% �h((���	a�𢡊�!5�֮�}q���������a��}�ΞC�X����D��� A���>�F5$�*_g_fh?
�FR�b)
��6[�q�U�����t\}����R:ǚw8�o�x?� �k�;�j����MZ6V�8(�D�]���2^/Z�$�LX6�l^��エ�i]X�R�;�#S�˸hp��<�̓��=�����O�-�E`���څ��Tz�V�w
B�C�f
L��M����^o1\'o�
��C
��I\7y<�RL��e�ڴ`SXt���)��*��8׷����gQ5Qv@����/̙8`����(��XK0Q�v�K
�cjB!��YMZ�AbJ B�u%s�٣�l^���I���M����lM�P�7g���Ur�����~*L5�1P�3�vE !G�L�i}
�9\",+3}� [...]
�C��T�x(�T�K�5:8�Bi����j�D��ӕ�%5�}n���h��Q}x�&���� S�e1-�u��2��fR�'2e��I�i��gHʻޘy[�	9ݧ����j at V���i��X�_��kd%���r�W��/�}^.�Ԋ7;SX@ �O��ʔN
�0�܁*�|S�i�
C3����>k�`��4
+cǞ
}Usۋ:~l���
�0
��*�$1�cbx0�֏�a��A���y��V��L����p����x��q�ج�E7��M��2�|�������뷱����
a
�ad�o�I��rT�Q8v(��2Y������t�)��3�C.��E�$F��M���?�
��vr�ds�G�!�m����P���_C}W�,w+~X�nj&�}����O��c!���������H��!��'�
e����P}Ĕ]f_�@��'��0H@�O�9�m�pU��A;޻A�ؼ2�р�
+�֧;
+ܹ���.�
X�m�Y�v�om{)���ě{���S�2w��u��0
*+�e����e�jN}[���wU0
+endstream
+endobj
+4125 0 obj <<
+/Type /Page
+/Contents 4126 0 R
+/Resources 4124 0 R
+/MediaBox [0 0 612 792]
+/Parent 3456 0 R
+/Annots [ 4076 0 R 4081 0 R 4082 0 R 4083 0 R 4084 0 R 4085 0 R 4086 0 R 4087 0 R 4088 0 R 4089 0 R 4090 0 R 4091 0 R 4092 0 R 4093 0 R 4094 0 R 4095 0 R 4096 0 R 4097 0 R 4098 0 R 4099 0 R 4100 0 R 4101 0 R 4102 0 R 4103 0 R 4104 0 R 4105 0 R 4106 0 R 4107 0 R 4108 0 R 4109 0 R 4110 0 R 4111 0 R 4112 0 R 4113 0 R 4114 0 R 4115 0 R 4116 0 R 4117 0 R 4118 0 R 4119 0 R 4120 0 R 4121 0 R 4122 0 R 4123 0 R ]
+>> endobj
+4076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 688.242 167.983 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.195) >>
+>> endobj
+4081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.446 664.332 187.382 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+4082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 652.377 167.983 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.195) >>
+>> endobj
+4083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.936 640.421 204.872 651.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.195) >>
+>> endobj
+4084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.446 616.511 187.382 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.196) >>
+>> endobj
+4085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 604.556 167.983 615.404]
+/Subtype /Link
+/A << /S /GoTo /D (page.196) >>
+>> endobj
+4086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.941 592.601 205.896 603.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+4087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.78 580.646 174.735 591.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+4088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.724 580.646 189.679 591.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+4089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.173 568.69 196.129 579.041]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+4090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.713 556.459 185.668 567.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+4091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 532.825 182.152 543.175]
+/Subtype /Link
+/A << /S /GoTo /D (page.190) >>
+>> endobj
+4092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.382 510.907 177.337 521.755]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+4093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.432 510.907 193.388 521.755]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+4094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.483 510.907 214.42 521.755]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+4095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.516 510.907 235.452 521.755]
+/Subtype /Link
+/A << /S /GoTo /D (page.196) >>
+>> endobj
+4096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.746 498.952 146.702 509.8]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+4097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.797 498.952 162.752 509.8]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+4098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.848 498.952 178.803 509.8]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+4099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.899 498.952 194.854 509.8]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+4100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.95 498.952 210.905 509.8]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+4101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.001 498.952 231.938 509.8]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+4102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [236.033 498.952 252.97 509.8]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+4103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.022 477.034 169.977 487.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+4104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.253 453.124 246.19 463.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+4105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.926 441.169 203.881 451.519]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+4106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.484 429.213 197.439 439.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+4107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.585 417.258 241.54 428.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+4108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.296 405.303 237.251 416.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+4109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.011 381.393 169.948 391.743]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+4110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.959 369.438 178.914 380.286]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+4111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 357.482 149.056 367.833]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+4112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 357.482 165.106 367.833]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+4113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.095 357.482 180.05 367.833]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+4114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.146 357.482 196.101 367.833]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+4115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.197 357.482 212.152 367.833]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+4116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.248 357.482 233.185 367.833]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+4117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.28 357.482 254.217 367.833]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+4118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.313 357.482 275.249 367.833]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+4119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 345.527 159.267 355.877]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+4120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.363 345.527 180.299 355.877]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+4121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [115.491 323.61 122.464 333.96]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+4122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.822 311.654 128.796 322.004]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+4123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [234.982 289.737 246.937 300.585]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+4127 0 obj <<
+/D [4125 0 R /XYZ 86.4 726.045 null]
+>> endobj
+4124 0 obj <<
+/Font << /F36 728 0 R /F8 729 0 R /F16 717 0 R /F48 966 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+4128 0 obj
+[532.2 532.2 591.1 532.2 400 532.2 591.1 355.6 355.6 532.2 296.7 944.4 650 591.1 591.1 532.2 501.7 486.9 385 620.6]
+endobj
+4129 0 obj
+[513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4]
+endobj
+4130 0 obj
+[833.3]
+endobj
+4131 0 obj
+[472.2]
+endobj
+4132 0 obj
+[505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7 513.5 534.8 474.4 479.5 491.3 383.7]
+endobj
+4133 0 obj
+[619.8 590.3 590.3 885.4 885.4 295.1 324.7 531.3 531.3 531.3 531.3 531.3 795.8 472.2 531.3 767.4 826.4 531.3 958.7 1076.8 826.4 295.1 295.1 531.3 885.4 531.3 885.4 826.4 295.1 413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 [...]
+endobj
+4134 0 obj
+[611.1 611.1]
+endobj
+4135 0 obj
+[441]
+endobj
+4136 0 obj
+[892.9 339.3 892.9 585.3 892.9 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 892.9 1138.9 1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 1138.9 1138.9 892.9 329.4]
+endobj
+4137 0 obj
+[458.3 458.3 416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.5 472.2 8 [...]
+endobj
+4138 0 obj
+[684 700.6 827.6 533.6 588.2 758.1 480.3 1228 880.8 702.8 739.7 658.9 671.3 670.1]
+endobj
+4139 0 obj
+[339.3 892.9 585.3 892.9 585.3 610.1 859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2 431.6 675.4 571.4 826.4 647.8 579.4]
+endobj
+4140 0 obj
+[446.4 446.4 569.5 877 323.4 384.9 323.4 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4 323.4 323.4 877 538.7 538.7 877 843.3 798.6 815.5 860.1 767.9 737.1 883.9 843.3 412.7 583.3 874 706.4 1027.8 843.3 877 767.9 877 829.4 631 815.5 843.3 843.3 1150.8 843.3 843.3 692.5 323.4 569.5 323.4 569.5 323.4 323.4 569.5 631 507.9 631 507.9 354.2 569.5 631 323.4 354.2 600.2 323.4 938.5 631 569.5 631 600.2 446.4 452.6 446.4 631 600.2 815.5 600.2]
+endobj
+4141 0 obj
+[444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8]
+endobj
+4142 0 obj
+[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 71 [...]
+endobj
+4143 0 obj
+[639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.6 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520 [...]
+endobj
+4144 0 obj
+[1027.8 402.8 472.2 402.8 680.6 680.6 680.6 680.6]
+endobj
+4145 0 obj
+[613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 5 [...]
+endobj
+4146 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+4147 0 obj
+[625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 [...]
+endobj
+4148 0 obj
+[833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 2 [...]
+endobj
+4149 0 obj
+[638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 [...]
+endobj
+4150 0 obj
+[550 575 862.5 875 300 325 500 500 500 500 500 814.8 450 525 700 700 500 863.4 963.4 750 250 300 500 800 755.2 800 750 300 400 400 500 750 300 350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475]
+endobj
+4151 0 obj
+[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544]
+endobj
+4152 0 obj
+[377.8 319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3]
+endobj
+4153 0 obj
+[354.1 354.1 458.6 719.8 249.6 301.9 249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7]
+endobj
+4154 0 obj <<
+/Length1 1816
+/Length2 12811
+/Length3 0
+/Length 13808     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX�͚�q
\�5��!8�%wh�������!�;	�
Bp����3;��������U��ZU�P�*�0�%l�
XYx�r"�,� Fff$
+
+Q{��#��Z���
`��aH 
��?/;/3'@����
dj����'�
 l�X�

̀V�F� #�э li	P�'��
t �;��XX � #G�!�d�����&6 �;����3��,
+@�/�4 �HckK7�1��I��
���C��..�di)o`�O�9��
�@�n�ace�������w����Dl,�O�ώ� #akSK ���C 	�+�X�hd01�t �k
hm��%���� &Q�/�Rt�����T4 Y;~q��O����,�=���
��
������j&nmdc
�6�rp
��
ܐ��L
  ���
+ ��31Z�8�S `K� &6�H�l('�I���'�I�q�W�Lb��$��b0I�! ��b0I�!6 ��?�.���e����w��C��
+�!npw�?���ݕ����b0}�C`-����wW�C���!
pw�?Vm��y��g�� ��X���
ag�g���O>
3���_^�O������>�f%�-0�+L�?5��A翊�3o�d�W>8��/��S�
욙�������/�4�
�Y��`,�B�GV|�0���N�Y��b�G
8��L�c�g\���
hm	4��;����+���m�+���g;a�dw�s�?_��
��
��>�������
� �����H����,`-p�;����3��
]l�J �p�
�
;��`�.
p��_.���-t�#\�
h��V���'"b����>�
�`Q`�� 
vN��i�dv��_��Y�o6��@�+�i���_�yJsp��x�L9,-��iK�|C�|׻��8H��1;ڍz�NJtL���g��NO�I��~v��������m��rn��dw?�w4/\�r@*�m��%jf���S��r�F
+�M˹�[F '��D��jHP=%�2Z�]Y({Ⱥ
Zb<��t��yB+��M��cBn«
ă\D�Ç���PV~�{�m6r1�p��fV�4�5M�1U��kn�=K�����j��7?�V����.	
}X�~
�c��MK�4^@肷�z'��D��`�
p*'�ޔ���
렕Q�gb'U�vA�G�#�8p���BBcs�C��=��6{��^5gy�"Q�u��f�UV�{�v�n������#�a?v�
+_
�O}R�A:�;�RA0�$�[5܊����CD�����I��M�y�XōD�l��Ll*4+��G
�uD� u0sلڬ����w�G��g��
Fj��n:bX%��nƻ �0���uA-�3�:va��

�F��
+��Z�-�QM���̞�ߛQws-*(�{XW(��'���M7�I�&O$�%5
�t��ׯ<H���i�\��
�3~�ÔH(�א������
L�����t�����u��i]R�
�ٹ�W�i���p���~�8��GZB���JY'�6�b]�3 �h�h�������<&�~�b����p4�QKB �{AO9RzF�����"�t����y�A���򊦠4؄K$�I
���UAJS{$�r���hyu�l�O0���C��_�V��|�(�h�;u�nw��nU�f��)�zn~m�jDD���v>�S1��vw$ � �4r�
�X������=���n`��s,�9H�Vꞙ����i�IL�T(|#�K��0wiqt#k��]�y�>��ݭG6^�k�F�Q�m�/s<J��{��`-�fS���O�,=�iᒢ��	f��	�ʕ����Vy^.�H|4���M�e� �;�f֮C��|#�L:�e�{*� *�4p
g[�<���y��as�H���rR��.D
)��� [...]
+�ܪ�7��}��(����\_�u~1��k�L����Y�H6�l>/U͟"X>Y4�f�I�>��F�f at a����
N]
tGi�����m֞�
Փ�6Ӛ
9�H)o5��*�������^!6"���!,O�0�K��XG�a�DI揑!B�
*��4���P��m����1r\���+#fO����
 p��oTLfT���OZ�!��9�1(!�*�_Y����H��+!�<Z
Rl�
\潋�8z:�M����
Za��t�u
/L�`��̞�:������f)�l�����Ӎ�{��H6y����-�����|�!�_�g w��{Cx1QQ��8s��{C�L�~i��]���c���ϊ
��ԁ��U��S���u��#�5�И+�h����
�K�P(C\��'���
;��Ɏ�ϭ��ԯm)(�[yDw�o��߹֓���]*�9]��A�KT��
�� ��{�
+^U�{�_ر��'*EMg2�{��r\o��{	�+6�2�g|��-�R�1�3S�L
����
�|�
+��owT�$��[|K�Of���w㭝�Ӵ�2
���o����E��agc�ZO
��P��1إ�EGox
�o[
~I�4�5~��*C+rv{�׎�{�G�%���^�R�?1��]�m{��+����ng,ʎ�^�|
��w$R�"[\S�ԣ�D��o���i�B�R�癝s0�Bn�;S�ֲ�!p�,U�c�����=<w��e�����PC��4+�����e�۳�
�n��ō�Wa`
51L�����߫`�jO�*�a"��S�QIaV�nߧq��=v�;�;�b������Ѳ^|m<���ڙK�""��H���R��)I��'�(Hà50(���
u[`�{�e��ά����;ʦqc��<S�3Ξק%&]� �59Neu������E�:����3=xH�7�Qlc�lʻ|KH��y�����4��ȸ�y��%b�@�=�)�䱅�ǣ�OCIr��L���D�~���#�=��4Te�����6~�ͺ�}�@K7���:��z��ձӐ��U��b��E� [...]
���	��l���3�]�E�s������{���A�o��tpk]�
Ō��Ǯ
��ozi�y�S#��k<9F��
V=][qW5�7�G������Y|��[K����~?v*�{�x
�vW%�4��~{u-�}ꕂ$�B�ީ�r��a��9׭�a�a��'B�)U� ˜ߏt=�*���a�_��.�lJ���R���M
�#�%�ti�q�V��q�Rs�>=�0$
��V���"�Z}�ߕ6?v9`�3�"9�� 8_c��"0:��o�r����@���!g�f]�k��ޟ.M�{u�̖=)�1��E

F�[b�-��X�i�����?�H:

�
+��
�^+���ؾ���~����a�:���\s2�ϣ�RI�;(
�Q�`�H�;�Т�?����ߑ ɞ�zJ	8�����e*{*[��
^�e�r����c��C
)dž�W��Ѝ���"�=:%�	�M��]���[LrK|=h���ﮙ7MH�gG{@]¶	�����})����sCk��T�iq؆��IeL
�i
�>�m��1u�f
Б�-��(f
5s at xd�9�z�/��7&�P�ٵ߹���q�Y�]���s���5-9��.[�J�IJ'R�D��r�r�y=���><#�o`A`�������1�4�P[�`k Z���
�<@�����Pe?
���'q���ۆ�U��ҸW�2@�F
�GTc�v�]:H�.Q�
��8�F�V~1��p�;n�X=�1�5�
o�™�I�]�8���
��ʹNOM��/�b���,�cz��w�5X��7��'���D� g������_��-Sf+�b>
�V��1�,(�⌷�~k] �Փ����|��e��~����. [...]
�f-�ôߙV��~ﶝ޹�2���Z�=˄�
&
+��Nl���$،H
T~+��vx�<��5_����_�R0B�F���&?�F����u 	(�
��P+AI�W{�%6Ӫ�O�ն�ҘYg-��XVoT��3�l)�c��ڦpHw
ڠ���BQ�[ǎW��Ĭ؍�\�M��3-*����3(�>�dV�:_�7,�w�|
+�k���8m���

Nг�5,����W����P�P�Z�)O�*
���JR�
��᜕�²5�3鶁co׭�7��@�V
����7L�V��Ե٬=������$�g�7X�<&�x&�l*:�)U�Ѓ����MW�z)�c\�d�~J������P��T�)�y>cTE�)sxx���o���=�J��N'r[|8���C�>�
B��"H
b���*9�9B{,��]R��<nukt��E����g���!�l�
殤�2s�zD�T�xK��0

���wgu�^@[6[5ja�nA�'�/T��P�H
�%A(t���L�G�k���LEq��QT\��=�ۙY��Y$.[q��
+U
+(����,Me�8��k�za����s����-[��Q��� �8�}8
Lw�5�1)'�Y��],�ժ�����5�5�v��\|��A�y���ˈ;
�G!��ê=����8��[����`TG�zu�����8ħfb*���7�g��m:+N��wi-�9m�eà�
�w(
+���
+m.kx}`,7�E�
V!�O�ŷ�t�5��E�s�Iy8�q��}O
D"�&�C
���D
C@��A|n6��<Uk
���ige
�X{���d�Ffj؟?t��P�E�Zl�����
K���,J�~x�f���|��&�{�C�]����������S�ȇ����
b5
�~��5.����P���:{v�O�vDZ̕�yp�0�� E�6?��� ya�	�x�BE�I\Л��Ăr�
1��Kz�kC���&ﳌZ�x��X�6��S����S���<����7z����+t�ܺ;�3s;��&Po�C��.q�r��qJ|�r�{����L�Z⦬��Km���R[
+�����C��K2o�Pټ���KI�T�JY߆py������N�4�G��8�E�Cg�[�'��ߓ��2!
����ٳ�]
�Pa
)H�ƙv�f�����sXo%�2dM��c�
mNH��B�p�`#� 
쾼j���}}=�[��͜�L
!xR�w�8�t�9��
+��|w���2
+���
��zv���R,;d�����	Sf\�Ӓs�BJ	E�;�؀
]�m'Dn�
+��6��[m(ϥ�����{%�e%�oɠz\�nEW����@�C���U�R�
u�3�Vt���=��P0mņa��<��R��ߟ�j�J ��'8l��+6W�=O����MZO�qh��OJ@��t ^�l�
 \��ah�R��+I�YYh���]{p
���X
���V�����7Q�q�Y�@�u گI�Żz��֍X��hެ���Re�<��[��?ǔ�o!*+�`mxnvS���4\��[��vǠ�@�b��
�,/T��� V��˹H~F��d۔���V���q][�&N�m��93S~B�6k�"U'���[&��s�{���%<��
~#�����P��|3/�5̀��-v0|	�#E�H(f���3T^�^
+)� ���[�7�c�4��d��
�i�����O��E._�ݩ
��Y���w����

y�3W� Q'����ρ��N��B�K5��J�n&��l��hÛ=�&
h����vl>1Ȫw�b}*͟7���Q�я
�ɸ�̰E��=>��d��I
��ݽj�/���
a�Ec��u�lt���zx���!(o�ޭ�i�Gh�9�ʇ���;�(�g�a���h
�8f~��}*�!�C�
�ս��F�S;���I�B�/�=��i���;�`mxY�}xt��Q��դ�2��K䚥
I at 5��<.�ϝ�%.�s#3����u�yf
�k��
�=1^�!�F��[i��¨�-������%�)��:HϽ/,
J(~�+��6�-
)�U��MlE�\�;G��!ԃ���wNt��C��jm��_:�ܩ=��Y�/�� �m�oOC
�?�
��h;y�`&�`�����h��4o��u⦜��΂:[��4H
t��X5W�_bo\
�>��r��������*++}�	HA/ [...]
�ǫ�N�@�.�B*�r�
+,�C��/��+��OmK�
d at V>0V
�+{�0XP�
�_��Bx�iϕ��{��
�I�K�I��X�N�T��z1��ێ*�� �j6GFO
�JW�nĊ��2�{�d��D03�>n��~`*i�N�BN1J��j��T��+Y�ُ�B��
�d
��$���j԰o�+N�פ�r��?�RoPR�$��fPgN�Zs�S��{��׆Ly����,4��t��
���z4���D��D�uvQjƣ+>;V��]�J=	5M���/�Zcc�v��:�=�"���-�6M��4gI�
+��@��u��޵#����Gi1��Z�y�
�G�
+���ٞy��P�1��}?
+�L���^���1�71F�X����pH!�S�+��7�ՙA�4r�
-,р�������֮�G�����J�P�9��<~ת_�[f�'`����w嶘�o
SvQǝ_�x����tlЌ񅹒�؛J�D�:F��L�vc�T.K�S�d���G���y�

%�H��b�
�{R'ɘWƧ���.(��F
�b�\ �JV)~��y'i��Ƥ
�}-�l"��M���<g	r��lj-k�zm�F�-����1Y��^��2:�K>3��o5#ٚ�U�1v,������)��-�$h
�ʒH7
+/B��cYaⓇ٥)*dbި�n��db/�~���N�{UY7�2�î�X��G�Ag*API_����	�t��BP�N�
(��0d1���s�#M�2�$�M8��>Y̙ղ����������*�NRM�
o��;���z+ic;LU�g}<��vئ3�L])�vH���/�f�X��?�U���F/tZʈl�zxҢ
c.�'���[�Y����Ƭ��=��f�4,U$����R�:;���[W��O;=jP{������'�o�ͬ
�
�qRJDC̜�]��SA�1��d7��&�Q���]�����H�H�Ebe��1��}�^�_�j�*�_�i�w�̣�e��<(f��f��

��`o#�a�q)�M����
+�X6(�������^л?Iڻ?3C}���c?������K�;2Ӈ*�Ff���dA�W<�q����9�C����}oY���o8�~C��=���o�b�C���ɴ�+��]y�Ã��"s��]w��V4�,TTʙ���|>��
D4W���49��bu�5\x!{9�|���ü�<�7�
ᵡ�G��\�й�nl�s{8�A���
+�1\墮�L��a��q,Ĕ;��H
�n�Rb	N��A/�ʍ��C��|eyG��;���U���#o�fQJ�V�`X�f���p�b���;�EWѬo��z�Ͳ�:��
�߻�6��s
����;�y_��}i���V,J�`�fm�I|F�(����(���0(/�	�xQ;K��ɂ�O����k������Kx���{

���bj�g&�ʫ��q��-Go�^1e�hS	�����b�zA at m��P��n��H�a-�|,M(��I)�J3��=y�.0iQ���C�U��2_Mw'G�&\=T���Lc��'T���z�t��\�hc^�
+F
߽���
T��a
�͐�� Ss?�x�}��PܺH�-��X,ǻ�U`J�i����l�����\
�K܌#��!�,w���.��Y��n#�}_�� (�m�h% d�}
�,Y�'�G�d1޼�<�l�)�:�4��c.h1Hy}��bMS��+�N|$L��Jo����;��`
;(2���Fޗ��
������aj%�	����N��������,��|c[K�Fy@
Ϳq���r{�#��������\(����2J���'aÌ�y��U�#��{X�ل��c 
�T�F�Uǒ*!���)�Й�+x��cLΓ&��.��e<β
b��Q�����3���8D�>7�Q���xcm
�'��
v8瑆_,7��0�J-��<�1R����"�h'ǿX/^�_�I�h׌��2Gx�qםj�2�P�k�����.G�
�
U�E�؍���%���y���� ��X�C�P�� PHV�4�qC�|-s�P�����~
{�Q��g�U��Ӹ�~R)[@q�X�
��6u*�GT�}���0lů���K}RB�	<�.J�a�eb�՗�O�fJLg�1�w?+�2E9/�Ђ/
a��E%���|d��ٴ�����٧S��p�=4�1
+�
��<�31���
��8`s<��7�6�%���x�O�
+WJp���q}��e
��<���0�x9���!4PH�i���gQ�������lS�����V(u_�L*��,����R���#���<�wM��<*��A�����z�]w/�j]�����,���3��K�>��L�����^��h�8
a��T���k�-˻*{��V��e��A���[�������������w-�� 
�kڻc���h�^��S����@Zd�{Μ
���oٴhgQ��f7.E�;![��R�x]"0�+�=[�q�g��O��+O��|�d�%�6�i.X�G��^�8=�l���>�Bhտ5�K���B�qq����Ϲ6ЩGz	�SY��nWA���ݒ<iʜ�@%�ֽ�	r"������/�TJ
�Mg��y���[+���
�v�g�`;͹�
�W
��#X[��Pn�2�	B��x���-$0�� �\A�l��}��r
Zġ��R��k �Ug~���s)�&�\�W�
[)�P��;f�

Vۘ��W�fī̛P:����<;���T3d*���8�$n�/���aK��
+�������D��h�:q��	�е�K�+��[�U
+�=���#N��c��P|���@
1‡4`ֆO��7����-�s`#M]���C���tA�E�?x	n�`
�u�@�p7N��v��1!׉�?�$���:c�<�Qk���-�)Ĺ�
�β)��
+�I��[-�m;c�'��
�k�3
|��u����b�<?2��P�i����'��>&�����
r8�Р�.��q;���CT�j^ߍ��G
+:�x棈�\�'�R�Q=��H�•7U����ђ�[h�|�<�6�[�d+9L>�;��v*3�kb���2�pz3�/]�6�XT+��Fx�>y�։��)a��ϖ��Չ��FJv���sy2čPu}��.P#	��*?�mfpN�Pu�����ť�:�)qJRt���JZ�B`�8��,�ԕ"W���:���u�i����j��sA�OPo
����PHu�4K�gd$PEw3�3
Z� =�!�����"!�|�P�*�Q�r;����ǎw�?��s5�?��2�}����������D`���D.��_�#���y2X��~��Y�F��H�Ạ��?�"/f�>M��iSm� `(F
ӹB���9��@��2q4~�'�ɴjީܺq���D^,T��/���K��k*��Y�uv
+|�7O���>�����
+��A�� � �	�4@~_qfRt?|���
�:/H�.(,-�'�e?�p
[ ‚�C�
�jvH�.�E�����sJ7��-�
+��_�4ЌZ�S
%i+"�f�!:�_L��£�ծ�:7(�Hs�QD��K���K�0c=>m�<�q}�
����֕B�z�(�z��#gkLq�d*Ր
e
����W������BE�y1�5�,��AO���[#�ڀ)
�b�ۛx��('��m�$
I,��,�����jY�H�bN�%<��+�
Lk��s�j������J1��A�	\"i�ڌ��w��-��s,�~��U����K�Ha��K��g_5�s�X����٬�_A�B	B�c�a	+�V��x�3��sH�1=����b�����q��r�_^�v��/�*�i>.�9R0a�
v�����O5��)��}����A#���}��&�Цe�=�
��V�+��K1c��M5?��$���0��a��^�D�Œ��|�P��t3�f�m1NOw1(m��t�e��H#>�Q^:�R�;�#�
q>5��=�q�i���v
^���ã�ܠ��[�PJ��r�B;D�R�[���O���
M 
ole-{r7����:�d�c'r	/�P�r��g�LÁ8(V>j�{^�\�x)�奔��*Mj�ՒNf��
��6�_�����sM
+����~!+˶Xg�-[:ӆ�,���a'3��{�+3�%�
�
���0���V�1���/�1��������$E�dU��HY�
W��!���!)ݫ����~�[a_ۗ'��Y%�[�Ƕب(E��Ttˣ�|�bg�s�ڑ�+"{�
<��c�NÜ��N��	�Ka���rk�k����� ����߈�YH���o�52�Y�f;�N����"�v����W�V�0�������M�P
����

���r��0�0{O�4�/e�����9J}�n�5��KIm֓�
}l�Yc��ݹ|/&��|Ɓ�6L,j���[}x����Ŝ���jj���˗���M
��p����=����~�4﫲O��g*8��1�����2��V��k���n�:�4d��v���ƕr��Ψ
+�d3l�t��aM����.vҶ�
0����gr����p���Dl�o�?�=�k�-[�mh���`K[vL���K�yV?ާ2��?��\9��`Q�d�c����
.
�o�
��ؔK�VF�g��$T̺$���
w�L��X��w�VM�k=�����5y��#\�O��D�����-"��q��C��"g�\�?Yf�xl��&ͫr>�(͗�oDiym����S�qs`�w�G�u�۽���Jv����ܺ\*�?�B�?�
Ǜۍ���`N�̏�6�HZd{�KR
b�S����nFg�g�o>��ǘ9���{6�FU8�~��mR����8�e�0U��R������z�o�S^j1:p�D9��g���-9
� ��Ĭ�����謼ho�J#�8
+�u,��-d�F�Č؜�8�0�҆��h�h�̀U"B2n>D��]��X�ϼ)����g�/ަKgr���k#�m&�o�!Q����"*a�7�V�,IO�m���9 ��}����|�ܢ�
�
{W�F��f�I��i��a�t
��R
K��`u�1��M58�*J,��,����s���
�	�O:�uӭ����d��*�������4�͉
�!���� ��g9��$�g��B�?����ٿ�����v�x?�]��%���h7w��j����
+,�I����R �Gi�#�@���/�G ����a�-Go�_G��q��� Y�@+�W�:�G�y'�R�aH����l�<i�P�9��H�b��-seV��
�@���4����L��lTq�L`�~|����xo��bQ�Yq.�&�[��W��)�|��y}jυ���#i���=Wꉭ��+$��@���D��Q���Ac���z���t~pLx�
�<�r�0L�s������ўe�
���5
'����@���GA�Ɵ�U�\(ƉzBX�v(/�=��!n�u�Y��@�/
+}c�0}�d�*�8h;!����ԛ���&$�J
+)',��據$������
_�U�K�g 	�o^V���}�:�-�
��8C�ƈzZ�x:��>�z�?�Q����m�k��b�ޗDĂw�V�,��#�=3��Ez�ڱ�>� &�?�ŵ�y�ntG]����#�!�"Nsq�,e�f�����x�e$��*>�=��������NkU�B.��̎|U�
'�n�[ �lW8!���֔�=@��C�ZstT7Y������i��3D:�dH�G(_�f5W�<{$
qaˡ���o�4�I
+K��kHZ]�_�7��&],/�{v*�����dY7�VJ�C:��F�ǣ�2>2�O�k�����6xf.d;�
�Q%��=$�F]�Ϸ^o��9���
/�����3�nW��a'�'�h)0	��v(�l��K��pG�4�S��HR\X'2�4�{
��
+�%�
+Hp�(z�h�8e&5`��o�����]�&J� UG̸�a���Z�n�8��8�q9JK���6=��>cĭ���Lu��u��ț��W��Q0wJ��c}Χ���r���xm��y
�n WIS��!���l��
�:ܐ�̯�e�"�y�,���d# ��%�����,�a
+?��s�x�h��+�9����F5�F?�@~�_J�����L�Zj��wb�w}��
����U��5x���״����6��
+uq5�*�ೲG�-�bo�A��
��˙)���\����F��Ka��_��\#�#��g��t���Нד�ö��H���O-n=�mY��j�����S�]
1�3v�9o؝ѱ�p�;�j���|;:�tuQI�?%�P$��hT�K�
�G�TRu����K
�b~�j!�_PN���b��(P9���蹗Q��\K~����}
�8�N�����J����y
+��a�W����K�c��=
Ez"�U*�>�SbAn�X��%^�.f��v��q!
�q,L2%�i�O��8
��d$Y�y�Q��oq��m�ޤ��g���l2�Nh�
��T9]/sv��t��/��^�͍v�
�q?j���ɶ�#n�ZG��B�P���Z��
�v�K�y
�Q�
m9QTt�S��Έ����ۡj��y-'&�I2�쪳Ni�����u*(�f����l��G�
GZ��
YI.���s���3�>�P�cc�⏖�Iϡ
+	��
'��#Di��n�nK
+F��q�Cg�`P�Գ=
T�{�^XL�)n"��ь������%W�
+endstream
+endobj
+4155 0 obj <<
+/Type /FontDescriptor
+/FontName /CUTCHY+CMBX10
+/Flags 4
+/FontBBox [-301 -250 1164 946]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 114
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/X/Y/Z/a/b/c/colon/comma/d/e/eight/endash/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 4154 0 R
+>> endobj
+4156 0 obj <<
+/Length1 1791
+/Length2 11154
+/Length3 0
+/Length 12135     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX\͖�qww޸���]�qww
�'���;K�A��~��3s�������wժ����ڛ�JM�U�
+la-
y�r�q��%�88
l@::)7ks{0H���Z�! ���p
��\܂<�(t )���������?A| 	gk7{Ks@���������	�	�����eH894�Y�аv�v�bC�� X�[z ,�m�A(��(R ـ|�
��t��)/k7w�(��HF D���
���AaWCjYC�������z:9��;���_.��ysg{'��� ;�xzX���V�n��
�k�oq�`��SF�����Rd�d
 �{��]����J����`c��n��qk���� ��_ؕd��*�1����פ��=�C���?i���s�2�
7{�!�
�B~�����Y���A�
��
0ws3�E��
� �9 � +k��D1;�Y�X�����8yy ��
��x쒯�`�z%~ ��+	 �e�C|@ ��+q ��^��.�J\ v�W��+�D��W�hQz%��W�hQy%���?D��+A���D��+A�h�D��+A�h�D��+A���������_	��� ���!
Ȝ%�	r��{����g���
@H3V!���
U��¯�m^�������J��<�����ۿ���U�;_;k�_�1��"��/����BZv�
!~8�"����<�� {��_����b ���cҌ��4$����5�����n��u��qCT�@.&�_Vs@�p�rA��z�!w���b�_�q@�pm�����.
H�;�`��0�Iw'sw��R@�����s���A���� ���/�x��B�{��! �}�BHz߿b�߫8H&?k����7��$�ǟ��X9!*!~	@00�Zz�A�����rO�7��CnUk [...]
��
+�T>�֕i��}u..�.�.��#�{\g����I�kJ����n�_��y���
�M�!fǗ��#
h��kc���
+N߫����C\���5�j�͋��ӓ�uҎ��D�E�����1�;z�+=
nu*<�!��y�
��s_�T����jB����q�/���}��
Nc�qeܖg�r�~R��
+e>���yB�
���QN]��R�\a���*1w�\�"�}\{W�6TcJ=}�T�jI�����5�x���[���?�?M�I�=�l4z�C��7y��/�\o#&/D�<�6�P��4b�v��Pc��Z�v~'�Ua����X�O��^��Wi
�S�-3d�8ǯ��d�a�@��	�r�ȋAJ�����_.j�dxI�6(����}с�oE������F�ƴz�q�{�
6��⟫�$�8��t�E��N��*x<���TY�U�P�����IH�E�{ӽTj�"/
ϐ��a0��B%ڠ��-�T��tr�,�b���l!H��{7�D��ZD}ֳ9]X20!$��mA<)��
����n�J
5:���w���
�4�ޏkI6
+
+.���=�
T	�˜m9D�
�%V�����{��Z)t�+=��.�
+
A2-�$������O��Wt����O��zYs3=i��\9
��7߻3�2`�ɎqbtlN��b��}q��
���
+��ct�x7���m%X%Í���pg�E8�]~6�{�ؠy�ᰜ�3)�
�aId[��q��m��r���%2��UBat�5I�����#����A��,�/f�1"�v|��e�̕�R�)��}O��s�0<(ڭ�����PQ��_G�
�J�� 1�tg'
��C4�BÉ�܆i��
��g�O�U�0�����4�o�����2�a
�q�w)/�
Vs����P?��
�1���n���гsiC$�0�
#f�E
}����z�u�k":\*Ǯ��G��7'�Yl��4}L at Z��Y�ƕ�fy��N{�Nq������_?u�φ`g.xy�
˾���噘0��8e�ɍ�
[��{�K#�p��
��P %��N�@j ~�h%���;9���� s��MYO��?���)�}�Sg���J
i�u&�I?��h�Q��H�+�䇲�� eZ�ȱ
�6J�h�SA�^nbz��Zk�|�g6�����}��S�ҞE��M�@ZI��4\� ���B�����$�<2K&6 � =��
���Ҡ��9�J436L�w��u
ձq��OxGM������I�5.�ðh��,x�z���'%�/���N��칡�5@ΐr�9
��y��˷��L.]&l'ܹ$V����U��"Ѭ��,���@��2�*NI�5c�d��[2�↮����95�G
-")۪q�>:n/x�3��J;z�����3c���<�ޝP�3���͈���a�6�
�9 "R:�u�/]��<�\'r:�Pl�Ol��%�
�4��}xV�z�4��Ly�MO�=&�OC��U���z2���W��/)�
+E�k�z�F��,�W;�#��(a{M��eǷ��G���T��B����
�=��<�5C����߄�x���MM0
֘��S��9�K��Y9g�n�8��@�Z�t}|�
�a�U.� ��Bg�)�,o��Kd�� 
.�iF.q{��87�k�ݵ�}fh6��F{���
�����}N�:鶈C�YR�D�L��GyC�^i�������
+&��	�y3۞ }��?�=\-�x]��E��e��|6��/���O7���43��q�8�%�+#���O(K���oV�����5�.�_��5J�|�s�8��v�� �ޒ'4���~�"�s��xӎ&;�y�p�Id�9n�֚�G�k�Ҧ%�2y0�bX����( 0�m�L��ip�¿���{�L�պ�	����Y�����C�H8~B�����
+k�4#�z�����=x��������(����~���,���
+ҧ������.��@��
�y��ճ$��,�k*S�V�.m��鉭.0��
�ͽx"��teYT\-��Y��˴`";"7&+�6�R�L��Q��1��B%�ߤ��}<��$:etͮkE��;p�T9��#R�/��a��K
>R��_��;V�O� �f�ؒ=�9�T��x����q
�+KvCW��S�\	�	S�k$D��_/KX� �||��Z���)�Ñ
�O�=F�0ahn%W�з�<����Jjj��K�;�L�"���K��-�9Q����6V�H������=/��#�01�]�����fLYs���e�8�� sE�ZH$��{)�s��q�#��ۯ�N��
+j��Q��ls\����)J����_0#Y���S�B��p�k�7�e�N��|�8�=H�

�Zİ}�E����H�TH���zoj�1�墈�#�[U%�H��G����r���n|5�4c�YI$Uϖ�'��1㰸G���/V0�?�bJ�F`�)�Z$�X��m����
��
;Pmo�I�h����l\Y�U��Mr�Yi� BC���U�(�vCQ��Ngo�ꕀ�&X��x�\��7�q��

(=�ʯ?x:z}�j\w,�.E�*��� [煑]�Y/^Ag�TB�
0
K)��z)a
v�
��@�<�f��X��׸�u�nӄ��a���F4�P�B˹)�+(\c��$��	��	TB{n?v��t�\
+J�A�}c��R�N%����0)�΋n�_��s3n&(���,%1�<UB��F=�|v[&���V�X��
j3�W#�6'��g*����:%'z�(&)��>
+i�W�V�?#�~��{�
uTc��b.
;^��%�ӿ�i_��d$���Yc$K�^��ֱ
� 'W���^�+����o�i���7�: b&V��r;�ZF��Z�� �e��j�32��`[۽��H
lz���v6p.s�6f��W��F�oT���H

�F

���|�-|ҟ��J��q
��k��h�����K	Q8Y�ڢ�m����4�/n�?�`�q�/�9���
+2Z<�X&���D%�|������
+!R�Wt�@�S,�Xz��<�`�����D+r+���N�aޝn6+[O��Lo��4�Z���=g&�W۲�
��'
�M���Kx/�U
NVQ-��~��
+O�ȃ
��S��h��=So�B�
�G�]���#����#]u�n$�+�Ρ���@��@>em8N��:��䬓�R����<h�
*�ijE��>�b��B����mI�W0X���D�
+

��
ƁJh�eޯ
+w�p�Y�2��`q�1Y
_�$~JeQ��o�̬�x���{��
���$���Ǻ�7^�GQ�~�.�_5D�W�rL����5 �/i ���	��$�Q]���xT�%�6C�J"�2<
+Ոr_!�U�!x��� ��5�-��ܷ_m=���Q��gO,����T���(�&�p��<�A
�e�3����E�l4�n���Ւ�;
R�*�[�&
+?���ϯ>	��}�y���ɾs�tH
>�t�o���a
mKfh��������z�?�`0�0�NN�����˜�A�o�T���|�S�F^��Kҽ@t��Ƽm�z�Z~���D���~�>o
+�?$$�6��BkH�<��"��y���D�{Y[�
(�䥙���#�|xȭ?]Ɵ50���P6rU�X�|
(�f|bF�~c}�]�؇��ht���9��0��4��3^�,ԁ2x/'t�U
��x�9�|������Ƃ��
�4=��
�ُ57�;�Ѕ��6_<�>ힸ%����`+7QK�V���xnuUЙ����f��2v�a*��}�F}��d�Q���P�i����]�ֈ���˃�Y1.�f��4���`y�Iα.zY�������Ht�Q�Ch�`)���Pȁ1�s�|�s~�g���OV�HG�w.AH�&�|H�����D��_�-ˤ��-H
��Qᑐ��=�F����T��W���D�+%s��Vx���(�)v��I�R1S���ś��C��0E�„�a�K
}
��v	fd1�'f��#�
e(�o������)�Ik^�
����M�a4`�ъ5��p�\���E���&,�xkL�������a�5��Q�h�c8��dž���
�
} :�yŸڲ���� �>��z��?�z�<��Ćݡ$&�4������2��@P�~ �l�x̎y��Zd�[||� �mQ�;��$@�����n������E>h+>�ok�4�~�ⷠ2`�-��J`A�(��+��� �Gp@K�����1��#S6�I���TSz.͡ҋ##��{�g�����(F�ߪ�)��K^��,�31�[]���
��ϔ8up-��ѳ%��mN<�
y6�ڝO��28�[$+=�����y��K_]����@�r "�ʚ��N�\�Y|
�l
S���
��L��м�e+R��t�gy1u}D��H�R�ЏD�R!�Pl��6�	ĥ���؀�Sk*��U��^�F��\&�����q����s 6̒��.�T��t����(�c���`,�$Y�$8.ٮ8��Wg�1�ѱw�8�95(�����	G�j�����iV7��D9�E���{�qM�}�0T�;w36������#Tyơ��b��N�ѽ�W�bF�
+DGcqY&�J9�0P�
@�|C�C�Ⅽ�uq�dENuO	�OTΰr��խ��,��*�ٚ��H����
}I+~M��

8쑍=��j�oiQ�U��N�� t�[B�:�:F�#�/,эn(is�U�
.���&�M&��2������ �#F��,/���Jn>i����߿:?�e��䦥p3i����ۘ��E���b�R�J�j
�F?�7���l�'
0�vh^�S�ߗ>z.i}�� �(��o��1|�
�q}��W��5E����
Ypک��5�/�n� �s�m� 8��uq怌��Dx��0�5��pq6f������_��=Q��[��;i�*0v�
���A�x��E<�O
Yc�+�T��S
`�cu�*t
��}�"sb��{�V�T#q||�
�
?j�b���l��Q���,K��Z�4.,L�T1�
h%?m�cs� �F�S���Rm�cq���y_!����x�D�o
�9'Y�
%^�}�����v$',��x���|��JY|N�L���R9�8�N�Z�v|���̬�9Zu�T�Vb���үY
��-�Lp9���}]o�N��/h�=Mr�
��ڳxNC��_03ͅ��%�pk���Oh��_�� /��A77U�\&G�h
�#"
AN���K1]=�4/���YW�
\
Y0U*o
+_��}"* �cr��a�x���2WP��"��Ht.P���d��&"B�7}� yY�$o�t0I�S�	��}�
� }'�x�8�К����b4Y�D�0R�:H�9הbM4���J
��
��mU	��Ǐ��Ij��=�ߢO��&���!J��HL^7�����F�y��	G�B4�sd��1�>����������,s��h��`�'k3��$��`�m���>��$�8��x:�����H+U�]�:7�{��F^p?���}X*�� ��C
+�G0�JX��c��
c�_��0q�sl�\�
B}�
+W������^SH
h�
+���5?bפPc*�'���VֻD�v��cX�N��l� �y�N���T���M6[Ỳ���~�ȯ�N��/;'"�D���I�3�z ����ÿJ����OI��KT�-S�eT�ļ�Z~�����
ek�O���O��i


�ˬʊ�$[�Ц�\����@�Ik;� �
6Jw�Vl��/�Q3���1��(�Kd��cU�*����aP�V$HƂ�$#V��Yb#�U��#>�ɥO�g�tQG����)���S-6�E�#-r�C
4Δã��H�i8!lC�R���WTsX����ג3�}�zl陣��н֖& ��"��*��6�̘%N����yf��
��210���
P��
���O�޿�a
�˜��C_��p�1Ur�!��˜��Ry`6��
w"m|  �`
]&|�
!�2��Q�GPL
�^~�F��^����|1F8���e���sHl��s!;yPl�0�
qC{�
+��#̲�o���YtP?����`_�S���=���a'w��O�-v-L� ��F�]Ђ�$��0��;�U���lۼ�򕎟<H����s�+��e��۱=�G>ru���#��]�ӄP�6e1Epc��P'�z�o�0�~k����b�>/M�
�����Ĕbv�,�c�IŧI� �ֲ+U.IP>&6i��dѝ��~��6�]Y��t�|[ZG�4\��2�Fw%\L��ي�\�l��b� Cf?"H	�
ߚ�
D��MFݙb?����x��t?ve#��_��f�a����[od���i¬��g�]��y�2);�+G��
��T
+�@M��V�%.B���,^#��Z1��
�iK� ����S뼢_9=_×��|V�{t���4��vB�T�j��	z	��6%�J�`*7e;��N^�>�6�A���������zif����Y�5�g�
��WM�%�*&�z:t-�jp�U��d���n]I�8��~��HK�|�oP�*^~ڄt/��!�r���27/��$SLB� -q�ȳ&����d�7�m��V��[P�k��bl^J�5�F8���LS��(�\k�>�":��چTaM�J���K$"e��A�ӭ!h���*⊕��
TQ��4�&}O7�[�
.^)�79|ܬ����[�?l��!\���3h6z����K�k�Ǖ0�g����
50N,��ø�S>��5��g��>�K&�>�����^��!��ک���Z�u2�
�]*��V�]�[>��F���;���r��zA�$���Dži'}�P�^�D��
͆��6�8��?iɫrr�4l֊�����k
+�h�Ā+;���"LP
+�l{�8y�H���Gj��|�7��2��Q�~lb���5�o)Yb�P��ϝ�i�V�`ק�ch8�>�
ոt�+�%b��X�	0�
4mPD
r#��m�/)eh�ʢn��9'�
�+��H0k{����*�E5x?�%dr�gm����m�6u~!R���!�u��
C�����غ�>��9�G���
+��gt,��Zӣqo�W��
M�YJ`@\A��eQ[��
'�䁫O&zkJ�l,��Q8����h��߻�r?R�yۚ���%Z�I�-�8�T\q�{v���Jz��Oo�iP�:�á���'d��@�7},�S
+k������H$LI��
¬u��5
k
�m::�/<FgLj���@�g=��Uj�Ӂ�}V�O��
k�}��22��V��vQ�_�&����

n�>AE�V�
+�sŸ�����qv��h�x�s�y~�p��s�+��E
�P��9����F��,�s|!�Xq�Rn�@?�Y ��st"�c�\hM�v���*�~tb�J�Ք
+�X�"��ėm�,O�/��E���y����I�_1���ǭ���	��+��W��;]�
+���tH�eb	�
�^
��}�	:sp���>
}q��Ё��������-�����/�Z�Y(I�*�.�
o�؟Ʒ��K
�?�$̙���<��
���U����[9(���F�06�
+,�՗Z-�����h}�39Z
��
�Z[��� ����i@�O<=k�ҷ�Ά�U���8�V��6����P�n)��+(r�?���?C��H|�n�a�mO�燎.����Ch(3R)�V�ɢ ?�f_e���O=����I���8����g�ČE$��܍8G�Z���/y�t�
��|��=K����V�e�A?�@;д��OY��s/����U�Fr3W�C����/X[��۶a�L�x�z��η��7�z����
�~��1D
�V��φ$]�)Ş���U`C�dv��.s� 
�%�?�кb7���
���
+��;7A�H�b��	v��IJ�g���:r�Zc�A0v�lu�t�4��f
-4O0�l�wJEK��1�>[I�
�W�
+�=��u�t�A����g��..7ݪ�A������g�/����d.�1��0 ���hS�� <�Bkt�Fw=Q��V�h�L�(���{������ў_ù}���U�c���"��r2}\�v��t�c��p2<8a�m����S�"�]��'_�Iy�B�p�|��
�]a�D�f�|k��OI�Zai�n)R#᷹�]O���r}�v|X��m`�οK����g�
;�@|Y1E�)��L��'�FoW%�

+�T
��� ���"K���e3w��
�
���O�I��6�>L���D���,�����*����6g3j��C��f��k�c~ߣ*�p��
+gZ�n���ʊz�
�V-V\~��"zVe�������kv�_���X��uk
+��(p]z�-G5��(�MZN����G���ܤ�C�
+PAA
+�.����|�ӓ����D�e�lp{��5�6~��,����X�$��ы�1vu���+f��n
}��F_�}�K�m�^#w����1
+/P�*��%OO
+	�p��{x�e��[��
#҉G����l�V1=>z��Ɣ�V�����*CϹ�(��HW�H��2��{N?=��i�d>db9��j��&(^7�"���
L���1�q�+��" ����3�'7��l�6�p����F|/��#�@����xsJ��d
�4T�Gm��3
Dv6_K{��`W�6��P�
�Hg�
�1=26M8��R1� ��}��
��ȑƳ,IB�4�,$�����(�/1�D��[�q7C��Dq��_�~7(�_ţ�4@��8�ޑ�g�;��mX��-�6_��Oy�e\
Y[ϗWJq��c�ox������
�[�:�QֹS��*��Z����d��۞�����m�T��=[��,��̜"OXL1D?y����#|R�R7����Y��Dڳ��\n���\3�A

?—	9�l�GB��T��#0dhm�e������S[y���
+|M��_�h�h���]�����)�H/
������$P��.�z# 9��7�m��<H��R�ư�L��wU4��|�{
�)z�[�
+�����@�跡گm]
fߐ�u�`t�������,mf��r
7�nYg��i'��0�i^�jsw��0\k�n��o��
��,�4�q�7q<N�ZepFz�h��������߸L�|^8
�X?�:q6$�z�C>V�^�ʾd�ŭ`ݮ��%-c��"����W��ـY�B#'B-UfMa�)����֪v�Z��f(J
��%�T�g�C}
^�ú��n�9ET�i�_9I��M�
���N��ㄶ��A闏�ş���fYo��"p��Ϯ��,+J�j���lY�4Pa�F�}\�����J��8��
+~�=:��{����Yv{]����1�d"�#-Dr�
+G��� 3��wUh;��a�Ex7�ɍV�a!�.��[�kс�"��7��&
+��n�$sZ���x�����d���~y���7�~d��
�P
EM�.1���D��B�N�
�	��Ÿ��S'
+�a(\G77�d+*����7�P	�J�k�Z�8vo;L��ҵ���Z�
+%�|�Y�!�]����F��/*�l���
�ƒMK������k���'B

+t�D]���������\s��3��ft�.h닫1N���8a�	�!�-�\ڴ�� m*�ͼ��G�ܡj2ț@!F[
żH�.	��㐟&�f�*����>���̃�P�nK���K�a�
�X޼7��ʒ������5\s
?�5��c�P&]�
�ФK"��d]漻]�C8Tb�̜jʻ�鷎���t��&º#��n���
���;\���ƃ��k
����:*� �|X��-��r��v�Y����[���
\
��������ad9�p,|��T�GJ?h{	��v�>��='^�`
ڨV�ك6�sߎ�a����ƙ�q��l9�Cg[l��1�CC��{����g��2�H�&���Y�
a
+x9��Tا���'}��
)�/�y��D��y�
+G����B�A8�S+C�H�45�<(0P�
��R���_�+z
j�M�e����&�P��C=��F�y-��ƒ�Կ�vg�r�i:	W�;8����
�L��c��e�{
+���q���eg��7��z�|B�qmB����gھ�ZS����ݻ}A~G�_�̙q��'%�T��
��A"CpVoJ
x��������"�1�l��,V�b1�Z��7���q���${ �u9<ҟ��o��-�lBr�>��զ�+
+�_���4��z��c���/��|i/�@�<�+���d}���v����Mr��p��@,S�!$�w�r��2f�sL��њ�� S@�Z�
�O���9�Ң9B4�{-/R��h,{��4� ��-c�c
+m-��7����.F�S�Z�9Ln�~�PY��b!G-�%wIE�3q�8�oЃM �A�*�~)S���L���P�q!�+K�
+3��m4uBJ2�s۰� {�2�W �5������.��wh#�|�`3#�
�WPˁ�w
⯞�%9s|�����#����3�V��?�~��ݶ2�I%�d5�-?�"��E$���j��j���s�ׁ���0��*A����ŝ�ERw��8��*�Y���Q�	����$��=����Nr�p��
+N�lp���g��
+ ���:{��^b��@+�R���K�����)�څ�qN>�NӰ���&o��
+�[в���X���+�%��a�'1�p�RVM�g5C��[�#٨Q%���o�L/3��Ywx}k��]S
�*$Tl秖��n��Ib�w9>�x;��6���U0
�����ͱ�	3�Q����_8�hg��:G��#�ŧ|
%b�Ț{H.*"֖�y��O��`G5�G3m��
�p���O�\Gt��l8h��u���h���[����w�Ew��8��oij}��o�`��KV���A
�^��u5
a�wp�$TUU����ɓ�C~���B�TWE%�gi
ҙ�\P��l8��*Ӹww"��ݩ�KD�Uvw�p�M�S`.�
+k��1����0Y��`�91��$��9��H4�_���
�"Z�N�W=b�.�d����S�Y�Z~01 �O�w��oj��m��;>xx8�=�-�H��W.���*-ႋ�-�Ic(��X
���d�Nn:��6��{�
i�R�HԌ�Ew��N����y 
+endstream
+endobj
+4157 0 obj <<
+/Type /FontDescriptor
+/FontName /LEYKLP+CMBX12
+/Flags 4
+/FontBBox [-53 -251 1139 750]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 109
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/Y/a/b/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 4156 0 R
+>> endobj
+4158 0 obj <<
+/Length1 882
+/Length2 2735
+/Length3 0
+/Length 3324      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<�k�I�Q�f?
{�3fb�}I�������1Ø��9�}+K�c=Q"�II%[�,c�FrD*�;u�yO�9�����{ݿ��u�<*
+�.P<�
�$��P�&\0�3=�j
��Z3
+���$s,��h4
0�� p] ���<���f�P
+�Ǘ
+
0S�&�L�A
+�%vX�/�ϩ��2� RC5"p��8�A %�kB�p O�Q/Ї@���y�&y��?�xZ�_[� %�c
+8�1�p,��$b(��!0{2�,����a��-iD�=��[�?��/֟@
�SC��QA
+`Gƃ�?��{�d���b��	ɇP8RS
�G�dI�*������q����N�����c�-1�
��mG,�Du

 �����7s�D!� '�4���
!��ku��Y�pd<�� P�,��
�p��P at 8
 ��` �p<�4Id*'�t&�&S ���`^�B���Kp-- ��Q ��rR�#�0��`����
`�P�Ѿ�{ijJ	�"� ���
��tP����h
+H�~�������A0�AX��8�����_�,�{o�R��-��i�����d�닼�4>wZ��#T
+e���	�{�&�L":�]`�C�
{�ԋ���}��=O��,h��??�-K~&�Q�ð��Dpˮj�y�C�}��__m~�:͜d	\�+�fCN4�^��M\z�u��\Lf�vJx^]�bI=�?7�7�\`�es�9�,֫=V2��R��0z�ι�o(�y�M:vq�/�/��ע�J����~[�zQu
u�;����,�|�+|�~����O��"��T���\+�N��^�?��X�l;����e5�Z�T��z�گ�2=D-P�{�N+�Z��dhw�v�<�E����
���-�����Ԍ�{e���S�W�R~�T���7ECZo�n��Ҁ ���K��-~�g2��٥>�U{f�-�A�8��g�Z�J<ğ���>K/��Mڃ�t���L
���d_[�[|��UȧA<����UB
S�wL���N�5k��ȍu^aAכm�
o��j%I�fY��lK�`�67�d�L�Np�*l���5�
β+�X�Nn:
��m>r��$_bU��.X [...]
/+W�wy;J�����X�a$"�n�1��)0l��h5
)�Ed*bf�X�k���Α"��(~�A�G��쌄��n���orc״�/Q�5+�w��J���E�6;�1.X�H�-�����.�'i�n0A��G�W���gº5�@
���Bd��������Y毞"����
�&lA��(.�}y7x�U
+,v���
S��P�_ۥ)S7D;Ш߰��$����:��ne���Uy��f����
���0C}�©��K���ly��������*HMJ�A�s�\
+�Bօ"�AZ+�Eb��x���
�2�}��'�>���,rY�<��_sj�Y;���ԃ׺&�c���0$��r���ڶ�r�f`Z���r^��L�	
YA*�iy,���x����/�<m%F��>K���Fߦl?�M��rBC�۔����wg��rm
�!..z
�;�}=�"3��'0���G�c�?�q��]I5��m�R�=3�FCUt�7�
+�
��t�o�6$ܓIT�
+�2�8��
�;/E���n��c��
wR��l*
+�~��{���m�`UE�q�Q�4AEE�=�E�������ֲ�	GqW��T�;�_����V��[�+���K
�s�:7-Ѥ���zcs@���ɘ5=�(�+{b�_ Hb�S�~=�nq�j
��\�l�����k�E��eW���9�c1ݧ��k��"y���P1r���b6��ϰ�N4q,^�W �4�Iq�q�^��6S
�h.l��Z�^ຐh�ȞQ�<t�mٿ�J/8����S��u�2u�:��.�O\3�
+���TG���Ek����R�T��i
}6��D<�7����|5�|O���(�F�a���HbzZ������y��%w��#����� ��q�Z�A'�
VO�ƒR7Vp�U�Wiy��Qf��
{87 ��`��1)�f&����|��)���^�yK�
+yg��e����&i����Bh�bݦH�˰��bL���";��	���?i9�q���Uu�<#�$�K�='ס��ƨ��r�ݼ�r�U�������JwJ�=
�A�}q%'����q����d����k�
����';�;X#����M�"/殉��
z�Uekn����v���'����r'zz��&��7�n<�l�eO��&%)||Y�N<��B��񔾉Z�u��On>�I}��'4���<�W
�[ܽ5dg��#�9}l>�h��
�{�x-̼V�)e]��٣��N�M�7|��u��c
���80�۪l=�T��;�t1�Ro��4�PC
.�������
b�{[�:K��f�7�s��c�Y�5�u6i�;ɘȗ��tH�_����Y�Yo{�OC��U\Z��|
���o
��TM�n�k���i��\������G�����ޘ
6U�x�;�1w�o�\ꮘ��q�����S�.��I�ʘ<��[?_&yͶm|���?���eFQ$��
(��* F�w�
���썙���g�\�$w�
��uT��RWEe������vSc�k��Et_:�-�̥�'���=A�<h��u8)a�M��
+��]E� �	!a��[Mx`!�ɩ����v�:�*z?�KR�|ȳ���V�qj�z��v�A�������1�8��d�'��cic�4��J��$
������~2���y4�����ݮ1#y\	��,(�.���ePö�;��>]2�y�uzt���я@襌�10%�%�'��lcb~Ȳ��=��4�M�
+��Z[+z�9eK�'n� u��
�V��S
�Z�g���
AKJf�9
M�ƏKμ�J���
�&�yz�ii6vvdom�~!�=_����c�hZ���Jk�Ջ���/�i7�]������6�
gN�_N�v��*��ֆ;ᎋ��0]��Ͱ�D;<	�l$��<�A�z>,�у9ː���:2�]�(���Hz�⠣
ۿ|��p��-]'���[g�5l���c�W+u>M�����Zx3��t	
�ۥg�bv�~��_{c._L�	����
+BE�^�*�1q-��pS�qBMr
��W:��"s*��T6��!}2��
���
okWD�쨜y����E�R��g�2��>����]^����.>K�r
+�����wF��|i���l[�
+endstream
+endobj
+4159 0 obj <<
+/Type /FontDescriptor
+/FontName /YWRFWO+CMBXTI10
+/Flags 4
+/FontBBox [-29 -250 1274 754]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle -14
+/StemV 107
+/XHeight 444
+/CharSet (/b/c/d/i/l/n/r/s/t/u)
+/FontFile 4158 0 R
+>> endobj
+4160 0 obj <<
+/Length1 1158
+/Length2 5424
+/Length3 0
+/Length 6130      
+/Filter /FlateDecode
+>>
+stream
+xڭ�gT�K���H�&]@C�N�]��R"(] BI 	M at zGz�.R�w�&�HQ@�w�
+��Ϸ�g�ʟ\���̕�y�z�ɪ
P� ��j8Z at XPX���
V
+

+89��PK4
W�DCe�����@EW[��PXRFLBFL�	TF8{"a�vh �2�!I��	����-�vP'lkKG a
��=����@�?f���P������5h����?�
�m@ɿ�W��
�A�(��+��*BpGO j =F`ׂbM�?���\�������ڦ�
+X:�
=�7�prvEC�@m���;����6su���C��#�Zn�
+�U���`
P�.
mm��tDA��C�K`w�O��c
���|�9�?Gu-ap�O�������a�!a
@!A!!al���7���
+�F@`p[�������`o�ā^�@
� B=�� A8�������q��@���?IRR��D����6��7Ia���tA���d�IA���v"�7����d�b
lC1 ��oǒ��
�[[���@��o��t�
����!V���
������
��ο!V��7Ċ"C��7�Z�C���o��r�E��z���}˔�
^صDą��u�@Iq!����vE"�p�0����m`؋
�z@��Sk� ��ڐ���y#oyP�iEA���5i��[���&�u��@�
RS��J)�w
�� 6�_k�{�����^2
L:�x�z��
�/����)+|m��7�:�����_�Z	+�6�%_3�D�LO]
�t�
�:K�
+a_M��4i%A
׿�\l�#��}����W���
c�diґ9���i���x�,
����$c�?UJ�,h��U�&й���ڛ�x�3���m3�y�}0J��o����rO1z"�N-R
+�8�{�=�Tbs
+�����܄6�mN<�ő4���l
g9�-q�,�YA��B�-�^|s�
�.}��c�)��,�T�>I�D,`���5�K���'����ᷮ{�?T˕
R�,��VR
�� ��^���qiW���<��8���KOd<�Ai���@��s,¥3�
w�xM��Ѓ�

�Ce��R�q�c*
c`�/b|p�F|~Ǭ�_w�n�Y�!�p�f�6L�_:G��!5�t�=��
ǂ�I��V�O��s��Vݗ���"\]�_T�?\�Z�n�3�1�\��m�̘T�{��"�����/#�26XCB��f9
�&C�s?31w5o
+:��SҝĽ���8k�n�ҥ�J���ItK@��s�e�л�	���l�m|��.�V2�'���?���U��>�d�p��D�����>6�#��n�6~;M��π�eb!��h����x|�O��U������=�c+���jyUgT��J��tJbUߕ��I�>gaT\�LT(
+ �6Qсy�^�}u�"����ۻ$�
+Q���k�M����~�5�ݱ��{���*੼n�L�縟\|��;Z�7-@��.�z�<���o���O'0Gy����Uf��m&(�Bv�U��*g��­G5��7TԹ�_�P��N��w�gi*M,���Ⱥ������e�i��.��ۄVuњ���a��`�I�4"b,ig��"��n�gq�3�sg�2ʹH�b�Φ�iIj(�R�����=�@�yg>{Fy'pC)�{�8������$���;.*����TH+���I�an�
!��(4�]��֎ZɌ�rt�#=����q��c�]����Ym�F�;Cj��/[z�J\'u:4:���^-�Qi��:F[�
�
+?�[��V1b".
_��E��#�Zr45tmn0�y5gH���i�e&���Q~q�-5Jt��H<&E��o2����	K�
�M�r��H_����Q����)��S���
L���RV�
+��."�$�x������
�vP(���̓ԨY Ӷ�=FS�u�����!���M�bP���$�����C���f�ħ���(S����
J�o�Z2?�^��dG3�	S^v �/H
"�U���D�<��ͮ�7��
�d�~��l��
:��+�.�Kd�;���)�OVʺ@�ɀ�m�O��Y��z�r�ߧo�5��v��n�T,�*ԣ�	����ungf~�� �
6��'|�6x�)��F�@�i[
���头�
+�sqA i��i�=�X�7rZB�ۦ������$��RJċa�GT�c?sT����
+C�R�
+K�k�Z�&���VT���r�
d���ۮ�n��	^s�m�K�3�5��P����
��e�XG�?�?m�b%�_ů��V5�%̻��Lܚ|���p��
��/7+��#�ٳ�o���p=˼X�B��j�gɊ����؆�����=n�}q�u��_�����w=�?��gt-�RN@���#j2Ypf{M��Y�Q�'��Q˶�r�r,��.[���mk��7�Iq����8�e :�M�%��R�~�{�-x�'q�k�h�Ǵ��A�ͼ�
+�<�U
��Yd;vy�Ŀ��C�o����K�`�,muaq�"��x ��{�#\��){�a����[��΢]���}7��x�����
���S�C�$]cf�D��fdCM�~I,쿳
���]�Vk**Y�iM�
�	��v������ې��W
J�Z+�i`�F�
jf28̐u�M	��$"y%Z�`�+��O��܂si��g���Ԓ�����������\�2ьN����<��y
���[�����GN��
YZ�j{�[X/Ctu��1�8v
:��\�.�_"��^�$�}(�?�,
Ի��?�j){�]8|�v��.���$!i@�HfV�-���L�{K����M&�s��7_2�V�$�~o|�3
�t�
���D����kT����?�s1B�yB���iE�gˆwEU �i^�
+����|0��c
+��L��O���5�  �FG���_Ӑ|a�V!�X���iX�E��ª���KJ
�v���n�|��ȫ�br���S�X<wa�,�w��Ṛԏ?q�4
�p��ӽc�В#�9Z��3g
��
�6�[_����<v�d�b=y�|������)\
uK�0������sJ����Pg��E��12�9��W�exE�s�DHK��>�w�Qɤ�΢w!�5vwA��r���M���Y5"�Q��ŒE�)`���'#[k[˃3%�@�I������!
�9�K����%QA��u�ԑG�����R�hK��cj��[��6�HFN7���Pd9hq+�M�
�t�<b4�ɖ��:d<��M�m96�R`�E���&^R
�n���S&���[?�S��S֯�k/��[�5<�i������mɏ���%
������R;꧘��,�\J�r:��.�aҼ
@f΃���3-\���ص�^�~,��^
=��fڞ�g���H�'' �������93w5���̥�z=�>�Au�H�����Ʒ)I�8��� (�C��
+f�%]˧#���C�
�����
����3d�ͼs
�@ɣo�"����8]#���4�`�>
��
���=�O�Y�p�a��|���r at k����}Ì?T�qV)S;�^T�+��|U/Vb�z�����hՇ�oXd�Q�?.hD
�6��}'m2X
ۜ+s�6�=�Ga�K
��0�l�L�/1'�
=E�����;n�[F�~
+3�l
��ױ����9u�:�b����\�|2L�|��c�M����$�y"��)��Wn��QYY�W0p?7�Nv[�U�~Fj���^�
@�����-�i/��D=�7�]�

��j-
+ܸi_����;�+0�w�۷�&U�q�\Z��w�Z>�e��5;j^��
W=kZx��cv������{��8h�Db���>v���=|+]�K�a�k�r���FY�P�c_���k�[&��=>?
;.|��H��{���ǻ|<��yD���w�٥�w*�ON�HZ�(��^c8��V
3G>
Wؿ�
E��gVf�
�Z�v��뇣�+ր�:2�)<�ʯ)������e�0m^��N:T��8�&�c�|�'��G�:~|�4�E��y�W������(q2ݳ� �FS�m
�-v��*�#P�H�7X�VJ�����'� �uR��'��f�G�)�w�搴n�o?���MO/�X�%�Ph*�92iD�s��^��{s ���2�$#r���_F�Z-	!6���[�q�22»u�v�#E��.�]��?�G�i�	7���5F�d����b�J
��a>��j}��ffA�V��py���w��E��t~��Q��	�ɇ��
��R���U
�� [...]
+�eY17E�G�jcz�����l��.M
�W�&<'~GƱFy�������RZ���5S�"��e�^pX�2Ue��M}��f{����ݑ���%?���OUR�يZN��7/����D/3T��� 1�I
�\ُd=C���
+�+��/T"Z�\\���k2~���'�	���X~����5���|���sc�-[O�2��
n����{�6��e�
+��;���T��?�F�EW�ݮ]�4�Wؘ�_2�ڨ?�?��d@�=�_yf�
T�q>X���o�>�V���HaK��4-E��w���5TN��G�^R��2�FgIx��H��=C~�
�y�>m�a �
К�~����ܵ��d;dP�y1v
�܋&�"Z�
	~��s&�[�
dl����L��w/]��~Q\�0�1�PC�j�Ƅ�[��4��"\Z���F|��..H�d����yS^ϯ�ix*r'��Ha*?���[
��3�����
?�H
+�
�Rpb��
+9����˰qiw3Nv6�
��f��x�LI��h��!��=;��j��^h!���mE��k~U~7Ǎf� �t�
G+Ϗ^�P�퓸b��ŕH��l�p|�Y�NBm��HT�X��XI� �*�h�߽���^�B
��ȕI%��ԕzߎ���i��
�ե'��=nI=�N�=驦R>O�\y�7n�(�s������4*g�/��'��qB0KB�ܳp�v ���
��tk\�S���֨��6��&,*��nt�� �J/��U�/��
�`u@�CD�U%���L얥t|�hL�NBwd`0����cy�KkV�NU 
+'x#�_�����ج���F䔎�oLe�N��G�\��A���H���U����˩�`w|cjl_FN�es�|�%El�gP���F�2���;�����
4L�����4�g��ދ4yij{��^�_�S�����'�To�1�
����
�h�]��&�P�������
����:�����d�[X*��Ƙ�����Y�
r�馑�����7o	8��nܳ��ޮ
�B���mt���o^
�x�Li����$�)oK���p-��P	�/V�H#
��&m8V����7���Wr��"����oc
��l�zk;�Y�8m�
9��Q�<p	��A��
~�ZI۞S
� �8�t؈j��
T���{��:M��s�d=�>qm��
��䖻�Н�
f��.C!��qJld����^S?���jX'̼���s���5_'Dݎs��e�z��%��)n6d
c���4+›GG��+t�m�c��g�-
+/W�;y��DO��ɛ�+k�"����5�o6]`�G��<� �I0ϭ��#En�)�%�
�"�>x��E
� �>ũ4�6{�ӻ�Ԁ�9��d�����E�1:J7v��9����z,�S�I�A��
���^;�yOD�H}dr���S�.�@_mu�V�A�`����V=oH@�	9`~*I*���p��uh}m�B��)���Xv�^D��F�
����C=���	
W�nԲ����:�pz�;��?��<u�E�1K���G���S�'���ۜ�C��84��*�X�x*�߼�/��"��krdE<s �
4�	eh�{�y���0챱X��q+�Ql
�Y箬���
�K�9�U���C'ΗW�^ɷķ��w��䁜����>�
Ca>i��<��Pl��8�:0;PW$G%`Q�F%9~�Rϖ;��x�H��y?񩏎3?L"�ˮA������
�۳[)j
��Py~
s�!)�b y��VR�E`�8��RA���Q�Z;n�JA���N��
��
+endstream
+endobj
+4161 0 obj <<
+/Type /FontDescriptor
+/FontName /DNOQWZ+CMCSC10
+/Flags 4
+/FontBBox [14 -250 1077 750]
+/Ascent 514
+/CapHeight 683
+/Descent 0
+/ItalicAngle 0
+/StemV 72
+/XHeight 431
+/CharSet (/C/F/I/M/P/a/b/c/d/e/f/g/h/hyphen/i/j/k/l/m/n/o/p/q/r/s/t/u/v/y)
+/FontFile 4160 0 R
+>> endobj
+4162 0 obj <<
+/Length1 1437
+/Length2 4584
+/Length3 0
+/Length 5330      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<����	��Nv�]������]��5�
Fc�1�le�!�#dߣd���R�&R���5?��|�>��
���<�9�uϹ�
+�Y��#���:X
^
,VjkۂA@���!ax��#�`��
�H!`EDQZ
 ��z�P�nx����Nr at u$�a��0���8
�Zb�($>@��F-�Gx-��H�/! ��
��tEa ��%�c\�@����!_$��XP��s�c�,
 D ] �&��͐�R�?T��\��6�y|O��N��0:�_���
�cH
�oW�?⌑����TC���W4�DŽ��A�#f(<�
�C{#ؑ��"�+�C���9�j �oO@3
+��
+�������5����>8�?�
t\_�����?ǿ6��������p8X ���
�d��` 
+�@���NJ%%0X�q�(�@,��c]��q08�t�k�\��	�_򣋿#�?�
+�=����7��d�
+��"��c�?ɟ��?��O�C�"��a���;�72��u���7!
+��[�t�����'��C~��t���%=a8$��KA���7��i���߈ܿ�?
������;�c����W�8��>�^!�O���ҿ���x�xx�x��SL�o�g5�;zX�@q�4P
� {<
���KN��'�w|����x���vA
�;鏄&ưp�p���Ȳ��r
+QR
׆D�ڎW��	�H����^�o
��Ud2�.P,��;��m
2�Y�1�m���B��&N�O���|_	+t-�#�eHM��<+K�+|��ѳ�g&�e�xj������agV����N&�bT�!)^
�
��h�(�}J9�%!�=��Qlj��øW at y7����������A>�y��jѷ��oNa��)�A���[��Cy�8�%I�[��Ú����
�1���)]W��:�m6�o��ȋ��J����j���N{tTل$�Q
�jP޽*�Tz�)�0��m$R!��Ĉ��"����-��m���:}L
���r��}��#;N��N��$�;�C�5�q(�S
+���
�^��
OX�l�A�<��-_R\RE�X���Թ�k-�y�
��l��
����
+[���o�52�rR�S䬙��8W����;��lmX ����t}֎�c�A��(S�)����R�
F���':A+ʍ`���
���'����;>���J�q�V�:ӅT��Y� �F��"����օCmU�T��+�
��\ޢ87�
�>k��w���~��R�=���6wC{Tg���ld��3�κ�v_f�(/H
X��2sK�!?�g��~��Q��o�
+�����u@|����6ptU�45n�c#t��U`�LC��f2�k�,ʍJ`|�Auä*T;=���{����ݥ�Q��,򌑌�5�U/m�PE$W�
>!��� �P���-i
���f�
�3
S���%!���mc���
���U<畅\��C���M���t�{���n|�J*'����o~p]��E��|x�F�↵Y�8��RR�|��
Qb]�T��sEӅ(m�!9���=�&��_:\��+6	�Қf��V4X��@-�mݒ8�9�^znA�84 �C��*QB�J*���9��Wx.�
'��w�Lx'੽�j<��!����왉�
���H�� B���,ͪ�`�Ƒ��3�
�r'�ˊ�O�
)��/�Vu
ǡ�45��/j��hF`�yf���|��
s�6��_�@�%7�r
C�9�F�Ł4']�E=�v�KAV|��{��+JiO9�ZRۢ�qL/^U2j�o�͞��9�GQ
+�pn/^�QM!a*~�8��Mrjٻl��J��I
-�6�S��ݜߎ�zx�EƞF�a�V�" nW��e�u�GH7M���Ç�ԕ���2�s��I�|��'<S�-�ń���?^m
HTNw0�yoU�����/�~�/������ ����ż4����,G*M�Hں�X� �5l-�t�	��[�>��%#�%�S���ԗ=�կ��u�
7YP�����nZ���8��&�}>�N�!��|p�G3�!Ve4ޟy``
+VR;����E
�(<��rS��G�HA'=�|���x����W��܏��R�n�
IBKY#�2�$�����C�rZ�Uf��+�P���{���Wg�P\����j~�}7�%V�>�D���)���i�J�4�{��p�dLHO#Wfh���Z��
�
?{�z_-I�d��,,T�9��L�F
�bI�V��)�;�,�/>��8�y�]Q�X�[�u�P��9��@ĩ��� �a���`t������j����jG��_�2�ڬ8{A��$�����Hm�f�Fpi=��-,����#��ez��Py�TM2��쫧�k'�V}��Ÿ�w�X<�
bȜ-��FK�(!/��e�n��t�V�۬��g�Q_�/B)A��sf����)L4��w��X"@l��	S9�o�}
+'��[c�.PH1�������7K�B^q��J��j���宜���ɂ j�o.��#��
OO�-�o�.	�������c��+� `���Ie���OEJI��
��ɴ|C�>��:�C�f�Gۓ��#�n�'��@i���G|,z�!_��=y;�Fh�O
�hc�M^��*��H<�׬w�p��T�j,�r��ҡe�zv���%�01kܐ~tV)6�����-�����|�^R�X�k��
+OǸق��e��z�V5�
��t=�߽�y㥧�uA�v-k2�g)��)�5�U���3)l
�.�9*=��$^RvN�rwρa�/'VX�ȜG��zD�>d
�m���y��� swO���d�
)a��
Q�����z��$NlDDm� �����^�4��!eB;�=���)׷ -��E��uM���J
�&_I"���7"ﶘ���]ȹ�5Տ���"6�����������n��_��6�����-����9mYm��6$Ƅ�ʏb����b���2��EʝƘ�jCǭK���0�Y�g�s�>���r����8n�{����R��͟u��ɩ�,�
��V��}m⃥����[r����O���ę���u�Fo��d��~%��	6M��W���|��
%�]�҅�_,؋o"�<
ž
+�K���'ބ����M]��#��l�N׃���1�~Z�~̻٬
�^E�f&-���
+	�����Y
"#��73�
&+�
Z�A��#���A�e�r&R�'��-�=I'�bG_B���Z�6�*�~y,OMܕ7L)�2��,�qa
:Mp�;�Hf.p����8��U+E 7��#����
�
��fE;]�y �|��A"���p�m
���M��]�'���#%�"�S&���Z�������C:g�k��wڇc�x퐊`Q��Xg��������Ǹ[,lJ
άAT��NB�
�;�m� A��z��6�t���6������2�W��8]�!Ed��|���x�y�����	�zDž��#22����z��O��L=4xZmu��{��ç�5 ӆt������ 	C��轋|sZOO�����q_2ڼ��"
,����$n��t�
��VPo���Pi�i{#���L��J��ן\��Սn��혇}/����-�f���ڳ��f�b�߷x)�8��(��Q1.ɠ��.ɘn:T���4z�)�
.�<��r��Ni����L
K�5G~Z)s����\��?I
I!�7��0/>�袻{�հ6���9}��G�ל�S
���W��4	
�X�u[�<�d�8rI�ҡlI�;��N�:�4���}Һ}�{��D�0�}�=��+'�I3�^�\U���B
	=�{~ �<9��|jq$l��?^i�Q��+ @[�
(�~T�}�$��p�bH�x�
#�<pH��a��f�6�����
�7d��pW3X���0���� j�8q+
*��"V�L-3��
��s$C�V�(:�}�-Ox������5���n�_(��W��N��Q4�~�ù

����EM~�}]�Ac��;�
��������:��!��Z�*U:�5�$�VrZ���X��o�׻ ���;�{H]O�,�^�����WAX�6���D/k�s�"�����gB!�nDLji��Ot�v��y�}���PR�rĖKϽ��\օY����n�b>��Gm_����Jc�"����ᾭª�9��,m�Ĕʒ��SWh����
�>��+�g<,��1�ʩ���C���F1�&I���|� K�ë_��
0̮��/��do�x��E®�}-�œ�Q�%
3�$3�s �`�7�b��GmΪ�,�a�}��S�چ��?
x���H�f@G����Or���D�[$��b
�ˍ��
�^�k^=�k����\�
'yW�ͫFM�T
vbnQ{f�
6��(JV/�u�
 �1)��xK;	 �xͯiO}~�y9 F^�Ev���<w�r ����fۢȵ���vη���C�[�I6]#�;ԓ�
�YO�p4Y6�W�v�y1v��
+�*4Gs�;�ͩ�џ�5���7dt��(�{"ݧ�-��7
8���V�M-Y�nx��aI�i
�G �D�H���z%ǖ'KnϜe�	ы�k��D�~�|���M�o��!;�������;�j�@��SF3�3�c(���

�#�bLc��������yT��jXǘo�C�C�?�R׆J5F��=}��.CB�ܐ���kiA�eS�Ǡbj�l<L�c��q�/%Z7j_Zi�
t�v?��vMBNFCW_�h��{�t� ��zz*͹si&�
+�^O)����ݴG��*
ޚRW ��F��9�CxH�G����
M��Z
z��+T&�6����q}}�JK�U�=���J�b�p��շ���
۟���ĕL�N�FD/��m_
+L�u��p�5�M
+XVU�< �mnY�=U��r7�o AQ���u�~�K�P�TU�#��y����c�<����˂9�J��}�
O�����2���M��@���
Ҿ<ܻ���u���d�ձ=�4>�I��N��v�"����B�'���
+'Z�0�p]7U���
Gm�
�c;hH�4t	c����hS��7C�M�η5ƣ1F���q��#ǽ�)P�[��Zs��f�Յ�wy���l$�P�k	̍F��.?v-�pe�
�K[�m"Z%��?���Ƽ�0-��pH�G�c��a�C`CT7�MD
��W�E�mI�Ԑ�G�S	��ܕ��D
�~�/�t7Zj��
+�(����ۦ���4�
Z����
�	���v*_�h[�a`3H���v�K1�!���L �st��E9�n����y�����+�K׬xH?+���eH�cT�� ��,�T�ٕ�	O�ΙZY`v�YFx��F\���
�*
+�昺��\�n;���2��n
+endstream
+endobj
+4163 0 obj <<
+/Type /FontDescriptor
+/FontName /OQZRZJ+CMEX10
+/Flags 4
+/FontBBox [-24 -2960 1454 772]
+/Ascent 40
+/CapHeight 0
+/Descent -600
+/ItalicAngle 0
+/StemV 47
+/XHeight 431
+/CharSet (/braceleftBig/bracerightBig/bracketleftbig/bracketleftbigg/bracketleftbt/bracketleftex/bracketlefttp/bracketrightbig/bracketrightbigg/bracketrightbt/bracketrightex/bracketrighttp/integraldisplay/integraltext/parenleftBig/parenleftBigg/parenleftbig/parenleftbigg/parenrightBig/parenrightBigg/parenrightbig/parenrightbigg/radicalBig/radicalbig/radicalbigg/summationdisplay/summationtext)
+/FontFile 4162 0 R
+>> endobj
+4164 0 obj <<
+/Length1 1715
+/Length2 13397
+/Length3 0
+/Length 14367     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eT]ݒ�	�]7������F��Cpww�����	�ܹ|��Oҧ�ޱ��gVͪ�޹�
��HQ�N���(ng�L�D��
���bb|<32��8��-�lE���� &..v���5����������C���p�4�pP�P����:Z��䌜-�65L��*v&�@gz���5@��
N e���hJ��0�4q�-ma��$ekf���eS��	�
�>D(�%�
+�!�����`
+4�a��������C�w���7�������?q#Kk��ΰ��wq:��L�������/qr at SK���J9Y[�ٚ[tL����n�$n�4U�t6� �Y;���5�O%��K������2���F��Ϊ
�@ ��1��0���
��H��������'��h&fkbgjik`fc9:y�|�D��bXښ�@��
�v�[ �� ��
a�9Wv6 ��?K�E� �?�`�7q0���A�� ��+�A�}t��C
d��G�?�	`��C\���8?�+����J�����>����-��C�����o�xI��M�����ş�u��=����?�����!;��
+2~L`�?t����N�h	��R��N��v�L?4�מf�����2�[�G��?�ǧ�gӇ����_�q`_��V�)��F�	��l�M���1�5���O���L
-��*�a�͟2*m\�:����S��
�ȶ���c{#GgK#kSK�?ְ}������:��q�
?�����C����_�_����დ����~
�dm��L5�L��!���o�5�Ə��_���_�ۇ	��G7������������ܽ�X�t�l��
7��7���M\

������?.��a3ˏ;t���.ٙ�}Im
+)�+��A儗^4�ܐ�C�Ƀ���<�
+$�BF�bY��r!S�`jƶ��$�=����<
�F�-C��/�3]}Бܡ>D���U�}�f�_k$�[�]ղ'L
���e�K�׾V~�۫�i�$)0z���@�㭸�s	��բL݌[ԷU�sV��\��r`��|/ЌT�f;�0L�V���9\�*�Px�
�y� 
>�tM����P{�T\{D�psR>)�Rjw�߿����Z�Ia��iw�������(�X��0�%1�7'�)>��]�F���=?o޿Gbw�2�"��ՠ��p��9��`Ć�&�2�H<r�܄�
����n}�hr-~E[*
#Ye�9�~�Iͣ�Ӧ�kN�s�����ɿ<
��d���4�P]��h�)E��n/ m��[��$�G��AG��WXĬ�ιǝ[tz��==�s�gϽ�
L��
7_����B
�Z�П�R{q�뒩0�ᬨ
ŠH5U��SJ�*/�)
���������	,ϻ�F�e�,�1PM)�wKM5Df0V��)N�9ߐ�QK������v���˕�C���G��m��D���+����eV�pn؝�=.l{1�����	Xd��	�Uۣ��?F�-��;
�]H�4+������|�}?����ݝ:0�83�\�:8�� ����
�^�C��.B�
+e
I����+�1m���W�
+��
��L(w��O�<��xy��ϟY����1B�R_��T�U|�.^���'�=_(g��GZ��Bf�
�Yʹ��
u};�
?C��F�q��Ă2�/�ɫd;vg������F��55!j�c�UY��;&{J�����LB5-D�a�x�ל��Ȍ_����C�ؘ��ZZ�pR���@$6��J<��
bo�F?�K7�
[F��Vr� ]@C9�g�Մ��ұ�ߚ�qǛ&&��Yp���	��
��Xi
=A���n9V�4�
������b����}w�=�y�����G�ڑO�~
+�~PV� d�20d4�l�M9>�OXt
i	��"��Z���g���
X�����/���O�
�zMb�-� �� 5�
�2n/��è�ƃ��a�}#��Eiz�^��9��1|�������z�<�_�4�Yz-���g��S
���p�q	�&$!��Q���9���y�`3��
�����V����.U�s�Z3#QZQ(� u�gQ�W�,l�ح��9Yw
I��&�cfwPYm��e+J]9(�p�=��tb��UR;�[�f꤅��neD 
u�9
#�ډ���/#a0������O5��
�QzxTKg
�����E�
��Bat>4⚛
+�_U_�ڶ�HO5CeK��-n��	n��	�7�X�A�w�Mr�*�+
�	�}a-q7�Y��8.��X��� ]��.O�A8�Yם���l��}B��SU�ɨ���-����Wv�I6�X>����0��j(ɘ�
&
�B(���L�l%�
���ѹ���jS?��`z�MCm��f�p_��k+�$��QPN�%��ŧڟ<8����_���oT<|a�&���Յ����s%(�Je���{�z��ؖj���
�r�,ۿ����&	�#U�"���ƽ�~�m[�&[7�x�ot���Gf̄L
+ElE(�](Gi�<��"ȟJ�E�(ẙ�qrFr-��oەXt����j]59�j�m��&{ Y&gS�
˃���dÓ%	:�ڎ&�rγ!�=�{�HΘ6�ڄ
+�_��/�R3�ʼnrϊ)��4:K��o�|}�S�2Eӟ�7t
+�Z)�+��Z#3bz'�R�f8E(�XH	( �U�_d@�b|1`���-Y�<ZB3�ϭ�I��jȴ����y����[�%B���L���O}LkS�


+�0*tܒE7=�
O�4���3�ĽeS��Us��&���g�d�S�
d�r��o�4���"��� dj�J��Zy���_z�(�l��S�έ ��:p>Z��/r�A��c:�f���I5M��v%�k:eF͢��i^@ŚL��5�i
1���
r��FY�����s�w�8�5����C�u�+�����!#
C

���M�=}{�K˩]
�cӫ3L�
�ߐ �Sd+?��u���+B��:?
S_��8��I��lu�̂�y6� R�M.�Y����wz~f�{���BH�sQ��UYC$�3qzUVH������
{^G�'�iM���R���{�ǔ��4�����9��2�l
+cx�U��������X
�bz����ߙ
:־kvbE���Lapϑ 3*Q�"�<����::�D�u>x�
|+�B-����=K.A�O�z�Ao��w�����,}�U�Ȗ��tK�"��D��^��FI�,�̱�%(�(���|�e��]v8�D��\p� ĽB§OxU��J
V-#]��B�:���N��'#�P;��~�
�r�
�/
]�H$�
��Z�+�|G��7�Ry+��;#�3xVܦ�,���� /�
�(�Aj}��dT ~rl:��br�*_l�
+�C�<�\=�W�LgK��
��r��d�A�@6n�H�^�S��
�"+3[�#
+l
+����!��8YA#!���FGP�3��x�i�(vNc�B�ň�}�w�r����&�x��'T�)�`}(��RQ�l��0}�M�Y3�����T��Ȑ
��
Xp�
dZ/ETjZC"r=�z�.O!{J����f�ɠ�1��w}�4�p^�Я��'Z&�Դ?����z�,0Q����u3���&0��Z?t��z�
+Ƭ�}NL�Ү%ǩ7_چ�GZv�1�b�p���i&��e�Lw���Տ7
�w�A��
�\�䂭����arvX�Ę���C���6�}�ɥ��x�E��
+��vdNg�^W��_�����`�e�����F�
���P���s��q�4�
+��ah���~���6�(��Y��p
�Q���s�́¯
.�_(
O���
�	#�q{�eȰ�}{���$ub;NUP��e
��4H~>O�l�����T{�Xw�D�?�G������R�@�pi�/�y���T8N"S�C�� Ԙ��i���X��$l�f��t�ނ��w����5E�gxP�u�
V��
��wn��;���
+��T�6$�"ŦV��<l��b~�ʟ�ö0�U�)Kw�_�<^��r��g	~VtD���9�Aڻ̃���9�N�E��bs at X�
�;���fm�ytD��)SDo�Jl%@n.X\ah������0���y�+.'=������.��ңh�}1
�3XK�;�%Y�1���s}�W��KF��1Od SB��)�[�
|��5�m�Ϋ����>�����u��~�ʯ5Hn���)�
?VK�OK����응��x1Ԭ��[eB�l����im9h�d�ukL� ��[
�2�z����Yװ�8	s�Va�|
+s������ku�-�]*o�p<�Һ
+�\���E�Ԧ�5ʓ��D4��r���~�+`���Y�~�U �mY����)>�q��*�o��j�y�
���y<2O�B�g�Y
�d��:�,���M7��˗�I
)� ���r5���}::w
+ϔ��rq�]Ȓ}⶙!�G��	��ݐބl^^#�tV�
�u��=��[Q��|a���J�^N���S@

�Tx6�=-���MNn�H$��T�3_N�<}H7� �ꙙ��߁�L(r�D� q|�46�:��1
+
+��	{��+�g��}����~�:�^37�
do�gC�'�4��v��\0ԅO"B%��E�p%X�͘E�:<�^��O��B��tjΑp�G
x��2�w��Ԗ�4%]v#��\�T�}Uqz%0�t�“e�
�ch�g�l�Z�Ik��c�7b^�C�xG���l��
�_O#*xD5:
6����$��MNʯ���.T��C�cĜ|<�����76�G�aN׼I��yY�GKOt��w5m�d�k�ُ��
�dEW�}3�V��gW��+�!���=���>d/ᾇƁ'>�5-�~��R	ޛ���vT����]�}�q��"��ʲ���].g�
��zw9FԂF.cm�F\����i��8��~��F��y���t��1��������Ϋ�B3U�;��aWdmDM�U�TN�I�x�x��!��]HԌf
{,G�f�wž��Ȥ�w^n|��=

i,��PPB���md^ߧ妲6�xY�)Խo�8�8��<������1����g4���yˉZ����,~��Ɍ��9��o�&EO�ȫ��]F�
7T"R&\�aW~���_�^�<��E�3
���I1�O�.s��Ϳ��(�uN�/?
��
+��L��KX��#eS�-�m,�.c|Y�!���z�������HQ������أY�RZj�j>����3�?
+5�Q-oj�h�d�j�;tF�Rշ��;��h�n�c�u3w��bLGo��*����-��;	�!~Cl��h3Մ���,q�5`��Li�Χ<D��t��!Ы1��
�����
]4��
+h�
�;-̃��(�s�M~�8����Y-�k�9��U��
+���+��
��=� 
+��ݢp=1��~�̜��w�v> ��/�mG-Wgv��Қ�1��0kQ%�tж�D� ��&�ź�/M*i�ۦw
A�u���
$L1��3Ȗ�MC\�
���R�%�4���W,�Th��p��(�q1[t�lD�ŝ����v��
D���.c�i��,X��3���U/��/z�	BȀ;�ӑ��’���

�UL1�� ?�J2n	�`V�Z���^A�.
�����7�W}��B"��C`��B턙�	

+p߯�n���2<ax�cf�z
�
芬�
6�U���ɥ"�Ol�h�yx:���r�8Úd�T���������|��tW.�/K�v����[
�Ŧ���'�!Ѵ3��-ϟ��c��.f���`��~&M�'
�r�vJDez����vΪp( �T+��U[Q��s�����(�
��tmu�j+/s=��䒦�@Q#a��&.mM�Z�}��f�k��fb�x���190��XpiVT�����{�����b�)Ӓ<qA���.>��
2G=WT���״;
=��@��3���Vv�
�kq���D��3�Yr��dD�i���qB;�
+
+��m��n~8��-t���"��m��y���VҲ!pbh$���NrWe
#���LW�=�m4�
��N�s�@Xp�� u��R?��
�]���>�����8��d�����wqP�����Ɯ����!��1f�J�f��f�}�ƌx^3�Za�J���u_��	'5dd��`_S��F��vo�枘
MA\��+_.���}H�}��W�3��z1��S���6�#u���l>3ز��D�%����eG�Z
��H�T�ho�}���¡8�$B�
��z
)
��ݻ�Tb�#+��]*%���I3o%p��֑�06��b�#=~m��*VM熷�g���4���-��D¢�/���"����d�]
+8�@FT�@����!��!�`6s&���j�A��Xn�ػE]I�\�>�
�F�Z(� ����
��R�.�E'G����z�%8G�w�p���
ѿ�>�oz@
�I���-���,�P>�CYI΋]#hB���7	v���9:*�;�,���
+
���ɥ^�DAy=	�
������,
�.��qՓ�u�P�|�������
%�t�:�Abгz���7�G��b�8B]��q�B5��
4�7nr�$�e�_�����ms	ޠ
���&u2D���'k{"�ݯs�=�湜Ayy��#��u	[���Y��P} �lD�2����u�ϹZu(m��2�
��"19������7�7#7�g�����H�m��M�f\���T������W�>
U����l#�U�hq�j��\��
���Wk���>�S؏ؿ��F�4��O�r<dF��
+�j+����
���D
 ��g�b���D�3�|��7��@��s��_���
7~�.0�M��k����%�W'
8�8�ѓ��0',� �X���
�q�1�
I�q��=
���4�ʪ>Y-�s_�O�OL��p�(!lJK�����|5�^�
���,
��+|�D��
�VZٺ��9]����5��G��
%X�7~/
���u�
Zgc17g)�l0*/�u�PE<3�-�'`�pL@���,O�����Y :�C��kQ˘��
��
���.��4r�
���^��j�~�ToaҝN%��$��
e�X���!��䞍d����I��[�Q��h	e�3
+U�EN�.��[}=B�>�4'���z8�7�-��I9�=���)��,��n)Ё�đA�.��ij*B
�h�* 
����֣
�
���^ˠ�n��2�'�n����]L�1g�vu��]�Jw� 0#�H`p†1:�S���a暾-�t)E��M�+r�*��6���HI:W
Q�U
�6+
���S�;�~}}���vn.0���
+��
1qƿu�a��iq��P����;b��
 %��$�"�~|�%6�cR�[0Ŷy4�X�$�]d(�O�%C��lֳ��aT�0��8�z2(G����Q�W�����<�;�IwsS*�v/K�J�gQ
RN�l
ۉ�p��� S~�װ���4,_����?
�zHB����ZNMz9�Vgb	�@�|
�;
�]A��`��j����
1u�� p���d$��R��ٓ
+��f
+%ឳ!��t
����!@�s��NRj1�ă������Wt�k&m�'6)h���k:.S��`ٕ���ug$?�'�g/��5e�G���>v)�6]���T��hB�c����
�����N�M���ǟ�y�՛�h��&眓�($mxBtv�0��bҍ��A��e��|��͖��%�
��/U)�>I���okv�i-5��-� S�ڐ���X���7F��!��1y��)�b�V@
�98�
^�6��
+
X��������
s�6&vD���s"�6V�
@m��$�z���/������l��{TS`�ԅn���J����Y��Zf��?
+�{]g	�8\G�o��i�r&��F����`(n
Xv'�+|
�*�d��fi
M&��Q���Ш��<�%�Mk�bx�����ŗ�N!
���&�"쌮�
+w��J�z��X�Ȗ��6
���B���q�sj����!�C��>B�	�E�ʮ�����g����

�=S��g]�c�\g �`X���F���9�:�`1
ׇ��=͞s
�Y%��of��<�c�^k����W������&��I��P�(��0��G5��J��=�X!��P�4�|���$]sK��<���:�a�w���
���A��(��8Y�I��}�$�� ��8,��^;��*V�M;+G���K�+q!mŲt?
t�����ae�����(M�}�LX4V�D/R�BTָn����٪��"
+���9M0��z�CY�߃ W��@�)
�{}'�,l0IO:�[9
�Ǒ��T�̮1�7ZJV>x�]��D�*Er�
+
��g	���Y���Eȁ��T���e'� ��`fD�$�*�r��x�(
Ϛܖkt�
��1ԉ� ���
W��t*����mTb%
b�+��`?j�S���� n2h���fҤ�*�YIQ��6��Ţ��vF�zOx�~Q2�)Wr""}�QE��£}|(�R�N�G��V�y��Y��Z� �be�J��@��r�{8��v�(D��sM+7.�6��r�� c,�+��vޙ�|�A�'��fc�RO+� ⡙W��
�ZqT�R9����b).j�#
ܔ��M�(k9

�Uekv P�c�
ï�H浛wyU����z�K[gN�N��apD�@+��b:���r��^2&�y�O
��+�9_�=�jd#+H�P�!�,�h�L�ǤKp�nP
a�-Mk��G�n�gM���Ƹ�����+ko6
��M
��4lR���
G�č���p$�"�9M��u�9���4C"٥ɂQi�r|Oqt�����W\�Q��%Pߟvom|
^��F��
���Wi[�����
+^�wC��vbg�xќ"�D��~�x���
�z�c���F���a���x���-�c�O
+�gr�{�Ҏk��ᓫ^F8��
`�b�l��e2J4��%�>�n��A1ğ�ł�����,h��	9�
�o�S��W�yl�	̵��m�T�q=�vPa
�`5�(��e��]7��;sT~��E킜n9��/x�s�0j�����o(=�*y��X��T�n�M�*�5
+�Q��"��*
����sw-􅡹�{G�~���f����|��Z�Zx9���:�y�B4�\ӱ=e��7F_7�N�qѪ��[:GJ�bJ����SS�f"M>v.��9Wc���Z�X�?&c�"C
���M���Ү�$�t� ��7��c/j�<Q�vW��C\e��$yc`Oаy��S��[� 1Qbt#]"��aAo�9�BM�_���k+{
F�{���R��\�J�.A��IK�~ւbq��Ɛ��ACs��\���{e�1��q���v� ��.�Xm��YH��z�.e٢j,j��c��j�o
�� ���?�'��

w�	P%�1.'�Wء#�xe;'��oQ��;Ɓ��!�:6y��	ϢyR-Y��NL��TG���Rj��SH
O��P���"V<��!�^
+
+Ѱ�V�����G:d݀1�5;e���%O� �A����T1��;[i����|oX�~�v�Kg��8�*�|A�p��mO�	y�����ʹ�k���
+
K.Җ,�M���k:�XA�NzS�Ex��#$GӖP���i$�Uf��/�A�lsU�E�Y����y�2�%g��
��G����ʮ��$�-��.�W�"�	���]���S�,3[�k�	�>���;���)�ݷ�!4�y��-i����G
�p�"FP�Er�x�kN��[K���R9�w�^�t�C�EA}ѥN@�jn�H�#�C�����o6Vu
�p�X�ҜM�� ��L�}a
�EH1!
qs
+�ڃ�1F���:n���zÈ��
ۖ���a�[�x�n"g9������ӓ8�R
�Q"����M����@-�P��*�cy��6�K �pivDL=uD�N
�L�4�	m$�^�w�P<׃�S�y��`�h���Y�.�W�
�j�
���r��
�o�\��\?հ�ڕ��8}s>i�u��/:��-B�q�L)���ԍ�@������z�T.߱8ڧ���=�\�0M�_���mB�Ϥ����%(Y
��'��:���¹d����m<�<�St<t�)�w
�4a�Z�����Y�vs�I��%7X�\8@����,�O���W��'W�%���L�@��xZ
�p0�J��4��/J��L��>����Ղ$�pO �t�!��K�G
�k�,�z�)ud�����\�`G5�U
SQQ���Z�E�Ї�*.�Þ�L{�Okѥ��
&Ȑ��l;
ղc���=�ӿ�c�W
��T
��+o �@1�bȣ�߀	�n
�q:Q��䎤�|���?���)s��{���ܴ�6�i�JNgA
ؘY+����U�}��k
R�+�|�J4�5��
��Y8I\W�E��
W�3����.>;�� Hn�>@=��WWS��tbO��>>��5�쪧��"��t:-��0�/W
+T�d�q���g�?z�A�o�Αc���1݃Ȝ�O�msM2{�>�
A��Q�e�H�5��{��L)��4z/�N��3P���K���v˟�E��W�3Η�`���Ɓ����A��E+�e�2�J-a�+�
+kh{
u2A+̽�P�<�P�1���[n.�>��䪙��ɁW�.eT�0���/
��'
@`k��	6�ݒ���D��+,�yN�0kЎ�^�/��|qHfW���D�( }�3��{��{��D��������E�	g#�����iه��� �=
cH�g�O�a
�_����<2p�j�F�榿j9?�Y
�	�����y.�r[9a�螊5��`�%��z�ǙL�s#8j�m
Μ
����
;��ԛ�L5�x�aZ���lH�Ԁ'��U�Â	����u\X�e�!V����N�����Ot
R�z[W�#�9��n 5g~g='m�F<&~~!/�3\%ҳ	ܗB�O
Ϯ�ؾ�7c�G��hm@��G�@��+�#R݌��q�~�5�BC��{r���������k�^A
f�th�Ey�QzK��o�&��(�
p
+VCd
\W��`�Zϊ�0�Ew�m	ze
ܯ^<qm�e^B����p� � ��KWv%�]�ͳ�L�`��R��lZ�c�9�!�U eqD�D��˼�u>�r,٠�̶r��$i u���
���{A|S�d'N�ŝIv�Xq�@���X
���)�
n�˯�&��
~"ZKY��G�Z�DtY�QF�Sf��pu� ���:�Y����(�Z7V��*�]�
�_��q�N�
]���>$�
l�A�\
ws��GA׼?"9��F��](�
`��Լ�+�elL5�`Z��L��X�O��Q�|��D(�\|a!�o����G�O����e�0��S
͘Y�f��/>�kLщ~Cu�/�z
���r�
��Y:iDǾ��&ld�#��!N&�RsGT[����	_X���D�>KC;��%��C���{U��Xh�Td�#�bIsW�7�̪.Tj&t�ȀFHE	��|�h����[�]#A�եޱ,
+

���q�^'f�&D�n͸�����2&d�-���w#�iH��	,ؤ-�Tb=5�5�ƣ�}�j�`OxĬc�6�K6���%���yޣ~F#�-�N5���M}�s{S�X�������R�,�
+�A�mM��A񆒚��`	�
����n
M��|�>�:��6�\��-hܽ%>�v@!�z,pr�M��x
����0��
�N_Ǯ�|e���I�F�I�#c-
�ԛv�
@ɜB�`��b6xY�aQNڂ�MCK�P��B��A�Q���y!�)�Z��R{�$�.�Xգ���9j
iJG�i��(��S�j����A0
u֭�i&��[ό.&�n����[DN�	� ����h��H���^���b��.C�i�Y'��|��v(�}_�&
� ,,_x�v�:�'�sd�4���G�.�lK+�2�(��9���
�
���pT�o7t�����q�`3&�ˇV�_zG��a�p(�,�D�iz�
t�:CC�|1f��	Tc$|�S��D��U�7��j�%�0�!�cF}����(ySz�1�����-/t�J?K�L���f �#[G��	E�9h�\�8u�h
+T��w����c����j�5�a&�hJD��\��"�Nk@
�g�dj`Ab��j��n�>�hH�9���5�>��c��T��){��P*_�^�X��J�&7�~���O
�ɉi�q8ި�FÙ��4�j���J;�5Q��K�J��w�Ċ�޸u|�W����ݛ��w�۴,�\�M� �$�sȹ_�qx�Po—,���tu��*{XVy=�U�������?�NF��ǏNW3yϚ�a �L�ĦA}�\b4wn����`͈�>��67
}�IS6\'c����VԄ�,
��-��������h[~�Z�Y�~�������K]}n͏Oi�HNŊ�� %T��g�3��
��r2M����o��n�͙8)_��!e�/�
̙���NH�g�9FBaY�i�/�{R��̼�N-n��ο���͒+�̢F���*�(�
OסJ�ߜ! .5I��N���;�6�bl>��&�9Ј��2>�{÷����Y{�a�;D���V�UpS�"�k	��{��VA��mn��R�U���l{�"7[�N� [...]
=;X����_�z���{+1'E��\�Fٹ�aI#���!�sG3ħ�:N�C
+~��w�0���AD�"k��
s���d>��߯��V����E�}�b���%y8����%���܍g��jo��
�\V�����Ɗ�\�jc�biv��61��Ͻ�b?��=�-��4�'_>�Hŏ
�uEF/�ޣ
D����������N05�:� �JN�TG��x�ƒ0*��*�m�;��;���١��[�z�q��G7��T�ѓ��8:����ӗdt��ٯ��hf�V����n�����|v����8X8oS
+ϓs=Qk��0�XR�QOX�o���@�'HS��D �[[����ڡ^���#=����$�u=�2�����C��BV��%b�{�];/���y�OIF�U�O�S*@�U�pX�)2��*�� X at t&Ɇruu
_��kǏ��v/��q�X�����:�l5��l�-�H�MEy1�r�b����aH�x)�u$�֟�f5l~շ�*�B���	
�}�곐����cmᔐ:
b��\j��ϭLW��
���/B�DŽ����(�n	]+�o��������~f��
��
+��\�8
+�,����Pw�����5�m�8E���!2?2�Ց%��qQ�l^Ng��HZY��@O�F��)C5*c>�����}�reհY|d��4':O����WSD�"��3��>�D��r��d�{n%��x�#�!>��H���X���ɗ���l�|##�ss�B��˷gUi��/���e"R>���j��4����|�z��G�)̉�jǰ!7���&��CA8v}�D,_,Ԧ)У"�������	h� ��D��{,
^(J��o�?)��w�5Ļ���b�c�|��/��H{��B�+�Q�c!	`-y�����[�Χ��
�i�3#H*(
��ۂw����>�� ��俦�Zҕ"�P��QD��_��
`���g��To���'��Q�l�\
+��S9�yӾN��n�>L̃V�E�!�>� �
Fښ���\���j!��)]��p>k+*��Zi.�+��_��(b`�S��������^�2���k�"Y 
+���L7�.��HL��w�1��T
�_1���Q2Th�t���|�ۉ��
6r!(ï@�I�-�����K
��y�lrb�^8j���2��(���
:��5Bm�W;ҧ�̆��
�p��>�uT�|��W��
1��%�`�[�9x�n8�(�
�	f-f诸���
+��k2���W��3�4��~��B�.ϓ�S�GA�|�3�X���;&��g�'���/v-��[5���yܬ�>eEmR�lf�wJ����Q/���T��FD[�CIn$��
+�0h��p.
`�� �
+�+����1⤪^�6O���l)@�/����jo�brPc�<Ff
�~�,4z��p�%t�J�z��u�!e����.��g>��K�̮B�K\z�s��ե�n4�eU��Ь@�U�l���=�A35w>ҕ=�"�}j�	jԨ�O,���wC(�kJ��tDO�� ��]��w�E���4a��=
�sƫv�rb

?6=�' ]&��<�w�<*�_9+��4b�����s�=Q��G�f�P�����U'� 
�	�N2�ٻ�-���K��m/T�3l6�MiS���xM�{u��u�
+endstream
+endobj
+4165 0 obj <<
+/Type /FontDescriptor
+/FontName /OKFWXR+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/A/B/C/F/G/I/J/K/L/M/N/O/P/Q/R/S/T/U/W/a/alpha/b/beta/c/comma/d/delta/e/epsilon1/eta/f/g/gamma/greater/h/i/j/k/l/lambda/less/lscript/m/mu/n/nu/p/partialdiff/period/q/r/rho/s/sigma/slash/t/tau/u/v/w/x/y/z)
+/FontFile 4164 0 R
+>> endobj
+4166 0 obj <<
+/Length1 805
+/Length2 2072
+/Length3 0
+/Length 2628      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<�k�*I�r��e0�fƾ�1��,!c��t�
��Ա�R�X2Y�/�Ɖ�$
"$���U�
�kY�w�9�s�����]�����o5e���%�
ڑI4
�.��F�
 o	�	��YS@,�@&�`i� 74D�� ��
���Fp�	�&�3(��P�a��Մ,� ��Ò 4�
+y3p�0���#�4�.`��A�A*H���p8�'�h@B 	�}Er$�Է2�
�W+�PyP��6�&��ēIa
 
빐y��<�������aa.X���_��WK$�1�4���tH�d<H!}o����A<�N���HÆp���0Ёօ
�V'P�Q 
C��B�`lܮ�$��$���9�ll],��k���
K �<�  �ۼ��k^DBp
�
��yF�������lI82�@
+�H K�`�0�(}8$<�Q<`=]������᯷
+�='��ڟ��!���ɿ%�g��䙩����oeE�:s��#x<�(,�|8:��h�/��_:���
�@���k2����̺
�1�%/o�
J�
�++.?V��^
y����w����:
�+�ױ�L-��أ1?)�7�V[u���T]���{;���ިv�g�ZZ׊�L�U>��I���N>h��64)�&z�.K_–z=mN5�B���S5��S��ړ�.[����W{�a�g_�?�z�����A&����TU&vLJ�mܒ��lg�A�V���Pr�b�ƙ������L��Y��{w��+FG��K"������x~�\qN?���7�Ze��~�ʒZ��U
���x��w�lK��k���t�|6Z!��q'B;�3o)�
|'�N����I�
>P)X;7Qqa�S�aF��g/����A�O^t���#���7
�l�ZGb����U��9բ%;���~RO� 4�_������Q�;F��g�
�2
Ժ��<�za*����� '�xఆ���0����Ě1�ۜ
�n^s���28�3�KZ9#���K��+�)�il��9$�e at j+����:j�2���b

+
S<��
s
~m��,��5�J�uV�x���my���^y
�WʉiD��z&��f1�ú�l��J�Eh!�
W� 6�
�ה7�?ҩ*V����)m?K#�o����j����0��L��[��J�HI��B��PoG%/)m`
z_�t�:\�\���.��#�	��f!"��|��f2��,����&�`%j\��ől�����W���;�
�]�x���4\�6�Ȅd)y�- ZӖ"Kdܥ�����pD�Lj>V4Jpaغy⇺S��g�b����-�y�j4�
+�'J�eˬ�L�j#E� �yJ����.�y!
�1+)�h�{!|tM[:	RƼK�Xj�wh�v��Z�-��LǴr�}�4�茂5ck�-u<J�H,,�����<�c87�P2���c���MMU��/ݷ���}��B�#O��&*�<�	.���������9p�%�.�^ �1��iw5��F��z
�����aq�ӐFl7�����@���(�ȵ�Hhs�'���k�N?3�X[�tҸI��L���ȼU�ΐO�>�/KD|�O�>�Vݭ�l�xj
����Ʌ�\`�ͭ�m�S�w0�q�'
m�c�����3IE��wRg�%c�^�
c��X�����{j]/�W?��Mp0��x��כ+f��{�
0�(t
]�������.��J����P}�w�����
���!��`7�
��\�LY����n1��
�O�F�n��ؗw2+[���� з��|i��zƺwZ
�L�����rH]��g��������%�-�+	�
+7�M
߱�{^�R��E�xdU"����ؕ��&x+�lvj�
������>�dž��
Q��`��.�oW�5�_l��Q�J]�m���6�M�ό���Tҽ�>v�};u>SMuvV�up���tQ���)gN	rwo>x�xO�զ�LA��E�XT��)c�b%%=����|r4ܺg�W�2۪�8� [(z+��R"��VAT��
+�r�g	���N�]2{�r�r�[�>D�s?<യl�f?����x�eW�d�΂�>I�<S
���L�Y��Z��7��w���úw�#R�.�[���
&���v�NG�$'t�F=�в����ȷ*��ip�:T���w��
����G�3|(�����~�3{��
+�Q�� �QZ(s
/����Q���y��`C{��l>کИ"��!�t�tE
�y�7�/7�Z�-�����s�"��b���S�,=��Z���q�D�_�HQ�c�m�j�LZ
�I�v<m��1�w���
˿�>�(�E�?���R���S�
ԋ�:*F�oq�vR%�努	�
+Go
��Ԩ���(�w
���Z
M5��ڔ�4{T�33����g�$�+��
I�n>��!�������t�X��)�;n�Z
��73ϙ�ߋ�`�u
�
�Q�d�?Ny^���H�Ym����yJ7!k��#�m=VJS�^;
;"�؏�
+�
��.ږ���<�&���\�~?&�~�Q6�*���F�4�\���N�n��,;�XJ�7��l�o�j��I�$ښvE#�Q"�}��Ѕ��e�9/�W�Ģ,����f{�M"�m�ۘ��݄�
+U�-�׈�	
+endstream
+endobj
+4167 0 obj <<
+/Type /FontDescriptor
+/FontName /DENAJR+CMMI5
+/Flags 4
+/FontBBox [37 -250 1349 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 90
+/XHeight 431
+/CharSet (/f/i/j/p/s)
+/FontFile 4166 0 R
+>> endobj
+4168 0 obj <<
+/Length1 1208
+/Length2 7748
+/Length3 0
+/Length 8484      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\��ְip(醡������c�����N�A@�KA�FJZ�C�_��{�>����f>����^��k�MK���*a	1�B
�X9�8��R**
+���O -��
��

q�6s	9�����@.n �/��@
��8y���m܀
R����� ���#P�����\���
�� �ܼ؀��@��3\�� W��Ȓ
��	�[��A�`G �o%G+��_�N�y�\\���
�h2�%-!��^@K��]�����B뿋˺�۫�9�.��Q�+l� ����	'w7�
Pb	rq��T]п�T@�`w���*��ك-$
��A at VN
6���]e�� Ku���
������8���M��������k
M�
�?1u3���k/'��O�?����[��p�qpp>'>���e�_k�8Z@,���@.^>�������//Їv�yA����l���)����� .�ߧ��d��=���ٕ��sL���U�� �]�?$�	d��C\@v�?�
d��C<@�����k�n���k��!A ����7A

�d?�> ��_�����?��;�'�yq���y���y��᳛�_�,g�>�8�A�gǿ����Y��/|��_�l��$糕�}<Wr�7s�K�����/|�t��\�����}'%%!�>
@V.^���8�ϛ���Y����
��y�����l~~
+ �'��cb!
j��^�/S0^���J�Y
:�֐)̶�,�=��i�5��V�-��eڡR%���*Q���W-��9��踌����-�
����=�Pl8}b>���X��D�V����':�F(��y8�
Y���aI��0��)��tvV�
�
�A
+ ?>f]�<� �Y��[D������z�`s�P
�T�k5V��w��U8�u5W�ڊ�T�n>�i�CJQ͚`{x��}j<'Q��
�a���`��
��a���we:��;6�Ҽ[��<{��Ӄ�*�rv��d��F�X*��K�K%E5ǐ�������
�kIYݞ�
�o��O
II�<j_^�	�5���.kϼ���Z��=zv�)X�Kv�b)�r���Hb���ZF����}����3c�a���ڵ�X-6<�
��Ƚ�N�Ԅ{��0�>����k�ԛQOO���+��
��Ǔ��w�7	��\X#8ř��_%H�TH}�^L��
}���z��Ma�*���h�~]���2��Y�7v�B���T�r�۶S��6�������;���T���m}���D�^��[V�x���ۋ�
'h?�d��
��c�g>\��l�
����`�v„�fT}��k!,�k�p����^��#z��e[��
�D:"��Z��]r]<����WZF�UI�� [...]
+8�$��OEp���<����/���hJ:�2JE��Պ=�4�	9	��q2ZjoBU����#��a
{r����Q�̪ۨ
�&f_�X��iK ������]v��FE��� ��bdv�|�
+ �dV���l9�Vtm͒wþl������q�
%�-�B��m&�'n�?���5��D�
~yYe��>jOoH�T�&Ќ��}8@`Pa&�axҵ>�
dTr��Y���=~�!��x^M\�

+����g��j���a���'��_����Cm:�;x�L]�|-�(�z�A7��QO!G)��[��&�
+��KKdIi���WD-Ts/e���p
L_ڱ���{�+XӔ|�&�"Z�|�
[lT	mb��)��;�:�~�����
�}�z�G�k�u��@�� B�^�zq�mjwݼĽn�N��}?չ�� N�
��'H_
+H1�u���	�P�T����n�Ĉ$���g�UDNW֞����'����Ŝ]D�0�U�o$i8
�N�2.~v�իY�)�+���
q�7�[��q.��Qc4	�

�8�i_�g$��q�����xz�KIT.r���ag�榅ƷVA㝺ps���������P�W����4�A����w>��%�u�lo~�1��^7'��PdZ½w���u�A-y)�54��<n��>�Ve����d��Bj���Ԥd�K
d\Ry�?��
+�Sy���{a���<��f��!��6��

x��ef/S3A𸘎�m��I
*�=WW#���N;[�$����G���K��
|&�5�
>[̦��B��n��2��&
���'�*��N��
����p���"�XP8}o��x�-��Q�tR��
+T�B-�;VQ��[�q�{��n~L��c�����ƇF�g>)�<�s����c8Vn��s�c��)�~�D5���x\�+
��
(����C|��ab�$��U[�z�Hٞ�=��O��"��g~��8F,G��d���O�BNj�P��NCʵ���'O�m�JK4���Ҡ8Ү��zM>��^�+
[��13�ZO�MN�Nf�nO=�pR멮��^�䧶�łM�+���u�<O�0^P�%ID
�C�j>����W�
�֠���Ί�a��KR@���&3�G�}��e��}�

e)�����.<�D��EHi@|)���/�@�M9�Y�z̤xy�N�ym��E�)�y�V�ɩb���Q�Ȍ�13��;`\!�㣐��
�.�6��/v@��JoTy�:@��7�
!��(�
�u�+�.
��,4�`�z^��Qv�f��G'#��Ǚ>��l��p��7�c
��ˊ�V��`����a��^#�X��,��w���<{oH�5f�뫽��ƥr��
&{�W��L�>M�_~��y����}�eTa�
+U\
w�m��@a7��7���ZZ#��f�~]��yg�xi��=�i���4�_������u�YFd
�*
��bin�}�
���{�zSVUIz�m�Ȧ;�G�7<�Yc�*%z�+
X;���{��R�&z�(��A��H��Ѹ̲t�P�I��e��ޡ�~g �Z|���z��YaWEJ
���P��V2�/z]�L��h�5�\<^�,�ښ6S���C��Ű�f\��К$4#3�euqke�%ז�A1
Ƭ�-	�w���՝��>����Jf��/vfQ�4q�
��nv͸!4͜�d�]�YC�@o�����g�Sq���0/ 
U�Tz��2!e�N@�Q2]7���sc��I��ߴ��([��8�z�
k�|
+
��$#��"�*C�Z������yV��\G���	�qg3p
q���<em���T=��[�'�|r�fL��t�j*�R[���h�
J�Q�\��C���(z�t0���&��>�R�w��6��k۟�Y��j��#?,�/�oe�儇Q�"�Ύ(���:���^�O���;���l�*l~�_W��unϽS��X �$+�'H�B��5ВR��lg��T#
�V���/��B?{1���WO�J��="���̧(�i'M]����<�py�
I�N�Oq
�~�<]�"�v3���Q�A��
�
+����	�[
��\Npo��ط�� ��f.��C���AC����ø��mk/����O�Չ��强���a1�#�������:���Q�豏�����	Bl'o�r��(���;2�Ȍ:6�:u^4�z��b4V�Չ�Œ
�KYI�b�
�3c�ehTYr��h
��aU�[���eܳ�xq��������}��2���EC�xK�zk�<��d#'�����'9��)�N�lr9N��[�i�Aam�
f���Ķ��	�x�C�|�������<�;k)��Fc�&�R�_�I�>��/L
��F�`e�h,d��.̿����:��4��]>%^
�K4Bg2
�J���
a���0(rK3�˵@HOڙ��v�A,�0H�Ե� ��
G�/$b�nE��
�#��P�1-/�~� �fۛ{�[���\ZW
�w��Njn�n=+Hmࢡq��4F&�k���
�M
+{�i�gy!j$3*qK��iv��[�	�3�P��O�5���(@�lvX���
+���~�)6�I��ʋ?��#x*y�&�k���W^����
�����C�mG�Q�_X�&�\��'Ja�i
ퟒ��x�I�HsX�҅��A?t��2H�4����7�ZK7)V�>�C��6�7'i�5}�u ��i����濥
�x��c�"Ƥ����~��5'۰��=���Rb��9vR:��+�yL3�إ��聐L3~�W�(b��4BOj���	0B8?0�z�cÌ�gٮ����wxke[������c�uwI�=�}E����x=�F,Z�i�'Av�l�⾓�d,�k^��
�A� �+�A�S�ɲQ�ON�;b��
W#�gu�
+�Ju�E�C�
+�%.\�
�ay� �Rk�<g]K��F���C�>� bNZ?C}n�j7/�c�ܨSb���=h���o�J �İ�
��?�\�L��IRR�~'x�]4�7N��[�q@��`'|��b�y�|D��h��2''�p�;@�5� C��$؏s�V��kE~%;H�"v���K���
��i$��T�?]�P��ɇ*CK��O�v�d�NR�O�żT�=N�)�zQ�
>�~�
>@�MV�u�c�f�
"-���y?�ź����܆��[�]��N�_�L��
�ɟ
�8�-w"��A�Lp��Wѳw�"��p�pf$9�8����H�ڽ1(/*gR�
+�S�i���I�R4b�=�\J4�A��l����O��)���lH�6;l��1
 �'?0�)�/�Z��ƙD�Kk�_�s�M?��p(Q
��
�����U|/{14w
����),������R��G�4\����&�WR=G��^�� ]!���<����#��k-��Dznŗ�z��g�"�zv��H�E���l=B�P�;��gG'u,�'��|�j����Z%߮jO����3
����.����3�_���%�W�o
��|uO�C��8J�b�]zU�r[����`�'�/w�h����5
ATя��F/!ܫO�%fӴ�й�曓��bu~�xlC��Y���ɣ
��0
n�T��/_��4Ø���'��? S�~�Jnpʸ�0T�Ȇ~D��(
�E�,;�	�쭜c{��}��]��}$�S{wA6�k�XI��a�l�_KslQm���	��}x��V #�)^#�Z5�,�$�U�ĔL�qC�ꡱ�S�%'�kOr�9������k��4ܲ�Ee��
�6�9|7�E����~�)ܻҰ_e5Cp�	7�t�G��W��e.b
���ɤ��Nh��뇷nY�5��EM�umH�	9���7�fS4f�l���"��nt^�7��q@;I�Ė��z�aT�8c�����
���)�
N�k�2��;�<��T�Ԟ呰� ���
+o�Y��+%A@�
+�>ITNɑ���]ޕ�t��k)�ւА���(���)KMͦ)�.�m���@�#aH5��nO�W�<5k$�
����ƫU��
�7)Vib$s��z���b�4�V�w|y鬫�]��&e�g�7�
+�[7"| ��63��s*g�.�e[@��>T���6�Atq� D�
<����
��ڃ�d�w�� l�}c��Ur���N��79��B�7鹑�lq)
n C��m��ҹ���i�W߈	��ɾ���"b�_���6�m)ñ���[�
+S��F�(_���E�c��_�����!�s������(;R?l��c�
GSd.c{l�R�{��j��[��)����Z�]|
�Ans at r�F{rl²O�G�
Q'�z
EA�K��A����x�3�L�/5?Z��jj�ȓ�<<��S}{K���I�b��]�~v���SB^����(R7Ջ~,Q>��3�'>

 �35�0�x\���D��;�b��3���k�c̵͒4Bw��dDL���/��!b��P�c&��Oa)�����-�;3
��=��G�)������
\�����\�(7嘗�=�w��̸s:}x�(+v�Zj.�5��y
}�y�'D|�����E;(��9��z��#<��T'lCM�����9t
܄�:~�s���i�&
��J&��G��e�䍁x$���Ds���>�v�
�~��x�vw�}>�B6\\��`\���,�Ͷ������5�I�46��D�D��#p�Yy�}�IK��}�GB�,jwI���
��J�������H28'���z�7��=HE=/�m�����1�T�>��;�Y�Z&�(�p�ŗB/���L��~�:g˜���
6���� K�O�T�M7 ���i�g�ƺ��
�u�h"Z?l��)��j��?]������e�~c�7_���ֆ
+�B<[9VR
jI6�(!2�$ݸߔO[P��
 ڇ˗��l�hœ�Ӷ��X͒M����g%/�v
�7cMc
�C}b���O�Ҏ.m +νJ
+>͉�J�2����
+�
)1Ž
V�Қ~#CK�I9�E|;sC��u��j*
^l��.b:̴�!q��z���>���\�k
Y��
�׀v,��'�FA��5���K�[(.�����ng�ҝ�O���4
���줬 n���欼��\WC��

;�cz�� �i)
�M��+tc��ݶ��p񔣟�ݔ�ΒK	��]T�=0�J�j
*�Rג�X_Q��|�`�E?1
ؔ0$2X8��,"��@g�7�&E~��a�5A�R�a6>7,�_Q���a_�[�
�w�+识����?�k� �
+�1�Y��Q
+JDk�9���_jڗ�� ��
�_�o��GvQa���o4�v>�b���6�~Q�y��'�:���p�ؘ4D��M�I����s���`
+��-S���
����,���lt�G�̨ێ�� ���4{�>�	�J�X�
;O
�bQ�7U

���Xg*�,0F���cN������TF�j�5�Ňk�4�g���Ԟ8
(L
��)�����_['��X �w�c� L�+�<�+�@
���:*�+�_j�J=��pB>\����^�'���
73H)X�I�����s���n��4��/�9�׻]�A��>
+?�Q��v�E�ҏM��4�S�ZNFG�� �F��1�}9���ik��o.�s߶��䞣x̆�70 �~���d�d���
+雵��y�R@@|!z��|�pH���1��Tc�\t��luV%����c�t0� ��7?6Ym�;”^
QM��
�2��S��gv���.�;�K�-�Q���|H���
+��Hh�m��wg*�ɾC���%RxD�J���;!~p������j��X����#OBӒt:��X������t�,�k!u�*�jr#�ي�������ƷY!�3�Z�7��g+$Ʀ��Xm٢�dԊv	���	�90ۀ'E�ķ5X���u�w��* ��q�;�HT��@�Jj,���ϩc���=�$�hn�Bڗ�
��>��>�Mn/c��-jvV}'GPz-4=62����OC�Wwls�\޲~Hs������$�F��
-��ߦ��-��
��$�yHpJ�J�mĈq�!E���Q������o���x�J�k�������j��>%%.Y���D��/ҷK�.>������M��|B@�ϣ#�<!�Y|u>Y6dβ���,XK�2�K}H��ӭ����lٽ]���;�B���7������
����.�����XNN�w��F�"�{�Rko���K��
�;�D̡Wl���E�*�L�X8�z?��u|Km�НF�*8֑�Y6�sk����
���2ج� �>�`�˄];�!
���=��efW=�>�z*l���K`y��淋Ho<�5��?�����Y�9�ɪ��Z���Ǯ��m#�F�2�uf�n���+�ߣ���n�r���VC�M���nj��$���@?\�3	k��R�N�W
ʧ��o�L����.��ʱi[>�ExpĩS��t�g��$c<

��h� 4�X� �0�����8�� #Y]�fN��c$ʡ$E}�0 �� {pȖ��(~�#C碏D{�

a:{x�$���zv��
؜���8�q�ؽ�?Z���x�zG�M_+7�U�6G��3x�Ӌg���
+�щ��]�>�[o
X�JU�����]�4�J�2kѳ�0]f
�VlWn�r��4:RX
��a(�b��u�^ߘ�ѺJ>��]F�M�D]}˹H�*�z)�ɉ�0��%�U߯��)AR�i)�l�޼�3�Fo�=����

�vEp���?��t]�9��3����o+m��]��
�H�){Р��/$�'a}���q���N�ô��Ȱ�z�<�}�
Ho�Ð�а��^�Y乓��޹͜,�2�E�J��U���3̧�%���G#�8��] ��m�뒱b�zD�~��+�c�ˍ4L!苑Ӿ�3��|
u"0t��`��d�U�+��Q���􉅁K�P��5.�N�
���o�d
? �:�5-&���l$ٸz�!�"�cӦ"�>)>t+���<i��&{ ��hԀ�ԩϿ�)��Ϣùa�Q0�=�<
M�
�ks��-�1%��c�1���<إ���f�����.����œ�
+endstream
+endobj
+4169 0 obj <<
+/Type /FontDescriptor
+/FontName /PGUTQR+CMMI7
+/Flags 4
+/FontBBox [0 -250 1171 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 81
+/XHeight 431
+/CharSet (/B/K/L/M/N/Q/R/S/T/a/b/c/comma/d/f/greater/h/i/j/k/l/m/n/o/p/q/r/s/slash/t/u/y)
+/FontFile 4168 0 R
+>> endobj
+4170 0 obj <<
+/Length1 791
+/Length2 1710
+/Length3 0
+/Length 2259      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<�kǏ-5�祍'E�Y�Z0e���Bc�1F3�0�FF��-�f';��-�T��(e7�$ǖ-$'�ޡӧ����~���u����޿�Q�e��6!A�Dgj#u�� ����LE� 	L
+D?L`�� �� 
��(] �o��5D��T ,�
���=��V}ͤ��@�H�8���g	T ) 3@0�R��k;|��/��I:0$ Q�L�
$S�0��%��I~�?Z� ×��c�|HD� $������|��֯����Tmm�ZP�hhj������ "�
��VG�;$Q�h�v-�*�hB'SA@�����^���QX ɖ�$z
�/�^�_I��s��L�
;������=[��O�F����p
+��@ �F��c���YG�D�D��
B 
��B��@$@��@ ���p
:��o��
���H�. '����h N�)�( ��_����65�X��(=@�� �@��#я� ������A�'
�,��uCD�p�����d�*Q����
��s�k�35h$��x��
T\��H{QnK%�X�I
�7[��pN�t������
q괫`s��:IZj�8O�O��s}������XO"�������t�.^8��
O,��{4�^e� :L
]iY�6��!^n���%ٯ��u�g�Ź��qBݷޟ2/I�S�o$��On`/
�عuC��*w�Pjs���H��op
��x�{���aAN��T��N��Fֵ�e<I�K5߫��`�+�y��%����PK�����TwȔ�U|Ӿi9޽
�,�
����?y�Y&ߴ��B�����/�
�P�����"�rs��j�pPʸ��g�`�4Dt,6|���cn�˹������w�ń�j��}:ae���x-��#��[���ʷ�E���H\�"/n`T���EԸ�k�j�p=^���Ң���
6X9����Ʊ��Le۫ee�R%��;��I�˟��6�.���*t��
��[�i奧�#ّ�A�;5"�(KwAצ��r'1_Q�e,~!��v���-��\>�h�pX�����JvU
>�Ej�N�\�0:c��a��*��l^�Qq�ݳ�}V�>�����^���~��S��j�Rt��Y���[t�'ob�%��[5�)`��#�sDR|,MC��Y�>D�"0�
�|9����)�Z��c&��a����C!��p>Y\s�����mQ����0��NQ��R�k���=}���k��~:'YgZ�=8[Si�&Q���R��
iN9G�j'��x����O�������9
b!ٴ+kdo9
�fZQ���

+y��$��q��iG���Q������70��J���"ù�&��N;B�L���o>���WoK�)�
�~�b�x�
�8c��/�n����O[�`8���I��PeFR���%�mwaPS}kS�
�*��{E�QiS����.ܦ-���G�@�xɁ���
�
+L?���x��%�ί����[�5 �ͤ�b>�&�;�O	fY/
+ �t�>�5~�A��>����pml]���n���.
+Hy��lW�-��1Ϡ<g������u�F�J��
�4ڹ=V
Ȯ����5ħ���j�8�dٔ¶kY
�.�G9��*�qC�F��ɪ	����3Eh9���R�� �������L}-#)Zr���GY���6S�/�K�ћ���b�����7�_�=�e|Z$&N$4���̕:����0������=
������ӆ:�x��
^F��c�'ShV�bqs�X��H"Fru���А���2����	�	 ���&������p~ߣyq?=�������NJA��'f������
�@���o�e�R��:i|cb��q} ��*��(!ܱ{�~�yǥ���evGO�fel��gm�L<��Ŵ\Q2� [z,��$�`����
+=j���rTT��,�{

+��V�y2���:Z�}n�*q����g�Y�oe��*����Zu���	ըV=fI�t��
+[�{S�n2�/�%t�KfB����:ֆì�i�3O�?��e����ծ��5!%O��i���
+
`���Ճwcu��g���8�Sȃ�gC�/G�i�v�Y���5�!3��"�uf�Q��F�v�Wm�9��!BZ�_��0�����;��pZnp%�u[L���pdl~cL
'�6.�OM�e�@��lVL�k):�� �3^v��K�����L��j��3�Rr�D:;Y�i9���1���`^q
+endstream
+endobj
+4171 0 obj <<
+/Type /FontDescriptor
+/FontName /QAOOYC+CMMI8
+/Flags 4
+/FontBBox [-24 -250 1110 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 78
+/XHeight 431
+/CharSet (/g/i/p/t)
+/FontFile 4170 0 R
+>> endobj
+4172 0 obj <<
+/Length1 2232
+/Length2 16298
+/Length3 0
+/Length 17501     
+/Filter /FlateDecode
+>>
+stream
+xڬ�eT\ݲ��kp
�hp
�������%Hpw
�ܝ�n������M�y�~�
��j֬��f͵��DQ�^���(no�B����
�Sff0301	#PP�8�\,��D�\�� f..�8����fc�fcA� ��;x:Y�[� �D��q� ��,M�� rF.@[P
#����%�œ dcP�g�3@�
tr�2 03L-M\ �@sK;�$Iٙ�8�m6uu��%7��3H��_2� ���v6� S���=(���Y�7��������?��i���ldki��?���.@'���)�����j ��Mhj�j�W�\�l,M���m� ��,��-=����.& 3#g��@;��+ԹI`�����Р����kM����E���?Q�q�3�3�;N�
 
&P{�A�������r�ٙ؛ZڙX��FNNF�����`ig
+�  =@���]@[ ������9Pv6 ��?�;�Q��8 �"��	`�1� h�b��`�q0��	�-�N, F�w�
`�z'V ��;��ɼH��;��ɽH��;��(��8AZ�	�E�@Z��	�E�@ZT�	�E�@Z��	�E�@Z4�	�E�?�Ң�N�}�
�
�gd� �ZF���_++H��3h�-���7�\��	T�����5��h��n������@�L�	T��������
hX����abo����򏣽��df&P=�Z�Y@�Z��Ζ���A�3�w121ڹ�����
�P��df�ښ9[�e��o������
+z������
Af!�?h�WL�#����]�?���l��ۻ:��
�`��⿫co��`���d�+?�t���C�t
�::�� 
H�����_��
z�0�#(����_����w}�x���

+��

+�`�����be����gP.����1����fi��D���`���WN���}^@
+
]�]���6���3�������?+�mf���:)fP��Ӳ�69m-�{������u^l� Ζ��T����%3����l���X8��nP]���� ������/)s�k at A�=�BPxϿ�.�wq�H^@����J���
��, ��L��_. ;��y��:����_/}�e�_6��
+�@�	�Ҽ�	O�UJcH��X��Rhpa�8�����/���6�#2�4뵚�e��{�{������>J��灎q�s�{n�{�^-��W�r��
H�|9Fik��9aW�^-I�*�Ϻ8�U�U݇]%��q���f��O�Q
�ZK��D5ձ$�5t�
5)jm�U(\3�ʥ}�+�c>���W�?X�h&�ğ��i0��N�
BQQj����3 �*N�=�e8��/�!UY^xbS8barn�t-�$/�z녻�i
,
+�0]$�ۗGz��z=$�s��$��o���$��F��RkC� �X��h��g���bF��T��C uHz�vL��-tF��A}��~�S0FD��U<���n ���S�qb$�����d����V��RF�{��S���@_C��2YT.�Pi��
�
L��`3×���F�	��m���ķW	S�,/�����VO�N^��_=����Z�p�5�d��S�ޗ���b
+[���f3{G~��aָ�]�(0D��
�#�3�^k"ލ/2�4F��CB'� 
�[$��t
+���	�q��*Q� H=�o��@CI�H�
x	�)����
+Œ�����ٰ�BS�M�
/��
7˱y��b�Q�e�O��X�T�Xb$
j�����Pk%T�Aƙj��7�68N\��f;���nԸI��3���R��Q�R���
�r�e0����.S����'g�߭�L-��,V��
+
\�afi�p�d�OD;mK���_X�ْuML=I�"�,O��h	�*l<Uæ��

a�Wt���?Ԛ�c�w4�V�W�w����^
�a�L{Eqn���*��
���'���
pͰ�5�^D�3b]�{�uz �9h�xv1�a�
���|�g�9
ƽԶi�Q).6�ҽ#*���旦���o�G�Q��Oh�8�2���7�υ�� ~��������5�*��;���u��kt-ն̤E
"*г���	�/��S�ǧo��2��Ξ�ƯG��CE$=�V�?�Z�� �_
)�['o��H��I/����L}q��FY�yRh_��6��H�!��]� 5^��
+)�%�'Q�IB�c[
�T�č�gB���k at a*w��k���9\�F��۩�z�@XQ҆4�����_�"

�}r9�
���=�f��s�M�k9H6�)rvex��`T��7lwř	�r��:�>
A�^�0r�(Ζ�!HGT��Gh����l�<~O$ː��ƪ
;�J{	�d�O�
��l����-� �#�\H��CF�m�J�/;=j�FXT�`T�L,
+Ru
n
"�
&�̤�&e�<g�H��
¦�|x������7�c�h����`d߿����� Í�H3���l����m�R蹵��	����V�n
̢ؑ�ű��6B�5ej
w
�P� 2iy��� �~c	[z��@��P��&`�����M�����B�f2����ha4�N��/̿��z~m�e�U�I��h.��h69=�S�b�J{N���O	o
�R�%��Vc��Y��}�
I���[1Xjy%Ex�D������1�R�Z
^q�����Sl�8K�o��aH
+�w����ڄ}�ưAcY˃h�X
.�����|���<�߽�-
(4Lיqh�ܙ<� E��;<_��&�Q�}
�+E\�==h[��wUܯ26��5���`�?
t�����T���mx0�lv#��
n��:��eƭ��E������Og2
扖R�6A~�����?�������ɻ�P���e=g	+��c�:t%L!���$�C���[w9�;�N��)7e+�Ӟ����Z��f���R����j�Y��8(�~p���;��ܔ�����,��G�"�Q�=j:���X�
3���$N���}���r�]R�e�(A$�e%�
+���-.C9��-W�@ >45B��Ӏ�a':z�
���^
P���eE-��z@��'!�x�v�W����7�k/Nc+N=��̸����4�3d�뵏Q�)u�9�h9=	�G��MP��!|Y��K*�,��>�.Y�Z.u�TMn��Ca����d�c�v)a	\#�w:m�7K�v�#Zw�E�kb�Ϣ6,x�"}�4Op����xԵ�|m��~���m�}c��##S��R�$Of����� �����I��oK���@.;9T�����J%b;��}C�,�Ŕ3U_�Ylƴ�'jH%ʾ��[aט�+�<l��W
��
+�>�bM�\��
�%4��
)Oe�����4
H.cӺM�VWk�j�X���Ǒ��ND��۬u�+ߌ
`w
�*a
�CeW����$&�s��7���^�QT�P����QCt�$��UqD����a1�n�
5�1�h�삊.C���3�p�XUDk��a&�)�P
�M�f��Z��f|$3�7`}M.�
VY�W��Z�v��G\ǹGw�ט<����
�s����j��to� ��y���[|��
�2�UtG)�̞���@h�;�5
+J�V��V��[�ˬƷ��
O№�D+�M)/��*������.H<2�}�o�pV<^p��d���mD�$}J�e.U��4%#��)&�䈁
�d�}yz�1	��#k�Qz@ɞ3�̰&�ؒ
j2�?�'2^O�=qVf�"c˕0�����n��VC��	�2ӝ1=mYumґ��B�
\�-p�h��%e䑫9��bbYQ:P�$�2[w�Hn
?��_{�sDW��[���6X�
��@�h�1��]\�AE�|2K���,ރ�R�/�X�J^#�uLO�}�ѨM%g�8��
_����7�(1
��C߱B)�㋊�G�!1����{� �< aR��7��Ƶ�Ce���q�*�fʼn��z�:�
p*�i�B��g�E�Zq�%v�N9�c�'�.�<���7=��k�,=J���UD�*zs)�c
sT��Q
����J�F�#>�D
�*�|3Jܧ�#uz�qY�n�ڮt�0C��
�±W �L�ˆOѫ����
�+nHP�nx�-�H�JL��)t�x�ɘ��Ԃ�I�~�!?�x�BD*�/�����
+�Ĩy
!nȲ��-N�T�k ��:�`F�� �)1��*�o���0�y�;�F�|�\�ՌQ��c�
`2B{֙�
+B���[/���2X�M��W�4���d�&�fc��YW1��5�jB�򜕘��i����h�D���$6��e
��^<�٨�X��|r`DV<�Un�y2�I8䟕���e��
�U)��f1j����B�z����ne)a_/e��c<���:��Er簮�s ��o�>�P�6���ۦ
�[e�
>l�ML(}�k�m|7=���)v�P�E�yJ�G���7%;v��+���}�l?���	����_�g+LFc/!��ĺ
�
+>���h� ��U��w>��$����~��w�-}W����
���Z�K���{�q^g�׶��cn�X���;�(V���u��g�/��7��+\��~��$�^�p����eqa+=3�O�#����{���B�󹲷����66k!�#�J}�҃��yx_���XkS%��5�w��bE��V$^/Q�4
/u�Q��*m��GV�Q8}�M>�TX7P
��o���˺{3


̥4�8�7m��]j9��&-�X?
!Z{2�����
���i����/���-�<�8x��Rs��Ͱ�q
U��FC��(�7�j�+k���w��;*�����2%���3jP��a��A�h�%�4�U�l
y�Xٱ~�/��5XXC;��۽k���΅xz���In RH@��
������-�&<
STxk�^���RۚJpnT����W��5�[�z�r��V��i$�57�''{����݋6,//�.�������^�2�Վ_7��?�aX����&��
�r��-�V��~M
ǚ�ޜ$# ]���� ��E�jl<�M��]��y>m��)��i?�GKg��g?��!2�KT[�
�+gL}p��ԟ�w�2��4_��b�갢�!Ef���R�~�+�{&��7�]�`"* ��O�)?��xA���v���HcO�`���F@����K���n���
�Q�d(�҆�_'�R͢�����Ğ��G5�J"���/65\qb:IeU|�~asZL��B��<�;��
\�"+��h��>H}��
�t=���̠.�w ��Z��A%�r�Ú��S
y�ݔ����^\�i e
����j���ٱH��jᎊ���L׼PaD�3��� �}���W�����bT��}8$?	GrևW��x���+=">a�y���?�o�0R �)O8i����)N�"�
����!��
+qߒ�a�������һڪ�+��/:�\K
X�5�;1�e���u
+�r�	�PO��?
���;$]
j��sm��X|a����C�&�Kړ��h��+�ca�8~�3�gi<Q ��A���P����%$�#B�Π�ф�nC�
xLId���6wWNYlj��1-�~]���&!
+�N�p*V��h�B=�p���S#p�I�b�a��~����W!D�	o<�y;��0��P�4ո�K��m�G�>�RK��pd�( `_�l��k[tI��Pj��b
a���
�{��6��.�vNJK��N��,�U�=�?�������B�Un�D]\U\m��fi�h�I9�S>�i�
&O#�xRQ�8!A�y��C߀�a���E�
MK8ƙc��A�PX�����<���B8��?�BA`@�k�1�C��K�܆3��x��^0��� Y�Ƃ�UY�el�9
��^j^�����)#��6YV����l��>�v!�SC�
�cF8����\��%M<<���o�
�i����X�d�Y�C�7\�2
��R���8���GT��X<�a1�^~�}k��E?��|��1̻��neLn� �[�p���
�W

�㓊����g�1 �Ml
I�B ;�,r<U�<�n�(���qN���I`��ͳW��΢��u��tq����a�!~�F�CS���uH��Kv� ��UY5�
�6����޵͸gٙr
ERA
9�,(\$�����	j�/
]�������Ub�ծq��f>T�l�E��˔O�9��=2�3$paI��g��_���
 ��j
��,'�sn�{N���.a�X���s"u�����hF|zȁ|��B��J�	ͺ.
m����Ԧ,K�<�۽�J���a"�Z�A
f�7�J
+X�t"A�G
����)w�..(�!�(1
����;C���M"mF�J���
<�3":V�}��|՚;�
�����Mb��m�q;U��z
��o��
{B��R�~Y_�-aB�BD'V�jD��
��`�sN�
�g��;_*M���,��y�ڮ�V��M�ڔb:��~���`[��ųN��8����_��Hg��M9[��MO�
��ґډK؏�-�G`H���-@쐁c�e1��Qԧtp�^ٺv�=ч�4���*JPRG(��F펠Q����R
�>m�Z;vO�c‹Ȫx�
_{��G��6�Q@��9�
+�e�^�T��z>dIA�s���HT�
+=n�ܠ�#G�y�����@�����N��Y��XmR���7��ޔ��X6g�9�"�Ee6/YË8��
�n�w��F��"6�cy
�p�v�~_"�µβΕ��H�KHN�ur�K"��[��[�5t�FF�!ﵢ��
_���
��l�o��ܮz��,s!���_c�J��u6�L��4��EؓBݟ.*	8s޶P_θ��<��3�)k%�� 1#�|�_��0��
m�8�YR��j���2x�ި`�T��ũ0핻��
2����M��=�77�-)�Q]��L;5�V1�������m��,���w���B-V&"��T��W�Ry>	��N�~�"ŕ�i�G��Hu9�x�:9��G�v����~n�+~n�Y=��w5Zo�����\t��I?�%1{��s����D�ـ(��"RcQK�݈��!�����!��Z���0Xnq$:���A�
�Z��mc5�TWT
v5�U}oX�

!���)&�#
h�깣ů�b`�2�/��S�\ ��v�����o) ���
+
�~��)�N
��u�}sc��O���U㿴
��X����NbtQB�2
��#o���0�
+w�+bRt�{�V�7-B��ų�/�z�r m=K�\�w����䫇Lr�J��iI�9IB��2�$3T0v���%�\d3�W
���2Rq�2�R�B;ɀ���Ԅ�|Pw�C�;��`V'QxA��Tv
+41qɥr�ʓ��x�ď�>I`���Q�,�OtP��l�����k��g���
7/n�hٱ�lyR򧋎yf��4 #�k�F�
T�oP�I:T��W��Zž��6*�d�����?TF?�?������c�A�C�%���jԼzc~@�S���
�Ȏ-
:��q��k�Ꮺ��l��������Qg*�|��wd�t�W�L�R��?�]4v9�D�y�W
ҁ�[
7�\���!�^�Aa����H)-�,�8��rkb�桚/���5^�g�od&��x[�t�����D��If
+���.w����Q���8�7^�5j�B
B��R*dw춵�wH�
nડ
+�Ґ�
��m)w!k�kC��A7��@�U��d�;�єw�
	�
t�3W�%s&\�G��܄ŵ��
��X�/��:

ߥ
�6
�+�-�)���4x�!V�<�!��R��

׬�[?PD��
��E�MYϐ	��y�/9:_�B 4�
`��A,k�&j�j�?���W"ڑ�Z�W|ʑ�:��)��+�R� �/��9�����p��
螢��K�\�@�
�������ծ�!��`�ҹn�pD
'���_�t�,Dj0)B�*�}��� )� q(y�d��4)�J�N
LgI�g�}W�o��I�O�R`zȔ�l]�m
)���H�;=l�|��o섓�|�.\���-�C��R5�tgȝ~Y}���R��*[Ǥw�!a�)
�zA�:�\C
�;\��J
+e��x���fS��P
Z�`����1zAv�x�d����q��)
ܭDŽr�@չ��Bz
u�m
�M�n^_�4�ю=�Dž3���g�M�gY�b���(�h��(H������[��#��/�"�qO�1#�DPˀu����׈w�{0�LR_F���N�?UK�t�l7�i��ecq����~�<��eG
���<�����z�����0�v[�Y�D at Tz�B�W8���e���0��7
+�1
�g@{Kmi�b���ON���_�m\j�\ފ��OKϾ�
��ر0��P�ַfw�@d�7�Re���iD
$�^���[��%�Blp��� ���y|�M�
+��P
�I��s�ץ���Ӗ�#t;eS�?*J f�
�>��d6QPY��Q
�B��jʖ�jJv�(o�c+Y���P�fr��f�ҍ�� #V�_�ao_���T��Ĺ�A���
�-�����2}g	�� e��.@�A^
�!p.B`���1D$��'�<�t�\�
��A
+V
+�M��W~�۱�%w���
k�Y���	�1�.��;�l�Bz�^29
�'}�U�u��E��Wv}��ocs�c
�@g��T�#ƅ�L�h���Pb(����
��
J=h`r^H��
+�3C5�H)�K'��
��β�Z{�JBt�j���ڹAz�M�IW�A���Z9D
���n�
�C���6y��
+
s�bc��F���������`l.����q�P޲�
�eN�e��d�tvƟ,C��qD���o�Z�y� ��V��b�DNS�3ae��<�o�z]�)��E�h ��i�䀋�
i�["�	sg尽�b�(�=�-�eE��c,�C
�^^NL�wn"Z�<<R�@��P%̶x�>A�5���u��0�U��e����
E%LF�.���[�g*�3u�8�w���ii
�Ȫ��c2�yk�
+OTU�Q�Y���.�!���t�$��y|k�lj�㺮v@��`������o~��� �çO�z,5΋A�-U�����-���p�:�:��o
�ԗP��y�z�?c�w
nl)�%��ݕ�=oA`�$	�ZJ.rQw�U�V��G|����س��n�,bBj
�NKWZ�C��V����� iʦ�PhȽj��.�NrX*���+���
�z�brlV����+neɍ�ޣ��E�`W
ߧ�!	�]�
�_��Bq{9=
�dmߦ���n�TZ,�3��G��l4����hG�[��;�=1й�W�@�C�A<cN���Ů���|쥇"��k�3����w�q���ݿ�D�
�����R�%��q~z,F>y�r��})�4\��ڕ_�n��U�������ٯw��������IX�k��|2�
.��ȥ	A��Q�lc�	?ᠼPۿ�2�=**h`=e:��
��ڀES��
Fu����h%5��
D~�m!��Iɢ�rw������x���r
xL�+Ky|�B`�yط\
�ň
>�K�~
�/�O�C?�w���BI�@??�O��1�"��~�_#;
a�t
�v�GCI�g�$����
+���I|��NZ�eJ��w�3�|�oq��u_�j/~���c�̭}�{�`� pW�/d�g�]
�����GI��m��'mC�?3�R�\��������
ή#�a]��ˌ�s�
+��~�R-������9Rױ�у_�
��=�'U��x�`�l����)��vTģ=w��nƧ
M�[�
�*�o�d�.��_�4Rh���Ff�^�żJ�R�6�7VЅLn~g��
��[�?��|���(1gjҘ�N�p1Δ�Z��v閗�z�
�@u�<+ᜲ*�0R���q�9J�hq*@�Q6q���6Xv7�H��n��@����-(lCy?���N׆xB�Y�[��GR|���i�:mݯӏ�1�?�Z���{���*��
#��֊��"�\�%�]M��>�]�|���.L�� ��\0S�5�
+m̷�i��H2Bp��a��]J:�H_�S�
���7��1�pLf��:��`����&Mr�G�
Q��� 9���j����N��21`��v�Ǡڥ��Bo�}�I�1�Nv�J�
+��<��$d唄�ˍ���S

+w�˅r_�n����>q��n���V�w��ۚ�����]S�O�	�6;���`S����!
�,�ŹP�����kgx��(G/:t��G���^��!*��
+2��ג�
+�8W� �d�|�WF�5��!�*��y�<�2��
�Ⱥ�_���9$6��?�
���}2Jj�e�`��>nNldq@s�=
�w����3��h���8;��}~��
�~j�{VE�#��-���Pգ��\U�cN�"��ȃ�߿H�u�)�>y0P�'�"X"��2���pc *�7$Z�o��lo˽�~���0��?�zL�n
+ �dž���8�W$E
n��4�%X`�͟.�
�`6��H>вN�&�M�=�ET;3�r��D���E
�+���:yh��Pa���1Z����H����
R����h�.P�'W:��p�w���s�0e��>��*�"r�N
�_�'1w �y��q�N���W^��]�ңȤ�.Nէo�ǂ�G/���Ed)S�`��{���yȖ	e�����\��>̤Q�o��%���M�
���
�:7CJ�+X,��/1>��\s��y����~(<�W��]�vb�	U��J*ށ�5�T�+5�;�[`Z�
�(��n�կyQ�ƿ�==�u��T����V�C`���O�s���Cײ�+E��?����}�C�X�1��!�i�-Aʒ���$v��	
�;���J��ҹ%MgƦ�?���d��&l�4:����n�
��!L�U2s#���(�H�-{�_�jU�BI�����>j�O�=&^<�C6���*�����;q6�ð�i�><r
+�i<���d"z�c�t�6j�z��l�Z��
+�O���X���\3��R��ڐ�6KV�z m�h�V\��Ϊ���(��� ��P
����2�l��
!�
+D�e)6Y�̑n������y���
Чe�B��dS�}#�8bǡ��:*V=w`���_r��Z��x��X�{:��-h7�d���_���Kc�Ι.�7
�{%t\�ziN�zw�v�4���\�,ᮽ(�VW��5�9�7h���]G����ū��j�*~�4���,7�Et��YT�:f����q�kQ&4�&�����:+}
*�S��d��3�y�D���vrǨ�C�q3G(v�3�`��Z�p��xe�@�w�h�]�0e����I�
+�����d�~6��xN��Q sN�A�
2��6е�r)��_�Վt
���-̣j���S%1"C9������ˇq鮁�qJ����%����_�n�D򇖎�,��n��GzÁt��㻖b�Y���Wɣ�[#?&�qN��}�K���<���{� ,���
+���IL�Drz���l�ep��J�%�[g�
�G�WC�k"^^�Yg5ŧ�[��1}>��y��V<Y1�Ck����{JH��
�{0�R�
v����!>ȭ�
)�>�9m��kx.�g��g���[9���|�llX9���G�1V�
{�_a�O�i��e�
iw�_�C笐�`��)�oN~'e��Ie,4��
zP�([q�qHEoS�G��Z ^
+o��	��ay�P��ψz�2>l'��K?��|��m}��K+xN��fc?di[9Qҝ��

+�^w��T+�(��������B��Q�I��~:=L.��g�
+�u�
ދ��~�͑ty�s�N�M�T����o�#�	�
+�Op��v$�k�p�,j�`~�jXA��Ҩq���#	����e&��,+x� c��	�
,�ͧm2�{U��
Ď�\�g➳͝�Cـ�����#��b?�F��CA�ӟ��M����H �m:��Y
��ҹ��i�q��U�
+�SAs
����J��
Y� �ݮ���|�Y�!�v
5Yq�"E�K*/5�c8�G��q}��Ӑ2�_�;������4�?O:�<��zf�������b�O�2��C�����B��
7��? �`�]g�,��0��r����)Z�ġ�a�/���gޢ�VGַo'�k_�I[?H5L��
�X��9�E�'��1ۙ�r�l�

+0��TN������7���D�4\?1vW��+DW��!G�)�8$&K�ϴ~b�GQ�-�0c�'뭔�:�zǷP������N�8��}+�H�
��\���sY8�ڠ"VX?������a
��u �^z	
|FH��:�Jf�cz�h��!��Aӹ��
�C�(
C#��Ԧ�I��*�����79��A[�q��$�_Z�kB!Eg8��&����tu�
g��
�pu��h�G
�>1�=,����z�EO�u�}g�|,�ˠ���XA̝Q}��X�
�}�u�긂������T^fhhu��6?��i��}
+z�L������T�̿R�޵�DՇ6w�չ���.[��;<5�Vo5
6=��ڬ��'|m|�P�F�����f=�wWNg�ʧ�p���/���_���������y�J��p�cx�\�
��6�$u(;}؛#>ΫY�}��o�:pK��%�X�HAB�\lY��ٺ�'��o��g+�x.l�/�rd�<�$���	��o�\��y���	�1�����f}���羡|B_>2��a��K�`c�?��>g T�b

�G��8�j��!k3��0Б��[
4�a
+~ ��>p;]�{�m]lף�����
W�����?
?���w���s�)3���b�ٚ�|�o�<�)����c*?�X��S���и�V��r]��X
�sEO��W�RԼ"�n�t5|�8�
�䚣�f!��vٮ�v����l.����ۚFM����U�ۤ��E:��/�ߝ��۲��
2(x9
�<�Q�ׄ����������T
~��6�����0����X�)cE6囦5$8 �ј(�ם�r"�]O���BXG�e�{T�?=��m3�DopJD�CH�П/DŽ��Hl�2F��"�S��*�lٙ���8:���"2�
�cj�h�%���
+.�Jć�G�G�`��a��떹 
+=o�7Z0^`�]r*�Wٙ⏛#�ۆ����0�H��Jל���U.�߿ȴ��?1�z�36�ە��E��B��x�;"O�~ϔ*�ߦ57z\�(O�]���9�NӺ��
p�.���P�@�`��d:��o׶#�a�+J�#�s^�%����Hni��\iz=�z7��.|�	��#�믴�r@���U��Տ����c*�i��ѝ�m�
�^����!�G��
+�}_�m�
i��s(��`�
+l�*�
VB�<�d��u���U�%���M��-b֯@C�!�f|�zn�W���
�̡,@�Da��
id�>
�2&w+��ܸ+�$�}�9b2��F)o�n�D�˭�l���� f�#j��c�\���WA^ƒ4@�K��|��")|�w^�u!H*}�JG�n\K3УhV�ޥ&eo�D�1�r�c<��
�P���t5N���(���H5�8�/�9�d�V����1����F�k�E���p>����ƽG�"���O�&~�T7|%����5��=;=qZ��i��
+����+�Ě]Y�;���?�uL%W��x����
�%�5�>
���|X��T������
�k�&e.߁�`�B3k���㽔
+�8��|�Es�����ǧ�IJj�u
+��a=̄N��k�f
0Me8�
Wm��iW��Fə����ӯBͣ�F�4[/p�CW���-�;gk�v�Hc�hu��k��b8�r�8�$lұ�;�3�:
�M⹂���x��g��$~���|۠�|	�G�R���F�1�⸫�XuS6�Κʎ�o/�FRU-�;�	�7_p�:��QZ�a ��\��a�oT�M�eXlu<���D���\���x�R˨X��?��I����/7/&E4�ԙD�`��IR�b��/��OlO=Cw!�J'��r�aЈzΈ����K�c}�
1�����փ'�8]�l���e
��y���/{(
|�Cc"ü�
IvO�������)�
��7��B���G��)��+6��{|(��~����h�&e���|�&�s@
+#R;�Y���g�Ċ‹t[�2�T���QN�(O��y��P~9��1���@h�^Ju<��^�[���W�!IMe�
zm���
����:���)�D�*軂�n��A�d�T3��y֡q&�0�Br,�(����`Cu#
+�<l��e��bw����w�
.
O�
+H�dmv�w23�wY�]=�oJ�	"�t�x�V�h�*���E���SgR~-kH�`�
���r�i�b
7���ݖΠQ
�v���������q����H�[����Y���
��q��� {CE嗦���r�����0��i%g+�2��H\_t�A���07<6�n�����7H�����$�zա���#�����H�X1�q^�
;����P��n�Bd��"6���:��b���s�w��l�0k�����G��j�I(�J6���b8�o{�l�
m��4c�Q2�`vHo��F�畃�C

�4ҦYpg�E�=��P��ژ1� ~
���I$���G)&��-!;/���������-�_�;�3侇�e�
��{�
�x/�a�#�t/?R™�]�M7ƨ���D)$�HE�
i����E���f��ߒ���w�� �VSj�ӷ`�U����ƌhg2[
+<^�ɢK&�q4&�
�k4[��fA�Ɉ�=�h���a_j�
UZ�Y�ȓ'���ݏ;�7���&�ܚO0n,H�K"�-͓��ǐ�M;��'�T��u|�g�>+Bb�M]�2;���PH���Lj�ϭD�X�b�Ŋ� �ҹ�vwf6�F+�RX},��
i�F�	�śӻ�z=D�w.�Q��@�kZ
���?�k�n����7	),O]
+���G��WV��F�
[�7
)JN�U����`"�E��7꾰��eA����ŭ�t�
����`��
+����%�M�����S��x�c�
n�"ա���,Y�^ûz�˪%�A�p�E��8<�o����,x7D�a�a�O}#��9����g���k{�ͺ
RQ��0f��2z�
_�;{��8��T-�HɧC��H�
++�\����s�2~]�֋�����su�u�,�#��|<;���
~��u4g�`�A?��=����b���(�_�K��<�R���k�%��W����>�(/D���a�ĩ�,�
ȡs�)W�}�C����S>0v0.k���4
+��iM�rqO�|z�����'��O��S$֝G5�a8S:Wrt"O8}�!�\�y��A�
�-q��N/��[�����|n��K$
-!��d� ��/Jz�I��<�O�b����}�=�-}W4�pnD�9�z�u���5ʎ�(���������򚈔��T�����3d���`f�[�g\�5��h��Կ���(�Պ(h%ڵ�P��f��V��XzQ��9�}iH�K]Kq~و��������C�W͟���l{
+E�pC:f�߃��r9�,P��n��Xį��v�4�,hX��o��5(l)�>���R0����_f"�w�[��J��e
�q7>g�nu��s?��i���������G
_�p9��"����B� �����v��Mm��[�0��^'�{��	6k��2^�F.m��Okp�~VV�_�o�m:f��ڱy&@
+���L�
�܎�m����
��6�i���0Q}i?e9�-��ӝ�5(wL�4�O^���7��>��˞�\Bt)Kbv�

�蘨H�G8�[��#�:���F����]�̄�7G���pnQ��\�����y�Uy���4hJ�h�ü�;FF������Џm��������Opu%�|�
_=
P
+��.��EDY;�rtQ�
�V���F�(X+�(R=(�F�ྮ{N�}5���='��SE���wq��a� %Y*�9|�F}RCe������Q
�t�F��L]M6O�c��������ɒX�2��E�
+3���&V�aZțq�m�Ž;e�W�r�P&d.n��)8.娘[���/YА��7�٩�F*ܱ��u�و�jTG�r�)����Cp�S�z�I��F��^ �7!-R�	^ƞZ����a�D�p+K��(� {�%羾�
�&�}�T�)��@�#�&���%�=��M��ڴr
86��<�G4����~�w�
�[��(;?Eg�MB�aa���w3�2�A�,�"$�
����:d�<��$��/k>����
)T�$~Ԫ�xO������ϦVv^u�k5���~1�N5�gM�b�-R�6��/�X�2L9���Sk��Q_���o�.�m�E��xA��Y&�x�Vze�:y���Nc!=
��R���A�1�Fy�ɍ��K� �
���u�Tu���q��꾈ga>��w!�l���E(|��h�;کO�Y��{��S����Ztwk��T1��vB�8��ΛwK�YS���<���>���R.b?=��R�a�1����K��d�Ρ������l��]�{���*z�
�����M�d���t�á�B�S��0�mb����N�:�̦
�	�cz�1��d��l�mS�8_!�]��~P���M�>���ʳE
�z��=�R�-�Zm֦�A���t�e�++;HB`һ��\L~�����Jg�\������4��Z��
�s��@d��3����
���!�'s��I�$r��o=����
h�k
65�]i��\��siQn�V1�
S�t�U�M��ʱ��WF7H~�+�`�^F�W6?�`<��@�[�[fw�h�.��4�{~��R?\d�X���f !����e���\t�
9j��/P'��V���9���:8R�����2�ھ�m�ڽBP�.px���$���
V��[P����<�,��-̩
>G�9 朤k�HR'Эk�B	�@g2_pc)�5=H4�)W���� �O&�YN2��U�q" "�B��b��M�pѲ�!�l�|Oʱ �	 E��Y���q���H�6��B�?y�Lc/yA�}�(��axu%��h�d+�}r��V$YcA�q����R�𤿙nM�P-��mk�g&�M��P
�L��$;W�Y�F���Էޖ^p�NuƏ��
édS�~�})J��9[������S����#�t�p,İY(�h2��a=�R��
�D�����%�� ��w�պ������Q�8� Jm
)���ާ���wN|f����ub�<�����%uѢ_h+�Y�R��C?sɂ^4ٚ3fɱe���/*$2��G>��� ��@��v��	0
8r�Ɯ

�-8A��E�u��1�>�⴪�56�����p��rӴ��[�e۸��Mk1��(��!�:׎�sI
+endstream
+endobj
+4173 0 obj <<
+/Type /FontDescriptor
+/FontName /LNGZWW+CMR10
+/Flags 4
+/FontBBox [-251 -250 1009 969]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/Delta/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/bracketleft/bracketright/c/circumflex/colon/comma/d/dieresis/dotaccent/e/eight/emdash/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/macron/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 4172 0 R
+>> endobj
+4174 0 obj <<
+/Length1 1180
+/Length2 5574
+/Length3 0
+/Length 6308      
+/Filter /FlateDecode
+>>
+stream
+xڭ�gTS[��)����HK��{�"ґ�@!	�# ���"M��4�
D��ҋ�H�9���x���ޱ��g�s�����
#�b�$�����0hW� H
+��k ��\\�88��A�@\�R ��$��f@bR"R at 0@���!���{ʼ���8$��B\p'|(x��"�^� E
+`�����s��)@  
	u���h
+�?
i��0 �an��H�p�
��
�$/ o�A�� 0�
��
_
�w��a�����P(=����h��'$��0NX7W8����q������
�!ݜ��j�BPH�"�
 �ZB��!=�0}�+���\���Ѱ����O
Bڪ:��|�矚>�v5�������?����!=@A ��?�y��W-U4C��@p8�~2�<�h� ��Dc\�[ ����08�?�S

R�c�/)�M�� !��$��M�HݿIi�D B�~���߄�!�o� ��M�� !(���B�  �����S ~'ėFxap�?"�k� ��(	r�� |��{E�"
���?6�����ŏ7��Ax?� ���o�x�Ϳe|�߇㋻z`�!�{���
޹7
����󧤄�|" "
+�� �����'���Ѯ~��!��!�#�{¡���s����?���R���J�ob�jZ�Z(�M��^�i;ߟ�6=-K���J�z���%�����n�sL��Ū��j�w��~���
+����uS���o`���K�
+:3���r���]��F�f�^ۖ�\L�T-
eT�-�f@��\*2�A�wen���C�[���f���d9��6>*X���D�O"&�PHx���݈���Ƴ��
!��z��'ٌx���[����>��~���?���x
V�e�|f�3k��4�	��ϡ��5��M������:�{8������P��]�qR]�B�2��rm�,:E��c�
��c.��q8mFEF*}X�W��3~������W#�ڪ犘�	ϔ�$N,����m�3[�pGC�U;Z�~������>
����f�������)P k\b�[��bJ���\S�~{7���Q����D��PҾ��unu���A
"!c�k���d�(��s�j�2Ť!�7=ip�e|�������E��qf��d��xq�k��x�n]�e�������7W�T��7���|�B4��g0�X��ù�3��(V��巣y��tw���k�<
+Fg��Z!�C�Ă7+	�_
�ҧ�w��z��i+��6w��E�A��M����
ț�}��<Jֆ���6~ߚ�	���v�Q�۾�f�����,�k�z���W���Ug0%�z���kS`���u*>����
��)Y
��,Ų?܃4�G\=C��
���G��X�%J�ӊ#�{p�Į]lM��;L���v<��M����#�G)�����]/�L�4�[� �|��4�5&O��Q���h�뉍DײIF������F!V\Q�2qL7x[��s�Ӿ��*��4wZz��<=H/����tč����6
� G���ѯK�+W}?~�ԯ�<��O
����;5yQw�~�d��GK�[?�@�tr�C�4-�!�ʘ#�3�����cQ��O˭--Ӿ
wCdCCo)�f�����{7�,K�yl��1�ٶ�k�Z��|�+IDx�Z<i�ZK�
l� �\
V��_�:�ЫY��*����`
+�y�zZ�W��w����;�>�w� �ONJhZ
�\�T�Ss�6�
CXNddu�8έ�d�¿�zL���^�~�8��]�;AM�cuQ����gWptr��S+���+� �]���2��2�-��f�O�K&&��
�
��=0kxH�'ӺAk�7����L�;Z~S�&I���+{�+��4����5%u�ˀS_^�b����-k��q},����<�.�]�����OPiv@�'e��0��O��Յ���
�=/�Şo"	��[�C�&4\J���G��`�~v��l���<������+_j^�
*�:��>8+�\G0��Vn�١/��g��U����n���5�\
����L���A�+yP�0}=~�>�%�X��p��1	[Ī�<�,4�?���O��gqB�	fĬq�7��5`Ŧ�r�0ϗ���E�4X��0×�+G�@�m��"�s�߉�K���M؝������*����H��ˉ�t>zqEk�F�99v{<�z�OX��0Ŵ���t�	�
���Id����/ [...]
+��a�~%3�=1�!)U�p+�iJ���-��a����<���OY����fo����?��i��jH�0_g/� 'ޔ��nu|Ig���~
�Y���="je<��$��FW�wn&��S���L�����u��u�1�J������p\�B��ϱ�x�L�0�g�^���Uu�j������+�
�#�o�M}�#J�I�z�
ž��?ғ�]�?P5�x��
^QM�%oo��_��d���
+�V�Bz��x
+�mBt�l|
��
4�6lin��
�:�16�N%W�! dI�rE�33BZ�
Sq
�Z�Rw/#���JR��
+Zg����8�N������q
����vP*���/y8O������T��&��ޙ/U?�������8�ƃ�����(�r8i�LEY�"ȸ�Z�߅����V�ٯ���w[L���
��?|�"c�Ru��F���p���j-WH�vΖRw��;�ͧv2U-|�k	�}�s�]Cd��
;�8IB4S4��p����TS

�OOh�N�R�
�'���诖2m�v|D�	%l?�Y']�~U&v~0b���+	����XI�$����9��v\�Εv
+[�|�7��;r�����^���@R�#�^Ķ����
@:x�f>�ҏ��z�Ggs`[���]5f�v�
�ъ,��/̜?b
Q��)��vmB�]kX}����9��Z	;D@;�=�����L�)���l��MW�s��'��Į
�:&�u��k��6��z
)�����>�BS�/m=����7¢�}]�g�^��</O�WX5���>�-*���xE���
U�K��a�{�T�P ����+�h(ٚ.D��N�
\�z�,��P�ӿ�n���BW.��b;�����%��4O^ή2�Uh
�ܻ�J`M�
q@��|��u���SJ�_n9���b��u�;�$�#���.���3�ސ|G
T�������͑��#���#�^_�A<�V����0n�"�r��W�e|C�ĎT`oAݴ��Gb� ��_]�޷��W*�=��hg#aRY���|<R�0<��s!�(:�ާT��h-�������۝<n�ۊI1ʘRj�����.f2
)
�K�K�)'��r��E ��^X�gf�{��d�7ȶ:2�]�bd��ӣc��LiB�����!W�����E�>
�v֙�\@6/N����Cd�	{J���d4%:s��̙؂MW�a���� (�D��zO�@��ZSÛ�.m������S��~z�&�O�0�gC��k���1j���h����$����gJ�W���|/�u��͈���f��LM@�a
+\<d7/'�R�,�_����i�:l�^�Q�q#�k0�ƻ*_�
-���s/z[
@!9f{��7��S~��s��A,9IP1���t���&tn� cH���V������Vk�%�?sT�3�,'��Dp�6C~S��,QOw�0�
+F�
��C/�R�
88�$�h�v�8���t�Lwَ�'��{
;z1�ق�XK��P�r�3��u�
���
+e���Kn+w�ݎ|o��pm�C@���%�d������R����ϙ�k��5��� �*h
���T��jس�Ci٥�+k�8�\n8u�ȈU}���^&��
U�F4'T�\��{ܔ4
/��3�J��y���Cp%�yk`1�o�Y��$;Z2#�g�L8<��I�i�Ot�yP�	�r�'ߪ�u��z?��ΐT�{�
�ׯPE{6l���
6��n�_���dLrK*�u��PÄ<B�m�	��
�`�.m�l^R[�3p�g��
�^��񓊪���m�f� ���:ਥ���`���I��̣s>���
+q�j:q�1�k����[����$s�8S9&q��rF�լ7he
45OS]'�媄��H�Ƴ�ɼa%2-�w'H�{j}C�I�ߥ���]�N�hŞl?�v�s�Z9��� �+˧1�/�����R�u�I���`

x��lk<�d�
����N�F�*�Yz��j�*�ds���
�U�|P�#y�X��,-[U��]M�r1إ`�hW��b1�o
���DŽ�ʲyL�=sl��X�;�P)Z��0�C�[��ɢ17Ok�p�t����ƺ��5�Z
+�tR���Ԏ��t�״3i�%&�<D������?8�����¯��{���jߪ(A�nֺq�Vb��XtpLI�<K�d�m�%7�s�Y�N:MT@�=�(�����?P�o����u�1gS�J�~_��ݽUߜ�
+XG�g�f[|��ʟ��� E��x<_:��ѷ���pA�4�>��kWBC���\�Ky��G��D�36������鞖�%��PrSG_A_ tz�΋���ũ�ї���7��4£R
ecJ���&E����|&��*��
MDҔ�
c�I�/Q�ތ2K�J_طIS��D��n
!��_61p��i	?fMS1S�w�N�R�BSB�a���,o�
+�kY61 e�{aH��3;#)dM�����B�m`����p� #���9�f�
n�
��g1;D�������k
���=���#&��[LR�")�V��u(
Wh�G*	��v�<A���&�P��vq����Y1ʗ�
n{�t4���)����)�N	N�zΰ~O�&v1�E��з�L'�
���n
+W׻����Y��h���$&�)��<Gޠ������O�):4d�&��� '�Vi|�?joO��w��
���1���
o�1��X9��5{��
6�kP�`[n�R;ɋtm�r!�� |�*ms`a����+"���-���ډf��<U=�
����z�ʻ0�D�Έ�n9ܘ�e�.Z;Yh�a�+��ߥ�����EJ�ρ;�o+W�Nv��C��0I�q�In`}��o;‘	��Z������ׅr��"p�Ϧ�Ǽ��$�
+��	o�� �	dBܟ
������;U��FM~
��o(h�
aqD1��KlS
��B2�A7d2�y¾w
��D�SO
p��T�J'ĕ�5�-��Q��+WK���O��H�/� ë��
J���5�-�U�g�g@�C&s"�/�_��'���t���t�W�+�`�����)�����w��BP�O3^9/>?��$�em��̏�
B���.��'^�¸�n	-Y7��9?�Ζ�k9���v�!#7<H,(sDv-" ���gk2�;����Q
ջ�X0���]F�

4f����MwIm�Y׿L�}

g�Z�ڜ*n_/{Z�
���8ĩ�S|��^A�/M/�M>*~�3�tI
J��p�[ح���7�"~^9~�~�i��&��Ѥ���lj�
A^�r��R	鱚�8�Cae�K'X�fj���@�R�cѸ�Z$�������&[[�9r��{^�J���(N
+endstream
+endobj
+4175 0 obj <<
+/Type /FontDescriptor
+/FontName /KELKPH+CMR12
+/Flags 4
+/FontBBox [-34 -251 988 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 65
+/XHeight 431
+/CharSet (/A/C/H/L/M/R/S/U/a/b/comma/d/e/eight/h/hyphen/i/l/m/n/one/p/period/r/s/six/t/two/u/zero)
+/FontFile 4174 0 R
+>> endobj
+4176 0 obj <<
+/Length1 1074
+/Length2 4131
+/Length3 0
+/Length 4815      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<����-���K�g0��c_*![;�,��0f�,C�]��";e�ʖ}l)Q�}�R������[��������y�sޯ������A�b�h;�&���C� u�D
��K҂��8
�@�n��p% ��T�� )I "�$��$%C
�����3R�Y$���1{
+�°�p7��=
	��p��8��DF?OxFpO8�� N
� {,`wB�h%~�A9����^����O�)@�dR Yt@����ܑVBM�'9��0�oqM/$R��S���'
sC }�[�vs���1 � Ǡ�]z��7(������Dث���p@��Sq�`���;�0�'��8
��o���iAB��X��L���3g C��&�����,��!��4

�
`)).)	!���߬��Ke�v@�H
!+�0�/-i3H$
�C �~��#�G���# i&8����y�r
+��?IA�0��H�%�E����?!�����R���oHB����n�"	H��AYR��i
%���
��
����pG�(�ѿ6쟰
)L�1��or2��7$y����'����
+H�eI�>���$�^�!i�޿��������BM
}�_LZ�"�*���2���Sg�!}����Z�#���p�=�=����r�KJmDQ�F޻b���jNuqz5m��BG�ɑ�}�
�����K
�2.Q-]�9���`د�%�#.u�x��v�_��o�����;�kL/j���e���^,�
ov���0Y�� ��[z?kO��7�|�4ŇW
H��ΦzE��'}�NM�

t��ԋ�E7y����d'
�P[g�вWnP
S>ο U�J�{����,�E�
J�(	��ƀ��9-/���]��J��t�񥍷a\�*��
�o\��
ި7s�B�JN
6�Ҿ@�w%�賊LjJq�������0�r�ʼnD��k0Ú�%?���޳��R�[o���˩|��S�~c�����������$��J�
���QqS'������a
t�h�
���xRj��K}
V�Y��M���a�>m��l�H���B
3XD�,��#��T=%59-�7-�|���j1.�$��:��+���>M??'�~+<
fޑ񈨃l@�
P�G��
��IA#��
�3]0j�J��Nd��!r:ĕ�a\⋹
��~
�>~�1�:�I�!@b&k?��Ĕ��0X3�)���{ƒ�-�3��
��Y^�\��g?_p��
��]4�_�(�_h�U\
+fI�q���j�J
�uu�͢���SE���[������g�vqR��w|_.����\n���L� ��|`Y�⣾
���w��}<v��2�q�	����kU�<�d�qB�&��k(
���ZS&�}*@�\������
?
9t�R�c:G�Xb���N�
�p�U�8���M;�����S��gobp�y'��-\Ey��Dʓ�1-
ti�a�@�u�ۙNE���^���;������и���e�ᓋ
+#vB�C�,��J%I<��&�������"z]�fw�ɑ�ֲ���������[O)����U�پi�-i��
>��݀n--D64
�h��� �������3���D2�<�8����<1�2!��2���3�����w� �������L6���a�sߓ)"����
�$�gdP�_�f�ތ8*a���@=އ�J
:���s��[iS�/NӏB�l^
+���s���R��� ��U�?L_�Hы=��^
���du�@>A��s����ܩ! uu���C�a�߹�0ی��BS|7������N�wx;,qC(jj�'?�U�s�
]���^���k�G
�JO�F�-
�ɠyw������?n�n�	�ؚ�
0HS~�P�����mmx��?��<�r��1��:��
`�
�W%;�Vo��Q)�C!��`�!je{,1t����o�E��Q�����f�;�_r�;(N^��*�
�c�T�گ���]�����@�Ah\
]�]�����o–ls	7kPDA �p���q�$ɧ���+
+;��~ȖYvs^�x�%��/c�a�0��w�0M1gGW#N�fkʫ����
+#�d�[�:�f:����l4�x���*�x��96&D�.���
?���tH���l���=�e�(����:��}�/����:2t�.S����
�
;}��.
��q��� i%�����t-���cD��8�XR�Ȧ�L�i��q� P��u�)����B�D��
g��k3ǩT�Q���%���x�~WT
+
�an83u�|�ȊC�+�6:��%��=���<�0����pD��|�����}�
�]���D�PQ
[���C�gU�c�
[�ty5��w�*�R�oF��)$1q�}�

��ˣ�����
+;V�S?	�A^��`�W~����|x�a������e!������I��e��c����zk���B�<��E:=�����i�b��J
[�R���Jq��ҥ�54��N��F�>^0��y�+7���O�}�pE١8p^�o���T�|%��%�2#��jR�-�@}�rs�
VJi�堽��!���**�ya���f,��Ŋ�f&��QM���E�S�7%b4{��P�7�����ǔ��7Fcru?g�gA�j��'+���͊OAl�:Ѓ�m^�Y�q��a9|Ĩ��-��7�ɂ�.��=�
+ͨ(�Y�
��ɸ0ϧi�l�Y�d�Z�w�yY���{
+���
Ȇ�dN�_m	m�{(�x���x��3�����'��Di	}��+fzq�Z�������:=4[-4���l��0�cn占���<��rj�I6�<����
�
/x�m/0�hr�wz��ilܲfWT��4Yc��9���lks"������ۏ� ��&��b|���D
���7

�s�ӻT��*���Qff華jX�5�g�Vg�L����(K#Z��|�Z�f@��^�FC.�R9����^�����_�S���f��[%t1%��Mg
�����QPa`k
;eJ��[s����Eկӿ#94�1�w��{
��vޚ\o�Q>���aO�6��
l�s'"�1H�"xW
�O
+��4�0ih�kk��n�.Au�W�6-6"_������]�f
I
��uJ�Ѧ�l"�Þ_��|~���
��Ƿl|�|m[Gu�U'~���6O
Z��Q�#��g��Cv��B�K�E7LCd�?–�*ĭ,���i��RDG� �8)�͸(ޟ����.q̯��. �1��C��#�s|)�㮜ȍbݗM��S
�X;D8v�#�w�L���3[��zG�>�);
]1�����kR�|�(�d��+�%�Dl��FGp
�On���*(�&��a{L�cT�l^6����nG�
�
�5��Y3m��Gn&���5X��R;��jz�2sƨ�K/sD�`�N���SQ���_l�bK����
g��:��ʚ�'���p���%,���7jh�0¶�x6b�ɞ�))�
+�c7mw����M<�ZV��^�e<K0*��Ӧx{�m��A� �߶o?ǭ0��M�^�"�J�^�{O�&Q��c��ߚ�#E����,7:��U�՗���l�Lsm��D�WQ���3�
/�v����o�l��'��������4��9qb�v�=�.y�z.A���6%;a���ʿt�fAT���:��Smd�'�W����b��
�&^����D�x��ܷê�'K��~^�D5Q�/�u=�?���D<#�!��bie8�,*�N?Cd"����Ot�
��k]����(M�$�bz�[�L).4�{%츩��ǐ �@\a��9�ձ��r�Et~!_I�����ƸI|�]NR�S�u�^�c�B,�4��#F�|V�waUf/�]GM]�v�.D�*�z��,����ɪ��ľ�zP��eoW� �ˡ
�KV�4!��d@~���w��-j�
+ړ�YV��W��ݸ��zxz�\��u��i�F�QHW��W��~[T�6�U���W���|��� pq�l�׭|��޸�WV-i)ov(9	�R�*�e�<�D�:�Ŋ��z�� r`4�kͤ?'%��n�`�:��R�
+�RX}NY��LP=7}���gLވ�:��3���H��*�H
�,=� :���i,�M��5�*��3�}����[��9��8#�ջ�&�����áMǵ0���g�r9��
�Uy0
+�/.
�͔�a�[5mS�K���m휌#g$=�I�s%�0�s��̏���y��������D7
�+(�����&D�y���6����]�j�
�˸�*��

2�R�M�B��>��/����	ѠBM�]n}WW�Wq�?X�����6�)'a���V++[�ȱ�X�SPb[rTv�6�+��+~
��l<��S-���~��O�s�>

L4�Dz����zF���+a�ٶ՗M��e
+�ׇ�� T�O܃��#��8����f�cO���<�
��A�!��Ɏ->��ڑ툇q�^8
+e6P)�Smo�Q2�z��˵���M
���r�W�B�7g��ioe����\�{=����5�*��z9�� ���~
_�i��B/�mQ-��	��So�d޽�e;�c~�(U�-�(ڟj�H����5���h�;�w�p���W
P6	X	�ɜ��v�|]���9�߭b�L�L8�lc�a?}N����~eO֯��+w���S���7�K
zt��vh�sTp/}��iI�0~���E�U�q���8
+�t�9H*]��;j��Ü�}��&���v�\5b�����ח����FO.
�G�� 
� �a�
+�r̟K��~ꨳ
+�T��/�@o۾�x�pI� W�~���Y�����R[Y���^+k\DױP�S�i�q����(��a��m*<H��{��g�l�
+endstream
+endobj
+4177 0 obj <<
+/Type /FontDescriptor
+/FontName /BTSFPV+CMR17
+/Flags 4
+/FontBBox [-33 -250 945 749]
+/Ascent 694
+/CapHeight 683
+/Descent -195
+/ItalicAngle 0
+/StemV 53
+/XHeight 430
+/CharSet (/D/U/a/c/e/f/i/m/n/nine/o/parenleft/parenright/period/r/s/seven/t/two/u/v/zero)
+/FontFile 4176 0 R
+>> endobj
+4178 0 obj <<
+/Length1 790
+/Length2 1470
+/Length3 0
+/Length 2023      
+/Filter /FlateDecode
+>>
+stream
+xڭRy<�k�"
���K(�}9��0�|ed��Ld_��kf4ޗY0Di쩃�Q��-:���v�HȞt���h��7�u��s��~���s_�u_��^ϣ��zPO��A;b�c
��>��`0�M�}L�ĦÐ
�
Z XssC�
n�������	�ùL:��t�鮒L|Ȥ�I@ �i`�P�Lb a2
ds
 <�W'X d��H�b��b
+���A*
B�W
9B!0`�
�p¿�"A&Kh
+�Y��
MR`��(`�

O�^��֋�q
gRت�0�tIat��}8,��� ��Lh=��f� R蜰�]G6�A'�!*0� :ˎ

R\�l2
!1X�B��&���Y@;;:�8;��v�k-W
b�s��]��ؿka6Lz4��������Q���!*`hl��L�J�X�Q�h ��E@0[8#�B`&b�:q� ��U�[m��
�_�1@���	f :d~�����pt��
�
+G�F
`nb
�?L2��!�ڛ����
��h���ɻCsk���mKz*��D���L皦G�%y�Y"��{�#��ox-U��n��R����Jo8��e7��y���Td�T^L��׻<�y�����[m�Œ��K�����ޥ�o�^��ظOo
U���y�9?����.�ᑒtC�H�(}6�<�2%}:{�X7/>4E��Ǒy��#�T"q��/~����T���zr��3�KS��׿�t\������ذ�#�P6�jA��m�÷�ئ"�P�
^�+�&��E��}=�U�n��پ�H���Hɳ{9�H
~�cw��@��Ψӗ�8���p'b���]��#�}
+ٞ1���=^�f("���6'P!]��Uy�ic�ө�����XG�"<�P[�b�ф�Z�+�Q�yT0�/���k�J�N��֭��y&�u� i��6��R8��Z��p+bN|����#�i���&Y(c,2
l}?煌B�Y"���C#��Я
�|0U�5q��z��䴢s}��ev�9|J��^C����X
4Lv���z��l�r�Х�u��n������p��ʤ�&@���
#�q�᫉��w)ڪ������3�%�_�
���W?�.���& �s:�
+�l,{^(DtET`(�㩨DC���	|[�G�ed��cjݖ*����DvH���<��>��B���y�a���1���=z�'=��TMu�x�_�ܵ���wm�����
+�A>
���Y,�x�e��G�AV��䖀
��jcj
+�c��!�娤tf�b��R��J�8G��W	�� �!�xa}���O���S�'��
�����Uhoέxܦ
ۂ�]���4muS�L{�*57�
+,�>��s��V���
���:ix��.������ޞGn
�c/z�'���WQp��j�\<>��J�(��3�s�wmR��u�䬏��
����GqA�&%�ŷl�E���>������{�T�~�_�<��e��sn�^���N�^¢?�����s���3��K�)6�t�����|����/��
�b�G~vp��B�R��M��Ÿ��I���	�K߸�wU�-ggo�P�?��:��6v�+�7�VS��}�J��ݹ�)��V���+�bi���%~�D�
+s1���7F
QKs���s�
�����
��7�d0���v�D�}R&H)�]o��?�v����1z��c��
�Yy���x�ߙ�.����;D��τ��L1�tk��E�*J�
+��pY�@����&���
��8��������Q�ș&�'/�/gq���f��i���c��
���|�S溡�N�c�,�O�$
+��
�Gn�^IπΣ,�>��4���U�z��@�[���uf��!�����S��5r�AF���	�*�6
S��'��{J���:諑z��Z�g��
P+:�X}2j
�z)�d�9�x���l_H�E���� 'N�Q���

�>+�t[��`����w:�Y��
+�o�u;;/=�d��#!�T�5�Uuu�iWmϕN٢gʫ�X�	3��9n�T*
��+Z����
+endstream
+endobj
+4179 0 obj <<
+/Type /FontDescriptor
+/FontName /NIIONN+CMR5
+/Flags 4
+/FontBBox [-341 -250 1304 965]
+/Ascent 694
+/CapHeight 680
+/Descent -194
+/ItalicAngle 0
+/StemV 89
+/XHeight 431
+/CharSet (/one/plus/two/zero)
+/FontFile 4178 0 R
+>> endobj
+4180 0 obj <<
+/Length1 751
+/Length2 1212
+/Length3 0
+/Length 1744      
+/Filter /FlateDecode
+>>
+stream
+xڭR{<�i^����G|k�PODd�y1��i�6+
QH�1�������	3NYt�-�%�Or(tZ�RR��Md�Zհh�bWdV�K�~�������뾮�~��zn��=4
+�a��"A��ӗ
+ �hl�,�C]�@���Ep�@Tk{��8c��p%���lQd
h|X�0(�dH�0��d��
���	�x<�xB
|a1,��Y$"”�P���D�E?�(��ʬ�{*�qS�7ip�,
�� 
f-�0�.w��0���[����/��3���#<�_<�DH`��X�].����	���r�]��!L���������)̢#&�<1�T�Q�rxlK,�>��o��K���?��曆�%
��و)�O&��.���݁eW��L����8P��!1dD|.pD1@P,��kIB1	~��6&".~��=��Px���)d`)�–�?���Ic,����
do
l)��2#D"�,�
��{�F�
aX
+3�=��19,��HY�kQ[9a�����׷�
�ԓ~LS�>�n�
PV���{�0�!jNO|�6֧�m�K�霮��Ȑ���z��z�~�$�iެ��������\�Xܘ?q��n��7�����쏼v'/�j���?z���z��V����QE�Vf���qR|�Q����&��me��ٌ�੗�;��ʻ��֮'�n>��H9���f�ɢ��n��)/�-w�YW���A;��3T��F�]���^ˏ'%>�<�\�na��Ӧ��/��4��շ�K�S�7�Qm�;O7Vj
5���{��JG�w�����lm 
ɫ�
+͐��^a�>a5M�-H��<S��^���;��W�n���g��~�L��d����s�q=-[�GS?�Q�3��_�Jk7��~�-Vne���&wo��m�b����
�o�9�zp��Vp^��6��%��r�|[vxFߵ���c�&�+f��e�>�z�f��	�.�W�ϯ��m
0�𻴋'�wnߜ��qZ�ڶ��鄪�ϼ�.�dUX���{6�,) [...]
+魬�o8iz����š��v
T>xQl<��/5��~"Ԥ���<S����j�ڦT��i����ZL�?����Oj���=ܮˎ?���MY�ѫ/��~�s6H�Qx;����*�U��I�Y�Aj|��@�
��S��[�
���M��Rj

���Ǘ�g�;f_m\1�œ�����u�����(
�����
f9����1ӽC�����b��<��Ƥ3
��)E&�Js[�GE�i�T�tx�~~���ln��	�&˒otau}���#;�+�{�ό�%�mj�+Mz��Ck(����3�R���ad�Z�
���̫�c
WZ�����;̩�d��M\��Rq<�P��W��8�zYvh$
7��m��k��~P������g�]�Կ�j���u�4���4F�#P�
ZsX��:�eTn�������H��Ӣ����F�ۉ[�3
�G�c�dU:�Ȣ��
�w�rb�Ѭ4�{��
��\7x�"fV��(+
�����lw
pS������U�~CJ�8�����
�g�Hnݾ�W"
�b�rj��ր�������N��N�bߓ&�j��|q� v$��ɝ�3.��'>�eb
+endstream
+endobj
+4181 0 obj <<
+/Type /FontDescriptor
+/FontName /XTJZVU+CMR6
+/Flags 4
+/FontBBox [-20 -250 1193 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 83
+/XHeight 431
+/CharSet (/one/two)
+/FontFile 4180 0 R
+>> endobj
+4182 0 obj <<
+/Length1 1119
+/Length2 4958
+/Length3 0
+/Length 5675      
+/Filter /FlateDecode
+>>
+stream
+xڭWg8�k��E�6B�%�A��轷�`3��{'J�ND/�"�E5=�D	�7��=9���~���Yk��u⦅k��`�3�SpD�CU�4���$PI�@
(�/H�����B�0$B��J�
>*x;��Bb�"%���9�JH��
�R��#I
��E�
 �6�u�h8@�@C�
���*��@�?*��P/(���O,$t�9���Pg�X�?`�(�����ߐ�1�˜�b,:"p�#ԉX@�9
�q��a����p���yL��O����'�t��FCQ at m�#��w�)�/k�PG�����`4sP at 8á@��(��*��C;� � p/�<��o���iA@���\I���i�҃�h#��E���
�Ƙޠ`~@KA~AA!L"������RA8 
a�:�Ā
+�O��

��0�#�����G ј �%�@'$���a������D�@��H(`�a2M�F�I
+@�FbB@��7f��e@%'�7�oBH��J ����� P ���G�
E1�H�a�a
�ØZ
+��C�пY������4�
po��a|�� Q
Œ�wX
(�
�QE����̀0��}��(�t��7�|���D1]���J��;����
��	ct1�����W��7
+s+�'f���`���B���s�RQ�Y-1�!*%U�<؊ίRt���;I"gS��eÚ�<ˍfչ �
�
f�_
^�:��߫
�{�d�\o��m��1�
�j��{��G�|8�a�N-�T��?�?
�-��R6�$\d���i�ɋ7Sͅ�F7r��Pd{VƉ�.�R�?�[�
q���ʻp���(��,���u�����h�N�Xt��:x��Psc��\L����k5�j�Y�Gw\�
+��ZݲB��BD�v��J���{V!iIE��X��;c]P\��b��G
+����eG5S׋����G�T4����5�
�q
�E
ܕY�|*߳\�sa�sM6�c(솰n�}�RH�P+�ԍr,���ދ�b�²AG�`+���d�O��
+G�iv�����+r?�!'�H8�]�=�!"թ�_���2ǽ�[�c�zbc��a����1}���/Tf��;	�6��]u#
�%
��~b��I�aK��/�����z��$�k�v❼�������/*�wO����oQS��R����5uʆ�r�Ɩ��4��O5w���6�Kdr����S�堝�m����\��
Z�0
)���L����
m?��e
(�L
�
+

��z��֘M-��E����9D�Dg�錔��(yMኊ�v��h�}
i�s)������u��,I��/Gq����b*Ù�r5BHNt�Z�xov♴Y����u�FNƥ�ZL?;�3JR<�җd�2�{��)�(��aN�0�]����P�
Q]�-g��M��uT���J�9�I?Yx���j
�l
Z�Y�me�|bUT��q�N+$
���ڬ �X��w��t�)��
+���Y_tI�2���];�e�6L��z^p�-a�h2҂�RH�����i,"��*r��KԨ]]��$@
 BL	_�:Ƽ{���Ek¥��#;!�Ԃ
�;<�,{�ͩ���N7g���k���=v"4ḿc�>$e'��Q��%2��:�ؿ�|�ծ6!���ĽZqh�lgbX�C�w��1|���J�3ܟt
�9�g/
+Z
pz�B.Dl�
@����vm�p�Y�/t3��*-�$�Fk�ԡ���d����Q���B�n���7 �
����Y[M��H��2��H�^�s�U�2�H���0��P�pLToZ?�H�o7銀�}ħN*�9BbB���Y�0�/����C�D��9/l�
aQZ.�
��������?��-�D�}K�I�:�����g���'�>�8-=I]|"ѯ+�$��2`�~w�����7��u� 2�����Wm�gLg��c�l� �ŗ.Le*"�Р�;�j��c���
���ޘJ�E1Fk2M��������
��n�6��E�`k*�~����q���|��L��-�B�������!<�%[�}�>"P��H���k��B�s��$��O��H�!��t����<sL�/��_]�6�,�3O�cg]��>�F{c;)��j��s�2�&e]Li��c	�n:J�t:����д�Y3���[7=�b��(Eī�j�%�*3��Wn�g�%
+�x�l���OG�/�)xu������[�]���Z�
pm���"�h��+
Jl=�cu^}c�Rr��z1�7)��Nx��Hw^r���G�~�;|;�-js���b��R�c�׎�
�#�P'�@ux�8P%�X��' ��Ԩ��B
&s�`V�_��C��fj��[A�+V�G��0�S��
%�$v�|
`�}Ť�왻��d���kJFQ>��I��5scHG���+N��t�JdѪ3ԅ*NGi~g���>�¬z���ӡk&�
㩧���+�&�oֽ�_5{N����]ޱf%&n at k��l�� NG��6��H�AҙœQ@2�|@��h��|�9ӘI}K
$ʽ�:_JY�Y�
?��S�{H����H�,��
+t�g��8����C�������m!��I�XY��%��S��PnG7��P�+թ���)q`{��]5zK)�[��k
>|}�}F>�v�mR���S}v�b,�ރkv�S��<>��{�$

�XW��\���𤖍^
+
�|��<�2�m~�P��y�L�4,x�9n�E�o���g�\�r�N��Ѩ&
v�v|���'��.ETW���
GX�ΏE��;7�1�z�S��n�r��V��{����uW�3�n�v���۩l�Ȭ?H˞^�p��G�瘹�`��|4��J����o��� ��
����}�8�3��*��R3�쌿���� 2�� `1
�R�US���5�,f�J.�

�\�f믢B�
��O*F�=������dM-/}�����5���(��x�
Ϊ������s)�웳]M�H�u\Y��9

2���&[�F�PD�e墰����x�>�N���&np��O�u��2��`���@nq���ݘ�
��+���d��]�)�o^��R�OL����悦v.

��<�~�7��uZs�,���
+j��<"%f����/z*�*ۗw���z�5\9�;�^^�.�NDZ[�}�����t@�hy6����>p����$ۡ!�=����\ثC��M>�
A���|X�_�
�#�����j~��մ�v�@��Z���� DW�=���"���6

X�۹d�kc��	p]�"�s���y"�
��y����	$a�Gk�h)~y�v��ٯN�&��z7I���
+���EI�ĺ��u��������q�j R?ݞ�bSݩ<7ō����l�<�e�I�p�~Җ���J{���KP�Q�ut[�K���-u{X�b�Oot�E��R�e��n
+4K3�h��H�����im)���
+T���-bn�D7RљR�����.ށE���TH���dJ�#�s�����q��۴�")��i�l�ʃ�.B�͵c�H�
�5!^��o��l��+}xɡw�{)$��������]Kf�:v޾2�9�e��u�"a��it���R��� 
��-�ɏ?����D4����eh�� ���9��
Rx�{�Գ�j!��k	L2��b��
F����+��5�R�äF�Ў�������RI�l�����'��
3c��w_&r�R+�ے�^sc����s�Ȁj���hk��:�|
���}��72�d�:�E�q�W�I��#�qȅ��q�WNpUD��rt
��X�w��.%:�Ц
�.��[�����+7l�
+Ѷ~T�s15̨��\k�߮������@�H�j�J!�HdZ$�^�F�nx�
+��96s6F{�q�1W��g�W��Y
�˯&;7��M$
8_��X��[�%����F��g_I`9�����gJ�}|;n�t��\���h��@PN�c,�A�����f�;�L����V]�'�
�g���\~�1�y%tE 
�����vX��A�{ZK0� Z4�d�W�vLPJ��%�������!�F��E�!�&�3˝�/ƨ"��Ce@��MyNƴ�g���
�:�������RĞ����̟G� �
/
�g_>�1 j��+v�"�]p�3(F��C?�
���>]2�Q�f�z��8��<
  Vcm?8�{�p�D���{D��u΅���rX�L��V��~�
���C�R������'Q�X��.^%&O�X�w�M�n*�2��BqY�)	Á)ʊmAmᮁ��.��*��I�I��bnO��
>ѐ� eTvl��
'�R�GfphrƄ5&k���N�M��g�6
�~#�6{\���Ȑ�[V�2K��H��7�V�"գt�:��8:^p%
�=���wZ��l�W���GB����7��a�>�IҨKy���{+�T ��DI��:���7�
+ �w?�nD�{쏖ȶ�u�Is�eN��ܨ'k!)�rX����޻��]p�v]M�3��+g�l�l�%���S�d��p@
�6~�岤���֎��]h����&?��e�&���;:�̱�R��8��4Y�r >|,}d"id����K�Y_�C����HJ2b��'���,�\��
��*yvM��
Gv�
#\��e�h�NQ燇�]����p�Z����mm�*�N��ԑ�T���\���y�������0e��4B��=9#�Jʋf�D@�������
}��b��Q����"?���QZ��p�U��kǤW�_��=�p^7�i,��a w�z�t#%D�0�ƣ.w�\r��ީ�
���D�wɰ�����"w6��
L|]׶!mγ6Q�\M�?�#��lzBO�`�ɺ��˗�a\�OߖLLL�5�
@!�G�;5�Q�9"� ��ŧЛ��@�(ۇg���QX�I�8["���+�
�v�2*P�V��E�Y
���&[��>%2
0�"}`]��'�:���7��ҁ��lű����䄤1K<�7ARq��Ji��o��0
�W;uM�'\+Y�9�`ĥ��#6��	ũxZ�����aL��px�=�?'�U��Ҋ��䘜�A�F�{GIfb�a��c�g�
���Z#�Tܲ�A����z�����K��Φw�y�A#�R�q���+M*ucF,�2�	q[��Lj�y�;r}��{�f���^y����ν`��):��`g��ຕL~�O����2���y���I �_��V�`a����ީ��5���е3�~L�(CF�e��8y��W���s��v�A���H��t���@��uk�#�9{
���KR�T�HW�T�;B�
뭶�)��&P[���a}�Wc�ì�M��h�~�_�j7i������蔙7�>{�Ѻ E砟j�)���:�Y���JðT�m��m��f�$��2G�~� �aj����������Xj�`�]
BW��R�Eqy�k�Q[CM � [...]
+
��4�x$�g
��z�B��8�Z� �ߪ�U�����u�I�_.f��ܪ�ט����� [���H��O+��U'������F���зo�a��W��
���w)=�!��Fʬ;���ri�񵕖�!!EUV��Y
����B��gk���`!��*�
+endstream
+endobj
+4183 0 obj <<
+/Type /FontDescriptor
+/FontName /EXVYCF+CMR7
+/Flags 4
+/FontBBox [-27 -250 1122 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 79
+/XHeight 431
+/CharSet (/M/R/S/W/a/equal/four/i/l/m/n/o/one/p/parenleft/parenright/plus/s/six/t/three/two/u/x/zero)
+/FontFile 4182 0 R
+>> endobj
+4184 0 obj <<
+/Length1 1528
+/Length2 8900
+/Length3 0
+/Length 9764      
+/Filter /FlateDecode
+>>
+stream
+xڭ�eXڲ�q�P�	^\-��!8w��Bq(Z��)��]�Ӣŵ����=�=���O�䝙5����zBG���*f1KC
�X9�8 J�| N64::	���
�Q��
, ������[�8 ��@~nh@���bce�x%��W�k����d�P2s�;@s����
�͛
 foP��+@
�
+v� [��qr,l at n s���#�_z�
-!���2[�;���vq�����d@%Z@
�`K4ve����C�'�v��W6s�+=tF��k�`c���~������� �8�w��_Ҕ�6���s3���9Zك
�2ٸJ�x�-Tm�@� K3{W��v�������o	���
+*��o�o���������?I����93t6.6^ 6Nh ���oF�UJ���q�^
^�����7�^@���	�q� {�^P��l�7� t$� K�
�_������e�����k ��o��K�&~ ��?���o����&hN��ͩ�YT�!>n ��?�+�f�74��+t�6�v�C���'�\�@v`7{���o;�����?hu��
+�� ���
ж,�@h��d��N�?��/����F
�_��g6��������
�%ko'k��P��9�c���ӳ�������;�!
����<У�6�h��7�o1�Ð�pC{s��&s2s;���9����+��v�.�ǘ9��p���p��m�������@k�yB�pC{q��c����x��"�i�?*��o��?nqq��/+����	�6�5����]�����nB����
�A��� �����[۔��� ���2D&Xq��q��ݳ
衋��E#
+�L�u�w��/vw)=H]#���ƥO���R�v=Lw�}ZHu/ҕ�w���C�ښ�~
���̬��&�|�<8�U}%��y�
+�����'�-�k]�t{��wu�@*u�T�����k��I	k����(��+�vw��|���'�3���y�
'���:�[�}��e榌ʏ�hi}����.2l��Ku���h�+�L�0?�A�א��:�n4דe����%��� ,[| cSzD^��2k�=��$NԼ���BٛҀ��d��Iy
�p��4��]�~��l�
��>M�+X�&y��l҅���~��'�H�����Fh
+���@Nl
+CɂQ�q
�dt�mդH��5 � �CB9�9�g�%2c�R���P$X��M��[T��-�I�Y�'h{Fwx.�jJNj5Μ� =?
������� �SZ�Ǧ���M���lݙn���U���`��:>KZk�[��i��Y5*4���/��YMb.�FB���˓�>|�d[7�S�qeD�`�b���8Uᮒ�4��q�w[L
��F7�r�(ⱋ�|�ˁש������.�b���\�I���*$?<�y��.zcuG�Qg��a�� L�q��
�D�/ʨ-o
+���rC����$k��Ȑ}���9$ގ��^ �T��H�
�{u��x�9q�L�d�,�:��R��l9��{�.��x]�=Y2 dr
K<%��������zU'�2
�r�-����I�O�T|���n&�M,u
Ƙ-��+��Lj�]�w��®'���꟎/��
]���6�^�/۴�%��:s-�JR��N2�칗 *��^��%���Ԙȏ��
u/�!��r��}O9ң�&�bo�:�[
;��j�<�9@��
+��ʯ��k�C���5��Wy�
��W�I`ɲ��F
��c�:G�
+1�)N��d�np7�$Ϡϭ@s�k!�k;��DU�d����;.�& �
�7��+����!�Ę!y���i��!�8;!�)�E�[�6MLc�üb�y�и�0�%X�>�>�>��у���-ovm���9�?]���
+��klt|h\���
�LO��8��Xqv�OJ�Y�2-��y����u���*P&\e�M6����*�QM�9��m�$�i��!� >B�]�"<��-��c�
+W���):�f}
+5qQ�	g��T
�VB�?M��"(�]�

R��2_�6
�m��8m�	�O�|��� y���'5p��2=
=8�A}�
1��
T@��QQX,�������
�E��D$�A�m^���(Cd�0�ˮlSΈ�/�s4�IG�	������A�����.R�Y�&c���idE���2���,��W��߇EB��=��"���-)^V��S.�q_�ͦLi�u�0����{D3������L9f4�AX&��y���3
�TCp�����׭Q�l����<���ǝ�2�����j� T��Ղ��
8c�23�%r�oW&�es�>�„�%��~��3�k�
�
���(��3������L��f���R4{�a
+I���}��\��-sH=L�f�
c.Y� �߆�yg}��+H
µ�g�-�������� �+����ּٚ�g0<���UƷ'n�
�
�h�!"8���!_�ᨎ{�X�{��#�w�@hJ�OeR���]qZ'Ns�V�ߧ�
p�S�5h9������G��@!�͚��q�`���C���*��]��PH���ƴxI�d�6�^���"Kd&����U
*�����ȩ_d�9N�R�o��}��:���	�,���Y���a>>$�6� n���l�y���&q�n�~Q�Y��_[@W:����7�L���Zh[{�]1����T:D'N
Dr5�|�1���a���=

����+<��m?vt�QZ\@wm�%6���u�
6'E��{X��g�]�j�3��l��dј��6
+����\���=�	����ҥ��!�v����s��F

�����C��c���z�Odю�)
���^/���
z_�U"V�&}�������(@��U=���tl���b`P�M���&3���
���7HRL|
uq�*qQ6y^_sJi�G�Mm J-.O
+�V��}���6��K#�j
+�����Zj��V!v��b�'�0��]j����H��c�ڢh����Q-�{��+��y�U�_�v��h �_�"��Z���~���Pm�S���4b��=/�v�
�a]%�/���j\��c��<EB־�K�\����;�����S�]_�xʢm�����(I�(}�DŎof��r��1���\q�.�Ŋ�G�m�+b���,���u��<�}e�#7��}�	�U��R��=+��5L$��e�b+:gv����mB�'�KO�$wn��S�2,%F�P���:`«
y$���H5-F^Y���H���SBmٌ���#������z�{�n��!a!���j.��~
��k�i�����g\���f4���"�Ju�5�!�f�9h1u���'��ңO	>^��&�DO+��)���l�I�e��U
���k;�B=�1�L��X����f >��*uV߮
7��џ����@Sj
+�<>M\W�\�N�K��mh�N/)�
+�U��v&���2"�:�h�o
�Ж�����iqn<E>ʁњ���������o)�
jEG�M�p�,<=r��9��G��J����b#_�4��aj����'�҈��r��_>ڣ�z�v����Y�PpH�fl�#��x�u�:�
N��s��M���#��/�&<O�C��@�;B�R�cc���I��
t��o�f�	&y�g��
+=4
�zv#�"/
+|��L#';�ڪ�:��0
-%�H�UD���}]��/N�
V�q{G�`x$8x��VZ F`�7h��Q��"���[���7�/]|��
�u��m��F/"��tu�d��N�����O-6�9�ۣxd�2b��U�cQ5�i���+(�P����>Q��X�D#��Nj�4[�޼O�gn4��"E=Y^Q�妏I�ۧ�d��3����v�ȇ�yr����e�a{���մ41cD�>������%����o�����_#��/F����X���K���͈��D-#HK�������-�E���q4�F�9��6�m{�y�
�r
Br���"}�@����/F)IK��N4����s�<�wO�3Y�c�Yi#AH��ן̹J�P�.�.�mw
���z���Z5[k�E�ɹ��M�G�O��.����{����<rV��P>��n���i`�<eӋ����I�~��������2�u��W/�:��)
+�Ж����I�����4�jœv@
�Bځ�]���������Mb�{�LLj���'���ț
� 6��ӆ�h�G�

~��C��
��NS�E�?U޷�\ߚ��Y$��1��J�~ �b}���nR�V�/@P��
kŪ"��� �

l�5-�
�l�V���h�3�������2�s�p
k��Q��5_5��#X
B�'��0�
��+�f�U�@�s4N>���u+T��i���<�H�mUpن�ǩ F����d��[�N�"L��W��y���ܐI�
#�t�:!�$���.�qeI!�71Z�}��DZ�˂��ӥ+��o�|�A�j��y,�-�H[n]�UЉ��א�q&��M�o'خwe��q���ad�JHt ��w�]�H��
>}P�}�g��0:��Cr�BM�ZǨ���'��|��v����$#>��˽bPl_�Ӧ.���͡
�Z��
�q�/}6oK�r�Na�#��!�k4��W)1k��
+�T����+��U&o8P�ۤY��k^L�uD��^C�]��M�V
Lު
6V=h��6��Xl�0j�}�SL8gd�%�̏�VlA�"��
��ZYd�VJ
�_?�=8e.�<:
��dd���%��@)�3b��D�(�̹��#H�y�@�+� �{d�t����sa�㻻��{��.W������_d��
�r��
ks)�V�I���0��舀&��9¯?\9�eT��X]�G<JC�^�:������^�m*�¤��d����� �>j}`%�����b.���@��"3
+ꬰ�� �  D�^-:�X�S�b.�ưcg\�:J ��Ǽﻊ�X[�óS���L�
�k>�>�Ϋ�����ý
&���MG�����K�؊4�UG�S��������ȉ����������f�ūZV�t���*�����=FPe:ϝt����fP�,o�`��.�_p��B1���
G�P�	{���8����1b�k���>��!����i#�F�<Q�*�9���/A�佥�T�_�Qj��#���V��+*]�>Q
�$���k�²��ǯg
_�F�,>�i&T�]�8�� $1��M�0X�,��ZQO�H�<�1xt��|1�����3�3m�z
?��JjY���tn�\H��=X���N��u����
+ݨ~k)WB���
�e������f���i
ۯh� )`�ڈ2?t���cp�=l�����b0��@��ЗBRqX�5]B*ݶ�(��쇣�:|��a�E�׬gb?�D�G
+�.�U1�B���Α
z��,�"�O(c�o�#�"�T�煶V�3lQ�+�1�"��ww^P$��B�L7W���M� �R7��"�=�"��:u}@�W�X@*��$��:�I���0G8H76KF4ݬ)r�,�����56�*P�8�q/�yn����O�^{$��x��I��[PQ�x\
cҀF�\^\/��R��T�D�'�RA��@g�g�
����7jK����X̨T���
+����fg�ė�0I+��3�"�dD�6%։�"����[4�f�5�Dn�[���Q��ot������u)�����
"m�����w.��Y�U�ih�1�y�)�5���c"�lAB��]�)��L�z����hh�{}�-��0�k��]�J�t1����%֍݌q�Z�"W���L�xF���
�q\�����4�wG�<�H�����?OL7��*xX	���}K5��Fw2�����;����CG��9Aٟ ��%���k�,�%��,�hUª������
�����q��E�
��qg��
}���U [�4�!V�w
^\f�%�.>8尹�:����d5���@��L��?|�-^]��Ta������}��� :�h�E$�Kʟ)b����!�����;6�gU���)
|��-z��ׇ�g��ΌTK������-}87��p�
l%�X�����w6�-���&_W-l`pew�HR E��D1���/�$������1Պ����~UT�g�*V�_i9�*���ڤR����_�t ��M�dw
���9
���|�"�&Ii���(����[��9�,��`[ܴ���G� �����r�u#Ŭ
~�eRX[�5�S8��g�i��01�
�

+
��$^e~�y	��
��؞��t�Z��*!� 
�4{+��	��Ri�qbn�9{Zh��o]� �>%�B�A�H8����U�8U�sC~*~��{�;
�x$���!��Z�]�X×7~r�?-U�sN��<�#v��F���
h2s�S�	s�@����c�=b!\H�Wā8�Lb�}�u��ke��&HZp7':�8��H�ۃgׅj�� �΄�S�Y��]���:|f�qէSe��<�Q�g�0��R�"�V㵪�y7�8��/�Z�
<~�|슓A-�IժPrNyꎋQ+p�'O�*���԰�`��2VC]Gb��CL5p�tf瘈�ˀ}�5�n3{/�Z��e
�O�A�)�>-yd�H�2�5�N�o�0�#�0�4���>��o�EV�'�|幘�<*R4&ؐ�� g�iq+X�S��ի�X�,��^6���g`���������︪#.�1~����ŏġW3v������-�G��O�+��)���j�`&X����A��0�V�?%ֱi+����
�&KK��]y�� l�{E�"�5��g=�|���?)8��*����W_�ɯ(��m;�
=N�.9I��)c#�4�n
f���4Y�6��������K�
h�F�$��!��I45�K��qэ�;�
im��[�B뺹��c�
5�-ܠG��v��ޮ�
+ڄ��Y��=4�_���;��
��ʯ�	���*[���p��9����l�Hۛei5����.1��
��(5��r���'°hǕ�_
M�C���/D����Y���uԏ��/�U���~Bo�;֎
��JV�/z4��ߨc�u���؟s|4H��T�F]��.�0ІL'��3�!�p�M|�����*
�*�ʓw4"фt��`[m�8��o��&}�S
I�{9ZX���3�ݕܔ�VF~Dd]e�h
W;����G��g`���
�S��mL���w�X��!yl��H���T
+��� Vu��x��mA�Tn�덀�X1&��C�Bk�B�<�ht��K:���-�];S���(�uC �2���vӟ~��b^��O����6��q�n�%�~��[v��ٶQ�Ԧw�6!;��z�@h����
7j3��r
��
��~AB��e��}p-s�
+7[�9������3���,
9�wјD����<,��7l�Hq������������SH��}l#3�m�����HJn�襎D"��DlÁ.�����F/a0UH���Zۀ�iꆤ�F}/4��uO]� <�X?�?\���M]�]2
��1��L�L,���/ӿfw>��7h�6H�B�%�N�Y�
n2��T� i�
�Bo�Z'it��)z���
+���M�hd5�|>�	k9^\�1t���Aj����|���B��8�DUeƁasRm1�
�
��8)�z���x?wp^�����x��9s�
FR�Q�{|G3��aKy}��
���XJD�b
M�'�se�|�e�Oe��ð�ws�`��	����h*#�|�͂ӝ
�����f�����E�1�
��R=H%#l
+��>p�
��ep��}�e��K~~!���);�ƫOX�
��ag�\P=-
+I�.�zoȟRީÃ\����EQ߄�p
47
�ґ��?�U|�H��t���`�aP�HD͸8@�
@8i�:�.��
��z&u�<�r��Yy�U/�y`C���Y�L{�7����vZ����k��b�
��
z��P��u��P�w�Wf�E�~�����MH�b
$E����#����M�x�
��Y���K~ECMNfn�+�u�ٷ
+��#z�Zı}
J�5
���$��K!�:t��Z_�k\HO{�O}.���TS���
�ǸJ_��P�u�Ez�
�b��'�O	5���J�~t
J��>�r�5��bm�*��BL~�i�Ƞ�d;���y� ��'����t1‰���.:�� ��c���^�� ]�Z2W�6���eö���f	�vѤd��
u\\�+lA3�abl��z󘎲�^��
��_6��������h�(	~���i�>�;�"�V�d�܁0�J�//�U
|�|
wf�h��	Cɇ,�	쏶Q���NCFF�`ԷT
|W���O�`aZU�޺O��3�]I�4
�+Ǟ��EiX�/�3RMQ!�Xւd�mq������� �M��(�C����������	U�$��,�RoW�[�~/�X�&]�
<������T�͎CCn7Eۆc}��3�N������Z�٘Ls����6s�8j餾�B<�����r7��W8�:xMٌ��}�`�f�'�`"�P*���zr�/H��$ �A(�c�Ï2+<��.[��R�E̷^�G��5����v��k�
>I��n�W�N�)�YqL���������rA��ST�y�@����Df��l��d��7�o�]��c�(u�p�vC�b���yq�.�a���s�����2V�rZ^�!�.
�XeL^n�v��h�Fp����Z�0+^n���9����Es�$X�w��ݭZ]���j]���7�Kia�6|n�Te���.���5�J�RM�����c�XT�A����ƅ��-��H	��
+7�U��H	(cD(ߘa���6�4�[�o���a~'q��>��/�!���#
=���ӗR�+ Lb
��'�E�Ve:��]|��F�W��
%��i���*hr����ZPb�[o
�-I�#a}���d��i�?�)�h�A���|ڗ�J�P��ӛM�G�W�M�!��k��^�A,i��{��#�}����#Xi�WU�(/;�7pML�7_��06_׸Co�cP۝C�(�{����߳9xvm
# &n�vWx�6�z<�
߅t�΢Ü�
⤅V��sd�	���;��]��*�
+Rb��^ |��qD��xJ!��L����M���l�DgR�����
1|�kP	Ik}�1`bO�]L�c���8�i�z�t~�m�m���A^�hi�u���FQ���W�A=/u!��ː
cen�)ލ���ߩ/1�y�_n��{k��~!�7��~�jTv�������}g��*���3<(}���>��
+��Q؂��2o
f�:���gp�4)$|.j�=Z���
oO���v|pY���w�4�7=�D�}3��Q&ֹ!5RF>\##n��ő���K6���`��Ɩ�E�G��<����m����
+e/-4��hrM�	�̠�
.m)���o�ɧ�@`<lH�*O{@m��\zp�
A��0�@Pɭ`�s�;LE -E�&��a,h7�
c��
y��U��o
3�<\0@��'ڽ��#��R)=�P]J��2|~�0EmW4�>A�yZ˳��+��Ӷoa׻³!��[�{7��ݙ�^�793��a3-�$w#�-2��v0<M�l��l:�MH�"�b���>}e��
�M	P\�*�ER�b�Sԅ�0���c��`rH	���`�F�4�O7�6dzݨϡŠ&

E�����9���͈%�
+endstream
+endobj
+4185 0 obj <<
+/Type /FontDescriptor
+/FontName /FFKODS+CMR8
+/Flags 4
+/FontBBox [-36 -250 1070 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 76
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/H/L/M/O/T/a/asterisk/b/bracketleft/bracketright/c/comma/d/e/f/ff/ffi/fi/five/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/t/two/u/v/w/x/y)
+/FontFile 4184 0 R
+>> endobj
+4186 0 obj <<
+/Length1 804
+/Length2 1837
+/Length3 0
+/Length 2386      
+/Filter /FlateDecode
+>>
+stream
+xڭR}<�kvB���'�F�b�
�Y&y*oyZۏ-���[楃�R�)/)	���Hy�pQ4	E��P(jtF��y:�>�����^��{_���n����Y���
:[�ĘV�n4�A���6Y�@"�ʠ�l���p�"�З�F��hS}��b0#XT
+�b��$2,A�D��D6
�� i��D�H��F\�:�W0d��d$��T8�S�PԒ#[�0�Z&�0�S� +Xb
+�"1�H,�tZ@��('��-P���a���;Ch4'b���������o
+F 3�
� Gd�����s�Ԑ��Y[6�F%Y��i ��C}-S�wR�A�
�M� ~DZ0�\�䟍H�[��rqw��@|��e҅H���#� ���^ƘX��x��h4F"����?=fM'1�T�d-�F ��"F@%�!AX P�d0
 �%�QH:�-i$�D~
t�S1��(p��
(���P������Kz#����d�G��z�X�� ����!)�����
���
�Q%��`8H��z$|�!^���h�]E�:�������x��A�����NwP�r��!j�R�[��;�Zi�F��
+
Tt.d��M�^���h�iiT
�:�R�9ʬBL�k����
+
�1�y�o�d
+�z��b:�E�3��/ҡ�sj
΂{_
q���Ɔq�!�o]�9
[�6>�P��s
�����N�߳(�\����N�C���ӛD�I��y�ٴ;����
���,W�/
+���Ĩ
p�ҭ��[�>HU�B���%r���\��ͱ�#
a�����܊b�g�����&֙�;�k*���s�*۝�Ǭn�o%׌���댁%�K
�?"m^���a��ݐw7j+3|���j����D���-��{XPl�G��z���zZ����v����탨�w\�"�Ae�k/��=)I�mm�Yf��������K%��D�>]��u��+Ul�k�4��
�5>��m��ʫ�hs�d��i�D;���.�V���V��us.�(�V��
���)�=�ّ�S�-;��4�TF�ǻ����yq(�zT���7�Z��%f�
���|C9�n���C��o��8��p$��1��&�0�u�j���#.r�!_hO�AJj
+r�{<Y���LX8��5��Qh�:�|��Y�䧷
����6R������������؟��U61v)���1XJ�G��`�n~��󹦩H�T}�K�7z���#�iQ��u��a���u���Ua
��v��W�~�tj�fѳ"��K���
˒T��Mb%��1��}��?��Z��H��+&�����(:
����NLz���1Z>E�ʪ��
+N)H#���y؆�Vir���
+���uf9#���ҚR���E�pBt-1p�kԟ=ni�
W�Y>ӣ�_��U
�T��_ ������(V��޵ ���Eњ�+;@�:o�?���UԪ�
&���&P��+�vȤ'>צ��jY���������]͆�rɲ<�m\9�ij
���z*�k7�
�ħ�c
y�]����N?�va��<ߊk��m+���e_�
���f[o�b��9��F�{��c�NN
G�&ت�J
��}�mߘ���=��3��\�S��` J��YsN����#�B*�LJ��?�������P䠾:w�[�ͱJ��
i9�)[R3����k�2��\������aS�v�҈!T�kbVG���=)�k-h�Z11��X�Ἑ��
��Y�C���i�?�t�m\�U�q
s!�
X#����|��<��#�g
+�>%��`�
+�u
9�	}fይ8g��b[�ݞ�C�F@�x�4�3������nS�����T�V5���g	rk�/j�ݵ�Ȅ�w��n�i�߾Y�'�g3V��qF�5��򐔂���
HmI\���W�]~��z��T-�I?���Δ.P�KD����>+\ y���

(�q4P�{���;�d�s�w�{�)���|m�¦��"
+i�ImM��/�nǥ�q�6���v�vgz��P���f
�{���p�L��
+x�B�{A��=��S#�@����n�Ȭ��(N+��6_G�� AD	]!��^�(��R�s��b�3|˔M�I�^3P6�U�]W�GX��	�Wv-�M9mZ��Jo
�a
�-�G!3˚{�b<콨S���O@���ׄVK�*�E�9M�
%x�
n:7���&}t�:�w%�>Mw����%�7�1����y�o����͞u�R�f38���@[��	�����B�/$��t���T@�'�T��zl�Վ�R8�v�JRX]Rʑ�ѾR˔	敓^۴�ٕ�
���i�`Ot���،�g�\3@]|\��?pQcC��$��&b~i�]�P��
�����������N��
+endstream
+endobj
+4187 0 obj <<
+/Type /FontDescriptor
+/FontName /PTPXIX+CMSL10
+/Flags 4
+/FontBBox [-62 -250 1123 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 79
+/XHeight 431
+/CharSet (/e/h/p/r/y)
+/FontFile 4186 0 R
+>> endobj
+4188 0 obj <<
+/Length1 979
+/Length2 4024
+/Length3 0
+/Length 4656      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<������YK��}�Œ��ke'{3�a�h
FֲE��$[H֒}�.KI!�.dM„,�������~������<�|���9��0���D�\Pz8,A�� �F�� 

��h�Qp�ՁP* LYh���P vQE
�"+�q�x��;ז�]�hz��h

�	�(/r
X�h! 
hb0���/| s�
+�B�A0�D#�
�
�A~��u�������I���>dS�8٤@���a1 �
+���Z(���S�n���ý~��=����{�1�]����%����c�]j��ۛ
+����w�
+�A#4�n �
���w�&���h�
p�c|P�QX俍�g��
���������;�+g
+Gc	��( �O�_
���£��=
��ȅ��?o7����E�h,�P(\�x<< D>
dR a �D�l���O �\�W

�{��@�C�2 A���P ��a ���?P����
+ �*�H��ad!�H���d!�?P
���@���x��@������!���wcZZ8b��E #� ��
+(*@��W!��Ga	����îh�IA��(h|���ZU���_L+�ÛV�9�*�x}�����%�o�-��]r���k/ HW�9�͠�@
H�[73�D�
�o�uG���vV�̘�q�E�Z�oB�Y�f�2�U�b.��X��ё��о�q��H��G�ٯ
��Vf�zn���p��=g
��8N�yڧ=��Ӕ�eQ��
1B%���} X�'�����!F�)�����:;�EY�V77��>w���Z
'����
Ax�N7�^p	7�AQ�����1V^>J�|C?PT�>�����W
Ё��
�@b{C�1u����1L)O�r��Ҥ�Y��u���O�wJ/��]`�����F�")d��Y�F��)yh�ԛ�s:���î�b-:�_���M�Js��6_o]!E���[�H�'|��x�1E��kJ$۪�H#���)�Z?g<Ds&
�Z}\H�֖�e�#5��Z��\CBw�O����B_ܺ��P��>N��{�V�
���B.��C��f�Z���|��i�f at i����ҽx�P��c��{"s�4�]W��37����O�]����
L>T�:�?%�m�+f�H��d�(�n9��/1�w�э�I
�����D�a�z��f��Dr����">�߽G���k��^���+�Ii����
�j<}J�m�
+O�
��i�6ފ�.+:�H��fI�6t���|;s粝ފ�f��Ș7ͣO�vm�!a�k7'PNR����j,Kb����/O�
+�f
�_xRp�MmkD	�q�@:|�i��B��XX��)�N��(+�hj�U��e�d��mz�c4�]�!v#.�
��V�\>�I�8/ڤ揧�!�8-�#x��$)�W+�
/�a�<�dğd�- 
TLo9�U%Nu��
����:M��+᥇���U�ZG��+ESd3<�GB�$�WC���-B�
�K��鿤Iu͗S����b�����Ν^�Ԋ�
�fE#�~�*_T��,	��&���v���jT��o�`�=B 	z��M
!
A�'�})����n����>nMѻ�~�p�g|��8�S�E)a��2���e�����f�_�:Y~뢕����J	���)
��Wz��x�e�*xz�a]F�yU�6���}�G
+)�^��L�����m���o-h9�?B����/0�HB�g�=�����1��S]�c�oh�T �V�xCy����|�h#Oa�6�!�d��,"}tR�K{,��GiB�si�|��L
z?���5A	�~j`
f��0S"dc#�
�
�;
����CW
6�v74�����9�:�9�N�
+=��]�=/\1
�)-4o���A_���;�W��S��{1
�5S&%�X�wΌN<�j����'%ԑW2R|���g>�p*fBV��XZ��w1��D#�N  �H�q9!
�f\
+����l�ԭ�������؂�٬��D���
+�jM�W�Bo�`޽p��d���Klyɣ:U,f���?_��-(�]x˘��)
��ʓFo�Πxox)_�m}�=<G�T�P
C�ͳQ�'�_af��m'Q#/Yvd�V��E��]��������I"s���|�/F�'�
�w
��a�b��=Dz�b^z����٬�Ð���tӮF���U��s�=
�A1Օ�H��Q�zl���7�U
C	ַLc�u������f&�!�5;b~�~9l�����U
+6?�
y�/&ϔ'|[<g?�}%.�����Ry��
+D���وwu8��-w�.@����*E��`�����Z�0g���0ܼ�u�t�@�Թ� ����g���޿0п�)	��`wAӼ�Yw�n���
�7?�c2��0��;�do���
A���1[�.ܙ�"rg",y�ϔv�*h�A���B�J�����^�4
�B�|��Eh�k��ac�4�0u.��
v!���>ӷ��y��J.C�������̰|�%1�t#TN(�|�8N���8X��
�j��[�Ƶ�S�E',�O�ìS�+I�f\�
/BR{�j�$+��Wxk��C���0�F
MY��f�a6e�?k:	$�5a��s�d>Sr]":���-{��'�Ʌ�%�)�������k�J��M�S��9�J
��#�j����%�
K������HNsT�T^�>k��
#���e%W�?�
��rU����#�*_F�x
ZRt�R�C/*�܌�RX���L7�V��}��v��2���TW;u�
Դ����|�
uH�V�c5�`��M����6A
9�[���s��r[/Y�mKP@ڞM-��`
+��k��Jz ca{���!�}�����P�A��w��&,{/�6��K�K8���$����=J
��L
40�&
�z����qџHf$��Um���4?���
+�ů�����NE�S(����_�Lk�.������^�k�X��ý|2�\k�#h����Ihn\��^z��]�S�C��
?�6�B
,��KmSu���"�js�&��N;�s7��� �gL�u��
A��ގ���y��ooh�1i6m���6=��
i��Ә��s�j�X0��!�6)礞����r��N��\_22�BJUo��3}"B{1ܶ|�y�cC
�Y�����ĺEFoeΜ��-�%m
�<e����y�>3-�������kl��@�bQߚ+5J#oK��˾��fB�j�
{����D�6[w�]����6n���
�ȶ�Ƀo�/�<��}�9��+i�s6���G`V4>9T)��6i�v��K9�����GŶx�q;(��~��62�qkMCw��v���q��D䥼z���Xi�g}΍��WB;·�pa
GJ�
�v'����l���H�^�vcѵ�_9��q#���I�1u�OFUb�Y�P{�N�
��{�X��/-0�6��ڄY^B�62��G��վ`�L��Л0�	��5t[;����ͯ�[;��t\o�/\�*����T�����{��
r
�e���
+�w�
59��~T�>����tG��S��䤙w���ᤔ��'L���);��_\���ι
1I&	�q��1��\6���S0pZZ��W��BZ�G�aKܽ[���MZgw���9Hwԓϗ���4� �d9S�[,r��/��M�P�M�+�X�>�c�l��<c(�Ju��

�i��P�����_�����;b�)}�~\tBz�/Ϗ��zcJV�
;}�8?&�2-Tu�~�V�+c}t�y#��-/s��y=P4�ǡ�~,eqOօ�%4�Lz����䯴`�pz������$�/�>+�.S�32
4�ۗ9	��_��'�,%Z�?8݁S[ƭMj�?\$P(�X�}?CY��G�"3��
��x<j�6
�Z3�S�Cd��O�_�X=�[�1��12�2���HXw~_��.�Mw�i�]����x'��\� ��ހJ�ww��8v8���z�XNTE�{$�p\����N��]�;��_���ۣ
ũ<�Y��7�v$�{A)�0��M,�{�X:.:]��_����f�l�՜ީjT�`��X��%�L��{�붾ᝧ�Q��@��v2{}�
8����e�g�Ipp��O^�\�
�{K5I,��67�2�D�fH����'z�/��^�,C�S�%�~nH�%�_ȷb�[���~g
%}>1[�v^u_5���x��kqS�7�O��B��Rr�����P8=�2n [...]
+v��_5f*�9�a����|�ž�ڗݟ��(_��Qv����GKy6�=M��L��{$$fV
��P`�R+Y��
�d�M�|$�r�bO;��.1�=�>�ȃD����E���,Dz���f1�	j�����Y=Z�tC̈́��nM�4�[�
��@G�"��{�x7�����_-�~
+endstream
+endobj
+4189 0 obj <<
+/Type /FontDescriptor
+/FontName /XWRTTW+CMSL9
+/Flags 4
+/FontBBox [-61 -250 1150 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 82
+/XHeight 431
+/CharSet (/a/c/d/e/f/g/i/l/m/n/o/p/r/s/t/u/x)
+/FontFile 4188 0 R
+>> endobj
+4190 0 obj <<
+/Length1 1194
+/Length2 3545
+/Length3 0
+/Length 4313      
+/Filter /FlateDecode
+>>
+stream
+xڭSy<�]%3*Bvz*�b��R����>f
L�
3c�"KdIBY�ւ����
)J%d�J��w�]��~�?Ϲ��\�:�}Y)S
%
�ԧ��JHR
�5�8�D H*+�Kqt"�|
G�����q�h �QWF��1PY@��Š����A�C?D@���82`�����,<�XP�D�΀:$`�c
0i �$��H$@ ��
�F$C�?�$�R ��0���O���X������ VD�Lb �
+7���YI���m��C"��<����x�'���CA���T��B ��Kπ��3	D��'�8�Cv#��R�@�'�4}�?H0%���+�D� ���(���
?{�VG�V᏾�$MqD2ݒ��_�k�5�JT�?`��!H����������x
+�Hv�Ѫ �J�1��	b��@  �	�? ���ad
+��`�&p�P�?ڪ��8//*���a��E��Q�,�J���@W�/��X�%�<X=t�
G"T�
��7 � �����<]�8<�O$������������]
+��D*�z���D/V
���,���	��&ge`݊�#�d�`��+#�ۏ�R�yi5 N$��D�/ge�3	���)e��D�헌�'�
+ '�n?�1�����` ܋u_
+�
+̊A�� YNT
���
����:��N#������w�X��������
+$R�`����}�TV���5��]���A

��5�ϥV^,
���-��l��y?��٦:$�H�@�0�r��}�
���*��'l��H�>�3�u\��/��κe��D7�^X1¢���� ��d������q1�&���K2��+2�m�nf�����_r�
6O<,-�.�9�&(��~��:4��Q�|��S'M�h���}�Ǹ]Vpk�PW߾>�)���3�~„o��c���?JDIG�.>���
"8��S�?j6.{5�4�$�}4���d

�4h�8%�6�r�*ڦ`rU�
��^6U-��ܤU�=d���N����[8���d���o�
�l%
3��vv!���{�n�_���n��M�I'g���O���j�˳p�ws*���yL�m�D2��
��q�q��9�Z޽�y�ᰌ0�JQ�����0@���F}H�,���oؔ���D��
Le�nm�L���t6�c"�G���&v^�PԠ$l/��)�.�Wm��9
6�H ��W�]����f�xS�ǁ@T
����_q�G^*P*RK[��o���=2�f�5=?�Q�1'Y�6|3�y;�?yc�����AڎR;[;�G�{]���>20	�>T�mhn>Yp�Y��dmX���M�B��k��Z�4����rZ 8nPi��u�3>�N������HN��{�"C׭K��PrG�ߔ>Y�t��^��*�ݘê��H$�d��v�z!�f�F��j�lY��i�H��C-{X嵗 �N
b�Qp_���HWb���!�/����+*8e�x�lU�8@�w�/��p���������%37%�LS���r�F	Q� [...]
+̿ӎ��=w%�}l����X����;_ӛ�U�:��v)�e�|eF
R,Q����Yz�Q���1KM����
G���!N�n\r��S�E[I�מ���{��bΗD�d�ͩxZ�`<�
�h�y����.
�[ө��AO�
�
~ p+:����<�$�d,;^��a]�/��i0���H��9�W���-��V�B~�������O�s�w~Qڕ
�QU9T�
: ��!��>�dH�$� ��l߁���+�J����}�#�х���ޅeI��'�坐&N���:zucCL܁���,+����0��ڶ��3���W摻
+uN��#���i�w^�
��v[��
�[
����p�^.���y�
+�L��n ^�����֧��E��.��
;�p���2/nv#PU󽛴�W�v�*$�E@
b};�'x�S�W"F��(�a�z�R։�tr$.֒��d��Ѽm�
Ѩd	_@�v0��%�v{�8{Q��U@�;3d�dac�aly&�+<(Ug����J�;�)v�t���	�x�`!�e����<��C/�a����<���\��~nvsM
�oI+�
�v�d�
c���Vjx�%B�1$G��̖�
+|���)�W*�̱?U�J4H�)�{
�'��e�I�椞���Qɉ՗�AV_�rt�]�m�#q��`���1��I�qtm��u`�b�ؼ��`!�~�a<�U�3<�Q��l�<�
=&V�U�Y��r�A�ru��g?��x0 �n��{�������Bm��&(�	��3���~6�³���>5H�j�=5��iiF����'cVw�U���Uk�
͚��T
��C#e�zK�����|h� 24�Q���f�9�^7��{��

ӒJ��	�j�˜�殴�UY�n~f��#}��3}�²7(GM/�c#N���u����U���
�l�d��[&c!��`��8���u�nNA����J�[7��
���t.	Z?��
����
����Ѯ�=<�ۺ�y���v��=����gKX=�F�Ѵ�'���63N
���"�G���
xd��_�)��
v�?��A�\Ur�� E8{qy5��c�H%��Z�'�EDS�+�}ZQ��*fQ� 74�y������3|�Z��uw���QV!���>�
&��^tD��dS��i/�Z�?� ��\�Å�Y�Ȱ�[
,8�;}Fܼg���3־ ��3����W�	<��[�ی��)C���C���d��e��z
X�F]�E��!�b�R�J�R�ϱ c�|b"��l۱��1�/Q�q�F��!oK:���V��x��l-�^@��/�
�
+���5�E�
l��� t[]v
y�zR���m�Ö@����e����̌����.1�goO
��]������W�O�����=���S~���=�M�X$߇������OuAEOo���\��U����O��-���h��x���+
ە^�;��ۋL�Y����}��Qev�[_���%�.�]�+'�|�c�K�S��S^˩�jY�Ͼ�\�ޛ���~kmY]�
{e�9iH�7�B�ա�d�v!���P�V��#i�1�»���4�=!�����>���ݤ<o}�Ny�������ɼ,��0'��DF��HF�����޺Y���@{u�FՌ���}�L|��e(�C?��NO�M��5�Ŀ��C*e�D�Eq�O�O����]��Xcgި�E�������%�>N2&q�
�6����m�Y��8^mlOI��i������_w0bT�����dj��(9o8$��/�r?�	����]�y��[!���b��I�{�4f
�Z
�6�?Y�)�:�O�������[��:͂!��
�'���	/=��7��&���.yL�T^�E�8�
_��
�m�|�GE,q_}ۇ�� �]�SfN��[��GJ3��e�
ru��V��\���=џ�c9Ŕ����J�
z���a̡�\j�\!Tb��2��j�|I��:���m��`W�
+���~b�N�"��w
~/��E�����,hg�Bmy�m�;�5S�Mk��C
9m�Q*�3~u�[@1�/�Q�䪫�6�os�k�j���
q���u�[��Qg�k��<�[ծLL[L��§6��;n��,�u6d��TjjE۪���W؈(oL����m�&��w��|11j��
��
ߺ���?@,'\X1:C\tԲ�cʶ�
�R���0�
�KES?��l�ΰa���'Ӂ��
81>r����Յ�q�
�ĄtjI�^ly��jR8fn
��lq��k*��RѺ��
�>ρ2�F�<r�#Œ.��S>2O�i��N���lY0,p
V%tq9����O,N�
?��Y�R�pB3�X,�3w�u1+x|t��h�o��z�bD��R��u����I)q��ώ���띵�����g
uʤ���	�{�2�iK9��9	Szm3�t���� �\t{m�r�	�5%�!��O�g�W�W<��n֕f�ݒ@�".�	2
W��(��Jh9��m�S���<\���^b7Fc;V.�<ew:�����d���7�9�d|
�F9��͜afP��	���>��=�cz�C�ze�k[{&\��4�]�8]WE�t��W\�ԑ��V�^�	���c���)
+("!ŗ��~�ڥ����w�cK����=@�vN~�Z"��
+��x� �M
+B;@Ϋt�wT��5� ������'��,U�)VU~p�z�ۆ���*�Ϧ�_�]���02S�Ry����F,;\�t�hPrŞ}�^�F�����N�
+endstream
+endobj
+4191 0 obj <<
+/Type /FontDescriptor
+/FontName /YOZAEZ+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 85
+/XHeight 431
+/CharSet (/approxequal/arrowleft/asteriskmath/bar/bardbl/braceleft/braceright/bullet/circlemultiply/element/equivalence/greaterequal/infinity/lessequal/minus/multiply/negationslash/periodcentered/radical/section/similar)
+/FontFile 4190 0 R
+>> endobj
+4192 0 obj <<
+/Length1 745
+/Length2 604
+/Length3 0
+/Length 1118      
+/Filter /FlateDecode
+>>
+stream
+x�SU
�uL�OJu��+�5�3�Rp�
�4U0�3�RUu.JM,���sI,I�R0��4Tp,MW04U00�22�24�RUp�/�,�L�(Q�p�)2Wp�M-�LN�S�M,�H����������ZR������Q��Z�ZT����eh����\������ǥr�g^Z��9D8�� &U�ZT
t��Б�
+@'����T*���q����J���B7ܭ4'�/1d<(�0�s3s*�
+�s
JKR�|�SR��Е��B�曚�Y��.�Y����옗����kh�g`l
+��,vˬHM	�,I�PHK�)N��楠;z`��Fx�xiCb,���WRY��`�P
�"��0*ʬP�6�300*B+�.׼���̼t#S3�Ģ��J.�QF��
+Ն
+�y)�
+�@���� �( C�V!-��
�&
+�E�@���0���_Qmd��kib�`hTnniX��.���(5��N�a�e�/5�"5����d떬���Vֹ.���U��牵/o���Q7;3�6�t^�bzɒW
m�;,�}Q�+�z�p��^���/���l�Z�,bB��~����]�x�i���<\6cN�#i��E�gu*����\�g^�
�����߻�-�4IKI���
+���b�w�_�#���</:����A��o[���~�����*�������k�����U�/fk��[�j�+��U��L=�\�0����n��m�!*2%��X*�������&����
gUOR[s�y'wP��^S��5�>����򥐠�
OT	d(��,�����w9�_�w�\x�ۭ��9�9������Lh�_��*_�r~�&b6q
��r�v'^mޮ��c沷U�>�1viǬ\�J|���EL8��m���7f_>1߶w׉8�01�Ъ����/��\ݞ�|9���c�ɕ9]��Ϫ9�w�\��p��
�k�;zo���<�����_��x��]��]�4^&DLH��
׵6M�A!�K��|,���}�~����_n�h����y�������E_���ú���3��5O\B�C��.ts[43�~V���z��*�
sl�`���rMGB���h1��z�.�b�<�'>V����y������3��a�+�֬b�!�͌�#����~h����M� �!
�
+endstream
+endobj
+4193 0 obj <<
+/Type /FontDescriptor
+/FontName /EXPITJ+CMSY5
+/Flags 4
+/FontBBox [21 -944 1448 791]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 101
+/XHeight 431
+/CharSet (/prime)
+/FontFile 4192 0 R
+>> endobj
+4194 0 obj <<
+/Length1 787
+/Length2 883
+/Length3 0
+/Length 1423      
+/Filter /FlateDecode
+>>
+stream
+xڭR}4Ti
+k��Q�Gb�ǝL���
!��c̽3nƽ�Υ��LԢ�$'ꔥF��P>Z%%�Q'QZv�b��h�-��Ŷ�տ{���y���>��{-V�0�a<q�1�1!{��
��M��p%!�☛�D�dg�8	���ͳ�@�\���2%�J�H���jR��1�����QH
�C$�� \�"��	��R�?�C�9B�#0�A FE$�D$(FcM�cb
�a8N���G9e
+��LZ�"�cR%�1��Sg!��������qR��0f��dH_��T��G����H� �8��Li02���Ѹ��,�JQ�3&�"��2٫��*wG싒�( J���`�L+TzSFX^A!�G����+D12P)C ��x��>�TF� al&�
QBj}��:�
��QL8�5 at HB%�M��p�@�@�a�Ij
��Q1N�&����r*)T
M�$j���ـ�bq�۵�%#P�R�ȗ�uq�*�6v\@
.��r�����ȩE����T��@D��v\䐴�HeJ��
�-guY�cM%�;���;���:���BB�8�S�^o}��S�eH\Zr�g��ư�"��iAF"��� #�i�s?�-������$���_#z����t��'4�Ʌ�]B�k�t�,��ϴ63�u��뚵�H���Տ��5�h^OٽD�l��Aω��5���SG����L���r���7n�w��0>w�n
�2T���V�~
ceu��Eu���V��ڷ���|�mS���h����9\
^
>�ُ�O��C9��4N�*f�IU�}�Ȱ+U:�|}_0�5=
)Y�V�$�Ħ��j\�|�E��WkZ껰
����ڍ	�s#��.�������JLj��yt���
��]��
Xt:���[�Y�GZ���*���yh�G
x=��[^��^���v@�����)�
��{�:���
�
=nw���zm	�9�=tU�;��z�� /|מ��Z�����;��l{����~nVPZ�[�Z
����}{�����zx�A;�"{k�xel�ň&�e�F�ɛ���(�i�:��0�|韝'є����$Ff��jHz���5]�1�V�삧���wދJO8���M����{ۘ��nי[�L��6�"�y'�����7y�nL��
r	�ͼ�2h�Ǡw*}�z��V�Zݖ][��V�,E�
+[�:A�5��B����m�_���oR�
{2��X�3
qe�O,����
���]u��ei�GK���-{�F?�{=�q_5)��\5�tk��
��cz+����
��q�q����鷞��������u�g���0mմΗ�k\�<�d��
��4���Ə���t��w&n掙�ܹj�o
��ܴ+F�tg�?H�晛���g��a�L
�&L<��[�s
�?�5v�Y��5+��+�

:�7
-��
+endstream
+endobj
+4195 0 obj <<
+/Type /FontDescriptor
+/FontName /LUYYYY+CMSY7
+/Flags 4
+/FontBBox [-15 -951 1252 782]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 93
+/XHeight 431
+/CharSet (/asteriskmath/minus/prime)
+/FontFile 4194 0 R
+>> endobj
+4196 0 obj <<
+/Length1 749
+/Length2 740
+/Length3 0
+/Length 1259      
+/Filter /FlateDecode
+>>
+stream
+xڭ�}PG�E���?C�����|$w� �X	�+�BD���n	��
^���b��
+�8��RT��TQk����:�(0El��ҡ��|X���8�;�Ͼ�<��o�]�kx���d �М7*F@�P1"�T,�9��W�
T T.G�2U
P@�R��M@Ť�YJ��w�b��(�����8��|ׁH�� g�N"l;
  k��X����$@-E
$6 5�� ��e25�d�����<�b�#�
�3&
+$a
�I���ͱT�.
����BzM�������ѧ�r��
	Yz�u

e
�$����9\GJZ���]"F|d�e�($�)�H��� G�!M�E����PaXh��諎h�8Esk�) ��#5���3b)�C���F~��ŏ9k%M0$Ek�T�
p����o%��@:
+(��& M<�DL3
���d�D��
�"@b������7	
+bL��>��MQ�_����1�,
in��y��)>CM���2��ϓ�Ul=�yeqS�D�ó�S���k�+7�ȌHY�jW-W�{�~����]B��������
۾���'�s�F�̔Ո�"��ܽS^x.�U_޴�����(jخ�
7���n��M."�_���8�#b�ǂ�~���-v��fKO��
W�������<>��cs�8�^U�>�t�[�m���I�K�Bj��6��췴�Xp��%�w��Ʉ&d��Fi�_C��I�e���g����Q?��ǟ~�v�
X�dBf�n���"��
�Y
����X
�hK%wJ�i��v(a�|y�
8�Y�M�4�(.���
��\�t7�Z�[4G�
׮9��ٱsY9q�?��9(^�u>s&�]=�!��u����M����݈��w~�*���t�q��wb*������l� #O?��-�<����*λ=~v�>��X�f��'y��76��[���=ey���ZL=��f�C|�ܐnU�UNw
~̯T��#�7�V�ab�ۜ����څ5��
+oꌾ—x��`f�˩���=���K��3,n�=NS2,�
NG�*���`���2E�d`��5�xG����]�������]�)�_e(�|u��2$~��g�n��s��A�I
^Q8��8Ǭ̠kA‚Mv�J�Y
6yh񬒏�[��E��5'*���U����*��W=��L�s�"�q���;��5��Q撫+��_����LE>H+�r�h=� N����������Z�V���)!4^.�
�>\�ҟ�
��8�W�9*ZP
+endstream
+endobj
+4197 0 obj <<
+/Type /FontDescriptor
+/FontName /DCFFMU+CMSY8
+/Flags 4
+/FontBBox [-30 -955 1185 779]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 89
+/XHeight 431
+/CharSet (/section)
+/FontFile 4196 0 R
+>> endobj
+4198 0 obj <<
+/Length1 1438
+/Length2 10727
+/Length3 0
+/Length 11566     
+/Filter /FlateDecode
+>>
+stream
+xڭ�UX\Ͷ�q	�4�Ҹww�i�]�;��w���{����9�k����y�/�;j�W�s��jJR%UFa;#����3#�	�
�W�� �L,,"����� Cg
;[1Cg/ ���
+� �]�}y98y���� Q;{G
3sg �(�?I\ a�����-@���
d�alh
P�3� 9{0���*��p���@�� &D `ba�
0�Y�"2��I�����ﰉ�����
��Lh�e��f�����`2EdV�{[
��������p��V0��G�_���
m,�=�'��������39��w�&����A&.6�=*�lhma,lkf
0ٙX��
�p��p�(Y8�L
��@���lM���[���YEVRSZ��n��
-l��<�A �?��b�~k���;@�����ķ��^���b��v&�f VN�������C�F
 / ���� ��9ff��s~�x�7�������`�'�o�0��!n ���0����X�R�
�,����2�MS��i*��7M��7
�Y��i���7M�����l�b{�4��{4
���rޢF�m%���������
 ���&!�
�
��5��o��!�?h��xsnj�����_����3o��=��A�e��,�BN ��_�V��_�V��_�V��_^�
+�K��v�[a���
�:�l��{�~[���v5�V��_�V��_����/|p�
�����o�]��7�n��Ϳ�_�f��_��n:;w/F '�����S� 
N
��+����@�����������v��Aƈ�sv�|A�)M!�>���e��N�i�A���
i|LG�|�3��j ���,-�ђOd+�ML9�񚄿
x�2/|@Ƥ�MW�?3>��5��ߋj���H�m�L�D~���	[-w ���;��)��{���
[_DJ5!�IF��n�Ki�Ŏ<
K���-�|N��xY��]��ZFN�g�CϦ	<�c�u7�CfX�,j}�z�i�C%er�SJ[P@�*.v��Fd9m	��Cz�)
+��x}�\���Iw8`r�b��!�
&�K�`�x#�ۙ�<�
��s��z��!iƴd��dB���a�=�9j&wDPh�D�
�> ;g���\�
��qQ>�N-I��U��k1
FB>ճo���!����W@�l/����b��W��Ѣ��p��}KZ0��)���gܧ0:�
K9zv#e���\"$�0�A\�Q#��֓���
+-4m~4%�e�G��������?rw�fqEG"����غ:�8s��AC��a���X����N���UL�r�F�f�R�uV��	/>:s���2��i@�C�	7,�n�Ļ/R���C�j�H[:�]c�~��COq��_�CĿ�W�h
ݣR�w�ͨo����D*J5]ވ�&W�Ĉ'�L^U��/D��X\i��፳sz�
+����H
�G�t�>�/�X�>G93��&��=�-U�̸�z�OG�7��
"�;<C ���k�Vk�?�r!�g�J�6l�Y����9��N�	e�4�����Y��1�y�����&�ROQ���;�R�w�^��||�6�����z�EI at jQ�d����m
�t�u�+�8��/���C���b
����g
+�c������1��V&x�T�z��
kt�Pz�����O��
$ٺp+�p�m�r>>BЂ?��pF����mO�^���C�
=���!Ѭ��u�U���q$��ڱ��l���n���$Ի���D�3������j�D���q�T ��ÇH�Ie����
�{� ���YbZ���îs at h����L��UՂ�xo�
+��wR<l��_1�+z�D`��B�!�$ST�O���Iρc���A�=z%� �pW���'Q� ϡ:M��@$�;���{8]�?2jG�5�8A�P�œ�kV�r��R��v��a
+������|��>��÷�q�BzI�|Q{�E8� f��
��Ʊ��7^�)�
q��{ $v����T&Oqw4eD�o@�G����R�a ����/����O����,5"ƃ2)H���(p1�^ѻ��*@B�9�_e��p����j[���;�R�G0�W�;x[��1�0: W�t
� �9g��*����qG�D�Z��K�⫬����0�޲�P��$*����-�k`ڈ
���G��Ⱥc� &��
�>:q�фǰ�R_�S�����:��̋(.��F�"	#�[��4H�<��;�U����wP��m��k�~4�(�+b���qS8/�x͇k�*|�h")Ù޺O!�eߕ��,cV��%+������*]M�"Q�a�@q%���z�m9N�|����l���!W"�q�#�='�p0�
b�ܫ|�k9��-$,?�.���h�!Y�2@@���1���˫�hߢC
�LA�LW��
[&��Q�	�F
5�n�	%
I�z�]��YO�-�zZ-q�L{a5�m/�B;a��>U�{m�KG|��YJP97%}
����:;��c�\�6�u��^0EaX���<�]�EϞ��&gԊO���>r�k��m�v=i����祠D�P�8�/�T>����Û��t�I�GŔ 	�u��S
�
F��c>jf�R��4*Z�
:��?�Vv��	wt���1��V�s5<M��	�W
+T���i
����M��6d����!������Jp���$��[v�c�������T���UPp����lC��\���h_�+�ڒ�/8��
5u!�\�T��
��,�P�Z�m1����/�s�鶤�eA��CX��������`~
T�҃��Y(�%Xi�(Մ
�i���4�=J���
�.�߲}v��sQi���M�(��<��J�� ������H�K�)���
���>g�� "doWaz88�	@Q�}Z�
������X���ZI!ty�,Qma\�I��1�j_K�� '��5|�
�6��w�5 at 7ׁ��q&:?�
��.�D���],u�6��m1�Z�qD�J� m�%y?�t�a(�\�y1��0
/W
-aB8͢:�VGG��ʆ�'�i" ��^�~��M�����E�a�#h������
��.����
+�.Zp{���,��aj��ht��kL���'_�
�"����t���H�
���w%�lF?����[}�
����eI���h�VLM�PLb�2�s���y!�l�-W�n"��_�v�x�c����EF
W��بD6�Qv�aNq�6t�������{�C)�`e��	�
l¦�`�+h�4_5_��͟���z�����=�0�yy9���r�(4��,

A/��]��Z2Ĩ�����t�3p�K�]�+�dmw����@,�B+x�y��^4.�}�GWzOI=���k�⻈��R$PV��E�K�����>y1��i��*�t�v�1�
��Q��
����bwt�%��<��[�,9r�&�Z����dt+�ɷ�i>�����:0�)ד�V�4�Ӿ���3}����{����@ڭR���6��;4
+����r���fK���8��9\&Љ0v�Ӿڥ�!��2}�з�7�G&`?.��X��P��B�yB�����?6SY9��z��'Fqx�P>7�#�"���g�
�xϬ;�%*b�����-�-m�acJ̥
��aC�I�
+ѻ~��7��$��Tm�F�S5�}�m��ǣ�� 7>6'r%�s��p�Ž΃�riл"�y�h�"BS���a񅍶�!�� V��O�4u�ޏ�2������
��/�0��
�u����u��̳�@�� L5!<R-��0���>������rX��Ȋ��&ƕ����9�LQ0�o�*��1l������<
������fy���T|� [xÛ4��&�I���n!)��|����q��ᑜ�b�h��~�ʵL-;�r�=�s��
b���h��3���]3=9�j�

���n��{���^��=d7W�:I.
;�h,X��2n$i�����E���0b�T��EW1d��L
�9a$��6��O�E�s�Mgg�����J��=�G)�^�sI/+����&\f2~-e

Q�c�Z*0�!
�`Q�~�GB�6-d��~b�:��*�Rgc
�
�|�};9kB���⺺�!�1(��"LJ�c�b�+T_������_�UhW��x�^G��|�h7��#��
��
�$�
�����&X����t�F��ݱ]�C=LB����|�'Og�,&�	�S�
+4�5����P}�X��n�[1�D
2?'>�׎~��M��!�z��k��6��+���("��
l�
�0A
.i�ɗ6<F�y�M�����|�>�� �`U����) ���iTa��i�m���&@۳+-
R�u��Tv�#?[�^�²G.uV~k֠"`�%y�D�Œb��}Dž��%�2e!��@h��HO�d�!���s\2���D�)
A���s"`��
WO�
�.
���1%~���8�5�5�r�GQ�|���ꂈ�n���	�G�)k�
�����Q�}�_�;Z���0���"���D"b�r73Z�~n��F<2�Ґq�k�]e}�-Ú`�j����fխ
P��� l�ݍ+rd"w��������.���>I	���,)�2a�{�;�|F
����j�(��_��🋳D$Ś�8���
�ٍ_���8����2�J��d!�nC%�����q���u��
��~p0��ψ)d>�!�θ�Ԟ)΂�ݿ��X�G#Q�ݲ5�,=Q��},�mÎ�ʅ�U��c�@�pz���h�c�z�;�c��
A��Y�W�/[��4GM��QV�����G�;�M
�8�T)�A��y�.�Ҧ���-vϑ�(<r��Me���Oz�5��y��f�鈭�w?���#�jvZ� +i�������蟍r��Pp
y��c6���D�UG�D�KFV������t
y�Ě3O�@��^x{
���%E�Ux�w��6�E	�j�[�D�����ߏ�ᆳ�-��P��8{�Y*ף�tPp�A�x�8o'�Qה��_�?B��NO�ex�w��eN>�T�
#
W���嘁�r�a]�Ԇ���>i*	Ί���w�Ir
��`��Έ~�V��i�C9-� #zK��a��FW!�<���P!<��jtg+�Zk�6al���%s�[�[n�~��U��
d�[��E�ҩ�8���
bdV���Ӟ�Xـ�)�n+]d]R��>�B~�6އ
)a��Ye
�U������a���b9 ܩ̦qf	
J_>�
>��j�TA������Ѻ���aCFb��
�ɩ/pט@`�IM%[.�7!3��l�����ϻ��Uظ�������������7gi&�
���G4�-�<�Y��Mώ���Zz�5�ҝ�c�5(�a�A at J�E�LLJLq�TC:�� }* a$h6n����@�+�i�g�
0;%ҋ����,��"� �ʽ�y�A�z����<�]��Vr�и��� ڌ�4Y�t��_��	��g��6��՝._�#�+Ϩ�2��Q���:��xp��-���a��)�m�$�P�v�f
/Ε.._Y�!�\eU�
+����>��Ƴ4��E���
+����{�1�c���ב�q�`�cu����3z���
�+�
+FA �m�7:�� �ɕj�l�V�iN�D
+�9ȑ�m2�Vlw���!��Í��7��_d|��-��i����
m��E&1�J@�z�Z����$��&��1���$�&|�T�[5���Es�K@��w�&�?�
���Ce�iD$�A���0ˉ��LV�IO���/�B��� C���+b��Nr���0�
���휞{��Кv
���d!��q�S|RY�4�m�Y��R$K�逵q�
m�Xo	��.ur�m���ycHG��l��*��@��4����n��328�<E.�#���nȱ�4���5dm�^��k.vƲ
z:d�y���s!��6ֳifƘm+u��v=���e鏀d}Z�;��B�σ�.a�D`���1�0�,�Q�3�A��~���۱ڧ��*����w�6�aPn��u��E����ݣo6C��$����ӫ1&��v~�@�]o���s���j��ͷ1�t���
U�s���+�
<�ņ�:i$�
+_,\X
'�r��6K��	˶�xϒ$��>�
f��+��j���PF�����L,au?�U�]BJ�z�
+
]bB9$�BѬ��7?e�x��]�m}%!6ӄ,��� >H��ݹI.-|${��)����	;j���/�J@ߋ�i4���c�{7
I�
x�Х�w�};�aA��7p��%�Wʕ|)��ʓ=_�r���z�����c3�:.l�2_��lZ�[e�Ap�(fq
�;��&}M��vs&/zl<�N3�B�D$�ֈ�:�ّ����1����&a�	����cُF����;!�
��%߈��.r7I��U���������;F�F_��^l���"�W����J��r'?� �"QC�pL�[4ffT�֠�|�(eCdNg죍%
<+?�.�r�<�ݠ?�4�Pg�"�����l~����ό^ta���x�QNH���~
#��$bs�۝
��
^���
өP�|��T��4�G��ζ��&�@��V�Th�_	s��Zl'��`�`ƉE�����)0<�U6B\S����1&��u+
Lt5��?�hT�ƿ�O������������F;�ݺ��b�G��06�n�A�!���6�4
۾@��9 Zԗ��贉�zO~
w��$�v��w�.C|�L��cC�X^�9�Hٱ���T{a��5�<u�6*��S(�mX��צ����Ij��G
����j�涨�nɦeg���_���J��p̪�H[[�1�ۙu�>Y|V�������5�
+@���
]�
�93�mR�a5����Q
�t��ef��ْ��6�O��
1R�7e(��3F�/�zX�Z��f`߿#v�Z���f*��3�u�"�RA�U���;9l
�`:p�to^'�Pf~0F�)��Wj�qq�^��.�輇R��~-Eԁֺ����
��B[��׿��T]�To3�PVH5�:�UY�V�4�*~�s{+��S_h�H�=�M�ϬS[z�����x�q�:�?
+����
+�OJR�Y�I��g���
�
�g���霄Ջ�́��y��N�������ȍ+��̬��� ޕ�r��QDJ~C�DY,����{?ML�\?��6��W.p�K�O��u��YҜ�q���K
���E�@����}�!�~��xD���[�(��N�,��T���K�t/�Pm���R�lQ���
{��
�U!�Z��-�K�BؿLV�x�j�.��ߪC=��VE�)�Pl�>�W����F�2��z��S_Q��Y~f�`�8�����A��+s:cي_3�՛'1�x�XAW�P�
����@�Pr
0
/ƅ눛�
�/*���w����*�P�T�V�^Q�vl^n����i2���|k0�f�a�Y8�d��(?sl�A�cG"��
+fﰻ�� �R�ծ�O�^���w�^�L��M{��q�{grZ*��L
8�A��u��&���D2�
t3��N����d�+���j]u*�
l�:m�Le+A�9��7?�&��p\�_�g�.�� �ոQ���G����Ï���t��|�Xt�c˹$
+��ׁ�Y��������
�µI�X�>�f��L5�R�v��"O!�b���$��V��9�w��;�s����;����"Su��q�(*�)���ko
+�U
+�y*IH�<�E��
������ib�+��6�&0k$a�o��C��Qd�!�
������O�m��;*
�r=��,c������e{j��Q�hWMq��>bv�.�*���ͫ��	>�a�"��I�x�7�dE��w�%���hk��hp'_n�3N�m���t�Pz5{Sh
!�Ss:�L=!0�5&��͎A�9\ƍ�����M��R�	
Iv�=ӈ�;��	l^��n�,�r'Ѝ����m�n��M����R˹E��~[
ƇR)E����H���xe�$?*�`���KiNByi�����"|PJ�
+��HQ�
U)�z
{'���Y��������s}�o�u�Wc����=" gE� _��>MBf����Ԣ>s��^�r���#Q��p>&i�g�B���s��ӐP����cB
��M
�C����
֐\+�j����x{+�YŒ�=�<����
L=�릷
�;y���UpRWW>�
3 ��P��~���}O��7��$o%v��9+
����HW�~�0Z�h�T%��ܣ�~��)���UvGׅU�Pg˨��8b
5����K����q�
v�<��]��w�G��:���̾�H����Pݝ����6E����Ѣ�Y���jB��� ф��:m*Ji����jB�P8 at Q���	N
G����	���i��{�:x�H���M
+�q�3���B��<�
�L/��2:�'֔a
��'�c�ֱ&�ϖ���3��.^{��`o��%��	���y���0YQ�C:'{��4R<���M��u��Bo�,��0�#Ȥ?���� ���ok�F�0g�JTs�M��R���|
����,�V�U'�Aϝ�
S[
���?�MȪA��{:�Xx��F)��Uh.��:�f_c���Ë(.�)z��+4��\�NX�;k
�cN�+�M�
�"�rg‡�O
+���de�6o��jqqpL}'�
P |������0̹��
l�`[���"m1��U��ب���*т�
N�X
�A>��

�S{�
]��G��Ҍ��#F��̲o[\
����4�v��j |��N�u��ei�:/S�;>~�z"
5�^�V�	
(J0qF͕�I$��)�:Ȍ�M
+[%�5�
{�O�t�����x>p	Ϯ�r7™�+����m���,�:�LzC.eI��̙����c��$[ĥ��m��Lí����wO�n����ڨ�.��;a��
+�2�ƽ��7�����ޥ��j�a��fe|.
��f0c�+(t5�t���d¬>E�u�8�M�l��10�(�;g�=+�Bv�k���{Λyң�U4Hh������B��5�oS��մWuP-
+XZ��?�:�
1+>�i|��yvX���R�W�_����Q%�:���jhxO}���p�Ϧ�3���W,�'�J��	��D�>&�B%�ߩ$w��1X��gc)��v�
!vhY�?y�=R/���&Y��𽐻7�ԣ
[��W{�f���4�}N$^|
+��O�%+�AC-��mp�)兞6F
l��]U&%*3�R/��E��O'�:~R4���9t�l�dpU\�X� �a)�@VU���q������
y7w�&N��үv5޳���'�o�_�r�R�v� �x�H
���(;�ɿ=�x�dpK%ڃ�,W���%G�
+����
6�#4���Y�o���ծf�14�
+���ԏ����[�Nf�q�8��g�`�~A1>����Q�|���U�Pt�/&���$���K3s���g6 FKi+&�Wu ��O�e�3B�I�/�Ձ��{8�&�-��À�c��� $�0�R�#�%�̮�J�6�׹T�
�*�|t [Z��6uC���d�PL�0p�ms��M�c����Ll�j�d�ԍ�	a�Af
�Z�dz;�V�k�HuE��x�Arm���ز�~���]l<�[�4�k�Rֵ}Z�,�_�͌7a�B�V�>&@�U_o�\�3 	��@�W������I������	Y6�ҥ��A�qn�$ӧ�o�rKj���g�C�A&�]�q
�
��fȥ��:�tf����e�%_�K�Ww�h���Ѡu�.#V\��d�H
r�/qƘ ���b>'�Oe򇸜�W&7Ut��P^
�I�߳5^>��
 0R������Ni�
���5�6t��
W�UA|-�5�w�C�ڃw��\��&N4����B��@c��eCh �]��P��
X�����B¼�#�đe������%s5���b�3J���՘��ʵ[	x���]�DLh�x���������J�����%I���փ�n��ʘ•3xHGnF�5S��f�EnS�
g.{��G�U1��]8I�^��B.o��	1��b�����#ě����ؤ�_]N���צ���.�j���0I��d]	
�ܩ�

�%��`«��~���^L*��S�
~c<�$Ig����ԴՄ��AG�����t��?랠���l���0!��A�\꺜M��<��Vӹ�6���'jB�D4���N
+�5�����#?�2�߹�{\�:\���F�כ��_E�U!RL�4|ދ��n�s�!�����_��aA�<�
*�i,lώ::j�:�
�s�Zv��nHc���c�[�Cal@�w��,�yeNW�*��ٝ�{eY~�5�P*t���n&7�Ri=q�@�
��
�
���݈�Z�R}��G���?�W3�����xu�L�Xt��!���)�U��9Dru�U�2�1�8�b�Jzy�����vF��|��4ԩb��[>�p�#�f��K�4O��f����!�����ת���T�0��D��k1q}w�"
QdH=����n�I��mv4H[�E9��dy�Q�
ʑ�[����@��'ݺ��yі���	q�W�"������nGN�5�*vg
z�6F��w�n�$p/dgX
�8��x���ԓav�g�dA�e�&����BP+Xy%���
���d�H��%��Y��> �0&^����(}4P�j
� 6(�
༠sd �Mˇ[�j�w�D
��
O�
�;%�I��iK��
ά&�O̴���
{a�Z
^"�8�?\���a����ҢP���Ӆ-	����cE�(F
s~~�)ij`�!}����)A
�
p��-�����t�
�Ө�@�����f� ��0]!�����G����? LA�h����,�z�G7���RŸl>�N�`I;���Xe��	nYR>)���Q7f��HG��jчsX�+��K�1U���T��|L�І���d��9�9�#�4�EC'���/�o�~�
+����
�q��m��Tj��S�9�̬Z2s<��
r�U�H��S���P���#��47a���V��K���X�~�^��
�o��1�
cT)�x�j�A�uq3^�ƧL�!*md���}𥳐5
�&�_w�<�o�=1N٩����UM�o���S0��ҕ���iNTgDO���8K97yb�
�g�^>w��AK��pH��K�6�M�+(D6y��A�20^����Nnֽ��*�>�4iB�Lݢ��L�z��4
��̂�Qr����-��.��'丅]b.TX
+w�^�^��?Y۵����	�N`u
׋l�9�����R���C�ivR�E��
z�w at e�ڧ���W:gfP��P��?и�
4�BǓ�Z�*�z��Iq��	$ͥ�� oEɬ�]Q�O�>���
x
+�$.����}��@Y4
{�,oZi��dL�6k��f���9B2�hv�O�g��q�B��ptl��Խ��j΅�o�J�ZN
+z]�!SX	�L�nE�v4J�Zy��S�k��9�
���F�5��P�G0���^;hU���	�;�]럴��]��<YS*'U\����9�3
+endstream
+endobj
+4199 0 obj <<
+/Type /FontDescriptor
+/FontName /RKGWIN+CMTI10
+/Flags 4
+/FontBBox [-163 -250 1146 969]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 68
+/XHeight 431
+/CharSet (/A/C/D/E/H/I/J/M/N/O/P/S/T/a/ampersand/b/c/comma/d/e/f/ff/ffl/five/g/h/hyphen/i/j/k/l/m/n/o/p/parenright/period/q/r/s/t/u/v/w/x/y)
+/FontFile 4198 0 R
+>> endobj
+4200 0 obj <<
+/Length1 1097
+/Length2 5697
+/Length3 0
+/Length 6380      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\�۷ǑnQ��G�Bf�#�Hw3

1CHHHI	H#J��"� %�H7H��(\������~�7�w�����ޛ󮎾��
���Fy
+@�C$M5� �&��T� `�H4J扐 P(��r  �D,&)*L�	(��|1HGO�G�g�8 �� �0�	�tD�^���\ }4
���ȹ� z�� �
�7��>)�!ក-��"�ӑ�

��+l�����7�qm
+�6	�-ڡQ.��
žTP
}���v��a�͕�\\�`���kJ�'sE��������� �h;��RcĿ�i"�^��̪y�\�p9��
�����+��PF� �t��pG�
���+�@��������!��d�hd���c�+�C�<
|� ����7_	������`�u����?��)��h;$�`
̗|�JHT� H�
�@�\;��B{^/�' أ1����( (�g�_$*���� ��� ��_���K�,���+m�&( �/A�`@��7� ���P���$�o�kQ�������kY���Z��o�\�~�k]�ox���� ����z����n�~�k]���Z��o[���
��%��G��
�B��?-
+���U��`(Ͽ���U��#�o'Ⴠ�N���RaNiUE�J�C� 挂����2��o�K�
�T Xo��rB��J��(��]d��{��/>y�����B�h�ma�ە��z��U��ۊ[5��4�ɂ�g�����<��h����_G��A��Sd�v
������SF
	��;*�|�ԛ.:�'ԗS
�s#γИlM���s���}��v��l���'z:xG3�MD7����
/�U��4&r7����s��n��
��et
/_������q����M�
����
��W2��`Klt
�Vc7
	s�r����.X
~R���eP�7c59o]�sf���j㋽w�ũvh�[$$U����>�	� R{�M�F�O�qX��͹1�����
U�j�[�5�'ƥʱ��
l:�pںx��M�&��b#t>6�N5���b�]��f��;k9��s������
�w�u3�<V��?���m����=��Y"�	��N�hR�8e& �F =X�k���,j �=�
A���Y!j�ָG�i�˓� �����ё�跃+#��AqAI�������u�|l�jT�^0�
Q�W�u���Yn��LN�‡=nR�
�x,��Α��/߈�ڍ�$�͓d��"���OE�+2"œi�G�SK*"�7D�z�8.t�}k���(�W��d�vn�r�څ��T��J��Ց��L�z�?&^N��Z�]m�(�7J������}uG���;V6t���E��G#�O�
0~>TA��Q^0�(�I�D��/�a*u�#�����,-P��iZM� ��_�?�i���
2
+�rl���&>Ό�	�c�/�'VHH2���ڟZ5��d
� �xJ
^N~�
Giő8AX��`�(��
G�0�X@��¦!��Z/U��8��b�J��
Vb�{6,�-�=�%�߄�dc�
$?��\�I5�|�q���kW^Fa峾�?�l�g�y%�> �����XUBQ,�!:m7�L���B5Ēv]U=����,BԈH�4�L0�[��-����ol���M��
�G�
�T"���`��%��ϰ
ydy`�W��
R�F�$���#��ԏ(�,	hioz��k�!m�&1�\
+��۩K
��ʩC��N
��1+<o���K�-�V��KR]а9?Pn�>+QL_��Hyk�z�jЬV��꒻z�:�������w��
+d�=M��� yFwԬ�I�[Iţ�N���'��#ݕû��Z��b<�C(s谄aAg^mX��`t)�w�ۉ�K<z. $��
+dN�Wn��Kwm���G��
E�3��Q��o��mTo1��Q���Ƌ�|�P�  �N�GC����HQو��D���A�i���^&_tՏ1m?�-,n^�6ܑ_�b%�R��3�c���>��
���
�[m�D����ލ���Kv�ܢ@�[/���)�SQ����
��3i���a(�!Uc���=���4(
�
#Q)�<��a�f�tb!>�$ _̦P�,\ٳ�P�22
�:J9
�|r�
+.��*�H�����N�P�E)!{�7C���*o��ъ�æU/����j��!�#�a��	\���v����c���9�謟��J���C8K��n�F8�������
�77Z5-�7��\�\TP'k�q��UN%\v� MM�%�"�T�T:�ų��AT2������e^�b&YIa���jM��ɸ[��j�����9�����j�ݙEr#��\��
��)x��Ԓ}�����U�z�O�D���::�jo���镠�R%����X�8���F
��h��<Ԉ	f�2�u�u��δp����8�$n�ү���1���Q��K�A��
򜒡y�"&77ts�����,�=��6���"�9i�#}6��U���$j"���Rғ�'n�{ v������(�^��^?6�4U��亰��j��뢏a'�լ�K��%X��P�*������<3�g�IM�!���)&�3��)�����
�*C��vh@��[�|[�FC��
��l/Sy��'1,b�����C6����zp:x���N�6aD [...]
�r���Xr��#�-k^�?
&�{7�&��[�(��,��)*|3�����dߗ�6�Vp�j���3c3�-��\_�
3��B>�P
+��)C&kvm�xf�,.Ic�E� ��ա����=�:�Tu8\�ꚤ9��l�D2�kpj�h
+;��s��4�Ѵ�	Y[�tE������\<zoh��9�ⴏ���U-A4��|���9%��\��œ���a�Z��5Š��|���'kX�w�\� 0�4X��w���!���
�{h��c0۰�h�y{�˹���R�x��
�^�7���%lB$�-AolR 0��B��N�����3��YWB+��;��-�,u���.�(�[*���o��g
{d랬�7Ͻ�
"�i��A�ᵘ�����=���
+�+g�B;�93��T��0��l@ͳbg�Z���M=J�h������l6�ܞ�J(
��(oI��� >9I�v|8i�/�Q
�!�]�a�
+oϜ����"�A]`��:�
&NJ��fҬ�������euO<CN���}��<<�Y�X�pAG)���}�
�
ʓE�,m�-p�2/Y�U��޴�;�^��]�y�,��� 7���$����;�LS��^��l�J����%�qѻ�4�0����}^��0I~c�`q2E�u����I��"�z'�՟~��a���֠;�OV`ė��@垾K���T�
�%l�p	$ěQ�k����Y��6ކ�=����\oz�6���$.��la����dD�HE��[���
 �x����Pa0D��my����/sb}��[e������������"Ŝ�Lv�F,�%���6C�P����w{/�"��m�q;�`���*��X� g�6
+��`�(,�%l��
+r��}W/�Ťwux��
C�&"�� �0X�i�p;���9�4N�B3u3�T�5Z��Z�0GV"�ĕت��j�y�� � Vw[�
)����ӥ1 �N�(�TW<
�C
>X��J>�#�H�Q��%�\�Z3
o9�R{@7ߔ���l�;�j��7��H�=�JF��.�S
ɁT*���HO0��s8�P�^ł�.Ō�'�<��D!Z�H����RgI6���#�fW��Ƽ�݁�4�K��.�vT:C&[B)LW���Ɲ����w��a�o�A�Q'��
�(�Aw�\��T�\�uQɼUǥ�,��K�7[J哕��^-���VK��e�C�����
+)-S�뚼�&т�g*��F.��~VjI������
����ߠ��x$td?t�M΢���I�5�r��;h�4O<���=��x�xs���Z����@�
+bUr[�!cpTᘃ��%�UJȗ�*h{�\�g�
Z"=Z�ʔ��^��s
�M
r
>٬��
����(�m��C�W|�.Mz��]������_n�=�;��r����;��O�M
U��I�g�	sj��J=+�1.Mk _��La3���-V^�[��6�J��C8�\�aFG�Aj��v��O�2�B.�8����z��o�������&�� �\��q�b��g{*�����:<ک)�Ҟ��1Y<�\��W�*C��bg9�/ڸ8�

�3
�µ��Jc]���<B�Jc�
�S"���ұ{"��T
�������OaZ���ʦi����g%V��1��=f�]��#G;�zfG�/���2���jh at 1<
<��G���Y�v��E�xI�vE��]c]�T�Bw�'
/�͓�Ռw%Է�y���0dwԨ�e6���5������0
�\��AJz퉶��d��)��O��u��i��i�م�1�4:I�٧�M
~m#��C��T[�,�U›�%G���������؎s�f�V~-��� � �s�
+��Ţ}�o�%�%#�&3�Җ��1�+ܟ*� �,��QR�W�savV*�f|�y��BQ�[�a�]O�r�x�	�:��8���l�ٕy�br�L��h���������2%�(j7��#�|E�;�&I��2zR9e��Q,�n*�Ĕ�B�#�b�H3��@h��r�ɣ����[���[X9���<��2��w3���/�в�=�2�b��F�=,l�R��x���Oԅ�=�X���Z#
�l�]U��7e����ٱ_�]h�X[���LV���_imvbOL^��
Yv_T?�|�o�}�}�s<>c�Χ+)H��s�p6�v������燀
'����B�>"��&�N�/����J�h��o���2�'m ���
G����X
�i�o��=.n��v2&���>�<up���9h�9�K=?K�$S��~i��<���4d��
���y�����4nj{�~�}�7~��u���;�%��N�v<�Q�2�>�u?�|
�d Q6HA�)��;���û��F?��\V��lNq\I�
k�؛)ϳ*�gC'?g
�C:��Q�=]�f^�J۲��h&�)"�E�
L Dm��i�mp���I&&rA�?ba�	� ��I��Y���
��Rf1��[�'5��_h�� a��� 9߃��
Ggcly
M�Q�^�~�O�U�|
ˮ��-w=����
R�~h at rj�v�V3�
+v�&��
�K-Ds�LU$� �L���3{�������۴�L���#�T*#�O?���)O�����
K�>x�
��_��xJ�n'�{�Q�}��*���s���b�N�(	K�,��S<�fɽ��
G���
�%�L:�\&����
�
�:7�R�M4ă.��!���5�/c7�U�uR�\��ʭ������f'XĎ��`j��Џ�
�, f�01�lmENG�)���In�z{����~���/�4B�nhCU?�ʜ*M�����h&e�(
+��K����2��2Lk+�
tM�<��m�L���G��EEj
�+��L`
+��L���@��<�Z�dѻ���GH�~���4jѳI�,�;/8룛�?Y��a�����y�Z��1��
�ֆ�
ɚ�̨�#wN��������Χ@M1�h�a�3�O���������G��ޭ��<{�5ˠ�n
l2{�Y��\����8�V����VR�)�/�v�C���3�ȋQf
.�wOm��������	��
!+Ԁ���!
�geI���2}�����[$���7���"��1��&�
+�������ݓ�Iw��¿�[��%\���1o�v�u�܈�3
��D��s��b���'�6�\�^�3������ߋ
+ܒ/U`����x�<��rJ��Kyݐ6�yCHQz�+�z5
,
"�&�*F�`S��q���B��y�v4^��6N�|��5�]j���^��\C��R����*B�8?J�͕�f�{�3n���(O�[�J@�9�ʍa���yǔ�,�W|O
+J\��4J����D���qU�I�i��w#{+���
+�'�{����SH��ߵ��@���h���W�R�
+}��V}w���nXN��AqwgS�"��Z��&+����R�Ū��jq�B]^�|�9҆��
rM
+endstream
+endobj
+4201 0 obj <<
+/Type /FontDescriptor
+/FontName /GEWDVW+CMTI12
+/Flags 4
+/FontBBox [-36 -251 1103 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 63
+/XHeight 431
+/CharSet (/A/C/L/N/S/a/b/c/d/e/f/fi/g/i/l/m/n/o/p/r/t/u/v/w/y)
+/FontFile 4200 0 R
+>> endobj
+4202 0 obj <<
+/Length1 2105
+/Length2 13859
+/Length3 0
+/Length 15000     
+/Filter /FlateDecode
+>>
+stream
+xڭ�c|�ݶ�
6����m���ضm���ƶm�1����{�sv{����Y����9�
c�k^��H^�V����X��Ɖ����
 ,���� `�c`�%%v0�w2���w2�0rr2�
 Ll F.&�� lk��`nj����lj
 hm�`n�o��w23��0Է(��;���� ��D8�
�
\���`F�N cSsX��$lLl��69����#
+@�/LJ �����
`dlK/k
�f
d��뿓�9[Y��[���_�����ͭ���������� ckd�`�߮�����162w���U	'}+sCAS+c ÿM�b�n�F��N�f 'g���m���8���k(R���M�ע������������/��G��`��d Η����/��*&jchkdnc
+`be�;8���P�<�6F�n c7 0=���0 ��7�����
ec�
�c��b�
�Q� z�?�@/�Gq�E��� �b#���������
�^��H�Q@�?
+�"�GYd�( ���E���(�Q@�?
+Ȣ�GY��( ��d��GYT�( ��dQ����h�Q�8��(f`���
�Q������ 	�
������O �����Z:Z�;��������A�������/3�����(�'	�͖�N�ǟ��?��
+ 6f��
+$2����g��bm��AF`�FI`I�?�#5�?��Y�w^B����	�������e[g���.�2�M��A��v��
p<f�vf�6y m�I ��_���I�$��[�2vt�k
87�?x
��)�
+�ecn�#f`igk�.Xӿ��w3��h`Nۿ�����Yְ�w0��?;���?�����@�!44��˕�_6sۿ�%p�vV�5����%�c�kʌ�F�8��
�����a�����ѳ�8/��T���1g��!e6�d�`�י 6��j�W 0��c
��
�


m
�� p]��@`׿
"`R��$���_8}�?��L
��&�_
BB�n��, Z&�^�33�+���f�� �%��t�/���&��7�����!�ʒ�!w�EJSH��h�L$��is�l}�|'\��8P��1){��:���t4��B�W\Lj/�I�
�������t�V\��t�_v���H�M
�g��rs�㥉ꅃY�C�y�"ʇP�D ��.
�Al�jb�V*��ud�D�ȩ��a,��ȉ�Ӂ>��-�kW�
Ψ�й	� O��"���6O[��bslh��>mDi� @ꋻ�I
2�zӪ"�lV�V�gv��j{�A^wa
�&���)�f8
Uϡ��!N�D�+d�-
�+Ń�~��b%�gȝSj���4�x|�KM4"7c%�t�4� �y��h*6D�Eze�5�$��?�v���V3�v��A�L���,������P䝒�`��PL�f�
+Yz
�X�m�+%��
C��r��R
���g���&~��C�r�1��B@)��dX��(�w�}�F�ۮ�ޛ�:r�Y�+�Ms��f�cYᅆ����/����}
%�@��g����E@=ch	�:��o���Һ��C��x������3�ܦg�ʷխ�
r�^����v�:��Mt3f���۬?�5N�m��,�����"�\[�3�����<
v�<�!b��8À9m��p��Qru�ݠeAr��@S��L�+��g�>�Z���<"�S�\�;'�vG�N1�S}�+/��eQ��2�!ml'¢wۨn=R�	rQ�n�1����"��P�s)
��=9
�����
���;0�
W��zD�����*��
�8�R�
�e�OD��
�?[��U�K��W�%9��"$��
+jFn�3
+٩wO$�ڜ�~n���6��%"G�+o�W��O�c�+w�!�u�Y�p���
�QJ�OՒ�'�q�����a�]�C��H'�Tڛ�����7K_8`y�\Ekq��$�sy/�$%'ꌙ��}����&�pF���
�`�j�T��+|���LZ���e�6�o�_k^�l���r�"A�m"ϕYH䪲z���
+ܟ�p����:��U�=`�
+��<�u�\H-�
�:�F�ʖN�Gk�B.��7�A�﨡��ڮ�0���ש?������R��^*ɤ��Mc�w��L�
�Dgh�dc|3�twA���~Hܶ���v���8ݺ*:9p��,t]5ͮ��A9��M9P�J����V������r*]z����tٴ�X� ��nY+�aS�]
WJ+)v<*s�Iz��t ~����r
�%)�TM�j�t���KMt���z��ָL�I���s-{��
߱�f��'���y��s	�E1��.�v�������l��
Q�����C#��#,;�k^A
�����d;���O�#�3
+J�rh�z�h���EI�
��
��	�e�l)6^9A&/�Ze��j�H&5�
=-
���w
�Z���
)�­�5
/�L]�w^��"�����'�\�P|��$a�~��T�`�;�G�H/�>�;*�}�J�C�_��ԛ8���t�
+�(A.�
5�ǵB��f��]�	�Swx
�N����~ަ�V��<0��Fk7H�a�z�,���o��c�쿭9X�"���>঑�_o�"�\-)�����3�o5�% ��caZ�K�F\���2�a��c��U�p�0���}���,�MtWЖh5/��h���e�L�H$�f�0�޲%�"&�o�gC�>
=G.�>#
K!c�(YBԂc�E�*
+�.�y��wC��g��.Sݻ�@�KE�v4�8��V]���_��D6�Zu���?c�3cv~���1����+^A��Ll����vb�
`��cE(q�>)T
�
��?UX���-3_�N<4
Ѩ.άA��
�-��
�	����⑔����.Yi��X}a0��)�2q�Uy�|���p���
U^�N�����/�lϢ;
�C�\�2*q~	
FlA�N�����L�h��`�ܷ��P�2m-ԝ9LI!��=h�?�^�Z��`�к�i��Me��
O�f��s0Z%~~F�$NI�A�ȏ����x
+⾂6kG�DXMT��Ie�d�5�
�;?J��Bl�Y ۻ+F��Q
~�r��4���L��_���Z?�C����q~��/NJVy1��:c�̧���$�X,b��� 
�/�qcL�K\�Y��)�0�pP�H�
+�ob������ZM���)D
���
ws���_1��o����{�3���r�|��9ۚx_�#����M`2k�1�/V��
s�t�
i�X͎�����؃�r��IP�6���yR2O�#�����>��C�fc�OG
]��u��5��f�M�8o0`+�
ϔv�4C���I��Vy�g�RB�؀ͨ�Q�N�Sݙ(�<�\µ���Sq��5��ӈQ�Um_פFa�3�Q����
�r�� ���Tv�'�ژ0
sɤ*8�t{�
�O��y��JĎr�'�_b_vZ��'���+"�1&���ZM 15��x������MM�Y�%�7��Ъ���s���|��/8U���
�0�,̌KY�|�
]T9�1��`;oߌh���CA�����-}�gc����~��w��0�@~h����#RU��U�}N��vV�����m[1���	�^�/
��]�[ qXJ�ꥇ�2bk��1�1��o�٥��D OU'�'�h�||��O���Wr[��>��_K��K�読�h��~�����l�M����孔
C�z`�ƹ��'huG`u�Na
DY~���1ZdX^w�[/�4�oA�O���8g;�Z˵���c�>�&�`�U}�e���ލ��(�o��U4�E�^�݊�?�������\':���\��R�"D�hޜjyE5��I |���ܒz�6���.!8
7�Tf����m�dV
 2y��h(�Mc�G�opG�Z�
�j.��2cW��(�
+r��d�|�&�Z���C ���Zx����CF%���#W���=\�z�6�
+}�}����A�2W
��;F�Cb�@��)��@�Q']��
�
+��M��
tK��y$mzv��{���4�*^�Ҍh��+�'+�ٯ�v�Ή�
���b3��<x�q+oY�C[�V���W.�`1������M��Zť:�2��d��!Kc�I�����G���{9����]�[MoT)��t��W
�/�
+�|�Lc��Lp����dP3�tq}��E���F�"JIZ��
Z��V�)���ﶃi�����/�KQ��
:���8&�hRnn�������1�
�Xq{��΃�Y�2��~�k
,�/�3&h}�9�x�
^+��	�l ���e�xP�p��$�'�5�2�*���M��Z"�[\a��� �& �W�P(�|�j�P������Ӌf�6���5Z>�<\

������Y��Q�g�[���1��I��fL��1X��
�8�`�w��&�=�Z%���L�ȓ
�{&ꚷ��/��̔~M�B�6�_�����g�(?�������r-vW���[u���a
�a�p���Q&y�5��ϒ5a�o1�|<k����Q(ѵ'h�K|�0�Ȉbc�^']z�1Z��]�v�"
+�5�Na�
+��wHⱂ�3�DZ�G`�Ȝ�"Br^������+f��� f7"��?�����,*�
Z�3֯
���	�-BRM�OUK�h}����7K���\B�C
+�-w�s�`;�䬲\�>\��5��YXz(8��=-��d�	���lcy|q~qh=:��%8��)�ī8t�P�r+wΓR�!s��-.�0��mc���kq�L�+5�o=T5߽�1�_�=
+#rË́��I�>�d�B�G_ɴ#(��h���rN�|��
3\JQ���,x��Q;U�&��Q�0�:T���|�7��Rl~F�~M�7L�����W {?�&��x���
G�}x5G��/�=?Q�|z>��SY.�}�����Q�JE���%��6P���ά#lG��нX,�:�f�f�i��Jv�<�3r4
+G���&Ө9An=f��Dpax��r0�#e�)��ڏ �X���6��F � ���o{S��'�=(�Ә��皼�	,
�O�`|��%p_GbG�P�B}G��k�t�w�v�Ӗ�p^xeC�&j�N�o�%"�a���0!�F�y���
X�I�(��RjajoX��n^ro�p�\Ɗ�B� Ħ�;�W�60���Ģ��n(e���(>���E̠�op�u��)��"����.�z�'�i�/�uL5g��v
7D��������J�q�?J��
��NN���T�d
{�`�����C�t�2�s��c:[
  �OC~�*�A0�2P�K�K�k��uc�!�>���4Q��<!7!�?�
�6
���w�p~#9�-ѠG��UE(E���X���t� ѨsGh@�~���5/
����c������ۻ�`~���~�C�6 ���:���A}��S�v	��J|8�?�H�NC
�X��9�
����,��QGS��+L���
�ˇ�#��`�(�6�7�B�W'��ډTYX��ǚ�&:2~CP�so��*R|��1(#N�=�Þ����)�ђ8A�cM��U�e��ZX�
Eg�!+�<��VT>��j Z�c�x�bBzJ�K��H�ɚa�BGA��@�o���C�<^���1 �qcX�|�H��ZL$�y�o��;)Y�"�Sà�Eq�������P�sz�)�[M`��*�琠V\�����&�`d.���lB�*ݥ�~��,ֶ&NG��T��+�$���5p��+0��؇����ZF-S��P�ϋ?�Dv�?
��~�s���0Ap�
Iw���M��q/����>��
��j�D��X"<;1��	�L���OA&�GU���л�
%��5й �ܯ"۪P�Ҵ+���t�+!`^���9ZT�'��'P]
�PLp�@[��ࠀ�9+�,�hD��Û��
�;�U��*
�o:�5
�)܎ֹQ>r�\�Y��E$�y�u/V��g�g��	��_���z�O�&L�'���W׵�,��WΚ��`��b�Ш��}
_т}3
�[��j H�����U�9�P>�����.�v�n5��bj���OQ��(�7�E��t릩
�,'��<*�19$��n�D�� �����R�l��,�pu�\BY����ڀ��l�2,��s��OŦ�����7��B����9�ٺ��
g��Bo���]�k�JKE:|-�v�q���iۋ����1&>���3�5��(�z9�Wg�p����}ta�|P��.���ד���xs,#�B���
�)~_�߅wy���&�����M�;3[���T���Ι�(-�Ō�m�6��W�m��R�em#��'f�@�w�����,M�Nb���Qh}�mt5E-i7��r-��?g��`P��rcr��WۈԾ�#T0P��v�'Ԥf�Wyڎ/����+�#�σ"x���Q'e�;��Z���X�rq'�ܪi� ���0hI>�#됧B�p	}'�u��ߵ��Hp�	
P����-�mF.]�
�%�^)����9��d�q+.���
��rD
sU���/�z1F�T=���٨5;*$�P���[>ɑ�p?{C/��\G`W�u)2F�U”�
�?�*�c�t(��ez<Hh�X^e~��$���|~(֔�B
��x���
��}iA�~������#v����38�#�!��	� E�Q�`������L�� [...]
-��2*nh{�Jt��-I�wZf2�E7�_�
� �+{o��"��w6�	w��J�|�b
jǃ����n����

�q��2
��a9D'pPΎC�\Fֹ�3�<~f����ٰ��&K��4C��~ӈGb0CM��t4�{��ɠ��"alk�
VƮ--�R}��:�sh�)��k[^0�$8]_3�>��M�
_�'P
q����
��^Ӷ+|�� ��
� �9L��o���y&���z���c������c�w`D8U�
�5���S
y׌+��lw�t��.�����
=�
�G�'�I�R��	n
6�wYy��bXV#6�ŞI,:���T)sw�SW�5K�)�������.*;�(r>3�:C���Xd�x���>/7�T-U:I�����+”-�S{3��H�o�/���hU�qY�5��2�C���K��e�MwS�Eʭ\�잣�}�*�����.�6
��G�s7I

��N��oeH�N\'C����P�j`e~.d�pE�)
+��8R�HQ=�0��6]�Oҷ+E�@��<F�Lir ��jܞ2F���d���
o
)�%��wW]
�pb*�3e|��y�ҕ��O/FWy$
��mxnm�]w�
�
��MQ��[~`��֚�i
�GӨ:l��
�����N�S�#�H�5�ijƲv�)���zٍ�~#ߗx�x�BG�y�>A�y5w
�M�؋Ƕ9&+yKc�WJ���2�]HW3�R�ԜY�ϛ��f�%�q
Z`���0� 4�4E�V�Z1ĉ��p��^�)l��kլ�0�\9Ý�����C�j=i���5�K��p�'��D4���g��`��
+��=�
��t�
n1��
͖�Rȷ�F�(�����Xɍ@p����uC
d�k����g�̌%�R�7�N>�="..�aϣ�������c�����
߈t�{��f]�;�•����HS���bFLd�,tR��4e��;�
Xxqm
6}�a�3�4�t�����>�@���pF�+��t��=���U�RG��M�E 0��7��{P��r�`d��No�rG&7�O6������-�M�"��<7�e�B�J
ItXs�)
�{,/A�2#�m���[��Mq�Hb��h���w�I�������Y���QCW�tN�w�W�å v
�`��rz4!��ϕ%�X,
�|V��8,+֯g����A3zc�/��ˣ�T�H[��6����#e���������j,�
�!Ӥ
�R0b�L��k v/���>n��d�����t 9
�sb��0n
B�#|�����<b�'���4o�u�>��0w���k�%[D�A���g��)���Єs&L7f{��9�#"�(h
O���:���V��c�ט`	��IE����i�
d4@�l�_�GN\ӂkfI/[	.�%�׷V�{�sK콹�-��w>�>?Q�_��F��
+ے
�A��$�îk�����EC����3N
re��c���Mt�׵�9�4�m��5�O�ݫKZ,]e�`EQ�a@�Wm~�9XȎb�ay�J�.]j?��썴���.��q���ElM2�ZY"W�KQ�&����a�K�Eݹrd nU�1�h���6;��"uk�z�ٛ�� q������J��C��j�	-mD���9l�'��5��	�o/����:\w�(A9O�kz��t�%�&���3�2�W��z]J��Q3R�
�������Q�������qlt"�FƗ(�(����0�V�F���*c�� .|]#�a�;�G��]��!4GB�j����61�l��:�VZ抎㶤�Ι�#��2-�L"�>��l+˷{�{Y�py>����;�%q���Cr��U�/��.�615��L�|˵����0]�
6�C�L�,�w?
+��_<|��HF$!�L
��
�I�jP.ݳA7FY�ZU��<fzS�d^��w
�H?$��9�(��"��$�D�X.��Q���	&
�'�
]��e���)?@%Ddk��1N����3�h\�<�;�����>{M����AR?X�>ۿ=
+�:n�	�Q�7Q�TQ2@	'jK{.��-9��Q�
'I at _ON��+������)��0{�
�:]ƭ�=vi�=H��
�f�
�%_�1:f�r-*'��x{�~�
�qLD��>K�:z9D�3FL�[K�}���IqؽZ�v0�g���ϼ���^3	cKr�Jو}>�㍖�0׿�~�@�n�W���|<am�]
rt�$
n�ݑVuf!C�
v9�L�E�`�`
鱻'�5lh@�֩��<QSi���I�&P�5�KJ��6fտOs����er�ۇ�&4�=q.%����$��
+����;c�
��2ݶ���L�-��{�`faX`
;���B��"^R���'�J�9a��g{��د�@���DM��c++M���h9����$��l����z'�ێ`�z�^��^E$�4¡fi�/�N)�ppW�b�K������ئ���-���M�.��P
�Ɲڱ�K
XVO�٩�d�R�Sz�MC'�6CՃ���Z���S>�	BI(��,�q؜!(q�7U���|	���"3!��􃕺� ՜��/c�m���L�S����z�,}v�R
+�0�c�~�\����z��A��m�#�'���')�$���l�o��i3�iN�Qj,I8�S���\�
�/�-}
\��B�������K���fb�ľJ�t��9�.0�����M��%���K},�ry�����k�p]]��Wc�`�;e�%m���[L��>L�^��g<��xOK
�[�T�Ԫ���tg������/���<[�ZF�$����,42ϖ�V~�8�dώ�i��(���Ie��aMG
3a���0��oK����ZI�q�7]r?d;��
+�yS��5��٭��H{�al����R7�|4		AA�4aNb�<eRo�
��F��=��/��t��iAV��!��Z��
��1�
+���;淐
]=�y�?�t�:�נ5k
�1�p�B�Wr��)�O�Z4��/�\�"�T�s�G���
�;Ĥ�R������u�ܮn��c��0�1Ϥ�Tt���7�� �ڃMotc�ܛr�%�;�p��~�-R�f�\�1*C��T�
+����O�J���
^�
4{��:��A�v�|
#&�
�Z�H�g
һ����{
�i���7�U�M+��|�d�	u{�:���$��߅�m =���=�,�ԏ�4%yr�.�5�F�<�NW���
�nh��ˉ�KIFu��Gd��bة�(J^Y.�Q�}.�����b��Vc�(���
�����bs��)��C�Sf���>��|۩+Wxr�|�g��4���Lg"dԃ���q�0c�KU�`�=����Q3�:��d�Вk�!>
�{��
<W�W��~r!�&J҈\G�K`�%��r��Km?mdx�@�����d^����..>�f���'�ֹ��;���<��Wp�)�yڲc&�S>�<�b�4u����AAB8���P䱶U��
=Y�״5
s�eI�&g�m�iQݞ�fݡq?��h��]�`V(�j�N�<����� }�_��[�)�´�eo{��k��ab�î�Y�{*S D at n�
�����u���=I��`�"}�q'�+�����Jb
�<
䤁�$º2Hd��`�&�,=�
tZ]�����S�ۙ:�����33s�R4
Uv]8�p9!8����K�z���!��O`��K?�&��x�@+��\@-�-04��
��
+0s�Q�z����!���҄�ߦO�"��a��:!�Cu��5db����Fx/��k�)�i�W '�K�Ә{��_"*�kT�o5��
\��D��ސ?�J޽��%�|(&`�giEd�4|<'_Ve��W6����To�cP	k4�thDp����Rz�����s|(�%r
+'HՉ�s6������Z�)�@���p�h��+`�00������h�?kz!8��K���Qل�@[��

�M5L�p��k�W
�-Ĵ7m(�
�,�߼�A��0r�{ h\@Bʦ̤��n�de����q�2/x��P�j�`�����o��nzH�d%�j���[��c�9|
R�����yS���@Z���4���z���^^_҄�c�C��_�����+?�W.[
�U�n�y��m{C�|^k�
k�pK�7e���)�S[z�@�I�+Ă".���;Hi�C�#J��ob�K����
B[L��e@��]��A���2���"�~�#��� +D��Y�m1�����&�A�R1"e�~6O�-�o�S> wsM��p_G{�i]��1̔�4bEOI��>��/+R>�Wf�Po4[�x	��s�
/�^gKv�/V=:CA7(��T.�H�Ja��q�y?
���S����X�A���v���*�
Rn٤�{�҅�a�,���&���U
���:�3X�fԤ�Rz���jղ�n[
R
�z�p[��6}G�<���*r��7j��x
#)��nTSt(}��`�-���a`�
e�M��Y�Zs�+�t������+nkR` �U���6|E֪����0ІJI3�a{��	[j�
yV`9��Ǒ�Ju�Z�V��"F&��G�)�JȻ�畻�\�Em�uS�E�q/H.xƱ���q���a37��]�6S�ge�_KRL�
��k�yI��9�7|�
,��Wh�
�6�����v�wCk
��OF�.GO6v�n�'>nS=��"�q���n_<~�^�7-�����TQ9��
�7͛j���0|Ʃ^{�ɥƖ� ���Z��0�ϱ{ڿ�CQ�	x��c���Uf�Y�[ӊ"]m#���]�E��D����?$���� �u��m+
(~'ɕ�"��
Jw�g���6
+�
+��A^�Y}TEbx��ԭ]R�+
��9{,Y���#sI�V�dž1�#�����&�S�8�CNr��9>#���
��E��+�}΢}����œ���[��d��߁�؈/i����^ȺL�	vD�6d���ȧfv 
�
}x �\�,�Cp<a��֔�d�V��P_q~7e�1؛��֤l�1qh���1�PǷ�!՗r�.)
�*c��+I����\�f~GN}�L���V���8z΋�p�

+��(
���͝�i�y	���'�t��C ��
�1��2�i��_8pT�m��D3�1��i<�=��.�gC8�
�Q:�7�;L{�nHE	�@�m�̶��I�i�-D��wGk����y`�g�
�
��X
��H㧓7���nY���WM�68��{s
��pv�ɦ%�e�I
D>�U��T�#PI��Aa\
L�N�2�$Eԥu�C��"�ץ�;`��OJ}���צ=��f{��4�}�����
#�Q0���ű�[9��t0 9W�������	i����o�Q�0�U�
`e<j��Q
+C�$a�A���-_�`g�3�Ta�j"vRrZ���}�}]�����25�ON0�{�Q}��p��G�>�R�R���=�BX"��n-Na����
h���,��>�3{Y��~Z�y3
ʒ���s�
u��(�o��ɂȹծ�K�
^0F�J�D��	��b��4_4�PcJ�ҥ_�I
Ả�ɴ�
+����q?�ok�
+�)��������5H��fWE��.�A3}h]��J���[�O��4c�`�03��;�t
���jt��S��`mSv�d�]Z�v��'�&�
��*N�lTCbbؒms�[�뛷X�fŷ�9��1� s���ܓKz�i:2D�U�R��{�AM5_ �
"'��
�bOwS���#�H1�%�Zk����
+z�q�h��6��X��z�� ��Q4�k��s�d0b^��[| Z�|*�2w� ��|
Df=�ЅV�����/
�Y
l���C�n� _��˧E[M�!�����Ǣ1�VV7����C��;��F���}C
jy���� ti.F�uƷ�Z�e}0J���"���=���0���\\�8�Sz������+��
}����
�a���y���%G��O�U݌x&�z��
��ݠh�x����y��l��复iD��A>�����G�1
+�ޛ#��Q��
E(5��m*��
�vm��\���q�eT)
,�s�4	�[NH]��]v���fN�w����tF�K��~J����M���8�_2L��ͪ���c�m����y�a9r�x�\U�M̐!�p���YI�&��"�$<u��q�~�����	ȹ�W
��
+�U�r��`+�2T��ݎ��%V�昰ݲj&
�7�~�c�A�)SZ�v�^u~H��T��(�f
���t�/q�H���q���P��T�G�u
+�Qb��
M�>���Z��0V�|��c��锴�e	�Y}�ރs*��L���
a&�?������ﮰ�bk}������@{*YC�Y�����o��q\��<ӳկ.L#��~ޕN��u�Ηt�
�>�"�{0IZ�$��A����$�
�座L�ַ�v�q�FI�Ӓb˨C)�ͧ���
��$�m�2 �R}�ڏ�W�ׄ�0e��XL�����-^!��I]L���D���R���<�
+��Y��1����p
j�ػ�Ɵ<�L�)
ȈH�����S�!F�A�ެ=BL���������w�-U��%���(����U��#�l���noh��½�gM��0��X^�U\��Õ?h��{�Dt4�
�J9��"�
+\�=��0�T�&�M��,ٱKW�%�E0s
+��ѕF�w
��{����� ,Ss�$U>㷙º����ٰ�	��t)�:)�?I
�Yo8^~g�mZ]�r�B��)����O1Ԓ6:���Y�
ϕ͟d�ʈLc)`_�S��S[��8���t�K�Tγ�
�c��̤����?+�H
b-4VoG��!Pшi�=ό�����
XhU!�SdX63��Ŷx�5����<���x�[�����
ϼ ��4�1���g.��?�Yՙ��q��U�p$D�\P�t�W)�q�h~'����Ȫ𵀬�; �r�Q��S���߰6��Z�&��G��(�|
+V�8��;��2��ϩ���2E���hcsk�{��}���7w��'�i
�p� 0�n>-�8*�y�4��0~y�xj>�'��=P�O\�X��ji��
O>S	��~Z�����Pm�R�
񤋊�
�WX�6U��������*�w����_�����{
��d��uZ?>��{Kl��"v��s�
h1N
��!��ՠ!�^	@o
�~|�֐�}⎥Q
�>����j�1?�� &����O�T
DX�0��D2�:O�j�'&������p�*7�h6
e�! Hr�F
���5ǩTz����Kp����?���P���qC�sG���5Vdem���R
+2�\�'�����Q���!{1�cc�|9AV`�3
+���:�^�z�:������r	��|�W.�V���U��M���Jt+Gk��K��7��:�J�3U.t$�b��Ol�m$:,���F��t�j[�D��
_�I]���N��9;�ʂ+wrm���?�IUN�Ev��
7„���=q?R)æ+��Pȋ�9o`�A�	�̛] _u�X2J�&������K���d�Q����8�W"r3"�q�|��)�#ۈ�`R��Lw��W������X�UP�<C���DS�Z`N��M����/0j��Dz	�B�)o�M�y� ؗ��
�
�]�e��W����������jU��f)�+�Y4]I�m#1�
��:�7�;�
�w'30��8�������>�����4pb�#t��l2&wCn��q��#���b��Aw�g����x�8�i���.!�'+w�<\"�;$A��6��/�
-���%�G��W��4��S\�L1��`Eb�C҃뢰),U��<�!���^2�.
@-h��.8���
��Q��\n���RJq� ΩG��A�:�GШx<��O��$�g����78qa���Ʋ\o�od����f�s'����g� )Ό��M��ѳ�ܥ�����ND����S�T �mԩ(h"�+��<
+�
G\��b�"?�G#R�
�ĕ֋#�2��S�'���}�\>(:���ے.�<ܐYq�J�I��>��&�&}"���Uo/����]Ƴa�R���z̸ҹ�f���J������
N�hF�]�Xq�[��/
��T���
\H|��m8��
խ������`n�M=���i
�@vg2[m��D�9�t�Z2��w7�L�ю�Q}tR��#v��v�ƢC at L�
���t�N�6�D"L��������#�V�z�}�g����>�4�Y&M��#�}
�	��
d�3]�i��.>���o3�9��3�ܵh
+endstream
+endobj
+4203 0 obj <<
+/Type /FontDescriptor
+/FontName /PZTGBU+CMTT10
+/Flags 4
+/FontBBox [-4 -235 731 800]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/backslash/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 4202 0 R
+>> endobj
+4204 0 obj <<
+/Length1 804
+/Length2 1076
+/Length3 0
+/Length 1632      
+/Filter /FlateDecode
+>>
+stream
+xڭR}\S�ׄ�Y� �5D��!�對��x!
HyQ�l�1l;��ll����
+I��
+Iz�D �
��Lyɤ�J#�4�
:�����?�?�s��=��}�������:�-U�
+(�u$�  ���
�� 4&3��(��`������A�Dx>�P��ј@��I ʢU��H�@$ PA��APX ��T
	L��&�PK�*Q
�•$-
�'�[L�DV������ �F"':
  a�*
A�
+S�@՘�Ɲp�Kāh*�2ꟕL�0P� �2�(�*\��P�'Ҹ8��I�CM'�5�TK�Om��:��4�)D�Q�逵pj$9TaF��j�j0�T��@��Jaf����L��� '�P��.M�kR�
��{�,�F1
m���v=#�������8<
B���k�4��Wa:5�z� P
�GQy	� �N� ����

NR- at o$7RGF�&~�X
��$�L�HӞ���3Ā-����G ���7�Ni$�#'/�ZƳ8�V�*i��q����}��Y!��
�]:3P]Wq�\g���
�
���vM�he��϶oQ�S'�Φ̷��
lI-���X�iC_Qz�S�p��ҫ_�$���Fkף��U
��*>�-o-�x�l5+8���M���M�狷z�bdE�wr�ո�]"��O�xO�{+mއ�6���d%�ή���!�d�=<�t�غ'��_U6-�U���-i
U yw͸$̼�ճ���*�”NZ��q�_V�ӓ=�K[<��^�8q�Sz�_{ [...]
,��4YscS�lZ{�O�W�~�dz���w���ԲcV�X��s�+i�j
pH5�$�����gqLp at .
��w?p�>�u ��hd��m8k�ڸ�{{�����7���I��E�5�g�7���y�Ϊ!��(�7
=�c��-v�e:
�$ny�q:f�ws��q�E����
!9˿+�y�����(��>6��vUgg��e؀�-�v�L=�F�o���b�,����w�kۤ[
8jY���E%�6��/{�����x�kW���1��b��ೌ��䮰/����=��X'�R�w�]\Cl�~t��R�g(���pm} _�>rq���3]�*�86^��+i�v!�
�2�!�����PBu%��J�/@�Rl^;:�2?`�
�[)i���ٟ� �1/Ζ�.m

�LE�β��l�e����wImo�]�U4�zB�5��_�٧?��l�kԾ��S
�I�����*��=�,`<�}t�D�fܒ��ܽ�om����|��c��]� s�5��\�:�yH˲��0k�� ���b�/�c2>Kf��
2j���
��
+�
+endstream
+endobj
+4205 0 obj <<
+/Type /FontDescriptor
+/FontName /RXNEKG+MSAM10
+/Flags 4
+/FontBBox [8 -463 1331 1003]
+/Ascent 692
+/CapHeight 550
+/Descent 0
+/ItalicAngle 0
+/StemV 40
+/XHeight 431
+/CharSet (/check)
+/FontFile 4204 0 R
+>> endobj
+728 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /CUTCHY+CMBX10
+/FontDescriptor 4155 0 R
+/FirstChar 12
+/LastChar 123
+/Widths 4149 0 R
+>> endobj
+773 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LEYKLP+CMBX12
+/FontDescriptor 4157 0 R
+/FirstChar 12
+/LastChar 122
+/Widths 4147 0 R
+>> endobj
+2795 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YWRFWO+CMBXTI10
+/FontDescriptor 4159 0 R
+/FirstChar 98
+/LastChar 117
+/Widths 4128 0 R
+>> endobj
+717 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /DNOQWZ+CMCSC10
+/FontDescriptor 4161 0 R
+/FirstChar 45
+/LastChar 121
+/Widths 4152 0 R
+>> endobj
+1120 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /OQZRZJ+CMEX10
+/FontDescriptor 4163 0 R
+/FirstChar 0
+/LastChar 114
+/Widths 4137 0 R
+>> endobj
+1019 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /OKFWXR+CMMI10
+/FontDescriptor 4165 0 R
+/FirstChar 11
+/LastChar 122
+/Widths 4143 0 R
+>> endobj
+1117 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /DENAJR+CMMI5
+/FontDescriptor 4167 0 R
+/FirstChar 102
+/LastChar 115
+/Widths 4138 0 R
+>> endobj
+1116 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PGUTQR+CMMI7
+/FontDescriptor 4169 0 R
+/FirstChar 59
+/LastChar 121
+/Widths 4139 0 R
+>> endobj
+1305 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /QAOOYC+CMMI8
+/FontDescriptor 4171 0 R
+/FirstChar 103
+/LastChar 116
+/Widths 4132 0 R
+>> endobj
+729 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LNGZWW+CMR10
+/FontDescriptor 4173 0 R
+/FirstChar 1
+/LastChar 127
+/Widths 4148 0 R
+>> endobj
+718 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /KELKPH+CMR12
+/FontDescriptor 4175 0 R
+/FirstChar 44
+/LastChar 117
+/Widths 4151 0 R
+>> endobj
+716 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BTSFPV+CMR17
+/FontDescriptor 4177 0 R
+/FirstChar 40
+/LastChar 118
+/Widths 4153 0 R
+>> endobj
+1011 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /NIIONN+CMR5
+/FontDescriptor 4179 0 R
+/FirstChar 43
+/LastChar 50
+/Widths 4144 0 R
+>> endobj
+1302 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /XTJZVU+CMR6
+/FontDescriptor 4181 0 R
+/FirstChar 49
+/LastChar 50
+/Widths 4134 0 R
+>> endobj
+1115 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /EXVYCF+CMR7
+/FontDescriptor 4183 0 R
+/FirstChar 40
+/LastChar 120
+/Widths 4140 0 R
+>> endobj
+1304 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /FFKODS+CMR8
+/FontDescriptor 4185 0 R
+/FirstChar 11
+/LastChar 121
+/Widths 4133 0 R
+>> endobj
+1099 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PTPXIX+CMSL10
+/FontDescriptor 4187 0 R
+/FirstChar 101
+/LastChar 121
+/Widths 4141 0 R
+>> endobj
+2555 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /XWRTTW+CMSL9
+/FontDescriptor 4189 0 R
+/FirstChar 97
+/LastChar 120
+/Widths 4129 0 R
+>> endobj
+1030 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YOZAEZ+CMSY10
+/FontDescriptor 4191 0 R
+/FirstChar 0
+/LastChar 120
+/Widths 4142 0 R
+>> endobj
+1155 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /EXPITJ+CMSY5
+/FontDescriptor 4193 0 R
+/FirstChar 48
+/LastChar 48
+/Widths 4135 0 R
+>> endobj
+1121 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LUYYYY+CMSY7
+/FontDescriptor 4195 0 R
+/FirstChar 0
+/LastChar 48
+/Widths 4136 0 R
+>> endobj
+1306 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /DCFFMU+CMSY8
+/FontDescriptor 4197 0 R
+/FirstChar 120
+/LastChar 120
+/Widths 4131 0 R
+>> endobj
+967 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /RKGWIN+CMTI10
+/FontDescriptor 4199 0 R
+/FirstChar 11
+/LastChar 121
+/Widths 4145 0 R
+>> endobj
+719 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GEWDVW+CMTI12
+/FontDescriptor 4201 0 R
+/FirstChar 12
+/LastChar 121
+/Widths 4150 0 R
+>> endobj
+966 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PZTGBU+CMTT10
+/FontDescriptor 4203 0 R
+/FirstChar 35
+/LastChar 125
+/Widths 4146 0 R
+>> endobj
+1446 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /RXNEKG+MSAM10
+/FontDescriptor 4205 0 R
+/FirstChar 88
+/LastChar 88
+/Widths 4130 0 R
+>> endobj
+720 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4206 0 R
+/Kids [710 0 R 725 0 R 770 0 R 829 0 R 881 0 R 921 0 R]
+>> endobj
+939 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4206 0 R
+/Kids [935 0 R 951 0 R 962 0 R 976 0 R 992 0 R 1008 0 R]
+>> endobj
+1020 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4206 0 R
+/Kids [1015 0 R 1025 0 R 1054 0 R 1086 0 R 1096 0 R 1101 0 R]
+>> endobj
+1123 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4206 0 R
+/Kids [1111 0 R 1133 0 R 1147 0 R 1151 0 R 1163 0 R 1171 0 R]
+>> endobj
+1184 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4206 0 R
+/Kids [1179 0 R 1203 0 R 1224 0 R 1240 0 R 1255 0 R 1280 0 R]
+>> endobj
+1307 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4206 0 R
+/Kids [1299 0 R 1326 0 R 1340 0 R 1344 0 R 1363 0 R 1378 0 R]
+>> endobj
+1390 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4207 0 R
+/Kids [1387 0 R 1396 0 R 1404 0 R 1421 0 R 1438 0 R 1450 0 R]
+>> endobj
+1464 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4207 0 R
+/Kids [1458 0 R 1467 0 R 1478 0 R 1483 0 R 1489 0 R 1496 0 R]
+>> endobj
+1510 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4207 0 R
+/Kids [1505 0 R 1514 0 R 1522 0 R 1527 0 R 1534 0 R 1538 0 R]
+>> endobj
+1553 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4207 0 R
+/Kids [1546 0 R 1555 0 R 1564 0 R 1573 0 R 1580 0 R 1588 0 R]
+>> endobj
+1604 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4207 0 R
+/Kids [1598 0 R 1607 0 R 1614 0 R 1621 0 R 1626 0 R 1633 0 R]
+>> endobj
+1646 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4207 0 R
+/Kids [1639 0 R 1648 0 R 1658 0 R 1666 0 R 1673 0 R 1681 0 R]
+>> endobj
+1694 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4208 0 R
+/Kids [1688 0 R 1696 0 R 1703 0 R 1711 0 R 1718 0 R 1726 0 R]
+>> endobj
+1737 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4208 0 R
+/Kids [1733 0 R 1739 0 R 1748 0 R 1756 0 R 1763 0 R 1774 0 R]
+>> endobj
+1787 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4208 0 R
+/Kids [1782 0 R 1790 0 R 1797 0 R 1815 0 R 1833 0 R 1839 0 R]
+>> endobj
+1851 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4208 0 R
+/Kids [1845 0 R 1853 0 R 1862 0 R 1870 0 R 1885 0 R 1896 0 R]
+>> endobj
+1911 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4208 0 R
+/Kids [1906 0 R 1916 0 R 1934 0 R 1941 0 R 1947 0 R 1951 0 R]
+>> endobj
+1974 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4208 0 R
+/Kids [1965 0 R 1977 0 R 1991 0 R 2010 0 R 2015 0 R 2020 0 R]
+>> endobj
+2033 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4209 0 R
+/Kids [2028 0 R 2035 0 R 2042 0 R 2052 0 R 2059 0 R 2067 0 R]
+>> endobj
+2081 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4209 0 R
+/Kids [2075 0 R 2085 0 R 2095 0 R 2101 0 R 2108 0 R 2134 0 R]
+>> endobj
+2157 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4209 0 R
+/Kids [2153 0 R 2160 0 R 2166 0 R 2173 0 R 2181 0 R 2187 0 R]
+>> endobj
+2203 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4209 0 R
+/Kids [2199 0 R 2207 0 R 2220 0 R 2235 0 R 2265 0 R 2277 0 R]
+>> endobj
+2291 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4209 0 R
+/Kids [2286 0 R 2293 0 R 2300 0 R 2307 0 R 2316 0 R 2322 0 R]
+>> endobj
+2333 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4209 0 R
+/Kids [2328 0 R 2337 0 R 2346 0 R 2354 0 R 2364 0 R 2373 0 R]
+>> endobj
+2385 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4210 0 R
+/Kids [2379 0 R 2389 0 R 2397 0 R 2405 0 R 2417 0 R 2426 0 R]
+>> endobj
+2440 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4210 0 R
+/Kids [2436 0 R 2446 0 R 2455 0 R 2461 0 R 2470 0 R 2477 0 R]
+>> endobj
+2491 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4210 0 R
+/Kids [2487 0 R 2495 0 R 2500 0 R 2506 0 R 2514 0 R 2522 0 R]
+>> endobj
+2534 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4210 0 R
+/Kids [2529 0 R 2536 0 R 2541 0 R 2547 0 R 2552 0 R 2557 0 R]
+>> endobj
+2564 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4210 0 R
+/Kids [2561 0 R 2566 0 R 2572 0 R 2576 0 R 2583 0 R 2587 0 R]
+>> endobj
+2595 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4210 0 R
+/Kids [2592 0 R 2599 0 R 2603 0 R 2610 0 R 2617 0 R 2623 0 R]
+>> endobj
+2635 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4211 0 R
+/Kids [2631 0 R 2638 0 R 2643 0 R 2649 0 R 2653 0 R 2657 0 R]
+>> endobj
+2666 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4211 0 R
+/Kids [2663 0 R 2669 0 R 2676 0 R 2682 0 R 2692 0 R 2696 0 R]
+>> endobj
+2705 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4211 0 R
+/Kids [2702 0 R 2707 0 R 2718 0 R 2722 0 R 2726 0 R 2732 0 R]
+>> endobj
+2739 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4211 0 R
+/Kids [2736 0 R 2742 0 R 2747 0 R 2751 0 R 2764 0 R 2779 0 R]
+>> endobj
+2786 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4211 0 R
+/Kids [2783 0 R 2788 0 R 2792 0 R 2797 0 R 2806 0 R 2810 0 R]
+>> endobj
+2818 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4211 0 R
+/Kids [2815 0 R 2820 0 R 2824 0 R 2828 0 R 2837 0 R 2855 0 R]
+>> endobj
+2862 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4212 0 R
+/Kids [2859 0 R 2864 0 R 2868 0 R 2872 0 R 2876 0 R 2880 0 R]
+>> endobj
+2887 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4212 0 R
+/Kids [2884 0 R 2889 0 R 2893 0 R 2898 0 R 3116 0 R 3317 0 R]
+>> endobj
+3456 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4212 0 R
+/Kids [3453 0 R 3660 0 R 3806 0 R 3927 0 R 4078 0 R 4125 0 R]
+>> endobj
+4206 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4213 0 R
+/Kids [720 0 R 939 0 R 1020 0 R 1123 0 R 1184 0 R 1307 0 R]
+>> endobj
+4207 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4213 0 R
+/Kids [1390 0 R 1464 0 R 1510 0 R 1553 0 R 1604 0 R 1646 0 R]
+>> endobj
+4208 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4213 0 R
+/Kids [1694 0 R 1737 0 R 1787 0 R 1851 0 R 1911 0 R 1974 0 R]
+>> endobj
+4209 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4213 0 R
+/Kids [2033 0 R 2081 0 R 2157 0 R 2203 0 R 2291 0 R 2333 0 R]
+>> endobj
+4210 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4213 0 R
+/Kids [2385 0 R 2440 0 R 2491 0 R 2534 0 R 2564 0 R 2595 0 R]
+>> endobj
+4211 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4213 0 R
+/Kids [2635 0 R 2666 0 R 2705 0 R 2739 0 R 2786 0 R 2818 0 R]
+>> endobj
+4212 0 obj <<
+/Type /Pages
+/Count 18
+/Parent 4214 0 R
+/Kids [2862 0 R 2887 0 R 3456 0 R]
+>> endobj
+4213 0 obj <<
+/Type /Pages
+/Count 216
+/Parent 4215 0 R
+/Kids [4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R]
+>> endobj
+4214 0 obj <<
+/Type /Pages
+/Count 18
+/Parent 4215 0 R
+/Kids [4212 0 R]
+>> endobj
+4215 0 obj <<
+/Type /Pages
+/Count 234
+/Kids [4213 0 R 4214 0 R]
+>> endobj
+4216 0 obj <<
+/Type /Outlines
+/First 7 0 R
+/Last 707 0 R
+/Count 15
+>> endobj
+707 0 obj <<
+/Title 708 0 R
+/A 705 0 R
+/Parent 4216 0 R
+/Prev 703 0 R
+>> endobj
+703 0 obj <<
+/Title 704 0 R
+/A 701 0 R
+/Parent 4216 0 R
+/Prev 691 0 R
+/Next 707 0 R
+>> endobj
+699 0 obj <<
+/Title 700 0 R
+/A 697 0 R
+/Parent 691 0 R
+/Prev 695 0 R
+>> endobj
+695 0 obj <<
+/Title 696 0 R
+/A 693 0 R
+/Parent 691 0 R
+/Next 699 0 R
+>> endobj
+691 0 obj <<
+/Title 692 0 R
+/A 689 0 R
+/Parent 4216 0 R
+/Prev 655 0 R
+/Next 703 0 R
+/First 695 0 R
+/Last 699 0 R
+/Count -2
+>> endobj
+687 0 obj <<
+/Title 688 0 R
+/A 685 0 R
+/Parent 655 0 R
+/Prev 683 0 R
+>> endobj
+683 0 obj <<
+/Title 684 0 R
+/A 681 0 R
+/Parent 655 0 R
+/Prev 679 0 R
+/Next 687 0 R
+>> endobj
+679 0 obj <<
+/Title 680 0 R
+/A 677 0 R
+/Parent 655 0 R
+/Prev 659 0 R
+/Next 683 0 R
+>> endobj
+675 0 obj <<
+/Title 676 0 R
+/A 673 0 R
+/Parent 659 0 R
+/Prev 671 0 R
+>> endobj
+671 0 obj <<
+/Title 672 0 R
+/A 669 0 R
+/Parent 659 0 R
+/Prev 667 0 R
+/Next 675 0 R
+>> endobj
+667 0 obj <<
+/Title 668 0 R
+/A 665 0 R
+/Parent 659 0 R
+/Prev 663 0 R
+/Next 671 0 R
+>> endobj
+663 0 obj <<
+/Title 664 0 R
+/A 661 0 R
+/Parent 659 0 R
+/Next 667 0 R
+>> endobj
+659 0 obj <<
+/Title 660 0 R
+/A 657 0 R
+/Parent 655 0 R
+/Next 679 0 R
+/First 663 0 R
+/Last 675 0 R
+/Count -4
+>> endobj
+655 0 obj <<
+/Title 656 0 R
+/A 653 0 R
+/Parent 4216 0 R
+/Prev 591 0 R
+/Next 691 0 R
+/First 659 0 R
+/Last 687 0 R
+/Count -4
+>> endobj
+651 0 obj <<
+/Title 652 0 R
+/A 649 0 R
+/Parent 635 0 R
+/Prev 647 0 R
+>> endobj
+647 0 obj <<
+/Title 648 0 R
+/A 645 0 R
+/Parent 635 0 R
+/Prev 643 0 R
+/Next 651 0 R
+>> endobj
+643 0 obj <<
+/Title 644 0 R
+/A 641 0 R
+/Parent 635 0 R
+/Prev 639 0 R
+/Next 647 0 R
+>> endobj
+639 0 obj <<
+/Title 640 0 R
+/A 637 0 R
+/Parent 635 0 R
+/Next 643 0 R
+>> endobj
+635 0 obj <<
+/Title 636 0 R
+/A 633 0 R
+/Parent 591 0 R
+/Prev 615 0 R
+/First 639 0 R
+/Last 651 0 R
+/Count -4
+>> endobj
+631 0 obj <<
+/Title 632 0 R
+/A 629 0 R
+/Parent 615 0 R
+/Prev 627 0 R
+>> endobj
+627 0 obj <<
+/Title 628 0 R
+/A 625 0 R
+/Parent 615 0 R
+/Prev 623 0 R
+/Next 631 0 R
+>> endobj
+623 0 obj <<
+/Title 624 0 R
+/A 621 0 R
+/Parent 615 0 R
+/Prev 619 0 R
+/Next 627 0 R
+>> endobj
+619 0 obj <<
+/Title 620 0 R
+/A 617 0 R
+/Parent 615 0 R
+/Next 623 0 R
+>> endobj
+615 0 obj <<
+/Title 616 0 R
+/A 613 0 R
+/Parent 591 0 R
+/Prev 595 0 R
+/Next 635 0 R
+/First 619 0 R
+/Last 631 0 R
+/Count -4
+>> endobj
+611 0 obj <<
+/Title 612 0 R
+/A 609 0 R
+/Parent 595 0 R
+/Prev 607 0 R
+>> endobj
+607 0 obj <<
+/Title 608 0 R
+/A 605 0 R
+/Parent 595 0 R
+/Prev 603 0 R
+/Next 611 0 R
+>> endobj
+603 0 obj <<
+/Title 604 0 R
+/A 601 0 R
+/Parent 595 0 R
+/Prev 599 0 R
+/Next 607 0 R
+>> endobj
+599 0 obj <<
+/Title 600 0 R
+/A 597 0 R
+/Parent 595 0 R
+/Next 603 0 R
+>> endobj
+595 0 obj <<
+/Title 596 0 R
+/A 593 0 R
+/Parent 591 0 R
+/Next 615 0 R
+/First 599 0 R
+/Last 611 0 R
+/Count -4
+>> endobj
+591 0 obj <<
+/Title 592 0 R
+/A 589 0 R
+/Parent 4216 0 R
+/Prev 571 0 R
+/Next 655 0 R
+/First 595 0 R
+/Last 635 0 R
+/Count -3
+>> endobj
+587 0 obj <<
+/Title 588 0 R
+/A 585 0 R
+/Parent 571 0 R
+/Prev 583 0 R
+>> endobj
+583 0 obj <<
+/Title 584 0 R
+/A 581 0 R
+/Parent 571 0 R
+/Prev 579 0 R
+/Next 587 0 R
+>> endobj
+579 0 obj <<
+/Title 580 0 R
+/A 577 0 R
+/Parent 571 0 R
+/Prev 575 0 R
+/Next 583 0 R
+>> endobj
+575 0 obj <<
+/Title 576 0 R
+/A 573 0 R
+/Parent 571 0 R
+/Next 579 0 R
+>> endobj
+571 0 obj <<
+/Title 572 0 R
+/A 569 0 R
+/Parent 4216 0 R
+/Prev 535 0 R
+/Next 591 0 R
+/First 575 0 R
+/Last 587 0 R
+/Count -4
+>> endobj
+567 0 obj <<
+/Title 568 0 R
+/A 565 0 R
+/Parent 535 0 R
+/Prev 563 0 R
+>> endobj
+563 0 obj <<
+/Title 564 0 R
+/A 561 0 R
+/Parent 535 0 R
+/Prev 559 0 R
+/Next 567 0 R
+>> endobj
+559 0 obj <<
+/Title 560 0 R
+/A 557 0 R
+/Parent 535 0 R
+/Prev 555 0 R
+/Next 563 0 R
+>> endobj
+555 0 obj <<
+/Title 556 0 R
+/A 553 0 R
+/Parent 535 0 R
+/Prev 551 0 R
+/Next 559 0 R
+>> endobj
+551 0 obj <<
+/Title 552 0 R
+/A 549 0 R
+/Parent 535 0 R
+/Prev 547 0 R
+/Next 555 0 R
+>> endobj
+547 0 obj <<
+/Title 548 0 R
+/A 545 0 R
+/Parent 535 0 R
+/Prev 543 0 R
+/Next 551 0 R
+>> endobj
+543 0 obj <<
+/Title 544 0 R
+/A 541 0 R
+/Parent 535 0 R
+/Prev 539 0 R
+/Next 547 0 R
+>> endobj
+539 0 obj <<
+/Title 540 0 R
+/A 537 0 R
+/Parent 535 0 R
+/Next 543 0 R
+>> endobj
+535 0 obj <<
+/Title 536 0 R
+/A 533 0 R
+/Parent 4216 0 R
+/Prev 387 0 R
+/Next 571 0 R
+/First 539 0 R
+/Last 567 0 R
+/Count -8
+>> endobj
+531 0 obj <<
+/Title 532 0 R
+/A 529 0 R
+/Parent 523 0 R
+/Prev 527 0 R
+>> endobj
+527 0 obj <<
+/Title 528 0 R
+/A 525 0 R
+/Parent 523 0 R
+/Next 531 0 R
+>> endobj
+523 0 obj <<
+/Title 524 0 R
+/A 521 0 R
+/Parent 515 0 R
+/Prev 519 0 R
+/First 527 0 R
+/Last 531 0 R
+/Count -2
+>> endobj
+519 0 obj <<
+/Title 520 0 R
+/A 517 0 R
+/Parent 515 0 R
+/Next 523 0 R
+>> endobj
+515 0 obj <<
+/Title 516 0 R
+/A 513 0 R
+/Parent 387 0 R
+/Prev 471 0 R
+/First 519 0 R
+/Last 523 0 R
+/Count -2
+>> endobj
+511 0 obj <<
+/Title 512 0 R
+/A 509 0 R
+/Parent 471 0 R
+/Prev 507 0 R
+>> endobj
+507 0 obj <<
+/Title 508 0 R
+/A 505 0 R
+/Parent 471 0 R
+/Prev 503 0 R
+/Next 511 0 R
+>> endobj
+503 0 obj <<
+/Title 504 0 R
+/A 501 0 R
+/Parent 471 0 R
+/Prev 499 0 R
+/Next 507 0 R
+>> endobj
+499 0 obj <<
+/Title 500 0 R
+/A 497 0 R
+/Parent 471 0 R
+/Prev 495 0 R
+/Next 503 0 R
+>> endobj
+495 0 obj <<
+/Title 496 0 R
+/A 493 0 R
+/Parent 471 0 R
+/Prev 491 0 R
+/Next 499 0 R
+>> endobj
+491 0 obj <<
+/Title 492 0 R
+/A 489 0 R
+/Parent 471 0 R
+/Prev 487 0 R
+/Next 495 0 R
+>> endobj
+487 0 obj <<
+/Title 488 0 R
+/A 485 0 R
+/Parent 471 0 R
+/Prev 483 0 R
+/Next 491 0 R
+>> endobj
+483 0 obj <<
+/Title 484 0 R
+/A 481 0 R
+/Parent 471 0 R
+/Prev 479 0 R
+/Next 487 0 R
+>> endobj
+479 0 obj <<
+/Title 480 0 R
+/A 477 0 R
+/Parent 471 0 R
+/Prev 475 0 R
+/Next 483 0 R
+>> endobj
+475 0 obj <<
+/Title 476 0 R
+/A 473 0 R
+/Parent 471 0 R
+/Next 479 0 R
+>> endobj
+471 0 obj <<
+/Title 472 0 R
+/A 469 0 R
+/Parent 387 0 R
+/Prev 395 0 R
+/Next 515 0 R
+/First 475 0 R
+/Last 511 0 R
+/Count -10
+>> endobj
+467 0 obj <<
+/Title 468 0 R
+/A 465 0 R
+/Parent 455 0 R
+/Prev 463 0 R
+>> endobj
+463 0 obj <<
+/Title 464 0 R
+/A 461 0 R
+/Parent 455 0 R
+/Prev 459 0 R
+/Next 467 0 R
+>> endobj
+459 0 obj <<
+/Title 460 0 R
+/A 457 0 R
+/Parent 455 0 R
+/Next 463 0 R
+>> endobj
+455 0 obj <<
+/Title 456 0 R
+/A 453 0 R
+/Parent 395 0 R
+/Prev 451 0 R
+/First 459 0 R
+/Last 467 0 R
+/Count -3
+>> endobj
+451 0 obj <<
+/Title 452 0 R
+/A 449 0 R
+/Parent 395 0 R
+/Prev 427 0 R
+/Next 455 0 R
+>> endobj
+447 0 obj <<
+/Title 448 0 R
+/A 445 0 R
+/Parent 427 0 R
+/Prev 443 0 R
+>> endobj
+443 0 obj <<
+/Title 444 0 R
+/A 441 0 R
+/Parent 427 0 R
+/Prev 439 0 R
+/Next 447 0 R
+>> endobj
+439 0 obj <<
+/Title 440 0 R
+/A 437 0 R
+/Parent 427 0 R
+/Prev 435 0 R
+/Next 443 0 R
+>> endobj
+435 0 obj <<
+/Title 436 0 R
+/A 433 0 R
+/Parent 427 0 R
+/Prev 431 0 R
+/Next 439 0 R
+>> endobj
+431 0 obj <<
+/Title 432 0 R
+/A 429 0 R
+/Parent 427 0 R
+/Next 435 0 R
+>> endobj
+427 0 obj <<
+/Title 428 0 R
+/A 425 0 R
+/Parent 395 0 R
+/Prev 423 0 R
+/Next 451 0 R
+/First 431 0 R
+/Last 447 0 R
+/Count -5
+>> endobj
+423 0 obj <<
+/Title 424 0 R
+/A 421 0 R
+/Parent 395 0 R
+/Prev 419 0 R
+/Next 427 0 R
+>> endobj
+419 0 obj <<
+/Title 420 0 R
+/A 417 0 R
+/Parent 395 0 R
+/Prev 415 0 R
+/Next 423 0 R
+>> endobj
+415 0 obj <<
+/Title 416 0 R
+/A 413 0 R
+/Parent 395 0 R
+/Prev 411 0 R
+/Next 419 0 R
+>> endobj
+411 0 obj <<
+/Title 412 0 R
+/A 409 0 R
+/Parent 395 0 R
+/Prev 407 0 R
+/Next 415 0 R
+>> endobj
+407 0 obj <<
+/Title 408 0 R
+/A 405 0 R
+/Parent 395 0 R
+/Prev 403 0 R
+/Next 411 0 R
+>> endobj
+403 0 obj <<
+/Title 404 0 R
+/A 401 0 R
+/Parent 395 0 R
+/Prev 399 0 R
+/Next 407 0 R
+>> endobj
+399 0 obj <<
+/Title 400 0 R
+/A 397 0 R
+/Parent 395 0 R
+/Next 403 0 R
+>> endobj
+395 0 obj <<
+/Title 396 0 R
+/A 393 0 R
+/Parent 387 0 R
+/Prev 391 0 R
+/Next 471 0 R
+/First 399 0 R
+/Last 455 0 R
+/Count -10
+>> endobj
+391 0 obj <<
+/Title 392 0 R
+/A 389 0 R
+/Parent 387 0 R
+/Next 395 0 R
+>> endobj
+387 0 obj <<
+/Title 388 0 R
+/A 385 0 R
+/Parent 4216 0 R
+/Prev 307 0 R
+/Next 535 0 R
+/First 391 0 R
+/Last 515 0 R
+/Count -4
+>> endobj
+383 0 obj <<
+/Title 384 0 R
+/A 381 0 R
+/Parent 307 0 R
+/Prev 355 0 R
+>> endobj
+379 0 obj <<
+/Title 380 0 R
+/A 377 0 R
+/Parent 355 0 R
+/Prev 375 0 R
+>> endobj
+375 0 obj <<
+/Title 376 0 R
+/A 373 0 R
+/Parent 355 0 R
+/Prev 371 0 R
+/Next 379 0 R
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 369 0 R
+/Parent 355 0 R
+/Prev 367 0 R
+/Next 375 0 R
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 365 0 R
+/Parent 355 0 R
+/Prev 363 0 R
+/Next 371 0 R
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 361 0 R
+/Parent 355 0 R
+/Prev 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 357 0 R
+/Parent 355 0 R
+/Next 363 0 R
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 353 0 R
+/Parent 307 0 R
+/Prev 343 0 R
+/Next 383 0 R
+/First 359 0 R
+/Last 379 0 R
+/Count -6
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 349 0 R
+/Parent 343 0 R
+/Prev 347 0 R
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 345 0 R
+/Parent 343 0 R
+/Next 351 0 R
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 341 0 R
+/Parent 307 0 R
+/Prev 315 0 R
+/Next 355 0 R
+/First 347 0 R
+/Last 351 0 R
+/Count -2
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 337 0 R
+/Parent 315 0 R
+/Prev 335 0 R
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 333 0 R
+/Parent 315 0 R
+/Prev 331 0 R
+/Next 339 0 R
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 329 0 R
+/Parent 315 0 R
+/Prev 327 0 R
+/Next 335 0 R
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 325 0 R
+/Parent 315 0 R
+/Prev 323 0 R
+/Next 331 0 R
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 321 0 R
+/Parent 315 0 R
+/Prev 319 0 R
+/Next 327 0 R
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 317 0 R
+/Parent 315 0 R
+/Next 323 0 R
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 307 0 R
+/Prev 311 0 R
+/Next 343 0 R
+/First 319 0 R
+/Last 339 0 R
+/Count -6
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 307 0 R
+/Next 315 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 4216 0 R
+/Prev 119 0 R
+/Next 387 0 R
+/First 311 0 R
+/Last 383 0 R
+/Count -5
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 295 0 R
+/Prev 299 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 295 0 R
+/Next 303 0 R
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 119 0 R
+/Prev 267 0 R
+/First 299 0 R
+/Last 303 0 R
+/Count -2
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 267 0 R
+/Prev 287 0 R
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 267 0 R
+/Prev 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 267 0 R
+/Prev 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 267 0 R
+/Prev 275 0 R
+/Next 283 0 R
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 267 0 R
+/Prev 271 0 R
+/Next 279 0 R
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 267 0 R
+/Next 275 0 R
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 119 0 R
+/Prev 223 0 R
+/Next 295 0 R
+/First 271 0 R
+/Last 291 0 R
+/Count -6
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 223 0 R
+/Prev 259 0 R
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 223 0 R
+/Prev 255 0 R
+/Next 263 0 R
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 223 0 R
+/Prev 251 0 R
+/Next 259 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 223 0 R
+/Prev 247 0 R
+/Next 255 0 R
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 223 0 R
+/Prev 243 0 R
+/Next 251 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 223 0 R
+/Prev 239 0 R
+/Next 247 0 R
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 223 0 R
+/Prev 235 0 R
+/Next 243 0 R
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 223 0 R
+/Prev 231 0 R
+/Next 239 0 R
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 223 0 R
+/Prev 227 0 R
+/Next 235 0 R
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 223 0 R
+/Next 231 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 119 0 R
+/Prev 139 0 R
+/Next 267 0 R
+/First 227 0 R
+/Last 263 0 R
+/Count -10
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 139 0 R
+/Prev 191 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 191 0 R
+/Prev 211 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 191 0 R
+/Prev 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 191 0 R
+/Prev 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 191 0 R
+/Prev 199 0 R
+/Next 207 0 R
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 191 0 R
+/Prev 195 0 R
+/Next 203 0 R
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 191 0 R
+/Next 199 0 R
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 139 0 R
+/Prev 187 0 R
+/Next 219 0 R
+/First 195 0 R
+/Last 215 0 R
+/Count -6
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 139 0 R
+/Prev 163 0 R
+/Next 191 0 R
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 163 0 R
+/Prev 179 0 R
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 163 0 R
+/Prev 175 0 R
+/Next 183 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 163 0 R
+/Prev 171 0 R
+/Next 179 0 R
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 163 0 R
+/Prev 167 0 R
+/Next 175 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 163 0 R
+/Next 171 0 R
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 139 0 R
+/Prev 159 0 R
+/Next 187 0 R
+/First 167 0 R
+/Last 183 0 R
+/Count -5
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 139 0 R
+/Prev 155 0 R
+/Next 163 0 R
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 139 0 R
+/Prev 151 0 R
+/Next 159 0 R
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 139 0 R
+/Prev 147 0 R
+/Next 155 0 R
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 139 0 R
+/Prev 143 0 R
+/Next 151 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 139 0 R
+/Next 147 0 R
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 119 0 R
+/Prev 135 0 R
+/Next 223 0 R
+/First 143 0 R
+/Last 219 0 R
+/Count -9
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 119 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 119 0 R
+/Prev 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 119 0 R
+/Prev 123 0 R
+/Next 131 0 R
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 119 0 R
+/Next 127 0 R
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 4216 0 R
+/Prev 107 0 R
+/Next 307 0 R
+/First 123 0 R
+/Last 295 0 R
+/Count -8
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 107 0 R
+/Prev 111 0 R
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 4216 0 R
+/Prev 51 0 R
+/Next 119 0 R
+/First 111 0 R
+/Last 115 0 R
+/Count -2
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 51 0 R
+/Prev 95 0 R
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 95 0 R
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 51 0 R
+/Prev 75 0 R
+/Next 103 0 R
+/First 99 0 R
+/Last 99 0 R
+/Count -1
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 75 0 R
+/Prev 87 0 R
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 75 0 R
+/Prev 83 0 R
+/Next 91 0 R
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 75 0 R
+/Prev 79 0 R
+/Next 87 0 R
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 75 0 R
+/Next 83 0 R
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 51 0 R
+/Prev 71 0 R
+/Next 95 0 R
+/First 79 0 R
+/Last 91 0 R
+/Count -4
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 51 0 R
+/Prev 67 0 R
+/Next 75 0 R
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 51 0 R
+/Prev 63 0 R
+/Next 71 0 R
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 51 0 R
+/Prev 59 0 R
+/Next 67 0 R
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 51 0 R
+/Prev 55 0 R
+/Next 63 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 51 0 R
+/Next 59 0 R
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 4216 0 R
+/Prev 15 0 R
+/Next 107 0 R
+/First 55 0 R
+/Last 103 0 R
+/Count -8
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 31 0 R
+/Prev 35 0 R
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 35 0 R
+/Prev 39 0 R
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 35 0 R
+/Next 43 0 R
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 31 0 R
+/Next 47 0 R
+/First 39 0 R
+/Last 43 0 R
+/Count -2
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 15 0 R
+/Prev 27 0 R
+/First 35 0 R
+/Last 47 0 R
+/Count -2
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 15 0 R
+/Prev 23 0 R
+/Next 31 0 R
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 15 0 R
+/Prev 19 0 R
+/Next 27 0 R
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 4216 0 R
+/Prev 11 0 R
+/Next 51 0 R
+/First 19 0 R
+/Last 31 0 R
+/Count -4
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 4216 0 R
+/Prev 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 4216 0 R
+/Next 11 0 R
+>> endobj
+4217 0 obj <<
+/Names [(AMS.18) 1244 0 R (Doc-Start) 715 0 R (Hfootnote.1) 1303 0 R (Hfootnote.2) 1330 0 R (Item.1) 1104 0 R (Item.10) 1427 0 R]
+/Limits [(AMS.18) (Item.10)]
+>> endobj
+4218 0 obj <<
+/Names [(Item.100) 2139 0 R (Item.101) 2140 0 R (Item.102) 2141 0 R (Item.103) 2142 0 R (Item.104) 2143 0 R (Item.105) 2144 0 R]
+/Limits [(Item.100) (Item.105)]
+>> endobj
+4219 0 obj <<
+/Names [(Item.106) 2145 0 R (Item.107) 2146 0 R (Item.108) 2147 0 R (Item.109) 2148 0 R (Item.11) 1428 0 R (Item.110) 2149 0 R]
+/Limits [(Item.106) (Item.110)]
+>> endobj
+4220 0 obj <<
+/Names [(Item.111) 2150 0 R (Item.112) 2223 0 R (Item.113) 2224 0 R (Item.114) 2225 0 R (Item.115) 2226 0 R (Item.116) 2227 0 R]
+/Limits [(Item.111) (Item.116)]
+>> endobj
+4221 0 obj <<
+/Names [(Item.117) 2238 0 R (Item.118) 2239 0 R (Item.119) 2240 0 R (Item.12) 1429 0 R (Item.120) 2241 0 R (Item.121) 2242 0 R]
+/Limits [(Item.117) (Item.121)]
+>> endobj
+4222 0 obj <<
+/Names [(Item.122) 2243 0 R (Item.123) 2244 0 R (Item.124) 2245 0 R (Item.125) 2246 0 R (Item.126) 2247 0 R (Item.127) 2248 0 R]
+/Limits [(Item.122) (Item.127)]
+>> endobj
+4223 0 obj <<
+/Names [(Item.128) 2249 0 R (Item.129) 2250 0 R (Item.13) 1430 0 R (Item.130) 2251 0 R (Item.131) 2252 0 R (Item.132) 2268 0 R]
+/Limits [(Item.128) (Item.132)]
+>> endobj
+4224 0 obj <<
+/Names [(Item.133) 2269 0 R (Item.134) 2270 0 R (Item.135) 2271 0 R (Item.136) 2272 0 R (Item.137) 2273 0 R (Item.138) 2274 0 R]
+/Limits [(Item.133) (Item.138)]
+>> endobj
+4225 0 obj <<
+/Names [(Item.139) 2729 0 R (Item.14) 1441 0 R (Item.140) 2730 0 R (Item.141) 2840 0 R (Item.142) 2841 0 R (Item.143) 2842 0 R]
+/Limits [(Item.139) (Item.143)]
+>> endobj
+4226 0 obj <<
+/Names [(Item.144) 2843 0 R (Item.145) 2844 0 R (Item.146) 2845 0 R (Item.147) 2846 0 R (Item.148) 2847 0 R (Item.149) 2848 0 R]
+/Limits [(Item.144) (Item.149)]
+>> endobj
+4227 0 obj <<
+/Names [(Item.15) 1442 0 R (Item.150) 2849 0 R (Item.151) 2850 0 R (Item.152) 2851 0 R (Item.16) 1443 0 R (Item.17) 1444 0 R]
+/Limits [(Item.15) (Item.17)]
+>> endobj
+4228 0 obj <<
+/Names [(Item.18) 1445 0 R (Item.19) 1800 0 R (Item.2) 1105 0 R (Item.20) 1801 0 R (Item.21) 1802 0 R (Item.22) 1803 0 R]
+/Limits [(Item.18) (Item.22)]
+>> endobj
+4229 0 obj <<
+/Names [(Item.23) 1804 0 R (Item.24) 1805 0 R (Item.25) 1818 0 R (Item.26) 1819 0 R (Item.27) 1820 0 R (Item.28) 1821 0 R]
+/Limits [(Item.23) (Item.28)]
+>> endobj
+4230 0 obj <<
+/Names [(Item.29) 1822 0 R (Item.3) 1106 0 R (Item.30) 1823 0 R (Item.31) 1824 0 R (Item.32) 1825 0 R (Item.33) 1826 0 R]
+/Limits [(Item.29) (Item.33)]
+>> endobj
+4231 0 obj <<
+/Names [(Item.34) 1827 0 R (Item.35) 1828 0 R (Item.36) 1829 0 R (Item.37) 1873 0 R (Item.38) 1874 0 R (Item.39) 1875 0 R]
+/Limits [(Item.34) (Item.39)]
+>> endobj
+4232 0 obj <<
+/Names [(Item.4) 1407 0 R (Item.40) 1876 0 R (Item.41) 1877 0 R (Item.42) 1878 0 R (Item.43) 1879 0 R (Item.44) 1880 0 R]
+/Limits [(Item.4) (Item.44)]
+>> endobj
+4233 0 obj <<
+/Names [(Item.45) 1881 0 R (Item.46) 1882 0 R (Item.47) 1883 0 R (Item.48) 1888 0 R (Item.49) 1919 0 R (Item.5) 1408 0 R]
+/Limits [(Item.45) (Item.5)]
+>> endobj
+4234 0 obj <<
+/Names [(Item.50) 1920 0 R (Item.51) 1921 0 R (Item.52) 1922 0 R (Item.53) 1923 0 R (Item.54) 1924 0 R (Item.55) 1925 0 R]
+/Limits [(Item.50) (Item.55)]
+>> endobj
+4235 0 obj <<
+/Names [(Item.56) 1926 0 R (Item.57) 1927 0 R (Item.58) 1928 0 R (Item.59) 1929 0 R (Item.6) 1409 0 R (Item.60) 1930 0 R]
+/Limits [(Item.56) (Item.60)]
+>> endobj
+4236 0 obj <<
+/Names [(Item.61) 1931 0 R (Item.62) 1932 0 R (Item.63) 1968 0 R (Item.64) 1969 0 R (Item.65) 1970 0 R (Item.66) 1971 0 R]
+/Limits [(Item.61) (Item.66)]
+>> endobj
+4237 0 obj <<
+/Names [(Item.67) 1972 0 R (Item.68) 1973 0 R (Item.69) 1980 0 R (Item.7) 1424 0 R (Item.70) 1981 0 R (Item.71) 1982 0 R]
+/Limits [(Item.67) (Item.71)]
+>> endobj
+4238 0 obj <<
+/Names [(Item.72) 1983 0 R (Item.73) 1975 0 R (Item.74) 1984 0 R (Item.75) 1994 0 R (Item.76) 1995 0 R (Item.77) 1996 0 R]
+/Limits [(Item.72) (Item.77)]
+>> endobj
+4239 0 obj <<
+/Names [(Item.78) 1997 0 R (Item.79) 1998 0 R (Item.8) 1425 0 R (Item.80) 1999 0 R (Item.81) 2000 0 R (Item.82) 2001 0 R]
+/Limits [(Item.78) (Item.82)]
+>> endobj
+4240 0 obj <<
+/Names [(Item.83) 2002 0 R (Item.84) 2003 0 R (Item.85) 2004 0 R (Item.86) 2111 0 R (Item.87) 2112 0 R (Item.88) 2113 0 R]
+/Limits [(Item.83) (Item.88)]
+>> endobj
+4241 0 obj <<
+/Names [(Item.89) 2114 0 R (Item.9) 1426 0 R (Item.90) 2115 0 R (Item.91) 2116 0 R (Item.92) 2117 0 R (Item.93) 2118 0 R]
+/Limits [(Item.89) (Item.93)]
+>> endobj
+4242 0 obj <<
+/Names [(Item.94) 2119 0 R (Item.95) 2120 0 R (Item.96) 2121 0 R (Item.97) 2122 0 R (Item.98) 2137 0 R (Item.99) 2138 0 R]
+/Limits [(Item.94) (Item.99)]
+>> endobj
+4243 0 obj <<
+/Names [(appendix*.260) 2896 0 R (appendix.A) 654 0 R (appendix.B) 690 0 R (chapter*.1) 774 0 R (chapter*.2) 938 0 R (chapter*.4) 965 0 R]
+/Limits [(appendix*.260) (chapter*.4)]
+>> endobj
+4244 0 obj <<
+/Names [(chapter.1) 14 0 R (chapter.2) 50 0 R (chapter.3) 106 0 R (chapter.4) 118 0 R (chapter.5) 306 0 R (chapter.6) 386 0 R]
+/Limits [(chapter.1) (chapter.6)]
+>> endobj
+4245 0 obj <<
+/Names [(chapter.7) 534 0 R (chapter.8) 570 0 R (chapter.9) 590 0 R (cite.BBH:89) 997 0 R (cite.BrHi:89) 1000 0 R (cite.ByHi:75) 1124 0 R]
+/Limits [(chapter.7) (cite.ByHi:75)]
+>> endobj
+4246 0 obj <<
+/Names [(cite.ByHi:99) 1006 0 R (cite.Byr:92) 998 0 R (cite.CLPS:03) 1261 0 R (cite.CaSt:85) 1207 0 R (cite.CoHi:94) 1001 0 R (cite.CoHi:96) 1002 0 R]
+/Limits [(cite.ByHi:99) (cite.CoHi:96)]
+>> endobj
+4247 0 obj <<
+/Names [(cite.DGL:99) 1142 0 R (cite.DaPa:10) 1139 0 R (cite.FTB:97) 1231 0 R (cite.Fre:93) 1005 0 R (cite.HBGLSSW:05) 996 0 R (cite.HeSh:80) 1185 0 R]
+/Limits [(cite.DGL:99) (cite.HeSh:80)]
+>> endobj
+4248 0 obj <<
+/Names [(cite.HiTa:98) 1904 0 R (cite.Hin:00) 1166 0 R (cite.Hin:92) 1174 0 R (cite.Hin:95) 1175 0 R (cite.JaSD:80) 1125 0 R (cite.KLU_site) 1140 0 R]
+/Limits [(cite.HiTa:98) (cite.KLU_site)]
+>> endobj
+4249 0 obj <<
+/Names [(cite.LPZ:99) 1229 0 R (cite.Li:05) 1141 0 R (cite.MaPe:97) 1230 0 R (cite.OzBa:05) 1331 0 R (cite.RaHi:94) 999 0 R (cite.SaSc:86) 1003 0 R]
+/Limits [(cite.LPZ:99) (cite.SaSc:86)]
+>> endobj
+4250 0 obj <<
+/Names [(cite.SeHi:05) 995 0 R (cite.SuperLUMT_site) 1143 0 R (cite.Van:92) 1004 0 R (cite.arkode_ex) 2626 0 R (cite.cvode_ex) 1471 0 R (cite.cvode_ug) 1391 0 R]
+/Limits [(cite.SeHi:05) (cite.cvode_ug)]
+>> endobj
+4251 0 obj <<
+/Names [(cite.cvodes_ex) 1062 0 R (cite.ida_ex) 2636 0 R (equation.2.1) 1114 0 R (equation.2.10) 1183 0 R (equation.2.11) 1206 0 R (equation.2.12) 1227 0 R]
+/Limits [(cite.cvodes_ex) (equation.2.12)]
+>> endobj
+4252 0 obj <<
+/Names [(equation.2.13) 1228 0 R (equation.2.14) 1243 0 R (equation.2.15) 1245 0 R (equation.2.16) 1258 0 R (equation.2.17) 1259 0 R (equation.2.18) 1260 0 R]
+/Limits [(equation.2.13) (equation.2.18)]
+>> endobj
+4253 0 obj <<
+/Names [(equation.2.19) 1283 0 R (equation.2.2) 1118 0 R (equation.2.20) 1284 0 R (equation.2.21) 1285 0 R (equation.2.22) 1286 0 R (equation.2.23) 1329 0 R]
+/Limits [(equation.2.19) (equation.2.23)]
+>> endobj
+4254 0 obj <<
+/Names [(equation.2.3) 1119 0 R (equation.2.4) 1122 0 R (equation.2.5) 1136 0 R (equation.2.6) 1137 0 R (equation.2.7) 1138 0 R (equation.2.8) 1154 0 R]
+/Limits [(equation.2.3) (equation.2.8)]
+>> endobj
+4255 0 obj <<
+/Names [(equation.2.9) 1182 0 R (equation.4.1) 1899 0 R (equation.4.2) 1900 0 R (equation.4.3) 1901 0 R (equation.4.4) 1902 0 R (equation.4.5) 1903 0 R]
+/Limits [(equation.2.9) (equation.4.5)]
+>> endobj
+4256 0 obj <<
+/Names [(figure.2.1) 968 0 R (figure.3.1) 969 0 R (figure.3.2) 970 0 R (figure.9.1) 971 0 R (figure.9.2) 972 0 R (figure.A.1) 973 0 R]
+/Limits [(figure.2.1) (figure.A.1)]
+>> endobj
+4257 0 obj <<
+/Names [(figure.A.2) 974 0 R (page.1) 994 0 R (page.10) 1135 0 R (page.100) 2037 0 R (page.101) 2044 0 R (page.102) 2054 0 R]
+/Limits [(figure.A.2) (page.102)]
+>> endobj
+4258 0 obj <<
+/Names [(page.103) 2061 0 R (page.104) 2069 0 R (page.105) 2077 0 R (page.106) 2087 0 R (page.107) 2097 0 R (page.108) 2103 0 R]
+/Limits [(page.103) (page.108)]
+>> endobj
+4259 0 obj <<
+/Names [(page.109) 2110 0 R (page.11) 1149 0 R (page.110) 2136 0 R (page.111) 2155 0 R (page.112) 2162 0 R (page.113) 2168 0 R]
+/Limits [(page.109) (page.113)]
+>> endobj
+4260 0 obj <<
+/Names [(page.114) 2175 0 R (page.115) 2183 0 R (page.116) 2189 0 R (page.117) 2201 0 R (page.118) 2209 0 R (page.119) 2222 0 R]
+/Limits [(page.114) (page.119)]
+>> endobj
+4261 0 obj <<
+/Names [(page.12) 1153 0 R (page.120) 2237 0 R (page.121) 2267 0 R (page.122) 2279 0 R (page.123) 2288 0 R (page.124) 2295 0 R]
+/Limits [(page.12) (page.124)]
+>> endobj
+4262 0 obj <<
+/Names [(page.125) 2302 0 R (page.126) 2309 0 R (page.127) 2318 0 R (page.128) 2324 0 R (page.129) 2330 0 R (page.13) 1165 0 R]
+/Limits [(page.125) (page.13)]
+>> endobj
+4263 0 obj <<
+/Names [(page.130) 2339 0 R (page.131) 2348 0 R (page.132) 2356 0 R (page.133) 2366 0 R (page.134) 2375 0 R (page.135) 2381 0 R]
+/Limits [(page.130) (page.135)]
+>> endobj
+4264 0 obj <<
+/Names [(page.136) 2391 0 R (page.137) 2399 0 R (page.138) 2407 0 R (page.139) 2419 0 R (page.14) 1173 0 R (page.140) 2428 0 R]
+/Limits [(page.136) (page.140)]
+>> endobj
+4265 0 obj <<
+/Names [(page.141) 2438 0 R (page.142) 2448 0 R (page.143) 2457 0 R (page.144) 2463 0 R (page.145) 2472 0 R (page.146) 2479 0 R]
+/Limits [(page.141) (page.146)]
+>> endobj
+4266 0 obj <<
+/Names [(page.147) 2489 0 R (page.148) 2497 0 R (page.149) 2502 0 R (page.15) 1181 0 R (page.150) 2508 0 R (page.151) 2516 0 R]
+/Limits [(page.147) (page.151)]
+>> endobj
+4267 0 obj <<
+/Names [(page.152) 2524 0 R (page.153) 2531 0 R (page.154) 2538 0 R (page.155) 2543 0 R (page.156) 2549 0 R (page.157) 2554 0 R]
+/Limits [(page.152) (page.157)]
+>> endobj
+4268 0 obj <<
+/Names [(page.158) 2559 0 R (page.159) 2563 0 R (page.16) 1205 0 R (page.160) 2568 0 R (page.161) 2574 0 R (page.162) 2578 0 R]
+/Limits [(page.158) (page.162)]
+>> endobj
+4269 0 obj <<
+/Names [(page.163) 2585 0 R (page.164) 2589 0 R (page.165) 2594 0 R (page.166) 2601 0 R (page.167) 2605 0 R (page.168) 2612 0 R]
+/Limits [(page.163) (page.168)]
+>> endobj
+4270 0 obj <<
+/Names [(page.169) 2619 0 R (page.17) 1226 0 R (page.170) 2625 0 R (page.171) 2633 0 R (page.172) 2640 0 R (page.173) 2645 0 R]
+/Limits [(page.169) (page.173)]
+>> endobj
+4271 0 obj <<
+/Names [(page.174) 2651 0 R (page.175) 2655 0 R (page.176) 2659 0 R (page.177) 2665 0 R (page.178) 2671 0 R (page.179) 2678 0 R]
+/Limits [(page.174) (page.179)]
+>> endobj
+4272 0 obj <<
+/Names [(page.18) 1242 0 R (page.180) 2684 0 R (page.181) 2694 0 R (page.182) 2698 0 R (page.183) 2704 0 R (page.184) 2709 0 R]
+/Limits [(page.18) (page.184)]
+>> endobj
+4273 0 obj <<
+/Names [(page.185) 2720 0 R (page.186) 2724 0 R (page.187) 2728 0 R (page.188) 2734 0 R (page.189) 2738 0 R (page.19) 1257 0 R]
+/Limits [(page.185) (page.19)]
+>> endobj
+4274 0 obj <<
+/Names [(page.190) 2744 0 R (page.191) 2749 0 R (page.192) 2753 0 R (page.193) 2766 0 R (page.194) 2781 0 R (page.195) 2785 0 R]
+/Limits [(page.190) (page.195)]
+>> endobj
+4275 0 obj <<
+/Names [(page.196) 2790 0 R (page.197) 2794 0 R (page.198) 2799 0 R (page.199) 2808 0 R (page.2) 1010 0 R (page.20) 1282 0 R]
+/Limits [(page.196) (page.20)]
+>> endobj
+4276 0 obj <<
+/Names [(page.200) 2812 0 R (page.201) 2817 0 R (page.202) 2822 0 R (page.203) 2826 0 R (page.204) 2830 0 R (page.205) 2839 0 R]
+/Limits [(page.200) (page.205)]
+>> endobj
+4277 0 obj <<
+/Names [(page.206) 2857 0 R (page.207) 2861 0 R (page.208) 2866 0 R (page.209) 2870 0 R (page.21) 1301 0 R (page.210) 2874 0 R]
+/Limits [(page.206) (page.210)]
+>> endobj
+4278 0 obj <<
+/Names [(page.211) 2878 0 R (page.212) 2882 0 R (page.213) 2886 0 R (page.214) 2891 0 R (page.215) 2895 0 R (page.216) 2900 0 R]
+/Limits [(page.211) (page.216)]
+>> endobj
+4279 0 obj <<
+/Names [(page.217) 3118 0 R (page.218) 3319 0 R (page.219) 3455 0 R (page.22) 1328 0 R (page.220) 3662 0 R (page.221) 3808 0 R]
+/Limits [(page.217) (page.221)]
+>> endobj
+4280 0 obj <<
+/Names [(page.222) 3929 0 R (page.223) 4080 0 R (page.224) 4127 0 R (page.23) 1342 0 R (page.24) 1346 0 R (page.25) 1365 0 R]
+/Limits [(page.222) (page.25)]
+>> endobj
+4281 0 obj <<
+/Names [(page.26) 1380 0 R (page.27) 1389 0 R (page.28) 1398 0 R (page.29) 1406 0 R (page.3) 1017 0 R (page.30) 1423 0 R]
+/Limits [(page.26) (page.30)]
+>> endobj
+4282 0 obj <<
+/Names [(page.31) 1440 0 R (page.32) 1452 0 R (page.33) 1460 0 R (page.34) 1469 0 R (page.35) 1480 0 R (page.36) 1485 0 R]
+/Limits [(page.31) (page.36)]
+>> endobj
+4283 0 obj <<
+/Names [(page.37) 1491 0 R (page.38) 1498 0 R (page.39) 1507 0 R (page.4) 1027 0 R (page.40) 1516 0 R (page.41) 1524 0 R]
+/Limits [(page.37) (page.41)]
+>> endobj
+4284 0 obj <<
+/Names [(page.42) 1529 0 R (page.43) 1536 0 R (page.44) 1540 0 R (page.45) 1548 0 R (page.46) 1557 0 R (page.47) 1566 0 R]
+/Limits [(page.42) (page.47)]
+>> endobj
+4285 0 obj <<
+/Names [(page.48) 1575 0 R (page.49) 1582 0 R (page.5) 1056 0 R (page.50) 1590 0 R (page.51) 1600 0 R (page.52) 1609 0 R]
+/Limits [(page.48) (page.52)]
+>> endobj
+4286 0 obj <<
+/Names [(page.53) 1616 0 R (page.54) 1623 0 R (page.55) 1628 0 R (page.56) 1635 0 R (page.57) 1641 0 R (page.58) 1650 0 R]
+/Limits [(page.53) (page.58)]
+>> endobj
+4287 0 obj <<
+/Names [(page.59) 1660 0 R (page.6) 1088 0 R (page.60) 1668 0 R (page.61) 1675 0 R (page.62) 1683 0 R (page.63) 1690 0 R]
+/Limits [(page.59) (page.63)]
+>> endobj
+4288 0 obj <<
+/Names [(page.64) 1698 0 R (page.65) 1705 0 R (page.66) 1713 0 R (page.67) 1720 0 R (page.68) 1728 0 R (page.69) 1735 0 R]
+/Limits [(page.64) (page.69)]
+>> endobj
+4289 0 obj <<
+/Names [(page.7) 1098 0 R (page.70) 1741 0 R (page.71) 1750 0 R (page.72) 1758 0 R (page.73) 1765 0 R (page.74) 1776 0 R]
+/Limits [(page.7) (page.74)]
+>> endobj
+4290 0 obj <<
+/Names [(page.75) 1784 0 R (page.76) 1792 0 R (page.77) 1799 0 R (page.78) 1817 0 R (page.79) 1835 0 R (page.8) 1103 0 R]
+/Limits [(page.75) (page.8)]
+>> endobj
+4291 0 obj <<
+/Names [(page.80) 1841 0 R (page.81) 1847 0 R (page.82) 1855 0 R (page.83) 1864 0 R (page.84) 1872 0 R (page.85) 1887 0 R]
+/Limits [(page.80) (page.85)]
+>> endobj
+4292 0 obj <<
+/Names [(page.86) 1898 0 R (page.87) 1908 0 R (page.88) 1918 0 R (page.89) 1936 0 R (page.9) 1113 0 R (page.90) 1943 0 R]
+/Limits [(page.86) (page.90)]
+>> endobj
+4293 0 obj <<
+/Names [(page.91) 1949 0 R (page.92) 1953 0 R (page.93) 1967 0 R (page.94) 1979 0 R (page.95) 1993 0 R (page.96) 2012 0 R]
+/Limits [(page.91) (page.96)]
+>> endobj
+4294 0 obj <<
+/Names [(page.97) 2017 0 R (page.98) 2022 0 R (page.99) 2030 0 R (page.i) 714 0 R (page.ii) 727 0 R (page.iii) 772 0 R]
+/Limits [(page.97) (page.iii)]
+>> endobj
+4295 0 obj <<
+/Names [(page.iv) 831 0 R (page.ix) 964 0 R (page.v) 883 0 R (page.vi) 923 0 R (page.vii) 937 0 R (page.viii) 953 0 R]
+/Limits [(page.iv) (page.viii)]
+>> endobj
+4296 0 obj <<
+/Names [(page.x) 978 0 R (section*.10) 1029 0 R (section*.100) 1708 0 R (section*.101) 1709 0 R (section*.102) 1714 0 R (section*.103) 1715 0 R]
+/Limits [(page.x) (section*.103)]
+>> endobj
+4297 0 obj <<
+/Names [(section*.104) 1716 0 R (section*.105) 1721 0 R (section*.106) 1722 0 R (section*.107) 1723 0 R (section*.108) 1724 0 R (section*.109) 1729 0 R]
+/Limits [(section*.104) (section*.109)]
+>> endobj
+4298 0 obj <<
+/Names [(section*.11) 1031 0 R (section*.110) 1730 0 R (section*.111) 1736 0 R (section*.112) 1742 0 R (section*.113) 1743 0 R (section*.114) 1751 0 R]
+/Limits [(section*.11) (section*.114)]
+>> endobj
+4299 0 obj <<
+/Names [(section*.115) 1752 0 R (section*.116) 1759 0 R (section*.117) 1766 0 R (section*.118) 1777 0 R (section*.119) 1785 0 R (section*.12) 1057 0 R]
+/Limits [(section*.115) (section*.12)]
+>> endobj
+4300 0 obj <<
+/Names [(section*.120) 1786 0 R (section*.121) 1793 0 R (section*.122) 1830 0 R (section*.123) 1836 0 R (section*.124) 1837 0 R (section*.125) 1842 0 R]
+/Limits [(section*.120) (section*.125)]
+>> endobj
+4301 0 obj <<
+/Names [(section*.126) 1843 0 R (section*.127) 1848 0 R (section*.128) 1849 0 R (section*.129) 1850 0 R (section*.13) 1058 0 R (section*.130) 1856 0 R]
+/Limits [(section*.126) (section*.130)]
+>> endobj
+4302 0 obj <<
+/Names [(section*.131) 1857 0 R (section*.132) 1858 0 R (section*.133) 1865 0 R (section*.134) 1866 0 R (section*.135) 1889 0 R (section*.136) 1890 0 R]
+/Limits [(section*.131) (section*.136)]
+>> endobj
+4303 0 obj <<
+/Names [(section*.137) 1891 0 R (section*.138) 1909 0 R (section*.139) 1910 0 R (section*.14) 1059 0 R (section*.140) 1937 0 R (section*.141) 1938 0 R]
+/Limits [(section*.137) (section*.141)]
+>> endobj
+4304 0 obj <<
+/Names [(section*.142) 1944 0 R (section*.143) 1945 0 R (section*.144) 2005 0 R (section*.145) 2013 0 R (section*.146) 2018 0 R (section*.147) 2023 0 R]
+/Limits [(section*.142) (section*.147)]
+>> endobj
+4305 0 obj <<
+/Names [(section*.148) 2024 0 R (section*.149) 2025 0 R (section*.15) 1060 0 R (section*.150) 2031 0 R (section*.151) 2032 0 R (section*.152) 2038 0 R]
+/Limits [(section*.148) (section*.152)]
+>> endobj
+4306 0 obj <<
+/Names [(section*.153) 2039 0 R (section*.154) 2045 0 R (section*.155) 2046 0 R (section*.156) 2055 0 R (section*.157) 2056 0 R (section*.158) 2062 0 R]
+/Limits [(section*.153) (section*.158)]
+>> endobj
+4307 0 obj <<
+/Names [(section*.159) 2063 0 R (section*.16) 1061 0 R (section*.160) 2064 0 R (section*.161) 2070 0 R (section*.162) 2071 0 R (section*.163) 2078 0 R]
+/Limits [(section*.159) (section*.163)]
+>> endobj
+4308 0 obj <<
+/Names [(section*.164) 2079 0 R (section*.165) 2080 0 R (section*.166) 2088 0 R (section*.167) 2089 0 R (section*.168) 2090 0 R (section*.169) 2098 0 R]
+/Limits [(section*.164) (section*.169)]
+>> endobj
+4309 0 obj <<
+/Names [(section*.170) 2099 0 R (section*.171) 2104 0 R (section*.172) 2105 0 R (section*.173) 2151 0 R (section*.174) 2156 0 R (section*.175) 2163 0 R]
+/Limits [(section*.170) (section*.175)]
+>> endobj
+4310 0 obj <<
+/Names [(section*.176) 2164 0 R (section*.177) 2169 0 R (section*.178) 2170 0 R (section*.179) 2171 0 R (section*.180) 2176 0 R (section*.181) 2177 0 R]
+/Limits [(section*.176) (section*.181)]
+>> endobj
+4311 0 obj <<
+/Names [(section*.182) 2184 0 R (section*.183) 2185 0 R (section*.184) 2190 0 R (section*.185) 2191 0 R (section*.186) 2192 0 R (section*.187) 2193 0 R]
+/Limits [(section*.182) (section*.187)]
+>> endobj
+4312 0 obj <<
+/Names [(section*.188) 2202 0 R (section*.189) 2280 0 R (section*.19) 1453 0 R (section*.190) 2281 0 R (section*.191) 2289 0 R (section*.192) 2290 0 R]
+/Limits [(section*.188) (section*.192)]
+>> endobj
+4313 0 obj <<
+/Names [(section*.193) 2296 0 R (section*.194) 2303 0 R (section*.195) 2304 0 R (section*.196) 2310 0 R (section*.197) 2311 0 R (section*.198) 2319 0 R]
+/Limits [(section*.193) (section*.198)]
+>> endobj
+4314 0 obj <<
+/Names [(section*.199) 2325 0 R (section*.20) 1454 0 R (section*.200) 2331 0 R (section*.201) 2332 0 R (section*.202) 2340 0 R (section*.203) 2341 0 R]
+/Limits [(section*.199) (section*.203)]
+>> endobj
+4315 0 obj <<
+/Names [(section*.204) 2349 0 R (section*.205) 2350 0 R (section*.206) 2357 0 R (section*.207) 2358 0 R (section*.208) 2367 0 R (section*.209) 2368 0 R]
+/Limits [(section*.204) (section*.209)]
+>> endobj
+4316 0 obj <<
+/Names [(section*.21) 1461 0 R (section*.210) 2369 0 R (section*.211) 2376 0 R (section*.212) 2377 0 R (section*.213) 2382 0 R (section*.214) 2383 0 R]
+/Limits [(section*.21) (section*.214)]
+>> endobj
+4317 0 obj <<
+/Names [(section*.215) 2384 0 R (section*.216) 2392 0 R (section*.217) 2393 0 R (section*.218) 2400 0 R (section*.219) 2401 0 R (section*.22) 1462 0 R]
+/Limits [(section*.215) (section*.22)]
+>> endobj
+4318 0 obj <<
+/Names [(section*.220) 2408 0 R (section*.221) 2409 0 R (section*.222) 2420 0 R (section*.223) 2429 0 R (section*.224) 2430 0 R (section*.225) 2439 0 R]
+/Limits [(section*.220) (section*.225)]
+>> endobj
+4319 0 obj <<
+/Names [(section*.226) 2449 0 R (section*.227) 2458 0 R (section*.228) 2464 0 R (section*.229) 2473 0 R (section*.23) 1463 0 R (section*.230) 2480 0 R]
+/Limits [(section*.226) (section*.230)]
+>> endobj
+4320 0 obj <<
+/Names [(section*.231) 2481 0 R (section*.232) 2490 0 R (section*.233) 2498 0 R (section*.234) 2503 0 R (section*.235) 2504 0 R (section*.236) 2509 0 R]
+/Limits [(section*.231) (section*.236)]
+>> endobj
+4321 0 obj <<
+/Names [(section*.237) 2510 0 R (section*.238) 2517 0 R (section*.239) 2525 0 R (section*.24) 1470 0 R (section*.240) 2532 0 R (section*.241) 2533 0 R]
+/Limits [(section*.237) (section*.241)]
+>> endobj
+4322 0 obj <<
+/Names [(section*.242) 2539 0 R (section*.243) 2579 0 R (section*.244) 2590 0 R (section*.245) 2606 0 R (section*.246) 2620 0 R (section*.247) 2634 0 R]
+/Limits [(section*.242) (section*.247)]
+>> endobj
+4323 0 obj <<
+/Names [(section*.248) 2641 0 R (section*.249) 2672 0 R (section*.25) 1481 0 R (section*.250) 2673 0 R (section*.251) 2679 0 R (section*.252) 2685 0 R]
+/Limits [(section*.248) (section*.252)]
+>> endobj
+4324 0 obj <<
+/Names [(section*.253) 2800 0 R (section*.254) 2813 0 R (section*.255) 2831 0 R (section*.256) 2832 0 R (section*.257) 2833 0 R (section*.258) 2834 0 R]
+/Limits [(section*.253) (section*.258)]
+>> endobj
+4325 0 obj <<
+/Names [(section*.259) 2835 0 R (section*.26) 1486 0 R (section*.261) 702 0 R (section*.262) 706 0 R (section*.27) 1487 0 R (section*.28) 1492 0 R]
+/Limits [(section*.259) (section*.28)]
+>> endobj
+4326 0 obj <<
+/Names [(section*.29) 1493 0 R (section*.3) 6 0 R (section*.30) 1494 0 R (section*.31) 1499 0 R (section*.32) 1500 0 R (section*.33) 1508 0 R]
+/Limits [(section*.29) (section*.33)]
+>> endobj
+4327 0 obj <<
+/Names [(section*.34) 1509 0 R (section*.35) 1517 0 R (section*.36) 1518 0 R (section*.37) 1530 0 R (section*.38) 1531 0 R (section*.39) 1532 0 R]
+/Limits [(section*.34) (section*.39)]
+>> endobj
+4328 0 obj <<
+/Names [(section*.40) 1541 0 R (section*.41) 1542 0 R (section*.42) 1543 0 R (section*.43) 1549 0 R (section*.44) 1550 0 R (section*.45) 1551 0 R]
+/Limits [(section*.40) (section*.45)]
+>> endobj
+4329 0 obj <<
+/Names [(section*.46) 1552 0 R (section*.47) 1558 0 R (section*.48) 1559 0 R (section*.49) 1560 0 R (section*.5) 10 0 R (section*.50) 1567 0 R]
+/Limits [(section*.46) (section*.50)]
+>> endobj
+4330 0 obj <<
+/Names [(section*.51) 1568 0 R (section*.52) 1569 0 R (section*.53) 1576 0 R (section*.54) 1577 0 R (section*.55) 1583 0 R (section*.56) 1584 0 R]
+/Limits [(section*.51) (section*.56)]
+>> endobj
+4331 0 obj <<
+/Names [(section*.57) 1591 0 R (section*.58) 1592 0 R (section*.59) 1601 0 R (section*.6) 1012 0 R (section*.60) 1602 0 R (section*.61) 1603 0 R]
+/Limits [(section*.57) (section*.61)]
+>> endobj
+4332 0 obj <<
+/Names [(section*.62) 1610 0 R (section*.63) 1611 0 R (section*.64) 1612 0 R (section*.65) 1617 0 R (section*.66) 1618 0 R (section*.67) 1624 0 R]
+/Limits [(section*.62) (section*.67)]
+>> endobj
+4333 0 obj <<
+/Names [(section*.68) 1636 0 R (section*.69) 1637 0 R (section*.7) 1013 0 R (section*.70) 1642 0 R (section*.71) 1643 0 R (section*.72) 1644 0 R]
+/Limits [(section*.68) (section*.72)]
+>> endobj
+4334 0 obj <<
+/Names [(section*.73) 1645 0 R (section*.74) 1651 0 R (section*.75) 1652 0 R (section*.76) 1653 0 R (section*.77) 1654 0 R (section*.78) 1661 0 R]
+/Limits [(section*.73) (section*.78)]
+>> endobj
+4335 0 obj <<
+/Names [(section*.79) 1662 0 R (section*.8) 1018 0 R (section*.80) 1663 0 R (section*.81) 1664 0 R (section*.82) 1669 0 R (section*.83) 1670 0 R]
+/Limits [(section*.79) (section*.83)]
+>> endobj
+4336 0 obj <<
+/Names [(section*.84) 1671 0 R (section*.85) 1676 0 R (section*.86) 1677 0 R (section*.87) 1678 0 R (section*.88) 1679 0 R (section*.89) 1684 0 R]
+/Limits [(section*.84) (section*.89)]
+>> endobj
+4337 0 obj <<
+/Names [(section*.9) 1028 0 R (section*.90) 1685 0 R (section*.91) 1686 0 R (section*.92) 1691 0 R (section*.93) 1692 0 R (section*.94) 1693 0 R]
+/Limits [(section*.9) (section*.94)]
+>> endobj
+4338 0 obj <<
+/Names [(section*.95) 1699 0 R (section*.96) 1700 0 R (section*.97) 1701 0 R (section*.98) 1706 0 R (section*.99) 1707 0 R (section.1.1) 18 0 R]
+/Limits [(section*.95) (section.1.1)]
+>> endobj
+4339 0 obj <<
+/Names [(section.1.2) 22 0 R (section.1.3) 26 0 R (section.1.4) 30 0 R (section.2.1) 54 0 R (section.2.2) 58 0 R (section.2.3) 62 0 R]
+/Limits [(section.1.2) (section.2.3)]
+>> endobj
+4340 0 obj <<
+/Names [(section.2.4) 66 0 R (section.2.5) 70 0 R (section.2.6) 74 0 R (section.2.7) 94 0 R (section.2.8) 102 0 R (section.3.1) 110 0 R]
+/Limits [(section.2.4) (section.3.1)]
+>> endobj
+4341 0 obj <<
+/Names [(section.3.2) 114 0 R (section.4.1) 122 0 R (section.4.2) 126 0 R (section.4.3) 130 0 R (section.4.4) 134 0 R (section.4.5) 138 0 R]
+/Limits [(section.3.2) (section.4.5)]
+>> endobj
+4342 0 obj <<
+/Names [(section.4.6) 222 0 R (section.4.7) 266 0 R (section.4.8) 294 0 R (section.5.1) 310 0 R (section.5.2) 314 0 R (section.5.3) 342 0 R]
+/Limits [(section.4.6) (section.5.3)]
+>> endobj
+4343 0 obj <<
+/Names [(section.5.4) 354 0 R (section.5.5) 382 0 R (section.6.1) 390 0 R (section.6.2) 394 0 R (section.6.3) 470 0 R (section.6.4) 514 0 R]
+/Limits [(section.5.4) (section.6.4)]
+>> endobj
+4344 0 obj <<
+/Names [(section.7.1) 538 0 R (section.7.2) 542 0 R (section.7.3) 546 0 R (section.7.4) 550 0 R (section.7.5) 554 0 R (section.7.6) 558 0 R]
+/Limits [(section.7.1) (section.7.6)]
+>> endobj
+4345 0 obj <<
+/Names [(section.7.7) 562 0 R (section.7.8) 566 0 R (section.8.1) 574 0 R (section.8.2) 578 0 R (section.8.3) 582 0 R (section.8.4) 586 0 R]
+/Limits [(section.7.7) (section.8.4)]
+>> endobj
+4346 0 obj <<
+/Names [(section.9.1) 594 0 R (section.9.2) 614 0 R (section.9.3) 634 0 R (section.A.1) 658 0 R (section.A.2) 678 0 R (section.A.3) 682 0 R]
+/Limits [(section.9.1) (section.A.3)]
+>> endobj
+4347 0 obj <<
+/Names [(section.A.4) 686 0 R (section.B.1) 694 0 R (section.B.2) 698 0 R (subfigure.3.1.1) 1347 0 R (subfigure.3.1.2) 1348 0 R (subsection.1.4.1) 34 0 R]
+/Limits [(section.A.4) (subsection.1.4.1)]
+>> endobj
+4348 0 obj <<
+/Names [(subsection.1.4.2) 46 0 R (subsection.2.6.1) 78 0 R (subsection.2.6.2) 82 0 R (subsection.2.6.3) 86 0 R (subsection.2.6.4) 90 0 R (subsection.2.7.1) 98 0 R]
+/Limits [(subsection.1.4.2) (subsection.2.7.1)]
+>> endobj
+4349 0 obj <<
+/Names [(subsection.4.5.1) 142 0 R (subsection.4.5.2) 146 0 R (subsection.4.5.3) 150 0 R (subsection.4.5.4) 154 0 R (subsection.4.5.5) 158 0 R (subsection.4.5.6) 162 0 R]
+/Limits [(subsection.4.5.1) (subsection.4.5.6)]
+>> endobj
+4350 0 obj <<
+/Names [(subsection.4.5.7) 186 0 R (subsection.4.5.8) 190 0 R (subsection.4.5.9) 218 0 R (subsection.4.6.1) 226 0 R (subsection.4.6.10) 262 0 R (subsection.4.6.2) 230 0 R]
+/Limits [(subsection.4.5.7) (subsection.4.6.2)]
+>> endobj
+4351 0 obj <<
+/Names [(subsection.4.6.3) 234 0 R (subsection.4.6.4) 238 0 R (subsection.4.6.5) 242 0 R (subsection.4.6.6) 246 0 R (subsection.4.6.7) 250 0 R (subsection.4.6.8) 254 0 R]
+/Limits [(subsection.4.6.3) (subsection.4.6.8)]
+>> endobj
+4352 0 obj <<
+/Names [(subsection.4.6.9) 258 0 R (subsection.4.7.1) 270 0 R (subsection.4.7.2) 274 0 R (subsection.4.7.3) 278 0 R (subsection.4.7.4) 282 0 R (subsection.4.7.5) 286 0 R]
+/Limits [(subsection.4.6.9) (subsection.4.7.5)]
+>> endobj
+4353 0 obj <<
+/Names [(subsection.4.7.6) 290 0 R (subsection.4.8.1) 298 0 R (subsection.4.8.2) 302 0 R (subsection.5.2.1) 318 0 R (subsection.5.2.2) 322 0 R (subsection.5.2.3) 326 0 R]
+/Limits [(subsection.4.7.6) (subsection.5.2.3)]
+>> endobj
+4354 0 obj <<
+/Names [(subsection.5.2.4) 330 0 R (subsection.5.2.5) 334 0 R (subsection.5.2.6) 338 0 R (subsection.5.3.1) 346 0 R (subsection.5.3.2) 350 0 R (subsection.5.4.1) 358 0 R]
+/Limits [(subsection.5.2.4) (subsection.5.4.1)]
+>> endobj
+4355 0 obj <<
+/Names [(subsection.5.4.2) 362 0 R (subsection.5.4.3) 366 0 R (subsection.5.4.4) 370 0 R (subsection.5.4.5) 374 0 R (subsection.5.4.6) 378 0 R (subsection.6.2.1) 398 0 R]
+/Limits [(subsection.5.4.2) (subsection.6.2.1)]
+>> endobj
+4356 0 obj <<
+/Names [(subsection.6.2.10) 454 0 R (subsection.6.2.2) 402 0 R (subsection.6.2.3) 406 0 R (subsection.6.2.4) 410 0 R (subsection.6.2.5) 414 0 R (subsection.6.2.6) 418 0 R]
+/Limits [(subsection.6.2.10) (subsection.6.2.6)]
+>> endobj
+4357 0 obj <<
+/Names [(subsection.6.2.7) 422 0 R (subsection.6.2.8) 426 0 R (subsection.6.2.9) 450 0 R (subsection.6.3.1) 474 0 R (subsection.6.3.10) 510 0 R (subsection.6.3.2) 478 0 R]
+/Limits [(subsection.6.2.7) (subsection.6.3.2)]
+>> endobj
+4358 0 obj <<
+/Names [(subsection.6.3.3) 482 0 R (subsection.6.3.4) 486 0 R (subsection.6.3.5) 490 0 R (subsection.6.3.6) 494 0 R (subsection.6.3.7) 498 0 R (subsection.6.3.8) 502 0 R]
+/Limits [(subsection.6.3.3) (subsection.6.3.8)]
+>> endobj
+4359 0 obj <<
+/Names [(subsection.6.3.9) 506 0 R (subsection.6.4.1) 518 0 R (subsection.6.4.2) 522 0 R (subsection.9.1.1) 598 0 R (subsection.9.1.2) 602 0 R (subsection.9.1.3) 606 0 R]
+/Limits [(subsection.6.3.9) (subsection.9.1.3)]
+>> endobj
+4360 0 obj <<
+/Names [(subsection.9.1.4) 610 0 R (subsection.9.2.1) 618 0 R (subsection.9.2.2) 622 0 R (subsection.9.2.3) 626 0 R (subsection.9.2.4) 630 0 R (subsection.9.3.1) 638 0 R]
+/Limits [(subsection.9.1.4) (subsection.9.3.1)]
+>> endobj
+4361 0 obj <<
+/Names [(subsection.9.3.2) 642 0 R (subsection.9.3.3) 646 0 R (subsection.9.3.4) 650 0 R (subsection.A.1.1) 662 0 R (subsection.A.1.2) 666 0 R (subsection.A.1.3) 670 0 R]
+/Limits [(subsection.9.3.2) (subsection.A.1.3)]
+>> endobj
+4362 0 obj <<
+/Names [(subsection.A.1.4) 674 0 R (subsubsection.1.4.1.1) 38 0 R (subsubsection.1.4.1.2) 42 0 R (subsubsection.4.5.6.1) 166 0 R (subsubsection.4.5.6.2) 170 0 R (subsubsection.4.5.6.3) 174 0 R]
+/Limits [(subsection.A.1.4) (subsubsection.4.5.6.3)]
+>> endobj
+4363 0 obj <<
+/Names [(subsubsection.4.5.6.4) 178 0 R (subsubsection.4.5.6.5) 182 0 R (subsubsection.4.5.8.1) 194 0 R (subsubsection.4.5.8.2) 198 0 R (subsubsection.4.5.8.3) 202 0 R (subsubsection.4.5.8.4) 206 0 R]
+/Limits [(subsubsection.4.5.6.4) (subsubsection.4.5.8.4)]
+>> endobj
+4364 0 obj <<
+/Names [(subsubsection.4.5.8.5) 210 0 R (subsubsection.4.5.8.6) 214 0 R (subsubsection.6.2.10.1) 458 0 R (subsubsection.6.2.10.2) 462 0 R (subsubsection.6.2.10.3) 466 0 R (subsubsection.6.2.8.1) 430 0 R]
+/Limits [(subsubsection.4.5.8.5) (subsubsection.6.2.8.1)]
+>> endobj
+4365 0 obj <<
+/Names [(subsubsection.6.2.8.2) 434 0 R (subsubsection.6.2.8.3) 438 0 R (subsubsection.6.2.8.4) 442 0 R (subsubsection.6.2.8.5) 446 0 R (subsubsection.6.4.2.1) 526 0 R (subsubsection.6.4.2.2) 530 0 R]
+/Limits [(subsubsection.6.2.8.2) (subsubsection.6.4.2.2)]
+>> endobj
+4366 0 obj <<
+/Names [(table.4.1) 940 0 R (table.4.2) 941 0 R (table.4.3) 942 0 R (table.5.1) 943 0 R (table.5.2) 944 0 R (table.7.1) 945 0 R]
+/Limits [(table.4.1) (table.7.1)]
+>> endobj
+4367 0 obj <<
+/Names [(table.7.2) 946 0 R (table.7.3) 947 0 R (table.A.1) 948 0 R (table.A.2) 949 0 R]
+/Limits [(table.7.2) (table.A.2)]
+>> endobj
+4368 0 obj <<
+/Kids [4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R]
+/Limits [(AMS.18) (Item.127)]
+>> endobj
+4369 0 obj <<
+/Kids [4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R]
+/Limits [(Item.128) (Item.22)]
+>> endobj
+4370 0 obj <<
+/Kids [4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R]
+/Limits [(Item.23) (Item.55)]
+>> endobj
+4371 0 obj <<
+/Kids [4235 0 R 4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R]
+/Limits [(Item.56) (Item.88)]
+>> endobj
+4372 0 obj <<
+/Kids [4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R]
+/Limits [(Item.89) (cite.CoHi:96)]
+>> endobj
+4373 0 obj <<
+/Kids [4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R]
+/Limits [(cite.DGL:99) (equation.2.18)]
+>> endobj
+4374 0 obj <<
+/Kids [4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R]
+/Limits [(equation.2.19) (page.108)]
+>> endobj
+4375 0 obj <<
+/Kids [4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R]
+/Limits [(page.109) (page.140)]
+>> endobj
+4376 0 obj <<
+/Kids [4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R]
+/Limits [(page.141) (page.173)]
+>> endobj
+4377 0 obj <<
+/Kids [4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R]
+/Limits [(page.174) (page.205)]
+>> endobj
+4378 0 obj <<
+/Kids [4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R]
+/Limits [(page.206) (page.36)]
+>> endobj
+4379 0 obj <<
+/Kids [4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R]
+/Limits [(page.37) (page.69)]
+>> endobj
+4380 0 obj <<
+/Kids [4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R]
+/Limits [(page.7) (page.iii)]
+>> endobj
+4381 0 obj <<
+/Kids [4295 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R]
+/Limits [(page.iv) (section*.125)]
+>> endobj
+4382 0 obj <<
+/Kids [4301 0 R 4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R]
+/Limits [(section*.126) (section*.158)]
+>> endobj
+4383 0 obj <<
+/Kids [4307 0 R 4308 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R]
+/Limits [(section*.159) (section*.192)]
+>> endobj
+4384 0 obj <<
+/Kids [4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R 4318 0 R]
+/Limits [(section*.193) (section*.225)]
+>> endobj
+4385 0 obj <<
+/Kids [4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R]
+/Limits [(section*.226) (section*.258)]
+>> endobj
+4386 0 obj <<
+/Kids [4325 0 R 4326 0 R 4327 0 R 4328 0 R 4329 0 R 4330 0 R]
+/Limits [(section*.259) (section*.56)]
+>> endobj
+4387 0 obj <<
+/Kids [4331 0 R 4332 0 R 4333 0 R 4334 0 R 4335 0 R 4336 0 R]
+/Limits [(section*.57) (section*.89)]
+>> endobj
+4388 0 obj <<
+/Kids [4337 0 R 4338 0 R 4339 0 R 4340 0 R 4341 0 R 4342 0 R]
+/Limits [(section*.9) (section.5.3)]
+>> endobj
+4389 0 obj <<
+/Kids [4343 0 R 4344 0 R 4345 0 R 4346 0 R 4347 0 R 4348 0 R]
+/Limits [(section.5.4) (subsection.2.7.1)]
+>> endobj
+4390 0 obj <<
+/Kids [4349 0 R 4350 0 R 4351 0 R 4352 0 R 4353 0 R 4354 0 R]
+/Limits [(subsection.4.5.1) (subsection.5.4.1)]
+>> endobj
+4391 0 obj <<
+/Kids [4355 0 R 4356 0 R 4357 0 R 4358 0 R 4359 0 R 4360 0 R]
+/Limits [(subsection.5.4.2) (subsection.9.3.1)]
+>> endobj
+4392 0 obj <<
+/Kids [4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R]
+/Limits [(subsection.9.3.2) (table.7.1)]
+>> endobj
+4393 0 obj <<
+/Kids [4367 0 R]
+/Limits [(table.7.2) (table.A.2)]
+>> endobj
+4394 0 obj <<
+/Kids [4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4373 0 R]
+/Limits [(AMS.18) (equation.2.18)]
+>> endobj
+4395 0 obj <<
+/Kids [4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R 4379 0 R]
+/Limits [(equation.2.19) (page.69)]
+>> endobj
+4396 0 obj <<
+/Kids [4380 0 R 4381 0 R 4382 0 R 4383 0 R 4384 0 R 4385 0 R]
+/Limits [(page.7) (section*.258)]
+>> endobj
+4397 0 obj <<
+/Kids [4386 0 R 4387 0 R 4388 0 R 4389 0 R 4390 0 R 4391 0 R]
+/Limits [(section*.259) (subsection.9.3.1)]
+>> endobj
+4398 0 obj <<
+/Kids [4392 0 R 4393 0 R]
+/Limits [(subsection.9.3.2) (table.A.2)]
+>> endobj
+4399 0 obj <<
+/Kids [4394 0 R 4395 0 R 4396 0 R 4397 0 R 4398 0 R]
+/Limits [(AMS.18) (table.A.2)]
+>> endobj
+4400 0 obj <<
+/Dests 4399 0 R
+>> endobj
+4401 0 obj <<
+/Type /Catalog
+/Pages 4215 0 R
+/Outlines 4216 0 R
+/Names 4400 0 R
+/PageMode/UseOutlines/PageLabels << /Nums [0 << /S /r >> 10 << /S /D >> ] >>
+/OpenAction 709 0 R
+>> endobj
+4402 0 obj <<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
+/CreationDate (D:20160926151722-07'00')
+/ModDate (D:20160926151722-07'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
+>> endobj
+xref
+0 4403
+0000000001 65535 f 
+0000000002 00000 f 
+0000000003 00000 f 
+0000000004 00000 f 
+0000001234 00000 f 
+0000000015 00000 n 
+0000065245 00000 n 
+0001682804 00000 n 
+0000000061 00000 n 
+0000000093 00000 n 
+0000067852 00000 n 
+0001682717 00000 n 
+0000000139 00000 n 
+0000000173 00000 n 
+0000073807 00000 n 
+0001682591 00000 n 
+0000000219 00000 n 
+0000000250 00000 n 
+0000073865 00000 n 
+0001682517 00000 n 
+0000000298 00000 n 
+0000000338 00000 n 
+0000078198 00000 n 
+0001682430 00000 n 
+0000000386 00000 n 
+0000000435 00000 n 
+0000094064 00000 n 
+0001682343 00000 n 
+0000000483 00000 n 
+0000000525 00000 n 
+0000108596 00000 n 
+0001682232 00000 n 
+0000000573 00000 n 
+0000000616 00000 n 
+0000108655 00000 n 
+0001682121 00000 n 
+0000000669 00000 n 
+0000000705 00000 n 
+0000108714 00000 n 
+0001682047 00000 n 
+0000000763 00000 n 
+0000000800 00000 n 
+0000108773 00000 n 
+0001681973 00000 n 
+0000000858 00000 n 
+0000000893 00000 n 
+0000108832 00000 n 
+0001681899 00000 n 
+0000000946 00000 n 
+0000000976 00000 n 
+0000115000 00000 n 
+0001681771 00000 n 
+0000001022 00000 n 
+0000001068 00000 n 
+0000115184 00000 n 
+0001681697 00000 n 
+0000001116 00000 n 
+0000001147 00000 n 
+0000136767 00000 n 
+0001681610 00000 n 
+0000001195 00000 n 
+0000001229 00000 n 
+0000136826 00000 n 
+0001681523 00000 n 
+0000001277 00000 n 
+0000001325 00000 n 
+0000142456 00000 n 
+0001681436 00000 n 
+0000001373 00000 n 
+0000001403 00000 n 
+0000148479 00000 n 
+0001681349 00000 n 
+0000001451 00000 n 
+0000001497 00000 n 
+0000155849 00000 n 
+0001681225 00000 n 
+0000001545 00000 n 
+0000001592 00000 n 
+0000155972 00000 n 
+0001681151 00000 n 
+0000001645 00000 n 
+0000001691 00000 n 
+0000169891 00000 n 
+0001681064 00000 n 
+0000001744 00000 n 
+0000001825 00000 n 
+0000169950 00000 n 
+0001680977 00000 n 
+0000001878 00000 n 
+0000001942 00000 n 
+0000176203 00000 n 
+0001680903 00000 n 
+0000001995 00000 n 
+0000002060 00000 n 
+0000176262 00000 n 
+0001680778 00000 n 
+0000002108 00000 n 
+0000002155 00000 n 
+0000183534 00000 n 
+0001680716 00000 n 
+0000002208 00000 n 
+0000002248 00000 n 
+0000204497 00000 n 
+0001680639 00000 n 
+0000002297 00000 n 
+0000002350 00000 n 
+0000208396 00000 n 
+0001680507 00000 n 
+0000002397 00000 n 
+0000002434 00000 n 
+0000208456 00000 n 
+0001680428 00000 n 
+0000002483 00000 n 
+0000002524 00000 n 
+0000208516 00000 n 
+0001680349 00000 n 
+0000002573 00000 n 
+0000002612 00000 n 
+0000300528 00000 n 
+0001680216 00000 n 
+0000002659 00000 n 
+0000002708 00000 n 
+0000300588 00000 n 
+0001680137 00000 n 
+0000002757 00000 n 
+0000002811 00000 n 
+0000305538 00000 n 
+0001680044 00000 n 
+0000002860 00000 n 
+0000002890 00000 n 
+0000305598 00000 n 
+0001679951 00000 n 
+0000002939 00000 n 
+0000002971 00000 n 
+0000310028 00000 n 
+0001679858 00000 n 
+0000003020 00000 n 
+0000003077 00000 n 
+0000325312 00000 n 
+0001679726 00000 n 
+0000003126 00000 n 
+0000003169 00000 n 
+0000325372 00000 n 
+0001679647 00000 n 
+0000003223 00000 n 
+0000003291 00000 n 
+0000328269 00000 n 
+0001679554 00000 n 
+0000003345 00000 n 
+0000003405 00000 n 
+0000339797 00000 n 
+0001679461 00000 n 
+0000003459 00000 n 
+0000003516 00000 n 
+0000354689 00000 n 
+0001679368 00000 n 
+0000003570 00000 n 
+0000003625 00000 n 
+0000359338 00000 n 
+0001679275 00000 n 
+0000003679 00000 n 
+0000003721 00000 n 
+0000364019 00000 n 
+0001679143 00000 n 
+0000003775 00000 n 
+0000003819 00000 n 
+0000367902 00000 n 
+0001679064 00000 n 
+0000003878 00000 n 
+0000003934 00000 n 
+0000385587 00000 n 
+0001678971 00000 n 
+0000003993 00000 n 
+0000004070 00000 n 
+0000389742 00000 n 
+0001678878 00000 n 
+0000004129 00000 n 
+0000004202 00000 n 
+0000397572 00000 n 
+0001678785 00000 n 
+0000004261 00000 n 
+0000004330 00000 n 
+0000409016 00000 n 
+0001678706 00000 n 
+0000004389 00000 n 
+0000004445 00000 n 
+0000409198 00000 n 
+0001678613 00000 n 
+0000004499 00000 n 
+0000004547 00000 n 
+0000413955 00000 n 
+0001678481 00000 n 
+0000004601 00000 n 
+0000004646 00000 n 
+0000414015 00000 n 
+0001678402 00000 n 
+0000004705 00000 n 
+0000004762 00000 n 
+0000436429 00000 n 
+0001678309 00000 n 
+0000004821 00000 n 
+0000004878 00000 n 
+0000440362 00000 n 
+0001678216 00000 n 
+0000004937 00000 n 
+0000005015 00000 n 
+0000446719 00000 n 
+0001678123 00000 n 
+0000005074 00000 n 
+0000005142 00000 n 
+0000449939 00000 n 
+0001678030 00000 n 
+0000005201 00000 n 
+0000005275 00000 n 
+0000453278 00000 n 
+0001677951 00000 n 
+0000005334 00000 n 
+0000005404 00000 n 
+0000460817 00000 n 
+0001677872 00000 n 
+0000005458 00000 n 
+0000005510 00000 n 
+0000465281 00000 n 
+0001677739 00000 n 
+0000005559 00000 n 
+0000005602 00000 n 
+0000465341 00000 n 
+0001677660 00000 n 
+0000005656 00000 n 
+0000005695 00000 n 
+0000469585 00000 n 
+0001677567 00000 n 
+0000005749 00000 n 
+0000005799 00000 n 
+0000473485 00000 n 
+0001677474 00000 n 
+0000005853 00000 n 
+0000005894 00000 n 
+0000473605 00000 n 
+0001677381 00000 n 
+0000005948 00000 n 
+0000005988 00000 n 
+0000479474 00000 n 
+0001677288 00000 n 
+0000006042 00000 n 
+0000006120 00000 n 
+0000484559 00000 n 
+0001677195 00000 n 
+0000006174 00000 n 
+0000006253 00000 n 
+0000490442 00000 n 
+0001677102 00000 n 
+0000006307 00000 n 
+0000006386 00000 n 
+0000495270 00000 n 
+0001677009 00000 n 
+0000006440 00000 n 
+0000006506 00000 n 
+0000495391 00000 n 
+0001676916 00000 n 
+0000006560 00000 n 
+0000006622 00000 n 
+0000499514 00000 n 
+0001676837 00000 n 
+0000006677 00000 n 
+0000006730 00000 n 
+0000503829 00000 n 
+0001676705 00000 n 
+0000006779 00000 n 
+0000006839 00000 n 
+0000509239 00000 n 
+0001676626 00000 n 
+0000006893 00000 n 
+0000006965 00000 n 
+0000513168 00000 n 
+0001676533 00000 n 
+0000007019 00000 n 
+0000007061 00000 n 
+0000516847 00000 n 
+0001676440 00000 n 
+0000007115 00000 n 
+0000007166 00000 n 
+0000520170 00000 n 
+0001676347 00000 n 
+0000007220 00000 n 
+0000007282 00000 n 
+0000523143 00000 n 
+0001676254 00000 n 
+0000007336 00000 n 
+0000007399 00000 n 
+0000528055 00000 n 
+0001676175 00000 n 
+0000007453 00000 n 
+0000007522 00000 n 
+0000531982 00000 n 
+0001676057 00000 n 
+0000007571 00000 n 
+0000007613 00000 n 
+0000532042 00000 n 
+0001675978 00000 n 
+0000007667 00000 n 
+0000007724 00000 n 
+0000541714 00000 n 
+0001675899 00000 n 
+0000007778 00000 n 
+0000007850 00000 n 
+0000564371 00000 n 
+0001675766 00000 n 
+0000007897 00000 n 
+0000007962 00000 n 
+0000564431 00000 n 
+0001675687 00000 n 
+0000008011 00000 n 
+0000008068 00000 n 
+0000573648 00000 n 
+0001675555 00000 n 
+0000008117 00000 n 
+0000008192 00000 n 
+0000573708 00000 n 
+0001675476 00000 n 
+0000008246 00000 n 
+0000008327 00000 n 
+0000585422 00000 n 
+0001675383 00000 n 
+0000008381 00000 n 
+0000008454 00000 n 
+0000589290 00000 n 
+0001675290 00000 n 
+0000008508 00000 n 
+0000008550 00000 n 
+0000593034 00000 n 
+0001675197 00000 n 
+0000008604 00000 n 
+0000008664 00000 n 
+0000597029 00000 n 
+0001675104 00000 n 
+0000008718 00000 n 
+0000008786 00000 n 
+0000605363 00000 n 
+0001675025 00000 n 
+0000008840 00000 n 
+0000008909 00000 n 
+0000619981 00000 n 
+0001674893 00000 n 
+0000008958 00000 n 
+0000009033 00000 n 
+0000620041 00000 n 
+0001674814 00000 n 
+0000009087 00000 n 
+0000009160 00000 n 
+0000624070 00000 n 
+0001674735 00000 n 
+0000009214 00000 n 
+0000009289 00000 n 
+0000627584 00000 n 
+0001674603 00000 n 
+0000009338 00000 n 
+0000009428 00000 n 
+0000633653 00000 n 
+0001674524 00000 n 
+0000009482 00000 n 
+0000009566 00000 n 
+0000641483 00000 n 
+0001674431 00000 n 
+0000009620 00000 n 
+0000009662 00000 n 
+0000641543 00000 n 
+0001674338 00000 n 
+0000009716 00000 n 
+0000009789 00000 n 
+0000648782 00000 n 
+0001674245 00000 n 
+0000009843 00000 n 
+0000009927 00000 n 
+0000652283 00000 n 
+0001674152 00000 n 
+0000009981 00000 n 
+0000010066 00000 n 
+0000660161 00000 n 
+0001674073 00000 n 
+0000010120 00000 n 
+0000010211 00000 n 
+0000664919 00000 n 
+0001673994 00000 n 
+0000010260 00000 n 
+0000010315 00000 n 
+0000669272 00000 n 
+0001673861 00000 n 
+0000010362 00000 n 
+0000010427 00000 n 
+0000669332 00000 n 
+0001673782 00000 n 
+0000010476 00000 n 
+0000010533 00000 n 
+0000684919 00000 n 
+0001673649 00000 n 
+0000010582 00000 n 
+0000010658 00000 n 
+0000684979 00000 n 
+0001673570 00000 n 
+0000010712 00000 n 
+0000010789 00000 n 
+0000689961 00000 n 
+0001673477 00000 n 
+0000010843 00000 n 
+0000010891 00000 n 
+0000694310 00000 n 
+0001673384 00000 n 
+0000010945 00000 n 
+0000011006 00000 n 
+0000702375 00000 n 
+0001673291 00000 n 
+0000011060 00000 n 
+0000011134 00000 n 
+0000706635 00000 n 
+0001673198 00000 n 
+0000011188 00000 n 
+0000011267 00000 n 
+0000711222 00000 n 
+0001673105 00000 n 
+0000011321 00000 n 
+0000011370 00000 n 
+0000715005 00000 n 
+0001673012 00000 n 
+0000011424 00000 n 
+0000011478 00000 n 
+0000715126 00000 n 
+0001672880 00000 n 
+0000011532 00000 n 
+0000011601 00000 n 
+0000715185 00000 n 
+0001672801 00000 n 
+0000011660 00000 n 
+0000011716 00000 n 
+0000718614 00000 n 
+0001672708 00000 n 
+0000011775 00000 n 
+0000011814 00000 n 
+0000722296 00000 n 
+0001672615 00000 n 
+0000011873 00000 n 
+0000011911 00000 n 
+0000722478 00000 n 
+0001672522 00000 n 
+0000011970 00000 n 
+0000012011 00000 n 
+0000725973 00000 n 
+0001672443 00000 n 
+0000012070 00000 n 
+0000012110 00000 n 
+0000740778 00000 n 
+0001672350 00000 n 
+0000012164 00000 n 
+0000012234 00000 n 
+0000744717 00000 n 
+0001672232 00000 n 
+0000012289 00000 n 
+0000012353 00000 n 
+0000744777 00000 n 
+0001672153 00000 n 
+0000012413 00000 n 
+0000012477 00000 n 
+0000748734 00000 n 
+0001672060 00000 n 
+0000012537 00000 n 
+0000012596 00000 n 
+0000748855 00000 n 
+0001671981 00000 n 
+0000012656 00000 n 
+0000012743 00000 n 
+0000754257 00000 n 
+0001671848 00000 n 
+0000012792 00000 n 
+0000012868 00000 n 
+0000754317 00000 n 
+0001671769 00000 n 
+0000012922 00000 n 
+0000012986 00000 n 
+0000759032 00000 n 
+0001671676 00000 n 
+0000013040 00000 n 
+0000013143 00000 n 
+0000759153 00000 n 
+0001671583 00000 n 
+0000013197 00000 n 
+0000013268 00000 n 
+0000763151 00000 n 
+0001671490 00000 n 
+0000013322 00000 n 
+0000013415 00000 n 
+0000768483 00000 n 
+0001671397 00000 n 
+0000013469 00000 n 
+0000013572 00000 n 
+0000777616 00000 n 
+0001671304 00000 n 
+0000013626 00000 n 
+0000013730 00000 n 
+0000782332 00000 n 
+0001671211 00000 n 
+0000013784 00000 n 
+0000013888 00000 n 
+0000792168 00000 n 
+0001671118 00000 n 
+0000013942 00000 n 
+0000014033 00000 n 
+0000796392 00000 n 
+0001671025 00000 n 
+0000014087 00000 n 
+0000014174 00000 n 
+0000802221 00000 n 
+0001670946 00000 n 
+0000014229 00000 n 
+0000014307 00000 n 
+0000806446 00000 n 
+0001670828 00000 n 
+0000014356 00000 n 
+0000014436 00000 n 
+0000806506 00000 n 
+0001670749 00000 n 
+0000014490 00000 n 
+0000014551 00000 n 
+0000810839 00000 n 
+0001670631 00000 n 
+0000014605 00000 n 
+0000014678 00000 n 
+0000810899 00000 n 
+0001670552 00000 n 
+0000014737 00000 n 
+0000014783 00000 n 
+0000815206 00000 n 
+0001670473 00000 n 
+0000014842 00000 n 
+0000014898 00000 n 
+0000820268 00000 n 
+0001670340 00000 n 
+0000014945 00000 n 
+0000014998 00000 n 
+0000839733 00000 n 
+0001670261 00000 n 
+0000015047 00000 n 
+0000015103 00000 n 
+0000847819 00000 n 
+0001670168 00000 n 
+0000015152 00000 n 
+0000015210 00000 n 
+0000860270 00000 n 
+0001670075 00000 n 
+0000015259 00000 n 
+0000015315 00000 n 
+0000868808 00000 n 
+0001669982 00000 n 
+0000015364 00000 n 
+0000015422 00000 n 
+0000877792 00000 n 
+0001669889 00000 n 
+0000015471 00000 n 
+0000015527 00000 n 
+0000886280 00000 n 
+0001669796 00000 n 
+0000015576 00000 n 
+0000015631 00000 n 
+0000890071 00000 n 
+0001669703 00000 n 
+0000015680 00000 n 
+0000015716 00000 n 
+0000896602 00000 n 
+0001669624 00000 n 
+0000015765 00000 n 
+0000015817 00000 n 
+0000904024 00000 n 
+0001669491 00000 n 
+0000015864 00000 n 
+0000015925 00000 n 
+0000908318 00000 n 
+0001669412 00000 n 
+0000015974 00000 n 
+0000016017 00000 n 
+0000908439 00000 n 
+0001669319 00000 n 
+0000016066 00000 n 
+0000016100 00000 n 
+0000912869 00000 n 
+0001669226 00000 n 
+0000016149 00000 n 
+0000016183 00000 n 
+0000915411 00000 n 
+0001669147 00000 n 
+0000016232 00000 n 
+0000016280 00000 n 
+0000919142 00000 n 
+0001669014 00000 n 
+0000016327 00000 n 
+0000016395 00000 n 
+0000922237 00000 n 
+0001668896 00000 n 
+0000016444 00000 n 
+0000016495 00000 n 
+0000922297 00000 n 
+0001668817 00000 n 
+0000016549 00000 n 
+0000016580 00000 n 
+0000938156 00000 n 
+0001668724 00000 n 
+0000016634 00000 n 
+0000016689 00000 n 
+0000938216 00000 n 
+0001668631 00000 n 
+0000016743 00000 n 
+0000016792 00000 n 
+0000948223 00000 n 
+0001668552 00000 n 
+0000016846 00000 n 
+0000016894 00000 n 
+0000951478 00000 n 
+0001668420 00000 n 
+0000016943 00000 n 
+0000016977 00000 n 
+0000954776 00000 n 
+0001668341 00000 n 
+0000017031 00000 n 
+0000017062 00000 n 
+0000971895 00000 n 
+0001668248 00000 n 
+0000017116 00000 n 
+0000017163 00000 n 
+0000978252 00000 n 
+0001668155 00000 n 
+0000017217 00000 n 
+0000017251 00000 n 
+0000978312 00000 n 
+0001668076 00000 n 
+0000017305 00000 n 
+0000017345 00000 n 
+0000978372 00000 n 
+0001667958 00000 n 
+0000017394 00000 n 
+0000017466 00000 n 
+0000978431 00000 n 
+0001667879 00000 n 
+0000017520 00000 n 
+0000017556 00000 n 
+0000982136 00000 n 
+0001667786 00000 n 
+0000017610 00000 n 
+0000017647 00000 n 
+0000984184 00000 n 
+0001667693 00000 n 
+0000017701 00000 n 
+0000017737 00000 n 
+0000984244 00000 n 
+0001667614 00000 n 
+0000017791 00000 n 
+0000017829 00000 n 
+0000987517 00000 n 
+0001667481 00000 n 
+0000017877 00000 n 
+0000017936 00000 n 
+0000991423 00000 n 
+0001667363 00000 n 
+0000017985 00000 n 
+0000018029 00000 n 
+0000991483 00000 n 
+0001667284 00000 n 
+0000018083 00000 n 
+0000018161 00000 n 
+0001206263 00000 n 
+0001667191 00000 n 
+0000018215 00000 n 
+0000018271 00000 n 
+0001213808 00000 n 
+0001667098 00000 n 
+0000018325 00000 n 
+0000018367 00000 n 
+0001218048 00000 n 
+0001667019 00000 n 
+0000018421 00000 n 
+0000018472 00000 n 
+0001221970 00000 n 
+0001666926 00000 n 
+0000018521 00000 n 
+0000018570 00000 n 
+0001222030 00000 n 
+0001666833 00000 n 
+0000018619 00000 n 
+0000018687 00000 n 
+0001225287 00000 n 
+0001666754 00000 n 
+0000018736 00000 n 
+0000018801 00000 n 
+0001233337 00000 n 
+0001666621 00000 n 
+0000018849 00000 n 
+0000018885 00000 n 
+0001233397 00000 n 
+0001666542 00000 n 
+0000018934 00000 n 
+0000018976 00000 n 
+0001236792 00000 n 
+0001666463 00000 n 
+0000019025 00000 n 
+0000019068 00000 n 
+0001249846 00000 n 
+0001666369 00000 n 
+0000019118 00000 n 
+0000019150 00000 n 
+0001292941 00000 n 
+0001666289 00000 n 
+0000019200 00000 n 
+0000019225 00000 n 
+0000019817 00000 n 
+0000019929 00000 n 
+0000023503 00000 n 
+0000019277 00000 n 
+0000023385 00000 n 
+0000023444 00000 n 
+0001658032 00000 n 
+0001656863 00000 n 
+0001657887 00000 n 
+0001659777 00000 n 
+0001660215 00000 n 
+0000023163 00000 n 
+0000023316 00000 n 
+0000023363 00000 n 
+0000025060 00000 n 
+0000024889 00000 n 
+0000023642 00000 n 
+0000025001 00000 n 
+0001656422 00000 n 
+0001657743 00000 n 
+0000027177 00000 n 
+0000027330 00000 n 
+0000027483 00000 n 
+0000027635 00000 n 
+0000027789 00000 n 
+0000027942 00000 n 
+0000028096 00000 n 
+0000028249 00000 n 
+0000028408 00000 n 
+0000028572 00000 n 
+0000028736 00000 n 
+0000028894 00000 n 
+0000029046 00000 n 
+0000029199 00000 n 
+0000029353 00000 n 
+0000029507 00000 n 
+0000029661 00000 n 
+0000029814 00000 n 
+0000029968 00000 n 
+0000030127 00000 n 
+0000030286 00000 n 
+0000030445 00000 n 
+0000030604 00000 n 
+0000030758 00000 n 
+0000030916 00000 n 
+0000031070 00000 n 
+0000031222 00000 n 
+0000031376 00000 n 
+0000031530 00000 n 
+0000031682 00000 n 
+0000031835 00000 n 
+0000031989 00000 n 
+0000032143 00000 n 
+0000032297 00000 n 
+0000032451 00000 n 
+0000032608 00000 n 
+0000032765 00000 n 
+0000032920 00000 n 
+0000035701 00000 n 
+0000033195 00000 n 
+0000026749 00000 n 
+0000025144 00000 n 
+0000033077 00000 n 
+0001656568 00000 n 
+0000033136 00000 n 
+0000035860 00000 n 
+0000036019 00000 n 
+0000036183 00000 n 
+0000036347 00000 n 
+0000036511 00000 n 
+0000036675 00000 n 
+0000036839 00000 n 
+0000036998 00000 n 
+0000037157 00000 n 
+0000037321 00000 n 
+0000037485 00000 n 
+0000037649 00000 n 
+0000037813 00000 n 
+0000037977 00000 n 
+0000038141 00000 n 
+0000038299 00000 n 
+0000038453 00000 n 
+0000038612 00000 n 
+0000038770 00000 n 
+0000038928 00000 n 
+0000039087 00000 n 
+0000039246 00000 n 
+0000039404 00000 n 
+0000039563 00000 n 
+0000039722 00000 n 
+0000039881 00000 n 
+0000040041 00000 n 
+0000040195 00000 n 
+0000040354 00000 n 
+0000040513 00000 n 
+0000040672 00000 n 
+0000040831 00000 n 
+0000040990 00000 n 
+0000041149 00000 n 
+0000041303 00000 n 
+0000041462 00000 n 
+0000041621 00000 n 
+0000041773 00000 n 
+0000041926 00000 n 
+0000042079 00000 n 
+0000042238 00000 n 
+0000042395 00000 n 
+0000042553 00000 n 
+0000042711 00000 n 
+0000042869 00000 n 
+0000043026 00000 n 
+0000043179 00000 n 
+0000043337 00000 n 
+0000043495 00000 n 
+0000043646 00000 n 
+0000043802 00000 n 
+0000043958 00000 n 
+0000046974 00000 n 
+0000044173 00000 n 
+0000035153 00000 n 
+0000033292 00000 n 
+0000044114 00000 n 
+0000047132 00000 n 
+0000047289 00000 n 
+0000047447 00000 n 
+0000047600 00000 n 
+0000047752 00000 n 
+0000047905 00000 n 
+0000048057 00000 n 
+0000048215 00000 n 
+0000048373 00000 n 
+0000048530 00000 n 
+0000048688 00000 n 
+0000048846 00000 n 
+0000049004 00000 n 
+0000049162 00000 n 
+0000049320 00000 n 
+0000049482 00000 n 
+0000049645 00000 n 
+0000049808 00000 n 
+0000049970 00000 n 
+0000050133 00000 n 
+0000050291 00000 n 
+0000050450 00000 n 
+0000050614 00000 n 
+0000050778 00000 n 
+0000050942 00000 n 
+0000051094 00000 n 
+0000051252 00000 n 
+0000051410 00000 n 
+0000051568 00000 n 
+0000051725 00000 n 
+0000051883 00000 n 
+0000052041 00000 n 
+0000052199 00000 n 
+0000052357 00000 n 
+0000052515 00000 n 
+0000052674 00000 n 
+0000052827 00000 n 
+0000052984 00000 n 
+0000053142 00000 n 
+0000053305 00000 n 
+0000053468 00000 n 
+0000053620 00000 n 
+0000053771 00000 n 
+0000053924 00000 n 
+0000054075 00000 n 
+0000054224 00000 n 
+0000054375 00000 n 
+0000056619 00000 n 
+0000054585 00000 n 
+0000046466 00000 n 
+0000044257 00000 n 
+0000054526 00000 n 
+0000056772 00000 n 
+0000056925 00000 n 
+0000057077 00000 n 
+0000057230 00000 n 
+0000057383 00000 n 
+0000057536 00000 n 
+0000057689 00000 n 
+0000057841 00000 n 
+0000057994 00000 n 
+0000058151 00000 n 
+0000058309 00000 n 
+0000058466 00000 n 
+0000058624 00000 n 
+0000058776 00000 n 
+0000058934 00000 n 
+0000059092 00000 n 
+0000059250 00000 n 
+0000059408 00000 n 
+0000059561 00000 n 
+0000059719 00000 n 
+0000059877 00000 n 
+0000060035 00000 n 
+0000060192 00000 n 
+0000060345 00000 n 
+0000060497 00000 n 
+0000060655 00000 n 
+0000060812 00000 n 
+0000060970 00000 n 
+0000061127 00000 n 
+0000061280 00000 n 
+0000061433 00000 n 
+0000061586 00000 n 
+0000061739 00000 n 
+0000061892 00000 n 
+0000062045 00000 n 
+0000062200 00000 n 
+0000062413 00000 n 
+0000056199 00000 n 
+0000054669 00000 n 
+0000062354 00000 n 
+0000063615 00000 n 
+0000063766 00000 n 
+0000063918 00000 n 
+0000064070 00000 n 
+0000064221 00000 n 
+0000064372 00000 n 
+0000064523 00000 n 
+0000064674 00000 n 
+0000064825 00000 n 
+0000064976 00000 n 
+0000065302 00000 n 
+0000063411 00000 n 
+0000062497 00000 n 
+0000065127 00000 n 
+0000065186 00000 n 
+0001660333 00000 n 
+0000320667 00000 n 
+0000371361 00000 n 
+0000417386 00000 n 
+0000601612 00000 n 
+0000609178 00000 n 
+0000827501 00000 n 
+0000824030 00000 n 
+0000899719 00000 n 
+0001228999 00000 n 
+0001231372 00000 n 
+0000065670 00000 n 
+0000065499 00000 n 
+0000065399 00000 n 
+0000065611 00000 n 
+0000066668 00000 n 
+0000066821 00000 n 
+0000066973 00000 n 
+0000067126 00000 n 
+0000067278 00000 n 
+0000067430 00000 n 
+0000067582 00000 n 
+0000067910 00000 n 
+0000066488 00000 n 
+0000065711 00000 n 
+0000067734 00000 n 
+0000067793 00000 n 
+0001659923 00000 n 
+0001659631 00000 n 
+0000197363 00000 n 
+0000278653 00000 n 
+0000291486 00000 n 
+0000933963 00000 n 
+0000968682 00000 n 
+0001098701 00000 n 
+0001206139 00000 n 
+0000068291 00000 n 
+0000068120 00000 n 
+0000068020 00000 n 
+0000068232 00000 n 
+0000071899 00000 n 
+0000072053 00000 n 
+0000072210 00000 n 
+0000072364 00000 n 
+0000072518 00000 n 
+0000072673 00000 n 
+0000072828 00000 n 
+0000072981 00000 n 
+0000073135 00000 n 
+0000073288 00000 n 
+0000073442 00000 n 
+0000073596 00000 n 
+0000073923 00000 n 
+0000071679 00000 n 
+0000068332 00000 n 
+0000073748 00000 n 
+0001255021 00000 n 
+0001254231 00000 n 
+0001250028 00000 n 
+0001250149 00000 n 
+0001254839 00000 n 
+0001250088 00000 n 
+0001250453 00000 n 
+0001250514 00000 n 
+0001254960 00000 n 
+0001255142 00000 n 
+0001250757 00000 n 
+0001250270 00000 n 
+0000078378 00000 n 
+0000078022 00000 n 
+0000074020 00000 n 
+0000078137 00000 n 
+0001658177 00000 n 
+0000078257 00000 n 
+0000078318 00000 n 
+0000083533 00000 n 
+0000083295 00000 n 
+0000078528 00000 n 
+0000083411 00000 n 
+0000083472 00000 n 
+0001657156 00000 n 
+0001660452 00000 n 
+0000087855 00000 n 
+0000088010 00000 n 
+0000091995 00000 n 
+0000088406 00000 n 
+0000087709 00000 n 
+0000083671 00000 n 
+0000088162 00000 n 
+0000088223 00000 n 
+0000088284 00000 n 
+0001659049 00000 n 
+0000088345 00000 n 
+0000092148 00000 n 
+0000092306 00000 n 
+0000092466 00000 n 
+0000092619 00000 n 
+0000092770 00000 n 
+0000092927 00000 n 
+0000093083 00000 n 
+0000093235 00000 n 
+0000093385 00000 n 
+0000093543 00000 n 
+0000100362 00000 n 
+0000100517 00000 n 
+0000100672 00000 n 
+0000100832 00000 n 
+0000100985 00000 n 
+0000101140 00000 n 
+0000101295 00000 n 
+0000101455 00000 n 
+0000101615 00000 n 
+0000101770 00000 n 
+0000101922 00000 n 
+0000094123 00000 n 
+0000091768 00000 n 
+0000088571 00000 n 
+0000093698 00000 n 
+0000093759 00000 n 
+0000093820 00000 n 
+0000093881 00000 n 
+0000093942 00000 n 
+0000094003 00000 n 
+0001255081 00000 n 
+0000102080 00000 n 
+0000102233 00000 n 
+0000102388 00000 n 
+0000102543 00000 n 
+0000102698 00000 n 
+0000102853 00000 n 
+0000103008 00000 n 
+0000103162 00000 n 
+0000103315 00000 n 
+0000103467 00000 n 
+0000103619 00000 n 
+0000103771 00000 n 
+0000103923 00000 n 
+0000104075 00000 n 
+0000104230 00000 n 
+0000104385 00000 n 
+0000104539 00000 n 
+0000104694 00000 n 
+0000104847 00000 n 
+0000105000 00000 n 
+0000105153 00000 n 
+0000098760 00000 n 
+0000105367 00000 n 
+0000098344 00000 n 
+0000094261 00000 n 
+0000105306 00000 n 
+0000099220 00000 n 
+0000099456 00000 n 
+0000099504 00000 n 
+0000099681 00000 n 
+0000099703 00000 n 
+0000099942 00000 n 
+0000108891 00000 n 
+0000108419 00000 n 
+0000105534 00000 n 
+0000108535 00000 n 
+0001658755 00000 n 
+0000110858 00000 n 
+0000110499 00000 n 
+0000109045 00000 n 
+0000110615 00000 n 
+0000110676 00000 n 
+0000110736 00000 n 
+0000110797 00000 n 
+0000114475 00000 n 
+0000114629 00000 n 
+0000114784 00000 n 
+0000115369 00000 n 
+0000114320 00000 n 
+0000110943 00000 n 
+0000114939 00000 n 
+0000115059 00000 n 
+0001658465 00000 n 
+0001657450 00000 n 
+0001657303 00000 n 
+0000115123 00000 n 
+0000115243 00000 n 
+0001657010 00000 n 
+0001659340 00000 n 
+0000115306 00000 n 
+0001660577 00000 n 
+0001250209 00000 n 
+0001254535 00000 n 
+0000119850 00000 n 
+0000120006 00000 n 
+0000120163 00000 n 
+0000120316 00000 n 
+0000120471 00000 n 
+0000120634 00000 n 
+0000121042 00000 n 
+0000119668 00000 n 
+0000115601 00000 n 
+0000120789 00000 n 
+0000120850 00000 n 
+0000120914 00000 n 
+0000120978 00000 n 
+0001250575 00000 n 
+0001249906 00000 n 
+0001254657 00000 n 
+0001250636 00000 n 
+0001249967 00000 n 
+0000125286 00000 n 
+0000130438 00000 n 
+0000125503 00000 n 
+0000125149 00000 n 
+0000121208 00000 n 
+0000125442 00000 n 
+0000130719 00000 n 
+0000130301 00000 n 
+0000125670 00000 n 
+0000130594 00000 n 
+0000130655 00000 n 
+0001659195 00000 n 
+0000135770 00000 n 
+0000135925 00000 n 
+0000136080 00000 n 
+0000136235 00000 n 
+0000136394 00000 n 
+0000136550 00000 n 
+0000136885 00000 n 
+0000135588 00000 n 
+0000130913 00000 n 
+0000136706 00000 n 
+0001254170 00000 n 
+0000141932 00000 n 
+0000142086 00000 n 
+0000142241 00000 n 
+0000142515 00000 n 
+0000141777 00000 n 
+0000137065 00000 n 
+0000142395 00000 n 
+0001254048 00000 n 
+0001254109 00000 n 
+0000148108 00000 n 
+0000148264 00000 n 
+0000148664 00000 n 
+0000147962 00000 n 
+0000142681 00000 n 
+0000148418 00000 n 
+0000148538 00000 n 
+0000148601 00000 n 
+0001660702 00000 n 
+0001250818 00000 n 
+0000153620 00000 n 
+0000153771 00000 n 
+0000153927 00000 n 
+0000154078 00000 n 
+0000154234 00000 n 
+0000154390 00000 n 
+0000154546 00000 n 
+0000154701 00000 n 
+0000154857 00000 n 
+0000155013 00000 n 
+0000155169 00000 n 
+0000155325 00000 n 
+0000155479 00000 n 
+0000155633 00000 n 
+0000161013 00000 n 
+0000161169 00000 n 
+0000156031 00000 n 
+0000153366 00000 n 
+0000148870 00000 n 
+0000155788 00000 n 
+0000155908 00000 n 
+0001250392 00000 n 
+0000161324 00000 n 
+0000161479 00000 n 
+0000161634 00000 n 
+0000161789 00000 n 
+0000161944 00000 n 
+0000162100 00000 n 
+0000162257 00000 n 
+0000162414 00000 n 
+0000162569 00000 n 
+0000162725 00000 n 
+0000162881 00000 n 
+0000163038 00000 n 
+0000163193 00000 n 
+0000163348 00000 n 
+0000168739 00000 n 
+0000163691 00000 n 
+0000160741 00000 n 
+0000156263 00000 n 
+0000163503 00000 n 
+0000163564 00000 n 
+0000163628 00000 n 
+0001254596 00000 n 
+0001254718 00000 n 
+0001250696 00000 n 
+0000168895 00000 n 
+0000169052 00000 n 
+0000000000 00000 f 
+0000169209 00000 n 
+0000169365 00000 n 
+0000169520 00000 n 
+0000169675 00000 n 
+0000170199 00000 n 
+0000168548 00000 n 
+0000163897 00000 n 
+0000169830 00000 n 
+0000170009 00000 n 
+0000170072 00000 n 
+0000170136 00000 n 
+0000174897 00000 n 
+0000175052 00000 n 
+0000175207 00000 n 
+0000175363 00000 n 
+0000175520 00000 n 
+0000175676 00000 n 
+0000175831 00000 n 
+0000175987 00000 n 
+0000176512 00000 n 
+0000174697 00000 n 
+0000170378 00000 n 
+0000176142 00000 n 
+0000176321 00000 n 
+0000176385 00000 n 
+0000176449 00000 n 
+0001250331 00000 n 
+0000181190 00000 n 
+0000181345 00000 n 
+0000181502 00000 n 
+0000181659 00000 n 
+0000181816 00000 n 
+0000181973 00000 n 
+0000182130 00000 n 
+0000182287 00000 n 
+0000182444 00000 n 
+0000182601 00000 n 
+0000182756 00000 n 
+0000182912 00000 n 
+0000183069 00000 n 
+0000195743 00000 n 
+0000197148 00000 n 
+0000195898 00000 n 
+0000188247 00000 n 
+0000183591 00000 n 
+0000180945 00000 n 
+0000176744 00000 n 
+0000183224 00000 n 
+0000183285 00000 n 
+0000183346 00000 n 
+0000183409 00000 n 
+0000183473 00000 n 
+0000196052 00000 n 
+0000196208 00000 n 
+0000196365 00000 n 
+0000196521 00000 n 
+0000196678 00000 n 
+0000196835 00000 n 
+0000196991 00000 n 
+0000202572 00000 n 
+0000202728 00000 n 
+0000204129 00000 n 
+0000204283 00000 n 
+0000197490 00000 n 
+0000188029 00000 n 
+0000183823 00000 n 
+0000197302 00000 n 
+0001658321 00000 n 
+0000197426 00000 n 
+0001658610 00000 n 
+0001657596 00000 n 
+0001659484 00000 n 
+0001660827 00000 n 
+0000191597 00000 n 
+0000191831 00000 n 
+0000191879 00000 n 
+0000192266 00000 n 
+0000192473 00000 n 
+0000192496 00000 n 
+0000192793 00000 n 
+0000193038 00000 n 
+0000195369 00000 n 
+0000202882 00000 n 
+0000203039 00000 n 
+0000203195 00000 n 
+0000203351 00000 n 
+0000203508 00000 n 
+0000203665 00000 n 
+0000203818 00000 n 
+0000203974 00000 n 
+0000204681 00000 n 
+0000202336 00000 n 
+0000197727 00000 n 
+0000204436 00000 n 
+0000204557 00000 n 
+0000204618 00000 n 
+0001254778 00000 n 
+0000208029 00000 n 
+0000209464 00000 n 
+0000235769 00000 n 
+0000208182 00000 n 
+0000281559 00000 n 
+0000290332 00000 n 
+0000290487 00000 n 
+0000208576 00000 n 
+0000207883 00000 n 
+0000204941 00000 n 
+0000208335 00000 n 
+0000278714 00000 n 
+0000209348 00000 n 
+0000208715 00000 n 
+0000278471 00000 n 
+0000278532 00000 n 
+0000278593 00000 n 
+0000209843 00000 n 
+0000210064 00000 n 
+0000210112 00000 n 
+0000235748 00000 n 
+0000236148 00000 n 
+0000236369 00000 n 
+0000236417 00000 n 
+0000278450 00000 n 
+0000290647 00000 n 
+0000290802 00000 n 
+0000290957 00000 n 
+0000291110 00000 n 
+0000291264 00000 n 
+0000291548 00000 n 
+0000281368 00000 n 
+0000278869 00000 n 
+0000291425 00000 n 
+0000284566 00000 n 
+0000284801 00000 n 
+0000284849 00000 n 
+0000285169 00000 n 
+0000285424 00000 n 
+0000285447 00000 n 
+0000285721 00000 n 
+0000285994 00000 n 
+0000288112 00000 n 
+0000296017 00000 n 
+0000296171 00000 n 
+0000296387 00000 n 
+0000295871 00000 n 
+0000291715 00000 n 
+0000296326 00000 n 
+0000299695 00000 n 
+0000299852 00000 n 
+0000300008 00000 n 
+0000300162 00000 n 
+0000300315 00000 n 
+0000300648 00000 n 
+0000299522 00000 n 
+0000296499 00000 n 
+0000300467 00000 n 
+0001660952 00000 n 
+0001254352 00000 n 
+0000305007 00000 n 
+0000305166 00000 n 
+0000305325 00000 n 
+0000305658 00000 n 
+0000304852 00000 n 
+0000300786 00000 n 
+0000305477 00000 n 
+0000309656 00000 n 
+0000309814 00000 n 
+0000313305 00000 n 
+0000313460 00000 n 
+0000310271 00000 n 
+0000309510 00000 n 
+0000305810 00000 n 
+0000309967 00000 n 
+0000310088 00000 n 
+0000310149 00000 n 
+0000310210 00000 n 
+0000313615 00000 n 
+0000313770 00000 n 
+0000313925 00000 n 
+0000314085 00000 n 
+0000314245 00000 n 
+0000314405 00000 n 
+0000314569 00000 n 
+0000314729 00000 n 
+0000319355 00000 n 
+0000319515 00000 n 
+0000315373 00000 n 
+0000313087 00000 n 
+0000310423 00000 n 
+0000314886 00000 n 
+0000314947 00000 n 
+0000315008 00000 n 
+0000315069 00000 n 
+0000315130 00000 n 
+0000315191 00000 n 
+0000315252 00000 n 
+0000315313 00000 n 
+0000319680 00000 n 
+0000319840 00000 n 
+0000320000 00000 n 
+0000320152 00000 n 
+0000324612 00000 n 
+0000324772 00000 n 
+0000320729 00000 n 
+0000319173 00000 n 
+0000315512 00000 n 
+0000320303 00000 n 
+0000320364 00000 n 
+0000320424 00000 n 
+0000320484 00000 n 
+0000320545 00000 n 
+0000320606 00000 n 
+0001660069 00000 n 
+0000324927 00000 n 
+0000325092 00000 n 
+0000325554 00000 n 
+0000324448 00000 n 
+0000320896 00000 n 
+0000325251 00000 n 
+0000325432 00000 n 
+0000325493 00000 n 
+0000333593 00000 n 
+0000333748 00000 n 
+0000328451 00000 n 
+0000328031 00000 n 
+0000325706 00000 n 
+0000328147 00000 n 
+0000328208 00000 n 
+0000328329 00000 n 
+0000328390 00000 n 
+0001661077 00000 n 
+0000333907 00000 n 
+0000334185 00000 n 
+0000333438 00000 n 
+0000328589 00000 n 
+0000334063 00000 n 
+0000334124 00000 n 
+0001254291 00000 n 
+0000338957 00000 n 
+0000339113 00000 n 
+0000339273 00000 n 
+0000339427 00000 n 
+0000339583 00000 n 
+0000339918 00000 n 
+0000338784 00000 n 
+0000334365 00000 n 
+0000339736 00000 n 
+0000339857 00000 n 
+0000343358 00000 n 
+0000343059 00000 n 
+0000340083 00000 n 
+0000343175 00000 n 
+0000343236 00000 n 
+0000343297 00000 n 
+0000346949 00000 n 
+0000346589 00000 n 
+0000343497 00000 n 
+0000346705 00000 n 
+0000346766 00000 n 
+0000346827 00000 n 
+0000346888 00000 n 
+0000350998 00000 n 
+0000350699 00000 n 
+0000347073 00000 n 
+0000350815 00000 n 
+0000350876 00000 n 
+0000350937 00000 n 
+0000354038 00000 n 
+0000354194 00000 n 
+0000354350 00000 n 
+0000354749 00000 n 
+0000353883 00000 n 
+0000351138 00000 n 
+0000354506 00000 n 
+0000354567 00000 n 
+0000354628 00000 n 
+0001661202 00000 n 
+0000358892 00000 n 
+0000359052 00000 n 
+0000359458 00000 n 
+0000358746 00000 n 
+0000354873 00000 n 
+0000359216 00000 n 
+0000359277 00000 n 
+0000359397 00000 n 
+0000363809 00000 n 
+0000367526 00000 n 
+0000364079 00000 n 
+0000363672 00000 n 
+0000359624 00000 n 
+0000363958 00000 n 
+0000367681 00000 n 
+0000368145 00000 n 
+0000367380 00000 n 
+0000364258 00000 n 
+0000367841 00000 n 
+0000367962 00000 n 
+0000368023 00000 n 
+0000368084 00000 n 
+0000371424 00000 n 
+0000371184 00000 n 
+0000368299 00000 n 
+0000371300 00000 n 
+0000374999 00000 n 
+0000374639 00000 n 
+0000371590 00000 n 
+0000374755 00000 n 
+0000374816 00000 n 
+0000374877 00000 n 
+0000374938 00000 n 
+0000378149 00000 n 
+0000378609 00000 n 
+0000378012 00000 n 
+0000375180 00000 n 
+0000378304 00000 n 
+0000378365 00000 n 
+0000378426 00000 n 
+0000378487 00000 n 
+0000378548 00000 n 
+0001661327 00000 n 
+0000381533 00000 n 
+0000381173 00000 n 
+0000378761 00000 n 
+0000381289 00000 n 
+0000381350 00000 n 
+0000381411 00000 n 
+0000381472 00000 n 
+0000385029 00000 n 
+0000385184 00000 n 
+0000385647 00000 n 
+0000384883 00000 n 
+0000381686 00000 n 
+0000385343 00000 n 
+0000385404 00000 n 
+0000385465 00000 n 
+0000385526 00000 n 
+0000389240 00000 n 
+0000389400 00000 n 
+0000389801 00000 n 
+0000389094 00000 n 
+0000385786 00000 n 
+0000389559 00000 n 
+0000389620 00000 n 
+0000389681 00000 n 
+0000393476 00000 n 
+0000393819 00000 n 
+0000393339 00000 n 
+0000389940 00000 n 
+0000393636 00000 n 
+0000393697 00000 n 
+0000393758 00000 n 
+0000397235 00000 n 
+0000400697 00000 n 
+0000397632 00000 n 
+0000397098 00000 n 
+0000393958 00000 n 
+0000397389 00000 n 
+0000397450 00000 n 
+0000397511 00000 n 
+0000400857 00000 n 
+0000401016 00000 n 
+0000401176 00000 n 
+0000404671 00000 n 
+0000401580 00000 n 
+0000400533 00000 n 
+0000397785 00000 n 
+0000401336 00000 n 
+0000401397 00000 n 
+0000401458 00000 n 
+0000401519 00000 n 
+0001661452 00000 n 
+0000408796 00000 n 
+0000405075 00000 n 
+0000404534 00000 n 
+0000401705 00000 n 
+0000404831 00000 n 
+0000404892 00000 n 
+0000404953 00000 n 
+0000405014 00000 n 
+0000409258 00000 n 
+0000408659 00000 n 
+0000405243 00000 n 
+0000408955 00000 n 
+0000409076 00000 n 
+0000409137 00000 n 
+0000413680 00000 n 
+0000414075 00000 n 
+0000413543 00000 n 
+0000409453 00000 n 
+0000413833 00000 n 
+0000413894 00000 n 
+0000417449 00000 n 
+0000417209 00000 n 
+0000414254 00000 n 
+0000417325 00000 n 
+0000420570 00000 n 
+0000420730 00000 n 
+0000420890 00000 n 
+0000421233 00000 n 
+0000420415 00000 n 
+0000417560 00000 n 
+0000421050 00000 n 
+0000421111 00000 n 
+0000421172 00000 n 
+0000423950 00000 n 
+0000423529 00000 n 
+0000421386 00000 n 
+0000423645 00000 n 
+0000423706 00000 n 
+0000423767 00000 n 
+0000423828 00000 n 
+0000423889 00000 n 
+0001661577 00000 n 
+0000426772 00000 n 
+0000426351 00000 n 
+0000424061 00000 n 
+0000426467 00000 n 
+0000426528 00000 n 
+0000426589 00000 n 
+0000426650 00000 n 
+0000426711 00000 n 
+0000429547 00000 n 
+0000429702 00000 n 
+0000430162 00000 n 
+0000429401 00000 n 
+0000426924 00000 n 
+0000429858 00000 n 
+0000429919 00000 n 
+0000429980 00000 n 
+0000430040 00000 n 
+0000430101 00000 n 
+0000433496 00000 n 
+0000433136 00000 n 
+0000430344 00000 n 
+0000433252 00000 n 
+0000433313 00000 n 
+0000433374 00000 n 
+0000433435 00000 n 
+0000436549 00000 n 
+0000436071 00000 n 
+0000433636 00000 n 
+0000436187 00000 n 
+0000436248 00000 n 
+0000436309 00000 n 
+0000436369 00000 n 
+0000436489 00000 n 
+0000440544 00000 n 
+0000440124 00000 n 
+0000436702 00000 n 
+0000440240 00000 n 
+0000440301 00000 n 
+0000440422 00000 n 
+0000440483 00000 n 
+0000443687 00000 n 
+0000443327 00000 n 
+0000440739 00000 n 
+0000443443 00000 n 
+0000443504 00000 n 
+0000443565 00000 n 
+0000443626 00000 n 
+0001661702 00000 n 
+0000446962 00000 n 
+0000446542 00000 n 
+0000443826 00000 n 
+0000446658 00000 n 
+0000446779 00000 n 
+0000446840 00000 n 
+0000446901 00000 n 
+0000450180 00000 n 
+0000449702 00000 n 
+0000447087 00000 n 
+0000449818 00000 n 
+0000449879 00000 n 
+0000449999 00000 n 
+0000450059 00000 n 
+0000450120 00000 n 
+0000453520 00000 n 
+0000453101 00000 n 
+0000450291 00000 n 
+0000453217 00000 n 
+0000453338 00000 n 
+0000453399 00000 n 
+0000453460 00000 n 
+0000456313 00000 n 
+0000455892 00000 n 
+0000453659 00000 n 
+0000456008 00000 n 
+0000456069 00000 n 
+0000456130 00000 n 
+0000456191 00000 n 
+0000456252 00000 n 
+0000460876 00000 n 
+0000460518 00000 n 
+0000456424 00000 n 
+0000460634 00000 n 
+0000460695 00000 n 
+0000460756 00000 n 
+0000464999 00000 n 
+0000465400 00000 n 
+0000464862 00000 n 
+0000461028 00000 n 
+0000465159 00000 n 
+0000465220 00000 n 
+0001661827 00000 n 
+0000469705 00000 n 
+0000469347 00000 n 
+0000465565 00000 n 
+0000469463 00000 n 
+0000469524 00000 n 
+0000469645 00000 n 
+0000473270 00000 n 
+0000478785 00000 n 
+0000478936 00000 n 
+0000473726 00000 n 
+0000473133 00000 n 
+0000469843 00000 n 
+0000473424 00000 n 
+0000473544 00000 n 
+0000473665 00000 n 
+0000479091 00000 n 
+0000479251 00000 n 
+0000479595 00000 n 
+0000478621 00000 n 
+0000473947 00000 n 
+0000479413 00000 n 
+0000479534 00000 n 
+0000484192 00000 n 
+0000484343 00000 n 
+0000484680 00000 n 
+0000484046 00000 n 
+0000479761 00000 n 
+0000484498 00000 n 
+0000484619 00000 n 
+0000489599 00000 n 
+0000489759 00000 n 
+0000489924 00000 n 
+0000490074 00000 n 
+0000490228 00000 n 
+0000494574 00000 n 
+0000490563 00000 n 
+0000489426 00000 n 
+0000484846 00000 n 
+0000490381 00000 n 
+0000490502 00000 n 
+0000494738 00000 n 
+0000494889 00000 n 
+0000495044 00000 n 
+0000495511 00000 n 
+0000494410 00000 n 
+0000490729 00000 n 
+0000495209 00000 n 
+0000495330 00000 n 
+0000495450 00000 n 
+0001661952 00000 n 
+0000499288 00000 n 
+0000499635 00000 n 
+0000499151 00000 n 
+0000495663 00000 n 
+0000499453 00000 n 
+0000499574 00000 n 
+0000503449 00000 n 
+0000503613 00000 n 
+0000504251 00000 n 
+0000503303 00000 n 
+0000499827 00000 n 
+0000503768 00000 n 
+0000503889 00000 n 
+0000503950 00000 n 
+0000504010 00000 n 
+0000504071 00000 n 
+0000504131 00000 n 
+0000504191 00000 n 
+0000507197 00000 n 
+0000507356 00000 n 
+0000507516 00000 n 
+0000507676 00000 n 
+0000507836 00000 n 
+0000507987 00000 n 
+0000508137 00000 n 
+0000508287 00000 n 
+0000509360 00000 n 
+0000506997 00000 n 
+0000504430 00000 n 
+0000508446 00000 n 
+0000508507 00000 n 
+0000508568 00000 n 
+0000508629 00000 n 
+0000508690 00000 n 
+0000508751 00000 n 
+0000508812 00000 n 
+0000508873 00000 n 
+0000508934 00000 n 
+0000508995 00000 n 
+0000509056 00000 n 
+0000509117 00000 n 
+0000509178 00000 n 
+0000509299 00000 n 
+0000512828 00000 n 
+0000513228 00000 n 
+0000512691 00000 n 
+0000509526 00000 n 
+0000512985 00000 n 
+0000513046 00000 n 
+0000513107 00000 n 
+0000517029 00000 n 
+0000516670 00000 n 
+0000513394 00000 n 
+0000516786 00000 n 
+0000516907 00000 n 
+0000516968 00000 n 
+0000520413 00000 n 
+0000519993 00000 n 
+0000517181 00000 n 
+0000520109 00000 n 
+0000520230 00000 n 
+0000520291 00000 n 
+0000520352 00000 n 
+0001662077 00000 n 
+0000523386 00000 n 
+0000522966 00000 n 
+0000520580 00000 n 
+0000523082 00000 n 
+0000523203 00000 n 
+0000523264 00000 n 
+0000523325 00000 n 
+0000527623 00000 n 
+0000527778 00000 n 
+0000528175 00000 n 
+0000527477 00000 n 
+0000523510 00000 n 
+0000527933 00000 n 
+0000527994 00000 n 
+0000528115 00000 n 
+0000531612 00000 n 
+0000531767 00000 n 
+0000532771 00000 n 
+0000531466 00000 n 
+0000528370 00000 n 
+0000531921 00000 n 
+0000532102 00000 n 
+0000532163 00000 n 
+0000532223 00000 n 
+0000532284 00000 n 
+0000532345 00000 n 
+0000532406 00000 n 
+0000532467 00000 n 
+0000532528 00000 n 
+0000532589 00000 n 
+0000532650 00000 n 
+0000532711 00000 n 
+0000536395 00000 n 
+0000535974 00000 n 
+0000532937 00000 n 
+0000536090 00000 n 
+0000536151 00000 n 
+0000536212 00000 n 
+0000536273 00000 n 
+0000536334 00000 n 
+0000541187 00000 n 
+0000541342 00000 n 
+0000541498 00000 n 
+0000542092 00000 n 
+0000541032 00000 n 
+0000536534 00000 n 
+0000541653 00000 n 
+0000541774 00000 n 
+0000541838 00000 n 
+0000541902 00000 n 
+0000541966 00000 n 
+0000542029 00000 n 
+0001254474 00000 n 
+0000546153 00000 n 
+0000545854 00000 n 
+0000542285 00000 n 
+0000545970 00000 n 
+0000546031 00000 n 
+0000546092 00000 n 
+0001662202 00000 n 
+0000548845 00000 n 
+0000549000 00000 n 
+0000549155 00000 n 
+0000550217 00000 n 
+0000548690 00000 n 
+0000546306 00000 n 
+0000549304 00000 n 
+0000549365 00000 n 
+0000549426 00000 n 
+0000549487 00000 n 
+0000549548 00000 n 
+0000549609 00000 n 
+0000549669 00000 n 
+0000549730 00000 n 
+0000549791 00000 n 
+0000549851 00000 n 
+0000549912 00000 n 
+0000549973 00000 n 
+0000550034 00000 n 
+0000550095 00000 n 
+0000550156 00000 n 
+0000554380 00000 n 
+0000554082 00000 n 
+0000550342 00000 n 
+0000554198 00000 n 
+0000554259 00000 n 
+0000554320 00000 n 
+0000559254 00000 n 
+0000558116 00000 n 
+0000557817 00000 n 
+0000554519 00000 n 
+0000557933 00000 n 
+0000557994 00000 n 
+0000558055 00000 n 
+0000559475 00000 n 
+0000559117 00000 n 
+0000558255 00000 n 
+0000559414 00000 n 
+0000559878 00000 n 
+0000559701 00000 n 
+0000559600 00000 n 
+0000559817 00000 n 
+0000562767 00000 n 
+0000562922 00000 n 
+0000563081 00000 n 
+0000563235 00000 n 
+0000563388 00000 n 
+0000563543 00000 n 
+0000563696 00000 n 
+0000563850 00000 n 
+0000564000 00000 n 
+0000564155 00000 n 
+0000564852 00000 n 
+0000562549 00000 n 
+0000559920 00000 n 
+0000564310 00000 n 
+0000564490 00000 n 
+0000564551 00000 n 
+0000564612 00000 n 
+0000564673 00000 n 
+0000564733 00000 n 
+0000564792 00000 n 
+0001662327 00000 n 
+0000568921 00000 n 
+0000569043 00000 n 
+0000568500 00000 n 
+0000565004 00000 n 
+0000568616 00000 n 
+0000568677 00000 n 
+0000568738 00000 n 
+0000568799 00000 n 
+0000568860 00000 n 
+0000568982 00000 n 
+0000572121 00000 n 
+0000572281 00000 n 
+0000572441 00000 n 
+0000572601 00000 n 
+0000572761 00000 n 
+0000573829 00000 n 
+0000571948 00000 n 
+0000569235 00000 n 
+0000572916 00000 n 
+0000572977 00000 n 
+0000573038 00000 n 
+0000573099 00000 n 
+0000573160 00000 n 
+0000573221 00000 n 
+0000573282 00000 n 
+0000573343 00000 n 
+0000573404 00000 n 
+0000573465 00000 n 
+0000573526 00000 n 
+0000573587 00000 n 
+0000573768 00000 n 
+0000577536 00000 n 
+0000577690 00000 n 
+0000581558 00000 n 
+0000577965 00000 n 
+0000577390 00000 n 
+0000573967 00000 n 
+0000577843 00000 n 
+0000577904 00000 n 
+0000581835 00000 n 
+0000581421 00000 n 
+0000578119 00000 n 
+0000581713 00000 n 
+0000581774 00000 n 
+0000585543 00000 n 
+0000585123 00000 n 
+0000581988 00000 n 
+0000585239 00000 n 
+0000585300 00000 n 
+0000585361 00000 n 
+0000585482 00000 n 
+0000588947 00000 n 
+0000589350 00000 n 
+0000588810 00000 n 
+0000585709 00000 n 
+0000589107 00000 n 
+0000589168 00000 n 
+0000589229 00000 n 
+0001662452 00000 n 
+0000593216 00000 n 
+0000592857 00000 n 
+0000589502 00000 n 
+0000592973 00000 n 
+0000593094 00000 n 
+0000593155 00000 n 
+0000596696 00000 n 
+0000597089 00000 n 
+0000596559 00000 n 
+0000593354 00000 n 
+0000596846 00000 n 
+0000596907 00000 n 
+0000596968 00000 n 
+0000600966 00000 n 
+0000601120 00000 n 
+0000601275 00000 n 
+0000604872 00000 n 
+0000601675 00000 n 
+0000600811 00000 n 
+0000597255 00000 n 
+0000601429 00000 n 
+0000601490 00000 n 
+0000601551 00000 n 
+0000605027 00000 n 
+0000605484 00000 n 
+0000604726 00000 n 
+0000601843 00000 n 
+0000605180 00000 n 
+0000605241 00000 n 
+0000605302 00000 n 
+0000605423 00000 n 
+0000608835 00000 n 
+0000609241 00000 n 
+0000608698 00000 n 
+0000605636 00000 n 
+0000608995 00000 n 
+0000609056 00000 n 
+0000609117 00000 n 
+0000612060 00000 n 
+0000612219 00000 n 
+0000612619 00000 n 
+0000611914 00000 n 
+0000609366 00000 n 
+0000612375 00000 n 
+0000612436 00000 n 
+0000612497 00000 n 
+0000612558 00000 n 
+0001662577 00000 n 
+0000615443 00000 n 
+0000615602 00000 n 
+0000616006 00000 n 
+0000615297 00000 n 
+0000612772 00000 n 
+0000615762 00000 n 
+0000615823 00000 n 
+0000615884 00000 n 
+0000615945 00000 n 
+0000619334 00000 n 
+0000619488 00000 n 
+0000619645 00000 n 
+0000620101 00000 n 
+0000619179 00000 n 
+0000616131 00000 n 
+0000619799 00000 n 
+0000619860 00000 n 
+0000619921 00000 n 
+0000624190 00000 n 
+0000623832 00000 n 
+0000620268 00000 n 
+0000623948 00000 n 
+0000624009 00000 n 
+0000624130 00000 n 
+0000627369 00000 n 
+0000628373 00000 n 
+0000627232 00000 n 
+0000624384 00000 n 
+0000627523 00000 n 
+0000627644 00000 n 
+0000627705 00000 n 
+0000627766 00000 n 
+0000627827 00000 n 
+0000627888 00000 n 
+0000627949 00000 n 
+0000628010 00000 n 
+0000628070 00000 n 
+0000628131 00000 n 
+0000628192 00000 n 
+0000628253 00000 n 
+0000628313 00000 n 
+0000631349 00000 n 
+0000631509 00000 n 
+0000631669 00000 n 
+0000631829 00000 n 
+0000631989 00000 n 
+0000632139 00000 n 
+0000632288 00000 n 
+0000632438 00000 n 
+0000632589 00000 n 
+0000637297 00000 n 
+0000633774 00000 n 
+0000631140 00000 n 
+0000628525 00000 n 
+0000632741 00000 n 
+0000632802 00000 n 
+0000632863 00000 n 
+0000632923 00000 n 
+0000632984 00000 n 
+0000633045 00000 n 
+0000633106 00000 n 
+0000633166 00000 n 
+0000633227 00000 n 
+0000633288 00000 n 
+0000633348 00000 n 
+0000633409 00000 n 
+0000633470 00000 n 
+0000633531 00000 n 
+0000633592 00000 n 
+0000633713 00000 n 
+0000637579 00000 n 
+0000637160 00000 n 
+0000633953 00000 n 
+0000637457 00000 n 
+0000637518 00000 n 
+0001662702 00000 n 
+0000641202 00000 n 
+0000641664 00000 n 
+0000641065 00000 n 
+0000637761 00000 n 
+0000641361 00000 n 
+0000641422 00000 n 
+0000641603 00000 n 
+0000645319 00000 n 
+0000644959 00000 n 
+0000641816 00000 n 
+0000645075 00000 n 
+0000645136 00000 n 
+0000645197 00000 n 
+0000645258 00000 n 
+0000648964 00000 n 
+0000648605 00000 n 
+0000645472 00000 n 
+0000648721 00000 n 
+0000648842 00000 n 
+0000648903 00000 n 
+0000651782 00000 n 
+0000651941 00000 n 
+0000652343 00000 n 
+0000651636 00000 n 
+0000649159 00000 n 
+0000652100 00000 n 
+0000652161 00000 n 
+0000652222 00000 n 
+0000655464 00000 n 
+0000655043 00000 n 
+0000652467 00000 n 
+0000655159 00000 n 
+0000655220 00000 n 
+0000655281 00000 n 
+0000655342 00000 n 
+0000655403 00000 n 
+0000659639 00000 n 
+0000659790 00000 n 
+0000659945 00000 n 
+0000664385 00000 n 
+0000660282 00000 n 
+0000659484 00000 n 
+0000655604 00000 n 
+0000660100 00000 n 
+0000660221 00000 n 
+0001662827 00000 n 
+0000664543 00000 n 
+0000664703 00000 n 
+0000664979 00000 n 
+0000664230 00000 n 
+0000660461 00000 n 
+0000664858 00000 n 
+0000667817 00000 n 
+0000667974 00000 n 
+0000668131 00000 n 
+0000668285 00000 n 
+0000668438 00000 n 
+0000668593 00000 n 
+0000668746 00000 n 
+0000668901 00000 n 
+0000669056 00000 n 
+0000669695 00000 n 
+0000667608 00000 n 
+0000665117 00000 n 
+0000669211 00000 n 
+0000669392 00000 n 
+0000669453 00000 n 
+0000669514 00000 n 
+0000669575 00000 n 
+0000669635 00000 n 
+0000672858 00000 n 
+0000673017 00000 n 
+0000673177 00000 n 
+0000673337 00000 n 
+0000673497 00000 n 
+0000678592 00000 n 
+0000674633 00000 n 
+0000672685 00000 n 
+0000669846 00000 n 
+0000673657 00000 n 
+0000673718 00000 n 
+0000673779 00000 n 
+0000673840 00000 n 
+0000673901 00000 n 
+0000673962 00000 n 
+0000674023 00000 n 
+0000674084 00000 n 
+0000674145 00000 n 
+0000674206 00000 n 
+0000674267 00000 n 
+0000674328 00000 n 
+0000674389 00000 n 
+0000674450 00000 n 
+0000674511 00000 n 
+0000674572 00000 n 
+0000678752 00000 n 
+0000678912 00000 n 
+0000679072 00000 n 
+0000679237 00000 n 
+0000679397 00000 n 
+0000679563 00000 n 
+0000679723 00000 n 
+0000679873 00000 n 
+0000680023 00000 n 
+0000680176 00000 n 
+0000680325 00000 n 
+0000680960 00000 n 
+0000678356 00000 n 
+0000674772 00000 n 
+0000680474 00000 n 
+0000680535 00000 n 
+0000680596 00000 n 
+0000680657 00000 n 
+0000680718 00000 n 
+0000680779 00000 n 
+0000680840 00000 n 
+0000680900 00000 n 
+0000684698 00000 n 
+0000685159 00000 n 
+0000684561 00000 n 
+0000681112 00000 n 
+0000684858 00000 n 
+0000685038 00000 n 
+0000685098 00000 n 
+0000689368 00000 n 
+0000689527 00000 n 
+0000689680 00000 n 
+0000690082 00000 n 
+0000689213 00000 n 
+0000685325 00000 n 
+0000689839 00000 n 
+0000689900 00000 n 
+0000690021 00000 n 
+0001662952 00000 n 
+0000694431 00000 n 
+0000694133 00000 n 
+0000690248 00000 n 
+0000694249 00000 n 
+0000694370 00000 n 
+0000697976 00000 n 
+0000698136 00000 n 
+0000698478 00000 n 
+0000697830 00000 n 
+0000694626 00000 n 
+0000698295 00000 n 
+0000698356 00000 n 
+0000698417 00000 n 
+0000702094 00000 n 
+0000702496 00000 n 
+0000701957 00000 n 
+0000698617 00000 n 
+0000702254 00000 n 
+0000702315 00000 n 
+0000702435 00000 n 
+0000706039 00000 n 
+0000706199 00000 n 
+0000706353 00000 n 
+0000706695 00000 n 
+0000705884 00000 n 
+0000702648 00000 n 
+0000706513 00000 n 
+0000706574 00000 n 
+0000711001 00000 n 
+0000711343 00000 n 
+0000710864 00000 n 
+0000706847 00000 n 
+0000711161 00000 n 
+0000711282 00000 n 
+0000714723 00000 n 
+0000715245 00000 n 
+0000714586 00000 n 
+0000711495 00000 n 
+0000714883 00000 n 
+0000714944 00000 n 
+0000715065 00000 n 
+0001663077 00000 n 
+0000718236 00000 n 
+0000718396 00000 n 
+0000718796 00000 n 
+0000718090 00000 n 
+0000715426 00000 n 
+0000718553 00000 n 
+0000718674 00000 n 
+0000718735 00000 n 
+0000721758 00000 n 
+0000721918 00000 n 
+0000722078 00000 n 
+0000722538 00000 n 
+0000721603 00000 n 
+0000718921 00000 n 
+0000722235 00000 n 
+0000722356 00000 n 
+0000722417 00000 n 
+0000725470 00000 n 
+0000725630 00000 n 
+0000726032 00000 n 
+0000725324 00000 n 
+0000722663 00000 n 
+0000725790 00000 n 
+0000725851 00000 n 
+0000725912 00000 n 
+0000728879 00000 n 
+0000729039 00000 n 
+0000729200 00000 n 
+0000729358 00000 n 
+0000729762 00000 n 
+0000728715 00000 n 
+0000726157 00000 n 
+0000729518 00000 n 
+0000729579 00000 n 
+0000729640 00000 n 
+0000729701 00000 n 
+0000732638 00000 n 
+0000732798 00000 n 
+0000733141 00000 n 
+0000732492 00000 n 
+0000729887 00000 n 
+0000732958 00000 n 
+0000733019 00000 n 
+0000733080 00000 n 
+0000736606 00000 n 
+0000736246 00000 n 
+0000733295 00000 n 
+0000736362 00000 n 
+0000736423 00000 n 
+0000736484 00000 n 
+0000736545 00000 n 
+0001663202 00000 n 
+0000740397 00000 n 
+0000740557 00000 n 
+0000740959 00000 n 
+0000740251 00000 n 
+0000736774 00000 n 
+0000740717 00000 n 
+0000740838 00000 n 
+0000740899 00000 n 
+0000744339 00000 n 
+0000744497 00000 n 
+0000744959 00000 n 
+0000744193 00000 n 
+0000741153 00000 n 
+0000744656 00000 n 
+0000744837 00000 n 
+0000744898 00000 n 
+0000748297 00000 n 
+0000748455 00000 n 
+0000748915 00000 n 
+0000748151 00000 n 
+0000745111 00000 n 
+0000748612 00000 n 
+0000748673 00000 n 
+0000748794 00000 n 
+0000753253 00000 n 
+0000753412 00000 n 
+0000753572 00000 n 
+0000753729 00000 n 
+0000753886 00000 n 
+0000754041 00000 n 
+0000754438 00000 n 
+0000753071 00000 n 
+0000749040 00000 n 
+0000754196 00000 n 
+0000754377 00000 n 
+0000758352 00000 n 
+0000758509 00000 n 
+0000758666 00000 n 
+0000758818 00000 n 
+0000759273 00000 n 
+0000758188 00000 n 
+0000754633 00000 n 
+0000758971 00000 n 
+0000759092 00000 n 
+0000759213 00000 n 
+0000762780 00000 n 
+0000762935 00000 n 
+0000767646 00000 n 
+0000767800 00000 n 
+0000763272 00000 n 
+0000762634 00000 n 
+0000759468 00000 n 
+0000763090 00000 n 
+0000763211 00000 n 
+0001663327 00000 n 
+0000767955 00000 n 
+0000768107 00000 n 
+0000768262 00000 n 
+0000772580 00000 n 
+0000768604 00000 n 
+0000767473 00000 n 
+0000763439 00000 n 
+0000768422 00000 n 
+0000768543 00000 n 
+0000772739 00000 n 
+0000776929 00000 n 
+0000777081 00000 n 
+0000777236 00000 n 
+0000773020 00000 n 
+0000772434 00000 n 
+0000768799 00000 n 
+0000772898 00000 n 
+0000772959 00000 n 
+0000777395 00000 n 
+0000777737 00000 n 
+0000776765 00000 n 
+0000773202 00000 n 
+0000777555 00000 n 
+0000777676 00000 n 
+0000781747 00000 n 
+0000781907 00000 n 
+0000782057 00000 n 
+0000786533 00000 n 
+0000782391 00000 n 
+0000781592 00000 n 
+0000777932 00000 n 
+0000782210 00000 n 
+0000782271 00000 n 
+0000786693 00000 n 
+0000786848 00000 n 
+0000787189 00000 n 
+0000786378 00000 n 
+0000782586 00000 n 
+0000787007 00000 n 
+0000787068 00000 n 
+0000787129 00000 n 
+0000791490 00000 n 
+0000791644 00000 n 
+0000791802 00000 n 
+0000791954 00000 n 
+0000792289 00000 n 
+0000791326 00000 n 
+0000787371 00000 n 
+0000792107 00000 n 
+0000792228 00000 n 
+0001663452 00000 n 
+0000795950 00000 n 
+0000796110 00000 n 
+0000796452 00000 n 
+0000795804 00000 n 
+0000792484 00000 n 
+0000796270 00000 n 
+0000796331 00000 n 
+0000799292 00000 n 
+0000798993 00000 n 
+0000796618 00000 n 
+0000799109 00000 n 
+0000799170 00000 n 
+0000799231 00000 n 
+0000802402 00000 n 
+0000802044 00000 n 
+0000799432 00000 n 
+0000802160 00000 n 
+0000802281 00000 n 
+0000802342 00000 n 
+0000806067 00000 n 
+0000806225 00000 n 
+0000806627 00000 n 
+0000805921 00000 n 
+0000802554 00000 n 
+0000806385 00000 n 
+0000806566 00000 n 
+0000810300 00000 n 
+0000810460 00000 n 
+0000810619 00000 n 
+0000811020 00000 n 
+0000810145 00000 n 
+0000806806 00000 n 
+0000810778 00000 n 
+0000810959 00000 n 
+0000814764 00000 n 
+0000814924 00000 n 
+0000815327 00000 n 
+0000814618 00000 n 
+0000811199 00000 n 
+0000815084 00000 n 
+0000815145 00000 n 
+0000815266 00000 n 
+0001663577 00000 n 
+0000818322 00000 n 
+0000818084 00000 n 
+0000815480 00000 n 
+0000818200 00000 n 
+0000818261 00000 n 
+0000820328 00000 n 
+0000820091 00000 n 
+0000818462 00000 n 
+0000820207 00000 n 
+0000823665 00000 n 
+0000823818 00000 n 
+0000824089 00000 n 
+0000823519 00000 n 
+0000820452 00000 n 
+0000823969 00000 n 
+0000827287 00000 n 
+0000827564 00000 n 
+0000827150 00000 n 
+0000824227 00000 n 
+0000827440 00000 n 
+0001658903 00000 n 
+0000831313 00000 n 
+0000831136 00000 n 
+0000827716 00000 n 
+0000831252 00000 n 
+0000835185 00000 n 
+0000835008 00000 n 
+0000831480 00000 n 
+0000835124 00000 n 
+0001663702 00000 n 
+0000839793 00000 n 
+0000839556 00000 n 
+0000835379 00000 n 
+0000839672 00000 n 
+0000843116 00000 n 
+0000843269 00000 n 
+0000843483 00000 n 
+0000842970 00000 n 
+0000839986 00000 n 
+0000843422 00000 n 
+0000847879 00000 n 
+0000847581 00000 n 
+0000843635 00000 n 
+0000847697 00000 n 
+0000847758 00000 n 
+0000851443 00000 n 
+0000851596 00000 n 
+0000851810 00000 n 
+0000851297 00000 n 
+0000848059 00000 n 
+0000851749 00000 n 
+0000855181 00000 n 
+0000854943 00000 n 
+0000851949 00000 n 
+0000855059 00000 n 
+0000855120 00000 n 
+0000860330 00000 n 
+0000860093 00000 n 
+0000855348 00000 n 
+0000860209 00000 n 
+0001663827 00000 n 
+0000863539 00000 n 
+0000863691 00000 n 
+0000863904 00000 n 
+0000863393 00000 n 
+0000860524 00000 n 
+0000863843 00000 n 
+0000868868 00000 n 
+0000868570 00000 n 
+0000864056 00000 n 
+0000868686 00000 n 
+0000868747 00000 n 
+0000872620 00000 n 
+0000872773 00000 n 
+0000872987 00000 n 
+0000872474 00000 n 
+0000869062 00000 n 
+0000872926 00000 n 
+0000877520 00000 n 
+0000880790 00000 n 
+0000880947 00000 n 
+0000877852 00000 n 
+0000877383 00000 n 
+0000873139 00000 n 
+0000877670 00000 n 
+0000877731 00000 n 
+0000881105 00000 n 
+0000881318 00000 n 
+0000880635 00000 n 
+0000878046 00000 n 
+0000881257 00000 n 
+0001254899 00000 n 
+0000885698 00000 n 
+0000885851 00000 n 
+0000886005 00000 n 
+0000886340 00000 n 
+0000885543 00000 n 
+0000881470 00000 n 
+0000886158 00000 n 
+0000886219 00000 n 
+0001663952 00000 n 
+0001254413 00000 n 
+0000890131 00000 n 
+0000889833 00000 n 
+0000886534 00000 n 
+0000889949 00000 n 
+0000890010 00000 n 
+0000892389 00000 n 
+0000892212 00000 n 
+0000890311 00000 n 
+0000892328 00000 n 
+0000896235 00000 n 
+0000896388 00000 n 
+0000896662 00000 n 
+0000896089 00000 n 
+0000892501 00000 n 
+0000896541 00000 n 
+0000899782 00000 n 
+0000899542 00000 n 
+0000896813 00000 n 
+0000899658 00000 n 
+0000900185 00000 n 
+0000900008 00000 n 
+0000899907 00000 n 
+0000900124 00000 n 
+0000903646 00000 n 
+0000903805 00000 n 
+0000904084 00000 n 
+0000903500 00000 n 
+0000900227 00000 n 
+0000903963 00000 n 
+0001664077 00000 n 
+0000908101 00000 n 
+0000908560 00000 n 
+0000907964 00000 n 
+0000904235 00000 n 
+0000908257 00000 n 
+0000908378 00000 n 
+0000908499 00000 n 
+0000912653 00000 n 
+0000912989 00000 n 
+0000912516 00000 n 
+0000908712 00000 n 
+0000912808 00000 n 
+0000912928 00000 n 
+0000915194 00000 n 
+0000915532 00000 n 
+0000915057 00000 n 
+0000913155 00000 n 
+0000915350 00000 n 
+0000915471 00000 n 
+0000918297 00000 n 
+0000918454 00000 n 
+0000918610 00000 n 
+0000918773 00000 n 
+0000918926 00000 n 
+0000919202 00000 n 
+0000918124 00000 n 
+0000915684 00000 n 
+0000919081 00000 n 
+0000922357 00000 n 
+0000922060 00000 n 
+0000919340 00000 n 
+0000922176 00000 n 
+0000925828 00000 n 
+0000927213 00000 n 
+0000926042 00000 n 
+0000925691 00000 n 
+0000922508 00000 n 
+0000925981 00000 n 
+0001664202 00000 n 
+0000934026 00000 n 
+0000927097 00000 n 
+0000926181 00000 n 
+0000933902 00000 n 
+0000929856 00000 n 
+0000930092 00000 n 
+0000930140 00000 n 
+0000930545 00000 n 
+0000930568 00000 n 
+0000930916 00000 n 
+0000931012 00000 n 
+0000938276 00000 n 
+0000937979 00000 n 
+0000934181 00000 n 
+0000938095 00000 n 
+0000941424 00000 n 
+0000941247 00000 n 
+0000938428 00000 n 
+0000941363 00000 n 
+0000945176 00000 n 
+0000944877 00000 n 
+0000941563 00000 n 
+0000944993 00000 n 
+0000945054 00000 n 
+0000945115 00000 n 
+0000948283 00000 n 
+0000948046 00000 n 
+0000945329 00000 n 
+0000948162 00000 n 
+0000951538 00000 n 
+0000951301 00000 n 
+0000948435 00000 n 
+0000951417 00000 n 
+0001664327 00000 n 
+0000954562 00000 n 
+0000954836 00000 n 
+0000954425 00000 n 
+0000951703 00000 n 
+0000954715 00000 n 
+0000959267 00000 n 
+0000957636 00000 n 
+0000957459 00000 n 
+0000955001 00000 n 
+0000957575 00000 n 
+0000968745 00000 n 
+0000959151 00000 n 
+0000957761 00000 n 
+0000968621 00000 n 
+0000962779 00000 n 
+0000963014 00000 n 
+0000963062 00000 n 
+0000963499 00000 n 
+0000963522 00000 n 
+0000963919 00000 n 
+0000964015 00000 n 
+0000976173 00000 n 
+0000976330 00000 n 
+0000971955 00000 n 
+0000971718 00000 n 
+0000968900 00000 n 
+0000971834 00000 n 
+0000976486 00000 n 
+0000976640 00000 n 
+0000976794 00000 n 
+0000976949 00000 n 
+0000977104 00000 n 
+0000977265 00000 n 
+0000977418 00000 n 
+0000977573 00000 n 
+0000977726 00000 n 
+0000977881 00000 n 
+0000978036 00000 n 
+0000978491 00000 n 
+0000975928 00000 n 
+0000972107 00000 n 
+0000978191 00000 n 
+0000982196 00000 n 
+0000981959 00000 n 
+0000978642 00000 n 
+0000982075 00000 n 
+0001664452 00000 n 
+0000984303 00000 n 
+0000984007 00000 n 
+0000982361 00000 n 
+0000984123 00000 n 
+0000987577 00000 n 
+0000987340 00000 n 
+0000984455 00000 n 
+0000987456 00000 n 
+0001656714 00000 n 
+0000991604 00000 n 
+0000991246 00000 n 
+0000987771 00000 n 
+0000991362 00000 n 
+0000991543 00000 n 
+0001098332 00000 n 
+0000993643 00000 n 
+0001098486 00000 n 
+0001100299 00000 n 
+0001098763 00000 n 
+0000993497 00000 n 
+0000991755 00000 n 
+0001098640 00000 n 
+0001206323 00000 n 
+0001100183 00000 n 
+0001098938 00000 n 
+0001206078 00000 n 
+0001206202 00000 n 
+0001208715 00000 n 
+0001208538 00000 n 
+0001206498 00000 n 
+0001208654 00000 n 
+0001664577 00000 n 
+0001211747 00000 n 
+0001211570 00000 n 
+0001208826 00000 n 
+0001211686 00000 n 
+0001213868 00000 n 
+0001213631 00000 n 
+0001211858 00000 n 
+0001213747 00000 n 
+0001218412 00000 n 
+0001217871 00000 n 
+0001213992 00000 n 
+0001217987 00000 n 
+0001218108 00000 n 
+0001218169 00000 n 
+0001218230 00000 n 
+0001218291 00000 n 
+0001218352 00000 n 
+0001222821 00000 n 
+0001221793 00000 n 
+0001218579 00000 n 
+0001221909 00000 n 
+0001222090 00000 n 
+0001222151 00000 n 
+0001222212 00000 n 
+0001222273 00000 n 
+0001222334 00000 n 
+0001222394 00000 n 
+0001222455 00000 n 
+0001222516 00000 n 
+0001222577 00000 n 
+0001222638 00000 n 
+0001222699 00000 n 
+0001222760 00000 n 
+0001224922 00000 n 
+0001225074 00000 n 
+0001225347 00000 n 
+0001224776 00000 n 
+0001222987 00000 n 
+0001225226 00000 n 
+0001229062 00000 n 
+0001228822 00000 n 
+0001225484 00000 n 
+0001228938 00000 n 
+0001664702 00000 n 
+0001231433 00000 n 
+0001231195 00000 n 
+0001229173 00000 n 
+0001231311 00000 n 
+0001233457 00000 n 
+0001233160 00000 n 
+0001231544 00000 n 
+0001233276 00000 n 
+0001236852 00000 n 
+0001236615 00000 n 
+0001233595 00000 n 
+0001236731 00000 n 
+0001239675 00000 n 
+0001239498 00000 n 
+0001236990 00000 n 
+0001239614 00000 n 
+0001242348 00000 n 
+0001242171 00000 n 
+0001239786 00000 n 
+0001242287 00000 n 
+0001245063 00000 n 
+0001244886 00000 n 
+0001242459 00000 n 
+0001245002 00000 n 
+0001664827 00000 n 
+0001246836 00000 n 
+0001246659 00000 n 
+0001245188 00000 n 
+0001246775 00000 n 
+0001250878 00000 n 
+0001249608 00000 n 
+0001246947 00000 n 
+0001249724 00000 n 
+0001249785 00000 n 
+0001255202 00000 n 
+0001253871 00000 n 
+0001250976 00000 n 
+0001253987 00000 n 
+0001260728 00000 n 
+0001260877 00000 n 
+0001261028 00000 n 
+0001261179 00000 n 
+0001261330 00000 n 
+0001261480 00000 n 
+0001261631 00000 n 
+0001261783 00000 n 
+0001261933 00000 n 
+0001262085 00000 n 
+0001262237 00000 n 
+0001262389 00000 n 
+0001262541 00000 n 
+0001262693 00000 n 
+0001262845 00000 n 
+0001262997 00000 n 
+0001263148 00000 n 
+0001263298 00000 n 
+0001263450 00000 n 
+0001263599 00000 n 
+0001263749 00000 n 
+0001263898 00000 n 
+0001264050 00000 n 
+0001264202 00000 n 
+0001264353 00000 n 
+0001264505 00000 n 
+0001264657 00000 n 
+0001264809 00000 n 
+0001264961 00000 n 
+0001265111 00000 n 
+0001265261 00000 n 
+0001265411 00000 n 
+0001265561 00000 n 
+0001265712 00000 n 
+0001265862 00000 n 
+0001266014 00000 n 
+0001266165 00000 n 
+0001266317 00000 n 
+0001266467 00000 n 
+0001266617 00000 n 
+0001266768 00000 n 
+0001266920 00000 n 
+0001267071 00000 n 
+0001267222 00000 n 
+0001267374 00000 n 
+0001267522 00000 n 
+0001267674 00000 n 
+0001267826 00000 n 
+0001267978 00000 n 
+0001268130 00000 n 
+0001268280 00000 n 
+0001268432 00000 n 
+0001268583 00000 n 
+0001268734 00000 n 
+0001268886 00000 n 
+0001269037 00000 n 
+0001269189 00000 n 
+0001269341 00000 n 
+0001269492 00000 n 
+0001269643 00000 n 
+0001269795 00000 n 
+0001269946 00000 n 
+0001270098 00000 n 
+0001270250 00000 n 
+0001270402 00000 n 
+0001270554 00000 n 
+0001270704 00000 n 
+0001270856 00000 n 
+0001271006 00000 n 
+0001271155 00000 n 
+0001271306 00000 n 
+0001271456 00000 n 
+0001271605 00000 n 
+0001271755 00000 n 
+0001271905 00000 n 
+0001272054 00000 n 
+0001272204 00000 n 
+0001272354 00000 n 
+0001272503 00000 n 
+0001272652 00000 n 
+0001272804 00000 n 
+0001272955 00000 n 
+0001273103 00000 n 
+0001273254 00000 n 
+0001273405 00000 n 
+0001273557 00000 n 
+0001273707 00000 n 
+0001273859 00000 n 
+0001274010 00000 n 
+0001274161 00000 n 
+0001274313 00000 n 
+0001274465 00000 n 
+0001274617 00000 n 
+0001274769 00000 n 
+0001274919 00000 n 
+0001275070 00000 n 
+0001275220 00000 n 
+0001275371 00000 n 
+0001275522 00000 n 
+0001275673 00000 n 
+0001275824 00000 n 
+0001275975 00000 n 
+0001276126 00000 n 
+0001276277 00000 n 
+0001276428 00000 n 
+0001276579 00000 n 
+0001276729 00000 n 
+0001276880 00000 n 
+0001277032 00000 n 
+0001277183 00000 n 
+0001277334 00000 n 
+0001277486 00000 n 
+0001277638 00000 n 
+0001277790 00000 n 
+0001277942 00000 n 
+0001278093 00000 n 
+0001278244 00000 n 
+0001278395 00000 n 
+0001278546 00000 n 
+0001278697 00000 n 
+0001278849 00000 n 
+0001279001 00000 n 
+0001279153 00000 n 
+0001279305 00000 n 
+0001279456 00000 n 
+0001279607 00000 n 
+0001279758 00000 n 
+0001279909 00000 n 
+0001280060 00000 n 
+0001280210 00000 n 
+0001280361 00000 n 
+0001280513 00000 n 
+0001280665 00000 n 
+0001280817 00000 n 
+0001280969 00000 n 
+0001281119 00000 n 
+0001281270 00000 n 
+0001281421 00000 n 
+0001281572 00000 n 
+0001281723 00000 n 
+0001281874 00000 n 
+0001282025 00000 n 
+0001282175 00000 n 
+0001282325 00000 n 
+0001282476 00000 n 
+0001282627 00000 n 
+0001282778 00000 n 
+0001282929 00000 n 
+0001283080 00000 n 
+0001283232 00000 n 
+0001283384 00000 n 
+0001283535 00000 n 
+0001283687 00000 n 
+0001283839 00000 n 
+0001283990 00000 n 
+0001284141 00000 n 
+0001284292 00000 n 
+0001284444 00000 n 
+0001284595 00000 n 
+0001284747 00000 n 
+0001284899 00000 n 
+0001285051 00000 n 
+0001285203 00000 n 
+0001285355 00000 n 
+0001285506 00000 n 
+0001285657 00000 n 
+0001285807 00000 n 
+0001285958 00000 n 
+0001286110 00000 n 
+0001286262 00000 n 
+0001286413 00000 n 
+0001286564 00000 n 
+0001286715 00000 n 
+0001286866 00000 n 
+0001287017 00000 n 
+0001287169 00000 n 
+0001287321 00000 n 
+0001287473 00000 n 
+0001287624 00000 n 
+0001287775 00000 n 
+0001287927 00000 n 
+0001288079 00000 n 
+0001288231 00000 n 
+0001288382 00000 n 
+0001288533 00000 n 
+0001288685 00000 n 
+0001288837 00000 n 
+0001288989 00000 n 
+0001289140 00000 n 
+0001289292 00000 n 
+0001289444 00000 n 
+0001289595 00000 n 
+0001289746 00000 n 
+0001289898 00000 n 
+0001290048 00000 n 
+0001290199 00000 n 
+0001290351 00000 n 
+0001290502 00000 n 
+0001290654 00000 n 
+0001290805 00000 n 
+0001290957 00000 n 
+0001291106 00000 n 
+0001291256 00000 n 
+0001291403 00000 n 
+0001291549 00000 n 
+0001291697 00000 n 
+0001291844 00000 n 
+0001291993 00000 n 
+0001292142 00000 n 
+0001292288 00000 n 
+0001292433 00000 n 
+0001292582 00000 n 
+0001292730 00000 n 
+0001297964 00000 n 
+0001293001 00000 n 
+0001258683 00000 n 
+0001255300 00000 n 
+0001292880 00000 n 
+0001298116 00000 n 
+0001298264 00000 n 
+0001298413 00000 n 
+0001298562 00000 n 
+0001298713 00000 n 
+0001298864 00000 n 
+0001299015 00000 n 
+0001299166 00000 n 
+0001299317 00000 n 
+0001299468 00000 n 
+0001299619 00000 n 
+0001299770 00000 n 
+0001299921 00000 n 
+0001300072 00000 n 
+0001300223 00000 n 
+0001300374 00000 n 
+0001300525 00000 n 
+0001300676 00000 n 
+0001300827 00000 n 
+0001300976 00000 n 
+0001301124 00000 n 
+0001301273 00000 n 
+0001301421 00000 n 
+0001301570 00000 n 
+0001301720 00000 n 
+0001301870 00000 n 
+0001302019 00000 n 
+0001302169 00000 n 
+0001302319 00000 n 
+0001302471 00000 n 
+0001302623 00000 n 
+0001302774 00000 n 
+0001302925 00000 n 
+0001303077 00000 n 
+0001303229 00000 n 
+0001303378 00000 n 
+0001303528 00000 n 
+0001303678 00000 n 
+0001303829 00000 n 
+0001303981 00000 n 
+0001304132 00000 n 
+0001304284 00000 n 
+0001304434 00000 n 
+0001304585 00000 n 
+0001304736 00000 n 
+0001304888 00000 n 
+0001305040 00000 n 
+0001305188 00000 n 
+0001305337 00000 n 
+0001305488 00000 n 
+0001305639 00000 n 
+0001305790 00000 n 
+0001305941 00000 n 
+0001306092 00000 n 
+0001306244 00000 n 
+0001306394 00000 n 
+0001306545 00000 n 
+0001306696 00000 n 
+0001306847 00000 n 
+0001306997 00000 n 
+0001307148 00000 n 
+0001307299 00000 n 
+0001307451 00000 n 
+0001307602 00000 n 
+0001307752 00000 n 
+0001307903 00000 n 
+0001308054 00000 n 
+0001308205 00000 n 
+0001308356 00000 n 
+0001308508 00000 n 
+0001308659 00000 n 
+0001308811 00000 n 
+0001308963 00000 n 
+0001309113 00000 n 
+0001309264 00000 n 
+0001309415 00000 n 
+0001309567 00000 n 
+0001309718 00000 n 
+0001309869 00000 n 
+0001310018 00000 n 
+0001310168 00000 n 
+0001310317 00000 n 
+0001310468 00000 n 
+0001310620 00000 n 
+0001310771 00000 n 
+0001310922 00000 n 
+0001311074 00000 n 
+0001311226 00000 n 
+0001311377 00000 n 
+0001311528 00000 n 
+0001311680 00000 n 
+0001311832 00000 n 
+0001311982 00000 n 
+0001312133 00000 n 
+0001312282 00000 n 
+0001312434 00000 n 
+0001312585 00000 n 
+0001312737 00000 n 
+0001312886 00000 n 
+0001313034 00000 n 
+0001313183 00000 n 
+0001313332 00000 n 
+0001313481 00000 n 
+0001313631 00000 n 
+0001313779 00000 n 
+0001313928 00000 n 
+0001314078 00000 n 
+0001314229 00000 n 
+0001314380 00000 n 
+0001314531 00000 n 
+0001314683 00000 n 
+0001314834 00000 n 
+0001314984 00000 n 
+0001315134 00000 n 
+0001315284 00000 n 
+0001315435 00000 n 
+0001315586 00000 n 
+0001315737 00000 n 
+0001315888 00000 n 
+0001316038 00000 n 
+0001316188 00000 n 
+0001316339 00000 n 
+0001316490 00000 n 
+0001316640 00000 n 
+0001316791 00000 n 
+0001316941 00000 n 
+0001317092 00000 n 
+0001317242 00000 n 
+0001317392 00000 n 
+0001317543 00000 n 
+0001317691 00000 n 
+0001317839 00000 n 
+0001317988 00000 n 
+0001318139 00000 n 
+0001318290 00000 n 
+0001318442 00000 n 
+0001318594 00000 n 
+0001318745 00000 n 
+0001318896 00000 n 
+0001319047 00000 n 
+0001319199 00000 n 
+0001319350 00000 n 
+0001319500 00000 n 
+0001319651 00000 n 
+0001319803 00000 n 
+0001319955 00000 n 
+0001320106 00000 n 
+0001320257 00000 n 
+0001320407 00000 n 
+0001320558 00000 n 
+0001320709 00000 n 
+0001320861 00000 n 
+0001321013 00000 n 
+0001321163 00000 n 
+0001321313 00000 n 
+0001321464 00000 n 
+0001321615 00000 n 
+0001321765 00000 n 
+0001321916 00000 n 
+0001322068 00000 n 
+0001322220 00000 n 
+0001322371 00000 n 
+0001322522 00000 n 
+0001322673 00000 n 
+0001322823 00000 n 
+0001322973 00000 n 
+0001323124 00000 n 
+0001323275 00000 n 
+0001323426 00000 n 
+0001323578 00000 n 
+0001323729 00000 n 
+0001323880 00000 n 
+0001324029 00000 n 
+0001324180 00000 n 
+0001324331 00000 n 
+0001324482 00000 n 
+0001324632 00000 n 
+0001324783 00000 n 
+0001324934 00000 n 
+0001325085 00000 n 
+0001325236 00000 n 
+0001325387 00000 n 
+0001325538 00000 n 
+0001325689 00000 n 
+0001325840 00000 n 
+0001325991 00000 n 
+0001326143 00000 n 
+0001326294 00000 n 
+0001326445 00000 n 
+0001326595 00000 n 
+0001326743 00000 n 
+0001326892 00000 n 
+0001327041 00000 n 
+0001327190 00000 n 
+0001327339 00000 n 
+0001327488 00000 n 
+0001331272 00000 n 
+0001327697 00000 n 
+0001296063 00000 n 
+0001293112 00000 n 
+0001327636 00000 n 
+0001331424 00000 n 
+0001331575 00000 n 
+0001331726 00000 n 
+0001331877 00000 n 
+0001332028 00000 n 
+0001332180 00000 n 
+0001332329 00000 n 
+0001332480 00000 n 
+0001332630 00000 n 
+0001332782 00000 n 
+0001332931 00000 n 
+0001333083 00000 n 
+0001333234 00000 n 
+0001333386 00000 n 
+0001333538 00000 n 
+0001333690 00000 n 
+0001333842 00000 n 
+0001333994 00000 n 
+0001334146 00000 n 
+0001334297 00000 n 
+0001334449 00000 n 
+0001334600 00000 n 
+0001334752 00000 n 
+0001334904 00000 n 
+0001335055 00000 n 
+0001335207 00000 n 
+0001335357 00000 n 
+0001335508 00000 n 
+0001335658 00000 n 
+0001335810 00000 n 
+0001335960 00000 n 
+0001336112 00000 n 
+0001336263 00000 n 
+0001336414 00000 n 
+0001336565 00000 n 
+0001336716 00000 n 
+0001336867 00000 n 
+0001337017 00000 n 
+0001337168 00000 n 
+0001337318 00000 n 
+0001337469 00000 n 
+0001337620 00000 n 
+0001337770 00000 n 
+0001337920 00000 n 
+0001338070 00000 n 
+0001338220 00000 n 
+0001338371 00000 n 
+0001338522 00000 n 
+0001338673 00000 n 
+0001338824 00000 n 
+0001338973 00000 n 
+0001339124 00000 n 
+0001339275 00000 n 
+0001339427 00000 n 
+0001339579 00000 n 
+0001339731 00000 n 
+0001339882 00000 n 
+0001340033 00000 n 
+0001340184 00000 n 
+0001340334 00000 n 
+0001340486 00000 n 
+0001340638 00000 n 
+0001340790 00000 n 
+0001340942 00000 n 
+0001341093 00000 n 
+0001341244 00000 n 
+0001341392 00000 n 
+0001341542 00000 n 
+0001341692 00000 n 
+0001341841 00000 n 
+0001341992 00000 n 
+0001342143 00000 n 
+0001342294 00000 n 
+0001342446 00000 n 
+0001342597 00000 n 
+0001342749 00000 n 
+0001342900 00000 n 
+0001343052 00000 n 
+0001343201 00000 n 
+0001343350 00000 n 
+0001343502 00000 n 
+0001343654 00000 n 
+0001343806 00000 n 
+0001343958 00000 n 
+0001344110 00000 n 
+0001344261 00000 n 
+0001344413 00000 n 
+0001344565 00000 n 
+0001344717 00000 n 
+0001344869 00000 n 
+0001345020 00000 n 
+0001345171 00000 n 
+0001345319 00000 n 
+0001345467 00000 n 
+0001345619 00000 n 
+0001345771 00000 n 
+0001345923 00000 n 
+0001346075 00000 n 
+0001346226 00000 n 
+0001346377 00000 n 
+0001346528 00000 n 
+0001346680 00000 n 
+0001346830 00000 n 
+0001346981 00000 n 
+0001347133 00000 n 
+0001347285 00000 n 
+0001347437 00000 n 
+0001347589 00000 n 
+0001347741 00000 n 
+0001347892 00000 n 
+0001348043 00000 n 
+0001348195 00000 n 
+0001348345 00000 n 
+0001348495 00000 n 
+0001348646 00000 n 
+0001348798 00000 n 
+0001348947 00000 n 
+0001349097 00000 n 
+0001349247 00000 n 
+0001349397 00000 n 
+0001349547 00000 n 
+0001349697 00000 n 
+0001349847 00000 n 
+0001349996 00000 n 
+0001350147 00000 n 
+0001350298 00000 n 
+0001350449 00000 n 
+0001350599 00000 n 
+0001350745 00000 n 
+0001350894 00000 n 
+0001351043 00000 n 
+0001356075 00000 n 
+0001351252 00000 n 
+0001329956 00000 n 
+0001327808 00000 n 
+0001351191 00000 n 
+0001664952 00000 n 
+0001356225 00000 n 
+0001356376 00000 n 
+0001356527 00000 n 
+0001356678 00000 n 
+0001356829 00000 n 
+0001356979 00000 n 
+0001357129 00000 n 
+0001357279 00000 n 
+0001357430 00000 n 
+0001357581 00000 n 
+0001357732 00000 n 
+0001357883 00000 n 
+0001358034 00000 n 
+0001358185 00000 n 
+0001358336 00000 n 
+0001358487 00000 n 
+0001358638 00000 n 
+0001358789 00000 n 
+0001358940 00000 n 
+0001359088 00000 n 
+0001359236 00000 n 
+0001359387 00000 n 
+0001359538 00000 n 
+0001359690 00000 n 
+0001359841 00000 n 
+0001359992 00000 n 
+0001360143 00000 n 
+0001360294 00000 n 
+0001360443 00000 n 
+0001360594 00000 n 
+0001360745 00000 n 
+0001360896 00000 n 
+0001361047 00000 n 
+0001361197 00000 n 
+0001361348 00000 n 
+0001361498 00000 n 
+0001361649 00000 n 
+0001361800 00000 n 
+0001361951 00000 n 
+0001362101 00000 n 
+0001362252 00000 n 
+0001362401 00000 n 
+0001362552 00000 n 
+0001362704 00000 n 
+0001362855 00000 n 
+0001363007 00000 n 
+0001363159 00000 n 
+0001363311 00000 n 
+0001363463 00000 n 
+0001363614 00000 n 
+0001363765 00000 n 
+0001363916 00000 n 
+0001364067 00000 n 
+0001364218 00000 n 
+0001364365 00000 n 
+0001364515 00000 n 
+0001364664 00000 n 
+0001364813 00000 n 
+0001364962 00000 n 
+0001365114 00000 n 
+0001365265 00000 n 
+0001365417 00000 n 
+0001365567 00000 n 
+0001365719 00000 n 
+0001365871 00000 n 
+0001366022 00000 n 
+0001366173 00000 n 
+0001366325 00000 n 
+0001366477 00000 n 
+0001366629 00000 n 
+0001366781 00000 n 
+0001366932 00000 n 
+0001367083 00000 n 
+0001367235 00000 n 
+0001367384 00000 n 
+0001367534 00000 n 
+0001367685 00000 n 
+0001367835 00000 n 
+0001367986 00000 n 
+0001368137 00000 n 
+0001368288 00000 n 
+0001368437 00000 n 
+0001368587 00000 n 
+0001368737 00000 n 
+0001368888 00000 n 
+0001369040 00000 n 
+0001369192 00000 n 
+0001369343 00000 n 
+0001369493 00000 n 
+0001369645 00000 n 
+0001369796 00000 n 
+0001369946 00000 n 
+0001370097 00000 n 
+0001370247 00000 n 
+0001370398 00000 n 
+0001370549 00000 n 
+0001370700 00000 n 
+0001370851 00000 n 
+0001371003 00000 n 
+0001371153 00000 n 
+0001371304 00000 n 
+0001371455 00000 n 
+0001371605 00000 n 
+0001371756 00000 n 
+0001371907 00000 n 
+0001372059 00000 n 
+0001372210 00000 n 
+0001372360 00000 n 
+0001372511 00000 n 
+0001372661 00000 n 
+0001372811 00000 n 
+0001372962 00000 n 
+0001373112 00000 n 
+0001373263 00000 n 
+0001373414 00000 n 
+0001373565 00000 n 
+0001373716 00000 n 
+0001373867 00000 n 
+0001374019 00000 n 
+0001374169 00000 n 
+0001374319 00000 n 
+0001374469 00000 n 
+0001374620 00000 n 
+0001374772 00000 n 
+0001374922 00000 n 
+0001375072 00000 n 
+0001375223 00000 n 
+0001375374 00000 n 
+0001375525 00000 n 
+0001375676 00000 n 
+0001375827 00000 n 
+0001375978 00000 n 
+0001376129 00000 n 
+0001376280 00000 n 
+0001376431 00000 n 
+0001376582 00000 n 
+0001376734 00000 n 
+0001376885 00000 n 
+0001377036 00000 n 
+0001377186 00000 n 
+0001377337 00000 n 
+0001377489 00000 n 
+0001377640 00000 n 
+0001377791 00000 n 
+0001377943 00000 n 
+0001378094 00000 n 
+0001378245 00000 n 
+0001378396 00000 n 
+0001378547 00000 n 
+0001378697 00000 n 
+0001378848 00000 n 
+0001378998 00000 n 
+0001379149 00000 n 
+0001379300 00000 n 
+0001379452 00000 n 
+0001379604 00000 n 
+0001379756 00000 n 
+0001379908 00000 n 
+0001380059 00000 n 
+0001380210 00000 n 
+0001380361 00000 n 
+0001380512 00000 n 
+0001380663 00000 n 
+0001380814 00000 n 
+0001380965 00000 n 
+0001381117 00000 n 
+0001381269 00000 n 
+0001381420 00000 n 
+0001381572 00000 n 
+0001381722 00000 n 
+0001381873 00000 n 
+0001382024 00000 n 
+0001382176 00000 n 
+0001382328 00000 n 
+0001382479 00000 n 
+0001382630 00000 n 
+0001382781 00000 n 
+0001382932 00000 n 
+0001383083 00000 n 
+0001383235 00000 n 
+0001383387 00000 n 
+0001383538 00000 n 
+0001383689 00000 n 
+0001383838 00000 n 
+0001383987 00000 n 
+0001384135 00000 n 
+0001384284 00000 n 
+0001384433 00000 n 
+0001384582 00000 n 
+0001384730 00000 n 
+0001384877 00000 n 
+0001385024 00000 n 
+0001385171 00000 n 
+0001385318 00000 n 
+0001385464 00000 n 
+0001385611 00000 n 
+0001385758 00000 n 
+0001385905 00000 n 
+0001386055 00000 n 
+0001386205 00000 n 
+0001386354 00000 n 
+0001390433 00000 n 
+0001386565 00000 n 
+0001354129 00000 n 
+0001351363 00000 n 
+0001386504 00000 n 
+0001390584 00000 n 
+0001390735 00000 n 
+0001390885 00000 n 
+0001391035 00000 n 
+0001391186 00000 n 
+0001391335 00000 n 
+0001391486 00000 n 
+0001391636 00000 n 
+0001391787 00000 n 
+0001391938 00000 n 
+0001392089 00000 n 
+0001392240 00000 n 
+0001392391 00000 n 
+0001392543 00000 n 
+0001392694 00000 n 
+0001392846 00000 n 
+0001392996 00000 n 
+0001393148 00000 n 
+0001393299 00000 n 
+0001393450 00000 n 
+0001393602 00000 n 
+0001393752 00000 n 
+0001393904 00000 n 
+0001394055 00000 n 
+0001394206 00000 n 
+0001394358 00000 n 
+0001394509 00000 n 
+0001394660 00000 n 
+0001394811 00000 n 
+0001394962 00000 n 
+0001395114 00000 n 
+0001395266 00000 n 
+0001395416 00000 n 
+0001395566 00000 n 
+0001395715 00000 n 
+0001395866 00000 n 
+0001396014 00000 n 
+0001396164 00000 n 
+0001396315 00000 n 
+0001396466 00000 n 
+0001396616 00000 n 
+0001396767 00000 n 
+0001396918 00000 n 
+0001397069 00000 n 
+0001397219 00000 n 
+0001397370 00000 n 
+0001397519 00000 n 
+0001397668 00000 n 
+0001397818 00000 n 
+0001397968 00000 n 
+0001398118 00000 n 
+0001398269 00000 n 
+0001398419 00000 n 
+0001398569 00000 n 
+0001398719 00000 n 
+0001398869 00000 n 
+0001399021 00000 n 
+0001399171 00000 n 
+0001399323 00000 n 
+0001399475 00000 n 
+0001399626 00000 n 
+0001399777 00000 n 
+0001399924 00000 n 
+0001400074 00000 n 
+0001400223 00000 n 
+0001400370 00000 n 
+0001400520 00000 n 
+0001400669 00000 n 
+0001400819 00000 n 
+0001400971 00000 n 
+0001401122 00000 n 
+0001401274 00000 n 
+0001401426 00000 n 
+0001401578 00000 n 
+0001401730 00000 n 
+0001401882 00000 n 
+0001402034 00000 n 
+0001402186 00000 n 
+0001402338 00000 n 
+0001402490 00000 n 
+0001402641 00000 n 
+0001402793 00000 n 
+0001402945 00000 n 
+0001403096 00000 n 
+0001403247 00000 n 
+0001403399 00000 n 
+0001403551 00000 n 
+0001403703 00000 n 
+0001403854 00000 n 
+0001404005 00000 n 
+0001404155 00000 n 
+0001404306 00000 n 
+0001404457 00000 n 
+0001404608 00000 n 
+0001404759 00000 n 
+0001404910 00000 n 
+0001405061 00000 n 
+0001405212 00000 n 
+0001405364 00000 n 
+0001405515 00000 n 
+0001405666 00000 n 
+0001405817 00000 n 
+0001405968 00000 n 
+0001406119 00000 n 
+0001406270 00000 n 
+0001406421 00000 n 
+0001406571 00000 n 
+0001406720 00000 n 
+0001406869 00000 n 
+0001407021 00000 n 
+0001407173 00000 n 
+0001407325 00000 n 
+0001407477 00000 n 
+0001407629 00000 n 
+0001407781 00000 n 
+0001407933 00000 n 
+0001408085 00000 n 
+0001408237 00000 n 
+0001408388 00000 n 
+0001408540 00000 n 
+0001408691 00000 n 
+0001408841 00000 n 
+0001408993 00000 n 
+0001409144 00000 n 
+0001409296 00000 n 
+0001409447 00000 n 
+0001409597 00000 n 
+0001409748 00000 n 
+0001409898 00000 n 
+0001410049 00000 n 
+0001410200 00000 n 
+0001410351 00000 n 
+0001410501 00000 n 
+0001410651 00000 n 
+0001410803 00000 n 
+0001410953 00000 n 
+0001411104 00000 n 
+0001411251 00000 n 
+0001411400 00000 n 
+0001411549 00000 n 
+0001416193 00000 n 
+0001416345 00000 n 
+0001411759 00000 n 
+0001389036 00000 n 
+0001386676 00000 n 
+0001411698 00000 n 
+0001416497 00000 n 
+0001416648 00000 n 
+0001416799 00000 n 
+0001416950 00000 n 
+0001417101 00000 n 
+0001417253 00000 n 
+0001417405 00000 n 
+0001417557 00000 n 
+0001417708 00000 n 
+0001417858 00000 n 
+0001418009 00000 n 
+0001418160 00000 n 
+0001418312 00000 n 
+0001418464 00000 n 
+0001418615 00000 n 
+0001418766 00000 n 
+0001418917 00000 n 
+0001419069 00000 n 
+0001419221 00000 n 
+0001419373 00000 n 
+0001419524 00000 n 
+0001419675 00000 n 
+0001419826 00000 n 
+0001419975 00000 n 
+0001420126 00000 n 
+0001420277 00000 n 
+0001420428 00000 n 
+0001420578 00000 n 
+0001420729 00000 n 
+0001420877 00000 n 
+0001421028 00000 n 
+0001421177 00000 n 
+0001421328 00000 n 
+0001421479 00000 n 
+0001421630 00000 n 
+0001421782 00000 n 
+0001421933 00000 n 
+0001422084 00000 n 
+0001422235 00000 n 
+0001422387 00000 n 
+0001422537 00000 n 
+0001422688 00000 n 
+0001422840 00000 n 
+0001422992 00000 n 
+0001423143 00000 n 
+0001423295 00000 n 
+0001423447 00000 n 
+0001423599 00000 n 
+0001423751 00000 n 
+0001423902 00000 n 
+0001424053 00000 n 
+0001424204 00000 n 
+0001424355 00000 n 
+0001424505 00000 n 
+0001424654 00000 n 
+0001424804 00000 n 
+0001424954 00000 n 
+0001425103 00000 n 
+0001425254 00000 n 
+0001425404 00000 n 
+0001425556 00000 n 
+0001425706 00000 n 
+0001425857 00000 n 
+0001426009 00000 n 
+0001426159 00000 n 
+0001426311 00000 n 
+0001426463 00000 n 
+0001426615 00000 n 
+0001426766 00000 n 
+0001426918 00000 n 
+0001427069 00000 n 
+0001427221 00000 n 
+0001427372 00000 n 
+0001427524 00000 n 
+0001427676 00000 n 
+0001427827 00000 n 
+0001427979 00000 n 
+0001428129 00000 n 
+0001428281 00000 n 
+0001428433 00000 n 
+0001428585 00000 n 
+0001428735 00000 n 
+0001428887 00000 n 
+0001429037 00000 n 
+0001429188 00000 n 
+0001429340 00000 n 
+0001429491 00000 n 
+0001429643 00000 n 
+0001429794 00000 n 
+0001429946 00000 n 
+0001430097 00000 n 
+0001430248 00000 n 
+0001430400 00000 n 
+0001430552 00000 n 
+0001430704 00000 n 
+0001430856 00000 n 
+0001431008 00000 n 
+0001431159 00000 n 
+0001431309 00000 n 
+0001431461 00000 n 
+0001431612 00000 n 
+0001431761 00000 n 
+0001431912 00000 n 
+0001432062 00000 n 
+0001432213 00000 n 
+0001432363 00000 n 
+0001432515 00000 n 
+0001432667 00000 n 
+0001432819 00000 n 
+0001432971 00000 n 
+0001433123 00000 n 
+0001433275 00000 n 
+0001433426 00000 n 
+0001433574 00000 n 
+0001433724 00000 n 
+0001433874 00000 n 
+0001438179 00000 n 
+0001434085 00000 n 
+0001415003 00000 n 
+0001411870 00000 n 
+0001434024 00000 n 
+0001438331 00000 n 
+0001438483 00000 n 
+0001438635 00000 n 
+0001438787 00000 n 
+0001438939 00000 n 
+0001439091 00000 n 
+0001439243 00000 n 
+0001439395 00000 n 
+0001439547 00000 n 
+0001439698 00000 n 
+0001439848 00000 n 
+0001439999 00000 n 
+0001440151 00000 n 
+0001440302 00000 n 
+0001440451 00000 n 
+0001440602 00000 n 
+0001440754 00000 n 
+0001440904 00000 n 
+0001441055 00000 n 
+0001441206 00000 n 
+0001441355 00000 n 
+0001441505 00000 n 
+0001441656 00000 n 
+0001441808 00000 n 
+0001441959 00000 n 
+0001442110 00000 n 
+0001442261 00000 n 
+0001442413 00000 n 
+0001442564 00000 n 
+0001442714 00000 n 
+0001442865 00000 n 
+0001443017 00000 n 
+0001443167 00000 n 
+0001443319 00000 n 
+0001443471 00000 n 
+0001443620 00000 n 
+0001443769 00000 n 
+0001443919 00000 n 
+0001444070 00000 n 
+0001444221 00000 n 
+0001444373 00000 n 
+0001444524 00000 n 
+0001444674 00000 n 
+0001444825 00000 n 
+0001444976 00000 n 
+0001445127 00000 n 
+0001445277 00000 n 
+0001445428 00000 n 
+0001445576 00000 n 
+0001445725 00000 n 
+0001445876 00000 n 
+0001446027 00000 n 
+0001446179 00000 n 
+0001446330 00000 n 
+0001446480 00000 n 
+0001446632 00000 n 
+0001446784 00000 n 
+0001446935 00000 n 
+0001447084 00000 n 
+0001447233 00000 n 
+0001447383 00000 n 
+0001447534 00000 n 
+0001447686 00000 n 
+0001447838 00000 n 
+0001447990 00000 n 
+0001448141 00000 n 
+0001448292 00000 n 
+0001448442 00000 n 
+0001448592 00000 n 
+0001448743 00000 n 
+0001448895 00000 n 
+0001449047 00000 n 
+0001449198 00000 n 
+0001449346 00000 n 
+0001449493 00000 n 
+0001449642 00000 n 
+0001449791 00000 n 
+0001449940 00000 n 
+0001450087 00000 n 
+0001450236 00000 n 
+0001450385 00000 n 
+0001450534 00000 n 
+0001450681 00000 n 
+0001450830 00000 n 
+0001450979 00000 n 
+0001451128 00000 n 
+0001451279 00000 n 
+0001451430 00000 n 
+0001451581 00000 n 
+0001451733 00000 n 
+0001451883 00000 n 
+0001452033 00000 n 
+0001452184 00000 n 
+0001452334 00000 n 
+0001452484 00000 n 
+0001452635 00000 n 
+0001452786 00000 n 
+0001452937 00000 n 
+0001453088 00000 n 
+0001453240 00000 n 
+0001453392 00000 n 
+0001453544 00000 n 
+0001453696 00000 n 
+0001453847 00000 n 
+0001453998 00000 n 
+0001454149 00000 n 
+0001454301 00000 n 
+0001454450 00000 n 
+0001454600 00000 n 
+0001454751 00000 n 
+0001454902 00000 n 
+0001455053 00000 n 
+0001455204 00000 n 
+0001455355 00000 n 
+0001455507 00000 n 
+0001455657 00000 n 
+0001455809 00000 n 
+0001455961 00000 n 
+0001456112 00000 n 
+0001456263 00000 n 
+0001456415 00000 n 
+0001456566 00000 n 
+0001456718 00000 n 
+0001456869 00000 n 
+0001457020 00000 n 
+0001457170 00000 n 
+0001457320 00000 n 
+0001457471 00000 n 
+0001457621 00000 n 
+0001457773 00000 n 
+0001457925 00000 n 
+0001458076 00000 n 
+0001458227 00000 n 
+0001458379 00000 n 
+0001458529 00000 n 
+0001458681 00000 n 
+0001458832 00000 n 
+0001458984 00000 n 
+0001459135 00000 n 
+0001459287 00000 n 
+0001459439 00000 n 
+0001459591 00000 n 
+0001459742 00000 n 
+0001459892 00000 n 
+0001460041 00000 n 
+0001460191 00000 n 
+0001462201 00000 n 
+0001460402 00000 n 
+0001436728 00000 n 
+0001434196 00000 n 
+0001460341 00000 n 
+0001462352 00000 n 
+0001462503 00000 n 
+0001462655 00000 n 
+0001462806 00000 n 
+0001462958 00000 n 
+0001463110 00000 n 
+0001463261 00000 n 
+0001463411 00000 n 
+0001463562 00000 n 
+0001463712 00000 n 
+0001463863 00000 n 
+0001464015 00000 n 
+0001464166 00000 n 
+0001464317 00000 n 
+0001464468 00000 n 
+0001464620 00000 n 
+0001464769 00000 n 
+0001464918 00000 n 
+0001465067 00000 n 
+0001465216 00000 n 
+0001465364 00000 n 
+0001465514 00000 n 
+0001465663 00000 n 
+0001465814 00000 n 
+0001465965 00000 n 
+0001466116 00000 n 
+0001466267 00000 n 
+0001466417 00000 n 
+0001466568 00000 n 
+0001466720 00000 n 
+0001466871 00000 n 
+0001467020 00000 n 
+0001467171 00000 n 
+0001467321 00000 n 
+0001467472 00000 n 
+0001467623 00000 n 
+0001467775 00000 n 
+0001467926 00000 n 
+0001468078 00000 n 
+0001468230 00000 n 
+0001468382 00000 n 
+0001468530 00000 n 
+0001468680 00000 n 
+0001468892 00000 n 
+0001461677 00000 n 
+0001460513 00000 n 
+0001468831 00000 n 
+0001469003 00000 n 
+0001469137 00000 n 
+0001469283 00000 n 
+0001469309 00000 n 
+0001469335 00000 n 
+0001469439 00000 n 
+0001470125 00000 n 
+0001470157 00000 n 
+0001470181 00000 n 
+0001470508 00000 n 
+0001471215 00000 n 
+0001471316 00000 n 
+0001471715 00000 n 
+0001472197 00000 n 
+0001472339 00000 n 
+0001473034 00000 n 
+0001473676 00000 n 
+0001473745 00000 n 
+0001474409 00000 n 
+0001474793 00000 n 
+0001475435 00000 n 
+0001476138 00000 n 
+0001476776 00000 n 
+0001477288 00000 n 
+0001477695 00000 n 
+0001478172 00000 n 
+0001478662 00000 n 
+0001492592 00000 n 
+0001493038 00000 n 
+0001505295 00000 n 
+0001505733 00000 n 
+0001509177 00000 n 
+0001509422 00000 n 
+0001515673 00000 n 
+0001515953 00000 n 
+0001521404 00000 n 
+0001522006 00000 n 
+0001536495 00000 n 
+0001536920 00000 n 
+0001539668 00000 n 
+0001539898 00000 n 
+0001548503 00000 n 
+0001548800 00000 n 
+0001551179 00000 n 
+0001551408 00000 n 
+0001569031 00000 n 
+0001569639 00000 n 
+0001576068 00000 n 
+0001576373 00000 n 
+0001581309 00000 n 
+0001581605 00000 n 
+0001583748 00000 n 
+0001583985 00000 n 
+0001585849 00000 n 
+0001586075 00000 n 
+0001591871 00000 n 
+0001592179 00000 n 
+0001602064 00000 n 
+0001602457 00000 n 
+0001604963 00000 n 
+0001605194 00000 n 
+0001609970 00000 n 
+0001610224 00000 n 
+0001614658 00000 n 
+0001615089 00000 n 
+0001616326 00000 n 
+0001616553 00000 n 
+0001618095 00000 n 
+0001618341 00000 n 
+0001619719 00000 n 
+0001619948 00000 n 
+0001631636 00000 n 
+0001631988 00000 n 
+0001638489 00000 n 
+0001638762 00000 n 
+0001653884 00000 n 
+0001654448 00000 n 
+0001656200 00000 n 
+0001665077 00000 n 
+0001665201 00000 n 
+0001665327 00000 n 
+0001665453 00000 n 
+0001665579 00000 n 
+0001665705 00000 n 
+0001665831 00000 n 
+0001665930 00000 n 
+0001666057 00000 n 
+0001666138 00000 n 
+0001666212 00000 n 
+0001682877 00000 n 
+0001683060 00000 n 
+0001683245 00000 n 
+0001683429 00000 n 
+0001683614 00000 n 
+0001683798 00000 n 
+0001683983 00000 n 
+0001684167 00000 n 
+0001684352 00000 n 
+0001684536 00000 n 
+0001684721 00000 n 
+0001684901 00000 n 
+0001685077 00000 n 
+0001685254 00000 n 
+0001685430 00000 n 
+0001685607 00000 n 
+0001685782 00000 n 
+0001685957 00000 n 
+0001686134 00000 n 
+0001686310 00000 n 
+0001686487 00000 n 
+0001686663 00000 n 
+0001686840 00000 n 
+0001687016 00000 n 
+0001687193 00000 n 
+0001687369 00000 n 
+0001687546 00000 n 
+0001687748 00000 n 
+0001687933 00000 n 
+0001688133 00000 n 
+0001688348 00000 n 
+0001688563 00000 n 
+0001688779 00000 n 
+0001688991 00000 n 
+0001689218 00000 n 
+0001689442 00000 n 
+0001689667 00000 n 
+0001689891 00000 n 
+0001690108 00000 n 
+0001690325 00000 n 
+0001690520 00000 n 
+0001690704 00000 n 
+0001690889 00000 n 
+0001691073 00000 n 
+0001691258 00000 n 
+0001691441 00000 n 
+0001691624 00000 n 
+0001691809 00000 n 
+0001691993 00000 n 
+0001692178 00000 n 
+0001692362 00000 n 
+0001692547 00000 n 
+0001692731 00000 n 
+0001692916 00000 n 
+0001693100 00000 n 
+0001693285 00000 n 
+0001693468 00000 n 
+0001693651 00000 n 
+0001693836 00000 n 
+0001694017 00000 n 
+0001694202 00000 n 
+0001694386 00000 n 
+0001694571 00000 n 
+0001694755 00000 n 
+0001694936 00000 n 
+0001695112 00000 n 
+0001695289 00000 n 
+0001695465 00000 n 
+0001695642 00000 n 
+0001695818 00000 n 
+0001695995 00000 n 
+0001696171 00000 n 
+0001696348 00000 n 
+0001696523 00000 n 
+0001696698 00000 n 
+0001696875 00000 n 
+0001697051 00000 n 
+0001697228 00000 n 
+0001697403 00000 n 
+0001697578 00000 n 
+0001697781 00000 n 
+0001697998 00000 n 
+0001698213 00000 n 
+0001698428 00000 n 
+0001698645 00000 n 
+0001698861 00000 n 
+0001699078 00000 n 
+0001699294 00000 n 
+0001699511 00000 n 
+0001699727 00000 n 
+0001699944 00000 n 
+0001700160 00000 n 
+0001700377 00000 n 
+0001700594 00000 n 
+0001700811 00000 n 
+0001701028 00000 n 
+0001701244 00000 n 
+0001701461 00000 n 
+0001701677 00000 n 
+0001701894 00000 n 
+0001702109 00000 n 
+0001702324 00000 n 
+0001702541 00000 n 
+0001702757 00000 n 
+0001702974 00000 n 
+0001703190 00000 n 
+0001703407 00000 n 
+0001703623 00000 n 
+0001703840 00000 n 
+0001704051 00000 n 
+0001704256 00000 n 
+0001704465 00000 n 
+0001704674 00000 n 
+0001704880 00000 n 
+0001705089 00000 n 
+0001705297 00000 n 
+0001705506 00000 n 
+0001705714 00000 n 
+0001705923 00000 n 
+0001706131 00000 n 
+0001706340 00000 n 
+0001706547 00000 n 
+0001706754 00000 n 
+0001706951 00000 n 
+0001707150 00000 n 
+0001707353 00000 n 
+0001707556 00000 n 
+0001707759 00000 n 
+0001707962 00000 n 
+0001708165 00000 n 
+0001708368 00000 n 
+0001708590 00000 n 
+0001708827 00000 n 
+0001709070 00000 n 
+0001709314 00000 n 
+0001709557 00000 n 
+0001709800 00000 n 
+0001710043 00000 n 
+0001710286 00000 n 
+0001710529 00000 n 
+0001710774 00000 n 
+0001711018 00000 n 
+0001711261 00000 n 
+0001711504 00000 n 
+0001711747 00000 n 
+0001711990 00000 n 
+0001712261 00000 n 
+0001712544 00000 n 
+0001712830 00000 n 
+0001713113 00000 n 
+0001713300 00000 n 
+0001713447 00000 n 
+0001713563 00000 n 
+0001713680 00000 n 
+0001713796 00000 n 
+0001713912 00000 n 
+0001714033 00000 n 
+0001714159 00000 n 
+0001714282 00000 n 
+0001714400 00000 n 
+0001714518 00000 n 
+0001714636 00000 n 
+0001714753 00000 n 
+0001714869 00000 n 
+0001714985 00000 n 
+0001715106 00000 n 
+0001715232 00000 n 
+0001715358 00000 n 
+0001715484 00000 n 
+0001715610 00000 n 
+0001715735 00000 n 
+0001715859 00000 n 
+0001715982 00000 n 
+0001716111 00000 n 
+0001716245 00000 n 
+0001716379 00000 n 
+0001716506 00000 n 
+0001716581 00000 n 
+0001716702 00000 n 
+0001716824 00000 n 
+0001716944 00000 n 
+0001717074 00000 n 
+0001717165 00000 n 
+0001717273 00000 n 
+0001717313 00000 n 
+0001717500 00000 n 
+trailer
+<< /Size 4403
+/Root 4401 0 R
+/Info 4402 0 R
+/ID [<4850DC4258ABB9BB9A4E9B92DE21BBD9> <4850DC4258ABB9BB9A4E9B92DE21BBD9>] >>
+startxref
+1717832
+%%EOF
diff --git a/doc/ida/ida_examples.pdf b/doc/ida/ida_examples.pdf
new file mode 100644
index 0000000..63b0667
Binary files /dev/null and b/doc/ida/ida_examples.pdf differ
diff --git a/doc/ida/ida_guide.pdf b/doc/ida/ida_guide.pdf
new file mode 100644
index 0000000..2365142
--- /dev/null
+++ b/doc/ida/ida_guide.pdf
@@ -0,0 +1,22346 @@
+%PDF-1.4
+%����
+5 0 obj
+<< /S /GoTo /D (section*.3) >>
+endobj
+8 0 obj
+(List of Tables)
+endobj
+9 0 obj
+<< /S /GoTo /D (section*.5) >>
+endobj
+12 0 obj
+(List of Figures)
+endobj
+13 0 obj
+<< /S /GoTo /D (chapter.1) >>
+endobj
+16 0 obj
+(Introduction)
+endobj
+17 0 obj
+<< /S /GoTo /D (section.1.1) >>
+endobj
+20 0 obj
+(Changes from previous versions)
+endobj
+21 0 obj
+<< /S /GoTo /D (section.1.2) >>
+endobj
+24 0 obj
+(Reading this User Guide)
+endobj
+25 0 obj
+<< /S /GoTo /D (section.1.3) >>
+endobj
+28 0 obj
+(SUNDIALS Release License)
+endobj
+29 0 obj
+<< /S /GoTo /D (subsection.1.3.1) >>
+endobj
+32 0 obj
+(Copyright Notices)
+endobj
+33 0 obj
+<< /S /GoTo /D (subsubsection.1.3.1.1) >>
+endobj
+36 0 obj
+(SUNDIALS Copyright)
+endobj
+37 0 obj
+<< /S /GoTo /D (subsubsection.1.3.1.2) >>
+endobj
+40 0 obj
+(ARKode Copyright)
+endobj
+41 0 obj
+<< /S /GoTo /D (subsection.1.3.2) >>
+endobj
+44 0 obj
+(BSD License)
+endobj
+45 0 obj
+<< /S /GoTo /D (chapter.2) >>
+endobj
+48 0 obj
+(Mathematical Considerations)
+endobj
+49 0 obj
+<< /S /GoTo /D (section.2.1) >>
+endobj
+52 0 obj
+(IVP solution)
+endobj
+53 0 obj
+<< /S /GoTo /D (section.2.2) >>
+endobj
+56 0 obj
+(Preconditioning)
+endobj
+57 0 obj
+<< /S /GoTo /D (section.2.3) >>
+endobj
+60 0 obj
+(Rootfinding)
+endobj
+61 0 obj
+<< /S /GoTo /D (chapter.3) >>
+endobj
+64 0 obj
+(Code Organization)
+endobj
+65 0 obj
+<< /S /GoTo /D (section.3.1) >>
+endobj
+68 0 obj
+(SUNDIALS organization)
+endobj
+69 0 obj
+<< /S /GoTo /D (section.3.2) >>
+endobj
+72 0 obj
+(IDA organization)
+endobj
+73 0 obj
+<< /S /GoTo /D (chapter.4) >>
+endobj
+76 0 obj
+(Using IDA for C Applications)
+endobj
+77 0 obj
+<< /S /GoTo /D (section.4.1) >>
+endobj
+80 0 obj
+(Access to library and header files)
+endobj
+81 0 obj
+<< /S /GoTo /D (section.4.2) >>
+endobj
+84 0 obj
+(Data types)
+endobj
+85 0 obj
+<< /S /GoTo /D (section.4.3) >>
+endobj
+88 0 obj
+(Header files)
+endobj
+89 0 obj
+<< /S /GoTo /D (section.4.4) >>
+endobj
+92 0 obj
+(A skeleton of the user's main program)
+endobj
+93 0 obj
+<< /S /GoTo /D (section.4.5) >>
+endobj
+96 0 obj
+(User-callable functions)
+endobj
+97 0 obj
+<< /S /GoTo /D (subsection.4.5.1) >>
+endobj
+100 0 obj
+(IDA initialization and deallocation functions)
+endobj
+101 0 obj
+<< /S /GoTo /D (subsection.4.5.2) >>
+endobj
+104 0 obj
+(IDA tolerance specification functions)
+endobj
+105 0 obj
+<< /S /GoTo /D (subsection.4.5.3) >>
+endobj
+108 0 obj
+(Linear solver specification functions)
+endobj
+109 0 obj
+<< /S /GoTo /D (subsection.4.5.4) >>
+endobj
+112 0 obj
+(Initial condition calculation function)
+endobj
+113 0 obj
+<< /S /GoTo /D (subsection.4.5.5) >>
+endobj
+116 0 obj
+(Rootfinding initialization function)
+endobj
+117 0 obj
+<< /S /GoTo /D (subsection.4.5.6) >>
+endobj
+120 0 obj
+(IDA solver function)
+endobj
+121 0 obj
+<< /S /GoTo /D (subsection.4.5.7) >>
+endobj
+124 0 obj
+(Optional input functions)
+endobj
+125 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.1) >>
+endobj
+128 0 obj
+(Main solver optional input functions)
+endobj
+129 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.2) >>
+endobj
+132 0 obj
+(Dense/band direct linear solvers optional input functions)
+endobj
+133 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.3) >>
+endobj
+136 0 obj
+(Sparse direct linear solvers optional input functions)
+endobj
+137 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.4) >>
+endobj
+140 0 obj
+(Iterative linear solvers optional input functions)
+endobj
+141 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.5) >>
+endobj
+144 0 obj
+(Initial condition calculation optional input functions)
+endobj
+145 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.6) >>
+endobj
+148 0 obj
+(Rootfinding optional input functions)
+endobj
+149 0 obj
+<< /S /GoTo /D (subsection.4.5.8) >>
+endobj
+152 0 obj
+(Interpolated output function)
+endobj
+153 0 obj
+<< /S /GoTo /D (subsection.4.5.9) >>
+endobj
+156 0 obj
+(Optional output functions)
+endobj
+157 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.1) >>
+endobj
+160 0 obj
+(Main solver optional output functions)
+endobj
+161 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.2) >>
+endobj
+164 0 obj
+(Initial condition calculation optional output functions)
+endobj
+165 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.3) >>
+endobj
+168 0 obj
+(Rootfinding optional output functions)
+endobj
+169 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.4) >>
+endobj
+172 0 obj
+(Dense/band direct linear solvers optional output functions)
+endobj
+173 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.5) >>
+endobj
+176 0 obj
+(Sparse direct linear solvers optional output functions)
+endobj
+177 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.6) >>
+endobj
+180 0 obj
+(Iterative linear solvers optional output functions)
+endobj
+181 0 obj
+<< /S /GoTo /D (subsection.4.5.10) >>
+endobj
+184 0 obj
+(IDA reinitialization function)
+endobj
+185 0 obj
+<< /S /GoTo /D (section.4.6) >>
+endobj
+188 0 obj
+(User-supplied functions)
+endobj
+189 0 obj
+<< /S /GoTo /D (subsection.4.6.1) >>
+endobj
+192 0 obj
+(Residual function)
+endobj
+193 0 obj
+<< /S /GoTo /D (subsection.4.6.2) >>
+endobj
+196 0 obj
+(Error message handler function)
+endobj
+197 0 obj
+<< /S /GoTo /D (subsection.4.6.3) >>
+endobj
+200 0 obj
+(Error weight function)
+endobj
+201 0 obj
+<< /S /GoTo /D (subsection.4.6.4) >>
+endobj
+204 0 obj
+(Rootfinding function)
+endobj
+205 0 obj
+<< /S /GoTo /D (subsection.4.6.5) >>
+endobj
+208 0 obj
+(Jacobian information \(direct method with dense Jacobian\))
+endobj
+209 0 obj
+<< /S /GoTo /D (subsection.4.6.6) >>
+endobj
+212 0 obj
+(Jacobian information \(direct method with banded Jacobian\))
+endobj
+213 0 obj
+<< /S /GoTo /D (subsection.4.6.7) >>
+endobj
+216 0 obj
+(Jacobian information \(direct method with sparse Jacobian\))
+endobj
+217 0 obj
+<< /S /GoTo /D (subsection.4.6.8) >>
+endobj
+220 0 obj
+(Jacobian information \(matrix-vector product\))
+endobj
+221 0 obj
+<< /S /GoTo /D (subsection.4.6.9) >>
+endobj
+224 0 obj
+(Preconditioning \(linear system solution\))
+endobj
+225 0 obj
+<< /S /GoTo /D (subsection.4.6.10) >>
+endobj
+228 0 obj
+(Preconditioning \(Jacobian data\))
+endobj
+229 0 obj
+<< /S /GoTo /D (section.4.7) >>
+endobj
+232 0 obj
+(A parallel band-block-diagonal preconditioner module)
+endobj
+233 0 obj
+<< /S /GoTo /D (chapter.5) >>
+endobj
+236 0 obj
+(FIDA, an Interface Module for FORTRAN Applications)
+endobj
+237 0 obj
+<< /S /GoTo /D (section.5.1) >>
+endobj
+240 0 obj
+(Important note on portability)
+endobj
+241 0 obj
+<< /S /GoTo /D (section.5.2) >>
+endobj
+244 0 obj
+(Fortran Data Types)
+endobj
+245 0 obj
+<< /S /GoTo /D (section.5.3) >>
+endobj
+248 0 obj
+(FIDA routines)
+endobj
+249 0 obj
+<< /S /GoTo /D (section.5.4) >>
+endobj
+252 0 obj
+(Usage of the FIDA interface module)
+endobj
+253 0 obj
+<< /S /GoTo /D (section.5.5) >>
+endobj
+256 0 obj
+(FIDA optional input and output)
+endobj
+257 0 obj
+<< /S /GoTo /D (section.5.6) >>
+endobj
+260 0 obj
+(Usage of the FIDAROOT interface to rootfinding)
+endobj
+261 0 obj
+<< /S /GoTo /D (section.5.7) >>
+endobj
+264 0 obj
+(Usage of the FIDABBD interface to IDABBDPRE)
+endobj
+265 0 obj
+<< /S /GoTo /D (chapter.6) >>
+endobj
+268 0 obj
+(Description of the NVECTOR module)
+endobj
+269 0 obj
+<< /S /GoTo /D (section.6.1) >>
+endobj
+272 0 obj
+(The NVECTOR\137SERIAL implementation)
+endobj
+273 0 obj
+<< /S /GoTo /D (section.6.2) >>
+endobj
+276 0 obj
+(The NVECTOR\137PARALLEL implementation)
+endobj
+277 0 obj
+<< /S /GoTo /D (section.6.3) >>
+endobj
+280 0 obj
+(The NVECTOR\137OPENMP implementation)
+endobj
+281 0 obj
+<< /S /GoTo /D (section.6.4) >>
+endobj
+284 0 obj
+(The NVECTOR\137PTHREADS implementation)
+endobj
+285 0 obj
+<< /S /GoTo /D (section.6.5) >>
+endobj
+288 0 obj
+(The NVECTOR\137PARHYP implementation)
+endobj
+289 0 obj
+<< /S /GoTo /D (section.6.6) >>
+endobj
+292 0 obj
+(The NVECTOR\137PETSC implementation)
+endobj
+293 0 obj
+<< /S /GoTo /D (section.6.7) >>
+endobj
+296 0 obj
+(NVECTOR Examples)
+endobj
+297 0 obj
+<< /S /GoTo /D (section.6.8) >>
+endobj
+300 0 obj
+(NVECTOR functions used by IDA)
+endobj
+301 0 obj
+<< /S /GoTo /D (chapter.7) >>
+endobj
+304 0 obj
+(Providing Alternate Linear Solver Modules)
+endobj
+305 0 obj
+<< /S /GoTo /D (section.7.1) >>
+endobj
+308 0 obj
+(Initialization function)
+endobj
+309 0 obj
+<< /S /GoTo /D (section.7.2) >>
+endobj
+312 0 obj
+(Setup function)
+endobj
+313 0 obj
+<< /S /GoTo /D (section.7.3) >>
+endobj
+316 0 obj
+(Solve function)
+endobj
+317 0 obj
+<< /S /GoTo /D (section.7.4) >>
+endobj
+320 0 obj
+(Performance monitoring function)
+endobj
+321 0 obj
+<< /S /GoTo /D (section.7.5) >>
+endobj
+324 0 obj
+(Memory deallocation function)
+endobj
+325 0 obj
+<< /S /GoTo /D (chapter.8) >>
+endobj
+328 0 obj
+(General Use Linear Solver Components in SUNDIALS)
+endobj
+329 0 obj
+<< /S /GoTo /D (section.8.1) >>
+endobj
+332 0 obj
+(The DLS modules: DENSE and BAND)
+endobj
+333 0 obj
+<< /S /GoTo /D (subsection.8.1.1) >>
+endobj
+336 0 obj
+(Type DlsMat)
+endobj
+337 0 obj
+<< /S /GoTo /D (subsection.8.1.2) >>
+endobj
+340 0 obj
+(Accessor macros for the DLS modules)
+endobj
+341 0 obj
+<< /S /GoTo /D (subsection.8.1.3) >>
+endobj
+344 0 obj
+(Functions in the DENSE module)
+endobj
+345 0 obj
+<< /S /GoTo /D (subsection.8.1.4) >>
+endobj
+348 0 obj
+(Functions in the BAND module)
+endobj
+349 0 obj
+<< /S /GoTo /D (section.8.2) >>
+endobj
+352 0 obj
+(The SLS module)
+endobj
+353 0 obj
+<< /S /GoTo /D (subsection.8.2.1) >>
+endobj
+356 0 obj
+(Type SlsMat)
+endobj
+357 0 obj
+<< /S /GoTo /D (subsection.8.2.2) >>
+endobj
+360 0 obj
+(Functions in the SLS module)
+endobj
+361 0 obj
+<< /S /GoTo /D (subsection.8.2.3) >>
+endobj
+364 0 obj
+(The KLU solver)
+endobj
+365 0 obj
+<< /S /GoTo /D (subsection.8.2.4) >>
+endobj
+368 0 obj
+(The SUPERLUMT solver)
+endobj
+369 0 obj
+<< /S /GoTo /D (section.8.3) >>
+endobj
+372 0 obj
+(The SPILS modules: SPGMR, SPFGMR, SPBCG, and SPTFQMR)
+endobj
+373 0 obj
+<< /S /GoTo /D (subsection.8.3.1) >>
+endobj
+376 0 obj
+(The SPGMR module)
+endobj
+377 0 obj
+<< /S /GoTo /D (subsection.8.3.2) >>
+endobj
+380 0 obj
+(The SPFGMR module)
+endobj
+381 0 obj
+<< /S /GoTo /D (subsection.8.3.3) >>
+endobj
+384 0 obj
+(The SPBCG module)
+endobj
+385 0 obj
+<< /S /GoTo /D (subsection.8.3.4) >>
+endobj
+388 0 obj
+(The SPTFQMR module)
+endobj
+389 0 obj
+<< /S /GoTo /D (appendix.A) >>
+endobj
+392 0 obj
+(SUNDIALS Package Installation Procedure)
+endobj
+393 0 obj
+<< /S /GoTo /D (section.A.1) >>
+endobj
+396 0 obj
+(CMake-based installation)
+endobj
+397 0 obj
+<< /S /GoTo /D (subsection.A.1.1) >>
+endobj
+400 0 obj
+(Configuring, building, and installing on Unix-like systems)
+endobj
+401 0 obj
+<< /S /GoTo /D (subsection.A.1.2) >>
+endobj
+404 0 obj
+(Configuration options \(Unix/Linux\))
+endobj
+405 0 obj
+<< /S /GoTo /D (subsection.A.1.3) >>
+endobj
+408 0 obj
+(Configuration examples)
+endobj
+409 0 obj
+<< /S /GoTo /D (subsection.A.1.4) >>
+endobj
+412 0 obj
+(Working with external Libraries)
+endobj
+413 0 obj
+<< /S /GoTo /D (section.A.2) >>
+endobj
+416 0 obj
+(Building and Running Examples)
+endobj
+417 0 obj
+<< /S /GoTo /D (section.A.3) >>
+endobj
+420 0 obj
+(Configuring, building, and installing on Windows)
+endobj
+421 0 obj
+<< /S /GoTo /D (section.A.4) >>
+endobj
+424 0 obj
+(Installed libraries and exported header files)
+endobj
+425 0 obj
+<< /S /GoTo /D (appendix.B) >>
+endobj
+428 0 obj
+(IDA Constants)
+endobj
+429 0 obj
+<< /S /GoTo /D (section.B.1) >>
+endobj
+432 0 obj
+(IDA input constants)
+endobj
+433 0 obj
+<< /S /GoTo /D (section.B.2) >>
+endobj
+436 0 obj
+(IDA output constants)
+endobj
+437 0 obj
+<< /S /GoTo /D (section*.150) >>
+endobj
+440 0 obj
+(Bibliography)
+endobj
+441 0 obj
+<< /S /GoTo /D (section*.151) >>
+endobj
+444 0 obj
+(Index)
+endobj
+445 0 obj
+<< /S /GoTo /D [446 0 R  /Fit ] >>
+endobj
+449 0 obj <<
+/Length 469       
+/Filter /FlateDecode
+>>
+stream
+x�uS�n�0��+x�����)
]�O�+�$ZRRz����ߕH�v�B��؝��IN^	'���]��~ M�2Z��@��P�^0�
R��1}84cF%�ݐQa���5}���&?��2��s�����D���י���
m	L
+{�	V0>�epW�Xy <qͯ	�
sb9
�ڻ�pM�Z��>ӳ�#)D�%�jZ�K��%�qїU���ч5�W�~�}ݹ���&��]}
Ѷw��i���r�p���7�B��ťd2��A�B���M?-�������{��0�Cb[y��'�
+���폓�_��L\2o�~�k�����%�n�[3v�x���\ �F�Һ���a�}�OtS<�
���m���.CWvx�l�L��s�<��L��/���x9�B۪.���T��P��R슉��
��!��ߩD#=�
/�b�
&�&V3����
�~��� b��o7�'M�&
+endstream
+endobj
+446 0 obj <<
+/Type /Page
+/Contents 449 0 R
+/Resources 448 0 R
+/MediaBox [0 0 612 792]
+/Parent 456 0 R
+>> endobj
+447 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./doc_logo_blue.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 457 0 R
+/BBox [0 0 142 147]
+/Resources <<
+/ProcSet [ /PDF ]
+/ExtGState <<
+/R7 458 0 R
+>>>>
+/Length 459 0 R
+/Filter /FlateDecode
+>>
+stream
+x���[�.�
��g��(�P�e8[8@���C�����c�s�iZ-�X,��ϧ��T��������ϯ���e�ۂ�'�;��Ӟ��q�,�ާ�^˼�o��R����2��5o8���׻~~|��^����������No�
����q��>1Y��zE9�ث�1��>fi�Y<6c?gsi��_�)��g�Vz��l:�9�W/���N+���6~M�<%p�Ƕ��s�N�Uvf�_>?F��XT^2.����l��
�Y��noW�6�
���(�<��m ���f����"RZ�Ҷ<�1J=��\z�Z���/����g�mO�m=Ơ�!�@s�g�s7.
��6��
���Y����. max�P	D�߇��A�X_��/"�N�!Ѐ"�]x� E��x�U���}�vF��!L<s\+�p�~
@�i��}�5�jgrU`�
q���t�v?zV`��v*���5���R�]��	��O6��Qk
��?�%Ai�6 EU�w�|	K�~kw��2%�ajNX���	�e=z�sLw�Vɏs�WV~�L�p 	ƞ�RR����5=0m
<ە���Q �s% o�b+	h�1�89 �)[�����ɭQ.�[���������9���N@�%��4��?�۝��u��˰_^��W\s�;�a�7yv���g�PB�>z�t��`�#�2���q.��:��k��9��
Jrtb�2���CӀ�W�FM�F��

M�	Ԉ'.٥'�o'��`:�_�!K7.
h�T�N�[��(�����ҧ4�Q�*L���j27
 pV�~���b��Y�l�.R��k���!,䜮�&*%�x�6�
+������Q�"
�|풇�
+=�[�+��P� /h at w�Z,f�T�"���h'�#�'y��� 9��^�Zk3���谮Rb��k��%
+P���p�*M�
��珟2V9���D�W�X��8�8W�b�$2���i����er6�H��ɽƋ ꦭ�:���
~w��Rh�
��>�A�J��y���$�OqB�jb�U.IB�$3.Uf���nIb���s[	ym׽d��-��
��-�)�w�#*���D��
�
�R�q�
�f)�Ӫ2a�$bMu	Y;�K7k�<�~���~
��7�v�
�E���E�8B�ϟB�0v��Ҡ�]�跏λ��lR��(��>e?*����G�@�5sm�C	x�w����Xw�k:�l�R���)J�)r�Lz��#i$�X �}�|R:T��j9��d~��r��(�\���T��K!̒_*�p	�t� hduk��~�
 v���d
MҒihA,o�A�_@��{"�� ����h��"���`���E��
�0X��:G��
j��R>�)M@�L�a��݁�
�����#��K\�6O�މ�$Fs�_zqd���
<�ʬ�#��G�h7wt�㪲����8���B�&Z
:YKrt��Xj���Q��ԒG�
f�
#�2' B	jM;���!-��tՋN�9%����
�Y
PVtԃ�
+�NPɂi�����
D���F
6H���SL���x�$�z^���'Cu�'�
�(K���i^`�2 ~D�dT�]�O|ݥ���:
�B����	�!���0ƜI�A<�ӊ�be���A0��n=�lj�힪�jg���|��h���oC��,G@���N���Y�"��C�B��z^?��
��с��$�@?�dLM<�X2��
�%�z��l
+e�=�^�Yk��Z�̺?Ö��:H�m]L��R��n��J�2!�&��d�'T0�
+��*�5����1��W�ŝ���U�a�͓v,]1�q:!و��m�U�s�o�
��F�,r�ZT��R��DEPHSj2�#S�����<�O�W�͐B��i���d��%�&mMO|�W߷|`d2��>`G�*�d�0�w�T��Ǵ&�$�
�5dӟ#�����AD�s�����x� �ZHRRP~~ JE�C=�v�[o��J at 4[Y%B��{Tn{3Ç��$�.uy8_��T归��2�4t�
I�bqQ
֚��b\��
+�ͬKa�l�
jh�O����� =X1l�vh��Ty���J�`�_|�+�Y�Q�@�q��y�Þ��D��B'�Q�4Z�dYc����FQ޳�
���P�e��о�8���i=e�%	��"�L��O$���G j>�����l���p�0�̓2eLÊ�K�pi|4R�FKh�A_��mdo:4 (
�>���5����xM5ŧ���f�f
+��6q�ֈ��6�p��'�8u��s��~�ƻ���R䮺
ת�A��h+��
+�����NU���i��/�8���ʡ��������BlY3	x�
+��FS�6 H8�zg$
;!��7̹�񕚄��|Ohm3WK��p�[q
E�_�d��	��=�#�T;��!�&���e?~�;Pg��|h�R.�*{Ǩ����c�Wu::3޵X�2��!�P٬���������Tvh𺦉u���<��rֻ���=7V2}8����
B�QG^���-�mjrUC���}���>sGJ2h�V����ˠ[wcx�ڟ�EW�j��+,jlё
�KZk3������w�wG��>O8�'/�gϙ³�ğ��kj�ZO�懥�s�D+[|�p�G��g��rzn
n}ɸ�ڣٮ�G"��}�uF뷵'O�d�&Ξ�S��8ꆭQ^뛝Y˫�C}�
˟l}wߒ�dM�M��D��is��+��R��t=�2�sg������a�Fw�<���3�J���vkz�
Cs��z~��׻�����
^i|o��5�:!<e;6�Y�Z�;5�4z���=��7��7j)���]wԆ<�Ўa�
뤛L#;�
����v�Z���+���m��c��1XN_�8���;Jj��I�ntt�G���#�v
��F#vֻ6O���io&*�
����I�U �&�eY�|3�,_sb�[�%ܾ�)����t�Z�2��lDK���~�SVO��/����?~JT%�/����
+endstream
+endobj
+457 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20160805102442-07'00')
+/ModDate (D:20160805102442-07'00')
+/Creator (0.43+devel)
+>>
+endobj
+458 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+459 0 obj
+2952
+endobj
+450 0 obj <<
+/D [446 0 R /XYZ 86.4 726.045 null]
+>> endobj
+451 0 obj <<
+/D [446 0 R /XYZ 86.4 701.138 null]
+>> endobj
+448 0 obj <<
+/Font << /F15 452 0 R /F16 453 0 R /F17 454 0 R /F35 455 0 R >>
+/XObject << /Im1 447 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+462 0 obj <<
+/Length 1166      
+/Filter /FlateDecode
+>>
+stream
+x�uVKs�6��W�H�D
ߤ�'�v:�>��)�&!	c
+� �U����Ą�H��>�} �긊V�E�������Xm�m���a�UXժ��a��}��<~}y������������T7
+��JB�Zm�8��k�Oʮ7Y�M��$UPg��@8f_�^�7�F6x�&�������V�;�����lO�:m����:)�ov4w����[r'��w�ܨ�ℓ3�61d�{<�
z~�i4%V.�,��sf�I��
���0��0�h����<��
;�B�{s;�Uΐ,���S�-;~��`�C��u���]��çYFgD���Q"�ME2!
��s�v,��)
�<�7:�+\jc�ύCJ)���P~k
T
Q��&�u
�J6^� ��Z觟�ᡕG���?*�����BI!���\%

���� Ģ��Ҡ� 
餆����� �XT���ZK:Y��H緹d����Le��E��#�`=�78`e�
���
Y&b"��Fٺ�,�
̡���H�1d.
U#k��9��nh>�α ��������͋ ڿ�`��ES�s>��-NS\��A��G�0XR��
d����i�Z�
�Y�L(�Y�ZѨ�yfD�,gX��I$+ͻ�1��_ΈƳ�8Ko��ga޼�3�7
D�#�[.Y���紌�UJ3G™�q
+�Td���N��yE�
�t��*"!u�+�̓�TP(��G�t35aM�bڂ
��
��
+��Ѵ
�
w!��Z-��Qo�������8�k�*D�u��_Wa�Va��1�w%/>�}�]�4�K[�6�`
� ��f���w,�X@���!1�
0,��$�
�FB���*�Ɏ����%�e�K��
+�]�8p�A�a&���A�f<�a���G)�8$@�f8B'�z%B"�I����@�!u�w^C�����/%�S�.p������V���i
VE~����t}oL[O�U�6���=�A7�oTn}����=�A������/!S��"��
]��Q���
"OZ��_��"����qf#���7o�J&�
�3��`��ɇ�<p�9�<>m�1��<�D��}RB���<9WUn�`\�a
� �{\�S�6\�>���V�L�Ja�o^�J�\p�;
��4%4Fު3
�R<O��� �:�
+endstream
+endobj
+461 0 obj <<
+/Type /Page
+/Contents 462 0 R
+/Resources 460 0 R
+/MediaBox [0 0 612 792]
+/Parent 456 0 R
+>> endobj
+463 0 obj <<
+/D [461 0 R /XYZ 86.4 726.045 null]
+>> endobj
+460 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+507 0 obj <<
+/Length 1456      
+/Filter /FlateDecode
+>>
+stream
+x���V�6��<�gu6�Ŷ4�@����
+�ځqL�j��
笞>}�.Np at Y@JBG&7d}{�_��
y/��"s�4:8<%��4LY��ѭǒ�z	B!a���k��*�M�7����_�W��C��D�(���"��
1oaįn���O��fZ�_�����Zބ�cxv�Q��=0x���w!�7��zA�� �0j���H�b����fj�?E�F1��A�q����
���"o�Y7!!Mq;Z��u��0�03c���"�aQ��|���Q@�o��{�bV�E�P�� 3���pW�N
!
�Ek/�����.]�=ܯ�H��ۆ7Ze�
�a��E9� �;ah_͋Z�w���Q��9�����ĉ!~y������R�
[�O!��ټ��_��(�8e���/@
����>�tQ
+:>���Q�ɝ��F#�R5 �Gl���,�.��u�	
+Y+׼Z��I���
+<[O����4��O�����7X\!GDž��
r��]O��^�M�El����fg�Sz�}t���I/���4d1[�X3��5w�}j�M�'�<�Pg�\Ԕ/[c�!�1a~��OD
���c�����>��
XG�9
8K�%�o��ny�:)�^�[]�U92�S�^��|�D:y䈿5�C��0�j��-��O��K���cU&[���$�2yl�υ�ȯ�$+�?�S��kX�x�|D6�Gb�qّU�A���ՃM���X�;?�6�H�D˔c0'�_D[��C�Q]nWs�׀R��@�
�>�mU��/GҢ�f�
�f%Wa{ʰ$$&>�ԱP[�G9l;M���taN�M��?�
�O�l_`��e�2R�eS1�9�/�
�*�uJm��dMf����L�ҹ��{�
x�ց�
s�L�[~)���6R��m�C\�w���69
�5.��)���K�קE�,1'�]l��yQ�d����0_��դ��A����#[�4�ve
+c�V���.O�ѐ9�X����L|�T�ǔ}]ꋭ��`����',�Z�S����=k6}��k0�a�[���9�+�F!�1ف
��S�
5 �m�%PM5-���!�|�������}s��>�B�EV��9��  '���6L]�R�C*uuj����1���i7��m�˷a�0sλ�`�k��
�=��Xp�U��m-Y�u˝�%}·\�r�bX����$r��_gc[࢜�.�5E�
����U���l��=��l����S�Ƈ91��o
���J���%�ǯ'������ț�1ӷ|��N�I]��n����$��%�cf���L�:��eu���+϶ݺ0��t�j�7�|R�)�l�v-����� ����b�`�ȳ�r�k��J6�sb�<�O\��#�.�KzHb�#zH]���"��[�(�'� 
+Ӕ��#&`��
�8'�u8�_�p�_��1G��Z�(����d9k����

�
,�\�
+endstream
+endobj
+506 0 obj <<
+/Type /Page
+/Contents 507 0 R
+/Resources 505 0 R
+/MediaBox [0 0 612 792]
+/Parent 456 0 R
+/Annots [ 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R ]
+>> endobj
+466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [512.192 548.452 526.596 557.363]
+/Subtype /Link
+/A << /S /GoTo /D (section*.3) >>
+>> endobj
+467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [515.375 526.363 526.596 535.274]
+/Subtype /Link
+/A << /S /GoTo /D (section*.5) >>
+>> endobj
+468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [518.875 504.273 526.596 512.686]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.1) >>
+>> endobj
+469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 492.215 526.596 500.628]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.1) >>
+>> endobj
+470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 480.157 526.596 488.57]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.2) >>
+>> endobj
+471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 468.099 526.596 476.511]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.3) >>
+>> endobj
+472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 456.04 526.596 464.453]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.3.1) >>
+>> endobj
+473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 443.982 526.596 452.395]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.3.1.1) >>
+>> endobj
+474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 431.924 526.596 440.337]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.3.1.2) >>
+>> endobj
+475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 419.866 526.596 428.279]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.3.2) >>
+>> endobj
+476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [518.875 397.776 526.596 406.189]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 385.718 526.596 394.131]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 373.66 526.596 382.073]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 361.602 526.596 370.014]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 339.512 526.596 347.925]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.3) >>
+>> endobj
+481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 327.454 526.596 335.867]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 315.396 526.596 323.808]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 293.306 526.596 301.719]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 281.248 526.596 289.661]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.1) >>
+>> endobj
+485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 269.19 526.596 277.603]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.2) >>
+>> endobj
+486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 257.131 526.596 265.544]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 245.073 526.596 253.486]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 233.015 526.596 241.428]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.5) >>
+>> endobj
+489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 220.957 526.596 229.37]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 208.899 526.596 217.312]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 196.84 526.596 205.253]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 184.782 526.596 193.195]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 172.724 526.596 181.137]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 160.666 526.596 169.079]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 148.608 526.596 157.02]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.7) >>
+>> endobj
+496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 136.549 526.596 144.962]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.1) >>
+>> endobj
+497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 124.491 526.596 132.904]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.2) >>
+>> endobj
+498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 112.433 526.596 120.846]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.3) >>
+>> endobj
+499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 100.375 526.596 108.788]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.4) >>
+>> endobj
+500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 88.317 526.596 96.729]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.5) >>
+>> endobj
+501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 76.258 526.596 84.671]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.6) >>
+>> endobj
+502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 64.2 526.596 72.613]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+508 0 obj <<
+/D [506 0 R /XYZ 86.4 726.045 null]
+>> endobj
+510 0 obj <<
+/D [506 0 R /XYZ 86.4 571.538 null]
+>> endobj
+505 0 obj <<
+/Font << /F38 509 0 R /F36 464 0 R /F8 465 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+564 0 obj <<
+/Length 2061      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6}���#5S1ĕ@ߔHN��
WR:�I�@K��)E�$�4߯�H�]ЖK�xIg�
�.V^��ޟyf�vt��\��+9��]
1�""Z\"�pj���P���E���w��(iw!N��_�X8a���Y�I�#��b6/�7w�d����
&<Dž���
��_.�s�
������3x���A�p��k�-|t��2,��r�DE��N�q�L"5`s��y
,NlA���B��%���h����%ˣ%f�������x��X�{3�����@�(��L�� �
@��^���� ��!O�,
���Q�i�7�&
�Q+� ��8%{��A�J ր�̌u8
�<|�qJ_<�����

�+_/�
�Y�ㆡ֎�1۷+XR`��ur�؄y�:�6�@W�+
#��������{�
�"�/���{;@�ؕ��{�"����)�N>���(�� I�)��
�nv���v�W �i�ː�a��'�'�jV^�py"��;ő�z�2NRX��,5:9
�<�7� �f\E�
�_>V��bk
�&�_ˉ&�P�b
=	z�*`�����\)*����*/�kA��
��qz�&q�ܥ�t)h��c�rT9
�mZ��}�D��d�P��iR
b��;eځT8��/������8j�q�ށȗ2�U|�̚�
8΢::���4g�Ad>.�):�X�[%
P7����R�<��㖲�oyN��\]��a>{��m��o�eU���e�AB��H�\�$cWa�����Mz�ՠ̀cA�q/�s��X��u&Qp���gK�W��r�K0��c)��7�/U�;���� $HC�T8ʜ�^� �? �:%�q.u���`
�SW�
��بkU\�
쟫�?ڒ;�A�Z��UI�� ǁΕ��n
�G����Z)܌a��L
.�3
"f
a{'i�R�q��u�Q
��o��)>�}��#+�G��y�
Pf�R�@���H�ܷY�~*��
;��h�.Dae�Y�@�D��Y
+jR.��.�R��-�@�*������i(
LԻj�H�S����G�����jö2}��%��V��S���L
+���Uހ�%�?�*�׸L�"5��% ���_Ry���dYK0�`�}����,��R/딗�n}�
$:.OO�R���(���,���[
w:�Ԙ‰����F��ӥPug̉��1G��1'�c�у1p���A����g����ep�\�yk<=���ך��Z�K�h}-/�� �������-� R�
����o2�.���=�Y
N�D�ga��#G%���ܕ%JQ6Ȭ�
+77�.��
L"���nT��
t//����/�{�����lLD+��&B�et���
o��W7�M�=�:����`!�ȉhs
y���}�
<��F�nF�
���p�����
�,]�52
kl,���
�M=��Uu���G
H`~B�7�on'�b{0<�2c��h�n��HvLEK;�Fv�b�E,	��C��O0U��*2��^�����r���b�<��I/�m���c�����$���h����It"���6�O.��:���

��/�i�P"��
C��I�.�NJ��NJ�%4U��%�NJ���^غ�o�Q����;)�Qt>jO��f�u�4
���蚗^��p3T�аjZ��~�<�
�v�g�N}nt�x���T��i
+��f[���]��a�I^%.W�4��D^wKq�j_���Ժ��S%�Ol�j����xr( t(�>L¬\K�Y�Sn�wO��y��w8�&����M���?]�.�����1%���a\ 6+�����RZ���|׿
�W����{݃�{���KJ`Ͼ�
�[�W��
�q~�a�G_P�SAl��(ԫ&��x��ʼj
��,5W�������t���:�-�K�&g�_Հ_��,g�D��
+f
XYo�
;�k&�Hj�� ��P
K��
Z����p�ۂ�>Ҩs��8ψy��d�ÏMpC3�	�~���
��@�z����
�A��7���&���W��|������Bc
}Y��?:�?�ت#
+endstream
+endobj
+563 0 obj <<
+/Type /Page
+/Contents 564 0 R
+/Resources 562 0 R
+/MediaBox [0 0 612 792]
+/Parent 456 0 R
+/Annots [ 504 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R ]
+>> endobj
+504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 678.216 526.596 686.629]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.2) >>
+>> endobj
+512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 666.253 526.596 674.666]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.3) >>
+>> endobj
+513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 654.289 526.596 662.702]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.4) >>
+>> endobj
+514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 642.326 526.596 650.739]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.5) >>
+>> endobj
+515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 630.363 526.596 638.776]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.6) >>
+>> endobj
+516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 618.4 526.596 626.812]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.10) >>
+>> endobj
+517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 606.436 526.596 614.849]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 594.473 526.596 602.886]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 582.51 526.596 590.922]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.2) >>
+>> endobj
+520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 570.546 526.596 578.959]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.3) >>
+>> endobj
+521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 558.583 526.596 566.996]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.4) >>
+>> endobj
+522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 546.62 526.596 555.033]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 534.656 526.596 543.069]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 522.693 526.596 531.106]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 510.73 526.596 519.143]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 498.766 526.596 507.179]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.9) >>
+>> endobj
+527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 486.803 526.596 495.216]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.10) >>
+>> endobj
+528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 474.84 526.596 483.253]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 452.909 526.596 461.321]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 440.945 526.596 449.358]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 428.982 526.596 437.395]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 417.019 526.596 425.432]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 405.055 526.596 413.468]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 393.092 526.596 401.505]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 381.129 526.596 389.542]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.6) >>
+>> endobj
+536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 369.165 526.596 377.578]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.7) >>
+>> endobj
+537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 347.234 526.596 355.647]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 335.271 526.596 343.684]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 323.307 526.596 331.72]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 311.344 526.596 319.757]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 299.381 526.596 307.794]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 287.418 526.596 295.83]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.5) >>
+>> endobj
+543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 275.454 526.596 283.867]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.6) >>
+>> endobj
+544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 263.491 526.596 271.904]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.7) >>
+>> endobj
+545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 251.528 526.596 259.941]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.8) >>
+>> endobj
+546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 229.596 526.596 238.009]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 217.633 526.596 226.046]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 205.67 526.596 214.083]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 193.706 526.596 202.119]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 181.743 526.596 190.156]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 169.78 526.596 178.193]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.5) >>
+>> endobj
+552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 147.848 526.596 156.261]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 135.885 526.596 144.298]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.1) >>
+>> endobj
+554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 123.922 526.596 132.335]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.1) >>
+>> endobj
+555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 111.958 526.596 120.371]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.2) >>
+>> endobj
+556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 99.995 526.596 108.408]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.3) >>
+>> endobj
+557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 88.032 526.596 96.445]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.4) >>
+>> endobj
+558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 76.069 526.596 84.481]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.2) >>
+>> endobj
+559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 64.105 526.596 72.518]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.1) >>
+>> endobj
+560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.2) >>
+>> endobj
+565 0 obj <<
+/D [563 0 R /XYZ 86.4 726.045 null]
+>> endobj
+562 0 obj <<
+/Font << /F8 465 0 R /F36 464 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+588 0 obj <<
+/Length 921       
+/Filter /FlateDecode
+>>
+stream
+x��[S�@���<.3�
�n�oc;6��A���FF�
�}�Cb
��z{a�e!��s�o
cd8�ކS�����2��=���e�f�2<Mm*ahh�e3���B��e`Z�
�w�7�dItc2E�Դ�T�6-�q������Ok~
��x:p�F�
���m���.��-L�Z� W[�s��"��Ý~��`�
�s�'�;�c���f�N���:��=4)��
U��Ĵ�簈��+�8a����}t��������W?���t֠���q��7�$l��]��js `�y�l�����9�l���}�,����yk�|�.��=`]�^g�[��Z����h�w��̧�{(�7A��x��]��I*�K[������b݁��)T�����)NMΈ��+���� �q��Q��a�S�34��E�˸g�T)��6V������B��`�������ֹ��r(��]�X���-���j^����p#p��J�3��Q���
�ȕ0ލ�dGmxR�K��8'V��$	j�x���u����e�x��`�4���O�y@�8��g���~7{a��ZL`qr���I�f�`L��1�\���{	�pEA[���n�^�B�O�_N��A�Q5�
�S?
��~l��
�&
s�`<c9�Uk
��q
�Kɨ���y���+xK��u�^�
��\ɘ���d���0���'Ce'�%�Y��ZZ5�
�,|�6��K囤yP]����{�_y,���� �Iܩ�,%��wAh( ��z�S�VpS�
�H��R�2�C]�ߡB> ^-�Hۑ�i�n����_�u�Zi\�U/��CX�%��?��Lt�Vi�[ʷE�I��⯴� �5���qX5��y&��_b�ݶ
;��� ��	�����`���|�.�
�vp\)[Ch�/�4^�l�'l
+endstream
+endobj
+587 0 obj <<
+/Type /Page
+/Contents 588 0 R
+/Resources 586 0 R
+/MediaBox [0 0 612 792]
+/Parent 456 0 R
+/Annots [ 561 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R ]
+>> endobj
+561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.3) >>
+>> endobj
+566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 678.224 526.596 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.4) >>
+>> endobj
+567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 666.269 526.596 674.682]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.3) >>
+>> endobj
+568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 654.314 526.596 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.1) >>
+>> endobj
+569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 642.359 526.596 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.2) >>
+>> endobj
+570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 630.403 526.596 638.816]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.3) >>
+>> endobj
+571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 618.448 526.596 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.4) >>
+>> endobj
+572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 596.53 526.596 604.943]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 584.575 526.596 592.988]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.1) >>
+>> endobj
+574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 572.62 526.596 581.033]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.1) >>
+>> endobj
+575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 560.665 526.596 569.078]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 548.71 526.596 557.123]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.3) >>
+>> endobj
+577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.4) >>
+>> endobj
+578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 524.799 526.596 533.212]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.2) >>
+>> endobj
+579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 512.844 526.596 521.257]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.3) >>
+>> endobj
+580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 500.889 526.596 509.302]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.4) >>
+>> endobj
+581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 478.971 526.596 487.384]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 467.016 526.596 475.429]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.1) >>
+>> endobj
+583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 455.061 526.596 463.474]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.2) >>
+>> endobj
+584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 433.143 526.596 441.556]
+/Subtype /Link
+/A << /S /GoTo /D (section*.150) >>
+>> endobj
+585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 411.225 526.596 419.638]
+/Subtype /Link
+/A << /S /GoTo /D (section*.151) >>
+>> endobj
+589 0 obj <<
+/D [587 0 R /XYZ 86.4 726.045 null]
+>> endobj
+586 0 obj <<
+/Font << /F8 465 0 R /F36 464 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+592 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+591 0 obj <<
+/Type /Page
+/Contents 592 0 R
+/Resources 590 0 R
+/MediaBox [0 0 612 792]
+/Parent 456 0 R
+>> endobj
+593 0 obj <<
+/D [591 0 R /XYZ 86.4 726.045 null]
+>> endobj
+590 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+606 0 obj <<
+/Length 883       
+/Filter /FlateDecode
+>>
+stream
+x��W�n�@��+X�TO��{��S}��"7��
��
p��}/
�G at u�$��0p�2>��3ghp�����g/�q0A����QD
+�-�y|
?gU
͸�a���ydE_�\��|���X�T3�B3D+�3>�N$cĂ�u�1�&O�x5�QH`��U����up
V��.b:t�8�#f�ڕ�8�����<mnDx׼sI]���땻uy����Ȼ�2��]�~�u4k>��ʥ������I�$��t)�BP6�����Y�mf8

��+�f�<�!�V�
<̀2^��Uƫ�Ϯ7u��,�!� �����s�#C|�a/F)B�9ȓ�����/N�����T�.�6�P�"I"�a�u6�%N��>�D3I�^���,�U��M��&��'|�'Ŧ�!JY܎1@*���b���~t� �N@�c�!Ca��a�E��:ƺu����wD�˨��,���J"�P��$/'ZqŸNi}�N;Ae���
�b�z�m� �o\��Y�]׹
_�z��z�
+}dq�xq�8t
S�q���w� �:��v(񇋯�/�^%X3t�~"�@1��y���%�S�f5��M
�v��9>��[��;�l]ک�*�e�0��7��z��{���6���Y��U�\��z��\gx��y�ѡ)G�.tp��T�Px4��@7|�d��u\��\�}=���ޮ[8]٣l�9Ŏ��Ru�E���
��{���#j
=��/6y���M�t�^7��cR���I�g�`���C���v�o��9V̤zb-D�0�i >��x���q����2.�ǝ����\ԈM�����d�SE� �_
��	;MU�@Ҥ��� R�	<��v��FCa ��a�pc�E�Тy�e{����~�6��
+endstream
+endobj
+605 0 obj <<
+/Type /Page
+/Contents 606 0 R
+/Resources 604 0 R
+/MediaBox [0 0 612 792]
+/Parent 610 0 R
+/Annots [ 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R ]
+>> endobj
+594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 548.71 526.596 557.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.1) >>
+>> endobj
+595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.2) >>
+>> endobj
+596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 524.799 526.596 533.212]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.3) >>
+>> endobj
+597 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.1) >>
+>> endobj
+598 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 490.927 526.596 499.339]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+599 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 469.009 526.596 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.1) >>
+>> endobj
+600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 457.054 526.596 465.466]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 445.098 526.596 453.511]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.3) >>
+>> endobj
+602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 423.181 526.596 431.593]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.1) >>
+>> endobj
+603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 411.225 526.596 419.638]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.2) >>
+>> endobj
+607 0 obj <<
+/D [605 0 R /XYZ 86.4 726.045 null]
+>> endobj
+608 0 obj <<
+/D [605 0 R /XYZ 86.4 571.624 null]
+>> endobj
+6 0 obj <<
+/D [605 0 R /XYZ 86.4 571.624 null]
+>> endobj
+604 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+623 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+622 0 obj <<
+/Type /Page
+/Contents 623 0 R
+/Resources 621 0 R
+/MediaBox [0 0 612 792]
+/Parent 610 0 R
+>> endobj
+624 0 obj <<
+/D [622 0 R /XYZ 86.4 726.045 null]
+>> endobj
+621 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+633 0 obj <<
+/Length 594       
+/Filter /FlateDecode
+>>
+stream
+x�Օ�r�0��y
+-�U�/�@h�L���
+
a;�����
xz�(v�\��2P6>�ut���:F� \��6���..��A�$�9P2 0�L20��]tS6m�Pɣz
�eY�m�ğgo/.�P
"�d̠f
$C)T�N!���>��T�Ӗu��4,HY���������z|3
�f]�~ ��	G���9��HpJ��#�����o|���S�#��Ct��ќw��Nѯ1QQn�b�lZ�N['����fy(��
CtBB���k�G��n}s����.meR�����nW)ſP�l����A$�]�%H�ぷW��';��Vo�3w��v#���8�mh�0��TY���Ҵ��������*N<�@�
����h�f�hޙ�� u��^���7?!'D'JC�<����<O�^�\-k�,iV�6y�֋��
+I;
t�A
�(��V����Z�
+�y�QtB9*]A�{v
{�JI��lK��~�
���I_
Ҙ�(]�������/i]}B���à�7��sזT��e�iT�	*��h$�y��졼�7UQV��Ƈx���X_����J{������z2uY�NaH
8��
9W
�s��F?��P
+endstream
+endobj
+632 0 obj <<
+/Type /Page
+/Contents 633 0 R
+/Resources 631 0 R
+/MediaBox [0 0 612 792]
+/Parent 610 0 R
+/Annots [ 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R ]
+>> endobj
+625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 548.71 526.596 557.123]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.1) >>
+>> endobj
+626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.2) >>
+>> endobj
+627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 514.837 526.596 523.25]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.1) >>
+>> endobj
+628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.2) >>
+>> endobj
+629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 480.964 526.596 489.377]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.1) >>
+>> endobj
+630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 469.009 526.596 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.2) >>
+>> endobj
+634 0 obj <<
+/D [632 0 R /XYZ 86.4 726.045 null]
+>> endobj
+635 0 obj <<
+/D [632 0 R /XYZ 86.4 566.804 null]
+>> endobj
+10 0 obj <<
+/D [632 0 R /XYZ 86.4 566.804 null]
+>> endobj
+631 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+645 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+644 0 obj <<
+/Type /Page
+/Contents 645 0 R
+/Resources 643 0 R
+/MediaBox [0 0 612 792]
+/Parent 610 0 R
+>> endobj
+646 0 obj <<
+/D [644 0 R /XYZ 86.4 726.045 null]
+>> endobj
+643 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+660 0 obj <<
+/Length 3198      
+/Filter /FlateDecode
+>>
+stream
+xڕZK�6��S�H����=�yx�M�m����`�����D�/��II��\, 
 ��<�3p��_��W���p����a�ҁ�$:^�ܭ�ďV���(Q����7�̓���]o�4�������O�T�`��?
R�pU�C��mS��
��lj���U��N�4
�d�r���3L���T�gq�L֭7p�7mϭ�
�$^���k�y_�i-�3��:p�0Ue�

�8��H����ޖ���Y���湣��z��^��.{{��Ǧ��ښV8���x{�{�B��z�S��M���poo[S��j��N�<^m���8��C�܄a�]7�#�Ѷ
��o8.7X�U�7��O��`�J�_<���+Q��<�2��\�h����{p�Y���x-�#�^�����pY�_/���
+�@L��ɥ�������ZXE�Q�O����n���`ٸ��*�J��I~��8�c�����Eܨ#�����K#�Gaz|�_��)C��p+}�X�~x��Mu��CP�-+����tk(xh���.��Mv��de�sokۚ�;��ݯ7�S�Y
�F���]#
8-7ʺD��K��۾mn+����A
\��3�����C�۝�E&��r2��Lk��'�lM�n&�h_(�4����*�:�
,&�5X�e���,S^1w=�|�m�(v��,��h��9�Ǭt�=�W��\�m�n3R��/P���f�H�B��0�H
������[t���b5�<o��?/���g?��S���IZb�܏�f~o��%Ȭ�时�{[˸�^|����
���xo�Kk@;[n�fI �(W�0߯u��'��[7�(P���QiJN7��	ޮ���
(��*��]���ZK%��a���������N�����F9����}�hg��P��ܯ���lm�{Ͽ�����Z�ƀz/���㖬��t�����VS

+�
��h��M���lm��P��l�А�AkC"���p��Ůj�ոed��C� �#Ӡ0!
�N���X��i����,A0��4�����
TD�4T�L?q��A��(��Q��_��7�nk���g�Q�窗&���v��I�g;���H/{��0�W���))t�Z���
�S3�B
���a�g�Jj�@�����i�L�B�H
�ߴ��F����M8
X��3Q.�3D5�5�nɄ���({���U:b�ö�t�}�<*$���Ntb�
᾵�e3t<���
:�$>�t=y⽹�Fǔ�ln0�������ҡL�=HGp+�,h4�M{`����T3d	=T��}'���p��<�h�_ C���1Ae��_�E	rA�Ƹe�`'L�C�9�,i�S|�! ��ˑ-r8��BT�-���h���MG37=Ca�%�ҩ����_f��^rqj!�`eO�7>��������c��#e�i���%未Y�a!k��\D	�_����57Q�/� J�� �
�
P i�
L%&#ψE��W
��R��J3?�N����k� ��@����3���p�5��:'�#8�$�%^�ϳ-�F!�"̾y����ӧ���5 ���餈�7�i�
+_�
�+7��p����f)�b����t�S�MQ�q�X'p�9u���^��&��<�.��Z
�F�	-8˲�����ju#���-�r��@i�����r�˵s����<1�s3I�����[����H86?�=&�ь�+9
5H��!-j T=��~U%��3'5�>Apr�ζ�n�C�cI�4�����%
A�N���
��,!j�Ty2$���#�=_�D��eǿ�����h]�ش �9��`��B����3 at 3A���$
5�i�U��K��$�䎤�h��i��!N��aI�f
�+�
Xf
4C
���82�����X����w*��&��
�
xv�\�Jb)�%��	��d�1 :*�A
R��$��@	��&f� \������9l���񧐀K�\`|��v12`��Wo����ʶ�Y��%���'8օ)l�.�@�x���Aw~W`Z<8�*h���N�#;U1ZtJt#L?Z���E3���
+
��ΞB��=q)�[y���H�l�q�0�;�ߴ��
�,
�"ǐ>�?ܙ���zR�Js�ϣ�.�s��>C � �B~?�#�Pl@#y��r9�M��/~f9�r�u:Ͼ�c���Ӕr&���I�J6�x��n�ɲt"�&�*5��no
+��|K%�
���N)�1��j��
(�CY�S~F62�o����7�C����νr<�\�
+%
��&���
p�+z���zq�rJ��e�]��I�ktv4

�5��F%jWĆ؍�9$
Fr� ��,1�7
� ��Q;$z�,�~8{�x���2�V����zQ0Û�uU<�n�)ṿ*��$A�y⃢�\x��+Y~��//d%~��
@����e)��C�g��!
NG�S8����h�(z1���jҘ}#9[|[٣�c��" ��k�k�t�q���ʥs^B���P�C��E�0�W��$�0�����>a5��D ��0nSHb�\�%S.g59$I��യ�|���j��מ
;!&[	G6�jܓZx,
���T=�
�J��_���
���Ok:��3W\�rᄉT���gLj J;>c� s�9`�{|���h�#�

��(E�@H�c�Fj�HK�  ����2�
��)�=�Ik�g���
+\^�B*��Y�W �\3�w�-l���nfT�N�I����5e�
+C�A�΀&�49{��n�[ŠI�I�E_\V����0ɟx'
Rh���G�G=���BNӉ	1�~���J��
f�/<�ȓ"?Q�3<�m
���R��|r%g����E��ʾ�����Ν)��>��
�s��H�b��y�8
��:�G�*^f�YS�*O��#����' ��0J4�@�%�4�9���m��c�7��ފ���D-W"��#�� ܾ+�&$;-�2�{���M����k ���3���ב���
��5�� d�T�TKo�9�kt��#��A�HG�)�_��=�l���8oLh
+�������O
Ԡ��ޑc��
���+=����y��n��#bV#˜.�!
+I"��?�
�VРum�Uh���C���o�Lr�ۺ�R��k�N'ca�:o�������b��ޭ��iC�1�u1=2
Ǜ��'�J|
���?���w7��ȟ�
+endstream
+endobj
+659 0 obj <<
+/Type /Page
+/Contents 660 0 R
+/Resources 658 0 R
+/MediaBox [0 0 612 792]
+/Parent 610 0 R
+/Annots [ 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R ]
+>> endobj
+647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [162.717 498.902 174.672 507.315]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HBGLSSW:05) >>
+>> endobj
+648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [161.539 450.087 168.513 458.5]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BHP:94) >>
+>> endobj
+649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [172.583 450.087 179.557 458.5]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BHP:98) >>
+>> endobj
+650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [495.201 390.311 507.156 398.724]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ug) >>
+>> endobj
+651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [511.874 390.311 523.829 398.724]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CoHi:96) >>
+>> endobj
+652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [140.419 378.356 147.393 386.769]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ByHi:98) >>
+>> endobj
+653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [151.489 378.356 158.463 386.769]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ByHi:99) >>
+>> endobj
+654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [364.49 378.356 376.446 386.769]
+/Subtype /Link
+/A << /S /GoTo /D (cite.kinsol_ug) >>
+>> endobj
+655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [492.303 365.406 504.259 373.819]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SaSc:86) >>
+>> endobj
+656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [280.502 353.451 292.457 361.864]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Van:92) >>
+>> endobj
+657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [219.405 341.496 231.36 349.909]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Fre:93) >>
+>> endobj
+661 0 obj <<
+/D [659 0 R /XYZ 86.4 726.045 null]
+>> endobj
+14 0 obj <<
+/D [659 0 R /XYZ 86.4 701.138 null]
+>> endobj
+18 0 obj <<
+/D [659 0 R /XYZ 86.4 139.943 null]
+>> endobj
+663 0 obj <<
+/D [659 0 R /XYZ 86.4 87.674 null]
+>> endobj
+658 0 obj <<
+/Font << /F38 509 0 R /F16 453 0 R /F8 465 0 R /F49 636 0 R /F6 662 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+677 0 obj <<
+/Length 4242      
+/Filter /FlateDecode
+>>
+stream
+xڭ�r�����-T"��`{U9Ȳ�8�V�$='UI	J�A�@�J����
����"Ά���{�-����W�/^���"UiD���"��Y�A�"�/n׋�.�����q��Hy:��h�]u��e��'g�ޯ���p����|��:o���B��h�ھ��߽�f���N��#��.�NU �rq����d ���J��R_�qĠ\f�� Y>��/��Cd�H�oa��䫮nx�p[�Xv�p����2?93I��j���;E�*���^��xp��� ����
*���~uH$�e”��q�-:i���щ�3:L�P�i<&Ч�y��P���(Pq��;e�����V�w��t��|��I�t<K�3��J�zq��*
�jk��U����oT
+�}�����W�*��z���J�Չ���;�����#^^�r'[��57���\>��g�}-���~��t��
��7Æˢ��<k�
i쎙�s�H�u���LI@�"�4	ɢ*��pz��j]:���վ�p@���py^���]�49��i��獐v��s
'�5���2��$� XN*�.o6�J>s���p����'�(�n� d�4^J��d���/
"b��
�|9	�e����.�mvr8�_n�
[aK6Y�{�D�_e�L9��Q!x�/b�%����]�5����˺L�y�#x}�3xU����*�+�G���Ě�
�
l4�]�@� �"|%br(z�΃(���y�?:^�>-��W�ɥ�*�[���PB`AM ���Y�B��*��
o@�8lx
�d�e|b��B��ؽ,ǣ����[�1�/����y��Y�~Ѯ���|+���IvT1�Bc��|[7O�.��3�z

����?t
+�؊�|24�����* "~3L��8B{Ls��pK6F0[
+���n֐F�E)�k��8[E�f�IdϿ�K��MSo�h�̂�A���Q���{�`�7�I����U�����{˟���FԾp߁�1���W���[`�;������!�Vt0u�SO<���b�
s
�fvb�'D�7�L�亖Ʈ�FnՉ�}:I�UoG���i�yl�O�|��j>vj>[Ώ':�=���eMk�,���������N��!F�%0u�ㄞV!x
a���o�8�J�t��
uY�E*�B�)�B���LFx����lN���N�N#�aS
�^�\���������}+�$�q������k�ݕ��5���fȏ��Z�G��#0?���pxc}�pS72b
�;�F�`����
��	��ȼ��u�� �ء�S�n#�ld�M���u!`�|
+X���Ko
+
��H+3e{�*�b3lQJv�Κ
�4����;�ջN��3�\�$`���
g�lDYɂ�	�p[h��
P8�,�!�}���Dy�d�{NT"X�ҝ�+�������&��t�G�IKD��D�`Ns�`��vd��_���'��6#I�[Qfw�l��01�#4�Qx�,[��(/N�e�3���
+76��
�Ŧ�g"��lt(�
�Dr�
��*ksY�ɺ�3L�ּ��B�&���
/`Xb2>�U/rf;��dyCF�����&
�ε�L��Qw���)d?
���H�|��B�S����v�Q���R�!U�gsdk+e���/ǚolOd��Lէ���&[��m�`��W/Q)@9�k���ư=r���&B���A�"�l���u(�E�	oa{�/���tyq��k�
�c����g ���0�(�kgR�
8�X�ŞBî)���߼л��p��`ȗ����}�L�̕ �Eb&���yK*?pi6op���C�'��y,H\�y��#U^0�y
�d�HM�� k
�Ň!���(Ri����$f
+c�`l��UsA
��P�������6X����X�z���	�El
�����y��?�W�� #(߂�c�Jq�fr�ݿ���C>;�
�|L@��ͤ�@oh�� "8�
@v�8_3�#�ODm�$��"�Y������ϠY:�(X#{ݝ�;����
w
��i�.w
�4�hiG[e^�UR��D`�M�y��
�
0V��[kg�4�T�L �y������}z��}��V�_es�� ��<�Xx

�b�����n���p�{����
+5�ՙ���n[�.:�0/VQr
�B�&k�V�GPD�U���)��;���9�(w�
��7w�J87�*1�0�սM�Y� ���n�x���^/G�߾��~�~n�\��0�o��L�afc�<�h��A���~ﳦ����m�b(k��,#=�IB`ָ'mہ��e�L����l�yp ]�
��с	\K�
x�<�|Fu�p�z*Z�Qq�
��+��Y�W!�Dh�ˌZ�X�ħm[�
C�����K�yV�6
��Zq
ɨ?��{ 8��
e���A&RNlg�C��3:����za���`i�Q���_~dp�#e�
���/�?�.�>�k�h��ۛ��Y��6s��h�P���T�����sJ��M>֏y��p `��¦�g='���`����9<3R�tbr
-����L
ez��׫YӾ�I��7���q���,}�6�`��l���:��yذ�嶱�:"��?�,�c��!�}܂�����DY�#
�X�C�vG�.�h֛n���2��T\ۼ�	����&%S`�j�ox�2�{'.�w%]O�3X��T���k��5b��ַ�T�͐��M��F�퉉m�,��o޽F7�{}}�]m���pw�d9��E��\�C�wy�nN���cpM��V�߳Ay�#���B6��ݛ:j9��;��OܱM�o8��0瞓z���a
+�]�|Οf�-pD����b��(�����}�*M�qO^�w3b
��+��a
M_� � +L\�€�n�+Nir�c�i�S����B#�<��Zɇ���)˹����B0���j����y�
+�I���d{�&G>W�-�׃�HB
-��A�vO�̯�U�5.7x�� ��K�hXa�_I�R�ne��C�ǐ
���徕u�
'3���M(�-6g
Fu#ɾ�5�
+�)E5g�
+��*en�8t�9�
١����������&3[�ʋ�B��%݇'d����N�h�q%-�H=��?���u$�81�
+�9*�n�UD�5���3w��D��1��I�mr�ZK~4�?��fb/��(�P�9#���bk
�}�4��&;F?�
e��Q��N����X�6��5��X\�Z���U�8��Wi��
PB@��<�"�C�,�w(I�#��B[�g��㔆���.�v��mPr�\q���+�ir�y���큶����o�n�6H�q�Wu7+'���ȹR6�{`
?~=�X���� 0ظU B�Yя�W �>기UW������>��>]�?";�����ā{������<}󝁺�9{6r�����jC�pͤHaS��H=����
D9+�YX�>g|�;N�ҡ���ˊ�-+&RVt��"H����$GY
+�V ��7�ҧՅ��h��jG�f�zZ7��̾����
R͑��Ň��	Qa�ѐ��djɔ�"�ZPc��3lk���a����P
�?^��Q5V�Hj"�l��J�	ֶ��*N�>����D��#WA�������ز6�	L�ɻ��

*���[�lR��=P��aU��:��٨�$nP1\l� 	_y��g�R)7aԧ�9����B
+�xW����0�^�I����{�3Y䡇�k\�n>5���gk�vSf�3�/T��|={�a�r�Τ{04NQ*�dz��y�س/��&��O�;�+Aa���ެ�FO%�Q&�;v
u��y�	<���m��U���DW��ҏ7d��2[�YfK���oZ�(*W��᱇W1��0
K�PRy͑�Q*�ZA{Ul�H����7/ߟ�m>�ۼ�y��
?�I�Ӓ-Y����w0��T:���x��F�ju6[k
:5Ξ���U����΁��f��`�{���>Aiݕ�DK
�D��%Z��Ųh�ݐ�$�u0�

��+Ψ��`���q,�O���[�m�:�2}PqL��m8��5Ib���C��]��+"��T��7��E:��9燖C��7�
����w���7MM/lL@�*v�
+g���p�(��D� ҃P�<�%pI�`�[��G3Ɩ-
�|%?�|����?���e�Y@��i�k��}k�qu˿+�%����X�1�=7K��A����i	�2���Ч�Z%����������:m��G�8��[��9
u��ex屒��
~� ���
+endstream
+endobj
+676 0 obj <<
+/Type /Page
+/Contents 677 0 R
+/Resources 675 0 R
+/MediaBox [0 0 612 792]
+/Parent 610 0 R
+>> endobj
+678 0 obj <<
+/D [676 0 R /XYZ 86.4 726.045 null]
+>> endobj
+679 0 obj <<
+/D [676 0 R /XYZ 86.4 484.148 null]
+>> endobj
+680 0 obj <<
+/D [676 0 R /XYZ 86.4 146.949 null]
+>> endobj
+675 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+689 0 obj <<
+/Length 3990      
+/Filter /FlateDecode
+>>
+stream
+xڭZI�����W�*�K��
�$����D.�ek�'��l��@���}��� HPrE���/o��kD��"Z�}���ً7*Y�a��dq�]dI����D���f�[ Bq�T�
+����tX���m�|l�Cٜ:�=�(��+o�"hjh�q�&������g����L���B���0��b}x����b=?,�P����
Z塄R��{�˳h|����I�M>��T����q�o�x���H�
|�����_}|�ぱ�Pn�io�Z%As�oD k�m8��S���
޿�RIŇ�8	�*�Y����<���{�Uem
+� ��z�.c7,k����k�M�zϡ��f{�^���X=t,K!�<�t�MT.&��\sh�'�+;�߶�l���aE�uӶ�]�5����Dp��N�#]�^�$����������Wq(3Ox�JZ�n�ԏ����:mH.�l܈��w4}_�;���D�f�%G�k�

;
~���{.1)�p(�ږ,i�|�΂Ƴ�Nj�&{vBy��a9P��$ɂ��m*S|��#N-:��'��+�x=�E7��Wl�@�4�Ɛ<Tr�
w��q%-�/���-�$'�V�f�mô����A�ę�T����|X������N�H��/�=�3q����R�њ�����|��ތ���U.�fa.��źG�˂?
�
K�K��S�A%�D�X�m��{�#X�$��gW5�`�A�#�i!�x
��ww�D
F��Gk�N�
�������6�z3Յ�u��O]o܍�*ņ�H"�ۗ۞���qy�� �⟩��=�PH��Q�譋+. ��^��9��(�“���ݞ�Y9�͢�myl��gQU�/���W�C:�P�!�rS�R��J}k��`
mu
�&c��
�w�����$��L)v����
�(	%���H��9b	��{G|�E~Z�BZ�-�{=�%�
еo���a���o_���û�g�͢P$ٷ�7S����?ޢT����`
+&��� l��X���Xϑ^?�J�0�s|��U
+�J��_n�#&"�
 ^'Ӎ߿{�7/�O3%�ƺƍ!_�
.݉�G�U2J�x�F3�{����9����ݠmRzX=duWقUD�i�m*&���

����A�I]
t�y�
+;��zc��qP�G���Ԛ�����k�f���a�6���m
����
�Q
+�%/&��
y`��GJ���� %V��@^e+X�n���_V�ݞ 
�GƬ'8#�c���
+������ԝ�"��D�~5�Eߖk��*U����r��f
]���cd����[
��Cմ7��֬	�������,hױ�&r_��
�Z�v,V��.���k@v�
�ّ p�i�24J�h��p! �hto ZIj���̣��벜b �".�h�P*�^��]0�
�
�oO-����@�w��NG���m}��;�azZe�
��$X٢hJ9MX�M�vW����mݭπ*�?�?�
yQ��X8���Ǡ�#��PV�L�ń��
�¤=��Ex���!��� 5�j��ϝݺ��r�uc�3!ڔH6q�W�@��
��_[D�k��>��a
أ���nGF$}8��";��A����(I�Hp8��`���������&3���¯|d.�$����"71�
~�3�Nf���h�<
+�? �S���Na��|��$ςz^n�	�՝�[6E_x��	B���]�[ 
�X�� �<�9�0���Se�.�&
�ߙR	R,Iȟ��*i=W@
���8kK
�-x���A�*n�i
*G-�����h6��U�l���q�)��M�he�݊vka�
+�XO��Hm�lnJؿ\�zoGKr
J{m��_���� �V��2���xgӈ�t9/
�����l#���&�*�H�,7 |l&+�Xu��
�nc�q�NE�z�A�Y��^^Q��?�9�k�~��>m��ҹ��1
+��0�}t��#C�vg1ㇷ��/�C���;hB�d�f.3<��[R��K($V)�t�æʰ�T���,�#�:
9@�r�W��
n��`Ѻ7�
�`Sgx�4��/�"c��.e#E
v3���S2B7Z��e���V��6xt4�2r�1�dU�(x���@ױ��܇"@� ܅s�"��K����������yA���_3�K½�`�/�(	n7l6Ȕ�)
�w�ZP�2%��LJ#�7T����cyu*�
wwO]oWPh`��d�A�f�<c���(ܞC"R�.��� U7�*v#��
�;�lЏλiK{ɹ�����$�p�P!��AX,q
g.Ӫ:2
�]:�Mhp�,a:���p�q���	I=NHj��t��(
Ԕ�
]��P��zm����
2
��p$������C�nVeQ���xl�	��Q`�UtI���l+%�3-�@b��v
n�4�3
0�:����h
E���F��Se��
-۽XJp��
+�n��:�����#Q�H��F�݌��%��E������L�n�{�)�)Y��"ԥ��
���|�M���V�"
�a���_
|T�M}����păG^�1
:&&H��8�%J%)N��/Q ��Q
+4w����'V���9w����0�
��~6���4�圿��9�3UE|� e�����!�n
"J���A3"
+� 	�Ϭ��K<=E_B��O� }�{ρ��fOǹղ0
�<
���94
(�Z�'��R*��
��^3��8q�>�yy��8��r�1&< {X��Pr~��[��3kQ�O����4 S}�X�
�'�j T��
+@��塜ۑ�8�,���F at M�pY5��H�ѣU:�t(� Ik���UI4�񱎔���(
���Zg)T8z*&S�R��wf��ʦ�̩b��:���J��4_c.^M�gϼހR$Z|�
+}��Ⱦ����Ϯ@��=��b6�l�*l�
+��dž��
�r2�R��M��k$oX@,�
q;���Ѯym=�hE
Fy:�6�3�d0�kA=����X��|�A'+jfi�sab�z�~ �צ����N�3&n��e
�jH҂��M�Q�p%�NC��%v�0�*��7]S�,�����n����ʯP�޾����qAR�,�aU��l�e���V��Y"�l
+�;�������b
1��{@�2�Y���Pg��PY�w�62�X-m��VD
&++�Ȑu����JXa�#�)�7��/a�/�@�ʥ�g�C������

*U���l��:����3����%��K���Y~i[nn�t	��k��1����3+rV>{s#s|�$������Ҽ�K^�J��f��B
_"�'_�}�N)���[����-lG3�H�
f�������Ǟ�dc�J|5�tv�%أ
@��X6t��z���S�XNِ���_��b��㡝�w�$�i��b�\����2~�����K!ɣ��!�ő
v�
���	l�����GH�&����
��Ƽ,�߿��bŁ��
�i0I0�
+q �TN��i�
��Q���qf��ߣ���[
n:�|s�递�8�Sѕ�����>�Cωk��+�� <3�8	�$��na�M
�tf�=̅�L`n����
A#}�<�hR My<h�K�\(|Q{p���
2���K��-O�K}y 5����<꘾G`z���4��L]2��M_Ȱ�˂�t4&����y�ᚳ>��۔sЉ��e������cU��.״��v˹'o>:i6[,���9���t��a��Y��G��}�i8Kg���v��VFb�qc�bv�5+��:��0ſSw\�'	��D*�s���,wj�2���P�}2�q��
�Q��s5k�9���'C�O	�Z��ï=�S��p��ז����N�[
FҰ�D��=�
@�ڌ�Z���������k�:�|e'�+���۴�ǹ/i�#'O��s�������k
��}n����C�+}������>�R
P��Әͦ�

�ܱ띵R<��
+啻����,���cÉ}r�
�<h�
+endstream
+endobj
+688 0 obj <<
+/Type /Page
+/Contents 689 0 R
+/Resources 687 0 R
+/MediaBox [0 0 612 792]
+/Parent 696 0 R
+/Annots [ 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R ]
+>> endobj
+681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 404.892 519.955 416.847]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.831 283.917 112.303 295.872]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.431 283.917 167.651 295.872]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.2) >>
+>> endobj
+684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.743 172.05 416.717 184.005]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.267 135.473 347.24 147.428]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+690 0 obj <<
+/D [688 0 R /XYZ 86.4 726.045 null]
+>> endobj
+692 0 obj <<
+/D [688 0 R /XYZ 86.4 566.453 null]
+>> endobj
+693 0 obj <<
+/D [688 0 R /XYZ 86.4 418.721 null]
+>> endobj
+695 0 obj <<
+/D [688 0 R /XYZ 86.4 185.879 null]
+>> endobj
+687 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F11 691 0 R /F38 509 0 R /F49 636 0 R /F16 453 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+713 0 obj <<
+/Length 3003      
+/Filter /FlateDecode
+>>
+stream
+xڥZKsܸ��W̑�Za�	27g�(o%��J[{p� �pFL8�L���ʏO? �3�d�\�!�����I���&�|����ŏ�u�)E��|s���0�J�k���m>%�����7��"������V��w�W��CݵHx������t#�n�(L��
/>��nv0��&�,6Dw�]
+O����钻b��L���l�R
+isf���	�aˤ��������py���󾾭�z���o0S�I�g�m��+�Y�
�0R�a1���Xy��Ԯi��r��g:Xo�K��2��w���+��JU���Ke��=T�8��cv��=��%��JJQf��c[
a_��侯����*���R\��{���5"/L�a�s�5&�&U�ܖ¨�t���Ť�Ǻ*�紤���]�[�J���2r��vW��?fM+,0�j�T��R��@bR\^�<M~�C��XG� � plW���
�R�~ 88B?�ݣI����>�@er���ê͍Ȁ�m�4�r�����+B�&]?``�E��/�Y�u7�u~d����]_󆊁

r|p���T��Y=!��6�b�%�IA�6����e�P3p��J�ǎ���\�D���e�S#�S���g3� 
_	
����ˇ�ͧ+�u�&L����H�
+YN�)Ҹ�Od�d�ܓ�(�E����V�"��aWQZ���
X
�~�a��y~X� xݏ=�!�c+n�
-�2���y��-yZ?��
]��W�@�ŗ�
��⺽����ey����vG���[�]��>�d�L
�m4?wm,�o��|4��h��x��qϾ�Ѱ�ه�g�ut��P�=����pG
��t�����'w
N�*I����L6�TCV�Y������q � ��ߡ���6^��^��&�m �D��c�鈂#�^���������<�J�y������#�kE];7�F��XL��
fj�;oB��la�v��
?�o~ �u
�Z$Z�^g��9�����^��
�b $F�({ d��
����1ѿ�-bC�9��G��6�rK1�f�� 

+} �
�h��y
��#�U
��1�� m<�V�����#:�=��W�S6�0"�v����*Gx�\��?�p�O[Tl�k����
�䢋u5-�:D��Sh��^�<���R��t��/�%�x�:H�H��
�2���
+Y�fg�,RE�� I>�5��6H�k�o��sk2��W�QB
$=/���b�T L�y�or��EUO�����NOC\�㗐5H������ ���g�� �|}Ԕ[,w��6bR����*��
����
�Z��-<��\�i>k�
��J~��]l�(a�SŽ#US�
�[�zƉ#!���G
��#]t%��3H��""�`�3�p��:�n;Li��䎋mR���~���UՋ3�)�D��L2�A�@1Q�e�H��
+j8�H��ɓ�}j&���f��]�S���c
+dJ(4�����C5cg
w�
+!�h09�ߒZ
X� @ԓE=Q�J���*ؽ<�W���YDyHb<�b��-�ŚlE.R"Ws1���u�"�
��n�
+�L��ĸ�x���F�Q�
�q� �d�[�����B�E�Jc껦��LN��@%���4�ZN� oz�
������{�8�D�𶐪R�IU)p��XH�ÓR�gR��I�37���/�=�T�e5�}�8xU�fѨL
��)����zaO�T��Έ��$��u�7TAaҘB�X߼
{
@O���v�+.�F��a��!�\��sB�"
xh���Ӡ��"�Y!��D��Z������w{�?X�ک���q�&f��$e.laN
!DɮYT�z�>!B�է��Op2fy�V"�'��T�ym�����g%)�Q&'-���^~�]�W����v��B
+r%��T�J�:5�ⴚ�<FE�z
+��*Ϫ=
�M�Ф��#.�{��p�y���ݶ��]�W�b�
�bK
|ߌB�k��
�[�v��sf�o
ʀ�FS��bO���zB��"�\534Á�����TP`�����ё�/����
���՜��p��0�I�5��KQZ>L.�S_��
ں�)�P	��S-
/�-�
5�.n�ؼ�����;Ԛ��0�
+k�)�?���f�u�0��s
���a�"Հ)��b}�L�̘TRع��x�������m<x�*��jf
R�
1:qX����`���H�Mz,
���:
��7�1��~����_�0Fh�y��rH��
+$ᰙʒ_ ]�L��P��W���a��z��!�R������
��)iX�|:م��da�-�c
cL�
+d�9q��^?x���ԓ�gk�������F�
�O�+�H�;kt�%��,�\�
�*���]��8 %qCG���>>�y�p�zK
�8Z��*t{SσM;���1�!-���Eɷ�'��w��
ɷ��Y�;�b.3K��p
�A֡喧sN˯*��
=�Q��K� d�{��{�yG�8(]������k#Q�鹘y����:���_cN@����h�Df_K�t6dd�A���[�}�+p
��_ŕ^�J<goW��d?�����8����!��8-u���Ն���cQ��P_��0K�����b����D&�u�JyڃX�oI�牧���M�+RD�M����C9�H3�2:+E���!|�؛��]��E�?���o��&��M��Μ2"7�����L�>)x��'Dٻ,�W�Y�����\B� �<��7ʔ?�/�
+
������F�ap%d��j�T�P��+�=鹳?Wv.
+9�{?�hYAĝ�rXCl]H��J�%�B�����b�Jp���
+��'_���.��;
P�c9��V��_�|�4!#�!
g!
�b{
X���G��i���1[IKp�a��c���?
�?�ɪ�c�o'���&7t��o<t�态�
;�s|
}�]M�e������S8e	+��]É���*��߉z׮���"	h��
H��g���Bh�L�}ws�]�& 
+endstream
+endobj
+712 0 obj <<
+/Type /Page
+/Contents 713 0 R
+/Resources 711 0 R
+/MediaBox [0 0 612 792]
+/Parent 696 0 R
+/Annots [ 686 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R ]
+>> endobj
+686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.066 652.377 140.53 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.501 330.604 244.972 341.452]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.7) >>
+>> endobj
+698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.1 330.604 292.571 341.452]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.18 176.919 171.154 187.767]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.486 152.455 204.208 164.41]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.31 152.455 303.032 164.41]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.876 130.142 484.599 142.097]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [290.009 118.187 304.731 130.142]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.644 96.428 157.618 107.276]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.595 62.16 168.569 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+714 0 obj <<
+/D [712 0 R /XYZ 86.4 726.045 null]
+>> endobj
+715 0 obj <<
+/D [712 0 R /XYZ 86.4 614.982 null]
+>> endobj
+716 0 obj <<
+/D [712 0 R /XYZ 86.4 528.561 null]
+>> endobj
+717 0 obj <<
+/D [712 0 R /XYZ 86.4 466.051 null]
+>> endobj
+718 0 obj <<
+/D [712 0 R /XYZ 86.4 415.496 null]
+>> endobj
+22 0 obj <<
+/D [712 0 R /XYZ 86.4 241.092 null]
+>> endobj
+711 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F38 509 0 R /F16 453 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+726 0 obj <<
+/Length 3153      
+/Filter /FlateDecode
+>>
+stream
+xڵYKw۶��WhI���7{W���Q�rnm4EKl(R�#��}���h'=�=Z���7߀�l=�goO^ݞ�|��XŁ�n�gQ��Y��*p��v5���ʝ���k-?}��:_,��Y7Y�%M�M�<�J�8�o{�?����׷'_N4�cϴ��W�����oس��<��G�귝yn�
(���/'��i���@_m�~�7
b�t�ʿ�:$̸�o��*���^l�]���
U�ע��ۓ�og�[�h6���οΝ�ʚ9�I�$����%6C����y� Rim7�XgeV�).�
���jAhT-�fi[��q�!/Pn�n�
+�!�V]��J�&��/�l�r=T 
+_�o%u^u
�=;sGEp�gZ�����vGWeV��Zܸ�ᆎU"�h�Qӕ�<)�	͵
+���)L��2���(����U�&ya�.��r��vl�?b>G��˷�"���6�ʆ���|�����
+��fbY���BG����b��Ox(
��
K4�I�ewB3���ۢ��j���q��ߞp�]����(}����>euD�U޴u~�͵ՂCik���l[Տ\�%uRY�#���Zw�'+�@�
�������w{��__
���k����r�ļd+�)[� %Z���M�cW(p�s�,Y�
,d{�>���DT$�A�
+o%@
���Cx��'�� �~��v�N픵�7z��@{Pq� ���D�9
�i�=�u�0�
��s�b� f�t:Ӏh &g�)>��?�8~h������Iᆱ��(#��B�NB�_��ʦ_uп��,���T�_��ќ�W98���9��K	�u��&% ɂM޼��aO��LwA@��R�n<��<*l��ߡ�2�����ҡ�	�q��2
M�'�9,�) IhD �0[E �HB
+H��c��t����7���=��ݿo�7y	�����#2�g;B at lm%;���zJ���X�?w
�
+���a���ԥ&XC�=zj�E
��H���I�DJ��5���q�ݏ��јzH\Pc�y)p������<�V�n�V$�ʄZya�CG��z��&���{{�:
++A+$]��
��X��j
��w��ٰ����y#�u
ʠ�
Ey��Z�p1 �L��
\��ky���j;eC�6���F��z���J�M8�߱(t5eQ%��]G
Y�>�"
yR����0�"�z��X����b�������E�l��~���(ws�@TVL1�fb
�J�,���+h��K�"� ��u��'٦�bH�F��x]'[0i�Ӏ
+
��@� 3��km�1$�`!p�\o|����:\]�_�y{|�HE�j�T.0���[���J�mW$e��B0�B<��<
���Hޣ4>ԹD8sp�ЎƉը7L�!x�������"[��[�)

y@���6�߶��}F&��ɔ��zo�x��ߧ���W,۬���
��ғ�x/�؜�
�7w �.I�>���J�F�J�W��&�3�~t�
+z�8X�>
�=�z�-sC���
Xq�	<�@��wq��|�S�.���Al¦qD�>̾���4o�6��&1�
²��ңm
+<�r�\�
 (ۤ�Lw^���[jI��@*Z���'.�[��T�n� �9��
�]�2OB�A��#ͼ0T>�n�=�rb���?	M���:�������3��l0�[�o�0�����u��e��%֘qA�eJtx\e;}��+�9�C.�L5b�p*	9"N�h��g��T

����g9hj�	v�4�
}i�*���>-�n���:St1^?
�*r�n�ܴL<K����'�2G����C�������U�t��/!�[T���z#�\�1�T��
�%�v��d��%�b�%�v�9�In7r��sy�>�}���ҹ�V,�
=�Ʀ��4;��R|
))�������kI��]�m�x4
}��=�1
&U|���L��Q�(�wepL����م��tHaC��|�aP�	��VR�H�VI���*o�"ɷ�[~���E�ܡ�)����
}qWs���e'6	�%O_rI�$Cv��dL��9F�
�z��
+=a��!/��������5�
������/�|u�����q�Y�����5V�R
:�G�W\�%u;h)�:�szc�j�C4�9��)|gj�N�Q��d�s�F�
V�#�H�'�Q�w�� $��ⓔ���]ՋOǟ
t
*�aF̵��8@������bR�8ƺ��=�|rW���]�Nd[�'��c��	l˼,�����{Z�a�Wg�o��
n%�i{��k�ZJ$���˂c�-6b���y���

I�C���Vہ�q��1	tbϼ
+��`�ل�\`�&�
+aɶ��#(
0
(��f�v?iJ2x�P��O���t8$�ؔ}K�%�
a��Y�T۬*�)`��r��q4�ql��	�Q�m;��H�4�����bovzla��Ų\�l�;
֟YڲϙF�APD��M<Ql-�^/XT�����"
6��� �3K����A�
.�z�x������r,r.B�L��#�� ��&�;�
+����JK��(��Q
+-����x	~
�+�)-'½�>�f;���ͻ���3��oN�e7
+7�7�]L�X�����$8�-�B���$l�
}�u�D�#E2�c�߳̄B���%�w �sl�P�aT 0O1���4�
�͵�s}����Ү�%���;��к�ž�R�9	$��<d۴ht�hh��{\�@2�:i�K�/����9
~ԕ���su���߼\Av�l�f��u�n��&{,+ i��}H�2��CQx�ZJ˯�o_� ��J�Y�K5���j���q�\MQjL�S��r��|p�
�z--���sc>��%��ɕ!��	�[=�H�4>]�,�.>^�>Ӿ3`�+���P#h!o����P{b���:��W�8���
7tl�h�K.dd�Q�G������8
@P�z�%ZN��9p��0>��� �8�$ �[��|צP��c�C	"
�o��¡��J>Pqu_Pl _GãN�*�o@ȇ<cYu�H]N�����Ȯ�RJ�Si0�1	����= ��Q
E
)s��,I�^4A�ݠ�1�
`b�y�a��G�
���I
+endstream
+endobj
+725 0 obj <<
+/Type /Page
+/Contents 726 0 R
+/Resources 724 0 R
+/MediaBox [0 0 612 792]
+/Parent 696 0 R
+/Annots [ 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 719 0 R 720 0 R 721 0 R 722 0 R ]
+>> endobj
+723 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./warning.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 730 0 R
+/BBox [0 0 26 26]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 731 0 R
+>>/Font << /R8 732 0 R>>
+>>
+/Length 733 0 R
+/Filter /FlateDecode
+>>
+stream
+x��O1�0
��f')�W$�L�*�5Ca��$m�Ď<�u�;�&2,d��e
�@�
B�y���jE)�z�ܗ!6p�T�c�������P�>6��|����︭���	��+t�N�4��A���ciZ���P���P���f�
8'\�| ��8P
+endstream
+endobj
+730 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20160810091351-07'00')
+/ModDate (D:20160810091351-07'00')
+/Title (warning.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+731 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+732 0 obj
+<<
+/BaseFont /SOTQNP#2BTimes-Bold
+/FontDescriptor 734 0 R
+/Type /Font
+/FirstChar 33
+/LastChar 33
+/Widths [ 333]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+733 0 obj
+152
+endobj
+734 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SOTQNP#2BTimes-Bold
+/FontBBox [ 0 -13 251 691]
+/Flags 65568
+/Ascent 691
+/CapHeight 691
+/Descent -13
+/ItalicAngle 0
+/StemV 37
+/MissingWidth 500
+/CharSet (/exclam)
+/FontFile3 735 0 R
+>>
+endobj
+735 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 328
+>>
+stream
+x�cd`ab`dd���M-�u��Iq�~H3��a�!��]����;�,��\V�n
�n
�E�o	}o�����A�����b�b���ʢ���РpMmm
������BR%LF�%�83=OA
�(K��/�M�+�Vp����LVHϩ,�(VHLIIMi
K�I�Vp���,(�/S�p�T0200��~��I��
+A���y
+~��
+>
+��)����


��

L
L��,�?:��?��n�c�|ƻ�m��[}7�MM��^��k��
;w�n���ySt�w�){V����~�"�39�Bs�|��+f�ɭЙ9�7?_�����g[��]�{�
��
+�xx �~}J
+endstream
+endobj
+706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.238 688.242 157.211 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [273.128 663.778 287.851 675.733]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.453 651.823 171.176 663.778]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.94 651.823 461.662 663.778]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.612 639.868 133.335 651.823]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.322 619.296 155.296 631.251]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.081 587.322 156.055 598.17]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.607 554.241 286.072 566.197]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [296.817 542.286 305.866 554.241]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+727 0 obj <<
+/D [725 0 R /XYZ 86.4 726.045 null]
+>> endobj
+728 0 obj <<
+/D [725 0 R /XYZ 86.4 460.968 null]
+>> endobj
+26 0 obj <<
+/D [725 0 R /XYZ 86.4 421.187 null]
+>> endobj
+30 0 obj <<
+/D [725 0 R /XYZ 86.4 281.932 null]
+>> endobj
+34 0 obj <<
+/D [725 0 R /XYZ 86.4 235.049 null]
+>> endobj
+38 0 obj <<
+/D [725 0 R /XYZ 86.4 93.963 null]
+>> endobj
+724 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F49 636 0 R /F38 509 0 R /F55 729 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+738 0 obj <<
+/Length 2603      
+/Filter /FlateDecode
+>>
+stream
+xڍX[s��~ϯp���=���<�8�:v��M��c����'��&|rj_��jI��[�n���ٛ_�$W�nm�7N\��%O=�
�{�5����d���{�W�k��ܡi;0��Qqm[FS���g�m��
+^����W#�3{#=�3��no������ˠ�מ9�'~�����=Z@�z���W�v��r�d4
y.�1O��PU԰m#N�H�����
�>�����x�F�{��x��_�}ۀ
X
}}#{��/�(�i����{���$fo0
'���X,��j\׳L��i:f����.h���:<6��X�ʟ_P��f*U��rTF����
������D��=�`�#�1n�L�9�"ߪ�V<�O��C�ص���o2�`<q$0��\z��PmՅԷ�H�w�
㩬�5 �؞�7/,QV�GNyh����?��x���4f�d�W�P�>o�ua�
+�"?�L�ٚ��a�Ŭ�r�#���xfֶ,�
��iI�ث�?��h<���竍�!\ۿ 
���F����=�-�!{[��{��
�[�jRi����wFn��m�����_�]�
���pӹ���"Z��M�][l�_�����.����VN	���� ��e�
��z�P�뷾�<�
��a�Rhe��<�' ��,�Gc�
X�x��囂J3V(�X�������
+�AZ3
K+�?��������}o{U�.R>���*e�F�G�KU��Rl� 
Ɨ�����E;"ܩ�>6����X��U�&نiE�W�"W4M�0 �Ɵ0�r��
�
+�ؚyd`�(����Ȑ�e%=������ED�i��W2G�S۹���`D>�
]�D2 ]¶
�OS.Bu�Ԑ��ڑ��ȈµĽ-�F�x��x�0
�obd]�_%wQ�w�xu�|�����!�t���Z��s4
g̽y�rG�1]=<���]����b�e�`9�B�d
�l�t}�/A���T��	���G&�?
�a,r����?,�PD�v��2��+Bp��/���b3��si�JL,WB,h�=��=z�u�$+��
1H
�p-�N���1K�n���;��L$��Q�ȝ�q n�d���9o�"k���]�7����s�Y8fb���*�AGb��E݇3�r&�w,W�?�˄��.X,�\�ő�e
.�2�"�
��Wz�e0�D.Z-�dl��8�nְm��L�`1�s���
%lȚ��f���tB>"���!���#�)�?�>�	��ZD��Wu�#�� �Cb��i��F��hNᘈ-Œ�{
�i�2�?B��ף��2�g'^q��&�3�@݂� sr+`��r�ݎ+�
���@,��(!�n�`��QK��*2�OA*��tk�D�&A�|˘�V��I�
�c0���h��e�bk�[�o�Q 4xW��hߠ:��u��'�
�l����e�H�5M�y@�{vlC�B��
��S2!dA���ab�ԌG�']�7>��-�ѓ�4����.�57�tu�INJ
�Gٞ��i��ٌ�D�'��H�9���|�制���
�(��0YG1Me�
+
������c
�2sV�q(�H ��	���[f�%�x��R�m�>wa�a�H&
f|#�u.W��Ļ8jC�-6��2�L�s~���β�����3�T�4.�0ɡ$�
+_]��Fէ�Z�ۖ
g2_�	�cW�Q�5�R�hQ�I�q���Pd��	�[��ۆ9���/2�Y�f�5��f�\O���~~���z�9��~�9��Qv%9e����J�iN�1�
+7
���U� t�#yU�/+a-��64Dj�*�$� ��ht8̲��f��� ��0u���-˃�-i�wZ��/l<��
+�?8I�m����W�
'�L!�W5��'NU
�}�4#q
q΁C�8l�j{�t��e8�}Ή�J��;-X�/`_��;��T�W�p�IUS\��.�N���pb�RuhHV\���S���?���e`)��N�2�]sӺ>�O����<����Ϧ��9�.��
���F�Z�z�&F�D��;F�>��%Ue��v
+�("
+MԵ����Ny:�
+ޭ%E<��n���
�f�|bۦ���B)��C-��b���)Tq򺶔�e����.B�*W��a�_\R)a�F��U8
+;)� ��d�T��s[U��೎�5��}�%r�+*.����Ź�;�]��KI�+���&�S�PyI��c�IU\�;
�Q�����h&~��mNa
+�'A�!۸����0��~�
Qs���j�2�

��Gǒ��i�
g�Kv�:� 
*�����c at z��d�.�=1
+uM�|��
�k�&o�:�O���C !ն�`�./�Wdڭ1R ��V����:t ���j�A!���j�x
+�6�=痹���,����.B��w
+�!�#dtX�=����|@1�#Wo5���D������u�z��FG�� ��Y�F#⟭�ę��Q#,�@�mpiGQ
�`�+�C�\ �

����F����Pc{�GP{�k99������9^��D���
i7뗔���@ṯ8l�7
xp�d�~���;���P{����9G�.�
*�cju��?L��SQ��
+endstream
+endobj
+737 0 obj <<
+/Type /Page
+/Contents 738 0 R
+/Resources 736 0 R
+/MediaBox [0 0 612 792]
+/Parent 696 0 R
+>> endobj
+739 0 obj <<
+/D [737 0 R /XYZ 86.4 726.045 null]
+>> endobj
+42 0 obj <<
+/D [737 0 R /XYZ 86.4 651.387 null]
+>> endobj
+740 0 obj <<
+/D [737 0 R /XYZ 86.4 353.989 null]
+>> endobj
+741 0 obj <<
+/D [737 0 R /XYZ 86.4 310.153 null]
+>> endobj
+742 0 obj <<
+/D [737 0 R /XYZ 86.4 252.425 null]
+>> endobj
+736 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+750 0 obj <<
+/Length 3509      
+/Filter /FlateDecode
+>>
+stream
+x��[ێ�6}�W���j�i-�"#�9��
c�@,4ݚ���XR۞|�V�H]�ٗ;�LSU,��S��
��[���/���������v!X�eB/^�.l��E�uj<��$��}�^-�щ����?��k8~�K�R%��,��r[�ժ��W�4uW���D"x���<Y� R�
I��WB$5��vܦJ	h�u��ݕ�I�A7R%�-dR�U_��+�%�fW������\�
y����2�~��O�é�i�P�G�b_}Gu�cח[z��R���]Y�7��l�@�t \�\勥��K�xu8N��<�5�H��5*��_2�<B�Y�22qy�l��7"o�'}>
JЩP|�L�06��~b�m� �#c�eR\0Z=���E��Lѽ׹�1���*;�I��,&M���,�I��{32�S�֪X�31Y�����䩖�ٵ�g�O�RiU��7����|눔;%��b� @������l˘�Z,^:��WK-Et�Y*�
�|�uL%�e6����S�
�P��L*O%W}�vTQ�
ǧ ��Tg�����g�u�`"VKA�~�A��`F�F��9�{�8�̠I�&�U�_�`u0&(�8�>
����M�VD�
����ĚX��a����R3��&��r

�������8W5U�U��*����]��o`=Y
X.��
�P:͵~"=Y
�Lڐ����X�E��S���N��m_���M��'�	��vfM趫-���]�y��]�m_T����e��u�[ܐ��Z
%�
+ �)7iU`)�9u
P�nP�1#�0;$E�J%��ҷ?����o�Y����yU}G/
z7�jx@����C�'�q�H�x�[�$
LA�ZXߖowU[n�i%N�S��5n�:�E�R%�����*���=߲�g��;M���M�����
іL5I����P��ք��B�o���>��{�����Ж@�w�� .N���l�Br��{�}pX遼<�\\"/��#�[𧓧�U���\�C
+�P�-,��oi�
+Z��٦�:zt;��
؅�/zBc�-�u����z�٭1�Q�p,!�ڠ)��r[-��j� �U�%?,���-\��]G�/��π�G��
�l�P
-�]5�T�O� ��n	��j��>�]aH��Mh�
+\�Ts 
�t_�+
+"��$�m��7�캲�[G�ٗw�T�G�`o�_�c���_ at g�E�1T����'������s�#p
+
���X��S�H��s

푄t�����7��`
���E*�=�X2f��
}�v�s���Z�+��J���;mh9��]���s0	
���%�J��V{��X�dyʽ�aT����0� ;��<�(b�يign�B�j�p�]�#%L /�f]�ʸ�x�ϓ�.h at t?�ܕ7mb��C����I��$�
��S0ne���e�vA!����ơa����Z9�Ց<w$�}�s�O
Z�'��:f��z�Ƒ.��q����
��p�
|@� 7Z�I:ߢ�<��ep�?�� d�$�qӣ ���o��8���$d��\u
�
�fo��R9�k�9��Tږ����y�XIY*(�hs��W'�-5z��/?��c3���F�<� w�h0?_;�)����?G��)�L2���y]��:�e
�@��y/��!�Q�]]��y B��"��&u��L��ln���s��P����B��
+�����tĪS�^)��C��?�	�	q6hv_�Thq���'|����(���gڞ
o��\���s���́��S�#��?`����J����Ae�zPD��͇HMf?�h����K�"��٪�H@��@�� ���E����9��;,�.��۔�4춖��M�Pid�B#�l����"��9e�|�- ��ܲ����x��a6Y��קn�߯�f��MXv�

owEW-CL�R��
=��b�����wTU
!�#��On/�UG���'
�|��:b�Q�	:��:��{A�$���[E�^. ���<WY�ȑ�#G�N��Ź���&���%>���!ʘ�PO�Ѩ
r>�d��~��� E�N�R�)�I���D�΄
�@���
�"�k���"�Ia���`�cGe`����x��8��<�l?��8l��:�3Ð,�������G���݅,�C7��~̸Su��TW���ЕE�‰�'yw��R��(f��؃�ʻ@^��u�T��Ii�\b����'�^����;ˇ�AKw= �凪�aۂ�.��и�b&aBw� /:YS5mP@���n at v���~2���0�������~��j~���>oQ�[0\|}S�a��ү	���/��
țn*�
N[�z�3h��K��l�Kqb����c#,�
S+j,�e�D�q%���V�f�۸A��v�KN�s�d̩�_#�n���pP�#H��O�oP¼��ggNL�Lũл8�:��ޕ)�~l�i��0���Ӑ
�,�c~��'�ċ�v�;��gJ]����/۪{��ܵÅ��2N�n[�����
e0����! TH��l���F�
V�d[���ۚZ���h<�@��$��ȧ�x*�5�&
M'�˦]�-��2^�Z�w��tG\vg��'gI��߾"�h�_Ӧ�
��zL [...]
i�
6� 6�	��r�� ���_�h'*��kCW�\�D&[�2ٚ��~<[(�p�FŶ��
H�f���4;<pz��
+����f&d�܍R4��Po����xl\@1��X�����&�;�Ňǽ{Y����A��ia9"��A���B��ۙ"3ւ�|)X��'���Hc���u��AY�_�
���d�< pH��3�.#
f�4r���U<-��YN��Di��r�*z$��E�bX�*F�4��|.�>ҍ����;'U�Ϻ����9و�O�q������L6��$�/.�I�v��ɞ��~�PO�챔���-�
��
}0%:��T<�wi�ն���c�p�
�h<'g��͆{�ձ����!
��g;�ζ�0���Y���g���-]LL�I����S/�x��Syv�N
���Jʟ1�da�N�c��<��|�s�p?=� zf�����cс�\>��
�����00~>S�"0��#�u��i9�K=ݛ� �����:  ���V�j���@X��P8�N25����Ǥ�
òp:<�Mߴ^#
+>�-Y;
_J{���m�i[tn�s?�PY<�ݏ�:��I���	D��
� N
���SGJ��HS���xn���tw�l���@�=�M��d�p�~4j�d�	1D�x�?$����GWe1��V�"J�t�2��<�ZR��G1�|
+$_v,q��W�bȓM���gQ��!	K�
ox3�I�EY
-�-�8
}�R

�%�Ul�`y@�g����(ާ oX��9$5{H:�mI-�G�l�N(^��:�6;
�����K1[_��g�'�@��O���֒S��D<
(��ܒO�������7����˰g�
�߽~�?��V
+endstream
+endobj
+749 0 obj <<
+/Type /Page
+/Contents 750 0 R
+/Resources 748 0 R
+/MediaBox [0 0 612 792]
+/Parent 696 0 R
+/Annots [ 743 0 R 744 0 R 745 0 R 746 0 R ]
+>> endobj
+743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [279.49 358.759 286.464 367.172]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BHP:98) >>
+>> endobj
+744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [341.617 202.731 348.591 211.144]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BCP:96) >>
+>> endobj
+745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.009 100.929 275.732 112.884]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.318 100.929 386.04 112.884]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+751 0 obj <<
+/D [749 0 R /XYZ 86.4 726.045 null]
+>> endobj
+46 0 obj <<
+/D [749 0 R /XYZ 86.4 701.138 null]
+>> endobj
+752 0 obj <<
+/D [749 0 R /XYZ 218.991 501.818 null]
+>> endobj
+50 0 obj <<
+/D [749 0 R /XYZ 86.4 434.632 null]
+>> endobj
+755 0 obj <<
+/D [749 0 R /XYZ 259.387 172.686 null]
+>> endobj
+758 0 obj <<
+/D [749 0 R /XYZ 211.462 72.863 null]
+>> endobj
+748 0 obj <<
+/Font << /F38 509 0 R /F16 453 0 R /F8 465 0 R /F11 691 0 R /F7 753 0 R /F36 464 0 R /F10 754 0 R /F1 756 0 R /F13 757 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+770 0 obj <<
+/Length 4203      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6~����<�X�B l'3;�m�M��6�N��%�[�TI*����

�7���tfw_, �s>�;�xq��//�__|�B�E������¨H.4O#%��z�x�4�+n�H���n�ﳮ�d��J��[]��6o�
�.�_������
��
�'K"#�b��x�>^l���"�Djwv�~!Eqx*o/~���ę9m*eӊh{��fͶ���r%y��o�W.�Pz��/[v�l������
<X���M�ax[�G�Ζ,+�a˲�򬡖����=
�9Nb�1��:޼� Ry$\'qM��i����6�z��:�.w���?�OW�Ei� hk�P0����=>IK6����u�
+>�ۥ�fy��%��̳�{�j� s=�O|�|b7�D�y��Hw���rS7M�����A�4Y({r��/_06�b&U��Xq%)'&_���(�$���.0��2~���w���	`Fю�h��
Jy�g��;�HD�I?f:��b���/��t�E�O���ň���80f��1��Y���ӣ)��.�H�#Jރj�|@E0�0_�y
i�c��tA
!l�	QF�� �xA>��^|�L%�5=9_��ø�
gc�y$�d��d&��?ѻ�]��!݂�b�D�J��2��*#J��d��鈩ق�ەU���2�ׇ���z���g�C��hS:,#�<	?��	~f�璣��Ǡm�r���8Ңg-`SS����(9�dˠ�0�2j-��
+x~�m�u�UrV
+b��䤴S5ɳ�ǀ��̹
���*Qd
��׀��
��H�ⱈ���iՇ$6�ɉA1
�H�����S���4B�a�����ˈ��?�kbE� I�~*+���#V�8�~���}@[U��Ɵ0V*��d
������P�w
��,Z��݃^�5�2�2��gb|���y�~��5sh�:ôyTi�(��0����j15B_�,00	�[I }4˳]`1�Hs�GM�5�!7��5� !�2�
lZ�Ph�U�yKSÆT�l͛��Ъ]~pƯ�ݙA$
�@:�zhL=��n�~���"J 
� ?!R^\7_lܢq:�U��������Pk�[z�T��f���;4nj�@�h���yO��W[51 �#�W,��
�E@L��ޘ;o�HGY���%4>u���+� ����զ<n���R10���Ly�{���
ߓtyl�f�
���4
�z���
v��n�eR�p/u�ϒt��@�m{�{§-}�-ڮ)��V
�u�#��̀�<�y��j[de{
+���q����eQ A�Y�W���vM�F�d�������o!D�c[4�}̵-��ц?���h2�
����ւD����5|�� c�g�'>���uD֮g�WmNb�EȨ)�v
���Pz��ox��!�Z��
+2�B."��]ִy�?�������e&��t��
��S������	u㺺�,ح�k�m�oW�|p��BNqhH�j�b���Z
av�~0��jK�����Q�j��	
�6f�9���@[mK5X�|S�
;�b5Ƒ��^��	��w�}IV�j'���$�HR9��xEn��H���q�t�n��!�H��娏@�-Ҷ��~뿟*6f��	�k��K"���jR �翐I�
�b%{7�gߘY��K)i�J {��N�8!���H֏�:s�6�����8B�%���Y�e��+���9 �[�$�p��ˬ����@�_�6`�p��,vőE#�miWĒX�t��d6�g�몼G1�z
�����4�t�פ=*�\(9Vj�[�
n�í
��[. ��\=��rX+�ZM��k���!���)�dȈ�
m�������ݛ��<6�
��~�N,���_n��*��b�d�=��{������{��`;��5ޔ��;����U�&�����`mS� c'�3��$
	fG����C�NӫIP�B�ƥ�IjG��k$b�%4���XB�#Xr�)X��L|�'�����(�r{��XA�LA�lj���)�(
!3ӝ{�C���8��5�m|�R�]Q��X�v]
XS˖�KU֙�!�E�v��ҕ�S'��Bu��H.#��BBҪY��"���gJ�HR��ހ%�P��1��zOv��敋tS�(MQ�:k�L�M(U�

�ÙJ��Z��q��{�uάM��G���	Ɩ�A�j$v�݇Q
��QԦ�/_���-u�����*�C��*�(���&o����8&� ˮ7R^|��>v.�N]�2�
K������r��m 9H45!g#��B�}�
9l{^����m��i8��Mu���6�~�d�b$mb�_��4�������?� 
��,l���B�%��
y
Rd�=U�!x>AH���
����oh"t��&�Z��ږ
+�ՋK#�6���~<fm��%�
$��Qq�(�f4=��l&*��
�O�&�,ˬ����
+[����2� �����Q}|�F%��Z2?��ݘ�
�	�P�2
��y.P�.*�iW��i����_Ѓ��[�HD�n��{�v
��Ӌ�n���p�u�6�O�01��et3�<0�J=�b�A�N�Q�d����v��[��tywZ	��y�Y�
nr���
K������(
�df���J7ٱu��p�|���F��1?��
��Nz[�IPn�PA�+4|%
+�3�݇N
+��F{N�j7K�������<%�6
�d�j] �AZ��t-u��Zb��Y!��
+h at 7O7
+�pRO����l��
@���PT��є�]���Чy
��t��6[��HϏ���$��.W��=r�����@*�Pla}���q�β|�y�ŕab:ރ/2_���m�����Қ��R�Қ-�2ol���a��%�.1��s
8�W)�W}���`�48��g�G<t��;�Y�`:�>�
(e�aOبn;NOZ�D�mQ��"��ݣ����7ޜ��&s�`�O�)n������/U_
+��\����/�����R�^�����h�o��wS"��x�܍�J�-֟t`4eS��ˠS ��7�"
�l����u�9�@��*X�N#�ӧ
���
 ���	nq���K�
��[��Z��
]].#���aW"���$��]U~&���*;J~��1
+y̨�����ОHw�������N��%��8k��]+)�Ҧqxs�B�*�_]iۀ=�$�s<JZiѯw��z�c�`�6��*����[j�RJ�6n�:smfIN@��te 4H��al�M3��mDX���Vc��/��&/��_
���lmO����.�5U_-���-�F����O��_ѧ��X�����C�$����N�O���4�q:9�,B�Pb#'Ǡt�W���ܩ1LO������~��Ri* Ӝn�
��P�A9w��i�V��E��1���� �L'��7&�
L�s{sB���9���
+*�S#�������}���AQ�P�'}?0�"=�#���1�����R�3`�-�%(²�;G/��P@\y]ȲvY����=��W�qw���jkE7c�h=Г���"��'Ń���Lμ�ϐ������_���ա�i��[����3w#+�
+y�A�k��m���P��u�i���f�߀�x��49�ힿ��u'O�R��HJL�l�,�^}܄M�
h9-���8l����I��„�Q��p��q�s����^��\�ƙZ�
��x�/���I���Epc&�O��1.��іlz��g1���{xB��=<����B �?ė^�p��l+�
6l��#�S�BL
�Q��"%�Ԧ�Z?�2�*0Z&��q�
C���]��% ��Pf��
�����
Nq~�t4q�vݨ�{�N9� �O����Gtl����z1)���$��0��~>����џZY�x���#1��?^YՓ��34Ƈ��C<x8�S���G�o_[�����U�1��m3\_�S5���
t�a�ix*G
+k�P�����(�_�4y��೧�qӵ!8\�yu���!A�HMn3_�y���\���.�SZ5Jc�ݩ�P �[6H�9
����,&��y��-��z�ệl�^av߁1p
��3���y=��|�W��p7<����XW�	�..�H�ٱ\�8�x���y�Dg(���ढ�G�Q�4L�C�� F,pu^���!�$��e`��?�b��,O,�ʈ��f�WW0�q�
�q%�6����������� 9��
+endstream
+endobj
+769 0 obj <<
+/Type /Page
+/Contents 770 0 R
+/Resources 768 0 R
+/MediaBox [0 0 612 792]
+/Parent 696 0 R
+/Annots [ 747 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R ]
+>> endobj
+747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.627 687.689 426.35 699.644]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.3) >>
+>> endobj
+760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [433.789 425.434 445.744 433.847]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [449.837 425.434 456.811 433.847]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [303.98 413.479 315.935 421.892]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [320.322 413.479 332.277 421.892]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [336.664 413.479 343.638 421.892]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [248.635 238.788 255.609 247.201]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.957 224.342 173.68 236.297]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [487.523 109.427 502.246 121.382]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+771 0 obj <<
+/D [769 0 R /XYZ 86.4 726.045 null]
+>> endobj
+772 0 obj <<
+/D [769 0 R /XYZ 232.933 669.584 null]
+>> endobj
+773 0 obj <<
+/D [769 0 R /XYZ 253.911 620.158 null]
+>> endobj
+774 0 obj <<
+/D [769 0 R /XYZ 242.095 170.372 null]
+>> endobj
+768 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F11 691 0 R /F10 754 0 R /F7 753 0 R /F14 694 0 R /F16 453 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+786 0 obj <<
+/Length 4943      
+/Filter /FlateDecode
+>>
+stream
+x��\Y��Ƶ~�_�GNE�{o �oU�eU��ȓ��u
"13��� В��9����Iɱo^�X��>�w�
�xX���7����W���S���E�
+�Ь*������%+�튗|�����
�����
��?޽\�
�tgZW��櫻�w7���]ʢj���|�#Yl���)xU.ޛv;�*����ۛ�7EO��h��Ђ
�P-�Vv��f
+��/^��7��ϵ�nh��*Η�c�b��
�l�ݳI7��+�ъ���?}h7_�|+��
�(	}0�}�p4�V������Qڿ��7��ɢ�u�

�nW�\n��M���o\�2�|�_B�3�\ZU�TVb���|(+x�B���V��*���J��C�?��J��<G��*Ǿ23J�K��C�鈑B�k��.�Q��5�g�"gy���,
7�O����?�W��Po-˭AC �����ٯ
������9�< 1�r}������n���m��

?�{���:ܯ
�fvN�8��91)	�ﳻ���(l�N�Ѕ֣F
�8n��@C
�]�ww(}B�e������C/��~�`
�N.����mm�D��m2�>
ۇG�n}@Y�g�{��k�
Cn�fW]���m@�(T25jm�o��طO]��Bӛ��=����6;�K$�6
+�U�B.��Y�{{��t|�9��ဿb��'��w�n�ە����L���������;t�C�G��^�����vQ� 
B���z}x���dUҮ
+&u�v�N�rrm��<k���)̮i����
��w��ӧk�\�R-�P�M�Wɀ���PJ�3�+�|��u`����S���z�v��5���ޣ�W2|/����%F�
bw�S�g�P��m,/��
����Y<ܽ1�ө�c�t���m��}�Z�X�
�	Mև
0e�7��]�j
�c��;a7�i�����o��f at L��	������m��<��u��~
��u$�1&�*(
��nn��joYPF��>fOWh�(r�ӓ� lqc�4<�E�G��ߛ��aJx�M�y^e'͈*���']dԗ;����k7�q��
8��kPA
IDZ?�&d��J��ک�DQ(D�h�����Q�!�I���x��
핳O'�*�,I2
q`� .�}�"F��̇��G3�5�"8�1a�~
������a�C���Pb�	U���}��/��|a�mdꙕ��ܘ��F���nA�k��1:c���;P�ō��g��)8C��Z�9 �XA
+���Ƞ2H��#PfwF�uF>H!H5A\ޓ y��	���,3$НU��.8R�eV�J+
"b�ԭb�'��B�9�Y!?����u��$�/$҂�LN��&=�Oh�
r
���_�
dW�r�(
+���P�G��
� ��M)J��d��
+
���HZEㅮD��H�����ֈ��+�x�H���[ �OQ�nq�O�k�$�
+�
�l�ݔ�?6K��g<�G�8I&���8���їy
[��*����c�!�J�Jv�r����
$ˊ=k?�x
��,0]޾��S0���^��Z"^�7ZC.�6������"P\��JU	N�J�Xи��9/V�e�7��VT����G��;��*�`��$)
� +��y�
4g sl�V�������
�G��5�g��]$f"r���,��&�V9�~�C at 3���-e6��~�1u�
P�V
U�ʻ�15#��쳆dW 
+�
P2}}�qZk���.1��OM�d(�l���F��4,~d�?d�lD���ߑ�<�T���,
+�H)U���W�H �R�Cpb,�ck�	���	�m.�"�4XE�,I at 4ʙ([��H�&RV�����!�9��j�t��i���S���7Nl2#K��
�4���5FarQ,P���bRT
+�J���f�	�V���{���Gt��s}x�"o���'k$�c�0.����کj�7
.4 fB
6
Ѐ���%����t�հ��jp�B2���^l����u�<��d�7G1�a���^F��Hoe��w������J2z��|F���
Gh݂��-&�r@��B�D���tɈ�ھ
Z'�[dz� ��X� ,�lVg�B���Y��ʼ�.�}D!�l P�@��Z"m
�U�¶�m���_e�I�������N��sL�V,0�hn��y�|�u2\Ŋ�V�韉~�a���H��Z�e+R��O5�B�0Jp��;����E��*sy$�M:�,��BH��f��'`��݊O�9���������.f��|��_ߘ�g���n���^o�LJ~ۍ����A�
�+p���6G�ؠaF�t
t�Al�J�Ԕ׃fETt~y#�UQ��}9�r� ����ά��Vp�D�֛M�����.���L�B����l������HN�����Bh.�e �.���K��N�9a�C��O���$�P�$
/�W;�"�� #'�Hҷ�a2ǥ�

dN1�/�>sO���q���ol,_,�
=w�m�F
�8D�	�^¬z���0������Kx`c󠍎�{bA�Nm pr���A��έO	�6P��
+y"��vL���ao-��'����q��ÿ.m�y�/I�P[ک�1Dp	�U��`$YE���u�[y�Dg�_~��hfbR½m3c�+� �04�evEh�*kt�ȥ��v�I�:UP�0ͺ�S?tk���C�m�OT�{t���7W��5Y�W ��d3^+�\�L"`"͝`�����mz
=��
+�
O�z���{��;@�\��y3����1^�s��)�B �*�|v�$)q�����ra��8/��`��iO�yr���D�E*�O�n)	RH��`b��R5#W�”Z�~w�����r���	��{˜T��0o��������px���T+��
8��
��e��1*W3�BGk_
r���ޥǍ��8Q��Q�޼l�ðQu�Wl��D~�f�4FBi�8{z�u<P������n$O�˛�C�*⁴3��
Ti T�lZ�4�cr�]nj௱�U�ĝ�3Z�P��- at 0�I�ظ��S���GP�;3���<�
�D��}ۊއ)o��&� O#��x/(�i� NRs��v)m�l�
��
+��	��`km��&��o��e<��퍞�����v�dp����&'#�J�>i�9��ΐ�TA �3�����/�ڑ�ԩ����C�&�DT�|�eǍ�
+�A���)
+�z����O`���0�U6C��OijY�N��^�)��]Uj�!8�7�/����	���
�+����J��9�g
�BN�����q_b�?羰[��DڒtG_�7�h ��p=���
�ޫ�#21D�ȡ>g���Gb�\�e��25�ߠ�	/pዽ�z�
p

+������B̗�ô�$"��>��K�O�^mP/���©	�/�Td>�b'����7M�.�[�Xff��mM������<t\Л��t] 9{�
+U��US`kC
֎�=$X��� UkMB��M]�q҈
��7�1q��9����0���pMF�Q/�T�śp����	%���c�__�:8����z��z.իЭLr@/�(
�Ob޾�֥Anby�g3�����\��1O���d�l�~\�c��O]���Q9�d���R�0L�mV�Ѫ���d���W����\���Q��o�)�:z��L�QQ�hç��34B�A�#��l"��h4c~UA�b�l-I��߄y�)�@a<ϖy�-�������Pʏ9��cl���.�~�8�o�|)/�o�zfBG����Lq>�>OHS�����K��D
+�N�t�S��O U�If
+���iS�6_�7v.e���9},��;�L
��Bb���%�y]���l<~"~����<���b�ْ��Z8~���VG�K��/��I�(f
���>d�UA���a?��
��=��D��Gryf T�_g��Q�ҙZ9��?�����11F�cǔ.�{LQ��p�ohF��jNc'�1�K�gG�"���
YSjB��lD/_�B9��s,W���8��6���'�x�>�2�]<e�F̳{�2,
+��=}��k˅�5�2��]���e���9j�L&��A���7��߄�jm=AiT�����d��k��#O|��'qį
+>��®�9B�p��98�L���g<P�$�'�+�*P��p~���F���M
+���'N�UᠬM&
+��d��'����
\��&�N$E�
�3"
<!&
��b�>��K���N��W���k](�i.Ԋ���o�&~�o�ة�&����CW��•`������+Fx�hDz+N
,��m�N��u���{�Z�S�|���Xba���u�N�ZŜ����9{z���ӅS�%�t�G7g�T���q��c�K�Х]ls�����µ�%���CU�x <���m����Xa�xI�I�&�y���f����
��ΔN�?��Fb���
fŋ�*ә��ؙ"T,^�g�9b��9Z���j�MR?�/ؘ��
��q���L��](����C���܅��0�8[ef�
��1��G�P_L`��;F�W�.���Y|
+@̜(�!&9SxP������<`J?�~�O6��X��
�8F�a1��4�
��ݱަ��"�{�i�?.I�#EΡǺ\6���!��&���˝\ ��q��5��:�}�x�4��9����{��3��$
�]��W��]-B���}�%�$N]��jD��w���
����	�
+�2Q7����g�*_U#��8��PNlK���C��+`VaO�帩$"��akGÍTKR�s
3��U�ʝ�29X� NXY����rȰ%�/
N���i��Ì��_~� �W��N�׿�!�94G̡騳1�h�w™����g���s0���uj~�ɟ�����8iI�9WQ�_��¶2~K���ٓ6
Ta ����i�v��Ĭ��+������V�pg5�((g5O�JX^.^E�\
/:�V_���
�0M
+endstream
+endobj
+785 0 obj <<
+/Type /Page
+/Contents 786 0 R
+/Resources 784 0 R
+/MediaBox [0 0 612 792]
+/Parent 791 0 R
+/Annots [ 781 0 R 782 0 R 783 0 R ]
+>> endobj
+781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.357 419.898 179.08 431.854]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.138 288.392 365.861 300.347]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.136 207.811 166.859 220.126]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+787 0 obj <<
+/D [785 0 R /XYZ 86.4 726.045 null]
+>> endobj
+790 0 obj <<
+/D [785 0 R /XYZ 273.968 490.716 null]
+>> endobj
+784 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F8 465 0 R /F11 691 0 R /F49 636 0 R /F16 453 0 R /F10 754 0 R /F7 753 0 R /F1 756 0 R /F6 662 0 R /F9 788 0 R /F12 789 0 R /F13 757 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+798 0 obj <<
+/Length 5054      
+/Filter /FlateDecode
+>>
+stream
+x��
]s۸�ݿB�����.Mg�N�I��N[��y�%�fO�(�����bA�@I���>�I ��~�B��~�O�t��۫�
=���\On��39)�ʹ`�������3n��ӿ���j]��y���	#��n�zQ�Zןn�|��������	kgS��z2__}��O��ϓ<�L�ܸ�D
+�qh�&����U
Cg��i�2Vh��, �O�-����n��5um����k���
=�

��M��5���U��)�~~x�d3,S�xn��!,³B�?&�(2#d�a�u>�W�3j�L_��f*Ӷ��
�Y��l!��M&r>��LZE7��U&��D����ޮ�]�4��B[�X�x�7~�t�̴�PS/�9�����,�U;lW}>�;<:�r?8�j�����m�;�v2,�x�`�,��%�i�����)����lWp�_7�u��aJ��Wx�;xَ+��m�y1�;�
�t�O�����U
�?i��#��s3V�M��f�v��~�6�`r_"�e!�����cU��zs�����G�?VG��Bó��+��jQ
Ͷk ��q��Z�0���L1�%�	^��ù̢�c
!Z��Hv�
�y	����L�`J�ڲ�L��2��
�ݾ�D��|F�B��H�ܡ
������a�f�u��W`����)g�oM&e'�HA�� M1����Z�_��3S��eJtY!�9�).�o�7�3m����d.��>AK��K��Q�7 ���u'dYb���p?��N��<�:����#�+a�������������1J.��G���d
��$N������ [...]
.���X+��<ŝ�<,�'�1�	��[�Yl�f����
"5A����4
b�	l�T�=��� x�
[a#�_z^
ڙ��˜���
�:���O_�
7��b��<���e����Gi8��4
C��?~6+ҧKF�M
+k8�X���w�f��
����Z
�D�}�����-�:�*��}MiC���a���Ԋ
+��朷�0e{��r�s>�k��i7�ܝ/�ڙk�-�BOߣ��Ÿ��
z�y�n]��������<��q_m�W\������A�h}���%�8ޅ(i�
+EQ�ΐw��=��%���cgh�_��.��pW6��f
�7���nܰj7� ����q��;)/�ᢈ7�_j2�<8�;o�C�oױ`ױ):����k��d(N`�2�Y{t��Ѡga
��
=�D�)�n�<,��I�R��;��~��,
	����L3OF��qΤ �>GgNe�������mbia��
��w
Lp6o3���b��JJ�Ȅ�SV
G��r�"��vO��@�҄���]҄�M7��$8��}�_����w�����)/Z��jp$䉓���7�� ���Z��+����s����Ƚ��������:b"����!� b�e��F
\"
\
j�
�C��ufL
a)p	�s>� ��-Z-

=��v��^%�`��7�7�I$Phl&͋��3R'�~�4�d&v��
(�8�Zg��
+G΅���
$���Ź�����W�6��"c��/I}�DzWS��N_u�#;B/Z�_cW
+T���
+�
ネ���a�D�
+̪ ���v�v�ߒ'Z\��n��D|Ae��hW-~8a_�$�\ �
~�h
�гh�oxB��2z�8��W���ՠ�q
�9�����	��Ȱ�T<��~N͡�P��	����:�o�
s�\Կԋ�К��z�(5�###�)�Xd"X�ɐ����H�@�U���
.�RPTw`��q���&�2FHN~,tGN/n��(��"
���3�?3�3�pF�y���t���ٞ��2��Y4�{C��8�jl�K�4
��5]������M�T���}wF�h�)n^jaG���p����:����0φ�^ߜޕ�ơ�A�o�
�7��)}�Hu��%���}�"O
��u
��:�BO�pp�ۘ�%Sq[��3YM �G�
�p��%��
%���s��)�lD>y�N�{[!o�Ki���BW��Yɡ�������mnR��A�S�I��NN��w4��^V`��I߾�

+��� =������i�z �K �(�w����v'ɦ�K����u"
^.���*��b�	ɤ
+�N�2-�X���<��8�RZt{�Ter���\�p�e@�P�v�6�������uPD��N`����Lt���
`�xe�w�<�!��(������|��U 2�8X�4k�,^y��e���'-^Eo+�Y��&�<ɦ,���
閴��/��;�Ǵ
+���
�]jQ$���-ަ����x-�=6y�*O�-LvFj������u�g�c?�-(A�K�]7��ԉ,1ƍ��1����C�U���	�Ck%H�KtE1�}�i��J��)�%x���f��j����6���rJ?��s�˅�j�,n���
+X-B�����&��L�۷��y��P�0�Oe��%ߌ[嫏�����k�<����ӟ�u���j�ii��#7�kW�lv%#���Nj�0��辅�vDB�3Qj
�Ƣԑy��n��ې5L0-��!��9%�Tѭ��d��Qq%f,2L�	ؓ%��W)Ej���8�^�
��GP���E��iˍ{*�z�
+y�d
���l�4xEf��T�Z��b"X�-�<g_rD��y��~�h��X�O���C(l�t������~	�|�v{@����([0��p�V6����U\��Sݤ�bʸ�/�1�Z��,��s�P�ӟ�/��t�c�=�CNEw�R��� �2V
�}�~}��n��hq�
��xPtK�6�
+��wO���b&L��.�T4s
+
�&�OX�c�
�
�LIs��A@��k2EQ`�
+�⸚.zq�%�l\1�+l���$�Я'B��ʐ���F��*�{*	�� ����<��8+؈7�~i6
�\|�|쪐#���+�?%�}�u�B�WW!|L
^�M-A����]�1����ϑ0����|�t�*�r	��/i�
�v״u
���Ԇ�C���zV����`�#3�H�
+m9��ɳ�!��m�$��2'<�^e�=����69)YOc�H:)�s(��1�S�m�(����ѱ��s��	9��4
8m�FT �yД�ǭȸM�}:�jw'�y
,�O��`a�!��WP�}h(����e[�z�X�r%/�.��an��[�(�65�L*NT&˷{���}dC&���L��#ӟ8���6Q�ϲ"d����R�W��N*��6V�.q4�ҽ�-N��t
)�$��~X���Qӷ����l-�����5$�3|�ls
�[4
���ɻO@
C^R��BR�@&Cӆ��\fcW�-V?�FAv)�q�5���`�Ѣ�����<j�;���
�����`"��n��S�{��
��ҧ<pV��Di��s5~=��"|Z����@RN�$�
���I�a'EL �-ח�ޢ�=�j�m��Қ4T��,��#u��eS�W�ƞq���X����
i������I����~�k`;�w����C�?{,o��u�dTG��
PmŲʻ�%4�ݴų`���\��!���B�
+ʨ�w{�"?�^��: �fS'�T�ͽ
�>z�}���,���̴�<yA�N�N�Ψs�;
����r�
���2��qWSĉ.���}�4�+�I�:�S~JZE��� 8�:9s\�'<Ʋ�'�qIL�Ppz$��+pQM��j� 4����'0�om�婰����l��f�
��8�6��"*�EܠdT���Oto������_��hs�_zۻ�^�;�E&LD�3����Xm
r��/�tf���x]��
�뫋 ��\e <y���r���TAK��Ex�u��4�.��p���I;	6���#�C�e�씹;ªͺ���T�!I�����f~j~����]���l�X죧�A��̪�s�%^��|�g�2�l�"Wm2
J!/\��].�*d$�����=���0�(m�.F�D��=
�
��:����p|�%��AW@���~����`�L&�}gV
�2c����J�U#NǮ#y>�n�XMO�3{N]E�v=^�*��d�b�~y�gB<�nb������u�����@~6�¿C��0��*X��2+�M�(������3�y��$?rP��B~����X�ڻ�;���)��Bu�k2����>fz͒������;���k����P�
>�(��g�N��Bd
+�VZYUc�*'�{�D�t�YpG���,�m�.Y���c���
 �n��.���{���bQ���
Dɳ~߯�W��K
�ʄ�}c�æM�t��ބH�G�7��!�ҙ7&@2���
�
�6k3=t�@���ݽ;���ZnwՏɌ���
y�@v������o�{��W2ݿ\�|H�N�28�����<�F��-�P*�����
��Au1|�<��<S|L[�\
�0�Ƥ|
�g
r*�&m����.ސ���&8�n�
ޯ�comt.�.kd�R��
���SE�������33���^9���/NW�t�Ql*��7;�G&���y��R���0��������i������F�T�Y*^�
u|��~j�L��E�*m�3v�2��eM wI�}�q��R"�+�������~l�Q�L��$(9�^X+�]��JގQ�7e������A,��ٶiD at U��m0y`�
��w���a��(j�~^v&>����|\韕_��xݘ��}��(��.�v��z���w�W�e�
+endstream
+endobj
+797 0 obj <<
+/Type /Page
+/Contents 798 0 R
+/Resources 796 0 R
+/MediaBox [0 0 612 792]
+/Parent 791 0 R
+/Annots [ 792 0 R 793 0 R 794 0 R 795 0 R ]
+>> endobj
+792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [108.705 609.193 123.428 621.148]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.8) >>
+>> endobj
+793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [484.613 573.196 499.336 585.151]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.8) >>
+>> endobj
+794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.958 351.549 461.68 363.522]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.8) >>
+>> endobj
+795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [313.465 52.142 320.439 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BCP:96) >>
+>> endobj
+799 0 obj <<
+/D [797 0 R /XYZ 86.4 726.045 null]
+>> endobj
+800 0 obj <<
+/D [797 0 R /XYZ 254.913 654.916 null]
+>> endobj
+796 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F14 694 0 R /F11 691 0 R /F10 754 0 R /F16 453 0 R /F13 757 0 R /F12 789 0 R /F7 753 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+807 0 obj <<
+/Length 4887      
+/Filter /FlateDecode
+>>
+stream
+x��;k���q��W
����n�ݴ� 2`)R
C>b�`pg���8��m~���|
gw���/;�bwuu��6�=���w��p���L���,�����Υa��:
S�v���
���q&��-M},����������bmC،�*��w��p���h���I��tw8�}�c�;�̷�(4��}�u�]l�PC�����Ow�
B5�PE*4q�K3*�����^� ��󕛯�Bk��~�]P������qd����F

]�r�ox�<��%���W2]?yU���/<���6/�{�����j�-w� �*x���3�b���
�yo�0r�n�T�%r鮩���(��(}�2���!��dB��%��PO���ޚ4��@z��	"�a0��TU�
>"1����KD��!�y����Ggh>�vt��0s�
+v��0���8t�`��8��
66�a���٢� 
*��Yѻ�m`���W �����_�H'�A��G
�D
y&<�I����� W)�7� W��H:�5���������X��e����L�e�3}��ő���
����p8]�8T��n�
+DD.�����S��
+�wA�)��y�������X����X��1/��
��(�x/̥��X
��-xQ�?�=�`y�>���6�b�wء0e�?{70_r�>�w}�5mq
��,+�w?�tW�w�ݢ������()�u���
܀��g����zyE��	G�(���B	(k_x����@i��Ws5�Sj��R0'�ˀD�S��@�|^�(T�4
�9�\�L�ґM�e���Izwg�T	��KАvb��i�Ѝ�̅s#��,�b$\c��|nI�‹1S�0��z����6�	 Ս;�,4&yE'�0�FQ4��nH�ćt<�
�L<Ō�Hܲ
���%QY���h���O�?��
:�+R�L
+ȬPD���G��fih�H9����mj�|���a
(�F����K�
ܮ<�<83?j�6�
+����8�r��/��x@�>h��qW��A�5r�L?��qh�`	$�Y(��:
�H5F�&��K�Q��� <ΐ!ņf��B�a6�
ԇ;�v�cӞ�z��t��c�f���
lA�����?��0�Js``�
+�$Li�������S�����O at ETCq�;ry����x���"
+�IH�v&&
�]hS�n	1�4W���zN�
75(����
Լ
E����Խ��:�䣷LQdٍ�@<^ n}m��N^�6@��n�
�5U4*l�,O�Y��4*n���V0�F�*jb�����A$r)��yj���2��
��o��1
�U�P��GЕ�H>"ζ�x�-���e-Ģ:U�2&D�&ȫ�H�8 ����'����5�g��UB�9
��V6����
���{|l�C��x����o����_n/r��{��9�dQ�k�J��Z�-������7� ƈ�x�k��oך_��݂��
%�2ٜ�C^� �ǩ&�T��L�����z��+��-�yrl%'�
	%��1�����>��0 ���/����	K�D�Q�5��6�Đ��5����C�$!��_�ѕb��Ђp���E��n�A�*��4���-$ܐ��@�K�"��"�b*�\hU�d�'d!+�U��Jfȁ6{

w�<X/&�B�;m�$F�H}�n�o�f�9R���D�U�.��x�N�O�6
h���ח��ak�,�g��,��s�]C�&f��#	rl},�gA.i�2
Z���lZ
�t i�
�}�����C
F�|�K-�|:�ݻb����Q
���J�U�=脒�W�A�OC��ۊ
+]{n祀�>�)\�5i2�?�U��Э
<�<2�R�
~�{�
�
�qhS�l�#E��
@6?���%?��6��F�-=����	�F3��_����.�.�x�h.~�iC(����WE�
+'��a�?�����@�G��5�`�����/�A��Ntx�w_���L������;U4-���
�k�ڡەǢ#d�Ia�_�6�V����/�؏�[�J�� zj
7ل�8�UY�
+�s8�?zbPk<�Y< ��V
Բ�F��݆?
�đ?����\������o��8�ӌ}n���-��Q����ی�e���ܠ�u��g��W0�>m��T����� ¿�-�?l�#8N���&�~
��o�JW@	JK���#0
+����¦Ԉ���[d�
+Ϥk�ısb���Y�����o�>`^j5�b�׺ �˺3�'
�#o	*|�1�V'���Ն� k���>D�DT�c/W$���(v4_�Ҳ�O�
R�p�:O0��,�h&��
�SǃW\Wp�#�oE�[4��!��"���5��+
��'A�iҥ�Ӿi���M��-&�u�rnn�ɫd<�$ɂ? u��^��3�-~
�vM
�A�QV[
���C
UԳ�0#X)W³�
�ǔO�^Y�l=s�pr��c�T�7�C��~��k�6���0��#����̩7\s�
�Z�ab��v��Y����y�"i;��w
�U`��0'�b�dG
�{s�
o��,���q@��m����g��/����{�
+����>�.q�gm�`,�=��"��3N���� ���խ
S6�'�p �	v\5e�ܔq�	���ʹ�H�z�Őc���
GA�ܖ��j�
��6tZ4�v��TG�Lj�,t��V�9�P�u'�e�D�9q��d�+f+�'O�&�������~}p�a��SA��2�)���3d�B'ѥ̔��Ρ��=�O�8x
*;��(�Wv���Qa��x3��ˤjr���y����p��$рcD�8�c��:8�mh�>t���WX��2�V���
+�C�c�� �!nuIȁ h�c� ���Y{��jLW�Of���FA��K<�^c1�����,f ��/(�57&<BG�y�ޱ$4UO�0��|���%E���@�q�A�V�
9X����
+�ǂ�E},����QGCꑼR�qŧ�t�88�������
�����ȟȖq��~k���lB
+qǗy�j�i��^@�T:��G�;I�����!��.�Z"e?P��\
P��$�<s/�)p���K+^�.��ޒ�J�����s9����C�`��ɧ�q �έ�ܟ
�nl�d�m�V��c�dfVk�'=���1�)%���4 ֺ����6�pcW��$���b��A ����"�����T_]V�i���t�Q^��
+�0J�qE
W�͏�T7HM���U�7Լ2���06�u�)�#��
"��@1Q���ں�'�f���j�����_�\wp1��\0O�x�'�5:��ۆ��M/q�h��G�Pr.�
����
�N�Z
��Ҏ)|
O�= k�F��-��!(�|������*�(�7IWU(K���
$����8����ds�K�.^H
3����$
�K|�&s
��
->�E�������x!�weyK^Re����p�"n��l�-��P!�XlRV�QVz$�����[yX;�?睟�x��E��R�5��V-*�R���.��'y�P���"���
�)�l���wh���_��w�Z�x�j�ƕ2���$?�C[ȨĜ��؜�:�?`��éhI�m���q'4:�қ$��V�[��
+J��ӄ�}�x�'���c3�k��d(�7:4'\� p��쏋aн�0����l+����V1r���ÃIOɡ�T���C��2,�j�؅��h�Y
+���F�.%��I�
��6?4e��&b‚���N7��D�����K�K)�Z��iLy��S~�AF4�)IG_�F}Ή&����N54`Uw�E��c)9��Eh���]��1,���'��ێ�}$A\U�˻�74f�v/���/`7�!���1�'
XQ7��&l����֙{#���$�����-�{I�m�,����J��6x���F���S�7�
�F��I�.�
��V�����Zq=f��i��
+K|K9
6
�LN�KtyYɾ
9/�րu�.�[�2��ߌ�j��O1T�E������
!}�
A�Z��
�ej_�G�j�9�R��"D��Xx+"��Q$��W6�OG�h��u��=��5�F
+\ڙ��Y�m�||*�*/ogB�W�Z׊�ƠI��J-�_l��H<�U��U��}�n���n���$�qME�iR���I�V��Ŭ�{���̫dI~9/X�ٿ����/"��r�WC��1x%����;�tke���"[���hSmĤA^f�m�
J^�'ܵ��T
�(F��,�-��0z��1���s�P�B�;�� 5����
��[��
����o�eK�eby���o�>H�=����<����6�$�}X��.�u�t��#�*<Rr@��n�	�f/ME��Lh�Aa���(��'!�z\C꥕h�2�
Iq'�OC��.̲�Ԙ
��S��4:�/�N�Ѭ�1��h�?�O��Յ
8���bR0�"ӣ�6J���
j՘�L_�Wj;���N��c��I��"+���V:z�]/
�z,G��qx��Gh��4��Ȁq12�cE�������:�s�����#��
��/�Uy�E�(\ԋ[-ي>�8�����{��S!��T�x�y5k�DQ�h���D�V��k����n�����
+]��}n���
_l	���j*|���Ԁ�cQ7���X*!h������9�,)ځ��dY�)Um�X�?���ؚ�c�X4�нʉy��>��7��=󮡷ɞ4�׭�a`;���fð�ę�N�	F`�cIn�֔���DtNe�a��#s,�PL�ɍ;T��� �w�â��g�u��qK4�amûE�^˳�f�������h�T�r�Ds|Q�4����1�2>/%S�!��I�e!qB�S=�"�>�E�7�C����7��p�70^�
+endstream
+endobj
+806 0 obj <<
+/Type /Page
+/Contents 807 0 R
+/Resources 805 0 R
+/MediaBox [0 0 612 792]
+/Parent 791 0 R
+/Annots [ 801 0 R 802 0 R 803 0 R ]
+>> endobj
+801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.489 494.986 368.212 506.942]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [165.188 329.318 172.162 337.73]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.655 146.08 217.378 158.035]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+808 0 obj <<
+/D [806 0 R /XYZ 86.4 726.045 null]
+>> endobj
+54 0 obj <<
+/D [806 0 R /XYZ 86.4 537.629 null]
+>> endobj
+58 0 obj <<
+/D [806 0 R /XYZ 86.4 201.591 null]
+>> endobj
+805 0 obj <<
+/Font << /F36 464 0 R /F16 453 0 R /F8 465 0 R /F11 691 0 R /F10 754 0 R /F14 694 0 R /F13 757 0 R /F7 753 0 R /F38 509 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+811 0 obj <<
+/Length 4233      
+/Filter /FlateDecode
+>>
+stream
+x��\[s��u~ׯ�#U������MU��
�*��=�<��$B"v)B��}�
W6EjG�];/b���>}���\ �z\���o����/gêȊ`����*�̭rSd��Շ���6��M�����<l���Pߗ���6���7���T-�A���?�����_n4̮V���gх������j=\��q���=��-2����7�}������i�3��*:�y��}�V����+��
�����5q
���~�
�;n94\��9
���q�C��,��~:�V���c%34�W��{��/��d���̛�B
}�!j�"���,�f�^g��<��Q�m���|5��*�>����o;���E���
�7���?!��[�R6L�Cݓ�;T��V~G��A�@"l���j�o^�7y�)�`s:+|W������?J�
|lHd������������Sťz�=�Lt��
-��9p;��w�Ս3������	��M�
����
O=�e֧���6<��$
+,�ß~��䥏y
Z>fD0%��3��D�r��Q���V;>��Gc��9e�"f��
��rB�t��~"2��yz>
��;�q�|�La�'6�� �N��0L
�D��������oWU���!���g�^)7�
+�q��]�����<��Ÿ|�x�_��������tT
�&��]�e���[�u�
zm�<��A
+������y8�}�Z�G�4�L��	�^��y�VE��^.��j.5�3:M�pĠ̿�l
�ӳaQ�,�
+Y�5��I�Z$�tm�gp8�*��`�p
��a�HM�X�s�דC��*S[���%�W�p��"5�ʔ�#��Z�q�?�z�=�uO�nnjh
���X��[�g�
���6ನ�x.�"��v��&��a����4{�u�����P��mu������<��
���tc�0��_�ǃ�\n����K�ԁ�p� �^Ar��<�4�Y���]�$o5]�KrR�;�C�,�i��_(4:��*1䬲��jۦE��W3� �w%��k��r?�*C�^�a�F@)���[��
���(�*
kzh"��
�e+�"<4���)�2ç[�jw���A.�gQ/i��d�#�1�0f\[��Fk��f/W�u����cL-ψ�a�z-]Þ��I��ځ�µ��;���8��
��#������ 0���U��UIr���
FT�u:7�����*�l�}���6s1���
+Ht��dP�<�
��\e��Rݷl��9���Q��:���l���h�

��5$vw��P����8������cwڷ=��.+��3��p|�D�sz"^%ZŠ��0i!R��������3�37��K��<c�):��J�Ь �<�k`
�Ĵ1S�Ϧ�&d)ϊ8��#ﵖ�NY�g��t����?��M�
+wI��[��W��t��>`7$Q�0J4v�Q�}ҟ�p�R�@Fx)YE����Njg|
�]@S��,p��sQ T� {۪�p�IV�0A'X%��[�eĞ���ݘ
,��ZHH;������L�淎W����+6�@V�7W�7�#^0,\�o�1
+p�^3���x#A�
���}
+�;3cUa�Ä
+»Jgz�I��(�

`T����]�
�w��ڮ�Ɯ>���z����/�\���k�q7��
`.M^����Ӹ N�>�~+DŽ�`�b
+]�a���h�UR���wYK�����f�����]�*��� gy?_�n ��9
n�p�
�g�V�Tfb (uz
`-�A|t��paF~d��q|�8~�1(
��ϲ��m.�G~{�
bb����CpIt���Ƕ%�M�%�+;�	
Tk��;z'܃�I�1��;Y@)�-���B]�#�0lu\A\ǥ
���ؕƭ������\������q�Z�gY�8��*�M�O���\�,��6f�����R
�	��	�rq9���{= ���i�bO\�!�.�-0_� ��_z��]�6����(6y`Hڵ+��/�✇>6�$�
�7�>4�`�N��+�xx=G����x�
�	���ό_���@�/�`,��~��d$:B#D�h
;ah%Y4�?$G����?t����D=1�9#īe�n�'��������ϢR﫞Xdf��V�L1�O�U>
�X�6O,O�� ݡl�T��=` ��#Q�Ș� �,Rh���a
bkF/�T�]�ʣ��M���
����g�����K���=#1��Q�r�A�WظR _xi��v�
�z��QS�����}5��-�����&��cGL
+Z��� V�cOo�>s�0At��f�
Xja�
 R6� kn��� ��E1������Z�LL�M�
@��4�����&ߦ�a1z���K���n��8�m\<���!��Z��Z/�i���8��C�Zk�Q�N����b����(@�
+z�
�Z
|�e��ǥ�c���hI��@� ����t�N�4O�>
����$�2�b�=�
+�T�*R�Q�l�Sj��;�Sr�G��C��
�R��b�͖��s
��m'��<���^4'�H��s �[��<)W�Q���L�-����c��/��\�(
�3�T��;���R���=O��|���~��U��B����
�2-!�h�׻@
���#1w�PK"��3���\*/xt��C��pE��t�,��}rQ��p���D��4�	�>�]'۶�Y��K�
+�&g6��<p�z	ް`Q�udy�7�|
+�N�\E!�:�!��#�0�3v���������2�A��Ue��Sh���4���N����
דqKc�s��Is.8Ӵw��n�B�%������nk� vGψ���CR� �F���Yng.�&��,X�:�q��vɗ�YP7աw�����g�T#ڀye�*}fy�
]���E�Y�P���D�q�;�-��;8�m���5���l)��Sod�>��δS�I��c۔Ƕ��5��y�
��
��Y�s/I��Z�h!�f�)�c�=綁
*��6�{����ܾ�R��G���{&�d�xG��	���u�=C2�~�A��M���ea��?���ٜ��sh`����R�=���֦q�T���5��Ib=��+��O�
�+�C��0��7|ni����Б�e߱��
pt��,Bb[ɞ�dz�m8;��2�a��OTk �ݫ8�*��g���n�M�h��ꅵ
pj�24w�MX0����Y���n����}"�ەczU���;�݈ޝ�l,C����s�ɗ�<�j�/_������1���i��9��޶�zM
�J?�-y�v�gp�}�W��__r�|u�4�Q�\�>�b��J�0$ze�&	�1u���S9ᕏ����_���s����{�s
+xc>�\�t�ȭ`е
������-����o��E���wQ��K�S5?ޱ������p}>6��w��D
v����1���x^4�M
7h�맒lQ�<�y�7
��f!���҂�A�8�B
��/�l
�Hh���t�k+� N�J0i�˔
}̩c�/��Lř�*I�6NV^o�D���+_S� ��d��
3�s�w�w›��o��ā�st��XBV�gvL[�Ϥ�x��*���b���.�O��q.dN���y�Ar��̉0~�z�?�Ib�<1�ф0|�5̘�S<�է�9��
��H7
+w''C�y� �Om���@��S��1��e�g5Շ*�����%n�#,�z_Jz�r
0`��@��v�LV��^%�_��H�2��0�
/��|�ZJ���ׂ~Y�`��hx�Ћ[x�e�,>�M���F�":�J�x�㌱8Ia���n/��K�L�yc!���OI\<��3e�qP+eN
��b
+
���N?́*^�|A_8��'#?��}�A���3dcU ��4��=�1��6†�5�
q��p
�Sj�*3���f�w�F����7�����ۈ�(��gz~3�?Ahf~Nh�q�9c�+��X��[��ObM�H�zzz�9�)s��:�
�҆�,���n8[�̃��޼��W�f��*���~{�N�W��C�TUyd��	qJ�Oq�ʎx=,��~hKʇ`D��6�;`
��*l�'n �$�O>k�fԎm�+��v�+
Osk	���V��׾6���l�
��?�'���b�d~\E_��UV����^de c��'�!��&b
y�vF*;�ʍ���
���y����
+��S0߀�2�
ˠ�L6��
��o?���*�5
+endstream
+endobj
+810 0 obj <<
+/Type /Page
+/Contents 811 0 R
+/Resources 809 0 R
+/MediaBox [0 0 612 792]
+/Parent 791 0 R
+/Annots [ 804 0 R ]
+>> endobj
+804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [509.106 678.224 521.062 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HeSh:80) >>
+>> endobj
+812 0 obj <<
+/D [810 0 R /XYZ 86.4 726.045 null]
+>> endobj
+809 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F11 691 0 R /F10 754 0 R /F16 453 0 R /F14 694 0 R /F7 753 0 R /F13 757 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+823 0 obj <<
+/Length 2662      
+/Filter /FlateDecode
+>>
+stream
+x��YKs�6��W̑�� �Wr
���ujc��R���Cj	�Z��o7�c�#��C.Ch �~|��p�]���/B�|}s���(]��űP���U3��y̸⫛b�)�q�?t��\G�
+��?n�A{$K҄�p�V!�<u��A�i�/�6�˿�l�a7�,���S�nw���s����}x����G:�9:&]e,�E��EiF�����Yp����	�i4w4g���H�Zh��n[]�r��ln�
O��*c!O�>{����+s̐TL%���4�)Mg�t�K�(�

ߙeL$�pP���
�E�Ɓ��.�> ci�����iU�	Ux״��/o~B��:�&�l�b�RN&O��{;��R2�I�}Y��/|�b2�G��PuSWe�s��W[}���^g�����p�AAe�rȏyq/2R���<ҭ�њ:���if��:VI�&ɉ$dI"�ˋ�D�^[z�g�]�T��V�Y&qP^��T}�
M|�T1�̉{7
�� +.�ɳ,P�X��-�&I�|�c~,�
r�>��cp ���C�y"��Ϋ'�7��M���"Q��x��L�����MYo�̣(�p�ŽH��G�S��h}�y�$�^w;�9L�
+�n�W�^W,
őpt%,���;Jāt͢x�t�sL��<X���+	#<�(`^j	�� 5��jE*�jzC΢�ZR�#��ەnƣ�ݵ�[w�l�/���-�:�<��u_i����-r���K�bO�s��Y�C�~�Am��
���2y`'9�x����#��å(F.��N(���6�͚��7]�����.�hA��jJ&�<0DK�
Y&��-�V=��_��q����Ok�6��}2u�$)+�;��jP��E�c%��
+b�K��l�4�
+h�c����|����
+�s�dg��<�
p�'ڛ#%SY巕�r�u1�%
+ns�Hk���7�y�����:��M#
I��~&
+�
9�
+�m��4�<*��p�,<��
l h#�]QV���㹼�$���h��t6�!	'
���t�

|��)j@�?��	S� �?,
�Yg�
��<�as�
i�@ӽ��Qm�X�$��8}*��&m�
rB;u]�{3U�~���W
+*��v�x��9�X��ׂCF ��6�b�2;��|ٙ�|���?gS/����DCRB��pZC�
+���4��3FR�aI)�>/*L�@�$+��z.1�b�),�JҊ�D	%��P�4�
$�p
����ٳ΂a�?�+!S<�}E��C�+�tӇh�����z�Ͼ�8�wRPɷ��t&���|�s
�d�<8��[':mP
�c����3P|v����И^-fe2
n�s�5�;a<-ْ�b�Hv�.�#
"���lMC��_�s,6䷫����%<t�O7]����
��aP~
Bȏ����q�<�l,JϔΤn���|7��m���w���%�M���&AȖGkHf Ḿ�b��G���޽��xp�%�t�i
We/�dYc=w��b
���:

۲�t�&��C��������*<�I4���B��*��=\m��إ�p�Q��A���C��v�u��g�H3-^2�0 X�
:AC��@���M��l@�o]�q�%}�d�P(o�<{�Z����~X�Iݸ���mL�>
�?�U@�M��P�
��eCE��#����Ԇh掞ݢ�p��p졝��������&̎$T�k� [...]
+]e��ђ��x�\��x�o��.
+(R	Gq���:@x4�p
+�l��̏MA�3Ql^�=���$��
;h���i��Юz�`�C��
��5h�j(%�k���ڐIh�f�)�΍�z]�q�A?v����6��-����i�^��<+G�6��m���1�қ�-�
�m�����r[��j��Pck�V�Zl�A�Y9�"���h OZ�i���h��h�5hl�����X�g��",���Խ�"�
Qw����hi���9�DR5[��"����aV" ]$|P
NOԂK�#4�v{l���ed;��n��H��,4��p�$�t<�����q�7��5�
�q��8��,|����7פmMS1���2���D5�:�Jk�� h�H	a��4m��]����cI_d�xڨ���=
��`�*u� #$�eU�.��.X�Q�[�]j�u�犾
�C|>��������E���9��myE�xE9i(�
�,FP�B��U���Mz��R1!Y�Y5��W
���_z�ۮ�ՂՏ��Qtȣ��Ʊn��B���
mg�����lL+e6�1��sL���T��9љ��.������`{0@��d�W'L Т��V�$�o�1N�:�Î���k�bb�Ʀ�<�
�z��z�wxo����'����5��
�-7�}<���M��ڕ__�Z~�v��/�
�{@�L���A���!q�T�x��[�s߻���
�*���]l�1���_+���Z�8���#y[cԴ3�5i�1>��$q�,��B^W���}���y쟐e���BE
+endstream
+endobj
+822 0 obj <<
+/Type /Page
+/Contents 823 0 R
+/Resources 821 0 R
+/MediaBox [0 0 612 792]
+/Parent 791 0 R
+/Annots [ 814 0 R 817 0 R ]
+>> endobj
+814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.72 421.989 422.442 433.944]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.1) >>
+>> endobj
+817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.55 190.901 383.273 201.749]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.2) >>
+>> endobj
+824 0 obj <<
+/D [822 0 R /XYZ 86.4 726.045 null]
+>> endobj
+62 0 obj <<
+/D [822 0 R /XYZ 86.4 701.138 null]
+>> endobj
+66 0 obj <<
+/D [822 0 R /XYZ 86.4 521.363 null]
+>> endobj
+70 0 obj <<
+/D [822 0 R /XYZ 86.4 256.185 null]
+>> endobj
+821 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R /F48 609 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+827 0 obj <<
+/Length 551       
+/Filter /FlateDecode
+>>
+stream
+xڍTKs� ��WpD��-譭�6�L;��4bGcY8Hn���EB�cRgz�=vѲ��`�9�P$��@#-��Pq�S�$#�(�=$<}(n �
)EB���ҌQX�0(���i�?��\ӗ'���%�1 �@�K��&��!s0bZ�_C�p�
�,������34N)J�h/	F�`%���|HNmc`v�e`���!�
��	� 
Q G:�� 
'��(�,�	�f�P��J3�)��Ym��ϔah렐బ�ڛm\��l\uϦ�g6.�76.�Ӕ
�n�άz�M�hZ[�h]5���Һ:�������a��m#Ə`��mm�R
;[��G��&�`�L#.E�ӫ��������U��s}_�K��%9�RNn1~�R
+]�K,=U6k�Q۫�(�J��2��J��`A~���j�����mMP.�&|ˁ���`�
Hå\ ����h��ɂ
�+oW��dm���n?��+?�n�W��
�:ܶ�B�<
�E(�
+d4�bd_T��d��
����)rq#1�p\�������2�}՝�_���( n
+endstream
+endobj
+826 0 obj <<
+/Type /Page
+/Contents 827 0 R
+/Resources 825 0 R
+/MediaBox [0 0 612 792]
+/Parent 791 0 R
+>> endobj
+815 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./sunorg1.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 832 0 R
+/BBox [0 0 719 456]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/ExtGState <<
+/R7 833 0 R
+>>/XObject <<
+/R8 834 0 R
+>>>>
+/Length 835 0 R
+/Filter /FlateDecode
+>>
+stream
+x�+T0�3T0 A(��˥d��^�U�`nha6155Գ4V0�3762���&F�
+.�\�@ }��
+endstream
+endobj
+832 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160728-07'00')
+/ModDate (D:20151010160728-07'00')
+/Creator (GIMP PostScript file plugin V 1.17 by Peter Kirchgessner)
+/Title (sunorg1.eps)
+>>
+endobj
+833 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+834 0 obj
+<<
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 958
+/Height 607
+/BitsPerComponent 8
+/Filter /FlateDecode
+/DecodeParms <<
+/Predictor 15
+/Columns 958
+/Colors 3
+>>
+/Length 25421
+>>
+stream
+x���	�չ��N� Ⱦ��

+
+�b D"�I@#D�E�""��b���;��
+��q�`�"( .�(qe�,�0���JQ[W�������{xxzz��O����Ϝ���7�|�   �����   @Dg    �3   �   ��
   Bt   !:ȴ�K��������w�|�Ŷ/�n�t�e
ڵ�g���vo֣s��uk'�" (*�3��z}�GSnyl���nHZ5iX�
vОI7 ���
 ��_�ʟf?�t+J�q=;����I� ���
 s^_��ɓg�ۻ���q=��wE�����%�0��o�j�G��ު���㶺�����!ن@q�dKՎ��ܩ�ithW��3�6iX+�F�ϖm__q��E/n�ռ��}��#�4��t� ��� ��%�O���ƛﻼ�Y[ՎoN���?�T���?t�o~�t� ��� ��ϳ������������I7'�^\Qy����j��[�2qh����#:Ȗ�'�~}�Gƍ��5?�:I7'��o�������g��7��ts ��� ���ȫ�vT7�ئ~��'ݜ��:�uㅻ�I�% PDg ��u�tuㅻ [...]
+�Άc��<w�ز�Z����6k�Dg��
+�3Dg �Bt�-��
�*�z�0:[��kt�.g�
�i�P�qFgsɇ�����Ú��Fg��
+ܟDg Bt�-ѣs�ȫ�7n�*:���� �9����
+�+V��Eg�[�����л����:`t��WYY�`�It�!Dg ٢��ƌ�P��S����ye*���֑f�1�謂���K.��z	3�����?�� 2��
 [��:��3�1n��l��>X�®q��l������l.V=E�hs�8�\g��
+��
 S�� �%���T�5�^�y���ͼ{�U�D�ζ�϶^a�k��	�@��dK��:�Y�Q�zFH�_�N��<b����
��8/X�L{†���z����u��+x�#:��3�lш�*�Zg[������V[tv�ԠWt����c�-Z4�.�J�٨�������Et '�3�lш��`3���^stV
0[k͋�ٲ�����}���#�Ư��S-1��Wtλ^����
 C�� �%��D�Y�;?l����蜳�0��J�;�\l^�μ2��zs�j��f��WDg �Bt�-�s�́d���!�9���kt�
���"�ŋ'�x���e󅌴}�=c�8b�tλ^y�d
+�@�D�� ��� 2��
 [���":��3�l!:Nj�
 S�� ���
/�3�L!:��s��� 2��
 [���":��3�l1��v�(�^��)Dg �Bt�-���Z����]��l߶"��[Վoz��P�&:��3�l�x��E/�i�8�w���K��I��Wy��O���m~�%'&�
 (8�3�l��+��L�&�U�2�s6��r��G�l5n���႓�&�
 (8�3�lY�y���\��ڸ=��ѿ�5��բ�N�~��}����o�d� E at t�9�~�;�ۇ
Tg䀆
��N�I������B�7�������N�I P
Dg Yt����⽤[�>�߫ڱ�Yc���o�8���,�&@1�d�]
^�5�y5sC�O�oi٤~ҭ�ӯ{�����_�1{ YAt�]����G^�ǚO����x���J�H��
�i�|�
;hϤ� EEt ��8z���NN� ��":�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��B
=�7��qҭ@p���ؕ�. J��{�z���I�"���B1ڔ.�K&�.�K&�"uI
+�Y(v�t�^2Q�t�^2Q��KR��B�K�
�����
�����D]�Bt�]"]��L�%]��L�E&���P��B�d�.�B�d�.2Q����b�H�%uI�%u���$��,�D�P/��K�P/���L�%)Dg��%҅z�D]҅z�D]d�.I!:
�.�.�K&�.�K&�"uI
+�Y(v�t�^2Q�t�^2Q��KR��B�K�
�����
�����D]�Bt�]"]��L�%]��L�E&���P��B�d�.�B�d�.2Q����b�H�%uI�%u���$��,�D�P/��K�P/���L�%)Dg��%҅z�D]҅z�D]d�.I!:
�.�.�K&�.�K&�"uI
+�Y�W���٥���?�~次G���ۦG��ɵ
L�%]��L�E&�"�Y��7n�vҌ/��m�?z����j�H��z�D]҅z�D]d�.�e�|�c���zϑ]����!I����L�%]��L�E&�8��,�7�����z�D]҅z�D]d�.�#:�c}C�[I���L�%]��L�E&�,��8�7�����z�D]҅z�D]d�.�":K��P�V2-��L�%]��L�E&� ��ݚ�7��⟫�����}�ns"m���o>۸�Iú�e�i@��
�iۼ���z�_�V�iC@�+'�^�%'�.^�WNd��K��x�.	":�WՎ�Y�k�KI7��ј��[Q�_�g
�Y�n�bG�\%^/��*�x�^��uqE]��KR���26��'��ǚϒn�Dƛ��&���?����`�����ta?����$��V8D�o�������j���
�wm�F��J�;k�^���˶���R�s�A{^=nP����^Vr�E]����
���S/�bE]d�S��#:�xg�g�/�S�
޿����l{�xd��)��W�/?s��d|�'��l�����ta?����$��VPD����۬y����>�-�n�,Wܱq��_7ztnٙ�nN
��#�zQ�G��~$u�I�񭠈�5����g��cܸ��&���K�9����j�����3�i�QI7���`�����ta?����$��VPD�G�:�m_7e��I7G��
�������]�$��z�H�^���Q���D]dx|+(�s��ç�/ܵ{�-�����
!���T���?��ta?����$��VPD���������؏҅�H&�"���[A�k�K���KP/�Zdb?J�#���LҎoEt��.�O�.A��qj���(]؏d�.2I;�ѹF�]��Ww�>���Z�x�1���
[VVk۶/���-{o��~W]5���㎻j�����4�4運/~�|��%��u�W�������[�~i{�Y�N1���v߽��o_]�N���I�%4ꕮ͙���!3]DZN-fQl���Qf���q��m�B��؏�B׫W{��i������':���H�~P��xV���H�b�gil�$u>�ݙ��
��wF!��VPD�Uj���٨Q=c7�s��j۵m�fbS�*�G�B���s��G�t�v�˅/_ZN-�5
g��t
������i[H"{V��#mAB[����=^[Hq�e?
+�@U�~�
++]u	r��*�����ٿ������5�
�̷}��g�GWۨ����uW1ӛu!�bUts�ʃ<&�v�P�JW�l��|��h�w���Ԣ���>;�N���7�)����ظq��1��ܜ��]$�Y�ޏ�pM>
����B�#�Qp��B,ǫ��U���y���ַ1�蜷��}��G�񭠈�5�U��׼��j�;mS��Q��WPԆ��G~��v��XGL�
��]"x�RW gc\�N��RpjQg�>}:�w�/�8br˖���%^�t��EQ�l����)�����(���-�s����g
)�T�G��
+�
��JW]lG!�#���:ֿ�
�"��[A�kh�lc�^��0kVS��uk����_QQ�s�
r4�N�.�^i,�9�D�8��>7�\�ko�<"�mV��1k�n0
+d;�v>OHسһE�3����R
�؏�+P���JW]�
�\K3}�	��
��=�O�G9�i�v|+(�s���9�p��xd{�u,�:���~�֮[���l@�?�I�%�F�t�9�6�M������<=�����b�c>F�`�@m5��g�w?�(Hh�v�Q_�-�8��G��
+яWa��.A�T^�y����wFg���r��&��VPD���ζ���@�N�N�v�أ���>����]ۏa�za�i�X^��c��Y�ݏ"�m�[HA[k���R�*D9^����9Ry�F
�T9Ǝ��u&�k��
��\��6r;O	����d��7�r���$m��}�FNj�����O�����p����[\G\�qh5*c�(i{Vz���4�
+�o!m�I�~J��w�
++]u	r��)�9���~�3�����#��QPD��L�8g��u�5߯�����O�&�8?��([�*tֿI�.�c�b
�L{�ӿ�D�Z�����.
;�:��p��ǘNqN��g�w?�(Hh�v��_���&��QX��B,ǫ��U� G*��؎�{�\�ơ/B��:�ѹF�C��0�k��?��;��Q�n��)׫��B^G�|!.N�#]��P)�:��\����J���鬵�=+��QyC����n!ř�!|?
+�U��xV���H�_�����
�z^���d
�
+��\��_�b��sa�Bq��1�H�%��J�
!r�#i*�����z&�N�q�u��
��ͅ8/�bkC"{V��#ma��#�R�9����
+T��ǫ��U�o�~��ϻ����(9K�G9��O�񭠈�5
+�Eܮ��zG��I��_���K[���
��2ɧ�)49�uI�;�>M���C�
+�}��*��c�ڳJ`?��+��l!ř�!y?�P�*D<^�����_b9�����a����"�\ȏ��� :�(�)$�����_�N-��~�.�G2Q��
�
+��\�]Ÿ�]�z���"�Q���D]d�v|+(�s
v	�v	��S�L�G��~$u�I�񭠈�5�%�I�%��?N-2��
��L�E&iǷ�":�`��'m��^�8���~�.�G2Q��
�
+��\�]Ÿ�]�z���"�Q���D]d�v|+(�s
v	�v	��S�L�G��~$u�I�񭠈�5z���jG�\��&
k�}|�H�%�����E]���
��L�E&iǷ�":��ô���YS���l���u�n�,����؏��ԭ�čg$ݜ��G���.>؏҅�H&�"���[A�k�y�3s�b��}X�ɧ5I�9�ܿ����ɸq�~�_w�o�nN
��#�zQ�G��~$u�I�񭠈�5^\���W~�e�ם���j'�
9�����\��f#9k����%�ՠ^^��u��~�.�G2Q�d
�
+���-c�0v
�FE��F
װ�au[5-K�QIڲ��E/n��/������c�V��rbE��>�^6B�E]l���
��R/�bC]dR��#:k��C���bۗI7D"cO�zܠC��-����`�����ta?����$��V8D��zg�gSn}�k>K�!5�l��_�"�V�hմ�'��?���
�׋��J�.^DՋ㞉���.&9E�	�K����_���eᄒ�#u��|��VMwI���Zz�
��*��/B�%�(&�^��$�.^�ԋ�
u1Q	E�	�K�������?:9�V (�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%]��L�E �� ��P��B�d�.�B�d�.Q���b�H�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%]��L�E �� ��P��B�d�.�B�d�.Q���b�H�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%] [...]
+��\���ׯ߼5�V�jGuEyYҭ@ 2�b�.��qO&�"�̢Mzv��I����5���t�n2�b�. PL/�uN�M(8�s
3:?q�qɶ   ]��x��At�
+�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�9�,q [...]
+�Ǩn	��1vZ\����}f
�
+���v[��w%����ΙCt%�A*�����\�=��tkm���:TÜ�w��{���A�l硰e�kg�J4:�j�S����I\�9�v�{��r.������W���.]-$�謄괈�J��Y���^t.�Y at cW�؞��9D�P
���Y�8����
���M�ӭ���u�
հ��`�S�H��[4^�\Y�v��T�sؖ8��s��ot��LE��Zl�4Q|��U�b��T�+U��
dx2�MEBt�:�z��WA��(q�"Gt� �s(�GvŚ,��������SK����{-�v�u=�bۑ1�i8H���~X�m��Ow�b=7x
���K�I��a+�7F�eV��8�
�m���a���ۭ�zY����n~����(�_����
�l�\�~���r�m*6��)����_l]Q��@�U�=#/�s��C�9Hy����q<�����<�l[�qc�	Oo��?=��3^'"
����
�K��e
+�N�J(:k�ĩ��Z�x���v�\��#�&��/籿D	d>s6��5rqG����oS�)ftv]_��\г@�U�=#/�s��C�?H��G󷶃l���2t
�O��
�A�:<�sX�0�_�uVaF����
[���ԨT���FK�
+�s�F��P�m\)0�旷(��EV��ٮ����
9����\�@�Qg�5ǂ�9D�P�gz��w�ck^���>���/qAV�g(�:d�8Wtv=����t�Y�R���z-q�7:�4x��s���3��6Bm�>�e�l�6��E1�)����|��4�(��r�m*6E��^�6:�,e�M
3GAt�
�s(a'�:OfA>����7~�U3�O&�F�7�z4�ّ �_��V�E����?�9H;�*��1Ak�8����x���o�t�U�
F�c�A��i_x���N>;����
!^��e�����;-�M�&`t.����ms�?
h�J��ȋ�9D�P�
�\��y2�J�ϸ6�q��j�Ot���@�+W��9�O���l�2�m�^�
+
��|">��l,�����P����s��6,ž�!:���\�(����Tl��}��P�/�Y@�0�p���ΙCt%�A*��,ި�2}��<8�����&':[�^)/��j��1�
d���"F�P�m._����+�ͯ�����f�4��
<J�괸6�bFg��
��c�g��Y��)�":g�9������|��CO����:kZ��B5,�=�9xt.ܥ�\?��La۩W�B�u�{�":[f�e��W�"�u��:[��}97�B�uVl�k�֭깡&/������Tl
+=�9����T�1
f��
�s��C	~�ҘB�
+�C��x��W��'�|����Nb9��=Q9?s���s��Wt�����X>���5'�5�Y_�ͯ�W�PlU��k��Ό��0�Nsm���bS��	��o�J�,j�5��
 �9s�Ρ?H��'�?a��G��^~9�7�Y��]��Y��u<-\t�;�
�+tt֨T���FK�
+���!Jt���z}�f�W����
+p]gg������#w��@\W��i��D�Tl�s�
��
^������s{��~�3��
J����r�����
+2Re
�q
�ް\�o�
�>aú|�Y1ѿ^+��5*U����E�cÈ�5�[���U�����^�
�yO�
2�k�����nشi��o��Q(Ƌ���\|��M�.N絾�+U����W�8���J� :g�9����_
���?�����9e�V�a�`��r�\�|!'��+EьR��}wؖ8���sfj��	���|��4�ۀ��u��g�^l=��1 +�:�|Gj]����v\��
���l*6�?&q}�E;
�]e����ΙCt%`&���ܼ��?n��ӡ����x�M7i7,�6%��닸��ˠ�xMJ)\t��$�,{t���E��F�q��~�uۭ����j�
��+���9ǻY�|c�̅촸6�5*tt�Z߀�m��������a�3��
J�L�S��c�Q���g�A�6�0b��+VFlX�#@��Bb��>
�y�P���TA�s��84:[7B��|댫�
z��v��{��y:����*ū(��ڞ�W���B�;-�M�k���]�7�n[̳���Kc{�+�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt   [...]
����VI�����I3�~�)�V �޷M��[����;	J�a��'r2 ��8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
 ������������n�s�I�v��ڴ�5�vq":y��Ϗ'�������;hOu{P�N�z�\� @#:w;iƗUն��v��{�J�I@��@~G�����{jW�=w��f��' [...]
<O
�wĀ�I��Ӌ+޻�E�ۜtC �]��
G
wx��
�n����� �i�Z��~���[
�$ �KEyٳ��N�¢3�o �B���u��B4 ���]�$�aљ�7 D�qj1���\~j����N��At�3�O\t\�-�t9��y��@�!:{":�
�3�REt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgOy��
:������ι�k�.��.]�����u��]���zu�G�1b����
?����;ͥ9_�M���=Q�vm뒫v�����
X�`�Yg���2m��i3�q]�W'l߾���C��Ze[es������)�
��>��e���k�w- MA����z
�a��m#N3ᢩ���G
���Ɲg�{��G�Z��� �1={��rşz��`c!���a�E�-�]���q��K�cG���x�
�f�*+�.е��f\���Ì3��f�3�3a��t�����և9l]5�
��k���f�cl-1��h��c򮝭�

z��#\HCt�T���9��Egk�uM����J϶Xl{93۞e��7\_V��O'�%�o.�i������>�ٶF�k�Ȋ�s;�Ak�S��Œ㏊�F@�ջo�T皌6����K�������*�9H���Wf��	�9Gz�>�\��R֖[�
����::�"~��
وΞ
+�����#�*z�Y��?����-���z-�
�5_׶4d��z���c�I�e�����8�m��[��-^�
p���"+Zt��[#�9Tl�t�N��cߺ���d>�

+5c.�6�l[�J�9K(4�`.S����S۫�>�ˡ�|�/.՝���W^2���j[�������3�����=(:�
�9��۫{�����o�	͛53�V����n��
�Ij���ag��
�}��Uc6mެ�mk�^=	�p��s�9�Hg
d�*P�<�y�&�T����W�f��9���
UBU1w�->��΃O8����^H=Ҹg�=�Y��c���^�)ht�-��)@��Ξ
+���7~�U3̼��U�4�r��g��h>�u	>s�Ն��
kD�ޯ^���"�ȱ5([3�zp�U�F>k����ϻp�U�Mnּ�j�E.kP�NlP1.o�s
E��|�5�Z�
���(���6�j��f�����qg��8e��5�u|`��g��p�٧��2:A�us����9�ڀLDgO����#����*��/�\gs0�=����vm��hF�6m|�¼�67�9\mmF���
+�	ƫ��wyW9�����+Nt6��K�jdG�l�ٖeՏf������?m���l����a
�{��ޫ�ն���yWN�t����Z��WGs����9��N���ױ�uv�<��[��
$���@�YeM5d{��SCEg[�
�D�L��}�N=%zt�M������������(��EgUԻt����l�	����
+�ή3}�+>��k��<��[�:���u:�
iN]tVld�3�":{*Pt����ᇡ&l8�#���0?�|ʯ�5��h[�	���l
s��L�&>=
p�lk��
������ff�׼o�#k��1f�p�f“9a�����L_�p�s�3��>=�L�2�?��-:G��ѤYs��1*:��еRy���&o@,����Eg��Fg����,���^���̮Ͷ=�z�9��	Z��y�fO̹�K��7j��s�>=�F�k�:M@A3:�.�f
��ȱ���56�X�T��1A#�^1e�3��|L��AC��♃��aWk�?��_�7�X٫���~t~0��kg.�믿q���1����
F�7-@��=.:�v������5�_��L�^s���Fg�P��w�S�6�4x��s����O��Q޵p-��)ft������l�<u
+믂�:�%��^��� \�ęm���l�q�:Ҭ�ֵ�]������Gg�
�krr�=���_n�}�񿀱�J��uV1�޹s�W����kڱyqe׋��<&�8?�h{��+Q\;�vq�\��pQ���o�k� ����9g	�������/�7�8Cm�#:�j��uq:��
�I-Y=�G�[�s,_���KA����3�>t~%J��������ٌ�A�����{�9�ڮ�����{�)>WA�囶am��a>�
���P�
����(�Z (��Gg3nڢ�y�m3`t���"n�
�N3�� �����l����� �k[
g`u�p��{g7��n��
@����� ઠ� Dt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgODg �CtP���� ���
�T�=�@�@�":{":�
�3�REt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgODg �CtP���� ���
� [...]
I���rD�4#:{":�
�3�����Et����V����7�n|k�-�;
+Ӵ�(��_����iԻc�ݚ֏}�%�υ�(%ӇQ���%ߟ����
Dg�sz�=iD�7�n������f��>����~���{��,�~.DG�(�>�"b�g�?������D��":{
+����i7=c�߶M�>�;�n٤A���l�h��Uk?]�²7^]�����̑=�n�0�%�X?��|�XFK�g�?C�����D��":{
+�o\�r۵m}ڰc
+ٮ�y�%�/}��
ͦ��-��j?��Q>J�����Y�� }Et�?�3�9��Ξ�F�s�|n����6��vm[�])SYY5�����)�;�,
,�~���|�jF���֟A���
A����<����5��r{��ZU_~u�ً�l�������g�}����4m�����Z��O
ХU���_9�����ԭ_a>��Ϭ�y�������%_?iɫ[k{�ރ���)�KV
�.J5���j��AtN;����ѹ��WU5u�Iu�T�]�3v�M��.TR��
oG�(�>�B��3؟y���
����MO��C�
������؜7��������*��p��F�=b�>*�Z=|�J�Y��E���Ҭ�[�ӨI��&u�~����^Ⱥռ��o�^H��o�֧�":�
��S��N3.8��mJ�xa	�sѢs	�a�����$:#�P�Y
���k��ɖ�������9��M_�Fg[�urFgg�����ն�m�x&:�
���9.D瀈��*��<�i]�y��]c\&��·�b���^?�λ�ol�Vk�.��e͸k�������0v}9gt�
9+��s�������)��iú�=ܾ}�yϐ�Ɯ~ޥƍ7V,
}�Q;vT��ڥ����[\�n=�)
5�����Tn�>zh�M׫m�lѺ���ki�۴�eErR����G�^5;�{o�g{�v�=�]{O�Ze^Oq�pD)�ήەs�mW�
�[Ͼ���':��ٶu����%
��vړ�<8q�u����k��al�o�Zn�3a����B���F6�s��/=�f��]�
����s'�t�g��ȸ֩�J��~h���_7��r��l}	�af�����L��&��'	��Li�8�QƏ��Χ�]u��;�*|�hh�V]��TD���0t�
Tש_���ڮ�ؼ�ڇ����+TT�
sj�>�{/��fl�F��G�ߠae�6�Ul�y��� $:{uڬk�ͺ�2�]��]U��ᚼ������'ǘ�sDgD*:��AF��Ո�so[nFg됰�q���5ܫ��s��5[�Eg��UF���9�s��=��ι�d�W_~�8S���j8�믿�;�� 
#��ٖ<���ymW�>4��נ����
x��M�M�ʈ�Fu�Ϲ��q˖��蜳���E眣Ӝ���,+�s��s�m���8g�茈BEg#)��+�{{�s���6#�Wt.�
u�yQD�#:{��U�3N���>ѹ�/���eg���������
泈ν�������ymW>)��O>��Qq]��D�hУw�1�ׯ��ت�c�Y�Ϊ�Ԑ��Y�7~�AtFDa���#�Ft�}7���i?�ꜧ���
+�^ѹ�T���F[�vEtN;��'���8A��~��d5�Q���x�~
�Ă��h�-c���;s��9�4�6s���XH����۫�[g��Cqݮ\�
��}��W��K3���G|YYit���;��G��v��%?a#o�Y'rDl at pDgD6:��Fg5*��~�^y���y^�9��t�p������6h\�l��s��=	��^���SN>�#ҝ:��g\�
vjRo��
f|�y��mF?o6���m���ěsή�
��ӮF��<j�ӏ�W� ���c�q����v��Y����}��ΈH#:;���P��c�s���W��]�s.�W�خ�����杶AtN;��'��9�
��߸m���#���1�
�Ր��n~��Ǻ]�	�j]'��.�'u���g���ؓ^?���F
p�:��h^|&"!�٧ӂO؈k��3"⋸���Et�$-:���z��
+_��#U^A<F������������NA>
�ڽ��|��[&�~��?���ʥ��G��l��2�Wrt��8�׳����LtN/��'Q�9���lYЌ�jhJECk�[��*������ψ�����b�����]Y/T�Ja}V�m�6a�x��8��m�aj��\gU��͚G#9:��&f�.N�ڟDg�Dt&:��ٓ��
�+Q
��W9#�:���[/�뺴b^�*�E�e�yب�m���|��9�7g)J,��s
�U�O�9�p��Y�x��Ӎ%=���yE��w�^
��9���(^��I^�Έ��LtN/��'��;.2��@)��%#��"DgDDt&:����9.D瀈��":GtFDDg�sz�=��Bt��,�spDgD��s��Ӌ��I/:_q�Ȳ�ؾL�4":�d?9:�dF1:g�?�Έh���o��QҭHL˦
f_��7�%���)lt>�W�y���n٤��J����	W����7
�xl,
,�~���|�jF���֟A���
�>Y���ob�z�Ξ�F�+Z��k�:�S����])���w�{�]ˆן�3��j?��Q>J�����Y�� }Et�dDgDAt�6:/�9w.1n�O�$Z����[�~xϼ'�UV�ѯS�.{Ʋ̒��Bt�����("���3`_�!�Q�=��Ά��}��n���UWW�ei�&}�
�Ү�ԡ�Ǹ�R��v��R��(���,�g��":C2�3� :{҈ΆWVz�S�V��0�J�ݚ��ݱ��n�ľ����u����(b����g��":C2�3� :{ҋ�  �3$#:#
+��'�3 �!:C2�3� :{":�
�3$#:#
+��'�3 �!:C2�3� :{":�
�3$#:#
+��'�3 �!:C2�g��ۤ�ۻm��?��t+��� ��MFJ�tݦ�[��l���w=Ѿm�d�al}~z��c�t9ą���
 z�Φ_���w�I�v������l�z�y��s��=�@���k�t����9��Ξ�� ���l":���w?��Q��
_Xe�ߧ������d���� ��MDg�\?��-���Ӄ�O
3 �� ,��'�3 �!:��ΰٰy���7��g�͓��s�Ӂ���
 z2
�����Q��r�?ỳ�
ܾ��4��g��Ӆ���
 z2
�
����W߱޳�n-n�4<��@��3C��Bt�Dt =Dg��3Cΰ2�rN
��'�3 �!:�v
xf�6��3CΩCt�Dt =D����
9
q냋�{�[!Q�n
�=�oҭH��'�3 �!:+j�!g9z���tl�����-.��� �Ȍ�I�8&�>�3цn	����
 zdFgy#��B�BFtE��Bt�Dt =��si�,�c�+�%��'�3 �!:'%
���n	����
 z��I��:FA���[B!:{":�
�sR���Q�?��P�Ξ�� ��蜔,�c�g��u=�}�6�
w}h�6��U?n߾}�#W�\>�1.��Y]��Y�k�������K�cG��U�֫����
+��� �����u�"Tt6c��������*�
���O>�ע�ծ]�|֐a#T,vf_�g����F�2÷��c�(DgOѣsU�WO����5뗿���-��5M��u��m����M��g�:�I7.��Me��Z�c�K��\��F��(P
��(��_����iԻc�ݚ��zX)Eg�Pb��Q����u�љlB�At
�C/:�̼j��o���]~�U������7aڤ	f��Eg��ǿ��s�|�EtN�������O6O}���m��Q�и~�����
M�nv��m2��[�k7\|�K|bd�3�u:��-�����
�ļu�3���r�O|q
wܼyS�1�­c����Vq���O
3�x��)�=xX._t��9E�Ξ�D��F��Qԫ{tϟ�ѦE�&���@q6l�b��O��u��z�)=}�Pd��&���z��|�M���mӢO�έ[61���MPee��O׿��WW�./�5sd��[6t>�d��3
)���5<9����,�:fJ�	�5���a��W��� #
�h���0�	�ϊ2׹gᆴ��b�(DgOQ��Wޛ��k��2��Au�T��4�n��'V���
v;`��ۂoe|�
.��{�•s_\ݮm�ӆ
S�����cK�_�F�=�M?���%���d�=:�
�,�:fJ,4���y�
�G�m�T�5�)�<�Q�!:{��/������Ѱ�z
|@��ە61�{ׯ3��&�|+��dp���s�|n����6��vm[�m�TVVM����u�����m�DgÂ�
8k���1��/Ȅ��c�]��О�a���1�M��cڌ�w>�7Nj��9�=ﳈ�)Bt�%:���[*w\p���w�����fUWWsq9�&�
������ꯦ�;)��c�ܔ�8B�RtVF�8~��
�*
���qG[�	;Y�û�����)�����
���y�EtN���(�Y�6f\pJ�mJ�s*�6\�7㽚���n�p�k���~���6l��dS�cG�1��cɋ
�UYU�r;ojN��7�q�5onT��k���9E���Q��a�
��
P֢s�r������6�hM6�
�� ����-bt�F^�N�0ݫw_�L�E�/0�Y��R�gY�Ra�����x�mr��ۻ>^��X�
+���9
+��4Y�&g]3���?�ع��vXD瀲��x�9�NW}�UA>&h
w�^��?O;Y�u����
+�ٓ��iú�=ܾ��o%wi�����n������G�����CNs�y�Z�ՠQ��_ZQ��z̦���m�b[���� :Kq��n�-Z�Q�ϖ����{WY��KG�9jҭg�i��S�V��,�K�{���z��M��]����
�xt�lu{��k��?�bS��
�Wm��'yp��궹@��W��\�Bt�}7:�n��Yp��j��9�
�𭮤ad���:t��a� ��
j�cv�?��P�Ξ�E��G�tk�Ĺ�N��v8��O�e�i�eUzpFgs���Ncz&:Ke�tn<���0���7����[V^a���u�Ye]��wf�U�ߡ�{�
46Z3�
?zH�
++�97]���UvT�09p���֮nk�oq��v�z

+f]3mֵ���'j�}�Fu�O�GI���钅u���qE��Bt�$6:����W_~�
m2N�
����1�ϼ�杶ắ���+:;
�Y�(ۤs
��o��fzk�g{���|�s��
x��M�M�ʈ�F�?�6��-[6�o�3�M2b�}�]k�_c�Fq��v����-U�/0.Dg����Q�?��P�Ξ�FgۉP
/
���F�m���W��%��>���+������'���̿�GGt�&zȳ���z��l�t}!�Yơ�G���c��_���
�]_���Y�W]�<���.���Q���:FA���[B!:{���&8����s�_
=���Z�����8��w�!O,�ߋ��2fx?��
�ɕ�,M�mҜDk�#k
y�,h��`���I�W1��G|YYil�F2�|��
�7�u�-�xj��:������c��<
+��@YX�(�WtK(DgOҢ���s�q^��]7��O����ϼ�x��c/�q��D�̊e�4���'k�B}�4��T:��������|��
�G
x������s�u.�h�l�U�C�+��5Htv�y��z��@YX�(T���M at DgOb�sΒt�H�J��X��Yy��̈́���6i����g�ƃ]ߤ�&��6��)�Gϼ��'�~�cg���tU"���0�$.N�W]u��
5a#��.Dg����Q��:��w?J��l�`����fXDgO���{���z�)E�é��g�^ዏ	fJ��d�	�9���z�3:_4��	��p���r��\#s 5�Y��\�9x��

+�
�7���
����
+�I`M#��'���<�=6�^�tkF�ؕ�,ubv��\�.
�l�*���]�K��ζ���2m6�g��?��x��q�s]��͚�>iQq��v�z���{q:�>�Tt�Ȉ#i,-��)Et�$-:;�]B]4�<;���I�9
+e
|%JE�&�v�nۦކ��9�MZ>�Ԭh۬$�?������Dz��fr�_����z-WR�Q��)Et�$':��Y����"�@D�":{":GAt��m28�s at Dg 
+�sJ�=�� :K�6\��|�y#���:^Z��(��)Et�%:�����2{B5�{٬��j��
l���zO���՟l
��A�[6)B�D1�h•w~?�͂?
��-�ȋ�RDgOQ�󙳞}s�ӆ
ۮm��ە�9�e�\ϩHDƷ��Bm�W>���>�ux�~=-B�Dyu���=ծe��O���-�ȋ�RDgOQ��
W�}q��{�6j��q�+�z��G�~��
ͦ��-��[�&�
��.�9w.1n��Ѕo�o���=��VYuF�N����| �ȋ�RDgOQ�󧛶���ɪ�z��~=��?��c�������rD�ݒn���m28����g߼��o��F��-d���
��]ڵ�:�pׇ�����)Et�%:�y��i��ng�j�A����~�a�.{��/C�p���m2�([�+�?��U�?�\��I�[���;�
�m������)Et�1:�\���g�2N��5*ڵl8��vGv�=��E6����z�Btβ���λ~�t+R�·�V�n�A��$���j
�ݹ�<%:{�
� ���Y�k���Ӥ[�?��.��
�}�n��-[=�����!��Gt�Dt =D�,3��S����������Ïu��@�\q�c
��Ft��
 ���eD瀈�VDg=Dg (D�,#:Dt�":�!:@) :g�o��߿�J��͜��^�~�����Yvߣ/��ʸ����w�Q�u0��j
9:s߬����s�V�lڠ��͍ۍ�=��r/�Et�Dt =D笩�Q=t��6o����{��"�&�u���\��v��ޝO��Ŝ%ϵ7��0:$��At�Dt =D�
2����������
H�=bo0��ƛ
��ٗ�jܰ^��J��7�~0zC�U�Ξ�� ���A΁g���؆Z3;��zC��s����
 z���d
x�ӭù'�M�=bY�Z�<�X{C��s����
 z���d<�2�Z3>䬘�!�9Gt�At =D��R�����P�q����z�~���sDgDg �Ct.�[\|ߣ/%�
+�N�Z閌�޴"��'�3 �!:S��ӓn�\A��%�
��[��'_�Ct�Dt =D�bR)�/�	�-����+��>�^G��'�3 �!:SR���+����
?�3 �!:SR���+����
?�3P|U�_=��+׬_����T&�
���)߷M��6=�˞��'�
D�b�B��@tvEt6��Gt���O6O}���mI�!�Ѹ~�����
M�n�
ѹ���r4�]�MD�����Z�c�K��\���T�H�9�RQVk�6��kӨwǶ�5��ts��j�MO��A��G���
mZ4o�kҍj��/֬�t��_7�7
+}�)=����\LYH9�ή��&�s�����v�������gD�3�u:���I7$���7��7�e�Ƀ�ԩH�9�p��>���������$ݖ���)`ذ~]�C;l߶ͼ�a�]Z����mG�8~��
l�qʘSnj5�2d؈	M5�پ}��Gnܰ~�s˶n�⵴�.
<�ώ
U�_�
Y�r��|�X׶Yk{@��1P�v�X�%�#
ֵ���O�zuH�z���4j�X��k��+k._������l�����P��
���=n�5�VY�ߖBt��9
+#1�v�3��m۴�ӽs�Mԫ�t�����j��_X�ƫ�V��՚9���-&�(?�����Ѱ�z
|@��ے61�{ׯ3�B_տ����*:�D�XQ^a
�-Z�63�z�Ot6e]��+�Iq؈Q��kR9������l{!�s	��
�
+�<��Y�GL�qݯ3~�y�4�ߜ�
����O��_�εC��������ԓ7h�p��m�~pV3��(:k��z�At�Bt.
7.\9����ڶ>m�1I�%�
xl��K��G��'vK�-~~u��-�;.8���
wI�-ir�e�����
���Ť�s;'�\��l=���_x�')*�+>0��3�M�6i�m��ui渣��1vK�G:;�?ӛ�[^^������_c[�A�:oڸ��i3�����o7~��ߛ�_NU3��":��^{�':� :��s�|n����6��vm[%ݖ�����p�����
�?��Qak��$ݐ�;妜��ѹ�R��=���
+2q�t5|�
�j|�:�kNl��[�?�6��$���y���+^[z�%W
p`'g�������E}�٧�#�&u��You����Υ���WU5u�ILZ�@f��!:�Y\�s1E��aͣ^��:5��T�6�S{{��fbL�����
d}-��l�T��uQquK�G�fS���z���޷�X��!�7oRk}P�C
���3��u蠣mQr��;TVn7��xgҵ[���5kw�lt�X��St�":Ǐ�
1H��ʆmF�����)��Տ��֥��먳=������y��b~���!�(���A�����F���>��
��
w��+�M�Eɣ�9�����R���������1AD��A
Ef���e�ٴa���n�^s�mѺ���/��]�z��K�]o���u����a��'�rҘa�ζ=�pý�w�\s�|c�����Ɛ�EY_����m[�x�D{�e��\L�6l�'l�Li�Y��h}z��u���†s!k?X���?2�
S����u�=��S�������9�
?q�/�~\Roe
�5V����\:b��>ah����w�q����ٴq�:�&
��֭���B����v�=�j��Z�ڀ
+�?��
Uǎt�pj��LW6ѷ�f�
+���M�"��/+�03�zb���*{����#N
;b��k��9}κfڬk/S�ڬ�u�?zH�
++���27�W	Nfq��Ŕxt6�7�b�WRt^�-瘺��1A[;����a?&h[q���z�6ci3����?�']j,�uFG��������KG\��?
�Dgלd�6��F��-[�-uy=%xt�
+U�Y�

���&�6c+��~k�y7&:;�wn{�
x��M�M��X����Ϲ��q˖���l8�C_}��(�2�Kt.�ģs�tجyssj�3)��k��ZǏ�ȼ.N��{ը�m�:z��z��%9ߋ�Y�$:�K�EgcicF
_���Eռ�TGg��!:�#:�����
+�s��T^^$:�,�F
H��}B�9��ܠQc[b�ζ!g�\Z�=۫g��
���1~�~ݧo�\f�8�����aI�ι�&"��߱��˷�;��i�l-�0�(l�ͬ
�n�;�7�#s���':�:Ĝ�����%���t�K곕i��aW����\:��^a(u��'T�c�fT�5nt���+;7���ٖ��/j��nG�U�j�����4�
cC�|��
�7�5:3a��9�,|g����_�m":Ǐ�
E�s�}�P�	*'�~{�m��Z�m�G�&l��*�s�ی��?5Y��c��G��l}��T�~z����O?>��鷌��Ա�8�b���֭Z�����)
)G����Dt��9�د����>&�5��h����O�":ǻͨ����5>:�=8�	�F�=e��w<<����~�����Y�?	*��D�b�B��@tvEt6��Gt���s���6L���5��
��B�9�mƙh�Gg��o�Z>~�?�1����2���h��'
��no�\��&9��zQc!� 
�����)
)G����Dt��9�]��+
��m�&��Gg�PEt��ͨ!a��'�&�h_���c�u�z��8���ј�ϼ���
�� 7k��!��D�b�B��@tvEt6��Gt�"�������R��uj��>�'Ht��
h|R�W\W��*�PEt�e�Qo����6��ι��EqFg5+�Hؿ8z�Wt�}�E��!��D�b [...]
#4ѹ��ւ?
�t[vBtP��Ξ��Q�v�ӫ?�<���Z�l�t[��HW�����o��+������}��mԐ��nKj<��k�<�R�=�M?�[�m�	�@�":{":Gq�CK�x�^�w���Фےu��Z}���ڵlx�)=�n��O7myݓU�_���A�z���W�e�態�o�������v�E�a��F�F�p�zE@Ab��v��`og>B,-�s���R�h%��\��
	��S�p6&���dֹ穦�q
�/˕���
�J:'I�6�������ФsХ�L�����ҋ�����7�ϕ���>l<|�2:7��Da�=�u��ۿ�O�<���ݳ�tj%���sK�������,�����g��s���ϛ�������C���'n^�]�-=�/�3P+�$��k��ˏk_��
2�Μ<>sa����0Y�3P+�$��Hg�V�9I:��@��s�t�#��ZI�$�
�G:���I� �tj%���3@
�
�J:'Ig�<���tN�� y�3P+�$�� [...]
�Rƫe���Njob
��ܺڟ�;SzE����
�FG^- ��V: @gIg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�/$�W�
+endstream
+endobj
+835 0 obj
+64
+endobj
+816 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./sunorg2.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 836 0 R
+/BBox [0 0 720 504]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/ExtGState <<
+/R7 837 0 R
+>>/XObject <<
+/R8 838 0 R
+>>>>
+/Length 839 0 R
+/Filter /FlateDecode
+>>
+stream
+x�+T0�3T0 A(��˥d��^�U�`nhi�g
+6506ԳP0�3762��&F�
+.�\�@ m-�
+endstream
+endobj
+836 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160732-07'00')
+/ModDate (D:20151010160732-07'00')
+/Creator (GIMP PostScript file plugin V 1.17 by Peter Kirchgessner)
+/Title (sunorg2.eps)
+>>
+endobj
+837 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+838 0 obj
+<<
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 959
+/Height 671
+/BitsPerComponent 8
+/Filter /FlateDecode
+/DecodeParms <<
+/Predictor 15
+/Columns 959
+/Colors 3
+>>
+/Length 41818
+>>
+stream
+x���
�՝���}��	��
�9���<��L�WDNDA�
 =��Qs
l�0�hP2N2Ĵ�o�`$��>  ���k�t�w�u\��{Wծ{��~
���z�뿪��^���_|�   �B
�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3�85
o\��ڝ����k�֝q7�4_���
��۳˥��۩}��� & =�͖ڏX�v}
wC�׮u���]6|P�� �Gz�_���G��w+����|Eܭ �t#=���ڏ'�\"�۵>i�em/�Uv�%����0�
>��
��~�K5�?��( [...]
�T#=�Z���1w��=�r����}{gBs�����Ś:�\ZR����=:���Q �V�g Q{�f�
~'Dh��݉�z�}���a_�}ܐ�[ iEz����+���Ob��k;�����nNs���#w�|O�����.�>.�� @Z��D�{������3��Ľ�.��e��i.i���2'&o�^xG����"=�ڀ�ɅW�<�m��mL�2`������Ew�� H/�3����vQ�x[�ܐ��?�3�����Bz �H� �Fz�
� �#=��9.�g ��
 j�縐��?�3�����Bz �H� ����{�����:uj�}�#�
U�ee%����&�H� ��@�H�q!=��g QKlzv��I� �̑�D�Cz^�t�رs�rϞ�er�ٜ���<��iCCcǎm6l�U^�U<‘#��UnܸC,?�\���O�
{֟T���Is6,g�G��dٲ
+���55��
+|�=Oz �H� �Vhz~�Z�E^Tkd�ܷ��>=����cɝ��d�����o`yR7�ȧ(..���Q��V�X/��G}.pE��C��� �#=�Z��YsՃ��سH�
N�8q�|e�mӦ�
K��o޳|���b�+mۖ�mD��ٰl���;g���
�9D
�66H� ��@�|�=�D���e޵l)#����֠��
Öϫ�g�سj�>�Ce����3����Am�� �#=���y�9�
d��{������f�x�
[��6;=�Ib��t���ɇ�
 ���D��=7�����?U
�QX9(�3���2s#�o͞��X/'~Ȉܽ{��ک�e	��h�w������� �#=���y��9�ۭ[{7����禦&7�%�s��f�{��F��C���ر�3�#ђ�A\���6�>���?�3����c��P��6���̐vy�:5Gb�©;w�aZ
x�����x9��&Zȇ��瞑���m��7H� ��@���R��3 �Gz5�s\H� ��@�H�q!=��g Q#=Dž�
 ���D��
�3 �Gz5�s\H� ��@�H�q!=��g Q#=Dž�
 ���D�U�ߵ�XX���Yws����_
��G���3 �@z�{~�b�����}�;
�&��4�}�0��>
g�8e郓�n ��@���n޳����/({�^�ߵFH
X��Ś:�0��3o���� iEz��>�즙K�7�囯�0�N��E�{�ͺ���W.?x�՗^rn����"=��~����
� 
�v5>��9�a� |#=���K��~
w+
WZ�B~MP�ѹ����uj�\s ��
 

�._��uq7� ��{

�ڷ*-)��9������&_At �H� ⴥ���/���|&�a�piL�".�{f�+����/��- `�3 ����;���XX:{B�����
 @
H� �� @z �H�  �3 �Ez ���-�3 ��
 n�� �g p��
  =�[�g  � �"= H� �� @z �H�  �3 �Ez ���-�3  ����k����o��
+x���#��9w+��ƿ��[ܭ��8a655��
+ @��m�{4
$7=�����Ƹ[  `�k�^��
��nE�$7=�u��̉�G�n���nO������b��������o�ݐ
>R��v��~n�
	��}�o{�7r8*� N��S�+���"���-�(�YNz�&����/͌�!����O��0��n
�x�"� N�.yU�Gz6���3BA��F}�Dz�DznH�~��
+�g6�k$�3$�ss at z���PP>�Q_#��!���ҳ�g������
���
��� =#��l��H�gH�����G���gk���6������n˒⛯
s���3�5R}C�ͻ�
���|���il,MB,6m�p��Z���濾����_-��Y���\�댘�����]W�:/{��)WL�z@��I�ĥ����+�ZV������
����J�Uײ��o�}v�XڃX�wP�}��,-~��.
���*n�O���k��kD}E�E��jR�$.=g�
�)B��F}M�=���s�������
~f�P�Kϙ���C7](�٨��,��
<7O�wȼ=6�>����IL���ˡ�:��l��T��3�͙���Ǧ҇�x� ��9�
�
�iD��F}M���xn��;d�
�M?3��MBӳ<z��nQ>�Q_S���z���s3'�!���lr���go��3'��̉�n��|f��a����^X���
m(-)*).�����s�dzT"�w�ߞ2�����Ds8p���m�Z [...]
+X����y%6�4aKx驣Nkƴqq7$"�?�$C�����?��3�
`ꡝ;=�����Ԟ$��G�jo�1�1��
IbKO
�%�X!�82�KP�lƔ��⒞������2$�-=u̖�b��>���.A��SnS�KzvFzN,Sː$���1[b���#����fL�M-n���h}��3f~~��̩jjjR�-KJ
���fj՜��񏖕7
��櫮�ۏ�׫��۴��?��]�8������cG+&�:����kJK[��B��)�
�!I��:fKl�t�a�>�(�.��/����}*o��'���]���/w�GkAL-�i�Yߦ[ǎ�������^���A����η��
7�vh���AҳK��Kl ���[,
�9J1v����ѿo�oM�����aT?�9ᒕ�
����
�s��(���[�
?7����9�Ȩc��KGz�RB�sQQ����g#='���,��
;��/�X$�uu"���C,746�t[w�\�E��ظIl�����~��b���?�r���������c�j��6�"{�Zo���.Ǟe��6�[z֏��u��IS�u5��O�.���ba�;��tu���b��7L�r��91{�B����ް��?���}����/
��4m�ao�cY��m�3_�����Rg���
�[O��U�o�{[-��������+�!#�/Y�/��D�>�x��Wv?��~̶=���r�U׉�QVy�C
~6�v���x�Ot^�
:�oG�6��r=�n�<��Γ8�
���ՙ�~\w�~�^A�	��^�-E��zj�Cӧe�Ͽz� �=��Ψ~���s�
n����[�0��^��������D~c��pv�
6鹤�X�6e-�6z���׿� [...]
+�6H��'�5��Ǖ�Z����o��ϜHl+�.���浘zX��Oz�!,�ʓ�M0rD
�9�rm�}T�2z�=�$���&XRu���W\&i�C��7���r��,��#o�o����y,�ھ�9����
$=녶���Z���y2�fjq���Ȝ��a?�l3f,�k��,�H}��߹�b�%?}}�FF��f��o׬U	�~���O��~��쑤BQ�^�����6��
����E�cϖ�N�s�
���L�����-��Vaz�-7�<�������w
ƞ=��ّ��-+=��|�sҳ��g������Z��0����5(��\�c�r��m�o
���Cˤ�R1�쒩�eH|�����7L��oe�9l��=�d�'��4��)����Ǟs��f�>���f�����=�E�-).
]9�IG
��;�<�|�Y_�Һ�D�͞�!ӳ
�r�H�6?����%2
+s�
�����n��(}*�
�ʞ߬ϓ�����k1��
����;'�ym�8�����:�����%Vd)=r���� �
+��l9dD��޸���+�m٤2��_�T�37�y�هy�C�g��\���y�u
��#?�-����g��y��	|�s�׾x;�g3����sC$T9�+����ȗ���i��sC����E at _��!�n��'{������6��
�����\��Pc]⧖������S���eH�����N�_Ӧ��
+��:d,����O��ߐ�rc�^���KD�>��s�c��V
�~
6�ܐ�f��(��2=ۜ�
j!���=7.��='_sK�)b�a�Ė�:fKT�¾�o�>�B��D6fn+��v��⒞������2$�-=u̖�b��� Q]B�o.����ǡ��XnoL-.���9�L=,C���S�l�*�9	�%��/�&=g�~.�,������X�
�!��O,�Kx�BB�aҩۂ3y6�� �7wzVv�9$�ߣs�H�H��ްc2cPi�6y�-��P��ztn�lΔ�
� � 1�����;u[p&��u����5=[
+Fz�L�}4�dd=ǤҤ�YWN���K3�nFeˤ8��39�Ś�-8��z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(���yϾ��u��(A��s��+�n�/�LTe9~��P��9�?\sg��n�/��X	�9����H�EP�y���)�ߙI��7�3+��M�
� �DzF(H���q�
0=S�D!=�Kuq��P���1��Kz������� �BzF(H���q�%=�Hu�I��R]\ A!=#f��#G�
�ܳ���폔���f\}I�6R]b����͗��ei��2	����3BQPϩ~e�����]:��Wr�M���{�a�K}3�8�<��N�S��x��A��24�`0�3BQP�s�ӛ�}(.���2W�$+��o���{ӟ��7C��[z�����o�T��� 
FzF(
+M�"`�q�U������j�%���Q,WT
���qԨ��w�+�����o�:�;b�����-{��.���f�׿����w����6#F\�lYEqqQ��3��[hz%����fHω$+�����E���?q�I2C��-8~���Pt
~��]뎩ʌ���O:�E�W_��t隱c�.\8�u�b���r��^r�X>��SŖ�:�W֦�&�
:*�_vYqqf��{�����թ�B/�f\}e}���f�>�_��&�O����}^�7H	#+�_벒�۔��
�/ ��
+��ಖ%
�|�UWq�U+�K��Y+V������_T�j�^��l_YY=w��6l�U^޵��q��__��۴*iYR��D��]:{��_����ȩ���.�6n��ř��q�H�3BQ�5x�����e�������(ΘQm��
+����5=��M�7m��WP˖��s�^�^��Ξ��Xoy��'rd�����s���`~�=˲�>�G��
�_ �@zF(��{����2'>�9��9sn��xf͚�"�˭�h�W_o�3���EAUY%�_ #=#���۔r��c�����u���ƍ;�dV�������|Y}}CC�篚�q������,���9��O��ޭ�e%�/ ����B�
�̀��R&�ˑH=��J��}A̸�T_���
�s�D�J���� �/��#=#f���0�q���o
��{zN�T@PH��93����n�.1��^��
 (�g���W_ҳ�T���l/���3BAz�nj�/��F�KLz����
+��*=�*�W_ҳ�T�`�s>��
��ѹ��g�KJ�
 (�g��ϙ<sɖڏ�kQ����~ٜ)q�— ӳE�s��Ҁ�9���Mu�
8~�DzF(�9f
��9V�s��ހ͑��@���
+z��«/='^�g pDzF(�9f#=���
 �H�=�l�gS������瘍�l*�3 8"=#�
���MEz G�g���c6ҳ�H� ��P�s�oz����^X�S'��A}�|E�
 =�#�3BA�1[�陿C
�3 8"=#�
�%!=Ϙ6.�g����.ɐ� �H�=�l��0��3i��c�i���${N��/6@췐�>ɍ�P�s
>��~��Dz�9��i9z�R���Xz��/6@췐�{�$=#��
��2�
�>�:=?���爅��U�F����ǎVLup��
�ה���֌l��L��e�+E�/HΞi�
�-$I8U��� ���E=�iSb
�3���Sd�y�K���]ٯei����������G����[�~�����r!=��,)��猉/6@췐$�TIzF(H�6H����%����tl{��A*CǞ�C��K��=�s�� �[H�p�$=#�g�g��,ӳ\Vz�M�d<]~�q��b����X�����+&]�x��X���L������I�v�u�����r�C
~6��cG��媅�����>��㽭b�S:u�_45���|�S<r��
+�I�$����|h������g��+��J3q��T`��$	�J�3BAz�Azv|d"C�7
o]V:��cχ
��Ej����^~~֏o��^u�Wz�4,�qY��"
w��%_4����~�����=�-	��(���%?ʜ(��#ҳg	L���cPP;�T?in��}{���c˓p�$=#�N�G��T�gϡ��)++	��I�6n{�7�]��f�����E'�mU���<<���kV�(�%�ʱ��M�Z߸���|�~}H[`{hX&��(�����7��qW��y� ��c�#=g���%���sz��������
+�9կl��f�E����Ċ�̠���Y&��n��	b���y�P���~K�R{��!%�qz
s����"C�	��ە���!CKN���<㬯��zJ��O���{o�
+'�&��ș<�v�g٪�z�Ё};j�e�����#Y�dy�S��[�hΝ���L�O�ICz��sdB:�[�i��34�9�"N�z������ƞ�Í���$\�L��`��%Y�_�|�I-�|�-
+�i]�\8��s,r��⒒�|y����С�g�eE���u��+ߪu��M��
+�#���]T�����:�X�w
�>��~?���!}� �wY��ۭw��Õ�"�o����S��c�L©��PxH�rY����ު����Q,WT
���qԨ��w��{����ۦN��X/ñ��زg��*"�G��_��J��w����6#F\�lYEqq�� j�˝Czvo޳5���?�����$!����\Pz�q礷7�W�m[6��<y#	��h*�o��v�;��G-Zd:��j�]߳�u��������I�b�K�<����
V�v?���gzV���W%�Iz�U���-ח׼�2��ѧ�G0����2���5���e�t�E��N<��k[*r���5e4�͑�w���
]�̪����K׌
;w�©�[�
55���+����*��ԩ�H�MMMj��С�b�e��9Xdb��{�����թ�
X>cF�x�U����,._
�٧ �X�����p��e4QIN$�5������$\���o�xs�_?�l�>�,\>��[?().r?s#sb`L�#�f��dI�j�K����'�� [...]
�}v���+��"
+�׻�����AD�#3A,37��ɞOw�l�>JjI3���e���=g= ԯ��.+��-�ww���|���bi�O_���I�h�<��Ȝ��Ӯrz��gn�P�s X������'o:�is���H��-Uz޹s�Z���ٳ��-O'6���r5sC�a�92���D��Un�+�W
𗔔�4�{gˋtv��\׳ӳ
�������?�o��U��
6-�7��>]��n^�%���z at 4_3��]VJ�[���,c��D��-=��,׻O�9Ǟ3'�2�
��97VT<�f����*.{{���
B��}"=�'��~����uGUn���L�*1��D^�p���a#_Z���l�BǞ��w]�*���̗o
,M��+ȷ�͜ל;'��_��� �wY)�oQ����=��[���r�F��P��?�l���%��YNҐ3����Yr�ƍ;������#�/����b�E^/--+�͛�/^g#=�DzO���7���62�S��Vn��d�
�k���J�~��ݝ~�
��L�p�$=#�����{n��r��>x��j{�;=���!='
qڛ����O�3���56ҳO�g.�R�q,O
�
��/�3%��~�O~�PHϙ�T*.)�o�g��l��Ċ����J��Rwx���N*�|���t���%w�Zҳ=�3BAz�AzFb�^��M��NϦʙ���3
Dz�AzFb�^�tM˱̴IW�
�=��� �[Hb��FzF(LϦ"=#��, 8"=#��
�ߣ����'�
��� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍��*���{��E/���8	4|P��&_w+ Ć�P�s��&gSX���� ��v�]q7@lH�E =��obqf0U��y��*Q�ߙI��
�'�3B`z��@A��x!iHώ
8~�DzF(H�6
��uf�ㅤ!=;2����� =�0��lz���Azv���
+�� =�0��Kz������
�4�rϞC۷?RVV�㧷� �BzF(��w�>X^~�e��Y�������/xI6��Kz���{��G����6n��.�ד����P�s~���i�9�[}%�9�Ҟ�	X�xK�'�
���gh�
�T�g��О#��f�Ez�&='V��]���sN����������]:{��_ٽ��m�F�Se肊��[��"

�b��bxUՍ�FUmܸCH
�S�~G���?[���YUP=��l���Uq����ՋmF��D
�����._oz�
 (�g��[z�T�.4Z��
�l�0�����v��u���;�w�PSSٻ��2=�
���Ś�{rIv�N��
>[�~e�H�Ӯ�gh�s��G�"C�;x8㮸z8^�t�رs.�ںuK� O�R,���b�N�ډ�555�"
:tT�+G�X/v��}����,�1�Z<�U[�x�/-���3B��,2��|�����h�_��fy�,--�ô��=��
2d�y�&N
"W��$�
�\}��g��gh�'�FV6�S�
���}��iYZ<��~�{cK�]qU8�#�^PUh�vWfkqت_TQ[���Y�����;�w�T��_�.B��E�_����
+���O���pݱVe%
Lf�&=��#/�����w��C/��Nu
�yI��M#
������p��}��52C��pu���$�3�9�en�y�.
ۺk$���{X������'o:�is���8�,[���s�^�^?Tg�~^��<�����ՉB�i��3B�g���Ӯr�Ћ
+�TÇ�R:b�%*?�L�r�Q�JuIvy6�������5�;����������f���񛳸���
��97VT<�f�L�����|O]P��[\ A!=#�ҳ��reA�Y� g�ܰ�g�++��8�IyY
��lπ�o��-���7VoxO����v�'��᜿{��y���s�侸�[]��rЉ��3n&Y�G��詡�Qm/6��y(--+�
.��7���3BQh�8a���%�Y�!��d3sC}kp��w7l�նmY �d��?3���y޳�۪0<���ZJ��v�^
�zu�LjW�7�I� �BzF(b�k)�FU�$�9q�
3�
�A%��YN~���a>�g�o��u����!=�����7�0�o
�-���3B�ؿ5�\}
�o}Cc�����
O&
��Qz�
 (�g���lÀ�o���`��[bҳ��@PH��نW_ҳ����(���3BAz�a�՗�l/�%<=�k�!��
�������� �BzF(LϦJ�՗�l��,L��dK��9���ܣs�es���
+ �!=#��
��oڥ��lz6U3Oϱ?
 ���P�s�T}y��4�g pDzF(�9f���"=�#�3BA�1�5� 
��
+z�٨��H� ��P�s�F}MEz G�g���c6�k*�3 8"=#�
�Q_S������瘍����
 �H�=�l��T�g pDzF(�9f���JBz����^Xj�2|P��&_��IQ�
��b�f��P�s�%�����&!=���[�
{�_�4��y 
�g�"���u(������79�yƴq�����]�ɓ����B�|�@�EzF(LWk�
�M�1`��LʯC��F��Kzv��
4[�g��te#��J��6R]_ҳ{�g��"=#�+�NW��������#=��� ]�Hu�����T�7��~ɏ���tlk�i����ъI���|���Җ���$/=�����)��)��
��H`�:r�~Р�={m��HYY����:]I	���{�����.��ϲe��E�1�n���F���Ξ��ό���ͣ����
��
��(�������і���z�sbzfs���|��5C/�W��(��,:�X���c��@z�Fzt�g����S�ʦ>�\\8��S���|�Oz���3��	s>�t���:L�~��Ф��2=�� �}�Re�n��q
+�2��n�,��_:t��Oطw���ǎ
�^y�Y_�Q���N]������2VE�����b�ՍǏ�_i{r�'��~Zϰӳl�y��v���
���������X��
�K����V�f[�s�=Cz<#=#
ҳ\�3t�c�o�U+����8u�w֯?{����
�l�0���k 
PR��$o�Y.�
]h}s�F��^�Nۼyg��
jj*{��S��ѣ]�b�X3p`/Y��w���ٳ������|غ�z�͈���S]�h�����l���9$�6�JZ���g~Q�x�
:7���
g�y��}�}KD��X��KJ�#�Ѻ��Gÿ{Ô;��R��H��g�eE���u�x�O>�)�תu����#�f��Y���=��eڼX��"=#��x&3����h�"��|��Q5B)�X/��Z/�TUՍ�G1
�:]I>�9���
kUVⲾ�
٥ٷ�N,���aZ��{F2s޼I'�+;uj'J�����_P7Hu}�9����77������c���.�6n���� *ӳ�"A�5������R1�j��1r�K�H*�b�W}�k��\N{��NϪI��j�9�=z����o����Օ9�L�N]Hπ7�g����э[?().
+#=�X�~�ع
N�*�#�|�AIu���׷�W����Ғ��]=�t+�r�~���{x��
E�[.]�F�[�g��-sv�{��++������O!R]�(��"C�yϙ/ss�{d�P=;fN�|��Ж�,cҖ�,S鱣GD���P�|r��q�gՆ��Xҳ��i����Ϲg�7���Px���Ѯ���ܘ=��3������Ⱥ�z��F��D
X��-����y�����
���Ja)M��,g\�w>"��rg��s�ޜ�@vKԯ;Ju}�O�zn�
+�❌�߽a�y���#��%���Y��A��gnd�=��tW����-,c�nfnXƞ�=���
+o��r

/=�{��eNb�
o�Y�f�����ț]��
+5I�����%�9�\�T�7�s����Yr@g�9i�k+E�,))��t��-Ga�s�e�6;=��r*H�37�y����������=�Kؤg� �g������7�YƟ2a�g}���z��Jr�RƦ���UU7�Kfn�T�A�;���}Un�<�����
{V�\���
f�m[�8�Y������B�ő��&�_�̍��ܐ�R�n"߼g�������|i�����=��ﺚU��/�X�c���o3��6��P{��g�3�3B�������FU�
�9���1�\����v#��J���9K#�q��,�x��D��sύB�A���I8��~�g����j#�Bzt�g�"��99R��$�k#��M�9��@�g at GzF(HW6R��$�k#��M�9��@�g at GzF(HW6R��$�k#��M�9_v��ș�M��^
��P��l�:]I��F�뛄s��K��~
c��ѹ��9S�5)j|��_,�l��� ӕ�R��$��(��� �H�E =�Q�Ċ����
��}G���qIo}9��#�3BA�1[��
ł� �H�=�l�gS������瘍�l*v; 8"=#�
���M�n G�g���c6ҳ��� ��P�s�Fz6�
 
��
+z��HϦb��#�3BA�1[��g__�º�����7��X��# 
��
+z�ْ���S�a�� G�g���c����ƅ׆X��蒌� ���P�s��&�9<Ƥg>
 `*�3BH���X������.����e������ |"=#�g��	d at z~�U���
ӫ��
���
��4����.�)-m��H�	g��
�'�3BAz�a��7�������G����[�~����[
I��8~���P��mp��8=�����7m���g�P�CBzN8�_ >��
+ҳ
��ѧ��>����
�9=�1��m��rۓ�?�x���WL����q��7L�r������X3�붿�g����l��ǎ
�U
����
}�y�{[���t�*��hj�?�x�x���{S�����[�Z߄~���}�����.�lYEqq��_<r�~Р�={m��HYY��fp���P$'=�p{A-�W߸ҳ$3��ř ƞ< ����|��������R1�꬯�RiX&�V�E�ة�J�2%��r"����>�/� ����.=�ꌪ���A��gh�3 S����z��
���
˥7CzN��ҳ���ⶭK����=<���kV�(�%�ʱ��M�Z߸���|�YҖ�
�Igz��m�tl�gh�3 S����zN�+�~��r˥7��
ҳ�D�
�f�����y�P���~K�R{��!%!=/�=�����w�������7=�q}���V�8
NL�ر͆
��˻ʸܫ�i�7��޽CMMe��w��<z�+V�k�%��w���ٳ�:��cN������W�|غ�z�͈���
8~�DzF(<�g��g�0ƞ�]Ps^������l>\}#>3�:s#��g��g}eG�V9��ۍ8����rqQ����W�YqHVUݨ0��W'�KK��0-~t�=#�
�9oޤ��ȕ�:�rSS�:�
:G
�b��ߖ���

�6������y
�z�so�hdz���f_�x`���55��Vm�
���ɀ�o\�9�o
fr�{֓���\Pz�q礷7�}b��m[6��<y#	��W���J}C�m�k��`��B��f!��H�����{
z�8ZŖK��;v�
SE���ٺuK�^?	�X�^߾��z����t
� |"=#�G�DNڸ���� ӳ~�̞��}�=�y�+*���tP
��F��C�c�
iξ����ՕzbIz�k+�}q0	��ۼ��ώ�T
+ql�q�K��
5CC�_���J�;w�U���]
Ԗ��؀��O�g���̍�6���
y�̾�ʋt��[~,�t��K�
��I83���9=��ނ����ʞ�aI��ج��f��'��`�c�
p���PxK����o�Y�Ͼx����
� �W�$�H�a�P����v�f?��я/9�l3sC}kp��w7l�նm�����u�������W�
8~�DzF(
+MϿs��s�L�9�U��싷X)��_ZZ,
D~K�Oc�|]���&��@zC\kpԨ*q�eNL�3�
�A%��Y~o��[��c��=7��]���� |"=#��k)�.�9/�ݺ��9%��@z�ۑ�/ �H�Er�sp�M™AvS��ˀ��O�g���lÀ�o�
�g.�R�q�
O���͙�S��
p���P��mp���`*ҳ#�_ >��
+ҳ
���Lxz�iמCr�G�v��(�>~�DzF(LϦJ�՗3�����Ԛ����� H�3BH�abkbqf0U4�U��. �H�=�l��T�g pDzF(�9f���"=�#�3BA�1�5� 
��
+z�٨��H� ��P�s�F}MEz G�g���c6�k*�3 8"=#�
�Q_S������瘍����
 �H�=�l��T�g pDzF(�9f���JBz����^Xjb7|P��&_aY�
^x>�G�]��)H������|v�H������&!=�P�Ϟk�eY�L^x>�G�.b�*���AzF(�9f�
�=�#F}
����I�3��
�
1���%��a���;�Q�.b縗���AzF(LWk�
�M�1`��LjӕD}m�����-�!�H�~����+�NW�������#@X�`�8"=�AzFj��l�:]I��F��Kz� aт
�����A����t%Q_��o���k/??�Ƿ���O[�����e@����
��4����m
��6�ϰ�K����/����0v�\��ҡ�~���X�ᓏw>�x�-�����iA���9��sbw����������1]��}�����.�lYEqq�\y�H��A�{�
ھ����?���h�NWR2�s��[}G��o����n
�]?䚡�?u����E���s�.�����@����K����l�Cf�9i�k+�d^��^5l䘿?f�(���c��f����z�{��gܕ�Z���IωU�a�=O_��9C�9Q"Nϒ%C�L���
?�����0��Cj�{Ѥ焼��g�
"ڷ߷�~౻���ܵ�
O��Q��Kϩ�9�g4S���W6���]:��y� =C���Ez.��0pœ� [...]
z��������l~d����!=G�s����a�Y.��z
=��+���T^|q��O�
�����
ů�
�%3�ƍ;Ě#.��[_ٳgg�H��ҳ\����ƞ�z�V����q���_�~�z�+
;�ٰaVyyנڐIy}�9�����?��
G�՗�;�g�Si7O��ߴ�F.�q�9r�M\�<`Y..)ɾ��;��������sX,�%��!~��^��[�n��UX^�>x�����F����9���!*��a���Q�g���xH���$�19FNz�	r�-�'3����h��{z�瞑C�̜7o�ĉC�\%�sii��Mmۖ�����g̨Izժ-r���O?�ԩ�����&��rsN�~��t��X����ҳz�$*+����ݻwP�E����1��)R]�h��K^Z�
�m�z�Ϊ�Uc��ҳ�,s:�+�.T~y��9t�F�ob����D���
�
Ff�
+=��O��_����Օ9�g�N]�J�j�3��6?��,���0�s ;'	}��eM�Fz�	����\�q�%�E��s�~���{x��
EH���U

�j���ϋ�\Q1\���t隱c�.\8U�o��c�|��������>)-))=�X�^�.����)ՌT�7�s����fndN|�,�-�YF-H^��
="���/
*�On�1���m�%٨�g�
+K�QÊ6/V_��ӏ�ܟrH2���p?���{n3�	*���(����s����IB���K�~|6�&�<s#s"7O7���=��ܨ����k�/=�e��2'�s�A�{eH�?37Dn�v�`��Pgn��B��
���{�:�q��l��,E���o����^��y��漟�%�H}�D�̍B_r�q�=����*�I�qD7��[����5���������{N��
j�$���A��[zV�Y����E$���f��'�G�g��dJ��ޯ�9�=��-=��,W����=��2U3s#[����;FY�Ē	�u*���VL���Ζc]�Wk��Xv���g�r�F�/9{N�����pm^l�9���Odw���(�@����>���G9�����
��9I�c�og��{����B����ܦ�f)�o
�^��
��ukE��_1,--+�͛��M2�YW�A�;���}Un�BM�z���׉��"dz��s*+�g̨f�.��
�_Kq�s��u�D�S�������|i�7S{u����Bą~]�*uC�̗���*,�v�m��X��!�����Rd��AJ�Ě7_%ߏr��8	='ؿ���IB�����3B����"�.v��~�k
���=7�⯥��ƨQU"CgNt̘o.X�`o�����.=�Qd���z���
%�/u�������LW	��t%Q_��/�9�g
ҳ#ҳ�g���F�ӕD}m����g�o4(�ʱ
<,�{�?}l��߿6��&����{zNu#=#5HW6R��$�k#��5 ='_B�br�C
�S��� ]�Hu�����T�79��x��b��q����
�)`�2UJӕD}
���IHϓg.�R�q�
�W���͙bY�
^x>�G�]��)H������|v�H�X�ݵ�P��;�����Kz뛄�
 	GzF(�9f���t�X������瘍�l*�3 8"=#�
���MEz G�g���c6ҳ�H� ��P�s�Fz6� 
��
+z��HϦ"=�#�3BA�1[r��g__�º�����7����4	��������G�v���]�NSr�+�3BA�1[r�3r%XIH�f��%��79v��]�N�e�+�3BA�1[���i��kI,�tI�y�g�j�R��7�����a��˹��iR�~EzF(�9f#=���l^M]"={Cz���l��H�s̞wˬ֠���Fz6��.���!={Fz�AzF��9�ϻ�>Ř���/�ϟ#*�W
9��#�;Z1i����/\^SZ��[3�����e���
��3ҳ
�3"`z^��g0mJ��wfH�A<��S��}{Ǐ�߷߷�?�TQQ��GȐ��=��%?��ұ��#ǚ��
;zD_Y�p��u5���>}����������[zN�>���/���{��s�]'v�k/??�Ƿ���t�:Kl�O��n<~�k�ӂ=�݈l׹<�&m�{0fHψ��
���S�{�f���7�
�����sH�Iz^:{���?3��~zY]�g���:��>��#G����O�%0=g�:�*�W

6R<{���"���}}��n��Z��#��99{��t#=�#={x�G��*�kYZ��-��Y�@k�m�mOn����.E��0e�
��a�aW]���?�-�?��g�o�-r|E?�xo����N]Յ퓏w�G�~Z�}����1�<-��O�rB�e<5���Ğ��OR����Y�t�<~ղ<K�����F��7(tx���̽'���\�g{�gO!ӳ\Va���e�{>|�X
.R�
��Q����K�a���Z������什�8"~��O��O.i&����U��I��e}���'���sz��S7�3�o��g��Ӗ�g���
�[E�x�W/�{�X��gә/ߘ�|oz��O�6���ڡ�v�n�hs<r�L˞Q��ް
A9wx,�yƝ��޸V6X��k���.��f&�;�Ӿ�|�g�{/!c���!=#$iL�G��T�gϡ��ijjR�ee%����&ҳ˧�'�Vq�Im[����O���kV��}*�gޑ�M�Z�X~������� ���e�Az�7�g��
���-2
 [...]
��i�b�3ϱ��җ�KJ�/�G���a��L����>QyE�s{]�>NiպMΗi�3�G�{C?������n�^x37��Yp�k+-��w`�w]P37��
��vN���sVox�������C�z�sbEpf�?��v�K���ұm}���e�3��;����~�=T�!=�ߒ�Ԟ?�4>=����77������c���.ظ���⢂�5�-I�R�\i!/��{
�^}�,�J
�CY��(��(7�KA}k0�}b�F���엩g8��������Օ9w��iO�T�Nݓ��׾����!=�w�y��` {/!c���!=#$�
q���#�E�y� =Cǘ�ݤa�s�g}��-�oz$�̍�ƞ�?~��e,�ӳ$2����9�������
~�={�����W�L�{S���0��-3��2/b�X>�}���s��$gT/-�eZ"��V6{C_��ӏ���r�6�g����u>Ǟ}
��vN��xH�rY�Ў�Y�׍w��#.Y��b߾����.���XnhhT��С�r���/��Ql_SS [...]
+�IZ�{.(=��m[6��<y�Y�g���J?�Y�c�҆���ڝ׻o��1K�
�
�� !37��|�z
�w
Y\�
A�T%�y�:5�)�k�B�・}���=�=%ރ1��ɐ�7�VmȄ4��7Z��Kϕ��3fT�
�j��p���ڤ���b|۶-S��i[d_�}��
,�Y����UU7��}0��Ϟ���%2��Cz�`�K��-3|�c������ӳ<Y��,g�y��`3I�}��`�Q��%?���ߌV���Ryg 9^�]t�0a�[���s�37�'ٓw�_�eϨ�c�7�M޵��~�y�u�{�}��ī��vsϵ��`�XW��K���o�dH����Ѧ?:�犊�"��5�ҭ{��_�b�رs.�:q��y��8wϞ�-����
�9(��A�f��s�+=;~�_�}��.�������Etxi���O��g�"*��Y��Z��2�X^�ej��l�Z�s��5���O"W-��{i�u�Ǟ�콄
��vN��x���ɚ��r�F��d
��g�1�{�K��w� [...]
.]�f�ع��gd�c�r��m�o
���B���b�)��l^M]"={Cz���l��H����6=7K��yԨ*mE�---Av޼Ic�|S%ڷ��@�cΗ������D�͞�!ӳ
�r�H�6bKKD
�yɤ砘z�'=�WS}����
�X�s�}��ǖ���k�%v���s��
��毥d�s���H���5�=4�g�~6�ܐ1=sbƳ�
�aÆYݺ��q7��vS����D�=�H�ƞS��g�gD*�k0J��L��dK��q�"=:�_6gJ�O��ʚ��ȥ|��l�3��LϐHψ��
�ɔ����ȥ�o��-���d�9��u�4%g�"=#�g{�g$� G�g���l��d�� ��P��
FzF�PY pDzF(�9fϻ��;aA��`**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨����g__��:���@���o�q�@lH�E =��obQ_{�o������ ��v�]q7@lH�E =��obQ_G)�o��y��*Q�ߙIm}��P��
���`ڔ�>�"��o��%]%
+��Q��
 �g���l��,�����(���3BAz�Az�HW	Dzv����� =� =K���P���F����Ŗ����ȑ�A�*��9�}�#ee%��Ó���� =�h���ݿ��}v�ʠ�Urr���t��������*��<zи+����
�T�g�����z�{���r��$#=������x�O�3��l��y�9�w�8�����Z�V���[z�
]:��3t4�-��D/���
^���zN�+�~��r˥7���,��M���v�
w��{|�晞E�
"=�

v�"={ +�t����{���
����:���H&���ު�lhh�:�;�׿��^�Jǎm6l�U^�5�(��/�@D����k3�!=�e=C�L���~�uC�]<��5k^k�z���^x��e���l�˥�-�6��1"��ǎ�-/��e=�DQQQ�ˬ|��q�<��	7O�v�m�o��w�?�w;U<NSS�e�z��<��/�;��E��o�1�yڸ!.���k�
S������3!�=����nܸC�
1�e�*���|�'��JV�?q �Ȅ��
:Z^~�e�����w�֋�WUݸ{�A�����R]_ ��'=�=!����
=��7Z�p��KJJ/XުUk��E&��k+<�������g��

:`Y��Zn<��>��<5�,��}��*F�?�O,�
�S�~j��ݼ:cҳO��J:�-
6=��
x`���55��Vm�
��ٞT�
de�	6��7m�P_#����Ȅ��W�X?v�܅
�N�8$��
QϞ���!���s08�Z��X`����l��AIq���g��o��Z��8�k5�d2���k�������-�w˻VQ[=�>sCEj��ꟃ�y�zv9��Ș��y���n
�]?��U��Ǟ
�U�g?/BsE�p��}6CI���ϼ�L�ώ�Hϲj�N�{���z�F��D,w�Ԏ�
 p��`p>�C���9�������
��ܰ���Җ"47����;g��qC���D�qy��=fy������&=�_T��3��=��|�Ћ2�|k��\��Ԥ��س���{
Q�=������ 
�s08���ҳ��r���,�oŏo����9��z�_~}j��-CȊ���س
ҳ����R��s�Z�t�� �A�T�
<��w�;��՛��3'�y����D��'	�ʲ�����}37 �!��
�
^=�
��O����on�s��?=;vT~�O};�~��>aZ%c�����=����~�V��Ȳ2��\h�+ŏD�.--2o�$�}�'�g����A��

5�J4sbfΘ1�\����v#�����{�>x���D�U��
����̉�����1}�Y�熺uF&��.u?���jV�ܮ���O��)�=7H�
�t��rU�n��.��99R]_ �7=���߯I���24���~�琐�%�U��
��� �*=��f��z�&�=!If��罐)�|�ߢU~�:jT�ƍ;d���]��ݥ(�@��ݺ���6���毜O�@zN,ҳ�T�
HώR]_ �p��ԣs����
��wz.�ںuK���R,����/ѻ���\�o_����r>
�9�H�6R}6 =;Ju}"��g��W�X��z�V�����/����
�j����s�aì_��uo7�|�sb��m��lxz�iמC�/SR*���(�={���j|� ���[ӓO�t�y����G��-[��s�ޜ7�7��<����˽��5������'V���T)�o��y��%[j?������
��/�3%�V �M����w��~α�̉��#G><g΍ϬY3�������ƞ�=��Ah�sl��i���o ��&P�����Y  $!�����a������@޺U��7�P_�[��{�o���ohhT�{��+��
+��T�g p��5�}�
�^N�����sCm�=7 7H?�"=����� =�Y!����
 �H�� =�Y!����
 �H�� =�Y!����
 �H�� =�Y!����
 ��I�6R}P�3�	ҏ�H� �(���x�������(��T�g puzv�YH>�SS����@�8NM���<�����.�e��>�M�B_����Y�ؠd�
�- 9�mdH� 
+�qj�$�gǯ�$���.�j|��Ջ
J���oA���f�g �85Ur��i�Bm��?�$�'P&��jV/6(9wZ���|�62�g �85�ٽf(�Ջ
+�9<����@�8NMEzv�Y�f�b�Bz�9�gP�@�S��:��Y� =�׬e�z�A!=���
�3(T ǩ�_�I��N�2=�_�#��.
�Z~j��?v�bҨ��?_�������m2�
�z��hj
+�eJ�^�3��Z<�X��^5l�B_��v"�N�9=�t��o�}��o#CzP� ���E=�iSb
�3Czv�,KgO���g�]���у�
Mz�&i������G����[�~�����K*����7=�w��o�9x�g �H�6H�.�E��1�<-Z��:�ϵI��bL�ɔ��4��p�{F��HF�f.&�7ɿ1~P�qI�6H�.�嚡U��I�T����e�����n�,��_:T�
;�
=��򌳾��v�)��>��e��0o�O��n<~\�Jۓ�?�xe��z���e�����C���&�T-\ާ�7�B��X^�hՎ���7ےNr�Pӳ^ ��;����ߗ��m��㝢��.^Ȱ����Ο���Z��˦�ݢ�S����/߾
�t�ٲ�n������~��
�;l���E�s��=��S$#����{����r�!=� =;�7�g��
��#��۴*iYRl@��PqQߴ�F.�q�9j������⒒�K��l��
S�_�ss���N�".�f���BeZ�n��=�� d���t��g\�L�/�2�*KV1��O�K�L2����U֪�x�
;u��N ���l@�$�����[��S<��k[*r���5e4�0���zf��ؽ�%����n
+=3�74�TdY�9=��}�����.�lYEqq�\y�H��A�{�
ھ�����B��ϣ��
����77������c���.�6n����CFFq�Wh�浗����[Է��+�.T�|�E��
�Ѿ��Os9�!�;=�&ɖ�4��
=����훭/�yue�=�'�ҳ�`U8�G^7��;�Μ��S�$��
�~���8�Ϊ��T=����Hυ!=���
6ҳ�+o�w��^�
pr�2���@Q��E���3_���g�ȸ;d�ks��'�r|Ѳ�e����G�����ҡb���
�JϪ
��54h�l}��O?�s��a�(�=��'GI�)0���{'	j�s��-��9x��g�/����%O?>��\�sHH�a#=�8a�G���Yh���M��"=G�\2=�Y*萑����0��}�aE%�H�>(+բ���=����]9ۣ�1���IN��g%�o
fώUS�
J�9Ǿ�qu�@�s��-��i{��֠�琐���
����\nۃ�Q�\U�
v�c��y��GW�X_SSy���*�
:tTn �o/��Q���`��^2oܸC�1����={v�q��
�s�7T��Yrs�̸sҚ�V�+tII��?�w�
�ʾN[Ʋ���[~���
}^�}{,/AeA�f��l?6i�z%{{��'�ܶe�j����qr6 �NHz�~�E�?�yϪ�om�o#CzR�n��3 ='y�f�ez�Cdhq�iۺ�Oz�瞑C�̜7o�ĉC�+�sii�
�ڶ-SQ���ϘQ-��U[����*~کS;�[MMM��e�s�
+����v
+򂭆��Mi�Kn?x�ȗ�/q?!��س8�լR7%�|�,���ͷ��7�r�(ǞkV��'6K�u�� �?N�/���I���X�[��S���w&�Ihz~���|���짾i��b#���
�f���������}X�Ш��f�E��񽢢��s�~���{x��
��n����j�Y$憆F�~���Eh��.EX�t�رs.�*���1c�Iz�Kr{A����AI�ͭS!���R�?IϹ�Q�E�KǶ7�
$3t�{���xGz[�O���{��"7O�~���:���\WW��3�"_z�#�r�F��t5=p`�
��\�sZ*��_rJE�$=�~F�7����?�F�n'�e��i��"Zn���r��M���K��lnPo�,)��x��{�d�?=��{��
>{'�9Q�O*?\�q�$�*�W:��7���G:�=�g�==��,W�Lϝ:����f��'�ȱ��r�L����;��g
��=�sB*��?}�A\����>����_���Iz��������_v��O:�E�V���_��+�6� �y��|7�ݶ��&�j���^���d��WO��r������m���X��ٰ���n��a��V>��7P˲V�k��+�r����+t��7��
��W�]�O�f)�{n�
�����n�0�[����Y$c����b�r޼I#F\¼g]r�sZ�
��JfzN����T#=[]y�<KnVDn��{��+?5�O��]�ݠ�7	Ͼ��
%���s~�4�S����
��ܿ='Ϸy���>ӳa�7������.��%��Z�C��{�L�9��7n�!b��O�-h����)	�y��%[j?������~ٜ)��5�P�/��
+AI��M/������qӶ���'3��N��}v�]{������V7-+-��7	�wCo��N<��a#]ޠ^��㗅3���=���
۽>�_�
v�o��*BsS��~��'�x�]?��ܥ�9��#=��0��BP��rd�oɹo#���,��A%r�q�/pA������V���[N-|p4_�
GI
��{��	v�9��ڽ>�_�
�6��9���;&L���sf<���j�8�9�H� `����W��,�41�&r�$<�
���f�K��
�g�{����9��ۼ��?�{6`���|A{��}+��)���,��$='
� ̖��\�Ш��,zSut��~��7�>��s����{����r�z����w��|;'�{n�}�����=��r��F�|@zN�3 �-��9[���j�����{�x���:���T�g 0��
�s�H�!IZz���̮=�2�^H;?O�x���Gr�� �X�g/�^���y��(�OzVrN>�
+�
 
�,=�'��
�H�AI�ɧYa���Ԥg��ͧ���@���I{gBz�
v; 8JMzR*�w&��76�ܦ4�_�w)����gS������k�\�����ߚ��&�����#
`�Z���"��3����	�����&+���D�a֠�h� :��G�fȬ� ����DŽ����:t�~�{Ow����EuN�v���s?�w} 
 }��=eU�N�s_7�c��ٯ� �)�g < �8N;  �{�����{�
[������sޔ�
�)�|  0�
��=�!�C�bq~���  `
+�  {�C��"px��@�  ���� �g=`�bA�  �����M
ش�
�p�'��S�H�s��m[5���!�����������t �_�= /���������K|����=�VH���[o��^N�9��F�G���
�̱u5?�+,	�E��3J� ~�
��<�Zᦏ�-���zG�[�P\�g�)�Y ^�Z4�\[�Ó#��J�yΫk���[��Yzivo�-�MIE�'�Q`� �6�g ��ȱ�ç�����/Np1
�+��z��#�N���xpݞm�,-�g  � ��Z�Ύ��d�Y ~�����&�#r͞�?��G���3�WV
$˭�&���V[�c0s̥�I�#��f�t���eب�GI��yeͲ��Α��u�={=�瞫�.'�K��,_nj"�N|C��閰
�,-�g  � �9P����5da�9YR<��=o\:��l��_�B
:s~�""�|���,� �<����/�;-��{��=�
S3nޢ%���̘�%��
ZHM^�ݩ�j��{��;w~�������ך7O0mw �3  �
�>=��O�>��P
z�{�,T=.������/�=1�]��\R�1f�������R�+_�xQϞ��6M`G��){>]}6�%S�
Pݜ�g �_�=�v�.�Z�;��@�z��޲{Ǟ
+�����ǿ��[R�H9�}
��s�o��Om�8{f��Y�j6(
�grQ�OZ�,�1<�wh[+7`�  �=`/R�z+j�ZWzV��\���
��QO
��=�պ�~gUe9-��l ��3]�
ڎ��g�U�/\��������ն��$%�ڷoI�n7����_EG��ys0>>.�`(�g  � {�m�[!��.�3�f�(ʞi�3oҬ�9,{^0;�l��U��*
 ��x�]{�����"ԞϜi��mƐ!=�'&�:��ډO��>q�t
[g���
6���/*:D������� �g �E���
+�+=ß>>H��y3E�u4Ӭ
sú=����31���m�=8�i{V�~9P]wVj�[�|>a��֭{z�����
>�|�m�I�ҥ�iG�rP�3  �
����mE��+�Vn(����Lm����9����D�G��M���ې���&��� �pڞ�����R�3��;س��=�,�q �L۩
���y��R���$4� �=�V*�@�<z{�޲�E���Ln�|��M{��
+
j�T���ߴ`�&�Nɯ�U�d#yy�D��	��q���uܱg�>by���!<d�z89��ر�D�������֬ٹoߒ�
1� �`�b@
+�G�|l�~�,!�� �g1�?z��me�‚C�'܎�R�'n^���NaϦ�� x՞e���)�#,{��y�3p(���}���r��j#�=���MAo �ўOW�eS�2`� �˞�z#��}`o	]�ҵ;����:�3
ux��Y/o�N�1lt���Þ�)�gS�� l���9�۶j>3cP�
)�����
d#{�3ʪ=�1�>�ٯ�g���
�X�^{�Sv�a����9�M�g��Y;yIRR�}��t�v3?%���a�@��+7,���%�a��^Y���ߟQ�v��~/��JI: @
,��ƥ�"����ێ
;�~��9?_m�� �ĉI{�N7�v�ӹ�O�C�/^\H'�**:�f��2
�3�#��i����Y�9
�g��\Y�?  OcɞB�
b�Yo*Z��g���t�WQ�NQ`�@���y�����mD���1�f/�3p(o�|!GI��{b�= �)���}�"�����od?6
�g
O����Lm����9����D�G��M���ې���&��䞁�s��3i?z�
��l�
  �8Q�L�y�
�Z�Q���{��T���
V�qc)��5�x`�@��
<�  L�מT��y3m�Þ���M��!�Ԟ�
ϟ�i��M��4�_���F��2�vG��{
�
  ��hϛ>:��r�j�g���;6���r��9=�ߚ5;��[ұc"�� �{
�
  �xu�Aـ==`��C�� �س`�@�挀=`�  `
+�Y
�g�����#j�؏_�= �)�g1��AL!�g�{�
[�
+ٔ���sޔ�܎��g  0�
{�+�g#����-P��9�� ���Y�o��"�;q ��{��WRo}1%�={��
+

+>\<�
+ v�=[i	 $�l
�s�{��w�+����+�1 v{ �
��:��p�"� �Ƅ
�+�����.��g @����{w/^P�3 1
� 6���)��s_7U����OV����O\j���:z���݋W�
@�{ �M���Ğg>>�whس<�ޞ�763�������$h�:�|�̇}��I�aR`� ��� a�=�ޡݵg+6
{�c/�����!��귰�Ȁ=��g @��?ҙ��}�����C�zu�bf��_��"�#G�޼9X]]߭ی!Cz��
.1�=s�����m���d������� 
�}VIV#+?��}��_C��:d���V��-���fm���$>>� rس�^6.�􋜷2��M
7�wh׋`�Z`� ��� a�R�BhӲY�c{�?ӂ��
�
�������x"��[7g��Mܗ�ߩ�M*{��%n������u!��t���H���{��
���9��B�@<��V��_e�A��g�МW�����V����>�
納]n�����]�ͫ�ޞ=mSƣ��f��t�"yI붉��u��6�홆tw�O��VWUV���u�={=@Bƣ:U����a��9䙁=1�g @�8�{��

� ^K[���U�[�|>a��֭{z����u�|����ګ֡��Gb
�Yo/��٦��F�У��S��7r�W/'�y`o	]�ҵ;�^i?'jx��V�
���Ŭ���W#
��5�%��%�J
�g�$�z�K�u��7$�-[��Gu�W�a��LS{f,
������ a�|�3o���b
�ܳAθ�
z�L_[_�H�ȑ��rrr�:|�•��{֒���t�ِ�"ݪEB��x+�L�$m)�����ӂ9��F���l\ǔ��bȄ+�ƾ��-�
��홅D#g�gm<�����F���Kwm
yf��;���
����S�:C��s�1+�̸8��ƍ�&�.
1g�h�g�b��6{j�Eb���=k�SV���ߎW��	���̌A���p*7���4	�ZM��V�3��Ɔs�,�

J��&&�e�,m<*{f�k�� [...]
+1�ѮCVPEBt� rس
�f�u��5oN�#E	��;���L̺;��ae�T��g���I_�+7����=2
��B���R���=3P�
@�x���7�3D��Ir��SK��s
j�܈����_���g��xcnPMW�V<A_�f�}K:vLĘ¡��{3�J/�`vfi�6b�		�`�g���,��#U�[�=��Z
+�d�_�l
��������
�
@X��}
��f��Y������7��L2�J6܄^�3�p���a�?,,�^
}��-)b�f(�>��Q�n�Ƈm0�;3�=1�g�{�{��9\$�LU�ak��@�
 �9*����0�g`�g����E�^��3 1
�9*bО�Y�@O-9�g����E���{ f�=G�ٴ=2�SK�
��o�r3Þ�#�Lݶ�> 
y�9����+��tC!g�3���L�t�N��rT�8l������Ϡ伲fY�st���@ډUU�h0����D<񬞭:\�{�)��
S
�<!dSr��>q��,����<��Bڳ_A�
 E^{V���Q�M�`8L:�O0'��S����2��nZYq��v���d�y����٠���U��h�y{��f��J��x�Y���L�} !'�|����4 1�,928����>Mi?y(�p�Ї@ �����7/+J>��O媄�ݔ����TVm0b(�^;T�6����A5�lH" [...]
�y�x�Y���=��v+���i�X~W  L�ў�}�
+>�2�WX�g����z��Ҥ��ܳ^��I�p'��ێ�L?0hK�aϾ��Wpe ����zݳJ���,ۿ{U���C����nj=���X��l�K���f�
��O<�w�{���+��  `���Y�~�
6��*�ˬ�g�B�nZ[��ܳjbU�17T��F?��ijz'��璢�i�����i�X~W  L�מ��s���
g�����܀=�8�_��  S�gE�a�a�{�
8�_��  S`ϖh���-
V
+]��{���+��  `
+�ٷ���}���
+�,  ��{� {v ��+��  `�����)O�!��Ua��
+p,��+
  �Hm��y���Þ�=�_��  S`��:�����٦��
۵�����N�s���
+�,  �{��?i��ok>]���Mn��=�_��  S`�@0��X at lϐ��'���)�1��)�
����/��� `+�g �s, �g����n$��xe�}Y%��  [�=���c;�y�Sc�lMZ��ݢHo]��y���@�@�'�Q���  [�=���c�s����  {��=����=��3  �
{�`� {��g  ��a��?9v�,
����
�~֣K�@|���+^�vh@<�
u��m[5W5ž�!�+K������]�
�=�>]׭ی!Czn�
������Ν0`��ߟ9z����ڠ�(�{ ���v�.�Z�1'��c�����{��ƽLn	�whس<Dpe�[36�z���x��= �
+�clṕ���;$��t}P��> ➁���3�аgy�̞�OZ�\���
Z�=��
 ��3Ƒc'�O�c?"��chϰq�p_�>g=[f=l�
+�̞�k~
5~p��}/+�KJw���+��uo���M�������@3��ã�g=�M�Ț�
ye񪸸+*v���.^�H�3
�D�
���Ɔ�f<^��a��!�Io�ڽ����v
h$!��!{�ʞ�>;�?��~d=�ה��yܸ׷l���d���wc�{�L]��ymݺ����п����W���#{S��o��=�e�3  J`�@$Y��ٱ�\A���ОAġ[��b0V�9!!����E��Ԥ���,�6w�,j�;v~@��v��V�;S�Z�zMW�y��Q���n����\A6��_J��6i`�Sn58�s�
 >�%
+{�3g���
��2'O
��.��@ ~߾%�[7g��xq���I
�
��ә�69�
yUSS��
{ D ������x�7�g�s_�p_������������r��ŋ���xMm��������<tqIo�D�7�q��CG�d�m
'�g>9��m�M^�iz[�sXW���K|ɖr-��f�J��������
zon����,�L��
K�}����4�#�K7�N��u�&�������
 ��3L֢w�[)��&ʺg���g+u�z�
4#���Ϧ��
����^$vK�W�>�lj�|��Z�6���o�9��g����h����+:�z�L3ʴHC�Z�������P`�  q���u��Ɇ�{ݎ�
+#�7�!�� ��ƞU�
*֞4����e��S�ӳ��\����vN�U�*��v�ڳ�%�M�=�
�M>�X�g�#�JtO
&'��?��ɓ��f���3�`j�������= � �
����Iޟ�%����]��ꔨ��UO��y��zu��ϛV\RD<;!>���
�b��ش���g���A�pu��17ƍ{�㏏�۷�c�DS{&fL1
�Ic^^�ȑ�Q�
 ��3����`f��a��z���'�q~�A{V��)�*̏�ѩcg���17�6�{�#z{޿��h����-z,��
�� ��3��3�f� س?�= ��gy�j��:]�3��9`�� �
 pڞ�*���S�3��o�/�`�m�h:xs���� �=�?��3��o��I`���7�=  b`�b�M
+{V�Þc��j��
��ߟ!���o�^�B�� �س`�b�=K�؞a�‚C�'�lJrR�'n^��vF������,�u �
+�Y
1h����c++��>�漺�l]�#�t��Ϊ��v�7�+,���<�9��բ�G&fe�z�b�g��h<~ř+�� �i<c�� ����7�j��v��fk1h�o����zy��{K�B��݉=�'$������j� ?� �<����/�;-��;lt��0`ϒ��+�g  0�F{~�`W�{o�s_7��,9��3�Q���+��9�������L��g��
�,9��{  Sl���9���U{��� ��b�Y,�g%��
�=3{f�iس�����3  �b�=�e��B�yܸ׷l���d���w�N�J�h����%d���{�3��7}k
�3����5��ӑ{�`?~�
  �X�gQ{���+���9�^���9y�`�w�=���-iݺ9S�ŋ
,�DL���]������mȫ�����eس�
fg�o#r��f�y6{i��Cy{�
9J�>@ݳ�����3  ��=�mռU�+V�=��u�ᇳC�ޛ���r}��=c�p�k_��}"�����ƍ�&�nݺ���?����=G?��g�~��s×�~�
+�  Lq�r�x��1}ɿaSW(Q�s}�yE��BϞiF�i(W�9X��

+��z0�3��ǯ�� ���y3YP�~j09�����N��_4slŞ�SKG��uG�Y�3��ǯ�� ��9k�;�wtb�L����ٷoIǎ���L̘>bēƼ�̑#{��Y�3��ǯ�� �OΖ����Ӈ-Z�XX�s��3��ǯ�`�y�}�a�^[ň=�My�o�P��S+
+�ISp�D�$ۍg�Yr|fϒ���W��
1�v�J_o�Y�^�U7���%�V�72�7�8o
�g1�ƞ�,,8Ty��(���>q��,�� ���g�
��+�g׿3%�Wd^	>\b�`E��%*Λ@����,��3 V��gX��Q���k�(��g�ĔP������ �go{1�9b`Ϧ{�[ĔP������ �eϦ����r��6���
Ҿ# �s���M����)������bŞ-��zўQ�
b�s����^>/�
��CRk�omu
:Ij]͏�
+K�f���'�|ؗ��D
&%��}������B0'w���p�(�8� �&�؞=zެ�#���{���@f"�
=r�d�
)�vس$8i��N�E�[�Ӧ��;4�92d�����
٧W��s^]�!��ܵg�7������
��D���k�{ʪf>>�ѡ?��aϒ�=��YO��y�v�{mس�YN�gـ=;� ��ƞ7}t�,���&ޡaϒ�=��Oo
+s�Q��)fJ�Y++��>�RϠ���pN����;�*��%߼�����&��䣇�f��t�"yI붉��u��6�홆tw�O��VWUV���u�={=@Bƣ:U����a��$䙱՞�
D"�����ٿ����N����][�#9�a��=�%]9�5�r�������I\�
r��1�r�D`Ϫ�6���_�?������,�~ V��33���
�+�
;�~dml��5?�?8������%��H�ڕ�����U|uds�vҷ�u

�>�l����@�
�o�+�W��ő���eO͘p�j����$����R{�W[W]y�+�;�ڶI�_S�9�V���]�W
;�ܮ�G�
��	i�NW�
�+�ЭZ$4K�7PZJ���-�
]�vg��u������[xC�Y��L̚���#���3q�]=�e*Ӣe������8l�N�ajό�Ì�`U9Tzɂ9�ߝ��dDȨ���ռEKr�I�
�L+�vB��M"$���y���	{�b�  +пPQ�ޑR]wť��9!!@l�E��Ԥ��,�6w�,��;v~@��v��V�;S�Z�zMW�y��Q���
�o��
w�>5��'��]��o��Gd��`aτ=eU{���w5|��`ߟ���9?_1P��
��CӖ���/�;�=eEVزq
{�g.�Mh�پ�;�b�ke%j{f!�ș�h����}�o
6�\�k[�3����.
����'Y4-g�����D�=;޼už��/ �
+�r�m[5�<�/�7l�
+�B�ŋ����Vo��^���,�C��f�z����@��Б/�j��...�y9}acc	���d�S��,
����a�
�д�Y����R+ʿ7+W�Y��E�j�t�J��~c�9���g�P��61�-{f1h�Q�	K
��/��~e�3CӊN�=S�YRZ3���NH\�ID�=;|޼už��/ �
+��=3o&
�Yݳ�=�.�Hs�?��g/|8c诟{�3���o�Pm���g)%��3����М4[NLL�=G
�gޛ)a=xG����uwj/>�����^4��|�6����'C�����Z1'Un���S���XVR
��܎q�n�$B�������,�~ V�ƞw����L�؞���N
N�^�r��߿�9�V��
U
+� ���wߝb[�Vn������5u�
�
��ٙ����;tBB�hij�Ki�K�>�J�iň~�M��w�r��+5�Gu�
�֫+5�M�=�KV����m���#����	��7�{v��y���=K�_ �"�
�SV��=��fJ����(�Ӂ�e
|����g�ZB7�nTn�A��!�S�o�,�W�J��?h��

�,�
+�L����A	�k§�GU�����c!ό��璢xcSy�u
���N��\�I��gWΛ��Oس� X��
�Y�Z�LD�Wa~�
*�tͰ��`C|��5ȯ��7�84��CFl����AF�s�>޳EDUn��(d��xt�noݟ���}���a�^�w�'F
�9o�C+��	�p�hϳ<'��
�
�ԭ���qس)����+��g�=��oJ�6���R�oDO�7I��[�=G
���݂{��J�Sx0�z��ܞ���oW��ǼržC�ڳ�w�G�rKI�7�id~S��[�=�
��m�l��YOž�B������Y8rvt�"�=��s��ž���
�g!H�{�س)S
�<�b �Ii��yy����E{���� 
+={�=_�_�s4����,�X{;�=��
+��~�Pp�D�$ۍ��|sRk����
޻u���a|c�2�d�,��z;q����  L�ڞ�[�P����{F���$� �Y�`���=�|lH��zȞ�$�� �)
�g�"�C�,v�gg�=?�+
  �Hm�-�'44^�8�ʡ��i�LBt:�;���ԉo��5��,l8�8l�������弲fY�st��\�w���LmuUekW�N�xBNw�=d�Y�T���Ջ�g?�d�](׏��¶r�ڳp`� \pe �I�9-c���z�}>s���:��q���w:�z0'��S� 
���xd�jf�ʊCL��.'��[�T�*I�a�}���]G��k���p`o	
F{P4f~�.]��� ]�OH0
�R�=��$3�V�N4�
�ʩ�ޞ��i:i*
�
)=KƟ7
��AlB�c�\Y  0ER{>P����U���O
r����_2w��a�ӕ���e�:j9|&�M�N�E�S��b<_</mD
�U�C������?�S����(���j��{��IVe|�.��j�V�d�<[�����}6{)9">�NϘ��
���3\Y  0ER{��Ġ���%�/�pЬ!�;��3p(Yn���ؑ�
6������!��G�L����FW�iT������쳓
ҞY�ڰ�gZCr��T���l|�`�@8��  `��Y�yAUZ�'d�*�h�O�j��2͏���N�r�Kf��=k���I��=��ɐa��U��g��L�0h���=�3p
\Y  0Ej{~ c��?޳�R,��Y����m�0�⽊�T�-*��ei;}`N+�k�dO�U�		�#�
��pH̪�h��2�Ξ�g�dm�3/�ڰ��=�MLz��ٹ
��� ���,  �"�=G��Se����� ]�+6���"�5?ZO��ӵ�����`0
�*���l�N�}v�ٮU�`��
+�J���������
\W  L�=;�3㋉�s�=;p���E����Z~1�7�g�.��  `
+���g�){v�s�{�lغW��b�zΛ�P�/�= �)�gK�.~V_B �X�g����/��1�s���B��Þ �سo�={س�[��Q�M��ݢ�� �f<`� ��3�
�s���� {  �ڞ�,,8Ty•]�������g��3,�y��c	�9v�= �Hm� x��?�T�ilj��Ԧ��7��vL?AE�YN`�  � �g d����ǿ��t}�֎7�
K"��
;�zG��
�,�3  8 � �=?�Zឲ���~t���vس`�  � �g d�����d�
�аg!�f�>
�;�q� ��
��xžgf
��;vW
9v���
�؞�k~
5~p��}/+�KJw���+��uo���M�������@3��ã�g=�M�Ț�
ye񪸸8�|���.^
<�IdM�8���x�W��r����]���������W,
�j�za�0F>�ȑ��t��|鷿�/���� ��Y��g�c��  O {@F<aϢH�#��37�p��='$���hђ*)1ԝ���.�E�r���r�.��
+ugjU�T���9/�<j��z�KLL"����D4����,ן���L���T�~��qUH�=j�&�L�9�]�ͯ�z�,�hޒ��.)�t_�Sn58�rڳ��R��< <
� �=G�{n۪��1}ɿaSW(r�D=/^��RL*�,]\Rě���+6�q��CG�d�m��n�~
�o
#..���wߝ
+�Gޘ���1?6v"K��
�v_����
@�{@"T����Kda���t�Y���/�%�O}l�ۡ]G�u�̛ɂb�Yz�4#���Ϧ��
����^$�J�u��+T[ ���_JI�{�[`k�3i?��ɐ{��B�Y/Y΀=;���
�D�^���S5��ɒ���h�yGi9�͔���pyYp������+������Sn�M��[%�ܳi��={
�3 1� �8�R�I�OW��?\95��.qϰ��*�{
+�͔��=ާ}V��Gi�t�u��-��12{��
���uўC��
{ ��3 rQ������O����d��\�'$�5h`�ʵB
^��0؈��17�m�$���B�QH�Y�/\��#yKb����3Sf�� ���
�t
���
���EO�k�܍GKl��͛.
O�}�k�ڑ�e���#��"j��g b
�3 ұcwy֢w��C�}�r��� ��o{5�w�[E���jӐ�S3g��C��8!�U��k��cG�H�vW�  <
� �ŋo}���Wg�U�h-	��g޴5�`�i�Te�ѐҾ��=�1�w�nw��d�*���M�c�3 1� 9r�$�O���ݎ%��g����)��s�o�0�H��n��f�Y���|���TL��=���O�{�lغ��(�0b@�ySďvg�=!�bu!G���Ⱦ!�y{�8��i��g b
�3 ���x��3LYXp�򄨭�2)�7/�r~�!G�b�Q��3 @8�g �C�a��
w�x���#�
�Nȑ���s�CzS3�5ԫ{�= ,{@<�g A��D=�������A�%%��
{ X�{��$T86՘�{@��à�g b
�Y��P�?
+����� ��5{F
+|
� �= �������0`� (�� >�,
�{@1��;����|�^�= 1
�Y�g�˞�763�VV
$�}�yu�ٺ�'G��r��U���o^WXR�uy0s̥�#	<21+k�KV�
{�b<����٭q� 2 {�0²����_�<w]ၽ%t�K��Ğ�V�o�t�m��?�Gk��R����̝��
6:�t˰g 3��  
�^{>r�����S�4�|����ӏ��2[�aπ�=�e�˽�~���ڸ�xj�Ī{�z �0`�@fp <������*}�z����2�3?w��mž#��
�=3{f�i۳���w�G��= <��L��C��B	s������]�e��wz����y�*�:�����Jg�bs�*�٧�f�T�5E�l
9���]�W
;�ܮ��J�3`D�� �1?21k�/��Z��������=� �Q,ٳ@�C�j���c�		��5�-Z�d3��,�6w�,j�;v~@��v��V�;S�Z�zMW�y�����f�g����$��t���s�l�Sn5��
a��ٙ��ۈ
��-�9���}��/�()���u�2|%�3��`�  ��=+מ�+�L$���
*��B����%EԌG
��v�������#_2�f[�+7�R�����Ns����^
CȘ̞I���_�{�
سp��`�  ��\���}�f>>h֫����9hF���Mٳ>�1��ϽHė���7W��@������v{�/d+��A�`��p�=
G�
��]䡚xU���"mI���'\��'��!{��L�W�y�4�g����S�ӳ��\����vN�U�Bf��䞁c����,
�{$�w��j�����Euk��`yb��e�F��v{~��b��!����@��cO�y��̌�g
��a� `�z
9v2��m���s�t@;:���Z�{������&S�n^�<\Bv,~=X�<p��D��Գ�سr��y��+�d3?�:Cь�AG�{~޴⒢�m���KJ�s�
"@��TB{~��B�z��
�3��C�̆��=G	�٣ĠDRb��a�zHm��B��*�R}�'�=o�� Y���M�C{�[��`�Q{�(1(��<pس
�ga��^
c�‚C�'܎�
+)�7/��Y�3��
�
w�8r�$��9�i�`���z�%ї���������Wtw=�J忤Z���qO>D����!i���e`���������
ˑ��Ԟ�a����!�{�(1(��<pس
�ga��^�(�2���>+jk�w��P{��n0�g;FW=g���.��'��]�vU�Y�
*�OQ���qe�;��o����
GH��=���L����q]a�^j��:�왏�rS��G�:X~l{:X�p���3`���!�{ ��SV����"x�*�l}
+R�F7�]\\
������zO*��j��if� �r�
>x�r�ڳA�\��=���%r�5g���!�5��92<d�GQ�kۤ�s`ϲ{��5{�+�� 0��=3o&
������n�;ހ�Ӕ�ڳ^04A����F�#��
3	��g�rC�V%bp����
v�����x���Aa��I��=~R֬�`ϲ{��{��$T86՘��=�(-罙�=G9������C�o�
���=�wz�B�$�G�.�mj'��:����
納]n�����]�ͫ�ޞ=m)~F��mW�o�t�m�3���ԟ������ -��
+{�z@�~�Q��(H`U_�G���'�n{y�w���]��;�BZ�<:�
=
z*���PV{zg�o��ģ���O���~����(9L�*���w/�hA�moI[�
ڰQ��q�]伲fY�s���	
�/c`�z�`� ��eOYUj�ޛ)��s���[�{��X�g��h��`����� i;Y /a�
\2r�W�� ��|r��o0������_������%t�K��,���{O���~Im���*J|�{&��l�ԉoH�-Z�
+��(诌#��
���Ds�VV�0kk~T����78d��w��re�!�;���_��s��2�o���B�]w㻗_�?"�9�y��d������-�=d��� 2�=+Q��n�;:�? *�w��N����=C7E
2b����^bd̍_���?7X�CR�����7�`d'Ԟ�2g�-���_2wZ0'w��t�–��T�2۪�Z�y�Di�,*<39mH���\�q��r�m!O/[�ٳ�0!+7x�W
����.�=�!���3�ف��e?�84�	��ۓ�w/r�1Gp���a�z�� �#�����l7�۳
+�r�zs��f���*7��_I�T�j5UNZe�,9ǴF�,tҞYڐT&�r����T�'��$
�g��w�W���%�!��=,�LdQ[���9v��w#t���Lڿ;�ӻW�=3A���{ � �Y8
�gޛi�����<21���^!�@%p�H��$_$�p�^R�m�*�h�rC�{f8S�lGw*J�>�{f���
�$�+��'�gׁ= ��-{�
9��
س3|���
�xo���ɂٙ��ۘ�=�������3�'�,t�r��I5)�	G�W��g���=[�8�n׮f�Q���K����
�\��u��H�ݺ=k�e:��Y�3 �}d�=� �ٳ
я���@��Z8]а�DY

n���2$U���j|�cn���X�Y�0I�oW���L�Y�~T
+vz���E�17B�ӻ7�ܳv_�����= ����������2����
[����
�����=;yB"��Y�3 �}|<
���czسl���F�sl{   /�gـ=����
  @^|oϞ#'����Þ��=  �o��k�ٯ���X 
���
  @^<T�*4�P��-����������	�`�y�}�a�^���zΛ��Q      �p����5��     �1�ٳ��E���     @س0`�     ��,
�3    ��=
�
    �{bȞ���xMm����MMMl9h&d��g     �c�=��>K��Ԛot؞����3SfÞ    @��k�{ʪ~��V���0�vҞ�:?5c�cc'�z&�o�M�
     ,b�=��YO��CGc��5?�?8��}�uՕǾ"-kW����޴=����,^u��j�k�<3{R�W��j�:v�?js�t��6�������b�=    �
K�<3cpd[?�]ͦ���C���CJt����@���]��zO�<����E��Z{&f��_��ܳ^�ƛ�W���l𳿔����{ [...]
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      �����
+endstream
+endobj
+839 0 obj
+64
+endobj
+828 0 obj <<
+/D [826 0 R /XYZ 86.4 726.045 null]
+>> endobj
+829 0 obj <<
+/D [826 0 R /XYZ 86.4 701.138 null]
+>> endobj
+831 0 obj <<
+/D [826 0 R /XYZ 86.4 83.712 null]
+>> endobj
+637 0 obj <<
+/D [826 0 R /XYZ 250.14 46.905 null]
+>> endobj
+825 0 obj <<
+/Font << /F36 464 0 R /F18 830 0 R /F16 453 0 R /F8 465 0 R >>
+/XObject << /Im3 815 0 R /Im4 816 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+847 0 obj <<
+/Length 2320      
+/Filter /FlateDecode
+>>
+stream
+xڭY[���~ׯ�UY��1�<%��e'�){7u

? 1+QA�����_����4����u�(��^�\�z�z�BD^$���[/��i��`�M��E��
��ok��_�C�U�O��i�W%P�P�gj��������݊������T���
W�?�^3��0I���uGO�$�0*����U���'�I�!<�n*�J����N��
�����~�������
��iu�U"�
+$w*y��ڀ�Q���i��I����k��iQ�T��ݮu+����N�4W��=T��ll���
���l͹���1k,4��S�[���w����M��(
�o���YW���u����	��9F�%>�P����,q�����̇�����A�gx�HLko�X�����-
+� :گ���LF[�v�ӟL�
����yah~oJS�;����*>�JS�dZ�S��S^�i�n8N�c����hS
@�ZE�_U��C��#kX��D�,���)�"/MZ���nC������t���Ώ��
M���B�R��m#�à��-�ө�wy[<�wmN�i�n��R�"����	C��0	�ǟ��)ם��.���0�b�$	0P�
$q2��EL2-�Hs{��u�憘h�qQ�-Q�~�8����ִ��Mw�_PѯU��P�0���J���
�v����/�ɦ��
+7ߗE�fgY��u���O���:�X�;��x&&��C at 8%á.�H01 at s`?�P�l9V�
	�'X�� > 
�d�

�h�['��< �BK!���,R+��V��;�D�	n�u"c8X�����=��
�zL[v�0�O�B28i`��|{8-�]���bsb�sp�6�lz���>�i��
�p/�y����7��
G��������!
+⑞eȬ����z�ҁ .�H�8�
	 јlӜҺ1�]UtGw
+����
+E��gS�4��L�M�X��t��p0�ئ�mm�?�;�!��{*�^��T�'
+ʳ�.�g���t
+7pf~	�
�t� ��d�@�p�����p�5�X}k
b��K
e�BVf���Ir+g��/;��:G|��������(ҁTcwUXV���]�D*����"��G
X`)�B'�k�r�s伸��n�Y
wSg
 ���P�fi�PL� ���?��8\�nx�/�ߑ�8�Q-�=I��9�!(�
(���A8�~<P�}C@�N���
��
���
�#�M&?B�2MƋ��%�e��~W�&d�YUg
�
@� �< �b��N��K>4�� 

�0~$Wp�P6�y��o�^D&�B�7��h@���"�
ݦ�ܖ�Ŀ�@�/VR'��©���1ό�4�t�
���*�
��8���0�Z6d��}���+:��G!�� J"�������X_jM� ��8}c'0�,D��7�~����@�H����"� ������
�'b.��Q�A1�o�^^�鶗���'_)ܫԏ����ݒ�T��?A���o߼#[���~��'a�e
n$TˍӅ�� ��޷���s�F6��w�o1	��C��4 �� �_���aQC�殓t�9P,n��P5��І��%��ƥ7}��C	�Ɓ�լ</�=>7��b�B{86��6�0�
���
��W��ŵ���F�k�`x�7�-��k����@�T�Ej�}<�K����q���{�0X
ң4E��NF�%�]���Ѵ�
'+tMuNUyٴ�|%l�O��rEC�؂����L��*P�P�6
J��E$��>d�`�(�y����lZ��i�,��AH"�+��d� @
+��\�_���գu6S���1��,�
�����lx7�}3>��F�.B�i
�,�����F9�Y�
���h�<���FHb����O��m�׿
+
K��.
�7{r!��4MKR��!�
N�*w6��meq1v� =9G����|$���{��m����55���Ԧܹ�w]��.실b��kg'R�gy��k8:��lUu�0��x�[����c��
�g��WO�-Ȏd�9��[���r&|J>"'���mp=��K�k�Z."����>Y�5�B�҇fb>��Y�|�%1d����g��}��!���-[��1h&%R]u-M4�Hu'ɑ��ܛ��w�K3Yg��#
Oaܦ(.g;;.������
�>�v;�v �e����~���_�
1g�Ai�ؠ�f���d�;cl9�PO_.�
�*o����̆����!�o
s7�5,d��s�C���?ꇂ�}�	\{D��Eے�bv`���j_��l)��$yJ�
V���|��
5���&�
+endstream
+endobj
+846 0 obj <<
+/Type /Page
+/Contents 847 0 R
+/Resources 845 0 R
+/MediaBox [0 0 612 792]
+/Parent 849 0 R
+/Annots [ 819 0 R 820 0 R 840 0 R 841 0 R 842 0 R ]
+>> endobj
+818 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./idaorg.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 850 0 R
+/BBox [0 0 735 408]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 851 0 R
+>>/Font << /R8 852 0 R/R10 853 0 R>>
+>>
+/Length 854 0 R
+/Filter /FlateDecode
+>>
+stream
+x��Z�n#7}��M������0��3��|�w3�B^`���[7��n�֒
�`��&O��b���QMzT�O���
?m���߃��qF�q]���G���j�V��
�0�ɏ��p�>
m��ڸ긪�
�{�&�^đjiLŽ�_ى�0�����y}o�`����s�
l
=�4������������f;�^�~�l���s�~���i���y���|s��}��A[;�~�<o��wPG
q�>
����09&�L@*��t䙰A�v*8������'�K��6�g�al3T���mJir�[��S�c!��x�.���8=���R��Y��
+I�f,�
f̪2���S�Ƈ��C��'y���m}�h�'�����|�x�C�.�裲}��=��.9�E�P���Mߢ ���R���P�4&����&d�F�D+� K���`��
 9;�Za|4�F at H�K?�*	+��L
�K��|P�E
z��HZ,p"�Rx_9�Q�N��t��7���w��U0
���>A���1���4e%��|��:kXc 
%�I����n�^�M�8������5�@�q'W4�}z�e�N͍U��>_�)<e�����{5�9��S���<gȌZg��y�o�>�k�
&5=HKj4&M�Ոާ>���iU:O�V;X�m
����;��Ί6���O|�Bem4�K�>���ۿtn�1��)Y�V�4
+�YX�JM����o\�����<� ��
��՜-
+9P�PHE\�$�:\A�'�W*�53
��9����b���f	\���c
��m��+��	:P���������SQ�t�k��;�	����R���4��D���k"�ʸQ�#���f{��c�W`w(��
�h}S�O�|
��\���|�M 2��]W�FG ���1�0����ōt���Q���T]���[��1#��;:�{->�F�O�C0��9�ή-�FG $/ɪ
+�j)j�mHv�Q,�RaA�ֱ�>~E��,�of�!9�	)w�:+L3�
�l)l$>�
�O�TX�-�u�h�+��c)��}3#ّ�1�-�3��N�Y������w�>�TaA�ֳc|���Y������H6���L��kg�c�-��ħ�C���
+
��0��k����tNf2e��R�ۮ̭��U�|����ڥgl�KO�\��B����R�uwA׳㸱Nd2��̭�#���W��q�u
���.�7
+�d����D�
��
��
FlZ�]��/F��W˷H�?��wiV�'�u�%]��
�許�6�Q���R�
ەVGQp�P��7����@j �4�|i��1�^,Sӹ�e]�Z_�E�юְ�\>HYlWZ
E!J�
�o����0��i}-8F֋ej:鸬�Y�+�1��k�|�r��L
ѣR��m�����&�kd^�^3u���E
�*�#W�g��A�2O�����y:J��(�f[�j2���9���Zl����z�՝.�zvbT�LF��SJѕ�v�D��f[����3bN�iՕK�%��U�[�ůÔk���ATk�M��T��+Њ,?/��wo�ޮ��n.�JG4'��L
+����^� R᝚ѥ�s��2r��Hɍ� ���$|2����Y�TJ��t)"�c��굠)���[<A���IXi�`�
͏5`t 
+�#nn�Y5#�۝B, at F̨�X�ZIx,��ظ�����8�4�c��噉��T�&��L��0N��W��n0Y���:�e_t
p�Ԅ��&2�ZHB�a�.�s*�
+�T�
<�S�+
����FΉS3���B�J�.�*�P�U

+�#n8�ɾ��t2� 1�2bF�j%�a��2b�C�Gl��͈�x��@1�2bA2�D�&	���{�)����
 ϔ���S爷4��k�H5_�1LA���d��N�D�:q��@�:�&h3S)Гkp(��+,�8ɐ2M��4M�ÌOa`�!J��_7>i|�a��ȑ�������:�`�I�f���5����SY�utn��
D�:҉q�7�z�[.l f(��$���s�����BѣB{�X�
��
��?n���d�Y��]�>���4g�֚z>ٕ���A$�N�T�~���ǁ���r�h��_�٘�
?>�~Y)�
�iE˛�K��K�_�:ν�3��-đg������D�T
=oźO����������y��'��_����
�$�A�����Wy��	��}��V?�0��.W��h	_��s}}��ݔ��VȀ×��G&އ����{t�Z�<�
#�
+endstream
+endobj
+850 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010163505-07'00')
+/ModDate (D:20151010163505-07'00')
+/Title (idaorg.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+851 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+852 0 obj
+<<
+/BaseFont /SYMKKU#2BTimes-Roman
+/FontDescriptor 855 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 86
+/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 667 722 611 556 722 0 333 0 0 611 889 722 722 556 0 667 556 611 722 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+853 0 obj
+<<
+/BaseFont /RYKBIM#2BTimes-Bold
+/FontDescriptor 856 0 R
+/Type /Font
+/FirstChar 65
+/LastChar 86
+/Widths [ 722 667 722 722 667 611 778 0 389 0 0 667 944 722 778 611 778 722 556 667 0 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+854 0 obj
+2283
+endobj
+855 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SYMKKU#2BTimes-Roman
+/FontBBox [ 0 -14 863 676]
+/Flags 65568
+/Ascent 676
+/CapHeight 676
+/Descent -14
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/C/D/E/F/G/I/L/M/N/O/P/R/S/T/U/V/space)
+/FontFile3 857 0 R
+>>
+endobj
+856 0 obj
+<<
+/Type /FontDescriptor
+/FontName /RYKBIM#2BTimes-Bold
+/FontBBox [ 0 -176 921 692]
+/Flags 65568
+/Ascent 692
+/CapHeight 692
+/Descent -176
+/ItalicAngle 0
+/StemV 138
+/MissingWidth 500
+/CharSet (/A/B/C/D/E/F/G/I/L/M/N/O/P/Q/R/S/T/V)
+/FontFile3 858 0 R
+>>
+endobj
+857 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2025
+>>
+stream
+x�mUkPW�f��N���ԔX ��*�Q�1��1�(� @F`�q�yɀ���kf�Dy�(nV]�n�y���h-�jvS뺎n��lO��6&�T%�����|�~��N���A��W|v��0dG~nz����H�߃[ ��+L���n�/xy�ޟ��A�s��W��kBD�l���|�� ;K��-ݵc�������eUxx�,C�Î,J^���'[�_4re�*W��^/�ħ���}�,�V�(��gf�3���t�<G�5[��R�kdK#��V�\�*?��f�f
*��.���E�vȳ)�
~�C���Ȩ-[�m����]܎��d�:��XL,!����r"�XA�A�$Vok���:"� 		���$��W�.r�#���W�+���sJ���*����Ŵ�6qޮ�Ў��r�i']	vij��&�m����[D�n���c��c�Y�d��Y{,նZk�zE�Z��`��� ��CA�9�8â�m at MRD�
��=bo�z�|��K�����H#�P�c���ZW�t [...]
+�����$H�-�?R}�Zh� Z
�0���TY�Q�Io(�7'�BV�����; �Q��]�*�$U���=����o�[���q�ѰE�����b�!ڛ�#�ѵ���
+Q�#���Z�z�{���V���
����{

a&�9���
5z�dP
ZL߇V��-�r���ه(N�D�JD�J�-5^a���[J�Ԑ����XU$�(�M�׎� ������
+L�g�z�O�N�2��e�Q�V���PR��OmIiH�%'�
� >mY��+q��n��
y�C at sF�!
�X�S��7zv���D�S��+��`
���_����%6��p��[6�_k;��g�XLX��垽$M�}�"��r�ZW�Ȍ׆�.a��ri�������� ��A�8��/����|_��ڜ"�:�
�;�j4��=�����٪����u8�^�?��K�*1��R�X����ӰHφ��8��Fq'<c� ոϋm���^*��po:�I�q�I�u�p�i�n�5�j��[Yz��v���]ߘ1
��vK9V�od�q��G�w
-��Kp�����b at A�A���GX�
���\aR~'��/�SB�V^� p*�Q�߀A���P�Ӽ����џ���9���KIgB�
�
[�v���
+E�6R �Mqf�āg����y2v�9;>�q��M�1�.
+V���VW�T䐞:�z�܅KM�]W���_`L?�:�ϱ�'wR+%iŲ��C�l���o,{����:�C$JN��]_ߍ��'/Z
���E��*u �k`�
�N'2�w\Av����)�#>��~j��w�����y7

<-
;% ��$�X�Ks�	�^Z�q��n/f��`��H_�B��51ZKI���r�=�
#h�TZH�&=�
H9�(>&0�<�����>����<�?�+����M�b���F�oۿ�!�/
>,>��Pj�a7�w�D�q7�g��7j5Pȼ���:�2�N
PS��B�AI��[��VG�e8�nx�<��G��?����N�>��K������ج��39��'��4����1�c+ֻ����u&S����k�V��
�hDA����`��r�A�F���]T";��fnj�s��N�C�!�"��ă&��:��[~���Mö2yI�j���MI]��ھ�!�3�n�p����z
1�'|y�	{��A�
��rೳ]c�p����k�;Ƹ�K�t��\�f�|()Ss� �ȗF_�e�`�5�U�@s��g����1�~|5:��m�P7����B�|oT�]��%���v��ՙ�z��fڼ���đ,�
+endstream
+endobj
+858 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2043
+>>
+stream
+x��UyTSW
~�޳ ���TMr
���غ��Zk�"�
V�-�B��-aY������Dቊ@q�Z:�z��Ӻ��L;��cO��q���^��9s���c�y۽�}�������ͅ�H$�[����������/Δ��\�ٮ�>_l�$�ME
�NG
��í{�o/8�
+�΀��)W��h�	1d�xm�&G�-fǂE����,00P�l�eD��֦���C�Zg��T�s�*C�l�N��Lә�4��$�J�r.۞�Sg(7juڬ,C��/d�����e��eE�6397[c�L�+�
��e�Z���������
	
�����Q�����n�NQs��Qs�רy�|ʏZH-��PK� j�:���ZA��8��F�g�d�e��9׵�y�W�V�����4^�=�3��6f@����"6��l��$�0AVC�Pᡝ���}
4�
��%�E�*|yH�膜VtY��C���\z �-
墼�rM]5*�_\��p�q�B��G��;��zڗ"�?!>?�
^Oa9@ ��o.�þZ�Yy�˚�B�:�
�+*
��r�<L0n 
5���)4ǵ�0+��
>s��'K>�k�Q���8ͥ?��
�,L޹&��sD!ֻ�o���s��'�I7��
+��x�>�_r�\��,:2#�]��4�ʀ�F��1�G�7�cR��<>6���ê����� %Yt���̈*PQCnKtϮ�]�Ż��'�d���Aʍ+�C+N
>l��Nj��O�G�Z ؛��@���-u�_2��� �H�Jx*�e���3�U]E(��ye����v�����ۃ�*䟿"c�6~W�;��SbUL)�'����+�9��W"��6�Y�K�
�eo�5��5sTR�۔oH�ǧn-\��p�eX�
H�Uf�#�`/]�iU��Y(bNZ��`�-���)������
���I�"��7�<8fi��
}�B1�S�Pj;��O�0���GN.z����W
+4}��|kV{�C{ڻ��v�~�����k�
?��{��2������s7E$u
��.��C�������s�����[���L&v��s!�	HzN�+�c��ֶ�&�S�E��$ ��� }(C;M�*	�'���؎�X��
;�q� +�'<s��PQ�g����)S��
�ez:=(_��HN�5�Cl�S{QǠ�v����'�������q�(��,���yq��|
:U̳��QX�j_#�C�03(��t��o&����`�(��j��H~����
�-���ӷ�:J����4��P����]�6+�3��x �%ڧ�luN8��#bȈ7g��3N�i�,:�:�
�)*&��/0�M]N�y
7*�:�H���h���Y
�"�gnWv�P_f^;H��'I�8���
��~X�SH�擀�;��k"^ �p�b�
\��t2%)�`3�$�{@w
X���ڙ�A�3���q��8��%̬80r𫾑��.
��礝�	���U�(�u�"K�wWբ�2gg�/0�o�hF�X.N,v��l��K�"J�{s���镡��܅C?����]���2*
+k�h7�sP;`�*����:2h>w���{�
*�
��K�
�?V�
.?"���PB��;�R�7ߡ�h�i��������8� ԓ���Q ���4���g*�@��ޛ�kOd&Tb.��x8�s�K�
��v�F�,0~�p�/"ܮn/B!�"��9-}�b7A\/)�s)$�\�#\|$C������Q@�C�s‹Ty������Il>"���g�y��*��ݛ[-E�
23�ʽ��� �
�mb��
�3��x��u�덱p�Q�)㻤��h���w��۲S���g
�\g�
��BSsjB���+/
U����[𚈟?���o�9�+�󾟞=���Yc���M����T(��6	��y6�4z��l�3=v�Yn.kAwX���5c�؝=F�A������ct'�������|�琣t�3Z��Qm�D���� s�kr��7�ִ!�/궶��C#��[�I�癋�������x��K�Q����v��{���61�;lt�K�t���� e��t����P�
+endstream
+endobj
+819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [241.988 311.996 253.943 320.409]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [257.746 311.996 264.72 320.409]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [386.108 268.512 398.063 276.925]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [403.537 268.512 415.492 276.925]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [420.966 268.512 427.94 276.925]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+848 0 obj <<
+/D [846 0 R /XYZ 86.4 726.045 null]
+>> endobj
+638 0 obj <<
+/D [846 0 R /XYZ 138.577 447.376 null]
+>> endobj
+845 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F14 694 0 R /F49 636 0 R >>
+/XObject << /Im5 818 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+861 0 obj <<
+/Length 2726      
+/Filter /FlateDecode
+>>
+stream
+xڕYK���ϯБ��h_�9)�U�C*�T���Eb4�)R���N~}�P�8�݋�F����C�v�>�����_�tW�E�����.OC��t���=ֻ��J��
?�bc�<W�����b
�
y
�k8�]�rj��~~|�����N9�I��tW�>~�v5�|�Ea\�W�;�L\�F�?D�B�;!�B�*KY���k
��ez����^
+��/�ՇIFJ�3� ��*��-.e��y��>I��$�MW�smG|����ٲ=�C3=����nx����#�/͙�B�G�z�q
26D*�T`�U�7�<�Sc��΂I���x9�A��HD	����s5�F�v�n'��,��͂"�84��Q�RVA���eW�d��/(��&<2��h�
'
�eh���\k���
�iV?�ʦ��'�z
������S�.���V��2�3���KS7݉�J~
�<5�e2�
����Q8\X5]J�f���V6�Dža'w��x�L䇉����=*���vz���:u�w�pg�c
�����|��o<f�J8����nH
h�'�o:!����4jǿ�I��Z�x��|�Z��Q{g?�
Gao���	v��@�.��R��&�q(�3�=���l�_i_P�19(�ie�9Ȱ!�7A��{m�ʹ���\�o*!f�0+�؁�ʮl�S?��EϤ����oq�dq�
�u�
�6���D�&�ęx\�yj�^���ێ���@��r8	l�������!��{��*����6�O��;�z��*���|i�<�Nc�}7N���[��RNCy&=�2k�6mDH��p�a����![%��j�q���p�cS�'ٖb�c3N�ܪ	8`���ܴ
H�6�1dlE� �����a�(؊4��I0����t*��x�z7��0
��
q�`��B�%�YHŘǗ��
͵%�~�
���
��$R�Ĵ)\���Ke�
+��Ӥx�!����k
h:Pb�J
+�פ"�A
LDƃO$�9W���88Fp�QC�Hǩ���
_���Y�q���6N�|��Y>�n ��Q���
5�X����"q]�2扯O���_P|��s�
Q<\���s\N�o
�B2��.�@��$�W�<�����	$��]& 
̏�Z�9�<�q�l�Y�lq�w�t�(��h�T`WoB|gֹf�~���48CҘ���q��g at V
��d�l�8���@p�$�Ā��
Ҹ�{��"@q��{R0�9�/�w��<�Ĉ�l� !Ra�M�
��.y#��z��:�Y2m�Q�
+����.�a5=�]��
�n�<Y�(4��+�C�_��b�!NM>	0��*�ԬTB+�ű��GB7�Y�g���P��$3�?��w�!���L�0 at PFte�˜�E����$+AG�a# $e&�()q�G���
+M��H���+�P
V"nyW�C��\.q^���c8/ �l�Y��0�̍���F{ol&�8�]�Q��iMU( ��Q�l#�R�ג{���'���SYI2�v��ޥ��E&��� ?t�x��fj��L�Upt���e*���'�т��(J���L{-�-%q.h�r���pp\&�Jm�0x��p��9�Qg��1��p)��	�>�
���TsK	_�L�F�
R��R�AU�8�Hq�_&L�4x�
��0�����pv���X#m;���������1 T�z��"��WH0�g%�>�M�4KV
Έ�����a���4Y��;��O�����9�01��_���x9�7�&�.��y
�]�E@��
�b@��i��/r�l�h�0_œ�]:��}�M �4aNۥCg�=�3�$��'at���Rd
+o�
+�7�dIL븄�R8j�2,��G)8�q=:ó�A�*��
>�V�� uF�q��4q�=�'� ��gf:J���#w4���AN�1�P���G^�v���FF�
x,~$+GG5�<�5����� ��[�6	��1Esv
�ݷR3�g���U�չ OK=��wό$1�Ҍ�e��
��t�b�u��Cc<�F?R�v����w�
��4�
86�w
�/J�]W��R�4w8/]%/?l�<
�����c
�6��Q��5�
+ʉ�z�Bl�S�⠔`(���B�N����t/�G0��[H���]#YEI�s�����/{��Z����
���0�b�T&7�O�+�C[�n�I�%���w�Ɋ�����Gi#�$�Y]�M�v <;�
��X�4v�H�
���3ɐIF{�X��s�^t޷�b�R�?�1�e�?Q��@`����a����LP�C�#�	>l�E
�K�Mι�8���Y5�'̞�A�� ��"�Ȥcy
Lr~�B1
s5��I!7��]}��
XP=M at _�5�'�Y �
�9/�T�����W�	����(�h]�.����G�
K3E
+�l����\�t
K?�"IQ�SD�^f��]��i�Jb�`G�"��z5�!�K�|D��ė���VJ
�&v��
„g��^S�$�V����p�~��Ea)�{���f�h��
AvKK��
z�?J�3#��CCV�,N��9,�
�4�ݨ��/1�t���)�k"/>��_��-�g������o� �Ȍ�N9������	<m�;��I�ԅt��>ؕA�+n��f����Wv
���I��5�	�WhA���?�JI�p����w���_���ֱ�$l&���3t�l���П����+� I
>\u�����9��
+endstream
+endobj
+860 0 obj <<
+/Type /Page
+/Contents 861 0 R
+/Resources 859 0 R
+/MediaBox [0 0 612 792]
+/Parent 849 0 R
+/Annots [ 843 0 R 844 0 R ]
+>> endobj
+843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [298.971 630.403 305.945 638.816]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [310.114 630.403 317.088 638.816]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Byr:92) >>
+>> endobj
+862 0 obj <<
+/D [860 0 R /XYZ 86.4 726.045 null]
+>> endobj
+859 0 obj <<
+/Font << /F36 464 0 R /F16 453 0 R /F8 465 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+872 0 obj <<
+/Length 2908      
+/Filter /FlateDecode
+>>
+stream
+x��YIs�F��W�6���
�Qq��TR5��'��l�(� �V���{� @B�
��
�{�~�����J�~��������M��R$��W���,v�(����v�z���޵�k�Ƒ]�����X�f��=rums�)��ve������ڨ�;�M8�
n���}��
��r�':	��Jd2Pq�+;l��h��Y4҄�q��7��ݖ��e��V�s�8v����*�ܨ�Td�����r��:*.)S���dXƯ��R�Da�
Z���F����n~�ƥ�[��eQU���!
׹�C���2��V�J�<���ZI,���nxd��7�a��o]ч&oJ��+����C*[��zJ
KbPD�~Z�4j�kL�N���Q11��WǓ�¿���/��Э�6my����K���S�������MQU�]E��k��alT�[���O����Hj�
+��C�8��� �d"
��QW��o'
:����ɴ��Es�.l�4�CQ{����4�
��&9��
���+�jɪ���OW D�a��
#���}���U��Q�
��\u�?Vb}mu�75]x�Ư�'0���s!�����

�Y���v.�
���n����:�A�ܦ�f�Ue�~�*[}\NO�w�a�F���� ��і7�q;�Io>S�e�U�Pq�9`2Q�C����m^$Ю٥o����q�VQIVI\˓��+/i˾w5O�+�ɍ�H��:�-���E}I��"��ay��5ݮ9V[��s�����񹪒D ����ϚNx�2���B��ك����M��
+7��ȗ�
7A��Q�o$��'��C{_l
cʞ-{{�F�� /_���J��M��ʨ���~�"�P�#ܧV݄Б@w�
��%}l&��Ճ�.�
N�8՗
g���;\p�/�iaN�V��j�K�A��0*��O��!\,_ǩ��3q��F�/���4�JxP�p���W^���:�E����)Lt��_�{/W[���?����FZ����W��j���2��I�K'�*Z��U
敊4I�N����uS��D L�0�d[�xn]�9�z�8�jf,¼�X�΃��3�K�GQ�;���[(�#m)��nT�xw�Xp�x�M���=ܟ������������s�=&f�-��C�����,��Ŧ�+�����޲.�$������9� �DH�k��K�%���qw��3l�f�3v�c��<r�M]�{ޑ3��@c������0

o��_
+�|��9���S-u����fk���N.
�����j��	�`0�e4R )1���2 at cD
�Q�<�^�hY,�
n5'�^B�D$�e�]Bf鷠��_@ь�����aA}p�
w@ֹ V���8`�eɷx�U�P���~�ld�-ۓ
�
���%�1�'4:�nR$� ڙ�6{h����=��ק��(¸�eX��F��F��~N������ǃ�����
Pn
ە�sS�
5B�|�řf��{.:	1�ݯ��=5��vهo7�m	�r��ݠ�b���"�E%�r!m>��)-F<%�gA�
)g�!bG�e�=!�—'x
k�د��B�mt�M�ID�WM���TF*���"��F�	�ֿ�����!��Hݦ��%�4��j&.ŻP�\�ss��Q�܍M'�p�
�#���F�y��'���8��O�|�0+��0KR�fb�g��KqF�G}N��,A��\>�Z� ,��_���N��i됸�es
�o��ʇ�{��:0�!e�nY��!C����c�G0���GV�a [...]
�aȸI�KWo��p2��o�J�f���9ĔE�X�,���9
6�-�z&{���γG1�)��&:T��=�)�؁j���f���IEI��ʻ�h?q�Q��T�����ʥ��Ԋ���B�4s:�"�M�
+@�r&=pӲaQ�uǽ���[��8�/I��j��0�X��PJ��/�"ࣵ:E>��PRLCIqrJU-/���
�0vQۢ��>K�����
�n
+$���#�.�9BVJ���dG/��c5�
+�j�v��{(���L�:IN�A��!�~j
�NG��.<J~�i]Wn}]�r��p8p�,z>b"���@Yy5
��҂�)�O߰}���-�\H��]zŇ� �	��Ǜ��rh俻0�'���9�D
�U�ޱ��� ��B�p4 �
��I�m2�O��E|��ts����qQq!�5"3��7A����BaZW9�4�
�F'�0�ŏ�6UI�dgn�<
�&�
+��g��LB2j
��u�(���YYJ
�G��k�#�
+���H5}
®�y�L6���kUN�l��:^��=FK���M����*��T�i~jğ_`���~����|~�()�)T��G
��L?�Q$��̉* Yaټ-�����
�'qF�r����ጞ��r��ջ�
.(��(W2�Ts[&
�M
Ok^�Fo����� 8$W&SY8]
+��I
8���ݮh�Ae��K7�ݡ,3�$0�U��WF]^E���U���.��
���
����s�?��
��j�	L
p���#�L.�5�����j�.�����������o�׀�gA���_�	��0��{��#ɳAv����Oe.�3�R�]��ΈJ����z�2��ϊpR�*�m����/u&N�f8J�K<[�#)��;)� 
��a"���
]M7}�)
�>3�uN.�PK#�B�	�"i�����5���� �b?�
Up�-��|���0�T*�O�p-˦>kA*�y�zQ*:U_|���˜ɏ�P���`����\�#;9�q3}�"9�/|i;��?+�=K)��݄�Yt	
�'
+���l
+/�e��[7d�^
$&����~Y�{������x���h|
+endstream
+endobj
+871 0 obj <<
+/Type /Page
+/Contents 872 0 R
+/Resources 870 0 R
+/MediaBox [0 0 612 792]
+/Parent 849 0 R
+/Annots [ 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R ]
+>> endobj
+864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [366.137 477.975 378.092 486.388]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ida_ex) >>
+>> endobj
+865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.861 440.172 406.835 451.021]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.361 308.666 350.41 319.514]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 242.677 94.868 253.525]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.428 49.651 335.892 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+873 0 obj <<
+/D [871 0 R /XYZ 86.4 726.045 null]
+>> endobj
+74 0 obj <<
+/D [871 0 R /XYZ 86.4 701.138 null]
+>> endobj
+78 0 obj <<
+/D [871 0 R /XYZ 86.4 295.382 null]
+>> endobj
+870 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F16 453 0 R /F14 694 0 R /F49 636 0 R /F48 609 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+879 0 obj <<
+/Length 3926      
+/Filter /FlateDecode
+>>
+stream
+x��[�v�6��+t29'B�'�d�t�L'��L�{f�dAK��ITH�?� �)Ȗ�Ι�A
+ģ�p�V
�ng��dz�ξ��f���3���%��Y,Rf$�]�f��yr�q���]]lo�2Q�ߟK1��9�)+���{�����2k�r[��q���Wg�q��x;�f�2����?��
+��4��L���o3S2e����ٿϢъ�WL*#�%��3
�d����s���gM�E�zޜK>�����vY__&��G���,��
qu��>j؉�L�1��>�~�*�u`�\%L�KcR���o��ql�ݦ��xJ͙L�
J����.����.d�)��
q�Ρ>!��r{.�y�P�}����V9uܞ�yA:s/˛I��>'�OP6:eq�۹�<[�2ר8T߭�+
����]��	��d�_��W�um����k�����RT�x��Lc�"1��@���/��i�����po�&�g�{)i��eooNe���z�`n�|���d?Pn�f"JO��fJ���2ۺ񯏎,��S��
?
U��@���x��;����:�8IV:T�4�

�7ai�۞� E�
Y�LK9�C�X�-��ʴF+
��d�u���K�@�pYq�"��MRu�xUc6Xk�ZN;�F
���m��|Y����#
���C��`�)�
!�B6�Y�
+r��
Κ{n��rJqB4C!J

��*s�@/1"���>�G:��v�j�v!YĻ5}�h�`���x��dz�>`sI��� t���� �n�@z�R�����/V+�f8���!X™$�_guN+'T�W�hG���\l��}U�푦_HO�A��o�L����SŢH?�
��Y�ә���P�܃T4ۡd벏��/ݙ����N���`���w
���ϱ
�s�Br�]����U �$3����tZjA���+S��Yu�׭�Á򘏁���6 �=Y1W _��&�ǰ��5��j�7���0�剞Oއ���=ֽ���իC�
3n`=Q�tl�"w�ۡd˞��
�����I
�������o���8�2>E��xF��0<���TG�϶�c����w�_^�������`�i�NFL�Ԏ�Dk���{�����Al�F�4 �@R����G[怲e>�g�ȇs�	�ۣ9���'�K{��M�&p�;���H$X���}l�m�������<�Ob?��ߢcc��ݵ���3�
��
�E����A�r�S�
�	�w蟥bZ��3gq�
�
��ٳLM�Ч�؞/�y����'׶��<3�i��{�d˪l	�d����?3o^�����	ć�|�T�nVH�>���X����y��[���u�.�vc�
�q�m�@��[:�e�=ީ�H&죹�
%ذ��������ۗ3P�餃����������\
�,�
��{c)�
��H�D,R@
+�4m��|tG�j��[SV�?���^@o'���
+1ݿ���e
��4Z�� �X�~!M�
���[@��mW�>�CO7��N
��(���_��
�<Ĉ@~"����r1�;`p�g��Si�Ci���ѫ�	gQ�>2�R#m���y"祇��c�٭�F���;�0�ʼnB#���
���m�r��`��L��@G]��^>��E��U8�Y�0ٕL�>�8

�a���P��=�����N)�w8�Y��_
���w�!�&y��pq���/pN}��]X
+��I�$��� �p��
9��G� @͈�
8�W >;�� �f�=C0�t/��O���'Gd�{�A�.K��ON�;���
	'O�����o�sFa�:�G��tL4(m��P0d�����M��/mD��q���FC6
w�v���x���/nB~ �
\:��=��h��!�Ia[��Y�H
�( ]��>/��s���("�^Ϸ��]&�G.H�2�M�S�a���m����C�,2�s���:�{�@��?����sI-�Ǡ��QyE��C��Pt�/�.^!�b���V4u�*<�t��f���t�L�{�ȥO�*"Uy[e�zPNP�y�\TK��Ճiy�9�9�H`ĦG)b��>�<
T \f��젥[<��:w�]�K�qjw$c
ct�ߤf��^�U�E�}q�[e)r�q��|�L����'�@p]��]�Q�R�
j�4]<���-݂h���Z����\k] 
�>�x��~��H�$F���=�ۨc��a������ž��8O^6w�8R�l�)��th
��Sԧ N
��ϴ�|W�?��lka�_�\���/i�?��G����?�$L��w��
+e9{��H��|�	~
"��S �]�鬲r/����U�
Ɇ���ol'R�r�{[�L	klQ�^�W.�S�M_W�;��A|�$!���
E�Mn¢P����Ss���PB���<]m�%65!bN��}Q�k�{

l�ɀ~-�e�~�5c�:�
�F��!�<�{�=��ŏQmM��!>
]�ArBN1�{7RC�o�
?aq��	���0ѡ����K�G�	�[��!^������E?��oj٬���\}�yo�P�>�Z�u��n*b���qo�%L<��pEs<��&+�~�pap!D
r>��g�N��,ܷ
b�B�F��0��<[ټr������,���׹
:>B.�m+"�x�r�_����mĆw����z��C
j��JE���C\��]&
���c&w8�v�[׸���M��O]�y�n�RvM|6���u��&V`}>�\!J-|�n||3Rᴊ�X��O�����x�̈́��}ŠXe��聟ƛ���k�(t�_�Ѽ��љC|�n�:����e�)��_0A�����w���^���;�{Z5,D;
q��G��ΟgsEq��ͳ���T�N������ޔ�ex�.�6`�Hm�ˆ��H����
�>� [...]
+�I.�
��Be�����ˈ܈�o��
3|x�E�q�A
��ɭ�X����f	�E1}���P��E~]��<ۆ�[���:�A�u\
"�@=b�������8�)ȩ|�b˞�_�y��b�c��k��O
���
�)1���0��܃>u�ѕ�}���6Ȕ�a�s�
>������>CVPP�i+��x�-����`e���uh�� �6A�%ɤtׯjZ!���Lp*o�'U��1bJ��~��G�|X�J#>��II���]���q�\�~C'=7a�tam��ћl��UEfq
�l�M�'��q �j�u�(��5�j۾��޷CwQ�՘5@^+���%-X��)�S���A<E\�>	��k� ��i:2���4
�� ������V��X�]�M�-� �ŬS����+��ğe�NͨɎ�s䄎si���	k�%���d
5����&�6ᢲ\}�g�ML�/�����6��[‚�
��D
m��w-�q�t���`��)af.�����S(����Ox&7��v/�"�^Zt���ܹ��m2���`�
���
���I����\�K{C�~6��+_�G�Q1�5�E.�kD$�S��� 4Ox[���I
Dv9�؝Mٱyw%����'�nr��N�3])��>_�j���^a#)���g�5�(e�C؈)��ǔ� "AY�tN���
�;:�*|P.��	8b	���N�]�\�@�9��bP
�.[������",����3rh���I
����l^��m^�ؕ���ڇ`���;�F{p;�~�Ĝ	��
+�>��y�`$�"�����$�	���w�{��Ϫv��0��ZRu�;��Ů5���v*bK��{L���|��Z�7M�z���O�۽'.��ݮ��	;�^����r����j�R5�k�w�����P�3��o8n�ax�k��n�w���$�$A�ry:�,���9�
�C�F���s��q|�̹����K7����˛޺��>9^��=w0�Ԕ�.�
+
D���i��$@�c����kP�� �,�
+endstream
+endobj
+878 0 obj <<
+/Type /Page
+/Contents 879 0 R
+/Resources 877 0 R
+/MediaBox [0 0 612 792]
+/Parent 849 0 R
+/Annots [ 869 0 R 875 0 R 876 0 R ]
+>> endobj
+869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.842 629.87 237.805 641.826]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.831 362.164 114.793 374.119]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.194 207.321 230.168 218.169]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+880 0 obj <<
+/D [878 0 R /XYZ 86.4 726.045 null]
+>> endobj
+82 0 obj <<
+/D [878 0 R /XYZ 86.4 701.138 null]
+>> endobj
+86 0 obj <<
+/D [878 0 R /XYZ 86.4 347.842 null]
+>> endobj
+877 0 obj <<
+/Font << /F36 464 0 R /F38 509 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+890 0 obj <<
+/Length 4038      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[w�6~�����=�+I�}�e��K�m��>�={h����D���x��` �(۩�b� ��`曙0_\-������ξ|���e6�����Ș^�ҲL�Ż��ץf�|�
+��
+��p��j���QC{I-�uE7}�����wԼ�ګ�ܞ��ȅ^
+{���������3��
F7���b�=��w��@��
Δ-���B+�$���۳�ϸ_
�W%t�*�SZ/2+��3Z�o\�n
+�/_�"�ȕ���\o���
+��L׭��}3VL�b���a2�P��Jg��/�W=�Ƒ�|���H�ɽ8_iؓ��z}.��5<
+��{����P�
|��*,�벩6��}W��ݦ
�v���^}���P^���]�� 鹩wU�����#6U
MXĊ��@F��̚xy�k�H`���(�W�+��^��dEQ<��������W�J)>\���f76g<�7VZo�,2���K+
�7���bո��f���b	
b��
�q��w/��_�B�������Vq��¤qu�R.a�3�㬰"����JK�ta�6
+��
�D.��r�BY�������-��j����݆
+P���Q[�~�V��o��
,.[�&�i�o
U�+��n,��۔𝠺$�[77�*����&i$��Y &�
s�Nr�rQ,2���œt����u%��A75�pkd�5R'X�3<.q�;���v�E��˛���g�,������o
7�.�8����~��|��1��2�Ox V6��u��\�琢�-`��,)���t�t_��Db���tH��~[
��'z
𓻽S�^%�z_Gs��� �>5{Z�,،����_����}!���(���_���!�h��~<7��]����F��v4@'8i)E*�m��Z�<�����.T���&�k���UO04��d��b�#�eB��΃�C��E�
+x��ߔ��t04
�����d`2���

+����IEKx��f��ˮ�S�m��>̑v?����`��;�d�A��~U�9 �|�J���3kӕ�
+.y˃hS
�$��)�a���c�5,Ǹ���-.����\ç�~�Q����{O���H6W���'Ib���U]=F���ӊ�$��er�|h�`��0k�j9�Z�
+�,'�smjX���� p����1
�Bķ�p�ke���
Gw�� 
��{Q�=����a�0�� ��S�8%�pJ�aI[X��As
 bC
R9�$[�JE��x4�������r�q&
+�Hڒ=E�U���*��D�M� �̋<L-ViXR���8bH�t�\@�!ҍ
�ͽ�@�w�=�@���`:Q�
w
�F<��l{����Z���L\�'嵠�0"u�9�W�Y@@0�ҥ����A@�
�o��S
+i(4~��X�K�
�rp=�>���hI�#J9��+
 � ��Ne>Ws9�@f㊢,ه&
��;�Ph� �C�L-~6jz�UWnWoI.�z3P�k]�zӇ<C;R%1�B?أ
���öt�$=\��
��ڸ�4�g�v
�
-�~rP1͟�
O�	�н��jXc8✩\�<G^�ϭ�Tn�M�G%�ZL;��e�n�]]��U`�
+r|��DOɫ �tf]W����Cw73�w]�2h
�b2��X	�Tu�Kt
+���'�z�g�]�����
>�]`U���(�?�%��A�6���TX��a�E�u���+ ������|b�N�N���Խ��
+��t�+20�!
�no�®���%C�c����	{�S0�w�0Ta�*�:�/�5/�)�:�3Ѵ�,3�1��`��>��O�j�!��\WkPB���	�h�$�>�sRZ��+� E
�A|
��#�	��%,��;��BwUZ�p/z��G��ɌK�F�e4sX8 �����9�"cE�Y
�-�4��΍���DqC���ܧ�X)n({�J��>��(�
�1W��i0���*�"�q���;�T(�
d��d{�!�@�v]���ȹ��sW���Y,�e��Aex˻�"l\<J`®�q��w�
&4��<��o���A�]~��'DtFO��~������Rs�����TWv��W>��M���c��
+|�
Ao���vΞ!��s�ȸ�Ä��h�Ha%�)L

4u
+�
��=��k�"V�̭L�l�k�t��Kt�X���o}s]�B�Y at v/g��tۇ+��{��k��Ժ+����?�.�.���A� ��㹔e��
qk�vk�k�
+ضB�l�`��J�0�nc����P������ӹ�'@d�r��:>��Y7�P�
��CH�P(4~��v��2n���ȫ܃��b�Y����*�COZ�u
����r�
��EX�럾�	$ �&_@��� ���Cv]�LM��9�(
���nXQ=I���d���r�i�'��z
^�D�W�2	F<����v�WB=�
�R�aҺDX�<����X&�C
\���'2���_h�e���d�R�Y�y|"�Y�� Y��^!�ѵ�4�
zv;��ǽ�>W���B5����a�o�����Ж�iS���>7F���A��L��`Hw4o
+E���bI�Qi(M0�lT�73�*�ɶN风�(f S� '���bC�%�
f�l��p=7G���u�iZ����g��洉N�>z��_�#i�8E!ª�@N�x
+X���(�I��.������:"F���7>W=��¼��!��j��i1
2�����|h��+aS�P�">���=YY*�+U~<���47U���8��H"
t������
+��m��ǃ	�僛�'���uc�2u)"Z��)��[�k�
����1ut7��ٴ��X����tu0�Y�O�E��e��HB�x������_���/"DAd_vC��iʹ�yH�����X��t
H$���d�a���}7��3A�`��=�=�M��-�D
�xr�@KI��JI?.�r%4!�u2���v�
H/��;<�;���9�2�s	��ؓ�	
�]h׏��~���P͌	�EP��1�8��1�/��4�1���	k�S��M9��
��-ϓ0��d��
��C:P6�ݾ�UO5mK�u޵��(��3n�3��eل����R�9`(X�#2�ƌd��QO''5�@y6�^6��Q�է��<����ۺ��F�0��\�׈+���P��]uK��r�9����"�<|G�%4��C_(�2��.����YG‹
���XO�� t$<���
,|��ĭ�s
�C j�9Y˼1
]��KEt-�代-p~�ꡧB5���sw*9����d�m5�������g���X��~�bV�)�^N� li���=�ָ륐�2���Y�5YוT^(�_U�W w?��y� C�"�
3�qH�N���
?�I:��A�!
��*���6k�r1&�ND��;�O F:��W�y��C���!K�T��M8h�A�̇��
+`��Lr1��5E�]5
����LN�W�L�!!��H?d�D
+��|�A�οIJ��EY: ��ėc��6"6d\�k��qn��~��93�
r��TC�0�l���1!����B=� 6�H��a6�9
Nb
������X�������+\W*�
>QqY�
�j��O��� v℗�;�:N$������� ��(	�s�I���ҭ$�,g�n�A��O}���0���\�=[<��Td{x��n���2�b�\D�}��9vN	�p������^H�;�Pw�v+�a�z�M4i���	���XYe�cP�<�l<��H�xF����O�=�S�-@/ϱ
V������'@O���}�R�p���Ӯ
�/�tE
+Y��A���G_%������!�������O
̜���k<�2�q��Ѳ�	(���Ė�,H�Fg�4�fPbB��@ۆ����u"��c���8�Jܛ	��;��-�	�y���~p�CH���3��oN�
*w��^|��Y
+
v�Q�
�.���,�)�_���F�
+endstream
+endobj
+889 0 obj <<
+/Type /Page
+/Contents 890 0 R
+/Resources 888 0 R
+/MediaBox [0 0 612 792]
+/Parent 849 0 R
+/Annots [ 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R ]
+>> endobj
+881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [230.118 487.503 242.074 495.916]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ida_ex) >>
+>> endobj
+882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.808 377.669 230.782 388.518]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.701 142.346 139.423 153.195]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.752 142.346 155.474 153.195]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.561 89.544 332.284 100.393]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.5) >>
+>> endobj
+886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.412 89.544 372.134 100.393]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.6) >>
+>> endobj
+891 0 obj <<
+/D [889 0 R /XYZ 86.4 726.045 null]
+>> endobj
+90 0 obj <<
+/D [889 0 R /XYZ 86.4 444.449 null]
+>> endobj
+892 0 obj <<
+/D [889 0 R /XYZ 86.4 363.436 null]
+>> endobj
+893 0 obj <<
+/D [889 0 R /XYZ 86.4 310.204 null]
+>> endobj
+894 0 obj <<
+/D [889 0 R /XYZ 86.4 253.651 null]
+>> endobj
+895 0 obj <<
+/D [889 0 R /XYZ 86.4 67.861 null]
+>> endobj
+888 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F38 509 0 R /F11 691 0 R /F55 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+909 0 obj <<
+/Length 2490      
+/Filter /FlateDecode
+>>
+stream
+xڭY[w�6~����
�'F�{��ͥ�6ݞ���C�Z�d�P�BR�z��`@�)%��`
� ��7�!��g|��ŏ7߿��,e��fv��%����)3���,g#���&:�>��v=���}5�et�q�*+�}I�W�]�/�&/���ϛ�/^�\|� ��D+A�D��bs��O>[›�g��i2���mf*N��V1�����k��<fZ'3�
+&�!�_fE�����c�`�r�/��vB	�d엋�>�`�D�t
+z�҄RL1�l�6�K-u��y���e����5�?Aj��I%�Z�Z7%
��~��;G�Dߔ�3�
��Ke��E�R�

+�WV��m�d-����8P˙��n/c!���w�T��W�
/%���U�[ָ*�ĵf�q
gi��R�-
�䶅a��߲m���m�TEuS���c�K��ڵb� w�%I�.�_%�P�`z��X`��	;b"L#p�>z�?�4������z���.�'l�jhv�/a�
Yߍ�
��0>q���}��
�t���
uﲺvKjgu7�l%-�Nj��4	��
U�q
GY��o
��
E��7෾Q�ok�y��,
�0��L
��������~�@^"!
W��	.��,�S���II��p�g
+����
�y�gE��)p*˰5��pIpJ����
�L4�ޥ1 at 2�6,��y��Lٴ筨*�cl�z�e� 4D�hW�h��|騣K������@��W5��-rD@�+�\�:_zZ��9I��Iһ&�8ߟF�vIHK,S�кI�T�\�"*a��r/���Y�Z�7�Q޹–�:�6��آ�C[��e�^�w���ρ�h �|��I�f��#�O�D�C�A�lK媊�Y���f��:[���k��z3x�Љ{7_,\]ӃO#`d�3/
+�Ί#ΰQ`����,����>��RA�ؿ��Q�U�p��C&�`�$�&1�`��
�6���2+ (t4n]e�����U��qlK��Đ(����aѳ!8���z�0������<j�a�# @#��Wl88t(�L�N�ߣ7���>� �U�\�"kLJ j%<
ºS2� �GuX�w�]������1
�~�x�@��dz�Q��ќ��?��]�\��^	N�����>0�HL]��FG��Arʪ1V�{f���9$&�.'�oJe5��{�+���^d�s�����.���]��[�}M�
2L���޿�
��;O�59��g3�s�8`����
L���_�[�9�;>o�j��4�N��^V?!]�}�O�!
�d�DC�Vg�C�!�)wh
��	�nߜᜐ��&!��Jqu
+T�9��@�D
� �I�qN��L9��R�����*7�x���+�\�U�/z�JX)���=��Oa�$�.ko����R%eU"���+��weS-���'�]����$�
$���3�}Zh:e�
&��# y��`�-����X�[�	
��K����t�/�W�K����A Z/<o|����
����]���u�
.�*1���t<�%���F8ˠ��Mc[��g5>2)�!~��W��`|,�Yƪ��oX�x嶵���wq�w�S�({r���]���d�4���y��)B��;W�����Sd^�֛�IRw����$6��c�g��_�ݼ�XI��] ����-�h������ǧ���r/hԻ�jG���{�Wڅ�gWaƾ�n�V��'��$�
K�
+o��D*�j�yUn�zƈ鈷�D�>%�
�M���/����,��{a��q�@�1���C�U�
+E��v�
3/����6}f�k�4�䱿;��fӡɺȍ
:,N
�>���1�C�W�������d��G"��*�-P����>W�@m��1�%
@^��4Bw��,+"���
���ܨ��}�;�w��S�6)�M���'/޾�,c��@� ���2v�W
z�ۄ���
+�2-:�<���v#: 
�I7�Uv|�j)_[�Em��~�������
F�!�9g|&�Ti�L�
c��H��~T��*��lƔ0m��F����;�]��HVs�;T�
+�}�4m ��.r���#
k\P�(/.$������p�eҜ
"&��U��e�L#
+n��
:V4��
�2��(<
v���J���2����%�\�0��A0��۪�	�Qj�Qv�
+g^� |��9[�Ċ���UI˕�ż
&g�J����y�`����[�D*	&��|��\-)��ʛ�M��]�ok��L��U�N��i���ё�;+`������Π�w�jv���o�yMC����.�w�dt@��>�Me����4�M\q�=�h&��9����%�+qX�����i`�����rm��7��`���
v��y�՟N~�J�Լ�蟮rGsf̡؂���)S��7�%}		?Ux"�	}F�#���>=-]����~eq’�=N
B<,:���d�S
��R�wmIVDŽ=MmTg��W�_����7*
+endstream
+endobj
+908 0 obj <<
+/Type /Page
+/Contents 909 0 R
+/Resources 907 0 R
+/MediaBox [0 0 612 792]
+/Parent 849 0 R
+/Annots [ 887 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R ]
+>> endobj
+887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.69 676.287 266.161 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.277 601.265 378.748 612.113]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.748 526.242 364.22 537.09]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.743 475.13 279.963 485.978]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.1) >>
+>> endobj
+899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.094 435.42 479.565 447.375]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.494 203.541 313.714 214.389]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.2) >>
+>> endobj
+901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.842 203.541 369.063 214.389]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.4) >>
+>> endobj
+902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [501.358 164.107 523.829 175.232]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.567 152.429 175.787 163.277]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.5) >>
+>> endobj
+904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.029 101.317 237.5 112.165]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [328.354 101.317 358.574 112.165]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.6) >>
+>> endobj
+910 0 obj <<
+/D [908 0 R /XYZ 86.4 726.045 null]
+>> endobj
+911 0 obj <<
+/D [908 0 R /XYZ 86.4 660.044 null]
+>> endobj
+912 0 obj <<
+/D [908 0 R /XYZ 86.4 596.977 null]
+>> endobj
+913 0 obj <<
+/D [908 0 R /XYZ 86.4 521.954 null]
+>> endobj
+914 0 obj <<
+/D [908 0 R /XYZ 86.4 470.842 null]
+>> endobj
+915 0 obj <<
+/D [908 0 R /XYZ 86.4 252.303 null]
+>> endobj
+916 0 obj <<
+/D [908 0 R /XYZ 86.4 199.253 null]
+>> endobj
+917 0 obj <<
+/D [908 0 R /XYZ 86.4 148.141 null]
+>> endobj
+918 0 obj <<
+/D [908 0 R /XYZ 86.4 97.029 null]
+>> endobj
+907 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+927 0 obj <<
+/Length 3652      
+/Filter /FlateDecode
+>>
+stream
+xڭ\ێ�6}����=��"J�
L2�l�$���
d���V���-�=��ק�7I6[l�|�DQu�Uu�EYT2y�$�on�����=��������$�DL2V���n1�u*Hz;�9���V�l^�V�3:-�W�n~8l��z�iog��"�2z���w7_���~C&�P+6%�������ߒ��|7I/�ɓ귞^G�ɇ��$}5�4�$M�,(��Ԋ���l�_�f�O?ݲ|Z������苐	�	�խω�1�$q
�{]>ݢD-�IJ5�S�&A��v���e���(
����A�"��	f����#��<���T���ɠ��j��iY��Y�}ظ}rAX��k*�I&i_e���إ���X���a6=֢-��H;P_�	X<#��(%Ej�<�4�SдS��ւ$��ʅ�+�u�R>��߽��popo�w/��	!���H}s�$�
�����ͣ!��9�� �� �in�T���,� �WFZT`�UK��f�ȁ=\��<ϵ4ʇݎR�M
�7o*�lw�]JtE [...]
+V�ʂ0�,�vʂ�,���ty���O
+» y�gG�A��Sn
A��h��4�Ҵ�:�ُ��*�&��@l��3	�TAM�M�^�D�!��H��=����M�z�y4�Q���r�k���֎P1�J�:x
���R2�jq*�L@�~��,%)s��|��G
g���ck]�D��_���9T
�<�8��� �J3)��y8�<w5��u�n�
�
�DI� y�F�>{��T�]
�4�4Ȇ�o޼�ĐG���԰��'b��1ܔ��z]��f���� ��F3x�E������,Ds"��Y(=#˽�-䴩*�ɰ��)���S��r�5�A��o����
Rr!�I
+�R(M��[��ƛR��̸AQ�R_��՝zr�Q��
q]�D����ԕFRUW�ԋ[՞'�����K�d2��
yS������O��~��3='����V����d{<,R$�D䌰�_�a�h"2%*�
c��jH
������U��[m:݉lj3(�8˰�#�A�h�E]�ZovM27?@�W%v
�
k����~8�)�*ۺ��	�jL��F%
+8*MK��U�1-z��O�
~U	�,Y��rs�l�̄Uj��
�^�=`}�
-=J����e��D��''9�ͼ��z����SH#X�6�?J�k0�]�<���S%̣>/u�E�i+#���Wku'�>�
+�\8<>„�Om�E�Ie}_�@r9G�>��̕�q��p�GRf*"�0q�i��Ǘ�� �R��F_Ӫ��u�Y�PX���q��t �t�
�z	��L�Zv�$dP�!C���ck�Պ�%��G
	�B�_�����*��`Y���=X]Y akSA�
+��L��p
��PEѕ��bzw
)H=W���/���I���R1�	
Nu҆�.��<��k
�U�P�+sc���i:�u�yʣ�z*-X����w4�n.ߕ��G��
��:��X���oX~q³���tC�f)���C����2i�'u
�B�:��5}�!�v��A��t��l�{}|Pt)���C��n*��`V<���j�
+���X�u�N�
 #��Qd����.�X����˱���#��`*"yW)�����u�f�e��^������L������������(� "񀗇� p
���ղ���^bL�XC[�\�
J8��T�huPH$r�~���S $�C�d24/ �`����j�͎F�r�'�'R��#\�����SS����(i~KJ��b8�)g���lk�r�+ m��j��f���OIƙ��έ�j�G{�,�fA���`W
p��t[n+�Z�
hkA�tԂ������3<!Yb�ۥ`%
R�
/�

+!�*'tO]
�54m'���1�u�C���P�8��m�
�h^n�yfQ�X����t�Y
5�]�D=w�
+2�S�
�C*�y��T��wTF�
;�q��o߲�$�7�C+cS�o
��&���l��ڷ�D�,���,B
)��j ^Nq�yry\
v���r��V>�`M��.
�tK
(���IX@�(�/3�m~����a2��adq��[6U�h=Ȓ�^�
��AK|�v�T�u�T�eg�=�`jr��PM
�q��j�.�;�P�{�DO��{n��э��
"��B6�U��x�9�i����nU���P��Iz�B�D��Uɒ
���Aa*2�,Jrk�w���
Q�`}�S`m1����i�|���Co�C��0
+�m�R
LΙ*F��&]c+�,���Ic��D�<8tC�k����9aI�R�����_�?T^`�e�^F
`�u6��Q�
+���2*�iu��
���aa�Q��[F]��e�6��cFe
Li���K�L$4]]��'W_�1r���!W�
�z;rE�t�
+aZr]a+G�kdrE�#W`�\Whmɕ
+�q�\)(C�cr&������+0ƭ�1=܊���V at oǭ��[!L˭+l�u�
íCw�
+
�r�
+�-�D(��z�`������-�qua�e�~F�Q�u6��Q�v�
+���1*�iu��
���aa�Q��[F]��e���XFqІI��}W5��z?«ˠ���c���lL�"��x���*��U���
+[9^]#��*��
�C���Bk�+�$2�W4%�y}��=��J]��Tv�Q �-)AHK����㐎 
���~1 s��y
ё5��T�G�4܎�h�=�h�}6�	�i�ʣ0;e���~��,G�}���}�~G�t�A~ǀ��@Z~G�t�A~ǀ4� Z~G at t�Aj~�@�� ~��xJo0j����y���6���?�P�2X/��c܎�i�
Ĵ䎁i�
�t쎀i�
Ĵ􎁩�
�t�� i	
�4�i
��
?��2�\�G�x��v�n����G�����D=�#z�=�%z �=�#z�=�!z �=�#z�=�%z ��l�S���$��_
n��E�{II���kI��{_�1�G�ttaZ����t`:�G�ttaZ���4t@:�G�tta�ǀ�t@Z��
�;'������,Ae s�V�j9K{�V���ݷU���Y�����P�͙y��N�Fb�����8�'���7����������^ޟ���(<_EТ�s&s�� �p at j�
ߛ]V
u�_��{p��
��\��_�<�p��
���ž���jS!
m��+H;�I��˟��w�I�����
+��(LmF�q�C6܌)_�ߗ
~������5_x�S����/<dG{T�F��/COؽj�^ ���۽�&#�5�n�^�[����5>�}gw|>��6�
ׂ5���0����~�E3��l�Ǧ�-[}��&�A�5Nڏ�n��Ոx�(��Om1l�+p~� ��';�r�w�e^��x&d��4���Qz�=@8̦z��r���W_@���
�h�`�B�a,�M
f���η�ٝ�;l���-��2�~��>�����@J�
�~��
+endstream
+endobj
+926 0 obj <<
+/Type /Page
+/Contents 927 0 R
+/Resources 925 0 R
+/MediaBox [0 0 612 792]
+/Parent 934 0 R
+/Annots [ 906 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R ]
+>> endobj
+906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.478 675.733 305.949 687.689]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.292 638.462 374.763 649.31]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.801 422.949 168.523 434.904]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.1) >>
+>> endobj
+921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 387.637 92.377 398.485]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [275.807 73.562 298.278 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.7) >>
+>> endobj
+923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 62.16 526.596 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+928 0 obj <<
+/D [926 0 R /XYZ 86.4 726.045 null]
+>> endobj
+929 0 obj <<
+/D [926 0 R /XYZ 86.4 672.778 null]
+>> endobj
+930 0 obj <<
+/D [926 0 R /XYZ 86.4 635.507 null]
+>> endobj
+931 0 obj <<
+/D [926 0 R /XYZ 86.4 551.577 null]
+>> endobj
+932 0 obj <<
+/D [926 0 R /XYZ 86.4 514.029 null]
+>> endobj
+611 0 obj <<
+/D [926 0 R /XYZ 138.11 359.864 null]
+>> endobj
+94 0 obj <<
+/D [926 0 R /XYZ 86.4 126.82 null]
+>> endobj
+925 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F11 691 0 R /F14 694 0 R /F16 453 0 R /F55 729 0 R /F41 933 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+938 0 obj <<
+/Length 3011      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[w۸~���S��q���no�g7�&N�����H��V�$e����
.�H�,'�>�$ `03�����$�|{�盋o�E2I�4���f91I$'��Q"��f1�i���k���S]ln/g���7��O��EL�e徾v�W���b�5E��/�������/
3�fP���d�����x�@�w�8��<�~�i��|���Eܗ��f1����$eӉ���
$I�4��|�WUY����8�������k��y5�g�U�y��?-��9��:Ty���7����o������R�i���aޅ�Y�E="���Fw6������)I_��Q�5��R����Q'�����r�R�ۦ���MO�v�h���
�6�{oG[�y��p��͵�k�KhY�9�,u���_����,��L>�Q�2ۮ�6�'����G�@�QcM�r��������ͭ�P���I�դܤd"!�����r���[�81��k�����=
?�]�Gpb�n�x��ʾ9Dߍ�<*��ܩ�ɾΘ�'Ai��
�Ju��̇ow�^F����HG����|Ɣ,r
+3q:���`i�5�M���FaX��nof��V�bS4E�*�����sp<,r��l:﵇���>�^�"ݴ7dp���@�G�2������W	��!�u�?��nEj�͜/\|���jA��o��n�9$d�	
VY����
?'6��lpr�l/XYX�?���S�lr�S��{��<=��7�����.W[�F�n��\߯��no&�O͊�5/�)ߓvn�v��(1���KαY���0mB�u�.�'7�g�3D���/U�g
i�^�S@(�Եkl��Khh�V�_B�b�GA�xd9T�����Md�����i����*M'*�/�:2z�(N?��H�4�]Fc�4RR8�߽�zmu�/9�qc��O��z
 �����QՍG��v
x
�fg�	W�{e#
M$J��W

�"b�s_�,���ᬗ3����iuN�Kh�ǝ�G��V�p�$ⱷڛ��WŽݐCt�O&
6`�:�ᓭf�0A�d��M�d.f�^�X���P�P攭-e�˕c0>x��5����&.vƕ�b�usU�n�y '{���
a{S���'��#�,ws�t
mǐ*���� }���d�-����<mAZ�a�c���4�[�,=7��@#E�k�
�b�z��B
�;�C�o ��z̶��F[B�$������H�j'�Y���!r�H�H�6
+=����ߏ�I��i�ձ���r�#�R=�gg6��A�#�9xN�A������`Ք�V=a�f4
M\ �>
b�2Q
+�u�#���u�w�j#��tNQ�O��x
��|��)�Y��� �\e��`O�'?

>\��H��S
_�s��K����c�r�Tyퟚ�?<���"���b�/�DIz<�Hq���/;�E
q��p/��U�˶�,�2�
���59
+��6u+	B�Ek�qa^��"�Z9c��` �4z�0-Vn@���w)��/#��B�\��6}��1��bS͟GK$G���
�L�̩��)��1&�A�d
�2�Q�î	�L�
"�#^B���Ͽ���p����7$��D
+�=
��0��(�w$����+��q��#�@�GuRF��SbI`�T
�u8D}�>�e�"�@�y}���!Q;��.��q+�
�
�����@]��W"����^)��:����@��ڭ�-���$�)?	�
\WG*i��z\��ˏ7�uR�I��|�
��(`�-�[��1Y����^V�1GB`���cMFlB�xj�Hi
���J�>` �E�7A�28�W���h0��������ɬo쳩$b���3	M]_A�6�P겓݃u{P_�MV�|�3^9K��R��pf��Y�_6;�+Y
���l�snJ`Ǫy��Oܔ�oJ�Ȑ��������rd{P�墍=#�@���Ӑ���&f�������HdL�%��&_U\�P�F ��t�
G^\V��s٤E����2�]0{�&f'����VF�4�=�Q0T���m��bb��sۆ
+*
�K}a���:U���W��ba��>b˾�dpR�e\T�Bt=��
m3�6x6�
:IپM

�����g���
�x�m��
���+,ʞ��
�s�Xs�i�9�5
ōO�?~z���ǏG�����A=�������}�+*Z<��	<�v��{"+U�l���H0S̆ r\��	HS΢I
՚?�Lj� �9&5	|9
NJFl�aB�ύ�[�3��
N�%�!C���
ES��)C���-��%�l����Rޅki�r{{�Z3����r[����l�1?�I�ć\�LyC���K
K��H�Y

C�$=ű�0ip����W�Nw�+_�h�V9(����T��k_�
[}	��ǔ��h:��/1
� �,f�Pq��o�q��a�`��������t�l�h�dt-��?.
�2�bc�+]V�(�
��[
r�0����Lb��
�]�dߗ�NYDC$��s�*;����
�o�*
P,
���$
�<�H��٪.�t�"�a��
�4�/���A/!K?T�'�jD�5�~��H
�6�Z�g�D*�8�u��k�/�xw� ���j�t,e�������b���n�����0�9�J}U���pq��W�9�G�oq~
,?�
�A��� [...]
+endstream
+endobj
+937 0 obj <<
+/Type /Page
+/Contents 938 0 R
+/Resources 936 0 R
+/MediaBox [0 0 612 792]
+/Parent 934 0 R
+/Annots [ 924 0 R 935 0 R ]
+>> endobj
+924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.177 663.778 435.397 675.733]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.1) >>
+>> endobj
+935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [256.431 360.991 278.902 371.839]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+939 0 obj <<
+/D [937 0 R /XYZ 86.4 726.045 null]
+>> endobj
+98 0 obj <<
+/D [937 0 R /XYZ 86.4 650.268 null]
+>> endobj
+940 0 obj <<
+/D [937 0 R /XYZ 86.4 581.63 null]
+>> endobj
+941 0 obj <<
+/D [937 0 R /XYZ 86.4 472.565 null]
+>> endobj
+942 0 obj <<
+/D [937 0 R /XYZ 86.4 198.712 null]
+>> endobj
+102 0 obj <<
+/D [937 0 R /XYZ 86.4 109.761 null]
+>> endobj
+936 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F14 694 0 R /F38 509 0 R /F16 453 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+948 0 obj <<
+/Length 2677      
+/Filter /FlateDecode
+>>
+stream
+x��[[sܶ~ׯ�Kgv;Y7`;yp;�/�%�N
�]J�t�TH����
 �S��fd7�8��|�hp��ǣ�
��PAD"�Upz
Ed�yD�`��&���$\����E����v�\�E|�M����n]�ٮX�x��Yp������G�
1CVM#U��:��

6p秀��Ǝ�
+����mpr��#�ٟ�R"C>5�		�<���(
+�1�=5��*姰������h�BE�0��������̶I
��I1�ӌH�	�{*PF�Ș�U@�7}�+
��
��¸��޾#��pǎ>���U������iH�M<�7�ɭhâ��„�w2�e���&�����z�d
��'�Y'�&�����8e��`�`i\�H�u�^��w

>�Slqz�� �x�Q��2Na�Zw#�ҳ
#\�/�!��"Y�?S&a�W at D�9
K�k\��8�ݍwpVd�}����P��
l�EYw�O��U��yˢ��A>2j�$�\OJ��9�gJC4�+IA"-j�01BiQ-�t�\�-�1�t��CC	د��Ӻ�X�:�%y�}w���S�v��#��@(�x(�"e-v��nڳmfŮQ�*�(��.��p�wn�
�E�����y��P�Ԅ6�$S	D–B>>B]\N�HR0�C,+ݖ��c�ePw��<i�
R�nL�	&]S�癿Y���
<�7���A_�ƻ���M���0�;I�u9���e�w�O��3��ɜ�]O�TBmFhJ�`�\.�!I�s�
4����
� 4�]��
�?(6��&E���;����E��Wq��g[XX�M�����;�6eDW��wg���Ql��S�����=>~zr2��!�U��6���>	�E���
�0��]���Hq��N(�;-E7B�5
+��Y���������F���
2�)ue�z��ń��1!�&
+�o�|w�T�Y�XI�}��X�4+�ZR[K��.+��t��i�M��U
y���twcw�:O>�پp��ٱc޶�L+�1��%�1�1�V�i�� ��w���pJg��cM�!\�YdB
Jue�|�����)�RD(1H�B.����i����9��:��Ƒ/c���g�u�s��5�枼�I����>9��a*�<�}�cx<q� ��

���������[�Z�#�]��
������T�E�ؐ;؅˜F�3X(�fV �]�n
+ٻX���� 'P<�����H
�{ -����O
tv�xI�4/��>�6�y7	|8�:���=�t
��y���� K�u7f]f�;��Xb}A�
��y7������艡�4s�Y�J��F'|�t���	���^�DW�IeM"��geeJ��`�L�(��;�n����9˶��C.���:�-!Gb�
&.�VS���xTNC
���[9K�ǩ��
��x����!ͧP�Z��E�0UX�IRc��7���j<�qH�+��,dΤk�j�ԘA��4:"�t��Ay���Y��#b�� Nc�U��}��
��}^�P�
O�t��R?U��B/��.���h7��
cR��uv�������V�5Ϋ�L�>�JP�0ɩKs�Yj[I8G< 9�p:x^�O���e����\�����Ԩ ϼj�V�
+wvI�)*�n�Y���
mij���H�Z�C.
�'�mx.��$:�F�]����2�ޞ�p�+3�Sf 
+7��v�a��E|qh���g5�_<�D6���IEu�x�� �����*�?as_
�q&�"��:���Bْ����.�+���;2]2�f��*k����
�.c��.)-H�{�<��__oS���B��L�h|I �
�����B"�zLy�NB��~�}	 7C���k�0�e
+�[�U/�+I
+���z9�BI������O_
�,zYAdE�r�pC�p�s^����]U�@u�
+V/�@0���w��rt3���i�@>�I3"�ֳ���
+�{�9A���%�O��J��+"��EO~���
���sQ��~ir�A�4���N�B���� '��2Ck}zS>�}594��ң��v<b ��a��:�;r�� �
+ޢg���5x}���
�)�e�	>TS�T��m �����H=��k
&	�r��d�d?|��'����<1��<
���ǩ�Q��{ ї��AR
�<u
�R
��!���
����?��,?Ȩ�<
��S����)�p��!����0��	Zq��!w)8�@����&6di6S�K�&�����W����E�M�d,daM��4��:Z\9��֝a�W|��s��"�__��u�Z�/8d��(܅�j��?��ǯ�,nk5"P����>æc� ��MԼ5��C��NGkk�#��,�F�/v'g�+7�f�`K��wI�u�����\mk���i���Z�mVmJ�3�!�6qФ�
�������
�c��L�e8\쑦Ft��׋��[�{U���tk/��
�-d�kI��]P��X�m�Z�m��gWa�'c�+���_g����y�-@��C"���
�X�V���8��lr(k%�]���P�����zRD�Gn��
Zz��
+��dOQ�V�_ at +Z�����
��Ər�
�d�]Ag�g��#0�C�4� c����.���;ڹ�Q�*@Qx�fk�%F�"�/1ZӐQ� J�� �g�|
+endstream
+endobj
+947 0 obj <<
+/Type /Page
+/Contents 948 0 R
+/Resources 946 0 R
+/MediaBox [0 0 612 792]
+/Parent 934 0 R
+/Annots [ 943 0 R 944 0 R ]
+>> endobj
+943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.99 201.993 232.712 213.948]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [468.828 172.338 491.3 184.293]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.3) >>
+>> endobj
+949 0 obj <<
+/D [947 0 R /XYZ 86.4 726.045 null]
+>> endobj
+950 0 obj <<
+/D [947 0 R /XYZ 86.4 701.138 null]
+>> endobj
+951 0 obj <<
+/D [947 0 R /XYZ 86.4 511.835 null]
+>> endobj
+952 0 obj <<
+/D [947 0 R /XYZ 86.4 270.787 null]
+>> endobj
+946 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F10 754 0 R /F14 694 0 R /F13 757 0 R /F7 753 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+956 0 obj <<
+/Length 4711      
+/Filter /FlateDecode
+>>
+stream
+xڭ;k��r�ϯ0.PTݣ+��h�{{�i��M��6A�cӶ���豻'���
�v���Ԑ
��&��N�d�����>���IwE\�:ݽ=��4��Lqj���a�.���Ig�3���Usz|2��~�����k�0ѱ������z��}9Tm�?���LJ��>���`�d��
+.�m��_
�������.�M��>Ҹ�Κ"�Ъw??��C��8�%8-T���	���Hm4�=6\�B�cعl������+,y�V 
�����a�Q�ʼn2aTn���x�v൞�Y�,ܷ��_ʺf�p.V2���{�^�eW>�2yhW۰�؄)];6����{��<��=)m�<ɠ���	_.��Q�ѹj��Q�U��QE��'���#�D�$.9��w@�
�JZ��*a� #Ҹ�L��QY�"ۙ8U��/I"#���4��K�r�<�ck��i�ȩX��&����l�N4�A
��-�
h~��z
�
�6��}�q�Ȯ��@��>~EF��>Ȗ��}Y��n��r��)l�G�a��
@E#���}� ��k�

+oL�r'g�H�um��]Ģf�4*	�
�Q�`�<j�
�<��J;@ �j��
����Q

u:�z�<�l����J��5y��B �u�<�@c�� I2����� ����k� 
̒���l\��>~|r�Eo
s9M����˵��𫈪�(�$�n��˻����k��Ĝ~(�A���o�^p��Pж���k��ã�C��@��(Ӫ��*L?�=�V��ke��r�"��8O��<�Iq�c���J�‰����1q��p�l���$h=�mZ^��
*	�PK�N��'��-NbZ;�b۷�P��"���8�-�U����*+!Od�nq�B*�%�׀�̊m�
+wbl՞)�A�l�іmq1�cc��X�^��ȫ��{�hS�]���"�|pI��]�S2�;]`=w�@�l�0��7�G����ϳ뇣��V����F,qѡB��;�u
ܶ��q.E�����Y�OJ�ZA�'w�
�#5���{�9�L:wk6-���k�v�VS���䟙��&㢟�
�x"vm� @��<�kfV���٣պ
��mbGW��d�K���ɧ�"�[���YgAk���!� TSXAVЦ!
�Pe�Bl�̞�:<j
��G��.�P^9vz�.�<��E	���N’��ߏ}�NҊ�����IS������}LJ�
-Y�=��8�v��Èwtf|X�IN��v�T�
+��`���B��n��0��N�[�b�4ѵk!����wI���yin���P	y۽�H�#>�S�bm�� �=ģ����Y���, 'Cbؐ�z~�{j����L�Ғd
M|Am�T�s[�%������������y� S�h1�&�Nhm昧X�uE$!��
>T{��5xf�5�j��U3I8�}9��T� �*�@+Hǵ�������mwX��}����h��H�j?xJO�C����Y�|s�֦��pR #���qPL�KKS��9���8�a�s��4	� T
|ɰR�s�}%�
}d�0(<m/�WإY
+_��<g;
+�
k%��g�jď��~S5��A�J�E��I$�L�ʠm�P.=
��_+1l�2(�N��5Ly��#�o���
��7���F$��L�	�8$D��oSd���O)Z{4�(/}U͡�P
FR����������, a�0�2�}.ka5"�
fA`)��
 {�#����RR&��

D�'$�A�.��
\vb��eX7ւi�_������P
���@i��އ�1g�4�Y��=�ϱ�ԏ�Êq���k/+�ȑ�bc��W
�����dq�<�sE���(?�
�(� i��@���#H�'n�t�����G���.xs0��^tf0��xҒ%�*	�aP�Dž$�|���R�m���ȓ
��������+BĘqUE�;��#��Ǟ�&У|�,

|�˞ Pr�6 ��ِ>��-�h��L��{hW���#64;�O��|Z�^��ޏX�b<��٪��Z��2��r���^dD#��Iq�R�	��X=�N%TA�-�lȹ�U��ʭ��+�<����W�b�ҌL��d*k.�B��\�}�=�.�5�D��h�%e@,����x+���m����@�=����aQ��s�&xAUl�s���.�w�.��� A�?z-8�

�f��j ��*x
�w��M�<6��'"�;�΂u��A�)c�3Ej��D�R�\YM�8^@6��-��JZL�
�2�# [...]
+�*���;��,�4�(^.�KM��#
��
e��p�Q��СeȔ�"p��@�
Wױף{h �<``�r�߈��ͤ
8�Zy�E�F��#
����l��f���`LI9Ik��]H,��N�M�:x��A��|��;6"8Ypj�;�YK
�kF�K��^�O�`=i��tf�TY�[W�7����Q֒F�OeՄ������F���%�Z�>#8ړ�8b
+fy�94^�k����z�
+���
��s.4#�n��WC�^ǘEeŘ�
=b
���ƀM"��b��`��B�~����p&�*�,�2�W
ĵ�j���p��1��u;���w�)�aG���b
�ڔk��N�s�q%X��+)-��(�t�m%($���Z��g唐s.�b�n�Bw� ��A ��xn"��6S�� �4�I9��y ��#(��m ���e#����NbS�e�v�0AB�%2�d��Ć�N��  �-_ �m�C
�:�ZD at 0L���=D�3�IJ����x���5�5�J�u�PY��h�����+�&����`��8���h�MI��� Y�OT�����|��sN��'�*���E��Ɇ�j�lbV��{����=Y>���5���Y��})йx���|%��JO�<�D������IZ�ڷSS
あ=_;?J�ZK
�
�R�"�OyGd:���W
;q]�!R���+�Kh���V)3�e���)q}�NBOX�z����� ?��㍒�VR@�;���<Z((��ޥo]s�X;5y�Y��
uW����e
�`�U6�05Y
uZ�x����<��Z��[���
u��]ߺ{��۸�[���]t�itJit�֑8ǵE���L
��b�_�a0�t]��G�9�]
w�� �6!�jz�`U]
�i���<��w�M^@b������a!��$�(��;@�D���Q�:���2��c�����)�lJ����'�}��VۊbrnI�MH����m,CW'�a�zݞpd at 5��2�/d�-�D/T|���8��P�����E$
���׀6X���/���TS�
+��ѹ���g��d���Hս�$"���}@��

:'�ᾲ'�Y�\�aCʬ�3�f`u�|�� &����#h�W���bBg6�x �r�r�4�GT�֛{b��-oz7�����
��4�cI�o6����.�wߓ�5�ޑ����k��TH[𠦸���X�q��ƮȾ���'o����q��Y ���ݐ�#��l/��E
��nU�X�
^�*2�*2�*Ҥ�^�����ȉCX��7��󇮬��9]�`WJ�
#��-uI��b|9��_.C�
1쾝�����K���b���.}
}9�K����
_�ԏW�k��@��74�86{�5�B"��p/*5.��ڲi�$�ģƷ�����
��2�4\
a
�쮔�S�㻳/
ŗ*�0_��|1�4�c�4�^Km��<HZ���^5��b'Ɛ>�x2wWϔ���7�6��}�A�U�P5�
��
�!`�c
j���	�r�jTl�۰1h2
��.�xX�3�I�Ql�����>8#L��>ă�NyÇ'T{M��.xMWy���ڱ��?�Y
�M	.����a/����+V�� ��XD_���*���^zp>�z̄��­`|7��#
��k��0ޤ[o%>�Z��E��
+�A�1���[I4�c�e��|J�z��.�IH�M
� (>U������\BAj����z�{��^y
�����^}gs������39��"6V�Y\��q8��day:��ܾ�!�`}W����4�b��/aN�$��^=]�
�9�1�G��?m
��EBK����G�b��;������h��9�P�Vw�r17M�b��*9~��QZL��&7���r4`���Kc��\�M��W��)�Z�|�*�
"^�S��qpAȯ�|�.l�>[ �/�
K�
��X���l6�"�s7)���
c:��[afDL��o��R�5� 1�?�V����i���ʏ�$�ç�6b���"�-S����?�M}/r���(�35-�-�譌�*[du\���m���X�QI�%-
+ ?���
�T@��ĉw�F�=5��V<�A���#6߆Sْj-"����ղ�o~�S�$���GH>˺��4���
����x�:��થ;��
+�
+�ٵ_U�ef;�E��)���B~z�e/z(����3إE�Ny�F�H
�}w,9>CT���¼���4҃�$z�zў��S}�n��\�
��t�-���U�"�����|�����[G�%ƥ���m$.�w1���*�癑�1O�ز��p���
��>$�ff(5R�
�Di�Q�k����`���o�J��J�F����פ�|�"?_-
=*��U�~�{���w��
+endstream
+endobj
+955 0 obj <<
+/Type /Page
+/Contents 956 0 R
+/Resources 954 0 R
+/MediaBox [0 0 612 792]
+/Parent 934 0 R
+/Annots [ 945 0 R 953 0 R ]
+>> endobj
+945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [495.175 593.875 507.13 602.288]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ida_ex) >>
+>> endobj
+953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 146.618 519.955 158.573]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+957 0 obj <<
+/D [955 0 R /XYZ 86.4 726.045 null]
+>> endobj
+106 0 obj <<
+/D [955 0 R /XYZ 86.4 182.4 null]
+>> endobj
+954 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F13 757 0 R /F7 753 0 R /F16 453 0 R /F11 691 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+963 0 obj <<
+/Length 4093      
+/Filter /FlateDecode
+>>
+stream
+x��[�r��}�W�[���\T�U�eI%YRl��<خ�I��X������ຳ˥�J%Uy��2���>}�g�nf����w�g߼z���zvy=�u gO-��r9�y.u�����j��ey�`�������:k�ͺ>_�D�x�����o�^^��v��M8c�X�Rϲ��Ͽ��%޼���H��W�n5�"	8�����Og�p��t�:a��
�W�۲ȗ�`�j�k�u^�
�7��a�M�;g���ض�mn_�M��U��i
+߼bl�)g"��
m�om��0vվ��#���b����/���:_@��ҍ����,\����#W<j�2q��s+��K�/�,����#v��(am
���@�n�źU�j[�u�/�6��|�m����s�P�d� Qn�7�*m����%Žeh�J�
�9ֻ��H�zHR<J�vE�e�2�/��<��1��z��E�ag�n�ah���:-ݓն�W�}��V��k�
�������B���ޗ�U�VE^?ý֐^7y���H0f���A��V�o��*�7ЄTF�Ei:���f#�'�F\t��HfY�?۫�Esk��ߋ��AÆϷ�w1�n�V�����%Ta�Z�L:1�j;}��@���WE]��g�Y��	�Lv�tv� �	k'A7���`�X��E��`�[c&ȧ��O�yDFq�f�i
,�%��j��/��g��������n�C=B�����fe5� �l��ނ
fI46�$`�9���w���DT��ry�9���� 8Tx]mV��
㻶�w�+�m��C��� [...]
+ugs^iX�dO�Uv�&��^�Br��z�
+]�|��5]���!y�t2>�_����+7��/��h�#f�52ü����q<�K2�0:�҈�I�E�j�H�=j�4�x��c�h��A}j�y��"+o���-�
B@
�te�� �,m�
�"��`G�I�Q0#
!��
�s
�cأ����Ǘ#��pɧ���ŋ�Mzeb���I^�����G{�Pو���)����7��<όࢼ#d�~
���'�g��6��W��������Q��a�=���W���ǁ6Zv�yӌM
�z�����\fu��E�6�9�J�G��7�aj�Ý�1�!��h���9龅4j4�g�^��@*}B�߬'r����q��Em�� �W��i�j͈Z�i �5n�Ҹ� ��fW�7�{�18\���
��[�:�D�9ة�
+|�j!N�ۗ#�u�V&d6�y��>J��=�+�:�Yрvuc{K���h��be
ٲ9{q$
`0<�
����bp��x*&@�6���<5Â�e�h�iG�'f�Lҥ)�w��Y��̱DzctM
f�kչi�`9J�nn�}f���ƥq_O1����U�AH��M�f?��t�<�Q���Gu�'�9�B�(O����"�^��'�j�b[$���8�}�Tv OH	
��@����]���MH-M��ۏ
u$B�O��7�?Q�d��� 
������]H��ӆ��ݴ-8	��)���uB}��	$s/:�r�wHzcY�$��	�P�'�9P���T���

w�S�K��#k�m��E_�؟�@��S�>_��N��(@c��ޥ�4�|@\�W�y�i[>�]�4#�:�3�Ӈ嗦Aܓ���@�����Z���#�_�y����K��8��z��T~b�>A"�G��4~Ϭ�"p�xJ
�8Il���Sq�-'2Sr�ںE�k�
Qa�˖=|5� [...]
��X"�
W�%�A�ң:�i�^�P����An�֊�{�U���狶���
�T6����m�QG��֦�MI�}k��V�
�i�lW���q?x�ލd��3����
+��Z,�[7�����1�����
�h�',YZ��Q�<}��M˓@�I|4Q.�<�&�8���%��LĤ���̳��{��U����
��-1h�{k��	⦮����f�:_�Y��M:N��ܤ]A38��_Z��%�.�8\#���<_W�]
�2&<p���̥��T�L��v�l�tA��\����m`��zK�x~��˶?�@+ ��7F+Y� :r5U�j��$�.��1S|���
��f�� @=t	ۀ���
+���t"2
�#�Wf�R��'=
� �[9
�J����WW�Bzj/E�Tԋt߬�b��� :w���]Q6���ͧ�l�;S��/��M�\2���}@x�I���nr�:��D
�H%0pe���N]����^��؛8��oS��-���d�\tf���AS�q�OY��M��
+\��6;dY��'�`��u7�����a����2>�;�R����d�&�X�V��A��C�a�q|JaR<@�i��q�;r�(�N+L�Ae�M*l˼Ϊ����:���X��mщ���tK
ʟn��]�cob���I0űM]�/�%awuGT��~c
���3���!<"yqb�F����r��ȉH�,�=Og��Z����=m�ä�yA�s�
Ӥ���:��.�5�����7�q�t_
�����'"Ƒ)��rH�\�>u<
=��3;�T���d&�
�i
A.�Ǥ��{c�[SٚT�Ӭ�MIG��ԟM��Cɾ
+D�kV�e��#�����q� �J�H��t!�el���d�mi��PO꒻zTQ���
+�5x��Dj��M��,*̬ōu�ʉC
��7E���ꪈ]��o�
u�%�
+����n�
A�����~���
x��9� ���1@��EHp�GX�P�B�t�[�d�z�
����;z��Xz�
w!B|���92�6��G�O�z�BȝB�4UA�~�kS�ΐ��(��j��7�p��F��YWP��Kɿl�A*�|_I��h�گ	P�|3����F����Y�"�q�� C�~�����
vA�a�(Q�=Ho�f� �X7�U���6H~V
+X_
ߞ+Ct`f��7֏��b� �R �]>Eg�=&T���+l����m̼�SM!lw;K��J��
�y����WX�@�U����
^y���b�:�=�.<��\?j�u�o�|5�ƼIT2d������ˋ�#f���c���åe��
���/���H��_�-���<��i�˲���w�=�DE# ����D���H�D�&���/�{�$"��蓇�ь����ݻ#k(�爽E�H
/�� 9r���C��
r?���{����Յ;76����yk���X���q
��u2��{-L�bOba€l�n��&��N[����O�7�)R�X�N�U�dFdXI
�t�b�
��s:	0q�;����qj���vC�SE����s��0�'�^PZ��d����
��X�>��5?�1_'���;m�i���oN��.;蘖��
�j
"
�����:-�|�-�
��J���t0b�P	u�KJ��#F�*�MY3���1=Z2ݻ#���� �7����T<�)S�ba_e#oO��s���?Rg!;#�_H��Nԋ
b�:	b���1:dك��r~&踭��v�����!���	���Q=�Q�����T�,��$���?#�XCm�7��ށ7�K
	�^$�I�V$*Lœ
A�:Z�\�H,�Լ΃%�<���
+q��y0,�B�K��ƻ]�m�^m��t��M�S0ѷ98�(�{��$F*+�3���t�3+�������v��j�L	D£y:"Db��@
�
�S�T2���WB�S�"��j�Vt���t�H��H?`�ǫ�t
��'��4p���2 u-���M�A�T���@-ҏ�R����w�Bh�_Q��pE���d�(��®z	ٓ�v�-��*I_Vu����7�9��"��x���4]
+E�
���(������&
+Iݿەf�}5QDt�[�	5Q�d^���(
E�)J��#��+��M���N������3�|
+endstream
+endobj
+962 0 obj <<
+/Type /Page
+/Contents 963 0 R
+/Resources 961 0 R
+/MediaBox [0 0 612 792]
+/Parent 934 0 R
+/Annots [ 958 0 R 959 0 R 960 0 R ]
+>> endobj
+958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.792 556.635 390.012 567.484]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.4) >>
+>> endobj
+959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.14 556.635 429.862 567.484]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.988 413.073 445.962 423.922]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+964 0 obj <<
+/D [962 0 R /XYZ 86.4 726.045 null]
+>> endobj
+965 0 obj <<
+/D [962 0 R /XYZ 86.4 399.914 null]
+>> endobj
+966 0 obj <<
+/D [962 0 R /XYZ 86.4 154.446 null]
+>> endobj
+961 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F11 691 0 R /F16 453 0 R /F14 694 0 R /F48 609 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+969 0 obj <<
+/Length 3011      
+/Filter /FlateDecode
+>>
+stream
+x��ZY���~�_��pS�x�#�<�u�$��Z�D�����	 %˿>=�A�����/����tO���4��O��_��\|�ɉAFR9���h��DQ�$#��������UZ��*[�_Θ�ӗ�.�^�6�+J����Z��l�l�bU]�|�����ů(�	�)���̗�Ɠ��j�3z�ٍ[N83��]>y{��+�ݕ��¥!�(��S�ٖ+Xc�O�BL�|���ԓL���ӛ��%ݨ�>�iq��o���2]�Y�y���ƈ3�:�wyr�GuQ�(���X��%��/k����3;��/��fwr"�ߙ����2��d�te�l`s�@��9,��az�;��
+��|v�,]U��"8�}e�8�{�af�dk�T�A��&���¤���֗l���
b���zw=)���U~�2�6e6��F��
�
�wvg��vg��5�3�bdڍ�Bt#���L�����ɶ���s�f^��^��j�L�
h4&�
�j4H_�
AFO�f���u���h��d���l�U���iY�=�+9CT�q�EL�ƀ�	�1 ��(�h���a
+g��5l/А�!cD���%����	��p�O%�g�a��:���E4�ܯ�i��-�8�1��LP1����-�d�dW�>�[�I��

�veO�p��]�2]>�
���v�N��!/>��E�o{<v'p 䇙#�x�V�2[;5�a!�x�DOﶫy=j�T)�tP�֔
�aP�zT���|c��g3n8�:M��� [\R:Mn��
��
+�l�&�_��:���l?w7=xӴY�%q�
5`�C�v}
+�
+�� �🖫�Y	�y�w
vo�e9�ߧ�e⇀l���r���u�p�Px�6����o��.�,�к,��d����m��j�oi�{��-��d��t�	0B0S���1���)�P
�:.��B�;�8R����"
���	�ӾOd> r�����2x��7
�
�� �#
�*�y=N D*ph�M�qk�#V
.P*�
}��
���|*��
n�}@������N𓍦WW�)2_p�X�|�+�s
I�(��io�‘�N�������0�Y�;��
������c�8B�H�,n�t���@�*@�qf���U�%��G�?�!>�u��*(�C��ͬ�~� �����D,�Wɼ�͒/�p��~'���4Y×v��y 行���2ið�t��K
��Y�2ޗ��b&��ϗ��ɀ�i`���]I�HҴ#i���۳����i+l�
+ą�!�����E=����*BB��C�Ŭ�}Wi#�Q<�P�b������ـ�
>.)h�|���=
\�a���wO�>�v�,��f�f������p�")i+�l�%y�{G�a$A��v>O��n���B��6���B�
z�r{e����$ lᔞ�(�
+	Ib���^�
�F�����}����P>�!7�,\(H����1Q�� h"��
E,�
w�
�V�j	��Y��x���%�d5��K}5���4�p��a5{<�F�"��o�ݜ�g}���{
/T������:`��������5`	�I��9��T�n�l�2$
+K#�@*۬m�	����]��f��ACu����6��*��zej����7v�w��doZgn��ߎ�ʿ�µ�n�l>�6�-��g�hR�nI+YݧuN.80Nz
P6��? K��_$\|2�6�B"�]ǁh'���v�P��5{KGu�J�ŽS̏�e�0?;����?���"�/�^
��W�X�d^v�.�R�y�r9�a�nӺ�p�dy�؉�E��B�݃mɶ&~��E[h�+DEe��0�� /"
���B����"���ōp!#
�{��=k�d?8@���ֽ�d�Ob�o
\ �ʗ�] T
�O"�z��ԭ��Ͱ��S
��'����$4��2"Ѹ�j�Z@�V
f:�4�
�G����/C2�`<�fĵq�RLj�2nF
�،z�F����L
+�P�,���"	L-X����g
 �{[��b0�q1��c� �!љ����
�b����F
�w
#���&D�
��j�с��j h_���<�i�R+��$e�T.�okF̄|����6�p�]��PLo��I��dA�ak��&<��D-ܥ�fU�~O������
>ܣ���-&D.�:(�ڬ�[�t�
Y��`'���Ί|I��y��������	9�hb$�e*�qu�e��['��k�{}{[{�O�~?`ʇ��"i��20�DZ��E���Fփ��݅�unȴe��B��@[��&��f�y��&H�
��bá�@��K��xʝo~�s((!_R���o��J����� �_���L�����A�&��
�
�	+�KDL��h
�tiʩG�
���pl�t���Ɗ�
��x��!�%�� �
]U�]�h�8Z�gd43��5��*�wHh��J
�z�
���s� �/�����
g}v*%B'w�0t�is'�>��F�9��Ϫ0S��̹����D_�W����Ǿr����V��2��C���9�`��$�N����zS�lّI�G:v�y��AOܩ����>�4��
+��u�t]�����Z՞/
j�V�{�����I^�p�f�<������n���솵Æ���@�7�AT��_a:��<N5
&�
ӡJ���ɘ����G�	�q]�k����0�]J
Z0,JT�	�27�Ed�vj\KPC�y��
,)�����5>���5��@�H
�=�4�ޣZ��ȶ����wC
x
f�t���j<���>
n
+�X�+����ـm������M��;� �a�h��8�M}s��pW���J7_��Mx
a�uMx�P
��0;�J5�ǵ�	�&<��	O�~|�1��v[�h[�Ht
c�C

�[�H���-x�q�N�d

+�!ld�m�]�ӎw;�X#��;��os�xf�EWGvm(֦T��:j
�|g��S�
�uR@���꾶�.����s6H��
�NW_A��
I
+endstream
+endobj
+968 0 obj <<
+/Type /Page
+/Contents 969 0 R
+/Resources 967 0 R
+/MediaBox [0 0 612 792]
+/Parent 934 0 R
+>> endobj
+970 0 obj <<
+/D [968 0 R /XYZ 86.4 726.045 null]
+>> endobj
+971 0 obj <<
+/D [968 0 R /XYZ 86.4 644.013 null]
+>> endobj
+972 0 obj <<
+/D [968 0 R /XYZ 86.4 313.219 null]
+>> endobj
+973 0 obj <<
+/D [968 0 R /XYZ 86.4 151.982 null]
+>> endobj
+967 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F11 691 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+976 0 obj <<
+/Length 3421      
+/Filter /FlateDecode
+>>
+stream
+x��[Kw�6��Wh7��� fN�4�I�x����`,��D�������. R�D�v����lL��p�{/�����f�Fߞ�����72
�ĥ"
]^�l���.I%]NG?�U�O'���E^O����t����Y
>_�ʫeQ��Ӊp��caN�������o'
d؈7��Ītt5?��W6���K���O~�|��KZ����',.�u��lg�\�ӎR�nҰ����
+��=����.����iFc7���5�S��0�GX'�ٙ��R����b~*�x5�Sa�߃Cv�ס�����U�{^W�c�/�"_�ޢ

��<4��e>��eW��"+�����2��ӣ	W`�	
^�e�"_���{8�M"�~��Y����j��Ų���<t,��w�[����n㘆
Թf��0~u=�L!x"֫��c�i��Z��H0�[M$������Q�� M.�Z�/.^l�
�S�ji��$��hH��m���Q�%
�MS)L剾9�
�K�le4�B���i��x�T�Q�V�9
+�j>��iX?W������ͧ��-�3<���]�/�����3!pVw%h��ռ���A�)��
/V��rFC��R%�
���?n�D�4I�
����H����Jc�n�@xЅ�Lh?�Ls��-ȅZ=�Ї,�QH�p����
�e�n
��4�BG�,�R��Q�U��
~��A�+��j��� �#�	{0A��
�
+-����)����+��뺪�(���'�4
ޅ���/Wu�̏�Гl��c���fl|� j��[Zd��	]ϲ�1�D(х� �@͌�������?ev�h.�2o������R+��{�������
���
�^�CN��'�Ti��w/^����g�X�]�k��g
O�H�vL1=b�}���y(u�]��X٬�=�:
�}�ӐE�.VWW86׫�~3˕�ް�rO��Q8j,P����o���� *�H���w�_��&�7��
1����Ѵ��>�>�K���c�b�f2�
�p��"xk�G�C��%���'����;�N�_��h�}<E��Hxi��2L�:گ�����p����h��}w�t5�cG
b
��kGv=$ex�
�,+���y

�u
F-<�8~�Z�ut���0ٺ�GX���^�D ���y�5s�����G�H�D5"u��ڪ�$��
V�mԨK�W������Vap`�U�n��o�|�
/�Y1˧_@
+B`��(R�T&�tߞ����ۗp
x�\
��*+����1�!��� A,�� ����BϬx_gA^��|_��(�U���0���-'3�J
����j�/6�J�݁7`�X�{�&?��lV�yF���~tfT����c5��C��{F+�
+�b~7��=������駱����u4�<�H�\+k�@���t�O
+�c��M�h(���T�m�"���QLc��)	��x�
�-#���W���b�"O��o|���L*)��6�?Z
+���z����d��z�	��$y�dy��
h��r����C�v�s��P����}pb��~*�c�\����n`#8�be��)��(��w�
g�Ԩ�u�M��
+��"gu���qNv�S�N!Ծ����q�Z{h��"�V{}4��Hq'�C���p
�꘰�]^�~��r at Y4Y�?A|s�����������v3�||���#��c�S�V�^2`��

]P �̀ʥP�=a��!�Հ���� �YXN��么��
���u��=�Q����O����
�? (
+�{F��|qU!�az9OyL�h�$3��ڒm�i)l���
ȱ$�-����z��/��l5H�@fLl{��3�x��Mj0N�8��:�12�l#u�Z��RC��÷iQ�t.�-i����𛢃��v�6?בH�B��/1]2Ϛ�,�M��2H��4�qQ^�V�|�
�
+�"R��
h�&,6#I��
�*�	MŚ
��Knԃ%v-�[�z��'�6�/r���}��7�y����Pg�'
�2S
+�$b
+wX�.5	B?U�ˍ�r�
ߓjk+
�

��ح��Ρ�K?�*��x�gs �c�-�u�'��x��~x H���ߋ�1��byf�Q����j���CaD��"�P�����F[5�<���K{~dXjx���C|��ۼ
��3r���9�$��"�yXT
>q�QP�C �$�‡r���V�
-؄X�E(9`6����Ji����Y_�ц�+�I
o�C�a>���"�L���H�Y���㔏��Ȳw93ڞ�*Bb�>��j	f���P.�i�������8V���s�->���?~C ��{��t�/+�	�nÏ����4�_�t��oe��?Z� X�K��:{��4Me�cr�G s�=�_��6uB|С�l����	���?�|���=Q�`=�>Jʝ�b�<�~v����h
�~F�� #�G�
�
n�
+�lz�L65��lz�ljy��/���9�I���gn�~�`~YPrI
� 1F�枨^L'ڨ��Ӿ��
;�h�^]���u5�aSU�R��ReYW;᦮�#|��Q�2����<Q(�6��"���Q�S5=���'R���5=��>%ه ,���)#6.�x�@4�
+�ƥ�^*�����캰G
>�6bGRd�T��k<[���A@��Ԇ��Q��/�[�x:�E����!��=�w��ଃ�
+{�S�Ӝ�,��x:`YHm)��q-x�X���R3��%Jڃ�e��� M%�����&�ڇ+e�&��b%#z��[�G)�Q�ع�@j�5����>��c=8��m@�몞g�����e`�0��)
J=_e��~�4���i
F���e��}�D}w7�Y�
����R��V�\8��}��$��LT
la�q����Nu:���hV��.��k��V�w6O��?<5��+�懶k�t&�Zj�O'��u�C2$�e��|����&�)Y:�t[����!>wI�a���&�ڜ�D8�W�:H�
%�Mc{d�ܰ=PR����\�l��y��
h�
�U��DY>T��a&�dD=�9��p�����pJJ�*�i#	N\��
߂�����l�f7���E����_T)CW8
f�i0�;?����A��$V�#
+'����	���V+��������L[�
�s]�t���W�h�oކ�PgD����0J>����}�����!�9�ӭ{�Q�D
9��ak
�6�
�����Z6���b�٢z��U5x�y
&�
�nj,�%����� ��S��q��mbx�����x�)8�{
+�w��x΋��g�0��(u�����e/��1��?~c�׍o�X�ǝ��qt
�J�n��{��۬�G�r�7�%d����?���=c���}�N"�I���_s�/�w��
+���4��
+endstream
+endobj
+975 0 obj <<
+/Type /Page
+/Contents 976 0 R
+/Resources 974 0 R
+/MediaBox [0 0 612 792]
+/Parent 979 0 R
+>> endobj
+977 0 obj <<
+/D [975 0 R /XYZ 86.4 726.045 null]
+>> endobj
+978 0 obj <<
+/D [975 0 R /XYZ 86.4 457.745 null]
+>> endobj
+974 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+984 0 obj <<
+/Length 2665      
+/Filter /FlateDecode
+>>
+stream
+x��[[o�F}����ҋz:���7�Eڤ���@,h�r�R�+Jq��~�\H��H5�m�<Q�8�m�w9c���Gt�ϓ\�|�\�QJR���r:��ȑ�)т�.'��	��g�X%�7U1�>=V&/��
+����L���I�?��)�q�*�����O'�.O�8a�HG�֠��z4���}GG|�ӈ��ѭo6�"%
����ɿNh�x[�D*�W�%��FPG�Jӑ���F���%�6J�A��
��kF:e�
��������l� &$��
�x�w��y�ﴽ�v{׵���4��$+Koz�f�e͈�
+����e`(��å��7�h1�v���!����й�A���
����m��Y>�.X2�>������M[�ӒH�8c���;�4��������v���1͒��9�.���|\��e
�0n�6(�&HE��{U^��U���d=�}�NTl-ײ^PLN9O��
��Q�<[ӫE�����dy��V��8��2�
H��ʗ��Ͳb
��,��lnf���U�+��r=����B�MzA#� �"�$'�ꇠF(@^*/J wC�]���� �����}�M���(�eN� 9
����Y>w�^U��XoD
p�D�rM�zH@�6�Y�%)Ś4ړ6��6MT\��� �40�� P}Z��'�p��8q��c�E"��Xl���
ig�Vv�d hT����.��*^��)���+��z���b3�0ԝ=���qL����~E�t�B��S^̜�k���$�ȫ\���/����?/��0|�������yX�c��W>$q	���`3�H~u+��
+_и�d>��PVXJ�V�2�*�^�Ue�O�u�
+���T�$+�}��h�\�Ԟ�b)@���x��i/V �܋2�4�ҋ__���O
ӈaC����iW�����0�
���Z��KG`�uK��|�^�򍈫&��f�(ݔ��}+�ˉ��nv������v�SL�ծ}�A7r=�a0����õ�ػ����Mp�0э����0`)�;�#���̃����	�EQ���ɓg���"��n��n����όżXYY���!~�� ��V��8����D�T)�ɻe�*E�P�D�x������)$h�Z�!�rƉ;Jy���
�@��NJ�g'��m��za@)x��"�	[�IJ&����O�]��z��u�zj^���qƑ�
D�X�I~��D�����+mp�V�����8;�#|3ITy?�d�d�D/�c��#�4+J7��}����tE1��!x�r�m�����<�h�۾c����t��.3
M���2U��Ahz���t�yYz���a���5@ �a�ji�e�R��ҝ(�6,
��h��
yMG�Py��K���C�t'I�o4�M�
+h��t`� 4݉R�0�>�ښ�w�~��_M�R;Mh�6��4���a@��hv,}H.��N��������qi�^D���⫤鰁H:Mw�8=�����Y[����
�	5{�R�����t�1�C�t!\��4}5����(� �񪷽�z��#��O�
��v8��ݿ���N��+�;t��۱�X�n$2�������k���\�C�1�����N�]M݇~-)j�����$_�T� 4�
_�e�:�H
\`�N�
[���G���v8]w=T<"]��a���N3���7���u�����!�%�at} �5]��F׿(���Bם(�������p�
�����QT����
O��B
���>�ҚJu�>.e‹H�;^|I�]
�3�� 8�(��!8{��gm��JٿC�籆r�1CC L�'�� ��
q
%��JƋ���Z�mV��e�y��wQ��0�6{
B;~�w����V��'�%hX>q��.xᦱ.�~V �y
+O�:��?
O��j�϶^
��U$O�'�dz؎��RWe>�����
M�R�9`���e\�!L5^�]uǾ*�g�����X�G�k�9���E^w
��ט�d�s?F49�.�#�_�t#Xߔ&N��x��O���i���=�!Do�H�L
+����/V̈́
�%�]ճo�ʓ��
^c��;^���
+
�I͓�L������
+
�����z�ċ.�VP�����`�z�}����I��\���?��ʨ�y�
��1w�˻�d��6�-������[�x��Y\Z����i���O�*��b
T�g5�
7���"
*��K
����
�xvRA�o�%��i�;�;�q�$��Qowtm��rC{{�L7b�х���΃��E�ߐ!��h����ݰ>�U��.����п8ݚ�v�ı�{�:E�r�R���(h՛�~@��n���	��?#p�;�ָ���81ߟ�-ٵEke�-[�Ŵ-	%�џȂ�w�!A
R�p�C��
a1����{��
�:
+�B$��
5�,�_2m�p��h��Rhӆ��q�&����|�����2ײ�]�'O�Y�H�aO�L;�}���6;|����� nn�>���+|s>o����1��K���q�
��S��W̤L�-an��u&���N�ɺ�Q�}R�/����u�/Wb��
�1�Q��
H[����t"F�=��$�'a��9�u���/l�x�}d���
a6#
VMQ�#PP��P��o��
™昮�z���S�_��I}�������&k�T*���f;G��>�Կa��L�
+eha6�7g�n.#������~���
+endstream
+endobj
+983 0 obj <<
+/Type /Page
+/Contents 984 0 R
+/Resources 982 0 R
+/MediaBox [0 0 612 792]
+/Parent 979 0 R
+/Annots [ 980 0 R 981 0 R ]
+>> endobj
+980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.179 121.382 350.901 133.337]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [397.989 123.873 404.963 132.286]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BHP:98) >>
+>> endobj
+985 0 obj <<
+/D [983 0 R /XYZ 86.4 726.045 null]
+>> endobj
+986 0 obj <<
+/D [983 0 R /XYZ 86.4 701.138 null]
+>> endobj
+987 0 obj <<
+/D [983 0 R /XYZ 86.4 522.004 null]
+>> endobj
+988 0 obj <<
+/D [983 0 R /XYZ 86.4 342.814 null]
+>> endobj
+110 0 obj <<
+/D [983 0 R /XYZ 86.4 167.224 null]
+>> endobj
+982 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F38 509 0 R /F14 694 0 R /F11 691 0 R /F7 753 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+992 0 obj <<
+/Length 3851      
+/Filter /FlateDecode
+>>
+stream
+xڽ[�s��_���

�7��yp|N��.�}��\2
Z�eNeѡ��:}w�S�d�8y�H��������N�:���ۛ��}'�$!��zrs7��ȉ�	тMn�OSI��LX1�����<]��gl�ޮ2?|�]ϫ�Xo�g<��Nyr���G�7G�
1`C'�&���z28��+�,��JDb'_�{)��j5�>��
�
ҡ�H���Q8نP��J����0k����9�Zn��dg�b��NaF�ͺxsz���g�[�$%���`���X���Ӯ��P��(������^2X�fDpO��w�ty<S\M��?�����tw��@��,ٷA�h����\iB������?�|^<V�*���
��%7c�
�͘"2	�d�y�?�~���|�1����
�@�V�o
&�8%�ݴ����pd��(�l^m<��s��|�Wy�򣟏����m��1-2�������0��H׋���*�12	��%S�)�Y����?�[Ũ�y����w�
F}1����C�>�vZmz�H���ʴ{�0_��FU�6`�ܑ�B7��G
Ag��ќb;	٨��"_x}���
+Xo+g�/�G m;-r�uY�U�*Z�s�X�EP�vj���i��%R6,a�E���ޮ
+�v�L�K���
�`(�
�NO4�=�H�^�w���, p%a�{�o�.�`����D�,�%_/�3w{��4�m���C���g��b��
��[���*�Y�
�Qi�L
6l�d�0լ�-C�L:�ta	���̀���Bt�ARH9�?�Ɲ����7�
��ai1ʌ�� �$������MD@�p���"�� ��
6ξ��H�`��s��𸭜��Z
��ev[��܏�K�!b�ϐ6�� �J��oжu���B�� º3��kڝ�%ʲ�cr��/���

���Ʌ�9��|����'2&@�V"����j�F���3�������8��7��]t�0����$�3�(�&T�r��c6��e��4)<���]����f�M�n�4D��
+U�믱
!
j�2<X�G�y�G�b��]�LB���������m�fie�]�� N��
+��묺�qa�E���$@Mc��x������8��%f�B|�pѷ:1��Ʋb�O�d�W<��c >��&s?GXJ03
+G@@Nm���+۽�
���}?�j*z�d|����
��YM�A
 � Z��4� �Wf�I��2�`s�0yI)��Y��:��d'��Ԑv��)KMn]T�C@�Ł������J�'�V�Y���
�CpbK��r
x���T��=�=U�B�z�]ֆ���R5 ��
 ��ߦ�gS��!��wr��0�[�F���
�6U��'��]Y<DS0�Z�ڂ�u�����R�%�p��x
6Kv�`�9�!���
+��q��b�z�c� �w�A���
~�q�Y�_>ܺ(ɇ\)D at a�=�Y�i�7��]�S�
���!����y���ʻ�n�_���+y�1�J��
��}6�
Q��뫬ږ�}оA%DQ�B����E�핒��oOh�k�<
���F�
>��#)^Pu�F��/����zZ(����w�uBb���1*HJ��w������J�=v�8�
�l��3��+��*����F��OFY���Z�����O���F�	;�E�������
�.R�zCKJ뢖�m��(���-a	A�j�e!:`A���P��W
+���hU�]s�A;5���8^
��K���!�~�R	��8��D-���CM6
+Kˈ�I�������g��
C��z��2\�Y�+cSEX�p���<�d�R4��}:
��f!"��C��<�|
x�t
�Ų6��];����󬱣��ݏn^�
��.J��g��4c�,u�F�y�{D�LW��.���y�G$�q��sy}~�!R�c	 L�G`�)�}�ߝ^�Ct��e��8W��i�!���W�<9���G��1C��+
d�:ci�ݮ!Hu�G��f��C��1*
��ʑ%KA._W�iD�I(A�e��%+�Q�&@���d�J�i-Y��$�M����cH��G'○�e((`��8�AR�.�]^���x��͍�7]��0:E[����uG�m��d�
<q��i�}���џfxB[¾�
��~��
������L���1=���^�xp '"u2?�����p +ˢ���e9$����1��f��7����,��ki��T�zæy��wY�;�{�bQ��u
�-���,��B��g�M�\�LC��	�E?3��} ���pm^�<���(�)Q�!�����z�K��s	=�W�ב�4��1K� ���W��0�i�x�Q3�n�ׁ�2�䋭;`�����g [...]
+�p�'
C�oB϶������%��@i^�.Ӊ`%�3�ٯ���0X��疄���0�q�KCZ�Ѿ�G`Z�q���T,�d���u�}x���,��g��،?�"xT3��oɂڍ
)Q OX��RJ����1x�z@��������W?��$@U=T=d#?4\Ƽs���7<o�_:�l܈�l�����w�
+��}��G_����<wZ���´"0ݗ�ՙ]lQ�cK8�`q� �)�0�ǿW���u�kM�Eg�SA�޿���z>��o��{lw g�i�5�����Lv���4�������:�?����m��݇����o`
�k�z
+'?	QB�E>/֛�L��1�h�>���d�
+�ҵ�A�}~}~zu��H��)aL���h�Հ�G���(�������q
��~,]-�"�[�nx���DZZ��u����`$�>�W�c,�Y���%���A��*���c T��1g'��,i�S��z{�/�E����Nj��{�yh���qߛ{ZU9

!9��>��[�V�눷�o���c+7�0iG)�#)n��>��'K�`�pM�:�s������=`ƨ!���卅�2����N�a���m��o8z���/U]wʫ̟No����0i���*�����)
�*a�D]�����;���>�_ZC
]�u��=BEƋ
+�!e���G�lb

ϥ
ջ����q
Qr�����ζ�B�9�S`7�2}���1�v� "�g����� \�mx�;�G9�m+��v� �B�K"�f{@�ֈtC� q/�ꃣ���?��1,N�����3��Pb�^װD3�$1x����"k9��)�f�yş�KW���<��4a�g�
�`_� ���
+|��wx��e�&��]A
+=]��/B�
+i��fE�0T-o����s^l7~�����@7z$(
	��cI�0��e����R�(:�e���ͱ�W�S.n�tgU����J
NT&̯3b֜j�
�c��gFz9x�u
L
��t�e��=;�
+��5���EU.���کs�_mb^I B"|�С]�����s�-�)��
+n�����@WW�+�5��U>Z�-�F�
b58.
6�Z"j��}�q���)�$�m
I|z��G�I��N�:�gz�O �նw ��
�~Los�c
�s�b���5��U���
+���.��[�h�
�Lz��
9W�g�?J���s��U���w��!QU���z��|�B�O� 8����P��O����P��~r`Q���<����w�!'{
+���޿:�7�XB�X�~cC.fm�Zk�� �����b��	��t��<�iמ�ĸ�����
��N
,
H"���H����5�M�s�^:i��b[6d�d'��Hp ���UQTq0Ԑ������8\m�H�Z#3��//�nl��"�ʛ�6m�(�.�Ov��!J�|�lH��� X�?	k`�
+endstream
+endobj
+991 0 obj <<
+/Type /Page
+/Contents 992 0 R
+/Resources 990 0 R
+/MediaBox [0 0 612 792]
+/Parent 979 0 R
+/Annots [ 989 0 R ]
+>> endobj
+989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [268.605 131.409 298.825 143.364]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.2) >>
+>> endobj
+993 0 obj <<
+/D [991 0 R /XYZ 86.4 726.045 null]
+>> endobj
+994 0 obj <<
+/D [991 0 R /XYZ 86.4 701.138 null]
+>> endobj
+114 0 obj <<
+/D [991 0 R /XYZ 86.4 118.85 null]
+>> endobj
+990 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F7 753 0 R /F14 694 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+999 0 obj <<
+/Length 3791      
+/Filter /FlateDecode
+>>
+stream
+x��[Is���W�Sb��%.���(�\����/�+5�$l����^wϊƀŇ\�Yzzy����̈́N�;���䫗BO
q������j"'�;��\�'?O==��*1}�Y�nNτ��W/N��㍘^ex�<ܟ����,��js����'W'�0X�NX��"V������_�do��P"����qw)
�p��\����
硔H���ђj��z(�&�Z¬�FsB��Sx�Iۥ�#�Ўft�۫�z�ZT�D`�E?g��5�Y��.����(�y8��l��[�?�Z3"��7~��2�P\M�	?
�B]̳]:p-���/k�;� L������O�z'��ͬ��z�o`;���ɺS�1K	��Θ"��'{�of�b�b��v��c�M�ns�f���լ
5�$��w�j�
d��
M���
�Y��i>[�B��7a��6�꫸zY��E���7
?���?�w�	;`��]{`���M
B'�8܀!�п3F��a�b�(�f&�1(���F֫U_��1m��`�z����st=�߉�`[�5���;�"\6$F���*#1����		��4LȈS*��8#��j
.�oK�TF���W?�
�Mx��i
,*�o���S�nN��uլ'�����._�զ7�A���E��J0��$U��U�~&���.��
�6��	��x|,��O

�
�JT,��2r�o�[A��.�PXV��;�|�%������(?�i?,�J�p��Òe^m�U
%����� �=؋�e�U������mX��P����(��B�pH�I|���Q!֭F���բQϡ�
��z���
h�\Կ13&5�V
ߌ���3T(�'��1I
����!y��ॐ����u�p���y������מ�O	vϋ�m����V�p��C�	Mc�!

ܐ�US����v�8͎�T�a�/氂���O���&(�&�������Cl�rz��r!{lB�5r�gbt�M��v�D��� �
��8�b��*[,7C�ǁ�Z���{��g8��S���r�gW�FP����P A��=T���F�
��J�)G`�ӤVƟ�)V�X�S��c�)�(�s�v`4�;�9h
+;��ǩ��H�������#�#"W�a�
c��I��>r��hڪFU�Q�H��v6�7���rܞ3ˈ�o�ǩ)��nǠ&L�Md�?&�bJv�E!���}���F���	�e�.� �I�FQ(�U����@ e���(t�.SֈQ���УRg�ā |5�k
+�@[׺�C�A=�
�"&q�E�`*c�CD���"�]�������y`N��%��jg�x^eU
��J�.Bv�-㉛�
����E����~�Ek��}���գT��Sv�׹
�%��R��-R�ŀ%m��!��,S�*ez$J$pfqMX��&Lx)�@8�V
����������N_j�J`nV�}�����h
~1B��&�7m� ��/���|�y��$�[<��3O;�~0t��
yw⣶�	n�x�UL�p	�����di�O}�0�Y�����Lv��&N���.=���gM,�ꠈ���� �I��p�8��e��]����KP� ṷK�R��e�5�ha�	�S��4*��0����]�"�)u�:{T�L@�JG�ƒY�e�
6U��cW����6�\�[{��
0'�n�#�wf�'(�1ȇp�.<������ܔY����Q/�I�_�p�f��?lG��W�N38P���K<�z95�hO
Ψ#V�)�*��~���ä>�kP��4ds!\�w��� �N���=y�Z�wA]�y�"���������=:M��\ � [...]
Q��x]�� FHb��?~���a1>�����.a`�����z�?��b�Q�&O�l�i��}[몊m/�V����O��u{����^	K~FEl
)bE̶T��� �(�:6���a���;��� �B�I*d�0��|<��}
�XR��A��Y�4�T�P9��|D	��/T�����x���2�/�t�8E�CY?�G�<f�̳e�i��F��tk`�*��F��'z��»N�?Og�
ऺ\��zMRR'Φ���3s�'��.3�����Z��$�*����u���i
�O
o+�
N�R�
ħ#��u�`8t���)��ڧx%��N�@���?�
+�Ѓu�����k��s3y�\
C�C�(2r}).�2����
����#p���~9Μ)&�u��6�����C�� �+��z�
��
IQ�
+��OW����.0��i=e��.���`�c1$�_A�Ѱ�tO6�
�<�U?If=9���Js��'ʢ!�1?��Q_�y��y"�ak��y
+��.�"��fH�`{��xѥ���
e�O��o C����@�8�6 �E|�������S�FM�:M��A��t�m��Wr��6�=L�][2�
��^�$f��F�b[%k��Mx��2���X��nV�S�;4�g1q�:�	9�b�6l=�d���8n��-ʹ'�b�G�����*�fk���.ŏm
+��pʛCۡ9�4�"�A��C�^v9�7�*�F/)XҲٝ8���c7��ef��
�u�(kWɥ�h��	G�̞���
��O���~�7�/vU�%�1U`��q�E/�.��X�!��]GGf�ʗK/�u�r`���"��U�w�
>y<o�c�⭌��9
�„���c�%k�~�J�4�ُ�b�Y
�{�Ut𫬛Hљ{�я]pH*������u$�׀Pt��q��A�h��"U.�
+�k>���@gam)�,Q��z;�H��'
� v���YQ�y�������Ѹ�Uͥp4L@����2�V���@@c���[��
EL�U�*`�U[uH��	�L��6�:��&�´Ƕ)�K� ��$��`��&��{����}j��h�N(��
�3�����[����tz�v��l?��WG؏zh�
��D�!������t�X�F�3`��3�����7����'�AO�M
�.�`i����ժ��¢�-�8���i��W.p_��/��N��/��6�ϓ%]�H��; F� D�
P��v�I)�
m�0-��#\
jR�L6�N�vo
۵�_�Q�@�U��������Q=G_f4�%��lx�j����n�c?9q]`
�K�����͑w1y����J��9�w���C%��mM�w1��C�NX�Ӿ���V'��
%�rj�J�����՛��������:X��軋���^)m�g/�cjvHg�gG�i�	�Bu~ф
i�j��v��a�'(}��Wx�|l� B �-��h�6�%8���}^��@r΂���H�u�ӣ�Di��7o�R}u@3;ƚ ׭v�5���$#��h��&%���d�?��7��ҷ
�����Oڦrzf�C
�T���̲M���3rФ�� �^^w��Š!���i6�)
ΰ-.%� J����A�ҶL|��q4̺�C��lG3�˫�#v]$�
+
L2�z��ػGi��<7m�m�
+����J�����r�~�
�f�Y�F
-��$
�
�R��')�hQ�g���"������CKM���I�,�|��+� ˚f���:X�� +��4
+endstream
+endobj
+998 0 obj <<
+/Type /Page
+/Contents 999 0 R
+/Resources 997 0 R
+/MediaBox [0 0 612 792]
+/Parent 979 0 R
+/Annots [ 995 0 R 996 0 R ]
+>> endobj
+995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.041 590.813 338.512 601.661]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.4) >>
+>> endobj
+996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.855 62.16 485.075 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.3) >>
+>> endobj
+1000 0 obj <<
+/D [998 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1001 0 obj <<
+/D [998 0 R /XYZ 86.4 701.138 null]
+>> endobj
+118 0 obj <<
+/D [998 0 R /XYZ 86.4 479.358 null]
+>> endobj
+1002 0 obj <<
+/D [998 0 R /XYZ 86.4 397.604 null]
+>> endobj
+997 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F10 754 0 R /F16 453 0 R /F14 694 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1007 0 obj <<
+/Length 3826      
+/Filter /FlateDecode
+>>
+stream
+x��ۖ۶�}�Bo՞c!�${�w�n�ڻ�-�='�-QZ6�������w�&��1_���e��
,�mg|����./�y��,e��f�����,�)3J̖�ُs͢˅J��C�W�U��].�<���ixs:���<ԗ
��̕��y�������
h�L�e#�h3[�/~����0�݌3�&��n?�*eZ����]pG&�
�B�
���T0����^�S �f\k
���1"*i� 51�
"}{�6�4Q,�b��B��!қo�X��C߼�q�0na�w9�����鸅)���&d
��	6!c��k��vSƅ�te�����2�7�uJ�?_�x�Ձ
�b����C��aש
��X8Xn!슛�BDL��9*�=���`2I�:a�Ul�^�Ho���|���
�)�(���m��@q��㩩�x�\�0eZ��ߗ�O���mE
�3jE��-v�|��^@/I�eE�u��tAv� E@.�՚�Q
��ȩ%�h�-@�j�] �
b��[�l�~r�c1�s����Ö].R�X��û�i�竬ɷeuoi�('��ڝ�9 U\i�G�M�ەH�gX���9e�/��U|��x�/��M�˫���e�� eCS���(b��:o`WZ��#a�^�Ϫ���塵d
GU�_�l�U�ܒ:&+ϋ�]�([5�x�V��}�{^��Z�*�G��vż:������狺ɏG��IJ�c�ˠ��ڜ[�V8$ʁ šh�lW�ne at 0>R��� ��k�����;�����ܡ�6�DŽ_�]��Y%`��gPWU�����<�c�8+Z��
��
x� }| SJ"f�
�F˜E}t�*~�B���;�ZZvu����t
��P-��|U�Y���Jb��8�5S@�WxR��MEv)���
�+�E�E,�U�5I7�~�V��4Ե.���
4�A&&�C��[E��eo���O�Φ<
���}tGݬ!��~P���Ш���&���2N�Vm8o�� �'��=���A�����=�{}�I$�R?�E���\��k�G؁dB���f��XZ�����Z�T���<�֮����Xy��@����

I^���o��:o��������'��@+��IK��t������H]~2@����?9+O��d
+��D>����w�|$)��N�U?��(�� ��f�K�a��E�����)�u���0�Y��UM�>�[��B�ZS�w��аB��
E�(bp�k-�<5$�r�T�Ua<�x@�T�~o���L
��lwrsh�
��$W ���_�N	����uo��~y���iP����E�%��5^��Ű��(޿]�z����r�h�-�D��#���y�$S"���`y>ə���y�C� �w}�O8����:�>֗WW_�d�� �+� شfia ��7�ԁ�k�Nlg�թ�Vnf��!j��k�=�7�
+U�r�u���cڞ��>=�4���ؠ���ZKi'��w�
Q�	pz���|�����0�.�'�
�5��D�D�T�#�SX@�V6]@Вr,��������1X���D����~5p:"�s�Q)>> �ީj!#L���
ٌ��F��TᩉJ[�;բ1�u������e|z�Xj�����B�b������h�X�Z�}JnA�Œ1pHi�4�cX�Sǡ�?���
+�=��yʌ��”+�BMaq���dsu{�C��+1	V8O%&
b}��4����Uy��6?�P�R�q���
S�7�4>S�4n36����B�!3��,R�3ëg��
��ˬ4h��t�l����P�zԙC���$Ǫc�c�y���eZ0���_d�$�yj\�����e m��IЦ�v��)�È3�|�z�jEVݺ��O��������HM��h 6��$r�����x��z����`R�r
+���L�!�'$��$
I&J:�D�X2Q�U�ӑ&{��/B�pc��=
�|U�
��5�)p��Pzȫ��+�k��V�ʋ���׏����z���~�`%���T�H��5�x�;���ڨ]
h���= \�N/G��Cj��.%`)���_�{X��u�
��F��Z!����yWpj<�M���OM��I&9�|*�]F�G�s�U����)�%�J6`��J \4)B�aj�ǂq�����Κޅ*>��8RwP
!}*NH`j2R���f���P5��'";d���L����DX�f���
+ �rw��z���4��`=�2r0A%��嘈��
R6[Ǵ'HW
�������ޒ>1��j��K�g�,,et����*;R��}�_R�h�<,6QV�{j3��TOC����������RN-��LXMR
ť�?��[��ps�H��z�>�����0�zW�x�zX�Gʡ�B�8r<d�
�0#�ݔM^\('>���#v���r��p�j�I�Amp �.)V>
���f��ឰ5>��
����
Z�ч�=:���8�
|B�ލ�M���b�q�P@_�*���3)�
��O�B4�1�koC��5L�^�ԁ�0��Օs��.(��F
�F,���
��aQ�Lw��$�~����>Z'*la\:b5qe#�#4xѣ�@8G��%��=�R
��5���w��k�D�
�n&5��j&㔩�t�).!�R�;�ۛ��D���	�J�F
�������#�"�I���E�qXI�O\/F�2OQ� NV�U�D
i�TX��Qz�Jp��$
+�[�N��qZ���m�
���M1��%�
V�Wlͥ*O�;����)���Q�R
�>{�V����(�7Fb^`dmv��ɗ�3���^�"�]l�v{�ZS?�,���6k����_���Cfn/-�MHDgқ]�
�����LqP���sA[�VeG�:�"J���?!�B���P���d�-��H�$�ˆ�m6bd�meB`��]�Bi�Q�*�0��[�/��L{u����
L4�/VZ���
�=��
- oT}��N�!�(]��Ҷ8(�A���I�u
���aa�.7�) @�Ҁ�"
��V�Jk����RѲqUV�!�%�e ]
��)T�X��m�`�A�e=� ��L,�]
�zt��/H��l+[!e�
�V5�	�8 ��\����$�
��N�v���}�
��]�q�F ��f��u�0���=Mz]���`秢<���Ja��3T3b��{8� #0S�"i
Zhɠ�28����b����G䘵�8r�m�{w�
6ڔ$i�[g(S�?�ar��nԎ�-")�'�Y
ظ��m��z��ʝ�r���k�
���+��tp�e��ā�-�ݳ�����m�Z�v'hZ\�J��`��+:�k��g
�!Hh1T��?�HϕTRZ�
��Pķ����ϖP3�
+�ƹv#$w��^*�
H��ִN^T�l*a�3F���|��.(窶.�zg�Q=C3yv|�+j[����dF��_br���� ��	]�5�0���gH.aR����-�Ɔ
a}Ɓ�@���po��-n_-��3B����;�������8��������_!�}�
4��eM��>�w]�Ϳ\��i$��\w4
-}���}�=�Կ�v�̆��g,�=�A#�h�\p�Lf�L��;s	��$�^z���C�0���k�ѽ@+�l
�C�����
w���Y�om �fߔq	�|W4D�T������v5�y�! ��z�����8�î�6�^5���wr��1r58F����p�'t8Ly����Y�]̧�`X^�9�x _V�R�Υ>�/�&�y(_�t�9��|iXe�7d��C�,B�� �Q
+l�?,��_8R����
+endstream
+endobj
+1006 0 obj <<
+/Type /Page
+/Contents 1007 0 R
+/Resources 1005 0 R
+/MediaBox [0 0 612 792]
+/Parent 979 0 R
+/Annots [ 1003 0 R 1004 0 R ]
+>> endobj
+1003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 99.369 100.126 110.217]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.2) >>
+>> endobj
+1004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.033 87.414 379.756 98.262]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1008 0 obj <<
+/D [1006 0 R /XYZ 86.4 726.045 null]
+>> endobj
+122 0 obj <<
+/D [1006 0 R /XYZ 86.4 160.456 null]
+>> endobj
+1005 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F14 694 0 R /F10 754 0 R /F38 509 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1011 0 obj <<
+/Length 3360      
+/Filter /FlateDecode
+>>
+stream
+xڽ�[s۶���)�(�
#ąyf�C�9n��������DۜR�JRN�O�@�A��C&�E�ow�Ņ��i�->^���xsC�E������E ��$Bŋ����%%�W��>]~�����ly{}I���@��E���}���n���N���������^`h�[��,X�����-6��w
�(\|m��.�������
�S|�ӃP� (�!]>F�
�>�_���!K@ �K�ȿ/�c��;�2����2�w�K�������s�U
aʐ�#h��u��$d����_�/͝���}6Y5������V��V@��ʭ{��FsO@���KۻJ �Al
0���L�pDC.���A=�6���(���cg�BDB�b�#a��8�� ^�}��_F;A=��0������>_
-m���6
a,@!�܅�R:r�<��LcC�؄��(	#������1 	 r_���� J&c�m��cTE�"�HJ�i�5i���9�y��|�)�5 [...]
�
"���xP
�3Y��%0B�a�F�|q��:M�iD<�
+z�9�A:�����i��Az�A��y�nr�=̇���
+�(��[��i��^��G��a$6Q���@MCQh

�C"T�O�:��u�1��nz�R�O��D at 9����T?@.�DV/�fZ"9܌y�N=fU�
�3�������>6�ns���1'�J|�v+��f
+*�wSP���ٚFP��j�
%�M֬/>�����E�joZXA���i�b� ��L>`�������I�c�
Y<핒��G}U�
��4ۗIe >M����]=�f��ho�~&P~�%wU6=���
�g`FL�
�
F�0
�y�gi����>�ߩ9��D�zڪ��x�u
Z
�
XM�VU�Ӭ�
��C�5
#�� _͘��p��$_'������%��E�r&�
خ'>�`
+o�6��9C��o�9
+1����D�z�v˼����*��[79�
D��P|�C�x�iI~���.(6��s���'���O�
�څ��Eܿ/�G��v��Up
jp �V�����I��EPa4�W��¶�����.�_.�`�U�����
�a��
�i���U�����6{2 w�AW5ܼ�[}0 �nw����Nb��U,T�2=�&�E@۵��s��<�ۤ"/$e��`�S�8{N�<�q��K��4�z���n��0=�i�\m�<o��9	��	�*��%O���Yڂ�y��'�K�j,w�nq�*��ym�`=��2$��j�݁�[�p�u�cܘ!�c��J>�D�e�o�hgj���wRW벨�]P��N�G��j��\�A�i��M#��"�Ն�~6��nz
�#�EN��;�h�:d��"�-�vg���������4�zʪ�~<v�ǀ�%��r
��K�V���51P�nUK�D|��y32o[���Vqiv�r�%l�&m�e���
�\�X���쥎{
�r��<�A��C[Ih���?]
+M�6�]ЕB��O�K��7��
C9d���	D��d�
"N��i�J��+�NS���h-0��7�$�h0�O�oq�ʫ��X��>G,�١�]�.
�8�H���I[g2 �&[\�}f��m'��
��M���⊸X���G>� �C�.�������R���*�f��Hy��$eE�i�ھ�1eQS9�d��l2���\�Sy-
��ݮ�x-\��
��#�,Gy��r�)̧�B� j?�������7�į*���C���
@`N6�Q�a�)gb�e_劁[��?�F:M�
���Ez2VB���G�8́	V�qf�Ҿ�1Z�Hx�V�J��sh�့��
+�M%�n���H�ngi>��n�Ȱ�d�l=yUx��$��<U�$0��o>	^��/�H�^I�<H���}�ݤqy��?�0���.�8ߺwZ���[�-	��V��%6�Qp��^ �A�}}�j�lY��T�
d�L�9qj��BFr.�3�GYy�
G�ݩij�3&
+҆�*	��:� @m��t8ÁU��
��'�?X79f�lN��ui�8a�e	��,�i��8UU���w�|�H��#O�6�<9��ŷ ?`��
3z��&��(^⹛'b��l�:Z���S���e+��.�d�G�y��˓�̵n���
+�1�����*O
[�@ju�
��6����0O�۷:�K	'q����d
w�e��<���r]&�2���������
+���w_���^�i��m$����W3�
�&��C�����~�6x��ı'�ޅ��0��`�:���D��wIy�����|a���'�2�CO����ͬ/<�"6��`P*�$8��a}�����+v_�?`�ej{�ټO
AQ��d�����l��u��C�Y݉b�����&^4Qv��d�9�Km����{I�y;�}�c�!EuQ{�Ca����KWu�M���fVh]�{�ϗ�u�)��� R
$�~I�C'&��U%�*ľ�1Y�Q:	Z�#�o��i�"�(i��N)����
����k��OS���V��Uw�	�|�I�y��X�V���q�$��h�M�rp��
V�2�&��n�E��ޜ"YO��g�
+VX�v�꛶��Ϸ���j�ȰPc�蘹�Ɯ�2�>FԷ9PT&U
������cݫ�0T����i[���|���ּ[yb����]q0��}'O��|�uT
�da���q��;���5�@���>e_�p/��2�^�����m��2EQ��œx9Z���õ��a�1u	D��*ƴ��X�
+Bo�;�]�̣w.�@�s}\���1�'$�JU�{U�8)��n�����l�:ƾF��Ѕ��
�ѩ#pߋ3/߲B,"�t
���j����GF9b>o
,x��=h_l�6}M����T�
�Wf��T���Ly˺I�/q�j����b�I�T���)�
	.��\)��9Ͼ
ͨ
��4j�i�|d��|��W!
+1w�'��[�%��a��y�p߃��oO����W?��l-t�ͭ����=�
+endstream
+endobj
+1010 0 obj <<
+/Type /Page
+/Contents 1011 0 R
+/Resources 1009 0 R
+/MediaBox [0 0 612 792]
+/Parent 979 0 R
+>> endobj
+1012 0 obj <<
+/D [1010 0 R /XYZ 86.4 726.045 null]
+>> endobj
+612 0 obj <<
+/D [1010 0 R /XYZ 210.505 663.661 null]
+>> endobj
+1009 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F11 691 0 R /F7 753 0 R /F14 694 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1016 0 obj <<
+/Length 2737      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s�6~����J;�+��>t{�N��6�S�F�,Ne�%�8��= )�Lɱ6����&A��p��H���F�������+G�ؘ���:21���ĂE׫��L5_#f�ʴX,��v�`���6����nYe���/����	1��������/����*bd
-o/��J�<�!�DXݻ}���p��Fo/~���bƖ��FL�	٘��7I��╹���\�YZ���N��.���+��-]@��W�őF
f	��gw��34H��|���*]��MZ4v��0�����S��7����–�~1/ViA�
����|���
������j�����
�g{8���~��o��v i����+)�Z2bU0꫗߽M�ˢ���6єX���6�c����-
���j�W�!Q+	'	o���ƨ����UR�+�ܚY�'���Y�߮����Λ;)��/�ɢ��,P�k)�_xZU
�$���S���"]�k�*�J����Ly��3B̶I�NH8�"/��mZ��MJ
��+9'Z
�XJ���6�
+f�H�nNh
.�:Gg,�F)X�����b�/�޷ ��z�
+3�TJ����
�^���;fDpU;�z��@�p5����1�/T�l�
-�� �0ǙS>�� L�F��9p�	e���mz���~��9�?zJ�i@�N.���x"/�rYd.vލރG��'9)h���s��D��n�tP�]f�i�U�+��S=�3PU
�nK�ۊ�C o��O��%
��+֮�`)j�Vs�w(/����r!nK�Bا��_n|�0o>ެ��G������3\w*�
�:�o�1a!���Dž5D
tj囍϶���T�[�J�

+NJt�`��
w���f��S);/�Q���bpn)#�
����xa1��dHJZ���Dxp-j1�G<
Z�z��<[����� �{�r�Moa��C�Ag�=ax�Pc�A��
�͋P�>ls�v�L#S�o���)�
ID�GZ�MOR8��������3�.�W���k�۴��L�3����j_�@�8W
+��>�BE�τ��x荾Br��t��@W�A�u��:��
��,�=�Ah��u��j�)����-}��Y�
Z�I�P �]�A��cF�<���1�Ru���݋�o�Ny�ϭUn�����pp�?��
�=>����!1���2�z�݆X*�j:�@}�t7~&
%-�'�,�Ia�ᘾ�|3�����9�B_CM�0�����SYVKE�l�^
�Xj;Y*��D�OԂ+�tW�P*� eM��%#VC�$zB�bm�A�����A
V��Y���1�Ҳ�������놢����z|XS`�Z
�O�=i�'jU�1�!d)k�_Y� [
K�$�T1tf��k��vN�2�A/.tu��!��2`��#�W�Q7��a�2���RR�����S��*\͠_��^c
O?-ӻ*���`u�
+ˤL��l絶
��$�7�+��9��x�����2����#���F�0��~�'c�!���&+=�}��%_tzL��d�0��1-Gtd˪�w7�Ϟ��2�
ofn�%�9�}��Џv�[��v,O��؎��r?�@�!
x�hF�z�nQ��z��m���Y� �,<l��
��/�"�w��'��N�uzŶ�D���4&��/���a��-�����W�<z�C���y��-b���IM4
sF��
�YȬ�"w��(��3�5aؒ-��Nv�
�Ќ8�J�4#
��Id��:
�f����${hFhM
����o @|��2�� b
?�������4�!
Di��Z w�uo:�J
+;4�(�i6����� ��pyA
�c�q�Y%Ur"�V at r�_ɣ�U�€
Q�N�D���p�Jkp���b�	@�\�l˶����
���
VS�ʀ�H79$n���!T���o�]��"���g�����e��<
B	�����
+�tiPF��G�v
?
������{1����^���$;a��M��)
}��	N���tD�Â�Dx/O�.t��0�][؆�F�4�~d�PG��O
1L4ܑ��:����Q��Ä�u��`6�S%�)x�&�7�05Y�?t~����Y��e�
�Ӯ��()�~_��
$E� ?��T;1,�8抆Xք$4Oֻ<^
�d��J Z�F�>�sXOC4�
������ �!�o��c���6��F��׶
���cP(�B��#�P��	'�s����,�
L�a�u��3hQc�
-�ϱ��Дh�s���~�V��*[&���f�������i"�I`���oC
�\���G�����#A�s`q�!T����D�E��ү5ь7ͯ�
^J�~�
���
j����� S1�'?� �v�������

+�N�(֞M�C��u'��T�_~��4�}�
L�'0�Cӧψ��&����I�ł�i �h�1��@
%ȉk7��ZE���
����
���%Ҿ�?����K�b�x	k�^C��z����%�͏{���;,��
����@�B4�=~$Rp�M�0
�O�e�P��u��5��
��ӧ�JIU%Kl�7��*|��)y<�y�q��6�v#%@u��i$�=I�o�
/���"%M��

��:*�2��)c���CEP�\[
�xp��c=C��i��4 @���N
����:�tb�H�C�[�os�i����YF�غ��k~棔���,_5BǣNl��2̵m�_w�}��T����5����  PP
�
+endstream
+endobj
+1015 0 obj <<
+/Type /Page
+/Contents 1016 0 R
+/Resources 1014 0 R
+/MediaBox [0 0 612 792]
+/Parent 1021 0 R
+/Annots [ 1013 0 R ]
+>> endobj
+1013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.393 298.525 488.864 310.48]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.2) >>
+>> endobj
+1017 0 obj <<
+/D [1015 0 R /XYZ 86.4 726.045 null]
+>> endobj
+126 0 obj <<
+/D [1015 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1018 0 obj <<
+/D [1015 0 R /XYZ 86.4 630.414 null]
+>> endobj
+1019 0 obj <<
+/D [1015 0 R /XYZ 86.4 388.301 null]
+>> endobj
+1020 0 obj <<
+/D [1015 0 R /XYZ 86.4 191.225 null]
+>> endobj
+1014 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F14 694 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1024 0 obj <<
+/Length 2869      
+/Filter /FlateDecode
+>>
+stream
+x��[I��6����=e�X	`frp�dʩ�Y�]spRSl�r3�ĶHyɯ�� pE�݊k��7E�[����ћ�F��������"�,�	O��ed"#�-I����X���F��U�o�\΄���g���O�F��b�G���'ww�|�Vy�)/�����w
N��OP��$��/^�N�<�!�DX}p�֑�p����.~���bڥ�
	O,#L'��E����E��H���/�P!��X3q6��Lf�G~������"�\¥ʶ�q��>�^v�gZˑGw����{�s\kG��j�yA�0
���q�XB��3�H�ԓ֛*	��&,/=wi	�X�-��5]�<����ܡ*�9��f�ĔV~�m�z�2$ ��D��#V��*�Q�e�&�o��֙2��I��@�y���c"��$�Ԝ�|������q��
�I� 5	���p*�r��2@�-�g��$��#��h�A
en+
+[Mi^����y��x�e
Ԩ�:A�1G�Y�,��ѲXy��gE��f�b����0��(L1�}͝E��7(�Z,JbN@(�.(1�a}u���0����G�
+�/ͣ��k��lDvR@�(Q�PP�W�'WY�
+$�lT�:!
+�*Hq�ٕ��o��t������$�5�ws���1�:�3�`���D�"�R;j�]�O=��qz�Cr ���M�db��1��
+�M���$��lPL�
�k 4���`K#��y�~�i�q*���s�P����` �#Q��Ŏ����n� |�I�/W)DX�U���tE�U4_�#q%1$Q�
���kz�}
����'g�~,
!�����:����YVη�
��0*3����s�`�(���Aۡ��� ϳ���A�/�YU}(p�{�^��[\��B���)�r��v4�ޭ]UyYewa(�n
w�*-�3D�D����t�`?q9�vFM������p�,{P�I4a��V
+��Ә0aO7؇�;�S�gZ�s��›���*0���v,$3#a�EJT�ۊu]
�%
�<
A�7���m�
p{���oɔ��P
���I��
�9_������Kx��� � �����R)H�v!h�A��s|�1�d�������:����AO%d>(�g��W��U��fH� @�
?p��Њ�A
C�0=�=�@�I]g� #��iGC
�?K=uR
+)V��IS@�&�ϞL@����	��!Ϳz���wWW��0L�,7j+\hHC��K:�y[
��
.
���<+��n�
+�YfմC��S���8-,
+�O�",�J򐹿���X� 
��9��$�̥wh]*
P�,���}�d��N�
�P��`�+�ۡ��1"����,f�˽}~�$"aGjI
+%~��ķ����¤1�&�`a�hbdHޞ]�Z�9
�?��ϯ��eb^5��]5��}ei9j�����30�v>	�]��i�����bM�Gձϓ�J�o���m��ȫ�� �a��ϋ]9`k��� �A�;��r"�Lċl�B��o:����䇫� ���^x_Ջs ϋ<�V����y�-�-�o)x��7��ʏ~�]��nBPt7;�Wq4\���NC.�F�f�y���y�͝�M�P�&ku�n�o�u>�vOB���t7���h?w�
+uR���	��p����Q�oѬlm8 at V/o� ��J��i�t�)BO��w��6K{�����Fm'��_Mt�c 9�jXL��Ŭ�p�@R�
%����
��u�r��n}eX9|�ȷ�M�P�N��e0�20YQ{ޖA-��}R�O����m5�����
>������V�}F�@H;�8�q�^�k)}Z,���<��O�K�z�ٹ��[?�Upu�����0�o]��	�h�A ���78�S�vk��5�j<����E�VU�����	X��Z�vPn��af��B|���z/�5��� '"Γ2�VL��M��65��Ou5��[�:E|�bn���
��
>���j�|}p���=ꨝ��
���^�BH|��݊/ҭؐN�Y|
�b����V�d�@:��p+e�	͊s
J�ޡ_�Yq&�fE����fV���T�Zm��4����c�
H�x�֝0��l5����$�5�PĖM���N7�
m���J7�i
+� ���J� Έk�g 
+�s5(˧�թ�vT
�
��?�v
<ŋ�LoVYYg}q at s��ND�k��1l��Fe��
��/��5�j
w�h�0Rr�Au3�'ζ5 ��Ҟ��
P����?����c�~ﳇ��r~構?f
X�:c�W���`���ʇ}����3�~�����b�������Q�h��p+�}���CM|]�a��	���y���{-�H���/�\j.�9 �J����C
��|s�W�P���Ow�i��I�a���c���
0�,�G�G
0��
f~�iS�M�$���9ա�?�#a��^�m��H�Btb:aw��O
z����c��z�	�/�d���+��r�=�M��Z~�B�Q�s��n�ꏜ��RA���B0t�>�t���5�G��%���̞P���Pv�<Rb*J�Pb3џ�@
��p��������
. �'}���o�J���O▘� 4>a��C;�1m�6�A����eZ*�%�:q	GC���c��0Oc�{�AwW,�^�����׃oG��$�4B�
I!j��gd�F�fƧ*T�
:J�Ō-����
+%����jD�`=P�t�A
 ���Y��ƨ���O��s|
���C^�q��`���A�L��=#��6�E�
+5�F�`��&�?����@9����&�o���'ԑ��9�R6f;  )˃iKU��lg�RёM�a���	#�U����%�
+endstream
+endobj
+1023 0 obj <<
+/Type /Page
+/Contents 1024 0 R
+/Resources 1022 0 R
+/MediaBox [0 0 612 792]
+/Parent 1021 0 R
+>> endobj
+1025 0 obj <<
+/D [1023 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1026 0 obj <<
+/D [1023 0 R /XYZ 86.4 627.234 null]
+>> endobj
+1027 0 obj <<
+/D [1023 0 R /XYZ 86.4 423.906 null]
+>> endobj
+1028 0 obj <<
+/D [1023 0 R /XYZ 86.4 227.796 null]
+>> endobj
+1022 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F49 636 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R /F7 753 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1031 0 obj <<
+/Length 2359      
+/Filter /FlateDecode
+>>
+stream
+x��[[o��~���T��s��H�t�	����>m�@K�D�$�����!��!)J��ݢ�Er��̹�o���� ������?2d$���!��@Q�$#�z�_p$�+���]
e�M��/Wd�����1�q���5�����?�ܮo�}C�
HMV �e�9ܼ�
[�9��
|*�
�
�p��n�q��2�t0F\�):�#%MC�# �	��(6EfsD��Pj�뮦
RZ�D��t����Eś��]=�@$��3��o�W�_!?��[��-a6��5�]y�NOlI�F�����r%�X|W�x�


oá"�bHkRr�BOI�a�dh����B
�ëj=�C��A�ғ�KbE
Fh��;��!�7Y�h]�{7x�"D��zg��`g�G(F����=�u(P-i&�Pzm��0�Q^1+*�|rŇ%L8
���>O���-��R�E�?���z��-��Q��"��<�O�|!A'������%�k�{�/r�QW ���	9EL���
+MKRHծ0az���Ht
��:bE�U�67�co+���Ђ
�մC�T
+�L�ƕ��#mmZ�"�L��uڥSJ�%ш�%H�f_*����d��L����ze��0�
��1;���q��(�_
���@a`C�9'W�8y'F�x8wQ�w�F�1K��{�/0n�?;�F�;�F���6sA!��F(��/�.-�)[A�V��$ň�k��8�4�&�.'�E��Ĝ��v:�����g	oK��>z����ۻ�	7*~-qc��L���&;��
�:�A�jE��q&Ώ�M������Y
����At/����i٥̡, ������K͐����%4��.˷�~�e�4�.	c]�
�24Wf��PpF���
+iPwEp��Fz�&LDz{RCi8GL6�W�gP�
m�����P�k|Kj$�ŷ����+�����5�ڻ<�o}����nc�
�X℥�&q�e�gP�i�R�K�IZT��?.��\>N�3`��ݴ��� mv�)pS�¤�����8�!׷��Ԓ�d���
�����+AF8
b
ߠ���)w��"��ՍI���L�1�Vg���w6��v��u=�}�Iݖ�̻�
����Ѝ�մ�ud�{�� "R
��H
+�	$)0�Z!f@�,���B��"}\LJh,�% 嫙������=���$7�m�fA��&��Ar1�LH���?$}X�'C
$�
Vr��y��OIX=W>��zGI�2�N#I˭��v�{kNo<N�����\UE�y4��d1J�
+�)��z#�(t�MC��E�ј0H�R���?����z��Vi^�@�,Ssf=fEѶ�
�/~5�
�C
�9��%E0A��D�e�C�+��gᶄ~��
+ࢎD�Eb�f^��Yi��*����%�	
{�K��m�\ E��U�s&�&�T�lTM.���C�
yĒb�\
+��A�|&�v�� 5���5��)m1�
zR��$`�x:���<�)��Ts���A* L+�
��jz�&�jhɯ۲a�+)������X=���<�W��&��۱CK	�Dk����Le�a����^R7t.}|��;M�ަ/[l�YV��aOJ 
�'zR�
iƛ
�j������G�`KA���~@�9�x���!CQ*�3�_R���_NC�uL�r��
�
+�R(�uij:��ۓ�h��-vaQ[åjk�j�v�Uꑄ�C�;R�
C$�@�t�h����F�̪ǜ�a)�Aq}�Ѽwjw�e�(/~
�}>�01��D����*��2W�b�� ���v�q����j�>�M�&ѐ9<aZx~?'��Y|N�"�o�]�ύ���Vڴq�ez����'�ܸfݲ�N|�������ͬ(!���Y�
A�p�(�Rg��x��C�z[.,�� �I>��^'���EB���
+U3�>�%%
}A��D�U
�	��B[������~
���i����
�o�G�:z��=hn��[��#Ba�q
��V�~�qlu#_��WA��z��'� )%��)��j�e+��/9����C>
ӯ��g��מ�[��.������r 3�.�
�N!
+"ٹ3gBl�%�!v��R�
Ĕ���o�d'?�F1Щٰ�z}U ��5��F�6h2��
]L 
+\�d¬7?P�0����M��T! O8�
z
����
Y> =��7
+���}�)�^W��.��v$q
��3�[��	%�(�*y���w�
���!!��A
K
�7��W|�H���(k�
e�pd�
��N@~8����}0���ඝІ���F9�v�-T	-�C
-�ߨz+w���o
���S�p�ih���/�x������In�w
+endstream
+endobj
+1030 0 obj <<
+/Type /Page
+/Contents 1031 0 R
+/Resources 1029 0 R
+/MediaBox [0 0 612 792]
+/Parent 1021 0 R
+>> endobj
+1032 0 obj <<
+/D [1030 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1033 0 obj <<
+/D [1030 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1034 0 obj <<
+/D [1030 0 R /XYZ 86.4 523.013 null]
+>> endobj
+1035 0 obj <<
+/D [1030 0 R /XYZ 86.4 329.002 null]
+>> endobj
+1036 0 obj <<
+/D [1030 0 R /XYZ 86.4 166.33 null]
+>> endobj
+1029 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1042 0 obj <<
+/Length 2552      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6~���#թQ�Al���:�N:If7���<�2ds�&U����HE˵��%O�Ĺ�\�����f�g�>����o��i�%����,����H22���}���S
]Vi~3?f1�޾�3��-��]=u�'�U�.�:-�j���磳��_�H�3�J(�r��;��Ϯ���3���g�͸�gQ8�f�G�=�^c�ל�=�	W��IMQ�)���ɶDr�9oF2%��`���SbD�T��4z~yzzv~�n���M�1.x
�����XT��˒̞���\�(����mR��Wv9"crwZ�
SU�u�=�����@v��1�5;&
��}
��
�Q0%�	}�~Dh̐�� B!�$ӡ����M,
�Ƭ�60v0/ň+ݎI��m+(׈y�ϴ�
+
+�Thŝ�s��j�	m�ZA��Q��s��M�#�F
�
�{����1iJ�1a�͎� ����)�'*jS�?
3��M�_�e��jw!/z!���ghG�
t�H�p.���ν�
B��IA���a)w�P���a�A��.��M�>�zZ�_�$iV��:$(�t
���	�`OqDPH�a�D�4�L9M�l��H(�Px}d,����"z�~�=�
x4k(�k�S?'k����@�|K��%(B~�(��V0�
k�{�M�(ӦX��I|p

-���
5,M��0-�2��7�>Q��6��L���ĺ
��w6��w�TeO�ҕ{�t7��P�Y���_�����
M�@<�]� -|�[Mqq��$*�$�i�r8Z���K0j]6z�YR��.�0�;YmVò�C+p�Iy��3����e��

���	E�Ƈ�tv*�
�����T]ϱ�11
Ū[�/Ez����@�2�bڛ�8��5
Յ�[������ �m|7�4JF:�މk�ң���h�.���M�
+
+���L�SV�)�K�z�� �
���6� w Rm.�&���\��M.�/��>so�$W�q��)�.�T�t�M����������HH�R8��ܧ�M&��� 
�y�!J;
���`$����zd��DD 5������26�A�o0@��af��C
4�m������͢� ��~�U�s,L�E��8違n��t�
P4f��&Q� 
�1?Hm���B���� E���	fb-��d+���J �e���h�J`�߉�@��AVx���<��{��p��*&� +
�,T}~h�����Y��: PI�t%���	�DO��4[���l:
[	}����rs�`Z=��@y����l�J�U
��#��*D� ��",
�i�p6�!a��!� bKvS+�n�W���6��2ɢ�o9&Њ�{Pʞt:��Hj�@<�EHeQ����䯝�&+��g2�Sv����]U�������n��_h�E�F��(Aj8��ziĴ��V��v*�
�o
�1 ��S 
+��Oq_i��~X�mC`���m�-�rW.R}΁��}~�<Ѽt&k�o���c�/c'
&
%8HoB�#)9Mo��PC|�7/Bo��*8ȫ;��(�a
ֈ
��ة8{�C�'��� V�
'���p�r ?�O��c� )a0�히_��{��6���sy1a c[�?�w�rd���:���@
n$�+
�;
��U����PH�.�_5�M�X�������-F�3f<��Dx��1}�Ν@
D��G�ζ�ZS�y2V��Z��
c�T	pb�&��W���Iv3� ���>Y��
�y>�?CLsj*b��: ��ya'��
+���ųX�
+iNBC6����$�6����m0~t���T�e�	�'&wm?�q�qtk���yQ�������
`b��@"�(�v����L҅�ᲹL[zݴ?�k���7�R��4���)D�,ʎXy5țd���g�aq��G!G�^�MOB�7�k�
� ���.����q�UQd&��ɯm�\(X�h,��q{붮!�����v��:����=��q/�
�{�
+/�'9�%ľ ؔ�7'��DŽH�-�G�A�΄�A�g7��׋����VM`mM�&��&�AM���),`W~�
<|�x���ӰoM����u�b;��_�H���m��
+S�	?�Pϑ�/K�`EK�+�&ی#K�I�Ou���
���ַcd(*��n+'l�SM���d����8B�X3x	P��̢6�v�E5
%w7�Ѩ�_e�C1���;1�U��v��v�x�
+y��O�P�l
�o�b}s;
+�%��`����^oߛ�b
+���B�����a�j�yQ��
�[$�"���=0�ܔIf�������ئg�[�B�Lj�c���
u��P�X<���xlX�e���.;t 	q���uZ-�Dź�?	P
�Y�0Dw9u���a?��\���Z��D��HH
���sr�N���6wM��\Pi��K�zX*+�4M[��kw3��~1��m[I�����{Z	0�ta���ѩ��C�0�2��0&�c:�
�WV��_�V+�`	�	W
�x���,��O�wO�p��dٗ�D�G��V�ڠQ����m��h
+endstream
+endobj
+1041 0 obj <<
+/Type /Page
+/Contents 1042 0 R
+/Resources 1040 0 R
+/MediaBox [0 0 612 792]
+/Parent 1021 0 R
+/Annots [ 1037 0 R 1038 0 R 1039 0 R ]
+>> endobj
+1037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.233 407.783 271.207 419.738]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+1038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [298.411 407.783 313.133 419.738]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+1039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [294.149 58.249 301.123 66.662]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BCP:96) >>
+>> endobj
+1043 0 obj <<
+/D [1041 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1044 0 obj <<
+/D [1041 0 R /XYZ 86.4 643.612 null]
+>> endobj
+1045 0 obj <<
+/D [1041 0 R /XYZ 86.4 466.741 null]
+>> endobj
+1046 0 obj <<
+/D [1041 0 R /XYZ 86.4 287.861 null]
+>> endobj
+1040 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1050 0 obj <<
+/Length 3365      
+/Filter /FlateDecode
+>>
+stream
+x��[ms۸��_��t�����u&M�z��e�g�3�$ӡ%�f+�>R�$��� H�L۱.ӛ�'� �],v�],Vtv9����������B�
q����jf5�3�
т�Η���$�t.���4E=_����e�źݫ�f�-�Ms:�NK�	s�����w�'��0 Cg��V+�lq}��=�-�ͫ%���?�z&�#
Z����?Nhds<�D*>9�%��n��ʹ���0k���ќP��^T��E刁)�c�
���ų�b�ry(&$��~���5�Y�����n��fk���2��
�yo��Y3"��7~�j�_��Wٷ�]�;�h�����!Fx����5„�p(}�(��ٿ.��	���{:ZK�9ӒH�a�q����E�,��z����1Ͳ�+T{�W{
5b�q`m/��N
Y��0-�q�
X�͊E��2Y4�N��,.�\<Yb�(�bs
+öe��2[T���j_�O�M��Ϟ6c}�����C�,Q���;��m��
3vN��
�՗�뎝��Ҭ���Q	+��<F{�6`��O���gB_`S��ą��z`��NdU�
���C�
+X���Xج��e]Q�=�V�샶}۳D9��C��);��ڪ���XW�����L!�7C4tʎ�풓v�!�{��{g�B��d����"?�vq��}�m�:k���@��2�+�,#�siy��}�X�.��Va�0I���A3R��!;�m��4��²e��
��	t��2	
Wu�~��ه�r�
�X�0�8�Zr�
KpE�~M�_K��&�v�]x�38F
FANt�8��]���2a��t��m_��BXB�
x�ÕJ�X_Q��i��Sn ^Y4�a ���Tn�	�7��!^�Q� ���N��F�Hv�n�[ea��L��[�ʸH�����ߝ�M�"���n�*�[��[�Wy���dE�	��n�(�f�[�#�5�v�4lf�sӂ2�qwA!�
D��Q+�>Q��pC������7���W)��)��t�\:"<�G��+��pѥ�L��:SM9\oV�
������A��xg�c�¨U
��lj*�R	ml�yI [...]
��ݍ���:�p2sL� H�D�UJɝ?���j�����x^1�-�
��o'8|�C6J
���Ujq�0کb� PL�"4U�۷�i�bG�G�~�'L���
DWN�m�W����v�����?�CMJx�jZ8���|���>�C��L��r}���|חq�
�Q"y]H��
��WvrK�F18��ɴ�����l�tN���pyDȾI?�6�Pjϙ#/	� ¦�s0N��sNC!L']$B�
1�����'���;m��`$N��B��ŀ��<
�Q�}N
F��<
��
y���
yq
8�	 �+=�Ⱦ{Y�M��
���k�.c���:�tY\@��|N4�(.r&��zLL��l���]z ���z�7��ax����&�@��L��M�/�����(�)
`��ٟ�e#N�P�q1u��<G���
���d#��7�����@��L=K
�z�F �_6�
�2{�J��_u�	�m���+�U�^L9�M#Ig� [...]
+����O���љF��sk,N70�����ޘ�|�>��{J�~?A
N
��V�_)��m���:yw��kg+�a.�)�Qn,@��bq�������;�U�(��
��3r��\��<�1P�rk�(�	�#Fv�~U�/�$�K+	p	�tb���m��Ԟ����
+_5�
i�_�<$�3��X��
�#�=�3�����œ�
"��ܧ�T����I��G�;a�;��g�=���ʇ�=	�	��deq*�&�'A4�=
��q�g$&�p�
+��1��?��E�WO�
WO�$j�`�� 
C��
C�p*�"Ѹ�I
;ѨaC��~s� ��MWf5�����O֞w���2_�о9�61�`Fy�� �����,���S@�gSm�)����R(���m���/
��W�6��%#�bG�3�`3�*^�ԛ0��EŎd	
��A�Ϯr���fW���u9�
+��m�*B^,dve����}X1U\����Xb�Ǹ�
+'��EU�Z�<�+����󭔘�uDj��� ����%�S�s�	�J&����$�S�����t�>�mݭcJ�-Ql��z�"Ca��.
	t5�`8����(+��\�p��L��E�i�'�f���e
Z�m��!�����T��N�57�e��[�]
+���0�w��}�� (pf�dn��[��|��]"��zQ�m7ֳ�
+�4�Ų	M�}ɲ�x��#��_��{T�
��u�ih�����©?��y�5����x�/��2��ah]~Lh�\��Srx��*u��k����S��+*{�t��v���xc��ۻ.?�5)�V�n� ���
<��M~��]���w���t{5g���
��u���&Q� ��/�c0���Ck�G&��͍�E����
�w��&<tZ���;�
@�_xe
b�'B�tG�E� ���b�
�]��L�^��=��m��򂞄�bw�?�
�Wv�l���r�B����4�
!�]�W>�@�D�q�)����d�7���h&��d���[�X�'_�U��Mb�bpwO��8���r����[G6y
�7�xj\h�}Vl���A�`��m��L�-��7���
�)h�M�4�ʉ�Q�9��ӵXj��w�
+X�w͔�}��CRN,�~*����6OGs���X���ۭ�f������`Q�"�v��޻��p#�H|��a3�F�
���I��E]�jj�z�������_SBD�� q`4j��.���
��] c at W/�p�K��,c��:�0�q�S�r�����6@��X,�%�t2����##�1=�	z��D
!~�m��;��������{�H9�Zǿ�
���u�y[
�&���r_\��aN5Q
+Nj
�?�H
+���D�O*� �u�{7:Ⱥ��6�:j7���ci���jwy�4_�k�%#�ǷI�� |_�p[� �LNɈ�4�b��P9p��
��ʅL�����8�?������j���K�,�TA5í5T6�k�K����E���B�T���.�����J��]�Sj_3x/?ͨ t_H���j��n�K��>0"�Ef��S���(�W;m�& �-I�	v�>��I
+endstream
+endobj
+1049 0 obj <<
+/Type /Page
+/Contents 1050 0 R
+/Resources 1048 0 R
+/MediaBox [0 0 612 792]
+/Parent 1021 0 R
+/Annots [ 1047 0 R ]
+>> endobj
+1047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.52 528.459 270.991 540.414]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+1051 0 obj <<
+/D [1049 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1052 0 obj <<
+/D [1049 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1053 0 obj <<
+/D [1049 0 R /XYZ 86.4 511.828 null]
+>> endobj
+130 0 obj <<
+/D [1049 0 R /XYZ 86.4 234.761 null]
+>> endobj
+1054 0 obj <<
+/D [1049 0 R /XYZ 86.4 106.672 null]
+>> endobj
+1048 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F16 453 0 R /F14 694 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1059 0 obj <<
+/Length 3240      
+/Filter /FlateDecode
+>>
+stream
+x��ZYo�6~���G�"���`&3�"�I��=OI���e[�}E��8�~�HJ��V��N��I�D��ź?����,�q���՗�r�0�QL-n�Z�b�0+N7��O��K����2��/W\��7K΢Wxã�Cើv����m�N���/��ܼ������+
+ɂ6d��Z�wW?�Bx�vAbn�⣝�[nb�����W�sLB���qehL�U�׻l�d:�
�E��V�K(s&��<ߤc�1�O�
�<�\��[~{ԨJb�Y��]��q��##�Jx���D�<X��:͜�|�\I&�������͂�(���\G�܉.���"��m����h�7	���ݒ�(
��:�%	�=�n�����]#���)�v��SH��3n�Ϳ������x��{��Ͷ|����m��v?ތ��r,��̊�&��P��6Nz\ǽ���y�ww��X
pϟ�57��ޯ�/ر61��2�)��YU~�K)�t[g�ZIB���Cqꋡ�r
�Ɩ��6�ˁ���P�����ʒ%��z����p5I�8�jBid
F2�s^:Y
�~W at vVm$0���
������'&N�\(!c*�,]3k
J��O������\_�h�$�4ͮۓ;
Q-ҭ�:��rgg_>�^$�賣

��sY��YY��ۭ7�2���LK���Yy�W�����8�
�:��7�O5&���QFX�4x����!Q���7�l��٘��w2E_d	����
S6�n���)�o�k�!�a�Zcl$4�S�����#xc��d4��/�d�
4,e龛�2FD,`?/@��$�x�!�3j��!l�f��;T3~]����LI�.}���xy�~XZ?
n��
����Ηg>R�������7���a�Q
���?
��
F)�
}��0�wi�����0J�$�x��\?�s�ַ1���;���s��<+��:sO~�U�I��
�+r��n��U,��ℹ�l����vL��&0��k��n*����,h� �h�&�z9��Ͷ�ks��=T�X�X/i�S���������_�T=!�$�'*����u�{��x��א*	>�3�~���
�xq�m��Q������8*y�p6h�RHW���V
+�,ߦ�̈́�r0�6=j
�SP�lS�a��?_{�
�v|�>�u��Y�$Q`��8�>g6뷃.{�;�Z��i����Ӿn�
o\Q�!KaV�f��W�b&�+.��&����k�5']:�8^B�Yj-\�aZ��$�rb�
��.+w���M��0<<gιK%�!|
�s�(����g���Ñ]��Ų���ѽ�]|��̰G������\ʘ$Ɵ�W�tab�t�J����P��j[��j�u�fV���wa�������ʍ@íc�)�ꡣ46@�W�sH���ԥ���RC����.�^�w��i�.�*��['�q�]���0�1ڵn��"'?�68/�\�v����|c
���gz�!�2���v�}�U3�m�\*P�*�iW�јť{R�M�R��x[��sv�Оe���h�z1��a�Q��Hn(�~	�uࡔzN�
�?�]���.��D��G��e�7�6�� [mt�s�\t��,^�2!	����"�n����Nm$o\�t��"K+�6���m^�m�mY���
?�9�(�m�*��O�{`�v�j���[YyRh������8�+l��u<%oXQ�)[��޹��R��9�
�\v):Gi�6u�|�	��~{��t�4�.�qy���̍a��E�à D���P�[�M��$��Ϩ1��4�Pj*��1�<�MUpB���Ԫ�.����p7e�}�T1�'�J|�[
���I#fP��1��{���I��g�d��
���T1h蜔(A�M[9�V�P4�1B̭ٙ�YL��������TNx�
+nȸ)0�t
�� ��
+b��/��
������u��}�ŴM��X��N6k0�'��!y��
/N`�Ƚ����)
�|~5���Zʼnͳ�b썭��MX�kJm|��
��	J�陨�IJ������Z���b�t{p
�ē&�$P����|!���Օ��ST�J�A�կ�x���
:^Ez
��A�`Y"�/� �R,1!H�D�n��2n
@��b	
���!
����"}��/�WsAaw/үƥ��n	[��^D^�����z�G��^b
D���O"q���|Jz��a��% �
Pm@�
��
D:�Ka�R�4��D�S�<�
`�z�qj�(�6��p=���
z���U
qߤ����#$�ob“���D�ŗ�'�#
w��	+��i�#�u� ��������
<�I�`z�<;��Ď�$v4�oŌ��� +�|
�cB%���ia{����֕��5D�
�30�ҽ
���M
k�U�)ڞ��g��l@�.�Y��aH&��m=Q5���bim�o�2�!�[�Ǭ�ֻ���5n�����s�6�
/X�k�Ж&pmQ2��v�
+�D�*��W�p�ojPp���29/H��0sP�
+��l�X� KSX��#�4��
1�84zbi,��Prw�������D��bo[:�9�t�H������>��<��M�F�p�}_0&�
�m�.kx�����88z#BA��E�n�AX1bV�$7�?����
5>0� ���l���=qJ
+���b���Tw�����qآ����u|O�"��3n�3���Y�
h��t��>�� ��ʘ
+
*��;
��<�f����)���9 ��p���X�)X�����g�`ɪY���*���<�\r}Yx�T�lt`�xRtP
�~x`�fK8j@
&Ƶ̄�!2T���V9�Ml��9�b�ebW�Z�K����C�}땉�|Y�b��߱����ߍ{��[(0��6�
�}^����_b!?�wP�2�e�G����pl�?� ?�
�	�r���� ?|�@~v����Ⓨ����6��k��ز�� ��[�j��ȏ鰡�ȏ�A~�㖠��
#�{��Ҷ_��FT�>�3���A��6	u3蕡�y�+$1Ʈ�Ps�c�~���� ?
+��R�B��zWx��</f��M�sh
.7|��[a	8�T20(W��C}P�Q�^
+���4�GI,���׳|7��
a �I��!}����3�>)�
��Tv���t �Q�4؇D��znx�K[�aYu��ͺHt��r�a�A���>�k�p��VjL
+endstream
+endobj
+1058 0 obj <<
+/Type /Page
+/Contents 1059 0 R
+/Resources 1057 0 R
+/MediaBox [0 0 612 792]
+/Parent 1021 0 R
+/Annots [ 1055 0 R 1056 0 R ]
+>> endobj
+1055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.804 569.791 408.276 580.639]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+1056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.574 265.894 403.045 276.742]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+1060 0 obj <<
+/D [1058 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1061 0 obj <<
+/D [1058 0 R /XYZ 86.4 457.174 null]
+>> endobj
+134 0 obj <<
+/D [1058 0 R /XYZ 86.4 249 null]
+>> endobj
+1062 0 obj <<
+/D [1058 0 R /XYZ 86.4 108.492 null]
+>> endobj
+1057 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1066 0 obj <<
+/Length 3388      
+/Filter /FlateDecode
+>>
+stream
+x��[�w�����Q��@�z�l�}�:�6�}=$9�-��H������;�?E�v�}���D ���f��E����7�Ͼ~#��1g�Y��YX��"���׋�����
i��C�V�$��/�2��Sj���&+���B8��R��_�������8����V3��b�=���h������.����BI�<勫��Ea��p�v�Z�8㱡վ�6�mZ�
�lj���$_�Q�)
gRh��g��p��()"$c}l��qi������q3n�x��t;Z�x�"b&���t��'�JfcՎ�Xf��
-��/4t4�`�`:b�r���e���
+[ղ)���Mi*>T�8���ݹ��$�L��$춬�i���dWH�76��h�(�8�� �A9��&�#�S��9�{�����%U�~�������9���x<��/WE�&��~"����,)�-��w�)�&x|��0�Y{v�	��
,�Ao~J�}��x��2����ß/t-�߆5T}1USiY���ɓ�!#.i�IQy��\���s
�j�����ĝ�͌�h���YM�*��+ {Tq4,��1�PЗW3g=v,�za���%g�
+<�R�}O������]]
�Y
1��]w�+w�IN[����MK����2M�B1���*��}��CW���f5���ڣ����i�%#l#�?|��
Q�w�DE$���|���򈀐��C	
�7m��^E����d���n���U&gʱ�wgv����u�!�ai���r��S9�M~\�D�/.(�u���T�$:���@�rV�D���휀��b�Q�C��h`%�-�_��|���3^�Y���jn.��L��������l౧�gE���/�2��
+��wK�	;����kr
 ��kVdM����t=�{`�Y���v�+����9ibۛ�֏�ю�㜻S\p�	�s�&:�^UY�]� �9�b�����f����Wm��t g@!;���a�
t�2�
�_��>��-2\��JVl�1��� �Y�����e	\���!�R��&(�{z	������� �C�w���0�7y������gU��!n�&�%�Re�5�2���+%�H� ,� %vZ�v���V��M�M�{���z�{LX
�cۍT��#����V
9ߗ�Y�����*`s��o
�hn�vHR�K�)�~��ê"ô�O9���s�3
+5��;/��
e�2���C�ߡ�by(s �0���vWiw����
�^X�G�9�8�8��Js
dŎ�3�\e��O<�
+n�x
$-EzG-��A�|F�Зk��� ��dSO�%j7ɪ)��+�����<[�gHfN�i�i��V��25<v�*��~�x��I�ކ�"���&ڿC\�
�@�"S��acUӴ�� �
mń�rwLF�
nь�8��P$�-P����g| �$#A
�s�Ƴ$��KG�n
0��	uS��m;ѓ}������L�
!W���
+nj0r�! ����� ��
+���� 
i{ ���f
+��#(<����1�	4�K��	
�F
� ���l
S&�>��凟ҷ`f���h�P�r ��������cK{x�i�#xw�e��O���~�,@��
�2��'
���rp�=�	���S�����DV�pM'r�k�1�ɒ�����R��
A�pt,�m��X�G�S�ȹ��v�;����*��p��@
�n�N���с2Q绰��]��O=>t
G{��h8<���1�'N}ޘC����z`7!�D&�5��<���)$�<b��̺*a@�O�tř��&]_�t-N�q}V�@��
F��L ��B�Х�0z���e!���Lr��܏3CC������{n
`�f��d������{8�#�b��Sdpp*i]�&
˥|99��
���i����c
+��r76�����z�F�s#�|�aiNq�GؼN��S+_�i
9�Џ����S��9u�^~|�ڐ�
�HȦI�y
1  ��=10iSo���d8R�Ku��A�[�%uG	�'Q��&<��&�u����W����
-r���ZtX�e��ñ"~
R��*��<��
=r�x�����Ffh�02������s:�c�)��ٮ��
+n�G� �{�6�~��6w{è���ۆڳ��f~PI�[�n�aF����2�	�
hI?��tMl5��'T��_���<�oQ�6	%,���`Ż*��*�Q
b���P�܋��q�2_��<� \ϧ؁$�H2�2��?��_�J(b��\�Ÿ�T��O�*����@r�L��!X�c�H���e?�fF�a L���x��DC�oD�)�����Cs�=8�Ǝ7��~�	U?�Ԫ�����b���T�q*�V�W�N@��������7U��U?��F�ÌPv�o�ֵ�a�Η�Ȯ`������q�Lk��̧5L��R����yk�r��5�|���u����#����i4L99N1ͤ�x��0S�s��dcm�5�滵uꔴ���&�;LA��rܗ���B��i��TX��Cz9�V��4߼z�t��*�]�G�Q�
)��WQB� �K�@�Y)�]r_�7�>o���(�Wƌֆ�X?��"V�Xm1�>^������SE]�B�i�_��@�it(��d� [...]

;WϺ��y�>Ȭi�� �$���%���j��bu��
+��m��m�݂�>��7���Y��'�\A͒�#��*�A}�b���	�q>�B$�[����O�;��S�P	��Y@�T�����nյEU
������WDePv�_�
��
~2xY��*
eώ��JpL�I�J��Y���v�6��סR at w)�m���u{#,{搁�ǪS��?^�����S̚NA:9��Y=aLֱ�<
���|��Ƭ[� 
�p~ ���K	���F�V�s/(�i����<�D����ߗ�y{뢬Ӣ�P���-��а+��
܌/9`��V�p�2�i」nHt�㽐ݾ�+sw~O^��94�V�{#��EYSOR�v�2l&�|Cki)��k6�LR�O�1�Q;ՐihHYŏ���%T�oR��p<$����`rvy��^]]SU]rLd�E����!k�U��Q�^X
�C�+\�o~�M�P͛ 7��p�=x���(�s��y��
+���q�2�U��80
`a�;�l�8눟���o�Yp'�wX�p�ہa���W ���b� Z
�ї��e!
�9�
+@|1m���m	��	%n�d�GJ�R��%nHh\ឨ���G0�
���U�N�n��yQ�z��档���(�n��
�A�e�t�Mp�]�M�J(Y�)�X�W�,��
+�-[�&�Q���
+endstream
+endobj
+1065 0 obj <<
+/Type /Page
+/Contents 1066 0 R
+/Resources 1064 0 R
+/MediaBox [0 0 612 792]
+/Parent 1070 0 R
+/Annots [ 1063 0 R ]
+>> endobj
+1063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.035 597.645 413.506 608.77]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+1067 0 obj <<
+/D [1065 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1068 0 obj <<
+/D [1065 0 R /XYZ 86.4 496.751 null]
+>> endobj
+1069 0 obj <<
+/D [1065 0 R /XYZ 86.4 108.459 null]
+>> endobj
+1064 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1075 0 obj <<
+/Length 3169      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw���W�-�d�2~9�gɛy3�cir�}��!�I7�C�g����l��Xm��� ��WE��͂.�~����W/�^�$�\/.��&raxJ�`����ǥ��+n%��꼸9_�D._=?|�o����3�t�����ˢ>����ً˳�g
N�
֞�H"�b�;��g�����
JD�,>�u��)�0�..��qF�tHy2&\��0�=�O�����<Y6���&_���-4#�+x�^�7�1�LKB�?H5G� L$
����4�
a	�i��]Di�#�D��U��$1�]��7�+����~i�xH�`;�b��'�2����\!�M�6��oņvc(
+zٝs�̎�d	��;�-��~۫m�]��&#)D
�P
�2Ha�Ӳ��
+
�Xi)%,�
m@�|��RA@��&i�����2_��	M�~��z�+�	�)�r���(Sٍ���e���dۛ�ʛ۝�u�u��5�vB�D��Q��s:�Q��ӷ�g�_����؃�~�ݛ/�޿�c�~\)J�E�
�l�%K/��R8�AP��~��b���p�H�`�N��p����[�Hu����f7�Z�p9�RZ^O<�f�����:A���"��koQe��cg�R��6�٫�O/�\L��I�j�R1�<�%�BnŒ`�={qq1c6���\w�+�����Hԝ��so� �+̈K
�l�\�k[�ׇ�6��6�Q,Q �$��{�©>��`+����o��f
+��PN9����o߽y34!-
+1�бyCB�&���
2��$L�is2�ȧRBY�S����1CRB�蜱��
+Hy����q�7���:���$�
A��F��C[#�����w�_de�����d
�p�� �.�
F����'� (I
3܃���z�V#�n�M�%�<(0�$i
˿-[���&�Ŷ���aیr��a�=���
���
pƏ��
�%w�
JP0�9�3n5}�m���A
\��=`5��N�%�c��gD*�;�ao�7��^^��;��3b�V_J�X�>�,���KQ�/T5e��\T��,�z\��7�C�|&#��b�r4*
�QP�
+.bv �?��x5��T��I�Ɉ��ξ���t�;
2�s[������2�Y�^N�ׇbݮ�sH:Ju:�1�Q"�Ȥ+G�T�9�,�������aĀ�a���څc]a(�<Q�B
�aFU�
+W�lT%�8��*�n5r�=�&p�\�zl^V-��
�]TC6 �o�"(Hb�
��
	�R��I:��t$~�����u��n���SG��u=�k>�mvy���m6���6Կ���XT�s ]
�:,�
�X�'C� Q͂_]N��KC��W����
T�!������xSoJ 2���5�8+j�̳� ��Dz'l*a£ *|'���	�ŝ �S(���$�
�
+r��$�q����Ց�w�Nph(ң3�N�)������a'j!B�i��Õ�t�Nphkdљ������v�"���:A����>p��L	��z��A�#	�`"!�3E���5�&��߸�����
�U��v]n�����
���Є/㡢��)�Z$<�� �s�.��]��&Ƿ��p%�W,x��m��7����G��~�M�a���S���z����	�%�$�ֶ��͝<vT��Qp
@��6)��T��
�r�υs���I։"��Dƥ{'&�!ޑ��N�@��hrM�5��9�
��rA���bN��ן�L��~Pd�@Gs[���[?���;dn*��J��
v[P'��~`
��H7h�}ׂx�Ip�$Mc�yWU`�-0ul�9�"@	��t���~
[��@�C�n�oȸ��ٺ�ʳbU�m�ذ�&k2?*�ݴ�W
��qӒ��;}�.0�n��@�R�}k%���yp��	���_ݑ8��� ��Y9�{D�>	��eM�7�h�[T����ʤ|�M�N쨺��t�q��*�[TC	�c�*9�ސNQ>.�a� ���S������~�OI$�����
5.�!5��{�
����>��2�jn��%�T�+^ET߿
+�<l7~�Eӻ�ļ�z��;���r`������'�cHN$ay��;�o�1�<�

+3݋���	�g��	 7E�y�y�@K$`�@�
S�-�
� 
�{��x��(z̓Q�b�m�g�'�1 cL\CW���)�㧴
���3�
=�+�ċ����N$�h��)t"a
M��u�Q���!f�
��DأՑ�V<qX�����|�6.^�!�C������#p���C	�P at Y2��Q%%:1�"�h�.CtS Y.o[!>�(����9��
ݤ`G܌�Me!{B�a.��ku�7U��i����nUX��� ����B��B��n|>��o�`�2��k���6�q��
�'�>�p�<h�#O4fy^

)1��
���
�d�<��Pwmʛmy�53=���y�
'�7U����T��3
5bL��=�Bb�2M�'0�=�?�N=p��� 
IV���A�Ю,�u��
6����
��-z1K��PԺ�3]Fc�L��Z[x{3	I�A�4
|ûd	�V���N-'\�QS8�r�z�G��M��
��@�6�w�8�ͨ/�M �@f����M[@ƽuM��BM|���0�@���XZ�M �~��Xp
n��m���}�s��;�V1�Xb?j����u��$
U�iYq����v�����
�؆U���l��?�Mn۸1<�= 
�`��.
}�i�?��Q8�ǩQl§��j���k�C��b~)|"���v�,�A�wW�c�n\EW�5��n��??�q�\���i�/�c�V��-F�vդ�޲pБ�7ǀgaI��J�}ɬۺR��J*���{(ǟA�����\[;Q9�v'{\�@�qk	r��΁O6�ɀ

0
��i
ßbxN�v	����w�>+��z4N�����*�5DRT���E�=�:ҟQ���؂q.�eu��Ʉ
'�����KJ�Њ��Q�0��܉�b1bC�S?6�����. [...]
+�� �ϣ
+endstream
+endobj
+1074 0 obj <<
+/Type /Page
+/Contents 1075 0 R
+/Resources 1073 0 R
+/MediaBox [0 0 612 792]
+/Parent 1070 0 R
+/Annots [ 1071 0 R 1072 0 R ]
+>> endobj
+1071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.948 205.812 181.67 216.936]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.753 85.517 419.224 97.472]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+1076 0 obj <<
+/D [1074 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1077 0 obj <<
+/D [1074 0 R /XYZ 86.4 531.704 null]
+>> endobj
+138 0 obj <<
+/D [1074 0 R /XYZ 86.4 285.917 null]
+>> endobj
+1073 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F11 691 0 R /F10 754 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1083 0 obj <<
+/Length 2553      
+/Filter /FlateDecode
+>>
+stream
+x��[Is�F��W�N��^�ݕ�����K�8�<'�e̐�L��(�~�C 6B�	k�\��dx����ޭG����\��J�%6�w��L@���%�`�����K�&Sa��!���y�ZM��?�"w��m�Y�l�ɔ�@_�ɟ7o.^�\|�`��z�$����7__|��z
��G����+�n�Ia	�w+ov��-�lӡ�HŇ�0����Ԡ������b�\-	7��T��Me�6�
,#L�XW/����U:����h�l1�&�vM¹ Z��%iY��Z�b
Zw�i{?Ђ�����o����e���|�_�\�������Ž
��T�xv�"D@�@
+I�Ua�T:u�#:���:Z?s�ݥQ���>$���~ni[�8�J$�, Q�#�"J����j��}�20��3d
+צ���%+c +��
è)����;�e�h
�A��0)���R��&��,���.�,�30�� CPb�2�^�*�]&>i�=-b�a�����:� �,m\T`��
+
 D$8�7��Xa�&
H )
+�e�
�"��ǯy����$^�p�G׏�5�F�Ay�w�Lbg:����-:6'��E\S`+���p�=�c��K�6��;��VI�v�L�C�
+���)�7r_]r
XOR��)�+S�a��_m�YK��0"�wغ��&Z��N*pQ�|]F7�L%��{�D��=brP��C�݇��dS֦Z5S(^:{o�ւ?
�i���O��~�>,@�a�8��|�5����T��ԫ��n_��K��W�i�
N1[��w0�v�H}�(凫]ԮӊRW���;�5C�G��}
�94nYOk�>�&��{Ц��}��0��*�7YO+H׺.|�vt�v0�N��]m�yu=�)�b.S*����*�z*�AJ�
T��ه�˗��@�*
+s\�w�$o���)�
r���9D��I�Y����n>��t�[�
N4
�y��iG�MrB!Tǰ�d�Ђ�ۗo{&M
+�c0�
��`ZV����Ƅ������D��`����(Z(cAS��ٷ�
�VeW_+�3����D|�%�ΖWć������a�5�&;J�q,F��u�a�2S��}]c�@��nii7�sQ;��(�����US_ś(�6$�o�ʒ��<�,�w�A���U�w~�>u�C4ػ$��v�
�yՓZ���S����*LjX��IM�Ak���ނ���S(�pgqq3,
�Y
ފj�o�
������;��{�[%	�m� �75��V+L9̭�6籣�LF9�\S�:�m��6�Z�u~�5횣u�r��a|�A�@���"$�l�o��M���Esg�vi1D�����6E����Xb)�0�X�{d��a�������YH	�

}�Hɿ3��apD”�pD�ap��t8RZ�7MaT��v � F�=PJ>��f�J�<K�-����;-��
�&��r����@���y�Y	� )إ�@�3A�7�c���v�����᝻7�s�o���ݼ�i��o�BY<-ޏ�x

�_�1&{$Ņ�.�wc:�@�r(n���{��Bi•�Z@��
^�G`Z��
���n���[�J��붐"z0F�I�/�G��#p-��ק���p��UJ��
w��~��&\�
��PU�V�nS��6�Qn\�%�)VD�h3/N��,.fKwR�����-�9��2�Q�u�߅)���� >i��7wi��zZ7��j��ih
|VNyek-�ߜI�OM��ܛBv�|ϯ��j[���

>
N
�d�z|�@��s,Z�5�Ճ����0V�ai�6,ฏ��hm�{=����z�0��@�<Y��
�~=�Q7m0�p	Ӹ�c��
+�n�;@}�0�Qu�^ȭ&V��"{x�6͜ �P
�d� @i
�8 �
�J�$'�ՠ

 ?Wi�_o��t6ǝ��:^d�4�f��[
x�â�(�k����xBq��Y
]��*+@Ǽ&ᯱ����}�?�n�0�:��:
w]1���u�-��/��&��
J��>�Ǝ˫����/�^]�|�
%�H%C�{F(ID���R��_�z�&��~{O���$�U���~>�]]>��ʯ` �0S� ��B�#��'hN��'5���4#B
�;xl���xL����/wi��uo�I

�
wX�)OÒ�|��^�P�縥�Q=�a8Z��›N6\[�&�Os
h���nN��
"���3 ,���10$ŬzB��D�\k;	�qH�]��3%�͖
�h��vLc���	�:�����Lȼ���S#)�h��A9�1mk)*��F`Z]
��
t����J��@��Z�fT�]��k�%�����]�R


�z��z��p:P
+�p}}���ϲ�,
����9���Zu�ߵ
�M������ g%ц�
+W]%�>U�����â~ ���b�R���0s�>H&˔���?�C���Nܫ�T5�T_iWײ�l)�B�3g�xU�3^�)�|
z �U�Xc:���
i`�?"�+P��\������/0��ߕ��ayyq��՚{/��o������
+endstream
+endobj
+1082 0 obj <<
+/Type /Page
+/Contents 1083 0 R
+/Resources 1081 0 R
+/MediaBox [0 0 612 792]
+/Parent 1070 0 R
+/Annots [ 1078 0 R 1079 0 R 1080 0 R ]
+>> endobj
+1078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.319 508.023 433.79 519.148]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.9) >>
+>> endobj
+1079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.58 496.068 347.033 507.193]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.10) >>
+>> endobj
+1080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.956 294.924 434.427 306.049]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+1084 0 obj <<
+/D [1082 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1085 0 obj <<
+/D [1082 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1086 0 obj <<
+/D [1082 0 R /XYZ 86.4 478.312 null]
+>> endobj
+1087 0 obj <<
+/D [1082 0 R /XYZ 86.4 277.168 null]
+>> endobj
+1081 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F14 694 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1092 0 obj <<
+/Length 2584      
+/Filter /FlateDecode
+>>
+stream
+x��ZI��H�ׯ�m�qv�Kw�D0 at wC'胰�*Eۖ�d�����LI�fac5Ap)�����w~�����O�1d$���*��@Q�$#��2xr:�S�
����n6g���Of����?,\�������h�['��H�m>������۫W8�T
�\����?p��'�����'�npf��ups��+\Jܥ�1₎�!� ��aL �@F�1��#�K
+�j\7�f��*�� ������G7�d���ŋ���8/����a���c
+��R�
S��HŐ�^���z�D�^�@Ĩ�'n�j
��*�_�ϰ-�a��e�7	��%�ʌ��a�V��3�r�
k)��7��rm�ϙ���Q�IbN�Bh̉�_�<��E�쬓��
��	�$���!
	W��Z���2�q�i
D����|��x��Äǹg[��HX� j&���o��m��}�_���teq�U�=��
+�+�"4�g_�����<^�+
&3��]����_�~z�/��]�%����7/=�e�G��~;���֟䎃>F$8�	*/�1""�:R����F|
+

<��€{X��՚�i��N���G0�W�9��=#M���&��H�S�/�iV ��-;�nFi
8�F��,A�4{�d߯S�va���������.x�t6*G��1l�9�K�ŀ
��mV���7��
�`{V��ueޘ�]�u\쳭��L�}�M �2����]/dPG�n��Ґ
)o:
+�J�3X� h�l2dSH�L}�Q�ܛ*�Ƶ�F�B�B�I�6?��~~3�\��@hp^L/
+f�H�HI �8߼y����͈O
+
��һ޻�Շh핇ݓ~�����4��*�q�.��b��j�^����x	�v�`-	e^�I���*+‹�/��
�)��)%)�ӗo�?�Ȑ������2Wf�jP�
+E�$Zh�Q��DY4:1e&uL
�t_}}8x����2P�Z�2j
D�w3AJS���ƃ�m��a?�4d�	�R�q�nv���
���~֪�]?s6��_8��]w2�dG������w^$�Z)jVZ���g�*�$ۤ�
�D����%���-�;{סZ�i2��;��F�K�疋y֩����7��斺��8��Eu�F���ܽjw�;����w����L���2-��e0��T-�U�_�>�U���9��+�9ʇr�)Tky����~u C��F��Nc����߂��-�o0�JK����^�
�mY
���:z��*��*�
�8�&C�ֽ(��dQ
��>!�Q�ەgspC�-���p
�{V�������O�<I�Û(��&q$���Ĉ�=� \��d at h`s:LQ�>w���
�Q  �Eo*~�˟'ہ��	���b��!�،��6�8���+5�@�F8��PL�q! $.�N����IK�v���*Z|=!	N�=�Ie=i7F�~Җŀ��q���+j�Ѣ��r[Daჿ��>q��T��w� s��)��*��:ȳ��e��Vv�FR��8Tu޹��~�0��吣��v5���<�g6��'Y��/,co��t�o;Q��¦C{3�2���8yH��27.��.�[�?��v��{i�0�+
�/6��hg��|���8�bd
+�ǒ���.���2� AJ1�
�eq�.
v�`��9���P�y;2��؅�+�68���Z�Q\�p�C�@��AB�W�
���?�or�듆(!njh�灎
)Y7+x(� `�3�W}C����c,�����
WAGI�Lb- U
�h�<�����ۂUS(�����%V�(TR1	laIp���	�VXU�����]�0��I�p�%�T� VM��N--�g�UC��/x
~`]q�F���`�]�L�R��
V��K@��vI������w��ę����F�Ĭ�06F�8�X�#M;:nH�:��?}�:�'�<�"mi���y��ԅU��y��^5t�x��B��Ɔp+;~,���
��ˏ�P;.�
Jp�]d1���o�S�G*�@��/I��
�3�1,Q{�������A�ϱ#��N
��E�s�
��F�i�!�.N���P�_2q�B;���ҡ��C8Ӏu�!��CNr�X�|�(�E{+��ߢ�0)9����O�t3�"0����/Ӝ)
+KX�)��x�_�p��Ҳ8+�^��a����܉v�̡_��My���Ƙ�rOτϢE�>�,�?�e�w�
�XJ�L������l.�
D���Ԝsq(*-[��W
k:|�h+
�m��a�z6��t
�d�U�����

f�CK�3�'�!��C�O�Ta6������ �+�������悏"Zu(�c���
"�};�����
���'�
+�#u�%�s��3���7��bh;d~���G
;�
�I����'���1a'nU������p���D	�b
�ߦ���c[�Ob-���)��&`Z
�-����B
ȵ��.9�BM�e@���Ύ]γ��<�q����)6
avʹ��9V9����p�C������%�G��Q�v^Ft�
;fwAP>5�6�B�(�
�
*Z�	
���"��Zh�Ӈ
�,���
+endstream
+endobj
+1091 0 obj <<
+/Type /Page
+/Contents 1092 0 R
+/Resources 1090 0 R
+/MediaBox [0 0 612 792]
+/Parent 1070 0 R
+/Annots [ 1088 0 R 1089 0 R ]
+>> endobj
+1088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.501 410.744 192.474 422.699]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+1089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.501 179.948 192.474 191.904]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+1093 0 obj <<
+/D [1091 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1094 0 obj <<
+/D [1091 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1095 0 obj <<
+/D [1091 0 R /XYZ 86.4 482.733 null]
+>> endobj
+1096 0 obj <<
+/D [1091 0 R /XYZ 86.4 251.661 null]
+>> endobj
+1090 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F14 694 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1100 0 obj <<
+/Length 3154      
+/Filter /FlateDecode
+>>
+stream
+x��Z[�۶~�_�Gmk�ĕ@S�4Y�9��{b���'���JԊ�D�"e�����;����y�(�s��#���$��p�����W\M
1����r����8��,&?M��3���C��f�d�>��ir�N��r�ϫ����3J���ܼ>�����5ф�b%�BM曳�~�&
��zn�䳝��n�������Y�9�EDHvL����FN�yi�D�}�c`� L{	�PBw
eH��2��X9S]���z����z���
��Ɣ�x���q,
n��{�zx�*��0��
<_\w��`ۊ�$ܱ�����|&���p?
�
�([$cC0-
T
B�9�N(��N��tL`���M�y�ֳq���
��0c%��̨"
�bE�L��.ۢc�
��4�T���
+ܟ�q��8k�2�QF��
+x��0(����]Z�U�T�6�O�9gz�߸�쾬

������r����E�I�W�tY�Zy�
�
�&��
J��n�]6���Jn!�9��C����+����{7�I�U��tQ���f�Kz�vw��ՠ
�Vw��\-�FT		�`HX1SOq#�bB5��$S�#
q
�z���'�DC��9��l�
�O���_�:�3���Ȝ�RU����|��v�x
�Z��i2VI5�Q	�-v_��۵;�9*�9�fx
+qD�Nr�V'���DD�L��U`���M��$�a��@�.��F\��iꮻ��s�H�6e�-X߷ߧ�~�e:�r����0o�(rig�=1tK�I�u/����T���Dn��
h�/�I�D!
<�Z�&3g�3]���]�:�Ě���ô����@tp�&RsžۆX�E
�\����������B����
+[���:��rggo�o�[L��4���r?��e�ܯ�>� ��*�`���~������Ob-��QV�����xN�S(e��|����Û7G�&�{@c�
-bs��0
A�'�8�V�M�2�(C"�DT(����G nRM���%��ǽ������������I�
���
���4�heP�"<��{�
����Wp�~f
n�po|>p�h��:���yY�?��<
-֮�R�4/*_�].�sK�gd�,Yg��.�߰jA���{UTi9,S\��g;

*)
� �kP���
*m�+̱uae�,��`r��<�9�"]ԓ�o��2]�i�
+7Rիil��j[�,�m 'Y���W8O,N�	�A��OۊY����
��D�g��7:���{�����j*6�τllK(9�Ű��Zk�&g
w��4O�
NJ
����2��0۸�&�n0��x�W��V�߹�
�R��v��p��w�
�������޺ݥ��b_ʤ�KPj�зk�z
���}5,���ArU����;�!$b"����C�9�[��l�K;4`�uU/�E���"]&��f���MI|w���1�λ>��X� (��l�9��װaY��~*��h=�C�� l�(� �$_��c6�W-��#�n,X�C�	�
8�������,/a�z"4#Lj��Ϡ��7�_;X���/7l�l���5s�f
a�.!���j�t�2�^���FL�E���yi��9߯�z at tQ�n=�G��̄Q �,La2�l�b�:���0ĦK�t�g��y��پ�?�50(�����rW�]f;L�E����ޅ@��P�;��l��"�A�ۢ9���SRlAAm
@��P���!�]������J�3NU��9�+_G�s!XH�q>qD`��;�rC��G�g)u��
4Ϛ��+�� ܳ���?]���}��F���u
����1�q.�Ǧő' ��8�)rĽ�-��'�A
�Gv��e�m6߻�X����^�{�ȵ�|��éƻ�b�q%�i��"��M�p�ؾ�F��.��쒷�(��E���\G�U��r��-% �
��:�BtۄO=��K�{��
|Ϊՠ����PJ��є�
�
;M��е�ҔO�)}(c*]�|��vi���l�`��n�v�B�y�61e����CLa<b�׸���ðM��κ)��;�Pq���v/Hv�K?��T�K믔�S)�
�!Lk-�)r���ߓE��k~�є(��H�#�ꈱb�nlNb��
!C��DBz9�N�R
+Ǯ�߉
w��)��d
�V��p�
+e��
+��B�èPjp��1
=I=g�3���_����	����Sz�㇛�zX��D�e+j�̫bpн"�^6 �cq�h�Q�3����$�4i�/o!�j�J4�P����R���q@�N���Ex��DLݳ�f?
��8n�T=�OWM[l���
�
�k�1�cb���
��վL�X�~>�&#�[�
�p���^����m��u���t���@L%�Zȭ+�nx@��XC���yY�a^�k��CMWv����q�^���6-m�k�zvȥ)4��z_�@��.7`)��+��oi��DY@���O�x
�F���5�35�(�!͌w[��~
+�(��I��@70�����Ži��t�A,�
9��y��qz?�����: ��pH�X@e&�I� �Qֱ��~D�Z7k

��ן�Q�,u��>�(��
i{�@��mnk��~	䀰(���Ӹ���3ϟ��]�<����U��
�틖�o���KY��
��d^�f�A��)���kB)B%=��Q�-k��/i̭�;<���׫��J�e�݃�N�d�_���-���v8N�يT��>	�׳�af/B��V?�O�>
� ��J�{�|u?��-�L�#y=�齼
TSi����_�-:�E%�z��׫���	!����]_�U{;f�-Q�{8��L���^Iٴ���B��O��L�͡}
 ��)=���A� FgP� �P�Ȃ�t2�
-
eN��?C*y
pZ�D�@�-:_���b"$?�R�
>�+����	�+��|����.
�)&Q
"��Pq��Ȧ�BX�C(&[
+ɮtb-�Fe��\7��CiA����T��B��A?�Y�ۃ���~/��K��
�P3����@�y��瘈,�	!&
+�l��X����9�0b�V��@�\��q����2
��{�D�S�� 	S�W���_�?�g��rhm���ګ��W�
�l���/%�h��P�P�@���寜��>S>�'$~�xN^��XJ��3��	�h
+endstream
+endobj
+1099 0 obj <<
+/Type /Page
+/Contents 1100 0 R
+/Resources 1098 0 R
+/MediaBox [0 0 612 792]
+/Parent 1070 0 R
+/Annots [ 1097 0 R ]
+>> endobj
+1097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.76 523.165 292.231 535.12]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1101 0 obj <<
+/D [1099 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1102 0 obj <<
+/D [1099 0 R /XYZ 86.4 701.138 null]
+>> endobj
+142 0 obj <<
+/D [1099 0 R /XYZ 86.4 462.179 null]
+>> endobj
+1103 0 obj <<
+/D [1099 0 R /XYZ 86.4 406.876 null]
+>> endobj
+1104 0 obj <<
+/D [1099 0 R /XYZ 86.4 183.149 null]
+>> endobj
+1098 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R /F13 757 0 R /F7 753 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1107 0 obj <<
+/Length 2008      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs�D��W�(S�齥�8'PI`�8�c9���&˿����F��maH*�h$�����=wh�&���G?^
}���INr�urq�d����h�����u*��	7�髺��9>�L�?=<}boDz�X������r9�&ES-���/��]
�}Ġ�&�ՠH&u2�
���&Wx�"�D�Y�ޭ�%R���49?�����2۲�IC 6�9#�ho��Ov-`Z*�[)�2B&��=J�!,�җ�^�(�Q���!�"����������w?m#�T�p�/nJ��#�S"Mޮ���]/��D�1��
+�E�؉Y9�vE��2ޚ�D6f颚�Ҕ6�H���)�Ь��
P,
>�|#�t"�;a�$���DKvH�M���dD)��Ұ��6��6�"�g������>Q������f7��M�&�j�S���$�a]5�;��e
w�fR�!���hʺ�_h��tv¯��b=m�ͻc��b�.7)��L�ӓ����|(n��ta��ET��qN��=VsB���,'&C��E
+)6Yv^6/�g�ًbR??��d
+���
�@@ S�.���r֝'����F��t:Tf�m<������Q\�?��n$����6+#)��U����XaX�	�շ�([���@
>�	!>���'�ji�e7��,�6����|Ү�+����.֟,�1�!�6ʵ��rR�A�,k��iUýjv�M�>f�̖M]�]�쿗��_���|],���]!E�B�4*��#�
+���˪�[�R�*h�\�������;%xW���-�2�C$������+���M�y� �
W�hs_a�89A�2D�X�~A�pF�����.uP=��
,������ 8u{\���=Y�Y�J?��VwP��VA;��B� ԍ0��(%x4��$=2S�
ړ��dF�k�-�+_U��-`����8��߇
+��7��i�ۆ�3��4(�<-z�GF�mm����{�=�j'V��O`삡,��m
ORl�]bW͛
�ڍ�mU�����A
��
�]�㊢�崸Do𵋯a�N��Y�f_�;��3By\���z5��
(�A�}_tSZd�Y4nvA"p���:�:���}��e�m��2�ڡ� v��&�9�D
�A�
+�H$��)@ftJ�_��>;?�m�B�m>�
t���z��&^�!
6MZ�6
��^O&e]_���P�u�
�$�Js4/fLn��tx1;�/��4��H����h�b�ė����{�
3����J�
���ſ>�(��E)l��4I#�|Q�`c�|QZ��.x���'��%��
Ft#jX at 7ÄQR�
fF'�!�Q���o�~cn�յ�J���ӔT�R'�a�17ÔEOYe�ʗNc	b�4B�gYy�����K�� I�p;�W��T�����A��e'�/�C2�b�r�
v5��%
�P��i
b�`�h�r�lb�P/��ń�7�v�w�
�<4����b:YO[��༗�r�_�>�2�s>�D��9�J�F }U��a}� x�$mE�*�J��-�f��v�d�O���(��gJ��
+g���\���S�1�L
)}T�6�-k����X79Q��YQ�S�1��)
bmUOԊd⾴Mj�
���>������9_���Y�
+df�S>΁�vN�~,&o�)���!��nA7���_
�a��˳�O�B��5�*����>�|��
+���Kk˧�X��[�F
�5A4�v��V�t6%��z?S���Vq���]���/,~��i5/�XM��
r��%lʒ�<��f�"ue�=q�C���Kg�G��JނPl�д=��*����Qg�j���iD��r���
��Oh
S���
�YQ����<�5�!&�I���S�D��6�u�Q�*~
6������lL+�ʴn��.�c�+|��;F��8'wV��O�,P�G�$����FP����G�w���.|N���2ҝx��Z�dTv �AeH�H� ��
�8� #<7��~����o^�Q?Jz�����i
+endstream
+endobj
+1106 0 obj <<
+/Type /Page
+/Contents 1107 0 R
+/Resources 1105 0 R
+/MediaBox [0 0 612 792]
+/Parent 1070 0 R
+>> endobj
+1108 0 obj <<
+/D [1106 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1109 0 obj <<
+/D [1106 0 R /XYZ 86.4 637.991 null]
+>> endobj
+1110 0 obj <<
+/D [1106 0 R /XYZ 86.4 433.414 null]
+>> endobj
+1111 0 obj <<
+/D [1106 0 R /XYZ 86.4 240.791 null]
+>> endobj
+1105 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1114 0 obj <<
+/Length 2583      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs����W�H&f��%ɤʱ=)O�Nbɕ���E�P� �r~}�C7 at l�(
�TR>l4��o�^��nft����^]��G�g�8���j;��ș�h�fW��ǹ$j�V�?�Q�\���Œ�W���/oɺ��$_,���ΥZ|������ů
����*b���o/>~��
��iF�pvv_I�������4�٥C)����aL͎�Z�s3m-a֌рݜP���V�6m��1Œ��z���eT����2Ze��߷��/���
�=^��-�5�Y�[������k�U^�x�({���4#�+xS���W7���j������T�x��D0E
�p��4�	[��?�,���t��n�y��y�݂�O
ݚ$�\p"�ƒBm���Q���;t��og�`e6��APp���]
��q���I�i���	�կ�;�3���ϔ�(�\�wQ��2���E��C���4�o�,|�ߊ��
��{$GA��w(Z 
�Ix`ĩ`���&��bwKږX��v�~����p%
��[���AaZ*�_ Y1���/L�B�n��v���hS:��Q
b���|N�w����W���7�1H�B��1��7

��<Z|��V�b�n(�G�-8��<�)k��m�}�d��������2��x
+�2x�:��'VF؈�$�y���t����]�WD�����8����01�Ri8X�1�+!��AA �Kj+�W�?�� ��8닀���AKF��(#i��u^�����!N�0���� F� �������2��]�j��`
3ʠʪv|Ӂ�|^(�Q7*J}&�]٩_tcPXB�m���JCS{�nC(`���`!b�8M���")bB���0�sxi�J��Q�@P+ڶ�L:�)
���Y
Iqg<��/^���

FED�u���e�[��pp�\�r�
+��cp����u����~RI
��Է̴�Ǹ�� ��I
��q���Wo�ZAd�)�Bw��k3}��͛�"����y6}���#��X��n�����Zp]�1m-B�섒#�ա:T�ʰH����ae��|��\\�R�Ӻ�K�(�f*��=��&ڮ����N���T�쎰}p���� �S@�t�D( M`jz�(*��Zgߢ^����l���1L�h):���sp�� ��GUr��tl� �� cf
+L�R�jr��H����Ga
Ƕ��à�ta
�m�iX�\����!y\ğ�~ʿ�f�܇6���k���l��4��E�˻��18��mwEh�Qpþ=���NQ�p�b)�l�lB��uS
2�|��
Ո����[�����h��!���z��r���mݯֆ-���MZQ"x:��X�'�}�M�_�`���
�!�;���$1�n�)j܍=@2D�A�
�|{@"
f�)�Rb���G�yS�x�@�܏�$�g��0�;�VFCz��X at JS~&��i�$-�`H�LL�I�!��B	�
$j�V�@v$�Ð�����G�^@D�rRHy�ᬇ=l�������LJ�I]�Q�;���H��Z��Y�� \�����>I�6Y3��
,x���3gW�
��,$5�Ėi��!��~!�>9�B��u����4q��Ѕ�!
�]<�M�p����鑑�@x/�f����j�B���=�s��J�ȉ⼾�$PT!�3E�ﱛ��@0�l����X6j��Pw�E�*�'Ũ%R�N]ڦu�5'��\���{Qܸ^��t
��Zޥ" [...]
�y����8
�z�~�SF���gO�]�h�|vq�z�7��A�.�WY�Bu���%t��}����Β�Eo���!�ϐb5�c
+�ݡ�����yו��nG�n�آ�7����Q+4���/#��YcO��Ĵh�*�T7��-c�Y�OM�ʒi8�
Z���V�������DW�P��G̛���x��,�ڱ�sϢ��k� �z��i6t��ا-���sۨ2f���&Sg^ݎ��@�O.3r�U��q�3@����s#����]z�o��c/�(���'jx_��
�Y��8�_���jk+[Z�i���[�L�:��K=�=󟵼���:�/��X���bM�K]�^����t���Q���
�%������ἢc/�#1�SKO��=��am3D��y��:�Vy\��iV��j�Y5t�ø�� � r��u�׀R~r�&CN���b�6I	 ��9�<g��e��r�
Iuƌs�a �d��N8��B5�l���6�4�(>ɿ�������,�o�X>j�yj.B]̓���ժ,#�
jxX��p�
﫡�~_��/�lྪ�k�-��E��M+C_�+1��8
�** �aDm��������j�r2t�A�LƂ
+endstream
+endobj
+1113 0 obj <<
+/Type /Page
+/Contents 1114 0 R
+/Resources 1112 0 R
+/MediaBox [0 0 612 792]
+/Parent 1119 0 R
+>> endobj
+1115 0 obj <<
+/D [1113 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1116 0 obj <<
+/D [1113 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1117 0 obj <<
+/D [1113 0 R /XYZ 86.4 516.13 null]
+>> endobj
+146 0 obj <<
+/D [1113 0 R /XYZ 86.4 322.516 null]
+>> endobj
+1118 0 obj <<
+/D [1113 0 R /XYZ 86.4 274.696 null]
+>> endobj
+1112 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F7 753 0 R /F10 754 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1124 0 obj <<
+/Length 3914      
+/Filter /FlateDecode
+>>
+stream
+x��[Iw����W�H卐�Ћ��0��
o������	JȐ��3�}�z��&DY�O�@��]]]�W�E��]��W�__��K.&1����f�e"��Dr��^/�/���bJ�|�SS���W\���o.9[����T�k}�_��o�U�U�\�r�������0#Y�0C�h!����_�b
o�Y����d�������v����S<
��D�ln
�Y�	�F����Z'T��1�7K��~�6��l3��!��	U�1��7�������2[����Ǫj����!K�I
+$>��	;�V���)� CQ�SI�*M$s�y�m����Ʉ�&������l3����˿��1v�LRR��C�pNASK��fnQ<�\wK:�
�E��|��]�����ɒ��]1�]Q �x�x�7���G�
}�xE����
4ƈ�fI��*t��DI��_s�2��2me��.��f�78'_
��%�l���ܫO�L-aD�}7��T;Oq]�U/�ֽ���� 
 ɢ����4uSە]qΗ����2��Ƶ�^����2w�://�[
�a�}p=�k�7k��w���q����۪���u*ܐ�mmMN2ޔ+/��-|U��w��f��$َ�+�"!T�I�
q����
�H��댨�0I���S��V"��Xk��9�1P=��`8�x�v�
+,��VT��١�Х(��w��-��X�T�nJXmU{��:�\���˘L
1���v_{��x���l�ϧښ�{�Ǿ��
נ�zd���D�Đ}�I-������Kl�8_��l#�3f����ې��;e����2 T��:K4#��p�<�p������O�_��݌|�4���mZe�p�u��m�n��˻����t��~�ʛf��,P���,�`�*`h�'�)�Sz>�P2�{���G&�
�=ˤ87�I����ws�'M
�ý9�i0OB�Y�ɄI�����`)���x�~N�$�v��nV�$�c�a�ЁM6�����¢ۭ�U�7^����
7��w�}*��"еD׎7u�[��N���S[X���UU�
��m�,\���4���[���Q�+�[����ox��0k���ki�2O�-7,�#��Q3z	�����������At��5%
�b����'K��s�,�`)�b�'sdh`���u-��t�ķm���V'�W���W�
>!��G�[� 6��
ظo
+?�`�9�l���u30 ��g/��+Dψ��b{I�����#,@:xmw�H�:���b�m��ɋ�B�M�.D�� ��a��@.;�\XV	[���g*���L����
3D��BЁ47m~���"�����T���L�%�
+c ���JJ���o�
+�����*+]�]��,��է����;�8h�_���߷�v�ٻ�'q��>��3�<x7X�"Mi|�!S�b�X^r�F�
G\V۬���tY�[7�o�� k�
⬈�c��29�
 �'��,<l��b�}��o><
N~k Ɛ58O��u���f�6b3BeK�M���l�
l *��y(���md�ƃ!n
uK�O;�v���oz�	�b����Z�˜A���n,T�I
\rm
P�n����0r�A��ah[m?�֥ �;X����{PG�
ؖƵt.��� 
@O�}Wy�&$ř:�E�>X��+φ�����p�	���Սc*#K �{*��z
B���0,
��۬i}p
�����Ʈ��l�6�?D�o�	,dE�mic�P�G
#REG*��
+�
%�2�`�T�0�=���
+��\<n�҄N���J�;��r�`�NǑ=�sJ����LGj�u�PL$
ɎM��Z9���.`�v�
I�$H�|� ��C��La

$�!�c�L� ��i�)��C�w��g�.�b�?a��yKA�7���'.��f*1�0�N*�~^�"�G�C��‘���][��s�T�ҿ#�i
�~6�)z�2�:�������K�<
��m�k^��ShU�Ω|���4Ia'$
i̻��A�0`��n�L��Z�G��7�t�Ѧ{w����Y;C�ґ����䠼�
��y�����P.hI�K¦���w[}����㍣1f�!�R��6
����t�����eK�Ѓ��N^H)=���˪�*���׻�aH��ޠ�j�lv���AJ�����n��;d��'�?���a���Wn��gǾ�Lܣ�����@b��#�0Q�>ٚ����kC }L�0�ۋ�Cl�~
� �
�鱧�*�
�y8B�#i�H7��(��͊{*Md�1v�Mn61%�h����h���}@��$cL��O��gBH,M�0�1�.j�,���GfS�]�gc"�4&BNW7��Q�b~�('�h� {�!�6�B���1!� $�~����A�u^���0�c��}]�
�7F$$UcCp�}� �`�g.���/v_G%�O��#�u�� ����|S���t@&�s-�� ���N�8S	�9��8	����N�ΐ`��Ñv�(��f<�o�>���>�?��C������	��bNh~�D8
+2�z��>���ӏ*{,�*^��.����Bw(�y���i��t"6�g1n*��.��]�3�i����������6bP���W-,�{�	>#$Q`�p�Pp��|��v���~�2�c^V��]G§X"LA���H�FGv�j�-

��l�����10�͈�8
0`��QqCm���ʁ�V���~A�9�4E�>^; [���KI Ri'=�������2:1K��$�9ˢa(&��8Ǥ�`4�[p�U�:��*N��`թ�s^�B ��g��^p���2j�Pk�Pg����D���_����gO�k8��T�QiԲ
@bx���68_8�5�s
�i��},׏�jtd^F�p4ăNG�~�#��x/
�t�-�
���TQ��/�;�?
��>�<"��ڷG1'F�e�R �C���"�g�4�p�o����ɂ;q����EgE6�h(1�{��Q���g�����}��.*\^��xz�}�f�5�,�Q
�vL�N [...]
��sH!��8A
+�1���Ѥo����Yq�D��a�8Z�F�Y�(q�
+O�&奇%n@(��l�rzת��D`����+GS.rg*��]g�p?s\�@*��^�u�"�+yӃ�k�+"�ъN���LE�(����9D�dr*����&Z�(ma�h��m*��.v���
�ċ�I����~�gB�)̤
K;"\1����)�CY��`h��yĤX�����5���֫�ك���2$�Љ��`�� ������
�i��m�lں�P�2O���$�	5��#�
91K���N7�m[���
��
�I�F�ʆg:�2���m`*Q�2�k�~��ӎ��5���pl.}J{<�Yr5��j�s�bM��+�D�6�-_zh�}�$���P���
�ZC��F�����
�0:���=�TB�u)Y���}��,?p�#y�F�c
��
+�08
�� 
)i׋-
+����fP��O�]X�ֺ�;�(cG��ؿ�<��2!�D*�#ݮ�W���ݭmфW��Vt��ێ�𥻩�
l�ڹ)��v�H �����1_c��-y_F�%4FL���ٿoqe���]ن�h� 

A���4�/܅���'���7�aU�ùu�	"��-��z<+R�վ�K���[��
+#\�ey�s�L_�8X�O+޹
+*<������!@$���e0c
+�C�&�k��ʦ^mSkߩ���K[��R�r���v��
�%����f�J��
7f+ToXJ,�h"��f&�
,CX��)��c��
u%D3z0
��Z������9	��Y�w����BW'J��*a-W
h��Ue�ݠ憼����=���GR_i��Z���^�쀻{�ٵ�,�U6E���	�;[�
;z��?�W�S
+endstream
+endobj
+1123 0 obj <<
+/Type /Page
+/Contents 1124 0 R
+/Resources 1122 0 R
+/MediaBox [0 0 612 792]
+/Parent 1119 0 R
+/Annots [ 1120 0 R 1121 0 R ]
+>> endobj
+1120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [492.502 167.54 522.722 179.496]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.228 98.025 126.95 108.874]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.3) >>
+>> endobj
+1125 0 obj <<
+/D [1123 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1126 0 obj <<
+/D [1123 0 R /XYZ 86.4 701.138 null]
+>> endobj
+150 0 obj <<
+/D [1123 0 R /XYZ 86.4 515.073 null]
+>> endobj
+1127 0 obj <<
+/D [1123 0 R /XYZ 86.4 433.327 null]
+>> endobj
+154 0 obj <<
+/D [1123 0 R /XYZ 86.4 143.314 null]
+>> endobj
+1122 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F10 754 0 R /F38 509 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1131 0 obj <<
+/Length 3311      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�Em�	�=�+���dWm�dv	Iؐ�
����~��o��VN%9�����_�(Z�,�ŷg��<��i1��0���3L-����|q�Y�]*��W����UZ���v{����j�R��>_�Y�W�+�ʞ�z���חg��8,-x3�fN��zw���h��/�/"&c����v
%c&�i�xs�����M7ޥ�9���.7ٻ�˴��ܖ]f�ݾ�������o��~���MZ�N����\��m��6���I���+��),o�Y��
5;_�H//oS�Z&0���7�i4���C�C�yV�e�y^��]E���WM��,���4��e�[�Բ�k��
��-��(wI���8�n������Wǝ6��*�H�~ �2�͋|��iR�~��]�GR�oꭥ-ΐ��x<�K<&����H5v�����WJ��sm��v��T��(�C}���2�oRj��-�Ŏ^�H���
��*E���C�Z2�M�����-��4U��Z�t�e�o�Z'UJM�
+lI�u�����XI	���PZQk�Ur��
��
h4r���J�Շ�
ńV��
?x��\���\��M
~��5V:�-�e�u�4���[�
FD�	c��)pl��Óalқ2EIA����^320��U_a�*
�
rU�&�b3Ȩh�����dۛ�[+��^�����1�%u��}�.�2Ԍx
��(�M�~��6��"��N�}�U�A�i_��f�~�q�~Lvw��b�ʅd�=�ʕ�M�5�W�`�k:��5�&��U����f�&yF�28u+���p�d�ރ�h� D�]����
��`�6)oPb�\�6sz�PSJ�t�ɛ��SQ���<
+�
y�O�

+[����.DS �C*�"�Z
lC
8�Όi�
 B6{s@�pD�t�����A�CpW�'���*|�|��N��g$�#�r� f�]BB��Cp�
%`�{��Q=J�
tj=:{�`$��
�P�iI
�1p��叉�/ /�4ZI��N�m_�z4ǯ�Gk�9
N�m���Dm�1+[��x b�6^u &Uڢ5����-�a�Z���
fi�
=y���UMLJ�
k
+��: ��+ at N��n�]B`GJ�
l=`��;�|
��v��*6�Y/�C: f
_�
IE
:ˣ�{|)�ߪ�d�RS���g%~A�V~�^���%M:u�T

P�ٺ
+;j�p�#��>l)�X{%��&�|�kOJ�-��
q!��-�
�#%x����|�y��^�K/��hUt��>��MwQl���c�F߮�u]x�
Xx?)=|£��ܢHo�*b1���\H�a6���fZ�>]�@�H,a�>Z����J�
�z at HP�G���N,��P
�zn�Iʔ
z��S�i?�%��;S��y�n�����6Dl���Ån36�
3�?n 8���c�D�U�=@�x|�YTEM	m
+�5�)�C>�Ɛ����I��0��P
At>�Pڣ&�d���`��j ��C�J7
y��7e���� ���Z�C�i
�Z ?�4��*��,�نBP�c�[%
��<��:̈́l���x
�
�\ul�
�݅|^<�.f���
h�?�w_}�mZ���G�����
6���������p<�W�
�2^%���ѹ
g�Eo��&`����3��!�d*	�2(�׎�QQ at b(]{��&������ ���
�m���}�%�G�z9:� ������f?�W�H��
�.ނ-
���h�l21�	o�\&��ږ|�i�/=	m
+i�3��IQM�n^��MZ+UK"��×�>U�ߴbCY �	f�
�����;e�'�ج�p<^����E2~��pcw�2
����5�a�a��)W��(Û�ߧ�p\'z��
���ё�=�<h6���,��5r�k�1(X�lđ�0˃輿

�$�m�<`L��ӣ(Z�S�y��w^CPl����?�k�Լ�ݓ��"�l��O������UH��MĚ�%�:ŽaE���:$]e��P����t�����t��1��(ꀽ<4b�'@O"�!r�}����Q�|SB�N;�Gˌ쒗9�q�Ļ���V��9�Q�HC��!p
Ad.|��S 2L�r���W��~��
h�BD�B�
$�T�|�#ۤW��'AB���A�)�Ӫ��o�)��>�� ��Ѝ��Rgp|�)D�SY
l�ǯ�Y�I��?Ţ@#
������c1T�8�}m͔K#���(*f2,��S
�f���L2ˆ��;�����i6����+9L��CY1���E�Vc�ƺ�w��AZ��ޥA�O0� ^m�]�  VP�4
G����z�m��|�hJY�Ra�|�v!n�+���hF�G)�MSK*g!U2����G�����6������\I��斗�u>��R�����eY�Y���/(� �Wi#m՗%��i��1hͽ�	v����m��"�
IJ����+�&�zOШI�����\]�A�?}Y�	�a6�p�g��K��yF�p��ݶ���b���II�7�b
���W���$��R��>�o^�`h �ܕ,��h����O͡��F�O	^̈3�����S#��h;n�5���~:f7�O���H�
d�tE�0��`j�_��~��Y�L�G���PW
0��+�"�
����� p�C�Oؚ����X�鶆�b��x�a\�*|y�<`3�ә�>�B��v�*������g�Ҝ�
�q��� -���mN��Y�*~�8�c�����<���y
��'��;�P�.������'�7%)%ơz?B�Q�'fFT�֯����F���o �9_
P�=EC�1E?m�?���������
���m�	�����TS�>l2t32��6�d�/>������N�1�plÙ�m����mZ�1UᘈԱH���Q�Fy�fKJ1�<�x@=_Ξ��g2p1��Vf> ��>[�`�^$Q��$����`�l�2vm	}�:��Ϣ���uU����MiP���_n���)�C�ȵE�В��5�4K�d;v�R� d��w��sIQ�dỎP�,�9��L�QM��+�<
�nV4��51-ˋ�?p�8p��TÕ�����Lt��βw�8^cBl���4 �=�樀�ţ�ަjX*HN��
Bw&��������g�r����?��FK3t�9Ma_"�(�g���:F����
f|.I��|��w{�,�����[2��S輅 �L�w2���X�ie�L$�=��P
��u�h�
�c�;������۩�©�Qm��L�
���TM
+endstream
+endobj
+1130 0 obj <<
+/Type /Page
+/Contents 1131 0 R
+/Resources 1129 0 R
+/MediaBox [0 0 612 792]
+/Parent 1119 0 R
+/Annots [ 1128 0 R ]
+>> endobj
+1128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.306 264.839 298.777 276.794]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+1132 0 obj <<
+/D [1130 0 R /XYZ 86.4 726.045 null]
+>> endobj
+158 0 obj <<
+/D [1130 0 R /XYZ 86.4 561.404 null]
+>> endobj
+1133 0 obj <<
+/D [1130 0 R /XYZ 86.4 442.388 null]
+>> endobj
+1129 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F11 691 0 R /F14 694 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1136 0 obj <<
+/Length 2737      
+/Filter /FlateDecode
+>>
+stream
+x��\Ms�8��W�(Wm0�'��e�8�+3yk�s�%�fE�$�����` �ř�$Y
����FwN�x^D�W??\�tK�"A� b���EL$(^<l�/��~Cb���U��~C%[޽��d�V}�˧��?�џ�
�|��y����x�x�����W~c���o�H2�X�~�#Zl����D.�5���&����bu���� ����@Z`�Q"�B0�8�چ�k��>n3 H�!���7���/�2ݪ��eq��xy�+���,vʀ�n��f�'������5!�T?؇�0��c�$PP��l����(�q�R�o)Жrk���t��	"�F߭y����=u�E�,�J���8F2�;��5E$�Ck��%��%\w�EM`-�$X�Xb�n�D?֮�R.���,0� �c܇q{���q�V`t���]�ᘡ��	@��F1�L
�|�>���d1���|X9�-wi���T����"+�	��5+��"jx"4��s؈ l��*��I\œ'J!7H��l$ [...]
+1C��?<�����@z�o�]��m�Y�
�Zf������
xj��i֧!��nA�H��U₩�!ރ!������B "����,-��M��������l)��¶���>߯ �J�$�+�͈�
�]��d[4�g�&��,
C~�U��>ͷ*,�Q?�_�Z?�*�@�x�nQz���,�̀Z�,�e�ة��,���4��`
�XT�X�=� ���ܴ�p�2�Io�eZ4}X���}�VF�&�A�
�~`?�6b��=@��O�
��e]�Ҕ��:�ÉúNQ�١�v�N�:�
j����<�������
{@�i��"�hnT��Gu�� K��x
T�*\�Dr\�i��� Cw��Tu��o�Z����ܖ�r#�&����c�
~=lC��)}��w�a���PR
+����tB�	���w�]��v���y���R��Z��]i��iƧA�3ncԌk�w�q�
�`�
��D�,���9��9��n+h�nv�6���3���
��
`��p .�q�"<��3	���;�y�dL�f�f{#`�o��ؘ�
�a[��F����!��q��m��7Ͱ�U��
+N�9��]�n�Z}�҆�c�%X�bu���f�_ۤ�0���/
�+
�Gxa�DB��r|~����F�.L����mV���Ѧ�>C
!��|V?�6XM�C�]��Vc=�z0
�uF
>�8�u&PL��mо�y^��/]�Хvl�P#�Y�
�˴�ՙ��Pi�~=l3�
`�o��j�p�#����86N�����v���J���tU�C
OC��؆g8���05�3�s0
�g� B��yB����?���ױ�nl;�
i��	�dG�4�~�m�]�����fFw i��`(.�Q�����q����#]��H	�d��F��� � ��1{�)�_GFA�p
h�%�D ��`�Qo�2�:��P����xU���S�U�
���D�^�{85񟋢��?���R-)����T
+x,>d
-X�ڿ��P?:����O�
���#'� \�c�泰sEm�OwY�

�
�-{��I��l�y�u_����|ݶ��4-ٿ"�Ӂ�s�5~ElsL84Pn������p^]
bS�4���Շ6�&=����#�l!������
�\7���H�
��V¾qٍ�*�y�)�I�㳡�G���嗺4o�����W��O�wzu��~N�
�/��iY8�U��slL�D��9�M
����{�N�gOS<
��b� �/ϡ��w7����ˇ���4I.�*
�� �D]�����~��G�:�����C���]�E����<{*�HP�=���s��Zw�����?����Fn�n[�w(
�# �J6Jf�?�Hħ*ʏ�x�SS�dz�
����i�D�;�!k���1��4������D&�N
+���7�y�U�?��1�
�u!�
>S���kt�S��f�W��a�@�7��a�
+�
�Y*�(&Y�wT����fm�Cw����i��"��;���P �+   d�
I�d�5��&�9�&�6Y�H��D�m',����8�R�x��Zu�PW
+��J�p`^�ą��	�A�Y�;�a�#6�f<
�ߧm��ӫ��8�K6��\�r�NH�0K��l?
�_}'��>���*|�y

�
w3���Y��6���|��+
�.���6	����6�Z
���̬~�{M���۫ri�����\��kh��Eda)�,}Nb��O�'���|�ry�7w���� \�c��y�XF@
>u��:D4'����D`~�md�����am8�dK�y|\H�cqɽ�Z��x�
]���z���y��n'Z�W�6���Ƕ�H\9���"�#�)�?�Y78nK�v�0ZpND�܆٧�W�8Rs�#q)��7�� ���wU��� �ٶ�l��	���P\�UeK��pJP�Gک7�Khd�%�������~v����ұ�Z8W	UΊy
�D(��Ϝ}������9cЉ&��m�+6>
��qD�<�I$���x"t�
��-�;�p
�	��d�Qt"�o�?�/�f�W�K�s��`$>]"��4z�����Z�
+endstream
+endobj
+1135 0 obj <<
+/Type /Page
+/Contents 1136 0 R
+/Resources 1134 0 R
+/MediaBox [0 0 612 792]
+/Parent 1119 0 R
+>> endobj
+1137 0 obj <<
+/D [1135 0 R /XYZ 86.4 726.045 null]
+>> endobj
+613 0 obj <<
+/D [1135 0 R /XYZ 203.31 656.491 null]
+>> endobj
+1134 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1140 0 obj <<
+/Length 2621      
+/Filter /FlateDecode
+>>
+stream
+x��ZK������)�:&<�GR98��KVU�+_d ��2l P��}�g  � �e%�e ӏ������>"��W����9W�M�b*����JD��M���*z
�D^/���:��4ϯ4N����n[,�uY��
f�0��׿��x����WĐ�����-7W�#�
+����[�s�6��6ap�G7W��"}5MOK*t�E�҄j�}��U���9���`�$&r�^�$R���8�Bd����ҏZ�Q}�:�\G�1`� <n
2�qq�L����7�
g�P���k7������V����n\Y;��hM�v
��5I���+\�9?�r����w �k�B��%[6e��.a,k��H�7o��ܵ/�~�	�H۽U��&%@+N4�14j(�ʄ	=4
+�z���F-8Ęd
��atZ� �9�ٗ+�ƹ�Lz���y� 
:��]CQO{�5LڄX)m��	�a��r7���>^+
��{6�
���cYL�+�p��x�*]�,��.�"�&�N�`����*�L��ϯ}�/�B�'!^���t�7���q�o�3��	5�I�.7� !'�
��t���	��߭�?uQ�;
t\6�*�պ�wC-���)��&f;O�'DS�EG��@/�}�*]�@
7u��F9E�'3!����,�=��U3���p٭��}s�KS�Y�˩��&R��FL���3/#ϊ���7i�����hCV�۪��?����7����2�F�&E+
���M,"D�.A��f��������Q:QC��
R�ҟ3��D�
+�(�@�
��\O�	@"4���4���@aU� 6�" $������1�@�B�L�![���al�
�+A_�.F�Ϛ���M�=���S��ޟ-|l?���8������'�@L�so��� XSwyz��L�ῡ�8�W�����2�b�T��a�
+C#6��+�ϟ *�"�#��J�X��Y���e�~D�7x5z
A�h|�@��N%*CmDF2�
��#oU�l���B�V��s�m�6�
����|
 ��-������kDS���m��9�\aC��� �
 8��u�{e*�p雲q��c��]Zuun��E��������\Ɵ��qG�H�����n���)�H�Ji��L�1#y�9ND
`���m	���j4����ѭ~�-wX��G�

������X�N�f�q;֖�{?�<��{2!
\
t{Aq5B��u�{���Y���"�Ӻh&8
 ������H�<�q�A�G0����2�;�'�Ņ��V�/M��q�0��h��#��
���$$�����Gh�Q�f �G-�J�
�
 ‡����̓�Q;��[�u
֤Vy�{8�$�S>D@�� 4��ŗ��͜�Bo^}����@�	��W�l�+D-����|�m�-��j�?�".��C��!Zo��o�m�<dn�5��
+1T�u�u�@/	
{��T������OB!)��
+tHq;��Ջs�M��՚h����v�0A
"�%�`�[��V��4J.��t׎N�
�h���{���^��c(����d��Z���T^`f+v�M
S���*:�j?g���i>E�
�@��U{& ���yB/��)�.K�[7
��pR�Hȧ��E�I���I}�U�Y=�*� Z/��������h}?VF
3O�Q{�
��
Ui�n���O>��W���X�pߢ}��V�m�U_��UV�W[�݇%P�
+bH糖`�pƺ�њ����ж@��KT��[���?���ܛ�/�tV|
�~0_'t�C����.B�L�_��v[+�����3�
��3o� ޮO �\҄�
0iϿ��y;;�u
����`*S
��x�@��������+>
��ۂ�����e�d�����_�6
�eJ�����+��TaV4�Vx'/bt(c�9��a��^X�b��^LQ6�"u�P�r����Mw�
��IW��q�i�8�S�!);��T��/t��"_Y�~�+��!�*[��j������[���١
��p.�)C���M�<Q�^༅��
��uqF�@PL��0%��j�=��	v�+�;5\Xiq�Nm����D�^��O�|��|hM�]��[m�tl�-,�����;60sp�{ rFYLz�cv2 �;�
�8����?�w������~� G�/#�z(���<�����?���pF�t8���M��"4�J���A�fN�Z��yӇ�ZrDw<�A�=3�
������}�;O�?��=Y@�.��`�r�?�|���8�+u	�����s8C!M�/�:��2uB�w	�����M��h������
�*�t�^�_��3̟"7��8�Tȳ#����n��y���I������Z�=��nIz�'�?Z��r)��w�a����W@�$�O��f[��?k�*�8?�btJÏ��0����cfL�!�v�#��jڏ��b�#,�}�� [...]
�o����C�2�/���x�mUe�c��ѧ@����'�J��I�< r���?�)�F�?d�
R�1�K���"�'��g���K2����k9
+endstream
+endobj
+1139 0 obj <<
+/Type /Page
+/Contents 1140 0 R
+/Resources 1138 0 R
+/MediaBox [0 0 612 792]
+/Parent 1119 0 R
+>> endobj
+1141 0 obj <<
+/D [1139 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1142 0 obj <<
+/D [1139 0 R /XYZ 86.4 621.145 null]
+>> endobj
+1143 0 obj <<
+/D [1139 0 R /XYZ 86.4 467.362 null]
+>> endobj
+1144 0 obj <<
+/D [1139 0 R /XYZ 86.4 288.996 null]
+>> endobj
+1145 0 obj <<
+/D [1139 0 R /XYZ 86.4 137.151 null]
+>> endobj
+1138 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F11 691 0 R /F10 754 0 R /F48 609 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1148 0 obj <<
+/Length 1962      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�6��W�ԡ:5,����u
�N�Nk��ȴ��,��4��]�LP%[��
�$��}|��iv��������^r�Yb���<3��L�%����,{�K:8m$��-�Ӌ�!7"�|�!?r7<?���걿?����G�r<�.O;xqz��C�4c��$F�ltu��#���/�e�pk��վ�LpK �&����4HL뒛���2´��U���E�<�2�2N�E%O$��?��槗��5��ij��΋qC(7H�bt>^�]�M �{>PIg�t9 ���-k�6\����xZ��g���5��S/ܯ�gӠ��+��t�$
+j��@�֓{��h���
+��Ɲ���8a�}��U��ZPi�
T��֞�ɻ��''
i�	I�[�ʫc�];WN����m�,�-����X�^⟆�B����p��hT,����[X)J�i;4�aMlj�j�)F���rHI��o_�m�i8�����Kq����ݛ7
G�n)��պ��÷+/?�+�
X�H�\-Q⪸j�,K([E���x:������l]!�=WF5�B��Uؒ
�Q	R�.}�$�W�&�K
c�9\X�Ew�Jm4��D�G�a�����(�
��3�ƺ�iF���	� X��	������+q<�L�]��L������6p���y
:� �0fa?�5� ���'/��'(��?w��!PF�I3��b1���
ڬ��)����|9
�]�� 
}nU�Z\�q @�M�����\��.��ż~�(/gU<���YŠ�\.��x��{��!�Y�s��H���B<O]Q��u�Y\�����ĀG��U�]$�wr�Vlj�Bj,,Z�Q/
)�e��6�n��בKB!F����l|�=����樯�u�ҖXE^�H���ᩦȖ��n �[2�!�{���y(�&�F������NAcM�{i]����v�wi 8� -�-NolX�)�s�����-�B�u���+��`0栗@GRI=H-���{�F
)�����T'L�T��EDՉU#
ET�YN��6�j��E�>`�0��5u�t��ϋ�Fdm
�d��i|
�m��
����=B�
6�k�BR�3����^��S܁=a�I
^�������k,� ���״
+W��*�0V ����Q9�#l\L.D�វ�_��u
���vNҖ
+�2�"�2V�i�O(#-Pd�6�r
p��G5q�dc��1�
$��
���D.�(���w�6n�����FrÈR��#%�y4���V�^L��Z����'L����ED��s�Bvp�$�݌�QH�mA�.���o�]�,�3���m�����̛����o�ߍ�9V.�
j;
l�i��
�ȱ�rϙ6�!2U��/w�i3+��w �X�:Aw-�#��
���M�\�mǣ��b�_�m���~��6���ng�ĭ+B~��1���=�O��Ce�6h/�lG�ҧQ������Q��N�o�ź�#x�p���6��[���T��ng���h��-5:Ȅ�'�G���^���^VÖ�
���:��tA>72
���eb4�!
+��b=��&�q[�Xu9�2&�����j,*�&�#��r<r&�,�T�
�����Xq�#��4j�  F=���W �e��^�����x<_� ՘${�
R��W5=�
�G��~ۏ����G��C�>� 
�'�օ���i�ҿ��|0����-�
����e٭hZ ���n����)1\�?��nA,&���X0�{}e�K�� �
��w������u��އX ̶|Yq�ms\
��]y|a��y?�
���ЕY�ـ�r��j�ψ��:�g
A�饘8R�<�){�)=� �e��Wm�*�w�6�>:�ˍ⤯ �{?Cl�9��
���p���2�FJ. �78㫟�M��;|��?��N��=����oj:<
�ݬ�h�� �!/�
+endstream
+endobj
+1147 0 obj <<
+/Type /Page
+/Contents 1148 0 R
+/Resources 1146 0 R
+/MediaBox [0 0 612 792]
+/Parent 1119 0 R
+>> endobj
+1149 0 obj <<
+/D [1147 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1150 0 obj <<
+/D [1147 0 R /XYZ 86.4 642.501 null]
+>> endobj
+1151 0 obj <<
+/D [1147 0 R /XYZ 86.4 495.496 null]
+>> endobj
+1152 0 obj <<
+/D [1147 0 R /XYZ 86.4 348.492 null]
+>> endobj
+1153 0 obj <<
+/D [1147 0 R /XYZ 86.4 187.971 null]
+>> endobj
+1146 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1157 0 obj <<
+/Length 2521      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6~����.�S��
��>d��N���N���i����T��_��  ŋ,�1�t[?xD��9��~ '�"J��O�uq��K�"K�b*����""���itq����3nx�����<]�Ng4N߯2�j���y��Ng�*abIO��������	5ID���������It	O~�­�nܸu$�%
�V����'I��PN�!�!9�R�
m%�$Hk#e$����a&Hp��k*K�ё��P���^�x�}V?���t�j���uv=���H�
>��!�}��C
�t=o��WZ�DZ����j�{��`�
+$3	O��U�8�I&���}�x��$�L��\j�L���8�ܴ���S���kYg�o�����7�*������늙1�	93*��A΋����5�{����RE�%d3��
+
5� ��H��p��CM��KeVoK�r���Jy��T�8]m�
�+�n&�oN���lQ�nn�f���U�� 
�s��+Q!�+�׎�r
s.�w	eU��(��3
�ҳ�r�]g~JUo�Q�7����t�z��c�*M(&)G����1��t�#
�=���@ʆ1�����?�>Gņu�Qo`箸h�Yz���)N��u��Z���)cq�'�
�U	�-�[/���pj����Pa��tBႃɃ�B�
0� �Y��Y��o���B@�|l��噷��
+邏0]�vI��1<d�����5j����/.7�K��
T
�$�X��7�!�
I\��J�h�
*��FM��q�t|{JC ���5�G�a�����$��Ɩ�+o�b���� ���x�vP
�Nji4�N��(��pJ��<~v~~(2a�m�n�V�>�DS������zOp�x	��`����Y�x��ϳ��ڮV!ת�>�``Cu�/}��4��-&1
��M'���=J
'�
+� K�}������*

+�]o��
*���`+a�
T?rL2P����d�\�$�M�}��%�xAB@��/6�'���
�2&aQz�w^uV
kW��gqR.����+�Yc�g���F�m��ꆄ�:�
�	�
�^����`s���C%��@���!�Q��@�ҿT/�b�X����Q
O: �3
�8v�=�2t��p�Y}7z��
r����+�Ј{���:�١5��e�K������P@�k��t����(�jMtB�
���9db�M�-3?�z���:>� ��%������A�p�;�h�
L���<F����A��K�W�b�����
8��7o�n����4�� Lf�l4i��NE���T��.ab��ĭ�
+�=�i
�M?hy���p��&)e���A����YV<䀠���߳���|H����wB *Hhg�-�0WW�x�n"/,2�{(4#	x�
"/,wM��ʞo�2���:��� cz�
6�������0��Fe^L��;V���3
���ІP��--,@��B:��o���;D��ػ��?��_S�'�0�O�"c�#�j�F��	5_`�lZ���n,
+wW at z��B���ߴ�F��� ����X�vR~m�.8(�S�R�D-}��J����:Ą����d��
�x.�O�?�嘜Cd
�9�L�[J�d�
E%T�)ȹ:�t��
��
+�(Ŏ��S�
ܼ���R�	�P��"��|
��Ԯ�>�܋C��d�̅��
�.��9��e:�='����Y
M���
���'�}S�{���0��Wo-]�\���t��W��3���}�<����q�o#��q��}T��"�	�]H���B�u
���f�����q���U@΀�d2@�`ìL7sTǘ��e�]]��e
�ƒ�%v��=8+��5�h�ዿ�����[�m�V=ɍ�2��N݈�r�
u렽��p5IX����|m�π)�i��Q��(��@�>��?;�W��(%T�)������|:��F�a&囅�$��.�Y��.�Mϧ���IУ'A�(����A
C(h�$�Q��#��J�)��l`�U4l���?*
`	u5�о1XO�M�iR�	~G���?y`wV��e�b�C?�4�J҇O``|���-p�P-�jB�����`A��Sn�|��9#������ٍ����?�~��9��0�O��>����'J��/�@M8�2���
?e���$�]޸�mw�����i=x�����k�#D
@1�!:�Z���"�(�q7
P�=�S�(ֶ��ˆ�sdg� &�����Ƕ��j�ΘE�;���Wǡ)�} �f�h�ى��rB�t\
�����g����_�����RC%�
7���/7�l�1u�(�r��r`�M�|)0K�%y$%	UkRJ�z���s	����]l��?��$�M�_���w�jW��G���NYs�u/9w'(:�w�%O�#_�M,Ln���\���" 3RL�O��=�M�2����/K�
���
u�����6��
�f������_�uZ]��	WM	8EA-h��iX�Z!�3SK��Ii��$nv; ��z�{�|����p��Wk�(��?�p�� wҜl
+endstream
+endobj
+1156 0 obj <<
+/Type /Page
+/Contents 1157 0 R
+/Resources 1155 0 R
+/MediaBox [0 0 612 792]
+/Parent 1163 0 R
+/Annots [ 1154 0 R ]
+>> endobj
+1154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.361 143.815 303.083 155.77]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1158 0 obj <<
+/D [1156 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1159 0 obj <<
+/D [1156 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1160 0 obj <<
+/D [1156 0 R /XYZ 86.4 505.434 null]
+>> endobj
+1161 0 obj <<
+/D [1156 0 R /XYZ 86.4 358.616 null]
+>> endobj
+1162 0 obj <<
+/D [1156 0 R /XYZ 86.4 201.78 null]
+>> endobj
+1155 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F7 753 0 R /F14 694 0 R /F10 754 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1166 0 obj <<
+/Length 2827      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W��R�yjk^ۛr�VU"{��� �#e` Њ��{
  � iю׵'������œ�I<��⟯/~���$J$��׷-#>Q4�$#����۩��WTi��o�,���b�O_<�dt�o��(�ӧ���z��fi�yu�����__�~A�c<!���4������x2�7?O�%zro��p�D�����_.b��>�8���ct!Ӥ�ԡ �d"���Vc4��4���$,l\�aK"$dB"���ų'?��yU�,f��yY� 
$Q���3vуBj%Z�E�6ݷ�D$���i�\ڽ�%=�%���_�.S�A������"���."��N�_�dL �qv��C�
QVf����,
l���'X���*�@ኈ(��3S��l���Y:y{E�$��
���16�,���3B�Ho�g+�ݐTLUXT�zS��Y^�cʧ���UZ��{�,�}���{ciGݍ��:R"��=�Iy�Y����Ug�QV0�\"90 �r)� ���c�%%�T��:t�X� Z�jX���Xdsg-?�ꃡ;�9�0^[ȋ�AgJ����jʒ"����
�[��N���
K��(?9���h�[�P
*&p�@�w��Ǡ�S���� L2A�|��)~H"�O�k���j�EG��*|�����J
�=۔��
��le�nE��c�u�_�ۺE/���ˍ���8R�[�����¶
�;`P
Q�#.n��TM?]o�C
��x��,�,TX�U�"�R�Q�Q�:���HH����Y"
+P�ī���ӧ�on�\CDPCy��6A8[�7���x3-J�E{��W����x}W���T��f��^�zܻM�wn}r�!�9�CRL2����WL5�Ğs0�:EB��0�~���X
+Q���v�
�W�h
�
Xz���
+�6��R�<�s�$�I�CYƺٮ@��fa at h'7&��۝A�P�[]�����I��N��B�[�.7��PN�`[��V�t���6�V$�F
+��ƂO���!|M�4(C��~Y׾
���s���+:yV��~i^]YRW-Z;E4��`�� �u/<4q�j��P�e�5#�%(���HZ�`����D�,0�
`�d-ުMo���f��d�r4H�:vy�_������6�t���O�S�/�O�{]�
@*�-�;�P�C���
�r4ΘM�z��AnM/i1�&�[
�>�}3�剴��AܲX
Ї���5e��f��*u�rP�8W�
� �B
7�s�.�P)L�$J�pkmQ��tn ��2����_��{���<p��VfŦrf��G����
[Rh�]Z}�ji~U��F]f�!z�{^E��FC!������Q*-�%>I .V�-����7���e�ń�p	�"6�12��ز�ѫ-��vw e������W7�]^�+�E�'��m��/��
�2�%��91^X�x�.����,��v~�" �Pm-�}�s\�
���Z�? ���~�":�G��"�G�Z/��!3Ć�*��!?��pW:nMa�ϜR�������M��4�	
�s\3+p�E at u �E�t�&Y~+]R�@Z��/?��1[촼3U���q�
�ڝCG{�ݳ�ɋ~�|C�N��:�����ٻ 
Ÿ�����ȝ��$��B��$(��?S��FM���?4R�BG��㋼6we
+yS���H�B�԰��7��s�Ob|�ơ����q���bd��(u;�=l�
+�b�#�v��(�@�����|L���e�C���ؤ�
+�%
�FolV}X�U��@�
�Y��m0�<Z�W-Z�j�><���)��ۙ�	�?zp����U3�
���辁����<f�Ķ��L�� y��7��3�.
�뻲ج���R�Aw��/9NI�{���`����q"S����#C1�5���M
\
AO(����E�����.� ~��
+��ͲׅX<�;_2{h�@�I�PN?�B�Oe���O��8'����i_�݇�������4�X�|�^�����
�=D�HǭC��P
��8�
z<MI�&_�h~
+Ь
4���@��h
���{a{\耆�f�J�~Bn�.��դ��Y
��W��G\�ƙ6��� �@u������A��[Fk�M'`
+�EM��8����
����=g椉��@��Z?E*�Ar;V����t�b��Ռ�1����
{&�߷�B�����5G

h���-hT
v"4�>��Y�)M��?���~���M�p�d�y� oVgmQ�U���
�X��1N:���*A�*a@��5��k
��a(��
gBb�3�4�k�Z�{#G�=�O����;)
�=�
�w@�V�
3�9L�x֠;=՗>KN
p�
�7x�L�8���sr��P$E	����z�Q2�z38p�gɘ\�������>�`Y
d
--t.� H)�8X>S��az���s$�E��z})�@[ޑ�

,���w��8CP�r21��3�8L�����(
+m|g�|�Y]��a�
�eh�L4� ����� ���=ţ�g
=�����S�PQ<�����3��+O{�
u��ʁ�.���3����t����
6��
�/0���7
E(��1��t�
 _ج
�s�
l���]C����ֹj1�p�um��"o�b���ݚT��(W��7��5&�G��0Y\
z�'�h��τ���tdo��s� "��WZ���q��	�|�ո�]f���t��A�O �H&�j��]~�yLծ �Qvw��(�.>�TG}�i��,_F2��ˁ�?̲��s��k��P�_~ne��>�
��u���
+endstream
+endobj
+1165 0 obj <<
+/Type /Page
+/Contents 1166 0 R
+/Resources 1164 0 R
+/MediaBox [0 0 612 792]
+/Parent 1163 0 R
+>> endobj
+1167 0 obj <<
+/D [1165 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1168 0 obj <<
+/D [1165 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1169 0 obj <<
+/D [1165 0 R /XYZ 86.4 468.571 null]
+>> endobj
+1170 0 obj <<
+/D [1165 0 R /XYZ 86.4 182.461 null]
+>> endobj
+1164 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1173 0 obj <<
+/Length 2051      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs�F��W�4N��ޗJ�`+vʩĩD���!	eЀ�R��y�
�l �(��Qe|P�����n��:��Og�.Ͼ{�dd��TF�W���G�$�.Wч�#�X2�����^�IQ,�$N>��|�-�&���bI��:l����חg�9#�G�+��2J�g>�hw~�0bFG���gQ�VDg����̡
�tN
Q�{I�aL$�FD�9�4EX�V��}�
R B���
��?��)k�m�者�ˋ��;�ʻ7I^lưPp�S�k�H����!�������#	89���[�w@H�x���WEr�X
+*���
&b��U2��	���5D�!3�1D����q%B�����7�_e�^����~��YRiAK�`��c�I��֦@�n�aI�$��M*�D�O
,$#)M��}A�E8d�a��u�lk���$q�)O����H���~k���	���Fu�%�U��:�{
�3�d�����,��0��U�__ge���m�m��M��o<�I죽9p�T��ۺ�V(�sنY����z�Μ�&x��X�
="9�
r�*�ԓB�H�M�(��ț	2�S��>�
�V�wU����qp0pW�=q�/­[�*�ȹE���[�̋"��AaP�v�-(���xԈ�^%x[�_��OE�ԦV�g4WR`��r#�
�l������D�U���+���Wyٌ���#�g�r���D�9���av�hW��1
w[��Ta���ۿx�"N�m6�;���S��7���4����
����;o�חi#kJS�*�О�(ed
v�i�-[�@�l�0T�;(���](��<996٭(ŕWz�������\�
+����~�*�Q���{���۶p�:J����­�E���Y��m�f��ն(�$�d�|� ��0�桓�L�>	tP��j
寯�P���D)0
�L����_~�+���Wk
��̹2�-�B�fN����@��R�m�$�o�'�Tp�6v�s�����0�g.:0#� �<���z��

+��)��� R��u���I�)Ύ)�}�C,@ �'�C,�9� ��r���d
궢�j��
胆`
�	�z��y8wg�& ��]���	����8��Hl��1ie��˦9�ǰ/-�v��A@�
Zt$����&O[�I��2~hM�v���p��j{���氒H���[QB�o����\w��%�s�橧����"7�8��`�=�ڭOI���[������pB
�d �8}��	a�
7~�[�%�M�os�3�s�Q�.��rZQ�c��sk$�I�
+�csĜs
+��(��s�	������:�0!]o�������s��m�`~���ߘ�8D
N(|}}��]��&�r���1�W�?��!�QX]��!������
+[�mO�w����G�T��y�Wa����<��Ԍ�	���z��b�.��sI�mC>�L*�u�P '|�y��W5���ͭ�'��Uw�����|�[.�:m5Us4�M�i�6Ei��{t�a�#g�tL��
 >m�I�^zң�^�r�"���r<Gx�dLz��D$���U]�[#˩
�
��
"����X�+n�k��0��}��̳I�r97-a����VZ��E��P� H��y�ȃ��cp����
�#�(D88~
cP��v�V��swT�&E�N���O~�%?�����
���<��
���9��
�{"/�����M�����
n06b��;]�!
+�EwVw���W��{wѬ��S����}r=p׌=��q<��4�|=:��jj׌"��{��@�os�L��'\׃O��mrX=�K{���y�
+[�I�5+"
�B���y9(+v(��X�ߴU���꼹i+r>�#H�z.����=���»��a-��(1�|��8�6'�'	�?�8��o;q���`��'��(�fN��4��N���o4����]��U�d��A��H
�0��o{J_eO���J�S� �ĥ�G�(�cN΁>�����@F�c�͟��;6�S��O͟�Ch�����Kvf �o�VQj
+endstream
+endobj
+1172 0 obj <<
+/Type /Page
+/Contents 1173 0 R
+/Resources 1171 0 R
+/MediaBox [0 0 612 792]
+/Parent 1163 0 R
+>> endobj
+1174 0 obj <<
+/D [1172 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1175 0 obj <<
+/D [1172 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1176 0 obj <<
+/D [1172 0 R /XYZ 86.4 537.514 null]
+>> endobj
+1177 0 obj <<
+/D [1172 0 R /XYZ 86.4 358.045 null]
+>> endobj
+162 0 obj <<
+/D [1172 0 R /XYZ 86.4 240.324 null]
+>> endobj
+1178 0 obj <<
+/D [1172 0 R /XYZ 86.4 201.394 null]
+>> endobj
+1171 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1181 0 obj <<
+/Length 2911      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�w�ɼ���+;.��Ɩsq|�IPB-E( (���o� 
CH2aWj�'��`z������gW3<{u��˳brf��T�.73-�)j�ddv���O�/�҂%��lw5_0͓�sF���K6y�����oo��jYe���������ٟg$��%����n����5<�y�3z�ɍ��qf�_��۳��pXq
�tl
C
%�L��13�5"Z���)�R�)�ٸn�� SHCQ�����WiuF��*�U�Cc�\D`q�_C�&2Z?�����R	D�/�[������� F<q�7�%���"y�/CK����ˡA,�X+��uD�Ӎ6�=aF(���&�y���3���IN&�5�DOz����Ƥ����n8bz(
�N��v��ނa�G
"�"��i�*�[Нwg��H�\^���:��w�zToE�Rİ�}$

���(��EZ�
H(NPUK\�E���t��f�9I�*[n�ǻu����ܮ�ۥ
�@Ka1 [...]
�L�ĩ�����,
 ��K�C�8x�l^�-4�t_�Gk
+*@)E���u^�eŘT:���p梂�ձ�P���,Ap�(�=��^v�x��f� �" �v }���ߵ��\>�݋eV��^��4�]�Q�G�W�[n��t ԩ�|����%K�m*�u�kv��e�4sv�a�tD���e]���7�eHT�iB� �g�
kE
@K�cUg��uc	|Ĉ���
56�3n�
�S@�t3)�;�s�痻ul���&
��
j2"�Y���y��]Gjs ��
+K���C]Q�k�)�֬���
�Q�������p�Nj:{��¿5�n�Ek�#�\.)""d. �
GN��B�&yea��y��I��$G���ˡ�B� �M5�.�c��	��y�`����l_u	@ }�!�2��q7?eյ��}�
tAG��
7S����9�5�k�L�4�jؘv_�M�W�M
���
��o��=�Ǜ����
5a�����F1d}0u�!���ڶkG�C������|���yJ�@Zt1�A�SF��b$H�u�v��2����
ڦ�(H�^ֲ(������׹
K�0��u������C�ׇ�}hM�x
�3������P �����1�W}N
��_�Mʠd1j�Z�N����'��>i0�!�F,(������m�
3 ��z䜴c���
�q�MwW @C�� �<����"���
{(����0}8�J˶��)	\ӎ�2����(��Eh?<R���-�FJ��q�V��P�rj�
A�%IM�}�K�I�~�K����d���r�"�d�y��5GV9����%1:���$¸ɝO��H���^������X��#��5ʸ`o\�HVF�7�'�,��
��z~���ƙ�G��HI5b=���7?DT
i DƘ^��n��Ml-���>��`8,�5�����w9�a�8�]�i��I���@��S
n�*��|��� S�P�{��
����.�����i�"�}�~q0K��X�ؖ�����0���.�$V�]w��0�Bhhv�~ۆ�Z�
Î�!��ah�X���z钩-Y\
��sE��o��6I�c��u �{ A�@���4
����p����A�b�B����<J�Z�2���7�M,cM��<��}��� |J�9u >Y���=��R��w~�3{^�T1N#���.-�bU�e�Z'
���6b����?�<��"�1l=Њ/f@�9i3�,��v�"]��?	��$����ol�T�kv�C��{
�
��2̡�]��:c�����:�J
Au޶
+Ź������k�)���V?��Y;i?<d��Tj
F�����Akxea?�	3���=S�
���e��2�P���\���R�hӐ((�M����ͫ�w�m��-����" �O8ej'`X?�8�mC")�O�6llp�ohO� w���`��
������7���*
+�R(0����!&�u
��K�Iz[b�a۰�Jh���>+l;�H��?
������~g/�-�%����)n
��g*�5��ٮ�p_�M�>����m�ةL,�u��l7���Mr2�Ne��{��vcٱ*� a�c̷�w!SEKmwr�

��큅��]��
p)��Ͽ���Y���Í��x�P�j��Ď�
��
�6���:�"��K�R�D$���p�A��_��{Љ*`)j�U��C��y��E6G�"��i��uhS�t�k�F�+�/��
+endstream
+endobj
+1180 0 obj <<
+/Type /Page
+/Contents 1181 0 R
+/Resources 1179 0 R
+/MediaBox [0 0 612 792]
+/Parent 1163 0 R
+>> endobj
+1182 0 obj <<
+/D [1180 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1183 0 obj <<
+/D [1180 0 R /XYZ 86.4 701.138 null]
+>> endobj
+166 0 obj <<
+/D [1180 0 R /XYZ 86.4 472.007 null]
+>> endobj
+1184 0 obj <<
+/D [1180 0 R /XYZ 86.4 425.504 null]
+>> endobj
+1185 0 obj <<
+/D [1180 0 R /XYZ 86.4 188.901 null]
+>> endobj
+1179 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F10 754 0 R /F14 694 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1188 0 obj <<
+/Length 2925      
+/Filter /FlateDecode
+>>
+stream
+x��ZK������)���Ѽg�T�
��dUŻ�
d�$V�$� �����=3 �"��Ҫ�օ�c���ϯ���
�������_
��I��^\�.�&raxL�`����C$��\
++��UZ.WI�_.Y��䩿|�ۮ��V�K
ki#�.�~s����
l�5d�R/V��?���YP"b�xp�6
)b��(_\]��΋�cF�ѭ�$&dc�F/�m�>�I�k/�:+�U��2ʳm���zU�.�Ҳ�7�{�K���Ů����}��q����mG"�X2Kt쥹���XE�E���F��#^���E�o%ex,�G>]*8�r�k�[��N�U
�1�\�0N�l}�y���	y�K�+7X�F�]�V�\m��(��U��Lځ"7����3$��%��� Fb�<E�d���G;E��4*n�E�I��T���o�Uq�%[��
e�K���g 
�O�_�U��9+7��6��E �=er���r���H�t�rjw��l�#�Qr_:���m��3��t�
�B��2*�]�;8*o�|��SouGy;itA7'])T���\5"zWԁa}��Nf
=ܥe{5
l�M,o
��+���ȩ��A�ѩ
\����,�*���b
zV٪Y��w� [...]
+�ȁ���&�ʹ��(%1gmN�QPq�P��
Us4`�$�
+��6fcаJ���x�����y�MZ�
rؕ�a�=0k�
-�@
���~��^i��ʦ
`��XqQ����5#��c:O��(������
�C�u2V� ������va¶�[DPXaXo#�t�����z��
N���:�j��3M
P]�?oȾL�U����=�� ��/ł�6�ME��	�s��,�oh�^���D�|�a��'
�\���+S��XS� �U5��*\��2T��g\��?	wW�4�9���O�
+����R!D[TZ�$frYj�q�X��QUB\6f&aS�ML�
��'���xc�cH�l��Z�X�{�ZG�~����]
mz�y�!Ŵ$`��%�B�iHVPG�SmH��
8�6�[x&\_kZ�~*@�.&�<�V�n���
+u�
+SѸo(gs	q �
+l�~8Q:-�E�v[���or�XW��G2� �hC1mH�h<�~�'!���1�ˋmH�ٶ��r�+�'q��
+�>�?d
X
+Q;�X�sg��I����oC���k�F$tcC-g�wZFO6m"����>>��({�`�=�}߹��
+��AT��"�<���l#,`ۃ#�9@"�C��
+k_�XHS
�d�w�)S2
5�2
v(�ik�����~��*<����h�����R��.�!)� ӫ�/^���
	(�*nv�Z����ֱ��փtځɦJ�nH����yȣ��>�C�*Ј�G�Q�i��9�����
�o_};�:�s0�CL�y�{��팽�02!��hA0�bE�C��cR�V�]�0���}�7U�]��7$�KG��� �yK�H��x?��0)��,N&��
|�Nz�O@��
\95D���\��W����gA7;�Ώ��s�r0����8"���Β
�
|���)�f�O�8u��%Khc�ח8��bJm
�n�`Gz
(&<
ni�F@\[W�
Ӵ�T�
[#�;�/��
"�S�M{�X׷p<�Z��&�HB�.p���P�+�̪vcʖɴ0����P�u�A
�r��%���ؐ4��%m��XZ��M�'�͝U(d����i��>
ZWN,z��� ��0B��qЋ� �/
�0h��U��k�
����4��
�,� L
^N4�����4F/����洗[K�>��u`��|
(�}\���2�8
z5�a��^���n�qR����
-��K��![�w��̀j�� 
�ukg�`g��G�f�,�E�
Z/MZ�M��sۢĨ
�哓#b�c����>-���_�)B��6Ul��a�������+�0�$�PJ�S���_:��]�F���Gc��j�$�hܷS�Y&.�3�K]��E�Ƴ��D�a�!F [...]
+�q0>�a����+��Y`Ct\ޖ�@%E�d��]�<��i'�<V�t�t�ъ�w��!P1�������>��Fj��&�
�-��
�c$e��1�愩������
�^W��
CM����P�0�aj Lg�#o9 ���n�6�
呂V��\rؓ�9��&"w�W� p�*<z at l�L<�&���F�듾�6?�l{J�2��r���f�
��]�C}�������f���m�ca�����p���Fs��&�R'�6���mv��f��S>'8�l��t45�
w�̂{*��V1��©�$3 #�
�ߥՑV��R
U�P->_'ɔuqy�N�Q��N@�>C'��K��,
�<�c�_�Kr%g{Iț|�^9Ͱ��
C�Q/��˜Z�Aj���x˃��Ky��gݲA��^�o��fv����.tM��w�k_!��bC�Aݾ#|���
K��_>������:��<��
b��=(�[��
j��h/�����0���/�p
+�����Is0ҮR���
ȕPW4���5M�VN�
\wk:FG���wO���4���Q��Pm)��

P���	���3(O��Ǜħ�
=b���mϰ��!v��� 6����N�CZ
+endstream
+endobj
+1187 0 obj <<
+/Type /Page
+/Contents 1188 0 R
+/Resources 1186 0 R
+/MediaBox [0 0 612 792]
+/Parent 1163 0 R
+>> endobj
+1189 0 obj <<
+/D [1187 0 R /XYZ 86.4 726.045 null]
+>> endobj
+170 0 obj <<
+/D [1187 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1190 0 obj <<
+/D [1187 0 R /XYZ 86.4 607.54 null]
+>> endobj
+1191 0 obj <<
+/D [1187 0 R /XYZ 86.4 361.773 null]
+>> endobj
+1192 0 obj <<
+/D [1187 0 R /XYZ 86.4 186.194 null]
+>> endobj
+1186 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F11 691 0 R /F7 753 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1195 0 obj <<
+/Length 2758      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs��~ׯ`�!����$�ǖ���*��'�>�$(# }����<1[�M
,`��>��6�<L�䇋��_��z��Ds=�_NbM���h�&����H�錛X��]��ә�e���T��%ވhY�n�����X��ͫ���|��������t�:
+��RO櫋�?�����P"�x�ž��H�W������sL���x�9�����0Œv̿y�����.�$���0��0�|�Ѝ9�����x��.UN%����*��(�B���nn,�NK/��oI(�Ծ|�1�w_\3
�K�I�w�Ŕ�(]de�_
�'�$eܽ[�e��!5U�y��(��X��>���(��]| Âw�oe��y;eQ��w���H �dƙ I2�1Ct
{��6k���τ6��q�D��JEi��R��@f�륬��i�8�	V
��8o��y9��2
��@m�p���W1��[i;~�2]��?�˴��(Y���̽�i]���
PJ0�c$Q��\�s�;��q�]7ق��D-��<d��":�m1�^�Yh��Z3�-	��Zs
��	v�f�E�C�ޤM{]�#^
Á$��
l� �g��uD�x;|j%��Ң���@t�X�6�D9g�����gG
?QE�E:\	),uԟ\C�BAV�������Y:N؟��UFl��o�:k�u�h�t�e�̹,䛍)�y,�
g��F-%����{-�Y��!7Y:mG���ݕ{�!rh9
Wu�rWi9>����x;~�.KB��랥j�B �w�*�kЇ����z�CA�N2�Q�aZ*�DA����Cm�D�Ӽ7�C��
�3�>r������\�j�1�aD� o��1m���p�c[���h>4�&��<wI�RaO���o>��%;G��"�B�
O�P<npe��s�ړN�)�+����lG�:f9��>�(���K�z�����#�U�H�2����΋�j܋b	����E��P4L�n$4��8t��

C���E�PqP��P1}�q�H��:=����D� �8{
� @��ԣ��0a��S�0AUn��M*̛"��1X�8��<�V�Ú�7w�^����;�
�&B\'��7������q
�mG�Ynpj OӮ��i����X��
��X�F���� <��`+���
-JX���s唃7�4��$��;5�ֶaM2~ Ns�[�S ��@
+���\,!��.<�]���
+$�M�4��NNLx��a�ood�4#�� ���ad����
.}�@�+}��k��9V���lb�
X��dYc�����zPl�]�X�
+�

+y�����(��$�8�
(o�E��4
�F

К6�
w
`�S0u�xV������ne�7����w�k
�Fq�1Z*�^�|�/�(�20
�FJm�Ѡ��I�#�X¡�:ޠӝ�&�ŰU���OkL�x������
.�U�^��:/�Ww��dC�z����hi���cp�ơ
�I[���cn��G��~�{焏��"O,>�*Q1���kY�u��d�1��j���y��¾uX\�kH,zp�
���;��L�mU��S�A�d��]��9�{^��i���ަ��C�p4�;8�U���W2�I)��i,�
���
5��
�����(��e�9K�kX�fa�b� j��:����$�
+���0n5|�
+��M
�oTI�fF˭���(�q����

�����R~/4�.7��5F�;
�%
mX��@S>�m�	�I]#A����ތ���
�̃bFl��GH���^�d����'0����ʖn��*�6�C�?������:t}�c�H˅۠KW#z�P`Qy�s���66a
+R;�Q��&̠�v�r�]��)�������f����
��t����/ ��ܱ�0�,���-��h
�p��f�S{j �
+��k'��H
�nZ�=��j��v[z�>�m
i�Qo�f`�v���ΠF4j�U�L*�`+���N������.G� 4E	�:��C�6
3�fO8����z|;#�dA7��y�T�</:�܁1�i�L�o6��gL�ۿ�^��8���d���3��u�[I��!
+4�@�w�im���E^g��Mm��%�Ջ� ��p�9A􀝓�O}-�x�~�j�bY
+��
�b�����пX��zؠ�w�M������:�͋�C���@��t��D��|3�`3�0�r��źȚ?���$걨�XK�^:�ȡ��r�
΅� ��
+džU��,�k�.���s��^䰁u���5��$]p�͞��.@�
|�p�����~���ј�� #���@4[Lof�w6�߮W��+
�u�
Qp�O�b[؏�D�U
h,�v�w���.����@򼡢�т��
���?3�ʑ�"@[�<}�(��"�<�#�lf+��Q�G�C����DsW�����q룱��X��sG�]�#ݦ�N
� �!EH�:w�.7�A�r��񱮐ϯ�*ݤ�}0%�Jů7�d2�Ю�1�ĭ$5'
,9�iN������R[��ޑM,D{�����ȵ����y����	񑅟�6�~�5o�����E\�'��^]
@
<C�ڪ�
+
6�K�R�LR�i���W*4�<��|�/��Fbu�Y���W����A�A���Yf�����.�O�O.����D�sˡ
��c˃�
�;�h
";ih�|���rH�?5�<���
X:�96��]N
+qR	A��_�
2
+�@�� �i
H
+endstream
+endobj
+1194 0 obj <<
+/Type /Page
+/Contents 1195 0 R
+/Resources 1193 0 R
+/MediaBox [0 0 612 792]
+/Parent 1163 0 R
+>> endobj
+1196 0 obj <<
+/D [1194 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1197 0 obj <<
+/D [1194 0 R /XYZ 86.4 639.356 null]
+>> endobj
+1198 0 obj <<
+/D [1194 0 R /XYZ 86.4 415.379 null]
+>> endobj
+174 0 obj <<
+/D [1194 0 R /XYZ 86.4 286.007 null]
+>> endobj
+1199 0 obj <<
+/D [1194 0 R /XYZ 86.4 225.996 null]
+>> endobj
+1193 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1202 0 obj <<
+/Length 2948      
+/Filter /FlateDecode
+>>
+stream
+x��ZK������)���ɼ1�T�,���UIV�
d�$ve�X�V�O���
�$F�T���<��_w�.�t�����]��G��X������h"1�D
�x�^|�$Q�KaD�J��*���%���<���v�U���zɭ�&R����^_�|w���k�5�*b�^�6W~��5|y��DX�xr�6
),��/n��yE��s(%R�C�XE�m��W�.�Q����	�Zn�	NP��eIlⅶ��X{Q�������)��$U�c��O�
#Ʋ�)� �DZ<]��r3ָ��&h��)o��X׌��[}�|.W���?)�B���T�Jb���%�y�	��2��1�@���M�y�I�S^�yB�_G��OYrƈ��K��h��CZ���m|�w�aɘfѻ�M��\5��qJ(��f
eH
ؕ�
ʴޕ��DT7��?�����RQ����b㟒@�;<p at x�j3[_s
%U^MI
Vv$�:ۦd(������������&�^s��`�I6k;L�̀�J�
�+���0��QԘ�xX
+�L�!
|F�`��a��D���3�~
�
� �
+=��LTd^ti�oeT�+��T�1�k�H��+�!R�W�E��{���^�9	������%a:8�w�ғ4r���bbL�����ތS�9GA��K�����
�|/�#�S�H����6|���� �1;ы48F=C���@��C7�WK[��G!IQ�#Ґ�ю�C��.�O琍d�H��#������k�u��h���"�|ŦZ�*��b۩�M*L�b�1⾹�	#1�q�
+R���ˆ����(���{��ŋ�77�AQ�$
׭�
+�o�<���w �zƜe�T�s��Ӡ�j�Z�Uu�����U�ح>�ӈ,�сK���S~��Q@����?�\j-a�_�R�N��η�߼9�/��L��¦��A��`����fa@� T;�"䯑�YBY��s�Ź۔!����f#�IN��=���q��3�Lk�R�"F��!����2N%���n�4&
+uݿ���A�d)��� ���Ԥ�nK���"���QL�E�6U�&�H��Y�%y���&�z��8�g��a�z[���M
D�cb�:$jKh���v��3}��NDR

l�Oˆ��&�t�l�~�v.
cY�~vx�X�K<E(+�%%�9�-��@Lpb�.��I��`�X����ZS��"#D�I���y��i�r�'|��PY}�[�v��mU'>�WE��]�9�
�>ňU�!�
+1|�ζ�Bu0��M:8]�#�a2vk� ���K;Ԛ�{`��60$�mz
N%M�y?�D�
w1����O&S��!~	�"��r�]�'�_s�&�l�~����.<�2�겵�>��|kKML���z��F�vB
�����ʠ�H�e(���$	�
ѐT���+@$I�}�<r�F��-�~*+�����C���C9�
P Q>�������"�*�~r���|)t8��2lKp�y��).��#.�
�d�D��͙�
ta6�V_����z��������zLV��2�}����9 �z�
+�Ġ������	�8�i�
�j�e^I [p.���v��x��ݧ[�݁����B�q��p
d�ʟ�=|�{e��X�+
�H,�C���
+��X(��Бq�C�
�Z��뜓(l�`�<N�.<��nT�
^'nQq���l�
���"
�X6^�"N��
%\>�wh'*�v�ޡ�s��k��;$ BJ ��r���Hˠ4� ���Ӱ�{�,�������3d�r/w<��l�^gS
�ߘ�С�>��^����c�ux)�؁S��~H\J�q������ ���+]fp������uX
+�˧�
+g�b��V��~ث!u{i
.���~L·
	q+
�
G���U'
dbm�WT; L�+h�����J!(A,�����}oZM��M{w���;_s��~�\��u�b(� ����\�V4%�d�t5]�%O���
�B�)�Ȟ1�������0l�±����n���U)�5 ��2��� 3�(G�M�H�_q}� �(heʊ�M�Ƣ�;�
�������1�@
>�?����3�?�O����I����P� �k4쳠��SC��N��6���ŭM&��?Ҫ��A!&��T(��%;*�m�K#�jB�E� �6���f�2 L��*U��hqn	5�-�
1F�4��pf|�LF����kHZ]��7�b���
�R���u*,�f�_�F

џTM�ę�v킣N�e������!s����
I�k��gI:�US�!��K

��
+�B��x�1�?^�)����.�Z at x_�� @�;�\z����#§��z�G&�G��V�~�h�sDz
+\W��HO!��8��J\�R�8 G6��

�.
�#��sD��sD~�
��8GD���L��u|3���6'�@��Hr�[9�
����z�$Q|�$��3�%�n���G�R��D��ʡF���B����4�F�����M��5�,��.�@R
�.�]��<��?�>	baL	ɤ�&�����[�W6�$��M 
��jw����F���՚>
�s�8�
Wɪ
<����i;98�x;��
+'���d��
��"�u��C����?䟿�ܨ���`zBU]��b�+�1V
�z����"@�g
+A���.�
n���=�/stKb��>��YtKf8��3���HԈ~Q\~��᥂�)G0r
��
ξʙ@!1�L~-�x�)go�Zu��KrH��̓�9���4��r
��@�og]�Ȯ+���q������[1��+�c=lk��83r�e�M�"��e�P&����~��Xgz���_&� 
���ۇ����1)�<O�������hF��߰��C;��3�X��'��/̦��f����U8;w7cD�E9�#�~��)k�_
+endstream
+endobj
+1201 0 obj <<
+/Type /Page
+/Contents 1202 0 R
+/Resources 1200 0 R
+/MediaBox [0 0 612 792]
+/Parent 1207 0 R
+>> endobj
+1203 0 obj <<
+/D [1201 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1204 0 obj <<
+/D [1201 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1205 0 obj <<
+/D [1201 0 R /XYZ 86.4 530.762 null]
+>> endobj
+178 0 obj <<
+/D [1201 0 R /XYZ 86.4 419.751 null]
+>> endobj
+1206 0 obj <<
+/D [1201 0 R /XYZ 86.4 301.618 null]
+>> endobj
+1200 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1210 0 obj <<
+/Length 2041      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�V��+�����o
�+
GvRN)�t$��,h
+�QM�l�J}�7 $@"%HIl�D�
�
E�O;?�����	�9�4���uf5���h��˫�C����D�~U�>�N����7#�����ȯ����Y|�z������V��.8y{y��4c�E�������o4�•2J����}7��p��f'�:���
J�T�O�
����s���8#�d�nI�MBԤݍ�#ƚL;F��1n�޼�X���������y9{�.�
���*��f�B�7F

+�
�F�6�8%�7g��4�^=ӊ�fDp�+����@Q\���?����*Z^��c"8�jo�$�?��0ak��S#�$ԉ�77�ͫh��f�2����rpW�)�h�9e&�(�M��,˅Gz����)c�嗟
����f6��j���
+�ݰiĘ%��_�����+���͈�|3E1��W��Y��L��Ww^,��u�;-g�8}��3>��y�(P�
�TQw(t�
�iD#\���67EP�^5�?U�Pa���
+z���1Pa�fy�]��
Tp�u�<�;,�5����*"���9p��
q
"_ G6��1r!WY�ǫ>�A�m�B�؆n�y>%R�*��|�{�q:j'^�I_�#�Ȳ�x�dT�N��>�Ѐ�1��g������7��o� Ƃ� ���x��D��PW^�J�D;�E��p�%�d|�v�T>�n�v�P��6���w=�F���X޶۽`���F0h��ڻ���%`ui��n���`3�*a��.W)������G��VuV�m�?�;��(xG	s:SV�a���w��� J�T�����^\��VQ�����<���49�Y/��:�E2uLfx���)Lc����f2)V���t�
+qU����!n�cb��
������(n�|�cג������3N
p�P����󞌡�2!vS��x�ai\���� ^ rV7�H��Ue�PVWY�$�D��� �Z�,^
�G������RD27� ����f�͢�
��c2R��
���
���}�5�rea,����9͸܎��A��O�u���ϱ�`���lkt�q�r��S����ƒWxG� hJ >��	C��!V
+ص�@�0�9ֵ!��g�ߍS��h(.q�
�X�y-�1��gV�b�mxfUG��ZaZX<��㨕�i��N�ZM��-�p+�ч
ƭ8�p�K������V��X/:�����]��Ni�\�'#��;�����V�M�&��r����$�>��e�.��UC./Jiu�2�j/�
D
��=�
��ri���K<�By��oGᾺ
ĝe ��ʼ0��cb�"� L‹�T~]L
�#B�"{QL��� J+&�P��Ll/"k8�E21�e�;9̼(��!Tl �kh�����M�?��	�EÇ8�����\?/����q;ڎv,���O��2k�S�r�Ѹ��y
�Cp��;�\lQ$S���9�_�A�C���v��N��IŒ�'c֥5�;�>�&cx2�`�a��ѡ�k�2,k>&1���YW��j1�g�� y�ځ���
Y\s���܌��
��1
�n����I6���M{I�̑=Y�[�
�+zIR��ӹ���% ���';����͡��Y4Liⶇ�, [...]
+�^8wL0��%3�(c��X�p��,�
%S�c
w�'$Qh�
�rU�r��a�O-�v���D�T�3�>촉��be�Xz}�Jq�R�?�<���
�K�8]"���-R9o-�

2Z�͝~��T�UWL�(��3%��؍�+��[��ڞ�&2أ� g�^�`��L�g�5O\m;��L�I��|\��1�[d�(>�(
��Z"=�je�σ/�&

=�=u����W�
>>^a��
+��
�Ad�[�J���_�0���1��AG���Y��sG�K
��b����
+endstream
+endobj
+1209 0 obj <<
+/Type /Page
+/Contents 1210 0 R
+/Resources 1208 0 R
+/MediaBox [0 0 612 792]
+/Parent 1207 0 R
+>> endobj
+1211 0 obj <<
+/D [1209 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1212 0 obj <<
+/D [1209 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1213 0 obj <<
+/D [1209 0 R /XYZ 86.4 537.113 null]
+>> endobj
+1214 0 obj <<
+/D [1209 0 R /XYZ 86.4 370.988 null]
+>> endobj
+1215 0 obj <<
+/D [1209 0 R /XYZ 86.4 204.863 null]
+>> endobj
+1208 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1218 0 obj <<
+/Length 3321      
+/Filter /FlateDecode
+>>
+stream
+x��\Kw����Wp�C���y?�Ӆ��>��][��I��H�FJ�*	:I}��� �ȣNV"�ޙ��������N^^|u{�BO
q����jb5��
тMn��o���˙�b�a�f�h����it�����a�H��f9�NK;U����W���`��NX.V+�dq��wt��;�'�g'?���'R8���z2�xA�a6�PJ��}r�0D	QH�IP�M�U��'����L�7��US9b��h�3:������z�2N�
�_��}���
���&�\#��GҰ���kЪ�m����
+z��Ʊ�iA3"��;���:�x9S\M��t��[�h����"�&Z*�$��NK&l1�c	�
jL�>��������l,�ic�U93� h�4�&��:�/v�F~�of�i6���W�>� �fr��O}H
�DK�����
D�i�l����%7��%���4��_�[����R��b�]��]Y��^=��9"a�0=�Tn�h�e@�i�ſ2h�
����.�63�k��"����A��YDC��b^�{
O_@�Y�?E��qJx��g����x�CI���vk�2-	�_�vN�2m��h���Ӟ��]�
�R�-�����m�
a��S��t.|���XH�������{ڋb�b(���.9�F-l���J��v�S{��z�
T�o�W|f��ȝ��	ƃ�<�{�'5�\>�~��&�l�&=��d��ı�l�!��%��fY�߻��V>�o����-�47y^��	��W3��ה0�ϗJM��!n�:Ei�t�Ԯ��!
K�O��i

J#�՘��ER4�OP�Bx�i�~�E��
c�@�>�X�{��
G��֜�N����{u=o�jD��Г@�9U�AW ����4�?<~5��ľ� ��y���N����0�!
_��:8�����LY�ƙ����"��W��:K�}����`���l?hN�Q���� ܛ�7-P�
Vb
��qb �jJ�~�����.���� ���mW�Rb8erV�'�u�F�9pj�em��g��|��W�n�F���q�^ӚQ��@��;ŀ0S ι%�@����5_��
�B-A+�K��U�'�
虣�qVk��8��}����)rYv�dG����u�=��k�BI���M3$P�-�x�B�I�u�_��%|#
\S	E��
rƱi�n��`���
Q!��m(���R� ��G��i	t���D??T00-�/�oN�CLy�`�Y�S ��N�gS%�;"���!�
�@ ��P��
BQ�No��!�������G��x���}��T�Lᒧ����k��ŬC
�y����dy��Fao��
��2	)��e�E��7�
�tL�-�� ��EVI����
Ƚ_�J���4�p�5g���Q�_#��E)��H����H~�R�\'�y���hNh�N1Ā�Y*�����,�R3;�@�̟D�L�h�P��܍@Q�p�����PG��(IX6�&��3g�5��.K
a�$���E�D�
%�P��aG?I
AkNkZ�X�X� ���`�j)~�M�}�k	mlV������V4�A[ �Q]u�l9� ;�,vq�1�e����ꈷW�o������"{X��Kà��9����Ebk�*ҩ�=��[sL�w��sئI6�
�cG(��:��.�. 
���:�b�|]pC������c)�h�u�O_d �Y
+8"��!4� ���Ķi�~�. �p5:Y�-���)�������%)�O�����U�	�����Go�J��Y���o!��hi4<h�T�#���Ҡ�-ߧ�R��j	����n{
�6-������3�/w���{��oM�9���Qh2�bzMƥ7#�����s��I�o���5)r���r$!�T��J\gRX�<���䗌Z��J�
�9Ȧ�Q
�g�z&�I�AJ������"�(��C{�z ;�iF}�ʜP�T�����9>]����
���
6�Q�4�#D
��#h��tM��O����4�X��b�8�_ٳP�At������d���t���xŃ����"�ԑ;�ni�P�j��8�$5��y*
;+�dV�������w-z� ����J� ��վx��d����v�Ӂ��K� �Q����?$����@��N��#��{�榥&YHi 
x0��3��q;ܭ-\�Vށ��j�+�m#h� ���+�=�P
+�M
+7�RHL��i�����yK`��������b]駯��l�s�����/�?�!n�(Z9X��!�
1l��C
�Y~
+�uזX�p'J�ݾxߖZ�ظQ�'4\���L*`�v�I͈f�rKv��F�
+
RP=�g�S�X&�̋kB~�LGK�q(�Z���]K�t
�-��
0���0^�:3����0Jetf�s�2�#<�ۗ!�%���?"t�� �����g������U[dB	~8�Z����=�/3�W�O4� < ]c�`�
�#J�'�d�C���
��
�����g�"Ӷ�1Y�9cG`(/<
m�A��
^u�e���?�������
 ։�
b�yG���H� �.?���c���1�RE�}��J{� �uo\�R��K6�d�	.�	��&B�amPE��6K�T,o��v��*
0C&��hnND ��+8T{{^�SJx�A
v6��g���\��	��v
�3��ގ�& C ^A�P�Y�:���kAf�U\�H ��qq��[�L�C�WZ5�]���!
�
�(e��)�0}�="��
$ϕ��1���>�������ۂS�/ʷ���SC~�3���6� �pd* �r�#��G)ᚏ�WR�{]kGtB3wHQG�	QI�xִB^O�P�D��(��j���W̰o���#~�N�
xp����k����
l�oo�B�f�
D�%�OO��P�l����/��9�Z( ��EM�����.��=�NH
tTM�d�$3
�Y~��5��G|��L#�B}Y��#��C/��E������t�,�pw�CЋx	�~
+کk�k
J=g�TͰ���E'���N�
k��k���O^��(-�c�h�GP*!g�-��ҁn
v�u�dQ�
Ͻ`L����x�r����]�t���R��Iy"���9_�Bg�@��m�v��E_��:_�Pŧ�+����>l�_>|��qF���Ú����M�DW0ƻE
k��
3F_.��oYY���tQ�atѕ<��0VV3:	#gj�����(��Gu����b
�P�״���ӿg���[��֥˜-�?�f
��ƒ����*s�XU9�)
��A�r�e]
+endstream
+endobj
+1217 0 obj <<
+/Type /Page
+/Contents 1218 0 R
+/Resources 1216 0 R
+/MediaBox [0 0 612 792]
+/Parent 1207 0 R
+>> endobj
+1219 0 obj <<
+/D [1217 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1220 0 obj <<
+/D [1217 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1221 0 obj <<
+/D [1217 0 R /XYZ 86.4 537.84 null]
+>> endobj
+1222 0 obj <<
+/D [1217 0 R /XYZ 86.4 342.523 null]
+>> endobj
+1216 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1227 0 obj <<
+/Length 4176      
+/Filter /FlateDecode
+>>
+stream
+xڽ[�r�F��+��T�pm( 㘃��!�$��� �A��
�Ei�~^VVakt�r|�� Ԛ�*�eVQ̮gb����.�|�Z�YeV����,���%*������췹g�*Ic=��.7�g�:5�7/ϴ�?�=��V��??��V�"o��>���'�.���DbD1�a�8J��-�O~�C̖���LD:Kg���zft)�V��O~~"�3N{�&����f2���9���� M׈d���M(4�o^������\�zw���Z������B�u��V_�Ӳ�ڦ_ݠ��}������.��2%C�o'z�Q��N>��݋�%�e"q"�I|J�:�:m��9�#aF�|~��ݫ���b鑈���H�L�}���ۉQ���
eTm�4
����^Lh�F2VAϼ�G0�7�pv���4r.���w��T�b{���'�����U��'�\�+�Pn����*�p�Y�M��|ӫ�`1���B�^��ڶ�O��Ŗ���~����-敪96�!Lc�MxL-fi�$����TD*3�'�xП>�� [...]
+v�!*�(�2�1�"ȝk��;�*ڒ�
2����튁�U*&� ��b�bpG-�	{j�D�e�Œ�
l���ʗ38��'/S�l�K�Yg�����������l+�ry��<�w��ZW����(����O����'?u*�.b1!�LE��ț��?N�Ę(�FU4�j��;�sL����
+���[
C�
f(�a��J*o��
�qVDIbe\��
�m0n�s�\)� �M�!A	�V��*�p�� 6�F�́
Ah���<��K, Z�w�
�O���ڮ��
����G�<�̤���f�]ߖ�xIVy�'���o�W��Z}
)-;3}���w&k��},@���/�!�'�xB��ջ�13 ,я0&����'�Wϩ�e�"
*`H��J.MJe;By�����ƴ�����I�j�PZ���wA�Ǥ>~,F,3Yr��$s�X*�\�#�k\�!��
��-��c
�(V�p�{�m�|7�$�/aq�ɜ܏�'�e��:b����?B,�*uo�XZ�F��,UWg�Yvc�M�Km�=��r� ���À
+9�HRO��;ȥ�7��%��;
�N�H�_���Vɭ��o Đ�4���q��*�V����L�K�5��B ���ˉtE��XzJ�R�u+�Aq��b��
>�j�o�G��fQ�&�8�bS�q�]���/��.��y���å(�5���g2�������
�;Ox=/r0�zh3N�0��Z��B�c���?G�AĜ	q�oGC
�
��yYԋ��@�-g��V�/
��S��[N:�|Rq�
�L;~�<`FfQPi{�}:�&RX��
�B��9����M�4�oxT�)WUQ�
1�]���RI,\d|%'甶�'��
�A@���ޯ
�l}�4��4Ll���w�����*'M�=����t{B��|I����l�d�i&��3�4DY�9?���
�
+�|U���}�͔��������c�<��NRg42�Л᧳8��}1�5&������k^���M�"�{uh
+����x5�4B"�曛�#
+|%�X�X�3��{1�
� tgeδt�o��U�Y5e�*��sR@�S�������'#Nz<D�ij{��C�cNd-�
Ӥ3�̊�i�hk�r9��R���3a�[�� ;R��l��h��g���~s���\�U����Fr��$�B�{ST[>��dD���!Fے�!���\�+MZ

�#Ҟ0�EiD�� T��k����ņ������A��x���s�z���I��
?��]&��54��T�޸Fo+�A}*���'�D
�q| jM,_��kuO,emEo�*�v=Ē�3�W�f�o�� ju������3�ܠ�uj�/�)�3�3�Ay��.ͱ���k�'9�
l?������2��-�Ҥ
˵��X+n�G\���:
�k�p����Ij~�X��A:?�5�\+6DE��W����U�����?��[�k�
+��s�:1�� e�#�a�
[&VG���H�)� �Mڽ�,VE�d@
��a��� { hxs��7���Uu�B��3'�^Æ|� �%�p�;Z�q�r*�v�+�8���]W9��s����� ���ܷT�IX��bQ���~ů�T�������	��$ɀ-H˽O�
�{���.ϯ���2�dИ
�;�Ws�
��Lg�[�@��r�Ef
*(w���A
���]��0��J#*�
�*��+�k_V�E ��¦0�K6�k��.���K����E�lR�t�ӝ
�Q�.�̆�[[����+0P�WDo���5
F�dRĨj�8S~�J܍
���aEO��E	�b\�l�Ki��6��o?��m��zw(���6��G��4���y�KN���ͤnc�Q\;�
"�OŢ�VS��,��8fY{U�W�KօOZ��������OA���yyz������c����:�G��$��3	�2��P���zTi�5�M�Ū�y��e�gBAP�/o@�$��K����w�/hW�L�C0��Q���O�N"���$X�Qso�᪣X���K�{�P�4��Y�Iԝ�}��	e2�k���0��
�ݺ0��z�P��
�iCm��6��~9���[�Q ��
 yr4.�'��槅���X�c�L�
� �G�,H��
�|0:�
զD�3��^�I_�Ʉ��1�Iȷe]��<��d��B
��c9�7؏kvw�[:� ����g��������#
��lʵ�)�6
��1�.��"
c���a�%�Xߏ�����O��!�M7�"\I��0��i�TZ�u���$s"b0��D���
j�FH�+-�{B�X۩I�/��_}^;:"cf�j-��"M�5�K�q�z��N�T�	�d�l�]Ys��z�
�^�&\*F�X1�uM�.w�&�_���(?��۲D�g��
�Lȯl����.��$��U�l�M:�����m	nʍ�4��7B��w���<��S�gL|��Z^h�&��N?�մ�o
�m��}^8^�W ��QB��H�؄^
B'~�Я3�pړ0�s(@�?7�‰ �4A��ޭ|
g=�������IoxK2�:�dT7)� �����'��+�R�k�
+^�VL��:�PG�Z1}v$�����u�q���e�N;^H��(!l�7X�2�6��Cz�`7�mTM-����ټ(�
s�v�3����ͼ��
~�)�H����z>K����(��	%
�u���v�d2m�e�Yl�`��[G>.q(�/�e
+�4�n�m�&�������0¦�� �� �~Q|n�}�B|��	�7�*`�f��3��mh�⚰��
�bǥ|Qm�?�,�ѩ[���
�5¤��@��b����,�� B4��W8nY��K&���t�T�44�+�"��]�ط%��B�(�X�Vӧ��k2��/�>��s���njQb����oC������j����0����OۤH@೙�t���'�t>�u�+k<–y���Mi@�M�RP�"<��B��u,����v{�f=m8tB�,ߎ-��On��T���y�Ȑ�w��3��x�-1��I�5v���	Eʩ�5���[��o�ͯ�� q{S^@u�ݽa&��D�u�!=�X��W��xjO�\#�v�=�j�S�.K?>�ݻ�5����O�����C�I��m�]��=mA�pB\�9%;��ĥ'O�cBwz��[)e�8lɶ��so	C��Җ��Ð
|����SG�o0�����V���r��EGݼ~m��'����̺A��AW�Tl#�����
: [...]
+endstream
+endobj
+1226 0 obj <<
+/Type /Page
+/Contents 1227 0 R
+/Resources 1225 0 R
+/MediaBox [0 0 612 792]
+/Parent 1207 0 R
+/Annots [ 1223 0 R 1224 0 R ]
+>> endobj
+1223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.441 310.364 169.913 321.212]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.733 298.409 205.204 309.257]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.7) >>
+>> endobj
+1228 0 obj <<
+/D [1226 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1229 0 obj <<
+/D [1226 0 R /XYZ 86.4 583.023 null]
+>> endobj
+182 0 obj <<
+/D [1226 0 R /XYZ 86.4 475.688 null]
+>> endobj
+1230 0 obj <<
+/D [1226 0 R /XYZ 86.4 153.33 null]
+>> endobj
+1225 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F11 691 0 R /F14 694 0 R /F38 509 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1233 0 obj <<
+/Length 3197      
+/Filter /FlateDecode
+>>
+stream
+xڽ˒��>_�ʉ��ăh�&�H���v���خW�$V(R!�ݒ�>�h�/q4Z{��n4��
�E����_n�}-�E’Xċ����L-�HX,��a��%P,�]J#��MV/���P���T�9��6���v)!t���
~�y�p�(�� #fT�X�o~�-\�������,��}���	0*n�q:�!�fJi�p�uL����Ǻʤ
>�FQ�����,~YFa<�2�U?�ŷ������ 
�hS�[�5�$J�=��QXmt{
�9��� |2�
�������9|
18� >'�_���
+>x
d4�JwȎ��{�����B������&T-y�21��������[�b��� 0��=K�-+���
kƍ���$�>�x��Ç	�ï��E�gNw����f�%ݍ��~�ޔ�
�#<��� �҆�6��*k�ͱ`�9�9�1��b2���qȄN��� *4��ݫw38�dQȟ'�e,���߾�putX����
�C�$8����[!�tFG���NG�پ�O�K�E�	D
�c���o\�x��^$Nʪ��9�@���h��M����vGoSZ;���:6�Hbf�Ή�R�
���$���E��mv~�Y�;~<!V
�X|�TI���E� ����gpj�ğ��L�����o|qI�bP����4H-�7��t��tS�4hg�/�a$�>.NL�Oj0���/��7$�����Eᶂt�=]Nq�E�Wo�N"'V�6�ry��Ӡ�I2����sq�<jp��
+�
����Y@�8qH�ə�sπ�۹��?}|���ݻ�#/ǖ�)�AP��}��Y�x��y���e
���_�ԉGZV �mZtqPl��E/@"A�
��Wm�LC,k��QGB8Tdum�
��t��u����­H2)����ncZ4ak�r�
��e)���M{���6�I[�6�����r]dn�1��i��Ȱc<̈R T
�1��Z�<�Dל��,��� �>;x�!X���D��	X��8]�(oZ����e6�L�u�k�U	Q"�[��%J��+��Y���iq�SM�����`N.R���	21�po�m"Ҏ�
M�e��i@��w
X
+Ed��6w��EGː
�
�iq֣>���
����4~KvF�5�Yƙ���l�VmU��
r�,���3 KY�D�pd�2H�W~HWէ<-�uV�������>�AX���p�"/��-6UA�9R�oh�>��N.�9���j��f��x%	�7�*�?<�
E]�;8�����V�C��lE
C)N<S���}�s�����s�&s@���K�G��
���ٓ�ٓ
�^�({���hS�mU��n�
��.��J�Bu�ϸ3 ?;=����C��e2�uP���=�wl����s2�>���9��.����F0�Ƕ�y=C���/Mkǥf��6�=R9PaĤ�諕� Ew�z � G&���Ťv
����$L
���Bq~�I�!p��̓��D����8�傉4!��I�Kg߽�=�9�宲=
�u���b��P���
A��Hp
+�N[�����&!��al��O�$BM��Ok�	���8
�K랅����D���������
2s&�a����U�Í"$n�s��ڱ�sNЎ������@@5���(�D�@�5�j��)����j0�	bT���Ο�5���MCT�XN�Z��t.�٪�C@��w����~*�=M��X
�`q��ɕ:H]M��B#;������Z�����S��<�.%��*9��fR7�]��lo�b����>N�C�u���f��a��Χk�����:��q�k���(��YZư1�%�5&Q�@���L\{m�1o&�U��
3���<_��Q�H
 5����7QF���ޟN���̉r�Q:Q���݌8�E��Z�@G3E2����)�@
s��"��
6 L�_2�1uI
KB�
쉞`���=<�������쩎���ȁ�%>]0Y\�-�]����X��Q�i��
43�6
���gK���~��}-�����(B���h��y���	8��#�$џ�wi�@ZP:�{�|�`
�蒍��I���r�6u���
c�Of`��<2N<�m����&&�
��d�g�<�Th�������
G�f�t�-ԝ��N�1�6
�X�G
+�b��C��!k���r��L�.n�F��|M����
��r��
yI��H!���mX��٨
 6��St,ִ˷qq�ң�bҴ��3$����;��8�_��1�c�1P��`#�
�`2}��T+�����p�
JKh�2�es"
XMر�4cN�,D*U{-I%���]�/�*��Ɣ���{�x1d.��L�
\��&|)�r�
_�uAA��� �
���F$�[�
ޔ��{tP���K����'���X�A7�m��v��6
܆�Rz�zte3E��<,���ix7�>�اm��}���6 Z��@���U�O�F�in�
+
Z�����Ѽ`�M���NT%���=u��
�fWD ����F��(�j����ؽ:�ґ�a��I	�x�ni��c���E����l�jL�J(hŔ�
û�̘�4l���p�K�*А�q�-���\*��qo��FM�}
�}MҘ�<X��'
+j��e�Veq�~������L=�c0Ta���f��<���,�� \�g)�	��R��RX�—`fmYgT|�zF5��O���LVB�����;蜓�!\�f�\o�I�luo�:�z*ն\�b�M��2��w9�ζI�i��Ǿzn�2�
ͫ�XW�O�3��4����'"鰟�)����I;f+8d�|�=g��Ϊ������f�Ӳ���[#�Q���&ƫ<+W'Z����Jی1�y�]���t��
+1ډ<mk�b�*N�\Jݫ��*�m��5Uq\�v�
z�
	(�Jo�%��7J�|?��m�:��/k��w۬�n�����
�K

�kE%�4zx��#
�q��,�g�B'|A�%[���f�q�)��3�j
�銚K0�RҨݑ�������:,\kl�G��fy3w�%��+��a�����v������X��
���j����F,�f��(dl�����x��i�:�r
�l�\WeƬ��(����I�E�/#�p���7H�Y����

�!&�P2m�4����+�}��"�3�#��ic
	C�����A��_Mozo
+endstream
+endobj
+1232 0 obj <<
+/Type /Page
+/Contents 1233 0 R
+/Resources 1231 0 R
+/MediaBox [0 0 612 792]
+/Parent 1207 0 R
+>> endobj
+1234 0 obj <<
+/D [1232 0 R /XYZ 86.4 726.045 null]
+>> endobj
+186 0 obj <<
+/D [1232 0 R /XYZ 86.4 562.022 null]
+>> endobj
+190 0 obj <<
+/D [1232 0 R /XYZ 86.4 455.685 null]
+>> endobj
+1235 0 obj <<
+/D [1232 0 R /XYZ 86.4 406.522 null]
+>> endobj
+1231 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F38 509 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1239 0 obj <<
+/Length 3175      
+/Filter /FlateDecode
+>>
+stream
+xڭZMs�6��W�Ҕ���[9x33�IU����9$9�m�V5$5.��}
�����>QA������A<��x��ٿ�ξ{��(ei"���&�	ӑ�)K����џ�D./���Z�^��兲z���R��%ݨ�MY�����~�)VYS��z���Og��>�	|�G��B̬N����Ͽy�Ɠ�"�Tj�{7oi�2�_�跳_��@b	��8���I*�0�Y��Aj!d�xWUN</�y]g�����v�M
��
v+�����كGw"�|Y�1�E��k��6M^�ꗥ���?lJ���
��&;ls�
��e�Ɨ�����M�[T9d!C�-V��Z�E;r�G��@V��ܤկ~D���Л���(�
�Ѹ����`��3�����=x��}�bqB[��Uu���$R�N��Ǽ���Rfx���������/6�t�İ4սE�96S�����P��ům���M��W��)ֹ����	� ��6�ͽߴ9��b��=�!��s��q(+X�!m}�$��X�މ�
��B���7"۵�(�p��)t�[/`�
���{���j%)S�9ZD_�^��#�|n���V/�0| [...]
�� ���^`h�D�1�'�3�W�ߘ�ż�ݑ��<���>�-/b�ꗲX�_�oFf�p��b��I��ቱT"�4�t����UL �������]����K�B6
+¬���z�-ׇ
����9�jp��t>]��=�C���w3��
��D�1���;�M¬�XgMF���v�_i��pxR�/���DY烗�?/d�	a|�k�F@�#�xp�nu
 I?]:���da��z��zE!J�P
�R�' %,ӺC��Q�(��|}���z&� zT�
�D�M�P
T��m�Sh=���pz$$6!���,_�	Δ �h)#u!q�	P��\����Tة�s+��뜝���YL
+N3����;!Ex�1)v�6d5��ã�wXɤ6�t�mЋ$tkWy��霳iӪ3�i
�)�����W��i�6{�����bE�z�'
5+�H]
�*_öַ߮OO��� XuYEl�:�(Ԥ~Y<%��-űT��'�֨��e*i�	��%�U[�W~��B����~�7�jt
�[�����¢]
��j	IJ
�̘Hsä��a"-0?���h���p�UЧ3�>C�Xw�ju!�"
%�e8Q����tW��q^b9���ʛC���2Fð9LRa�9�᩠���~c!=
�,$�]��T0$`�΍�b��W�c����뿯$,�T
�5�V�B�
��}�xӏ+�$�]~K�g
�@=�q=9
8�B&�+f�V��
��f�U�s�S8����\a
̷�5��Њ9����>~����,�\"d�+
��+�\������?���^jB@ >n�q����=
~���o�j�K?i�o�*4��nU
�i�"�^Z:o˴����YH�B0�W�Tk���HK �y�iT��>
/L�<���
?���
2YD�1�R�#���d��R!ҋ�;"�@c9>�kTVܣ�l�,�n3�
+����z�`}R�i�=!�j�y'
y�	?�|ӧ���k�zv]��C�����`�ej�K��Gogc�頛g���ӏ Iw(�f:��Q
�N� }��!��Wf���N��;�����1�
�j����r|����f�
���h@]�dEh�dKq�[��a��qmmO�\�;���bP�(Dz�/���(�W��A\���b:
�,f�8T�H�9��IW{B� �X������E
��
�ʮ��&O�_��3�Xf�z|�Y���d���鉸��+di%�P�қ�}�Z߮H�h��d�����L޴T�)��p�N=	@i�1a)@���ȳ�Y[ٸ3���8Y|��A�7��#5c+
�[�eƁP���.`�$t���G�� OL�A��Hb�ңv3ʡ�1�+�Ŭ��J�w�/>kKr����_Y9��A҆����Z{��D�Ű�5�Nr�`攬�MB�G�O<���)�
0(��f���!��l��V�]�oZB!����>Ӌ'�-I���>3�䤚�V���x�C��
��j�dɨ�v�q̶n�m�\f������H��qڊ[&b}��
��0���2
	����{�F ����_�����@�>C��t�$�����쎨��l�GKc�F���t���j���X����'�C`�g�P�#A�א�rG����@�r>��߸zmZj�)�^�b�D�FQC���f�":�A��R2;�{c���
+c2���C�j����a:�^��S��
c���Ч$�UY�S
r}: Lt�^��C�x��ݺ,r|n���w� ^���Ȯ7�J��ܛY��g8�_
&;���6�5�z�w�Z8�N@>A��5L��p����4C����O�e�i�C?l���5�l�0L��ށ˱x������� ��%��	C���
B��:Zr��it�;����nQQ�z�׃	�D�l��.�y-��e0�m�V�X�g=B�Z
�$xQ
+h�������^<o�	a�•�j	W��#��e\��CǷ�_4��#tL(IS��mT�n�k5p��	�

agHV�(T>_>z�#M��&�h�]�2�
���ܿ]��ۢ���aE�7����?����S
	!Ic��A�ġL;�Q�s{��8�뚌�v\��Q���F����/�|�G�O���@�]\R
�N��c�lO����vYp&t�HN�in$e\�1.�?s��Es�t���@Р�<Z��A8��*�/R"XG����6?�ن��M�=��]�/X˶"�6�
�`�u9�=h˘�%}
�kš�7
9�
�#�\�u�j]\o���{�T�R(
P��}	���3략W7�N�}���m	���{tᖺ�5�00���֥3�A�
�AuC�PHhm�gl%��E�A(E��
+O@����Dt�x��	����ԅ�s�	�+9L��h�����~"]QW4�������H4�Vҝ-��v1X���U�Bj�o�y$ȥ�vu���ƻ
�Q�� /,D[�P�3fG��V!���2�,��-M�|V��|�N5�qJ8�$�hCd�,���&�!d3a��H�n��	p�V\��u��L0{�gl��SYΧ:,�&�?�G����8��
+endstream
+endobj
+1238 0 obj <<
+/Type /Page
+/Contents 1239 0 R
+/Resources 1237 0 R
+/MediaBox [0 0 612 792]
+/Parent 1207 0 R
+/Annots [ 1236 0 R ]
+>> endobj
+1236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 326.644 104 338.599]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1240 0 obj <<
+/D [1238 0 R /XYZ 86.4 726.045 null]
+>> endobj
+194 0 obj <<
+/D [1238 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1241 0 obj <<
+/D [1238 0 R /XYZ 86.4 627.942 null]
+>> endobj
+198 0 obj <<
+/D [1238 0 R /XYZ 86.4 404.564 null]
+>> endobj
+1242 0 obj <<
+/D [1238 0 R /XYZ 86.4 310.169 null]
+>> endobj
+202 0 obj <<
+/D [1238 0 R /XYZ 86.4 97.839 null]
+>> endobj
+1237 0 obj <<
+/Font << /F36 464 0 R /F38 509 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F11 691 0 R /F10 754 0 R /F14 694 0 R /F7 753 0 R /F1 756 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1251 0 obj <<
+/Length 2984      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs��~ׯ�#�g�>ʵUQb+e�ƕ�ڼx�R	I� 
����>=@ 
Q���r��	�LOOO_w'7	N�q�˓�/�L
2����:��DQ�$#��"��r$OgL��&�g�f�^�¾������EU6�3j(U�d��\�9yuy���8!
I�4��|u���,�˛#ft�ٍ[%�D�n��?��	,N�`�����+�Ј�0&�Z#��>0�",e ��$b2H	i"JzA�~y���ڋrW�c���ӗ�l_j���O�>

����T
iN�e�3&�,쉺=ts'��1*���ޯ�E~}:T�E���������'b��y�������_��
+�q����@���.C�mw�{RL`D�d����mU����c��Q�� �����]?�����J��
��jӉ�*���3�"I��
���@#��z$E��_dmf���D]�g��a�(�����m�58
�VM>��|�Q�Ezy[�W�L�N�?ͫ�z���J3���(9i��N�H��ƺ(?�����tF��jAȀG�)ر�T�������V�#T�����,)Uz�R�/v)������F��R�t#�cLQNL��f3���O�m�za���UW^�m�pu�
����
+��l��e�^��,A��u<���K�yiy�w�)�&�D�'*iu)p� n�U��#*���O�1�funox�V�ŕ�T���M��M]�7��
��Txq�7ufm�mhF4F�jgs�����f��C?�0G����Ɋ�<�᎘�o�:���F���Mv� [ͭ�Z�Qi^.�% A�Ev��ѾX5����g��ld���W�y=�ݎ:vsP�#����qՏ��0z���EK��	l"���*]AX�
+�F�#�G<"5���v�3CɄ
���xwI��%����kN
W�V�`"^U!��y�m�r|��|�Y�\�'�3{����e��-i��7�m$*���~�#���� ��\ E�q>>��T<>i没��8 @�o<@�WF!^+=V�8�$R:، ep}�$�"N�#Ŕ���=*9��t��Z[�ȴ	��*����
�pu�q���8
Ӡ���V�.k��8t"�l��!�8��|�!�B��t�7�uVÎz!����)���AB��cD�����U���Ct�&v
@l>,��vS��X0���yaR)${�%�;���l5��fi�N
�]ay���R\�+@�y�4כ��i��f�RV����l��]�cY ��u7���
��	�$���R�#A�!�|[th�y���G������^�|
�e
�f�+�� G*�@���]�+G(�q^xM� @NՀ^�$(F�� Q���
��YRXU}wy��ۿG�0��+
��l�����#�����]
.�@2�x[�4xb
L*��/�A�'�E�U���{�-�U
=q���`�w�� jlթ\,�>qg
�}��4�3*�dot���4�2l�b+��ؽۡ�R$4!A��/Z"��P�����U�M�
+lz��E�Jբ�z�g��pI��/\�;��κԖ���v��pR�[W��5L�	�%��J�ˢ̳ڿo��\
���|�����y֮z�l�V��`������u�:�.�N3��O��I���B0@@[H��q��@誷�n�8�����1[g�_ ��
1T6[l�gK�k�
����o�.�]��~�+KT�z��da�u�k[������o�-
&�uY���]�c
{�
+8�=�!~��]��2�����ں�!یBPH!���l��AWbaqƄ@��q�_�q2�<��?@&���Z���ˇK��~7G)�[j�򃻟 W����9���F.��{f�1�

�#�tu�ee
P��o�O�=)���󏾾M�G�N���C f	�`��Y��a��#E;�<*��� 0�\B
�ȅ���zO'�v�Q��
�
��G]w�z-&�ЏfA@G�C`��
+��gvR@X;J���
�3M4Ҍ���>
�2��h�bL�J�]��

�Ɣ���ӽ��=Z& +��p�!%b?'��֑¡�b[G�I�#�!T�飥}��
1,C�7
��
9��,�(�����7�aӀ�z��0�p��6;�����W��zY��}���|)`uN��#�e�D(ھ.�����'�~�I�"T0� �cf��� s�nė�..�خ�N��)~
��ݪ˅7+�U����(��q�n
/�EZ
��$��2�d������*��:LW!�:��4i�ns8m �g�h���㏝��}����p��9���e�ZMH��YH�|Ʉ
+لK��6֩�l��A+����P۪rQ
�.{�
�\m�1�v��l���;N[l�| � J�X>u��i_�7�b�]hXd�,�lk ��y��

�m4t�Ԁ�&� ��Q�{V&c �o=ՠ4��[]|��9�k�^ص�?�&�T�
+#�4��?�#@�O�K̺�]���G؅!�'��ޥ��w��4�-�ҧ4ꈂ��P<�QgI)��uGRר�
+�[n��8s
+��	�(��(�w8j<�
:���U��(�� � |�!�.tL�@�����࣏'
�.�2���hՕ28_Ӄ�X���V	�}*�ꞣT�YP*{&p�Ü{�
�aTva[��5�r�r
���{
+!�T����!\
^y�
+$яϺ�w��Y
�����tQ'dr�Oݠ_��f���i�J� �Bª��m��$�忭�3�&Z�^�}i����po��L���
������̿�
+&��q(Pգ�4��d���xr:>�:�W!u�^�M�$�ʺ�d[�5�dw���~X���&��܊ �2?������/��ʨ����סu024͇ݔ����z�C#�a�[:r�s�#e��X.��*s�_[w�	��?^
�A�����	IH�f��X}vJ�ߝ��G�ۼ��as��mV�zS���_��
���]�I�(�

+endstream
+endobj
+1250 0 obj <<
+/Type /Page
+/Contents 1251 0 R
+/Resources 1249 0 R
+/MediaBox [0 0 612 792]
+/Parent 1255 0 R
+/Annots [ 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R ]
+>> endobj
+1243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.208 431.719 236.182 443.675]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.164 431.719 265.886 443.675]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.771 308.395 261.493 320.35]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 249.686 279.252 261.642]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.357 49.651 332.08 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1252 0 obj <<
+/D [1250 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1253 0 obj <<
+/D [1250 0 R /XYZ 86.4 701.138 null]
+>> endobj
+206 0 obj <<
+/D [1250 0 R /XYZ 86.4 479.371 null]
+>> endobj
+1254 0 obj <<
+/D [1250 0 R /XYZ 86.4 404.233 null]
+>> endobj
+1249 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F10 754 0 R /F14 694 0 R /F16 453 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1264 0 obj <<
+/Length 4113      
+/Filter /FlateDecode
+>>
+stream
+xڽ[]��6�}���۲sZ
�$&g
<c;'9gw��O�
Zb��H�LRnw~���?$Hj�{�D�B�P�VL���y�7"]�X�<]��.�4����8lq�^��Ry��Y�D�KW���"������^҃�n�֖��>���6ժ諦�~������^0�,��AŹL��w�&�5���Hb��Ž��]H�c�������"q'S��C�S�b��V�M_���G�wK�f9�-Y
�]v{��\ۢuYw����X5﫢�O��zE�O�+N���i��������FNE,�S& ����d+19��t�����w��@K��_
6��lg2�mѷ՗@�)�y�?���ۄ�x�r�X� ������0�	�HI�۵
��K�-��D£���I;�fT-=Mcl�-Od̸D;
s��Qg*	�"�<T�{�di=��4�6�>����@{Kg���M��K>�9��3-�hG�*j��
+�r
�|�T�D>
�ȝ�r�:�֛T����vZ��ǰ<!����v$U�&�ّ�5�����,9&�ܔ۲&�;*ɣ���I�zW�=.yT�Z|�Be?lB+'t��Y

5Tq��
+��ТNc�|M{Ug���~>
ct�;l34��0�F̢�+5mi��e�i>ק5�LD�b��wf�վ���b87������گ1s*�эo�'}�y1���
h�'Y�q^-Xb���%0[���Ͻ�t�,6/T�h=]��[�������=m�c��eE�^�b�]1��
�g��/J������
�X�a��1;��,��٪pG���~`��$Q�Z�]gpO���MKSRP/U�"^�~���c��i��3X�:��y
�j糜�
�4�$^�����sı�gIjL���.H/���Cz!f�K���~
.�t�L,���0'��*b���\[0�X�����]}
�v�2Ȋ�fv�׽�>�E3�H��͞�kT�Ͳ2����W�޴�mٖ5
ɾ5��JN�^���a��-wmٕ�<~�ܮt����&3�3..�\í
xF�3�C�C^�+�%���J�^ _b��f�J�Y���=�o�1�i��\E��~4 4Ȝaa{�����3��3��ǯ� ���zd=�N�/�ˑ` ��}#��X�
8Kb�2� d�X)v	ؔu3ct'T����=��
���%k!f�2cU��_-�4���� ^���0 it��c�2L���'Zy� �!$���!���(M����T��v[KP��=
��W���Vdw���w�ҥ� �s(+�G�
+��@f#��p�h��r׺��K���Ua=���j�`Z"#@J��F]�d��G����v�z]��.R`Q�l0�m�Y�F�8 �|�s���}Ձ��a�W���%�n�f�0g����A���8�`�i�z��CzJ��US�G}�uN���5�/�"/�`��
�ӬeR,�t��6�	Z#
'�V^���C����
,�"��
�h�K�Hxl~!d� �^�4��x
+@�,7~�Z��8�;�"�s�w\2����
���4�3�/M�|�$�8?�T�%%�������2
��
+�(�1A��%\�LN)Kx�p4��$Ӧ)���������֖���
J���#�5/��
cAJ`uM[|b-��� v�N5;����#��dS�Ԫ��&2��A�7���1�_��/�(�b�p0���pP��?��ה��>��|�������W	���Ef���eh�
+�
��,�G�٥-.���窠L���U]��n��+�G�\�ȂŜ�C��i�G�suΕ 
�l1���)�!I�s�~P֟���^gr
���1���C"9�X $�q:�z?�FL
D�b� r��x#���©)�<�;�m.�b��t>Q.3����p�
�|
%'yX-n�#Lz�FS���
 ��ӘF	��9� -��!�������
	m��Cio=�%���v�¦�`�)��Qs
��D�ZZ�K��F(3��LD��`��Ŝ
 �P	&Wɧ�dR��LSR��Y
,�u
�8
.3"�) -J�>�x"`����D�)�5�AlGC�?v<��1�8�.3.�����ͳ���ILa����ǚ��_�Ԅ����=���	F!
$t�Xl��t
^�P��%�����������`(�:A�3	�T�`
z��2�� ��(��7
+�E�a��I�
"���
�
� j���V!�����#ڻ6P�
+.��KA9>�D��c�����uc�l���X�
�H(^;���6*�|���紳39m�φ�{�����Xb2U�Si����WȜ�־��_��A��|0�M(��c�*9٤E�誳��+�oa�o�ݧ}ӏޜJ��.	)$hUջ��Yv���	��N��.��6�Oå�=���
+��2���ɶ�� ݘ��M��iSu=1=���
��h�ٯ�З{�m�a{QS at S�����TBN���Z����=}\V�,��y��_����n
�ں���0I��Y�jj˱]�)7�V4*�s�{�i~g�
+
+{9��\�P�E��Cfp]�sNJ�Ec�>m5k��'9؋�Qn��c�})b'�ZgSb4v�lQ`���X�$b���@K��sG��E_��ș�S�
��mZ��
0���OV�we�M �����������=���Ό;L��Ν�U�C�n)�7� þ6<b�;^7�f<�T�kΦӄJ���G�d�,�@S�9"�tpu����&��X�^�
�
��s�{j*���/o_���������p������#y�C��A}U�	�B@�
C����!�������"��#��Ӛ#���9/C�D�}Au�oWn��d�
��bn�v[Y
+f�mK���
B���Lg�<�m
�6&�?`����1-��4�V�fW
���%��Ii�����*��H)�e��8�r at y�$
��bW��~���X�v��)GT+��

9f%�>j�6a)�+n�o�bAq'�Qe�;� '��&hP4�~���AՖ��>o���d��-p��p�
��t���p
��s��)�b�K���pS�e��r��г˿����4ӖE�5�d�A��	}�z�
֢⪳�{��B	
��K�Ɯkp|؆�˘%� �>p��c�&�\0�=;�h�X�o�f3Ĉj`va�	�?���I(�
�`,ޙ��B��gjg8�1�c&��
� ��
%��
��b$�T���j]ڷ���<�InJ/y�)"gsrN�>�͗6�;8Fs 
�
�o����3��{����ܥe-̾WZ�s+*a�Z at m
'���`J�<[�!���8 l�
����P��ͣ5p��,�����WvZ*cS�;>,*�#����vDsC
����R�
P�
@̥//��ݮlm�����a��'��>1pr��>�}�x�1�
���M1�B��6��]b2���f����?'"AB=<8YCbdt�y��@��'�؝C
+6�YĐ�����b���c���3S.�ej����M��w߄)@�͑$}R�R��$�9O�<Uc
兦�{!o^	�����
+�����J>� pI���_��KIճ� �}uVa�M�o�f����K���{ߺ��M��XA�($G�Х�U����ҽs������<R���1b
��Ki#��y:K�b€��4zE���}�
���ھ�[��兽
ԕ�v���V���� &���=�1T~�ޛ�����'sLA��AJ���<e;
����Z�_E
.�:a1*����acz]��(�T���9�]�����!�T��Ơ�ɦU
$>VV�o���l�6;��$v�rWln�\��}�6����-�V}d��#�?@�!���6%j�
z��J!����BV*�q���$5���V��Gb��sF�.g�&�
�C2>�?^�\퇌�Z
����r��=��LrN�\g�@
hw�ծb"���ʌ���.�'{�~X
+ at gl�����-�j�/6������J ����&x�G��&�}�?뷯
��;�w���u�|pӭ�Ma\��I���{�u�m]�c0-!�� ��5m���M�17�ӎ\��0�"��3b�8�39Y�6�>W���5�IP�$
2
̖����?K�
�
+endstream
+endobj
+1263 0 obj <<
+/Type /Page
+/Contents 1264 0 R
+/Resources 1262 0 R
+/MediaBox [0 0 612 792]
+/Parent 1255 0 R
+/Annots [ 1248 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R ]
+>> endobj
+1248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 639.868 165.88 651.823]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.1) >>
+>> endobj
+1256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.78 464.262 177.503 475.11]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.1) >>
+>> endobj
+1257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.156 412.048 442.376 422.896]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.288 307.938 234.262 319.893]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.568 307.938 265.29 319.893]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.7 177.019 317.423 188.974]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 49.651 279.252 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1265 0 obj <<
+/D [1263 0 R /XYZ 86.4 726.045 null]
+>> endobj
+210 0 obj <<
+/D [1263 0 R /XYZ 86.4 354.364 null]
+>> endobj
+1266 0 obj <<
+/D [1263 0 R /XYZ 86.4 284.649 null]
+>> endobj
+1262 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F14 694 0 R /F11 691 0 R /F10 754 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1274 0 obj <<
+/Length 4713      
+/Filter /FlateDecode
+>>
+stream
+xڭ\[��6�~���۪g-7ĦR��:��������$S[���-�m�J����98 o�.��K
@\��;6[�-��/����7R/lb�Ћ��L'ja�M���ůK�蛕���c[4�v��-�
V���Zwe]�7+a�0K����Ï/~����
S�C�I��b�{��?�b-?.X"m�xt�v
%m"��]����/������R�2	
�Ж'�hZ��ڭ ��͛�+)KR
��k	��R.��
jYﻇ}G�����M}#���.�
+����ԟʼ�נ�)�x��~���t���Z&����;NC�w�8,����oV�^��Y�m|����pL�ٿ�A])tX�]X�����G���r�cy�YT��ϙ̮hr�+��	�T���^��
��p�F-�1	S�uɄ�-uE�ɈDq	Ci TE�n�.?AN@Ӗ�	=e�2��| �0˺�nৃջƮ�_���xy�RLxJ��6��R�R/lr�:]t�%�p��CR,K��8$�9̗�iv6
+(",�!o`G�!<�mK"��
�k%d�0$`�4�A������C)�::�����4�q!���S�v|�V��?��Ҏ�Rq�7x�)? 
����@�������-Ԃ�Z�|�P�m�P��7��yS柶����>
J���j���bcUXڻQ)	��B
�0+�ET �9�<�@Z�)�Q�����!�d�����r�[��m�A$�@>�L�N����o׉�= �>�1?En��^���޶�������pe�@�wσr)vt�u��[��v����P����jۇ|]LIvg�I�҉a�&����MEcЍo����_W)c�W�-�̳�^�E�haB���Avq;#)�)v_�jn�2�̨����v�^m{�ߢT
(��skˮ��&�jq��6�
�(9ݼU����b����x�E�p×����	7�9i�o�b���5�-�Ǫ�ˇ�L��=�j�7�ת�M���gfv��	�r����Bh ���*�i�ͩ��3����p�aO�
ءP�0b�7wM�QO�|,�[?z���Q5�" [...]
@ϳ
ʵ��
�_�q�"Ig��/�΄�R��ɝ��;��3N��d��+ɜ
� j���h�l�1������mGm�:��БN�!pa}DYV�������,1�����&i��� �u�A���w�c���3�3
�Xv ˕�%��х�X�~n�k��	;��|8����9��aA�
h�c6
+�`��Y�-�I����]~9A
C��!g�Ap�p��s�Ⲥ��a��lY��.r;`w
��eLs�����ӑ��C<���ne�Y�\m�h� `���d?P>�k&��m1�	��*
�qK�
+4р
��)t���\x���d��?�:���
����x���C��-:�m�.�ٌ���{���]�(����m
kit2�c�W�r)��>�)�X����ƃ�]�n�6r
+qyO߿z��{
+-s��
y�Z��`�PR�u�����"
K����  �K�p�諸���	3Y����6B6i���N at CD�?
�<�D��*[Ȁa��0�a9�As�IH	�鋮\�

44���
� Q�zid���X
�oS�`����T(�z���)���^g��P�ڙ��W at E��M��
�!Wn=�^� Ԛ�j�ۢq¡�宱�AhrK��H@a_m�f�4�k=�~h�֯%�`DY�*;� <Ι9ЪK{�61%�8�uFHH�<
�\�6��yd*2�¡�p(�+�C�T����~vJ:fZ��"����E<E�8�c*��]�(A��Mbp�|>�>�a�
�o�+�5�g�
m����΂na���t�rf��=�CO��zOs�
�M���� �}�'%�H�P1T��
+������v�u"���
j��p����S�poer��IJ .����������ӆ-u"�!�uG9=�r���
<[#�6Ժ��bж��
+�
�/�}�:�����Ôe�)�E���&����"�6P��m�6� Vj�dBM���`����W]�Q����'��2��a1q�= 2(p�#x
d�5=m�<�����AF�` ��3���5��
0(m�T چ�Q��l�;���,
�ո.��`��ct$�p
+k�:
��M��,
��  >�}�k�X�!�A����l�'��I�h
+)��Eį@@�Q�uXE��!@x�Ѕ�����C��4�l�ӳKA�e�i��w�q^qc��@I*8tr�[sL��V��`��
�ՊYb���>֛�.B�E��.��]����M���2�����Df��c�@��][��VǼ��L"�x�j�$ �G�����1�bW�A���o��"�1�_2�E����W[��U�o�$yT��PgL&��H��$Y�,R({�tC���}J�G@�	n��#�C;����̍�`54:���@Ŧ���*�R��ڨ�)>m��R��
����� ���~��rN�
��2�'�
˼� �:�2� 0�ހ��m˻��;�8X��4�,�8洐c�Fʶ{z(���{�9���I�J�,!�
�3�dBv��sP�
\�?����!�Q`��}����҂
F&13������y�_NHn�@3X.)uby��W{'zĞJ��f��0����g1�d
�J��Lȱ�Z��~�I:��I�2���S{��5P'h���/3��`5�]6�S�r	�b���#y�N���J��i�L˟�K��.��b������s,�`�
�>�����6��M=�ֺ�A˞C\�u
]WB�
:42�}\�1�=�{^@���h ��"
�!���i at y�%x<9Y������2�ΐv#K�r��	X-ӧ
溠ڸƤNE��'� �,��a��D�l:w5���9�十��X^]��U�嵐
�[y��
+�e%1�
�O�V�}
��P
+˹/���Gw��Ijı�k�c��n���2�B�lʊ�/�S��AtX��l�?@2c�3�
�6�*|� �޳c1���l
+���"���������I[sO����,
A+�O
��9%-ed��d��0Wڳ�<܂��zag��Ji,���EReT��N\�*@ψ#�v
+�Y�
����Rz

�VI4D>��(�p��_xG�� �R;��NW��((�X4�i�=�ȁ���8h���?iW���4]2�a�m� ua1x51݃
U��D
b�r��X��1�y�u.�xϩ����u�>���m
+����>bC���<Cr� sE"����$wC1������r�:ܸRg�9X`��k,^�C
��-~
0���*�<րM&�
���!����޻Naf>���Z��l0���"A+}��I ��]�1����&^���C�1��E6�I[>z�m���Xw����
��N�b0��>����[����H��QH��,�C&���C3�W��&~4�s� �<�҉��HX�e+�BJK������9
f���H�K
H3�<Q%֦n(���J<07���� �@�]c�
+��L���/KWu���
LF����!�(Dt�IS���*��qd�%w����6�EJ�[.7>�s05%"+�
�@#S��z���H���
��!�
�<��;��ہ,��:oW���i��?bL�ʱ
���h9�F�tF?GK�
�.H
+��)���}�9�a
��<
�g�U�I�!�����
��
g�ch/q�`�N%�o�b��>�~X��s�
�Ke%��,*,m˶C
ʦ(,�"����7�axk�����u!
YN�c6D�
6>s�(���B{I!ߢ[c�X�
�@ ��?u9+%���(���!�E��_,��9|��o|EN?�o]���lL��&�
����
Tz���)��,���]<j�ғ8|%5ZQ3��I��J�5<$� J��ondb��:d��ŎA.C^
<�ע�KD�۱e5�G��)=<�
�J6�=X>��dS	�1�|����hM
�w
r�x�U�Lk
R'�
��^���P
��͏���!�S��I���=/j
Z7� w�L'Y�����w�~�&➆�����Ą��pG�
�L-
_�o��I��%	��dK�j��%�D�y0%���0~��3�IJͿ�����m#�bn�fWF���J1=���~p�ſ��X<Oe�b�0���4�-�hr���
O-"%�bE8�\M@�|�W��>�p��ԩ�p(�gAߘT=�N?ݥ�a�*�f�o���}��Hm��]qㆯ�jzs�,R�1��$L�N1��pS��%��ϦR��qŒ4����2(��Λ�)�
=����Ȕ-��IL��7n�f5
�B�`�wu=�K}n70�Nb嶬
+0
]���LK|���0��)�n�cU}K��
�h���G��{��P��n�L
+���"����h�����o?F�A:�Ա�@7�@�����=p�ۏ?}�$-��
��\�V1ʥE�7ĥ�I��;�]���l�m��bS# �ܳ� x�}Ƅ�9���89�?\��>= H���ʍ����+��X{�����>�o��������*ȥ�����;@n됪��ב�G��HuJSYC�����Z�YO��nl����c�t��
R��x� ��O�J����g���A"_��������˩
+endstream
+endobj
+1273 0 obj <<
+/Type /Page
+/Contents 1274 0 R
+/Resources 1272 0 R
+/MediaBox [0 0 612 792]
+/Parent 1255 0 R
+/Annots [ 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R ]
+>> endobj
+1267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.357 549.124 332.08 561.079]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.314 248.493 250.036 259.341]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.1) >>
+>> endobj
+1269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.156 195.919 442.376 206.767]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.421 90.16 226.395 102.116]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.646 90.16 256.369 102.116]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1275 0 obj <<
+/D [1273 0 R /XYZ 86.4 726.045 null]
+>> endobj
+214 0 obj <<
+/D [1273 0 R /XYZ 86.4 137.101 null]
+>> endobj
+1276 0 obj <<
+/D [1273 0 R /XYZ 86.4 66.097 null]
+>> endobj
+1272 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F10 754 0 R /F14 694 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1287 0 obj <<
+/Length 3771      
+/Filter /FlateDecode
+>>
+stream
+xڽ[Y���~ׯ�[@g9�܃r�*Jd��T��Z�!�+�%��px	 %�}��gp�j�k?������{�tv3Kg���g�_I3�Xf��]^ϜajfEƌ�����Ę�BX�e�.�7�t*y�r.E�_dr����o��b�_�˼)w�z���g�^>��Î��
4s�̖�g?���V��f�2���'?n3S2c�ֳw���,
�}�ݘp�qƭ!�_?�\mK�Ó�>��3
gRh�񳚻}�*��
-tRnz�)��W�_�x�����.���W[h��S�����~���cI(iX*��ZZ}N�q�Zax�<������n9[p8M�)x�,ӡ��19�kf�fL��P#�c����7��X6�'(�� �)"��<	.��!b�
+�$�Z>Jf��TT�@
L�C�4��y�@P�@��]����uQMPƥ
�c�2��+���/%L k�7y$OZ�!��tKii�$�KE՗h���3��	f�~B2�a�$�	S�eS�IHPp,��%A���z���k���Lp<C���:T{��.���`��Dž0�N.o���zΓ�v靬oX�6�CS�n�4�=��m�3��|����-s��G�����N�

铝�*��G���
���6l}W7ņ��]�t�9��}�����M
��l!Rp�|d��b��I٠\/�E%+�4Ŋ��p�;z���/��D�JP�m�
���Gr�	�
!T�I5/��æ��~M=�e��Z��,��Fn�|��塪¾��q�A��CA�x �	�v�]ౣf٤خz
(\�$yU�W낝
�
�
<&ˬ#���8FVŀ~ۛ��9�U�1^Li�TL����c
�L(����V��Y58���2�[����,L�A�6���]���L�;�Z�X��'���G>���x\%*_��)_U��ꐯ��`�s�C���:��2�=H|_���=�N�>^�Xr&�:��=���>}5�I9rH�C8�N�4�\�
r�6�d�_J�R�Ϩ��ޤ:��#M�z��s̟$���3D.|�����hyAc!d�]a�"�HC|�-Qz�"U�'�b�7j
+o�@� ���AOh� 8�z
�˩Pme{���ccK�=
+F��l��}�V��
 7�D�С�H��EӠ�*?O� Y�
�@�
��L:�[��
8T��'���23	0����)�Oq���"�	-׮}��{:�?�����~:�1RCb Sy��[� e\JI�%Cg�	R�,}r.��'
HhW�(*��&
��?���JE�D��Mx�k�]^�C����Rp"cL
S�y
+!)pZ�i!�d�z���>�k�����_
!
K��]a��h��/'w��p�e:�D?��:���$�����d0�;?�[Q~�;�+<r͏5@�ݛb���-_�w>N,�?���
+v�Ix�@kXÇ��$�B̔^		n=k��"Jf,$�`��qeeO�_J+3Ht�ݐ꣖O��Y�%��y�� 4���s��.�P�:=��W�#=�N8s�����cx)61��UH
kL��?��7�
1aE���~��(�@v�,�٢Аb �m����Pm�Ps���4M^L�
+Ώ����
�m� �*�%岞/�vwX����tB{JM�uvX.���>�)�]�$W�劲)	��p��Pë_F�z����Q��*�� ���
+Lc
��ൊ�F�!��6�h�ɶ��{�
��2����mw���6�gg֢6��4�o^��
��y
�м�E	�W���Î������aIh���ʛ8�S�^��A�n��f-s��%��;,�ơ��",
2Ϸ�Ho��2�U����
ΞJ�4sR���$E
�s�3˷;,���P��
W>h/�^�x�Ļr>��&��,
�6(�C���z���$Nx�r
������js���M�
+4�
Jm
�_t;�=2�s"�>��h�鱗�E��������b
+-5�x���������
�6���UYzi����`b�P-��땱��m
���`�ϔB`�VS
xps����O�-e],%�Y�w�_�\6d��/
��:��Q���S>�u�j]�
+�Չ��\�MM�ޖ��԰
+C�#$/��hz�2����m
V�á�eЊ�ڸ�7�U��M`%�Fy���Y�]�Ȥ�d�h���3�"0!-)��k��v*��-nw�0qM�~-���Ƽ@R��a-$�@��VPL�YX
��IGBА�s=�̌�[K�[L
�Ȇ��!���M
���w�^b�Kl4ɧ1���4Q��)l�]��=��܃�@��z0d[�~���eL���,��	�	a�3�SG�u?��8y�0t��•�d���ξ��� g��4������g0�H1�
��l//�� 1[���1,�
���9�L���If �L[gU7�aِ�!�� ��۷��5�ΝSg���$��0m�"P9V
+��5���CR	�p���
�$&b�H�+��
�$�ݾ}>yFuN�D�F��1bћ�=���97!�q��?M��e�?$�ڟ<N@�&5=�J�EE�Q��p�5���1G�a.&�)A�#���N
8��%���TKjl}%�:!u
+����܌Å��W6�!V*���;j�}�Dm9-����
H��0vH!} ��]3R�|2�x�T�:�+���a^�ك[l��x������8%f���ܢ�(�!`Y4˸��aJ�'?h���Q��J_�.Xp�]�1 �C�"d���-�*4��>�\q����Нu�K�*�*��,��ɺ{\�
�Y���RJo�b3zU�I�9Z���l&i2�$��r=��D�P�Z-�>��
�m�����Rx���1׾v����ߋ�cTʸ�c� Ϊ��Uy�<�U7�⮁�� ����V1�1Ə�-�	����̽���
+��j��^���c�dT�A���:�vӡq��cy��o__�.�
	�a�S�q)��
+\߽��W��
+��
�6&1��d{25H����3�:�<�NR�!O�	a�n'�a�/L������uƤ4`
�e����`���ځ��
!�
+���L&)(->�%�;k�>h7�'��
���1p�]���n��Tjn�����[�
+�/���+hд.���.��z��������ǥ
���l&��
�8o
�c�LM����fb��G�r��Z~@�c��n��z���iJ�6��#d�X�!�J��d_��}7�n�ՉB�
o���{�R�xʇ.��T�wƓ�0�wT�Je��
� ̍~�TS�7<�4&���i�ѥ}�
���rUPoN���m9-Ԟ�����6�ؗ������$`�)��l_��~8��VDF��k_���Ŕ�3�M|��m�(�^Z�n?��ޠ�	
����Yƻ˨7��
X�1�jL�K�4���-������
?���� �ztJs��9�>�M�a�kU\�u3�V
 {���1'�PDC��3@����
��]�@�!�"�Y;�;�����	
�G_N�a���2 �bwn
�(�dpq��Y��6�:��C.D*��
L�X0ߞ�?����<i�~ǯ���s���̧�
�Rj�#���
��<���.�k �����T��Y�R�(�ٯP
+W2i���!�0�)��|�Y{��*~io��a�X>�>�~��JFO���3�	�e<��,�4o>F� ����
�������Ejf$�ǝ�����G8�����|�_\¡�@��������!(�7�O@���"�>G�8�@���daj
+endstream
+endobj
+1286 0 obj <<
+/Type /Page
+/Contents 1287 0 R
+/Resources 1285 0 R
+/MediaBox [0 0 612 792]
+/Parent 1255 0 R
+/Annots [ 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R ]
+>> endobj
+1277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.771 623.768 261.493 635.723]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 539.902 279.252 551.858]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.789 390.193 372.511 402.148]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [503.308 303.016 518.031 313.864]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.2) >>
+>> endobj
+1281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [325.641 239.195 355.862 250.043]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.517 164.639 124.491 176.594]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.997 164.639 155.719 176.594]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1288 0 obj <<
+/D [1286 0 R /XYZ 86.4 726.045 null]
+>> endobj
+218 0 obj <<
+/D [1286 0 R /XYZ 86.4 210.289 null]
+>> endobj
+1289 0 obj <<
+/D [1286 0 R /XYZ 86.4 128.208 null]
+>> endobj
+1285 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F11 691 0 R /F14 694 0 R /F38 509 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1296 0 obj <<
+/Length 3358      
+/Filter /FlateDecode
+>>
+stream
+x��[_sܶק��R�!�@��ԭ���ฉ�>$�ͣ$����Y�?}vG�e)i'�I`�X,v��KW�t����/N>?�����lqq��
�
�8]\��'�d�K�y�]W��n���U��W"��m��j6���T���/^���8�����$%�"[��L+��j�n����[/7�A�^|{�ϓԳ��Y�sN3C	U���ͮ�#:i�Ҳ1�]|�dY*���
+8���SѬ��������5�mcɭvE��>?�t� c��4���N�&K޹�cF� Z�n��l��0ų��r�گ�y[��Ԕ)"�h�Ia����T�M��~��W3�R-q�b�)#T�ŒRb��:�R�<��I�A��囕o�oW�;$Z�!��avˡ�ʅ�&#������#xs]�eD 
dl�Qy�T
߭ �U�CJ��j30���u�^�LN�B+<�L�����oP�F�L�p %ӗK&��~-iF@
�ګ�$���d��;XF	grXD�O��D�i��u*
-vm�'
�I�$�w�{�::
P�6�
h�'L��FȒ���uIf|Mְt�-�P0�-���﷒U9Y��

�4��Y��s\@`�6�����`Lm�2��ipX�
Ѡ�e�
�ýt=g��T����?��ML��@<�
��a0�X<m���^[v�j��q�85�*���׮�2�pz3e�L���)C�.%��K
+s���}�i�������	�~؛s~�*��z6&�X�z�]v]?�k(܃�T�Հ~�C
opuum���M�wX�j�]<Kͮ������F�<��⧇��,�IW�un7���
�韹��H<~ku���z1�HT�й�]���6��/��6'�����zDZa�(1�������$T�	f��O���
i6ݫ
 �C�M3���^$�6G�7��
�P{
+�#�rK*�kg]�}~DG �M�Dk���(���
.[����n=���!�0��._�V޹^�)�/�&ro��B�� �	�$@ˤ�q!�d#F�{���� �m�u.�2(��u-�$�ڃɗϟ}[��=�Ψ8a{�x��d�9���X���(F��kd��#�Pˑ����
���'>��u�޺wy]���ȝՃ����G�
��4�]�>��ξĴ�A�L c�#����B���h�P�B��� ������6{7>vd��
��`�LN��_��,�npoQʷ��P  �Զ�;��պ���M7PX�
�2
T�
�y������W�q
n���v��{�m�<� 
j|����7e�k7s�5
�e�B�32�0�g���� �)�C;�9�Z��
]'&��_�΃�Z�(�������h�Z-
��}w����~r5L�����1�����u��X�
a�d��99l����m�1Y���Uxf:�����Q�nǶeѠnx�:�B
��]��Y�"����ڗȾ�hy�������7F���gr�T�k�*��% �³�����Q�%:�3w�h�p�SW(/������Ҟ*�ٸ�
6���$
S�.@�`�Ώh<

p���E�k�����b	�����UP��s�_��j��
�@w�b8�m����b�WV(��v%)��a"�8�N�o��q	��I�[��:/n�V�0l9q�!�
��ʿ�ݏ7����#�Gh���U
��-�Xf�QFBZ.�%E��ˏ�=�P�h��p�,�&m�a�q��
+���qH���;Q���p6]�/���6��^EV&�26:�_��g�f�p��a�
�U�m��g��b
��T��;��tfA
VD@���q9�=�<�A�7� m�۬�!8�XV=5��b,'�8�!��!�1�]d�����šj0	�
+D�"���I�� �P�`!�c������#�ۛ�}�$Ry�#1ax�~
�����pM�{	��'X
B"��.��ݖ
��h"�0�&��s��6��S+�)�pZ�P !��2��A
++C%�6W ����ڔ6&��c��w��F�<��;��g�
m$@��z�}�x>��
�E|Z34��ٸo�i
V_����6ʮV���4��1pp�a�?b�By�-��
2r��YK� 3��dɔ�A���I�G8���A�����؄���`
�j̬�]5	�b�XL6j_ı�f��c�S���kmG:e�� ����v!��!��Z��@���F5���z��f��Ve}�Sf�#�%��SF҂ܰ��$Z������������� Ǘ� c	G  |N�9���V�b�O��8z��!YE�1O�
+��$_~�b|��
C��蕊���P�ѷp���6 ��uɳhIl��.
�a��/wTxy
+�
�#����4��		g ���,L�pY���>x�p�
�
f��@|�`
fr`F��d���7Ӕ���s�?�
K��j���V%�k�GU��5� |�
��֖y�#]�?s�Xj$'�8���Pv��Rz�h������M��5�-�G�x��F?�<�)"-,))D���1y�$|P��N>�v����}��$_�'��B�u�ۻ�8"%�m��	84M:��{ˉ��l�g�}���O���k𜘠
��~���Z�>���: _��d
�t�:�	-�%�)���	���C��ZNg
�_oѤ|q$-
�:%�K�I���r��y�}�mp�X΋f����
�f����BL:K�iz�A�4��ɧ[$�n���n��O�H������ ���;�q,������A����gI5?b�5�]>�
:�:�<��hr�r
���Gc5x�,���c��wN��҉��^:���Aۥ��~����T��q��6�U��
3J��
!�F�F�Տ��ap_��!�Z���-.%�?y�޺$���PP���%_�8�9���0��ĊW&}�[E�J_���W&G&���hA
���ӥū1����C��L�<]SD=��
 [...]
+���A^�I```
@T���
��r��2���i��ޡ����K1�F�h��	�#�V+8��weQ=ؐ�N}x�Y�Sx>���/l���$�
+endstream
+endobj
+1295 0 obj <<
+/Type /Page
+/Contents 1296 0 R
+/Resources 1294 0 R
+/MediaBox [0 0 612 792]
+/Parent 1255 0 R
+/Annots [ 1284 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R ]
+>> endobj
+1284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.318 675.733 436.041 687.689]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 561.491 279.252 573.446]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.156 414.261 442.376 425.109]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 99.797 279.252 111.752]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.644 49.651 518.864 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1297 0 obj <<
+/D [1295 0 R /XYZ 86.4 726.045 null]
+>> endobj
+222 0 obj <<
+/D [1295 0 R /XYZ 86.4 384.052 null]
+>> endobj
+1298 0 obj <<
+/D [1295 0 R /XYZ 86.4 311.203 null]
+>> endobj
+1294 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F11 691 0 R /F48 609 0 R /F14 694 0 R /F38 509 0 R /F16 453 0 R /F7 753 0 R /F1 756 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1303 0 obj <<
+/Length 3060      
+/Filter /FlateDecode
+>>
+stream
+x��]s۸�ݿBo�n,  �l��KҹL's�9}��th	�y�H���~}w� �D�v��t�$p,��^���-�z񗫋W�E�H�4�����"�C��QƂ/�6�/A�,W�N�>�yq�\�D?�]�(x�"�)+�~O�o��m�Κ�,��/W.�]]|��p"[p�
+/ֻ�/���f>,X(�dqo��R�a��⧋�_0G1R.��\��.┇\�D|[��
j-�R��9*D�E�Q1s��B����M�d�TO���=p������F�%A�?i�Gne^,�1M6%����ux��r%Y4w�f�l�FYM�p
+��$��
�L�,	%�_�I�s8O�3i�����*�QDŽ}V�f�.V���*I�\�	�r���-�(�3,P1P�
���7?��3���,UZ�Q$��p�#�+@����S�����@(�t$�\(�[yHH
' �� �vfWV�e�mi��Y6�<�&N�������ʳ�!Hy�0"��6'3�d�1��8#0R���1�7���e���掇�0리�G�0N�ǹ���x�;��:+��$"L�r��P^��ZiiI��7hB�����E�z�����
��W�2M	�'ӴUA���
+ަ5�_V���
+E5�=
�B����AI�kk
����N�tmߌƍǴ�̺,69
+>�
��r�m��^/�
+
�f��3�*���@�x����p��;G�gX�`�	K���b�5C�o�kc
�7-�܆˕�՝�vX>�?~�we������`�,�q�,b@��t6�ԥ��[���E��$~#�p��TN
4�+�1x�ѽ~f��98�1��9�b���Ն�1ii̞&���`�[��e��
 �H|����f�ѵ�
T4������.�'��
r��%���S
9�@�g��.r��7����HfP��H��.�6t��ԚPF�z	�4�„�u
9�#�
+~
H+EZY�?d��:�w:
<�X��I.�Y�d1s��ֹ��&�j�|e��yej�-kh�^�`�'fU�-W\b=�
�:
+�i<����k8�Ui�{�0�K�Z�ȋ��t��(R��C
+	ԩ7p1�#$�ٰ�[�̀"�E
����Ί~�hN�i�``B�t"x�CND3��������e �o�_
��@Ww�cԆē������@@��tS�3*��?�AUb���5���*�9��^��O��a,��a��tuI�D���,c&Al����4L� �����|��4{ ��8���5�DE�ðSa�3��l
��

�,|7�4
8W�F��V7�%
�BF�(�c��H�A֡��]�bO?
.) �1��|lqgH"��BB��Y�
ڄ@ْ��1m�s,6�{: ��H'�*�#*�3���U׿:�����Fߝ�_�'i<���
YI�
�Ee=��_
�
��42���6�,�e�P�4>�)d
����C���H���)�
��
��=ZT���� U,�,u
��3��*RB
i�|�:+�c[�h�(��b���V��Т
0�� �� 4��W��>PH0P��Cu
��b
+Ep
#���).%����� <�&:�r�s

�T���P�XOy��v	F��h�

)����L�B��)pO�v�EV���qG1��
>��D��U��i	����u[U��Ӕ�~z>t�
p�
d�� �
���D�"�n
�M6ft=�7�CH�Ƞ^^���������0�+Z
�`�@Iw��f��`������6J!��*=����*w!Z
�9s�4	�>:��я���0�|\	��?N� ��7m������\�'�Idw��35�Aa�Q�{
�kkU�z�^�����=�
+"��?�Q�R
11�_�� ���:�f��h+
��Cݘ
��Ӻt5ͪt��B_C�\Qs��J��A�	�^yxZf�u����E��}�b&�
��^ wՏw_��JJ�!�����u�'t�A��O�o����k�D�x�X��Ҽ�%/��@T����_�3^�I��1ˤ�g���~F��3�hW'����_�c�5D�)~$\(%���# ;��<U�a�
	�#�53�}L0Ry�/"`�^D��P��p`-��"~�/2pGþ\k�����E��͇9�c�<�� Z�
n杽�yאQc
+��q�|:�fĨ5#�[3&�*��Ok�(��Q�bd����}_�|�e�߹%{�ɛ5����24���'��"~�9��2���;Ut��S���֬$��~��
~��MA��d�k�"q�+��f�\���� �c~0w�� ���H��t֢ɱϕ��.�*)�a�?]�f5W�S����#��O���>J�]��R��G�G�����[��ui� [...]
�V�kD�%�Y���8�{i�
9��G��׌0���������u��:U\��0��
��f
��u:�ɥ#�1
=�W�ql5
�ȿ���I������XF��CL�	��澙��q�b�>�F}�D<J�o�����<zrp�3�j8���t<q�c�o*�
�}m�&�
+�92�5�fCR8ȼ�4c�e��:����m��o�&�\����%
l at Z��Y�ām��f�(���h��
V""�5���
�w���
 �`�ĶԵ��Gy�2��<s�
+endstream
+endobj
+1302 0 obj <<
+/Type /Page
+/Contents 1303 0 R
+/Resources 1301 0 R
+/MediaBox [0 0 612 792]
+/Parent 1255 0 R
+/Annots [ 1299 0 R ]
+>> endobj
+1299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 324.627 279.252 336.582]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1304 0 obj <<
+/D [1302 0 R /XYZ 86.4 726.045 null]
+>> endobj
+226 0 obj <<
+/D [1302 0 R /XYZ 86.4 586.345 null]
+>> endobj
+1305 0 obj <<
+/D [1302 0 R /XYZ 86.4 528.769 null]
+>> endobj
+1301 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F38 509 0 R /F16 453 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1311 0 obj <<
+/Length 4707      
+/Filter /FlateDecode
+>>
+stream
+x��;]��6r��+�ɝpd\W;�qvb{�?��R
�3�,E�$��_�����f����E"�F��h����~��^}ss��7�Ye"3ʬn�V�zeU&L,W7��/k-��&N�����ׇ�ͫ����6�w�۪�7��^�χͮ��:��-�M�+�����F�	~w��덌�L�Mv��滫�7W�^I .ZIOL"RmV���/��z�[E"��գ�ۯt�	O��W�uM�N�&��me2)�5���m�����k��������Dk�o��&1���^�mn����(����k�~(���
sYU�TŎG1�|�
9�
�7ʮ@=aP
���=]P
GB&V�R��S
�LopɱM�11�
�f��̊8����{�k��L�(�T)��&��V)E�06ǰ�H UV����s� �Z��R4�.���%�Xd �K �]�"�i��H"�CS`}6R)?��W_�-�9���Dڃ�
�-���0�nۖ�  �L H�C"�
l���d�9��{��OogA+S?D�DdB�@:=�
b�c{'ϸ�쉌�9ֻ�o��q�j�L�,�fBX�9�
+���\��ۢ�ܚ��
00��6�
��÷7���%,J���3$C%�d�u�`14�O?��ë߼9�7
�k�}��	]���=ҋ��#:`_�W��@
+�|�%řI�͗�?
�N<$�# ���6�άV"�$<(0jb
�T��6��x����A���/���	�هR#�7)R���k�.	h�z[
+���HZS��
*y|8ve}O�9��	���
+��ׯ�PT�a`�q��4�
�43i���Ԩ��@���LU
MQք
u
��TG��5w�}��+�8-((�^��G3���h�
s�4:6�EI�����%
z����M[4��#����b@���tl
1ؐ���O�s�%X0���PӾ��v������N���nmO�:�.3��C��V�
�ܿ�BB��wg�n!v�ٱ���c��87�s�%��n˺���ɉ�Te]�-�wO]�q��"ӯ%�?�X�C���
k��T̸O�����=�������9Ō7����gdA��
��s/��ڗ���a!t�TĖ چ���꾸m�r��~�����y{�
$��;��ο�au���-r}�S��	ydD�����
�
Z�Tc%'"HF����E1tp
u:�
�G���;]�v�Q9'��?�#�=���=R���
�;'����ږ�ƮU�p�0>CX`�p,wl��)�ǒx
%�L�l
�pO))h�-���zˠ��c����ov��?��S�@;�?vGP�O�x�s�}~K- 	��Q���s
���A}�\��b�����t��@ �}Q;����?2<�)�Mw ^oQ��-61�zN�B^Ye��?��Cy}�G>c/:y�V5���H �":
������daN
+���
�ȩ	���޶M�sm�����l�~����6wΛ��::�&�o{j~@�,�(��
+J]���� �ŝ�R�b��x.�VR�]_n�
+��8}��9��S*�/g�i�ԥ�	��D�Pv!�ߢ:�������
+��%�]K�,'�3  �g
�B]lx,AU�4r
f�7ʲ���P��q ���:�z_�HtޝZ���|GB�i?p�#���vG���Ƀ��h�*��+�-��M�~F>1:�S�M�<]g
qG*=����2��E�2@!&H��>q�©�O<�1"��C���pm�ڻ����֤�@PY�
���9l�9?غ<��F���vN1H�ef�#�>����P��>q{6R�s20�:aN�,p��sH�
+J7�NxF��Q�
�^���s�]7=5-[���|�Ȝ�9�q��l[!��ځ�`�a*��
8<�'���G�A9:Lj��vԳϽ�/݉i��m��t�F�ބ���&�
����sG
�o0��f�y5?��݉mJ���D��ڢ��B�*J'
�q{��<�o�T�1�A�mc�
Ʌ����������y��t�Qv�qw=��9?
���@'a@���@MN$2/F�k���Puƀ�?
{�8C��
KfaG�
EU,�
%*=���9
��%9o�ڒr�e�T ���m�gɐ= Gp�Lܯ*?
��op�Ηtve
�y��Q���g�|�*��f�$� Oqq����w�
��9RZ�;�
n&�&�k�vP�i��_�
�)��
+�t����F���
�
a
�r
*�B�t�;�P0"Ȳ�<0,�/��#�hN��lz�	�Q
W
��,��x)F�l��ڡLG�C��L=N����'�QJ� �'�X�-x�>%XuNHb�E�91�9
�\�Vm`g����4E�{��!%
 �)����Qs��!��ڢ+wGr��!{��G���
-�e[�


+z��Yɡ����s����9�̩,٘�|{*t��|����
�
`��`�� ����p�;5
���6R�l�m�����%i����}�ڌ6cO���1V�0r�w=�+
�~8�oB���gF����✑]
+Sl8odG�!��rL(�O^����υ�K��P2�%͒@҂�f�H��OX�>�5�i}��
+���	�
+
���?���*V/�zv���}`?�ߛ�2kPzN�INNH5��-z.�4��V�v�)2g�[�wjQRP5
��!���t�1W�ocX��V�fg�-���GC �[�l�ÄI`[�
$�w
��ߐ��e�?
c��/}��
��qyL��Vh�ҵP���$t�9�
�	�0��)�ٓZ���0�a	"S8���]J� >
+#��N�
0�1j�R�&���
�kڷ���?���ƍ?
+�2 at H�R�Mȩ �
+v$0�F�#�ϲ���z��^��"Q�](/�z�R�"��ɓ/*�ڲXjm�C�'g���RP>Y8k���((��ɉ�y�RA_�B�稍,�e|y�d0L� Q��ؘ��2�}:i]�g��;
d!�K��5s�tC�:k�0���W	R�H��/�5��!�������7���s�;�� d����F���pe��
	k^���^�Dū	��6�	>��~!D	 C�
�^�}	wE��E��66/�
3�%K6���	o}�Yg�D����>�z�0
'?����{�"�ŧ
��]|e�|.�
��1
4xIM�W
߉�E�+��n����3i��wz4h����k"��z�2�|]�E0Y�A��\N�\��BeS����/����,�Þ��2����,�
�
�j3P�&]*3{�2ɐ�$��R�U�����J��j�'n�=k�^�[�
o��e-���9�T��6T�n6T}�
�W�3�g��W�R��c�jJ���MJu����
���<H��g��_����
���Jɀ7���H2 }X��\���<������\:�ъ)l]>8��+[x`z9��8�R}���3�2�^"���\�
�	�g�3��/J���%���
�ms<T����UҠ�3
���+#�[�����btZ%�}xe���9o䥺I�]d0Y�HKδ{״���x	����
����gs�(�fL���,)���x�\15��wj\��33s���k��1f�@�N��U�0��E�B�(I<_�Ye�0��Nd�ZL�ZLY	,Y��.��m%�Y\��
*a�3p��|��8��X^���;�
+Q��X�"�2ss�L(CJ@&N�]�����b�C��df��",��$�v�����U%,&�f3c:��NJ��'QKs�E
��Ҁ�J�Ѩ�7
�hbͥ����\�Y�kC�c����-v�_N�Ww {<��Rz'
��ڇ�k~ȫ�
�z,w�C�#�X�Ǵ����5�)
+,y�z8ų��%��.�~��k�4X�%��&ǒ.��x,�
j��ݴ!@So�^�5��;�5�1ʹRȵ�Ti4|'���چ��2i�3�*Z���
WHn}�9ՇbZ.����+�_�M_í�^���e��PSN%'���qA`�T�ћy~�DŽ�Bh�P���6O�("����j(���`��f�ێ����$�k��=2_����|yZ=e��I,�.
*�M&R9��8>uѠ��
|�����Yxjm��b16�^��c�̯R(J��I,�,��
'V~�m�/z���v.��{��2}��J���MK�3C;\�~�o��2��g.V�e��O9��:s�������#���~���
��>0�
+���=ێ`�`bY���oZn@%g��
m�k�:hK�m!����������3��
+�a*�Ga)֖�\�=]s��CY
�0��ǖ-�
���
M?�C�
T�+�7�m���DM
+�u���6�}GlP��00�m��7��2
O��� �T��-d��Lr��# Hi:
ʅ�-J���͊%���?��6�
3	.Ev��&"�	���v��}��"�AE>>��K�Aq�i "���7c��"�E->��}�W�$��Ɇ�Q��m��ۼ���1��%����4U�~rk -� Ej����:o[�I��pw�#x��.�c�K7'r�
+�'q_���9
D
+>�
Nξ�a���:��,�8-D�A��
z��r���n��W`�L-;��at�'C�Z~�)`p5��)4�ܧf
c
���y�|�
7x��ي߼�Yz�s��{�{�!����`z`�=�UVE�ك�.
H�%B���c�o�a�o�~�J˗�뷡X
Te*��3�À��������`��
+endstream
+endobj
+1310 0 obj <<
+/Type /Page
+/Contents 1311 0 R
+/Resources 1309 0 R
+/MediaBox [0 0 612 792]
+/Parent 1317 0 R
+/Annots [ 1300 0 R 1306 0 R 1307 0 R 1308 0 R ]
+>> endobj
+1300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.156 676.287 442.376 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.782 585.415 462.504 597.37]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [480.882 516.174 492.837 524.587]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HiTa:98) >>
+>> endobj
+1308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.872 382.177 353.595 394.132]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+1312 0 obj <<
+/D [1310 0 R /XYZ 86.4 726.045 null]
+>> endobj
+230 0 obj <<
+/D [1310 0 R /XYZ 86.4 650.352 null]
+>> endobj
+1313 0 obj <<
+/D [1310 0 R /XYZ 174.487 317.745 null]
+>> endobj
+1314 0 obj <<
+/D [1310 0 R /XYZ 251.436 265.593 null]
+>> endobj
+1315 0 obj <<
+/D [1310 0 R /XYZ 238.563 233.54 null]
+>> endobj
+1316 0 obj <<
+/D [1310 0 R /XYZ 290.484 65.093 null]
+>> endobj
+1309 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F14 694 0 R /F38 509 0 R /F16 453 0 R /F11 691 0 R /F10 754 0 R /F12 789 0 R /F7 753 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1321 0 obj <<
+/Length 3132      
+/Filter /FlateDecode
+>>
+stream
+x��ZK������-�K
�@\9HV��˥r�u.�+�%�Z�I�@I�_�����C���

�����o��|�����՗o�]�,��.�o�ez˔Y%כ�OQ̗+'FE?6E�~�R���y�T2z�*��j����_���b��EU6�_�������oWv�
��`X��b��������o��4Y|t�v
�R&��]�p��+>�8�lS�Dl��:�
�y�(��먩��z�̳�R&�
��n�лܿ��0��!FۉT1-�b%$S*�
���²4��[h���0�SM�v��bfl�
�X�0���Rc9��2��"�3#,Hҍ�	l���̓�%����37\3�/VZ$,��J�~TVn:a
���'��J/�<�{z{3r?���6[�U]���?�cf%��q��)�s�M�t1t[m�R��>=�[EYO�RD�~)ޯ��n&#YI���"Om�C�+���6�
췂4�)��U�m��u���M����f���vC�o�Լ�/�b�׹��h��ͦ��
oʥ���:�:��
v%�e�`�
戸�٬�f�F%,5���Əa�e�f	����e��v�m�)-+�>�9�E]���.aW�@柋6��5
u����X�P�66Q�q7��侻(�6��JЍ%�v: �7�PP�Igz��4��D:v�R0���
+��Ro77Кc��a.��;��a
�hãu��6��
��qT�;�^�kg
+��8��P�ɛ�4?հ��6d��0�3Ýj@�s�����)Z
�_��.jڜ���
+z�h.�:#�[���v�-{���OPsIR��{;��窛��뗯^���1�)���1KS3�F�&�.`�c��R�T�#����A�9�o���f�L3
*��{s�Ԙ��*�%qOs��r%l켠��
+�Ҕ餗促��ũ�F�T�I-'B�E�L?�0F��`CtxT��������;iD��.��g:=R�H
+�	����к0 O�
�_����R�vB���=j��<��.�ok�;j
h-M*�R޳�68u�9Ssdc�Ƀ6�0���ƾ�=�&&Y<�<I����oVCj�kH�ʂ� k���'�$��]��
�I2oz����C�b�.s
�����
#��������͝o�
�:{sh'pk��Q4�	F��۰�{�H1$~��/�pgJ=Pc
eܠ9�
@��
���l�5�(
y�IK��>�y����X���2�^U.���x�_} ǧ���
����1
�M�󭽋�UA�Q^���0a��jr\	HMS�.���A�:H1���r��d[��$vKYX����,Ƹ����.���qY
+��VtRt���
+��!
�����?œ�A"bH�l��ȿ̨p*4��/��3�"�e<M��-Z9��J��^��a:�i1�h�C`.}���R

�!	����}���еA��
v�����0	/¾LT�&�&��Y
Go4g���h��`p­���2�^R�<�X
+_��|���k����ź��>�jo<V���`������e���ȏ�����
wz����C����ۺ�Ѫ��
*h��7*U�`p�7
7%k��)vhFI]T���W*�!j 8�O
I|7a��:�#�n�paYbfFTVmW�SU�����(X��NSf�Y�k�i��
�	�ĐO��
��'
���N9d�D�?s�$��s	�
���8��im��%_�?s�ˢs����V0%���~�or�یĠ�R=������m�r2������:϶�&=��
�}
���4	yp�
�a���4��-B
��[ʤ�/�+Ǫ�H�����1�
:�RȿNӱ?MD:8�g�Ck��=C��x�lh���P�ʼn�f`�
��Y��EB3�i�Qq)�Gj�W3�ft�w�Z&;���C��Z�O&/~�	�@6Q4��8 at +'�L��Х:��خ^
�k���
+�g�e�T�c�����V����q��ۈP8*8�P�&qz6P
OHYL�`�#�
�B�*�bZ
9D���<�X��b��y�`�3[���`�#A����g����
+3���N�E�����v}7��@�����Q5Iw��b4�1!
�^��^����m^�o�ع(��]�F{
��gQ%���_X�
�
n��r�{Z=v�h��. �ϟL1i�gQL�8\ZDt'ѣ�D��|���U�� �����ԗ�y��"�:��C;��'�p��#�Cd\^�D,�[)X�@%9�Np~$
B��s�Iz
����f��8����Ʒ
P���ޅ =�$�
�!,$�2�
B���6a!
���g5p�
�1��*�A���B"&����
9�∞����.�
}�,W1�G/C�mi��;�r�!��S�xܺ.,�M�kO%���Q�?8PWh�I�5��*�G�:
΀��[�	B^�=��(��Fə��jN)��h%��[[�=nY�+�d�/N�
�B�c�Qpr,�*����A�8��q��
uOT
+7-=�v
�~�M%��u��'0h��Ra
GX���hA�����V��t�9=^���$*�>l񘎕
+3��'�Qx�y�m���t P���E?~%0J�f�.wk9��
�8
��o��y�〭�8�oPW_�i�pVk���O@�Xw
!�.���u-�Y��{�w׼�O����.P1�9���;q�2�����ƶE��T��b�%j�
�^�)ɒ�.x�Z��֙��"�>�8
I�����@l5�
,$�h��3�BR
+�*|35
�P���sv�K@@���'H�<,$����UT�dr!(��ؙ�
+�B�q���C.(6/�`ԑ�{4(dA������stt�Ѓ��N8�X�@�NS\O�z�u7�����"��u��H�r� ���&�u������
!�~���o���s*
�V��
d�j�IP�>t��M
�c�-
@��F!x�:z\�nl���M�)���Ր
UC��Ύ��"
j���ɛ
5 eO�:���׉B
B
|��<̀.Z��@`%��d�\D
���
��P�#?�2�ˋQ���
a��a�v�0`������#
J(D��"3'�t��]r�.�}��
]��AQ�?��
+endstream
+endobj
+1320 0 obj <<
+/Type /Page
+/Contents 1321 0 R
+/Resources 1319 0 R
+/MediaBox [0 0 612 792]
+/Parent 1317 0 R
+>> endobj
+1322 0 obj <<
+/D [1320 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1323 0 obj <<
+/D [1320 0 R /XYZ 279.824 690.794 null]
+>> endobj
+1324 0 obj <<
+/D [1320 0 R /XYZ 86.4 500.381 null]
+>> endobj
+1325 0 obj <<
+/D [1320 0 R /XYZ 86.4 231.218 null]
+>> endobj
+1319 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F11 691 0 R /F10 754 0 R /F16 453 0 R /F48 609 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1330 0 obj <<
+/Length 2628      
+/Filter /FlateDecode
+>>
+stream
+xڭZKs�8��W�(UE���n���$�LͦfǞ�Cf�HY������
R�ȉ�C,ݍ~|݈��{�ws����w2�b"��^0�"f���]�}\(.W2��k�Q�}�$E�4�N�t�.jx���|Z�yr_WIa�7٦�Ҽ��*k諒֧}�-W\F1_�|��ݯWo�>_q`�����f�
+�My��o�K�ͯ��d
yf]�)3�»����o�󏅌�21g<
H�u��f��#��Ja���e8��;�P�,�
��7��,i��С��aѶ�6����E��o�u�\�p�m:T�"�i��jz�&K-�,q͘�`���M�e)ͦI�З�ݠ�'�I���sU
k�n7��H8o�b�#�8g��:i���t}3'�
ld��o�\OOp�|_zA3%�
�d`���rv\3���$�iD>չ�b1

#ᢈI��*����m�A5�@�/6`�8�I�0��
{(X���箕�9w o�
ȣOd�9�]�?�89Ǒ�h�6O{�]0=�?�VȐ
�ѐ�����p�v	��L�i0�3� `��
��k�<��w���>��
^͐�G��A�?Eb\����I����ˬB�Z�\�C
0n���V˧�"�$�T�yg�4ۡ�r��p�--J!��hM�O�Y	?d������WR
<�[��a)�b�f�e�˜�4 �
�`�"�5E�XC��z;��<DěY��
��3\��Ur
+ػ�i[�/i
i�Dg���%-=
��'gt�È	�f?�;� �
�o%�D���a�ˆ?m*
���9�q����
ń��_k�1�� �O�v�5�W#�4��G�44Æ��`����ׯ����}��8z
GC�m�9lv��t?6DŢ�l=��k�zp+%�U	��eI��'1����s�7`�նnh�~��h��}cm'�h�Uop��[��7����a3���Ց�R��'�բ
+̈ͽM��L��
9:�brELl#S*6���mvP�q����}&b��r�.�:�y��
-��Q
+Aȏ ��%�F�xQ�3�O��c9��dַ
=�զ�S�D���ñ�$
ۜ� ��r4�<MN1��!ة�
|֏^2���	I�~L�����TUJ�)��z��#� ��lS$7��#ʒ`5�s$Uf� x�X ��C
n��
<�@�%᰽Rn��#��[��.ЯB���=�F{�ۄ
۾,M��9��h��0��h�ޡD!:6
K�Z�x�cp�M�[�n'd[pˬ�L(cı��@�"m9":@���fT��Ț!�
��m��[
�v	��F���j����vIu? �mS��'Oo4<d��
+�!�8qA���C$|V\P'%
+"�f �~��pڀQ�
+x
��;�-CrZ���7�]�3���CV�

�N������ 9!O��Ղ�}��ޥn]�W��q˗�_�YG��ԑ�4����L��9��55ԇuCL���|N���/K�x@`ٳ9W���&��t&%�<�s��h�K.���I@����G� b
+�#���h����@	�1��t���`B��
YY7��=����T�1�
V�W��{�ń.{�g��%�A���w�/�ob�ȫ,�-"���^7�,��]Yo�1���1Pk!��T�y&��s?s�m�`�X�	�N
X�g��{��/�5
G��
�H3��%-(N��PY@�����2�Z�0�<�H�Thpt8t���w�!��y=�7�O�!�V���
��T�z �T
�'� R��y5t���
Bj�e�u���!c0�Ȑ
+�x�"TU��1�p�i:�/=��i
N��q��쀪���=�,>���8X��K�n��?7��qR��{����J	n�:ty���y����>
��rDge�~~��1ߥ�=���%����
7���Y�ʲ���]E?��7�(�y�Сs0�V�`o�	���o��Q'�KQ] ���eAVF �0�|yd?5H48
�0,pH5
+���2�t?�=z���T�\ϱ'L�xQ+A�<@��
ݫbfS)X�^bS�p�M�������C�ĉ0�L�-��a�u:�Tp��)� pEK���Q���S44|�~��4��\�@	�h(�!4$��0��1F
̙^1�c��4=�������ZgT�
"�ry��
�o	��Z�s D�̆�����L����cm/��ŤVī�™�����T�vĀ�	a]%�nb��>R��)@#3�Z��]�)��ڮ;�
*��>4yg?�T��2������14�(%]�.�vM�����Ćl���E=Ws)H
|���}^���43�ۑ�M���6�کqĀ* �:����XGȸ
��/u�`��ꗨ�l򋱉��T�=�׆�Kݙ{��4��b�z��Y\���Th:s���
4��6##{M �]^f��X�ǚO7�5k�w�ǟu��<�D�PQ1O��yHL�lk�`��t�����އN|J����<p�ZT�"�8��M����,/�ua��
mo���	M�R��s��ف<2[%B̴���\�w�_��`�9=>�ꁳ�O�|�5����n
�- [...]
� (�k��
+endstream
+endobj
+1329 0 obj <<
+/Type /Page
+/Contents 1330 0 R
+/Resources 1328 0 R
+/MediaBox [0 0 612 792]
+/Parent 1317 0 R
+/Annots [ 1326 0 R 1327 0 R ]
+>> endobj
+1326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.698 608.477 470.421 620.432]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+1327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [495.176 561.21 509.899 572.058]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1331 0 obj <<
+/D [1329 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1332 0 obj <<
+/D [1329 0 R /XYZ 86.4 547.68 null]
+>> endobj
+1333 0 obj <<
+/D [1329 0 R /XYZ 86.4 528.8 null]
+>> endobj
+1334 0 obj <<
+/D [1329 0 R /XYZ 86.4 506.046 null]
+>> endobj
+1335 0 obj <<
+/D [1329 0 R /XYZ 86.4 487.166 null]
+>> endobj
+1336 0 obj <<
+/D [1329 0 R /XYZ 86.4 464.412 null]
+>> endobj
+1337 0 obj <<
+/D [1329 0 R /XYZ 86.4 443.595 null]
+>> endobj
+1338 0 obj <<
+/D [1329 0 R /XYZ 86.4 422.778 null]
+>> endobj
+1339 0 obj <<
+/D [1329 0 R /XYZ 86.4 345.352 null]
+>> endobj
+1340 0 obj <<
+/D [1329 0 R /XYZ 86.4 250.823 null]
+>> endobj
+1341 0 obj <<
+/D [1329 0 R /XYZ 86.4 201.114 null]
+>> endobj
+1342 0 obj <<
+/D [1329 0 R /XYZ 86.4 182.234 null]
+>> endobj
+1343 0 obj <<
+/D [1329 0 R /XYZ 86.4 159.48 null]
+>> endobj
+1344 0 obj <<
+/D [1329 0 R /XYZ 86.4 140.6 null]
+>> endobj
+1345 0 obj <<
+/D [1329 0 R /XYZ 86.4 88.678 null]
+>> endobj
+1346 0 obj <<
+/D [1329 0 R /XYZ 86.4 68.138 null]
+>> endobj
+1328 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F14 694 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1350 0 obj <<
+/Length 3744      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6~��У����h�n�d�I3��yj;;�DۜR�LJi�_�� �,�cw���< >|���ngt��쇫�o�
+=3�h�gW7�T9K�!Z���j��<��
��J̿�Eu{���_�9|~�1����_l6e�̶E]��]�?������A�tƺ
I��-�g��Fg+x�~F�0���n=���r����gԏ��G�N�
#,�n�L�{�)Q��_s;W~7�KS)|gE�-��,����~�t��.8%L�N��
|���]�7�eV��u��쪥ӕ�nﲭ+U�-|�X��*�n��
�������*
�f�yv�"��9����'�
�1'W�6�l=��������	��o޲��$I:-�s�]]�6�o=V��$�k
M�u�*p�y��g
�h�)2b�r
׵
�j��B̳�Vy�����
7�|�����ܒG��%'��C�K`����
(x�a�$�
�����W D��L
N�ar����|�\��i
{��O5 �a

�v yj<_�pO�G0o͈ઃ�M��(��߻?�
+��*���2�m�
�>0A�H���/�
+&��ׯ�x>�5lW_Y�V�]�Ģ�-3D�d����y��ێ*������
T!�sf#4%	UV�
+���t����|�NS�:
v���g���ۮ���k���1(7 at + n�)w���no�
�Ŕ���Q���:
+��8��
���[8P���tܺ��j����t$F�{i�[!�n����[|ت�?V$_�Wε�kO�
O�Z�4
�(�J	N�y7�� P��j�u��hnw��ͥ
M�)[<�̀J9SЖ�	y����rEI
+��
| a��h�
�*�d��k
��B�_�0ߔ��1g�6���0p�i[���%OpbbR��d)��ﲃ����NQ1�*�h����!�x�'�z�~��ʺ�,_T�}&8�b_��*]�y.˭�7�( �- ��,����$M�Ϟ���)&t��8�Xph3��ʛ�50��j{��X��_�⸆�H��r5��k�$��U�+e"o�j�/�w���ؽ~�y&��$lb���u�U���l�5�Y��GX�^o���^�`QM0�?ν���T��p�m|�k��j�Xmca�
(*
E����Ϭ�ZP��(>
� �8�Q}c�C}��q
����۬��G5lݕC���'C�)����Z���ND�=��3�Y��4K�X���,��5
���a������J��ə�MS�<GG�A�L�ט%)�	{�NSF$5a����ش��&����&?9�3�`�����xRT�&_ւ	g]�8�ޥ�zw�6 �E�m��d����K�P�$�bWaw~�"0f�\@ �xĉ����G�-w[r,`� [...]
�a�C'$P
g/ҩ��G���S �y�g7�&h����}I
�gg�aK�'bbi0%�ܥ>`���/��ƨ)���~)�[��*�$������`���\9{g�]�`-u�C+�.A[�v]m�Mo��$������!;���.�X!���
e�ջ�<g�����E4b���+����#�9d���eGbg��"t�mv�o��kE���J�ԭ2j�.cs�O`�aMYrf�q�
0C�#�auc�77u�n�#��B��X �������tAX���A��
��
#9�m��]�i:���Pph}�y&8ѐ�?�l!�"ʞ���w?��]Su	>~�˧TE����r>��Դ��P���}���QS�ࢡ1~���m���q�5��Ѓʆ�Q��կ��


��
+F��Pq��>���9

+���̀�ų�#�ߓ 
+�Ꝙ�_^�����L�������-��9�}��G����
+�=^m��y���%n�]y��rA�V!G��U�5�y
I�U�t
�O?�9G��h�U/�)��

t��ˇ��56��]l 2dbf�yJI�ً�"^��$|2}��(�s#�n��I6,
+��z��4��k�cX3D�#���w
k�pb�C8k(*����@�
ւN�^\���
�B�Ɂ쎱�+�4eoD�5�y�㪻�nЯ(�|u$��j�SI "bX�"
��{�_��i�%z�
�"ga�GX "aC���"�&'�B�(�h҇�>|(�*��~l�K�൉	DH�U�W<�n3��
[k��>��w�=�L_d�A�N����������0���/WO�����*ޚ�W��Vɝta�X�m`Ǖ�-�4�ߤؤ_;�ص�:���^6������I7H��
�=�F(l���N/0�x���1p�Q��$��Sh�/��4un�-�.��B�Ύ��
�/��P��烚����h�(�7�ݑ�!1xN�C�3EXqIL,a3�ʁ9|
�[kc&ZOS��#䄹��p��0`�%��}�ޞ��'�ʺ���o]�7��v6�����<_���ǂ ������$58=#�4u%�0Lۥt^�#��G��h�&��&ߔ��Ņ���I���> �-:�~� ^p�7�˺Y�m�p�
+���9�\���hq�M0�G��d�"��cۆ��(���U��.
��>Α�.�B��%ig�\ m\����˾� 
9:g£��cM.��C�?�)��h*�A)���^y;y���B���sw�}�-�:�������U�=.��ɳ�zH4��@K@�
Pcl4
^�)�/VI�W�1�0&D�l�S≝�C
Aƿ�%��A��a����adw��Ӥ��$6��I��=zl:
�F#��b`�"A�?wt���������j����6g�ݕ��PN�O��j�!��{i
L��Lk~G+���_ĵ�J��z�Aqgsx�}5�S���*�������u�$�Ν�ь��%�j?���EM1Ӥ �z���+ 7a��V�aIp��+�h�֮�!�Xᄹ���E�����2��!w��m݉�N�]#{��?-�=x�h�#p}��M��5J�K!MY�s�4Xp�%{�K�6Q��(V�=7�v�D�|E���&"
���5O!��\�f�L�
�zI�IA���R�ޠ�'�s�7��
�cJTd�c#�O)�[P
+�d�_�Tĭ��۱�~\V����+�n���)Q	��t������D����J�9я
+6 �´|��1����*�*���(p� \�G
y &c�ڤ@
^
+�f~qc�0je�c�}x��᷾�ޒ>�φ�0?�OL�(����<�U`Z��6�n�ѯB"G:
+��
�=��Zz��c���?���Q_w��
S�Lu
}�J�|3S�f�	�Ǧ
\�U�(�(ތ,����� `��33�B]P������g����
+e�.4C;[�ˁ�v߂C��b[
w���t���1��G�)�}<
�t�&���h����Q��|�:���)����1W�k�G��
޻�zt�Ȇ��$�G�
�n�ӣ��
+�7�T�9y�<1c	���k5���K�Kt)(���q��/Ex�ZOD�,[@�C�A���dC�
?$�Ѣ �p����0��dx�m��

 �`m���	Z��
\�� ���}��e
+endstream
+endobj
+1349 0 obj <<
+/Type /Page
+/Contents 1350 0 R
+/Resources 1348 0 R
+/MediaBox [0 0 612 792]
+/Parent 1317 0 R
+/Annots [ 1347 0 R ]
+>> endobj
+1347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [289.863 667.521 296.837 679.476]
+/Subtype /Link
+/A << /S /GoTo /D (Item.27) >>
+>> endobj
+1351 0 obj <<
+/D [1349 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1352 0 obj <<
+/D [1349 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1353 0 obj <<
+/D [1349 0 R /XYZ 86.4 644.764 null]
+>> endobj
+1348 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F14 694 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1358 0 obj <<
+/Length 3288      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks���W���1���.d[QI%���
l�����
a�̯O����%(����E��3=������M����7�����G��zr};��ȉ�h�&׋�OSI��LX1}��t�l�<O���&Y-f7y��t~	���-��X%y
�I��j�m�b�n�[�0~����ֱ���\��x~}������U�Q�J=�//~��N�˫	%���G?n9������ſ.h�\
J�T|l
#t=O�}��D[K�5c3�hN��q
+�_i��u���1Œ~�ݳo���-����*��+���'���m
q�
�ڶ�7m
�a߂Y��W��\�/~�m��]�Wӯß�~��f�d_
t�
�µ
=PA����w����2]~V��-�W���������G�cI�+�]�&���J8hW�P�==<<�	��z'�~
\��&3�	W*��]Z�7������c�M�������j^��-�qJlc*C��3FC(���M���,ɳ��e���-�vځ^��-.9�&77
Y�2� 0S5��Hw� ���騙���6w�e���v�-;/
�0����$T�#J8bu�	0m ��WIN�b�/��?f	������ ��j̇���o�
+�]�[ӱpv����Ȃ�|
+r�-�Nր�;�}��)k���b���)
��Q�;2�f�����0O�Lj�#���./V1`f��
���i���n
������>�og��?f��}�u	o��0pWbn�.�7�~��>,��)�&]����]�͢i��_%3\�d&DF�
��1b^�d�*(:Y�7��k�L�u
�T
�����V5w^�}|����G}mC�����jm��F��
��C�����M��q��W�
/�T��J�LYb��(�,���B.���
�#��K8��s��H�B
F�
rg+�
c_�4ɷ��H/f���}8���O�I��o�e�|0�;+�4/�1x����CY�r"-��?
�Y"T�	��EW\\��Ć`�\ ���섁��o�%��I.j���6��qxVm�Ho5�B�!PsLdO��Ip
p0��Oe ��5ʉ�w� TR09�
�Ƅ/�*���R�GP� sB
�ӬV.
���%��]�2�#Ew靕WS�W�CL�cҦح�h�z��>��>���D�^2�Z���K��
MQzK�p�s�
�N�2�8�(�
� @�V� �jO� �=�B�S����C8gg� l)�z��LʾF�����EAW�ڗ�3A����i1s�^u��v�����R�i���~U�(m��͡7�G,,�^CM1��bIx7�C�
���#��0t-���P�vl�fe�V���Aׇ񧂅Z��
MWo_��H�P�3��\QvR�tXI?���p����o�_]�dL�뺡>�9���W(������
�%Q��n>O��v��C
. �p���G�jP�>�^a*��K����d�"L�s�
\cs[�_�
9I�]�)���<lC7Z�rKl�������M�2��}�h�}CE�@�1h6����X��R/~���&���A1�4����mM:N }���p&� [...]
+�dmj�VU?�?H̽��\gy9����s|���$
zY��f���M
tbɪ��%�n� U��#t؎1��aE�~�Y�� 

����Y�.�>��'
�1��r�n??
g(�
����7釬ؕ�C���g��E��n�}SlӲT���2"���崆���=��k0X�8�R�Z�"��K��b3u	��TD��4��,2���.����E��7���tQ���LDd 황��&/@�K�%�t�t��u`_��A�V�P
�ڤ�<��rA��	��������tg[�k-=Ė���,�XS�"d؇
�
+1P�\��+>
+�#�BNˣ���*�	�
�.>�m׻m���Y&�x�	N4˓�<>��i�H�zN�G��3��Z�$"~xZl%~y��(�55�c1�q$^���V��;o��k�Ij|��ũ�������:	�I�A
_~�2���`�\?E�
@ى*y�`[���
+K��rb
u������<]m>��Z2���
�B�����dF�7� �����ԃ���-mQ�X0�Aڶ[5?|@��e��G�����;��xOn">��1R����@6��:Bt
kw-��l��M��

��u�2�V��
�S)�G���He�l����VE��c�#J��=9!��X
+Q�n�{�i�u����V��kU���?�
+��O�pw\j\�R�7@����xe�w��w/��<Ӑ�Փ/�P<�� �s}�%Oʭ"T�s��BU��i<i��m�
+p�]b5�dY5?�����*p�t;����{*G�
�4{��TF�#��3��Ў��ˇ�c��l�LJ
𢡄��i�@mk0Z�$��V$YG�I��D�7�O��
�fɰ������>Y��R����
g����D��|fQU�|f71���@����
P~Y�P��%XM��&�M����W
(ņ3Xw�$�2�;i�A��8�Y�_��8Qh��
�"���u�-/�U��:� ���"ޓ��!��̵�1�Q1�:P���H�{$_
�@AmC^�K���Va^������5��y�
+������^�
+���4�owި\��SoN5�"4�G
�~�.�t;��\�Z�<hu��xZ�A^|��5V=�&��
Q7x����y9���$܃��T���u�Z�%
8�w�(
��_2��AX��#(
+G��ԇ�45�س q�8^0i.C
� ���
���U-�-s��)����qQRPq��zV{��� k;�(�7�����Ih���%
+����Ձ7è}�:��Q�
k���-}
fH!�I��"�=�%@4V�K:�i1����r
%*-a�S(Q)��v��
�u��b���� 7�3�^��i��cG%w��q�@
��71�w�>��?`����XMVTM
�A���_+x3\37���t`#
P
k�O�إ�ȼ�W� ��o�[��������י�UR���o7D�h��
�֘����Jc�(j�#a,��QK.�kYwu{�Vb�[w�]}�ʴ"Բ��!3�-�Y(dư<�tHD������c�Gh�B܈
+5�j{J�����8�����D
�}$�t��C
% �Sm�����\�@�Ǥ1!Hyff�
!�$��:q��,w:��#�t�,������/t���x�����!}Y�%�L(�h
+endstream
+endobj
+1357 0 obj <<
+/Type /Page
+/Contents 1358 0 R
+/Resources 1356 0 R
+/MediaBox [0 0 612 792]
+/Parent 1317 0 R
+>> endobj
+1359 0 obj <<
+/D [1357 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1360 0 obj <<
+/D [1357 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1361 0 obj <<
+/D [1357 0 R /XYZ 86.4 417.504 null]
+>> endobj
+1362 0 obj <<
+/D [1357 0 R /XYZ 86.4 196.172 null]
+>> endobj
+1356 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1365 0 obj <<
+/Length 799       
+/Filter /FlateDecode
+>>
+stream
+xڭUMS�0��W�(���#����-�D98�O���t�뻲l7�.���I^��}��B���|v��
�	�
q�k�xDV�
wD
�)��FFsn����˧h.��'����o~����S��VE��M^�u���.f?f
)b=�"Vj����(J��%�D8��ڸ$�#
V��}�Ѯb�]��[�3i�E�1Œ�_�
��\\ݎ�`��t.���A��C%�N!�.������3I���3K(g���ﮮZԞ�ó�;�8*�C�x�|���V �D���i�9���t�*���B��Ls?��kB�
�~!q1\5a�IY�ee��K���,%
�9�@Gs��R�0!�
��4@�]S�_����
��!L���){������&\>_g��+빗���5R��&(� n*�µ)��nꮰ���Β<n�4
�����L3��ؗgN�ڀ��</�b�N5/�U@!#N���"/�٬&�V���1���㤩�����1���5P�7BE
@`���� �� [...]
u��9���^'����%�#l�� �Ap
I�����
x7�CR
+�gx�{��P�
�0��:a�Y��:���aTa�ݙ�ߙf�@��ε���
����&{
+endstream
+endobj
+1364 0 obj <<
+/Type /Page
+/Contents 1365 0 R
+/Resources 1363 0 R
+/MediaBox [0 0 612 792]
+/Parent 1317 0 R
+/Annots [ 1354 0 R 1355 0 R ]
+>> endobj
+1354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [489.735 648.223 519.955 660.178]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.086 636.268 422.306 648.223]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.6) >>
+>> endobj
+1366 0 obj <<
+/D [1364 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1363 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1372 0 obj <<
+/Length 2681      
+/Filter /FlateDecode
+>>
+stream
+x��YYs��~�@�%X�v�9���DS�\�֕JI~ w�]�
`���?����� C�I%�
�������
��x�.������+y"`��mn��0��Y,���y��ׇ�Ԥ�j-C���ϛ����(�x&��:`R�t����Jr��
I
+��.VR�@�6٦4���_��ڣ��-+� )��EQ�("�?�b�o>^~�����1�&MV5qy1��0
Ox"�CJ[���E���v�m�[	�'約f<ݾ�X�hx�
+���;D�ށY���v�9%������O�)M��
,qd�uw��sf�`ژ��ؒ,��C�E��FݞN���jh�9���z`�_Y�'�
޿�1qЖ��
��V��:׊s�����k�xe�U�
S0�s-���,g��I]�u[
�&�k�-�#ԅ�M�'Ͼ��%E�i�k�j%b�ʄ~S�y��F���^	�.PT,��SZ�
� ��i�b�Vk�"�o+��㒸MĤz��9�[[���WYӤN Y�@]G`:Oq
�H�v��Qj�oݩ�!PSU&u�� ��
B��V��8�!ihΪ`w՟kZ�&�c�(��}��}��1)vÉ5Z�1�n��7�4_��/WE��ʶY��SwCR�k;��2�}QT��H�2��zV���U#���h��v�*q�.�Yn�rB��"ݦu�T�9�8vk�d��ՠ���'bJ��Z7D��
�o$l��g�[!���)�`{z\�"�
�Nʆn)��mC�}&:�D�<�'PlJ���z��
+��{�;������
+.�59�=�
�{�.4�E�8�)
*
�n�#�:|<,��,��E�x8
+ at aV�0�i�/N��\$y�vbT��nm�]�꣺�Ý�LJ
!x�
)
q�|K6L�~;�
QGײ~e���d
�ԑН��@`��7=���!"��G 
IEkIM��6��#�}
�ү�`-DX�O�j8���v�Ҕ��i�������ئ�9k	
��.0���gE�\����
���St(!�%;ʕ��g�)��Z��@;v�m�
H���
��P$��ӛ�A���L�UA3圝��'��
5V��#��>`\�!n�x����q"�;��ԒAl����
��4P���������G���_)��ܦ�L[J�SН?}X "w&`�D�N(��S����ƽ�e'��gs *�>
��b�>�P
B�I��+�y�P�	�-)n\Pܖ�m�g�7��A�	�(��ڗ
�"{S!p�
+�wV��x�I����?�l9���g/�

+
+�<y��G�
+#a
x�waH�,г0D��G�h7����EO�/iW�4]�l���k�k��![����LƇ Z�ht���aFj��u��$�Ne�#�ؖ�	����
b]�0�L�*#�0���Ke�"����^a`��oMiS�"]
Q&
�F��Ѵ���6��uV�!��C$���	hÑ��'C�\����
��s�g�D�

Yb^I<�P�t���ޠ�D�*��&)�XCݠ���5�aP�@l��? ���ΰ`HP�
+-�H3�U5���c�򽧫רG������C�j��pz�
���	.!Iۂ��4ю�V
wo��gZ��@Y8r�[kznK���	�eE�V�5!+䉕�N_�d�&���E~(D�x�w�%�M�&�+��G�3ԓ��9V"�p����,DQ������Õ�ؾ:�?~N�h����>CŊ��}�,��
�@0/i�*�n��z�x�����!�9��H��2fz苼�;�����~)P���d�S����e� �<a��}>��( ���������P!P
+��c��aA-
l�Q`cP{�a֠���b� �
������p+����%����)�B-,��č�@σ-]�����ؤp
x���
0x�w)��U�p�+�$��
&i�&�NsWI��o�y�ڷUB-(K)붡c�iJӗC�̾Z%�v��S��w�g�ꖩ�
+�btX.i
$�F�KZ�J�+�~������Ih��U+U�i�o��������כ����ξl���I����\S�1
U��p�pi{Hߦ�Nb�d
��l0�CƳ�k�P��6��kF�������fw�%�H���@��q���
4������<X:�U�B���<���.��Ƕ"jh�-5�a-�(�g
$
-��Ce�0q�}�{���Ӈ7ח?|I?Y,E���1*sŏg��ݺl���Yl�Ư~I{a�]@�5X�g���n�wm��N1
�ڭv�]��)��)��LD2J)�
��Vzf8��AM*�����q�l���)n���
���a�
�(��A�o��
j�>%5����X"����B�
I�wv-ks�'ƀ����&���~%	�"��;�=�졭XW��,iܑ�2��91�Q�eDע��m�c��r���,�-�<d<�K
�s #{vDI]�
�RG�̐fE����h^
	dIa��?������M�kz�
�M\
Ġ&�,ۉXC!�b����Ԅ7;z�
#���z�h ���bAv���r�a���ۏ�B��e�]#Z���&�d�Q�F-d����Q�b���)O|B��&��
@B�r���~��Lԧ��8S���)��0��͹a�i!/m��gʎ��i��s�b}�5�k-�vHЁ+,>˲�eq(ٴ2�3-�iZr����)�9���
�P�F��d�M�_�T�
�ڿ !�G

+endstream
+endobj
+1371 0 obj <<
+/Type /Page
+/Contents 1372 0 R
+/Resources 1370 0 R
+/MediaBox [0 0 612 792]
+/Parent 1374 0 R
+/Annots [ 1367 0 R 1368 0 R ]
+>> endobj
+1367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.046 252.944 489.511 264.899]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.464 170.51 204.928 182.465]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1373 0 obj <<
+/D [1371 0 R /XYZ 86.4 726.045 null]
+>> endobj
+234 0 obj <<
+/D [1371 0 R /XYZ 86.4 701.138 null]
+>> endobj
+238 0 obj <<
+/D [1371 0 R /XYZ 86.4 416.348 null]
+>> endobj
+242 0 obj <<
+/D [1371 0 R /XYZ 86.4 236.67 null]
+>> endobj
+1370 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F36 464 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1377 0 obj <<
+/Length 2371      
+/Filter /FlateDecode
+>>
+stream
+x��ZMw����+�9���ݚ
�����~�8gNf
+ȶ�``�H&3�UKBHv
)g�� ,Uխ�U]�-��;ع輝v�
�t<�I*�靣%⎢
��8ӹ��U��#\0�G�]F���n�i��K�������;�����O�η
x�
���V�����5�zҝN���#��z��8\-����w����g����!;��\:����߱3���s0b�v�%�=:�y�·�s��oW�$� ƹ#=���)�I���p7A�}4��y�
6�Qo�� DzH�T�>�
<�i�����lE��\b7\�� �ۣ�
���g
+ps�!�\t���ٿS
��u*S
���:\$
Km#E�s�1��.ڂBaA�bZ����U�����`�m�&�~��5:=�8Ҙ9=B�'27��{�xQÈ��_�޷0~�7�,����k�����T�

~ʁ�Y�����kW0~d׫;��AϡF��~<Wˀ���>�
Sjw�|��bÐ&����������
+ ��qDU.�7,p�s
���E�0�(�iEj�-��!�"!tb��� � S�;�R�>�B���z
�b?��&fr���g7@`�O��Њ�Y��|���-���iw����T�ۓ��2U��fDi�����{K��|��v�g�%������F���&W�g)��N�
����C�=��������h���ݤ�(>�ZyIF�x��,�
1QO
*�J�+��‘¹e�����
�t
��?q�{�ʬ��DI(
y�'����2
+Y���=�(�e1�x�ա�zB`$eHQ�k��$�V�5�]��/���oǃnOP�^Og���ե�+��Ż��������a�y��(�&
��p��?�W��O��h�pX� ����
�4H���s��A	!���#�x@��f���e`i08VJv�A���F��7��T��w��,��^���5?s�Cv˾L��2M�J��;�]Jw�-qP#�/O���L��?ܭ�~�p	�PC��5��X��
y�
F�$I=�
��Hxy�����]�=�%�yO�J�"h�Ӹ,+��=``"��(�
��Ѿ�^ގ.Gӛ�,1��<0}�2i��dŴ�aj�[����s��D�C� �R��a ʜ�L�R%��̺W�0�ɖtق�O��լ�f9N�K�(/���,����� ����f 	�e��[���+���
�

����9$�h�߇ɢ���ʽ��
�.�҈a����<����"y9̳���5�v�|mJ����,�C&?���K��&@k��1h<��C��I����
�7�����ڹ�
r֐��=�TF_q$}�>X,�z<�u=�a&码+��`9l�`p��
:��n� X>�-�A�J�ɻ9
k=���	�:�ʔ�Ety��i4s�P�5_�_m����
�RD���k�y�M�z'�-�"Y紎`|�G���E���l���/7+mS�5,�q�RP
��`�
�)4
3‘���j�
,�O�A 'u�`~l�|y��'�؏|��b��kZy
+��n�G������̒�0�*�0����j��S���)�� v�m_
:M�m�B�iV�t��A?�c��Ct_D��-�غ�HRk-�u���3۴� �B��9�It9��
�3�_K;�F�ms
��84fD���8�2�:^Wğ�%M
[`ig���I`��0u$�ow � Sdž�E G^9�'
0����c�`:Y��`Md�&���'u[)��
�.����,OdN�2
O��'�hB�ĺ\
^����?�CA�>cF�$��j\�ʜ��yрʲ���e��qrs
����g���+*g�bf�_^��$P�=�
+������`~6�HMN�r�[է�����r�R�����rT�J�j�5���Ƿ|������JB<b�I��'5l�I
�؜��—��ۼI�\m�5���8��Ť��� Ѥ����=��y,`���B�p��-�����u�g��r�L�L����rL������_OX�9�L>
F��
�
�����
l6����!�*ބhX�)7�Km��`���D�v
h+��@G�x5� ~e{��
SH�"�p3Jۄ{8
����<�AżA���Da�J��|��
��/<�/�V_�/A=3�RǏ��˛A�
p|$΃e���%�C\�6����~�]�ҙh�T���x��Z��;6���b^�RM�=D�
���g�+�{*�c����r�Oд�R(��;�P%[���TyɆI
���_��\=}�O����$�f�V�6���b~�
6p����MS�)� ��=�4��� `�
+Ԡ��Hi}��	��"���]ꇎ����
�L:�]��H����Ml���޷1**�4%EJVy�9�v��Vf
+endstream
+endobj
+1376 0 obj <<
+/Type /Page
+/Contents 1377 0 R
+/Resources 1375 0 R
+/MediaBox [0 0 612 792]
+/Parent 1374 0 R
+/Annots [ 1369 0 R ]
+>> endobj
+1369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.035 688.242 303.5 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1378 0 obj <<
+/D [1376 0 R /XYZ 86.4 726.045 null]
+>> endobj
+246 0 obj <<
+/D [1376 0 R /XYZ 86.4 579.448 null]
+>> endobj
+1375 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F14 694 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1381 0 obj <<
+/Length 3023      
+/Filter /FlateDecode
+>>
+stream
+xڽZms�6��_���M�/�����;��ŕ�ɴ�Z�l�I�BRMs��o IP�h)R�� b
,��O��՛���[.�$���b�$��EDr:���x�C���P�O	��-LU�������kμ�9]�K��xf�2x2o�]Bc!�0��m��j4��rEA
@+�QBf��_~�s��n�
��W�n5<"
J�����+��?8,�	�ȈJ3��i��O�o�r��I�Z�0�����h�����z}�
)�4��虪F_��������H��
El7I�-B2JQ�%;���:d>���`H%��{3��&�黛��Q!����ƫ��.�IRN6q^$����z_���<r�"JR;p�}���x_� �'.0���*��^�6���	mQ8"<dU���#�	k:�6e���%j�A�Ͷ4��v=�O�
xRX�����xt��Ԋ�0�Ǡ�B���_�U�0��C�͏?���z�=]�Y�
qJD�.�,Ndx6�2��/G,6�3�����e��OT\�Z��K�
"ى�*׌y��	A�
�D�2� ��X�M���,���a�Egr����[p�{�o�v
�%�����g����0u�k
+�<�Ȍ�~<:�]p��y2����5��_�F?r_�8�5�}��O��.��-�|Xl7�e��MP�z��!�P�
,�¯�K�
�p,Ϧ�2-J�/�����-+	�,ϓb.��P������0�uk���il{NAp��Ȩ ��$��6���®�Ҁ���h�l��Z��oF��4D�S��f�i!t&s�
4��\Y�M_yqn��V�E�\f�����-�5�ki0T�
&Σ_���"��ʫY�g�2]'��+p�h4�
���
���ڜ��>�pf��>�5J&�b(�G/���3jY�eo�@
Q~
�
�w*��9��f�e0m�ZdF�vpf,����kyY~-C����(���-߲��쑥=��8?�'��qW]� �����t�e�?�v ٱ=���&���x�g� ��Xl� 
�5e��(�ڄ\�i�a&��#]}HB����#j�
��Б�Px���x4�}���1	[�
+����}��&�� `[�ٕ
Ȯ��F��x:`#� +�������_�
l��H��Y؞�G���0�
����{���l#�Ep�Z�� �‡S��=��
t�| 
�M�:�փ��W���Q����߮{@2z
�'��"g��E�Ǜx��#�����]P�P�M?e�Jy
�'�у68�<p(���~�/ ���n`��{	�

�Y��G���?��e /�C��B��t��)���<bD����>��#���F�*[q�Kȷ@��یI;]�c�'��� �|�����>z�Vp���Q?[��|�Ȯ�*��P����G=
/�y0��G�!
A8s����.!��ٕ܂9)��a~7��0�� 
�^���]��,}��ߕ���|�ή�
+�b�C�0��GD�ʰc$���Yf��y\�����S�����M_��<�ٵ�l��
7)��ʼn7<���g�}��UV�]��HoEG�R��V�-Bp32
+0
���աFb
�t��Q'^.

��-�UH��=�	�
+��P^�o���`\�cS��_}*�H�x�SП�|��NV��?�U�_�����e��.S�2�Y�㳕���ԡ\�_� o���O[��#�۫u�gOy�"R�T.$CP�)ff�샾\B)
��%a`p���
+�v	շK�m�v	T��K����t#�x+Nq6�Dz���J�jo�5uB0O�l���鸊PS�f�3f�ce�H�5�m�nd��
ҍ�<�
M�
��6Ԏ����j���|��|ύ$�G*
	a�+A�X$KX��UL*��X@�k��0�3V��f'���b��y�8O��?�+Vu
����f�򱊡�Yz0�9A>�8����ƄwIY�DhǃTڔ]u=P(��U�ê�?	8_q�,��w��
�BAy�le�'e�.w;�Vii��*j��lw�J��HdŰE���B��E�\-fy�1�����ja�4�
C"���_����^��aB�F�
#���U�(��Q,Ο��İ_�
4!s.��Ԛ�xm
�"�)5�X�WMH�����aU���
^\���WK��T�U	���3>,�I�A��Ă7T@�X�GG�xݨ�K���UwHv.����2^�:�����N���z����F�  
c4�R�T��6>��o�P���*a������P(W�P�ue�X��R-��$��<d!�j�ʙ�b���
��yn��Eҕ[)�1Ba:��)h
+-����8)��V'CwI�@�F�f�,E�gqe���5
+.#��f�=F�n[��ܱ	�@�

��~�$�f�UWM��}���c<��I��i��t�h��,/Ya���N���������#xe
��~nj��)����0�ϻ���8n�w�q��]�o��qr��
+��R�fs�F�n�x�e�5r�:
tN	W�`	w��u��6oEb
8��7�@'
v�d ac��<�+��]VZ�{�PD�aAG.��,��Շ��+�%,B����s�����
�
�#�[��%ر�n�>�vai�,Рu5!�fSxӸ9
 �ߊ2Y��� ���w�ݮ���I8��Z���G�G����=�t AM��NJwL�{�
���† E�� ���ϝ\R�������C��L�A������/����c("�I��i�
>p[�Ga�w���Jh:�A�f�ݥb�&kG�	���B��n<B��T/��I��%���?Nm|��:����=G��}�elJ�J��Ϫ~��A��W����|�
+[���"��v^�b ���լ7���H��V��ta�h5���vi�I���
��N[����;�QH�K.��7�ta�V�W3�G/.��`;�@��l��b�|ա�P�WwH�6�q'�fgGu��R�{�����x�
5��
�:��8�lkg��
Y޵%'��q|���~
�ё{�l=<RO��[��W�$|3"
+endstream
+endobj
+1380 0 obj <<
+/Type /Page
+/Contents 1381 0 R
+/Resources 1379 0 R
+/MediaBox [0 0 612 792]
+/Parent 1374 0 R
+>> endobj
+1382 0 obj <<
+/D [1380 0 R /XYZ 86.4 726.045 null]
+>> endobj
+250 0 obj <<
+/D [1380 0 R /XYZ 86.4 299.814 null]
+>> endobj
+1383 0 obj <<
+/D [1380 0 R /XYZ 86.4 184.881 null]
+>> endobj
+1379 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F38 509 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1388 0 obj <<
+/Length 2981      
+/Filter /FlateDecode
+>>
+stream
+x��Z�o�6�_�Om�eE��� }p'�"qr�m� -ʮl
����6�䯿� �e%�S��IE
g�������_�<�y{��
e�HL`۫El�^DA"����~�����J�PI����R��˕����xU޺��6���]Ư^Wp���T��^�󮪚o^��7�eb�����?9?
�|��yU6�?���]l��:�������P��,v����=��e�
�ċ[�wXh�� �Ż���VL(n<�6�B�ra�*#����w���B�#���[~�v-�L�C���;�>ԇ�E^�m�9��
	�4�̭,��4"QSZ_�0�NM^^�m�Ue�c�}��dLm�y����Y��1�:���11�0������6oof֒�qG�9�{��YL�(�xB�2!�oe�j�;,�
[���{	Le,~ʃ��(�jH�� R�i
+)E��X�a�����!�
+M$ "J�R���_�Z�� �^\���\o�<y��B�ș�
QQL%G�Qʻ��w(�
>j+>����ޥ��Y!a���:e%�������u�5�:�H�G{��]o�@z<�ձ��6sDwd�4����n�#8��:c}m�r��l�&��*A�����oV�/4�������io��c�
�{�#�S����=�}����l��%�s���x��O�Ѐ������ѭ��H�8�Tʼn5��Ǵ����o�4�_�/;R)�����W/%lj�
�CUF���}9�j|M���*$
+�����
m��݈)}%�0^�E���&�.j�iD
B� (�ߢ��~��XiG~$}�

-���	d����Lo��`��"
����F&�P�WSFGR�"�)���ؔG��t�`=:�1zl�x�}w��ݭϷo^��Mˣ�B@�
Y�?��X���~���}�߮ߞo�h��ظ6�f�
IJ �� ���s
+7G燃@ 
�mor�
�}u*m��A�ކ6�)�g�}
q-�1d�S�8��
G{o��#G�a0h@
�w�$��t�	2�~�.`
O-��[��ܻ�a��u��ر���'�/Y3�3��pn�/� R۝�V'�M��� ܴ��ё鼾>
2�yHʳz�kl�o�5�Tǵ�>6�h'1�r�-NY�_X	r���t'^{W~p�$�"��HD��'�?^��tI�NQ��y��ǁ���+�:�a�啃X#)eGv��w�o��Ō�&���\�U(������
,�ݘ��ȁN��\��D�šW���E��G�>nrUdu�0�d'�Ȉ�w#��5�CIЉ���J�\�5H�i̓���9�`� ��
���]�V2���*4N�3vϱ�*%�ĵ����֞�ɒPy$Q����J��α1d�h4�4ݣP�ӥZ��$����(����`j�N�
����?�R�l�I�4T�$eT=�>2*G
j
�?;�
�:I��+�o�]lg�#�7�.�
R��w)vF�RN����F�
�
+�
�d���c��Nʨ�R�'W����hB%�*���k��;�[�
�ʚr�!�G�@>��������1�0��)�ٔ�q�Wd�u{c�����R*�a(���?K�:!TujC=^��w	�L�-�`!	�g�HN���[@qs?R@=�ͨ׺�TcP�“��ik54i9���V��]ރ�#�0)��l�T�������
'���j�`
D.�j�b^f�c&�բ�$�	^xKi�������WN	xǚû���4�w���Ǵ!��K	�:�+R�S�D�
L'��j[���
+�Q���S]v@<d ���uT@Y8S����h7�"�.^j�`���c��
+����j�x�-��
ܸ�)gÍ�rA�Ҝv��!{DD����BQ��
b� h�
���WE�,��U��ۼ���'BN���,s	y��ٻb�i��l4�Y��E3l�!Ph�q���I�:�n��֑�H^Vm�LKoe �m1si�Y3܍b6X�6��#s8N& �T� \>� �P�=|�r�z����E�:ݜ2E
`��5d>� 2��|�I�������扞�ZRӡGW�M�L����fK3���}�N�t���=��	@���nK �B��>��@�o���e�9
Z��qAv�2�=��lg[�
�@������f�a��~
K�WBN2r�|�yH�{��h�o[�~�S6$"�;I6���
�jd��~5	��ֆ`�
H7�4>�ܪz�����^��K������j��%���@P��$#,�q��r�
=1���[��v�r�/#>�)�#sH�r���"R����H��)��T�-|d��+yc�)\�uKi�c�}�`��"�=��݊��`��H"t���ТkA��� 	
�l|ٛ�3u���[:�4��
Ke�E������IX	�����l���f���͘c;/��،c�8=W�jJ�}�㪢��
P�%E��7d��ZO
�tٮ�����w��
O䘜kr at A��C>�$��H�^�m�ҧ|���җ�]���*{�����Ӈ��{6��ן�vY_^�=~���
�������Oy~�~}q�n���
 Y<��=���1
�
��;���)�QB�`E����eġ=�DU����)��Q��ʮqD��6�Qδpl`Z�g�`��Q�؛�X�q�$���~�unʕ[�[
vw*R{��q���e�� /&��5k?rf
w�\?.
+$:������ 
�7%_��Ȁ�4g������}w�'���%������H�0Q7���N��,"y����:��l���/Y]Y��|���$f�-��p��o�	�
�
'�Q}����u8��r�
��ދ7��s
aUڭ���GJ�,���F����� �C]0��O8����j�-S��j����<��2��Q6�����O-��Q�ċ�����}��U���g�����"�~�����@�KHc�����إ��/i��J�#�M�`���/�Z�;w
Y�S��O��@�(jRr�]O��I`��.�g�`cbr
+endstream
+endobj
+1387 0 obj <<
+/Type /Page
+/Contents 1388 0 R
+/Resources 1386 0 R
+/MediaBox [0 0 612 792]
+/Parent 1374 0 R
+/Annots [ 1384 0 R 1385 0 R ]
+>> endobj
+1384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.195 613.323 511.169 624.172]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+1385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.106 217.391 523.829 228.239]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1389 0 obj <<
+/D [1387 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1390 0 obj <<
+/D [1387 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1391 0 obj <<
+/D [1387 0 R /XYZ 86.4 610.808 null]
+>> endobj
+1392 0 obj <<
+/D [1387 0 R /XYZ 86.4 553.384 null]
+>> endobj
+1386 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F11 691 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1397 0 obj <<
+/Length 3260      
+/Filter /FlateDecode
+>>
+stream
+xڭZYs�6~����.����T���ȉ'
��V6�JR[�D۬H�BR�L~�v��l�d�"� �h4���f��h����ˣ��E<��,��ly7K�P����`��z�s�By<�~h���2�飼{(�q~��X����
+_����Wf¶�'��
tp�$����G����G
؉f�.��TƳ����_��F^ϢPd��Q��Τ�B��������lg��ۓ�`{L�0��8c!Kb�������\q��8]���Y,���HE痧ߜ����zr�����\�P�|6�"�"Ad��8�)Q$�==	��$&��d����ٱ�@�"
+"x�*�YPS�݁�ӠX�w�g���x$�9D���t�ۢ��8u�۔Ś�MS7�|<F���>;�k�}g�)� i�4XZ�ys��ꑊ�9��cL�M���̲Ppa��--�W8s6��h�挅�2'k�"h�n�T��%b*�?�<>�+d��4]����~��W��5�������ES�O�h47�
V��Y�V��)֡V{���1]L at y�0N�q9�3�Q��Mё�ջ���|cmp��Z���Y
f¬t�o6>-^@�VK�.�(..��)
��
ˉ��
+�'��?��\DHs�9�ѣ3i+1��/]��ɫ��p�r�Y���l��Co/D
"!jNb:_��ˇc9����)
+��$
��.��9Q�rͽqw�x�CVe(yj?Q������7Z�h���u���}V��S�x�,�"oH��z�
}{ѐ�����U	F%W9
+�i�3f�=��,x����2���Y
�Z�)�n`E�S�
+�,�t",�a�8�}�����Aԫ¶�
���hZ��<�3�S
�&��(v��\s
�^o��[��L�� �.ZZ��� �����f)y�!�k��,Ld2>��C�[�K*'��;��*%=�Nr�С=��+�~����27���H�`��šׇ���e�P���;i�"C
��A���eE<2l*�~�ʜ�ZV@�D�dA����_�9
g�
���Hf�1��H����wӃI���qȦF�P�|K1�a(��M8TB��0�N�wO����*��J�EEܷ7"�0�V�n�yA}:���9u�6y��O���7�)�^�1�8p����u�2�tF�M	ZZ�A;
�N;
��h�����3$����WAS��i�V\u6��h]Tm1��ftn����D�]�ة��pc��њ�������Qm>�4��9
�A�:fc�@n�l�jk�\Hg:r�w��l���;���'Ru�t��{��$,1���JH������\а��Q�I1�ծ�ӆ2��ۜ�-4���'I� F�C��q
����i�ݦ�rՑ
+����e�ꐓ-�h��y!s91�^��I���鋑��AVN��fC�W���E�D���% B�������ӳ��&�
���%���s�@��	�$� ����Ӵ�� 
���N�K��]�i�ql�Zc�{C����0i�b���&VQu�L�7̼�w�vs��;�
�,i�&:�lSM|�2�D
�[�_8Y%�4��W$m(~A�V������|	�(�
�W�`G
���C-eC�5�PD�;�}���ć�#&���(:d7����3g	$ol,s���_l�����1=L����;ȱ��u�C`wB,Z��4�����,W�Sn6�=E
+h
l��P�����x!	�c��rw��<|6PC
?d.
�R�=�/�H���}ʆ#�1�G��[-r���XmrJt�5�� �μo��h�'W�}��1~�a���G��Fw��<�p,�3��CPz
d�D U�:}D�S�gdF��Oj�ǩhtߖ�=u�Ǜ��tN� �f���|
Pm-*A &��`�$���6'ث_��n�1�9M�G�lZݫz
�Zح�8�]�;�����vM�+�Qn���tF�>ޚFZ(��BƲ-��1Q�%�
��!w(��"�
+���#����9��������W�A�}z�
�K���>ߙƵy⇦y��4?�Ͼ=!�z���,�������?~�\���8��3�Wo��\��2L����]L{��
��in�J��?�9�"�{;X���=��]�uyR
��b�^>�H���Ɇ�o�F����溛`	�
+��1SK��f��HC[;V��f�g鼝V:_�$�C���(��e����ֳ@
��s�H�%��
% �T�4�Gј ��Pl���f���,�B4vS������u}�B.��+R�3%E��ޗk��1E7x>�K����
���|B9ASڧk����&}}���ƀ��W��H�qkڠ��3]ʧ$�w�
�K�NhKo
E���i_7��O�ӓ���y�#
+e��F.E�~��m���U(��t�)�1&}:D�a!������޸�UN7{
+�q_%��@ǣ�Ol3�Pe�D# !^(��T�zKk�H����9�kyH�0����K�}q��|��Pe�X.d�)C��Ӓ9@����E��q(�H�R [�
ו�!)K�����X1�f�P�[��N0dz��
Y"�B&�C�Ø2���5���iMiMFOX�
�c�맖�,�����`�UmJ<Tis�Th��.���]�ZgK0�R-�Z;T�fp��ma>��1��:�7���o�^��
+}!�b����x%e�U�1��
>2 �ɗ�Q�4�7��ң� ;�Ű
ۖm7�����M��0��c��(L#�	�kp�1ǔ�
� ��
AA�Q��yv$�
�}k�H���
��I�fT�A�j/�
~���K�x�־�����fxZ|E�cSa����>+}J㏈�2��3$���5�E�feV�}_w��M�
�2�
�I��P��P"�T��f�v�Ovc
+G���N��-�,	��x��|J>R8G�_?t����hbL���.$zl
<���
.������!P^��~��kTԧ}�.�egn
୬V
��H���a����
����k�&��	k�8T�����T����I�B
�S1���]uF�o��R_iw9(��e�~�w�Hz�,cU���{��K�ă�rl�2�s����}��;��^��V�7�֠����Ks��7m������� �{����+o�c��b�@z,?}�g��ee�I���v��˖�C���!he�����ڇ�H7��Pwy�!��l�'�'����8����Q_�|Z�2
�`&ʪPN-�Քl� G"s��L�C����b9*�忠=q�X
�jg��
+endstream
+endobj
+1396 0 obj <<
+/Type /Page
+/Contents 1397 0 R
+/Resources 1395 0 R
+/MediaBox [0 0 612 792]
+/Parent 1374 0 R
+/Annots [ 1393 0 R 1394 0 R ]
+>> endobj
+1393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 614.223 526.596 626.179]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+1394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.898 552.706 440.621 564.661]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1398 0 obj <<
+/D [1396 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1399 0 obj <<
+/D [1396 0 R /XYZ 86.4 649.646 null]
+>> endobj
+1400 0 obj <<
+/D [1396 0 R /XYZ 86.4 602.021 null]
+>> endobj
+1395 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F14 694 0 R /F16 453 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1405 0 obj <<
+/Length 3236      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�6~����.�����>xf<;>&
M�RIj��h�;���8ί�n4H�d��}"�@w����'���������2�$,	E8��M␩I$J>�/'?z�?�qH�>{5��;9��d��t�O�m��ɪ�t�ѧ���[n
���h�]YQ�5����&�7�9��_N

�|�6y���?�ϏN�G�
q ӟ𖬀�*�,�G?��O���|�3�ēG=n=Q2aZ����wG�as��l���6��%j&��($�_�\\Lg��񓋓�'/�}uz��������%}����'o�����z82���� &c1�	Ŕ/i�*��3{٢�?N�Q<MAB0��#�1oV4Հؘ������W�A\���T����]���ۿq1��6� 򚒞��(�g[g�(��z�*�T�z�;�-��y���/o���QSp\��P����Z�4��b��9]MQS��Ɍ��q
Β  2��~��6�{��R,�e���.�<a>퐼œ��X*/�*���UeͶ�P�'���1�<�������v
+�f�k����EV��ԩ�M����U���n��V��b[Uْ�DBɂ$ ��,�F?�P�ia��6�Ƭ٩U�-ј�q�H_��ϕ`~�i�2��ٮQ�E�Z����*�E��nP4�F�sT����
�AW�Ʋo�
M~��&� �RX����H�	�ˆ���fI��TYڠ� (����O+EE��Ҋ>�O@��ei�W�UTv�u�����_�P52+d�X�E�Հ��9R�@�8�zeQ���;:��������Y�s��!�r���,��=P�D
`y\e �^H���6
	�7CRz\� S0�z�%%���� �a�y�Vo���Y�	�6;
�V���\ڷi�@[���H�B��{�� �
� ��G��L�U�a�w �3D[�e��1_6��
ks����_|���Gmu���[��
<7�Z^I&B�<�
��h}���V���ա9t�h�A���D�� >�:�7[��� 
�������Yh��O�����ʘ����c�#�uY=��(�g��U{QCZ�[
��2�!������$�`B}�i�5> �O7�pD�\�FB�D��Gϋ"��
+?N���b��)�1����WB�k���P
p�I�i��v�U��G��v�w�XęJ:�pwXQw'	���>"�m9`�"��[	�t����i�
X_f��ii4�4[(!
+�=LM�A1�ƴ1V�i�E]���A �A7��y�
��L�N6��9��
2%��
�'ȇ2a<�c`
+��L���<��LA%Î��n��G�duc:��Z��[�ZmT]�0��r1?`�m�)=*aʖʴ!�)*_?l��
_j�������#x���n���J�T���
@[����� ��c��a� �Z��@H�%0�.���͐:�\��X���7���gW���
�CQ�嫳KӜ����iܘ��s����{
�?`[`Q�;����6dz{��uc��˻��Zr7̚�3q-P9����!����x�܌;��qW+8-
�a?��Y�Y����v��.�u9LČ`�Bg/Tlm_�B�[Q�Kju�?�=!�	��0|ɤ��[�cWƒ��g��!XZU���-�·��
�K:Nu��d#����_��6��:�0ɺ���0H��
D�MlR�@T��H�Z�}���U܁�
3�8�,O�S�$�������ŒG��8�C@��d�^��
!`�B�Y"�两�*�<�][3���CD��6��
j;p�ۈ�Y���&j�*�������f�!Kɘ�	�bW [...]
�t�K@��~,:S26�
�Hg���5B����(p��'�����9ħ$�<���{{.b;�t�����"�Zd�{g}[FX_������R��4���|��Ԓ����_V�~��
+Jg|�#ا4?QT�t�ߕ��L7�?��8�f�-�Fr5sr8��b~�i�����󹦭)������o���Ops� ��;Յ�B�H�;]���Hjӑ'�]m��HW����4t����m}ah���T��u�Lއ�c�!h�'�(�Ɖ3��y>}G���j0�	^;K@�')�+�
��@��O�x�asL�L
��P�מ��S��N��w`,ٗ6�v.8��6
�
gދ9P�,}�TξϪڸA\�i�5��p�U�(�lEo�EI����Wm1>-�&�pʣQ����cc�A���c�Nצ��Z*5�����uf~mJ�PCh!�|yrqq� �@0i��hҫ���WԜ�
D`�L��'�
�R�wO�>�>���������֙�t�
>�ڕ���@�Sz4��O�pL���x<��զ�����E4�7pw������B����(�j�z����������77O[���ѦF��h�"��	٦���|�|�ͯ��*|_�L�Z\W���HsB��Xd��h��t�3؅��gb ���
���y�x�,3�
��/۲�m�=;E�����
�j������5�eG��s��M:a��W�ŀ�,��6��\q�_v������]��}�F���!#�v?��o.�K�����W��بW��`��8�#/�E[s�/��Yo�F��|���|�ƓHh��hkƑ����I��jTV!
���o7�a
+L�*��e�;�7UT�?5��tH����
Bݢ�зDE�=m�F��i�o�N�k����A�cX�E���}�Dދ�5ŭo�u�rM�5t
E���
K���
+��э���*]O>�U{+�V൥��vrjޯ�������r߻���#�ڧ�X��TˉKv�����a�`,3��H�-s)
vrs������-�Gm�>RZ����ׅ[����<��c��'@��Y��0�4€��Q4��B�����D<�O#m�u8��1�]��L�
\�I����
�Z��UwO�C�hh Va{H����^��\��T,L
����&U�|���.�q{���V���qxN*��AS�n�����7��+���'7����`us�A{<���Fa�_q.9xj�4���c�����B�a
+endstream
+endobj
+1404 0 obj <<
+/Type /Page
+/Contents 1405 0 R
+/Resources 1403 0 R
+/MediaBox [0 0 612 792]
+/Parent 1374 0 R
+/Annots [ 1401 0 R 1402 0 R ]
+>> endobj
+1401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.329 634.948 394.052 645.797]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.544 50.205 390.266 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1406 0 obj <<
+/D [1404 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1403 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F14 694 0 R /F16 453 0 R /F11 691 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1409 0 obj <<
+/Length 3684      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�6~����
jk1ą�f�g]�i�:�k+ۓ�>=�D��J����8�~g0 x{��ӾH��6
f�0��L���{������$�ӈG���$�|9�y�G�M���{/��t&�m��
�ҫ�����Txu�r*�w@�E��6�����{��
+��"�6����
����ǀ�`����h�Xソ
+&Kh9��H�ɽ귞H��
J����O{���@�a�L���,�hG�wY�h��E�/Zb���]��<5�6*�UQ�YM��i�5n�٫��h0���OEL�ͧ8
�ۨu��PH��ӷDi
W�Ǖ譈}���)O��ާF=��X�YOy�m��k�3�����w5n��"[��U�`Dh�����-	拄Ofx2�ӾNO����x�jX�5������vv��.]�\\
�ߝi›��G�g�����
e�✹�������c	[P�����X��81]
+O�	�S[���MD=�zA�%���*��v�
���s��~b7?PXg��5��Y�����O��dY�����e
n�$[T��DN at S��O�
+�OÐ�Xgm]|rmHD��,�ݙno+��p�-�S/��_f7T.�e��ڢ��{���T�
ؖjjV��1��h�\��wu�4�rF�j��V�5����j�{��T��ַG����i�]W5���Diz@��zxy�O6�+��mY�ti�L}Y�5�c[�R�	�}�I�x�N,H��e^+�bm�7`W��w�
+?�G�~_���I�NiV�4���H�8
C/[m���u���jc�ó
+�w5�FO����w���>�d��ShB���<��sd��M4L޺�3�~v^
l��%���&��Apcӑ\򺮴y��vS�T6Z�����P[��&5-��^���f� �FC,�����Bˮ��R
��ű{��v��
|�vFn9�
�K,b�
_��
�#ЋՊZ�\�(�MC7�-���
+��۪.>�HEIW��A�*�00`���@4@��H|���+5�b��I"�C��iZEb
e���
+E�
_S�ilʔj=�z2��@�~H��g�{�
�
.��LS6J�@��PP�cN� ���n=sֽm:M?���<�Mg���#oM�d)�����B
�n��m�c;�!��ڬ���'�ȏ�c������x�
WP�o�v��"�k����8̄d;�\(�(	
�tzہ K��|"���I�X@�L$6P1�P���D��T<I��tb.}
\����M"�;
+U�CF�Li��������C��
Z"t?dлz�1�@�S�=��uK��A�0�-iY;�*�����hA�p���c����BP��Z)u ���qD@`��R�("��R����t1��6�(2A"�52Z�/2�*�A+G�% A��Q����
+�-�_j�K���,�00��L�4q
+
���&\� ��=X�[*��.ao�h�=k�ǚ ��\n������L��[�t�����Xd�8B�^�'��3�c?	嗌����
��/��B$�-֡ �c囑t��n?NI{�^��ui�g%�e=$k�zM���S�ؗ�=<o1�����4e�i�ߵ���%j��;Rr��d��dpS>�ϡ&�Y�������Ρ`�`TK���0�y 9c�����B��&��V��k�K���\�6����,c��
+
c�Y`<[Q�;(�$B���6�
��G&�uQv>Re^�:�w� '��M 8iwy�{�
1�!�xe^)b�I mÖ@��^ۂ��:�A�(@��w��D'���-��6�KZP��
�!t�^�b'�
+}����c
m2�y�C��d���-ZA�e��$ްq���Z���6�M2IJecT�U�!jV�I��.�)�EJ"�<��P�:��%:ܙ;�v���<���=?98tz�@X��զ-J�!����z�M�7T�:� �Ұ���
O�ٵ�,�U4���s��4[�]�ټ�H���& �jCD
��ĕ6��}T:��4�;�r�-�0�i~� �Cf�	��3� ���ѿ�J�l��~l'u�	�;�p�> ��0�`�z��1
 �4��:���������
S’qj����`��N!
�[�"h<T�Bi�R�t��z�j�ѕi�邢`�F���S�(����`���Ɩ�o��x�v~|v�)x�����=<хw���Ě�lA����S������Vx�����	3a������R�������EW��GfKܖ�W�cu��'��U�-�$vX���aj����X��?P��k}��Y:�B�s��v�H{Ŀ8@[�+j鲤\g=U��`8D�� ���ӻ⢨CG&.Rp0U��+���I
"O1�Y+���8����wV���&]Vu]3 at +tВ�Ԏ�O��� )�c0�A�_ƺ\F
���~��€Z��8 at -�/�l�jz
�XN��hX�͙NO�1
�E��M��-�;b�؉
;F!��e�ϼ+���@�ئ�MҌ�~v�Y
%U��DZ,��R�&��bS�&5�Zp7.�	�١��9p�.s��G��d4�RQX����_E��"�i�!M�9p»�����d����$�� 
T��H2H����ǩ�D[D2��C9B0WV;��6�x�UM��$b����"�I̓Z�B F��{�@�
+Bn�	΋w(z�t˝	ا�ަ#�P-�:�J�$;�8t�%�C2/�,�&#������IJ@
���:�;��T��T������D��*�O�b_1���s_��Ýwn��c�0�g�v��ȋ��%���m��T�W���>�v�(����
(���'���qF�<r�b�C�7o��ylW��J���ǩ�p��:�E�
F
�+	6
�h�]@�^,7�8�s���>d?{����6CnS�55�ɏ��-дmo���o��lcNc�]��X�(�'
7~@�>P|]�n�����Z"�"�,D
r�JA at .
A<�Y�G�
���T�
��^�z�.��abU�
���e�G@�@Hh��R��oh�4�{{
�Ϋc�|_�P
P;�kӥ`�܉L
�.=�I'(�
O��&�'H|c��(<y�Ht²��+�l�
v�D�b��=i�u�m
��ASPָ1�Ax���0NC�T�"@,�ȗda�wE��"Ї�HV�P�)_�8J�Gl��7l�x����M��mSwCt7p�BJ�� ^|�
v3n:nx�|p�Rj<T�=��93t at 7ʆQ?D��e�fD�T��qD��.k��%�V��F ��Nc(�����+�����K*�o�{�GDb}
[�m��� ’��pT`�鈣��Y�.��RJ����#<�N��O�L�L����$�`��>K�]��nߠ�
��I�&*M<|��
 vW�Zp��8��9����-s�
%�'B��4环�05ƾ��і�`6�e�}Y�1�����0_NAQ}!��Dכվ+qb�ƚ�;�e'�&Ϩ
+����>��k$��`Ԓq�K�e��:�o'>�<�=��=�M��E�b>dٔnN�K�˭S�I�Mf�y8��ov��|���[M�r��� :>0J;�<"c�	z���:.����
�:9��X*�r��;J�b��hճ��Vԧ9j�۪"_ݗc;�5g"��xt����G�g�i�l�
��ϊ
�`������%�-sg��h���'�

+endstream
+endobj
+1408 0 obj <<
+/Type /Page
+/Contents 1409 0 R
+/Resources 1407 0 R
+/MediaBox [0 0 612 792]
+/Parent 1411 0 R
+>> endobj
+1410 0 obj <<
+/D [1408 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1407 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F11 691 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1418 0 obj <<
+/Length 2212      
+/Filter /FlateDecode
+>>
+stream
+x���s�6���W𑚱� A�o�k{��[���\'�-Q�(Q�GR�_�X�"%:�;�oz��D�\,���p�������b��Bj/a���X{�fʋ��i)�������t&T(�q��T���t&c�[����[��Z�ˌ��K���-`��ѸuYQ���|7M���;�����vE�L�����_�&��ojrO8�B+�-7��ro=�<�d{_̸��d�(�|r;�v���f�*�m[H���D0i�������Y���������|~�xwzF�yȯ���G��o.�a�LƁ7
4
�"��Oh
+)�|;
b����i�-u|�"LH�@�8d\(���e��	
	ܐ�&��`������idAS����i*�|9
"(��V'9k'�n�ˬ���5n�����J7t�Cͽ��qP|&4K�5��;<���ie����._�3�Y��Ae�$��]��{��/
0
��" AG~Z�ٱ�$��w�[��=���h�"��l՝��]L�����ț��V�c�.'�3,d�
@�
0�`y3E��� i2������i�,m6�L��]�l��6K+�A�M}�W>���O*p��0_���7U�,��
�Ƶ�Z�s,~�nS-8��~Tm Щ�eP
�z�K��7��3;h�!�֍����zv �,�u���Q�L��x|K���>����^]��ܜ�t��m������陭�x{��پ���A�SC���=�xʘ����:!���.���_j6�+��,��y3n�X�@1��A� ��I��&�=��P�?�GZ�3�����Q‡�
t�����]X 
���X%ř��N%��
+�&D~+X�.H�
���
+�U���){m�z$vhWA�4�&-hlp;��W"t,��0�)���Q��†&�L��Vx���w�	[���EZ�p�c֐B��O�n>r<p�%ݠ�i��[�"F�
��-Td1	�/����L�H�©��jF}'�0O�u���
U(��{@0�C��yʐ:�m0|��l�����Ȫ��=4�v8��8aq������B駵*��
���ʬ�I0w"��lbtQ�*��aY`�B[�������
�����g��h���]e��]6���(��Juڿ�΀�>�\�i��a
]V`�K��hV��"\��#S
����h���f}��!�h�nL&���~�n���-�N�F��K�F��{O���b���K�ǘ6�c��mь9L���S��p��4�
+�:XCt��Kh--�/��b�I��Dp�pI��>��2Ӊ���[�v���#��X�E��a^[�i�M�)�G�֚3uh���S��
��y�Vzl���*�v� ±�Bb^�/�9��VU���a"�UQd�ʸ.�q�� ��V����j�%
�:$FE���A#bb� �9qqI诲zY�;zJA��1
������
��x��q�� q0�جn�]f���ms��63 g��8�Fx� ~��
J���4#
+k���]n��k
���߼=����	y{=ءb��tO�oqi����^	�%���$
xc��q��|vv9o�{Rx�0��ѫ/��
��^'T�qciOܦ�����!�e��
�1���
�wH�R��^H�-CG�ѓ���
���@����*�9�:�P6�M�a�3��>�@�W�[$	��Y��T����rt{$1:

����
v���_!�P3���+d�Xē��f
zF��͆�z�֩@ep�M3䶗;r�y�-\
�:h�$
>�@���/y9҅���<��=�,��0�;sdYNK����r8��h��㤏�\���n��V=l봍�JZ?k��W��YZ
��f�o�pH�"D�!�H��{�
��A�� ϩj(�=H��."M4>IsA 4'�'��Os����SZpc��@���{�K�
$���
1#:ۍ���,�
.ޡ�����@p_K4$�5��~�0�S�|�o��s��ù�����[o��
�μ�3|iҷ��,�E��w����T�k\
�њ�P�&�d3s/T�wۦu>�η��D
4�eu�j��gc��Q:�@,Xj����ޣ���?ĉr��O|��3HQ��IK;t����
��S�
 #�x���~��
+76�)Xᷱ�j�)�F��fA��w%�:�Gc��ݺ��x��%��?�Hy�f�ŽWgV��v�I������+�q���
��h<����C��y
+endstream
+endobj
+1417 0 obj <<
+/Type /Page
+/Contents 1418 0 R
+/Resources 1416 0 R
+/MediaBox [0 0 612 792]
+/Parent 1411 0 R
+/Annots [ 1412 0 R 1413 0 R 1414 0 R 1415 0 R ]
+>> endobj
+1412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.004 644.772 397.727 655.62]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.266 469.165 395.989 480.013]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.495 276.621 394.218 287.47]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.214 84.078 406.937 94.926]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1419 0 obj <<
+/D [1417 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1416 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1422 0 obj <<
+/Length 3420      
+/Filter /FlateDecode
+>>
+stream
+x��Zms�6��_�Ow�]�o|�Ng�u�Į���L�v:�DۜJ�KR�9s?�v� 	J�����> ��b�oς��f�^��0�{y,�Q’P����(�E"a���|��X3�?��
��ӛ
�j\^�Ps�Q����})��:/��d�u:��%<�x�Z�����X��6=�;����ǁ�`���5�U8�-�~�-����(`2�G�f�r�d�������w;��
H�u<
+�x҆
+d%�wM^�{�xUgդޟ��j����y6�yU�j�"{�ܾ<V�Z0Ű��
R88���9����T�)��|A�g���3%gԹ��}��K>oY�.+j����s��/8#�5�
�fC�լ���D)9>�F6F(�b4�%�J!oh�ymy��,^��-������it�И�
+���IDFL�Е��ū7��Q
"�
d�V����~8|������.f<�C���}�i؇TkD;)��Pk�o�V���s0�ts�K���'��&J��Z�m�k\K�$
�PL������'Zh����������!
�������
�
]����d@;"��ys��,LD'<�N��r')&Tw��A��{T�x
eU��T�
+�/C;l���F
�No<\%`�q�o���%y��1��HQ�"�_S�^�fY]_�/h�XL(���ɿ��
+o�5N��̖e�@���Jcҳ٪��9#=�:fJJh�,��(O,wU6+�y�^��ת�ZSR���r�ȼD�d�h�v�}ku9�NHG�g,�[�.zJ�..��+�
��]�D��N�hW�K4�]Z���fe�M=�m��d��������=���s�l*$eS��|�ңS6h������lfg'E�t	���O�g��t:����M��M����@J��jk��#.k�I*΂d
.@}<
]3
v�7-�>_�0�!��3-�D7�фA�� ���Y�3	���bgk&ˡ�
�&��4��%�L~�1%�+Xc���>Q	�JU�6K�`
8$M�e^��`c+��뇺ɖ5���_=Ћ��:
?U׿P?�����
�r� �0/��|]ٗ)5P_��B[0�iNN%6��E��!L��#9�~^N�K!��QE	���:2�
4x@�I�5Ш�(ߛ��i�,E�Y�\S�J)8(�
�����bQe�o�����&�x����ug�(���Fw�����=�]��� [...]
Y�
��@%��f��nՠ��hmn�L#�\�)de�noz��A�D��N=!!`��}��$��Ɲ��
/
�O��|�

2ؠ
+4Q�7�Q
��w�4M�^�D�+��IW0���
���3<�%L���Ȉ0�����u���Jq� P���x< ��ce:أ
�_K�[od_��2�۔�ʹ��j
I������py�nz���O���a*5�y���ya����>�O���m
}h�~���� P?0��@��Z��.Z��}��O�k�͜n�R��x{ur��r���~�ma}�r}��� �n}v�
mlOwۃɴ��e=c���!�
y�X�\��NoMڗptP�������PA�z&�V�`t��5���f"��C){4IB���h�0q�
���j����R�D=a� ���݊�b&	�u��Y�dRt����� FQ�[���n�f��=��Ѻt���L�a�}�z�a�k��܍�@�
���&�	d�C�5�U"p�R�p¨���<�9aaԃ�k͘ő�)y�-����Okb}O�}�3��(���;%���9A�p���fHy�V�^��V�/�|�?y����q��% ���L���DF�f;�jn�pTŰ��
�
���6CӒ�{QWރ#w�b����^}G�S�B
m��x��G��Z�:�SM5��6���y�
+�r��f���I�	��;��ߖ�S�;HPw>ns۾��&e*ܝ�˭{ ��A;�З"��S�b�� 9��7�[x(LL�1]�0�ř�7� 3�Ρ�88�xML2~"�!��#
+`�����Ng
��M�}��		���q�
�yt��������<x�)�S�$�d�����ޤ�C�*�`�1h��U�ZL�`=�
A�B��Ȋ#��zk����
d�A�Gm2%4
w�o��襀p�� �3	��I���l��W��t�-! �"cI�T��yڤv�� C��A?��e+�ھ1ݖ��:I
%,Z�twi]��E5���%���������p[q�
f�&����tbD��f��
&��St�t\��(ϱ^!!_,fv�?We���+I���տ�%6�-��`-�Сz�Y6��
���&�~��I2Gk�΄�,��m�#(?�]�#��а�$�1~��~�Q��
G����3���/K����1
T��)$��*�l�H��oP��E�ʛ�F�Ѽ�U���d.��qb��I�Hdl�O��&
&�p��Di�
+s!�������&5�
+Q>�Un�=�h�sQ���g�Dc��̨]!t��8y�`��	�hp�󐈛��~h&�� 0 ��}�:���JȒ��v�7$���
C�,A�o�t��-�wK}a���-���R ������7��}u
�
� G�
(�#<I8���ӘY�\$���l���������k�
궆�
�n�t
+-H�d�f�\�H��WZ�ۛ�`]��N�ˬ�n�$
�B7�3
+0����T~�l�.�6�/?
�M�R�5
+km/���
/�e�O���˶*K����T�� ���
�;�Ɇ&��V��wT����I�x���
8- ���x�d�7p��<��O�ɴб-�x�Y	P8~���������S\��8 N�A%Eep��"�j
0F�$s:
2uO�,�b�
��oI,� ��wk��?�
�+1~�*��p�Gˁ�F$�
�H�xp���P�00ˀ�n��bis��4� ✋�鳰p��>>�;.�H�
+�(=�5�q$
���1$�K���{B���o%mG!
�H��2v$�[&�|
��I�-�:T���o��������k�(��[�����X=�E�C�n�:VO�kHl��� ��ʽ�����!���¹[�ש�?R�ս�z�"g_�ꪽȹ[��;�
�g�-�p���	{ Q�u���a~r�gjsLp��
\Eh_�?^p��4
�X@/��B�`��v���L���YSZ�(�ɐa������y0�V5X�{ǽ���z
|�5Z�`�"چmeoW��A:A�T�S��X�V���.�!�&9��MM�
{��tP<�k�[��T�Z��R���Z
+M� e)f��c9R���G����a��
�R{���k|	s�
�OCx���
��T^���a��/�t��}5��G���)Z*5
����v��e��of�,�3�I
�6���t�?9H�
+endstream
+endobj
+1421 0 obj <<
+/Type /Page
+/Contents 1422 0 R
+/Resources 1420 0 R
+/MediaBox [0 0 612 792]
+/Parent 1411 0 R
+>> endobj
+1423 0 obj <<
+/D [1421 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1420 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F14 694 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1430 0 obj <<
+/Length 4116      
+/Filter /FlateDecode
+>>
+stream
+xڭZYs�6~���Ӯ�5�A2�<8
O���ر�M���]Z�m�H����ȯ�n4 �|U��@ ��F_7Mn&�䇣�G/_K=�X���,�'�fj���i�'����i�fs�bɧ��fRL�_��2UӼ§�.*
��:_��]
O>]�6��iA���q���,�����{����ݦ\�]YW��団����#lF�؊Y��d�=���h��7o&�Y:�l�m'JfL at k3�<��(n3
�G��q:�g<ѴѦh��.�e���f"���n^��|���LI�m���H
+�4\#j7� Ι���p˨����D�DQ�J�D�會�e6�����<��5n2�v�3:
h�_ۮ���m�۬IW��Hݤm�.hxS��#�`T���I�%�������/д�竬��g#���vKw�:��X�,��/�H&�e�Lq�b<�9g
+��I�C�Os��پ�y���4(��e�U���r3�+l5�@-�ͻ;�a.9K���� �����Й�c����<)8�L��?<�8ғy�T"��!5�,MԡB�h Ѹ����(m��WL�@qe@?���;�u�>��q7�� ׂ%:��sHA2%�r�[�zT
(�I:R��B	��'����T
v
��4^��$�
+/��ۂys����Y��N0�bi��/���-[K�
��p�|pkŠM�6�G������)�"��ߟ�|^����][�"W��۲�V�L���:k�M���
+,o�����A����6�b��,���8?���9f��Ǒ�9�.I��MѴFoh�j
:
Py�\ܷ�
���f����us�	a�H
N�z��{N�
�0:'�6�:�X�
+.�|,��6'!��.o���SӮ�P���G	8����۷g'���xB�k�Y�
��(�����t�����9n��{K�wM�X���ƚ�㮄 M�!�t4��}�Λ|U_�y5o�MޙM�d+7x�G3��f��曝�)�FK���]S�ɫ�CA!G�
�I$V�ظ�7��\V74d��:h��5==C�ٙc 2����hU�y�иQlx��g��
0w�^S�s;��7&h9��{� �G�
N�b��_��8�e�x:��"6r~y�DM_�������6.���m@��m�0(�X��m ��X���7����-i[��
&C��$^-ޝ��\����"���?x��G.�`���M�~0��p at 20�:
�C�
Z��
`DH���;���p��ޝ�  � �h��v�&b���h�
'���(g�D�홛UZ1��bM�$��^1m��ΰ0M�`Ӵ���>�*0���M�A�^\юC���Cox~y��P�
+ at Z�%0"K�
+��]Gc�6ڇB�+i�#L *����/B��>B��W�F�J�'��x��K0܂
��/u�&�
[�!FHc�*JY"� ����5�C\f �<F-7��Q��0����{��"�K�

~
�E��\b0���C�?���|�>�’
�?%���ׄ���� >T��C{�Tc��c���SR�8c�"@A��!E�j!�qGAzՕ�PA���Y�Тc�M�*ҏ��vMe��!܎y��SzG乿�G�!��'�l�� Qc?�Eހ��)�+�� %Εo�[���m`*�oi
.n!t�Y�M«��I�����gNt����4����+�
?6m�0��6Lj
+!�� ��',��3ح���AN����\E	��L�q1��#������
�&af�Z�[`���Mu�p��!�)ݛ�$�a�s�{�o�
�u�Yi����l'5�׊�`r^ ���6��.�Q.��>��F����3
��H�3
���ȋc-m���ЖEl�L�pu����MY��j-�]���
+c+���]ݕ>��H~�@
�_�-U[_PNP�	��A=� ���מ���X���nG"�&垍��=
�U�_
�
Rލ*$�^ �`�-�,B>tJ��ŏ��`ƳqY2�:�K����Pm	�ZWúI����C��VMa�]�� �EG/����`
5
��ݢ�E+�ў!�*<7���j]��gT��ޖ+�}K��:W�𱣧�Z ���L8���,6�;T���ޮC�8�D�4��� ��g#� ���Y'�s��[b�3��7�
�-`�M�Չ@�o�|K��K�o�_0�q��ZK+��
=���{	��(
�+t���tzh��	��	ev�	��:�����Kp��_�J��x�[�뵻+�9�)n>XM�R=���,�F�2J�PTW���0�ʵ	����aE{/�XJK�
<��s�sW9W	Ӏ���
���"��W�i�l;�r��W����s��Ҽ'u�͐� ���R�d�/lT�l�0���@�c��J ��9����8���
�X�b�n�.��x���
'�x
=��_�:��+�����
��
+��
0����:B�/|d5�X�p�����j0�U�j��-P�����>��XsL(��$S?#�2����4^��
�ݧ���<MA�ٸ�r����A�dqB}t����sW
[�#���}po�rf��G^�E���3�W�/vh!͍5���,0��Ai���ϕ��D��u!e�2�z)��A��j\�C�
苨���M�C�
 {�X��"������٘[��埦�#��vsS\59DR�w	^
%㨳��6ǩ��D�b�'it6�Х�H��Π
�)���X�ǩZ���ϱ%"S G‚
$�He��� �����Cr+�� 
�"NK�t�SZ�

v%@��u��O�77�7�)|F�ci1V�
G
Ј��ѝ�$�Z[��FǙ&��?(sO�}0�]S���-� ��С 8]���hx'7�]_�B��6�|WA��^$'�5�M
hxK�fX�
��#!M�jL�w���>oml!�?��
+mbS���M�
��|pz�]�a��q��u-2t�c'y��_���G��\�}W$����O���Vv�n����F�u�����`�,��3�Z�����/����-U�u:�TU|���E�O���
U*N��2:��0��]Ө�>�+-g�-���_)9�xd�d��c_R��j��e�S
ұ1vá��|@�Թ)rڿI����h]�}��؅+���0�
j�UK�
+���v����
D?C�Њw�?��{W����+[w3�.B���ߒ:}U����Q��7$p�"J
��
M�����q)�P 8�/
�ٜ�b���>Z��F}! ������k1!���8���HY���B�`g
+Jy�[�%��)��*�-!4�gi��
���U*N�kG�2����
-��j�ڒ0e�A�"@�u`QK<�!�T���:.h5����X*�+*
KӠ�,��
+��
�n
@�
�]�l
��1
ۡU��o�뮰�� =ϣ���HO��lT��E�4揂���j�����ۅUj��]vJ�v埘�} ��D�)���������zz�5���H��'���k����$$(E*�Ӆ	��p
+���9\r��j�`5S��=�m4�m�~�ѝw샾)tG���2�)o�V�4h���+1
�}�DOP�%Ċ"X�N��I�.;¬��%���_HA��������p=%�����y��={�M��J���d�.r(O����T&�⾴+R�'�^1���Z�

�ݻ���c!�rc+΄�CA[
/���8������Ʉ
���qj`�_� 	0��� �����{��X)6�fr�����>��IO��[��Q���t�غSE�L)���9���1�$��q�
O
�
�s�C�KX����P��K�rw ��ȣ����W?�>
�Y�ߵ�jX�����eK�0���^Ľ��ژ7�1�s_�	56
q.O�
.�^ak[|��κhJ��=�֦&l�ßH�'���V>���#����E�H|��$�ڢHh�7���u�r���{� ���a�o�S|Y��BQwՊ��7�v[�dO�n@��&���B9�ҔC���ox}�.GA}aH	@S��?�
�_�
�	��U����o�`ۡ�QI������M�\��?q��g;K�r�7SYb\Xzru�ty�?�l��
+endstream
+endobj
+1429 0 obj <<
+/Type /Page
+/Contents 1430 0 R
+/Resources 1428 0 R
+/MediaBox [0 0 612 792]
+/Parent 1411 0 R
+/Annots [ 1424 0 R 1425 0 R 1426 0 R 1427 0 R ]
+>> endobj
+1424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.837 302.787 144.559 314.742]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+1425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.92 122.985 365.391 134.94]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+1426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.961 122.985 406.759 134.94]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.2) >>
+>> endobj
+1427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.337 111.03 377.06 122.985]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1431 0 obj <<
+/D [1429 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1432 0 obj <<
+/D [1429 0 R /XYZ 86.4 384.903 null]
+>> endobj
+1433 0 obj <<
+/D [1429 0 R /XYZ 86.4 276.278 null]
+>> endobj
+1434 0 obj <<
+/D [1429 0 R /XYZ 86.4 108.431 null]
+>> endobj
+1428 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F11 691 0 R /F14 694 0 R /F48 609 0 R /F7 753 0 R /F1 756 0 R /F10 754 0 R /F16 453 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1437 0 obj <<
+/Length 2713      
+/Filter /FlateDecode
+>>
+stream
+x���r�F�]_�G�ʜ`.
�7Y�
Ʋ-Kܭue� ���ZP 2Z��o��
n�r6��'������a0���w'oW'?\�p�8�l��E!S3#bJ>[mf��5ӧ
����S)�g8S��q��E��^V<
���Z+{�(T�H������bu��	�Ã��i�p�ޝ��[0���/���8�=Y��Lɘ	�ۓ�'�#~��̨��
���jƜq;�gWW�
-4�s��b���/4�g����w_�t���
 pd���!
ə��l!�2{zH��@{�\%��Z
�#�Yr���(H=�?��yJ�F�z�ǩ�I~H�B����.>ɤ1
�~|�aJ4%��C�>���0�e~@e��&�2:z_���~�Ϊt�f�}n$�"�{�j�
��h�G�H�t3��W�i���&��-8g�֎5��	�b��CKQ ��>Ih�d�IU%(�gZ^��`�O�"+�	��~]�@w�f$����&��cŢ���3��Y�b##��L(1�,�A�^�)��I��P�]<��V!���p���Y����I�c�;�T�dY��CU0p�X�W^jG���F
�_�+���E�]�ʳԙ
���E�n� ~�����'�����@F�@
���톢Ƃ>?_��NP�Lj�x�1
�a
��E�a�$�a}R��bF�
3b��������3!�f����[�
5e��B���p����G3����B!�z(,����	�<E�s
ه��yP�à�����r�&
���6�
+��#[K���:X,Q�V% 1��5�j���X�M
�0b!����R�v�C
���>m�ʜ<�tO�}I߀>�GpJCq��uZ��C�%ʲ�y�Aa�(�d�ԃ� 0R΋�reX麎TD��jg������ v�<��`����	�	y	�\����tv��c�N0�Uy��;.!�@
\p�0�Ob3�H��
+�Q�>4baL�:�%�|�^M�[�lN� �M)12���h��
+0�:Gs�
t�
+؇�dW���?6<�*��d��R�0��c��*M6�d <P` 7n�ݼ!]���F��m��%���wXZ'y�cO��*�)b\&�kћ����S�����
��hy��t��7���z5��] ��@aS�v)U15.����p|��@{��N��T��v(���]�`�k��v?�LE�@0
��%����|̊FTʧ¦��.*'�1*mÂ�|��_���j_
HH.�o7$��{A��q)�5-&�d�I��W3*;�
����
+���u�%}w鮬�
h���d��Hkk�Dv�'�I�V���#
�NhX������U�CJN�g[&w�Z��u��*�#+�B��*�UB�,�8�/���2d:.��FB�Αwg���f!���6&�Uҷv���l�|d�A�iR9�g�΍�q�;
'TL�̕�n+ٸQ�
`�����nn����)�F΃#Q����r
+_w(� �<)��
�GP��?���SV� (+$��.CǁOJ>��΃4��<���$���h��d�iRV�bD�А���{[���H�M�7)U�@
�ƅqׄ��6��.��
`3{�KD��ɶ�Ɩ����6 �:�%�0X9�q�}�]S���$���[��.߆�<q.��L-{4φ>$�v�>e��m>&�7p���z��ܜ���o�>�4���A�Wf�������������4j#�h��+Y�H��	��*s&�bRBӲMs.pD�
��
+jٷ�u*e{�Ue(X�����]5�K�n|�b����i:�ݎ
�DG�&S�*����|8����JG���̨&����°��/T@���>�
ˠ��՗�
W� �7�n|q}��<;�Wu������?�/)za���O�x۔Q�Sl��A�co�,�^>��HZ>sG
+�S��k�`�)�����3\�{hW
È�3��PvȘ���\��5��<�f������
-�˱P�Fv�o���
���O?b����o��� ��	z�7��}�
1�7F�O0D�b2��l�?D�����"h�7E�r�꤆&�x_�m�d�j��b�������=7�w���up�_�ವ�#��s� 
{��?�p���+ݭ�����y9��\
�0\�{h��0�y�dA}/
��)������)�[���}*�*�
b��P(i�^v����q2���I���ab&��u:�
�����)#�e�"8�IPZ����QH=����
�����=p�Zs�w`_5�|����jq�W5L���E��02La�����x��M�a\7e����E��	Z
+�����
�JӁ�N����W������y�?M�������k���L�Ւ�P�^�\\12�a5�Ba�"�^��T��

C��9���x�վ���Q�d�A��S��^���ӿ��6���S�–׮�5����v��n�"x�O  ���ŕ��S�)��-�طG/��:�#o�f��
)0���-��*}v��i���M�/ʷ=t�#$�b�wgħ\$s�q�-�_j�Li1u��l$Ji����B�k-����6�"n�S���q����H����j��8a�!
e����}OTv��A۔��GCn��nL�hp�LR��o
{@�kC;�zv�m
5��s�0��!��S��K�}b�sL�̓����i<�6�p�<Z��S��.1��𮈶�b�n{1�Ԑ����2�_s�P�����=q�)�bu�_>�.
+endstream
+endobj
+1436 0 obj <<
+/Type /Page
+/Contents 1437 0 R
+/Resources 1435 0 R
+/MediaBox [0 0 612 792]
+/Parent 1411 0 R
+>> endobj
+1438 0 obj <<
+/D [1436 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1439 0 obj <<
+/D [1436 0 R /XYZ 86.4 615.773 null]
+>> endobj
+1440 0 obj <<
+/D [1436 0 R /XYZ 86.4 207.811 null]
+>> endobj
+254 0 obj <<
+/D [1436 0 R /XYZ 86.4 128.757 null]
+>> endobj
+1435 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F7 753 0 R /F10 754 0 R /F14 694 0 R /F16 453 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1448 0 obj <<
+/Length 4556      
+/Filter /FlateDecode
+>>
+stream
+xڭ\Ms�8��ׯ�m�2�$�}�V�
�qٵ��f6z���h[��覨��������!�u�H
+Bf�/���qB'�����w?]�d��Nx2��d	���k�6��O��f��)�J�������g�ONE&��
+?��r�O�z�g���S	�l:�,��¶{(+{q��onOt2��=��?9{yY.fy�(W�������ݟ��I'̫�H&��������9|�ۄ���w��y"�&
����w��:3����c5���$�$�$\�����5��D���*�~>9�RN�^�X�3�L�/�E]/V���O�;���u
+rM���	��ܶ
t$M�v�
�D���/V/����ar�8%0/p��ٟ�\�
�ⱨ����	������t�/��UDv5a4!�*�
+L��������k�'�
+��c�玱�h�&I"�|h�D*	eY3��N#T�C�@sF�R���g Eg	�%I¥�
&���
.�Q�r���:�z�Ns����s��8T��|I�EY����!�,k��o'JM�妈��T�Gl
)�D6
"#�d�
��	%
Vl"9�n�:�g�)� �LC��A�	����&*�̛ۏ�;����H�����_�gt�g�
�>}�(x.�'�����>(�9����
�`͎�j �{K��'$��8���J��C�� HK�4-�� �4�x(������� ��6 �
\���}�Jbe���JU��u���W�Bi��'
,����0�m�N B�0D�B�2"��g�
?
+
R���(
 ��B#`e�V�GLX�ONXU�`*5��)X��2�oo/�.��z��!�J�Dh�N�UU:�Tk��rS�T�׷AUG_6���EF0E9�#9@`����B˄
�v�^_ޟ�9�ì
A]�gl�*�Q�T���r�*r�-,�n�tD�W�ATWY9���E�F���뒱^J���� YR�)
+��0-9�M	�1
�~���2��7��q����f����Nx
+^�X͊�z�#(�(=���W
+�4;�2�2���?�=������y��1X ����p
foX�H	g�g��� �X�|t�
+r�d�Wkw�P�Ͻ�(��(M��ه�؏�[D����:@���V5��ZEۢ�/VË�
��	�nS��so�"�L������Q��@� }�L����e�#�ޅL���%��m��Ip
An9)���
�����
[;�;#x��t�~�����rF�>^��]����EFЬ$|��A3� *�oA3�L3q4w�n�
�� ף�+w͇�p��Am�z��;\��r�
+�-��!���	��V4��Z1H&������$��(��: ބ:��+�2��f���i(����lA��vW� �ݰ����z��ۿ�3�
�g�����m����uׂ�l�XC�J��n[1�`dU�[�Ww���!���̛��TA�GuW� �ܰ!Q�P��j�T+Wk�e�^b��UL���!�Z���W����&4��0�}�T
��`f{�(E\\d�&�br[�m��I��u�E6S�"Z&���۱{��]J���3�m��{�Rg ��a/�R�^j u�����-�@�}�R��#>�|��7�Ri���t�2o�)�t{x�@�cu@U�i��qu	�C�R1y
��a��"�
�B[W�z����w/�S
@q�2
���z���| }{�� '����g�"� )僻�7�RS~�t����a����5W=S��6�
+�e����%\m��7u���a�2UWӁ ���� dɑ�P� 7n����4AS=|���h�J���t>��Ì
�
X�P�sn
��%-�mu�	�MuFw��u�2 ��4x��Y�
��r5���
A
�h�cl�K@`�݊���]��AcT�����ps~1����
+� "����SC8g�%�
Wh����n���rY��`؎��z78��M#��-���ȉM�&��!��|
+<�:�
,��HI&�
�T�
�1�[1�5�#v��8<}r
�.��%���p �<�g�qV�A���&5��k���B��r�W��j��
G8���
+<��H*���/�a��'[l!,�zs5�V� ԯ�����r����F�d�̫��
����|`�����
j_��1��־�sG��Y%][6U	�%r`��0'	sǼx���YO������apC�io��)az\i����H �I��fO��j?u���Y�wCޫ�}[g:%����Hʙ:N�Md����Pf;�T_f
��Uf;P���
+�ط̶�
�y�9P�H0�
<��]G"D��?n?��
U�
��R ���@�8��0D���*�q�L��
+{�|�/ʗ���*_�
)*�!�C)W�(�:����/��

�;��
h���)��_xd@�3�
�X�H�S��<���� Рq"�Q�֕;
�ì
S�
�G���U��&_.,lf��iV.$5�\n�7 k��
����
Y{
�#+��_�
���$R#�&<������S�U�=D� ?�����嗳+y~��9�8u������s{X?_��|����)�@��";���O�F�E>����?��Q6���)�4�nJ�0׀^|O�\/Vs�ƭ����hv��8X����4~1�hw�$�
� �`]��}s־���

�n}7��4��
��j�����~��F�)����ݫA�I���R}��L™]��r��F	L Pb'�v�B��F!��*ē)��kt2w�%��õ\��
-�0y�mt$�\4�|9H�hQ&���:@�S|�
_�Ӛ
������N���W¼Inuhf����4�����Q	�vL� _I��o���[�
���E]�/��-]��lf�B�
Zf/l�U�
��G�-ٴR
��������l�g6�TU1'1T��k��
+�w�f�Tn�Nǯ��n�4p<݃�l���Ons�ŭ�
�z�k7p���i�K��Qĺ��СX1W�&k��D׃�r��_w-�7�F6�v��DH at H��L�?�
+���ͺy
?���r
L�[{J��ڙ4[<��O���>���?�W<�<ۖ�
+N4�v3
�؏��H�� .П1T
�[dk����Z����Y�3���8w�8wfɑ�֩m��Lf��t��z�f�ml���IT���JŢ)d��S{�b�K�
���?3P�"?]u���c�*G�ϻXy�j�)V<�+}���Ϊ�5[��6Wr%^#,7ꮁ-ة��x�é��r
��8pj�D�
�����F���s��
ڕ����!�$P�vW)Э��� *$Ԛ�r�g47:�V9����"�!���
��|������6?���!�j�����Ki8��v1��r#��ŀ�3n `�ӿ�æ��ʽ�Wv	��%
|fw
��;
��\$������u�[}}������\I�
�H�&"Uc\��IJ�t�Rռs�&G�x��bfKR<	���a�p&$i+�;#N�
	9�����T�{[W�~g	{�9���DƕY��3�
"��ҭS��
 !w�4��9�
+ 3a|2������o$d�*��-�J�p��ԃ��1,%';yw�e��a׭���r�/�y��Y�45�bc%��A�����e���9����C�er�
�b�w
+�#�U[£)���;ZOv��XsMR�v+��$�M�L݅߼XϪŋ_�-<dXN��	�
]NQ�~���P
�!�%��C#�.H�6��ז��
a�7�I�H���mm�M'濅�i�cr�4!���J����?v�:׈
d�
lj�g�7�N0^�s
�<G ���n�/]�L���t�w���*�o�y
+Q~63v��u�ɪ�����<>٧��-����XV3�:�!��������A����>1�
��Q�x�����c�@ADe��:ZL�xb�!C7��G�6Oe6A���F���v�Q�U#��\���F��~.�|�.9�@��6�n
o`y�]��V��
�`��y�qjtD
B㽬+
�0Z���V3�D纰�l�!���
�f���9�hk��/
���fU�&��i��q�p�Ƒ7}7�������<l4x�<��O����8Ӑ�"��tvuu�a��*�'��V
�S �=�`
/k���pᔮ&��.Ŵ-֮M�
#(���{s� .�/>
+��
�6Y�vx�uY�������^.-b�h��񕗨.��2"e�����v+��%a�������
�����M	��
BĬn�k�y`�
o]��Ɛ���6�7����;��e�7�
���%<�is��N�+���v����[,"a�K
	�^�P�����Ŧ|�<��~�)#��p�/�]f at J��u�&ᇧfL�
S��������@ݬp�g�{���\
�Ua(QY/���Hb,I��kN��ˎ�YOM����.{�ǁԗ3M
+
)̧
=��/i6]�-�sO�#������y(���;,B'}�c�����j)ڪ���&���+F
�]��R�cBf��V�ݖ�*S�ˢ�W�»�گ���f
1ッ	�߉KN����	qcV�csq�s�e�	)���k�#
+endstream
+endobj
+1447 0 obj <<
+/Type /Page
+/Contents 1448 0 R
+/Resources 1446 0 R
+/MediaBox [0 0 612 792]
+/Parent 1411 0 R
+/Annots [ 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R ]
+>> endobj
+1441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.967 280.019 441.689 291.974]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.1) >>
+>> endobj
+1442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.942 159.823 216.162 171.778]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.1) >>
+>> endobj
+1443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.367 111.912 186.09 122.76]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.257 87.358 376.728 98.206]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.7) >>
+>> endobj
+1445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.856 87.358 424.328 98.206]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+1449 0 obj <<
+/D [1447 0 R /XYZ 86.4 726.045 null]
+>> endobj
+614 0 obj <<
+/D [1447 0 R /XYZ 248.491 696.212 null]
+>> endobj
+1446 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F11 691 0 R /F7 753 0 R /F14 694 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1452 0 obj <<
+/Length 2421      
+/Filter /FlateDecode
+>>
+stream
+xڭ�Kw9���,a�ޏ�9�q�����Ӌ�^�v%�i

���?��B�@V!�M������I�{Eɸ���{���
��d$��鷞���5H2қ>�~�
$�f�������e�/�_�n��l�|o�|}�6ߘ-���[�mw�I�4������狛��.�q��ai.{O/���{���=��ѽ��{�qf������
����1�i
�IC{�Q�tӚ� "���� FƠq�_����u�y| ��|@����W@;�5Wn�]�
�eH��"T#�%�ww�6
Pڟ5W��P��R���c?;��z�^�T���4��^�0��K{����i���tMm#p#����<���=���1,�
�hۏw���m��Z��T7�n���i���������
+h�$)�c��*�0v|
�D�Dt���!�[
�
�2J�$f�վ���
�N�F��XJ8b���{o굣�(
+��j��7��R�QxC��+�����m���NG´q4=°a&�
%Z���)�Ұr
+��2,�S�ݎz�͗�"�Y-~ԋ ̭�;-9�p�1Vgv��H
��m�r����[A�0�t�L�<$��IXXjS.st3~�-2�
+p�s���]_�V��V�'���*b=9��0I�6��0	Op͛FЈ�<dX��aw1a�V��=]Xra#���0����cay�a���g�'ӈ�T�˥6��o/�m����J `�AJ��L/��j�"<b+��2�7[�֖K��
��͏�"&,9��0
+OAVfz1�$iSd��<�!?`�o��Xk��Zc7����l��y�Zr
kD �dk��I�>����1��>`��W�˻�$b� ښsѭ��r1_N �Z-t�K�%`��$()bK�p;U�^
2�H����."� Պs�v��tw���1oɡ
{� "��:n8R�
��}o�ȃY'���g�'7��/�IW��w瑭�Q#nRm�biIz s� J��8�)��84sy�`��1��.cid	���ro��f{�~������T�9�(b��������q�X
3��xЯW�a�V��m�]���ղ�YrgB hTgBC��Zg�͐L��BJ ��W�N~��.��֜
�K������5�q]!����
�("���~�E6F2���ă�o#�[	���R��ێ�-=��/�����P�C���	H�8�P�jo��y�9�����A�V�և;���K�9��z���Ϋ+	���J�	�̘��T&3�����o�+A���%ì�^lN�OL"�
��Ym#�HEv�2�aks���V l�9�$g�1
;cu�@�L5��H��M"�T��i�w��А0�k(�](��²ϴ]�LA<<�pty��()���(�v��E�p1���(I�!0J�jE��LK�����ȮX&3X�y���Mlf��Zg.�:;i:=����f!��6����
��d3O:�
�<KP�4��J�<{꒖
FXZ�~VŠ�ᒟ�~��ǒ",��s�>)�*?�L9�l*ř}����7H�Ҙ<d���2�D�PY��";
��7�NS�
+�tr��05���B��"=�kH�-���0�^W]h|]-@��\�vں�
FH��Y���A:}_�_W�BX*���!����yhi�4�r���&G
n������q^�� 
aƻ
�Lf�D��}	��<.��<�@9�LL�X
5
+qC������t?3�aq.���/A��\r���0�@�)�g�'����`:�Ac�L}!��@:�!��L�����uJwF�
E`�(��.2��R��*�Lf����
~	���r
k'����A�&i�	.��?��E=h4-A��\����v��m.9�����Qe��`��6�$��^2�as.t�%f� ՚s���/몫�H�$୮c��իW}
��y�%���BDZO�KP�7�z�~]���K% 
+.%���P
+�oG!�����
�s��Q���T+Υ��F�eǻ���A�q��(Q�s� ���_2���<��j8�x+���\��턗q�#	��i����Q�a Q0�����Cu|�uw4t@��)���PM���lj�t(�\��3��I�r^�x(��c
�ӡ%���.6�thf��n�N��GR
+3?��"a��/�	C@��s�y�`}�!?�����B�J|��!'7בQx~C� t���h�O۷��n9��ǿ"#-5��i&�
!���le&2X�{�O�Kp�4���-�]�|q��.�
��Rv���#�)��u�u�R��;t���U��
Zfv���P�Σ��Ȱ/�9��*���\�'l:�lk��0F꒨�C�bH
e���Ld���9�
/�b+b���i��b�4[T���v9Ȑ
F�^�x��t���D
x3��3��ǒ���j���7H8��g�z[>�����?���(B�8�$)�}�)��a��
+endstream
+endobj
+1451 0 obj <<
+/Type /Page
+/Contents 1452 0 R
+/Resources 1450 0 R
+/MediaBox [0 0 612 792]
+/Parent 1454 0 R
+>> endobj
+1453 0 obj <<
+/D [1451 0 R /XYZ 86.4 726.045 null]
+>> endobj
+615 0 obj <<
+/D [1451 0 R /XYZ 194.014 644.735 null]
+>> endobj
+1450 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1458 0 obj <<
+/Length 3373      
+/Filter /FlateDecode
+>>
+stream
+xڵZ[o�~ϯ�|���E�S� i�.�I�x�b��-;Bm)��.�_�I],'���Ŗ(�
g��f(����볯�g_\�p��$�d���!S�H$,�|�\O~��xz�U �w5�v*�wy>�������7/��ɪM���ѻ���>��]/�~����+���&��\\��+�OO�|�6yY��_�ߟ͖g��qӟp+V�bNV���~�'kx���g2�'�t��DɄ	��M��~<��2��z�*�,��E���	g<
+i��\��L/��/�w7���v�������c�9�/��N�|���
��UwBP�0��Y%4��T%��k�]V��J�F^Zm�����kjjzL�����=ө�/���\pU�eZ���>K����f��<��y�ܐ�=�H���IP��;���7�+
���=
jVyYU�`[�5���@�d��9K������A�
���,汝t|,O�υ��2������7t[V���7��95h-a�"ۂ)Z��#zGy͔{��US2mh��
S3IJm�l_V�ԴI�ݡ2#i7@)v;�eg�/�
#e��8]&�5�)8��*�M���qI��F�x�����#�7ԖVU���c�T���WFY��}
|�v9�AWe�� i��z	o�z�5��k�̮���Zakz~��5=v���xwO��[��V��e���.��_��tG#�&��]��|"aa
V�n�o�6C�8�㭜������r�X|�ͯ�[޷��?�@۬���`��Sz5�;KA���1�����
���n�Z���g�v����B����}���o��J������A����!X�S��耛w5"�D/Y�����#˄A�
��ˊm�82���/�[��_����r������7���uj+VB��}�ۣ"u�*@�UY�~ƛ!�c��(�@\н��j�V�_��
��`p�
+�/m�qE�g Y7��^�(�K�
�쫤
�8�YU�D�����_*��$�2�CPn�
VhѵŊ�Xv�X��r���+�(uj���Z�X$0D�����A��
 ܌���\�����?�<�RkJ�*Zd2Ӗc�'�+э��w7��
�z$��cj�tZ4

I˃��3l�/�� |vp�f�WpS�]�T�)�T,�H���D�+~��z
30���55����AҺ�jh�v)�=6�M�d
�}�^���BW&��/bg�����Ї 
+(q,þ
:H�!@�t 	o[H��@H"��Z54H
+���f����'!I !��e�⃢��F`H�$�S#	��)a�JOz�C<
4�� �� �uv���Hf#&��
+��#WL�ƆH���)���G�L��,<E�iܻ\�4�nI��9��fi�F��u ���m|��?_�R@�6S�}x��}���M��
+6��eٌ`S
q"r�Bd�I������~�`�[ӘZ�M���V���}���7y1"%O"��-\ME��=���kDJ�:
�JCf[qH� 9��j�
6Y� �'<[��
� �u3�T@��o�D:
5�D9���
YjEC�	� !����� x�
x���>�L��P�(׷�Zz!�gl��
;�� z~ʁ����UYUY���-�Z��o#�
_W̅
+B`�׹[�����Z?mca�u ��%O� t�]�
��^�n�^����‘�a��V�=1
g�!
d�!�
�'�"ٗ ���|���^��g
/t��V{u�ϭ�:kh���x�H2!��,|p~�7��j1����{Ueٛv�V����m��V 6�in!D��6a��W�~
� S#q
+
���qf:~�&���4E�g��Q+��k#]}x2�PY�J�j@#[�g+�yi�#�<J�=����O�\����5h[
�rW�Q�6�	S�1��T>Jp�x�tg^ �K�:��ዺ�xQ��y��m����QA�z������搚��y����ц�+Ŧ\�[1�wXeNɚ�""-o
��}�UV�W���Զ6�G�eq�k���g��r�)�H
b�Ś�m,Y"��C	��h$�v%�F�$���	�Ҏ�P�
+ě�s����9f�1��jM��6i
�& 
C�wyv�<Bw�U��hK�׹B���P�0̃[֦�[��R|�)R���|�(]gz8��MCK
��.���
�&�
U��ˊ��V􇃆 	(��2\�f�a�$yk�:zꎯi(�y��|,@�9 @���?����z�
MIy�H��c�O�m���7e�@�1
������
+qY��byu�yyy�9����;�0��[��
���!��HJ�[J�� �m��������j	�H��q�{P�P�nhd����V�y� ;���,��P��Lf�\_���.3��K��~i������!��O� 
��=V�>��=�87 �#���ɨE6��P,jm�NHF��� �
��ڙM7Cևi=��
��������rd҃;{�s�x�� �-KW��
�8A{j�0�
�b
+ыmRvx
F���F���b���g�� �iJ/��My(���}�XPS�6+s�w���WG
=iڀ,0/�O
��q�px�����{@�Y���
@�Ö���sqmQ�˅=�m/;X成�u~;7���ߙI>�,���n�a����
�-�mo��9j=��=��:3�~&,t�z}<S
��<�}S_⧏R"�#�^C���0$e�x��g2~�;y�\��آ�?����`P��HL%Ƒ���y��cϱ�IGZ�/�
B:
�/G�
Ȏ�����@���A>���.e5Ƃ[��"h)�?��t7z^
��t�ʶ5",�@�4܌�H�
T%m��hpȇ�ck_�h���!���2/�쳀�/�7f��<�&�
S�g����q��xt�_���:�K
O�1�j�;��x'����1�9�ˎA����(�.�
�m���@D�f���|o��UY�s3���9!��:m�V
���S��O�Ǥ��)��
�i���1�3��	�<���� 
/�pHJx[�|�c�N-IOp�5c�
.����VC�{��H�<��I����m�Y7e���!����'\�
P
spl�j"0�CUY��=950�����j�ߔ��t9��$f�5����g�M����n[�7_�����~93���&۟S������Š�m��J�D ns���[mI"��@'�d���N!;w\_$	�KH�2�pρ^��������]��ץ,=�*�3�D>5  �H��5L��}�ψT|�}��Ѭ?i�R���#�	��� �U%� ��1_�
=�TM�̞h�k�UR�G
��v��s�@�v
6{�#;_���4�T��K�2����[i���@���B�uw"ه'�\�h����Ort1
+endstream
+endobj
+1457 0 obj <<
+/Type /Page
+/Contents 1458 0 R
+/Resources 1456 0 R
+/MediaBox [0 0 612 792]
+/Parent 1454 0 R
+/Annots [ 1455 0 R ]
+>> endobj
+1455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.417 588.919 342.139 600.875]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1459 0 obj <<
+/D [1457 0 R /XYZ 86.4 726.045 null]
+>> endobj
+258 0 obj <<
+/D [1457 0 R /XYZ 86.4 460.376 null]
+>> endobj
+1456 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F38 509 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1466 0 obj <<
+/Length 3417      
+/Filter /FlateDecode
+>>
+stream
+xڵZIw�F��W�H�1;�
H�
lG�DZ<�2�$��(��  �ؿ~���� �Ț�D,ͮ��jF��$��;{s{�Å4��%F����$6LM�H��|r���6����2��_�t�ᥚn��Q�������3)��gs>}3���ia^��:+�Ӆ_Zo��ƛ7?�>��i%�4Nfܾ?;�=���	oX�,Vf�؜��G4Y›����$�<�u���	p��ܜ��,�%4	g����P"���j�oP����xZW�'�Y��o���L��c�#��Å����N�G�����GZ�]%A ɛEyE$����sL�7��n6��YI/��G�u���gk_,�|[Tl�)��Xʆ��Nj�C�@�
�힓N�U�EZ�)>�B�)�o2�J�X�ɜs�h��uV�@�C�$g�'�V�Va�c;͕$�%��6/��&E�j �L�&h��zD�⤧�8�>-�z_t�@7�nv�
�ѳ�#���Op��i��~�i=M���ߓ7����t_����^�y�0��W�&��l�}F�c at Y> [...]
+H���D �Q�Ĵ
���:���mά #S�:jS˴��ΚG��y0P���
ȉK/(i�.��H�7)���D�M��w`ڑ�����Ţ��*/V��̂��<�,���!=Ƣu�(����39fS2����\IŒ�º�)�
�z�Uް�5�%�J2��V�0����ק
+Ԥ��"��,�ձ
���j�����/b���� �ż��W�� ���8�g
��18�t��������;W'3�Y%�w ��H��.7�2����_�q���m4�2'��Z�H������h���AHN�h�eVl�lL� ���e?�;?ܑk�n��
J�1=���i^!H�x���z_n7���!�.�~�E�rq��qH�a5�\Χ��|���_�a�ϪJ����˙@2�U���ad'����s���13&�_@
+��ݚ�@��i
+xWfy��y�ο:� �����j��nSz���‡p$�ەۻu�����
�M� Si��ȍ�<�}���/?^�>����i
+��
|�Y`�rȷ
��s�+��Ŕ.�eUV�S�׬��8�:b�
�v
�_{_fY`��	��ݷ�r��T��K�u����!Ū��E�#
�;�~"1�i����HW6ė5Ceo�?;i>(�wW1 �bղ�:���5���`U
#l�!�
�����yB����|�Rs�
2�/�d�Xͅ��Cl��yÎ�\����ݠ���-BSL3�i���?].s0&Z�ե�v8�>'��MK�A�5Kk��(P	�bRAJ��� E�`F�N��9�i���UC7�AS��]#O�=��i>ۥ��(?> Y
+��Ì9�SX��xw�
ɼ�Em�m��0��~�n�!P�ܯ�C�1E��R����aVZ�!F�
�8�F
��v$@����f�=>��16M �1P�tEcq�h����T
�D�}��ԣ"�z�^����o�����
�"i|0��8���1�-SR?�>�$�-����i@�>�
�O���HGx�B�9[�Ԧ��O2�����D�֒S(�	
���_�l9�N�%������:[���e�3��
;��ŖE��C�o
+��??hR�0�8�;���M��_(��
|�;��rO���a��U����
a��f�
ٻ2)�`~�	X��B�C��/L� ����!P�F�9���
"�g�u;H�n2 at e
5>��9�.�QSαХwk�HO���&�	
�yEWm�Ҙ��9"�M+���m	�`GMU�+���OÌ�����LMҶ��2�`I�!9�a�L
���uh΂�%4�
p��`aX���ի�P.��;=`ᮺX����X��[�720�
�Q�#�	��5ȴiPc ���+N�;�f1f���z��ǐ���͋I|�]BgqH&���O��2/�|��W��Z�3œL�
�����p��
+lw-
 ��w{?���*�[�*u��N0��_��/�lD%���; :7N���|���:���M5T�?�b�
	�b���]�i1R�
@�`
H��r��AB'�#�B������ůǦ#��19�a��B�u��\�jE��bIk}�G�7�D�F�i� ���'��(�kM<]�u���O��Q�+��di�K���L3K2�X
r
�ݴZ� @d���\�e^�
+��X�����
��F�
� !d2/�P"��
�r�"�lGNj�f\�������14G	����
6�!�J�*y�UҞ��A,�a
?=H�s��	��P=
�
�
�:���7�1�-0���� ;G��F�
b�׎�ʼn>��YK~Z`	I�$�Eƹ������\Bw
��L+�O6B
+�� w�>8W�a*e��m.|���-M��}ѩ���7U�[y9 ��8k�Z/A��V�4�[Hg�O�B2
��nY|{��/'�c(�e�������8���
�ӥL�y��l��������ߜЎ�L��r,�Z�q��u�ɪ��~�A=]�@�f������9�`��D
u�0a��LB_~�-�
͢�Y�
��5]�D�yu���������	l֮��;w�
�)*�G�͠�b�x
�~��@��48�+[z2�wƭ�%	�P[?nП̼ҿ�M��2r�KY�w�:���߸�-^�
�M����!�����|����!����L7
Jç�=Pi�̀U�O�R�p=�i��ߘTt�̫ž��)� �t޵흓�:�( ��~�8[39�{8 at h�7��K7fjA�%���,
���Fƻ�C7�?6�ܔW,j������G,�
��4%�@8�ȝ̱r�Afq���_7Qϛ�-<ʇGEY�\�W�l��a�M�ژAt�
F'����~��:=v��2-����&ڜ��Q�7��
���ú�����{�
:C=�[Mo�lW5���*�x�\�n�|�
+Y�c�>U���4/��>?���å1E�(s��
�8��D;��=^�Ǝh��IMW�/�
'sp�~>�
�hS!����A�M�?�s븓fx��:�x.�At�C�Œb�-��U-Ҧ#
i#z��S@����R�=��q�;���dJ3���of���=%��da�?
�
+#_L����50���V/��;d�C�v��j�nO��s��/��es���#F��E��^�x�����3Q7�	N�3���
N���i;��mrӢ��A~�+��$�gY��H�5����=z��̣w ��;�A
+endstream
+endobj
+1465 0 obj <<
+/Type /Page
+/Contents 1466 0 R
+/Resources 1464 0 R
+/MediaBox [0 0 612 792]
+/Parent 1454 0 R
+/Annots [ 1460 0 R 1461 0 R 1462 0 R 1463 0 R ]
+>> endobj
+1460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [107.543 555.556 130.014 566.405]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+1461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.831 464.673 104.554 476.628]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+1462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.368 226.025 145.091 236.873]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+1463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.445 190.159 200.168 201.007]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+1467 0 obj <<
+/D [1465 0 R /XYZ 86.4 726.045 null]
+>> endobj
+262 0 obj <<
+/D [1465 0 R /XYZ 86.4 541.842 null]
+>> endobj
+1469 0 obj <<
+/D [1465 0 R /XYZ 86.4 187.928 null]
+>> endobj
+1470 0 obj <<
+/D [1465 0 R /XYZ 86.4 167.357 null]
+>> endobj
+1471 0 obj <<
+/D [1465 0 R /XYZ 86.4 148.724 null]
+>> endobj
+1472 0 obj <<
+/D [1465 0 R /XYZ 86.4 126.216 null]
+>> endobj
+1473 0 obj <<
+/D [1465 0 R /XYZ 86.4 105.645 null]
+>> endobj
+1474 0 obj <<
+/D [1465 0 R /XYZ 86.4 85.074 null]
+>> endobj
+1464 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F11 691 0 R /F14 694 0 R /F59 1468 0 R /F16 453 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1478 0 obj <<
+/Length 3782      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�6��W̑��0�dR{�mI��,��vSIj�3CI,s�2v�_�n4@
�l�O{��� �F?�n Z�/�������O\.�0��\���
�"��Pr�Xm�yt�d"�,��zy������g"(�����
[���+6%u�j�˂�P�o����5-.p����\�۳����c]m��j��韫_O�W'O�-�!+	3!����F�-����B�g��j�n!x
�P��NޞDz��ڶ�&�f"
+Y��9�����8��>]&q�?{�����Պ������5�xF
�޿|k�׶�~lӅ�ooϯӕ��[���n��R��2�,^,c
�9'rV��8˂�=e���+����8
�{R�1Ct�]S�
���c���rw��PH�Z�vuHa
�ף����C,�`SԴvW��{�;j�t�A��V����4�nyl�,e�5��^8����"�����Hm���&�œ%�<׾y�"���b�X�'��O���@�.
���첥:������I�CQ�-�0�s��:=SC�5|���ڕ[*U�ق�f�8�J[�A�x:�9��Zl�uU��k՝$�R8���5��S&���#b\	

+��<?��
c>M_�Z
C�p�Pf;ݽ+����&V�]Q��

�?(��j'��
t�u؈;w�۝�n��h0K�d�׆oH�j�)~�`l"i&)7�sy(;i��M&5|(�4��4T>�&2(��nyT	�}���dܷeћ��p0r|�|9��Ә�3���9���0ɓ��K
�l�/Gf�Z�jk^�������P0�OF�ŗ<�c�PPZj:<hT�_Z&��z�bW�m���.z*U
�k˾���
[���@o��W��z�]m"@
9�h]�ʹtD������
'�ґ,�=��`E�Ϡe���W-�Ȳ�ZFɲ�-c
�y����%!磸���pp"s܊�`I<h�xO~�Z���-w���h�
�RH��
�JS���Ga�Ls��CҐ	c?a0����p%�8v��
4�(4E�

OZ��zA���TU��Cd
Ipd#~��C�ʱ?�����T��!QE�˻b��gz!1�F�
g��"��
A�I�!������aIr�G � הl3X�P$1-9�+TQ��
�m��� [...]
+H��
Ա;���L�|de.Yp�����1x��z��U'鐙p�
�a}����
=���#��WK&�
�e��<W��3���z�}�
��P#�PPce2H��Ǧw����c��(&��p
�1�v����3KL�'�I k}T�a�dv����GH|&��M�� s�<(�U�+!N �ƶ��DF�4�C9U a[����Us�}�R"�	�R^J��׬��2j�g6
#6h �� ��jU�����h,|��,f���	��\����hE��g���pJH�-��c�jO} �꟏(�c�q�N�:����L������@���z5��\�C�{�m��E�������=4C���Ӱ�i�

+��'
+��yx�6��8��
�
�@�`�VX‡��\�
�7]�{��0���Є+Z�D/y�Roo�w��a�n�����!
A[q�+��<�%af��J+*Я���+��5pʑ`c�@|��*
iuF�w�~0V�ؔښT{/+�PZąs�_
�#��lԫl�). ��d�{�N;���ϰ���8B�
7��Wޗ�C�̈́�
�_=��O5��R<o��G���&m	0d,V�ۦ�	e�k�<q��
�V�-}-Q������{�Z�uFU7��j�a���c�G�֓ �}sN ��g���h��_��2U��$��c$re'���y�[�0����,O�b��Ҩ��ɪF��x7��!�AL'�B4�ׯ_\�x�=
����5������B��f܅_�
~}+�k�
+B��@a���
�]2#V]���\ax���8�`Ph�$��e�i��k��+v����XR�'F9#��#
L�R}�t�1�瀝l��0-ξ��AiN�(�I��AJ��[]��B�(�"7��Z���JS����@��C�
C�2��;b�F���٘���
Y0J�ܞ�^У�Y�v�B�$Q)�K�ѦЛ���k�&��r�
A�q'��tn
+�rc�S�ra
+ݰ&q7�ڦ�
٤1��N��z����$uL��]9�w
��I�*�]h	M\+�<h�-	�1��4�e�}�
$V�W?��(��q6{'s
�r�҃ʾ�צ���/�m�E
+r��)&3K�T�!Qj*g�Ѵ<Ci`����9XP�`�� c&Q�fhS��+���vID;�N�H9�Dg\���
T��7�{=
m�ƭ�����	����J���ԛ�B!���ɥ���&�q�#� �je�����dQ����=���
ݘ:T��Y	�x�;�DM��t�q�m����7eN�t,$�z�=��?t'�D+�FW^k�� ���o��q����A�����5��q�q{�RP�zM�N]��\[&T&�9cRtm�1�"�l��������n���'����=�C�
+�*�t
��K�<(K�I
�YOu���
J
��
(���b
���
��ʑ~߭l��'�T���p.#x���,�T�I$&S'�
U/)2oŞ4+"d�H��
�ab
�ײ8�(���q$B2��-J`*
�@o�������

����o�p��앞BWC�[�Ȩ�J�b[�K�,� �U�J�5����K
!
+p�爙� ����� eǭ(�$���<��u
�L4}��y������B�#~�^/�L�_\~}&�uG
�p�\]������sl�s{lI���<�X�C4������&4��<�7Bs�՟�+[LN.h
+a�cJ�.��<���dn�����4��?CD�[M��Mqp
�d,�
ne�`�*��
��h��9�O��w�=y�xI�xҲSf�ݍ^~tH�
+��o�7Ja�x��=◢}r@��������4C��'�+�Ʃ��.{:�w��= �e7�1���g�
��4��d��Cp�$�{�� 
t*BM�(�������W���J���`2c�\�7��@I�p��s�9ŗ.�z���������s
�.)��`<
�V���m��-_��՛�[]���	��� _^�:�yw��Ʈ���
�O��7^z�p�y��͇?Yȳ���3K-TŠiTIM�NRiz�N|�7�76��PH�0�W����D|�辧1y�y�4� ߕ`B9�1]�4]W��C�o5<�(��Y
䬖�0��.����t#xoiC�1f�Cen|ܗ�J���'y
f���W��'y4r����+���Ü6��l�(�T�pL�@�Ŷ��D�m}4�u͋��7;�h,���Oo*2��"5���K�{s��L/d���׍v'��爓S�(U)#�Jq8�
�%�;����H����O(�<΢8u$x�
'�!z�'eYn��&�)��1o")���%��	8��-���a*T��Z���j3
�%'Q� �)���w��
+�OG���-���}�
ڑ ��bѵ��G�F���P(2����_�@i̶Dф�Q��?�ŗBhD�t?=�j��H���ã �0%g��X�U�TGٶMk$<J�;3璙=Ф>Tp�:��)�
+endstream
+endobj
+1477 0 obj <<
+/Type /Page
+/Contents 1478 0 R
+/Resources 1476 0 R
+/MediaBox [0 0 612 792]
+/Parent 1454 0 R
+/Annots [ 1475 0 R ]
+>> endobj
+1475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.378 510.286 506.101 521.134]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1479 0 obj <<
+/D [1477 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1480 0 obj <<
+/D [1477 0 R /XYZ 86.4 565.848 null]
+>> endobj
+1481 0 obj <<
+/D [1477 0 R /XYZ 86.4 547.092 null]
+>> endobj
+1482 0 obj <<
+/D [1477 0 R /XYZ 86.4 411.167 null]
+>> endobj
+1483 0 obj <<
+/D [1477 0 R /XYZ 86.4 218.509 null]
+>> endobj
+1484 0 obj <<
+/D [1477 0 R /XYZ 86.4 180.326 null]
+>> endobj
+1476 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F14 694 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1489 0 obj <<
+/Length 1459      
+/Filter /FlateDecode
+>>
+stream
+xڍWIs�:
��W�(��Xq�vx��Yƙf��
:m�,ǚ�%W�ۗ�@��%[nrHH� �Ϋ�;7��t�隇NB���N�t�'b		9u҅��
H4�x���F��j+�j��v���zv9��=�zԽ���%2�"�y���am+<2_\\\>ί�@0�&t�3��\��_
+&��&$��m&���Nn
��$v�h��#xB��������_1�ݐ��A�	%4
+�lb�-�ҫ󬚲�����|Y�x��uU��J���MW�@ֵT�o�2�ӵ�
)�X
�hE���9r��� .gx@��=̴Ar���u�t��bDU?�B�Ec��\�;
��*P
��4a��5r.d+f8
�AuB
�R�֧���(��m�Ɛdc���
ne��
C��<)|ǝ'r�w�_�<|>�f����$Sv=��@�p�8I�˧���s:��,�:??��]��o��{��
�f��'}{��U��v��ή���ʑ��`��/gwW�O����X���ߗHT�i�>��c
���lx�tU�8����][�*R0i�:�a�N=�*˪ޘ��eE嵷���Y�4U�lY�٨�]Y@��T�mQ��m�+^Y�!��~������a�G�
�"u�(i��\�C
_ l�0��*�������v�̀���w�h���o�Ψ9
#�6r�P�������
��z\���rS,v�
�Ѝ$T"\�g������=��j�Q{�C�s�x�]�	T��
x��cA+�� ID��t�
�:s�F tyWܾ�V擄ѽ�/>QN!�`/�q\^Hh���F�KW�cw�
`!>�\�I�d���M������G�S��)�y��٢*M 
����X��a�>���Jn��\���O�����a�+�@�*��Y�L�+��Bu�E猛����u�Ӥ�J��[4'apԢ�������h���wz�IM�
m�&&�Y�wl7
CӸ���)�p�z��`L`�Y��{�{���
��cU��@q��
�=�0*D�.��M
ˠ1�_:�ݸ�y���~�4���:�5W]U���`�A�;��/��p&i��0^���#�~Ͳ�t
B�Z��g�,�W���x.��K<�M��~ꄃn�4��wV�Gq�r�п��|0���
+
m��޽�� �jr�M.d]w�2������Έ��v]�A0G�˾�a�h�o3E�m���6�wř�kiDX�N����0�z���ӿ���W�!	)���xk��	�+\�����X}hWM����i�a�e/��ݑ������ϛ�Blh�F=lU�����5)�)��=�t����(�!Q��9"�ħ�Y�6���i]�"ZArg�a?P4�>��Vf�K!K���k
,�˙)��s=�EvYۜ��
�ɛ�.:�Q��Eb�����4 m�yP��ԯ&8��]s���!lT
<}ޥ�'�}(�ؿ'���N<w ��U�?
+endstream
+endobj
+1488 0 obj <<
+/Type /Page
+/Contents 1489 0 R
+/Resources 1487 0 R
+/MediaBox [0 0 612 792]
+/Parent 1454 0 R
+/Annots [ 1485 0 R 1486 0 R ]
+>> endobj
+1485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.671 504.93 250.645 515.778]
+/Subtype /Link
+/A << /S /GoTo /D (Item.40) >>
+>> endobj
+1486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [268.025 504.93 282.747 515.778]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+1490 0 obj <<
+/D [1488 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1487 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F14 694 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1493 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+1492 0 obj <<
+/Type /Page
+/Contents 1493 0 R
+/Resources 1491 0 R
+/MediaBox [0 0 612 792]
+/Parent 1454 0 R
+>> endobj
+1494 0 obj <<
+/D [1492 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1491 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+1497 0 obj <<
+/Length 1547      
+/Filter /FlateDecode
+>>
+stream
+xڵWKs�6��W�Hy"o��[���
�i��d<
	[��H���z2��]`AI�(ˎ�� �O��K�F4������W?�"L�)њ���&2��H3M�f�U}��,�Uo��\$*ֳ�W�!�$�I���\�$���.o�U_65257��>�{s��'�1���
���XWU�Dk��"�@Q��jh��#g��@�i�u]�Y�

���|G�T�7�m;g������-����Q�w��"�yYv5�;fX�NJ��ˬ�mKfs)���>0W.���f}P����
?а�oZ�F4׊pƣ9��P
+
�Bŋ֠
�p�\�.
�&\��(.�]]�}�`�F,b��D�H&��5_^|�J�!bD�&���H�@�*���w̨�.&DWxQ	MQ�'��qL#���0p��m��]�G������޻MH�7
��2Y�?����Z\���/�u��S�y>
6՛�KE�\�*�
���!:�
бq���|�I��<�q�j�O�MYX� s���{��v^:Os���O���y�6�k��$�}�D�m�\ɂ�d_����M�s�ۛzX��,6�4�6\
+K�I���
0�\��
s��X��:<6��R<������(�WtY�nM]�'��A���"���=�
��yH=fy����0 \��p
;�g.(’[
e�!I�{�+�m�3��id4~_�Ow�� �;�7MUa>��-ď+�#����q;we����H");��@9JDa!��bbG)���v-a.�t�z I%�=�}ZB�H2A�H��}:!��$N�0g�O���;Fp�Q��;��5%���g��7#��o�y�n� [d=
,�AZ
�Ez>���6���1�]��8l�
����m��*��=�g�V�����&P֐�n/	0
��h���C8��G_���Z2����/`�G!υ�� 'i�5A!!�6$�j"k
pM���8�'xc|��ơ
P"���^�\��ʂ��T �;o�A�\��*�
���	8
t���� `�11��!%�?�0��jVCعʀI��:k7 ®�����v�
�z�
�/��fS��h���-,d��*\>��Å_��������v�$e��{���g
R~ w��,��
�g��8AN����2 e�>���ד����x�> HjH�?������
H:'J��=�>P
�b��/��O5���K��
Tʱ�]��M�x�)��ގ�~�3�d�G��;4���Yl�.t���=
fxV�0�unJ�q�MzԬ:���J�y�mlf
+ƫ�l�Aۀ�x�<
���a3Nꃡ��=,=�=�#у�xZb�3�y=6uK��-R�_��zsk{
�����݁�}O"�`8�t��W0x��
�\����}�|'Zw�6��6�XB���#W^ὁ���*����NjmmV�^p	���xdm�ݯ !w��Ĵ�A����_����n�<�| 2|>|�a����gt?�
��(N��Ѷ�^���Mv�g�}\
~@z��;c�������N�?+�Q
+<.�������Db<Q�2��n����>j
�G���
+endstream
+endobj
+1496 0 obj <<
+/Type /Page
+/Contents 1497 0 R
+/Resources 1495 0 R
+/MediaBox [0 0 612 792]
+/Parent 1499 0 R
+>> endobj
+1498 0 obj <<
+/D [1496 0 R /XYZ 86.4 726.045 null]
+>> endobj
+266 0 obj <<
+/D [1496 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1495 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1504 0 obj <<
+/Length 2984      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[o�~����:�2�Sj� '�$hO���K�l
�J]�����E��ח5��I
���7�
�F7��?����OBG	I4���uk"#���.��o�D���PT�>dͦ��m^��k�Uu��b��f����_����U��Wۮ���������g
�
�(K
mvg��N�-��Q"�8���v�	��TDg�8��u�x��D�XG:a��^gi�>�ai�Q��'U����5eU��a����mڪ��|��Z�W��+.�[3F�,��������H
�h��s�/�p_�W���Ђ-�|T�]�o�ג6�n��Y�fy����ҭ����]�5�k��1���l���q�tU�g��w�f���M���v}�i�?L�DJM܏��n���&+�:߸��.��@���wv�C�R�S�Q�
<v� ��j
��d�5n��ܺ�|�/�

b��
�h�ކu�a��ҾW{�lV�����R�� u���W�%N�njи_��C̒qL�҂�J
�-A��{�:�+	@%����n�_ў`DĽ��;W) A���,�X�ZW
l8�*�r[/��4ӫ�k݈�:�{��^e [...]
+?�̩�񇊓D
3A��0)��<��`
+V��
�:n�
+̴7A �n�vuF��F���9���m0/���6sv*�SA��N��
��'��P��sm����ss[�۽{�r�V�۬q���ѻvT9��~���}�I
�06j;~bԮ�v��
�WZ�:�G0]!ĪLwY�`.�E�saZ�e��5��	�´!	� 
+8��rZ̞B,�
�=_��ev�kr8
�u%<˄����y�`�A�ӕ0Vi��_��X���	�J���%�
+��
+n+��c��=��X��L �"��^G�|@�*
s"׳��|��e��O�K<�?�N��G�\
ж���k��a�0ǟc�1hơ~�` n�W>?p&[�x������7{
��.}3�.4�6�`�fr�H'���\c�7�k�m�(\�$�ဃ����W8���d��
1��9$��x�%���د��*�S^�^
P��f��P�ݹ��mx�MH�
�b�'��l&8���[��l���tcr7,C���r�T����2!�Q1
B)��DŘ!�Ib���U�9zW����<�>T#g=�D�
�����¸�a)��>e7	2mm%qj
���ݾ]�/��
Ds-!�}���Ҷ���� ����a z�3�[�q�
D�NG���8
�0�V]�
�k���s�Av�`��-����g
�$ ��8~�!Qi��
H⊿���P���H@�c�\5�ΣҰy3-��,��/��l�P#?1G��'0H�(EPA(ĐWh-UJ�~��mn_Wm5ټ�r��ω [...]
w1 �?��?=�u��s4��;����`�gqyp�$$��p�ڄ	m)0	)b�X���G��Q�f��!a^�{t
�X�!(�bgȚ�EI�����pGyԤ<��!M'����1�7rq񏀺fD�Q���ڗ�����gx�
j�?�6wl��
�J��ш;�äI�1�����w���)\-a��#��@���s#N�5�0� ��z�`a��M�Up���\�A��bi�r
;�a�*���#�
l��WIQ�|

��GH���A~_=
gG�F������UI
1tsAۙ`�<��
�p����ڻ�c�X_�6˭�����e
@1�-g��� "�
+4Kf��
�NN�
+���+ʈ�Q,�lH~��UHl(�3cx�C�Ъ
��
z�


+���J>sF���(���	�#ek��Y���&�0��	ʈ�|J$��쫉��S���?��ٮ&uI@>T56�H��6[�� l�!}}�k�к�%�Q�ES�#*�29
u�N:��E���V�="a�+��
���b�j��k��
1
ELl���	���� ��*�W%�|ڮ���
b�ظGk�n���������V�=Px��9����� Ե�������r������z��ӏîvy�:��U�oW�a��4�(��S�V၉G
+�n�ϓ
΀�s5�
��[�Fm]EVg���� |����&!

�
�ؓ�1'�I�{�
 L�
�|-=�˴�;K���g��Ѝ��9:F��
ʰ}
���͞�1����`7��d�&&�蚺&��ȓl��6�k�΅����l�a���l@
�"|Mc��u��M
VA��
 icZFA�͓̂�x8kńx�]�
,�/���B$�0�85�xB$ݴ
��Q�f�
(������_=�-��	BeWN0	xi��q{����c�O��2�
+�V}I�SI��NFFnl���ֱGH�ї5��=�_�&���đK��
��S<�ǡ�}�I
C��ob� �����xrC�
�ɠ�������q�q��r�{
���Uws�[۾��
6��������ZǍ��ϻ|k
�7�v�
�p����=�R�(�lk�
h�C��ȱ���f�Ctȫ-����|�gCz���&��
��q���(�z�;��
��C��2 M�p]?��
��Q<�o}��p��?zQ�#F�?-	:�Q�0��#!�Чv�1��8$`
|�=�O=lH8�M%�����>�纐�qN$���MWn�hg�C.y���^���¬[��1;��
��h�������n������.�]��Yf
B������s�{y
�'�7�&lv�i
�ʬ~h�����٦ځ��:�	>,�D�C���E
�vʭi<v����g�f
�Z&��O
�%<�����|��û�],�	�1�/�8�J�I�JZ�$%���Qu��S�|�s���������O������,�C��W
+endstream
+endobj
+1503 0 obj <<
+/Type /Page
+/Contents 1504 0 R
+/Resources 1502 0 R
+/MediaBox [0 0 612 792]
+/Parent 1499 0 R
+/Annots [ 1500 0 R 1501 0 R ]
+>> endobj
+1500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.801 437.184 127.523 448.032]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.691 70.558 214.414 81.407]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.1) >>
+>> endobj
+1505 0 obj <<
+/D [1503 0 R /XYZ 86.4 726.045 null]
+>> endobj
+617 0 obj <<
+/D [1503 0 R /XYZ 86.4 61.537 null]
+>> endobj
+1502 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F49 636 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1509 0 obj <<
+/Length 2840      
+/Filter /FlateDecode
+>>
+stream
+xڭ[Ks�8��Wp��m
z���Co���'��ݎ����6������~2%��*�r.�D��Ǘ�N��(�>�����_��
1����.�T*x��!���z}��<�������?O(<�D4J %I*T4��|�#��p�(!ܤѓ��G���l]���$񊷏֐�aE;4�T*���q}��8���g��X���3!D|�7�I�,ݝ��|q�t\�'TL��X.��V�^/O�XO��ʧ�ǧ�zpg��Xc����h^.�}^���j5+ZBl~��6����Āg���f1-2�
+6��h䈍r
�V�)U$�i�����}�:%\��A#ư�A@�#�c'�10]�X�Hm�7�F��"��~7L��J�bӚA���N9��Wp��|�
�S�6�= E �i�A ;8�%�l���������{r��"x�ͱ�H� "�f����ۗ��~��
Ղpʭ� �
����w(8NhS��w
XL�]3�R��&閷��l�+0<��
h��K��
��+�K��&=�>Ze(�|H��R0��1	�B�10��{ ��uH6t^`�|{��ӧ�>\t�eC��b]���&d�y>_��.���2����{"���@{`<�� ㆙��Gk�@1SD�tsx���ZA
ʻ1`�T| ǃ�
7�~�8�����ã
 �һ��c� ��뇬���~�71��i"����*;�
���|�R�C^
_��rn�=���:z:/��<����Ã
��R�P��t�
]р.	t����0�� �h�
�M�=��\��H^μ ��Q���� v+
�m*�%į��c��E�:��T�����U��.�@S�+�
���_�	i
�G���+��� ���G��Ÿ4	I�(�,
,��y)�Q\�1蹥��Õ�o)�8��z�ޯ
2�j]���I�(���C{�ZD� ��-��~D���:%&��e
+k*#^�hWf
�n)>���J��J�}������ã
���m��g�r��|,�u�1٬��<t\cw�y�M�Tv�Vٍ]�?�v/�pc�P �'`-���8���9{4������w��s�ՃQy�����U��s|���|�|ow��H!�H{�X0M(�
�G75$a�?䰄a �}-X��:��������
MW
d��(Z��$�UnK�uv���o���f4�΅��
�$�V���h'�)I�88�`.���@j�G7E�1�	�v�d����m.��P�]\N(O���RH
+E[�͇���յ�`4��FM�@G2��
:�g
�"� �P�� ;sOؗ���G�b
;B��B� �,�
�����1:��M�0
+
+O��y�)�f�2�>u�Lb�n#>E���I�~O2��w቎�l)؞Xs��b�i�Z��.��P<���+���Vo�6��j�~���i
,:c�>2�љ�!;ҼX�DQ�)�\��
���YnO��Y�ulTR�4��!�l�!��=qC�������}7�R�=��`[�gB����<�&�+Iۇ�v]�٤�+G�
Q�z�f]	
�٠L Vm���Mc�[f	(�l.�yy�Mr��]z4�
��S���߫�J���
7[>�
�s]6@�s������{}��$�n�P���ح�$�!�# 	y4
%y�����Ō
%y�4޼�-=����j*~<�5��(
�s���c�
X�(90_
=��|!Љ�ߕyV�
����S	)�0}$�$��
���	S)�̴-��B��•�b� :�����Ԧw���	e
w��U��bq�zS
�xX/��:
`
�mKl
t�(�ɴ$Z�v�����J�Hڇ�UGj���gS̰Z�
�u<u�Y��i� b]V�|�*
���>m� �]�Ʒ?V��P��!���
��IXA�����rIemO��o��"OX�m���X|�[e_K�
�ÁYYz��AL��pxS�c����z�O�Ý
����r�|��=ο�ˏ
�6d����֧{y����8O
�|��E� ��a���Y����M!
_�A�5$~}ٲt/�C�P-G,5�cq�S{�b
��S��x����ŵ ��!qCm���n�0��Mh����8WD	�O���:�%q�Y��$�㺈^X�/G�$�P=[���Ӭ�zx��w���b\�1x�K����x�
����-�7�sX�-�Hu_��|�Y��o���-6�am��,���!=��m� ��T��c��O�R����E�VBH*���Ny/�r ZiG7fX��6z�Pϣ`"֩�_n�
%�U|��]��ޯ��
+��E
�h=zQ����f=/��Md? ��m<D/��{�
*��ۄ��%3��!z1A�(���xs��&=K�

?�i���ܲ�)2���j�O޸j���)�+�cñ�&
���V�B�_�?�~�Ip�d�i�e3i˸���e>��J/�S��}�fgi*����	s|"��B�AɄkJ(�Rˡ�U
�)k�C��p�0>& �t�H��j��ҷq�:~~9)c{c3��Ơ+�Wݺ�02
׮�#ӳ�f��)T�p�,��4����v�YB
�D"t����e����}��ݶ֤|_�V��
��_?`���4��,&��W����X��W���[�o��Ї�oֹ�?n���b�:(8N,�釮��{��	p�����Q1�L�-�UlfSwz�����a���}//
Jo�Y����Ao ��_�v�a
+R��.
����l�N��:���E����
Q����6C��{�%.~�١R�I�C���eJL:d��q\k�c3�bhVJ��@w42/����W�ĕ
��n/��	Y�W�~Y�Ԟ
m_��8�G�h����1��
+endstream
+endobj
+1508 0 obj <<
+/Type /Page
+/Contents 1509 0 R
+/Resources 1507 0 R
+/MediaBox [0 0 612 792]
+/Parent 1499 0 R
+/Annots [ 1506 0 R ]
+>> endobj
+1506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.073 462.148 492.796 480.315]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.1) >>
+>> endobj
+1510 0 obj <<
+/D [1508 0 R /XYZ 86.4 726.045 null]
+>> endobj
+616 0 obj <<
+/D [1508 0 R /XYZ 161.495 696.212 null]
+>> endobj
+1507 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F55 729 0 R /F48 609 0 R /F49 636 0 R /F62 1511 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1514 0 obj <<
+/Length 3338      
+/Filter /FlateDecode
+>>
+stream
+x��\Ks����W�U�ȼq���
W\���Ut�}�(�Ą" �J���=� 8 D�J�r@`�������3C��݊������������V1����2*+�l�8]]ݮ~���\3.���M�M�},���r͍��Ox�Qy�����}s��/��CW�
v���W?\|wu�

+������j�y���w���7?�H̭Y}v�
V�ۘ��n���o�һ/���r;*��R�H�IP����1	Ж�V�J�s�b+�S]gY̵^)w���W1�[���ނK�>����h���{L.itp��<����:����ܤXLW����GZn�DX�&-bF�wӇ�!`8�4&\/�+�:&Tt��{��U���o}Զ�|x(���đ0N��
+	��
�!A�Xkun�
LIc���<��51��L�Q��r�h|�!%�
��O˯�<y�9���4	�lnB����mR&�k�d��_n`BĚ.��������	�ЯFB�l���HJ
F��zX�<
 
A�w�/iy����ZX��x�#���2��1X��2���Nb��
��<Mv��c���	k��v	
v����ﺺO�h	i�/�Gp1�����9�#8���]_]��2˽�O�@?�_�-ч�t����FƬ�.T�oU�' nB2���(H%EqxH���A��7�Ov���Yx�݇F���|�s���C%gM;A`�D�F
ϝ���1�Vl[ٜx;
3��
������(`Z�ʍ�4�G�u����W�(��[è$���N'>�@WR�a[=ei��8�c��=^�уE�{BU�|]�D����7����
ko�!1�H�L�O�C��&$7��4�M�Eu[�5�n��q*x�ɮH�m�Ì�����$���mh+���$�e�jIW;'G �k���
��N;�)�a
@?��
�:?�s�sm�恏���%&%�> ��
L�Dg܆�<�����8g�ov��
�����6���Læ�upE�ۥ� =�)��)�Kl�� �/�VY�oO[?B�G��`��Hڦf�ƒ7�[
��dWCW[s
�AH��H
� �
�3��ĤN���1I�`F�
�?��-as��SF3�b��V3���q�

By��%:���|:Q
(
1̈�1H�$@hp���J]��m鲌�� �T at +��uj\Fc&��r&���]3��/�e0�
+F W[Q+�ҍ3���n��WO�
2i�(����Z��7 ��9N������XdD�;R �a[�D�p$��7��
+
u9��CW�;�*^�vc�B�
+�����Y3RPȬ�I�b�!!�m��&$�&ǐ�cHi`BZv��

X��p���F�7%(ܐ(U�厴UD	>�ϏD	>TD��
+���D �9½3"N|��4��6� �����O\�42S7w4H�i�;Ox������O
TC�}V�G���-Pi��ݣ���

w[OFz������2f����Q�)˫Iუ�'�a����ͳ���/G������1Qr	^ 4s��/�ff^����Gnj?

���� 4en���b��,�y�su���/���?8�1�8º�L
��
�sE
������g�`�=@na�*��&��<��Fa��N����&e~9��zy3��E���+(ϧ"(L��Ȱ
�ݼ����>0	}�O�4 
 �ʆ�$��LLuc2�Z�p��1�&�j�2����3}
j�6��d�m����TS��֍��!�*'L��x	�
�?[&�l�����Վ*�B��>Fg8��7���<:�!�4ܢ(-���Tk���
��Q�j�P@��jPG0V��8����E��@�3r�j38�T2u:�&VMu&�<o��tV����t�2�Sw��
�f��W�QlH+#�1���6	� ��l ��04pQ����W�a��D[1��!$4/�1��
y{���5�䋰XJ�$
���j�����l�r���7�A�	K2�Ԛ��Z��c�Z�q�� �`��t�8[�0Ǡ8�+2�1-���
+D
o,�z>�g���W-�Axτ2�MD��D;S�� ��iǖf�t����I������c��	�;��@2����1���N�z%����o�O�rbXlYc�(䵐4Xtl��^
h��u�2���q�?���k����禑����/:B7�u$6�f���N��?���p_��:�LYZg�L�2������Ϭ��A?Z$����ųE
fr�9�W���95���4�c�	b�T�桮�@�UW�:=����
髓�]�w@ =�nN!j�y[T/�z�j��eT�Rf�1�w6hdAVs�7_�3B
+A�
+y��%`�u�
:Yy�<�Eh�	 �
)�Г�X�M�bQB
+����"5�8��
+�T2VV�_��6F��f�Y��I�'Q!b��"�+LL�dф͘Ћ@n���o�O#����M��0�A���ֈ�7�M�{�
z��,�98!@r�"��{��a����-���SA�(���/�2;�"�H�U���
.���[lwS��5v���x����o�*�A�P-�Ih
h�{�ڀG ZM�(�ji'���=��t
h�
 ��n���
����}xqҨ׭N�
ҺCm����Ӓ�
�!�5B�GZqdPa���cj �]K�����$&ӏ��Q��@�;Zm
�c�\�j�Y�߆eZ��ٶ5�<m�3��3���p���%|+�
�}�"��t���͊�찻�m�=���ӦO���
�[��`��I`�[gM���n�X<
�B�I�T[�u�e��ݻ�
~s�; 1@�
��p�d��Xx�I�.u�.uT#lj�y�Ը	��3,Vdr���F���0�#�=Y��ʧL����V|*`j{
�����|'��EXH���0�1Ȩ�Ƴ���1
�T�-kG9�u�	�N��mr�`�Qb�*6��b ��љ��M�a��e����V2p��J��K
-�ߔ5H�	eD\�h�[^�2�V�zZ
ve��� Bf��(��i��ع�W��ve�\A�
��w�m�Ÿ�����M�����S�@f)���T��$TA3�)�;=^}S� �v6r����[ZU��v�?	Og�ޏ�cKf핞-b��������w0p�+���
�+�L1zOms��������eǖ�@�/A
�Ǣ�-���]�Ł���"�
��� 
+K�4�H�P�+ڃ�?�N!�h�$���=P��A[F5��G�G*J:QT�� ��
�_
vCŝ|3؉A��G@�~[�/ưp���5�|���D�$B=^yL��
B
襙��ZxK-����������b8}.���d�(��_�@>.����V��#�5�
+endstream
+endobj
+1513 0 obj <<
+/Type /Page
+/Contents 1514 0 R
+/Resources 1512 0 R
+/MediaBox [0 0 612 792]
+/Parent 1499 0 R
+>> endobj
+1515 0 obj <<
+/D [1513 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1512 0 obj <<
+/Font << /F36 464 0 R /F62 1511 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R /F10 754 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1518 0 obj <<
+/Length 3445      
+/Filter /FlateDecode
+>>
+stream
+x��\�s��_�GyZ�����=�I�I&�I�y�e�:Kg+�$�$����
�?@�<��̴/MA
�b���.@�����~�׫�?�M�#Ns=�z?SL&��pG�`���짹3�?_}s���Ň
?�36��Hh���zv����g:[�7��(�Ξ|��L
+G8\��~����:�ˡ�8�r�!��BRM����R�-#N�L��]�ݵD�
'˜�����7��%w��>��q��\����-^����x
+W�K6�]7M�� 
+�>|�%UZ@��4'����&
,R2S�Er3I8�L�-�řc�
+3I��B��v���
�V̗;�+�_��7���i3�>�G�0$�c�B�r��FH���������T��Of�n�.�o�t�l�0a�7;dz2����׻�	��@��}:�k��r��˦�o����\(����*ᧃU���r�\l� %�t����,›"j|���`�֧#�X��;\�� �n.����5୙�-���-�V���p%am�*8L4�hj�̪�P������?�1~
+#,�Frb���wڇ��@U;_�l�G��>
��p�l �����
�o�`�@+�@oС+oF��ȝ�R�3-f�)46aD�4�
+��~�Y�}�yI$Ul�}n�̭`!d��sh +��}��
�Y`t��30�`4
�*C�M�X�aKm^�G�9���43�1U�$F�ӈI��y��ϑA3J�Q�QW	"@�R�W�'��4d����ԣ��@�
h	:|���U��˄Ȳ	`�1�
yK)m��,�0r��B̯�6��2�=�������b�%:�K�}��2����|
+\�[ޭoP~��_�p��|�
�)������Q
�a�3)ǻ���*o��\����P nݿ��O��]�Z�"k�k
L��9���ў�6A� qs��6�p�j�>.˰��~XB���-�������v�ݧ�!kw�@H{�bB���A�D�/�rL
�]4FA���)hL��뿬V_�w��r�)���i��9��@݌�ĵ-�w=��p;ԽF�� >ʶ��"Z��2���Y�k��<��{X/�O/�k�D�~��3�C
J ���\�k�)*���>W<��C
 
�� uR%`�ҙ��P�a}z<쎡G�a�����)�2f ��*�mv��v�M�a
����'|
��Baa^QU�C�e,N�4ca��Xd��Db9�e�kW�K
:�RD��-��C�/U8$�D�xX�ID�H""`���
D�4r��y��>�$�$uW��3u�f ��ļr��_�O���Dț@�h�]�B�y
>b  ��81��
�>'x\�r |�
+|��Qw
νY� U"�,�=��r���c���<\|�T�c���B�����nyx	�������Q��ǛS��H j�O�$�X9&EJ��X�/1��"��gi4w���g�
��
��d4��x2���ȼ��C���
w6��L���̡�^�
+1��|#w��r�a����Q�0X

�;ãO:�}�MkUW kHJ����,��|��1iݝ�@3
ͦ@�r��o������O�k�-宷��~����t�h߅�Ps	�-U����lE��2�Q
���:���ܗ�����o�m��a����V
�0�t�VA��q��Q�[$�P��?�&���e���t�`��H��"��M�~�

ˏ��8�9ױ�JgK��uXb �K���H]�b3n'��J��?
��4�N�l��+}��	���4�|�;?!�&|g�5��c��
�]+���
+�@��t��2��x��k��ۻP�]�������خ�������� ���h��_ŋ'&ʼn���
��%&�#<@JA(�)��.�5�R�,ŗӛZ,8�
+� 
�*ם%5Z*�W�BU(���5�Ӏ���z�	՝& �vY�����B��)Ԗh��:_�5չ�0�B��s2yJ�=�}a
X�V�VI��NZ�g%-�-2K+9
�T4!�F����O^�*�U�(eS�rH�Z ��2+񦯁���%y�&�E]�펬%t1(�Kև�����'��I�H�]Y�fr��Z��"D�Y
Mp�	."R���
a�
+��j�
+O�>7��4l�mj�$�&�k�
+����1
����$��:c`,c
���-Ch��!|Qp��q��c���@�p)� )�h��f,w�EVּ�0���ƙ=���Ci�)�W:�S�ܺ� AP�u ��wx����R!�>nv��2�.��B�n����Ҷ���)��pc��
J�����1�\e'���
�آ��r�} P�����(�2`�:l� �x*I)�q'�$�G�Q�d�Y
+جZd��šg
r��̻JH��G����E�GX ��N�]u+w�X ��ۏ��Ɯo�J^ϲ8Q�4�+��٫�`��{����{�W;{U�WJV�;�뀪�qs�k<��
�Z��z��'r�8k6Ā�t�f�<mf}y���ͼo
�n B	n���B
����RJ6�����J��o6�v�<��$���M�'�;��
���M
�@�U�<s��й71\F+)
+��R{�-
���TYI��	��:-4�>���v'�ď���gwbҪS؝��b� ���z�ywB}Fi$Y�Ha��
�-( ���+����``�����魅)t-V`���88^�c�7vR�8�5�����/<��a�p���
똨�.�
a���������f��ϭ�N⅄>Ê79�
�ħx��S9GjZ�ڃncxҚ��T���ʌBc)𴫮3Gc
j�� )I�L�Y{�>��_ٶ �j2m?�o[f�M/Fe 	R��ςH��͉�gz׾9�"i�m�Y�R�1��mX���+�E
��SS�J��߲4-�B�<Uz�M
�k�����}��6�����T�:�;\F+��Ĵf-	Rs�+?��b���]�IW&��q0��[��1T,R��ü@� 
VO�=ˋG�E�@��[z�a�1g�����I2X�CW۱5�y��2�:�8�6fEH ��j� ����@~�I"H���/���2l!�U-��C��	�	�͞p��A�&�$���a��4ϱ�dT{
,�=�H|�,���,Dt�<^D%�/<�g-#�5��gӢ�������
+l>�Uu
+����(����U�T�x�Sy~���N����m٦�������3��]8ڜ����D�b*�Os���R�q��H�Ƌb�a���M���ma��c�
�Ɠ��S, K$�|��*� R�MB��� �����&?~|���X�����~ۃ�^÷�����l�Jx���Z�v��a����ms#;��V����vW��
��is\����.��0=�P��a6�]h�A�A�}p6�2���
1߭���e<,S�A>���"�r�������)�f
+endstream
+endobj
+1517 0 obj <<
+/Type /Page
+/Contents 1518 0 R
+/Resources 1516 0 R
+/MediaBox [0 0 612 792]
+/Parent 1499 0 R
+>> endobj
+1519 0 obj <<
+/D [1517 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1516 0 obj <<
+/Font << /F36 464 0 R /F62 1511 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F10 754 0 R /F14 694 0 R /F1 756 0 R /F13 757 0 R /F7 753 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1522 0 obj <<
+/Length 4094      
+/Filter /FlateDecode
+>>
+stream
+x��\Y�Ǒ~�@ľ��޺q�Z�e:dj-����azf:�c�f$m��/��O ��}a_���<�̬!��M����~��f�
o��\�N�)��
+_�'�7�N�{y%�fj����o��m�^���NM׷t���}o�|����?į�5�bz�[�/�u��o�_��c]6��:�p�L��������_'���M�¸�DI_�-&^��Kt��a����G؂s��4��8WX��̀���Z�	댘8��(b���vb�51oV	?�V��鮼K���n�K���Ŭ�ƻ��K>�˰JsYh��|3���'8�&#
+.�q�)8�c�@�6YU.#��ϖ��s�
&�EV�������gwIsg����}%?,�gS��H�I�sD��9��3([Xk����e��y!M#�}�yW���a�
e�,�t-��
r���������!
V�
�U���0^-��u�d�.�,���ػ�Fy)�{��i��W�����_
Q�gsc�:�A�Ǖ���B��	�<����D$s�!�m
S��	K
^x�� ��U
q3"�4�
\(L�A�!���0A�
��WJV(��{�Xη�M���Ha�7J�LC�v
����i��nbz��M]� ����+Zhr�-)��
)��k�Q�Y�A6Z0B�#\��~b�M��3k�T.L�0Հ�D�.�By��L�O���}��æj~���U���pۼ��ܬ���K���Ů������z�d
P�hJ��P��[�L�`��AaT�O/fqf��:
+L2Q�����С
+�xC����cӊ�������}pV�sL$
�m'��^^�6�M9�R��T�e����61!7���ċm.���U�D�Y�aX�
?2�rR�P�4�P ��}U����f�������6��e/?EK��.��*}���nE8��`����;=���o����}�a9u��P-��.��=#��I�졟��|Ɣp��5۔q��z�L
R��w�9��i]��!�{�� �(��O��D
�	��L!���n����@��ʆ�5��橪��p�<'��xI>�2PK�Y��)���s�e��`ŏ߬W�v�Y��a�u��6�}��g��
l�A[��O�<O��^�����)�r���/�a���)�.�ق���WD��Krt�FLAn�v�X���S��m
�8�V�M�]��S#�38�0���xc
+��7��@� )Ӆ�@Zu���_��y6�K�O��=�Rp_e�<i�QNd!� �Ѣ���L賙a/�
�a�1��B!�z�/g
+�<�}���"T�阢�8�W8.N1E�b�
]�3���c z�a�
K����ԋ��?�����A臤Я
��6A�I ��<vv�m��mT�5�/b��>)	B���Ta�(a�b�
�\F�X6�Xr�A���@cz��E�v ���Ӡ,4̇); �k��0q�>��8{�(�	��J(�F#�̺�U��&���"�
IȕB� ̲�n¯�@�]Γ��ѩL�����X���
2�w

�z�vEnۍ
h

+(�q�]���]��!��' �!e�O����l�]�fc�
����/��"�n��ʳ.���	�
8>}j̕'��f$��!��^� Q�T���=�TC��\^
+
c�{�4Q��nc��nʮcP�,*)Mcc���
���:d]���j�[�D���bZ=r#u�R�I���
���鎤Ng �x�/�їȜ���t"s�aN�KdN�?��Z�}��V��H���m��`�e���d�D�G�.���6�� 
(}Z�)q�)W�S���Y3�%�g�NL�l�?�=={���2�ZR�M��Ak��	��
�$YV��P\&4q;�K�r�N1�-�8
<���]�U�IE_6�sT�
���T��
eo�n�`]�
"��	�|����f"2�L]���ɬ����E�,�7��)�⛸�X���>&�
O5�L��:Cڸ%�P�TQ��%bQ0���z��9r�	� �	X�����>�M�ֻ9����4�z*sts�ޭB��_�i���1
�,f��t��R�P��a/I<lw��w�R
+�+���3�8#��4�BX�o��p[A�|��5�)��1D�Z��(�U���]��rvSn�K��"��0�V�����
+h+�8hQ���h����F��lȹ��͙��oe]�g����
+x�P����I���3�h놙z�1���w�TDQ-.
T�����n`�P_�hr
UW��Q��N3&'N�N�c�j�A&b>���
t1PQ-��0�Ys�`T����Y�8�RT��S����0ݷӑI���{
+"ilt����b�
{ ~�Q
J]�
,��	S?lB
� t(�& ��ռ�&d��zoֻ.)؟	�q.C�ȱ�{&,�,�W
7(��<
RX�6�$�kR���}s��Z�r��q.ut.�Zb䳻N�:aʾ+th��Mxq��F��3d��{k�Iu�c�ln]�R����Z�J��h
6¥������Y� 
����[�V�)��j>���Rز�E����DZ������D�?׮��a)�	�~���$�A�����Z
+�w�j��ҥ�q��K�Ww�����nf��u���"�qr²o�%�l�6��P =�˨���k
h��9�$�+
�
N��)�M_�~_�e�T�9�v��E��.��}�ʸ�:�yT;�*
� [I�O�rS�W-��w%����CA���.�Oր@bSsް��
�o�ں���1����ST�o����8}���J��چ�{�&�!�*Mu�� �7Z�j@?���?���7�l�
��n�U��4�_e�� _�v܏R�":���1�:^;xKal5_�B
��O�e\�:ZO�d
.	�ȦHD/�\Xh�k@
�Z��OB�pR�
���
�T�9��E~!�9%:6����C�G�*;n�Q��X+q�y9�o�u

�=n����)P�j>/�4|�,�x�.�Q6z/�t�	��#@j~:4K`9l:�ܜ��ޅ�ܜ�Ͳp]Y�s��޹�#����q�ށ���L��3�
�z�YQ����4�0Iu>���b�e%��2xG)C��m
�
r����/@ơ5A��������v�5:��%>�?f8�/A���Y�CҤ�
3��	}�����3�:%/��х'����H�
+1�0�'u�3�I���B<wUJ���&>5^s۸�������fؾ�)�?P�F�:��3��9#Gzs���Io�T��2h*m�	`�e�.M�+��c����cO�߸�� �Rw>a_Y��@ì���3� �
S1+�j�6[�P]��u��E9�:f^��r*��O9U��PC�ڗ���F]da$�����`�J'W�6Za�="t)E8wy�
HIF">[�v��@�;��Y��x�IJ4o�m����%��+�n�K0 at y���8b��GC��E(�5�_��ڞx�W�:Çя��
~8tC>~J���p�=vwyHO��Ϯ�0���G�m
�W�S�tJ.m9s at i�ᖦb:y���;WC |�-\bQ�D���ӛ�7��
%�E5p�K�U?�jdgZ"0&T:�
��h��F���u�-��
�J��3�Y��X��5
+FԠ� �J~�!�߽}���_ra��_DD�1�Aq�YW�›=tS'd�$ �${xn�c�P�.�.b?�Òr�%��a��޷��`�l 23�F�^
�4*Ń}��y�A�$4����_'�~%�98i�g�I�
����$�;M�S�Ĕ�ձ-����p�|�ơ��$
p4H�R�
�i\�Ӡ��' �� �a at h�:��Jc.@�<(֞�NP
���^
��1^
b	�J� �A#�_l�*�&
2"�w
qP��R¯
++��S�>y�M8��I�?������X����AP��k2xV8NWY0?��@�c�����s�,�ذ���ۼ�S�Y
�Uԋ����w'��`oyK��XXQY�v��	'7�/�R�u:(,���X
���_����hN�i@�gI5"z���6�0 l8��Z
�p�ꝫW��e��v��e!�=�vE�
wDB���9's���m��+N{	j�O�\�%oU��w��Rχ�3�J�~��"��
+endstream
+endobj
+1521 0 obj <<
+/Type /Page
+/Contents 1522 0 R
+/Resources 1520 0 R
+/MediaBox [0 0 612 792]
+/Parent 1499 0 R
+>> endobj
+1523 0 obj <<
+/D [1521 0 R /XYZ 86.4 726.045 null]
+>> endobj
+270 0 obj <<
+/D [1521 0 R /XYZ 86.4 395.998 null]
+>> endobj
+1520 0 obj <<
+/Font << /F36 464 0 R /F62 1511 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F10 754 0 R /F14 694 0 R /F38 509 0 R /F16 453 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1528 0 obj <<
+/Length 2902      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o��~�� ������r�Hs��
���C���Bu�h�������RKʎx��Ŗ(rfv���of���
goN�69y��� #��&_3-�5H2�Mf٧�D�t�4Mn
���.>�����p�e��������pF2��=�����������2���٣�s�1ę�O����	3���h[ry����wޘ��nQ,��)��2/O�d4_��1B���7.�L �e�i�Dk�p�S�i!!�a�ICQ�[�]&����fe�zTZc^����AJ�d��Cʕxw���0
�2RE
EX����6T����]|ܷ�2�eC�@�BR�؆w�o&�&�J�tEѫ(���z/?c���=���ژmQn�G
���
�1��V� ��$vo�t�1�U��#��tL�(����$V�My�/��&��a�
��k�~F�c�����
/�(X�v��fgVJ6f�!�Y6�2"�(<�F�|�H���
;�)���&*�
+v�
0;ì$J��j��H1�V��Hk��`
�ߊnfCXB��Ȓ4�zE�������1�Ƙ�`���X���9 at k �<��J3FZ��
�]3��l�6ꐓ�0q��P�4%��	�[�3[/�j�ω���?͊��UQe����������U7�k}׫���I��_׏��Y^���.5��TZ�����ӱ.|��T!�����/^Cyݹv�>�
EJ{;>c�Z�D����I��	�U�� ��9QX�
y
��W�	҂��s�)���}�C\"�y����y��|�Y��p3�/�/�tZX궭rǺ�C�����
��|�/M��;��{�GͶN5�
�7�n���ߚw�Q�J
������b��

+ְ��"%�q3��C!OXIB������;�P
+M[9�i� ;��� ���FU��2$j�9L
	d0�7B*D9?��@�Y�bEa.z`M�D��A���r��y�l���@?�>�
+)����[rT��ٽ�ʙ�R�
�PI�
��p�"�^��'�(�Y�޿y�
+�P
۔h�6"�jT��4!N���	���0�S���(��
I�K��W �€	ڵ9*�)�4'NQ=�Հ,��!��@""�����<'��!a
 ٯ���ph��&�‘��	
eI�Lj��H���U����V�����DɢiP�)e��M�������z�=���/_	���B)���Fdݟ1Ʃ�bdm	�כP��w_y]Q��XҾeۥ˖i�o�n�[���9��v�Mƫ�؈H`��~���_��@�o���殺fzOȨJ!���.���D�!�ā��<N
�B"��	��_�b3���ġ���r�"ev�����Ѭ �W���J��<�ەp�+7�m�݅&t�
w�T�@��h<��o�b4���ɩ�5������{�(Ӷ����~xs�}r�2��������%G�|�
+�o
+m}]� ����c�~*o��pK�L���0�=}
���%��� ����u�{�����v�!3�l<��peg܉b��/� $�!ջ
#p�nP"B�
`�>��Kpch�)&.%�i�.�$
��/Ŷܬ�%⏁��
B�m�0�hCo��,!g
� �T4�o����O.�S|Wu;�
�q����g�5R������w���8Xtc.�`e
��@�Y,܏�
�p)���6/�t�ރ��
�Uf��-�$��f}_B�n�k�	�n���n=�
�R��(N�q�:܏�EIX�Njⱻ[B���#�]��i�9��_MKw�b��tS�e~�W����-S[���C
X���[�
��T�Q�Rl�ڱ��.1;浙H�s��A�`�+J�{�
�� 8e�Z��曛�宝�+���ꆨ��V7�fg����C���`�'AWfW~�m&_�m<ڟ���
s���d��?v*�
gLqĸ"ά(��.�Ηwe�@H�
�P��$���h�DTt
�v��\U���������~�
��{�N�] ��j����N )w�$c�C�^G�������1�s|>�6bwn[����%��psb�[+� �� �^��*�n_R!���g�L��A���U������fǢt���Ec����G�ق�>�������U��P���c1�\���Ӟs��*�ťj��
[�u�f��pQ
%Msv�!��h�.��
+���.rB���>������{��;2�5
Q|Ԭ�;2s�0��|�<��u���m���v��V�S{�'ĽE�Sc�,
�|Q~�
c��
�1���fmB��V'����+�G�=�m��Rl\�J(2��&t&�	����g���u}�a�s{�tS
JY�|�c�I��c����*��F��n�%��6]���J����|m�U�5��mg5�
,��F�A 
��p��L@����ÞD&c;�QL0�$��h������@�
2�q�`�������
�U�� ��T�*���^�/���v�u���0���bRXH�vg!=�Fѵd�`�>Hԑ�΍5=�%K�[�=���
�q&��9+�2��ˆ{R
a�
q.b#��
a&qT6#�~�E��fLTƄjnu4������x
����~���k��hO�`q�
o��>V��v�y�m������ �>� ��Q�4���A���=�N��D�g�Yu�L�":�&�t��%E��-�
i���U�#�r at U�p��OgK�"��[��R�	��C�F�
u4��d�{
�g`�A�b� �W�#;�6�V�
���8�����N��1a+*����z>���~�l�V�y؞���)~h��
15D� ADUoH�)�w�����!�/P�$H����z!�R>������6a�P��f��KK���ۭ����؝�n��s�D�
+�}�	��}U�������
+endstream
+endobj
+1527 0 obj <<
+/Type /Page
+/Contents 1528 0 R
+/Resources 1526 0 R
+/MediaBox [0 0 612 792]
+/Parent 1530 0 R
+/Annots [ 1524 0 R 1525 0 R ]
+>> endobj
+1524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.579 474.868 117.302 486.823]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.749 474.868 353.471 486.823]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1529 0 obj <<
+/D [1527 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1526 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F14 694 0 R /F11 691 0 R /F16 453 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1533 0 obj <<
+/Length 3864      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[o�~ׯ ЇR�9���A
+���*p'܇$V�JZ��U�K;j���sffo�tJ>�pvv.���
��ÄN�q�����o��8�4ד����DN
wD
6�YL~�2J/g�;����|]<5EU^΄���
�b�<�q�����
oW<�t�Y旿�|{����

�	kR�J=��.~��N���	%���g?n5�������4n���� �2"��h�3:��gʌ�B��˷�>�-x�_�n�1C��
+��W&l�_���R��x*����~]�Mb]ʼn`�,�*E�/�!_��}�v8v&%a@�
[h�<5�S�����Gr��..ٴ��f��A
�1�B;mB�xf��:l�w}�a�����]S�͍N�%�Ȗ]u��6��!��vL%��f\s”
��SU,.g����m��m���TQ������}f
iьK�(L��dU�����-)
�.|�T�Pm�J�^���#�xG�K�<�d�T��#ܴB>���$l̫�S^#��s�zn�{�>�2AC�׌��#(�ۉ��X{�

F���O�m�;�!��O�b )qN��{㴙M�J���֑9\ϋ<�m�TF�+��cgu�dEٓF�5��bĩ��}{=P@��:ß���"K��	b�i��i��
h�,�(lj�P���1��LF�Y�Y�:����4#�ig؁
Pv��o^ݼJ,	�CQs�5-�( �p���^�w�	4[R�2$+�{��=���<��+
�5;�I���9�(��a�O�/I��6��h
��;PhtX��
��i�T2
+{�"�|�
���M�'H"
��n��l1��

b��4��OeL��U�X8��gX�I0-�5�x�(�&$1��m��fU�`	9dNf�b@�ѠPг�BJY�
?�+�������:��f��<'�֖P?��A��d���CcO�EJ��2�l gʫ�vΙ#�m��ׄ��%���,㠪����I�=T&�9ؙ8�>�U�,� ��o����rp"^�E~�#|R™=�>��D(��"�
��@*|�h7�m��- {���ߵO���
/�V|�M���{5�S�s���:�	hq�&���Z}.:

1� raS�*�E�њ���1\��+�6,����
�߻Yo_���&1���`D��҇p��ɤ�ˎD!��ha|���7��9�� ܝa]I��+���+6t�RQ�
D 0_F�c�q��� �￴�؄DW�P�w�(K;-�&4�����G&9������f��u�΃�ы���!&��0�f�cV�C�#���-���
f�|� [...]
Jb� |w�~����ؖ��	��@>�S(6f� ���� E�f�b��
:�Y����
q ��q@�� �T��b,�
��
�G�n�庸+�0S
���"ϖ10�gM��ǻ
cd��fh��ۚq��v��昛��˾��b�9ɧ���bU��g#D���?���p��1�.��}h�;f���r�0��E2١n��S�-Q6»��J�#�A�X�GK
+^��R�b����
G�zZ櫘<�B�1�-k�i}&%&�
+������i������KB�<���)�>��P�e%Q`Qqz�N��`m�h�{�Q���m+[?lV}&
���3X%hl�����
�œp]��h�N�J�	��u�@0f���}Kɼ���$��B�y�p�H
q>��B^B"�x�9$&<�`�^���!
(�yYo|���r	�ׄ=$���MS�y
>��/�[�"�fDm�V��)
X5
���'eT��>����P��`A
쌏i=�6���!�s�8ǼE��y��:�^�1H��]H@�k�la�LL��!�Ȅ��$�D�אH��[���&��1����ExU���f���,��o�5jo��>�ǡ�`��
a��}ȋ�soV�#��DJ9����I�
xe��8�d�(�
+ۥ��
+'ϖu
	U���!
��h`���7C���yx��$%�N�f���ǫ��:�W
��OG��!�����Χ1� �w�l��
	���h���bW�]��3�w9�6���	�'��(}
+ۤB�B���}�m�<Ŷ��L 3F��'jf�;����H�d|p/�<�~�,ʧM����W��DF�мo�ft|>�q
��0
�:ɽ8b{o�EO~hn����	aK0u�+��v�5�8:q��Z�p�d~L*�5���y���{����N��$�EM�
���=rc!
+�B��uZ�� SM��B�-����"���3�i��6��*k�~��`P���=ʼI��_Vx��
�Ƿ�.�r��B�x-#=*��?5n�
�|���DW�٬��|Leq�ooi�I�#����fK������`��h�f,^��;mhd�
��>�	N	�
+D�p4Ψ	H1 ����ݨ��b7h�HQ��)5���c�o�Kl[�K�"��K'��~|��ݛwa/�[.X���

�0׌�/��R��e�D�q�Ȥ%��@ģ',S�0��T��6��
ݴ��J��0�%\��3��a��sk%p�� md�qj�O�
TD����jʓ�M
l�؏:�^�s���w���[�& �;��}��*as�������@Wzo�y���f�_��W%�M҉Q���R�~n�M����Cqޤh�&
+ �:�&ł� �TF��))�'P[�
w?��,<�f��7>2������(}
HKV�xXVwm��2&^*��˼|h
�{�\����X��WŔ�eQ�
@2�&�S��4�Ϫ���
�2���5��c�V<l�M
��\�2�u
�î�"$P5]%����� (-Ġ�}�o^�V8��,�Y{hӦ�A9x�V���`�Y���2��o�?	ᇕ{�%}��- �w�<�jŀ�A wL;�8�q�H���^H��%�Y��S0�m�WW#Y�6�cU"�g(�A�p��
]��T
�Ԁ�ds��ٻ�L��mk�^��}�Z��?�׾0i�����
+�6(�/C�䛠�ɏ"��U^���<|�q�J.�������@�o_���q(�_E(�=��J�bX�f{��y��g�<��!:/�
n5Ԏ.����"
�

+m|榓�汭7Y
�;�T)W¥�1�u>N`68�'��p0 �O�#㞢 ��]�a�g��
�q��d}]���u�abJ
.��j�4	�W�V�|]ա�R�{�Ep�!�Ok][��:��U�ag�vm
5�Vp��8w�,�A(3���� ����v v��Zm
+���!�[>'��S��'PY`�0
}�Ӓu
�I
�z�;�>C�!�V�P���D)}I�x�� �+�6]~n����sh?u؇C�
8���Hйtf
�)U�	��,xY`N�DK
a3N��
�������M��ⅴ8�����x�Og
+�7j_E�W����"p%�A�E
��1�v�
��*������
2^
o��
�����x��|-R�\�XBhBY�;v��[���^��CK�5�5���;�_`9?P։-�0J	��Rb8(k}��Q8T�+ f��
[�<C-F[ث'�Xba�3,
VӁ�
.��P���]��S> 8��P5����3�
�
��r��}���zZ�X�v*7|o�E=o��>A��TR�9tg81�J>;6<� ��E���܍|�A�;��#�E��
�/Wn�Pa&�z
;En����	@�m�S�����XP 
B�:\p�������:��Z��x���ݭQ�6�1f1%ط_�����-
�?-����[P��(u;�
�
+��}�
����6�F3�d�	d�Ȩ
�
+endstream
+endobj
+1532 0 obj <<
+/Type /Page
+/Contents 1533 0 R
+/Resources 1531 0 R
+/MediaBox [0 0 612 792]
+/Parent 1530 0 R
+>> endobj
+1534 0 obj <<
+/D [1532 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1535 0 obj <<
+/D [1532 0 R /XYZ 86.4 638.039 null]
+>> endobj
+274 0 obj <<
+/D [1532 0 R /XYZ 86.4 375.504 null]
+>> endobj
+1531 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R /F49 636 0 R /F16 453 0 R /F38 509 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1540 0 obj <<
+/Length 3158      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�~�@U^�*a<��TR%˲,E*
+"?�.D��p0 H��>_��.v��.$��{�v����uϐ��{������w?)�
,Xi{����L��
�*�Mz����Py�}�҅�_��bt�n��藋���_�=��1c��
��..>��{���Ǚ
+��9�\����j����?j����]U���`���=��|y�D�
���x�O��@��v����x��}�š��
��6I�U`���g
+�e�	]��
���� �p6I�.����Oڗ>�Wx_��Ѩ���D�ʙf�
+�*����Q�*���W5L�`��N�j�B������y
Sk!^脩��8W���X~�Sy�aR���^W�X�}h\� 1Dw"s�4R��)),sNt�U
+\�p��D��|����!
ۉ��0m�<�����˫W��kXP4���
��A��g�
���3cDE�W��?
S�r�9ۉ#*�`^�U]C	�\��0m�e�|����TAq~|�^m����i }?{;[NfO���xN�o��l�v���䅗��6{���{w����i�)��t�����t^��xͤ�E�C�jÙְ��+}�n�Q�xIY��,�Oo���������р�P9Ŭq��E�t�Ӫ�x���/�*g��Ю0�:4��w��i�y�Q"��H���"��x�51����~��89݅RC�BV�8��a܊N�Z���2׷�qß�G
���Q�ٺl�����C�w���ţ����b�
�5��"{�]����P�~n���!>[�`������b�[1 �^o����jA���j��p=<:�T�|@HC!X@�HBDRB����m�2�O�GWw�u������*ECT���=
E[� ��J�0<�"E#�Q!��T
BY>6�gq �7{)
D��
!�3ݒր��b�J;� _�i�7*�A�]'\��6U�%o,������P���h�#T��WqU	��Ƌ�H	B![9_���z=�1���|�@KLc���R�ȣL7W��)��C��b�x<�x�-�
L���Tù���o�V���XKZ���f�0��>C)l��|
[5��NJ�!4Ku�.&��b
�ɢ /G�,b��uB�2�p��B h�-+�m�����U%P
R6��q�v A�1��L!��p�,Dc��}'�Q9m��[P�
Eh'�L�I�N���v5+X/���Y��xS8$�o?��	�_�"�H)?a�m1�P
Ci��
�xj))�j���&nu��ޠ�����"#p8a�rg�C=F��w��
3S�RU�.�F$d�l�d�|��dq�q!:��Q۠*K[*˒k����Ɗ��z+�Fb0�[e�z�Q�S�Ѕ�4����Uq{N�!$s��ܬ)
+����E�Ƥ�	�gP�*}fӎ2���F���e@eT:
!5�+��M

����.x��+��
+����`��ƴ+u]L at i*
|+��NnG6Yd��&K����HOs��k�0�~��tjc�6{��
+&����q83t�O��'�h��Q]����2�#)�>��VTG�����,_�Rr�:1��N��[��z�ik�nF:�(�Q촨�6�X�$�D�:y��R������̑W?��dz7[N�p~s���
�nʆ$�3}�/�������F
������5.� �����0k`$��Huj�l�6_!����%�ۅ��}�l嚜��mi׵�U;LۮC)����ZMQ��.vj��2��/�߼�۪u�{�	W��U�u{5 at .�ܫ�g
+���]��B����f��&=�3����c�GE�TT� `n��r��y�����k!ܮ
r����v
[�D�q3����E�xD��-&fw4�OEzދq��0E,�hA!���+,5��A���e^d�d���ͦjXd.�]T�a�&~^ ��s�ߑA���n����;����;A��l�^Ü����i:GQ�Y�
+5W�s�m��Cd;�����ǶMi�S�f-���+Uٱ�ռ�7s3������xY�`Fj�m�i��w�<��=o�է����|�N��y)���^���J�ތ溽���}'չD ������֥J!�
��0V�*�K����J0ηw+�q;5
PA)(mcuvmC�l�5{
~�n��f�k:���E�8k>�4�h
�jw+�xŋR�)5�r�ث��%7Gvl$�{%wK��Lf�ܞ`�����)�o6XI*W��
�")cC��b�eL-�D[�Y�ٲ��؞1Li�W��S@��3dq)�ҫh�
1:�_ft�cs2<W1�=~������Z�;V����7�)\�V("�j�����:�b�	���F�p=S�u=^���n�Z��Ƌ{H�!��
��F�BD(<�7�y]

��_<K�>���
+��B粎��o���
�:,S��̥�7����7��UA�{5���U��
 
�j(9B�ۥ��A��(��XO	ٓXS�s�Ag��H	�N�`'���S'�s�P��)��Y�q�mq�-�͊rq�rV�82�:CM�xQ�`��UJZ�u\ڌ�|��R�/3�䋦-F��q>��>)r}�i�ݫ�އ�.�I/���ѧ
��H�`���"�1����b�q;�-M�]�K��~Zm�!�1<C
K�#8�?��:�^��
3v�G�����e��w�;��)��+G�g���}���7M�=���H|��������9���")i2x��t�]���;Zn�t��"!9S�|\�T j����j0�.$褝O��g
���dk�Q�2oOTms��3?©�[C�s҈]�w}h��|�w��<���\ �ƓɌ��BH��#G���zH��c�Y�
�����M����"�ҿ��Pg�!X#	�Hq�1��%�<��j��x#����P���	w�����6�
����E?a9�.�J�^��b�X���hă�*���و�E2����*�vd�� [...]
+
+m�	����ĺ�c!)��.
�HI
v��r�
Ǟ�l����`p�*�{6�i�k�9�,��
�/ &tb�Ἧ�Ӷ'8�������
�"e�o�Mi�vA?��}�q6�)֫�����kXп������e�a�l˪��ӥn����<{H����v�vw���ʡ?���_X�߶G�
+endstream
+endobj
+1539 0 obj <<
+/Type /Page
+/Contents 1540 0 R
+/Resources 1538 0 R
+/MediaBox [0 0 612 792]
+/Parent 1530 0 R
+/Annots [ 1536 0 R 1537 0 R ]
+>> endobj
+1536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.431 260.275 129.153 271.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.025 260.275 363.748 271.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1541 0 obj <<
+/D [1539 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1538 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1544 0 obj <<
+/Length 2911      
+/Filter /FlateDecode
+>>
+stream
+x��ZY�۸~�_��h�f`�G�����-���N���őhk%q��4q~}��H�6ê$O�@��������
����/7�^
�p�i�7_V�0�-��f���d�_^s�[�L�U��WY���V.�/x��.
7�>�zq�׿���
�|��o��O7?^��������t���R/Vۋ���b
_~\P"�]<�vۅ�p��,~����F�iwLv&�(#Bʅv�0��
~��x������󓿃��Sa3��Щ0jJ^A����^��P�C{*��}�)�m at GLB-�eXE	��Q�'E�٤
���nkX>�@��Lc]h~s�����.��w�xZiR��	 ����-�
���r?»m�͋o�������Z�t��?�U���CV݅�}���E�
�:�í�*v��%�^�Y~��
h�7�_���|Do>r�F����z��k
�0�j����Tw �Eݤ��0Z��F����
r8Ņ`��
+VS9b O��`�p�{R����d^\.#ɪ2�|!�G�3�C�i���9-��Ɗ+|B3�\����o>�ȷ��bwW~9�P��b^3F
��w��w_C�lW��M�J6�7��kuw� �ѣ�|��#?Ł ���}�w��CU���dz�t�$�X_sQ�2�89
5aWF���T��uz^ɷS8u��g�3�*�"L���6v���
�%*���E����if;`��
��]�
m�R�NS�z�6�)'���U��
�X�4�rv9ODλ�fK�uIγ+
+�fʮ����E�Y�|/�Uc��>

Gw j�CΌm
+���,ئ�83�W��j�H60�
bp�f\]1���
�b����9�^
��S���Gw�66Hv��mB;>
m�`�J<m�:�6v{�!��K�Ē�4Y�xwA��޻ry;��h��4$����<���o��F��
�j������i=r�#��ك�g�#��v���e�R���,ƈ]�EDk��*�oӮ��i��sA$x��S���	���\
�]W�OE��M���hp
��@X�$
+[u�
�Ͱ��Xn�p7m
���,���LH�pd?ڽ�,
��XZL`C*�"��$�D?) ��
+��I���F�Lt�ij�O��`��rb��{�ftɉvSӃe'V�(�|Z�%!��.�+���1��D�fݙ6�/�8�!hE���		�S%���	U
+� �Ps�C �!Q�O��}J)����A�ܠ�
(�Z��1*�Tsȳu�
N���D�
ϡ�:�q<_��F�#��nDhC8D�3��� ?��[��
�
Y�,cMD�'��V�j}^�R�վ�T�
��1@�
��~���m�QMF�I!겉\��t����N��Т��X���1�̣*�@�
�k`���.���E�{���
V
F���A��|S�#& ���� l��6e5��B�}
9���g�õ�*�>ؕ�u��}��(�h\㳌��U�a'@#�Iy
h�
�CD�d��f������˚����@1�e�*��j��3���.�b����v�Ϡ(�-�k
��]^���� vu^m`�̍�o{��K1
v�6��>C{�N-sTd�N�x-��*��{� P��5��Br=�?[JH9�{��]
+hi	dMO��(�]�wE���^��@�� ��Ń@�f�U�yg)VTB
+�֫�A��P
��Ie|��VI�;R� �r��$8�.�~� ��FUL+�K���%C�}A,P�x}�3J�e>���>��*��bWT�n���}4�BhT�,2 �8e�2�|~�|`P����~�Q-P?p]o��h��� t��!ica#
ְ���w�J�r(?愲��p�X�aV�a y���O�Xv-&lٮ�R�i�~2U��,wV�9y_
$��i�B3̓*�T�I�p
yZ�����f8�@�b�A
t��c�]e����Pq�$���aI�����^7�0������CR��p�+��:λ�a$g
Bl�ԡVL������WH��Vچ�#0�2s��qU�=���� �����
�
���Pc�9��ˁ��&�d==�,���
��wv=�
�?�
rg'���N`�6��k=!D)a��^A��/(��[}�/���ų7[�x���?7��}Wם��4zV�/����c{�F�����6��*��n(���O�
�x$��� DW��"��
7rl����
+���B�-^?�˫�n4a�MU��FO�� ��ϛ�c4���zӯk�C���pR�22�:
�Mo�il�1�0E0n�!�n��sH/@
k��6Y}��G9�
H4��?�A�F
�Qu�>z�

L��#���R�<��΅0
��'߄��.c��&-
�q1k#���*t��aGK�a��

�(�&sN08��< kn�cO�>����hC\ǁ��$�	��N�Y�OS�0�0+�⟳
+ޓ��p̐�
s���|wov�Z��
|���J��*SGs�H
+QW��Xߟb٨H�:�.��l�U��7uұN��E�y�^�ў_��6
+96��`
7c1�x��8���	�5�m��l��
gDm[�X�SX�`G�1j|�+B	����O-�c��{JqD�-�CcGH�Ÿ=�l��G�%Aeɽ���h
�D����!t
%?C�i�$�޷�I,<R���*��.i�c��S
z�ة�j4t2 ��9z(P	�B��� 0
�Lm��f*K�@��@�\>����X�t���F����߶�/�
���+:&�!���«��ZvY�:hlm�w�M��
-8��K��4T
�c�
�7�[)�����70���#k�
�~�c�|�!�6Jw�H�^�q
ZR�}��*ۥe�9��X!���~l
�R��p�v��V��'U1��b�'Z\�?V��щ�.^O"�?�Ru�n$�X߯k��	���ضL���kh�0<ܽ�w/O2rlT�o@
+��
+endstream
+endobj
+1543 0 obj <<
+/Type /Page
+/Contents 1544 0 R
+/Resources 1542 0 R
+/MediaBox [0 0 612 792]
+/Parent 1530 0 R
+>> endobj
+1545 0 obj <<
+/D [1543 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1546 0 obj <<
+/D [1543 0 R /XYZ 86.4 217.914 null]
+>> endobj
+1542 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R /F49 636 0 R /F16 453 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1549 0 obj <<
+/Length 4662      
+/Filter /FlateDecode
+>>
+stream
+xڽ\Y��ȑ~ׯ`ľ�7DL݇'�Y�L;�ny��y�:��ƚ{R�xc��ff.�H���4�B��*�/���&6����^|�N��ϼfrw?q&S+|f$��-&��L^ͤ�ӻ�o������w�?]���O/�޽����؄O���������,�ݟ&,��M�Q��DfJZ�[N~~���4�g�wv8�ۏoo>|
�)WO�bUTWRL������麂�Ni1�L
�..MgN�SsS�g�������x&���3nM��+��zs5�O����p�bS���c�
we5_�Ex���U��v�WM�+a��bs��c���v��-����`����;��P"N��iZ��b��i
�DSp�i�i�I��"���g�
��te�4���e�
��sP��s�̑��hi�-�z=�V�CLfR�^Lf�g^GJ�C��o7W�}5��Z�KxX�_h\�s������&�2�6�B7Szw�������1�^�~� ,�BO��Eoo�߾~��y����ۧ�?�w�pق�N�V6/ì��p-�r[���q��DzNت�[ޗ�,pGW�����uR�iP>1�f�\$z�\������ϔ��&!��j����Xl���
,N�*�2I�Wf���-���';�a��C�|�Z�y�r��^&Bg�����K�����n�:�_-B;���AT�
� �v�sDL�S��\�ZA%$x>)�:!�}xy��P�U�v�4�^~H
���)�bn*O
,y��l��{YKDž^J��q����7?�!�l;��~�;˜n�3yb(0 o[��"5޶}��H�˴p����XRZ�Y��/�g$F7����1�9zz����Q�+Wz���~�q�2|��
ݎ$�\�%LeZ��5��u�W�v�q�1<��oq����I� �M���u��fYm����Pj02
|@z�m�M�G��b��x
��b��T����b�_w�B�e�r�|R��*��,X����rR4����@C`�}^.w�k�Oon���.�
������&���ƭ���r�Rջj�NDw at 2RCLF�������
]���@��a�P�q��}��=&ĥ3���-
+\LUԉ� S{���ܼ�~���Õ(
�
c%�2
A��
	�$��@�1H:��z$��5������Ǡ��3ߧ�N�nH���\��~}VI��+56�c�w�+1y��n_��H�v��L�ۀ?D7a	�:��/�K��?�"�J�
ؐƹ
�|맣�""��6��Y�ì3
|W���ѫќv�r��Ġ�B���
؀d�
�v����@/���uR�~pIl4J]�����C��FH��
Ew)M�2
=4��<�,B
+: ^o������ň!"G�MA{����rT�lv`C����Ӓ~Z�+����+m �(S�b
�kN7��
�
�Q����-,h󭬋$> 
N���O
��q�y1&���P
+�:���Ls7
+UC��T�����4�5�����eB�h�/C M�(-�b��{Wj�RN�r
+�R���28�⁢�$=Р�"<�M�8������{&
+�*��p�
f �]���!
���W\Dx
�ѝ��U�P���`Bὣ�L���5�EWs��<��k�ye& ��X��F�e�nw�a
��=b�G����ě��׽7�3�6��r6_7=m".
F��~��n�?Ŵ
����fWUm�v��S�����q�,
�PA��[��FO�Lj������z�Vr^�•腫�C�{l�.f�����D��
g�KMG.o]�$t@\�6��5|��ۈ�+�0���u��J�?o�W~�
+�ƪ̹��
+��0�&򬟊j��L���������pM2����Ǩ>q���LBp�uT��c0Dz�u��
C�z�~P�a�
4��p5�C5/�m��`�pS?��~���
+i�DN�P��yk
��
�/�o�!>�
�uYTh}xߌ�,�:�r�"�� S�Lv)���Ufm��
����6P�F�!�

L��0\�i����|[��c��
�
�F���L��b܀OQ�0��LK#���u�/���Sh��@�����+�U͆=u�nt9�-�ߦ �Q�+5�a!Xq>�������8!��I��z�qZ��)ߧ f�gx^pM��g{C��󳆪����	9
�/1T,�9��8��_�\��^�M,�ߏ۸��^�h~�q[e[��2XI�e�*�h�o��+�9���&��
 �P�gR�KP#7�
+�81��tD�`!\��3@\C�x�!�z��ͷ�Ml���J�Q`[pp���������p�����9�u07�u�99
+ܧ�b/��	?�U�5s"��<\�	���.&��|��M
<F�Am���i [k�U�"V��IP	���:D���&�2QX�q��ʹ�w�
䄠[���&	-�0G��N���
�9.�1��-����uh
���Z��˧�����
+���IO�#"1�)Շ�b�C�w^�ԣ�&y��R�1"7J���v�"ǡ�C�O����(F�c���Ӆ�0TS
+�is�3PӞr��ɰB����`�����|�DC���	�ejN
+�t,��x��&-���T�����QN�ް�e��?����)W���(���
���
�=��5�i���~�7�Y7ᾩ�QT��S��7,�P� N�Q	z�ʡ�Lk�f�sP�ÜTM$��1qQ�&1�R0T/�%�θM ;��'�b������ ���r�:����`&��gH���f]�w��fz������y�+��Ҿn
o��C#+Z�rg��(,;�6@
��ePC��!�`��P�Rj�P���bp`�s��w���	���%�i��E 2
	 �|ԝ���Yw� W���{QT�m��v��
+��%-����l�>���
�)��g�� ���`ytׂ�O	Vº��	�%��m�Й��$�h�
����7w)e8a�p�	'e8��0���2[���F���(����ߵ���z/���`�`�u?̪�[?6Q�ɡ�Ա�1
+Koa��� ��ʶ<��C
�Ks
+�L:��A���>o��l]�ժ�l�����,ZOq�0
���a4z{��x
��i(�]�Q�H_@�mW��}��NZ��Bɔ�1s�l8�6&
2ՏB��i;$
6�;p_�'�0a2]
��&��eN�]�pb�K-)y���N�(q��F�K0�A.�ዘ`C��2c&
��J&�
K{�Oh�J\浡?�4&�
�u'�zp�\g�&�Y��@��C�p}P��]�l��,�{r�t������JH/�K�	؛>��a
^
��'#q����ٸ�X0@T����'[�%�G����(����Ww�R� ��5xH��4��4!�a�nxh2~wҍ��j		�q�9��fB�""!����YF´�(�}��
�����w?&�b�ލ"$	�H
���fS��Q�--�{�o��![%�£Ij�y�'��z����)�2!�(�=��3�qĠ�B�#<_�9���s�4��E	�<
�m�6!��	m�
��޻D��r��0SH��� �;U$��U
�.DvYf` ��ǡ8�e��x##�}��be?3p�� �nw86�8���d�\��		I�+�0�}>RDbǘ� �d���Hl��W�D��7C�g�=$Qݹ�#�
0����:)|& Ga
R
+:�z(��.����G��"�
_�/�S�6����Y h��W񳪧���������g�*��.�����x@�
9
�Z�O8��nw�4������$f
+4ů��_O���-��;�O�tܔ�b��O⾨�[_��@�@��(T
$�{DS��y����T��1:79��Q��,��=����vv �r�����+�
����V
��gZ�Y�v<R{8N��@.EC����� ~�PR��N��3���J
�V"O�J�n�p�����']1v�1+�����Y,n�=� Ь}����3܆ʺ�͑R����K<(�.�*X
d�8���,q�
`�B�1<މ��?�������P���=�\wr�xE�t��K�)y�Q�G@:%����Y�~A4�+*�~���}{���D�?��4F�.nZ���UC(RY���箊R\�c^�!�A��/��UB@�'
TN���J���6]��͹�
�85YN	��
�
��Q
�+�����A`{�9�b��
�Q��E&A��~58v�L�	��;��`�\3)βih/qGJQ=�wJ��(�a��
8��\��
(NCYͷڭR�
50��
+�[*nH�=4z.~Y<0�<@C�؛G�`%<�a�
)��D��p�C�1c�rF	�����vg�gڽ�CM���GFX����{�
u����Q�B$PZ��5�y�n�<x5�?�ԜؓlJ�һլ��L��IJ�Y��-����z�J�=��#= o��8d,/�驭	�}͎u���麳�_	;�
����o=�8�T��x�-�-�'����N
_NUqHM��S=�!�&a��Q�b��8�M�g{?�a�r�Z�6R�hB�g����ZW��9���+���I����~�
q�q)���Qu�>˘���3b��!�
��Bw�d�x���\ю���>�����g,����?��?�Cs<��6~s����r&
+endstream
+endobj
+1548 0 obj <<
+/Type /Page
+/Contents 1549 0 R
+/Resources 1547 0 R
+/MediaBox [0 0 612 792]
+/Parent 1530 0 R
+>> endobj
+1550 0 obj <<
+/D [1548 0 R /XYZ 86.4 726.045 null]
+>> endobj
+278 0 obj <<
+/D [1548 0 R /XYZ 86.4 578.672 null]
+>> endobj
+1547 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F38 509 0 R /F11 691 0 R /F49 636 0 R /F14 694 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1555 0 obj <<
+/Length 2787      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۸~�_����7B���Τ���M�\s:�$#���R�����@�)َxM_DQ�v�ŷ��.��nG����?&gO_r5��*�F���QD�4�Dq:��F���1c���E��V�jS,��17"Y��'�/��ryu�|���X•%��<?�4���br��3
+���Ib�Mg>��<�u�n���	n	�o���g�<K��5qJ)�)K	����/���(an�I����g�g�����1��
|P�o�1��]N..'Ѱ��g�&kS\�cL%���zsq�j�������v��q�.�x{=y���ً߿Oi�]\o�Ty6[ǚ�?}IE��c�fe�2���cJ���m�I��˫..(c��r�#��Ǡ�	妁F$ ]�sEe�����U�#$D���X'�u>}�
8�
�&�M�|)����d�M+�.���$O��v�&�p�Y��sB_���&w�l���O��b^l�\����(sd8Gn��xw�*á��#E��~I��98�e��߮���$5��L
#O��P)a�;Q��hu�O7˪km��4�#Ρ H��,���4�J�l�.n�E�
ճZ
HMm-��N��˺kg�F1X;�*P{����V܉bG�͸s�ATr�nk��Ǔ���ͅ$���>�
��5"�D
�3bG�!�6�{�����Q
��&w�R&�|n
T��b
L�EW�$�7P
c8Fa��4x"C2je=������~
;Pr��_@'�[@'%V��v/(%�As4�j�V.�%LJ��
+�
u��:a-Ȓv�V���X�
ۮ؃)�\j#3�$U#��(<� )%�܇�H ���ݬu� �N� "%��T|v���
�Qs}��b`z<*�%l/a�Ϋ ��(X���c���QPe�m��n���"m�[W���X��C*�ȉ!�6a�c���9�f4���������	��ugFS\�ڛZlZk�Lˀ
 ώ�/��<�==C��s�N��
+���|#�
Z���S�=�€� �
SM�d���͡�DE�n�[�5�y/<H��j$9x&S��OE

"�T�p���^�r���m�
��`��v��XP��r���Dh
+*�w�_��{^tv(�D���M��{InL�V���*֛|�� ����< ��ϡ��>�����
�|��l���c)#6
Ҍui��|�Vf
�}(�
+����&
���M�p~銽�:�*J��ٸ�?����j#ϊ�V�9+~_oaK�z��2�X + 6S}�ԔHH����5�Y�}�K�DV��LsrKz
u,X�8h��=�2� �K��ꔅX
�
+��
+WP�o��
�3��P��T
+^i>hA��eAJ�j�����1�!�����f(+���
1�H_:^ޑCw�[AQK��̹
,�sX��r>w�z�ól6+0:�2�l�y5�f�y�k�: ���$V���w���B
"�Ꮻ�{ ¨#aPL{Z��!�(�����e��p�>�V_�GJ�6.�i��gV%7�r�;e��dZ��&��r��p�����E�XV��s�F�?��/=v��#u�	F
���_B���r�Cqd��8Q��*�ǂ��Yu��sgm�>�n��K+iz���j�u��u+дHԜ��?
��[
��E�p�����aa�/]#
+�=*0�ϗ���(7�
Ġk?�'{OZM6�t�s�kG<��8���x(r���m.�M_~�
��񧪆

^�>����F��O]���S&)!踇����Mz��b>�1�˾L^�$R �'6e
����
���6Y�k����
����s�AO��v}��?޼�jT�Z���@�uGQ�:�F$�T����j���sC���/�a}�kX�$[rp�:T\�����eK���A���-Rz8Y�J��n��N�t�	�O�Z��R7�~k������r
hW`8�{>q��E͂FY7�
dy(��
+oDߡ�2������m�)
�ѦU.7]�L��q�pV���nj��oQI������
l%P)!�Ìb{�Ib"dhg�n�0b�7۬��
�u
���u
��!!��p X�o��B�䧻k���m�H��s9H� Q��
�z�ʽ1��{�7K�
�L�A	f���p0r��w�o�@�\�����m��DH�{�\��
��9�t�-{��*t��Q�;���
+:X.��#@�	n�7����n�O�hI��C�'��R6���Ħ� �0Q<��l�y0na���q�L�C����d��"ˬь?���84(
<�
+�lAo��L�f��<u��e�܂2�L�������T�)�h�/�s'�QK� ��^���'$%m�c�o���'<D3t�D��Uq{�x*q��CL�1�K4�����?n{S	k�l�]���AC�����,
u�C��7�pT+��aq�BQf�y@:�17<��
+l���^�Ӷ:x�A���
�m�����w`T�
D�(fŽ��ڝ���=�O�������
c2�����C��)
1ǜ�%�b�Ź}8����S�����p��
���;`H��@����A�
b�B	��=�<��CAf�yw��
h��D���yg�ŬI�0��
{��n�_��P�C)
 �H��
�T��_�7��z������֊p ��i_|P�aH�o�������<�Ñ�N6G��a
=%.����AT��P�a�v�a����㷪�)t��F8eCh�� �h+=�!�a�YU��f���]$|Q���zKhw��
�L���~�&�%+�݋z��r�����4�����=�C�e}�
�/G�
+endstream
+endobj
+1554 0 obj <<
+/Type /Page
+/Contents 1555 0 R
+/Resources 1553 0 R
+/MediaBox [0 0 612 792]
+/Parent 1530 0 R
+/Annots [ 1551 0 R 1552 0 R ]
+>> endobj
+1551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.295 520.385 128.018 532.34]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.531 520.385 357.254 532.34]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1556 0 obj <<
+/D [1554 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1553 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F14 694 0 R /F8 465 0 R /F11 691 0 R /F16 453 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1559 0 obj <<
+/Length 4431      
+/Filter /FlateDecode
+>>
+stream
+xڽ[m��F���_!`?�fa1���9��7�X�'ɬs at 60h�3"���H��.��S�M��Z�d%��l6����婪f:z
�������_�z�%��zt�0�:�#óD
6���~
��j"���
�����ׯ���p���__\߿���`鈍�5�R�u�ק�?���fx��Q��̎>��ˑH�0�Z�~|�}�
��IfM�����~�~�폞�r��(�W6.��xu%ظ��r�B�a��Y�I
�S��z�@)�������K�ў��u]Tn�歯�0�]�L2)G���ֿ􏔙�wl�w�v���y�5J���	���S�zD����+nƟ��Xl|��v�.���ᄎ"�M�i��+�|������i���iِp{�X��Dp;҆%F���g��7�7�`i"�vC)
8��밦O���;򒩆���͸�=Wʰ��z�Q��zZ���W
8����Hn�и�X��j�JL<�p�� �ƒ
�n�
�X�e���&��/��S�G���Ĥ�!��!{9��j3�
+���9���&i��P�	?�,���j����}!B+��/B��PA�'��W��"�f4��Ȭ�H�Io�wo�����~ء`	
�o+_��6�^	i�Ӣ�"{j`dv"�S	�2���$�CYs��?��D��a��e=/W��EkZ��
)

ד�z[1B8EB:E�{R%��VE�1
4�֖D�e*I�I��*sgXf��n$��-���q
��6��3LFzҝ���e\Ф�Z�fS
7��{ݦlJ2�_&LC��v
�h}��ȣ.&b��D�i둱����?����tƃ}�->_/��/��5,q���R�
�S�{*Vo�"�5�|�S"��(�q�q�	Y� �d�m����6���L
Y�F]dZ�i���',��<�
Q&�X'����.��������ڣ�Wp�_��<�8�
�$��d����TE������YCoC�Rخv��ۋ4��a�����᫛%}��߷�&~�Ig0����O���A�D05�ϫ��s��?z���R{l�͉
�V��t�個�c�֦~�,�;_����~��
�U+�Id��
�T$6��[�	�L5����[T�f�%f
+�����U<Qh�M|T|�V뢦XL�(�
� ��/A� ���u�@
�ћ�DH�8U�pp�
@ iǫu�/�.`�xH���i6~��
`2<�@SSJ� P�{��1+ܢ���v$>PpF��.���p,Is5�%ʛ�J
}��J	�C�2�z1d����o���L�)j�
|���Y�9!�Z���>8WA� ��]n�4wn�����j;%������Ӽ*^ҥ�� ��P H���TanїR��Aæ�� �*?�
���f��MD1+�E�M�y]� ��!l�m�'�Ĥ���׌8Q{�V4������++ƴ0�����rY�ӥؘ�OP��r�/WV��
�
�
��֞�b�r_�ot��i�to��Y}j�bO���5��B�&U6,�"�}q�M)��3��70�o�M��ʳO�J���|��j��+�/q<f�
ڍ�Vi#`Hi�o�����Ъ	�q���&�
+�,�|xU_����A�)�e�ԣ摂�|�]�.Z�l���o
�����7��g��U��շU��-��	�`o׉s
/�*��
VE7��FG*X/#5"~��	�	$s�p��P8D�G
�
)
�T����"�Q�`k�3�n���.WE�_Λ7��^��_w�L�ۆ|���|�����Y�$�0�~(��ŀ�
���Cl�WM����D��E�@
����{��{>1M�U�
ƽ����;q۵/#U�E�Y�`7��9S���5�j��D ��T��S
ψ٦���7�ޭ7���S�ׇ|�.}jf�]�#�9f{%�&���^�
k� ;3�ϲ�6KP
e�6��
 ,���UyV䋊�a�����[-�/$
NH�n@����ԩw$>H-Fh��on����܇4�t=#F�L������߆Qh���!�l���Q�TC:N�媬�|�1�/�*��PT���[����� @驲��V*�)q	�X���r"9�=��Ζ�6J��ߑ�F�������x����f��5c�&-y�־�+�/J�}9�]h'�ozhLNo��j�-�b �()��v�����/>4'���
(����X�q�7�89pKʯ�
+���ʤ�V>��|��Q^ 
+�Α�M�f�(^EejfL_0�kLC�(S1~ڬ?�
++�VN���lVL�i��l����~�׭KD�k��j@��pC���5�6I��U
-eX��+!O;[�g��k2hhp6|�$?���nW1E`
_�3�%ч�
�kV}�}�+�/���g��_i�#�s��r�y�z�	O�U�z��m�[�[<l�Ѕ+3yG�
+�s�z���!/�'!E��/$�!X��6��ө�3��¾Q�
�
nAA)�I��P�<�G���#�K��>j���>�h1���hݘ2I�q&�,2E�\�]e�m"��<w(�.ɩ#.%���y�y�u�����tݼ]�1'��۩q��`����Spi�ɏ�a�]�ھ�OM��|C`p��\9�K�����^���e��"���"�F�֥ڮf%y�C푉�i-�"�һtL� �V� �{8
�ٔ176�&W;=�6|U�w�8P^
��o
�9�V $�sÓ`���}+��̥& �2V�J�
�@���
%���Q��1]���+7`�g>���G{�1\��	C
e��u�O�OD�� CB

x�2�#�{B��ل]�I2Iy^Uݮ׫,.��Y���}S�H��v!,{'.�
x}�����#5>��/��c=�n��*\�4
\f{�R�<_GV� �5�S
ҥ���R��*����
�k�m
��xZ���
x�AW.��Ҷ��������\�^Ź�'���e>
��O��c������Z��\�G/�Eqa��n�P�=+աӻ+���én�O 
��^����
�0a�@��Y'��3����i

��`���Y�Z�Q���&zJ}%"�ň�AggE
�hxW높M����2�a�9)�2�3JqJ�!:mb��,�"z� �JA�Wu���y'm�H�Ѭ�S�D�H����{�p�֜Y<# ��PJ���]z�r����ܯ��7�i�݄��:�l�u	U��5e���o��"ǥ�u3A�TDL�3���L�1q��c`����O�g�%�|ܮ���O��N��9����yw�pF	y���o4Ә��I�R'�q<�zcH��JY~�zC��Ԟ�e[^�zB>���N�+ϵ�����j^6�R u�g�[��G8T�
WG��n�
+�	g�DsX�gcW��B��є�׹�Λ��٠�,���y�S��.djwc���#�>�R������yу�w?��Oo†5����9
+f�D�c��s�T�O-z%�1��^�_{+������_ީ������\w����XD�q�d���T�������ޘ�����~��̫��C�z�?��#��w��t�5�;�"��$͋�V��_
*��b��?��@a��!
��^�<�W�'y�+���$��c��4�+I7%��u&�C�)
���	�S�S
�@�e��JV��?�}�ϖ�t�����<u�4�Z\����]{��Cg��xW��F����*���=�i�BN� 
�̸:
�� ަ�LS]<�Q lwjog_�&9F_/��ty���
�!',����X�S�Ș�Ӈ���y'���W�������}���p��!��`����t��ۓ�/

.�
���#�L'iq��R�%�PL��Я���_���Ζ�#q��5�b��c7!X�����4A���*T�
=�~_��b'	��ͺ�=]
�8��T<�!��;
�wZ
v�Vf`-!�T�L�;ž�0��
E���!r�ic*9�3������K����ղ��#z^�F�;�NK��z֡t�:�P��
5�XTC�q��FJ��!��d I�Χ��rҮ.�G����QF\dbK_6���w�C_nPKv�EEQ	�
�uq���X� �Dl��]��D��HN���A��Z�!����;�E�ބ�{���' t~_[}�O �_���I���ڞ ��M �8q�sf}Kps����7��K���o�>Q�Е<��nwW�� ��^����?��=��Xÿ�Uǀ��tF�^��j
��:�~���쀔.0�����3�?!c�p%�KL�!�1�9��"&6����%�A�DЙ峉�p��8~�Q�Ņ�sB
�������A���K����
������w1�f\�r�Y�4��%�M.�(A%W��|��������E����Yo��q$�4*.�9�2��i1�p���=��U@��C���}�tǬDH�V�w8_��|WW��γ�s܅ �^ ;��ؘ
�ĥ2	7v�����\�!�@��w��p� I2���Y
+endstream
+endobj
+1558 0 obj <<
+/Type /Page
+/Contents 1559 0 R
+/Resources 1557 0 R
+/MediaBox [0 0 612 792]
+/Parent 1562 0 R
+>> endobj
+1560 0 obj <<
+/D [1558 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1561 0 obj <<
+/D [1558 0 R /XYZ 86.4 701.138 null]
+>> endobj
+282 0 obj <<
+/D [1558 0 R /XYZ 86.4 452.084 null]
+>> endobj
+1557 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F8 465 0 R /F48 609 0 R /F49 636 0 R /F16 453 0 R /F38 509 0 R /F11 691 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1567 0 obj <<
+/Length 3330      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�}�W�*/Ԗ	�~�TR嬽�ڕ
/�y��T�8�Y�H�����s���P6�I^Ĺ`�
�t���7>���o㳧�+;,Xi�끷L�
�*1Oo����A���b}���mf���Hy=\^ӯn>���͋��/_���K����~^��1������_g��@T�
���n����S��y��
+~�1��
h���|�����xSq��[���&�Ǥ�v8Y�g7��bq.�pC�<�^7?w�A���=�+g��ؿr�Kcń��Q�L��9-rU����|d��%�\��WBj���}(!�f��:<6~�"�Z&d�E��ZZ�K}5~�
������L�z]��fݲxZ��S��S�,���y׶x{�C(��Rk�LP|c��
+���wx���釛b��V_l*��B�֛ts��=���E��%-#�%�W
F0�`J%��ڲ;�H�����j�n~�aR�j -���Iq��� �fl�I�$�Mq��|؟f
��z��G�d��A��}��{�kS���r
��>8U�����mNY���2��q�Lf��.��r�P��[=Y`�	�3E�
<�u��������^!li�5�ޤ�'�Մ�|·*F�}
�
�9�\%όMKVJՖ���ݸ�h��E���d{b4�i�Е�����3Tj�o���#�7�>M5�X���3�6����/�t�>����5�,gA��[H�Q!� �  �A@o��
+�.�=��a�f�<mU�cW
+]F�s�v�"`�N�>t��b�]��//.~����ho{��h�s��,vϭ:�9ىS˸�e�<����.`=<s-Ś$�ͦ(:��|H׭~�S��pc��(�×�
!K\����b��r��=k�$�&�y�W5�+�
+�@8�1�$��<R
�J�t��|f���Cn at X�:�{(��ر
��/�A��Ԕ�4�9�� ��,�=l��X��f�4��Y�iB[d4��4���E
+�
-!��G�
L�3�8f
�@G��$d"�QW��I������;�1�
�J�A\C.t�aUL���
Y�����,�aG���m�l�)�A(��AM��_�x�����B�wۇ`�Hm��wGLϜ��"&�1=�^La�@�攊�>�j!8ێ��Zm�P
�߆j[�f�� ��U�`UR�f7G��y0[C������͉H(��0oe�a>I t��Y
+�#-x��

+�1���d�0K�
�;��+���ؓ6�Ä�1�{чL�!�y؂�	}�ED2��r��v�0��^t����եa;r�C���s&)�k�mA7����\0,
+�5�����cEoJ�S�
n�
�~�|���i���,Ä�pvZp�p<!���9��J���>�R��ܣ>+Q-�D�S��n��E��Oh'�ۖ���G�׳EQ1�˗������垉�m�컗��f��_���b}]�I�Ri�/)�<_"�b��#
����_"����a%���y��Ѝ�
�K�_
�N�p;����IW*�|m���ԟF�a�^��r��B?aV��j�<����Q�e�����`};�ˬ�z����2%�7�2��|3��*h�a]%�˝�q����V
f���<=ji�&~��v��x�>���,�V-�\-ڊ
`e�:�E[dDv�	�^#�Q'�F�?���{����>]Ly��ӔOZ��
+
�c��#UH��ahu<��袶>����;��Σ+D/;�-��C�!4�+�
-�ȓY{v9�<�kȷ�z�J4dͱB5�WATl�#�;��������i<��z�jv��0���ֲ�QIk����X)P4�a#K��+�s���q�ur��h��;,
�U!�I>	��d�0$��h)���C(|I�n
+ͱش�L��xc:JoM()�yɖ�
M�I9��\��C[c�3%��"��GA��ą���c�*�"sM}Z��ҤZ�j�������v�i"x
���w�	�%�e
�M��{~�9o�,a[�ۜ#��t�p���@B���5��nwT˧6��
1*_�ϱa��-��q�]V�v�GNw����dj<�d�,T1+k�X<�1zw��
�ߩc�Aq���L�0�3�cWT[�r�֒ W�(�sR��xNj�5�
+:� d��"��lou�����
.B���L}�_�g�M1MhH���yqj�HG����3y_��J�)'��g���<dF��3A�J�V����6���W�ѱ��� �����ٲ�HmOV%>�7����rN@`7�a6=\�c�[(%
a���;���tAt%\Eo��1����솵�[�_�:� R��ȉ�� NJ~$����+)Jx�XoV�O-��,�Ћd����"�^Zm}4����� ��\E[�Y徃�i�&t0t����
���ăgZ�C�t0vK���a,�ϢO��߻
��r>��?F�V
'�錜�d^m{a����~]�FT)����jy�����J�.�LÍ^�c�JIf at XN�1�'T�+�>	����I|RS�	��Sy������UyJ�#s@'��|5YL��	-:

�J/��mq�\}*��̃��\�
Rgc!���(؋�SHF͉�rxJgE�JY�yI�H��V7�U -
��29��� $
j��67���*��
��5����:��%��Z���%Y,��-6�)���2��d�M��F>��_��v�F鬐��������w��P��P6?U�
f�I�S�L��tkɭa�T2��4©ܸ�ۉ/;�O�ھ�.X�
�*#�8i��bO�:;q��4f���g[SIc*�Z�B_�
Z�L������rടlF��eUTԍ�"�]����3�if�F������l����^�]ي��u�Ϣ-TRV�"�P6��*=
�=T:�0A�ۆJ�D�
/R��U��gu��>�a��&lt�L��>�]E��f����_�k�v7B���i��E�3B�J�4U�F�XnZ�&"���b�9(7
�) Y�[��u�A�99
�ǜ�H
�!��|�1��f]̯ٶ�;)鸺=����x��tW�L�y�ۊ��1[��N<�V:
����1�;�T�f�����tZ��#v�RH��5�p
�:��� �<_�Q���Uh�eT����5׫��b�z
Zos�Wّ��h{����{�$ز��
���vw�2����:>�-�����)��Jp} 	A� �Q���N�B��6Ӣ
�2��h��6�emA�^5�L�	�%���d�^4pL��q

"
�����b�����8�k:����=��ާ��)GS��''��J���;�����/'��8�~",�`? [...]
+endstream
+endobj
+1566 0 obj <<
+/Type /Page
+/Contents 1567 0 R
+/Resources 1565 0 R
+/MediaBox [0 0 612 792]
+/Parent 1562 0 R
+/Annots [ 1563 0 R 1564 0 R ]
+>> endobj
+1563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.418 373.238 140.141 384.086]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.688 373.238 369.411 384.086]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1568 0 obj <<
+/D [1566 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1565 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F14 694 0 R /F11 691 0 R /F16 453 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1574 0 obj <<
+/Length 4162      
+/Filter /FlateDecode
+>>
+stream
+xڵ[m�۶�~�B�����
�L>���\&�^�;�$�%��Z"/$e���w �$��D�'R$�����.V���"]|s񷻋/^p���*�w�F������n��9QD^^qÓ��
oDr�����������w�]P�,]�5�H�>7��rs���b�[��[���Zn���n�xu�cdԦ�=���U�ӗ����ϣ�<��M^^r��Y[T��5J���zvai����&�%��[D��EF�x�)%\����P��\I��B��/�}���k|%Մ*�)�r^����,'CQ�S>���󦭫ϯ�e[�O�:��?	���c��BN'q���y�jp�/^��_QʠG
7�(�}������g*y�-�~�ݯ:�ËM�����>[���+f�e��д��M�[��/���H'�;?��� ��n��նl�'
�*�&/%v]do�~j�g?����,�
�a,�gtCHEؙҒh���EH
��J�A�^'��B@[� [�b�f
0GF45�o���\�OE{&#���	j�8���)�/�V��$���{���|^�9#��
S`
5XO�pX�tv�㴕�C�D��jF��Q"��O\g�h.����桍�S��vy
+��˓���F"B��`q4kX0� ȐL&7o"`���T��›�k�׏�W J�В~��&���;�+
+6i��3Du?]	��^������Wϝ�5'��gl�����3�CI�*5���=��Fރ����m]^Ҥ�g�f%�vs	���Z'y�[8$��A�y|�{:�&�i�tB`:�w4�茊}�C�tfU�Z��s�v�e�vn�»՝q%#����+%2vF���Ӣ�� *QY�РW�e���;%����4���V1G*����iW�6BK8�7�f�iV� �ۛGi����aS���R��Tm�̩/����
0~P��?�Aְi(`�P���O*�
/�ڷq�7�j�yY�x i�ٿ�=�kVF��1��uǼq�	)SFR{�3��O�$�
��	os3�񄩣Bazࢄ�I�z�a����,r��Z�W� �ʷ�W�n���m�� IG��6%�#����@������c�E�k,
��>gK-D�r!p�i�
+�
Ux�C�����+�W�,^G&�RG��1	$8�M'��ӻ��Q
�;C�2�1�Q;
��-��x4��}V��.����.ѐ�y�Ģ��H�g��	��8�ڸU$������nZ�X�.d�E�/
o���
����PJ@;�����t�{�Ģ@�[��
S5�)р����%i�hPZ�&��u��A��;ǘV؂ɐA͞qE�k|oCO+�
!��Bxg����#!
і��
aW�G���Ӂ�*C���ԡA���ӡ]=��$zH���rL�@���3�.5;R�!��GF��s�a�&x�'%vŬv��wD���E��X�s���P*v����
h�3�CH at La
-MA4���-�
���e7G	
��
�H�q/��{ص��ް������Օ��jԙ[�Ď �9�^
]�!),�u��vB8 b���T�� L�ף�G��T�
!�Iĉ�v:9Go��;%���*F{Sz
���W�#�(`�t.��`6��	d���
(�[�d�]�'F�
�(y��5#������=p�8HP��
F �hd��Ϟ�|���m6�*܇�
s@�I)�CdeX�pERVm���`
+;L-k�
�(�������6�IB0S�X&�#�M#l�
�
�B���(`����Ѽ��r�Z��Rd��!>-}m�"����
=zB`�
3��!�ҳXǵ;1���<�qGT�t����K��G\3I\?�F���u��v��{��_�Y�?	�) ���]�	b��/!wT�Me7��b]����(�X�ӱ�FG�+��[�#*
�L{���<��5
*�%���K���l�ߋM����������-���eװU�jw����[�
+U��`8n���"v4Y�`,b����㩘��dH� ���u�yȁ?
�>�(����Y9nH8+���g���I6���0�y����A�ĭ�^�E����G��j�>����\�f B%u�KsZ�d   ��L� BJp_�IJ��v3��`9��_�A����|���wh�M;頷�2[�'u� �0�z'�w�,�&d�P�"@��22]&��B%�.e�AHt $F $ܡ�†>�(��l�.��zA�k��
]_ն-ʼ�g�K at 0<���C磚K�h��M���k낸S����+�Լ�sK���C��Y��O>c

2w���c��O`�}�m�wʁ���+�������5�#��/
�"vj�Z�\z�D���\�������%|��h��Q��w�24�x��ڮsl�a�H!�|��+�ODD�O�`0u
qv��yk�k�hYA$릚H�	�"=�wT26��?���7�iT$D�@D��ݼ������{�ٶe���q������~�����_�
+������5�(m�πɠ��(�����
3$�;g��K0T��o��B7��
"	���R2�[�������a�N�e����B��[4шCb�
+C��*�P(����S<L
�Հ(��4���]�|�N���@g�d
+V�����NX���mF���3�w
_h��`F�u�&R��t�c~��~*�V=�j�[��n���AY�z���sB���۫H5�Z�PutW�Y0�䡮�X7�i�L㦭����*������!��dm���3��X5���?�9�g'��b(Ԁ~t�<�-�ŋ%��/��3f����`n_��pwv���9��K�
�g!��z��p<p����e�>��m���4
�w�T at 0�y���ep�Wt�L$�b

%���S���,sp,z��2YJA��NV��u��["�1��&?W��c\(;�xo\_i�>o/��+ea&C�,�(`��Rj�z��X���1�
q�I�Q�����S���X�J��tJ�2�c}ڿo��E�sяR��5����Z��ѕ$qG
L�V�
+m
�
|u:
x�tHgo�x�xZK
x����B�u���]�
6`��2��]F@k|@�����K
�W�������1ܔחF�,�% p
B��
+K�
A�#�ǀ�qd��?x?W�����V~�/� E��@Wأ�E/������P�c�0u���
 ��`~D��\x�i�"�
J��_:$�����஍�٤QL�c�y�~�����KA
�egX�R� �������B>x���%��d�Ҵ�vٺh��*20Lth�S�������}�k
��u�:�+��m�

�����S�?�s?H4X��������_���^au@���#g }���w*��Zc4uu�'e�`�q]q�e���a��
�ھPj�}�!(���:�-bD�7�.�b�����֢h��)VW���[�)�* wn�veSưo�R���39�Ƥ���8�HNq,�������9^
�
0� ��%�(�O%����ôt�Ǡ	tRt�C�8����‡��\�z\��J~ڎo9��^��%m%��^ҿG�I�V0��/g��;%�	�ąO�t���<Ⱦ���_��i��������u���#�+�te�#G�� [...]
+�����޺V�]����:H=z���!�ا�zl��w��?�P,��X�&rg'���(�'x��i��u���DN��5�e2*�Ň�N,<)������*�����W
�,DiӍ�+2
{��Id<	�bdz4�Ǻ��ر?{
��Xof(��
+��o
0{U���z�*�RG|�?�d˺ꪶ��"O�.
�ɝ'z��� x��z��)�L��"A<�bx��
UA �ݝ�
+�"���$a�#�j	��6�O�-��>/\�4���c��{�p�h���p�P�gwZ�ħ�(��}���o.P��ŝ
*����$E�$�}���~1�M�w�:WeA%l7h��O���i���{†�>��[WZq
첯3G�8R)b��v6�?g�cLC k�t�
]w1H؜`j�
�d�y��N~�o~�v'�3�f�&J@ �0ǏJ
+endstream
+endobj
+1573 0 obj <<
+/Type /Page
+/Contents 1574 0 R
+/Resources 1572 0 R
+/MediaBox [0 0 612 792]
+/Parent 1562 0 R
+/Annots [ 1569 0 R ]
+>> endobj
+1569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 49.928 100.126 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1575 0 obj <<
+/D [1573 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1576 0 obj <<
+/D [1573 0 R /XYZ 86.4 531.315 null]
+>> endobj
+286 0 obj <<
+/D [1573 0 R /XYZ 86.4 284.078 null]
+>> endobj
+1572 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R /F49 636 0 R /F16 453 0 R /F38 509 0 R /F55 729 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1580 0 obj <<
+/Length 2506      
+/Filter /FlateDecode
+>>
+stream
+x��ZK��6�ϯБJY��'�c{�Jf�����\���L�Z�������Di�V�$�l����P��_���W�����
W��D������("�EDq��I�励�E��i���]���rō�;��A�I����훛��nK�eA���姛����\���pA[F������O�"�/?/B�#�x�tۅ�a0�����U8�
ʭ"J�VN�M\$y�,Wd��d&��c
�%><���i��}�N��r�$�
+`喲�wU�(�|AS
6�	����S��J
��
�z��%6��QjPWV;�@
�리�s��(73�yK��8��/�I������S7x̚��ϓiNB�Z�}�dq^od�#MD�+JI$��-�P˪�b<qi��@������)nS�(�c������n����(��

�K�r�a��,i7�{���"M�4eq+R��ޔ�<q����n&N���HF/9:CdhZ±`&�3����W8�c"��+G�) 0�
��8�e��hs�H@�:�m�lJ\7HjϨt�V��
�N 7H@�p(��^���m�owyj���N�$���2NGf+hD��
� -J��\Nx(:˵;b)@��b��t�T:��ͷݱv�&*�
W~w���C����!�ԝ��i3>5ԕ]Z
צ�yڭ�~x�<����
+�JJ
P*)>�yPn�
+�IJ+�ζ(�	�����YX�FD�G<w���� :�
�G��~_�[�p�Prp��?
׽:��e2�x��%�h7�v]������
+��\ �7�� �
+q0}�`{!�1�u�!��9�+Њ�I��M�}U��_�,�9�
+I���Z}��������	~!��!������
tl�=�|�;���
�I�A*#� c�`�	�#b�Ȉ�~�7�q�����Xq�ِ0&؁�¸>�>��8RZ�e�|i⬰Y
+�U�ֽ�	�'gfo���lpj
�L��}��]��w;+M
+�@q�X7�~�=D>�t"aS���Kp�T�$a%��q��I�/��:��g(Ôܓ	+�P� Ξ�z�m�\ �6@�"
���n!7n�r��hd�	�
�YV"ą������(&��Z�r������LL�ys�lB�����dw���N�
��| �:�
��۟�J��<�<�D�|����q�d��;߼X1H�!
�"H��:�}�
�*�
�l����`3baO
+
+'�4o�� �

�
��0$)T��4����� �!��8�<���Ƿ�]3aeHh�_�r*��) �$�]���Y��[:q(x�Z�
ʺJ�&��b�S���sȘtOe~�!H}N�
�&
� �$8S/�`�!��e�k�3�#梨.7��ݗ�5�
�W%�dk2���Ɏk
+W�������+ڴ�M&]�vs��嗉�C�N�dd'
d%�4%�m�C"����g���d�Z v�°�뇟>�)�[G���+� /w`�y�
鲢q���9O��f�&��:yb�}^~�&����9�¨"��mm.�!
%B��1p)�5u�k�u��C��z��*C�؈�Iw�
�@��]������]�S�.�!.��
/�]{��_�ZZwt�U�]U~u��Dq��o���
�	�d���ݝ�O�;B�q���1�����a�S�>$.槾�3� d�!8���u�t�Y��[v
Ju�a�nK(@`,�~�ݐ�N��c��y{��i~w���,	4x�I tb�:��!�wO�ۭ3A�K�k�
T����j��vk�����D:G5d�|
��%��I�j2Tj�z�
+
{Ti5�Ҷ��9�áq�д��p(��	֘V��i�c�_\
�qt�*NV�!
mlm���d�
C��bHBM$��	E�HXI0_L߾����]���x"�����\N.2b,�IXR(��m!N$���
$��V�m�m?�
3�=����^��5�=iۡ=(�a}R����L�G�>�
��P�mcTt}�7e�ps6�B�
�� �]FdE~�y��
+���e�c�
�ƥ�9���
+Y3�
�G@��r�7�j�O�\f�v�;l�!��G�ml$�
�k��

�66H����;5����-Z
�b
��]�9�\�4��Z�F���)�#���R�j�u7)�������v��
D���1�����2h~S��PAmS��0E��n����1���s� �
+(,GB��C�7�d�ajd�JS��K�a<��Oj�u�N�l
L.�a�@ӧ?x?]e�#���
g�w�E�3
����	d���c�
=�K1*�o���p�/i/����Z��? °�3�|��F�8# ��/ ���]����%��K��
"`(SZ�E8���a����tB���iB�
N�r9�.8�{c��"ODs�p!3�
�E�.���?Y�p�1l
��,����<Y�|�P�:hyYW�w�'%a4K���N�C�9xx��Wl�Rbr��d� �E���P�U
�=�	�2x]���+��K��ߎ���q>� �.��5�&)����qP�ͪ����/���TnJ�
+endstream
+endobj
+1579 0 obj <<
+/Type /Page
+/Contents 1580 0 R
+/Resources 1578 0 R
+/MediaBox [0 0 612 792]
+/Parent 1562 0 R
+/Annots [ 1570 0 R 1571 0 R 1577 0 R ]
+>> endobj
+1570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [330.574 654.314 342.529 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ex) >>
+>> endobj
+1571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [182.976 642.359 194.932 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (cite.arkode_ex) >>
+>> endobj
+1577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.908 627.55 414.631 638.398]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1581 0 obj <<
+/D [1579 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1578 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F55 729 0 R /F16 453 0 R /F48 609 0 R /F14 694 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1589 0 obj <<
+/Length 3992      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[w�6~�����{*�����C7M��i�i�f�
Z�m��V���ݳ�}���IN��"�0���
��F����?�.^��(�҄'��ۑI"9�<��FW���q%�a���>�9~������|������.��`�؈
)e?7�|����[<�����8�=ږ����и��>^�K�(5z8���>�rc)�y�ȗ����..'l�Z�oj��8�
�����L
M�4����ÚJR1���_�ye;n�z����d�J9��8R���ט�oL�{����1㉌�q}��9ݚqQ�G��,�|�^�+�b:�+�h�Z�/'�@Y�k�_�n�Gْ����Ck\�f�w�+$NJ&�DǑ9��L����REJ++)�
�)�֫2Ы��y�^M
i.�~��>��:mY$L�&��7��îhSt�O$֡�d��-E��e�Ղ��܂���5�&�~6a,Jq�r�/u�MI�dd
�W��u+"�M��=-�Ӻ�w���=��Э ���C��,
�N���bq�ര�DF�SV�+I&���Q�C>��(x���%`��P{q�!��uʇC��6��ڪ���N�[H
X�og���*~�0:�L�f���5��[�'�4���H�d���T���,�8[��պ,�:d�����X l�5���rZ�e
W�C^�N�«܋��aLG,��$b�$�a��a@Ӕ7��>|�X�O���Ƕ?�k�0%ٰ�S�Miy at i�)k
g9gi��J�1�=!
��>�¸D��O*l"
���
R� G�,�0]ŷU�j�v �mYfO{�O
+qf�1�H(�L]b	�����6�ᆓ?�|>k�WGI�����}�\�æ���݂��[a�?��&VԤ'��(��O���8m���q�a�RZ�*K�a-RHjqЧ�'�����Tl��9]��3T��:ʖm8
+�L�hi��o��: �0��x��D<=��
"��g��s?�r���]^��*`�
�gXz��5<�r�罦����܀�S at ir�
#<��0�����C��Ky�1�[`��Q�c1��c(9^�jw��ψ���΁lh'�̈́���g�<�s�
���n�����]���ٛ��D�2S'��Mf��S�}$;�bAe�|1�N

���$Q��ʱvAw�������ӁGFڴ��H(�Ʈ�3�	%�9j8��!!���#�u�2�����T\m��ұ�j3��v串�L�*��n帨�#J�j�
��Ty���̫��W�M1�G֦�+�AkꝔ����4��#��x�^Z}uiĘƕ��E��X��ݯ
b�i�/�OԆ�S�a�V+7ݼ�l�
KwmS]�
hc�h�c��/+K�� +R�J�
6KˡY�����Dq��L4��>o&Ҫ
b[Ѣd�N��_V������e��(�*ۮO#@N֤'�N��R:��,V��3Ec^:3�
a]Is(�2"J [...]
�㉖��
qf"�
w&�� "m�{@Dz�F����2��r	����c�p��Zm�b�W���b���t��^�0[>��C�G�,�a�TL���G*mFC�D�[�	
FƇ��[�_&��]��vf�
+�{�g5���!5��N߶�
���rv�3i�

s��Qniܜ8��r�M���W�����>`� S\�8X(���[5��`��{cea�">��Yy�
��)�L8���"J�A�Sf�b>��7ؒԀ�N�|�`���X���u5
`K��زXY�m�X��uV�6��A7����7����2[7qӋ��RՏ��QӀ�v�"M$@z at o�v
S'�������Ō"���0�v@�`
Z�N���
 g
0#=C�ljHb����C5jF~h��>7@��0⤸#t$�t�$�
�ؔ
u9���
��b~d�\m3�-(�O���ґ:<k��w�Ս��������i�b�/���j�>��[Z��f���j#�
QFE��ڙ��a�>�g�_ir$m8.�ư�H`��?~x��j@;.$x�,�Y_�����ˍ
�Ns
ז���QQ��
:S ���̓�O
Ӓ��O*	p���(
{x�euTq��|�X�h�Τ0���q���}���n���"ir�d�f�ՑH(b� q�S�$�
��`|
q������_;�|����q��v~�^rk�c�"�P�b���W�k�P/�w�P!�o��?�
ݬ`cٲ~Z���5�c���f�kD�`���+�tێl��g�������5	�c[j�9Ҕ<�ِ#�3ȹN0 at W�;�kP,����W�v/����5��ml��a��v�4�����i��A���n�i�5�"��՞�< ��=��
����_����K�Lm	��R�-�ALIE�j�z�ͫ�M�b>���~.���V�ܲT߄��A��'�� �N�H �3<�W��K[AMζ�V�X�g+?
��vyMq]Z{(f�{�Ȧ�ʷ�������/j�r�/k�XL�ܾx�T�
Dҋ�fN=2Z�$��
�M���>'0�@?��z�Y����$��.��VO�1ƪ�Ce�Ǧ(�*0
�:���~sD�ź`�*U���cS�k��t)�3�{�'��$��p|Z��/�q�"���ޓ�)�J�G-?� ���KO*#��.���T]���9�G
�o��[a�/l,��嬸�/��~�<�#+��]z�}M׫K�
^�3���������m�
D�f���~����9�2ͩ�O����a�[Y~������� ��i�V���K
ަ��^����ǣRe�d�yc��*��e`�KE l#
��+�~O���0L�� ���
��1'���>��c�v�:��[����۲.-���V)4q��
���)��l�&
 [...]
\��6Ǣ�����TD��(�S�C��;)��l��
l��n������*߄�D�g <5�Ex�����j�ʌ�`D�_6���6�A�e�a^N�?���r+���\��A��I���.
+�
2�U�� &��?SPx�`��B0
+vB��gN��Z>Kuv���T�( 
+�m7���|t�xBG� �Ϛܑ�<87z8�}@��A��iTnju3���|n���:
e�YA��ͽ�����Mڶ��f��7��w\�������!���#��;I���>�8�9���!]�݉�f��f�m]�;�Ƿڦ���Z<p�=���4	��c0�#�O��>
wH�u}��7�|y�>�OW�u�W�o�[Y:\���S���R��~�/j��
��
��
Y H
�"Ï�#����C`�=�7���'�́
+˛}��bPs at b�c##�U=B'ڔ�uU�h�,=�D;�iE�#�\1.��
���9����>���=�&4?x���:y��ӿ��x8tw�5�o"T�;G�&}�����
��*�
[�
+��EM5�)V��s�nAӕ�ɏv+�.��QE�k��߄*�����/�և�2�;Wt2���
�	�dr����4N���x��}I��A���$E������F#����C�B��[���"_��'/��
��`���M
�cFE1hnB'X�It�6��Ë��:R6|�&�������b���S1�sΖ�(ݞM��;��� ���5�R�`%zU��-D-#ӕf�8��h�i��S���f���vxHp���IW�
�`�w�nQW��6�v���+�D
+endstream
+endobj
+1588 0 obj <<
+/Type /Page
+/Contents 1589 0 R
+/Resources 1587 0 R
+/MediaBox [0 0 612 792]
+/Parent 1562 0 R
+/Annots [ 1584 0 R 1585 0 R 1586 0 R ]
+>> endobj
+1584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.106 289.163 523.829 300.011]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [350.583 243.28 362.539 251.693]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ida_ex) >>
+>> endobj
+1586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.097 229.174 415.819 240.022]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1590 0 obj <<
+/D [1588 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1591 0 obj <<
+/D [1588 0 R /XYZ 86.4 701.138 null]
+>> endobj
+290 0 obj <<
+/D [1588 0 R /XYZ 86.4 515.543 null]
+>> endobj
+1587 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F8 465 0 R /F48 609 0 R /F55 729 0 R /F49 636 0 R /F16 453 0 R /F38 509 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1594 0 obj <<
+/Length 3217      
+/Filter /FlateDecode
+>>
+stream
+x��Zے��}߯�[H�a����Ȓ�.[���`�\��E�$h����szf $x���T^H\s�>�}�g���(
}s��ۛ�o�
��j�G�w�DGrd���`����1c�dʹ�v�u�����ʋ�d*9.��_����_�}������o���x�]d��n��y}{��
�����(�z4[���[<���w�86=�vˑ6�Z�~���&��w
�Ik!��H�z�-���~-o�ͪ��LWt�C�1��]Vmf��*�K���cFO�����Q^�a�5��]��X��֏�k���7�i�O�0�C�0f"��Hk���dD�D�H�G
�c�R��C��&��
�6"�b������ݱ��iؗo�m�hk=�2�8���!� =B�ﶫY@���2���j����Fk at 4�j��*+�Ӫ�<<�`��g��9_��i�6�9Dod��5&{8W�"�E�f�{}�p3v2�:�?�)�I1
��X6J�a�
���)8�M"��म�N�
^-�U���UY�χS�u
c�)p�#����a��,�&�
��2K�,�"�} X>��XcN�'
�|��n5�{u3�N;�g��`�]U}h��4�2W�Gl^$0P�F*�@����ʳ3�H�t%�ٙQ�<E
���#��Mps��8�۳������igM9d�9�h�A����3�d`,B�
�����-� [...]
�p$$��@��#i����tTw_�!&����T�I
�7�Ta{�:��Nwe���lY���:],
+g03��yhJ:�
�<�U+����]�(�I��ٳj��iE]�釅���)��F��Y
���_0����K�!#y�N�� E����
5�.����\��{ faX<PЭ�[=�䑶���G�渄��.�J0I
Q{���ɬ ���lmLw
+�ƅ5,B�tD��IkN�Q�d;r�E��X�3r<BYh|����$�o�e„u�F�Q���0�<
/�X��&
+
��c����<�����(2��b�P� ��z�u����2�
poXD	���*!VtF=+$`%�e	���UW�f��A�
+�<���?t^�@��S���u�
M�l<�����\ѦV�Zռ�V��)���Tu�Z�Wm�D�[Q4�@+�ӟ�2�GN62'JG����~*MBJ)3��cR$=J��*�X����l�m6��X��
+j
_�
�r���N�{rʗJ��f���
+���(ߓ�f?��$�� �&�Q�ΰy�}
���uzP����S�D���Yf���2��4��ЬE�Mh�OU�Ψ�����td��,��ۥ`�>O{V��T��;�zh���vD	Y,�U�k1�AWT�	�c]��G0�)Xun�Rm�Uw
+���B"�L[@�T���81�U+ud�F?�j�`e�O��>O��D|�
��J�>��e�8��A�(���{ο�S{��}��vO�i��
G}�
w���A�m�:A0�A��@M�Q���$��X���m�t� ;�7�Дց)u���>��):�
��b��X&���hˬ/
 �!���"N�_��tg�=���SlV �l�%h���%\�� �/1�<$;��2Qڈ����f��
���	���&����w�����o�|�u���Լ����������o�"0�Pl$�"�"O$�E�e�^q��B�Ӫo�N�2�5O�6b���k;ۜ�*p��Y��*�/��E��l��Q�,i������_��|9�Ʉ�#~%/[�9��@�xw�u6�������ٚHŬ;򻣛M*a�ݷ��]�>� �$9b�Ba���K�d�Hҗ�Pj0��`���|��f�*����G�1]2�VU��c�dj抨��C�8ػ?�j�0Б
�~�&��g����F��
���r����OQn5�.����n�aւ�j���lԚ�̛��9�y;� 
sy��O{;��E��=�#ގ�C7�`R����h��|��s�}���l�,�l�p�n���v�����o��l��o�jSf���o��"�Z��u�d�u� v��
�� �Y�ֻo"��;7�
+�>I�ؕ=�7���e�g��2t�gy��=O��Xw�Z�*¶C�z��
��ɩ9|�i3�.(R��N+ ̂�0��'O+ ͲQZ�\/�e��R_�Vi�
�V��J?�
+�¢v}
eQ
���c��/��aTьC�Ĵ/?��'�3i)]�ʰ��3dՉ���o4��l��~�lUS�x
6�)>��=d���c��!��T�C[������ ����N�%^{wØ'��m�����z�-�%8 Y; �r@ҍ{��P��F�j�uuL�˄�
q�s���b[�l�?N�/f�^�4F��#�@๖�
+��2���dW�%H"UI�+��i$�-A��
�h!���i��ON�$�ކ�|�h�텅� ��v�.�s��A�Œ*��0�}�&Pt����Jx�v�[��i�&�%�Z�h���������d�Q›��,n�S��
N�k�y�u��d��c/Gn
C}��?�}fw��6U��:K�/Z�M�Ձ�dl����QI��:-����ǰ+���
Ũ��
齃)�.?~W=@�s�:���k��q\A%���>Z�
L6��/���ߓ\��$��yo��ֶ1�
+\�dž@�T#'��]cD���]�A�vX�z"
BI�;��D�O������tW�w-)h;�<$�p��Lp�!��>�4۔`osN#�۳pE��w;�w�2_<�~]��U�*%BqR����*̡�f�`�{z�ek�D�4Lo����E���
^x��P�]�o�����G��!uwn4���$���S -9�p�X
���m'��G�>v����J3(�J"��Z�5'�+��b�'�mn����
�p{�P����O(}��׋�Rۨ�~��v at c�.��
0 Pw,��T�����d��B���y���sv���
�m���H*��kX�;�I�O]ã�O"� ;`@�$k;��2iOTbnk���TJ9~�;i�OVg]���c�2|�pSo�+B��[Y�nk���b��/�Q/v
+endstream
+endobj
+1593 0 obj <<
+/Type /Page
+/Contents 1594 0 R
+/Resources 1592 0 R
+/MediaBox [0 0 612 792]
+/Parent 1562 0 R
+>> endobj
+1595 0 obj <<
+/D [1593 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1596 0 obj <<
+/D [1593 0 R /XYZ 86.4 341.138 null]
+>> endobj
+294 0 obj <<
+/D [1593 0 R /XYZ 86.4 158.545 null]
+>> endobj
+1592 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F14 694 0 R /F8 465 0 R /F16 453 0 R /F49 636 0 R /F38 509 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1599 0 obj <<
+/Length 1819      
+/Filter /FlateDecode
+>>
+stream
+x�͛Ms�6���<�m�Dfrp
'3�6Mk�.I��$�H�+�ɯdP�M�Y�|	���|v �N��Q���1蝾�*2�(����(UDD��8���c��>����烿��'"����W�|u�gF0
SJO>��.��z�']�$*�{?'�����M�V��#�
ap4�.{��߹$�$A'iB	"R����秄�
��N߈4x�:�
�̓|U>�/匤RVv��Ou���M��.��(�Ę�.��!)(H2I!@��8<���b~U��ڧo��&���+yy�B���<+-W�E<�O�C
_�/��읰4��n�q>.��{*[L܅���-�~�{�7'R��l:�ޛ� ��Xc߷�i
+�����הH%P؃)�d3{I�>Tt����2��iJ
U{z ����y��� �ҟl[�����N߃���DK
� SL5���w�P��K�$t	u�ڃSq
&�N6Sx/Qu/Qk/Q��h�%j��܋y/��qƈ�J��n���8pn��5`֤)�׀)��f�A��^*��e�-��̗;���ʭ<�*�
I��W0oHc0g��dC�3M8�G�IC��@%
����CUS
^�J�4>��
+ ��*f!�-A/N��o���@�4�Wy�\UOW<���Z����p�X�l2���*%���
A�z��lq���G;�I�A��)��|C��P�8�s�ȳ���|ǔQ�6S��l��4{�
,I���f��0��~__{��R�)Q	Ea�D҂��g*vb5j����h��h�C
LIC�i!HzZ�b'Z����Z	�Q&=֒N[��uE�*삊�N�w(I�H
LA0P	�hЍ�
�P��Q{P����P�piP@�)��1
+Cѓ
+;��
R#7�<b\	C`�F���h^�aHz`�bb|'���s"(,s9*0%y
T�
U����ڳ�?��*��΀�4k^�cHzX�b'X����&��Iř]p�6�

C���)v�%����ч-��]%
+���I�C�
;k^��s�aph�)f�g���V�؅���O�#�9��'՗W
b`J�-�!Hzb�b'b���3�lp�����R�yC��
+���m`}Jd����
/˜�$�ٺg0�H[l�cH:f5�.��=���0; 4M	��\������
Z����ֱ�D��D�
L1���*ϋ��K�8%<e[��o��ٺ�%,w�����e����i�m�&�̬����zV>�g�%I�ኝ����lZZS��f���e�8��,&Q2E��[(�`{�sn���j��Gg��㣈k3IQ��7�
E
+���S���� ����ӛ
�b�~�&ӛ�jZ,��?�]�j��O]c9A�:ܰG
#	E�Ԥ0I[�
`H:t5���8��-��z�1�-+�����Z�U�(w��#>#��)���e��Q�ؑ�-���-�i�##�} 
��d�~P �%ڢ: A�3
+;2�e���|��?.[����b-�����
O�ב��D��F�hjK�r=@m����2�N$�)���Cѣ
+�g�U˹��k�ˬѪ�]����]ʪ��A����H�`	�s	�
N} XҲyA�a
��g��#
2�I���l2ylյU�Ȩ5�-���<�M͡"O���)�Aߴ�@t C���ܽ
+���a��|f@�u
�M0N
+��jYT���qY��&�[K�x���
>
��$"=��'9�
�����X
�낾.���ݽ/��`�����ῇq[LN�)�Y6��(�-���Իz� �XG�|P�wM'�y�W�
�k
�����a%��
+endstream
+endobj
+1598 0 obj <<
+/Type /Page
+/Contents 1599 0 R
+/Resources 1597 0 R
+/MediaBox [0 0 612 792]
+/Parent 1601 0 R
+>> endobj
+1600 0 obj <<
+/D [1598 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1597 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1606 0 obj <<
+/Length 3076      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�F~ׯ�#X��>6�^;�&�$��Jyp�@���2H� �c�v�
N�G"��j�4�
�g��>����}����o��9�4׳����D�
wD
6�Y��%���5玻�uZ-�l[g�f~-�L�{�+��1
��o�{u��oav]�_��vy:���w7W�0�3�0R�J=[��޽����8�D8;��׭gR8�a���}�����0�; ��)g�1Œg��2�����i{?�#��oҪ��/�X�<]aԱ-
„m��8�Ƅ"΍���Kɀ%�K)��������(���ś�ri5����ג��U�.j�3�"�4�&I�uQ�g���)��&�7�2��E�K�o�1��Y��E3�UVe���gO>{xDbuו�'x.��N�M�q�(S2�� ׎����;�
�0��ˠ(quOg1���B�E�a��
�`�U�jQ�֜JX���C���1pm(�!�"(��(���Sx3x�� *����#Nţ�Ѡ�2�U��!�^�y�y�N7Ȩ�N`��%@L]
b�	�v���4�.�1����i ��W �O��3�1j������@�$�.�2������l�.NAl�.)[(�n>��=��	�i0���0G,�
+L���qj	6e��K(k���DRJ˓�ˠ�������	�|_��k�D���k�'�7{��n��խ]��!���z�
+�i�O��7-��zR�O��,���
o߲i�
M4��i�o��ڤ�4=�6!w�2V
�
;Ê/�2j����U��b�;ӊ
4��v���{ڍ��ՏafYl�,�4̕i�+7].׀���vr�7�U��
��}�P�8��^Ơ��R'!p�}��?l>5g=7s
	QUm��]�>����
�_��/8��t��
+�/�%H_,�ѓZ� ˨�>G0T��r:)W��<�(H||��'�Dᠶ/C�
v�5
7:L�����3�P��\Ɖ�Fw	�A������+�,�L�搱����N�dX�b��F����/:5V�Ѩ@��Yae��!�km8�n�r��X���#�a�)H��5�ڭCM�4�rTR}
g򾞄����$B��"
�A��T�d�˚X�'����P���6K�fV�qW�,Fws���a��k|x�/D
+�@�<6J�2Ӹ`����
�.����j��/�D
@�_[�Ue��b���X��9DĬBc�>��g/83(��Nk�~)�lYR��]�S�U�}��t�Y�!̕ ¶���rI4�5q�:Ǿ�۰\��

��1�V�i�j�9${
��Y�],�����
+��8�V?7^ZV%�W
!5̫"��
��}��@�,aI�-<����N\��1�fUhAؘZ�e�H|�2^@Ux���7}��
(-�%w��r�ݵN�
+N�fٲ�w�M#0�������x\�s㓁]�����,��G��z^y��:�\x���& F�$�1O4,$sH��k2���?
+�� U�l6��C���v�-kv��f�8
+�EU�F-`Ei��̈́���t�x�_ϳM�(#�"g+�1�H6V���j;�i+n�bX	�*CQ���P�1�=&�R�
E9�)8�v��s���E��
o
T'�L�)�Z���̫���%��e���
+]�5ޠ�)C�"�
SN7�T٢!Gn�4
�x�w���V
D�1�N
��=����Թ!�0����箶�)� �l����k	�b�����a�� ܉�j[�ME"�|���
�s����	�Z��i�� b��
�"�+�C������;	-a�
��m��`=�N�����QC� ǁ�7�����<�^T��:�G�X� �+�k�� �w5;�J�QT�L
��b`t�c
�6�
C9b��$���!Z�D�
ʇ��ϖ�R��>6�-��x���œi:�p-�����
烬^��E���
+�3t
z��4�I
tN�B���TS�.���j�te{V�)�].��+�w��1<6��A �
�.@��~�L�4��|J8�J����ؗ���<�ă56F���&�}���SY;̢B
ʙ��Pq����l��7@�"-�4���&�4�
��
� �/�]�P�(�t�w0FA�)(q�
�RF����Di���Fj$��Ӈ a+�%!
�������)�:HJ��ޏ8�(O')�Q�r*"B�Qs�Px	HZ��w����P
l�a6�e����>
+�D�s��{4k�{��r����p�K(���J��"�����P%'��
M�1�Ag4��O3T�	�“Ҭ�Px�}�HBA��$:�q�vi8�Kl�B���q��i�+(X~��*��R�X�P���2
+tոc%c��؍�
Ǹ��Т��9�?�t�3
e��G]0׊h
+���w��|�%�������wE��R9l������)�x��ʄgn$3)�kάW����6�-+3n�fxb���7������J������$4Dh���.+�8}���k�� �N��{
j=�{��(a�/7��x(vU�,(��Q*��v�
��	�QV��Ma�^��g��s�����>���0d'��eB$��o��sF�
�'N�,�m�
bю�R�d�] vդ5��,��!�q�ݣ'Y2�(��'e�9xx��t���͛G��R	�ڥa�
+�K㌗��P�Y���N��`��}YO!
���t��BTs�&��5y‹��].v�~�m
N.��X���@��L�8YS�.�M�)�!\�}��2�Ͱa��U4�ԡ:�6���ɤ7�
M�RoۥG'{4���B���

�*~&�*‰��l�!6&��4Ė������ԯ��mD8��@���m[��w����󬊟��ξ�7�ԍ��	>��h�<C��4L+L� �A �ԏ>�>�k�+�۲�B���AbԤVՐ�
�:v;�6�غ��VP5��y��ա�TB-t,�X�Ap�C`�'���/�ak
4��>�
��'x�v��b�
,q�%mҎ�x
rߓ.Y��,
�#i�BP��j�|�����R�,��)���N5�/�  R;yYv���Ps�#��̲�����n=pYՏe�N���� ����
+endstream
+endobj
+1605 0 obj <<
+/Type /Page
+/Contents 1606 0 R
+/Resources 1604 0 R
+/MediaBox [0 0 612 792]
+/Parent 1601 0 R
+/Annots [ 1602 0 R 1603 0 R ]
+>> endobj
+1602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.17 418.282 138.893 429.131]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.3) >>
+>> endobj
+1603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.124 238.955 252.847 249.803]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1607 0 obj <<
+/D [1605 0 R /XYZ 86.4 726.045 null]
+>> endobj
+298 0 obj <<
+/D [1605 0 R /XYZ 86.4 459.032 null]
+>> endobj
+1604 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R /F38 509 0 R /F16 453 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1610 0 obj <<
+/Length 2391      
+/Filter /FlateDecode
+>>
+stream
+x�ŜMs�F���8RM��co^�I%{��
+�U�
(�N�Ve�ʮ�}$��=[>����
̃i C�揆7?������m
V���S�-Ӎ��Y%��U���2~��Z|l߿���?�?�������v�;���[���]�+��r
��]�Ǜ�
)�
!���W?���:�|& �44�k��ܟ��;oV��O
g*�濇��F��$�v�\��z��^�<�z��{����X��9$���[C�JA��o�Z��Ϸ�}�?��|:������~�=�?�[uu/��U�ϥ�¡��� ���;�߮Υ\,���T=�Zb����/V��}����zwD�x4��U�1J3�un<��Lx1�詈���=(
��	�DC�

����gRPЌ�)|>�^�8F��?|��Q�a.���K͗ǣ̌\ �g�2�݌�$�w,"W��LY*��J���۝T�"��Tf8s:�*�R��
o��x���6_��;�pW���J֖��E��9jA0iu��>*U����q�>)��;��a�B0#K�aԨ�O��D^ש�Y�B¢a��4������"�9�"±�T�
�`̋�����2)E`��F� ����x�XH�)������-�E%,�K3�lX��Cg mΩ;.�F�N���
+��U�$�g�
+���L	O�p�G� G fABü�4Cgd
�
Al��iϧ$���F0�I9x�z
x���8+?ˡ.7�l��m
�f�*�E��)P��O=j&{&�����s�
+弑3J�Z���
l�*�dV��\3/D�s@�0V1��;"�Z0��
��a����Wa���w���*f��M3�<����q�%C���R4�P�G�@�(H��I�$(>�9�yǓ_�5�� �%hi���qT�Yh�_H[h��!�{CHCC��,�w��~���3���z[���ɞ	�j��a)o���7�Y#o\Ky#�<�
�̈́�zѳ@dYX�L2U:[�vWJ�;[�3JT�lc���qy��lg��$96Α<�3A2Eɤh �
$��1�CЈ��і� ��hEvD70�L��_����5�L8G���Wc��ɛ�v�����~��`4��3Gn���q)#JވQ���f2�rވ]
O\K��i�aA,xX�OL��k���$���U�V�0+M�.�K]�e{��XO���#��zTFkR�=�$�
S�F�]��C�J��Q�~&F@��NT� ���u��3iA�+&��ܗ�l�;�i�b�mu�f���|��^n/��3��,7Ս��3�hO��|���C����d��
䙠1�IЈ����'_��up�#j\)*�Y�x��=G�ָR
Y�o7�}�͙�&ٌ�slN�L�V#od��7�F�Y�h k��5�F��P���h�
�5˴<
(c��Y	'�p�sV�`3LÜY��l7�
k3KM���X��`�F��Z)od��7�F�@�k��<�5-�Q&>��YEi�d��s�9X�<�P�ӳ��5vl����mf�I�"�
g�-��H9+���Q�F�(�Ac����%q�r��U�*ݣR�[�
�'��T�
c���fy�y�0��$g�o�
+�x]W�D.+X"�%K䲂e�h�W���-����	��KĸRw�t�3[ge��NU^Z!�qYei�-�7׻
�3+M2�星와���TR43�rC��!hij�	*:�����L�PF��UЉ-�rm��J��Ķ9t&{&Сh :
D����4t�W��;M�$'�NS���iY�B��Lw�
����!
��Ȳ}�Z�U�-7���;��t�S~H=?$���F�E��h�S�s�s8�9���N	�o�1����.�jQcw�Ȳ}����>N/6AEi�9�˩�d.�Hy#=
���1�CЈ'�5�=a���pQ�
'��L�I��[������f�a�-6���ֹ�g�g�6��C�@z(HAc���O|ʼn[��gVB�:���9�t�w��‡`��w�-�m�w~f���'���3�3�O��q�*卼Q�F�(�Ac���aA�}I����Un3H���_]��r�a��~�}Ȑ6��$i�m��ɞ	�(HEɡh 9��
�F<�M J@�M��r�n����]
$V��F�
9�>m����}�y'��s M�L�C�@|HA�/1�3_"��R77u�{W��RJf�*~ ���N�� ���p�a��O��'ى�s�L�L�C�@z(�E�!h
 4�'��!4������eIh�� �3��$gZ�C��-K���#��"�@�̂�E�9�&[& �h @
��� 4���7��I͔��
�h��o0�>&l�o0Y�
+t���f�#�-6��:C�t�SzH==$��
�FOE�h�_L�i�ڷ��#S�
+endstream
+endobj
+1609 0 obj <<
+/Type /Page
+/Contents 1610 0 R
+/Resources 1608 0 R
+/MediaBox [0 0 612 792]
+/Parent 1601 0 R
+>> endobj
+1611 0 obj <<
+/D [1609 0 R /XYZ 86.4 726.045 null]
+>> endobj
+618 0 obj <<
+/D [1609 0 R /XYZ 218.406 555.37 null]
+>> endobj
+1608 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F41 933 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1614 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+1613 0 obj <<
+/Type /Page
+/Contents 1614 0 R
+/Resources 1612 0 R
+/MediaBox [0 0 612 792]
+/Parent 1601 0 R
+>> endobj
+1615 0 obj <<
+/D [1613 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1612 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+1619 0 obj <<
+/Length 3071      
+/Filter /FlateDecode
+>>
+stream
+xڵ˒۸�>_�[8U
� AtN�d��-�k�
W�{�H�Ř"�$�G*�~  )Q3��D4�Fw��P�z��W����w�7~�ؕ��1*]�oW��22y�W��կ�_w�a(�ۻ$K�����y���$�Wwi,T�6�ܵ���>T��y��^Ԁ�)������,
�7m���	�q�\Xk�O-����X�=mW�ȍ2�`%��x����:Zï��[e��+j�(�d'l�&����*�H+d���=(�>��#�n[��>����j��l���3
�
��-$N�
oe�H��|v�� 
�[�Xu�3hh�[,5#g��ج��mzq{���ӗ$�L�Xf�;)E���\��>G��i�rÃ]���,����Z��AF�m5�
R��-���G,}9
�h)��B��h@��ף9�
_�i�ĔFE�Y@�R�߶+˧�ѭe�w]U�ͦ�o��g
����V��@*���� 
+Y8����o�c�f�
O. �BOh�Si&�R�2�L
+���l�qG_�(@X�
��h?�Pu�o�8�Ѿܷ
jz�D=�U�+T�5I�a�@��`\��rفE��QN� �h�}�W)�c���p�������d�b� �v�c Τ?a��b�>TEã�sۺr�6�
+�
00珳��:���"���)�5)\[�"�*�
/
�K?�C��h��+�ƒ
���3�%5k�v��Y;�u��DU�
k�ߢk ��o=�Ɲ8�h�S&�q|��3H��;�ȑB�H-{�8g�/Pg!~�\
*
NC
�g�S�8���x� ��/4����-,~����^�P;v�iHWZ�,�Xt�
+� 
H��B���Hu�Q��q]�w.Iv�f��Mٯ�6T�6,����|
^+w���%�s���܍�+��������)�Zhe�-R����.}�Uk$�S���b�5^����Er� ��t���1�8�/�1�p(Z�������L"t�]�z��y����Q�$��~Ln΂�D�/:�.R�Zİ�/����R)�=�r��~���Hq�
ມ�
+7
fA`W28�B�\�<��9��D��/7����q#��$q,RH�d*�V��ͯ�ǫ
LBn-�ܮ>���*2A�ԫ77��R`v\'��
PeP
�PQ���=���R�Bǀ��%$��)�
��Ǡ� ]� �7�KRc�C���\���H�*�EE��
��X
FH��o/~*��0��3�mP�����8Rt�-���s�r��須6��D:�����K��LrϢ��my.H�{�.�O=ώ6N�F
�Z�
ʚA�0�ꪔ9D<�R�ʚ��U��ȥ"T(��3ѥ��#��gJı�&�g)��OH����i���耿�*Q"��)�_Zt]A�5p��DeT
����̵��5�*=#�ԏ��Ԋ<1߂�Ā
:��&tLt����;������/��[x�r��8O�_ԇ �k)$�����]�4e�q:� hҥx�.UEmS/5$(�=�E
KA�!�°�gt�Ǫ+7��I�+�N�@��}"�Nb!m�2I:e��#�#��`��nX�&�U[�
��+�9��L�i��iu��[��B�0��}�)l�âq�$�syM�>�!l �
Rޗ�����^T�]�G'�	!YYp�!�i"�RJQ�0�v�W��E3aLʼnz�:��T�ۮ+�t�2��2>"�~�
�w�(\n��'l��\�����W��,���D��{�B���M�-u�Nqרh8
+Q��%Ʌ��
��)�3bH���@|�d8ݢO۵K�QP
6�$"M
�m
+�Y�&P��4_\rX/	�2�3���������eo���h����ym ��d�tq��״�u�>�CX��q'�ˉ�
}��/o�_P

���.���ΟlA��'~��
�q27&(�Ɉ����
g"Q�|���ݐR��w
�>V}�J@��*��]�=y�C�=5( �ΐ�|������0�
+Y�q�����d��y��

IXw�a�T�dv�c<)�c����Y�FU���� L�j=��h�ʦD��� D�����t#�A�$
~�
ۡ�B��xf�{����ʹY͘'�X\]
T�P�l<f7w�A�s/��9�
+�ɂ]A�
+~�k2�8Y�Jr�
���R�v˙c����cPP�����Q�—��������r�W��"0i
��/�尤�u��+h$�u�9+H����
����q;O�ׅ���
y<W�3&�?���L���c���y�
򼪮���M�����权����
+��}���wz+��ʹ��<�$���^݀�:zC���N��d��+��ckN�����<Sl�1��LJ�+�%�F=qg��K.��\�	�
}��	��r[
�a�9�B��

T��?YB����di���Hd�-]���z��F��I�{�
r
L�4��2A�Z#���'q�
�
+��$<H��:jkg�7�x���ދg���2��2�����x6�g**��+H'��Y�B���R��E��� ��^{�p�g��
9���J�3����ڣ���C
+��3��Y�s�˱�O��ptz�&��u�&��܅M8BY"+��ga_琏������Q�
=?��
+8Rȩ@�'�O��7g�d�N�����
;���w���O=cB��������`F#
�m0�ܗN�a�{�H��ca����OOW-�( �M�~��FL�SgG�a�}�j�,<
�`�X�
qx/�� �y �Qx�,7�a�a(�y�3��cK��Ǯ�"_��څ�m���|�g�))�9�
����"�<��:�\��	v�N����8�<�a�De9?3:Z�-x���k
O��@i����k�a�u.$3"�f��n��(:	Sv�&E5N�n:���
��Ƨ�-�s���Ql�|r�gQS�+�?OJY
V[���ß�r����À��L����{L<�$ns����vԮ
��u}ܔ�o�����
I6�[�u���g1��t��s9휼��
Z됴��G���ٕ�<SW42f�B�F ��p
�
�k����8u!�SL���z5 4��s��	��#�?��s��H�^��ı��l}�y��g�K�Wm�>�L0n!9g/�U�/3�Aj�
+endstream
+endobj
+1618 0 obj <<
+/Type /Page
+/Contents 1619 0 R
+/Resources 1617 0 R
+/MediaBox [0 0 612 792]
+/Parent 1601 0 R
+/Annots [ 1616 0 R ]
+>> endobj
+1616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [101.173 326.466 123.644 338.421]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1620 0 obj <<
+/D [1618 0 R /XYZ 86.4 726.045 null]
+>> endobj
+302 0 obj <<
+/D [1618 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1617 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F14 694 0 R /F36 464 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1624 0 obj <<
+/Length 3466      
+/Filter /FlateDecode
+>>
+stream
+x��ZK��������0�
�˩(e+��r9�&ە’�]�$@�J�_���A���T�	�`����_�0Y�.��_/�ru��+�Y�i�W7�T�raxk�W�ŏc�r��Y�}S_
+
ݗ벺�\�TD/7������E������q����=-)�o�������)�˟��\|su�����d���*N�^��?��,���f��"K��B�,�x�,�]��"
+�da	���
����Ĺ�+ZbԘ规��K�Zƍ�n�j_�U���M�w�>߹�eu�Mqo�_q
�`��f}𔠇�D��*�'<Θ ���r}�y���#��85ݴ�Z���w��M�.�[�.�ڸI���Cڵ"��*V���͛r�����KK.t�M��ř�"�|,h{ŢU�ٸ��x(�U�ƗK���'�9��k�
�ֲ��e{�?��{��ݦ�BMX��
�"�E����PFKp���]1�i3J�S�Y��r{Կ^*�^-2Q��׋r3�N^˷��5�.ܻO���u#m��7�Y:��
�
+U"�$�כz���-y�aA�h���&����uѮ�rG6;�f(�s�i`��n܋��ܛ8	��%�ԘUs�?;7!
&����0���7�`,0��@w�����WV��aM{ӷ�
ם"�~u��3���j�6\�'�2L�ۺy6!��F���8�s6D��� �czJX�f�Gk(˿�������`S�?����{k�M��nJt��	����bOބY�qh;�J�������V;��,�3�&>��BLtGc�v�R�x[:�ܸu|�/�6^V9�A���A���+g)[ ��*��e
3�v�f��v\�1c�%%������X�B�&��O�J�{'
b���)v�%�B8_���8Śn���.��濆�&|8�/���vc�c	�0��
�)$x�^�q^��S��V1���U�/�M�[�ը�v�DD
�<fZu)׳J	�<�8%B
!Q��������XA�^i���x[�٧���P���7�J�="@��$�����D�&�f�I
H��1b"ؘmXV̸�
�NE.�'�~\9z��3���ã$�ډ�����*ؼ���'��*���~�����b��}Ɓuj��f��
�0
G6�a�x�r"�pݒ!�,\2
�����i�-Fk?.�N���LD��L;2k�
\	�����o�ٔ���CF�u��~�
)Y)�fC���UIǻr3:���
�!4�$��� S,	��I��iG��_B
�#��݃�v_�,J�i�z�?�Շ���o�ڏ�������kՠMH��0�!M��Q~m������.o[���O���1�oY������t��`�\������
G����� ɕ��؃9{�-�Q��!eq�h5��
+�<����(!I:�f?�Dݷ]S_#�mȿY��>4�NS|����ᤰv=��:&�@=��ű&$đ
:��N��f*���v��������p����l c`]�)�9�idk�=D�'i���.��z�/;��`GcK�'@G)�7[�3�
��م�ʻ޽����
��։6	�Pyz�X9Bu��(T�P��G
����
�b�J��e5Ö1��O�%B�3^�Y�P/4��'�Q����=�l�uTm{s�آ
���n���*�9�8�)�Bb ��H|T�;�ϑ �I���8w�Uq�p~?����]����C�������r�N�As��:(m-�����Th,�<�A���iT*$�-
�<<DxH��$

�^�I��8 ����N%�ze�'H~
��Q��g�VOG�F W2ˇ���P����H$D�n��7G���=��@ p3����jO0��x؝a$M,�~FR���
#�3�H�2��3�!��uz���h�������8�q��)����
M&�%�b��}�ݱ3'F>���`���?�
+?sf�
��g`��u��γ"
-�E6T�8
 ��u�H�_�v��|y�̈́zB&�f
�Wk�k��o�%<'}�ƻK��u���w���p����1��3HP�pѳ<��ǀ��|�xI@(���R5v��x�^u�;�Y�>�8��#6���CYo�
�,�8l�j�K�_�����$��)
`Hz(�V�{
pLL�aO��
?H�=�t�~�Yo
���P*��|,�y�wא�NP
1�Do�U}]�Ջ��� �q%�f��$��:�'X�� ���N:zu�DA��@X���Tu6��y��N��_P�j
9z
�c�il�U���a�0�����R��&�wEAM�,��}�z����~�O᪹�q�r��f
l㕺#p?�~��W3J@���u, ��?!�=��.�H�q��A+�y��v˜
�0s� ���КIԜŽ��(7������L`��ky�`p�z�PD��z&RJ����O�7�Z��ؙe���w�U-9ն��Q(@͸Qq�C��)�J&gJUɣ�=����a$����w�
v�Mi
P|	�)BJ�l�/�nue�ɮ�h�z�FWð����	]��6?���!:.��3���`�� 3��l�
�&����t�x����6��R#S
+ej	Ia�wY�A��-��
RNo|˰��@Z�أώe�[7RŚؤ1J�3f ��$���%���s¿���8©�d)���t�x.��Uє�_NG����JlS��
T��>ͳV��o��r�v���#�J�o
+�0S
��dw�)�e����k�FUeJ#E����u^�ӣ]�JVd<R�G���ٶqƯG�:��{o�ĺ[R�o7�#��@ֲ��C�jm+^ˮ4F���O[�	S�fԴ�8)&������� �1��H��/�i�qͭ[r�K�%��c��
+�܃��/�����Z��vd�_i�6���u#7��&ڻo��
jK��.V	H�'�Q@�[��
潘����_,��5tE�R<��40�m ⧸�g�&�
��_麀%��*L
����|,O%�6W�8(�Y�s��'_��f�#��Y�l���!�{};x���j
1pTa3��5�f����0�p���K�ɵD���,�];m
3c�̰�q�'���@À�2!�
0���N΅�
��f��

vg�%��ͪ�_p�r�=i��Mb�Y���4V�#�,�u,���??V��	���Ye�����{8�*��m��h�n"�
+�n�
*\*&f˺�!MRs�w��_�mˍ�An/ׇ�� }�{��٠��
�Ӓ0>�'�,���eBF�:c����8\��>��>��cbf�E��ȍSӅ�`ɂ�
�NP�\�J���2
+ŹX
&}�
�M��E(��ŝ���f���rD�HP
��j�dC�M<gĕ�S��Or��e�C�'�\�,���c��R�&T�G
�����Gܧo�u�?�e.S5yH]�� �zS�
1�K�1wl3h�5��X���B|��
����e'ߏ 0�p�/�Y݄��j
�NA>��qx&3�'��o���
+endstream
+endobj
+1623 0 obj <<
+/Type /Page
+/Contents 1624 0 R
+/Resources 1622 0 R
+/MediaBox [0 0 612 792]
+/Parent 1601 0 R
+/Annots [ 1621 0 R ]
+>> endobj
+1621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.15 279.017 330.873 290.972]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1625 0 obj <<
+/D [1623 0 R /XYZ 86.4 726.045 null]
+>> endobj
+306 0 obj <<
+/D [1623 0 R /XYZ 86.4 613.101 null]
+>> endobj
+1626 0 obj <<
+/D [1623 0 R /XYZ 86.4 558.636 null]
+>> endobj
+310 0 obj <<
+/D [1623 0 R /XYZ 86.4 418.197 null]
+>> endobj
+1627 0 obj <<
+/D [1623 0 R /XYZ 86.4 362.902 null]
+>> endobj
+1622 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F38 509 0 R /F11 691 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1632 0 obj <<
+/Length 3356      
+/Filter /FlateDecode
+>>
+stream
+x��]s��ݿBo�[
�7��\�i�ks3IӜ�}H2
Z�-&�T�˯�.�(ٗ�4�N_D ���^����/�r��닏^+��Xf�]\�-�ez�dƬ�����K���Jy�|���x���W��;T��W��^�Yh)��o�p8}���.��H�
��.ֻ����[Xy��Le~���ZeL�h�x{��

Q�C��c�	&��ӿ*�C]�J-�4f�oE�'Y|�2�/�7a���zP2��Dʶh�m�Kf3�vu�Xi8����[�
sz�wq�a�.���	�9�?\��_-��QA�@�%R��ݾ�A�Z�q7|�E��lq��qLX�X	�2YT����‹�S+ at U9���s˪����q&1�R��p8򊞇jp�O燥p�<��o��9��z�&�A^Zx���[nP4z,�[�m[�
Z|��vO�Ti�_ޥ
��uY���6�p7m��,.Ʌ�
���V�d��`J��J� 9=�"!��j9iFj4�0 V
+�e���Dl���C!q	���.tU���݌dg����
�3����*�*��l2ˤT�4Yy&��Ty�d��x��΁��`Y�� ����5c�; eY�픲1�B�-�
� ���A�y�e
�L/���e�ք�(f�*r��
7���
+|���O>/v�
�c�H���"�a��d1��O^�t
A6�hW���/��V<c\f/p��+֍��G�nє��7g�pp��`���x,��MKm%��tc�6����y�Ơk6tE��QU�V��w�C}�@�Qy?
�Ai�;���yT at y�|L���OcR
��
+��D'�`V��`�^���|y��K?
+C���T
����f�q�.`��дCI.
�H�&۲*��6�w��vWt��s �`��t����x���!���ǫ9P
�
�n�Ah&]�~
����`@��z����`����E^�"���C
B���)$ʤ��X!w9�U*
�	�;p'�k4�&_�oʼ��!���
,�
c
�3�g�@2����
+b�W��r
�]����f�:�����/	\�X�@q!��_�k�J����A�1���A/�1��?T.j��t����>*�W�;K��u���4
"]��\�
of��,������Xx³���"Z>B*96��{
�˺� �~�q_��t�My[�,�4[,�b�
�J�jg&jG
+�����D��_�5�'�-�
�;+n���#U�ڔۘ �t3c�����d4�SP���

����
�p�(��.�Y����gN�
sZ��ɐ�B8&�'ϲ����pl��g6��O{��
I�\�\�P	�[��W�F��B
%���
.V��:4�(O�E7@������)o��h�)z���-M��h萘��#q!~���EČ�����YuA�@�����
܃˞Q
+�ǥ�+���䱜�f��'��,h�<U�]��eLa�&1V��l�1��\U�C3J'Ɩ�6os���M���A�
����
C�����P�V�V����c�}�	0LLH�$�!��rh�<�\�e��*a��%���CSĭ��CK$�l �
Q_V�B��U��6�eE�ƞ������I}���m3����n־	

X���s�!VR%&��Jp�ٷ3�-�#��Ԅ�)|v�	��\�{{)A�fL�gZwW���X��f�$�2M�e��x����8�)��_
��9�vN�ع|{%%d>($�ޑ���L���<8u�%zt�{t��
�+M��cƙK���
����㖱���췇hF��T
������T|+"ze5�a���2H�2K�}lz���R?f>e��u�s�����h�`�y������V�R�K�\0�E���leH嚸7.&~}|���A��]�?����7D��gI�,�˹8ZBR1�4�*x�s�sG�,z��I�:�
�����v"OMd��Yo�A��-:_��}]X@\��������g'H$�վ�5s��(ڈpnx�
k�c5�ĴQ
+b����.�����MW���]�n���64����p�_�|�l��G�]�S���G�y��CT�:�2$��01����{�K��F��~
��u���o� PG�H_�@HH�
$�)�P�sZ�4SJ��+��h9�+���u~���<�L�F�W͝��j
)�Y3�d�|��X�r�7]��5���/�U���ד.�-�Ԏ���o�{	��U�y=� ��3,�O��ϱ|����=��.*H�(���|���.1�h�2a���i��㰙����
S��ɼ���u6��:��1����7u�)R�~�j�E9���q�39��na=6xN�FӁ
���6j
�~�I
z@�FMj��8�>1>��k
+��Ÿ#��-DNo�CN
ezB�΃���Է
��Æ>�p}�}�W�
�3�6���r���
�Kkr�-�ҖǠ6t.:�F4�t�h|	�G 2���d��B��7�Sn��#��|�
]j�Q��4�G�ĩ�z��
�0J�6�P�ۣh-9
�t��|O<�N����u��5H�.���3�ݾ*�pR���? n��u�n�K��ȳ��{gO7�%wL9�D��>�T�\
+pq�L��DƄt��p�% �
��L3γ�#��o�[�,�D��%p٘��K�a���y���}G�
S>ן~y�Q�5�S��ah�
��2j�)R�����Bm3��q���
&W�m)�q0���Ų(�g--R�:�p�B��*��
��
��X˄���Cf!���5R�e�K�%_�����/:�a<�
 �Y\(���Su����5q���aY��yElz�T;��z87�IQ6���δ=�0nF���H at C�a�i�1|Nd� 2�D��	��wfL3�~
��!�ǁq�����+��"�G�}��x�{W^�9Ce�*��>
o�`�f?W��`n��v> �}^�a-;s1�"|*�|"�[���O�d��6�����w���>L��Ӏ{Q�@���
0'�	c������bg&�q��.�
pV�������E�_R4�橤�B<�GL3�Qx�o�b �߳�^���Yʠ�t�����yO�<������TP��zH
o����xn�����4Æl⯰�(u��n�F)�	�@Z�����`jp���!��%���
dW�Jˡ�1�N3!y��J��eཷŗcτ�����0B+�}he��
m
�
Ϯ�
�JV\;��g�'�O}Ur�uK9{�#� �(;�������!�Q����,Q6J. �W�~W��"�atG]PI0�F���O�>l��_o<���?d�"�2���8=��!����Lz�-�7t��U
+endstream
+endobj
+1631 0 obj <<
+/Type /Page
+/Contents 1632 0 R
+/Resources 1630 0 R
+/MediaBox [0 0 612 792]
+/Parent 1636 0 R
+/Annots [ 1628 0 R 1629 0 R ]
+>> endobj
+1628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.334 528.707 444.056 540.662]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [479.58 418.123 494.303 430.078]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1633 0 obj <<
+/D [1631 0 R /XYZ 86.4 726.045 null]
+>> endobj
+314 0 obj <<
+/D [1631 0 R /XYZ 86.4 650.487 null]
+>> endobj
+1634 0 obj <<
+/D [1631 0 R /XYZ 86.4 596.964 null]
+>> endobj
+318 0 obj <<
+/D [1631 0 R /XYZ 86.4 275.839 null]
+>> endobj
+1635 0 obj <<
+/D [1631 0 R /XYZ 86.4 222.316 null]
+>> endobj
+1630 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F38 509 0 R /F11 691 0 R /F16 453 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1639 0 obj <<
+/Length 896       
+/Filter /FlateDecode
+>>
+stream
+xڭVKs�6��W�Hv*o�ӓ;yL3u�itsr�EH�
�����C�
q��'�X|��
�F������z��p��B�2
+
�Y��hѠۂRS���7�/9+
6�ƭ�97��j{۹�/細q�ύ�uǟ|�0
�a.�k_V4Ck����ٛ���0�|��F(���n����{D0�
�'�m��f0jѧ��I��iP�4&UQL��1�e��s ��⡔����<�	��KB��}X~�V
9��v�Y���*ZM��C�y6�.���}����l��+n�
�FgsJ)fZ#`W"����)�ŵ����hY4�nۑgZ,�~�]\^
nfgH	�3�����1@}�t���[.��gB��$�`�W�
��:���/�6�҃�֦zN#'�3
�ȁ�*�0��s.��a�Tr4t���4B�'�
æ��2�מ�8����5 +�+i"���TN���CN��R����D�_0����W ø
�s^�2XI
+0$�R?�P ��`�Q
E����o'�L�ͩ����9�PGI�7C7��~��"�em�%*?a�����&���Pc�.�ԮH�qq�
|��
{P�6
�������܉ǻ�N
6���!>��@I�yխ��
 ��)%�k��%���(S@��\�D�BRq@�~JPL��@PY牁"%�M�O�y9�T
�-�
ٶ)+�
.
��r��$�M�)���(蝹њ�h!?�8$
+�	�ח��P��p�i�� lR
%��}N�O�(Hz;�a����jhM�%I�����v>��C��/����3}s�
�
$��4�⪄�k�P|������:.�:׎�p�����]|Imz��~�km���.
b����|a�|�^���>7i��a�;h�[�D���I�g�KP�_Mtk�
+endstream
+endobj
+1638 0 obj <<
+/Type /Page
+/Contents 1639 0 R
+/Resources 1637 0 R
+/MediaBox [0 0 612 792]
+/Parent 1636 0 R
+>> endobj
+1640 0 obj <<
+/D [1638 0 R /XYZ 86.4 726.045 null]
+>> endobj
+322 0 obj <<
+/D [1638 0 R /XYZ 86.4 673.949 null]
+>> endobj
+1641 0 obj <<
+/D [1638 0 R /XYZ 86.4 620.531 null]
+>> endobj
+1637 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F38 509 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1649 0 obj <<
+/Length 2358      
+/Filter /FlateDecode
+>>
+stream
+xڽY[s�6~���#5� ��Ӧ�d�M;��}J� K��
%*$�K��
H�-�3I
lB����p w
�xy%�����/t�H�Ȳ�.�oy&�"S��f����m���w�Y���I�|w�
�1��N��X�B�J�a_�?���W�.��˛����*�]a;\���<���=�SI�
;�ֵ�����������
Ӓ/
+Qdi)�J�2��3.�y�ݗ-����%��v�T�@���|Z�yx�&�림Y�Ʈ�g �-.E&p8��k��	�O�:�
�vmO����[ c
+H�=+h
6a3��*;�Q'
(G2��a�)}՞
�(ኢ�����9��?ݗ,
R�J煰�.VJ����	T��-~�9rI�!G.�J�2��8ѷ<�m �ν_� �/�M�]h���	S���mC�e�d�,	%t7Ӊ�z�?�nݕu���x̟В"�3�+�02}\z�~�D"5)['m���w����u"H�ʈ˜8?Z��} r��G�h�l��
*�V�VJ�T�'��
+Y
\E��5w~W���$Y��P�M�u�eU��5K�67�1ֈ̹~{�͂�ΐ������hoPܝm.O�{r�{-�hả�7e�`�ƨ�
�jK����Z���}S�ң[��ۺ�F>
���b:��hG�?��0p����Q� �2�g�d�i<z`��3jC�� 8��wM�&��
������6<��d.t1R�/��O�PV��o���IG��4i׾
+��=��E��}%d3�-��W�)��o�qߏ�K��a���JXs��$ P�
,z�8�
&�N�m������(
bK1�l|�ㄮ9��C�>�Yܴ���緃�ϙ��O�%s��H,�_Oy#������+�rw��'��y�Q,2G�m"� IT��d&�1
���I�S*w��j��
����T	��nvm8��N�Ժ�t�[�fS�
�ȑ3l�G�s|�M�ζ&ۆ�>�j��a]���[�̛�pw�?♃��~$�/q)��ŀ~������8R�$"��H��U�|�ȶ���c�i<
�&���X�:��WS����=�<�8Q�
�ӹC)j�F�t�Q��ߤ9������s��	DQ�"�uGH�kg
Z�)��^�4~�E�C�6�C� �!� ����o5�9��
MR�@n&�Xm@
5���ͳi�<�|��+?h�F�g�$�B3JNC'PP��#�ݨ��K�%���M��[��[�����xG�!�
����a.%�6��M����lׇ���vD���r��ἰ�2 at 0�@^?���H�S$o���'�j���A鸆4��ü�[OQ
o��G��v<Rv���$M�P [...]
+����t�;���D��
I\$w�M�
�
;j�8�BS:N����
k�(yI
铵�rNh ��H�����s��OA�!�T��ah9�Gp����0�/�P��2�4�Ⱦqh�w�fQ&�̓������{1��F�gnD�����?����Ӂx�c9��fZ8i�r���v	 z^Np�t�w�Ӌ*|.6
K
�7tO�4�,�ofQ7�I)a
+��$��\���M�o�U�e�Ge�J�omR
�ԇ9�2�C�w���
���__O-��Dq#2 s� �k!xTZ���k}[c�L
�4��\L�pb\�
1��UEe&do�H*���6����*~�1�CT�hI��iT7�H���+�+��!�]������\m�)_����1�LH.�1�
����>\��ڔu�j�J���|��^�}'�e ���h�v���[�ś���eb��3|�(`'��,�����9�}#S���K* J�+�]��|�U GE,��l�3[63R��}B�PL:$���{���5�'�ܘ��
�Y��
�w��
�ݮ�ʦ���|X��Dڣ����"S�T�����T��
�j��� Z|����l�]�3cU���!�D�T9f瓊��OG��F��GЁ�H��
NA�Ҫq�m_��?��:7wU��:�Xa
+��t��pr��2{�Lw��N2})`I��}�n��_����R�ċ#�9/�:;�_O*�
+K��
�Q+飬�����0���ĕB���i�|�
d�=	�X�/�7��M�ДK��ʢ(f��yzr��yM��"a�<6ۭo��fx�����4%�fۗ�ᐤ-wk����
��؀#��*��
_��55O���2|�Wl��6(�8�a�B|����]���7	�`�����C"��S���
�!�� �����_HL�X��
+endstream
+endobj
+1648 0 obj <<
+/Type /Page
+/Contents 1649 0 R
+/Resources 1647 0 R
+/MediaBox [0 0 612 792]
+/Parent 1636 0 R
+/Annots [ 1642 0 R 1643 0 R 1644 0 R 1645 0 R 1646 0 R ]
+>> endobj
+1642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [434.163 261.844 441.137 270.257]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+1643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [445.232 261.844 457.188 270.257]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+1644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [516.855 242.069 523.829 250.482]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+1645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [110.31 230.114 122.265 238.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+1646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [126.361 230.114 138.316 238.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+1650 0 obj <<
+/D [1648 0 R /XYZ 86.4 726.045 null]
+>> endobj
+326 0 obj <<
+/D [1648 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1647 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F16 453 0 R /F49 636 0 R /F14 694 0 R /F48 609 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1653 0 obj <<
+/Length 2639      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o�8~ϯ0�/�`͊wj��6�nm�ۤ� ���"3������`���CR�d˱�x�4/	-Q�<����F������?q5JH��]ߎ�"b�YB�����׈�x<�B

��
[��x�
�>�"z�/lZ��We�y�Yd��7�|	-�
�����/��.�/^���v������3
+3�G���$F�Q6?���x4�7?�b�3����G�'�A�]���,�jf�S	%T+���z���r�3�<�-+ߘمS
��tU�
=V�MWv���|�,B����13�C� ]���2��e���rn�ŘFŃ�5�uV�7�	ӑ��
���f�d��@�	�$�A�/8��oxd�.C�> �ߧ+�juo|�K^�m��x��k�0�E�]x������*E�����lV.f9��U�
+�5���9�Y9Ga7�‹�*'�r(�s���
�>@!���O���J%q�k�NZԾc7,�$���0z�8i
�;p3*�
U$
i�!��V�2�1BU۩h����5�O�w܌� \(�_N�Dk=��"B�M!A)��5ړk�CB�Ƽ�Љf���?�'2������Կ��A�����݉�%��q�t%��T.���nY�u������AcHR�ڧ�΀��4}�l�̏�Z	�/a^hԀ70v
:���,m2
��0�w�"�
1I2
2=/C���F��������n�\�
���0�Od�-
!� =  ��� t����uI� �Hý
p����;+�j&uoә
1�q.GO��YR�����?�l�k3�b��e�~Ӽ�Y�������l�fG�B�J�c�Ǐ���BC�O*�)ѱyl��BF6k�[czCS��Q����9����d�����E�ؘ�����&
��*0!�U�|
Ҁ+�6�9��$Z�o��L���$� QR
+?��ai맩��H�q���0��D_ ��
+PX|�	���J�BΌKŞ@n�;��>H���'��ju��2����� ��D&�� ������G�Li�$��&�/����
+Úp��!z`�}0{�
+-��Tp`�=�I .�b�p�D_� 
+L�dN�	x޶�=����6Cb�.�7H�v
&�.o�v��m���� ���
s��L`KJ����<���;F�(��w'<'P����
+�O[c!&a���[[(��O�
�A�w�;'Р�;=
��9�
��)��y2�9
˰
+(O�> *�����bYW�e��38�R�B�L O�W`?��Q��<������h��OJ� �w�2"l,+��Bj�ړ!|�b\�a�����+�@
��w>�E	" ��2�@@F��ϣ��ru*%��Ţ�x���#g�Re
�y,�X�������a�8N8d����
��q�Ң�c��hB��G�6��i�3�����
$���=2�Z�kȩ���i��|2�D0��k����	���#g��v_NLJ��
�]�q��:0�����H�8�.�IZ
s9�����Ie���!p$,\Cf����F3�a�~?�
+w�`k_&e�<�/
+��`]��/�Y������ďJl
-�mfos��d�)������ I��Zj\���
�>�~7
X ^�K�`\�Ī?�??N�\\]|�����<��g'@ �Ob&��p
quq��Q3={��J�a[I=�J���&�@
z�iL��^�Oχ��82�����#Yj�V^p�D�tڋ�Z.5�" *w���S�^U	�ݜ�Ը
����ڜ�
�_��չ��T�Z�
P:聒�
+���j:D
�P�b�$�5A��|;��~�x�;.@;ȓ'W�R���}����Hڢ�
���|��5�t��0��n��<�
�~斂�����9�#�rvjT���6p�g�ڳ��57{�2�ο;��Gt����k
��NZ�qS��M��@�փ�#�՞M���o
$��
��\`1�[���͇˫��; �&}�ϝ�e�Y�Mjy̾.�G�
�=
g�v*	�$1M�jo]�6;a��a�����\M@�pF6�
�8��
��
�2<������7l��]I�~9j�:V	[
�U�l/mx-
�#�̚�%[�km��czS*�?>�RFM���v�-�H��P��
�H�mGx?�;;�'��G6�����oO����
�}�x����Ҭ
�*��Ş�	�����7���e������s.�KȪYHdXҌ�b�}�s�
W�ͦ��Y!�/ñA�4c�i��ls�pS�U�ߕ��w�
I���
 �Bhe�ܶs�͒57b`Y7��y��{3��aw[Jw
��ߧ��{5/
+%���
�������n�u��]P�E�h���l��%%1=��
K�j��f�y��60l	�DQԈ���&qk D04[��y�����Og��k
:իj���U�x���MgGTK�Kw_�+ H�
�kb���Ŝ<]�u7|⯻����v.���v�`l�>1tɌ"�l��@2m��VCn�y^<���6�z��p�'U����T��ѷ��~��D��nm
�E�r^��+Jtvi��?���ˡ
�
�Y>?V�|}t��؞��{����u�a���ce��ՠ����_��뮋��y�

@��{*�D
+endstream
+endobj
+1652 0 obj <<
+/Type /Page
+/Contents 1653 0 R
+/Resources 1651 0 R
+/MediaBox [0 0 612 792]
+/Parent 1636 0 R
+>> endobj
+1654 0 obj <<
+/D [1652 0 R /XYZ 86.4 726.045 null]
+>> endobj
+330 0 obj <<
+/D [1652 0 R /XYZ 86.4 650.819 null]
+>> endobj
+334 0 obj <<
+/D [1652 0 R /XYZ 86.4 244.583 null]
+>> endobj
+1651 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F49 636 0 R /F38 509 0 R /F14 694 0 R /F48 609 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1659 0 obj <<
+/Length 3102      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s��~ׯ�#Y����&�q�v&�X������$�$���e����gq%�R��/�r�=����'�>����˳��);q�Yi'�7��2=��cV���rr5����U���w)��ͯhf��UN��U���ln���y{��-�M6Kz���ofs�
L
+)f�.9{{y��� "�DT�k;Y�Ϯ>����2�L�x��[O�rL�h5�p��3�>D�?�u������`� r���p �w�}pe�q,�_X��mx�����z�/c�s\:�K�@N�t�~�
L��hZ�οq���rK��7=Y�ٖ�nQn$EX-���M�Z�3��&Ĕ˥�^�eZ����
��c��uR�<�dn#Ҙ̅`�yj�Ra�����a�b��
ެ��a�}FiqU=�I�%��ɑ@��װA4M����
��yŨ���˹���@��,���-g�}H+\���mjdĸs5�SYfu}�/����|OQ���
+1�^p����Pq��^G;;
+kXd�J����1�QG5u�q��+F�%x�b)�a�Yѻ�G�$��L�0��ڻ�����Ĵ�����Z��D;t(��H1��)Z�vפ�=R�j��
��V&J�W�l=�CҸ
1�4Yf�[�bx�-�7t�4�i KNՖQm
+`�ۛi&uK��
���k��Wäj)�u1�EJw��L�d�%���G�mP@%�FO˜�&���[T�|�
��"@]����:pr
��Շ+�dU>=
�6LؚD�"K��_�rCJ�"�S��v(�D�q�t1h�涼�1j(^����_Џ��H<��_o�C���
�
��X
+`�֞���0�첢��z�{����l|��t�Z}?��h6��
.
��]�߁���q�}������=DC�'�z�gB�s�gB�$��u�2��1�3�9�q��U�4`���E
8��������3঳ �~(�k�1�'(8ћ,��>�P� ���8=�� &�/E���?d�6�m��z�w�x�������W٧q
�!�Ң���m�PY1��0��n�
����ޡ7h�e'�#�e�I����� ��������v�
8ے�t�Me����u\����ǂu��Ms�Ǿ�Š���٣��e�;
E!����E3�}s�C�*~Qz�#��S��_�1��@����g�h
�w���$!��6 
�p �,wǁCDn
�Z'������ � uZ�#$�5���*!3/=뎠��氇��a���U6�
s�ɝ�wM�.̡�
T��5�b?}��j2�^�.\8l�v�vB!�m%�’xr�0�I;D�
̊J
��]ؐ�óIx�����1��|
~AqQ%��s�!���Og�+�
�d��O���W	-�̒�"Y��_2�EW��0Z����2-VO>��"
+*�)Rz����Y>�m�~x
%��>�+�q���йQ���!��e/<��Q-�΄���f�D#�3?��q�!�u��_��,H���T�V�
-Y�g+ıR�8�T���'T*p!U}Io��zi+$1�B,��)T���
+^��	0�V#@�q?
u�Oq�%�
+Eo֨ӻ1e��D�Ǡ��C�/w��f����-˻�É� ��U��z7�FAlQ������6��ӑ;�s4��x��$7L��jL#	�/j���p_/!َ�N����IB�+��>p;�1X��Ԍ��	W
�;�9._����_c�����q�"�E�jm0��+�o��P<*����
uй;Z����k$��,�Nc۸���c1<��� � ��h<�T�S���}Ή���#M,�E��6
�����6)�y,��|�:��|�#9�Ew���dr�W���L=�UDӍ���
Vk
�ft%b�6��%�,���VIx�v�{�i�LQ��{
x7v�!=�+w>A�<��$Z���xV��y��R
���z�ݶ'��|���1���Qg\)Sw��|5Tj Cr}��[������XɎʟ2�-��!)�,Y�?�gnu��U��v�����d�5��ÐR/�"c�Q���018�?�T�I�6:�]��7
�һlkkH
3�W꺽V�IYu5)����
&������4����1��͋2�a�2Uu�tNd#��]X��ot�N �sU��7�b���].��w�B�b��l[
#].����.�7d�tm|�1���4J�$��)�:��1N1
��1�Ty��򙶴�;
Ox�P�EW�Q���Q�3��!�l�*|=�cZ��i�I��,�0q&�'`T�0
��u^<�bn�,,z�:��U��T�����;_��a#���y-2�YK��E��>U!xu��Z��D�j��z�CЄ[Y�8]��Hm>T����m���p�i
t�xgc [...]
*]'�_��mvSC��w} ��Qũ@*C T�pO؁�U��	l	��8ңQ8PY		F�
�c�#�RZ�����k$�սT��s�ۘ
߄��o��s���hcN����Bl`#��F��Zj�c�s���^�	&|�F��[��PU���-�ѫ�r\�.
�#�
+tbH�Tn��*J�

+��^�S�����I�"�>�k��
�y�2�R={S��!��M�j�
 Ue���z����f�����p�4�Gw� l�5�!k�,�q}P��Z,�m�
9J�Z���
�t���!j�nk
��#�GtK5����#R����#�`�G1� ڐ��>�
�1z��|
+�;�+EQtb��<�R�}j���nXlK�Ca�8�H�++�S�@#���6I�ɠ�J
�Т�Q#"�N56ӟ7��Q��޲���E
KP��i�
�O��Y=�
�/�2V��$��&�Fv�2�Uj�ĭ�AKL��E��5�R	
�⍟oG�l��ɶH�e1��n �4
+X���PY
+�ov�����
$�O�XWX�6.{n�*�߿*-p�.~v����Y1�C���^�'(�lz�����I�� e��j�����h���[���m�t
2�� 
+��n�u?�l�$W/WY��4_�%Q*e��_�N����I�
p�s��G|��k;n���y ���7
+endstream
+endobj
+1658 0 obj <<
+/Type /Page
+/Contents 1659 0 R
+/Resources 1657 0 R
+/MediaBox [0 0 612 792]
+/Parent 1636 0 R
+/Annots [ 1655 0 R ]
+>> endobj
+1655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.087 452.478 464.81 464.433]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.1) >>
+>> endobj
+1660 0 obj <<
+/D [1658 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1657 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F14 694 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1663 0 obj <<
+/Length 832       
+/Filter /FlateDecode
+>>
+stream
+xڍUKs�0��W�(�Ԫޖ�D)-0Й�pj9�����������NH
夕v�i��'-EkD�et��N/�F�4�h�BF�R�-Z,�-f��	����h�.��D����5$�T6E��ś��
��0�����m��:��o*�������7�n�o��ѻE�#b�El�D#5z���o-��Q"2��.�FRd��U���:��f�8�1)�P�-؏�m��}�9�]a��C��y
�ד+���
���
Rɩ&LKO�E��t��4ņ�Wq���e����/�+?�!��._�ɪ���>o����u>t����
����^���QD�
+���W��|�q�a�a�E �T��E7)8�F��o��
Ɍ�e���@����$�r
�
+r/�1��)�R>�(���gĸ�X����H�
�%pL��wO4�{p4�����ԋ,�u���rx�����^rl�s���y�����1�V����\�
T�Ϥ�RJMǓ��
%��t��
�dD�
J5�B!��'6E����yʟ.��9�� t%S�N�p����m�gSUSDi�gU
�jS7�oQ�,��*F�?u��
%�{� �X�7�M�>��7p�������C;+���$�ۓ0��Q�l�a�T/{�cH��*:����鑔��7�)~�}J�]*�%N� ]TE
�0K����gm[��O��P�eѴC1'2i��ve�W,O�ln��Miʜ��k�g�f��N�@��]j3x��am�GG�56��v�s٬����8 at q=��cק�; Z^s?
v�~�
��_j[�D����l�����n��{�`���,'���+�7t@t���V}�g�Z�o��
+endstream
+endobj
+1662 0 obj <<
+/Type /Page
+/Contents 1663 0 R
+/Resources 1661 0 R
+/MediaBox [0 0 612 792]
+/Parent 1636 0 R
+>> endobj
+1656 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bandmat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1665 0 R
+/BBox [0 0 473 537]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1666 0 R
+>>/Font << /R8 1667 0 R>>
+>>
+/Length 1668 0 R
+/Filter /FlateDecode
+>>
+stream
+x��Z�n
���W�.�^������@��D�
I
����F�0����U��]5�f�!%��w��3��3�O�9�������}�2��l��m��_���l��S����O&�>�t���R Jw� �P�
+Q �\�C�Eq :致P��o���8c�8ca� 	�� 8�B8�ę�ƙ
�I�DA���8�8��*�I�$�4'�b��i��3N�Nt��N�Zg��W����TVEze�G<*�rk4��0�(M�䀡G
+C�'�j���.���l�xD8ɮ@�/ae����2�#��xe�\�����X�L�Ger\��W��.L�g<Ϝb21��R��qs��S˩�5�C3���l���`�ZO��)�|�bc���
����]u�5��H��\z]�!����S'޻��o�y@P�[E���M��.��A�ԮV�ApFu��;���`8	�H�x%ϴA��E^Dm�����5�ED����I��H�j�Q�0�E̼�H;;��."�+V��l ((�
,�;�Ti���r��u�n+f�E׶�p����ĩ'��J�F2⡺(��<$���(�"ϼ !&2�v�i-L5�1ҪJ	p�
��w[���Ƒ8�CM�bAN�pb][h����(�"	ϼ�Y+ײ�z-�2�2�b-����H%�εl�^��ϵL�X��� �Z�TWlFϳA��Yt�Iс�at����p"ș��,:p��\���.���C*��^wR�L 
+{.��B1���f��ic&���]�f���
�:
3T�4����l����O�:��y�ux�~�B�B@�Ck0��%S|&���<1E%R�Q����Lʬ��f�����.7���ø��
�7�ۅ���
�|H$?�\ nD�4�
\@KN��F��鈏s�ɜ�
�
�-A �Yg��>҈,gj�2O�Q�b�e��,���
am���
?U��d��Q�W���M�d�;��A�Z�������5$��!��

�vY;��
+Ӡ�n�
{G�(��!V����hT��ULGtl����U��5�fOi��e+� $� ]t3n0MN��t�+ɶT��Ȧ��p��7i�]>j��
���]_���B|�!(|�� ]L
� /�
r�ZM��)��.4�jH����ɦBqv�q4u ����
�T�E0B��LQ��h�����R�ME��� t15Ы-��Yn�p�
����{ƴ�'���iu�V!;�<
�-*V2Wm5++T�����Š��Kk�+k^�u�;�:�9whs��VfW�֯0[�Œw�K�Ya��n��J_Q�M��lm�� �X�'��F�����k�;H��s��
ĉ~�b
����s冰���U��׸]�y�K(
+���������c��N����p~��

��"X�_�dY�`�`��f9U5.a����K3�%�������̫�,���fNKbf�K��
��(Ғ�5QK��4
��������fI������۷/�t��}��m	›�j����v��������a���o��������{�~{�S�y�~{}����p}�j�W��}}w�����
�\�Y7փ�[�;�~}c�sW�&���4d[ߞ�[ߘ
5_��P�qq�c�ط�� �
�`��/.b~�A�5 %����n�ߜǑRߏ��������%�m��zh|a��Oh��8�����߽��o����9�c޺�}4��{�uS��0�m|���m�f����ڱ���B�����B{�p�����+tG)3�+��e�5f�O\�I�Ѱ��C�L����xP�,��$��Ǝ‰�WY�8Ӏ�SH��P,'��]8�V�$Npt(I��wr���d'��jړa�A8�p8�+���4��1� 	��ᝠ�j��|�0�t�k��5N�'H'9 �te�4E�4�q�$p���/'����a��n�����pZ˫$��
 �SHqsY�W����@8�ѡ�Ud�Z�O���4iog-�32� I��i甮L���X��L;Hgf�9e����a҇�� _���5�D��Q��"��;ؙBJ��2M.
��

%��B��@�k�硧sNg	n�,>+��{���I��)�7q��qF˵�U8�AP��I��t>m�b:ˤ�M{�L;Hgf�G
+)��z��ګ��ګ��uu>m�c:�_���p�X�K4Hgw��d�6eN���	f�k�4qvo�6E�x:�8L1��M�A���{�
�*�������ƙ,�JV�L���$pF���I��Y�z���A�$�2hW7ѹ��;�
3�Y��|�L�������'
�^��t
���P�k6e��?�V�����/�
+oU/�y�/~b`U
+endstream
+endobj
+1665 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160529-07'00')
+/ModDate (D:20151010160529-07'00')
+/Title (bandmat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1666 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1667 0 obj
+<<
+/BaseFont /QDOSHK#2BTimes-Roman
+/FontDescriptor 1669 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 0 333 333 0 564 250 564 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 667 0 0 0 0 0 0 0 0 0 0 889 722 0 0 0 0 0 0 0 0 0 0 0 0 333 0 333 0 0 0 444 0 0 500 444 0 0 0 278 278 0 278 778 500 0 500 0 0 389 278 500 0 0 0 500 444]
+/Encoding 1670 0 R
+/Subtype /Type1
+>>
+endobj
+1668 0 obj
+2333
+endobj
+1669 0 obj
+<<
+/Type /FontDescriptor
+/FontName /QDOSHK#2BTimes-Roman
+/FontBBox [ -70 -218 863 683]
+/Flags 4
+/Ascent 683
+/CapHeight 683
+/Descent -218
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/B/M/N/a/bracketleft/bracketright/comma/d/e/i/j/l/m/minus/n/one/p/parenleft/parenright/plus/s/space/t/u/y/z/zero)
+/FontFile3 1671 0 R
+>>
+endobj
+1670 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus]
+>>
+endobj
+1671 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2797
+>>
+stream
+x�m�yTSW
�_
�}P�-i�%Im뾠���.�S+RE@-�DHH� �IX�r!����"�"HQi�(��im�Z�E��N��i=��2ϙg���9��޻��~������{����`FKd���QrYr��}
��A-]@-c�ř�_�;Xˈ�&�BȄ�~-K��	F��EmO��g&���w���lI�X)\ut�ڵ�~��i۶m���F�{D9��L�
+�!O$�+d�L�k�pz�T*9)L���
arj�(շ,6Y*��H%
+�<O�*|�psh���mk�D���#|�0R�M!���J���� ���2w+r���ꃚ�H�$]*�Z�:a���b9�6�q��&b�Xb7Ol ���Fb�q�8HD
Ÿ�$��D ��x�x�&��	?BD�eh�8 ��/����^e��W�K�߃c���G�'+I������9����ޤʂ���ōP�{��f�;�&��6�R/�g����xE�6���B�� !��UWY_��#r�G��)�YPσٚ��
+R�j��9��.D�.VU����gўYf��[]��B�ˡ�`
�QF}\)�Cb7����� ���ąֺ>H^l��`��1ߤT7��*��I�?&^�uB�9�g��������� �Fج�

����2?z�Nz�w
��V�Ys��"���`+#9�*�
�o�
��z.�	8�>'�u*��j�t�8�[H����=4��m�»���w܇p�<���_��<��䥞Tf�S��C2^���?:����cs�L'l~=6q����e��&5��z����wfQ�\�젖q
;t@��n:.�x�h<TBrVh�p�i;-�Z�!�6���v�yH���z	=���5G�c_�kL����5;�=W�o_܁Ǐ�~<j��D�L�
j���|���ig
�
��-EKYFvyyaqEE)�@��XErkrsmYK�GŅ�=� A0�>�ߘ���
y�D�jU��:
+�
WI-u��N�����/o��o,��,mZ��GS�^��{{P����
���;w�k�j�ds?�1MR���.d�gC8P
��|��lgEe	������$�NJЖ����b�bXf)�,'9����g��'������>��6/[cʅ�S���,�<��M�7MEy�W����f�>�K#�s�kf�0֎
�Ox3��i���:<F� �f�ިȕ� ���^�iD_�z0QV��'H\�O�}>t����?:�
+�[�%�`��z^u�t5j�Z�
|�k��!�
T�
W�/0� �,��� N��u�I͇ �~W|�ғ����i�UTU�厊h';{[�]�̌�G�ᠦ(I�����t�1�8=6�29�縎V5�,�-u����5Jͅy9zya
$���Q�
�k#�h��K��Yj�à�4m�D��m(ԖV��
��n
PuI}�
��`��>j%�8EN�6k4��+U�e]�Ҡ�u��L�����Xh5U�������������7'����
�:Wo����������@�1����
+�)w��a��f���5��U�zx��誽�rݮ&�q�Y�V���,
�bev���� _ԫ�J�u��
��
�BR+�Ϳ˪�����0�W���f:V�5hxz��0���F��j��
�p ������N����W�t�B�K�I�@t1:�P�,=4q��IVPW��2H�љD}����t@�ӂK5���Ô"��@ԫ�=I�0
/���ق\���/8 �����lS&$â����]<
+����S����/�(#�j�s��U﬷
�hB*0\V_�.��
i� ���\J��;T�QX_t�89p���R�qQ�42_�~�2{dP�P7aGR���3�����ʧI4�.��ԝ�+<�r
���"���
��F��V�~�"���=��[{�hN�v�k
I�<�O�<h��{�^���7N%q��h���VguY
����&
+��p�q�O
Ln����	?#
*�qJ�\ު��nk��R�e
+h�8������O��
�P'���CJ�ᐚޙ*���8!�͡I�?
��lc~�I_��:h�kZ�mz��Na�&7��}���]�\��%λ�}B7���f/�[ͮ��Y��u��~�`��a��7�A���	? �A���Fdڧ�嫙Ʊl�17�"|���LWe�O3O;�	\�;RA��v�X���%� ������6�8 ɱV�^�x�h���R�A�E�o��
+��5�C�j�"L��h
.*:\LO��A�Uf54��<�P@��7�e
�᫯J:c`"���"�;��Ʃh���Pe���aL�1ф7��+A�u�Ğ-��C�Z��K#	�s'3����|@q'��.������F׍��Ϧ�
4�3
�
Rpg�-�����9�0�˽=�szh��7?C��s�
��(e"��ho�v���Nq���7kw���C�"R
!K
?L'�
��::��e�I
���N�6�[�����}N{|
��ma�>	
�a �
Y�Y.��Gr��A
+$��r��Ϧ�ģ�5��
�$}�����0
����g��(%|NKF�j��n�T�9IV;��%5�%E�S1����^�����Fi�k8-{�5h�[�To���\�?�
>�h�	�~b";�5&kN�a�,���{d(�r��
G�>F$D
I�
���!��,������(Q�uk�?Q*_@�9��e��ߢ	K��
�7CYzPWUk�Y��6'$[
�
���)���B}Y�/��`�E�$��{�X���{
<�S��)p!A�����
+endstream
+endobj
+1664 0 obj <<
+/D [1662 0 R /XYZ 86.4 726.045 null]
+>> endobj
+639 0 obj <<
+/D [1662 0 R /XYZ 139.066 218.119 null]
+>> endobj
+1661 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F11 691 0 R /F14 694 0 R >>
+/XObject << /Im6 1656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1674 0 obj <<
+/Length 3716      
+/Filter /FlateDecode
+>>
+stream
+x��[ے�}�W�xa�#'�R"9U.[���'���vּlfH����07C�j)U*O���@��8�} ��������߽��[eg9˭��w�3g��e2gV�ٻ���c��Z95wW҃�����P���WΗ�Uټ��6B�_�y����,C���z���Zr�B!�կ�{��݋����D۩aN��b���_�l�/��8S��}���3�r&�����/�hn&ˍ��(l.��l7
+&����f�j�(�f[C�����6���-����!����XE+���o�@m|v-
�
޼�4�]��|
�y��^��C(+V�u��gߔux�m�o�
vQ���n�1V�@0�y{�6���j��h�������U��-�?|�vw��.��ծڼ/T�Q��y����<��E�He��bWГ�7�z����2|��۲.7Psx��@�!��}��o��
�/ЀQ�
ͮI7�U��-���?Q��,�z�16���f�]+�.ޗl4,;�/��|��t�^z��/E����
+5�.盲\���jB��؅����[Q�}���M֚&qє��&�i�d
T�4P�������m�2��>���4�[�aR���|�I�V9��i�9��6�
��Z�&<D
��ovE��#ŧ߫"<��Bc���9�	�$s3�,s�<��	�A�
F�)eX�BSM�N��"rf\+��Xr!Y�u��Pw,��m�<�,Ϟ,y�!vum���t�3�`���a� :~i �-���b0m�2�����]�)'��v��ub�6Mu���
s�k��$��!�����j�k: b��C4���
����չ��ç�Ƅ
iD���V'�rӔ�zS�پ�:��~�m�x���@�(N�ʸR�G<a��/I�g:���P�%.g̉É��Z/_z�k
#Ư���i���\�C���F���3�˸�3�:�
�NZjߒ��Ǜ�����"�ܫ��*~jZ�
+_&��%��9�D��i���d3J���4�p~ᆿ����
��
B�����X i�҅��@��X j,Pu�M<���pOr�VI	��dv�sz����T7�3
|F~)f�+sf>�	 *�f�����- ���EV��p�'���(t7�È�P���4���[L.7�t<!��_�\>�l�ygRlJ�GvT�#5}�f4Ԑm[��������e���M/ݯ��^�W	/�G�z��z<%�bNe�lR��p�s1�3����P���)����srQ��)��$پ!v��]k����389	,�E�(�����n���'x9�X��:�|����
�,}S���L��L!�Ƞ��
�g��!(
_���@Y�u������cv�C��s;;�	'
��1��������N�'bMiN§b��3�)�3w>
�=�Oȕ�O�
��P/	T��>J�*��SH�3s��xSHб��HumUK��~��zR�Ƚ��"f:�\j��<
� [...]
TF)Y_I���׿�,�x>�ME0"Ϙ�'�� �$r�
h���T6V�}2KD�n�؆�EL���4
^vP�γ4�AO��:�[��?V�e�G���o��:<���6�r�# T�g�C
C=���Q��p��l�qi�� Ua~2�� �ԙ'��h@ �b�'�w,�`,�s���`���;������. ��H�$qv���8,��H␞��4��!�f��?W�&�3�r�ͮɷa�c��đΏ�#
U��e��QFx��)#�w���k�2��Z�b�){,:QqY�1�����1cDb��ѠRd�P�#�O1F.I��y�(͇
+"r!
I���i�r!�Fh�:���s����\�H\���}e$џ�MY�}2e$�r��@�hf q#�>#e$��R���9�
e�n���H!�. ��?3}f:[�Hid������2Xt&.�~�)�ɓ��z��_
	#��I�(��	#m䋩��nu"�Q�p
�*cX���Y�H�C��`5pnG��
wl�Ǐ��pu"Z*��؇����J���2��#�=7s�&�`��+=
+s���R
&���Ί>
GҤ
�H���w���-a��Up�"���h���>�E���'Xx����Sz~��������@��6rd$��S�2���L����뿭�}8joLz>���S����)E����Z��[ډ�q�X�pp�NO�q�]2�/�Д8�M>7�:�M�Mh�/�M*�	��&�ڔȠ����A層G"LP���2�$�1s�.2�h�v�NR�H�һE��-R�eU��n����	I0
+�vj&
���'q�h��2�� =�ٳ
��>�C0
�1[A��g�b�4ƃS�=cJdg<�����}-πc�ߥ����%�r޳�S~��j'zG+]�8fN�	-l�<�dI�������K@�Eꐱ
�~N�
s�fj�N=�%E�ݓMI��#z4IJ����#��s:UX�>^tpo��á-��I$�. ���ѩ jk�X�R��}*u&}�ೀ�:σ3:G��x��j�6���q�ҩ�#�/đ��Xs���뇻�;��ת	Mt�)z��x�������.��Oյ���އSO	u�#wb�`��-ԑH(-�H�KMi>>Lw�)�%y������Q�|,Sh���*�a
�\�������4�
�R\�S�/wڲ*ɠ�S+2�D�R�W/F��?��ˉHu$W~�{$�43'�3s�3����LL�Y�
+�f�!:3���19��՜3����jdܹ6O�[���Kt�&�Qv��@�cRgc�yw�w����Kx
e���$O"�k��g� Z�F���G�^�sL�7ݽ��x] O
'v,9�I@��C����mW����vs��,"�D�ݐH�2s�X9��θH:ϕ鋸HI��9� "w�S��exo�*����5��)i5ݦ}��z����J�O��{lC�
��c�=P����\dqc��*�ljD��8�K,� N�4�ʧ�E��t��
��*��
,��c���۵���A���Ix��۫
��&^v�4�����;G]v;�:�
+P��e
�Dz�\�~��	��po.\
�����O���{ۏ�^=���Ŷ��&漛e���M�.���<��TH��ͮ�m"����4!%6t����(���)��Co������!I�����5/,��j�4��ړM;���'a��0I�	v�����"��m���yJNf�T��)TVtd�?d5u�@���?�2�Z����V�����.#��^����%��4j�J�U���3j�R���,�
%�WA����^�?A���E| ��o����Ⱥ$*�eܒ)���Z?�b��q
�}�����.��4�+�c{�
�g���{/���[�ފ:h�?��q�N�*nV��[ux�8Uc��=�
���³*�����5��j[���U�@C��
��\�0�U�7ey�^ߕŲ��F �]�=��
��eK�
xR��D��	%1r͸~�1
Jyᤈߍ����r�cw	F
��v�;�t�D3՟�
�2����,�n<������F
��v|J�ID����k�$�.
]����K�7
�m�w��͍"���֠fY�ض��
|sRts-C��S�>�ͮ�~L����C5���Z��O�����'�
SV=M�ѷ�0��hB�
+endstream
+endobj
+1673 0 obj <<
+/Type /Page
+/Contents 1674 0 R
+/Resources 1672 0 R
+/MediaBox [0 0 612 792]
+/Parent 1676 0 R
+>> endobj
+1675 0 obj <<
+/D [1673 0 R /XYZ 86.4 726.045 null]
+>> endobj
+338 0 obj <<
+/D [1673 0 R /XYZ 86.4 701.138 null]
+>> endobj
+342 0 obj <<
+/D [1673 0 R /XYZ 86.4 184.221 null]
+>> endobj
+1672 0 obj <<
+/Font << /F36 464 0 R /F38 509 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F14 694 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1679 0 obj <<
+/Length 2737      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw�6��W�ʳ`� 2����S��Ė|���-1�&�$�r�ק�pG/�&yys"	�`���
+U���
�^������+&giI��f9�%�3E5���n������p�Y�:��2Y�_��E�����*�Ӥt�����9�Q꟟�
�Ѩ���tԕ{)��
޾�|vu}���dz�7g_�H�g��D����|}���-���FLdz{;n=�L#
+w���ٻ3�W��+$��B�	b�Ϥ&�(��
&ʊм���{/�;调.��~��慧���8iY3���
�y����TE5���(q�
��!��^����#����I]f�ܜua�<��$_$�µ�z���h]e\*��lvA1��<@o�{`@��,��TfI����AD��V 0��yRg�a��Q�t��>�Q�Ø]�=�!
+i���WE~
_��BG A���8��۴��'�E�n���F߳ɾ��E���.$H�-B/ҼJ_��y�j*
LC��_���
@/4�FL�ɬ��YE
����A�c6
{����^؅B��a�7��vN���\�܃�wB	��uH���L��6[�͍�~����6�l{W���W�&��A������ p���z\�{��[����à8
?��i�:�9�[����Es��"�k��V�Ĩw�4h��
�L�6&g>U�k���Y�.�Uض*[�Q{
P"B���T8���ḼH��,v��£e��Ω��uQ�Kw�2�H�:[d�@�'���^�:�o���e T!�ƛުH^B'p�re:����
��`�?[,.�>�>�Oٳ|^�k�>���h6n{��l������ύ����� º)��׽6S�W�I����B\?8kϋ��D��F�bӓB�1��G
��,��k!�k��'��
�ETv�>�}6��n*��
Y�)���bO<0Y����[�2��E���x�	�h��uf�r�`�.{lx$��
z�z�O\l��f	��E�gv�6F{�-��
�Y��s
q�lF|�NF���m�������w��i�2
&�=
	»�>A� �
M��:����UZ��۫*4���[�S��LdUV��j�A���E����^��=��k����c�<�I����^��ɔ|��8�A�����2�
�-�
��<�U^>�5L�Y����pI��sA�0EtrQq�N����i���b�XG���7 �i�΋�f[{^{���(]r�����	D��V����V��k`�p���X���E�]`2��n
�
��*�S_�qF>Ml�'�
;�v��r�X��&����ck����N
�6E��ZD�1�X�v�m��;c|2H�xر0p��]����";���p
Ŭ����< W�;��6 
��O�w��%R��D{2�4�,
S& ��
z&oq{x�m>7�%��:Y��W
��p-97]�A:L��\HF��W��&���n�s��W�v>�/�-Ōj��u�u[�"Jn��[	�+���=�H���j<� ]J'�&�\?�M �)m����6F���ʍ�`K�Y5ަ��bBy��a��'9m?C�H�B�
�����4�F*�cd*i<��]c���2�
K\��
_MOK�i2Q�k��i ��v���0
�Π7P��}��%��{Ȗ�q;�V��
+����.}���ҌM�˝{.�/۴���<�!9v����[D,P��
�/�y�4L�M�=<ד��A9�Qb`f�dg3o?\]M��kڎA��G��m�HK�3X�u��J
�f�����w�p����*����u������i��
����X���� �����;)��i_�e
�*Ũ<�t�rn�>x ��(�VCAJ{<���)F�[C�;aH�t?�˩��`@��
��>B at C:�N>���c�)�_5���2-��:z�&g�pc�
+k
wAQ
+])��
H	�o��5�>�'�.z�5 ��8��t���?0|Kc�:��^ܵF���9,��~�#
��b�W�<Xr
�Hm�\ǭ����c�?,/;E^:�i"����T���(ĺq^���9���߀��Hu~6�
Ɖ�Lw
��Zňƥ���̄CY��$�c͆�kC���$da�h�t_؂ �m�Xm׹���H�M�#$�MΤ��0��(09�]��|�!}3�[H��R��>����5Gw�k������Ct
1��&��H�$>�Ĉ���n�Ŷ
+�Ʒ��e6���| �
+#w��@��|���Q5�G�O��
���s����k
�q����&� `�25sV��_�b�;V��c$D8�^
�u�SC�ET|Rp6̄���!X��s�|�?�X��~��}�A�#�$݀��
A�kw8l
��Ԑw+qдHW������$�
��E|����s�_c.�Ъ�o踉���2�$�qn����ԡx��
�6\��vӿt̓
ĔO.��#{�E��sp-c���u��ęv)�y�ە�
�ژ�6��w��aC�F�!>��x~�9�t`�@ ���;�K>`�a�ǰ��΃)p,�
�S�g9���.����P�
�vܖ�<�\ܖ�T�^-���6�1�};�sH�T��j�?(��f�pij�����
؆O�wg��7[��T���:~�߬�ov:�	�$B���{�/O������8p��q.���J
|�i�q��u�����_�#�l�.W�[��l���M�	j�qmӰ�t��^W�����5�ߙJ���|M	t����4��\_ޜ�"�
+endstream
+endobj
+1678 0 obj <<
+/Type /Page
+/Contents 1679 0 R
+/Resources 1677 0 R
+/MediaBox [0 0 612 792]
+/Parent 1676 0 R
+>> endobj
+1680 0 obj <<
+/D [1678 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1677 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1683 0 obj <<
+/Length 3234      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۶���Б��Q�$�t�!m�>w2m���Z�c�%R%�:�_�] $A
+��f�ͻH$.�ŷ��.HW�Vt���ww߼�*%i�����*��\i��X���f�1J�����
s����nmˮ�
mۼyuy��~x����4+7��w����S����?�~�xsw���I��U$��j����]m��O+JD���M��J��p�ڮn/�_P��/�Io1�2"�\�)#L�v=�S�����y+�%sL�M޴u�򺮳|	گYLT,���N��Î߼�e&�$���P�y��<jQ�\��@�%O���hB������5���g�-l
+HZgm�����IV���]����:
%�DDz�{�„'�fV��D	O�5�iT����8f��y�=k��N�x�k��I��戌��ɿ��3�p�����
#�D�=2�վ@h!
4��!ahp�w��z}�n<$��eX�x�vV����ϡ�O�J�7�+J�Y[--Uh���f���T
��pq

+8>��:ޮ�m>
C�q����q�('q����
A,�
���/�i��r��� q?v�1'���Vf�M�_�Y9j*��:
v&NRER�����fsmю����k/����=��
��$����N:!R��j�<�����.�;%��Ө���s�t���Ϣ&�$^D
J<F�S	\$Q�A]�-.�\������0����,(+�������Z$&D�z����]�"|��g`�:V~�����7w��"�<��/u���SZ��x��mUG��EL����'��,��E���O��|�4^��G�#	I�CS�����C�Yi��m�+ʬ-*��\�����pM�F�@��q6FѾ0�jA8A��t�*�̻!@���.Z��"Yi?4��z�O�xR.�Z=��=H+Z7��lð�pcS
x�d�S�w�m���婟�m�����v����[�\;
ŝ�
�U����\�"���g���J�o=q�b@��y����Zj
5��:o����ޣ������p�M�<s[
+�jl�Y^�b����>/��n�H��
�]�N*|$�O
e�2��
7��(O�!þ(�zgt�j��Ё'�(�2���`?�0�O
O�K†,n]Y�Ɋ˕�\t�jnL���MV���@ZD�����1C��~�>k��^����(K�c�Q|��܈Y��B�6��Ch�˧Sn.nO�?JU���ID�L��p�I��~ � x
cK�ѫW��
�8�L��(�����R������z�	��'�>^+J��F�:��4�e��!���+��+�)��U�;��'g�ߐ���>6�8�~�
�8�����da�A@�	�ö���z��e
ː$�?�R=?�u
'$ჸ_C���Ѻ3��=�ҦR�1�C�)��ݫ��"
+�#��.8:��]�8d�@e����v/�!���
R�;��
�
"��z�/U�ɶ�J� dzt
�bM�6m��SUv��6��[!�p�m}�E���&�bn��>S
��@���� ��@�;r�A��!;\ҲH���h��~�	��2+?
0?����`΄��6[� �O�����>	z��D�e�0,�>�����k�
��mt��
��O>IFa4`�	��W*ǤE��%�"Z]���m������5�&|
v�@/y
/�I$j�*��ۡG=l�b�-�
+:A�� �@ Ҿ�H4���'
T^��
t�Z�˾yWsS��rȁ5ar�ͅ�D�jA
Z�>"&��K�;y���
[�p����Z	�>�_b@����	���{s���P�s��$�v���]Ƣ_ �s�9����~y���� Alc3��K^W�a�+�m/��H��y�{
+�f;��D���z[&�^o�u�Z2	}��3K;͍{s6�`���r��>���
&?�e�z��
7׃	'p����
�a
+)`V>���M�ͱp��Y�;7D9�$���o�N�������}��/@�qװ�C]��UU��
ڴ�
��XXF�京�@�`T�D��B#��+ˌ����r�y�J�W����2��m���Cš�JOB�J�%r$!N]E;)�_�(s�8����]�A�X.�}d�9 iu�Hh9�����
�<?���rpfY�
v�� G�
��,��q1C4
/��A:�pxe�6B�����x�1�D��I��
|@c/��!���w�][Dž���;�Vݹ,^xi5�ں�†C��t�v�ƹY5y۵ۺ��=�
+=x�6��\7�~,�	5qW�rk9_nMS"��C���; <� ����xW����P�25
�Xal�
+��3B@���8C�)Ѳ#�Z�<�\᯿L+�b��U�g>`�{C�(ۮ���,��.�g����6o�^��&_c$�v6笚�K4�)�t��B.8�t�̕���$�'�LJ�8��R9X����TN�sxW����4�6�⢳?{Ӽ�v9�~{k��a�!�y!�I���	 d�Ixm�1��g�Ln]�p���
�
9|`,de�/��ϻ/op�I���x��r�c[b��;�w`}��2��\6 k
_o>���s�
���rX#��
������sX]<wB1��D(�H"�P�$B�Op5
۞�!��
�5p%,���h�z�8D�'6DM��"�I�5�w�����L(EY^(���cn�}��-���
��	ܻl~n��C��gϴ?
y���c����
+�t�4�\b�逢�"���Ҭ'���_}��~�����{����s�4��
�X�p(���2z��6@ �A0� ��S�t�c�h�h�L��|w ʼn�1��OB鉏
1�ʐ�
��]�}��db�ќOR��L���-]�F�=
�
�B�S��V�&�����rh���׸]
טBp�g`����
��ȔNϟ��r�m�Ӄ{K�0
�A\$�
��<S�q�]-��x�'�h�0U�'! 	[�
O���E�g��+���#'(���0�)�G����pF�
0�q��ʷfÞ݄�+��+���;�
�.�-��$�����j)I���+��6NM?
+��}�7ޗp=� Fu�X��ZR���<���$��P�q����־6�u�C�̠��~��
V�ƾT	����qg�z�ć�
+\v���C����S'��M��6/?Y>:�>`r�%O�?jMq�q���������bӕȲ�h�w�κ�

;��f���q�����]�
S+��
+endstream
+endobj
+1682 0 obj <<
+/Type /Page
+/Contents 1683 0 R
+/Resources 1681 0 R
+/MediaBox [0 0 612 792]
+/Parent 1676 0 R
+>> endobj
+1684 0 obj <<
+/D [1682 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1685 0 obj <<
+/D [1682 0 R /XYZ 86.4 452.387 null]
+>> endobj
+1686 0 obj <<
+/D [1682 0 R /XYZ 86.4 421.932 null]
+>> endobj
+1681 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R /F49 636 0 R /F11 691 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1689 0 obj <<
+/Length 2635      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[s۶~��У4c!ĕd;��i�L;iz;/��,�'����ן] �I��ħ�I ��|�-�h�0�&�.^�^���j��T15���$��I�R�8��.'�O)S�9���w�0��gs�����`CL�g�ѕ{xS�3Φ��*�h�iY��ڽ������|��f���/oo/��� Y4��$�$BM����&K�e�&�������|rs��"�'��'�bpBQ
���+w�?"[��^]�d�m����4Em~����O�
+<�SE�d��D2җ�����4���rw����S�コ
n at eJ�J�-:_ls�P�Y��T%4��r�h�*�匭n�*��>�����0CR������HF��e�D������
sۮ�,�e�5V$bݡ[�D%�xy�6�M�Ь��9,J�SJR)�[�᪒0��9�
�����@ǂJ�ll�U�*�]
�k�T�א�xBd�-�1�3F"�M�j��)h��f�`\�2

0۰�6��mЉ����X�
+�d��Ex���fp��2����>#�.�{�}D���e����F�KTBz'�P:�	`"���Q00�"R����Q����SZA�x
��T�7u,U����.��ﷹ�C$��p2�&)A˻�?]��q����zz3��Z���+�� ��4�b�!b�OgH�*�*�{��	K�
+Ȉ�H�-�>��s��n����l��A��cf��h�+\L�	��JWOnl7��/�F/
ك�Qn��1i�'s�X�ߛ~��#��������^>���ؖ& NJ
+�
+H
�\RH����p��DQ�����D$J�9E��g����HNHHL�3
I�
�\�

+
+CT��B��J�1�,�Ā7)��{�q�$�$��ң�qfp at u��$n�''"�r'��~�੩�	�G 2erz=K�t[,��,��b����� 4^_}x�Z��Θ�Ca0
������6��!	e��=��u�Y#!�O>k�FqϹl���b0�@�
+h48Р9v�%>��ڴ	��@��������e�_��EYU��0S,����(��� ��J
 �CܿB�Nm|cQ(G�3X��*	�,�KU	�]JFN
+���u��Ɗ�A�~�v?
��Kۡ��R���oV���Q��*�.i�o�ngc�U���s�3 =���k@�CKr��	&�8j
b
+�E�8�x�^P �	)�N�1ҩ}2�����ן]����)ڽ���.6�`��{itl季�j�w�Z�"
�@��o��6?
,^�
��qq�M��Ƨu���>�l�qoֈ��@�a������L ����̝�|4���bv ��yކ��"
F�
v��te�nV�Ǚ^���.�b:XIz�;�� 2�8
1�< ��N_fRN�d���ݯgP��
e� 
��W���U�����ړ��O4V�+������{�,{��R`���n�>,{� `�S���4e�*_N���*_[��%,JbP.�-�*ȼdu�86T|H�� J�s���@�r������!��#�C�)�Ǡ�O��\O
+�
\�ٽA�!����Qc�r�1��X4�(q!�>�
>A∏��hK~<Mx��X���1uS�O���}���ڬ˖�;ʈ��{���o�óN�H�9�O�������	J�3|����ɤ9~VD@��9�[�)�r!�K]y_(��fۜ)~�"J�����x����(3LzC
�� &D�)�jۧ���v]}��$Iz�brT��.�>��v�Y���fw�v;n\S6�o9B�b�w; :�{��:�
�iAOc�
`�0p�C�kޜs�ӎ�!���,��QC��04��I��<r��_��
�����44�4VG,

;KC�Y��G��oi�{6-wo��ڲ�X��<
�v
�{d���-w�O�)���l������w$#	���5ʈkv�!~#��]5��N��Ɯc
�[;
�n�=����.�����:\?I��"�N�/O��b�sIқ�3��# ���z�	nLs[��Te@�1���<���-^�\��ǹ���`I�_�TW���KS4Y�
�B�bQ��-�
p���9�_[W�p1:�]"�-`����f0�ƥ�U�
�0C�R/ ������3	ʢ��DkYCa��'<�@,��?�hP����%=���v��hC���jm
+/��vD�F�A:���g'�ƛ���A��F���j2{�����@��:��3Ip;�0���2�2����G����_T߅>(ʴ�c[�ːc�>S< �cQ�B%��
+�Q:-�5���w��
���#��zx���4P����.G�J
B'��

�|\�P��W�W!���R�G�� y��{6�����a�9�s�ѝ�(��k�!�ȸ�v�[�'�
&p���
|v\zۏ;{�%��a�r뇓�ʡ>�����M�Z��;�O[t�Y
p�$�m�[���G.0��s�H��t�!$�|؉��
��(B
0��|�!��3
�G<{�(T�hPR�����5���V:���{�l�vʀ*�l��i
�K��?���􂹌��N,G�=�>Џگ�a�ǔ�
L���{�i�
++�������g4�T�_;\Z*�%&���>RE��oo/�
�!0l
+endstream
+endobj
+1688 0 obj <<
+/Type /Page
+/Contents 1689 0 R
+/Resources 1687 0 R
+/MediaBox [0 0 612 792]
+/Parent 1676 0 R
+>> endobj
+1690 0 obj <<
+/D [1688 0 R /XYZ 86.4 726.045 null]
+>> endobj
+346 0 obj <<
+/D [1688 0 R /XYZ 86.4 564.762 null]
+>> endobj
+1687 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F38 509 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1693 0 obj <<
+/Length 2784      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs���W�(WI0� ��a�ڙ��7UY{N;{�)�f
%jIj�ίO7��R��7�T�b� 4����0]<,����_o/��	��H��^��/�&raxD�`����ץ%�r-�X�>�� �7�7�e[�/_n9�p�Ԓqs���O?�^�~�`�`�X�������b=?-(�]|u�
)"��)_�\��6Bҡ�L�e�!�BG�0����(�"��]��v�{�7x�~��v�e?�Gоf�Ј������ÁW�sZF$�q��b�]&q�V��e�k~a�K�z��Ž�l,!%ʨN��r��֚�l����CZV+0U(@`ZʼnU�gy�{�\+�`��t	��X����Z
+��P{��K���e}��r������ދV�ҷ�E�(���,+��b͍$6Ҡ|F"���i�nS?
�
և)��9�a�M�C��Uu�Qp)��8�L��{�
)Bm��|��>U
+���N)�j�4��(�}c��~H�ڿ$�!��1��i�sZj�Q�uV�B�
9���k��M�pn�����<ލB��Zz��� �Z��naOB�����޹��x�J��P����3�r�Ճ ^����( ohu��_o��۵���.)�(���[���ax
ot�o���D(v
�R�!>����B\��-�����g'J��A��4��0��ϑ:�L��T́\�
as��5@�� w� F
{ާ��+YG�_.�!@�`pE��~op/�oC��Q�1���Q�u�Ć1
E
��O�8o@��x�����'%��}�:ꕍ2���9U�|��x�\-U������J��T�5^Esbt����l0���]G�b����x�@�,C`w�l�1���,: �i[t|OJz�6+�Ad�}��xu�ڭ��l�H�#�H��$܂0a���%�G.i��@/#A"y!��a�3ǻ�Ź��,��s�R}�x�dp/y�C
+�3i���͜���B¨�ͼ-�(y�읩OF�Bm�̞B^�P�o���IM���
+C"�gD\KA���x0�eA�0�[V�m	{f˂�^է�N��k�'#�-�+ŽI�<��I׉N��bpJ �6_T'`	e�踧�o+�:�_P�i�a
E_9�6`P�G/���Lɾ۔�	_&W�D
�═�a���IwuV��:8�S�n
�X�8);�7��]�z{8����٧?`p��4:����(
z:cg
 R�������ݔ��ָ��&r6u�ݦ��.J�ݩ���b��Y�Q�_��6/��Y���.d}h��q���Z
�
�p���2W at Q
D�m�
d�Ů)F���ݎ���
�������g�5�&�bC7%<v�a
�~-3W�a����������PǙ!���8�B&���
���^�����<|vb��V�2N�z�܉�I�5�5�P-�4ԩ�{	��8�ת�ұ�����i<qG�ULC�G�L
1D�������ӛ9?��0:�~u7�%<w��=��Q9��
�ҳ
&{��f�L�m;�vi\z���N�������
?��Xԍ�K`D��KǠ.7zp�fhsD��Uu��ڋ��!� ��:�@{hG落�r(+���*�W0C���Ca��#��D��<4
�3&�l
&[bP�ݱ
����}_�?�=1`���=
֜�>�Nl��i�0�`����!�v�W~�;wr��J�VX��_���x|s�ǰ�J�S��
��љ�w�P� ����V��r
+(
���Ƒc?PÓ���Jh_�e
gbܨ�ٖV�i���
+j�UFyOO�V�aI�c_Œ?���4��I���z~A1����� 9���ttr�/�����ˣ�� �Q��
�]�V��(Q}]�:`�>��/J/h��|�.�6�ѿ�W
m�������h���t� �A�AFA���A&�
R+'>�E gQD����=��h���
����R	�
+� lQ���L�ӁQ�]5<��j��=l����	�9O����dq^�
�����D�
)�w�H��ˤ��Kl�O7�j�U�N���;?�Q���W6��8������_���3
R�˨�����]��W9V��M:�H=V��d8vP*Uu;�
<�am@���Օ�|��7e������.�0x<�w��uG��wy3��>�_�rshTVB��I��(�s�/���7ep9��O�p&.����
�%�d%p�W9D��qZ�f�����>v��K���C��F�rA����a*�%�w�gd:f)Ѵc�*d6�d9d)�I���
��ҍ�sł[�U灥��x�^}���(�j-k�牜�;����&p}
�G	q�
{�U��ˬ��1$u��N����i�
�5ѡ��@�^��I;@��d؇��
Q
+��U^*05�4￘���_�ƍh���`�\�i�2KR��cJ��L)&3��4ޤ��z��(�B8��������۩���=�y��#W�.���j���s�QV
�Q��eJ}j���%�1����U7-�
�|8~]G-�q�s�ܽ�uֆ�wt]#1�7� Wb�x

-	�h�x�%5<C�7\2����#�?�
+ilͬO>ǜq�����oa{�	
�S�;R �D#׼zaN
��
-��
+|)�!:�o!~D�)�P��ya4$����C1�D�  �Wj�  0��]P~�c� 
+��p���
x��O��}���>��hu���
=Uq(�t.�t��0v�^
��(�tï�2�	9ڀ^Ά
�'��7�~eo�:�CN�9��@r�p~�� ��������
+endstream
+endobj
+1692 0 obj <<
+/Type /Page
+/Contents 1693 0 R
+/Resources 1691 0 R
+/MediaBox [0 0 612 792]
+/Parent 1676 0 R
+>> endobj
+1694 0 obj <<
+/D [1692 0 R /XYZ 86.4 726.045 null]
+>> endobj
+350 0 obj <<
+/D [1692 0 R /XYZ 86.4 215.234 null]
+>> endobj
+1691 0 obj <<
+/Font << /F36 464 0 R /F14 694 0 R /F48 609 0 R /F8 465 0 R /F11 691 0 R /F38 509 0 R /F16 453 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1698 0 obj <<
+/Length 2639      
+/Filter /FlateDecode
+>>
+stream
+xڵZ�o�8�_a�^�b��>vq�4�eѸ���]
�q�S�T������
��%�q�M��Iq������h5�wG�̏~|��Q��HF���(��
�2e���r�y,d2�
+
k5~gK[g�d�5��X
�����YM�U�u��������Fr\��ąuC/���������?�
�̏�
	��Dˉa��F������V~
q��dt��݌�J��Q1�8����,ٽX�
+&�.��,�	LMd<���d\�WW~����mmokX�}

W�&/W�i��v�ο��������w}=cƵ͖N.0��
]X��ou�Mi$㩂;8
�M�̳���J8��ܕTlIH1��NBN2��&�JgQ�W��]���Z��$-�Y�W��~��h��(��@���;I
�M2ͣ�t�!���
�h*K���6[ �M�g+�@��%N�J��}�e�����Z� 
t����
M%g��頝x�>Kn�2�;7��_6`K
 /�xiQå�"�J�tV�dU��U-�&��/+�$LH
��}�l-h�N��28�D�n�mV��om�P~�
�&S�b� �眷7㫪(*�|GnS
+���a�v��I�^�7�¦Y�/��Yz I5����%��:���W9�f�9aDjX���aڤ�q!�&,���$
��x���/�O��J�Y
�/AW*�R�ݏ�'ǧ�f$ A��h(�T�p�"r��
�ظ8��;(�����ԧ���k��K�	�R��������ɛ���=�L^����hH9$���)`Ÿ�QS��Bju�q3+|H��i|,p�&V�F�=�d�j��զ\��
9�(^�D�(-�'�W�1S#YR��y	�3
;�(ibb��E�T�
D/B4M!/�!�w'�����}���<����L�jH����o=c����(��+��=�_�� .
�KB�,����p!�,�$ ��<uGI�s��&��p�a��Q
alZ���#,�! h0VI
En 
�'duؗt�e�2�+ at 4�`�eU6+��E �8"/$���/�����H [ ���EaDi�??�0���s� p%]0��1��Ν�M^
E�L��v$A�B�#cRp��EZ�$ [<I�F�q,dE
+@]��Y\��"�
���.��W��؂3�q�
��0���Cy	�Ng����
�Oz���r��jJ
-�
G)
�OR�ߧ�e�
���2 ��R$�պ
�4�,)�	@��3��«)a09�53�O�pv����(��l
�`�	�Q�Ϸ�5�[�ƢFJ(��c�J�O��q���0sc���6�;]T���U�2���1%W���~�&
��ܽH�">w�w
y�!T	ڌ�N��wF�[`J�
�����m��\N�➕�o]���o��[�� G�uC[�
�AQ��=k�@��=�R ����! ��rIh
++
G�.9uNBƸ���<?�ed ���2��_�p��!���^5�դZB�Lߙ��]�;��?
[,ۚ�@��!�s�5��>K̀�t8
+��z5�e1������5m��u�&�Ѳ�Ԭ��b��q*�w���q�p
+$�尘�"/�s��*�.��x�w{�e����Phr�����q��b���3����xO*L��,��`�H`h��Uv���Nж�C�ɡ��8�`�ϑɓxi�Oo���?N���N
��~���n
`y�����
��:
�6�Zf��0!2N|��Wy��߾�=e��n���U]�=�W���O
n{�i at t{�4��������͍�W+�R��l�l�:e)��s�
<�n��ضҚ�@��w��W�*Y5�z������g������4C�D�@\���.��DI[������BH�;�*�1�Щ���ݙ�C��cz��>Lu�
c0��!q���c�J�}Iq
�#�xV�-Q\_�s�)���
XN��0�؃
j��#���XV�Fi�e�vZ-�O<S��\�4g�����ک'��L6�e{�(-�홺5�C����vv�x�Y!+|�:�8���^$
���9�÷���74Q��s����
U�o�ߖ���E�c������! ��1F�
=��AQ9
+�l�F�;
+[�0��*jC	�a-�
�&������`�r�
j� f����!���9M�V�	y�ю�|<�&��8훌x at +�@q�ي��x��i�e+�)$y�{�
��nPW�{�y�`�#��܀tVi���۶�^�P����z��;Nx:� N)KT�ʿ���w�4�!HA7���u�!ԃt?m<�����,R����v��G�#�߸��K���W����Xzl�$� ۬+�I� �{OS��_�
ؽW�n�[I҃H
3�
+%�p�
�
+���oc<�?�~rٶN��El���R/)P�`���ߌ~�/�W�j���e���
&��&���
��b}���첰����pEc��%1�ۖ���{Y0�5:��kf�����6���9�+�P at B�;��-����)}�|Q���>'<9l��I��2��_����q-wR���D���g:�
�a��W@�R�$��4؀�	D���0W�y�9h
�1��56B�א
:��Lr�e<ГQ
+�*��3�T´~�{f,����n5�7
+endstream
+endobj
+1697 0 obj <<
+/Type /Page
+/Contents 1698 0 R
+/Resources 1696 0 R
+/MediaBox [0 0 612 792]
+/Parent 1676 0 R
+/Annots [ 1695 0 R ]
+>> endobj
+1695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.452 241.895 331.175 253.85]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.2) >>
+>> endobj
+1699 0 obj <<
+/D [1697 0 R /XYZ 86.4 726.045 null]
+>> endobj
+354 0 obj <<
+/D [1697 0 R /XYZ 86.4 533.175 null]
+>> endobj
+1696 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R /F14 694 0 R /F38 509 0 R /F49 636 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1703 0 obj <<
+/Length 2376      
+/Filter /FlateDecode
+>>
+stream
+x��Z�oܸ�_�O�|�~���
��ĸ�ݗ&A!{[��ʕ���"�{g8$%��m�"��,)r8$g~3�!���V|��?��|��UŪR���+W2���b�����m�<>QN��
Vtq���Zn:(e��m�G
+a
+!����?
����G&�+��t���9z������ӊ3U�՝��YiU1	�����/G<,�?�زLؒ�n�����R�f�
��_�r���3gt�Q'�'���-����1c�c�*Ǝzk��쨻��u���.6�z�=�]���Jϧe ��v$��c%ב��)��o�M3�w�p��g�4۫�:3�3�����-3�a �H\�
b�h��n�����FT>V������^6^�+h̕bu"�L�����*~<�g�]t=5^v��͖ꑝ'X��%���%,H���5�l��?�����z��{�Ր��O�u�l���
�b����Yn�p��X�i��-+���;�����v��dRW3 ����cGeM�>�m�^�y :f�~
��z �QC�
]l�6� ��h�	l�?�^
N(9����
�hm�W�.F#���
�b�&"�cQqŸ�
q�� <�-B�۵�-
�X񚣪���
�F�H�-�>������JE��	)�a�'͌N�\o�9}�önR'z��
_Y%��}_�?
`��ʢaW s�ʢ���D�88�\#�ߪ�?��)K˪��)a"�-�ņ��
��$X��LH��^go�n׏�Ԙ4�^w�yag�	�e�6o2L��ج�
�퇭,v�J{k��[��%L�V���C)��`R�b����%��.�m^C�ug�Q�L�1/`N"�
+��.d8�qU�W�沇��u�l�8��Xo�Q�
�Z
~��/���c���$*�9��7�Q�
g�Λ(�x�@;�
+��R�$�B#��2��z�F_:������
a�ȳ�|���l���~DN��[��`@�
p��^�a�͓V_��I�w��~��ga�d��v[�U�_�ó�*ѿ"r+>9X�9�|�RX ���u8PI*ѥB�Ku�-�cG	��K9F[ȝ�A��t�K�If�~R�R�'%��x��U�s"�V6	碰DE����͆6��/l�!��W�\i��z�ޏײ^{�)f���Sl:�6Û:s�+
;HT�_>�"����n��S�H�m�
+=�J+�
�a�4��CC87a����-�(4ǔ���$}���&(`���
>d��w��A�-�m�
5FW��d؞b�w��o�Z����O�]F�Zvcl��z�	D^rӊ���~��/鴹˪�9w�w|�m�#u�d
+��!�Q�v��w�B'�p�����@��4{4�
kY��
)��3r0-/�"�U���b3��R�Ƕx��G.�=$"���ɰ��i�%�=��Y
+�~9��\��J؅`R�G�bاr)-�i�2Y�H�=+���o�p�T�@�D��6b�c�!'t� �N^��_?ǧY
�xS��f�8A
�D���Z~U���[�gc�|9vJVY����9Ȫ�;��@x��J.[�)
3��}�<��(���O|�/9�f���
+��/s=�1
�9�xc������;�
�8��p?�p�7�~�����`���0g�/s?�p?ȪV� ~�����Y�3�Lxy_��n���r�����Y&���}ǹ<\��q����,v����H��X�I0˔�Zf�J}c
�!.�f�AW ʸ�C]	����/�=���s^�P�P�\֬R粔9��i͉�b����8��P�F3[�/[�����mF�6#�G�f�7��?��b�9��������n2����aV �/��5|�1�
+܂T��-���9��ڸi�j�u���6! '/˥�9>�����
+�}Nu�
�}
�(2�ryN?/�N�D�-����AU�jS����T�R�0�9;���ϧ'�w��!S��X���
eZ���>����,�,[̲�U�
��}���V�����b�p8�r0

YbX��D�g�p��=�v��|��J�7y�
�M�>Ծ�e
߀<�Яk�c�yh���{_
����=�@�w�Pن+w��袞n���L�x&>_L젷���M�����k�zC
�t�a
�r�&
���_��a�y�f����].�2<E{7u��S|��
�
��}�C'�8�H
g�i7648��S��g'���w���u==]B����
$LB��}mR
���s��Ǎ���~f��

u��w݁xCT�Y	��Y�0���6<H٠�٢
ׂ}��
W������:?�4�G�{"h��Xr�>�Ć�R�,	�*���Cg�3^��:����ß!�
+;+��v��
Ґ�re�h[��.R��J�9�ɠ߻>�%$S�l*�\
+endstream
+endobj
+1702 0 obj <<
+/Type /Page
+/Contents 1703 0 R
+/Resources 1701 0 R
+/MediaBox [0 0 612 792]
+/Parent 1705 0 R
+>> endobj
+1704 0 obj <<
+/D [1702 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1701 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F14 694 0 R /F1 756 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1708 0 obj <<
+/Length 1308      
+/Filter /FlateDecode
+>>
+stream
+xڍWKs�8
��W�(��
�"�{�n��v��t�^�큵G
YL%�I��
%����!E� ���d���������k�%9�3�%�W�ɈL4�I&Xr�I>�L��I-E�����V˕0"��~"��e]�/\�s)xZ�����
�x���]��ʺ?�����������w�/?
,�	,Q��,Y����d;�JDn�� �K��	�Y�\,>.h��0ژ�	׌H��XP�Eq{:�é~���N'g��[+�q5Q�4��2'J��u��7�<5���\)�ҳ�n��ew�cw
�L�v����ЕkpbqX�MѶ�f��ئ-VkW�w5��lהwS�&�\��
+��k95Zdz�_T�ۡ܁#��A�,Wc�E3���\�A��X�J
+Ar
�2�T(Wz�H��069�%�&T~�%�D�	Be4�
�|F
� 4Ȝ�8Q<Z��UZ�hah
Bkf��3��8<��$��A��Q���@
�d����.̉4*�w����9a�����C�����Y��BEZ��T�
��mWl��d%hN4�� �UQo��'!��p������G�7���VC����z3�<�"ʔ����i��X�Ԅj12E1���4�
���
	
������PK�q��
%\E��l�
c�v��o��T
��p�U�v(Eqb~Hin�1����$��$5豍PL�{���;vߵk�!�]�)�-X�e�:
��N�W r�� K!�����[}�P�|�l�
�v��^�j`)<Ii:
J XY 
b���c‡����؉L��gY�t
��a~��	�f�y���
Q0�HE[�/��c@�Ob�Ixk'�����Zppb�t��!���3��H���_�cu�K�$�>G�G�
��>::9���<�* �$+��Խ���o���(|�v�J(P�p��a9���W߃��:%���c��4Qe
+�M�� 
��M+ at f��jg� <5B?�d1h7"�����b�P��R�n@
�i `&����1�DJ��#��g
��J����M�W����`������Tٓ
��76��L(�y7
Á��eŘ���ѧ�f�� 
̘ 1�>w�YLo�˪
�y
�i*�)���zZ�j���C��
T�+ D�Q�<֓ *ӊ����Њ�g*�����@���~;�L���Z
ȨAdZ����
����/vuu?���خ���U�1]�K��
.�G�
$@��|��
e��A
]7
�6Ž�k��P
+�fLv���T_��:?[�@@��>���rQ�vb�� Xz��'@����� �
��}֠�]�C���=�;5��O�7�:�
+endstream
+endobj
+1707 0 obj <<
+/Type /Page
+/Contents 1708 0 R
+/Resources 1706 0 R
+/MediaBox [0 0 612 792]
+/Parent 1705 0 R
+>> endobj
+1700 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./cscmat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1710 0 R
+/BBox [0 0 473 483]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1711 0 R
+>>/Font << /R8 1712 0 R>>
+>>
+/Length 1713 0 R
+/Filter /FlateDecode
+>>
+stream
+x��[[o\�~�_�o��H���yH�"@�u�"@�0d�m�r�i���΍���#��'-G3��7
Β�{�׽��{���ߛ�ݧ�,����t����H���˝_|ۇ�-�X
n�f�B�s�
ykط�9�����_!�m��r���;W�Z~i��7�V���W�L�#�������|f?H���?�
Y,��ݿD7 �
M�*�0i
��Ct
+��b
	YA�-D7C��U�n�X�@D�@�q��Dt$�0C\�@D�@DV"�=!��Zh�[
y:����!6ʁ����fZJ�&XT���� ,(�1)S��w�O]`U�7�[�� zc��B�'VVrN�Ř�����nƉ�e�\s
ʂ�IԪ

f�X^�9N8YPcR�����}p1 N�C@�)Fr�O����
hy
+*�	1���N
}
��/�P�!��&
���[R���	�oAp5p��{cBLR���	�o�u_������8k
8k�q��q"ep� �	1y�e�Y��)�����
q��
;D<&���`��U����PV[����*�-�]lN���ւJ*\
+�Q��f��$�7L���/Ѡ�AY�!���{����'@{F��d�9�ml3�Њ#��� 4o3�,g�9���
���
4�R7
x�g� � dg2P�a���� �j2i��Tl�f�-6�aJ ůd0���CS��Jp�	�6
+խ��B;��9Q��=�R"J���E�ʕ�v���U�]9��p���HP�!Y������y�(���NN>&��ɇ�;Y���]�ͪ��M����s����<�;Y���*H�t�Eg� �����A��l-
$�;#ٔTH[��v�3��PS�~{��
���vC>��n (�0�皀�=͠"���E�,ER�a
S)~%���
���v78�h7p�,"�Ft�.��YD�e���Kv)K��cÔ@�_�`a������������
��[��.-�$:�&�
��	O�¹\A}��4k
qt|v�"����}�'*r�duش ������Ó
+���q"��e���5�
֟&%&>�
�0��Hv
l�>*��
R�{+W�>t�f���&[�8M
f��1�N�x�����Zax��:!5�4�Y��,M7-Ɖkv1�����
��㵆dh�Q�ҴXݼX��moݼ쭛w�u��t���c4n�u[~��9��
n��x
O.����R��D�	ѧԝ/�Z�G���i.���+��c.�*sß֞��
+S�� fg6�)I�]��t���
�gi�:�q(�p��*��hR:�Ϗ ��l �!�2�!�*�^H�\[����/Q�9Ѭu��EZ�*�� 
��*��G fg6Љ����
��)<K��
@jX�5
Wy��y��~
a�n
+��}
QO���
�R�֠����-�5���A'`�����5E�U�k�#V�:��d	נ�֐]i��긢��8���zT����)�	ǦL���x��tR�ЇNg�S�-��J\
VF>$��`�ٿ��w����toe�a;:)��l��������鞟O6�MNp�`q����+�O�Q����f���1n�K�7<
h�DK�>{��6�8�pcp�����Ԥ!��+��
7R[���1���.E�FR�^�Is�a�l�@��el�B��/�&��8�8�9.��<��e=
Ӥ?��
T�-����
���R��w!�Իk,�~)�������q�lF����h�=��.
|�w�~�zw�q3����i�K��Lsv�M�qH/Y�ͽ���]�������V<�rr���6w�܇���0n(�����w}�ڻD��w��
+�q(��Y��U==5���xL��ps��>x�R�/7�[f���HSҵ69���D������/�s���:�i�f`�A�i�>i��٪�d�&�����

��|]կ_}i=Y�{�6���f�S�]�%�����Vh7i~E���8 at _��0����z��.ɲiի����������>���b�G���kߙ�8��qk�V��9A1�W`f�S�~Y�.Ex
�5i\ogx�=p����8^���t�����m����Y�1�B�R�{
E�L˟�����w�~����a�/9�A���^�ղ���]�~��Փ�w�!֫�O�w�zw���������������W��J�⻑���!��p��jw��'�Q$r(���Bh��h����o���$�$����v��5(6b���|����/�LߍR��.�~��?��O.a�h���w�O^^�uwI�R��~���Eץ��j��.�6xb݀�E5�MD��߿�
+4D&Rė��>i�_<�����ϳ���H�_~�'p%v*�l�Kخ�4~z�ɳ�]������ު�H%���������I���?p4W3O_�b
}q�˫��7�R>�������k��Oܮ� 
��g�����\C��=��k&D����p���T�]e���D�7�-�B�a"
/I4�2Fo3�I.�P��d�/&���Fr�/�*sM|
'�%jq��}eqV�&&̴0p�2�L΋/�
N�bp6}a���
ә�({�s�S�eG���&Œ��4�=�^v�,����M����
���6]�l9�Em4Q�����
j���頡��L9�@�6��z��#4�Ƚ�l�8�;m��Y;,6h�q�����h�m�mg�������I��q�c��6f�
Rg1h�]�閡����,�6�����~�u�Z!=A�0D"Dwj t���D���"����O��E8&1m8�N�<7
"�;5`:�frj��e`?�6
�
�h��h�I,�Ρ�uYꌄ����b ��9,s����,S���ȋ�s(�J|��G4Y�����,�����H�Θ$��y��Z�/����v�I�=}0�tr��]�.�=�7���3&I;��e‰-"��wF�jL���s�i����K?
���;hͽ�j����^�c���e*;
r5&���9��锃n�'�t�%�r��A����g]����+[�"�՘d{
?�f:[8�2㬱��q�YZ]
��6u
o��{5
r5&ٞ���N>�vz.;
r�w��.gL���Ns��+��Tv�jL�=��L:
 [...]
+���!#~
y�
����0��ڛ!����[
+endstream
+endobj
+1710 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160615-07'00')
+/ModDate (D:20151010160615-07'00')
+/Title (cscmat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1711 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1712 0 obj
+<<
+/BaseFont /JTFGJT#2BTimes-Roman
+/FontDescriptor 1714 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 0 333 333 500 0 250 564 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 564 0 0 0 722 0 667 0 0 0 0 0 0 0 0 611 889 722 0 556 0 0 556 611 722 0 0 0 0 611 333 0 333 0 500 0 444 0 444 500 444 0 500 0 278 278 500 278 778 500 500 500 0 333 389 278 500 500 722 500 500 444]
+/Encoding 1715 0 R
+/Subtype /Type1
+>>
+endobj
+1713 0 obj
+3203
+endobj
+1714 0 obj
+<<
+/Type /FontDescriptor
+/FontName /JTFGJT#2BTimes-Roman
+/FontBBox [ -70 -218 863 683]
+/Flags 4
+/Ascent 683
+/CapHeight 683
+/Descent -218
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/C/L/M/N/P/S/T/U/Z/a/asterisk/bracketleft/bracketright/c/comma/d/e/equal/g/i/j/k/l/m/minus/n/o/one/p/parenleft/parenright/r/s/space/t/u/underscore/v/w/x/y/z/zero)
+/FontFile3 1716 0 R
+>>
+endobj
+1715 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus]
+>>
+endobj
+1716 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 4513
+>>
+stream
+x�mWytS�ֿ!M��bc$��T
�(CU���c,*R�t�`[h:�M:ej�6�t�4s3�I灖��2We**( 8 �{�>�pn�۷�w��[�ﭕu׽���}�o��o�� "�
caJa��bu��$�4����fP�Σ
c�Kg�:������\2�ˆ�G9�Q����q1�d0������0��2�Ԥ�+�yfտ�yvÆ
1����&&^TQ�_���Db��DTZ�R�v�Z,.<
�/VJ
*brrsE�����E�1/�
�R�,��+c���}v5���SXr��"���c�H6�$�$���9���
A���J�K3�+*�d�
E���nU�
Qb~arQJq��$�O�^�t檃Y���2�u"�XN�%^"��"��G�'҈mD:��� �5D&��XK�L<K�J�F�#v��b7��`b>�K, 
 6��M��!"�X�Q'"q���o^�<Ѽ
�L湈�6�
+�
;���:���
���|���-x�����p�B�h�"Ǣ"u�5��_G����
�\ܸx|����?$�"g�`�
�
1f��oX
�봅z�'gӹs�]�
+]uf#_�2� S��k��l^�I4����cϴH
ePÇ��}M�9�����>D�}�H����o3>����0�2���6{ ��Rgi3�IzMZ=�F~�֬n�#$:
+N��h��.�N!-0A�J/���
���!�|�u~�A�j�+���h�P�S��أ��z����5�}�DV*�K?�
-���[��PԏG�d���B��{��3�c4�W���uMȄ����5�SW�	"g�j���&�0�Y��ǭA2��m�U����j{F �y n�q��);v��@z
\3��\��׾�

�|r�sRٶ5~gI
�'��P�X���1I��;4=qaZvxB0X�_#�	�VU�����Q7�K8u.�1���.H
u�
+ ܯ�'�H�
+��7�����!ѳ`���0	I��[��@�w������,��dI�hST|���������l�I���e����A$�������⹪d�L^UQ��I�$�fS���Y��N �7�zخ3�Pk{g�	�U쭌=�s��,55�P<+����c�q��A-���.s
$�]�YB�
+`�ѸK��j�W�*?�@�*0x�l��Ug���
�.kߐ,T�SZ�!��Y�U�k8�|C�.D�	i;��]A>Z�Y�>@�s�ѣ,=������T�&h��m$��YU�\�1)m{���2����P��*����

+����S{���c�l��ق��IpA_c'����[���?:[1����&ޕ�ݰ�?q��䅁��:��a�Z8�Eu��;K8_!'&���d���&���Tc4�R�3��I�Wz��X�6���$��7��/d_:3�5=$�zd�*C��{��q���Wv���B��j|Q���V��,��}P�9)D?��ΐ
+\ih1�t��(��h��*�����G'��Vt�^��|jx��m`��OF������Yq����x64�9�
�&Dm
1�2|Z�f6�
P
��z�St
�	�2�|�Ňm
ǰ���ij0��0�\��<��j��ڕ�Z;�C��?�
F�y��
Vkѿ
|��Q��UPm��K���y/�J�I��;<�Sl>K
F�[�T�¡�+c�L�S�W�ntC7��8�6�U��Ag��Б���x-%N�
ڠ��҃�������Mv�w@�+0���g^ۤ��.@$�h��t��uE��=���	j�U�J��SC����� N�����F����\�5#�2$��ju47ٚ
�FW�:�����3����=�^�[U�-��k
+a�IK�ʚ�:�>=#�x���dǢ�����W��/�P\W#�Uh$52HH�
6x��Z4�
���3БG�A?[
���0J�}�{�f��~N
�&��:]U��ΤSj�O2�<
+���u
�1X��.0 �#����h6����X��W�'�@��y��7$��
���i6YL�ćJc}Q#���b��5��%
)���U�4�jUAn�2����i��B��k>�m���ɫ�;ȹD���
��:������i�-\A��;�
�$L�hL�@Mu}���(|����|�^����;�[�!i at O}�ީBl��g�����Օ	�MY�BM��b�)
�f�\^Q4X>����h�[B��Z�
���0>�X���O��2��ܑ_��0v�g�����G��<��^唴)�!��#�y~ǩ3������Y�W�F�~���<182"���1�DF��"��2c�j�ǜ}���;�`�N���ҡ �f��p-�1\^�u;�+�es�����
��:�n#�p�Fg���`S���JRO�<w���j���
��U6�M�Z_�*�IÚ.`�j%�O���6����2Vs�έ�j��g�}�޻H~��~2pѓӬ P65�H��bݡ� [...]
J=��?��f���o�C�Ώ�N
���F�A���J!��z��\�����X
�0`Qa���
+'"��R� ^v��>��y�#�S��_��&�q���$�5��R
+�Y�>}�ȹ݀��� {p��

Y8���AF�*��ܜ]�
&����
�1�P�
�fص���KF����RTx�4
n��~�
�n\BĤ���Vq=������%�Ù�&
��	tvT���
�F�%
1zMq{[�z�-���x����xNjƤ�������൲9�8gj�����������	�Ѫ��OH���E�:
�(�ʁ�O'��@�1[*���z>��t��q[��#T�io�*�x��M@�����ɓ���2H�ٺ=6�Wt�H�P*U���R�
ʡ�EwL
�_Z��}��~�q�grZ0v�u��+&�Zi����R��u��
MVl�6��(���
��ó���S3H�ƹ��!�g�3��fH��ws.�z~o�T��;yVhC�q/�
�<ң*	�
+Z�\2�����9������x�?
B��Eݺ�.�C�Ý���Ӱ��5� ��~ߡp�A�r��4��N[�~L"8T�q���IGe_gG_eg�K3R��c���kw���%�G���8��]_�׫�bq��!_^��8:f��J
��
��4��"?M���6� _M?���Qd���=@�:؜����������[R�M�ND#��ۿ}��
ͻ&\v1g
+�E�=9v�Ĥ"Xp��WH$����t��و������C��An�5�R�MT�L�����
��.U�p�A 77���&��V���P�+;5�j,�JUU�D�[hޥ�h���k����
+�z�/�
��D�Y�;� �
z}\X�N��f�S�r�v(;�ydۄ6��f�&z��݅�A�ߧ�8?�
�%�2�8Vx��[�)���&��a{�K����|؂9>�G	 �Я[�-
�k�i��`
YSc�	jT�ggY���s�j����{�ꕓ�N���gi���Ogk��M�z\kk4
�"yT
���t��{��%��pG2E����9Ť�
�Z_��̨�)P�$i,A�E�%��]�-0
ftIO)���>� ?�x>s�/F�ɣ�rM�譟o@����ギI�I�)y�ƌ��a1v���b��9���V�
�T�6������f��MR����W�
/����A��cӌ�wPB��
�a�ku���
Wu����m�����r?�gQ{�8���8�Gw���aHNu�Ҹ@'��I���$��^!�


j;	�
m�8!�����ڽF�H�e���
���!��^޴7�lo�@y��7fA�&.����4����Hd��f�«h�Uu�z�;g�I���҈�o��0�<�8}��N�\ۚYR�w0~]����i���?=q,��j��%�{�
ɰ�F������7��W��
�||�
����#)�*�
�ee�e��;��O􌞼��ÿ@4���~z�ޡ�e
�uռ�z
��t���
����I�HJ��
���S��LT*׬��L��B�QY��zR
P�ۂ��o�W�
6�a�
���QӮ�-�w�[um�l��;zԞ,�0�^�R�����
S�1����Nu@�Vi%���*����`���s�
l@�^
���j��Yi�	�E61��Z jW�F�]:'�g��Z^Ҝ��
A���;T^m:X�F�J��*��#�[�C6���v9l�
��w���YW7�O7�h�^�]�.�n
ήG��A���t�?/�|
(�)T��(;����%�8���3�2y�`�����B���S1bw��v'���
�j�%y�y�{B��<�=����Kt~�]0P���5Z�����YF��=;א
�I4=�Q=����ǰ
�qS`�*�`o�������J
�:Wq���[G�/�=�H��('=N/4�q��
��eŬ_����
+N �]�����v!&�v@��Ҁ������hm�B��R
ý[Qmeu��FӐN�~?�h�v��$�����}!�b,���
_�-\D�


@�
+endstream
+endobj
+1709 0 obj <<
+/D [1707 0 R /XYZ 86.4 726.045 null]
+>> endobj
+640 0 obj <<
+/D [1707 0 R /XYZ 139.421 261.494 null]
+>> endobj
+1706 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F11 691 0 R /F14 694 0 R >>
+/XObject << /Im7 1700 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1721 0 obj <<
+/Length 2737      
+/Filter /FlateDecode
+>>
+stream
+xڽZKs�8��W�(W�� H��
�lej㚍��dr`D�f-EjHjl��o7
)��f��
"a�ѯ�놢��*Z�������\�Q�����*�D����tu����S�.�x�׷���7�ɶ�O����a��k����_.~������&ъ�Ec�
+��l/�~�V9��e��գ��]	��Q�����E42]QJT
�AJ�(��
�D9)e��å�}��˦�@�$^�����``� ��@��ґ6��U$e��5��б�XDX,a���U��:4!�s7�d�S���-��.:��n$;|��ތ��
4x
�a]�.�M�ٵ��(�[xXnp�Vm��r����DH��8b,+��p�:ao���t$N	O��E.�O@��M�Q��;b��U�
+��uW�lZ����0�@���fՇ"�
\��5j�
+�+RBi�}���1��i��(�++�x�
9�<
�P��dG�F���Kqe
�ۡ
�ñ���^S(��mp%1�zE��d����3W�_����M�ѣ�^Z����ZM�pB����oQ
}��4�����
���;��:M@
�m�U���M֣�	��]ߴ�}�_��
�fu��4!頦O�����r�k/�# u�n���e��X6r�g���:�X?���uP�Œ���C����O��y�7�I��]	(V�����G�6fɢ���5ѭ���<�O��o��9і���1�L
3�G�q�!W���g�I��A��n�
G� 
Ɛ(%XZQ��
�SB/�X������*�@��H����s@������)�M��!9X��#p9sp�
]1G�ˉ�C�l�uW,���,t�73�r����-��?�O���n�w&;d&s\�
]���n"p�|
+}JR�7�����P����ħ��s@��/�!�M�3u�h6.�Z�^7�&�x:�4ZC��QJB�:	ւ$?ȝz�V�LQ���ٵ�+��&�Ґ ��ޤ���n��� ��邥b �������^��o��E��s��=c�p��
+�&����6�y��f滃"=o�ё��%GOHJE�s���>�S ����BR�p�)�;^q�M1��,O��x9�
�� T�3�������u�tS� �m���Dr����
.���c-�	��O��CpFD��
NZ>Sȁ|G�e�����S��!×VUqgU �
��CV���p��#ػf�
�v�6���o�����kgHW
͘VH�&���z~@s �}<n̯��XIh����A�J�-�>�|����{�u�-&��[Τq���nSt�XBa��F�Ƙ�j:=貭
n �||�i����a����e�Fy]�^i�U�@m���.,V��ې���ڇ�n[��
�Ln�˜��>�1�M�[a [...]
��QD�p
-�,E
�T�Ϙ�0�Ad�$�"[s/���<��H_�ϋ��[b
 P싉�޴�I��,���L@��Ȗ�YA[F�<�%s�O��ݵ�G�
���*X8�"ݑ�"�}i�T7V���=��W���c��l
+$��`~��S���(��y��7uV�w��Q��`�D��9�L��sѕ?�v(��X�0���L:�
��)
q�`�"��aN�<����
��o>����h ��ﴄ
�w6=(L�P�����{4�nX�^=��C��Z�Qn/dyx�$ϼ?��ގ
��9
N���#�e��'�M|o����n���R�7�h�T�'�M&
�}��|�*ۘВ΂R莌Ɵn_����L#��ͷ0\3p�D��*V��%�:Cʃ~�
�A�+����N�:c@�=���P0�d,�"��p�
���f�gx{���X�c��
+��1�N</��M�	�������C��S}7,o���[ず!
�h+�Չ��b`���r�n�w����Hn�_t�X�������yeʐjg�
l~�����egg]Q3��v
�̎���,��8�
�NT��O�uA
�Ԅ��6�4��=�ْk��Gq@�5~Կ;;/���|�<|��Z���n��2�iQ�۲6W;�S(��d���v\0qj�)��`�)ID��)���1���-f۳tg6���"W]4��-' ���8�\��	;ꕿ�@=����=�>s
�~���q+j�]�v_�������i�!�P���B5��b3��������|�yl�Գ7~)����Sql��	�M�y<�a��G�~ӿ�7�tbYA�=���z��-� ��g�o�g�@��m �H����/�
�
@VAXz��:�R��g}
�T�����'ҷjBG�_?�{ۉ#QH$T������o�׶���?#�}��HX���
lH��E��P" 
�-��`�(I&%��Y�����Q/��}�fa��������7Ghtp}����s$H���׃.
��.�
+X��T�}%���-3R.�*`)�W���{b�)�Z$�'?K��
q��
"��_�ل�0eI���
��|���'K�R���ː����	
6q:�:s��O~m˺_$n�5P��!0��>�lOJH��o�
�K	�]1��������é}?պ�����?qֶ�
+endstream
+endobj
+1720 0 obj <<
+/Type /Page
+/Contents 1721 0 R
+/Resources 1719 0 R
+/MediaBox [0 0 612 792]
+/Parent 1705 0 R
+>> endobj
+1722 0 obj <<
+/D [1720 0 R /XYZ 86.4 726.045 null]
+>> endobj
+358 0 obj <<
+/D [1720 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1719 0 obj <<
+/Font << /F36 464 0 R /F38 509 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F14 694 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1736 0 obj <<
+/Length 3740      
+/Filter /FlateDecode
+>>
+stream
+xڽZIs�F��W�6P�	�W sK�����8�\5UI	I�� ���_?o��FPK��
�����f��YE�7g�^��|��*
S+���z��P�b��V���v�K �<_

k�ɫ����JT�ͱ��wE�g
7^���s%��տ�w{(ɠ��
+;��'����Wo�ywq���g�_��q&�d�J���0�v�ٝ��[��B��(Ti���q��Vi(�T�.�~>�&7KVB��1���ME(b�WKB*���&�����&���'.�t�w�ý|-�t�Vk��Vļ���%�1R��JC
+���2��#�v�5HAl�e]S|��u����3늺�Y��>:�L��X/��&k�y�]St]^q����e����s�� "��h��nn
�?�9C��.�%4�89��r>�p�h*���*O��D�~�m�S
F��Z`��#_
��
^��|
�uYl`J$�(	MM}�@Z���f
�`�@R�Кc��C��=��7�ѡ-Y_φ�N
��޷�ގ�=�qB�߫���7���t������`NV�
J\U�:���
T"���<h���A[?��W��]Q�nF���f�7���EvSW�5=�[���D���*�})���Uy�]�,��g^��\�����8���ƍ�5�,�dI�j�C[T7\����\����F��kU�
��a-�A�pk�V$��
��{��5��)���J����
^!Fk
�Tw��ɂc{�G5���97��<:Ԯ��n�m~�
J��]�^P>cC���Oġ�oI���$a�S��
�8yH���_��3�%���0s�>`�t��
V�𦮡��nfDH
�E��phD�hڎ�n��M�'Ÿ"-aS��G�0�Z��d{�	�VS������R�V���C�8�cn�o"�(59HbE+HG�~J�6�փ6)k��M%�9i,V�,��۠��l���	6��2CE鞡Y�"O�`#�LD7�z��]
m.X
4�Xww�҆
�
�O�eI7�����m�--/�s��ff�Q,R
bA|1��'f��L.�6QJi�h�;h��s+�x5!-�OH���t������@&5{vc3Zڪn;r\j�*�1y*E��
hY�i�`��/َ�U`xH���;p
�T㚛Gd$ف��ˮ���U�&�"|
��
A��Iմ�h��s}(˓;̕7���v���j��o����A:�b�t
�W�RHҾ:L�vVˁ�K��&�d�G 
+�F&=�c��7�
�9Ŧ�u�`ӛ��P���xu
f:~����{v���$�@ v8�Lq4�q4��&GQ���W�ؐ���Ҥ.����͹����N��8��|(�=IoY�
��x�Շ�)S�p�s���2gp,u��b��C��$�2I�9779i~�
~R0aw\�����bwoϰc���ۢA��)��@�T<,wQ��8!w��<�dj�e�x�D�c���c��M?�M�P�~��x�(M�z9���J;7;����P�_�rי����
/#Yҁߠ�*��q�84ž
��
	 ���-xK�/

�"
3���a�sV&V<A�M��SV�����
+�4���ް�M���3�نų�U���d��M�P��c�O*3��pA'�#"f��aﺚ���L�v�B)��0����-���
����-���w*
+�=�
�-
Q����)���J� �x
+�uhb9�
zD)��AB�vs ��;g�}S�aw���B� ���
�r���"�ڦ�1ے�=�1�js�d��]�
W�r:@Cgi v
+ޘ�Ȋ�合/����$�x���ME�79���@����o��m����Ds�b.��G�olj܅
�Y�����Oe���N����	7�;Y8M
̐�s��L���LH
���
=O��6�Z��]�ܳ���	t�\:��8酻���'^2e2�Mَ3�CɮX��G���A����PK҆*��<}<O���yq-@��$%�5*R�z�J�������>��|~B�=��<�
���h�f
+4�"0�-��[�Sl쓌��瞠}	��%q�8�H&�'�sH2�q����B�^��
N�wK�;�D@H>�����|��X���\����cb���
��蒀���ԇ��8��}>�8Ƹi��cQ�f�����n�����­�J��Z�^K�^S��a��ESW���%K�"�/c1��8�vTu��v�ģ��V��
u�?FJnNQ�9�8��1p�3
���
�,���
�D<�2.K�)\�v�
�eV�S���[�eV�a���*C�&�,u�,q�)����p�et���·v� r��`�y8
��0Sy7���#L(x��e��(L��i��h���l��icvV[�ER�R��P;�b4\u�Ѱ�c4e�W[��(0!!�
���
o.^�iB�P&�)<�
���\���$ja5��P��9���3)���
�mo
���tj�I��$J�F�T�	���
�SDן}8ع{B��滵î)�`��0�S&��_A~F�D��+��������Ѓ=��'=5�d�`�A��$O z��@�ċ@�~���F�i�e}~:T�J�Д
+Mj<�<
�#������"Z�#Z��|
��o�|��^�k�����޼po�|���a
[���J�._#�����cv��
�0�=�rB�4�${ζ�bI�-V�������H�1��F�52��

h�]>nI�[G
+�S"����T`�8
��-�\�"�yz)p'�� ބF�)�l�Y1?#��#���(�L!t���V�)�I�����q�[�19��Lj�������v�
W�<�����A�
+�
$���8�

�"�%X�0��C��
+�;��>-�;�3��z8\ ۽
>��f�(�Q���ő6
m9���Xq�[�$����1�� �3��Wb'�P�g�]ȳbK��H�Oc��r
j���u*����
��e���!���RR��ˆ�
<`��<�:�E:�wPI���K��u*�.�Y�֫1F$&m�Ö�T�{>|��Rd�8�}��
{�6"&3�_b7������P���X�A[Q*љ06ij��`��7n����
\ʀ��(���?5���c�i�	LĂ�_�_�4����)LX;�G-?�!���C�
��3a�
�bcd�/EYP*B����1T�dR���1�[�?��U?a
$�T�T�����3�kEqk�Ⱑ�R�D��
���C�?�ܰ�����i�g3��(0~d�ϥ
��"��!�X��x�!��_mn��/Fr�nO�35�,Ȉ9
�폥��K�G3�_p"�����u�JXr�m�V�_�bL�P����v�a�>�X���.����)��b�b���l�)�nĨ
D
b����:A���RZ$�8Ł�'
���
�@���J��c9��`knS�F����V�O-���(��F|�m����C��[�x$%��q�
[n�_��; Pe5��
����4
�h�$z
��ǩ>yx꜀��t��S2��l9���
���?�b�f�P$��X ��kL�$��[�{���K6�w0��68�
��e	\�Ty��l��a�O�,�&
 
��$%:�`�;�t�j	@V<D}�4/
Dyyڊ'�"16�baյ�G��
� ���we��7��gx�#�Q��9��r6���)�����?��@D����aDN�!y�)7����e4A��
\��c0tjr�^c�N�?Y�G�
+endstream
+endobj
+1735 0 obj <<
+/Type /Page
+/Contents 1736 0 R
+/Resources 1734 0 R
+/MediaBox [0 0 612 792]
+/Parent 1705 0 R
+/Annots [ 1717 0 R 1718 0 R 1723 0 R 1724 0 R 1725 0 R 1726 0 R 1727 0 R 1728 0 R 1729 0 R 1730 0 R 1731 0 R 1732 0 R 1733 0 R ]
+>> endobj
+1717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [442.313 671.562 449.287 679.975]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+1718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [454.661 671.562 466.617 679.975]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+1723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.616 465.467 204.081 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [346.248 441.434 360.97 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+1725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.066 441.434 379.789 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.489 441.434 415.211 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+1727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [88.171 384.815 95.145 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+1728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [99.563 384.815 111.518 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+1729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [115.937 384.815 127.892 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+1730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [322.99 334.381 332.455 346.336]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.012 310.349 471.734 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+1732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.069 310.349 490.791 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 310.349 526.596 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+1737 0 obj <<
+/D [1735 0 R /XYZ 86.4 726.045 null]
+>> endobj
+362 0 obj <<
+/D [1735 0 R /XYZ 86.4 701.138 null]
+>> endobj
+366 0 obj <<
+/D [1735 0 R /XYZ 86.4 427.963 null]
+>> endobj
+370 0 obj <<
+/D [1735 0 R /XYZ 86.4 283.85 null]
+>> endobj
+374 0 obj <<
+/D [1735 0 R /XYZ 86.4 187.989 null]
+>> endobj
+1734 0 obj <<
+/Font << /F36 464 0 R /F38 509 0 R /F16 453 0 R /F8 465 0 R /F48 609 0 R /F49 636 0 R /F14 694 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1740 0 obj <<
+/Length 3235      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks���W�*�ʄo��
���Ֆ-ۢ��U�=�ȡ4�!)ϐ��_�n`�$��H'�X�!��}/�]��r{�򂫞%V1ջ���"���%�����g�>r���	>����ջ�7[�_֟���x5JJ����7/�ף���z�?���e�e<�T�nݲO�oC87�S���vv~{���Q�V�Ib��gg��&��o��pkz_ݺYOpK<e��٧��ͪ0-V)��G��,%T+�m��O�8+6�����[ε�E'������RKe����Ǥ x�ˋ�j���Ȑ[��/��Hdl�`;L0X�N��0&�
���C�8��e��g��򩒧`�3��w/���޳P��
*Z?
2ʓ
"8����k?j�j��|���9�N���d��?1���d◤�R^�m at QD�U���@�����y@�Lj��/�|��-�.�Jke����
��2�C�"+���#�9�I�v�l����YN��
�9���w�
��$���SbBj"�8�Ip
z
+-p)��kZ�?%��"��!S�D�t�H[����;���������¿XL��/1���<y�K�H�"����`�pj���+�;p�����?$�$��K�t!/A�
"EX�S�h(=J��Ñ�m��n���� ���8/E�'_V �I)�R��"iD趢�L?䂂K�5FG
+�'L���QS�Hُ��Xv����P�h	���$���N)�aֵ���4+�]�r� ��<wd������Q � ��E��MqQce"d
:2�W�N*��l�6���O��€��PO�)
��=I������
2	
�չ	��P��
������`U,�
+�dp(�$U$s�~�*�D���o�d�"m������۫׀7S���mO4.}TN��hi�V�2���>���<�yD4�w�s���9�������Շk/ �%NAӪ��z��4ov9�V�
+7���˝r:��ZN�s����)�Ku9�VTjO�����o�߆���nNq2�����
����*�{6>ň�xİgeD���	�k��}2O�t�? ��_OW�
�����OL��I�
[E�4�ϣ�P	+�)e��`����7WoK���)���=����_[ִ֨ƴĻi��!��"�l�4QamО�����
+���`	T��)�E�|�$��\�
+³�����6�d��0@\����Zxn>	�E�P[㎻�"K�yx;aj��(��=-+jC
(�
�1@퀲m�ܼ�p=��_�C`�����5o��� ��
�T�\�z(�@G[F `�*�fOCe6�ة������'��W���o������D�B0|u�̆�R�m^�q���F8��]3��G�nڸj�A�(���\���h�
��w�
�`9��@\��Vŗ|�c{�
�I���H5�8��$�*�<fQ}hY խ^�k��	���CIb!�
���8(��&�2������
^���P��xv�W�����*��jx�j��`�7
j��t�ݵO&����}^o��2(�
�
��
�V!fp��N�Y���oQ3��8U\��	��
k�n�� su�yq^+��7w&@���Kw!�e>�*S��xӄ��V
NJ�$%�*V{@@cBkb$;�ʄ�b�T�v���/&����`T䊈���^�ځ�X
�DUy��� >��h5
��ks�`B�@��P�{�'!�*ȷ|���8Β�$9�|�,M�)g@h�]��f�$���
+t&NB7�*6ܥ�m� \��c�6ԕ�� �?L�%�
D��O�
E���p PP��u³�����5��q�!�rnBt���:���,`C
!�:��Cܻ���|����
���26a��1
׭��h�¸�:��T�E"����dM�F��m׊��p>di�G����w.���Ӡ1�f
���������2������b�#
�:Z��ȶk��F�h'�h�mW
+��1RC���x�i�

�TΊ$�|��sN!b���y��㋪�	�00���֨%K��8��7���̈́�n���8��%�@hW.
�0,)��x ��N��S���� e��ݶ^Q
�'��@��@�K��.Kj�R/�^-8_��sFN����!0S����
���
!M�c��q�+ �B�qm5�/+��Y:Kf�J��EhBO���Bw�-��d���nIp
X�k��.B��P,�UG ^��
�Y#���6w��]��#���l2�]�m_�h�&�`�!�����{8�*g��t�=z����qz�ȓPۺ�j��R�o���FZ]0)e0I��{D�:�����N�����X=��z�/���yu���$���ٿ�d
�� ��q�
�j#d��aj�
���qӁZ�lQ"�Ϗ���t�&���A�	��
bݬTc�HVT�w�dz!�4��
�}���Jk�m��*Ov��L
��dqQ�P�Y\��[X
�&Κa��#g}��
;�Gp��f
+�k_�QF�
������f��:��:��� �EyC��}=��o�y0΅8�G�:�*�&?�W���)���ŗĜ�VD���P��j�W2/J���u�C叩��n<"e��g1�r�1��:/a�d����t)����ݵ^�wGG�Ҏ0rm,؅�p�hP��t�X?�Q-�
�Y
�/�K��<V�w����� �9d�d(��z�p����,��-p'%�k�S������
\�;zHN�����Lp
d)
db���n�y����l5A�4�:�i+�=fɰ,�$%"�k#��~Q_�.���R�_`�p�_��H�W�.��[�~k>��N#����10��S��t�e�i�,\����8}�`]�	YU�J4�~�!�Cq��(�

�q��{�4RD�C�=����E{�H�q�h�6�|��&e0�U6�Y�Q�� [� xvU,��Ld��fĀB�A�)Dx�׵ <�K(����LY��ࡈg�S\�VۉD��o{	!8
Ї�"E�n�,��@�;]��.��Ae0
+�'���N[G]�@(L�VZَ���
+o+�.-��c��nո��#�����w3�
r�c;���^���NQix������"����/PI3��R�jw��������Lw�=:��S���2��(������7;0|�m��_5��{0L�*��{�Y��0�f�ɺ0�9�A:�U!Z���F�
+endstream
+endobj
+1739 0 obj <<
+/Type /Page
+/Contents 1740 0 R
+/Resources 1738 0 R
+/MediaBox [0 0 612 792]
+/Parent 1705 0 R
+>> endobj
+1741 0 obj <<
+/D [1739 0 R /XYZ 86.4 726.045 null]
+>> endobj
+378 0 obj <<
+/D [1739 0 R /XYZ 86.4 214.187 null]
+>> endobj
+1738 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F14 694 0 R /F49 636 0 R /F16 453 0 R /F11 691 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1744 0 obj <<
+/Length 1563      
+/Filter /FlateDecode
+>>
+stream
+x��WK��F��+t���xz��T�Mv+.;g���A�إ"`��
����H �xH��Ѩ�Տ�����cD���͠��������(""�,Q
��8�I�<����2͓>7<�Pdn!��y�.���"��pg���b��+/���}(�ph:�|��?^�}H>��~�� -�ԖHb��F����4�7%ܚ蛗�E�[�p�G��=���D �J�֮)
�
+��	G��x����2~����>,g
|B<^噳��iD�F}@6�rǽ4��(a(A�L�<
=�*�@���s:J���I����셳�
+�q���'
+"ϊ�M4�M4]�+V��4͋��2eU:R�k�s�:�>��_2�.P�Ui���i�a!�e��0��;� ��dǽ����^pC����Ũ�
@d���u�F�j�!I���x:{γY6�;-Q�sEP����i9]8y��b➢�6n�4��a�y��'
�d|3���?��0�̲�	��0��/�����2HOVy
�Y�N���te�t�>�
+�_81��r5r�Da�m[_dN���d.*�vdVXt^
�,hC 3�� �e
�$�`��㳕Y�
wk�
��1�r�/�,���\�窨$��F����N��k�Y�bם��k
��zZY>	�t��wq�.�v���2}�1��LHk6f>Ζ
frbh���3A!
�ʪ�$J�vL�M˧�0F�=�!�"Q����2�H��Æ�ڰ�D%}z1��@)B��wci<��*,��0d��
���=]�AlB�i�� &��R��V��!@�]M5
��,�|���͡n�8�mc1Y�Cc	��n�`K��Hc�J�y�
�)�ǻQ�����|�k
��E�d�a�r��K뇘׀կ�N���W��
�M�R
��Xd_��-b'�khTψ !�Y6[,��A^v�R��
+����i
�F2��:0�
��ɋ���H
�d;�"_�"  �s
+����w5�$��}��CP"U��pW&�6�W]׃�7�]\rJ��?��?��r~i"�YG
��ờ��2�Y}M���{Up:@�\DΨ	�Ծ�$�
���x_�vC��.��%H�߿��t�o�|���j��r�0�����v?�gZ��
T�)~��#�����KQ��{!�6�"���q��
n����$Sx��p������g� )y
7��xe�n���A��L�lߥ)����~M�%�Q��Pě�K{���Ծ�3
u!�Q3~��f�NA�*<�����?���}�ߝ�0~�Y��;���;�������hu
��T�
�ߏ�Vzהwe'凊�>
�#/�7�*��b���Rc�`�_�
����4t��{X��?��7��v$�Ֆ'�P0�G�Pn*y?����?g��Q���+"��_��'��w�@ma� ?F&� ����"3s9a�-���H��誖���Wv�-�+�V.�\
G�8��M���
��{�8�
�-�ÿ#z�#T��m�h��q�y�]�_�.�Ϻ
 ƟN�
�
��o��9~9<�������w8�DH˵����?Q
�
+endstream
+endobj
+1743 0 obj <<
+/Type /Page
+/Contents 1744 0 R
+/Resources 1742 0 R
+/MediaBox [0 0 612 792]
+/Parent 1705 0 R
+>> endobj
+1745 0 obj <<
+/D [1743 0 R /XYZ 86.4 726.045 null]
+>> endobj
+382 0 obj <<
+/D [1743 0 R /XYZ 86.4 701.138 null]
+>> endobj
+386 0 obj <<
+/D [1743 0 R /XYZ 86.4 529.11 null]
+>> endobj
+1742 0 obj <<
+/Font << /F36 464 0 R /F38 509 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F14 694 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1748 0 obj <<
+/Length 2803      
+/Filter /FlateDecode
+>>
+stream
+xڭZQoܸ~��X(��4)R$u���������z}�we[�V�J��ί�
���]��
� ���3Ùo>R��_�����O7W׿H�J9�:�V7w+��Zi3��٭��|8
�)���UO�2Y�a���Л�k��W�3+$����_����gz�5H(����Zˤ�/i�c�E]C�6(Ť �Z�[׺շ��ؕ��]�,ש��f�Yy ��ɓ*��z�;z�:5�3�:�%8g��A�������U�e6L;�Y�����r��~����(w�sK��JV�=�

�%�L�84�O��X
^�"(˓LJ�.�;go���d�j#���^E��
i�g�����-4P��E��a��u��u��xd덒��鋽k��	n+����&pT�%>>��^G/�
u6�p�ʎ�j�؁�} ������1ؤL������P��N����U�	;B#}[E�e��H�,m��
��`{3�]�6@�D&��Q�/��L��u43ڜā�spE��Hl;쪯��X���
3u�yW��W��ٍ���-� �ʾ�y ������C��]���>��b}� ���l(:v���.��i��*zB��
"��.�TƓ��
��9���&��7�8x�:1�߿k��7(�7J�Ք��W��s�ӌq3N�<�g��E�ay����A�hȒ �3
@�L�%f�� w2��lFw����F����ۯF�Ur��\���g���-�|�!Kҷ����e�`�^.��,j�b�]q.CdL��b���{�p�i��FZ�c��D�Ĉ=_ ���m�����-Ůf2-t��`֌�q�l0�DT�(���I@
��8�
���֕
+�`�?n .�)�����
UTJ&�%�=c�N�ź��hר�	G�������0�<�Y��P���j��M���pE��?6r�ߠ��X�35wL�t�qW�hW؎ݶ��S�-*��+\�(VCu��bG����Eq�� ��@���M�J
5���Q���
���D� �/U�����ہ��&jS���
v�
��
��+�C�=/a7P��?��o%�/W)h���o
�r)��
��Ź �V� �2����I1�*���I#t���`
�y��_B��]�/���6�3��#
%���
����#*�;\�E9Q���\,�y�U��h
+�J����^�

+��p�C�[�#&��C��]�H#��� ������:�	���,{��jFY��<�!j��;����XGG��rl�G�"pr&�t!"V
�0%䏌�:�����)��#Ҽd(4;��9(�Q��rX>C�ؽb ��6�!R�Ӧ����R��dU ;��mW.JQ�����>����*V���(K#�cW���w0n��sp��	^�Í��jN9�:{m�6)� `�k�0�^�=V���=�3��=�
+
+�ߡ��K
��6�}�Y'�����"޽�M6�䫕[L(tD�7|bKa��S+ވ[
�e����=l��Z;Zkso-d���ұR3��Efk3�P�o/�(
���*��"Ш�ۮ�����
+}���/L>:������C����UX%2�G%�Q����F�j�]�gn=^-ݹb�#��;E��u�l��ˇ
��H�a��2\��L���+E�&���?W^�j[v��c5��e/98�4<,y�2ev��	�1Q4�V��
+�2�V
�*6�
���b
��ڗ쵪�I5l���B�=u�ut :��K}�퉘j�Hn6�E��R�S�����M �8���z��O�qh �x�n�H���D���@K�]ȧ
׎!�z/���j��N��A7^���������d�3��1���r~
	���L����X��B�!%�ŝoUεs��x9UB���H�N�D81\kn�c�Y�N��Tu�a���:��
 L]�v��YA
+|r]��_!�,c��{�Ry�[�Gd��p �QRR{<��
CW�A�r��D�z�^BV�m�O�4��_��
W�'�)�ΫD�>CCz�K���u�mn���K���S��%����7��9�
.�QO����
nY���"|�1�g�
�p���*��3��Wdx�wy*(&&�h��vs���Xe�edBi�����^qf�`x��0�w\ܧ��۫����aʆdn"�������$
L]H`5��8:�"��#�&ٕwű
��/:[J��_ͼ�@0adA���P��uB�-
y��,6ͫ{'�dB�o圑�[mH�,5����
?���)��x���;k3�ȹ?�¯qB��a� 
��|����׾M��"�G�g�$�|*��
��#�3��Y1��
k�N�Nh��B�)�BG�
�ߍp�_�(�vؠ�9���
��
�
ߙo:�Cy����|�!0�ޑ�'L��8��Gї�����G9�����
+oQ���|�����^k{�u������藠��
Uv�[�77��q8
]����/x�*�C�m�d��˦��)�۩*!ڇ��ŻO����;,k�2
,}	�K�<�@�w �tU
xv�W`3N#xq:��$>E����~B`&�M܌/\,sg.bp����t�`��,�wZP>m|�V���9N�r��&
�#jg
��h����!т ,�w4��#�h=u�o�4�ȶw
KU|����^��Qx�P��S,�Y���O�L=�j�қ��wEr4��rôTK)��|u�R
��Ux�m�I��������F��S�|A��>�b����z��T9�v|Z;��Z���{���;J=�#���'	�&������*?�rp4~��?4�> �����
+endstream
+endobj
+1747 0 obj <<
+/Type /Page
+/Contents 1748 0 R
+/Resources 1746 0 R
+/MediaBox [0 0 612 792]
+/Parent 1751 0 R
+>> endobj
+1749 0 obj <<
+/D [1747 0 R /XYZ 86.4 726.045 null]
+>> endobj
+390 0 obj <<
+/D [1747 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1746 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F49 636 0 R /F14 694 0 R /F63 1750 0 R /F36 464 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1754 0 obj <<
+/Length 3393      
+/Filter /FlateDecode
+>>
+stream
+xڭZ[o��~��
+
�,��.oysڸH�&9�{R��-�l
S��K
���3�%���$@�������7�U��[��^ޜ]\�d��y%���"K|�H��OT���,��B�,WQ��ػ����/�\/W*S�����b�
+�5�
����;Ã��/���˦�
�ohD��l��,���������g!P,B{r�g:Y�wg�,60��"�U�-
i�n�U�G�g�>
\N2��0
}$�$�0M��b�o�b��2�~�ҡ�k��TU��R������f�L`g��ۡ�6e}7M~.�BW�Q��(G���n�7%
�3]Ru��An�O�n_��z,��f����)�(�*�o��da�΋U� �����6з�a��ޟA
���/C��C��޺�;R��t��:���㞂��.{��<
�<�m��I��t�������篪�m��4�ԅ��ZA�ڑԊ��c�
kaz��-�ɾ���5H�r���wgj�Z=��f���}ђ �o�P�v�m��2�s�
+C���=\��~�Kc��9���ݟ��,.�B�~�����R�Ϙ�5tO���U�t�/ͺ�KCjXS�Uc$�hD�?0Z;"��w��,�i���F`�v��긱�t�X��m
:[֦#�$�s3
+�ĕh�#
�
���
+
�4��<�;0+���v��i��X���;�5m۴�m����Q�rgF�H�`�J���E
4Y�L �����C�6�b�xX��3�ۂM��t����AQ�J$@;�j~v�ў#��2 ���v�d�g�V��{�B��M����\WO�'�D�͠ ��@�����t��Z�Sҹ�'�T����P-���E��r����Wy?�`>�֘��˂���Pȴ�~ؔ��ɞ�Vp�����q���`
����u�=#u�d�6;n	�i,
�

+��q��`D�H5K2p�<��lJ�$�A.�N=�K�
���%k�d���o��{�.lpu�C���� �ޗ���~�m�6�w�-��
.{ݗ�*�Iy��R��D��hm:@%�l(�]�4rs�W��W_�*a�T�y��0�
�=9���C�2�e���k��:�,vH����D~�Ǥ@����Nb�̽��=�A=o�,��͠�>���u�ۗ�i	�s�]-�<������VUi
5ҰZ<p�*�[b_�ԁa#�F����^ֲH��p�2|
C#B�����O�1RYmgN\���+�.рp��@�R��،��}��n
�
+���g�
G� ۡ��p'��8�K�<W�l4� �
��'��~
��w��S��~�F�[�w��AHl�5VB
�~ �
M)�;��f��B
��PI@�>�-oWgO<k�_Og��y<�)��-o�]¼�k ��A�M3�0Z��5
��N\\b���`�R6�R�B��$�
�4��n~�O�Z6pBm
�1�J����ih��u�`L����R�� �
+$ �I <ɹ̨e�	1��#�@ņ"�'�WWM!=�&
`��zn;²W�2f7s�l��~MQ���߿��x||�I����;V�0�~�v�/�	�T� A^2h�$!
o������!G������-~�a�h�S�8�c�."d�}2vRh�+�|��#��F�p6��ĝs
qە�NZe��k�z=� �$��_v`����\P�Cs0Ε�%E(��$A7& ܍H"kN�*���7Bȹ8
�u<d�t�JG~���a�s;!|;����	�3p~����6��?�;� � [...]
+WEE�H �d�%
�\��k�G� s f��hZ��wg�G��eS�=���%��O!�@}%��z�5C�v�vܦ�)4]W�6 G�����4�i_��ҵ<�%xݗ�eoӖ�����E@
����,+�j���t����1:����:,�E'~.�V��E�EOYD�
�WQr5�M�HI�l��v
��旻�EzF�66���Hq��O�D(��!�D���Lq"�L�G�"a���A�π������3���y��)Ys�
	�A?
�÷���ju���$��ADVl{�.t��௚�(t���� }N��{����a �z#�u,�.���2P����4`�]@/䌾�
��}Y`�A�FI�<u7�܏#,/0�rA&eK��SA�I��d3����ޖ�Z�k���xb�ò��#��)�F�YF���B0P?J�rH!��̐t::3'%����F.
��|
&Xr7֑M�DZ�hs(a��8
J����C�Ke�I��i����T��
\��@��~�S�c�F��C}[1��H�#zITt�0N'Y�
�M�-�
+ ��o�~��
�)K�EY���}SĎ�]Sٔ���+jt�3�޺$�� 
�Lujg���'�<�09��S!���P��t*��
{�+�ј��
 ^B�	Vq¥D��c�B%''�e�A�'��_
]{Q5�:�~��3ES[Z���+��yQߙ�
��z�7}O�
���tF
��y������˟_
�����C��(�� �<��U6>����<fS�
+R�@�}�����͛�����98N �M�����W�bi
�4���%�ʠQ��
�]{.�4m�lq����Wt"7�^��վF�W^��S�{�M���o���D�y��AA�
l�@r#h�rU�?�-[\��c_N��
���
�#k�����TA�S=�39	D�S
&��k
���K�)o��~0Y�ו��.N'�>�(�
��_l��0f���A}�x ��X�	Y
D��S�z���� �"��i=�=D����R��E��H�s݊
'\�򄱇^���F�P0�����oBh��{��,��"�T޲R��a�A|BQ�m�ew��`���۝��j��)�x>�ף�M!
���Lg��-�9"��\j�YvuP�x�x=���ټ�=%NO� �
N��kп8H�=�ۡ&�$�OoJ��
<V�ҡO��
���wXo�n����j�*�<7rJE
�d��Bf�P�B�l
��b�I�fEx5n��d��\�8O<��E���Ë瞎�[D٧������T�Z�:����V�vv4������� ��N����k:UqN3?�&t:�r>u�Tv O_|>��m���c���@5�3�3��

�!��
�Wm�jP@ܖ�v}�_1�A����л��
+�������<���Li����ƿ44��V
+�I�
�"*���3k���̽��=�s����Z�Rb�r��
qIR�0�:P߽�xwu%O��S��7ww�9�>(�s
�����Q��SL�;�E��us�sw�rx��#��ϲ��Y�=��+@��i���
+endstream
+endobj
+1753 0 obj <<
+/Type /Page
+/Contents 1754 0 R
+/Resources 1752 0 R
+/MediaBox [0 0 612 792]
+/Parent 1751 0 R
+>> endobj
+1755 0 obj <<
+/D [1753 0 R /XYZ 86.4 726.045 null]
+>> endobj
+394 0 obj <<
+/D [1753 0 R /XYZ 86.4 616.479 null]
+>> endobj
+398 0 obj <<
+/D [1753 0 R /XYZ 86.4 346.598 null]
+>> endobj
+1756 0 obj <<
+/D [1753 0 R /XYZ 86.4 161.836 null]
+>> endobj
+1752 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F14 694 0 R /F38 509 0 R /F48 609 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1763 0 obj <<
+/Length 1660      
+/Filter /FlateDecode
+>>
+stream
+xڭX[o�H~���e,œ��T���6��Vm�*�} @
�������L���K2����7��*���������@!%�
��A,"��d$Xf�������,|�>��3拫��3=�âl�d�Nڢ*�
q�B¢������r�ό� 
�@1�A��}���
V�1�f�&�L!
+�up9�4�NQ��„R$�"�D����������EZ)��|�U5��X�
���8)����Y1'a
�$L۪�_�9�ۛ\
;9�!� 
+/��6���n���y����9�����M����ơ�jkq�b+���ܭ�6
���,HLv�(���F`2#����Ϊ��N�R+�k�D���1��y�j�y����[�򦨽5m��Y^�e^'�;]������_�5��ur�v�a�'
�8�wY�;#FBБ/�2rY&1��9d��#{Ym�:xڔ���If�ԃemv��C���A��h���X��9���~N#;z8h����m\�$�q��I2Ȥ	�v��V+��>�
(�rS� �G�
+)H �X�LQ@E
j�/����N��kʵ/O�>Fv�Λf�1�b���ɴ�d\@��qZ:��q
p��i
�7�}��Ȉ#���^>�z�
��/ 
Aa##����:�C�"
��:ٮ[��V�.��m�Z���6E��z��ű
]��F�d� �.)�(p
+��޷�I�p�/��4��e�����5�l�C, iX��)!�E�������������C������3�>�đ��b�X�zE�w�U�WB~�/��܎:i�tR�B E��>�v�5-ѻ*��.�7i��&��T��i����Ӿ�j�R�
���f|5G5/�������QM~��a�%D�zl�`�C*�'O.6q�J�ua�]��5�(
�9�(�ĕ%g��&� �%	_�r�L�u��B~��ܜ��EY�E��o���a.�ܵ��@z��q/U)tz'���G2O����^��kar ��)
��)�Շ�(<J��@��W���i�i��Щ��`ɭ��s�
V�
}��ho�(i ����vd��G����zp�:�<�ѓE3e�'9“�a��z�u
`�<a�YA�	�3_0$i�"4��.Y	�u
+ے@�&�`@`N�>1g1�+Ͷ� L���9��+�(Z�6���;+
�15���&��6�a�N)[5�5��&���jbь����6�H���ΐ�l�W�O�:����
���J���36��{昼
vG"��Ep��Hl�^|�\��{7!�(D�,��DRɡ����/�L��
<�ݣ
t�c��������.�m��U�l��ž
+"�/��Y@��#O�NvS�w:�d�R�ח\Y>ؙ�u:ٙ�L�i1�G]+m0�
~�BÃG0y�
E��6�����/<
z�c���,�t��:��+�*�����P���ow��7 �ڻ�%@�1Ér�,���+�f
���k�
�e4F�u�οX]c�t���� �<|���t�4cF�j�I�͎���k
�~�G���ǂҲ�Qo˧�3M��x��j�_��Wΐ��^0�7�	���K� ���4�i`��4�Jc�v@���o4.�\���*�Pܻn�v
�M���'�T�˄?���ٻ���itƻ
+endstream
+endobj
+1762 0 obj <<
+/Type /Page
+/Contents 1763 0 R
+/Resources 1761 0 R
+/MediaBox [0 0 612 792]
+/Parent 1751 0 R
+/Annots [ 1757 0 R 1759 0 R ]
+>> endobj
+1758 0 obj <<
+/Type /XObject
+/Subtype /Image
+/Width 953
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Length 104438
+/Filter /FlateDecode
+/DecodeParms << /Colors 3 /Columns 953 /BitsPerComponent 8 /Predictor 10 >>
+>>
+stream
+x^�]	�N������x����*�4P����h�ޣx��JD�"%/!
��兄\2OdHiz�
��{����>��g>�
��:�����k��>���:k��X���
L?�/�؁�#{
m_��ǖ�l�7;d8������lq�:y����b��Zp�������=�g"bOru1n��FJ�Q��:����9�r
���
�sh�d�{�{�w��)ț�D�ڻ܉����I,^!1�TB��Eo{9�=	
J�0�L�"�z?ڭ�_=���KGm>�W�
��L6��%&Ӣ�m�ŏ���Ʈ�߅l̡���f>��1\�D7�
J��
�@XH�%��e�Ed�@6e ��d�
��5BƳ�]�A2�^?���\%/��ԫ�$y�����^:nP��t�*�]!;;�v��h�9!<6�����^�~����ۤ�3�uO�d�ܬ}��v1l�Nw�l�9�Y�s7��t��P�X������e�����W
~�l�9�z�z%fET��L��_~m�ч�
O��,�d��be�o�qd_�ڷ}�u��Vm����?����ODϳ$���a
 L�²���w�Jw]�
T�zg ��fl)�l���̒f	QOjmQBE�����_����
�A��_餃U4]�$ʉ�dg�X���:���!!S��&�<���"�1QJ��u:d�R����+z����I��t�P)\)v}{�0씲�)�H7 R|XT�

+\}�ن5`�
����$e�Q-�>&���$.Z
4�bwjyzcC�}
Qɩ��j�[0���v�~����U�N���,���d/i
c9f$44�c��-1�W��
���Ϯ{�Q92>~��L���ru
+���
�^w�8
+�qƽ%;�~[��:��M�γ��S�ݪ��^j���i3�:G�W����#�+#�3b�]T61.�w�ĦqpKtm��>������]Q]
II��N
W��
=�񰰎�����[���	��9�K�~�-"���b��*�8�~zd$��ROU��U;�X-�D�D-�%�i��C���}Z�M���5U(��%�za@��W��zϽ3����C�T�o���\�;��
T.W�7�x�������A��2ϭ�����eK.
��u�9�ݷ8Z�¿�*�Q��+��
+�|��Q�h{ҥ
l�6���pb[
��	%��=h�S�'��d�O��;m��
40��JVN��E�g�(�j|���~�e_�(�3Ӊ4T�^��L��$��3g�	�
%&N*RH��
a۹)T�H��"Iƚh�,���zU7)���*YHԂX{�P���d��IX��=�~�*��!D���\Dʤ�(S�P��XI��)%ȝE
+��l%�hQ }T����
�pa�*XE�EuU@�C�-A
��ta�@R1!VvSn@�b�(������"�C1l/�&D��QX�šB���^D4*����F����tr��ZH[��^ԠQ\?l�6iP�
��3A������m�^`]7F-"�=���5D
U���%
�<
��i
���}�:4t]I�J�j���'8���[[��
(�4�oij���!�@������>�{����T��P�餪��
�nH���>��O�;�M�
F>�DZ���[� ��
���t�N
ζ^}���l+>S�� �C��_�dZ�H �~�sg�u�ꉇ�B�>��\˵���F�O-a��'�"�c�����6}�r_���������g�h8��"]

�q� ;���'��Z#�Y��+~�c��ey*FF�H=i�U�qB�P���Q��'M@��#
OXa��b�e��DܤՃM��
?B2
He���#)=�(!�
++ɲ-�
+[}�6)��)
Ùii�i��
^o;�4�`���H�c]U��/�M���-�p�@Y��v
����S�'
�Ɵ��L8��~<5!-5=-5#
i�ii��z�u�
+�"�h9�)$��5#U��v�zzډ4I������k7�r�a�NI�cwR��_�z����Wo��yqK&���� ��z
&&r��X�P6���d� vE�*��
6&Ȗ�Z�R�6�)��P��dQ�N	z��yAe�}/'"��(!ɒDJvHk�d�L���#�wJ�(u�
$�,\�U�
U�x'�MA�
%Փ�K�*��*H'�(#����Y�\�P��"R� ���%��d�����œ
	N."����� 6J`gQQR���mA���(*��/
+��*��b�X�pɡ�D7���
+p�
�˒X�k��[�2���F^F�
+�,Y.�.�np�qh]j�j�a�+oXNV)o&A���XE-A���}aO��F\G��
G�L٬���~�u"`P0�d� My�������3�|�"�nE��!*�Y���E�U
�IPD��
�4�ku�9�~���dzz����D�0"��lN <��/�A�'����a�6Y�%�k&J�W긤���zD�(�6�-�I������8�?����6|�:KĘ�줾��F������n�]6I��|L������/�s��;Ě�Y��t���|f���"����"������1��� }F��}H3fk��ނ�ʖ聨>�J}�)JRǩw�1��j�|N���^,�����CR���˲���c���a���[�u{�*���2��5#55
��Ԍ�i'���8
+"+���
ɧQ����zBk}Hn��"$ȿ�)$K��"��uP��4=�l�����J/�q�Ĥ���[��[���H�}�Е�da	��2H�zP�
&ip�v
+�$_1,ӂ[=
Qi�p.6�ip,ګ�>�3�Ƈ
$��B{\o`�qSk�Z#M�7�P�k)�]��k���L��]�b�75�|�Zr��u-��
<��TE�B{h�yU�~�*B����7l�{Ყ5�D:�y�m�".�Aq���,����z���T�)i$��S���k[B=�b����Ǩ����2Ac�Y;��6U���1�T���6�]�4D���z�~��U��I�cwS��j�Yw[�.>>���|&X��N���F2m���x�ې��c���OQ
�(� �����
om<�9wJO{��N�uz��̣@l
�_gܫ�x�$G�Q̫�>���ag�}��%�;�+ �L��`�V�n�B���ٮG'cNB�I�z
�W��=��X<LU�2ҧB�f��t��O*`{�$��!��^��=�W����?�5'���̓v*�c�Y�t ����ʓ@��nC�(Ѵ�NRsJ&ia��Q��=����z}���!��͈��8e�}Uʗ����޽
���> [...]
+%�n^>蹱�E+�HY���/�Lj�O_��q'���C"�˜�g�0
+I�L��Qg��4[ ����%�ǧUXT���?9ƥiݱ\�R�1o{H�H����d�c�Jp%��݌d�;���d���1Rki�#�#�nNJ��+1�ײ�^p�W�"B
�#�k!\u�TR�z���q[׬��t���&߿%QNO��'N$��?Oȟ�9�^�%�����-[�+
�4�շ!�"
��Q v�J9�[���	��Q���a�uG0���`
+�YF
k�z?{�����
+��%2��fU��u
J=����(�ᩮq5x��Bܒ�����
Ǣ�j�cO]D�r��@�[��=2!/3U��f��i�ɬ�#|��B���#v��6��t��ە}F��v���
�^�w�y5ҸuX�T��{����t�
�=ĻYGc��Y����]��o����%��t�F�銶س��� ��S{,�*���x'����TW+}�2���Ժ��jSQs�Ъ-eG|*�=Ѱ�i婀���ͺ�Ysw�㮛��o�1�����g�u7v<#�l�'�uH�^�b�7^��Gz}���D����1��{gB����;����Q]�Z�Z��ls�c�֮��Å�?Ęo�SM�����n›�V:���=#�ՠsN��N���	>#
�h��.����>�\�����fM���w��C��:I�)��
@x_����/�j�+�`��<�?��4P�
�C~�������w��U.
+�_���0Œ��S!]�����@��K~��+�)7
����=��(�	�!�[�	g	�J�� V҇�ɽA�W`U
����t� w
ru>�KXn�}�DQ!UJ-TB�,)�	?�b��B�p�(�2�J�m˧B�WЊ���[�%E]H@�d�p��ZJ�M.Q
{���B�"�7g�.��7�1��o
代����0>
	�-���/�,CA��C�u�9
�$DZ�.�إ
�p9�{H7"6�G�m�����z/��
��?�$��!Qz��	��S������b=N�c�2��gI�?�\���1��椚��7�o�
���G�&'ʸ�w����#��kf4
}J*ټ̫J�8�^j�E��sӏ�
��Q����It�$�9��׋��2��@� ��� 
+�=�}ˆ\И�n���>y�3�8
�lj
00lw����n/�3�����F�d���r�6�#@>	��L<��t�(!t˴djQ� ������t���˳
sƐMX��1�S�p��6HM)�r���d��{Z*�
O�����X�k�a3��g���
=�ǑC
���#bŶ^�OZ�8"
+���/�Xu���z������DQ�#G�\�(����HK=v��
�S���{�p��C
>�z� ���8��ǡ�r�F�\�T,
+�L�";�2���T
� ǒ�&�J-�����N��ivОV�$���S0v)�o��L\[4����4��SٚƧf�Iv���
��
6��W��n�s����W�HS��b�ʖX5qM��vn�8�����l��+ZNȓ���Xn3ވdKfl�o�q��鵬���3�-&F�ePg�mqz�-
+�Yw�ڪ%�
/dr5�=\��`�l�"KR.H69+K�c���,�2�)
eI�%�&^.X8��U�=[D
���S�F��r$�5	oMD��1E�I�b�mᥜ.�bT	�l�]�������e�
+�[���mP�o�'��z6����M\�|q���x��Џ�L�:R;.�������=1ˍ&M�{�
��~�;�uN�� 'he7Q=��cu9�(�f�2
���"
͂R>-�ƙ�\�Ѹީ�u
o�|�I�{иFn�8fVO5�ԨR���	Q�
�|j$�G]�6��.��	_�A���zX�x�BnJ
�i;E�X4!�J���5�d(�'�#�H4�5o���7Nyo�R�4kvl�KK=!ȿ�d���p#&2-e��r�nZ1f�R,[�=�e�.9Mv���q\�'�(Rk�!ɘ�#N�b�G¹Qր�Ϲ�~e�dUV}�U�)^OH&$��8���T���a��j=�
cϟǏ�G��Q>�@�$5�
�ӄ���
��X�!x
c
]�	H�Wi�%|N�wBz˿���)���>�k���덕�5._Ĥ���`?��
�3�i!��?��u�h
���Wr�E�`lߴ~���KG5k��ԏ��&���}�U1�
�iV�-Ҵ?a;П,AFC!w+58�}��4�;���3V�V����~��K$���ّ^���؆���uY�R��|���9��kI�
+Tr�WFK��E"mg����u	�s`�nH
����t���>��O��sFq����X��S�+����cN��Oxe����}�<�͒�
6��j�>qYZ��4d��
#�G��<��B��
DO}�FPe�{i�ط
���h!�;��Ig��+��.%��Aw^s�
|�G
5D�[�`XW�u��ը���KE�A����~����ĝg9��
��	(뭃v-��J at O�;_��ؖo1�m�6��Os���~�'>c/��R���W
�c�Q�DG�#�2�-f���C53O���Xmݤ���Q?J�<�>�w�h��R
Rc��������SUǃ�\���Y�ĕ�

�
qLZO�E6���ņ�-v��OmP�K#�؅X��MOJ��1�G��|X*��@�d<9eW2<C(�
*��)
�%X���T�ҳ�5u�v�w�����~�� u�q���R}����֬Vq��=��U�v�SJ���=����c�{Ͽ]��
}����@�jW<���^�~[�@t�V�	@�Z�L^���
+$g���ў�UOP��z�2�n��L?UH8kC0z�Q�H��p�HO���/n4h����,�>(�`�5j�sse���y/���֤[o�+6���@�7qijC��?���Iĕ�T��mS�t{V����r�ʉ?�sN���>�T������wϽ��g[����n�g�Uo�my(c��t����Y�/yC�eZ���x�V�w̨��KB�=omow�8Q�����ь��ٰ�*�c�9�e����u������G��S#�w;+�ׄ
3�}b̓/|y���q�#ީ�����:18����oy���\���?oVPw��E�
�
{c��ٵ��{���Z[�iQ���`)�h�E�Ug��=���b��c���Zٳ鹫&-��؜.���"=��i0��k�M~���F_U��[r�
	�״<[8Ɍ�S�1Qdpe0c1���/~J2
�,H3�HO
1��z3��鬬�J��Ew;��u���Ur
g8��d�
����%�I��)��`C!��Tֹ�42%�Z�P�Eݪyb��Y�C^ �tL?c�g1Z���T�_
7��X._4y]_P曤�Z�ߎ���	�9
U��Z�K�XB5�7��A�p����1)��+߼��_�
U<H����)�k�B>���� �9s�2zֳ�j���.����6�C�흟�*��f��� �]�Tp���6�h�I��T.?�/Ƹ2�EPdU^Ru'3�2�#�#7b�;���VR�jŹI��1+������1�Ѵ?��$�V/���[����
+����O-\�I�*�ך?ؘ����1_�T��5�ٞ5�	
�?k��)��>:k�Z�.t����qc�b�C���b��4h{��\F@�hC��kW��X���=�i�$A���>��NFh�B	����e�o������g�/~:5M�_x�V�~��%؊�_�8M���HH��2Bz�io挄3��iИ�&�����~���V2�4��i��M7���.�W��sjT�~f��O/S�L���
*���pcq&�?-iߒv{��S�����������o�N@�
��t@K��ݖnSqǀ
f������ĺ��ݺ5{㇤���V����W��MN {��$��E[v�i��n�g
�����A�?�>k���&~����ވ}���][�_ޭ��)V��ES iM66|�#_���$Py��X�i�%����{�(�fC*'���P��|;��:ta�@�z�DIa�W�P���+F����|-a��y߼4�������<
+UF.\��p��n��B?z���Q��
��&/BBI��9"c����B%�k��<���>���v�>YW�|^�p����&�*]i�)V+n��T�.Fk��bU�f
�������*j�<H��w�<����i�T�D�	�uד#B�UP�w9@Լd�]�֣�rš��N��Ǔ,z�P���bu���0�Ө���;y\@�@T�D�v �'5���
D�t%S�f_�C�H����ط��>H썱�{.�	#�e�ܭ��y�A���#�v��ة��H��>�IQzl���}홂cp�q
�-ȸ�kak#V��rw
v^��Ef\V�;�
=}��������Ka}�Πy\櫘uO��*�N}��|W�}��`>e(4
�2h�
}�!i򐼂�O=�FMh�d�����(o��Dַ�ˑ<2Y^�JŌ��G
9U�t�@�V��OB�<�Sו�)�1Z�"��"��
OK�.	'�
+�
߀5��~�,�vB��
i0���%� D�5���2�b{\.����%�ȴ����@
dQ�©��t�0W<.l]T�L�^
HMc�6�`��.	7�;[}���pre}��Nݙg�Ѽ٥͛7o*�&��4j�X��.i��l��JWhE���O�}�S���<q�K���owե[���JLY<]o���&uz�{۵{���U�FϮ
t���.�{�҃���.�l�Ko�r��K
��@�hߞ�W�~��:'����U����N�u�z�X�
AF�]yAQ�� J
�v�'
FB$С���tͫ�)�� /YNF��]�^�$����
+?Ͼ}V�����,+ڪ�z�7c��V!o�}��a�vh��-�e[Z�
:'���t#��O�
+ob�wyf˕RDG%aR��&�P�駋]?�ۓ*�JJdI	#���̚���
��l��ѵӛ+�6l��$����
���C?;�
"֝<�W{H��D�¢UV�
�f�w[W�bТǢM�L��|��#����$
S#
���*��;����B��rsS�8O�ǹ�:����]c�u��Tܣ*t�����nod#��w��F+�. ŵ����N�J`�쭏T�q��V����a��}a���g�Q�y��m�u��Q�z\}np\���WK40]
�������x�'���\́�MK�ca���6�JM��<=)(	�jH��[IiPĪ��
ꜮK�^re�$&�
[l[M���*����"ҳT� �ʕٌ�l�e�Zpi�t�
�2ر�Y�^=*m��b��\�M�ׁ���/p�7�����8��!1=53���8��V_�ϱjMW��)�����Ʉ|u�
�8d��,a2�Y��
+�n(Y
m��>��
+`?����	0)	
�2�H�'��u��8|��4�� ���
o���
��
�+��ۿ������,=�� �ܶ��|����(�m4�h$���h��xF�!C�yz旻�
KQA&6*����e��"�X���߽����Ժ������.�+s�R�Tl�P������"�Rm�=���mHJ<����&�p�헞{�����#)��/F7?�C�s;������/�t��O���;�ٔ����-ϻ
�e�u�$�ۅ0	+\d�z�l�����S�6Ϳ���l��|��Uu�_]��6'$����W��=��`��v������g�
�����z�zX�������{ˎ+��6%\ܦN9�zm�`��[�>�v���/��o?x|r2)�%7�\�

�����L.��}����橻`3�q��;�<}g�����I�d4��Р�$���dP7+�
c�=�B���Y���K��%�;�{�b�a���nܚ��
+��� %�}�7�r���0
薼���k_�(Q$�~�
8��Y�.Wy���;�̪o����CyYHq�_�V�XR�Ǻ��N�pϟ�r&�r��('���:�

�
d2�A
�ok�P�n���Pj�,
7�F����/v��_
t]kl��گF��5lqN��

Q�9Qe��
t��ub]$ۏ�{
PO�����죄o�Ab颍W_�#<ֈ�8c|QBJ,��L6T+��:D�]U�ϘD�eFX%J�ay��dI��H$/��2t�2��)H��=���*�J��\�
L�����Ęi��
ϖ�X�)/F�1U�h�5_P���[nn�'��2S���#� [�P�H��(�
+�Zl��>1�o�b�ܯV�&-pAL����s���'G2�!:@���Iœ�%'��Iŋ&/�X�DB���%2�Q�8�$/F�U�?ݗ�|�߈z��_���8j��d�	�%���H(^"Q�)�$�%"��E��ȩF�y�W�/W�����;w��1p�����O?���/����O;wn�v��-[�?p��1�X�zV����O%v���9���������q�$Vn���zY%ɮ��g�Ř�ik�ľ��ϼ{�IH�{ѣ�,�,������O8���us��M
^��l:���<������
���g>C��o��V�_[�[����+^���7.M���ܭ3﨓P��>˶��:gR�E�.ߪE�8�eD���y���mJ��
�,��u��k�jUd���Z��q�	�|q���{����s
^��+����k�����V�{[�P�B%��S21���z$��f� ��O&,}��9�-��j5���:�}���  :Q	�oz���Ο������o��Ǿ��Ճg~���>����;�&��e�
Qs김�p��7mM���$n���HF��{�z�p"k�:m�
�:���5�L^�F�5��Ns���]2bO�Sk�?=�a�>b0
�8��a2
����+ t x}�]�>GD9�n��4"����Jn�afqk�u�Z
�j����F�;n)���	
̳m�V�N��n�����ie5+�d�)��FhѨ��
΀�$ǁ��oZdQ��Zf
�9���}�
j[)u
��!����1�l��(ԧ��D'@���~�ȧ��M�L���}��I�֎6m��S����޽b�F��i����D��� ��h�ӆ-�H�!]2��|d�.2�ʧ�fU^^t��f̱pTF��\zvò�>��FKr.jzژՓP�b��t����f�R�ŏ��
1JM
+���Y�����[�P�Ȫ\�t�ޏ

X��._�J.R+�B���&R5#R��]D����\����k���D6g)PȔ!\9bJ�*\���[�Tb��I�J*Y"�T1�����Jb-Ak��9l_���c�UR�JB����KK,Q��l"�x���"��6a�e�n"?���>z���!,�����v���]�����o�~��g��۵�؟���z<tY_&��U�˨���m�W|��ך#��
x��}�V���x�
���Ҋ����Q�E�W0���1�ZBv�F��3�{�uK׋�W�&�=��Â�k~���^o�GA��U�wo^��k��1a���%Թ�˹	]{��#.O�?������<����yӽ)�bG���g�d�y���7���s��>1a��/�K�K�y�^���
+u.�<a��n����W��n��6Pb���ʨ����_����6�M���
���qw�yv�>m�v�m��ُ\5����o�
}�����޺���
?����������I<�{=�$��uۧO9b�Z�N"7DQ������Q�w�~*��;��Ukfl\	��c�%��Ѧ�|��
µ���5��?
lB<�T>
<��C1�݅
8xPV,�;1]Ms��#de��i)$� ߝe	�/y�&�T�(�j�l@�u��q:u��b���
+d
2_~L
cU-�x`�I
+<���\� �~"����0���K�������q��ur�K�A�~��� P�&b��th�ǁ��ɤ����kԗE
��/v�{����8w��v��
�
�F�n:��)$|�Z@�Z^�X����j�����n�(1�l�Y�#vHcc�W�)����`�k˕Y�1�!&���Ƭv�
�ǎ�1�>�x
�ʐd^Ǫ#..�!֝.y�ԅT$O
*�
�R���L�BE�
%f/Z,�H��I.RAn˞ۨ��׈��X+ɵr�6U.�k�6��k�bb�uQ	� ��œ����X��E(�\��E՚\g�iz
�gȵb��HեU���$$�(]�p�R�K��H�R�˖�Z�t�¥��Z�lb�2(�TF���zU�?z�I+�i�#�=�ʔJ��P�l��2BZ��e�ʔ.�eK��B���r�J�@��K�iW�l�F���,Q�$z4a�x�����w��]�D�b%J+^�h���E��ve7z��N�8����4u��s�ј��7��%q����
+��kt��ǂ�E#E�R�yr׷ߌ�hY]ƕ ����a	�
itv��g��44#��o��q�2����������x��}J��Z��}�JȎԽqN�E�����*d|�N���_�ݴ%s�X�LbF���딮%u�m��Z��m>x
n�mR>L��/��.
�]�.6�1- #�v�
	L_z at NvP��V��n�󛶜�b��vm�s*Y�
�z�IO��ͨ�
z��$Ӑ���gѤ
�������3�����'���Ye�!�˺p��'^��)��E��~}�3)�&��])�Ư��BN�W\��Ͳ�
+BiV�[��(���ޤ��	��xC��m�S���C6u�&�
;�ʫ=���N�z`X'�M%Zw�=1�q\������rMֶd"B���P�
k^�%I�t�C{�{s?�mO���IX�Q
+�26T
�|٘��ā������|����M���G��]ys�NH9<��qa��&߿�j��(�B��&G'iN�l�vv�
]T1֐��7�����6^-�F�0��TP�
t�lR�d���xn��נZ���g�%J�Ȝ�tO��z�Z��&�q��L�D
�,�XY��j�-�8��aZ��>�I�n��1���)O��P�Ϙш5Y�q2\2bS�d1͘��D*�� '
"�o$d-Q*�PF��%�+Z��X��?��X��������*kW��%h�03#���I��iI����,���OP��"E
'+Z�
���
+c-S6��`�b�\�"XA�˖)TN
M*W��²�cM��Z2UEd��+��^
A+D����ƕ婗�-k����~�!���
��כn������ٽ{Ϟ={��ݿ������ҠT,��2[޼�oi�m��錫j���8�������m7�ˍ�Fg�ۨ�x���W�:���v�(�_��!��e���׿v�=�WQ^
�o�
�����2P���qu��+��
�՛��]���K�'_�vo��QB���X�j�(툐�ԢhZm�W��/�l��%>��w����'v�]�����e�仔�D��+ �ʑ-��X��i'*�vE��5�b���2��悙���z�տ'���h�R�
+
+�파���',y`�VL���ӷ}�ZL��M��N�||��<5KpnDl;����-CQ�˲b�}�M�������۪�p���	�����v�R٨<)7����#G�Xz !�����}�룵�����-B~�Rw
"���D*�~�^D�k�$ʱ[�
{������q7$~l��t�?Ѳz
+�Ț^���l3o�v}��[�?���]��(�yg;��z:��#�u��
��������J���mi
T7c��<����R�2)ShyT�^̓�缝�H}��e�a�
�.�I�x
�fX�H���V�-�<�Q7֜
�
++�n��t'����J
To:
��z˱Μ�C��
4��,�k�1="!cic{�!r������ؕ�^�T0n"�^zi�{v���
�7�f�1v595P:)������.{i�RVX�NGT���;�2��ǜ"���2�*��
Ǟ;���G�z��<&Ԡ��u͘���I~��!mjnƬ��*Z����N̊S�
��Mf5��k/g�J�����#g�{������T�X�L����
>,ȭ�P��(�<��3q^����0%K�	l��*(�l�h�dX��ZXk��떔��\�L��e�K�*V�Tr���eJ-S:Y��
+�`�(P�t��0<���`
�Oa��
Q�l�R0T�2!�L�b�g�r�J�V������W�†Ơ3F;�"y�Ӎ&���sG?��
;~�A^�4KQ�k�0�r�/Xr߰7(�|�)�������X�^Zѭ�tBCL��{d
�o�Ҋ��8Ml����6�^��q�T�#�W�o<q-Vv������##˥������5��»�0����+���J$"6�]2F��1��c�
��bJ��O5}F��NH���D���i��Gz̻u�ӭ�?��[_
vEy�{�<r�G��2�嗵��,���/{_Z�?̬���	�y�c¿���mK�]�6�)�Ÿ�>h��K��<�v�Qϊ^,@�6��}#��������^�xU”��N�����/^P~��i���ϻ7J�ﳭR����%3~߈�k�ӨҁU��c�|Q���_{!����װ�c��27ѮÇ�����2�v���>w�WW/��%�����:&���e5�-}��M~���{6�p�V ���Y��{��G�u��س�y
����#�l��
 [...]
M�3l$�aR�? A�bї%IU�~�"�6�i��k�q�	ɩ��IJ����
]�@R���e�-�Yr��]��0��+Q
+�'�Al�83�05o�`��Q
�n/�_r���Q��W�
�GU�XM���A+�w�L�7�T`�<D���I��;����r��rg���›��	��g�����A��[Y��R
�O�3>�
xu�=mZˠ���$O�=���O��w����(�fH3{�
��O���@ܥ��/l��+�G�T�zd��y��
�cL��(�
+I�{<5v~�e�vQ1�cĒ#K
���b�r��H�B�T�~�z* n
D����j[%j�^���

tAݺ��Үt���-vC3�,�����#��3��&'Lxah��?��y.��CF�U�n���n�DaU��LZ]
+�l!j��>
�׆��X�ѝ�H(�x*>\��=�R���ç3&�y��
{O���%"����k��Hjn����o�ɖ���F�����;|Û��r�ƌx�����g�/����E�z�+K6-����b�#��
a���Uِ||��	��g ��jr_ʮ{�Qܺ�b#ߠt�M-zS=��:*6%b�O�"I��DWQF����E���R2v
��.T:��
0ݮ���:d1v�v͂���
�(N�ɥ������)H��Ope�"�8��L%�E"2bRrQW��vه�u
�"�E���u�
dW��\�9�:	�b���Ү�N��"A�3���^
t��,��P2F����*b~0�᧨Q����yd�!ͭ�+F���ם9�
7�~��x�!�����:s��
+���p>¼�

~~=
+WãD�J�i�nc�{�� �eꃾ�PE���_j`ƍ��e�/��du�<�
׏4�P7v������ǜ£u��w���Ѕ�d���y�eY;F:]t�����CR�]��P�T��w��R��~Y�	�,l�-��2vƬ��l�Θ%k�3�f*@�Z��-zM���W4:1�̊%ZԮ2y�
�m<���O���\�n�W���DټS$&�(�g�YBB� ��
@�Vk�X��
+jL=�3$_M��[tHˋ�Œ����Y
����՟�i+���Ū�,qn�z-���q��_�
��"D�>W6zKw��^z�7C&�2�
�
,&%�6�[���'�9�c,Y�e9C����� Ts��!f�?u���кo�:c&�pW�]���4h��ܩٞjERY�C�����z�SEK��W�l��T
X�<A
+T��mӾ���6♋
~�sU�x
'���A2��
n7P��J�yIJXS�>mW��}�@��}����Z�0�1l[�L
}��.J��~z���ogB��^
�&h�h��
+\��!]'��Վα�YKVI��Jc��	�^H�i�HuiX���i�n�����v=�+T_$�鲺n��J`G�����J��`Z�Q�7��A8AE��ųW���1X7 /���:'�r �
;�ُ�~��f_�~���cô����B
�.���
;
;W�6�ق]��aa�P�L�.밪h{��4�g�*�z���h�||X���2�d���RLN\�13�� YzF�vV
���܊�k6�U�1
%~�[�l��T*]L�kن�\mu�㖡o�g��
#5x�Ƭ*ޅ̽�},�F�9Z�
+
�Y����v�q��ٕ_�/��ĻMo=yG��2���-�2B�	�/�1"�a��4*�/*u����6��f�Z��,`Ut�&I���ж�)EdI�D�,J@	��
+��+C�%���?1˺�tL�A�5A

�<�8����e�����w}�p��ӄ�3�T%�OP�+���r�5���Y�^0`I�EFk��G�e�q�T at b���(���LFez{
Blwy���IQ�~Z�z�eCyu�"ۥ�n'���C�l���
}Ǵ��������{7�Vط���$���
7 [Q�U{P�S9�Sy��kM�]k�U�.�EHİ��#&S����A+A�l}����~F��4�4��xmp�s��	~f�Q-Õ��p�(ɷ&k��l�b���PXb�
+?�|�+|
Gc?����ꁥz����2/
|�n��*vY{��=�Hv�is5�
�m\
&���M-v+."q����`̊rZ%�{�U��'�nM�TE8e��VF<�t�Fb𺌴�JQ�YY at JP�
�!Dh�<FL�ԵJJc���*#��M� r!+�U�
<�
7����0UWR
RL4� _[�m'��hPx>+���%+`?
6��졁l�v���Z�k���\���J��z�I(���#�
�Ye���e�J��N�MB�L�����OX�
f��+	��DSZb�XB�;�&͒U�m���X�D��]ꪯqm�U�Kk˩C},�}��
�հ�QI'!�qr9`


�q�q
1�i�rj.
�2�����L�XPdŕŔGA�i�2*���1�aS��8�����d���f���C�
�W�P��j ���r0͠�Q�Rݪi�Yx\���y�ET@)_i:U �9V�V��/4q	�7��C���Y]�t}ʿ�Z5�/���}Ç�Q�
7�I`
��lL��K� x
+�f
4�%��h^�QR=�E$�Q�	�P�UD��ل�z��NG"��UQU�����hm������~����9���W�c,�۫�����N)t���bG�ve�L*F�� )���;����d�ʕY<t�Z�"���^���%�ɮY��4�蛆�59��x�QE�O�c%͋1۝�c�(��zN
+A&c�qn���A�k�>�E��t��J���t�ej�\�+��b2�(tY#lq9;��6��}�9�۞Ԝ:�P
?
\�[�0��t�v'��u^����+�
@2-˟*Q��U���ꇞ���e��RʭW�Q^��
���ԷT�m��i��D6fY4�n�2pD�M�mY�$I!dF%y2�K�(+�$H��{�vu�,Ƭ�_�C�:
$�M:b� ��X9�8?�/2-˨��
K� ��
Ӳ�F�
�@�(�_�
eyJ�WR��v#Q?��C���5]�ɴ_
+�X{6� �������̨��~Y�D��1K�^�^�4d;$Տ� ��7	
+�\�h�)7�|l?����?&����]c���a�he
_�l��|�4�nR�ݧ���&_��.D=i����t<���
+�m�

5��g��g�_�0,"A�BUe
�l�>ޭMx�[��a�
+��Na����G%��[�4�y�ܗ��V�l:���y��8����0oF��"�t���nU
����(�y��e� ��Y�+�Mtٺ��'��[���Z��櫴W\�0ICEU�#C��H0�S�]M1�:�x�)?_]X
��D[zΘ�e�7$+6l	�*c�>�r_J�����\�2����;ΨI��v�yk�=�
�
+
OdՆ��,E
�����c���?Ev:s�y��
3�ֻ�0�+r,Ζ|���C�K�eZ�ZW��&���k*�������7(i�L�/ ����G�+̟�;�_�c�apQ@#��*�F�}d#*ɒ3���S�Ǖ%eU�
`��!J�2j|�$hHbS�UW,��< F��
|���W���B�X���m"�2:���c��{�N��G�Ɲ-���Ȣ�����R���9�;n�������c��1D��0>����⟶
� qW	k$:�sʎ�f������M�е�X��o��Z�
,ե�/A)H3�9V��F��(6���
���
'y�;����45�
7�:�kf���O����$N����G�%�1c;
�UkA���[W�,��x�P%�3�SqC7���
{�:�3 dc�q��h|Q3��-�f��U�j��mW�#2��.�k���P
%f�Qd��2ٚ
���%L�DqhK��Zg�.%���h�e̦��~jB
�%bD��<���
��E���pɐ���~����B�,+@_V���db�M[�4c6�2�{�t#]�>
��G�>q�j�� �,ϋi&rLR$5���C��8��8�{�i��,@��t�����70��+e�9�&GU,�sQ
2�u`1G�Dȱ�KZtTR�Z4��Ƅ�i�1T�t'6l���tT
�
�ZU����JBL at JV�nA��GFL��È�b�B�bɱ`ĪQ�]2oR%֭�g��G�ch���[]t��
�
�49c at s
+�
ZL��)��>J��%ʖ��k����Џ�R_�7>l^!���
͸B܌�����
�0��4^7z;0Ϡusq�:u!j��(j�V�7
y���8w�k���N_�֝!6�-�,�ݤ��#��24��]	�3��tY���"U�0䒳�_p�`�
�AF�\rw�d�}�Qo�u��-��̶g�U�I�����`W�;b;��94�k�>X��Ω���Է��
"�$o�����8��2
C˸+ڞ����=&���f�S�,��٘X��ʰl��=Y�UW�����#�n~!�d]�.?f�1ӝW�Q����Lrɐ%L
,SaZl��� n�M�jâ�PT;i�&��t��^
�ˠ��!u����:E�g%E����W�e�p]v�a�����j��v�k�8Ujn����ĕ�b�
c�A���5*N�Ӌ����/6c	r�
,q�B�6b
�
Ed�sG�;e2
Y������c6H

�T163O�+r��֍����)���b�Ѹ}N���$�������▂
+��q*�n
+5�I�fu���;nz
:
<����t
I
7�`"fL'Cl���sϥ���9����g�:F���B��9��X�����s94��֍(�e����To;E���x����BʐNޅ���yּ~Ǯ���*`S�mP�)qnl�K���-E

��Ek�+�8b
�96^
������q��XY�'jQ��
�*�U��2)d\fa���� �cB�KُD��P�D��n5f͕�ҽoq�&j��֪U�v�p���G��
xJ\RB�3��w��n�[n��o���䰱�	r�*��o��a��M���Y����ʲ�w
+J��'i'�SK�qK�Ǚٺ.�$��#��6�TM�A���/?ۋEi��'���9Ə�C6
$�8����J%����<({d)@{4]&%�J�G��y'ѝr�MO����d<���I_O���I���e�&W^�8
w��dC4�Mv#[܏Z#@V�PT�{��6������Q� ���;N��k
"�L�-zkN��M%��z��d
`�*�<D�����g��N��)B�.��͊g���3Yg���ԗ�XH�X2� ��x?�.� u�
ꦱ���bEx,d]V����v
$�=�Y�Կư��B�u]�X��B��b��
�4�v@"Ȏ�����o��؇X��бD�=���3��G!X���J{�UwYK�� ��nv�S}I�m at _�$@]�֕aIS���T�qsPx
��`�
d-:�j�����*�[N
0Φ�����z�Uw[�b79Ͼ�Ɍ�s_��:l�q�e1h�A�?(��jH:
+��{x�e�#9�eߚcغ��]�qov��q<e���O��)�5���1e�KF�ƽW>����"UD{�C1jkX[��R�U�����g�}?���V��N=%UU�DY뢖
+i����B��U
&?X�?�K���R�A��3���t�
+k���3
̲��T�T}�z����QйP�v?�������\������]�ʭ.�V�h!u!�$Q�
���
�c#C�i��
+A�qغ�(̼�pҷ6C��sT_��U?��(��$�C)@�Q���M���y+6+`�U[�F/L퀄؀-����落�
Y�mg ���go�q�/�Y��΃���T�W���Ӎ���j(�nc��Wf��i��p���_暈[rx��z/���s��Ƣi�����
�A�ES&��9u-ys8Ջ�L�e�~ |E��qd3�ؚ�ˊ�Fi>	5w>����C+�Ү�qT+v<��
�捣���ު[�����X��@CM71�&O��+VH	�=�
����,+��{쨰Gz<�$I���0��1�4/�-b��3T�����K��QǮQDž{[g��9�}�[]����u'��U(|���
�co�����9�C�`��>vEݪ�����O�t�2���O3�̈́r
ⳳE5�
�eg
��w�,(�U5
ⲭK���W.r����N��
�ή��~%�of~�!ӏ�p�r~�-d�#>jf�<w3�[�\0
+��*�̬��֋�M�2Vsњ�V*��D�->}sPo(,V��+����C��3�c���2Q�:9���Ml`�k�_��V����Z]�Ƥ˾\���ϼ����f�3+C��2� #�0� #�0y��n�9s�??��{�0q�B�K����������U-����w��y�o�'#�0� #�0� #�^�6�C����_�~4�u������ʔ	;+Zq]F�`F�`F  ��/��2X2�\p�XF�`F�`�S����h1c���ՔFG��8u�[fF�`F�8�L�>���7l��hSژ��>�A���F�`F�`F�`!`��m�ʬ��
+
+���#��V��\�?�8�7"V̮b��
;	
+��&�
����
̴����	0Of[�P��0� #�0������V����6�ϴ+��r��U�+W9�\���
�)^���yηn�X�C�7i�.�۽�‹H���ǎ�o�(W���������h��*��LH�D���7�ts���Q��Y5������ B�W��It
�3��%3}2�;K����2�2�Vh߹ #�0� #�d;�	��hd��������`��^{�U�T	˻�y3��ֿ?�8 at P�"E�E�;:���'�
>|X�������Yw��1���Gjj�wu��_�X��>_���9�GL��B��Н'Nd�zpE=0���6J�Y����6]��|B5�� #�0� #���tٲ+;ݕ���߰,��V�X�J�ʴ���*����%e������6o~�g6hp�/�J9��[���
+�˓�}��u���3�_u�՛7o�vW�Z�5�������gaָ���͵E�&ϝ;W���������j6���}����5nBu�M���?_�9�����uv��k�FWf�ͻv�:xP�Z�j�}�]w�����B�1cF��W�sϫ��C
:xP�����V���������W^y�i�K�rƙ�.���g�+�		�f�+����Î
�FI=0ʗ+�SP�R%��᩵����sɒ%W_}
����v|���ի���
�5~���扦�_,^������_���(��sXΛ;�q�� }��M;~<��3q�pF�`F��e)v�
>�� �r���
�U��/����7�y��+W���ؙ�;��1�ܟ}$;���o���_>��'C��d�o�=;W��j�7_c����Eo���wf��ka�u��+U"<���c��M~���_~�
eRRV�/_>e�
+l��7��׫W/�2*V at s
.rW	@8)���!�W�Hy�mڴi�?iW�G�
��ȥK��P���#G�;��'��\��)o�uVu]�_
���>_T�P����������
4����_xaĈ�.,V�X��:��g�}��E������I�d�� d�;c>�kZ�W&L����Ӧ���'�
��+�Ё�0� #�0�@!@�-���N�}�r�
�� 3d���`mޢ��9�a�O
��?Ǐ�g��WT�zz˖-�1p��S�dʅ<��{��r����>�x�?֭[���ͺ�s��`�QF�ʕ�T��5ަ���q���?��5�駟v�x�%D4�NJ+�w�))�Q,eŊ�=�c���F�.)\�Pte�U����^���ip���?�����n0�
:�v�e-Q�Y�&O=�$��Z�'��k���5k`���
���ڵEɋ/nЩ�]���P��sj>��C˖}]a�ר�񐠵�9�x�K.ix�95
���u��

�~>��K�.5��=Om@�Twl����0B������c\Põ����)
r���bF�`F@���1ڲ
�_�
�XB�Gs�.��3��L��D澭[�����o�Q�\Zx�!|�?��O�q��-47p�S���?·��
/$ib�mX���ۜU��%�Ԩq�{�	s��+V��u׶QҤ��>6m�����������A��w�iִi�*=ٿ�W+R�>�xzz�=ݺ�
�bh��֮�㎻.�wQ�s�C��(�.�@۶u�ѣG[�U�
QB���k�~8���矩�ƫvt� �֊�R��ϧ�+�z���x(c�qOm@�L_���/���2�
%�����;�O�gF�̎gn�`F�`�0�1=�i�\�Y9�*'T?����q�g�i�R�~"]�����|�������/
.
�
rt[h�R�ʚ�#,����TY�C�3�{�
��"����@H�6k
++2�ʍ5*W���g��fݺ�+W�CNj ���3:w�<��W�

�ꄉ��q�H�;�:�3��9�?��y�%�s"]������)�

M0��̟���=k�����Ѻ�2�w!s
1�aժU#v-x�fB��0� #�0َ��*�~yŌS^:P}��ޣ6�=�fɒ%��5�2W��$>��nK�{�Y���������6X*����?���!�xv���m۶͛7��c�Ƨы�>��������6k��A���9�ȑ?�ؐi}d������T@�۶m=p�@���C͚g�ٳ�
D�áx��˖-��0O��)�֋(��!?�O�s��� D��ex���a`S�
�5j�HJ�Őɑ�F�`F ��f�v��(��)	��,���Frr�>}z�����{���;ڶ��Y�?
=zL<�c�v�����u׮�R�d�o�S�6n����ɓ

+�L�j�D�O���=�؛����y�K{�/�MÆ
��(}D��O?���CrF����Ë.��X��qi����<���˖�s��t���.k�211) at�H��_���;��W^����QϞ=�|j��yA8z{�t��1 B�C@��`ܜ�Q�Ni�#��\�A��k(<��Q���-N�?�9��7�%F�`F ��f�1
ɒ����-^�L���zp��'��y���\s�ĉ�-So 	�.m^��Ŵ^��2bij��~�u�_��Sz�zح@�ʕ�aȐ!�opA=84gƆױC��v�g���G�&���9sҮ�����U��еGz�nҴ���t�Y�����B
?�+T(?zԨwf����_{������!	�����s��a�]��ܹ�q}~ƅ����1�"�t9S�� D>#�c>Z�0����A��6m�Ŝ���ƅ6fF�`��!�ɖ�V��}��W���������/w��b�H?~��F .V�YӶ�M[��
Ǥ�*raF�`F�894��鯿<w���v�p��5k_�|��M�W���ĕS|�r������X-�϶��
jQ��6���O��F +�ӭsn�6���!�PWn��-̕C��� #�0��)B��ŕ�>�e'W&�lp�N���,#���\��-�mb�r~;��F�`���@��z�]�:�L\Y���D9���yzp-F�p!p��
�ig�%3�3ώ͌ #�0� #���I����dN��T�	#�0� #�0� #P@�T�aA�bƉ�06#��w�#w�`F�`F _"��2P�3��>�u6,�]�`F�`F� !�9�E���r������7��o�rƍ
���>ӆ!�+/� #�0� #�0�@�Gி�<�
3���gqe�,��?|>-���=dF�`F�ȧ��}�;v�^�j��ݞ],T�P��/ix�Yg�ݠ�}ĕ�99!�ƕ�Y�HpXp�̕���n1� #�0� #P0ذ�ŋ^uյg׬	Z���.�Xdd�
O�d�>t���ߗ˖^q�7�bre �3�` ƽdF�`F�((|����/jp^�څ��N�����㩩�ǎ
=z���#G��V�F�(��ɘ�G+-jn_b��������dF _#0eʔ�/���3���_���;ʝcF���ii�4i�s�G&�X���. at I?)V�8E�%��`��Î`
+(k֬���y�������'
�^�z]t�Eh��?��J�{��8p`���W�^�v��PQ��nhC\�`��� (rѢEC[,T��$���"Ոc�\Y����B�rF�`�1_~�%H�o����_?��'��eʔ���{���O?�t�ĉ�n���N�R�J���j7�!.�0���E ���;���>�HL��f�S{�uF�8�T�T	�q��������C����\s
���?����OϪ>x� n͚5[�l9a�m�c����a�>��z��
��n=��3Z�
+�۷�G�
�{�\0h� 4G����7ވ�s�9�l��j7T`F w" ����u�^�m��t��Ebd �c��;O2k�0'�bŊ�@
_74
N
��/��bΜ9p� �%]����׏?���_���VpȐ!˗/�6m�G}���߃�f��?��o���h����|8]���[�X�b���`d�b,�`�\� ��7_�ݷ���u�"���۷y�e�d���1
[ƾ\�EV�`��� ,Ǡ�M�4IJ���ݻ�^{�g֪U��\�lO
0` �͘K׳gO�V�S��.î��p�={v6����SO=U�v�F�=��C3g�$����+W�+W�v�lT�E1� #�;�f��C\um�sΫըIӃ���~�MU�,�
s[�ve��<�f��y�Y+F�894h� �ྈ.��/R��ׯ�ҥK����}��
�=��?`�N�:T̕6`HFX"��
,��?\&��D�{��?��
�N��A{�.�%0� #�/8�j��[_%��'%����U�rF�k�_�q!���ˊ+�$Č�`��/�w�`�C ^�}��ƍ?��ó�:
�a'�뮻�����k����G�w�� D(�������e���C#~|zpiF�`�lB����OĂ��\�h�T{�!M��H�Iʄ,x�d�`�lUΦ��bF �"P�zuPdD���oݺ�ab�]���ց�P�p���~�-�ܼy3m�L�"E��ߏ
� �}v
��i�&�
ړ]�Y#�0����[7l��*x2n㔑�8^@q�n3� #`C ��}'O��pl
.|�W�p�R�ڶm���O���[�a�h�%:u�bL��������sυb����w�v�?�m,~U�㯺�*�;G�q���r�-���
+Do7�MpEF�`���|V��+����DWXIF�`N"�˗饗�y�
�tC�	ĠЍ>���O��
y䑮]�b?�Z`bb�=��͛7��U����^K�50��X�������_���6m� FG�|�q���V�"#�0y��b�����o����^N컱A�N�=�c��y�?�3#�0�؏�-�o�9�:pӌ #�0���g�E�╏����ع+�U���#7]T��

�6+8�+�_�V�$#�0xY`
+�Ν;A�njs��78�Ì #��J6��s��ֹ��ZW�wޕ=k��Y�
՚w�z�=U��]�q׊����%-װ
J�1lLݎ�+S	&ʹ�\�R� #�{@$8�C�7��;�D��'�|2��ʚ1� #P�8t,��Ѵ�X�
?p���?R�
�^�����П1H0�O�*j�< ���#�f��w
�nj #PP��ː���c���/^�xAE���0�@
G@��) ��[$���}��8�LF��W����y�\��'����/'�Qn�`F�(� ֐]M��m�GSX9==��
KM��؁�J%��,_�޶���|��M����C�����gF�`F�(�H�lf���+g[���
0��`F�`F /#@�H�9|�$OQ���Y���i9�����n8����<��O�<P��
����Y��ԩӥK����7�{_x�u��=q�C�\p�={���_�z~��'�{�%KpilܴV�Z��`}L
�_��EU.�_��*� |��w�ׯ����F�lذ!>�?��Yԕ�>�b��bF�`�1��E���}�
s��_~��ڵk�Ν���
�J���[(�b�
+lG�
�g͚�I��~;f̄VA�*d�*V��W_}e�
��iӦ!�l�
=
r�-[֫W��c�bv�1���iҤIo����ᆱ���C8�r�������1����[B��{};w�С��,RET�X1����0� #��DkJe-�YcI�i~:Z��+G�ƨT�RF�w�yH~	�n @(Y�\9�\�2��@	�0Z��۷]�v/��rh��>��U�V�[�ƆY��_����>���_�z�g��݇
��W��C �H�{vӦMa/G�.-�O�OKɒ%C������$�c|[@vb����w�q��,��̟��#�0� #�g�0��6
�����
��ǎ
�3gli 
+�g�ȕW^���Z�?���2
+c�]�!|�<+��۶m�����u�]T
�
8P�^=��
O{vD}B��
8�-[vÆ
�/l�#H��U0��+j>�9w�`F��/������
X�ED��$+�\H��
�2��K��c!� ��v����vkd�ںu��_W�
;v��4-�g�ڵ���K~ �t��^͚5�{��ۇm�����]�>��hѢ�Á%�rʗ/
1�HOl�:�w3�� c����0� #�0�m[�S��1�PR��I`N�?��3�x0nܸS�a�]�����)SS����zΛ7����w��a�����ر�c�=v���(��d�b2������S�´�/�ƝbF�`�	*i_��++�dJ�'�hnիW�Q�F�-0�i��٨��Q�P�,b�2���}<�S1��`�$?�ez¨<hР�5k�
=Z+3`����ٳG�t�aT�v����϶�ו�s���;�K�������w��3g^q����4�<#�0� #�G :�$�&��Xٕ�3�ʖ�r��}�~o`p�� qX
ܱp��Y
�
M�4	�֗/_>q�D2�N�0�͇
2���R�  �z?�,

�8�%����� �M��n7T�,����Q��r��
���X�
�+��O?���y���6#�0� #���(��Ö�t�P:O�ܵk%�!j�g�a��1�i�&��ޙ(I~�0�b�1
+�UТ]�!��ͣF�����8+�/Fܺk��a��`

;
Uڶm[�B�3��z�͛7G�
���
�O�8���������@�������
4���{g8*��Ҹqc�Q1cRIx�cn(��0� #�0���
�,��\�U|e���
����P̋/�.��K���S�L�h߾=\F�
IbP��V�m��n�	�����vժU�r������D;{`vhw4
X�A_ at Vt��	r�y��*����(u��s�f�/?}Z�
��
>
�t|���ӧO7cR���L%��#�0� #���
���d=N,v��[7~=~�x~
G���/�����v,���{��3'3!�In��cF�`
+,���{�A�nk����������Xj����P*9%e����z��1sV��X���7]T��z*f��6��q�Q`�3� #�0� #�P�6
L}�a�r-O�p����SQ@�-w�`F�`F ����1ӱ�ۗ.Y�N�;�c���zX�,���F�`F�`�ҹB�X�r\c'T'R�eQD��sW�uc�F�Ғ�aF�`F�ț ŵ\���С/�QΝf�	9k�0� #�0� #�G�S��°�3N��aPƪ�2�H�XMF�`F�`F ��2���!���)ʅ{`�Y��hA�-�"�Y�HY�Ii�ty�нqT1+�B
w��eݺuQz��h�\s
�3����^B�1c� ��Y�Q��{�S�w�޵j�B���>�]���?�DQ��4���ׯ_�#�7l��l(�7��l�

�/#�0� #���^*�5�/����{-
+D���_�]�i�3�gϞ��GI$A�+V`;
+R�?k֬
 �
�X.\��~��{�e�^}�U��ݺuk��_~��*���o۷o��i�?�
�Hy=iҤ��~�̯��.���ˎ�.S��ׯr\#��b�Νͼ�mڴA֞���`F��K$&��d#����d9���qA3�R�R�*U� ��w"�o at E�,W�

+T�\�Q��|����,zH�
\��WF�=}�9�Q
6c{��K�.E��.���
#1��(
���_ͯ]�/-%K���.S�@�J�c|s@�>�"G������Y����2� #�0y��t+��TZ�+è�Crn_|˱c��̙[�B|5#��%8%%%��޽{7l؀�؎2ݪU+͕����_�
8P�^=*�
O�uh��{�
xO+[�,�"�u���=�w8aL,��� #�0�@
E at f���X��n���'��l���Zx2�
 ���޽;�nM^ժUs� �
�	ڏ
pel�۷��M��n��vu��E��\Yr
E�|���|����?6@��;$�_ZZ<��h�XmF�`F�   ]��/��*��Hr�WFT�
s����g̘��q���N����_�^�X`N&�����9P�5k�9!\� #0u�T��
2�wF�`F �# ���O��-Vq0�K��#I���kԨѢE
�g�={6�z�ad=�
���r��Z�*Z�s��s �1���|c�_�>M�r��`T.S��[��]�W�@A��\~�Y�����{��
4�W̜9/o��O���"#�0� #P� 7I��"����D��S�f1�/�ѯ'� � U)H
�e�,\�p�����ФI� !`����grÀ�2�bP���
c>"��_)���uC��b��z>C .@��X��
c�Sxe ��]wݕ�:��aF�`�r�
����<�&�a'�/��=ڳgϮ]�@4ǎ
�h�˞%�c۱cǦM��B{g�$�q�X�m�(
VA
�j���7oF [...]
+��W_}�xfl/�v���
:t(_�	�Dv"�����{�U��ָqc�W1cRK���av�ͲF�`F ��xq��r,o�r� �
��:|�>�| �Gǎ
a�%ep�)S���
�o�
�#G�$�Q��V�mG_n��&D��Egp�|ĩ]�j�\#�[p����z�jDVF-��5?|���ĉ���p��B��q�Fw�=���g��k��Kː!C�|:X@>D`������'O�>}���z�w3d*ɇ=�.1� #�0yiKY��ײ�Ob���n�����[�i_FU���c�&R���00RF���F�`F ����OB�A�nk����������Xj����P*9%e���fO��҇+v�p"IR��<��X

��
-`��0� #�0� #�<(u���
>��������r�%��ٽ�Ţ�I�1#�0� #�0�@�#�������s�h�_���ٯY�D
�ر���t�MsF�`F�`�|���q-b]ȉ|b����R"Ht��+��Ǝ�|ڸ�� #�0� #�09� ��"���'��&W�IJ(겶9�B� #�0� #�0� #�K!0�*2�W|eɤc12r�ڬ#� [...]
+��`F�����p���z�Y3%��
v��eA2��k�"�BrrrϞ=�AAId,C�+V`;
+��?k�,$A���7WY�p!r�!
	rY##�
!-2������/T���~۾};eMCrA����'M����o����ڥ��r���CHZZ�*U
+ ,X��S�N{���5.�_�ׯr\�	C�s��f>�6m� kO~�8��`F����p2ɵ���0K~L��"0億J�*U�R&UV�;�Tyn�P�\�r�_�relGA�a�F�jd�C���*�=�
�2����Ԁ�>�(��f
!`�TF�
+*\t�EP���a�Fa����j~�Ri)Y�$nٲ\|ذa�ɽ�:F��ɗ o%�1�9 u�	�;���qh�̗p�F�`������']-�Ō�� L.�Hǎ
�3gli 
+9�,�)))�a�ݰa�c;��DުU+͕����_�
8P�^=*�
O�uh��K�F�ŋ�P�Yl�B �ie˖�P$��Q�n]�|W�C}��`F�`r)�_�
u!��žL���r#��� ��“!�|�
���{�� �5yYT�V���.|'h?6����o�>�%;7m�:��;���E�-Z��g�qF�^����s�����Iy�{��4�˗�����^`�Y�Cb��i
�y���<#�0� #��P
�
���qM$Kd�2����ϟ1c
ƍ�;���+~��WxJ`�9��r��W�@i֬	�����{��q��A�+���d�i��?�:u*L���/�
F�`F �!���	we��2EV	�"X�	��իרQ�E���g��
O7��'ՃQ^�>
U�VE�z�y�`3�=�o,��ק�U���eʔq�w����
(w�[�u
�'N
:th�}g��9���Fe�A��+f����������#�0� #P @��
0e�ba��a��
D�B�8p�ԡ qX�
��p��Q����C�&M��cv
���e�
�A�W
+r����~��v�
m�Q�f͚G�
	��E(�znF .@��X��
c�6�2��Srs/X7F�`F�`# 
1��p����$��2!�gϞ]�v�h�
;�$`�E,,ǶcǎM�6�!A{g�$�q�X�m�9 at a�
+Z(T3�߼y3�!�h���
��h�-�WV�\I�iEW��E��U��
+��W_}�xfl/�v���
:tr���ki�p���(bq�l�2��8쁛z�פ��{�U��ָqc�W1cR0�O��<�%V�`F�(H�y}�
+
o
�
È����IH§�% ��~t��f]�= M�2e
+�.�@�����0r�HB%ᨀ
�jl;`G�5D��Egp�|ĩ]�j�\#�[������Y���4����ĉ���p��B��q�Fw�=���g��k��Kː!C 
+�0�?��Cp_�֭���\�.(��>
�o{���ӧO7cRi��!SIG���0� #��N(�5Qa햜X��y�6~�����en�wz��~��rg7X+F w"`&�̝�V� #�0�@�C >~��:h�mm�
8�z"=#==��
KM��؁�J%��,_��쩯�4g��I�5�w�z5ϿPڕi�����b�#�0� #�0� # ��e��DfŐ�C�d���@n](��{��EnU��bF�`F��+(��������(K
�O#�uJ�7vld=,]��+k�0� #�0� #p�@�8�nD�caM�a1��
����A
�ر�2bF�`F�`��.�c�T

�y�D��]1�
3� #�0� #�09���H����DZ�-/�(1�r@=�0� #�0� #��$��.�_�����b��Ϡ��V�5k� <-H���
�@��#������O��

���Y��K�.�֭
�S���Sb0#lsݺuyj`(�\ "HT9f�DP^�~��ްaC��?~<	���vQ&cF�`��� ��#���4��)���-�h�|uk׮Eڅ���={�FId,C�+V`;J�!֬YH �
{7n̴|?9�W�.R�H�bŐ
"�>\�E�_�~�q�
:H�ӹsg3d�6m��'T`F�`�S�@,W_,��l�_��9��i�J��T��nHȇ��f�<w=�,W�
�W�\�Q �|�����B�������g��j�
+��E.�#��� �ȝ��}x'D�t3�e�̟
&#�0� #��.T�
�
�R��WI��g9��رcs�́-
D!�j�E�씔�xjx�u�A�9e��Fօ�F �@e˖ݰaA�
x�hX�]E�^_�*#�0� #��L�=Y�%�q0��~2�\���d�ҥ�&M�P#�E`3޽{w��:�hS�Ν;�n�z��_v�e;v� k^�� P�|yT߿?	���~��/PZZ�[V�ຌ #�0� #p�/!��`��r�_4�� s����g̘Q�d�q�Ɲ���	�]��ʔ)Ss�Бl΢O�N�
+�2��0� #�0���Z��P:
+�,�_��/z���իרQ�E���4{�l��t��zR=���uS�.0��c�$?vYΝC6oi�o�>(L~�X�&v��A�{�̙3��⊈��y��-#�0� #�/PFc����ʂ�EYٔ#Z��D�B�8p�� qX�
=�Z�
�"v�-jҤI����m�/_>q�Dʕ=a��C:t(�M���� "��
�w�@�W�
漚��+��O?�뮻
+2J�wF�`F �" (r�1�O��#^�p�Ҳ,��F���ٳk�.L`;vlӦMa�=K.#F���M��B{g�$�q¸�mF(
VA�v
��͛7�5
+F�~8� �n9�/F��k���\�`�
;s�c��x]|��
�q�oiܸ1⎿���1��I�BoXGF�`F��!�!3�H:,6e:�
�V�F��7o~��w��Qc�_tyʔ) �`�۷�T��#G�(��r� �ƶ��n�	������vժU�r��!��+@�[<. at e�s6`��h���
>
�t|���ӧO�w
m �72�d�,�`F�`���pK���$K&��������7SR~H�
d�g\}~�;�{t��S��"K`
+fBʂ�k�)#�0� #pj���]M��m�GSO�g��g��c�iz;��B�䔔�|���c���'��(���N�����}�)��˧���:#�0� #�0� #p�Pɫa[6���MῬ��'Y�8��p���ĉqHᢌ #�0� #�0��2�<�A��񕥩�\3"N�; S�
+����t��3�$#�0� #�0�@�C�"�/�"�+Kz��"ŵ�Ȝ�4O8�gɅ��J� #�0� #�0y
ɃE�8�ape�(���$�2bYD�ܗ����2� #�0� #�0$��/���Aa0,�ein4Y��c
F�`F�`����E�տ1���k3���rP��5k� <-H���
�@��#+
ɦ���O��
����Y��ԩӥK�u�օ�%O�ZOO9�
���u��5��#����Q���K�.
m�
0$�3f
"(�_�^G
+oذ!�ٌ?���Od�d�F�`F w! W
I��Å��G*�(�.�gbߗ_~�v�Z�]@��={w%��
eV�X��(�@��Y�4hp��oܸ1����^��H�"ŊCz�����åJ�B�,XЩS��{�FQ��0�@�~���oY��{o�Ν;t蠑iӦ
��0P� #�0� #�k�i{D���H���jʟ�Z�փJ�*U�R&Xb��fڀz(Y�\9�\�2��� �0Z��۷]�vH�
\%@��
d�kժU�֭�A·l���a��.�u�q�
H(EU.���()	���_D�>����B�e˖�?1F�`F��uh�,�1Qb+�u�h���ȖE�cǎ͙3�4�
�02f���d]�Cbρ(c��n]�ti��x�⬷�
+ p*[��
��؀����U�P��U 1�.3� #�0��LY��i�,X2�����MGxGPZ8�N�4)Z�̔��x����v�(rM9;w�ܺu��_~�e��ر����8�^�z����aφ!0�X.��˗������Ol�:�wH�����bF�`�܊� ��e�����]Y�g��0'ϟ?ƌ%K�
7n\�*��
�.��Aeʔ)��V����˗��������W���==bMr?S�N�i9���2� #�0�_YyY�e����*�>KsT�r���kԨѢE
��ٳg
Y^nYO��2�����aʁ��B,��]��
X��=q�ġC��w��9�sI����M�/
����e~�9s�W\�_?�t��`F�`
+jb_�
���s�ȨLa2�T%Q�A�+ĉ' 9 at y
+���ѣ�U�p�(B�,Z��I�&Y��Z���l��eO�0�Ї
r4Q�f�#G�d��#뚳�<� "��
�w���W�
漚��+��O?E��<�
V�`F�(h��n�ˆ���G��e
�H
�{��ٵk&0�
;�iӦ��"v�#F�xӦMp`�ޙ(I~�0�b�=
+�U�B��X ��ͣF�����>[��r0{q�ZQƂ
pz����{��
��_~�e�ʕ�=�\˖-�n�.h����U����?�8*�7F��w�}ׁf�a:i���;�0� #��f��0
K��ز���rº,��E"ʨռy�/��cǎ�K�
+:e��]�����c��ȑ#	��c6����	��@Xi�
 qjW�Z�/�H�l�|�
x\��h�l�n
sժUa衇�5k֭[7ؕ�_97�\�����0�'O�<}��w�yǡ$�y#SI.ԜUbF�`�`፬��D$��_j�ܼ~��@	M�*׶�#�?y�!c���	)��⒌ #�0� #���W��i��ms�h����
�{,5MocvV(����|т9s��s��߄mYJ��E�3ϭg�"��$:KIV�溌 #�0� #�0�@
B����'gd�Z�b���?��
�d���9��'N�lU�=F�`F�`�|��
+�A�:ǵ��I"�2��>�F�La+�K�����
bF�`F��0d���II�[A�]Y�!�s#O]=�g�.�0� #�0� #��H��$e��WFI3N��&��J���2� #�0� #�09� q`6lٌ�,�3�\�
%9�KeF�`F�`r%�����D8'+�
aP&U�9�L����Y��hA��\�"�Y�H&��4~�<mh|
Ů(V�N�.]��[�.O��O>�F�,Y��.����z�#��郐���K�.�2�A�4%�j�B���>X�\y�Y��� �ڌ3�ׯ_�#�7l��lƏO�Od�<
+q� #�0� #2%������1�k�<%}0��n�ڵH��
x={�
V%��
eV�X��(:C��Y�4hp��oܸ1J�Y�lY�^��J�R��lÿ���)6--
��K�*�N-X��S�N{��HF���~��I��~�mw>���q���@�~���oY��{o�Ν;t��ۦMd������1� #�0y+i�

�ز��'���V���*U�R�
+L�0ĂG"�o@%�,W�

+T�\��'@>��}��m׮]��yHRݽ{�aÆ�p�
�D@�-Z�p�U۲e
�ʨ�v����;�@BAA�@���vn�
�
ݝ�-J��L�F y+A�_|�E���;�o��!����8�g���{�0� #��A;F�
8`
+��eW����˱c��̙[�B�Zq�D�씔��*۶m��F�>}`-���S�N�0�M�.]�/^쨎/�
�W�
��Ft;wM�L�@ �=e˖ݰauu���]�w�������
��`F��#P���B�,�]
��]�����N��L�9`޽{w���w��u���͚5��I���
.Lnʹ�q��� ۾���aφ!���۷�.N�Ρ�DT���ʗ/��`R����!�S'r
�`F�`r!j��.D���}+N%)��<����ϟ1cFɒ%Ǎ�NN���:v���c�
?~<b;����l������{��q��A�+G����
+�`�a�p��� #�0�@�E at F���_���W��`D�D���kԨ�_��ٳg
��冑��z0*��9��c��ܳg��ѣ#�/��[��b׮]fyX��1q�ġC��;��^�r�2eB����78�?���7.���̙3��⊈����#�0� #�W�/����1�Tt
3FFĎ!��ā�
�
+�Â8k�?��r��-Z��I�&Q��;b��� ���Q
�	�O��)�f͚G�
A��
+r���T
~��ώ��)P��
�X�
���1C8�+�W"��(踳� #�0�@n@����J*����y�W��#�

.,� �І���"v�W۱cǦM�����3Q��8a$v�q���*h�P�X ��ͣF��������(r뭷���G�o(~��0!/\���#��(ï�_~Y�r�s�=ײeK�

��!���ꫯ����D��X�A �U��
� �J�ƍ/�
[3�0W5�t�;�0� #��'�_�Vc"��_YY���� %����ƀ��� N9e��]������ua�ȑ� J��b��X��Zk�
 qjW�Z�/�� �L��oݺ�R?���4�0B«V�
+��C=�	�ݺu�]Y�+������{�]���S��
+s�|�����0�'O����؂x�B��|�_�#�0� #�� �d岬Llj�Ϩ�ۖ���A�zKbB�J%����֏'��sg�
F�LH��M�xF�`F�P�������ֶ́��'�3��3���4��
�Y�TrJ��E
�.���Ty�`E��j�רk�"��)�5/� #�0� #�0�@AB $��o�b���9�c�F���sv/'N��]��6� #�0� #�0y
����>�e�+�upeb9W����d=,]^;��/#�0� #�0�@6#`ČS�Ѐ��G��20.�u
w��r2u�F�`F�`�+nJ�|0��ʺ,7�+�/F�`F�`F�
+
G�0���,����
#�0� #�0� #P�0r�HJlreaQ�솱f��Ǣi�s���~��#������qwT1+�Bw��eݺu��	
+ ~3���{ʼt��`}p�#��nݺzj���\#�ZϞ=��D�1���$���zz��?�Q޳��(q��F �*nj���ׯב�6l�p6�
�D�˜V��3� #�0�@\���-
a_�H�JG���֮]��
��ɠ����$2��̊+�
Eoȟ5kV�
�3/8g5R�!?H�R��̂
:u�w������ի�)R�X1��0��]��iӦ!�`�
=�!�/-����?������9s���9��"����[�����Ν;��
�M
Y{�(��3� #�0�@�!�c]Pf�>�P��#�W�T�R�*U`ʅA��a�
P
%˕+��+W�v�NB>��}��E�<�?ϳ�-[`g
6l�#�6��!�^h�}�Y�V�Z�n�
�0��~��H���׺_����%K�*���
>n�3��P@�@@(F�c|s@�>�"���qٲe�t�Yl��3� #�0�@6# S[땄[9�

C.j�ǎ
�3gli 
+Q��Y�SRR*�.]G/^
�`�Q�pl�+“�>��F�~���z��&Ι�oVZ�Q��Nٲe7l�@��]�U�Pę~� �eF�`�S���A��!6n�A��
AiA�
<iҤ��츻w��[ý�W�^}�����a���TF�i~߹s�֭[Q���.۱c�[�B�k׮
G�1�S�-Z��o����ȍsp3�
+��:�˗���(l�:�w-���y�-�
�F�`F��~,K�c
+�ŕ��>#d\��aN�?��3�0nܸ5r��D�/_���_��ـ���d�رZ�]���ʔ)Ss��}��͛�%K�
>|�ܯs�4k�,;c�s@O�b�P�L�:��xkqyF�`F�89H2���>Ѭ�E"r^k�h�T�^�F�-Z� o�={���冑��z0*��9��VxNO�8q�С&w���äjժ�g`��N��`��鲌�0*4�f͚�G��U�
�B�7H���n��g:���x�s��B`߾}E~�X�&�77�{�̙3��⊈��٥�aF�`���

N���:ǵ����}�~�^p��� qX�
=
+NY�p������C�&M�
�=r�H��������&L�?�C��&��]|��{���t�zF��i�
C�oC\>s 
�1|��z�z�0����O?�1[2'�k1� #�0�@�" �0�����}�#2k�ܵk&0���iӦ��"�#F�xӦMp��ޙ(I~�0�b��O��E�C��͛G����?
 
�U�������r���{�e˖vh�D��k�����`��=5�m۶*T@�8j��K�I��멻��o >n���o��*����{����#
K�ƍw��w�u�x�e�F�`F w" ��.
����
)
+F���/���
;"j,�<��N�2dl�}����4r�H%� �
�jl;�A�7VZt�G��U�V��5�Q 
+�
+�z�!�w��
v��s� ���!؀��

q�
�JVB��eȐ!Z��z�*�����9���α�/�>|8�!���ɓ�O���;�8��`��T�/�ΝbF�`�<d;�;\$�8������n�J��NV+S���l��F��0w�8��	)Ob��#�0� #P���_���v[�6���H�HOϠ��R��6v`g�R�))�-��b��v��U�b��FFF�^2DL��:w�`F�`F��!�� ,�XT�W�l�� �d9.�ؽ��D�Y򊞹1ք`F�`�S�@FzFZZ�XO�O;At9�ę�۲a�O4>�R�+��𖹯�r�

+`ʠ�J▫T�+z�*��2샑N"w�`F �!��>��|�۟�K�2�K��j��]Gؕ
K���ݟ~����~������&
+��^r��yE�܆��0� #�0��)D`�o�_������O�������8Ȃ+�q���������P�)Ԓ�fF�`F�`N>���c��_i]���
�
���'��3�2�*��-g擯#��0� #�0� #��
+҉c��2dH�e#��|k֬�k&-H�� Ĕ@��#+
��~R?]�6t�
Ů(V�N�.]��[�..(��͘T��"�ʼt�R��h�l
�#��nݺ��@��~��	db��k�w��/��R�������g���o(P\ G@R�1c� �����u��
•j����4�D�
Մ�3� #�0�@� `q���!O�ڵk�v9�z��, %��eV�X��(�A��Y�4hp��oܸ1�JZZ��*U
+�,X��S�N{���h�Ѵn}���E�)V��Ch�~���_�p!r
+�{�˖-{��Wc�E���(������,�f���
�x[Ð�ܹs�
tmڴA֞ln��1� #�0�@N ��$�$j��nF
�1�R�JU�T�)]䦆�6 at U�,W�

+T�\�Q:�0Z��۷]�v�y��l�;�a�P
I���$ƣ&Ж�i�:���jժu��������������"
�HI�裏F隻L >n����ֹV� ��� �/��"R����7���В�6e�̖Y#�0� #�d7NlؕeF�x��
;vlΜ9���(d��J
2f���/]�4�.^�8.��D��٭#ʁ�zÆ
��
�|V��8g��Yi��FA �Ke˖Ő��؀�����*p(B��(��
#�0� #��b�#[<�%�U۔;��J���I�&E�9�\w��
`�>�3z��էO��/�
vh�Bٹs�֭[Q���.C8d�w��_P�Z�j�V����L�7��p�(_�<*�߿��c�Y�C—�3o�εF�`F ��4�Ņ�1�a�
+'�0'ϟ?ƌ%K�
7n\k"
~�˗/�ѣ����
�Y� �)S�
�Z�#�V���=q�����wJ��S�´\��̝eF�`� 6��rl_8IV]�^�z�5Z�h�6{�l��t�(T�P1�Q^Ρ>
���sz�ĉC�
����t:���L����V�Z�ɺ�s�gj+���z,Y#�o�>l�_>������
2s��+��"��>�0� #�0�;6b�)O
�Udƌ��~�8q� �IA�
=z!�
+.��~.Z��I�&хԬY�ȑ#>�Fh�j0f,&L�?�C��7A%� �	3��
osgG�������
�r
�}�^�^=�y5E�+�%s�#�0� #��$

DŽ<�s9�"{��ٵk&0�
;! `�E

+,#F���M����3Q��8a$ƶC<
+�UТ]�!��ͣF����&4���{��
P�xW�\��-[�
�Cc ��aN
�1c�8}��@?��
�n����Ih:4�2���� |�8���'��dx={��
�q�A5n�q�10
r1��I��1�0� #�0'����2&���@
�7o��
;v�y�|
@O�L��
6о}{Lu9r$�@I8H`�����J��� ��S�j�*|�FҐ ]�
c�C=ԬY�nݺ���
�
P�
�
ح���~�_��`�
mR78p����q���'e q#��Ç#`
�|O�<y������F��`F�`r;�i9�ę�]����"�y^<����O�nN�����~�@��	)��5F�`F 3�۾_�����ֶ́���W���A����m���
+��SR�/Z4o��
��ZK�����7����E93=�:� #�0� #�0�@�B��l^΅ݠp���ĉ�Jۼ�g���aF�`F "`�+��Hr����V��������W���^�4F�`F�`�ĕm	�r%OZ��䶳�W��m��>� #�0� #��6��Pʑc`�^�>� #�0� #�0�@� c�#�5��ܾ�c�5F�`F�`�N
�ܾ8:�
d�\s
�
�rp�Y�a�r�� �1�2`e�C�a�I�[����G�E����'�
�d��o./��b�ffy��
���!�~�2�Z��
+����ԩӥK�u�օ��O?�p�V�Z~�����)����T i�Q�>}
8`�����`F�`F�A�����I.�ܕ.\�\zȾ�l�2d����Э����۷o�O��(S��޿z��"E�+V
��*BN�^��P��C
���r�����W*�4��׳g���(�
j(�b�
+l�
+Gȟ5kV�
n����E8ꀅ7���*U� a���?�����H�7iҤ�Ba�R��o -�O<��NjC��pF�`F�`Ol���FD��%� 
+�|�
w��T|�>��>�d{�J��`����A�[�jպukl84;�޽��a�n��}�R�J ���,Y2�tRy�kC�@��N����ʕ��ʕ+c;T8
+@>��Hjݮ]�ༀ(Lj�MP+��w_jj*2�a{̘1����fx�	���g&��(}�2� #�0� #�0�n��C��-�r�my�޽6l@>j���\�����#ٵ.���=�l�۶m�c
�뮬��cǎ͙3�
.@��K�.�k"s�aV�߿��ѣ�����
<x�[��M%b��̩��F�`F�`�0��E(2�nu,�,���/(Y�Z5���\�t�#F�S-Z���ܹs�֭�_~9\,v��A�Ĵt��u���͚5sH���N�hѢ�ө�/]��
��3] ��ݻwg���r�-U�V�С^*�ի�P�a�nҤ������~qEF�`F�`��eZ�_��8�ײ�`�S�L�_] ~�|e˖�sÆ
�ϟ�]w�u
;v|�ǎ?n
+�yX'�p3iw�(�3f̀�Ƹq�r�NLLDgᬌ���ĉ1Q8�s���!�v�cF�`F � ����b�Y$:�
0��Y�=�[o�uȐ!-[��G�z1���\0��tY
0` 淁;�3��V�zu�ԣx��j�<��h����0�醑�$0���9+>
�˗�z�W/�Ā�(㬳�����!(.�0� #�0� #�����p��9��Š+b�����,���Y)��-_�|�ĉd'�0a�}
:��`
<wa
�/���-�Gfl�� qX�
=
+�]�p�(B��!>Y�N
�lF��&X #�0� #�0�@\H�
�5f
�A����w����W�\I���ŋ#,�"|2l��b�Y
�hDF<
����f$��$�~�PyL:D�9����
<��!�i�&(�ҡ$��!
+Fbl;d�0"iТ]�!��ͣF���1@�B9+���!+mq]F�`F�`mWV,9��2"��5"�2.L����Z�Ph�̌
�e�fi�Z��?~<��pޥ

������Vm�W]��4�.f�y>#G�$9(��r� �ƶC�M7�BO����7�B�Z�j�̙��Ov���j��0� #�0� #�$��~��5���IG�x��_�?9`���
F��� b�G/�%F�`F [���������ֶ́��'�3��3���4��
�Y�TrJ����2x��wWkis�_רqaW���#Z���g,�`F�`F��-v��X|�ܢ��
:ܲc�;N��M�S7�0� #�0�@�B�F�=���R�����z�̝�ܦO�z��F�`F�`,��e'WNL0`�2�t�e�ƩR3��s�p�vF�`F��G�{��
�y�����0� #�0� #�0;WV,9F��2�����; i<� #����T 9z�N�XSF�`F � ��
�n
�*���\s
���r��Y�a�z�:��yH�=�91���nݺz*
�G�=*��'� Sɒ%Kh����⋡���	��Y
��z��]�V-����ϓ�~!!)y�g�|�>}
8 at U
�kM
]6���q��
.��gϞy�C��'�
=z|��G9�ht��|�
.R��2�J��G��F�`�\���U>��
.D�:d!Y�l2�������o߾
?����ؼz��"E�+V쫯�r�9�z�B�=�Z��/�\k-���b�xV�+�|(����N�4���Fb��~AO��7�x�믿~�'�<뭷��b�
+lGAկ�$ڴiH4�E�9�`�)���^˩ �q�G.Lwr�`����fF�`��C�3F���s�=�|�
w���w�M�UDr;d���Y�fa[�unժU�֭���Xf��݇
v�
7�C�*U�b-ߗ�|�>��y��������S�:u��w���;��"=���_�~:!��+Wu+W���(�ϯ���~�� @�H���9	`$#m�y�Ж�#�v��СCJJʏ?��\�]�vպQ�K/�@�{ow�ڦ|��m��
i؟y�

�N$��Z�I���;Q
&g\�n@
��;p�@�G�����z��T�o�I@��`F�`�1w�/��l-Q,���ݻwÆ
���Y٤��
<�1�K�2�x*c�#���mۺt����+�m����k����E�z��
+66nܨ���K��
�%9�e�����
,s(q��� 
f���F��"����z�}��9�#�:�!��
:�Cn���z+��Ν;�i�����x����
��v�W�/��⩧�r+鐏$�𭂆-[�W֯~�O&��#�0� #��(�%i��Ɇ3�o��5[�Z5��`.]�4�@��)k�Ν[�n�����b��d�.li�.h֬�CZ�
t��E������_yb*d�
Pg�}=����޽��_nҤI���_i�ڵA�ɯ��\�@�F�p����g�
+��/-xOû�9s
U^y啥K��(�p�!O���6mڴjժq��u�ؑ
+;v
���ܚ�u
+�l|9�w���!�D��:u��?�w��~�	�����k.�0� #��b<���	����`�L���Z� 8_ٲe���O����ׇ���:<�{��Ǐ���7�dn&��2]��/�".
�
�2ѯu��b?>����
>�i��IC FYpP|Z	mq˖-��;w�1cp$'';��[��|e*�
�ׅ�����(�� �p�0[qȇ4�ӼC������ #�0�@�F <o_��U�VE���
�
����\����ٱ�\��7]�
 W�={��
=�l>�:�G���t
+��Qׯ|���QR�`T�79��_(.���[3�:�L�{��b?���
�Y���L��s�/xA�.��W�N;��r
\&p5�B�0a�C1�
{���}����}��*���C�%3� #�0���Dz-
�
A��ίѲ�U�X��
n�f�P vP�z�+�W�8q"ىA0��СC�
+�

�oǦpt�B�q��+�y� Lj�A�ᓍHm��C���fď�G/	��` ��x��^�K�|0K���2"�K6c��t��
/
L6ŧ����*�
�OqI�ެ��ʕ��qˇ4|3��K
U���|̹EF�`F ; �l-W��9z*��}��=3��I���_�oY�x1��"|2l�N��fy�l1�	�
�t(�B�Z�bk�V��<˃��~����Wl8���曈Q�9赓(���� ��M�B�۶m[���~��Ӎk�
��G|	G�8pJ�6F�=:F�< v�O(���`��)���0,�'X�u�
+$=$���#G�`�

:W(�'q����?��eɌ #�0���C�����>��:<^�P��G���Ax|„
����&�k3360�m���$��?~<� �p�

��ĥO�����G��v���s�=�*��x�;%:� b�a�!䦛n�
-t���0v�ާ��dN7��s 
�0�j�M �
�ax�M1��C��	��\����Eh
qO�$!A��O��V0#�vR��衾�����pmbz�����!�:��۟s�dF�`F�$#�X�:kV�z��ͲaaY��q��O
���ē�
+7��i�*���R|�l_𲔧�g; ,�`F� �q�á�i��ms�h����
�{,5MocvV(�������?2x����iis�~M�ƍ����_&O�A���0��
x;�W���Ē���&,�`F��^�
ؘ�gsY΍lY�[vl��$�[>{�fi
IJ��~h��LÒ��g��\�`F�8��Hr�9Y�[vlhOh��?����fF�`F��渖��^

nٱ�k��s��aF�`F�`N
�*��"Q��O�r�2#�0� #�0� #pJ���
�Unä�ݕO)l�8#�0� #�0�@~F�����+Gv����O����9 ~0�"Y�f
R �1���
H��=��O�`���
�֭���Qy�����L%K�,���� ��ƭO@w����U2%�����ۺuk�@�ri'�J�����B���oFb�P�� #�0� #�0�@n@�4-;�`D�o�
?�0��,[�
,�L��<۷o�
� 13?�^��H�"ŊCJ<w+�ӫW��c�^v�et�d)���

���l�k׮�}��
�D
y��4Ŕ���ǤT�Rs��]�`A�N����X.�0� #�0� #p��Y���?F���Rw�Bpe�����鐛Zw	fT�ŀDb���A���&Xl8����_w��}ذa7�p�>T�R%�Ћ�dɒ���P�li�������^�ݻ�-��
.���
=z@Ȗ-[`WFw`VG~
+��D}����� #�0� #�0�"`ؕ��2q�`weXI7l؀�̞��o�
\�����_y啺
"��(c�#���mۺt�ҧO�b�՞��9��Zn�aA���o�>R�ҥK���ŋ��i��0� #�0� #pJ0��I�
aVr"@�jժyj
�]��#F�D-Z���ܹs�֭�腋Ŏ
;`v�u�����f͚9�5h�@'Y�hQ :��T4�HMM
(������*U�V��!C����s�g�����۷/�3Nɩ�FF�`F�`�A������-#
��eaZ�2e
+���p` 1-[�,<�6l8�|}���ر�c�=v��qSܜ9st27�κ��`6_� ��'J�@�1��ȑ#�ݯ_��˗�%�u�+����٢0
aF�`F��)<�r���1ߋh-�%����˭��
+;k˖-�Q�^Lѫ!L�3]�
0p��={��
=ڔV�zu�L$ؙ8T?=�&���-���~��(��o��o�
+H
����P'N
:t�q�A˥F�`F�`r���R+�
�bŊ���p;6����SO#��`�d'�0aBJJʡC�t�r��

<�r�ƍ��&T�L�4��鏩��j�
+�K�Y�&��9�E5�:#�0� #�0�@N!�Àm\�rWe�	pÅ_������?�\���+�-`���ɘ
�`�X�;��b�ݼys��@�5�K3B��bk�V��'�M�6��Z�Z
���?>jԨ�>�8Peا��1��w��
0�'%y���j�F�`F�`N!����"1��>$
GDde\������hܸ�63c�I�&n�4�b�����IHF�Z���Q\��o � |r��m۶}�駟�yh��;� �
�
+���+=�ܬ�u��2�+�b�F�`F�ȅ$�:���ի{�{�PN���lX���Om|B.T�Ubr-���kuc�F�`��� ���u��i��ms�h����
�{,5MocvV(�������
<h��_'�8
X>��Ս7������p����4��`F�`F�`# g���$�W�bŕ3A��L�w����
'N��T%��'�?�
#�0� #�0�@nC@bI��ŕ]IHr�}Y�[vlhOh���mg��aF�`F�8�xnjˍL9!A�[vl�!o�S{&�uF�`F�`�\��6-îl��
��ȝ49W��J0� #�0� #�,̹}�+�
�yaF�`F�`G|�8�ʟ~��5�\?�?�\$k֬A�,�:&Xc������^xaݺu�T<*��xT��O>A��%K��~sy��CO�[��*�&+ZwA�dJp�OG?���֭[��/�
۴L���
ѣ�o��Ҕ�-Z�:u�t��eݺuT�s?���ќ[y*F����*`F�`F� "`����>3
F("
.|�ᇑ�dٲe`�V :T���߷oߎ
��(S���z��"E�+V쫯�rˇ�^�z�
;���.���{��Z���`��	�h6ѵk��&<�AG��G
y�#?R
BR�u�]�J��;w�
:u�w��PH�̬Y�4hp�����p��h�Oz��,�S�P�� #�0� #�0
pe�͊<��a�e�Bp�;��˦M�"7��f�ٳg�'���~P�V�Z��
�H
+ݽ{�aÆ�p�
�P�J��XKɒ%��S�>�&�v;�	O����o���p饗���B�l�C/���Yg���0t�A�G��v�ڙy��p��0]À�����=�
U�
dxi�4i�!����C��E�f�p��0� #�09��-FCVj�J�a���T�}����
����+��e�
D{
٭�m�ǃ>}����~�9��Zn�aA���o�>R�ҥK���ŋ3�4���D�{�ر9s�\p�II
!MH�����bYG �ۑ�
���x�#�ͱF�`F��.
��*�u��_~��U��Y
�� � �|�x�s�έ[�£.;v� �ZZ@
���߬Y3�4x#�d"�-
+P)X���f���%=����_Q
�
B�B�g�J����N
�����Żw��vb?
�~�*a�
h�Oϸ��™F �87�x��O?�i�&��L�81Ӣ�"#�0� #��$
vc�_�Js

"��t�iyʔ)��
��ܮlٲ�ݰa�����C�]w]ǎ
{��Ǐ�a.��D�L:[`2��/u�� �)"�1&8
9r�\����|�r�d��eӧ"^��p�~�8c�
8��7.T������@���]~8�
�'ڳy��xeryF�`F�8U$	^�X�v9�-�%����˭��
+;k˖-�Q�^X�j���L��

8pϞ=�G�6�U�^]'	v&��OO�	��۳�����~:
+���o�[�BRC/�.ÓFġC�FᲺ"�ʕ+W�>~8`?�lѢx99�{�a �a���j���v
����A�#�0� #��p&�Vve�BcG¬�+V�,4�۱�
+ D�N=�l0��5��x„	��=t萮R�\����P�����P}���,�?f�ժU+�/�f͚�7Ͻ3ۅ�I�&M��
Gh�0ۣ�w��Q�c��Q��-r� �bD�.�#�FA@@�S�vm�`F�`r71^lƌ�|9�,'$�
~��.f�\���+�-`��k���6��p�	St���O����Ҍl���ڳ���	=7�+Ed	Z at t����G���G
+�
�4�z 8b���p�&���w���:i0#ƈV�ڏI���P$��o�X�)��.�� |�z�����Çϛ7�O�	O�nݺe�X�0� #�09���P�ly��7F��2���!�2.L��FSx\4n�X������,
����Ǐ'� YNh�GG0q�
++B���ӂ����m�s���yh��;� 4�
+���C=7k#ؕ��+CB�Z�j�̙Hڢ��Á���fu�� ]��8�=fU�Y�|��#G�$9�z����
�����W��?Ƌ
���<���aF�`�lE�
+�\�F�5�W=��=D:/'����l��J�����|� blG�!bb
>���.�R��0� #�0�@0���W��i��ms�h����
�{,5MocvV(�������
<x�뵴�O�nԸ�-f\Fb�XD$^F �@�|48��3A�៣s�g�|��0� #�09�����C�eI�������
o�,)�rn�'��\${�
K��ã
1�֭[���f�\��0� #�09�@"�`<������|o��s��[����<Q��|C�������4�}0
+,�_F�`F G8y>2e�r��-;6����|N�:����e�� #�0� #��u�C&#�
ny
n֟`F�`F �"�C�Y�c�_��:�Z�s/��#�0� #�0�@�C at pe/f
Ζ?��S$�_��R.�5k��e��	&�F��Lr�����u���S�<r�Q�O>��J�,YB����_
�ޭO@w����U2%�����iкuk�p����r�ט̇
! �)�[ps�@���>h�$���������q뇿ޏ��\pAϞ=)�y��r��Г�_
 �Θ1c������#bw�v�aÆp�����N�:�NH>����'�<�'Q�`>��C{����7�D���dɒfs�O?1쑁>�_|�����,�`F�8i$9Hq8G��-\��吅dٲe`�4g-������b� Rx�)SF�_�zu�"E�+��W_��9�z�B��jy��Z�����H�>�&�v�܄�� �>�<��G~>$҃�
�뮻J [...]
+AӨb�	h�O�FW_}5r�h�~�c?�i����ߣG���
/��뇷
PF\2�;w�СC���in���x���F��i��j����7s��
$-��]�v����W�?E�
\�-Z�����^�J�l�/
dF�`r�
���'[D9Y/W��;`�D�e��� K3~Κ5˴'�:�j�
+&Xl8����ݻw6l�
7ܠU�T	�XZ���� }p4���/qO����r�Q�b�wܲe
�����%$
=������ʕC�ʕ+;X2�b����޹s'��f~D?�i���q�q�t�Ƹ�W(�� �)�
���x�]CBw�RRR~��G�C}a
�9�a�E�F���S��[�ٜ��W�̩n~`��cxy�����O���; L�˗/����	�0� #��K�(��,�`D$˰�nذ��A��!�2����a?F�e}I�A��Ǒ�z۶m]�t�ӧl���>X���t�r��.؏�G�U�ti�]�xq\M���'>
��nZ�3�.�C�����Q�z��:�E}��p�	�L���bx�*[�,.�&6��o
��x�BR�}��e

+|cAru-�ח���8�+��Bx������
f�:u�@l���F�`�����I\9�2'[��@�2y�V�V�S{x�1$R;/�l�u�Vx���.�0�꺰��k��t�Cp���;���T�>�&�e9�������+�T�Za�%m!�0����}���a/�i��-�"��#�ܻu�̵��O���C�ٜ���v��xE!��x�W4�S���ˣ;��)l�:�;F�
+
+*�O����rΜ9Y�8���
+��a�3�
����(/�i�˭.���l��$z�AWǠA�HTrrrֻ�F�`��E@`[l8eW����5&�)S���� 8(<�1�h�����u�]ױc��
{����f��`ʥ�ͤ�)�	�R�
П,v ǘ�x��2��?����:��_~��(
+�q
�{!L�f�L�{��!��

<X�ؐ@?��޼y`K��֭����S^F�(��0���5�\Qe\�I

�(��
�Ƙ�K
�Ct-�ǧ�;��`�FF>^K�(`��F�`��� e!ʬ����l8*��,�݈���˭��
+;+�O�(�.f�Ր
ȁ�<`� 8 �r��Ѧ4���
��ġ���i6�,�����O���~�
a $5�+/�$0
j�С�ƍ�r�ݸ����M(�t���p��d,G[~�c?�ʰ֬Y�<e��W(�nM4uȳ��α�oP�À�0pv��
�&\&L�[��
+�ʻw�6}$fΜy�W�M�s���4���r��Q-
����{|$���{�a�GtE�Ձ�d`�`F������~ጯ�՗��2�1k��vl�`w��e�	C��`�d$!��
+�L]4vMʍ7f�P}2!Ӭ�?f�ժU+�/��� �Nݖ�P��8����=KFi�FG��ж
�j��$�����x����h�n¿���hO�z��𢡊�\bV%&����UW]�������&h������p�>A�N�������(�?G���
��v��O4��`F "��ͧ|0�[��4��O�7\|]}��w��`���~
�$>.�.�
c�
��	�*
pZ�Z�c��7��g+q��;� �����# �Q�>��#�@A�A"
�1�'
+c!�
��=�yj�1���R�Sy���$��v���<
�&�
+Т�ſm۶��#x\��r��>+��$�q�P�f�ƍ��n\8�G�y�`��'k1آ�Sy�77�ᆜ��2�,wLB�+o�3�٢��~}DHD4�	m���ʣ#pC���Mn��F�k��K�$�|v~�;� #�0���lqe���H8��� �0!?��q�����hҤ��,�o����S'�q^�Xf�
+ƥOh�5��O�|�駟F(Yh�r!��8c���N�Yw��
�݈��n��l���� �m�Ю�
���Q��&B���B�>T��2�
x���
+
>
!S�<y�d|����ɂR�|���pb	�#
�
�� �Q�F��A�GIL
�����Wތ��W)]��Ý�_�_W=&�"*"����&xe���h�K	�
�B�:��
�;���8��`F � �X�F�5�W=�`�v��~�iO��;��M'�#��I@��
��0� #�0'|��k��i��ms�h����
�{,5MocvV(����|��
<���*�+d�z�F�'i�d�4##l^���;��0� #�0� #��,�xp�_�:�{ٲ���  �o��>�M���/�gF�`F �#�X�f�5�V�]�]E�HL�^�����u���@ O�1��s��s�\�6}r��M>�`�3��eF��
d�Ɛ�O�r�`�^�}Y��

��A�[vl��o���vn�'����F�`F�����
�e�jK,��#���3� #�0� #��N�B,�r���f�e�F�`F�`F��!@6d�.#��Z`Tۑ-���t��+ at h^�E�f��l"�1ID�ad(�
l�'��"�rݺu�T<*��T��O>A��3�����gʭO@w����U2%����j��g����N�h@\dL�C�n��fJS�he���z��I��pp at G��q���S���z�
+r$�3f
"
#�1�k(xy=p��	D�n:(5l��ZX�Y4h at Bh�XN?�f/�<���S�
ڃ�2o��&b*��Hdc6���a�/Z�>�_|��3�/��0� #��
+����]Y�D��O��p���?�0��,[�
,�LʅT۷c�`Rx�)SFwr���E�)V��"�{9��5v���.����9Bs4�����*�O�A�A}��
�#?�C�A�.U�rO �G�N����z��
H*��!Q_�
=t��p�ͭ������\ ���ʈK�s��
:t 4pR(g

� ����F	�`��qݺu��7R-YБ;�-֯��S�^ i���ڵCV���"A.�-Z���G¿L��+2� #�0'i<NLT$Ynj���4�/��\�`�EJ9��� !@/��5k�iOunժL��p�ə�w�>lذn�A2s�jەX��k6�_�������
8\z��q�l�K!��:,p@	��BO3)S�~}�	@t*ĸp at +~����o��
,���
��F`��vY
	B۫V����_���ؕ/��dC�
P�I��ȑ#��N-oq�9S�_y3������c� S#xp�v$�

w ���/_��k�e�S\�`F�8�&c�!���Ɖ�aZ�����tÆ
���Y�}����
����+��e��D{
٭�m�֥K�>}����98��ɜLw-�������}�Z�K���ŋg�i��>� �*�\$���gE�L(P`��=�lٲ�dl�v_�	�/�\20�g(|c��Z
��d�4�	G����]/~�	Hk��ԩSb����0� #��"dl8k1|0
�
�A޴ժU�� <wA�F���w�ܹu�Vx���.�0��p~�ׁ�t�Cp���;�� V�>�&�e9����0�JժU�wȐ!�-����=��o߾0�E9ӤL�ڵA��ot��8��������L����q
r�>6@���Ѓ>�Kvex(�]'���
�g-�4��ڵ�-�Q
^
0
ӂ�[]^�oٲ%<I�+���A������w�%0� #�09��;��\9Cx(
�r,�r��r��0-O�2u8 �{�"��S��ϟ�]w�u
;v|�ǎ?nʜ3gL����t� e6� 3@�؁
c��#G�0�T|z�K�� @��� [...]
9z�hSZ���u�`g�P}��4�~�{���C�o������Ej�V[���,��C��7.�
C�a��Y��	Et
�	�����o��
, 4���ݷo�˕+G{�ƈ7(��p�����
'��DC}o��
�¨�{�n�Gb�̙W\q��;G��_~h9z����I�Ɉ^�=�0冮�:�
̼0� #�0y
e8�\��2$QVq����GĬ5�۱����P�B��(Y��H<a�ث
:���F

<�r�ƍ��1T�L�4����o�j�
+�K���9���l
�
A?{/YT[WşJƥgv���h�����m �0Ӟz������q�L8*�re�|�(8N�\���	�l��.|Rsm�'X>Jj?+�Ђ[��C��������
1� #�
�U�`�S�������

�3�W�[�&A����`�Uń)A�B�m2���ڳ���	��	����� ��vԨQ}�p� �@Q,
~�0�
�耉=�i�ڶm
+5��ў 

z����?Xϸ��� �k�a��
�q��p���@p-���y�0�b�?�䓈0��}xs�w	�2�苐���WތB�?i�� ���<�)\X�ƃ�?�ܐ�>D����x㍘�Hߗ�L.ȃ���0� #�;�%�#ӱ����ˈ�IU$
GD�U<�aB6���A���ѤI�Y�v1�I�N0�£#X���	�!�f҂�����>���%
m�y�
���[�1`{���ݺu��6����
+Q�@�@n(iK =I������zƅ(������2��&O�<}�t
 r��1��1c�_���+x�
�4Px7��F���O
r�l��N��f\mx�*��
�B�ʸ�11Q��o�j�WV*�{�V��A-D�C�๳��5WdF�`�
�l9Y$��y����z|�ђp�H��AՁ���
�b��ʱ@F �" j�U�5gF�`�(���y�A�nk����������Xj����P*9%e��/>:tسsb����nqI�F��>�A�ĒG�b�F�`F�`��! \,���l���+K�,�I����q�S.J-
nٱA�
+�%��Qt�J�ܦOV��uF�`F�ȧؘ0�`�|����n�G�j�<8�` ��)��"�����������4��Q��8��`F 7 ��>Æ
>w�����Ce#�_n�M
nٱ�h��s�ùM���/�gF�`F /" �0,Nl�"��twr�F^��ufF�`F��+	�3�y/[^˹�a9�`�z2'�3�<��hA��lo9��g��,�`F��Ft|e�"�=���n~_|1�"Y�f
\6��C�ad(�
l�'��"�Bݺu�T<*��rT��O>Av�3�����}v���$��4�2ȡ�Ԙl�o��fJ#��!�~�!���	����k����"�4 �ӧeD3�#�[Ϟ=)�x >�C�����e��EJE����8_��-��@�
=��&b�L��1*p
b<gBH�*9-?�\�`F�8��|��E"�`D��
~�ad!Y�lؘf�k��퐃eʔ�W�^]�H�bŊ!-���Aޯ�c�^v�et�̉�����!K�w�
2�a�,
N��=H��|��J�BndJ�ԩ�޽{� �:Dii��G�-��
���o �
r7蒴i������O�bq�cB�l�/7>xU�޽;�MP*dT#G&����% ����^{-��0���s׮]
9�VN��!�Y,#�0� #�4]N��hWD���������kӦM��Zk3-�x��Y�����:�jժu���p�v҆��7�p�>d��
�����ʕC�ʕ+c۔��h�&M/��®��`F�a�@<:��QZZ��Y9��"�!��I
	����d �S$�c
B:q�'>HD�{�n�t�H���r�������H_(6l��#h�hѢ�
:��������G/6�P�K/�/{�x;5Q5��]�|y�u��D�v$�DJH*��ց�
+�Y����ի�~(������c<L�0W�JF�`F� # z��ʊ;G��+�
������ۃ+<x��+��R��3D{
٭�m�֥K8
�֛'ߦ�N�jZ�K�.��/^
Ws~��%$Ja��a�s�
���| 
0�(B"��q
��aQ~��'��Q�V���X0 ��#��a�_:
N���H�(�4�x�C��I�&��"ʇ��O?��o
�_�ߒ�f�J�Ŗ-[�+�B|�?��_��Dzeˎ3�O4#�0� #P�p�#�KeY #8	y�V�V�;x0���1�X��v��	���p��)
v2]Oq|>n֬�CZ�
t�E�e�<�g��7h-n��� ;�>}����G�� �C��U Vޗ_~�I�&��k��+
+�Q���y(555X��n�
v����ĥ*�C�Q�F8_o��v(D*T�7>Y���w�9s�8����+p��Q8��C��bF�3�<�y��U�V�7�
lJ�(�������駟 GI�믿k�v�����㛌��
#�0� #P��?�t�k��/��r0b0-O�2u1�8X����������C�]w

�p8~��)��\Z�L:�S�5L�f�9`N�a�o =
�\�&��IZ����
�)�����1�k{�����5�:����_P��pk��
+�;܁��yXpq$'';��[HD����)H6h�f1*��R���<y�d�d����>rF�`F � `pdc3惡��#L�Z�*�L�e���[o�G^|��G�wA�j���e> p�ܳg��ѣMix���
�t��,
��dJ�u�'N
:t(Ln���ϴV�� ��e�ƍ~�!���Q� #%f�լYӄ( �P�]���x��}
g�/[xv�� ��mڴ1]&L��� ��r
B��j
 aDǎ
s�q��.Tq�M�>
W������Ê&!����j��0� #�0�
�.ۜ_E��_\+V��Yq�c�{( ;(>.�N��ˆ
VJFbLf:t萮�ig�aS�	� �<�S88�#G
��f�P��Egp Pd3r�)��.@�Ae��9�o��橧��������_�(�`��,U
r�ˈ�.ٌ���t^�,�O+W]uU�?�[>	$g8�k��/�Q�K��`���	
+�.���&�����p��]e��,�_0�/��`F��!���[�f�!᷀�	���}�����
� K
�X�
�cj
L�p,�)KO�)�%��X{��cf���a?��0!�H��{���&�yP
4&� ��?�n#� -&I�۟�Aֶm[��j�լ�TaS��18|j����^pO/˜��<���NG�8�ND�F�="Є�
��<�����>O�;*z�'�����yN;�4�y'�Dċ�c&B�`?�
1�p�q�!�����(��28�=�܃O.�l �LU��
�)�^3� #�4,
aR}e�&я5
+���	9���B�ffl`��,��p�Ō"j��K
<:�O��ŀ v�v�:�|H�]@
�ݭ[7ؕ���C�G� � ��[�۟�A�Q0!L�#O���q`�:NY�v��!���9���ܹ3�0�|�h
=z� ,��a�7��b�)>|�����G�S>	D+�L�5���;���ǫ���a��s��.=H��k
o�� �xM��N�P��3
	�<��IgF�`�^<8��9�Z��O7K�,�toXm𐡫��3_u�;��0p��|��g)�x�/xY�Q�ٮ0
dF�`N�q�k��i��ms�h����
�{,5MocvV(����|��
���siN��8�n��.id�`(/�����yn��C J1|(�HN,9-?'tf�� #�0�@^G@���D���ȝ���
y%zC^�?w��ܣ�����$�
+��L+�F�`��� Y�U��'N�~�#w���
�:�����.���cF�`F P�c�i!���Ld:Z�):ܲc#���n�y]��ƃ�1� #�0� #��p�W����@��j��) �F1�TAE`w"F�
�E��
"�����p���F�/J æ(�����2��}g�ܩ�Z�g�yK2��}��s���>u��s��r&̙T����������6g
aYT��I���&"" " " " �r`�o�_�)�'�[�t��sq�36y[׬YC�,J��$m���K/����wbHK�w3�^M;�́�%���Kr<7mڴq��v��+MHNl
����n���7�. �H�";#G�\�z�����L�� ����T�~��S7��&�g+;���aP�jT!�?>Irrb8y
(�K�S�����/ٽ{w��๑J�üͭр�nJ'x��K�R|��� [...]
j���+�߸���

8�k�K�.|4���疏�4i����.�" " " �N����$�O� �Bc+S�
�,��Mm��rU���׿Rޙ
+�T�
n�?%�H(k�5j؞mڴA~�Tף�p�
�q�5r��)sM
���
�7n��*)��(��q�3�O?���}'N����%�
�}˯=��+�D@D@D�"H\�>�-[��X��zΉ]k֬y��w�Q���;q�ڲ�~��%��䥄��d��0�;v�X=�n�w�1c>?
�4�!"J���ڵk��0=�!"(�(u� ^� �n��3ĹLM�
u�QI'֭[7\��l��������G�y��x��ٳm7
XS�w�ܹ�7n\�vm�v�ڶm�~�z�L+g޼y�Ǐ=~�
��@ݺu!�m�6Á
Lg��lٲe�� �˯�����E@D@D�$X�c0b�0"Fa�*���c��ݻ�(a��_�� ���xG�֭�n=z����w���ir�!��^j֬Y�]��r�ԩr�3&z���Ǫ����Yk6> ��_�`�������:����k
�fr��ܠA�2����;��K
0h� ���_���
��
�p��^pΜ9�6m��X՘���7��!�ȡ�(g�]M�>=�x���ǪCE&�u�V�_�N
�;�
;v���6lࡇ�� "���
Ss�
!�$F�f���'[Ұ�W_}��?�뮻H�FF��{�H�k
+ȋΝ;O�2ż�@$�7n��C�
;6;;{�Ν�c�U�F�е}驤�D��p���M�4a-���������i�<L&Jn�ѣG���`ѢE&�2��}��GZY�I߆#yĈ8��ڃ���
_V����H��L�'k
O�o���Ѽk��jԨQ��p�GIց5c6�
<n�>�R�X	p6mڴ���s'y�i�q���XG�p��&P�Sy$���N�w�c�=FfeVڑJ�8k���ܳgO��E]D������ڃ��&�
2d��3��M�A�/<�@Ӈ�V�ZY���C��pO�2q��f��#��-��!�e� �:	�H�=a��{$MnX�'(�E@D@D��ȪwB�ŋ�������W7kp�!�^]�Xh�"P�+��:VD@D@D 
�8�
�s��nv޾k�O�s���1w��g�i��^ͪ��
��}g�С���쀼�q/�m}j�S��q�M����t���������d.��x�<C9��Q����ɞ
7{Fq�/�" " " " "���ž�}%�[��=;6�X�ND@D@D@D@J��[�//�rI�c�'{vJj|�#" " " " 
\�6g�-H"^" " " " " 16^9^޺DC0tD@D@D@D@D #	�Y��`Xc9x��|@z,w{��G��5k�=�XJ�o޼��
/��yI�M�6n��.�3rH�l:����	F��G�!���۾}��c���
�O�Pa��%�
�FI�.]�͛p6���>}��:�m���5)l��T���kGJ���ȑ#W�^�|�r���E���y��'�a�%U$�QD@D@D �	�le��֣
ݳ���������9���^{����Mi��~�z�1�.]J1��ի/^���I�n�:Z()r�!�ط��e��� [...]
ms�������CF�|:�1�X(ݷp�‰'r�Y
�ϟ��(ͥ�������7Fn���r�P��w�}7
�;�g�-CMO�]
�
;z
�K.�[yǎ
��y7Q&�h�6Bm��kժE�9s���c���
99y�\���˼�{��3f�kĐ*5$$c	rS�v�+V
�!��j������ѣ0�����rL���0s��cD�m���m
�ٳgۣ�u�K��M�m�ƍ׮]ۮ]��mۮ_����ҁ�q�Ç�PN
��K=z��V�Z�ښ���ܷo_�`��؋25�y�y晕+W�;w�+$`^VA��Ǐ
�o���!Cԭ[M�m�f�a��^������!�J
�(\gg��`ܥ��H�֭�`��9f�޽{�ֵ�*`
b:��ڦY�f���Z�4i�Fc;�r�)�2k������J�믿
�5�ʘ�ab|�Ł�q-��>Ls�ԩ��3�0�
�e� �P�PUJ�����@�#���_f�匋{��-�s�aÆ������w�qV/~�A�ٔX՘���7�yB��v�:dȐ��:�U[�n+W�|��׉6=a~��]&|bܸq��w_��O
+�N���M�6Ye�
&K�3��	���
;T�g��[��G�:u�6�r�����׿�5Q�����@����
ec$G0���~��W?���Didv{�����]�U�
;vlvv�Ν;���7�S���͌a:A]�?��~�!��g+3�lS�L1-��2�,�ga�-��ux� 
�1��f�&M����
��
�����d��(" " " �'�̓]�w�}���l���/�[���Lz8
�#F��ن/��i�:u"�1;��
��$X!f��ω��l��o&N��Z�h�C=��:4�9Q���{�gZ��e��kԨQ��~�;nD���
���M�6����]!
�����(�
+��
X3A� " " "�H��u!�v�_d�2k�&6
M�8��={�a.��"�X�G(��u��Z�(i��N��0��f+>$�ӠA*��p�
�S����
%^9Q����=��e������Q]�e� ƑT{„	<HL2H�����yIa����Є��A�3V2z4=b�!�Ϗ��P4qH� 9��8J�������� 1�~��
<�ۅ����������s���{��}h�W�jv��9sg
z߰7�]Z/�x�������g(��X.̴t���������d��B�y0�(���aKI
�ڳc�v�$M�E@D@D@D@�
�e��l�I^�r�x�KĦ���xq��	Js�"!���X��P��M
��)�"" " " "P	乒
�^ ^�y�bX�e�4Jg�� ��X��<I�L��8�)" " " "P��E��&�r�����
��
}�Q�[�f
��(�gl޼��
��5/��дi�ƍ�%tF�y�g:�
��� ��<5����o���9�2x.d?}�C������(]�t�7o^�����
�O�>�K�
��c^�q�W@{���*���9r$��/_n3�hтt6O>��a^Rͱq�TE@D@D����l��2���r,
F*�0���a�ֻwo�a�^{�6��~�a��R���Y�t)���W�N:g&��u�h���[����>�,��n��P‰��۷�z�5k֤6Ļ�{�Wnٲ%X��}.\Ⱦۙ�Ĩ��7`\QV���	�C�8p �<we�l�ꪫ.��2�3�ѩJ��S��" " "P^	��������7^���W�}�����˃�X��/(�wx�V�F
3ޭ�����R��2������S�}��
:t`�U�b��鴼��k�۷�|��aD)�~n��C��]�����/�`^0F�S�};�0���mڴ�a
�o����4?O��e,ʘc
��}�kM�8�K�j;�|�e��B������@y%����]���s/��邮g�wi�4�.����2�
e?�8q��n<�w�yg�^�l9h�c�b(w���c�^r�%��;v���̻��qE�a|�)m�jբ��9sR:ʯ3�
/��B���:=�~
�DI	)E��Ԯ]{ŊFv�8���G�
Y�g7�D@D@D@2�@rS�`
FJZ7o����={�=�[�n�x	�$��6nܸq�ڵ�ڵk۶����q�ڷH܆�9|�p
�� N�ԣG�nժN�`��!ܹo߾���
����=��<��ʕ+ϝ;׶�!?�Catӱ�@�nݺ��m�6�
;����%F��
��LPU:�����@$�N
FN~-���͘1���hݺ�=���?�,޻w��K��,�ɬm�5k�;
��I�&��m4��)���(�v0xK��������[���
&&�}�����
���P�tl�����|=�������Ka1��|�[%�H�<�O|'�s�
�Z
,������^���
�)/��1���o,n�,w��uȐ!g�u���/�V�\���m
z�����K�ĸq���1cƄ�	��:E":6m���II~0���cK��֭[����qg�
�;DN�_��מ8�RW[
+��������H���
L�ꫯ~���w�u��W_Mf��{�������j��cǎ���޹s�U�� �
����Dv3c�D
��?��Cq�v\� �L�2%�&��C9r�:�t	�	�<F�&M�|��'�JDe�M��,���F��I ,#f�2-��9n+�%TN
+����j6c���-ie�W&=
�#F�l�[�j�N�:�䘍
�ЅYrG�
�����D}H6w��7'��W_-Z�衇
�u

��\L�)q�
���������3����t^
��^1/�5�aӦM�߿?yW����"�`<ڲ�/�֌���rC 4#w�1c9�b.�`��]����Z7���F����ܳgO3�E]D�����t�ncvX�%
�߹!���lŇD}4h@Őn��p�?���}C㕙
�0�~���'*�Dlr�T�rH:/t�k/7�n��Ƒ�{„	<�$d�${a�k���&"" " �@R�7��_4]�xѐ�˾}�/<d���F���k."P�li��
H�E@D@D@,b �h�
<�ۅ����������s���{��}h�W�jv��9��y���
x㳘��Y�j��-[��W���k2Gp,�,���������@� �
qf��`�K���(s���M
�ٱY;���59
wq��E����-�Ne�ڳ�Iġ�HD@D@D@D��H����\�LS�i�=;ezRR^D@D@D@D����8߇
���;9V���#H����������6^YVr�8��E�#p�1ǰ�l5j�(�����R���YT�
��!��>�|@z,w{��G9l͚5TڣD��y�f�2P�׼�RCӦM7nl��9�w��@.d�ӂ#���
ү_��۷�>�
+�Z��C*��/�5|�@�ҥ˼y�癗;h�>}ܗh �#Ǽ���7������
�%�OcR==��K3_m�	\����ߢ�O���O�
�<U!Q�G�_��
U5���r�AD@D@�r
��Hb���`R���0o�ݻ7�1I�������:�?�0�~�w�n�,]��b~իW�
�+�zݺu�P�íh�|��g�}��x��v[�iK�g߾}��Y�&�!�}��+��r˖-�r����p�B���T'FU�%@�㊲��8�N0b?nI�
�3�pꖔ �D)�������������&�c�(�{�Q�E�(r�GD@D@�r��m�XC*�ʔ�;<o�O~o��V�CS��������ō)ܾ}�
:��ܽӧO���^c߾e�S'o���Q��%ꃟ��СCqW�����)�|��N�:�9���w;�i��S�-@�㊲��8�u��-�z�>S���O5�7�|��h��FG��jժY,�]vYvv��
(�nk^ڣ�8�
nҸ�meus�+?�pݺu��׮]K5x�kV�\�t�uРA�)�_���W^iذ�iG>k_|��߱c��)�x�<�0н�޻|�r>##G���=r>�`n�~�����0qne��5�ƌ���S��'TL��L;ϋ����>{�����M���rR�'�n" " 垀�Q������(�y睽z�����o0�rǎ
=��%�\���c��ͼ�H
W4
#�Ni�U���̙��Q~��m~�r(���'ߏC�(�
+�p+�q�|"eQ ?�Dx��<�*�/a�bS�}�֭���p�f����Ǐwߊ(�G
y�\���o���n&���:�,le{#ǃ�'�x�]�v�U֮]37"|�><\bF<�aP
+��u�]���n����"��
^~����0�?���v8L�6��?��OF�nݺ��誫��н����6�>t�q��&" "P^	`
W���^��y�涖��ٳ-#~�pm�^��8c۸q�F|B��m�W~2���0:������L�ԣG�nժ^��Ӑ�?�}��E
�
0`����
s"�W�N͝;�
+IC~ ���x��[�Z���V�r/��SO=��_|��Й֫W��\�8J�W�1c�琧�z� {ޝ<y�}+�|
�s�9�
���d�
�& 
+�.V�=�܃�����7�y��g���j����O�,%+¢_�>x�{��y�_9|~�6�	mb8,�G
yd�ԩvmC��DO�
�uP:oT��;/?����=�� " "P^	�`�1��`
�ﺭ�ѺukK����{��u�}����T���#�Y�f�d�)�4i��A5o[�EK�2k�������1���[c�
&&�}, \�n�T�s(�n�ؤ����
5jT�(Vq��d%\�K.tʄ(GN<=
\
٪U�z��D!�Y�
&����i��
$Jf)-W8+�q'L���!=Cg��G2A�c{��	�a=��.~e�]+9`\��u��w�f�[
CɝV6}�>��C�" " �@����K'���ﮭ�a��v�
w`���% Ҧ����t�G���O�r׮]y(��`7��V�\����[z&����K�ĸq���>\k�r:`���:*�OJ�9F7{lRni�ky6hРH� B�ֹsg7d��t|@.��RB��@�1 [...]
�Dv3c����O�dq�v\��aaO$�$T~(�BN�
�ȭd�-�ˁR�p��QF��5�P�D�
1�-��ʺX���X�D�F�={�K����zA�v��vL
AP<�iٲ�G�*� &<�2}x
+�vH�o�M�����Ž��
�q
S��s$\��#<��%a�E�
���:Q� }�*�rp�j
+" " ���.��|N-�J��\H$���j6c���-�p0xt��yĈ,W������E6v�$f�
�_Y�o6k�$��O>��	��iG��\����ͽE���l&���f$HU~(���bP����z��[("����yR�a�<@LCO�7�հ�xD����K:VR��'�O�q�z�G�,��ˍ+�Y�G�ڹc$h��*!�8w���E;��ظ�\s
�JX<`W��ɧ=�>F>q�,�C>��n��v#:w�+��ج5

׏9�O�
͑�&�I��O��C/ u(���\0^9n;��
~h	&6��!+�潺袋�� *�P
+R�Y�1;�Ջ��7��1�͆in�%���^lL©��?��
�W�5
N?�t�`"6�G��C9$�:��G�
CǍ(G�B	���`}V��=w�څ���0}���oaݲ�(#�=�@��)ؒ�7��4!�"ۨ����s���[o�꛵q�0�Yx���o�z�$q3�ù�e!,��sc�z	$������0�$G�f�'�|2�	������M7�ԤI��q�h 
��<
�Dl��z&ՇCR�z�����@�%`��xF�c9�FM�,^����fn��99�O>t�!�&�����9Ks(I�
a����
/��q�*?U�KK|ɬ���S�3U��_D@D�| [��Dz������w��i���9���=��>
4֫Y5;{�?�ͼo��a[c��ܧթ��,��� 
B��1�֚�� �z�=0�G�c+n���i����������@	u�R-�e�
�c�B{v�R�
�׫NY�?��
�9���X��*V��MU���H�G�-LO�ۗj�r�*��mZhώ'Gi�i̲��I���  �%�
+��"" "P��&pn��<�r^���o)p�M
��)b��&���_l`$XD@D@D@�%�k�g	_<�ils�SJ��
:ND@D@D@D@2��[D,�Vv2.g���KD@D@D@D@��@̓l
�xf�|�r���XJ�ؿ�X
2�nO?��IW
+�'@~b���t>��Lr
S�v<BL�5k֐~�R�%�_���K/��ITƤ�5�*0��
j^R�iӦ�7�K�\9�HY[�$i��߸�u%7�	Pd�rt�W�^�|����֤9#����T�~�?Q)(" " �@�D��vc�@θ��娓'��y�)ABM;�P�z���XϮ�wݺu�4��\��TI���
웁��@�\����?��/���ݻ��*��t�v7�<�ҥK).HM�ŋ�o9$p��`�^�BY��z�:�?��Z�ҥ
�tx���r(�l���^��hF" " "��r-�<C9n6Ƕ�<���R�G�>r��
��#��L�/<����F�%�aj4Ph�}�΁�
�a�
ƾ�L2�LS����/��2Cɺ�ԨQ��oӦ�[׶c�Sv�C��
�u�YSC����߸�
+�C9#@nr�c�i|����M�8��;G�
;���[~�匏�#" " M��;9�T>�R~�E�J����-[V�XA��}.��l�
;v���رc0��5k�}��x���N����t�1y)��	�F��0��$i��ݻwϘ1!P��
+H���ڵk�0sg��
+�AS�2J���֟�7���qi,�k޼����g�
j ����J
+��Z�j
>
�Z�j��u�˖��~���v�����ٳ�!<��ܹs]!7n\�vm�v�ڶm�~�z��ʙ7o����C��7�@u(g�֭ˌ�m�f����{��l�2b��F����_{9�鈀���@� `������m
�ǿ
i.x^m]
bC���L�&C{����?ǜݻw��c>�U�u��n�
=z�Zv[����Ŕ!r��U�fͲ�"��S�N%�c̘1���z�:T(_|1�^�ƅm���^��h�" " "�Y�r�0�)�"iذ������ՠA&i��I��]�2䬳Ί��;���
0`��A��T�v�1��vc]�9s6m�d[0�1���o,�sC��C#Qά�2��[��a���rE`�֭���߳q'Fđ�a�
b��
+�k/Wt4(��me�-.,Y\�,�ׯO�����0:� J)�W_}��?�뮻H�F1��{�0x1_:w�<e�#�$�7n�q��
;6;;{�Ν�!�g�ھ�(�c�R�a
�n&դIֆ��	j." " "P	�l�|+9%�r2Z��G�
M�
+�E�����^�I�
���l���HOK�2�
8�G�a�v��L ��e��������e
�	�
��4�w�
f�5�T
n�)I9�~�fC��ǭ��T��2�UӦM�߿?w���v�y|*,
M\D@D@��W���ˇa��mf
+�<��cdVfE
.�P�,�J�b��}Ô
qX�&a3�E]DP����Ij���t�v��4���uo�ӪU+�7r��
�W&���l��D���*�,"��%a
ɹ'L��s���
+#�R7�L �ux�_-Y�xĢ�l�����
���9
������++�JO(7�e�K����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3w���>��j+�վ�N=���Z$��&"" " " " EB�Y�G&�,^�
Q$�	���=;Q�d�r@D@D@D@D��ps�Q��:~�-3�is9{v�$���I+�L&�_�$C
d������d��MD@D@D@D����")�3��" " " " "P�
+��Yd�+Z��&" " " " e�@�V���dX�
�>���XԴ3�~���1w�\�=o��F����cf:�ۣ�>j�����k�˹iӦ�7�K�\9���6�- �g�e��J�'@Q��#G�^�z���67Z�hт�6�ֻw��W\������$'P g\ܭ��cy���}����]۶m������a�f

�͜9s��͉c-]��"իW_�x����Cyj����+TI�qCT8p 5��t�B!������.s��ek&M�d��kO�R'��籎��}�ѵ�^;t����?��gB���5jX�mڴIZ�j|�۷�С;�2Fi�(Hm��R�~��%���
:�1�@(ݷp�‰'^~���
�r�v�o���3>�������E�
�9�`����{��ѯ_�+���$g����
/���x%�
�rǎ
m�j���ݻg̘����$��X� �;�k�^�b��2;DU��k�" " "P.	��`�[����s۶m�[�.&.͛7�5GfϞmG�u�ʕMx��6nܸv��v��
+�~�z�L+g޼y�Ǐ��o��ա��[�.�P�`:��f˖-[��dq��Wp�������d��H��Q#��=���ݻ�z�{��-����5G<9�l\���]`�b�
r�!���5k�}9��:u*�
cƌ	U5`��c�A\|����m�Ư]0E@D@D@J�����&rb𲿂w�}��A��|��ǃ��4�!��^Æ
m��
�C`�ϙ3gӦM���|��7��!�ȡ�(g�]M�>=�x���ǪCE&�u�V�_�N
�;�
;v���6lࡇ�� "���
Ss��'�q��>9�V.�1
���{��Y�r�ʀ�`4�M�ƪ&l_�(�F���;w�2e��@��
�7���ǎ
����s�N��jժ�3tm_�Z��
+N��p���M�4a-ig�鋀���@�#���̕R��o׮]	 ��[���g�[�jV��
>6�
>
wo�
=:J�979@���
+���{ό�����N�:�晍
lqͻF
�Hlw�駻Nn��naK
�̝o)\b�
�6mZ���I�}�i�����_.��5������@qH�"�S�j�̺�'�|Ҷ��j6*2`��M��$�\r	K�
y��ɸIg�
��-ҨQ#�H�/mP;�Z���0�
�6�ׯ�W��i����:TdÆ
#a
ɼ'L��s���
+2�]D@D@2�@��og
q⯖,^�����y��/j�sϽ�'<�ᓑz"�Q��Q�H����f����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3w�}C����yi�s^��U�SO��+����"��
E@D@D@D@*
��+��}� �5�K�M����駟JX
'" " " " ���A�4����ɞ��tr:�" " " " "P�����{m��4˩��KKS�>ٳ��0
$" " " " �"@��Z��l�%�
+���
%��.�x�X��
UYj���������@I���
��+�R���> Ce�u�"CӦM7nl���lG}4o���o�������歙3g�s�9�g�
��'���3��o�M呹s��q����
}�Q+�O�>�@�͖
Пn�������c=
��-��qJ� EpF�
�z���˗�Y��ѢE
2ڸ[�޽yׯ��&��E@D@D�bp�ʹƲ��u�}�K�.�R�J���/^��~���1"�}�ُ>���n�o%�OM�o��뮛?��O?�����.�0����K)�����a�f
k�o޼9�z�1���F`�^�B/$�qCT��K`���Ը�ҥ
��UW]u�e��sq��P�Ǿ��^v9Hs(���:�y�<�ra,f��o߾C�츘=���?�{���

��衇��/��r\�����+
+k��k�
:t���z&̸f�Q���ߦM��eՂ�'�
嵩ݍ�9xh�qCV�2J����<��t�

'N�����-۾k�.��_{� �E@D@D�l�ٿ6&���`
�o-cc(S��5�]d��	ϰ�fb�-[��X����IA���=z� ��+�(̙��}�=����޽{ƌ�1�
+3��-���]�6���;D"��ijF" " "P�	��X�W)�(N�L>��7�]��]�v�F�_����Z��~���ѣ[�jelͤ����+�:ꨣ����={n۶�u���S���m��ٳgۣx�]�reO�s��Vμy�Ə:�߸��C%P�n]4��4������S-[�lM�F$���_{� �E@D@D���-��5��x�XK��
_�WS9P����p�!��ni֬Y��
Y��w�^�Ǝ-���s�=�{���z+r��	���։���?�k��r��ԩS	�3fL���
����_�rU��W�_{���I�����@�ȳ��&�'F��\(C��c�� ���"97dۑ�+W�|��׏=�X�)i�
��.'nw�}��A��|��ǣ�nذ��uB��l�9s�lڴ�6�
&E�3��ӧO
:`��cա,غu+jשS�(�
�
;ܸ�
6��ln�_{Y� �E@D@D���
Inr��]L D���'H�
�7��qǎ
����s�N#��
�����I���l̑{��.�w����t��yʔ)FH��v�jժ�3tm_aӱe� )�0��e7�7i҄5�eq"�YD@D@*,��p
+�()9�W�Z�5`6B����ɚ<�
����F?��
@X��/����h�"�_�ݺv�J�1�1���|:�$�p����t�e��F
�HTGj7���H

��^��x��>M�6������<�\��x��������3NDr�E��̡RV�r�hS'���lT^ ���4G��� �p@���;��
#�21�j�:q��:�'�|2XY7y�!C<�Q�Q�F�1X#��
�ޞxe#-x�h�ի�6l	�H�=a��W$MJXƦ$uE@D@D��0�/bfr,
#�\�:��fK/�|k9\�?��3x���.��0|4Q(r��x
," " "�:b��9xr�
;oߵ��9��瘿����4�X�f���s������|�4����9`J�-Z���$8� ���#D@D@D@D@D #	�gV�&�S���Ji�6}�g��'����(k�.c���nq[9�
�([3��=;6r�lMGڊ��������
+c%�ˆk��W�T�+��
ԦO��-P��������T4&�"Iݾ�B��@n����6�r��>������������@"ϱ즺(`+�"%��0>���c�ـ���)�@
E���v��G7mڴ_�~۷o7}L�݂����裱v��O�>�p���Kr03h�ƍ�>WR��)�s5��]�j�P|g�ȑ�W�^�|9ǭ�-Z����z��ͻ~��BG�������@n�r��|[��	
A��͛׭[GGJx�����}��g�}���>��ی�?����gg�
�G r�i6cX�m�̙
�(a�ҥU�T�^���ŋ�w�
�CPS�W�^�C��z�:�����qݥK
+�\u�U�]v���-O3i�$��_�x����������HYdV���߼�}��U� �>}:�^{�5��L=���?�zx�
�h-u�ԡ�a�
�~�i9f�Q��=�M�6Iˡa��o߾C���
��QΚZ�IK &�O
7���S�	P�
�g ���p�ĉ�_~�
�-{�k�.��_{E��������@��W�v�e��j�f��K��w�؁�cǎ����K8D�m�*L�^x!'���?�
CM�V�޽{��3��aФ:���@Dծ]{Ŋ�3;DE9P}D@D@D@2���`�`�r*j���V�ZÇ�<�V����o��v��ѭZ�J�6m޼��-2{�l+�֕+W�;w�;�ƍ׮]ۮ]��mۮ_���%��ʙ7o����C��7n��P�	ԭ[۶m3
��tv��e˖��ۈ����+8OM_D@D@J�@<g�	�ȯGb�+ۂ$)h�k��K���[�SNٻw�Y��ކ��iݺ�+�G�
����.ӄ�i�K͚5˾�
^N�:�@�1cƄ*0n�� .���s�6>
��_�`�������<���
7��	1b�r�
��]�v
2d�Yg��ckb��\����_?��cӞaÆ
mm�
�r�w�>gΜM�6�F�j�
�X��,#�F����6��[��a���
+M`�֭����q�F����a�
z��
"�k��45y(�New�J
C9��_$��ׯ�zO)ilMLd73F$Y�t�
�ܹ�)S�A�~#]ݸq�z�ر���;w��$P��E
?����[�	�㘘x3�&M����<OXs��K�Zȉ��i{��h�6q��1���c�� ��/+��{�=s8>f�?;u�tB|c?4��]#��V�F�:������U�Va͆͘8�[~/	ͬ��
�6mZ���I�M
�y���˅��E@D@D@J�@2+�ɯ
�#^��Q~s!|�w�Vُ2e7�,�
�C�E5jd���uo�ÚB�
��!l/�'^�8Q
k�����F�\}*,�aÆ�0�d�&L�G���&." " �O��s��d58�ْ%����;S����;��=������/��|�P�� 9�\������� үC����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3o�C��|V��
ى']��-m
����tZD@D@D@D@D��0�rn��b	U�Gl�'{v�`R�ϋ ������������\�R�b揱�K at 5�>ٳ�I�Q�hH$��7�s����8��O���<���������@�H�,ίۗ�Lv�����PD@D@D@D@2� �I*y�-�#a\&LU:���������@D���'�r�s9XЮ]�n��f2
7m���6�?���f�
}�Ѵ���o���n�y���Gc	�L�>}�����㏦����3�P܁��%�離�'�F%P�q��v��+M�1a
���(���7n�s�ne� EpF�
�z� [...]
+f�9s��͛�Ҹn],�
�F܊�~��NL��.]��J�*իW_�x�+�ȡ�5{��z
��z�:�]��u�.]��~�UW]v�e�\�27�&M�o���]�\D@D@�
����ǹ��3�W�cj��|��������';��C?�p
+�a7��y�b��V�F
K�M�6I˛apL�>�n�������|�S�긘��۷�С;�L#��v �>��߸����D<(��q�3J�-\�p�ĉ�_~���-�Γ��_��������:��1ќ�<J&��I�&F{vV�\�8\��1�ڔ��/��B�Q
+n�\r	��
;��v��1m�~���ž�PfD�зBv��=c�
|�F�~�@F �v��+V�0Z�C$OFi(eD@D@D@R%�|��lݺ�^u��1}��t����~���ѣ[�jem��͛ۚ#�g϶�� �r��s����L"�Z�j��Z�Z5ϻ���Oi܍7�]��]�vm۶]�~��KF��3o�<"OB9��z�:�Qu��E�m۶���tv節-[�&o#��Nӯ��r��" " "P�8��yfr!S��SNٻw�Y�g6ܱ��H�֭]�=z������2a��u���wVR��
�c�!�z�Y�f���r�ԩ��3&�"7�Xu(�.���s�6>
v�~���&%" " e���+Gq(�N��?é�ei�g؈X�De����c��86lhk��.��Խ{�9s�lڴ�îk׮C�
9묳�v?�~�Sk�|��7��!�ȡ��j�M u�0nءz�L�<oᎋ"�yˆ
xXa67�ȯ�LR��" " "Pf	�#��&q��
o�%W��U&.��mq���61&���"�Q
�;w�2e��g����'�)y�
��|?<����t�ƍ3��c�fgg�ܹ�s8!�
����:�3��c
��q��3R�f�鈀���@y%��l��-n+��S�uDž�������U�V������XI��
PVڽ��{��=�����"�ԩ�	�
��4��
n
F�E�7XEf�!����L%�t	p�4m�4�Ð��<0�qs)��n]D@D@D 5y�r�d�h�����]t�E�\s�W\�ɍ�T7�,��>�T6Im�zG��
԰nlvX�h�a9������+o�am6[�"x�h��W#0l�0Ƒ�{„	<'I�
��MIꊀ���@�&���fK�,���[�Y0b��=x�=�g�eD�&�ً@j�MJ� �(4b �d�
<�ۅ����������s���{��}h�W�jv��9�f
��g�
+�
p@̫<��[�t��Y�x���an�BOKD@D@D@D@D �	���6m�g�J(�_
+��������d.o-����_3��ٳ�I�Q�&�E@D@D@D@J�@^-�Qe,æm��"V
-" " " "PT�(cvr98���������@F�7�
�+�NΨ�$eD@D@D@D@J����ȵ����|��؎>��M���׏2�f�ݳ��Ժ3}���ѕC��^�z}��W��+��'�q��v鞕C��
=z,[�,���o�0�M{�>}<z���r�'�=a
�x��
+�W�^�HP�f�ȑ�W�^�|�ʹ��-Z����z��
�^$�H������@!	`[�2��c[t���>��>��G�v�m������?��

��`�F��ɓ�m�v����δ��ٌaa��K�V�R�z��
t%����^k޼95W�\:?�3g�ܼys���!�'���������C�8p w}]�t�6�UW]�g閧�4i���_{��W�����@�'�$g\D{��C=���)t�}`����V�N
�
v�a�e0D#�Y�f��r
f7�[�ߴ��F�V��ڷoߡCv\��ǹ;`� �	�
=:����oӦM�rk�!��(�M�k���~�*�N����<��t7��~�Գt˞�ڵ�Nǯ=��+�D@D@D���I^q���A~e\��C�ڈ�4��x��W	����]��ܱcGk�{��Vvvv�'���^���: x�ݻwϘ1�b��i+�3� �5�k�^�b�ѓ
"�2\g�'" " "�H�����i,
#�c9.��o�ʼn۪U�P��S [...]
=V
�4��/�����O���_{������A �V��U��Âd�믿~�dž�hذ��ҠA�3�8�
|���?����-۟CH/`ڱ�YHw\|c��'d����L�t��;�|#�{��s��ٴi�U&`\�
Q��mO�>=:w^�G�C�غu+J�`}6��v���>�ذaC�����g���������c&
7}�26"&2��"aD��.0�Y��'���
�7���ǎ
K\�Ν;=�	� &�0Za�t��yʔ)FH�q�U�F��؏�(�c3� )�0��Y7J6i҄�����t�!��p-}[���^x����#y���&01�^�<;u�tB|c3���g�}��c��ܽ��C�K��
�
+���{ϴ�����\Ė�~��?{ժUXKf����ㆪ�K�ۤiӦ��ߟ|,�!���/����J1?n��
��YQ�y��>Sd�M:;d�Z���9������l�aП��K�,y饗ȧz�廇0P�F�LK�m�Q�~}O�2q��f��)��
U[
2���a�HG��	&�\"i��L�_�������xd
uR3��gVl'N9�/+�7
4�w�2B�D@� g\���)" " "P$����s��nv޾k�O�s���1w��g�i��^ͪ��
�̛5��
���
�Ư��u-Ni���W�f.�IH����������A�1��Z6�7�MD@D@D@D@<r
+�ɠx�"?U&]F�f#��|D	(��s(��ˏK9~�L:�ĭ�?�@D@D@D@D�X	���ٯ\��$\D@D@D@D���哭\�N�f�����\*Ԥ��9����9��͖�n�����������@0�侙o+��Ae
�u�l�� d5�7o
�>���fQ���6/��G�ӧO���u��'���cٲeVc�͝	H�ܸqcw��gh�?��~W��v��G3D�~��o�n'bک�֫W�����m��>��V�̙3�9�
"@Ⱦ��O�v�y����׮]7�|3����v�&r�'�|��Z�sW>��Y�����@f����_|K�W5����w�WԬY��
���W^�e˖��b;n޼9������k�5o������ʕ+M�?���$�,\��}���K�V�R�z��/
4==����g��裏n��6;�i���mۮ��z�

�F�n�N�?j^w�u������=J�y���a�����$����_|�E�>����N��C*Dr�e��ROD@D@���1���5k�
:�Z��
{��_N��P(mڴIZ���CE΀.��ѣG9�~x�:u�9���w�SE�}��
:t`'x���DF�n���mQ@2�͚5��[0�qo��M����
z[28�)|�!�
+�3)��8��2�x�S����9��C�	p�>��3�֭�I
��
+�[��_��k�r�CJJT�k��ѭ[7�(�����
����˗s-�
9���$������@ �Z$�j���9s�D�g�/��Bb�ұc����P�د�tv
٤G�����O���M;&���*��*��z�e_�bu�C�b:��'��4i��
Ύ���2�sD��-
��P���s���{+��#�<�
.�ٳ'��
+޵kW��\u�U�;w�q5~G

<��3��	;�+T�:������D!���>�v���K8o�v��fe�3�<��ܹs�:�C���o=����ƍq�1n۶mׯ_�{;`���4�'w�V��ML���'�x"���1�i7��ٳi1��G
uT,�IUϭ[�r��
Lg�-�sD��-U��`%?���W�&@��#�C!r
�0Nb�ɏ3�{���	�Y�jU��x�	��\Ư��\��\rI�|u�B 
[��',X����
;v�Ͳ��C�k9�Z~}���6�]�6���g͚,-
=���"��{��k�f̘��o��������qi��NZ�n�����3`��sNo�(�(s��j8`隝�
r�e_�cZ�q��Y!�GrժU�d����N�Gh�F?Y������D$���M*9�/�7����ƍ���p�q\ҟs�H
�4"7X��t\�D'�X�qb
���/4d���
�"�/b�j`�
֏�}�S������㏻�܉�mР�w9�]O,!��5^8��sp�s���z�D  �(�
�VV�g/��&!��G&��x���>�lb�U�=�s��" " " ��?�EP���~  w/Ð$��&�����"Z���)S�$=0�p��ƙ�un��cǎ%�y�ΝϮ�3�?61&2�g�n�4$����������j��pj��C�d� �J�H 6�Lv��`�q�[�6l؀��C	s ׀١�O�}Ɏiٽ{7���/+D=���ܡndm�={�Г`z۟wy�Ig�n��u��S�\$<�w�d� �/9�p�.Z���g�u~MLL6�,���	2�D{��&��ۈ�I
�c�=6}�t�������l����1,X3GRg6v���% [...]
7i�$�T�T���P�G
yģ�ب��6��j&�az饗�/a޲5H�ži$4��mP;��]�-��0����?��O�B^xʱTX�g
s�?��t`F�y睇�O�(��l�%�W��I�#���qdٻ�kȖ@r�P΅���B����R\���{{	���y뭷�lx��;���{K��?��c�|�iLd
���SO=e��[o���t�}��B�� Ѝ;X����ej�#" " �@�Q'5�N}�X�:�ujx�A�f��k�VL@��D$�O7bOu(*<���s��nv޾k�O�s���1w��g�i��^ͪ��
�̛5���}g]�������)-Z�����'9" " " " "�q�b,*��l�!{v�: �.S)$" " " �J �V����T�,��m:dώ�ޮH�0�2I�"��m:d�N�<�RZD@D@D@D��TD[��`J��������@Y%�4�"��
V#��"��" " " " " [...]
=P
J� ������4W]u���[���=V=����_#�����@'`j��
��rD��5kp�
:�(E�)G��P��
z��N�=�	�؞i7[�5�
�ެY�[n��ږ�

��Å��4R�}�Δ>����`�~z�i��-Al�`�S��C�츒�
\�8��
:/�qS���M����<���O��n����[��{V���VX�E@D@D@������˵j�B�9s�㋫���P�'���W_%�C$�ᨶ���c����NOH�Q����I��~ C��+g���3f������|"XHD�Ԯ]{ŊF;D�R�(]I
�Ps�0�}�vܮ]�̟??�
����ѣG�j��ڈ͛7�5AfϞmE��O<� ,��Fb8���Çc�V�V-=!
�'�+W�<w�\W�ƍ׮]
��mۮ_���%�r�
?~|�>~�
�%L�nݺ�HȐ�
Lg�^hٲe<�18V=���_É�����$H�YK
ł
#�_K� [...]
+7�Xu�(�*����)����g��RFD@D@*&�4me`�]&�`ܸq��w������bx�|X�+W�|��׉r��6lhk��F�mǩ<x���?���8=��r`׮]�
r�Yg�
����ݻ��i�&+�|��7��!�ȡ�(g�7L u�0nءz�D	lݺ��L<wJ�I��F6l�!��ܠ
���^�������$#���l�a�����4��ͼ��%l_��Kl>Ld��"�����"9�5��	
���ׯ���JXc
u��yʔ)FCb�q�sa��cǎ���޹s�GB�1n;".u+E���8&��ФI�n��>ZD@D@D U,@�AK�V&+��7�L.3�
/Z�衇
�e�sS���`�f�V�"0�h�P�$ �%�_x����#y��p��
+�޸��y:뉋����3��c&�S�N$�fc�{���a�רQ�N?�t�)��'Չ�1�gڴi���'?
�^ȟ���/�X+" " "P2ұ�4h����n ���~e���GX0�+��f��#�<:
7�,����Lcv���� ��lT|Ho�P�<
���6jԨ�9��
^Z76;�e��0�
�6�v{�=�2�B��:�/>Æ
#a
ɳ'L��s����otI(rYG��lɒ%�?��3[���{Ь��fn�k#�"Pv	�3��*/�E@D@D�� �O�'w����]{~ڟ����{�>�O��jV��^0gެa���;�v�-�z�8�E�t��e���(bQ��<ʹ�2K����r�Ǧy���؏r9kMJD@D@D@D��@�rV��
�W17��ٳS|	4*&g�ZD@D@D@�
+�|[���\!�e��ٳSVΥ�(Zy1E+U�D@D@D@D@D�L��'{7��+S�Pʊ����������$
[��> =5��Ҕ�#�2U9XG
�.]�̛7�v���
}���9R��C��C�k׎� 9F�>}�x�1���v�tSe�W�^U1�z��JΜ9�s�A�#?�����w���SXDT�hڴi�ƍ�%��q�� Ρ�ԡTPtf�ȑ�W�^�|9���-Z� �͓O>龤jc�h�AE@D@D@�����m��•���w�WԬY�Z
���W^�e��
u�>��([
�%�)��M7�4�|�R�.T�l޼9Q�߸�c�Rp۶m�_�9)z��

ٷҨ�w�7R(}�~���{��qQfݺX�>J�����.]Z�J��ի/^��
e��C��G9��	
��w�\*W]u�e�]f��
+:�g2AI� " " "��@R8
���5k��W
:t(nT�N_~�����=����5j��#FPF��K/Žz�gX[����i�&i�4����Y�f��r
U�q�"��:u�s�a��o��^�VfF�Caj	��0��O�N��^{�}�ӹ}����ٱ��;�;z�X�	��q�3J�q�5q�D.�wY��LPX:������$�%j6,c=����x�kժ�xs��)$w<�X�NI�/��B��+�H�W_}��

���X��z�)�C�ol�
;v�?v�BB:
eZl��Īs��>�v��\*FCv�����РG�
d1�X��������@b���+�۷o�~��a<`� 
i.��͛��g�8_�5�6hЀ�C�
1G�ٳ�
�'��3Ϭ\��ܹs=�����O<S�?�m&�����J�"�����Çc��ԍ7�]�>m۶]�~=n�P�V��~�Q�P��֭ˠ����t��`����y/y�4������@
+
+
���q�W��/�5,X@��T�G�
m5�1c���Ѻu�P��㛅t?��u��o�k�#ٯ?�o��&q�����}�>it��<i�$��c����ń"��%_�f�
+k�5jThgu�d\�\����t��L u
�(�y��E1���+��vx�	�7n�}��7f�;ZÆ
m����#�<�w����֫W�8����޽; �B@���v�ʃ>����� }�6WF�k�k׮���:�,{w
,�;.����
Y�k��p���z�
��[�2�	:g㎈;Fo��^z�׿��"�K�th(��}�<��m�ı�ڵ
ۗ��Bؠ��][!�Ƭ�kԨQqϘ)d�2eJā����
������"}��/�@���.��h���E��رc���w��][��d$��8&�Q�I�&�|�0Qdk!WL&�B������@'�틑p���ʡ�29.؈�%�vժUZ�(L�I����L\��-"w.U����k�P����=�����7����.�
+��K��n�9
��
/�{M�8�B7o��ߺ�i¯���/��>L-8�����_�jU��|��
�1Ҹ%��Wp�N���iӦq�rgu�i�]}��\0
m��Ou�j��W������@y#`0L�r|���n�r��
;�R%�pY�Ư>��,iz�Gh'H g�
7�@8�����n�2k��a6"��b����?�0G�	�rX��`9�(��]���Ǭ���8�ams8��طr(,��Nfe��*N�Y�(".PϺ��iժU���v]���
6�.��0a�7���J%�hƚ������'�
q�Ve
uR��K�<�2	`
��
s�݃��ˈ�4u�E�� 9�{�������'w����]{~ڟ����{�>�O��jV��^0gެqԾ�y���3�W�-O511#��(G�.�T���������@9#�W�$�
v��撚�M���!��T(�8e]�BM^�������@�"�s@�?���}l���Nd�Wb��l�eώ���p�e]�
�+�D@D@D@D��	�-��H�WnN��;��|�1
�{�ۊW.ᓣ�D@D@D@D@��@����?��>Ϫ��G���-��s}�q+Z��Ew�$ID@D@D@D��0Q9�m�E�e�Z$��
�B�22=�)" " " " �!��L�����egm_ܥ��!�ra0�X��I oQ_A[9
{Qb���&9i-" " " "P�	C9'g��e<z�1�mF��ɉ��������@y�rb
F<[�V������L��H�
+|mh�" " " "P�	���"1�����e��+𵡩�������@�&��sg�l�����
+}mh�" " " " qwr,(9+�U���+%F(���/�Xl�^�|�r��\�Xh�" " " " "�K �al���me|̎;ﳜ˺lD@D@D@D@*�<+9~a��ܵ}�4vc�+�VD@D@D@D�����0
k+,���." " " "P���/ϯ��b9ׯl
e
��6�8��8�_9��_Ł�����������@A���W�w�y��U�u#" " " "P�d�����ŕ�el�c��ЌE@D@D@D@�	x��y��B%" " " " ��7�2����r��Ud6���������@E%��lj\Ƿ|��
�zUh�" " " " ��S�.����.c>�b�c���Pfm" " " " "P�x+��}�y~團�����r�TE@D@D@D@����y�d�,�r7�/" " " "P�Xײ5��xe&���&" " " " �@,Ty~�����1�e0W�kC��@��[9�G��t����������@�V�4����&���ED@D@D@D@D�ɯl
\�T�u!" " " "P	�`e7y\n
���M�8����ДE@D@D@D@
���
����+njh�EHD@D@D@D@*&� [...]
+��Z$b!" " " " "���+kI��
(H��q�L�8D@D@D@D@*4*���ـd�`T��A�HF �|�le]
" " " " "�K /�r��x�k����!" " " "P�	$��k�L�r�G$ " " " " ��	�����`�\����/" " " �@n�r
��+�Š�������������kCD@D@D@D@��:�f�/�����?�y�=�����~�3a�2G��/��9xr�
;oߵ��9��瘿����4�X�f���s��r����Y�Lsr^���SO;��WΏd.sH������������tle'�����"ТE
U�f
s�1�4[�5�F�
]s`����D�P�
��O�8�RRD@D@��@�Vέ�!�-o(c�mժU'N<��cy�c+����ov��I�
+ [...]
�ؿ|���3�<�좋.ڳgfh�
w�駳�/���e˖M�6�q�ơ��l�r�޽�w�>���������+�ԩ���#�M�6�G��馛�Ν�[��/٥K�뮻����l?}
�=��ӡz�uH���o߾M�6Y�?��/�mۖ�%y`柯P�
�%IOc�������.�x�>���(Ǭ�x�����2[�f���?�}��0 at ck�}��yp�qZ?��#o��F߾}Cq��7���?�1{�lv��FϏ>����o֬��'/�y�A����[
�[Ǐ>�(��
�/������&���7���_ۿjժ<�w�.�����u�{��8�����`��>���[�n޼yܮ��D8���!�G�
}�ᇸT;t�`�T�\��{�����c
�|��v�Bv;��֭|>��
x ,�(s�8㌙3g��_�z��x����������
.��c�
v�a��u�������&G}tJ��������@�01q�8''+'�R�k�#�z��_|1���/���`U�n�:T�9眃�Lgv;e۵kW�9������ [...]
+�x���ׯ���r�-W_}u�J�� � ��������u�]V�����q�_p��
w����X�v�B��
�s�]q�<��ܹs�>}<b	�:t(�Ə�[�
rW`�v��q�q��#�V�Z�V�C-Z������," " "P8��cl���}��
�
Lg'� �#p"��u�YD,nԠ����o
�[��=�0����f��f���W�^=7�wҤIx[1gmϺu�oc��|I
ף���(��5U )�$�$z�V�>H
��ŋ��x���8|Æ
��_5jd.��=z��\�V�!�i��K��_��W ��Ç�$^�dɘ1c�w�����SO����<y�d�������m�ƍp{��'��<�p����o���e�
˫����e��" " " ��O��W�[C�R��
e7
+�V�N�~���xp�
7�?jQ
�}l��۷�ر���(f���^���{5kִ����K/���c�U�R�0* ��\�5pT�Q��O�
X�5f��+�|���kg^�4�p$p����;aLs��$���0L�c-^v�m��k-]���ܴiS� �ٙ0a�<W���k����L�_���
���E��䈀�����D �8�Y�Df�R�o�!ùH�����q�_W�0
H�4pbg��D9�x`�'�>l,sC����!C�%�ʿ���y~衇�ƭ[��.�f��2�w�
}��>o۵kWړM䙓��=�9QWN�����"N��0�}���G��{98_QH����=<�?ĩ�������\�����]�����׿�5wV���u�QX�������-�9��N嘡

��9ˈ��[�.v�� �#�
+9s��
��������j���o&��=�'��1�m;�+�p���d��c
�N�t �8��qC�1�����dy;	9�u��IZ:�l�a�c��4-'�tR�3bn�C_�
�0�ǰ�
��y���$�
�g�x��
p
��
�2=�7
=/���_�[Sle|̡��AD@D@D��r'�,�

9��8����
����Ǡ$�Y#0�X��F�5
=c1���$bc�����e�#��X�f�����ڸ��[�
������͆A3k�,�$����N��
Xoٲ��gn;���>)2x���OG�d�ak�X�e;��c8��5�S]ۗ��	��}��D;���
O?���9(�G�;w�$��;��\>��S{��
�a�@Ƚ�i�j�8Z�oI��

a',��������S8�g0��[�^����� �
�k�!�Eǎ
��?E9/���
4�:��_}D@D@D@���k������Nv���$7!��7o6�ʘV={���������	i0`�Q����c��}��3f���ldl0�"�

�X40I".X�f���:1
n�����+121n��Æ
#a
��
���k���c8���mi��D�X������
m�d3\R�
�
���&�
E���$R ��(Il �9��W�a��>c!���ۨ�Qn�WR���e�l�x8k 	���_�~�%d�ߍ7�H��(煸|�"���X�(4�\s8�蓛/Y���O�c(�ƿ��
|��{�6n��B#" �`����7����s����M��۞�'w����]{~ڟ����{�>�O��jV��^0g�,��=��g��G�y��3N=�4��/�Q6�r<��h�U��ً@�H��3
"7�̙���:BD@D@D�P�9�s��"|YY�Fޟs K���B
���&%Y�扩HK��2@�P
�f�Q�%�e`�RQD@D@2�@��l���
�S�tme��سS��t|"��� ��U�r*��R$�|q���Y0��'�1����g7<��{�yg�#������H;^��X�ܒxe�B�y�M �	X.�^:VD@D@D@D@��X
�q�P���|+�Ԕf���J�DP�����u�(l@�����R2����i��.
�." "�9�/T��������c��+ǝ�1s�5��UJ
��M����T�˄����Ir���P#���
q+�q#�v�կ~E2O����'@~R}Ҙ�K�"�w�\�)����O�_���;����D12�;�8 R���3�t%�m����
+����
j�ڵ��v u�z�<a��:��(��"uJׅN��v��9
Ԟ�%��f͚�5*TH�z	LpW2+�L���׵�U�����R�L��L��y�[�̸��P3ϔ��������KQ�LӧQhh�"!@�4�>]w�u��������T3%�����r�!E2\��
:`,ں]�|�
+P��ȇ.��S�Q��ZZ�&M��O���<�4%�N>�dS���
����r.�Q��zs]
3f̓O>I�`9)����C^
���ʉǛ��Ԃ��
5�l�/\�`A�Ν��0�W��{/7�Y(��l�H�nݺaÆ�Z��xh{J3I:��p�ԩ�Yr�2{�l+���.�������0o�t�))Ig�q)�v���SV�����C3���IѾk���I�u�Y�N����6��ܷ���7��z2
gn��N���|?}�'=���W��Mࡇ
�V�T*?@��~�-��b�ۥK
8^Rx�}ӎq�?(��?���~�m"��ƍ�j�vB⁘CQX��-,�z��a��go$�����t���\p�1�
Cv&�fn3(��w	qc������'s�޽��
��ȡt1F�+�;
*�R��������/_�)��#`��6g\����^�Ȫ^�:��9c�4߳�'�������߾��
�o�lڴ�������-Bݺu��#N�v��<��6O�24z
+G�r�r�X�����߸��vh�E������,�OOJUs���;�<���n���.���J���o� =_y�
+>s5S��[@#�O��>��T������@9&�e˖+Vt��)�
/��l�
;v�b���$�����34M�b��t�M�<�
�� ;'�YYY�۷��2;��T)fz�jo��Q%�{�?[��tkԨV�iӸ��[
+m�C��ɡ�
�� g�L_�|y��6T�h�
s����}�s��������o�k�c�/]�����}NR��ƾ�̻Dٖ~��� �aӂ��
���Ƃ��ׯ����=�ܗ�V��o\�s�����c�]��G�ݻwG�?�|=�
���h�ˇ��pˍp�3�8#@��|��3G���X�xJ
�����oh?=�XW�6m�p�{+X��y
�" " � �G�J��Z����Ͽ�;0��� �՞���T0
0
�����F ^�E�̛<Wǎd'�^�7��(#�3���=�N�c������y c���NjJ�q�kϣ?A��Ǫ�����E����KܵQDy���=/�����|5a��ϼ��q�����xc�c�>⵵��fش��iՓo���
{N����m3���ؿw�o�^��Fޛ��X����Fw���	�����>�1�[�li[p$�P���{瑺y
�Kz��
�K/�D7s�_{4�?�W���hРkԨe� 9X�9НoJJtްa�L���>��C����s���)*
��`=]�ф
:�у�G?�����" " � �e��������d�z^s�5-��ЫW/,"M�(v����믿���E6ܥ��#���)�KE�{�M����ڧO��K��m���z�-B�񐲺�0�V�*U��]�4XZt=SҪ��
7��Ʋ��T��+W�@\�G:�������}�Laj�
ģy@��������S���t�؄
�?��'nj�8�4T-�C��~1�B̝_ю��y,��%MD@D �	��]K��p׮]	~�ѱ�	\q��?��s<
'|�C�߯|�(���`;�3(���9�̆E^�~}�!%{��TO�;�:nܸ�
+�c0b�5i�':��8$��k���`�
����14�#��QT�ùq�_�+����QV���
 �>ر�=%�f�N�ɖ�m��~�Qfb���'�@wݷ�ɉ���8.�i\�j����i��'Gs͚5VN���;*XO�?kQ�`��E%?�\�GD@D�"��!����C�/
�ڵky β+�X~[����G a�i��.��
�!i1
+c�D��R�+�
P,7��YDx�A�=�oܸѽ� ���9����J��7.�d�e2��J�vN*'@�?I<}
��o]_��>��+����"t�
�Qc9��۞z�)�(�9�ݱ�V��H��u
+7@!˜qx��4n
+v�''%U�8.�!g�}6K�C�k/��� �~z�D��s�
6l��%Kȕc�n��m
-��o�J��o�`=���\�<=`r������!U��/" "P�	����ZRF`��t��W�����7a��bIs�A�������㷕 ���LdleL#��0
9~�Rq���M1�b)��,"
h���lı
y�x�C>��c|�䓶�����(Rљ\~�d�φ�C7?��c`�_u�U��V���_�u��챕
��
@<��ӟ�D��#FqaT$\� yR��C�5���S��߸rx�Bv3�Z��̆"�!'UU��K 8�'1
+9�Xv,�OO��s
+$Wt��W[!���!�r�ص��L����zrr��y����3%��O�
R���" " � G0�03�Cp!',#+�4O�y�M*"
�����
+3�����Ӛ�DxC	ư�S��g/��)v*�x��@ln=`.�<S�
�
v	:�	�W1��7�GHNǾIcB�3Q
�g�F������g�@�U�E
�%�����-
i�3:���=����e�hG<� ��M��?X�T�d*��K���N�����.�}מ������ݽg�ݧ��z5�fg/�3o֐!�>8�3+����8���
+����\X�r��'7g{B@�
ʝ[��� ��!�]@�x�P�:c�EW�B�>]2A/ʔ���e�>�AD@D@D@D 
d�3�{�o��4(�C�V�j�l��WJf褣����9)�J�uXB�9!1%<}
'" " "P��F���\&1��y�tD@D@D@D@J��7
�y]��ʥ�O㊀������T4e�V&�I��ȡ�l]xᅦ?y�����>�$K
�W����A��%�RaU���m�8���)+>�僼f!" �C Ϲ

�����
+��)$�M,iS:�8� �z
<8���#�^���O���}��w�"�6eJ>��Cw"��կh�V�Z��U���n��Yδ�c�M��-��-Bt%" �H !
9ܯ�U��7�
?��#RC�r����e�
Am�(=3�ń�a~��q��+q�$鷧%3�P*Z�-�4:}~��RO(E�2V)�i��6p�@�ƺ�P���,Ԭ6����w�����/~A�]�vٹQp�Z��(�
A��)Aٻw�СC	T E�n�(
���332�a��g"7�[ԋ����O8�_�����f�|?}��1$�N�����(&��C^�������r����c���<%�Ǝ
k�5�MJ��*��
ؒ?�L\�I�W�����'��:�
�
Hz���@���;N���Hv�o^��K*?@�N]{��s�p���3�T�R6��3������Ͼ���o��
+�����@Q(�R�/�me;v���qpz�ERT�|x�h�f#���ɓ����}��<�9�������1c�PU2�=�	c�����H�7o
��[�<%Q�4��
~ ٷ1(��7�0)�|�R	3X��>r/^��믷k��Bc?}�~b�r5�~�믿~뭷(��ސ�B�x
C�d`�L�n�>_
�Eu������F���m@���z�F'�����3�2�N��P�
>~�������y��w�y����8qb�U�T�s��>ȣ��7��˚5k"����w
CP��%P�j���W;����/���v�6V� ٣�:
+G�X�ؠl�ͼ;s�Lۂ�.ְi�5k^X��駟�y����sp������ʴ�1ű�����CB��޽���Ǜ�m;/�Q�8� 	~���1�Q���
�
s
7$
ή>~o�ܹ�=�-�Ä	ˁ��;+-��0��y��\�~��s~�0tK<��^�~��}���ۀ�f�x�y�6g�
.c�H�W��PPV����|�[6���{>2�!�����
߸�
�85�'��=tj� " "�!��{^|}�w���j��/�y����o��37<�ƺ�^�|�kkzeͰi���Ҫ'�ZG�c;��4w����(�ߊo�vd�p�2դ	� <���G}�c��l�Ҷ�H޳gO�
=��ֻwoBL�/�Ix
��^z�n�(���n0�э�)
�3
�r�t�
Ži��O�
j� ��
8�Nt�l���_�>��Mˉ'�]H��]`�����0�+
+�T�[?}>ר�x��7���/�/_��F�f�5jt�5�p|����	���?
�
���������o�R~e|�QΚ������.ǣ��n+�T����ʕ+��}� �=-���
+.^6S����_{�'�|����OH�9ʯ�t1���n�P�(�#��"Ԫ�E�-Z�I?�
�wu��7Z������
+�ˉ��a�
+t��w�
,?Q��
+p��CL�l���b.�3"i" " �I �
��y
��|�!��*D F�*UXcj>{*?c�P/�c�=�m��~���f\
hF?$�g�J1&��4�Z��
Ŏi��O�rR��������?��3�.1�|~�C�����3�C�_�~�+=���n��I�zH��ڵky Ų��
�IL�8����H�+�/�5k���{�	���M7������gϞ<R�e��M�o�!� " "P��m��ó���+��뮻�ʼn���
z���<��SXo�'L�>�_e�ݙ�=���4��s�=��2�i�Xធ�3�����cS�����>�%w�E�
+�K/�4@��>��	��q6nK�C� ���eC^�m�e˖gi$�[N����T� �L�y
=�,v(����|�ǰ�׭�>�^��Gs�u	�g
�{��B��h�'�&��;l�0��%K�<����g$@���L�$6���ट_3J�yL�z�Q" " EE �V��NW<
Y���?��dI#F� ��H"
�Uk]�ti߾=a���ǯ=�������ӧ�I�T�~�T%��<
���;Y�O�/I�L;��$�;�������
y����O�r�F!|�
e�p�駳oz��G�'�,\Y��!;蠃��!\�S�N䤋B��<F9�,�)��6��J`�\�~��z=�ԟ�8O<��_��W�;aM�+�%�t^E(?)m>�$e瓎3�ꫯ=#I��	�"��j|cԨQ+V�@��痷��7Tu(2_�y[y0�,^2��-���:��&>ڙ�)�Q�T>c��5;;��4�(9���ק�����JV
�B/���zH����S�x%\D@D��
<�ۅ�������
r�������4�X�f���s�ͺoȐ�X
��sb)
^��������(*sqϟ,�J��B*S�(=�A�_X�ɢ{L�#G��/�*OS�\��T�[]?��b�\D@D@
+A �"�TV�c;�&M��^�<��zk<�49+�ҿL�!�a
<����~�YF0I��NyR>�up�J���S�.9�ED@D mnN����Ԝ�[�|��ft������E@D@D@D@*��c0�r^��u��2�`�8gZ3(�e.��9Р" " " " �I��ʹvr��$�Y|#e�ajZH��1)�M��GM�4��N$:�"<m�z&�=�yJ���U���`�i\�E�mJ���L2���"�O��U
��	�y���HI(n~�|s���_w�ƦM��T�SR�����#����
/�����G�i�Pَbd[��ȇ~��"�IvjHI�"ס,
+���m)@$��B�ލ{��>�-?�E^���ʇ(@��<KEI
*" e�@~
F�>N�V�*�k�"p}��m�ݖ!�"c?嵢(CM�(=M��Q���/>�#�?��"�IHI�"ס�
+�h�m)�)*��'���"�RZ<K�(��r
�k.c��Cx�i�Q��Lmv��oABV�[Q��cǎ�EΩ{�'�/~�
J^�ڵ����r�֭6lتU+�
B�Se��o8��d��٩
k�3�
.�����?�c��[[�n����O8�_�����f0� ���-Q�!����R\��p�>iϽ�
X&�[
+ s]q��iӆz�iG2p z8�T��x�&=�I�qc<�J.B&��`��t�-ZP��}��d<�%
�I?_I?��JI��u�]|�5�
;֞Ǥ�k3�ԩS����~��J���;N���H�{��O��<��W9���tD@D ���}�Z$��W���u��X!�Q
��|x�T�H�W��ɓ'S��/�x�L�M�6Q���wnjCU���4N��(�Ѯ];;hBl��

ٷ1(��7�0)�|�R��#��!`�z�q
���+�L�2��_�5kfV�� �d�u��?���ꭷޢp�{��I���
��>LI&�O�ya+���v�����Ӑ������(���
��믿�<�
=�=����<�3ز��qk1c�
�pO�����ǓC���7�T�O���M���_}������74�o���|m���
v	�����������7�yw�̙��~����5lZ���š�O?����ׯ����=�ܗ�V�&T��%?�
s
}�!��w��m��#DĶ��(g�qF ?�F�D=�y΂;_W��3�ho���C�k�=�\
x��u�(�OW
��*i/�(�I�Ǿ�N����cc�W�^�<x>b���>_~���y%�iR�w����2���	&D~���|�߷
e�̙���/@�[~��ͫ�}�h�" e����y��E�=7�	��|������O�����
{����}�5æ}v�K��|k
=���s���'�yV��L�����jG6������I�~
<T�p�޽Ԅ��hٲ�m���gϞ
=zП�w��<�4���'���|���Kt3G���q�ѠA��Q��oTMC��!6l�����;����r
:Q� n�\}���q)�ˁ�̿n���V��X�أ\��ŭ����+/_��w���/�_9�-��*�T��Ƿ��'�l$,�����
�|� ���f͚5j��k�A������W�|�_D@�:�����ſؖt2<������r�J"
�K������� š�Lei�с�����x\��~B��Q~�i`u�/y�1�����L�-"s��s���m��2?}�����/��ˌ�4H�Ȗ��
]��=
�� [...]
+C�\ ��T�[?}�}f��Q1�����
X�fM�/=��3g�y&�D�Ǐg�Z�Nt�~
��]>��,A����=����D��_�v-�X.�_�c=	=���w^���P7(�����>�_NV�h6���
���|�W�u�]�`�(b
�C=d퀧�z�_B��O�nm;
���ვ`~��>�l�
�?�}�M���K�p� n�B�K&N�������;����ч5�x�/���"ԧ��*�떤��{�>H;��
+C��z�#��PsǤ�H����;
w�?��"FH��*�26sY���}�n�>�ËL^�Y�ˊU"�L�"���!`^

]l}
+��o�e˖���(��N��j4�7Ax4i.I$��+3��<��Wa�R
+" e����u%�H��sc�79���?�"1b�@�=V�u�ҥ}���>������+�nj�8��������_r���h����(
t�x*��Il�
���<�x�>}�V��&���[��

��8�����0ؑC�@/K�2#*��6�>\�� ��S�N�K�JbԲ����O�6./���7A�m��E��ST�r�W��6��#���ᦛn�ٳ'��س��uR)�'��O<�׿��{
2��Õ�� Ϥ��ͫ0���2G �g'5[�dɳo������

��_Fd�d�FW
�wD
�8$��R�VΦS*
K~�гf:�[���
=�Xg��O�Wn��<�����+732)��*g�I���9xr�
;oߵ��9�H3w��g�i��^ͪ��
�̛5��
|c�	�����M�[�zZ����k�2�?m�uEщ��lQz��7]��M�T�u��g�$b"��g>��F�Z^�U�$PD�\�Q�	�r��M�4!�y6n���(�fԨQ&#�Q���]��A5Cd���0b!~���q;D0L�(VH5��
+�E���T4c0�r,�̍��hgH�H�@ab0nZ�ӝ
��\�r�;��@�CD@D@D@D@D �@Q��n/b0�ql�eʺ�D@D@D@D@*4�\�+���E�X����6`��(��ԧ�?yg����>,!23*�I�&eo&lŭO��'�.��3Wt
J캚4i��H �u媗���tӦM�>
��Z�+�:��!�;�J탫ԩQ�n��?�_ԫU�~�j��rme�?9n*[��_��M��T�S�O���?x�`W?����?�|tU��T����$k��~�Ҥ�O_=
O`���\u�]w�+j�̙d¦�f"iq
?J!%$^�Ex]Q~��э5�{��ͮ�T���
Y�(��el��k'Y;���z�����8N���'������^���k��n��/������z��M
'~�x����m]���^���u-����"0�J�Y��G}t�m�e_2�Sf,�2u�[��e�e(�R�&UV�Gѓ���z*��v� [...]
+�1���S��E%?��ҨQ���_t��Qd��_|�G
�"�k?�3(�N�����D@D@���������;�y`��u�m�����~7���������?������j�yc0��J�I;��(�E�6
���H�I
;jVw�ؑ��1t���L��/~�c	�����e�֭6lتU+
����t�Є:
B�2���ᶳ���[�^��'�p�/�K��L3X~�rv�؁!�򤝢ֱ�y�k�=��C8)8;�;N:��#e�M7�_{�F��
�ƕ+Wr�Qɼܹs'^��˗��T��B�]�'�zo�g϶:�ݻw�С�#�[�n�r4o��T?f�n����$��޽;'�瞣��y�*O���o������U�b����YD1���r�-�k�4�A�^ޤ�/�3��.�J��fSW�zv)Sσ&L[?���z����'��d�G�̓�̸\p;��s��NO�[��R���." " ��aڏ���}��@��ٳ{7&��~��~�������4�b?;^[�/^9ɠի [...]
+��������������z��~��O~�<��
+R����lٲb�
+
+D�t)�Ξϗ��s��?��
7���[&.nw1�����_r-�O�t`��,��7n�>d,�*J����	$<���IͿ�~�
���}������11��0bl��5�M�ƾ�̻Da��s܄Xæe֬Yxa����~Jg<R�sp������*��ǵ���
�t�ٕ�?����(<���E��v�7́&L0
+������1[ �Pm�0g�
��^���c��62G1_
g07<��W�^<CH�l��T#��82�>wp����=����O���)
+�3f���Iz
��Ǔ"�
��W_Y�p�5<ں�e�U���r�{�ϝ���ﺢ�o߾�N�xy�����b�P5}-Z�Kn�������]_,Q�a����������$�DƁ�s���۾���|��7_}�տ7�{�6��
z
۱�s��u��Y'�>��[���Վl�_�c>�^��g�:T�
�5��<�y˖-m
�d��ѣ��z���#o��Kz&���^��9ʯ=���b<��<��옖T����
J<�6O<�D����7n �C0�8_͚5c�5�\c�M0.-v��p
�J��3����o�J*ǼՠA�֨Q�g�[&vx����O� }NA��F������y���'?
�
�
��o��G�������s���]z�o��&�ǚ5k֮]Kn�4��}H͚5���F�rt����@E&��W_a	`�|�m�c�`,6���n<r�����ST����!�iy�Wp����,��z|��'�0�N�g��(���|.
9�����$T�+� 
�X^
nA7��#u���8ծ]'1� +�x�O�9ʕ����%��O�4�������4c�%�n�Bs���٣m2��/#$��.
�I�BS�J��m�_9x]���nD�X�C�T)�p/�<<�n�jժ)�nu�����fQ����4����V�w�%�@�–��}~�
�2��1���
%�sR~P��d�nv$�b��~��d�Œ�~Y����<
̏q��P9@��U�LOvLK������o�ʕ	S1?��3���n�5�Ϭ�����A��ps��
k�''���=��y�y��L���kN��
?>FO"<
���'���0����O~�<�2�t3;�2�_�>�"�u����w����i)��휞�~���늱�
�t�2}�tle|���B��
�`�n�j����8� �Ļ��Ա" " �@��-�]�������O�.ʮW��&�j��S>"�l��n_��:�����ʻ�^~�X��#
���UX�<��_>�S�מ�N��"�5.��d5N����g���4���cEZ��������ڸۡ�l�2�����ͻd���»���?Ƈ�?)O4Ī#<��$53����b6
syɒ% [...]
���R�#��<��O���[��},�s�n�6��|��5���qq��
��7�Z�������yI���(\�ʬ@
]��ǐ���kq=�&�K��.KuRn>��)�
+" " 8��4mV��þ���#
��f���b)_�<	�s�zd�?*O�� �|��g�9b�".L?�:���";a����kO�Kp�w��x_���!�
�T?�$��L��i�
*?%9��@�M7�ԳgO����v�:蠃��S��_b��>~��j˳r�6�y��'�9"l70򜝙_N�/�pr p��@@�
 Ǐz��ӧ�	 x^���'�D�
�Σ���xځ8��-��2YN�=�%c�y���ƒT'X�nތ�f��y����+�	��1��~a!�ڔ!���	��C��4&e�7r L[�C �q��-Ok�G�E~�d��f�'��v@�~�|��5���3޻�/������`�+D_>��!�=� ���15<�I������:)��ass���(��b�/���͗�\�*H��ܹsC��JR+�%" "P&
{`(�Hb��b9��[|�Ћ����<?���C�2��� [...]
+[�����e�ŝ��|\�{�3�љ9mi%" " " " ��l��_����R�	1���J���l��c~�e��l��
�W�VnJ^�g>���
c+�uL��o���hQ^i�Ĥ&�2�
��~���~��ى����4�n�Y7b���-?�=װ�����
�4cGpɋ�$f�h[x_�$�� �I:� ��8���Qg��L8&�s)x���Zș��R)M��T�
+�>��r�8'Qy䙥<`�R><�V�B7�~:�$J���R^��4B휢�cʓ����[,�W���D��S�d�߅HÇL$MEB�D
uJ�Q��,�	��ˏ�=�~�E�x�"H���<R�^
+��|D"]�	�RQ��_��:���f�
�
+�*�����iצu���w;��\�rx�o�V>��&����7p,ǂ���s�1�>�r,gY��:k"�8n
��f?f
:�b�
�`�2
'_��^��i�o�ۓ[�
���oz��|�}WX=�v2��J�U����5�sq�ݝa"}��pxA�
�ɔ�%�
?��ԣ�9k�ش>	.���@C�SH�)������Q��\%

�V�j
p�ۭQpq$;�
&��Z�
���\\	W[�k%o���@:�|�
�
&�}���v\v�<��ip/G�
�����I$ꕖ?ρѿ�
�c��o���.QB�Orȷg�->G�f_�I盠p�s��0�J
+?�
��=2�7"�
�iH�o�K&�J��b����
++�b����ʁwQ	?RAX����?[V=�_��r��w�m_�nK��9�Է5%���o���o�r�Y���<�-2�gO�٩�g�
�RV/�K[�y��7vH�>�_����7�y��h�;��Q�N�=�2ޘ�DZ��y�q�%p[\�t���I��ɾ�<�0F0o�y^r
?�㼛�#a�o�n�.qqy��܏B,ϱs��]��qNT�cH�_�=��K��%��a���;�y�I1V7s��8����/�<1v&y�&��x>��5wΆ�w�3����i��H�{�����'�s��k��W�:K�
���|
�����
2_{�a�	{���%�(~X
+>��2Iv������������,G��
|��()�~��n�W�(��}��9<��,t�:�*����gң�
|;&~y$�
�z�Q��\�{6��#���)��
�*
�Gr8Ѿ��
+~�'|�l��tz$u�$�-�
4@��_��#��$P���4��~���m�p���}�
+'9�����w�
+	>?P��ս���Zq�jе�
���J����`�������sE%�(0�?
�w
+�&�޴�i�ؠ�iY�
zxL�������
mqD����MӘ�������R)�r�oU�
X�2/+��V90�r޿̊���U)����Y�n�F����61a�c�v'BK�61ww�����7��Q�u�I
y(\�����Ʃ� �9qupNe��o�1�O-��'�����cX�6�k�H/xA$�$���k%��t��i�
)����V����c�:t�O}����G�6~“u/�͒�2>�^��Y�?��g2�I�5���{/�$�\��xeȆ�^���D~Ws�뾶�f:fbI/�g�#�+�H*Xa����i�T�����(W��'>q�M����,�ř{l�{�+ ~Ey�ǿ�d�׃���/��o��\��b�%[p�x�Ҹ g���B:����;I��a}��B~"�+�Ր��iL���
�\ͤ����
�d������{|跄�7D�C��'�*	��Hz��/����U%~�r��j�m�=�$������|؂߷�&�g��2<��xb���?%V������wGK�I� [...]
+*��9�����* I�:1�
|҂��7�/Ⱥ�|9�4����x����@��Ʋ��~��Z�~fy��I�S�a�
�:��!6=����zi���'
׾�i?����^~�4vp�V��_9�,΢o�1�c�e
�c��
�����~�����p���ǹ�r���Wy�y�d�r��Sl�_�俰>=?l�G,/ݓ����OM�;0υ�{xB�/�X��S1�/
�BY�w�bN�βc�Yů�_l!?
�m���=n^��_����
r=��:886pDc������f��*�udGK޷�+7�d��|��'ʵM}��~e��]���	�(H^��!���WN¤b
�7�G*����2O�5��~+�vC�s�徕���2�������:�8�d�݄#�����I6֤�*LI�؏�I�X��-����&*x�x�L��
+S��y
ac
኏��8�|q�_�QGL����m��6�A��"N6�\�����y��[?�E�%����/���Cn��.*��o��
�<C��=�^��o�Ԡ֟:
�{͜{�{:��1Y�<rۮ핷|�����
X�߭����+�NS~"
C).� �~I�I<�x��t�rͦ�c��(�]�ί^�3j�[�՜��QI���7sT�B�Ѣ
+��W��+�sQ�F�R��
+W,��
+�b
iQX
�������6��ߏ�cQ�S.�U��]�q�oy�����������TNd5�5*�O]���y�O�xF(
���/]���a�L��!=f�
+��,����f��/� y�M{i���Q�{�Yu�ɩV+��3��u�;�}��_�ݱs�'��!��%� ��5H,
4��o�%�C�.�4
��>E���W����(��B
�wR��ԥ�{�(�t�	�v��J�["lb��=�H��#�B�(��rQ�
+U�h:��X���?�E3��� o��w��X�I�kI���;^(R"R�(����M��;�*����T��U���j5s������X�
+endstream
+endobj
+1757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.939 544.286 345.152 555.134]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.1) >>
+>> endobj
+1759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.938 132.884 436.151 143.733]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.2) >>
+>> endobj
+1764 0 obj <<
+/D [1762 0 R /XYZ 86.4 726.045 null]
+>> endobj
+641 0 obj <<
+/D [1762 0 R /XYZ 141.991 204.57 null]
+>> endobj
+1761 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F14 694 0 R /F49 636 0 R /F16 453 0 R >>
+/XObject << /Im8 1758 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>> endobj
+1767 0 obj <<
+/Length 1162      
+/Filter /FlateDecode
+>>
+stream
+xڵV�n�8}�W�e�A4o�� ��c;�n�4���@[�-�DuI%���~��d�q6�C�I�
��
�
+;wv���{�3&
���™��H �T"��3_:_]�"ϧ���;��
Mә糈�W
�n���]��OOp7�K��$��8M�Z�^��UY����d�)���Co<����;��
��
g���~��v>819�.s8���(uf�O=�d�~�XD�D���a�����ͦ
������$�Ψ ���}�w�
�Q�H�
�@:,�ҷ\��;���s��x>�;\������z�6��ϸ��M�� )�w�Jk�u�
+�l�VEcB�w
P�G�M�ɗ*N�c,
 B[�8_��EY&�=h"r
8
+q�p�G#�8i�&���.��8�O���:���g<B�HPD�=�Q����[�Ef��4K�"�l�0I�Vl�LL��I�"J-�Me1u��O�M�q!X���.`���YV��V
+R��ql?Y\�Iia�Uc�Y
�d�V�'����o/n\��6mV������X�^��L:�@�t��:Pi�H�������,0ަ����;_7�^iZ�xv�~PijG����278�doҺW�
Ub:���� _ !Cǧ
��F���4pqb��hx18��\��������l�����Ȓ~��c����o�˜�F? 4�>�j��_W��l�=���2r?iE���rє�S�&U��+�f�lc�7�"�SC$4!��A�'m
AJ����������P��qe'�p�or�؟��c��<�
+y��Z����R'v����#[�
	п�����vB���}��=��#�6���3}�B�����1�`g�8b��&�{x��f~�e�-�F��3�a�G�WwYh&��P+q����U��vU�W�� ��h=�y��蹝�es�PbV\
��^-��.
����6�C�f�����$k,t4�v;�/��g\ٺ����
���<�����e��.���Rx��?��LG�?�0DB	�2F����/��E��
��L"#��
+I���?��O�<x���IƷY���}��o���fL��y�n˸�Z�p���C
+GV	'��|�,�r$��/FQ
�
+e2B�
c2�
a�ϯ�E ������]�բ�2�(郧��fL��)߅1@€�gl�
�Q6{��_��_�u
:
+endstream
+endobj
+1766 0 obj <<
+/Type /Page
+/Contents 1767 0 R
+/Resources 1765 0 R
+/MediaBox [0 0 612 792]
+/Parent 1751 0 R
+>> endobj
+1760 0 obj <<
+/Type /XObject
+/Subtype /Image
+/Width 953
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Length 105528
+/Filter /FlateDecode
+/DecodeParms << /Colors 3 /Columns 953 /BitsPerComponent 8 /Predictor 10 >>
+>>
+stream
+x^�]	�N������y
�W��H�L��^)Q����h�ޣx��JD�"%/!
$M^H%�L�R�
2�����o������w�N��|���ڿ��9����k%��2�M8�?��"�'�%1��	5rAdt4�E��N����h����wyw��-?bO����ؓ<]�F�접e�N�3us�\"3!�D�
�$مDA��ޯ�^��dp
+�':Q��.w�Z�beKTLL)�P�Db�����cwŸ��)[�h�����7����Q��2ĕ,C$5�Cmx�ɲhgE�o�#�䠱k�w!�s�ੀ����!w
W'�M����yÆ7� d��
`Yv9 Ѓ�D��29�G���t����A|�k�̨�ON�3O�
~:��F=I^7Ĩus�����6
�JqW��θd�]���xn�
��`�������6��Lpݓ-Y>7k�{�h����]
���-xNqV���?3��+�)�������K9{��5���'eN~��c^�A����ڶ������_?n��#�ҫ7O,U%�x�Ĕv#2�MZ���᏷i{��-�~��>�����y��Qq�2����TX�?���S	ᮋ݃jY/��
$�ڌ-��
4ݞY�,!�I�-J��UԵ��A𓺃?�1�+�t��f(�D9���L�Q�
Q��8$d�_�D"���Z$3&J)���N�lZ
+�UUE��Q�:)����*�+Ŏ��b���R�8�D���b��@���"۰��!����d��6�%�Ǥ�w��E���Z�N-Ool��!*9U�]
��=v
V~�������)Ӛ���!5��%�a,nj������%F�
�U=��w��u/1*G����Ex
CB]�Na
7=����.�BA�8θ�d� �okX�ݸ��yV;|*�[�T�K
c_P7mFU�(�괿0u�~e�yF�ⶋ�&ƥB�����4n��Ͱ�G�q[}�ú+��!)�~щ����r����2
�Q��z|�|��P4![�0GsI�o�E$�Q
�R�g�Oρ�R_�ʑ�j���E�萨%�d7-ÑuHu��O

v��������г�Z/
(���u��q�������>UjD?��Ϊ<Uʗz��W�������|k�7=���s+���J�R�F=ru�}�-���/��g&r�_����4J
�bO���
����Nl�C��t<3�d�3�
l��7?_�S�sNY�ѼaC��yEB�*I�H��
��M�:�~�#����t"
թ=�8���?�bD��YkBr�Ĕ䤢E�\�εh�bE��M2�D�gQT�P׫�!�hr"V�dQ
b�-B
ڃ�Œ���X{��PU�%�C�Xi#���I?Q�H�b�XI��)%ȝE�QX��T��(�>*Q�Y����L�Q�(���
+�=tH�E ����T��.�H*.��n�
(P<ŔB1�_T�~(���Є����<
+��8TD�Ջ�F�
:;�(���L'7I�E�����@
����h���P�>3$[�)��A����uc�"!�;�#�^C�P��*�
�]�Qȳ�����
��CCוd��d�v�y�{��^���5���RIc�n����O����[ꓼǩLu�
u�N�:��Q��:��3p���sل�`q`��z
�
��|���P��O����l������M϶��3�
;t���I�U1 ����<wVY��x8O�(d��ε\�{�m������.�8�Iȝ!�p�i�7*����xiڹx��Ӻ+���q
���yb�5��u���wYX��bd�ы4!ѓF\5����_)A
U�z�$�>���!:,v[F.qH��MZ=�d+��#4!ÁT�
+
;��S����,�?���gl�2JϘ�0�����������C�Hs�f:���d<�UuO���t����	�
�|�ǰ
?v,#�X�1l��y�τci����2��2ӱ�����)�z��]G�0*B���	�B�X3�D�h�g�O�$��=��|[�&�
6"��Ԅ?v%e
��m��~��]��d�xy1�rة�ab� lj��E������E%K�+*�WrJ
+ؘ [�j1K��,:H�PSCY^�E�:%�=���!�I����ޣ��H)�!��R�2�>
+��)���A2H��3�z'���.�N���vI*.�'��<U<U�NjQ(F�U1T��$�h�)E�|Ape!Jh%�.�#
+H��}K�$� 	N)*���(�� 6Jbg1QR���mA���,&��/
+��*��b�X�pɡ�D7���
+pҋ$�eI��^�P��e#/#}�K�,y�P7��8�.5�@�Ȱyە7,'��7���Ab��� �Dľ�'Lp#���g��#yS�
��TK��:0(�x�H���T^QZ�X荙N�bj�����Ҭ���˪�$("��@ŵ:J��N?����Y=a�b�ZF�?Z���r6' ����� �B_��ذ^����5�w�+u\���Q="Y��?���$}ǂ�@�q
؟���a>`�%bLVvR��c�Z����B7s�.�$Xm
�
�EL�`��⹊F�
bM�,�l��C�U>��qdh�|j�W���Nɘ�~]��
��q�>���GsoAseK�@Ti�>��%���;��\�S>�L�L�
��A�A�!)zA��eY��q�Mj�0fv�ٺ={� I� NÚ�����XZ������W
���X���(J��s=.��>$�EE�_���|j�:(ufF�
����ls�ueJ�<�[b�)����O�:-�{8�>C�JS��Z|�H=(��48[;e���i���

+����U8�4���`
֙S�C�h�=�70ٸ��5d���ƛ�N(vѵk��I�5a}u�RԮy1Л]�f-9f麖[��
Vm��z�=4�ۼ�e?f!TZx�6ݽp�Ӛ~<�޼�|�͠����OO�bX�^���@
*є4��)��b��-�
K1����c�t}vr
��1�
We��A��h*�vgƮ^"�B\�p�_�*��ձ�)Q]5���-U��B>��t�W�ɊB#�6�o�
��m�����1�\ܧ(�
+E�E����B��6
՜�%���}Q'�:��v�Q 
+6����
+�UR�_�#��(��{D��3���Н�|&�N�Y+T�w!���lף�1��E�$��R=�+E�OU,
��P�S!n3�O���'�=b���}sP/x�
�+C�X�����?l���A;��1K��K:�E]�Q�I�PT�!I�hZY'�9%����ч�����+�����c�~����]�fDxz�2���JM}yJ�>�m�y�Yտ�d��5k=�X��]ذ�_�R�Y;��/�x��m{?���X�� ���aȝ���;�Y��>�t�_��xNusO
��,G
�q<��X��
z��ߒ����C��{���6��jK�ٴl�S��U���|��_n�)��
+t��N�'͇D��1#�2a
�\��S1���Ii�@<M<�KR�O�����r�KӺc����c���&������ڕ�J���ɠw:KA�zUc���
G�G$ݜ� �Wb,�e%Z��Z��1D�:G��B�ꖩ�*����㶮Y;���5:3]�K���.�16�O��!~
�?�s�K %1��
[�BW8i֫oCE&�@�ʕrl�x�=���tsQ���`�s��B���@�~��7L�%�Y��Kdt�ͪ>��z`iu�QL�S]�j�Ȼ��%�E���3ƞ��
�t�4h���{$dA^V�D�Ͷl�f���G��S��M�G�6hm޽�6I�+� ����w?9����j(�q밺���� �a����
<�{�w���Bu��
+�/B����ƕ�1a�K,�馍@�m�gM%A68+)��XTU�!ri�N*#�+��V��e0f���uc�զ��$0ơU[ʎ �T�{�am#��S����u'���(
��]ɕ_{e����U�&�n�xF(�^O�j�z�2���҃���G剠��i�ƾ�Ƥ���ͷ�ս �V�R��������Y. ����?Ęo�SM������n›�R&��=��פsN�Վ���	>#
�h�s�����3>�\������͚��w�r%B��:I�)��
@x_���(�/�j�+�`��<�?��4P�
�C~�������w��U.
+�_���0Œ��S!]�����@��K~��+�)7
����=��(�	�!�[�	g	�J�� V҇�ɽA�W`U
E���t� w
ru>�%-�
+�>Q����*��))K��ńE�d�+�'��L�Rr����b�8���v)QP&+�1��VSJǞ��п(��������
g
�����(���<��G�~�*g ��5�P�l��u]�G,�q�
/v��~\��
ҍ�
��`�ii!-�ދ��G��'	��{H�^0l�0�T��i��,'�X��
)�YD�9!���{��G�9���z�
���wC��o�Q�ɍ2n�]����Fw�M�G��J6/�R'Ρ�dDk���#b��x:�F�y�za Ic������9�
�4�#�kl)��l�@��l߲!4���%&�O���:NC�qb�
۝&����挣��G���'Y��@�\�M��O�< �&�� ]2J�2-�Z�(@F+�'B,��,
��.��,ǜ1d�!q��,����
��ES
+�\2�$3�9򞖊)Ó�?)/�$V��k������v��G�q��G�q�X��W��?��*��*V�#�
��؟ii1QT��(�-��a�$�Ҏ
����k�
:�v����
:@�?��q�\��.צ���"S�������<���tȱd�	�R�r=����i�
��T(�=����]��۟�8���#�1��Æ�T���p���yi6�c5����U>���ܵ�r�U3�Ԥ����%VM\S����--(,y0[�������9�ƌ7"ْ[�[p\(`z-kf,��EaA����}�Y�@[�^9m�z֝�j���
�\��y''
�
�-_dI��&ge�y��:��W&7e�,I�d���
�U�j�g��!:_rj��(�,G^���Dt�
SD��+��^��
!F� ��ۥy�O��\�и�9�1���z�ۯg����(���E���팧:���"�#���j
�OI���h�d�琾ʰ!9q째�X�D

r�Vv���?V��rk�+��1�	n,��l(�ӂk�������[� ��˧�4��k�ƌcVa��Q#O�*��m���0ʧF�z�E�jh�ߘ�t��[����Ǎ!�䡘�SĎE���QMP�J�bz�9��D�^�0}��6�/�K�f�������{M�?�
+7b"�R��.*��c�*Ų�݃\���d��Iz��z��"�f
��Y>�-�z$��`
�����WKVe�g[����dBB���
KO+8n:V���c�0��y�yT:��� L M����8]H��>�௎U��0��Ś�|�^���4
qǥ����gzڟb[N�*���^[�x�
+EM�L
a��(�@?�n�"���X����\|%�Z�ƶ��&~�_:�Y
��~0�/y�,p���c/��]�� H���m���	ہ��`	2
+�[����
����AE���r���W��E^"1��ώ���6��X���+�z��b����i�_K�W��c�2Z
+(5-i;s�O��X�KH�[GuC�
ԥ�
N�Q>v

�3�
�8�Ś��_y���sF&~�+��wu�c�Im��o���LU����*�!{He�q=�m���B�� z�k�<0�*;�KCƾ�E
pG
���5M:��_�u)�/��Kl��=b�!��ú����0�F���e\*z
�n>����?�%�<��x�O at Yo
�kY�Vzb����_Ķ|��n
����e,��?�{}���%�Z
�&:�
ѕm1
�4
��y�\��j�&�%�x��Qz��@���
D�N����՝\��؍��:

�j,��ڴ �d���c�zb-�)��.6�l���/jˀR]�Y�.�*,ozR�͏Y>����zP�W��&��)���Bq�P�%MY�,��Gd����=��׽ǝƏ���;�
= �ӎ�}v�ꋭ�ԵV�JS_y��~�ܸC�R��}��ԗ'?�����~M�;���{�5�WZ�h�k�
�m�B�YZ' �j��2y-�_+��m*����V
8NMS����r
+�T!�
���G93��1##I�cT���ß�����@�{�7�Y���+�&����צ�x�m�q�x/�⿉��
���!��O!�,פ"�,n�֭ǓrP�{��WI�፳�e��n�����/����^}�M��?}��
_\�ؖ�27�rC�̱�{������z,�J]��+O�����}V����xm[�sĉڷ��
f���F�U���z(s�;���k�[�@�ߗ?�����&l�u�#�
}��;̝��
�N�t�.x� ԉ��=�=�ۗ�3��u��8����$(Jm0����O���ͻ�y��:�L�:6OKE�-r�:#������/}!�\?��Kk�����b�����&|�-��˼�c_����gέ`�Uu��o�%a��Vg�'�1y*!&�
�
f,f�
��OI���iF�i!�
[/b�5���Uiݽ��b'���3���QW�#�
�6�Lڃ\X��8��?��l(�"��:w�F�dW+
J��[5O�T1kp�
�����g��L F��x@�����&~R
��&��
�|�tR+ [...]
+nܹ��<����G��W�b����K
+��d&U�}Dq�FL{'c�>��JjV�87I�3f%_~���w0fC=��������Q�z����*�����E+7�[��Z�����0�K�/U���Y�����3fL�6���s��1�B�=_>a�p��Vjp�m�Zc�K(m(sa���x̀'7N�"���؇��M[$�3ྌ��͂:�b>|Z�u%N���������Z=�[1�+��K��	I�]FH�t�͜�p�U�
�Ԥ���\�o���JfB��6kڨY�F]x���}V�5N�v�e˕-^�D�"�i
+�i;g��Ӓ�~��
O�m�淾�����>]���	����H`�����[U�1`D��Y:��??���XW�3�G�����P����5����
�����	�`��]jZ!������ejO�����Y�����"�7b_c�uۖ����%~����p�HZ�D�́
_���{�`%	T^v?tZl�n����-ʨِʉŪ�%Խ�?�N��.]�$�
4QR�2�q���:�Y��_J�8|�7��3�o���}'�B�ыV�1�g����Џ^o�DA~�=���ɋ�P~�(D�����r��@���A�Z��+O���y7�]��F֕#�W*�~��2t�ɳJWm�Պ��-U���Z���XՀ{�ق���罅?>���8���
3���{�7�2q�f���s��]5/YiE����\qh誓���$�
*�#u�X�3�6L�4*u=�N
�1�0ѵ
H�I
,�&~�-]ɔ��W�'��E�<5�m(�{c���
u��}7w��u
cл��Ȼ��2vjm!���zR�
��v_{��
j\G
2�g�Z�ڈ��ܝ����y������BO��l���&���RXߴ3i
��*f��!���J��S��"���c�9�O
+
G�
�1C�qH�<$� �SϲE�/Y>�d�*ʛ:�4����r$��F��E1�3��BN�1�7ЮU�<6ē<���u�e�p���89���������K�q��(��7`M?�O8K��+�B�c0~	'u
+b�����
�
6~��sPdZ���j ��
�ԁn�W�^��
�..u:��s����`{��]�����-��y�`8���
��
����Ok���-Z4K�&M7i"��5�R�|�?�+�"��ꃧ��m�	�����%Ui�����-�yo%�,����|�ݔ./o�vc�s����C����Kwƞ������>��냿���}Rm$�=ڻ{M�7�%�Ή��x�EU���<b
�
:E�G�}W^P�+)��B�
��IF��	t���{:]�y
+�*%�KA��� D)A�W3���?���so��j∁�ʉ�괙�͸�uT�ۄ���|{Ⱥ�
\5�]
mٖ�1�Ή&A`9"݈8����›X�]�Y�r��QI�T'�I7}��b�����ʨ�Y�F�hu3��=��B�5��pt��������~:ɪg����(������u'��
��)���h���������֕���h�2Ө!�jĈ�D����'����7v�ʂ��"���}���Ԡ���q��Nz���.b��<n
q7��
+
���e������ݫ��J�
Hqm9p�{�S��4{�#Uw����pi+Ei��g_�8���vr^%�w{]ou��
W�
Wct��
LWCD%%D�a�<4
�	k<&�0Ws`d���Xi䥍�R�)OO
+JB��~��V@�E��p�j�:��ң�\�)��"��V���'��`�����,U1ȷre6�+[n٤\5
���
v,�E�W�J�+���<3�u ��%�
\�̀&��a,N��@HLO�
"� N$��gF
p��C�� dJn(-(d2!_]�*�+YvA=K��xֺ����KUG[$���#�؏�faeLJ��
>��I�j�z �._�2
`� ����P�;���������C{��ù:p�,K?e�<���˟|dЧ��d�=	xz:Z0'��vذ+���.)�FTP���*gu�v����(�-4q�wo�`˳j_�s�[�~�•9B)�*����
w��VA����
H}�AK�'%�O}��AS�:��Ͼ����q�gc[�ݩ�ٝ[N�aϒ箻sY‡O]wέolL����V�܆��s�
�
��B��.2C=I6~���ۨG\~���CW<��=�Z��w6%$����z�W���
?o��t�yw�=��'>?$
҉߿v�����7�ᗯ�����
W��nL��m�����ᰉ7|qߚ���|���Љ
e�ɤ��>����bm��u��FfrAx������O�	��3�����[����|�jW$�Q̇��&�=�&ˀ�Y)f���y�&�*�%�X��@,Yݡ�
�
S�%v����U8vG�(Q�����g�Y@�䭶WW\��D�"I�+�x�ѭ�:�t���'}ܑgV}C��%h
��B���ҵ�ǒ<�u�uj
�{���3ٖ�<D9	^�שo� � �Q|b�XO}[+�Zt�դ�R�dc��5Z��}������ZcC=g�~5<�a�s:�_��:Ή*+��H��� �~T�[�z:wW�g%|�
Km��Z���F���Rb�7g��Z�,�!z$8貨b}�$�,3�*Q���@
%K�LD"y���[��>�MA���yD�U�T���b̨��`B�%&�LS�� ex�
��GHy1ʎ�D����_T�rs�?q'����7
��
+W��@EQW��bK,�Y|#{�~���6�

+`�?���eu<92��
���$�LI*��P<%Q�H*Q,�D���%��LL)����%�'�DqZח�6�����#F��s'��O��Q���%��LH)�T�dB���BN�$P,���.ZOAN5���:|�2�X����ܱ}���C��Î�~��_~���_ڱc��l޼���G��`���ʅ�/{,�g��g����>�-�T$U��'�J�
�\�w�JIv�E=S-�LO[�&��g���٤nBb�

�p�&��n�.G¹׭x��k�oz���e�1g����M�.{'5u�<�	r�;�C������2�w�Y��{��k��e�-u*]�o��YX�Mi���e[��g��ȱ3`<�N�7�ᰅ߾��f�]���zqm�76L�5���^�-1s��/��T������}ꪄղ5z����>O�Y��`�)��p�9��|�I������x��Y�-��n=����:�c���  :Q	�o|�/�;������ޥ3��oSV
���c#�-~l��t�����2Dͩ��5*ߴ5Z���)
+�#5�I�iN�9��q�s������3y�����?:��vɈ=adO����0�����tl��G��d\pķ��Q��Ё���gtE�
�Ћ�
r҈ ��+�%��ŭU�kq<�7��q��
'40϶�[�cX8٢S��ԓ.
+��լ쒡�X���E��(v8��
�G�i�EA�j�y��̮��1s<�m9��yP�Ⱥ�~
ƨ���\P���� ��.��"��b793Ů*�y�'�gX;ڴ�SOit���{��
+9Φ=`��Fl|�����K�YN��#���tɐF�M�)���*�BD�Uyyщš1�b�QU�r�Q�
˲��L:(-ɹ��icVOBE����a�"o@��1K�?��{�(5)H��k��Bf2<e���[�HQ�Ȫ�\�B߇��E�TH���E�`E]H���D�fD����5�h�*�
���R]ds��L)��!�d�䒥�����J*^�H��	��cM,]���(�P
+kIZ�g���a����
{���V��,���X�xbɒEdI%b�&-��	k,w��].�ѫ�?b9���������m���~���O?c���]G�D����ci���2�
G�B^f�F�o�������%�&h�[��۵{<��C��t��V�o���.8��ye~�������k6
�e����_�t��}u����G�^S�����z�<
+
+=�x�g��<]���	���7��_��н�������蚨�k��snmyέ�ݙJ/v�I��HV�'h|�I�<��˓�
�L�Q������WHȬX��K������9�.}�qM�N�ƽo2%j�
��
+�KZ�岉
_ziÞ���y��Ы�w���6��
k�Ɖ����ϝ=�z1�����K��;/ڹ��KHXwh�ٚē���cH��[�}��#V���$rCu8Q����(%�jp��r��c*[�f�ƕ@z9vX¼
m�ɧ��1 \[�X�I���&��I��`�S�:��]؁�We�Һ��4ǚ9BVfzК�B�
+��Y����h�LՈb���dXw�S'�/v}m�@�!����0V�������
���	���!��
+��C�ݾ$-���h
��=P'���P�X,
5m"FkM�� x
�x�L*�	��F}Y��Y�bg�zh୏sp(n�ʾ���l��s�>�B�Ǫ����Տŋ
+���k������#ʖ�E?;b��16f|�
��;8>
��\�e�c�b�H�l�j��|�83��1�
I�u�:��b��K]HE�Ġʰ-��~��,R4�Hbf�b�S��Xkє�E��ٍ+]x�X]���\�4j[�"�6j[ᜦ(&VY��
�+,�I�����\D�䔊5/���js�K��i=M��j^@��.��ħ$!�E��ɥJ'�kѲ��˕�Z�L����`-W.�LY�I*+�d�^Q��wЊm��}O���e�T/W6����\�\R�2E �\�UD6�R�|R��H�yI;�ʚm�(���%K�B�&M����W^��ƌ�K�,U�d��%J+^"�X�#ҮL�F{���'#���^����4��M�`I�$�=���-�ߚ]>���%_�HQ��x����7c3[Րq%�|ef~�rDfˆ�١ə
�
�Lx���j���d���fff���|��W^�t�`�VE/b2��#����iq�a�����
+�߿�rT�K?�n���Y�LbF���딮%u�m��Z���m�ynomT>L��/��.
�]�.6�1- 3�N�^	���b���
��h)B���6k�`��/x骦gU�b$
X��3S
���7c�[ث�%��̔?�&e���}�W�����ח?��'�('�
�/]օK�>�.O�(j&�뛞I�5���J�7~=dr����o��TJ��h�"]D�4�&
��H�N��.n{�8��E-
����0	n���W^�
u���:n*к�p�)����
���k��%����Zl�X�,I����
��k�أ(���o{ꇝO�j�RX���b�����&���ƅ�c���o��F�="l��{�{tB�	�Qn�
�77���V�5G�
+7!8:Is�g뵳{�袊����A�?����:h�7��������J�Sg��'�
��s������?�-QbF�,���{������z|�6ٌc6f"%� d���"�T�la�A�
Ӳ���L"t�ԌY��Oy:F�ƌF��ɲ�����'�i�L]%R�6�9i1P|#!�X��)E2˗)Y�x���Ċ����"7Ă�u�8��
�5VY��Z�/A���Y
�OZ�LK�lE�e�|ʀj'-��R�X��XSʕO�Z�\J�h�F�rE��4�+[��8�T�<6��ɲ�cM��Z2UEe�%*��QA+D����ƕ婗�-k����~�!��͝����n���u
w�ڵ{��={��۷���}���hP*HO�ͯ��Ʒ4�}�x�5�ff�y���O�ں��况c3�l\W�	Y{�U�K�k?e
�/}�Rղan�k^��^-��/�_�����6(C���k��+��
�՛��Yz��_�O�������	�O)k}��P�#BS��i��^ݎW������/�o�S�PD�>�sϺ�f��+�/ ߥN'�,_�W�l�U�z5L?^��f��{~x�Y�7�-�x̋/�#���dDkԐ�UPXmgf��� ��{Vl���]�<~�;���ݤk��K'6����΍�m��l*�e(
+yYV�ݩ��)�����v9z[�۱ �g�S����.�B6*O�uϭ}���ѣ�؟�P���������U�t�!�p��V�f"C�b/"�5l��-O�=�S��L��?��n:��hY=�ddM/�i{���c�>���D����U���?���[=�����:b����̓�mxr%�Q�6	�4��1�O�`��k)j��)4�<�X����s��T��n�2uðT�a����� <��x3,o$��W^+�o
�kNe��q�Wu����A%�7
�Qk��Xg��!B���rt����
�����=���9sj���v�J�Y�c*7�X/�4�=;����}�rލ���M3ۘ	���(��zފXu�B��4~)+,]'�#�W\�
]�W�cN�IQ^c�LM�c�
Ic�\=�t
jP�B�Ǻf��Yc�$?
r��657cV�d-J�jo'fE�)��t�&�������e�KH�u��3�>���>:��*�-QR�_c������E�G�pc&΋���d�>�-�
SŒ

���
��R
kMyݒRRRJ�-Z�lJ���˔N)]&�l�beˤ�=Xa���˔-ó�
+	�Q��j�u�-
Cu!rʖ).+_��)�+��`���od
:c�S.�>�`2:�������k�?�
�f)�Mc
�R��������
+���6V���:�O#y�s�{ԔNh����'���[������=�>���+>�pQ%:�k��&��bEϚ�|�
2R�\�}@ᙿ�Y��X!�G�AS�K��Ǚ�D"b3��-s�򞙳j=$ːϦv��X�'D�넄�_yI�i�=��.{���'=�:q��߿���U��G�w��
�OYvI�˲͞����U����ڏ>��p���:'|t�u�[�n���m��&��N���C|�7���V�b��i��%d���N/>���+��}�SR����|��
+���D�eW}ڳq��l�zէ=.�����l_���ƕ��|��C��
���3	ϯ���55;ŕ����U
��״�u*����+���¿]�8 �>��s�s__R3!q����n�O�[a��g������~ҭў�;���Kj���4]���QU��㙑�(�M��qw�JY�Z���)�����&�� ��0)�� [��˒�*_?U�n�d��Ƶθل��^ObY��K܆.S )�a	�2Ȋ��
9n�.�z�Lݕ(�� �C�C��7M0��([��/9��Bc�ʨ��+�~ɣ�J��zC��Y��z*�q

+"���$|����H�QI��\�z�MH�ur�3�xqՃ���˭,b{)���N����6�e�X
G^�'�
��Vԧb�;X�iu��Q3$���_�Kڧ��e �����f�˕ܣ��Q�b=2�˼��
�1�Z�]���=
��;��2C����1b���
�z at P1K9��G{�x!W*L?i
+=��b�݁�h���	5O-����9�^��o�P�©����w�M�~���WR�ɓ&=3|����s�<�wK�!���>����k�n�0����~&�.�"[��d��B��<(�1�vt�8"J;������hڷ[�x��~/��}��v�D$�۾A�:"I�m�����l�l>l�����C�^���ː�6f����(�ӎ�O;�/�{�
,^�\Y�i��O�p�
)4�XC���ʆ����N`�<� ��W���Rv�s��������mjћ�)/��Q�)�~�I�''���2z
TU$?�.z]�����u���ְe��v����"ۈ�[�k$%]7��Eq��L.-ܔd$�LA��}�+[Y�Y�e*A.��������
�>D�k�}T�/Z��3� ��6�j�I�I@n�=�v
t�
	�������
,d�͇�1PL= T���
?E�bזv�#�
in]_1�L�θ��A︙��0`
ǣ
�8D��י��Wx=����]����Q�
%�U2Msts߳\1�.S�8�*ڕ��R3nL�-�~��$�[~��	e�~�م��#�
�>�
�s���D�o�.�$�Tl̓.��1����<��
��(�JW�b�j�E�cŔZ4��jN�eq`Soq\��3fŽe�v�,Y�Ř�6S��
+�l�k�ݤ��щ	�W*ٲNթ��m�ná��S}5��B�uà�◥�$��"1�dQ=����5l b�Z{��VPc���h�!�jB=ݢCZ^l�(�$\l�򘕷����HO[i��?(V�Tɳ��o9�
;�������!��ٸ��[������u�
2A��np�`��0)!�����_�
:��ɘ�cɒ.���t��~�(���f1����H�<��}3�3����r�ǰ��@S?��N��T+��R
�he�|�3�*Z�M�Jg�������	R��m��
X��QO\p��]���c8�of�� �p���oV��#�Ś��i�2��Z�}��"�)�aۢf����vQzd��CH� �~;�]��7A�$@{�T(ષ�:i��vt��Z�K�
��T��O�u���B"MC�D�K���Okt�]L]L��A]��"�L��uoW;��F�<V�_� �r��@��L�8�	*�},������yqe-��@8i���؁'�~��˗4�J�;�?�
��O݀�(�tQ���ع��	��B\
s��gvY�UE�s
�Y?#Ty��/D[���z�(�,�i'�t�G�br��٘in��3:����ŀ5�V|_��	�b�Y(���j��S�r��^�6��h�;
�
 [...]
+x��[B�8�y`�\I��O0���S%�QY}P���f��~w0�#׺�e���6IbM�ŀ��ưH)"K�$�fQr "@H�V�(�_b,�t�_��Y�զcb
���	.����)�e-KՄ�u��c��_�LuvyMU�����
+�
!�mP�,��%��tYd��{]�
�H$�
���`�dT��7�!�v���y��e�ծ7]6�W�,�]��vri�?���8��yq�!�wL��G {��Z�;�w#n�}�9HL�Y�Αp��_��9��9�W�:��D�صf]���]�$A
k9<b2e)=\|����G����g�J�O�OA���'��<�
+��g��2\鐞�Ǐ�|k�z϶/�
1�|��!�����g���q4�ӻZ �
X��)��.�b������y�b��GK�c �d�6Ws�a���a"�zQ��b�� ��Z^Ƭ(�UR�7X�I>yb��$IU�S6!�he�cOm$��H;�������@B�V�c��
A]��46+K�2B
�"��_���C
�qӭQ�=�
+Su%� �D�
���vbMLp���R�K\���`M
�
��l�:h�%����̕=�4.�7!��BQayn(=2�QY�U��]v��y��$4�4z+j���U�a`����@;I4E�%ƌ�!Ժ3j�,Y���+[�POtIܥ��ז]u�����:���y�Q]
��t�'�����w�� ���*��B�`,#Q
+N�
�ďEV\YLyD�&(�2���
6̋���qh�LF{��o
�:���}��n�&
ꨋ+�
�,!խ�����u�
��]D�"�S� @�cEl58�B��1|c=$�q��uIק���U��R���7|x��p���1z��D�
��W��j�AC�PҬo����!�3�QA�qu���]E� �ߚMH�/:�t$�iYU�lp9έ�ֶ�
.���]?l}��/{5`<Ƃ^�����y� ��B���,v�lW�ɤbTX^���;��+�
H��\��C����)R\��Eh�Z����JMӍ�i�[��ʋ�U��4?VҼ�݉9V�r���d2�疑]-
T���~�PĝN�'瘝]
M7]�F�E�B�
+&c�B�5���CikS:��ǚ��Iͩs������u
��MG?�h�q2�X�,���2�$Ӳ��U�X_1��~�i�llP�I(��zU�%i�ai?QL}K�ۖ
���Jdc�Ec�V_!G�߄ܖUI�BfT�'�Ď	��rL���]� jWw�b����n8��@Bݤ# �g���1 ��C�"Ӳ�
+)ذ�1
Ҍ�0-�m�ް
+Ĉ2���P���x%%]m7��
+1k Z]s��L��`��7a�
r� ی��POj�ό����uO��
����N at C�CR��������U��n�r����c��:l�cr����e1�i�6��V��ˆ���H��&��}���i�E��Bԓ�[N�M���(n�`��V��Qcx{�|��
�"*T�Q�a+����ݺф7�Ej�������9���p�Q"/���Hs�'�}ٸo%Φ��8�7ߏ�O�O	�v`�+�H=q�V��
>-��{A��]�
"��e��
+�D��۞}��{��8�l�J{E��
�4TTU=2d	�C;���C��(�����Յ�1�A���I^f1xC�bÖ@��1V�,�e����l<�e-��㌚t�n���V���`q���DVm(q��R�!ܯ9K�>;v�<�cd�3ǝ�
�0���`��ø"��lɗy>Ĺ�Y��
빩u�noR�ϻ�2A<��
|������{��;�z$
���I���%9V4���"i��GV12��,9�O.
+<�`q\YRV��6
+
;��,��GL��$65Xu�B��b��:���Iz1�
?,D��+��&-���X9(�w����{�m�ٲyi�,���
+�Q)e默C����گj]=��
Ct/
��nZ�-�i�1
w��F��:���jF+�O�jL܄]��M�����R]����4c��cu��kԚ�b#�.8�Q-��q���I��NSP��Pp����ff��9�:M1nM�D�ox{t�_�
3�ñ[�$�8�u��"
Q��
+Ur<s<7ts�ڰg�c;�J6V�i�V�5��ޢl&�P�\,����v5:"c(벼fm�
�Qb�E��1+��ɰ
�K^�4N����u��R�hH�f_�l�X�g�&��Y"F�8@̓h��!�]Ĝ

�
����WZ1����!��2�D�e�N&v۴EQH3f�.��O7�U�3A� 
}��'���J���f"�$ER#�ak������񱌃a����Y�D�OwY�/O�z#��rP���mrT��b=� s]s4I�

��EG� 5�E�
oL8��C��Mwqbæ��IG�a�Ы%P5�ᨊ�� ��du�{d��=�x*�+�-�

F�%�%�&Ub݊y6�}�=�f�����E�y����J�34�pΠ�J�l��__�l)m����>��.��}�#��bJ��ь+��xhH[hې
��
I�uS���
Z7�y�S�F�Ɍ��M@`}C����/O�s��f谾��%l�bc�bɂ�MZ_	1�/CSiە`;��O��
�k�.RuC.9k�
v�0ota����%wGN�W��6Zg�q߲��l{6Y5�t�m�	v��#�3pʝC㸆[00��ޘ휚�
?H}�o�!RI�ʻ��c��+�1�������kO_�c�iV
Q1E�"k����h�
�flޓ�Xu [...]
+i݈�ۘ.�ByH)&�������Jx�^o��-n)��.������PQS�4hV�=Ͼ���ǡ��c	�Lǐ�p&b�t2Ķ�>�>�\>�K��K�\|V�ctٺ(�˙���U���|=�C��l݈b HQ���I5�SD��W���!�
��]���g��w�ʍP��6�f��F�ƹ��O�R���jX�ƺB�#ր��c��1�1�;���7	���5~��?��Y5�+�B�e��!�~	R9&Կ��H4ie1H���Vc�\�-���o�6�l�ZEl7
+�^
�ztQ^ �ʁ��%%9�K~�{�����}��V�:�xK�� Ǯr��-�����8�%Nl��,�z��4}�v;�d�Dz����N�,o�1R,o�1�H�$
T����X��iR;͞c��|0d�@Ҋ�
q�x�T�;�O˃�G��G�eRR��x��^�w�)�����z1oJƓO<���Ș�t(��Y6mr�u���q7Q�M6D��d72�����5d
E��w^+�k�x�)�K�e
��j���
��!b�Tۢ��{�T"���g��G� 6H����Ct��hz�|�+�d��"��a(ެx�hH9c�uV�iQp�^H}鏅T�%�����r
P�Ƞn{mo,P�w�!�A�e��z=�Hj�A�C��O�k
�`�,�Y�%�5o.�	!�kPN�QK3k'$��:;��}{�f{�}��j�

`A���j;��x��-̭��G�[u��Dp��fw;՗4��eH�Ej]�4U�:J%
7��׀�
��@֢c���Q{��[��B����l����� [...]
],�+YIP�a����DzI,��X>3I�N�n��v�Q;��,+J_J�M�w�7Z���
�oA��
+
=<���ظ	~��n{��� �����%�Q7�L%�`
ٱ�162����$
��[���[
G!}k3Ԍ=G�Ej>Z��[�rOb18����
+!�T?��b��[�5o���H�
؂(��N�9����vb}{��
'������<�]�J5}���?�x�
+���ګ�b�6�qe�Y�V�G�(�e���%�W�����x�z?�}n,���Zk�qt\�1eBn>YQג7�����ϢNZP�G�W4
�G6㉭	��xo�� Ps���Y8>��)�*G尢aǣ���k�8�譺���
q̏E�
4Ԥq�n�tq�b��p۳�q/p>�̲B�}�ǎ
+{�ǣO��X�
3i�H�R��B!V^!�0CŬ��n︔�u�u\����u���ޗ���<�^w��[��G��8�@>��?�<��7?�Cq0���+�c�ի��'�{�b����u��x���l����-��P,'[�B���dC)����c]��r�kd�x�p
+���
�u��+i~3�;
Y~l����C�l!�
�Q3�幛��B�Q�Qa�`VEf�^�nz�����l�RYT%l�雋�xCa�J�p^�����\j/��
{�Ĕ��։�WTmb�^#��^���7_���mM��˕����[��v3Թ.#�0� #�0� #�_��]��S���W�k��+I.U�����ܺK���S��[�}t�-�䗾��� #�0� #�0�@vxq��N
�m�y���hR��q��h
q�%vv�⺌ #�0� #�0�@
@��_Rqe�d&�y�,�
+� #�0� #�0'=��b���+��)���q����0� #�0� #p�4s~���m�e�hSژ���>�A���F�`F�`F�p!`��m�ʬ��
+
+���#�+W��R��?�8�7"V̩b��
=
+��&r
+����
̲�Y��0Od[YP��0� #�0������V����6�ϴ+��r��ʕ��T=�\�����)Q���yηn�X�C4m�.�۽��
H���G��o�([��w�u���A�l��
+��,H�B�u��_w}ǿ�V��5������0
B�W��It
�3��%�|��;K����2���Vh߹ #�0� #��8�	��hd������Պ�`��^u�UU�V
˻�u3���G~ �hѢ9��-�o���
:��JOOgΜ[n�SMD�#--��ۺ��/�-��?�.^t��w
�#�UD!�b����dz\=��
3^
%W�ZI{B����	>
��sF�`F�(Hh�lٕ����g�oX��f+W�T�JZ�}�M�SN�̒��Zu_~��[�8��6���g�d��e�-��V�
+H�޽{�v�v��5���_7m�D�Z�RkrM�k���g`ָ����UŊ����{�֧�~�o��F�	
����иIS�;c�
����O�},-�3k�Y�&�2�6nڹs��C�Ԯ]��3o�����]��Y�Z��
ȟ}N�{�������?��nX����efd��‹͚_���N��O>9RINH at 7�\~$ ��o��0J�Q�|9��*�+�
O�O��|�����_�z%����vۿ�~��UW]��?���DS�ϖ,qk�	�c���/c`k�BO�9,�7�I�f ���O?v,���p�pF�`F��e)v�
>�� �r���
�U��ύ���W�x���+�?����o�9��q�ܟ}$;��������_>����ÇC�[��_����V~����tJ�b�_���Ե�ݦM�J�+�	�����i��?���/���2���+T���b9����X��ׯ]���*������ ��Td���˗���ڿ7n�8��C�+��cƎyv��V�bŧG�
7~���\�<���^=���3�>;�����H��

]a���-:hj��O?�̨Q#/ZT�x��w�3|��O>�ħ��-:`�Z�`m@�Bw�|p״�/L�4���g�x��?���
YЁ�0� #�0�@.!@�-���N�}�r�
�� 3d�ZgamѲ��9�a�
K���&N�W�6�U�vj�V-�9xЫӦeɅ<��{��r���?�`�?׫W����{�q��`�QF�*��V��5ަo��yٲe?��5���w�|�%D4��J�*�s�٩��P,u��޽�c�����ƍ/JN.]��ի�}�O�~�^x���ܳ`���p�N7]rI+�mެ�c�>
+c���с5��V���3q�
#�|��Q��
v�r�.6x� ;��Z��w�ҥ_FW��5*l<$h�`���
{좋�uV�{�k�ڵ�����{��_|a�{���������7a0�
�u����;�
�k����;K:�����2� #�0��2
c�e=ƿ�\9�����{o�'�`}c�L%�0�mټξ�_C�Zg�zϽ����4|z��$m����
��~����>In�2u4���/��f�3�z�mHxo���Ŋ]}U[%M�
�c�f�������~���;n�
�}Ǟ�͚ūң~�<���gdd�ѣ���φ��v��[n����:�
Tٷ�B>!�|
��[�
9r�^u�%$�[�퇳͟���gZ�jG�
+pj�h,�=�\�^��0��=���2���6 ����>���x]!C�P�
���=�xFV���x�F�`F ��ӛ͕���èrB�3j�	�ٚg�v��&)%��3ľw�~k�'�Њ��˾��Hrr��z��m���U�hN���ZZNSeыN�:�~�-l�/\2����!}lּ��0*7iܸ|�
+g�y��kW�X
/(���N�ڵ�_
6t苓&#���Ýo���N�����,X0�� ��
yJ��S ~�`&&%�?3��{�(�����uOe�3�.
B�:b��jժE�Z�p͂&\�`F�`r
;U�����4t��f�Gm�}v�R�J���O5k�a�"�I|��ݖh��3j��}�
B+���֯�T����-~dd �C��t�M[�n�?>Ho�Ν�O���}���w�}���7o�
�A���:���?�ؐe}d�g����T@�[�nٿ�����C�Zg�޽�
D�áD�K�.��0O��)�֋(��!?�O�s��� D��ex���a`S�
�5k�LJ�Őő�F�`F ��f�v��(��)	��,���FJJ�~�����z��
;~ں��9s�
;v\<�c�v������u��]R�T�k۵Ô�
6�x;u�T�(S��_0��Ï>޽~{��4"��hq�C��iԨ����� qꩧ���<aH�L�߹�{�/^".M����|x�RxN����
��%�Z%&& ��-�<��)?�����Inp�
������͟�>����g�$�
 t<�(
+V���
��V>"�υ����£�
��
��$��_|0z�\�`F�`ro�
���,�>�/��就����Pȼ��{
z!�Z�lu�WM�<�۲�����
^H녍."!�F=yꩧ\}�5�=6�O���
+T�R
�
vA���ՇCsVlx�;u:p�@�NzV_
}�k2�ߘ3'��M��9^50�]{�oߦ͚�~G�Z5��׿�)+��C�b�
+cnjyc��.��^8p�
��?r�]��
��׽��
;
'��g\H��8

�)�O�3��B�3�;�u-S<o����i��*�Y��n\hsaF�`F���l91�X�Z�6�{�?�88{����w��3G��k��0q!�j���
����&8&�U�
3� #�0���A��M�|���V|�m��whP�����gm��
qe�~M\9Շ+W��in���r~�l��ɥuNb�
�4�m�s:�:�emC{0"Ep�
���\9k.�0� #��$�Y\�]vre"�W~�$���2
ɕ����F�+�S��aF�((4��/ٕ�C��ĕ��>M�c�͚��b]�藟v�*Y*K>����0� #�0������XI�>
+}A%��0� #�0� #�0�M�
d+f�HHc3"��=qGA.$0r7F�`F�`
+$�-S e=���A]g�2��F�`F�`
+�[DX9.;嬭�~3q�&�!g^��/]��7c���0� #�0� #�|n���3�1����qW֞ʒ+?�ç3
+>*�CF�`F�`�����w��}��U+w�����"E�T�T�F�q�
��E\Y��l\y����W��\����#�0� #�0����Y�x�W\uf�Z�ř"�Eff��t�Ofơ�����}���.��]�a&WB�1�
+b�KF�`F�`�‚��|����ԩS$)�x�X�
;���v��#G9|811��)Uk֬��ڜ�Y}�Ң��%&`ΟX

x�OF�`
+4ӦM���
O;���/���9F�`|8��~Q�f0'{d�ժW�<��bŌSZ��Lf�<�F��"�z�j�K,`��~�~����°�ӧ�\�������4�{����
8pժUk֬	�S�6�F�8��"+V,��"E�%��F
���b���*�
0� #P����/A�_y啯����G
9a=-[��wޙ��~���Ǐ_w�u��rJժUC�T��
qF�`N.��?��lf��Ebe6+���ȭ3���F�r�ʠ�M�40`���R��7߼��+��v���u�]zV��@pkժժU�I�&i�0
�

+��9�ӷo_8Džv�'����bT`�޽�z�:���;�!C��9����Zl�u�Yd#W��Ҹ #�0yP�u_�]����[6G��V.#��
��y�Y+F�8�/^
Z���Ypb�d|��g��̓c�/�>�믿~���?�<����Æ
[�lٌ3�����
|4gu����7G�����������^����˱
�#gci� #��A@���z��=�ש[��߶Փ.k'
m]��`�2���.�J� #��X`9�mڴiR��U������O?�v����{�ҥKq�=t�x�A�`l�\�޽{���"O�>
tve��C�ܹssP}w�{�:u�4n�����={6ɇE�|��بR�
+���`�b,�`����7kV
<����ڞuN��M�
ؿo���l�
+we�H��۲�+[��!6+����Z1���A�aÆp� �Et�g�}�]�n]�n�4h �{�
wP�~�u�֥2`��C2��<�`����2��$�ߋ��nt�
ړ}�,�`���)ժ_��
+��0#)���
.����R\3�2E�
A�5]V\�$!f\&��9<�S� #���O6l����q��
;�m��?����
,;v���!B���~�_,
.�
���ӃK3� #���V��q<<7��Ŋ�كi�lFRNR&d��%Skf�r��0��5j�"#:��˖-0
#��g�y�$�b����~�-�ܴim�LѢE��ۇ
� �}N
��q�F�
ړS�Y#�0�����[7l��*x2n㔑�8^Hq�n3� #`C ��}�N��pl�-z��p�ҥ۷o��㏃��]�a�hɒ%�t�bL��������SO�b����w�6�?�m,~U�㯸�
+�;G�	&�p�
���
+Do7�MpEF�`���|V��+����EWXIF�`N *Tx���x�
�tC�	ĠЍ�
9��SOm׮�<н{w�'_
L�C��{E��<�L���C��ꪫ(�&bK@8Rc�
�����ֶm[����W �v��
+WdF ?"�X����|���O��ˉ}�6����/~=?��ufF�$" �1��}��7'Qn�`F��Ĉ�P����3^����E�f��u�:�|ù�
+�����.�0�@�C ^��c�P�q��]����0#�0y��ig�wսu����_�:��޵��yY��-zT�����n�Ҥ{�&�Wᢿ�o�
%у6�n�����<y�Y)F�Ȼ 
�!�q뭷"�ܣ�>�wue�F�(|
<�~�H�����?|l�i{�uփ�~��$��'W5N
\Y�{sn�v�;�cF�(�\r�%H�@ˈ1���O�(Q��"��fF �# �� C�-��[��f��W&��
�we�|~�Y���_���(��0� #�rk���Cf�Ծ��#i����I����m��Ί�SRS�-��;�[��d>~��_ٌ!W����3� #�0� #�^$K63M���s,J~��{�0� #�0� #���t$�
>g��(s�V�^��ʹ�{�~;
� 	���?
���L
��ӆ��QŬ�bu���֭��G�ٽ�?��z��
?~�!I�;�޽{���/n=?��ó�>���?�!��Ep�ڵkC���1q�~a~OU�LAE �����w߭[����;u�Q�F�<4q�D�g1W���	��`F��G�,�]���Y.���~��k֬y��RRR at C�Q@��^{
e�/_��(�A��9s0���oƌ��*�\��Zŋ�ꫯ�R;c�
$��ի�C�ҥK���3~�x����Q�F!�?M�2���_��7uy?}Z���P=�@F`��x+CȰ;Sk׮�:uҝE��J�*�s�F�`����aM��e:k,I4�OG�Sv���+WFʨs�9)��/a�
 %˗/�U�T�v(!F����w��������'��nݺM�6�0
��
4x�����kSO��ٳ�#��
+Up��`�n֬���ѥE��C�i)U�T��\��"���r�o
�N�w�W_}��[nѝ�[�������bF�`�-���u�惡�c6��#���ѣ��̓-
D!B�����SSSCk��?�QFal�
�3�wށg��s�֭p�@V��n����C�����ׯO?��iώ�O��\��! '�r�ʭ_����
x�>�
+ƛzE-`=��0� #�0��5c��"���	+sb��(��dŕ
�4�#`T���_�c!� ��v׮]�vkd�ڲe˥�^
+W��۷��4-�g�:u���C~ �t��
^͛7�{��݋m�����]�>��x���Á%�q*T� 
1�HOl�:�w3�� c����0� #�0ym[�S��1�PR��I`N^�`��Y��x0a„��a�]�����-[S����zΟ?����w��!��ꫯ�ܹ�C=t�ر�(��d�b2������ӧô\ �ƝbF�`
+*i_��++�dJ�'�hn5jԨY�f˖-1�i�ܹ���Q�H�lb�2���}<�S1��`�$?�ez¨<dȐZ�j�
;V+3hР���޽[�t�aT�v����ϴ�ו�s���;�K������w�ٳg_v�e���5�<#�0� #�O :�$�&��Xٕ�3�ʖ�r��}�~o`p�� qX
�1999�`���iӦB���e�&O�L��I�&������ftA*��X�СCa'�d���
c�"��)�������r�|� ��A������
K�#xe|����?>�v��fF�`
+<%|����N�BG�� �;w��D�5D����
� �<�7n܈��;%ɏFYl; Fa�
+Z��1�oڴi̘10Z���geɒ%�[w�UW!L2l��c��J���+V���q��o��E��_Rt��� � �
��1���!
hq�?���&x]|뭷G�[�4i�8*f�A*	�y�
e�F�`F o"��I�e��˲��
��r��s��z �y���Qc�_\sڴi �`
;v�K��ѣI
J"�
6����}�uׁ�Ң38@>�Ԯ\�_��"@
x\��hgl�펆
7�
ȊNVB2A�1/�RE

8���;���
���@˰a��`����#G"`
��O�:u�̙f�A�6����� C�}cF�`�5�!����lj�O={ˆ�'.�o᨜�x�պ����E��uOYyF�#`&�<�Mss� #�0�@�E >�~}�>d�M���?�v<#3##��
MK��؁�K���.[��9��4nފ�K����
j�[_ŌS�f6�\1
+-��qF�`F�`�B����惁�o:�\����ٽ8|*
+��n3� #�0� #�d��:f:Vs�2$��	��&]�a�
�K�MT�:#�0� #�0�@@@:W
[�k�D��D
+�,�hs��c���[Z�6� #�0� #�0�����Xb>:�E�"�yӬ�?!g�F�`F�`�	pJV^
�b�	S3
�X�WF>���0� #�0� #����B�V��03�?e@�p�իW#<-H���Ŕ@��#�
)K?)��.O�7�*fEC��nݺ�]�6J���+��{�
?��s�2n�8?6�"7
+��`r
+��۷v�ڈ����O�k���G��(*q�† ��`�!��u�t��F�!�
��B?�����eF�`�:��B�
������Yy�E�(1����5k� �r����;��(�$ (�|�rlGA
+��̙ӰaC�ң
�ˢE�����;�\�t�/�H��۴i��/�P��~�m۶m�5
�G�#)��L���믛���ڥ�҂t�Q��e
+
@�k���P�ڵ����m۶��S� ��2� #�0�	�Ą
�lQ02�,g��<.�bF\*W�\�jUDpCB>�N$�
����˗G�*U�`;J��u����E鲃�<��S��H��/R"g5��f
!`�T��/�@��
.� ��
#1��(
���_ͯ]�/-�J���.S�@�J�c|s@�>�"G������Y����2� #�0����
+��TZ�+è�Crn_|�ѣG�͛[�B|5#��%8555���={֯_��؎2ݺuk͕����_����_�~}*�
O�uh��{�
xO+W�
�"�����=�w8aL
+,��� #�0�@>E at f���X��n���'��l���Zx2�
 ���ڵ+�nM^իWw� �
�	ڏ
pel�ݻ��M��n��vu��ŋ�^Yr>E�B�
+�|߾}�?6@��;$�_zz:<��i�XmF�`F�0  ]��/��*��Hr�WFT�
s�
f͚��	&�M�.��_�^�X`N&�����9P�7o�5!\�0#0}�t��
3�wF�`F �# ���O��-Vq0�K��#I�5j֬ٲeK�g�;w.�z�ad?�
���r��V�Z�s��s �1���|ciРM�r��`T.[��[��]�W�@A��<~�Y����{��
0�W̞=/o��O���"#�0� #P� 7I��"����D��S�f1�/�ѯ'� � U)H
�e�LNN�S��8

�6m 
� a��,CnpVFX
* �R�c�G���+����nh���W/`��ȱ
K��c�z
+�
D6���
+Xǹ;� #�0�@�@@�ޣy}r���؄<��E�G�w�޹s'�����Mv�3�pl۷o߸q#�Wh�L�$?Nk�� ��*h�P�X ӦM�
�5b\���@s�n��b�
+��L
(2��e�(Z��sR��!^��ꫯ������.�����1���I���[o!�
+�ܚ4i��*f,Bj	3��8�ɶY#�0� #�d/�rT���S�䛡�]���G�d��ܹ3̺�
:m�4�]���
;��a��Ѥ6J"�
6������u�]�(��
��8�+W�ėkD
��5�\V��ʨ�ж�o�^
?~<--
�Z���0�������`^~�Ri6lX�O
(��
9�t|�ԩ3g�4cRo�n�L%���%F�`F �# m�"���ZV�I,^�����hK��L���j��y��OD�^F "fBʈU�#�0� #�d��I�>d�M���?�v<#3##��
MK��؁�K���.[���铟{w�v�B� I����Z���!\���El^F�`F�`�‡ ��}ٚçs\#��pYγd��9��X�3�=fF�`F��y����u�0cnM��^9�5
���;6��.�i.�0� #�0� #P��9�E�
9�O,WVYJ�γve
�رQ�Ow�`F�`F ��=Y�S��u���2I	E]�6�\W�`F�`F�`�"�PEF��,�t,FF
Q��`F�`F�`N "ӈp��y)�}�uax&"
��^��hA��\�"�9��6��4~�<mh�* [...]
+4Ȉv�W�=�)ɸq�٬��(Ì=�)طo�ڵk#r��O?
ܮ�_�yL�
+:��јnx��g#42iGQ��T����׭[�#�7j��l&N�H����vYPA�~1� #�0���2S/4k�D�r��0��"H��f��]HII�ݻw0((��e(�|�rlGA��̙�"ȱ�aÆ�*�-Bn?d!A.kd$�!�E�>p�_~������o۶m��iH.�
����)S^�u3��_��_Z��nIOOG
�ҥK��
v��eϞ=Q��e
+*
@�k�5a(v����ٶm[d�)�
�~1� #�0N&����bfɏi�_���P�r�U�¤
+�*x��*�
J�/_
��T���(hB>��H^��z�_
\婧�WF�=}���Dy،!����[�b�
.� ��
#1��(
���_ͯ]�/-�J���͛7���1z"�7ZG�(]�2�9�7���;!r��� 1͟�#�0� #����������q0����	��ѣ��̓-
D!�Ё%8555 at 8���ׯG~lG��[�n��26�z�
�����ׯO��i�m�L�2��dɒ\�8��_�=�\�r��66�ի����*p(��6�0� #�0�@
E@�+��.��Yؓi���Wn�v ���Zx2���r�qw��`�&/��ի�� ߅����26��݋�d�
Pg�|G������ŋQ��N�ӧO�~�.��Rؿ5)�rO�b�F�B�
+�߾}�
l�:�wH
?8��c>_���gF�`
+0��#]X9��$c�lS�9y���f͂C„	�&p�]vٯ��
+O	,0'W�ڂ��
(͛7'!�O]�lY�^�
8 �P_��5͵
+ӧO�i�`�{�0� #�<T�8���W���"�_�2AS�F��5k�l�|q�ܹ��醑��z0*��9�ǣZ�jh]��3�
lư��A�4��a��Q�lٲn��v�_��t+�.�c{���Çϳ�
o4��
9�W���7(�{��ٳ���_?v�UbF�`
+��	��],lq0�������W�N r�:$
ⲁS&''G�SM�6
��u0�z�!7
8H ,�_)�1�#�O�����]7�]G�Z�j
>|8x�c6���y|� 9�c	~�z�����@dC�N�˽`�F�`��t�0��Y>V��(�ʄ��ݻw��	�9~�xD��]� � 
����7n��흉���	c-�
� ��*h�P�$ӦM�
�5b\�6�
�9D� _Y�b�W�\�-
TE
:�+@�_}������ڥ��r��A������a�F���ѪU�ܛ�X�n>�=^��z�-�W��[�&M_ŌEH
�
?=�A�XEF�`F�0! ��I*,�-,/
#���'!	�ڗ�4��ѹsg�u�� 4qڴi �`
;v����ѣ	a���6����
��ł����v�ʕ�r��o�g�k��Fde�Bh[Ӹ
׋�Ǐ����C
8p �!�
w�;��˯]�/-Æ
�(�~��~�}��}�G�
�+��ra��<�:r�H�C��S�Μ9ӌEH��n�L%�
%�>#�0� #�7��D��[rb�j�l�����m�Z�����]�}���Λ�`�������2oj�Z1� #�0��u���7�o��H��̌�L�{4-]ocvV,����l�'s���ܼ�?$&Q��ľ���:�|iW�
06G0'<��G� #�0� #�0���R��A�C&
A���yu�p��.yUe֋`F�`F � �l�f2��¢,=4
?���)
�ر���ty���#�0� #�0��	G �T�A��5Y�� cs��W�uxc�F��\�`F�`F�F@�X~�E�Qq0��E,I
v��s�0� #�0� #����"I��_Zt.iY����Č��X$#�0� #�0� #pR�DXF�)~\��+���?��[�W�^��X� �r.Pڏ
~$�~R?]�64 �*fE [...]
+�[Gm�ٱcǖ-[.���K.�d����o�
#�
*T������#!� u���JOO�x�N\�`F�`N 2�"�1
cY���F�`N^�`��Y�J�*5a„�w6�
p}P��e�b�:���Y#�����aZfpF�`F o"��[�XJG����+��E�q]�F��5k�l���Ν���n�O��2�����aʁ��B,���.�ys��/����
��/
��
8`~�={�e�]�_?���eF�`
+�h,3�\Y�\�(+�rD˲��W�N r�]$ˑ#GB+999��-^��iӦ���Z�]�l��ɓ)W��I��}����7�
+3�r
�}�~����j���?����n+�(q�F�`�����șd8�$>���x1�-K˲�7U޽{�Ν;1�i���͚5���
��5
+
�7nD�
+흉���	�.�
�0X-�u�7m�4f�����`X��,Y�qꪳ�
pz�̻g�5��u��z����I�&�;��o:�
?L'��a
F�`�‡@��@"�ؔ�H��r�[9UNhѢŅ^عsgD�%e��iӦ��
t��S�F�
M0�$B�a��쯻�:VZt�G�ڕ+W��5���� �n9� ���!؀ݚ�a�
"�{<r�H�C��S�Μ9�7�p��`��T��
�DF�`F��>�-Y���,��-KT?g۷�LK�!C6�����s��z׃�>���Y#Px0R�^sOF�`��� | ��>d�M���?�v<#3##��
MK��؁�K���.[���7^
�њ��j
�����5��7��	���/��>s� #�0� #�0��	F@%��m���6����:�`��h��9���Ǐ�!��2� #�0� #�0^�@�T]��W��fr͈8��$ La+�K��ҝ��p�� #�0� #�0y�
G����,�1��ז#s��<�L�%��*1� #�0� #��/$1�����HRb�dʈe9s_��>k�0� #�0� #� �XD� ����\���Y�d5��qdF�`F�`
+9V����b�͔�Ϣ�AA�W�^��X� �r.Pڏ�x$�~R?]�64�*fE�[�n�n�֮]z�<�k==� s�6׫WϜ�� 4�"G	�;���MsF@#��6�ƍC�u���H�5B8��'R1��l��#�0� #��-�j!ɰp��y�HEe��"�L����/׬Y��
ȁ׻w�஢$2�����˱
ȟ3gNÆ
o���
6dY���U�V-Z�x��HA���ӑ�t����

�t�gϞ(�rF�0` r\�-��;��ڵk�N�42m۶E�
�`F�`�,4m�H29`I�\YM��^��zP�r�U��
C,rS�LP%˗/�U�T�v� F����w��鲃������}�[�nӦ
6H��͛aW
1b�E��[n�	���eq%%�
?��H݇w�W_}CH#�t�R�'#�0� #�0yM�%1&Jl�N"
M>ٲ����y������K
F������
w�A�9e��٭˔)�V�,Y���XB!D �@�ʕ[�~=�
���8�
+
�⺸
+!��eF�`F�$" ݒ)˵� M��K�0��a2���J
��)S�D���R��ڵ+�n
E�)gǎ
[�l���K/���۷���i��֧O�~��a?��0F�eB�B�
+��o�>��
Pg�	_ 8�`�1\� #�0� #�WDY�,�s��Ѳ+K��=1�t ��
̚5�T�R&L�R%��>�Lٲe1�
+
!��o�lٲ^�z
8p �ʡ�y�G�I�G`���0-�}=YCF�`F�p"`�++/
�,WVe�gi`�jW�Q�F͚5[�l	~9w�\!��
#�I�`T��s�}<L9��C�����2z�2<�'O�<|��|�P8Gv
��޽{�	��c��޸��!�gϾ��"���N�� #�0�@�A at M�K��b>r��)L���$
+:�~�8q� (OA�
9r!�����	(�x��M�fS�k9��c�aJ�=i�$�C<x��D�Z�>�}ߏ�k���r
�}Ҷ~����jj���?��V�EwXIF�`F��! \D�%
#�#o�g�q0"y,�޽{�Ν��4~��f͚���XF��7A{g�$�q¸�m�(
VA
�c��M�6�3F���?�l�w���=Ĺ�ꪫD
6���믿�۷/�J��+V<��S�Z�ʾ=����B�_�V���[?�0�4i�q��|�M��餅"�8#�0� #���>�p,�b���b�	����(�V�-.���Ν;#j,�*@�i�@v�:v숩N�G�&DP�
� �ƶ&�fa�Egp�|ĩ]�r%�\#iH0���r�q*��C��5
�ժU�Q����k޼y�
=`Wf�<��n#G�D�8��:u�̙3�x�
���L%yPsV�`F�`���7�f�����cӺ���� �LhzF��=
���
#�DG�LH��dF�`��  H��̸݇�}��GҎgdfdd�ߣi�z;��b���e��{o���n�Mؖ�ě[�:���F.JN���dGk��0� #�0� #��#(]xrf��u,f
M��Q�0Nt�)��{9~���V��cF�`F�(p�P䉡s\
��$/�*�s^���½d?,]�;��!F�`F�`�� C
NNJ��
+���*���y���>K|0piF�`F�`F��@b��')�-�2Jʘq2l�09�U��'�`F�`F��
���q`�f|e��A��j�(�
X*#�0� #�0� #�' 
.�d$�9Y9\�2�*��dr���o����E
�. �%��ȊG2�'����iC��bVD��u�v��m�ڵ�x:�|���0�����K���^����@c� $ ��_|Ae��iJj׮�H�O?�t��y��R'$�7n
"(�[�NG
+oԨ��L�8�4���vy"�6F�`F 2dJ&
�e�c�	�LyJ"�` �ݚ5k�v9�z��
�J"c�,_�
�Qt��9s�4l���oްaC�*(�t��>}� � �

hن��wSlzz:��.]�Z�pa�.]���C��9�}��)S������|l��b� �5޲��ή]�v��I��m۶��S��ϽcF�`�7V�>N�e��O�����$BG+W�\�jU�`a��D�߀J(Y�|y�R�
+�#�O�|����ߡC���󐤺gϞ#F�h׮
5�n˖-
i�6o�
�2��]$��[�PB�5�c�.��yaGw�c��#.S�@�J��g�}���N�ꫯb�.�-��Y����1� #�0�������emٕ�4�/�r���y������V\%�1;555��֭[�ѯ_?؆C
� (����3�p�eʔ��%K�8�������ׯO����
E.S0�cO�r�֯_O��F�z�t��]�3���`�½`F�`�	�it��)�l�BoiW��/����w��S/<r؆w��l�F�ݻw߷o_���#jҢE���drk���N������^
+{6
���޽�Kvq� u�'�\�� P�B���z�
Pg�	�"8��k/� #�0� #�P3��υp� �l��Xq*II$�aN^�`��Y�J�*5a„Hur���W_ݹs�
z�رcہ��e�0�M�-[֫W��_9��G��X!G �
C�����gF�`�.2�X
�� ͖��#B'jԨQ�fMx��_Ν;W�n/7��'ՃQ^Ρ>
�
<x��ݻǎ
A}Q�
;w�4�ú
��ɓ'>��
�B�˖-�OD
�X�A���Fe�q��fϞ}�e�E��/0�pGF�`����a,�����c�12"v
ѯ'� � U(H
�YC-�9D��Wl���M�6�"�C����O��N0s�LO�j�:|�0�?T�c�_�b�C�v}�L�B ~� �zl��]��^��џ�PAǝeF�`�䯬WR���E�k�
+F
A_Xpa�qD�6D����#� �����7n�흉���	#�Î��(
VA
�j���6m3f
�����D�o���>� |C�3�]�	yѢE$
a4D~����ˊ+�z�V�Z�_X��
��W_}��f,0?�#*��
+
x�z뭷/qT�4i�x)�؂�ᇹ����F�`F� !@�ʴ�!�����
=
(�^7D�%_p�iӦ��
t���
�G�&Q�`��v���lWY��� ��S�r�J|�F��gd}˖-��!�] �A�^�Z5���>L�ѣ���_y�����uw�q삎�_��GW�KF�
��q��=u�T|�p�Ļ2���rGF�`�� �%+�ee:N,qZ��6�w�"ԃXjW.uy���|0�@u�;��2fB�\n��3� #�0��B >�~Xt2��m�I;�����I����m��Ί�SRS�-^����/��G��V�KΫ~j�zV.
_�r\��0� #�0� #�&@���V,V*k��:�ad��[�P8g�r���(k�0� #�0� #��\Y��[����WWV!��i�?>K����S��2� #�0� #��0F�8 
��}*.
�rX�@qg�,'Rn�`F�`F��"����:���r��B��bF�`F�`<��p
+�
+��"���~��1� #�0� #�0�
+#���&W��n�W�Fx,Z�v9(��G?M?)��.OwG�"�!�q�n�֮]z�� �7c���g����_|�E�>8���\�^==5P�
i��}�w��HJ��]@^st==�뇏�(���P��@n#�D��ƍC�u���H�5B8
+���~"�en+��F�`F .l�ʖ���/[$Z�#�老�vk֬Aڅ����`UP�Pf���؎�7�ϙ3�aÆș��)���t��Pf�
]�tٳG��
hhժUE�-^�8�C���.H�3�h�W�^��������Q� e�q㜵�F���d��-
okw�yg׮]���Ȧ��=ٔ��F�`F �б.�	3oy_����+W�\�jժ0� ���0�����˗G�*U�`;J'!F����#[�Ο�Yq��Ͱ��1�dI��H/��O>��u��mڴ��Y��ՠA$�F�k�/�OK�R�t��zf
7�Y�o( \ � #�1�9 u�	�
���t�RG��l6��F�`F �����J­
׆��!��G�Λ7�4��u�,��٩���ʔ)��K�,�K0Ё(C86��I��;��I#z�B��K=Ga��7;�s�(�K�\�r�ׯ��؀�����*p(�L?Q��2� #�0��IA�����|�7Πq�� p�2eJ�u	v�]�vح�^ܧO�~��]z饰CÀg*��4?��رc˖-(�%�l߾���i��u�ԁ#�����ˋ/v�7TϬA��9��Yk�ke�
+*@\wH6@���|i�<����X#�0� #��<���1����bn�2.B�0'/X�`֬YpH�0aB��X~�˖-�{��l�l at O�a2~�x��.�AAeʖ-��V�>����χ���~��!s�΅Ҽy�\�]�'��=a�qC�"0}�t�����F�`F��  �0��S�D�*��y�����S�F��5k�l��m�ܹB��F�����
/�P_X[�9=y�����
zR�jժ鞁�b:
�ǂI~��2�è<dȐZ�j�
;VW�r 
+�� E�3��Rn��_���s
+��{�B��c������!�gϾ��"���V,�`F�`�" 2,8���
עzv2�!��{�	@ ���a9r�8errrT�|���iӦх��
>|8�g��
VMv�I�&�����f�	�.�}��ݻwGl:^=#���4Ύ�����!.�5	���T�~����j��W����-Y�ϵF�`F W�^�I{��>��5�D�ܹ���ЬY3�}�˨Q���q�F8Bh�L�$?N_���'
+�UТ]�!ӦMcƌ��������*���
P�C^�b�SO=ժU� ;4f"��UW]�`�X�N�ؾ}��+"x
5M���$����]p�7 7���7WG
���쭷�z����I�&�;��o:�<�2h� #�0� #�7�Fe�����c��E�^xa�Ν5�|
@O�M��
6бcGLu=z4��p��X5�
� �+-:��#N�ʕ+���( �s����w܈{��;kp�9x\��h�l�n펆�8��
%+���2l�0�Ot=uw�q�
o��X,�Z�
9��{�ԩ3g�|�7
�D0od*)�}�N1� #�0�
�
�
.K�Vg׶�~�K%�C'��-���{��%�w�;��@̄�'�Yn�`F�(��ү�̸݇�}��GҎgdfdd�ߣi�z;��b���e���|�v���Q�R�s�Fff�^2EL�B�:w�`F�`F��!�� ,�XT�W�l�
�d9.�ؽ��D�Y�y1ք`F�`���@fFfzz�X�g
K?Nt9���u~ۼ~�O�5>�r���v���^>�;��AO��-O��_��S� e�� �D�#�0�@�C }0>���?��e��p�y�O9���+8��Ѧ]����~���#y&
+��^��Eϼ���0� #�0��ID`�o�^���e��N��βm��8Ȃ+�q�����u������`�IԒ�fF�`F�`N<�����
���ŷ�
<z
.rn��W�Lϔ��V���O���"#�0� #�0� #p2� J����!
�U
��&�^���� ��Sڏ�x�;�Ii�ty���wT1+�Xݺu�u�v��P�� �7cR
r� *�_|AU
횭#s�6׫WϜ�W�O4�LlW^y%�.#���
Vճ�~����~�
�
�*Hj3n�8DP^�n��ިQ#�RM�8�����˜���pF�`F��,�
�0��[�f
�. ^�޽��$�z����˱
�5ȟ3gNÆ
o���
6TIOOG��ҥKC��
v��eϞ=T
m9�֭�Z��hѢŋGz-ܯ����-BN�;�s�ҥ/��b,�H�
e�q�
��8���9�����ok]�v�ԩ�n�m۶�ړ��8F�`F��
����DmW�͈C�"�U�\�jժ0� ���0�����˗G�*U�`;J� F����w��!8��͛ag
1b�#��-�܂�x��r4�[G��֭[�i�Z��~�#�6�2Z��)	|��(]s�	�Ǎs@��:�������g�E�>����Z2ަ̟9�"
aF�`��F�I�
����o��G�Λ7�4���U�C����� �eʔ��%K�ĥ �Z�(C�;�uD9�^�_�
y�#��N1��7;�s�(�}�\�rT����]EH0E�aF�`����xd���$�j�2`G]�
AI7�
<eʔ���/��]��֧�vZ�>}���w饗�
^h#;v�زe
�_r�%�L���.���
�T�^=ފq�w㜅���"�*T@�}��Qul�:�wH���y�-k¹#�0� #��2����6;�]���
̚5�T�R&L�e�C��Otٲe�z�:p� ���}6 
~ࠠ2e˖�\+t���к'���7���P)6}�t��
U���� #�0�@>D�F�W��
'ɪ�5jԨY�f˖-���Ν���nE��&F0*��9���VxNO�<y����
~�N��`���
]�jժ�0Y�soq�Lm����S�%k��݋m��ǂ71����CfϞ}�e�E��g`F�`F�� `'�F�8�!��̘Qѯ'� � ?)H
�#G� �Vrrr6��x��M�FR�V��l@[������L�4	��
���DX�&̲�s��i�
C�oC\>k 
�1|��z���1���
DD̖���Z� #�0� #p�0�-
�,����޽{�Ν��4~�x����1(��5
+
�7n�#���DI�ㄑ��(
VA�v
��M�6�3FkĚ��믿�۷/�Aa�]�bbS�j�*��Y��s�9yƌ���S��{4���o�'������
w�q�
o#�L.���쭷�z���դI�
��p��
?L'́�X#�0� #��b��ʘlZ�5hѢ�ot���U�y =�6m�.�@ǎ
1�i���$%� �
�jl;#�+-:��#N�ʕ+��ICt�/����w_���{��;k��2<. at e�s6`�6���5׀�#�2�EH���y�
�����9�����čF�
��q��=u�ԙ3g���\��J,F�`F���X��Ē���f�ʻ�d�yqo��>:�y��"����1�#`&���6�`F�`�� �o�~պ�qS�����!_uFF&�=�����;+�NIM]�x��aC�9|�*-mޣ�4i�46�/
���0� #�0� #�0�
���x9v��9���Ǐ�)m�y
+4V�`F�`�<���l�"ɓFf
+[�^��.gOL~�3g{��F�`F�(xW�%�˓<Yhy�ϒ��J~�3����0� #�0� #��H2C)G����z��0� #�0� #�0YG��ŎD���s���)�dF�`F�(X8
,
s���,2�]y��7 at l`���z�j��B�a����Hʀ=����&�^�zz*
�G=*��"3��N����g�
��,����8��OR�!_
wT��Z~ݺu�u�v��P�
��'�Ԯ]��w��Ց6ᓑ5�
+ m5 �ׯ�����v��`
B��� #�0� #�0!8r\?�#���E��K�7�.]�L
�������}۶m���e˖��W�ZU�h��ŋ#
�[E��ӧR �T�÷�Z�����J�9�z��
\
%�A
e�/_��P�( �s��iذ��7߼a�G
���f�Y�jU$Ly�����Q	��L�2x�`(L�A�_y���{�G��xq��.�0� #�0� #��m����H��DD��o���<����ԇ�lY����z?�s�֭۴i�
�f`�={�
1bD�v��ʕ+�\�R�T���I��
	�+;8�
J�/_
2�T���P�( �0Z#�u�
���0�m6A��u�]iii���q��5h�@��I$
0`��D0^
���0� #�0� #��"`�-+
e�,����={��_�
��=@vkp��~�d׺
��2�8�Ioݺ�
p<��۲Ύ
=:o޼��;	��/�S� ���	�Y}���cǎE���_}�Сn9(7��鲳��bF�`F��C�d��LLȔ�ձ@���/��d���=�s�2eF�NY�X1*�cǎ-[�\z�p�ؾ};��ҽ{�}��5o��!
�:���ŋCO�.��_��!�|�
���k׮,s�n��Z�j�:u�KE���
j at 2��M�6�\?^
��/��0� #�0� #��L�1㫝
G�Z�C,pڴi��
����\�r�`nԨт
����s��=�бc�L�0�
n&�n�!v֬Ypؘ0aB�=Ӊ���,����T�81&Js_�8�َ�b� #�0� #���
�X�8�D�wfQ"��r�76�U�V�(X/&�Ք
&��.˃
��6pGx&��jԨ��z�(Q"T-���-[�ߗ
�=�0����_x9g�ǣB�
+P�����`� e�q�z�8��F�`F�`��0N��?��Y�CX�R%�rs�
��Q !24+ET�e˖M�<��ē&M�����ú��.����%��W8~�E�H����$ˑ#G������	(��HdS��:81(�9$Ǜ`�� #�0� #�0q! �r,R\Ԙq��7�|��^�b�W�[�,Y��h�
���X�Ί�fy��i�4(�X����X��B�1����v_PO,𜆇�ƍ��H��p��(��퐉ˆ�A�v���M�6�3Fk� �
������uF�`F�`L�]Y��~ʈtֈ�� �0!Ot�kB�i336`�u��Aj1�o�ĉ�$�y�xt��6*�gX��_tn� ��e�i�<�
=��$B�a����]w
=-��ߵ>��r��ٳg#cH�>9U ^
r�]��0� #�0� #�X�ƹ�W��w�F
㞦��Ms_btF :�5
�0�dF�` [...]
d�8)��5}N
+�(#�0� #�0
]�Ln�G��:ܲc#�a�v��>Y��bF�`F��pZ��\91�H���`��
'Kͼ����eF�`F� !@���vl��K���0� #�0� #�n�\Y��Qf�\���>� ������~*S���?}bMF�`���@�2$;�q����_y��C@|b�E�z�j��B�e�
�!��P�<�`FX�z���xT
9����~�L%��9�7�g�}60�>�U<�#�_߾}k׮
U�~�i���/$#$%O;�4��ׯ������C���˦|w5��y����; �x(>\�#ЫW���?��.��o��E�XFT)����#�0� #���a��#�Z"�aѢE�]�,$K�.EF�����m۶�'R���W�ZU�h��ŋ��W�V �O�>H��S�}��k����V,@ϊ~����}��)S�����HL�/�	R��+�|��׏<���⯽�6�/_��(�����Ϙ1�A_���2'
�7����K��<.�ȅ�NN
Q\�O:ڬ #�0� #�{x��wZ~ꩧ��o��XC������Hn�,��9g�
l���έ[�nӦ
6
���ٳ�#ڵk�U�\���|_���xb�Y
�o��~�nݺ������o����Db��d��S�|yԭR�
+���?����
 d �"1JC\� ��������G[����
�S�N���?��#r�w��]�F%/��b| A�I�ݙj��i�M7݄�2�a�'���i'�SB-��$�z�(�3.I7 �x�
<x0�#]��o�]�F
��� �M0� #�09�����_Y��(��v��ٳ~�z��,�l���
��ɥu�H<��Ǒ�z�֭ݺu��m��޶W�`}�5�ʃ@���~��T6l�����
�d��\��Ty�w���5��։D 3�� �np�x
�������w�޽{
�b
��s�
�!��o�WP׮]۶m{��Ra���t��x�ë�g�}��c���t�G�y�VA�V�Z�+��?��'jn�`F��U�4Z�dÙ·]�^��g	x0�)S�
��ڔ�cǎ-[�\z�p��i
+v2]�4x4o��!�aÆ:���ŋP��]ѯ<1����澞���w������7m�4�\֯���N�:�����K
G�q��8_��	ճbŊ�v������r޼y�*/���_|��p�ч<��۸q�ʕ+'L�йsg*|��Qx_��rk�)������Wd���%Kv�����'܁~��'h�V �oh�� #�0� #���+{'��N`��6m�j!`�|�ʕ�3>/X�@����h衇�
;f6
+ޠ�}��tv��r]w� ��,�w�?�
D���������W�z<t�P���'
e�A�i%��͛7Ï����7n
����G
u
��L%�����w�_���d
�f+���p�wh�?��\�`F������
ѿZ�j(����q�k� �^8;֔

����A��
+�{��cǚ
�'R'�(Q�D�N��8����P�Jj#
��`�&�p�
��e�
xk`F�g���s��_쇑rȐ!�j�r@�嶸b�!��/�eœ����i�n���&\�&Mr(ðc�[��/4S7��~ZE��{�dF�`F�$# ��H�e�p!H���5Z־J�*!�����
+��SO�v��j�'O&;1&3
<xPW���СC������T�>Q~�1O�q0�<|��-�_t�ٌ�]��%��
t
/�kq�� f�b��^F�w�f����@��e�ɦ��r�W�ڃ��I .I���ܜB��2n���o&]t������9��0� #��$D����ʒ:GOEҿ��b�<)1��+�-K�,Q�\@�OƂ
؉��,�-&0!ԃ�RWKZLb��J\�@�gyД�o�~��
��W_}1
+��v��;\䃑ӢIUh۷o�V�o5k�q��C ���/�N�����GLj���{�n�	
>
�sC=�Sw�r��+���B�d��d���a����
+��$������
�,�`F�8qXtٚۧ�^�NjJbR��1c0=�O����pQ��{mf�����Ҙ���'N$ N����#���	����סC�;�Q/k�D@�9l;�\w�uxa��"������t2���Ƶr���FPm�	$�A
7
o��#F�y�\0��
>��S|��#�)�"D#(�̙3�
+f�N
+P
=Է�|� !U�ML�����?�P'�~�sa��0� #��`K�Qw������I6,,�w7�>�Aߙ|�U���|� \q@%�|�I�/��
^���
�2� #�0@ >~8t2��m�I;�����I����m��Ί�SRS�}���Æ��Z-m�?�lܤ��WV���!�2�
F��! o�*P���X�����e2� #�09���s�l.�y�-�pˎ
?��x��,�,��!�Xp��?�eX��,w�+2� #�0'#I�7'�pˎ
�	��1��'�4pӌ #�0� #�0y ��
�R��낡�-;6�`��|
8=�#�0� #�0���C at Pe�\$*���S�[fF�`F�`N*2X�#���Mb����I��gF�`F�(�x�_W|��.��W^	?��\$�W�F��:&�������~�z��T<*��T
\�����?���� ��ƭO@w����U2%�����ۦM�@�ri'�J��o��B����Gb�P�� #�0� #�0�@^@�4-;�`D�oѢE��?��,]�,�L��<۶m�
� 13?�Z��hѢŋGJ<w+�ӧO����_r�%t�d)���

���l�{���}��
�D
x��4Ŕ���Ǥt�����

�t�gϞ��r1F�`F�`�����r���1�������+#�
��HM��ԺK0�R.$ö��4�0�b�������gϞ#F�h׮�>T�re�Ћ�T�R���P�li�������g��۷�
7� 
.���^�zA��͛aWFw`VG~
+��D}'���� #�0� #�0�"`ؕ��2q�`weXIׯ_��̞�u��\����_~��
"��(c�#��֭[�u�֯_?�b�՞��5��Zn�aA���o�>R�2e���%Kr�i��0� #�0� #pR0��I�
aVr"@��ի{j
�]��Q�F�D+V���رc˖-�腋����av�u���o߾�͛;�5l�P'Y�xq :��T4�HKK
(������*ժU��aÆ���s�i������߿?�3Nʩ�FF�`F�`�A������-#
��eaZ�6m���p` 1-W�
<�5j�`�}�ꫯ�ܹ�C=t��1Sܼy�t27�ξ��`6_� ��'J�@�1������=`��e˖�%�u�+?���9�0
aF�`F��-<�r���1ߋh-�%����ˍ7�;k�V��Q�^Lѫ)L�3]�
4x��ݻw�
;֔V�F
�L$ؙ8T?=�&���-���z�(��o��oŊI
����P�'O
>|��	�A˥F�`F�`����R+�
�R�J���p;6����SO#��`�d'�4iRjj���u����
:�rÆ
Y�&T�,�4��鏩��k��K�U���9�M5�:#�0� #�0�@n!�Àm\�rWe�	pÅ_��o����?�X���+�-`�)))�
�`�X�;��b�ݢE
��@�5�K3B��bk�V��'�7��Z�Z
���?<f̘��8Peا��1��w��
0�'%y���j�F�`F�`N"����"1��>$
GDde\������hҤ�63c�iӦn�4�b��ĉIHF�Z���Q\��o � |r���۷��ǟ~�ih��o �
�
+���+��wܬ{���2�+�b�F�`F�ȃ$�>��U��~�Y('}v{7�6���6�=)��*1y��γ��b� #�0�@AE �����}Ȍ�ڷ�$�xFfFF&�=�����;+�NIM]���
2��d�,������4������p����4��`F�`F�p# g���$�W�bŕ3A��L�w����
Ǐ�T%��'�?�
#�0� #�0�@^C@bI��ŕ]IH�}Y�[vlhOh���kg��aF�`F�8�xnjˋL9!A�[vl�!o��{&�uF�`F�`�<��6-îl��L��ț49O��J0� #�0� #�.̹}�+�
�yaF�`F�`G|�8����W^	?�?�\$�W�F�,�:&Xc�������~�z��T<*��xT��?D���?����˳�>z���Tq7�XѺ
Z%S�[:���i�8\z�ئ��`�ט\�
]�����o�� [...]
�|��f�o?
h?�@��޽{���3T%.�0� #�0�@!G \�h�"�* F�}�\��[n��Y�f�M�q�u�ܹ�	�m�Թu��0�b�:�B���sĈ�ڵӇ*W�\�ZJ�*|��	�h6����Mx�D}Hg}�
7 ��/��W�^�y�fz�
}�8�
��D���
ʠ<�uw��������l$�N��g�J\ ��K�)S��/
w�u��+V,���
F�`F��=lq0��RV����#���Z
;vW>p� �Ǘ_~�.�n ����n�u�V8
����ج�3X���t�r�
���~k��j�)S�,Y���!0555bݣG�Λ7���KJ�iBB����>�ߎ��x�Ǔ�/�o�%0� #�0�@N!��WVi������/(P�zu�b��Y9 ��Ƴ
;vlٲ
�p�ؾ};����o߾�͛;��A'Y�xq�J��T4�HKK
(������*�@�;l�0�rN;�4P"��vb�g�u�`-޵k������T	�e@~zƥ�2�ƹ��k��7�mf���Y�F�`F 7���V�kh���+L�ӦM�_] 
�v�ʕ���F�-X�@���;w���C
;v�s�N&�f�9��|�d�O)A�1����� [...]

<x���cǎ5�ըQC'	v&��OO�	��۳�����z*
+���o�[�bERC/�.ÓF��ÇGᲺ"��U�T�>~8`?�lٲ%x99�{�a �a��'k��v
����A�#�0� #P�p&�Vve�BcG¬ʕ*U�,4�۱�
+ D�N=�l0��5��xҤI��=x�R�|��C��P�����P}���,�?f�ծ];�/�V�Z�7Ͻ3ۅ�IӦM��
Gh�0ۣ�w���c��Q��-r� �bD�.�#�FA@@�S�N
�`F�`�61^lƌ�|9�,'$�
~o��&f�X���+�-`��k���6��p�	St�-O����Ҍl���ڳ���	=7�+Ed	Z at t���nj����
+�
�4�z 8b���p�&���w���:i0#ƈV�ڏI���P$��o�X�)��.�� |�z���r�C�͟?�O�	O�
=z�X�0� #�0����P�ly��7F��2���!�2.L��FSx\4i�D������,
���'N$� YNh�GG0q�
++B���ӂ����o�
s��~�ih��o 4�
+���}��7k#ؕ��+CB�\�r���Hڢ��Á���fu�� ]��8�=fU�Y�B�
+�G�&9�z���r
+���W�>��
���<9��aF�`�
E�
+�\�f�իV>��=D:/'��𔁃���B������ blG�!bb�
9�
.�R��0� #�0�@0���W���7�o��H��̌�L�{4-]ocvV,������%
:t�;봴���iܤ�-f\fb�XD$^F �@�|48���A�៣s��|��0� #�0������K�eK�������
o�l)�r^�'��\$g�
K��ã
1�֮]��O�\��0� #�0��@"�`<�����|g�S��[����<Q��|.C�������6�}0
+,�_F�`F W8q>2e����-;6����|n�:����e�� #�0� #��w�C&#�n�
n֟`F�`F �"�C�Y�c�_��:�Z��.��#�0� #�0�@�C at pe/f
Ζ?��c$�_��R.�իW�e��	&�F��Lr���������S�<r�Q�?��J>��s�o.�>�l(�n}���@�h���)��?
EL�6m� �K/�T�7@�c$��d>�(M�����@���^�'��׮�
�w�'�[?��~��>��z��My�Η���ĂZ �wƍ��w߭[��s���5���o��v���HwB�i�XN?��1�<����
ڃ
7���*R����J�2��|��a�
�����ϰ��]fi� #�0��	C �A��9�TmѢE�-�,$K�.��D�9k���߷m3�£lٲz��U��-Z�x����=��ӧ25�Ts�{��Z���`D�	�h6ѽ{��&<�A�y��?��!�
� � [...]
 ���k��|�rl�B�4��{������_��W�^����~0�3f�۷�W�^��C;^
+
0 o���d�v�کS�
�5r��p�
���[o�T�o۶-�ո��+o澡HZh�
��Ґ�>X4�=��[�l����jժ9�_�0� #��.
��O�&�r4�
^�|�-�����M��!@�f��3g�iOunݺ5L��p�
I�{��9bĈv���C�+W�#�m��%@� 
�&`�
F�S$�C�\p���
7o�
�.��:,p@	� CO�'n�{���Q�J�*��L��؀v��h�w��㷙��ߠA�t�8��1���FA*�|� ��6�/�y`�Ő�
ġ������C_�`A�s}��ohx��%�g6����7s��Xh?�^����s�?��#��� S�e�^z饂tB�/� #�0?
+l�+�(�2���ׯ7m�&dȮ
�|��؏�lYBRke�qd�޺uk�n����[l֠�'k2ݵ��ì
�c��j�)S�,YW�~��	��>�����
�2x�`8uԨQ#��`Q���j�9SDi�ޣʕ+�K���
m��[84�$^��}�޽ه�X�\]����%��z/���
+�^���������nݺ����F�`F�#�|bWδ�ɖe9кL^�իW��
�� m�F���΋0[nٲ
�p��
#̮�.li��o>���.u�8> �O at E�	|Y(������*ժU�_XdI[ȁ;/
{`��o���a؋r�=q
��o��p�n]&k�:��`i�P`6�?�S�^Q�?$����T�B�
+�9u
+���Q�b�"E���x��7o^�;�/�B�w���9G�6��;�Ë�cZ�r�����Z��'I��tE��1d��������F�`F wP�Nٕ��q�E���tڴi���6 �� fL-Z�`�>t��Ww�����
:v����riq3�
A�l��2�'�
�1&8
>|��Oŧg�d����>��n܂k�^ӲY&
�
<x/6C��/6$��?>�h��C�t�'�|E���D3�&(
?xxM�cWAB�|��C%�>(�1����]
��)��[o�'��C�х����ƒ%K�CEqF�`F�D!@�F�2+��+��a.�d7"k��r�7��
+��>
+���c5�r`�,4 �
;v�)
� :yG�3q�>~z�M?�=�?��S!���~�_I
���
7	̂>|��	��c7n������A
+��.(>\)0�і���2셵j�2OY����[FM�� �s,xc��0 &
������	¤I�B;����]�L�ٳg_v�e~�
��9�/?�
9rD
����
I�fE���n�]tu���yaF�`�:��"�_8�+k��`�
D�Zs�
��G�
�q�v�#+X#�A`��9SW��]�rÆ
Y�1T�,�4����l�k��K���9��S���-Tm��;s�LϒQ����l>�-G�Z 8	b��%'޺��&���� 9�|8�S�~}��� ��U�ɩ��r�W����;���	�;����)~���O�b�-�ܿ?J��x������そ�ͽcF�(��r�)
�V~3��?���
_W�|�M� <�)���6������`�X��Ǫ�b¤
+\�V������Mb��J\�����fh�ku��@;f̘��8Pe�HD�@p
���Xp@�`b�@�Z�fL~��:��T
�k=�*�]?90î	��h5B�o߾=��
z�
x��_�
+�5	q�0T�٤I��o�
�{��
���	�Z
�(�T����
r@�!�_����
<�
�P�ʛ�Lh�(-�D�zB[,p����ܐ��<&,B�k������9	���_�#�0�@�D�23[\Y�fD�.��#"�*.L��xx\�"h336�6m�6K��.����	f�W3����q��Erͤ��_|���J�b�
B�� �����n�=z�}7���[1D��~�ö� ��m����'���pT/��P�1���)�L at y����#G�D��%O�:�t�?|��6�~�)�XB� �w3�iܸ1<s���Qa�5w��7�j�UJW��p�@��W�U�������5����	^Y�<<��R�k��!����3�=bF�(0$��Yo���/ܦ
v{^pʣ�����I�#p����0� #�0���D �����>d�M���?�v<#3##��
MK��؁�K���.[�هÆ}|���
+�s
��q�&I�7Y|$��
��w"��m1� #�0� #�0'
+/

�W���]���-;6����[>��C^�'����F�`F���$��Uo�ʕ�nS�/z68����|0�nL-��o��>�yM���oa��>��sF�`�9�1l��s�>��"E_?�B�=t��
~��[>���������|F�`F�`�;���"*�aY��K�u���� #�0� #�0y�����寬Y2EY�`F�`F�(l�
٠�H���vd�22�!�.�
+��r��^�.�uLc
+���h�ȥ\�^==��#�,�������
h�� �A�r�P��bE�.h�L	n��(��"�p�@��9��У믿�Ҕ�-Z��Fv�޽{S�� 

Б�`�<���3k�����\ �wƍ�Lj|���
+�F^�d�A���J�5���pFƆ
�گ��O��
.O�hA�-�� �̫�����z?٘��4~��/���g�}��,�0� #�0'g�>eWD9Qd�d9�/#����ߏ,$K�.�4�r!U��m�)��
e˖՝\�jUѢE�/���C�~�?��K.��fN��

��l6��
+���StPd2����Gy�z��K�.��H�ѥK�={���l(��4xH�׫W/]>.
ps��g��v�0@r;��2��ڵk�N�
��Y��$�/��r�QB.�`\�v-r�T�At�Nw��+o攡HZh�
�U���D�HЃ˹e˖���?��/��⊌ #�0���F@�I�1�(�2��
�� /WFF.X�R��u7@��
?�̙cړ@�[�n
,6
}Fr�={�1�]�v���kWۮ��
+�' _�	X��τ��Hԇt��(���/&��y�fX
+�
��a�JH\z�I�
 L �S!ƅZ�+��?X�x�
�`�-��� ��6�/�Ȱ�bH�^�r寿���7���|�E!bրBNr}G�
�74�vj!x��͙��ʛ���,�c����s�#Q����lٲ�^z)k��Z� #�0��	G�0KO
��%5N$
�B�
���ׯG�g�
;vW>p� �Ǘ_~�.��� ����n�u��nݺ��������O�d�k���
���#�*S�
�.Y�$
M�����;pV	�"Y���?;zfA�B[�Q�ʕ�%C`ô��N�~q���?�@�

�Z�-$;�)�M8����Bx��H at Z{�nݺ�͎puF�`F�$! c�Y��a�`'
�^��g�
6j�(�H�cǎ-[���.pa��Uׅ��̧;
�ۥN��� ���	�h6�/�%=��9U�U���Æ
#m!n�0��������a/ʙ&e�ԩ�~��D�! 7O������(},�e*T���c�S���߅��^\�+�C	�:ه�_�=k���֮Mn����������z�V��I�']tu
2�D���d�k,�`F��U�A0М�ʙ�CYX�cѕ�]�t�iyڴi���� �

̘Z�`�}�ꫯ�ܹ�C=t��1S�y�`
+��ͤs)�	0� �����
>L�y����3\2`_��P�������B0��СC�|�8x���?@�x�
�`!)��f������#{��ñ!����x�
+&���
Q���-������Sҭ�ފO��FF>^K�,`��F�`����1k����G���ܕ�nD�\���o���'}|w͚55��L���A�

oȱcǚ�jԨ��w;��㧧�D��S�SO=���7���,RC/��"fA
>|„	�����
;\�Z�L(��@Mx���O�x�
�`!)�����޽{�]�|yڃ7F�Ai�������8A'�$�{�� F�]�v�>�gϾ���&�9������Cˑ#G�p쇞�H�OF��醁(7tE�Ձ�$d`�`F��o(ñ���!����
hV�?"f�9܎��� ,dE���0D��
+�HF�I�&�^u��A]4b�С �6l����dA�Y�O�~�]�v�_2�/����f[�����sxyȦںz(�T2.=sJ��'GM�5�o9�٘�ԯ_��e�Q!�+��;D�qbŊ�Nx} `��| w�����k
=��QR�Y���
���v^�N.��`F�� �����>�*/�0�
_W�|�M� <�)���6	��6�x�:(&L�J�zn�9�$֞�ĥOh�O l��V� �cƌy����Q��b�����
� FL�
Hkվ}{X�<�����ӯ����zƅ(��� ^��
Co�M�4��.
 �k�d��	���GE��,���K��	F_��p x�$T��f���I
�чΈ�N���7
|�A���!*�����k�żF��e�pa
$�wF�`����-i��u�8<�`\F4�H�"�8"¯�r��
��̌��M�������IN:u��

�jťOh�5��O�����G(Yh��o �
�
+�����ѣ�Q���V�:rCI[pp�I�����3.�C!-�F�
��)��6u�ԙ3gb� ��G�"��Y���^�khh��»>G4n����x␃&`�5w��7�j�#HW��p�@��W�U�������}W��Ryx�÷
+�j!b
B�ϝ�r��"#�0� #��(e��"�\��V~���
6���3F�
�

2d��p�
W�2��P��9#�0� #�O��}?ͻ�qS�����
����Ȥ�G���6v`g��)��˖|����#���~�oˋ7���	�
��'�|
+��0� #�0� #�d
�b����d��G\Yd��O��l�˚rQj�pˎ
�Up/񖏢Cv��5}����0� #�0�@E�Ƅ�cŃ'w�?�U��Сy� <O	�y|n�FOn����g��vƹ�� #�0y�
��1b���6�n��!��|04Q6R����t��
~��[>�;�������|F�`F�`�#�
���F.�Lw'��a�G�YgF�`F�`��� �`_Y0c���嵜g
��
Ƭ'#�d�F��k�Nq1�=��O?�tT��R��~�^�v��P����v�:#�0�@Dt|e�"�=���n~^x!�"Y�z5\6��F�ad(�
l�'��"�B�z��T<*��rT��?Dv�3������q���$��{�5�2ȡ�Ԙl����zJ#��!�~�!���	����k����"�4 �ׯeD3�#�[�޽)�x >�C�����y�f�EJE����8_��-��@�^���&b�,�m�~*��v����d��
Xpu���,��*�~El7��,�
i7k p-F�`B���f.#"F�>p���#
�ҥK���0s�\۶m�
��([���jժ�E�/^
iܭ@�~�?��K.��fN�}V
Y��e�Q
�fapz�d�Aj4��-]�4rC SZ�.]���CP�!JK
�?"n��_0�W^y��A���H�L�x���I[,|L�-�����
+={�D�	J%��*`��d����$�����K/��-�O��..؝;w�"��p�eZ�]��_��Bs�UNV�9��0�@�F@��$͜iWD���������k�f͐�Z�3-�x��9s����:�nݺM�6�p`v҆���ڵӇ�\��_T�}�|��[�Jl���Ҥ��Tؕ�
̨0��H�GGQ�!JK
�?G��	�4�LjH�4h ��N���y�ĩ_�� �]���e#�2���H_XF2��#}
� �"�a���S�N���?��#��ы
-T��/��
�+�NMTM�؏������V�~��5jPa�X����q~'M���C
�l�O���h��p���_�뭷BO�Nq+�b18_~�e�c�
�'z?��ڭ�������Ù�;���n���8`'��
96�5�5oCǃ_�y?#�0�@6 =Vveŝ�E��v�������|ǎ
��
8 ���_�����#�8�[oݺ�[�np<��7��������M�w�2ePrɒ%q5�\B���
2G�p�y���;�� �"$bב��G}>
�k׎X��# 0� ��bx������H
�4ю�H��:��2e�y�!I���	�Z�W�/x����K/�o��ʕ7n
	�k�O�n��n�����m�П}��c�=��bV�T�ꫯ�
!���x�t���ڡz:���.�{��'_+� lc!
����x��`F �p�#�KeY 38	y�V�^�S-x0���5
+�X��v�رe�<��b��d�.li�lڼys���
��
�/�2����p���
�s�ӿ��
+�?�n\`�}���6m�91�P�N
���-�����҂�馛`���� H\�ra?7n����믇BT�bE|��'
X
�n9o�<G�^x�V
��>�_�dI�������O?���+W���0��g��w�ĉ��"f�&$x� �������l���Ox1#ep� K~��'�$@ {Z�
=��V��/?���t�˯]�w��'�k�q]c�<I��_�/��:̸ #�0�@|���q-r�E�Wn��iӦ�.6 �
B���`�}�I����رc�X��riq3��
�5L�f�9`N�a�� =
�\�&�
�p0�2|ʇ�+���C��� |�C��
�!��x�A�?��W!�#%� �Vh��?x|���WAJJ��
+���8���gN������
�ЩS�⥑ƃg�rH��_���U���_��I�@��
+�А
+�]$7�~�U
�3���|��~x�)���jQ��!..�0� #
�#�1
�
az_�j��$Y�=�o�s�9X��)��M�e� ��r���cǎ5���R'� ��,/`!�pL�u��'O
>|��	���e�
Apˆ
�}�]<M�Q� #%f�ժU˄( �������u��l�9��� �m��t�0�
���p�
Ղ�	\�
������*���3g������?xLѤR �]�L�v=��b�G�=QFH@����7:�$ܳwq�o�N��Cĸ
#�0�@V����U\�4����p;6�@�Aa+���!��
VJFbL:x𠮂�.C�aS�Jg��@>�
x�gAp�Ç;��͒�����8�٠�f��(�]�F��D�|�1�
+��pE7���G�ǥ|�,U
r�ˈ�
ٌ���	�/
L�ŧ�+��"��-NM�,p�E9$#
b�
+��
�2�૎Y�ݮ�
��n������

\2 U��-��+�_�t���8��+�!�w
��b��x��&\�`F g�qe�B	3̐�[�
xRb�>�W�[`�Q�e
9,؀e�1��h8��C����X{���
t��	YG u�۷/�;ã�)0�p�P������b�$��Y;��۷�ۥ�[�>>@6u����p��y���i[8k�q

���AA`���h
&2���s��
+��<�l��)oz8������o��
+�w
��;��'L
@C�i�v����K�֭@=G��G}���
�a3 �;.Mp�p>Ex�û�)��B�_��
�g�C:�<�,�������x�[8/%�5#�0y�C���V�,�TǤ�1c�`�

�0!?��Z����̌
�]s��1
����DM at 2�
���`�
��݅��� p
�t�
=`W�W�A�@
��n�o�N?�M� 0��<%��"ā%�8e
:t��
�B���Z@�k׮��m�q�ȑ'�x��MV|�X
&��s���~�
�q�=�C \t���� �qA��ڃ����5"<�N�~�z����{�	�� �U�	�����W_}U����Ъ1��N�Q醑!��ԔJE4�!��hʠ�4MD*�$Մ��H5D�A����t�%���
�t�S*��g���������}�9g�s�Ksf������Y���Y�z��I�w
<.ޥw<�,Q �ۮR��O�~fx�u䞖e�
��>3��ْ�>Y" " �G��Ϊ��3�-Y�w�g�A�k�����?�|�_�O3�$�� !4��F&�x�7n��T���%�o����q57��L#`��'*�}Д�
;�ܳ�ǃ9昿{�
��
�`�ꕳ����;C
2�
��<Vq���4o�����ѵ�i����,
�
a��V���t.�~���SfY
WQs�|(ol
�������l�e�Ni��P����Y�9Z�N�~h���.j�~��T�)��xbY
W�᫙�������禹ȷ�+��.b�0B��_�nٵc#�KD�蝖v���T-E@D@D@D���u
�FZ���&N��<,�nٵ��*P���_Z8KOHw~帵��s�.9" " " " "B��#�"���Qj�����������M�
��ïl���ͭL2�
.���r�Z$�֭#m%��x������_�;�ǗĨ�Tpn&5�9NA`s�yI�d�
ύ5jР�]�甃&$'��B�[dEu���oٜU���׮]�r�Jg�m����ƹ�T�~Nj@5�H�@���X�%�xT7�
+�

�H������@�X���$�=��g�ѵkW�����J�T`s�h�F7�\����)>GmۥK�:�2r�x�
j���#�_��'��
0�9ߩS'>ԹpU�s���4i���w\<E@D@D@J�����I4��!ԅ�V�$�ٖ-[R�ڜOŬ-[���o��3��
|<`���3�f�(k[�n���'R]�2��ڵc������N�k
+Q��D�~K�RI�
'@�t�c��|�駔��
��β䔗�o�
���J=(����z۶m�V���sb��ի�w�}x���
���������Z`�R��x���0�۷o�X=�f{��5k>?
�:�)"J��ƚ5k��0-�!"(�,5� n�g�>�g�s�
�4=��c=ֹsg\��l��������&M���
s�ε�x`Mq����;Oܴi����۴is�y�mذ��%���Y�`����C/�_��'�A9'P�vm�ر�p`��yo�b�
+b��FD���w�����E@D@D�$X�c0b�0"Fa�*���c��߿�(ag#��~�p��
�Z�r6�֭�e��.�q1M�8��K͙3Ǿ�
^N�6�@�1cƄB�7�\5� �_~9�a��Ķ�;.�" " " %N f+�Z�N39�`�W�
g�r�v��w_q����8p�����q?��׷�;H/�l�z�y��m޼�
Ī�4?1������
�̺��3g��7�\5(��o���kժe p�k�.g|�ƍy�a6g����
Sc�
!�#T��u뒂�3,���^�����^����^0������� s�C�S�N5����ƍg��cǎ���޽{���*U��2tm_j*�, %
�11�EÆ
YK*," " " ���;�����x���d��>X�d�ɯ�y���V�xeҷ�H
>|8�6�����
_V����H��L�'k
O�o���y��a�ըQ�H��%Y֌�l�sp���bK�"%�m�������ǝ�Yg���"�"�Q�E@D@D@��@W�(�2:]|��#F� �2+�H%k��d��J�޽�Q���.#�aذa~ǃ��L:;x�`Wcl�d��
^
z衦
;-Z��no#��
��xe�D1��f+G�[��C�K5�:	�H�=a��{x&7,���" " "P�d�9���%K���zFn
���{`��%�G�7�� 9�
+s��H� 1~gu4�s�;����`���9���}�>8X�z���E��3dȐ�o~vH^ڸWz�jެ�#g\a`�0:�"" " " " �K /^9�P�r�d��6}�kǙ=�(��lpp�®�}��[��];6�X�ND@D@D@D@J���n_^���RǦOv�W��GD@D@D@D@\
+��m�8[�D�D@D@D@D@D@bl�r��u��`����������@Fȳ�
����r�
+�>���X��'�`��֭;�(�gF�u�V�2�����%9�5jԠA�t��!U�i��?О#H0;�8N�ӧ�Ν;Ms
+���P��
F�Z��Aj�t��i��W�O�9ޫW/�h<.3FDM
+[�$Y�3r�H)_�9r�ڵkW�\i3v7mڔt6O?��9ͼ���8������d>����;�z��{�����={"��n4h�)M��c�Q�" �����)�W�jեK�:�`R��
���G
a�B>����?��G�q�
�(�9p���W_]�zujC����\sͶm�R�cN�={6�&��7.�]SS�G�
)�z�d�0�+�@ϵ�^ۥK�U٩��9�J��+FsTk�}G�mժU3����w˖-�+�|4~)cf��n۶m�v��qj�a1s�L�̘1�}���OA>�[�/�&ꃟ�.i�q���ꪫ(�:-<��Y�[��,��7.#��
���6�I���dʧc
��}�/�8q"S�j�p�B�ˌ�\ʈ������p���m�\N�����ã|�=��L�e�i����ܾ}{��{�W`+�ڵ
3�&��M�F���xb�588o޼�\~L�ɓ'����r��7.��޽{g͚��C*-jHH� �f͚�V [...]
6��]�0�vذaʉA�x�G�
ݢE�P[3Q{���ۿ
{Q��7�s�9�bŊ���w
+	��C�����C���7�D5��k�F�
;v}��t��
��������B���
~����iժ�����?�,޿?Ѻ� �
+؂�D$��iΜ9N�p-O�4��΃�v<��3e�o����J��n�	�5�ʘ�ab|�ʼn�q-;%�
}�i�P3fLa�
=W
J&S�T�*%E@D@D��p���/��r��=ʎ-�s�~��������w�}7V/~܁ڔX՘�'�7ùB��������{�N�5i�z���_�h��
��e�'ƍ��F�Y�� ���ؼy�U&`\�a�D9c�����-�߰S�~Fؾ};zԪU�hÝ!wh��!r���W�"�=#ԕ" " " �r��l�������^{��?���{I�Ff�^x�v����Z5~�c�fgg�޽ۊ ? y\���
1���1"
'��I'����ߧ�l�b��`�ԩ�H�L3KhY�~
9p�^<��qLl��a��tvMT�T��R<����p���.��o���j6c���-ie�W&=
��Ç�l�K޴
/��$�l��.̒;�l`��͆>'�C���n��8ѯ��jɒ%�>�(��и�D9N&���{�=s$x\F
�F�ղeKg���~-�2p;4}��~���w��-�.�
+ƥ+�<�f���AD@D@D �@�B����.eֺLl6"(8�
qX�ݻw7�\v�e!�h�P
+L�6f��zQ���]0R�ap��V|Hԧ^�zT
���	�����_9J�r�
�
�&�
��C�^sW�GD�5_K
>$�#���	x���d�d/,{-u��" " "Pn	d�=�!�����X�����'��~qT�����@
+���Y:ED@D@D�0���;���)�;vعgߏs
�1��;`�9��:�+gg/�7��!}3ߥ��--�7o���g('�X.̰t���������d��B�y0�('��aKJ
�ڵc�v$%M�E@D@D@D@�
�e��l�I^�r�x��KĦ�v�q��Js���VvX���P��M
��I
P	(��\�t/��x�|Xͥ�2Jg�� �e,W�N'S�(.�d���������*j���ɲ
l*����rnO<��[��J{��3�n�JQ����TjhԨQ�
�:#��/6
ȅL{� ��<5����g�Ν��9�2xN�~�ІJ%Ta
5P:u�`�������^�z9_�m�|�
�ҏ�߸���9V�����ȑ#ɠ�r�J���iӦ��y��
�j�刋�*" " �� �e���Ϸ�cY0�ɄA=��={"��n4h�����c�Q�b
����)�W�jU�9;qaR��
�����5�1���y���q�
���9p� ���W�Nm�w�}��k�ٶm[�
De5�,^��}gc����H�|�)�J��:@5�|
`�sWF��k���K�.Vg��S�&� 
E@D@D��x�i3_��;o�:�ﯽ������˃ᰒ#�_P��輭Z�j���}�nٲ�re�q��/e̬
��m۶m׮
;N�0,fΜɑ3f�o�2򩓇���_�>���+2w5﫮���y�\�V�Z�9ꨣ�w6nݺ��
[�|�)�J���Y���9�1�X(�ǽ�ĉ�rVۅ
:_f�(�������UWv�������^z���&a��K��~eg�눆�D����w
�{G�
�
4�w1�۷o�2|���
+l�]�v�o��Dɸ�	�0�ꤶ5j�~޼yI��טX�ɓ'�8RT�&ߏCZ���$@�M͚5W�Zet`��#��u�{v�MD@D@D �x��c0�ҺI�&���ܹs�;w��K�&q���M�֯_ߦM���;oÆ
�{�[$n��
6l�rb'^�ѣG�h��]�z���ܻwoԠ������Kj����sNŊ�ϟo�� ?�Catӹ�@�v�ڨ�c��
;��v�#D��?T�" " "P	����_�$ib�fͲ�<Z�je�����1������%� [Ӂ�d�6͙3����I�&��y�ؾg�y&������S�7X)x�M7�&^�;LL���q-;[$+?�Catӹ�O����|=�������Ia1��|�[�H�<�O|'�s�����Z
,�����n�^���)/��1�O�o,ns�,_y啃>��s��a��l��կ��:�ơ��O���O�7��
3fL����S$�c����6I��P�tn�ؾ};:� u6�
�Cs���W���+��Ֆ" " " l-������S���k����{�uב��^�ovp�b�?�رc���w��m�"? y\%��}1���1
+y!O:���>��g�/f�
�N��I��P�
�N/Yd��8&�Q�aÆ�|�S%�2ȦBn���S������@�$�3�Y��Sп
���*{���o�����wKZY�I��y���8���V�\��
/$�1;��
��$X!f��ω��l��n#N��Z�dɣ�>��:8�xS�]�c�{�g�����s\t�w�|N�
5�aӧO�ׯyW����"�`\ڲ��sk�J������@�!��;Ҙ��o1X0W��ҏ�_f���f#��d��J�޽����.#�E{�R`:X�1;�Ջ���ڐ�
��l��C�>��գb��7�L8���G����ʌk�~[�l�~�
�&�HV~(�q����23w��@��0�|�&L���+� �$�
�^��x5(K<�߬#�h��%����}��3�4x���F���k,"P�liƢ�H�E@D@D@,b �ht4�s�;����`���9���}�>8X�z���E��5��!>��g1iq���ޭ�5k�W��v�k2Gp,�*���������@� �,8��##^�/7-F���(lZh׎��Q�G�����������p���l-�����nw*۴Ю
W"M"�rN 7^y�|[H/���x兓�*�h4|�b&���b��D�
H[�����s{���%���n٬y<^ٺ�c�H� 3
AD@D@D@D@�A��+�JNN�(
�>� �"�
���#�=lڴ��Fݟ�i;;b���(���ߴ��v�i�PE@D 5	y0"�1_���'��u��Qi�}F�֭[)�@]_�J
�5jР�]Bg�\|�Ŧ�����p�GsJ�>}v��iژS\?�~�ОJ%�Kf
5P:u�`�������W�^Η��O�K�y���o\�=Ga9$r���AO=]���b�0�JY������^zi�)]���4/�~��_~��U�T	�y��Ҍj/�1O
W�~��K��Z��]\/$�Ԯ����$�c��E[��X��=���e2[Ϟ=i�Iz�
7
4�ԑ~�Ǩ�۵kW#g����Z�*���1����
�P��Y����<���ǻ�;BY$�s���	W�^�����5�\�m۶`9��v����;S�U�G�,�gۈ���8�0b?n����;5�$�
����o��"�S����.�~+V�x��G��dm.�(D�2���"��Bw����o�\�(
+�?�
%PD@�A 709�V�
H&Z�}�2��Z�jF��}�R
�re�e��/e̬���m۶m׮
;���9s&Gf̘��}�ȧNހ��K�?7~�!C����}�UWQ /����=ꨣ\?ϭ[�v�a
�o���m#�J�㐎����ͳ� =ӥO����[oq�رcG����'z��PW�~����4i��eZ�C��^Wel�|Nٿ?�J�?���:w�q�F#�\p�3���O�i�{��'Ǟ���t���o����i����ܹs�X
+�s�MeM��soi�s�i}8�2��7��8���qy���'�<�K�ah·KɎ�΢����
x��r�/n��={� ��￧��
/�`�����'f��=���>r�H�
<��,s
D\�SO=��{���>v�z������Q��d&G
F:2��Ľ���(�ڣG[��c�b(��2|���
+l�]�v�ov�h�&�W��V�F
�ϛ7/����1y��
ʃ�m����%�B\܊�ߴ�4
+
7n
e�q+�y��~���~�3fL�ڵ]��(

8�g7�x��-�|
����H �[��1+B����͚5�@&�&sܯ_?9�kW���'���믿ަM��~ؾK�z
ڼ��;O>��ĉ��.]�x�U��ˏv���q���|O����=\Jv�v\������QS�L�������۠>������#���?�!��
^�
0Ox
wY�������g�y�(�ꫯR����^�3g��O?
<�=�	����#/�E@�*��
+�:}�k�4i����p����Ƶ�v�Z~�-8��ׯ_��y睷a�ܽ�-<a�Æ
�PN
I�6z�h\n*I�$���ۻwoԠ����/\��0�
������p(�n�纸�Я�ݐ^�ʼ�e˖}��g�^{m�H	
+�>�׿�5�:
�$>�������w� ��\��b��)ʜ�e���Mc���L��ܵp�G���y� �HK
W�����‰�C
�"�2�w��J��%�`�����gX�߸���8.�~����O�{>\Ja�v\Q�^d��1O�+���@���e˖Ln��>���~w��g��=�����f��LE3����>
V0�p<�E)���Ia��]b
����b0�	�8O����C4����Y��\g�/ �^5k�$"�iӦ�"�Cµ��g�:[��|�2k�7O}�Bǿ��G?��ab���֭?B����P�칞�R���
5jTZ+?BpRb
:�����
o֬����bp�۷�Ւw�u�����Ė+W�d�6n������Q8-i��o�
#9q\��'�T�^=��M�Q�;g��3(,�Щ�7��8G�^�O�ߏ��2)�׊�2p$3���Ɨ�q�}�v&q�]wa�r��w����qap��W��R{��aD�n�����	�j "  [...]
��U�reN߻woD�~�Jv*�]G<漬Ɏ7X����A��`�|�㼸��[��?t�ޝGƗ�ӯw{�7b���D�f^y��9�%��" "�n�l��|�Z$*$U��_}<�f3�/�ݲlW_�8��ί5�X�@/��B�Q����0K����$o��ω��l���E}��WK�,y��G1J��
�錅x_���\	\�����OV~(�q�!q��gFh��E�e0>�yp���V���?��OL�18%peY,��A�A�N�ó#O���"�����g��,�>}:�
+8�'
|
'L��Z.&�]�efTb�~r�G;q\~r��9(�+\t�E���\&t��g����׋�#0.N$i
,����gN��3`\��\��눶|���[V��#���0pX�`>����>#�'D��Џ�
��_��I@׬0a�2ӐIđm����+O}������b `����q�9�`ete!��f#��#��a%�0#!
+��
�R	�`Ɏu��Z�(i����
+��l��Y�>����©IJ��74^��`
#�E0�'*�@l`e��C9x�

��G�1��F��f�H
�� ��ْ;C
�C���Js��UG�
+R%�m�` ���ٗ�|Z�����LR0
�p��O=���E�*bE���ׯ�
����SN�x� �f�<���GR���zq}$�ʼn􎇞up�kD���o\��\����W"� ���
+2B�o@��,d>� �!�~�)�P
<l�aժU�<�zg�b"�CG�N��U�>�%�" "P�1
���w,g
uJ�eK�>���5s�����#

�`�SE��d�@Y%��)L
#�*�t������YR���[Y
WI]|��AHcb���J���+i" e��]��8�t��a�}?
�9x0��ݻ��� �T�����_
f?8d�п��"�^-�7oV A<.L��\�/��&	��gͦ�HQlE-�O��(:e��q�v����J�����@Bݾd���K�b�c�B�vl֎b�%��J�����4�Ón�y��Iy(E-�O���7ePO,��*��G�Lj&" �H 1
9�<*�n_�q��8�4ue�B�v\�8��[�Ŕv��ODE@�� ��<�,� ����/n8�Tsn���E�xe�P�������$�P�e2��VD@D@�C }��s

�W6i��L�rsg�rR)��3<I��!યdc0d(g�5�&" " " " �L �K6�r<3\n����3b)�b�B��I�g�fS�R�T��# G))<��4&��铜ǧ�vG�q	1
(I at Q雗�c���/��,Q�'�x��ks�f�
 ��5jԠA���)�
��j
����&�����b���.s��w�ȑ��Z�r����z&�ӹ���3�x�H������@�!3�ㆲ��-�3.�@����:a�m�	��n��
+V/\���������/hCi
[���_|�E.^��}�y
n��A��°��?�3�v�|���C�l��t�x.5��jF=ޥK�:�5r�x�
�����#t~��z��=
a�R������^ۥK���r&M�d��;^��hD" " "��r-�<C9n6Ƕ�<����GI���6<j���*�2����R����o�D0 ���Kʽ�o�s6���9ꨣط����K�iJ�Q���T
%�TƹF�u���I<
��bi�ڵc������N�0*K{=`��7Ta5(c�M�q�3
+�q�G�eg�_�,þg�
;|��e���#" " M��;9�T>�B�9n%�F_
r۶mTL���g��a+�ڵ
?n���aU�^����ãL4����t
+�1y)x�
+�F��0��ij��޽{g͚��(�NuJ9$��a͚5����C�O9�!�����@)%@��A�O�C�!���^�פI[c߾}_}�bɐ�	��5j
6
�J�*�;w�˖�O�;�6��S��s��Sx�My����;�lڴi���mڴ9��6l�`㒝r,X0~��Ю��
=Q
��ڵk3�
;v�q�����Z�b��f#����x�ሀ���@� `��������`X�Ga�y�u1��

?�e�4�ڒ��9�����m
s�YNeZ�j�lܭ[7\��#�]`�b�9ͺ�9s��w���iӦ�1f̘PU�
=W
���/��e�fcb۱�
/Wp4X�,Y�Q� ����bé_�>�b�eeeիW��ƻ�]y啃>��s��������?p��(է�ʘ�i��.p޼y�7o�G0�1�O�o,�s�,#��D9�N�Xo��������۷3
�ƝG�x��7��lΠ ��e��#" " ��@��l�Ņ%�
eݺuI���kN�����~��>���{w�mdj{�
+��C�S�N5BHB�q����رc���w����@Z���+�b:�, %
�11�fP
6dmhY��"" " �@�V��*{��
<z�h2W`7,Y���W�����N�^X�/f�>HzZ�	���<|�p�
؜�
_V������hQ� �
����A��¬Q�F���oJR�����~��*�C�j����������6�B���������@� `��YYy�0�����L��#F�Y�u��C���+���G�R�
S2�a%���l�]vA,
+
&�LRK���1��M�A�/�{��-ZXw��C�^pW�2q��f��&��-�D��H��K�8�sO�0����
+#�R3�L �u�)�\�t��%_�*%W�Rg�̛�d&�'
D�� g\iQUz�����@�!@,��X��ҹc��{��x0���
�w�v�
�S�rv��y�g~p��o���^�ݢy����H�
2
DD@D@D@D@�B����LY�L9�"-�	���];Q�d�r�@D@D@D@D��p挋�"���3�\���];Qk��
���������9��Z$j ;�\�"��D@D@D@D@�%w-�r	A�m�,��	����������@�@�V���dX�
�>���XԴ3�~�m*z̟?�}�[���y��?�]���=��VN�^��b�
r97jԨA�v��S�!�
a
��دf�D$@Q��#G�]�v�ʕ67�6mڔ�6έgϞ�#v�f" " " EM�@θ�[99��

{��M����;/�������mư0��ٳ�nݚ�����)�W�jեK�:�5r(A��
=z�*��o�j 
��u�N�(�s��v�����Y�fҤI�-���)" " "P�b��\�qtc���>���
r�%��}$��;:o�V���ߺuk�rhT�k۶m�v��q*c�f��Ԧ-%��o�(�e� ��1�yB�ŋO�8񪫮r��Y}Ϟ=�-��e���#" " ��@�xe��
n0���ݺu�ӧ��W_]�#��<yrNN��S�a(�o��V�v6ػw�Y���a����� z�f͚�V�2Cf����3|�TD@D@�$���p� ��ݻ�ر�U�VEĥI�&���ܹsm/<��X��	��ۦM�֯_ߦMBA6l�`�i`�,X�`������z��s�k׆ 
+Á
Lg�ي+��mDY\~��9O
_D@D@2�@�Z$�p���]tQ׮]������	n`[s�e���Ƶ�씸
l\L�#�8�uTs�̱�"��ӦM#�c̘1���z��@ ��/��������;.�" " " %N���q91x�_���o����Z>�����
{-�W�~}[s���.���͛�y�f{��|'�7�9C���A��Yw5s��P����������~�Z�
��v��匏߸q#=��
"�;^�aj�" " "P�b9.�'���#0"�c`<��8kW�^
0
�޵��XՄ�K
E��C�S�N5�^�hѢq��?�رc���w���_�JZ���KY+�X�	�㘘xáaÆ�%-�L4|(u0��s�$sĹ�{�W@|��8p���f���:|B|6l�4�=zt�s�� ��/+��{�=�#>f�?/��B�<���-�A��B+۵l����v��l�)l�����-��� �aӧO�ׯɼ�:�,�y���+�ֻ:(
+
I!":��6���{����/1X�FE�S��b4���+�`	��?
:g������c��r�)� ��A
�h��f�0rۨ[��+^٥���o��jP�	

:��q$�0a�=<��g>�����d8�<38�
��ɩ�\�t�K�gT�N��y��̝0"�#�D ��3.��2" " "P
�7�t��a�}?
�9x0��ݻ��� �T����h���y�7��%�y�͚7��+'���<��E@D@D@D@�
��+��}� �5���M�������Yu'" " " " ��3�rI���];���t!E@D@D@D@D ����Ļm��4�ɮ�KIS�>ٵ��0�$" " " " �"@�õ
3�
��QK�J�," " " " J��]��ʱJ%�����"/�ۙï�L��>��
Y��Kԙ�
�5j�]�g�
w�q�էO��;w�ۛ�fϞ}��Av䧞z�#�N�~�m*�̟?ߏ�������OX9�z�2'�f��`��4��5&��<�����⺾��Pg�ȑk׮]�r%�ŭ
M�6%��s�ٳ'��
/��c(�
N�\c�]����˗W�T�jժK�.u�~���1"����>��;�oy��&�-��r�7.\���g����Ku�w�{��M)�����a�f
k�oݺ5q>��LP#�G�
�ɯ��ՠ�0` 5�;u��Խ��k�t��
���
�y�[~�K/i." " ���1��Ne^z�W.��L��m۶k׎
'�#�<�裏��
��-�G���>�(��UW]�+�����v��ھ��
r�%��^	ӯ٪U�f۷n�ڳ�Z������6��q?w��o��jPJ	P��g��[�x�ĉ��α8˶�ٳǾ�w��r��" " "P:	��_���H0�S����1�)g�4���p9�am���۶m[�j��=A���ݺu#��ꫯ.̕��<yr��:X��{�Κ5
�!�Qaz׹e� �u5k�dꚡ�C$R��F$" " e�@|_�U|�����Cٴi����۴iChĆ
l\�e�e˖ѣG�h��ؚ����+�:��c=�D���w��ѪU��שI�&���ܹs�Y<��X��+�9@+g���Ǐ�ݯ��ՠ��]�6�39���`:;�V�X�.o#����x)� �E@D@D���-��5�
�ʱ#qGs|u_aL�X@6"&�G
���9s�XX�vd������;���~�/�袮]����9Q�n`[��ea�Ƶ��rδi��3fLh�����e���_�rU�9g���2	A���%�g%�MbW
�<+�P�2#�*e܉�ErΐelG^�^����_?�
&������-�]N��チ���OFa]�~}[�4�S���͛�y�f{0@�0(�����9sfh�����������Q�V�ZFy�w���k߸q#[��
��;^!Hg(�(G��
.n���/�p�$uڢE�ƍg��cǎ���޽{���툉���v�׾nݺ�f�
w6��<�s�;uu�r:t�0u�T#$X�Q�*Uh���0����H��p� [...]
+�5y�=fc?.�p��߿?aͯ��
+�ǒ%KL~e�v�WpL~�_Ng�k��SX�G~:�2X#�[$�#5�3���H
��N�2<pn��O�ޯ_?����B
n&p
��&" " e��#"9�"�O�P!+��[��g�Al6*/b��p衇���a
_�{8���_<b�2+c���Ӊ;l�0�>�����:��
<���O9�s0X#��
�ޮxe#-��h�ժ�:t(	�H�=a��Wx&%,eC��" " "Pn��139��k.g
sj�eK���-�Cǟq��A�>�������@E�P�W��u������@��A�;���)�;vعgߏs
�1��;`�9��:�+gg/��`�Ї�
�s�Q�`�!S{6kڬyB�ं0�����$��YٚȎׅ�WB���];T<)!�ԭ�������@i#w��}v���y�m�F��M��ڱ�ӥk8�VD@D@D@D�D+97F\�\����_�(�r�6}�k'e�:QD@D@D@D��01
u���WD@D@D@D@�r
��忰y���9j������������#�
��Tle[�$8�|@z,R p?���8B�>��
w�q�5�ӧ�Ν;Ms�n�č|����v�x�^����%����`��
�%}N9hHm
+�8ϥ��S�~����P
G��;#G�\�v�ʕ+�8n�5mڔ�6έgϞ��w�pZ�l�B�
YΕ�o+0�#�ߺu�_|ACJx8+W������?��G}t�
wI~��/����ŋُ ����lư0��ٳ�:Q����+U�T�jեK�:�5r(AM�
=z�v��o�j 
��u�N�(�s��v�����Y�fҤI�-���)" " "Plrb=e�Y9������%�V�`�̙H�1c�v$G
y��GM=<�[��#�jբ�QG
�~�a9f�V��=�u�֞��0�۶mۮ];v��
��QΚZܞ% �'�Eg�)�({�q�3J�qO8q�ī���	�Y�|Ϟ=�-�����." " %B ^��a.�<V��6�W\���k�.���۷O
.^�!Bm�dA`�N�<9'���?�
CM<�j�ݻw֬Y��0h��Q�E 
+"�j֬�j�*Ә
"����6" " " E��`�`�r2j���F�Æ
�<�R����-[��
=�E�)ۦM�4��E�Νk����bŊ���w��iӦ��׷i����۰a��K����`����LJѯ��ՠ��]�6v��a8�����+V�X��dq�
/�<5|(f�q&#�
�ͯl
�$��e�.��<�ؚg�y����͚��6����H�V��B�u�k�y��
��4!r��Rs�̱�"��ӦM#�c̘1���z��@ ��/�����O�m�w\0E@D@D@��@�b����1[9z܅K�+��r����{��8�&���ի_��N8!�֯_��!��SN׮]�͛�y�f{��|'�7�9C���A����6��[@�a���rM`������q�F��3i�ƍ<�0�3���x���������@	�u*;{��2��
+�EҮnݺ��w�����Dvfƈ$+�F�#
:t�:u�9��o��7n��C�
;6;;{���.���2����(��e� )�0���7�lذ!kI��56(��������9�>`�I
��
p�39@���
+���{Ϝ�����
/�����~h�w�
Z�5�e˖���5k�`͆͘8�[v��FVX܆M�>�_�~$�&
��_y��
+��" " " �F��
+v�W���UR��
����u˻X��G�3�,�
�S�EN9�s��
^Z�6;�)��0�
�6�╉Ű6��
�o�զ�:t(	�H�=a��{x&7,�p4p�|�0���HV�S/[����5�y��k�?���7>�ey�B�@�	�3.�2%PD@D@D � 1�~
��ҹc��{��x0���
�w�v�
�S�rv��y
�<:�'��
+��xҍM�l����(X�O�ED@D@D@D@�=c+�()�Pe�6}�k�
+&�����������@��a���*�,f��T��];��Š���Dy1qC9w+
K��Cl�d׎����������;gq~ݾ|g�s�_��E@D@D@D@D P���+ڢ(�e�P����������D$`+���+�;���ٳ��n#�q�F�
{�1���> m�q�
��>}��ܹ�yܼ�����t�}�^���������_l�s��
�8��|?U�>�5r�(��
4�K
�rЄ�p�y�r�N
���xmԬ���ȑ#׮]�r�J����4mڔ�6έgϞ�K/i." " e�@B
F�E}Æ
���믿>~���^z�Y������X|���?��;������y�1�6{��[�&b��_�R�Qj�Y1�O�߅I���˗W�T�jժK�.u�4r(3A��
=z���~COT��K`��Ը�ԩ�߯���.]�8��,s3i�$������A������@�!��
�q�n�����Z���~:u��:�
y�G}4��l�<z1��V�Z5K�u�֞��08fΜI�3f�o�����$���i޶m�v�ڱ�i�ގ��' !x��[f���"@�t�c��P�o���'N�ꪫ�m���y2c��;.�" " " %N�`
F4�2��	�hذ�ў�իW'��,a
�6%���ɓs��Rp��+��w�څ�}��)��C��/�=�2=:
}+d�޽�f��w�aT�O
+d�qj֬�j�*�;D�d��RFD@D@D YN�/^�:���۷ӪV�Z�-;��.�x˖-�G�nѢ��)�4ibk�̝;����+Ο?��3��jԨA�fk�*U\�&��S<�~7mڴ~��6mڜw�y6l�q��r,X@�I('�~COT�RJ�v��h�c��?;���{�+V��ۈ���;^J9Hm(K
��yfr!S���3�ܿ�Y�g6ܱ��H�V���u�k9+�e�:��|�O��UI�_�.���C�4��̙�ԟ�ӦM#�d̘1�� ���sՠL����/���t�1�
/�4((]�_9�C9wh.�Ne,K�?�F��$*��'�p��Q�~}[s�tNL]�v�7o��͛]쮼�����{���~���'�/�<
�N�o,�s�,#��DW�m����~�N������y
w\D9��lܸ��fs
�
/��������Z�`�I�g+Ǐǒ+G�*��q��6���L�w�61&�3sE(1�8:t�0u�TW˺u�O�U�4Y�~
+��%�i�ƍg��cǎ���޽{��tBh�
:j5(c���8�����g���T���J s���[�VN§
k�
����-�k֬a�
��]��<�9�'���{����{�~�mEz��
�����A�����Q����C�V��l�sp�E1R�,Y�>M�>��0$�&
�a��KV7�." " "�
�<s�`2k4�Y�w�}7	�.��믿�ꫯv���TřD��
+Wl
*�$7�h���K�jX76;�M��0�
�E�v�╉7Ű6��@�o4�ժ�:t(	�H�=a���x&C,eC��" " "P�	d�;���e�����x�Xƅ'
>��A��:�|���E 9�&%w�Z������� 1�~2��ҹc��{��x0���
�w�v�
�S�rv��y
�
{��'��
+�
rH̫<�ƦM�6s����������ʅ
����������@�(
5l�f��P2���\�Z$����f6m�kǕ@�4M:��������� ��Z$�.JY�M���)A��ZD@D@D@D�
��N}Q���2p	4��"�o�W���QWIʈ��������,��k'G1�?���c�
w�q�5�ӧe��0�q�f�S�δ1/���
�����㫯��
�B�{b1Q�N4h`��Y9�|�֭ۊ+�����
#�
�ի�KO�2�_΢��'l!א���U��@��� �kF�
�v�ڕ+W�L�Hnڴ)m�[Ϟ=��E	($
c�W&�rl�.�����"|���?��;�Ü�a|{���_�x�y,�ș2eʎ
;n��&ۘ��t6cX�m���*U�Z�*%��i?cƌ&M�PSp��ա�?{��[�&�
�/R~����)�z�d>�p�שS'j�_{�z���4�&M���;��㕆" " "P�	x䌋h/y�G}4��lq;��ժU
pG
u�y
��iܸ��ߎٍ�ִ7��V�Z5+��zm۶m׮
;Nɴǹۿ�	�
=:����oݺ�g���~ѐtu��Ƶ��O�~CV�
'@�s�c�QP��Ej���Y:˞�ٳ���x��Wꉀ���@�#@
���ֹ�KC~e\��C�ڈ�4��x�����n�]��ܾ}{k����Vvvv��w���99.P���w��Y�f�S
�?e�tb� ��f͚�V�2z�C�P��,�D@D@D@	8-f�a
�X�
޲e
N�-Z�ڈDG�Z!��������m�6�a6۞w�Νknڴi���mڴ9��6l�`ポ��ˋV����|��@�bŊ���w�
���Y�`����C'�_��'�A��]�6Jd�d���� �~]�FĎ
���
���2O �9u�����<�����;���Q��jj��5�ن�o��&񝘧�}��}˶�V�Z��B�/&�G
�z�9s�|�<�i,ĵ�
�/rPcڴi��3&T��~C�U�RM���/� o�Sc��w�TVʋ����@� �h+G�*c�aA�����_?�Bqԯ_��
+�W���1�q*4褓Nz��'�[�=��^�
�nf!݉��v��e��2�ҡ~nO�FB׮]�͛�y�f�L@��A���۞9sft�q����O`���(i��ٸ�۵k����ƍyb6g������4�2L����W�F�Dƿ�F�~����uN~�i^�hѸq�z�ر�%�޽�՞�
bB
+��N�
�N�j�D�J�*�
��(�b:7�	�㘘u�dÆ
Y��
+K7�
�R����cǎu��!y���L`
b|�Dy^x�'�7v�7sж���F��s��[n	U/Q��V����{�Hh�x�Y�ElI˖-���5k�`-�͆V���d,n��O�ޯ_?��|ۯ��J�j+�D@D@D@�83<d��̊:�
���"#���� �
z�;��m6
ړ�vٲe/��2�4B/�|�)tt�)��#���M�Fݺu]��ġbЛ�V��7Tm5�dC�%a
ɶ'L��s	�䃙��tp�:���ؗϭ�I�r�_V֯�6p����u�`��D'@θ��RD@D@D -����}Д�
;�ܳ�ǃ9昿{�
��
�`�ꕳ��[0g�#�����_����ٴ�ۯ��*��AH����������B�1e�Z6�7�MD@D@D@D@\r
+�ɠx�_*�.#q��i�QE@D@D@D@J?��
�l��R�_"��9q+��O#(R��rY�+)?	({\e�d+��K�ej��2�
+5�jcN�d����?��fK|7�^�^D@D@D�E �
�EHr�̷��
+����:X6GM�/X� y|�i��]gd��?����ի��q�:��ӻu�b�
+�1��s$T| }r�
�K�\]���z��
#��㎣�>}��ܹ��
�*[�
=���+�q��O<a�Ϟ=��
. ���O=��9�7.?=���ٳ��n#4z>��cN����I(�u�%>wec8�����d&���l��7�r��|�������z���\x��w���m۶���q�֭�����3f4i�䷿���իM�?���$�,^��}�Y˗/�T�RժU�.]�ijz�F���?��G�q�
�
s���;v�馛����l��6ǩ�G��o�q�
�>���G�
W��~
�
F- at J��?���^rև��
z�� �	psH�H�_��)�D@D@D�,��6�׭[�tȐ!��=����*
+ԅBiݺ�g�#�<9������F�
m�
}�ѵj�b稣�b�)�*zm۶m׮
;����'��#u�
`�ґ9޸q��o�
3����
7�}2�裏b+C�0��9%`\zzr�k�cj)�G8��`�8�^ 5(<&�s�=��_�Kc֮]�������á%%*y�k��ѹsg�(������

x��+W2�F�
I��ED@D@D@ �J-�5jp�y�"ȳ�ɓ''F�X!�۷��������Lc�!�yVjzZQ����Y��
'���^#�B�Po��V���u�XL�d�$\���
��ٱ�x^�r�����@�xJ�_t�E�
qc%�s�1�\z�ݻw�/�Q�¯��J��\{�
:t�q5~g
4����	�O<��{�7T�������D!���>�v{��M8o�6m�f��s�9�������Cݲe��6u5޴i�9�=��6l؀{;����4�'w�-�ML��٧�z*���1�9n��s�r�D3{�Q��&Y=�o��Y��nv0�-�P��R�d	pσ���#��]�� !bo��#�8��u��8��'?f̘�]��
+'�f͚5Q��E&�s�2]3o���P�j " " "�@*�2r�OX�ha��v�›ec'���
�r���w�mZ�fM�
[ϙ3'XZ
+zۗET���w�՛5k֛o�I2��w�}g��-wҪU��F���
�sj�(�g�D��U�K��ԯ_�;.��
s$��=+D��H�\�2�,0ذ�	�
�(�K����~�I%g�E���ܸq>� �2���9w�ÝF��<;��Ktr�
�UJ'���BC��(Q��!b�"��V�a����78��ޝt�IO>���-wb�D�ի�_�]��E�K�v�Ne�
�܂9GWI-�"_�)��>++�K`����%��f��l�>1�*�ԵSc���q��a;~���� ������5�vt��� �r�ԩ�׃ b
.��8��΍w�ر�7�޽;�յz��&�D���l�MC�
��o���O��V

��;=TO�
�
�Čb��d��9".5K��ƍ�Py(aNd�
���/�1G���˻����
+QWw�=wh�Y[y߾}�$�޶�]��p�ٱ[�m����^D@D@���	�C3�
rY H�K5\�K�,!�ù瞋_��8K~�y�L`Q�.���ɧ�<��I
�#fΜi�<��X8���4�k�H�����s�!�bA��Pf?=
y�;v�X�N
��9菆f��;a�
�l���ͯ�9� ==ۃ��zć0^�b'N�إK�P΅
�N%���w��n���͛���)�Z��vX�͚5���I��4>&�X�ԅg/�W��
�h��>g���?���F��'?11�ܩ2��fy�Q,�뮻B�Uo�{8!F��9�d&ƀ�x~�	�������+c�M�4	#�$�."T���w)A.6*h8��j&�az���/a޲5H�ž9Hh�۠v�C;ݷ��À6۝w��g!g�r,�����菆f#
�~��c�9ʻ�8ۅw��
+�ӳ=�1�HG��믿�l	$�
�\�Q��(�u�Ɛ��m���SH��m�[o�Ŵ�]s�ă
\�-	����]�1�yû�<�}�����KH:پm�?�A|h�
,I�����24���I ���c�>�I�@��.����g��m�O@�D$�O7bK5H�����>hJ�
v�������s�߽��}p�N���ً�-�3쑇�x�\iY��pS�3�6K1F��'9" " " " "�q�b,ʣ�l�!�v�: 㦩�%�k+GX�W�j��s�ٵ�Lo��%LD@D@D@D�T(�~e�ٵS*/��(2��V.2�," " " "PZ	x�Yx��a5�J+�-" " " " ����|[9��e�(SU��q�!;�
蒄��͢P��޼$��a��3����CYf���e6�k8�Ӟ�t=z��b]]8;��TǦ�P
ͨ������������p�׼$�2�mР�]2蔃&$i�� [...]
�$�xs?��L��+g�޽�f�����>	,$�ej֬�j�*#�
"p
+)S��������,4�\&��w�ބ
�iӦ��
.�>�-[��
=�E��FlҤ��	2w�\+�
?��S	�0��m$�ø6lfk�*UR�Y~z� �bŊ���wJ޴i�����s�y�mذ��%;��=~��P}��
=Q
��@�ڵ鑐!�/;���{�+V�L�lD�X������ND@D@D �@��Z�(-ZD1�Z�1C����3�ܿ�Y�g6ܫ�&H�V����|�M�>1C���P�
p-
������ݺuõ�N���T"B��[s��q���ӦM#�d̘1�*�z�dB�.���X���g��RFD@D@�'�me`�]&�`ܸq>����<�	l1<l>,�իW����D9[���׷5AH#�<�SyРA'�tғO>py����+��r����{na������ڵ+)�7o���Y�wb|c��3d9
$ʙ�
H
��v��/V۷o�?�Ɲw��X��7��lΠ
��Ū�:�"���l�a�~����
$#�y��Kؾ�'���|��6E�ˑ��Er
�k�?���/gխ[�tѕ��<�С�ԩS���X�t�.���ǎ
����{�n����2b�vD\jV�H	�qL
�ѡaÆ��,A}Ե�����@�X��Z����LV��n��\f�=^�dɣ�>���.�0����֬YC`Ѻ�*:� $��ޱc�:u�<ΊB8V��N��P�\
������{�S�1�z��|��
��RH#��_�F�jٲ��)����'ف�}�g������#?
�^ȟ��+�Q_+" " "P<R���ի����o&����#~e���GX0�+��f���?
:
grY"%����`y�-�A|'�٨��Z�����mt�)��S���uc��ZF�
��!lo�+^�5.#-�O�Q��#0t�PƑ<{„	<g�L&Xt�K������@�	d
{Z�e˖��$VH�l�?|�}�7sӮ��@�%@θҫ�4�RJ�H?ͻ�ҹc��{��x0���
�w�v�
�S�rv��y
�
}���߉��mY�L���̦�R�+�R�R[D@D@D@D@��E-��(���,��[���d��ٵcc?��5(?��Y1s�_��l�g�N�%�(��5j(-�m�&r���m�g�Ni���SD@D@D@D ��b0�+U�D@D@D@D@D�T��'�7��+U�Pʊ�������ga]�I*��|@z,j��)�Gre�r�6�
�:uZ�`�m@�=���c�V_�v��hӦ
�r��z�r�c�'�k�S��*k=z��9��ީ��ٳ/���!;�SO=������6��8�EDŊF�5h���d�կy�9����Ό
9r�ڵ+W�$�ѡiӦ��y�駝/��X"�S�(l<����Z�������իS���w߽�k�m�f���߇ye����0�Ը��[.\H]@
+݅�ᔭ[�&������ܱc�M7�dNDA����x�b��4j��r�-�F�g�}6�#�_���X�>J�8+{/_��R�JU�V]�t�=ˀqv��=�U�L 0`� Kd�\{�]�t�ZQ��3���t�$�i ��W��n�:��C�
��J�髮��Bt��G
yt�V�Z��4|�p�h��7���z��g[[����n�ڳL�_{s�q�Ʒ�~;U�q�"�#�j�b稣�b�*����̈Ї�Ԝ:�0�fΜI�3f�o�c:�m��9;������{h_j�	��q�3J�q�5q�D&�U��,��LPX:������$�%j6,c=��ʩx�kԨA���+$w<�X�NJ��'O���u�%���^#(Cǯ;��V���vR�P�׮]���c!!
�2Gl��Īq��>�f͚L�!;D�XmyhЭ[7��g��RLD@D@D 1wr:�ʄ���ݻO�>D���G��x�&Ml���s�\�����w�ի���������gN�s�9�T�Xq���.�~�� [...]
��CeZ���C�R��'P�vm:%��t����#� %�{�+�
E@D@D@� P���V�{�Rw}��h�"B&��<z�h�٬Y�l��V�Z�jl<p�,������8@~;\�.�~�9��oW�y��w߅�B\˓&M�=��
l_L("�Y�5gΜP�V�Q�F�6V�L&��d�f���MD@D@�3�X�E,�����P�
W����.1nܸ|p̘1�������
��
s
�~��7��S��q0G�ӵkW"@�
9˯_��T
4h�I'���O�c��2�ϡ+������kO�n�E{'�7�9C���Z�]
�����C`���td��ٸ#�������_�կ~�H��
�ED@D@�B�U�/�G#��M�8�={�`���R��V��1��N9��1S�60u�Ԉ
�
�5I9�I�����E�V+�^̉���]��8ݹ�0���c�fgg�޽;��j��H
�qL

�dÆ
?����De���\1�<
+�&" " 圀cm_���n_��
j/�ろH\"n׬YC����$��+����d�rG�R�Nh�Q<�f
5���7bĈ�����&I�],�6�ݜ�8�ߎ
;�&y
g���7ݲe��?M�5�|�WЇ��W��aX��+Wf� ɧ���
#�[�r>�3v��N�>��˝�Yg�u�u�1a\���Ռ
���F�`�������1ʡ�r�
+�e]��㲤����8A8�o��f‘���?�Wv�+���*
f#2!.��C=��c�q��H!��iN	����O�)<�_<�51A7�mN'1
�V�E��ɬ�4\�)8�E��Y73;-Z�H�]]��e�СCI�B~�	&�|#1�!IQ�TR�F�������@Y"�W0iUֱ�5^�l��c� �P����7p��/KC�XD��	�3����|���1�>hJ�
v�������s�߽��}p�N���ً�-����w>�3�s��hִYs�3��
�(�e]*(c�
+����x�<���Fl�-�v��(.
+�Oi׿P���" " " "P��
��l�p�r���[e1�nٵc#z3�i�?��J=(fq
�@1╛�<a�.k(��a���╋��;��H6^�ᇆ<���Yr��S�ԴY^�r�o9nE+V9}�H�D@D@D@D@J	u�s��_�^�E�p/�+%Ó�" " " " "P�Q��-̍\v�틻�s#1�].
f�+" " " "P:	�-�+h+�c/�mQ_�$'�E@D@D@D@�4c(��
���G/;
e�Q�9hp" " " " "�A �\N���g���>��rL am_��ʊ�(�sCC�rL �h_������/n/˭\�熆." " " �@�j_�i�e�a8le�_�빡�����������ɱ�䬘W9�J����W[�D@D@D@D@D�|��x����y�s�b�ъ��������@.�<���Zη��1;��x [...]
+H4�
~�xӘGY^e���G ��$X��U�(�`,cc
�P.SB#�'�J��+
����������g��ʤS>?��G�<���E@D@D@D@�+��xeS�:����e(��Y�q���������0Ne��/n+���
�e�E2�C�����������@9"�4�-���sb�J[��頡���������ȳ����&jY��0nz_D@D@D@D����ek
;�l,C����������S�P���F
+���\��\N熆-" " " " ���}	�r��*�i����������@�V�4����&���ED@D@D@D@D��_�����y!" " " "P	�`eg��
k��q2����АE@D@D@D@
���
����+njh������������O&��#�E��>
��9�v��\>�F-" " " " �<s����
�<Dz�eM��N�@�r�P��\���/" " " �@�J#1[�8o��������E@D@D@D@\*云c!ʹ��
˚%" " " " " ����O�e�
��V��#���gY�CD@D@D@D@\u�DD@D@D@D@D ���n�9.Dzf�����������"
'�<����i^���������@A��ʄ��!" " " "P�	P�$��$+�\O
^D@D@D@D��@n�>�ʚ
" " " " "�K /�r��x�k����(�����}&\��# �rN�`���c0d.��ዀ�����@y'��
àx��>4~?��57D@D@D@D@D��@ֱ�5^�tٸ����/�Y�������ӟ
+����������:�����ҹc��{��x0���
�w�v�
�S�rv��y
�
~����,w�993n;��Yg�����̥��4�OwQ�Vv�1����L&дiS�8�T�b�L<���G׭{��~��������-������@�V�Z5����z}C��
+��~��u}��o�z����3����[�/�s[�
+�+ҹ��׏7�_|��g�}�iX�n�5k�t��ռ�P��ʕ+W�^}衇�#F��o�m^b�О#H0��甧�z�f͚�S�?�VN�>�u�	'����֭[�~�믿~��st�����O?�|il)?�.9�;׸�{��^�Dn��9詧�c�)��s�a��
9r�ڵ\�;�3~"�(���Fm�̏?���3���
+�O1虔zG
y�!C�
ڬY3F�Թ��[����W_1�����.����fi�3"�bh:ޤt�'.n��7)%�XD@��@���_9n(�v;�s�e2۳�>�qL��{n����ż�6��O^~�es
+?����߻w�Yg��
&�I'�đ_��׻v�r��g��c�ƍ�
J!Q��+N�:��ᄏ���?��)S�ԩS'X���mٲ�ˀ�С�:O�o���m#�J��:��
���ͳ� =#v�l��g�qF�N�n���k���K�.i[�B
8�y��b�;��k�5k�����"]1s���Ȏ
;\����fŬgQ_���&�@�<qqKo�I)��" "P"�u��/ϣ
���b�e�ͷ�~�/�������
1b�QG
u�UW�v�iFw�}�m�)���s�ܹ�8�����+���o~��]�.]:lذ
.� �B�>����
8w5���oX�r�o�-[\�

��� ����6��4?����pH���o��~�U�\���Ι�ג[&��O<�駟.^�x�ĉ��o����~�7h��_Xg�iÍ�}��#�<�]J
+r ֪U��<:]�`�6�%�Z׻3*���3�ٳg3��{�=��<���F
�Ս�J�*1�Æ
���j����q��r�v����_y��&7�f�f34�������
*��~�3
,`��	���i���;z$�o�|OnF����wp�%ٮ];��Jvv�ƍ�,Y�C�`>4���������=v�X�s�I��G
q�����<�ӟ��p\��՗�|8������?���1;
�z���{��p3f
��n�����,��E�x���)~�$�s�)*�_�����Y" "P�L
F�2����ɩ��Z�'�C=�G�fܸq<|��w1�1)\��̙3�����l
׆+�5��ؽ{7���_E?%�%�
ݺusڈ����%�B\���oÆ
�i��>Ta�<�j�*Ӓ�
����Ν;_}��8�/���^�z�,����
{��]t���~�u��6����c}ۀ�N$�|L(4+��k����KO<��{�״�޽��o��f�����>�hs�o��`
s�1�j��-���R��/�z�5����cnb. JK����1�9ÿ��/
9 a��
@J۷o����Ymڴa��1nKBg�g�d�侽^�z�\rI�޽�Aе�|����f��s�3�v��K�9�0.

�pݧO��Ο��g�oR�
���7�y��p	���ﺧv5u����\�1�rn�>��rṊ��bŊ8���ta
+��<�S�1���I8�����?>~/ܽ�-<m�<��PN
	�c����

F�����ѣQ�~��֭["� �9�w�yVH
+�8F��s]�R����w15�pRr�}&�fM�=��3
9�)8�-[�����) '�
M�d��o������c}��g��ň�����Ma�WFs�<0��|�L!�
-���'76?�0Nt��:���"���ņ%��k�_����E 7��<�!_�Γ�(���@�K`���]G
�ߴi�YH�G;ʃ�D����/�-������C����c��|/M�6mѢEFT���}�]�<iíS�Q3�蟋 }��
�~.������`�����$��4yu��6�P��uȡ��
���G�_t��h�z���?�,桳3ޗ  l��;w���b\��q�Z�I�_�Ac��(�v0x�ԇ<U���?�q�����ɓ1��-��̡0��s=��Я�y뭷:���;m�nҢs!(�;�k�fyv�4
5�
�vE��˗�f8�	Pa��H�B�x���!snQ҆
�(��5G��;����3:v�H_���{��7#��l�B�)����_s��`1�ň��C̍�%7j��}�Wm„	
܊JA%�S�d��E�=w2�}��s֣�>�爛X�C���q�G0��Tv�g(E�\�.n�r�M�����," )�<�y�1�٫���=�8�p	�mϞ=�V�c��/�ٴMy�=��L|!��\!˸����,q*��F3���'#
4t
~���#|�G�
8�x�*'���Dt��eR�9F7{�'���<�ѐ�f��
+l�ũ̝�rr�o�R3ycYY��
*�
��SN���pq��3qs�rR��,xJVf���~yr��Y&'W��3��ۢȌ�&q�Q�r��jP"��r)�w�}���Oɚ]
^��]7
4Nm"���7�� ��?��S��e>�W�x�g���&uݓ�ij/" EM 7g\ܩ
3��O94��W^��_����,�"�Y���]�UcC�&�U�V<��cغu+�.�[
ٙ��cfEO�S�{��b�� ��YOMB�r(� �����o�}<O���(F�3+��1���a.�Fm�m/�EM�SO=��A���$B�s��y�v������{{�&�9�-�������#���Y#����9Y���I���:�<�!p����o߾�f�	���9{n��+��&�4b����ߪU��z�;
}�:��N?�t;������aԨQ/��¤I�p��B���J�\�q�':�Ж�������
����+�\oDC
9��q*{z+�r�����w�2)\>8���~�pw�:g�
�o����0K��y�3�
}Nԇds�����c�mѢ�]w�ŏq���X��x_���\\��۷7�����9.:�;
q���Q�i}m�Y�D�
����5s&��N
"�m�!1�
~zN�ˈ��L2 at D;V2k��>횲���.��;s�y��={��m����1q���p�ȝ!�Bb[�r�k�?��LE�����e����r�Ap*K�/6C�����P�[��+�
j�֯g_Iq33��j��x,~s/d$'��_/�_=k��0�Un�=�"�`���'?��4��'�'��n�퍶M�4!�e0g���Y�a��x��F�Y�<.��?~
�Iv�pK��o�uOV%���!�||��W�G_X+��|
�&6�������ĨK�!|�J�z
�6f��zQ���
��?f�47��!x c��`�S?����}C�
�0�X|�~�
��&+?������x�i�oD9)4�~��NfA�<776.wJ��ir��
��b�
�����w�r:BHf�¤&�stg
ps�#��L��)���Xx�l�F���.�Y~��&YR�Y����emo��]��s���U N��n -L�D
+�z�,7�[�Zp���@ش�v%��=}��!� ��X���s����3ͺĉi�oy
OVO�����
^a�E
c�9�L�?�#x��gI �����
��s�~�3ُv ���
��ɪ��" "P�r���No�l�җ>ى��1��=������q�m�]1����/��XۤM(���:�۰`ȿ�O��]zU��������()��WD�� F���)�;vعgߏsXHe���w��s��u�W��^4o�
r�>��g��G�y�ֳ��uV�Z>k(�W�fTi+�E s	�D�P
"�͛��Z�~͈�a�1�+0��-q�N*���D@D@�	�s(�ny	��6���
B��3#\^���i�];6kG�*��Wi�?��F�e!����,>+�����G�
+�$E&�`�Ң��H;���OoBl�K���u�5}HN����4蝿��
�y�b�Y�9��ҮQ0�L�B�01�oL
F���ʵ�_�d'
e�����'��;����ڈ��������@H9^�i+W0���
�a�3p�RID@D@D@D@��@,^�8f(��f��lj/���߿xYy�F�a�O�eo0�L�\�%
)Y���O��P�" " " E�XŹk��N嘹�4��UJ-�F���h�Ν2�ךd�)o�2���j��F���o���X�O�1g�b0���O
+��)" " " "�
	n�
+�1��I�
Yv��*�ܡ��f)��
=
+-��}��م��� j�9ˆ�.���du�g�¢�ٻ�Lӧ�8�_��%��W�K���ajJS���|�*�#1��E�u�ЁԦ"4��
x��Д&/)��l{�
�jՊb]���5�x��xR�<�5����3�ą9w�\+��]v/O:�$Aa�
+��s�I)Ic�~)�u�M7�|��T��_
��OO���p�

��sϥ$�UϷ�+*�O�qy�i���)_|�=�X����� ��:&�_�E@D@D@D 
+k���o�ͽ�T�jU
+�
<�:������=�x�
��	��)S����S��Ǧ)�|�W�9Ȼ��]�v��(cp���6dģ� �u�2
t4�e���\�MVO�~�CM]�q�߿��/����3u��y�'�|�YùK�.�k�d?}�z���W_�0�K/�D�eS�:���>�=�c���^D@D@D@"�7�Ƀ�۶l�2z�h\�*�/����?�&��k��/2���q���Tܻw�3g�۶m�����MK\ԗ_~y��0u
+��/�z��3����Z�v�]����N
u�Q�Ȅ`9�K�x�R�4��w׮]8���^��͛7�0��/�
 �O�ݻwc%��>���}���)�S������i�����O��>��=�c
+�@��������@0�i\���,��oV�5ݤI*x�Ne�'�x�%�Y�f���}��u�֍�l7<R7��yIK�
����9��xR�0�_�ԫW��ժU�Xg�����MJɀ�7n�[��iڰc�����_~�1���tih����MRH�,?�uL�%MD@D@D�<(`+��丱��f͚���c���D2�삅��u�g�xI��}�݅
�����1c��=�؇
z�O��9��x
+�ij�؀
v�O�Q)q�)���S�t�4-]�,�QP'%?�똔p5K n
�Zĉ~e7(0��8�P��d�T���ر�5q0��ָ뮻F��m��~�C��
����c�I�����D�ӴL��
\�f�i��9�'�OO��u묜(�%��wV��V��>��	c�O��(cQ(��d�A淮/R��~8Q��ݲ��ܬQ{��G����3�`Emذ� fkKa`y
��_^��~�43o75DL����$�*���>����g�!|�/_������7b��$��E]4t�P��e˖=��Vk+ٸ�����۷���:X�aÆ�?91xz at tx�|O}��,y��0��u��첕#��
쁅}\p
��9��Çqa�.����S�Nm۶%,՚q~�Æ�~߯� 9��c
y-XQG�5�29ɪ��/��,���K~��ߓ���/�b��d8�YDq��]w�B�9�9ҲeK��[����
�'�ꫯf���+X��>�rH�ڋ������@4�Vqֱ�5^�t�_?��i&8��Ϫ�?h�;

MPq��s�A�Z`gw�>�e�J�I���8Q�/����ҹc��{��x0���
�w�v�
� [...]
�^�<}����F�e2~F�	�H��
�l�s}�-��A�R�re�d�nݺ��cp/��5�dNʶb�ҴiS�rfNHL1_݉������1N���V.�e�h8" " " " %E��μ.}~��~E@D@D@D@���g+�u����Q�Vǎ
M{�(Gi��m&M�D�5!3
+�z�I�-�	��y��W$�zE�)+:���f" " 
�˱0��~��lݱ�5jD�ߝ;wf���РAQ��<y�/���i�i?`�~������nʔ|��΁���H�*U���<�Լ-KW9�>�id���-��M#:��"$��
�W�*������裏��"T.�TРL]�3����ef������?^~��?��O�W�T�bŊ�#�9��J�D��������J-E@D�	���X�dg�uր��fu5��YS%����۷�<��8��_P:nϞ=��+��ҪU����hт����IAٿ��!CT E�Ν)
���1#��	/��g"7�[۷o�馛N>��3�86�
�紐�
Crڴi菫i�ܹN}.��R^���?wꃧܼt�`�ڵ��oD�s�=w�ر�]#߄�$z������-��Jż��^)�J׼����s
0o�<�_�{<��O;�?��O�a7�� ߓ��� ���
7����ŋC���>��=�K_x�s:;|~��w��}~����������@��}n+۾�V�������Nm(�L� ><L4�S{�yʔ)������?��æ��͛��뇹ɻcƌ�]�v��d�����o#y����t��Ӟ���$�6�������߿��/����	��t���_�M�6Z�>T?��:5�~�믿~뭷F�
�!	��:�����<oS�^.�隷~��}�Q�s��7���6:!^��׿f͚E������P�.>~�����;�n���;�<��'N
�՞��p��y�

mڴ�
^V�^
i~�_����������@���_��?x������߅7����!@��c���>�'6(�f3�Ξ=�
���[k�
�3g^X��駟�xÆ
�q�qW3�K�V�8
S
�����J<%T�޽{m~��ض�"
����৏�
�
U����p���sC������ݻw���4�0ab9�9|��u
u�UZ���r]_�
��l���O�ϵ߼
�
`���5�y��1��G q\��CAY�~�cX��nو����ȸ��3�k|���ub��,��{���@D@D�E������o_��Մ��}����������7�����g���uC����k�~�
Z���N�s�)y�V�gg�cN	�+SM��
+��+x�'\f{�f��
�����֭��z��Iȁ	W�%-	o�c���/�̜�w<��Lpt�"FRgEoLD��<
6��c��I��'X5MHE��
'�z��_~	��O?�
9��S�
�x
�
,�?o
s���Mv����F��y��h�o�\�r%��7>�S���z�q�G �|� ���Á� ���{0�`}��.*��W�g媩����@�px�sw�me�����X�z5�o]���ȫ������T~>��Ci��3f<���xh
z�!B�Y~�KS����]Qu�"9�uL�VE-J�6��=?�t�7������U
W_}5��D��0�@�~��;�
,?Q��
+p��CL�l���bN��4��$�o����<�D>�#B" �R�J,�15�]��1�Y(��eĈ���/�w<�;��������P!���6� ׬Yc�b�
��O�r�
�������?��3�]b|��l��
����gH�̟�~�+5����~�$;�m�~�z
@���2�S&�+��i3s�RZ�n���_� }�O�z����w��#5^�^��񆞢" " EJ �V��=kY���{w�^�(��{��G���3�<��F|�̙3�U6?	؝�ǣwJK�����O�.�N�>��IIp6&4��vl�|p�p�������YA����&@��>��	��q6nKhC� ���eC^�m�+Vgi$�[N����T� �L�u
=�46(�y�w�RcX�y�O��!��hν.����{���B�<�W~"m�Q^t�EC��\^�lٳ�>|E��I��TMb#�ܮ	����^�cj�Ag������@���.���x������3ɒ�Ną�D.��:u�Զm[�(�Ϗ��d��ߋ/��W�^&ISݺu��`��,��{�a�>�$�2�	�&q�%�\�����
y����O�r�z!|�
ehвeK�MK~�9��ě�+�#x�;�0n`����
�I���u�rnilSR���z�0-��O�d�CR�Ɋ��SO��o��$�b�<ǕF��������O:��뮻.�x��
�EHI�����Q�V�Z�4��/oy�7T5H�/̿�-�<˖.��6s��:��:>���O[�i�Ϙ5�d��Ύ(8�S"J��f�������g���G��I�x�BO)Rz�?E�W�E@D@��@�AS:w�sϾ�c��ݻ��� �T����hނ9
��kc�pN,��k��ݬ�Y��t9��z�d9�W�R��EiY���L�c"�
9G~TY�k�\����?ei�i," " � �oW(-Ʊ
mÆ
I�A���}�FA�sO�����(�Ku�m�������w�e����%�=�m��*�y��S����"" "�2gN����ք�[�}��f\��1)['���������)�`��zk�1���\~��F*" " " "P"
+�+�\.�k�NE@D@D@D@2����s���7�I���F�R��
!
�'bR��~
Ϛ4iI�Ht�Yi�l�z&v�=�yRʧQa�J#��y,<�y�Fm�e�f���Q~����P�TȌȳT�EJ���@1p�W�7�͞�u�jlԨI�]%��A?�.(;2hР(
+L�<��_��Ҵ��
%�ȶFّ?�0��ioIvjHJ���P��y[�I���ԻqΖ4�S��='y�/�Q���<KDIu*" ��@~
F�>�p+c��K��>��;�ȐQ����ZQ��� [���
�èow����'?��H��ޒ2"(���iס�
+,o���Ջ�R��K]�t-�%�]����^q[����6��J�!<묳(�F�6;T� !+խ�Yݾ}{�"��<����%����c�S]�U�V���oѢA�Ǔe��o8��d�ܹɞk�3�K/���?���M�yk���7�t��'�|�g��f��
��3�[�(C
3㥸 ����<�2vb���@f^1�Z�nM=�#8�=\A*MF�����Sgl��[�$�aB�
?}<;mڴ)���oQ㓌�
IA������0���GO��x��']�رc�u��\�~�M���}�=��}˗*uRO<���N;�O���
F?�=y��7�2�]�ሀ�����}�Z$��V������X!�Q
��|x�Tp�Z�X�S�L��׿���~شܼy3�k1
xw̘1T�
>��e#�
e8ڴic;MA��yX�x1�6������_*񺄻8t�� 9����ԩS_z�9s�`f�0�rrJ&��;3y��[oQ8�y��Iy޺:JV
+�x�	���9.leS��nT�1�r
+�=?_��_�bI�Ϲ����k���ѣ��1�s�����{[��8n-f͚E�
�	3?��xr��>~�Jv~�����n�W���-�̿!����
n藓�C�.!��}�
�����f3�Ξ=�
�������a
�#�pxa����~J�
6����]͜/�Z95��5/��8���1�O	��w�^ۆ!"��G9��8�	7�'���u��u�W2`D���2o1t������pN�ĩ��y�(�O�fߩ���Qz�}ɝ6oq���N�
=�yp}�B��}��>����
����w��q���	
"��ua��߷.e�͛���/@�[~�����}�h�" ������%߾0�	s��ܻ���6=;{�So|1��χ�X���N�졗�<���<�}�I�7�z�����[���U�9%�W�w3{��8x��q�����	�jѬY3{G�}��u�F{��={��ӄ�<&�����/�̜�w<���z��qV�j�p~�j
+�Nٸq#�@<�4
�1G��
��N�3�[�(�>_~�%S9�C.�2�2�����^�Q歳Ǣ��ot��W�\ɻ�Vf��Ư�–��J�C�����[���O7'ev�?ש}��g ��m�ƍO9�믿
5R��K��o\��Q{(�b�rV�b��`x����c���D8��j�n�bkf3��Y�F�Θ1�P<.=��u�,��)`u�_��c"�!����-"s��q9i���6�.��>E��b����_,3>D$� U"[ʶrtm��,�G��s�����{�� W_}5q�/���|�I�LyR�Թ" "PR��sm,���u�o7�\��#�U� �J�*�ر�
�Y���,|�뮻F��m��~�C�+��P�š5kL��#�R �[�ʕ�G���>�}�(���k\%+'��-W�����0��p>�Hv���c�3�,����L�����ի�|��;�s�&?~<��B�p����<����Ff	��� �
�\'�H�����yp�r�ʜ�J�]���7��@�D@D�40�c���|9Y1�����
>��?��k����{	��Q��G}���<�
�"�,Ϝ9��v|���;+��l���,Db�X�����&��p��$X2q�����܇�~�
�>�a�[�UW�Q��&���-I/��G
y�v��
+C��z�#��PsǤ�Hv���
������'#$^p*�263-I���}7Q����E&/�Ҭ�e�*_�qZ��q]G�[��1<.��lŊ�g0��i$�

�M
M�K��E�� �D}��U�Y�sE@D�4p׸���ql��&�џ��g\DÇ'�œ��Ǫ�N�:�mۖ��g�}6�x���$λ�K~��ߓ#�����ڏ�
v�ax⩨BX'���_`b"��z�J�>�MZI�[��

��8�뮻�0ؑC�@/K�2#*�y�3�`R"\x��K8�Ĩe�C���-[Z�����
��M� ��H��r�%ߓC�����С�
s
���zk���9�Ğ|�=Q$՞lBO=�����7�1��C��LO�<=��Wa&���RG 맧5^�l��o�����j���_�g�`�FW
�wD
S8%��iVƆS"
���Ыf|��� ^�)E:�D}���2#��iT�$�]��HY
W�L����@�AS:w�sϾ�#��ݻ��� �T����hނ9C
|�7֚ 
�8��ڪY󳼂n���e
��늢)E٢�T(j��EM�D�u��g�$b"��g>%�F�;-��J;(	(�l�r����rÆ
I�A���}�F�6�F�29��^mD�(h��
�I�6�<�����~���0�X!�(��*$�."P����ʱ��37��]!�WD@D@D@D ������[:b0��s=��XN�N�@9D)��9[�a�cc,�P�$(���_A��-����Ʒ���G���>5��;�}�a	�Q�
� 7){3a+j}�"�l�$N�\�u(�y5i�$��� �y�T��8	�O�
}j)" " .5�V�qX�#�wx���W�U�r�����S�J�U�����nr�T�V)�j�5"���4T	^���РAN�L
2����UM��d���I��?�0�AE�Z��֭[�u7�x�S��ٳɄM�
�D����BJH��i�W�_&c�)����9���R��RsdU��
+�ؾ�w�d��w�#,��u����@�!pZ��?�����ٵ���q_�
��y����^4a��[�Nں���_���dZ��X�r�_�/���U�Q}��Gw�qG��%�>eƢ(S+�EiYZ�P��(elP�~=)Ѽys��mLY�[n��|,�!ec9��&�󊢒�|�	i�(X��K/9��Qd���_~�O~�'"��g�}6ީX�4ԝ���@� p����9�;������o�;n�׿��}n�}�ͷ��u�-�us�?�ts�`$,c��v�YgQ��Lm��K���:vԬn߾=o�c�
���_���%۞��V�Zկ_�E�<l
=��B�8p
+�LpBR���~r�o�~�M7�|��g�q�l�,?Y9�v�By�NQ���<�
��=���)\��'�x�i����?��2ŦU�o�����ŋ��իWs�Qɼܽ{7^ҕ+W��)��j�I���ܹs����2dǑйsgJ9�����������o�<8�n�v�ʅ{�h�w
��'�Ө���o��׿v�G�wle�,���n��v�5z�РD/���˶��
��煺��ճ�]���	�֏?-���;���,��y0����K/e�K����
�%�-�n�_w:." " ��a:�����@��۷w/&��{���{~�����m$d�~vܶ�_��G�U�V�#��P
��D߳y�L�V~ŧL�B�����?���y�f~;17yw̘1Tg
>��U�1	v�;��&%�O���7

++��T�
��
�C�����zk����	��~����k��Kh
��g͚E�
�7��w�I �;���ON�8�
lР6��_"k5u}�/�-?9��t�R��mڴ�����o`�0,X����0]���O�%��:�?���-;�<�
������dy�Q7�pւ޶m۪U�(��T4�]�/+!��ΏR�n��/��LLnw1���������D>iӀ
�̾_������Y�=�"" " �Hx���Ӛ|���Gm���|�
n��cb
+	a��fk���}��w�´G��qb
�#s���
k�?��S㑲�����9_:�J<����s�N���4v������p�
h��E��v�7̉&L0
+�
w�7W�l�C����y�P�{!
��?
�Ȝ�x-�����=z��B�d+ǐ�9m0Ǒ�p����?���:�O� }� �>HQ �1;�Ύ�u�O�T��W_}eu��n�pi뜖��.����Q>w~���߼�x�޽��0
��+0��b�P5m�,Y�Kn������完/�(sXmD@D@D�I��
�G�x�q"�@޽k��
[6���|��W���?����ˍ_���'���‚/O0�Իf������1��Wv�ϱ�N�3N
*x\�ך�T.�Y�f��d��֭��z���#o��KZ&����_��9��x�7ExyD)�>�1G���OΗ_~	%
X���z���;��o �S0�^�7f���_o�M�/�#v��t
�J��+��%�\b��cުW�
�U��L���-;<�wi��>��J|��Cء��?���:��O�'�q�cƛ���l��|9D��y�OA����7o��&�cݺu�ׯ'�L
+BR>�z���7����
�(" "P�	|�����0y�l�}�
���``"��G����?x�ʓt܁��1D\G^}�U\�l��4
�h�_�
�~�i<L��♸9��xy���
�'O���\}��ģ��C �-h��Xb��=���5k�$f�
do��1g9�!<tt���*�����`��y��̒Sg�Bs���٥m2��/#$��.��H	��T�O
�6��
���DX�G7�x,s�GT��D��K
�p�S�r�.�����������}�$�}Ld����V�
w�%�@�–��}~�
�e��c"�kJ�����Ɏ�lO��,�뮻� �m��~�C�s50?�)�{C�@ �k֬1-�1G�5L��Ox+V�H����g��
���]c:��ڪ�?Q[
�8�	7ǯ̹6! zrQ� ���s��_|1q�D_t�E������c�$B���O� }��$�ax^G?���4���蜖qݺuy�\kZ{׸Kɘ��X��S����8���ЩS��3gb+�cV|]� [...]

���t�KWa���_\~��O���t"�x�q�&�q�
~��?�|���?
+�B��.�G�<����+Vl��wܼK&<�,�����g|x�=y�!V
���4 ��Y�Ɔg;x�С��˖-#Ǚ�t�.pB���f��r�.������'��yB�	26��O�G��:��O���[��},�s*F�
Vm�
���k�+c��.%�!άj�GdZ�����%q^�^��ʬ@
]��ǐ���k1�Y���ҥK��r��CA
��Hй" " "���a��u�<�ߟ��z����.;���p<	�s��d�?*�fN� r�Q>�s�>|8�
V
O�qM����]k~�
O�Kp�=���x_��� ���)�~�a&RE�� ����

SrJ ��[o�޽;�M��q�:����S��_b��>~�=��Y9F�����ك
�y��H�/'��tr 0ۈg �9
 Ǐz��ի�<����z!�
������xڎ���-9�e�\,�=�%c�y���ƒT'X�μI�(��
0����	��1��~a!N�)5B�=��'·dy)
ʜ+n� ���(" " � L�������2��"b���i��
NX�㐜�&\�����{g�{_D�E�
$��dW��|*�S�z���cj�
���;^���kO$��&���Yk���"�����7_�c!� �[����z*N�ԗ���@� 0��!�"��b��X�o�=B/�vs�P���w?���o��bYO��e��g���M|F�x���e�\�䢨���B>��K!�����M�6a"c��7���;�^��ԩ��J�i/�)�|�
i�_��8��/J�P�E�r1cWw" "P6�Hv���uJ�,璾�a
����9<W��P6�r�	ъ�)�
H��J��}�F�tԨQ&#a�QڗH�q
@,��~�;n&1j�
/%�it��ً���mI��2D����$�3���ܩ�(*U��t�б�^�	-������Lq�o�H�
~Vk��g�*Z
D@D@D@D@D 3	�Z���k����D
Q&�`�����Y�p�ڷ���
!#VC�
gz�V�``+�[�����e�ŝ��|b���?��љ9li%" " " " ��m���
>�`9���ʼn�I�@��3�5��	?;�Kc+�f��㕱���鹏�K܅���=��ܷ��^�$�4IbR
�~���c?�e|?������ki�n�Y7b���-?�x�ao��v��o{�gƎ��I>LѶ�nI����x�s�
+z�8���QG�l�pNt!f*��ǯZȕu]RI
��R�
+�>��9~�#Qy�%�a��>=�V�!��y?m%��
)/�k�vN:Ƙ�"~wD��k�)9���I��w!R�!IQ��/�B]�TT*0�h���cl϶_j�>
��^:��#��%!��#i&&4JF������G��
-�O
+�,�$�����kݪE˶����\�ry�w�V>�Ԇ����7p,ǂ�O�u��5?�b,gY��:k"�8n
��f?f
:�b��`�2
'_��^��9d߈���]�
Z��t	�.
���zz62��J窳���k�gr9�;���Q��us��R:��d'~◩Ks՜bS�$�<	���d���)���
��QfD���Ͽ*Q����vk��8��q�I���G�<\�+a�yϕ�A������6��$L��}�'�ᒰ=��,��tt�c}��\�D�����:1�7sAu,v����w��%J��I��
�����ߌ��9��Cǜ���1TR�p�H]��ɿI�pMCZ8�zO� +%����i�W�d����ʁwQ	?RAX����ZV=�_Eo	9��o��/w.�b[��9��ܻ%��Nj���[n�t����=y
[d��^l�S!�f9`��,^�c�;�e���)q��~��O
o~����f/v]c����������6�ٞ�7'�D�#N��wK�y���������>�Kn��v
���H��m���%..�3��Q��9vLW��LW�DU]�T�T/�.�]>79�k�/H�%λM�	���IR���i���ؑ���q}�5w\
���|>�>�)�#a�
����/��ϕc\,����0 at m;}
������	������0�]c�v��ً�����L�.�W���.����
��r�^c����%�_2���o[�>v�qzb��'&X�>�u�,������섻�ߎ�_
	oǿ^|s
.�=����|�<%>`_e���-ު��y·^��_�������!�:�����>�&�JϥХ�s���h+�����KT��T�9��
7�b|~����sR�o��Nՠ��8��m���m�A�
������5�Yf���;.��޴�i��Z��YY�
|lL���^��O4�I����MӘ�������T!�b�oe�
Z�"/+��V:4�b޿C͊���U!��!��Y��@���5�
m
b�>�
��?�N,
�#�������ƞ�߄FF���1�pA��b��bL\�ĩ��Rz\}{b�A|h��\�%�{
+�_ǰ�m>s�H/8!<���C�?W����H�vߞ�ώ�oʼn9?��P�N���
A�|tm�ܫy�oo� �<;i�Y�?��g2�I�
����1�
+��+#�@6
Ox^�G����^����ᘁyN�g�%�-�H*Xa����i�f�j�s&�lr���|�$��'�~q���s
��(���
��z0͜;�
5���|lf�Xi�b
v�Q�m(��~o;���&�[�/������
+~5�o&�ӹ��V��h!Fd{5Y��|������-��
�lW��^_%!?��)�/��*��c�=v����ȓ��2��w��o
vM�3WOe�~)
+~��\o�?%V������w�����z�=m�)������Z����R`d��E�k��F>9"���=�{<�d��g
S'6c[��
��cq�_A�B�z�����>��8[9&�e&�~w�/h쀸)�+`%�#�͗:�x�~��Nw1qi�X|��gk�w���*���Ѿf\�\N����_,g�?�N�v�Ջ����?�Q�w���

�a�~���vޚ`\�cI��g~�}���\�/��_��-��?�
S0�������4��H�-s�y��R�u".����y|rLW��
~.]�����I�&r~~5�B���1��y��p
6�����OD
+|��}�$h�0�|�/�1�7I�a��q��t�1�)��5����D+�O����&��f���~���S�s���τ
:l� �͘���g�{��6%��N☿9�恅}������B)A�S�[��6^_TH�ԉ��x�</�H� �����ds���I��
��#�e�{~��Z�~fy��ɕ��q��]{<���6��g���zy��f'�ض�Y��?��~~�5vp�V��_9�,�� �bc
���8���>6a��3��]�g�Z�q�3n
��u6�_�
���{ʡ� ���޿�>]?l�s]B�X^:/�����;0�D�==�q�A���P�@|�
l�P��
�����l�qV�
�-�g��� �{���&�/.лA�gܫ����h얘8_Ӳ���Z忎�h��6w��
lBg������B9mS�_A��w�`���%x
�|�$
*v�y%��𑊷����^_#ή��
+渡�h�o�v�Lh�������8��볛pf
���ԑ?����y�”��(���y���o��ܼ�}��0Q��I�z35�+L��-8�=�q�q ��|���衹��m��6�A��"�S��G���x��[?�E�yO�@���'���8���I���&o���3�{�e�.��i�j���I{��{������Cj
�u��w��Yq��~�pa�C+�����W]�w��YJq��%���&q�V�e��5ʜM���q��t6�
�zig
Ժ��ٜ��Qq���7sT�B�Ѣ
+�oWp��ET)��|�@r�T�%����(&\���!��[h��ߚa�H���:��p�r���`�
|���@�n�G=_�`�r"�X�yG�N���		��P�������4蒢�O
f��1+pV�-�����KO?�_A�fLy�S#�(�?�Ԭ���T�����۾��];������ڽ�O���n��$�E�7S���)~�(E�CAqi�'�
�Ҡ�[D!D�Լk���3��R��t�G�*6�
A���D��R�{^Zŧ�O!Gzz:��NY����A��U	)�S��1&)�	"���n���O��X��g���A�4�HrR5OR���#7�U�@��Z#��YU��T�����
+endstream
+endobj
+1768 0 obj <<
+/D [1766 0 R /XYZ 86.4 726.045 null]
+>> endobj
+642 0 obj <<
+/D [1766 0 R /XYZ 192.312 371.339 null]
+>> endobj
+1769 0 obj <<
+/D [1766 0 R /XYZ 86.4 318.522 null]
+>> endobj
+402 0 obj <<
+/D [1766 0 R /XYZ 86.4 209.644 null]
+>> endobj
+1765 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F49 636 0 R /F16 453 0 R /F48 609 0 R /F38 509 0 R >>
+/XObject << /Im9 1760 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>> endobj
+1772 0 obj <<
+/Length 1959      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�8~ϯ�9�Qt��o$�^��esvv.
�3d1Lwϯ��%���4:}f��e��rէ�H�`�������|�d���T��@Iă�j$	&����H��
/���;��Iw���
�0]�8��M�Zv�4�\����o������� �)
��
fOg����9<�!��i|.�=�iD�*
�g�9�NQ\U����RD"i��q8�z� !
��b.�D�0���/1	����;�������+#1xP���
/�if��x�yL���CUس7Y:]��Fn��IŃ.!H
z�<��l�N�s
��44�iݥ
i,�t�8c	�")�
D	�5n�� M�a��s1�4)�%N5?�\T"""/�26��~ތoG-c��G�Izi.nW�w5��
	���\F��Ž�ݻ���
+1y�q)긣��)���uWw�I��zGJ�%m��`��=��^��"�:��&���x�-�S�=�9�q�ou�����u�S��7�ż�$�2ٿ��֑T.e��:��]�]��2�|\A���U���̅I	_���ŐW�����\G<\=��%�`ၫ���j����~�
�h��1EZ�9�_�)EJ�5,
�
3�@Ɛ�8���>��wo���o'��*�n.����5r�}�%q�X$p��t��!�Z�K�)\
��.
Vv�u�
�&0��_Y8�
W�W%cD�*�C�
�D ����3����w�Q��e��*S�Y\Z��VO�i��]��HZ���6_�O���l��)�=�K\�}�����S����>�����_Y�ȭW
V늗X�K\�WkY�>!P�s/Y߈�Gm>� Y��
+��I
VP�f�
���H
���������*pZ��F	�cFq7߮���]���]d:W�Da�i��.|��)H�������k�@G�*�
� �T��
m�s�����Q%�O"H�I#��Ѻ�ӟ�e��ɪЊ`�hk���:e�W7���,�}��|�L��l�3�%Ѫ�o1�lI�*,����Uߜ ��w Z�[����b��-v
�`nD�n�(A
�`�ެ��!WC�'"/�B"�e
�[��AG��)}�4��@�䮀\<쿽Y�߬6��T7 1
��i�"3hGLo/��&�2sA
��M�F]�:3m�؋�:],��o���W� }��	�0]q���)ӽ���Juh��>)Y�Ӭ\
Fc3��)�ǻ0>��
�t��BP\Pš[<��PI�
+QR�~�ӻ��r�:��h�w�����gRf���I�8?���̄��ݎI�k0R�8�0DcD()�G����C�1�F����;,C[�"��^}O���#��l�Q�| �HT��+��"YD���6Af-�'�(���N� \:��JA��P��U 
uP
���<,?��>�� Z!��
MQ��Gr���P
��C>`
�j����QXB���7�$#��iD�(:�[
�KnՀ��ؒ[Uؿi�d|�1�>�0���m[#JH��
+�v��Z����R��?p�w��z3�
�_�3�c�`1��N~ń���ugQ�y����x~�Dҽ
�v�Nf���t*�H�77�3{
6��*��]E8���l<2t4D�2|2Jm�
���
w�#���V�qw�l��}���iv������Ya���0o>�W��cyS�� �6o4���e�n�kE1N��Yj�]�v9O�,Y�s�Ԯ�xL��r^���g�$$��
���<ܟ��S�*�`Z
1�a��Ľ:X���m�*�p��)��l;O|,S�c�Q�,\
H�9��K1DW;���)��DT6va^

Їaȿņ�iQ�'�<(6D����%�k:c�Hv^ԠL���
�;�oR�l���?io	�&�����?���F�C�*s�,����
����d���	3z�>��lg���I�.�%_�笌�fTC�?�O�/��/��^2
+endstream
+endobj
+1771 0 obj <<
+/Type /Page
+/Contents 1772 0 R
+/Resources 1770 0 R
+/MediaBox [0 0 612 792]
+/Parent 1751 0 R
+>> endobj
+1773 0 obj <<
+/D [1771 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1770 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1776 0 obj <<
+/Length 2662      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�~���[��C���<i|d�#�����-�23��ǎ���
�)Q�]f�����@_7��x�:�z��"�^D"ɤw��iI��XDdH�����Oy0� TŸ<\�]�Ɠ�0ԡ;��ԟb��@r?�'���*/��".��
+{������i2+�d����'��'�P�I�ъ� �Ko�<�������������~�qK��a�Zx���n%AsE\�HF�P%��]ݎ�'�s�L��hX�Y������>W2����zr?�
�j�_.��qJD��?���,���K��,��?�$G��P2�"�
)%�p
ϒ��\�
9��͵�1Ž�^	̿N�ϑ����<h������<ɒ��Z��O�+��2]�����6&��M��g�2oSLV���ғ�
�w�	�H�b9�?�F�KE����x�	���NR�ף��s;��`�oF"��r����P�+��K���9�
e�d�+�'�F��J�$��iۅ����5��h�8�)�٬v��2�V��|9���p(�MYtYIejC�����l�҈�6AD�D2U�+/W�4^��r��Z�K���YYs)��±�0�i�e�2W��aWm@��#E?�Z�����,y٘�uVT#�u�č����:{��D� ��B�-�d��8��
+
����n'���͖\�z�����g��t9�
)��:m�\)�^؂�k�-����O�*g��DB� G���*�>�J
E�O�+���*�1�4K7�m[ec
�k]�bXQ��X/��)�i�V��	�j�'��X}
+pӨ�FUf�]�ڎ�n
�ľ�Ys�
��� "!�Q���f).�L��Ijq�I�c�‚%���+�
|
+���c��U�2\�[y*?͋di�r�D]�5~d����h��r��o
�
7�	��� !xB4/��f��JW�R�G�
�9�t���1��4�u�U�P�a���t�, �,@;�����XC��%E
�����a��Ŵ�~$Q�UJyB��T�"$�.aH	���"����(l3>�l���-H
+�a=Cm��͔OȐh`�Cʇ�$@�����r�
c�H��P3�y ф<;
+�N�yc���3������ja΁]�63=�NK!������/e�}Y��>���ʏ$�R�=���N�s��Ӣ�1�s�b��>�9 at P_��}��
�Џ���V�.��Z�$�;*MƣJr͹�%7,��@605@9L�Ă>Ԑ�k�
|N�Q[�W�o�
fjȀ�'����Sf�Ƹ!��~˞������XS"�8[�o��/.�3x;d��&�м

�W���z(LPI at n�S롒��3P�$�ݽ�
�#��<7ɮ����!"e�jxj��rӌU����
q�����rc
�B���ӯ���b�J� �Cj\	�#ڗԞM�dn
�K��s�ۇ�x�[y�����;B����߳˻c�' R�ƞ�$hq�l�Lv�-m��x�d{����� o��c� �1�}hH�m�Ɨ_�Fw�~���.�l�i��f¯G%���m�|?t�%`DQ����g��'���@�xtxģq�|9�S޷/�S�ɘ�}�	IQ�}Õ��H��s�P���˓2-��&�r��[o���f
�х`���	 ����ݚ�4�JM��?=�����n����xt;:����&Bb�f	��SRb�aЃ�}��8��S���3x�{2�C�v.�I��*
+,�mw[d���W�3�{������㫏�B
����>���S���'n�H;1��A>��o�i
}݇ΑTX�
�C^��}�����\��U�j,X��<|]�U)�:���:�[��k�G�[�VE��?�o�U}GOfD�6֥O,�'qf?�7n�njm���ץ1�&u�	��Bʮ='C�JY�k|��Ր+�$�IN���RC���(j���Ɛj%یT���U9yl���zWΙu]�p�HH�
��Z[���;7���~������p
d��J�!)!z��p�����_a��O�Y�G���Y�p%�F�U
Y�j���
#)Y����1S��P�>���^}ֳܤ�i�cE���c�����H@�~E�5p݋��r.r�p�Uo��Z�>X2�̰�����jt}��]�>�xry_V��O��e
�򯓦7r!z,
+�ޑ�ag��W*��l#I!�!;%�7�'�
Q�;l��x0��:�}�x���M�. y���र���D	lM?�� F(�_s����~��*̑6v�t�A	�)���|�žY���d�pw��KZӖGb=
�T��'���3��qj����P�����T��w��C`��̼�x� �4}qn��4/\!ְ_��������m9yg�Q��cDz@��0�预���=è�`���@)x��B���ne
{~��v�p��n��<�a�=A��N]�%��/��>�x�;7Q��	��;A8��y�3�mZ���=X����S}G��% ɚغl�.9�4($�R�l�3�`��GJA��
&
�
* ԰�<�Ė�X�*'�w����}�#��L�N�#�Ei���j��x
�y|����ҀKe���C
+šrX���c���;'%
Ϗal���Ԝ�A$v��
Z�;XKVx��.h5����I�ƆȺ
+endstream
+endobj
+1775 0 obj <<
+/Type /Page
+/Contents 1776 0 R
+/Resources 1774 0 R
+/MediaBox [0 0 612 792]
+/Parent 1751 0 R
+>> endobj
+1777 0 obj <<
+/D [1775 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1774 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1780 0 obj <<
+/Length 1691      
+/Filter /FlateDecode
+>>
+stream
+x��Y[o�H~�W�����an�x*u%JLK(
Dj�V�c��*ֆ����Ϙ`p�(޾��x|n�w.c�uga�]����1גH�Եf���"n	*�ˈ5�[_�"���
?���Q�&Ȣ�Z�v�d�`�6�*i���\ڄ��ه�?k�� �[�� ��V�l|���9<�`aĤg���--�$�p����?���
�ޡ��$�W�q쏆�c
��2�̄s���vF
+%� VJz�Q������{�o11���|{
Ș�'��"R����V!������Z/�ҍl���\�X-B�t���6�.6��-�AH��o�f��7͚ �6M�֕�^� _�]�Z��I�}ü�a�. �I���Tv��U�P�[�r$�
�I�0�-��i�
+. at A \\ 	d|	\"OD.J0�
��	��>Dh�l{
+7a	2o2M���]5~Y��e�i-Q�+����;���+;
9��E�$�nY�Ur+��+�VcE� x��ڬ�*.Է�Q0�
ݿb�Qv���{{
�v�
�(a���vҙ|~�:����(���	��M��ٳQ)�c�~�w�*�C��v�xy��/Uco�S�eVQ��j��K�I�
�lU��
U��gW���zt��
�UPy�&3��e�Q���������������h9�
���i�Y�#���.q�D�{�4P1�9��ȶ�<�޸�
+�������Ai��L+
+�� <_m�/fO'wy4t̎��D�
��)C�|�S���ݺ��c2�
�*�c
���{xQ&sQ���L�����=�>��� ��]�EғeJU��P(D��	�*8�z{~ī*.��:���(Q��AppT֢j�
-����^5ݚ�7�$���"_��9��RA�W�jT1
��U�qm�4��D���?�q�W��LN2�H�8�pP��Q����(J�N9ujP\Pg_�/��y/.�ξu��+�{ňu��[������
�Z�(���d���\	֫E���������S-�:Pui1�f
�}�7��h�O�|�R�@��;����$BD�|���Ӫ�
mH�_Xv�Í�E�(}��I��H��RԢ������ag��
<��uf ���(��ǚ�m�a^.�v٭�(�N��,�'G�
��)����4���}nC
����U���n���kpd��.X�M–=T�q4l����~�X��S9͒;��NT��g�X�u3�{�6
$Z��3��m�3�ar�/�N�8���;'��P��<�@Jp�K/
�Վ���s��0$�ٷUӲ��
�
��P�ծ��\?�5=���z���r
/�4��;N�����2�`�Ļ/I�~
�0̙�
%�Bd	�{rn�8��X at 78���A��  L%/y�0�m&��g�]�Vׂ.��s�n����
�K.�}|���?��6
M6
p��bT��ka1��q���X
E��"X���2j/� .[���#�A��08�.��''o(�Lp�V����-�9\?"}�d����ǭ�����?��:��w8�����T���!�P���3
��l���%���E*���w}>{u�wz�a��ٷ��[�Fgi��Q��U�b.����O	8�5��+���+1=zgř�
�YRY<�sL\��x���	��
ڹ��v�y��㗼����	8�Le�&Ӫ>
+endstream
+endobj
+1779 0 obj <<
+/Type /Page
+/Contents 1780 0 R
+/Resources 1778 0 R
+/MediaBox [0 0 612 792]
+/Parent 1782 0 R
+>> endobj
+1781 0 obj <<
+/D [1779 0 R /XYZ 86.4 726.045 null]
+>> endobj
+406 0 obj <<
+/D [1779 0 R /XYZ 86.4 386.427 null]
+>> endobj
+1778 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F38 509 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1785 0 obj <<
+/Length 3796      
+/Filter /FlateDecode
+>>
+stream
+xڵ[ks�6��_���ݑg"�x��NwFIܭ['ucg��v�CK��
%�$��~�@J��G���! .���
$���?O^ߜ�}'� f�fps7�
S�P��H>��~r%NG"��
^|��b|y}:��
^�J1LNG|8�֧S���}�/U��yRgłz��,��I:]���o~89�9�󄃒`���5��L�'��;L1�� `2��v�|�d�Z�����`�$рsk-ڣ��3
w�1�L�`.��_���lq�p�Ǭ��V��N�E��_��m��YZ�g�Ek�
+#
1�얿��n_�,$��9�r1͒�g1e�Q��w��j�REf8E8���u��y��h���g?T�3]$�y����C��S�M�Bs~�N�d�Y���z��q��	��3��y�@�Ճ��@i��[^�s����NG:�,/FR��]��-��8��0)�XU�S׵(j0�v&�i�VU;�z����Ib��MO����L�ɩ���q.��X��e���3�]�|p�%f�v��
.�<V=��)��r���
��T�ܪ����8���1a1aX��%�^f��
��˸
_��f8&+z�MS7��{�i���
+x�/!}AJ�Om� #c"�6�>�5^_���e�H��)�+bO8��ڍՍn���E�����b�1�f�R�L�p`ɸѻ�`ōu[���Qʀi,a�>����ח���#�B5�9#q���<?����v�O�/��
of0��ŝ_s�:^M�2��E�������e��3 :DhԦ�9ňC��hX�)[��}N/�-Nlԕ���̚���r=��Q�6����H-�Wj��B!�I
��K�./^��g_1-�Q�՜l}߫����%+����:G�9+�E�4
3?�Z���m�D��7�O�E��Y�;)�8 y��'ɠȮ��"%
��gO\
(�
��P��p�k̈́�v��!҉�����EqK �av�c%�IQ��˟��r�Z��cV�I�,�O�2�u]��Ϡ�yB��3t��]�iX~s
�PǛ�v��dc/h�ۋR�N�
���&��^=U �P�X1I� �B��Z��~yȳIV�O�w���F9B{R�|�%u�
VQ�"��JoяNxڪ �
+
+��!],�"�i��R\
� 2V]q���9I.�޺��~8��^��p�Fc�V��&�">y�����/	A�o,0���
edb��f`<&�+�
+��d�|J]�w.U��
�}�n����oƗ�\}8���o�f 3g�E�?
�;� �\����������U�W>K
��p�G+�o��CR�Π��_�<$�O�*���H�駸*'Ċ��Z����K�R�����׈k�����vt�V�~$a'��7��עa���Qܹ

���� 9q����ts%�4�7O�2��w�>���W��*���;b̾+��[�n�.
�R��`��w�H��E� Y�9���m�ޢ�Y[�Op���ß���7ggw�d��OlR��N�K���l�|ΠtrwV6��yOL6p=+t�z�+�֘r+ A)Z�<F
+Q?�

�
%@Zk�?�v�"�Z��jYV����%'E�P���.G��ʵ���48�F�:�K!�
F�W��/K�f
+즥���@kɌh�p/�S�T�
+��	;9�Ю���P����P�v�7q����Ƿ��7ցaaȏ��F:#lol����s�Au%��N�J���۰e��A����i�c+�zktܢ�=��ш�DO�Y�A�C]hl�&d�V�WlI�I`�K�
�b��e_�$�D|��#�
77�'�[�
��ȑ��=�푡KI�b��ݔt%X��P�.*�cx%��*?�����=�ʴB(p�	sSaB$�Kڃ�2u�3��/
��tD]M��}ȍV�k_4�$eZ:~דߪH� I��!3ܼ�cD�	�yЮ�u\��vr���S����ܔF�!x �1��+m3ݗ �@(�v)e��	W�^

ec�I��q��8H��up,Q(^�|�Cx�2��
A����p�G�b��N�X��c�.T�

(m�:��QY$��K��O��&���� "G�]���T��o�_!7J
�~
x��
$t�`�G��h�
��n� �'zܤ�SZl��^4ѺI*��(nR�s��4p�JC����,-�!���,-����h�y�
�DDDv)Ӥ��nz�&��=��).
�6���
+�Q��W�����JX�0���\K�ZN?mN��&16�Ę��ҍOݵ�"/���93��怗� e�����i�O�>���[�D���
�A��o�q����]H
P^
�ȫ�f�NZ=)��<�O&O,���}���'�j�kR{��odгA�B����%�Sz��D��RQ#_�9���X��)�I��3n�j���ۗ�� �eū
� �'^/XI�2W
��v%ה�	��"��gQ`
� Ɔ;}� �@Z(�f >[=�� ��#��USo{+��&�.O(�|1�R�Mcz��W���Y�-H��xu���sP
EDr���T��C�`��[���"�]��� �M��xd����`
��ρЂ��]�rں
-���C�:���qHiY����9X��+���2c�����[�'�X�&�R��&�����F
Š}�C/^H��9AfOD���
�	�����߬�7*j�ήG�h2���4��GQ4����K�V�^�o�g��nӳ8��3%Ŷ"
g"��i�Xn�-Hz�,�ߧgHo o��>5Cr�|�6���n)H�9I�A�V��S]gs���kr�> !��ݽ����
��j�UMr�2��)��BDL���m4i)�������o��9p�4�ؗ�Ԅ������y����I
��ߤ���Z���9�7K_�[����H�V����i2퉄�͈�76}
��P�zW�.�]�,�!c����	m+�HC�6ό�t��ӣ1ט�+����,��m﮼�T�Ͻk�֭���A�}��!��A@Ҭ.��"o��`"�G�i����4���[��p��<�w
7i�0a���[w���"f��}���I�$=L3z�ї� �����{'Ʈ:/I�*����k4î�}�=�z�F��5W[M�D n�!��_q��*Y���<T�I|�����aM��j�}(	���ޫ4 at Wf
��=!Eqd�A����jV,s��j�5H�7o�.��q���l^���� ������]k�
���F�?O��ڡ��lf������-p�ۡ�]i�Zj��jn��xw)����zrГ�����Y��Ј��PO=��m=�&n�C쐭��X��3.����*|�P[�h�Թ���y������l>�X�p�����&}Jn�j}
+=���Q��@ ԋ�� �I���yIQo�z��
+�:$�E0�5o�p�O���"�ȍ;�3t��J*�[2C�נ�!i��
�L/c0���|�K�%�Pd�2�Ø
.-Z��mI�*�>,GV[_KH[���
+ -f:/l���1���8�����oo�"����6_����K�
p��� Z��,~��z���3��"�
Hѩ�\{zk�T�2)D=�G���0�
+�/	�& ��R������Eax��%U&��66>rid[ʺ�4�`.��[��(����,T9�A�$3�wOezXt��� ���!�g��?��A|��$��$�
�Ԫ��.�Bͥ���|yv^4����@H~<i�r7�{�-���޽/(�K��~X�7Q�,��N��lF�U��
x�g�4)G�� ���˼���l:������EO$�r�>��>ƅ1�CN*
+endstream
+endobj
+1784 0 obj <<
+/Type /Page
+/Contents 1785 0 R
+/Resources 1783 0 R
+/MediaBox [0 0 612 792]
+/Parent 1782 0 R
+>> endobj
+1786 0 obj <<
+/D [1784 0 R /XYZ 86.4 726.045 null]
+>> endobj
+410 0 obj <<
+/D [1784 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1787 0 obj <<
+/D [1784 0 R /XYZ 86.4 613.163 null]
+>> endobj
+1788 0 obj <<
+/D [1784 0 R /XYZ 86.4 415.436 null]
+>> endobj
+1789 0 obj <<
+/D [1784 0 R /XYZ 86.4 298.129 null]
+>> endobj
+1790 0 obj <<
+/D [1784 0 R /XYZ 86.4 156.732 null]
+>> endobj
+1791 0 obj <<
+/D [1784 0 R /XYZ 86.4 75.291 null]
+>> endobj
+1783 0 obj <<
+/Font << /F36 464 0 R /F38 509 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F14 694 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1794 0 obj <<
+/Length 3132      
+/Filter /FlateDecode
+>>
+stream
+xڭZIw�F��W��g����dYv��eG�3��� ���,�<�~��
�)y��h4����
+�gw3�������w2��,D0���ES�P�,�|v�ξx�L�2�ޛ6_�yq�O�K���/ۢ���;}L֛�|��lνz�2�Ǖ��y�������G
H�3ޑ�,R�l�>��?K��/3��8�=�s뙒1�Zͮ�~=��
փ�3
�z�i��j���]48�4
���̹��F�C���,+���&Ki��7�����D�6 _��N��3�_Uu^�
+Ɓ
6_~�]�A]%�̊�f��{"���^����:k�Q5�T�X`!���|�<�U�yxL��PҦd\FN�F�#zJELJ9V������]5J̈́�͜j�	��`!ݑ���p���w'^�r���P�Qj� ��:8��A�0�a̔x�N8���$=�89��v���L��G��
�`D����C�r`���k�)
+N�y�\�i6aوE¹�&A��K���rX�ދi?/�&Y��bL)���mj~c, pt�%Un�b�W��/�S������H1�����\
_��KV
�B� Y-�B���
+̢�$����
���1���T��o&�'f~�dk�m
�%s�����8�5�kAN��T� ~#\�2d���p.��ږX��
��d	ܟAiaJ+���%��+N�+>��Q�А���z�FľKnu���<�k"��uS�7���A��$�a�~�W։ev�l]�&+�#ʍn�:_�۶N�2�$�J� ��>g�eB�
+7�S2)�J#S*��+z4,�*`	L��0`a�4r���O�W��!}P1�T�O�E�H�
��\%�S�HA���CL� � 5�I� ��"(2�X��������	`����<�ϯ��,{�!p��o���`|	�

�h�K��FWT63�궬ha�Iq=ri�B�
P����T�����V �P�~#�^�Y���#}�c�mw�
rڋ�*BHoQ�t|����bhD��ɇ��B���
_�eEdJ�
�8��#��M�9䮚5��.y�u�lY��k+��
����<���=��
H�.��m��@

+��rI��j�������@e���?�#����'
���۬ʊeֽ���Z�t�{L��?_h��o:QD�p�X��	�N��,IM!�2�25�
+"ĩ�����j $X���,�P�}u_�

��X{[�t{i�t��UI����v�� ~�gZ9pEx�dA���^Fmm0�[�׶�Y�͢�>x"�Iq�T���
L�`؈0ģx
�_�Ϝ��#m�X����v
.�i�n/���l�N�~��]�rӉ�ND��U�ʫ1�ْ��`��[Ru�٬�l*�0}�J>K�:�aL�|#�(��ґ~����^ r}�Y���\�a"��ԱF�]΍O�����Zf�̩e˶�Ja����V�Ԅ�(����m��p��'/�.��,K;�e�&�I�cE�y�-�����=
+�(' ������Dq�v̓�FS�����r�e M�%,4RF1���
����(+��m�Z���)��P�Mp"=��cs
HCn36�c���4n�4�f.ɅЄl��4���ft����3����h\�RĴ����T$�ޢ��*��-�����&����?
q��
;8B�C��aK�E�d��0�e<�y
�Ρ~�n�:�F�0��X�����|�l�M�����5!U?����&�=±��ʕx�L
+��
���CR���3� ��
b��MLF��֦H)xM���j3dƸ���k�3�k�f�
���V^ۘ_|�>�	|8Q��
+��� �(��h� eH�捫k��b��:+ͬ�@���B��/�
,:�:m�	5�gm߼�/��n4��Z3\� �lH�����P���e�R�u3 �t^Y�-3�G�Z2�f�f�:��F%:b�*�翏|�w�_��
����b��
��{����]4�
�
� X��
+��N
��:�8$
����
7v�jka+��F�	��i9��{80��=�� ��)@�-
��-*���ԜSz�sMwʠ�]_�i#��=0�P{δtp-�A���0�� ��t!_+
}/]j
G�
�1›���
��S<
��UӦ�`�e��a$s�V�d��}�v��
^�� �a���Y�����C��C@�z?h�
���|� ����͈1et
%�X� �m5IE
�j۽����
V��^�W]_`A�2=�y�[1m��U�G��xH���WW��,M��W#鶆����K;��
+9A����3�}�:�(+ǐ�'X��q"'9�h�ŀ���GnuR�׶-��'�������
�����f9!��1�z��0�OH��jR���ʁ��@��]��c��u�����
j�Gc�
߸�g?�eT�%�l|n�C��2@��+o�]yr�����|�m�
z_ml�f�UN� �يkIl���~>���^w���_�"��gz!}���`q�'E�O�
d\�	G�n<��yrD%�b����!�������wg��xH�q��C�'\��0,���Uf�����v�1�
k�7��"4����']��`�6�c�HmE����7�Ѿ��>.]�]ыQ�!���c����wD����}
��B���9�����/�}-�M~d���g�o�	��㦂0�n�m��`�X~G~�Pa����u�*(1�\��I�G�F8�w�W=�����I��?���dK}8n���_�Hד͎
�|�)@P.<I��
R)@��D��
�'t���N
v%-��jP�=8�,���3RI�m�����&y��r�����n����.�,JQ̄/_��O_�E��z�
yw�Rng������7F~E�A��=ܗ�)�*�Q�O��]���P<��+~=
��	k�e�� d������i�ϐ]����M��U�	"�����M�Ή
+��
=�l+z�`�
�!���

��8
X�o]�b�I�g
����V����-wv���!{��?
CP�R�

��i &Z�?h?S_��j�/(X����h��c�,�7͜=4mׅP>�����֜!�h/�lW�Y����J<7���Q �I���� ���Z
+endstream
+endobj
+1793 0 obj <<
+/Type /Page
+/Contents 1794 0 R
+/Resources 1792 0 R
+/MediaBox [0 0 612 792]
+/Parent 1782 0 R
+>> endobj
+1795 0 obj <<
+/D [1793 0 R /XYZ 86.4 726.045 null]
+>> endobj
+414 0 obj <<
+/D [1793 0 R /XYZ 86.4 646.538 null]
+>> endobj
+418 0 obj <<
+/D [1793 0 R /XYZ 86.4 428.312 null]
+>> endobj
+1796 0 obj <<
+/D [1793 0 R /XYZ 86.4 369.231 null]
+>> endobj
+1797 0 obj <<
+/D [1793 0 R /XYZ 86.4 345.243 null]
+>> endobj
+1798 0 obj <<
+/D [1793 0 R /XYZ 86.4 322.362 null]
+>> endobj
+1799 0 obj <<
+/D [1793 0 R /XYZ 86.4 298.928 null]
+>> endobj
+1800 0 obj <<
+/D [1793 0 R /XYZ 86.4 272.07 null]
+>> endobj
+1801 0 obj <<
+/D [1793 0 R /XYZ 86.4 254.375 null]
+>> endobj
+1802 0 obj <<
+/D [1793 0 R /XYZ 86.4 236.681 null]
+>> endobj
+1803 0 obj <<
+/D [1793 0 R /XYZ 86.4 218.986 null]
+>> endobj
+1804 0 obj <<
+/D [1793 0 R /XYZ 86.4 201.291 null]
+>> endobj
+1805 0 obj <<
+/D [1793 0 R /XYZ 86.4 180.727 null]
+>> endobj
+1806 0 obj <<
+/D [1793 0 R /XYZ 86.4 156.913 null]
+>> endobj
+1807 0 obj <<
+/D [1793 0 R /XYZ 86.4 136.728 null]
+>> endobj
+1792 0 obj <<
+/Font << /F36 464 0 R /F16 453 0 R /F8 465 0 R /F48 609 0 R /F38 509 0 R /F49 636 0 R >>
+/XObject << /Im2 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1812 0 obj <<
+/Length 1707      
+/Filter /FlateDecode
+>>
+stream
+xڭX�n�F}�W� Xk����M��i��H�@�+�E�$�������-:6�<i/ܝ�33gfx[/�^�~]�.�y�%$�X�-7����b���So�y�|*�|�
����w��\���/����9g~:_P�G_��ӭ��7eӦE��yU�`+
��VٱV���׳���?3
+M�v�C"E���O�/��k/ <��W���<!
�»��9
F�H�
+�E�zS��G֔+S(ea��ʠ
+�U�ֹj�4-ݺ�v���U�v��T��ڎ��(p�\^�o�(��A����-�p�;
����9�����bXp�bN7�2��bB�	�I�������7��_XIN$���~�M��w�u������
�	��"s��2_� o�~Qv�[�5[А zw<�ǿ��p�0��c/`
+���Z$'wSNI��l�������\
D
{��[qs/�p�SU�k;�}K�~_x Bt9y�.��zT
�H$��k2_.�e���<D������Tu�qc"�[p�
8��$���Ժ�
x�V�FȎ!��z=G�g�p)��.5���r����	|���Ly
�� "�D���o�5S��$+�} ��������x
Ρ�9�~
B�;nZ봴{+��ܪ��]ZnM�ca��헍ٶy	�[���D�]c�-NN2�L��n��U�& ��>�_�����9g�%e̋ 8N��hr�Ӧ�˱
��`�o
+a�޼�]^�y3!Wp��"�ȱ��^^��u�}�=��$}4�WE���۝�Iߒ
+��S�O����j�L�#��6
lQ�͌�`$`�|	��l�]1��Hq>1 ���qX|�Ey�u��~50&:���Mm5����i���\�@�"��n6ǕI�1�`�1p8����{�'Θ/zf����2^�8c���"�΂�SO
�N=�w
��)�0ѕr��ѽ
� �;
�z�ț�k��z�VU�r�˷�K�5:�W`u��[�1^ͼO�+BG�-�y�
�9��\�z�3�ql�8��X}kU�8֓���J8jTZ�\D���񍽹5�x�������� 
M�K��&�$��`+nnv�Ff>�bl
5gt81��"A�IB
��jQ�v\�3��L��wU�plu2���_�[u�I8"�8d��؄Dž��2ݟ%m�t�|�U	�/VSe�rH�' ��Y��H�Mu
�\�8%P��H�g�9�1��о���}�vq�b� ��p �NL/���1wa�PW�:��I�L���j�2,��Ž�w�	L)��j���n��3ή���D��Q�$���օ��Gb�ޛ��;ދ"��ay�Xp|���
+���|��xP�4v��qoU�CG�"���-��ҩ'�����y�3͞=��tI�K.Ǩ<���*l�Զ��4y����t|G�O(E�d�4B†^�bJ�2Cs�����W.C3�hh�P�\��C<5�@:���MD.?{�4Vp<�d2�cK�;D��,�B���gZ��)�}�ã
¹�W:�:���
	ͷ���0%+�]�_��s,��P�n"m]!%�I�t�x4�F��kegYe�Me*B�=4�ե:n:�.�Q�caN��'�"��P(��oFV�Օk�lq��L�
W
m!�p'jE(��)˜{!
�hf?�Ox�ß�p��L r�|�Ү�EF�N:N�I 9t�����B���V8�P��* �!T5��'����G
+endstream
+endobj
+1811 0 obj <<
+/Type /Page
+/Contents 1812 0 R
+/Resources 1810 0 R
+/MediaBox [0 0 612 792]
+/Parent 1782 0 R
+/Annots [ 1808 0 R 1809 0 R ]
+>> endobj
+1808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.922 578.75 484.135 589.598]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.1) >>
+>> endobj
+1809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.616 578.75 523.829 589.598]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.2) >>
+>> endobj
+1813 0 obj <<
+/D [1811 0 R /XYZ 86.4 726.045 null]
+>> endobj
+422 0 obj <<
+/D [1811 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1810 0 obj <<
+/Font << /F36 464 0 R /F38 509 0 R /F8 465 0 R /F16 453 0 R /F48 609 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1816 0 obj <<
+/Length 3256      
+/Filter /FlateDecode
+>>
+stream
+xڭ]Ms���W�h
��#��*�d+�T|�݃l�c�ȶV�l��%@M� 	6.#k�|x�{��������oW����I�U`�J��^y����������/�f��Vyu�����z���כ��_m_�����p��~��^_o�������3]��Y?m�ǟ�Bo�M�Kk��67���|����߯�+���]=�]��_=�����L��Ow��J��$��]���_W�Ա�Ϯ�
�Sr�W+k9
\
�z;�� M����O���O��
��=��O����x!nB&DH��Ri��>��:�K
�ļ?(��V�(��"6�W
-�qz
�,s��ư7A3

@AO��.���
4����)��Y<�"x�����g
�/-Kc�E�2�Ň~��w믍���K�;8dʙ1�F��
g�$�e�b������0�5���bi���ܧ��eF��>�G�]��@A��D�

?�c￱��[)��CI;p�	�FI;
��>�����
>6 Vv9�^ɡ�1ki� �
V�Q6�LQo0�O7�&��|��0xIBȩ�ӂ
"KX�Q����2\��p_̌
4�
���#��y����PY�U�
+2�
*0����N#h|r�	� 2�`A�HN��(:�ǔ�6Z�m��L����^� b���5�"�I��t����1:����(z&Wy�
\Oq"����*O9�>~���o�+��i�~�t��"T���'
�y���QO�L����S��j���

����fǟY�Z
+ح����F/ih
�Y�j�����nA\���k0����~��z\>t��yU| ���72�oo�K���\ڰ�h� ��U�Q6��e���6'�L`��=�>~;t�
+�nAC&���#�������&g��|p��E��Ϊ�(;K���.X%�}�6	[����h,%��2�R6VoPv�S!� )2�s���e�򳑆I���tϟ�g&�x���TV��^�B�����=l� x�콰�C��^�3��
���7�}}�y�1��ў�x��K�Q����G��g�-
�$�@ã=��m�4蒑ɫ%ӲA��� �߫��n݈k6��P/�9��m0
����_=Dy�ŤY��ЀD�-��E}��;�}(wq&aIQ������}>�x5�(�"S@���	

A�4�
m�N�	��mnxwc��z��n7�t��׃S7>#]4h:O ��t1=�s�EOl4�v����FA�f�����N�t�;�<ث�LQ��/���L�cΒX�"'�Nfh}��sH���aq��>01~Rff���ɾIA�%�"%
+��E��
���(���F�D�k�c�yەSIJ����Ao:�7=+E��)�/3�x�#0��Y�v
��,!=��We	z�R����Ա�DQ��;%�����A�Q
Q�$��(� U�I��I,���k�+0쮱tA�5;�3o$-_��
m�/�d�������"_�w�/{�塜1��xp2��d
z�y
+��e����1zB���i��E`Ə?THÌ�{��w*�
ܩ��^��je}��!�s���%�F5Dyz��)Ò\A'�'
+&�<W���-r擭5�(�"[�����D!5S>4Iұ�6�a����Ӧ
���<�H��Mo:�7=/`��Y8�"`_����)O��P
W��FC�q�[���ɡw���?cA�Z�A/��O�h�H;��!,K���M琧��W��Bܗ�['�
�j���8vVҎ1�,<bʯo���A��Ι��a�@dͫ1ʚs͸53D��0�8bH�y����9���-{�L.{
��w
+�"��r*~Jҁ,
+D�\=F�r
+X�M慎�����d�y`��[�7:��7Lm�h0E�d�X����F��F��(�sX�b[�P�El뱁5ڷQ=	#���0A

��g5FYO뙤�	*4�g.�����B,�dj9n��}��uA��2#�5��A��.��(����Tk��⦌n50�ÏSM{����|��Kפ���qZ
!@du�1��jX�@S0��-��l��mw*\���ъ�-��>��s���٤gn�|֤��l�e��ȊJ �(��l�������Aw�\G�%v�#v#��v�ïI�MG�;�NL�sO�� �MW�Q6���
1��qM"
f�bv�n��bqki�#�˦�;z�İl:���t�He@q��>��qy�P޹]��Pٳ�􌍀M�y�����R7��2�g�n�*����	(سz����V]�arCx�F=D�f2XƗ��l�!�
s����� ��j꺡�v�kLZ��d|�Ԛ
�
+;E��?��;�Dֽ����L3K���Ck��P� �
i����|�5ve9'��L/�
ӛWe��lg����"ۮ�l;'��T��2����\gW���'��ţǘ������J;E�d6c"h1� ��V�Q6|JN�q��y���L��)c��/vZZ� @dE�1ʊjX��@U4���M��s��+-� �y�L/GLo��NQ:�MI���7D�[5F�o
+�AS�(:�~�|��M�JΜ!U�(Y�j����̗"�@1ʷ��9W�%�<t���p�g7Q{�H�
�=s�T{�@d�Uc�
'��'@1�I@�|P�]:n.���-T؎�1ۮ�qV
�"��|"X�i��)�|�e��s_�
�x�6�v���K�5���/��o^
�"92�%��~r�un
^ $O����S�6=T �5=�ߠ�4WzMϪ��;�kQ��:��'�`ި��������ޤ����<_vg�@~���^���g ��f�$�j��p��%'�p�sq����R߸g����n(���|S�S�V��<Ӟ�3���|c'��'}C�ȺWc�u��	kf	?�~�̩#���˗��h
��ē#

tt��������0�y{���⻦����l�j���⻷���*0�l~r
�s�3��<Ƒ�e�!rS{���,Ui��)�l�e�i�����6@ѦI��|P�Y	JN%��~��&*��������
�@d�Uc��&a�
�or����SWa��l�WH�
��G���Vc���|��x"&_џ�/�s�0�@	'dv9���MT�)R'�q�<���p�e���k�D���M
+�+��d�rˑ�e���ͪ.S$?><�B�]5D�u��;�t bU� ����?��
�=G��,��M�.z��'�9�<�eB�Z5D�k>��N
p b]�����=
�V#�KV뱛��A���7[�
A�$�?^�h�
+endstream
+endobj
+1815 0 obj <<
+/Type /Page
+/Contents 1816 0 R
+/Resources 1814 0 R
+/MediaBox [0 0 612 792]
+/Parent 1782 0 R
+>> endobj
+1817 0 obj <<
+/D [1815 0 R /XYZ 86.4 726.045 null]
+>> endobj
+619 0 obj <<
+/D [1815 0 R /XYZ 255.116 672.857 null]
+>> endobj
+1814 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1820 0 obj <<
+/Length 1940      
+/Filter /FlateDecode
+>>
+stream
+xڭ�Ms�6���<J� ���ӦM&�i'�)Ɂ��D�Q${����
�	��dY�]�>\K�7_��1��jv�L�7�4W��3L5Vzf at 4W���\(���
������޽��qq�/@��Ņ��t��/���_W�?���?��M���q�}���~�9�Y-w�ŗ���߯f?g=��5s�47w�O_x�Ŀ�o8�����I��i>����+9�y�2�\�p�	��@��]-���z�9
0��/�c�oE�
+es����u���&�F
>�۬�w�n�����e�AͿ-�|�E�]�O���\�M��k~���n���q�X��^�(�l4�8q.x�$mb�D0-�9
.���I��^���̡�=D���r!;Z^�]X�$����X1)t����%��1a���0�M�4��rbܣQ�3 g�1.�w>��mo�8�wˎ�*���0�B_B�-SR%C�P�h=�%(�G�\Bw;�U
0�,�����;�w�+q��i+i�Tk�o ��H�c�\���I���
+t'⭐:�8^vH~[\8�6�>�Z.q
f�@
+S�}%O���nЉ<Q�D>���Ic�!�@������Ra��%@/�Y�8���h�#��9�8. at zv�����CH+����깱i��M�X�~$$�2F�@"hD��5� 9��r� �h�� �v��������P�ً�Q��5��D�~ �hf9�4"A�y�
.�}q)���OR�R��m�{BD�ӌ�FD(u����,A���40��5��	����K\����5LR�R���-��|��<�
7y�2I�BȤ�zb- h�LVk�3�;np�4�8Z�IjAjw�]o�])0ܗ�����z�;�%�!�S�b@ЈUk�\$��!
�	L�Pjw��>������� $�/��/�?GP�`P�s��A#�T��GI�:�W#
m���������v�:�BJ��gh�ƎA
r�v��]���ڍ�|�񕆇�-=���	LG�R�E��n7A��$��~���I�1�duT��
+ �f
t����b�F�.��h�M�D��D���C��ae�q��
5�9�
+`H�
�sy��HC��� nۍ�-{(1���|:�$w'�
@�滘�x�i� \4xѷ���S��"�ȎD�RGʚz$L��7��
�hD��5�0Y`RC9L8^i9L����SN�"��~D�R?�{$E�2+�%��)���SdÇs9E8^�IJRj����h�=�ȎD�RGF�{$EJ3|~�("hD��5�)\�*YN��j�Z�Z�k��r��xlj��sY���%����\�x�&��������
+ُX�~���H��;�5�A#bT���H�*JBw�
+���O�|
+��D�&���f��GB!�ĻH�hz�D��V"���S��7�L�Rj���G�~�@�g
+�}�V��.������~�c�o���`&�[���tD.5]���f���H�@���|�a�1g��
+GWu��~�Xa�2n���̹���
�#�G[�ҍ�,
w�Z#{t�H�ל+���p?�8���)���k��v ��0n�A	
i�&=����4֒$%5�aG_���AЈy�����#
��e(�cb���
%(�7��Aٷ�ܖ�ǟ*Ɖ�L�)u��5I"@eF_I�CEЈPUk�2�I���9�t�8B�Z��I�
��"��J}kQ�H4)�,�4E#�T���I^Y�p�擔���s�RzQ��#;q��|��DB�	,�ij��HS�F�&��[e�h�9ZMR�R�u�JR.B>��#�L�h�|Vk��xY�O���$�!�
[�`|yq ��Cߗ��%	��� �ǔ)�j�<N��PY
�#Y`��)�~Һ�V�b��
E��
��/IH���\�N)R4"V�y�0��UV)>��ťX���]�
��(Ɗ�Q�*�h��
+V"���:8��7���{ǐ
+endstream
+endobj
+1819 0 obj <<
+/Type /Page
+/Contents 1820 0 R
+/Resources 1818 0 R
+/MediaBox [0 0 612 792]
+/Parent 1782 0 R
+>> endobj
+1821 0 obj <<
+/D [1819 0 R /XYZ 86.4 726.045 null]
+>> endobj
+620 0 obj <<
+/D [1819 0 R /XYZ 238.927 547.3 null]
+>> endobj
+1818 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F16 453 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1824 0 obj <<
+/Length 1935      
+/Filter /FlateDecode
+>>
+stream
+xڽY[s�8~ϯ�#��u�.���,�-d�L����`R�b���i���%LϾ$�|����t�w��<8�s{����W��P�qN<g�q$G���z�Y��/��n�P�
�u�Z���]�fF2$��z��
�BS3lr݇AC3`��Y��}JzyfKG!�	�C=��k�ۤOd�?`܃D��ކYnZ�vka���^Qu�k�H�|Wu�,<��eW���z2���ʼn�06�,���Az �
��Oۍ��?��u�
�wz�z�#�yf�y� �SJ{�a�]�����v�z�"
+�p�oM׏��^�y.��l����$�M�:�Vi���$6
��!
+�8��ޛ�!�8�.�)V��>,�xM����=��ա���˫�0��:��
+8�\�9����W�Y��D�t
K��aT!�������U�Q�0��aa�.\�	�M0먛c	k��J3�T*���tj����õ�N}:�HP|᧳:�AT���+�S2<ĮD\�Ғ��
�a��iL
���5A������c�1����K{

{��5m� /�83t�-߲]��`��bX^V�P��0
+,��8��o��8 /o
X2�t�1�x6fͦ�P"�.@)�)�],�w-�p]�$�|A���&����lTɊ�*ȲMa�H���\A�BL�.\��"�r�s&��DH'�"���w-�L[�	(� f�&�d:Y
�b��?8��$��s�k�
�"ߟ�'k�:
)�
I���0���o�E�9u�`<L{�`B���\��>�d�3��ΐ�!4L��C.<����W��9��z0���H�%CB�b��(=e6\|n�� I'� %m"�3cR+=
PR�>�����NP�i�����D~�#�
�{Ck���
+��Բi!��a /#6���V<>�r��
|�J%���n>
���B�奩�#�&B
��^uj��!���pe�6��k�^�� �:��$�ٹ�%BVP��.�S	+O?�o������w+3:ʊ��>�}l��3�����f2�nY9� 	3P�!�mo7)	���"�.�����}��*��SCHަ~4X�t,�
��b��]�"�@\�>
���h��t�"W���p���QJ��K���CJ�y�0���c�������N�Ww�Y�
����Bai����#m��^��Y���/H��
�j�0��
+;߅�� ��&�3����.�B4@���x�B1���s��\B1qPl�x�|a`J��C� 
��9T�����3]���̪��b9k�`8f���Z�}
��xy?���6�<���#��k�a�tE��RRn�
�.X�hH�_Y�vZ�ze� �$�_
���u�'��5&=c���mS{J!�C���׾XA
+P�h_=WV��g�e��)���	*���)g
$��
�����eU�q϶7IQ]�%��Ij�EIj{l.H��?�'.񧄘L;)��Tey�A?
����MA2x��Rm�
K�7n�7{ul7�ܾ�ܼfEu횕�
,�¯�#�ل�*�^�e�]m���Jvs�`*!-�����+�.@�W�����Tt����M�O����l
������pY^����|�z�=K��U����\�O}�v�H=�ø���6HcͮFe�[��Ӓ�خM_�ؾ}�/O���cy��Bq�,����K�/0�1WtC@YX�E�@+�A_&`�����U��:��
��g�(a
J�B���<��H_�"�d��A��&���J0T4��E"��Ȫ
�M�V�$�i�I�}`<y�|9��3ǝPN_s[E���(�hE�:��p��
�
���Z��Ӵ�oN��ԭ
d?�B=���Z�)
�>�'��q�h�.���:1��N���{��)a=�w���RBǹ���2+��H� E�VY��
�����*0|S�ks+�
�<
���.�
+endstream
+endobj
+1823 0 obj <<
+/Type /Page
+/Contents 1824 0 R
+/Resources 1822 0 R
+/MediaBox [0 0 612 792]
+/Parent 1826 0 R
+>> endobj
+1825 0 obj <<
+/D [1823 0 R /XYZ 86.4 726.045 null]
+>> endobj
+426 0 obj <<
+/D [1823 0 R /XYZ 86.4 701.138 null]
+>> endobj
+430 0 obj <<
+/D [1823 0 R /XYZ 86.4 485.931 null]
+>> endobj
+434 0 obj <<
+/D [1823 0 R /XYZ 86.4 283.264 null]
+>> endobj
+1822 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F16 453 0 R /F36 464 0 R /F48 609 0 R /F11 691 0 R /F10 754 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1829 0 obj <<
+/Length 2685      
+/Filter /FlateDecode
+>>
+stream
+x��[Ms�6��W���%>�GWQv�:v֒�����H��)E%eO���� (B��v�'� ����~�F��h��g?��|���>�?�$Gl$H�8ţ�r��3y���݈r�Aὦ���9%���
*�x�.7uZ�S<�7���t~��
C�h��1�����_~�FKx�n!���K�o5b4A�����_gQ�#��|dBb��~��\
��H"��c“c�a*[�CH�1��9��ۛ�
PJ�IP�QL�����Z����Y�"I,7��DŽ(^Ή
?�1ΪǬ\d���q�mju%�i^l��'x�я��#NjŶ���yC����*m��Ǩ�Uf�\n��|4��Y#9�"����0���ļy�Ϊ2-@�(mQWl���Ϻm]�ߕ��
���Wj.ەn�������/j�t���,]���%ҫ�,���	3��%��(#K\"	C5��W7Ws�4,fA`F"&.l�8E���q�?�5.�2K
7�u�<����O5Qu�����A��m��w���>RX�\�@J,�hRb���Rf���.�`�X\x����#Nv�p�)V`�=n���>9�%���u���D54��~y�S�-�l��X��S�Qo�؇2�B�
XT��a��QNZvo�?N�� ײ��
Įp�M�N��Z�*,�m�
��
]Sw�W��M[j~
^e0^�^#p�2
�0TC5�wә�H�c�bD��I�F�
��J ��n���s�	ȗ����*��˭r��n�fsg�T׹iK�_ܲ)²9DKc`*H6�PX�l~�g3�as�'BL�/�GH@���c`I`�� %� 	� ��w
3_��IIGZg��}��V�}=����sh4/�U�����8}������u�Z����mK;$mBO�a�P��[�ara��"܊����ͤ߻��5�����q�J��#�J���@+�M
�mN���/br˥�ٶl���@|�A�Z
#��S�c	�#�9�F���f� [...]
+�bR�Y�t6����Ӄ�<��$����3
'H�d�0����AC��Pl=�|����d��$|
�!]
S�Aon}#$`��$
E:�w�������� 
�n��~޾S�&	7ʣ�&���>x�i
k�(��N>ᄍ�ڲ��O��V��Q7�$�����S��ͩ��l��
6o��b��. ��Gx�#�]m�r�����j^خ��Y����I�u���<,��1j(��
�O��g9!@M����_�kɔ��tc��5d�J���2=�I|�
1
�
+�w���V
���|�x���v��p��6g2!hq�׈D0�v���E#+~J�Al��1�*��x�h�
�JV�w�‘,�^jJ��u�դEa6!�a5�ӽI��!��m�K�K�r ����|���m8w[g�~0�M��"}^~�ֶ�o2�(�Ǵ��A�����ij��������v�}�O�%���%=���gT��[��ՙT���&�����i5mL���C-"���*����(�L�
5�,R��IB���0��]����7GT5 �U�.����ƈ��*�H?��
��=Պ� Z[��N��,|j�
�^�ߺ4~p���ӄ�(�~(M >HP �0Ӆ�����
+�{�7O�r��~��,�*v�1x�vGZcxw���Y�3/T.a��D�L��'h�V,��Q	�4
Bc P�ct�~����9}pH��Լ�f
s�!xj����k��2�+w��[�S
�0��!���H0D����=�Ee��&�� Ӳ��|���ߧ��$e��z5�ZYC&�.���^/OMT]��]�S�'�R��Oz��<�q3� ���
{p�97EA�`�f}�Ȃ�Qgp	�!:w�ea&�
�
���Okk���P��p�R�����"�;�EU�KO�����ȁE�_o���
Q�;�WV�@1�]���d2��|ង�[k`���v��6��m�
�ۭE�
���[�i�b&���ɓD 
��WC��
�%;HP�/���g�>^��(a|P�"�,l�™��W��t��Ox邡�ݓ��/X$����`Ka�
�
�R#w\���mO�\�*]�J�Ot
k�
.�v8
?�er��C�<3���>c�$���IOe�@��|����1B�/r�6b�G Pk>
Pmd�~��L���u�8"��r�V�df}��S2~�uf�m�]�A\c?C�Ki�u�s���6.��쑯�CS�a���^銁r�=	d��0K<.T�ǒ�*�9�~�' �B�
t���X߬�/��f	����I�h�P\��]Nz�����f�����N>�y�2��?��.]�?�i�w

nac��PR{�T����`n�0#	��2�z\KTwM���]ȶvy�շ
��V$j�W�VʻB��v�1q��ƟZ���'�R~�Y��Ɠ^���x�� ��4����1U��+��!up�*�����Q&�L
��Lpe!@�+s@���*�,lz��⯑^�Z����M��
+endstream
+endobj
+1828 0 obj <<
+/Type /Page
+/Contents 1829 0 R
+/Resources 1827 0 R
+/MediaBox [0 0 612 792]
+/Parent 1826 0 R
+>> endobj
+1830 0 obj <<
+/D [1828 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1827 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1833 0 obj <<
+/Length 2660      
+/Filter /FlateDecode
+>>
+stream
+x��[�v�8��+������t+vN2����MO/��y"QnJJ:��S ��H�
#=��
P] u�p�@��1��ۓ_�N~�`2IQ*�L�
-OM�d$��%��~E�t�4�{s���̼��f��Y�_L��j������tLS*و������'�w'�@�	���\&���o��d߼O0b�N��q���Qx5OnO>���l�n�6��)�H�
�t߽9���݇&�#�뱩L�3D�n��Q	UHP�^~8���S��*(���W�����H�P
+��1��(EGwOy=�����L�����Q�����2���~�(��36Z-��N�
�4r�=e��E�\�/� /`L^��|T��)��l^�e8����
�=�D"-�1!(r��5A��(>�i0U��۽�ct�Q@���;�W��w���X�fv����nּٸָU�Qa�*ȨgY����r񜭋/�
�X?կ�O�馪��`h�19��Z�J�o�tlF��D��zQ�^V���	N����rm��S�-
+�0����^�i�Z�~;b��u��h�(ᔎ�Q(D0��F��=DZ1�gc�����12rGƳz��bY��79��k�L�3˲������+率���=��R/�}.;1v�s���}69��@��A�>ޞ���
�
��}6]~)��~�;�o�&�M��_�Q�:d�z�w6���:�Ëv
��<��aY����L��a��4�ٱ��n�
7�)�����e
+\�#�dH���D�,BY
��)̜Ϯ�&�>{{�,9RRD�p�C��ݡ*AF�>�>V�����Ϋ2��{��M�o�Z�<�ۍ����T��6|7��W�ϽS����=�� u��
+�0��}q59���am������監>SA��޷ܸ`SN�ɵΧ�W��}�)�

c�={�g�1n�vV�y/
�T!H
1�eL05�Y1����a��/q�S����c{�c�
+��Wt�����]p �(�*�r���l|.�p

+GN���o�@�.�3R�Hxo���F���� !,��JC�5�lIz���������pE^E��T���~29��ݧK*�M�
[n7�i�Z=l浿C��Y�;4�
��^
=�jP�
+"9Ʋ���I�[�
+�P�� ��9
A{�b(2�6.�n���-���UP��Q���a��u ��A *��ʪ����U�'^���bMtvo�(�M��/�����#��C at Ga�."EΦ�#J��`m��]��Rѫ�-ی�ÄJ���q�_
글d�D��Ʉ��'����P��.>�D �I$ �n��d�#]��`������BAz�������t1�릋b�.v�ᦋ��Lʟ�uyY��0���(eQXeL�z�h��X�vWd;��ۻ'G
�$h�4���r���`���xtP������rV�-�]���1��_n�
+:�.����;d [��F��:S�=q�����qQuHv�@6r�1���Z�o�;w��v�������ZD��j�t*��퇛Ҁ,�p�c�|�x�P��b�O����^��'K�I6�
��1��b�
+	�.�QV�(V���L �D£���P�]�7���7
5�4�W�W�:����j���4��<y�ŃM��b��ͬrY-B���6ӘN�
q��`�
+G��ǫ��
����
�����s.����C����������^3H<�Ɣ)m,짛���]�@���B��#@�5�
���(7s_,�uU��4�=���a�)]si���7�A>R>ݸq��^���B�il�b
7�)���v}�����7E��nj�z7�*P�)������	@o�'������t�r/�c����H
4����?L��#�ɢEr�)�],�ݽ��y�yrD���h�
!GTG�6� r��V�x],�ո��	�NF }R�O
+!�C18!LϥI�w�ghPw��=�0D�!@�d �I�/�l���%٢�F�����P��I`
+
+�C� �~c�:��v���T0�M���V����n=��%]mb{g�v��ɘJaBx��E�F�X�
L믇�Y�
{$��
�%�6����*�c�:��C^� ��>�>�]W�ǨA�����
0%��#�zr�q��#�cGt;ؐn�`-�j
�X#
�R�&�נo;�
���h.� hۈݕ\ʐH�^�w�p�j�!4���V�b|k��yZ3��}�\G8��.��s'���cJz�O7���Iǀu�I�=uu�A�P
s�k���%ퟙ[�Ɖ7]}A�����:
��:
^��'�����U��WM�n��y�R�
m��
ђ#����O�*���1N(
+" '���b�(���Ty�zX��@u�<@�I�B�Ce����I{�$?��;:��7��k� 
RX넂��Lzy�`�?{�! +��{;�?X�e9�Q����N%7��=;��=�����<,�L�kQX�L����� �;l�QM��C_�—��˜D��:̞�y�!1�S(�P����;��#{f0�2�#{!n�}
+�*ǽO9�Db��DY"�"�
�P�-��h!hυJح�'^�
�ƈ�8DS���7*N�D@�Z���s�B�?�Fe�f��(6ۘ����J������
�gJ�敊
�'E����X
������ۣ�4���QP�2͵ �������;���]�_ؐ��A�)
+endstream
+endobj
+1832 0 obj <<
+/Type /Page
+/Contents 1833 0 R
+/Resources 1831 0 R
+/MediaBox [0 0 612 792]
+/Parent 1826 0 R
+>> endobj
+1834 0 obj <<
+/D [1832 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1831 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1837 0 obj <<
+/Length 1947      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�H��Z����~w/
�]I�Nl�lRY`�m�x8<&���+��HX/�
+ah�Q�=�u���)�����a��9W�%V1
��4�Dq
'���ʨ�}�)��9|/}��.g�Y��
���z3Zt9
7�dug0���PX
�����oߣ`�|
+"­	~����0x5
�:7�(���n�2µ\���ݗ���Д	�M��*[��	�f���2M$�س�ǫ�]	��Dr��Qp�y�󳏗%�F�
+��x�Ǽ
��w��uB��7'd�G�f��9^p~���Ѣ����u��.3a<�,W��<|�.ƛ�r�-~��p4�œ��U<^&�/�F�_]��n�p�=*(����X�����/Q�B	�R�/w�a	��pTU2�(+�VPBs�EAՊ�"f)%���(��)��u1��~�!�KCG�u�پd/W��f��
MPX![�B��$N�P�0��^
��H�!'
+PEkX�����Lb�;�Gs
J�RU
p��_�~y�2>�W��rI����x�\���7]�xG")����=��i��4�	�8�Ӏ�6-�;�O�y܆�����{
���<�C	�;G��q9
B�G�$[�]
�\
'=�$�`�Cb�������A
=p==�
�@@u�ȃ������O��Y��*��o�
�aqR��˺h�(K�#O
L�mɹ0=/�ҽI|�
$��Γc��ޮ����7��y�Ѽw7N��y>�l��/�e�o��	|���q�LE�1���,J6�(�����E�roh�g�+��b�,X8mV�\%��/B�@����k�pԑؕꟉ�F����r��d/7��JÇԅt=]<mg�U�x�v��}�ܺ���M˵$���x�<����R[�����
+-SL���1P]�^@���1P�>��Y��%Oo�SQ�J�-z���]"
H�NO���]�TF-��H�/C�oW�Oپ
"��](=Ű��8S2f��4�Ȩ�Y��
>�'�� <fq�F�>��7R�mȴ?�>B��/JH{�̓���� �Z��z�����
u��u��M*x�s
G�O��7�;��C0%}�
�i
PW��@?��^���t�~,�^fA5ޝ�IOw1���B�a�q����*^O'��,�k�\ͳ�kB�h�
�r�l�$H��E`�����k��|<���s�-�ܹ�U�P�
+_�1e��1NL���4�d-�k�
+�U��@~f(��%ZG��B�v�?D�j;� HW��"b�E!�R�Iq�@�����6P�Q#�ق�4$�v�0�Y��.S�@W�9gi�%�j#�,���j��f�RN(��JT>���5�zZ$�FI�)m�n�Ma`�n*�Y!p�����`����0m��h�0-C;��J����0�&ڥu
\��
��y
5���*�R�Y津�zv�
)�P��m)ۮ!������6�ձ#ڎ
'�l�S�%�
�""���+�����Q�?�/�y�*�̤�ݗ��^8LBA��	gS0	����/���A���� �	��M�Ꙡ�vw�z�mB�]�
�ߔ
�z�l���(���1����Ck
M�ݣ��e�`�
Z'�9

�i�{�������Кܔ$4#Q�����\5�@uռ�Z�LB1-��%�<�r�2�"hC�
�VVAk�"lՏ,�fR���Z�8E�
+�S�Қ�UNi�HS0�6�]�
��
y�z �z~�Q[����&^$Ne(���d����	�xP�����h6l0[h������ Y�/+��T��G���B ��U
�\SӐS�PRۛ%Lq����υ5�����P�
�(N���e�?
���
jCz?
�g�
f�t�u����v�6��{҈����)%e��׹��[�
TG�j;��r��# �Xv�)ݦ�c`�"�ì/��Y��A��S�J4��E�p�{�y�
+endstream
+endobj
+1836 0 obj <<
+/Type /Page
+/Contents 1837 0 R
+/Resources 1835 0 R
+/MediaBox [0 0 612 792]
+/Parent 1826 0 R
+>> endobj
+1838 0 obj <<
+/D [1836 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1835 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R /F11 691 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1841 0 obj <<
+/Length 2563      
+/Filter /FlateDecode
+>>
+stream
+xڝY[Sۺ~�W��3C�l˼�@[�@ل�}f��`A4�q�m����ϒ��$��t�
������M�O
>�P߾�?�*�$*a��c�b"��1"y�σo�;��S���—���O���*HI��.�$U,F�0�p�7�}oA�mQ~�|

��t����}^gui~���@�0�
�,�W����g�Y�11eV���PJ.\�u�>�
��&���e�DHf�&u���
���h���S����u�@`�$��9�?/
��ƥ�
��=��z0�Mu	f�/�O�=a�B0�� �ƃ����w�a�S@�HU��T�S�����$ha&S"���Ę�3]�"T���Rgs=�Q�,�[d�CV ��_
�������T�B:+��\?e3D4���ʁ8��?M�B�-��� JNdC0�4��H�:XY
Tq�oA��@��ke���EV��A
N�^�|����r�����^-+�89��w^��}F�k���G�e��	�����l��4�A���qNW��c
��#�W��M��
$	�n4�oK�t���e��q�	�
r���-R���2��"]�
�<�'����i^��q
W�
{�1“���Eӫ��St�[�par��|�0Y+`p B����qL�Dv(���:co|��tv�\��ι����)�K0�;yށcϴW��qgOQ��^���+���Y�P����K/}�j �� >�T�6�x�g�H�a�|��	R�Y�n�%��rM	J#����#.ؙL_S��`+��,��I�dH�m[�7���Ǿm���!;1�
+w���a
q�ke�'��\��@p�O��Xbl[/4v�.eG�R�&`�=��'=�β\#j���
x�0�Y�Ql:�3K9�-��A��O�ũMK3���sS�1��q�Q�AvH^�T�e5�]Vk��n��V2E���
�"���c{z��e����bt�M�|�ϬL9|sQ��p)�|��*��D�g9��&����<��.}��>���K�j�c,B�L�bqf~���K_
+��+�S��Ou��'q,:�%��}p闇�}�R�zK!SdOK�m�S�?�\j�

�R>�z�:��fǝ�u�foc!H1Bg���ן��/�D��!s>׏�ja�U4QB�W��Y��;b6���
Y��i/}	I�{��Y��/	U���榰%��
fI���9U��l�b{�5d�
+-�xQ|��
*B�7�/?�����	vQ��0?�
���u�ӹ-uU�VI��Z�cg9�u�c�	�oe�~n���<��Vd�
Z�lӘ�wW��uW�t���9���:��
�����;���jWM�Y�����#ۀ��Q�mx�3�tQ���0p�;m}j���_2��
�.�LP��gd2����uf��eJ���q��
�|VE
�V�Qd�^g�u y[|��3H���V�]QI*�N�c���Z�vs���G� ��2T�H���V+�FmU#xF���G���y��GG����P�T=��1	w�n ӈJ���x$_E
m��a�#$Q�
��0�7s�SO$��B���PO���=��$�]J �e��#���I4A[�/ql��wyIJ�D�9m�CRf�"QJh��q�x�̬'�	��%�
6�`s6dF(>�샒
rW�.���zW-�,�v��:ύ.a�Hlg�~v���w~~��w��BL
v/2����Bw�T�����#)j�bvѱ(f�i��0�������������IB�
?҆��O�\� �&	�@�k N1w#�
9�_�V
+�,�`�?:�[�lAO�
�~�
+���2?ł��.�D�
ב����4��jUB�D��&g�aW�ϓ��(�p��)��FQ��\����&ۙ�r��Er}��7���M��Ƴ.�V��-pA��� ���Wu��~�W��^�8�c����`ӽs%�Ylxb[��o
|�w�]����U�1
�r-�*z���Q"V�䝟�`�g꺬�
+�-���י�5[�Fܧ
d�K��j�*V�
+W�����\ڀJSOޯ2��mMî������EO�O٦�L���:7K��,��5:ܨ�6�
��M��|%��*�EP0���5��㇊�ھ�x�9ݦ��E�i��HA���� ,��t4\"�
_7K�)掯>�ͻڦ�����C�\Wj�
+l��
�Ma�H
��S��G��a�r�,@���.��ZV���� �PȎ3��+������M�u9&�dB_��!@
�g��� TFG_
�k�{��_�h�G�����ѪI��e�;]d˵q7��Ы�52S�/8}�!��B�q�/�r7N�*we����9Rܶ�U���K�[q�x��[��4=��PtH��
�)|��p���A���=�ř}��i���Pn��
+keE/m�Gk����������n����L��K����=�y�1�������yI[c��.�6�ͤ{��,�0�y5
1;G���ě5���������dj�������A$�bU�`qY�b�N��
DF��AĪj�E�mV��aa��A&�b��u���J�*!�wKQ�[���"��u�I�F�Vִ��'��I�*
+endstream
+endobj
+1840 0 obj <<
+/Type /Page
+/Contents 1841 0 R
+/Resources 1839 0 R
+/MediaBox [0 0 612 792]
+/Parent 1826 0 R
+>> endobj
+1842 0 obj <<
+/D [1840 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1843 0 obj <<
+/D [1840 0 R /XYZ 86.4 566.755 null]
+>> endobj
+438 0 obj <<
+/D [1840 0 R /XYZ 86.4 566.755 null]
+>> endobj
+776 0 obj <<
+/D [1840 0 R /XYZ 86.4 570.789 null]
+>> endobj
+779 0 obj <<
+/D [1840 0 R /XYZ 86.4 551.662 null]
+>> endobj
+759 0 obj <<
+/D [1840 0 R /XYZ 86.4 519.582 null]
+>> endobj
+780 0 obj <<
+/D [1840 0 R /XYZ 86.4 488.057 null]
+>> endobj
+665 0 obj <<
+/D [1840 0 R /XYZ 86.4 455.977 null]
+>> endobj
+666 0 obj <<
+/D [1840 0 R /XYZ 86.4 423.898 null]
+>> endobj
+863 0 obj <<
+/D [1840 0 R /XYZ 86.4 391.819 null]
+>> endobj
+669 0 obj <<
+/D [1840 0 R /XYZ 86.4 347.785 null]
+>> endobj
+670 0 obj <<
+/D [1840 0 R /XYZ 86.4 315.705 null]
+>> endobj
+668 0 obj <<
+/D [1840 0 R /XYZ 86.4 283.073 null]
+>> endobj
+671 0 obj <<
+/D [1840 0 R /XYZ 86.4 250.994 null]
+>> endobj
+775 0 obj <<
+/D [1840 0 R /XYZ 86.4 219.468 null]
+>> endobj
+778 0 obj <<
+/D [1840 0 R /XYZ 86.4 186.835 null]
+>> endobj
+674 0 obj <<
+/D [1840 0 R /XYZ 86.4 154.756 null]
+>> endobj
+813 0 obj <<
+/D [1840 0 R /XYZ 86.4 123.23 null]
+>> endobj
+664 0 obj <<
+/D [1840 0 R /XYZ 86.4 91.151 null]
+>> endobj
+1839 0 obj <<
+/Font << /F38 509 0 R /F8 465 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1846 0 obj <<
+/Length 1233      
+/Filter /FlateDecode
+>>
+stream
+xڝV[S�J~�W�1TIv.���EQ�Cp�l�>D%U�x�e��{z�P�9/d��������YO�F�����L�V�D��٣��k"r|ɭ�º��'���KK��E
�is��?��
M{7�?��:���i��Y�I�9��[�uwϬx.-��(�^u\n�2r�2+n��b�,�_^��:?�|*��z�f�u���{N�#|a��<-yR�K�J;)d��������}�;ɟ3E�7U�T%yMq�ee�h�о
�Rԋp����v(m5ǀe�Γ��T��]V��=
_�O4��9nY
Ν�3g
f��J�v0
w�IG��s��݉;�ŀ��`£��P��|��q�O��}j�[`!��ZUd
��(�u�
+<�*Y�eA>�&C���[�0���;�>�b��
J)������+Eǵ���
�"Dmn����
+F5��0�4A a�����A={PfY�*�	ߗ���
f$3\
�
Mv"��A�A����`s�;�1&Ic���3�'쑉�GJ�D��D�8�\�fw�ޭ�~q_��4����J�Led���_ɣ�Jڄ�0�ŸT��o
+�
�K�]�E�
+4���^)���\��`�>'ڠ	�v��ԷH�L�y��I�!
���K�� %�j �X��pP��Ģ_�GU/�z5�G�lM'P���K�^�TV�j��X4�����
�Kֺ}`ޔ�T��̕>׷37���2t�P�k�kc;� 
P�j{p�Z/�:�w
�$�%
�
�^�F�/��9`h�1�K��yL��B�oRx��X=#�P����VƼ���#����&E���$��Dզ(�E���v��]���V5z��ۖ�T/�T���KԻ��`��RU��[1Q�%=��nt]�FBu�/�w<i0���$,b�Sw	x��Dw���ĸ�
r�sDa���������&�ӸK�=
+
�BA�H��&SZ��~�>Fu�X���	����@=e��OG���Qo�\��tnZ����ԇ� w�Ùh�_�&$��F�s}�=�.�1����С�;�.��$膞��M�Q����uX(?
+�=Hҹ��^<,�n��������X�ǥ�O;�Q����wM
+=��D

f�J��I{�j�m�7(��
����6K�4��CF�� O�7�NSM*�A�G	���o!ԙ�q@�1R
7in���'�0�s��|��`�v�e��������7�u�tG�=�����
%3�
+endstream
+endobj
+1845 0 obj <<
+/Type /Page
+/Contents 1846 0 R
+/Resources 1844 0 R
+/MediaBox [0 0 612 792]
+/Parent 1826 0 R
+>> endobj
+1847 0 obj <<
+/D [1845 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1582 0 obj <<
+/D [1845 0 R /XYZ 86.4 701.138 null]
+>> endobj
+667 0 obj <<
+/D [1845 0 R /XYZ 86.4 675.235 null]
+>> endobj
+874 0 obj <<
+/D [1845 0 R /XYZ 86.4 641.418 null]
+>> endobj
+1318 0 obj <<
+/D [1845 0 R /XYZ 86.4 609.537 null]
+>> endobj
+777 0 obj <<
+/D [1845 0 R /XYZ 86.4 577.657 null]
+>> endobj
+1583 0 obj <<
+/D [1845 0 R /XYZ 86.4 545.223 null]
+>> endobj
+672 0 obj <<
+/D [1845 0 R /XYZ 86.4 513.896 null]
+>> endobj
+673 0 obj <<
+/D [1845 0 R /XYZ 86.4 482.015 null]
+>> endobj
+1844 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F49 636 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1953 0 obj <<
+/Length 1767      
+/Filter /FlateDecode
+>>
+stream
+x��Y[s�F~�W�ϔ��w����$`
�$�q� [��
W�i2��]IK��EB��N��W�;�=�|g��hAkԁ��K��nH��)R �{�$��$���mw�
+��_��??{7Dܲ��1O>�V��@"����WAr��P�
�0�����c�
+���E��].V�%��f��v�e7�VO ��z[��𺺏������%�%�G
�6��0�)��B�(���<��e�ijG��2iY�m���_��"�gP�ٿ������$�sI�x���E/q\�z��=TyQ��j���q9B"��T�F��'H!�r��
sٿ�J?r��
��!(�Mm�A��غ��~�V���ނ����3=�l�TfCki���Y��@��*�I
g��٤�� �с~��ڔ�v
UV	�
w�g���P�'pM"���k
+��VS�O�I�*4��L����@`�Ń3 9k��TB TO%�	���
��
+�y�$��� \ŋ�GYe!U!?���R�	۽/�����" )>�V�}�x�[ (ȩ�3aE�h�-�w�V=�[x_gx*p-������Ć�|��
Fn���)"���ij�S���Z�
+X(I㑩"�2��E�*b���H�ɄE����NҲ"!��-�<�}��9��]w<��Qs�E8�s ;űv��p����;ض�i0�]���`(Re*�Tal7Ga��LEqF2��Π� %y��Wz����"�R��ť
�}����2C@4����Y������$!�
#��B��:�#U/X�뙄�N�	���OI��9^z����~�6"n�]�Ut�9k���������6j-�k�1�;u����f����
$RQ��G��x�w���O�
%J0^�T�ܓk ;e���H�
+��L�Uj���+�
��lve���{�|4���C;;|h�a{o��
+����r%��׌L����g���yk��q��̼��[�}���a�o �����~��"����H�C�r5����H��G���j�B�'�I���ͮ�
�<��]�V}_qK�L�Dogç�$A����8L�b�3���Td��\y�=l+��v�
F�:�nt6?��[7o�<?�x�K��`��ܬ
뤙�����M���w��*
2]��U�
���볫貭a���mh�	�M玫��xLo�D�6,Yn����v=O>,�
���T �]��b�(�уf��Y��_�t��s��x������9�����O�����
^"S�'@I�
~��B�O�B�n��lX
��
�n����_��k.�X���ٟ�
nj��5~y�@ݸ&~�U&k�Y���t
�_��=S�)���-AD<V3Uw_�wK��8�͚vE���΅K���y}yY.���ЧsQݥMum8��o��
o,�6i	�X��u��}��Q�1;
��Uƿ�_���|!��������3

�m��Qnj=w̦sl��^���w
+o��[d�`6���:

��[�
a�(A�iM�qk�}��)�>�u��F|'ל/�$'
pt0p�S��U2Y+��L��}�6�;N�
Ǝ�`#ǻ��[K�%=�j����_���Wϰ ����G;Y�x-˨��Mf��D�R������H-���#߾�
�X�{��
S�sdA�0�Բ4HtTiP�s��}�,rj�w�2����De�y
+ӛc�܋c9nV�QE��5�35C&G!���GvT��;�Զ	q�
+�x|}
���M�y����M>��o�.؞�ֽ�����
?��
��7�'v�
+endstream
+endobj
+1952 0 obj <<
+/Type /Page
+/Contents 1953 0 R
+/Resources 1951 0 R
+/MediaBox [0 0 612 792]
+/Parent 1955 0 R
+/Annots [ 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R 1862 0 R 1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R 1870 0 R 1871 0 R 1872 0 R 1873 0 R 1874 0 R 1875 0 R 1876 0 R 1877 0 R 1878 0 R 1879 0 R 1880 0 R 1881 0 R 1882 0 R 1883 0 R 1884 0 R 1885 0 R 1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901  [...]
+>> endobj
+1848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 549.469 167.983 560.317]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 537.499 193.471 548.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.459 537.499 213.396 548.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.942 525.528 158.878 535.878]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+1852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 513.557 182.152 523.908]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.14 513.557 202.077 523.908]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+1854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 501.587 143.825 511.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 501.587 164.857 511.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+1856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 489.616 168.512 499.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.608 489.616 189.545 499.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+1858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 477.646 149.056 487.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 477.646 170.088 487.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+1860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 465.398 186.883 476.025]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 453.428 150.271 464.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 441.734 155.501 452.084]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 429.763 155.501 440.113]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 417.793 160.732 428.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 405.822 155.501 416.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.828 393.851 187.784 404.7]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.879 393.851 208.816 404.7]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+1868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 381.881 143.825 392.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+1869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 381.881 159.876 392.231]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+1870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 359.69 164.747 370.04]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 347.719 154.286 358.07]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+1872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.64 335.749 138.595 346.099]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.266 301.588 156.221 312.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+1874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.846 265.676 191.783 276.524]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+1875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.771 265.676 211.708 276.524]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+1876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 253.705 193.471 264.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+1877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.459 253.705 213.396 264.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.942 241.735 158.878 252.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+1879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 229.764 182.152 240.114]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.14 229.764 202.077 240.114]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+1881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 217.793 149.056 228.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 217.793 170.088 228.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+1883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 205.823 154.286 216.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.382 205.823 175.318 216.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+1885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 193.575 192.114 204.202]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+1886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 181.605 155.501 192.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+1887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 169.911 160.732 180.261]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+1888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 157.94 160.732 168.29]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+1889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 145.97 160.732 156.32]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+1890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 133.999 165.962 144.349]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 122.028 160.732 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 110.058 160.732 120.408]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+1893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 98.087 160.732 108.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+1894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 86.117 160.732 96.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+1895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 73.869 171.192 84.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+1896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.288 73.869 192.225 84.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 61.899 160.732 72.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+1898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.827 61.899 181.764 72.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 50.205 134.829 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.925 50.205 150.88 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.976 50.205 171.912 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.221 561.44 363.176 571.79]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.419 549.485 391.374 559.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.546 537.53 394.502 548.378]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.113 525.574 436.068 536.423]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.164 525.574 452.119 536.423]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.152 504.501 412.088 515.349]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+1908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [490.923 480.591 502.878 491.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+1909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.867 480.591 517.822 491.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.016 468.636 461.971 479.484]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.902 456.68 395.858 467.529]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+1912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.846 456.68 410.802 467.529]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+1913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.854 444.725 371.809 455.075]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.798 444.725 386.753 455.075]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.719 432.77 444.675 443.618]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+1916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.663 432.77 459.619 443.618]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.096 420.815 448.051 431.663]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 408.86 369.871 419.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 396.905 401.253 407.255]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 384.949 385.562 395.3]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+1921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 372.994 380.332 383.344]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 361.039 396.023 371.389]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 349.084 369.871 359.434]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 337.129 380.332 347.479]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+1925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 325.174 375.102 335.524]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+1926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 313.218 406.484 323.569]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+1927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 301.263 369.871 311.613]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+1928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 289.308 364.641 299.658]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 277.353 380.332 287.703]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 265.398 369.871 275.748]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 253.443 380.332 263.793]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 241.487 416.944 251.838]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+1933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 229.532 422.175 239.882]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+1934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 217.577 380.332 227.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 205.622 380.332 215.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.428 205.622 396.383 215.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+1937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 193.667 364.641 204.017]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 181.712 390.793 192.062]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 169.756 380.332 180.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 157.801 380.332 168.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 145.846 369.871 156.196]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 133.891 369.871 144.241]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 121.936 380.332 132.286]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 109.981 380.332 120.331]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 98.025 380.332 108.376]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 86.07 380.332 96.42]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 74.115 380.332 84.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 62.16 375.102 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 50.205 411.714 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1954 0 obj <<
+/D [1952 0 R /XYZ 86.4 726.045 null]
+>> endobj
+442 0 obj <<
+/D [1952 0 R /XYZ 86.4 574.336 null]
+>> endobj
+1951 0 obj <<
+/Font << /F38 509 0 R /F16 453 0 R /F8 465 0 R /F48 609 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2109 0 obj <<
+/Length 3193      
+/Filter /FlateDecode
+>>
+stream
+x��\Ks�8��W�(W�1x<ڲ�uƖ<��l*;Y�mU�
�L��2IA$a���^bWL�t7��n č�n\�\
N~�b��@R�<5�D��h�$#����I?�s��1Fa�^��7�����Nڃ�o'�7H��@���hv��O��_>40b�n����58
�ߦ���'8;
���AD�����Ѻ6�]e�
+a��?����Z='��]�4��1ƚ�&��
�g��3BP �н�M�f�? ��� D� Y� Dv �w��8�"��v�7��~{��u� �Q��-#�
I�i�,���w3?y�������PH0���Y�yG��OkNҏ�%����p���>�Y�BA���?��?��
������R!Z�2��y���N�7��y8\��ys��~?�����8H6}����q8��rDi��
ˁ�Ųr��p�-�a,}���r�_��}T>-꣪R�DXu=][PA+�j,,��|
=[uLTm�2^�c#,��˧SJ�ϳ�>8
U���'�
+���c
+8��K�'

+�n�Y��s�t@<�<�G�.��t;�X�?E��7�����
��n��dn�1��կ'c�����"��N�b"CZ��O�ln^��ͱ����\�W��YdB��l2��QvyJ��`�����79���y2���������2-(�R{�_����R8I�MU���p8W�Y��	���
+�D;�O�&l�Ϝ7��UQ���E�����!��.گ�Ta�W#
+�򣍌����1��	l���g� ��f��T��p3Y�cZ$V���l&��ݒ�~�N�H�-u��0ZU_O�h����ެ��MՂ2˶<
Z�xX!PL�]B|%S�L�ɮ`�Gi�A�[
+��q;�n�R��(Z��U�naך�
+��V%�9!
�u]���l"�~�rX{�n"��<�Ʋl�V��(�Jy�y,ˆ}���hiP��P]5s#ˎn�N
X��[�T��DVΣw�)�2���c$T�G	�,�3)�ø�oSDTř���4��s6��;D1g3�L��S#���h;�����T0�] �!�̿�����c�T;Z̖����t�1���T�������W&���e�yo��{��K"��.�Md�`o.��y
�)���u��#6i(��Z1�Ź�LJ�&^@A#,z���#���-.�$�.�%0��
+T��Q��T�Y�����ꥁg�b���{�&���
@S�fA�d6D�'��
�[
@��� 	�:��2Qlr���
+���^�B�{qY��y�ڪ�%���~���H� �7K]H��Qz�*H� )�lu;�Aς������}��W�7���
�v3����'�|�A	$�tX҂E
;��=>��4�Z,}`2�,�,f�5�O�F�gq�"@�d�t����@S,�)g�PEqx"��
���� �$�Sd���ԭ-q�d�
+*|ƼLD��%*0.�2�(�D
ԃ'V,sp$�D}�B9I����.��M72{��T��3�V��Xr��q���y�
+�Ԅ��=���T���Q$5?�A������d�
���,d��ap���G�jR��9�Mʜ^ n�� �p�\6^�r
?w��p�8v�k�p|��BD��;^�0�� Չ(.~�	�‚��
��x"�
jg
�@�L	�G�OdQ��7 ����m���5��$���+Dd�e�X�t�������{�Z�50U���%@����뇢��8׵U,�ͮ}�X
��w:�)�	>`����*���
9��@Vfp@���h��N���
<�[P%�
�.T�D�pE��s�%� @���"�
���"�ۏ��x�M-���?��0�=/�^�4N�;w��L�hB�s�>�A뗎5"L8�^��$��]��v�����c�K9w+4��n�����Ap*4��{f�n��r
;
��T%fwV��*)[J�»~R�R2	ᝮm%�(����
I��aޝ��v[G�-8-�h�=p=�Xq8��9;dSsQ���0��k��۽�
+<O��c*��B�%�QR�T�=p�#���z;a���z�<�c� J&
�n�}8���L�j�?h����>��\q��E� J:]3�%�� �*7jkvK	�3�*��i
4�69�XG��yi}�B���f�%�oWnjQ��E���`��Xpv�xa2F� 	��u��6P2���
+�i����y���d/�iQ\�Yp��i
�2��M�
9\�;��./��EJ�B���d0�xz?:ý>��
8���fJ h?�D1
d����S��D
CX�~��b\�^��f�����*�J�_��y�K5�N�Y���j��G�թ�Ղ̱t.

!�F�}��Jt�Щ��z�ϡU��W�z��d!2�?�#�����~�m):}�"�(���~+��w�iU?�v�Y�	�́�=X�NJ������X���z�%@4�_�0ar���$��.�-z<fj�,f�A�M�����~�fx�A5�R�|��ev?Q�%<h�t�o���M6�s�?���8r��ff7�
�2?qz���y�sӹ>��H��4˦J +�i`Q8�%|� �,�/�@�<���5>O�@L2Ǟk�6�0/���ӻM����}`&m�<��T(W�����
vʁ�X��G[�Whm������,�e��at1�qfv�X�D͇�h�8&.������d��6�]����Ǻ�F�޿ [...]
+��
+^�kޏ���\���t��Vy�oR��$.͉R���.�yp��]
j*\k�#?v���O���.�;��� 	"&����sX��$�ݧh�'�BRi/��X)�
{6����iQw�QNJ
�7��$����TR�c�����>������U�$H
�6�$���r{�LU�-9��
*����t�">T
���u:��χir
��{
/W�o�D�>w�
-��ɥ)�c
�b�p
�G�I�����0��y���e(����`�
�}Ȭ�Vѐ��h8��	!y��#��v��[�0X�֣a����t���z�`{�,��R��n����=8�u��lg�O�����S��l-���*ߦL�

˧��k9
Y
!�GU�4��O�`�6��%
+endstream
+endobj
+2108 0 obj <<
+/Type /Page
+/Contents 2109 0 R
+/Resources 2107 0 R
+/MediaBox [0 0 612 792]
+/Parent 1955 0 R
+/Annots [ 1950 0 R 1956 0 R 1957 0 R 1958 0 R 1959 0 R 1960 0 R 1961 0 R 1962 0 R 1963 0 R 1964 0 R 1965 0 R 1966 0 R 1967 0 R 1968 0 R 1969 0 R 1970 0 R 1971 0 R 1972 0 R 1973 0 R 1974 0 R 1975 0 R 1976 0 R 1977 0 R 1978 0 R 1979 0 R 1980 0 R 1981 0 R 1982 0 R 1983 0 R 1984 0 R 1985 0 R 1986 0 R 1987 0 R 1988 0 R 1989 0 R 1990 0 R 1991 0 R 1992 0 R 1993 0 R 1994 0 R 1995 0 R 1996 0 R 1997 0 R 1998 0 R 1999 0 R 2000 0 R 2001 0 R 2002 0 R 2003 0 R 2004 0 R 2005 0 R 2006 0 R 2007 0 R 2008  [...]
+>> endobj
+1950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 688.242 150.52 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+1956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 676.287 181.902 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 664.332 150.52 674.682]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+1958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 652.377 181.902 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 640.421 181.902 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 628.466 187.132 638.816]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 616.511 150.52 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 604.556 160.981 614.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+1963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 592.601 192.363 602.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 580.646 171.441 590.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 568.69 171.441 579.041]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+1966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.637 535.339 152.574 545.689]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.423 523.384 156.36 533.734]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.973 511.429 145.91 521.779]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.652 499.473 142.589 509.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.589 487.518 156.526 497.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+1971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.474 475.563 163.411 485.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+1972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.36 463.608 158.297 473.958]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+1973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.308 451.653 169.244 462.003]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+1974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.754 439.698 180.69 450.048]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [155.374 427.742 167.33 438.326]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+1976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.344 415.787 181.28 426.635]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+1977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.787 403.832 213.742 414.68]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.563 382.436 173.518 393.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.613 382.436 189.569 393.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.557 382.436 204.513 393.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.608 382.436 220.564 393.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+1982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.281 370.48 152.236 381.329]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+1983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.332 370.48 168.287 381.329]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.409 349.084 133.365 359.434]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+1985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.917 325.174 236.891 336.022]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+1986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.908 313.218 199.863 324.067]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.763 289.308 223.718 300.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.206 277.353 172.162 288.201]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+1989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.758 265.398 162.713 275.748]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.544 253.443 166.499 263.793]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.094 241.487 156.05 251.838]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.71 229.532 166.665 239.882]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.481 217.577 168.436 227.927]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.429 205.622 179.384 215.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.875 193.667 190.83 204.017]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.822 181.712 222.777 192.56]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+1997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.102 169.756 148.058 180.605]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 169.756 163.002 180.605]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+1999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.357 157.801 225.312 168.65]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.82 145.846 178.776 156.694]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.643 133.891 129.599 144.241]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 121.936 158.052 132.286]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 109.981 158.052 120.331]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.636 98.025 147.591 108.376]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.636 86.07 147.591 96.42]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 74.115 154.286 84.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 62.16 178.973 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 62.16 195.024 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 50.205 168.512 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.608 50.205 184.563 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 688.242 384.098 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 676.2 387.864 686.55]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.826 664.159 417.781 674.509]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.673 652.117 393.628 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.392 652.117 410.347 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.111 652.117 427.066 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.829 652.117 443.785 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.548 652.117 460.503 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+2019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.492 652.117 475.447 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.211 652.117 492.166 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [495.155 652.117 507.11 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 652.117 523.829 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 642.099 361.791 650.512]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.682 628.12 373.637 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.373 615.802 389.328 626.429]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 604.037 424.476 614.387]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 591.995 398.324 602.345]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.42 591.995 414.375 602.345]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 579.953 403.555 590.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 579.953 419.606 590.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 567.912 403.555 578.262]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 567.912 419.606 578.262]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2033 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 555.87 387.864 566.22]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.017 543.828 386.972 554.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.354 543.828 402.309 554.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.692 543.828 417.647 554.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.029 543.828 432.984 554.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.367 543.828 448.322 554.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.311 543.828 463.266 554.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.648 543.828 478.603 554.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [481.592 543.828 493.547 554.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.93 543.828 508.885 554.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 543.828 523.829 554.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 533.81 361.791 542.223]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 519.831 393.094 530.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.19 519.831 409.145 530.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.241 519.831 425.196 530.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 507.79 403.555 518.14]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 495.748 378.867 506.098]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 483.706 387.864 494.056]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.135 471.665 402.09 482.015]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 459.623 387.864 469.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.959 459.623 403.915 469.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 447.581 403.555 457.931]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 435.539 403.555 445.889]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 435.539 419.606 445.889]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.373 423.221 389.328 433.848]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 411.179 384.098 421.806]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 399.138 394.558 409.764]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 387.373 384.098 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.194 387.373 400.149 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.244 387.373 416.2 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.295 387.373 432.251 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.346 387.373 448.302 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.29 387.373 463.246 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [467.341 387.373 479.297 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.285 387.373 494.241 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [498.336 387.373 510.291 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.387 387.373 526.342 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.064 375.054 405.019 385.681]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.365 363.289 407.32 373.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.596 351.247 412.551 361.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 339.206 408.785 349.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 327.164 384.098 337.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 315.122 377.403 325.472]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.135 303.081 402.09 313.431]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 278.997 488.483 289.845]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 266.955 442.461 277.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 254.914 449.894 265.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 242.872 409.944 253.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 242.872 424.888 253.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 230.83 416.032 241.679]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 230.83 430.976 241.679]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 218.789 396.439 229.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.291 206.747 397.247 217.33]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 194.705 364.641 205.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 194.705 380.692 205.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.788 194.705 396.743 205.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.839 194.705 412.794 205.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 182.664 414.015 193.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 170.622 408.785 180.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 158.58 408.785 168.93]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.064 146.538 405.019 156.889]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.681 122.455 395.636 133.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.625 122.455 410.58 133.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 110.413 416.032 121.262]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 110.413 430.976 121.262]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.854 98.372 371.809 108.722]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.798 98.372 386.753 108.722]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.719 86.33 444.675 97.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.663 86.33 459.619 97.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.096 74.288 448.051 85.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.04 74.288 462.995 85.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 62.246 453.557 72.597]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 49.928 443.096 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2110 0 obj <<
+/D [2108 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2107 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2255 0 obj <<
+/Length 2330      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�8��W�(W�9ă x�C�:�8YK�lUv�
;,S���<��߆H)&>@���'V�߇n���c=Z�uut�8��0˳=���x���űg3��Ž�yr}s1����w��v�
��~�\W��h�8���o

��ڂ2k�:���c��'�,�&�������E�gc�[h͏�u��CE��8+�\���]|L��:
+2��˗����xO�[�9�� y{ud}>!�L8.>��+�'��
'^�V�b3љidP���=�s?\^�BSn;�t��^#t!����D��

+]�;b��Ū��c�'���R
:��_��A$��x
����1y|�&�v#�`f����w�2��Q�-�Nb��o��ςx�k:٤�>�_ԇߏi[*ᥥ��e��*N��2��&H�JFǘO��Er�5Jt�ˋ��2���\;{�-����%agw\!.� ��"K��J�~��4�֛�Pq�'���„�F-���M�_�n3�����S���]����@����.ܩ1�g��X�bzaЇ�o
�
���k�j�
�9���Y��ѩ��Py��9l�!�b6?L	�:��j
�6e at b#"��0�!�l~�D�}��4��ۂ�Q at a��C+�7����l��Vt�Ӝcs�
�F
C9"E� ���-��������(���0q˨7w�i|�è���1��S\SO���F+v�_�aE�z���q�)#��<�%���u�Gr�B�b�b�	��14�$�
u�����K�
^�S��^b�Vdt�*ټcp�pp�9�0�P�2�q�w��������
�D6hQ)R������̏��$pi��Y�뱎�f�\ցI�t[2�00:X�^K`p%���f����� l����E.K��p�Y���~�
�@�'N���m�;azU �[��=��>ne�I"e����A�q,��Wɧ8y������Gm�n��G!K�a.�?5�P	,�
�
+�&W�<���$x3�\VU�$�'h!���h��D��_���tׂ\s��L�
���鱲�i^����2���j�3�

DP�`<��(
�LF��sh湴��(�$�{�
���
?8�a�ߜ��MGa�"��'�����{��uo�V��

�f���m�/K���i6��~L�dx^�}]�:��c�gq2��LK��vF"�
�(D|5Ni�HZ<��HD���#��s����9�̋�0��q�<�%��%J��z��_>e	��a��%p�p0��ݛ@䪦�6ۛ����bo@��	rm����B�^?6*���:Ө�0w�-�������Lj#)V�
1R +��5SL3ʨ-֩O�@AE�t`k��a�'D��F�&��8���
崻
J��8�Cn��������=��Fq��O�՟����ň B|OH?�`vd†G&�t?2�0��;
Qd��+C�L���O���
�F
��y��
;��x�q��x���@&v'��U�D���t⇏qd_W�����D-d��At����لx?�D{��a0�@�Ƒ�>�d"�y�%�����[
�V�;_�����kr
���/�m�h�v_�,E.K��燝��
w

+��jR���ΞT�U�������(�W5J���1�m�B�1��m��u;ިU�RԴ�����/�^͂�҇m^U�j�i	��Ҷ�֙��K���f����m�,�(K�%�=(���Ir�r`P"�O��.b̮�H��:p���(-�/�����/6���}��Ϡ��C������Aw�aاr{5̀�{���ܥ:FmmJ���s
M!����ܮ�
�l�W�0'�w��:SFm �o���YmIh��L.�[vF�E�����w��
Q9���Q��%VԴ���ۂt�EUP�=C�>g�
]��r��=W�_G>
՞��[>�I4�gL�A�X����"�y,G֫Qx�C�������BI#�&AR�����3V�����|��k��Q#��Wj�
+�^'2MOá�x�� 
P�Ker�g�P�^*�
��!� 
	w�1�vʽ��������p�^���� K�
+��+��D�g�>�N��?7�!�c<�A�z���@Vb\���
[�ǔPG�M74
+մd�z�����Vd$d+�(*h����+� ��ŗ�
/8��b�'�6��ͨ;�M@���MF ���%�O��<<�`w�u��H�6!|[���M@u��揧翟^M5��؄y� �g) �<���a�����7�3��D)vx�C~a���w��V��
+��c��
+��wz�7#���H�*�,������m�W%�$�vs{
����͟�W.v�?!`����
+endstream
+endobj
+2254 0 obj <<
+/Type /Page
+/Contents 2255 0 R
+/Resources 2253 0 R
+/MediaBox [0 0 612 792]
+/Parent 1955 0 R
+/Annots [ 2106 0 R 2111 0 R 2112 0 R 2113 0 R 2114 0 R 2115 0 R 2116 0 R 2117 0 R 2118 0 R 2119 0 R 2120 0 R 2121 0 R 2122 0 R 2123 0 R 2124 0 R 2125 0 R 2126 0 R 2127 0 R 2128 0 R 2129 0 R 2130 0 R 2131 0 R 2132 0 R 2133 0 R 2134 0 R 2135 0 R 2136 0 R 2137 0 R 2138 0 R 2139 0 R 2140 0 R 2141 0 R 2142 0 R 2143 0 R 2144 0 R 2145 0 R 2146 0 R 2147 0 R 2148 0 R 2149 0 R 2150 0 R 2151 0 R 2152 0 R 2153 0 R 2154 0 R 2155 0 R 2156 0 R 2157 0 R 2158 0 R 2159 0 R 2160 0 R 2161 0 R 2162 0 R 2163  [...]
+>> endobj
+2106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 688.242 176.672 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 676.204 187.132 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 664.165 150.52 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 652.127 150.52 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 628.05 263.901 638.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 616.011 217.879 626.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.357 603.973 225.312 614.821]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 591.935 185.362 602.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 591.935 200.306 602.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 579.896 191.45 590.744]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 579.896 206.394 590.744]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 567.858 171.857 578.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.71 555.819 172.665 566.403]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 543.781 145.29 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.385 543.781 161.341 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.436 543.781 177.392 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 531.742 184.203 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 519.704 184.203 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.299 519.704 200.254 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.35 519.704 216.305 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 507.666 178.973 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 495.627 178.973 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 495.627 195.024 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.12 495.627 211.075 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.171 495.627 227.126 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.252 483.589 175.207 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.303 483.589 191.258 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.354 483.589 207.309 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 471.55 181.902 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 459.512 187.132 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 447.197 192.363 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 435.435 208.054 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 423.396 208.054 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 411.081 223.745 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 399.043 197.593 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 387.281 197.593 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 375.243 202.823 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 363.204 181.902 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 351.166 145.29 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 339.127 140.059 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.155 339.127 156.11 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 326.812 208.054 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 315.05 197.593 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 303.012 197.593 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 290.697 192.363 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 278.935 192.363 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 266.62 150.52 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 254.582 187.132 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 242.82 208.054 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 230.505 213.284 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 218.743 181.902 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 206.428 176.672 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 194.666 213.284 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 182.351 213.284 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 170.589 213.284 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 158.551 181.902 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 146.236 218.514 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.941 134.474 249.897 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 122.435 228.975 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 110.397 192.363 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 98.082 176.672 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 86.043 208.054 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 74.282 176.672 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 62.243 208.054 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 49.928 181.902 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2175 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 688.242 364.641 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 688.242 380.692 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 676.204 359.411 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.506 676.204 375.462 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.557 676.204 391.512 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.608 676.204 407.563 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 652.127 488.483 662.975]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 640.088 526.596 650.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2183 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 628.05 449.894 638.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 616.011 409.944 626.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 616.011 424.888 626.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 603.973 416.032 614.821]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 603.973 430.976 614.821]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.123 591.935 411.078 602.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 579.896 396.439 590.744]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 567.858 390.793 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 555.543 416.944 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 543.504 396.023 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.119 543.504 412.074 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.17 543.504 428.125 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.221 543.504 444.176 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 531.466 401.253 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.349 531.466 417.304 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.4 531.466 433.355 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 519.704 375.102 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 507.666 369.871 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.967 507.666 385.922 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 495.627 375.102 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 483.589 385.562 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 471.55 416.944 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 459.512 396.023 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 447.473 422.175 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 435.435 369.871 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 423.12 401.253 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+2209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 411.358 437.866 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 399.32 411.714 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 387.281 422.175 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 375.243 437.866 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 363.204 432.635 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 351.166 427.405 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 339.127 422.175 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 326.812 416.944 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+2217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 314.774 427.405 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 303.012 390.793 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+2219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 290.697 396.023 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 278.935 453.557 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 266.897 432.635 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 254.858 443.096 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 242.82 427.405 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 230.505 437.866 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 218.466 401.253 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 206.428 416.944 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 194.666 401.253 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 182.628 408.785 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 182.628 424.836 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.932 182.628 440.887 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 170.589 408.785 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 170.589 424.836 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.932 170.589 440.887 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 158.551 403.555 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 158.551 419.606 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 146.512 403.555 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 146.512 419.606 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.701 146.512 435.657 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.752 146.512 451.707 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.803 146.512 467.758 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 134.474 424.476 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 122.435 399.789 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.885 122.435 415.84 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.935 122.435 431.891 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.986 122.435 447.942 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 110.12 416.944 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 98.359 432.635 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 86.043 448.326 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 74.005 432.635 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 61.966 416.944 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 50.205 369.871 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.967 50.205 385.922 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2256 0 obj <<
+/D [2254 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2253 0 obj <<
+/Font << /F36 464 0 R /F48 609 0 R /F8 465 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2402 0 obj <<
+/Length 2299      
+/Filter /FlateDecode
+>>
+stream
+x��\�r�H��+p$#�ը���I��F��
��DB��	�v��Ob��X ����-
D���e�B�΃�:�N�9;�eB���D8�{G	�
I4;���u���>;w��"�)������������xv�x�������9RL8�����]gO�
Q��?�ϭ
F5"��ҙ����=ă+x��K�*CB�n;r�;?��D
��]���e���p8��v���!Q8ƒ0�kD�Ӏl�	r�N�ك��`��/�"
+)�Z&�>CT�A\ĸ�?���[��‡�_��N���&���+J*G��s��䊻�CU;H`��
>�t�
��|sx��-o�
7�k?�����,v�"��]���P�:S�[0�(���W��g*3��A�����A���̥Yrf�f���yl���%ԯ��
}a��ծ���>�W_�Ǫ^�V㷡?߬A
��3����4���!
���S+(f�I�BY�b���)���
�I+�����y�C��k<C�5o�*��*Lձ����#����ICͤ],�y�e�J�.3f���'�|X����7fL���\�g�~5�ToJ��m	S�M�m	S��0����	S��P�9am+�A3�9��V'}
�_:
GN�m֧��|�Of��bLA��Q�fz/.
*c�&���؛u^�|��G ̛��Ad�e�=Aa�D��&�=��!�q/AQDgkNj��A)���~�rX�hQ�z�9M�
+
h�_
�]�6歚����
�yF5�� �^2
+D�ը9�r^�Ai�
�J'Ύ%TcrW-s���GZ�
+��	1�#(�(�y���4
JA���_-(�I
�-X�i�B&y/�����n�m��Y(h�
ȶ�.Y�TJE<��^��p�x���t<�V]D�C����� V��W��`���G�.�,=�և֐���Oj at d���.)����t��>��U �h��}�υ
�@9������`��$W��%f��E�>��Єs�
+ٓ[2a�����S^/B��)��}#+�ް��,Xn��J� �N���}��+��[�]�M�6o݄ߦ[on��2$��N�v
�0�Sν�,.�/�|�6�HѦ@���
+3:$��x���
+՜e�D\2�A�S=xa��]J!��B`5+�T�� ��t�s�w���C�z�l=O6���7�6��\�iV��\�14y�t/��ˤ�K�Dz
+&\�yS��}&�'  �y�Qg>������Mqû#�3�I��ϟ�������0;*�<�z��o
h�\��������=B������CC\GPxe'�i���t����G��'���r����X7�6K?��s��%iOMGB����* �9}����~@'��8�ˁ�Q9w��(����
���6����I8P�&\�a�~�����a�V��
�P\����.fs��܉Pm�s����}�D�8"�S��oV[�},����'ǣLd��{Umz�k
�Kz�h�,��;��Wf4���j	��s���pp*�����m�3vj�Q���z�_�M"�6�$:��ʗףW�J��
�N���٬��N)A��<���tVHa%)�JDI��Ng㛎�Rʾ�D'��pm���Ak}*;_dʋ
7�v�:ް�%�eo�(���y��ܤ�����[/��	��E�2���۩���&
+�5S��`:�
�Ӧ��^e0�jZ��`\�.Ѻ�֤�`m�]%��"��/§��|oᓺ��ɶ�m����W,��*-�t��ϕ��f�P��Im�U�����h3�����������1��uy���EXW�D#�T�z���ro���Oy�Y��^T��
�lQ	
��k��Q�lK��.!�=o�O��Kϰ��Qմ�⚵��HV쿦�
���!
�f��>,]��^,���>��db��0��RJ�i�����	���3�1�+����L���B�]X��n3-��OĢ�Ȣyz}��|.�2L�1V at R��f�
L�^LQ�ͼ;��5[��RL��\�䜶��X
p2���X� Q������vڑ
�,ޣ������^LQB�%���gL��Wpĕ(�=J������Dq��W�d�Ӈ{A�$������D�I.{Q
+�Ҽ��}�tr+�q�
+��B��[�xΫxC�U)�&�M؇�,�q]6�H���7��C�j�6p/��e��B�ʹ�����L����L�aXQ�̈́!�ս
+� }����l���
�R���F�����4��u.:�C�{��]��r?��6�
]
c����EPݑ��_�H�� ��z�Y��|O��������/&��������?Z��{%���vw��Ce�߅Y 
+endstream
+endobj
+2401 0 obj <<
+/Type /Page
+/Contents 2402 0 R
+/Resources 2400 0 R
+/MediaBox [0 0 612 792]
+/Parent 1955 0 R
+/Annots [ 2257 0 R 2258 0 R 2259 0 R 2260 0 R 2261 0 R 2262 0 R 2263 0 R 2264 0 R 2265 0 R 2266 0 R 2267 0 R 2268 0 R 2269 0 R 2270 0 R 2271 0 R 2272 0 R 2273 0 R 2274 0 R 2275 0 R 2276 0 R 2277 0 R 2278 0 R 2279 0 R 2280 0 R 2281 0 R 2282 0 R 2283 0 R 2284 0 R 2285 0 R 2286 0 R 2287 0 R 2288 0 R 2289 0 R 2290 0 R 2291 0 R 2292 0 R 2293 0 R 2294 0 R 2295 0 R 2296 0 R 2297 0 R 2298 0 R 2299 0 R 2300 0 R 2301 0 R 2302 0 R 2303 0 R 2304 0 R 2305 0 R 2306 0 R 2307 0 R 2308 0 R 2309 0 R 2310  [...]
+>> endobj
+2257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.71 676.204 172.665 686.787]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 652.127 263.901 662.975]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 640.088 217.879 650.672]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 628.05 185.362 638.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 628.05 200.306 638.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 616.011 191.45 626.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 616.011 206.394 626.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 603.973 251.614 614.821]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 603.973 267.665 614.821]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.445 591.935 249.4 602.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.496 591.935 265.451 602.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 579.896 171.857 590.744]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.71 567.858 172.665 578.441]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+2270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 555.543 145.29 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.385 555.543 161.341 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.436 555.543 177.392 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 531.742 263.901 542.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 519.704 217.879 530.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 507.666 185.362 518.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 507.666 200.306 518.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 495.627 191.45 506.475]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 495.627 206.394 506.475]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 483.589 251.614 494.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 483.589 267.665 494.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.445 471.55 249.4 482.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.496 471.55 265.451 482.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 459.512 171.857 470.36]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.71 447.473 172.665 458.057]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+2285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 435.158 145.29 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.385 435.158 161.341 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.436 435.158 177.392 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 423.396 194.664 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.76 423.396 210.715 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.811 423.396 226.766 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 411.358 194.664 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.653 411.358 209.608 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.704 411.358 225.659 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [228.648 411.358 240.603 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [244.699 411.358 256.654 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [260.75 411.358 272.705 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 399.32 189.434 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.529 399.32 205.485 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 387.281 189.434 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.529 387.281 205.485 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.474 387.281 220.429 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.524 387.281 236.48 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.468 387.281 251.424 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 375.243 194.664 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.76 375.243 210.715 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.713 363.204 185.668 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.764 363.204 201.719 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.708 363.204 216.663 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.759 363.204 232.714 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 350.889 202.823 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 338.851 223.745 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.25 326.812 234.205 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 314.774 218.514 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 302.735 223.745 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 290.697 228.975 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 278.658 218.514 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.25 266.62 234.205 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 254.582 208.054 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 242.543 213.284 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 230.505 202.823 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 218.466 202.823 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 206.428 192.363 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 194.389 192.363 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.481 182.351 239.436 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 170.312 213.284 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 158.274 181.902 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 146.236 218.514 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.25 134.197 234.205 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 110.397 263.901 121.245]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 98.359 217.879 108.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 86.32 185.362 97.168]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 86.32 200.306 97.168]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 74.282 191.45 85.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 74.282 206.394 85.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 62.243 251.614 73.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 62.243 267.665 73.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.445 50.205 249.4 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.496 50.205 265.451 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 688.242 396.439 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.291 676.283 397.247 686.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+2341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 664.048 380.332 674.675]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.428 664.048 396.383 674.675]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.479 664.048 412.434 674.675]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 652.366 406.484 662.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 628.448 488.483 639.296]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 616.489 526.596 627.337]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 604.53 449.894 615.378]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 592.571 409.944 603.42]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 592.571 424.888 603.42]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 580.613 416.032 591.461]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 580.613 430.976 591.461]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 568.654 396.439 579.502]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 556.418 390.793 567.045]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.888 556.418 406.844 567.045]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.939 556.418 422.895 567.045]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.99 556.418 438.945 567.045]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 544.459 448.326 555.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 532.777 406.484 543.127]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 520.818 406.484 531.168]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.682 508.86 373.637 519.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.995 496.901 348.95 507.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.046 496.901 365.001 507.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.225 484.942 354.18 495.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.52 439.041 438.476 449.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.254 427.083 407.209 437.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 415.124 415.063 425.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 415.124 431.114 425.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 415.124 446.058 425.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.52 391.206 438.476 402.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.254 379.247 407.209 389.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 367.288 415.063 378.137]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 367.288 431.114 378.137]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 367.288 446.058 378.137]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.52 343.371 438.476 354.219]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.254 331.412 407.209 341.995]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 319.453 415.063 330.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 319.453 431.114 330.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 319.453 446.058 330.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 295.535 415.063 306.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 295.535 431.114 306.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 295.535 446.058 306.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.797 261.594 406.733 271.944]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 239.611 372.173 249.961]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.373 217.629 389.328 227.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 205.67 384.098 216.02]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 193.711 378.867 204.061]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 181.752 393.094 192.102]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2388 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 169.793 377.403 180.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2389 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 157.834 378.867 168.184]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2390 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 145.875 393.094 156.226]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.221 133.917 363.176 144.267]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2392 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.452 121.958 368.407 132.308]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.995 109.999 348.95 120.349]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 98.04 359.411 108.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.43 74.122 391.385 84.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.352 62.164 443.307 73.012]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.93 50.205 463.886 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2403 0 obj <<
+/D [2401 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2400 0 obj <<
+/Font << /F36 464 0 R /F16 453 0 R /F8 465 0 R /F48 609 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2527 0 obj <<
+/Length 3312      
+/Filter /FlateDecode
+>>
+stream
+x�՝Ks����s��",ޏ�-ɲ��Gl�I��Zb���I���r�˧1$� E�`��$9l�+
���C���`@Z=V��<z=:��Е#Ns]��QYMde�#Z�j�P}:��9����o�_+�9�L�'�?0e���.FG�<b�[Z��yE������O�����kE�p��^_������U��|DcX����*�aF���'��&���/ol�	.H��M����Tq�u1��	�Ǔ�Sv��S����������Gէ�b�6_�����F����>=~Y���a�~����'�哌N5(��Kv-s}{~�����yK1n�5�ֆpc��J&l�Vu%�L� ��)j6,.?<'�(��
�*Yr�թ҄j�����B�F�V�\�7qu��+�5��ֲ��Sp��-I�T
~<�-擏���b�j�
�x��Z� ��9�΀-�H�=3����,I�[�y+4�$N8
�Ʀ.�>M��w�YC��3Y3��	�k
lj 
l�$�Ro��
4�c����l6��H�
F�|ܼ
����
�
+`)fp{K��޸<� ��Oűmc[YA$Fh{C�d��7�#�&����9sM��
��휹!���60�p�A,q���.��a
�p��}9?|-N"3�(G���3�?�rܱ
&��xV�D���!��Q�yK
f�Y_|yZ��S��)��`Ld��P�t4ƭ�%jL׭�^p�u
�
�$ti��1L1�
7�
m0+�
e�K��"/w�A
��Q�	��LC�n��)�S|�
&���˽h�Gn
S���r� �c
_��$5��^�E���V�q��L	h`���B���[M�/^�FC<���FX5Z�U����X#0
+i$�B�z�
�؏A*�$�t����+0֍�%cú����j��ѺZ�|=��Z�����l/0jo��z�[�����A
+U¦.
S���zIa!�`��xKں���=h`�.
U�%CWwpøiQ�(jV�{�.�o`G
S��
lH��a,�xK�����=hX�.
R�AO�_.���R �%%_��
4�c�J1��D��D;�,�-I�z�F� �N\�
+�G��1Eb,yKR�j�f\�1ӄ��y�D+	�elvj
I	�N�D��p9Y���W��>��
i���c�jR�9]�An�)H�c1�[��r�r$=T]F5q4?�%d}�Q.xK��
�˥α�PcW�;��{��v�-q%z�.�n@��C
ZI��fC
E)��2������6�H�0�1D3�:0T�uG��Y�0�i�%��O�?��=].�Dt�=�|�_HsCŨ6�%Hj����D{���c���b���O�`���t=�c�k�$'�(
U���
��R�`����r�*�j���Ś
�Ht�Tl)1*;��i���_�.WmDz�d�$~�KHN(�:�T�1��\�
ˢ$`�^�i��%??���p�P�X�����6|cف
d����
:��]0���\�A
�1��9�Q�Q�B
,
��n&�w�e0��
+C�qܬHU)!����~� cA�[2</�f�����=~Q<{�$��X�QCxKڰ,��
�Xu�
��`c�X�4Y��E±�	�_
�(1���T����ٛ㟨Pg0��z\�Tz�e�^3e&a���>ޒ�<ِ˕ȱ�@���){]�	�cTޒl�lgp.Wn8��ì��
f�,5�X��$w��˕ȱ�3;g��g�AYY�e����±�P�T{�
�\	��
,	��1�+7�c�A
.���i1�������[N�]�gH�T#�2A�}=��0+Ľ��e�5�����墁n�:�q�<
����?`�Y�Ƿ\4�U�Y��
+F���j}]�r�@7V=�ӹ�ϞJ�M���*����9��'
@��h* �J��X�}��buW��U�~y4�
h�J�0�n��l`��(��R�.x�rՀ8RE�&�y)��݌��������x�\\�MK2W���c���������|���~cl[�j���M�z��OH�/���t���M"��sx#�����x��pH6��no>�����X}������G�|}�
�Ĝ�^��1�Q�xn߷
�Oj���Y��f�`�
}�f�T������t�zuVxZW��Y�Vn�I�?o4�9+��P2��t}d�2M$]_�jRM��Q��X�R�
35�
keRJ¤�Gk�&�-�Ҽ�ۛ���hW����<
a�F(�S��]3a��hلj�*���`Jk�KA8��K㷽��N
�OW�g�8�
�
ˎ_�@7��^FU�c8�5�� 0�P8�
�������X�CQ�:�����Q�rA,�<�=5z�2�!���-V=|�U�h�o��cP�2?w�YxT�X��n��P������"Au�6Q=xҕ�^jʥ+���@	\��Y����ƪ͸=�V�dY��5~nA��n_����
��!m<W��m�ƤڇM
�:Xw� �,=��
�h8_�jכZB��9
Q$�U*�1�I�Ġ8�?C���E�CA4ЍE���[�����˶67d�cYq� �Ƣ{�3��
}�.�Dh����-���E
lc���̡-���C
�`��w���d��{,0t5\�t�{�D2�� L%�
+'r�W<0�n 
�'�?��.����C�_o�/�e�����Mt���o�+��
��,AVݠ�=�_���
e���:Q>p��oUWhKT٩�
^�=-�X�\��0D7CZ":z������
�0�pT�[ȼR�‡�����V�7��D��&{K2�>�ު嚡Qc��F-�
m�
|-�J�֣I=
��S�?$��_oZ�A44j,�gGC
e#���	)T
�
���u�緩���;�&K���&-�
-kv�h�hh�X�C�P���"�Sb4NS*���ޚ��9cю�DP
��
������G��p=u(M
+�tV�D�
-iv4(�hh�H��{6myq6�}�cK%���ξ/��Sn���&]>�����:���kᵹ�Sm�~{�ʮ=ji��/���i5]�dz�W(N�O��]��ߴ�����x����E_�(����������޸����-_�ϯ�
җ�|��������#���xv�m6���h&)zx$U�G��4÷tz�v�P��qK���r�
��S&���K\�׭L2�X
�>
�
GۢO�eY��>���tW'N;����=^�i?��~ޕ�ϳu�{x�>LǏ?��i9iz_�k�O+�ץ�N2R}�(�ᑇ i=j-���CH�:�]=1۩>Â�8	G�U�	g;�ڝ1{��V6�6��\�?Ogӕw�lj=O���	U� �9��
+endstream
+endobj
+2526 0 obj <<
+/Type /Page
+/Contents 2527 0 R
+/Resources 2525 0 R
+/MediaBox [0 0 612 792]
+/Parent 1955 0 R
+/Annots [ 2398 0 R 2399 0 R 2404 0 R 2405 0 R 2406 0 R 2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R 2412 0 R 2413 0 R 2414 0 R 2415 0 R 2416 0 R 2417 0 R 2418 0 R 2419 0 R 2420 0 R 2421 0 R 2422 0 R 2423 0 R 2424 0 R 2425 0 R 2426 0 R 2427 0 R 2428 0 R 2429 0 R 2430 0 R 2431 0 R 2432 0 R 2433 0 R 2434 0 R 2435 0 R 2436 0 R 2437 0 R 2438 0 R 2439 0 R 2440 0 R 2441 0 R 2442 0 R 2443 0 R 2444 0 R 2445 0 R 2446 0 R 2447 0 R 2448 0 R 2449 0 R 2450 0 R 2451 0 R 2452 0 R 2453 0 R 2454 0 R 2455  [...]
+>> endobj
+2398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.556 688.242 222.511 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.493 676.194 224.449 687.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.561 664.145 159.516 674.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.002 652.097 117.976 662.834]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.404 628.254 201.359 638.881]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 616.206 241.488 626.832]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 604.157 251.949 614.784]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 592.109 241.488 602.736]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.321 580.06 236.258 590.687]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 568.012 251.949 578.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 555.963 236.507 566.59]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.555 543.915 227.511 554.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 531.866 267.64 542.493]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.164 519.818 278.101 530.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 507.769 267.64 518.396]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 495.721 262.41 506.348]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.164 483.673 278.101 494.299]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 471.624 262.659 482.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.864 459.576 211.82 470.202]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 447.527 251.949 458.154]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 435.479 262.41 446.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 423.43 251.949 434.057]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.782 411.382 246.718 422.009]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 399.333 262.41 409.96]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+2426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 387.285 246.967 397.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 375.513 143.825 385.863]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 375.513 159.876 385.863]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 363.188 204.876 373.815]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.4 351.14 215.336 361.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.4 339.091 215.336 349.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+2432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 327.043 199.894 337.669]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 314.994 241.488 325.621]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 302.946 204.876 313.573]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 291.174 199.645 301.524]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 278.849 178.724 289.476]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2437 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 267.077 189.185 277.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 254.752 178.724 265.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 242.98 173.494 253.33]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+2440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 230.932 189.185 241.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 218.883 173.743 229.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 206.558 173.494 217.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 194.786 183.954 205.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 182.738 183.954 193.088]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 170.689 168.512 181.039]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 158.364 199.645 168.991]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.17 146.316 210.106 156.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 134.267 199.645 144.894]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 122.219 194.415 132.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+2450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.17 110.17 210.106 120.797]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 98.122 194.664 108.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 86.073 183.954 96.7]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 74.302 194.415 84.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 61.976 183.954 72.603]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 50.205 178.724 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 688.242 418.997 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+2457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 676.287 408.536 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+2458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 664.332 385.313 674.682]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 652.377 390.544 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 640.145 390.544 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.639 640.145 411.576 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+2462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 628.19 395.774 638.816]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 628.19 416.806 638.816]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+2464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 616.234 395.774 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 616.234 416.806 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+2466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 604.556 384.098 614.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 592.601 398.324 602.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 580.646 377.154 590.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 568.69 403.306 579.041]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 556.735 392.845 567.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+2471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 544.78 398.075 555.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 532.825 387.864 543.175]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+2473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 520.87 387.615 531.22]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 508.915 377.154 519.265]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 496.959 382.384 507.31]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 485.004 372.173 495.354]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+2477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 473.049 408.536 483.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 461.094 382.384 471.444]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.987 449.139 371.924 459.489]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 437.184 377.154 447.534]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.987 425.228 366.942 435.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 413.273 398.075 423.623]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 401.318 392.845 411.668]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 389.363 382.633 399.713]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+2485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 377.408 403.306 387.758]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.826 365.453 422.762 375.803]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.596 353.497 417.532 363.848]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.135 341.542 407.071 351.892]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.674 329.587 396.611 339.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.905 317.632 401.841 327.982]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.674 305.677 391.629 316.027]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+2492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.832 293.722 399.787 304.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.911 273.582 358.885 284.32]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.597 249.672 425.552 260.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.541 249.672 440.496 260.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.866 237.717 427.821 248.565]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.81 237.717 442.765 248.565]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.551 225.761 467.506 236.61]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.495 225.761 482.45 236.61]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.015 213.806 439.97 224.654]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.959 213.806 454.914 224.654]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.902 201.851 395.858 212.699]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.846 201.851 410.802 212.699]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.988 189.896 372.943 200.744]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.932 189.896 387.887 200.744]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.716 177.941 430.671 188.789]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.66 177.941 445.616 188.789]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.597 154.03 425.552 164.879]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.541 154.03 440.496 164.879]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [489.645 142.075 501.6 152.923]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.589 142.075 516.544 152.923]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.866 130.12 427.821 140.968]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.81 130.12 442.765 140.968]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.551 118.165 467.506 129.013]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.495 118.165 482.45 129.013]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.299 106.21 438.254 117.058]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.015 94.255 439.97 105.103]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.959 94.255 454.914 105.103]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.988 82.299 372.943 93.148]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.932 82.299 387.887 93.148]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.716 70.344 430.671 81.192]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.66 70.344 445.616 81.192]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.486 50.205 373.442 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2528 0 obj <<
+/D [2526 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2525 0 obj <<
+/Font << /F36 464 0 R /F16 453 0 R /F8 465 0 R /F48 609 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2598 0 obj <<
+/Length 1586      
+/Filter /FlateDecode
+>>
+stream
+x��YKs�F��Wp����y3
rp���_+�U�r���X��@
h����4)�@Xl��咠�~N݃�������f�LZr$����Rq˦��X3�z�F_f�,�1r���/o���~��_��ټ/��Қ/_���/�,��������ř�(�X���~��z��1*,�DlY at _�Fq��/�t�(u�|
Xc�����xkL at 4��
Q�[�z
����Q臋���s�x����s=�G��|HH�aآ*��p��
��c��T
�#��g��绋(t���i��t�*�(7!��oPi���Mt�fv��D��d�Z��Z4������0���͇����R���.}���%-��Y�ႿNyp%P+v!rrz{3�e/T+��3�n��-�T⸔U1���+���	���q�v
�������fU�
+ܘd�N|o�E�>���!2�YfyFL�‹�?0�pV��6���?�
3�:
�jI��N�����B
����+��"e�$�;Ӹ/���K$�Z	\�e�r�<�?�n\;���ħ�I��M���|V͊d�e�-�4��j;
i�Ch�J��� �v�c�v? ��'WW�
��ر��.xS��������W`	��N�\�&���՞���)V
�4O�ϻ�t���w��	�Hb�P5Z���fVĨ��Ȗ�'�R��4Z�
 m�8���
�g:I�Ȭ�bH*ѓ
+��JQ*\���L��6*�pD��I�R����M��-
n��{f�]쇩Q�!J�ʁR�A�	P� ��gN�n���E�4S@�����|
��`�z:�����|��!�
zT�
��%	���'�C�)�6W��C!�n��|a���ٺz�C
��V6�I�F%<��c�Q�r�}j%,��joRk��F���d�4�t�X��(�l��)
+q��w
+��)�p�l�����O����_gBo��)���`�ޠ���:��
O�y�}5��sD	��o
+�)��Z�{���r1��?ta�c�u8"C�m%TGi��0�aF����
����
+q)�P��L�e�nMS�DzP���
+zyj�F��
�6����l����m�wG���\���5�.����:�-���q�/&����b�P�B���"!��*E�3Ql
�O�=Na��3��F�͐^�qz�9��6�t��^&�$o��z�+
+lv�ޕ���������;���
�'��L���E�*Ys�!{N�%��lv��۴Fy��ww���to�m��>B�+aO�>
ɪ�ű$�B�V泋,
+��'Eܖ:}Ζ���kiT�u������'�̇ʓ�W1��H�(б�u[V]�]����
m��pHi����l7�$Pp)
���1)Ơ%�82_D��������bϭ{뭅��>8�':��~��H�U
-bwY�W��Z�*�}�a���Uko��u�.t�Mg��X�%��gtW��:h��F
J�
�ڟ
j�tA'��@:���M;�l8b�bоd����"�
���H2Q��'���+vƺ޷�S��z�ٸ~˘�<�z ����_<g�)�x^��7�{�v�q�u��%�x�霮B`�l���
+endstream
+endobj
+2597 0 obj <<
+/Type /Page
+/Contents 2598 0 R
+/Resources 2596 0 R
+/MediaBox [0 0 612 792]
+/Parent 1955 0 R
+/Annots [ 2524 0 R 2529 0 R 2530 0 R 2531 0 R 2532 0 R 2533 0 R 2534 0 R 2535 0 R 2536 0 R 2537 0 R 2538 0 R 2539 0 R 2540 0 R 2541 0 R 2542 0 R 2543 0 R 2544 0 R 2545 0 R 2546 0 R 2547 0 R 2548 0 R 2549 0 R 2550 0 R 2551 0 R 2552 0 R 2553 0 R 2554 0 R 2555 0 R 2556 0 R 2557 0 R 2558 0 R 2559 0 R 2560 0 R 2561 0 R 2562 0 R 2563 0 R 2564 0 R 2565 0 R 2566 0 R 2567 0 R 2568 0 R 2569 0 R 2570 0 R 2571 0 R 2572 0 R 2573 0 R 2574 0 R 2575 0 R 2576 0 R 2577 0 R 2578 0 R 2579 0 R 2580 0 R 2581  [...]
+>> endobj
+2524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.266 688.242 156.221 698.98]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.651 664.332 164.607 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.702 664.332 180.658 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.144 652.377 211.099 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.158 640.421 222.113 651.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.564 628.466 180.519 639.314]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.508 628.466 195.463 639.314]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+2535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.559 628.466 211.514 639.314]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.61 628.466 227.565 639.314]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.457 616.511 137.431 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 595.115 134.829 605.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 582.883 145.29 593.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.616 571.204 166.572 582.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.358 559.249 176.313 570.097]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.827 547.294 154.782 558.142]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.878 547.294 170.833 558.142]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.929 547.294 186.884 558.142]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.98 547.294 202.935 558.142]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+2546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.413 535.339 124.368 545.689]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.464 535.339 140.419 545.689]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 490.032 193.471 500.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 478.077 139.81 488.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 466.122 154.286 476.472]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 453.89 213.035 464.517]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 441.935 171.192 452.562]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 429.98 176.423 440.606]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 418.024 192.114 428.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 406.069 202.574 416.696]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 394.114 171.192 404.741]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 382.159 171.192 392.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 370.204 181.653 380.83]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 358.249 192.114 368.875]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 346.293 181.653 356.92]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+2561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 334.338 155.75 344.965]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.173 322.383 196.129 333.01]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.446 298.749 187.382 309.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 286.794 167.983 297.642]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.446 262.884 187.382 273.732]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+2566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 250.929 167.983 261.777]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+2567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.446 227.018 187.382 237.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+2568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 215.063 167.983 225.911]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+2569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.936 203.108 204.872 213.956]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+2570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.446 179.198 187.382 190.046]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 167.243 167.983 178.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.78 155.287 174.735 166.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+2573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.724 155.287 189.679 166.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 143.332 158.052 153.682]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 131.377 149.056 141.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.173 119.422 196.129 129.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.713 107.19 185.668 117.817]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 83.556 182.152 93.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+2579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 71.601 164.747 81.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.382 50.205 177.337 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.432 50.205 198.369 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.328 688.242 366.302 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+2583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.397 688.242 382.353 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.448 688.242 398.404 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.499 688.242 414.455 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 666.324 394.558 676.674]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.631 642.414 395.586 652.764]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.409 630.459 413.364 640.809]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.296 618.504 390.251 628.854]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.187 606.548 425.142 616.899]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.682 594.593 373.637 604.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.733 594.593 389.688 604.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.677 594.593 404.632 604.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.728 594.593 420.683 604.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.563 572.676 466.537 583.524]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+2599 0 obj <<
+/D [2597 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2596 0 obj <<
+/Font << /F36 464 0 R /F8 465 0 R /F48 609 0 R /F16 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2600 0 obj
+[532.2 532.2 591.1 532.2 400 532.2 591.1 355.6 355.6 532.2 296.7 944.4 650 591.1 591.1 532.2 501.7 486.9 385 620.6]
+endobj
+2601 0 obj
+[513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4]
+endobj
+2602 0 obj
+[531.3]
+endobj
+2603 0 obj
+[833.3]
+endobj
+2604 0 obj
+[413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2 590.3 560.8 767.4 560.8 560.8]
+endobj
+2605 0 obj
+[1083.3 458.3 1083.3 736.1 1083.3 736.1 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1361.1 736.1 736.1 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1361.1 1361.1 1083.3 1083.3 1361.1 1361.1 736.1 736.1 1361.1 1361.1 1361.1 1083.3 1361.1 1361.1 875 875 1361.1 1361.1 1361.1 1083.3 441]
+endobj
+2606 0 obj
+[1228]
+endobj
+2607 0 obj
+[892.9 339.3 892.9 585.3 892.9 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 892.9 1138.9 1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 1138.9 1138.9 892.9 329.4]
+endobj
+2608 0 obj
+[597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.5 472.2 833.3 833.3 833.3 833.3 833.3 1444.5 1277.8 555.6 1111.1 1111.1 1111.1 1111.1 1111.1 944.5 1277.8 [...]
+endobj
+2609 0 obj
+[339.3 892.9 585.3 892.9 585.3 610.1 859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2 431.6 675.4 571.4 826.4 647.8 579.4]
+endobj
+2610 0 obj
+[446.4 446.4 569.5 877 323.4 384.9 323.4 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4 323.4 323.4 877 538.7 538.7 877 843.3 798.6 815.5 860.1 767.9 737.1 883.9 843.3 412.7 583.3 874 706.4 1027.8 843.3 877 767.9 877 829.4 631 815.5 843.3 843.3 1150.8 843.3 843.3 692.5 323.4 569.5 323.4 569.5 323.4 323.4 569.5 631 507.9 631 507.9 354.2 569.5 631 323.4 354.2 600.2 323.4 938.5 631 569.5 631 600.2 446.4 452.6 446.4 631 600.2 815.5 600.2]
+endobj
+2611 0 obj
+[444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8]
+endobj
+2612 0 obj
+[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 71 [...]
+endobj
+2613 0 obj
+[639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.6 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520 [...]
+endobj
+2614 0 obj
+[1027.8 402.8 472.2 402.8 680.6 680.6 680.6]
+endobj
+2615 0 obj
+[613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 5 [...]
+endobj
+2616 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+2617 0 obj
+[625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 [...]
+endobj
+2618 0 obj
+[833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 2 [...]
+endobj
+2619 0 obj
+[638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 [...]
+endobj
+2620 0 obj
+[550 575 862.5 875 300 325 500 500 500 500 500 814.8 450 525 700 700 500 863.4 963.4 750 250 300 500 800 755.2 800 750 300 400 400 500 750 300 350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475]
+endobj
+2621 0 obj
+[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544]
+endobj
+2622 0 obj
+[377.8 319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3]
+endobj
+2623 0 obj
+[354.1 354.1 458.6 719.8 249.6 301.9 249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7]
+endobj
+2624 0 obj <<
+/Length1 1801
+/Length2 12634
+/Length3 0
+/Length 13627     
+/Filter /FlateDecode
+>>
+stream
+xڭ�UX�ݖ�!��� \��w
�Z8����]��{pw��!�
N�{w碌o���5�
c�o����L at F@q��=33@DNX��	����$�HA!� 4t� ي:y ���, q���������� �sw�03wP���S�	�:X��
�́6�Ɔ� e���ɝ dm
��O�#�
���4a at df�X;��f����x��58��l�l��[.@G�) ��l� �&M@��� �)"�<�{��a�w���7��g����?��6���U��sv: �@&@��]���9a�����r2��0�5����d�(n�4Q�p26�Z;���5������ ������(�=�m*Z�:����g�?��b�?
N���
����\���O��KL��dbak`a� :8�#�o���� 
[� �v��`
r� ��xLA��<Pv ��?K�& ���0��!. ���0���8� ����(�X ����(����2�.����r�.����
+�!.����+�!���?VW�Cl F�?�����^��X]���5�C�`u�?vm���}F�g�b����ߢ�^ac�g���O?3x��_>����_���������5�#0��Lf���.
�g���W?���/��3�
�����9���
+��_�i����
�1X���l� �[��g2;������>8�3�f������6x�����h�'36��Zu�Q��]ہ_V�?���;��/��:38���b�����W>��rG��?J�S9Z��G�
�#�v�d� ��!�O��
+��<��/�������u��n!x��_���9�$�ÿ���kNX��I�
+���,`S`�l n6��Qi�� ���_D������n݀ƈ?��y-S��K��
+��`h!�͚c��{�:��� ��Ge�i��4
�ӱP�a�I\�	
�;�*M���M]x�w1�O�h%ԸL�s߳#�
8Ako��>e�T�]+M�,
��=x��H-�r ��⻶K���@N
�tkՐ�:J֏_�S�KC�B�\��צ�-C�[�V.@
Θ��	��ư��C��P����Z78��{�w�*r�J'��{��6��E�\[ou�v��wD�F�	��z
�c����
�^���kv�R.M��;�@�"T�đ���# �Tn�D���J�Z(�Զ阆	��
��C��O���[{C�����_��E�@�-f^��y��Qp����e�
�6+�,��RKyy�W
�0�
�B�򓟕�sO-ҝ[� r��m�oEXc�|1 �Y��b�]�L�x~A��
G�����o(4)����8!\|t�7w݀ڨ�(��(6�&�DC���g��
F���n<�_� ��وwE�a����d�u��D�


�J��
+��Z�-�YE���Ė�ߓQ{s-" �kHO0��^��EiZ��
II
K;�3��ƍ��U:�����/��Q,�o��r�tr�$��������/]w���
��ڗT�w��l��Z}��
�́#���'��Pgn�(k�Y��m��u�E�
�{�
��a:�Ge0nP��^���ɵ�����(�K�iН]��.�E��դ�,+
K�����7��$\"�OXy��V)M����Y�K���ʲ>>A30
Z�m�~�F�hڢgoז5��=|q�l0/&�\��9�4ӌ&�pÏ)�xBR�����jO@!�4pn�X�q��Bk�>��Ѯc���/�:J�T蝛j,Ɵa=
+���~�9�wiux#k��S�yh�s^m�S�l2�[/
/�n�VW�t�zK�{�R�M?� ��_˗�Qr���)IU�����W�+>9'q�����"��$&�'���b�Q$�f�
��I�x�rO�o�@��zΣlӧ?��Q
�aI�T�e���CŹ�ۺ�܃�~�����+Q�
<_��%IG�9㰕wݏ��^�
�7�:)k�YgE��=��	�de�9qs�p��=6���Ē��&D"�@���g�#cqud#��M�������H��PF
�����6_�x�@�}V���&�Fj��z�F=���k���f�bA��W�;
�������Fd}f��qA���-
����d~���K	{��dV����}C<�M7��m�"N���[� 3���S�ُ������\T�@�T�Q�}cj�����F
�e��T?���K�1^�'!*� 
�%%�Kl���� �i^00��/Y;T̫,4tp��GY�[�qI$M
7��*�N᭟��2����?<
!
a\ӣ0sw����
pCi��"x�Q�2o���N^�nI��I����AL
+�uk�m{���
�M��'`����2��m���-sqx���at�scz(l���Z�
�-��������������d�?o�M���N�[ ��ء0�)!
�*+p^�'���I��+ F=�R�
\缋�ػ;�M�
��
Z���u��.La��̟�ڇ�4zy	g(�@���
+.?Ӎ�{V�I6��1����t�;����խ�ӓyx����*�N���g�aL$N��	8�^O�2y�dŅ�p�B_�(�t�*GS�EÒ��oȕW4n�D�n�C�P(C\��'���3��ٞ�߽�o�įu)(�{YD׷_��rm'�(�:��r:��"���
+?
��_��p����yT9�%��qb�s����e�we��8ߐ�v^�AP2�v
��#��F1���ⓔ��;��[�k��
+��owTx$uS��K�O�,};wc-
��,S�ц2�,coB|FMVE|��a�f�O�v�T�RcpJ������6?�Ir7�5��P�����>�����|���-�B�8�>_z��
+�-�mV���1 4#B|��aw+�=
u�B8��"��WZ�
+�,�<+��0��5(��ٛ��eJ!n=Oh���%f�/a��w!�j�XO�~�~���,C�v�
L�H_άl�%�9l�R�X����T�
�a�Ǽ|\-HE/ؖ1����ɵ߶�τ�	�*��~��
+��y�M<�����:�����+7��Z�CF�AFko
=���^�!�r3M>�ى��{�$��������lക#\@D'�����˂H�Q�F��t4��m����$��kjG�|��s�dG�ں�2�A����ЪJˆ!�
#�$�$sw {�[�g�G�;4
/�*s��)~[a���;
z��ԭ�g���&�����of���)N��u�9i� vH}R-W�郩���A�B_s�5��#�Ûv;��YR(
�w,�
D�������A�{i<g�k�+��m�k�_n�5W�H
����6_�η&R<1�`��ܡ�.�ހ�&?w=ve�D�W�ɫ�'������C~�a��
�Y�Y�~Q�S�y'���r���������7|��.-�>1R��c��������<�%����$�I�1u�&���:����f�Z8��w�sX$�39>sݳj(��h��u�f�~BD,��"��R��FKD
+��s�����E��!�⤩e
>���pޭy&��@M�
�
a�l�2ʻ*��Tz��:B{a)�
[}ǏN}d�<P�L	���`5-�e��Y�����p���n�*C^�j���w;��z�
�*��
.ތ�fz��N�+c�u
��
.�p��|bܯ��a2
_T19���
�h�7MuY�X�l�^7��h�z�.Mj��Oj8m}'}�}�����M=F��y���H����x~���$�
)�d#T��١(�= w,�C�0�C���Y���+bb/
��)�����S�?�(���P�-�f��n ,&���+�V	@�E�-��tU�
	
���4��p�2��\
+���e�%������9J�lZ�
�4�J�m���P�J�}
^�
�3E��E
_<�����X����k�B�΢ٔt�P��岯n=��^ ���
r��
"��c̿4�s|[��
��q���
yD�缃O��eUW�
���+z��(�j��x�I
���Gu��B��BN]a�RO�}�L�l|ח<N*�M������$w����ln�BK3�T�3I��Z���l*5N�/�H��$�̓��R'����zU�^�&���h��E}H�zEMA�k�I�&�
'�^�SK��v�� y+2�T#vG�(v��H��ț�?^(;�=GL�,�1���S�ALӠ�R5d�C��'?���x
V�j5�����l�D��d�J��ge���O�vo6By�T�@j����3��cgU�\;r�-Ʋ"�R$G�����s���n�h�<��]6}��&ܪ���T!�;�	�h
�ml�=�ݜh�Iꝅ3`����k�"z*��c�7��CH�ZRmC�c6t��"k]��̕����9�����ž��)������a
�x,�
%�VD��.ݟ?5�|_�
<������u���t��
�D�X����YSi��ά4��dB��� �����p�V�;�yaT��w�1A����76��m,w�W�'��+R�@
�|�IT [...]
+o���ySr*%\��IQ�p�s����x�eb�Z����X�O��3���'׈ab��@���]P���r|�s7˜}&&
�B裬�.�p��u͔��
ߔ@��aYE�[K
���A�
u��džsk�Y��|��������oҗ�-M�Ħ$!��U����g�A����
5�G�6:,�ȣ�@l
)�[����P�xu2ń
+m/B���pE�D��\Ħ�~8���x�[�)�%J��OU�r�rsR�	�Oh�BA�+����~�����K���E�ש6�I�e�8
��
�k�,ůP�1A���akC3�ۦ�A
���ULww�$���#uj�g��r���k��'����PV�
�_dj�Ni3;�F���x�yJ��N�:(nu
��O�K�����\�҅��m9K'Q6�wP4�߈����y%d'���&��`I�s}8���d%��tؗ1Vll
�KmNPuފ5�\ȁ1��vG�P���n�۱X�"�$����{L�W����l�/����w:���b�#
m��o+���	�°���sJËR��AثH�p(c��]�����<8ɬ��CN[U�ߴ�,�\��K]���TN�F�l��s!�n4��Eė0��_Պ��XQ�_
�����(���.$	��
��ό���v������|%ʊ^���N
�[U�
��]�����h��a��)c�j����l��'�\��J�&=��6�k}�	�W��
� [...]
+��ӧ�e�nU2�/�
	
s[|��rꆟlV�w�� !��~{��{��������
6�
�=Q]��F~�wW�v�}h�쁔���#�i��-�������j��l��
�Lg�oEc�|K�r�z�%쐼��GL�'��~�
���S��GQ������V�ej�$�{8v�y�,�Is����\P?`ؘ[h��o�M׎N4����	�b)z
�)��}�Ʃ��G��G��V�- 

텂����+���|=Sǂ�3��߳D�0�]?

��2�խl*5���)� ��+Cqp*ۍ`MԜD��J�6���0;���@Š�
/���6�4Ar��]�3��i]�F��x�Ӓ�j
+� ���O�y��S�p-9���Fnj4ax�?u����f


�
��<�ࢽ��7�m��3��4}}����Y�
v}<{
@u�4��$�r7j��}5�a͋��o5Y�����)f��I�@5��oM��h�ǘuK�8}��Ҩ!�p�(�t=Fp�x�A�Qnz
+�/���P�Z�W�A�G�(K��;��	 }�敫apNt����$~͒����!2׫Z]Nc6gh�Θ��I_���0�Bۙ�����`66�$�����jOD�&Z@�3�:�ݖ��
�0�,d�q�e��w_ך����
IJ�<�R6�p�{�#��G�x�{W�� �$=a�z9�5u@�l�K�<"E�I3���^b�����r��c�l�� pU�߿�p��h�-�E����e�EB����q�}F�*
.�
�����AD��'�"�
{I'Qў
�����,QB���Ղݷ�n��S�0��(���N펌}o�!t���Hyi��ս-٪���^��
Tѣ�*�<���S�c�h��yBR:�C�}���bw�,���+������T���~vX�\@X�(DxER�wa�R�!�X^�_�7N��K�����x i�
����c�#��p��;�v��5~�UAD7��{�v�
$8�Ϩ��8 @E/��W�>H���ξ|"�p~ɚ�m�
+��o2)�wH_�<z1)%l9�>s�}A��+����~��8�(�my�����M.�~�
��}�X�WVy�+��"e/������ќ���[( R���
|��!,B�����X�%�Ϩ��̽�!" ˓��	���/��P�(E���s��o�bhJ����9fa���z��ӡ׺kԝ��![�H��;�o��=�m�y����K��,R��6n�'[^�Z� ,A?jb��k����P��VK|C.���u�On��%,}�:�\�?�,EO��m�q��o󡞋m��
BۏI���:5L
Op�W�B������
'�;�[�
�����3vb��TD�o�)� �����(1
+h�B?+?|�����o��ퟱ��
�s"�l
:q Œ�~�op��pZ!�`�)��g�Phb=��=e9Fˈ2��JM'���O]�O�T�Q�c���Jç
��'�;D0}���$�Z�K*�����q�r�eM�tE�pb�ݒL�
f�^��m<��w������{�1DIT�U��E�����u
��
Y���h]���m7�VQV��g�|��c|�y&����@��LB���K��
+ϯh��
�ؓhYsV��aX����#
�A%��.���2�B�� �376�
eFvS���|��
��/�-f ��٤�E�`wd)%���Z�"��y��|�s��e䝷
@I��G_��t�a��ޔ~��3h+;�?od/\����j*Ԝ�/�Z=�����N�����{
w�e����x����X���Tw���T�A:ҝ��v�!���85k��cq�����bY��m܀ �;�y�m�g�޹�
9?�{D.ru�oVl�8J/ҴA;�)hV��4�#�C&���*�'l>
4�U`�~��i^�ڧ�H�*���b�S=0r�#�<�9��G����P���z]�H`D�� X'� \d�;݅���?_Q!�9����f�[��
w��	dY����6�f�|��7�WC�y;�t�U6��{o[
E�ٺ�
��E)&�ί:�i�C.a�INə�^Xh��`bF���Ύ�(*>��>��2��LT��ݲY��T�8�74Z��
 �]g
v�7����>��{�j����w5�Y�ᖇ�'�
(.>�m��
+�>��_��ki�dҵN���q��z�O�ب��i}�|��
y�g܉�N�ޘ
+�^Zf��Oe�
��
+���K�k�w7_���53Ѕދ0
+�l5��oY��'�:�,d�؁
���nx�: �h�
h24�[
���=3���Ui�6�^���k$�\�H���
�8��T�v�A?L�q�g�W+|g3�����~��1���խ������yA��
-uF�͂��	 ��%T�	��9����JA|����"��['$�����'a���T�����X�Z5M�gӂ�_�o�D�"����T�L|���!�/��I'S�\��D�Y�S�A��
���-�J�N�\�V��@���p�Ϟ�|Ĩ��A�
#���lO ���v�(��
=�pT$�Z��4{��$�%����Ro�7;y��b�1�U�P`�
(�}

+^�|�����CG�(ߩ�H����`��b�e�����e�p0�
+k����a]#��C֬
�v���g��q��'&cE�:�z���ƃ��:�
%���R�{G����Ve<Kys�]���#U�3�T�{�Y�䌴�\���[Kt錌w��������WhԄ����d�~/'jo���ȸ��`�R������N��W*���Jg�v��T�l����D���<�]�FA�N�pwbk���
+��6��*ɞ�I�E1h�`�p��o~�����p�F��T
�
�yT��F	}gA1��X��_`�^��s4�}fކ
uB������=Je~�����o��]��
O��
u�)�{�H�%�&�j�� S��~�+�l5&�(�r�|��+ui���ጀ��3�$t�*c^@��I���ґH���V��!)
����
Um"l���DU���5�v�LsVgW�f;C,��d�.UtgX��
+`Q��	��#|��Tnǭ��4z/�0o{
i����}-
|�6v�
y�M~t^���L�b���
����ǹǖ�_��Ơ`�J7�l?=������U�q�T�F��^�
}<|TM�0s+�@�d�������͗��
��b�d꼀�����G7E�{X��B��Pٳ�9���k���[�H
����,uW�V����+��>�D~f�ڷ飮���8�
+Z��a�Ώ����?V
ڥ2�
��=������\ݳm��e��H-����?"�:�	z��̂B�n�z�r\D�4r]̶fɪq�su�L���ݱ�C$
�55���
��k������]��Y�����4j�g��y���Ϧ��^
+C��F
'vY/�T��K:�=���Da�_*��Z�jr���ξ���C�ܓ.X���&��S���.�$��g��t�4{rl��X��
��5�?0Q��t��
��� iw >�
+?��qLQY���GE��	���";8
+
vVw$�3D8�/�IU�W
������v8�1�aV������u
�/���l"����@3
>Y�L=_�:@.�*�W�������w���<&H�
��Y��K b�/K���m���D�PLE�|��O3�����y4Ó3�#t�ԊQDI�U��+����
�9�@44!^M��r.����m�=�t����F�o1�fI$�B�.��d���s�d����/s�0��Q�i�Z
���s���Jf��'�
�?H�Jo��t$�h�؍�'�����fBh�D�����~��%
	,|�h���4�Y΋�I�~�?�.�w�u�O
<���!7F���e�+�_Z �J���#���Z�H�c\/�����҅,0t>�A���PxN�7��:Ip&P�;�;��YTLӏ&\6��#��
6zn��\ɮU
#4v^\7
+FJ˚5�0�&��^���F�\P����m���

��
!�8�K
�rI�̡]1m���'�"�ʜ��ҽ���wE=��/��X��#�d�	�����
Ŷ⇴��#�q�;�<:��M\�������K�1��+������J�Gc���hM*Q�=����ڗ���k����ڵ\J���B��L
A��
�}y�⌒b]�A V
+™�=��_�0��F<!�h�������A+	d��b�3���i�D���@�2�B���Ž>�1M h�]C�sd2�9��͛��RQ����|��$�/|��0xn<{�zO�����g3>��%��b>O���ٛ���^�
�9c�
�o�ǵ_|	�L�s0�{wC�UTYr�D�6�)�î��1B���%�� ��m;�稶�,B�
4$��N�GݺH�f�<������,6�(h�T�&�+'�I�)��GU
+�x
+�
��̣���W��}�6璟WN��:�"�X}�<�S6�'Yhn=fL��nwM���{u�:�+٦�`#����"��
�f]�1�1}i�y�o>Vʏ�j�w���^(�����/j�S7AE�Ō�Y�̱UE�7I��l.����/I��gO�N�4-�h�~�I�~ʜ� n"���TCN�L�o���8;>) 
�.�3��������	�:P����x)�4�hu��u
�aH�R2��׌ ��
�*����
$$�E�����I96η�R at Aj:<���Bf���ӽ\0=V�w6W�N�k�3�k���
�Rb���W�գ��C2���U��GE�om

�8��'mJnRGRz[ѭkjFE�)T�KB��bk�?J߿���l}�G�>��������_Q0�"��߄����q�A[��3~sJDƀ@^<۱�V��DD�x�$`����c_�@ɩ�:�%W��N�3��x_��K�RA7�œ��{��N��Ot闑�+(�?�jb�w+zj�����D?~ [...]
+j�W!��ږt�7
7S2	]�Ԓ��
��c��:Ud	��k;�D0�<׸h�-`견E����A\�N�@R��U�y�����c��8�/�N;[�xE�87AS��z5����Zή
��նTA��-v���h`+Y���@�H�Cԫ��.8��!��o�F�DR��~�œ���������{��H_�n‡[fy��Z��~�r�3�OT�8zÃ�ے��F�F��V;��AK�,A�j�*v��	Ce�'vB]6
���t���I���ު�b�7 at X>-1Q��,�R��@qi�dk���ʋ��A-�����h�k���#�|ڤ�
Gx�������T�W^
+�5K�+�Ԑ8<N����{����gE:Z?���2�Lj�$�
���9s�OT�
�'NKG�o �����
� �B���Fu,y��h
*��O9
�����:�0�����{�(��h+:��|�|�2/[M{Yid�d;R}^�F6���V��<�mt���D
�ft�� 
���'"�B#����m
*
����
���N-4!�s{�w�h6Ka������甁d�p'V���
B�aM�~+$�
�"�&0��3�D�iD��p�G��Q�վ��
�㉓���4��?�M-&�jc%sjT�&X
�|”�.�
z5��
+j��zU �E�΋e��o��.�q�@R(�Ù�Ќ&��/~`�!�}D���S���s"%�Z��z]1��`���Lן�MJ�G=���]�3�H��
+M����D��v<Ҿ�E|�3g��&�r�
+��X��VBtB��͐��ђz�/=*�B�nP��F�f-�07�`���w������x��2�$l���S#_��Zi�
[��M�y!�>�;��1����^���+R�TJ�k&�j
e.�Q��hG޷%{�#��n> y-R��|���nT7�8�t�¢TSU�8�r	����E*Zm/eC�~���סD䡳}�(	�'�A5
+�<�F�`2o-�H+x ��}d��U^<�%��Mo��{ϖ#�A�Hl���h
�	���*��>��ǐ����e<�]X&�(��KÔ1.�cD+�#�Z�L����]l�~��Q��/�c�k�^
Q���
��$�|���A�����؉���q��0��Ks�m�Y�E�ב�w-
��6uE���gq]~(�wť��)t�z)��bƧ���f�)�t	�t��4�
��)ԠN+�
�+�)^!�
���;!}
6"�=���
����
�/�>�)������窙�-}��C5^K�`:t:����-%Iiw��Cu�
����J2�[��f��>�WF���Z��ݎ�ў�ǿ��e���]f�%�"��}�Ń=3��
7��V�n.�QG+{#+���J)
��=�;�_M{7}�1#�bI�k҂��<�u�jL�YW��x���qK�^��������'[(��^�
���V�F8�p��>� ���B>�s��;��S6�w��9�͇RҌ�B�ތ5���
+�@�C
g"E�R�5��X%���/����=gcP�F��#��6]z����钙Ha���2�yA�a?���
+ at X{�
+Y���t�J������M8
>��I ��&�
-q?��E�P��&�1�,�����s� cٙ_�j�7tMc�7�8�Ix
'�m���� 9�
�Ho��v��e[���_Ǻ���;Q�^��mx��K�U��jIZ�X(
��5�����[P���֬Ґ$�(��G�̺Bm��3�9��q�*�sj���ҿ�9���h�����+,��Ñ>�9��ro���jR(�Ɛ�4�:Ek�{�d��๹�k;�T��?���A��<���sg�ΕmҵÚ�i�#�hO86ξd�$�Z���1Jc{�U�R���Ϗ�Q>J�w���M
^��JA��
���{|:�(���.5T"��"r��j�����;��WN�(H�_w[�g�(��Cۼ�c������+2cCr	*������?]
"��R��fG�7�;�0�/���k�^G�ۖ$��#�������i
�9�dCI�T��,�[C����0�Xx��7��1�

PG�e�h���5gt�>~E�����@ߋ��^���.
[�}	�!K��l' �x����S��x�=t�G��\
kT�5@�,��F�jy�9��Dа�(-��5�sT�]{��̢�ZŠӦ;�����������R)s�����ջh�	+��Ei�4�:
+Ac���l��'��E�7��_	��U	�/�Da̮~\%����/?�
jO��!���$�v5H�8o��D$��lZ$�
+���i㻙mu�vY��֗cY��z���r)
:Q?
���.�\\f|�,�o�%>��Nd����˄*݁,J�f�&�q
(Ү�n���n���m=
s�1=���c��4�ӗ����P?�f�u���6Ǵ܄g��1�
��C�_�
���'�o��~�%
+�]
��W������8���@
+�d�V&u�3> ?^LR��ǎ����k�j`���K9_�GrT<qP��Yht��F�_�M�$Υ��� g)��q-2iG��0����ۻ2h�&�V@���.Ǫ��
g�rM\^�C~��m�"�Jg���P�,;-�rU>�ED>��UP�
++,ΟռYN�wl�%!K�f~5t�E��
���*��^!����zxNA�� U�b!���aB����J�,i�U7�
."^A^�bO���M-#��p�t�cL��r���U�=o�:B)?VZ �9m� Ѷ8DZ4$�#]ޠ�l��e����Ӹ�"���'�A
�y:�3v22�\����Xyh�ԋp�Qs������/iW��Im�e�υ���L�/�����~�a��~���iEa,�4�HrZfU�Z#�0�'�Z�&7���e�ij
+>B	�͏��P
��$����)ps/f
;��������yp�5�k�����f^Y�
+|�/�
+L� ]��)�������\��L���ͼ[����v-su��MO�
�.v
��>Z�(Q��=��ȸ�7� �M:r���~�<?��+({]
���,���`	i�i��~H�T6��Ŝp����3kiVj��R/X
���7
+endstream
+endobj
+2625 0 obj <<
+/Type /FontDescriptor
+/FontName /UICWPD+CMBX10
+/Flags 4
+/FontBBox [-301 -250 1164 946]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 114
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/X/Y/Z/a/b/c/colon/comma/d/e/eight/endash/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2624 0 R
+>> endobj
+2626 0 obj <<
+/Length1 1761
+/Length2 10869
+/Length3 0
+/Length 11837     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX\ݒ�!�4��XpnAC��M�иw� �C��;ww	���{��!3����OߵjU=��צ&WRe�`1KB�
��,@>��GQ
 ; �†JM-f6p0�X�8�� @^^ ��	��
 �������D��Al\��LL
 tb��$�|�ۙ�
�

L�V� K�*dvpe|������
���9��XP�@���`61�Fe�G���1���a#G��^r��CE�"�P�FkKW���U��*��!��t��T0�����\�?�Vf������qt �>B��v��;U
�oq����F����
����
`�w��^��l�d� 2Xڃ�[�o	P��%�UVJMUM����
̬
>�����?��b�
Cݱ3sh�����������_�$�A#3k�������BO�� n@���� v�*fe��8@� ��x �!v��<Nn. �B�&n ��
�����U��x����l V�X�^�
�*�B
 V��z�BP-r/�"�BP-_�EᅠZ�C<P-J/բ�BP-*/բ�BP-�^�E텠Z>�T��
A�k���g����:
_�	�qA�@K�;��N�"VV/��l�a��B�4�
+PU�>�/	��_�2{�����*��:����������E�SWS��_�_
��/��h�B
�zA t��R\Э�f��֡�B^�C7C��2T���2����
��l�b'�v��'N�s6��-���#z[�OG�P
�2���E�?v��.h�=���O'�T������6i�U�`j��@'qp���Z��/����B�;��ȡ�]�Bhy׿���q�J_�v�n��0QQ��3��0�CU�P��s�y��D��
�]�}
�7������]� Թi���<�&��S"{��VԤ6J�W�D3��l4�eހ�-��O�������d����M��Ò�>�QISO�N��)_�5�R>�n�P\�
`6�L^��U
_
,����N?�9�R�����HӮ�T՞���^C2�R-(�'
�
+V�ma0gВ3V\
��o?O� �:ƅSH�#�]6rf�
���g�k��W�
����k�Jo���
�̏ɚ�J
��Ҁږgᩓ��L_��Zl��&��h�*"��,�
+�}�a�МC�SUN���v�G������P�4����su�W��ժ���ZI�@ƒ��t��Tϲ
rs����U^ɤ�Q��w�%s˃�۰(�����e��g�
�ω�u�r
��Dي�:��G���h�U$�� ���Jݠ�xʟ�q�\՜��|��&�]%+W���r�`�7������Qӡ�P
�agwψ�*���-���U̔?Y���r�YfQd�Q��&���'��s{��B�Fw���Sd��W�+s0�[h�3?
+쒛�ߍg|���?o �e���%xm�f��=i�L��v�QM�"
gSOzI�7�K�Ċ��rVRzg)	�e
�1�
�������AS�~�&���z�� ���/�`�S��`c��w����O^��z9 ���=�U�o�D�W~����c��v�G*���@
���,{FnZ��9����w|}�OB^�����rx�Rr�;��ې�N�������8���l
�x���'����1H_%��"f��c>�P�5�k4^Z�-Eo���Cb骈ߗz��$[�3���ڒҀ
^��k,���`�0��{9���`1�(�w��'��4l�8h:�-ô��gvZ�1�1�N�DB��v���n�N��np�DT6D1���"��i�K���Ү���O:��F0���>���R�J����k�NwK��R4L�a\�߄�p�-٨��h���_-�@p;Q
��O��Kљ�Gƪ��~���B/.4藧��~�C�hx��N9W�
��/�X���("�V1�_�wܛ��=�V���&SN
�~"�y�ɋ9�ϾQ�#�!S2ۂl
V���<t�.=�Kv�5�%B��
+�׎���!�-\l�jTIpGb��
>�t�'���J~�����Up�sP
�'|�]��S5MsBN����dK�����ߠ!"l%
:-�p�!R��+���L��;Z
�߃ZV���������}��Zʛ�V���X>~��M�u�uh/
���JP�,�;����
`��.�6c����!+
Xj����ƍ,�
+2�)����O�l�e��{�cJ��y
l��&Y-8��fT}0Sݘ��H�Pzƣ��C
G� ? �b�ʮ�\VE#�8�����2u/���sI��v��~U�
+�1�bҲ�9^�qe!E��ק&R{�d�ȳ
}y��1E:�ڮci�Qt���vx�����+~��f��
�5\���������A[Oi�}ր��I��Y�Z.Pu�#�Wߊe��-�����4�s}��_��$<�>�K<��
�[��
�
u*���-����H�[t8�'�u
�ɔ�)��$(˼h9��w]d��������}��
�6�u�һ
	U���I2�e���iʸ�v͛n�hrc6��m
� rB�v�񀡔D
d����k�$
�|l�$�K]�e��ν87d'bZC���M���3���:8�s�r�U�.�ޯ� +1z���G� ��������2��ڂ��47T�>zF
h�	�:��U֚�
,�	���kR����*���螬sy놳_t1��ك�טc4<� 9�z%��������&�
�p ��OLΓ:�E�UA�@��	_��oZ�V{�J;�G$�z1��m?�3��DCjL�N
wtF���֚ }�*�feh/?f�r��q�D�k����ST�c���5ĩ:f
f�$�O�2��I�^٥Q��ї�r.��t�U�Ӷ�zr��x/�-��������c����1b��fW�T���wX;o���We����ўf��k�����[j~,��T-���S(=����8�E�6Y�xGI����#�@�	��_ޙuWT8��ލ�.�:�,�uva��h���
@w2/�!-��J�c?��(\ �CWI}�O_0$Ž�d��0�-P�A�]��l2������wnIm��2��g�r��H�0 {J+.�(3��(g��ۇ��cM��>�'-�8�����T
峨�҈Ki��y�p�P�g
��^'4��pƅ
+}N�zFW��7�>��bK�@=�qݐ��z��tא������1����#Jy�R
c�-��]�=X�)-�
~R�Yj�e-m�͈�k���_F6���^�ēUP
+~
1§
d�v�k"�bb���j��x����H���|�K��ǢЌ�
Q��ߞ��az)μ�m^9/g�6�p�~b̭�uqG{8��ыT(ޔ3
 *�h��
������j��
�'��c�nH��N뺧c�+�g��f��j���M���D9�Z�4|�	w>�`����/��/.D���Mke��GJ�n�C[#{m�K�a
04
�)�>���!�	\'j�)�kεs�h�ٵn�x���*�9��$]k0ᨔ�f�\�Z�|52xFPk at Gq�2"4|]*�(w���i·���@ex~WG�<|(z�A�w�{�0�)F��ʀ��\�(����P�n���cn��˄��k[r�ѭ������� ��w���̂��3�>�-��Wv01�ϊ�'�1��`�,�G'�_i����&
+��7����,�U������7>g=�H �T�GiT�b��i��
e8������-rL�qbk%
�[�D+M[³�a���
+7���w�H�2�I)�z�-���"��f?�Cj��sqL��m�b��u�i�GF���&}��.(̐����1��;��Bt\j�+�]��_�v==_�40w��
�P��͊O���2�-��+������><�o�z��,�-7g�s�
"8��]:j?
Ćٺ�8{��92P���M�E[�Z|�@�s]�Q2J��çcp�2��?IΈ�ƀS������Fk���,�1�
+瀎�
+6�1�=Y�o�r-X7o�ʶ}�NX4�X���[3�Fj�����w�.��y�#�ϳ��]������op��]�͑�����}5r]���+�O�1;v���S�F4�xJI:��}��M������ �<_���N3��l��a�jG����2�:����*�s���C�����o
Ϥ̞�|���f��?�`�~K��~���z�ΖP,{����b�cLi�)g��c�1��
��c�c �-�'9"[��͓�� �<[x��Q�_pd1U�!h�	n��}"{R�Q���.���-�n�(Ko�p8cmJ���J�`��7'�]2�E�bj^^-�+�fC�>�:��\��汬&�dWz*x�����
��6�K�����Şq�\�5ޏ�������>����uJ'�jwf}���X͔u�fj&][i��)3P^�d8M=ښ�Q>������G��������-�H]@�w��$S��*��
�\����+-mP
`��U��.&aG�
�E�f:}��.������4���[�'�t%�n�6o_ª�o�98�9�#y�L�`�dk�L�։���˖g ��b4�ޗ�2V���]���Z���oj����֋�S�{s�دI�N�KDf����WLZ���u3���Q�O��
H?S<�mS)�]���
��&:$��JQ5L�c

ĕᔯ� �y�� `��F����V
dh�h��c1�^��>J��ڎ!bs4���*.�����ۙن�`�y�-*���^�L��u�����ߵ47�8}%0,Z�J`(4J���y at 5B֑��FI)�f�[��!�s_���e-H�-
��Wc�N��hv0�?�q
V[+�
%a:>\#�����
v
��
���tS��x��\�t�U��USa!�>#H4
�����2R�
�%��?�_&3�
�y�m
+�<�R��M��>~
���W
	_yt�
Z�ۅ�;D^r��L'�Z��!!�g<D�$�*v��&�T���� �,
.�wr�^�^oNv��L˟�Ah���x8�-�:
�5����pM����>3�ݛ��Vv0��,�"J���'��ۺ]����o=,�S�Ta"�W���~r�e�z�a�s
�4��\�b�0�ő0�#S�&	��z]���t�§1�@��ɬ�v�tA���˨��c̽,�_��3o�f��S�HbAz�J�އ	�	�#�$o��b�
I2�&�}�����`�]�?Z�3����ˁ�u��Z2lx�eHUO�Cq3K��Le9z
90'G��\�y���.��OtI҈>Mr>�����Vg�?���v�B�^�-��n�����P�H��hf���_l�q���t�yա\C�h�F
B������d�߮�_�+�7U���j~'=?��t�hM5ס�
�XJ�귊���(���M
��'�b��x�p�C0+��ɮL�~\v���)��e>~�.sC֪��
+z�H�x��y\���~�,t�F��@O�]���擥����8$�]�
৲��b�����bq���&vX���WE���
Y� Ӯ��(A�uYd�Pv�u�Y�̪�z�d7(;vN\P�*~sŒxa��9������V[w�M�ݗ�s���w3
	�QG��M=������Ċ���q�3�=�@�R�m6n����kh����z�
/u�v-u��Qk���Aeg|̳:�{��T��0�Jv��#]�4�|z{
la���ʍ�)`
��M��~
��(O�uG��&���
�,�<�T5 g�
+r�9G]�G&�!��s�`"�r����C~�O�4���s� �`��}�h�#�7WB�0���+��>32>3{�lo���y at s�oa��k�%2�P������*o{
��K;3J5����r��������
��h\w
_
ZW�~\�O|�a��CУ3a"��>���2NnXyx��Uiacq�BU�������a�"1�kϨ��4�=z�
������B{Ov�F��d!H���l(HI Q7:�h%'���{�����`�P��4�w�>
l
:�;4���Y:��O��h
���f�p�aREw��!4����J�

�>Q�8���-����Oɣ��~�`�PS�U�!񷊏ٙ�#7���,�.Ru�k�d{|�yU�:#lY3gH�giT��|
�.���d.]�R \�W�&�7
�*�_Ey�
+*�
Eg����a�]�U&��O}���?�O�"
�S�~��+۝n5����?6B��^!2Qf�Q�=�Z
�
�j��?Z�.
5��?A��̍����V,S���5���$��v�G
�ĺ^
��T�y��Y�®�ER��l]�
���Re�s�o�o_.�g��0��ӵ�9��Z�H�^t���޳�j�t� �X-��b\|�
���(u+kt�IC�,`/5L��E�<4G=��$�� �xh��eN�x����w��1B
+�
�����mv�C��g�5�
�.+�z��E
����[��5)̌B�DfM5��.v�i����[2?�h
�R�콣1��l���֘B�
8Aw�Ƕ�=�{�
+)����=[�`�߼,p�0�U,b�����밳�gL��
+xݷ3�K�?.���Qɫ,d
�M�6P�?�2�5E�~@u�+@���0+9������҇|QW~HW�
�=����?{"p䮛�����!"$T��l�>6�Z):N6��ZS?7֯H�tޯ��,2J��_�aF�%�r
%����,/�υ?�+��+�A6�	�{��(���C���5P\���׈�KڧK�
+�����߯XrW��b���kQŦj@ 
�:�>6�O@$��-����(
��ڐ/�gF�a���vv�G���1
D
+:�%�n
Nu��k5��D�h���'qE_p����G�u��gA�o���~:��J��|��
�f�ԏ����E4���~~L�`#�*-7�=Py�h�k��P��n�r>��St�����,��K���Pj,*�V���}��a��'"�3�Xf(�ݤ��?ʅE�:P�;�
'{}1q%4�
�
څ}tz#
�>�ok�"j� 
�Q1cUk|��.�ޅ{��M���Č��O)���q�09Z��l�J���� zs�����4z�0?��Ճ|}�C0�O\M��fH��
+��k
����^�R�n'�;�߷��X�Foh�:D�k�
���ԃ�#�&U���ka@�D9h��׼�E9�
+C���j(�5�5#Ԫ�cR�6$�R�+�#��K&��Z" Z����;Q�9�c�ݐkO�A����k*�=��e�9��iW9�z����ތ�
\@��n�i�lh"��&w-���G��m��R
���+>5��3�b�֥�Z�(�až���?N<j
=��b� �U8�{��f8%a�&gJ/oAQr5���n��
�9�tx�˻'Y�@�؆�VO)��(SǦ�w�u*�Q�f��c�N7��]�%Q��i��;���j���a��~?�唖�+S�f.j�9g3��l3������'��J���
"�oh\[��b��|�������n�����^�'�S�6})��Oy����B<e��kd�0���M��~��N-.�i
Kk�>6��>�t���
����Ɂ˩i7�g��bb�Z(�~�n��
��gm�0C�	).L�1���6�˛��+�
�
Y{�1��
�-�ER��,��#�(TJ��Ȳ�~��q���p�F�
�,c�;��ŷ�.���"-R6�i�i���u���y.�:�.���|���%��"oV�'7�^��
��(��W�k��<m�%Ӆ����"�˓�A.忇��p�
w,�'�l�h0�j�3���A�'{��d�m���?�WU
�#0�=s��Cݏ\�-J��S�W����ᐅ��{Υ��Iaû���`���}�����[6F��	
�o03�N�ڎ;��3�M�8��GH�!\�&���Q��|t���ZJ��b�t
 �M��CG
K�ۼlu̬�k���
R�8c�������ɤ���?��X;�q���?��Dn�J� �2�ZƊ�R�s�ݍJ����ښ���������@j��Ю���"�v}_�o��q3,yMг=(
�+���,�����F�� H�LΆ�q���|�*���$y��
t;E�V-�|�+���٣m��_Z�ֿ&���x��
�VZg�r���I�ZMZc�<FRB`�Y!��
+X�_�� V��ѩY�1�_F#u�_�(
��c_���Z���g��W6o$��o���%�����j=K�\N(G)[@E�{��">� �m9h�̒�c��!l��a�">�>�%Z��g�-�Gv��+`:B��%�
k�;_�zA��()Q&ߑ�(C*{bܤ/��>έIÆ��]DM��q�
��^i�n����9�J�V&���yV���2~
���3
+1�5�#=<Cu�H]�L�ғ�h2�O2��|5�x����^W���S�ߠ{A_��o�x�IP�ǻ���y9���g�?9;�#�9��͈�w
��v]���5�"��4�}#��؁���Ieͺ�����P��Ib�)mI�e5��wWsA�I<$�x�r���k����V
qz4^��:��Ę%U�DT���ǟ�k��E�d�+�j�6yf��R�{9��+��{c0�BT4O`�ʙ�ٰg�

����DP_�Q��Ǧ][H�g]���I�&
��B�g|O)���&P�&�:�S$�����{�ӗֆ��J���b��dH�.t���Y�l<���
F��r!.Lt��	��jeE�2So�\3c�d��*&N'�j�0��U֌\��'�+V�r�6�rob��z�~[���cc�U�ۇ�
&K!�yq�sЙ� �?��4���*FgFQ�ӐO���
+9`�UB3���9�f�
�� ��yMf�3�����
���VgGH;t.c	#3�K
���rfg:Di] ��ڽ�Q >�{t���߿�9�c(�%tǼ7"��&e����������F
��N:
�x��K��E[����]}r��� s����h
z�G�!���
��.?j
+.�u�
Q8��N��FM瀒��B�
)Ca@�^�
_
�]F��:���BKm�8��D.�:��NQe��T���v������c����M
��jY����� V]�4�'��Mq��r��0�O����W�����Ns|Q�72����,�����=��H
�'�J�MS��Q'g<d冭i:$i�R�%
O�� frr�Y�-v��_.qx�q��Q��ԯ��䩧�0�
(_���gH����J��9 at Ov8˥�`W9��&a�1��/r�v������g㌟���2:�Y,5H��!p�0�\���>F��-���%��J��U��(5�}3O���E)��0Yy*��.�]���M��p�@�
��
�Y�)zSD:���oX�:J F����BE�#���e�SF9*�[ۧjܣn��|CWӶ����zM���^�i;L&r�-���^�@��:3T&a[�5S�	�~��J�/���2�8��p��q��}
��)J	+�h+�G
�0�e����
S"�p�
4���F��sk6�?�=Du�<�Cг7���̷M1��c�=�7T�
&�A=y�8e�V[�����<
+�}��x��@���[ܾT<�����h�z�d�
@��Y7Rz��b�8��#��F.��VDL1�Ei�GĦxC@=�
+M��e7
<]l���]HZ����y�u����G��4��V���c���B
���!r�{ȑ�����ۉ��1%�T|�m�Н �PD
����0\*,q\����<4pW�Yd���G�s�S�"��H�I�氤�	c��S��6��{~{��o�J��Ɓ��V�R�����
a���
��B��!�nU-UƩ
���U$���ܯ�6������;��C�ZGw[q,]��iVخ0])�>�M������a:?v�X�
�B3l�٥��gh��%�|T�'�/�Ү�Aw��.��n�Z"������a
t�y4G���6UW�/��h���%S���/�(�Řg8���Ȓ8�٪�����+:Ka��
���6�����c,4�
�Lcp��M�*�4%
H�T���)�6
_�s�U���Qк��<���˾&Rl
@���'���[�+�2
���U3*R��?���4^/|R��r?{oOQ)�h��*�hݱxa��E���/��ҶTk
u�.�C\�zO �~@G{S_��Y����/� Xn,�
sdO�♰�u����kH�jUD�A���
aW�w�����p��Lp�Ɨr9��G�F��u!0K,0����E��@9��?(G�*	OAi�>�l{W���n�P3����iEuD��|�{W�[����6|%�h
6�ٛ�!ly�.Qsx~Ԣ�p��G��8�/ [...]
_���g����=O;�
+:ݕ@�{[fx�׬RQ�y��B+1�]Q߇_˪/��1�[�rn
��m��[��
+��@_�'���!�n���
����ȄO���!F��
��‘d���姕2��r��9�T
2���/�S1��k�d�1U~x1;����P �
F
��-��l� ��
f�D����
��$и����^4Ծ٘�5J
+�͌S�u��ќ�y@�l�^{SJ�nt����XP�	K�h�
֣���-����o�V
x>@2P�)�>>6m
��&�a�$a�>�ԑ�Mx���㿭&v׍H1���x3�=����z�ֱ��v���
+0l�-��-��%�xd�(�Ӂ]�5�+y<�i�X_�#���L7
^A�v��N�A���
LJ���?_�K�3!a!��z�?oQF����i�+���l��^��n�<�e"j"��#�2���oYi�����>R	�^0������t������S(
+�]|]Õ�c�,{�^m���l���.��<B�G]���y���d�i����0��jۥ������Hټ.z[BA���e�:ϔ7��p��*v��}9Zb��o??�aL.e�K9=1�o��d�sN�E�2A"\�&>Dц�SV�Fb(%`|�R��5����ܼ��\GS������3�a�p��۔q���f���4���@�R����o��j?R� �V��Um�����0sW����u��Dž'��%�Y"���DŘ_����w
4@)�����Z�K~&���q��F[R��b�?���R2ySu6X�W����zo��8�X�
��T�q��1	��FUU��yw���	��WM��]��P��Ґ��h��ޣr�&��a�2x.�H�3/�u<�
5;�)�A[/#�D=��k�-gռ��܀/L�:d
<"��(�!�����#����9Q�,v�
�R��5A�����w�ֺ��pH�H-����ְݗ��śš�;�,��$
cA��.gzi!�.ɬ(
+��f7�:�)&�ّ�%諳D
����
l�q8�A�]�<)�PI;a}���M�R¯@qA��;<
+톓���<��9{�j�ׯB�}{هF���գ���C
��쥄X�Q`

�˨
,;Q�Y_��~�fQ�R_�h�v�@�X�y�j|�ѣ���c�P\q�yx�V�j��ع��=R�0������=������x��8����BH][��,au��&o��V�H����4t�A�j��-c�m�bn�1�VEމ|�4�
��̄9�f1?���kE
-��j��C�,_��0�o�I&��$�k���w�~�U럵�8[/��Y{���t�SM[5<��[a�}0M�n�3+g
`.K�k
+��z�
w��;���;��},��)��.�>��V��(B�e��ة�Q��
-Q(�l��1�,n�;��<Z�ܐ3�G><Kr�;�������gu�
������W�
+endstream
+endobj
+2627 0 obj <<
+/Type /FontDescriptor
+/FontName /JGUSUK+CMBX12
+/Flags 4
+/FontBBox [-53 -251 1139 750]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 109
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/Y/a/b/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2626 0 R
+>> endobj
+2628 0 obj <<
+/Length1 882
+/Length2 2735
+/Length3 0
+/Length 3324      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<�k�I�Q�f?
{�3fb�}I�������1Ø��9�}+K�c=Q"�II%[�,c�FrD*�;u�yO�9�����{ݿ��u�<*
+�.P<�
�$��P�&\0�3=�j
��Z3
+���$s,��h4
0�� p] ���<���f�P
+�Ǘ
+
0S�&�L�A
+�%vX�/�ϩ��2� RC5"p��8�A %�kB�p O�Q/Ї@���y�&y��?�xZ�_[� %�c
+8�1�p,��$b(��!0{2�,����a��-iD�=��[�?��/֟@
�SC��QA
+`Gƃ�?��{�d���b��	ɇP8RS
�G�dI�*������q����N�����c�-1�
��mG,�Du

 �����7s�D!� '�4���
!��ku��Y�pd<�� P�,��
�p��P at 8
 ��` �p<�4Id*'�t&�&S ���`^�B���Kp-- ��Q ��rR�#�0��`����
`�P�Ѿ�{ijJ	�"� ���
��tP����h
+H�~�������A0�AX��8�����_�,�{o�R��-��i�����d�닼�4>wZ��#T
+e���	�{�&�L":�]`�C�
{�ԋ���}��=O��,h��??�-K~&�Q�ð��Dpˮj�y�C�}��__m~�:͜d	\�+�fCN4�^��M\z�u��\Lf�vJx^]�bI=�?7�7�\`�es�9�,֫=V2��R��0z�ι�o(�y�M:vq�/�/��ע�J����~[�zQu
u�;����,�|�+|�~����O��"��T���\+�N��^�?��X�l;����e5�Z�T��z�گ�2=D-P�{�N+�Z��dhw�v�<�E����
���-�����Ԍ�{e���S�W�R~�T���7ECZo�n��Ҁ ���K��-~�g2��٥>�U{f�-�A�8��g�Z�J<ğ���>K/��Mڃ�t���L
���d_[�[|��UȧA<����UB
S�wL���N�5k��ȍu^aAכm�
o��j%I�fY��lK�`�67�d�L�Np�*l���5�
β+�X�Nn:
��m>r��$_bU��.X [...]
/+W�wy;J�����X�a$"�n�1��)0l��h5
)�Ed*bf�X�k���Α"��(~�A�G��쌄��n���orc״�/Q�5+�w��J���E�6;�1.X�H�-�����.�'i�n0A��G�W���gº5�@
���Bd��������Y毞"����
�&lA��(.�}y7x�U
+,v���
S��P�_ۥ)S7D;Ш߰��$����:��ne���Uy��f����
���0C}�©��K���ly��������*HMJ�A�s�\
+�Bօ"�AZ+�Eb��x���
�2�}��'�>���,rY�<��_sj�Y;���ԃ׺&�c���0$��r���ڶ�r�f`Z���r^��L�	
YA*�iy,���x����/�<m%F��>K���Fߦl?�M��rBC�۔����wg��rm
�!..z
�;�}=�"3��'0���G�c�?�q��]I5��m�R�=3�FCUt�7�
+�
��t�o�6$ܓIT�
+�2�8��
�;/E���n��c��
wR��l*
+�~��{���m�`UE�q�Q�4AEE�=�E�������ֲ�	GqW��T�;�_����V��[�+���K
�s�:7-Ѥ���zcs@���ɘ5=�(�+{b�_ Hb�S�~=�nq�j
��\�l�����k�E��eW���9�c1ݧ��k��"y���P1r���b6��ϰ�N4q,^�W �4�Iq�q�^��6S
�h.l��Z�^ຐh�ȞQ�<t�mٿ�J/8����S��u�2u�:��.�O\3�
+���TG���Ek����R�T��i
}6��D<�7����|5�|O���(�F�a���HbzZ������y��%w��#����� ��q�Z�A'�
VO�ƒR7Vp�U�Wiy��Qf��
{87 ��`��1)�f&����|��)���^�yK�
+yg��e����&i����Bh�bݦH�˰��bL���";��	���?i9�q���Uu�<#�$�K�='ס��ƨ��r�ݼ�r�U�������JwJ�=
�A�}q%'����q����d����k�
����';�;X#����M�"/殉��
z�Uekn����v���'����r'zz��&��7�n<�l�eO��&%)||Y�N<��B��񔾉Z�u��On>�I}��'4���<�W
�[ܽ5dg��#�9}l>�h��
�{�x-̼V�)e]��٣��N�M�7|��u��c
���80�۪l=�T��;�t1�Ro��4�PC
.�������
b�{[�:K��f�7�s��c�Y�5�u6i�;ɘȗ��tH�_����Y�Yo{�OC��U\Z��|
���o
��TM�n�k���i��\������G�����ޘ
6U�x�;�1w�o�\ꮘ��q�����S�.��I�ʘ<��[?_&yͶm|���?���eFQ$��
(��* F�w�
���썙���g�\�$w�
��uT��RWEe������vSc�k��Et_:�-�̥�'���=A�<h��u8)a�M��
+��]E� �	!a��[Mx`!�ɩ����v�:�*z?�KR�|ȳ���V�qj�z��v�A�������1�8��d�'��cic�4��J��$
������~2���y4�����ݮ1#y\	��,(�.���ePö�;��>]2�y�uzt���я@襌�10%�%�'��lcb~Ȳ��=��4�M�
+��Z[+z�9eK�'n� u��
�V��S
�Z�g���
AKJf�9
M�ƏKμ�J���
�&�yz�ii6vvdom�~!�=_����c�hZ���Jk�Ջ���/�i7�]������6�
gN�_N�v��*��ֆ;ᎋ��0]��Ͱ�D;<	�l$��<�A�z>,�у9ː���:2�]�(���Hz�⠣
ۿ|��p��-]'���[g�5l���c�W+u>M�����Zx3��t	
�ۥg�bv�~��_{c._L�	����
+BE�^�*�1q-��pS�qBMr
��W:��"s*��T6��!}2��
���
okWD�쨜y����E�R��g�2��>����]^����.>K�r
+�����wF��|i���l[�
+endstream
+endobj
+2629 0 obj <<
+/Type /FontDescriptor
+/FontName /YWRFWO+CMBXTI10
+/Flags 4
+/FontBBox [-29 -250 1274 754]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle -14
+/StemV 107
+/XHeight 444
+/CharSet (/b/c/d/i/l/n/r/s/t/u)
+/FontFile 2628 0 R
+>> endobj
+2630 0 obj <<
+/Length1 1143
+/Length2 5291
+/Length3 0
+/Length 5989      
+/Filter /FlateDecode
+>>
+stream
+xڭ�w<�m��kWl�=��"��T�TJ		B"j��Z�ګ(��T�M횭�ZjZ����������������y����q��'<\��"�p�
B��.�!zcX
��@\0w$�Y
掐����@U{ X�������� !oW���;�"�;I��F�"ma�@=����a
C�1�H���(P����4B�!\��( 
‘��@�=� ��t����O����%,��
/��K
+ �p�3�G�@��Y����Կ�kz�P�0����i��J���(����A�x�#\�z8���ߩf����!�H�W��PH[Ug{(���M酀"�m
�v0��8��o	|��R AM�����L�Z5�!��M�]���;�/����"���D����D���7����l��#���R�@��+���=x����Hg8�
���+�D�1��-@|W��vW��J� A�ߡ�HF
���$����>S�o��g�M��`��,d��A�X
���� �(���x�?Pr�%�����p�#C��x/�?/���f�?!�������\�@���?o���5��@i ���[y��x+�?(�?��/���JM
��?KD\J�����H����<[WW���_�,�n������@x!l3�[�0Ǵ��%JI��3�Æڞ�d(�n�+Џ�֏� 8���9"�hS�锃�vR_Y�T��|�AO�����
�e���nY<"����AgG���Xq�ڙ�u��m#y��	��g�E\25yq�8�u�"
~k5`�۬��0�Xx6x�}S��)�g��<��k���˘�g�
��\=����?�����b[X�$�gԣo�(
;�^h��:�����e%��Nji�����[�<���
�,_y̫7��-�����N�aOC�i��!�un"�E�a6���S�G/Ŝ-<#j��K,��7�pŃg0��T�+��tyY&ِ��P2dU�\���d���-���a�O4\Ǘ
+�Lyu�A�7��[{�4.,�����D&�>P|?ԩ���HG{��p-����
�3œ`��YD)��6��8\N
^!�Op���V6��\̢��Nv�i�?`8�8�"�
g���
;BaT6�@��-;�|������m3ċ~���@�5��M��٥8_HdA}�璴�–�Y�F�n��i"���d�`����
�qU�������~��
�)z"�H��,{W
N�����8�'�[ӌ�醽�!]��Q�-%N���gÕ#��19 at V"��ci`��	C$�
��8^�%H�OF�)��,r1������[�]�A^[�pp��U��S��u1��l�@���q΀F���@����%�:}Q�\՛E����m��)\w�+��g�9XT�%h���C����'}v�zĐЫ.�-ʧ��l��g���:N�>�;�����<���dA���׭	F�/AߵAqV v�lj��>U|�97:O��7���=U^k&
�U�ƴ!����	��H�k��jA�������>SYe [...]
���o)=K咛��䛗������V(Hg�[�߲uc�R�
蜐7��<7[yO���}ݐh|�C�Сk *����R�͡ۍ���s�|���ˍ/lf�5�U-%E��=���}��=�2��b���z/�U����
+���� �	+�|�݁��{���Q�k*�D=
+���c	(6��?�02
�lH6!�)HQv����Ƕs	�4�H+M�U@ʓl����S�բ��۫⬖Al/`����iJ��FSl�z|�J೒3�ft����Y1�_�zƺ�����L��EZ����\B
(�d�Xp���Y�/
�oA��U�8	�


+
+O��_,Q,$8?�H�o���W��qG�Z�̪��I���fD�ȭd�'r�b�VP3�c�A��5���ӣGs.
ymϺ�H#�o,p�Pzaҫi���h(�)Q��M&��C#cJc0]���윍�	I���G�"��[��p�2 ��x�A�O{?8/�|}���<�Rt9����fe�Y�E7q�%�22��4�b�
f
�k�Z���Tޔ�
ꡰ��P�V�4kwqZ"
�ė�qk�:�fy�G���s�-`G��[�6õ/Rʵ �aԑW>YzU伯;���
��^?���
���61k��:�dy��V�����Mk#ʛ�H\�ɺ�]1�:�-�
���/�=��e��l�^.h��j�;
�8�#v��<p2-��gh�ڊ
�Dj̃�T
g��K�2hZ��N������x�M��שªCe7��aj_�)��'�WͶ}�<ꝝO�A��ܾAa�i���
я���i��ٞ0�q,��`p@��#��Z�8K蒴�C��=���6�6&�	v�W�s�GJ[���ų)c%e�cU)�:.����ݭ7�ѡ�.nAYI��Y�F��h��G��I�3|���_V�Ղ#Z-G
8qn���!�S �k���ڄ���=����_o�(�ӕ2�HR�Z5��W�
�W����X�;e}ؼ��X'�"���S+����yw}&���F[I��&ϝC���P�x
-$�*:�ܤ
�*u?�
+
\�~i�
��
�U�x��-VT3�#�sx�R�kgİ_��3E[�ϫ��-������r
�L£���
h�j������|N������^�3-W$x�
���?83�VՂ0M�p^���
)�'�B
�v����ЪY�m
S�=��{�(L<�4��d�=��5��_�M/�0���;&p�	�Lyi�ֲ�<)0u�$1
�0��
+���O&��	7n4Y�2lh�O&��@��/o�r�I� f�/8֥?�+�M�r�z��
`S�v���^U�����?�
:�Kz�k�q�c��,7
s�ڞnh�’��|�
n��ts&d������wl��V\���#?$��I^
��Ɔ`7
?��4�`��ڡ|-u�
���u8Aճ2�Yzh:*�
u��*���1��	���|�� ��\��t|�S�{���-�b
+�u+�`&��Y�
��^�XSTH�!�h��Om�`V*�*�K��Y
=�l>�auyľv,�����O-lK��׉����
��f��{B���|Wx�<�
�#>�Cc�xd�ԥ�,ުeV.�C:�oE�QҼk���4W��fR���S1�����ó�

��iOõ�;L/i��&�����8�m
W	E�Rc@�жd���

�Q�L,�¸Ո��{�u+v�'���"�	��k�|��q�V
�j�E�#�f�ц2��m�G�VV|ˣ[5%	4)Ͷ�up
[d#��6,@3y�$�Kz�|�⮍=KK��������
�V�Vqƞ�?r�R��r8d���I�
�t��e|�����~F�_��ΖE�G�T�xYU��PHk��(���;J#����g�)��3
�k���F���/{�au
�;zO���m���w<7�>�e[��lC{!�`{�e��8Ϣu��|�
�����m���
L
�D�Py�n"��y
�mS���P���{rϭ��^�s��𠯹]��:�
Q<�pvmX����0�5�"Vmi0� 
+o�Z��)�Ւ���Y?��2l0���&eF�Z(C���)�)�6S�)FZ`g�"�j�D���B�_ߠ�����	�#�x�~�T�����sj
+Ϲ�́,b�u!?��|�^�����+�t߾���3yG�*L
2�o&W���N~��H�@(�R���cl"���i�oU|䓩�5�/_۰��DVX�W�(y���~W��s���ܡ�%I�O��$eB[B͡����b=6�fUI�����//�
����L�5V�0%�_�Z�xr�j��J6D��1�����h6o���K��\���4a�&�~�y&��x��k�H�1>�� �@#R�ő~��v�+�"�z�
�]ʻ^>��p6��t,�4n
Xr��/B
�);������1���p�ӊ��Α�����j]R͌ w�*�@�A��_�/���P=�RM
j�)
kW�%?�a�I����83�c-w
q)����+�xr�}.9�TY�
٭���_=�e�$S�;@j-��঵@�۰B�a� ,�fF=�(h
�N1����� (_R����Aq�`�y&@�+��k
�ǖF���풼4G�LwF
�"kF�(��g�~ӲlQ��z�t���Yj� [...]
+%��nx��3_�����6���
�5*G>heXj.;V��e
'�������r����0�&��B����XJ{_�,��-%���X���
���cglڛ��/�3����	�"�M=�=��*K�~��%���p����Y�n2х<bW����e��{~Q,� ��9�M9�9d5v}�g��Y�˒�Cq"Բ��
�p����۔�W��Ń��^�kbQ��M�m�Sm��q��sy�҂����w��:�
NvmӜ��"E�x�c���1.�t�
��}憍��p�;q�'[�X�\_�[�O/�������#�ZS�u��É�ݏ��ς�D��Y$;=Ӈ1͕R2��uB��2��\L�]++����Ɉ��@�O�n�P����/��O�H&
�g��
U�=�����������f��O����Ӛ쭰슘��VD���ʨ1:��f볜����ʲrs�ٜ[��
$+�2���k�q�-U婀�E�~�[O\K��Um�]~|�ԠnW����O� oO�����m ;x�����f��c�k	CJ��DDu��
l헴Q)�Q��B���ӗ����z�

�cb�:�'��
;���3+]��4�P,�֦��zo«�� �k<�T9�!�����t���}�~Mno�����ɦ[oęH%O���ԣZЉ���It��Z��if�ѣ����t�}�h\r?�*�'Qp	IS�����=yNi�3�Q�z�y���	�S�h���-7�ު�	�T)$&W�� �މ�=1�PܭNO��H��Eux�,,b8��:�����l�Q��y|Aw�]^vt	��L�N���ӌ�欥4��{rx9v��4 �;����6�!3o������oT�,��(MK^�".�6�R�QO@���Յ�<���D�P\�(�������9�	�׵N�Z+�6#V��\ca.jđ��%cc�K�C)���/��KU%��޺Lj����k|Ǥ=�i]�i�W���D����$4vqN/��3 �T�3|�M�jk6*�8M��n���e�<�9�ȝ��Ρ1[;y<��&g��
������NP�a�s�
�>b�،�����`�lCFthHVy��ݤ�'/
���v#�t|)��m [...]
+endstream
+endobj
+2631 0 obj <<
+/Type /FontDescriptor
+/FontName /ZVGVLQ+CMCSC10
+/Flags 4
+/FontBBox [14 -250 1077 750]
+/Ascent 514
+/CapHeight 683
+/Descent 0
+/ItalicAngle 0
+/StemV 72
+/XHeight 431
+/CharSet (/C/F/I/M/P/a/b/c/d/e/f/g/h/hyphen/i/k/l/m/n/o/p/q/r/s/t/u/v/y)
+/FontFile 2630 0 R
+>> endobj
+2632 0 obj <<
+/Length1 1172
+/Length2 3099
+/Length3 0
+/Length 3784      
+/Filter /FlateDecode
+>>
+stream
+xڭ�w<���Ǖ��
�t�'�88V!{
�̌
�
�:��8�1Rq̌Ȉ2�����$ْ(��|�9���Q�O����q�s_��z�ޯ���[R�ꔼ.
+�6���P�&�oa� U�
+������4����
D�& ��P�����2��TR�TQ���>$�Ӌ���l���h���ڛ��D`�Sx$M$) �X,`�}��F��	h�'
+�0H"����8!ۖLq
x@�G���
+@�� ��# �#
+�Ò ڃb�g\�fX��p����?k��ޖ�ާ��o
��o��ǟ�& x�����
�������X
R�E�?R?#Le�!"� ��=�ơ�6���w
��F�Fv�����;�B`pD��O����1�W��8)2�
e2���\����ģ08O@	�
+ ���=��@
��A
�
��80�x�	���)wyMĢ=���m����A2?�����(�$�G��
�O�
�O� T�� h��Ezϟ@Y�O�@�#����[�PS���vH�w�
�q��@mo��jP��ϼ�y���:ò�����_
����"H���o�Ѷ-�ߍ�����+� �J��Pa
PMM)�J�?��)��?4cq��=0�5G���H�W/�ȣ�g3(QE�

��Yev�y�&[V5>���{���Wf��a�^�>�4����ua���Г=F�}�3�6�ܦ��
+;г,HS>b_#>�yDy������񮢫��Zo|n��o6���5&���Pݔ
���`����&WJ)�Z�d�ŨDSy���P�"Ο�f ;����߻Z�������Ag۝��~��)ޭr�7�<���CW�CKZ��b�E�wR��
�6*��:͏�dƊ������Ӡ������E���7�!���zÕ؎1��R���:��Cz�ye��v��&��H��Q7k-�����f��'�4�Ӗ%5���XK��
�N�P�o\������2�P����p�vV!��,�e��&r�s�dV��CY{��ܾS��(蘸k�{Q;)�*�%_�q���j��,��~�Y��(
~�M^|�J��
�k��02_�c^ ����.�~q�Q�q��̾��
&�%Fe8�z��D�h��w�V�9����$\�OҪ�U�gy� 
թ�e�g�h"ן:�O�OoD��sT�f�C����^�2�"���
_�N�p~)����uf��Jx��Ƅ�E�g�@�`�}�	����B�i=��);��k����z�;�]$�QA�AN�Ki1�k�l��ầ���z����&bF�9�R|M%��3�ܳs��\�q�h/���Z�ϖ���wK�^P
�=
+
H
d���
.P�8:@����83�}YJI�

^��4Wz=�xG!.�w�Ϩ<ox)��7
ɕP*"wLʃj1�����N6�̦�
�	�lRc�Z+*��������k2�L=4�u��xö�����_�ȷ��
;�wp��R�w
����Ph��r)�������l�b$(�E�����
��鸯��kSjRW�_f��]�ی|�|v�ġ��������>�����n�sPB5�]��=R_I=��%>4V�;n",
�?}ߺ�����5
x�^��f�v�+x�8�F]�
+M��מ�$
�g�T�*Sȃ
���ԏ7Hՙ�
�����[��y�C��!][̟�ڭ��hI k�U��;J�
af�-�>��n� �iNpN�y�c�k񻟍��mKsE�t�X;ir��իK��O��Z�T��%m�����"å�2����lbP�tP�~��p�X�y)���]M�{�p]Lw����=��n�*j0�Y}X�Hy
+W�rm��Ua5����t���o.o�!�
+b!��B�
��x���H�I���Q�#>(�.�N(�>��o�Žh�	)�]i��=+�Y-W�*P�s4 
$�Rg�^��a?s��Y��D��&T5Z��A?���a_{��I
�b�~.�R�DZ��w�z�3��'�
t�kKW�|���ږ����s�č�e�+�Cpu/�:�b�|+���=\�?�E<;,���A��7	w������ʈ��%Au�N���D��H!
'��r�/�g8b�����ੰ����H��k�[��ŵ�u�7�
3�ה�<�4wU�>K�$��11?8�V�dQ�Mcq�� ϔ���P�
^n�@:���
x��x��2�����\���Sd���j������v&��T��.I�&��yTy:.BiߓvW�zn����
��5W�
�d�
�ѵ�b�\
w�/�
�¥�b
CM�Ӆ
�ԙ��U��C���:'UL}ޏ�U
d9�
��Н�8µ�t?-
�T���98o��N�����|ق
u�g�Dj�/�׈��\����S�gy�DWQ<-� S��žՍ�jR��fUG�ܭ�z��Qo۩T%
�dG	�GreC����K}����Y�I�O�
t����_��x�K��V[��.�����.k#����G�YB�r��7Ӭ�_��ޘ��E�8�1��K��
Z�n�u�
L8�Ɠi46xit%���&;�����i,�P;Bu�L|R��AYm��{K���-1�#gnY��K�;�M��s�5_s�]+���5�c:K*���F�\�\�"hpk�,[�t����IY<y��:�uXC5��
Kr[s��S��O���f̓[M(&�\�3	=�~[����v�����+q�I��k�!���W�)��+��@y;i���=b�{c�d�׮�����Z}S:M�b��ړs�W���wkK]��[�b��r�#����$���Cr+���$WdxX�x\7�xo�r��^[]Ǻ~y�8@j|�2�{W�I������ڱY�R�L=��. [...]
+����kx�eY6Ɏ��/<M��������z
�.}Q���3��h]Z\
+A��#�6P6BVhWގ������R7y
Ω&d�f�q?���ǥ�*��ͅ��:�W1��N#�l�NMp��	c\��P��='�{چiKN;��$���ǎ�}�DyG�ۚk�h
���� n��	a���#*�Ҽ�
,��*y�G��[�źE6=#U��fr(}�ʱƍ��a<{�,�R��7|U��2�"�T���4�գc�*=T�`�M�
�}��/���YO*�}O��c%_t?�At���@(�8�@VF�neV�� 1�
\d<5f%Y�¸�EwQXf�@�!n�/I�q�=�	{

+�t�.�@sj�qt�N��7�R�/�}v�qk�Z��Bg[_PS}�;E}��ᩢ��Gߎ7�h��.��b�b{�P���^���3�&j�_��3�$3]ؙ1�YS��MR��X+���,
+�-(b����`�G���xg<�٢�9E���pu1����������b[.���jG/sJ�y<���2�O�j[&Q%Vh9���P������F�A�;����Y�+���>_
(35��1��h#�ъ�����WX�[��MS�ڝ�wҍ�Y
n6$O����v
�!>iy���]�w��=���ߺ�<`���;#gk�]��C#L���JT��p�,���L����XpP���t���j�{����dh������}�/>6�r~)91�r�������
�y/�����U�o��Oln\��7=��ʓ�DP�;н#Q�� �T�.�N%�I�c� �:@�$��T핞
�qg8&��N�`h|�߹Ң2V��s
lWu�#Hg+w��6�9��Ք
+endstream
+endobj
+2633 0 obj <<
+/Type /FontDescriptor
+/FontName /QFEFVW+CMEX10
+/Flags 4
+/FontBBox [-24 -2960 1454 772]
+/Ascent 40
+/CapHeight 0
+/Descent -600
+/ItalicAngle 0
+/StemV 47
+/XHeight 431
+/CharSet (/bracketleftbt/bracketleftex/bracketlefttp/bracketrightbt/bracketrightex/bracketrighttp/parenleftBig/parenleftBigg/parenleftbigg/parenrightBig/parenrightBigg/parenrightbigg/radicalBig/radicalbig/radicalbigg/summationdisplay/summationtext)
+/FontFile 2632 0 R
+>> endobj
+2634 0 obj <<
+/Length1 1597
+/Length2 12077
+/Length3 0
+/Length 12992     
+/Filter /FlateDecode
+>>
+stream
+xڭ�cx����m��Fc۶f��Vc5���67ic�h�Xo�z����k}�������1.P�*�1��9��$
�]Y�Xyb
+
+2�,��xJJ1g����^
�
+����pd�ll� �ϼ�켜��)b�^�V�� 1�9}�؁��L�� ��%��#�)���`jr�b���T��P����AfL� 3+SW�	���
��_�d��
 ��g����M� g�Q �ˤ|�4s�������
>��>���!뿓K���*����ߓ��@;+[����`���
+r(8������U
�?�@fVnv�m�q�Z���[؂ ��
L,
��n�"i�	2S�r5��m]@�^ٛ������[������8������V���^�  �_�3�_����'@�����������?��*&ao�`feo`�� ���^���8>� +{3�' ���������#�1?���3������,���� f���g ��_b0K�%v ��_� 0�����r��c飂�_�0+�%
 �������_����� ̪�C��_�Т��>�h����Z���c�
�}\f������u&�C����_�`g��x��f�C�����@�:��24e�������|-��$|
�.5,���Z�?o���g��h��o�� ���~ۺ�:[9��#�i�
�#��o�1�@gW+������F8?
+9~\~���a�t���T֏^��������!�����>�*e������;��1g[��?F����o#l�\�n�0��'~����m{�E������j^������7��������#;�����_���qWX��/GS7gg���ޏ������5�<A���
�|!�i-a��ESP�.��!=�M|L�|�sέ��A��h�h�V���gr��f�[x-"�#>j̡Kh#H���j0�����y�(v9���${���+䷛�=P��Ǭ�
�΢ �^o�m&������S�
�:�S@�G��?�~K99,����g�b�-�
��ج!e�D�)|��x�c��4ߞ�gͲ!Y���U�%���� ��
�fh
���)���N���f ����Jk�h�T����
+H����t{������T��m���Y
[S(U�_)�)b!�<?oܿG��^������@h�sg	��П�N��A�F��� -�]E��7����~
+m��?( �y�1�"ȗ��y���t��F�%<�xt���
/O{���
%��6����G�����1��!
F�$%�(�`
�vEqH1��PE����q��3��-�}�9�
�*y�rf^���j����r�C�!��c��N��}��G���k���qd
�:�LݗQ%ͦ�\�<���.�����S�o���!�<�x at -�\�-
�0��xՕ+j��s�1���PW��^ͣ�;[��'���ی`�jq��׀��E�H#x^��]
<G	�T����%)74��	�e�Ê���-+��/��hn���T��x����0Syu_4�N\�Y�\YŮ˜\M�P8��fF^/��B0��8D2��~��+I��At��՜uv
+��O�v#�&�L(%�F��	f�i�+q'D�Rd4�!.��_j��N�%�����d�mD]��Ac���[�r��
s�8��q�'���2�
kNYF�_�y��
*{g
�{��E��63%m`�W[��?�|J�����hn\�Y�� /�E:,.����/����j��>�HL�b2-	A��vT��3;ȅ��M��~��ȐC��y�j�J˱�K*
N
���}��8��Gš�r=ӗ��GZw��
}���A_���J6��rG�
��vOg8b�{)��L�@�Q[M6R�����������6��g�I�B����mU�w���#�ʯ�l�;��F��d��T)V{���O�?�,=����-�]vXtBd�ֈ�', AX�%b
q[{�Z��Mb��1z"��X�(k'q
_��v�Y�]�����zK�k�R�
A���GVz���Z�ߎ�œ�,�Ng⿿�
�La
���-z�QJ�q���5�<J��,
��[K�Nl���~�3���
+���m�_̡�����0�
�^5O [闌.��e�!�O�0�,
l�A|��&VDީש��)�7�bF�iYj? t�������:�
�s��H�B���/a�
�I��]i�k�a��F_o�M��]��z4�#EƥVg[��m
��g��������k�䗑m|�cH3
�
���=
+���?
�<$h���q���a�[�YBT�F���J�� W��]��VI����=<]�����
���
1į%�/
ݘ�Ƒ����X��9�~
�"ly	Хz�@�Yɡ�ڀ^v�ŋ+�ت:8�[�᫾!<*��L@0(�ү
�-Nc8�~5���L~�l�r@�x�_�	�
�<g�>������^	���W?�?a���[^�֝� YQT2��{+
��
�,�/py[H�w2�bBxW�?��WI��5������us+݀ ����b�?4�Ŗ
�����rK��
@J�P
Q͌�wc�=p��h�Yv�D�1q
�L%G.Se
��� �p��"�拲b= ����3)�M��VG��l*�c�~�$��m:6�48�勴}�t�;�?�8�5$-p���|�|
���
Ӆi|�vw�1L��qc�q	?�5h�e
*@�6�wv�7�u�
=���`��K�
�[ *\���`6��F~�ͻ�	��S����~N�確�ZS�
+��ƽ��t����'�[K�+{ȳGD#(�Rk2b��;]���M3i^t%�+�Q_f�!�X��#�d9f���n>�
�y�"�h
6�C��
���O~R�s"���\N��ڌ����eq�m�i
>���A�о^`�zN�WS�
��;�\�R�7��ʀ
Ba�z^��f.~�
�Bc��Fs�H���1,5
.�1,�
U�I��q(�I�r�b����b�u�j���/c�שԿ����Q����#/R���e#�ZJǤ��AҪ�^����c�
���
�C��<��ɪu�
�*�:�͌��H냆K���9�g�zHE(b��
G��">3�9n�i`����x쫵��
FH�!
��P�.\�7�O�'�ӏ�Ĵ�mC�HR;N��ݓQ��)
+X��=T�h��s�\�딮
�L����qvuԏ~�
+Ww��pQkW�1�c�
3���r�RV��A
f�kt�k�����:�b[MՏ�l��|Z��P��X�a&�������'q����: �2ԣ�@|�7_� ���W��R�V�1,��bϕ���&�߷>��$��OL��&�{��!�ې^�
!ϔ��ŎY⡝��5�b�
��uo�-���tϟ�
�a:b	�
��*ş�w
DuCHQ�a�{�!���!,�`|�e
+^͟��673p쐽�}��:����c��n=���Hԉ�M�d_�b$:Y�Z����/��0�ϓ+!X�t_ڻ6u٫K�ƌw_��uYk,�
+)w(�w5�۲|���-�r�������)	�ql
�فmd�Д���G�m
[v�z �
�{Qi��Kr��T5�Ln�U�*$�iM�〱��B�����IT>�\x�
ZWk�gk�]}$]���5"P
ӾZP�n����T����^����|��Pw�Y/ґʒ݊��`~��t�{tj�0�i�~�)�����>��X&C}/���'�|���ktW)~�A?
��9َ�1j�ݙz�&�wh��8Z�5�,�����uȑ% J
���r��")l�i�Ӡ�ȐQ=���
���Yg�dLܲ¹��7-=�ʥ
�Y5e�k4U
�8�;�p��J�0Uq��rHR�b��|0j�=*VC��4W;/�͸6�n'�R5G�
�$_<yt;J0.�KE�=�Q,�4��bx:i �Ϣ$��
`����~�J�M�di�.}s._�}<�~?�8���(��#��/xM�,
R�
ջ����7�ր���'
�P>g8}�Z���[%"`Eh�V4�vI
}�q�ӧ��#,#� ����13��6�ίl4G����=�U���K���j.����
+��#x���ߛF.��[Io0��M��ɂ��Nr(���UX��>S���w:f�ݟ�

ك{��ך�U�&Yp�_$�'�/���4YvP#����*]Þ~q���ZF��.��d���
��`EPPL�D�_����{�	�
�/���%6v63�1kmu����6���l�hw)�՚����T��ەgZ�`om�R��X��T��a�lZ���)
��i�C�*l!�t[�i9��,�>/3
��9%�����Nrlr��ch7�G�#p�d�?%��x4��]˗Mć�Y��s�u�&�]Y�<&��E�S�| ���
<��Cc��I�AS�,���1<l��ظ)������Nw��ۦ�

J�U���mB.'��2j����,ˈ�r@
�t1�܄W�G�╧?��M��*t��s��{�:+��zx4�NB�7*�FF%U��2NZ��p�3���Ԗ=|���m���O�ö_mg9���q{�r�'��b�n���
2�W�IQo��Q��P@����G9��B�HI�h�6pyW�k��o�'r�
�,\1�ZJ)�
,j�q=�?(��`b���߰}�#[�\���KG�uiɄ���hT�{3��4
cK#f,&��M��b+�<����
+�y� ��[� �
�
!
�k�Gd�M�Jd~�R�T�(�ҭC��
�y����D:�'�гex��&�G=� �	kwy���t69l<b��OW�Uu�E�^ļ�k����W��_�I;Wb#=�!��`5�WT2�J�V�b����9�p
+#HbCT���ǧ�ch��]T�m�MV�;3Bk��1���>j�l5�\��L���c���3VTse�u����餪
u�G��~vNY
+*�
+Dk�!�]e�h�J�0Ҵd���.�M�o*�i��I��kC����Ø����k.�֪
�N�0no����kf�79a;	G�������#�;��\�ʹru͕�o!�
+��W¸k�}3.�@ȼ�^d�T�iwޢ1#�Z�f?���ZU����e#�kШ"�:?��:$V*F�q
+�O���$��u��z*<�b�C
M�iw�_������n�Rٞ�P��a���
L��!g3����d��v"+�Zr1L7X*AR�T����s��㱬��B���Tm���ڗ��2ʯ�Csls0ʗt�D�5Uʨ�c�2�M�$��rڱ-kq|1
k�d2�e:mb�Y�����bL*T��G��lE�j˰��t1
]��*��K֐�v�V{D�~�<m9�N���>�]��̦�J��
�tO�I�m��c�mD3x��
+�s����aC�S3����s���ϐ�	�Y��\��%�B`';�{~�]?��M-��x���]����+YN;}���fq	���T�����8���\�F��^PrF��;d��d:�
d��y��jO�I�Ǟ��풀]�,�P�4�Q+�
x��
3���﷉9��aQ�xz/+Vo=;
;��,hY�L�m�&��wj
c�e�����p�D?gZH
��fіGo�<��N�)z�F`���N�8�TA\m9u
j�9}���eMJ�
�v�6�&Qu�"R�-�
z��Hj$4ٓ����4���5&�
��^���`��ȚC�i#z}�x��U�f�/AO���'�����������Fٮ�_@5�����)nas"~�p[�=.9m9�0Ud��¶7�8�暧���h�_��Z(Du��٦��
�Yώ'��;h҄t璩����)�ԺOťM �ē+�fQN�^����D�z:]d�G��I��N��v��[�m��|NL��e]J�'`�S������w����w33U�Btsy�(�*�Y��p�#��8O��f��91o�>�
�X)���Pkoō'a���7ay������O-e��L��5'F~l�#(\'�w�/�'@��������r��:�D����$��kƸ��V�����!��C�3��>�~�@�ߒ���p�}
-/��䅏>�`��
����o�O*����ڊ<{�Ql������z
u�~7�;B����W��=��{��|f�<��,1�{Ο�D��	Ѫ[��
0�6�
��1�U���Y�\���ka��ï�O��i�US0�!�T��8��={�
�a�<����h�4#���ÉV[����h'L9TWUW�9���κ`��1���]�¸].r�ٳtrq��_r�)��0nN�
 <��l�� y�S��
{S���9̇8)�>��T��|�p#��j��H�(��t�^�2� O��@8��6G�_��-~�|Cp^����CVq�b�(�>��/\5����&}�������b*�c��A��}f�]j���xM��J�	]����[I~~c�,^|w��H�o����Gn1(I=b��lI'�
���9p�'��s񮌁A&$#H�@9�6Ƣ���J����,,�hZB��c�^��
��u�;|	�H��C}kh�30-.�&�N�h�����-xB)�"��O�)v����ᅱMh�P�c��&�46�hFm�jZ`5Hv`h��Œ
��Ru0�	
��A�z�KD<��ML�2&Apre�Uol}LN���8b_�|��j�W�N�k��e
+�y�����5��y��G>Ya�����P���NJgu��1�R��
\8|*�5�`#��+h����κ<,��K�.X��6�A?PT���gtwpң�pL���
qO*�ǽk#��e�ڍX��%g��^�ˆE�v���� �Y*��\AhL����
Y&�(�+sm������M6 |�C�5q�U��+�ˢV�N�7�>�j��w����I�P���\�T+7�.o�%���-�@|4;�V���
"r�
�a"�@x;d�o3%q�֪�����oI���`j�۽
(���S�)�_
M���ݟ@/{zF(�ȯ减�_Lj����eZ-1��5�_��{�k��h"��K|t(�����Ӗ�-��V��~<0֯kl�{:����g��@��U>BD�ډ�ӑX%Rt��R���Ϯ֢� G~�W�P�:'@��iX���U
��l���E��,��\mM�$f��6�mɱ��gX�N��}���A��f��,�
�Nʹ�
�ta<�p�
z��?�f����J�7K�R�`+���@���(�K �ˊ�
�O&��ȼzs�#���My�
��)#f���B0�V�
+o\s�����������:a (�}��Ē�XE�Sl�qƱ0V]
$X�yvK�?��������%��CǷ���ܔ��sJt
r��{�E�/Y��k;�8� 
���rȟ��%����Hxp�{�#c؏����|�qh4RI��-?��R�dQ��-;�;
�o]���q�W֩��B(�Y'���uȦ���I��7��O
�i����5:�!ވ�Zj��
U%#��[�D�!Sn���.��f!��䪤,�[0��_7��
6${�Cq��J�c��9Љ"V��B��f
��ٕ��(���x��9�p
�c�6ht�8p
+�o��e�`IG�)2�;�.?g��&��m�&��b:�^C�K����C��G��G�'���P���)�➐
�-a:����$�jfF�qy	)י���.��o�D����[��SK��ve�Z�yC�H�~
σ���t��Y���xS���m��>�9��@dV#ިM�}���!�'��2�V�n$:�o��!<�V�T}�"�
)�6SUȸ��XF;~����y��?*3�N�Q��{��P��;UHy�
D��S��Pc�	���G�;b��=��bl~P�ݱ�|G�wsc�;� ���=w�C�	#K�؄O���o)�i����	!���k�'~��6�V�8�#Q������B�"��q�^����0�AF�=���/����BQ���Fڞ�q<���^�'��$y

ec�H�u�:���0tӲkT�����R<ׯST�(0�A��3A�y��d� \�
�G��6���0(�]jY{[`�`�����k&9��	�`-��i%����
�X2�/k�
��;̧5������G�

��,����$_ً񭆚�
�0�oY"�j��
��O(��,Ɍ�~�T�^nf�S?�+C�[T��`��C��S�x��+�5�c�֦�w�Iޒ����}�9��d�L�{��ۆww��9� ��c3He���
/ۏ�Ȼ�p2u#�sc:�af�N�d�Ӓ�F�/��焁��`y�� 2
}���釅�ժ�=`�^.Cy�4��?�&�����J� 
��5�b^J��B�T�|�Qo:/��`a��b�b.����f�odT�mrE�J�0+xu題���=�6[}`�ȗ���ET+��<
+
�	���o��J�z���2F�����b�h�����Z����ö�G
+FB���K��UA�~���T��g��B=Crȡ�6�t.!2w8dy5w
�e����L�,@�KAa9y�^&� 
&���^ee�{>yDr9 ۺ5!�T��r4<��艶���?�$�@���]��h���E�}ְ:n1dv��q��b/Ew��(�.��?z��kI���#?��
�R �w�mC�Öރj����f����5��R0�1�Uy��y����j�0��>5Qq��Tb��om
�CJ}f�=T��3��|6QN��
3;A��E77v��pqu�;
V�K)Ag���]��P=W|���4���xֱ
Oʴ�
+��"�L�ì%�������IJ��鮟k�Z5�Ӹ����P���s���kM5�g���
+ى��/����uP���
'�
+[�h�-F��5gu�3x?�'�Fn�k���>�j�MRv��J�-�i"+\��q�>�~��y/%E�vB
���F��M
*�P�2	̘7�E��M��VΖ��
+ˍ��8�ޓ��"s���fY�^{�b�B���Ud:�]w'���
�E)��!WiS8��������W�e��T:.�ߓL<�h����?
+�UU?)�c��,�7�l>�XT�w۹�b�0k�9< W��ߥ�*bFG�SSUF
�T�K�p�bT��I8XE�NF�t�A&
{�m��V��MM@�֖G
j���:
ׁ�fd�
ŋ��.����1f}�zq<S1�m*��e���۞o����mE��ÑFؽ�DzR]��\�D����0�
+�G[U�j��F]�� ���Q��۪���ڏjW�yj�9\;9KWʅ1�Mξ"3�� �yX�Xb��3�⼝��
7QM]Y��pġ3o��Z@����1R�=����.'{�g�|
�j�	C!.����
x���+��1~�lQ���O���4s]�0eD��dG��w��a
�4o�~���F
w{

��Ƕ���ɢy˚� ��y����}�;QGRM^�Ѹ`��LᗸO�yl^��@/� �۾n���2x<(�q�3(��Fo��^��Y�
+
����,
����^�[�f�u
ʝ��AS�
G��
+�6"�M6]Yl�!�)TL\ sB����(Nv���_-%�p�b}(�

'w�o���;��Ց^� � 	*#�:4d��;��%��0:@��p�͡�O>
X��̺������S��]���2�ֺ-�~��}g��ϨidPF�E�hX3���h�̤s輅à[�t�5
���$́�'�ƪMN�)���K�L�
�Ji���_���Q0�*�ۭ�� #QԶ�-0���Ҝ
/x��Aٗ������
�9�ؓ��@�{_:�yc�"��?²-7*�}�*I��<Q�ˢ�o�C�_�E�Ӵ$©:P�1w�]g�:S�+�	r����c���޸�����"1�6�`۵���8�[��
�^&f
<����v
�u%O:���Uɞ-!<�~�4U�AC��5�#���r�l.I{6�^U
%���Ae1
�;EڙU�
+�$�R����"�3����\*|�,�K���|�9C
x�Ż/I��Zl&>��R��|�\.���'åB��(I�:��<��.��� ��
m0:
�2���
�����)�-�
O�1pZ���K���Or*Q�ab�����ǐ�APUJj�F��f��i&��s�T$ۧIB��\Sܐm�0F�ytQq��
7%iA/	��|ڣ�7�/qp��ܓ P4�X�q�[R<iJ��U
S�d�|�g
�%
=5�A�O��H��Ԃ��b�F
�)	��z/Z���g�$�b�;w�턼p��>���XcVɐ(�h��Y$n�<�L>�YGL(��~֟���`�ZF�c��s���zħ�z5
��s7�;p
+�[�LJ1Zgv��ؔ�-u�w�
5�m� b��5AB_
��i:|�S�3
�@��xW�d&v
�
 6�g��1�oY��2���[j#}��DH��V�j
95�v)��j%F5��7��hqF�#ʥe�/�f��͊�%U�t�}�	���^��,�H�b��b�G�
�X�tSIC{�/��赲`�
p�SO�񲄃�&�j���BI��}�QL�7��#�-���L0����!��ӯ�i�P�(\
6�#Ί�M���	r��'Л�I29��8Ee�GAo���	2����?q�����
���� h�����Rrl
I�d �/�"���S�������"�XY&U�U�n�`���{��ѯ~�%��;����A1v(s�ʠ%��S�u��-n_� ay[fb��ޫf��"�uܜc(\.�t�9�I��
�3x,ژ�ט�$t�#��=Lv���IvCB��;J�!`��������pJ�k�fp
`��v}D�%���������<�]�Gn��84u�'�
B*$���&�>��M�����s��b�r@�55�W�ܛ^!���
q������*�!{R�
�8gg�!�}�CK�����z \'�N���޻Q��Ez2J̡�I��0�A1C-�Bf��#���
$�|o�VBV� ��>�I�Ӧ�կ
s�
�$o��SA�#�FɣV
Aû�7	���I8Z�?H�),뒅�
�kͅ�ÍL@�E�&Rhn�(��A��0V��⮐/���1w3�Uw_[O �3c�uZ�
h��ˊ� �,@��d�Z�b���怐���� �]�3��Y�B^�K�|S���S�j���y��N;s��™�k�.�v�����׍Ж�}|Յ9�p��)��F+ȻuP���,�X�Q��Je���
fJN!
u�uC�����綈��q�]�q"^���/�F�
�Q�NQ�`�^�E��yDf6���s��#ӳ�I�؞
�
�
�L6x��^GLet]eey��pؕ�������k��줷zC���ٜ
�B��R��8�`�akQ���-]�����:< ���	@v�x/��?�۞�m�G+ �b����T����\�H���d
�}&
>�jJ&8敝��{��pk�O�A���WS�p$b`i���vDDᥫE��V��D
-B�j� C?34��_:��u�2���̖zE�	:aҎ�j���u�kKy	�Sb�(e?���7��ia~}�0��yViؒ�Cw: �����L49l (���U��
�}d�m�Jph��!�ۗ��:���������C�Q�[zf�/����K��_��Ծ
CR��j+wP����p.Z��F�[f�M`ap��y9B� 	����Rn>+�ALjk4�ua����݉S�Ԙ+cV[m���b��ć�[�N��z�:\N2tNZm��<�by8*{m
��@
�ͯf� �S��im(\r���������+ld(�UQ58j�I�`���A�n�����d��Ƨfq�X	�u�d��^�NE�E.fU��.�C�
�j�����S$R��ݢ��-��v?<_���m��=���R�jnH-_�c�ŧ
X�J�7,�6�|��$�i�
�K��_/cS��%ݲ��
�l
����k��-�:bȷ
,���8��bP�z�|+ٍ�G^��'��� 
�ow
Go�|nv�$btD�����F��ČCt鐘.N#eѣ�_R�!1����<h �G�+ɝIw���!ګ�Z#&�"�?
0����0�����9m��n‘�QE�5c,�O��}�:ZfȽ��U�%_��x����s2V�ш��f�
��4��qSqr��c ���Kz�����afq�8�_�/�w�c�+xc��4
]s�.���g���	yG�3��|��=��h���SI�^I���������7�ܻ
+-^0�� B`=�ĕ_A;�f^�4o�_>���~�{]gix�]�R	i�Z�V��a.���&�K۳qj���p?�}?*ݎ� ]5�.[>�-;���S
+f�|�E����5���
B��	�$j
/��vĈ9��.7#f��I` �|��p缊��;�?j+D��{����OĊgH�����
'uB��_G�
�{*���Nl�ڡ�7e�V�ɃdD�-�E&+w�xR�c���^x#Q8��+��Fq�c� �s��f�
+
r	
+�4�V�2.
) �iQU����MXC�x
�}�)p��=c��TH轀�J. �H����_�B���1D��Șm����H�&(�
id�p�
>�KM�g�E<�uc�\Y���ܝ���IP�%
o��oʢ{
�9��&
C����Ta�3��P�(���}��r3<yZ/��(Qm"k�������NI'D3=7�^U��q�u
�PezM��h�CP
�_����T� �^�	�z�0��ִ��a�S� i����X-���˛$�5k|
5?��|�?�%��j'<�M���wu?��=y�a�K泞�)����%�������$�=<<�Y�a
+��?��I�n�H�թ#$�3ߊ��*E"�t�����a��K��b�0Ô<\�+(��-�%k-�5Pb.j���B�����1���H�Y3��Ĭ��ο��ʓ���P#��i�y�S����D�
�K}-xP��o0w�
+nA���cӏ�J����}8P66�����7��*F�x���	�\���#�\i�%�*e�,��2���6f6
+endstream
+endobj
+2635 0 obj <<
+/Type /FontDescriptor
+/FontName /LOCWHD+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/A/C/F/G/I/J/K/L/M/N/O/P/Q/R/S/T/U/W/a/alpha/b/c/comma/d/delta/e/eta/f/g/greater/h/i/j/k/l/less/lscript/m/n/partialdiff/period/phi/q/r/rho/s/sigma/slash/t/tau/u/v/w/x/y/z)
+/FontFile 2634 0 R
+>> endobj
+2636 0 obj <<
+/Length1 745
+/Length2 1342
+/Length3 0
+/Length 1868      
+/Filter /FlateDecode
+>>
+stream
+xڭ�}8�iƑ�I�R��rcG�k

cT��0�6*i�<x2�af�d!�e��>��j�d���m�b�
i��Z"�"�;�v������羮���w���Ӧ{�Y�@��A�Ɛ	D�4� �K<
���sa�
>L���% G��If	���='\�E�C�@��`Qd�a0a2P at c�C�0���^
&�&��f��
<�	�`n�2�@`!L>��c��DE�8��K��usyR(���i ��,� 
�1u�HO��,����H6ۍ�h��?ƌ0�-���
ɇ���a�\t�t�����Ȱ�S*��F�d4�
c��o��(H4̢#|fb�y�RFY�I��-q�:��8��
�<�Ҍ�@P�� 
���K5�w-���D�}x<
�
+��ו���
Q&������`	\.C��K��e�� �����
�t
�#A
.f�U!�50
[�a�y;;Nt��06#H=�-��/�
3�˅Q��_"
�k
�H���h�����0m�e�$��:��)���)�Yr��w%�?VD��?Q)�%�lu�
_
Ո%u;�{:�/cC5���T�͸vy˕��ǎ�K&~��q�}�U�o�`�9��bږ�|�a?����(-�A8H9o�ޱ'$/sL���u52e�������=l�q[8�BE<�ъ�#�l���W�g�K>�ZN
��Mg
����O����oҡ�N�pR&��bjBTNh�)�������Q�)v�n$��n�l�h売�|lO�UEgǙs��*ƥE�~3􁪋6}U{����4�vr��83���C��xUFFxLe7�/���TPPX�:�{G��l���d�켶󨉳�<K���Ӌ�z��z2��8Pk3x;��U�Mo�1�)�z�T�6>�W-�K|�:p��:w��!3�JRmE�˝-�D\kQ��B���x<

�X�B_gBĽǛh�'������%�ݍ�EY=�Oe9�5�D�Y�mFʏO�NJNK2�Z�r�d4�
��(g�3��>@'^����Z[d� �l
]�I�p� [...]
!�ޭM7:��hp��#*{�FTTn�z���o4�
V�0Tk�n�����3�.��?J2R�䜙k��޹���l��{ݸ�kX
d�ʩ%�耪ګ=���
Y��Қ�;w�)8���OU��
�V���F~c'��Sr�,t�yl�f�瓢�
+B��)c}��]�R,2^�[
��;�ype��g��<5�p��y-��	BS�TT�fO5�8#�8����g�Xm��
ެ�[3rj5ߵ�ֻx��
^T�5D��K�E�=W���%2
ksf��y_#`��m����M9k��&W�~+r�T�Q�s���ݸ�/�~[�N�
�����_��Q
{��ds�P��_X?1a{����Ί5�c�E#�>e}��F����??�p���e��=sZG-�k'���d`a?
����*���LJ
+��)�mIֈ>�i�v�t>;�`U���qs���
~I&��;�㸃@���x�����#�Q�����+��}(U}�>�2[c�{4Gq����5<~�<�'�Q�c��ㅊ�c�?L��Va��y�j1Wy(�%Q�
Y+w�Цd29���O?T�_�gx�
�y�Ƽ�����'',�a�v��C�Sj�
��o������)]��{��q�����N�FQ�T�(����E��O�H�I��2���T�ͥ���8����9ط�3m��x��3�˛�Ԭ
+�mm�ף."^�YJk
+T��7�]��
C�{?�$vM�
f#��c�Z{2=m{e�Ԇդw��)���t�7$�hA�5m��'o
�ʇ�����nP7
�|b:Y�����X�@v��
+�����⒎���]�%��
+}�
+endstream
+endobj
+2637 0 obj <<
+/Type /FontDescriptor
+/FontName /DBUDYM+CMMI5
+/Flags 4
+/FontBBox [37 -250 1349 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 90
+/XHeight 431
+/CharSet (/m)
+/FontFile 2636 0 R
+>> endobj
+2638 0 obj <<
+/Length1 1170
+/Length2 7204
+/Length3 0
+/Length 7933      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\T�ڷ)iPBB�A:���J������s��C�SBZR:�E@�Q��z����}�����[��:��_�y-F:���2�p+�"
�����#
+��T� ��ܸ��r�Kw(
&o��T=
�| n!Q��� w�v��ڹX�X�
+�8A\�`K d�nqz��t����wo.���#@�
7��
��	�����XC�� +�-�
�K�
+��������.O��ۃ( ��2Y"��0Go�5���y��!뿋+z8:jX:�U��A�/���������=�!� ��
+��Pȿ�� �P�����[:B�20[G�������_v��"�ւ��� 6��n�����+y��:�2Z�2z���Z��>-K(�]����'�o���F�
+E L����y
���W/n
��x����޸��x �< (�� @��\0��C
+�a0� �+�_[� �2�� @�H T��� @�?$
 j���y@�� ��=�
h�=�Y��D @0����Ý ��@
 �>����B�����Cg�?�������y�
������:�T8[��C-
��66���.�C������"
�
-��8σ~�?�A��?�����7���&+
G�r8y����y�$���{��B`���7��l}���]������Ӛ"�
+�*
��Qg���u�7f�q�/�Ϻ6O�BhO�‰졕ORժ��6��M2~��/��
D�����/������hC�����Fo/>�pnf?�B�����V}�G���0�����i�C���"^�5�f*�Yn�z
+Dg%a�����X<Dn�yFr�H��m�a� C�
B��)�B�[4O/�]
��^���N媂Iv�T3ڋC4*���;��x�M�������xj1N��(�P
��}6��iNTB�~]�Ŏݗ��*y����{Q�s�mP���e�L��L������m�$&�^n��~=�Y
5��}�����&A�Լ�uO���D��C�N��N����[�+={w��p2���J&�(�9`Jj�g�4������X�cn>2��uJ�����Vm�!~���!X}iΨ�{>�(þo��֧�)i���������Z�`�p�o*��h�h������9���E��J����d��;9��[q2�d��B��� G�eþ
+�
��p�DEj�Y�|FھSs��u<��lf��B���B��k�E짫{�FP�8J�'�1$�u6I�;�=�u�>�`��$�������ڌ�
Q�c|�ٌnHTu+bA���` �L�k�c.=b�^^���.�1�%TV3��!�>���v���K3��7���2I�� �=n76�5��3���M��/�D]I�����MU���[�T�R���V��VA8W���%/��h?_
�y�1,Rfٖ���lepǢBrL�v_�V�&��ΆS5d�;�U~�P�!:�\�k6H��v�3G�C>�A��Zw���E�J
)%�bڛ��$��k�����_|�l �<��Åm�	%�ro$-���
b0�H�H���U��
.����
+bw���#.G)�J���-�!�Fئ,j�q�
��X�����.%g�Z
*?0�hM�&Un`�D4�0l�k�w�rC�.G�7+�����w��M�HlZ�VR��b�
:�v���"���%�d�f~ �)�l�wRݎT4����6�`J�J3�Y��cgi�&i5�����
�,�$��Һ8CEW\
�F+�\i���i���m�rn��ƠcQO5�FcP8����	So5��t�����+��ͧ
q	�j)����"H��_U�2���f�
6�s\4N�G�O�����[s�\D�t��ܛO������h*D�	��E�O0�\�
+�T�;����:����9O�i?��(	�w)��3,Hb`�.8 ���ITߧ7)�BZ�(ư_i�
+ı����)#W�
�t/{�����Y
2�܀�j~;�����i8
'��8��{��᭞s�1�9���
���ͻ��2Ϯk�;(M`S�y�ޮӅ����E�����}E��G?�g�c�;�t�6�$ޭ�	�jð��F�ʪ JZT'���pt������~p�Q8�rA %ִY<\�M���; `���Z��q��e�TMy��L�MZ�&�'ߺ��rUU����=�X��^��iYp�z�)`��ήYY�ǂW�^����m -智p^<����2Z�%��穯��v�0u�j��>E1�������P�I���)��)b<M,[���
�W:����5
vl^�B(I��
F��y�T
���$�L��N9�D�F
(t����<����zT�=����)i���S�1V�m��kެ�����6㈢Z)����F�Gr��1����3s�Z�'�qv�+r�'KP7?��_���Kd��m@�㾖�2�W���q�{޼u��F<��n��x'2�
9�_�G�gX
K��
�oǰ"�e
_U*�����_
+��P1�U�
s�$
�m������v�
Ψ�l�v?��Ø�Ou/휟���SW�c��n�{條\�K�No7c3�#�S���4�
��K�e����h|�R�~
=�+��쇺l���3��ӐE��5�7V�}��,�.+�D����	��T;��
+��k�QI�����.o�7���Y��T�� L�����W."�~F~��S��x���4a_�]""e�a��q9�l
��L"V|Y��5�S�N�~u;1:�۔�loY/�Y��)B�I�@
+���?+�~m�Q�=H7:�����>'X\�y
���
��Z"@]gs/����	4B2bT؆r�kX�0zڧ+����8�=��M�aw(
SG�����
+�wUx'%�b������c�L�mְؗ�LA��++�y�qƳGs�5���KԞz�+�����Ĥ�	�u�9�t~	���&-���2� �*��|��ܳ��]7���A������
+�'O맒��a�f���J��-��p߄
�n����R��UN
鼂��e��[2AYT�
�>�:L�=C9��t���
Q%r2l�PX\R�c4�|��
�
����]̀x�.y
c��$�#H�FX�7�6��-w�5�^+�	<:~]<�1O+-wo��ߴz�zq$
��Q5�����Y�Y�_��,�l�,�}�� ���8E����
c
��>�,������G;~˔{m���?�T�(��v,Õ�;o��i���<��
��z��D�"�f��
+���
�1l;g�o͠�&2 ��Ny�6��-�=��S��s� �BV6�l-9��V�>�� ��eT�ܮ���W�sy羾��J{%�������
+���@�uC����F�Y
���"Y#��Y�
������لZ&۾W�wYG��vGn=�|�^��ӽ5󆷶�a
[�ת��2�SD��&����.[	�E��pr\�ލ�͙5U)��*I��W��{s��Z�>�M���xP
�ꍯ����9
-�ͨq˫����Ytfo`����}M�dB��7�\�7�d盓�;���~=�f�g]��x 𗲈���`�C��q�T����-�H���@��_�lU�jL�nn��im|�PA._�i��a]��o���G彩��/;
+,�fW�� � U��+���D-��	.!���ŖG	�
�CZo=���|����}��\
F��W��,0�y����ʋ�Y�����_swRX�h�T�g��C	V�a&]�$n�S��w��%D6��
p
+���Ǩ:h�%�
���aͻ�Qz���
��z܀�3\B����X�٘�6�v(]���kܛ�]�Y�}�xB=�
+X��z���Pk�_j�*P�	6t	�����M�8�
D�h��Z`�S
�sPm7?��+[��J:�� +1�J_VqA�Dž��d4��9���t��/֍
��
�(���բ�e����䜬��n�i,
+F�_S�*0��E'�5��"RV��;nj���9Z��,	%l�h��zܞ1*9k������G����$�
�*�0������מU9�)M��mw�+"�c�Wz�oi��@-��Z�n�g_-��M���KѢ�q��l#7;��.�F�XNc�$r�P�/;U�S�q��
8,����8
����H���tvH��:�&��B4}��G��VЫ(_x�GM�e�/>e���t�|̞r�9��~�UE�W��K!uK���vہ��.#���.~YNo�
w�^!l0������y�ܤ��b,RQ�c�o�_��
�ڟ�Ldz
禪zPC�|}'@��IJ����� 6��x��)��S���H�0�ޅ�v�{䐣"��q�]Z��\�.�(t��?�Xǰ�C
?|�³֋�e�j��a���~�E5*��W)˓�>��O�<���|�Ԙ�y^�}_mL���*�=�O�������	+�҂�^�:D��4b���U����l���|�hPBJdxV�GZ��'\�
�8�
���Hr6����|l��%�����@
klf�Z��t�������SA��c�76�w
�`Lv��s,L��ET^d6s̭M��
)�[N\�z�-&�'j+�3O�6�u3j_���0�g���>�ƭ"�ar����N�����ڠ#&��yP�F�p{rs�b�b%�w��
���C~3c�t���0�Mh~>0C��
�K�̥�B���4
?쎶
+�:φR��mdB�'G:�j����ܵk�fa�̩�6=�r3�c�?��Zv��u��
w�%��abO�5������{i�
�i����D.��
�I�h��~��$}����{����\s^����O=!M�����x�l�c�g��z��C�j�Dv2�������~��x=��y��������44
+,Ȅ�{���qe�4#
+MP��)�pv�����<n�a�����g脵�Dc�OD��
-#��G�A�R��a��Y�d}��~
;aĺBj�}|X?����ht����^�v��;�X�}d��T{� ��d<a�!Z;�p��#���bY9���ќ
�no����oi�������s/�%Ѿ�yN
�<~�V%V�戱8?[��{䰅)s>@�g�)v���^<��
1O��G��n_�v�������p�/'f�j+�D'��Q��^�?̢�k���
���A��$bo�W���=
�
�t��>�[��ɯ>wL���R��{%VF��is�+��xK��������Q�o����j���^e{u f:��K�P���N{}uŔq
+�X��݋Q��ֲl
Qպ$��,J%�`8�v��~�|�J�C�_8����;��I�b�ƭ^��Hpp��1��;�T��/�7:
����kI;�‹Q�X��Q�*c\�Wऐ�
b
�܉�	�c��4���B�ט/���{�k�&�o�
+\L3��,���ƚ�>`��sc38�\⁔
h�*���j��8�Ja ��ĚI�\��|~��

05x{�e��1y��6�O^�`&V;:�ro��Ňb�R�@���K#FSD0]�@ۀ��T�@ߕ��נ�˒d�8�G�D4O��7�>z�$��N��Fx͘l�W�����H�a
+
�ɜAA�������#ߦ�3	�>�
+�^�
U��un�5�}�[w]aՉڣ]&3��ͧ,��
���m�.�u6j�����a`?���`V��i�ج��HT?���u��/^j��������L�%�"9���0���$��
��)a��h����^�l�f%�Te��ʼӜ�X`

t8en
�h���7�$g2e�7�K!���^��g�
����Q�f}ʚoi�>^N]�M������Q�G2
�"��+ at 4�Vbj3$�D�v�ȯ��ܹ�=-��$6b�К^N��NB�-�>�&
�p)�
���u��`��9+ {�Z�L�C�Bu�ě,n�B�ݳ!}>�nM��B^5�mt���[�#6�i	ʇ ��
�G4*��
�k�%��uxu��7s��'R���Ij+r�`�LNCu޹(�/�+D|4������>�
�<-�&�j�q��Nњ[�9gI���Ɠv�Ļ�yȳ��d/òq�\X�*9��XѾ�ܱ���5S��20"�u�Z<fD�����_�1�(�=���N#s6BI��������e��mZU�bTiAr�.j폞��˼KM
l��i�a3�d���ʤ�-_��+X���;.��Lt�uݠ
���"��3/�	�Qg�����%vF�����ɻ7ũ7�.��P��R)0���MFZb2/:5pΎ��x�:<ǃ
+���>*3X&5h�23:(t�omم-�p���6`�8ް�Z�T�D�B�&{��Q[j��
�2G|T-S���"�<��7��R�\spAVA^�
�=k=6z9
�
��'y���e�Pɲ���^�G��it�f,R����R�ҌZ�f��gTdOy�~)��m<�nQ�C�G�&�l�S��̡cD&9�MzW�Μ��2^��
|��mJ�TH)$͙�2Cy���,t�\L�נU*}[Q��{��&���7����A
��=J��u�W
��}��;�4y'RCN����L��r�;��`�*��S�O���X��P��
��Uz4G�[� �;����/0�`;��5Ch�p�%�
���/�m^ei����d�H�=0�A�m��r3��Jn�=C"+���Cg֞ Ӟ���S�/d��Uj�T�ʸ|
�Mf\�oC}ƥ�n1۲a+��������8%���z��D�ҥ�K���Xj}ե��`W9������$6�0��
+#qY�>�
��sn�F>�_��h¥YC��XC; �BEO�Iq
	�q�	�
���
�����[W�p?��-#4�*|��9%�iEY�D�0����l;�>&��iR��޻����㊨�	X�-�w�S�	�a�9�BL����_��?r�
ٲ����?�A�]Ǒ�G3����/$>o}�j=��iP�W�P��:
B�B)��ǔ"*@�9��t4r���E|���|�CHB�#�e4���Qg

+�B2�ع�__�Ԅ"]�f�ׯ�!-aE)�X�R
+
I�w
w�q79�b�O�~�m�%��;a�s ^9�
�����Cw`p�R$;��;�
�wQ2��;ܒI>��˭s���I
���r^?�$�|��E�J�n6u���K>�����N�q:������ap����q>
׋�*M
f}�Τ��D`��;����8��2���%[�L|j�/�ڠ
YGw��R�a$ؒtpិw��'�q�"Ɍ
�9�
�/4��ߢIF��&R�t&2��k��bGAE�c���Ԋ���}�D��:����
+B�zt4|��r_ M�t���0G[5ߏ
۶M���t>����T�I���E�R�V��bt�:W�f���p�i܄���ι^��Q���,
��>lu�L�w�`���d�:u�����ٓ���gZ��J׹�%C�>60"�?�愵�Wʥ��cYP,���!u��,Y�,������1ƚ-�,$��͑`q`[���e#��\���
)��t2�h��D	\�g#��i
+۵>�v�@�b&1du��M�K��u�6�`:��>�
�Jҍ��=����,
�

>Mc�⥠l�},�"ߔZik�Zx�`���]�I�q5�%��H��`KD8/��N)�\� N
5YDD+I��y�2�L�;
3�9���|�S�'#��`���+�햬V�"�
u�j�U�B�1H �}w,
ۖ�
�]��D�'����d��͟�U�	�$�b~kh.�
J�W�]y��"I���h�Z��D��?
s�=�U�"�FEˎ
��g����eQ_�_a�$�Ѳ�T�ڊ�����U�ǻ�+2z�D�q����I�e��R���7��0j���8�	��1�&�T�V�F�Ҵ+����9�mEi��N��X���1|��#�b�|:q9J����(���X1�\�x�{�u��� �-Z_
+endstream
+endobj
+2639 0 obj <<
+/Type /FontDescriptor
+/FontName /APZAUH+CMMI7
+/Flags 4
+/FontBBox [0 -250 1171 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 81
+/XHeight 431
+/CharSet (/F/K/L/M/N/R/T/a/b/comma/d/e/h/i/j/k/l/m/n/o/p/partialdiff/q/r/s/slash/t/u/y)
+/FontFile 2638 0 R
+>> endobj
+2640 0 obj <<
+/Length1 2187
+/Length2 16140
+/Length3 0
+/Length 17314     
+/Filter /FlateDecode
+>>
+stream
+xڬ�eT]Ͳ���������%8
ww	����58�Cpww�o={���}޿߀�XWuu��U�s�(HU>
������:ff`�!�Sff"ff`b���q45t�ي:��3ss���? y��x�Y�(�E��=
����"4�8q
٘:�
m��
�-Lm�1�
��U���

�B������p"V6u2ut55a�cf&6;��l���$ekfG��o�����.��::ES�K&
1P��������
��
0�)P����opqkkyC���S��g��`��?v6�.��rv&�����U�����LM .6�wU���`,dknmJ��o�I
�nj�p6� 63�v2�������� V�_�5ŵ�����)l�U=����1�V��N��,/3�����O.1[c;��91
;�����
pz��N��L
�51u'6u
+fd��sn!�ć���r�3
+�c�7q %�!NbF�?�E�(�b�����enbF��'1��zK�!bF�?�J�(��؈��P�����C at qr(N��(����Z�P��jQ�C at -*�E����!��?Ԣ�Z4�P����E���� +p���=�j'��l@��N�)8Y��t5�C�#9[�:[��9�������k���&��;0���5�:�''�?�?ژ����������������/'��?q�52����,���6&�Nـ*�W�o�?q
\�O�?��e0��@���������t����ß����۹8��
�`���Q�<�������_
@�_���G��
�}��
���h�n��Y�bl
�
�j3����ف�l�
�r����g�_��������

Mm�kVؘ���ߓ�
+����j3ǿl ���X/{k��r-������������Ҳ��Y�?���g�������N1
�'-;p���
�Ǚ�S׿��
�|��G?�N��5���S�I�,�����_�
,����_�1\�B`�]�B�2�����/���
����#����ߩ��������g�B��n*717��y�8{����8��/��o7SSwSc��;c�`˔�oe�bS吴���-��
��]�A��@���8Ю�k>W��#�C�r{�w���4!~��:����u?ݳ
_�:]�cϞ�!���y���
Taf}�,Q�p0�r�$O�ZT� z�䇎k㏌`NM�tk�АzJVe�T��0��57��x��� _�P�V��+�N���܄w��T��O��۴�����(�u#5���*�����0�?���ѿ�dy�L_b�
�s��o��$y���[/�5`�3�(��]�t_`WE���~L��ȝ�)��G��፜���K�
I��fI��=��1��Ɍt���'�
Gj/����"��'�S��Ay��y�U0�G
�S<���n"��P�vd$�����`����V��TF�{��S��@[C��0^T.�Ri��
�
Ht��n�/�)��
G�
��P�ӗ�j�R$y1$l(W���F�t��N�ڟ^���
+g��/6�:����X)&�Y�j�s�0� ͫ<5��C�Ԏ
Ѽ��kP?9jb���
;��3���,�F9�Ȧ'��$��j�n��H�,����V[�"�r&�\AaH)m�@��3�4�hs5
��V� ���K{}��rh]�MRl?μj��
O��
O���Fi�7�9"+�Z	���€��r�>�y���	��C���<?ٍ�0�y���4 �c�̨b�NY�Xd�
�1�e�:�r���k�dj;�.H��b9s� �$��FQe��0�},+}**�cS����b�kl�Aq
8
�#���vo�3��N���Ҩ"�r/��5}�.��`��� f�&C��~�{��1"�
٩]�a�]��`8o��
�'�_{�.���fۿ�
��YUA�m@��
A������e؅s�
��œ�VnӲI��
p늌�~뺝����s�:N���e0Ǖ�*���U}-�O'�j���ob!ڊ�ɭ�W�l��D1o@�Y�o��a&-�Q���|4Ԍo�&��2-
+vr��!C�1���C�����y���o�2��,��X!O�*y�䛴X����=A�t��l6��΋B皥����Y�;��
R���a���t�v$j�щp��'��U(q�?3����5!3U��
��?���
Z����8�YM
++ʁ[����
}
A�xY�w�+y����H6�/T6�n����?M�s(�R�����?}`�)��B��k@�d��Ǻ!���j�
Gv@�x��l�(��V����@|�e5R]�Uڏ�&�1x���`Ϙ�=ȵ0S�q&�!�6��f�[~p��^O��EU	J勱Ea���]��
��
+��_�fRד2�
s���MOa3/�޼��{:�;v�Mo�
?E�ѳ�I�}�`�ې`�n����o��{G qZj�� }�9~�]ي4��Y;�8ؖTj?�CR��q~c�
	
F$.��ߠ��m,�cI�P��d(
���_�I
Ȧ�z�T�M{#@5���2\
K��/�
�kY/��DZ�����PE����	���ZUۑpA
���0�HE�QN�Fcy��5�h;���o�����I��>D���*r������ÀV
r�:��q�-�fi
��?�H�������`���
�5h#k{m��a�F9�7�^(�.�g��?�o�B�e�Ɍ5@
���
 VӛI���-�0��5е�R��QE�ׇ��/|_��.ca����\�T����*�+��{�Ss�����ط�N̈�X��hS��^��(-�xª3\�ႨT�0����L&��p�h9�l
8���)����f��WE��W <�z�fT5n�:d5T1���"8�}Dn�����=C��ƴ�2����Y_jgym=lM+��n�q�n�Zy��62����]������-)�Q�������u]��l��I��	�l������n|K
+s
e�$BtlZ��A��0��}
�8�q���̨��z����p
���L��� U�d���٢+
��5�]!
*�
ɑm�t7�\F�\z�
��u�ٵi��H�7k��wpC)
�9=�9}����v`-8�`>,��e�G�D�T�忉,�K�95���X���2���z�0Fn�{
�Z�t��[u�F
hb>Ρ4-z�<������N_Wn��d��	��s+̇a
����#��^wޤ��u�(�cN%
/�[׼���� A
W�]#C���x�M���8)����7��8��t�KZ=<��E��?
+����.Ӡ���@7�`~� �u @	x��5���geӳ�av�>X�\��ٻzX*�<�˜k_�tf��W��~���,����T"���j@��,M]�<P5PJ�S��a �~��NqzcX
�.�V��L�f��OC�m
�z
��H���Q�Z�p۲x,�t�~M�./��;��(H��>�����Uء}M���d�����i�J��g�����X�Z����\��/h=7�-�%�ĀR�o�AE%���?�֊4h^�-��H��y
�U�4�Ӑ[h���>0@�o|Q����T��w�
�ʛf�͆�k�Jt�K#�
�����
�n�9OO 9ۜ}\CG����
�hѪ�� �@h��Y]�B9������j��@j$F`��}Xs�3��t�������"݂<9w�v���z�>R�O�f�N�'��:n��
��ڲfc��]
+̶J��4m�sg!i�L�
�ég�ʶ�kq�#� �/�O
Sw%P0 i:�ShI�V������
����-��7�>VU���Z�G;�q#egl�K	�����yW|��^x���y���w" Q�ˤ�-9կ����7�LJW�ʟ
#@%���悌ҝ������pG�ܼE4��P�R
��T�7�~�_�g[Є��P�.dEy�k�
2QCK���C("��ސ(�_�^����{I]�6��Ⱋ�ol�'�6���ჲr)����h�Z���w�ݍ*�]>�cZ_���g�H��6��$�����f竈���eGЈԇ� �-��׳"ى�;�Ir�Y�2/���s��tY�v�)��k�
��f
o���g;<o��u��d	?)���M��o?�q���e 6�u���ӳ��4��<�F_'9���Ԥ���(LR߀�9ww�:5���=��M�<q�����f)�<y�_�ʛ�1�Nt?{�铭�~��\a�
���/�����1���
K��~�q�99l���������x7D�Y	~�7\ű������ꗞD"�Y��B�r�~;Q�/��E�CMk��"��ݐ�
���)���_;Y[�܆JU
�m�ZŲ;R������gdzo�ӭd���
+LD^����(",�R[�#�lT��@Ұ�f8kn�ι�B̐�W�ܙ�wTt>r�S$��y~���H41�4W{�E�1�h�)_Z�T1O��nTj��I��*
+.�a�
�?��zP�.q
+�<wʝ��	���v�fO�����n"ڃ6ʾ
1eLe^�;O�
0�)ylhԲ���
t'��}![xծ��N�<E�t�`�M�42�+ �s�vA�2�%�w���`��[���,��=��*�mR�>�Q1���ӻ#bM��jq�q��"o��U
I�>i�����̗A�Y^I��>����`o��������GM
���9+
t+��� ���.��*hkY^�c�D��"q����1#Q�.�z�4����v�%ԅ#�Vz\�ޘp�R
�,	zV����i�㇏�%��j����Ŏ�:��j�����Z0&N�Ch�P���U^���[Y���J�7:>� �a�R����$���>�*i��Pg�殴�e�R	,zEf
i�w��K�&&
^\o�g3���
��q���_�s��v�h�*�@�#m�?�l�yUA@}TnY�>K����؏V�6
4�8��1|y�Ը��آ~�o'�tm-A'�=x*��^
;M

�v�f2��A!��x2iv�����=��8��4����ٱ��X�ᱩ��_!�x��{p{Ĭߵsҡ���v�E(aDʙʡ�Ǻ�'zF���hcĹ?�2�6 _���h�
16;d5�[ARY�4l1�go��!H̹��	~
̾�}���G����d
���S��}苾��\W��0(A e���6h�(�'�'�e���Ze��1�<��R�235�ޗ�]}��C��jJ���pى�@���ě{k3(HVC����%��`�A�v
+

��x(�mY����F�%��F��7�x�`s�u��C�!�1�N��
��>+�zE"4�z���	�'1����cP�P�y���Z%+o-$���Xs���( Q^M!{��y��BūT�ԑ;\=O�,��:qQ���
i����9P?�8a0
����M�!P4b��U
+?>`+7>�Tҭ:X�jS)�2��rF@��r�+�XnDI4َ��%7�G
ǀU

��9�	�~���N�J.��8Ӝ����O�a��IáyG
z啉^{$���M��{֬�~}e���y���~��Dz���4G��Bj\��A���l�Nj���w�r���&�~�C�2���WHDM��=ۮ���: ����$�����
=�D��L�����/���PYV����f�
C9j��~��y��~u<hپ޷�_�}�8U�-�F0ں��Ԕ�턎fB�%���Z�3!���*�J��?~�}���Z���W�!J'#�om�5[�խ�Z1�>x���7qL 
+B�����ߍ�iۧIz�����b�|WM�M2b-
W��ʙ0�]N��SZ��?�
"b�	+E�S��5�B�F��3�-6���m��9�zӭ�9�͊��	2��՞��6وN�>�k�p��w�f��"64/��g0sMC���
+��y0�
,K�Kx���}��m�������	e.�uM�"�
�g�2/��f
Qۓ�C��q(�����N'�8�::��G��7J�K�N���P��2����b񪕥�u�Ϋ�G������?�q��<ڂ5nյ�_��s�.��e�vrѢe��kob$�-17���f��`(4x�pQ m
+i
��ȝ6&�wI\q�؜p�Ĵ��܌R�Ԁ��T��n�����(�J9
=�r�a"��S��̍u��)����r��a��w=v��ǹ�P|��=���.
2��*��[Ibc�J"52��W:���o�1�`�����?4�_�cp�8�ix��DE<|�
@A��\=Ġk�az�0uE�V�v��LV��H�o���a�*���(��9M��#h��
�)�ʞ\�(Q�\꾺T�;�� s.>���>�ml�b����׬6�0�
+	cG@~��8�(79�v��q���_�[�m~0j |��p��}�9s���;��F�$N2bϢi�GT��"�dR�>�tK�9ɲIm�7'�v�N��B���p�����׍��w�o
:���2t7�K �j���K/E��� n]d&{��:
+r>�`jUc���!&��<7$F����[�O����r�<~����WOޛz0�_�Z{���J.>c�0(�8��EA�2�(k+?��ӿ��f<�3�#�1� n�^rB���
�c����wCԆ4$�m�e��n��
du*��/�8��NֈN��}y��^g�D��>o�2y^O7aQ_�x�n�c�yuۋ������HN~��mZ`�/B��9�`�ִ���u�K�|e�Z(�������W���x�)�
�Ͱǯ7$�FW���R��ᏫR0�Cgk�"�<;w��̄{V)(���Snɕ*V�|�i&��
�����G�P���}�d(l��{-ل(w��
+
�+�-�y�k7֋�����b��c�`%u�`<w�e�b�k�O)Et�$}
+
	�r�ga�qi�yrW��H)�E�|&]#@�~͇X�q
����q�^;��+CBR
�x���aا�d�/�Z��p���4q9��g�
j�DZ��M��ͮ��#�?����
SPI�k��(3�*
|�~�)q���V  �9*�ȇ'�%��guE<�~>��<D�H8��?e��`Vao�Bz̡ײ6`}g�����ߘ[���R��`�Qa�`��z�zZ��]0s�^ѵ6>"i�Im��X�߯���
�y��-w�,�H6��g�D�\�Y
bR����]ãW�����VѢ��e�p�j=�ה*�����'d�ظ�g�oj�5��x�
kϹ

mҵ��6�Sl"�M�i�p)!�o ����j�e���&ڲp
+�U��P��m^�o7�
+=[t�����!��䥜}݈���G�Z�o
'�I-����a��,��]<[�
�u�
+��*o�?���9�|/ts-UD�4&��V5G���ў5܆7 at H�ɔ�ѵMqq	W7Y_�D�)o��0
lw��C�]O���)�F$�Di$�m�/a�*#'I,����E���x�
�1�PJf�.)mg��hѳ��ق\�j*:u�\���=�8��O��N�e}x����
+�3
7
$8m�u�-�#v|�+�D��~
À��@�V)D��<���Ԉc�iY��\iv��9�Ж�
���t��qb��}�DƋ�����'c�-������e��-&��7�W#"U�
�
��Bp�X�x�kR`�vl�]n���FQ��F�7M�D�2��ך�
_z6$��f=�tP�Lj���Wf
+
@4|��K��5���'�'�^�6d�T�*��V[Us>z���_�n�
��:�
�A�p���#�E�3֐�-��k~h[��}Of��s��g�
�n/t���m�n��iL��x�����J_��^��[#3䤖̭�{�o�98<^.#�B�ʴ?���Q� $
�JC51��1�nx��yfm��7���=`�����R��g�O���\NQ�]{��V�u�
?T�)����<��N�-Bڿ1H�v��I�W�o��[������vGY���LQ�{n�ӊI;�!
y�g�Au�5q�߀AW咾�s*���^	;Գ��_��z����yS<�~�A��	i
�1�JլˎO��4T��Ç��
�
��.�����K�Oq]�6��J��Z���D�!�W�V�;����}8q#@�o.�!�q�nY�äԗ�	���(���ʏ�8Xuv\�l7�,v�m���.��
�=,L���d�
� ��솅$
+�H�І?.�u��*Ю�O����%R��tvܨ�
6!�����ݤ
+������nH���Q\@��h$�Ѵ����5�
 ��Z�_���'�uPx�@�`W��\�t��PD���ׂ+u��=�| �"8�B
 
�d����O��T�W��ݧ
x�Z�)u�*[�1z�?��
����
�Ծ�ЊTm���F�p�Z
��G�Kn�h�h���e넟P4�0Z�B0�3�?$�N��oM�y�X
+f�U���*6����6���ͭ�%�m�fw\W�d5���
+�	
+�$�u����*׉�����Q�MbORٓ��obh���TP�m@�p]jŔ<+h}������w]��e��W3$��8��ȱt���k���śʅ�gE��"h���+
; b��y�
:����1�t��P����ı&I���Ҭ!��l�s�X
�!]�
���~-�z���4:?����א]��
�#�
^U�B=1�
;y[�~r��l���R+�R==fD�V����z��Dj8Fރ�SW��O�3�|1ʍKڳ!]�w�>\�q7L@ٳ���:�kK�-.]1�w��FGҩ���8w�f���ёøyw�_�� �<e"JX��.����,އM�v��z6�ds�YFx���
+�Po�`������N����C�w1B<U��|��0�7��/H?���5r��8tD*���5	�Ɓ����H�^QDŽ
����D���Ʌs�[5�{�-�
+7�SO7��R�����2��5��}�Z�~��Y�-ސ�q��E'l����z�Z�Ժ�8zr�
EҢ��8�t{�E8�g�c�
�d�A�ZĨ����<PH��]k0�p��^u�5�K����������
� :��
+D3�ʑ �bF�F�H֯_��
+�8�񈺪�CC�t��Cz�&�H
�B�z�̗qۖ��T�n4^Y�f�4��h;p9�&NR�gZ�֩»,	e�|��XXU�˂ɞ�Ȇ��%�)I6�"�7��Y�m�1vH4��/n
lo�Ü^x?˨1��}Zm=��1DR7�[�Ė��cEX���#%ڴl�@d�R�X���rX�ഊ�uk6I tv���<?U��ۺ�͓;	uՆ�^��G�
Z�P��q��z�� ����{/�� �4��
�� ���tC��VsE�ݜ#��p�1A�A?����"^~x��6�a;��E�=���5e,���&C�0��"S�^Y�����kN=�A�XOW�&��@�\�z�ʠ6|#:6�:)g�7���~$�ɫ�3�{e��3+��1������:��kH�@r�a���fz�#�����w2���� �/(,.qi�Vp�Q��
�X9up�b�]����.�h�GD��̪ت��;����.���P���&���
�}��O�H,
��ݾ�V�3��[w��ӏa�]�//Pg����Sm[ʝ�s�d��&�,�1'����*P
�:�5�� �3
�c,����4� 8G��aL��G��=����ۅ���ɪYt�;�;R}��,�&��B��u+�"4�0�W
g5|�T{1k�k�BҔL+��VS
+[�/`��ڲ�+|��
?	;
+Q�D���W��hՒ]�3)E�˚&?K��ۣ�G�������/,�U��}?~ձǽ��|�
ohX���6�����Q	9f��68��+����\bM17��B�!��b}��BQ�
�|������@t=M�#�

��N6�Q�7�i!F�����3 z�B���8��BG�a�8)�(Zrҿ·�;#L��@��2�?��
�/��X�a�O�OPϚ}��m�	.xO"��h�#��Z0��f
s���r��bǝ8�n\8����;��j7>K$�
�,�^p�>�,2~�
3�*�������,e �޴=.��X�|n`��D�]C#�b^c.��)$�e"��\>9��Y�ԯ��
+t��Yj1溈�Zv[լv9�Uy^��}	�kd�����{6/���

�]����7�̑h�oV[>9��^{0��&T�/���
�D�>=H
ӡ�_�*�� �A�	W�j�B�1l����0k�W�v�J��;e
��2sF����5��c��7.)p�W~��ٲ0]�*�Ԃ5���A�?xZ���Aި�dѪ��NEЯ�5i�.�E��o�$�
��H�~�X:�q�&��*�ym7~���u���X�6w1��;��5@���*|\��ɲ�J�,5�#PrS}I�]2��
ig ��6�j�h{�ϝ�X;c��G�p����̎��L��'pVk�I��v�@2�=���&�mש�:�g���}���sa�W��4���Zu��+a��� �<VȞT�Uiڷ�*�r�"����d��O�je?Hh��~��,ڔ�2_���1�\'#��O4�H�?���vfX61�!*I+�K���n2����J����x�*��'�+S1�ʭ+
yR%��e~���X��o at m [...]
+J�d�`
�ʥ��l�����D�
�rߴ��ޕ,�����@+�}Ի���.
�EXe�������-cnh � ;�M�V�����[+-:�8-&�/
����� �2	�RvT��
��m��^e�D���
��|�)��-�Q46}ͅ�&7�F�9�\^U��f ��n@?~�b�=>�
�ד��^��3kz|�e��.P<w���
3��1�;������/��g�.�7;.]h�k�=
�[�D.'@�C� �M ��"(5Ay0ιo�ܱ�q�7�e
�C�%a���(in;DhatE�<c�
U

WS�;�?�̜���*Xc3~�u
J��_g�#q�*�i���
~͔?�S�2Bk2�'��S�_ŝ�����+��C�M�k��o=q� :-��P�BfL�
N��w�&��OW
+�>��J�����—�;��Ih���9`=���9�O���v�XR,�賩wQ�_�ko{#����)�[����!E��"o
���0�=�T�<(ΐG:�
��(�i�T�]{6m���~t2�뷙�~E��N{���CB��8����t����<��,7�sS�D��H{�An�L�J�xj�P�X�.�<&_$H�q�vST�����E� Cu.o<���׷�v6<8��Nt�.�c�7��L�PF�X�]��
���5�%r���F�9� r?�ט������P��s��a+M�*�{
bj��q��~�
�A
�
R�a6b�"�����L�����)u,�Nd��&û �x������D
RL~?�&�\�PuS��|g?ĉ����|L�ێ���NvĊ��9P�
�"�{:ّ�f
+�"?��z��{j�.�؝]I���|-
���	kS
*��dˉcM%0b��1����|�r$�����1�
�����Dg��@���
k�
w
�Q����l1gy79�3�ſ���-�wekh��:��mx̶�>굚�j���;Z�
�gE�>ݫZ	fDéW���+��
�S�Ȇ����zqO����3�<l~���-�F�|

�
�&|xP�o�)zr��%P���Ź0L�������
+���˪0'#
�+o�ϩ��M?Q�9A�B����S���m��+��5{W��
�>��`;��;�|dP�Yy�{�Է��B��#�#�%�P��OGJo�ߥ�ѹ�cJ��SD���z5���t��s�D�j�疲3����MF��T�D|��u����ȗ��r�dIO��&�92�@�	@��n�K4f��}h a+^2��
J�czpg�@RDy��x/��$�����������!��"f2����
\Z�>
����9����u��<3�qQ�u
$�!�+=YT)TlI���S�
�.�M�.X#N�Ad�h���+�v�����g��r�z��K^ӂD��X~�"Y����)[o.t��?�~$���F�~'W�h�<�+���fl
9;������F^�8"�]��8J
'9gX��/�H�d���h9�	A�r����� �{��XO�X+�,i�R�<���_y��
��'��XFݠ�u�t�h]�r��e�M�E��
+
��_���׵���4 �SC����wM�u���ȁR�#�pYȀ�Y�Ұ�tx�S	E�
���Y��gp��	Ԃە��)�o�d��u+�
��8��4-B�0ǁ
L՚c_i�_E
7N�����Ԭ�Lm_�#
�C�
��?�UbK��
]m�f�Nҙ�
7�!a�OH[O�4+M#�iD�
+��;,E�TBO���`e�MQ�lH�+
)�Mg��_{�;o�-a�Fyh�z	i�dL��
Y{�WH
Y�qp�Yg'#� ^�K�j��޺Fw8���ee,��"��ơt�*�R���'N�Q���^K���XkG
�SU��BZ0&�,Zϳ��wI�c�$�I
+1��nm�k3S�5�^�#����l�㲕�1�A5��R/J����1w۪�
+�tD�^��cF��;F
���ω��Si���^��$��
�;NXd�R&��8+��RtH>~�L@�q�H������@1���w�f��-FQ�V}�{�mVP��w��k�i%z�Y¡x9f�K�r�O̍}G�^TR�}z�D�e�u���_����\�ʺ���x�@\w(�l�[��u��
�sM����]a$��N��F�}i�l�۳"�B0߽�P[LE�[ve�&xii}�vM-#��Ē"���ߌF��D�G�*fg7`�
V�ymvT/�%`mmD���s3�\0�B��nK�N�9;
+�B��o��uN����Nj
�7�e3����~�Y�Y��Oo�)��\�ZnF��T��)�r8G��K�=��Hƪ�j.��S����?Ӣ=P�
exl��!_R�LA�D��'�}kd!�{�E=�01(���;����:�+�B<����Up`������o��֪pY?���CƯ ����;9X�5�y�|�$�-
�@�R��u��(;�B����5�)flw�u|7ڴ"K�T$���mB
�!���[��i�Z���Q3���,���O;���*
�o+������t���F�7��M�@H�4s�q�40�?8���j������D�8`���#g�Vc��|��.59�R�/��ʼ6',sL��)��
+�����ut�Nʆ5F=mc�>�_|
����l�PW�>�
+��H��ʑ�@�c�s�b{���\Ԅ�˟nsb+�U�S	���3�r6�0���~��
e��9
+��1��@��,�Y�+���'J��H���דq�}_�>��^^6�­�`�Xء{߯��\g5z[�����j����-8��#���>�9�;�f~
�8�c��.�
�
��)C���2�\V�0�=�Yn9�kN'�a����zP��Q��v#�&��
+{���5ۨsL;��m�~Ӓ����c�c�rԀ�Z.�g�h�-0
�]�[�,J�ӟ�4�j����'���"7f;��r�r�eb쾓=?A]�ϗ݊�<@����b�7\x�\��C���k��,D7��
Eܷ���*�9v)��y��9�a�\F�[ݘ����M���HB�!�AM�{�0_�����'�\�t���L�Vm���
ֈ ���ݯ{V�l.��~0H�?:�K~Q�Ha�p��"*�Bʱ �P5�()Z�.�؇�b[2p�D�m&¥W,���G�1^����̉��
�1ǁ�V�*���E�K2�ߡj�u��7#wD�
+�?��I[�[�2~��q��ZR�@����RJ��rZ���!p�v/����1�B�Hq��<�3�lu2�gbG��I,�q�����\� ��O���
����M&�%�JH1�g��iO���5����a�r]K���k8��ъ7I�v)|���CfcY�(Ѧz�
�����̈0���W�T3T$������:
+Kԃ��5�cl(�wV[���D�᩶�]rɌ͟�ӧ7RC<�\nfk���
߽����hK�~����S�~���5��

��Lb{Ev�{5&�ȝ��ʯ�7@��_hd�
��mL
 ,��đ�E��L9Zk�(+ߝ�:���R��䊳�"�_�SUa�6�&������
#48�[�3�l������{'o��޺�
e��M�N��~N�o�]^sy����i��SH���I(����d�3	��|�C
���>P����o�I��"�F�?5�9�m�
����	4��>�j���W47�%��
���v���
��
�j�
+��|�(���:g�X���8��7�C�������@
5�^�t|ẩ:/��٢��ձ�k1�hx`��s�}��vF�⛰3�uc��}XړuX�T����׉���v
+Zk4����F�:�t�Z�J����+:Ȧ�񵅼RY�(�`�]qu�dw^
+�Wi��-�@�o_�5J�/�
�8FS��|i��w�b�0���
�
+��g��.��
F��*�huW�A�_*��#����l���FAu"��z��>q!m�h�{_oN��b��d>[=�}��s�!Z�wO:��>�]�����wgM���W)A<�
'����%d���Re�L�6�
W�"j�����B�I
+���.Tb��,x:>�1�M�ߏ�BbxR��[��L��Jo(%�h��㵍f�'��,�����-�`�*\rC����O�V�4��kln@�b
PB
+f%�X�N�A9"B{��a������D�˩ԑ���V`
�}x�AB���ɚ�M���p`�j�T��
?������W�c���T��h���F�#��[��2�o�[�L����37N$(����'6�r��=�І��u�EO��K�����^���&�P[�&�\��F��Cg�v��b���?����kS��R�ᠤ
�7cQ�I�
͎m��tu�b�h�q~Ө���o���;�4��K��k�?A�4�LN��I �w��lH at e��e.��,E�"s`�V��#\���(�Dt�x8$Z��b�[���jw7�
�~��l�e�.mSl0������f]Ѽ� �z0=;�\�����M x���B%��^�g���:/
¢
�Ά�W����������.�^��Xj�yYH}��#E�i�t�
+~wV�z2���k&{��_��4z�8�Fj��m'$��"u?t��7������K��ī}�>��R{| �i�
%�̆Ob�?Q�3b�>��IA�[0|[n��e���`u�
+N�J�a�Q(�`�6��,�-=��D��# ��E�0V⯷�b���,���TD^G�
+�L���� �CA m�Ú�XM�'�6�� ���Z�?&I�TS�i#+6�p5{Dzr�0t���L�p��!<�!I6w�ͯY�V՞�����C9��~�@����)Ņc�{��.
��T��
�i�
)i�c8���5./@�\��s�H,���#1�����y�t	UM.�����U�s����u-hQ��7����f���Һ�M�=C&F�	�p�
+Vq��H8N����3:�K��J(2�"e�0*�۫2�YV�3�����bI1U��:y(x�hG���k�6HY�L�sR�i��ӔPc+�[Ya
�U{��{H������f�fa�wA�ˍ��
+��f�C��{�����;��J����f��2��
N�`��-^��s>+�o�>�qeJ�ťd�T?�����!�J�-��?�,w�����<�*b�l��`�	�pE��<t�7ڴ����buBQ�a�2��H��
+�6G;w��S���!�_(�g��#���j�dv�v�E%���)�a��Ƃ��哿�S
���d'u��k�4W���*mҢ\��ś{�i\�������,�138�Bnn
+����Pt

���H�R�%���hPr4���	�g�Pg��X�y����VW��]͵�5-��B:4+�v��eٳ5�K���
ꃵ'����`���Pi��Y�.
 ���|;�D�μ��j4�7Y���ɏ���`��kdnBrUt�ZhA*5�OM�������
Jʠ�.�U"i��$~^��&?�f忦�]Y�&p��z�o�
�P'l	U�h��d�4��H��'���Ə[�;�m��nf1m�����S&
/Ei�t䒖L0��pU��2|e��~��އ?�"���2��
�5
���h���7u���4�IP�1�&+� �5�����P1]놮�yN���ɣZ���%�e(M�n�֙�O6!rzYCB���*��n�Ь�PU+T^��<������c��D��n�>��m�S�έ�����tc3�+��)B8�*��/��M^�����G�܃���c������+׶�Δ�v��WŰN�C����
]�Qx�k��Da]�O���uT�$w�·�Փ��OW�nS���ڟd�*�S��(mnU�x{ [...]
+�6i[�o�m���O��D
b.;�����klP�p~�i���Yn�"1�,��� ��0q
�.֞"�Ôy��c#3+�C_��4j�Tbx�]H��~�9C�ؠ|C������7m�N̡Y�ﭙ:W!l�T��(��!�����e�*���� 8�D>�z�`F�
�yV1 !��
+ �'h��K�Q{�[�T�O��J�EMx�o�uzSc��u_x�s3h�����l�h�7i�G�G�·`�#@
tUr�Q�6��Ah���Pk����s� ��q�!�i%���s��
+��B�9��X^z�l_�Oe��h�뉡S�{Y��6�"��ѽ�Xd'�.#�
����Ȯ1j����7w
+�
�^+L�T���]�ZÌ�v=2e Uo /� �2D|]��~V�B�7ɺ @�
V�Q�q.�E��1����Z����d���U�T�G��ս4	6�	G�f���b�|l�Q?��jԩ���ի3�P
�a� �޺⦲���G$�m��ϣO�
e~V$�����b�݈�=M�CB!�)kA˾�g��t�Ȏ�eߘ����ۉsU���ڣ�)W�
�C
��5��a�bg
�X茁�^�Bۨ
+�����Ǜ��k���A���eޅ7����k�Jc;�r��g:��A�*���Js
+endstream
+endobj
+2641 0 obj <<
+/Type /FontDescriptor
+/FontName /BXFZOO+CMR10
+/Flags 4
+/FontBBox [-251 -250 1009 969]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/Delta/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/bracketleft/bracketright/c/colon/comma/d/dotaccent/e/eight/emdash/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/macron/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2640 0 R
+>> endobj
+2642 0 obj <<
+/Length1 1195
+/Length2 5713
+/Length3 0
+/Length 6453      
+/Filter /FlateDecode
+>>
+stream
+xڭVuT���&�S�!Er����zr����D�K��	���o���z����[�z�z��<g����Z/;��>��
��s���$ 
+�z  ���ή ����`nO�^	 H\
��v   	A1	�0>;@掀;98z8
�!�C!p'[�@����r؂]�0['�� ��
+��c�'@�	��@���A �����������!U7{@����(�e
+��2���hssE � ���Z0T-�����'W�vu�C�H�G���C�\�+�Aݽ� p�&�w����7M���7�߬����V��� �r�Tr���8y�:�����?�7��@��O
��
+��:���矜���� ��w�?�b�o����`�A(!��ϗ�j)�����P!, ��`>j2PH 8��A� ?�a~>7�j	 Փ �=
���q������D�
+#Q ��o$����PJͿ�J��	��#Tÿj�������o$$ළA��y���!CԆ��:��T
+��	Q�
��(P1�@��@q ?�7���c-�z��~gGian�Ш.���Q��Q����
�����vP�'��Ө
��&����
��j���r���C���=����x� �� T�� ����������!n^�t�L��;�n ���_���
s�l��~�X:U�ͅ�ء5I�ͻ�n���dt׊u��F��ڜ��[�[L�?�=c�uǕ��=���o�|�n���ӛ��h"6�Y.C�I:[�.�ѵgVG��L��O��u8�l�0��7�iz�&"j���j��!ȬG��Q
%��%MK�BN�>s��m��t
+��&�.�-J���؝�3�ʛ�t��_p�uu�Ʃp
1ŕ&�w����㗝l�H�r���K�(���̏��6�?�
Y�
-���kܪ��\��2}(Y�̽��93B�5k
t���.	6�M�p�.�j{�A�I��w^e4G~�P Y�	�p�T�a��/��F_d6�E,Y^}^6eL����O
���1<���5�bA�Y��j���J1
�;�^)�y�����b�;Ǻg;≘�
�횏��L�����*_A!�)��P�Hs��D�bw���Z
+���g�E'2�

.I�
H���/�
���gW�����V��Y��A�㓞��/ͮ;�=�h:��Lအ�iO��Z*Ɣ_�>�#��ď�8G%�״�Q�&��=6(��V�
�4�Y=*�1�H%��u~U
\&�:��g 
TVKҏpˋڲr般��k at O��Ҥ����b�
��5�5����p���'�
j��l�S v��
�K�#3ڞ>;�rJSܫ��K�<
Җ�4B���������[��5��xV���eo��+`��1� "�T���/��Wg��J��'\E6b���/JV�Y��O|yM�Ω-FR-o5F�����[��mn���ȷ��m�Q#ޚ��o/]�4/R�Sk�h�%9T7`� ��*<*
?v�	I���
0H�Z0
��
���δ"�b��Iǀ���޷bϟ���3W� ׫�Ih�
*S��?į{��{<�C5ӰmP�߼�ok-l܈%����"V���U��h�҂��]�(�������W�ڞ`DeR�VR�N*f�%U��6�Fw�A�
5�&�`��iL4z��w�U�����f�phW�p�ܣ�?��gS����4���x{!�V;?ۂ ���u`!í��yd��3*��62-�~���R��i�����A&��&)
F��^E
�ʣ�g{�8�~�Y]a]�xk��zR�,��
5�BO��g��;�XӔȲ�M6<�3?���L���5�t]p�[
��9V����j�z|I^(��w*�s̾�Ǘ�t7T;�
��D��]�$yߩۈ��0�/V�6R����.����+6!U"���<�����}%��<�9:@3��ʸ��<�K�i7�Z9��W)T�8-
����*��@Oo���mN��{���U�ә����(m�{� Q��4������;��)c��ֱW�L��P[�
�/?��w�"�_�Ѳ#ҋ��g/j��q�sJ��*1M˓`0�E(F�c�byV�ݾF�s�2����V��SP8]�db0c�Ѽ

�
2xy��c���KkkW��v����~
4c��%�.w�_m��H!EŠ2#��Dm/�'z,�ͬ�At��Ԅ��
����R�!�z$b�
H�!�s�
����2Qi�4�^JLܓc̕q�r�P�IZ�.��������W�׫�>��\vp��0
C��_B�Lh�M�8<�3HZ
+6�t��9)5֣�1 �.�[w>Ń��x�1��/�_}���@ߋ[��3�eT�,
?7���4�����s�(?(g��\��?Ć冯6M�4�UTm&�E��|~,vm9�L��
;B�v�+g;<
���
�_��I����\�
+��{'7���8����&E�,�#�UkDU���d��\�����+�D�[��m��t�ymaOH�����n�ȗ�9m4�Q
+��@9�WLn����7�a,lOT��k:Er�i
���(X_�
be�Q%�b�����'�p
#]C{O�
�+�%��2�9"�x9�L:�lX֗8�1(?|:��ܳ\:��T��p�:"C
�Z
+���}�-N��7�'��~�E��M����ƚ�rN�铵D�̀�Ͼ��'t�Ľ�|���=rI��좇?"5i��]�-=���&,�
F��1�Iŷ�������t���n!k׊�YA]��g�V\��OW��t"8l��:��lڈ��9^|�A:.r��lƯčtF���0ia���a��)�ä.�K�Fva�����ǗͶ;�pޝ��Z���E
+�|��N]P�g�:�@W�\h���)�k��u}o��?e��u��UeJ��nس�K�ip~�6��[����a��T�
m��3
�[U�-0�f\���)���pb&����

~島���i��*���+�hw|z��wF��ʪ@���?̰��GA��`~�fy1�(��U� �#����
��
=�����'b#N�Q����1�A�
3U���f��!�]�Ӿ��<&�Z�\��w��T���Ï����3݋��!g�W��;ת�@�p���̤����v����ՐŸ~�xi�$�u�(�0��u�V���i���IKc�
+�����v��Z��/-�uyC���SY&���H���U�@���������6<;z�Տ��Ax�β%
!Aq�͓�z���
>?(C�\��ҿ���
�����J
+�.�e������$$X��~�?K�����QѦ�����LI5�|��+�9a
�
�bh�,�y��K>a�kMd�n����uݲ�K
��G|�hq�
�i ���������5����>��B3D�
�nѮ�+����qu�Nwj��������u����7�H��w
�E
Uo���]�4�sWo<�26�a�L�͕�?c�$Z!�Y����މR��N��F�1������>��T�<�Ҡ�3탣��~~��䶇`h͂�R�"C����n9QyW����'�Qv���
���6��j>��T({���l;;7O~����z�g�o�f*뇵�O�^��	��8]
��F��t�ٛ�Uo����/v�O>;e�E��$Q��\�=O��YX 
�x��0ћ�/����4��- Ej�R�~�]���4���9!���!�8OX�<�W�61w�#�S
+2k�zCȼ
ٕ>G��#����e�2O�WS�k0t����8p�
+p���2t���ABX0��C�s�Ee#l�#�Ch�
����'��&"5�%w-��z[,��Ī�2��,�C鴰x�
?yI�����]�v����F��_�]���c�\+�C˥oj�)N9KKinaӎ�V4�wQ�7�̨U�K_��mKV̚+�S
B��L-R?�PQ�
/��^�Oq�I��C�).�a at XG�g͘n�$���]�I��`r,�[�����v�C�hQ�yu���A.�ٲ7�Q�`
+���1�����
�#�q{�E�W{^�r˵K���H`�ݻ�{��Cel�'�2a1��I�^�c���b��B�F�_�g[�P
�a>�غ\�z��q�&j���]�E�Ga�yv���4zڣ�c��(v����:
���ؗ���IJwa����uk�?s����ׄ�cɡ��<���_�����\�ɋX̱��FO�
>�d�(�l;�E���LK�
�φ
�
+4y�~4��
}�e_��
��
L]""�x��I�a܀Į\&!�B�Ο޼2���>�RQ�f����Lg���'���M2V���ʧpA�5,Xp��-�@�ڝ�!��c�cqbA���*���aL!��#���E��k���k�{^�,
[�Z��������|��\�&�%��7f�?�jpϼe������軲y&.+��~uO��'�ͦ]|����?
��I�Z���ez
%�<c�~NZz���-
dž�-l�Z�nۍ��)kS&E(��*A;��MB3��T�
�F��Z���zr�I�� Bш1y��!X�n5��c�m#���	�^�ވR��5/�j1
�&sU9�p��]���5�~K�3uM
��|�
m�ԛ\�d��^`�v&(`�!U�=C��d��H�EA�;��}ɻ�������	x9�ĺD�4#.O�#!)�Uo�6�
+)pj���B��δT��8��ƒ��F��
+k!x���s�Y�J����&e4�t~�j]^�aB��IA�3n%
'�>}vr
P+z�>�c���z�D�l�%�k�e���j�
+�#g�UY�߈��8,�V"{ȷ"�Z�W�ל7��������3��W3�*YJ�Ƨu�	'o'�\��&Þ�Bl���XQݎ8���(�\�
Ȩ�U�}��DK3W�0'E�#kBRH�̦UՈ�`��
$��0�Ġ���ͳ��k�N]#\]i����/ˎ�
	�a~�є�C�f��S�B;
+�j��1\b
���l\1����.�OZd����ZRS����*���Y��W�c>41��$��x��*p8�p�LJ<7�X-}N��``6��BL+.Ë@D�����$���:
�4{pc�
��X�H#ys?p��B��ǔ���I���m5��
��A7�/
<��	�G��,D�.�Ӷ%������6<ofm�&������ה��OW&���^.�v�r�kڪe�ee�W~��F巢
,�����U}�9�O
���nZVt�dL�^
�{�
�Y}] C����^���>0�,t���~�h�%r�³p��1�Yß��>�mb�'�?=��h�v��ĭ�`n�:	8c��g8J����)G{
h3u�ni<�L�Š_l+��}�M��-wC�l�۫��Or

� �UB���
+bG�ߤJ|e�i!
��)�,�����P�ݐ�ϼ!N��%*HnNV1�@,J��E�V�#��}��s
ճ��a��ބs;tt�=����~w����L{��^U����ά/��~҉������['���#5�:1l�+�b2�d��]=��|�\S�����t������7sgM/=�q�"�q�)@j�/"��L���'����T�.E�p��\�ܽ�ۍW6e��(������(�"cO�]'�S�#���^qV$?���\
>��)2sۙjY��!�GoW��n
?�+"�3�|�jOT34A��''}��O��mqC����U^��E�����N,�2uG�z� -��|
+���U
}ws�L�΃d�D�c��H�3
��ϋ
��F1�T8X��{yFۀ
՘��&u�[S/ ����X�AO��+�n[Y��~�g��Gvlʜ�M]
�~�&.}s��H�';˨{�\��W����~(yP��d�cC��ng�
FJ��~�H䄔���u��dr&�d�:�F 	��#������|.���K{���0�G���RG�g�^ɲVx�e�hh�^��sC�VM.���:.����^��hiO�
�n])T2�a:��(l�.0�'��d�1u�$1���)�h��C3l�������*g��+
��C��۬Š�N���R��g,kS
����	��z��@m��e,Kf} ��ux^PUnb{ ��/�/r��h㩭�		�ㆌkYD;
+�2�[eB�$1$^@o��b�{�	?����ս���h�&���կ�U3���O�ԟ�;>����n�j�MS>�6���<h8W{�q�P{��D�
!w�-S����|���5�-͂iY�DF,5�Y�I����,���`
+ɒpXCD}DZ���[�
j�@��dV }a5�,��T���@g�w�{�
�ΐb��+�p��u�.u��)��k�
+b%����
��s�Q���z�L�
+�z3��������%4��V�3��Y9
+��w?����?:;��<�5�ν�O���1>�3*�@� ETF5��.g�I�?���
+endstream
+endobj
+2643 0 obj <<
+/Type /FontDescriptor
+/FontName /YCYSPS+CMR12
+/Flags 4
+/FontBBox [-34 -251 988 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 65
+/XHeight 431
+/CharSet (/A/C/H/L/M/R/S/U/a/b/comma/d/e/eight/h/hyphen/i/l/m/n/o/one/p/period/r/s/six/t/two/u/zero)
+/FontFile 2642 0 R
+>> endobj
+2644 0 obj <<
+/Length1 1074
+/Length2 4131
+/Length3 0
+/Length 4815      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<����-���K�g0��c_*![;�,��0f�,C�]��";e�ʖ}l)Q�}�R������[��������y�sޯ������A�b�h;�&���C� u�D
��K҂��8
�@�n��p% ��T�� )I "�$��$%C
�����3R�Y$���1{
+�°�p7��=
	��p��8��DF?OxFpO8�� N
� {,`wB�h%~�A9����^����O�)@�dR Yt@����ܑVBM�'9��0�oqM/$R��S���'
sC }�[�vs���1 � Ǡ�]z��7(������Dث���p@��Sq�`���;�0�'��8
��o���iAB��X��L���3g C��&�����,��!��4

�
`)).)	!���߬��Ke�v@�H
!+�0�/-i3H$
�C �~��#�G���# i&8����y�r
+��?IA�0��H�%�E����?!�����R���oHB����n�"	H��AYR��i
%���
��
����pG�(�ѿ6쟰
)L�1��or2��7$y����'����
+H�eI�>���$�^�!i�޿��������BM
}�_LZ�"�*���2���Sg�!}����Z�#���p�=�=����r�KJmDQ�F޻b���jNuqz5m��BG�ɑ�}�
�����K
�2.Q-]�9���`د�%�#.u�x��v�_��o�����;�kL/j���e���^,�
ov���0Y�� ��[z?kO��7�|�4ŇW
H��ΦzE��'}�NM�

t��ԋ�E7y����d'
�P[g�вWnP
S>ο U�J�{����,�E�
J�(	��ƀ��9-/���]��J��t�񥍷a\�*��
�o\��
ި7s�B�JN
6�Ҿ@�w%�賊LjJq�������0�r�ʼnD��k0Ú�%?���޳��R�[o���˩|��S�~c�����������$��J�
���QqS'������a
t�h�
���xRj��K}
V�Y��M���a�>m��l�H���B
3XD�,��#��T=%59-�7-�|���j1.�$��:��+���>M??'�~+<
fޑ񈨃l@�
P�G��
��IA#��
�3]0j�J��Nd��!r:ĕ�a\⋹
��~
�>~�1�:�I�!@b&k?��Ĕ��0X3�)���{ƒ�-�3��
��Y^�\��g?_p��
��]4�_�(�_h�U\
+fI�q���j�J
�uu�͢���SE���[������g�vqR��w|_.����\n���L� ��|`Y�⣾
���w��}<v��2�q�	����kU�<�d�qB�&��k(
���ZS&�}*@�\������
?
9t�R�c:G�Xb���N�
�p�U�8���M;�����S��gobp�y'��-\Ey��Dʓ�1-
ti�a�@�u�ۙNE���^���;������и���e�ᓋ
+#vB�C�,��J%I<��&�������"z]�fw�ɑ�ֲ���������[O)����U�پi�-i��
>��݀n--D64
�h��� �������3���D2�<�8����<1�2!��2���3�����w� �������L6���a�sߓ)"����
�$�gdP�_�f�ތ8*a���@=އ�J
:���s��[iS�/NӏB�l^
+���s���R��� ��U�?L_�Hы=��^
���du�@>A��s����ܩ! uu���C�a�߹�0ی��BS|7������N�wx;,qC(jj�'?�U�s�
]���^���k�G
�JO�F�-
�ɠyw������?n�n�	�ؚ�
0HS~�P�����mmx��?��<�r��1��:��
`�
�W%;�Vo��Q)�C!��`�!je{,1t����o�E��Q�����f�;�_r�;(N^��*�
�c�T�گ���]�����@�Ah\
]�]�����o–ls	7kPDA �p���q�$ɧ���+
+;��~ȖYvs^�x�%��/c�a�0��w�0M1gGW#N�fkʫ����
+#�d�[�:�f:����l4�x���*�x��96&D�.���
?���tH���l���=�e�(����:��}�/����:2t�.S����
�
;}��.
��q��� i%�����t-���cD��8�XR�Ȧ�L�i��q� P��u�)����B�D��
g��k3ǩT�Q���%���x�~WT
+
�an83u�|�ȊC�+�6:��%��=���<�0����pD��|�����}�
�]���D�PQ
[���C�gU�c�
[�ty5��w�*�R�oF��)$1q�}�

��ˣ�����
+;V�S?	�A^��`�W~����|x�a������e!������I��e��c����zk���B�<��E:=�����i�b��J
[�R���Jq��ҥ�54��N��F�>^0��y�+7���O�}�pE١8p^�o���T�|%��%�2#��jR�-�@}�rs�
VJi�堽��!���**�ya���f,��Ŋ�f&��QM���E�S�7%b4{��P�7�����ǔ��7Fcru?g�gA�j��'+���͊OAl�:Ѓ�m^�Y�q��a9|Ĩ��-��7�ɂ�.��=�
+ͨ(�Y�
��ɸ0ϧi�l�Y�d�Z�w�yY���{
+���
Ȇ�dN�_m	m�{(�x���x��3�����'��Di	}��+fzq�Z�������:=4[-4���l��0�cn占���<��rj�I6�<����
�
/x�m/0�hr�wz��ilܲfWT��4Yc��9���lks"������ۏ� ��&��b|���D
���7

�s�ӻT��*���Qff華jX�5�g�Vg�L����(K#Z��|�Z�f@��^�FC.�R9����^�����_�S���f��[%t1%��Mg
�����QPa`k
;eJ��[s����Eկӿ#94�1�w��{
��vޚ\o�Q>���aO�6��
l�s'"�1H�"xW
�O
+��4�0ih�kk��n�.Au�W�6-6"_������]�f
I
��uJ�Ѧ�l"�Þ_��|~���
��Ƿl|�|m[Gu�U'~���6O
Z��Q�#��g��Cv��B�K�E7LCd�?–�*ĭ,���i��RDG� �8)�͸(ޟ����.q̯��. �1��C��#�s|)�㮜ȍbݗM��S
�X;D8v�#�w�L���3[��zG�>�);
]1�����kR�|�(�d��+�%�Dl��FGp
�On���*(�&��a{L�cT�l^6����nG�
�
�5��Y3m��Gn&���5X��R;��jz�2sƨ�K/sD�`�N���SQ���_l�bK����
g��:��ʚ�'���p���%,���7jh�0¶�x6b�ɞ�))�
+�c7mw����M<�ZV��^�e<K0*��Ӧx{�m��A� �߶o?ǭ0��M�^�"�J�^�{O�&Q��c��ߚ�#E����,7:��U�՗���l�Lsm��D�WQ���3�
/�v����o�l��'��������4��9qb�v�=�.y�z.A���6%;a���ʿt�fAT���:��Smd�'�W����b��
�&^����D�x��ܷê�'K��~^�D5Q�/�u=�?���D<#�!��bie8�,*�N?Cd"����Ot�
��k]����(M�$�bz�[�L).4�{%츩��ǐ �@\a��9�ձ��r�Et~!_I�����ƸI|�]NR�S�u�^�c�B,�4��#F�|V�waUf/�]GM]�v�.D�*�z��,����ɪ��ľ�zP��eoW� �ˡ
�KV�4!��d@~���w��-j�
+ړ�YV��W��ݸ��zxz�\��u��i�F�QHW��W��~[T�6�U���W���|��� pq�l�׭|��޸�WV-i)ov(9	�R�*�e�<�D�:�Ŋ��z�� r`4�kͤ?'%��n�`�:��R�
+�RX}NY��LP=7}���gLވ�:��3���H��*�H
�,=� :���i,�M��5�*��3�}����[��9��8#�ջ�&�����áMǵ0���g�r9��
�Uy0
+�/.
�͔�a�[5mS�K���m휌#g$=�I�s%�0�s��̏���y��������D7
�+(�����&D�y���6����]�j�
�˸�*��

2�R�M�B��>��/����	ѠBM�]n}WW�Wq�?X�����6�)'a���V++[�ȱ�X�SPb[rTv�6�+��+~
��l<��S-���~��O�s�>

L4�Dz����zF���+a�ٶ՗M��e
+�ׇ�� T�O܃��#��8����f�cO���<�
��A�!��Ɏ->��ڑ툇q�^8
+e6P)�Smo�Q2�z��˵���M
���r�W�B�7g��ioe����\�{=����5�*��z9�� ���~
_�i��B/�mQ-��	��So�d޽�e;�c~�(U�-�(ڟj�H����5���h�;�w�p���W
P6	X	�ɜ��v�|]���9�߭b�L�L8�lc�a?}N����~eO֯��+w���S���7�K
zt��vh�sTp/}��iI�0~���E�U�q���8
+�t�9H*]��;j��Ü�}��&���v�\5b�����ח����FO.
�G�� 
� �a�
+�r̟K��~ꨳ
+�T��/�@o۾�x�pI� W�~���Y�����R[Y���^+k\DױP�S�i�q����(��a��m*<H��{��g�l�
+endstream
+endobj
+2645 0 obj <<
+/Type /FontDescriptor
+/FontName /BTSFPV+CMR17
+/Flags 4
+/FontBBox [-33 -250 945 749]
+/Ascent 694
+/CapHeight 683
+/Descent -195
+/ItalicAngle 0
+/StemV 53
+/XHeight 430
+/CharSet (/D/U/a/c/e/f/i/m/n/nine/o/parenleft/parenright/period/r/s/seven/t/two/u/v/zero)
+/FontFile 2644 0 R
+>> endobj
+2646 0 obj <<
+/Length1 757
+/Length2 1171
+/Length3 0
+/Length 1706      
+/Filter /FlateDecode
+>>
+stream
+xڭRiXSW6�
�������$�HHB)�NI�.D0 .��n��KVZu(+* *��X�(��OUd\�"����eX�ED��3���|����{�{�
9d3�+�b 
UR�
�
+� ÙN�ml��H	c(_��8����|�|�
�Cw!� /,A#��qJ`��0Gbn<$��"��qP<�!!`3&�!��p�N(� R at r5$q&2@�� ��(�6���� �
,Q%�o�!�7��m: ܤC
�@�DZ0�O�p/�[
�}T,����s�SW#�?�X|�J	�A&���B�zg-�����]?���\T�@���>p$	���8+B�<���&���-Є<_oa����o��`T�I���
w�f��Ƴ��I �������z�۾`�7*�$0*.,7 ��E"
�ra��n�Q	��$�/�Ŕ��G����8w����
��fZ�R��)
K�Me�2 Յ��a�]��K�?L�J.�P�����y_��x�����
�xC�G��Ϧx��-u$�5��UWۮ��u���� �����7��F+�Z&�]�8��z�g$U�}�}fP
=��|im�x~��qeB�����{/���~
�y�PdI}�hó�{~���>�kQ�
�
+���>�Hx���L��tTvv�kF"���%�-��/2
j���azժ7�'���6��ۏ�zK�ࡣ�`���gJ2H���7�*<
�t�

.�14���W&�{�;jz�{_�z��>�<m�}�h���Y��������3~�[��9w��3,4m�e
e]�3�*d�j(�_�wk�:�Uu�/�
&��nv�47Ԗ~�<U�
+u����-Ʈ�Eퟕ��unh�����UY�OnqNS5k׭"�m�]ܳ��u��
�S#3n�8���:��Y{�襠�A��]��U���"����Ů\�#�X��

:gGj���V�����>�.��a!��ݛUK{��s�7���&�;�U#I�_�w�:�ԧ%�F��\��;3b������fr�X]s�qy��'?�Nքn,��W����i?�x��4���H�qQ����ZC!�Mm�S�r�8ʿ
lr�����Fu
l*��3O$3�R
TM�D���G�3�mY]R>��)P��d��o܆���
T|Ei��^�����C#{����d���2k����]�O}�
+9�WG�o�״d�C��o�z��5�d�3���R��
=q���sUD
+(͜Hnˎ�L��o�Xc�N�d���/�y� e���8
^,����?M�:����_�Tetf2f"���_P��
9"����
-Ru9�uɚ���*�o�bׇ���;
�5A����.s_��
��'e���ԧ��¯!~̱�����x�6$;�	��r������:�Qg3��Q'O�6���AO���xt�, U��������X!-���:�B"ޘy>_M��kH�6\�ת��t�W~:��.�nsK�ȊH/9�#�jdgbд�ϝ�`q�oT���]���
�]DZo^�x�+�B!�]��u����G"�ؿ�.��/nz��ZWJ��&��,Q��,f����Sm�-����l��Ն�fL�f�è[�tÇ�
+�9��Y���v�qh�p8ox+3��1n�A�=�������.��|4�V�p�z�c�����%�~���[���S+N<�2E�d���D�,�3�;<�_<�z�b.��5
��L�e|V@��
�0i
+endstream
+endobj
+2647 0 obj <<
+/Type /FontDescriptor
+/FontName /WBHEWL+CMR5
+/Flags 4
+/FontBBox [-341 -250 1304 965]
+/Ascent 694
+/CapHeight 680
+/Descent -194
+/ItalicAngle 0
+/StemV 89
+/XHeight 431
+/CharSet (/one/plus)
+/FontFile 2646 0 R
+>> endobj
+2648 0 obj <<
+/Length1 1143
+/Length2 5155
+/Length3 0
+/Length 5888      
+/Filter /FlateDecode
+>>
+stream
+xڭSw<�k��[HD�I���K�wA�a��0ft��Q��
�Q�HD�=!:�h��s����{��������z������<i
SA"Ђ��`)����8 |D�ã��A�p$B	��I���`�<� �Ť�%���< E��
+���Q��G�8@����A m��Ӱ�� 
�vp��>@��`��	����A�S�� (�
��9��?��#� �h(��!O�g
+pg�. g�D�� �0{
+�W
�s��a���*
���
��(����8��
��� �H(
��w�	�/k�0(
���:���G8�� ��(��
+�Ճ��
�؟<
��	\��� TW6��1��s��� p����o�?r������`��q�����*���CB��:�� (ć�8$
+��(� ����G Ѹ# \K �H�� ����DB ��o$
 �F�L��n�@�o$
+ B�h��

����0w
n��eDq��pO�oW�
�A�M�A8)�?�$ ���A  �W�7��"��q�n�ø�n
���mR���=���9us�x�C
g�7�!܈~�� ���Eq�hG�7�UG{!�q �A�o�{���r" �/
�W���-�����8 at P����@\��0(ܭ�>[܆���q�
�y��(f��v�aN/#J�
Fˈ��+84%��wN�_
�N�w)��t��XgzV�A{}�x����GL������`�����k�6k��YM2�}Vݸ�C�o�6N
���/�&?.|��׳��wG�h�t�
��ܳ�+3LL�T%��Qdx
�0�u�{i�H�u�s����@�H�f��}d�欀,7��⨹��˥{�J�@d��2�zJmŕ�B|>e����$�����+�:�|�9XYzU���b!"֣n�w?0��O�U�����d��
+�P������{�U5q:c��+
a(��2���x�E
ܺsP��If�f�C>�|���3#Q8ŝ�t�M/
��R�2��|M�0h�-���2�
<+tX ���cB
+K����P�ҩ�>燽���]���<�ؾ06�^r�񷿂ElՋ�;�d�äzb�/E��
	�?#�[�vϔ?�
��j�]�u�
��nJަ����-P�/��U��|}
���
G��r�מ�\]:���SO1���&��v����r���A؞�"�/���}��U��koK��r<�s���?~턮�ˠ5�fT�D0_�j��u^G�D�:�Y�����@�Ÿ��Z�qU���j������
�[���䣴��ȍ
+�e�10~��H�mey�������y���
c)������H����`�
��k?t�ZDo��9���_��ս>�c�B�t��g�`v)�})�q��{{Ma��v3r���B�̝X=[Dy٦���R���>B��"N�H'��\�(X�.x��w�kNXL���[A9�sZ�bDv4�c����RlȩM��9���}�/U-oM�9ݫp
#W���M� �Z�,h���U��'3��UP(G�ՙ���G�Ǩ��ɳ�Fy���+����R�¼Ǭ�Þ4�
x��\*z�O��=�r�|�4�o���H�?�i����xw\H/8!כ!��oYC��3�b]��e×��^�Y��m�¼��_�O](�Ύ�����fk婕�������aRd�g��o�so֎�"1�q�<K;�Z��"ᱵ��^s���Xcm�!S(�[�
+|�z��㠆�A�q|Pa�O9j��)���B)��w~���N__nK.m��J�������y�׉�7}	z<y
Hd�O1e����J������M�J��n��䁄��A���u"�
��<��B����۫����uK<E�g+l�|�x6�[�1a]��Z/:&ښ6�;+I*c�N"
Bg��Jş�Ϟ��t
6��tU�ݠ˷�����a�[X�5,� ��~�$+c���iy�G0n��#
WF�I����G�6{�x��m�2�C�����%�c{j�kn�SYZ�1U��/��

+`r��̨=����T}�HW���o``���#�7=�
[-��	^A2z��o��r
+�Ϥm~v�P�S���&�=|KYr���0�\�_�$�m��;`���){j�/�K+�_�S�<��5s<sos&yz�����ځ�
%��U�̓���Tn�,����
��K��l�� ;�ܗ���v�kc_�V�3��}�8TK
+�A<�S>k�n���D��e���#�."��aAOv"���E�X��[
1^�*��'�l	mQ	�V�]�U������h��=� �͵��� �&8��F���'�A2���$��3�i5M�4��(I���ß��T�)>����x��B�(6T�S
����X,ɤo�mO��3�0/����)9��Kul=r)T����y<Vt��\�\[����N�6PmtI�u�k�� �j"(*�����=��)��S<���ЏX��qڶ�.���\
�w?S.5�8&�'E5h���\�VaVg`�f��mʪ�);�m�+�UX�x?8;%�
+��jՎ
_�ܫ)��<f�����t��
+d
��܊W>�5?:6�C_-�N
+y���$���oM�H�k_�����_��m�|�p������lS�����`�>��.$
+ʗ�|j�T�C6<u��2�W^}�bO���[���E���|QxX���L}}_�ᆭ�<�ު�#r1�����!m
L���:L�w���c`������,
��]:B�ġ>��{&���3b��
�.�X�i�^�K��.=jzR08�3 ǧ�+gP^b����Z���:h�� 8b���/ݏe��7U�
+ ӝ
G�$�c�T
+ވ��8��x�O�*�k��
+4z��$:_r�c42OLW��
;�����0{���_i�B��)7�U��S�}45~I�#��6�&�|��ɴy��˟�T{���H%�[�N^���0W�'�l�yQ�+
�.�"����Ct���`��W�i���;�F��nr>�Sar����?����n~'`�[Z�X<{�4���휲�&��jQ� �R0aWf���*f
�"E�J�F��<���Z��Aյ��B���{c�ϰ��k@�v��Xch��qȸX
�9����tV�<����71���$}Ip�a
�)�

�+�p���#�uR;�F+C-��"��m�$F��
+�XiVK�>��:{�(9}DA�J�x�w҄xt����׳��j��[@�~
E��^&�p2����ֺ�/��!�ʿ��Z3J4���1Re���
��ܗ��Ctq�E,��/!Ҹ)I&~���Ć(Τ�h�=��]?XB��*��
!Y���wG��E��6y>����2[o��U��s���h�:�bϣ��4���������ޭ�d�h�Yc/
˩~�&���(kY.�G�ZU�+�K������g.g�	KN��w����Kv:
������ Nūq�7��O�o�P�/�
NJ�xM�Y�M%
�ƏAI*:t�!Q��>������3��I��*Tw�j/�n
=��m�3�Dj<��~ft[P�^ۦ|[|��m�Bo[)�#f�
Wk�ޚ�5
�;��
�=k-���[C(���-�#V����VC8�������۷S޸V��n�CLc���-�i�[�G�x%�T�z���r�2d�
Q�5��9	�}߄0����qT�6l�YD����-�hb�E�B�I?��n�k�
�]��b]�#J���k�Ga�V�-� �{����'s�f�<_����ʭ�9�X��m4��Q;��%�؃�������ԭW�����Y)1��J���oAu��W=���>l���)���oXR
+
+�<m������@!ժ���,[V'o�M�r�8�&
��BWH���TȤ2����Ԥ������k����n�>h��_,��[��
6t^��ћ�� VI'��
�*�OQ��hќ~[�e��Z�JB؃O7i����g
+��-+TEB��U�љ@�.���.8$�eW6T�X���@
ѭ�%<��]�>�Zۋ�Q
<���P��r�\~��!�
�#�s٫+m��1=ķ|T�B�W�d�}r�m
iu̝�]���
�/�S5�zFpRAd�#
+WcIUq �P;1A�'v/�T2��.��I��q�h����樃�h�o�^Y�䭘-l��)	Z%6������BҒ���t�xĠ9,�>I��Ҿ��!��r�jl �����//�ۦK��K=�$�C��T���w�e-��0��ȚH`=>a6��c�*�Ll�UEJ��(i�
���ؿ��d<`�-�zFdޱ�fi��˲y-�N:�jP� ��|�$B�r
���� z��#�N�\ha����S����<
��̲կ�~d��;��T��L��}�D�
,�� ���
+��������n�}�=���
�wj����z�c�
�M���h�
��;!b���2mW���'�Q�$�>w-�M%����;|"5�̍7Ȩ,����{�%���@�ң��8�	����C�ғ�)�v����z�o�
����~�/���w}��#�9Wb�Z��Uү��5�-2�x�w�
�
n����$&��Ze\���dv��Z���f
���jD�u65m�<�g�X��v��R����Svż`���'�&J���\'"u���/q'�L�9�D���~�i�=1{��U��\52�c���p�5sɣAg����,	�^
4�M�
w�Ut>BBhb�i��	�Y�
+���
����N�"7�B�.䎼�Oھ��`����N��]��q�Vfzdj� 
g�c���Z�I13	��Hƚ9���l�~�.�.
I���
�k愊T6?�|Nx�
=��;�/c��X��~���<�q6=0A���D+/Z�9G�m>�;�Vj~�T��
��u��N�lA��ҭ�kx�������ZtM�k�����_���2aO���\��[z�0xb����G� >
��q\��_�
d�<�]���u��A��4�GKo��BFJ3�-@�Jχƀ�m���S�L{�3dx
+�gh�<��^��~Y�2�W?v��������*-b��\���Խ:jLS�u��0�횚�  �s���4�s�m|y���t
��������ǡ%$7#ks^��mZ�~YI+�TR�t�"���`����xM�3u�=���G���
;���!rGƦO�G��U�Ӕ$��1�>��5�m���ӐN)ۨw(^&Pq�-0~�zG���W[%T|���X���`�+�+b���h�b �@�g���

V<<qg7—n����ό���P���{穳����4�M-�Yn'
^=k����~�ᝁ�!�Iԇ�,7
+�X����2���E����f���]{�ꇽ��
�5���rC
/���Lΐ��P9���\OȈy��Ȥ	��y���.�����+A���j�����o/�$
��Xj};v��^4��1_/��

�5F7��~g���Eф�]g��kN��:_'vU;+��xظ_m��\
�8!,2�� �����/.��q�0:
+r��a{��
�7��9�-��=\M��k�ӰIz�:ºi�l�Ү�O��[�o��A�+9�Wt�j\�ϰ{��E6�c�;?�^�
G
+�6Q��~�U�M9�b��Ohf���[�z�ҝn�������/�
QR�NZ�
��E�A��Ҍ�の{xoI�@�]��{�J�����<�[/mV�m-�>RG��u7�v�|�O�)A�ZW	p�������۞t,yS�k�*
I�\w������j�= ���`Ž
�nZ� K�.>Hk�
+��O��4
+��Gǖ)^e�蓼������ib)R}W
X�D��0'בvZ�2mf_���C�V
n��^���d��~�˾�/ �~����)I�fi�pӓ\BRrZb������)s�̷qU�t
?��7;��?y�
+endstream
+endobj
+2649 0 obj <<
+/Type /FontDescriptor
+/FontName /IETANS+CMR7
+/Flags 4
+/FontBBox [-27 -250 1122 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 79
+/XHeight 431
+/CharSet (/M/R/S/W/a/dotaccent/equal/five/four/i/m/n/o/one/p/parenleft/parenright/plus/s/six/t/three/two/u/x/zero)
+/FontFile 2648 0 R
+>> endobj
+2650 0 obj <<
+/Length1 1177
+/Length2 5280
+/Length3 0
+/Length 6004      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\�[�ƩAR�)�f�	iI�f��f
��V�n��n)E	�p�w<�y�������/��k�u��}ss�>T�!-�H'� X,
T�҇ �B 2nn%4
�A ����4,%*�� E@@������NTB�<�[
�O��/�$P��FXA��ZP�-���
+� |��B�1
B@���
�@}�3
�
+�	���@�
+��� �Ȅ���d�J�
������
+G;�L�p&oqaH' 
nM&���Ղ����wrUm���
��U�#���?�HG�
�j!ap�ӿ�F�i�a����@
V
+N6p ���Y���"0V�@k��3��8�	�o���eA����CME��n�%](�	c��'�/�_
�͸ޠ�@S��	q�ߞ������p���FC=�ps�#q��p��݁pw�_a!'$��k���&�u�����_$)V�M8�����N	u���l�[�Kf�����V�
+��@0P���Y���@a�?P
(l���8�<P�p�?���q�
�@�3���9�#�F��8g�ߵqZ
wr�[c~G����=���q
D�Z����`�Q� η��ہ�q�p�q�p��"��
���>EE�����PPD
� ��8��	�\�8˘�>l�
���������Vds�H�;Av/kCJ|U�ޗn�+���h�m�h!���w(
�|z�C�1�,���`����sD��ް�w��1�S���
7��S�<>�8����j'w��u�?
�$��wg��l���)|��ȁ�n�Zݞ$!i����04��G�C�:�iI�X�uB
��h��](I=��
�م�G�
��ps��)c�������iG[hd�:�{Tދ���3ly���{�Z��d�I��x��J�͸��Uf��
_������
7���M���rS�z�
�8p��T�=s�%dz��6jʨ��L�\�o�D�X먆#�5T������V1��wB�3�I���t
T]�y`!
+Ղs"�2Ro��o]���Rf�nO��f"�^S?`{��?��h؈��"���nB����(�0����rb!"?�@s��9�/�n�nK�l���+������z�v�������
��c,����y)o������P�R�|Z�l�_~�C4��U��5.�����t��;�gHiL��i
1�Z_9��Av�cG����Zt�`^���o�
zIv�w�o��� QW�ԫ���ɚ�r��@L$��G
��z��h쬼��������1�sw>?
+��[� �I_<�&p��_?t�����(����U�Ǿ�w��&PJf�
uk�6����4��H�*W��mŰ\�d��@JA��E�� ��TO��-E��-
+:�p0��E����Ȼ
�˚(&^;OGž���3��@��^��x1�+�Z`mE�|׏��>(�RY�R�f˨B:Q$����Z|��\aK�
�<��}8����c��g:��*�,������c��3|�e�_�1�Γ��Q�:q����׽�y?^s��7LI$�6�A�S�ie�nD�]�E����7|�:��	^x��5˷K����ܝ���o�v�43[���${E�K��d}�D/���Bv���SE(����9
��f,�	�ԭ�s,ɡ#�i镇�h����R>t�K���Ob>��h�
oj�5
��G,�?��M�Z�%�q	����WTMA}X~���������������G�
)?T
��n��_�|t|x���J\f�B�3_���3X�"Iٕ6Igd7Ǜ����l[^z���-9�o�����[u�!�电�
+)
�K�\b���T���{;l���z�WB1�*�B4$^⭧g��'fY
�x�+��n�\�>�	\6��]-����0�W�)�h�Q�Y+\�
ԣKj���;_�����c����Ԛ ���7HK(�薿��0� �N�;"�T���-}n���s�Z[y��,�/�"܊u���p
+%������e�\!y}{�
id(��
�H�Nm6^H�� ^h[�E�B
:�4�
�	KO��)`d@��Y�.��5J`�
>�=WGV���2���2*���۾��?
Y�b�x��.��K�V
��
�MN�k���_!�fז�����8��
�v�
w�!�
g[����)ׄ[E�9���
S}���˶T���5��R�������R
J�ݐW��)�P�j�����L2��	��M�OA��q�g�	>C#!ݝ����SPP!;{� ��:�Ƽ�m]�� L�S̐8�ԟ�8�����t��l�g��� �)8���Ш��E��9�� ������;r9�'���ai�v�wz�n�0��z'� �6=?䟴ʽΎ8��ݿ#�����
�3�Is_����
9�B��fBG�]�-W�}P
���3�.���O�N��l��BsFF�8��t~�|�Pe�
+
6�
ۚc��
ӻ�������3�
C���̪�S�r��vkе�F'���q������s6� {��p�w�~K�K�Jo2����s�T����)b����ym�i�=3�Fr-@|,�(4��,���
���FK5�1������T�V�LD��g�����o�r��;w����7ͱ��j�lX��"ݸ!��dᷛ[b	���_Lxy��f��
��}�t1hH_�
|^�����v��j�sDž����ks�1n�}R��R7��Ue�ﳞ�P��4�G��9�:�V���_
��'�κ�.l�P-���)-jzT��L87kT!��³����o_��SDH�*����2�n-k�
�O�XF��p"��Җ�YO>���	�
+r��
+'�c�����$
@���+��i�e���'
�*�J�Ue����~k����V�0R��Dq���S�֜�{���E���+��=��
՚t���
�#Y^
��B�^2�&����R�U7I>��6JL(�b5�$aZ2���E��΄�3mX�/V��1TqUo�Zc��HL<�ۍ�8���Q>
_#�^�R���e'	����S
*ILXM���0����d#~u='���)�M�)w�f�	_ഄR����ݳ_�X����/HR��t=U��R��2h��YA5m�r���>�E�����k�����n�ՏW��Έ�w�+<��X3��~3��%D�%�U&M8�1g4����L~}k�>���t�����kf��bA��B�W�Eݹ��6����fa	C���`����{��i�t
	������_��T,����ϼE7K��(c/��
+EP����{(��e�LV/Q��g@��1�����)��<�����0�xg^��~��Z��c�TD��'Dk�~�����
���ɸ���2���7O�~�Z#�B����cb��G��t���b�[l|� �5���g(�I��^��:
@����t�9i����t����m)��ͱ�갅��S�ɕ�
@��jn��YKZR�����n}��'�}u.��D��YSI�[������!+8�85�1B�Q]�X3!^p���m
��Fe��'-���4��+Ɣ�
�%x�I���X9�
&�s�`���9��ш�xNW��

G�c;��`]�j����Zv��z������
�,�H��wb��~Sf񇻾B��<�U��W`k��
�"���`Y�����4���*d�G��g米�_�>[eL��;"���튭\�+�`���m�Ǿ-f3�ʋ�&EQ���$Sv9H��a�;��7��ok� �!�J�Z>��`f�
��4�>Կ`�`�{nf�}!���?Ҁq�7O�S�?*ۨ��3������;c�^ql���
+3��d����
{�5䭅���33��
w�P}�祴T\1
t�ԌtWJ|%ù��Q_ЖJ~>��U
�h(Զ�nOq�c���N{�!a��v��x�ڒ0�BǾ�q
<!��
o��c���R|̂���r
;T�h'�g�����?	T�_F�
����]�{u:w���q|����)
+Qf�PI%Q&
U�v���զLyFP
�򹡓������{���U��|�Ĉ��H�7F�?8�h3>3�������6���`cK����Or�=�n�d�ޓ��gЊ
�M��S��1
�8��
C̻O��џ0[;�Z��:v7_�hbˌKl�4�cޛb9ȖJ���L���Y��ר�6j�
V��}��I�
�~�>k֢�U9Yq
�]4��6Tp�H�CcB�Q�A�I�SUY�mI��)A��E�>�
ү7�a�O��
�G���
K@����yW��h5E�#&��;�!�%[zO���nFh�
7�/�Nh�ˡ�9 ��j�E<�y�4�'?!4�?�4�ݾ�O�FP�*-\j���Y�D��O��=
�

+�
��Ѥ�S���A���
�;g�o��Bh\F�*
����4��dG��>@4�@�r+�.��;Z�F�tp�ףM2M���q�E���aIJ���reܣ�~f��ԋ>27���
X��d�qݟ^e��!�t�,F�#h:D�I9�y���Jې���Pe��mM����@�b�xe��Bؓ_Y��Qfqr�i��@F�A:��u/>ע_ö���V��3��-�|���|<5ß5
 ���o[�3яۨ�siB�99��b��RĄC��1ޔG"�g
Ʌ]�!��q����m������������
ν�X�“�'����u���,����
��
�`"k��c�Ԏō���z3��,e ���1�L�@H#h5���XM
6|���i(3��n��O�T;�&�
?�@S��L?��NT�
���j`�7��\�^y:h���
��4`�����GՕ������f���kq��jǚ�#��	�%7l->	��"}�ld�C@� ���WF.Y5dܪ��L'<7�™u=j$�����vf�}�E�e����4
+>6
\)
+�Qv
b���A���{�#r�׀U���8���ۧ/���v�he����#��0`��
���p�6�
�m],��'i����wS��z?�љ���}B{���6��3�I"�!�/d�3,�C�y�����轆��B=-ԏ!�
�7�p2^�@���(�||�V�ۦF\]��c�by8赕���	i��7���QbwRo�&��z������~�n|���U�󞉑7���Ƴ|�
��o����xz����M�`�A���'Y�eR:��U����%�S�]�[1[:,�B��
i��
�gW�P<A/���I�����W�6�$���ǟI�C��0%SX��Vi0x	�ô�zJ�Tl�=G�C��l��#��+U��͖�8)����k��c�Eȭy?%8;m�U�hS�F��O������/y�����ʸ��T^
|k����#��s
>G�߸��Q������1?���5�u7-���ou$�O� �2O3��_u�%����yo�_5ܴ�Ҝ�^�K�"��h=�N�v�V�����"�~��|x�z���c`|�Ѫ��	x�f�V�O`/s��==̳H�T�e<k�^T�d}\�҅��&�,V��M��"�3�n���y����
�7P��
���u�ז�؟�KT�&�
+���A(�X��;�q#�
z�Ֆ�؏OQ,��P���w"g29��j�Wm�Q
���t4��W
ZW���0
(��]�0p;���u9yr��E�i46��ʬ�f�άL�J����<1��@^=�ℱ���$M/ȴ��3��畎��d���qbS�V��Ì;.�>��4E�IM�L�IO�K�h�?
+���yԝј�L`k�x�Ǐ���UɄk�o�
�$o�v�����e��M|9�,��vE�8�� ��3����c_˩��v�7�4(�i��z2<s��}
k���lW��4	8���
 W�?��LDj�}ȱ���-n_|s�@f{;wJ�_�����մ��)�'�{)������!T�j�
�aC�Y�}�AC��[v��

��^�
&����[�
�S������s��睴������=Sm)��b
�����90�?k���
+endstream
+endobj
+2651 0 obj <<
+/Type /FontDescriptor
+/FontName /LDWUKB+CMR8
+/Flags 4
+/FontBBox [-36 -250 1070 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 76
+/XHeight 431
+/CharSet (/D/H/L/a/asterisk/b/c/d/e/f/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/period/r/s/t/u/v/y)
+/FontFile 2650 0 R
+>> endobj
+2652 0 obj <<
+/Length1 804
+/Length2 1837
+/Length3 0
+/Length 2386      
+/Filter /FlateDecode
+>>
+stream
+xڭR}<�kvB���'�F�b�
�Y&y*oyZۏ-���[楃�R�)/)	���Hy�pQ4	E��P(jtF��y:�>�����^��{_���n����Y���
:[�ĘV�n4�A���6Y�@"�ʠ�l���p�"�З�F��hS}��b0#XT
+�b��$2,A�D��D6
�� i��D�H��F\�:�W0d��d$��T8�S�PԒ#[�0�Z&�0�S� +Xb
+�"1�H,�tZ@��('��-P���a���;Ch4'b���������o
+F 3�
� Gd�����s�Ԑ��Y[6�F%Y��i ��C}-S�wR�A�
�M� ~DZ0�\�䟍H�[��rqw��@|��e҅H���#� ���^ƘX��x��h4F"����?=fM'1�T�d-�F ��"F@%�!AX P�d0
 �%�QH:�-i$�D~
t�S1��(p��
(���P������Kz#����d�G��z�X�� ����!)�����
���
�Q%��`8H��z$|�!^���h�]E�:�������x��A�����NwP�r��!j�R�[��;�Zi�F��
+
Tt.d��M�^���h�iiT
�:�R�9ʬBL�k����
+
�1�y�o�d
+�z��b:�E�3��/ҡ�sj
΂{_
q���Ɔq�!�o]�9
[�6>�P��s
�����N�߳(�\����N�C���ӛD�I��y�ٴ;����
���,W�/
+���Ĩ
p�ҭ��[�>HU�B���%r���\��ͱ�#
a�����܊b�g�����&֙�;�k*���s�*۝�Ǭn�o%׌���댁%�K
�?"m^���a��ݐw7j+3|���j����D���-��{XPl�G��z���zZ����v����탨�w\�"�Ae�k/��=)I�mm�Yf��������K%��D�>]��u��+Ul�k�4��
�5>��m��ʫ�hs�d��i�D;���.�V���V��us.�(�V��
���)�=�ّ�S�-;��4�TF�ǻ����yq(�zT���7�Z��%f�
���|C9�n���C��o��8��p$��1��&�0�u�j���#.r�!_hO�AJj
+r�{<Y���LX8��5��Qh�:�|��Y�䧷
����6R������������؟��U61v)���1XJ�G��`�n~��󹦩H�T}�K�7z���#�iQ��u��a���u���Ua
��v��W�~�tj�fѳ"��K���
˒T��Mb%��1��}��?��Z��H��+&�����(:
����NLz���1Z>E�ʪ��
+N)H#���y؆�Vir���
+���uf9#���ҚR���E�pBt-1p�kԟ=ni�
W�Y>ӣ�_��U
�T��_ ������(V��޵ ���Eњ�+;@�:o�?���UԪ�
&���&P��+�vȤ'>צ��jY���������]͆�rɲ<�m\9�ij
���z*�k7�
�ħ�c
y�]����N?�va��<ߊk��m+���e_�
���f[o�b��9��F�{��c�NN
G�&ت�J
��}�mߘ���=��3��\�S��` J��YsN����#�B*�LJ��?�������P䠾:w�[�ͱJ��
i9�)[R3����k�2��\������aS�v�҈!T�kbVG���=)�k-h�Z11��X�Ἑ��
��Y�C���i�?�t�m\�U�q
s!�
X#����|��<��#�g
+�>%��`�
+�u
9�	}fይ8g��b[�ݞ�C�F@�x�4�3������nS�����T�V5���g	rk�/j�ݵ�Ȅ�w��n�i�߾Y�'�g3V��qF�5��򐔂���
HmI\���W�]~��z��T-�I?���Δ.P�KD����>+\ y���

(�q4P�{���;�d�s�w�{�)���|m�¦��"
+i�ImM��/�nǥ�q�6���v�vgz��P���f
�{���p�L��
+x�B�{A��=��S#�@����n�Ȭ��(N+��6_G�� AD	]!��^�(��R�s��b�3|˔M�I�^3P6�U�]W�GX��	�Wv-�M9mZ��Jo
�a
�-�G!3˚{�b<콨S���O@���ׄVK�*�E�9M�
%x�
n:7���&}t�:�w%�>Mw����%�7�1����y�o����͞u�R�f38���@[��	�����B�/$��t���T@�'�T��zl�Վ�R8�v�JRX]Rʑ�ѾR˔	敓^۴�ٕ�
���i�`Ot���،�g�\3@]|\��?pQcC��$��&b~i�]�P��
�����������N��
+endstream
+endobj
+2653 0 obj <<
+/Type /FontDescriptor
+/FontName /PTPXIX+CMSL10
+/Flags 4
+/FontBBox [-62 -250 1123 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 79
+/XHeight 431
+/CharSet (/e/h/p/r/y)
+/FontFile 2652 0 R
+>> endobj
+2654 0 obj <<
+/Length1 979
+/Length2 4024
+/Length3 0
+/Length 4656      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<������YK��}�Œ��ke'{3�a�h
FֲE��$[H֒}�.KI!�.dM„,�������~������<�|���9��0���D�\Pz8,A�� �F�� 

��h�Qp�ՁP* LYh���P vQE
�"+�q�x��;ז�]�hz��h

�	�(/r
X�h! 
hb0���/| s�
+�B�A0�D#�
�
�A~��u�������I���>dS�8٤@���a1 �
+���Z(���S�n���ý~��=����{�1�]����%����c�]j��ۛ
+����w�
+�A#4�n �
���w�&���h�
p�c|P�QX俍�g��
���������;�+g
+Gc	��( �O�_
���£��=
��ȅ��?o7����E�h,�P(\�x<< D>
dR a �D�l���O �\�W

�{��@�C�2 A���P ��a ���?P����
+ �*�H��ad!�H���d!�?P
���@���x��@������!���wcZZ8b��E #� ��
+(*@��W!��Ga	����îh�IA��(h|���ZU���_L+�ÛV�9�*�x}�����%�o�-��]r���k/ HW�9�͠�@
H�[73�D�
�o�uG���vV�̘�q�E�Z�oB�Y�f�2�U�b.��X��ё��о�q��H��G�ٯ
��Vf�zn���p��=g
��8N�yڧ=��Ӕ�eQ��
1B%���} X�'�����!F�)�����:;�EY�V77��>w���Z
'����
Ax�N7�^p	7�AQ�����1V^>J�|C?PT�>�����W
Ё��
�@b{C�1u����1L)O�r��Ҥ�Y��u���O�wJ/��]`�����F�")d��Y�F��)yh�ԛ�s:���î�b-:�_���M�Js��6_o]!E���[�H�'|��x�1E��kJ$۪�H#���)�Z?g<Ds&
�Z}\H�֖�e�#5��Z��\CBw�O����B_ܺ��P��>N��{�V�
���B.��C��f�Z���|��i�f at i����ҽx�P��c��{"s�4�]W��37����O�]����
L>T�:�?%�m�+f�H��d�(�n9��/1�w�э�I
�����D�a�z��f��Dr����">�߽G���k��^���+�Ii����
�j<}J�m�
+O�
��i�6ފ�.+:�H��fI�6t���|;s粝ފ�f��Ș7ͣO�vm�!a�k7'PNR����j,Kb����/O�
+�f
�_xRp�MmkD	�q�@:|�i��B��XX��)�N��(+�hj�U��e�d��mz�c4�]�!v#.�
��V�\>�I�8/ڤ揧�!�8-�#x��$)�W+�
/�a�<�dğd�- 
TLo9�U%Nu��
����:M��+᥇���U�ZG��+ESd3<�GB�$�WC���-B�
�K��鿤Iu͗S����b�����Ν^�Ԋ�
�fE#�~�*_T��,	��&���v���jT��o�`�=B 	z��M
!
A�'�})����n����>nMѻ�~�p�g|��8�S�E)a��2���e�����f�_�:Y~뢕����J	���)
��Wz��x�e�*xz�a]F�yU�6���}�G
+)�^��L�����m���o-h9�?B����/0�HB�g�=�����1��S]�c�oh�T �V�xCy����|�h#Oa�6�!�d��,"}tR�K{,��GiB�si�|��L
z?���5A	�~j`
f��0S"dc#�
�
�;
����CW
6�v74�����9�:�9�N�
+=��]�=/\1
�)-4o���A_���;�W��S��{1
�5S&%�X�wΌN<�j����'%ԑW2R|���g>�p*fBV��XZ��w1��D#�N  �H�q9!
�f\
+����l�ԭ�������؂�٬��D���
+�jM�W�Bo�`޽p��d���Klyɣ:U,f���?_��-(�]x˘��)
��ʓFo�Πxox)_�m}�=<G�T�P
C�ͳQ�'�_af��m'Q#/Yvd�V��E��]��������I"s���|�/F�'�
�w
��a�b��=Dz�b^z����٬�Ð���tӮF���U��s�=
�A1Օ�H��Q�zl���7�U
C	ַLc�u������f&�!�5;b~�~9l�����U
+6?�
y�/&ϔ'|[<g?�}%.�����Ry��
+D���وwu8��-w�.@����*E��`�����Z�0g���0ܼ�u�t�@�Թ� ����g���޿0п�)	��`wAӼ�Yw�n���
�7?�c2��0��;�do���
A���1[�.ܙ�"rg",y�ϔv�*h�A���B�J�����^�4
�B�|��Eh�k��ac�4�0u.��
v!���>ӷ��y��J.C�������̰|�%1�t#TN(�|�8N���8X��
�j��[�Ƶ�S�E',�O�ìS�+I�f\�
/BR{�j�$+��Wxk��C���0�F
MY��f�a6e�?k:	$�5a��s�d>Sr]":���-{��'�Ʌ�%�)�������k�J��M�S��9�J
��#�j����%�
K������HNsT�T^�>k��
#���e%W�?�
��rU����#�*_F�x
ZRt�R�C/*�܌�RX���L7�V��}��v��2���TW;u�
Դ����|�
uH�V�c5�`��M����6A
9�[���s��r[/Y�mKP@ڞM-��`
+��k��Jz ca{���!�}�����P�A��w��&,{/�6��K�K8���$����=J
��L
40�&
�z����qџHf$��Um���4?���
+�ů�����NE�S(����_�Lk�.������^�k�X��ý|2�\k�#h����Ihn\��^z��]�S�C��
?�6�B
,��KmSu���"�js�&��N;�s7��� �gL�u��
A��ގ���y��ooh�1i6m���6=��
i��Ә��s�j�X0��!�6)礞����r��N��\_22�BJUo��3}"B{1ܶ|�y�cC
�Y�����ĺEFoeΜ��-�%m
�<e����y�>3-�������kl��@�bQߚ+5J#oK��˾��fB�j�
{����D�6[w�]����6n���
�ȶ�Ƀo�/�<��}�9��+i�s6���G`V4>9T)��6i�v��K9�����GŶx�q;(��~��62�qkMCw��v���q��D䥼z���Xi�g}΍��WB;·�pa
GJ�
�v'����l���H�^�vcѵ�_9��q#���I�1u�OFUb�Y�P{�N�
��{�X��/-0�6��ڄY^B�62��G��վ`�L��Л0�	��5t[;����ͯ�[;��t\o�/\�*����T�����{��
r
�e���
+�w�
59��~T�>����tG��S��䤙w���ᤔ��'L���);��_\���ι
1I&	�q��1��\6���S0pZZ��W��BZ�G�aKܽ[���MZgw���9Hwԓϗ���4� �d9S�[,r��/��M�P�M�+�X�>�c�l��<c(�Ju��

�i��P�����_�����;b�)}�~\tBz�/Ϗ��zcJV�
;}�8?&�2-Tu�~�V�+c}t�y#��-/s��y=P4�ǡ�~,eqOօ�%4�Lz����䯴`�pz������$�/�>+�.S�32
4�ۗ9	��_��'�,%Z�?8݁S[ƭMj�?\$P(�X�}?CY��G�"3��
��x<j�6
�Z3�S�Cd��O�_�X=�[�1��12�2���HXw~_��.�Mw�i�]����x'��\� ��ހJ�ww��8v8���z�XNTE�{$�p\����N��]�;��_���ۣ
ũ<�Y��7�v$�{A)�0��M,�{�X:.:]��_����f�l�՜ީjT�`��X��%�L��{�붾ᝧ�Q��@��v2{}�
8����e�g�Ipp��O^�\�
�{K5I,��67�2�D�fH����'z�/��^�,C�S�%�~nH�%�_ȷb�[���~g
%}>1[�v^u_5���x��kqS�7�O��B��Rr�����P8=�2n [...]
+v��_5f*�9�a����|�ž�ڗݟ��(_��Qv����GKy6�=M��L��{$$fV
��P`�R+Y��
�d�M�|$�r�bO;��.1�=�>�ȃD����E���,Dz���f1�	j�����Y=Z�tC̈́��nM�4�[�
��@G�"��{�x7�����_-�~
+endstream
+endobj
+2655 0 obj <<
+/Type /FontDescriptor
+/FontName /XWRTTW+CMSL9
+/Flags 4
+/FontBBox [-61 -250 1150 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 82
+/XHeight 431
+/CharSet (/a/c/d/e/f/g/i/l/m/n/o/p/r/s/t/u/x)
+/FontFile 2654 0 R
+>> endobj
+2656 0 obj <<
+/Length1 1168
+/Length2 3348
+/Length3 0
+/Length 4098      
+/Filter /FlateDecode
+>>
+stream
+xڭSw<������ 3�);�9d�le
{?�8���q��03++Y!+;
d�u�$뉐�%[��zF��|��������>�����������
��q$i
�h��"� g�"�(��i�H�
+�PVF dW !�Ud�*��"��ˏ ��� q-�$E@�$@h0B��@O����h$�� 
,0�q���D��
b`����$�t�p�2?
]¹��?`
�믔7H RM�T� �"���ЅY���R������.�E�<������Q���O�ӋL	�
p��Z��31���K$Bk�\�  �8
���������/�1�Hh7��%�?q���j�~��ײ���)�g_&MP�d���_�1�WL����08
A%R���
�s���@8W at V^@(?f�Q#y  @8
�
��T�20
�D=PK��	�?�*+Ƞ��x_�
+��j�'.'K�	�t!�B� �ZX��A���8� �8�� g�?0��3�������	�13�Tg�Ԧ�����T��7
+
⨓�.� d\�
H��+�*2��A$�_l8 ���S��'�#Ѩ K�����ʟdp��Ͻ$bQ�T ��> �A��60g���’��G �����
�pF�?�٠^I����gu�w�45�Ҳʀ�������(�/"�L P���f����@�!A_�<8�G�^wO�
+/ҹ�]B/ôEy87x�MMP:�	4��4r%���LT�5s{���G�&q���"c.��r�VFg���o��7����̶'%6���Ujƍ	~�F�dZԩ3����)���YM��
�,�$�$����
�����{r�&8�]
��f��	7Q7Z��y�U�������wR�3M}�><��G�c�}"�#D�����E�����wO�Bl��Uc&�F�֑����2�B�
OP&��v�(R�dNW��
m�L
o���e�cD���!�����GFu�������gj�ܱ�0��T��g�,ώ#8.�
j���bBv2D��+דk��d��?��
��˛
�a�w�ԡ�9�����4=z��K�F ��ԕ�L�`�0�A{�4�����V�Df`�y[CN�c�-H��
��'�()��l�n�M�\.
+��Хi`b����4u)������F!�69�l��8r�G���I{J�JQe�B�x]NM���m��Aa��#�y��U΅���
e�^Nc�|�,��&�����R���F�� ߱v�ה�7Y�iS(:n/�d� 
J�s~ς
@]��1љ��c��;�%�Nl�vD��́���=���]Qv�キ� �3��@}�k
{g���痲�3�^��vs^p����q+
l���c+E�VD�>}
f]��#�~���g��Ts1�5�����z�c�
�-����jc�_�+��ٝ{aT+X��~0ua����q��3k��8hDC�T���h��t�"�>g@�x3d���]�h%g��u㷌�
c�ml��v	�|�{\Ȼ��ؕz��!�ό}�;g���
�6e���K��y.��(�
6�]nf��f�,�_��d:\����2O�u�ᲆ;�Y[¯�HUj�p��.!%^�i���|}W�Q�������|y�#ůdE0��_����ӽ/ȓ����y%���e;,q����	Ɂ�Wq]���鬑�w��3ǧ�w�Iu�[
g]C����a
+
;�]z���Yo7E�	_�.��U���1C+~2R��F�f�|�/��Z��oCD��Ҭ�G���o�����\
�����GO�<chyX֬�DH|�B�Pz\U��Ѝ]�VB_��*�ӫ��a�A��EẆ�����q��ɻ��+�=�c���v��.
����בmZ}��:y�p���ކ�(j�e�".>��v2�A)Rd��.���"�����J�����p�ٸ
+Z�<&}����R���0�F�6*��3�iC��	>�+m�����65�
Mӌ֩�1
��<����m3��G�ݫy
x1z=��K<K�`[j_�2����,��
��J�]&��ӝ%�mwG
�X�7����^bJi����ݞ3���e�'U�'�ې���Uʑ5��ׇ��}�j�0*x%��.�˸��*JewF����b
�ɩ����[5p�X�@ʖ%K/���"x���
+SvHd�f�ً��ᎭJ�%�j��I�p����}�������]%���meV1M4RN�>���/?�g�����9F$��J=�F�*Fu���x�̏
+}�gh|�őݛ
�-؅�u��.�˘X��+u�N��0GR��t�_���R���10t�W��S5��b��\�{il������a�>���q��
�}�*�.��
�N�?ÙYD��Iˢ��
�,�_��P���=X��\0KȚa�>Jif�Njr�6!�[fK����/�rP�gn&q=޺/
3���UK�5�D��U�m�Z�X�����#2�e@��~K[[��I�*>����!�^Gf
V�V��
��Ï ���SQn�~�b�N��C��t#S�<Q��t:,Z,��J�
+u��ɭ�b��{���c�J��#0�5��ܕ�'7��J��t�BbW�3>���a��1���L�'�d�=�((���_9��q�o�H���*�@
�N~
�X�=�?W�u��@�j��6R��[�#�]�*�ʒ��e�L!�m�t�%��xy�
�!T��X\XC-�պ���N޽�wf���Ҝ �M�أ#�����0��>_x\�(rp~�"I�Bm��7��
G����,��q_봺a�N ��5��2���(LV���4�>U9Wt�F�a^�/"=㙸��F�=�6���:�r�2����,���@����em�
�jFg,�qnW:1*X�LG6�j���s�}>!�������n\3�ݸ/T+
*�6&�3V�Ok������j%�C�N'b��
�����/�'�Z�th[��
%�]�k�
�V�4"�I����Dr�b�;��c|�>��HmN�o\�S

nq�
��[Α�{M|gY�]���F�t�qU�L+ߩ�;�� ��go
� �Y�%�E�ڃJm�5��' [...]
+���e���~FHt�Dv����.��%�-
��%ʓ�!ȸ�l��;o ��-�p?��J C$�:ܥ����E��)�Y�
3��&����K��{��9*�~�bF�[��%)�C��'8��)��]a?^�f�h����S�l��#���k=29��mL�P����XU�W
+����}��=9:e��A�޾����Y���+��`51�=�%�AS��g5j'��Vj�����(u�
�ߕ
�>���y�IH����!��B��
�RUҧy��#�_�v��,ņ6m8��08 �
z�!(�(q���%�i�����..;�B������=�+v��J⒊�r�I��>6�40�=0O�lm��$�
s1U2�lK�)9�]�I�v���ѱ$�'�j2mK���
�䓩�
�i�vU�,}��C��*���b%Ĭ���φ��R|&�q����X���!��OT
P��d���)iFl��<�Ϳ��f�F�C"	Z�R�V�{Xg���
+����ؗ�oq:�K���S
sSj,��J�ϖy����
*��'�Ӄ��yl0�J�t����c�E����!�bҚ5���C��\S���P�rXn[
�2I�3���
��.���v�B��]�y-y��
*-�Y���+��Ok�Y�T��
+�녚e�K����%��ľ�H�1�O���N�`{����u�=��C^	ln�	m�[�����ܐʘA���D���oU���U#BƳ)M��� �To�X���g��O	�3�0H����c����Y��z�1�ӝ9��V,�q��i�[7�C�Ȥ�l���t���tF(�]�@hj_3��[:[�DVRZ览��O��
x�O�7<�Z����k׻�ξX�
-�q��i�{
&�F.�Fn_�k�T��
+endstream
+endobj
+2657 0 obj <<
+/Type /FontDescriptor
+/FontName /JCYYHB+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 85
+/XHeight 431
+/CharSet (/approxequal/arrowleft/asteriskmath/bar/bardbl/braceleft/braceright/bullet/equivalence/greaterequal/infinity/lessequal/minus/multiply/negationslash/periodcentered/plusminus/radical/section/similar)
+/FontFile 2656 0 R
+>> endobj
+2658 0 obj <<
+/Length1 762
+/Length2 674
+/Length3 0
+/Length 1201      
+/Filter /FlateDecode
+>>
+stream
+x�SU
�uL�OJu��+�5�3�Rp�
�4U0�3�RUu.JM,���sI,I�R0��4Tp,MW04U00�22�24�RUp�/�,�L�(Q�p�)2Wp�M-�LN�S�M,�H����������ZR������Q��Z�ZT����eh����\������ǥr�g^Z��9D8�� &U�ZT
t��Б�
+@'����T*���q����J���B7ܭ4'�/1d<(�0�s3s*�
+�s
JKR�|�SR��Е��B�曚�Y��.�Y����옗����kh�g`l
+��,vˬHM	�,I�PHK�)N��楠;z`����8{jCb,���WRY��`�P
�"��0*ʬP�6�300*B+�.׼���̼t#S3�Ģ��J.�QF��
+Ն
+�y)�
+�@���� �( C�V!-��
�
+���y�� Q�����~AQ&�� L99�WT*�Z��(� ��[֢�K.-*J�+'
`���i�� MM�HM�y-?ٺ%k����u��/�b���yb�˛�"v���L�
6���^����G[��g_��J��*\�E�ׯ'��"�5[�,���`�_�F�xes�4���<�͘��H�j��Y��:7�(ן����)j����q
iM�R�2����.��x���W�H+r6ϋ���k�F����|�ߩp0����<�?p5������w�苃�Z�0����Jw�>S1�-�-�:�[?k[a��L��*�
+�)�ns�8����h����YՓ��\{���
����T�c
��c>=�|)$�yf��UJ)�-�/��4�]����/
�v���gNk��=�,�-��W���;�
�߿��M���ܲ�ɇW���8�����m�q�]�1+��_�{�y��u at d�Y��O����|��/x-���%�/?Ҭ���~��D�蔍�*�.�9�t���u��V����d^��1x�Ƶ����һM��4d�����~�k�$?s7�EU�>��u���f��]{�R{�9Se�D�O���$��=5���^��t�3K<��G�p�?x��ǎ=���?�aQ\�srB�څ�ƒkR�Yl-Dz��z��]�-sl���Oyn�������I�=��.kN��,�W��ן�[۳~6�H�6	����I)T2q��1��d�wx~SSu���)i���l�W�m�
�u�Y��j���C7񲢰�w�~!����G@�hjܷM���bK ~e@#
+endstream
+endobj
+2659 0 obj <<
+/Type /FontDescriptor
+/FontName /NOPBSI+CMSY5
+/Flags 4
+/FontBBox [21 -944 1448 791]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 101
+/XHeight 431
+/CharSet (/minus/prime)
+/FontFile 2658 0 R
+>> endobj
+2660 0 obj <<
+/Length1 763
+/Length2 673
+/Length3 0
+/Length 1198      
+/Filter /FlateDecode
+>>
+stream
+xڭ�}PTU�CJa�
�t���q7p�eŁm�%�
��g��w�]���v�@%5RC
CE0���DH�b���4i�00Q �&����6���>�s��;�9!A�,���`
+E2<��I�,=��X�񅜐
U
��d% [�R�`b ���0�X�	2Jo��6�a�p�)Hu�Fj	�UL>Ա3�*dQj
H	d:W@&4@�q>� ��
ȃZDrN�TRC��97��[&HX(�B��H�p����dI����S�!W��!=�V�a��@��F� ��!M.�n�sl�GF��n*�"�ZJj	xX4_��x��
)�
qb��@�"
pV�$��MoD�1#-;I
9w��=�
+�L�E��y�ƞ�lF42�\!_(�X#�����`�դ���"q
PѴ����Db1�b �84hf�|�b�%�M�h(��T!�i48�Y!:�4b����JJ��V
�y+��Db���Ǩ6�4$�ٗæ3_k�(�f���ݤ����;�eYC�꺞S/	ܟ8G��|�s��S�f��di��cdžZ>��n��N
_�C���-ߥ���9�RQs"��bq�V����b�ҿ#C�R��V�Z!頇ٸQ}�ܭ�#����u�������<��~I��k������
�a�ѡ����F}�j座#q�N4s˺�"�7��~7���xwv.�]��Y�0�/��]�/O�~"��W��<<\3��_�#�j�H��ᨎ��Y
-;Mi�g��W���+gpLJ�S
���vU��_���v=4/���5��b�����e�10����ƨo�Xgܹ�]^�){�c�'��NT_]Ե�Q��M�
+�^#���6}Vt4r��Z�M겊����}R��އ����G{l�V,-R_痕6T7�4>
�p����r�G�
���[�;�~W8�m��M:a���
��>T*#�՜R�Atm�bU�-��
�ع.��\��p����pG�l�r|[���?,���ך�B���1�Oޖ��8��l���4ojzD[I2X�X
���`_���E�:�gpf�ҖO
��
\t��q��|_�X��?�R
�8x[IKܨ��'��j+o�K��N�~}qh$ȴ�Ԑ����EnM	���}��k�Q��5�	X�wP�m%�i-�
4u����q;����M븉��s�c�� ��n��������^���?s�=�
+endstream
+endobj
+2661 0 obj <<
+/Type /FontDescriptor
+/FontName /ZQLTBN+CMSY7
+/Flags 4
+/FontBBox [-15 -951 1252 782]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 93
+/XHeight 431
+/CharSet (/minus/prime)
+/FontFile 2660 0 R
+>> endobj
+2662 0 obj <<
+/Length1 1386
+/Length2 9927
+/Length3 0
+/Length 10741     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX�[Ө�Cpw�\��;�hCp
���V�-ŭh��š�Kqw{�߷w�{��+��{�<3��g��Q�k�I�;���::����AB@)m'���)	����B�\�

��\!B@�� P�����W��O��J9:yA�-�\��RL%�%�!Pk��P���
+b�Rlf�r[C\�؁vv@Ϳ�pjB\ Pw�9; �[�]�� �� ���
,
���	��9��;��"d�[�	�"i��`�4�X 8T
_�A^\�h�wqY7;;U3����=��g������2
��\!P���9��ߩz��ȩ@̭���{U����,�`i��x�9y��v������[����fv.�����6y���

��Z
+�,��j�^T7�vp��r� 9����A��ː�֞���/S�$�|����5�q ;�[;X�x��fP�����/��v0�x!�/�
���/� _&��p��z�|�@��B�!~ �Կ$ ����
2�?�C�_�r(�K<@�饦ʿ�RS�_z���	p9�����Z��KM��ȡ��
/���������A5{y3��D��K/}�����r@����Z��/� 狦���i��L����
+��G�K��|���_<���Q�?z���Q�/�?�E����/�NfP��n�?�ѽ
���
�^����������/\���?����|����^�=��E�����@����>l >n /�_R|@A>A��+�}٠���R/�������B �0`~�,
j�!��_&�g)�
YzQ�p{X]�0��ea�)h�6��
;
�ƺ
+�P���܂w��A·�G�#l�
�)7C
�����Gv_���ȝy�M�F��_4�+����{ �<��(��ٙ�sۀ��y�4s��T�Qv�r
+Dww%~��@�1�q���a�%��<q�҄�"z��l��t�N&O�� �-�~���sU�&����z��*:Q�s7�̈́
.
��R���@�v���`�ϩ��
���R��E�ă�p�Q{��	
���.'�]
�E�� ����N-��O�k�T���%1K0A���������a\�R��v�$�7�������*i�=�]�w���:�>���J]��:�Y
+h�RMƄ���xa!�j�ݟn?��nȅB�;Q3�&�Q�Y��~]jS�1����>�GX4�[�#pʨ��������n<�ϙ)��wB�-x$O�a��ed&���u0Ȝ/���0k�l��'j^h���k�fM�pۣ'�f���W��f���c�
�"��ʢ��S՟
�i��n�e�I
̈
xH�\�B��u*���}�I��Y�2��f� 
+�k��Wu���s�) ���>_���5������V#�g��T�X��V(�h�k�R
U��@ '[.@�a�+�#S
+�������S
~ĭ���U��AΏ�PMg�E�[�~t����p�|N0k쩚��d�n�vT}�<����;�ڰ�q���X}=y����E��Kw�)WI ����߮���YdXڳ�]a
+�A�9�_m�l�tf!C�N��3��ޗ�<6�~�`-ݶO�y�J1��/u����{��4&�U���k�ZeT�)�� ����;�?��M at c���:��=� ���
�`CdQ�J\���d���sc���cf�^��F}��C��M�Сx�
hE6B���)Q���OX��4r�)���MU;����~�+��f�"(��3�w[�E$��M��Q��fl�sMVy_�e,IcL�h�#�9nD��f]����v��
�!�<�
��4o�C��G��3߯���bƽ[�¥�
>�L�U�)3�)��/8�)7��H2����^
���v�~g@�H��`����gk.�s�
N��g�I�
+�"�n*�!

�C�Hv�W8��9���B ����#
�o�D��r,.�#h{w�(RE
�jfX���P�>�o.�U���,���Δ鞮��$��fQ
�Qe;"�u������o�5Hj�̠09n���%��H-��:��wT��RٲߜG�HX�M`�
9%�>
f+o�cu�t�r
���
ctQ1<c�:
n0���i�
��n"}+�0��=p�e�ԣ6a��؏�ˌ�L&��@[�3�_������6ɭlV��!�g���|n
'��#�!��`��}Z��M	��_
+y6?�E����ԏa�K��0�J������хpM	�;ad�m�4~��N��I�FZ����M5ҁ!��2u֖�����ʘ}�@f֑��}��Jl
�e!PP�c9%J�v��P�5�~�E1��
\�Q!r�\�I7w��!��\�A1>ј�*SS�=,%X5y35X�L���ӏdʒ�V�f��t�aI$]x�my���]
$>��%�S5Cz�x�J`=�gW��m�j|�qVmՇq��3�G�F$�G�+:�'q�������D;{��(2%�-�L�wOK�
p�)�$r�}G�ϲ�����N��VH��N����Rg3����}�e
%���y�Ra���Y��%4�g�?��pI��JJQ�_f� f�a��)]CvP�ö'_���eҋF�z��aw�?OގL�=E���
��R3ڢJ
+��1uG��G�vR��&�
���c��;����=Yvf]�D�=�qtP��d��7p��Л�����ԥSU"�OD�R��q�m���U�=pQ���*��ken�lN�
!
Mo[��ߔ�����*�J>�X��_�7{]*�\Lppe�[(��a9�g8���a�foW\�* �*���nݘ�v$"#��'�n�.�i�謫��4��Y�kܶ�e��=	s��L������a����\�l�� n�R�s�
�at��[NB�Ž� �����0��/D�/�݄Zώ�N�9���5ע�(�-�^~Y-+�0x�q'��,]��Y�Z�!j43�h8lĂ
5R�%b(
Te�RN\]{��8�g
O�� zq��<�g�Y�*zр�W�M�Q�,H�jצ�7*��u$t�m��`~��RO��hNeb�
1ɶ
����a,�<���K��te'����
D��h���Sx��E����!,k8��}|O�C鰰��X+��D���:7��~��7��
�
�8���Fg��oiO�?��ܣ��E�T�CQ��ҍ���W;c���B9-��ž���x���S�w����ťm����H�B�}\��Q�^�ݒU��J�'�F{�j��z��j��㶍cz��<A�V�ہ��G�aLL�\mÖQj7�v ��s[����OB�|_U,����`��e!�4���#�'lx�m� ӥX��
����FiU��(��;��y�XJ�F�^��
+���
�����K��ik�e�c�n���~ �wף��|2��t�ѻ?[+ьvTѸ�{0+�{����DJ�t~ˈ�:�6b�oo�S>9/��D+��-Ä��NK�
��iz�
P�|ޓv�$o����^�������VG���8��Ì��
��S���"����?kZi����3��������%� �9��9��_� ���ŧܐ[[Qe.7��9�FU=�(݁��`�O0�41a�8g�wC����-��?>��S39^1�Z=�����a���
b?_"�
ijIT�3Q�M"��v���08�x�^`hRL�\Ѡe3�K��]ur�
���2��Zf%^
�,n��kf�^���s_�Rk>a̎��3#]�b7�"ؐ��.�)�r숙i$ẅ(q���s9�X)��jɼ�R]O)nTܜ���:
���`܃�<��ĩk ~�.������N7
_�
υ��I�����uaM:�*gK��,'�0v{+D���=<_��4=g��(ӑ�K��1���)��;@ED)g�
+�1V����[�<���x�+���t�-�n$�AXN�6�i�򜧜�
j���2��
����$̑�T8N���]r��̰l�4*.[Qm�Z�
���\�
+}q
D	ۄm���
��^{
�c�b?9*W�w�	T{��e��E}�g�г֍������� N��S��_��6x��A\
+=�!]�e�+�*��i8��H����Jf�0��kcbͩ�� �?ڬ�T�2\�H�Qy�Qոr���%�S	b�Vf��)�:
]%�2�-Q��ɾ���(� ��:��]��X���`��0D�(@�T
ؘ�+E,#U!��`�<R�M/iiY1�P�#�|?ҭ6ڮ��='��7bϫ�v&S)�{�T�D��	߰%��S牡�������p"Z��ZT�}0��a���7�a�̈́
>ٙ(Q�J�������4���Hwe\�"��ƂL�	�Z�[;�e*'�]�d��H�Dy��7�º��bRa��&�7ȣڧ�����h�
�曼�.ϝܠ���[���ըèY}����ݽ
��V�z�`�H�0�3U��e*6����V�,�Nف��\�nȕ�W�{�ø�{V�N֯^J 
�
]Ht<� w�h�Ep���ëjm%���['�K\Q�0畐|p����q���ц,��F����’>�v���~��J�����Y��a}��^���(�
��-�0�3��O
+
5�aΘ�y�I�����\��ј���,޻�l?m$�GK>�dF�N[zC�jQB�L�9�I�߱lceH_[Z�8��}�
Y���U��'�Q�`Y�Xi�А{��OC�\����!/�=��
{�����Y_�ԘP����͓U$�������i�
9M��mM5� ���J�gNo��6����w��\�9
�?�3O}ǐI��j����q���a��GU�G}����}��+{�z�pQ�h�
c�dS23���u�`�*˔r��
8}6�����r�V�U�#�(n��kFe�JH�QB��´�)��i�p�ub�ރk���vI9a�M�Ի

ͥ}����
\9"�k��0y:���\A�Q�[��5�
SV?T����Y�X/�o�DZ�=�\�$��{�����S�d��,����]X�¨���H��#g�)8�6�AQ�����
�3���
t�7j��G��
��`
m>Z���.Z�^��z{E0`��������d��r&��(:�3	
� ���`�/��QW7;�
���������\P��g��j��A��>�q� b)����B!�Ck��[��9\ndŬD�dusy�2���n#?�����:m*@}	S��R����D�\�� �
k����WYǾ】����dS�V�_�і?�dǸ�]�M�������E!#�
+U�Ƶ�8Q��*�� �(�m�L�����?����ג�q�N
�N�����N��
+R����Tݲ�ie�%����(�U��.z?3fQQ��S���*��<u@���`��q�v�OBT��r�߭:�����!շ�"!�-��x��9 �x�;��(�ձ��j�7
XW{	��V��YԱ�C{��T��OI�s�_�} Qz��?^���R�SEˠ�c�ʙg�5��cEv:y�

Zz��
]�z��O?Ք����.,���֔p!����H��
��}%��
�.m
MofʰV�Y��
+K��8F��m�1��T����u�	�t*�@�/�D
z�-���<�"::
���L;+�%i�%�8?�#;��
��	]LT��["�>���`�d��Bþ�[��ﷇ'��,�.9�ҡ�yz
?�f�c\�k�IX�L�)�}T�.6��J��~Cs���K����x����8qV߁��K
�Oöo��4G��-���'GU�Ku��ٰ�X\�ݳ�?i��	)Xw�pD��j�lm���:�2�W��$+��G4�#�gh��ۣN�x����롲tʋ։
����0�N�1!u�%�[�'Ч)�RiJ����z�;�+$ΰK��{0���gP��@=��~{dK��8"�H���0tl=�X�����
+ʵ*D�M?�LhG}�@N\��D٬�j�x[��`�y��=�~�C?޳+w#��� ��j�oZA
�؉�$�C�&��TTp&cd1,o��^����J��Gs	�
�W�
�J
�_��1�rN2G�5d�6��a����������:�ȶ���7�1E?��A-a���n��0�<
J��^ΣԑE�`���f*t`�L�Y��(d%�gn�
��@��/[R�
�q�u��%U8��
��ZI��*�
��Ʈ�c"f�u�L�٠�'�#G����s�E
�{zW
�T~��o�of���ET"�p���r|I���X*N��3�e�&_������$g��s|���Pa`: �M�U
�.5CӁ�>i��N�؉���
+�+iɌҊ�����Y�lr�
4�1D��!�<&Ơ��K�-Y8�=>v!����#��b`5��
B`C���N4G~��R�61U�� Y�1�pIL�:;>���Xh���u��E.t�
+��Ƕ`�Z!���Oc�Vy`�<�\҃G��~g�������g�5�I�
+�&ٛ�~I�T��
aT�V$�<~>�ae�n$��7AS:s~�u�M�ɠ�nUmn�(=�u��R��<���
�T/3w�I*��\p��W|
h�.v]�r�DZ�9��|�
t�3�!�����Ri"3Y�z*�-�BX$c��8��{4ZU���/�t(^s�އ�΋k��0q��ٻq�Z�;�kw�~Ď[���@%��+�K�h&�j�Po����&H�h	�z��h����Ұ�Ѐ�:��/�7{ʫz�@R�1䫱�?��~x@���Tܵ�����Dٿ!@�D�����8�ݱ~uH!�����a։���o�/
��d�l����Jկ
*��L��8|.���{���j~̤v$��*�x�]�WbX��u�(fV[��4��?ZC�5�W{i�-
s����(ne��'4mbۙr}=�)g�G�3������`�
�iT��S~d�?�u=�`b���A���aզY���ЁT6϶�;�{K|�+��:�n�Ȱͤq���
�F�i��c0��\�2!�tsRTJz��T [...]
+��B�^Rt�FzV��;E�`��=",�>�,��9����YJ_�R��D�f�	��~��A�����\BB:}n��c�i�m��	���~|.�
�0�^a8R�"6�
�o@R�����k��*]�V�VgJ�הDy8��{
[>wF;��]7^�8t*�A�PA�4�%����(f�Q�7%T8�
`�*�T΁a��sA�|�ʐ�� k����bf��뇪h�ۇ;>����
S	�L�Qw����/�
5|��&�
-�F6-��a4��-�g�}.3xeA2�k���U.
Ia2���tt�E�^W�%������eVD�Lu�o�	����W�xh��Ŧ|���.�E����]u��JJ]8v��\�O�.Do
:r��/����
"�-pU+T-�?��`
�"Վ��D
yZ��vHB��Б�
rB�RX��
ȖV"��r�݃=���>,B�


��V
p2�ʽ�,��)X�ξݝ�A�����?��T5�F�~�~ǒ
���ҡ��sY%�R��p��ܤ�a���:�nk�I-�6.]V�sR�鴼���?��T8>78�vzuf�*^�y{�*d�\K%b���W�xJ:�발��^]�"��8�������dr����Bs-�b|~�o�Q��=��j��y�O)SP�bYEO�t1��un�*扞VX�cV��#�m0f*M��#cϿW }�v`쉋
tK��s�<�W�	�RX7?�n��S��
xK�{�Kd펔�E^��^-il�fD��� ;�@�vω'g�g����P�Ƃ.d�=���a�O����&{0M~aCd�������
@�A����D��s�#
���������9�2�/�̎'�3뼪U����E�J���"H�D���5[�,��O�ʼ�������oä⠪���b����K2A���Ƌ��䙬��>6#�p��w��C�a�ms3d
Y��|�uF��H�Y� ȧ���N�4�o|Y�7�w#���̪����m�i2[xL�Պ�-ˢ�_��/{u��ۭ��	 ����5�`������0��2�LJ�w���el��S(���Dh��{L�zE��
g�wˌR�
zb�>0JUg,����SE��<�+h
��</��@�}���L
��c�l䪓� b#��d�
����^6�/̫����QF�8?�ሩ_zp�bv������E�Zm�>�&�4�#:�2���ʒ�b�G6<X3�-��t#E�=\�~bY���M'l�ۡU�D� �
+�SA9�./��,���[��[3���{��ۈ�I�
3����^g�I�)�i�<X�,��<����:/=�QQV�g�]8PGtOD�?�RH��#��?0jƟ�.�l�zGv��z�q�SH��F�B`w���}qDGgqRSt�U��h_c	xEO�ЬKa[�d O!��y�5l>�0(c�-k�ՙ�u�����
7[�I�j;�;]�^'z���>:��v��
�}��Y��r_2���3Pc ��K����/ʾ�5~V��lI._j�0zDO(��<�>
��1M>������ạ�ΈKp�&X���R�u�*Dž
�d0���X@��4�+���H�N���,���u�� ����L��0X@�[AKm͕a����Kq�̞���d�����Z
#df
}@1V��@�~ga��� �,Za �Eܯi����
�u�T������!��$���5�^
d���_+T,ӓ�y2��cS�
�V^���!�Y�=�֥�p���F���n'r�Q�<��[��E�6����O����C{E�q^��ŕ�O��!
�<�!8*{^�=��KM��x�}���h
yc�M�+Y�u7a��
�9뽶�e�<*7�y
|J�
�g	\�i�O�?���7$U>�95x��
T_`��[>�-�M�'w��h �'�}�������F������Uy��}��#I[+�*v���T
^Y���Q��D:t}�������F�oN`+�B*N?K��
;ݞU�(�����8����d~�4���͊�G�O�
�x����X
B��}�	=�X]�_[��~�G��-�Z��u1ҺN��Fc�3�B�Wv!w�X�}�f%{
�j�8N�׌j�>%����t|s��-$
�e��v�����Y7X[�sa
{�ϮQ����Bkk
+ �'jE3�7^�����(`�|>%-i��F
�L+0!mo{���l�1��a�#��,����>�b[�
'��}H~��˘Agt�R����S�ɣ�A-3<	i>�bw�z��s֛�L�� 2c�7䍄Lb��ajѠ
��o�_��꺿���;L�#�SS�e ��ה�W
Q��F�l���|�����A㭼G�|58�D�$��|w�:71�R��.��v��~*#�͛Ha�B���7���Y���B\
��wp	y�
+�U�I�
J׉�H�V�
�w�Dpp�#�����c���9��]^��T��9��
[Y�@���b*�
C��e�<\��L���':
���H��'
���Srˋm�5���#`��:b��F��?HsV��_f/Q�Q踘ش���?�|S�l*��,���R
�Bՙ|��ZʂJi־�0}�o��Al���s�m��$׭�
@��p���E&�s�b�=�J��1O%�.�t��a>�x���)ٞ1���V�abXu�]�c�f@��ӱ�юt��;g�������.�z!����I
�D�
v����.G�a�v�Hy�Ea诇�ܪשvb�pC�9JM�-�����~2G���&�����; ��=h[
dBܯ�H�_���i��y�>m�&ucDx�ض��eOJ
Йu�u$�6���
�k�ѓ�|���SKL����^+\�D�2{
v����CئC>Jd�0"���_,�����������
.B�O�-�����񎢦��7H��'+r�x|lݩΉG>��!ȉ,��?��*�Z��+�V��~
����D�T�%��j⯶,�
X���!��E�Z�$'��Z}��Y��:�1�ȹ�!u}T�Oc@̏Y��h���D�J	�O�;�aZ
����YڷvI����ml�mmZ�4-溵�Fã�g `��m<�R�̐��Տ�	HJ�]�K�*��q��J���<���arJ6���ϓ��6�n��
̊�z;3�
��ʋ��k]j���,ާQ �ë>g�':�)�:�AY>�xG1�jg/����6�s��X����v;M�`�t����.��	�hZ��@���.��	�
+%�p�~��!�PA�PC�R�\`�p&���5#`Y���x��B
 l���,��
΂[r�Y�� v
sN��m��}���n�w�H��(���f��K.�q#�2����>��V�� ���r9��M�����#��L܆+��@Pu�sCD�Z@�����sX�K�/�Od��
Z��{0Kc,?M��3�d
+endstream
+endobj
+2663 0 obj <<
+/Type /FontDescriptor
+/FontName /NPSIZJ+CMTI10
+/Flags 4
+/FontBBox [-163 -250 1146 969]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 68
+/XHeight 431
+/CharSet (/A/C/D/E/H/I/J/M/N/O/P/S/T/V/a/ampersand/b/c/d/e/f/ff/g/h/hyphen/i/k/l/m/n/o/p/parenright/period/q/r/s/t/u/v/w/x/y)
+/FontFile 2662 0 R
+>> endobj
+2664 0 obj <<
+/Length1 1097
+/Length2 5697
+/Length3 0
+/Length 6380      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\�۷ǑnQ��G�Bf�#�Hw3

1CHHHI	H#J��"� %�H7H��(\������~�7�w�����ޛ󮎾��
���Fy
+@�C$M5� �&��T� `�H4J扐 P(��r  �D,&)*L�	(��|1HGO�G�g�8 �� �0�	�tD�^���\ }4
���ȹ� z�� �
�7��>)�!ក-��"�ӑ�

��+l�����7�qm
+�6	�-ڡQ.��
žTP
}���v��a�͕�\\�`���kJ�'sE��������� �h;��RcĿ�i"�^��̪y�\�p9��
�����+��PF� �t��pG�
���+�@��������!��d�hd���c�+�C�<
|� ����7_	������`�u����?��)��h;$�`
̗|�JHT� H�
�@�\;��B{^/�' أ1����( (�g�_$*���� ��� ��_���K�,���+m�&( �/A�`@��7� ���P���$�o�kQ�������kY���Z��o�\�~�k]�ox���� ����z����n�~�k]���Z��o[���
��%��G��
�B��?-
+���U��`(Ͽ���U��#�o'Ⴠ�N���RaNiUE�J�C� 挂����2��o�K�
�T Xo��rB��J��(��]d��{��/>y�����B�h�ma�ە��z��U��ۊ[5��4�ɂ�g�����<��h����_G��A��Sd�v
������SF
	��;*�|�ԛ.:�'ԗS
�s#γИlM���s���}��v��l���'z:xG3�MD7����
/�U��4&r7����s��n��
��et
/_������q����M�
����
��W2��`Klt
�Vc7
	s�r����.X
~R���eP�7c59o]�sf���j㋽w�ũvh�[$$U����>�	� R{�M�F�O�qX��͹1�����
U�j�[�5�'ƥʱ��
l:�pںx��M�&��b#t>6�N5���b�]��f��;k9��s������
�w�u3�<V��?���m����=��Y"�	��N�hR�8e& �F =X�k���,j �=�
A���Y!j�ָG�i�˓� �����ё�跃+#��AqAI�������u�|l�jT�^0�
Q�W�u���Yn��LN�‡=nR�
�x,��Α��/߈�ڍ�$�͓d��"���OE�+2"œi�G�SK*"�7D�z�8.t�}k���(�W��d�vn�r�څ��T��J��Ց��L�z�?&^N��Z�]m�(�7J������}uG���;V6t���E��G#�O�
0~>TA��Q^0�(�I�D��/�a*u�#�����,-P��iZM� ��_�?�i���
2
+�rl���&>Ό�	�c�/�'VHH2���ڟZ5��d
� �xJ
^N~�
Giő8AX��`�(��
G�0�X@��¦!��Z/U��8��b�J��
Vb�{6,�-�=�%�߄�dc�
$?��\�I5�|�q���kW^Fa峾�?�l�g�y%�> �����XUBQ,�!:m7�L���B5Ēv]U=����,BԈH�4�L0�[��-����ol���M��
�G�
�T"���`��%��ϰ
ydy`�W��
R�F�$���#��ԏ(�,	hioz��k�!m�&1�\
+��۩K
��ʩC��N
��1+<o���K�-�V��KR]а9?Pn�>+QL_��Hyk�z�jЬV��꒻z�:�������w��
+d�=M��� yFwԬ�I�[Iţ�N���'��#ݕû��Z��b<�C(s谄aAg^mX��`t)�w�ۉ�K<z. $��
+dN�Wn��Kwm���G��
E�3��Q��o��mTo1��Q���Ƌ�|�P�  �N�GC����HQو��D���A�i���^&_tՏ1m?�-,n^�6ܑ_�b%�R��3�c���>��
���
�[m�D����ލ���Kv�ܢ@�[/���)�SQ����
��3i���a(�!Uc���=���4(
�
#Q)�<��a�f�tb!>�$ _̦P�,\ٳ�P�22
�:J9
�|r�
+.��*�H�����N�P�E)!{�7C���*o��ъ�æU/����j��!�#�a��	\���v����c���9�謟��J���C8K��n�F8�������
�77Z5-�7��\�\TP'k�q��UN%\v� MM�%�"�T�T:�ų��AT2������e^�b&YIa���jM��ɸ[��j�����9�����j�ݙEr#��\��
��)x��Ԓ}�����U�z�O�D���::�jo���镠�R%����X�8���F
��h��<Ԉ	f�2�u�u��δp����8�$n�ү���1���Q��K�A��
򜒡y�"&77ts�����,�=��6���"�9i�#}6��U���$j"���Rғ�'n�{ v������(�^��^?6�4U��亰��j��뢏a'�լ�K��%X��P�*������<3�g�IM�!���)&�3��)�����
�*C��vh@��[�|[�FC��
��l/Sy��'1,b�����C6����zp:x���N�6aD [...]
�r���Xr��#�-k^�?
&�{7�&��[�(��,��)*|3�����dߗ�6�Vp�j���3c3�-��\_�
3��B>�P
+��)C&kvm�xf�,.Ic�E� ��ա����=�:�Tu8\�ꚤ9��l�D2�kpj�h
+;��s��4�Ѵ�	Y[�tE������\<zoh��9�ⴏ���U-A4��|���9%��\��œ���a�Z��5Š��|���'kX�w�\� 0�4X��w���!���
�{h��c0۰�h�y{�˹���R�x��
�^�7���%lB$�-AolR 0��B��N�����3��YWB+��;��-�,u���.�(�[*���o��g
{d랬�7Ͻ�
"�i��A�ᵘ�����=���
+�+g�B;�93��T��0��l@ͳbg�Z���M=J�h������l6�ܞ�J(
��(oI��� >9I�v|8i�/�Q
�!�]�a�
+oϜ����"�A]`��:�
&NJ��fҬ�������euO<CN���}��<<�Y�X�pAG)���}�
�
ʓE�,m�-p�2/Y�U��޴�;�^��]�y�,��� 7���$����;�LS��^��l�J����%�qѻ�4�0����}^��0I~c�`q2E�u����I��"�z'�՟~��a���֠;�OV`ė��@垾K���T�
�%l�p	$ěQ�k����Y��6ކ�=����\oz�6���$.��la����dD�HE��[���
 �x����Pa0D��my����/sb}��[e������������"Ŝ�Lv�F,�%���6C�P����w{/�"��m�q;�`���*��X� g�6
+��`�(,�%l��
+r��}W/�Ťwux��
C�&"�� �0X�i�p;���9�4N�B3u3�T�5Z��Z�0GV"�ĕت��j�y�� � Vw[�
)����ӥ1 �N�(�TW<
�C
>X��J>�#�H�Q��%�\�Z3
o9�R{@7ߔ���l�;�j��7��H�=�JF��.�S
ɁT*���HO0��s8�P�^ł�.Ō�'�<��D!Z�H����RgI6���#�fW��Ƽ�݁�4�K��.�vT:C&[B)LW���Ɲ����w��a�o�A�Q'��
�(�Aw�\��T�\�uQɼUǥ�,��K�7[J哕��^-���VK��e�C�����
+)-S�뚼�&т�g*��F.��~VjI������
����ߠ��x$td?t�M΢���I�5�r��;h�4O<���=��x�xs���Z����@�
+bUr[�!cpTᘃ��%�UJȗ�*h{�\�g�
Z"=Z�ʔ��^��s
�M
r
>٬��
����(�m��C�W|�.Mz��]������_n�=�;��r����;��O�M
U��I�g�	sj��J=+�1.Mk _��La3���-V^�[��6�J��C8�\�aFG�Aj��v��O�2�B.�8����z��o�������&�� �\��q�b��g{*�����:<ک)�Ҟ��1Y<�\��W�*C��bg9�/ڸ8�

�3
�µ��Jc]���<B�Jc�
�S"���ұ{"��T
�������OaZ���ʦi����g%V��1��=f�]��#G;�zfG�/���2���jh at 1<
<��G���Y�v��E�xI�vE��]c]�T�Bw�'
/�͓�Ռw%Է�y���0dwԨ�e6���5������0
�\��AJz퉶��d��)��O��u��i��i�م�1�4:I�٧�M
~m#��C��T[�,�U›�%G���������؎s�f�V~-��� � �s�
+��Ţ}�o�%�%#�&3�Җ��1�+ܟ*� �,��QR�W�savV*�f|�y��BQ�[�a�]O�r�x�	�:��8���l�ٕy�br�L��h���������2%�(j7��#�|E�;�&I��2zR9e��Q,�n*�Ĕ�B�#�b�H3��@h��r�ɣ����[���[X9���<��2��w3���/�в�=�2�b��F�=,l�R��x���Oԅ�=�X���Z#
�l�]U��7e����ٱ_�]h�X[���LV���_imvbOL^��
Yv_T?�|�o�}�}�s<>c�Χ+)H��s�p6�v������燀
'����B�>"��&�N�/����J�h��o���2�'m ���
G����X
�i�o��=.n��v2&���>�<up���9h�9�K=?K�$S��~i��<���4d��
���y�����4nj{�~�}�7~��u���;�%��N�v<�Q�2�>�u?�|
�d Q6HA�)��;���û��F?��\V��lNq\I�
k�؛)ϳ*�gC'?g
�C:��Q�=]�f^�J۲��h&�)"�E�
L Dm��i�mp���I&&rA�?ba�	� ��I��Y���
��Rf1��[�'5��_h�� a��� 9߃��
Ggcly
M�Q�^�~�O�U�|
ˮ��-w=����
R�~h at rj�v�V3�
+v�&��
�K-Ds�LU$� �L���3{�������۴�L���#�T*#�O?���)O�����
K�>x�
��_��xJ�n'�{�Q�}��*���s���b�N�(	K�,��S<�fɽ��
G���
�%�L:�\&����
�
�:7�R�M4ă.��!���5�/c7�U�uR�\��ʭ������f'XĎ��`j��Џ�
�, f�01�lmENG�)���In�z{����~���/�4B�nhCU?�ʜ*M�����h&e�(
+��K����2��2Lk+�
tM�<��m�L���G��EEj
�+��L`
+��L���@��<�Z�dѻ���GH�~���4jѳI�,�;/8룛�?Y��a�����y�Z��1��
�ֆ�
ɚ�̨�#wN��������Χ@M1�h�a�3�O���������G��ޭ��<{�5ˠ�n
l2{�Y��\����8�V����VR�)�/�v�C���3�ȋQf
.�wOm��������	��
!+Ԁ���!
�geI���2}�����[$���7���"��1��&�
+�������ݓ�Iw��¿�[��%\���1o�v�u�܈�3
��D��s��b���'�6�\�^�3������ߋ
+ܒ/U`����x�<��rJ��Kyݐ6�yCHQz�+�z5
,
"�&�*F�`S��q���B��y�v4^��6N�|��5�]j���^��\C��R����*B�8?J�͕�f�{�3n���(O�[�J@�9�ʍa���yǔ�,�W|O
+J\��4J����D���qU�I�i��w#{+���
+�'�{����SH��ߵ��@���h���W�R�
+}��V}w���nXN��AqwgS�"��Z��&+����R�Ū��jq�B]^�|�9҆��
rM
+endstream
+endobj
+2665 0 obj <<
+/Type /FontDescriptor
+/FontName /GEWDVW+CMTI12
+/Flags 4
+/FontBBox [-36 -251 1103 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 63
+/XHeight 431
+/CharSet (/A/C/L/N/S/a/b/c/d/e/f/fi/g/i/l/m/n/o/p/r/t/u/v/w/y)
+/FontFile 2664 0 R
+>> endobj
+2666 0 obj <<
+/Length1 2128
+/Length2 13960
+/Length3 0
+/Length 15117     
+/Filter /FlateDecode
+>>
+stream
+xڭ�UX�Ͳ��'�Cwww��;ww'�[��������5@�
ߜk�d��t_p�S]U}Wu�ݐ+(�	����l��虸"�**L� &zFFax22G��������3�����
�w0���Y�A��d ;{G
3sg ��?N
 !�����-@���
h�alh
P�3� :{����J�D8��N at GW�	=<����`4���g��I�����o�����.�
�@P �aR@�&v��
 �)<��
h7 �����N.�bm-gh�O�u��Y7�����;{g�#@���h�߮����M,\l�{U�����X���`����I��
h�`�llpvt��
�5�oP��E����&$$L�?���EC
[g��d���_������
���/������fb��v&�f f6v�����<h|@�
����5��� `z[;gP ����#�?'��`���o�`��8 
"'�A��0��Gq0��(& ���
`���X 
R+���b���@,2�E�����Q ��(N��bQ��@,J�E�����Q �?
+Ģ�G�X��(��b�����h�Q�8��(P���=�S2M��ZYA��N���p��r5��@.F��VNֆN���21��1r44ZM��2����ߟ��0��lt�?�\,���W �0��(6���5��8�?�?21��7�K���� j)�����Ϻ�
�B�*��O������
�,۹8� r1���n��
+����m����{؛m�� �,�� R˿$�����N�!f�l
tr�k
�7�?t
0�ي
�����OE,��m]l���`��B��
v�A9���bbj�g����#����,+��X�ﹲ�@Ch
��˕�_6
����X{k��
+cY
��!9��9�ט11���W�@����
+r�X��Ib����׉���8��������k��@��e��l��kT@=qv��+ ����t��tݕ�N�v�7t��I��_�(��_���_t(��A�<���&��
aa;w/:V 
3h8X�@����q3vq
���bЛ����@��@c��E;c�`�Ԧ���b��e����f�qr�=s�A����E��ԛu/���ȇЇ����":�'į
�-��
�{��kܦ�z
ؓ<�}lo��?g���
+M�,Ⱥ
<�U�U9�Y'��vm��f��O�V

�#g!VB��P��ᆒ� �1�k
+�B�vc�����=�]���@f����)K��t:\�

Q��Q�x ���n2���޴���6ە�����
��^���]8#�	ܣ!J�i.'�
�rq$%�3n��
+Y+'�� �F�b�{�$�
�
 M�VA*EI��oB�� �F����.��fS���ڊ
��[�^�sd-�/���	�;���ѪY�O�a�N�b�.�������Q枑��a��R��e=~��:�D
�0�PN.�,;����̙�&>�H���#-M���E�r�3��BB-��¸b�YH��ʃ2�]ݛ
�>v�[�+�Ks���g]�E�?������c
5�H��o�#+�	���f��
+�m
��ǂ��M
)�%���5��i	W,�m�
+�_�{�;����B����g�������@��Lh����e��=d�A�R��ʯ�-���.B"�HH�1�X�F��V؜���zb���Y���V?�n|C���3��ż-�!c�lc�/������)"r��}��Æ�Y"�*C��u�T�n�m@?N!&�
�:*
�Th�
�t!�����U
S��u�K�k���ﰖ�Rh=2�bSNV
�h�EO9Ϟ�X����d
��r� �jJi
��
+I�N��9��/7�5�w

4�G�Rem.U�;��撼|�h�孄*�)����;d���=b�������ԓր9R��Dְ�ˣ�e|�$�Vޛu���1C�P0`������
�,���O�[���s��q�ؾ���Yj(�}�t� O(|�y2��
��fu:-a�Α*�
�
��`����JfI^H4x}�M4�2?�#����
Ә"�^ 

��⏎��!O��(
�v�(W�+�g��_��e����#5�_���6U��h`$��n�1�F)�4���	
��(kCF���e���p����U'��Ec2�I�1Ռ�<\�i�`t���m+hc�`)�<϶n
+O�8G}�
�VͲ+B�l?B�]�ƥ
�ܤ��.�W�G,4�����އus�-����!{?,�4l�pH��K�$Ǎ��dn2���8�G�-j���
�nI�z�!�R5g�^�ƭ!6�fs�z*�3&�t��u�R�Qn8���]:�A�g��ㅔÂ�A�+�}k��c�t��
+{h�gԜ����ద���0�Nt���D����\z��GdwF~�h�`?
1���)���B>�:Q�
�
�����Pb�\u[�r�����KD��]��AV�UT�e��5qfc囩�
+.KZ"]�5���y$V�#Jo�
�/����S�g�(酸����/7��H�\�s ��^�N7<e�y���&��VX���
�k~�v���O���n8�
����Ӛ'��K�v�$8��'k�������z�/�J���
+;����Z�y��+�)�_d�~����N
+X�g	B1�ZF�U��<9�
g
q�x����)���}����{�خ�
�Zn�����VV-����=CdKV�JX�~�^U��W��
�ߑO
�X
�"����`杂-���P!�I.��|:Uq������0���#8Н�a�[�
Wk4��ˮO-"%z���(
&�y��,�8��o�
]�P��C�m��à����t1Y��(f+㯷�K�G�P�B3}� ��@'�lw�����$~$�nSm�wS<X�(2�ð�2���zG���0�st�����mʏiߜ��
+��y&���)��9�9}S�x�ꙸ0=sO�1=��]4���R�Ҟ��Tڞo���%
��s[n1?�*��%�0MA#Ѯ��Ȃ��Ş~�{��"b	U
�ݩ�����)����%�x�:��6��;	S$V<Ka��2^�p%��~�������
nG�R[�Z��A��{�
�7��A������iN��3�
���bш7��g&�p�`3YL1���=b��CO�ۀ��d6��H
+�>V�3�IܲJ
+�jr�)�m�D,Tb��.�}��xp�;��t�/yS
/�N��������b�������{^��0x<��hV�g�K�8��CX��S_|�Z����f�i�{
�

r���?�,,FX��B�rpi��o�y&��
�P�
�{(!�N\�X��m������ν�0��R�y�!�2�Jն�jǶ
��i�G��"#F�n�Zq���Z@�O]�E�5�����,�{aG��
+�R�[+�=$���4��~g��G�b���%�i���|.
+,j;�p��?���$��V���J��b%����(�_
R2^�X�B���ގW�8�j�_C5�I�^Ӧ1q��<P J
���5�o�ʟ�{����r5�`ez@}�^�Y7�J�N[�3!��A�ᣊ�w�*D�	��@է�6����
~S^��
.DQ�.��o�BJRoh�	�K�h��a���(jG=����')�jH�
+H]�g�@K���N�a�|��f��тWxX7C}�v�<\��Ӗ�$�H`�����{�Y�ZC`d	r��{f�y0�қE
�hy�ew�,t��v4��z�W1
Q4��
_�8���+�Vf������U�%⇈�;�21
k��eD�^�� M��^�1U��7�
�
v�;*���Y-+u'�������\:p���z�I�M�?���b�5�O��䖾
��~�
+\�"�s/u֬�V�,��F�?3�g
+�p��̶�����G�J��T5�����f�1t�lB����/N�Kvrv��XJ�����<� ����[;��G�DA��Ƽ͝�j~ ��
+�ev7��u����J�d�� �0
O�r���
+�ѩbr��Ho��߀��՟j��UB��=�� (eH�Q�2|>>��g�'���?�8�����K�8m��`≨G�O���s`��	�>�� O�
�N��HW���ia��G[�r����%���j��R�w��
U
+|���2�U�9o��o�
4���=�rr�;yh�[�/�����^�o3�0���9D/+���>9����ع���nR2�X��lʋ��S��qHgnh��`
m!�w��7�DŽ�&��Nw�����/�ڌH�I>��nw�����z�r��[7��F�S|�Q
��E��ñ Za�����~������gh&tM
��<�A�K�a�Րa.���v�T�NDLU�o�P�22��Ӹ�԰��O�9��YW�����d:�,wKҡ�ڟuȏ�`Q�
퓞�I)��y�3�_�Ѣ��#�����@���}�W����#��P���y{W�utO�%(��L��݃{��l���>?�kS�$W9�W��!���姷Ö�Ɯ{�����A�
A��\w�4��K�Wd"3awx������{ߕ��0r�agd<
�Q��t�N�6H��+L˂�1��E��ɯ����+�!;��7l�}���
+)=R�2�e0XC�
���'�/��^q��WɇP�ᅕ��
�;�I8��|}R��i>AH������E^����λt,l�8c�
�`
G���B�K���
��yP�Uu�LM�ig��V���8��m��ȧQ8~	wZ�VO�[�P�`�s�3��?�\��
��n���_�*;�����u�a
3�M��=f�dЖ4df�&���)����ϐ
�Q���Q` �X�S&�*&�
7�OJ�nA��$�
�yTz�-��ؗ�R��xu�Ȃ�)��-��bҔ'�
��8��:pZ�7����
�۴
$�����-�T��(�-�-�׵C؎����
�֎-��{He}��y�F����n��
'fa������&�Gu
���?߽��x�O/,��r��P ����(�!�D
B�����{Eq�
+]��V��_�ho�Z?�4��
��W��-ôEEl��%
#��j���
˩�x�c/($a:	���� wxr`�t����l�Mp�/[���/EAo��B��{T@��
�Ԇ,�G*��u�
���/�v�cku�~�6�8 ��
��u�ű6�,qDŨ\�Ph,�
��Ͼ���,V);Y�7_({�W`�%���ă�2
++����ߐH\׶Qü��[�;�I�SNJ0�4D{��\5���#X�>*�<
+�7[�� �݈Jwl�P�
��MZ�.l%��:Z;���x�aj>dSv�XI�X��TZ�-r�dM
����ǣK��oW��[�.4�Hj$W�x�!S|�˭�v�p�����h��f��l}�up�cR�5�f�H���W"�����傁STG�1��pI&�u���+�L�íB7 ��j���'meX\
+?|��.U����4��6�z��"��W���iv՚H}�'j�ի��b;�
�H�h��KX�J$�$�
��w#�ȳ�*�q�
4���X�@f/&q�&�-��l����U|�JW�
+n
B0
(��jG�,��kƸm�Z�'�ի����<�E�=)ϭ���?
�U�z�[%�V#�w���[���^7�٘�t`���Y23zw;���<Oȕ$ҫ)m�֦��}p:���InX���j�B�I�'B��O
���*��v;�k�K"���x!���
+�u4���n^x�"��9	
�6w��ma-�N#ɂ�@���j�Qe�Qb?iwj
�
+�_�~�"�YL]�Q�€S�-X1H��e�4mMF�l��k��rw÷�O���9Ո��[��;��ͫ<��}��3y
Os��hCt;u}Eܱ��)RO�>��
+~׌�� G1`�=�����+���`K�gW�-8i�ݏ:w���2��!p����j��=��{�`�@u��^���x6��2�P��%��9�X>N��
�;mD�y���pgT�л�Ȓ��@�
+�c
���O2W�/�
�O�T(m����zcU	k]]_��3�ڏ?:���td�����~u؃¡��V��%bQ}�G�cb[L�"�,_��D�*@���
a����ٓ2ķJ	T�/��T�j����.�b�Xz�A
&��ƈHW�J�.J��ʦ�qx����w_�AK{�~+�0}�۴<�
�2l����*q	��E
+
��կ�2�*̻���-%��nX;]�ҡ�9
+�
õw��7�Wi��̶�	yo{�y��¢s����=�ӊ�P+��,.�ԫ����
^���Vot���:W6��>�sV��X�����C�I���g[_\�!z�iLk�t~$[�y~�'�:�P�꼓L��
b�S�#r���O{t�\Rc
�ōS��컁
�
��7�jY��-��W��OB������iƍ/!�Z�%90�U���>�>��b���f���tEM��Gz�0r�ʜŠ�Y'�{W��i
)���R�7�#��M�h���_�E�?j���ʾ�a�!�r̩7ta�^m�3Go�]�/07ܝ��&?�3���3Z���b�u�����0�+~�#�X�	TqL�@���%1hqe��
\x����x�G͹'a�b���o���Vɽ�1P$]�dPe���:Ո��}�
+r�~�A ��8�Ŝ�.Sb���0�>�G�0?-
��
����ޖo��4���POjo
X
憐~4�)
��3?�e����it�o�3��ԛ}4�ͷ�AG<OR�2PM
��\�W�c�#�kT��!\.�VL

��b͸��"
5G.
+�n�Y���5]=LA�{9re�CF@�|f�
{��#�
��;Z�L|����<���]�9j4���x�����XÄ�/�՟��c��M�O6;�F������!4B��&Lj��̢�,������)��#�}ÑL\��+/8�z
�m�B*e��m�U]�sO�wG�{��
o[��z۷b
+$
*jWJ��%]%*��B���ڣj�q�a�Ӌ�b�ݛ�i���C�Uͬ5j�������A�;<%;�+��C�1��rچ
&9)
~���x����)au�Hx��yT�
+y�s���^!
.�
^r�&�����!l{�o!��k�6�%R�	e�NjO�l�$�
<��5� ��e����{+��7
8��1
�Ŭ�$G����b��_�Խ��*�tE&��RΙS���s����0��������g)4_�LݲMh�
� U�*�9Co�Z{4|
x�_�u�1Z�l>�t �(�
=L���	
+M.߼dT\S��f����.���L"��i=j�1
��
k��6�G'n���BK�Rg���,PP���]Ү�5�.��� uq�$��:@k�b��nů_���Aڀˡ��;�
�tV$�`�\��#�
(:��
8d�eV
t~��/Ҝ���O,��h0��,��D8v�p����%��o���(�ԳaU�$��{�~�_X5���ݨ*�~�[�pUf��C���a�C�<�nڊ��0g��(��8�w��	��
�2�4��"��,)[t����K�%x�H�<
XX	f�Ӈ�vؾq���Ru$*0?EL�;�j���=�|�'0����Ka�!A���4Ă�Q�ױ��2����kE���bXA�뭣�V':o]�.���[ey���i�_@ W
���z۪�k�iK�p�;E�#k��M�
�m�i
0
��Jq�O���,��XGR�g
U��?�s
n�}E��'$ؗ��#d�MeU��)
��Sл�Lk�
š�B�����<�	�L�O��
> �yA�yj�b�"���Ϣ;k
+f�����[s[�O��Uj
��U��e�I��#��
T'T�}�<�Q:�\G�
�o}��#��{�EO��xV���?ݝ+��vQ���
e��J�&K�?��d�..�G>��d*�GB�����k�����}�Аw�
�5��M�k���
�yF�X �u6@��|#5�|X��I��I�G�#ؤ�d�
�
�4�����U`E0�_�ٛ;#2�D���O�z�EŞ�.�֗I#��tɔ��o+~��,���G��W���޷k�� �`�����lu��Q�6t "�e��"Z��o M��<��V���s`W����gb���d�JIq�ī��*��)_���tx��o����;��]k�Lt�X�}r%bνZ}Y��\������ϔ(��Ls�� ve�*W'UW���ܜ��ό �N��󉘻)|�wz�4[�o�=Y}�UN뿈e�'"�}QX;Ӊ��
�8=I%�c4�`��'��,�B,�� ��ρ�w|��
�ocR���5f�0oq���"+�-wsҊ�JΌi�u��R܉ -�(��j�UF߂B B�uNB������f)�X�	� �9EJ~��h
�g�Z9CD�O�l���s���
*lUJT�/1�R��3}�z�V�Ȇ�
��0s���s����MK=+[��f����cE_ش��îxװj�-v�;2E�}5�>�W�.<$��Q�/+���������
+k�;�DE�����9v/L3E��(��
o�/
�bo[��'/t!9c�q��bl�X'�j��ޚ�>�0�2s�u9�����so���K���uv�����P�%�
�<�jH
��u��㤮���F�g\�m�޲�$���|
��
+���fi�H��k������R�3ۻd�;�I��#à��B�Yu
|\�g��9��c�RD"=X��Ԑ5��DU�ĥ����Mf�}Q���ͧ@�F�]T��
�W��d�Z�+�w{��D
�dI����|
LewV��)��J

��۪��F�;$�DG���?l莸�_sw���*�[
N�G�YsK�
�I=��o��� ��(�h��m��-Wq
/
��a���U
Υ6!���˥*/޼r��%�Ɲh%�\���
Nr޽��`�s�u>��_�Ҩ2��V��ű�I����剤?l"�Jwx�
(�C�
�:�}���1�P�ɮ|#r[����r1��
��8�	��U�f������L-g�v%��Ǜs0��,��0=[
�cߵ��^f��//p�������f|�'@Am�%���c-(�"L)h ��n��T.�;s:t�8�s��TC7��=��v��l�
��3����:���ggg%H\*_9�Ի���-t�U�9��ω�4��
+��[bv����S��7c.�z�D���R��
���.K�ſS�զ�ޛe�zJ����	�&!S�d
ŜM[_���7Oj֯�n
+O11\O"�y�4?C�
�y��~P�T
��o#���P{�u
�D����I�[�}�`���@V~����/�L3��@�Nf:��������ĩ\�G���0�Xl(^$�
�Ң��ʜ�+�Dh�I�g��KK1��z'�e��3	�{����J
-DC���8��|�glٗБ�H��:
b"2{�,�`g���
����Y0�M��������/x��04xE$6(�R��+d)��n����?����,M�����z�&f�Ҷ� +�Z<�~��^����~Z���p
+
��KK��rl��y���� V
g����oԕO[n��N��I�Y�fD|
�*G_�|�U��j�'/e\���
+������,/�d&�3y=e��hq�
u�=kF-D���
&����!��c�SR�V.鼫~*����0K�k���sr�[���
���W�I�2� �%H�X#g
�^F�y�ṹ��:�^+�>=���s쨸>QK]�x������At�������P�
\�6��E�%N�����7(���uR.�J��Wl
W�V
uڼɖsB�nQ%�YM3��V�DKq_�쏋�k�a��

���#3�'� ��*~ۧ�{�ݵB�R�2�)Qz�w��̍���b�m�+�½�`�mI��T.��Ԩ� [P�4�p�+��][;܍.p���:�p������^���
~�XlG� 0(
�|`�����
�v�Gܿ�8�9��?��SQG�ԏ�\I͖�ڹ�!�Y<����
+,�n�BK�}`�}.z;��Ŭj� +~*�
��ӹ���س�7��@��n�9xm��8k��(�j3V���ʱk��-�����Ƥ�R2/~�j\W��F�i@�3��I���̶��"X�����ö2�uM�>�����7i��,j����m!](
+OfN��4�7$���۠hI0���ć�`�1��L��
+-�]q�W����L
�J���/S #��$�	�dyu���VjZ��b6�5�+�����ζ9S��j�a��E>�>�F�gv$t�'w at G
+ �vW�p�N�Ѕ�'�!�3�9�b�}��X��ǐ���z�(40�HsU6����w����"�(�
+f|! l��m��ո�\t��
e����U�j�kK {·K�7�1��7��f���U{}d�m�f7���7�
+��� w�qW��_� ~~�z��1��
;v,�.��եBD\(��N�kk5�����8:V��
��
X���\Ĩ?
O���8���
+�]��͊��纕�
B&����ڎ%W��r��~J��Ҏ�*^���^�<.��1��~����,�����x�.�g��[{��ҁc8�� @��;�T��(cB��U�,-��i�zM�|�Z�.�%ݝ����Ƽp�Q�
��8XZmr`.{���`�IV�=,�ٸq�!qı�ŵR�6l�ɑ$��$���'��&u({�7du�(QZ��ԞZ*���c�J� �A�p�����p���-��~p�S����##�4C]�eF�ÁF{6�R����Kf�l
+��):�FDz���S}g��|���8D4�p�ì��嶌�7�t��� J�bU�
f����&lďk�i�
�N�
�uvi������		kP����f�lM3��
)�țH�i[���#In�3,[G�%`�%� �$s�.���R�/ `G����)���Ș����yx���g!,�5��4�k�7ˎT�}e��H �?�]h8	��D�
� ��
iM;[��C��^�r��3 fu8a��
����yI��Që�=OT��&n�
���z�D�Ό��!g����7eut�25���X=q��y at fu����[_�9YI8�v��ύQ�V�
��[%�fx�JX���kJ�� Kޑ�ޯ>�?�+ńœz��W��&��p�S��4V�#o��#B[\[��u�@�tϱ�7����F���g����]%�Ei�S���b�Y��/��z�(��Ǣ6��ȁD
�F��m���P�}�;X�
ɕ��.z=L���=H���I��mdo�P�fLw<D\�0�+)���#����
&�{{��xY���UHɗ�F��M�.\���
+ۅoK���dx��N��P!5��C����1dxu�E�w-^�Ӹ
��
�
�*6π#K�$�ѷұR�
F^1+�[R�m�^V* ��v��7\�R�
�R	�𛔕���ˮ��^���.�d���3n�����e�G�ҷ��~'�&^�o�"��Ƭ��
+�*N
�x�����sߝ�
��#v��n[�<ܤ��$E�3I�U/�SY�o�W��=�U����җy
N�;T
��K|v��$b������_�N��|}��.
�QY���w���]_,Y���8��F�P��&BG���Y���^^����
G9�!Ə�:���DΥ���:��������c
�T�1� A�;��-���
�"���PHBD+�:�J��Q�d��qͺ����TߞL� � �,ѽ��R�}�M�_�.�}羂m!r`ц�?2?5-!{m��>�R�s��o��F��80��`;`��.˹��n�˞�r���G�:;c�x���)�����͋�7��`K�!)
��$W�,�q��(�
�\�*��g��Tc�����=� �_Z�'B
�
�⾈4�"�E�Ji�:PcA�84Κc�r̙D�^�
�wz�=K)"q�U����q-:�L��
�絜�4�5�&�"{z�
+y��U��Ap�������
�93��C47�j���ߊ�
�8'�
+n�κh�sD��|�fA�hu���ٹ���t=��>�0m��w�g��j�x���^t�}��:��1�𾸆�=���h�7]7���M�3��l8��}}�PY����
�ubP��׏�� c�b���$��?6)�uO��y+/�E&?��p|�|��'0[+��a�1 CEy�&�<3�j���B�F�ă��鰅�6H|Ѭ�%uN
{�?y#�s�Nd]��� �>2��ԩtę�sec��Ң�v%�t�g�/��}�u)śbT�L�����
+T1�8>�oӸ��kD1��tY�ԅ������P����4O��ؖQ}[��>�KJ�$�~�GW��γ4�j�q)�7��K��Y��Z��G�b�(��J��n�cT	�(�y�'�j�*Ӗaܞ�/��P�v�{
=X �+���/f�DQzv��h��_(�|�Sq��5Q}$̝;\{
�qW�³yw"�|����� m�'!`�O䛁���R�gBF��h���-ۑG���Ԍ��A+��I
�>'h�0�
���e1�.�(6��W	��u=_p���
u����
>�����L��
��_:
��픆$ǰy�9!��%�Ã��Md'��ge:]�g���nR��DÖ\ĉ�������1@��e���5)ϙ(ׇ�s�Y��O�0��$���&%�����3�nvRF�E2��?�,3h��lN6U�Ò�c���r��Q
H�'�53t���O+c�?�Õ�Z�1�o̕�/%)\F_9$�r��
o#G�~�=�3!�^F������ݑ�/���J���
"��b����&
�� ]B����<�$цQK 7�)c�ą��m��[we���؁�p�~�M�!.2}-qo�~�,�~�u1�i=�_ԏ�W	��iA�(Ȼ����*�G��́?f!?��D��=�
�]}�L��v����6�[%վ�¤sO�e�܆��ɘ&
'��`Q�`B�	{
*���G��x}m�l�F���X9������P�r(4�i�}+)f���I���1xn�B��S�h8M����SU�(Xϋ�*	�y�t at L�,�/Xw�`�
Z0�ڢ��n��W��QbL|�����<7���S} [...]
����R*�F���	D F���-�Q�Z+����
+j\�!�"��ſ3��q�
�{����.t��;?����'�8c@��^PL�-pʫE܉I��u���~�ni�?����?iM�m�5c�q�S��q
+���.43�Ag̈���'
��J
��Ս����{f�SuY��=
6Wׄ��)J�7��#7t�-�-A.�2t����e�S�
X����9���X���-]SDb��1�w�==^is$���3�Oޛ
�{�m&��u���Jc�T���~jK�1��x�������/�G��a�2󃾑3�M��O�~^'4W�a������>aE�q7yc�z�c'
q��_��a
�o
+}
F�T��	�U��m���;��:�@Iȋn��!�{�S�V>�Aty���~�b��߁E�-�֑��
�Ѽ�$�(*�#�W@�=�
_ڙ[J<b[����W�NbYK��ژ<bh�!ןƒ!: } r���7�n����J����F
�BM�ЕN
?
�iRD�Egn�
a��.�yƜ�T�B�]0��Tzp�%���դ�b�ji��B�?�U5���������>&��o�|
�8�����
Z4���.�s/x\ d���\����/�z�����n�ϋ3
��et����6-�`�C+Υ#�f4(39;%�÷C���-�;
�K
Q��v��=V�R`q
��y��p�<"�?
j�3�	�]#I�F33�	�ox8j�Q!-��KJ����O����A\�.�]���X�!���&
m���6�ﰣ�Eݢ~�z|稰8��wd�2VE �Kw�[ ƨ
�RZ.H���@�n��m��:1.��
���>�9�e��c�D��4
+���'<�jc�1�+�L3�W�x�#��AZ6�����`H%�(%�i�-��y�m�ۼ�֣���'Y��؊
�g>��J
!��CՋ3��*^�zv΂F7
ј%	�[��ٰL�h���9���c��]C�g©�Hb���A7lԸH=
�9'�m��EOp�rO
m�"��(u���H0����+�*��uC;"
j0KyU�4��qn���X���|�`��
J���;*�𒗨���֑{�*�?<K/b����0��j�
L$
צ|Ӎm�1��H���L�=w��揜3DC�Z�-9����N�Dz��܍��+^&D�0�h����6�@��H�5��x�;d:`A�Fy��;t�k��h��
C�K.])(F1%H&�����Wb�s
-.֩-����� ������;R'����+
����|W �06#-�n+������cl�{`�4{���8w��BTgs�
GtY�t@(>L`>;�o\��1
_���+�W+W#C����ZA
#������K�1�׮j�%�����tt��-�b�Λ{^L��,aln�x����	
lO?�t��g��N�-淋k��H3��"0���hLi��>���MM�L��	�iV at u �~Q��:�/j�'���kUb�[v��Gf�_��m"�~��[�$��a�Y�Z�^��A��v�O.�_M��8<6k�ô��A�5��T��	���>��Axl�5]^?�Y�V�4����aI(=�FlĘ�}F=z��?��(�3
Zhp0�L�5(���5,J�&����
M%�$��2��$
/M'~��4=��h��
+endstream
+endobj
+2667 0 obj <<
+/Type /FontDescriptor
+/FontName /QSVAAB+CMTT10
+/Flags 4
+/FontBBox [-4 -235 731 800]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/backslash/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 2666 0 R
+>> endobj
+2668 0 obj <<
+/Length1 734
+/Length2 1058
+/Length3 0
+/Length 1575      
+/Filter /FlateDecode
+>>
+stream
+xڭ�}<TY�wRѬD*[�㭼��5F�ɧ�db�aHT�gg�\����i�0
+۔���L$m$moz����Q*�RԆ�H
+��J{i��������<��;����y�8k�,
fab�3�y &;(h)�\�D;;���L��'�= D�A�!W2��=��=�T�
`b�8)"��{�Øh	`�`)���'��Ex>k0>��\ EA�؉hG��X�B�  @�2
1�4�+����Oi�\�K�q(`�C: 
Q���8 �#�$?
�
�I����Yr���ڏ��E�'Bи��H"��R���T<Qbc�D.�X���P��
Q�?��h��
DƏ2�

O�b�Dܶq��UkB�N��s���!bYP�䟦c���7�͑"
+Jv!�!\��ϻ�'��-�cD���
�R^

<���@�X`�Krc2��-I ��8���
+H�X�����0�fg*pv�����h	����R),�����8�M�a�'�����Ԩ���ʼnޅ�J�8���~g�4U}�r?��
���M��J׍
�55��e��<:�Җ����6��4�v�p�r�ϛ��e�=�X�N�q�\7�J��H[�ZXs�����c�2�[��ꫫ�1eW���/Y��E�*,]H�
+4��T��M�k�ʜ�֘��4�tz8�]��
)4�����������;I7����W����UeTdZ�im��Bescy]Ok�U�+���}ү�
}����B�ٞ�^o��I���Es
�,}��l�[���˲NW�<�ya�g�i�0�*2`�	c�o��V
C�H�a���ߥ�cz����,Q9��w��x�Gv�_���/Ț<D\F�z�
p�WC�Pl5;I�ݼ�̺���z��7�*��Jt͋cY���dZ��̛���}� �o˼��e���x“z�>: �.{���������
�[
�C�Ӧ�[s�
+>g�<U��w�Ƨ�4��3��چ$��Աc�0Y�?��zS�Ѧގ��L�`x�`t�p#��t�6���c QsVZ
k^�Lz'	/%L͟�8o��eخ��Y�����˛���#Hi�恲���7ݞDդY�����: k�@E��H�C����Z�Au7"�f(��ؙ��
r�W

u��gJ�
yQݶݘ��q%�􌨨������m���$f�_�a��ڵ�JyM�34�ES/i�����g��^v/[}�(��s($��n��ߵ֩�V��I��e
+Rv��� ���a������
G��V��>l��
e���YxTeX�e����Թ�:���E˖C��
;F�J�G�-o�X��4��C��Je�MdO�{��s�٬�
+#���������^��]�i3�;ۈ�ے<V��0�Bq�{��֔����-��[\X1�uy,%�A��Xi6�gVl�z�hݖ6;�`����-����O��3}�Sgm�J�V�s>�b�.�'�������3�	�I!ן�A/s�B���7\�Mޣ�}嶾�Iph�~Վi
������E���\��2�>y�-��\���`�G�Z�U�xs��k��(�mp�5?��e)��iB7����`v��4�ԝ� ��
+endstream
+endobj
+2669 0 obj <<
+/Type /FontDescriptor
+/FontName /YGSWNA+CMTT8
+/Flags 4
+/FontBBox [-5 -232 545 699]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 76
+/XHeight 431
+/CharSet (/i)
+/FontFile 2668 0 R
+>> endobj
+2670 0 obj <<
+/Length1 804
+/Length2 1076
+/Length3 0
+/Length 1632      
+/Filter /FlateDecode
+>>
+stream
+xڭR}\S�ׄ�Y� �5D��!�對��x!
HyQ�l�1l;��ll����
+I��
+Iz�D �
��Lyɤ�J#�4�
:�����?�?�s��=��}�������:�-U�
+(�u$�  ���
�� 4&3��(��`������A�Dx>�P��ј@��I ʢU��H�@$ PA��APX ��T
	L��&�PK�*Q
�•$-
�'�[L�DV������ �F"':
  a�*
A�
+S�@՘�Ɲp�Kāh*�2ꟕL�0P� �2�(�*\��P�'Ҹ8��I�CM'�5�TK�Om��:��4�)D�Q�逵pj$9TaF��j�j0�T��@��Jaf����L��� '�P��.M�kR�
��{�,�F1
m���v=#�������8<
B���k�4��Wa:5�z� P
�GQy	� �N� ����

NR- at o$7RGF�&~�X
��$�L�HӞ���3Ā-����G ���7�Ni$�#'/�ZƳ8�V�*i��q����}��Y!��
�]:3P]Wq�\g���
�
���vM�he��϶oQ�S'�Φ̷��
lI-���X�iC_Qz�S�p��ҫ_�$���Fkף��U
��*>�-o-�x�l5+8���M���M�狷z�bdE�wr�ո�]"��O�xO�{+mއ�6���d%�ή���!�d�=<�t�غ'��_U6-�U���-i
U yw͸$̼�ճ���*�”NZ��q�_V�ӓ=�K[<��^�8q�Sz�_{ [...]
,��4YscS�lZ{�O�W�~�dz���w���ԲcV�X��s�+i�j
pH5�$�����gqLp at .
��w?p�>�u ��hd��m8k�ڸ�{{�����7���I��E�5�g�7���y�Ϊ!��(�7
=�c��-v�e:
�$ny�q:f�ws��q�E����
!9˿+�y�����(��>6��vUgg��e؀�-�v�L=�F�o���b�,����w�kۤ[
8jY���E%�6��/{�����x�kW���1��b��ೌ��䮰/����=��X'�R�w�]\Cl�~t��R�g(���pm} _�>rq���3]�*�86^��+i�v!�
�2�!�����PBu%��J�/@�Rl^;:�2?`�
�[)i���ٟ� �1/Ζ�.m

�LE�β��l�e����wImo�]�U4�zB�5��_�٧?��l�kԾ��S
�I�����*��=�,`<�}t�D�fܒ��ܽ�om����|��c��]� s�5��\�:�yH˲��0k�� ���b�/�c2>Kf��
2j���
��
+�
+endstream
+endobj
+2671 0 obj <<
+/Type /FontDescriptor
+/FontName /RXNEKG+MSAM10
+/Flags 4
+/FontBBox [8 -463 1331 1003]
+/Ascent 692
+/CapHeight 550
+/Descent 0
+/ItalicAngle 0
+/StemV 40
+/XHeight 431
+/CharSet (/check)
+/FontFile 2670 0 R
+>> endobj
+464 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /UICWPD+CMBX10
+/FontDescriptor 2625 0 R
+/FirstChar 12
+/LastChar 123
+/Widths 2619 0 R
+>> endobj
+509 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /JGUSUK+CMBX12
+/FontDescriptor 2627 0 R
+/FirstChar 12
+/LastChar 122
+/Widths 2617 0 R
+>> endobj
+1750 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YWRFWO+CMBXTI10
+/FontDescriptor 2629 0 R
+/FirstChar 98
+/LastChar 117
+/Widths 2600 0 R
+>> endobj
+453 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ZVGVLQ+CMCSC10
+/FontDescriptor 2631 0 R
+/FirstChar 45
+/LastChar 121
+/Widths 2622 0 R
+>> endobj
+756 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /QFEFVW+CMEX10
+/FontDescriptor 2633 0 R
+/FirstChar 16
+/LastChar 114
+/Widths 2608 0 R
+>> endobj
+691 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LOCWHD+CMMI10
+/FontDescriptor 2635 0 R
+/FirstChar 11
+/LastChar 122
+/Widths 2613 0 R
+>> endobj
+788 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /DBUDYM+CMMI5
+/FontDescriptor 2637 0 R
+/FirstChar 109
+/LastChar 109
+/Widths 2606 0 R
+>> endobj
+754 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /APZAUH+CMMI7
+/FontDescriptor 2639 0 R
+/FirstChar 59
+/LastChar 121
+/Widths 2609 0 R
+>> endobj
+465 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BXFZOO+CMR10
+/FontDescriptor 2641 0 R
+/FirstChar 1
+/LastChar 124
+/Widths 2618 0 R
+>> endobj
+454 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YCYSPS+CMR12
+/FontDescriptor 2643 0 R
+/FirstChar 44
+/LastChar 117
+/Widths 2621 0 R
+>> endobj
+452 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BTSFPV+CMR17
+/FontDescriptor 2645 0 R
+/FirstChar 40
+/LastChar 118
+/Widths 2623 0 R
+>> endobj
+662 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /WBHEWL+CMR5
+/FontDescriptor 2647 0 R
+/FirstChar 43
+/LastChar 49
+/Widths 2614 0 R
+>> endobj
+753 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /IETANS+CMR7
+/FontDescriptor 2649 0 R
+/FirstChar 40
+/LastChar 120
+/Widths 2610 0 R
+>> endobj
+830 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LDWUKB+CMR8
+/FontDescriptor 2651 0 R
+/FirstChar 40
+/LastChar 121
+/Widths 2604 0 R
+>> endobj
+729 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PTPXIX+CMSL10
+/FontDescriptor 2653 0 R
+/FirstChar 101
+/LastChar 121
+/Widths 2611 0 R
+>> endobj
+1511 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /XWRTTW+CMSL9
+/FontDescriptor 2655 0 R
+/FirstChar 97
+/LastChar 120
+/Widths 2601 0 R
+>> endobj
+694 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /JCYYHB+CMSY10
+/FontDescriptor 2657 0 R
+/FirstChar 0
+/LastChar 120
+/Widths 2612 0 R
+>> endobj
+789 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /NOPBSI+CMSY5
+/FontDescriptor 2659 0 R
+/FirstChar 0
+/LastChar 48
+/Widths 2605 0 R
+>> endobj
+757 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ZQLTBN+CMSY7
+/FontDescriptor 2661 0 R
+/FirstChar 0
+/LastChar 48
+/Widths 2607 0 R
+>> endobj
+636 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /NPSIZJ+CMTI10
+/FontDescriptor 2663 0 R
+/FirstChar 11
+/LastChar 121
+/Widths 2615 0 R
+>> endobj
+455 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GEWDVW+CMTI12
+/FontDescriptor 2665 0 R
+/FirstChar 12
+/LastChar 121
+/Widths 2620 0 R
+>> endobj
+609 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /QSVAAB+CMTT10
+/FontDescriptor 2667 0 R
+/FirstChar 35
+/LastChar 125
+/Widths 2616 0 R
+>> endobj
+1468 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YGSWNA+CMTT8
+/FontDescriptor 2669 0 R
+/FirstChar 105
+/LastChar 105
+/Widths 2602 0 R
+>> endobj
+933 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /RXNEKG+MSAM10
+/FontDescriptor 2671 0 R
+/FirstChar 88
+/LastChar 88
+/Widths 2603 0 R
+>> endobj
+456 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2672 0 R
+/Kids [446 0 R 461 0 R 506 0 R 563 0 R 587 0 R 591 0 R]
+>> endobj
+610 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2672 0 R
+/Kids [605 0 R 622 0 R 632 0 R 644 0 R 659 0 R 676 0 R]
+>> endobj
+696 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2672 0 R
+/Kids [688 0 R 712 0 R 725 0 R 737 0 R 749 0 R 769 0 R]
+>> endobj
+791 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2672 0 R
+/Kids [785 0 R 797 0 R 806 0 R 810 0 R 822 0 R 826 0 R]
+>> endobj
+849 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2672 0 R
+/Kids [846 0 R 860 0 R 871 0 R 878 0 R 889 0 R 908 0 R]
+>> endobj
+934 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2672 0 R
+/Kids [926 0 R 937 0 R 947 0 R 955 0 R 962 0 R 968 0 R]
+>> endobj
+979 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2673 0 R
+/Kids [975 0 R 983 0 R 991 0 R 998 0 R 1006 0 R 1010 0 R]
+>> endobj
+1021 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2673 0 R
+/Kids [1015 0 R 1023 0 R 1030 0 R 1041 0 R 1049 0 R 1058 0 R]
+>> endobj
+1070 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2673 0 R
+/Kids [1065 0 R 1074 0 R 1082 0 R 1091 0 R 1099 0 R 1106 0 R]
+>> endobj
+1119 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2673 0 R
+/Kids [1113 0 R 1123 0 R 1130 0 R 1135 0 R 1139 0 R 1147 0 R]
+>> endobj
+1163 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2673 0 R
+/Kids [1156 0 R 1165 0 R 1172 0 R 1180 0 R 1187 0 R 1194 0 R]
+>> endobj
+1207 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2673 0 R
+/Kids [1201 0 R 1209 0 R 1217 0 R 1226 0 R 1232 0 R 1238 0 R]
+>> endobj
+1255 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2674 0 R
+/Kids [1250 0 R 1263 0 R 1273 0 R 1286 0 R 1295 0 R 1302 0 R]
+>> endobj
+1317 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2674 0 R
+/Kids [1310 0 R 1320 0 R 1329 0 R 1349 0 R 1357 0 R 1364 0 R]
+>> endobj
+1374 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2674 0 R
+/Kids [1371 0 R 1376 0 R 1380 0 R 1387 0 R 1396 0 R 1404 0 R]
+>> endobj
+1411 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2674 0 R
+/Kids [1408 0 R 1417 0 R 1421 0 R 1429 0 R 1436 0 R 1447 0 R]
+>> endobj
+1454 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2674 0 R
+/Kids [1451 0 R 1457 0 R 1465 0 R 1477 0 R 1488 0 R 1492 0 R]
+>> endobj
+1499 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2674 0 R
+/Kids [1496 0 R 1503 0 R 1508 0 R 1513 0 R 1517 0 R 1521 0 R]
+>> endobj
+1530 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2675 0 R
+/Kids [1527 0 R 1532 0 R 1539 0 R 1543 0 R 1548 0 R 1554 0 R]
+>> endobj
+1562 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2675 0 R
+/Kids [1558 0 R 1566 0 R 1573 0 R 1579 0 R 1588 0 R 1593 0 R]
+>> endobj
+1601 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2675 0 R
+/Kids [1598 0 R 1605 0 R 1609 0 R 1613 0 R 1618 0 R 1623 0 R]
+>> endobj
+1636 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2675 0 R
+/Kids [1631 0 R 1638 0 R 1648 0 R 1652 0 R 1658 0 R 1662 0 R]
+>> endobj
+1676 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2675 0 R
+/Kids [1673 0 R 1678 0 R 1682 0 R 1688 0 R 1692 0 R 1697 0 R]
+>> endobj
+1705 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2675 0 R
+/Kids [1702 0 R 1707 0 R 1720 0 R 1735 0 R 1739 0 R 1743 0 R]
+>> endobj
+1751 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2676 0 R
+/Kids [1747 0 R 1753 0 R 1762 0 R 1766 0 R 1771 0 R 1775 0 R]
+>> endobj
+1782 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2676 0 R
+/Kids [1779 0 R 1784 0 R 1793 0 R 1811 0 R 1815 0 R 1819 0 R]
+>> endobj
+1826 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2676 0 R
+/Kids [1823 0 R 1828 0 R 1832 0 R 1836 0 R 1840 0 R 1845 0 R]
+>> endobj
+1955 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2676 0 R
+/Kids [1952 0 R 2108 0 R 2254 0 R 2401 0 R 2526 0 R 2597 0 R]
+>> endobj
+2672 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2677 0 R
+/Kids [456 0 R 610 0 R 696 0 R 791 0 R 849 0 R 934 0 R]
+>> endobj
+2673 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2677 0 R
+/Kids [979 0 R 1021 0 R 1070 0 R 1119 0 R 1163 0 R 1207 0 R]
+>> endobj
+2674 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2677 0 R
+/Kids [1255 0 R 1317 0 R 1374 0 R 1411 0 R 1454 0 R 1499 0 R]
+>> endobj
+2675 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2677 0 R
+/Kids [1530 0 R 1562 0 R 1601 0 R 1636 0 R 1676 0 R 1705 0 R]
+>> endobj
+2676 0 obj <<
+/Type /Pages
+/Count 24
+/Parent 2677 0 R
+/Kids [1751 0 R 1782 0 R 1826 0 R 1955 0 R]
+>> endobj
+2677 0 obj <<
+/Type /Pages
+/Count 168
+/Kids [2672 0 R 2673 0 R 2674 0 R 2675 0 R 2676 0 R]
+>> endobj
+2678 0 obj <<
+/Type /Outlines
+/First 7 0 R
+/Last 443 0 R
+/Count 14
+>> endobj
+443 0 obj <<
+/Title 444 0 R
+/A 441 0 R
+/Parent 2678 0 R
+/Prev 439 0 R
+>> endobj
+439 0 obj <<
+/Title 440 0 R
+/A 437 0 R
+/Parent 2678 0 R
+/Prev 427 0 R
+/Next 443 0 R
+>> endobj
+435 0 obj <<
+/Title 436 0 R
+/A 433 0 R
+/Parent 427 0 R
+/Prev 431 0 R
+>> endobj
+431 0 obj <<
+/Title 432 0 R
+/A 429 0 R
+/Parent 427 0 R
+/Next 435 0 R
+>> endobj
+427 0 obj <<
+/Title 428 0 R
+/A 425 0 R
+/Parent 2678 0 R
+/Prev 391 0 R
+/Next 439 0 R
+/First 431 0 R
+/Last 435 0 R
+/Count -2
+>> endobj
+423 0 obj <<
+/Title 424 0 R
+/A 421 0 R
+/Parent 391 0 R
+/Prev 419 0 R
+>> endobj
+419 0 obj <<
+/Title 420 0 R
+/A 417 0 R
+/Parent 391 0 R
+/Prev 415 0 R
+/Next 423 0 R
+>> endobj
+415 0 obj <<
+/Title 416 0 R
+/A 413 0 R
+/Parent 391 0 R
+/Prev 395 0 R
+/Next 419 0 R
+>> endobj
+411 0 obj <<
+/Title 412 0 R
+/A 409 0 R
+/Parent 395 0 R
+/Prev 407 0 R
+>> endobj
+407 0 obj <<
+/Title 408 0 R
+/A 405 0 R
+/Parent 395 0 R
+/Prev 403 0 R
+/Next 411 0 R
+>> endobj
+403 0 obj <<
+/Title 404 0 R
+/A 401 0 R
+/Parent 395 0 R
+/Prev 399 0 R
+/Next 407 0 R
+>> endobj
+399 0 obj <<
+/Title 400 0 R
+/A 397 0 R
+/Parent 395 0 R
+/Next 403 0 R
+>> endobj
+395 0 obj <<
+/Title 396 0 R
+/A 393 0 R
+/Parent 391 0 R
+/Next 415 0 R
+/First 399 0 R
+/Last 411 0 R
+/Count -4
+>> endobj
+391 0 obj <<
+/Title 392 0 R
+/A 389 0 R
+/Parent 2678 0 R
+/Prev 327 0 R
+/Next 427 0 R
+/First 395 0 R
+/Last 423 0 R
+/Count -4
+>> endobj
+387 0 obj <<
+/Title 388 0 R
+/A 385 0 R
+/Parent 371 0 R
+/Prev 383 0 R
+>> endobj
+383 0 obj <<
+/Title 384 0 R
+/A 381 0 R
+/Parent 371 0 R
+/Prev 379 0 R
+/Next 387 0 R
+>> endobj
+379 0 obj <<
+/Title 380 0 R
+/A 377 0 R
+/Parent 371 0 R
+/Prev 375 0 R
+/Next 383 0 R
+>> endobj
+375 0 obj <<
+/Title 376 0 R
+/A 373 0 R
+/Parent 371 0 R
+/Next 379 0 R
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 369 0 R
+/Parent 327 0 R
+/Prev 351 0 R
+/First 375 0 R
+/Last 387 0 R
+/Count -4
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 365 0 R
+/Parent 351 0 R
+/Prev 363 0 R
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 361 0 R
+/Parent 351 0 R
+/Prev 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 357 0 R
+/Parent 351 0 R
+/Prev 355 0 R
+/Next 363 0 R
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 353 0 R
+/Parent 351 0 R
+/Next 359 0 R
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 349 0 R
+/Parent 327 0 R
+/Prev 331 0 R
+/Next 371 0 R
+/First 355 0 R
+/Last 367 0 R
+/Count -4
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 345 0 R
+/Parent 331 0 R
+/Prev 343 0 R
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 341 0 R
+/Parent 331 0 R
+/Prev 339 0 R
+/Next 347 0 R
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 337 0 R
+/Parent 331 0 R
+/Prev 335 0 R
+/Next 343 0 R
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 333 0 R
+/Parent 331 0 R
+/Next 339 0 R
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 329 0 R
+/Parent 327 0 R
+/Next 351 0 R
+/First 335 0 R
+/Last 347 0 R
+/Count -4
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 325 0 R
+/Parent 2678 0 R
+/Prev 303 0 R
+/Next 391 0 R
+/First 331 0 R
+/Last 371 0 R
+/Count -3
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 321 0 R
+/Parent 303 0 R
+/Prev 319 0 R
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 317 0 R
+/Parent 303 0 R
+/Prev 315 0 R
+/Next 323 0 R
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 303 0 R
+/Prev 311 0 R
+/Next 319 0 R
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 303 0 R
+/Prev 307 0 R
+/Next 315 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 303 0 R
+/Next 311 0 R
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 2678 0 R
+/Prev 267 0 R
+/Next 327 0 R
+/First 307 0 R
+/Last 323 0 R
+/Count -5
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 267 0 R
+/Prev 295 0 R
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 267 0 R
+/Prev 291 0 R
+/Next 299 0 R
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 267 0 R
+/Prev 287 0 R
+/Next 295 0 R
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 267 0 R
+/Prev 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 267 0 R
+/Prev 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 267 0 R
+/Prev 275 0 R
+/Next 283 0 R
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 267 0 R
+/Prev 271 0 R
+/Next 279 0 R
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 267 0 R
+/Next 275 0 R
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 2678 0 R
+/Prev 235 0 R
+/Next 303 0 R
+/First 271 0 R
+/Last 299 0 R
+/Count -8
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 235 0 R
+/Prev 259 0 R
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 235 0 R
+/Prev 255 0 R
+/Next 263 0 R
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 235 0 R
+/Prev 251 0 R
+/Next 259 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 235 0 R
+/Prev 247 0 R
+/Next 255 0 R
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 235 0 R
+/Prev 243 0 R
+/Next 251 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 235 0 R
+/Prev 239 0 R
+/Next 247 0 R
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 235 0 R
+/Next 243 0 R
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 2678 0 R
+/Prev 75 0 R
+/Next 267 0 R
+/First 239 0 R
+/Last 263 0 R
+/Count -7
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 75 0 R
+/Prev 187 0 R
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 187 0 R
+/Prev 223 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 187 0 R
+/Prev 219 0 R
+/Next 227 0 R
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 187 0 R
+/Prev 215 0 R
+/Next 223 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 187 0 R
+/Prev 211 0 R
+/Next 219 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 187 0 R
+/Prev 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 187 0 R
+/Prev 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 187 0 R
+/Prev 199 0 R
+/Next 207 0 R
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 187 0 R
+/Prev 195 0 R
+/Next 203 0 R
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 187 0 R
+/Prev 191 0 R
+/Next 199 0 R
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 187 0 R
+/Next 195 0 R
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 75 0 R
+/Prev 95 0 R
+/Next 231 0 R
+/First 191 0 R
+/Last 227 0 R
+/Count -10
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 95 0 R
+/Prev 155 0 R
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 155 0 R
+/Prev 175 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 155 0 R
+/Prev 171 0 R
+/Next 179 0 R
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 155 0 R
+/Prev 167 0 R
+/Next 175 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 155 0 R
+/Prev 163 0 R
+/Next 171 0 R
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 155 0 R
+/Prev 159 0 R
+/Next 167 0 R
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 155 0 R
+/Next 163 0 R
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 95 0 R
+/Prev 151 0 R
+/Next 183 0 R
+/First 159 0 R
+/Last 179 0 R
+/Count -6
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 95 0 R
+/Prev 123 0 R
+/Next 155 0 R
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 123 0 R
+/Prev 143 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 123 0 R
+/Prev 139 0 R
+/Next 147 0 R
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 123 0 R
+/Prev 135 0 R
+/Next 143 0 R
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 123 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 123 0 R
+/Prev 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 123 0 R
+/Next 131 0 R
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 95 0 R
+/Prev 119 0 R
+/Next 151 0 R
+/First 127 0 R
+/Last 147 0 R
+/Count -6
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 95 0 R
+/Prev 115 0 R
+/Next 123 0 R
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 95 0 R
+/Prev 111 0 R
+/Next 119 0 R
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 95 0 R
+/Prev 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 95 0 R
+/Prev 103 0 R
+/Next 111 0 R
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 95 0 R
+/Prev 99 0 R
+/Next 107 0 R
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 95 0 R
+/Next 103 0 R
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 75 0 R
+/Prev 91 0 R
+/Next 187 0 R
+/First 99 0 R
+/Last 183 0 R
+/Count -10
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 75 0 R
+/Prev 87 0 R
+/Next 95 0 R
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 75 0 R
+/Prev 83 0 R
+/Next 91 0 R
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 75 0 R
+/Prev 79 0 R
+/Next 87 0 R
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 75 0 R
+/Next 83 0 R
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 2678 0 R
+/Prev 63 0 R
+/Next 235 0 R
+/First 79 0 R
+/Last 231 0 R
+/Count -7
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 63 0 R
+/Prev 67 0 R
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 63 0 R
+/Next 71 0 R
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 2678 0 R
+/Prev 47 0 R
+/Next 75 0 R
+/First 67 0 R
+/Last 71 0 R
+/Count -2
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 47 0 R
+/Prev 55 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 47 0 R
+/Prev 51 0 R
+/Next 59 0 R
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 47 0 R
+/Next 55 0 R
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 2678 0 R
+/Prev 15 0 R
+/Next 63 0 R
+/First 51 0 R
+/Last 59 0 R
+/Count -3
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 27 0 R
+/Prev 31 0 R
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 31 0 R
+/Prev 35 0 R
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 31 0 R
+/Next 39 0 R
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 27 0 R
+/Next 43 0 R
+/First 35 0 R
+/Last 39 0 R
+/Count -2
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 15 0 R
+/Prev 23 0 R
+/First 31 0 R
+/Last 43 0 R
+/Count -2
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 15 0 R
+/Prev 19 0 R
+/Next 27 0 R
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 2678 0 R
+/Prev 11 0 R
+/Next 47 0 R
+/First 19 0 R
+/Last 27 0 R
+/Count -3
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 2678 0 R
+/Prev 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 2678 0 R
+/Next 11 0 R
+>> endobj
+2679 0 obj <<
+/Names [(Doc-Start) 451 0 R (Item.1) 740 0 R (Item.10) 913 0 R (Item.11) 914 0 R (Item.12) 915 0 R (Item.13) 916 0 R]
+/Limits [(Doc-Start) (Item.13)]
+>> endobj
+2680 0 obj <<
+/Names [(Item.14) 917 0 R (Item.15) 918 0 R (Item.16) 929 0 R (Item.17) 930 0 R (Item.18) 931 0 R (Item.19) 932 0 R]
+/Limits [(Item.14) (Item.19)]
+>> endobj
+2681 0 obj <<
+/Names [(Item.2) 741 0 R (Item.20) 1332 0 R (Item.21) 1333 0 R (Item.22) 1334 0 R (Item.23) 1335 0 R (Item.24) 1336 0 R]
+/Limits [(Item.2) (Item.24)]
+>> endobj
+2682 0 obj <<
+/Names [(Item.25) 1337 0 R (Item.26) 1338 0 R (Item.27) 1339 0 R (Item.28) 1340 0 R (Item.29) 1341 0 R (Item.3) 742 0 R]
+/Limits [(Item.25) (Item.3)]
+>> endobj
+2683 0 obj <<
+/Names [(Item.30) 1342 0 R (Item.31) 1343 0 R (Item.32) 1344 0 R (Item.33) 1345 0 R (Item.34) 1346 0 R (Item.35) 1352 0 R]
+/Limits [(Item.30) (Item.35)]
+>> endobj
+2684 0 obj <<
+/Names [(Item.36) 1383 0 R (Item.37) 1390 0 R (Item.38) 1391 0 R (Item.39) 1399 0 R (Item.4) 892 0 R (Item.40) 1400 0 R]
+/Limits [(Item.36) (Item.40)]
+>> endobj
+2685 0 obj <<
+/Names [(Item.41) 1432 0 R (Item.42) 1433 0 R (Item.43) 1434 0 R (Item.44) 1439 0 R (Item.45) 1440 0 R (Item.46) 1469 0 R]
+/Limits [(Item.41) (Item.46)]
+>> endobj
+2686 0 obj <<
+/Names [(Item.47) 1470 0 R (Item.48) 1471 0 R (Item.49) 1472 0 R (Item.5) 893 0 R (Item.50) 1473 0 R (Item.51) 1474 0 R]
+/Limits [(Item.47) (Item.51)]
+>> endobj
+2687 0 obj <<
+/Names [(Item.52) 1480 0 R (Item.53) 1481 0 R (Item.54) 1482 0 R (Item.55) 1483 0 R (Item.56) 1484 0 R (Item.57) 1685 0 R]
+/Limits [(Item.52) (Item.57)]
+>> endobj
+2688 0 obj <<
+/Names [(Item.58) 1686 0 R (Item.59) 1796 0 R (Item.6) 894 0 R (Item.60) 1797 0 R (Item.61) 1798 0 R (Item.62) 1799 0 R]
+/Limits [(Item.58) (Item.62)]
+>> endobj
+2689 0 obj <<
+/Names [(Item.63) 1800 0 R (Item.64) 1801 0 R (Item.65) 1802 0 R (Item.66) 1803 0 R (Item.67) 1804 0 R (Item.68) 1805 0 R]
+/Limits [(Item.63) (Item.68)]
+>> endobj
+2690 0 obj <<
+/Names [(Item.69) 1806 0 R (Item.7) 895 0 R (Item.70) 1807 0 R (Item.8) 911 0 R (Item.9) 912 0 R (appendix*.149) 1843 0 R]
+/Limits [(Item.69) (appendix*.149)]
+>> endobj
+2691 0 obj <<
+/Names [(appendix.A) 390 0 R (appendix.B) 426 0 R (chapter*.1) 510 0 R (chapter*.2) 608 0 R (chapter*.4) 635 0 R (chapter.1) 14 0 R]
+/Limits [(appendix.A) (chapter.1)]
+>> endobj
+2692 0 obj <<
+/Names [(chapter.2) 46 0 R (chapter.3) 62 0 R (chapter.4) 74 0 R (chapter.5) 234 0 R (chapter.6) 266 0 R (chapter.7) 302 0 R]
+/Limits [(chapter.2) (chapter.7)]
+>> endobj
+2693 0 obj <<
+/Names [(chapter.8) 326 0 R (cite.BCP:96) 759 0 R (cite.BHP:94) 665 0 R (cite.BHP:98) 666 0 R (cite.BrHi:89) 780 0 R (cite.ByHi:98) 669 0 R]
+/Limits [(chapter.8) (cite.ByHi:98)]
+>> endobj
+2694 0 obj <<
+/Names [(cite.ByHi:99) 670 0 R (cite.Byr:92) 863 0 R (cite.CoHi:96) 668 0 R (cite.DGL:99) 778 0 R (cite.DaPa:10) 775 0 R (cite.Fre:93) 674 0 R]
+/Limits [(cite.ByHi:99) (cite.Fre:93)]
+>> endobj
+2695 0 obj <<
+/Names [(cite.HBGLSSW:05) 664 0 R (cite.HeSh:80) 813 0 R (cite.HiTa:98) 1318 0 R (cite.KLU_site) 776 0 R (cite.Li:05) 777 0 R (cite.SaSc:86) 672 0 R]
+/Limits [(cite.HBGLSSW:05) (cite.SaSc:86)]
+>> endobj
+2696 0 obj <<
+/Names [(cite.SuperLUMT_site) 779 0 R (cite.Van:92) 673 0 R (cite.arkode_ex) 1583 0 R (cite.cvode_ex) 1582 0 R (cite.cvode_ug) 667 0 R (cite.ida_ex) 874 0 R]
+/Limits [(cite.SuperLUMT_site) (cite.ida_ex)]
+>> endobj
+2697 0 obj <<
+/Names [(cite.kinsol_ug) 671 0 R (equation.2.1) 752 0 R (equation.2.2) 755 0 R (equation.2.3) 758 0 R (equation.2.4) 772 0 R (equation.2.5) 773 0 R]
+/Limits [(cite.kinsol_ug) (equation.2.5)]
+>> endobj
+2698 0 obj <<
+/Names [(equation.2.6) 774 0 R (equation.2.7) 790 0 R (equation.2.8) 800 0 R (equation.4.1) 1313 0 R (equation.4.2) 1314 0 R (equation.4.3) 1315 0 R]
+/Limits [(equation.2.6) (equation.4.3)]
+>> endobj
+2699 0 obj <<
+/Names [(equation.4.4) 1316 0 R (equation.4.5) 1323 0 R (figure.3.1) 637 0 R (figure.3.2) 638 0 R (figure.8.1) 639 0 R (figure.8.2) 640 0 R]
+/Limits [(equation.4.4) (figure.8.2)]
+>> endobj
+2700 0 obj <<
+/Names [(figure.A.1) 641 0 R (figure.A.2) 642 0 R (page.1) 661 0 R (page.10) 799 0 R (page.100) 1534 0 R (page.101) 1541 0 R]
+/Limits [(figure.A.1) (page.101)]
+>> endobj
+2701 0 obj <<
+/Names [(page.102) 1545 0 R (page.103) 1550 0 R (page.104) 1556 0 R (page.105) 1560 0 R (page.106) 1568 0 R (page.107) 1575 0 R]
+/Limits [(page.102) (page.107)]
+>> endobj
+2702 0 obj <<
+/Names [(page.108) 1581 0 R (page.109) 1590 0 R (page.11) 808 0 R (page.110) 1595 0 R (page.111) 1600 0 R (page.112) 1607 0 R]
+/Limits [(page.108) (page.112)]
+>> endobj
+2703 0 obj <<
+/Names [(page.113) 1611 0 R (page.114) 1615 0 R (page.115) 1620 0 R (page.116) 1625 0 R (page.117) 1633 0 R (page.118) 1640 0 R]
+/Limits [(page.113) (page.118)]
+>> endobj
+2704 0 obj <<
+/Names [(page.119) 1650 0 R (page.12) 812 0 R (page.120) 1654 0 R (page.121) 1660 0 R (page.122) 1664 0 R (page.123) 1675 0 R]
+/Limits [(page.119) (page.123)]
+>> endobj
+2705 0 obj <<
+/Names [(page.124) 1680 0 R (page.125) 1684 0 R (page.126) 1690 0 R (page.127) 1694 0 R (page.128) 1699 0 R (page.129) 1704 0 R]
+/Limits [(page.124) (page.129)]
+>> endobj
+2706 0 obj <<
+/Names [(page.13) 824 0 R (page.130) 1709 0 R (page.131) 1722 0 R (page.132) 1737 0 R (page.133) 1741 0 R (page.134) 1745 0 R]
+/Limits [(page.13) (page.134)]
+>> endobj
+2707 0 obj <<
+/Names [(page.135) 1749 0 R (page.136) 1755 0 R (page.137) 1764 0 R (page.138) 1768 0 R (page.139) 1773 0 R (page.14) 828 0 R]
+/Limits [(page.135) (page.14)]
+>> endobj
+2708 0 obj <<
+/Names [(page.140) 1777 0 R (page.141) 1781 0 R (page.142) 1786 0 R (page.143) 1795 0 R (page.144) 1813 0 R (page.145) 1817 0 R]
+/Limits [(page.140) (page.145)]
+>> endobj
+2709 0 obj <<
+/Names [(page.146) 1821 0 R (page.147) 1825 0 R (page.148) 1830 0 R (page.149) 1834 0 R (page.15) 848 0 R (page.150) 1838 0 R]
+/Limits [(page.146) (page.150)]
+>> endobj
+2710 0 obj <<
+/Names [(page.151) 1842 0 R (page.152) 1847 0 R (page.153) 1954 0 R (page.154) 2110 0 R (page.155) 2256 0 R (page.156) 2403 0 R]
+/Limits [(page.151) (page.156)]
+>> endobj
+2711 0 obj <<
+/Names [(page.157) 2528 0 R (page.158) 2599 0 R (page.16) 862 0 R (page.17) 873 0 R (page.18) 880 0 R (page.19) 891 0 R]
+/Limits [(page.157) (page.19)]
+>> endobj
+2712 0 obj <<
+/Names [(page.2) 678 0 R (page.20) 910 0 R (page.21) 928 0 R (page.22) 939 0 R (page.23) 949 0 R (page.24) 957 0 R]
+/Limits [(page.2) (page.24)]
+>> endobj
+2713 0 obj <<
+/Names [(page.25) 964 0 R (page.26) 970 0 R (page.27) 977 0 R (page.28) 985 0 R (page.29) 993 0 R (page.3) 690 0 R]
+/Limits [(page.25) (page.3)]
+>> endobj
+2714 0 obj <<
+/Names [(page.30) 1000 0 R (page.31) 1008 0 R (page.32) 1012 0 R (page.33) 1017 0 R (page.34) 1025 0 R (page.35) 1032 0 R]
+/Limits [(page.30) (page.35)]
+>> endobj
+2715 0 obj <<
+/Names [(page.36) 1043 0 R (page.37) 1051 0 R (page.38) 1060 0 R (page.39) 1067 0 R (page.4) 714 0 R (page.40) 1076 0 R]
+/Limits [(page.36) (page.40)]
+>> endobj
+2716 0 obj <<
+/Names [(page.41) 1084 0 R (page.42) 1093 0 R (page.43) 1101 0 R (page.44) 1108 0 R (page.45) 1115 0 R (page.46) 1125 0 R]
+/Limits [(page.41) (page.46)]
+>> endobj
+2717 0 obj <<
+/Names [(page.47) 1132 0 R (page.48) 1137 0 R (page.49) 1141 0 R (page.5) 727 0 R (page.50) 1149 0 R (page.51) 1158 0 R]
+/Limits [(page.47) (page.51)]
+>> endobj
+2718 0 obj <<
+/Names [(page.52) 1167 0 R (page.53) 1174 0 R (page.54) 1182 0 R (page.55) 1189 0 R (page.56) 1196 0 R (page.57) 1203 0 R]
+/Limits [(page.52) (page.57)]
+>> endobj
+2719 0 obj <<
+/Names [(page.58) 1211 0 R (page.59) 1219 0 R (page.6) 739 0 R (page.60) 1228 0 R (page.61) 1234 0 R (page.62) 1240 0 R]
+/Limits [(page.58) (page.62)]
+>> endobj
+2720 0 obj <<
+/Names [(page.63) 1252 0 R (page.64) 1265 0 R (page.65) 1275 0 R (page.66) 1288 0 R (page.67) 1297 0 R (page.68) 1304 0 R]
+/Limits [(page.63) (page.68)]
+>> endobj
+2721 0 obj <<
+/Names [(page.69) 1312 0 R (page.7) 751 0 R (page.70) 1322 0 R (page.71) 1331 0 R (page.72) 1351 0 R (page.73) 1359 0 R]
+/Limits [(page.69) (page.73)]
+>> endobj
+2722 0 obj <<
+/Names [(page.74) 1366 0 R (page.75) 1373 0 R (page.76) 1378 0 R (page.77) 1382 0 R (page.78) 1389 0 R (page.79) 1398 0 R]
+/Limits [(page.74) (page.79)]
+>> endobj
+2723 0 obj <<
+/Names [(page.8) 771 0 R (page.80) 1406 0 R (page.81) 1410 0 R (page.82) 1419 0 R (page.83) 1423 0 R (page.84) 1431 0 R]
+/Limits [(page.8) (page.84)]
+>> endobj
+2724 0 obj <<
+/Names [(page.85) 1438 0 R (page.86) 1449 0 R (page.87) 1453 0 R (page.88) 1459 0 R (page.89) 1467 0 R (page.9) 787 0 R]
+/Limits [(page.85) (page.9)]
+>> endobj
+2725 0 obj <<
+/Names [(page.90) 1479 0 R (page.91) 1490 0 R (page.92) 1494 0 R (page.93) 1498 0 R (page.94) 1505 0 R (page.95) 1510 0 R]
+/Limits [(page.90) (page.95)]
+>> endobj
+2726 0 obj <<
+/Names [(page.96) 1515 0 R (page.97) 1519 0 R (page.98) 1523 0 R (page.99) 1529 0 R (page.i) 450 0 R (page.ii) 463 0 R]
+/Limits [(page.96) (page.ii)]
+>> endobj
+2727 0 obj <<
+/Names [(page.iii) 508 0 R (page.iv) 565 0 R (page.ix) 634 0 R (page.v) 589 0 R (page.vi) 593 0 R (page.vii) 607 0 R]
+/Limits [(page.iii) (page.vii)]
+>> endobj
+2728 0 obj <<
+/Names [(page.viii) 624 0 R (page.x) 646 0 R (section*.10) 693 0 R (section*.100) 1198 0 R (section*.101) 1199 0 R (section*.102) 1204 0 R]
+/Limits [(page.viii) (section*.102)]
+>> endobj
+2729 0 obj <<
+/Names [(section*.103) 1205 0 R (section*.104) 1206 0 R (section*.105) 1212 0 R (section*.106) 1213 0 R (section*.107) 1214 0 R (section*.108) 1215 0 R]
+/Limits [(section*.103) (section*.108)]
+>> endobj
+2730 0 obj <<
+/Names [(section*.109) 1220 0 R (section*.11) 695 0 R (section*.110) 1221 0 R (section*.111) 1222 0 R (section*.112) 1229 0 R (section*.113) 1230 0 R]
+/Limits [(section*.109) (section*.113)]
+>> endobj
+2731 0 obj <<
+/Names [(section*.114) 1235 0 R (section*.115) 1241 0 R (section*.116) 1242 0 R (section*.117) 1253 0 R (section*.118) 1254 0 R (section*.119) 1266 0 R]
+/Limits [(section*.114) (section*.119)]
+>> endobj
+2732 0 obj <<
+/Names [(section*.12) 715 0 R (section*.120) 1276 0 R (section*.121) 1289 0 R (section*.122) 1298 0 R (section*.123) 1305 0 R (section*.124) 1324 0 R]
+/Limits [(section*.12) (section*.124)]
+>> endobj
+2733 0 obj <<
+/Names [(section*.125) 1325 0 R (section*.126) 1353 0 R (section*.127) 1360 0 R (section*.128) 1361 0 R (section*.129) 1362 0 R (section*.13) 716 0 R]
+/Limits [(section*.125) (section*.13)]
+>> endobj
+2734 0 obj <<
+/Names [(section*.130) 1392 0 R (section*.131) 1535 0 R (section*.132) 1546 0 R (section*.133) 1561 0 R (section*.134) 1576 0 R (section*.135) 1591 0 R]
+/Limits [(section*.130) (section*.135)]
+>> endobj
+2735 0 obj <<
+/Names [(section*.136) 1596 0 R (section*.137) 1626 0 R (section*.138) 1627 0 R (section*.139) 1634 0 R (section*.14) 717 0 R (section*.140) 1635 0 R]
+/Limits [(section*.136) (section*.140)]
+>> endobj
+2736 0 obj <<
+/Names [(section*.141) 1641 0 R (section*.142) 1756 0 R (section*.143) 1769 0 R (section*.144) 1787 0 R (section*.145) 1788 0 R (section*.146) 1789 0 R]
+/Limits [(section*.141) (section*.146)]
+>> endobj
+2737 0 obj <<
+/Names [(section*.147) 1790 0 R (section*.148) 1791 0 R (section*.15) 718 0 R (section*.150) 438 0 R (section*.151) 442 0 R (section*.16) 728 0 R]
+/Limits [(section*.147) (section*.16)]
+>> endobj
+2738 0 obj <<
+/Names [(section*.17) 940 0 R (section*.18) 941 0 R (section*.19) 942 0 R (section*.20) 950 0 R (section*.21) 951 0 R (section*.22) 952 0 R]
+/Limits [(section*.17) (section*.22)]
+>> endobj
+2739 0 obj <<
+/Names [(section*.23) 965 0 R (section*.24) 966 0 R (section*.25) 971 0 R (section*.26) 972 0 R (section*.27) 973 0 R (section*.28) 978 0 R]
+/Limits [(section*.23) (section*.28)]
+>> endobj
+2740 0 obj <<
+/Names [(section*.29) 986 0 R (section*.3) 6 0 R (section*.30) 987 0 R (section*.31) 988 0 R (section*.32) 994 0 R (section*.33) 1001 0 R]
+/Limits [(section*.29) (section*.33)]
+>> endobj
+2741 0 obj <<
+/Names [(section*.34) 1002 0 R (section*.35) 1018 0 R (section*.36) 1019 0 R (section*.37) 1020 0 R (section*.38) 1026 0 R (section*.39) 1027 0 R]
+/Limits [(section*.34) (section*.39)]
+>> endobj
+2742 0 obj <<
+/Names [(section*.40) 1028 0 R (section*.41) 1033 0 R (section*.42) 1034 0 R (section*.43) 1035 0 R (section*.44) 1036 0 R (section*.45) 1044 0 R]
+/Limits [(section*.40) (section*.45)]
+>> endobj
+2743 0 obj <<
+/Names [(section*.46) 1045 0 R (section*.47) 1046 0 R (section*.48) 1052 0 R (section*.49) 1053 0 R (section*.5) 10 0 R (section*.50) 1054 0 R]
+/Limits [(section*.46) (section*.50)]
+>> endobj
+2744 0 obj <<
+/Names [(section*.51) 1061 0 R (section*.52) 1062 0 R (section*.53) 1068 0 R (section*.54) 1069 0 R (section*.55) 1077 0 R (section*.56) 1085 0 R]
+/Limits [(section*.51) (section*.56)]
+>> endobj
+2745 0 obj <<
+/Names [(section*.57) 1086 0 R (section*.58) 1087 0 R (section*.59) 1094 0 R (section*.6) 663 0 R (section*.60) 1095 0 R (section*.61) 1096 0 R]
+/Limits [(section*.57) (section*.61)]
+>> endobj
+2746 0 obj <<
+/Names [(section*.62) 1102 0 R (section*.63) 1103 0 R (section*.64) 1104 0 R (section*.65) 1109 0 R (section*.66) 1110 0 R (section*.67) 1111 0 R]
+/Limits [(section*.62) (section*.67)]
+>> endobj
+2747 0 obj <<
+/Names [(section*.68) 1116 0 R (section*.69) 1117 0 R (section*.7) 679 0 R (section*.70) 1118 0 R (section*.71) 1126 0 R (section*.72) 1127 0 R]
+/Limits [(section*.68) (section*.72)]
+>> endobj
+2748 0 obj <<
+/Names [(section*.73) 1133 0 R (section*.74) 1142 0 R (section*.75) 1143 0 R (section*.76) 1144 0 R (section*.77) 1145 0 R (section*.78) 1150 0 R]
+/Limits [(section*.73) (section*.78)]
+>> endobj
+2749 0 obj <<
+/Names [(section*.79) 1151 0 R (section*.8) 680 0 R (section*.80) 1152 0 R (section*.81) 1153 0 R (section*.82) 1159 0 R (section*.83) 1160 0 R]
+/Limits [(section*.79) (section*.83)]
+>> endobj
+2750 0 obj <<
+/Names [(section*.84) 1161 0 R (section*.85) 1162 0 R (section*.86) 1168 0 R (section*.87) 1169 0 R (section*.88) 1170 0 R (section*.89) 1175 0 R]
+/Limits [(section*.84) (section*.89)]
+>> endobj
+2751 0 obj <<
+/Names [(section*.9) 692 0 R (section*.90) 1176 0 R (section*.91) 1177 0 R (section*.92) 1178 0 R (section*.93) 1183 0 R (section*.94) 1184 0 R]
+/Limits [(section*.9) (section*.94)]
+>> endobj
+2752 0 obj <<
+/Names [(section*.95) 1185 0 R (section*.96) 1190 0 R (section*.97) 1191 0 R (section*.98) 1192 0 R (section*.99) 1197 0 R (section.1.1) 18 0 R]
+/Limits [(section*.95) (section.1.1)]
+>> endobj
+2753 0 obj <<
+/Names [(section.1.2) 22 0 R (section.1.3) 26 0 R (section.2.1) 50 0 R (section.2.2) 54 0 R (section.2.3) 58 0 R (section.3.1) 66 0 R]
+/Limits [(section.1.2) (section.3.1)]
+>> endobj
+2754 0 obj <<
+/Names [(section.3.2) 70 0 R (section.4.1) 78 0 R (section.4.2) 82 0 R (section.4.3) 86 0 R (section.4.4) 90 0 R (section.4.5) 94 0 R]
+/Limits [(section.3.2) (section.4.5)]
+>> endobj
+2755 0 obj <<
+/Names [(section.4.6) 186 0 R (section.4.7) 230 0 R (section.5.1) 238 0 R (section.5.2) 242 0 R (section.5.3) 246 0 R (section.5.4) 250 0 R]
+/Limits [(section.4.6) (section.5.4)]
+>> endobj
+2756 0 obj <<
+/Names [(section.5.5) 254 0 R (section.5.6) 258 0 R (section.5.7) 262 0 R (section.6.1) 270 0 R (section.6.2) 274 0 R (section.6.3) 278 0 R]
+/Limits [(section.5.5) (section.6.3)]
+>> endobj
+2757 0 obj <<
+/Names [(section.6.4) 282 0 R (section.6.5) 286 0 R (section.6.6) 290 0 R (section.6.7) 294 0 R (section.6.8) 298 0 R (section.7.1) 306 0 R]
+/Limits [(section.6.4) (section.7.1)]
+>> endobj
+2758 0 obj <<
+/Names [(section.7.2) 310 0 R (section.7.3) 314 0 R (section.7.4) 318 0 R (section.7.5) 322 0 R (section.8.1) 330 0 R (section.8.2) 350 0 R]
+/Limits [(section.7.2) (section.8.2)]
+>> endobj
+2759 0 obj <<
+/Names [(section.8.3) 370 0 R (section.A.1) 394 0 R (section.A.2) 414 0 R (section.A.3) 418 0 R (section.A.4) 422 0 R (section.B.1) 430 0 R]
+/Limits [(section.8.3) (section.B.1)]
+>> endobj
+2760 0 obj <<
+/Names [(section.B.2) 434 0 R (subfigure.3.1.1) 829 0 R (subfigure.3.1.2) 831 0 R (subsection.1.3.1) 30 0 R (subsection.1.3.2) 42 0 R (subsection.4.5.1) 98 0 R]
+/Limits [(section.B.2) (subsection.4.5.1)]
+>> endobj
+2761 0 obj <<
+/Names [(subsection.4.5.10) 182 0 R (subsection.4.5.2) 102 0 R (subsection.4.5.3) 106 0 R (subsection.4.5.4) 110 0 R (subsection.4.5.5) 114 0 R (subsection.4.5.6) 118 0 R]
+/Limits [(subsection.4.5.10) (subsection.4.5.6)]
+>> endobj
+2762 0 obj <<
+/Names [(subsection.4.5.7) 122 0 R (subsection.4.5.8) 150 0 R (subsection.4.5.9) 154 0 R (subsection.4.6.1) 190 0 R (subsection.4.6.10) 226 0 R (subsection.4.6.2) 194 0 R]
+/Limits [(subsection.4.5.7) (subsection.4.6.2)]
+>> endobj
+2763 0 obj <<
+/Names [(subsection.4.6.3) 198 0 R (subsection.4.6.4) 202 0 R (subsection.4.6.5) 206 0 R (subsection.4.6.6) 210 0 R (subsection.4.6.7) 214 0 R (subsection.4.6.8) 218 0 R]
+/Limits [(subsection.4.6.3) (subsection.4.6.8)]
+>> endobj
+2764 0 obj <<
+/Names [(subsection.4.6.9) 222 0 R (subsection.8.1.1) 334 0 R (subsection.8.1.2) 338 0 R (subsection.8.1.3) 342 0 R (subsection.8.1.4) 346 0 R (subsection.8.2.1) 354 0 R]
+/Limits [(subsection.4.6.9) (subsection.8.2.1)]
+>> endobj
+2765 0 obj <<
+/Names [(subsection.8.2.2) 358 0 R (subsection.8.2.3) 362 0 R (subsection.8.2.4) 366 0 R (subsection.8.3.1) 374 0 R (subsection.8.3.2) 378 0 R (subsection.8.3.3) 382 0 R]
+/Limits [(subsection.8.2.2) (subsection.8.3.3)]
+>> endobj
+2766 0 obj <<
+/Names [(subsection.8.3.4) 386 0 R (subsection.A.1.1) 398 0 R (subsection.A.1.2) 402 0 R (subsection.A.1.3) 406 0 R (subsection.A.1.4) 410 0 R (subsubsection.1.3.1.1) 34 0 R]
+/Limits [(subsection.8.3.4) (subsubsection.1.3.1.1)]
+>> endobj
+2767 0 obj <<
+/Names [(subsubsection.1.3.1.2) 38 0 R (subsubsection.4.5.7.1) 126 0 R (subsubsection.4.5.7.2) 130 0 R (subsubsection.4.5.7.3) 134 0 R (subsubsection.4.5.7.4) 138 0 R (subsubsection.4.5.7.5) 142 0 R]
+/Limits [(subsubsection.1.3.1.2) (subsubsection.4.5.7.5)]
+>> endobj
+2768 0 obj <<
+/Names [(subsubsection.4.5.7.6) 146 0 R (subsubsection.4.5.9.1) 158 0 R (subsubsection.4.5.9.2) 162 0 R (subsubsection.4.5.9.3) 166 0 R (subsubsection.4.5.9.4) 170 0 R (subsubsection.4.5.9.5) 174 0 R]
+/Limits [(subsubsection.4.5.7.6) (subsubsection.4.5.9.5)]
+>> endobj
+2769 0 obj <<
+/Names [(subsubsection.4.5.9.6) 178 0 R (table.4.1) 611 0 R (table.4.2) 612 0 R (table.4.3) 613 0 R (table.5.1) 614 0 R (table.5.2) 615 0 R]
+/Limits [(subsubsection.4.5.9.6) (table.5.2)]
+>> endobj
+2770 0 obj <<
+/Names [(table.6.1) 616 0 R (table.6.2) 617 0 R (table.6.3) 618 0 R (table.A.1) 619 0 R (table.A.2) 620 0 R]
+/Limits [(table.6.1) (table.A.2)]
+>> endobj
+2771 0 obj <<
+/Kids [2679 0 R 2680 0 R 2681 0 R 2682 0 R 2683 0 R 2684 0 R]
+/Limits [(Doc-Start) (Item.40)]
+>> endobj
+2772 0 obj <<
+/Kids [2685 0 R 2686 0 R 2687 0 R 2688 0 R 2689 0 R 2690 0 R]
+/Limits [(Item.41) (appendix*.149)]
+>> endobj
+2773 0 obj <<
+/Kids [2691 0 R 2692 0 R 2693 0 R 2694 0 R 2695 0 R 2696 0 R]
+/Limits [(appendix.A) (cite.ida_ex)]
+>> endobj
+2774 0 obj <<
+/Kids [2697 0 R 2698 0 R 2699 0 R 2700 0 R 2701 0 R 2702 0 R]
+/Limits [(cite.kinsol_ug) (page.112)]
+>> endobj
+2775 0 obj <<
+/Kids [2703 0 R 2704 0 R 2705 0 R 2706 0 R 2707 0 R 2708 0 R]
+/Limits [(page.113) (page.145)]
+>> endobj
+2776 0 obj <<
+/Kids [2709 0 R 2710 0 R 2711 0 R 2712 0 R 2713 0 R 2714 0 R]
+/Limits [(page.146) (page.35)]
+>> endobj
+2777 0 obj <<
+/Kids [2715 0 R 2716 0 R 2717 0 R 2718 0 R 2719 0 R 2720 0 R]
+/Limits [(page.36) (page.68)]
+>> endobj
+2778 0 obj <<
+/Kids [2721 0 R 2722 0 R 2723 0 R 2724 0 R 2725 0 R 2726 0 R]
+/Limits [(page.69) (page.ii)]
+>> endobj
+2779 0 obj <<
+/Kids [2727 0 R 2728 0 R 2729 0 R 2730 0 R 2731 0 R 2732 0 R]
+/Limits [(page.iii) (section*.124)]
+>> endobj
+2780 0 obj <<
+/Kids [2733 0 R 2734 0 R 2735 0 R 2736 0 R 2737 0 R 2738 0 R]
+/Limits [(section*.125) (section*.22)]
+>> endobj
+2781 0 obj <<
+/Kids [2739 0 R 2740 0 R 2741 0 R 2742 0 R 2743 0 R 2744 0 R]
+/Limits [(section*.23) (section*.56)]
+>> endobj
+2782 0 obj <<
+/Kids [2745 0 R 2746 0 R 2747 0 R 2748 0 R 2749 0 R 2750 0 R]
+/Limits [(section*.57) (section*.89)]
+>> endobj
+2783 0 obj <<
+/Kids [2751 0 R 2752 0 R 2753 0 R 2754 0 R 2755 0 R 2756 0 R]
+/Limits [(section*.9) (section.6.3)]
+>> endobj
+2784 0 obj <<
+/Kids [2757 0 R 2758 0 R 2759 0 R 2760 0 R 2761 0 R 2762 0 R]
+/Limits [(section.6.4) (subsection.4.6.2)]
+>> endobj
+2785 0 obj <<
+/Kids [2763 0 R 2764 0 R 2765 0 R 2766 0 R 2767 0 R 2768 0 R]
+/Limits [(subsection.4.6.3) (subsubsection.4.5.9.5)]
+>> endobj
+2786 0 obj <<
+/Kids [2769 0 R 2770 0 R]
+/Limits [(subsubsection.4.5.9.6) (table.A.2)]
+>> endobj
+2787 0 obj <<
+/Kids [2771 0 R 2772 0 R 2773 0 R 2774 0 R 2775 0 R 2776 0 R]
+/Limits [(Doc-Start) (page.35)]
+>> endobj
+2788 0 obj <<
+/Kids [2777 0 R 2778 0 R 2779 0 R 2780 0 R 2781 0 R 2782 0 R]
+/Limits [(page.36) (section*.89)]
+>> endobj
+2789 0 obj <<
+/Kids [2783 0 R 2784 0 R 2785 0 R 2786 0 R]
+/Limits [(section*.9) (table.A.2)]
+>> endobj
+2790 0 obj <<
+/Kids [2787 0 R 2788 0 R 2789 0 R]
+/Limits [(Doc-Start) (table.A.2)]
+>> endobj
+2791 0 obj <<
+/Dests 2790 0 R
+>> endobj
+2792 0 obj <<
+/Type /Catalog
+/Pages 2677 0 R
+/Outlines 2678 0 R
+/Names 2791 0 R
+/PageMode/UseOutlines/PageLabels << /Nums [0 << /S /r >> 10 << /S /D >> ] >>
+/OpenAction 445 0 R
+>> endobj
+2793 0 obj <<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
+/CreationDate (D:20160926151729-07'00')
+/ModDate (D:20160926151729-07'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
+>> endobj
+xref
+0 2794
+0000000001 65535 f 
+0000000002 00000 f 
+0000000003 00000 f 
+0000000004 00000 f 
+0000000000 00000 f 
+0000000015 00000 n 
+0000043819 00000 n 
+0001254389 00000 n 
+0000000061 00000 n 
+0000000093 00000 n 
+0000046175 00000 n 
+0001254302 00000 n 
+0000000139 00000 n 
+0000000173 00000 n 
+0000051919 00000 n 
+0001254176 00000 n 
+0000000219 00000 n 
+0000000250 00000 n 
+0000051977 00000 n 
+0001254102 00000 n 
+0000000298 00000 n 
+0000000347 00000 n 
+0000067476 00000 n 
+0001254015 00000 n 
+0000000395 00000 n 
+0000000437 00000 n 
+0000074182 00000 n 
+0001253904 00000 n 
+0000000485 00000 n 
+0000000528 00000 n 
+0000074240 00000 n 
+0001253793 00000 n 
+0000000581 00000 n 
+0000000617 00000 n 
+0000074298 00000 n 
+0001253719 00000 n 
+0000000675 00000 n 
+0000000712 00000 n 
+0000074356 00000 n 
+0001253645 00000 n 
+0000000770 00000 n 
+0000000805 00000 n 
+0000077458 00000 n 
+0001253571 00000 n 
+0000000858 00000 n 
+0000000888 00000 n 
+0000082211 00000 n 
+0001253445 00000 n 
+0000000934 00000 n 
+0000000980 00000 n 
+0000082331 00000 n 
+0001253371 00000 n 
+0000001028 00000 n 
+0000001059 00000 n 
+0000106812 00000 n 
+0001253284 00000 n 
+0000001107 00000 n 
+0000001141 00000 n 
+0000106870 00000 n 
+0001253210 00000 n 
+0000001189 00000 n 
+0000001219 00000 n 
+0000115182 00000 n 
+0001253084 00000 n 
+0000001265 00000 n 
+0000001301 00000 n 
+0000115240 00000 n 
+0001253010 00000 n 
+0000001349 00000 n 
+0000001389 00000 n 
+0000115298 00000 n 
+0001252936 00000 n 
+0000001437 00000 n 
+0000001472 00000 n 
+0000204888 00000 n 
+0001252808 00000 n 
+0000001518 00000 n 
+0000001565 00000 n 
+0000204946 00000 n 
+0001252734 00000 n 
+0000001613 00000 n 
+0000001666 00000 n 
+0000209822 00000 n 
+0001252647 00000 n 
+0000001714 00000 n 
+0000001743 00000 n 
+0000209880 00000 n 
+0001252560 00000 n 
+0000001791 00000 n 
+0000001822 00000 n 
+0000215357 00000 n 
+0001252473 00000 n 
+0000001870 00000 n 
+0000001926 00000 n 
+0000226203 00000 n 
+0001252346 00000 n 
+0000001974 00000 n 
+0000002016 00000 n 
+0000230049 00000 n 
+0001252270 00000 n 
+0000002069 00000 n 
+0000002134 00000 n 
+0000230283 00000 n 
+0001252179 00000 n 
+0000002188 00000 n 
+0000002245 00000 n 
+0000239409 00000 n 
+0001252087 00000 n 
+0000002299 00000 n 
+0000002356 00000 n 
+0000255607 00000 n 
+0001251995 00000 n 
+0000002410 00000 n 
+0000002468 00000 n 
+0000260186 00000 n 
+0001251903 00000 n 
+0000002522 00000 n 
+0000002577 00000 n 
+0000264857 00000 n 
+0001251811 00000 n 
+0000002631 00000 n 
+0000002670 00000 n 
+0000269556 00000 n 
+0001251680 00000 n 
+0000002724 00000 n 
+0000002768 00000 n 
+0000276798 00000 n 
+0001251601 00000 n 
+0000002827 00000 n 
+0000002883 00000 n 
+0000291263 00000 n 
+0001251508 00000 n 
+0000002942 00000 n 
+0000003019 00000 n 
+0000295444 00000 n 
+0001251415 00000 n 
+0000003078 00000 n 
+0000003151 00000 n 
+0000303615 00000 n 
+0001251322 00000 n 
+0000003210 00000 n 
+0000003279 00000 n 
+0000314670 00000 n 
+0001251229 00000 n 
+0000003338 00000 n 
+0000003412 00000 n 
+0000320566 00000 n 
+0001251150 00000 n 
+0000003471 00000 n 
+0000003527 00000 n 
+0000325428 00000 n 
+0001251058 00000 n 
+0000003581 00000 n 
+0000003629 00000 n 
+0000325549 00000 n 
+0001250927 00000 n 
+0000003683 00000 n 
+0000003728 00000 n 
+0000329523 00000 n 
+0001250848 00000 n 
+0000003787 00000 n 
+0000003844 00000 n 
+0000348090 00000 n 
+0001250755 00000 n 
+0000003903 00000 n 
+0000003978 00000 n 
+0000351553 00000 n 
+0001250662 00000 n 
+0000004037 00000 n 
+0000004094 00000 n 
+0000355097 00000 n 
+0001250569 00000 n 
+0000004153 00000 n 
+0000004231 00000 n 
+0000358614 00000 n 
+0001250476 00000 n 
+0000004290 00000 n 
+0000004364 00000 n 
+0000362201 00000 n 
+0001250397 00000 n 
+0000004423 00000 n 
+0000004493 00000 n 
+0000373859 00000 n 
+0001250319 00000 n 
+0000004548 00000 n 
+0000004597 00000 n 
+0000377598 00000 n 
+0001250188 00000 n 
+0000004646 00000 n 
+0000004689 00000 n 
+0000377658 00000 n 
+0001250109 00000 n 
+0000004743 00000 n 
+0000004780 00000 n 
+0000381522 00000 n 
+0001250016 00000 n 
+0000004834 00000 n 
+0000004884 00000 n 
+0000381643 00000 n 
+0001249923 00000 n 
+0000004938 00000 n 
+0000004979 00000 n 
+0000381764 00000 n 
+0001249830 00000 n 
+0000005033 00000 n 
+0000005073 00000 n 
+0000386169 00000 n 
+0001249737 00000 n 
+0000005127 00000 n 
+0000005205 00000 n 
+0000391985 00000 n 
+0001249644 00000 n 
+0000005259 00000 n 
+0000005338 00000 n 
+0000398062 00000 n 
+0001249551 00000 n 
+0000005392 00000 n 
+0000005471 00000 n 
+0000403531 00000 n 
+0001249458 00000 n 
+0000005525 00000 n 
+0000005591 00000 n 
+0000408271 00000 n 
+0001249365 00000 n 
+0000005645 00000 n 
+0000005707 00000 n 
+0000412075 00000 n 
+0001249286 00000 n 
+0000005762 00000 n 
+0000005815 00000 n 
+0000417979 00000 n 
+0001249208 00000 n 
+0000005864 00000 n 
+0000005936 00000 n 
+0000439598 00000 n 
+0001249076 00000 n 
+0000005983 00000 n 
+0000006053 00000 n 
+0000439658 00000 n 
+0001248997 00000 n 
+0000006102 00000 n 
+0000006151 00000 n 
+0000439718 00000 n 
+0001248904 00000 n 
+0000006200 00000 n 
+0000006238 00000 n 
+0000442716 00000 n 
+0001248811 00000 n 
+0000006287 00000 n 
+0000006320 00000 n 
+0000446195 00000 n 
+0001248718 00000 n 
+0000006369 00000 n 
+0000006423 00000 n 
+0000478114 00000 n 
+0001248625 00000 n 
+0000006472 00000 n 
+0000006522 00000 n 
+0000490894 00000 n 
+0001248532 00000 n 
+0000006571 00000 n 
+0000006637 00000 n 
+0000495465 00000 n 
+0001248453 00000 n 
+0000006686 00000 n 
+0000006749 00000 n 
+0000505028 00000 n 
+0001248320 00000 n 
+0000006796 00000 n 
+0000006849 00000 n 
+0000524478 00000 n 
+0001248241 00000 n 
+0000006898 00000 n 
+0000006954 00000 n 
+0000532559 00000 n 
+0001248148 00000 n 
+0000007003 00000 n 
+0000007061 00000 n 
+0000545004 00000 n 
+0001248055 00000 n 
+0000007110 00000 n 
+0000007166 00000 n 
+0000553535 00000 n 
+0001247962 00000 n 
+0000007215 00000 n 
+0000007273 00000 n 
+0000562514 00000 n 
+0001247869 00000 n 
+0000007322 00000 n 
+0000007378 00000 n 
+0000570997 00000 n 
+0001247776 00000 n 
+0000007427 00000 n 
+0000007482 00000 n 
+0000574785 00000 n 
+0001247683 00000 n 
+0000007531 00000 n 
+0000007567 00000 n 
+0000580882 00000 n 
+0001247604 00000 n 
+0000007616 00000 n 
+0000007665 00000 n 
+0000587759 00000 n 
+0001247471 00000 n 
+0000007712 00000 n 
+0000007773 00000 n 
+0000591870 00000 n 
+0001247392 00000 n 
+0000007822 00000 n 
+0000007865 00000 n 
+0000591991 00000 n 
+0001247299 00000 n 
+0000007914 00000 n 
+0000007948 00000 n 
+0000596218 00000 n 
+0001247206 00000 n 
+0000007997 00000 n 
+0000008031 00000 n 
+0000596339 00000 n 
+0001247113 00000 n 
+0000008080 00000 n 
+0000008131 00000 n 
+0000597765 00000 n 
+0001247034 00000 n 
+0000008180 00000 n 
+0000008228 00000 n 
+0000601468 00000 n 
+0001246901 00000 n 
+0000008275 00000 n 
+0000008343 00000 n 
+0000604563 00000 n 
+0001246783 00000 n 
+0000008392 00000 n 
+0000008443 00000 n 
+0000604623 00000 n 
+0001246704 00000 n 
+0000008497 00000 n 
+0000008528 00000 n 
+0000620476 00000 n 
+0001246611 00000 n 
+0000008582 00000 n 
+0000008637 00000 n 
+0000620536 00000 n 
+0001246518 00000 n 
+0000008691 00000 n 
+0000008740 00000 n 
+0000630538 00000 n 
+0001246439 00000 n 
+0000008794 00000 n 
+0000008842 00000 n 
+0000633791 00000 n 
+0001246307 00000 n 
+0000008891 00000 n 
+0000008925 00000 n 
+0000637086 00000 n 
+0001246228 00000 n 
+0000008979 00000 n 
+0000009010 00000 n 
+0000654200 00000 n 
+0001246135 00000 n 
+0000009064 00000 n 
+0000009111 00000 n 
+0000660556 00000 n 
+0001246042 00000 n 
+0000009165 00000 n 
+0000009199 00000 n 
+0000660616 00000 n 
+0001245963 00000 n 
+0000009253 00000 n 
+0000009293 00000 n 
+0000660676 00000 n 
+0001245845 00000 n 
+0000009342 00000 n 
+0000009414 00000 n 
+0000660735 00000 n 
+0001245766 00000 n 
+0000009468 00000 n 
+0000009504 00000 n 
+0000664439 00000 n 
+0001245673 00000 n 
+0000009558 00000 n 
+0000009595 00000 n 
+0000666484 00000 n 
+0001245580 00000 n 
+0000009649 00000 n 
+0000009685 00000 n 
+0000666544 00000 n 
+0001245501 00000 n 
+0000009739 00000 n 
+0000009777 00000 n 
+0000669815 00000 n 
+0001245368 00000 n 
+0000009825 00000 n 
+0000009884 00000 n 
+0000673719 00000 n 
+0001245250 00000 n 
+0000009933 00000 n 
+0000009977 00000 n 
+0000673779 00000 n 
+0001245171 00000 n 
+0000010031 00000 n 
+0000010109 00000 n 
+0000888556 00000 n 
+0001245078 00000 n 
+0000010163 00000 n 
+0000010219 00000 n 
+0000896101 00000 n 
+0001244985 00000 n 
+0000010273 00000 n 
+0000010315 00000 n 
+0000900340 00000 n 
+0001244906 00000 n 
+0000010369 00000 n 
+0000010420 00000 n 
+0000904260 00000 n 
+0001244813 00000 n 
+0000010469 00000 n 
+0000010518 00000 n 
+0000904320 00000 n 
+0001244720 00000 n 
+0000010567 00000 n 
+0000010635 00000 n 
+0000907576 00000 n 
+0001244641 00000 n 
+0000010684 00000 n 
+0000010749 00000 n 
+0000916027 00000 n 
+0001244508 00000 n 
+0000010797 00000 n 
+0000010830 00000 n 
+0000916087 00000 n 
+0001244429 00000 n 
+0000010879 00000 n 
+0000010918 00000 n 
+0000916147 00000 n 
+0001244350 00000 n 
+0000010967 00000 n 
+0000011007 00000 n 
+0000927681 00000 n 
+0001244256 00000 n 
+0000011057 00000 n 
+0000011089 00000 n 
+0000949207 00000 n 
+0001244176 00000 n 
+0000011139 00000 n 
+0000011164 00000 n 
+0000011766 00000 n 
+0000011878 00000 n 
+0000015452 00000 n 
+0000011216 00000 n 
+0000015334 00000 n 
+0000015393 00000 n 
+0001237910 00000 n 
+0001236891 00000 n 
+0001237765 00000 n 
+0001239356 00000 n 
+0001239940 00000 n 
+0000015112 00000 n 
+0000015265 00000 n 
+0000015312 00000 n 
+0000017009 00000 n 
+0000016838 00000 n 
+0000015591 00000 n 
+0000016950 00000 n 
+0001236450 00000 n 
+0001237621 00000 n 
+0000019058 00000 n 
+0000019211 00000 n 
+0000019364 00000 n 
+0000019516 00000 n 
+0000019670 00000 n 
+0000019823 00000 n 
+0000019977 00000 n 
+0000020135 00000 n 
+0000020299 00000 n 
+0000020463 00000 n 
+0000020622 00000 n 
+0000020774 00000 n 
+0000020928 00000 n 
+0000021081 00000 n 
+0000021235 00000 n 
+0000021387 00000 n 
+0000021541 00000 n 
+0000021695 00000 n 
+0000021847 00000 n 
+0000022001 00000 n 
+0000022154 00000 n 
+0000022308 00000 n 
+0000022462 00000 n 
+0000022616 00000 n 
+0000022774 00000 n 
+0000022933 00000 n 
+0000023091 00000 n 
+0000023250 00000 n 
+0000023409 00000 n 
+0000023568 00000 n 
+0000023726 00000 n 
+0000023890 00000 n 
+0000024054 00000 n 
+0000024218 00000 n 
+0000024382 00000 n 
+0000024544 00000 n 
+0000024706 00000 n 
+0000024861 00000 n 
+0000027907 00000 n 
+0000025136 00000 n 
+0000018630 00000 n 
+0000017093 00000 n 
+0000025018 00000 n 
+0001236596 00000 n 
+0000025077 00000 n 
+0000028071 00000 n 
+0000028235 00000 n 
+0000028399 00000 n 
+0000028563 00000 n 
+0000028727 00000 n 
+0000028891 00000 n 
+0000029049 00000 n 
+0000029203 00000 n 
+0000029362 00000 n 
+0000029520 00000 n 
+0000029679 00000 n 
+0000029838 00000 n 
+0000029996 00000 n 
+0000030155 00000 n 
+0000030314 00000 n 
+0000030472 00000 n 
+0000030631 00000 n 
+0000030791 00000 n 
+0000030944 00000 n 
+0000031096 00000 n 
+0000031250 00000 n 
+0000031404 00000 n 
+0000031558 00000 n 
+0000031712 00000 n 
+0000031866 00000 n 
+0000032020 00000 n 
+0000032174 00000 n 
+0000032326 00000 n 
+0000032480 00000 n 
+0000032632 00000 n 
+0000032785 00000 n 
+0000032938 00000 n 
+0000033090 00000 n 
+0000033243 00000 n 
+0000033396 00000 n 
+0000033549 00000 n 
+0000033701 00000 n 
+0000033854 00000 n 
+0000034006 00000 n 
+0000034159 00000 n 
+0000034312 00000 n 
+0000034464 00000 n 
+0000034616 00000 n 
+0000034769 00000 n 
+0000034927 00000 n 
+0000035085 00000 n 
+0000035242 00000 n 
+0000035398 00000 n 
+0000035549 00000 n 
+0000035705 00000 n 
+0000037298 00000 n 
+0000035920 00000 n 
+0000027375 00000 n 
+0000025233 00000 n 
+0000035861 00000 n 
+0000037456 00000 n 
+0000037614 00000 n 
+0000037767 00000 n 
+0000037925 00000 n 
+0000038083 00000 n 
+0000038241 00000 n 
+0000038399 00000 n 
+0000038551 00000 n 
+0000038704 00000 n 
+0000038861 00000 n 
+0000039019 00000 n 
+0000039176 00000 n 
+0000039334 00000 n 
+0000039487 00000 n 
+0000039640 00000 n 
+0000039793 00000 n 
+0000039946 00000 n 
+0000040099 00000 n 
+0000040252 00000 n 
+0000040407 00000 n 
+0000040621 00000 n 
+0000037006 00000 n 
+0000036004 00000 n 
+0000040562 00000 n 
+0000040976 00000 n 
+0000040805 00000 n 
+0000040705 00000 n 
+0000040917 00000 n 
+0000042185 00000 n 
+0000042336 00000 n 
+0000042488 00000 n 
+0000042640 00000 n 
+0000042792 00000 n 
+0000042944 00000 n 
+0000043096 00000 n 
+0000043248 00000 n 
+0000043399 00000 n 
+0000043550 00000 n 
+0000043876 00000 n 
+0000041981 00000 n 
+0000041017 00000 n 
+0000043701 00000 n 
+0000043760 00000 n 
+0001239502 00000 n 
+0001240058 00000 n 
+0000226142 00000 n 
+0000273397 00000 n 
+0000332790 00000 n 
+0000484006 00000 n 
+0000486911 00000 n 
+0000512258 00000 n 
+0000508789 00000 n 
+0000583742 00000 n 
+0000911288 00000 n 
+0000913661 00000 n 
+0000044257 00000 n 
+0000044086 00000 n 
+0000043986 00000 n 
+0000044198 00000 n 
+0000045145 00000 n 
+0000045297 00000 n 
+0000045450 00000 n 
+0000045601 00000 n 
+0000045753 00000 n 
+0000045905 00000 n 
+0000046233 00000 n 
+0000044973 00000 n 
+0000044298 00000 n 
+0000046057 00000 n 
+0000046116 00000 n 
+0001239210 00000 n 
+0000185414 00000 n 
+0000197291 00000 n 
+0000616285 00000 n 
+0000650988 00000 n 
+0000780996 00000 n 
+0000888432 00000 n 
+0000046627 00000 n 
+0000046456 00000 n 
+0000046356 00000 n 
+0000046568 00000 n 
+0000050159 00000 n 
+0000050317 00000 n 
+0000050469 00000 n 
+0000050621 00000 n 
+0000050777 00000 n 
+0000050932 00000 n 
+0000051087 00000 n 
+0000051242 00000 n 
+0000051398 00000 n 
+0000051553 00000 n 
+0000051707 00000 n 
+0000052093 00000 n 
+0000049947 00000 n 
+0000046668 00000 n 
+0000051860 00000 n 
+0001238055 00000 n 
+0000052035 00000 n 
+0000928640 00000 n 
+0000927981 00000 n 
+0000928041 00000 n 
+0000930350 00000 n 
+0000928281 00000 n 
+0000928161 00000 n 
+0000928221 00000 n 
+0000928341 00000 n 
+0000930652 00000 n 
+0000930712 00000 n 
+0000928521 00000 n 
+0000056827 00000 n 
+0000056538 00000 n 
+0000052215 00000 n 
+0000056650 00000 n 
+0000056709 00000 n 
+0000056768 00000 n 
+0000061185 00000 n 
+0000061339 00000 n 
+0000061497 00000 n 
+0000061661 00000 n 
+0000061812 00000 n 
+0000065649 00000 n 
+0000062199 00000 n 
+0000061021 00000 n 
+0000056950 00000 n 
+0000061963 00000 n 
+0001237184 00000 n 
+0000062022 00000 n 
+0000062081 00000 n 
+0001238779 00000 n 
+0000062140 00000 n 
+0001240176 00000 n 
+0000065801 00000 n 
+0000065960 00000 n 
+0000066117 00000 n 
+0000066268 00000 n 
+0000066421 00000 n 
+0000066573 00000 n 
+0000066727 00000 n 
+0000066881 00000 n 
+0000067032 00000 n 
+0000072689 00000 n 
+0000072840 00000 n 
+0000072994 00000 n 
+0000073148 00000 n 
+0000073301 00000 n 
+0000067534 00000 n 
+0000065445 00000 n 
+0000062361 00000 n 
+0000067181 00000 n 
+0000067240 00000 n 
+0000067299 00000 n 
+0000067358 00000 n 
+0000067417 00000 n 
+0000073455 00000 n 
+0000073607 00000 n 
+0000073758 00000 n 
+0000073911 00000 n 
+0000071100 00000 n 
+0000074413 00000 n 
+0000070904 00000 n 
+0000067670 00000 n 
+0000074064 00000 n 
+0000074123 00000 n 
+0001238486 00000 n 
+0000071555 00000 n 
+0000071790 00000 n 
+0000071837 00000 n 
+0000072012 00000 n 
+0000072033 00000 n 
+0000072270 00000 n 
+0000077693 00000 n 
+0000077287 00000 n 
+0000074603 00000 n 
+0000077399 00000 n 
+0000077516 00000 n 
+0000077575 00000 n 
+0000077634 00000 n 
+0000081536 00000 n 
+0000081689 00000 n 
+0000081843 00000 n 
+0000081998 00000 n 
+0000087178 00000 n 
+0000082512 00000 n 
+0000081380 00000 n 
+0000077790 00000 n 
+0000082152 00000 n 
+0000082269 00000 n 
+0001238198 00000 n 
+0001237476 00000 n 
+0000082389 00000 n 
+0001237038 00000 n 
+0001239067 00000 n 
+0000082451 00000 n 
+0000927861 00000 n 
+0000087332 00000 n 
+0000087487 00000 n 
+0000087643 00000 n 
+0000087795 00000 n 
+0000087949 00000 n 
+0000088111 00000 n 
+0000088266 00000 n 
+0000088419 00000 n 
+0000088819 00000 n 
+0000086982 00000 n 
+0000082698 00000 n 
+0000088574 00000 n 
+0000088633 00000 n 
+0000088695 00000 n 
+0000088757 00000 n 
+0000928401 00000 n 
+0000927741 00000 n 
+0000930531 00000 n 
+0000928461 00000 n 
+0000927801 00000 n 
+0000927921 00000 n 
+0000094152 00000 n 
+0000094306 00000 n 
+0000094461 00000 n 
+0000094737 00000 n 
+0000094004 00000 n 
+0000088980 00000 n 
+0000094616 00000 n 
+0001237330 00000 n 
+0001238924 00000 n 
+0000094675 00000 n 
+0001240294 00000 n 
+0000100250 00000 n 
+0000100405 00000 n 
+0000100560 00000 n 
+0000100714 00000 n 
+0000100987 00000 n 
+0000100094 00000 n 
+0000094960 00000 n 
+0000100866 00000 n 
+0000100925 00000 n 
+0000106290 00000 n 
+0000106445 00000 n 
+0000106599 00000 n 
+0000111561 00000 n 
+0000106928 00000 n 
+0000106142 00000 n 
+0000101174 00000 n 
+0000106753 00000 n 
+0000111775 00000 n 
+0000111429 00000 n 
+0000107115 00000 n 
+0000111716 00000 n 
+0000928581 00000 n 
+0000114819 00000 n 
+0000116249 00000 n 
+0000142545 00000 n 
+0000114971 00000 n 
+0000188190 00000 n 
+0000196454 00000 n 
+0000196609 00000 n 
+0000115356 00000 n 
+0000114679 00000 n 
+0000111936 00000 n 
+0000115123 00000 n 
+0000185474 00000 n 
+0000116137 00000 n 
+0000115505 00000 n 
+0000185238 00000 n 
+0000185297 00000 n 
+0001238342 00000 n 
+0000185356 00000 n 
+0000116623 00000 n 
+0000116843 00000 n 
+0000116890 00000 n 
+0000142525 00000 n 
+0000142919 00000 n 
+0000143139 00000 n 
+0000143186 00000 n 
+0000185218 00000 n 
+0000196764 00000 n 
+0000196917 00000 n 
+0000197071 00000 n 
+0000200451 00000 n 
+0000200606 00000 n 
+0000197353 00000 n 
+0000188026 00000 n 
+0000185625 00000 n 
+0000197232 00000 n 
+0001240412 00000 n 
+0000190789 00000 n 
+0000191023 00000 n 
+0000191070 00000 n 
+0000191388 00000 n 
+0000191639 00000 n 
+0000191661 00000 n 
+0000191933 00000 n 
+0000192202 00000 n 
+0000194319 00000 n 
+0000200819 00000 n 
+0000200311 00000 n 
+0000197504 00000 n 
+0000200760 00000 n 
+0000928101 00000 n 
+0000204069 00000 n 
+0000204223 00000 n 
+0000204375 00000 n 
+0000204527 00000 n 
+0000204678 00000 n 
+0000209295 00000 n 
+0000205004 00000 n 
+0000203905 00000 n 
+0000200916 00000 n 
+0000204829 00000 n 
+0000930410 00000 n 
+0000209453 00000 n 
+0000209611 00000 n 
+0000209938 00000 n 
+0000209147 00000 n 
+0000205140 00000 n 
+0000209763 00000 n 
+0000214378 00000 n 
+0000214532 00000 n 
+0000214684 00000 n 
+0000214838 00000 n 
+0000214992 00000 n 
+0000215145 00000 n 
+0000218595 00000 n 
+0000215650 00000 n 
+0000214206 00000 n 
+0000210087 00000 n 
+0000215298 00000 n 
+0000215415 00000 n 
+0000215474 00000 n 
+0000215533 00000 n 
+0000215592 00000 n 
+0000218753 00000 n 
+0000218912 00000 n 
+0000219069 00000 n 
+0000219232 00000 n 
+0000219390 00000 n 
+0000219554 00000 n 
+0000219718 00000 n 
+0000219877 00000 n 
+0000220041 00000 n 
+0000220198 00000 n 
+0000224920 00000 n 
+0000220892 00000 n 
+0000218383 00000 n 
+0000215812 00000 n 
+0000220362 00000 n 
+0000220421 00000 n 
+0000220480 00000 n 
+0000220539 00000 n 
+0000220598 00000 n 
+0000220657 00000 n 
+0000220716 00000 n 
+0000220775 00000 n 
+0000220834 00000 n 
+0000225079 00000 n 
+0000225237 00000 n 
+0000225389 00000 n 
+0000225539 00000 n 
+0000225696 00000 n 
+0000229667 00000 n 
+0000226260 00000 n 
+0000224748 00000 n 
+0000221015 00000 n 
+0000225847 00000 n 
+0000225906 00000 n 
+0000225965 00000 n 
+0000226024 00000 n 
+0000226083 00000 n 
+0001239795 00000 n 
+0001240530 00000 n 
+0000229831 00000 n 
+0000230342 00000 n 
+0000229527 00000 n 
+0000226435 00000 n 
+0000229990 00000 n 
+0000230107 00000 n 
+0000230165 00000 n 
+0000230224 00000 n 
+0000233389 00000 n 
+0000233543 00000 n 
+0000239042 00000 n 
+0000233936 00000 n 
+0000233249 00000 n 
+0000230491 00000 n 
+0000233700 00000 n 
+0000233759 00000 n 
+0000233818 00000 n 
+0000233877 00000 n 
+0000239195 00000 n 
+0000239466 00000 n 
+0000238902 00000 n 
+0000234110 00000 n 
+0000239350 00000 n 
+0000243949 00000 n 
+0000244113 00000 n 
+0000244266 00000 n 
+0000244595 00000 n 
+0000243801 00000 n 
+0000239627 00000 n 
+0000244418 00000 n 
+0000244477 00000 n 
+0000244536 00000 n 
+0000248171 00000 n 
+0000247823 00000 n 
+0000244731 00000 n 
+0000247935 00000 n 
+0000247994 00000 n 
+0000248053 00000 n 
+0000248112 00000 n 
+0000252039 00000 n 
+0000251809 00000 n 
+0000248307 00000 n 
+0000251921 00000 n 
+0000251980 00000 n 
+0001240648 00000 n 
+0000255063 00000 n 
+0000255217 00000 n 
+0000255666 00000 n 
+0000254923 00000 n 
+0000252177 00000 n 
+0000255371 00000 n 
+0000255430 00000 n 
+0000255489 00000 n 
+0000255548 00000 n 
+0000259904 00000 n 
+0000260244 00000 n 
+0000259772 00000 n 
+0000255840 00000 n 
+0000260068 00000 n 
+0000260127 00000 n 
+0000264417 00000 n 
+0000264576 00000 n 
+0000264976 00000 n 
+0000264277 00000 n 
+0000260405 00000 n 
+0000264737 00000 n 
+0000264797 00000 n 
+0000264916 00000 n 
+0000269191 00000 n 
+0000269342 00000 n 
+0000269616 00000 n 
+0000269046 00000 n 
+0000265138 00000 n 
+0000269495 00000 n 
+0000273460 00000 n 
+0000273221 00000 n 
+0000269779 00000 n 
+0000273336 00000 n 
+0000276578 00000 n 
+0000277041 00000 n 
+0000276441 00000 n 
+0000273622 00000 n 
+0000276737 00000 n 
+0000276858 00000 n 
+0000276919 00000 n 
+0000276980 00000 n 
+0001240768 00000 n 
+0000280504 00000 n 
+0000280144 00000 n 
+0000277193 00000 n 
+0000280260 00000 n 
+0000280321 00000 n 
+0000280382 00000 n 
+0000280443 00000 n 
+0000283555 00000 n 
+0000283135 00000 n 
+0000280694 00000 n 
+0000283251 00000 n 
+0000283312 00000 n 
+0000283373 00000 n 
+0000283434 00000 n 
+0000283495 00000 n 
+0000286494 00000 n 
+0000286647 00000 n 
+0000286803 00000 n 
+0000287200 00000 n 
+0000286339 00000 n 
+0000283705 00000 n 
+0000286956 00000 n 
+0000287017 00000 n 
+0000287078 00000 n 
+0000287139 00000 n 
+0000290921 00000 n 
+0000291384 00000 n 
+0000290784 00000 n 
+0000287337 00000 n 
+0000291080 00000 n 
+0000291141 00000 n 
+0000291202 00000 n 
+0000291323 00000 n 
+0000295002 00000 n 
+0000295162 00000 n 
+0000295561 00000 n 
+0000294856 00000 n 
+0000291534 00000 n 
+0000295322 00000 n 
+0000295383 00000 n 
+0000295500 00000 n 
+0000299305 00000 n 
+0000299647 00000 n 
+0000299168 00000 n 
+0000295698 00000 n 
+0000299464 00000 n 
+0000299525 00000 n 
+0000299586 00000 n 
+0001240893 00000 n 
+0000303181 00000 n 
+0000303335 00000 n 
+0000303675 00000 n 
+0000303035 00000 n 
+0000299784 00000 n 
+0000303493 00000 n 
+0000303554 00000 n 
+0000306615 00000 n 
+0000306774 00000 n 
+0000306934 00000 n 
+0000307338 00000 n 
+0000306460 00000 n 
+0000303825 00000 n 
+0000307094 00000 n 
+0000307155 00000 n 
+0000307216 00000 n 
+0000307277 00000 n 
+0000310302 00000 n 
+0000310455 00000 n 
+0000310852 00000 n 
+0000310156 00000 n 
+0000307490 00000 n 
+0000310608 00000 n 
+0000310669 00000 n 
+0000310730 00000 n 
+0000310791 00000 n 
+0000314390 00000 n 
+0000314852 00000 n 
+0000314253 00000 n 
+0000311017 00000 n 
+0000314548 00000 n 
+0000314609 00000 n 
+0000314730 00000 n 
+0000314791 00000 n 
+0000317492 00000 n 
+0000317132 00000 n 
+0000315042 00000 n 
+0000317248 00000 n 
+0000317309 00000 n 
+0000317370 00000 n 
+0000317431 00000 n 
+0000320687 00000 n 
+0000320268 00000 n 
+0000317603 00000 n 
+0000320384 00000 n 
+0000320445 00000 n 
+0000320506 00000 n 
+0000320626 00000 n 
+0001241018 00000 n 
+0000324991 00000 n 
+0000325155 00000 n 
+0000325609 00000 n 
+0000324845 00000 n 
+0000320849 00000 n 
+0000325306 00000 n 
+0000325367 00000 n 
+0000325488 00000 n 
+0000329302 00000 n 
+0000329644 00000 n 
+0000329165 00000 n 
+0000325772 00000 n 
+0000329462 00000 n 
+0000329583 00000 n 
+0000332852 00000 n 
+0000332613 00000 n 
+0000329794 00000 n 
+0000332729 00000 n 
+0000336087 00000 n 
+0000335666 00000 n 
+0000332963 00000 n 
+0000335782 00000 n 
+0000335843 00000 n 
+0000335904 00000 n 
+0000335965 00000 n 
+0000336026 00000 n 
+0000338689 00000 n 
+0000338268 00000 n 
+0000336224 00000 n 
+0000338384 00000 n 
+0000338445 00000 n 
+0000338506 00000 n 
+0000338567 00000 n 
+0000338628 00000 n 
+0000341540 00000 n 
+0000341999 00000 n 
+0000341403 00000 n 
+0000338800 00000 n 
+0000341695 00000 n 
+0000341756 00000 n 
+0000341817 00000 n 
+0000341878 00000 n 
+0000341939 00000 n 
+0001241143 00000 n 
+0000345458 00000 n 
+0000345098 00000 n 
+0000342189 00000 n 
+0000345214 00000 n 
+0000345275 00000 n 
+0000345336 00000 n 
+0000345397 00000 n 
+0000348211 00000 n 
+0000347730 00000 n 
+0000345597 00000 n 
+0000347846 00000 n 
+0000347907 00000 n 
+0000347968 00000 n 
+0000348029 00000 n 
+0000348150 00000 n 
+0000351735 00000 n 
+0000351315 00000 n 
+0000348322 00000 n 
+0000351431 00000 n 
+0000351492 00000 n 
+0000351613 00000 n 
+0000351674 00000 n 
+0000355339 00000 n 
+0000354920 00000 n 
+0000351913 00000 n 
+0000355036 00000 n 
+0000355157 00000 n 
+0000355217 00000 n 
+0000355278 00000 n 
+0000358735 00000 n 
+0000358315 00000 n 
+0000355475 00000 n 
+0000358431 00000 n 
+0000358492 00000 n 
+0000358553 00000 n 
+0000358674 00000 n 
+0000362322 00000 n 
+0000361902 00000 n 
+0000358872 00000 n 
+0000362018 00000 n 
+0000362079 00000 n 
+0000362140 00000 n 
+0000362261 00000 n 
+0001241268 00000 n 
+0000365003 00000 n 
+0000364582 00000 n 
+0000362459 00000 n 
+0000364698 00000 n 
+0000364759 00000 n 
+0000364820 00000 n 
+0000364881 00000 n 
+0000364942 00000 n 
+0000368876 00000 n 
+0000368517 00000 n 
+0000365114 00000 n 
+0000368633 00000 n 
+0000368694 00000 n 
+0000368755 00000 n 
+0000368815 00000 n 
+0000373417 00000 n 
+0000373577 00000 n 
+0000373979 00000 n 
+0000373271 00000 n 
+0000369013 00000 n 
+0000373737 00000 n 
+0000373798 00000 n 
+0000373919 00000 n 
+0000377779 00000 n 
+0000377421 00000 n 
+0000374142 00000 n 
+0000377537 00000 n 
+0000377718 00000 n 
+0000381310 00000 n 
+0000381823 00000 n 
+0000381173 00000 n 
+0000377916 00000 n 
+0000381461 00000 n 
+0000381582 00000 n 
+0000381703 00000 n 
+0000385277 00000 n 
+0000385428 00000 n 
+0000385583 00000 n 
+0000385738 00000 n 
+0000385894 00000 n 
+0000390839 00000 n 
+0000386290 00000 n 
+0000385104 00000 n 
+0000382038 00000 n 
+0000386047 00000 n 
+0000386108 00000 n 
+0000386229 00000 n 
+0001241393 00000 n 
+0000390993 00000 n 
+0000391146 00000 n 
+0000391311 00000 n 
+0000391462 00000 n 
+0000391616 00000 n 
+0000391770 00000 n 
+0000392106 00000 n 
+0000390648 00000 n 
+0000386453 00000 n 
+0000391924 00000 n 
+0000392045 00000 n 
+0000397224 00000 n 
+0000397379 00000 n 
+0000397534 00000 n 
+0000397699 00000 n 
+0000397848 00000 n 
+0000398182 00000 n 
+0000397051 00000 n 
+0000392256 00000 n 
+0000398001 00000 n 
+0000398122 00000 n 
+0000402376 00000 n 
+0000402532 00000 n 
+0000402688 00000 n 
+0000402844 00000 n 
+0000402999 00000 n 
+0000403164 00000 n 
+0000403315 00000 n 
+0000407415 00000 n 
+0000403652 00000 n 
+0000402185 00000 n 
+0000398332 00000 n 
+0000403470 00000 n 
+0000403591 00000 n 
+0000407571 00000 n 
+0000407727 00000 n 
+0000407892 00000 n 
+0000408047 00000 n 
+0000408392 00000 n 
+0000407242 00000 n 
+0000403802 00000 n 
+0000408210 00000 n 
+0000408331 00000 n 
+0000411858 00000 n 
+0000417286 00000 n 
+0000412196 00000 n 
+0000411721 00000 n 
+0000408579 00000 n 
+0000412014 00000 n 
+0000412135 00000 n 
+0000417451 00000 n 
+0000417606 00000 n 
+0000417762 00000 n 
+0000418293 00000 n 
+0000417122 00000 n 
+0000412333 00000 n 
+0000417918 00000 n 
+0000418039 00000 n 
+0000418103 00000 n 
+0000418167 00000 n 
+0000418230 00000 n 
+0001241518 00000 n 
+0000930470 00000 n 
+0000422058 00000 n 
+0000421695 00000 n 
+0000418481 00000 n 
+0000421811 00000 n 
+0000421872 00000 n 
+0000421936 00000 n 
+0000421997 00000 n 
+0000425064 00000 n 
+0000425219 00000 n 
+0000426341 00000 n 
+0000424918 00000 n 
+0000422208 00000 n 
+0000425373 00000 n 
+0000425434 00000 n 
+0000425494 00000 n 
+0000425553 00000 n 
+0000425614 00000 n 
+0000425675 00000 n 
+0000425736 00000 n 
+0000425797 00000 n 
+0000425858 00000 n 
+0000425919 00000 n 
+0000425980 00000 n 
+0000426041 00000 n 
+0000426102 00000 n 
+0000426162 00000 n 
+0000426221 00000 n 
+0000426281 00000 n 
+0000430428 00000 n 
+0000430762 00000 n 
+0000430291 00000 n 
+0000426465 00000 n 
+0000430579 00000 n 
+0000430640 00000 n 
+0000430701 00000 n 
+0000435806 00000 n 
+0000435971 00000 n 
+0000434629 00000 n 
+0000434269 00000 n 
+0000430899 00000 n 
+0000434385 00000 n 
+0000434446 00000 n 
+0000434507 00000 n 
+0000434568 00000 n 
+0000436197 00000 n 
+0000435660 00000 n 
+0000434779 00000 n 
+0000436136 00000 n 
+0000439230 00000 n 
+0000439384 00000 n 
+0000442504 00000 n 
+0000439777 00000 n 
+0000439084 00000 n 
+0000436321 00000 n 
+0000439537 00000 n 
+0001241643 00000 n 
+0000442776 00000 n 
+0000442367 00000 n 
+0000439914 00000 n 
+0000442655 00000 n 
+0000446316 00000 n 
+0000446018 00000 n 
+0000442913 00000 n 
+0000446134 00000 n 
+0000446255 00000 n 
+0000449662 00000 n 
+0000449815 00000 n 
+0000450212 00000 n 
+0000449516 00000 n 
+0000446453 00000 n 
+0000449968 00000 n 
+0000450029 00000 n 
+0000450090 00000 n 
+0000450151 00000 n 
+0000453837 00000 n 
+0000453992 00000 n 
+0000454331 00000 n 
+0000453691 00000 n 
+0000450349 00000 n 
+0000454148 00000 n 
+0000454209 00000 n 
+0000454270 00000 n 
+0000457932 00000 n 
+0000458085 00000 n 
+0000458297 00000 n 
+0000457786 00000 n 
+0000454468 00000 n 
+0000458236 00000 n 
+0000462390 00000 n 
+0000462213 00000 n 
+0000458447 00000 n 
+0000462329 00000 n 
+0001241768 00000 n 
+0000464985 00000 n 
+0000465137 00000 n 
+0000465290 00000 n 
+0000465442 00000 n 
+0000465654 00000 n 
+0000464821 00000 n 
+0000462527 00000 n 
+0000465593 00000 n 
+0000469470 00000 n 
+0000469293 00000 n 
+0000465791 00000 n 
+0000469409 00000 n 
+0000473956 00000 n 
+0000474111 00000 n 
+0000474269 00000 n 
+0000474423 00000 n 
+0000474818 00000 n 
+0000473792 00000 n 
+0000469594 00000 n 
+0000474574 00000 n 
+0000474635 00000 n 
+0000474696 00000 n 
+0000474757 00000 n 
+0000478174 00000 n 
+0000477815 00000 n 
+0000475020 00000 n 
+0000477931 00000 n 
+0000477992 00000 n 
+0000478053 00000 n 
+0000483160 00000 n 
+0000483313 00000 n 
+0000483478 00000 n 
+0000483629 00000 n 
+0000483787 00000 n 
+0000484069 00000 n 
+0000482987 00000 n 
+0000478349 00000 n 
+0000483945 00000 n 
+0000486974 00000 n 
+0000486734 00000 n 
+0000484231 00000 n 
+0000486850 00000 n 
+0001241893 00000 n 
+0000490677 00000 n 
+0000490954 00000 n 
+0000490540 00000 n 
+0000487085 00000 n 
+0000490833 00000 n 
+0000494780 00000 n 
+0000494940 00000 n 
+0000495094 00000 n 
+0000495249 00000 n 
+0000495890 00000 n 
+0000494616 00000 n 
+0000491117 00000 n 
+0000495404 00000 n 
+0001239648 00000 n 
+0000495525 00000 n 
+0000495586 00000 n 
+0000495647 00000 n 
+0000495708 00000 n 
+0000495769 00000 n 
+0000495830 00000 n 
+0000500055 00000 n 
+0000500574 00000 n 
+0000499918 00000 n 
+0000496054 00000 n 
+0000500208 00000 n 
+0000500269 00000 n 
+0000500330 00000 n 
+0000500391 00000 n 
+0000500452 00000 n 
+0000500513 00000 n 
+0000502398 00000 n 
+0000502548 00000 n 
+0000502763 00000 n 
+0000502252 00000 n 
+0000500711 00000 n 
+0000502702 00000 n 
+0000503180 00000 n 
+0000503003 00000 n 
+0000502902 00000 n 
+0000503119 00000 n 
+0000505088 00000 n 
+0000504851 00000 n 
+0000503222 00000 n 
+0000504967 00000 n 
+0001242018 00000 n 
+0000508424 00000 n 
+0000508577 00000 n 
+0000508848 00000 n 
+0000508278 00000 n 
+0000505212 00000 n 
+0000508728 00000 n 
+0000512044 00000 n 
+0000512321 00000 n 
+0000511907 00000 n 
+0000508985 00000 n 
+0000512197 00000 n 
+0001238633 00000 n 
+0000516069 00000 n 
+0000515892 00000 n 
+0000512472 00000 n 
+0000516008 00000 n 
+0000519937 00000 n 
+0000519760 00000 n 
+0000516233 00000 n 
+0000519876 00000 n 
+0000524538 00000 n 
+0000524301 00000 n 
+0000520125 00000 n 
+0000524417 00000 n 
+0000527858 00000 n 
+0000528011 00000 n 
+0000528225 00000 n 
+0000527712 00000 n 
+0000524728 00000 n 
+0000528164 00000 n 
+0001242143 00000 n 
+0000532619 00000 n 
+0000532321 00000 n 
+0000528375 00000 n 
+0000532437 00000 n 
+0000532498 00000 n 
+0000536183 00000 n 
+0000536336 00000 n 
+0000536550 00000 n 
+0000536037 00000 n 
+0000532797 00000 n 
+0000536489 00000 n 
+0000539918 00000 n 
+0000539680 00000 n 
+0000536687 00000 n 
+0000539796 00000 n 
+0000539857 00000 n 
+0000545064 00000 n 
+0000544827 00000 n 
+0000540083 00000 n 
+0000544943 00000 n 
+0000548270 00000 n 
+0000548422 00000 n 
+0000548635 00000 n 
+0000548124 00000 n 
+0000545255 00000 n 
+0000548574 00000 n 
+0000553595 00000 n 
+0000553297 00000 n 
+0000548785 00000 n 
+0000553413 00000 n 
+0000553474 00000 n 
+0001242268 00000 n 
+0000557344 00000 n 
+0000557497 00000 n 
+0000557711 00000 n 
+0000557198 00000 n 
+0000553786 00000 n 
+0000557650 00000 n 
+0000562242 00000 n 
+0000565508 00000 n 
+0000565665 00000 n 
+0000562574 00000 n 
+0000562105 00000 n 
+0000557861 00000 n 
+0000562392 00000 n 
+0000562453 00000 n 
+0000565823 00000 n 
+0000566036 00000 n 
+0000565353 00000 n 
+0000562765 00000 n 
+0000565975 00000 n 
+0000930289 00000 n 
+0000930591 00000 n 
+0000570415 00000 n 
+0000570568 00000 n 
+0000570722 00000 n 
+0000571057 00000 n 
+0000570260 00000 n 
+0000566186 00000 n 
+0000570875 00000 n 
+0000570936 00000 n 
+0000574845 00000 n 
+0000574547 00000 n 
+0000571248 00000 n 
+0000574663 00000 n 
+0000574724 00000 n 
+0000577101 00000 n 
+0000576924 00000 n 
+0000575023 00000 n 
+0000577040 00000 n 
+0001242393 00000 n 
+0000580516 00000 n 
+0000580668 00000 n 
+0000580942 00000 n 
+0000580370 00000 n 
+0000577212 00000 n 
+0000580821 00000 n 
+0000583804 00000 n 
+0000583565 00000 n 
+0000581092 00000 n 
+0000583681 00000 n 
+0000584206 00000 n 
+0000584029 00000 n 
+0000583928 00000 n 
+0000584145 00000 n 
+0000587538 00000 n 
+0000587819 00000 n 
+0000587401 00000 n 
+0000584248 00000 n 
+0000587698 00000 n 
+0000591654 00000 n 
+0000592112 00000 n 
+0000591517 00000 n 
+0000587969 00000 n 
+0000591809 00000 n 
+0000591930 00000 n 
+0000592051 00000 n 
+0000595846 00000 n 
+0000596002 00000 n 
+0000596460 00000 n 
+0000595700 00000 n 
+0000592262 00000 n 
+0000596157 00000 n 
+0000596278 00000 n 
+0000596399 00000 n 
+0001242518 00000 n 
+0000597886 00000 n 
+0000597588 00000 n 
+0000596610 00000 n 
+0000597704 00000 n 
+0000597825 00000 n 
+0000600623 00000 n 
+0000600780 00000 n 
+0000600936 00000 n 
+0000601099 00000 n 
+0000601252 00000 n 
+0000601528 00000 n 
+0000600450 00000 n 
+0000598010 00000 n 
+0000601407 00000 n 
+0000604683 00000 n 
+0000604386 00000 n 
+0000601665 00000 n 
+0000604502 00000 n 
+0000608154 00000 n 
+0000609535 00000 n 
+0000608368 00000 n 
+0000608017 00000 n 
+0000604833 00000 n 
+0000608307 00000 n 
+0000616348 00000 n 
+0000609419 00000 n 
+0000608505 00000 n 
+0000616224 00000 n 
+0000612178 00000 n 
+0000612414 00000 n 
+0000612462 00000 n 
+0000612867 00000 n 
+0000612890 00000 n 
+0000613238 00000 n 
+0000613334 00000 n 
+0000620596 00000 n 
+0000620299 00000 n 
+0000616501 00000 n 
+0000620415 00000 n 
+0001242643 00000 n 
+0000623742 00000 n 
+0000623565 00000 n 
+0000620746 00000 n 
+0000623681 00000 n 
+0000627494 00000 n 
+0000627195 00000 n 
+0000623879 00000 n 
+0000627311 00000 n 
+0000627372 00000 n 
+0000627433 00000 n 
+0000630598 00000 n 
+0000630361 00000 n 
+0000627644 00000 n 
+0000630477 00000 n 
+0000633851 00000 n 
+0000633614 00000 n 
+0000630748 00000 n 
+0000633730 00000 n 
+0000636872 00000 n 
+0000637146 00000 n 
+0000636735 00000 n 
+0000634014 00000 n 
+0000637025 00000 n 
+0000641573 00000 n 
+0000639944 00000 n 
+0000639767 00000 n 
+0000637309 00000 n 
+0000639883 00000 n 
+0001242768 00000 n 
+0000651051 00000 n 
+0000641457 00000 n 
+0000640067 00000 n 
+0000650927 00000 n 
+0000645085 00000 n 
+0000645320 00000 n 
+0000645368 00000 n 
+0000645805 00000 n 
+0000645828 00000 n 
+0000646225 00000 n 
+0000646321 00000 n 
+0000658477 00000 n 
+0000658634 00000 n 
+0000654260 00000 n 
+0000654023 00000 n 
+0000651204 00000 n 
+0000654139 00000 n 
+0000658790 00000 n 
+0000658944 00000 n 
+0000659098 00000 n 
+0000659253 00000 n 
+0000659408 00000 n 
+0000659569 00000 n 
+0000659722 00000 n 
+0000659877 00000 n 
+0000660030 00000 n 
+0000660185 00000 n 
+0000660340 00000 n 
+0000660795 00000 n 
+0000658232 00000 n 
+0000654410 00000 n 
+0000660495 00000 n 
+0000664499 00000 n 
+0000664262 00000 n 
+0000660945 00000 n 
+0000664378 00000 n 
+0000666603 00000 n 
+0000666307 00000 n 
+0000664662 00000 n 
+0000666423 00000 n 
+0000669875 00000 n 
+0000669638 00000 n 
+0000666753 00000 n 
+0000669754 00000 n 
+0001236742 00000 n 
+0001242893 00000 n 
+0000673900 00000 n 
+0000673542 00000 n 
+0000670067 00000 n 
+0000673658 00000 n 
+0000673839 00000 n 
+0000780627 00000 n 
+0000675938 00000 n 
+0000780781 00000 n 
+0000782592 00000 n 
+0000781058 00000 n 
+0000675792 00000 n 
+0000674050 00000 n 
+0000780935 00000 n 
+0000888616 00000 n 
+0000782476 00000 n 
+0000781232 00000 n 
+0000888371 00000 n 
+0000888495 00000 n 
+0000891008 00000 n 
+0000890831 00000 n 
+0000888790 00000 n 
+0000890947 00000 n 
+0000894040 00000 n 
+0000893863 00000 n 
+0000891119 00000 n 
+0000893979 00000 n 
+0000896161 00000 n 
+0000895924 00000 n 
+0000894151 00000 n 
+0000896040 00000 n 
+0001243018 00000 n 
+0000900704 00000 n 
+0000900163 00000 n 
+0000896285 00000 n 
+0000900279 00000 n 
+0000900400 00000 n 
+0000900461 00000 n 
+0000900522 00000 n 
+0000900583 00000 n 
+0000900644 00000 n 
+0000905111 00000 n 
+0000904083 00000 n 
+0000900869 00000 n 
+0000904199 00000 n 
+0000904380 00000 n 
+0000904441 00000 n 
+0000904502 00000 n 
+0000904563 00000 n 
+0000904624 00000 n 
+0000904684 00000 n 
+0000904745 00000 n 
+0000904806 00000 n 
+0000904867 00000 n 
+0000904928 00000 n 
+0000904989 00000 n 
+0000905050 00000 n 
+0000907211 00000 n 
+0000907363 00000 n 
+0000907636 00000 n 
+0000907065 00000 n 
+0000905276 00000 n 
+0000907515 00000 n 
+0000911351 00000 n 
+0000911111 00000 n 
+0000907773 00000 n 
+0000911227 00000 n 
+0000913722 00000 n 
+0000913484 00000 n 
+0000911462 00000 n 
+0000913600 00000 n 
+0000916207 00000 n 
+0000915850 00000 n 
+0000913833 00000 n 
+0000915966 00000 n 
+0001243143 00000 n 
+0000919301 00000 n 
+0000919124 00000 n 
+0000916357 00000 n 
+0000919240 00000 n 
+0000922344 00000 n 
+0000922167 00000 n 
+0000919425 00000 n 
+0000922283 00000 n 
+0000924674 00000 n 
+0000924497 00000 n 
+0000922468 00000 n 
+0000924613 00000 n 
+0000928699 00000 n 
+0000927443 00000 n 
+0000924798 00000 n 
+0000927559 00000 n 
+0000927620 00000 n 
+0000930772 00000 n 
+0000930112 00000 n 
+0000928797 00000 n 
+0000930228 00000 n 
+0000933765 00000 n 
+0000933917 00000 n 
+0000934069 00000 n 
+0000934221 00000 n 
+0000934373 00000 n 
+0000934525 00000 n 
+0000934676 00000 n 
+0000934826 00000 n 
+0000934978 00000 n 
+0000935129 00000 n 
+0000935281 00000 n 
+0000935430 00000 n 
+0000935582 00000 n 
+0000935734 00000 n 
+0000935886 00000 n 
+0000936038 00000 n 
+0000936190 00000 n 
+0000936342 00000 n 
+0000936494 00000 n 
+0000936643 00000 n 
+0000936793 00000 n 
+0000936943 00000 n 
+0000937094 00000 n 
+0000937243 00000 n 
+0000937393 00000 n 
+0000937543 00000 n 
+0000937694 00000 n 
+0000937846 00000 n 
+0000937998 00000 n 
+0000938150 00000 n 
+0000938302 00000 n 
+0000938454 00000 n 
+0000938606 00000 n 
+0000938757 00000 n 
+0000938906 00000 n 
+0000939058 00000 n 
+0000939209 00000 n 
+0000939361 00000 n 
+0000939513 00000 n 
+0000939665 00000 n 
+0000939817 00000 n 
+0000939967 00000 n 
+0000940117 00000 n 
+0000940269 00000 n 
+0000940421 00000 n 
+0000940573 00000 n 
+0000940724 00000 n 
+0000940874 00000 n 
+0000941024 00000 n 
+0000941174 00000 n 
+0000941324 00000 n 
+0000941474 00000 n 
+0000941623 00000 n 
+0000941771 00000 n 
+0000941921 00000 n 
+0000942070 00000 n 
+0000942221 00000 n 
+0000942371 00000 n 
+0000942522 00000 n 
+0000942673 00000 n 
+0000942825 00000 n 
+0000942976 00000 n 
+0000943127 00000 n 
+0000943278 00000 n 
+0000943428 00000 n 
+0000943578 00000 n 
+0000943729 00000 n 
+0000943880 00000 n 
+0000944030 00000 n 
+0000944180 00000 n 
+0000944331 00000 n 
+0000944480 00000 n 
+0000944631 00000 n 
+0000944780 00000 n 
+0000944931 00000 n 
+0000945082 00000 n 
+0000945233 00000 n 
+0000945384 00000 n 
+0000945535 00000 n 
+0000945686 00000 n 
+0000945837 00000 n 
+0000945988 00000 n 
+0000946139 00000 n 
+0000946290 00000 n 
+0000946441 00000 n 
+0000946592 00000 n 
+0000946743 00000 n 
+0000946894 00000 n 
+0000947045 00000 n 
+0000947196 00000 n 
+0000947347 00000 n 
+0000947498 00000 n 
+0000947649 00000 n 
+0000947800 00000 n 
+0000947951 00000 n 
+0000948102 00000 n 
+0000948253 00000 n 
+0000948404 00000 n 
+0000948554 00000 n 
+0000948701 00000 n 
+0000948850 00000 n 
+0000948997 00000 n 
+0000954140 00000 n 
+0000949267 00000 n 
+0000932719 00000 n 
+0000930870 00000 n 
+0000949146 00000 n 
+0001243268 00000 n 
+0000954290 00000 n 
+0000954441 00000 n 
+0000954591 00000 n 
+0000954742 00000 n 
+0000954893 00000 n 
+0000955044 00000 n 
+0000955194 00000 n 
+0000955345 00000 n 
+0000955496 00000 n 
+0000955647 00000 n 
+0000955797 00000 n 
+0000955949 00000 n 
+0000956100 00000 n 
+0000956251 00000 n 
+0000956403 00000 n 
+0000956555 00000 n 
+0000956707 00000 n 
+0000956858 00000 n 
+0000957010 00000 n 
+0000957161 00000 n 
+0000957311 00000 n 
+0000957462 00000 n 
+0000957612 00000 n 
+0000957763 00000 n 
+0000957914 00000 n 
+0000958065 00000 n 
+0000958216 00000 n 
+0000958366 00000 n 
+0000958516 00000 n 
+0000958667 00000 n 
+0000958817 00000 n 
+0000958968 00000 n 
+0000959119 00000 n 
+0000959270 00000 n 
+0000959421 00000 n 
+0000959572 00000 n 
+0000959722 00000 n 
+0000959872 00000 n 
+0000960023 00000 n 
+0000960174 00000 n 
+0000960324 00000 n 
+0000960474 00000 n 
+0000960625 00000 n 
+0000960776 00000 n 
+0000960926 00000 n 
+0000961076 00000 n 
+0000961227 00000 n 
+0000961378 00000 n 
+0000961529 00000 n 
+0000961679 00000 n 
+0000961826 00000 n 
+0000961975 00000 n 
+0000962122 00000 n 
+0000962269 00000 n 
+0000962418 00000 n 
+0000962567 00000 n 
+0000962718 00000 n 
+0000962866 00000 n 
+0000963017 00000 n 
+0000963168 00000 n 
+0000963319 00000 n 
+0000963470 00000 n 
+0000963621 00000 n 
+0000963772 00000 n 
+0000963923 00000 n 
+0000964074 00000 n 
+0000964224 00000 n 
+0000964375 00000 n 
+0000964526 00000 n 
+0000964675 00000 n 
+0000964826 00000 n 
+0000964977 00000 n 
+0000965128 00000 n 
+0000965278 00000 n 
+0000965429 00000 n 
+0000965579 00000 n 
+0000965730 00000 n 
+0000965880 00000 n 
+0000966029 00000 n 
+0000966180 00000 n 
+0000966331 00000 n 
+0000966482 00000 n 
+0000966633 00000 n 
+0000966784 00000 n 
+0000966935 00000 n 
+0000967086 00000 n 
+0000967237 00000 n 
+0000967387 00000 n 
+0000967538 00000 n 
+0000967688 00000 n 
+0000967839 00000 n 
+0000967989 00000 n 
+0000968140 00000 n 
+0000968289 00000 n 
+0000968440 00000 n 
+0000968591 00000 n 
+0000968741 00000 n 
+0000968892 00000 n 
+0000969043 00000 n 
+0000969194 00000 n 
+0000969345 00000 n 
+0000969495 00000 n 
+0000969646 00000 n 
+0000969797 00000 n 
+0000969948 00000 n 
+0000970099 00000 n 
+0000970250 00000 n 
+0000970399 00000 n 
+0000970550 00000 n 
+0000970701 00000 n 
+0000970851 00000 n 
+0000971002 00000 n 
+0000971153 00000 n 
+0000971304 00000 n 
+0000971455 00000 n 
+0000971606 00000 n 
+0000971756 00000 n 
+0000971907 00000 n 
+0000972057 00000 n 
+0000972208 00000 n 
+0000972359 00000 n 
+0000972509 00000 n 
+0000972660 00000 n 
+0000972811 00000 n 
+0000972962 00000 n 
+0000973112 00000 n 
+0000973262 00000 n 
+0000973412 00000 n 
+0000973562 00000 n 
+0000973713 00000 n 
+0000973863 00000 n 
+0000974014 00000 n 
+0000974165 00000 n 
+0000974316 00000 n 
+0000974467 00000 n 
+0000974617 00000 n 
+0000974767 00000 n 
+0000974915 00000 n 
+0000975066 00000 n 
+0000975217 00000 n 
+0000975367 00000 n 
+0000975518 00000 n 
+0000975669 00000 n 
+0000975819 00000 n 
+0000975969 00000 n 
+0000976117 00000 n 
+0000976265 00000 n 
+0000976414 00000 n 
+0000976562 00000 n 
+0000976711 00000 n 
+0000980859 00000 n 
+0000976921 00000 n 
+0000952653 00000 n 
+0000949378 00000 n 
+0000976860 00000 n 
+0000981010 00000 n 
+0000981161 00000 n 
+0000981311 00000 n 
+0000981461 00000 n 
+0000981611 00000 n 
+0000981762 00000 n 
+0000981913 00000 n 
+0000982064 00000 n 
+0000982215 00000 n 
+0000982365 00000 n 
+0000982516 00000 n 
+0000982667 00000 n 
+0000982817 00000 n 
+0000982967 00000 n 
+0000983118 00000 n 
+0000983269 00000 n 
+0000983420 00000 n 
+0000983571 00000 n 
+0000983722 00000 n 
+0000983872 00000 n 
+0000984023 00000 n 
+0000984174 00000 n 
+0000984325 00000 n 
+0000984475 00000 n 
+0000984626 00000 n 
+0000984777 00000 n 
+0000984928 00000 n 
+0000985079 00000 n 
+0000985227 00000 n 
+0000985378 00000 n 
+0000985529 00000 n 
+0000985680 00000 n 
+0000985831 00000 n 
+0000985981 00000 n 
+0000986131 00000 n 
+0000986282 00000 n 
+0000986433 00000 n 
+0000986584 00000 n 
+0000986734 00000 n 
+0000986885 00000 n 
+0000987035 00000 n 
+0000987186 00000 n 
+0000987336 00000 n 
+0000987487 00000 n 
+0000987638 00000 n 
+0000987789 00000 n 
+0000987938 00000 n 
+0000988089 00000 n 
+0000988238 00000 n 
+0000988389 00000 n 
+0000988540 00000 n 
+0000988691 00000 n 
+0000988842 00000 n 
+0000988993 00000 n 
+0000989144 00000 n 
+0000989295 00000 n 
+0000989446 00000 n 
+0000989597 00000 n 
+0000989747 00000 n 
+0000989898 00000 n 
+0000990048 00000 n 
+0000990196 00000 n 
+0000990345 00000 n 
+0000990494 00000 n 
+0000990643 00000 n 
+0000990794 00000 n 
+0000990945 00000 n 
+0000991096 00000 n 
+0000991247 00000 n 
+0000991398 00000 n 
+0000991549 00000 n 
+0000991700 00000 n 
+0000991851 00000 n 
+0000992001 00000 n 
+0000992151 00000 n 
+0000992301 00000 n 
+0000992452 00000 n 
+0000992603 00000 n 
+0000992754 00000 n 
+0000992905 00000 n 
+0000993056 00000 n 
+0000993207 00000 n 
+0000993358 00000 n 
+0000993509 00000 n 
+0000993659 00000 n 
+0000993810 00000 n 
+0000993961 00000 n 
+0000994112 00000 n 
+0000994261 00000 n 
+0000994412 00000 n 
+0000994563 00000 n 
+0000994714 00000 n 
+0000994865 00000 n 
+0000995016 00000 n 
+0000995164 00000 n 
+0000995315 00000 n 
+0000995466 00000 n 
+0000995617 00000 n 
+0000995767 00000 n 
+0000995917 00000 n 
+0000996066 00000 n 
+0000996217 00000 n 
+0000996367 00000 n 
+0000996517 00000 n 
+0000996667 00000 n 
+0000996818 00000 n 
+0000996969 00000 n 
+0000997119 00000 n 
+0000997270 00000 n 
+0000997421 00000 n 
+0000997572 00000 n 
+0000997722 00000 n 
+0000997873 00000 n 
+0000998021 00000 n 
+0000998171 00000 n 
+0000998322 00000 n 
+0000998473 00000 n 
+0000998624 00000 n 
+0000998774 00000 n 
+0000998925 00000 n 
+0000999076 00000 n 
+0000999226 00000 n 
+0000999377 00000 n 
+0000999528 00000 n 
+0000999679 00000 n 
+0000999829 00000 n 
+0000999980 00000 n 
+0001000130 00000 n 
+0001000281 00000 n 
+0001000432 00000 n 
+0001000583 00000 n 
+0001000734 00000 n 
+0001000885 00000 n 
+0001001035 00000 n 
+0001001186 00000 n 
+0001001337 00000 n 
+0001001487 00000 n 
+0001001636 00000 n 
+0001001784 00000 n 
+0001001932 00000 n 
+0001002081 00000 n 
+0001002230 00000 n 
+0001002440 00000 n 
+0000979444 00000 n 
+0000977032 00000 n 
+0001002379 00000 n 
+0001006329 00000 n 
+0001006479 00000 n 
+0001006630 00000 n 
+0001006781 00000 n 
+0001006931 00000 n 
+0001007081 00000 n 
+0001007230 00000 n 
+0001007380 00000 n 
+0001007531 00000 n 
+0001007681 00000 n 
+0001007830 00000 n 
+0001007981 00000 n 
+0001008132 00000 n 
+0001008282 00000 n 
+0001008432 00000 n 
+0001008583 00000 n 
+0001008734 00000 n 
+0001008885 00000 n 
+0001009036 00000 n 
+0001009187 00000 n 
+0001009338 00000 n 
+0001009488 00000 n 
+0001009639 00000 n 
+0001009790 00000 n 
+0001009940 00000 n 
+0001010088 00000 n 
+0001010238 00000 n 
+0001010388 00000 n 
+0001010538 00000 n 
+0001010688 00000 n 
+0001010839 00000 n 
+0001010990 00000 n 
+0001011141 00000 n 
+0001011291 00000 n 
+0001011442 00000 n 
+0001011593 00000 n 
+0001011744 00000 n 
+0001011895 00000 n 
+0001012046 00000 n 
+0001012197 00000 n 
+0001012347 00000 n 
+0001012496 00000 n 
+0001012645 00000 n 
+0001012796 00000 n 
+0001012947 00000 n 
+0001013098 00000 n 
+0001013248 00000 n 
+0001013399 00000 n 
+0001013550 00000 n 
+0001013700 00000 n 
+0001013851 00000 n 
+0001014002 00000 n 
+0001014153 00000 n 
+0001014304 00000 n 
+0001014455 00000 n 
+0001014605 00000 n 
+0001014755 00000 n 
+0001014906 00000 n 
+0001015056 00000 n 
+0001015206 00000 n 
+0001015357 00000 n 
+0001015506 00000 n 
+0001015657 00000 n 
+0001015807 00000 n 
+0001015958 00000 n 
+0001016109 00000 n 
+0001016260 00000 n 
+0001016411 00000 n 
+0001016562 00000 n 
+0001016713 00000 n 
+0001016864 00000 n 
+0001017015 00000 n 
+0001017165 00000 n 
+0001017316 00000 n 
+0001017466 00000 n 
+0001017614 00000 n 
+0001017762 00000 n 
+0001017909 00000 n 
+0001018057 00000 n 
+0001018206 00000 n 
+0001018354 00000 n 
+0001018501 00000 n 
+0001018650 00000 n 
+0001018800 00000 n 
+0001018951 00000 n 
+0001019102 00000 n 
+0001019253 00000 n 
+0001019404 00000 n 
+0001019555 00000 n 
+0001019706 00000 n 
+0001019857 00000 n 
+0001020007 00000 n 
+0001020157 00000 n 
+0001020307 00000 n 
+0001020458 00000 n 
+0001020609 00000 n 
+0001020760 00000 n 
+0001020911 00000 n 
+0001021062 00000 n 
+0001021213 00000 n 
+0001021363 00000 n 
+0001021514 00000 n 
+0001021665 00000 n 
+0001021816 00000 n 
+0001021965 00000 n 
+0001022115 00000 n 
+0001022266 00000 n 
+0001022416 00000 n 
+0001022565 00000 n 
+0001022716 00000 n 
+0001022867 00000 n 
+0001023018 00000 n 
+0001023169 00000 n 
+0001023319 00000 n 
+0001023470 00000 n 
+0001023621 00000 n 
+0001023772 00000 n 
+0001023923 00000 n 
+0001024073 00000 n 
+0001024224 00000 n 
+0001024375 00000 n 
+0001024526 00000 n 
+0001024677 00000 n 
+0001024828 00000 n 
+0001024979 00000 n 
+0001025130 00000 n 
+0001025282 00000 n 
+0001025433 00000 n 
+0001025584 00000 n 
+0001025733 00000 n 
+0001025884 00000 n 
+0001026035 00000 n 
+0001026186 00000 n 
+0001026337 00000 n 
+0001026488 00000 n 
+0001026639 00000 n 
+0001026790 00000 n 
+0001026940 00000 n 
+0001027088 00000 n 
+0001027236 00000 n 
+0001027385 00000 n 
+0001032325 00000 n 
+0001032475 00000 n 
+0001027594 00000 n 
+0001004932 00000 n 
+0001002551 00000 n 
+0001027533 00000 n 
+0001032626 00000 n 
+0001032777 00000 n 
+0001032927 00000 n 
+0001033078 00000 n 
+0001033230 00000 n 
+0001033382 00000 n 
+0001033534 00000 n 
+0001033685 00000 n 
+0001033837 00000 n 
+0001033987 00000 n 
+0001034138 00000 n 
+0001034289 00000 n 
+0001034441 00000 n 
+0001034592 00000 n 
+0001034743 00000 n 
+0001034895 00000 n 
+0001035046 00000 n 
+0001035196 00000 n 
+0001035348 00000 n 
+0001035499 00000 n 
+0001035650 00000 n 
+0001035802 00000 n 
+0001035952 00000 n 
+0001036103 00000 n 
+0001036253 00000 n 
+0001036404 00000 n 
+0001036556 00000 n 
+0001036705 00000 n 
+0001036855 00000 n 
+0001037006 00000 n 
+0001037158 00000 n 
+0001037310 00000 n 
+0001037462 00000 n 
+0001037614 00000 n 
+0001037766 00000 n 
+0001037918 00000 n 
+0001038068 00000 n 
+0001038220 00000 n 
+0001038371 00000 n 
+0001038523 00000 n 
+0001038675 00000 n 
+0001038827 00000 n 
+0001038978 00000 n 
+0001039130 00000 n 
+0001039281 00000 n 
+0001039433 00000 n 
+0001039585 00000 n 
+0001039735 00000 n 
+0001039885 00000 n 
+0001040033 00000 n 
+0001040183 00000 n 
+0001040333 00000 n 
+0001040483 00000 n 
+0001040634 00000 n 
+0001040786 00000 n 
+0001040938 00000 n 
+0001041090 00000 n 
+0001041242 00000 n 
+0001041394 00000 n 
+0001041545 00000 n 
+0001041695 00000 n 
+0001041847 00000 n 
+0001041998 00000 n 
+0001042149 00000 n 
+0001042300 00000 n 
+0001042452 00000 n 
+0001042603 00000 n 
+0001042755 00000 n 
+0001042905 00000 n 
+0001043056 00000 n 
+0001043206 00000 n 
+0001043358 00000 n 
+0001043509 00000 n 
+0001043660 00000 n 
+0001043812 00000 n 
+0001043964 00000 n 
+0001044116 00000 n 
+0001044268 00000 n 
+0001044419 00000 n 
+0001044571 00000 n 
+0001044723 00000 n 
+0001044874 00000 n 
+0001045026 00000 n 
+0001045178 00000 n 
+0001045330 00000 n 
+0001045482 00000 n 
+0001045634 00000 n 
+0001045786 00000 n 
+0001045937 00000 n 
+0001046087 00000 n 
+0001046236 00000 n 
+0001046386 00000 n 
+0001046536 00000 n 
+0001046687 00000 n 
+0001046837 00000 n 
+0001046987 00000 n 
+0001047136 00000 n 
+0001047286 00000 n 
+0001047437 00000 n 
+0001047588 00000 n 
+0001047739 00000 n 
+0001047890 00000 n 
+0001048041 00000 n 
+0001048192 00000 n 
+0001048342 00000 n 
+0001048492 00000 n 
+0001048642 00000 n 
+0001048791 00000 n 
+0001048942 00000 n 
+0001049092 00000 n 
+0001049241 00000 n 
+0001049392 00000 n 
+0001049542 00000 n 
+0001049692 00000 n 
+0001049841 00000 n 
+0001049991 00000 n 
+0001050140 00000 n 
+0001050289 00000 n 
+0001050438 00000 n 
+0001050586 00000 n 
+0001053315 00000 n 
+0001050796 00000 n 
+0001031099 00000 n 
+0001027705 00000 n 
+0001050735 00000 n 
+0001053465 00000 n 
+0001053615 00000 n 
+0001053765 00000 n 
+0001053916 00000 n 
+0001054066 00000 n 
+0001054217 00000 n 
+0001054368 00000 n 
+0001054519 00000 n 
+0001054669 00000 n 
+0001054819 00000 n 
+0001054970 00000 n 
+0001055119 00000 n 
+0001055270 00000 n 
+0001055421 00000 n 
+0001055572 00000 n 
+0001055723 00000 n 
+0001055874 00000 n 
+0001056024 00000 n 
+0001056175 00000 n 
+0001056326 00000 n 
+0001056477 00000 n 
+0001056628 00000 n 
+0001056779 00000 n 
+0001056930 00000 n 
+0001057082 00000 n 
+0001057233 00000 n 
+0001057385 00000 n 
+0001057537 00000 n 
+0001057689 00000 n 
+0001057841 00000 n 
+0001057992 00000 n 
+0001058144 00000 n 
+0001058295 00000 n 
+0001058445 00000 n 
+0001058595 00000 n 
+0001058747 00000 n 
+0001058899 00000 n 
+0001059051 00000 n 
+0001059203 00000 n 
+0001059355 00000 n 
+0001059507 00000 n 
+0001059659 00000 n 
+0001059811 00000 n 
+0001059963 00000 n 
+0001060113 00000 n 
+0001060264 00000 n 
+0001060415 00000 n 
+0001060564 00000 n 
+0001060715 00000 n 
+0001060865 00000 n 
+0001061015 00000 n 
+0001061164 00000 n 
+0001061313 00000 n 
+0001061463 00000 n 
+0001061612 00000 n 
+0001061762 00000 n 
+0001061912 00000 n 
+0001062062 00000 n 
+0001062213 00000 n 
+0001062364 00000 n 
+0001062515 00000 n 
+0001062666 00000 n 
+0001062817 00000 n 
+0001062968 00000 n 
+0001063119 00000 n 
+0001063270 00000 n 
+0001063421 00000 n 
+0001063632 00000 n 
+0001052575 00000 n 
+0001050907 00000 n 
+0001063571 00000 n 
+0001063743 00000 n 
+0001063877 00000 n 
+0001064023 00000 n 
+0001064049 00000 n 
+0001064075 00000 n 
+0001064586 00000 n 
+0001064933 00000 n 
+0001064958 00000 n 
+0001065285 00000 n 
+0001065896 00000 n 
+0001066295 00000 n 
+0001066777 00000 n 
+0001066919 00000 n 
+0001067614 00000 n 
+0001068256 00000 n 
+0001068319 00000 n 
+0001068983 00000 n 
+0001069367 00000 n 
+0001070009 00000 n 
+0001070700 00000 n 
+0001071338 00000 n 
+0001071850 00000 n 
+0001072257 00000 n 
+0001072734 00000 n 
+0001073224 00000 n 
+0001086973 00000 n 
+0001087417 00000 n 
+0001099376 00000 n 
+0001099810 00000 n 
+0001103254 00000 n 
+0001103499 00000 n 
+0001109609 00000 n 
+0001109887 00000 n 
+0001113792 00000 n 
+0001114247 00000 n 
+0001127361 00000 n 
+0001127753 00000 n 
+0001129741 00000 n 
+0001129963 00000 n 
+0001138017 00000 n 
+0001138312 00000 n 
+0001155748 00000 n 
+0001156336 00000 n 
+0001162910 00000 n 
+0001163217 00000 n 
+0001168153 00000 n 
+0001168449 00000 n 
+0001170275 00000 n 
+0001170503 00000 n 
+0001176512 00000 n 
+0001176833 00000 n 
+0001182958 00000 n 
+0001183268 00000 n 
+0001185774 00000 n 
+0001186005 00000 n 
+0001190781 00000 n 
+0001191035 00000 n 
+0001195254 00000 n 
+0001195672 00000 n 
+0001196992 00000 n 
+0001197225 00000 n 
+0001198542 00000 n 
+0001198775 00000 n 
+0001209637 00000 n 
+0001209974 00000 n 
+0001216475 00000 n 
+0001216748 00000 n 
+0001231987 00000 n 
+0001232562 00000 n 
+0001234257 00000 n 
+0001234476 00000 n 
+0001236228 00000 n 
+0001243393 00000 n 
+0001243513 00000 n 
+0001243638 00000 n 
+0001243764 00000 n 
+0001243890 00000 n 
+0001243998 00000 n 
+0001244099 00000 n 
+0001254462 00000 n 
+0001254636 00000 n 
+0001254807 00000 n 
+0001254981 00000 n 
+0001255155 00000 n 
+0001255332 00000 n 
+0001255507 00000 n 
+0001255684 00000 n 
+0001255859 00000 n 
+0001256036 00000 n 
+0001256211 00000 n 
+0001256388 00000 n 
+0001256571 00000 n 
+0001256763 00000 n 
+0001256947 00000 n 
+0001257149 00000 n 
+0001257356 00000 n 
+0001257573 00000 n 
+0001257801 00000 n 
+0001258016 00000 n 
+0001258230 00000 n 
+0001258433 00000 n 
+0001258617 00000 n 
+0001258802 00000 n 
+0001258985 00000 n 
+0001259170 00000 n 
+0001259353 00000 n 
+0001259538 00000 n 
+0001259720 00000 n 
+0001259902 00000 n 
+0001260087 00000 n 
+0001260270 00000 n 
+0001260455 00000 n 
+0001260631 00000 n 
+0001260800 00000 n 
+0001260969 00000 n 
+0001261146 00000 n 
+0001261321 00000 n 
+0001261498 00000 n 
+0001261673 00000 n 
+0001261850 00000 n 
+0001262025 00000 n 
+0001262202 00000 n 
+0001262377 00000 n 
+0001262554 00000 n 
+0001262728 00000 n 
+0001262902 00000 n 
+0001263079 00000 n 
+0001263253 00000 n 
+0001263427 00000 n 
+0001263628 00000 n 
+0001263845 00000 n 
+0001264060 00000 n 
+0001264277 00000 n 
+0001264491 00000 n 
+0001264705 00000 n 
+0001264922 00000 n 
+0001265137 00000 n 
+0001265354 00000 n 
+0001265564 00000 n 
+0001265767 00000 n 
+0001265970 00000 n 
+0001266171 00000 n 
+0001266380 00000 n 
+0001266589 00000 n 
+0001266795 00000 n 
+0001267004 00000 n 
+0001267211 00000 n 
+0001267420 00000 n 
+0001267627 00000 n 
+0001267836 00000 n 
+0001268043 00000 n 
+0001268252 00000 n 
+0001268458 00000 n 
+0001268665 00000 n 
+0001268862 00000 n 
+0001269059 00000 n 
+0001269262 00000 n 
+0001269465 00000 n 
+0001269668 00000 n 
+0001269871 00000 n 
+0001270074 00000 n 
+0001270302 00000 n 
+0001270547 00000 n 
+0001270791 00000 n 
+0001271034 00000 n 
+0001271277 00000 n 
+0001271520 00000 n 
+0001271772 00000 n 
+0001272054 00000 n 
+0001272337 00000 n 
+0001272548 00000 n 
+0001272715 00000 n 
+0001272833 00000 n 
+0001272955 00000 n 
+0001273078 00000 n 
+0001273202 00000 n 
+0001273320 00000 n 
+0001273437 00000 n 
+0001273553 00000 n 
+0001273669 00000 n 
+0001273791 00000 n 
+0001273916 00000 n 
+0001274040 00000 n 
+0001274164 00000 n 
+0001274287 00000 n 
+0001274416 00000 n 
+0001274555 00000 n 
+0001274651 00000 n 
+0001274769 00000 n 
+0001274889 00000 n 
+0001274992 00000 n 
+0001275085 00000 n 
+0001275125 00000 n 
+0001275312 00000 n 
+trailer
+<< /Size 2794
+/Root 2792 0 R
+/Info 2793 0 R
+/ID [<3B53FB94733E48B5C49F16B238685122> <3B53FB94733E48B5C49F16B238685122>] >>
+startxref
+1275644
+%%EOF
diff --git a/doc/idas/idas_examples.pdf b/doc/idas/idas_examples.pdf
new file mode 100644
index 0000000..d755f01
Binary files /dev/null and b/doc/idas/idas_examples.pdf differ
diff --git a/doc/idas/idas_guide.pdf b/doc/idas/idas_guide.pdf
new file mode 100644
index 0000000..bc274e2
--- /dev/null
+++ b/doc/idas/idas_guide.pdf
@@ -0,0 +1,33222 @@
+%PDF-1.4
+%����
+5 0 obj
+<< /S /GoTo /D (section*.3) >>
+endobj
+8 0 obj
+(List of Tables)
+endobj
+9 0 obj
+<< /S /GoTo /D (section*.5) >>
+endobj
+12 0 obj
+(List of Figures)
+endobj
+13 0 obj
+<< /S /GoTo /D (chapter.1) >>
+endobj
+16 0 obj
+(Introduction)
+endobj
+17 0 obj
+<< /S /GoTo /D (section.1.1) >>
+endobj
+20 0 obj
+(Changes from previous versions)
+endobj
+21 0 obj
+<< /S /GoTo /D (section.1.2) >>
+endobj
+24 0 obj
+(Reading this User Guide)
+endobj
+25 0 obj
+<< /S /GoTo /D (section.1.3) >>
+endobj
+28 0 obj
+(SUNDIALS Release License)
+endobj
+29 0 obj
+<< /S /GoTo /D (subsection.1.3.1) >>
+endobj
+32 0 obj
+(Copyright Notices)
+endobj
+33 0 obj
+<< /S /GoTo /D (subsubsection.1.3.1.1) >>
+endobj
+36 0 obj
+(SUNDIALS Copyright)
+endobj
+37 0 obj
+<< /S /GoTo /D (subsubsection.1.3.1.2) >>
+endobj
+40 0 obj
+(ARKode Copyright)
+endobj
+41 0 obj
+<< /S /GoTo /D (subsection.1.3.2) >>
+endobj
+44 0 obj
+(BSD License)
+endobj
+45 0 obj
+<< /S /GoTo /D (chapter.2) >>
+endobj
+48 0 obj
+(Mathematical Considerations)
+endobj
+49 0 obj
+<< /S /GoTo /D (section.2.1) >>
+endobj
+52 0 obj
+(IVP solution)
+endobj
+53 0 obj
+<< /S /GoTo /D (section.2.2) >>
+endobj
+56 0 obj
+(Preconditioning)
+endobj
+57 0 obj
+<< /S /GoTo /D (section.2.3) >>
+endobj
+60 0 obj
+(Rootfinding)
+endobj
+61 0 obj
+<< /S /GoTo /D (section.2.4) >>
+endobj
+64 0 obj
+(Pure quadrature integration)
+endobj
+65 0 obj
+<< /S /GoTo /D (section.2.5) >>
+endobj
+68 0 obj
+(Forward sensitivity analysis)
+endobj
+69 0 obj
+<< /S /GoTo /D (subsection.2.5.1) >>
+endobj
+72 0 obj
+(Forward sensitivity methods)
+endobj
+73 0 obj
+<< /S /GoTo /D (subsection.2.5.2) >>
+endobj
+76 0 obj
+(Selection of the absolute tolerances for sensitivity variables)
+endobj
+77 0 obj
+<< /S /GoTo /D (subsection.2.5.3) >>
+endobj
+80 0 obj
+(Evaluation of the sensitivity right-hand side)
+endobj
+81 0 obj
+<< /S /GoTo /D (subsection.2.5.4) >>
+endobj
+84 0 obj
+(Quadratures depending on forward sensitivities)
+endobj
+85 0 obj
+<< /S /GoTo /D (section.2.6) >>
+endobj
+88 0 obj
+(Adjoint sensitivity analysis)
+endobj
+89 0 obj
+<< /S /GoTo /D (subsection.2.6.1) >>
+endobj
+92 0 obj
+(Sensitivity of G\(p\))
+endobj
+93 0 obj
+<< /S /GoTo /D (subsection.2.6.2) >>
+endobj
+96 0 obj
+(Sensitivity of g\(T,p\))
+endobj
+97 0 obj
+<< /S /GoTo /D (subsection.2.6.3) >>
+endobj
+100 0 obj
+(Checkpointing scheme)
+endobj
+101 0 obj
+<< /S /GoTo /D (section.2.7) >>
+endobj
+104 0 obj
+(Second-order sensitivity analysis)
+endobj
+105 0 obj
+<< /S /GoTo /D (chapter.3) >>
+endobj
+108 0 obj
+(Code Organization)
+endobj
+109 0 obj
+<< /S /GoTo /D (section.3.1) >>
+endobj
+112 0 obj
+(SUNDIALS organization)
+endobj
+113 0 obj
+<< /S /GoTo /D (section.3.2) >>
+endobj
+116 0 obj
+(IDAS organization)
+endobj
+117 0 obj
+<< /S /GoTo /D (chapter.4) >>
+endobj
+120 0 obj
+(Using IDAS for IVP Solution)
+endobj
+121 0 obj
+<< /S /GoTo /D (section.4.1) >>
+endobj
+124 0 obj
+(Access to library and header files)
+endobj
+125 0 obj
+<< /S /GoTo /D (section.4.2) >>
+endobj
+128 0 obj
+(Data types)
+endobj
+129 0 obj
+<< /S /GoTo /D (section.4.3) >>
+endobj
+132 0 obj
+(Header files)
+endobj
+133 0 obj
+<< /S /GoTo /D (section.4.4) >>
+endobj
+136 0 obj
+(A skeleton of the user's main program)
+endobj
+137 0 obj
+<< /S /GoTo /D (section.4.5) >>
+endobj
+140 0 obj
+(User-callable functions)
+endobj
+141 0 obj
+<< /S /GoTo /D (subsection.4.5.1) >>
+endobj
+144 0 obj
+(IDAS initialization and deallocation functions)
+endobj
+145 0 obj
+<< /S /GoTo /D (subsection.4.5.2) >>
+endobj
+148 0 obj
+(IDAS tolerance specification functions)
+endobj
+149 0 obj
+<< /S /GoTo /D (subsection.4.5.3) >>
+endobj
+152 0 obj
+(Linear solver specification functions)
+endobj
+153 0 obj
+<< /S /GoTo /D (subsection.4.5.4) >>
+endobj
+156 0 obj
+(Initial condition calculation function)
+endobj
+157 0 obj
+<< /S /GoTo /D (subsection.4.5.5) >>
+endobj
+160 0 obj
+(Rootfinding initialization function)
+endobj
+161 0 obj
+<< /S /GoTo /D (subsection.4.5.6) >>
+endobj
+164 0 obj
+(IDAS solver function)
+endobj
+165 0 obj
+<< /S /GoTo /D (subsection.4.5.7) >>
+endobj
+168 0 obj
+(Optional input functions)
+endobj
+169 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.1) >>
+endobj
+172 0 obj
+(Main solver optional input functions)
+endobj
+173 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.2) >>
+endobj
+176 0 obj
+(Dense/band direct linear solvers optional input functions)
+endobj
+177 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.3) >>
+endobj
+180 0 obj
+(Sparse direct linear solvers optional input functions)
+endobj
+181 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.4) >>
+endobj
+184 0 obj
+(Iterative linear solvers optional input functions)
+endobj
+185 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.5) >>
+endobj
+188 0 obj
+(Initial condition calculation optional input functions)
+endobj
+189 0 obj
+<< /S /GoTo /D (subsubsection.4.5.7.6) >>
+endobj
+192 0 obj
+(Rootfinding optional input functions)
+endobj
+193 0 obj
+<< /S /GoTo /D (subsection.4.5.8) >>
+endobj
+196 0 obj
+(Interpolated output function)
+endobj
+197 0 obj
+<< /S /GoTo /D (subsection.4.5.9) >>
+endobj
+200 0 obj
+(Optional output functions)
+endobj
+201 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.1) >>
+endobj
+204 0 obj
+(Main solver optional output functions)
+endobj
+205 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.2) >>
+endobj
+208 0 obj
+(Initial condition calculation optional output functions)
+endobj
+209 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.3) >>
+endobj
+212 0 obj
+(Rootfinding optional output functions)
+endobj
+213 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.4) >>
+endobj
+216 0 obj
+(Dense/band direct linear solvers optional output functions)
+endobj
+217 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.5) >>
+endobj
+220 0 obj
+(Sparse direct linear solvers optional output functions)
+endobj
+221 0 obj
+<< /S /GoTo /D (subsubsection.4.5.9.6) >>
+endobj
+224 0 obj
+(Iterative linear solvers optional output functions)
+endobj
+225 0 obj
+<< /S /GoTo /D (subsection.4.5.10) >>
+endobj
+228 0 obj
+(IDAS reinitialization function)
+endobj
+229 0 obj
+<< /S /GoTo /D (section.4.6) >>
+endobj
+232 0 obj
+(User-supplied functions)
+endobj
+233 0 obj
+<< /S /GoTo /D (subsection.4.6.1) >>
+endobj
+236 0 obj
+(Residual function)
+endobj
+237 0 obj
+<< /S /GoTo /D (subsection.4.6.2) >>
+endobj
+240 0 obj
+(Error message handler function)
+endobj
+241 0 obj
+<< /S /GoTo /D (subsection.4.6.3) >>
+endobj
+244 0 obj
+(Error weight function)
+endobj
+245 0 obj
+<< /S /GoTo /D (subsection.4.6.4) >>
+endobj
+248 0 obj
+(Rootfinding function)
+endobj
+249 0 obj
+<< /S /GoTo /D (subsection.4.6.5) >>
+endobj
+252 0 obj
+(Jacobian information \(direct method with dense Jacobian\))
+endobj
+253 0 obj
+<< /S /GoTo /D (subsection.4.6.6) >>
+endobj
+256 0 obj
+(Jacobian information \(direct method with banded Jacobian\))
+endobj
+257 0 obj
+<< /S /GoTo /D (subsection.4.6.7) >>
+endobj
+260 0 obj
+(Jacobian information \(direct method with sparse Jacobian\))
+endobj
+261 0 obj
+<< /S /GoTo /D (subsection.4.6.8) >>
+endobj
+264 0 obj
+(Jacobian information \(matrix-vector product\))
+endobj
+265 0 obj
+<< /S /GoTo /D (subsection.4.6.9) >>
+endobj
+268 0 obj
+(Preconditioning \(linear system solution\))
+endobj
+269 0 obj
+<< /S /GoTo /D (subsection.4.6.10) >>
+endobj
+272 0 obj
+(Preconditioning \(Jacobian data\))
+endobj
+273 0 obj
+<< /S /GoTo /D (section.4.7) >>
+endobj
+276 0 obj
+(Integration of pure quadrature equations)
+endobj
+277 0 obj
+<< /S /GoTo /D (subsection.4.7.1) >>
+endobj
+280 0 obj
+(Quadrature initialization and deallocation functions)
+endobj
+281 0 obj
+<< /S /GoTo /D (subsection.4.7.2) >>
+endobj
+284 0 obj
+(IDAS solver function)
+endobj
+285 0 obj
+<< /S /GoTo /D (subsection.4.7.3) >>
+endobj
+288 0 obj
+(Quadrature extraction functions)
+endobj
+289 0 obj
+<< /S /GoTo /D (subsection.4.7.4) >>
+endobj
+292 0 obj
+(Optional inputs for quadrature integration)
+endobj
+293 0 obj
+<< /S /GoTo /D (subsection.4.7.5) >>
+endobj
+296 0 obj
+(Optional outputs for quadrature integration)
+endobj
+297 0 obj
+<< /S /GoTo /D (subsection.4.7.6) >>
+endobj
+300 0 obj
+(User-supplied function for quadrature integration)
+endobj
+301 0 obj
+<< /S /GoTo /D (section.4.8) >>
+endobj
+304 0 obj
+(A parallel band-block-diagonal preconditioner module)
+endobj
+305 0 obj
+<< /S /GoTo /D (chapter.5) >>
+endobj
+308 0 obj
+(Using IDAS for Forward Sensitivity Analysis)
+endobj
+309 0 obj
+<< /S /GoTo /D (section.5.1) >>
+endobj
+312 0 obj
+(A skeleton of the user's main program)
+endobj
+313 0 obj
+<< /S /GoTo /D (section.5.2) >>
+endobj
+316 0 obj
+(User-callable routines for forward sensitivity analysis)
+endobj
+317 0 obj
+<< /S /GoTo /D (subsection.5.2.1) >>
+endobj
+320 0 obj
+(Forward sensitivity initialization and deallocation functions)
+endobj
+321 0 obj
+<< /S /GoTo /D (subsection.5.2.2) >>
+endobj
+324 0 obj
+(Forward sensitivity tolerance specification functions)
+endobj
+325 0 obj
+<< /S /GoTo /D (subsection.5.2.3) >>
+endobj
+328 0 obj
+(Forward sensitivity initial condition calculation function)
+endobj
+329 0 obj
+<< /S /GoTo /D (subsection.5.2.4) >>
+endobj
+332 0 obj
+(IDAS solver function)
+endobj
+333 0 obj
+<< /S /GoTo /D (subsection.5.2.5) >>
+endobj
+336 0 obj
+(Forward sensitivity extraction functions)
+endobj
+337 0 obj
+<< /S /GoTo /D (subsection.5.2.6) >>
+endobj
+340 0 obj
+(Optional inputs for forward sensitivity analysis)
+endobj
+341 0 obj
+<< /S /GoTo /D (subsection.5.2.7) >>
+endobj
+344 0 obj
+(Optional outputs for forward sensitivity analysis)
+endobj
+345 0 obj
+<< /S /GoTo /D (subsubsection.5.2.7.1) >>
+endobj
+348 0 obj
+(Main solver optional output functions)
+endobj
+349 0 obj
+<< /S /GoTo /D (subsubsection.5.2.7.2) >>
+endobj
+352 0 obj
+(Initial condition calculation optional output functions)
+endobj
+353 0 obj
+<< /S /GoTo /D (section.5.3) >>
+endobj
+356 0 obj
+(User-supplied routines for forward sensitivity analysis)
+endobj
+357 0 obj
+<< /S /GoTo /D (section.5.4) >>
+endobj
+360 0 obj
+(Integration of quadrature equations depending on forward sensitivities)
+endobj
+361 0 obj
+<< /S /GoTo /D (subsection.5.4.1) >>
+endobj
+364 0 obj
+(Sensitivity-dependent quadrature initialization and deallocation)
+endobj
+365 0 obj
+<< /S /GoTo /D (subsection.5.4.2) >>
+endobj
+368 0 obj
+(IDAS solver function)
+endobj
+369 0 obj
+<< /S /GoTo /D (subsection.5.4.3) >>
+endobj
+372 0 obj
+(Sensitivity-dependent quadrature extraction functions)
+endobj
+373 0 obj
+<< /S /GoTo /D (subsection.5.4.4) >>
+endobj
+376 0 obj
+(Optional inputs for sensitivity-dependent quadrature integration)
+endobj
+377 0 obj
+<< /S /GoTo /D (subsection.5.4.5) >>
+endobj
+380 0 obj
+(Optional outputs for sensitivity-dependent quadrature integration)
+endobj
+381 0 obj
+<< /S /GoTo /D (subsection.5.4.6) >>
+endobj
+384 0 obj
+(User-supplied function for sensitivity-dependent quadrature integration)
+endobj
+385 0 obj
+<< /S /GoTo /D (section.5.5) >>
+endobj
+388 0 obj
+(Note on using partial error control)
+endobj
+389 0 obj
+<< /S /GoTo /D (chapter.6) >>
+endobj
+392 0 obj
+(Using IDAS for Adjoint Sensitivity Analysis)
+endobj
+393 0 obj
+<< /S /GoTo /D (section.6.1) >>
+endobj
+396 0 obj
+(A skeleton of the user's main program)
+endobj
+397 0 obj
+<< /S /GoTo /D (section.6.2) >>
+endobj
+400 0 obj
+(User-callable functions for adjoint sensitivity analysis)
+endobj
+401 0 obj
+<< /S /GoTo /D (subsection.6.2.1) >>
+endobj
+404 0 obj
+(Adjoint sensitivity allocation and deallocation functions)
+endobj
+405 0 obj
+<< /S /GoTo /D (subsection.6.2.2) >>
+endobj
+408 0 obj
+(Adjoint sensitivity optional input)
+endobj
+409 0 obj
+<< /S /GoTo /D (subsection.6.2.3) >>
+endobj
+412 0 obj
+(Forward integration function)
+endobj
+413 0 obj
+<< /S /GoTo /D (subsection.6.2.4) >>
+endobj
+416 0 obj
+(Backward problem initialization functions)
+endobj
+417 0 obj
+<< /S /GoTo /D (subsection.6.2.5) >>
+endobj
+420 0 obj
+(Tolerance specification functions for backward problem)
+endobj
+421 0 obj
+<< /S /GoTo /D (subsection.6.2.6) >>
+endobj
+424 0 obj
+(Linear solver initialization functions for backward problem)
+endobj
+425 0 obj
+<< /S /GoTo /D (subsection.6.2.7) >>
+endobj
+428 0 obj
+(Initial condition calculation functions for backward problem)
+endobj
+429 0 obj
+<< /S /GoTo /D (subsection.6.2.8) >>
+endobj
+432 0 obj
+(Backward integration function)
+endobj
+433 0 obj
+<< /S /GoTo /D (subsection.6.2.9) >>
+endobj
+436 0 obj
+(Optional input functions for the backward problem)
+endobj
+437 0 obj
+<< /S /GoTo /D (subsubsection.6.2.9.1) >>
+endobj
+440 0 obj
+(Main solver optional input functions)
+endobj
+441 0 obj
+<< /S /GoTo /D (subsubsection.6.2.9.2) >>
+endobj
+444 0 obj
+(Dense linear solver)
+endobj
+445 0 obj
+<< /S /GoTo /D (subsubsection.6.2.9.3) >>
+endobj
+448 0 obj
+(Band linear solver)
+endobj
+449 0 obj
+<< /S /GoTo /D (subsubsection.6.2.9.4) >>
+endobj
+452 0 obj
+(Sparse linear solvers)
+endobj
+453 0 obj
+<< /S /GoTo /D (subsubsection.6.2.9.5) >>
+endobj
+456 0 obj
+(SPILS linear solvers)
+endobj
+457 0 obj
+<< /S /GoTo /D (subsection.6.2.10) >>
+endobj
+460 0 obj
+(Optional output functions for the backward problem)
+endobj
+461 0 obj
+<< /S /GoTo /D (subsubsection.6.2.10.1) >>
+endobj
+464 0 obj
+(Main solver optional output functions)
+endobj
+465 0 obj
+<< /S /GoTo /D (subsubsection.6.2.10.2) >>
+endobj
+468 0 obj
+(Initial condition calculation optional output function)
+endobj
+469 0 obj
+<< /S /GoTo /D (subsection.6.2.11) >>
+endobj
+472 0 obj
+(Backward integration of quadrature equations)
+endobj
+473 0 obj
+<< /S /GoTo /D (subsubsection.6.2.11.1) >>
+endobj
+476 0 obj
+(Backward quadrature initialization functions)
+endobj
+477 0 obj
+<< /S /GoTo /D (subsubsection.6.2.11.2) >>
+endobj
+480 0 obj
+(Backward quadrature extraction function)
+endobj
+481 0 obj
+<< /S /GoTo /D (subsubsection.6.2.11.3) >>
+endobj
+484 0 obj
+(Optional input/output functions for backward quadrature integration)
+endobj
+485 0 obj
+<< /S /GoTo /D (section.6.3) >>
+endobj
+488 0 obj
+(User-supplied functions for adjoint sensitivity analysis)
+endobj
+489 0 obj
+<< /S /GoTo /D (subsection.6.3.1) >>
+endobj
+492 0 obj
+(DAE residual for the backward problem)
+endobj
+493 0 obj
+<< /S /GoTo /D (subsection.6.3.2) >>
+endobj
+496 0 obj
+(DAE residual for the backward problem depending on the forward sensitivities)
+endobj
+497 0 obj
+<< /S /GoTo /D (subsection.6.3.3) >>
+endobj
+500 0 obj
+(Quadrature right-hand side for the backward problem)
+endobj
+501 0 obj
+<< /S /GoTo /D (subsection.6.3.4) >>
+endobj
+504 0 obj
+(Sensitivity-dependent quadrature right-hand side for the backward problem)
+endobj
+505 0 obj
+<< /S /GoTo /D (subsection.6.3.5) >>
+endobj
+508 0 obj
+(Jacobian information for the backward problem \(direct method with dense Jacobian\))
+endobj
+509 0 obj
+<< /S /GoTo /D (subsection.6.3.6) >>
+endobj
+512 0 obj
+(Jacobian information for the backward problem \(direct method with banded Jacobian\))
+endobj
+513 0 obj
+<< /S /GoTo /D (subsection.6.3.7) >>
+endobj
+516 0 obj
+(Jacobian information for the backward problem \(direct method with sparse Jacobian\))
+endobj
+517 0 obj
+<< /S /GoTo /D (subsection.6.3.8) >>
+endobj
+520 0 obj
+(Jacobian information for the backward problem \(matrix-vector product\))
+endobj
+521 0 obj
+<< /S /GoTo /D (subsection.6.3.9) >>
+endobj
+524 0 obj
+(Preconditioning for the backward problem \(linear system solution\))
+endobj
+525 0 obj
+<< /S /GoTo /D (subsection.6.3.10) >>
+endobj
+528 0 obj
+(Preconditioning for the backward problem \(Jacobian data\))
+endobj
+529 0 obj
+<< /S /GoTo /D (section.6.4) >>
+endobj
+532 0 obj
+(Using the band-block-diagonal preconditioner for backward problems)
+endobj
+533 0 obj
+<< /S /GoTo /D (subsection.6.4.1) >>
+endobj
+536 0 obj
+(Usage of IDABBDPRE for the backward problem)
+endobj
+537 0 obj
+<< /S /GoTo /D (subsection.6.4.2) >>
+endobj
+540 0 obj
+(User-supplied functions for IDABBDPRE)
+endobj
+541 0 obj
+<< /S /GoTo /D (chapter.7) >>
+endobj
+544 0 obj
+(Description of the NVECTOR module)
+endobj
+545 0 obj
+<< /S /GoTo /D (section.7.1) >>
+endobj
+548 0 obj
+(The NVECTOR\137SERIAL implementation)
+endobj
+549 0 obj
+<< /S /GoTo /D (section.7.2) >>
+endobj
+552 0 obj
+(The NVECTOR\137PARALLEL implementation)
+endobj
+553 0 obj
+<< /S /GoTo /D (section.7.3) >>
+endobj
+556 0 obj
+(The NVECTOR\137OPENMP implementation)
+endobj
+557 0 obj
+<< /S /GoTo /D (section.7.4) >>
+endobj
+560 0 obj
+(The NVECTOR\137PTHREADS implementation)
+endobj
+561 0 obj
+<< /S /GoTo /D (section.7.5) >>
+endobj
+564 0 obj
+(The NVECTOR\137PARHYP implementation)
+endobj
+565 0 obj
+<< /S /GoTo /D (section.7.6) >>
+endobj
+568 0 obj
+(The NVECTOR\137PETSC implementation)
+endobj
+569 0 obj
+<< /S /GoTo /D (section.7.7) >>
+endobj
+572 0 obj
+(NVECTOR Examples)
+endobj
+573 0 obj
+<< /S /GoTo /D (section.7.8) >>
+endobj
+576 0 obj
+(NVECTOR functions used by IDAS)
+endobj
+577 0 obj
+<< /S /GoTo /D (chapter.8) >>
+endobj
+580 0 obj
+(Providing Alternate Linear Solver Modules)
+endobj
+581 0 obj
+<< /S /GoTo /D (section.8.1) >>
+endobj
+584 0 obj
+(Initialization function)
+endobj
+585 0 obj
+<< /S /GoTo /D (section.8.2) >>
+endobj
+588 0 obj
+(Setup function)
+endobj
+589 0 obj
+<< /S /GoTo /D (section.8.3) >>
+endobj
+592 0 obj
+(Solve function)
+endobj
+593 0 obj
+<< /S /GoTo /D (section.8.4) >>
+endobj
+596 0 obj
+(Performance monitoring function)
+endobj
+597 0 obj
+<< /S /GoTo /D (section.8.5) >>
+endobj
+600 0 obj
+(Memory deallocation function)
+endobj
+601 0 obj
+<< /S /GoTo /D (chapter.9) >>
+endobj
+604 0 obj
+(General Use Linear Solver Components in SUNDIALS)
+endobj
+605 0 obj
+<< /S /GoTo /D (section.9.1) >>
+endobj
+608 0 obj
+(The DLS modules: DENSE and BAND)
+endobj
+609 0 obj
+<< /S /GoTo /D (subsection.9.1.1) >>
+endobj
+612 0 obj
+(Type DlsMat)
+endobj
+613 0 obj
+<< /S /GoTo /D (subsection.9.1.2) >>
+endobj
+616 0 obj
+(Accessor macros for the DLS modules)
+endobj
+617 0 obj
+<< /S /GoTo /D (subsection.9.1.3) >>
+endobj
+620 0 obj
+(Functions in the DENSE module)
+endobj
+621 0 obj
+<< /S /GoTo /D (subsection.9.1.4) >>
+endobj
+624 0 obj
+(Functions in the BAND module)
+endobj
+625 0 obj
+<< /S /GoTo /D (section.9.2) >>
+endobj
+628 0 obj
+(The SLS module)
+endobj
+629 0 obj
+<< /S /GoTo /D (subsection.9.2.1) >>
+endobj
+632 0 obj
+(Type SlsMat)
+endobj
+633 0 obj
+<< /S /GoTo /D (subsection.9.2.2) >>
+endobj
+636 0 obj
+(Functions in the SLS module)
+endobj
+637 0 obj
+<< /S /GoTo /D (subsection.9.2.3) >>
+endobj
+640 0 obj
+(The KLU solver)
+endobj
+641 0 obj
+<< /S /GoTo /D (subsection.9.2.4) >>
+endobj
+644 0 obj
+(The SUPERLUMT solver)
+endobj
+645 0 obj
+<< /S /GoTo /D (section.9.3) >>
+endobj
+648 0 obj
+(The SPILS modules: SPGMR, SPFGMR, SPBCG, and SPTFQMR)
+endobj
+649 0 obj
+<< /S /GoTo /D (subsection.9.3.1) >>
+endobj
+652 0 obj
+(The SPGMR module)
+endobj
+653 0 obj
+<< /S /GoTo /D (subsection.9.3.2) >>
+endobj
+656 0 obj
+(The SPFGMR module)
+endobj
+657 0 obj
+<< /S /GoTo /D (subsection.9.3.3) >>
+endobj
+660 0 obj
+(The SPBCG module)
+endobj
+661 0 obj
+<< /S /GoTo /D (subsection.9.3.4) >>
+endobj
+664 0 obj
+(The SPTFQMR module)
+endobj
+665 0 obj
+<< /S /GoTo /D (appendix.A) >>
+endobj
+668 0 obj
+(SUNDIALS Package Installation Procedure)
+endobj
+669 0 obj
+<< /S /GoTo /D (section.A.1) >>
+endobj
+672 0 obj
+(CMake-based installation)
+endobj
+673 0 obj
+<< /S /GoTo /D (subsection.A.1.1) >>
+endobj
+676 0 obj
+(Configuring, building, and installing on Unix-like systems)
+endobj
+677 0 obj
+<< /S /GoTo /D (subsection.A.1.2) >>
+endobj
+680 0 obj
+(Configuration options \(Unix/Linux\))
+endobj
+681 0 obj
+<< /S /GoTo /D (subsection.A.1.3) >>
+endobj
+684 0 obj
+(Configuration examples)
+endobj
+685 0 obj
+<< /S /GoTo /D (subsection.A.1.4) >>
+endobj
+688 0 obj
+(Working with external Libraries)
+endobj
+689 0 obj
+<< /S /GoTo /D (section.A.2) >>
+endobj
+692 0 obj
+(Building and Running Examples)
+endobj
+693 0 obj
+<< /S /GoTo /D (section.A.3) >>
+endobj
+696 0 obj
+(Configuring, building, and installing on Windows)
+endobj
+697 0 obj
+<< /S /GoTo /D (section.A.4) >>
+endobj
+700 0 obj
+(Installed libraries and exported header files)
+endobj
+701 0 obj
+<< /S /GoTo /D (appendix.B) >>
+endobj
+704 0 obj
+(IDAS Constants)
+endobj
+705 0 obj
+<< /S /GoTo /D (section.B.1) >>
+endobj
+708 0 obj
+(IDAS input constants)
+endobj
+709 0 obj
+<< /S /GoTo /D (section.B.2) >>
+endobj
+712 0 obj
+(IDAS output constants)
+endobj
+713 0 obj
+<< /S /GoTo /D (section*.253) >>
+endobj
+716 0 obj
+(Bibliography)
+endobj
+717 0 obj
+<< /S /GoTo /D (section*.254) >>
+endobj
+720 0 obj
+(Index)
+endobj
+721 0 obj
+<< /S /GoTo /D [722 0 R  /Fit ] >>
+endobj
+725 0 obj <<
+/Length 476       
+/Filter /FlateDecode
+>>
+stream
+x�uSM��0
��+ri��	pܲ�Դjw�S��
�[���l�_C��L5q��g�9��IH�6��Y_���$�)(�D��3	Z���
�L��_����XK�Q�LX
���ؘ���;{
��[���c�@�9���֑R��<�,��Aqn�|F� ���$`��X!�9��$y)������׭�_̗��(��OA
+�I�cS���H-X.�@s11�
sg�#7�Bl�qg��e���0u�mﶟ#�5�h�
���3n��C
+p�wm_wv���4���5d�5@
y�5(�~^�Cr
�j�
���ت�c[��k$&��Cw8�m���B<g�,���,M_���ݴ���
���z������w(;�K�Rdx�¸���07�"َ�
7:i���*�ڢY��e�<?)P`n@	4LŲU]�#�C����|�w\��P���^�b��P�sց�
tB"%��[�/�6��c�d���B�}z\�o��s
+endstream
+endobj
+722 0 obj <<
+/Type /Page
+/Contents 725 0 R
+/Resources 724 0 R
+/MediaBox [0 0 612 792]
+/Parent 732 0 R
+>> endobj
+723 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./doc_logo_blue.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 733 0 R
+/BBox [0 0 142 147]
+/Resources <<
+/ProcSet [ /PDF ]
+/ExtGState <<
+/R7 734 0 R
+>>>>
+/Length 735 0 R
+/Filter /FlateDecode
+>>
+stream
+x���[�.�
��g��(�P�e8[8@���C�����c�s�iZ-�X,��ϧ��T��������ϯ���e�ۂ�'�;��Ӟ��q�,�ާ�^˼�o��R����2��5o8���׻~~|��^����������No�
����q��>1Y��zE9�ث�1��>fi�Y<6c?gsi��_�)��g�Vz��l:�9�W/���N+���6~M�<%p�Ƕ��s�N�Uvf�_>?F��XT^2.����l��
�Y��noW�6�
���(�<��m ���f����"RZ�Ҷ<�1J=��\z�Z���/����g�mO�m=Ơ�!�@s�g�s7.
��6��
���Y����. max�P	D�߇��A�X_��/"�N�!Ѐ"�]x� E��x�U���}�vF��!L<s\+�p�~
@�i��}�5�jgrU`�
q���t�v?zV`��v*���5���R�]��	��O6��Qk
��?�%Ai�6 EU�w�|	K�~kw��2%�ajNX���	�e=z�sLw�Vɏs�WV~�L�p 	ƞ�RR����5=0m
<ە���Q �s% o�b+	h�1�89 �)[�����ɭQ.�[���������9���N@�%��4��?�۝��u��˰_^��W\s�;�a�7yv���g�PB�>z�t��`�#�2���q.��:��k��9��
Jrtb�2���CӀ�W�FM�F��

M�	Ԉ'.٥'�o'��`:�_�!K7.
h�T�N�[��(�����ҧ4�Q�*L���j27
 pV�~���b��Y�l�.R��k���!,䜮�&*%�x�6�
+������Q�"
�|풇�
+=�[�+��P� /h at w�Z,f�T�"���h'�#�'y��� 9��^�Zk3���谮Rb��k��%
+P���p�*M�
��珟2V9���D�W�X��8�8W�b�$2���i����er6�H��ɽƋ ꦭ�:���
~w��Rh�
��>�A�J��y���$�OqB�jb�U.IB�$3.Uf���nIb���s[	ym׽d��-��
��-�)�w�#*���D��
�
�R�q�
�f)�Ӫ2a�$bMu	Y;�K7k�<�~���~
��7�v�
�E���E�8B�ϟB�0v��Ҡ�]�跏λ��lR��(��>e?*����G�@�5sm�C	x�w����Xw�k:�l�R���)J�)r�Lz��#i$�X �}�|R:T��j9��d~��r��(�\���T��K!̒_*�p	�t� hduk��~�
 v���d
MҒihA,o�A�_@��{"�� ����h��"���`���E��
�0X��:G��
j��R>�)M@�L�a��݁�
�����#��K\�6O�މ�$Fs�_zqd���
<�ʬ�#��G�h7wt�㪲����8���B�&Z
:YKrt��Xj���Q��ԒG�
f�
#�2' B	jM;���!-��tՋN�9%����
�Y
PVtԃ�
+�NPɂi�����
D���F
6H���SL���x�$�z^���'Cu�'�
�(K���i^`�2 ~D�dT�]�O|ݥ���:
�B����	�!���0ƜI�A<�ӊ�be���A0��n=�lj�힪�jg���|��h���oC��,G@���N���Y�"��C�B��z^?��
��с��$�@?�dLM<�X2��
�%�z��l
+e�=�^�Yk��Z�̺?Ö��:H�m]L��R��n��J�2!�&��d�'T0�
+��*�5����1��W�ŝ���U�a�͓v,]1�q:!و��m�U�s�o�
��F�,r�ZT��R��DEPHSj2�#S�����<�O�W�͐B��i���d��%�&mMO|�W߷|`d2��>`G�*�d�0�w�T��Ǵ&�$�
�5dӟ#�����AD�s�����x� �ZHRRP~~ JE�C=�v�[o��J at 4[Y%B��{Tn{3Ç��$�.uy8_��T归��2�4t�
I�bqQ
֚��b\��
+�ͬKa�l�
jh�O����� =X1l�vh��Ty���J�`�_|�+�Y�Q�@�q��y�Þ��D��B'�Q�4Z�dYc����FQ޳�
���P�e��о�8���i=e�%	��"�L��O$���G j>�����l���p�0�̓2eLÊ�K�pi|4R�FKh�A_��mdo:4 (
�>���5����xM5ŧ���f�f
+��6q�ֈ��6�p��'�8u��s��~�ƻ���R䮺
ת�A��h+��
+�����NU���i��/�8���ʡ��������BlY3	x�
+��FS�6 H8�zg$
;!��7̹�񕚄��|Ohm3WK��p�[q
E�_�d��	��=�#�T;��!�&���e?~�;Pg��|h�R.�*{Ǩ����c�Wu::3޵X�2��!�P٬���������Tvh𺦉u���<��rֻ���=7V2}8����
B�QG^���-�mjrUC���}���>sGJ2h�V����ˠ[wcx�ڟ�EW�j��+,jlё
�KZk3������w�wG��>O8�'/�gϙ³�ğ��kj�ZO�懥�s�D+[|�p�G��g��rzn
n}ɸ�ڣٮ�G"��}�uF뷵'O�d�&Ξ�S��8ꆭQ^뛝Y˫�C}�
˟l}wߒ�dM�M��D��is��+��R��t=�2�sg������a�Fw�<���3�J���vkz�
Cs��z~��׻�����
^i|o��5�:!<e;6�Y�Z�;5�4z���=��7��7j)���]wԆ<�Ўa�
뤛L#;�
����v�Z���+���m��c��1XN_�8���;Jj��I�ntt�G���#�v
��F#vֻ6O���io&*�
����I�U �&�eY�|3�,_sb�[�%ܾ�)����t�Z�2��lDK���~�SVO��/����?~JT%�/����
+endstream
+endobj
+733 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20160805102442-07'00')
+/ModDate (D:20160805102442-07'00')
+/Creator (0.43+devel)
+>>
+endobj
+734 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+735 0 obj
+2952
+endobj
+726 0 obj <<
+/D [722 0 R /XYZ 86.4 726.045 null]
+>> endobj
+727 0 obj <<
+/D [722 0 R /XYZ 86.4 701.138 null]
+>> endobj
+724 0 obj <<
+/Font << /F15 728 0 R /F16 729 0 R /F17 730 0 R /F35 731 0 R >>
+/XObject << /Im1 723 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+738 0 obj <<
+/Length 1166      
+/Filter /FlateDecode
+>>
+stream
+x�uVKs�6��W�H�D
ߤ�'�v:�>��)�&!	c
+� �U����Ą�H��>�} �긊V�E�������Xm�m���a�UXժ��a��}��<~}y������������T7
+��JB�Zm�8��k�Oʮ7Y�M��$UPg��@8f_�^�7�F6x�&�������V�;�����lO�:m����:)�ov4w����[r'��w�ܨ�ℓ3�61d�{<�
z~�i4%V.�,��sf�I��
���0��0�h����<��
;�B�{s;�Uΐ,���S�-;~��`�C��u���]��çYFgD���Q"�ME2!
��s�v,��)
�<�7:�+\jc�ύCJ)���P~k
T
Q��&�u
�J6^� ��Z觟�ᡕG���?*�����BI!���\%

���� Ģ��Ҡ� 
餆����� �XT���ZK:Y��H緹d����Le��E��#�`=�78`e�
���
Y&b"��Fٺ�,�
̡���H�1d.
U#k��9��nh>�α ��������͋ ڿ�`��ES�s>��-NS\��A��G�0XR��
d����i�Z�
�Y�L(�Y�ZѨ�yfD�,gX��I$+ͻ�1��_ΈƳ�8Ko��ga޼�3�7
D�#�[.Y���紌�UJ3G™�q
+�Td���N��yE�
�t��*"!u�+�̓�TP(��G�t35aM�bڂ
��
��
+��Ѵ
�
w!��Z-��Qo�������8�k�*D�u��_Wa�Va��1�w%/>�}�]�4�K[�6�`
� ��f���w,�X@���!1�
0,��$�
�FB���*�Ɏ����%�e�K��
+�]�8p�A�a&���A�f<�a���G)�8$@�f8B'�z%B"�I����@�!u�w^C�����/%�S�.p������V���i
VE~����t}oL[O�U�6���=�A7�oTn}����=�A������/!S��"��
]��Q���
"OZ��_��"����qf#���7o�J&�
�3��`��ɇ�<p�9�<>m�1��<�D��}RB���<9WUn�`\�a
� �{\�S�6\�>���V�L�Ja�o^�J�\p�;
��4%4Fު3
�R<O��� �:�
+endstream
+endobj
+737 0 obj <<
+/Type /Page
+/Contents 738 0 R
+/Resources 736 0 R
+/MediaBox [0 0 612 792]
+/Parent 732 0 R
+>> endobj
+739 0 obj <<
+/D [737 0 R /XYZ 86.4 726.045 null]
+>> endobj
+736 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+783 0 obj <<
+/Length 1597      
+/Filter /FlateDecode
+>>
+stream
+x��Kw�F������0��;v�:ij��8]L��D���6���� 끜�q��RV��
߽s�(�f^�
Dv�z|��p�0�	��W
g!�B!�7�z��aY
�	�7����p��0e���"/`(L)2w�eu3'~y���R拏��w�����JMB�8?9�(f0���Yf�43���� �0j�9�q6[T�
��7��d�l�b��Q� h�8�O��W%
���b�d at f�8��4��8he�W�|	^@c
o�`̘�;BE��sQ��B�U
�_^���J�f�B�"�� s_V5�
+�� �6Q�uC��K�<��2�
��$���uV��:cl�K1͊���3K����9v�Ȧ�Q���
D�F�8'��������ld�[�������9~�Md�v��
?5�G
+Et���#�R��7����l6W��1�ߕ
@�O#���=N�.��6���5��h��dM�5x�
+���ǏRҨG?�V؆翀s
�Jc{�qN^�
+��^�0XV�%�خ�ף#î3�*v��H�kkl?�H7 I�c�b���h��Z�5��I!r�!l�D����˶������p?�'ND"�5���(����F�u�/����4H9�Q~
uӋ�ɒ�.�|_�IYL3%
SB.�0�}�r����ʅp�l>D�&�gd�����m���&�k!�`
�>��B�t9���ZQ�2p�����=al9T��[1�� �! Ct�5:�7E!�ϵ�qY̿+v
���U@�K�z����~-��1NS`���;�>�w��H��T�4T]���kP�G�4֜4e�V1��
vUV�,��A�@^�)JBZ��<�3by��IǾ���B֡lQ�.�
+�hu�T�.6ׅ�Q�̍Zn�u������F癲h�~�]E�6�lh���珈m�
WlY�A�� �韥����ҝ�H�x7�Ư���{��{��l�i�cAh)�K!�`q�P81W,燐�Ҟ��Q�CHȓ�7�ψ��g�4Y��O`�h���/�0���#�=��҇�{
^��?�LX�'{��(]>b{�
9J=�&u����M��~�p.'Jޟ���F6��TO�}��k�nj�]&�8��t���t�%(�i۶�U�]s�*֛��K�*�m�q��IL��ж¥)w�Z�D��+��_���=��I�J�js�\
4 )ޑ��k
��mHW�<=RFi8���
+愱�5�G�wXh�,����
+Xd XrCe�F��s�)��e����E�E�|
?p�n'�g�m�m�b�}�D�YW�fλ����e��*���[�e�Zn9v�di�$�D#,r���$V!U^�ǻ��{����
s�L�t�I
+sP�֭��"�3��g��

)s*�Ӯ�0���O�۸\6[�f�ZV?�����e7U9��5x���x4�G�o��`"�\�P�׉��_���1�{��#jG$r�
ѥ΃���?+ ��](|�	�� '�{�,�y�����4y!F`�ME��.���F��o49ɔ�ނ��dQ��ѵ�������>-�?�\J��l;:���éY��`�a���s��{�����;����H�o��$	!	��'
9�Z�������?���"
+endstream
+endobj
+782 0 obj <<
+/Type /Page
+/Contents 783 0 R
+/Resources 781 0 R
+/MediaBox [0 0 612 792]
+/Parent 732 0 R
+/Annots [ 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R ]
+>> endobj
+742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [512.192 548.452 526.596 557.363]
+/Subtype /Link
+/A << /S /GoTo /D (section*.3) >>
+>> endobj
+743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [515.375 526.363 526.596 535.274]
+/Subtype /Link
+/A << /S /GoTo /D (section*.5) >>
+>> endobj
+744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [518.875 504.273 526.596 512.686]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.1) >>
+>> endobj
+745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 492.215 526.596 500.628]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.1) >>
+>> endobj
+746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 480.157 526.596 488.57]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.2) >>
+>> endobj
+747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 468.099 526.596 476.511]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.3) >>
+>> endobj
+748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 456.04 526.596 464.453]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.3.1) >>
+>> endobj
+749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 443.982 526.596 452.395]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.3.1.1) >>
+>> endobj
+750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 431.924 526.596 440.337]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.3.1.2) >>
+>> endobj
+751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 419.866 526.596 428.279]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.3.2) >>
+>> endobj
+752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [518.875 397.776 526.596 406.189]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 385.718 526.596 394.131]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 373.66 526.596 382.073]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 361.602 526.596 370.014]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 349.543 526.596 357.956]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.4) >>
+>> endobj
+757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 337.485 526.596 345.898]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.5) >>
+>> endobj
+758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 325.427 526.596 333.84]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.5.1) >>
+>> endobj
+759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 313.369 526.596 321.782]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.5.2) >>
+>> endobj
+760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 301.311 526.596 309.723]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.5.3) >>
+>> endobj
+761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 289.252 526.596 297.665]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.5.4) >>
+>> endobj
+762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 277.194 526.596 285.607]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.6) >>
+>> endobj
+763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 265.136 526.596 273.549]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.6.1) >>
+>> endobj
+764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 253.078 526.596 261.491]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.6.2) >>
+>> endobj
+765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 241.02 526.596 249.432]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.6.3) >>
+>> endobj
+766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 228.961 526.596 237.374]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.7) >>
+>> endobj
+767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 206.872 526.596 215.285]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.3) >>
+>> endobj
+768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 194.814 526.596 203.226]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 182.755 526.596 191.168]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 160.666 526.596 169.079]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 148.608 526.596 157.02]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.1) >>
+>> endobj
+772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 136.549 526.596 144.962]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.2) >>
+>> endobj
+773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 124.491 526.596 132.904]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 112.433 526.596 120.846]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 100.375 526.596 108.788]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.5) >>
+>> endobj
+776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 88.317 526.596 96.729]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 76.258 526.596 84.671]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 64.2 526.596 72.613]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+784 0 obj <<
+/D [782 0 R /XYZ 86.4 726.045 null]
+>> endobj
+786 0 obj <<
+/D [782 0 R /XYZ 86.4 571.538 null]
+>> endobj
+781 0 obj <<
+/Font << /F38 785 0 R /F36 740 0 R /F8 741 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+843 0 obj <<
+/Length 1731      
+/Filter /FlateDecode
+>>
+stream
+x��[s�8���)����nHz�N�N;���M����$a��
8m�ӯ���RQ
�&/���c�tt��\���g��������\\^�w�����
@�@�f
���b���q�� c�S:�!���
p��������$*"?���(M�=l�́�Nu���r�6q�)�����n>֐\��2�F����b��
�΃�*�� :.�
?O���v���ZQ���q.p�Y1
�^��"�2!�!M5�?W�+�Q��l
�YC��[�
'�pW��sE�a���]�Q�?J�lYi������1@�kvć ��5��a����~�P+_DYh
+q���>�
�|�
jؕ+�7�o�xUR���2C��_��^1�+�^�Y
��j�+yK|�����#�
k�01P�t�&�C�a���T,�(PK
R!*q ��q����ƶ� ��5�{�F���k.�
+$<��nx"n��~4�@�`��I��Gd�(	к�b"d�D������l�vy��)����E���F�(m�Gk�>��	;�2446b��x�j&x�a�$���!xp�j�(?>d��	���w+lj
��V"��� 2���xف���:9ev�p�ǜuo'*vs�b���� 9L0�0$X�+~�V�&
��\m��:����B���)�ʅ�������W�8�d�f�Ùw�Ů)�z  ^���`����4z���qc���g"
+wn��0hx�B���eY�=�2�s�^��0�JC6�_^%
�!5��y���0�^����A^�3�c/���+P`
���Ӷ�3��X�9�E�����O�B�]�-[j�Kܶ�\�Ń�-��GŃ��B�mu��R�i �$;^��9�	�BT����L�cǝ(����9����l�.ܷE`c�`� ��,�a��"(R
4W�&�
+�`
N�E�1���������RW
$�X�V
��ᲮU���
+���
�3�2�Afm���_�
+S��9j�!|��陬�
��g�)��N�u�=Ͽk!��߇�F��8_�E
����:�{�.'e�!��45�Џc�킞"����c�����Γ^�`~��1i4`|�"�^��.<��s���顲}�k
�dI�F]
+=p�Ā11�|7r42
�ii
3Z�F�*ә�
Kk�C�ʜ<��Q�� ;Z5��(5´y��H@~&bb7٠}��\ 9|����V-)X�ݖU
�l�4�>�� ��+��um�
�q�@�Y
#�Ȕ
fH\Tֵ��,K���s�J���?�VȰu
&���(������|#�>���\����(��
U�!c����NJ�����[�	Ⱘ[�Z�:���)�M7��u�^���T,eJ�N��ex��JԤ^u�%gɿ�5�Lx�(��+y���I���,CnKc���z�W�����
�����Wsq���
+���V]�>
X[z�oJؑ�q����h�43?	t4�W��� �5�M
+M�\&MJ�BvD��ccP�Wm�g�737�<pW>�{��1��N2 at bj�nn��$��s��2PoTR86fz��뉜�������(�0,C����%)��S�dt
s�������N�H���)'F�큤�`�r���hxB*��]��p�����ӰmY6�Y<ש(K�Zx�� j%����Fr#<w6���(��QZ�TO�Z'��
�z��T�3����$f��T^����Ҟ ��4��J

+�̆\�3��G�zws�?�uQ
+endstream
+endobj
+842 0 obj <<
+/Type /Page
+/Contents 843 0 R
+/Resources 841 0 R
+/MediaBox [0 0 612 792]
+/Parent 732 0 R
+/Annots [ 780 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R ]
+>> endobj
+780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 678.103 526.596 686.515]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 666.026 526.596 674.439]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.7) >>
+>> endobj
+790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 653.949 526.596 662.362]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.1) >>
+>> endobj
+791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 641.872 526.596 650.285]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.2) >>
+>> endobj
+792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 629.795 526.596 638.208]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.3) >>
+>> endobj
+793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 617.719 526.596 626.131]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.4) >>
+>> endobj
+794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 605.642 526.596 614.055]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.5) >>
+>> endobj
+795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 593.565 526.596 601.978]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.6) >>
+>> endobj
+796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 581.488 526.596 589.901]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.8) >>
+>> endobj
+797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 569.411 526.596 577.824]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 557.335 526.596 565.747]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 545.258 526.596 553.671]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.2) >>
+>> endobj
+800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 533.181 526.596 541.594]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.3) >>
+>> endobj
+801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 521.104 526.596 529.517]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.4) >>
+>> endobj
+802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 509.027 526.596 517.44]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.5) >>
+>> endobj
+803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 496.951 526.596 505.363]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.6) >>
+>> endobj
+804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 484.874 526.596 493.287]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.10) >>
+>> endobj
+805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 472.797 526.596 481.21]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 460.72 526.596 469.133]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 448.643 526.596 457.056]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.2) >>
+>> endobj
+808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 436.567 526.596 444.979]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.3) >>
+>> endobj
+809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 424.49 526.596 432.903]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.4) >>
+>> endobj
+810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 412.413 526.596 420.826]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 400.336 526.596 408.749]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 388.259 526.596 396.672]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 376.183 526.596 384.595]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 364.106 526.596 372.519]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.9) >>
+>> endobj
+815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 352.029 526.596 360.442]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.10) >>
+>> endobj
+816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 339.952 526.596 348.365]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 327.875 526.596 336.288]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.1) >>
+>> endobj
+818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 315.799 526.596 324.211]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.2) >>
+>> endobj
+819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 303.722 526.596 312.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.3) >>
+>> endobj
+820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 291.645 526.596 300.058]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.4) >>
+>> endobj
+821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 279.568 526.596 287.981]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.5) >>
+>> endobj
+822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 267.491 526.596 275.904]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.6) >>
+>> endobj
+823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 255.415 526.596 263.827]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.8) >>
+>> endobj
+824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 233.294 526.596 241.707]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 221.217 526.596 229.63]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 209.14 526.596 217.553]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 197.064 526.596 205.476]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 184.987 526.596 193.4]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.2) >>
+>> endobj
+829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 172.91 526.596 181.323]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.3) >>
+>> endobj
+830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 160.833 526.596 169.246]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.4) >>
+>> endobj
+831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 148.756 526.596 157.169]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.5) >>
+>> endobj
+832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 136.68 526.596 145.092]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.6) >>
+>> endobj
+833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 124.603 526.596 133.016]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.7) >>
+>> endobj
+834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 112.526 526.596 120.939]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.2.7.1) >>
+>> endobj
+835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 100.449 526.596 108.862]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.2.7.2) >>
+>> endobj
+836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 88.372 526.596 96.785]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 76.296 526.596 84.708]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 64.219 526.596 72.632]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.1) >>
+>> endobj
+839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.2) >>
+>> endobj
+844 0 obj <<
+/D [842 0 R /XYZ 86.4 726.045 null]
+>> endobj
+841 0 obj <<
+/Font << /F8 741 0 R /F36 740 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+896 0 obj <<
+/Length 2154      
+/Filter /FlateDecode
+>>
+stream
+x��[KW�6��+�����z��P��9t��9=3�0��y�v��_�+KV��&
+&�vCl�Q��~�-��]/��t����W�e/
+"�y����0
0�=
� 	��{,���Q�]%�<-�Oi����ꏒy߇�d:J�},���B���(��E��{�%_�,
�l��o��.����^��Y�����o�C��z��Q�?
����0�|�E�	|��k`Pƻ��B<�[N��>�E�oog��j^�LZ�d+d0�55e�<���:!��#���Vf�b��-<	�
&x�~v{������˓̇���a���8MFf߆܆�BAA �v� �~����Pؾa� BtU�J�!���Ya�Tmo���;}9��"�d ��2�q�
gz��
�	Nv��/���,�Z�~�����
��%�8�v`Z�M#,�wv�'�(�]��.����Mౢ�l�j�j�e����YSˢ�dL�4���&�b�
�2
h��)�'㤨�2�՟Ž��T�\N�Լ6�f��	P%|F��(�Cr'��l�-��0
��qb�
���Di��j~cM���Y�D歊>��P���i7�� �U�{��x<+-�0^��xj��(1�E�9�G6�F{��:�J~�3k
|@�B�/���X
+� AaY�ʯ�`pg�g\��:<y=����=�y��s�?�37�p�8
���:��� S8�7�4UH�O�B2��|��*2�.�7N�x:49X��tm�~]�[K7W3u��Mn�d)�"��nI��/����
+���i��5��?��K�E�F�PM�-@(D��0y
0j��3�a�����!�.�]H،��"Q�
+m�wOs�@`gV��N���}�{f���$a��5���%e�`�H7rf�*l��%AudkLj�@�u�Eex���~��Ъ
Z��Ś
+RDįu�F�2DU�@Dj<��Z�
+)����!��Gbp<6�L�R��c��-٣���
"*#S��<κ9i�,c)�����~b
R�
+ɋ�����B�G����
����Y�
O�(�#�G�f��)+�p�%z�>��o��n�G܃~�kXja?��oF
+"a�w
�w�SO�֓-B��t��ׄ�M�.��ҠJi�[MC�)W�B�3a_*�p���

������D#Q�1D'"�:le��ܴ�ܪZU:��;�V�m�O��0�"Zk[�zk%_4����^�Y驨�n�`�<UB[��X�oY�udݦ�Blk�Dmxp�w�%y:ZT,q�5���	U��1>�A�k�El
�ԭ*{�@�R��-|3[9������I�y����
-+���_W,h��ݗ����,�HV�v�J�bsM�%���;��>��C �5
u��e�/����,�zo���&�+i�)Cj��*����i�p�*yZ�
—>�,
�Y2,��IR�뾮y�sZ�뫑�-���W�A
+"f�W	ӂ͋�N��|�AG��H��N͒(�r ���K����(�2Mu�N��<�Z]7p��0\���r�2j at SF�
�8�J�RM.���x
+K�m�;b[XK��_[e��,�
i���:K�{ˎ����7��p������7(�΂�uWSf�u?�hmt��FC�w!YQV%���İ�f��5Q�BK�v'nn�Rg7[��.��Ue'�b����n���_m�Q�����mb+l
�c����9��ʤ;��N,�'�"6q!/�zP�r����4�bf̞@Vnο�λ�����nY���j��~���Yb�R'��tHl-]�Ml�㻤Y
<;Q�
�\\�>2����\*�
��ڴ�v
^��-��WKA=���
���K~��>
��yH&�缅>�}���,�/$�yiY��0������]��L��_2N�OscDI���4������RC��j��룿���%��
�璨7�
���F��M/
H${��W'=P1�ոwu�k˿EQ�p9�z!W��g�sS��AeT�+��xk
��.-b]}�H���հ�ž
w�����ɂ�y2��P�����5qI+.*��>���<t�U%������O�C�r
�.N��r�-
��'/�d+	ѭ%�Y at 9y��`
\ٺ��/O'W���!?�
�me���ba$ D<],0"�a�~��员G�Ӟ9Xi�i� �� �6(}j|��/��/�
+endstream
+endobj
+895 0 obj <<
+/Type /Page
+/Contents 896 0 R
+/Resources 894 0 R
+/MediaBox [0 0 612 792]
+/Parent 732 0 R
+/Annots [ 840 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R ]
+>> endobj
+840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.3) >>
+>> endobj
+845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 678.054 526.596 686.467]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.4) >>
+>> endobj
+846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 665.929 526.596 674.341]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.5) >>
+>> endobj
+847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 653.803 526.596 662.216]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.6) >>
+>> endobj
+848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 641.678 526.596 650.091]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 619.476 526.596 627.889]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 607.351 526.596 615.764]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 595.225 526.596 603.638]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 583.1 526.596 591.513]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.1) >>
+>> endobj
+853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 570.974 526.596 579.387]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.2) >>
+>> endobj
+854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 558.849 526.596 567.262]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.3) >>
+>> endobj
+855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 546.724 526.596 555.137]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.4) >>
+>> endobj
+856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 534.598 526.596 543.011]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.5) >>
+>> endobj
+857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 522.473 526.596 530.886]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.6) >>
+>> endobj
+858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 510.347 526.596 518.76]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.7) >>
+>> endobj
+859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 498.222 526.596 506.635]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.8) >>
+>> endobj
+860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 486.097 526.596 494.51]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.9) >>
+>> endobj
+861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 473.971 526.596 482.384]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.9.1) >>
+>> endobj
+862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 461.846 526.596 470.259]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.9.2) >>
+>> endobj
+863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 449.72 526.596 458.133]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.9.3) >>
+>> endobj
+864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 437.595 526.596 446.008]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.9.4) >>
+>> endobj
+865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 425.47 526.596 433.883]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.9.5) >>
+>> endobj
+866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 413.344 526.596 421.757]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.10) >>
+>> endobj
+867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 401.219 526.596 409.632]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.10.1) >>
+>> endobj
+868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 389.093 526.596 397.506]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.10.2) >>
+>> endobj
+869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 376.968 526.596 385.381]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.11) >>
+>> endobj
+870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 364.843 526.596 373.255]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.11.1) >>
+>> endobj
+871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 352.717 526.596 361.13]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.11.2) >>
+>> endobj
+872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 340.592 526.596 349.005]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.11.3) >>
+>> endobj
+873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 328.466 526.596 336.879]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 316.341 526.596 324.754]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.1) >>
+>> endobj
+875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 304.216 526.596 312.628]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.2) >>
+>> endobj
+876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 292.09 526.596 300.503]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.3) >>
+>> endobj
+877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 279.965 526.596 288.378]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.4) >>
+>> endobj
+878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 255.884 526.596 264.297]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.5) >>
+>> endobj
+879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 231.804 526.596 240.216]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.6) >>
+>> endobj
+880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 207.723 526.596 216.136]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.7) >>
+>> endobj
+881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 195.598 526.596 204.01]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.8) >>
+>> endobj
+882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 183.472 526.596 191.885]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.9) >>
+>> endobj
+883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 171.347 526.596 179.76]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.10) >>
+>> endobj
+884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 159.221 526.596 167.634]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 147.096 526.596 155.509]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.1) >>
+>> endobj
+886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 134.971 526.596 143.383]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4.2) >>
+>> endobj
+887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 112.769 526.596 121.182]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 100.644 526.596 109.056]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 88.518 526.596 96.931]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 76.393 526.596 84.806]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 64.267 526.596 72.68]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.5) >>
+>> endobj
+897 0 obj <<
+/D [895 0 R /XYZ 86.4 726.045 null]
+>> endobj
+894 0 obj <<
+/Font << /F8 741 0 R /F36 740 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+938 0 obj <<
+/Length 1574      
+/Filter /FlateDecode
+>>
+stream
+x��Kw�8���
+/�sj�zؖf	�I'��t�v�C|bl�6m2�~�,�G��H�v��F����[W�16\��kk�x�
�p����@.r��ϑ�_���-����Ȳ	���_��Ǟ�m��
4�n �>�@��T}	<c8i|��#��`����Q=:1������7>mX
+率WW�m�GbČ'�$�D���
�8K-�{��X����/�s�v�\ ^>V{�
�͈o"�?xP^
������ý��%�Z@���2��	L�S�M"qWXv�} �_��3Q�n��*�^��m�~
�g�P�f!GfE4��{eaf��ѳc�ٷl��^(�σ���?!��
�u8x#l�$l@ͱgv��"��
��t

1�B��2�Ӱ���y�Fa.��Y�]�U�������,�
+��
�E���,���R�\�	�N�gi\�a������ҋ��^β�]U|-dV��Q9��a��=�����3���"�>Me

1��Q��H#ДU��V�ȯ�|�C%�In)˥�\1���r(X=��M�\����*�
+��
+�ù����b���.w0G���N�
�Kp��T��T�4J�<Ld��,"޷�~b
e�i��*���|)N�
��g���#y������y���b��Oe��:Lf$����E�-g�t$�o5/�ᗻx����J�-i7���ՒxVD��b�~Z�_�6):a	N��˩��dz�����p(
�"˕
��<+T\���,�������%����D�Q�N,p8�u"�nh���
,Q�v��KO��$݁�t�k 1��6�Դ�-I���U�T��(��`�`�<8 ���9
v	p�� �W�yށ�T�f�4�
+�8
���:��=/w��#m�u؛;�?�/%���5�����ߨ�
k��Q�/����eg��w�����d-*v��?��O7p��i��N9���]����黕�N<5�
���	;�����`q��m��o�G�z�_�ηV�
�i���rݚ�����7��(;��f���|�cϲ[�@
p=����=P8�c�{�M�-6,��ˮ��
����S3
�Mѳ�(�$���ţ�l���,�
��d,�k�)�D`��VɆ}ՆѨΥ���:�Rӫ����)�C��Q�~u
�D�G%
W3HW�d���
J
�Pݪ�L�;;�o��愼�(�	�B>~���u$�r�r��Rc&��~L}>�����?�tuv#'a�H��6;���.G��
��p}7v�VFה���g����sS��75���J"���<�c���ji{��aw��)�Y���L�����,Mc�m
��o
-}m
 M�D�ډ
+�kQ�@�X
+K�����q:ʄ��Q��.x���R�H�ID����J���U��e}
�&
+G��	�Rc	5�v���-H4�$!Om����]7﷦���
�=�1mmUYZ>�)��鬔�
���8=�=| 퍟Q ��5�*a[���m��>����􂧛^|���8�7����X�">W�a��<
�~`����Qt���ޖ_�l�6v}�b���G�X&����ʻ�A�_�ߖ
+endstream
+endobj
+937 0 obj <<
+/Type /Page
+/Contents 938 0 R
+/Resources 936 0 R
+/MediaBox [0 0 612 792]
+/Parent 732 0 R
+/Annots [ 893 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R ]
+>> endobj
+893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.6) >>
+>> endobj
+898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 678.224 526.596 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.7) >>
+>> endobj
+899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 666.269 526.596 674.682]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.8) >>
+>> endobj
+900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 644.351 526.596 652.764]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 632.396 526.596 640.809]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.1) >>
+>> endobj
+902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 620.441 526.596 628.854]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.2) >>
+>> endobj
+903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 608.486 526.596 616.899]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.3) >>
+>> endobj
+904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 596.53 526.596 604.943]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.4) >>
+>> endobj
+905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 584.575 526.596 592.988]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.5) >>
+>> endobj
+906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 562.657 526.596 571.07]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.9) >>
+>> endobj
+907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 550.702 526.596 559.115]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.1) >>
+>> endobj
+908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 538.747 526.596 547.16]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.1.1) >>
+>> endobj
+909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 526.792 526.596 535.205]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.1.2) >>
+>> endobj
+910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 514.837 526.596 523.25]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.1.3) >>
+>> endobj
+911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.1.4) >>
+>> endobj
+912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 490.926 526.596 499.339]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.2) >>
+>> endobj
+913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 478.971 526.596 487.384]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.2.1) >>
+>> endobj
+914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 467.016 526.596 475.429]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.2.2) >>
+>> endobj
+915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 455.061 526.596 463.474]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.2.3) >>
+>> endobj
+916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 443.106 526.596 451.519]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.2.4) >>
+>> endobj
+917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 431.151 526.596 439.564]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.3) >>
+>> endobj
+918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 419.195 526.596 427.608]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.3.1) >>
+>> endobj
+919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 407.24 526.596 415.653]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.3.2) >>
+>> endobj
+920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 395.285 526.596 403.698]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.3.3) >>
+>> endobj
+921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 383.33 526.596 391.743]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.9.3.4) >>
+>> endobj
+922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 361.412 526.596 369.825]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 349.457 526.596 357.87]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.1) >>
+>> endobj
+924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 337.502 526.596 345.915]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.1) >>
+>> endobj
+925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 325.547 526.596 333.96]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 313.591 526.596 322.004]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.3) >>
+>> endobj
+927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 301.636 526.596 310.049]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.4) >>
+>> endobj
+928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 289.681 526.596 298.094]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.2) >>
+>> endobj
+929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 277.726 526.596 286.139]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.3) >>
+>> endobj
+930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 265.771 526.596 274.184]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.4) >>
+>> endobj
+931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 243.853 526.596 252.266]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 231.898 526.596 240.311]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.1) >>
+>> endobj
+933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 219.943 526.596 228.356]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.2) >>
+>> endobj
+934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 198.025 526.596 206.438]
+/Subtype /Link
+/A << /S /GoTo /D (section*.253) >>
+>> endobj
+935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 176.107 526.596 184.52]
+/Subtype /Link
+/A << /S /GoTo /D (section*.254) >>
+>> endobj
+939 0 obj <<
+/D [937 0 R /XYZ 86.4 726.045 null]
+>> endobj
+936 0 obj <<
+/Font << /F8 741 0 R /F36 740 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+952 0 obj <<
+/Length 826       
+/Filter /FlateDecode
+>>
+stream
+x��W]o�0}�W�1�����nk�M�*U�/�
Bb��P���g�$
V�!�^�
�O���s�a���f ���hpqMd�)R�`4	$4�*h0J���)�hH
�ߎ"E�x��2�9�zq-���G(J�!G at p�(@>�N$�@!jױ�)�yj��2��j�2�븰� $,��*�"�����a��I�ص���y�:4\��tR͛��"�3�;�*��<�gTӸ�$���q4t��e�S�����q�`����e�_n�:w7��a(	
�ڊ�%MHH0��+��p4D��v�Vg��.�U���K0B �g��b�}[� ����Ѓ��r
(��+� |y�PeV��T��=Jb��m̅�D�&DC�i�Tx�>!<�h�@��r�l[!�W!�eՑH1��i�
}�с"A��:�H��E" U���!�`!��T!ێU�M׺f���HZ1O� ���R祩��Tι�k��:
��'�G�H<�P�~���c�1�����
+*���I$��^j���v�
����%�>ɛ��%oۂ�,�6O�01qդ�'SM}��
���Z?+r�չ�\.��uɰ���$��8
/�C�bk �5	ѿ�(-���=N`�P��S���.�¬%X
p�?��j����է��]#�5��hX�P�Gp �|?�p��&���eͳGv*��2O:�\��cM��E>��a[�a&_OØ ��%�Ok�Y=\��|(�:��
&gA��)��N6��򨷉qf�0�q��*�Ѭ	������AGC�הK�2g�?`0��� ��fF�{I��:'���� [Yc,l�(�=�+c6�]��
 ��
+endstream
+endobj
+951 0 obj <<
+/Type /Page
+/Contents 952 0 R
+/Resources 950 0 R
+/MediaBox [0 0 612 792]
+/Parent 955 0 R
+/Annots [ 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R ]
+>> endobj
+940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 548.71 526.596 557.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.1) >>
+>> endobj
+941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.2) >>
+>> endobj
+942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 524.799 526.596 533.212]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.3) >>
+>> endobj
+943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.1) >>
+>> endobj
+944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 490.927 526.596 499.339]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 469.009 526.596 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.1) >>
+>> endobj
+946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 457.054 526.596 465.466]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 445.098 526.596 453.511]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.3) >>
+>> endobj
+948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 423.181 526.596 431.593]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.1) >>
+>> endobj
+949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 411.225 526.596 419.638]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.2) >>
+>> endobj
+953 0 obj <<
+/D [951 0 R /XYZ 86.4 726.045 null]
+>> endobj
+954 0 obj <<
+/D [951 0 R /XYZ 86.4 571.624 null]
+>> endobj
+6 0 obj <<
+/D [951 0 R /XYZ 86.4 571.624 null]
+>> endobj
+950 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+968 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+967 0 obj <<
+/Type /Page
+/Contents 968 0 R
+/Resources 966 0 R
+/MediaBox [0 0 612 792]
+/Parent 955 0 R
+>> endobj
+969 0 obj <<
+/D [967 0 R /XYZ 86.4 726.045 null]
+>> endobj
+966 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+979 0 obj <<
+/Length 711       
+/Filter /FlateDecode
+>>
+stream
+x��VMs�0��W�h��˖t,�v��!�T8��qL
;#;���YE����
�r��c���{�A9"�bB:�j699�
+1����H%X��R,�@�]WEӆ�qP/�=/�͚����ɹB�%n1X
���b�(��aF�0\��i�i��
+#���,�A����<d*Xf[s��1�E�zmQ��ٔym�v��K���yVe��
<���M�LS�����.

+1�5�s 
:��9��p΃��G�܆4�br�c:��٤�v�
�]�f+
��`bB^��z)�Rd]�5>^L�uD9���9z��
�
P��Zx��67U��w�=��O��.O����l
+G
+'�)'Z�\Ǖ
u�1�!���r�,;-�v3o!�=�iarkV���9M=�X�bmci�����8&�����gvǁ�]X���3~D�T�I
%�{���)
M[[�.�θB����5U����2�-n�m䠾�E��P
��)fq��Yټ3�C��B�׳ ]���ر��4��
�@�Y�4���j
W_��Q�6�ɢ9\"����i�4HO�
�|��j��
�`-�D��!��丄�[ʡ\O�\���*�”�����
Ǭ/�0��|en�1	��=��3�
U���,������DZ"��/2M�PΧNΎ��KS�ۧ�N��Q�*}���6-�87�?M�g���(S����)�9'(�
+T��
�y3��N��c
+endstream
+endobj
+978 0 obj <<
+/Type /Page
+/Contents 979 0 R
+/Resources 977 0 R
+/MediaBox [0 0 612 792]
+/Parent 955 0 R
+/Annots [ 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R ]
+>> endobj
+970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (figure.2.1) >>
+>> endobj
+971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 514.837 526.596 523.25]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.1) >>
+>> endobj
+972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.2) >>
+>> endobj
+973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 480.964 526.596 489.377]
+/Subtype /Link
+/A << /S /GoTo /D (figure.9.1) >>
+>> endobj
+974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 469.009 526.596 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (figure.9.2) >>
+>> endobj
+975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 447.091 526.596 455.504]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.1) >>
+>> endobj
+976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 435.136 526.596 443.549]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.2) >>
+>> endobj
+980 0 obj <<
+/D [978 0 R /XYZ 86.4 726.045 null]
+>> endobj
+981 0 obj <<
+/D [978 0 R /XYZ 86.4 566.804 null]
+>> endobj
+10 0 obj <<
+/D [978 0 R /XYZ 86.4 566.804 null]
+>> endobj
+977 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+993 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+992 0 obj <<
+/Type /Page
+/Contents 993 0 R
+/Resources 991 0 R
+/MediaBox [0 0 612 792]
+/Parent 955 0 R
+>> endobj
+994 0 obj <<
+/D [992 0 R /XYZ 86.4 726.045 null]
+>> endobj
+991 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+1011 0 obj <<
+/Length 3593      
+/Filter /FlateDecode
+>>
+stream
+xڝZI��6��W�Qz�b�k��x�8��ݓK�Z�$����v��O- EJ�ŹHX 
+�Z�*0��]�Wヒ���7�}�VW2��L�W7۫"���L�Q��n6W�-^���7�r��t!�����$Q^���W�4�r�����m`�Xl�uo��lj쪌�Lf~��a����Rʅ��RqQ=�u�U���Q�=>�E��
�ͮ��KY,��G��{��`�{&\�2� K"�P~�n�7VW��e��~X��L-��k{�+x�>6uek�[fB�����X(Ӛ��a��_~ؙ�V�5�v��RFiR^����4���M�\)�,���
7m�
��7

+�_��O>��F�ҽデ�?"d%_���
�?N�n��v}�-�M at V%2�x����58�2*�QX/se��u����T)%��(
	>ۺk��4"J��4
m
��r>�FI�F�c���EH����e�f�/�����QE�m�7��3W��������{��6p(��bI��y��uu��*�죾�P�.$��
+IvqhWy����#�H��L:���.+F�D��@ݓH�Z		��KPQ9���d�3�iu�}ǡ=.W ��3����)�M�/� ���-�{����;��me���8����3�������7�9���s�_�s/�R%�cוw�$.G��)EL+��Y^��py��,�`ˆ�k}0L��ɮ����$;~ff��p��������˗s^`�XL�}����x���s�M�r��!m0CZdO+(M��� f3�`�k��75w�)�?
s`��J��t���X4ӥ��`C��.;9�'���5�I��}g*����̆�
�+��D��!8�
?�\Fe>n�� ��Ǐ�R��.��?��}�s�0Nx��$��~����U<�<�����")�˃
+�E
,���->�}F"jq��
T�����ˏ��Wdn�q�+&j5h���^R�rq �.%hr��r X~�lۀ�q�y�A^f��h�yd^.M��S���:�x�5�Z�8a7���ɒ��`o�$�U�0�R
�`

n��ʴս�w~�
!
�L��n���yDd�
�ר<{n�=�,%�6s$F����ve
�j�\�"��6�M|B�Gs�7��ۚ�[�`zPW
?u��ܞO&�d@�����l��"�W
r�%�,Q� �@;,k+�Z���I��!�,!j�)�)	
+���Κ;�G\91��=:������Q
�)
��R�@���]
t]S��*�TBz3�
��xk

�j
+��[^�M�9��z*��C̀3��
�F�
��
��(x��=>=L�M�ӵ��Cj
�=��@�%2�����
V6�h��|���#��05_-ڋЩ�8Ev�>b�B��,�]���b���΍
m�K~���eC�7B7���0E?��e��tBE*
I���Ɔ�F%�Ѽ�L�
�T�g�_p[C�����}�E�Q�Qz�7��fφ~��j�8��r�>8^��
[��6C�i#�G���zz~�����
+n�>~৾q��#�o�:���3ڍ�u�V9���L[�dd�d<M� ����7N-��$��( h%���)�� A�o@Ƞ���N6R阊
aXFy�
��od�2��LO��9w��� �)�(��Ӊe)��#�$(�x���no9V��i
�����E0(V
M��j�K�9���86����E%�2����E�d�A�R~
�V�

~ⴕH �6�4�~�pH����COid�
��J¦�s�?X����3�/T�
DAN����y8��Ye�N8�@
�:�$�
:t�Ia��9(
� d~��0�|�ӧ7���n�
'��/�+��	2�%��
��͠+����G�D�Y.EA�1w�?�իw׀�1�20����s�i����]�7��P�t8���)�{��$�{�H���蛷8�/?}:1r�,H4�n���.
�=�a�_���
+�
P#u�'�L7��D
�B�a�Q'����j�D�)d
�O�i�x��tS�;��[��t5"j!H��5tř�R7nݷ�+�u =�΄d@ L�l�����Gpo�<��`S��us8�*o���{�l�s<�(��g0WV�8-��]�d��U�D͑q
��Йv�Ȥ��YN�g�@R�[@H/G!anU8�CJ�:�c>�c^5�#=���~�����;����5O i���dB�����O�a"��$��I�qb%f P\تt�C
r���jx(p@�
�{������
�=�v �
@ [��8�%��n�=^
��
baR_��4
d�g��7<��kP�Dan�E
+U2���!D�3��h��@��"8O���CCy�*}�Nm��
gQ�A��`pPI��	TK��
+Y�0[O��v8ƐX�"	�q&
@V
;����
+1k�Q`�prXX��Ιl�D>`��H��P-��$��^�,�^7z��c�q���p��8�$I�&G�s����N1`�ژ�bC�����y�Ĉc��׆_l����-w��q/��
�����
F9#����k�L�����4h�v�m�s�YG.��9�̔w�3ު�\d�sa*S��On\�
�|\�p�|��
�ڍa��0�g��1�
�^cn��������2���l^��P�G��u�ª��
)�����tKW3-k2�7@ঈ�o�<���������Z�Gp�`A~�Q��o@��i�T�bR��W(����
j�&7^n��א`����C�rb�L�]T��8�_[�4��$��+�����6#�LNn���6��N\Dyv�~�vҲܝ~C�)b���M����
+���F�]�8U")���Ƹ��Z�3�
B:��˲�
෦�Ka�x�i�	 >�*�eu(����z��P�~�:�z��~���Β'�I�G
U?.�oT�-6
3�' ��7l�A�T�iX׬�_�
gqe��$T�O"�^l��-�|���`�6^a�$�ϋ��� ���`�0��vgk*
A���?#�y�D��o�B��G�ʙ�Q
ws�J�H宰
����
�֯�9�D�F����4�W�:�w|��|Q�Tt� w���S�H/y��IQT��Ǩ��P���7{~��M�����>#��8Ӂ�Un���s�#�BVAN*͝��a"oh9A�SX�8���é�
��X����v��kdT���؃K7�yr#G
O�
�6*[8]�:
�*R���{�͘���6����Iz���g�I�]�=գV��Q���5];<a�x�1�[M��shs%m.=
	F�����ٵ���M�C۶���a�w�W�^	Ow�#;i�H�����4���<�xD�/�\
�=���D���l�\7Fx2u[	iu�%��2���]�ng�&�FC�^(Y�O!
�o����r\B�ݙ�sǡA�FH�x �T��}���٬�����a���W���H�����֭��'Q
����
}��ֶ
��|
+?��%�)88��.HPf��j�
���M��웥m�
B�KEe>F���30�b�	�j���n
+�Ӈi!�
�5OY���;|�
�^�1
7����>b�ơ�U� ��F�����4�qU8o��#������Y�������<��
+endstream
+endobj
+1010 0 obj <<
+/Type /Page
+/Contents 1011 0 R
+/Resources 1009 0 R
+/MediaBox [0 0 612 792]
+/Parent 955 0 R
+/Annots [ 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R ]
+>> endobj
+995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [162.717 499.11 174.672 507.522]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HBGLSSW:05) >>
+>> endobj
+996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [121.146 438.408 128.12 446.821]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BHP:94) >>
+>> endobj
+997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [133.31 438.408 140.284 446.821]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BHP:98) >>
+>> endobj
+998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [244.575 354.722 256.53 363.135]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ug) >>
+>> endobj
+999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [260.497 354.722 272.452 363.135]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CoHi:96) >>
+>> endobj
+1000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [331.176 354.722 338.15 363.135]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ByHi:98) >>
+>> endobj
+1001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [342.116 354.722 349.09 363.135]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ByHi:99) >>
+>> endobj
+1002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [446.918 354.722 458.873 363.135]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ida_ug) >>
+>> endobj
+1003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [326.392 342.767 338.348 351.18]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvodes_ug) >>
+>> endobj
+1004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [343.14 342.767 355.095 351.18]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SeHi:05) >>
+>> endobj
+1005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [122.951 330.812 134.907 339.225]
+/Subtype /Link
+/A << /S /GoTo /D (cite.kinsol_ug) >>
+>> endobj
+1006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [509.106 317.931 521.062 326.344]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SaSc:86) >>
+>> endobj
+1007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [301.959 305.976 313.914 314.389]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Van:92) >>
+>> endobj
+1008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [241.337 294.021 253.292 302.434]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Fre:93) >>
+>> endobj
+1012 0 obj <<
+/D [1010 0 R /XYZ 86.4 726.045 null]
+>> endobj
+14 0 obj <<
+/D [1010 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1009 0 obj <<
+/Font << /F38 785 0 R /F16 729 0 R /F8 741 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1029 0 obj <<
+/Length 3731      
+/Filter /FlateDecode
+>>
+stream
+xڝZ˛�F��_�[<w���}{ �$@�̄=$9K�Q�%�$��緪����<����Rwu=UR��]�On.�{��U*�HE���*��Y�*����|��Z]�q��JǑtO�����V�m.7��}�Ը�⇛��\HX���-��V���o�
f~\B���]�_�
+�ju}�`L]2'.J��qDtdu~�1*]��u�/����z_���&��"U��f�F�`Wd������r#�
�,��{.���i"L��{?�%c��R���-h3��g8�o�=���	:v��X�#-=]��/��O�C{�h��U�]��ȶ���si�_&z��Jg�d �8Ym�i���T�w �(�

+l��m
7����ag�l�fv
���}���r�8 �:�m~�.�"��P���e
lz
гѱ�������]�@
��!�J`�q
���yi;%Ed��n�ʈ4��"�j
J5�y�h�H-�X#�e�f�8�0�/�K��Yw���BKo8�-S�mj��ܑujDHaH�Yp�e��&h4��WV���r�`gi�9�A
��aN{Q�ʪh;+�x �`�o�����
+ݞj���ہzD۲���4�H�
+���z�&��?����c����u�V
�q�$��v�m��
К7���rJF
�g�CU��h�S[��
�)��,�s�_�ۇ��R���/��A�"�v�է�0J�����:YI#��.٨T�8Qp�P����
+�O���@��p�k�=��<?�͑�?^j����%�!�w�� ����!����
�=��"8�<+�χ����N��,�K�lV-0+J�^޲�Ŷw&9�Q(t<X$��=���
E�	�,\���/�C�Sh������[�{���wҭ`Hғ���~���h�ϐ6a�cw-�y�
'Ji5[���ذ�c��[��O�;�
�������!�Ȏ��ߢYguY�1��i,<�OQ��ځ�p��>�~
��z�;����_mlJ��ظr�lj��~�n���VJE;��mq�ݒEEB���J�x�*{r�
+cn������:��&����Aw�Ǵ��x�P	�}�zs����˄�
+�&x�A�R'
Y049L����Bp�H�t�E��^����GJ�C<}L��`�- �|]�\N��B�E.C4�!��
L����V�����$a�U�+���;u�a��&�
�w?���>�\���j��/G�	��U�`fY�*h�ޣB�����Αɖ��5�F�9�D��خ&#��mVm�UF��1F;��~���"��
�P�!ڵ����P�wv�β����z��"O��(��XL�嫫_��]ᵟ�DEel�G��n!q�î!����8�
�h��r�0��6�x���iKbq(�}Wv��%Sn�p�i���	T�p�� �i#~��3N��6� $]�m a
�jszf�

��)�qʻ!
e5)���* �Ɖ�����E����M؀g:�›�+��L��f\��3��i�ؕK����a��(�›, d C����Цcm���I �c[p���l��b�3�2�&L-�9.
34�ȦQ/h7
+r�˺�3���g����< 9LF�~�?�s>�e]{pj�2m�El ޠ���+"଎�]Hy'�vn8=n4T��Z.�:�Sq�3a�!Y��;�d9�|���j��P�W��o)*-$H2�P�
�v�����#[ ��?L�74 at Bg�mX� ���W#1�<��}��������/���a��R`�*��X��б$�(]g��I �>�Xu�|�S�9�n�
">�NPx�&v��C2��AC��'rĥ�cZC�'A��ο�����)�&\
�Rd�ݠ=\f�ٵE��Lv�}��9�\&��U ��쨶��
�� ,��\԰‰�1�s��T�-V��I�	p����.J�a
+�Ɠ��xD N�λtFF��[���[��Y�����ի󌻱�Y�O�=8
 �#��
e0s�r���<}��=MZ
sE
Y��rJ>��L�V7��`6s��j at F̡ɼ�ơu�r�s�x��(��gY6�{�jE�c�h��F3��z�,疕m�l2�S���,� ��\��ȥM�
X��^�:#��H
+Q�0u�X��!@u
�"V��B��fӣ�b�� aڝB�e��7��B28	��(y�8Ŕ�>
�{z��c��
}��\��y`
8�A���s�i~G���o�*u�
cTu
����V&��a T���f�,�������+��K� 
���-���2�E�
���6;��A���R��3]N]	
f��]W��Ծ�Ŭ�0m�8M��
+��X&_U
2�	�6�>�Ou��[�U�gt�=��4PSF��qh�)me��(1* ~Uub�0���B�paL��˜Q  �C��O+N3)���H���[�R�����5���������'�������ή�
R��T<C� 
2���;�駺�\U�e]ٸ�gRp����@Nk
i-T�(�w+�� UJ�A�۬+x]��&��mh��8����`b���ECQ:�!Y�����k���e
r�	���Z�"�L��:��€���#�L��TbwRi2D�i�BՔ�/7�][d��;�_
iS63�h�� l����C�L<`C�آbO$"U�̕�X"���@��L�-Gp�S1�~��b݋�pP.lO��t���7�~xz��[ꌪb�� ���hH��
��R_b���8�ۣx��-?�4���b=��3�q�[�QǶ��
"&-��KE��/�6Xv���
���"����g�e����j���8 Z�^�+���9�a��:�ht^�\b�=�;w#E"Mӿ{��9*%��ɍ^.��J$<���m��;��OB\��U\��a����"���X�
�Z_Y��,�/m��M mیp�)�
+�
�N&�������p��ވ"8�H��x���J���3��X�9��]�A7�?z�Rb
��^G���5�34�f\���tK~�x��nK
v��G��/���c_R�ʞrܶ�VE�I��
�i
^���vV���̜���$�W)�
���|��C���$[R�({����K@���%�R��n�*O����~�=қ�|�?>��+��BQ,"�*
k�s��rp�<�"JD2�#�Sẏ����X
+p&^
N�:�zPf��y���6�\��	��m�5��
@ 3z�������ٿ�3�23��&A�O޴h�B}����RoY
��cYj�?����I�
�O�\��p*�Ӏ�\�zX��l�_낱�m�����'P��{�����H%�]q`Q1P������.�gH
��~r��̈́>�Y~Lb��mѮ���E��%
g]�"�����"Wh
��������k#쪃96:�'
��P�x�b/
�\��~uA5,�EK`
zz�o����m�H�dr�(����[G	+q�2�l��aqԕ�)#d�N�.��;.f� �2���yY<\�
���x�p���3�p���h]��";�Y�"
�9����!�-�{1��������c'E64J��dj��� ��( �(�<T�~�I2a��N� �ѻ�� C�@��^*�^�޻(�4{0��T����CS���d|R��\q��� {2NJ�u���2
}i'
D��7z��0���o�3��UƐ��&����&��01�O�{��0��X�"��ɲh)t2��
n���L��
����X �ڈ0��w�d���R�i�� )�.�
+endstream
+endobj
+1028 0 obj <<
+/Type /Page
+/Contents 1029 0 R
+/Resources 1027 0 R
+/MediaBox [0 0 612 792]
+/Parent 955 0 R
+>> endobj
+1030 0 obj <<
+/D [1028 0 R /XYZ 86.4 726.045 null]
+>> endobj
+18 0 obj <<
+/D [1028 0 R /XYZ 86.4 636.359 null]
+>> endobj
+1032 0 obj <<
+/D [1028 0 R /XYZ 86.4 586.062 null]
+>> endobj
+1033 0 obj <<
+/D [1028 0 R /XYZ 86.4 257.304 null]
+>> endobj
+1027 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F6 1031 0 R /F38 785 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1047 0 obj <<
+/Length 4281      
+/Filter /FlateDecode
+>>
+stream
+xڵ[[w۸~��У�'bɾyo�6��������� �]�ԒT
���\ �����l_, ��
�6�p�������?H=˂LGzv���:P�$�-��~5�i.��r!S9�5���6���ݶh��Ckn�9+s��2�ù�����.��/~��V8�v
�Jϖ����
�V0�Y�,�=м�L�,��U��.�zyM��PR���D ���T�K��u�"������_F�����w�[xl��ci���wԒ���B���R����Xv-v���
����]�m��nz1/��._6���.�>Tˮ��~�O��j�?8� 
+6O;���
O�A
��ݔTte�Ӹ��o��PD'�l!D������z����sn�>��D�0Ȣ'��(�D�~i�	*:q�|*ן�������47�t� ��=��A�8%|��S�8iQ����4��5��y�1+� 8](Q��=���&UL���ѳ%�d�����L��ד�ͧT�X
O*}�l'�M	�kOp�hș��8��+���Ϩ�1C
��s*�L����h]
��:K�1-{Rn�<�)/!"�
����ִ�����&�]x%ag�<4<\T���
3xYz�ʍ�.�~�����T�����J�Ԥ��y�����9�����辩7M�k")T�APY�h&A%K-а1Z���� C]��Ɂ�~ˏd�y��jE&	���3.��6܄�	A����s�y}u��ϭ���	��Q�衬��ʮ�-
(�x�l|��������������-����ޘv��3�捔�&$�J���C
�R�+�����(�JƎV�	X��	���(��cW�
 [...]
+�/���jwv��2��2�
B�0
��5�'�5����h�/�we��3S
 S�5�^�������ܞB�H�3�L��_Bq��L=�#�6V�Hq�)-� ����
p��ۧ�X;Wt&����ϻ}r�������p�&��q%� ��3����?�^_��;�Ə�@&qC�����/AW,:�����5�x^�'�#
��5�C�*��%ɲ�b���8�"� 
&���~���y7d��j
����
�P��}g�f�NQ�
�SckPI �
��º{k���@
�ڲlV/ơb=��)�y�2*�~��c��
2
+���-Y��o.명X�8繫K��!^r0"Zp�9d$K ��w�
B�~��*�+�y�F�.��dDAx*?xW`nŶFV�ռ-6U9�Z�,%��
�)=��>"h�V��5P��Z�)ɱ����"	�D^���m�_m7�ta2E��@&w��:��a��
�b���8���3
��
#D�� �a�T����ti��}A���x0oҏG7N�"�X�ma�ޣ^:���'?���4���YSٮ�|3��b�@ܤm��v10� ����A
���P��
3W�$�|��;
�p�5�L��0g�abQM`P/���B��3(�
e���
5���%��T!���yi�
�ȑ �&e�}�-sʖ�N�2R&қ�
+{f�փ�E�Ox	�7��w
�M�A��bN���#�b�Ȏf~������+
+�W(�W�$P���Xڼ����Z��#��e�d��5	-'����h~�ît�d]%�T&G&��<�T����ĸ�+�`����|I�O�p����>/�),q��2_\8N�X���r���T
h�-���/�
�� �����Ϯ��]�
z(���k�{�
�"`�1
�
2 ��/$h2�GH�	D4����c�C����j
N���}���f)�~ZG�Z&x>�U
�G`e>Oy���I
�ۉB
�5
�a�7�Q������Z�����kud��
'��ϕ[
�D
\�g��/yB�F�5
!�2
�B�MS7�Ը��� <���
:BB�'t�|ĸA�g>��"�Y-�T����E~0��>C���f� >��Wb��A��&Q:�.ɛ,�
@�"���ֶ�أ��8oÞ�
�04��d�fz~�#�*�tS��yc|7�uY�H�|:��Di��]Ѷ��-<�U��j�
R
+�9v�hoF�ۚ�3D|�
+�6�T��6�TZ�0Ͼ�����5S�`f�
+�H�

Ä� ̆5�W5VS:sי�S��[%��0�b$��^�Q�G���Dpwe�n#��V,(��e]
v�I}�2pc�>%�˼y�U�༝
@$�p�t/
���Ŧ�V�N/��B�x�������xUWo#���*�H֤ͯ
Q"X�pƠ
Ft�` �x�g��8��(lj@Y�n<
+�e����ij�浮
O>��S��l���c�jr�2�	%�7'\O`�Q�@�zt��
	(O�
��w��M)�ɯ�UrjЕ�_��lLwhpv9vR��~QI���=��P�N�
+b�]���W�:�§Q�
ɲ<�
�+DU��<��k�e��}x��[V[B�ϊʶ����^�G�
��'gqD����>�K��4͹��j=?����qq;Кi`R&Y
�a2ty���	F�A�c�P3�f�5
,�*��V�}pȿ;�u����˭Y�,��v>�e=���*='�S�[
+�"&�PBcm|�q��$H=kt��©�i��;N�?I��G����D�i_s�*q�z
5�%�뭌������}n�c9֠�k�e�����po��r?�
i�n
+P&_�,fo#�@��"T�-ֶƫz;�^
p���K�(�
����I�d
+���̉C\�����li�>)��PR�ݭ�N�U7�`�1�F1~����z�7$�ahreA
�H��~ߝ3�����
�w�o��ޝ�k���
�`�t��r-x�4�k��8!J��2�pw=�&d���aM��(
/������ͫ���RP�o_6����Ѻ?^�J���������-�*�������Y��#H�٨P14'���GA��ﱰ�!�S���|�;/,D5��=�������)⣄�_a
�
+*�FU=��g��fd
Uu��7,�A�X����q
>A>��������@��nB���*#GQ��н+��]sX���$'���F��� �v��u��˪�����\��'gVlKF� Er��8Vd��9z9<��������K��zs��b�M�FT]�(��l
+_��ˑm�ȡ�1�rt��`�g�@���;l�T�����"�w�����y�D
+���d��RjHY{�Gw>�2�}(V�Q�8��@��Gp[�z3�
��Uغn�P��ℶ�
�&�|�e<�bǤ��8�"h�`!�G�;WH
�z�������ZTk�ӳ�ݥ�&at�DI4���;Q���*��$C�':T�$T_��|F��<I�"٣�D���qQ�j�F3C��U�/�&��S��Q�s�1��֦�eb�����T`�N�k�67�[:����k�4
��(3��zf;�R��jAZ���֛��8/��]�.�:�r�
ZgNRdI���7�e<-��u6�N�ɼ�"K�2�m
�)��/��E�a�[��������3��>��W�[��sLHk����$��A�Q���l����E��~�mw
r0��F�� ny��$�M��R��@�q
�9��v�#�X� �k�M���; �=�&��_O*���O@@�J=#pH
�W�B�T��
+0�H�o�h9�D���"�
E�]���Q���1�j\�]�A�r
�m����	����XB	��C�A1����.�þ|�/
�9}��21(S�D�Yښ��:�,ꨚ;����M Cw�	
�r	����0�a8���F�h��#�H����
	8�G�L�S)홀	��ﰐ��JiLۙ����v�cR���r&Ÿ�Ꮷ,�ʛ�e���؏��`#�s�n�58"@�]���	��!v+�4+�qL���q�W�� �׻	I(���s�\$}��k%�
+wM
���΁h���Z��KǪ\tv���޻�"5��r����A����ǢF
jx����0
��b��Ng��Z��	L�Q���a8h��R��;:{�w�ΖR�t@����
�`®h���
�?�ٷ����n���P�WV�b�K�
`�
t�M�־�����#?��gD��".p�쩬�%�.�²�=��
!���õ�6x&�:���JaC�ˋ��
�s'�ICw|!�f����|O���
+]T�>��O���x�>�Dk

*�����u�x��������ZݗU��٢/��
�Ǯ��^�_��O\
+endstream
+endobj
+1046 0 obj <<
+/Type /Page
+/Contents 1047 0 R
+/Resources 1045 0 R
+/MediaBox [0 0 612 792]
+/Parent 1051 0 R
+/Annots [ 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R ]
+>> endobj
+1034 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.54 234.758 170.514 245.606]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+1035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.18 210.294 204.903 222.249]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+1036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [291.088 210.294 305.811 222.249]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+1037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [312.441 198.339 327.164 210.294]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.5) >>
+>> endobj
+1038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.803 198.339 408.526 210.294]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.6) >>
+>> endobj
+1039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.876 176.672 484.599 188.627]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+1040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.569 164.716 309.292 176.672]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+1041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.012 143.603 154.986 154.451]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+1042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.838 98.025 155.812 108.874]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+1043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.533 74.115 476.507 84.963]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+1048 0 obj <<
+/D [1046 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1049 0 obj <<
+/D [1046 0 R /XYZ 86.4 542.94 null]
+>> endobj
+22 0 obj <<
+/D [1046 0 R /XYZ 86.4 297.432 null]
+>> endobj
+1045 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F38 785 0 R /F11 787 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1064 0 obj <<
+/Length 3224      
+/Filter /FlateDecode
+>>
+stream
+xڵZ[w�6~����R9J��O��dݨ�k;�C�Z�e�����~����Ļݞ�D�` �
�\w�����'�nN�{c�Y��P����Y
*�D�ƛݬg�9����g&
+�k�Eċrn����|��n��U��'�oN>�x���<�Z�b?���'�����0���U&�gķ��&Q������'�H玥������)���0��,���v�wo��
z��ݧ�6��
E�7"��ۓ�o
N����Y�����B�Nր����ٜ�&��cu��A�u=?R�Y)��\k'm�s,�6ʇ��wWռh�����9l�2���&o��y��G�*���5_a��:��#R�ܑ�m`y��fy��_x�x�T��Q�	�b���+
������3��kG�ڡ
?�N���6cjJ^Ft2	1�PV�H��1��/��zNU�zZ0��K~h����<�溷���1A �Ɏ��n��U"[a塚�<6m���۔�~��z�Լ�5�m�����(e�!o�y4�;����OVγ��
�=3wMV��a�6�銂�������o��.�Ao�����s�Iz�=\�Cut8 z�^�ϰ�}��BXUxlm�sٱvh��)(%�*,(�b�Ez[�?ػt%���c*�fJ
v� [...]
+Y~����>uy��e�z�#79��v�
 �/�gBz��: �=�[0�- 
4��? z�q�#�K|g���!��k:'��:������D�c~�G l�2����h��߇��s�j��@|%n4ۊ@c��~s��!��۪�4-�|� �u^u�E

D
+���/�Q)Ѓo�iTc�=+Sӕ�<-&���T1O�^���		��L�S�Y��ݻ��' X�*|�C����]ރntL7z-" 
o
��8������������[�-���c&qy~wW��K�PI��_���Y����w�������	�y�B�� 
� xx�m����wi
8�<cZ�;i#H��B��� �����^�./&#�q�ey�ZN��[��O��M8f^���ؘ&�x
�,]/Fr�iDn6=�Հ�� O�/�~�d�zj�?� �[��)MY�^�K��M@Ř����YKB�+~[g
��`x����9
`�F�->�4�x6��8�>`F�K��t�;��P�DѴ�����c."
+�r*��n�+�Lns�������l�!�%ϵY.8���E��D=��R[�؀�f�
9��SA<I������zŇc�F�c����[��ܟ��G���XL�N|
D_e��qtF�d
y
+����9`:%&ʐre���q���i1�� <��	]��oX
�C�e���-���Įr�p�X

+��j�\(��@a�G�Y��8�����+��{��S��k���8_�7�j
+��Z�������*�A��Чx8�qԁA>.k�]�2��$hC�FA��Q��
x����

6�j'�
�]W�F��ߘ�_M�T�Bn������j��
�����F0
+��}�k~���_R<
)i���5x�u�^i����O��Ù
���X�D�s� 0�Ӧ�;�=6=����Gu��� c��A@
+J7b��vW�2
�0��n:�Y�
9.�B����(;?�(��<:W�
�IEl/+I�f_ڎ�ٗ]U+!�"�=|BpW ͍9�z���:o3ah	��<
+yf.�l��$:L_�Ś�
���D)��u?�@'w�xZ��d���8
��;���

$,��6+�,��
;4pph�@L:9 q�j~�7�hsN�ad'�y:���N%k�*Q�
p�|%�Uُ�:Q�`1p�&� S�/���S`s��GǷ�R<w������ 2��
��4R\�}��m>��Hcb.�$���
Gn�%j���y۵Y��sa][�Q6J{}�b�S�M�֜�pc��� ˁ"��tE��<nѥn�=8_�aԧG}J�n�R��m`��
+g&#S���	x0
�_"Zn!|w�ճ���g�c���bX�[��
������޻	�y�?zP~��:p�?�?�8]^s��*+2���e	�ʤǸ�)�0�yd����[Z��CV�՚ɕ�5<�T]��^��}�⒣D�5=p��>�������oe��F�h7��vh���ݔH�=��'vy�ĵ�c��At��c�1�I�a
+!�����z#.`/�"��išZ���ΛU��[�6������[�TE�8;��ʐq~ rW3��ѶJB\�WR}��K�-*���WJ��^�Q���
w裠VQ,ۼxq�|}z����:�?ܼ~�/����J��_ȶ��5ܤ�����MZ�.6Ym��֨�
���nG#E~[�u��ǯe������!S�r�R����-
�E�4>�@����
�L/��8E����eА2�[~���N�m��x���K`%7�5�ܯ|$�*���#ّ`
�@f�'�O7/'��*p�e��Sy'�}޹BeBױ-E��=Vw�b��y��ds*1�8$˲�9�
�t�<������Mݙ؈aW�����=
hI�GS=��h���v5�N)bJ,|	h:1���R��}*i�|1����B\Z���E�z;�_�'�<\*$��O>��<�}I��F�7��;�6�6���z���%�8$�����#A����������7���qD����bZ.[6�-��l�2ϙf�A�ą���al��rɤb�w��!D<��}�5B�NI�R��B�`�d��J� �/����@
+�
���E�Krt�7�>ɬ%H
W��ʓ��AΚ����'����p�b$w8-�))'½AZe;����;�f�
+�$I|r�=94Eun�;;��������$�Wĸ���M�*�8��d#���
�I;�7M3!�8����5��u5��H���t묤�0a)׹����})�o�٪��wG�.|/r.k10�+�!'�"
+� nA�r�id7
_I�
-p+	w��7
+NH�$���W�;�=��T�)~�w^�!;n��j�s��d�*{,+@��*��-%Q4���e�W���#؏�̵:WSw����Jik�������cF`��L���{�\�}�^�ȫ�����wJ�&�e���ۦ�o��DϮ����^$�ܓ9�%��oOu'�^?s�
�^����oO�&Ү9�x����r�^f�aG�0�����˧v�1��i=�R^N�c��k!K��B�
+endstream
+endobj
+1063 0 obj <<
+/Type /Page
+/Contents 1064 0 R
+/Resources 1062 0 R
+/MediaBox [0 0 612 792]
+/Parent 1051 0 R
+/Annots [ 1044 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R ]
+>> endobj
+1061 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./warning.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1067 0 R
+/BBox [0 0 26 26]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1068 0 R
+>>/Font << /R8 1069 0 R>>
+>>
+/Length 1070 0 R
+/Filter /FlateDecode
+>>
+stream
+x��O1�0
��f')�W$�L�*�5Ca��$m�Ď<�u�;�&2,d��e
�@�
B�y���jE)�z�ܗ!6p�T�c�������P�>6��|����︭���	��+t�N�4��A���ciZ���P���P���f�
8'\�| ��8P
+endstream
+endobj
+1067 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20160810091351-07'00')
+/ModDate (D:20160810091351-07'00')
+/Title (warning.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1068 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1069 0 obj
+<<
+/BaseFont /SOTQNP#2BTimes-Bold
+/FontDescriptor 1071 0 R
+/Type /Font
+/FirstChar 33
+/LastChar 33
+/Widths [ 333]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+1070 0 obj
+152
+endobj
+1071 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SOTQNP#2BTimes-Bold
+/FontBBox [ 0 -13 251 691]
+/Flags 65568
+/Ascent 691
+/CapHeight 691
+/Descent -13
+/ItalicAngle 0
+/StemV 37
+/MissingWidth 500
+/CharSet (/exclam)
+/FontFile3 1072 0 R
+>>
+endobj
+1072 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 328
+>>
+stream
+x�cd`ab`dd���M-�u��Iq�~H3��a�!��]����;�,��\V�n
�n
�E�o	}o�����A�����b�b���ʢ���РpMmm
������BR%LF�%�83=OA
�(K��/�M�+�Vp����LVHϩ,�(VHLIIMi
K�I�Vp���,(�/S�p�T0200��~��I��
+A���y
+~��
+>
+��)����


��

L
L��,�?:��?��n�c�|ƻ�m��[}7�MM��^��k��
;w�n���ySt�w�){V����~�"�39�Bs�|��+f�ɭЙ9�7?_�����g[��]�{�
��
+�xx �~}J
+endstream
+endobj
+1044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.495 688.242 156.469 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+1052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.68 605.223 156.654 616.071]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+1053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [273.128 580.759 287.851 592.714]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+1054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.453 568.804 171.176 580.759]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+1055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.94 568.804 461.662 580.759]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+1056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.612 556.849 133.335 568.804]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+1057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.081 534.159 156.055 545.007]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+1058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.081 510.915 156.055 521.763]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.9) >>
+>> endobj
+1059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.607 475.163 286.072 487.118]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [301.377 463.208 310.427 475.163]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+1065 0 obj <<
+/D [1063 0 R /XYZ 86.4 726.045 null]
+>> endobj
+26 0 obj <<
+/D [1063 0 R /XYZ 86.4 375.938 null]
+>> endobj
+30 0 obj <<
+/D [1063 0 R /XYZ 86.4 231.23 null]
+>> endobj
+34 0 obj <<
+/D [1063 0 R /XYZ 86.4 179.56 null]
+>> endobj
+1062 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F49 983 0 R /F38 785 0 R /F55 1066 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1075 0 obj <<
+/Length 2784      
+/Filter /FlateDecode
+>>
+stream
+xڍ�v��r��d%�=��0�Xs18H��g��
��
H�$����z�xX��
������WW5V�cu�W7�է[w��Á3�$�N00�
����$��7�6���F��O��,�Q�X��J+�S�l�r
8�g�
�����U�\�ue�>V��|=3�:��շ?��f>w,�
�7��w���t �u�_���s0�M�4r���\�l۳�����q\�^��̞_�]ۨQ�O��	O�ӳ���1' �kY�����g���5c�B�/B�-v��־e�3��,�
1�Ł�sD�E
�4���g"���g����c�^~]�C#. H���L�9�<>Խ�_�TY���X����*�i?Ƨ��nJG)U�V��+�E)�yZgE~m��ZJd0C��z
~�Z�x:���K��]����m*8N���g��(Ӵ��*�u��96�wJ�٧%��6^`�噱�L
����7Do(
+pR:;R~6�eM�����U��l>���7����48j��^-kG�
�7F�X�RU�d5oLvV7��RG���� 
�����xL|�	̟��^�T�e�t +��b �d2S�r�.���<-��fۢܣ�<ׇ�_��(���Q
�;�n��59-Υl�J�l�:�6%��m?����/i�z��D�EP"j]�
��Ӗ8�W�h#�o�}٭�4׽�\(
Y
���W��
��
�ݍ�L�Q�� �JU��\�Y^ �':7�����돩ќ:0hl<t&��2������x���E�������/ֻ4۫�'X8%5?*K89Վ�QY��'�rA�;�C�a�#
�
+�L�r@�"��C�+
f�ѺB�]!y�+'�DWHͺB������ 8ӕǙ ����П��:�����ׇ��;�s-���
+٧����
].�U�aJ�� ��.@�A�7m��S����.�c�2��\n�^1�\ђ
�A�O�Fy�ӉN	pm�8�
�2̔px�fHƢ��}*7
�cY �mD��1*��:�bg	�B<��#rX�O��:qo@钷%��
M�UŖ�F�w�[�������Ԩ7ϴ
o�*%9�p�#��M��E1
|`ċ���5�Pꄌ�SKk�?_�I8a��#�;"�����qM���-f�p),F�&�'��f�,`�A���J�"�� 1`���e
�b)���(R}��h�D�!8}���x��D�A$�
f��
�D�^=i��d�<6���P��ȂE	c�Z���>$��`K��M4��G��p%s>/�%�,��?�v��I4�I���p��5
VˇE
�,��$�dzQtN����xb��o�%�'
�w�ٌ���h_��|,�fїpy�Ќ�sy$��h1�>�	q8^-��xgY�`6��iQ+��5	����=Ʉx�(R�sT�oLy����3�����F73����y�h��.���p
a"��	2�y�Q�
�K�^���ۀ�����_W�8B��(�6��gJnH�_ [...]
# ��F<2%8邼�Qn��D��e�׻H�<��j���6&�r� 4���	�g
}��Mx�:sF���,�J�6
��$p�L��bb�CJ
N���s
�2c�qH��@��SHn!�`�����msuy
+3�G�p4���s�S�^!��Q�Z]�ܖ�j|ǘ�xj�;�5���1�p�J�ƽ9TD�S�~���=H�l�
�i�h��<(7.�)FָR�u�J* `D%
+|�`��E�C���@h>X�(��
+�H��l_��Y�&�5-k]f
+�-C趟߹�pL�=�t�ɂ�	yA4�	�"�(���R�:��7���
�ٳaΟ
��dZ"=S�B��H� ǧ�hq�y��M������sz�?9>���]�����}a��Љ8�~pR*���u�M���)���b���)�p��f�G�s�!�8
�=�@Hw�&�+��w�3ͥ��W���J���;�wAU���K��b2dLOO8���L�|�b�'��_KU��B��`�Lm��ƦUu؟��=vY����SV��k�"o�P��l%|����ݻ34�5h4]�c��2j]PW�
+o��" �@U	��}�������4��(@L/^�7��׵��7J!��N���>-�_G��u��-*��t�]���+��J
�ղ����áTp�Ik�O(�m���MW���z
����
�ȹ�����q���hWRėZ�[
������:qπHUܞ{��Q��0�ش
�W�:�4㓤W�m֙�E.n끧*�
Q���d7Hd�
���’��i�
9�%�g�[ȃ����%1�_LHo�
�����/&C@��i���wMUg��V��02��
 �u붅Y�Hq�F�5fCJD�*�w1܇�'�F?H��4p���M>x�/s�
�YN
��]�ԏw5)��bnI�>�{г����b�G��*�e	��5�����>�/�ԁ�&'��� ��YF#◭���� Q�Zd���
��
���z��
+�hH O'?@hu#R���OT�s��>��?^�����͵�M����-Z�;���%�5���Kʯ��c":�X���'<�C6"~�U�;���P،i����
I��1���b�&W��3�
+endstream
+endobj
+1074 0 obj <<
+/Type /Page
+/Contents 1075 0 R
+/Resources 1073 0 R
+/MediaBox [0 0 612 792]
+/Parent 1051 0 R
+>> endobj
+1076 0 obj <<
+/D [1074 0 R /XYZ 86.4 726.045 null]
+>> endobj
+38 0 obj <<
+/D [1074 0 R /XYZ 86.4 701.138 null]
+>> endobj
+42 0 obj <<
+/D [1074 0 R /XYZ 86.4 609.088 null]
+>> endobj
+1077 0 obj <<
+/D [1074 0 R /XYZ 86.4 311.689 null]
+>> endobj
+1078 0 obj <<
+/D [1074 0 R /XYZ 86.4 267.853 null]
+>> endobj
+1079 0 obj <<
+/D [1074 0 R /XYZ 86.4 210.125 null]
+>> endobj
+1073 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1082 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+1081 0 obj <<
+/Type /Page
+/Contents 1082 0 R
+/Resources 1080 0 R
+/MediaBox [0 0 612 792]
+/Parent 1051 0 R
+>> endobj
+1083 0 obj <<
+/D [1081 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1080 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+1091 0 obj <<
+/Length 3536      
+/Filter /FlateDecode
+>>
+stream
+x��[Yo�6~�_�ؗ��V<Eb0�&��
�A�@&X�-��N��ԙq~�V����v��J^�ų�X��G:[ݬ���ϲ����g�x)̊g��\�^]��N�J3����U��5�涸��b-r���^����479�6�j-mj���*��jW�nSl��7Mݹ�j�
��
�W6���Ѓb�����<)BM3��E�e
��z]�������`
!D�j׻b���B���+�~�6W�jGu^g*�ᗟ�Q�u�R��޿Ů���^�����2i��l
�~YR_��?��P��v�x�fka�M���5�_
+NKzy��<��b�t�+��\u��0�Γ{]'Ϗ;d6�F���o�fc���R.�lN A�����f�3C�M065-��U�j�B�ҩ��.�wes\���*e�#�T�Y��*"��S�́D�c��sэNa���D�6!�Iݰ���E��*�N��I�1�j�ux��$�.�,fҜ����zw[�U�~
>�+�ˋ�<�~��[kޏP")�26%
sT�˘ R�G�P�譤M�en��������]��ң��
��f�2`#
�%��~��.���f�.Oɤ����L\�5y_i`�euv���W�+E�ߺ��W���$�2)�G�b@�����!K�|�VI��EY
��lL�a->pͧѫ��h$�֞����-�f�}	�j0C�өU���ɳ�}'�:d�Y
Y�_Sp,R����뾪#S�M*�zĚ`r�,�	c�ۡ�`x���E��M���������>�M�qE�N����Z`�We�[���$��'@���e+�j�����?����G�n��Ŧ�
����y��(�U��b��9KŴ�B�T�(5
q *2{�_����_X0��#�F���/_Lei�ڠۆ�촍Pai�F��ᄴ�	���
�5�Aԑ�5�t�k�OB^�a���e��m��)�����

zr�w1!el)��> 85a�Dx� ���2"�ω�NX��u~&�1�
|a(F��$�u�[n���F�Lj���Gl
+��\Y�]CO�fw��+zy�1	���zzo��s|�G��ǰ�'�	�
+�@}�}�ڃD��E�宾�j>�:��UK��v.�
p2c�}W��%%�f���,Fv�=��;Y�Z���ɗ񱉍ʠ����WcԵ��������Cc,��(n J��
���҃�P�^�X�)��2�g�`,���c��h�A���x������
S
�t��f��%;��;������\/A[[uA�4�*=Z�6�->�!]�� � 0P�d��F3X�
�d�m+�ՋQsX�Aԋ�ɗ1�r��0̗�x1�M[�n��J�1�c�G��{��������x-D�[�
;P�דG)K�x��
�W�b5& ����^:Rv  ��$և��\j܉�(
+!&̙��_~"�s��2�c��B��S�>㖓�Y$Ἠ������‚��U<b��;�wi
��P~9��
�ࡧN���޵�n�1V�¬n�PBEw�k����S�c�gK�~hd�l�-����$�h45���Xz<b�C��K��ɕ4���
�{]�o*��C�mh=i^��]���5�]@�����
�a�E/��b�G�YHE�9�-!��X����)�C-��Ck>=��P��߮���g�-�����(
+ty7h��C���)�X�Wo����.���zi�O���v���w[��I�e�~��Uh���.8�(��
+�3��6h���qNͥm���^��P�)�B����!��=
�\jϊ
�|�l��V���<
�D���KA?��j�����;�B�_��!	��T�t�}����9�@�A�00
N��
�j���2,�]�`n��ؗ�/��`�� Ap�(���|�ɑ>!�	�r+�R�u����
����?���;�wh�>6����*F�b��J
Ll�L̶W���(-͂������g�G[RbEl3C�� �`��p"���2������rUb YT ��lo����n�+ ��
�ρI�ݐ�+ȌH�TK���	I�F'qh

+t�
���ؚ�Y�/�]e���T0��\���
�X�O����,����
��^�kP��Ї9_�Y<�

��is~�J���<O^�����Q=~)�Pe8��gʗ0k��&?؏����i��@r��=��{;�
�
+�0�@���c�t�j&= �S�p��#��t+@�[�E
+{CfC�Y.�+b�&ͬ�x��9�œT��9C��?-��0�����m����k�v�Z5㔣�٩�z8H�(�\K��V��B��B�tl8�Z�
��s2z�f\
%�Q�'�>�ǦL���A3U;�ܖ�h�B)Q�9:��#�����(�� 矜�
Fp�����[�4�< (
��0eEs�
�����up�h`1�%<�'_
�
>��|-#x="���
��-
���&�|��hs��[����:��F�f��ކ�c �k�
헻�p��ip�0�)ԭ���
*8��/H�3v�l
�q!r�%,i�
���`#;:%w̡_{ <��&o�E��<��
~
+$��|�2q�Z.`���
.�TLH�/':X����c�����w�D�
����3_1�Ea&d2���{얜��S�@���R����Qg�6�	��:��Q_��y�	�-�0.<
��
���M�Y�w5Ds���L#�P{{��㵒�l���3����Rh�D��;�4����M�����Sz-�7IL
U6?F ��i��b#!�9�WIq�h�L
��l�+���z���w<��і�+T+��DB�3.���t�*�7�V��I,��A�U(�޻��a�
���U{OE!�,ܘ"b
��mz�<�9d�����}�8|

P�P㾣��]G�=n�8�'�c\M6����\=�	�
��WpB�-� o��眸�ùF>�s:�t���؃��j!i�ǜ�7V�zz(�
Y�q�&��Da.3!h�Ӧ�n�[�
�Ҙŀ��<
��VjZ�ʆ�� �
��Q*T���:���
߽
A�
ZeӺ�
7�n<7��E�|ₐ
�/�&^ta��SJW�6�³��N�0��A�7a���m�m�t������wU믓Gx`W��k�,�0�"���pW���_qI~c
�c�X�g�����}3�&3�������t�b�aCS�D\o�CL���o_����w(��-�Ny�e!�o�°��h�~G�4��>�?!_��- :0������
���f[Ęm����*‚p�ۢ��Nfv�w����}�.c64
��\�X�M�p=��%k ��.oc�M�س��_6
L���	�����|��?��H6�gi�YX����Y �� HD
+�j�'�[��x_
�C>\�s�q��f�G/�x^/-R���!��E��b�<���]����
�yl��Ţ��r®Y��B�`g�z�j�b����
��\��Dڜ-�:��)�</6�:f
+�)����b�5�����W���<�0
+endstream
+endobj
+1090 0 obj <<
+/Type /Page
+/Contents 1091 0 R
+/Resources 1089 0 R
+/MediaBox [0 0 612 792]
+/Parent 1051 0 R
+/Annots [ 1084 0 R 1085 0 R 1086 0 R ]
+>> endobj
+1084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.854 446.576 187.576 459.44]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+1085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [279.49 267.572 286.464 275.984]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BHP:98) >>
+>> endobj
+1086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [341.617 100.199 348.591 108.612]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BCP:96) >>
+>> endobj
+1092 0 obj <<
+/D [1090 0 R /XYZ 86.4 726.045 null]
+>> endobj
+46 0 obj <<
+/D [1090 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1093 0 obj <<
+/D [1090 0 R /XYZ 218.991 506.36 null]
+>> endobj
+1097 0 obj <<
+/D [1090 0 R /XYZ 86.4 432.621 null]
+>> endobj
+50 0 obj <<
+/D [1090 0 R /XYZ 86.4 342.25 null]
+>> endobj
+1098 0 obj <<
+/D [1090 0 R /XYZ 259.387 72.863 null]
+>> endobj
+1089 0 obj <<
+/Font << /F38 785 0 R /F16 729 0 R /F8 741 0 R /F11 787 0 R /F7 1094 0 R /F36 740 0 R /F10 1095 0 R /F14 1050 0 R /F9 1096 0 R /F49 983 0 R /F1 1099 0 R /F13 1100 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1113 0 obj <<
+/Length 4092      
+/Filter /FlateDecode
+>>
+stream
+x��[�ܶ�~�����!�J`���n�8@�+R�1
+ݮ�V�V:K�8׿�3
J���W�E��J$E�
g~� /�\o��˳/.�>}!�&Or����jcT"7��ls�ۼ��y̍y����mQ��ˆ�˶�]�A<���xu���ه3��6N�%F���p��}��AϫM���l>�q��y��޼=��,��3k�T����q_v%���
Ƽ��$0$�A�n@�QI���21&��,�yF��X/Q��)��y��&�g`M�'�ˇ��YT-c��h؟��=o���q(w�f���kϹ�~�n/l�І�T<IE�"�'!K��c��i�f���8f0+�,�1�%�
�YX��E�Zq�AqsP�� .�C\����3b�+�4����/��p
���=72�1"%����w���
5�տ��ob��Iʑ��3��p�k���>�U�h���
=d���<�Ji�1�H�-�bқ�+�/�c��A�x.~�rba��l��R����8��JG&R-ē��R����`���Ү��2���w~m�։`�L
�T"�X��yuJC��O��sl���.�y
�ʡ�Ucz/��[z
F��= 2ar��!�tb	�<UN����U?������{I��'H1��3,g�좷BϝЙ���" 5�Y�vkB�_�����Su��e�yy��D�NrE321���I�B���kG�-yx�"��E 7����K�Њ�6mS���㺾./���Z��+���rZ
�ݎ	���ok��
�
*�-6��(�g!] �*��d�)��S�Љ�)`��Ӗ� c鹔�(�=p� ��p#�$!@��O�8�
��Teo�>s_�>?�=
+�
8����)���2� �|*�.h�i�dZ{��@U�6,K��
��i�����9��G`�|
�'g	gnXuJ,O
�B��iP�A:ȼ��o��r�t�����'
-;�h+�8�t�:�� ?�$#�?<
�eKM~p�M�NXf�E?
��/��<Z�&�@��
6�� ޔ�E���
�Q�̂<t
����X6\&/�soll
IJ=<��̖!��D#�bˈ�8�!��a��i���(��#�7v�~o��Q��j�q�=X�#�����F:o'��ʏy@U�KϬ�4�+��z�عG�h����f�"<w&q%j�|�b9	aO�a��6��e�49g��
h� sp��)�S����m߅����0��
��wT��Ѝ9��&�&L���� �r��;�sg�
O�r�c�~ƴ7E <��=J�F<	@%0G ��T�I�����P���,
w6���|��5[l X����=Ҷ�϶�"Tv�
|B�)ƚ9pUj��2�r�d����1{U|�

�����#KDOqۥ���6͵�X
`j2�#�~�
��N\u�,
�	�]�E��ض�U�5c�C�L�:ɔ�Cլ%��l-4�dL;�|
g��aY��Ī�&�OD�T"!�V�rH�H[�\��=1�,���VԠ ۄ�@�� '������TB'
ˉ�Ļ8)����$�j|N>y�G����y�(���8���'���5{ϡĄ4�B�E�%�A���Fzen^@�
+A�N�z��J�4�ͽ�HgN_Ɗ��!��LB�v.��Y��������U�wT��o����2��|HlZL�P\[4�eOSÆ4%H��}ЪT�B��"�}���d�c
5P1͎��HH���b���t̅_����Ň9Y$�ѵ׭����x�S��*��4��c�
�C�D��xQ���ڝsp��D!��3v;��K�+
-�(P<GB"��>�m�-ia��av���UͶ>�����<�)�s�W�[�{�GǾ�����A[䂮)Á� ��nߎu	z��Q���`��3L�\�����iO_�~�K{T����n-iP>����UE
��XJ�R/W��uрF�����;�ҍ�*3an at P43�>z
����<Ciß��r�˲	Z�����TuUow
�a&�1z���I���wD��gW6�+
+sP�V\���q��%
Y��b��4*�
+2�C�!g9� wEח� �g���3�?����Գ�|�4\�t���qCۍ,ح�(����08`�����
�
o!����!̎�]
Z��
Q�L�,��[�6f-���#$[k�5 @�mA����h,o�0W�-	��Q~��ք�"�O�B�g� �k�'C�2
���lӅ�-:��+
<�q�G��i�O@ߏ�/
��y��5\�5����lQ�Y����`ْ�	7Sr������&-%k���F�ĉ'��e�i �hO����(�Zp�6P1PJ��{����.��j
���z7Iu"x��.�O�-n��������h`��+z~A�؍g��vh��U����n���N\�{LBD�K�t�_��l�o��o�(m�'i��I��I~+
H�2���r�V$j�������[�$j�1�b�P�(�4�� ���Q��8���D�ͷw�y��g��ˮ��I|ywwu��w��9��ur�����'
��9qh?˦�$hU<z{t�
:`�$�b��l# �̲��|�C��/өE2�����
g�q��
$“%���|YB�=���)���Y������}(�����V���%��;g�4
l����
l
���sV��货ƏU]ScS�uq`K-;�-M���	
����KWgϝ������UEr��7x��3�]U$��g���T�� ,�0��,�q�ntd7V�e�
�Tbϛ<1�
Z:H�
+АO�Q��T^��º��Ú6B"\���,
+"����
Ɩ��%88�}��)�� /?��6
�|���ԍz��UȪ\�����:�4
^ޔ}�;қ�c"
+��z���;&(�qp�7��
K����=�]���^$g���#��&0:����*���ۡ���(=lj������`�eW�*O�D�_��2ɟ$�t&3��'<��d3\�~�L3�-H��� VIg	��4�.^ ߿~CCPBX�芦'3m{4�2~���lv��},�*�4��5��r�rQzGD�
+% R�3�)x��$B��.��
���x��Z
+ O]�͎�"
�mzj)�aM��\��
h�e��V�
�H�eՌA�v׏pz��G�La J��:��2B�F at 8����V�OE" Nv��4��'�i�x�/�I��c�K��u:���6lK�ɘ�U����3N`��*�����ʃ�+��Wǚ��U[�5)�� �ј�K�-��s��s�F�n���
�;Ͻ�r5z�Y{�$}���|{��/�����uO��m��ўӇ���Tn�
+�
�;�̰�k��t�i�[3@�4
&��&{�B�w*��=�y�l�I�<
��c�-�:i�$��
E��M)�5��j���@�����lU�Wz�'n=I�'�b܃%�5�g��|DͅM5�i�M�J�!�ZWZ\5&�C=��kӍ?�5���c���è��,�el
�c�v�Q
]����	�����!̓
�|b�'<t��<��\T��1��)e3�g�+��yJO�H�����@x��{t�\�3�	���
��4�%ů���s� �E��K1Ô�K/�;=Gg�A�l�����𷆮ປ�ʖ��p�����[,�є][פ=�Xv]۹�V�����໪=����RH
>;�*��ف�\
+�o\�~Ho��=��;j��i�C|(�&�A�����:Bc |p�
\�$3�$�h]�~��`j�_�����ڞ2*,�|z:������o^�
p�����YxsW��БM���݄��~v�Rl�p��` ����5��{�k�ϱ
*w)��KO��^�m��J�vn�e��LD�@�7�
��J��Ǯ[��v3Zċ�xu@:��ظY��ue헃1������

�|T�
�UsstK^�rܮ
+*����S�q�����c�,������C��2�|0_�r�����G
+{*xߘN�G�KT�
_�~Sw�~�ΕFAt��E���*3��Oݽzܥ�*dFt�t
���}�o��K�|��A{hoNHz>���^a��07by��j�Y���g�0�&
+endstream
+endobj
+1112 0 obj <<
+/Type /Page
+/Contents 1113 0 R
+/Resources 1111 0 R
+/MediaBox [0 0 612 792]
+/Parent 1051 0 R
+/Annots [ 1087 0 R 1088 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R ]
+>> endobj
+1087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.009 663.778 275.732 675.733]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.3) >>
+>> endobj
+1088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.318 663.778 386.04 675.733]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+1102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.627 589.825 426.35 601.78]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [433.789 323.318 445.744 331.731]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+1104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [449.837 323.318 456.811 331.731]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+1105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [303.98 311.363 315.935 319.776]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+1106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [320.322 311.363 332.277 319.776]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+1107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [336.664 311.363 343.638 319.776]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+1108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [248.635 134.2 255.609 142.613]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+1109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.957 119.754 173.68 131.709]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+1114 0 obj <<
+/D [1112 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1115 0 obj <<
+/D [1112 0 R /XYZ 211.462 636.692 null]
+>> endobj
+1116 0 obj <<
+/D [1112 0 R /XYZ 232.933 571.151 null]
+>> endobj
+1117 0 obj <<
+/D [1112 0 R /XYZ 253.911 520.588 null]
+>> endobj
+1118 0 obj <<
+/D [1112 0 R /XYZ 242.095 65.093 null]
+>> endobj
+1111 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R /F13 1100 0 R /F7 1094 0 R /F1 1099 0 R /F16 729 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1130 0 obj <<
+/Length 5004      
+/Filter /FlateDecode
+>>
+stream
+x��\Y��Fv~ׯ`剪�0zG�Ʃ��b���)G�D�k
+�Ľ67����9�t7� )y�$�4�O��;
n�xX���|���7�3�Ѕ�T.^�/*Y����,^o?/iA��XŖ?��Ox���a{����/�_,8cW�3�5^|����{B�Z� ~JQT\.ֻ'?�R.6p�Ţ,��̸
̤
�g�x�俞�1�ՔB�IA�����Yק��^$��	�
�P�y�}㆔
Yh�*
B8�B+Rp-���߭
+��"�5Ǯ��SZ-��RP۟��Ȳ{J��~
Ǽ,����}t����<~ػi2
 )~�2
�EU�k���
�"IF������p�,m
���C��Gm���v�C�m���Ao�cE�(�@)�p���0�����_
+x/��x��2������*X&�3�ʗ
ivćv��G���|�C6��h/[��A���]{
�7/����8��/.���fg�M��`������C_�倐h��b
���}'�t��{wt���j{�i;୽�m�M���N����m)�M���
Y-����
j�#|�?�]��@�n��X�>��
��6�j���FA�fvNE_���h�p7���V�+�L�_���
+�r0��iߖ��$�J-��|����5 at 5�Ұ
���8ڬ/��ׇ���g�����T{exq.�`\��H8ΈD}�T!#���d�"
v89Rp��¦
<��V |ã
P��k\�Z�"׭Q��Ǡ�*T%RN�-�̬lUZO8L�rk���fȖ�m�n�!��1�`'(�>��&�X!���\�;X�j�����7��#��ìd�����ͯ�z����U���|�
�N�zGU챈�
+!F���î;'
<�.�Yf
Q�J�Y���Y*�:4�a
W���UU�n�J��]�4�N#�u?��f#K
}�h]0h*u֏W���������}�F��'^M��܄�q��8���u�_�
�š3ԯ�;�

�]=t���}�4f-e��c�v��
�� ���"��
+���sV”R17J�$��]H���iF���6xݛL<�n� � ��R4����94R��W��
Y���92ʂ0�C�
,(��wX��4�g\�
h"Z:<^�Fv��
� l���&�Xk�1g�(+
ɫ��g�sUF,_��"�\t�=�P�x��v� ��iQ0wm��@`�Ȃ��<"1
fE��gٕo2�����gٕ�Y�m���/D�^Q �s��]��a*0�J�?����
�

�W�GW�&O�{
G#�C�
֒��Q�����ŗۉ��(b����* �nO���t�sZTZ\s���=L��{w)bu��M�r��u�3Q(�RV|�mF�i��
 �.���X���r\�;CQr_�ʜte!J�u�H��vm�����=�9+ˬ
+E�Y}�4�>vٯ���Z�sV�a��Ƅ�&����s�i��M,�p��z+`�-
�.@8�:ܯ��fvN���f��JKq�R�B)
P�EB�w�9��%_�w6�v�PKw� �4��LXomd�
2�9
[D.8n}@U�k&��+ bޝF�w�2w�1m��Pn^k��#f
�&XO7�b�m6 ��\|'���H�Yv�������
����j��&pWJU��&����Xc�CW?4�����CX
+#.8.�#SŒ@n�* 
+�oQ#�ToM�_������wp[��a���6�Z��`݂�p=ǣ�E�덱�C��]�#G`
�1��<I21f�(�gh7��>��Y�!�
��{l<��1yu�uye�
�k�"�$��2x�t�q��l9�E%�)1��Nާ�A��

�'b���M��9TQ&�?��c��)i]��3
+.�M+LQy���-1���a����h�j`V;���>�
�>��)mwG�i���3�q����*��F��^�0������RJc�wx��󑂀�$�	a˨}�e�=�/���N�O�򁦗��R���Ջ�ep�2+��V�v��3�T�||��Y�KIm(#6�m��)�Kd��
E��8���{6��d
v���lr�MZ��\›V at X!�|�,](hF���k���l�L����%O����� ��"�bB��d#�coub��XQ�m7HQ���x=?�
�5h=�!��@�`%�4�
e�iQr�$�d�����<�W����V�
F6q
��""��(�M��k�
+.$ˊ�,Oo�
YP�.�`0�@D�v�|��Z x�0�a=�p����ȘM��L^\IL% d��
�e�q��s
ˤ3!
��T�?Ᏼ?xvN�CI�԰(+�b�c%|0���f���/�Џ�vD�m.����1�{��Td�W
Qy-�,��%٦�S��3�و<�UF)�\
@W7/U��h"V>������{0)����d�V���;��*��`/C��kBr�@���� Q�/�{
��A���5���tG�2����Pcy�����M-*oH �b������
e"otq#�_�o.��
Bfy�Qͤ\$e�J&��H��7Q@c��5�7���u5��K6�<z�f,/�p�F��Ƙ<�� KJ/-&�����W8cP��j,�`
+
W�h*F�y�bKRG�����>b
������	7��~�M�0V-����`=�+u�A0k*2k8š58r:
��?6�}}ں�QBO�X�-�u_
fG߮��f�w30�Sm��^P��#1$&�4�U���J
++0o߸�d�BV�v\��TU�9Y��qm���qP��,�C��r�AW��3���b����y>� 8#�����Q�'�w]ٴ���
lKa3bXPo;Ə�~�����P�B����36���1sZ��L�
N��9�
>�6y���&��0�o$l�<���wW���uj5�uY�GqF��4�a��?�S�*sE�L+�E4uy���
����L�di�/�t$
slכP�|
+>z�m����4�
�{8�ϋ��H ��W9�F�
5�k`��T�+
դ��fE�w~y!aH�J��B6����zl_�� ���7���S�
5��2
`B3�
�3�w��e�T�kP��C��<�, ƺ��� “���YN��x�%��}F:I��(mņ�ț�J�-~h ��<���1�0eD�р��H�����
<�%���X­�|ޯ'/��C�7AP�@崼a5̚��a���>v�M^���kd�=�%*)���Uƪ`����6^�'���+�|��Y��z;`�������Ƹ
+
w���� e��r
~#BkiIw��!&@
�'Q��HBG��D'�*y��p
��X/���
��̥��v̌��*B�ً<�	�y���商
6Ji�^dL�
�Ȭ;O��[��Ц҅��l��]�E;7o��4�З#��ԋ
3a+�\��JR`
D|�g[��+[k���/Hc}�v�e�!v|�B��� �e"��n k	��}�͙2`�v>
+i��:��M;.�~�0�0��&�q�^���(Ft��� $�5A͙j:QB�%�SR-ľ/:���9�Wp���a�;[`6`�Z~w0��o��@۝3�N02X�ۺ	G�����M��<e��ʼnCwp\����v��޷h�b���p����㜄��*�ƅ[s�u�~D�:ް]��~�Yr�UE�-
\�rc(c�C��i
������P*�>f�<��"x�Vm�)O��&�gz,�1��
�
q��
D�;��f�{�2��̴��e�C��q3*�
�4EaNP"S����k���U��t�����k�v�,�-����틽��jb[ߝڮ��<�&��F�U*��&uC�

+��㷣]�x�i���U��)ݭ	mcw�@h���6z
*R�(��Y��>�e��0��l�DUϊ۫$���d��9E���1�'.5��
��
��R�Jh���3&�
+.&��ӂ��	_b�?��Z��dڒzG_�7�� ��}T�r�à��ו"qD�衺䈔�#qD�����I�2~�C��?8�M�x<Z8�?��s���z�w�⅏Y0#�����+�O�^m�.�ܙ	���Td>�b	vs�\ē�Ő�-�t<n[�J���t4�>��ش^ F�_Sp(�tN��� ��NRE�W%*8�n�>큛#�ڏ�D����N���_�W��>��0�m��ոӕ�ұ�S����!�∏�n��+d�ؤ��"����$��_���O�
+L��lib����g�	!H)�w^����n�W?δJA�}L���QO��r��쒚%����vD'5�&[��L�T�s9FZ���
F���\�D��B�
oش�z�G�0�ۘ���I�%
͸]Y�q�M��$Y�"��\xWLd
�DX���&���/�|>X�qзs�\R�,�J\���̤�VD��nD<���)i�4Z�\�?/��ˤ�������U�KSH�н��H�\��8� ����[�
��1��3�c{\(���z
e^�|������ޕ����l~ �Wgx�I������\�l[�Vw���O�C�H�o�3�
+�D�i�z{ ~��O��`��.�X	�
fio���-����
�[$>gL����4^����n�Y��4^
s �bl�-釴pǥ�	1��g6���U!��G��9m:U�l�grV։i���f�q�i1���Ͱ�[�� R�1�$��Yz������Q�ā8��xI��%�P+a��!Q�^���^]B�?~5��WV.��IJ�aYm@��,dA�Ȯa*B��-����y	�ߔ�pnu"T��%m��/,�o�mSe��}�U6�?y���P�@8��ds�:���[S�:����o'n�����P+����s�6	<���Œ�#Jry%�����!��_eg��+Z��G
)�
���GL���u���ͻ�U�<>��%u�w
+�
3m�%=kg�s�j��}����oW���� �w4�T�t����c��^��,c[<X����n��Ŵ� n���_�U�-��|p%���WD��mR[����Ti�+�����L�v)kzy#��?�Dwt��B���ihx
+endstream
+endobj
+1129 0 obj <<
+/Type /Page
+/Contents 1130 0 R
+/Resources 1128 0 R
+/MediaBox [0 0 612 792]
+/Parent 1134 0 R
+/Annots [ 1110 0 R 1125 0 R 1126 0 R 1127 0 R ]
+>> endobj
+1110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [487.523 663.778 502.246 675.733]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.357 331.162 179.08 343.117]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.8) >>
+>> endobj
+1126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.138 199.655 365.861 211.61]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.136 115.648 166.859 127.963]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+1131 0 obj <<
+/D [1129 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1133 0 obj <<
+/D [1129 0 R /XYZ 273.968 403.692 null]
+>> endobj
+1128 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F11 787 0 R /F10 1095 0 R /F16 729 0 R /F14 1050 0 R /F7 1094 0 R /F1 1099 0 R /F6 1031 0 R /F9 1096 0 R /F12 1132 0 R /F13 1100 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1140 0 obj <<
+/Length 5000      
+/Filter /FlateDecode
+>>
+stream
+x��\ݓ㶑��B����7�8{UNn�����%[��\��a,����㹿��	r Q����ːI���_7�w
���͟��|��4
�Y#���vQ�L-ra3#���f�Ӓ�ە(�Q˿���j_
�u��]�B.��
�zS��w����������7
zg

z�Y��b��������,��X<���
%m&�n����߰��""�3�I�������-R9z���
��x_
����x��a�P�
�o�Zӫ]��t+�e�vo�����u�.n�_�lD��yVH�ؓ�?uG|)�\��&���q4�ܝ

vu��_��OHN�M��j�mN��P���ӲX	�g����ēu�h���6+��j��N�|)�r۴�������G�k�_�穭w�+���x˗��~ݜ<��}��+P�;'�#i-r�=ힺc���౜	XJ�y�H��bYv	��̘��nb�c�a��ǫ�c
3���k�w�緗Z��=
�^d�� }9/�L�ڶi�H��/'b���//X�F+��s�A7 �D����t6<^y�na
+v
<{c
6x�VO �]����
̧�>�����|<����R����+2�s`ϴHѯ�	!)��"n$z�6���Q?��d6���ϊg�*�޿����D�%ы?3���Y�y�W<�:�I���
VB�,/�޷�����xS�{r����+7��Pb��V�e��nY�� �#�d^ň�{z�El�䜓�}|�9�Y�O�+�� ���UԍTG��'���'%��fS�⮋�����^"]_M
�?�R�FS
S����֒8�AUE�rd��lS��M
��u�i��g�e�V�uEڬm��D�f�'_d���Q��u$�0���QLI�X����
=;\�7��Xb<w�p����&*)����i��Oj��fu��5U�
��"'E��
ւ���!
Kt)�q�
+%NP 
C�rڝ֮����G� 	(�ò
+z%�Fk%�|�61�K�/
�2y*.��Ws���$5���-5%xG��
~X^�;���J�-0 �U�� @#rt�eO�7)K����b��
��]
rn�p �M�㻖~�]�?3�ꦷ�#Ǖ�
|�ԃ,�|"
�-�
z �dPL�N��*י��z�R�M�$F�r·��j͖��)�M��P
+��isN��vFp�� ������ު���K>��e���i1�\>��f��th���K��Q��/[�R/���h��"��-HܬO-�
ŽB��
�JD�
��Gs:lE=~�{��t��lf�lf�m��� lvT Ўl<u/�:'
+�$�G^��.0nCӄJ�� �>@-0�W��7�Ѐ��H�*zsV�����YG9H�>;ZF���m�L	��}E?��ia�D��p�8��x�x�Y�ӌ6�T&�	Aϑ����RP�11�=Օ
���(�!��(޾�-e1���ަ,f�ž�b��܄� l_�/$�w	arw��B�9�#U��r�L��(�k��ǀ���{��p+���� oL��S���;��ސ�@�ޕv6�v>{��{�Ƃ���rwW}hKx��]l���P�6��ȱ�BCP
��䆧x����;�
��'��m���cK	�.��K�`���T���r���!���AZo{��/G�-�@��
}��I��FU����S�گ��w���BDїT�� J��,���KU�l����>Q��G���[���	����
��7��Q��6w~���6��yw��I�YS>i�^�ã+V��>$B�J3����m#�}W���MZ�>Rk�gW�O�����Ƈ���������V�F��C�QB�ힾq��
L�r�zq���>�iui��`��ùFCo����`@v��8N|�[P����N�I7�W���
�W�ۻS�i�W�6
�ꗍ0�6�TgG��.�>zJG.���UPR���J��n�LuoR\s�~��^`��}9��6���#��:E}
o�v}pW��:�O20]�<#R���>ׁ�b�2,���\�>��z��'�w��hc�zs $7��\�Դ)[HBgT���1)-��oH
LXJ���U���IH.
��_`�
|RG4�e���i�
'�e�r�&z
��
)�J�����j
��Ka��!>�v�X~��qB��w [...]
+N�a�4��`
�R.�B�M
�$!�xcid�
�
����`�\������^�LWN_����8�;���[b
Lct�2��5
�)exfa��u��s�O5�2�K�2.�K��!��Y��]�?�;�T�)�1��H���/Ji������7bG�
N�0m2�Qp{!��"
=��t:_~�t��*�����}9�#J�Hc��9���*�/�%�����g�M�`�1N�͘��Y�~M�o��qJ���
͠�*@b� >�?�}�u�M9�ܞ7�:�}��!/O&=����e}x���o����0�,b�bpЧ�н��[�%�W�a 
g�x|�a��Ǧ�ϵ��;�l����λE/Q,d�����
%?�� �qma�G��n��_����2-�������<�h����6��b���;�˳��O��m����!
+H�f0���R��I_�|Y�(�
�]z�_! @������XbP���
+83寘p�$�xa21�}\0$"F{�Z��1���;��H�a/q_��;������@SC'@l���cM�W
�Y��>ǹݛ��	pq���v�6����dF�
��#��b��Yb@���,��ȱ����1As�x�㣨I�c<4GXI��)���h��Z�U�azb4�"NX'���׹h"`�7Yfm~Q���}�*�����ŵ��`�p�
��KN��7w��
�ǃ�@A-���cA=�d����J���X?u=6+*��m�>�������ؐ�9�\���+� ޳�:F��u��,��s.-_DY��(��
�:�O�����-

m�ez�+F�d�|9̜A�
+\�zu�{�qgC�T����ɋq��>�̄}�������@�Z���
>{�X��

h�]A�C,��^�Z�<T�Pأh;zؗ��
+�-�+�%p7��[�w#꾠�#+k�P���F)�Ӝn��
���s*���ݺٹ\
��/,�U_y,�^p_(u�V~��5%3砧�t�2��9�og�`�Yj�i:K͋��g���[��2���L�,=T��E�'�{�
� �5V�� FQ
*=.0���NpP~9�4��zN��k�
Mn�䖿tOC�`EA�`S��F��5�Ű�9��9=ո<H
I���rW�*G�8��!ř!��&O

2WEߟ�jqF|GT;*��Bl9_`=�p[�(�\�v�+�
�.��5��<�43j�
����x���o��.����Y��4�� �.�x�u�ê͛�h��djkα��]�x�Ҋ�
Q�k��h�Z�;�m�i�O�gAU��M��\F�D��	�Lj��
&5=_Q���kyܜ�J���4�3go
+�
��}��iz��/�.����xIJ�a!(����k:�tjf'eh_� �{c��7*�J�F���<��
���A����!��J?B���ݶ:�bG�y<?*�FZ�(
E'0G���}]��Q��1���g%�y1����o��=u�UI�;�_�4\�o�:�\���L^�'���
��;�kl��Օ%N"~y.�.��1;y2��Vm��c�Hxƹ��;������&�GZ�	�S��a��@��&�n�D� .�A�Ė��_��R�E���}8P’2fYƴ�VƄN'K���X�j�|b����~��ݰ9x{f>��3�1d#��WĿ��+j��<��34��Uf��F,�����S	��{
�a���
go�Sj��YD���e�e1DY�C$b��N�G=с}p	��y7

x�;U�X�
��j�5�?���dzڨ9%�-�4<m�
D��Zi���C`��
h��U��[zֿԝ>`!�GX��P�YH��

s��Z���
ۼTHVd��ɬ�@L�+���Im�.�uN/b)���v��
 ��'
�.�9)qCm�u��lH~����
�X��
�euz��=
�ʻ��� �.&������
�F֥����A�4�<��}I�=�C�8~员��ؾ䕑��M([��m�m�𹏸F
��>�h�zpIa��?�)�Bx:�Cʮ��ÝO�唽3K��+7H��MƓ*3V�6�q9��,�|��s9<!�(�g�$��$�3��1턇����4��Š:����%�b�]+�V_�9��G������:��L��
��
��+RN]8�
+�Kʱ�8��Z/�
�
$�([\�!����m�3u���0Q��J���B�ӟ>�q
� GE������0���%�

��-g��f`{�������a�F_���M��7���5�	�H�������
��
��M(qŶ�L����m�D�X�2%-t��wxxJ�)<w-;|�mvt�����B��l܋�'�
+ zn�E7�
�Q+�.*VxZ�@\��I���\�bҽ�n�N��# v&�h�J��<��n�r�yL�4�����P�O
?>�$Uz�\�]�)���T�Ī�\9;D)pc}M͓瓯�
�='�NE!.g�u.炌���N��ϸ��\�K�ۀ6J��^H��% ��
5#���SG���aV۹
�5Zw��ń�\3�(��`�*��\��J.��7#�
+�w�o�����
+endstream
+endobj
+1139 0 obj <<
+/Type /Page
+/Contents 1140 0 R
+/Resources 1138 0 R
+/MediaBox [0 0 612 792]
+/Parent 1134 0 R
+/Annots [ 1135 0 R 1136 0 R 1137 0 R ]
+>> endobj
+1135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [108.705 474.981 123.428 486.937]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+1136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [484.613 439.116 499.336 451.071]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+1137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.958 219.983 461.68 231.956]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+1141 0 obj <<
+/D [1139 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1142 0 obj <<
+/D [1139 0 R /XYZ 254.913 520.092 null]
+>> endobj
+1138 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F49 983 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R /F7 1094 0 R /F10 1095 0 R /F13 1100 0 R /F12 1132 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1149 0 obj <<
+/Length 4897      
+/Filter /FlateDecode
+>>
+stream
+x��[Y���q~�_�᧞�6�:p�Z��.M�VP�
3
�
�=

4qp8��ʫpu��,W�_���BUVV
_fք��M���՟߿��[o� �u�yܤq`7�΂ب�����V�fgR���-�M}(���������o7V'Ab
LFc���W_���+��F�� ��fz��c�9@Ϸ�00Y�y�q��5Y�����꯯B�0�S��R��X��3�$f~
+UB$��~�6�}CO�آ�
+ؙ1۶�nvj[��),�f�X
$Q��YF�	I�('�)��g���$�b�Pe��w7;��V!qv[ި��3%p�d#a�}s�0��|t� M��s)A*���
�#
NR]
+DF��$�i��P_��}qD;�� �Ew*
��7KU�7:���
+��-h����a
�
�����"���E�P�D��x�}r���D�?��W"=;���0�\�&��"J�
G��i�P/�:���l,b;[G[�a���K�>dX�S��Qb�7�H�75KK^��<����x�� 5�V����Y����	�2`��H�
1��,1)���Æb%Tx�!��f��N��J$����[rr
��:6m��j\�$_��q'�|:N��ͳ'{u�6c[]ѓd�f7���#�&�i6QC��Ց(��
��,
�������W�ݤv���k��>IY>�d�
T=�#?�
2�V��'�A����r\bIl�\#
���Uc�i��ˍ��o�(+Z��c
�(��� �����a�ffE��<���_��-?�� 
+y��dۡ2$�
����=�B&�Gz-�^<]а�i
+6����0iѯ���$�aC �
+��ox�
��B���3����mt���dg ���N���q��`ߖ{93�%Ygx"X��s�
T�Q=<��$
�y��>�9X�{,@^�z���>�G��
���d(	&g�'c�޳H�+���t9���NXҤ��r���bipcfBX��~`�F�CW��R�J����
Ӣ��]
��z�[	m��f9m2	6��l�(|dY[�
NN�y��	o
�6�f��\����1�o#00�#� �d`Q��w�qh��nzQ&`Uڥ2���-r���f�g�m�!D�
+
�:�eϿ���1�1��|ph�۪8 �����,�A��Z�;	_�}�
+�1�8>�L�Y��C��e���yH�@k�zw� | �.UȀ��Ш=�=�,N�q���JS�-��L�l:Ҝ1V�+
V���C^k;�����%�I�DS�|��R
7��91=M],?8�H�h�,�-
 �j at r�(�������?��dAdG
<^2)��3�K at 0�t��G��Q�-l86U��L]H���
.`7��
+<��ұ�+^�%`#��
��+Eq �'��L�1pp6�O^���ho�+���s�D�N���ɱO��)zE<��Fz��^A���)6�
r�JW�^񿣣	ɐ*��&�WR�m]ޗ�1߳b�,Go���&��Ǟl4��ݰ�]w
*
Q7u�!�Q�#||�.J���U�*���(S�։!��Ek��J�G4������g�*#����A9����x{�����&�`�w�Ȕ��R<�dn���b}pn�$8�-���m<���n�1
���]��1_�> ��8����d^�y���e��v$~���m	�j�ϵi_{\��d�'�I�N
D�<�}��r�\��^�C�`��"z5G C7r.5
S ^f��QJ!����l���+� h&oD�>�]t��,&f
+�}��(�
+�n8�$g�w�ɥ�b'
>���T�A���@|���W���]b�
+nƬxCO2/rW1e����#�x")��f�}��E��>����aව��݈R�֬�/���
!
+-��#0+Y���Yh慹�0�̿dC "��!����(.F����%��tL #k ��C,����/M{�x 5[��Zt\/P[�����߈�L2�'�80�eů��2�
�����B[3����)���/a�)a��–Ш'�l&PSj���sPy�>��xC����k�m�ő�����e�N�ն�d��{:_��j���KQ�K��Wx���@2�t� 8��/q�hNъ~��B6�c L���Xp�럔�` 1��H����O
�v
�a�*-Ku$DPV9DW2��I�pO@�	l���~��噴E?�5��7��{РT�:���k��8��E>&�㐶��G[�?�L��lWb������
�.�H�?�����w1�;3�H��$
t�BR��$����S�]��9�ʼn�
�u|��O(:��8zy:�iE�= �
�e��l���0
XYcc�U�(
B
3 ��D�>
�$���� ��
+�T����|�c�?�
��T���܀'���JA�����4�6�*4R 5>;K��4� Z�Pս(0o2�͞@`�x��ɛ 5m!9�����]#2#�W�^,�p�a�Rܑ���b	��O�<b8xf�t�B�Ƴ�C��ɋ� �N��o}�k�U�ЗcL3�X/�3��/o �җe�U���F|�+���R6K9�B�ݗ�5�y9�Ȋ��C��
s�IKMT�(ZAH��B0&`f	;��y�W�M*�869��.�m)��dûb5����n[�
x�
e ΀�'��1h%��;t�*ܭ��u�v^�M'1�	G7�_¾*Z
^���
_������yM9
�T:���1� �u��;�P�ܣ��э0.ޗ��D7a�����[�R�2̳�p��_��j������b�[o�u��8њ���
�F��@� �r8�)�dg��2Ө����2���x�v7��t
I{���C��bʠp<�Sp1+�����@�e��������#�ʠ'�=���d��ˉ�41N��\ ���W��� �F���'�ƻ ��z2:�­���+o
�B2���Y&;��_��y�dY�f��<���o�<}��g	K��g���:V���yp�X�_�f<�;:1��t���yf�3�z�͑�������%cT0�;�1��v�ω:�8���I�
�⢢"U~��
�S�Rf]9l�i1
@{�Hf��S�_B�d�����@�6���cN�b��H�̢7�%�d�p�M+G�}s
Ş<�Tk\��p;*�Y*%�
'إ�k�k�4ſ׵gv����Q�$�3�+W`
��'k��u���\7�k^��4���&~�7ɂ5/��&�~���{)���ҡm���
��]
������k��D�]���~6p���ma���᭬�W<d4_�9e���T�	�
+C�C����מ#0��x^{�n���w5�x�n	2a��L��Z�u��*%�Ʈ����D-oL\� ̒q��"��p�0�����k���ʨ�MtPL���9_�*����?~؉�P
+���w�x��{�Ac-̾��v�Tj�%�xgR��C�:e�Ʀ�$�.q#G�U�ҩ�
�G�!$��d��35
\�x-s�����=.��tٴ��:!.��e��XE�TwRxG���qYS�FQ{3![����I4E�/� &���g��/HE�^8w���n����M!�;̘i��e��=�웮�a8e��s�2Ӭb��y�s���_�󟌙 �x2���$|��.M
�#��1��"��d�\��N[(�cL
p��/pP^
G��]�WD�t��R�Ԇ�ՔvEB���h�}�`���C@��J�zu��d[�m�sI��k*��=�`��OP>�k~��/2�#�
Jb�P�����w=K���t�)����0~�
�B���+F'���P�=��>Szu
�#����s�״!l��#�qd܍#,t����n�Tq
����*��v��@ �
+����Q+�+r�Z��=!��
����;��u]����n�ZK��5�p��8;
G���������^,��ji�6�0&�s�?�k�s
�s�)�j����
j�l�e��D1Z��o�f�&���y��$Q�L��
+���Y�/H�1�1�i
��7�Xo�^�+�N���F�x�'��
s�a:�;���|Y��ǒ��8�/��L���?���
��v��g� �x�Y�۬�0<��1�5�mS��z������y)�S�
`���لG�R��80

_�lu/zZ��q.�
ꞷ�
ZN�[Cv��Ҏ�~�9�l I�z�� l
PqF�����Zpĵ[*ph�k��>��̯�bR���>��G:���y��6sO���~ �����Μ�F�����R����В�q! ��C)�J��K�)�M���i^Qdj��TC������N
+o
˥.OOS9Z;~��;���`I�P����-0����|~���#�z"[O�0����J2�Q�C�?��Ƿ};
\��迖zC��UC!1���;����~�
�7IDg�Cs*�|�%-�<�����g7�"Ǚtr�=��9r���%e���#f���~����rl:�h��'�7��V�@�D�n9�
��KC�+ͦb���v�Њ,]D=&�Ǣ*tc��P%�
/K��x��<"��2���ޥ3)�f��
+����m��@C0�|��ܖH�[����RnU����yKŧ)\��F��`]d�ЀZ]!�:�ĂO5e5`]
� ��V�q���XK!v<a
0r�+��m��8�ZU���ɻCc�w�$rw������%A4�S��X':0�n.'L���R��R�;2s�����%�|��k�a��/��M�wQ�N#�zR݂f�A{>ܝ$��V$w��
❾B�I
K�ٮ���2��
�p��CQʺ���d�w)�=ܗ���L�
�,��
yZRG<�f��/��F����Ѕ�斂
|y�ڂz��� ͢][Ȧ�
\aB�	I��ՆF&w����@�e���
�
�zώo�/�
P��d%0�
+endstream
+endobj
+1148 0 obj <<
+/Type /Page
+/Contents 1149 0 R
+/Resources 1147 0 R
+/MediaBox [0 0 612 792]
+/Parent 1134 0 R
+/Annots [ 1143 0 R 1144 0 R 1145 0 R 1146 0 R ]
+>> endobj
+1143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [313.465 591.14 320.439 599.553]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BCP:96) >>
+>> endobj
+1144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.775 390.882 365.497 402.837]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [165.188 226 172.162 234.413]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+1146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.672 49.651 252.394 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+1150 0 obj <<
+/D [1148 0 R /XYZ 86.4 726.045 null]
+>> endobj
+54 0 obj <<
+/D [1148 0 R /XYZ 86.4 431.272 null]
+>> endobj
+58 0 obj <<
+/D [1148 0 R /XYZ 86.4 102.91 null]
+>> endobj
+1147 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F8 741 0 R /F11 787 0 R /F13 1100 0 R /F7 1094 0 R /F10 1095 0 R /F16 729 0 R /F38 785 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1155 0 obj <<
+/Length 5373      
+/Filter /FlateDecode
+>>
+stream
+x��\��6r���|�Av�M�q�$�8w@��eb�fZ3#��5��^����b�j�t����8�$QŪ�
TquU\}��޿�����S����Up�\yU
+���������ߩ ���[5<ԏ���V��w:��?�����
���������w����FB�ŕL�Y���}|���������
Wb��+�K��nw��o�����N���\)��Fw��B��ʉ�뀵��V]��”�j5T+̚�BKw5��Ma
nL.�oa8�����;���#L�m�8nU�����O�=�/e���	+�Q�=
JB_��
�@w��	WdS�T��3�xXB�ǁ�`a����w�(�������ה�~���n���tTja�zfB�(�H�/3-H)��/ ɩu2�N��S����4k���YiN�[�]{���HK��u���� ŭ�Y^1N����	#�������
{
��Zn
��x/Zn:|�7�
6zB�,p��e��걝Bo�6�m;���aKj#>6|���f���u0Ȗz\#�tG�Ƕ�FA,�t�����v�,F�R�ԅ9�.�К�E���kitCKׇ
+兄�'��@�#�@�Gz�o҇r��A�Pw�7��Doe�P�dzۑ����n״
�������
o��P����4),������j.��:c�m��*�	�~�2����q����
Jhg�a]/�
����_B��f(�WfI�m�շ��tdc��������؂4�4�↑����v��9U�zD�P!�a��7�4�m����Hg�����
����R��C�5b��-==�8��y�5��@<4
�946�id���o6����o�[������n�i��=PLق�j�P2�����g��l����Y
��k��sm|�S$j�P^ ��LxGT@�m�oQ�3���_jm/Y�Ȗw��� ]���n��;*��r�k�4S��cޕ������ϦL_��i��47�����o��b��%'b��I&/P�z������ko���>���!=<6}��U�

�(=G�2�*5#-��R����[F�C�jE����
��*��i�Q=�u[��~�o�.Σ�u����!���л��IZ
��U�E�� ���~��laQ��-��.����f�
�-�JU�.x�5m���Q��d�
y���[*����+
h�#�A	�l����X�{*"��V�}�Z�/��N|
崡��<Fu��M&�/us��e^`e�EݯD
7�	hu4���9���$J�YMPV}?X2m��D
+?Լ�)���jq��;m�rЦH<b�}�M��P
[sP
�"?��5�E�oZn���,�
�c��ЋW���fx��
P;���FdV(��[B���c=<Pc[j��h̓�ݳ9���ޠC �;�ҡ�[��bI��3V�m%o�u\��X��]�EPk�D�U1�������a@�r��,����8��

u!K$	w����k��
r�Շ�W�[�/~S���T�3Dk�\�9��F�����D���D^�$DQ�% �011�&Fm��E�e�Ew	U�����8X��K���];U�mv
w�w���
�
z�0Q��d=�(x|<W����#d�.��
3���1y9m�,5Y�*<#�A��5�`�9I%�znNV�b�ܿɩ&I5�r�(&+?�3���`��%Xj��K���o;�rO.�~��>�����y��p����!6��
LU !
���
�Ʒ��7[Аh����P�2CS��]�}�ynY8l�
�+
��?kO�����e/�|n�e!�V/�;@���D��$�v}����>#,`<ڱ^?�O���� 6�+���X֌�5#�D�׺���]( 6�6�jn�&�m���f
q�!uǻ˶8
"9.
�4��b9"(
R���n���U�p��y��]MM���zJ�CU��V~,�5G Oi��
섃ڳ:��D�o�����~O 
�̈́q.�u��m�
+w)�}K}������ٸ��Ќ\�ɟ�� ��A�7�:Q��M 6e�zAkC�芍�v_
6J��a�Ŋ�#�ES��c��c��G��xפ�.�m]����/�w�dO��
��
+V�n at m���C3���Z����Ϣam�f�ݡ��Cr���dȂ�B�p�d�Q�aDZՊ[o��5�r���R��g5d����
�@�@�
E�UdWY�U�K�[���d�7��Y�o�)�+��O�k����?Ꙭ�W�����c�F��,:�}{��?�͒
$#E�����R�B�l�s
Ln���v-
��7�#4Q%��C]m��ӕ]4f�6���J(M���l1�ϕ�w�/��/��<���f��L��
~)��h4NJ�S��'���-��g�-������sL!J)�&M
E�#CQ��˺�簠Q
^e�fd`�-��n	�.)#
��{�.���v�w�[<�I����r����i�ϻ��W �G`E�a [i�O��
X,�:l��Da�f�
+@�s03Δ⏞�<�5?��f�uė:�q�p'a�G����H�y^R����G�S�姹*�܅�j\%�By��
��+ᄚL �30�b���2�36�
�

�� �$�H����
����ڵ-F���$6��䮆"�6���@�I!��;�'�+�
+�/���ǁ�6:��=���!�
���nG��-25�4�|O�^I3���Y��'��ND�����N�:<�0�m�M��/�~��
�������Ѳ�k��X	(�,^Έ���
j�ڤ���ݷ
P�
W�͜�L
+��(Lp�Ț�U���{V�L
�R κH
rz��yx�"݁J�� �D�o˗�o�bp�n_�9�n
����
+�a�Z+�e�KY��E63�Hb
��T���eX��@���EF���1�9��E�U�h?Ie�e�p���U���b�OM�O�Voɡ%��Pɝ7�R�A����Xi�y��%�SQ����d�ee� &o~���Tc
+�T �p�MGW��Rc�M�5�ʑl2�`����"��a)$ގ�'j���LM�9R7}����Eh��u��*��<.�V��%v�T,DX-mA�O���j[�kh�i��7'#
 
��PRZ%zk�S�ʮL�`�K��9��9�Xscsδ�.�B
�V��L~�9e�}��  ��H��K̢�%B����"|Q:}�`��8�mX}��N�"'75/�>��E�κ[
�͐܊ [�7��'r�@	����P�D��C�
�
��:�wXK}��;a
r���ua[K-7�����	�c.�[Ji%
�_�Y��������!���k��ټ<� Z*�dP��A3Q�&:ĤY
	
�������
C㔖5'�p�zg �w at 5�������
Q����r��5�m.ߔ?Q��uF�9��������^�t�D�ߠ�o�#O��E�G���`��l�r�n��v�h��ǻJ��ݵ}sSDԒ?�0�t�ܖY�
+��>��L�b�b��)��o�T0��āѳS1�zB�OU���
��U_��>����YQ��@'���

Vei^F��f��IV����uC̀��1��V+�]�o`.�W��
�1����)�2Gb�6�ݧ�D��^d�J��j����M���
�,

q�F� wt�0�O:$�t i���N)�^�6ߥp�5�@tw���h������%��u&m{"��ڗ���y�ZW�� Y�iPp���?ܬ��^Pp[��
+zJ�����`	UR��
dF�ԐaJu�zލ�L�T�_�brj��/s^�B2/q!�ˤ�,�4
�%�V���n�S>؝�2�}��%yF�e�}	
`�1�.���
�'p��]�S	z�z~9�]K�0`�z�
+˾Yhm�ۖ8���f����r�ݡ��ڦq�+k[^��e�
T,�ꌅ �
�2�ghE�΍�=-]��!�\�
�ِR��,
��R��vhOy^t����:��
㏴���1��Pݤ���T6���g�����BK����N�Z~}Y
oW�9�R�2�� ��^���h�q���1�r���A�^�ba�}��c+��9Ǐ���].`����q�����cZY�p��ے'7�߂��dw_��~}��[s����YWʌ!�+
�5K��3�d��998�Ʒ��E֯
�ӆ�b��{�s�U^��ZOS�Vt+(t-��8�j����z�Y7ΪͿ��W�\j���ҹ��>��t@�ļ'vs�������mn6A�if�Og:~���.ځ�SK����<V1�6����v<L��!��М\@��<���sj:LN$��l	P�
�����9RIggɼyJ��>�k!�/��
o�j`�f#o�|G?_�M
��֛L:0TD��q�	M�� �c�����X�@2X���"u�J�
��|
.�
P
���a�њB�
x�M7���n����3�7l�;7K�/�\��C]c�~j⩫�m`��[~�����D��s����
�n`��n)ލ��
P)� [...]
��S#=�髊#A)Y�?���A�R�&�t0;��:{�U1���:�0
	�`#��G*
g��N6�bԍ]������3R�Ξ�B���%�^���tXk�n(��IWz�D�i鞏�0j�~��� �^f��|C���I�:Ш��Tz$��|��I���y������
�W���eeTjJP
<�h�6`G�|�R����r�ԩnlU��
�`v�á�v��*|��㾟���N�����
��q<;�p���v���?��DD|��L�~?�ߵh<�7{r6R<��z�\z谥�o��^��
E���cib�4�X��P��U<֤);^��M+����
W�c��O��*���}Ç/�{~c�e]g�}�y^�v���/8��'L��a-���H24��&
������1�i��ȿ8�73<�G#���G���?9э�q������!j�dϝ
*��M������KM-�/���`u��MN��w (N�: ��
�o�q���4��t
Q��I���Y��=������uZ�ΰ�"�.��4�*_B�|t��������j���٧�o�y�)��駡�h*�lJ
�~�^�K��Q���޿�_Aa.
+endstream
+endobj
+1154 0 obj <<
+/Type /Page
+/Contents 1155 0 R
+/Resources 1153 0 R
+/MediaBox [0 0 612 792]
+/Parent 1134 0 R
+/Annots [ 1151 0 R 1152 0 R ]
+>> endobj
+1151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [509.106 582.583 521.062 590.996]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HeSh:80) >>
+>> endobj
+1152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.575 82.694 180.298 94.649]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.6) >>
+>> endobj
+1156 0 obj <<
+/D [1154 0 R /XYZ 86.4 726.045 null]
+>> endobj
+62 0 obj <<
+/D [1154 0 R /XYZ 86.4 135.399 null]
+>> endobj
+1157 0 obj <<
+/D [1154 0 R /XYZ 238.843 70.186 null]
+>> endobj
+1153 0 obj <<
+/Font << /F36 740 0 R /F11 787 0 R /F10 1095 0 R /F8 741 0 R /F14 1050 0 R /F16 729 0 R /F7 1094 0 R /F13 1100 0 R /F38 785 0 R /F1 1099 0 R /F6 1031 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1177 0 obj <<
+/Length 4290      
+/Filter /FlateDecode
+>>
+stream
+x��k�����
+7_�EΊ��C���%M��hs@
$i����jek#����������\�O�Hj8
�{���j���:��۳O�Tv�'��v��r�l�W������n��Z&�|��Zy��u�ޞ+�.�
v填��ת��;
���P�w]՝od&�X
u���o�޼=��L���J��L�]m�g?���v0��*MT�V��n��*O$<ի��v�NwK�m.�Y���uy�ѩ^��T�r
�K�����M�[
�摾�_��6��c_"�|)�d7�T�Z
��V�y�����?�&�@Q��LXӟ�P�ɳ	
��!]�h�����c��M[]Up
�NxQ�{�������b�;k��?DV��Ħ9<�$7����
l���#5}Q
J���H�;���w��߾-��Cտ�c�+i/���X��F�Wb��Ǻ�sJ(	��d��L

B�;B׍H��<p9Y�T
�?��o�1\�/�t��

�^=\�k8�͈@v�����-�;V>�T DPo"�tb��q�)H�5
a!��q�|�yyA��I�)���)tnxQ#���j���^f.�~b[K�;��i}e��)�2"e��B%�;sVΫ�o@�7*S &E�O(0(|8ƿ�R~9�61v]�%3�_��c�b ���r,vm�[}_�װ>���EёL�Z ��a��&�� �E�A""Ǻ���$ր��
{���~M}wh�*	���-;�A
+��6jژ�(�8��
тR��m�Z�M�8�
+��T6?�[� ����8�����]s�Ox��K�Ň���Ǯl��&���?
+�X��sW�A��s��ӓ6��S�*]
+l8УڝK����%��&CV����b����
\��	���S;�K�����[�uF&^�I����?��Hc�%����_D�(�tl_��Qn]��h�y�[`5	�p@
h.���+��ն��hy�z.����绰��`�3����
rWvU����7y���ҰCu�ң���a<=E���^��5K-��Vu�O-*��{�v�M�m.*<9�����̆���a�������/q�Ȑ�.�FvR���@�|�&���i��H`	L��9pB�$0ԁ�(���6	�N�f�X9��ދ�	{�D�� ��5�l���?PW��,b�
��A�<WV�\�%�x�]��n�ˆnW���
�`�p�.���
Ž/^��y�
Vv�ʔ��uR�I4%�k�D���1?�@�u�����ln�M#xpVF�$J���g��h0A]���߶$k
����hN��������
+�v�M
+�D-��x5��c�
�h��
ɀ�GľL��ߌ���E3�����*=	�W>D'H�b��
)���^�H
��o'���p�1
+�8<�8�#}Q,��yp0�t@Ұ�	v���d��i[
�?1�@�0�$ͳ�z'�SA�������
�� ��W>�����G��;~Ǩ�<����"�x�`�b�X�CL#fZ�&k
+R*j�O}�^��:�`1�6��/
�'!ēP3�&f��g
��D:�2��8���t�:��ID�� �J
 ���F����"(qN:,�e��}�d�
������J)���o��
�%��
w
��P�qJ�E���2N}��4��i��$t� �b�(!_��X�� 9��Ι/iCl�#q�����I
���Ki�2ɥ����|R�(��y�?#�R`( 8(<$G�l.7�X~ ����e6:G��U ��*�X�����Y�G�٪\�G�
+�"�V��Sgf�bLHw�!j8�j�\�#̹Q��N=�v��6�P�y����w՞c��
�&
����~\Y;��T>�W�=eSV��
6�ɗ6�Ymfi
	a
h+w> ���·�1)|�}F��47����f� "���'����� L�m�Q��]�\B
��^W�m��ۢ�#K�����
�F(���}����1��\`4��rq>˱<��e[ K�\(�Θ������Y�W�cv	�
�[h�$)�X?�GR�^��a�^s�^�L}ff�zA'
����HI}8鯝�ԛjK��
+i�y����-�k�
(���_w�Jq=���R��H��
t���o�t�������ς�w�_`>���
�Jt��%�ݫXP�_���
+���aE�G�z��G�q
�}��0��:�$�@�.(=/[d1"�.
%��*�}Qxnl����%��}#UF��R at vܗ��hD��.�V�`�C�����
+ CC��>���Q��ϴpRe��/k_
��6��Y �D��Y=�}4��
�zh�
�
+J� ���}d#Lj�^��8��rtZ
���Cf
+H���@|9R�w��'�4/&�)��
����@景u�Pu Sm�e��Լ�4~Jat�y�%�x,�
V>�=sO�܅u��ifT�
��VsJ�q�DǢ7p���`�'�j�]H
LJM��E{�uǾ
+L
�����P�l<8���p�|���铐IIJ
ԯ�'�6sР�stƖ��)8N�E$b�k�A3�E2��L�?33DG
f�N����p3f�����l!�<ԛh�
3�1��	�����	�7͵B�n��DMƜF��i�.�0f���]�Ye��#��m�eD�݊�����	���UK`Q��/?�3��&
�8�~
��XLf��%((�B
+����og�˦��>�]�����g�-��}*�f"Éa�
|�S�J�܍��6p�|[Բa��..�r��#��
�YX��v�#x�\7m?��
#5x�D�<:�2̗�,
+z��Iga�YE1�Y�!�Jf l�S�
����	"��r�q<�z@�
%��!*�04��T/h�r
�yI�y�@�lJ�{��1��[�-�@n-�'�[���
+���2� �X'<�Fi�y�	�XW�<�$�����(!!���ϼ|�.�X�R���ddg&(��8����Qo��%����T�s�Pi@��@���=(��e`�
�	�rv[4AP'؄�^G��<�1L�?��c�x1�
|	<��zU?[�f&����+�^�1u'?��k����BJ��k��z��i�������APM��App
9�-B����O�w�7ؖ
�U�
�JM�M��0�蓰�9���\��LѾ��l1
��&�\Xܞ�q8p�;�jl�}�
y����!9e�mѶ���9���'�P���IS
}p�X�m(迠[�
+e��-\Ƙ����u�#	�xLD��Ә�(o�� <52h��v�:V��e����w�`R�}�+X:r4�����@�?'��>"�.Iӹ`w���d
'nJ�ń,�آ+}��6�J/F!K�T�Ⱦ�Ʌd#��3��$�2R�wb��p�]�(���'f5�̪
�`r�1n�ZD4I�i�^G�'��!.�;�ލ�A-�L |�H���;=rG�xM�
�b�\�S*u<@P�r�~z��M��b��
婍˖����:�%&�����	�a20D
�[�C�� 콅�D���t;v
m�x����N���/ve��]x��9�\�8��e��rN�ې���/|�ߢ%�߷xabM{���͹P �ܕ㳝~��[/p40�' ނ5�;#�L@� O}�=�Rߤ���%(IB�J'�Pױ�>4�
�
)���e(�v��M�#��m��$m�.&)��l����t�KI�Os����FJp�O���.R3��2���|Z
�I�;
�
�L���3��λ�i�xϷX�E`LfdrP<�teM�N���x8��B��3Sw�٩��7����Jahh���Y
-�W���+�U#�z'���
�\S9�T/�O�a�mC�\�/R)<�V����H�nT_�&���PX��p
m�N%2
|��}ގ7�]����ߕ[\�����c��|�Ӝ
+���xy����Q�
�D2x��ˡ��:b�A
2�Ȉ#N-�Y�C�P at C

��y��v��"
3h0��EY�U����b��-q��S�o�����٧57aoC��[hM���>�Zr
+*��4|Hj*���R��	
���|
�}�G�^�����t����T��
L^@���;�ڕݶ�F�)P���_
�ϒ!
4�5
,�EE��<⡔
!���T
�!�]���0-�y3�#�f�L�@��2�*��f
�?�,�EcV�O��_юw�X%���4�3eP~���rl������$�Md��
+Ac
QϺ�>��?Y�y̓��YG�
!y1�6-�*7���4���ް�ı��7d���lm�}����qI
+endstream
+endobj
+1176 0 obj <<
+/Type /Page
+/Contents 1177 0 R
+/Resources 1175 0 R
+/MediaBox [0 0 612 792]
+/Parent 1134 0 R
+/Annots [ 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R ]
+>> endobj
+1159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 598.471 104 610.426]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.505 598.471 137.209 610.426]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.10) >>
+>> endobj
+1161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 562.605 108.982 574.56]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.10) >>
+>> endobj
+1162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.027 550.65 261.731 562.605]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.10) >>
+>> endobj
+1163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.221 550.65 471.944 562.605]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [325.856 538.695 340.578 550.65]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.84 377.796 503.562 389.752]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.907 227.226 432.63 239.181]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.277 203.316 140 215.271]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.751 203.316 188.455 215.271]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [337.383 155.495 352.105 167.45]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1178 0 obj <<
+/D [1176 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1179 0 obj <<
+/D [1176 0 R /XYZ 244.542 670.477 null]
+>> endobj
+66 0 obj <<
+/D [1176 0 R /XYZ 86.4 431.055 null]
+>> endobj
+1180 0 obj <<
+/D [1176 0 R /XYZ 86.4 280.593 null]
+>> endobj
+70 0 obj <<
+/D [1176 0 R /XYZ 86.4 94.94 null]
+>> endobj
+1175 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F11 787 0 R /F7 1094 0 R /F16 729 0 R /F10 1095 0 R /F1 1099 0 R /F14 1050 0 R /F13 1100 0 R /F38 785 0 R /F49 983 0 R /F9 1096 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1196 0 obj <<
+/Length 4349      
+/Filter /FlateDecode
+>>
+stream
+x��;k�㶑��W�r_4�M<H�v�꒳��J���֛G�̰"�c����ק� A
+zx��<�H$ �F���.
�⛛_��|�Z�")r�/�
6O���"ɕX�mo�B߮��^��쟪]���r{�RV-���w��j�
�n�ݽ�������
�g����zw��]��@ϛE���.>�q��VE"�i����7)C��P
+
@)R�(�y!ar��T���׺>rO��ח��U{��e�?�ە�b�U=6�{���6��dI�����=|��e�Tw�T>?�M���v�D-o$DG��x��on�b.��{�&���}�����l����Վ��O����2����A�zhc��z��پ��fYmx+�
C��וo�I+F�J�����z]=����
+ 
�p�U-�
6��zsP�sߗ�G����w
]q����Ǚ>R���,[�m����eO�Ç����W�<�徇�߸M�
~F���E�
+6u[��-��2b���z��m��/�	��|�C_��H �ï�z���m��-Q�����BP�T����m���e}���?�
+P�R&1f ێ���<)��8D'��$��4�>&~�(a���veR��նj�O�
�(�%��,l�%H�������/RF4��(u�
��{�����y�
>t8����s�s�����ôŸ@W�*�t�д;�o\��F(�Ꭰ�N	��7�,+��a5�򋤔�(�}
���w��:~#�U��-��m��n`l�z �4���_W���#���~�P�Vw,�W�$�
L���-�
u�e�Ah���N��T�@ؖ�U�����������ȶYRHuم�|����
e\
�g�!z@�~�U]�z]v H��fPx	�L�|}k��i��� �v<出�Ev�e�U�@q��
!� �X̐���V[غ'y��ѥb��^�z���S���8�#���Wi�	��D���5b�CO�Z�ɺ�wf��eS����ަb5�b��m
#�XVR�S����!ʵ\��g��HO�Hp2gz�y�����;�q�D"tL�e���|��ȇ�0�ր*:�ر��,�ҹ�K��8�K�M�{(�a=�
��# ��I����G]�
P�1�zB]оkZ�νwl����&C��`$��0p
,���s�
�+Խ�S�J��C�쨹�v�\wa;	
���W_w��$$�1"t���m��M���g�|ł����سL�W��PHG	���~GS� �����NfV���\)�T��
+���%�f�;l�r����HJ���zSS.��"P�:1 #kS�IJٌ���ecƦJ�n¯��K�R
�m�	4v5)
�+��LYC��NH4@�N��}Lq����cM
k@��p`�r����	3
g"3¯��!�F%s=�����l�+W'�˶� /�!&%mhX����B��Ǿ�o��/�
l�U�鼩�
+�M

��D��I&,
�SD=�P���7
�&��$V
:��z���TbGm�1j at Z�'��x�,Ѡ��1�7Ц_�_J���� �G��L�g���N`�`
�6����q�KKf�%���Q�Pen���_N��}A�1�]�M���>;���~b�c�'p6~���s0��H��	��Ep����j@�4ؑ?<x���	{ȵ�y�
u��
�m�/�۱ȫ�}�X���Г�ѡ�B
e7(
�����
Sy7��< u ��b�BZ4����v/�ܖ���I�Hl��,�jhp�[�4q�Dہ}ߞ�]	n�u�b�bB�f2���DV
O�ʓ���0I����¡�f�Dw@�
����4��G ��OE#���*��[W�n�)D̽�� �wH��RE�<��h- �K���D��_���B0�qUP��
+(2T?�J$R��[�F��3�Q��U�+�gNh��J�H��D�=��x�2��
 U�Ϝג��a�L�V�}#���W��+����Y
Ӫ���t�?�6�͂Go��Ls9չ"��q�
��E�JR�_������,\#�A���L��D;����XⱩ��f�ڐ:m���O�
�����^��d9����H��eQ�b�9W`�
fb�ljt�3����Q
+
��)P%PI
U1_c�Ĩ.ę��@�����:�T
頺��q��s�����q��p��6sŸ������)�Lz˓�(�
�F�W��IN ��z��1&
�pS���lN|-�-;m�S3AA��9���� N�Zv2xlmIe��B)Tnb���HO�c����y�:!'�_i1Qv� c��M���C_G�����v>F����|V�4b {*��'�I�`��z���B�@��znO�i	�"2�D�$K��r)�w-���O<��c!F
B)������
z|8�۞8̹p�0d�{��,���n�|
�ȕ�
0Ӄ�Y�>W��X4�g�A+i
ぼ]��p��}�(�
n��p\������!��w��.#6S8�(�l9�_�e���G��(��6-'����
e,��
+cZ
y�mɖ�0
�ᣴ�5I��2�S	G=:���b�JŤ
�o!
��q�\�K�s�����yKx-0�Nl�ؾK�Ro�t9K|�&qT^�o��Ch �.%���C�ƭ�SD��M=$ ����<
�'��Y^�Q�Xb�ܙ�L�ηr?�b�5�1R�id��D2������7�zݶ��#T�i�0Ok�]_o�L��-J� 
�i��JB�4�|���}�����&�{�nY$V
�c^&R8���F��Ȏ*;�7��	�AD՛�6�D�L��� ����Eb�I�8#t\|$� ��	�6�@����N����P������D�
��v�+C�c�!	�c�����FEK���,H.�s���Y��4
�k��X񞎲�/(pB9MiE3
&۱�	_�\���GjdR�A@ٌ�
?�
��	YwOń,�x�
+Ɯ�9f_3��T�
����H��8
o#���p|�
s<�5i�e )xTfv�]�^R���	�}�Xa1G���{&4"�cv�t@<���I?e޽L�k����qNBe��F�;c��]�3{�?{>�t�X^�_�
�@�%i���8< (
��h�Т;�I֥=g\��<L2�}�Y1]�|�3�$
c)��zɌ1cst'N��W�q�+�ٜxNgC�	8�BB�
V	 �c�Lg�U_�W���U~2z-���'�O�KD��b��z�j�юg�L��
�aE�Bh�e>м�d�$����.=j

#�Kk���A������1:��ɤQD�|F��� \t���0#��8>��B/I%:���72Y
+�"9�ZLL�r	�p�/��+��.2��p���q[�p�
_\���痦Q����Qʆ�u�c7�?�i��)�����_�_*Z{�(?2�B"��(530#�JL�"�H�D>
!��<BY�X��]��\��	��V\���M���-�.�L%��.
8�0 t5;�zp�ܹ����T6Cm�v��\1v�C���L_�
��2˧W�h
kE!�u����ͧY�׷+�����Lƪ�WQj��S�
O��i���r+��\U-�z�HD7.]���Ɵc%�|��RtL���*�i��J8����d=���)�����F
5b8���R03�Y���F8�!����!���Tv�uQ��t����4γf�$R��z�I����x,�sē�ΗA�
+�Y�eV
-����O����� ���	��t~��W{
+>�.|��nN����wU��6�
P|F�
+Ns�SE�,@��E ���G���P�S*�5C�,L��9`tI
�m?n�Λ{g�EQ� �j�����K,�P�p��]f*̘�SK`cɅ��qW����
������k
+d0�A7�"����j[�p�[ʥ��+��V�9�l7�*�S�3J��Z����W�����č�1P�(�/�R�#O��#
x���<S��Ý]���
>���hy�@hxS����O�FL��	гX
���0�j�9;�|��uOUHJ�l�����>-�>p�I��m�Q:�78�S
�@p6{n�o_�A�
�g�:� �ۀ5.LJ�x	xX�)��w�v�����������C淾قY�_�;S�NQyx��J�5$�\�׏��*u�݊��o
�J�a$�v��.&�z��
�n�R=��j["Gh���UD�K�ˬ�|�	Ļ
M��h=L�xy�
_�C����d���Q���J����-��Z1���U*�\��^��eo����}�=5
s���k�z�1N�t��*o at h���}!Dh:�
+4%,;Lnn�,_
�p�Yl�m��Ώ����?:��+��Tv��1d�
-8My����n���M
+endstream
+endobj
+1195 0 obj <<
+/Type /Page
+/Contents 1196 0 R
+/Resources 1194 0 R
+/MediaBox [0 0 612 792]
+/Parent 1134 0 R
+/Annots [ 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R ]
+>> endobj
+1170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [264.976 690.179 276.931 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CaSt:85) >>
+>> endobj
+1171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.53 687.689 399.253 699.644]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.468 663.778 220.172 675.733]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.09 639.868 182.812 651.823]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [141.216 606.493 153.171 614.906]
+/Subtype /Link
+/A << /S /GoTo /D (cite.LPZ:99) >>
+>> endobj
+1181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [284.845 562.938 296.8 571.351]
+/Subtype /Link
+/A << /S /GoTo /D (cite.MaPe:97) >>
+>> endobj
+1182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.071 548.493 227.794 560.448]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1183 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.664 548.493 379.368 560.448]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.094 524.582 330.817 536.537]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.391 398.426 214.114 410.741]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.234 373.547 219.938 385.503]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.13) >>
+>> endobj
+1187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [272.425 348.309 292.129 362.229]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.13) >>
+>> endobj
+1188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [269.62 331.155 281.575 339.568]
+/Subtype /Link
+/A << /S /GoTo /D (cite.FTB:97) >>
+>> endobj
+1189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.184 316.709 128.907 328.664]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+1190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.311 316.709 334.033 328.664]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.788 304.754 417.492 316.709]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.579 188.755 268.301 200.71]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [278.126 119.719 297.83 131.674]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.14) >>
+>> endobj
+1197 0 obj <<
+/D [1195 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1198 0 obj <<
+/D [1195 0 R /XYZ 247.6 518.808 null]
+>> endobj
+1199 0 obj <<
+/D [1195 0 R /XYZ 500.14 248.869 null]
+>> endobj
+74 0 obj <<
+/D [1195 0 R /XYZ 86.4 106.895 null]
+>> endobj
+1194 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F49 983 0 R /F8 741 0 R /F11 787 0 R /F10 1095 0 R /F16 729 0 R /F7 1094 0 R /F1 1099 0 R /F9 1096 0 R /F13 1100 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1217 0 obj <<
+/Length 4927      
+/Filter /FlateDecode
+>>
+stream
+x��\Y�㸑~�_�7��-�����
�c�}Dl8�n��
�Ī⌎Q���_�L$x�uT�{���D� �D
_&�'��|���߽���k�'.s��ɛ��ՙ��2-���b�v�3u;VL_�:5�l�n���庮vՇj�ş�PN�u��TW���ؔ��wo�t�����nt�OXӑʬԓ����|��'��pv���&R����r�כ������qk�2f4���Cy;�F���|Wm�t�����}�Y�w��n�,��z^�t��⅚�fڙr�3ŧn�bT��e�f��u�]�mm������{�ep���9�˜
+s��a� ��^�a���o^3�#��Y�4��C�|�3g��2��ˤ�T��J}���I��S�\R��NC������t�i
�o�*S�
ا�>U�%o��K��3#�9l at fβ��ۑlS�1A�匟���3}��ng6ϧ�`I��wU�
+.-�X��?�%�ST=1�e��f�?��MK���j&9��	����|�zA�����q�b+��qϴ��%]�Vl֞MGX�)�Y�_ʃ:˥�ә��Q��P7��F
+ؠ%Eq�
;1� �����Ȍ�z�U
+���������1�#�:��,ݨ�Ş�X�31�H�^!;���C�-S�մ/"h��LM�N�-i]���v��{����&3�C����;4�{W��e�����Ԏ��6M�c������z�J��vQ�9��4]�:�ߓt���ŲZ���]�‹��b� ����[������
4`6��OTy����q��I5,��I�~��j��Q.��,������rWn�eh��
��͸j�����WД�tW����zQ̓Y�r���x�m(�.�-�6OW�=�����+%�
�O�8��M5/�7��ր�~x�C��CZPݖ=�����6��R�凖~�C�
+�X��%��m�¶�f�M�<O�s��
�!��m����b=��.���f��6&�d`�a�y��y<��[
��BNzu>��uj*
�	/��h2�ϴ(��'�'o��X��"
�}��_
 �T3��o�I�uj����tڂ�P[@'$�̂��8�[���Q�#�L}4�,t�-d
�J]��S�P<������pcf%G�1�ca�/���d�,�
/�
��%VyW�XĿ>;p(�A�>� P���2�
�l
t�&+&� P
+=ӅeD?��ŋ@���a`��?x{�͐������y`
z�	M2���)v��ȼD
���ND�\�������B��K��
�
��~�T0'/d0o��'\�koW�G��ȏ�f-�T�[�Q%
�I��yK����8Ћ����^�gQ���f�ҢY����\�ڥ�)<"<Ȩc *��{=���1rD���e��0����[ͱu������hl��}�ـ�-
+� ��=��b�(i���e\�6�z_ڜ�� �f,�� �C c5��eC5�,#���m	c�7����>�����[��Q��0T�?���j��:�m(Z��a�����ӓ���1^q+�U�P
�+��v S!U4��9Q�i��mVE���LQ�����,?�`��T�x�e��UԨ_ � �I ����I�}
�?"j�-����
��3@�h
j'!79���
�᠄[Kf��A%r�����k��۵���<ƕB�cMEwX���
+)�j��'��0[�B��G��q�>=��$`��q�����;��{U���h(�.+<<X֯�3A���=N����۱�SxU��K��<�����5,޼�Лpj�q�X���f���<,iE
�����[���
+*=�X"1�'`�0
+ĴW��1��X�}��[�(e[*��
�
���fC
+K�
�J��ʠҟ��m�
�*��\f&?G�K��.���oO�K*�I�%��q`� V��&]'|�
�j�ςP���=#$E�*$���<�,���'��cﰅqZ�hZ��P�ѐ�`���U�B�[@!z��vf���Q�P'w�B=^P[�5���B�X��\ݱ���ꑹ
���k���L�x�wnȗ�~?��5�K�P�Dqm����E	�{��My&�-������$�3�1�-����%�~�
< 60^���5F
+"iv��!�C��1V d�>[˗z�*S!��Z�朏�5�0͗�kv>_�_9��juW�n����Z�U៌�#�9�R��9�k{��𛷨�q�&3������O���o���=�'�ϦM-��Af5yha�%��(��
��;�) ����Q�I�6��+~� � �M�|�ٷ��
�	?�����l[.=t	��Q,�nwe����
+hɛ8�cS�fŒﰋo���r���ұ���n�"S���6�b0���W�
�5
��L�V��h�Sc)�b�A�H�7�˶п%Y���4�
��!�"��)��R�����}U
�B
B)�(?�ځ.r
b*��?5�G�
�
8�B
�s�2�_
9�AxXs�%�{�a
+i
+#�Vp:.	��{�Cw���`��5��
�#�-,�\�M( 8H}��aY���
�
+#
�>f(:9�ϳ����ni��eR��b/ћ]��u�ɠ���z^P�䵍�Eq��%%��-:j���~��+���JPB�L�1�
���q��K�M�Ш"ݱ�`4�(���t�������P�;x��)H
+-(%��Vȫ��K��)�
$OQ���A�W��u[2�B¼iqZ�I�~t��#���YX>�F����3
+������毓_$\_��<��נc�Iр�Lv�_�
��%K����ND4���21��ip5�1�uJ�q�^�&�J_�4<E��X]�
���,sp�v�9
S"e�b��vu���F��
vV#�
����Ȁ��X�}Q���b��<K�
�Z�������؜q at y\�s�z�ʻY={�}��
u��
���aJ�$x�fb3��(3Ih���T`K� sp�0�OzT�`��� �% >
��
B
���+��@��Yj�9IbZ�N�c�q�'�1s��

�R��0�3�SK�X�
Q�c���1�g at 9��h��9�*�i�z��)�a�x��Kt�u!�g\�زE�x��}�:ꫭ�I��@gP����34��q�
Z wD:�zJ7E/���	��T�C>u}����՘z\fJ;
��Gn���6�
˂�����R����\���݀��
��C�� ��f7f�
ۦ0�X�&��cO��A�DG�8�
��~L9��D ��>r�H�귅��p���J$�&���`XE���&t� t�}�,�jzL��4;�����@|��jB��֛�����[���*$o���I�⒀�q�]��!g������MQIyO�?y�Ȉ� d�hQB�τᨇm
J�,źZ��=F&wź���fW�&�>1��ܸS�8P5�r�:��f^��m�s=��\��x�<#
)���02�C�=���H��#_�1s.�%7g��8�Du�O�{m[�Lw�ݓg�{��>��nB�����6L/3]
8M��!�P'�LI8E�Q7�eZ��W�
��������gGa��q�/�ڗ�V�r��W�o=���!��g-�g��aH�e��
����
Y��d���L����1b�	(>Zo�BxU��WE��Px��c�c3�i�o0��NW�zLd<:u�7�gh�qO�qv�Y�>�ȓn����C���7�7f�R���}�QΦŢx�Ip��wg�|Z [...]
�� qg�fѩ�1�0W�E��~�5M����!q��,G�PRW�_��}NU���i'���񮟱�%77li
��
��L
�t#��$���rb��Ƨ�������5Q#�c����m��H��l'YQ��Vwɬ@��}q�)ҋ��qj�b��,��#�Y���	�\���|�tI����W
���>5r%q_H���y\>��m2��
�}��
�� �	f#�����~4���l�oh� 	@l3��`ry��U���͏��qd�S�no����ȾN%s5���
fs=Uu�5۷ �ِ=����~'�v~��y���`*
�!�M�4��
4qOOh�
6�P���FS$9 Mc��%��g�W�����{;�
��v
݂C�I�H-ڊ�S�7�X40���,>	>Դ3E�2ki~$)w��
u�K� ���iN"���q��6T���
n�
�^�.��_���B3�v��n�jK�,��
վ�����1xZ�
�������I�P3
�6�'������h�Y﷖%�TK���y��v��]W���¤QK�\�'2ǻ<
͒y��
W&���oɜ_�~�.�mK�{
~��o� �q�wN9uA���)xl��D�CZ?n]�/�
D��}��
��=��d0-~�%`+v:!X�ߎ��
�@���3n	�6p���n$����|�t`g����A f"<3�~*
�\3�����3��
@:ڂs�}2ݪi��~9��d�~������
�˟-�~�����p��
���~)h6�8�-?�:�a����
Ud�0wDa�ln�(ͮ3�����QU��
g{ n��^�n]a��ssq
8B���V���4�߶�s

?xW�?K7�L����p<g���qL�3|�`6{q
<�XOs�?
IHGu�n��h?���f��5:�nJ�ى˔��?mFp�b\vS8����eaNj��8_��
�ӕщbn��ڃ������Ƅ�
�5�Y&�!� �����quu��"$F8����#4�}��>W}|�J��uy���D�#F���f��n�C���
:��u�/
j&�$�{:U���?�!b�h�w�+�s�[�8y�Q�o�o	.���w� <p@�_�Pb�^Nϴ
+endstream
+endobj
+1216 0 obj <<
+/Type /Page
+/Contents 1217 0 R
+/Resources 1215 0 R
+/MediaBox [0 0 612 792]
+/Parent 1222 0 R
+/Annots [ 1204 0 R 1205 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R ]
+>> endobj
+1204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [500.251 530.551 519.955 542.506]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [100.901 386.634 120.605 398.589]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [500.251 330.181 519.955 342.136]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.15) >>
+>> endobj
+1208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.132 204.18 268.836 216.135]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.15) >>
+>> endobj
+1209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [282.341 204.18 302.045 216.135]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.15) >>
+>> endobj
+1210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [334.405 204.18 354.109 216.135]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.16) >>
+>> endobj
+1211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.547 73.562 240.25 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.16) >>
+>> endobj
+1218 0 obj <<
+/D [1216 0 R /XYZ 86.4 726.045 null]
+>> endobj
+78 0 obj <<
+/D [1216 0 R /XYZ 86.4 565.741 null]
+>> endobj
+1219 0 obj <<
+/D [1216 0 R /XYZ 500.14 376.493 null]
+>> endobj
+1220 0 obj <<
+/D [1216 0 R /XYZ 408.309 348.612 null]
+>> endobj
+1221 0 obj <<
+/D [1216 0 R /XYZ 500.14 266.564 null]
+>> endobj
+1215 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F11 787 0 R /F10 1095 0 R /F16 729 0 R /F14 1050 0 R /F38 785 0 R /F1 1099 0 R /F7 1094 0 R /F9 1096 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1231 0 obj <<
+/Length 3867      
+/Filter /FlateDecode
+>>
+stream
+x��[m�ܶ�~�b�O:ԧ�M��p�Hs@��A����)�[��Z�/��3
jEIܷ����`�DR䐜y�!���fl����닯^K3���3���e&U3+��H>�^�~J���7*�{�ޗE[͋���d��z��ee�t���w��x��w6�]o:͔��.~���P�݌�2�f����L�<��x��H��8Os��N<��[C�T���s����d�6��:Y�kx�I�ZT�;*�W�{[7��PW4
*ؔ0��� �J7��^g�ʰ�)��q��²�<Yo�K�^������� Uq�D����:��MME�j��.�E�F���~�����eQ�c\�*ל
+�1�6eI2s-E�*xd$�G�E�7͝ߤ���T�'Y���ե�hS���/�`���JX
�a��")"+	�]��B�tK��aK�vү�v�7i��]�y�4O�hv��vͩ�âV
l��G�}%
lɶ��~/�.3���WZ���jӖ���2��%�K�����0��?ԍ/�+W`K*�-�r�K{��ۻ{zy����&�� �m�;��-�S?��W{��(G��#��xr�j�����"a��-�n�9�Pʔe�-��r�2������C�ۣPNqDLqH�b��>�p���rN
q(����횰�Is
x�T�XX�T��k�tN6�,�mN�?0�y1�?��@��oa�
T�̀R��JfR	��)l^�z*%��Mj )X��$fy���,����]��h R%���!ͪ��
+o��n�y^?��-i
�6TS��-"T������K7U�2
���
+��;&Ld��X�{��m:�2��H�a�Nd�Yյ�@��1���Ba���*�8�m�NRm����h
~ a~�22��!�`��@
��g\�<�����9�)-@��3��<��V�V���'�fL����T���נ�����`wgw�[����
���iTl�?��և�6� O�B��o2��
���P�ԋ�CT�mU6��u��/I=^o�әV
��,��{j�� ɇֱ�M�d|�����m
�J
�I�Z�zZ��	�/��zj ���h֭�Q):w*���@Q=n�U|''ձթ����ss ��T�K'xS�Ǜ
+O��<TՔ��	�3��
+�4+��{^�w
���a!T
+�4p�7�ž�Wm7���Yq	Q

W �L�l�
���c�� 	S�����
�kO�~Tj��y.�B��aG���FB��k
��#���p�)����Ez!�f�S�#N��Y��j=E>PYf	��@��H�
��
��"�
dW�\����(ц����}d�H�R�IƂ�3&\ЈS�́�H�PC �W
+������L!���L�\��=�<F3}`� T+�2�`�'��ޫ�h��,h�"&w*�>͞�'�SD��E���2�-�:�D2p�A�p����m]M[aP�����(���R	�=�"w�*�ݮ�.���<Ġ1(ց�#�/�#��h�y>0%GR8����|��$�%��
��EP4HAAE��!�[�AFcjl��#��S]􎣬�G~��`e��e"�}��X�c�N J�� >mc�wi3(�m�*F ��^-�UY4�jS/IEO4��CF��/6>x�<���T�i�9��?P%�u�u�վ�r j�
/��� �
�o�
���RߴLҋ��J��.�������Wm��
+l��&�A0Ū��A� � ���3ۥ�O�~���C����)>Qa�*�O�*�G�[���
+:s�4M Jh��蘲����!e,��
+������_1���������7�g�
��
+$��<��H�,�<U�vC��A�
LZ�	.5�_�89kujǍ  �|�r�szs\��$m
#n��zG_b
7K:�M���A��Z<�m�lh�����%)�OTX��z�]���zI�/�e���Qs��/�o��շxڴ���
+"`Y�[IO���1:J��ѧ�O`={�*:E�G���
��!��W`���=i=f�h�
�
X�]�JI릾�n�Ή�c1�/2���.y�NX����W�+��v_遇e�ܕW�y�������A&�-�u�ȳ�WKK���A6�Kf��k�<�.���N��җRK[P�:̇2� K�{�y�2m
oaR�=!D_|gх��	4yXq�k�)2 �5b�\����7~jE�6ż�*���ps���,j�c&�apl��mГ(��������ɇ+X���Q<��m�(Ƚ
ɝc� ��iя�����vD
%�כ��ES�
��P�kQ�D�6T�c�d�9���!.��W�(�T>�/���C�~������

�n���'D$�'p5�
Rr;�ԧPr���(.Ej,I����?�v;Z7
4;)��tcF�;�#!yZ����7
u�"P*���=��������+w�q�O
+j�
IFg��ĔX���ڛW�H\�\�l��'�`�D�]|�&FM3)O؊�H�(����Ӈ�N�9|��
>�C�����>�2L3<~��͌���g�
M�JXGύ-���H/�.=1E{maab�A
f�^�{K �.�
+��+M�\�:���ב�B�|Dk9*��wn�Q�`6$V���9�~�+��N��un.���gp�XZ=��X��N��%�„V4kdh�c-��EJ9���X�C

DK9�8�k�m�	�Mǯ���lt~�����
"�S��j�	�IP�t�^"� N��O�`��O�E�]G�
t��Xm�Q0�
\�M��j�4�B�
ȹ�;�z���Xq���q�ǎ�vk!��\x�oW�v�+�
�w-wq�9S�7��>����o�
��]�r�"���e����4W��n �}ؚ���kD���0
����WI p��{IwHB&f׺J�k�*���)���tC��9_+�;��S�3
?�
��,�#�� ��)j�&O�TS�v�R|z�a7:���<W��.n��w�$qK6>ߺ �;l��`�bE��`Zw$Z�F�P���-ni�'�L���PAd5�
_p�A���5G�A�oL�|47j��+�[��s�^�"O�V`��·h�',��˶Z/�2�r
+���G
+
�v������Np	f�i�w�
P��xS-�Ȓ���r`��N�������F���/KX#��}2�>�j�#z5:R
HcSvM��r->�\��	�n�ƺ�
w�CX���d���*h�:�d�?��O
��̜s�fG$��'�NQ&ι��h��&2�� �B�c����0�r�����W��^�b�_��|12�B
'3��QS.��s�g�R��\
0�
��
u���x���)
�����:6��bnY�C��9�q����pS��WH^c
�0
a�q0�?j� rM����T~�dj �N����,��w}��Q������?��r�����k��jtk���&G���
�h4��Y�C�
%ο���*��1�/�>�P$�ڈ�����/��Jj
p��9^5v�Y��q�ud�Ɲ�~.e�
�e��|y=��,R��n�ك��tv¥��u�ɴ�紱 ��
VB�Q�2��/3�*���\�0:O6�<�^�sx����w�Ʀk6G6pOoE����K���1mv�F�S�7}��蝠��$�9��;C�x���[_��$D.���KB��0D���.u�� LJ	���(B�:jp�q_`���<#�@� �Mj��İ�|��|��q��v��a���{j��d��,��ʼn�.ڸ�k>�Z����M$�p����k>F��9�OBC�
��	Aj�
�麻�`ܟ�m �
���J矇��g�|:3��T���7�/;�~�҄����bk ܹq(�Y�|
 �
�.�_��
-�^
+endstream
+endobj
+1230 0 obj <<
+/Type /Page
+/Contents 1231 0 R
+/Resources 1229 0 R
+/MediaBox [0 0 612 792]
+/Parent 1222 0 R
+/Annots [ 1212 0 R 1213 0 R 1214 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R ]
+>> endobj
+1212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.258 668.436 432.98 680.391]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.4) >>
+>> endobj
+1213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.217 644.526 257.94 656.481]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.484 644.526 427.187 656.481]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [324.632 573.463 344.336 585.419]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.10) >>
+>> endobj
+1224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 516.882 108.982 528.837]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.10) >>
+>> endobj
+1225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.401 362.685 200.124 374.64]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [213.673 269.173 225.628 277.586]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CLPS:03) >>
+>> endobj
+1227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.647 217.08 412.351 229.035]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.17) >>
+>> endobj
+1232 0 obj <<
+/D [1230 0 R /XYZ 86.4 726.045 null]
+>> endobj
+82 0 obj <<
+/D [1230 0 R /XYZ 86.4 701.138 null]
+>> endobj
+86 0 obj <<
+/D [1230 0 R /XYZ 86.4 477.046 null]
+>> endobj
+1233 0 obj <<
+/D [1230 0 R /XYZ 255.723 347.886 null]
+>> endobj
+90 0 obj <<
+/D [1230 0 R /XYZ 86.4 251.741 null]
+>> endobj
+1235 0 obj <<
+/D [1230 0 R /XYZ 173.725 131.208 null]
+>> endobj
+1229 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F14 1050 0 R /F16 729 0 R /F49 983 0 R /F11 787 0 R /F10 1095 0 R /F1 1099 0 R /F6 1031 0 R /F7 1094 0 R /F9 1096 0 R /F20 1234 0 R /F17 730 0 R /F13 1100 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1248 0 obj <<
+/Length 3718      
+/Filter /FlateDecode
+>>
+stream
+x��\Ys�~��#X�sq�*vl)�C*�Yy��J��%���R4�}�gfO�. 
*Yɋ�������^����Nޜ}wy��k�'�8����jb5��
тM.��SN��LX1�v��X�
>-�����(��E�¨l���gl��+v�3n�uSf��]�t����og
&�VM���z2�9{��N��OJ���{?�f"�#
�V����qF�
��uk�3:��~�osX��_�����_3�zG�֬ z~�/�2X�6��W���\L�~O�1LL4qFXO�X��_�TG�	i˜��Z��zS滰�r�G¬���YW�^��E0��VbfC at 0ՐE�->�+=�@���Lsr>�RN/���N��r�4��l�]��qn��\����+
��� ��Q����v��77���
�46�ɌSbTT�ś}
bR��Dk��>�F 3�\�G^:�2i��@Kib���&���2
dg��.�
ڃ(Q Z�U鸁�Q��$���}�#�K
5�I"��
`Fu$�'�8
��M�d�rzP�
J�z�����Qae�׉�J���N�Q�	�� �[��L�%�*aC�
�ykh�-I�E���^'�����m������ں;FH����H!C��}+��@|%��t-y��'F���z�ŝ�F)��n���S�
\µ��=���m�vhZ�
�>���l��e�)+2�
X�~�l-)�&�9�:�~�ܜ�����Z�t^l��O2헒.;R���ۛ�'�!�˧�[�c����kb��Z�>���pmN���
+�a�T.
���N�"�����j; p� ��^ۏ����}�W���! �-`�b[��S�W{j��>&j�+7�����ʋjbA��_����#}�8FIճ� u�]��pOiw�#�F�0��B��p+M��m^\��B����}��� ����A1@����ф�`N��e����L��k at D�a��pv�9#*���)���
в�J�
�]�?Hv!��.��]���.ԣ��/`� �G"�Y#��Z��,A8�W���L�eV�fV�4�x Z�A6���6c��1\��ն�3�`���ݥ`:�
�c��&�c҉֘bW1)r�U��`��n�z��5��z(��7�E��H�(��j��ncI��6��q	Џ�e��!����BR /��
��v�g�bU���,h�����B���K�́R[1@ɕ
cr}�p�w����w
c����M�߀�Z>*��!�7(�2%ZNu�v��t���iv��r7p�
v�2�y�EmQC
��&TI�2���-R�����|ꨞ�́�y8�,�. *`�r{7/���j*���{����װ@��2p0}A���ۆ7��"�}F�M2j=e�^����w��O
��y���7�����\HIY��m���Xt"�
x
��ɒ����2wA�eG�]\�i���lNRx[C�b�>x"|�آ�>�j�yj[-e�;���\j� ��`��E��0�!2N^A�$f�l �[j���ٙ�h��%Z}Q�����@�"���P9�<h��K���9
�a��̖v��
퉟���G0<E'l{NX��/��$U�9��.7�<���j�Wz�ޔ���`�t�=�8
��w��i�3��u�= 
F�����c�5k F�f�x�?>C �Cn���|�;
Sv��S�t�3b�l�|�hd�W(e�G��v�����9��������~�[D|xS.C��M�
��B��
Y	 ��
^��F�� X����j��3vN����@72J+���U�o��>�
��oWż�S�$nvކ�	l鑩�qs���6���|�:᷌(u(�
X�@d�
�gbN�#�v��Y�bwj�Y{ַW�۬�
��ɸ:TP׼^O��+X��n���֓�Q��`��e
�#����u��:<
+��G`���Ҹ������BҠ���_(\\o�E��H}����)ѵ{|��m��Z��ZX���u�#,	�ú�p����fm���2s
v>�@��
+�]V�R?!���Ͷ�N��o�퇘��Fty
� W
j���MԁʶMh���0��v�����-0��-W�0���]
n���_�IE� �-�h��ETg�̫
E
+#v#A�F�#E�� ����Tq!�)�C.���z�2.~�-�
,PT���_?R )��)�h������u%���<_�t���Q��|�
����
�w at C>1���Y����dw��r1�wH
u��pfSX[<U��xg���l_�ǥe�Ex�T~������.!�⥋�>���պ�;���wS,�6g�D�� �C�f ��K|�y���k�����ٸ1�H����y��=�;�[P��
b����2S�b��� �
+}�-
"WS~��]E�2m��-�6���̜����?���je}0ݱvC������;��w�mW_��iMM����s̍iݮJDO��U8s'an@�A�'8�A��'��@N/� |�j�s����eT
49mc��o/�6�1�P!�=d�$pJ4U�`�oB{�m�&�ޚ��S�
�1ʼn`h����F /�����|�'<�J�m����ޕU]ǩa@5u
����j
+W��C�?M
(�6
�
��vs�"�i�ӯ�3�
� 
+>��Z���E�0h]
Z#�b������#f	�
�N�z1\�5�Q�$T�t[�i�7��b��P??���%����D�0 G �
��q�
Ôp��:�����
��%�u
��N;T��~v��ƞ��&������Q�>)nQk���P�}b	W>������>�^t���21%�@�WZ<��z\���K_������[-WT�
�U׺���$�S٨�h������\�Y�l�2�/zF�dk��,�!
��DK��]
���*�AVRN��}8�J 
��Y	 2�^�M�x~o�X<��⹶���XkYb�MH��I�m
+�SZ�L��ŏ�R�=$u����3���x�R��K=�)tI9x�/��u�/>7��>�l�ԖP<ȇ$�:�d�RGy��-��f��N�����������v
�b9�
G�5~
8v�n
��
f��.s
+F�;��v�W��kl�����*o�̈́���XcJ|�gf�c��dL�A|~�4�
D9nW�Yc�>Ү��n��s➔]A�'��7�
@�S�
+�����H��qò���� �e1�����I������ )��vB9|��7����|f��d+����/�^����Օ��y3�0w�OD�Gm
�ic�4�
j�ȁ�������Џ����?�#
+
n�p��(p����
��bd�j" &T�\��=�q�H���ΐ���/��ir��u8�u���>���Xq�o��Q�n_�&�Ͷ�9Ʈ����ۑ���?�\d*�N���v/�
}b�2��g���f/[�{���>�Ew�
�<�W5�&�`�?�����U�k֪�i
�"�h�"�=�3��oZ߅a�e8*Y�� �4�iL�L��[n��l�/"�[`���<4�^U�6U?�n�7�:RU�bJ�}�� ZQu����
����E�� ��8���l7���TB�wR(�	���e22s�z'���$��ōc�TY�Zvz$D쑨_۔�������
?T�!�[Ү���<��C~ؕ���>�Lj���ǝ���G���U	�4H�39��?aN0���(�Y�U��Ω�
+endstream
+endobj
+1247 0 obj <<
+/Type /Page
+/Contents 1248 0 R
+/Resources 1246 0 R
+/MediaBox [0 0 612 792]
+/Parent 1222 0 R
+/Annots [ 1228 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R ]
+>> endobj
+1228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [325.254 687.689 344.958 699.662]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.18) >>
+>> endobj
+1237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [213.811 426.404 225.766 434.817]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CLPS:03) >>
+>> endobj
+1238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [328.002 411.958 347.706 423.914]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+1239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.031 400.003 466.734 411.958]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.21) >>
+>> endobj
+1240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.344 376.093 227.048 388.048]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+1241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.112 364.138 179.834 376.093]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.65 352.183 242.373 364.138]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.422 352.183 496.126 364.138]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+1244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.512 340.781 401.983 351.629]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.6.3) >>
+>> endobj
+1245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 282.308 108.982 294.263]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.21) >>
+>> endobj
+1249 0 obj <<
+/D [1247 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1250 0 obj <<
+/D [1247 0 R /XYZ 144.721 675.641 null]
+>> endobj
+1251 0 obj <<
+/D [1247 0 R /XYZ 256.383 637.557 null]
+>> endobj
+1252 0 obj <<
+/D [1247 0 R /XYZ 220.173 603.858 null]
+>> endobj
+1253 0 obj <<
+/D [1247 0 R /XYZ 275.606 525.025 null]
+>> endobj
+1254 0 obj <<
+/D [1247 0 R /XYZ 215.61 477.439 null]
+>> endobj
+94 0 obj <<
+/D [1247 0 R /XYZ 86.4 328.15 null]
+>> endobj
+1255 0 obj <<
+/D [1247 0 R /XYZ 163.934 270.26 null]
+>> endobj
+1256 0 obj <<
+/D [1247 0 R /XYZ 260.841 117.24 null]
+>> endobj
+1246 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F14 1050 0 R /F13 1100 0 R /F11 787 0 R /F1 1099 0 R /F10 1095 0 R /F6 1031 0 R /F7 1094 0 R /F16 729 0 R /F49 983 0 R /F38 785 0 R /F20 1234 0 R /F17 730 0 R /F9 1096 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1267 0 obj <<
+/Length 4923      
+/Filter /FlateDecode
+>>
+stream
+x��\[��6r~�_�G��&�$6g�
�:>��I�߼>9l��M�$jI�3�_�*T�7A�g��@
+u��tg��U���ݟ
�}��ʥ�J�zxZ6ի\��*�zخ~NDq����:�����e_o���Z*��9t��j�Z��<�t����?�̞�D�ͤ�������_������R��?n��ʥZ������.�RW,��N�"�D��=PQ���@�R	ȍ��D*� }�o��&@�o��H�74�ý�
�<�e}�
��0�5�j
t+�h��g&÷߾bB�J�\�<F
��l�rU�ؽ���H��4��Qӭ�4�b5�Md5l�V��
�W�����j�=����d�=�
+1����t:5�j=�in=ܯAv�r�6��(�Tv��@���р|��<-��q�"<��zX�G����M�kd��6�	:��4a�?F&��E;��-�~��Ȉ��3��'�I3�[��n#��Lh���aJ�
+kW�a���6U���CԜ�feM�:�Gt
+��s�N����ʥ�VS��#`~^$1I:j`O�����Jf�3��	пՇM�NZ�]���"�#%���;��_O��R"�ZK�tsu�R�	�16�5�l��)�����
�
rE�{zD��4�öl_�k�
�5�QO�;����
Q|���
�.����������65�s=_
=�j�n]�[D1ל��=�0!�`Bf>���Ԉ	�eA���4����(>J����ϔ~
���
+wԛ���6�ʯA�T^����EH/s�X�� ��s�/�霘�7
h�xs

�
pt���k��`����{��l�&5Z�Ѯg���B�/�rq�)g�sm9�r�U�nt�"��y��;LH�v��ԇm�q�
�
�E�����eG		��{\E�.b�BT�V;�m�Ö���ޑ��Ϭ����;�J�2���*آ����v[�HZbG
4�33�c̘�ɿ���_�v�
�����t��ϱ�M2{��{7��1�
�`_jΡ,��t5�Y�F��3X0Kgy���Z*�K4��2��p����h��G�HHh�(��
+�n���0�Vm8%�!��F[=�v%������=>�����@݄W��@������(�L�r%�Q�'��P	�w�׏�
+��������>0��fzdG�lI��I����!b�
R2��L>����
mkW�[�a��l�S��N�.Ԏ�",��"��ll��ָ�Ri@��j�9s8������������ޯ���w����>Ԡ�в
-@��3��z	�CZ���hcƗA:�uU�ng��HU} j_�*-�� ��}(�����U~��B 슯U&��P�k2��m
��:���n��C�,��B� �����)��Y�8ޗ
����:��XY�\ ������Ʈ����˂gb���ρ�m՗��#�
 >ŒC<H�l��
0�T
+i��_�ͽ��#L%�t	~z���&��ۗj_�s��Tl�oO-}�	V& ��r�|xl��[C�}@^��3
_x\���*:3؝B�
}��lr����e�B�8���h�
���_�����t�]_�y�����:�\��&/�"�r�lNm[�����>�pr
��e_u�Pܱ��g!���Β�)�� �Cۊ�6��x�-=mQ���)�� M�H :����y�
��<�Ҁ���
�5��rΧz{/%�p�!H����1��"��NH�m]B��
���P�p;{V�����#%?��!�î~�9�{�����1��b	���nG�l��P����z��q7��k��ށ4�TjK�!�"]�Fׄ���o̷�����=��N�!��1~��{��m��Y�������siQ
�|UP�ڨ�&+3���qK��a��	0��qd&ۦ�V-J��$5�
�$�ɑ\O����\���m �\��:���

�:�S�@�
��/=)���h�

=�yH�xjbـ���r�'�
1�h��
�M�bn�&�W�?��[��P�n���눨<��	p"|��&M
ƙ���ķj�Zq
����Bk��@ų7Oh����`w)�W!Rk��*�E�� �Slq9qԄ��W<
4H"M���r��`.:��A�Z���(st�8�ХC�E�n2D���dV8Ȑ��p0�
�v@�ݾ�_��d��"c$��lN�����c���O�V�=?�V���0�`���z=4�"���p~&��S��}a��'�p5�z���E��Oo��˳��/�

уRc������pD��:������V�:�#`��%UGtT`�wg.�ؕ�3x�MIک�c� ��
=���q
��
�8⣛�#/t�Z�����4�]����]�j���=���D���Mߴ� ��T�+��G�
��%R��S1cr���r�Py'�;h�wcL�`a��|��~�5������6e(
P����KWӖ�~~(�n�{
���&��!�
�xk��6��]��;��{�f�%=#�-ة\�W���UՁF"C�g
�
�ME�
�;���� N��]����|�1�@N5<���5�rq����m�-��7c�s�sڀf�r!�S!^E�t7��aV=�Vdx%��w��
9��;�o<��R���!�2~g�;F�M�	�GR3�A2I��ja���
+�L�3l�b#Y���ʰ
�����'ܑ��OԱ��c�W'l̒1쀌��=�V{U�IJ��kWw�/�i�k�����a`a�
I��-~c1��<l���� _K��LǍ���H�P�R��|�J>�2�
��[�%�t���U-ͱ��V��c�
���Ћ
�
+2E�efV��F�ܴҩ18.K�Xw.ٖ}I�cY�
5/�l���D6����
�ŃK�Afo��k?@V�4s���!���/�w��.��j��e�Rw�e��)���61��b*R+�bPD��L�ʥt���ԁA�:��#�����Z^Il�q�2�q1 ��|H�q�5&�{����ű������6�6��Oa�	�|/N�Tn|�4j� cEw��h�*SC
�e����,}�ή_�T|�=>@wőb4�S.չ�b�/ �̴{����юJVc��sWLّ�޳�Ǣ��R Ig��)/X�����g���М�_���WC�Hx��jL�.�i�H�7ۺ{�PO>փ�s ��s��Oէ�痦�y�\e��op�!×��7���
F�
�?�����b�H������l�I�
���rI���$��eɿ
�-D�M�/��55ρ�
�?�۟�M�X����)��L�
��6
�R5���D�J�lSL���~ /��a���̘������m���t-� c���7�@ /�i�ݬ�>�s��/�!4�|�
=����L[�1�~���'�ꩧ.^q
J�j��]����&vT"��ݕ��«@W�ٝ�d���C����
�
+5=�7n~]0��"���L��b<��
\%ѐ�,Np"�hg��o�( t
:C KG �͊�
�iy�4��Z}K��'Ȯb`n`�F]9炠,/�Dϡ�C�Op����vv5Գ�&�
q�	d�Is���')��/�1Us��C� Ƕ��n�>>�D(������z$d��VG|*vz*�UL�8�huԥf��TG��D
������H-v�yKq�­����[1Ӻ�
pm�g�4�S��
p8-]��pT\7E�W5�ꬿ��	�N\e�5f�R�<Kѽ���Lnf�;ߑ�&5����(O���4L��c��:x�/�M.@"�ޯfw )v]I�

N��b��_�s�;�y�R�_����P���p�q(zQє�
[�5�EEu��ϼ��uZ�n�'�G1;_�TY*rD
�r���-�Rg�*p��{�"֞|���aS���ҼM��h���GF+����"qǢ}��b��-&��|�Pf��y��r�ur��3/M�����aW8��/�l�/�䗊�9�3��gX�1��"�����ډH�S_!��
u�)@*

G���@�;�=d�:O��;In5Djq��
z1W��)e�z�����$��*Ɨ\`*�!��+
�ݗ���WXȟ2md}�uT�"�@6mݯ��/�߶U�a�v��Bwɱ��|��Ke[����G-�-�C��y��D���e������,B�;K�kM7�o<��n��r�g�
���B
���O�
+��r�29螄���F�q:�
|������i��Q0��J$���E�v���nR�t��f�V|Y�>�+�ٹ�
�R9��uܸ_v�/zzC�d8��σ�>���e�f��
���BcBo1ܧ���9�1���0w
D)�h�:����
_�
B�{�%���
�U�X���y~��� �rt8���)��9:jw�B��3:����nB��������rC^o����% �[�L3��*$]��
�ڬ#�ud�Χ��ec}�\��a&ב�7���\�4t�~O��dH��A#͠1�K�At�
�X��U��8;(�4
�{�V��Q���CM�t�|m7�)�K瑓������㉓
�_
'�����<�����D� T
DA�+�&��V�iLJU�\64�#�`�Ҕ�
!����.�b���}���Y|41R 2?�\w�L�f
��:�p*�J<������&%yx�z).o�5DZM��&?݈_2;Ӆ�U�5�����նL�xi�C�k��1Љm6q42\�L
h��|˯-(�X�
�1S�G\���2rs��ț�
�͎5��_�L���'��r��$�σ��i�> �����5�i52�eE?E˸��eɞJmY�Į���e~#u?����8�8��߬M��=��5O
Cr�e� [...]
+endstream
+endobj
+1266 0 obj <<
+/Type /Page
+/Contents 1267 0 R
+/Resources 1265 0 R
+/MediaBox [0 0 612 792]
+/Parent 1222 0 R
+/Annots [ 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R ]
+>> endobj
+1257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.498 583.469 339.202 595.424]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+1258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.75 528.828 319.454 542.594]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+1259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [249.787 519.364 261.742 527.777]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CLPS:03) >>
+>> endobj
+1260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [330.524 171.916 336.986 184.509]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.1) >>
+>> endobj
+1261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.151 78.543 118.964 88.506]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+1268 0 obj <<
+/D [1266 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1269 0 obj <<
+/D [1266 0 R /XYZ 239.04 578.156 null]
+>> endobj
+98 0 obj <<
+/D [1266 0 R /XYZ 86.4 504.129 null]
+>> endobj
+1271 0 obj <<
+/D [1266 0 R /XYZ 101.643 119.39 null]
+>> endobj
+1265 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F11 787 0 R /F10 1095 0 R /F13 1100 0 R /F7 1094 0 R /F14 1050 0 R /F1 1099 0 R /F38 785 0 R /F16 729 0 R /F49 983 0 R /F19 1270 0 R /F18 1272 0 R /F21 1273 0 R /F24 1274 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1289 0 obj <<
+/Length 3833      
+/Filter /FlateDecode
+>>
+stream
+x��[ݓܶ
��b�O���?DR�d�i
��NӤ�鋓��+ݝ�j-im_����ܽ;Mn�%A��@�nW��/��x�Z�U�R-���fe5S+#R�%_]�7�`�r-��~(6�._�M^4X���صeW�/�K)�{"�vYuߖ��Z(�����?]s���Ż
��+ޏ�0��j��x�S�ʡ�U�djW
�v�d�����_�~����ƵXi.�
+����YbX6Oˮ���+^^m��U
����q=a��d�bJҘ�IL���CS����/.�I�DWUuh�&��zGm�
~e��y�ͥ��]�����.w��+w�D�U�uSvw[�rS7T�-v�Y�@��gMNm]
F����P<��-���9gi�Њ�����F
�����Qʑ8��]�D�޷]�eN	��á$(V,h�~��a1�Fm��/�����A٨�&ty�eT���4ʐ��e������UA�7M��M(���j�K�`��B�OM]|_��
+N#W;N������;))�kg�k�xt�[w5}�̮%
+�x;�+6E�f�=��'1���5�
\3��0+7�o=I��,5�:%gq�`�L���r��Y�Lp�)�|���E��rw���R��s?lQ��:��iI.�u�hd�Z`;hӾu]
)��j���/Ⱥ@�0
�뾴7FL- �������!@s������b��o��?TP��a����v#mj�[�Q2?��H�b����{���������n��o�����U�
?
���w�Jc�
��T����i`���m ��U)]�5���͗G/�FM��P�i%{�+�K!�T�Z%h�����[��2/Z��M
"�go�
+�f�ܤ�6�5š%���E�u�Ġ;f!��XRCa���ʽC�	�
jrkQob

�m@ًp��M4�7m��)~��ޔŠ58͙�@E?$�IÊ�a�-�_:�s:
7���eUK7!�pp�⊥
+�Sh�c��I�]�_B������gp׹
+&�Σj2X��|��jh��r[�����]B�35��M��
yB���)�b}��i��4�M�q��9�`;�+Dx��1��#MjJ�ܕۂj�� �x���k�>h��_�

�<�� p�[j�
�upl��a��^�׊�F
u�7cs��]��;��gb���ꐓ5�K �
+�2�G�F¾�~�G�HN��$3R����vˍR�C�;d9l>�������=�1 at i�Q߀MNAq�X�E�e�����~@
��\��U����ڡ��<(

�(��?�!����gMWn�@on	߰����֌��-YS�c
�pX��r
�C^�������A�"`�o�Q��bM�nzmw���;;�NC�
E3���B0
���oZ�������EI[��H�P9L��CkYD�'7
��������n�0]���3B?� ���F�	FMN���dy
438O{O��q�Y�3�y-��	���̡����*7�.�հ`�
�'�Q~�˶@�d
���V�sZ��
��+�7֖
}{;r?Fˁ��eCg�9�����Mjg�P�
�P���8�{S���l�8|�a�%�;w~�њ�A�)LÏg�(u��Ȃܽ�����EE��C

�s�
N���
�dJ����|b��a&]�o�U&a����ĹF2;��!B�	�S��+x�2�XkX�
x���t�0=���࢘�˅�a<�2�s16
���$G�X�xN@
x�y��e��$�q��@�@l%�w;D��+
+ljk]s�������O.y��̱��/�`U��H�D*��-����%w�3?!#/����߆�6�njc����$
��a��5}�8�F8y8w�^?�8(	'ԑ�6pz��%bvz�� ��ı�
���+��
�����B
+-����|��Y���p,�4�	%��12!�T��IY;���K�4���		���#dQ Q��5E��v	�F�Ę�����t
�A>mO;��A
ۿP2PX�:���ñh�p��r�!�~�����H����y�b���ဆ�P�=
+���w���9؆���5�	pӡ����u߫u��讁n��/4���ze�G�{51�:EN.�'� ���#5�����L#@�B�}q���%wL܊����cd2�&����s@	�]�j/QB�&lΠ�|
J$�
%�L���;�Hf�Tf@����
|,?g�KJ
5�
j���Q^�`6-�T�g�:����~��]�*���S�o��3��	y:�8�L �&�{
<5��4-}�<�q�|��ME'ݦJ���i�#NIO�i ir�ǯX���a�@#��tZhqh(�Ӑ�D�'˧�ea&��f��u����L�X,�Y1�
���¿�?7����F�~{#}���uM��A�>���m��q���fd,
i�'���@ ~�Н_�>��f��b~n}X��c��,I�l�8�dec
+>
�[�3�����RV���o�j,���Z�K�8蒈Ѽӳ�")�Z���R2���Ф_�:�Q�n�¡�F�镦0{=�
	
0��%�
�&�R�}�n���R.}�:
+��Z��5g�P>�_P�ϡ|�
`��|p Og-^s�{���
>���q�DE
ꡘ�N^���{�/
� a��[���^h`�=���\�E��n�k����8�K ���ġ��n��
N;8�X���W��>�n�?
8���"�	&��
!�2)�lƷ2G
�I�0z���]�÷��{OVӷ-
+_q�u�b!dT|�{ߓ�D������c����Zz6��{�<�G�1�����C��3��GO�]фn���*}�b�0p
�����Q�R�^�\��j�YU9q�~Iz��Z\��Ă�'�/��G���«�JgO j���HrH������YO*�ב�*� �l�o�l�=,��X7o�.�k�ΧoA9��se*��nS�;�M�_c�
�I��<a�p2`Z|�V==����!2
�p-c��j<��=�!��	jr�ާ���MÛ���ޞx o���g^n@���쑉Q�t^x�ع�5`��Q�+���>���l�������Lú�s�M
��ҥ_[Li �@��۵�G�5��tX��ܝ�T�s��P�9g1��>Ґ�xp�
�v�DI
]��6aJ�!1J"�&c�"�ݝ_U�
o�ֽ|�W�QU�
�}V*��Տ\*𐔀�;ju[��HN���WϽ��I�8�[�_�,1j���|&1O�y
��5)ۂh�)z
��;*����h���%�v���Z1���Kú'a�R��p�*��
��]�N0�f��(�<=d�C�siq��	S1����G�`��y\ط���B���TC��>�M�%�ߋ<�q�v��<X˔<G8�a������rm%�k�M��HR���G\�r	 L��G�����氜%0����$L���SDj
y
+�D�
�as_`ab��Gx��x�QX���Ҧ�e{[I��/�2v���|�r��J��a;S��AV
�=�SԌ4� �ew���#��&�����2e'z��#�-9'��e��1�l�^�t����Lr���+o��c��S�Y�D��i���Q^n��
B=��1ƛ�L�˚���������S"�'8ki���^�F��Gq���GQK���(�
�I�/���e����,��\�pG?=�^l��JN¯n���G
���F�_S�3��P�ń�Jbf�b�.�z�:N
i���]�i9�h)(�!tD�� 0r
M�_��܈�o����Ñ&�
`�l�@c��+�3/���<O�Ƥ�D]���t�
�/	���������"
{���؁��ɦK��4�� ���dz
+endstream
+endobj
+1288 0 obj <<
+/Type /Page
+/Contents 1289 0 R
+/Resources 1287 0 R
+/MediaBox [0 0 612 792]
+/Parent 1222 0 R
+/Annots [ 1263 0 R 1264 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1283 0 R 1284 0 R 1285 0 R 1281 0 R 1282 0 R ]
+>> endobj
+1262 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./ckpnt.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1292 0 R
+/BBox [0 0 492 152]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1293 0 R
+>>/Font << /R8 1294 0 R/R10 1295 0 R>>
+>>
+/Length 1296 0 R
+/Filter /FlateDecode
+>>
+stream
+x��Zˎd�
��Wܥc`*I�����n � ��
l��IbO �~�C�W��m�Ć.��(��CJ�:�5�����?^��u;��t�/�
_��2�щ���͛��o�:�Q���i9�EE3�㤏��%/:��.�.:�A��L��u�Z�u�GGD�떬�8�
���|8����S|ܷ�����ڢ�ZkQ{�I�֢f΋�f�K0A3�-ؠ��D!
+�A/tk���[sљd��
z��/��.5�h]BN4ݽ���.?��ў?�?
_=�_�#�u�я�o/�o�(W9J����������OLה�D3���Ç�)&l�Xׄ��7��
�����6&Ԙ�&��d�?�

����V��_^J�-������MS�R�/���Y�2����y��Em

=^��P�Y�KtE�ؕV�1������B�Wkd�
c�����y�뒻A�p�i(�����t�W�O��!Aeȓ�g����Vk<=9�3��-嗤���WI�������`�‚"�T���a�����˻�?
�y���g��p��z�8eëTRt�+&�w}��r��W�#?�
� UAW`i�`�ٿm�{i��m��jY������(�ve:hY�w��7�'�(8�F��Bު�IN'9*�YDL�ݤ�Г�,�c�C���ٔ�s{/����~+��ɔ��~/y�z|�;|�J:~0����"m�;i%�x��E��1�5C(��}�mj�� �B[�f]�����ܴS��٢
ە�k�&�Bk�9��dU�O����b]E��u]e�������5Alb������N���
���z*���f�I��
�2����i�uH���LQH�F���1B�2gTqB����NÕL��K�%�p
�mꆓ붙�9��Z�ә,����.'��{�gI��{u	X�X�f����3��M�����m��_M���tsq�io���s1xG6ud��Z�ק�dx����FX�v���q�>.
�Dd�/b9���Ge̮�~ec�mÉr���M
���}�`C�ޝ����OD	��~�|u���S"
E��2k�Ƹ��l������z>����X8m��u���Y+m�w��swI�d}��r�<'N�9��k�s�SCg����&+ch�z
V-�&���#�/˂\`�i_u�N���A���'�����yO��@��.^M�d;����=N��Ȩ���5	N�bCT�#trF��ڽ"�̗�L�b3UN�zƴ0�y"��ēTS���
�B'��^�:�҆J�y-�*���iR��	wz�j�u

�6x��K�v^x*����b��O4���`����v漁�
��9:%��r�	
�7���x?��Q�9H{8�JOzm'Ϙ�{�k&7�͈
Ϗ^Vͧ��Dz��o��m�~}��~kq�aj�� �'���R�gY�~/F2-���k�(�T at eS
+���I���Od��w��g
�u�U�^�Xu�g�� 8�}f�7,����O;2%�1����1Q��1�i��D'���B��KY(��1!O���(�$t�X5֘iSCљ���`u
�"��J�[Lm�6�4�^�!���d�eҌ��\���&
+ar��l��FHc� 6���:ŕ���$�f���vi�c2S<,s��ܬ+k��<ј�	^uH�Rаo�T
+%� +(άuw\�%s%�%F���[��h�oe�>���+���R������yT��,�8%��K��s�S�i���3���`�G��4��M�Z a�д�ڲY���f'�f��m��>f
6B� r��#�͝*6���7/cK>u�C&��w�2�Nez:K��@��CC�o��i�#�
k�w�T��P�
6�x=<厰��4k��<�
�hO�ʽ&�������
�<�� �N�J;H%��
�Ҁ�KZ�$|��sN�X�֪
 .
���K�������
{4)+��w�j�Ō��X�D��Z�R5۞>��bf�'d�g�ҋ
kn8H+4��

�zXЊ�# ���}F�y�\b8�7��3�C�+cr��T'x�Օ��q�r6	*�&c#�8E��S�ƻ�(����2�Z��Pz�"hZ����lԇ���Тz��@
�y�@�=}d�on�3���h��'���g�d軸{&vnb�3*��
��˾U
d�L�AVG��~�5���`اK�O��}���	��w�N�G�:���x��^x-$����hƨ.[@��ї�`�5�!�����6�ށ������g��c�YF��
���
W׷[���x4�Ƞ~֋Pd)O���d��
+Er�{�
4oY
+K��{�:xx�-|����G .�Zi]��m�a���k
�p�I9P����d-H�=ӣ_�=�
7�䣌�]��3�^�Z�0����q�Y�!�k�������Gmc�>G���/eR�f����Q�B95���IS�m��wh��)�
���r����Z�	n�1��
+�V�G��{*�+Xn��`۾��o�r��2h;�y�y|�"H6�h��M}Z�Ex��?S��%�f������ڻ�*�%½�
O�5�on���6��u��Vz/��w:��
v�$��9.e��ӵuc+8N�'{��[x�3Ƅ
��-�v8��.J�N�ݜ��7��E��<$� %�
$�Nί"�����H���07��҄i���+�#������D�
h{GH��픷��/���ڼET%8�FI8�6S�7�Fox��33C�|f~���7
�&��=�[x�����ïR �J.^&�R�
��H�f�ͩ{rGyrz��F%6�%�{|c脷��bԞ�Z�Q�㰧����I:Dl�"<C��1��5B=ڬ�
j*�Pm�>�ϸ�U
�z��[�-@�|�.��T����^bf��!�o�Bo�]�h����x���V��'Ұޏ�zS�?T���]�j�]̈́���
`�F��3}7��6#����.�V���`�/�����T�]�!��e^v:e��]Vctw������	ϛ[@$ KL�A�{x�OB��?mj��?^��M�#
���y=���>m�a۠oT%d"؟3l������?B�\�
+endstream
+endobj
+1292 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151021114445-07'00')
+/ModDate (D:20151021114445-07'00')
+/Title (ckpnt.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1293 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1294 0 obj
+<<
+/BaseFont /YVKWHI#2BTimes-Roman
+/FontDescriptor 1297 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 119
+/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 444 500 0 333 0 0 0 0 500 0 0 0 500 500 0 333 389 278 0 0 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+1295 0 obj
+<<
+/BaseFont /WJUQVW#2BTimes-Bold
+/FontDescriptor 1298 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 46
+/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 250]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+1296 0 obj
+3029
+endobj
+1297 0 obj
+<<
+/Type /FontDescriptor
+/FontName /YVKWHI#2BTimes-Roman
+/FontBBox [ 0 -217 694 683]
+/Flags 32
+/Ascent 683
+/CapHeight 662
+/Descent -217
+/ItalicAngle 0
+/StemV 104
+/MissingWidth 500
+/XHeight 460
+/CharSet (/B/F/a/c/d/f/k/o/one/p/r/s/space/t/three/two/w/zero)
+/FontFile3 1299 0 R
+>>
+endobj
+1298 0 obj
+<<
+/Type /FontDescriptor
+/FontName /WJUQVW#2BTimes-Bold
+/FontBBox [ 0 -13 210 156]
+/Flags 65568
+/Ascent 156
+/CapHeight 156
+/Descent -13
+/ItalicAngle 0
+/StemV 31
+/MissingWidth 500
+/CharSet (/period/space)
+/FontFile3 1300 0 R
+>>
+endobj
+1299 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2238
+>>
+stream
+x�eTkTSW�1$�� ���#7S���(0�R|LUD;���b
"	ABBIHB$Bx�g B�Q[�����QkgYۥN;v�̹�돹�k���?g�s�9{������,��`�lj�"yH�L���n��\� �"3!%��=�1k1�Ĝ
���߯e�lA :�>r�C��0&���wD�r
+r��y��>Z�j��N�"""�
����قe�R$��HE�y���m�D�*Ȑ�d�)ii��w�R$�,�N�D��#S
+VD~$


��u����
+��W�}�A� V������ð��ܝ���Դ�,AhX�0l	�
�b˱8,
KĶc;�(l�1���@����84O�֍���dܟ9�1s
���&+����ʎdw�ƣ�5`f-lV
����@�z�,o6"<�s�qf%��V�S�:=����p�N��
+8'T�o�7�n�@���3
+?�#C�n�7�nw����p$
����/|��Ə��s_�1�OC?�,��F/��ʴԼ��������K�a?T��؝n��#A�դ�-	�"�����.F����{&���\��U�Z��2�_�
�Q�ڗ�|B'�N]YE-�X�vmMKoR���;�.x9~�.��EI�MHj�%�
+|0�ς8'���,�C'�v�Q�m&��1f�Y�F�s�	�Z����
+�O�h7|���CK�{Q�W
��
�G��"^���S��ʭܞK����>� �<�5�h�����A7���x8Ŵ�
��6gy

�B!A�px�d�S4���w��nx �{����i1����f��Ʈ>�G������n�HPd�bT� �"lFW��s���Oo�8��
r�&/�T���岻���|���X�U�:�V������y���]Z�F�p�^���P_3��Jm=�P6Z�?����� ��Z�<���5��5q'��}�nqK�"��]Zj4���@�*�U���P(*O.�
�y�7u:��<q:�Q%<a�,Q,q����c��2(�B]l{Me�'�	�K��f4���%M
ݘ�s^޷�GP�
Y��zyC���.����h�O&H��@�P{��8��A&p9��!��)���&��h2�⒓
+K gZo2�,
����V
+8�/R_���$_97�>����*s��k��	t�L��
0�����=
�k:��7՘�j�r}N��
�� �.
l���ہ�j�:�'ޮ���
B����������`K�������o+uZ�B�ep�ԡ��U���G����קW��!���
C������C������I2�=��S��Ig��w���Y4��Gt��nM�—�
Aȶ#�y����OkeYU��(u�9�
x{[��y����pj�^uq�H�����="�:2�2q��q
�jR/��
�C�ڧ\(��Er�̨� S�����a�;�!�G��
���(���!�� tϷ��˻O|.}z
Q�pȚ
+Z �����R���#��lj�B�.�P<^���C
�||o{���
+xg������>C�SL���E�'X
xAY)�B�Q\;F�7h�$�3
{ԼB�Q^


8
�	*��Ԧ����P,�Cj��?�Y�=���

1���Td����!��-��X��?�x�h񛪗���.�/t�k�PP��i�l>5�Ro�n�7��34B�����v�ߛ���I⤰8�l�����ņ��E�%��]n<¦�� ���Z��܌�h˘ar]����jtI�[%�SVk�;�й����
+M=<�C�8P�m%�
+���slfhF����Ҡl7[h�4�\�BPBp����kc��������pS�Z�������F���6Ԁ`r^R!*�.>Pȓ���F��	�d��B�WLd�����)���E�ِb�Q��/�'�x��wz��A �
PJ(�=ķ��N�Ҝ�(�P�n���(
e�"�3�_�X��@�gL4B�>	ei���ʊ&{c%ME�S�E�=���y�F�QkM)�	�v��
k��|�+�ɶ�
������\]Uz��x
�b6ڌv<���C�
�獏��
R���Ě,��K���}��!��
�~˧kև�N� ��\�.��G��*�{,�Ĺ�B�S��V�n��8
w������������&�]M�P�Uf�U�y�sx������S���:a3mH��;�X�dϥ����
�4GsR��]<��Ѿ��eT�����%�R�f�
�{���{�L�����?��?��X�E.
+endstream
+endobj
+1300 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 282
+>>
+stream
+x�cd`ab`dd���M-�u��Iq�~H3��a�!��]�=��,��\V�n
�n
�E�7	}������A�����b�b���ʢ���РpMmm
������BR%LF�%�83=OA
�(K��/�M�+�Vp����LVHϩ,�(VHLIIMi
K�I�Vp���,(�/S�p�T0200��~��I��
+A���y
+~��
+>
+��)����


L
+z

�
� 7��+�����Du��
~7�MM��^��k��
;w�n���+��#q����lk��+p�Y���]a/ Te�
+endstream
+endobj
+1263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.102 518.191 210.824 530.146]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.061 482.326 203.765 494.281]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.17) >>
+>> endobj
+1275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.128 432.312 124.851 444.267]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.385 432.312 269.089 444.267]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+1277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [289.729 432.312 309.433 444.267]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.25) >>
+>> endobj
+1278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.405 420.356 290.109 432.312]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.21) >>
+>> endobj
+1279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.899 326.58 411.621 338.535]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.852 314.625 135.314 327.218]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.2) >>
+>> endobj
+1283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.237 172.222 461.941 184.537]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.299 135.388 481.022 149.309]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.565 88.457 258.269 100.412]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.21) >>
+>> endobj
+1281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.581 59.614 406.394 69.577]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [381.46 52.142 391.921 59.271]
+/Subtype /Link
+/A << /S /GoTo /D (cite.OzBa:05) >>
+>> endobj
+1290 0 obj <<
+/D [1288 0 R /XYZ 86.4 726.045 null]
+>> endobj
+984 0 obj <<
+/D [1288 0 R /XYZ 138.673 602.201 null]
+>> endobj
+102 0 obj <<
+/D [1288 0 R /XYZ 86.4 381.094 null]
+>> endobj
+1291 0 obj <<
+/D [1288 0 R /XYZ 101.643 81.532 null]
+>> endobj
+1287 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F11 787 0 R /F10 1095 0 R /F16 729 0 R /F38 785 0 R /F7 1094 0 R /F1 1099 0 R /F14 1050 0 R /F9 1096 0 R /F49 983 0 R /F19 1270 0 R /F18 1272 0 R /F21 1273 0 R >>
+/XObject << /Im3 1262 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1310 0 obj <<
+/Length 3315      
+/Filter /FlateDecode
+>>
+stream
+x��Zݓ�
߿��Z��t:�K�\.3M����!�t��l���}����/@P�>h�n��>욢( �@��j�JVoo������Wi�j�W���ձ\��Z���v�Sē�5�L��Y{����d��ZX��X5�6��Z���w���͇ԓ멩�J��<���K��›�VI,R����=��Hc�r����$c��9���M���h���Q{��;h�	4s��
�[it��=���-�=ugԻ�ʒZ�—,j�"���hhd}�nY�?�O�芏�JGY�W�
���س�SGσ�<�S
F#�u�F��k��Ty��0�0<��D�E�c�	_d��:�
��->�-7�ufUV>5E߮�	���}�t��;\L�;��ԻAE�ǚ��j��F[��j��5��7 ��8�!�N�炄η	�%":V���Q�݂ 0ױr���{,E���X��#�d�J9������G�Q�e״d��Z�L뽷�߂ř��S#,Z��1�|%b�<I�#�ڧ��NW���;�����p+��?|�55@�e�����y [...]
���UjP�2�4(Y�
jV�!�q�A���)3[��2�V�`N0���
+x
+�^���4�����4zj���D�^m	�4 lE�����Y��:{�ۼnB�*6��¾/��= ��4&4�
+0"+i:p1�

C�!��ʪ-5�^�
d
=��%=�j���2��I�d�,Ǯ<
-
��z�߆�B��x_����ۤE0�>���%#�Ա�9`zb�1)�cj� �P�z0�1fLH���``Fi'��V���x�D
6V9P�SڇT��kA����k��ٶ!�5vX_����K4Kl`�4QN��q���L��#N	��i�4�	[��
�y5�·t|P�,����+��ab���'�s�Λ	B)���`G	� �U���y���ux�`,}�P��u�!���
f2�y f� |��'�L�R
�yNu\lD�q�\�C�JH��U
+��T���~�
�.S��}���д

z�L�9�`�z�th+�e����i�Rp�zO
��\	�bq�_ at J���K 6c)98��,��@9q�t��7I��Y�2���io
	��0�f
4�~,W
� 뒀,>��Ar�Y�h7
�L20�k��
�&Q����%���cc�<-U!c
��M�
RZ>��S�)k儫��F�8Y�B/e��傆�,m��&���@}Ek
+3S�T^
cV]/է��jl�*�)X
+�a�̕�2YX�4�s�����6�
���N$�Q��1�{w�t��< �KFh߻��9�A�
�wi
[�
"#�К�����|�8:Ĭ��i	)�r0j�V+�KC�f���]�
�rB���/1�ٝ�̂a4`11`ȥ���Sp�@�(9��&_���&����U )^��Y�π�I'xT-%T������C�]�t��G:�B�&�1
+6�����Ԇ@��
B�~�;k��
���V�6��'	,�v���At��n�3�)!��X��w*�6&ð0&�N����ʅ�rrQs�E��E�l�6�P8��>�%�GB�r�
3y��������
�$������_7�d`�	�+R�?fJ��N4u�f$l�G�9�ф�&�?xP��?(S/>(��
��М3
J�q�԰NԘ��� �4��t`8ƞ�O`�d�3 a��57���z(z��A����QFC���}'
�?t���.hM��:�6!�J_5H�P�k	�R�/SW(kSgk��ʗ��eQ�YM]�+<
��N���@�0
Uv�Us��a]��Ǭ��_��+����ԠBj�״{
�,�ǀ��E�M�X8>c
�i at -�E���c^���8:J���ө>f�
�#LG����
�7u�)���W�ѩ����T��𜈺��A%})k�"�='�t��������:�)kinτ��/���%8��V��~>�gA�� ���gѓ�
A�F��
�qgN����+sj�O��NL�C�9���38��g������s(���s�El
��x(��g��c��9��Nu��a�l7C�3^q��Z(:]i�����
+�R
�Ĕ�/��Kn����`6��#�N�2�0� ��߬l����R�X��;�<�'$�|����
6Y�~�=�h28
�J����:!7�v��� ��/e:M�^E�i)S����A褃[�v+�=�lء������%
�eY?�!s��~<
&���������K�	g���<5���+^}����1��p�
���D,-�4����|�RZF���V�6o��l�j�);��K�a�N��u
�I5x:Y>V籠<T:�С���o����Ƴїy�	J�wT�qè�sG�@RN���
L�Q�h�{zz�*�~��~ù����ziɡ�eV�����L�
�
~�
���h6]��|�5B-�U�L���g�ڻ_�e��~� �Xƀ��&k;��6r�b�b��WT�@GEHv�N�M�GWG�=ue�
\,���
da�����ቲ
�n
@8j�{�\�<�
�U���}��k?�p�e.龠o݄
+}���z����r@�4��(�B�
n�!��ͫ-�HQ��_/xC�}D�~_q� ���?�/�P�D0��ғ������>(\�>
+����Ir.�'EZ�UE���%� (s��ш˒V�@��>���y�'����+�*<�W֊%����9�o��|ѩ��|�c�*���~w|aFh!��BF�yC�8�D�,���%(�1�i
+�~��'{�'20��z5愋�8��H���C�𩍃:���
���ٕ���[]
#.t�t�̕�6�c�v�:���F�$�ė>r�ũ��H�� ��O�J���h(�x0�G"X7����	㐁�&{�\�.��P=
�؁.���6��s�Y09��@G�OJ$��ߩv!�R���� ~GJ��S���@� O2eW�:1{&��-L�չ'4���HT!=�L
S� J%$P0{
*����o]�դt\
q��	:ڎ�c��
d
��jS�+y�,�� O(6����
0P��'
+\i����O��u���s�}1\�����Ef��nj5�t.o�j
�T\-]�Y�:�]chQ
���J�/]�a˓&a��
��P�p6�d��!�A�p����>� �b�S�EB����
+u��G�F��.���P
+0
��[�)�xp�SW�0K�
d�9qcz�>%f�
+������6
+endstream
+endobj
+1309 0 obj <<
+/Type /Page
+/Contents 1310 0 R
+/Resources 1308 0 R
+/MediaBox [0 0 612 792]
+/Parent 1222 0 R
+/Annots [ 1286 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R ]
+>> endobj
+1286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.589 652.377 183.051 664.416]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.3) >>
+>> endobj
+1302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.377 415.714 401.081 427.669]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [245.029 370.384 256.984 378.797]
+/Subtype /Link
+/A << /S /GoTo /D (cite.OzBa:05) >>
+>> endobj
+1304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [126.84 346.474 138.795 354.887]
+/Subtype /Link
+/A << /S /GoTo /D (cite.OzBa:05) >>
+>> endobj
+1305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [509.106 334.519 521.062 342.932]
+/Subtype /Link
+/A << /S /GoTo /D (cite.CLPS:03) >>
+>> endobj
+1306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.003 276.237 147.725 288.192]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.956 232.402 167.678 244.357]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.2) >>
+>> endobj
+1311 0 obj <<
+/D [1309 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1312 0 obj <<
+/D [1309 0 R /XYZ 86.4 503.777 null]
+>> endobj
+1313 0 obj <<
+/D [1309 0 R /XYZ 101.643 62.603 null]
+>> endobj
+1308 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F7 1094 0 R /F11 787 0 R /F1 1099 0 R /F10 1095 0 R /F9 1096 0 R /F6 1031 0 R /F14 1050 0 R /F49 983 0 R /F16 729 0 R /F19 1270 0 R /F18 1272 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1322 0 obj <<
+/Length 2864      
+/Filter /FlateDecode
+>>
+stream
+x���r�F���2� �
��ri7�7����ڂ��5�xXV�~��g� A���j/������n��"X�>
���۳�D��E<\��/�ȗ���o-n���M�ku}�*���_���=�W�b�'X,e��L�
�2/Ӵ�m�N���ͫ��ͤ/d���P-I���Η��лy������"S
����D<�D8�cΈ���
�x��6/
�=��`MU|>籧�j}��Zg��VM:�E�sX��Sp�9���,O��!���
ު*��i�)#��8R���3���*�I&�*����B�{��2�� (J�
��x��
|�#���}U�o/_!�b)�K�, at _~�V&�M��
�`/f�җ�tt?�%\~�*�/cyp�
�WVe��:��b���4_����K��19(�G�WP��
�CF@^LF��d����%ZS
v�<Ό��B�]�$9�_)>�\�e9�����M�`w����oр5Ky�9��U�e�!���0��)qo�`�3�b
�<��q��B�Q�I���ޘ�v�
�^>W��4����y���H(i���ot�U�K�� \�8��~f8�?j�k�r
f.���L���@�(���h��<��?UN"$̭n7 s d�
+o���
�8�ѭ�0%���P|O�ͬx��dzLֺ�����)FB��;�)�ŦR3��Ǽ���k�ZTTMC8�?|���B\�6�6im)n�8�Bwg���,/���Xaw�n|�x�]!˨ :v��:mп�<`:t��h��a8�;C�J�3�S
���G츇CQ��[k
ady
"��G�6mݭ�����&miA�Un�C���i
Zj����|m�i=X�E��
_޽>[|XJ��J����1&I�d�����B�?�喕���ČX��
��D
�`ȱ��KW���y��d�`p=8��#�M��)/һB���2��"����Pk
�+W;�]�E㩖7�,(o��D�>r�Nې���S�{&��N�
"��^PY������"���%*�޴&�"	^ 
��I�D����
l����><g(���)kgxU~����9b�����!��c�7gh at NS=N��.B�
+��Aӥ���M���(4��,�6Q)���+�bPANmw
�_>eKR4چ����F3�9�L��q:�L�.��
h�����L
�����*!�
U�P�B��T;�R)%1L��G�Vy�YY�o��S���|1԰(+N��G$�(�&����$2x!)�'݄�#�
�'��2{�W?d���W��+�j|�To���w]���vmk�y�sp�B��w���R0�g_�P�c�'�gޱ"�8�qC�f8
�ޫC�@��	z��zCcz9[�ɸ?��3�
���8gK\�����4��Ϝ�U�%	
��|�αې���_Y�>mG��M�)<�wC҅A�|�_!�G�{t�?f�Е�(�Q�l��n 
�R��
����Y�
+��U^��M��P�@�1Gp_I�H���/��.�u�4ۺF{�x9܃�վ�MH
��U���%��KZ� on��<�#�^\�̸��˻H�uGc��$�����M�v
�����gYa}��8}�B
R�>
��)D(W�k�����%q��Z��wi{Ec���	�:�,�֚�^�I�ǽ�@m@�FS?;���HSbj��-plC��g;k0
�XD'X
X�P
X
�@�
����d���@��#}���5��@0�8���l��;���^׽��b�3�_H�8����˷�Bo-E�7-����
|��(
W�i�g�G�����
�b�+	Ai�1#�W�g����($�@�_��g�
+,A�
��q
��	������4B��%�І��)�)|��c�	Q
��`F�	f�F�v�6��F��M���U�j����=,E½�^�*�U>��G>E�
t�Dxo�C���
���D
������lG(&& �1��迮몶{]���
]z��gf�a:'
� (�H�G� t��iBV�!\�O���R[]��Zz�,���Vs
2��)M��
���E
�!�܎�BA������"��P0�]���&|�1F��} ��� �5�f`	
+��΍�f�%�
174K 
+`?�ÒQ��jY��δl���S���,���0Q���!��pU
+���H���	��F[1_�ǒƅ!Vzn�Xk�
��6���"�Q%ܬ����K��|<�t��X;�X�2�m
���ņ������nǩ�/-��Y
�Jf�n㒥�

�쌑����
?�;��QN*}ǀ��=�'3t
��fs_j�?��|_j��'Lb�6���N�x�®>Q‱�D�U̅,NOj�����}�:�@I�(��^�oq�+ڴ�U��u�p �����D1@���_h�>��uH�3�l3>��4S�L{��Q�����l�wLRf�r�e
[񿉭�jB
��]�jS�l�4j�2eј
����T��\��&ð'�lUSM5[N߸�t���`��3 �`����IŞ�m�tj}$���VU]����j~�
4z�CJ�J�q�P~������ⰜqUH�����{Ꙅ�	�#Ƒ����\����ۋ7�޾��+�2!UI�?`B��:��L�^�~��ݫ�C��\�3�?���_M���tڠd?��r������K�O�
�¢�t�R��<�ʡ����&�Ĺ6� �%�}ڄ�%$2?
8��Q�
�[���'W49��x�a$���%��|��j��YG�(��Қ<�~��x��SW���4u���
VT�NQ^(##��@&k��V��Q8����G���؎9�s_�fK)��7�0�k�=�	�
���
+endstream
+endobj
+1321 0 obj <<
+/Type /Page
+/Contents 1322 0 R
+/Resources 1320 0 R
+/MediaBox [0 0 612 792]
+/Parent 1324 0 R
+/Annots [ 1314 0 R 1317 0 R 1319 0 R ]
+>> endobj
+1314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.72 423.776 422.442 435.731]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.1) >>
+>> endobj
+1317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.926 205.622 411.648 216.47]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.2) >>
+>> endobj
+1319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [109.576 73.562 124.299 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.5) >>
+>> endobj
+1323 0 obj <<
+/D [1321 0 R /XYZ 86.4 726.045 null]
+>> endobj
+106 0 obj <<
+/D [1321 0 R /XYZ 86.4 701.138 null]
+>> endobj
+110 0 obj <<
+/D [1321 0 R /XYZ 86.4 521.972 null]
+>> endobj
+114 0 obj <<
+/D [1321 0 R /XYZ 86.4 269.729 null]
+>> endobj
+1320 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F11 787 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1327 0 obj <<
+/Length 551       
+/Filter /FlateDecode
+>>
+stream
+xڍTKs� ��WpD��-譭�6�L;��4bGcY8Hn���EB�cRgz�=vѲ��`�9�P$��@#-��Pq�S�$#�(�=�4}(n �
)EB���ҌQX�0(���i�?��\ӗ'���%�1 �@�K��&��!s0bZ�_C�p�
�,������34N)J�h/	F�`%���|HNmc`v��`���!�
��	� 
Q G:�� 
'��(�,�	�f�P��J3�)��Ym��ϔah렐బ�ڛm\��l\uϦ�g6.�76.�Ӕ
�n�άz�M�hZ[�h]5���Һ:�������a��m#Ə`��mm�R
;[��G��&�`�L#.E�ӫ��������U��s}_�K��%9�RNn1~�R
+]�K,=U6k�Q۫�(�J��2��J��`A~���j�����mMP.�&|ˁ��`�
Hå\ ����h��ɂ
�+oW��dm���n?��+?�n�W��
�:ܶ�B�<
�E(�
+d4�bd_T��d��
����)rq#1�p\�������2�}՝�_���� o
+endstream
+endobj
+1326 0 obj <<
+/Type /Page
+/Contents 1327 0 R
+/Resources 1325 0 R
+/MediaBox [0 0 612 792]
+/Parent 1324 0 R
+>> endobj
+1315 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./sunorg1.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1331 0 R
+/BBox [0 0 719 456]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/ExtGState <<
+/R7 1332 0 R
+>>/XObject <<
+/R8 1333 0 R
+>>>>
+/Length 1334 0 R
+/Filter /FlateDecode
+>>
+stream
+x�+T0�3T0 A(��˥d��^�U�`nha6155Գ4V0�3762���&F�
+.�\�@ }��
+endstream
+endobj
+1331 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160728-07'00')
+/ModDate (D:20151010160728-07'00')
+/Creator (GIMP PostScript file plugin V 1.17 by Peter Kirchgessner)
+/Title (sunorg1.eps)
+>>
+endobj
+1332 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1333 0 obj
+<<
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 958
+/Height 607
+/BitsPerComponent 8
+/Filter /FlateDecode
+/DecodeParms <<
+/Predictor 15
+/Columns 958
+/Colors 3
+>>
+/Length 25421
+>>
+stream
+x���	�չ��N� Ⱦ��

+
+�b D"�I@#D�E�""��b���;��
+��q�`�"( .�(qe�,�0���JQ[W�������{xxzz��O����Ϝ���7�|�   �����   @Dg    �3   �   ��
   Bt   !:ȴ�K��������w�|�Ŷ/�n�t�e
ڵ�g���vo֣s��uk'�" (*�3��z}�GSnyl���nHZ5iX�
vОI7 ���
 ��_�ʟf?�t+J�q=;����I� ���
 s^_��ɓg�ۻ���q=��wE�����%�0��o�j�G��ު���㶺�����!ن@q�dKՎ��ܩ�ithW��3�6iX+�F�ϖm__q��E/n�ռ��}��#�4��t� ��� ��%�O���ƛﻼ�Y[ՎoN���?�T���?t�o~�t� ��� ��ϳ������������I7'�^\Qy����j��[�2qh����#:Ȗ�'�~}�Gƍ��5?�:I7'��o�������g��7��ts ��� ���ȫ�vT7�ئ~��'ݜ��:�uㅻ�I�% PDg ��u�tuㅻ [...]
+�Άc��<w�ز�Z����6k�Dg��
+�3Dg �Bt�-��
�*�z�0:[��kt�.g�
�i�P�qFgsɇ�����Ú��Fg��
+ܟDg Bt�-ѣs�ȫ�7n�*:���� �9����
+�+V��Eg�[�����л����:`t��WYY�`�It�!Dg ٢��ƌ�P��S����ye*���֑f�1�謂���K.��z	3�����?�� 2��
 [��:��3�1n��l��>X�®q��l������l.V=E�hs�8�\g��
+��
 S�� �%���T�5�^�y���ͼ{�U�D�ζ�϶^a�k��	�@��dK��:�Y�Q�zFH�_�N��<b����
��8/X�L{†���z����u��+x�#:��3�lш�*�Zg[������V[tv�ԠWt����c�-Z4�.�J�٨�������Et '�3�lш��`3���^stV
0[k͋�ٲ�����}���#�Ư��S-1��Wtλ^����
 C�� �%��D�Y�;?l����蜳�0��J�;�\l^�μ2��zs�j��f��WDg �Bt�-�s�́d���!�9���kt�
���"�ŋ'�x���e󅌴}�=c�8b�tλ^y�d
+�@�D�� ��� 2��
 [���":��3�l!:Nj�
 S�� ���
/�3�L!:��s��� 2��
 [���":��3�l1��v�(�^��)Dg �Bt�-���Z����]��l߶"��[Վoz��P�&:��3�l�x��E/�i�8�w���K��I��Wy��O���m~�%'&�
 (8�3�l��+��L�&�U�2�s6��r��G�l5n���႓�&�
 (8�3�lY�y���\��ڸ=��ѿ�5��բ�N�~��}����o�d� E at t�9�~�;�ۇ
Tg䀆
��N�I������B�7�������N�I P
Dg Yt����⽤[�>�߫ڱ�Yc���o�8���,�&@1�d�]
^�5�y5sC�O�oi٤~ҭ�ӯ{�����_�1{ YAt�]����G^�ǚO����x���J�H��
�i�|�
;hϤ� EEt ��8z���NN� ��":�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��B
=�7��qҭ@p���ؕ�. J��{�z���I�"���B1ڔ.�K&�.�K&�"uI
+�Y(v�t�^2Q�t�^2Q��KR��B�K�
�����
�����D]�Bt�]"]��L�%]��L�E&���P��B�d�.�B�d�.2Q����b�H�%uI�%u���$��,�D�P/��K�P/���L�%)Dg��%҅z�D]҅z�D]d�.I!:
�.�.�K&�.�K&�"uI
+�Y(v�t�^2Q�t�^2Q��KR��B�K�
�����
�����D]�Bt�]"]��L�%]��L�E&���P��B�d�.�B�d�.2Q����b�H�%uI�%u���$��,�D�P/��K�P/���L�%)Dg��%҅z�D]҅z�D]d�.I!:
�.�.�K&�.�K&�"uI
+�Y�W���٥���?�~次G���ۦG��ɵ
L�%]��L�E&�"�Y��7n�vҌ/��m�?z����j�H��z�D]҅z�D]d�.�e�|�c���zϑ]����!I����L�%]��L�E&�8��,�7�����z�D]҅z�D]d�.�#:�c}C�[I���L�%]��L�E&�,��8�7�����z�D]҅z�D]d�.�":K��P�V2-��L�%]��L�E&� ��ݚ�7��⟫�����}�ns"m���o>۸�Iú�e�i@��
�iۼ���z�_�V�iC@�+'�^�%'�.^�WNd��K��x�.	":�WՎ�Y�k�KI7��ј��[Q�_�g
�Y�n�bG�\%^/��*�x�^��uqE]��KR���26��'��ǚϒn�Dƛ��&���?����`�����ta?����$��V8D�o�������j���
�wm�F��J�;k�^���˶���R�s�A{^=nP����^Vr�E]����
���S/�bE]d�S��#:�xg�g�/�S�
޿����l{�xd��)��W�/?s��d|�'��l�����ta?����$��VPD����۬y����>�-�n�,Wܱq��_7ztnٙ�nN
��#�zQ�G��~$u�I�񭠈�5����g��cܸ��&���K�9����j�����3�i�QI7���`�����ta?����$��VPD�G�:�m_7e��I7G��
�������]�$��z�H�^���Q���D]dx|+(�s��ç�/ܵ{�-�����
!���T���?��ta?����$��VPD���������؏҅�H&�"���[A�k�K���KP/�Zdb?J�#���LҎoEt��.�O�.A��qj���(]؏d�.2I;�ѹF�]��Ww�>���Z�x�1���
[VVk۶/���-{o��~W]5���㎻j�����4�4運/~�|��%��u�W�������[�~i{�Y�N1���v߽��o_]�N���I�%4ꕮ͙���!3]DZN-fQl���Qf���q��m�B��؏�B׫W{��i������':���H�~P��xV���H�b�gil�$u>�ݙ��
��wF!��VPD�Uj���٨Q=c7�s��j۵m�fbS�*�G�B���s��G�t�v�˅/_ZN-�5
g��t
������i[H"{V��#mAB[����=^[Hq�e?
+�@U�~�
++]u	r��*�����ٿ������5�
�̷}��g�GWۨ����uW1ӛu!�bUts�ʃ<&�v�P�JW�l��|��h�w���Ԣ���>;�N���7�)����ظq��1��ܜ��]$�Y�ޏ�pM>
����B�#�Qp��B,ǫ��U���y���ַ1�蜷��}��G�񭠈�5�U��׼��j�;mS��Q��WPԆ��G~��v��XGL�
��]"x�RW gc\�N��RpjQg�>}:�w�/�8br˖���%^�t��EQ�l����)�����(���-�s����g
)�T�G��
+�
��JW]lG!�#���:ֿ�
�"��[A�kh�lc�^��0kVS��uk����_QQ�s�
r4�N�.�^i,�9�D�8��>7�\�ko�<"�mV��1k�n0
+d;�v>OHسһE�3����R
�؏�+P���JW]�
�\K3}�	��
��=�O�G9�i�v|+(�s���9�p��xd{�u,�:���~�֮[���l@�?�I�%�F�t�9�6�M������<=�����b�c>F�`�@m5��g�w?�(Hh�v�Q_�-�8��G��
+яWa��.A�T^�y����wFg���r��&��VPD���ζ���@�N�N�v�أ���>����]ۏa�za�i�X^��c��Y�ݏ"�m�[HA[k���R�*D9^����9Ry�F
�T9Ǝ��u&�k��
��\��6r;O	����d��7�r���$m��}�FNj�����O�����p����[\G\�qh5*c�(i{Vz���4�
+�o!m�I�~J��w�
++]u	r��)�9���~�3�����#��QPD��L�8g��u�5߯�����O�&�8?��([�*tֿI�.�c�b
�L{�ӿ�D�Z�����.
;�:��p��ǘNqN��g�w?�(Hh�v��_���&��QX��B,ǫ��U� G*��؎�{�\�ơ/B��:�ѹF�C��0�k��?��;��Q�n��)׫��B^G�|!.N�#]��P)�:��\����J���鬵�=+��QyC����n!ř�!|?
+�U��xV���H�_�����
�z^���d
�
+��\��_�b��sa�Bq��1�H�%��J�
!r�#i*�����z&�N�q�u��
��ͅ8/�bkC"{V��#ma��#�R�9����
+T��ǫ��U�o�~��ϻ����(9K�G9��O�񭠈�5
+�Eܮ��zG��I��_���K[���
��2ɧ�)49�uI�;�>M���C�
+�}��*��c�ڳJ`?��+��l!ř�!y?�P�*D<^�����_b9�����a����"�\ȏ��� :�(�)$�����_�N-��~�.�G2Q��
�
+��\�]Ÿ�]�z���"�Q���D]d�v|+(�s
v	�v	��S�L�G��~$u�I�񭠈�5�%�I�%��?N-2��
��L�E&iǷ�":�`��'m��^�8���~�.�G2Q��
�
+��\�]Ÿ�]�z���"�Q���D]d�v|+(�s
v	�v	��S�L�G��~$u�I�񭠈�5z���jG�\��&
k�}|�H�%�����E]���
��L�E&iǷ�":��ô���YS���l���u�n�,����؏��ԭ�čg$ݜ��G���.>؏҅�H&�"���[A�k�y�3s�b��}X�ɧ5I�9�ܿ����ɸq�~�_w�o�nN
��#�zQ�G��~$u�I�񭠈�5^\���W~�e�ם���j'�
9�����\��f#9k����%�ՠ^^��u��~�.�G2Q�d
�
+���-c�0v
�FE��F
װ�au[5-K�QIڲ��E/n��/������c�V��rbE��>�^6B�E]l���
��R/�bC]dR��#:k��C���bۗI7D"cO�zܠC��-����`�����ta?����$��V8D��zg�gSn}�k>K�!5�l��_�"�V�hմ�'��?���
�׋��J�.^DՋ㞉���.&9E�	�K����_���eᄒ�#u��|��VMwI���Zz�
��*��/B�%�(&�^��$�.^�ԋ�
u1Q	E�	�K�������?:9�V (�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%]��L�E �� ��P��B�d�.�B�d�.Q���b�H�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%]��L�E �� ��P��B�d�.�B�d�.Q���b�H�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%] [...]
+��\���ׯ߼5�V�jGuEyYҭ@ 2�b�.��qO&�"�̢Mzv��I����5���t�n2�b�. PL/�uN�M(8�s
3:?q�qɶ   ]��x��At�
+�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�9�,q [...]
+�Ǩn	��1vZ\����}f
�
+���v[��w%����ΙCt%�A*�����\�=��tkm���:TÜ�w��{���A�l硰e�kg�J4:�j�S����I\�9�v�{��r.������W���.]-$�謄괈�J��Y���^t.�Y at cW�؞��9D�P
���Y�8����
���M�ӭ���u�
հ��`�S�H��[4^�\Y�v��T�sؖ8��s��ot��LE��Zl�4Q|��U�b��T�+U��
dx2�MEBt�:�z��WA��(q�"Gt� �s(�GvŚ,��������SK����{-�v�u=�bۑ1�i8H���~X�m��Ow�b=7x
���K�I��a+�7F�eV��8�
�m���a���ۭ�zY����n~����(�_����
�l�\�~���r�m*6��)����_l]Q��@�U�=#/�s��C�9Hy����q<�����<�l[�qc�	Oo��?=��3^'"
����
�K��e
+�N�J(:k�ĩ��Z�x���v�\��#�&��/籿D	d>s6��5rqG����oS�)ftv]_��\г@�U�=#/�s��C�?H��G󷶃l���2t
�O��
�A�:<�sX�0�_�uVaF����
[���ԨT���FK�
+�s�F��P�m\)0�旷(��EV��ٮ����
9����\�@�Qg�5ǂ�9D�P�gz��w�ck^���>���/qAV�g(�:d�8Wtv=����t�Y�R���z-q�7:�4x��s���3��6Bm�>�e�l�6��E1�)����|��4�(��r�m*6E��^�6:�,e�M
3GAt�
�s(a'�:OfA>����7~�U3�O&�F�7�z4�ّ �_��V�E����?�9H;�*��1Ak�8����x���o�t�U�
F�c�A��i_x���N>;����
!^��e�����;-�M�&`t.����ms�?
h�J��ȋ�9D�P�
�\��y2�J�ϸ6�q��j�Ot���@�+W��9�O���l�2�m�^�
+
��|">��l,�����P����s��6,ž�!:���\�(����Tl��}��P�/�Y@�0�p���ΙCt%�A*��,ި�2}��<8�����&':[�^)/��j��1�
d���"F�P�m._����+�ͯ�����f�4��
<J�괸6�bFg��
��c�g��Y��)�":g�9������|��CO����:kZ��B5,�=�9xt.ܥ�\?��La۩W�B�u�{�":[f�e��W�"�u��:[��}97�B�uVl�k�֭깡&/������Tl
+=�9����T�1
f��
�s��C	~�ҘB�
+�C��x��W��'�|����Nb9��=Q9?s���s��Wt�����X>���5'�5�Y_�ͯ�W�PlU��k��Ό��0�Nsm���bS��	��o�J�,j�5��
 �9s�Ρ?H��'�?a��G��^~9�7�Y��]��Y��u<-\t�;�
�+tt֨T���FK�
+���!Jt���z}�f�W����
+p]gg������#w��@\W��i��D�Tl�s�
��
^������s{��~�3��
J����r�����
+2Re
�q
�ް\�o�
�>aú|�Y1ѿ^+��5*U����E�cÈ�5�[���U�����^�
�yO�
2�k�����nشi��o��Q(Ƌ���\|��M�.N絾�+U����W�8���J� :g�9����_
���?�����9e�V�a�`��r�\�|!'��+EьR��}wؖ8���sfj��	���|��4�ۀ��u��g�^l=��1 +�:�|Gj]����v\��
���l*6�?&q}�E;
�]e����ΙCt%`&���ܼ��?n��ӡ����x�M7i7,�6%��닸��ˠ�xMJ)\t��$�,{t���E��F�q��~�uۭ����j�
��+���9ǻY�|c�̅촸6�5*tt�Z߀�m��������a�3��
J�L�S��c�Q���g�A�6�0b��+VFlX�#@��Bb��>
�y�P���TA�s��84:[7B��|댫�
z��v��{��y:����*ū(��ڞ�W���B�;-�M�k���]�7�n[̳���Kc{�+�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt   [...]
����VI�����I3�~�)�V �޷M��[����;	J�a��'r2 ��8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
 ������������n�s�I�v��ڴ�5�vq":y��Ϗ'�������;hOu{P�N�z�\� @#:w;iƗUն��v��{�J�I@��@~G�����{jW�=w��f��' [...]
<O
�wĀ�I��Ӌ+޻�E�ۜtC �]��
G
wx��
�n����� �i�Z��~���[
�$ �KEyٳ��N�¢3�o �B���u��B4 ���]�$�aљ�7 D�qj1���\~j����N��At�3�O\t\�-�t9��y��@�!:{":�
�3�REt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgOy��
:������ι�k�.��.]�����u��]���zu�G�1b����
?����;ͥ9_�M���=Q�vm뒫v�����
X�`�Yg���2m��i3�q]�W'l߾���C��Ze[es������)�
��>��e���k�w- MA����z
�a��m#N3ᢩ���G
���Ɲg�{��G�Z��� �1={��rşz��`c!���a�E�-�]���q��K�cG���x�
�f�*+�.е��f\���Ì3��f�3�3a��t�����և9l]5�
��k���f�cl-1��h��c򮝭�

z��#\HCt�T���9��Egk�uM����J϶Xl{93۞e��7\_V��O'�%�o.�i������>�ٶF�k�Ȋ�s;�Ak�S��Œ㏊�F@�ջo�T皌6����K�������*�9H���Wf��	�9Gz�>�\��R֖[�
����::�"~��
وΞ
+�����#�*z�Y��?����-���z-�
�5_׶4d��z���c�I�e�����8�m��[��-^�
p���"+Zt��[#�9Tl�t�N��cߺ���d>�

+5c.�6�l[�J�9K(4�`.S����S۫�>�ˡ�|�/.՝���W^2���j[�������3�����=(:�
�9��۫{�����o�	͛53�V����n��
�Ij���ag��
�}��Uc6mެ�mk�^=	�p��s�9�Hg
d�*P�<�y�&�T����W�f��9���
UBU1w�->��΃O8����^H=Ҹg�=�Y��c���^�)ht�-��)@��Ξ
+���7~�U3̼��U�4�r��g��h>�u	>s�Ն��
kD�ޯ^���"�ȱ5([3�zp�U�F>k����ϻp�U�Mnּ�j�E.kP�NlP1.o�s
E��|�5�Z�
���(���6�j��f�����qg��8e��5�u|`��g��p�٧��2:A�us����9�ڀLDgO����#����*��/�\gs0�=����vm��hF�6m|�¼�67�9\mmF���
+�	ƫ��wyW9�����+Nt6��K�jdG�l�ٖeՏf������?m���l����a
�{��ޫ�ն���yWN�t����Z��WGs����9��N���ױ�uv�<��[��
$���@�YeM5d{��SCEg[�
�D�L��}�N=%zt�M������������(��EgUԻt����l�	����
+�ή3}�+>��k��<��[�:���u:�
iN]tVld�3�":{*Pt����ᇡ&l8�#���0?�|ʯ�5��h[�	���l
s��L�&>=
p�lk��
������ff�׼o�#k��1f�p�f“9a�����L_�p�s�3��>=�L�2�?��-:G��ѤYs��1*:��еRy���&o@,����Eg��Fg����,���^���̮Ͷ=�z�9��	Z��y�fO̹�K��7j��s�>=�F�k�:M@A3:�.�f
��ȱ���56�X�T��1A#�^1e�3��|L��AC��♃��aWk�?��_�7�X٫���~t~0��kg.�믿q���1����
F�7-@��=.:�v������5�_��L�^s���Fg�P��w�S�6�4x��s����O��Q޵p-��)ft������l�<u
+믂�:�%��^��� \�ęm���l�q�:Ҭ�ֵ�]������Gg�
�krr�=���_n�}�񿀱�J��uV1�޹s�W����kڱyqe׋��<&�8?�h{��+Q\;�vq�\��pQ���o�k� ����9g	�������/�7�8Cm�#:�j��uq:��
�I-Y=�G�[�s,_���KA����3�>t~%J��������ٌ�A�����{�9�ڮ�����{�)>WA�囶am��a>�
���P�
����(�Z (��Gg3nڢ�y�m3`t���"n�
�N3�� �����l����� �k[
g`u�p��{g7��n��
@����� ઠ� Dt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgODg �CtP���� ���
�T�=�@�@�":{":�
�3�REt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgODg �CtP���� ���
� [...]
I���rD�4#:{":�
�3�����Et����V����7�n|k�-�;
+Ӵ�(��_����iԻc�ݚ֏}�%�υ�(%ӇQ���%ߟ����
Dg�sz�=iD�7�n������f��>����~���{��,�~.DG�(�>�"b�g�?������D��":{
+����i7=c�߶M�>�;�n٤A���l�h��Uk?]�²7^]�����̑=�n�0�%�X?��|�XFK�g�?C�����D��":{
+�o\�r۵m}ڰc
+ٮ�y�%�/}��
ͦ��-��j?��Q>J�����Y�� }Et�?�3�9��Ξ�F�s�|n����6��vm[�])SYY5�����)�;�,
,�~���|�jF���֟A���
A����<����5��r{��ZU_~u�ً�l�������g�}����4m�����Z��O
ХU���_9�����ԭ_a>��Ϭ�y�������%_?iɫ[k{�ރ���)�KV
�.J5���j��AtN;����ѹ��WU5u�Iu�T�]�3v�M��.TR��
oG�(�>�B��3؟y���
����MO��C�
������؜7��������*��p��F�=b�>*�Z=|�J�Y��E���Ҭ�[�ӨI��&u�~����^Ⱥռ��o�^H��o�֧�":�
��S��N3.8��mJ�xa	�sѢs	�a�����$:#�P�Y
���k��ɖ�������9��M_�Fg[�urFgg�����ն�m�x&:�
���9.D瀈��*��<�i]�y��]c\&��·�b���^?�λ�ol�Vk�.��e͸k�������0v}9gt�
9+��s�������)��iú�=ܾ}�yϐ�Ɯ~ޥƍ7V,
}�Q;vT��ڥ����[\�n=�)
5�����Tn�>zh�M׫m�lѺ���ki�۴�eErR����G�^5;�{o�g{�v�=�]{O�Ze^Oq�pD)�ήەs�mW�
�[Ͼ���':��ٶu����%
��vړ�<8q�u����k��al�o�Zn�3a����B���F6�s��/=�f��]�
����s'�t�g��ȸ֩�J��~h���_7��r��l}	�af�����L��&��'	��Li�8�QƏ��Χ�]u��;�*|�hh�V]��TD���0t�
Tש_���ڮ�ؼ�ڇ����+TT�
sj�>�{/��fl�F��G�ߠae�6�Ul�y��� $:{uڬk�ͺ�2�]��]U��ᚼ������'ǘ�sDgD*:��AF��Ո�so[nFg됰�q���5ܫ��s��5[�Eg��UF���9�s��=��ι�d�W_~�8S���j8�믿�;�� 
#��ٖ<���ymW�>4��נ����
x��M�M�ʈ�Fu�Ϲ��q˖��蜳���E眣Ӝ���,+�s��s�m���8g�茈BEg#)��+�{{�s���6#�Wt.�
u�yQD�#:{��U�3N���>ѹ�/���eg���������
泈ν�������ymW>)��O>��Qq]��D�hУw�1�ׯ��ت�c�Y�Ϊ�Ԑ��Y�7~�AtFDa���#�Ft�}7���i?�ꜧ���
+�^ѹ�T���F[�vEtN;��'���8A��~��d5�Q���x�~
�Ă��h�-c���;s��9�4�6s���XH����۫�[g��Cqݮ\�
��}��W��K3���G|YYit���;��G��v��%?a#o�Y'rDl at pDgD6:��Fg5*��~�^y���y^�9��t�p������6h\�l��s��=	��^���SN>�#ҝ:��g\�
vjRo��
f|�y��mF?o6���m���ěsή�
��ӮF��<j�ӏ�W� ���c�q����v��Y����}��ΈH#:;���P��c�s���W��]�s.�W�خ�����杶AtN;��'��9�
��߸m���#���1�
�Ր��n~��Ǻ]�	�j]'��.�'u���g���ؓ^?���F
p�:��h^|&"!�٧ӂO؈k��3"⋸���Et�$-:���z��
+_��#U^A<F������������NA>
�ڽ��|��[&�~��?���ʥ��G��l��2�Wrt��8�׳����LtN/��'Q�9���lYЌ�jhJECk�[��*������ψ�����b�����]Y/T�Ja}V�m�6a�x��8��m�aj��\gU��͚G#9:��&f�.N�ڟDg�Dt&:��ٓ��
�+Q
��W9#�:���[/�뺴b^�*�E�e�yب�m���|��9�7g)J,��s
�U�O�9�p��Y�x��Ӎ%=���yE��w�^
��9���(^��I^�Έ��LtN/��'��;.2��@)��%#��"DgDDt&:����9.D瀈��":GtFDDg�sz�=��Bt��,�spDgD��s��Ӌ��I/:_q�Ȳ�ؾL�4":�d?9:�dF1:g�?�Έh���o��QҭHL˦
f_��7�%���)lt>�W�y���n٤��J����	W����7
�xl,
,�~���|�jF���֟A���
�>Y���ob�z�Ξ�F�+Z��k�:�S����])���w�{�]ˆן�3��j?��Q>J�����Y�� }Et�dDgDAt�6:/�9w.1n�O�$Z����[�~xϼ'�UV�ѯS�.{Ʋ̒��Bt�����("���3`_�!�Q�=��Ά��}��n���UWW�ei�&}�
�Ү�ԡ�Ǹ�R��v��R��(���,�g��":C2�3� :{҈ΆWVz�S�V��0�J�ݚ��ݱ��n�ľ����u����(b����g��":C2�3� :{ҋ�  �3$#:#
+��'�3 �!:C2�3� :{":�
�3$#:#
+��'�3 �!:C2�3� :{":�
�3$#:#
+��'�3 �!:C2�g��ۤ�ۻm��?��t+��� ��MFJ�tݦ�[��l���w=Ѿm�d�al}~z��c�t9ą���
 z�Φ_���w�I�v������l�z�y��s��=�@���k�t����9��Ξ�� ���l":���w?��Q��
_Xe�ߧ������d���� ��MDg�\?��-���Ӄ�O
3 �� ,��'�3 �!:��ΰٰy���7��g�͓��s�Ӂ���
 z2
�����Q��r�?ỳ�
ܾ��4��g��Ӆ���
 z2
�
����W߱޳�n-n�4<��@��3C��Bt�Dt =Dg��3Cΰ2�rN
��'�3 �!:�v
xf�6��3CΩCt�Dt =D����
9
q냋�{�[!Q�n
�=�oҭH��'�3 �!:+j�!g9z���tl�����-.��� �Ȍ�I�8&�>�3цn	����
 zdFgy#��B�BFtE��Bt�Dt =��si�,�c�+�%��'�3 �!:'%
���n	����
 z��I��:FA���[B!:{":�
�sR���Q�?��P�Ξ�� ��蜔,�c�g��u=�}�6�
w}h�6��U?n߾}�#W�\>�1.��Y]��Y�k�������K�cG��U�֫����
+��� �����u�"Tt6c��������*�
���O>�ע�ծ]�|֐a#T,vf_�g����F�2÷��c�(DgOѣsU�WO����5뗿���-��5M��u��m����M��g�:�I7.��Me��Z�c�K��\��F��(P
��(��_����iԻc�ݚ��zX)Eg�Pb��Q����u�љlB�At
�C/:�̼j��o���]~�U������7aڤ	f��Eg��ǿ��s�|�EtN�������O6O}���m��Q�и~�����
M�nv��m2��[�k7\|�K|bd�3�u:��-�����
�ļu�3���r�O|q
wܼyS�1�­c����Vq���O
3�x��)�=xX._t��9E�Ξ�D��F��Qԫ{tϟ�ѦE�&���@q6l�b��O��u��z�)=}�Pd��&���z��|�M���mӢO�έ[61���MPee��O׿��WW�./�5sd��[6t>�d��3
)���5<9����,�:fJ�	�5���a��W��� #
�h���0�	�ϊ2׹gᆴ��b�(DgOQ��Wޛ��k��2��Au�T��4�n��'V���
v;`��ۂoe|�
.��{�•s_\ݮm�ӆ
S�����cK�_�F�=�M?���%���d�=:�
�,�:fJ,4���y�
�G�m�T�5�)�<�Q�!:{��/������Ѱ�z
|@��ە61�{ׯ3��&�|+��dp���s�|n����6��vm[�m�TVVM����u�����m�DgÂ�
8k���1��/Ȅ��c�]��О�a���1�M��cڌ�w>�7Nj��9�=ﳈ�)Bt�%:���[*w\p���w�����fUWWsq9�&�
������ꯦ�;)��c�ܔ�8B�RtVF�8~��
�*
���qG[�	;Y�û�����)�����
���y�EtN���(�Y�6f\pJ�mJ�s*�6\�7㽚���n�p�k���~���6l��dS�cG�1��cɋ
�UYU�r;ojN��7�q�5onT��k���9E���Q��a�
��
P֢s�r������6�hM6�
�� ����-bt�F^�N�0ݫw_�L�E�/0�Y��R�gY�Ra�����x�mr��ۻ>^��X�
+���9
+��4Y�&g]3���?�ع��vXD瀲��x�9�NW}�UA>&h
w�^��?O;Y�u����
+�ٓ��iú�=ܾ��o%wi�����n������G�����CNs�y�Z�ՠQ��_ZQ��z̦���m�b[���� :Kq��n�-Z�Q�ϖ����{WY��KG�9jҭg�i��S�V��,�K�{���z��M��]����
�xt�lu{��k��?�bS��
�Wm��'yp��궹@��W��\�Bt�}7:�n��Yp��j��9�
�𭮤ad���:t��a� ��
j�cv�?��P�Ξ�E��G�tk�Ĺ�N��v8��O�e�i�eUzpFgs���Ncz&:Ke�tn<���0���7����[V^a���u�Ye]��wf�U�ߡ�{�
46Z3�
?zH�
++�97]���UvT�09p���֮nk�oq��v�z

+f]3mֵ���'j�}�Fu�O�GI���钅u���qE��Bt�$6:����W_~�
m2N�
����1�ϼ�杶ắ���+:;
�Y�(ۤs
��o��fzk�g{���|�s��
x��M�M�ʈ�F�?�6��-[6�o�3�M2b�}�]k�_c�Fq��v����-U�/0.Dg����Q�?��P�Ξ�FgۉP
/
���F�m���W��%��>���+������'���̿�GGt�&zȳ���z��l�t}!�Yơ�G���c��_���
�]_���Y�W]�<���.���Q���:FA���[B!:{���&8����s�_
=���Z�����8��w�!O,�ߋ��2fx?��
�ɕ�,M�mҜDk�#k
y�,h��`���I�W1��G|YYil�F2�|��
�7�u�-�xj��:������c��<
+��@YX�(�WtK(DgOҢ���s�q^��]7��O����ϼ�x��c/�q��D�̊e�4���'k�B}�4��T:��������|��
�G
x������s�u.�h�l�U�C�+��5Htv�y��z��@YX�(T���M at DgOb�sΒt�H�J��X��Yy��̈́���6i����g�ƃ]ߤ�&��6��)�Gϼ��'�~�cg���tU"���0�$.N�W]u��
5a#��.Dg����Q��:��w?J��l�`����fXDgO���{���z�)E�é��g�^ዏ	fJ��d�	�9���z�3:_4��	��p���r��\#s 5�Y��\�9x��

+�
�7���
����
+�I`M#��'���<�=6�^�tkF�ؕ�,ubv��\�.
�l�*���]�K��ζ���2m6�g��?��x��q�s]��͚�>iQq��v�z���{q:�>�Tt�Ȉ#i,-��)Et�$-:;�]B]4�<;���I�9
+e
|%JE�&�v�nۦކ��9�MZ>�Ԭh۬$�?������Dz��fr�_����z-WR�Q��)Et�$':��Y����"�@D�":{":GAt��m28�s at Dg 
+�sJ�=�� :K�6\��|�y#���:^Z��(��)Et�%:�����2{B5�{٬��j��
l���zO���՟l
��A�[6)B�D1�h•w~?�͂?
��-�ȋ�RDgOQ�󙳞}s�ӆ
ۮm��ە�9�e�\ϩHDƷ��Bm�W>���>�ux�~=-B�Dyu���=ծe��O���-�ȋ�RDgOQ��
W�}q��{�6j��q�+�z��G�~��
ͦ��-��[�&�
��.�9w.1n��Ѕo�o���=��VYuF�N����| �ȋ�RDgOQ�󧛶���ɪ�z��~=��?��c�������rD�ݒn���m28����g߼��o��F��-d���
��]ڵ�:�pׇ�����)Et�%:�y��i��ng�j�A����~�a�.{��/C�p���m2�([�+�?��U�?�\��I�[���;�
�m������)Et�1:�\���g�2N��5*ڵl8��vGv�=��E6����z�Btβ���λ~�t+R�·�V�n�A��$���j
�ݹ�<%:{�
� ���Y�k���Ӥ[�?��.��
�}�n��-[=�����!��Gt�Dt =D�,3��S����������Ïu��@�\q�c
��Ft��
 ���eD瀈�VDg=Dg (D�,#:Dt�":�!:@) :g�o��߿�J��͜��^�~�����Yvߣ/��ʸ����w�Q�u0��j
9:s߬����s�V�lڠ��͍ۍ�=��r/�Et�Dt =D笩�Q=t��6o����{��"�&�u���\��v��ޝO��Ŝ%ϵ7��0:$��At�Dt =D�
2����������
H�=bo0��ƛ
��ٗ�jܰ^��J��7�~0zC�U�Ξ�� ���A΁g���؆Z3;��zC��s����
 z���d
x�ӭù'�M�=bY�Z�<�X{C��s����
 z���d<�2�Z3>䬘�!�9Gt�At =D��R�����P�q����z�~���sDgDg �Ct.�[\|ߣ/%�
+�N�Z閌�޴"��'�3 �!:S��ӓn�\A��%�
��[��'_�Ct�Dt =D�bR)�/�	�-����+��>�^G��'�3 �!:SR���+����
?�3 �!:SR���+����
?�3P|U�_=��+׬_����T&�
���)߷M��6=�˞��'�
D�b�B��@tvEt6��Gt���O6O}���mI�!�Ѹ~�����
M�n�
ѹ���r4�]�MD�����Z�c�K��\���T�H�9�RQVk�6��kӨwǶ�5��ts��j�MO��A��G���
mZ4o�kҍj��/֬�t��_7�7
+}�)=����\LYH9�ή��&�s�����v�������gD�3�u:���I7$���7��7�e�Ƀ�ԩH�9�p��>���������$ݖ���)`ذ~]�C;l߶ͼ�a�]Z����mG�8~��
l�qʘSnj5�2d؈	M5�پ}��Gnܰ~�s˶n�⵴�.
<�ώ
U�_�
Y�r��|�X׶Yk{@��1P�v�X�%�#
ֵ���O�zuH�z���4j�X��k��+k._������l�����P��
���=n�5�VY�ߖBt��9
+#1�v�3��m۴�ӽs�Mԫ�t�����j��_X�ƫ�V��՚9���-&�(?�����Ѱ�z
|@��ے61�{ׯ3�B_տ����*:�D�XQ^a
�-Z�63�z�Ot6e]��+�Iq؈Q��kR9������l{!�s	��
�
+�<��Y�GL�qݯ3~�y�4�ߜ�
����O��_�εC��������ԓ7h�p��m�~pV3��(:k��z�At�Bt.
7.\9����ڶ>m�1I�%�
xl��K��G��'vK�-~~u��-�;.8���
wI�-ir�e�����
���Ť�s;'�\��l=���_x�')*�+>0��3�M�6i�m��ui渣��1vK�G:;�?ӛ�[^^������_c[�A�:oڸ��i3�����o7~��ߛ�_NU3��":��^{�':� :��s�|n����6��vm[%ݖ�����p�����
�?��Qak��$ݐ�;妜��ѹ�R��=���
+2q�t5|�
�j|�:�kNl��[�?�6��$���y���+^[z�%W
p`'g�������E}�٧�#�&u��You����Υ���WU5u�ILZ�@f��!:�Y\�s1E��aͣ^��:5��T�6�S{{��fbL�����
d}-��l�T��uQquK�G�fS���z���޷�X��!�7oRk}P�C
���3��u蠣mQr��;TVn7��xgҵ[���5kw�lt�X��St�":Ǐ�
1H��ʆmF�����)��Տ��֥��먳=������y��b~���!�(���A�����F���>��
��
w��+�M�Eɣ�9�����R���������1AD��A
Ef���e�ٴa���n�^s�mѺ���/��]�z��K�]o���u����a��'�rҘa�ζ=�pý�w�\s�|c�����Ɛ�EY_����m[�x�D{�e��\L�6l�'l�Li�Y��h}z��u���†s!k?X���?2�
S����u�=��S�������9�
?q�/�~\Roe
�5V����\:b��>ah����w�q����ٴq�:�&
��֭���B����v�=�j��Z�ڀ
+�?��
Uǎt�pj��LW6ѷ�f�
+���M�"��/+�03�zb���*{����#N
;b��k��9}κfڬk/S�ڬ�u�?zH�
++���27�W	Nfq��Ŕxt6�7�b�WRt^�-瘺��1A[;����a?&h[q���z�6ci3����?�']j,�uFG��������KG\��?
�Dgלd�6��F��-[�-uy=%xt�
+U�Y�

���&�6c+��~k�y7&:;�wn{�
x��M�M��X����Ϲ��q˖���l8�C_}��(�2�Kt.�ģs�tجyssj�3)��k��ZǏ�ȼ.N��{ը�m�:z��z��%9ߋ�Y�$:�K�EgcicF
_���Eռ�TGg��!:�#:�����
+�s��T^^$:�,�F
H��}B�9��ܠQc[b�ζ!g�\Z�=۫g��
���1~�~ݧo�\f�8�����aI�ι�&"��߱��˷�;��i�l-�0�(l�ͬ
�n�;�7�#s���':�:Ĝ�����%���t�K곕i��aW����\:��^a(u��'T�c�fT�5nt���+;7���ٖ��/j��nG�U�j�����4�
cC�|��
�7�5:3a��9�,|g����_�m":Ǐ�
E�s�}�P�	*'�~{�m��Z�m�G�&l��*�s�ی��?5Y��c��G��l}��T�~z����O?>��鷌��Ա�8�b���֭Z�����)
)G����Dt��9�د����>&�5��h����O�":ǻͨ����5>:�=8�	�F�=e��w<<����~�����Y�?	*��D�b�B��@tvEt6��Gt���s���6L���5��
��B�9�mƙh�Gg��o�Z>~�?�1����2���h��'
��no�\��&9��zQc!� 
�����)
)G����Dt��9�]��+
��m�&��Gg�PEt��ͨ!a��'�&�h_���c�u�z��8���ј�ϼ���
�� 7k��!��D�b�B��@tvEt6��Gt�"�������R��uj��>�'Ht��
h|R�W\W��*�PEt�e�Qo����6��ι��EqFg5+�Hؿ8z�Wt�}�E��!��D�b [...]
#4ѹ��ւ?
�t[vBtP��Ξ��Q�v�ӫ?�<���Z�l�t[��HW�����o��+������}��mԐ��nKj<��k�<�R�=�M?�[�m�	�@�":{":Gq�CK�x�^�w���Фےu��Z}���ڵlx�)=�n��O7myݓU�_���A�z���W�e�態�o�������v�E�a��F�F�p�zE@Ab��v��`og>B,-�s���R�h%��\��
	��S�p6&���dֹ穦�q
�/˕���
�J:'I�6�������ФsХ�L�����ҋ�����7�ϕ���>l<|�2:7��Da�=�u��ۿ�O�<���ݳ�tj%���sK�������,�����g��s���ϛ�������C���'n^�]�-=�/�3P+�$��k��ˏk_��
2�Μ<>sa����0Y�3P+�$��Hg�V�9I:��@��s�t�#��ZI�$�
�G:���I� �tj%���3@
�
�J:'Ig�<���tN�� y�3P+�$�� [...]
�Rƫe���Njob
��ܺڟ�;SzE����
�FG^- ��V: @gIg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�/$�W�
+endstream
+endobj
+1334 0 obj
+64
+endobj
+1316 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./sunorg2.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1335 0 R
+/BBox [0 0 720 504]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/ExtGState <<
+/R7 1336 0 R
+>>/XObject <<
+/R8 1337 0 R
+>>>>
+/Length 1338 0 R
+/Filter /FlateDecode
+>>
+stream
+x�+T0�3T0 A(��˥d��^�U�`nhi�g
+6506ԳP0�3762��&F�
+.�\�@ m-�
+endstream
+endobj
+1335 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160732-07'00')
+/ModDate (D:20151010160732-07'00')
+/Creator (GIMP PostScript file plugin V 1.17 by Peter Kirchgessner)
+/Title (sunorg2.eps)
+>>
+endobj
+1336 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1337 0 obj
+<<
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 959
+/Height 671
+/BitsPerComponent 8
+/Filter /FlateDecode
+/DecodeParms <<
+/Predictor 15
+/Columns 959
+/Colors 3
+>>
+/Length 41818
+>>
+stream
+x���
�՝���}��	��
�9���<��L�WDNDA�
 =��Qs
l�0�hP2N2Ĵ�o�`$��>  ���k�t�w�u\��{Wծ{��~
���z�뿪��^���_|�   �B
�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3�85
o\��ڝ����k�֝q7�4_���
��۳˥��۩}��� & =�͖ڏX�v}
wC�׮u���]6|P�� �Gz�_���G��w+����|Eܭ �t#=���ڏ'�\"�۵>i�em/�Uv�%����0�
>��
��~�K5�?��( [...]
�T#=�Z���1w��=�r����}{gBs�����Ś:�\ZR����=:���Q �V�g Q{�f�
~'Dh��݉�z�}���a_�}ܐ�[ iEz����+���Ob��k;�����nNs���#w�|O�����.�>.�� @Z��D�{������3��Ľ�.��e��i.i���2'&o�^xG����"=�ڀ�ɅW�<�m��mL�2`������Ew�� H/�3����vQ�x[�ܐ��?�3�����Bz �H� �Fz�
� �#=��9.�g ��
 j�縐��?�3�����Bz �H� ����{�����:uj�}�#�
U�ee%����&�H� ��@�H�q!=��g QKlzv��I� �̑�D�Cz^�t�رs�rϞ�er�ٜ���<��iCCcǎm6l�U^�U<‘#��UnܸC,?�\���O�
{֟T���Is6,g�G��dٲ
+���55��
+|�=Oz �H� �Vhz~�Z�E^Tkd�ܷ��>=����cɝ��d�����o`yR7�ȧ(..���Q��V�X/��G}.pE��C��� �#=�Z��YsՃ��سH�
N�8q�|e�mӦ�
K��o޳|���b�+mۖ�mD��ٰl���;g���
�9D
�66H� ��@�|�=�D���e޵l)#����֠��
Öϫ�g�سj�>�Ce����3����Am�� �#=���y�9�
d��{������f�x�
[��6;=�Ib��t���ɇ�
 ���D��=7�����?U
�QX9(�3���2s#�o͞��X/'~Ȉܽ{��ک�e	��h�w������� �#=���y��9�ۭ[{7����禦&7�%�s��f�{��F��C���ر�3�#ђ�A\���6�>���?�3����c��P��6���̐vy�:5Gb�©;w�aZ
x�����x9��&Zȇ��瞑���m��7H� ��@���R��3 �Gz5�s\H� ��@�H�q!=��g Q#=Dž�
 ���D��
�3 �Gz5�s\H� ��@�H�q!=��g Q#=Dž�
 ���D�U�ߵ�XX���Yws����_
��G���3 �@z�{~�b�����}�;
�&��4�}�0��>
g�8e郓�n ��@���n޳����/({�^�ߵFH
X��Ś:�0��3o���� iEz��>�즙K�7�囯�0�N��E�{�ͺ���W.?x�՗^rn����"=��~����
� 
�v5>��9�a� |#=���K��~
w+
WZ�B~MP�ѹ����uj�\s ��
 

�._��uq7� ��{

�ڷ*-)��9������&_At �H� ⴥ���/���|&�a�piL�".�{f�+����/��- `�3 ����;���XX:{B�����
 @
H� �� @z �H�  �3 �Ez ���-�3 ��
 n�� �g p��
  =�[�g  � �"= H� �� @z �H�  �3 �Ez ���-�3  ����k����o��
+x���#��9w+��ƿ��[ܭ��8a655��
+ @��m�{4
$7=�����Ƹ[  `�k�^��
��nE�$7=�u��̉�G�n���nO������b��������o�ݐ
>R��v��~n�
	��}�o{�7r8*� N��S�+���"���-�(�YNz�&����/͌�!����O��0��n
�x�"� N�.yU�Gz6���3BA��F}�Dz�DznH�~��
+�g6�k$�3$�ss at z���PP>�Q_#��!���ҳ�g������
���
��� =#��l��H�gH�����G���gk���6������n˒⛯
s���3�5R}C�ͻ�
���|���il,MB,6m�p��Z���濾����_-��Y���\�댘�����]W�:/{��)WL�z@��I�ĥ����+�ZV������
����J�Uײ��o�}v�XڃX�wP�}��,-~��.
���*n�O���k��kD}E�E��jR�$.=g�
�)B��F}M�=���s�������
~f�P�Kϙ���C7](�٨��,��
<7O�wȼ=6�>����IL���ˡ�:��l��T��3�͙���Ǧ҇�x� ��9�
�
�iD��F}M���xn��;d�
�M?3��MBӳ<z��nQ>�Q_S���z���s3'�!���lr���go��3'��̉�n��|f��a����^X���
m(-)*).�����s�dzT"�w�ߞ2�����Ds8p���m�Z [...]
+X����y%6�4aKx驣Nkƴqq7$"�?�$C�����?��3�
`ꡝ;=�����Ԟ$��G�jo�1�1��
IbKO
�%�X!�82�KP�lƔ��⒞������2$�-=u̖�b��>���.A��SnS�KzvFzN,Sː$���1[b���#����fL�M-n���h}��3f~~��̩jjjR�-KJ
���fj՜��񏖕7
��櫮�ۏ�׫��۴��?��]�8������cG+&�:����kJK[��B��)�
�!I��:fKl�t�a�>�(�.��/����}*o��'���]���/w�GkAL-�i�Yߦ[ǎ�������^���A����η��
7�vh���AҳK��Kl ���[,
�9J1v����ѿo�oM�����aT?�9ᒕ�
����
�s��(���[�
?7����9�Ȩc��KGz�RB�sQQ����g#='���,��
;��/�X$�uu"���C,746�t[w�\�E��ظIl�����~��b���?�r���������c�j��6�"{�Zo���.Ǟe��6�[z֏��u��IS�u5��O�.���ba�;��tu���b��7L�r��91{�B����ް��?���}����/
��4m�ao�cY��m�3_�����Rg���
�[O��U�o�{[-��������+�!#�/Y�/��D�>�x��Wv?��~̶=���r�U׉�QVy�C
~6�v���x�Ot^�
:�oG�6��r=�n�<��Γ8�
���ՙ�~\w�~�^A�	��^�-E��zj�Cӧe�Ͽz� �=��Ψ~���s�
n����[�0��^��������D~c��pv�
6鹤�X�6e-�6z���׿� [...]
+�6H��'�5��Ǖ�Z����o��ϜHl+�.���浘zX��Oz�!,�ʓ�M0rD
�9�rm�}T�2z�=�$���&XRu���W\&i�C��7���r��,��#o�o����y,�ھ�9����
$=녶���Z���y2�fjq���Ȝ��a?�l3f,�k��,�H}��߹�b�%?}}�FF��f��o׬U	�~���O��~��쑤BQ�^�����6��
����E�cϖ�N�s�
���L�����-��Vaz�-7�<�������w
ƞ=��ّ��-+=��|�sҳ��g������Z��0����5(��\�c�r��m�o
���Cˤ�R1�쒩�eH|�����7L��oe�9l��=�d�'��4��)����Ǟs��f�>���f�����=�E�-).
]9�IG
��;�<�|�Y_�Һ�D�͞�!ӳ
�r�H�6?����%2
+s�
�����n��(}*�
�ʞ߬ϓ�����k1��
����;'�ym�8�����:�����%Vd)=r���� �
+��l9dD��޸���+�m٤2��_�T�37�y�هy�C�g��\���y�u
��#?�-����g��y��	|�s�׾x;�g3����sC$T9�+����ȗ���i��sC����E at _��!�n��'{������6��
�����\��Pc]⧖������S���eH�����N�_Ӧ��
+��:d,����O��ߐ�rc�^���KD�>��s�c��V
�~
6�ܐ�f��(��2=ۜ�
j!���=7.��='_sK�)b�a�Ė�:fKT�¾�o�>�B��D6fn+��v��⒞������2$�-=u̖�b��� Q]B�o.����ǡ��XnoL-.���9�L=,C���S�l�*�9	�%��/�&=g�~.�,������X�
�!��O,�Kx�BB�aҩۂ3y6�� �7wzVv�9$�ߣs�H�H��ްc2cPi�6y�-��P��ztn�lΔ�
� � 1�����;u[p&��u����5=[
+Fz�L�}4�dd=ǤҤ�YWN���K3�nFeˤ8��39�Ś�-8��z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(���yϾ��u��(A��s��+�n�/�LTe9~��P��9�?\sg��n�/��X	�9����H�EP�y���)�ߙI��7�3+��M�
� �DzF(H���q�
0=S�D!=�Kuq��P���1��Kz������� �BzF(H���q�%=�Hu�I��R]\ A!=#f��#G�
�ܳ���폔���f\}I�6R]b����͗��ei��2	����3BQPϩ~e�����]:��Wr�M���{�a�K}3�8�<��N�S��x��A��24�`0�3BQP�s�ӛ�}(.���2W�$+��o���{ӟ��7C��[z�����o�T��� 
FzF(
+M�"`�q�U������j�%���Q,WT
���qԨ��w�+�����o�:�;b�����-{��.���f�׿����w����6#F\�lYEqqQ��3��[hz%����fHω$+�����E���?q�I2C��-8~���Pt
~��]뎩ʌ���O:�E�W_��t隱c�.\8�u�b���r��^r�X>��SŖ�:�W֦�&�
:*�_vYqqf��{�����թ�B/�f\}e}���f�>�_��&�O����}^�7H	#+�_벒�۔��
�/ ��
+��ಖ%
�|�UWq�U+�K��Y+V������_T�j�^��l_YY=w��6l�U^޵��q��__��۴*iYR��D��]:{��_����ȩ���.�6n��ř��q�H�3BQ�5x�����e�������(ΘQm��
+����5=��M�7m��WP˖��s�^�^��Ξ��Xoy��'rd�����s���`~�=˲�>�G��
�_ �@zF(��{����2'>�9��9sn��xf͚�"�˭�h�W_o�3���EAUY%�_ #=#���۔r��c�����u���ƍ;�dV�������|Y}}CC�篚�q������,���9��O��ޭ�e%�/ ����B�
�̀��R&�ˑH=��J��}A̸�T_���
�s�D�J���� �/��#=#f���0�q���o
��{zN�T@PH��93����n�.1��^��
 (�g���W_ҳ�T���l/���3BAz�nj�/��F�KLz����
+��*=�*�W_ҳ�T�`�s>��
��ѹ��g�KJ�
 (�g��ϙ<sɖڏ�kQ����~ٜ)q�— ӳE�s��Ҁ�9���Mu�
8~�DzF(�9f
��9V�s��ހ͑��@���
+z��«/='^�g pDzF(�9f#=���
 �H�=�l�gS������瘍�l*�3 8"=#�
���MEz G�g���c6ҳ�H� ��P�s�oz����^X�S'��A}�|E�
 =�#�3BA�1[�陿C
�3 8"=#�
�%!=Ϙ6.�g����.ɐ� �H�=�l��0��3i��c�i���${N��/6@췐�>ɍ�P�s
>��~��Dz�9��i9z�R���Xz��/6@췐�{�$=#��
��2�
�>�:=?���爅��U�F����ǎVLup��
�ה���֌l��L��e�+E�/HΞi�
�-$I8U��� ���E=�iSb
�3���Sd�y�K���]ٯei����������G����[�~�����r!=��,)��猉/6@췐$�TIzF(H�6H����%����tl{��A*CǞ�C��K��=�s�� �[H�p�$=#�g�g��,ӳ\Vz�M�d<]~�q��b����X�����+&]�x��X���L������I�v�u�����r�C
~6��cG��媅�����>��㽭b�S:u�_45���|�S<r��
+�I�$����|h������g��+��J3q��T`��$	�J�3BAz�Azv|d"C�7
o]V:��cχ
��Ej����^~~֏o��^u�Wz�4,�qY��"
w��%_4����~�����=�-	��(���%?ʜ(��#ҳg	L���cPP;�T?in��}{���c˓p�$=#�N�G��T�gϡ��)++	��I�6n{�7�]��f�����E'�mU���<<���kV�(�%�ʱ��M�Z߸���|�~}H[`{hX&��(�����7��qW��y� ��c�#=g���%���sz��������
+�9կl��f�E����Ċ�̠���Y&��n��	b���y�P���~K�R{��!%�qz
s����"C�	��ە���!CKN���<㬯��zJ��O���{o�
+'�&��ș<�v�g٪�z�Ё};j�e�����#Y�dy�S��[�hΝ���L�O�ICz��sdB:�[�i��34�9�"N�z������ƞ�Í���$\�L��`��%Y�_�|�I-�|�-
+�i]�\8��s,r��⒒�|y����С�g�eE���u��+ߪu��M��
+�#���]T�����:�X�w
�>��~?���!}� �wY��ۭw��Õ�"�o����S��c�L©��PxH�rY����ު����Q,WT
���qԨ��w��{����ۦN��X/ñ��زg��*"�G��_��J��w����6#F\�lYEqq�� j�˝Czvo޳5���?�����$!����\Pz�q礷7�W�m[6��<y#	��h*�o��v�;��G-Zd:��j�]߳�u��������I�b�K�<����
V�v?���gzV���W%�Iz�U���-ח׼�2��ѧ�G0����2���5���e�t�E��N<��k[*r���5e4�͑�w���
]�̪����K׌
;w�©�[�
55���+����*��ԩ�H�MMMj��С�b�e��9Xdb��{�����թ�
X>cF�x�U����,._
�٧ �X�����p��e4QIN$�5������$\���o�xs�_?�l�>�,\>��[?().r?s#sb`L�#�f��dI�j�K����'�� [...]
�}v���+��"
+�׻�����AD�#3A,37��ɞOw�l�>JjI3���e���=g= ԯ��.+��-�ww���|���bi�O_���I�h�<��Ȝ��Ӯrz��gn�P�s X������'o:�is���H��-Uz޹s�Z���ٳ��-O'6���r5sC�a�92���D��Un�+�W
𗔔�4�{gˋtv��\׳ӳ
�������?�o��U��
6-�7��>]��n^�%���z at 4_3��]VJ�[���,c��D��-=��,׻O�9Ǟ3'�2�
��97VT<�f����*.{{���
B��}"=�'��~����uGUn���L�*1��D^�p���a#_Z���l�BǞ��w]�*���̗o
,M��+ȷ�͜ל;'��_��� �wY)�oQ����=��[���r�F��P��?�l���%��YNҐ3����Yr�ƍ;������#�/����b�E^/--+�͛�/^g#=�DzO���7���62�S��Vn��d�
�k���J�~��ݝ~�
��L�p�$=#�����{n��r��>x��j{�;=���!='
qڛ����O�3���56ҳO�g.�R�q,O
�
��/�3%��~�O~�PHϙ�T*.)�o�g��l��Ċ����J��Rwx���N*�|���t���%w�Zҳ=�3BAz�AzFb�^��M��NϦʙ���3
Dz�AzFb�^�tM˱̴IW�
�=��� �[Hb��FzF(LϦ"=#��, 8"=#��
�ߣ����'�
��� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍��*���{��E/���8	4|P��&_w+ Ć�P�s��&gSX���� ��v�]q7@lH�E =��obqf0U��y��*Q�ߙI��
�'�3B`z��@A��x!iHώ
8~�DzF(H�6
��uf�ㅤ!=;2����� =�0��lz���Azv���
+�� =�0��Kz������
�4�rϞC۷?RVV�㧷� �BzF(��w�>X^~�e��Y�������/xI6��Kz���{��G����6n��.�ד����P�s~���i�9�[}%�9�Ҟ�	X�xK�'�
���gh�
�T�g��О#��f�Ez�&='V��]���sN����������]:{��_ٽ��m�F�Se肊��[��"

�b��bxUՍ�FUmܸCH
�S�~G���?[���YUP=��l���Uq����ՋmF��D
�����._oz�
 (�g��[z�T�.4Z��
�l�0�����v��u���;�w�PSSٻ��2=�
���Ś�{rIv�N��
>[�~e�H�Ӯ�gh�s��G�"C�;x8㮸z8^�t�رs.�ںuK� O�R,���b�N�ډ�555�"
:tT�+G�X/v��}����,�1�Z<�U[�x�/-���3B��,2��|�����h�_��fy�,--�ô��=��
2d�y�&N
"W��$�
�\}��g��gh�'�FV6�S�
���}��iYZ<��~�{cK�]qU8�#�^PUh�vWfkqت_TQ[���Y�����;�w�T��_�.B��E�_����
+���O���pݱVe%
Lf�&=��#/�����w��C/��Nu
�yI��M#
������p��}��52C��pu���$�3�9�en�y�.
ۺk$���{X������'o:�is���8�,[���s�^�^?Tg�~^��<�����ՉB�i��3B�g���Ӯr�Ћ
+�TÇ�R:b�%*?�L�r�Q�JuIvy6�������5�;����������f���񛳸���
��97VT<�f�L�����|O]P��[\ A!=#�ҳ��reA�Y� g�ܰ�g�++��8�IyY
��lπ�o��-���7VoxO����v�'��᜿{��y���s�侸�[]��rЉ��3n&Y�G��詡�Qm/6��y(--+�
.��7���3BQh�8a���%�Y�!��d3sC}kp��w7l�նmY �d��?3���y޳�۪0<���ZJ��v�^
�zu�LjW�7�I� �BzF(b�k)�FU�$�9q�
3�
�A%��YN~���a>�g�o��u����!=�����7�0�o
�-���3B�ؿ5�\}
�o}Cc�����
O&
��Qz�
 (�g���lÀ�o���`��[bҳ��@PH��نW_ҳ����(���3BAz�a�՗�l/�%<=�k�!��
�������� �BzF(LϦJ�՗�l��,L��dK��9���ܣs�es���
+ �!=#��
��oڥ��lz6U3Oϱ?
 ���P�s�T}y��4�g pDzF(�9f���"=�#�3BA�1�5� 
��
+z�٨��H� ��P�s�F}MEz G�g���c6�k*�3 8"=#�
�Q_S������瘍����
 �H�=�l��T�g pDzF(�9f���JBz����^Xj�2|P��&_��IQ�
��b�f��P�s�%�����&!=���[�
{�_�4��y 
�g�"���u(������79�yƴq�����]�ɓ����B�|�@�EzF(LWk�
�M�1`��LʯC��F��Kzv��
4[�g��te#��J��6R]_ҳ{�g��"=#�+�NW��������#=��� ]�Hu�����T�7��~ɏ���tlk�i����ъI���|���Җ���$/=�����)��)��
��H`�:r�~Р�={m��HYY����:]I	���{�����.��ϲe��E�1�n���F���Ξ��ό���ͣ����
��
��(�������і���z�sbzfs���|��5C/�W��(��,:�X���c��@z�Fzt�g����S�ʦ>�\\8��S���|�Oz���3��	s>�t���:L�~��Ф��2=�� �}�Re�n��q
+�2��n�,��_:t��Oطw���ǎ
�^y�Y_�Q���N]������2VE�����b�ՍǏ�_i{r�'��~Zϰӳl�y��v���
���������X��
�K����V�f[�s�=Cz<#=#
ҳ\�3t�c�o�U+����8u�w֯?{����
�l�0���k 
PR��$o�Y.�
]h}s�F��^�Nۼyg��
jj*{��S��ѣ]�b�X3p`/Y��w���ٳ������|غ�z�͈���S]�h�����l���9$�6�JZ���g~Q�x�
:7���
g�y��}�}KD��X��KJ�#�Ѻ��Gÿ{Ô;��R��H��g�eE���u�x�O>�)�תu����#�f��Y���=��eڼX��"=#��x&3����h�"��|��Q5B)�X/��Z/�TUՍ�G1
�:]I>�9���
kUVⲾ�
٥ٷ�N,���aZ��{F2s޼I'�+;uj'J�����_P7Hu}�9����77������c���.�6n���� *ӳ�"A�5������R1�j��1r�K�H*�b�W}�k��\N{��NϪI��j�9�=z����o����Օ9�L�N]Hπ7�g����э[?().
+#=�X�~�ع
N�*�#�|�AIu���׷�W����Ғ��]=�t+�r�~���{x��
E�[.]�F�[�g��-sv�{��++������O!R]�(��"C�yϙ/ss�{d�P=;fN�|��Ж�,cҖ�,S鱣GD���P�|r��q�gՆ��Xҳ��i����Ϲg�7���Px���Ѯ���ܘ=��3������Ⱥ�z��F��D
X��-����y�����
���Ja)M��,g\�w>"��rg��s�ޜ�@vKԯ;Ju}�O�zn�
+�❌�߽a�y���#��%���Y��A��gnd�=��tW����-,c�nfnXƞ�=���
+o��r

/=�{��eNb�
o�Y�f�����ț]��
+5I�����%�9�\�T�7�s����Yr@g�9i�k+E�,))��t��-Ga�s�e�6;=��r*H�37�y����������=�Kؤg� �g������7�YƟ2a�g}���z��Jr�RƦ���UU7�Kfn�T�A�;���}Un�<�����
{V�\���
f�m[�8�Y������B�ő��&�_�̍��ܐ�R�n"߼g�������|i�����=��ﺚU��/�X�c���o3��6��P{��g�3�3B�������FU�
�9���1�\����v#��J���9K#�q��,�x��D��sύB�A���I8��~�g����j#�Bzt�g�"��99R��$�k#��M�9��@�g at GzF(HW6R��$�k#��M�9��@�g at GzF(HW6R��$�k#��M�9_v��ș�M��^
��P��l�:]I��F�뛄s��K��~
c��ѹ��9S�5)j|��_,�l��� ӕ�R��$��(��� �H�E =�Q�Ċ����
��}G���qIo}9��#�3BA�1[��
ł� �H�=�l�gS������瘍�l*v; 8"=#�
���M�n G�g���c6ҳ��� ��P�s�Fz6�
 
��
+z��HϦb��#�3BA�1[��g__�º�����7��X��# 
��
+z�ْ���S�a�� G�g���c����ƅ׆X��蒌� ���P�s��&�9<Ƥg>
 `*�3BH���X������.����e������ |"=#�g��	d at z~�U���
ӫ��
���
��4����.�)-m��H�	g��
�'�3BAz�a��7�������G����[�~����[
I��8~���P��mp��8=�����7m���g�P�CBzN8�_ >��
+ҳ
��ѧ��>����
�9=�1��m��rۓ�?�x���WL����q��7L�r������X3�붿�g����l��ǎ
�U
����
}�y�{[���t�*��hj�?�x�x���{S�����[�Z߄~���}�����.�lYEqq��_<r�~Р�={m��HYY��fp���P$'=�p{A-�W߸ҳ$3��ř ƞ< ����|��������R1�꬯�RiX&�V�E�ة�J�2%��r"����>�/� ����.=�ꌪ���A��gh�3 S����z��
���
˥7CzN��ҳ���ⶭK����=<���kV�(�%�ʱ��M�Z߸���|�YҖ�
�Igz��m�tl�gh�3 S����zN�+�~��r˥7��
ҳ�D�
�f�����y�P���~K�R{��!%!=/�=�����w�������7=�q}���V�8
NL�ر͆
��˻ʸܫ�i�7��޽CMMe��w��<z�+V�k�%��w���ٳ�:��cN������W�|غ�z�͈���
8~�DzF(<�g��g�0ƞ�]Ps^������l>\}#>3�:s#��g��g}eG�V9��ۍ8����rqQ����W�YqHVUݨ0��W'�KK��0-~t�=#�
�9oޤ��ȕ�:�rSS�:�
:G
�b��ߖ���

�6������y
�z�so�hdz���f_�x`���55��Vm�
���ɀ�o\�9�o
fr�{֓���\Pz�q礷7�}b��m[6��<y#	��W���J}C�m�k��`��B��f!��H�����{
z�8ZŖK��;v�
SE���ٺuK�^?	�X�^߾��z����t
� |"=#�G�DNڸ���� ӳ~�̞��}�=�y�+*���tP
��F��C�c�
iξ����ՕzbIz�k+�}q0	��ۼ��ώ�T
+ql�q�K��
5CC�_���J�;w�U���]
Ԗ��؀��O�g���̍�6���
y�̾�ʋt��[~,�t��K�
��I83���9=��ނ����ʞ�aI��ج��f��'��`�c�
p���PxK����o�Y�Ͼx����
� �W�$�H�a�P����v�f?��я/9�l3sC}kp��w7l�նm�����u�������W�
8~�DzF(
+MϿs��s�L�9�U��싷X)��_ZZ,
D~K�Oc�|]���&��@zC\kpԨ*q�eNL�3�
�A%��Y~o��[��c��=7��]���� |"=#��k)�.�9/�ݺ��9%��@z�ۑ�/ �H�Er�sp�M™AvS��ˀ��O�g���lÀ�o�
�g.�R�q�
O���͙�S��
p���P��mp���`*ҳ#�_ >��
+ҳ
���Lxz�iמCr�G�v��(�>~�DzF(LϦJ�՗3�����Ԛ����� H�3BH�abkbqf0U4�U��. �H�=�l��T�g pDzF(�9f���"=�#�3BA�1�5� 
��
+z�٨��H� ��P�s�F}MEz G�g���c6�k*�3 8"=#�
�Q_S������瘍����
 �H�=�l��T�g pDzF(�9f���JBz����^Xjb7|P��&_aY�
^x>�G�]��)H������|v�H������&!=�P�Ϟk�eY�L^x>�G�.b�*���AzF(�9f�
�=�#F}
����I�3��
�
1���%��a���;�Q�.b縗���AzF(LWk�
�M�1`��LjӕD}m�����-�!�H�~����+�NW�������#@X�`�8"=�AzFj��l�:]I��F��Kz� aт
�����A����t%Q_��o���k/??�Ƿ���O[�����e@����
��4����m
��6�ϰ�K����/����0v�\��ҡ�~���X�ᓏw>�x�-�����iA���9��sbw����������1]��}�����.�lYEqq�\y�H��A�{�
ھ����?���h�NWR2�s��[}G��o����n
�]?䚡�?u����E���s�.�����@����K����l�Cf�9i�k+�d^��^5l䘿?f�(���c��f����z�{��gܕ�Z���IωU�a�=O_��9C�9Q"Nϒ%C�L���
?�����0��Cj�{Ѥ焼��g�
"ڷ߷�~౻���ܵ�
O��Q��Kϩ�9�g4S���W6���]:��y� =C���Ez.��0pœ� [...]
z��������l~d����!=G�s����a�Y.��z
=��+���T^|q��O�
�����
ů�
�%3�ƍ;Ě#.��[_ٳgg�H��ҳ\����ƞ�z�V����q���_�~�z�+
;�ٰaVyyנڐIy}�9�����?��
G�՗�;�g�Si7O��ߴ�F.�q�9r�M\�<`Y..)ɾ��;��������sX,�%��!~��^��[�n��UX^�>x�����F����9���!*��a���Q�g���xH���$�19FNz�	r�-�'3����h��{z�瞑C�̜7o�ĉC�\%�sii��Mmۖ�����g̨Izժ-r���O?�ԩ�����&��rsN�~��t��X����ҳz�$*+����ݻwP�E����1��)R]�h��K^Z�
�m�z�Ϊ�Uc��ҳ�,s:�+�.T~y��9t�F�ob����D���
�
Ff�
+=��O��_����Օ9�g�N]�J�j�3��6?��,���0�s ;'	}��eM�Fz�	����\�q�%�E��s�~���{x��
EH���U

�j���ϋ�\Q1\���t隱c�.\8U�o��c�|��������>)-))=�X�^�.����)ՌT�7�s����fndN|�,�-�YF-H^��
="���/
*�On�1���m�%٨�g�
+K�QÊ6/V_��ӏ�ܟrH2���p?���{n3�	*���(����s����IB���K�~|6�&�<s#s"7O7���=��ܨ����k�/=�e��2'�s�A�{eH�?37Dn�v�`��Pgn��B��
���{�:�q��l��,E���o����^��y��漟�%�H}�D�̍B_r�q�=����*�I�qD7��[����5���������{N��
j�$���A��[zV�Y����E$���f��'�G�g��dJ��ޯ�9�=��-=��,W����=��2U3s#[����;FY�Ē	�u*���VL���Ζc]�Wk��Xv���g�r�F�/9{N�����pm^l�9���Odw���(�@����>���G9�����
��9I�c�og��{����B����ܦ�f)�o
�^��
��ukE��_1,--+�͛��M2�YW�A�;���}Un�BM�z���׉��"dz��s*+�g̨f�.��
�_Kq�s��u�D�S�������|i�7S{u����Bą~]�*uC�̗���*,�v�m��X��!�����Rd��AJ�Ě7_%ߏr��8	='ؿ���IB�����3B����"�.v��~�k
���=7�⯥��ƨQU"CgNt̘o.X�`o�����.=�Qd���z���
%�/u�������LW	��t%Q_��/�9�g
ҳ#ҳ�g���F�ӕD}m����g�o4(�ʱ
<,�{�?}l��߿6��&����{zNu#=#5HW6R��$�k#��5 ='_B�br�C
�S��� ]�Hu�����T�79��x��b��q����
�)`�2UJӕD}
���IHϓg.�R�q�
�W���͙bY�
^x>�G�]��)H������|v�H�X�ݵ�P��;�����Kz뛄�
 	GzF(�9f���t�X������瘍�l*�3 8"=#�
���MEz G�g���c6ҳ�H� ��P�s�Fz6� 
��
+z��HϦ"=�#�3BA�1[r��g__�º�����7����4	��������G�v���]�NSr�+�3BA�1[r�3r%XIH�f��%��79v��]�N�e�+�3BA�1[���i��kI,�tI�y�g�j�R��7�����a��˹��iR�~EzF(�9f#=���l^M]"={Cz���l��H�s̞wˬ֠���Fz6��.���!={Fz�AzF��9�ϻ�>Ř���/�ϟ#*�W
9��#�;Z1i����/\^SZ��[3�����e���
��3ҳ
�3"`z^��g0mJ��wfH�A<��S��}{Ǐ�߷߷�?�TQQ��GȐ��=��%?��ұ��#ǚ��
;zD_Y�p��u5���>}����������[zN�>���/���{��s�]'v�k/??�Ƿ���t�:Kl�O��n<~�k�ӂ=�݈l׹<�&m�{0fHψ��
���S�{�f���7�
�����sH�Iz^:{���?3��~zY]�g���:��>��#G����O�%0=g�:�*�W

6R<{���"���}}��n��Z��#��99{��t#=�#={x�G��*�kYZ��-��Y�@k�m�mOn����.E��0e�
��a�aW]���?�-�?��g�o�-r|E?�xo����N]Յ퓏w�G�~Z�}����1�<-��O�rB�e<5���Ğ��OR����Y�t�<~ղ<K�����F��7(tx���̽'���\�g{�gO!ӳ\Va���e�{>|�X
.R�
��Q����K�a���Z������什�8"~��O��O.i&����U��I��e}���'���sz��S7�3�o��g��Ӗ�g���
�[E�x�W/�{�X��gә/ߘ�|oz��O�6���ڡ�v�n�hs<r�L˞Q��ް
A9wx,�yƝ��޸V6X��k���.��f&�;�Ӿ�|�g�{/!c���!=#$iL�G��T�gϡ��ijjR�ee%����&ҳ˧�'�Vq�Im[����O���kV��}*�gޑ�M�Z�X~������� ���e�Az�7�g��
���-2
 [...]
��i�b�3ϱ��җ�KJ�/�G���a��L����>QyE�s{]�>NiպMΗi�3�G�{C?������n�^x37��Yp�k+-��w`�w]P37��
��vN���sVox�������C�z�sbEpf�?��v�K���ұm}���e�3��;����~�=T�!=�ߒ�Ԟ?�4>=����77������c���.ظ���⢂�5�-I�R�\i!/��{
�^}�,�J
�CY��(��(7�KA}k0�}b�F���엩g8��������Օ9w��iO�T�Nݓ��׾����!=�w�y��` {/!c���!=#$�
q���#�E�y� =Cǘ�ݤa�s�g}��-�oz$�̍�ƞ�?~��e,�ӳ$2����9�������
~�={�����W�L�{S���0��-3��2/b�X>�}���s��$gT/-�eZ"��V6{C_��ӏ���r�6�g����u>Ǟ}
��vN��xH�rY�Ў�Y�׍w��#.Y��b߾����.���XnhhT��С�r���/��Ql_SS [...]
+�IZ�{.(=��m[6��<y�Y�g���J?�Y�c�҆���ڝ׻o��1K�
�
�� !37��|�z
�w
Y\�
A�T%�y�:5�)�k�B�・}���=�=%ރ1��ɐ�7�VmȄ4��7Z��Kϕ��3fT�
�j��p���ڤ���b|۶-S��i[d_�}��
,�Y����UU7��}0��Ϟ���%2��Cz�`�K��-3|�c������ӳ<Y��,g�y��`3I�}��`�Q��%?���ߌV���Ryg 9^�]t�0a�[���s�37�'ٓw�_�eϨ�c�7�M޵��~�y�u�{�}��ī��vsϵ��`�XW��K���o�dH����Ѧ?:�犊�"��5�ҭ{��_�b�رs.�:q��y��8wϞ�-����
�9(��A�f��s�+=;~�_�}��.�������Etxi���O��g�"*��Y��Z��2�X^�ej��l�Z�s��5���O"W-��{i�u�Ǟ�콄
��vN��x���ɚ��r�F��d
��g�1�{�K��w� [...]
.]�f�ع��gd�c�r��m�o
���B���b�)��l^M]"={Cz���l��H����6=7K��yԨ*mE�---Av޼Ic�|S%ڷ��@�cΗ������D�͞�!ӳ
�r�H�6bKKD
�yɤ砘z�'=�WS}����
�X�s�}��ǖ���k�%v���s��
��毥d�s���H���5�=4�g�~6�ܐ1=sbƳ�
�aÆYݺ��q7��vS����D�=�H�ƞS��g�gD*�k0J��L��dK��q�"=:�_6gJ�O��ʚ��ȥ|��l�3��LϐHψ��
�ɔ����ȥ�o��-���d�9��u�4%g�"=#�g{�g$� G�g���l��d�� ��P��
FzF�PY pDzF(�9fϻ��;aA��`**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨����g__��:���@���o�q�@lH�E =��obQ_{�o������ ��v�]q7@lH�E =��obQ_G)�o��y��*Q�ߙIm}��P��
���`ڔ�>�"��o��%]%
+��Q��
 �g���l��,�����(���3BAz�Az�HW	Dzv����� =� =K���P���F����Ŗ����ȑ�A�*��9�}�#ee%��Ó���� =�h���ݿ��}v�ʠ�Urr���t��������*��<zи+����
�T�g�����z�{���r��$#=������x�O�3��l��y�9�w�8�����Z�V���[z�
]:��3t4�-��D/���
^���zN�+�~��r˥7���,��M���v�
w��{|�晞E�
"=�

v�"={ +�t����{���
����:���H&���ު�lhh�:�;�׿��^�Jǎm6l�U^�5�(��/�@D����k3�!=�e=C�L���~�uC�]<��5k^k�z���^x��e���l�˥�-�6��1"��ǎ�-/��e=�DQQQ�ˬ|��q�<��	7O�v�m�o��w�?�w;U<NSS�e�z��<��/�;��E��o�1�yڸ!.���k�
S������3!�=����nܸC�
1�e�*���|�'��JV�?q �Ȅ��
:Z^~�e�����w�֋�WUݸ{�A�����R]_ ��'=�=!����
=��7Z�p��KJJ/XުUk��E&��k+<�������g��

:`Y��Zn<��>��<5�,��}��*F�?�O,�
�S�~j��ݼ:cҳO��J:�-
6=��
x`���55��Vm�
��ٞT�
de�	6��7m�P_#����Ȅ��W�X?v�܅
�N�8$��
QϞ���!���s08�Z��X`����l��AIq���g��o��Z��8�k5�d2���k�������-�w˻VQ[=�>sCEj��ꟃ�y�zv9��Ș��y���n
�]?��U��Ǟ
�U�g?/BsE�p��}6CI���ϼ�L�ώ�Hϲj�N�{���z�F��D,w�Ԏ�
 p��`p>�C���9�������
��ܰ���Җ"47����;g��qC���D�qy��=fy������&=�_T��3��=��|�Ћ2�|k��\��Ԥ��س���{
Q�=������ 
�s08���ҳ��r���,�oŏo����9��z�_~}j��-CȊ���س
ҳ����R��s�Z�t�� �A�T�
<��w�;��՛��3'�y����D��'	�ʲ�����}37 �!��
�
^=�
��O����on�s��?=;vT~�O};�~��>aZ%c�����=����~�V��Ȳ2��\h�+ŏD�.--2o�$�}�'�g����A��

5�J4sbfΘ1�\����v#�����{�>x���D�U��
����̉�����1}�Y�熺uF&��.u?���jV�ܮ���O��)�=7H�
�t��rU�n��.��99R]_ �7=���߯I���24���~�琐�%�U��
��� �*=��f��z�&�=!If��罐)�|�ߢU~�:jT�ƍ;d���]��ݥ(�@��ݺ���6���毜O�@zN,ҳ�T�
HώR]_ �p��ԣs����
��wz.�ںuK���R,����/ѻ���\�o_����r>
�9�H�6R}6 =;Ju}"��g��W�X��z�V�����/����
�j����s�aì_��uo7�|�sb��m��lxz�iמC�/SR*���(�={���j|� ���[ӓO�t�y����G��-[��s�ޜ7�7��<����˽��5������'V���T)�o��y��%[j?������
��/�3%�V �M����w��~α�̉��#G><g΍ϬY3�������ƞ�=��Ah�sl��i���o ��&P�����Y  $!�����a������@޺U��7�P_�[��{�o���ohhT�{��+��
+��T�g p��5�}�
�^N�����sCm�=7 7H?�"=����� =�Y!����
 �H�� =�Y!����
 �H�� =�Y!����
 �H�� =�Y!����
 ��I�6R}P�3�	ҏ�H� �(���x�������(��T�g puzv�YH>�SS����@�8NM���<�����.�e��>�M�B_����Y�ؠd�
�- 9�mdH� 
+�qj�$�gǯ�$���.�j|��Ջ
J���oA���f�g �85Ur��i�Bm��?�$�'P&��jV/6(9wZ���|�62�g �85�ٽf(�Ջ
+�9<����@�8NMEzv�Y�f�b�Bz�9�gP�@�S��:��Y� =�׬e�z�A!=���
�3(T ǩ�_�I��N�2=�_�#��.
�Z~j��?v�bҨ��?_�������m2�
�z��hj
+�eJ�^�3��Z<�X��^5l�B_��v"�N�9=�t��o�}��o#CzP� ���E=�iSb
�3Czv�,KgO���g�]���у�
Mz�&i������G����[�~�����K*����7=�w��o�9x�g �H�6H�.�E��1�<-Z��:�ϵI��bL�ɔ��4��p�{F��HF�f.&�7ɿ1~P�qI�6H�.�嚡U��I�T����e�����n�,��_:T�
;�
=��򌳾��v�)��>��e��0o�O��n<~\�Jۓ�?�xe��z���e�����C���&�T-\ާ�7�B��X^�hՎ���7ےNr�Pӳ^ ��;����ߗ��m��㝢��.^Ȱ����Ο���Z��˦�ݢ�S����/߾
�t�ٲ�n������~��
�;l���E�s��=��S$#����{����r�!=� =;�7�g��
��#��۴*iYRl@��PqQߴ�F.�q�9j������⒒�K��l��
S�_�ss���N�".�f���BeZ�n��=�� d���t��g\�L�/�2�*KV1��O�K�L2����U֪�x�
;u��N ���l@�$�����[��S<��k[*r���5e4�0���zf��ؽ�%����n
+=3�74�TdY�9=��}�����.�lYEqq�\y�H��A�{�
ھ�����B��ϣ��
����77������c���.�6n����CFFq�Wh�浗����[Է��+�.T�|�E��
�Ѿ��Os9�!�;=�&ɖ�4��
=����훭/�yue�=�'�ҳ�`U8�G^7��;�Μ��S�$��
�~���8�Ϊ��T=����Hυ!=���
6ҳ�+o�w��^�
pr�2���@Q��E���3_���g�ȸ;d�ks��'�r|Ѳ�e����G�����ҡb���
�JϪ
��54h�l}��O?�s��a�(�=��'GI�)0���{'	j�s��-��9x��g�/����%O?>��\�sHH�a#=�8a�G���Yh���M��"=G�\2=�Y*萑����0��}�aE%�H�>(+բ���=����]9ۣ�1���IN��g%�o
fώUS�
J�9Ǿ�qu�@�s��-��i{��֠�琐���
����\nۃ�Q�\U�
v�c��y��GW�X_SSy���*�
:tTn �o/��Q���`��^2oܸC�1����={v�q��
�s�7T��Yrs�̸sҚ�V�+tII��?�w�
�ʾN[Ʋ���[~���
}^�}{,/AeA�f��l?6i�z%{{��'�ܶe�j����qr6 �NHz�~�E�?�yϪ�om�o#CzR�n��3 ='y�f�ez�Cdhq�iۺ�Oz�瞑C�̜7o�ĉC�+�sii�
�ڶ-SQ���ϘQ-��U[����*~کS;�[MMM��e�s�
+����v
+򂭆��Mi�Kn?x�ȗ�/q?!��س8�լR7%�|�,���ͷ��7�r�(ǞkV��'6K�u�� �?N�/���I���X�[��S���w&�Ihz~���|���짾i��b#���
�f���������}X�Ш��f�E��񽢢��s�~���{x��
��n����j�Y$憆F�~���Eh��.EX�t�رs.�*���1c�Iz�Kr{A����AI�ͭS!���R�?IϹ�Q�E�KǶ7�
$3t�{���xGz[�O���{��"7O�~���:���\WW��3�"_z�#�r�F��t5=p`�
��\�sZ*��_rJE�$=�~F�7����?�F�n'�e��i��"Zn���r��M���K��lnPo�,)��x��{�d�?=��{��
>{'�9Q�O*?\�q�$�*�W:��7���G:�=�g�==��,W�Lϝ:����f��'�ȱ��r�L����;��g
��=�sB*��?}�A\����>����_���Iz��������_v��O:�E�V���_��+�6� �y��|7�ݶ��&�j���^���d��WO��r������m���X��ٰ���n��a��V>��7P˲V�k��+�r����+t��7��
��W�]�O�f)�{n�
�����n�0�[����Y$c����b�r޼I#F\¼g]r�sZ�
��JfzN����T#=[]y�<KnVDn��{��+?5�O��]�ݠ�7	Ͼ��
%���s~�4�S����
��ܿ='Ϸy���>ӳa�7������.��%��Z�C��{�L�9��7n�!b��O�-h����)	�y��%[j?������~ٜ)��5�P�/��
+AI��M/������qӶ���'3��N��}v�]{������V7-+-��7	�wCo��N<��a#]ޠ^��㗅3���=���
۽>�_�
v�o��*BsS��~��'�x�]?��ܥ�9��#=��0��BP��rd�oɹo#���,��A%r�q�/pA������V���[N-|p4_�
GI
��{��	v�9��ڽ>�_�
�6��9���;&L���sf<���j�8�9�H� `����W��,�41�&r�$<�
���f�K��
�g�{����9��ۼ��?�{6`���|A{��}+��)���,��$='
� ̖��\�Ш��,zSut��~��7�>��s����{����r�z����w��|;'�{n�}�����=��r��F�|@zN�3 �-��9[���j�����{�x���:���T�g 0��
�s�H�!IZz���̮=�2�^H;?O�x���Gr�� �X�g/�^���y��(�OzVrN>�
+�
 
�,=�'��
�H�AI�ɧYa���Ԥg��ͧ���@���I{gBz�
v; 8JMzR*�w&��76�ܦ4�_�w)����gS������k�\�����ߚ��&�����#
`�Z���"��3����	�����&+���D�a֠�h� :��G�fȬ� ����DŽ����:t�~�{Ow����EuN�v���s?�w} 
 }��=eU�N�s_7�c��ٯ� �)�g < �8N;  �{�����{�
[������sޔ�
�)�|  0�
��=�!�C�bq~���  `
+�  {�C��"px��@�  ���� �g=`�bA�  �����M
ش�
�p�'��S�H�s��m[5���!�����������t �_�= /���������K|����=�VH���[o��^N�9��F�G���
�̱u5?�+,	�E��3J� ~�
��<�Zᦏ�-���zG�[�P\�g�)�Y ^�Z4�\[�Ó#��J�yΫk���[��Yzivo�-�MIE�'�Q`� �6�g ��ȱ�ç�����/Np1
�+��z��#�N���xpݞm�,-�g  � ��Z�Ύ��d�Y ~�����&�#r͞�?��G���3�WV
$˭�&���V[�c0s̥�I�#��f�t���eب�GI��yeͲ��Α��u�={=�瞫�.'�K��,_nj"�N|C��閰
�,-�g  � �9P����5da�9YR<��=o\:��l��_�B
:s~�""�|���,� �<����/�;-��{��=�
S3nޢ%���̘�%��
ZHM^�ݩ�j��{��;w~�������ך7O0mw �3  �
�>=��O�>��P
z�{�,T=.������/�=1�]��\R�1f�������R�+_�xQϞ��6M`G��){>]}6�%S�
Pݜ�g �_�=�v�.�Z�;��@�z��޲{Ǟ
+�����ǿ��[R�H9�}
��s�o��Om�8{f��Y�j6(
�grQ�OZ�,�1<�wh[+7`�  �=`/R�z+j�ZWzV��\���
��QO
��=�պ�~gUe9-��l ��3]�
ڎ��g�U�/\��������ն��$%�ڷoI�n7����_EG��ys0>>.�`(�g  � {�m�[!��.�3�f�(ʞi�3oҬ�9,{^0;�l��U��*
 ��x�]{�����"ԞϜi��mƐ!=�'&�:��ډO��>q�t
[g���
6���/*:D������� �g �E���
+�+=ß>>H��y3E�u4Ӭ
sú=����31���m�=8�i{V�~9P]wVj�[�|>a��֭{z�����
>�|�m�I�ҥ�iG�rP�3  �
����mE��+�Vn(����Lm����9����D�G��M���ې���&��� �pڞ�����R�3��;س��=�,�q �L۩
���y��R���$4� �=�V*�@�<z{�޲�E���Ln�|��M{��
+
j�T���ߴ`�&�Nɯ�U�d#yy�D��	��q���uܱg�>by���!<d�z89��ر�D�������֬ٹoߒ�
1� �`�b@
+�G�|l�~�,!�� �g1�?z��me�‚C�'܎�R�'n^���NaϦ�� x՞e���)�#,{��y�3p(���}���r��j#�=���MAo �ўOW�eS�2`� �˞�z#��}`o	]�ҵ;����:�3
ux��Y/o�N�1lt���Þ�)�gS�� l���9�۶j>3cP�
)�����
d#{�3ʪ=�1�>�ٯ�g���
�X�^{�Sv�a����9�M�g��Y;yIRR�}��t�v3?%���a�@��+7,���%�a��^Y���ߟQ�v��~/��JI: @
,��ƥ�"����ێ
;�~��9?_m�� �ĉI{�N7�v�ӹ�O�C�/^\H'�**:�f��2
�3�#��i����Y�9
�g��\Y�?  OcɞB�
b�Yo*Z��g���t�WQ�NQ`�@���y�����mD���1�f/�3p(o�|!GI��{b�= �)���}�"�����od?6
�g
O����Lm����9����D�G��M���ې���&��䞁�s��3i?z�
��l�
  �8Q�L�y�
�Z�Q���{��T���
V�qc)��5�x`�@��
<�  L�מT��y3m�Þ���M��!�Ԟ�
ϟ�i��M��4�_���F��2�vG��{
�
  ��hϛ>:��r�j�g���;6���r��9=�ߚ5;��[ұc"�� �{
�
  �xu�Aـ==`��C�� �س`�@�挀=`�  `
+�Y
�g�����#j�؏_�= �)�g1��AL!�g�{�
[�
+ٔ���sޔ�܎��g  0�
{�+�g#����-P��9�� ���Y�o��"�;q ��{��WRo}1%�={��
+

+>\<�
+ v�=[i	 $�l
�s�{��w�+����+�1 v{ �
��:��p�"� �Ƅ
�+�����.��g @����{w/^P�3 1
� 6���)��s_7U����OV����O\j���:z���݋W�
@�{ �M���Ğg>>�whس<�ޞ�763�������$h�:�|�̇}��I�aR`� ��� a�=�ޡݵg+6
{�c/�����!��귰�Ȁ=��g @��?ҙ��}�����C�zu�bf��_��"�#G�޼9X]]߭ی!Cz��
.1�=s�����m���d������� 
�}VIV#+?��}��_C��:d���V��-���fm���$>>� rس�^6.�􋜷2��M
7�wh׋`�Z`� ��� a�R�BhӲY�c{�?ӂ��
�
�������x"��[7g��Mܗ�ߩ�M*{��%n������u!��t���H���{��
���9��B�@<��V��_e�A��g�МW�����V����>�
納]n�����]�ͫ�ޞ=mSƣ��f��t�"yI붉��u��6�홆tw�O��VWUV���u�={=@Bƣ:U����a��9䙁=1�g @�8�{��

� ^K[���U�[�|>a��֭{z����u�|����ګ֡��Gb
�Yo/��٦��F�У��S��7r�W/'�y`o	]�ҵ;�^i?'jx��V�
���Ŭ���W#
��5�%��%�J
�g�$�z�K�u��7$�-[��Gu�W�a��LS{f,
������ a�|�3o���b
�ܳAθ�
z�L_[_�H�ȑ��rrr�:|�•��{֒���t�ِ�"ݪEB��x+�L�$m)�����ӂ9��F���l\ǔ��bȄ+�ƾ��-�
��홅D#g�gm<�����F���Kwm
yf��;���
����S�:C��s�1+�̸8��ƍ�&�.
1g�h�g�b��6{j�Eb���=k�SV���ߎW��	���̌A���p*7���4	�ZM��V�3��Ɔs�,�

J��&&�e�,m<*{f�k�� [...]
+1�ѮCVPEBt� rس
�f�u��5oN�#E	��;���L̺;��ae�T��g���I_�+7����=2
��B���R���=3P�
@�x���7�3D��Ir��SK��s
j�܈����_���g��xcnPMW�V<A_�f�}K:vLĘ¡��{3�J/�`vfi�6b�		�`�g���,��#U�[�=��Z
+�d�_�l
��������
�
@X��}
��f��Y������7��L2�J6܄^�3�p���a�?,,�^
}��-)b�f(�>��Q�n�Ƈm0�;3�=1�g�{�{��9\$�LU�ak��@�
 �9*����0�g`�g����E�^��3 1
�9*bО�Y�@O-9�g����E���{ f�=G�ٴ=2�SK�
��o�r3Þ�#�Lݶ�> 
y�9����+��tC!g�3���L�t�N��rT�8l������Ϡ伲fY�st���@ډUU�h0����D<񬞭:\�{�)��
S
�<!dSr��>q��,����<��Bڳ_A�
 E^{V���Q�M�`8L:�O0'��S����2��nZYq��v���d�y����٠���U��h�y{��f��J��x�Y���L�} !'�|����4 1�,928����>Mi?y(�p�Ї@ �����7/+J>��O媄�ݔ����TVm0b(�^;T�6����A5�lH" [...]
�y�x�Y���=��v+���i�X~W  L�ў�}�
+>�2�WX�g����z��Ҥ��ܳ^��I�p'��ێ�L?0hK�aϾ��Wpe ����zݳJ���,ۿ{U���C����nj=���X��l�K���f�
��O<�w�{���+��  `���Y�~�
6��*�ˬ�g�B�nZ[��ܳjbU�17T��F?��ijz'��璢�i�����i�X~W  L�מ��s���
g�����܀=�8�_��  S�gE�a�a�{�
8�_��  S`ϖh���-
V
+]��{���+��  `
+�ٷ���}���
+�,  ��{� {v ��+��  `�����)O�!��Ua��
+p,��+
  �Hm��y���Þ�=�_��  S`��:�����٦��
۵�����N�s���
+�,  �{��?i��ok>]���Mn��=�_��  S`�@0��X at lϐ��'���)�1��)�
����/��� `+�g �s, �g����n$��xe�}Y%��  [�=���c;�y�Sc�lMZ��ݢHo]��y���@�@�'�Q���  [�=���c�s����  {��=����=��3  �
{�`� {��g  ��a��?9v�,
����
�~֣K�@|���+^�vh@<�
u��m[5W5ž�!�+K������]�
�=�>]׭ی!Czn�
������Ν0`��ߟ9z����ڠ�(�{ ���v�.�Z�1'��c�����{��ƽLn	�whس<Dpe�[36�z���x��= �
+�clṕ���;$��t}P��> ➁���3�аgy�̞�OZ�\���
Z�=��
 ��3Ƒc'�O�c?"��chϰq�p_�>g=[f=l�
+�̞�k~
5~p��}/+�KJw���+��uo���M�������@3��ã�g=�M�Ț�
ye񪸸+*v���.^�H�3
�D�
���Ɔ�f<^��a��!�Io�ڽ����v
h$!��!{�ʞ�>;�?��~d=�ה��yܸ׷l���d���wc�{�L]��ymݺ����п����W���#{S��o��=�e�3  J`�@$Y��ٱ�\A���ОAġ[��b0V�9!!����E��Ԥ���,�6w�,j�;v~@��v��V�;S�Z�zMW�y��Q���n����\A6��_J��6i`�Sn58�s�
 >�%
+{�3g���
��2'O
��.��@ ~߾%�[7g��xq���I
�
��ә�69�
yUSS��
{ D ������x�7�g�s_�p_������������r��ŋ���xMm��������<tqIo�D�7�q��CG�d�m
'�g>9��m�M^�iz[�sXW���K|ɖr-��f�J��������
zon����,�L��
K�}����4�#�K7�N��u�&�������
 ��3L֢w�[)��&ʺg���g+u�z�
4#���Ϧ��
����^$vK�W�>�lj�|��Z�6���o�9��g����h����+:�z�L3ʴHC�Z�������P`�  q���u��Ɇ�{ݎ�
+#�7�!�� ��ƞU�
*֞4����e��S�ӳ��\����vN�U�*��v�ڳ�%�M�=�
�M>�X�g�#�JtO
&'��?��ɓ��f���3�`j�������= � �
����Iޟ�%����]��ꔨ��UO��y��zu��ϛV\RD<;!>���
�b��ش���g���A�pu��17ƍ{�㏏�۷�c�DS{&fL1
�Ic^^�ȑ�Q�
 ��3����`f��a��z���'�q~�A{V��)�*̏�ѩcg���17�6�{�#z{޿��h����-z,��
�� ��3��3�f� س?�= ��gy�j��:]�3��9`�� �
 pڞ�*���S�3��o�/�`�m�h:xs���� �=�?��3��o��I`���7�=  b`�b�M
+{V�Þc��j��
��ߟ!���o�^�B�� �س`�b�=K�؞a�‚C�'�lJrR�'n^��vF������,�u �
+�Y
1h����c++��>�漺�l]�#�t��Ϊ��v�7�+,���<�9��բ�G&fe�z�b�g��h<~ř+�� �i<c�� ����7�j��v��fk1h�o����zy��{K�B��݉=�'$������j� ?� �<����/�;-��;lt��0`ϒ��+�g  0�F{~�`W�{o�s_7��,9��3�Q���+��9�������L��g��
�,9��{  Sl���9���U{��� ��b�Y,�g%��
�=3{f�iس�����3  �b�=�e��B�yܸ׷l���d���w�N�J�h����%d���{�3��7}k
�3����5��ӑ{�`?~�
  �X�gQ{���+���9�^���9y�`�w�=���-iݺ9S�ŋ
,�DL���]������mȫ�����eس�
fg�o#r��f�y6{i��Cy{�
9J�>@ݳ�����3  ��=�mռU�+V�=��u�ᇳC�ޛ���r}��=c�p�k_��}"�����ƍ�&�nݺ���?����=G?��g�~��s×�~�
+�  Lq�r�x��1}ɿaSW(Q�s}�yE��BϞiF�i(W�9X��

+��z0�3��ǯ�� ���y3YP�~j09�����N��_4slŞ�SKG��uG�Y�3��ǯ�� ��9k�;�wtb�L����ٷoIǎ���L̘>bēƼ�̑#{��Y�3��ǯ�� �OΖ����Ӈ-Z�XX�s��3��ǯ�`�y�}�a�^[ň=�My�o�P��S+
+�ISp�D�$ۍg�Yr|fϒ���W��
1�v�J_o�Y�^�U7���%�V�72�7�8o
�g1�ƞ�,,8Ty��(���>q��,�� ���g�
��+�g׿3%�Wd^	>\b�`E��%*Λ@����,��3 V��gX��Q���k�(��g�ĔP������ �go{1�9b`Ϧ{�[ĔP������ �eϦ����r��6���
Ҿ# �s���M����)������bŞ-��zўQ�
b�s����^>/�
��CRk�omu
:Ij]͏�
+K�f���'�|ؗ��D
&%��}������B0'w���p�(�8� �&�؞=zެ�#���{���@f"�
=r�d�
)�vس$8i��N�E�[�Ӧ��;4�92d�����
٧W��s^]�!��ܵg�7������
��D���k�{ʪf>>�ѡ?��aϒ�=��YO��y�v�{mس�YN�gـ=;� ��ƞ7}t�,���&ޡaϒ�=��Oo
+s�Q��)fJ�Y++��>�RϠ���pN����;�*��%߼�����&��䣇�f��t�"yI붉��u��6�홆tw�O��VWUV���u�={=@Bƣ:U����a��$䙱՞�
D"�����ٿ����N����][�#9�a��=�%]9�5�r�������I\�
r��1�r�D`Ϫ�6���_�?������,�~ V��33���
�+�
;�~dml��5?�?8������%��H�ڕ�����U|uds�vҷ�u

�>�l����@�
�o�+�W��ő���eO͘p�j����$����R{�W[W]y�+�;�ڶI�_S�9�V���]�W
;�ܮ�G�
��	i�NW�
�+�ЭZ$4K�7PZJ���-�
]�vg��u������[xC�Y��L̚���#���3q�]=�e*Ӣe������8l�N�ajό�Ì�`U9Tzɂ9�ߝ��dDȨ���ռEKr�I�
�L+�vB��M"$���y���	{�b�  +пPQ�ޑR]wť��9!!@l�E��Ԥ��,�6w�,��;v~@��v��V�;S�Z�zMW�y��Q���
�o��
w�>5��'��]��o��Gd��`aτ=eU{���w5|��`ߟ���9?_1P��
��CӖ���/�;�=eEVزq
{�g.�Mh�پ�;�b�ke%j{f!�ș�h����}�o
6�\�k[�3����.
����'Y4-g�����D�=;޼už��/ �
+�r�m[5�<�/�7l�
+�B�ŋ����Vo��^���,�C��f�z����@��Б/�j��...�y9}acc	���d�S��,
����a�
�д�Y����R+ʿ7+W�Y��E�j�t�J��~c�9���g�P��61�-{f1h�Q�	K
��/��~e�3CӊN�=S�YRZ3���NH\�ID�=;|޼už��/ �
+��=3o&
�Yݳ�=�.�Hs�?��g/|8c诟{�3���o�Pm���g)%��3����М4[NLL�=G
�gޛ)a=xG����uwj/>�����^4��|�6����'C�����Z1'Un���S���XVR
��܎q�n�$B�������,�~ V�ƞw����L�؞���N
N�^�r��߿�9�V��
U
+� ���wߝb[�Vn������5u�
�
��ٙ����;tBB�hij�Ki�K�>�J�iň~�M��w�r��+5�Gu�
�֫+5�M�=�KV����m���#����	��7�{v��y���=K�_ �"�
�SV��=��fJ����(�Ӂ�e
|����g�ZB7�nTn�A��!�S�o�,�W�J��?h��

�,�
+�L����A	�k§�GU�����c!ό��璢xcSy�u
���N��\�I��gWΛ��Oس� X��
�Y�Z�LD�Wa~�
*�tͰ��`C|��5ȯ��7�84��CFl����AF�s�>޳EDUn��(d��xt�noݟ���}���a�^�w�'F
�9o�C+��	�p�hϳ<'��
�
�ԭ���qس)����+��g�=��oJ�6���R�oDO�7I��[�=G
���݂{��J�Sx0�z��ܞ���oW��ǼržC�ڳ�w�G�rKI�7�id~S��[�=�
��m�l��YOž�B������Y8rvt�"�=��s��ž���
�g!H�{�س)S
�<�b �Ii��yy����E{���� 
+={�=_�_�s4����,�X{;�=��
+��~�Pp�D�$ۍ��|sRk����
޻u���a|c�2�d�,��z;q����  L�ڞ�[�P����{F���$� �Y�`���=�|lH��zȞ�$�� �)
�g�"�C�,v�gg�=?�+
  �Hm�-�'44^�8�ʡ��i�LBt:�;���ԉo��5��,l8�8l�������弲fY�st��\�w���LmuUekW�N�xBNw�=d�Y�T���Ջ�g?�d�](׏��¶r�ڳp`� \pe �I�9-c���z�}>s���:��q���w:�z0'��S� 
���xd�jf�ʊCL��.'��[�T�*I�a�}���]G��k���p`o	
F{P4f~�.]��� ]�OH0
�R�=��$3�V�N4�
�ʩ�ޞ��i:i*
�
)=KƟ7
��AlB�c�\Y  0ER{>P����U���O
r����_2w��a�ӕ���e�:j9|&�M�N�E�S��b<_</mD
�U�C������?�S����(���j��{��IVe|�.��j�V�d�<[�����}6{)9">�NϘ��
���3\Y  0ER{��Ġ���%�/�pЬ!�;��3p(Yn���ؑ�
6������!��G�L����FW�iT������쳓
ҞY�ڰ�gZCr��T���l|�`�@8��  `��Y�yAUZ�'d�*�h�O�j��2͏���N�r�Kf��=k���I��=��ɐa��U��g��L�0h���=�3p
\Y  0Ej{~ c��?޳�R,��Y����m�0�⽊�T�-*��ei;}`N+�k�dO�U�		�#�
��pH̪�h��2�Ξ�g�dm�3/�ڰ��=�MLz��ٹ
��� ���,  �"�=G��Se����� ]�+6���"�5?ZO��ӵ�����`0
�*���l�N�}v�ٮU�`��
+�J���������
\W  L�=;�3㋉�s�=;p���E����Z~1�7�g�.��  `
+���g�){v�s�{�lغW��b�zΛ�P�/�= �)�gK�.~V_B �X�g����/��1�s���B��Þ �سo�={س�[��Q�M��ݢ�� �f<`� ��3�
�s���� {  �ڞ�,,8Ty•]�������g��3,�y��c	�9v�= �Hm� x��?�T�ilj��Ԧ��7��vL?AE�YN`�  � �g d����ǿ��t}�֎7�
K"��
;�zG��
�,�3  8 � �=?�Zឲ���~t���vس`�  � �g d�����d�
�аg!�f�>
�;�q� ��
��xžgf
��;vW
9v���
�؞�k~
5~p��}/+�KJw���+��uo���M�������@3��ã�g=�M�Ț�
ye񪸸8�|���.^
<�IdM�8���x�W��r����]���������W,
�j�za�0F>�ȑ��t��|鷿�/���� ��Y��g�c��  O {@F<aϢH�#��37�p��='$���hђ*)1ԝ���.�E�r���r�.��
+ugjU�T���9/�<j��z�KLL"����D4����,ן���L���T�~��qUH�=j�&�L�9�]�ͯ�z�,�hޒ��.)�t_�Sn58�rڳ��R��< <
� �=G�{n۪��1}ɿaSW(r�D=/^��RL*�,]\Rě���+6�q��CG�d�m��n�~
�o
#..���wߝ
+�Gޘ���1?6v"K��
�v_����
@�{@"T����Kda���t�Y���/�%�O}l�ۡ]G�u�̛ɂb�Yz�4#���Ϧ��
����^$�J�u��+T[ ���_JI�{�[`k�3i?��ɐ{��B�Y/Y΀=;���
�D�^���S5��ɒ���h�yGi9�͔���pyYp������+������Sn�M��[%�ܳi��={
�3 1� �8�R�I�OW��?\95��.qϰ��*�{
+�͔��=ާ}V��Gi�t�u��-��12{��
���uўC��
{ ��3 rQ������O����d��\�'$�5h`�ʵB
^��0؈��17�m�$���B�QH�Y�/\��#yKb����3Sf�� ���
�t
���
���EO�k�܍GKl��͛.
O�}�k�ڑ�e���#��"j��g b
�3 ұcwy֢w��C�}�r��� ��o{5�w�[E���jӐ�S3g��C��8!�U��k��cG�H�vW�  <
� �ŋo}���Wg�U�h-	��g޴5�`�i�Te�ѐҾ��=�1�w�nw��d�*���M�c�3 1� 9r�$�O���ݎ%��g����)��s�o�0�H��n��f�Y���|���TL��=���O�{�lغ��(�0b@�ySďvg�=!�bu!G���Ⱦ!�y{�8��i��g b
�3 ���x��3LYXp�򄨭�2)�7/�r~�!G�b�Q��3 @8�g �C�a��
w�x���#�
�Nȑ���s�CzS3�5ԫ{�= ,{@<�g A��D=�������A�%%��
{ X�{��$T86՘�{@��à�g b
�Y��P�?
+����� ��5{F
+|
� �= �������0`� (�� >�,
�{@1��;����|�^�= 1
�Y�g�˞�763�VV
$�}�yu�ٺ�'G��r��U���o^WXR�uy0s̥�#	<21+k�KV�
{�b<����٭q� 2 {�0²����_�<w]ၽ%t�K��Ğ�V�o�t�m��?�Gk��R����̝��
6:�t˰g 3��  
�^{>r�����S�4�|����ӏ��2[�aπ�=�e�˽�~���ڸ�xj�Ī{�z �0`�@fp <������*}�z����2�3?w��mž#��
�=3{f�i۳���w�G��= <��L��C��B	s������]�e��wz����y�*�:�����Jg�bs�*�٧�f�T�5E�l
9���]�W
;�ܮ��J�3`D�� �1?21k�/��Z��������=� �Q,ٳ@�C�j���c�		��5�-Z�d3��,�6w�,j�;v~@��v��V�;S�Z�zMW�y�����f�g����$��t���s�l�Sn5��
a��ٙ��ۈ
��-�9���}��/�()���u�2|%�3��`�  ��=+מ�+�L$���
*��B����%EԌG
��v�������#_2�f[�+7�R�����Ns����^
CȘ̞I���_�{�
سp��`�  ��\���}�f>>h֫����9hF���Mٳ>�1��ϽHė���7W��@������v{�/d+��A�`��p�=
G�
��]䡚xU���"mI���'\��'��!{��L�W�y�4�g����S�ӳ��\����vN�U�Bf��䞁c����,
�{$�w��j�����Euk��`yb��e�F��v{~��b��!����@��cO�y��̌�g
��a� `�z
9v2��m���s�t@;:���Z�{������&S�n^�<\Bv,~=X�<p��D��Գ�سr��y��+�d3?�:Cь�AG�{~޴⒢�m���KJ�s�
"@��TB{~��B�z��
�3��C�̆��=G	�٣ĠDRb��a�zHm��B��*�R}�'�=o�� Y���M�C{�[��`�Q{�(1(��<pس
�ga��^
c�‚C�'܎�
+)�7/��Y�3��
�
w�8r�$��9�i�`���z�%ї���������Wtw=�J忤Z���qO>D����!i���e`���������
ˑ��Ԟ�a����!�{�(1(��<pس
�ga��^�(�2���>+jk�w��P{��n0�g;FW=g���.��'��]�vU�Y�
*�OQ���qe�;��o����
GH��=���L����q]a�^j��:�왏�rS��G�:X~l{:X�p���3`���!�{ ��SV����"x�*�l}
+R�F7�]\\
������zO*��j��if� �r�
>x�r�ڳA�\��=���%r�5g���!�5��92<d�GQ�kۤ�s`ϲ{��5{�+�� 0��=3o&
������n�;ހ�Ӕ�ڳ^04A����F�#��
3	��g�rC�V%bp����
v�����x���Aa��I��=~R֬�`ϲ{��{��$T86՘��=�(-罙�=G9������C�o�
���=�wz�B�$�G�.�mj'��:����
納]n�����]�ͫ�ޞ=m)~F��mW�o�t�m�3���ԟ������ -��
+{�z@�~�Q��(H`U_�G���'�n{y�w���]��;�BZ�<:�
=
z*���PV{zg�o��ģ���O���~����(9L�*���w/�hA�moI[�
ڰQ��q�]伲fY�s���	
�/c`�z�`� ��eOYUj�ޛ)��s���[�{��X�g��h��`����� i;Y /a�
\2r�W�� ��|r��o0������_������%t�K��,���{O���~Im���*J|�{&��l�ԉoH�-Z�
+��(诌#��
���Ds�VV�0kk~T����78d��w��re�!�;���_��s��2�o���B�]w㻗_�?"�9�y��d������-�=d��� 2�=+Q��n�;:�? *�w��N����=C7E
2b����^bd̍_���?7X�CR�����7�`d'Ԟ�2g�-���_2wZ0'w��t�–��T�2۪�Z�y�Di�,*<39mH���\�q��r�m!O/[�ٳ�0!+7x�W
����.�=�!���3�ف��e?�84�	��ۓ�w/r�1Gp���a�z�� �#�����l7�۳
+�r�zs��f���*7��_I�T�j5UNZe�,9ǴF�,tҞYڐT&�r����T�'��$
�g��w�W���%�!��=,�LdQ[���9v��w#t���Lڿ;�ӻW�=3A���{ � �Y8
�gޛi�����<21���^!�@%p�H��$_$�p�^R�m�*�h�rC�{f8S�lGw*J�>�{f���
�$�+��'�gׁ= ��-{�
9��
س3|���
�xo���ɂٙ��ۘ�=�������3�'�,t�r��I5)�	G�W��g���=[�8�n׮f�Q���K����
�\��u��H�ݺ=k�e:��Y�3 �}d�=� �ٳ
я���@��Z8]а�DY

n���2$U���j|�cn���X�Y�0I�oW���L�Y�~T
+vz���E�17B�ӻ7�ܳv_�����= ����������2����
[����
�����=;yB"��Y�3 �}|<
���czسl���F�sl{   /�gـ=����
  @^|oϞ#'����Þ��=  �o��k�ٯ���X 
���
  @^<T�*4�P��-����������	�`�y�}�a�^���zΛ��Q      �p����5��     �1�ٳ��E���     @س0`�     ��,
�3    ��=
�
    �{bȞ���xMm����MMMl9h&d��g     �c�=��>K��Ԛot؞����3SfÞ    @��k�{ʪ~��V���0�vҞ�:?5c�cc'�z&�o�M�
     ,b�=��YO��CGc��5?�?8��}�uՕǾ"-kW����޴=����,^u��j�k�<3{R�W��j�:v�?js�t��6�������b�=    �
K�<3cpd[?�]ͦ���C���CJt����@���]��zO�<����E��Z{&f��_��ܳ^�ƛ�W���l𳿔����{ [...]
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      �����
+endstream
+endobj
+1338 0 obj
+64
+endobj
+1328 0 obj <<
+/D [1326 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1329 0 obj <<
+/D [1326 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1330 0 obj <<
+/D [1326 0 R /XYZ 86.4 83.712 null]
+>> endobj
+985 0 obj <<
+/D [1326 0 R /XYZ 250.14 46.905 null]
+>> endobj
+1325 0 obj <<
+/Font << /F36 740 0 R /F18 1272 0 R /F16 729 0 R /F8 741 0 R >>
+/XObject << /Im4 1315 0 R /Im5 1316 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1346 0 obj <<
+/Length 2184      
+/Filter /FlateDecode
+>>
+stream
+xڵXI��6����zς����
oϙ83Iwrq|@�h�	%�$�mϯ�*@��o���HX
+�Z?T1�6Q��������E+2�E7wQ�1iQ�L�覊>Ē��Z�2~�j%E��g*n�����6C��a�k.c!Wo~�z}s���I�Ô�*���Շ�IT�ΏQ�d�G�n)Y0�&����*���7�j�er�t���ȴr�ӱ�
����w�,z��_ƭ�c���tF��m�d�t�m��
;�Z�"G�|�Z+��ޯD
��4
m�Cw,����ͦ3;��w�?l-��>u/$+r���WW+!b��T6!X��tS���46�@.p����돍�`�b������K�.	"2�r�������P�7Ǻ��
+OEk�A0Dk�Y��D~�RAiuܵ�}�nr��lq����b&�m�X��ؽ��'�U�xЦ�{.���nj��v3{8������:�ks��:����o[3��s%؀��H���l	$R�����t4>���±K��'3����ݡ�;�_A�
�s+
�{�	��}�o��M]�C��=t���m�a��
+�Cӷ4"eh4W�{�?��B�qqp}�����E�s��,��J���c  �.��k�2-"Y,Ͻ8�oH��x )�n�����a
���$C��`�;S�@�ҿ3����0w�ѩJ��z��~�1��vom5?]�x�aߴ�:��{�� �gf,�����Dl{7T�&!h����F�<b
�*�b c�
�2�
+ at M
+�A7�l�
+ą���ہ 0�z����g!.�
�.Gh�$M,Wj�@Ϝ�J��K����|���x:�]�u�4NS}0@��:3�Q�D�;�����p��z>�CL� Ÿ<�����	H
���/�`w�AY�
+�_��i@�ݻ�͉�<A��u<���=q
�ۮ��{��������~F���:�n��c��/$���y1��cJ�<w
+k�� �U`�yOd��t �h� ���{���
�_�O� 0mU{�TtBR�- ,��O ��
	�ѻ�D���-)u�u)��X������
��<���Ro�,
:Y�{�BK��[_)��vOלj!�8?C�> 9��8y�I|��v
j@�[�O6�z��h�|*���<�F�u $U���<�Ndt[O�@"
+w�'��	�w
+��:��3
(�Q�[��1ìl�
+ at 2�޵M���zKo�~��R2������
p>Ѝo5�7���v�&�x��v��F��
͙��̯N���,����Hq���k�b"���5M��b��s ?Pa\�1@�@�.�B�9����#�g�.�aّ`��9�A
B����ڽ�z��N�q�'1�[o��E�.��\���
P
�g�g�
���3	Q��o��]�0]����#��r���"	/\� �XFc�P@���T
+�`��~l�R_��^H{����<��OG|K��40��f�r���N؎�fO�#���ƭ���/���
�h�jQ��C~hL��T��3��c�_�ׂ�D����:�9
+&��
�[gx��s��5
��Ĵp��]27m�.VO�Ɲ��q3؛���������d�4�B���`g���{� O���P.�p
\���q+ex5z[�{(wz�.Qv�
����K*%����Mn �|
ok�|W�L��D��Iڃ {H�|�F�
���f�W��?�\ͫ�P�}�������Tn��5�Oݨ���I��`0	��fTᨯ��5�Z���X��Jm��^�< �:�:p
<�����@�S��
+]�� X��L3�N�5�
��%
�ܛT�ኋ
�a�����)�X-P���K��}�����륛�1"
�ŗ����5
�����W�rh�@v�@<�+��k�
'��SW�B4�r	�����	��GJ�oH(�	O�逈�B"#t���7Td��_XR�`�|ђ�e?
+��H+��L�aRQa|ƒi;0���
�\�4�]��_D �s���o@ ��q
+
d:+���_ P�,z�d�;$��y�;mh ��7�u���W�����f4
dx�����

+^s�XBg ��}��ۊSHe�ٓ�����u
�iʒ,�>��}r�X-h,��}}��n;l�G�ǁ=����|2�n��b�-
+y�z�Q�A)U�_��
�m�ϸ�wQ��P�m;y�
+endstream
+endobj
+1345 0 obj <<
+/Type /Page
+/Contents 1346 0 R
+/Resources 1344 0 R
+/MediaBox [0 0 612 792]
+/Parent 1324 0 R
+/Annots [ 1339 0 R 1340 0 R 1341 0 R 1342 0 R 1343 0 R ]
+>> endobj
+1318 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./idasorg.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1348 0 R
+/BBox [0 0 736 408]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1349 0 R
+>>/Font << /R8 1350 0 R/R10 1351 0 R>>
+>>
+/Length 1352 0 R
+/Filter /FlateDecode
+>>
+stream
+x��Zɒ#���W�͒"Tƾ
{�&���!)���(
lG�|��;7��b5�$on�C/�Db�6�I�
+���:�yǯ�Ԕ�3:�lj?�ڎ�e3:�ը���~�ap��=���^l����q�np�'�51�RV��0�[-�e'�B{�
�����:���P�N9�4��Dz�y��	z���u����is�
wϏ�n����1h����wO���������?A��d(���i�}��<`����ذ�f?|���1y
�rP�&HĠ#��
*�S����룝�.�;O�����Pi�{۔�䨶`o���Bf���]d	z�qq��I��pV���B���.����L"��`W�����!���<�L�`3R�0�{�������=[|��À�U0~�9bH�O��P??
QV�b.�a�Ay)J����K��8Vƪ�� �JJS��7O��{[c"����hͩ�Wk���ݤh������;57V����|���n���ݧ�j�@��=���k5�
+'��Yno���O͉>�I��
�Jj4&MA������6����I��a�ʀ������v��(
����+T�S��@�
+?����?w��q��9.Y�WU���
k詀��A�m�@�K���g4�+� ��VsL'r��^HB�(�8��<��0
+7�\2��3
����V釂X�J�J�NӔ����5�e�?!�EZL�g=���>����im���f�<]���c�d`0��Αs���AZu"����Cr�J
�|��y|ܴQ(�����GXL�)���z�E@��S2t�����@
p��
FZ\U���U%�
+cK���`��
 ���)��Ti��`���D�J�J�NӘ�X
>wL�,)��%��6�ed�ӹض
=�4�$h����)>��#�M2i����X'ua��XR/CN� ��t1-fh�R�9\2b�AE�BŠ� N�+�/7�z�A�V'Yi���������w�� ���$
�;�9A���0+�
'
��*�>�&P�9)�V L��o�
#����?����U�8�v��
+
����
c�ձ#�k)xЍ0`Y��D
�T�,��!,#�dU�
c���א���X�H��n)�c�-��ϲT�S��#
ɑLȾK֞8��w�{�c�-��ħ�B��#t
a
;Z���X
+��nz� ;�5ַɹ'� �{�c���B�S\���R��BXώ
�+��e�h�
aH�dc�]���tm/v������W�>u�‚n!�,|��g�>���L|:�T��Ks�c��*әܡ�뇞��=�r�R
z�^PK]��U�
s�:��ȸ:к4�:F8�`{Ǩ�[
8���݈���zA
umT=�>����^m����8N$�=�+�VQp�P��7���	
�[
+�z`��Y/��q-paճ�W�x�#���I���J�Uh����|c��>X�
.L�k��Y/��q|]X���,�Ga��†Ng0�#�Bk T*S8i�z��w	��F���c�N��⸺�"Z�u���
s�d�.q�Tw�4wG)���o���&���؝f�b�-X#��Vw������FSf�.���fi����3bN�:t�Rk�0~��o��I��;�D�6�L�K�z!��Ȳ%��*���޽�z��~���*m�O
���tr��"�T�ґ�d�=�1|�(@�<)���7���/X���N�//J-m�%�z\	�rkJ@�9��Tnc���]-J0�}��j0:����'�
���j! -fTZ,�U�$�
�PZl
���b��$����p
R9:�vn� �B"�D�.�X
�.66ҕ�8u���� 7>T��q#3p�Ԅ��&2�ZHB�f�N�s*�
+�T����S�h+
����2܉S3b�*	+�8ͣ�C5�F1(4��Ex�t�byd���ŌJ�������J�u�I���(��Ü��@i1��bA��D�&	M�c{�K����|��Δ+W��e'P���`�\V����	�� �B!�.�e$�(�e
+�J��!h�:%'��*�5	���X��"��
IS7�FSW{\1��V��%}���'c���h
9���>�4
o�R�(;BѴ߈�򃗫�Oi��ѹ���������
e�D��X@�P
+�ID1z�i\�/�w��
+��c��.�J=��ݖ��ɲ�س��}�b���>B�ԋ�.ͥ�^bXXN
+��j���I)fc�� 5hw�AB���G�¯G
+v���������:����D:�R�DӇ�6t�UJ�!E�
Vl��Z.�6򅽣
-_��8���R�Ua�Z�.�^Hu�O�3VF|&L=֥����
^9�m��K>�uu��|x�@G��R��
��
���@a��o
��������Gz6nt���y��{~��?<?m��
Ct��9�uO-R�𥼪/��o�3���Ϗ�S�a���������������ֻ)��Y��]|	����O����
]��
�����
+endstream
+endobj
+1348 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151021114517-07'00')
+/ModDate (D:20151021114517-07'00')
+/Title (idasorg.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1349 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1350 0 obj
+<<
+/BaseFont /SYMKKU#2BTimes-Roman
+/FontDescriptor 1353 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 86
+/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 667 722 611 556 722 0 333 0 0 611 889 722 722 556 0 667 556 611 722 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+1351 0 obj
+<<
+/BaseFont /GQZABY#2BTimes-Bold
+/FontDescriptor 1354 0 R
+/Type /Font
+/FirstChar 65
+/LastChar 86
+/Widths [ 722 667 722 722 667 611 778 0 389 500 0 667 944 722 778 611 778 722 556 667 0 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+1352 0 obj
+2464
+endobj
+1353 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SYMKKU#2BTimes-Roman
+/FontBBox [ 0 -14 863 676]
+/Flags 65568
+/Ascent 676
+/CapHeight 676
+/Descent -14
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/C/D/E/F/G/I/L/M/N/O/P/R/S/T/U/V/space)
+/FontFile3 1355 0 R
+>>
+endobj
+1354 0 obj
+<<
+/Type /FontDescriptor
+/FontName /GQZABY#2BTimes-Bold
+/FontBBox [ 0 -176 921 692]
+/Flags 65568
+/Ascent 692
+/CapHeight 692
+/Descent -176
+/ItalicAngle 0
+/StemV 138
+/MissingWidth 500
+/CharSet (/A/B/C/D/E/F/G/I/J/L/M/N/O/P/Q/R/S/T/V)
+/FontFile3 1356 0 R
+>>
+endobj
+1355 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2025
+>>
+stream
+x�mUkPW�f��N���ԔX ��*�Q�1��1�(� @F`�q�yɀ���kf�Dy�(nV]�n�y���h-�jvS뺎n��lO��6&�T%�����|�~��N���A��W|v��0dG~nz����H�߃[ ��+L���n�/xy�ޟ��A�s��W��kBD�l���|�� ;K��-ݵc�������eUxx�,C�Î,J^���'[�_4re�*W��^/�ħ���}�,�V�(��gf�3���t�<G�5[��R�kdK#��V�\�*?��f�f
*��.���E�vȳ)�
~�C���Ȩ-[�m����]܎��d�:��XL,!����r"�XA�A�$Vok���:"� 		���$��W�.r�#���W�+���sJ���*����Ŵ�6qޮ�Ў��r�i']	vij��&�m����[D�n���c��c�Y�d��Y{,նZk�zE�Z��`��� ��CA�9�8â�m at MRD�
��=bo�z�|��K�����H#�P�c���ZW�t [...]
+�����$H�-�?R}�Zh� Z
�0���TY�Q�Io(�7'�BV�����; �Q��]�*�$U���=����o�[���q�ѰE�����b�!ڛ�#�ѵ���
+Q�#���Z�z�{���V���
����{

a&�9���
5z�dP
ZL߇V��-�r���ه(N�D�JD�J�-5^a���[J�Ԑ����XU$�(�M�׎� ������
+L�g�z�O�N�2��e�Q�V���PR��OmIiH�%'�
� >mY��+q��n��
y�C at sF�!
�X�S��7zv���D�S��+��`
���_����%6��p��[6�_k;��g�XLX��垽$M�}�"��r�ZW�Ȍ׆�.a��ri�������� ��A�8��/����|_��ڜ"�:�
�;�j4��=�����٪����u8�^�?��K�*1��R�X����ӰHφ��8��Fq'<c� ոϋm���^*��po:�I�q�I�u�p�i�n�5�j��[Yz��v���]ߘ1
��vK9V�od�q��G�w
-��Kp�����b at A�A���GX�
���\aR~'��/�SB�V^� p*�Q�߀A���P�Ӽ����џ���9���KIgB�
�
[�v���
+E�6R �Mqf�āg����y2v�9;>�q��M�1�.
+V���VW�T䐞:�z�܅KM�]W���_`L?�:�ϱ�'wR+%iŲ��C�l���o,{����:�C$JN��]_ߍ��'/Z
���E��*u �k`�
�N'2�w\Av����)�#>��~j��w�����y7

<-
;% ��$�X�Ks�	�^Z�q��n/f��`��H_�B��51ZKI���r�=�
#h�TZH�&=�
H9�(>&0�<�����>����<�?�+����M�b���F�oۿ�!�/
>,>��Pj�a7�w�D�q7�g��7j5Pȼ���:�2�N
PS��B�AI��[��VG�e8�nx�<��G��?����N�>��K������ج��39��'��4����1�c+ֻ����u&S����k�V��
�hDA����`��r�A�F���]T";��fnj�s��N�C�!�"��ă&��:��[~���Mö2yI�j���MI]��ھ�!�3�n�p����z
1�'|y�	{��A�
��rೳ]c�p����k�;Ƹ�K�t��\�f�|()Ss� �ȗF_�e�`�5�U�@s��g����1�~|5:��m�P7����B�|oT�]��%���v��ՙ�z��fڼ���đ,�
+endstream
+endobj
+1356 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2127
+>>
+stream
+x��UyPSw
��S[�f�$c=�����B�V��*�	$!$��n��H���'*EP��V�J�Vtf��];;:�V�������/������;o>���}�Í�H$�۴I�9F��u;[� '����|=DZA:�
+9"
��ܑ�G��Q1>p�}�
��Q���ҼΘl�	�T���-;g̚5��'
�-[��3�}�
T�h
�i�"]�7&'�
�+���j�^�W��7'kR��*�Z��lG�^��\��k����J�u3��`9,
+�&ť�(��b
�0�2e�2T�Ҧ%��
���������ƐаMᛷlݶ��&SPS���4j:�OͤfQs���<j>������ZH-��P�!BQ
��z%�H��6��w_��>�1��3�����
�Z�6�a���b��#
	��
R��.q	�Z�����8Elg�1��S����]��C���J�EǑ�J8�{[�8H��W�%�4��[�);�r攱<<`���/�+��
�H�
���_�������2,�5�����T��x�ے�,�:M
���
��r:
�X	
� �3�մ*4��� ��m�9{���_��0�Hv��t/.o�n3�v-��<ܫ�=>�Y�����9�uF<�TA��.:F�I.A��c*̖��&�|j2�銍��a�7\�D�Y�; n�u�Ǭ����t
�Yr��
M~�	��Ci5�ͻkw#��3�\
��`:�{��8�����c�����|����p��|��gOd(���\F���-z�r�
qX	��,�Nsyf��1E�8/n�5����ַ�[v��%hvƢ [...]
/~�t�Jj��2�	���mY�l��(� tVU�Y�8<�GgcZ���r��3��~XrI���@{���_�`��?�`h�s6��,N��w�\��`!����3��`�͘�h�#�i���ӍLM��_�\�6�ގFS�c\�����;J�[�����|����D�6��6������!�bA}
�a�ybg��Gݤ��v�;��)�$�g�1h��n������	Ha�;H���.sΚ"B����4գ~V$d��6
U�~�3��f���Ym�(AR,H���x�

�ۆ+��W<�ԞCH8�2�&>*�lm���T���lU��vk;T�:�:�DTW��xNwa7�J9t>xk��|^�<Hv�@��@�Vf�5�q�[ͫ�2V�3h�������gn�
�O,�J��P�r�8�x�|���9��sw,�!sZ�5'o�������e�0"��v�E���{�z�G�K����7��72hSn�J�����bjDC��c���D�B��7��\p>/{�u���	2I�pO����[X��A[�s��x��U��F�4���:�JO��h���u
�E"�
5��@_gޥ���柤��$��2�&V�c�K�;������
c�
��#u2p�cȒ�P�̄���[��Q�7�wv��?'�^�i`�k2�P�^�{�ak�M�v�7dV�a���;��Y(�u�Bs3�����|��|,0��)�F�X.B��h:\����hL�����S2tE��L�F
x�q�.
%K,�*5�=(ꈶ��X`3w><�a�9��G�
*�3H�c�L<��.�
,?y:��ht��)����D7QO�p
���薁� �"���Pg�HdU? ��V�
�7��p�վ�G� 3�\K�G™q7�	�dKC7�c�񿅃ߊ0t�>�!��`���'��-
���H!��"���3�
�UX,5
�bꌙ
��JLW����>H�u��;��d��%�,O_n�h�2HJb���ߟIZ�_�V�r�$Z��ĥ���G�!�E��c����~�?�Z�y�pI-O��i˼�0:I[���T�jK�]��,�!����
G�V����w�	��W����;g��\ޮi0�7�#�tx�%`q


�������\�q�BK~
�ϊ�
�-�<�=ٓtDJ���R
)=I�����!v����?���
+-O�=`+B�(�4/3s��q����WR�l~��V{�w��Zn+'e�3�\.��/l�j��q-4�������ac��N���g[��(���PԿi���
+endstream
+endobj
+1339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [241.988 171.745 253.943 180.158]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+1340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [257.746 171.745 264.72 180.158]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+1341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [386.108 126.756 398.063 135.169]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+1342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [403.537 126.756 415.492 135.169]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+1343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [420.966 126.756 427.94 135.169]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+1347 0 obj <<
+/D [1345 0 R /XYZ 86.4 726.045 null]
+>> endobj
+986 0 obj <<
+/D [1345 0 R /XYZ 137.236 447.706 null]
+>> endobj
+1344 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F49 983 0 R /F14 1050 0 R >>
+/XObject << /Im6 1318 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1361 0 obj <<
+/Length 3600      
+/Filter /FlateDecode
+>>
+stream
+xڍZK���ϯБS���A27�e�b�I�;)l(	#1K�2;;���F7 at R��s"�
����L6�M�����O_}�̦�
#���y��Xo2Y�F���a�[$��O?l��q�
��Z�i�JF
�\E��eS��
�����>=�������D�8�f�??��G�9@��$VE�yq����XB��||��!�M&��
+=۬HD
�ژB�"3�����-�y0i~BW�Ǩ�RFe����é_}��&�&ND��ǭ�:��"ڗ�= ��.�ݷ͡B����
e
���/X���'�̢C�X�͓��f+`1��:Ku���X�Q�L
u�<����eG]}[�5lGC�H?�#
�mO����j7�/��R
':�1R��d��5�
�*6��B^��5�G8�`��_jh�s���'�_.�4N�Z:����a�x(-��J���`���4����BXDe}l;8Թ�:N���{���c��p}*�W;��TT{�1���?U͑G���K��_���?�C������B���F	t*AH�ƤE�
��
ȸȋ�N����i��!!Y0/~z�;�k*5��!
�1Q�<ήxxh�A/MݖNj����j��tԠ��[PW���*/v��](5Hn�� �kR�Ʃɼ��#(MY�H�q<�q�
+�,��x!�
+�u�܉?W: l��_�!�i&��s��,�
+`l��
�}p|t�L �
���	
��jb�fF�R�S�PA� L[���(SޠL Oo�	�a֥A��vv�X���Я�Qh'yq��p���7
l���V�q�]�ۅ�W���04
�R�
S�Gn��}=�k�Z�<���<S�3*��	��Q ^�i�
�—�L�k���1�$
��~(��*�{�3^�|���(��fo��ϱ
*V���� �b␆J �-�NeO˅Q��vS�x�ԯMx�d)%4t�c������((S�X=;�5~�&	*�<����G����d���L�\�z)���'S�-y��ZH��8��J�>���l��'�%hoq-��Q���y����X&�B6Uf��A�1���n�\ҧk�NM'�X`J����9��綵{B
+-�mUC��P�\��7�����`J�Epw(��H�
��@��\�+���h\�
��\��[Ҵ5�l�;VeV쪚�3#�ħX�p
ّUi��@D�����)Ae�L�
�)����ך�
� �� �Y❶;Љ~I*�w��H������
+9 ��7�v��
+1�_M�`���K
+�x���2� �u)���h��*�f��5B�l�بJ���
>�;`���l��
gKƦ��sF�;W|t�C�E
p�`��rg�8���B
4���`9cc�%}H���;���`7
��U��$k�
�Jr�G_˪�07
+0��Jd0�����-�%&w�р-�,��Jg]�'��CS�][w
��<O�`7���#�ʆ���|��,X�2�:��U
���tK�E2g$��=�b�ʫ��#2g��sV�

o���
�����?
z�Z��6	P
�s�3���
+c&���C9�������*��V���멪�;�
qD��/ljZ�
�s9�u�ͧUh�*�s�p�b�v�W6e�
ۑ�mX�飿���y���K�Co��ʩ܍��X�.�.r��(*��;�L��T���}���#[�|� ��"�1wu�[.�
��_�=Z�9�������CK��ƣ�3šc��&�ȱ+��:+
Tr�p'J72N��� 
 ��s�F�-A%�p�=DA]�sb�A
+�2z{P(
r��X�����

.[Y.�h�-ل�|D�9�Tq����{�Z�e��!��n�{4Xs�)�!N���SRx�C��� �
ZJ�@��c��_�.�p��+Q�PYD

+��a
�d`�����W<,k�-��-"�
`�Nq�B!X
(#�P�jȩ��y
f�Ռv[���_!߿��=Ϧ�i*�v���(��xlפ��r����p_
͔hb����Ċs�
+噜k
+?�Ȱ�9��@q:��yH����l.�8~ߗc�-��R��g=�E/�G at m�=UK4�*_�
+5V�=�hs%e!`�+�a^V,��
����Gb;Vi�H���
;/K�0����s`�=�8�}�rV쟯���„:�
���(�
+�aB�e�2LSR at DV5T
�@6]Y��hE���]�����B��r-}��Ws�=�
"�7�X/]Z�'�p�~ف:��f�V+���2�:[B
�B
+��=���(���sNz�׳<��C!�d*�8��RK�M���,��r(���IT����8�%u^��,tq~C ��N���wl��u� T<���-+Ƀ�9��
I�nRH�`<���,��.���s��6	}V�P�"����* Rʮv��k)�ɓR��,����2�ԅ�v��
5
�/�S4pbOm�
�n�噡ľ{W��`j�X�8��?iLGe@()ԭ�?�8�NMСu�9`�׍�=)�h%�?`��
�*z
D��P�ǚ�F�yXA���x�&H.��zy2
+���~����i�y��&\Z�w
n
++˗3!J��4)���U�6��LJ�0�ވ,B�`0�v��y2�˓$�Y��yI2���"z*1�(i���(�<N�VF� �*�)d�c)Ż��I�H(j��! ��4�NzN&�������|��7�"u�E�������@����6\Y#�Iv���'�b�o1�3H�;��?^����{@�7>lq�|�����S���R���7��E!��S�N���z{�`R�gM�W�	D%P�����w�l��DY�
II�d��Hfp��#^*q����w)���K
w�)��r= >��
9�d�}�������W�.᳧�ܷ4�����NNNJ 
+�Ȓ�]�$AWn�~���{�ns��.W��dW��Yae��ȯ��
+2���*�m3��"5�I��v�K�\ir�
�B����g��O�+��`:�m�ˎ$�[WN��x�?��v��iW��Wy�}lI�bq� b���fp��|l^n&��IA�JW�h2�wP[�`F�ɇ�d(FR��]�t�/��\�
��'��j����m��m��e�
�0aR�E
E����c�hk�ϑnMH�o2�(ٻ�@�
�辗������qP5�
+CR@?
�K=�ÊD�ӕ�QM	�O����
���9VT�V�M�Sx�.n�+��䎱 �ݸ�7>�
���O���>!�Y ��D\K4�^
pyO�:��:��;��F�4�̪�K
��
O�0
�%La��nwr	�B�Vw:%� ���V�|�uL��
+)?�,OhN\
�E�$�-T*��u��ٞ����r4�F�T
�u6D��u�T
}dqt1�\
1|�D1ͫ��8���K.��2I^=HM-#>�B�S1n�$C�/�䷂��z_NU�u���8�a�߹S�M���Y?5Y#�D�a��z뜃!��5dt
����՟d��c�ޙ�A�(r�Ӟ[|�DI�,��f�����5_�� ��j��b*���̹
�@�`���ٞs}�9�Ё����6��ߏ)%�1�Za�>4>w���X�#���K�Nj����%�?��
+endstream
+endobj
+1360 0 obj <<
+/Type /Page
+/Contents 1361 0 R
+/Resources 1359 0 R
+/MediaBox [0 0 612 792]
+/Parent 1324 0 R
+/Annots [ 1357 0 R 1358 0 R ]
+>> endobj
+1357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [242.197 490.927 249.171 499.339]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrHi:89) >>
+>> endobj
+1358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [254.9 490.927 261.874 499.339]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Byr:92) >>
+>> endobj
+1362 0 obj <<
+/D [1360 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1359 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F16 729 0 R /F8 741 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1371 0 obj <<
+/Length 2855      
+/Filter /FlateDecode
+>>
+stream
+x��YK��6�ϯ�۪�<���D
'�G9�Te��^
4ݜ��R[����
��R�g�؇\�)���P�y�ě��b�������nT,�T%����M�٤~�ts�߼���X
{�n�u�Df���gzLj�f߉7�&VjzᏮ�h���ZF7���a*���
^7�ЗMMT�&y�R��Hacf������D�����L�
M�sm���h�e�H
�����񠹧ezr���H������~�TTt�)-��}$�t���z���wm�e�p���=��C'��I��\��}SU
�} ��T�v���`s��1����$�������hE���GW�Q78�g,M��da���O��l6��
��
[�je��u�v(@6?:�
�w`�{����H�NĴ'v�i�Ja��,M�6�����]QU�]�H)�&a�\'�CMzC�R�
�I�\��eJ���x�J�{G"pOY���hs��h�\�9����ē�Q��_�$��
+�m��R�Rx����Y�t��s�H
jTA=op�v������tK���=̼�@a�My�T6���p��8
���
+i�"��@�����_�5�cQ{e�w at hP�n8��h�\k}�5�:������"���ã���C�g�YӱT;�E 
H#rc�*�6����ʞF�N
������u4�g��z�	yԺ��n6�$Lȣ�9𶪬������_[�4�q��`@p�DS�5��g�ua��'o���DV�TfB&��|4�G#<
��y1
[�J���ff���G���=�G�ヿ���é����Du��=
$Q��W�"�E
:�[�P�������%b���
���UB�#J�lCL8SXK&��
�F;0<r��D?n1l���E�w�keba�^9��۫�W��J���r�12:O6��՛��f�`0e7���F

U��W��,av���ҁ��9Krܦ�-(�U�қLd�\�ȳ���;U:.�
��\���$�ɽ�;P�8O��
$.v��;� �����@
+�ݱhp\����b0�$�� �w��z�
z^X���1/>��=k�
F�4@}T�wk��}� t at x!?��,jĹD{�:��
n�.]٫p� �˲�5�bq�0
jw��1%�|��sm ��g�2��}V�õ�q����&��3��y2z0�l-Y��/E�&�K�k���*���Oa�.Ʊ0������\|
�ɤ�
��¦g��ptm5
�s�Y,Tj�U�LM]}��I\T
����b+
�r�*.‰�`UY
+��ʿNL�@Q���b�R+*��#kp��䄋��RY��px&��׈!�*Q�7tpst��"H.T�<kYl�v87��o!����f"
�G(3��*Xē>�R�+��Rʎ���8��
�o}:�����e8Q�?�ve!�ݯ��<gpy"R��b)�`��z8��ӵ���r��
+0y��
�<iƊ���Ͳq�W�2������[�a��A;N�{�+�)a>�{�<���}E��
z
i������x
�HBo'��
�7x��7P��)�k�����
��5��1�!?S at 1K��C�Կ�����Pc�l���F]�K�B���@�N�B͕-���
(�+:AD
�c;�@خ9M�|qB��6\�vL��Fe�S�h�����Ġw�Q)�>'Q4
�FLYAx(��M�D���g']Lk10��l�������
+?����kD*0_�ǡ��v�k�
&=
+J�B5E���;��Ԏ�|,�4���N1�(SS���i&��s���yjGi|��PD���篸H��/i�+p�*!�d��
$�P�++��n����Nj����ݲvc�*nmRŝ^i�Q�	\K�D7��Llb�����k��=P�
����1��V��J
+�$�s���m�4�H��NL���æ�놃�-�n1Rq�M��8-ř�f���Y��7dک�S��YZ�
+g�[���-�M��2��gdk��Y�
+;ۅ��,o�ʣ�L��jz
eM���_���]3��F6k
���C��)��P�NB���)���o�R��
l���6p�Y�к��S{늞��
�����:��j$��7TM���R���r�s������w[n1iL��A&vUJ�N
+"/��6��������1��?l
}H3�8}��d����[�'�zz?@ɼ_�F�U�VH��/�q�O3XGW��:tPq�D
=z��l�6	L���95����J� �-^2�i��Q`��&[$�Y��x����vx��J晧"DR�E٧ì�v
f�\�9�ܓJu
4^t
�3iT*d2��Jb�O���
+Ր,$�
��L��X�f�[hI�LN	ӿ�T��Z�ϨX�J%l|@�H&K
n�a�vf�ԩ HI,M�[.q�@��0�7i�>���(���2N!��Os�$��;�w�c��_<���`�q� Ե�z�δl�=-�C���t|�X&��*F8�U�ڗZ�����(��i�

3�����K��pt�J&�[��C

�U�(hR����?�c����Vֻ'��~6V
/�s�KĖ'Q����w���?��˟�Krkf^M�E�dy�
�20����9���O
4
	1�!/������
n��>0��/>�Di\�<�o�Za!1�91�@�%
�s��G���/���T����#�
��9/�
tf)�}��c���O�t��L:��	9�+
B����
V �6�}_����&�|�VT&�������*����b_P��dΙˡ���ٌ���@B2ً�`�Lhy��z�h����Y~	
p�A=u��ؠ�Qj��؅��[A at b
ʝs_\�A��l2�C���0�
+endstream
+endobj
+1370 0 obj <<
+/Type /Page
+/Contents 1371 0 R
+/Resources 1369 0 R
+/MediaBox [0 0 612 792]
+/Parent 1324 0 R
+/Annots [ 1364 0 R 1365 0 R 1366 0 R 1367 0 R 1368 0 R ]
+>> endobj
+1364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [106.613 477.975 118.568 486.388]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ida_ug) >>
+>> endobj
+1365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [366.137 466.02 378.092 474.433]
+/Subtype /Link
+/A << /S /GoTo /D (cite.idas_ex) >>
+>> endobj
+1366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.361 320.621 350.41 331.469]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+1367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 254.182 94.868 265.03]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.428 49.651 335.892 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1372 0 obj <<
+/D [1370 0 R /XYZ 86.4 726.045 null]
+>> endobj
+118 0 obj <<
+/D [1370 0 R /XYZ 86.4 701.138 null]
+>> endobj
+122 0 obj <<
+/D [1370 0 R /XYZ 86.4 306.887 null]
+>> endobj
+1369 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F49 983 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1379 0 obj <<
+/Length 3890      
+/Filter /FlateDecode
+>>
+stream
+x��[�v�F��+xf6TN��� 2+���s<vƒ3�$
��$������s�x�%R���Fl4����u���ng��gϯ��p!�,�2����f��H��EZ���j�ۜ�O��?4���l!R1��L���ق�/m�MU�W��B9�������g\����ճ��1
ϘDE�Գ���oij��<�#���O��f&Eq�ֳ�g�~'���b	)g:cK���۪-�R�y{��TR�|kk��n].s39S�̷��5Z��?݇���� �y����
+Z�l(8�u���
_��8���h�Y�4����*�W
�l�Us���]_����h��.��G����*v��2헴� ���٭�B�*b�`,ʔ��)��2_���5�2���K�bc?�ԡ�����j�+mQr�~�UL¥r�m�u��NġU$�)�SI�΍v�/iq~��y����j��tK1s?
��4Jyv|[���"�"+I)x�T�D������.pb��ip5TH3i�VH1�S1PGz|Io�_��vu�m���k����I�H�lˏeK
��W��ro�l�弹��k��X�h1Ћ��
q|�p
t��pd�t�$�4
+�,���L�W�ۖ2��j�2os�1Q��L`�;<@�ca�
��nl9��H:%j��U���Cc2�8�TY1��
�ZbE
�
~�����T��$ʘ�]{�+���p)x�jL�s>R��֘sH�UA
�����
UV7�VV
v
��QY�$ʏ]���y8Gɀ��
�B
Z��4'��V�9BV�t�s� ��3
ܜ��
Qʘ�5���i������3Z:��l
�� �
+gq{����J+V�bu���k�@��r�T�������d����{��m�ͺ�:�E
\
��a70�(��jO�x�x���M8T�֛FYܡ�"ڠpT�Y%�bҳGd`(��t�Ț��7�~�Z��$ED�pZI�=H��L��,u[���
+ڒ�
�	�N�w�������vu�,s�葎� ̌G�)�

!r�t���w���Y�ϭ3��n��Dة
+
����"�4��o]2�M��.GVRDqO~>��0Y�:�|�ӄ�I�\�?9� �~fi�،���`�+��竕A3���3�p&M`�a�0sBX�vd

�%`;��.���7�O��y�D`���2ű:n
�H��e3%�1�_c
���c��*���y���I��}o
���z�y����U`��D'�b�*��F�x���M��i��1E�%�f�f����m�x
�<���<S���=i1� _lwC��@����7y�~C�
�!�9b��cX���Ǻ���ys(w���ih�(K�F�<A�81=%	{T�Pm��N���N/Ph68t$w��S#�S�
�P
�E�%�
��+j�[
һ�?�}}�v<Ȱl<`M}���6��]��݇�/�]\��i1�![ ��l9_�8���vY��6b�
��Cs怛M�����ǀR��w:۞�_!do>6��Ј�M@�)d�&'����oѰ5�֬�X[�Z����c��&{�,�6��M�����'�·R��̢$K�\���X\�6���Yl�����kz}o��m��YG#p���&_֕g$8�!�����м�����	ć�|�d�销�l��;�
�	 o�b�x���u��
Ozij\�[�(P��#L���Z�K=���%X���������H
��������{�x�Kr.
�,����q�:z >RY�
��9�]�=:ן�1;D�����
��Յ�؛&�y1�~Y�K
B�h6��d\`�si=v8U@��bt���~���v
9?�8
�Q�����	�}x�#
y=v.
s�F��N?Q0'w#훩4ġ4���ɳd)��,{�K%G�%�g��WR���f�.��n�;�2 [...]
�����T,��@�p�Np)��w8�i��_t\����!�Y��0~���/0N���<,��ˤp$!�G@<�/����
`��� @M��8T .:� �fL>C0�^��O��f��L�J�l��~�’����¢p�.܁.a�iojc~L�M(�۴��?
+`)��?�������� �ƣ������5�BC:
s�u���A�yp�˛�
������ @�� �p�eݒO������ҕ��"�:���£�E���w������L��ɳaH3
���e>��
r�$���� ��)��`-ŁgG�>�
w&�SytZZU��8�1�sEW�rm�"*&j>�me��P��L�h�8oL����ń��t(]�U����:���A:A�e2��xQ�Ѱ�ƘL��$Pb͆I�n��@=�n Lf����N+;y8��ua�
�������H��F+ߤb�^��U�D�u1k��fI
r�yY�\�$L�`���} �nl��^ˇB�
*6;��� �\�	�\W&;K���ْ�j߇xb�}����м���;vkvڪNc+(gi
+}"<�G
+M<CR�
��q��A���i����~����(4��M��
�0o�~}�	!�b��I>d�x�F2���S�V(��Ӧ'����{���!@� ��<N����\VFV�}$
ʛf�1n
Ϥ����M�2#�1I��U6�S6m�W@�u�m'������$yN�&7aQ�H���Sc6���\�ڙ8]c�%&4�F��cY��{�p
,�ʀޖŲ�/L�U�G���#!�,�yT=��ŏ^MN��	_*Pz������mC�o�7`ys�Oz��PjL&�)ң����3
�c�
_�
+��z��M%U�1�C��=Mr��	�etc�[8˪x��v���#
�4�êh�r��	'�' �l
]�����#��Ʌ�.����W&��(w}ⴻ"
���u6ă���Ѓ����&
�\�W��ó��Pq秠E7۲����J6�R��t�Wpe�Gae/���
��Ozk
�=���\�����i
+�]4q��v
j��>NM���|z]�K-]
�n|�8��iYF���FM&�L�y����pJt�b��A����E�E8�H*w�;����-۩��ܘ��&sw�Wu
Ma�.4�鞚K����0Ri k���Ȏ�������)��Kϫ�t��F��3v��؍��^������Jk�
�1eP#�L/H�!��������
��5UE*�����F��^6B�lt�D5�+��^��l{(��ZbM+~����+t]U�"߆{�ܘI��[�Y����c��nȋ�7��$����S=O�z�!�%:��
1���qР�b��z���L̢==�hOM�s���p�To�)�9�al=�LNJև�J�f6>�n�'
�ыƶ�
S@"jԠ���m���'N'7T����	?f�ns��W����@)u��
��w߅���T��eAp�����|G��0����Fj�Lȃ�Һ���D5�x�����
�����2��Zuf��[[��뭯�hj�}ם�a6����ܲv]��Q��)�R˜6
+���5;$�ppla��#�m���;0
�����F�$I�_7m�/� �%Q��oW�`����b�6M�Ɋ}��ch���	l{[I�8
#�E鮮	{u�[o,��A(rrPu�.���g���ͭ_4�@��60�u���OXx
�>0�
�TP3���"V�Y� �<�p��2�!����L���hs
+����k�6� �W�t�?�{+�E)
�����\�y��b�0L,}:�CZ8��G)Ē@o��8�V������7�U�m��H;M��
��W�IX������#
+��]\��up��<*�>
�6�)C9+�#�|
A+��R#p����S�
Q�M�S]wdjU:_\ȓD�!��^>F�
+endstream
+endobj
+1378 0 obj <<
+/Type /Page
+/Contents 1379 0 R
+/Resources 1377 0 R
+/MediaBox [0 0 612 792]
+/Parent 1324 0 R
+/Annots [ 1374 0 R 1375 0 R 1376 0 R ]
+>> endobj
+1374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.842 558.561 237.805 570.517]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+1375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.831 287.894 114.793 299.849]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+1376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.194 128.856 230.168 139.704]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+1380 0 obj <<
+/D [1378 0 R /XYZ 86.4 726.045 null]
+>> endobj
+126 0 obj <<
+/D [1378 0 R /XYZ 86.4 638.717 null]
+>> endobj
+130 0 obj <<
+/D [1378 0 R /XYZ 86.4 272.297 null]
+>> endobj
+1377 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F38 785 0 R /F48 982 0 R /F14 1050 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1389 0 obj <<
+/Length 3798      
+/Filter /FlateDecode
+>>
+stream
+xڵ[Ys�6~����J�!nr��ar�T�&o�!Im�m�L�
+I����ۍHB�l'�<�@
}|��A'��Y2{w����o��e,3��.�f�ajfEƌ䳋��׹bj������5ooR̋���-5�W���T�o��o-�7y���]S_7�f��r5v���wg�\��q�a5Ɍ��5K���6g��������,a2Kg���f�d���ه�����d�+�F��	gR���8����~K8-!���[��^r%hp��u�
��K�R�ݸ��ǖ,�i�d��h6.5˲�%V�._ݲ��������}�Xj���o��B���Ref^��kQ
k*ݗ�
�~�w
>ϡ�����]Ul@�|��Q��+�mK��c|o]lۂ�uCM����.�b�Q�*�E���gKc���%�,�~gm]��$E���@	�斤��H�6�@q:�_�*���

�f���SZ�q�GZ�Rz�Y�>���&��Z�:�0(|�ÿ��݁���E����,{-P�^�K�$,M���L�H�W9
��PdQ�]�T�M7%xm��+��~ �B

�Q��	���G��4��8^�T�	Xq��󋰚���a�h�+�^ ���>��eV�WQ>
�a(R��z�L)^fx��ڎqRsR���+
K�x,9�c�v�W���)��u� �yw��7��}�P�8�
�4�m�&h��D��J=���@
���q��a�%��T��	 �W�)�$<��ru�>��w�Ti��&
~X��:@L��P���c���p�����/��W�>t�%=�U����mO�xt��N't���1����X
fl�*:��T��]w�Ǵ�*�;Fl����$
�/�K�c,9��B�`��)c��������DZ��0�)Ud@#��%öB����\8"Ҭ� ��
�B����
��T���7X�TU-5\�
h�����9Z�$hN@�
��G
�*~Ktr鎷ډ��D�f�W����[o�=Nu%u����"Z���&iDf���!Y�'�1��5�i��/c0[�Z7��J��I��ǀ��8���mn��
W�f���$x��oW�R38
+�����
����6�8)������l�Q'�A�3�
�=�&䩬a:��<�̀7ȿ&Og>���D�0v�EB�����kP!��W
<Y���-�Æ��„սo@}��xJ�F0 ������<�&h�$�
�%r��mܣUEO���n��7e���z�v�E'8�I���Xp�|�Ԟ������Ƞ�G�k���	�N~��%D�R�>#<��=
I=�#h 	K�WQ���6��q-R	�9S�b��h��)��@�ň2��z�G4�o���L�aS'��[��R?~�*k�L���n�&p��{��=ż���At>�Rp��q

ל
Ay�iJ�i��0M�i���4x����җO�X6�{�
D�,�}e��e����4wCa��6�o���D�rJ���)
�/8�G̝e�f���:���5�Fh�u}(�>�.=;�>c��SR��~�3Ȧ�0
��w�!���~#d�n#ds�.�ރ���Lr�٤G6!�|
�����zdS�ٰ�I[�$'6�	"6�@��$�R�HԮ���	i�HkG	�.�
]V��`V!��P��`�eu*�Rn�Cp�Mz�l���cY7'J�bF�V���c�X
O �$J($T�ĽJͽ��A����
���g�$iP�fs0��I݀�!ná8
E��vS��[�W�D����a���H,j.R��
p���9���{���ȳUЄ��zƐ��(L
�;��8�+M�Xh2!%���(��
�z� :N�іk�e�-��5�f��H��\wao��
�G�%�)3I���`

QdޜZz��M��e���-�5�$��jU7k��u5��~qP1������7J'5�Se�9u�sU��.�ů���c���Jm:��y��ۺ^�����؋A�I�}Y^�x�����n���I
P�A^cRc��L<���3�y��^� l�(Zy[��_}
+W�\�����
^�2J�@��� �*Ҫ�	
�����4M%'��C?��7V[/��k}c#�0
+
�4�3�
a��z��db^ܹ���%�P��x�ڍ3 ����3�ά��?�z�cG�����
36na�u����V����,�\
+!��/�@~�
ŭGj�[�<��Q��O�5��*�	�T�ǧ! @����1�����z�Y�u(��z��O��^���za��R��'x,0���
/�p����^���j
VYa��䅲��uT��=�̈�2�.H�
�R!�»I�?� F���%.���p��t�|�_��{g��;���Y�W�s�W��T�^��q
kf	����݌R+���n����›o�г���������n;*���3�zW�Z�˛�
+p\>n�-�����$
�����
���
k�籿
+
]�
趰~
Ha�X��Y�j�4���&�<kk
?3�m�!`�t�WD�����M��&!�u�(�F �.��bM��*�
��u�o|���
���xE�!��hA�n
���e��	
q{.�+�k�
P[��|0g����
�1C ��Ν�*�W��/Ο���%W�Í���_t쫮����"��@�]���
�Q]�R��>�
�ή)�zN�=7,�~
��(5�1�:YN��ś԰������#�RC���_@�/ q�$�QN\�`4�� [a|�K��� ��[9�&Y�W4j8,��E�݄�� '�<��f*��Ԉ|
a�T3�#O{�"6J��v7`?i`��w����`4.
]<e�0M
��=
�t{_n���Ꜹ�CD����
��<�E�����`2ʳL�'<�Cё��\ڒ3�K���A���;�U6
���G
��
h�DAF�y$�abL��F{���2����Q�8��‡�j7�0C.u�5d	.6�*���z
K����5�M�G���Ʊ��S� P�uJ
c���+��'��,�
+���K�
/!͘U�)�������6��׽'���
�
_�ؼ?���^
\�L�k&�닪F:�]��{*�|��@�,��W<��}a�6ВWɒ_��na���E��s�
D��<����M��3=�v��ɸ�O*W
�&��G[v+E3t[v�W��A�}�ɇ�
���
jt��wb��eOz�%�
+�D�0�(-|��U�0��
ҽ��A^���]�t�j_�S��o�Mѓ
X$�i
�F�d���@߷Cx�ཱི��eVcF!�q����VJ��.9�8R�J�B�K4%. �L�E�e¤#{wx�O�y?uk���p��r��KPx�`���	�/��m11+D��5fM!�M��g�a����d�{��r"��λ<\_�t�؈�iu"G'�˒%!$ȫ�aWL��
T�7�?^'G��3n��ߐ�}W�����}u��[�
+i�g�{��'����j���g�+�e4`�l;��Db('{_�EPD����H+x�,M��=�ރ�A���o�f���=r,���/��B����T���2 at hY��̂���qp&Á
�=l|��-�ט�
 ��9x˴3
}?���$�-����XUv-��z�{��SA����H���&�0N��s
+W�_����m at SvE�t�
�JG�<�)3ȴ�3
�_�
���6��d�6�wE� ���Ȝϡ
`(~k!^a~�C�hzo�	x����
�
��:��p�F�a�
��O$����!� ~s��_���[��L.^
Qʺ ܬژ�_��𹛵
+endstream
+endobj
+1388 0 obj <<
+/Type /Page
+/Contents 1389 0 R
+/Resources 1387 0 R
+/MediaBox [0 0 612 792]
+/Parent 1394 0 R
+/Annots [ 1381 0 R 1382 0 R 1383 0 R 1384 0 R ]
+>> endobj
+1381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [239.37 387.136 251.326 395.548]
+/Subtype /Link
+/A << /S /GoTo /D (cite.idas_ex) >>
+>> endobj
+1382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.808 281.463 230.782 292.311]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+1383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.701 50.205 139.423 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+1384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.752 50.205 155.474 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+1390 0 obj <<
+/D [1388 0 R /XYZ 86.4 726.045 null]
+>> endobj
+134 0 obj <<
+/D [1388 0 R /XYZ 86.4 346.582 null]
+>> endobj
+1391 0 obj <<
+/D [1388 0 R /XYZ 86.4 268.972 null]
+>> endobj
+1392 0 obj <<
+/D [1388 0 R /XYZ 86.4 216.901 null]
+>> endobj
+1393 0 obj <<
+/D [1388 0 R /XYZ 86.4 161.51 null]
+>> endobj
+1387 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F38 785 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1408 0 obj <<
+/Length 2736      
+/Filter /FlateDecode
+>>
+stream
+xڭZIw�8��W�H��h� {�
��^���b'}H��GK��	%*$���w n"��rN���Z���(:����듟�N~x%�,!��zv��Śș�	тͮ�O�O�yL}����鹈E��ũ����9�.��eQ�W�
]��Ί���W?���:�r�@(��F�"�Գ�����t��7?�(I<�s�V3)��*�]��~B���{{fT��NaF�m�:���$3Q}kq?�R�7Ohb��5݄�S
G�MF��:e��t��CX_q��D3fc�jb
F��͘9�-���\;��^��L7P��,�����sGQ&˪���Mk�q?�"[gu����mwj�b�^�2�9�M�
'��3j�J\0���IXf
崑:>�b�ĭ��_�ڣ�KE�i�5����$���[/)�樁4��]��/ݹ����K� ����Ŏ��+�����c��X��60��HA��[�t�8-�$I��J�{�ߥ��X���4�
dJ
+2i<�yvv�Ut��_6a
+�h]�*�Gw��q��$ѪU'�9��BD7c��1�8��%8����o��Y�q����J*�{�{�p
��@$p�/0��U}��x%�98`���g:SN��0�e<��$Z"A�O09O
1�[����݄k���|��!D����G#���g�P
��s�����3���*���&
u��׶�(�t�[��k[NkL�f�E�2ĨG�*%,I�Q���BD��
	�ޕ��,O�s���
:�0'$Dغy݇�
+CBB�
��A8Q�:,��S��Uy����D���d�0ɧ��'��.���	�����)iA12Z�4gvy�+		��I"B��u�C?��F�N�%���nC�F�Ф�C��_>dq/b^�:X�!��z�TLD�	zb{T��Ď�� ���*[�� 5@�D�
+:��(
\�p�
{d
X˨��G�q��$��)�4`�`=Į���鹖�A��)�E,f�|dc�@&�����IFh!J)�d��`g�@��

�zeWF��ŅWB�t�' ��UE]�+(޲@�DGq��
(��Ӛ���f�A`E��"�����
}�3�rt�/
�m�2���v/�����i���=��(�v�OV�� J�A���
�:���Ӟ['QU��9��
+*��4
+2�^��'�$��2�$ ��
2�>xtu�UFH�D�����#;�:��H�3O�
���n���  �����I��.��\��XB|���
��%�KU��ve�� ������T���~�6�&�
�-�y��ig��v=w�����>�1 k
+��O=��t��x�����a �U�U�ź�N�V�P�0n
���\�
Y��A�\�R��n�hS�od
��`��D��!u@BV��
+�b��#�Ӑ��
+/m�-����Ic�g8'����`��V6�j���Y����fS	z�l�S)��je�����ƵѰnf6Ѐ������5{�+B��

6�p5�}�m jiG�*b
+���1�� �
�_<Bl�g��l4a���۲l%XZ�7>�����
+^�xWm�s[r�LKClfyno24F
`�
+
���������Q�
F���c�C%� �0�#���1f�;�_���)Ӏa1�6�e�E��H�	��=����=�
��$�J�I6
��]B��?>ju>�>
R�-�M�t��.Cj���<G�����
+��i��K�����
+ �P��̚mc
$!p%����{x]a���7�
�u�}SG�'�0��oS�� 1�s�
���:½������y��q�`Đ�/r�{}�IԜbN[�d�-&�����W�

+`˾E�Q�쀞.�t�]�ƻ���q��0
�=n�ϼ�w�y�`Dl��{��Ν-�qm�:`�ֳP��6��p�ox���.��U�/���7�f!��O�D�( R
��^1g
D�����0<#[o���A��0�u'I�}�D��	D�M&'��}J��L��	�����o��_��
+7���d����t����7O ���R�ov��wv�
g��]�{�؍�6p8`
���"�k"J}�;7Y�L�t�rg�� ��C>��c��
+�
�
�@0��SƏp�
�
+�t����#�lm��-�G����p�t����.�G~h�V��/�
�['�
�4Тkۚv��@
+
+��Z�	=g|�ٱ��E����.}�EŞ=q�ljh�
�
>��e��o��xaו����������?A��w��o�M:�|�X?�Xῼ�p����Ɩo?��:F���fU
%us=�9Nb��2�y0���z��G��¢+��.|��׸���o
���k�}
Kt<���j����&8��^p��6!C��e���|�܍X;� WHܰ��-��� P�
���ź�MF0�1ˣ\PfrL��M���qiYߗ����2'���;�'-k":��K�R��~���۴B���ȼ�qk>5�V|��luk~`?���V!����6u#���^�
�������s+��XuT�������0�O(gs�C���EM�1&��e/�3z��G�v+ϋ҃��z��"1~x�2p�GOA��<\'P��~';��o�Ov�i<�	
+n����i�w���
.֦���n��Ԩo|M
4��?<ADt��>.mz��_,�\|�[$����S
 ���`���;i>މ����/�8Țb���i�:8P�[__tM,W��
�-x�Mk x��
���5n*��5B�z��%��������ߗW'� �\d�
+endstream
+endobj
+1407 0 obj <<
+/Type /Page
+/Contents 1408 0 R
+/Resources 1406 0 R
+/MediaBox [0 0 612 792]
+/Parent 1394 0 R
+/Annots [ 1385 0 R 1386 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R 1401 0 R 1402 0 R 1403 0 R ]
+>> endobj
+1385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.561 652.377 332.284 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.5) >>
+>> endobj
+1386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.412 652.377 372.134 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.6) >>
+>> endobj
+1395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [252.47 585.822 274.941 596.671]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+1396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.713 512.294 403.185 523.143]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+1397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.748 438.766 364.22 449.615]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+1398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.304 389.149 284.524 399.997]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.1) >>
+>> endobj
+1399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.094 350.933 479.565 362.888]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.494 120.548 313.714 131.397]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.2) >>
+>> endobj
+1401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.842 120.548 369.063 131.397]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.4) >>
+>> endobj
+1402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [501.358 82.609 523.829 93.734]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+1403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.567 70.931 175.787 81.779]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.5) >>
+>> endobj
+1409 0 obj <<
+/D [1407 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1410 0 obj <<
+/D [1407 0 R /XYZ 86.4 632.37 null]
+>> endobj
+1411 0 obj <<
+/D [1407 0 R /XYZ 86.4 571.074 null]
+>> endobj
+1412 0 obj <<
+/D [1407 0 R /XYZ 86.4 509.501 null]
+>> endobj
+1413 0 obj <<
+/D [1407 0 R /XYZ 86.4 435.973 null]
+>> endobj
+1414 0 obj <<
+/D [1407 0 R /XYZ 86.4 386.355 null]
+>> endobj
+1415 0 obj <<
+/D [1407 0 R /XYZ 86.4 169.31 null]
+>> endobj
+1416 0 obj <<
+/D [1407 0 R /XYZ 86.4 117.755 null]
+>> endobj
+1417 0 obj <<
+/D [1407 0 R /XYZ 86.4 68.138 null]
+>> endobj
+1406 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F55 1066 0 R /F16 729 0 R /F48 982 0 R /F14 1050 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1426 0 obj <<
+/Length 3694      
+/Filter /FlateDecode
+>>
+stream
+xڭ\ے�6}���SVry��
��[�ı�TnOR[���8gIJn!)O&_��h "%H�$<A�Fw����x�8�Goo������HG*R)OGw�<��(�*J��F��e$'�"�Wx����D�q�(���
��I;/�c۔�?j/�jE�7���.��[�2&�\M�����뻛?oH��EO�\�����?��
�|;�#��ѓ
�
I�"�����n��j��bX,�$�G�b�RZϏ��Z����yB�qR9��=���ٝ �#�J�\���������ݪjilwh�܎l�0�L�ժ��q[��
+��8"���c&W�j�H����E�J����
.����f��8��=�mk�vB `
Җ�p\-�;�e
�#%4X��m<!��
��7_}M��sӖ�hr+a��eI�f���<���K�K[��Y?���v�2�T�iKFI���Ȓ��4�ú&�fe[T��%	U�fF���*�R�,JO�T>N0(��z��\`q�/�V�mKҢ�5QR0[��G)�B�3��GQ�E,q���}����!��䖍��2׶Z����?����f����ɸ,���9�m��+�`���[z�4���=�������v�АY�Tu9C�e��ʣ4�vu�\;���_t����I\͊�"c�9�B����T��":z�d�q	��JSE-��K��E��gm]���nj‰�E�#\B<ovc��h>�RءY�,Rʅ
�@>���K��D
�v���pB��9�6d�rZa *1X��)@?�����Wt�\�ѳ��qG��Gt�rڂ�xl	k�yb!Q1
�d�r'���J�=-V��`G�l [...]
+b�>�
��.A�5Y
�κ~&K���]�G�b]��=aDS��br9��Ps�����b��B觘 
��wmI��aR'au�n�h',LA�B���u�K��e*;9�4b��`=�$@�r8V�$�&�
I�ND�<�8-�-�J��j��c�H���D~���Ւ����Po`���+2��Ѧ��:�����ݬԛ�rv8?NI���)ϠP�����N���8��?W�[����§
!`����	6?
x,�B&
I�Fq|U�Ǡ�N�G��Ʀ���5*m��AN�v!��Y�>�/������<T�-��4�}.�CղZ�♌���7���f�@��?���2
��~�KΈro&
+v�e�B!�C���70��3AHVR�S������Q
�
���-����0�)V(�	i�B��&��Og���1��Q"]d�fα�=�)P��G��3�4%bo��c�je9�t����%%���
	�”0���2��H(|M]ebPi,3=U��W�>�75��t����۲^«6
��Lj��煭�־L
���jV��]�����z�Q�h��K˒Z�"ʢ��
ڬ�f�z��
+�S�eY+�C�x�g�������Hh�#+�ޮV��pF
���Bn��M�B�p�ƕϫ�9J�mLN�*�i��E`�'
WH:��W�*0נ��T�<����%�#�4~V���̬��l�41�m�`��	�n�

�)�tq��
�L%�b�Z׸�䆜��TD�c��۴�����0{��-��HTz\5���
M"
5�� �n?��Ca�ezO*�j���1�#�*r7/V��5	�*��p%h�)6֋��~�iؘW
�тֵ��W;��%ԪPLܚ#�,�O�6N�Ȉ�r�p6��3����> K{C��*~�n�aO��pKA�]8�Y����k�PLK�bA�I2�}����TZy����d0Hw�|S蓓��kj�ɗ��?���KD"۫NK7$j�����a
ޥ6=�6D
+m�d�ʌ�����	���SR��X��-����0����f|�	Nh����BP��)uR@ }�
Y&�<
�<mw1Ś
��M�}OU;��A������R�^�"������V��
Ԑ�2A�5��������:
"��� ��1>�j^l`a��9
�����ݳ�JhXM�6j
�q����݉ua䀥}4Z(��؆��n��
��h&�&�Q*�O#�r�ڬ穮ڶ\!͵0��B��w
+���#³���S ڀ#t��nL��S��1�b�q��ʌ!���^_-8e���]��4������4p�XP���0�_ :[K�_ at 9#��1�.�� �~᱂̠�d��Q���ݕ���� �>!�9�;e�C�cN�o":��{f{&M�2�{�ӕz�}E�JW�LJ�F<�Pv�_=�H#�}�<��':#ƍ
�8����a|[���~9���.�u
��ﺚ��ÒHB]B̌�C��������3܅���C��]_�'��8[.|*�zº�4쉖
+�y�q�11���G��V��t- at +i
Zp��ԃ���벘5
\؋
q),h��
�V�p�:�n�#�9;v��+�>!2/"�T�~D��͘�)��ødWpO)s��O�

J���*��˻����i�~��,*����I@�I~�<��&���,�2���!d:�G�y�)�D��@eoG�c����@w6�'"��PA����� �B�
%��&]�&!���r5��%�X�#�B"1�&Ax[�,1'�_�/'~"]��Q���F<$R �
���L
+ �4IT�BO�I�La�`ݖG˶L�BhK��G,�!���Ǔ���
{�1��.�Ǫ� �Xu6��VĶ����* �%� �!��r̺fK� K7�Z���b[r��8B.�k�PZ�k a]���V��Ά�p+�؎[r;n�t��4ܺBU�[��a�`�[+wܺBl˭D蟓�)u��ے+q��8�a�=���P��ꂞb�ِ
F�1j at nǨ ��QC��QW��1�9,�,�2j`�QW�m%�7
�()"a��l7e��.���
�˫.�)^�
��U �
��v�
+��x5�ixu��
�����*��-�V�xu�ؖW

����)��B�Op�2\/����8 �
I�cZ���

�t

��88�i8�>ک 
g`J�菱����!0
� 
�φ<�8���qt2�ÿf󀿨<M����D�b�"z HG�!LK�������0
ч0
�C at Z�@:��tD´D�i�> �~6����<
��^���l�)~���]�
��>i
��{ ��; ���$�;�e� �ew HG�!HC�������g#vH���{�<�H��6~�I�tn�r��ݴ:�����
���B��gL�)L��6�k�� ��EyƇEL� Q0.=�1X�\���L�/�B &\�t���� ��T<l�<�(Q	p5�(�
��:��:��k>�Xfg ���#��>����2	��p��!
�-� ��C����@4B4�h>�h
�| ��lD/���)8xV��&��O��������
+endstream
+endobj
+1425 0 obj <<
+/Type /Page
+/Contents 1426 0 R
+/Resources 1424 0 R
+/MediaBox [0 0 612 792]
+/Parent 1394 0 R
+/Annots [ 1404 0 R 1405 0 R 1418 0 R 1419 0 R 1420 0 R 1421 0 R ]
+>> endobj
+1404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.029 676.287 237.5 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+1405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [328.354 676.287 358.574 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.6) >>
+>> endobj
+1418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.771 612.272 511.242 624.227]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+1419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.292 561.319 374.763 572.167]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+1420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.801 337.952 168.523 349.908]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.1) >>
+>> endobj
+1421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 302.64 92.377 313.489]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.9) >>
+>> endobj
+1427 0 obj <<
+/D [1425 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1428 0 obj <<
+/D [1425 0 R /XYZ 86.4 671.605 null]
+>> endobj
+1429 0 obj <<
+/D [1425 0 R /XYZ 86.4 598.125 null]
+>> endobj
+1430 0 obj <<
+/D [1425 0 R /XYZ 86.4 556.637 null]
+>> endobj
+1431 0 obj <<
+/D [1425 0 R /XYZ 86.4 470.98 null]
+>> endobj
+1432 0 obj <<
+/D [1425 0 R /XYZ 86.4 431.706 null]
+>> endobj
+956 0 obj <<
+/D [1425 0 R /XYZ 138.11 273.107 null]
+>> endobj
+1424 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F11 787 0 R /F16 729 0 R /F55 1066 0 R /F41 1433 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1438 0 obj <<
+/Length 3093      
+/Filter /FlateDecode
+>>
+stream
+xڽZKs����W�R&<O� �
��xk׻��l�R0	J�B �(�>�3= B%�|"�gz����=`���}w���ח2��q��dv���$V3#�8�|v���Iv>��<����2z��\���|Σ+�dU�4���x����ܶE�>�����w�g�qX��xXD�V%���ٯ���F���X�v�սw7S2�\��������v�U,U":�����$^jk�

R��|��e���A2���v�@������?�ͅ�i�׷E�WI����f�7����j�rz��=�Q���
+b�(��MY,υ����qY��{��4}������n)_ⵎ>�
�����^�����U�M���d�%�T�s�=�?o��Ż��]Uw4\�P�ٜK�T��S���~��AV���?�E�/a&~�
+'��B�~��X�ɨA�j���:g����]�Y��Y���蠱�:?�Vߐ�}��l�e+a�_�IbC�I�FX
,�,�`\y��@Y4�3 l�X�6�^v4	�����Ͷm^W�I�)���Dr_L
׀6P(O��p���P�x�����6���_dk�@��{I�i�{���4�*����Y�EI��6L�m=rj�@q�q��#V������=IRz�uk�~�&�m��*'��y�m�& P/���}�`���W�$g�RE���
+�Ӫ^��hɍ���#��&v6�J���!���j@��*u�Q�X��]�֏lG 
+��_��v[�W����u~��E�D
�r�A��6�.��M�^6��G�<j�����{	{�>�=�&��[X����/��������	���GQ���n�;!2��S^_�~*
K�9[ӂq�}��2=�~�����|�m��T�
���(C��e�-����=x��Ӓ0I̬
�)��/�UI~�5�Y�8p)~8<�$�ʉ��X�.S��9��5g<S�U�C�G�&�'�
S����
�6�c��%y�Ą�t�:�@l b � BT?
���
�GW>��-���_F�1�<
.�9O�h
+��� �&6� ��Hrp"�)�''��:�;9;U�`�m����q���0P��D4H���|�q�Ƀ**�0i���
Z�e��j���7(�C,ß�{���܅���^@�40�b����۔y�;
�ޣq���+P=�Y�s�`H��DI�Zw�x��U����3Zu��;�U�K�x�]/��j?�a��.0H�&D3PV`�#
u8QQ����jfc��!֫%�b����:Mg
+������Y���1��BtYS�V�o��ۋ7NY��s�b<}���q���?`�v\�(
� �4��f����q�lb�����y�<X�H��^�}� ��@D��������t��h���vg�[V�~`�ķ��tuV��	�� ��3',��b~0�@�
+�Zf
�ԧ�^o(��'�t!�=*��]W�P� ր��X<�o�

8����������S
�G��6d�5E~���XB�ax:��G���$=?�Q3�_����bLh�-_M���I�c�RO a	b'�T�����V
ϥ��_�{"'��5pp��#����
&߃v",��
��tTE9h���g�2�X�.�|�@0�����"}%�y�\)����
�j���	#A�Ӷ3҇O?�0������t2Q�9J�P at n�p2��OS�H&P
�:e�{M �Ha��
�6�@B~������a�9�dUf7cX�ݣ�N�ȹ�B�Ú)3/I3B'�f(>D�+/I�7t�2���.6��
��!H󌜓��s�� �����
�!�N���%Bg	�,�C�|�<ك��F����
+�
�¢@���T�4f�C�bM�Q��CG��������-�\/ɥĥ�ʔ���I�lj���*�T�M�0�<�
+_Ε$`��O��p*adϕ
�L@ȤoAa�MxPI�����AEiP>P��S�tdžd�p�S�Qr�$*V�9 ���L�z1�CpKj�*���RhCs�@���I�Q?���zBR%�
����� "k���f"� ����N3���M�-�[OqMh��M��=S#�;�x�0���uҁ��h,��`��
��
ѝn�����ꝍ�zҊ�}�ǫ�nʑ �0n{�ؠې;�$�g�/YI7��a1�Q1 v�O_ʘ��ǩկˬ͜o�Zs�w�Р��s�-ܠP|e���M���۬(����%:�J��%��7�G%g���Fe�N��
e{�ɏ
JIA�["P�W9�o�
�jE�	�`PQ��8���%���ܟTE&Rcj
��"y��
P��L�S1��(����$v*�t�t?QQ�F��&��\\�[�D�11?�M�'l��(s�e��S��"�����%��R��?�YEژI;����Z�
+Le�'\�ȐG�Ҹz�K���}w�$_
����MD5����|;ǁt
`�y�_;��M���^��x
��O R~
+Z�S�����ӛ7ﮮDx�N�v:
c[�c��j�P��s.e��k���ڵ�
A�Vb|��5�lH�D�0�L����ljE��
�bQ����p��/z�v�6\�]�M��@�VG�'�g�]}b�~}�zc�ͺj�E_�.������7��&�?�:�RT[�/9�;�hs��Ű�w�2�s0�x�kqc��8I��T2��
t�S,J�5X�����uA���jU��Iw��
�����m�@80j:�䏘�����f�_�N�8�P�)���r�E�Y�~�����vY6�}=�>�����G���u���+�����;
+�(�2i~�CfG��X6M9�CՎ�
+ at 5db�;��n��ҷxY�t�*�Ŷ�ݧx�Y��$@y��P
ڣ��Ƭl*�
}2�0w�S�i�/t�?x��oB��P��Ck�KZ�
�G}�V?�N�V�e�������x����9]��3��h��f���i��i	��y�~Yk�-�
�
��x�^`wD���`�	l��+|��K�7.`][��{_e�Nd�㧎.<�KKw��DX�2Mԑ]u�*2�N��GÄ�C�
s�:A� ���5�J������?�|�)�P��(��/�FO��{G��zw*��_����rR�
+endstream
+endobj
+1437 0 obj <<
+/Type /Page
+/Contents 1438 0 R
+/Resources 1436 0 R
+/MediaBox [0 0 612 792]
+/Parent 1394 0 R
+/Annots [ 1422 0 R 1423 0 R 1434 0 R 1435 0 R ]
+>> endobj
+1422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [275.807 653.634 298.278 665.589]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.7) >>
+>> endobj
+1423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 642.232 526.596 653.08]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.177 593.708 435.397 605.663]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.1) >>
+>> endobj
+1435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [256.431 290.331 278.902 301.18]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+1439 0 obj <<
+/D [1437 0 R /XYZ 86.4 726.045 null]
+>> endobj
+138 0 obj <<
+/D [1437 0 R /XYZ 86.4 701.138 null]
+>> endobj
+142 0 obj <<
+/D [1437 0 R /XYZ 86.4 580.118 null]
+>> endobj
+1440 0 obj <<
+/D [1437 0 R /XYZ 86.4 511.347 null]
+>> endobj
+1441 0 obj <<
+/D [1437 0 R /XYZ 86.4 402.035 null]
+>> endobj
+1442 0 obj <<
+/D [1437 0 R /XYZ 86.4 127.731 null]
+>> endobj
+1436 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F48 982 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1447 0 obj <<
+/Length 2447      
+/Filter /FlateDecode
+>>
+stream
+x��ZKsܸ��W�8�Za�" &��#�)o�rb����j�Ұ2"�$NJ���M�o5Zs��*���@���o@��z�<���яo��(���k�("=���.�ޗ�$��X���G��*�n��l^m#��z���8M��1�4
���\�ttzq��1�cմ>1Ry�ۣ/�Po
o~�(����q���p��Ώ�}D;j�1�>��T#L�ZO�A5�����K���AC�/�tea���m~�l��)����oS��ߘ�_�w�
�je}Hp.��5��E�q���6]r�������dQd��|�onq�./��8P/�<��h�&H�ר8| �_?TS��q�S�MV��JUv;q?S����^�Y�*�hii\�Zk]O�����G1Q|�)����./5��8�㣯K�_��
hS��}���܎�ZN�*J]�>I��
�cdy,�X���Wl¢��s;��@|�r�]Y���p���(���$�	%:�\x�^y���u���ׯ�&q1
��b�F����H�O���0u
+t�G=����	`0'T)7C�<
�L@��0� L�]�筀��4#R<]|�
�0�pt0��JQ
n�ֆ\HT���g�bDp�Z��m��Z����\���á'��DH^�6LL�آ{W�M�ANJ����PmA
w^�p�Y򷞍�	�9e��t�h��u���������H���**x��n獄Kouр̴�(�%
��
2/�lꁭ���0Y���<��,$����1`:'������m�8�jpP�� S�P)=_+"4�� `JC:�r*�y
K

����(
Y.A��՘�i��A��{
oMǬ�튥�ƒ�Y�E�,�b��AC�4��P�;
 <�����4{��^��rW(�?Uh�,�\4\ᛇ�d���"�$��"�D���d
+2@�O$y�����ĜX#	 ��%M���ݘ�
j&1\�
�fk�I4٤�l��,u/�
���`����[zƆw��q��<�̼j|,C�~Y�2Q;}J���}яRa-!�ل��!	�휤e��f�>,�K�1	���$LFj0J�k��jjQ�Igd��ƽ�T��
'�QFt�
I:�
6G-f�W��k���:99=?��b�B�U����:>
+�o�˲:t���V�I~��N'(�wZ�n�N{������`��T�t�����#B
���x�P�)�:B�>�{7����1!ڋ8ܯ�����J(3د4
�W�YL�I��^��5��6�_��il�t�Tyڟ�,��;��
8
;p�+�x���i�c�0��Z��%5��s���PW+W
�}kE
d3�E&䡤AW��W��}8��-��� D����j����
����&�7�+�mh5`
%��R�`�0��	�!��β�0�ߺ,
Ŏ9�:��
+=�ק����Cw�k�
qr�+z�C���RE7uw����Ό�o�$�m�,܀�=�lf�pO��wL�k59 �#�US59p�r e�o�

9б�"$��� '��v�s9Y�p��
��zd�]e��]� jѺ8��
�y�^���'@�}�̡�r�{IߍSZ�.-�Y�����
���)<KN!��8����
+4�a_�5�_?
+˔��~9�dn�.-�
�	Ow��u��&4Z
��o	 �H9D.&��v���k<^C`o��,�	�������5DJ3�Ga*.�x�9��ޤ#�������5	-�5�j�z
���8�1�L�ktd��c
��b4�
+���5�갣+�I��]`���IUhp�9=�
+�.�a��_Us�
+��d�p=v4#�&uŹJo]���kP�`���;���2G(m�X�IN��b��e;	�XH�:��W��J���*����G�.�G�
�ι�
��`�ME뼒jG\5�W��-O��gQU*���U�QX���9�D�@�8�[n6�V���JS�հ� n꾇a���o�ũ���[�Ű ����X �	�����'��9 ��l�s1LD�Z3Q_m<J}�l_�q.�cEC}E��<��z
+�%�i�K���f��1�������D�C�;<_����1�RN���+b�W	*tCk��;#��O�_����PB
N
G�x ̐Ҿ��_��ݶ�A�վ�bx>p�JZ�g7�z��@P���,]�!����C� ��5���h/�ӈ�^�ko_��e�
+#��Dn�"���> y\�'��Y�
��zpt"�B�
*G��}z���_�uwEd
���n\}�x\@�
х= �Dz�
:x�r�	)�
;��`'+P���]O�7�o�&�� dy�}u2B
A��׋^���Z����{
�󽆰�����(X��Hp��C7�Qe�l� ����P��%zn#��U�$��
����gN�9
+�O�
ВB�C�, �
1�Wz�rhnz�)
+
+�`��
0
���
"]��B
�x�����?8��
+endstream
+endobj
+1446 0 obj <<
+/Type /Page
+/Contents 1447 0 R
+/Resources 1445 0 R
+/MediaBox [0 0 612 792]
+/Parent 1394 0 R
+/Annots [ 1443 0 R 1444 0 R ]
+>> endobj
+1443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.99 136.225 232.712 148.18]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+1444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [468.828 106.776 491.3 118.731]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.3) >>
+>> endobj
+1448 0 obj <<
+/D [1446 0 R /XYZ 86.4 726.045 null]
+>> endobj
+146 0 obj <<
+/D [1446 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1449 0 obj <<
+/D [1446 0 R /XYZ 86.4 635.124 null]
+>> endobj
+1450 0 obj <<
+/D [1446 0 R /XYZ 86.4 444.845 null]
+>> endobj
+1451 0 obj <<
+/D [1446 0 R /XYZ 86.4 204.917 null]
+>> endobj
+1445 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1456 0 obj <<
+/Length 4737      
+/Filter /FlateDecode
+>>
+stream
+xڭ;k��6r��W48D��D��#F>��l�
�s��$|F��f�VKm=vv��S/���]��|���d�X,֓��N�d��ݟ?�����ʸ��l��+����3�v�#��?�ER��?��=�?�BG��r��������3�����_��
��i����������/w
+Mv�/b��d����ǟ��z��Kb]�gw�]�)�������K��dM�)V�+�ǀv��*Vy�����[
+Tf���s�%"t�t1X4�cU��E��}`ͼ��\���Y��$�v�{��w��+��Y�oֳt�LC
����������}E�E������]/��Xe���}��#�,M=/�T
���Fl���#�Z��
�3��L>���m�w��e���u���*���6� ~�(�O�?�o�]۽�[�U��J�{��
;���\�������o�]Jd%�˥�.}]���
"b`��c��@"`�Jʼn�`�*.���?��
�gr��
�QqZ����5�9p&�0��:��r�{�8�S�HN��-�m|�`��2f��=
 ���3k�s��މX�����(�G�r�
��13M�<(��(g����D��J(
+����g �Q����ws7Z���79
��ʏ�^j�xv�ō�^����Q����Ad,h��]��B�E��t��)�S����w\.P;�
+�R��2�y�&20_���4�=*s�փAiK�7��bQήj�=����T#�xܦs�Ɗ/�dJǿ1�T�H���g*��{�:2� �H�`�w��|v�`�Ȗ�2Q��$�����-�Q X'��;j��l�c[��q6���-&6��a�F��%o����Q%f����l�A�g�{x`DQ�yi^��D��`x���xY��Z�����q�pm� �2��N���|��걑�c�ن���O黩=t� Z����
eU���H�-_���5U���ruF�rc�g��:����y�	W��g��`���OZ�[
�1��zFd�W�9`JYf�SQ��
�����bC�ؕ��؂��m����l�tn�VY��Ǯ_(l�C�<a��
T�8b܎ت���7p�
++g.������%g!�fӎ`�;r�����bŠ `�..���8�Gm:k��9/��\�e+NК���B �+��D&Z����w�w�b1���n���<!]
��q�
0��O���Su�4�
~�Q}
��$N���n���8Kf�
cՏB �
~����UԢ/��J�w�;{JB��$����O?�=�Vů��d��r�"qBq�1�����1B��F%[�D@ؙ�,��
MV��3	��hێ�
\��Ax+�t�'��
NbZ{�b�w�ؼ�Eı�qt}�3�pI翇�Z���OHų$�jВyi�
n�w�M��G�ѡ,ɝ
q"+m^���%lA
�G^����#�D�
l�ȯ	��&�]Nt�N��oT t�
+<
�M	�G�A�v
�?4��<N�<��
�z�
+�-�Y�%6:�h7]/���a

O���v5?����
��1�9�枚JP4Ci��w�ZmP��k�v�V����⟅��&m��N�<� ХqQ��U���C��Pm����6S;
�7�,�����q��$.�;ph�P$�E��4��C૬� od�q}�OӨ
+��,��������H�K��5�����ͤ�H~�w��/҆F�L�+��7�5� $H�c:/B�%Y��ԟ�~��]n�I� �'�tZ�bn/�;�C��r+�u�G������$A�ֺw�ovp����
�8����M]����P�^� �7!77
��F�Ij�.�W����n��a�V$[v|�f�
#o�!��;�bJv>��s����T�N�j�ſ)�>\���P�J�a+��V��v7����&H�h_M�'��p(
Kj��(I��Oæ��]>�7'CJ�ƍ�B踰�=

s
b\��$��Y�9+�A�@�|1�qy��qj�
+���i��>��a��7RN�Z��Li��� a��%@Q���{� �0�&���d����n)
w�l�b��H �d���c�6n$B��E��u w:�+�d��I��7xx�P��d͆�+�`�2O^�.b{���;_����\�����t'�
jc���U���c}������0~��-ٹ�L�R��t�U#�F�>h�����9���
�
�؃���M͜Q�ހ|�T�5&q�@4'���Xm@؉EV�a���!�nL˧�>�-���l��w�i��
�Xc�賾�g�9V�Q�_1N�t��y�92�Q�pC��Y�E55�,�Z�t�[X 
+�}�@t(q�
��M
|ƏY�$��[x$}��i���Oil�
�%�+l�c
����辘ߙ��Ŋp%M $.g
+%�R���d����(Y3e�����
:�]��}5��S�� �9?��!�-sI]�쑬&
�36Rv�?]8h��8��>cz�����7i����O
�
�ihD&T"�\e5�W�!�h��E�@7d�
��{�b��ά�����[�L49I-�r(	̥���B_�zO�
`�;�
�)g�Ѝ¤�
��U�fi}�ryh��hE�����T{�ʠ���VfcS��8%�)HP�O�A+�'^��j�J��
+�y��^U0��yn۵�
(Ad���N�'�:�� \��1ё"5�X��(c���&q7�'���'�
+ꔬ���e�G�W������j9��N���&.�l��������{jS�&	$�?�?2#��0��
��5��T���� \�Q`@
6���
����P(���h '��-��|�Rc
�"p[� DR.�^�֡��n�-�|#�#W�
+���`_Y�n4P�^0�����������֮�:�,e6�.��$�{h��U��:xJ�ف�W�"j�wj�PGl�z��¸E�Q�Z(��2Q�W��t}zb��C����N����r
�J�=Uu��Z4_�~���˗h
h����ў����k��,��z(4|��{�-��>?��ğKJ�����
�B�^�P�d�|y��v`@�H���,��'��>L_=H���B�Ux���|V\S/�%��跛�
f��}i�qpϿ#֞�&��}O�
_�9�
��Z-7�WA\
�P4b$���
+e�������Z��l�@��b��j�3`UX�q�D���c.�$�L���9��R�:��O�y �hS�r����
�"&cWA mO3&�8�����6$��f�� �E����bY�e�NyO(�k!�{܌P,%�\}�ϳ;�ә�!9'����ע�z�r�

�{_�}M\�|x0�r�DI��7ˢ�hE�m�V!G�wv���Rh��|���"�J�����N�J�ō��,	h�z�0N}Kjژվ�2~6��*s�ل���B ����ŧ��o�kwj�q:�7�.�{�O��ƸN�*
�+�C���v��Kgo�y�,B��U�]I^"�R�*�q��5 �����4�J �u�1�W�XlJB�b�UI�$� ω������s
+��+硢��S��s�^�s�9ex[�(2
lª�$�*?괩o����ZށI�Vm��>s��b��ZU�^BO[�"ί4/�0W�?v덳o[f�Ze��HW�������#]~䢣��p+�/
����v +V7���
�V��6��P�-%��
a�gy_�0')b�[}�7�_��.�0�@�{lq~��>�\�Q�D�u�	]bc�ne9��B �~�*��KNiܮ�t'
P��*�\b
Y$d��=�k�@j�Q��9
�5+o:�?0��~�+���pI�s�
+_� �ڐ_�H�X;#sgN at t=��3�}-�q ��g�Z���=q���2�������~ᚁ�͋@���&�<<^�h�zρ�ׅ�*�_Jm
��v~�yC
֪�u� �.�_���r:�,�*h��b1�'��A���
�F@ӚuQ�?
J�բ.ou�!�
+mY��ū�lˑ�*b�@����O�E��-��KpZ{�E$R6�:1�+�)f���w�G�
����хUe��Q>=�$"�X���������W�TW74-�l��Y2�����r�wb��R���m�/9~���=���yt�H�N�n��
��0]���Ԟ��d�K��xU����n)..��\W�
W}��y��
1��Qf�r�-��J����\u`(>J���\B�EW�4r�TE�(�|�'�68y�W��(��������u�M>SҪ�\�mֱ���X����ۂgjA�p��-vLx*�T��I!gdb��p�*��w`^��-�Z�
+��
f��0�6�K~��
��	�^�
ҷT�3p��Ǻ�����`i
+p�2��{
	y�9p��V��}x	���󒋁��t�
᠗
ϰ
3���v�W��}������D��
2��9�o27�k�WiH|���
q�%���z�(�$a�ck��a�`ͩ:Y��~���s����R�B�>�6���|��n�e�7���q������F�^\?7S Ug�ɺz�mOe����΁�4�cc�/�7��r:���8Y^'�
���<
+�-���
{Fo���fy�0�
�����b!�N�<��	�����	����
��'ǏqN�w
�E;KD�}�)�	3h
@#�'���%㐑��S[Qa�\J��/�9o.�!��;�>W��]�������n*�
+endstream
+endobj
+1455 0 obj <<
+/Type /Page
+/Contents 1456 0 R
+/Resources 1454 0 R
+/MediaBox [0 0 612 792]
+/Parent 1394 0 R
+/Annots [ 1452 0 R 1453 0 R ]
+>> endobj
+1452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [509.106 529.919 521.062 538.332]
+/Subtype /Link
+/A << /S /GoTo /D (cite.idas_ex) >>
+>> endobj
+1453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 85.931 519.955 97.886]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1457 0 obj <<
+/D [1455 0 R /XYZ 86.4 726.045 null]
+>> endobj
+150 0 obj <<
+/D [1455 0 R /XYZ 86.4 121.003 null]
+>> endobj
+1454 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F13 1100 0 R /F7 1094 0 R /F16 729 0 R /F11 787 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1463 0 obj <<
+/Length 4284      
+/Filter /FlateDecode
+>>
+stream
+x��[m�۶�~�B��k#�x%1���qbO�Mr�釴��I�
ǔ������.� Y��L?
	B
`���
\��_$��W��^}�J腉��zq�Yd:����X
��]/~�d���"���h������,�廒�7�ݪ+�]{��F�,��_�?^}{���a��bU�I�Xm�~�W�X×I,L��d�mR���S�����*O3��R�T�,m����$��
<(u�����2�ᴾ~��H�I�L)�
+��z�GEd���M@Kb������ѫ�%(�|Q��P�b%�Q���D?�?&��2"�(]��c�<fI?��.Y��{��b.��
;	cIc��C��kΣ|]���X��qڏ���i

M����}'�xlx���5Ϣ��@;���
艦b���6�WX���` &5���'���Qnsg�R���*�dlq�d�6�^�_���EM���?�� _��C��5I|�LM�>���$����n]�UT47j�Wv-�ܭ�ú����
� �jT��;�GW4��rݷ����>(�G����y�Y괧h<�3�rp��������9��4Q[W�򦥏�A�3Iq&�|U�����&��+����=�#�P�$�����
���EE�Z��p�P�&��&��] EN���i,�A2����i;���#�gB�b��*�4�����l�Nh�7~��~3h~�bڔ,���0e
K���[�}�Em������4������a�*����u�k?��^}�p��c�����C�"�ڷ�*���n�
��:��ҩ��Ť�n��O{�㮝v~S:X�.��
�zۮ9���l_
+��L0�L�
�E��N�����\0�'��bA+9`�Ϋw�4��^�a,Wuu��<��X$l�u�V�Ka��H�āK�N�
�{�t
�e]���;|�<R��lK�� ��렃O�ޫ�ɛ�h���� ����s��pm��݃&���,+;(5��#$C����Co@����b$>�m�O�
���{����Or�b��t�
+�:��Z��*����[��
+�h_28��E����N>�HF�a~���J�
9><�ꦏ� �v���Q�&,�K�L\:�*2�}T�Aˀ76� �*�8�l�3��1�b, �B
Cnث`��
�	<�?]n<�_]��d>��Qx�����l	^���
�ga14m	ܩ7�P�Hu!��:N�����6AJ�Z���#Yw���,�^�Ȟb������n���&�`Q�υ7N�?5��%�
�f"VI:�8��&��I�k!9=I>�����.�Ό�t	�4��Zհt�P!�SZTq�
�� V�'�KJ���]�%�)�ۺ\���zȨ�d׺$4B�C"U"J�\���Y1��o��#�� H����o����7]~g##6t�o_����Wz�,Q�[S0J0�@4�[���Iyݜ��b:2 �š�⑞
P� P�@`�9��2�@��1,�0��#mx�u��af��4��<o)
,���@@�i�,�����=5�-<ҋ�	�&����[�wb�ibX-�l�EQ�	�����VŦ�ySs�R�K*�m�u��	%3�^nٺ�̺ح�C����c�D������z!n�
�zU��UAƢ�qb�N�6��YS�"�i�~>6 [...]
�o����݋�M�&|L��������;2
pڢ_2��=7|��W���E�39�ьB%93�T�8e��e� TM}��[z�.�9	
���&���;H:*2/�����%|w�
�l�v���t��H�->}8!.���<RN��
��},l���]>��4
�՜�U�@�Ooއ��rfh�|���þh޼{�
8�VOv��O�2,H$�DP���A T��O?��Db�	�vc˙�

A1_�X
|��2��1��O6�f��_1.4�c����㠰�Z�Y��Dc�8`�ں�dT$�6������_˶��ti'Yvt�8
�s[l���M�2�C�M�
�
Mu`����\�
�R�q���$c�!�yA�	q$a����C�&�C%5�'�C�
2�|�2K�M�
3�
+�<c.J��/V] �]�-T��
\���eL]F�*�f)��[9���z*v %�GO��=����>\/:[Ӏ�
}z(W8��R�
+3�C����.����\
*�
�G%f��@
�d�j���p#�Z�����R��u��!�}�T�c��s(�`Wy[�>B�Y͋
<�O%�
q�^�^[�VW��l���L�¶�O�˪h�ܦ� �V�s*s��Duw�H��n��z��l���|E�
��
w�a^h��9ybR���Rh2)��0�^vE��C[Eٹ��7<�9���e��楒	j�u�(+�҃"VV�h:$�.�n�9:�ؗ��C����h�^��C�2�\`�jw
+I�3��jT_��Fʚm��g��z
p�>}��l���
	��.��y8�����Nɇ�u��t|�#6(��iG�/�$
Z�
9���эr(��
k�����C���A^@�S�&��X(M��
��Ƕ+�t<���X�'Ɛ�ڸc_[U.�Uf(�
���ڢڠ�r1�h2�;M
 8�u���9�1I	�Rz��8c��!� \���
Cl��sB�`��:��t\q����bu�va
5dF�i���3J�)�('i�D)�eJ�C
�
���uѮ����u�������{�J/�=�p�m3w�`�
��#��%�^ցxgO"��D��#l�lΉ���� h�{�gB�2c/
���<��3gB�������<a��*���݅���>ǻ0�\�����M��#�����Wo�����8P_`�8�9{�J�;F�t�اΦ�*�M�
�#�:[�$�dZ�+d� �	�Κ�ޖ�f�%�4s�I��b�&l�Z�J�U,��2@�be)��
;/l�J/�ޤ~T
�����pх�Y���NJ��PX��7zv�39�F�_�n��+PX�
я���1H�WN쳘�D`�S��<9r\Vc[G%
�%�ԗt�p���P(�6�ꏊp�
��,l� ���?{�1
p+
,E%���!P��Gѧ�='��'�����0�����t����\��A�F�J���K����Әe܊��d���G�t(Ƨ4��ڒ���X�Y����jKt�a-�D`���̞�g��U���0�
��|a���|
�C|�a��z�=P�ߝQ����O�[U�
엻�se�����������[+�
G63��_m��@*Ou(���d����/��6 at R��n6�9�
�B�>:"�rA��zPc
o��c���\�Y�[8�w^�D31�
�77oM!r
+�`��{K��֌[GQ�#B7�_������AW}�)|�>-Ssqȓr���ʮ̫�?��*{��Ol�UѶ�C�o����x�gU���_F� J�l���oc�Ι�_bL�`R3���7o�l�@�#��p&u��!V Ɂ�}�5����"\ܘ��_`	��p7��
2�x��t�
�^U?i`�raC��
-
4&�10�{��v�ž=�7�ɐ�~~�t�Ä����x���	V��^���]h����$T��wWNS��
�
�Ɵm*�n3\�}J\��%&6�:Ѩvޖ2�DE�4�{N̗1%	4��K����z[�������
�
�,�
@X�5�x3����&/�b
�,����w5�R�

+�䝶��B\h�*6��U��-��]
M����ؖ�l���ϔ�z�0�~��ɵ��/�)�%��E
�eg,}�
+
�

�"9Ŭli�����񿱒�AZn/��GP�po
?X��9�6�3w��
{6��<��U���@
�k������0�K��>Dg�#�
���PR�
X�N�R��VgK�K{R��v��:��C�H��
��u0#b
@Q�;����n�^iP�=�Zzr!�d���BD€���B�xs9_�������
ۃ��*��sv���9]?�*V�5�/bb6��)�E���[-��������]c�M>a��˧��������
+�c@]ad<�xN
��
�/�l	���������
+endstream
+endobj
+1462 0 obj <<
+/Type /Page
+/Contents 1463 0 R
+/Resources 1461 0 R
+/MediaBox [0 0 612 792]
+/Parent 1467 0 R
+/Annots [ 1458 0 R 1459 0 R 1460 0 R ]
+>> endobj
+1458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.792 495.575 390.012 506.423]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.4) >>
+>> endobj
+1459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.14 495.575 429.862 506.423]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.988 351.189 445.962 362.038]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.9) >>
+>> endobj
+1464 0 obj <<
+/D [1462 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1465 0 obj <<
+/D [1462 0 R /XYZ 86.4 336.258 null]
+>> endobj
+1466 0 obj <<
+/D [1462 0 R /XYZ 86.4 81.196 null]
+>> endobj
+1461 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F11 787 0 R /F16 729 0 R /F14 1050 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1470 0 obj <<
+/Length 2901      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw�F��W�6�<���2ysP�̳��Ɍ��9@$$!	 �8�>�
�A���g�D �ꮮ��“�	���짫�^191�H*'W7-�(j�ddr����2>�S�
������l�4��~1ctz>����rS����b���w۬X�~�zs�����3L��L�\N�������y3��=��ƭ&�D�)�\���
�E���u��D��k�V�2�4���N��	�dzu��Z����֋z��x�*�I�a�#�����d�,>�H�U��w�+X����*��Ŷ�L�wa<�J�kD0�'d���d9L�KĤ����:MJO�*�����
I�����![/�E�M;�9�y
�9eQ%& dD^q����Ψ�~�ﵬ*�&c��ca�)
���,GƧ�$[�����-��YY��j�߲�"�-��FV�YhP�VR�k	�&RR�5S0�Ӎ�9���1I��H�՚���Gw�#i5�.�c,�v>`���Jg��x,���v�J��0�U4���-��ڑɾH`Us0Α��1"!R!��#%��t�����b���C��
8Z��jDw_�
�������`��vȑ�Z�OM�̋�K�O�EO�"�S������I­��v��{�� [...]
h4&�
�j4H����s�7k�Ca���Z
b�����a���s 	_R�q\
P5N:" ������
�
��i�
Ԡ�S��?YP�_ 0
+7�����D�l~

+�2���I����8�:7�b�?�Oؽu-�A��V���Q�� KIH0�h�u���\���n�I��%/>���M?�D�9��t�'N�ɜ�q�L� ���j]ًiJ��cN�!|
�B�B��0i����]��;���}�@c��q^
+��߀1�o���@ �I�
ܱ�#�2+as��=��
j��#�M�������
� a���
es�3	q�	P�%�M���f�`1{ Ɔ8f@�"}�����<ƶ���?��r�-��΋u
��$�iC���h["Qq���7���:<�
+Zp��7sk���%���o ����&Y�Y@���ew^]���f���c�}0DHET����լ��]򸜽�b1�p���L`��ߟf��ɀ�i�.�%F��&��iG�$̣M�ϭ��i�*l��	�B�>��9dyhF�}2�0ӏ�!+i
I�%�Y� ��Ft��L�B5�ÿW�/���0U at H�H��z�-LrGJ��.�=���r�,�����`@�U/u"��HJ�
+:�fI����<gIj�[,Ҫ����P!��-��PE��)�
+Fb
��~��@6�9�E<S���L/޽};r�  c{�أ��PN� )�$�P�S�"�����I�4C�ř���8G�նZB{@˴e�q5���y���w�#'��b
�p��j�x���EL/~yw�p=��
����B�`[m�������u���b�_qҿ�|8�u�!��
���҈&��6k[�C�W���ی
Ӌ�
�.w�-Z1�u6*S�|�{��nI��
�����T�{~�ݶʖaj�u_I
?�e�]v�Z��6��*�a�۫�@�*����3�A�9�U	�D;�f]�!ś�%�Q
	;
b~�h�/Oa}��2'��dz�m�������=�y�4Y@�ܥ]j�h�-
��.�k	7I���=���6�hy�=l�`W�-��y��My����cߝ�����Cd��
����<�Ym E��8���^�X�.�c�,�:4�+&���5(���gZ<z��-��F�
&�'�P��ރ�X�/N n��M�v�%�j0�Q���2n�X��2�P��M�Fõq����Ks���0���WZ���R���P�,a+ -X����ϙ=�;ʃ� �޹�	֯���� 1KJ�pM]l��j3��\��Ƣzm�
�5�}�-X�ń����ޕi�
�+Ё��_�E������;����C�
n煂�qz�?��+ѽ��
Öd�mx	#�ZxJ�úX�����Ə��.�k�E�_m� 
+�6)�f�?� �� ���zeKؖ�;+�h+�v�|���vf/�h���J�ȸ��<�mP�r?��q����IE����!94$
���@
����"*� ����-.�
��D7VU=tH��_F�I�l�9|H
wZ1~g

����e0��}:p
(!7Rg�ۿ������?~h1�Mٞ�����@�Z[H	Y��.�riC��'���#I��贆9��7;pc�=sT�����A����-�W��A��$���X����
��l��6̅U�1�J�~�E;H�l��{�_��t�����=�l�>�Ş%E
���sV��
+�d�
Hl����$�>����
��A��{{l/�`oU 0��+q&�i%C^���H7ۚ�`������p�N7�~6�)''E-�[]��8�f�Zmzm2��*7�R�w	����U��核h����U)\o�#�&����/���:�m#6p��
k�N�)��6P���m@ǘG��t5�>[���P���ɘ����G�����M�b_�ˆ�ve>U��
2,JT���n.���3Ը��E
u��+w����O��xz�]����_��

+endstream
+endobj
+1469 0 obj <<
+/Type /Page
+/Contents 1470 0 R
+/Resources 1468 0 R
+/MediaBox [0 0 612 792]
+/Parent 1467 0 R
+>> endobj
+1471 0 obj <<
+/D [1469 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1472 0 obj <<
+/D [1469 0 R /XYZ 86.4 560.092 null]
+>> endobj
+1473 0 obj <<
+/D [1469 0 R /XYZ 86.4 210.175 null]
+>> endobj
+1468 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1476 0 obj <<
+/Length 3151      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys��~ϯ��una��R�x�
50�$����J�¶�l�L��|�H�dy	܂�%jK��}�>ۧ���
�����ŧ_p5��UL
�
F%b��M������H��>|����8�N/Gt��O�p�a=��b��
1��ry���W��.~��X�
hEV&F��xv��Od0���$��
>�y���6aM��^���6
B!�!:�$T�P���v�
&}�f��(IxQ	�-*�h�P�&T� �ן_}���.����cC/_�Ż2:�Ƽ�w��k�V��26���)��z�ű�	gO��i�x9�L?
����D�|��ʀq�0e���ʃ,$����]�3
 ���Y6�$l��m5��>����\f��E������ܦ=�R$�GTAW6�<[��|�
�������p
��qp�Z���%
 m[in��'-�Y�l��W�@|�U�|�}f�M
1�
�䒱a��t�AZ%ZW��<K�@xYL�_23���t>	�|>���*�7pI����2��H��ح
+��h�I��a�I^��
���9�t��ݗixP���S"M=x9�iX���2�?K�y��(��2���K�1/.�����$�]
�� 
i��F��r׌�4��=�Ӡ�9f�q�`žźA�^��Ӯ��Ĭ�0��t����	�,iZ�3�n��*׳lZ6^8��w�l�*!΄b���#�4��@J$��:�,�T�V�s?
��ٜ���w
��8#�װ-r4��y]MwU�
�q25���u2��k2
R��E�
��O
��ح�sr�;C��|P�f�������/�\>_��:N;$V�fAP�
V�Ĺ>̃�>64Y������,��?��W?~���Lu�t�΋��Y�"
�2Ϣ��
ժ�c��媒�W鸸���!�Mx; )��k�	��/������X
���L��`�d�
�O|�C�{��Tbp7bi�V<tl�1���.����F�'7�_��U�T
r���p���w�I����uG�W�LM�krVp`�k�-���᛫��X�Zg���j�t��C�Rw7�>Fe�`��;����"\�+�y�Pm6	�t��2.f�2[.�؋V"�Y
%��5
H����l��
��#�5aDL?0#��=�
�C��]�~���J�#�<�}V����AB
+�JF�	�[h���S���Pe���F
��i�#�,��a�[†� �`9�C���
��0	��a�3�Y�M�aF�Z���w
;��T,��'aR�<	<�`W�
�
+#���
)��ݶv�KF�X�E�NW(�(�d3]�.[���3�_�N��:kg��MbX�{cNJLB�iT3�j	�� 	n�;����`��k
�T��ֿ+��1\�.C?jfxSv(0n��v�kV
�!,
��g�k��
Ǒ�2�{�������HDP�W\�u�N.w����F&�nʟy���i�km���NCE�\��86��lJ0
�V�=*Rmet/")a*�ꛎE፨e},�J�֚7�޼9�CW�p���٦��ȑ���0�9��&�v؉���Ǻ+��Gp�!!P��絒Ў뷬&~��q?�
�
��^�
����u�w����hed�5o޾�{��5]���W���zf��iH
q�.�j�C,܈ou�!��Q��x�.˘�wl�Zd�����܋rwk#��d3b�B�7Y����
	�0/4#@ٓ�)n�)���E+3�^�ק���X��e��@Uu�V�(�_�Y�>zH�i6���CRً\���<�����W_��p��O��>f��dYs�#�`�ք�TP�v?�\��?���eZ�EB�R_>L7*Z�Y��#�2}��1�KyD3O�)\��S�O�=��f���H��[�n�r͛ř!��}�{�`����1y�(�
+�|��f���B:��{�sT��)�
5��=w��1\�Hs5����c����0��	�A���2_��F���tw�
����ԛ�\�'H;zn�&z�6~��b>}� �]��v0�<Z�Xυ�8����'�y�Z=}�
�S�u�'+�J�����Nv�k���^>�E(�C��Eju��Dj�I1s�b��g�F,�X�\�+�B��*�����"1բ��b�Tf�ˬ�?VrZF7�9��
t�+8Sz�y�\���G5�������*�c�&�)�\oB�z��o�}s�a,�E�߱x�a|�t�#�
�W��l�؏o*��~as&����<l���z���r�����9�~~c�h���AX��
�U�/T�4�U�m��v�܆�O���VuK�Ua�R����t=���@g��{�o{���M7�BW����pHx�]{�ui�;~����V��&��:R��V+�u���;Q�	�*�
�ʴK*zW
)��z>���k������0�  �pć [...]
+#���v}�����
�

?���*k8��w
%Z#Dwa����rb�}#-ɦ�&J�K:|�3����I�P�j�Ol
*�ZA�,�+�-ȼ�����_�+�����ςϨ։Q��g���4zv(w%�ޚ���D��� _��(���/�HI{J_��Ec_��柋���D��\�
14*pe���
)��	Z�VF�X�
�}Cd^�0�
��������vW��v��n��
��n�C��rF�2a�n��F�VF�����[_u���&���Q⾛{�y��P��b^ %N�a�/Z����]l��3����H	v*������X�gl�HQ$tB�8��cE2"ZB�E��V���D����z
�J	~&����4�P����Ь�a���������� ��wjp�l�=���֚�i���E at 7γ�)*;
��(�=-��_�6���E��x�������=��+�4p�n�{����

U
�ř���ep`��'���<�
$,��g�\�O%Ę�X�0��a�pW	Ì���x/P�Ǫl��R���6�"}��
��r�7�
��(g�|�܀�՗�V�8�]�y� ��S&�c�N�0+��'�S׹�_P/S�Np��sq��
�*��<9�g�{�zD����jwﶰH���?_J5t�!wQ�ABX�z;��$�?���f5=�����
>/��ow:��f�U
+endstream
+endobj
+1475 0 obj <<
+/Type /Page
+/Contents 1476 0 R
+/Resources 1474 0 R
+/MediaBox [0 0 612 792]
+/Parent 1467 0 R
+>> endobj
+1477 0 obj <<
+/D [1475 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1478 0 obj <<
+/D [1475 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1479 0 obj <<
+/D [1475 0 R /XYZ 86.4 364.079 null]
+>> endobj
+1474 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1484 0 obj <<
+/Length 2338      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs�F��W�6���}��
4^���S�HNM��LB+ )s������ ���d\�H����߷<�4�Mh򏓿_�|�F����N�o��L
wD
�\����ЃSn�c��xz;8V����g�S�^�;7�y���K���լX-dz����N^_�|<aPJV)Q�J�
''���O~H(�&��{�D
+G8VEru��4�6lf�HK�c�
�
�&��"�j����]\]^���l��W:�|�w�U�
�˻����

3�PoN�?����y�9�-�Nk�Q��DPY��ji��L۱�}>��G��Q@�4u�y��?�t�*r28�B��7ѹ�r7�����l��.e f^~rʵ Ҳ�1�Ti v�-%1�h���H��'/'�&\���Ӽ�o�'�|�Njj5`�<�h�FX��g�(��.fE�:�����GW�{�i�����QH#1��8"�����Y�>�fl�1�"O� �c�^����V�
Ő	A	cU�T|�C8
6��t������[ӷ��Q6
�'[�,1R|
����Z"�q�T�
$q�v�QR����ctn�O۟;�W�يP6r���Y���()�k�ѝΖ!��-�U�%���2��e,��3��L���n��u�E�&�q�8�[ �u 5�O���$+�X��<��m�l���R�`8sr
����ݸ�nnn��v�8���E�Xć�/�DZ��*z
)�P!��lW����.7Jk��|
�
���)D��4�O��v�M5Qjg�JK435T[�s�r�P#v� [...]
q�DVls��y�aO��04ǵ������a��'��� �C'�����U
Q@<z}�H�2���Kώ�a�a�n<]n��a�_���^�x�-_���&
����/S�y�.�,~����7�p�X}X�g�<���݇�
�䥤H/5�
�r����S�PY�4�OXV�e��d�bYMJ�Y��F��媪v4��R!1(��dGu+c$���%ٽ�<���P�iXj���Ծ=��E�)q�N��=ѱ�Z/J
}�	�.J?��ռ����#��w�҇�?߶c����S
+3¦�od3�i �Ok�A� A�Tޕ
�haOߑ��5��^A��W~���y7
�Cr;�H�T��Qeفk��xQ
?���˗���vUE at C�C��,��C����œ���e,(`�p�
�b5
�=ܬ���M�@����
aU��q�U�������
��:���C)g������..v�XE�C���
��O�k�6�sJ��za at +�k{Q
+k��?O������L�tHJ���XE���թ�g
u�9w0�P�,F�>p&|�����:k�5t�9;�eg�_OCE>�C&
�9/�
+>��jȿ��gUۘ�D�q�0uI�~<]RE�}�d���y��j���nFYo,]Xt��c���k,]X���2�(�n����x
��-\����F�dV�.���}�t/J
U�t�o�E���
B�}��
�Ǥ�Bhbv��/M�����4���?6MW�O�=o���Aӽ(��^4��Mo�폦�g���i��w�� *u��Iϳ��O���!z����f��'�Ψt/�ɋf�ԃΊ>5u>-I�É��7��&9��(T�^@�����(k*�_�t
欝~)����,�SL�����9:��~\H���c�7ꨢ���׽�~������'P�U�o'�(���\
W;�1�e��\�Hd�}�^âm��P�����e+a��#���Z
j��N��OΪo�9R����?]g����>�:3|�Q��p>]|]y��u
�~B����}�u/���ן��7����Tu|݋�����{P[����g�������J=���Ī�:=&[�{�菳�T{(�B�5�2I���؏WYQ��ʧ%� [...]
+endstream
+endobj
+1483 0 obj <<
+/Type /Page
+/Contents 1484 0 R
+/Resources 1482 0 R
+/MediaBox [0 0 612 792]
+/Parent 1467 0 R
+>> endobj
+1485 0 obj <<
+/D [1483 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1486 0 obj <<
+/D [1483 0 R /XYZ 86.4 608.321 null]
+>> endobj
+1487 0 obj <<
+/D [1483 0 R /XYZ 86.4 416.095 null]
+>> endobj
+1488 0 obj <<
+/D [1483 0 R /XYZ 86.4 224.323 null]
+>> endobj
+1482 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1492 0 obj <<
+/Length 3889      
+/Filter /FlateDecode
+>>
+stream
+xڽ[Ys�6~ׯ��
my���<(��U�GV���rR[�
%�2C�$'���
�QR��'$�
4��> ��͂-~8����W2\�A
�pqu���@-���P���f�q�}���\���r�N���_&��)=����:+��x%�PEKi���������6l��:�T�X�>��x��2�_l��B�8p�]\
��
�-8b�E;�0�7a;�@�и���<��*�^��|��]3ٮ�ۤ{�L G��+���+
Q�X��<9���O�k��f�>�

)EJC(�t]�l�ˬ

4�Ṿ�EI/�۔��<��䌞V�U��F]�iY'YNO�|���*��ݕ�ծ�1/Vn�+%�6����&�o�0\&x9�2o���fqMo�E��a��V��n����
��v��J+���iv��$4�zR*
�2�����CS�8չ��h(j3��OD��G�*��4�|CøH��(>>@
��#�_�c����鹛ӾJ��ߦ_j�?p��i�4
+�X	�1#��
.�,G
P�X~��[�K貅wU��k�ؼ��%tDIF�-A���N��*���X�4���MǬ"N�
� �:F8c|L���ȷ��$O�iU%�k~�M�y�a�Ѽ��Ht*����c{S�U.�ȳ���FK�&��X�%0�NVq�1_^ݢ���`��}R��>n�t��rakȨG
2,�t�R��.*�Ȕn
+����KN㬋�|�Bx��J���,rbu@�ꐡ	LܰC��ВAdTӧ�f�l��u��`�:��������[ ��,�	Ɓ��<�]�N�?>9q�?o��p,
+`\��2��	A�0��;��@��D���.�
�F)��րz���OT}
E�7i8�ݺ�����d�*$�ѡ^�@��hgŠ��3``
+R^q��	0碙ܡ�ګ�Np3�>��OϘG���Ȕk��	$-
�;p����Q�
+���}�_㔮��n�U;�ñqc����<�c��#���
1�@I���F֌�
+��CU���~���*��QkQGY�� 뉊���e 1֮1#X�'��� }SR�Ϛ :TŖ �t�;Z�u�
�j�Y��5 �S@l%5 v��{(�U( j
��'[Ou[�� �<�D)�"����حe{F��to5.a�
}Q�;;w1�l*rcѲ��:��8�
�5 ��ڨy@@��BkP�'H at o�0t$l�=/

���p�\A7����dz� t)�1�A��3�T��c;����h�!�l�z�@��!���.��Q{�Mr(�
K�Lel�&!.�9
�_�
����^�P�5�o�.�5G]�v4��QqP��z{
@�%�2��evנy?��<��d���|�����vs.E�F��K����c
��v�V>ƠG&�'c;	J,
Eri�dl]���n��.�Гx�.��Q�H�uC�P�`�@�
+��E%'��~� RW����^U�����
+U�X�����歪Nh#�L8p_�'�~��{�mH��~(Q	�햹�urNEF��>�b�V�(���C
hs/[�

��*O�/��~0�3$��i[X�6��-�
k�"p� �u�m�{Bz���Y���ڛ��] �	��O�t�I9�D��햲*!�;����	��Kg܇.q`��z
��^���F
�D6Z���v��y�A��a��e��Z@��P|�+� � 2
�|��#r�Z
+z
9�����cmfaj !
0={~�Y XC��&#��Qg�Px�4�D��d�X�����tTfK�7�2��M]n��
���r$
KB�a0��X
�J�'���(?
�'�
�
Kk���LKǡW4ܹ�Y��|�����\��Gjb:]
�������F��0
���WXv%���	�D�'�X��6���
4ɽ�o�a+��x�?d�!k=��CӐ
%�C�ǿ�2$Du�JGA�]X�t
��m<�E��]��

+?qs��vje�����
+T�-0�I�s\d�
+v���DC��r����4�b_K̲y��rhurdu�e��Ϙ��y0H� ���M�g�(X4�� ��NV��ۋܧ�7�"
�Z��W�%%��)h}<�~��2��@Y�zPF��B0;9T���π#���<o�
Mo�T�
�4CX�~��H�Ґ��r���m�Hh) Tmm�)�c�8ghY�ɶ��K_N�1M���
W�-�A2>m3>jzU!�	u���W��k@��-@`�-5�T�v��
B��*��"��EHC%�h7�X���y�S0cyP�z�p�"�-�K��
+!���	K�aj�cܛq�Q��MK���n�5@�nR�~vY�:���x�>4m���]��b 7���nʤ��[l''d���0޹�,?��7)~
+w�(�	����Õ"
+T�ݞ��-���k��İr���2o�;�UC4c]1�|�qd�^DF�z�7
� k�-���1wi���`�P����9U���T��Y�?��G��J��n��p�MB�ل��Q�@R
+HY���OO�./�˩��v���-�غ9�#����*�A��A��9�v�@J4���������4
+A��!ӷ�_���,�� MiD��RҔ�Lc�CW���B��,�R�1/$�u���\%k�"���l�����A-,�YcJ���3T
F �9���!y�����4d�|���<ߜ�~��tJ�0���ض���|�TE�ᆎxtsO­l#��d
�9`M]`��N�a���B=g�a�@Ͳ�L�
��Y�Cf`�`Ȁ�۟�_=D�
}Uo�/�!�LS�Q]
+m�¢��1�Ihg��"
�ғ�"b�buHȕN^_�]����x
(���)�y���������F�kpB�v��i�—�ox`P�ٱzG/[#�V�m1����=K�u�C�j�G��#�]�S���U��9��cp
�,�
+�Ts��u����U�wsp����#+�!y�� J�s�V���V��?}8KA�]�ٗ��<�e]�x�Mcp�^8�0���ۘ\��_0:�:�������P�gx*�
�XÃk�
�:0��gx6M�g��t������^n���
�����>��Y���r=G����ჴ,��n��K���^:�C%glg]�L˂���r��dĝ�9|�gX9ݖ>������:O�~
Cv���!2�ͣ��m�ܰL\��?z�%�Ͱ��p;4��L
c�x��Q:2�ǫ��	�0[�L/�.=�i���
,���v8�i��`]5�
"3x4��ܗi�m�v�Z=���QJ{
�'ͧ-����"�B,Pj<
+��ݡo�9�����2]�~���[c �6�>9Ӌ_�3����?�0��#Z/�`\)�Vz�g�ķ�X&�ҿ��`��x����.����}����Vֻ*[u�K^8�jF^�5�S��})�&�Y�X$՞��*	��ӕ</�N�}8����E�{������C���
k���}w6v���'���m1����
Z���M6��P�O��j����
u �}ꦝ9D�	]��

�E�����4��7�O��=�Ϣ�x�/t%��wo/�.
��g��"���Y|\����U³����P�]%�G�W�D����t{]�E���
|�᭣ ���!��9m����Wu�d�
�a
+
ϲ�@I���������?=a�`�r�CB��>�b�RJ� �t��5��
7��E�Yy۝.��c����T��N�|شM�<5�"��h|�R�'ڡ#���zw:���Ds���y�Ӌ7�t��=��
�0�O`����<�b�o���'�n�屡�Ȫ��̣M�rXA��ЩM�k���F2�퉷9��j�u�c|���9x�<��x��bfM�gtG+�u�`��i�

�
n�|�e��3Gom��~��:T��h��+��}k
+endstream
+endobj
+1491 0 obj <<
+/Type /Page
+/Contents 1492 0 R
+/Resources 1490 0 R
+/MediaBox [0 0 612 792]
+/Parent 1467 0 R
+/Annots [ 1480 0 R 1481 0 R ]
+>> endobj
+1480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.179 656.848 350.901 668.803]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+1481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [397.989 659.339 404.963 667.752]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BHP:98) >>
+>> endobj
+1493 0 obj <<
+/D [1491 0 R /XYZ 86.4 726.045 null]
+>> endobj
+154 0 obj <<
+/D [1491 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1494 0 obj <<
+/D [1491 0 R /XYZ 86.4 570.758 null]
+>> endobj
+1490 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F48 982 0 R /F8 741 0 R /F14 1050 0 R /F11 787 0 R /F7 1094 0 R /F49 983 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1498 0 obj <<
+/Length 3676      
+/Filter /FlateDecode
+>>
+stream
+x���r������)�����(ǩ�gq��3vF�`�R	I�I������{�`#HJ3�C.b��x���K��ngt����Wg_�z��Ds=���M�,�	тͮ���"a���ЄE뼸=�
#�����.��,�t37e�_��dtY��M^�\}{�����3H�$��g���O����|;�D$fvo׭gR$��h5�<������͛��u��������j�?|4�i.tl����|�D
ݤ�j{΢*s�U�l�?�+
��-���iXTd�i�:�&�3i�t��.�2 F��
�6��od�BS
;�۽Y��nc�U\����onE
�$2,��}
��T��m#���]��DI9�3F�i�����t�x�r�B6��,��&�p6�/�LeDLJ�TȓNB�$1<@<���څ�wQVU�h�A&�7

T������ /c�P�̇	�����T�	(��X�5���L�$ƽWI
T!�����H�zK s'��y�kJ@
1F�� ���# �:y���|�
+s���T�Q5(�Q�X���L�Jڧ��*
���"�
����5�6U�)/���^�V:`�)'d�QE�=�{[�����Vn��c�
��
P1�q����
��9X��m��nҝSy�Ζn��0vy�G�9� �f��o�fQu^7Y�L)Y�y⾼�Y�EF��
CӞ�oh��W�����lGB�	�H������BC
>`��=�GbFN�X�AQ +���R��lP���sX�Qɛ<]��N�K�s7�b
�p�1a��w�
+x�E�"r�d� B�8i9Ņ������J��
筒��sΣ����9��0���>��Mz
ڑ�@�@g

j0m�u�܃�U%�q ��֧�Κ!�m�U�ef����\ X0�L�[�~#��P2J�%Q\����������n�*o�� ���*� �7�jU"��W�J���
h��&���k���ʨ(�5 {pOυ+�"̖�"�ܳ"�S�M�c��Ec�Ɠ&�UݸY�_�n�� {���
+�>e�V���T 1xG�����oF{�"'�o��z���j�D����ڍ[����0��V-��D��^L
&���'
�e�LDM���,R�L!@j� !�-�C�3X���ƯM�#�6��NU�A����'���%\>�7dO��`���C��DXap� �J���@\��= V���
�
��2	�AG��KL�d�y����  �1�
���${����ߌ��\
"����Q �[�Lw	�5�u�,��
8� `
�c�2�k`�J�GXgh�p7E��~|�����цjf(a lb���E�oڄ����a`Q��y��q��y>dinLۘ��oϹ�
�mDe�}?���n����o�~��Ϸ.g*pO`���!u���U�"�~К�
E�������qh�~!��r")K���
�'O�;��U���oR�����^;�8{wSn
o8�]0���qE��
�Wvf��Wx���%J����@/���:sVx�~?JY'�����������s��Fd��Nye<�s��
�;�f�}��T�K����88�s��S�dV�M�wZw�D`�
�v �x���e���^��R��7�ӕA����7S�����xYe�
M}�n@	��P�1��Q���X$�(>�Cy1a�@�u��
g�b�*る5����e-,h-���C�LBn`��
�a2s�*�x2�p���ށ�)������B:�ﴬC�`�j"s�pDv�uud� �!�#
yD �V�����u��!NK	I ;�h��
�h���T�c��汜��6L���:�J���*
~g{{g�!�
+��.�

�&�U��s�R,B]��̚4_�c�ǁ�Z�C���@[�CW���
)�R�!T�݊����q�/%_1`��La�=�s�dY�S�z�^�lh6�
�ޟ����$�@	�^~|������IQ[l�2J9�Q�G	l8mT���8�zj���"����9g�R��� 1���8	1T,<1߽~7����(;	R��H�H���새�	���D�O��'�P��S
��(3<�Bw�2e�������!���‚�C
+�D�I瑎
0�{��Ś�N"b ��U{��� i�>�7o/b�9]����h�5)a�g�jLw񩌟Bv�mq
+�(�R�c�d?�@���?|�z�j�)�
�N����A���d���:.(�y�j���v��	
[(1f������'L8)�Fpt'VI0�����
��l8	���O�ݻ������`�-9�CW2p��ys7���sj_5d at w�裻j�3X���E��S'���ʗR�4D
+9,�L�*l
��c�4��{�D�FD�|���$�^1A n +Џd�RO��M
�e�2�ց����n��t��}'�������ڬ4��͒��{
}���qt���»�*]����6~m1Z��ic9�j�1׶��{�}�I��
~�s|H�n�/�Ö`�`���W�/^��}�Mu��W:�Ka�+V:���5n����E{RqF
�
+y�ֿ
c���DAf��ۨm��ҽX;�.��
b�qt�_���Q�%@��2�P=�܃�tY�ve�5�H�D�c=�D�FKj�)��Ã�MIq����#��Mb?�pl����������?7��-i��
Y�G{�+�ˬ�W���bAxWR��PV��~�fuӿc��N��c�o_��
M�>X��Y������St���J�n#o�I
���
�
>��=��]؈�!'x~��
~�
�'xO���R�B�
��5��r���_�T?~�
7��ګ�0�7�̟i�
�f:�
�.�}A6.��w�}D���H>FH}�����뇾�22�
4c�[[�J!^;���oD	�}��ԼA+�Zt����F��o�
�7G*D:!V*D�����WY�j
6GoMttk��"�#���!Z�hܻ^��N�

��Х��xm1R8΢��n�#u�7�G�6Z��:u� �*�24���C&�����
P��h�$R<���'
F��;�1 Ɠgu{9�$���h���-�p��1�����ą��,�͵�I���ɑR
8\Tٺ���H
b*O� ��gd�\11�����r����V��E��㕍a�C@�p�����0�o,]q�ky���
޴��=ߔ�h�3�1�ٯ G�$81tO~���ڹD8�RIxOF$��y���@&��O����b��I��dy
+��t�+c����.E�8�����A�v�E���Q
��o �(0���j
���n�o�& ��>���_Y��H�N�t�u[�
W2ڤum�����0�؆�Q=`92���r�L�&iW�ܤU�����&\Rt(�=�/��
}�
�+l3��d�h�.���{Y--�s<R�U
��{L7X��k{g��������Ds";����د�{(8�*;��]����M���$�8���S7��e�
]�Ȯ�:���@2i�,�a���q	�
�
!������wQ*�'J��T`�t�
P^^��a�p ����`�����6�je�<�)G&ؾ(�ڠּgXp�����I��0��e��
+N��4�(�gE��L�1��s���e!�����pq
�uSY(��?� �_
+endstream
+endobj
+1497 0 obj <<
+/Type /Page
+/Contents 1498 0 R
+/Resources 1496 0 R
+/MediaBox [0 0 612 792]
+/Parent 1467 0 R
+/Annots [ 1489 0 R 1495 0 R ]
+>> endobj
+1489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [268.605 636.24 298.825 648.195]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.2) >>
+>> endobj
+1495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.041 431.556 338.512 442.404]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.4) >>
+>> endobj
+1499 0 obj <<
+/D [1497 0 R /XYZ 86.4 726.045 null]
+>> endobj
+158 0 obj <<
+/D [1497 0 R /XYZ 86.4 623.603 null]
+>> endobj
+1500 0 obj <<
+/D [1497 0 R /XYZ 86.4 542.321 null]
+>> endobj
+162 0 obj <<
+/D [1497 0 R /XYZ 86.4 319.443 null]
+>> endobj
+1501 0 obj <<
+/D [1497 0 R /XYZ 86.4 237.607 null]
+>> endobj
+1496 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F7 1094 0 R /F14 1050 0 R /F38 785 0 R /F16 729 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1507 0 obj <<
+/Length 4188      
+/Filter /FlateDecode
+>>
+stream
+x���r��}�Bo�gjw���3[Ǜn�k���v&�t�m3�D��v�����
o�d;���A#q ��t�0��o^�e��7B�R�j�g����D��-�l��}7�D��
#�wu^�/����ͳ��u��˦(���9O�4s����������ϯ��3�U�H=[n^}����ͷ3JDjf���L��ph�g�����e��r�x�:e�%ڭ�&o��V&���R�l���z�$_���)4#�+xc?����r��~1%5� ď�,ز�
+�p3ϗMY������~�/'��aJ�1�v��Sh��E'p�F�'�+��߲������y�]��_lW9��.����4akJϳ���h�s�������a���z��po�H’"k�D�v���
 �n��R�r�����/�`���y����*�$��	<��
NTb�'��5`��V�ܺ�
+YJHXj�z��f�o�Ո�k�\ޏ�38x&1����B����E���D��������'2�mM�
��z��z�G
�
+a�&>g�x�}��
'�CȄC���Tʹ��S"M&L+Ҭ3  ��3��X�W�7�_��l�DX֦�
�BRI��S�<�ֶt�9���
~ �b��
v��cI�[�*P������~�g��)c�):8��
����,%I������S0"u�r��(O��3��/'�3c��4U��F
+�+��
e����_nѳh<e�L��j��
�!�h��v����!���6�<lP���:-��ȭ=�b�
.?�Hi���V�z�]n�T�B\�����D��	�N�"pd�*����J
�J��8Р<�D��0�`8�Ԟo�...ook�}��
7������@�.�|����=
�Y�������	�*�d��8�#�����#`Sa��`S ;zs������Ỉ�6hG'��x
+T	��ٵ�<s&P�vxp��0�Q��h�
>�,e�?;�sв��2 4�U�xt�.��cf(�Z��ܡg�y~�� {Ƴ�����tgF�A��-�tQl"Ǒ�;�4�q
���gP�2��t
éx����z�j
��l�`����FɍI*N�L�)�Л��;���ۇ�����\Ǧ�|O�̖����y�S���汨ݐeV�Qm	>�lDkq]	f�hN�5wt���[�2�h�Plƴ
%�
+����(�9un�j�1�����9":Ae�v��aֹu�#��9dz��M�ܔe�v{_
N}�A,3�G����:�����c�D��lA�Җɼ>f
�42D�$��[��=«DP=��d�gK
��!X�[!�?f8��خ's��R�o��~���JADg'��Iy�z�Lw��(� ���K�HJĘgp	�����o+A��?��
+�L���vZ<��(*_�
����I����r
�����p�A0P���? zu����xv+0I�Ц�IdҎ)V��&x�~��b<���i��M���wJh�g��~��Y�Q�Z:����+L:IN�%���+�_� ��%��$S�8�@=��$6�@b�W�[<�Ʈ�S�U�o�6�)S���ۛ":�2�(:�j�a��W#�֠$XhV�@o]nº`A�SÊv�I�J�&"�a�h԰'{�s
���
����a�5�%n)�nS�5x5 �Sj�����i��d󇲲~(lr$����Ƴh{Q5�ܻ�h�V~��i�_�2x��6�:���2L:T8b[6�b������*~�-��f���ah��m���o���yU�iq�8.�
0���]��=�E-������*:h���G�:���1������K��n��ΡGJwdKd0�
4֖�m�(���
��ۢ)�u񫷘pL߀��֋u`l�poaa��=��	��+��1?
���]���8
+
�.Rv
+ΊvE���;² |��X	\-��4��9:H˸�6�]˺�� ��aTp��6v/����$i7>��I`��I�/ڈ/��3,B٩����� h�>��V
����5�ܣ��oen��y
����� �YH�^2Jд�i��mK
����
mb Fd��'H���b
ؒ�H�O�4t�i;?��A�����z�1
��g�ޑɅ�m��	'����l���n4u�}Ѳ��׏�~���ܿn�� r�/尹�.E]g~�}x�����&�s�IS�������B�����}2Po�
�����k�f�!̘)�r�	O=���뛿�0�88 at T�-oP�|hA0'R��~�EtA
�6d��UST
Jû�l_�Y��U�}�8�-�NA}�ܓU���
}�4�RDt���m>0�1|���A�^���~݌���
2A�F9��<0�h?������}���D2-�i
+�<��K��x/�3Q�+��|������\qe��(�HG�L�
�	p�K^�fa��B
�T��gȃ)�zy0 zZ
L 5ȃ��/�Ё8��S ش\iǀ�X�v�~�ى�l��W�ҿY�P���:�����T��u`�[/	Y�+�`
ce ���ZH(�l�S	1�3����	�� h��>�7��>;s�5�� �m�[K{_Y
�}�0\�
�p�"�7���
|����Hv�S
+ƍ����囁�a��@�бW 0zn�9W܆��Ԧ��E蝥
+ݦ���Ew��s��O���/|�>�L$Q]���X,�$];6�"]���X�W	u2E>�E?F"�B?л	N��0qo��
���K$=���Ix��I�^\_��xjf
+�>53���I8�+�
kT�v�ė��Cʴl��>���Ik���
�;φ�<Ɔ�|��
^<�
�
�i%�RF��M�E[�PǀԁH���8
p���z
��g�d�S�����IR�8U¼;�������D�`m"~ �)�C�3�>X:��"Kn��:(�Q�Lt��>
nCR'�8
����E��Q/���^.���|
+�@�D�!�'0�IG�Q�Ì2c̨�~��{�C>�!�
ߗ����ʗeO��*hx��<f�n�jbC�f9	��TJ���~�����r��}�/G.�	��B���[F��Y�_i�<���H�Sd���@��p�,FU�
��T 
Eg��.nN����\���F��[��El���ۺ�2����T �|,�u�⏔�k�.�at
+��b�
�V���<�+UDBH!L����L��0�h�?��>�[���G at oc!
+�j� j��T����a�b�P�v�
]ŋ�
+�u������0�
+�"��֟�X�j%���(ndLl�
�fȘ�
�M��(.�D��İF�>xv�o�>-bjYE�l��҆a���$;�@�}�/	p��
���e'{d3��D�B����<b<���<�w9�,&�6
��ti�S?z�-��]]
W3��jf �7���7bv�_~:�]�
�rlJ
X���쫲��i��`�ZՑ��~�R��]Q���
��S,�
�bg���\����÷���Uﲥ�r�?�WwY�a$��k�#n<��zʏ�E�.�:<�l���5!9�|RO"v
+Xb��u�hu��b�^1�[ 
ɝ �w�W^�:c����i$
\v�ԥ.������
v������j�
��V?��Fs=����O����'�b����ӹ�,$��yN�JO߃J5�10(��~�K�!���*����x$XЪa]_�5?�rgI����X���8�S�gT?�c+����Y�V�C
4��	�0�����v�H�2�����J���7\#��>����:yز�+�w�
+��]�vK�6iw����
����Zz|���R�ȥ�I��
�v�Y�ݳ�7ɥ g�!k����~�8����2��|/&,"qM	��1sw�h���;��TQ7u ��!\�7;��h��2�,���A8Z�^��x
���!_#n5�� N}h�� X�
nii�B �ו��G����W���ע�6k�/{.
��g?Y\y>�c(eCO�R2b��K��v�).eFɝ����i�s+�7�
+�]H��֒�캱�}s�v�&R=CGa�4��681�p	ܸSQ	��*hۄ�>�$#\��F8�b���ӑ�AX����e��:I-ib���o0,T�2({��{z�
+�����>[р��{_/�]m�}��^�W�ƽ
�2�����X���6)�1yi*º��nC33����/����
+endstream
+endobj
+1506 0 obj <<
+/Type /Page
+/Contents 1507 0 R
+/Resources 1505 0 R
+/MediaBox [0 0 612 792]
+/Parent 1509 0 R
+/Annots [ 1502 0 R ]
+>> endobj
+1502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.855 554.452 485.075 565.3]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.3) >>
+>> endobj
+1508 0 obj <<
+/D [1506 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1505 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1513 0 obj <<
+/Length 2983      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W��V8��
jw^[J���I$�
�
`�P	 -��o�<@ �(�byk�r�`f8��ϯ����}��˓�B�R�j�g����D�
O�lv��}H$=�sKS��o����\X��y}*x��tΒ
?�����q ���ܶE�9���Ǔ�˓?N�3�(b��-�'~��%��8�D�vv���gR��è�]��rBL�c$U�w\�ft�(b�=�U�d#+�-��bs�m�p��,p�A_�۞
�l΁-�q��y��Υ�I�<M6��&�u^W��/U
!\�p�&��u��u���,�,*wL[We\
+t>�ؓ�:����׫�_�}�k�W�ДH� �l�SΓl�~\���}MU~F2yM�U�ꇏ�K�����k�←+�e����'uxTQ���6~*\�?l�|���*�����U
Oț�/�4 ;U��@����u8�:/j?��Wٶl�jh �k|>U:��mސӹ۹<[�>�N
'ޮ�`�~2� &f�y��7L��,)t��A[ij�}���ց��ʄ��Р+�(�K�����
��L
 ����u��1	�#p�ڬ(�s:�'x�J�E�Y���,s
B8�BŸP&8����"�s�u6;���i��"k�N`0�6a������K֖�}ߍ(�y���ֱ���	רe�?�J���Ŀ�c6C6$��sfI�Ȕ�e,�!�3�� ���0�5M6UF�mߡU��Me�7�k�1��֛��Y����3
�l�
Q6�(n����u�4�U�$��Iu��{Y����NʡE�` |8�U�ȋ�,��B��9w����jpCG����*����
uA�̯�����#� [...]
+V���	we���}�0d�n�$o�x�E�FGv�u��.X����Q�
�� @��g�|JfTE�w��sz�y��� ��"<�����w��,E�*��<)���Ѓ�>
�
��%
�Ϳ�m��[�8�dU/1��Sœ G���i5$BP����[���R���ۮ ��q����0�QRy���Eޞ��yQ��21����u5u �fu��;��?��CSI����Fu��<��G
��)8j�\�ږK����xqg����2Y7m8��9�C��#���:�O9�O@��O�*���d�3:�a�-�68�{
��!Ɛ{P�LAV
B�F��vPi:��0����C
���Xz�)1� 7�jﱆ!�L�9|��� @͏� w�q� a7M�۾B���ѵ5#��A
�+@���?	�F-�پ ��Z�(���Ma.�ާn
$�tx�u����f��>��F��^J��Z����.�t�O�1I��7��.$N�6��a���l�;@�sQ�cbCbm��W���
.n�r��b�
�[���8
J
A+f9��?
+z*��}�_�����}j��͵<��]�LJeQC�pp`׭�;�&��~�-x飸��Խ@1�{���8�(K2���K	i�k	��e}���F3�ã
i�M���$�&���	Ӑ�9�Q
�79��̵�Ć�<���52��\K�v��@����^���xg����j�x���U
��Dzrt
��DE�9�)�QT�1Ի�r at z��F�"��7oώ,�j�z�cƦ̠�4�
߯D�:=�
+��e������B��v����_���lQ�
���$j [��06��VD�l_������]I{�*0j�0
+@��ߍ����n, �Y@����W��..����ܩ����]{$�� ��0�C`l����ն,�b��
���ef�>����أJ��d�'����Q
�
��1��Ґ�Dz���(� 鋾n��"�4��T�eJ�~�-��@�
oR�^���JݩX��j�B.�v��K?)��t/+�����S���^�N�3��&F�����LA�5��
|�1���v	i��
ú�״PV���
bZ�G��gs����d�y�hϏ�y0
�}@��
ˢ�iH�&�y[����
�
+������c
���E~ӆ��0z�
�
�L����S���^���i&������G��K�
�ђ!�l0�8c��̤b-�7�[ƜC<�K�.ţ�MhOŦ�,
+'���;�<WW���Γ��^�JS�QOiQmkP������Or�i�ֻ��#8��p
��E�6��@�z�����4Z?�	�o�v�
�0��ص�r�
?ܽq��bsz߶1��
f�g�2W�Cx��@�[��n2n/ެ��u���ni��ګ�l1P
p��V�aǴ	��"��^��fJ���Sj-����p���㪮+3��ȇ:2����͡��ht�{Z2\�i~��
�ي
j��!�o�?��� � ��Sq�5�3��ۚ�$qoFP,��#�ų
+OAa�aÛ��3�`��x�l�pyN,�d��'ˬ�
l�T����CR���!���֯%������`)�ߤ�Sϗ�ƿ���6�"
/g���{����ݍ�ۏA��,�
+�f��ی1\��o�F�:����L[�F�g��m��c�Q�����D��~��u
�k�}�i6�|5���)~��(�Œ~�����ԛg���d�{��C ��t&�-��c�M���P䃏	�1)��ci���R����������2�uk7P��X?*�V-Յ��՗��]�_����Ж=

�]A
QR����M?���;Fҡ�Xο��Ǎ9G���Y"8%�(s���D��q��#mI����}�=���@�1�^
'�
�]`����+L�����ۡn�v(�0�>�
+7 �v
�B�����#�
��>�o�
}�
b+����N�Y#z����e��Z�y���+?�Ž
���ć��n��3UOv&����3�]��G@�w��J�f�-f��w���}ֻ���;G�����Y�Nڀ ���^�^5��_�9�
+endstream
+endobj
+1512 0 obj <<
+/Type /Page
+/Contents 1513 0 R
+/Resources 1511 0 R
+/MediaBox [0 0 612 792]
+/Parent 1509 0 R
+/Annots [ 1503 0 R 1504 0 R 1510 0 R ]
+>> endobj
+1503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.074 643.969 162.796 654.818]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.2) >>
+>> endobj
+1504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.468 632.014 462.191 642.862]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.393 150.464 488.864 162.419]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.2) >>
+>> endobj
+1514 0 obj <<
+/D [1512 0 R /XYZ 86.4 726.045 null]
+>> endobj
+166 0 obj <<
+/D [1512 0 R /XYZ 86.4 701.138 null]
+>> endobj
+170 0 obj <<
+/D [1512 0 R /XYZ 86.4 579.517 null]
+>> endobj
+1515 0 obj <<
+/D [1512 0 R /XYZ 86.4 501.786 null]
+>> endobj
+1516 0 obj <<
+/D [1512 0 R /XYZ 86.4 244.729 null]
+>> endobj
+1511 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F48 982 0 R /F11 787 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1519 0 obj <<
+/Length 3359      
+/Filter /FlateDecode
+>>
+stream
+xڽ��s�6���W�Q�9!����C�9�N�VN��-�6������	R�A��C&�E_�gw�@z���7�x�����

f���ga�،���7�_�
��%
��K���u�e�%��Y���q���ȫŒD
�
/~������՟W��f�k�G!
f��կ�{�
|���C4
+g_��3F#D�S6[]�t�I���7�CE5<yt�q/h��/@��I)���{�d��?��8�g�4�-�|_W폏E)俹��Y03�zo�N7
B�q�^y�,��i�
+��6��4MQ�<�/5�j�5<�
�j
�M����m�Ҷ՞�܈ 
+FA~d�K8�!�۠
b
�ڀ�1�|_61t�(D$d�C
	ہ(��) ��
:)���0v"�z
� �H��"
+�2\�6��m2�X�Bh܅�Rz,�:y������߈��Y��02�
p�D�� #�1	Fg�n���߮Z��"��y�SUd/�ۤ4��Z�fl
<$�f�G�2[���h� E��\�p^�=���$ƺ��F�R����7�,1�8�,��*����*�?��M����A�}
��W��`p����"�#���7��(��ѣ�g�d�������9R�摤
�[A7�y���=�����
�Art����!����a?�[�tL1Wk�o�:6�
׻
���R�����st�R���/wwlֽ�
+��6N��}��J����6��f���?u�����ö����!G�o
����W���A��rc�=�l=n�w� ۺ�!l���
�09�:�%�?/
[�����-'�U�
�
"�y|T���Ҩ�K8
�a���|�ĈERSa�����uv�
��v�
��L��{�A��y��r�=̇���
+!hM�-O봻K	�����m���Ԣgx���(4	��Ӎ�#T�O�:��u�1���z�RQ��D at 9����T?@.�DV/�=|��C�K�f��t�1�J�`�@y\���0��c^�>�x	A
s��GPq��i���\���>��4���$Wc�$Y�m�f]�Q�
.0n,zPGӺ�
+:�OM�#�}@`��>�>�=�ENB
S���n���u7�j9��l_&���8�z��>�6��D{wˁz��-�sWe`�mں�xfĔ� �a�	� �y��I,g�)L��vM�,�r��U���X#��`;�Z[U�γ��r�:
��,�l�|]4s����OI�N^�#ek�	/�
���v
�#
���s��3D���f���,��T���j���,؃Wepw�.���w�v�;(�ە��7nQ�b� ?'ڬ~6�k������Ch�Y^���"y4ПnǞ������u� >\���O�]�F�j��A�ʥ�8{�1���y\V���R���â���4뙫���]j�=�;��W5ܼ�[}0 ��w����Nb��U,T�2=�)�E@۵�@��o��mR��2�E��)�@��'I
�8]�%� �z=|U�\�1,Ϻ�g�vm^���v���y�
�~u�'��,mA�y��܁f�X�/��hUd{�6�H�z�G�ʐЫZ��Mwtzܪ�
���
��
1��-v�iw."-��tF�R����X�ˢ���ɀt�(=RUV��碨�C�n���*��m(�gX뮇`=�X�$�=q<�v`�C�.
9qn!���ᅧ ��
~a���S���j��c�y
�_�� ǀz��zԪ��&�ֽj)��O:�B#aF��
�!1/��(�$ҝ
J�I�iwx
��&�
���l�o�D������ᘡ`��f7��x��@	
1����
�����t��������]�
���>��(��w��srp�B�b1�����t�)��U�
���d���'�h0�R��q�����ؽ�>G,�9��]�.
�8u�H��뤭��
+�����
+W��>3��끫
���]����ث��G>� �C�.d~�v�H�zʊXr�Ua�<�^=eE�i�ھ�!eQY99j��
5��iqO�஼7�gy�(^
�j���|<B�u��^�nZ��|�(������w��3����
+�� �}�Ce���g�`�G��|̾�j]1qk?���y��t鑪�Z�w c%d<~4��
����:.�T��;D�A	/U�PoQr	�!
�V�]!b��gգ���ߋ����K�a$Wu�G��%#e�ɫ»�%����%���t���U���ќ��ȃdNQ�e��Q����,���0����>�y����E�M\,	�#���
m��A[ ӣB��n�>
�׆G�T�
d�L;8�X�$�
��\�g�'����h�Ur<��O(^|Dc� mx�� :��
+���L�h8�J�Gf����]Y„.&[��{2M�[jYB*��s�&=NUU�SȻ�s�az��#O�>�<9��ŷ ?`��
3z��v��N�5f�Rc�������\h-R;N�$�$[1�v�1CG<�7��..�fC0׺]���)�Ɖ��*OL[�@ju^
+��6�CIUa^���u�N�.� C�۸.ӿ�g���ߝ����L�筁�8}z��B��������t
�t�pU	���W3�<MD5�O9��{����	���@�z~ �Ð���1��^��Q��%�ݗO���V�=A�A
z��@�`ob}�q����R�� �!�
��oOn��
��
�Z�v��M����N�O�T�rs��vپ��<}ܰ�;R�6�T9"��;G �N���5v�MU"N��������?DRP�9��|m7_Z��6��/ͪк�N$_.'G��SV�)�A�x���%1N�
����*1U!�}�r���I�r����Ms �CI�;=,� ��&{8�doO���>N����[��aWݥ&��-�W%x�3����:D�G�'�
PD���球˷Y��d�����c���B����g�
+VX�Jm�M;��Чۮ��j�ȰQc�鐹�Ɯ<k�}��o�XQ�Tu\vo1��u�1�P�G|�z��m9|i���Z��#׻�:v�}�
?w�<�:���0%
�.���������x�m�)�ӏO�~,��r���>oӍ�EY?O�=i��}�8޻hn�
S�@_;���v��vA�k�^�]�̣w.�@�s}\���f�N�w+U�'��� K��Ǖ��lu
}�y�
g縣s�}/�|��b�En,��]�M@�W�8���q�����}�����5�&zS�r��2�M��;�*���������v��*�Ι�Ne7
��R�)�c#��0���]����Ɋ��=�F�1���LU��g�0�
Q��{�=;�b,�7��
�O�� �
��}Y(x�d�^�(>��Z��[\�)�A3>
+endstream
+endobj
+1518 0 obj <<
+/Type /Page
+/Contents 1519 0 R
+/Resources 1517 0 R
+/MediaBox [0 0 612 792]
+/Parent 1509 0 R
+>> endobj
+1520 0 obj <<
+/D [1518 0 R /XYZ 86.4 726.045 null]
+>> endobj
+957 0 obj <<
+/D [1518 0 R /XYZ 208.225 663.661 null]
+>> endobj
+1517 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F11 787 0 R /F7 1094 0 R /F14 1050 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1523 0 obj <<
+/Length 2766      
+/Filter /FlateDecode
+>>
+stream
+x��[I����ϯ�L�m�ި�ERRrY���"� �
�\F�%�>_/ �䈔�I�B�@w�~�{����$�����7W?���IB����vb��8��,&o"��3f�F��|�n:�GϟN9�
Og4��wn7���߯셈�7�]�o���o~�zvs����h<�I�P�������d�'?Mb�3��ƭ&�'��j9����*���DH6��IR/�Z@�2�P�ǖ�hFb��Np�4��%TB	�ʋ�����Y��ȶO�2�ˁ*�
N�#e4I�y���MW�JKH4�<<I�K��jN�oE	gO���e
+
�LF?���~�e�/$��AJ�#��(+�PnjN��`�l���*[=���a'}�
��KP眓�$m�
�:�kG�͉3&Q�9�0
+%�̧Y1����Us'of�*��ep6I���z^��l�2�����F�ވVD�*�.��G�<�-�"+<�ғe^����_�]nܜ�
n$8�H
�Dpߤ%(@���%XJ�RK�:�3���Y�^x�ҲL����*	䥝<�q8��\��.! B�*̓fh3�JA����)cQZ
�
+6��`̛�gO�-kҶ��B��L��鏷�v�lm'�Ek�I
>�T	
D��ʢJ�Z	xL�k�G\��ڠ�1Flj�56���K�q��Q/k�	�܋��=T��u_�:Y~���C5�aqFE5���ɘ{Q�Ԫ�1��X�Y�pʱ�"F��{
Pr�?���E�bxd���"�Ԭ�E����v��J��]�
�2�C�ƨ�]q�ic'�}F
�S��a巹
L�0�yJ�C�Fu�k�\���)aB��
/��:p��iC���
t8�H#��!�.�E(c�_?y���z�&�$��{��6.��K�7����û4��-���,[���n>ϊ�v�\7.�r�w������Bl�2��R
	�}��� QÉ��E���T<i}��矏�
��Mߪv���4�j�@�L.�D�Czjq�TǕ��U�"�s�>C֫ꉕ�:�A�d��v#�`��^nʬ�F*�����ҩ��:��0���L���s3�!J�
+�ά�!��`)�{ɑJ��}f.B�H��6�٢f�}�&��n9����e^��J�SZ��w�Їi��
$��j1/�KҐ$�F�F�3!d�
t���YPI:$r��G�#v���ҫ2���@���o��aS�W<51Q0qi�[�TP,�����x��̦tS�B�h�e
�O�4���{g���t�����hx�	���|�^���p��
�|R�=�N�;{�C��X�ԍ�s�$��
+%�{T}����p��+6y��l~���J��Rb���^RNt��� JQ'ʕƮ([y��zU�N����t�罝���,zd��e`uX�K�y푕�����N}W�ϥ�Z� 0%t�r�$F�,��$`�,a� �,��T͋��/�ŀ;Ih�	���@
/?]〒@�!�hq@ɋ�0��
Q�:�Z�R���C��a�'��O��qp�"�q���Ow���´�������K}ڱ�ʊ(8˽s��
�H��ZEz��!��hͩ
��ws�e^��}���w��]�,����X�&TaA!��%�g�T�O�*P�)}
+T!�ߡ
+�?(��w�3��h1��ރ��}W^��]���IÞÔ���W���UE�H�
�*P6����
FI�
{8{�'��(X��/�RۥD�N�
��L����/�����=EVZ1^d�,+,e����%���E�����
~�A��� L��A��b�+���
�=oL�Um
 pq��v	
�R��@4�z��.@���ї�^�<�ļj������}ei�u���4ڡ!`4M����wDj�����B��u�?�R���2ݾ�!��
+���
+L at v�f�ͮ���싿��+'2Ay��nS���G#fڟ��ǷD�V��­�]V�slϋ<̖��٧y�-�%���l?�5�E�����NWoCNt?vQq{����!��Z��h�Ծ������I\���^ԥ����]��\q��j�?�ќSG
+���5#C����c�h�N�-A�]4Zc:���=lBs�޴�2O��M��j!{�o����ݧE�@��,1D��2!�5�a|�qB�n˗c�E<E�A��r��F�U
�9JLB���
0�DЖ�8B��՗E*)
�	��
""so0��Y�I"h��L�;9r�m�~=
'�"9z�'=��i)�$
#�@@��(�[#G����'�~�����V����ڛ��!Z�YB��i{�[;�shn�<8����@�����<G��/�����
Bw��o�}
+#7�2�c<�W��U��ot܂1
�����R��������1.�w�S�ܬC�l����/����+W7����9��=���jy��@��U��N|%p�fn����n������I����2���;z4q��ol������<T�D��?0a;K8q�O�,_�=��;����>��ԍ��Q.��������* hX��V��5�e�ym��7���;�v��EKDf���Z�������AyPzP ;
+3�
/�"}�̊��
�
,5�i󝳱
��|�(M^:�c>�,ڬP�-��E-���R[�'��� f�9���1��Y����K[����Iwx�l).�WcOc�
�}�G�i`�
)q�?4Y�7|w���Kat�F~Ɂ�Ʃ��^e�^R}�8�!G�f�ȱ�ɪ��_�4�����
+����k�$'�2�t���
:�U���C��
+endstream
+endobj
+1522 0 obj <<
+/Type /Page
+/Contents 1523 0 R
+/Resources 1521 0 R
+/MediaBox [0 0 612 792]
+/Parent 1509 0 R
+>> endobj
+1524 0 obj <<
+/D [1522 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1525 0 obj <<
+/D [1522 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1526 0 obj <<
+/D [1522 0 R /XYZ 86.4 493.46 null]
+>> endobj
+1527 0 obj <<
+/D [1522 0 R /XYZ 86.4 299.675 null]
+>> endobj
+1528 0 obj <<
+/D [1522 0 R /XYZ 86.4 113.576 null]
+>> endobj
+1521 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F49 983 0 R /F14 1050 0 R /F11 787 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1531 0 obj <<
+/Length 2545      
+/Filter /FlateDecode
+>>
+stream
+x��Z[��6~�_�G{1fy�l��4Yl���}H��2��jmk֒����=)Z�d��QӢȋ��9<���}�p�.��?/�����9��AFR�\�&Z"�(j�d$�^&�g
���i6{Uf��M�^�d��]g���~{S�Ŷ�/��\�8��r��ų��^P�҈Hs��l.^���%��>���|���$�D�h�\]���a��p�n
�p�@l"
ADI7�U��G���+
#��z��,�}�#�!�x��.K���]枋D��-���������t���iq������o�*O��;���?P��-�T��Ŵ���]�-�|����8�{iY���
BZ��
FU3���-�HI��DZ�Uj���#p�ۑ�
�Ih� �}�/�¨T1�1mt�K>�9�0�g��6ݯ+w5xE3	�(G\(8��J���U��6�)��_/Ƴ�׺;�F7��F�ݮ�w�qD9m����ڸ9U��9����
5��(�V}�D ��8̬�t�+��*P�}�iA
T��w���~���<�\"m�X�2�&
2v C�BD�Z�4�)�z��鳫��,�79L[qg+��
kw+���U��a�FͲl�N���MV������=Yf����
2�6�8�A&i>��@���)}��ŀR͐�d�P�%3�җ�~�adj����sӏj�W&D�2�[A�A̫~�TPP�b+6�f �
�$������U�.�U� �!
Ë��:���А���E���>�/�*+���I�g��X�a��x9P�	�
��^
+:<��U�I��Z�+�p��=)m��;��L�ٲX�m*�3Ww`t<
+-
]4T���GF�a���VH�p�?�Ce��h�f?dDT��Mm���W.�HB�o=��V=#Â��M��� p �aT��z��>��ʻ��/��F������N��l�4����7~
�i5��k4���: ��Dt�x�C�:��`ʇl�b���0&C���3`~�T�
`��b�p

+X+�zt`����97R�A&��H�0&P�%�l]@�т�
�L�E��П���E��ʦ�@����W޵����w����R
!�΄��\��eI Ί������E
�0l��(@���V���Q}GAL}�ҍg�I?Z���H3]��$&n
�e��.��N�9"�5�k�B;�o�£Sj��$<\z�z����ם�
���|c{�~��o놐uu�J}u �%8�Sc1 ==�o �x�S�ٽ�o2ש�yR�
�B��p
+Pd�fEa
!�c0
+�]�ED������[��i�$
a
��)�
�s��.<�;��߮�Z����8�&8��1ڶ��Ǒxk�ruN��r��nD�Bc_��
<	;��8��X���<��Z$����,�2�ʒS|%�K1��@5�0�)�z&)}��B�$l&
)�FP���:6�w ��"K��l/
d��g��p��UMa 
+&�+�s=
a(m",R���W�'��3�x0;��"
�7�^�5&�J]5��m��
�(���5��ra��Y�k�+7 ��H��ק��(s�o�m���&�QX��g�P�T�;4ն�^ӳ��􎯀����u�ފbؓu���G?��*�w�����n�1K��zhy�?{�
"��H�Q�@�!�LC
+�	�$�.X�0\U��u�Ɇ�f�l�]��u�\p���t�
p���N6�:+�U3���ufdāNV%
�>)Թ(�N��\�q:	��*������I���q>i�U���~���e���vi��ECp�\x�s�7Ũ��eK��pq��wiY��7a����}X�5�Yu
+Fk-��f�P<���b[w;ϊ2��G����2���ڱ������餷��?��J
�Z�
��
,�:���R����>�H�R���Ξ��V�سU�_/]r�T�	��^vh�T"�@_��g!�"�a:E!��f�=b*"�T\�8MSqG��J=~�=�	�h��#+�\{Ľ\8~��
�����
+�B�њ����P�DX��,f
ҿ�.۟(��8LT躝�.��~d�`:_@�m�.��h���n��]�
�H�R=K%2$�5�r�j��Epk����h�{�W(���v��2e%�S��u�N_��	{A�Cw���9�ܴy��a�������~6|��3��Y���K��H��4
$
`�sq����2|	IB��qb�D��g�a)��vi�`�ٿ{��]ge�<���@�Ĵ�(��at|a�%
1��b�����i7z۾8J�`#E� �~�.#i�
m[}�~�f�2tʠI�)ݘq���9�DL��A1�xd�׭�h��^����_��܍��{�+�%(�`�|Uj��[�~��67
s���|��W�X
-1~nM�K�	:.43�L�
�~,�vi8%�>�q���3��a�ϐکY�[[;x���|��|�e�;:X��F��ǀQ	8�VuS�c���]?�]� �V�B'!� 	��/ʭ���nI���Qf=�JO{�*?/�~�

�n������l�2�+��WhQ�����m�
+endstream
+endobj
+1530 0 obj <<
+/Type /Page
+/Contents 1531 0 R
+/Resources 1529 0 R
+/MediaBox [0 0 612 792]
+/Parent 1509 0 R
+>> endobj
+1532 0 obj <<
+/D [1530 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1533 0 obj <<
+/D [1530 0 R /XYZ 86.4 583.478 null]
+>> endobj
+1534 0 obj <<
+/D [1530 0 R /XYZ 86.4 401.57 null]
+>> endobj
+1535 0 obj <<
+/D [1530 0 R /XYZ 86.4 204.286 null]
+>> endobj
+1529 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F16 729 0 R /F14 1050 0 R /F7 1094 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1540 0 obj <<
+/Length 2295      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�n�����&�*�,o9e��&���D�j!@@;��ۃ�AP�%�Չ 0��������v�/�}�����_S��H
"��B	��h$(^ln=Ɩ+�|���<Jn�+����Ւ�|�����٥�{�ӏ�y�4�Q�,��pv�9��
�R�+%
)&�������x���GT���r���Q�\ŋ���|gt_��#�ɔ
�1�
+ג:��
��JNɀ��B8e�jGN#	"��Kac����:,���O�8J�a�Á�D\����
+�$�J�
+��	��Brą��\q\_��
� ɄÓr�. W8����c,?�܏n�aH(�M�� )&��"LU��p_(��̤��}x��5�>�m�f`���\[Ȋ�HYa�|椼
+�m=�I^�����X`osv�c��}���,�X#�*r���k�%�	�^�
J�p�
����%^Q ^F�KX���O�%��
ܺ�of�A�s
J�a�YyZ�e`�	Cc��Hsn�����8	�)�^P�O�Iho�E����Z����UV�yv�����;��{�)e,���`�|JJa!���q�R	D|$$�
4y?�)Y���4��)����S�b��m�m��
��S�"�OM:��p��K��&vKB�`$�E�_�w�싕{
��ޭ��_4U$`���
$���
‰�1���EI1���<w����Q���8�t���(�Q.h�a���Q.k�<�ʙ�矍���ބZ�>C��A�C��RŻ�j��
���cuRTT
|�t��N̻��CX����%7>��~��o��Y�
z��
��_�i�dc�P{�M��$61��U��L�P��ɩ`�Gy�d���t�`����A?\��~�V�#�U-m}uqq�^O��#ZgB�miٿ���
'�ƕ�H�0�_��v��nǮ�a1
|p_A���~:P
�P@�
�QL�������"f͡F'AuW����o��G��������¤��q�iD��'zA8u���q=(�饆�X*a5t�1����*B���I��~�"
�����}Z�y�RQ!U��7�.��E�Vu* E�
')1M8��������g!

�[����"M>��x�n K�`��6����1M7!-g�u$�
0ҧԫ��=�l��B�'
��lw������+����M0
AkZ�x�t�G$a�i��XT�;4����A��͂f�2_4��z*���6-��]h~��`�-��ښ
�
8���Y��8%��?%a0D`2
%a���
%��� T�JB�jQHU&��Y�Y\�	>-͐�f���8�����c�~���6L�����Q��p�v:�n���("D
�+r��p�0`ㅯ<_�V�Y��@4�_��@��@��W�����9�:��Q��|e/*�������@�<@X( �@;}�		h�BX(���
�b�6S�E����nE?��?�		�
�jN�ҍ��c Wr���/
iI�|k-���H�O�Y
�����e�2�9B!��������.,L��	��9�d>�v�[���������D4� �%+��ʌ�a^|[5!w��.x��pt�F�lsv����-
�����
+���E�ףר� P��2���ADB���LF�!�/4�4ȁjJ�� �)��� .�<�CG@�bt���"�m��*�n�	�Mr�7�E}��}�
��<��	G*c,�&�1�aH�i�C�6^�d���
+͔�Y*�"��M�c~�d
�(e��8ǙC��8
���qf��8
/�\
g�E�
OH1�d�dH"����z<��J����?^m&2
fL� �=���F��!j��ե{��P�x����*u��n(C"�����
5��|3�
����#`��?��=�O������ek��
m:�ar���c���Z�Ԏqk��M�����
��y|; ����lA?
j׏��4�Ɛ�X�Yu+
+)5ѐ�P�v��T���T��
�Ν1Ai̱�@���ם��g��wYu/YzG�P$nF��h�
Py��B 1�����$-�E�s��xcby��=�*�9��ݵyD[���9�*~]����1Gަ�
G���A��Ҭ�F_��h�
���T 	�ƂCc'0F�_H�
+ЉSn>q�k�s"���i�cbx��q$���tt�z1䴋3�}6i{gϯ!��>�@��
���0L{~��6�.�M{�]���0�)1�4U�������
���2����a?�
�]���
J�J�%AV%��JB18j�,S���'���>/�>���z]�@
+endstream
+endobj
+1539 0 obj <<
+/Type /Page
+/Contents 1540 0 R
+/Resources 1538 0 R
+/MediaBox [0 0 612 792]
+/Parent 1509 0 R
+/Annots [ 1536 0 R 1537 0 R ]
+>> endobj
+1536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.233 288.898 271.207 300.853]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+1537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [298.411 288.898 313.133 300.853]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.8) >>
+>> endobj
+1541 0 obj <<
+/D [1539 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1542 0 obj <<
+/D [1539 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1543 0 obj <<
+/D [1539 0 R /XYZ 86.4 525.594 null]
+>> endobj
+1544 0 obj <<
+/D [1539 0 R /XYZ 86.4 348.005 null]
+>> endobj
+1545 0 obj <<
+/D [1539 0 R /XYZ 86.4 168.369 null]
+>> endobj
+1538 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1550 0 obj <<
+/Length 2860      
+/Filter /FlateDecode
+>>
+stream
+x��[�r7}�W��
+a܁�[��v6J9��%oՖ�15��v�Qf�v���
`�iJbT��_47�h4�O@tv=���������B��h�g����D�
O�lvy5{7�D�.��uV-�iQ�.�<�Xd��j�^6y��O<��Υ:�p����˓_N��3�v���z��=y��ή�ˏ3JDbg�]�ۙ	�pW�.N�uB��t���u�4���f�����ٶLKB�t-�Q���	�)�
a���^�}���Ņ������Ϥ"`j�_ޠ����wh���'9�t��<-6��MZ����f�ek�Xo�ˬ�W����[�YC&�G:/`���ق)�Yr���&L��(�(����P+���(B�״H�B_�}�j�Ԁc&T
��N��H��m�t{\&D8я
W
ę�(n�[��h�	���z݁��y��O��d�����
HJ���&��$�m3��ق+���T�H+BGe����B���U�J7E�����壪2��'U���g�.^F�E������ac
�W1!�pc۟כ��
+�XZ\oKR�(!ۦ�taIv�r��mL]��0��C�J�
+r�-���;x4b�ܸ5��Wbb��ʈ�rN:1��/@@Y�^oO!�lNټƨ�S�}��V�B��yOmn�rs}�
X��n�Z.��<��d����2?Q€�'���+��)Cx�~�-�Ux�w&	�s�}��|��/�۰֙_��:q�5�+9���Y�hn�}��zS��r��M^�7.b�{��缉DC*�"�O
�x���}#��I=2��׭�d$�H���U^/O���
+/�u���D@�aI��>;GCuY|Z�90�f4'��
��_������n�3g4|����_�+���T�Kk�����
&���(��D�Ξ���QR�{�[��߷�����7��H��F(Cd�-���.�T�,���;�o`
+�P��:��M�
+�߅(����9�
�˹�����j(7 ��	���Zo2��)���>f�f�KM���$�)��k/��֜P�wf7�c
t���1��}����%'����y�)NV��y��sD�{��ɻ�*�q
h��e���"�L�<[���v�>`��&9����.-#J�aQ_d���}p���`9u鿭�YT뭴'�(�t\���2��u�e�gW�^@��!o�v$Y�%����Ѐ�)z��e[=KT���;P"��Sbldz�zs۩3��A�u��˄ra� �ؕh�ĀLw�kJ��|�z0�2�J�2���m\HJ��qrtq7�}e!��
ֻ��W
�r>O�X N�v0ܲ
+@�cQ:�K����E����*�Aۮ���t��r�#�� \�p
�P*<&tP��m슱���x�y�z^7i�� rfX{Bl�����Y���
�ѥP�E�$c�:�����;xO}O�+��S�c����Ѩ�iU�ȁ ��PM^d��Кp�n
.�Vܶƒ$�}E_3���%�l���$�
K*��4�0
+v�m���7Y����zl��}
�v�b-�%T�QڋUB\
��`�A���(���(��2j�DJ Et¶F
��?`����@Q;	�{I�-����[�%��6Iv0�(��q �t
��m	}Z���h٦�(�l��jHyD�O��(2I�<
�Ze�l�*��O�
+����b��}D
�Uh� �
�
՛;�z�`bj嬪�6���T��X��#���K��!�fU�JG��5�#m���J^���
�_�,ƈYK6!,PD+4�1nP$��@
�<
/��h
+�@J��*x�
+���`f��d�s�|	A1�p��>�o! <2�����r�(�]�� �i,�
E�#@���?ǁ�<�L�������症��Υ�
G���u�2I�D�ZH����2�黨! 4�c���n�E�����P�ElƆ
�y���Q�PfNr$#���U�Zp
�X[a?�"RyD�e`���K"]ŏҥ��lX$�d����r��~�C�Q�=���r?
+^N���]&�5M�
>�~a�!�W6ZZY��Ԛy���]g���ў
�%���8g���oFL�	L��7
�o'�e����/m��a\rB5/�]�
���i
�
XJ?
��!(&��}�+��7����O(���
������6T{h ���!cA<{T
�0X
�M�h ��LKq���<B�P�u�vZ��[�	�3������ZX
��r^O���[�|?��'q"�J�ᅁ��6VM
�Rpm	�ځ\G^�B�Ҁ��$41:���kn-��Aq�n�E�V��
�l�I�;�m���3�vǀk�z�H���Ñ~΋",�zgk�6�|
2Tjq ��#
��ʡ��)W�� s_�=�z��iX�@��
x�{Jid�#�n�9��9�|j'-�D�݂���9�7���F�o
�D
�ק	����V�r��z�E��ž�ѽD#�aC�rx�R�
�����G�;!�
&�{OP�Qy��'��9���+n�{O���FB���������#�9� ���O�x���;`�iU��
!��I�{x��"�1<
����:�aG�z�H���^��Ŧe���Y��@_����fm�[�uZL�}�7�e��� �n�-[/ݓ?��oSY��E�d/��9�"�w�-��
�����wn��Y��E,3��d�{�xq]�}���x�E�

~p(Ɵ�5��tkѝ��1[���i��<1�]��:���"xdq�*���
+9
��(����D�PU8k�nx���]�L�&Dju��A� ģ@�����q���bb�2�P��J!�"���:B�Ǔ��'dwF�=4X)�l�ۄ�
2�(�
�����Z
+endstream
+endobj
+1549 0 obj <<
+/Type /Page
+/Contents 1550 0 R
+/Resources 1548 0 R
+/MediaBox [0 0 612 792]
+/Parent 1554 0 R
+/Annots [ 1546 0 R 1547 0 R ]
+>> endobj
+1546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [294.149 583.647 301.123 592.06]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BCP:96) >>
+>> endobj
+1547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [248.52 367.093 270.991 379.048]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+1551 0 obj <<
+/D [1549 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1552 0 obj <<
+/D [1549 0 R /XYZ 86.4 557.867 null]
+>> endobj
+1553 0 obj <<
+/D [1549 0 R /XYZ 86.4 343.804 null]
+>> endobj
+1548 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F49 983 0 R /F11 787 0 R /F16 729 0 R /F14 1050 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1559 0 obj <<
+/Length 3103      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s�6~���#�S#����>�I��L�٭�}I;;�D;ܕ%W�4��� �E+�����I$ �
��'>�����ξ�:{�����V����$�LO�,�Ubr5��˴=��9/D�v]/n�/T���^�+�=?��e�Y���?�N:�\η�z�8����٫��_���
bX��dzw��g>�a���3U�_����V�x�O.��q�lj��`��H43�1	�����j���]��Y qV���&P9�UI_/���j���{b����zq��_ݜ�l��nj��r�&
�}��h�
Q0�T ��}ֈ>�R0��C����K��3�vC��ZO��A����<[T�l

K���4��?�Y����|T��<
g����Ւ��Xߕ�׼�z�>�{]N��u��tU�,�
��`�hHC�˜@��}�p�y��O��˝i�l����
p#&�zGn����M0W�f����I�'J0�V�6k�Y@ʍ�Dvw.]�]o��5
�eUxYބ�
���l*����5t׶D}������+0��b��\1۱��ݮIC�iZF"�����C��7+����/�N.�%5;W�^���������
oI����(c|�U7�v�	+�
��V��02��BU�j1���/�妮$��Հ����}@ǫux���ᑈ!�/{�ZhD�o�$v�gW�p0%�L�
O뛇0R���
	uEI�0��թ}�2g\��=�w9�'RrV�V����`Aq��I8�b�PϼxA����Ր�c��T��j_V�1�.
+�\_�����L��hg��t�в�r�&�����Ѡ��e��C�+3�����������J̈́�c�O1��6�������d9��J�BeԉrS�Apl]�2��X%=7 ��6z�
�)��]s�^���<+���F�{T�<�h��h齍p�����r
��
+���ͪ\=���f��n���05�YU��pn,}O��@W���]x�aCL<f��j�w�"�56х�f["��=����j��ѱ�޻'�;FNkz
z
� ~y��Jl7��홷��59G��_����ѩ���oW�:�������9�\���#&&ϙ4�):,9̡�;q�FUX���]�i`���xY�7o�Lt�r�Z at .k��޾4`ɊB��/��[��� EN1)M眆]cs����<����
L�,�#{`�d�ڃ��
���)��ݨN��d��� bW��|�$��?����V��X������7���,Fu�u3/a_F���g@��ֳr��sd��R:_�����P.RN�Q�)��z��$�J	�s��
d���j=]��m�|;y?aEt	��ۂ���\�-8�m
� 2D�4�&*�&��
+�2�H�E�K�B�f'+�+�ȗ��l�Rq\D�‹�|u���B0Y'�ҭA�VC0z�
+zR�G����zw�(͈� '�N��W [...]
G��p��\���C�Lw�'ߗ��c��)^�z���|
Mn]m��,7A
ͬ8R^
+.Ҩ��K� Mt�߿�~(�)�>��u��9�oތ\
�P�C�>g��AE�yJh�)�@6��4�"����:�C.���>CZC�[cl$4м�iN}HǨv(P<$��Q%�q�J�����ǛA-�\3
~Np���{���G�
e�s��;j�H7Hwݠ�w�T�C!��J\���M����W1R�
��(��y�[��D���P�rR���rS�w���.Ͼ!��.�P���<k��

e{��:��c0~w�tr���H��
�	�$��}w3h�����‹@6]�i���YxF�5Ԑ�/.M�G����&�L�	�]7W�~7����˺�b�fI҆�����FyʻN���6Μ�2)�e���k�J�
�L����G&������^��o�E3\��fQ,�s_";e��
����Lu�C[���`��MN![���R��sj�����O��1jˌ��-����el�����d�� �HٶC��Z�
B���q�a�O��1��bJ���
n�
��ic�x�'/
�"��Exh�"Lwx��EDzЇ`��0��ԃ��캢�D�4ԫ\��$u�
Po�{
������b������x��H���,�#x�9��r�p�1
.�
.r�7
;�2�h~v!#
����(d�(ڵn��('��65|ݱn�W�� FN�

'�B�$!F#�]h&t�B=�B˓-��w�Ë���N�~���
cFEnÌR?7����e�
+�q���T�������2ޙw��. �=�H
������$2�V���D$�D�Q��2!��o� a�����>�k>ªh� �h:�|

 +�	G�)ݠH���;̶��g�@���F4�
��)k}37	2lT��³���q<P7��a�C�Ҭ�'t�A#a8<�#Z,Mθ4�Ҵ�i��E��4����<
+��a�)Y�� l$
%/b
,i����ԂYnOI�_J1�w�m$��}:
�����O�8jD������Q+��6�D��G��4�+�	'
jt}j�Z�9���ǡF*G�pB�FcA���&F0#��
U��
z��]f
*4X�
�/�
!닎�A2�p�E��G���dO��FTv��=?��"���E�8|����Q���}I!�	!�n�@.M-�t�i+��O�#���Z8�A�h+٨�(�t�C#�����"H�`""H	@Ip�|�$0%m�>A:��
��������.V
�\V}
+xT�� ��,��#G�m��
��<&0
�v�3X�ȑ�-
+O�
��i#;}�$�H?�
��XI58�E�B�u 9RZ�I���
��#G#��;�D��<8����^M��_J�
+endstream
+endobj
+1558 0 obj <<
+/Type /Page
+/Contents 1559 0 R
+/Resources 1557 0 R
+/MediaBox [0 0 612 792]
+/Parent 1554 0 R
+/Annots [ 1555 0 R 1556 0 R ]
+>> endobj
+1555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.804 370.334 408.276 381.182]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+1556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.574 55.742 403.045 66.59]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+1560 0 obj <<
+/D [1558 0 R /XYZ 86.4 726.045 null]
+>> endobj
+174 0 obj <<
+/D [1558 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1561 0 obj <<
+/D [1558 0 R /XYZ 86.4 569.765 null]
+>> endobj
+1562 0 obj <<
+/D [1558 0 R /XYZ 86.4 255.174 null]
+>> endobj
+1557 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F48 982 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1566 0 obj <<
+/Length 3429      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs���W̑J��ēD\98~�v�v*��r�])�CI�9��V��Ӎ�C�F�٪T*'� ��_7��V��o����;iV�Y#���v�V���H��ެ~ӗk��]���4)��5��"���}��yU6�ka��]�z������/8l�x��f�2�t{���j#oV!�6^=�yە��	h���\�Ǐi,g<2�1Y�$���0��%u����,m���"/�����*�_JduC���H
+����u���A�k��Q
+�}�]<:O�Z���0�����C
	M䈛�o.��ߊ��rҰ0��̤�,��-SZ�Vk���.���p�(d��;�E�iW"�����'|�RH�N�jd
��=�j
��hf2��Y���f�8!��
+T⁀I�
�)1���o��+<͇|����
*�
��>��7IZ����u��3��cP{{μ9d(O܏��pa��Hus�/�$���	�<\�1p�_
�9�l/���%4J����Z)	��7DqgiĖ-rlߴ4v����g{)��;���jrjVӫ��o��*�
`�w���Yޓ�H�
+�UəL��Ь�f5�F�7��
hW�H�	=R��~Fg��
�ު1#p^^��d�M�K�eVg~@��6�J�GK=�J�ĄS*
pB�/6�
�A�TE�'�˨���r���w�
T�^e]�i�}��k?�D6^N.v�J mp}	
��_�H�i~�H{$~kt���"�6K�
\T��x��`��zg��$=�2+z�~��
�ʞ��L

ww�]h^��8S�_ҋ�}�ɐvIl~�	V2c��:�����P1F�Z�"�2>-Fh�|��;)B�a�i�*�%�k��#C���*/qb
���cB=�%���pT)V�
f�Q� �q�
2PS]LFn��n�M�&

+�8���WDR{^ɓ��.���g =^�2
��
�tFǭ
�}�"��2o��&[z����I!����uUԓ�Y��Qg��y}��uR?��șଇ
�pu��Jk�ED�޷��
����H���t� o�����a�

ه,ݓ_�Wti����x�U��q�B�ؑQ����~û��A���Nm�q� ��N�KU�G(IJ
�GO(�l��:,Bô�+
E �>E�E ��B0F�G�a�������K�a  f)GEJ��l-���w�K��&i��
f-��,�(�L=�
��{W@�&q�
yBb�dm�= ^��ր����IFǖEw4�Rn�q??��ۈ�X��sF��p���$E�<'�=�W��1Yów���7�� ��"�B��+-�d���)�@����9D^�Z���

���/g���X
���
�>-�&k�:�u��v�3�	��%��GP����*,�Ә>\M1khӶ۽
;��K��anu�
ιJ
 �9Sw�O����O]`�>H�ws?�mæ�Y{%!F�e����یBJ3���-*7
+��Z)H2�Os���1։K��::�0��L��Ns��� Q9���8C��ds�����N��]ܚ�8Lܣ�D!H��< ��i����C!��c.a�ٳ0h8 ����S�?_Ļ��
��dh8e��›�i0>�i�TZ�j
+�F��-ԙ�������*����0�����s=�1
�&����u�"��K��)xw���<i��r�s
`�2�U
�WU驂m�*��0'�
��j��#��`��p�I��*ڇR�������_{uuDg!���^r� ��3$;7x�4�� �s�w(�v_�蚬=ni�������1��9�2�����÷?,�

�H�cSBV6���wo�
�P>T��ly�,�H{4�p����V�P���A90��.9}g_�
�C����B�EL!�S:�����2%�e�y����7ʷ�Z&B��s�]�,��
����	���-e@�F�Z��}��ꥵ �� 
��l���PѨ@��1�'
peJl��pV�k^�m���C���O���U�5�@'M�r\��'ԛ!;T�(�
+8������8
���������W���Aū��t�g@!����aь
A_���
�`VI��
.��f�̈́
=R&��R��d	\�_ay�]z��pdGi}4���K^6mR��@����W��˹����A���!p��Ֆ�IH�Γ�˻����|$e�WU�(�GW�ː�H7���
��'��i�
f�U�1����X^�VA<��Lg�`�Ε
+^�4��=
+NI�U=,~h�
+k:B�b��n�9��b��c�Qpٖ���*

T�Ep
��
+��!
��ނ=���ˮ�8������v�J���y� ���"�
+n<�x�]Z����Y4���
��1�?�A�N�
`�N��~�l��$m���
+}���qt���S�l^���Z��S�����c����*7��u�^��Ͻ��e��w�]�{��`�I�+��w7|�YW�6/�2]'d< +}_9�
u��{�.C=Y ]��P��Px�[���Gw��d��`a`h
v�A[&p��?�+�w���mW���"���ǹ�M��i�pd;��F�X�YS� 
�
qA`
���'{@�k�?w7�CB4Ѳ�*��rf �
A1ѵ�O6�01�xMQ�И�*�`�tӅ��߾�){
~`�iLG���s���3
�h
+��\�̞O�1�����m[�i�)�1C���G�"�PY�e�<ljd�\Eut��q�=_M�B��Ӻ�I�T���j���J�/Y'*:��@�n�<����!ʄ}�‘.ja��;6�؂�]l�^tT?�I=
��nĻ5�!4���9�έR�r �G+���W\� /�sT\q)�����Uq]��c�F�o�� w���<g��Ee?w
�����
+�]��[>q��d�8���r_h�o�e׏3C[��Ŕ���zn
��	K��^Ύ��DW��1�f�sTopIk�(���|>ALK
T����Ӵ��3w
+�!�v�N���{����[H����﯀��� �7 ܊�t�u7�8��
w����ARl���xM=藛_tN$i��\ȦY�y�7 ��2=1�i�x���������
��Ǩ����?�N�����5�峙���#��%vCDg[,]č1dMɛ`noWį��K����(+Ø�
�b3eeRN�2tL��̓p���%��{��Z�W�?o64>�1'��8��W0��Ô�����s�V~RK�{b���a&��(�&�K��:Г}H�lC|5��'t14��{�|V�����$$r����*��G�0H@&Dү��n�0����iE\�$Z.��ޒ�P��e��;��~G�RIq�xf�y�
��l(=��6/�9��h$�\��L�/��Ә!E� _���/�>}K�7��{�3\�
�r
+L
.&������	w}|�uO��?+��k
+endstream
+endobj
+1565 0 obj <<
+/Type /Page
+/Contents 1566 0 R
+/Resources 1564 0 R
+/MediaBox [0 0 612 792]
+/Parent 1554 0 R
+/Annots [ 1563 0 R ]
+>> endobj
+1563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.035 394.309 413.506 405.434]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+1567 0 obj <<
+/D [1565 0 R /XYZ 86.4 726.045 null]
+>> endobj
+178 0 obj <<
+/D [1565 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1568 0 obj <<
+/D [1565 0 R /XYZ 86.4 560.36 null]
+>> endobj
+1569 0 obj <<
+/D [1565 0 R /XYZ 86.4 293.021 null]
+>> endobj
+1564 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F48 982 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1573 0 obj <<
+/Length 2533      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw����W�H%fO�K�r�gɛ��v")��0	Qx
 �D���^ RC�ɼ�$,���Z��(
�"
����ۋo��
2����>��HQ�$#��2�0��rN56dvW���r�4��}u����rNf7��}Q�W���^��M�m��/�}w����_�������?�h	o�E1���n�:�� 
+WYts��

6�ۛ纵y���4%��߾����9�Q)�3%���a��ǀ^M�V��������Z)�S:�V��t�~ww}����M��
�&u�o���";rWf�&]^R:�?f[��-��4�w+�4Ob�ͪ"�tI�,	�q�/��?ۨ�%Ino�,��:��K2K�Q�,Q����	��a/���DW+�֓�D1l��`�Rc1t
+�S��:����v��
��iyڙ}�z��ޛ
5
��4������!��$�dD �{�7�a�Q�(o�քS�
�,KV>��K!gq�M��䍤�!$�#N&	!�9�z�EB�+݅P[盫�GkEc�+o�u�.�Go�8�
+�b5[،�������_{�Y?���	Ұ�9�b�t([E�T݅�L*���ero��q�p.���
�3Q��G�*���rq�β�RHS�DIɏtS����Y+�Ci��AN� �ۢ~ {31�
7����}���0���'��n�2ۮ�C�Ҡ���ս��~}���&�l�GY&E�LJ+ܫlU�i���Յ��ϭ�_�#&<��i��G�*�h�(mC
J��;�W>
�<�6qY�HZQИ�U����`"�-�E�޸nVT�<s�
t4[h��]]�'�4Vu�B���C�
�o�Fea_�;]�ux����2Y�I�7Ft��	.��ߤGg�Y^���z��e�Rc{�T���=smn�7��m$���M�����������5�	���^rZ�
��u8]o�J���3<L��:@����H�5B+,���(|��:�
�Q��p�3���`"��G��_���
���
�뇲خ
��"߉�߽M���–N����#<�ݭW�5�|a�����L�
��曭K@�f�|M߳٣��
��Z%������ۙ}�v�N\x��J
�=�Y
��^���4�x'���f��u�4z��nbg��N�*�����2�:�9��M�&���~�P@\��M\���%K
0��գ:{�
\^ڿ�
�ߏN�*���	�
b���2n����^	@i��1	�:�~��@�+�@��@�뻛���Uz�BC6��;�� ���tt�7�<�V�{	�b
��a����Y
�$�����90X�t  �	��ծ�<
 �
 ��A 3}��T<�&!"�${`Њ��a�P@��?�@>�H�t�٫�Z�香�[�IBe�)YCm��g
hw+�*o�L�l�Hm�w͊�������
��

^�n6 vl��$�$!��:<#��P
�ĝ�T&���o
���-}8
��<�@W�
+Jpnw[wQ�I�0�Dr��Os�7ԜGwH�:Q؈&��f	��j�k3q F ~�H|*�
.i�0�8��-q$n�Ro:O>�N}?��n����ޏC�9�����
���T�0th�tY �(#�
��1R�q'�R�.
c4L����/��8cȡ� 'D�
+�9ɋ�ɖv�m Z��?�HP������|`��c��O�C�����e��3��~�PY\o�
�щ��\M T(D�͵��$�]��4Sv���hba�;��Ȍk��!a��
P���C�B��/�*?M� ����ǓRX�ӣ$�1A

+瓐�V��g7w/_���	�<
0{�k�>Hx7�+w��xҢi��ƿ�~�� q���UL
0�����	(�S�
D1��q�l��9��<²r����gهp�

I&9���G��e�r� L��
j�.��c��IƝ�`��������YϢg�H�I~̱��'0�(�YG�1���<T|!�7-	clӿGf��/'8/S ���
xF�#�G^;�4P�}<�l���<z�5O�
�أ�^��L����Q^��d�b(�H�Qj�P���Os
�r>�@�����H�
+_߽�
e
(a����ѷ|��x�-�I
+��:�0d�'�Fa����A��~�a���X�8'Q���d
�D�{{8�z`��
ú��i�������
�
+�^'���k>BA�
eML�d����B�1
+��X�zs�<�
B#cH��~����R�6I������ ~HI�e�8����IP
+)m���`���/f$ԩ����������?b$N�����t8&�.�:��U���Iu�a;�
Kp%��x6��
+ȅ�p��
[�$���wcŞp0?T��I�����uP��|�Z��]
�g�����]Dz	Y%��0��ߙ�߆	"J��S
�V��+e�N
�
Ab
���)�?u��0�����
���O�_�s"�Z
+6Ed�$.�	���*Clu4��2?�vG������>�W�}���?��*�
+endstream
+endobj
+1572 0 obj <<
+/Type /Page
+/Contents 1573 0 R
+/Resources 1571 0 R
+/MediaBox [0 0 612 792]
+/Parent 1554 0 R
+>> endobj
+1574 0 obj <<
+/D [1572 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1575 0 obj <<
+/D [1572 0 R /XYZ 86.4 547.579 null]
+>> endobj
+1576 0 obj <<
+/D [1572 0 R /XYZ 86.4 298.384 null]
+>> endobj
+1571 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1583 0 obj <<
+/Length 3348      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�6��W���E<*��ɳfj����^�
h���+�
+Ief��
>EI�X�����!��w݀��~�g�^|qs��7��<�F������gVzf��ݬf?�5K.ʩ�OUV.��z}���v����n���bS].�7�͵�������7�]X��D�ل9mf�Nj����fƙ�n�.<�8��3	������8��
&�i�d�i�M$|���ʴ��Tr
���u��Ғh��5�TV�c�E�5��o��z�
���7�G�-��-����|[f�b���|sO�yE׺����[�X�
oV�&������ک"~�~Ȉї��ik��@C���r�V�|=A�Y���F
�� �P
W0��r�b+��7��a�3��#���j��m���Kڊb�d��f��	擄(h�>��d�m�=P�D"�
Fņx�}���L�p��od��+�o����*���+,���>�L^W4ؤ�����,v�4�҅� G��	�
�ڊf��_��F�\g�=� ��
+$���MF��J0��P~7����~�$�t�K�4X�(a[�ޖY�¬�Y�oh\�0��ݼI��m�ne�N�,~f��)�6Y�jfo/��!-�oU���]`�y7b��y�}�upΌ΃��'8�7t
K��_���lf�ma�]�H6~q`Y�f%�f&�*���V%�r����z9��@'Tݵd����l�eFrQ�0��P2w�5z���g��p�/��,(.�
a�2!Zs2E��>������ekw�}|�Bpd�����
+9PQ
0G>��">Ն��{(�\�o��*�g(��b�^Ѹ����$�b"=a@
��
��dN��2^�ǐ��M
�}?�fN�y�ƺ�ꀮӉ$��d+@��q3��Z˷�	��|��PQ��&|��(�
+���p�/H'�ɥW�\E�y�`
*��ʬF����:R�m}����R�姴l93]F����oO��M|�3�<��$�F�C'�%@�|�NZ�ޡ@�*a�B����@�c�='1
��1^�iU��QM�C�!��!�����M���R(�����DT���I$0�R�!�% Yn
!>(�wՈ9@�oB7
�H�(�H�e�B�����m^�i��n���-�]�"�#ȼ1���,�q@ݏtC��>���e�hYU�}
�[�ʐ�qL���l���Th~G���0��E at x!�*�ƙ=��2�R:0T$
��"�����
X�W���q�
V(���B� Ԡ'�&�
���X��y��1�Y��o�<�nR��Ґa%�.�G��'7�E�|�?��;6�c�b��
(jY�L�� =#
de�7똗#�Ӷ�
��
�-��QJ��$����o�Ea�
���Gs]2�?r
���dȤ���	��@*���=IY��b�0��@���*	���X��i��x��̿���b�1��g�����<u�H0n1$�@�[�2�|eDk>Wq���d�Aԣ����t������d��5E"��)
�*+��2��ۮ���%��86�U4��Ӭ��S�pp©KĄO�Jd2�
q
+)�
�ˆ	�dݓp�����xwK��nBE��5b�J;�2��q�ܠ���-���sH�3eF���IeȲpВ�7��gaIKu�2T2���T�p]��T]y�r!�_���\e�D� I�
�ʁ�Q��+�)�,�s�/��N�

0+��~�Z_ax�M�G�k�{Y)4
Уqz���6W]a�਀�y[�Hu$�Q����؂q.�e���jB��u�s
9����Kp<��!B᧴�G1#�1� ��̤
�����e��
�LƐ
WH�\W���hWL�6{�W�m(ӳ�]^e��p*���ڀ��d�0�Ѡ
RMkk���
�
�M�&�(s�J�ߔg�q��ۀ��K\�>��f�#��#�x��؁���"�'�,K((&P �|!�`��1-�vu9�7����yf�8�bF�'��CV$h�*�|J�Ҁ���ϑƠC��
j-ᯏ
}���GB0�d��X���.�A���@w�W�X�2�@}�T���C)ڷ�
��+������.��G��+P��pA��'�ʪe�o?�g! �4'�;�M2���Z��%�
+F1C��1
 	���x
�(����IX�C�z��k��ۋh$�����=F�W
��eMڊ0�q ��A@�/�( 
��)�;[9b
�r�U�����t� ��狀����zr�1������}�k9,����d��]tv
,��k*�B��;�|�P(aX�q�qK��4�<Gz�O�C\�ǧ����8�H)�P����T�/�ύyC����@}�j*�Cxv��N'w ��q��j�;��� ����d���uW]�
�*
�
+ɗt"�ͥO���SuB��Q-|M�gz�,� FnU3
<�����Gi�4͖S6��o�Ny荽
Шr��7�͔z���:�iJ�|����6J7�D�O O�}�6X*l?�Dqw܋�j(;����^O�^���
K
~
����
�* !%x�ua�럾�����#ƚp���[���āyО	ڋ���;kRMћEuW��2���=�y��CO;-7�!�hu�I� ��a���nkr�L�α�PȀ�
m"�MAj]��frsM� 4�K�֑�,\8cf�D��#�4�rq�}~�f���ޠh=ne$�of����,f��{E+���3L�Cΰ��l���z��$D.�og��'C;;��:=���i��R5����-�U���<]��q�i/���I�� 
_�Y5NY� NqO[�o��ݩF�Ж�D<+�
H���t,�
+�OdtEs�{���z��>����؏��BB�����0Sp�Ӟ4¶�H!:LJ#�H�Ri�/�鎉T��D�@2ŏtL0 )���1�OH����qpq,
+�M�X�>�/?C�&���Lgn�
�q�_"�I �$/k��3 H�ӵK��w�C�
���Io+v�C���&¤��A�D�(ٜT�;9����f{&��\�s>
W��:!�f��
��T��]��	��NH�?w�}j�
P�S�i���&&�g�m���K�C��Z�_��������
�>
����T���v�\<��է��!����,�&
�<]s�aѦ�
,������j��K5�|��qL&�,fu���)5�Vmj����w5�=Us�QJ������ �Q������DN����贕nu"�sT03:G��`Æ��S� <��}<x��;�G��:��<�"���>������g8�yMj펚
 z�����(�f�0��i���鶁ýP�\01D$~��
;�4��
+��lT��
+endstream
+endobj
+1582 0 obj <<
+/Type /Page
+/Contents 1583 0 R
+/Resources 1581 0 R
+/MediaBox [0 0 612 792]
+/Parent 1554 0 R
+/Annots [ 1570 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R ]
+>> endobj
+1570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.948 621.749 181.67 632.873]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.753 501.913 419.224 513.868]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+1578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.319 263.835 433.79 274.96]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.9) >>
+>> endobj
+1579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.58 251.88 347.033 263.005]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.10) >>
+>> endobj
+1580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.956 55.746 434.427 66.871]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+1584 0 obj <<
+/D [1582 0 R /XYZ 86.4 726.045 null]
+>> endobj
+182 0 obj <<
+/D [1582 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1585 0 obj <<
+/D [1582 0 R /XYZ 86.4 453.364 null]
+>> endobj
+1586 0 obj <<
+/D [1582 0 R /XYZ 86.4 235.316 null]
+>> endobj
+1581 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F14 1050 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1590 0 obj <<
+/Length 2616      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W��V8�70����Z�KY���^�
`�P

+ �����@�A�������A�LO����8X8xq����d2PHI*��eKă�*$	���P�ɔ�X��m�mV�)�Yxy>a4|6��pf�,��=��k}��Y�o��L~�������3Jq@��b.����ݯ8X��������f�:�L!
+Wy0;��v����qA��QI��i�/�
+d,���1	0�#;	�l<�7�BQ
RD"i
wy�lv���,�_̮�nӾ!HLP���gб�~?���6��w�_F
)��2�'ynf���,]Ĩ�'f�2O�E��O�
+�`��E�7U
Ř�v���-����vP!�I{!�t���Ӫ��D��;+�2�� R�D"S+�<��ev�8�7x7%D���&�4\n7s?�3=B�M�6t��\E���խ��0�g�`���ꫭb�(��t6��(�Yg���-���X�$����yٷ
+��=��B��+(���
��p��)k�*��	Ld[���b~���c��pc�\���
<���N6z�u5`7�	�Ty;������ˋ�+qF�^"�\"��c\�3���� W�a�Y�txB���;�`�<�z6�]>v՟�� |��1JYDO�?��l|YO`�@���}.^�
R)`��2u�Xl�&7>�nm�З�¸��z���l
5����&^�<O�J�J6Or{kߵ'�O?��E�����f2�|jV��S��Z]��M�#Q;���Z���\��o�>ٌ?	��H�0��� ��QHGdd�EEx�tGp�b$w���x�U�!��1�la��}��P���G �
�Sd�t����
�T��E����Z��݄�0��:)��h��r����}�F����c�
��LR����v67
1ǰ%�^���M�cҷZ�}��R0��Ox�}���]���ӶS�I�m��>L]�M��L`��*���G#l<vW����
�k�ˇ�vQ<d�j�賌k����ƭ
+�
u�K.ֶ��֯/�fa��5�
�P�G�Qa���Q����ϟ_�fG|S`(h����+L��1T/
vO��3og��Ӎ�Ym�󴪖�<w�U���xR`%(�m8�'[
��(�Q;�//^Ԙ�X�`c(��X#��Wo����`%al��
�Ñ:�?�
C%��"���E��щ)�0ibj�M|���9b�	vo�^JR�]{
�2�
DU�Op3������6:�W�~��9F�J	 ���}����uE��Z���g6��>��?���MM�g�4q[^���t)V� ����%���=�d����t�2/.��=�Z at GGك��D���l:H‘��/���`ˣu6��������aK'Y�e�n�A�ӄ��(�Pa�
7y%[t
�59��Y�UQ�U��`2�w3_��d�׃�D"��ٹ���:���t	/��c��M�P�������u�M�v1��%:ڬ5�<y��}��4m���%61Rq܋�պ
��j��
y7
8i��	���y�3�����ݍ�/�48/���
T�Ѐ�e�t�s:���
&�
�̲���f9ӽ�
d 9����=b�e��MZ�I��r �s�����QP��y�#
'9۔����=c
d��pa��ɣ(�V���
�N>���d��;�
2P���@%� ���@Y�D|���fI�`�������c��.?���i��d�Une� <�)��x'�b�f
+
hM���{X�����aY�*ʬ�Yi"�A�NJ�A�0EQ��7"泉߅��b<����F��s��9z
������%⣴zZ�3�/'�ŌQ4��@$�ؗ���
RK�Ӓ/#,�r/�5������p���t'Q��S���z���{9
Y0�B���� �B3p?�2��[ZJ̾�.M}�q��	�d��m� �t����=�C����_�ɔs
�֚�ځ$��6�A��8Į
q�鮫Y�Y���b���_�:��BOE�
:05��[�A
E����z���*�
>IE�4�s)�>ec
��Pi3%��O��=H��
��8H�ZȎ:Io�l�����TЧ
%OڥѠ�tNR�2�Y��n'�Z# �:���;{��Mf?��G���w��L1�}��AM���<����9e5/6V�.��peOL͵���wm���w4�Q@.�ss�~,�bm��t��U��֐����9�eƤUm��pSC?��a��
�~�
5>���v�r��M����m0� [...]
+�5�V�f��~c�N�u���Q�t�$i�~.��*=��T>�9���.Y� �'��BK�
��Z�Ւ�H���KM� �d[:薹�t%�(��w&�t����=^�!�)�N��ⓗ��W���E6OL�i�ﻵ���C���KC�]8�����
+endstream
+endobj
+1589 0 obj <<
+/Type /Page
+/Contents 1590 0 R
+/Resources 1588 0 R
+/MediaBox [0 0 612 792]
+/Parent 1554 0 R
+/Annots [ 1587 0 R ]
+>> endobj
+1587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 192.771 519.955 204.726]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+1591 0 obj <<
+/D [1589 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1592 0 obj <<
+/D [1589 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1593 0 obj <<
+/D [1589 0 R /XYZ 86.4 464.587 null]
+>> endobj
+1594 0 obj <<
+/D [1589 0 R /XYZ 86.4 251.771 null]
+>> endobj
+1588 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F11 787 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1599 0 obj <<
+/Length 2890      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�8��W�(m�0x���V�8ɔ�Ij;�d4E�ܑHE��d�v��-G��J�b�؍~}� ��fB'���vu��
L,�&Wˉ	��hnI ��j1�0�D��ˆ��<�Σp����4�^�ny�K�"��|6�6�f���ϫ�gϯ�>�1`C'�"����$Z�}��N���	%š�}�o=���V�˳�g��O�R"?D�INt jJ

+��I`�Z
��%��S(U%M[U�h�'�e���)��ٯ��d�_��Em�u�/¨ȶC�pn��<�(=u��Z�c�A��7}�Zk���

�g���i!`Dp������f6W\Mq��*�,¡^�dĀB-	�K&L-��DB*BYO�u���
n�)I�e�Q�?zB��̹2$ :sj���,Σm�A��<;�0g,`ӫ[�I�t9cS$��wF�9��U<�A�s1I	-P>�o �4��� t�#�`�C8�R��Ϣ:a�9���"wkE�2�� ��8~�i.4�-tňU�m����š�7~����O+�m�F~��.+�n6�
����C6%�
?-lcSG�N_�Qv��),���f�NJ����jZ�U"��M�l
3E���c/�lIE��|�Gw��x�}�wI$���	�y	�c�YJ�|Eٵ.�Jw�c).�t�����b�r6�hbă�����'����y�e��еT�C��Vo�e���A�EU�pC(��G�c�	���H�^m��� e�
�� ��� ��.2����5��~�Q :��,��J�2f�Y�Ad�4��רx �&"Ѝ�
�� خ��˒�Cٿ
U*@�F���
�e�S]��=B�3_�b�؊Fw3Χa>��!"h��Ͷ_���
"D��/r(�͙�d�4|����G�2 ��c���U�e�8d'(���4�CR�3��3C߱��������b�M
���R�p����OQZ� )�<��Iaک��#�&�"H�݆fK�3�!1�Ac
���T�p�#h�HРa��$w��R/�=�$
+�5��
&�?.^]������`� �Z
|Uh[A�%)͵�|��������T��J��vYYۄ+'<X/p�+�
�R0U�i
���|Eq�/w���<.ǔ
@|�
�GhKzQ}m)M}y����Z�BG��)�r�8xY����^
��%�m��sh��=�C����$R���>��bʂQ��2���H	)��JA=@�0l<7�������n&APh
N�f@*0��q?��@�p�P(P4v��~
��C?��۾��|�-�h���h�$�Co�<[��
��mR�4͊NZaK�&X�'�*�o� ���ktu.��:����$V�a�G�
��ql�z�5��y�����Q��+tU;T-$~�G�U) �ҹ��<)g�aA���
�MV�y���J�4Y��p�*�%�~�`�U����E�;��Z��13ecݔ"�ֵ��Gp��:�d��KZ��A�5��S+	݆�S+	�
H6�9�?�F��	�8�f�W <υ}�ϩd �8��
+U�w8�
�%�A�wpx�p
+�:R4���;�s)
+�n�0��Z׃���
�����p���s��/wL��ȓ�vk����U9ĸs���|F~�"���t�o0]"�T�=�,,QP�t�2�%���/�������z�|޾~��qq�g at y���|�v^rN�8I;���x\;O!=�Gt��{o�K8T���`]a�V
J��twT���D�q��:|��x
��o�ۡTW>�)�\�-��k� ]���GRL~�-=�{ �'i��i�O��*�;L�mK
+)\K��l�4D��H��G��'�Z��
��}Kv���
�:�˥��Ԙ� �x��i�`aO��N�*!6�^�.�M�ӽ̈́m�~D�����:M�+�V�|�;���V-�e��=gs�[�;��^Z�/-�K���	/-%QD�ym��$W���ᙜp��n�i
/Pi����T\M�cu��7r���G;�{j��L|�J��#	Qj{=BYކ�M�Vu��|���[7��.�vy/M�~Y�
nwi50��~^
J�M
+ױ\�*�r�!����%�c�WbVOM������3wڟ܏�������:�7��b��K�d�o�ִ����h��gʔ�4�@t
�T�2(�d��a�#h��|@�X�O�#�*�-ۨ�
���O�
+�n&�|=���
���\�����/�|�,�[�4w��
�=״8��jՄ�ƫZ�):�p�`#�Q�.o-#08��*�d�(4�w�v
��A`��U`r �e�r��=F!,����ܭDa�vW�
�40&��vy�m�I��#�f��+�
+P���07����
Ľ8����
m���c�m�A�\@��R%C�
+�m����-$�@v�hF��Q�3
+&�&�Zv�7Ad@瀇�zq|;���|b�rx��A��!"�O�[�P\��`O��,�;���{��
I�s��P�(��<�i�bp�y�P��a٫����~Q@�Vt�i��&���

-bsm�f�������
}�sz�6���0ս28¦,��~WRƲ�n�
T�a}
��R�E�M|_���K��Uh	t;�Bx����}��Mu
�]����>)n{ɸ
���c����T2n�f��I%�RU��1�|����a%����{G��"�0
����p��T����>�2i?nd
7�u��{9
���_ɮu���Sx5�����p*�E����	0Ĕ��7
��ۦ�|��(��z0�:p�!�$�<�b�xWXQv�PE���6�o4?T��%��:S[��#P��({��?n�,D�6G8�RD���pJB�7[*�:K�Z
�G_lyȷZ�G
+�6���`*#w��C�VU�
�'��w��w��wbz�N�X�{�]
+endstream
+endobj
+1598 0 obj <<
+/Type /Page
+/Contents 1599 0 R
+/Resources 1597 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+/Annots [ 1595 0 R 1596 0 R ]
+>> endobj
+1595 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 630.508 165.88 642.463]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+1596 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.76 316.584 292.231 328.539]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1600 0 obj <<
+/D [1598 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1601 0 obj <<
+/D [1598 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1602 0 obj <<
+/D [1598 0 R /XYZ 86.4 493.453 null]
+>> endobj
+186 0 obj <<
+/D [1598 0 R /XYZ 86.4 256.164 null]
+>> endobj
+1603 0 obj <<
+/D [1598 0 R /XYZ 86.4 201.35 null]
+>> endobj
+1597 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F14 1050 0 R /F16 729 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1607 0 obj <<
+/Length 2513      
+/Filter /FlateDecode
+>>
+stream
+x��Zko����_��R��{�.4ͣp�1�kg�"Y�L�L%ҕ�x��{�3��2�b�� �H��{g���9wD����<������"i���� �D�GD
���g��<���ۦ��|!B1;|1|�l�`�c��<��W���7rv��vE�g��N^�<9���R�J�"���r}��7������u9n
H��Up|������ɇݹ�f���Q^$�R�Q�~!�	g'�	f)��,9�w����4Wj�v�]��W9�V��k(cJ�[�4��
iN��M��2/C6epL�
�V��R$�BVK��
��:
!�
,�D���C���ҮX�p��n�M���]���̒��r��3��7��&�7kw��*z���g��3/�,�@��*!�V�g?�A�M�J6q�L���|a�p�jO��ٵP,��H)��,�ƮAI��E��cwVW;�w���,�|�
�[�j�~�5$���}�a���ٿ�dED`��(����Ns���/��,�����e욜���|H3DQ�~퇈 ;nDh� `B`S�z3�a|��l��	
9���4�D{WWC�,HhjS�y��
��H���Q��#Ҕ.
Kh��͌!��܆6*M�F6Q.ycu���ں�Ά��/���D �n$.� �Ա�����'W�r�l{JBc;���2��e�I�,/I���4�E$��0���D$���m������2?M�ܐ�!�e��>��0���ߒ��(@pn�1-	���V��FĄp.f��
�xv�o�ߏv��"��
>�/�EȜ��];�{����
�+
����<^�Z���|͈�u�9_�(슫�Sw�����,�DP�H+�*��#C ��D �J��+Y'�'nR�����׏�����������f���v�I�j8Ҁ�i��lv>g�]��v&h��Qu���_:م"/�:�m�\X���UP_�kL]�X�7�������9��n�b�1�<�]�=�^+B˴i��F�C볐l���e~U
 ��)�AO� �˦��>�Q��|�a��
�3�L$�!DQ�0d�5�REz�SȎ�o�*�%&Q�)r [...]
+р(L�}]Z�
��2���Qa�
Uj.���k�`=�g����(VG�ߑ�4@������@�@N�?���f��
!&�Y�����P� ���FL�Y��B
��pi��3�4���ls�[#�8��
��4Xp��K���
?"��
	��(�H��8#��&��#�v%k"�Oyz�*�_��&�BG�(y�Lg��Z%?���m_���̰�����#T�z
��o>;��( V��j�C�f���f�U�m�
������ҬD�:b}���Y��A�"�F�|}m�T;ږ�V���s�4{!̈Vb$�)�_G7XJ�S��/I��d�^D�(J���M_t

i������F����"�c�̻��W-̃����YRoĨ�)
�E;�
�*U�x�FS�
++Jyo?~������W�hW+�w-/�hٛ����	����9| �5�o�v�\&���n���M��05��v���� �E8�� ���)}��̀��DјB)X����ңw?�4�=�9�ܟPLa�h�"q8$(����� ζ�
R'�0`ߣ*e`��#%`J
���zE.�7�^4F�$���0\mSr
+�(�+4��z��&PZyXK���w'C9�.�m��k����,�~�i���d`��Pv�����M�Y��[��]F�5�Y`)o镀�k}[�F��
r���

�kBx
+&w�9t
*R�1�x�_"���
g��~
*��U>�a���J�
���7l���<�ac���c�P�=�v�-]�[�߫i�ߣ�0*'�[bp���_��nJl
+!q��f�҈�.}�
U{��fή6�2��R��R	�%���ӭ{���xX6��;7!<*��u�g�w�2R��b�t
@F��/�=U]n�N�j�V��v����E�]ts���F"�e��
r��;���D~����N��3
?��x�T��o��s8*o�w�� ����Ћ)��%���	#�?a@�S�`~�8�R�[J�*a�`al-�[#�\
��$I��k�(_�@g�_-�ct����fR�(o����5��Q���a���+]�
�(u�
��G���?��% @�p�~v����/zS�z�o�?��R���&�i���Ed�#/�1
�����c�:
Ɋ����}S�H����m��N�z�xZ	%-[Tg��0��t��~5r5M�*�)�}���ە ��RqQ$뫢���ʥ��:���/;��1�׿�W�ݪ"�
�{�J�4�C̑PLҀ�������>�'}i����n!xr�6��^�w��G
�8���XQ��0m
C �)LA��*�s��k􈺩��G���k������c
�������;��	Tz�j�
�j�@��
+��dMj�
YP0�� ��*
+endstream
+endobj
+1606 0 obj <<
+/Type /Page
+/Contents 1607 0 R
+/Resources 1605 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+>> endobj
+1608 0 obj <<
+/D [1606 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1609 0 obj <<
+/D [1606 0 R /XYZ 86.4 627.745 null]
+>> endobj
+1610 0 obj <<
+/D [1606 0 R /XYZ 86.4 427.262 null]
+>> endobj
+1611 0 obj <<
+/D [1606 0 R /XYZ 86.4 226.125 null]
+>> endobj
+1605 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F11 787 0 R /F14 1050 0 R /F13 1100 0 R /F7 1094 0 R /F48 982 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1614 0 obj <<
+/Length 2406      
+/Filter /FlateDecode
+>>
+stream
+x��Zے۶�ߧ�%ՉP��Mg
��8�uK;�pr���]�%R%);���A�g�+E�g��ͮ����ij�������__39�/����3-�)�#��l��}�8��̻��t�v���x��.���c�Σ$��
�K�=�濭~�y����
6xFJ�i.g��͇��lw~�a�|=�\���8��_���������qA����CVtZ�
ߟI��j��K�H��i)) !}����Vo~|�
���������˾!`+���	:F�Z!_�󍀛>�]�Kő�<����H^>��\Ĩ�;���.x�/���_��b��Mз
+E��@�c�0D��T�;��)��b���( �{G�&��A�/�B�y��0[���x��ه!�x�GH��40�:�ʐĺ4�P�t<�AyY���Y�
�ѯ��0���1h��ḷ
���ʻ�'���F���wQ
fa��͖G�2�}\i�#�|�A�/�$O�&�	�A�$����n�b���O��]�9O�܋�0
���;Lb��c�
ɒݧ(~��~��8ʣ`gW�I��\�17�
����4<��J�wH�S{�v��p��/҇�>,dγ����`0���s�-��5�M��rA
R�RF�H4S�AV
+h�p 4Ҋ�{>%��f�_�1�@_M�x�1�gYәPc�{yb�/�H��(
lYm�9�^�gI4�b	�&�%{�g��pDc�ja����j��Ў�+	#��i�ϰ_
q>��@�"�vsi���5
U��"m�gmi��ش��ڤma��H�s�S��
S�2eyx��
+
+h;'އ�1����E��n�"hv����3�3�j!=�Q�(oF
����2z>��N�!�(�`��L�Y3%qX9`4��Y�tP�O�a�y�j �D>v�ny����r$���
�Է�YR4������5i�V�|
�1\'	���
�
��0˶��Υe�����j�⸩-j��R�3����� S͐ sN��*��6�wwoߎ�*,a��~XCQ���:�Q�)��j�--%\�餒�0�Ru�%i�ׇsH�*K��O+��{rZ��Bi>I�)�ݰ���z8�&`ZFX�黟�VC�����<B��P��'�¹1�y�S1��z<+��5
߻$��L*]�M�
����%Z�� �+�֨�*ݛ�@$n����Ť�К�b�ܙ9�JV̱f-���� u��u�tc�-��Z��Tk{R���ӧ,ʾ3ES�Q֬����|(��A���q�k`$	
����p�E�sa�}^ڽ9+�
[ۓ���@=y�ڞy���SoF��V;�l�Ļ����rx
IBO�z.��$��
謬������4��㿷�!hO1E�\��-����[��{�
��wlq�3���hy�g���-]j��˒��y|Ϡ'Jz9����|���'��4!$g�a��
+��*5�@Uf���W�;I��Y�6Y�I�[|�`� �S>vI��x�|y�̠�C'��'3�H�	�@[�
a̮G̦�R7D�\+2l
.c��%ƻO�]���!�+��`�c<�n�4�"La2K��`�!OXqI`7
+U��/�V��^�;I_�j���b&
+��8d
�
+��o�C�$"��9�v
+�{��L���u�
D�h��Ld�	��P��@�
�����0�$��0���+a~���r��kr	�7�
F�I
�L�{
�O����g >��@|�#�X_�5�	�jk�0>=�a�N�R�N
4
+� ��rݑ�h�_�k 
��	��3H�ԥ��
����oΧ�<<���A�����Rt-�S���3�(�GM�g:�xϘ�׽\+�LK�Иw�y��Ґ
0
cr���̜��ib��i at oMNc��
qLx��K�n�LѼmN�n{&�
��ٗ�9!,�o(�I���б�W>	4)��$C�!E@�����:, ��*՘_b�ӓ��n��>�7&럫����.a^�I�Usr�� L�䰭y�go�b�2��W3�?��H�j�
���_��������tl�! $�|��K��%䌁��s_�[�
)�����:�X+�Mb+�Dʏ�F��<
6i���Ǐ��P�>�t���>���I��!�;��q
+�e����N���Fo�5��
I۾n5)aޡT
��H�����n��A������e��*�|�CSӤ��=�,R3.���J�&S��f�
+<l��ad�� nR�Nm�������#�\�oZ���k.�nj}~��Լ���F5^}����B�'{��DI�$7�"��/u��h����w�P�Ie��LH�'m�j�~�M
.`�����P�5#�͖[->�`J,�ٸ�!�ڔk����v��:k�^�h}y��:_jG߶%́��AN���� �7�4
+endstream
+endobj
+1613 0 obj <<
+/Type /Page
+/Contents 1614 0 R
+/Resources 1612 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+>> endobj
+1615 0 obj <<
+/D [1613 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1616 0 obj <<
+/D [1613 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1617 0 obj <<
+/D [1613 0 R /XYZ 86.4 467.664 null]
+>> endobj
+1618 0 obj <<
+/D [1613 0 R /XYZ 86.4 279.334 null]
+>> endobj
+190 0 obj <<
+/D [1613 0 R /XYZ 86.4 83.024 null]
+>> endobj
+1612 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F7 1094 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1621 0 obj <<
+/Length 3599      
+/Filter /FlateDecode
+>>
+stream
+x��[K������L�ɼI��XN"��r,�9�>@$��	l P���O�� @�����'bg������Y��]��?n����Oz��\/�nV�0�-���f�>Qr��:�����v�V$�^.O�Z�X�&�l�*N��>��M�;4yY,y���7oo�sÀ(]���"V��z�����̷
J�������B
+G8<�on�uC#��u(%R�uՄ)֭4XA9���f���6'T븄ל�}�9b`	�aFݽz�՛���,��y�����
'x:#Mhk���)��}C�c;�F%\���t��̷ߌ�׌�`ƿ�ݥ`*����gB?SE�Mz�A�Zx���$��tW�DR6e��_�*�g�W�	��H��*+�A�̊��h�Y����nW�o�W�i���˖+I]�=,YRt�?b��ڂ�Vsglf���Hp��M}�>�d��g�dV#Y�4-�M��/�a�׬*W몬ѯ�o�0�!,w�
+Y@�%����S*_�M��"I
� �*kU�����C�Ud��U���a
����=�b	�4�����pҸP*��#�>Ƕ�6�ܯ$,�lkƐ8%ڈ�?t�	��پ��7�V�pj�0�-ǂ��9�y�\V����/����P +��[r���)M.���@ܲz�~ؕ���~$s�vB��� ��mX,z��$왓O�_^4g��1���XR7`��1���y����.+n��	����.�f[<F����o��~��%7�	MⷯG�
+Z.��Bp	�%nc}
��.J��7�Bg��Q��(�"]t�|�̈`f�{'�
��Ն�&��D�X
1���,��]��(5�1���2�tS��S�Srb��N�����9BH �֐�
+25"$�i�t������KGmNi[坟L�}��)eЍ��ɇa3/69�Nԡq n�j�}0"#��1k܆iT�f9�
+Ͻ����w�a�	S]�Ɖ*��
+��;���@H-.�y���N��zm#?�m�
�S�H;�إN���oǯ�ӁG���K�)/�i�W�b}�Kݪ^F��$u���~�U
�nṧ��[�{O㌊c�a��	e�$�&F����c.��۾��u�y���4"wH
���&k�_��*�ܸɃ�  �q�f�A-$�A���'���`��HQ@Q�w拱�
K��`yR%�ɩ7 LvH���pS�€�L?a��-E \�&ڠe�j���iO�V
ua�<LQ���W�)����y���߼y3�k�\ۊ�m[��n�
r�'NޥQ1se��
ׇ�:���a��x�Κy� ��J1��DY N�sWQ,%���~��DA%p
����I�~��w3[�R{oN���4n
+s�Fe�!��j����ȏ
����)��}�T)���9��XG=�?
8��C�9o[ԁB�Ul
��������u��u
�����ۋ
�C�� w�\ҹ�H
+F{~_�?S�J0Dt%bsW��ۻ8�����%s!�}��.�,�bTd�.	�R�� T���ɶ�a��2'$�;_|��X]�	����b(��n�&�>�
+�L
�jr�i&
$9kLp"|�v��%5�
�+4� ,�U�q�|U�m�p���V
/۠�ŧs2V���y�:�;^Roj��x���|�
��
τy^�#J��<�otI
���\���N>��|.ذ�5m/����o��7y�~�!z�Ӆ/���w$�#
S����q
�݆ߺ�G�{�4N`�����b��y����ueZ

���1*lb�*� ��~
�͠3��ۼ(����<��&��*E��ߝ4Iˆ+$F\	���4pQ�ܚa/����7������֍K����T@���W�a_P{����'�c�K����kkf��k��x@���+���/�{w
)�`Hh �oP��
J0v~sB��
��q&:O9Q��9ǚ�[�|4�p�'T|ȡ��������'z� ư�7�q*
?�����F�̯82�8�1��þ	=G|������a�B\b�

�8�n�(��|�\t�R<��!X�~W1
l�a�!/�����pT&�6�>�pM�+)x����g�]�
Vl?R�ո
��q�!�
+45�D"�=� �X�0����^K��	LGy��`�c:�b:���G�}
�u �ȋ��
�"�6����0� (�q�x�
;����*��ao����
���wT7�=�‹	��1�˜�걓� �� �r����kk�ˏwG&�G,16��ysƛ��c�<����&<��U$0�]y��< �   N�" S#v��u���`���l-)w�ubTR
O���b}
Q,]�w
�B�t7p����`眕�"�Y����)!H^=L��tBW�Ò|����Cq���Фyd)݄8�2�ʇs��v
2��@8�זP'��k�OM����#�DàVP�K
;���l�Q���%�=f
+c
^�׶U����
+�T��-w��	�)�Ў�[��=���)m���ty9�������W�
���:���E��y�˨����n��m��3�:(U@��FN
�!F�6m�t���"�]ZǞa'cD���C�����m{����)��W m�;�T�t�
�ѥ��c1�q����V���U���:
zL�~��|�̦���L�[�v͡@ӣ:��NT��:�;c/pw�nǫG��

lW��m��y{��u2`��>����g[�
+
+zi�w6�e�e�|?+���x'OJ9��Q
"��>��Hx���?~��Ɍ~���A���K,>��D�4�+c4������u�&�~����|Goig���)���|��3����8�C�{�L{�ǜ�����7�"�鵟!���]r�8
Q���Mͻ����Q���(�g`�
�Gsdb2�����(�V�����k�%��6���#��!K7�N�Gz\(�8����i�qAl|�����ɉ(�����Q~eX��E��;J��s5���F�
�2��
��GQ�
.��̍n��m���?
�g���
+@�V�y01־�k�����:��!
�
�A�7<�
����&@JD�y�
�,-��X�n!1�j�s�G�,�r��L2
{��+S2"x�/�=����V�ks
 W�aK���_f�UE@�5�[a��u-����Ž7��bPP
��M0=�+
&���I7$��9�
#񆌳c�I���d��4H �E�il�8e,���D,��Ä�c�|6�tp}o�m����G�?vL�>TU쎄����H�������Se���]��K�'*�ʙ��f
��o0֑�V�����>������P���vpߓ��
��ó9
�
+MyX�s����s/�7sG>6�)���5�S-�8�Zl��Ξ{
����Ҽ���ktd���>�h0��=�8������J��D���
_
� y�>�9�j ����W
/Z�~x���+�[A��ܻ������z�Ԍ?t�*T��x�z8�‹��Oٺi��%���Mhv�Ayi^�wU����zeГ��pҳ���˽�&
�s���o朷
5>i����l�.�#
評L�
��� ~��
+endstream
+endobj
+1620 0 obj <<
+/Type /Page
+/Contents 1621 0 R
+/Resources 1619 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+>> endobj
+1622 0 obj <<
+/D [1620 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1623 0 obj <<
+/D [1620 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1624 0 obj <<
+/D [1620 0 R /XYZ 86.4 473.264 null]
+>> endobj
+194 0 obj <<
+/D [1620 0 R /XYZ 86.4 284.792 null]
+>> endobj
+1625 0 obj <<
+/D [1620 0 R /XYZ 86.4 202.266 null]
+>> endobj
+1619 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1631 0 obj <<
+/Length 3865      
+/Filter /FlateDecode
+>>
+stream
+x��[[��6~ϯ��³�0$EJT�}H���^��)��[���%W�3���{.�ͦ=3�`��I2I����CZ��39��ŗ�/^}
ųT���g׫����%:q�f�������2r���&�/�fsq����&��վ\�EU6�:���[{����/��~��
d�Lu�Z�L<[l_��MΖ���L�(u�;���(�6���x!�2�x��p�q��Jb^��y��KXY�?^X;�6����M2{i��_��<�>�ū�͘������9��j��y�x�6Bݍ�UZY�x��B'��
5���<D!J��I�qQ���++`����^4�4����MP�T�"|61<��߽9���������:'�H(�
��5�`��4MK�D�~y�����C���z���w���Z�X���/y�̗���a�Z)x��u�1�����Y�
3I�i����V
~�`q�Ni�����pg��V�2���q��Z
+���~.��Mh��ȓ��Mh��Z2��6�l"R�6����6//��Z��;|Ϛ���H$Q�E
�#E�{�;�`Z:aT�L?F��#Q=���T�>��oޝѰg کؘ���k��y��EF��z�wE��+�7n;]�8���gn}��AO��v�.x�J�b�&�!�-l����I��+�(3��=�hЯR�=x��6@���P�f�EK7��Bl��A>
+��M&4:O����0n��x��
+i�gQ\Pg�c��v�;&�]Pq?<Yq��N�DD��$��ٍH]�Ҷɀס	���zxR�/��#�
���lG���A�����M��oJ?�}�4F>I
5�x?��T��#���vZ8&��
ꡒ�Η! |O�
ib �J����G7�C
�
���6oň��
 �]��*7����|M^ۊ��H`g{
�8��.���
+�7���������1��M���%� ���j�R��_U��y at .
+R�h���e�W��*Rk���
H���阤�O(�v���:/��b ��X%^��Hd<��{0�6�
O�$`b=�e�+�pq`Ÿ�%��x��	�qn��y����)�X��)�|_'�2V�
+u���-�<
��$��c�y�q�4r�{���|�AI�όt(	b�R�q
��#B��tB
T��;��;!��zB
+d
%�#���00h9�����������
׌:4�G�N��D#��x��vh
�9 
W�v�o�}55
5.aHذW�vyʅ�=�?X#:m��]]!��X,s,e$ ��z�j�)>b�sӦ�M� ���	+UY�����
"	���]t����U
�Q�hʛ6+J~o���Ѕ�o�
�*�UUo�r��(J��
�.��5<��9x
*܄M
+��q ������[�亱���͝��g\���
J��bF��)9����x	3��:�4F�b�r��+�s��C�M �E]x�/�����ӛie
�P�[��d���}�L�F_ݹ�*0M�� �:%X=��ڢoIR�8��a��
;�o��y���Ѣ ����K�
WuQ�nXT��n󺛁

�
���u�]�����c�|�'�*��EY�kfHhs�dC ��$��ﶫ*L���x�hH֓>|���F�ӳ���urS��~�n��%"��������l����%�"��9Hig(<k��
Ր�� X5d,fXu8�B�S��e��6��.�Ԁ�`��m���
x��~}˂���0�e�E����R��,eh�"�͍�g<��{Ò���'-�?%m��A�h��ltɟe�
+�D�ݣ������HF~|佖ůREyMr�
�̒���������o
+��l��u��Aw����\
��}�&�g(�s[u��@>^������*2���|C5��Y�Á�,P�^�R��n�D�(�}�a)�Ƌ
^�C�l�팇��ߵU��H�„��hM�W���qx/�e��~�=�{�בq���hN^#[ kn�,��ρ[}=���
��
�x|'x����h��UWd������\�܈N
+�:�P��h ��
�(1�e�M�d�-�kj0��� _yYq,���%��U���"krnBq`K�?�E
��PpΥS������!vE7
G� �lO��ӈ�\Q�
�X��&�x_�FjO2s�:���r��p�W��Y

'q��;��2_�9�9��fx�
+[�v�H�����U�V��6��~,��>یfh�#�
��#N�
+�a�Ʒ٢�)�2�����Av�U�,�()���x��
� DD�l��Ņ�iݺ����zkL������!��8R (�J[Cϱ���_a}��w�M�/�vK��>��N��$��
+pjȦ��>����ʥ;��!�㓯6Y����"��sG�)����F:;� ���
+�@.��#?�1h�.B��( ��%3N�@C9����W�����@+����[�ݰh�]}���C
�v
+Cz;���N_����Ќ�y
�i>���]����p:�
�L	
��	C�Z�tPo�F�u�=
$y�rӌ����ʞ�lv����E�	)b�d�.�@�\Ie��2�$�FN5c�Q��O���:�S�(�_�U�(�g�Oǵ
�3K|㢅�3K|����L����Q��'���
v&ntb�Cb�
g�.
����P��|��
�>0�K�8�Q�@�&i0�ә^Uhv��ӵ?�E��Eͻ#���
��y�c
"R-�G��Ư�[�
�
�O�d�� �.ٓ�p%�!Y�q�-�)����G�A�38�mE�L|�!�Ή�xh�~

�N at O[m@	=l�^�=a�٢���.�KTК�+
 �����u�烐��)_��~2Cpm�O�s�
�L`� 
�~|�7Ɗ.M�C�F�	����������4T ��Q���S�i?�5l�Uɼ�7~y�U��,l8.�`+m�:`!���#t�@�؇���
+X�Ό��Lׁ���7
ɸ�� �J�t�'0`	��5�����5m�=�/�5����c��b�
^�ll��G��q
��=8c�m�O/�mz�~v)��
����'N\n�`��S!g���S���6MgZbԞ�AbEI���J. יV�j%���?�Y^��<>�J�0���2 ���?e��[]*� ��!�ی��X	�*��Y�����q��)��+�O3����>� ��M��~����&/�я�=��3�s -���Gq�HGw݁���P�j��v�XMi)�����
a�$���5�;vjV	�̣�{r��T��5�|-�p�~�9 T}-��7�ǘ:�#ގw�������8�Q:ԟ�X�	d��p,�SYe&ןN]� 
&�{�
5>��X�8H	��\�~�>�j賥
�1�c��$�R�'�@�m�Pn�m
�G�B�zz
�L�
���I��P��R��>t<��ض�b����_
Yu�Q;��o�6�5�3<V �8}*�'F��-!ؓ������_�Ǵ�8�לb������^�`U�/�����o0����#.
)��~
��5JiN�`>�Y+�̮ۨ1V�S��@9�'��3�!�Is/��m�}e���
�T�k����,��a�X�G\�~���՘����=��#.A�bt�%��b�9��4޷���%��%֝)�5�$���1C����&����t�
)���t��
����v�?<�2�٧b�C�?�hob�㕪^vŤ:�L#���d��P��#�>z���!�X�62Ӣ[Y���"�B��Uv�v^�
�9�X
ߣ!�r�R%2�{)ˆ�d�����l���)Z=����SM�H�yN��u!�φ���K��
g��.
�F1˃�
>�/�J�$
:�}=��A6���K�j���\�8����@'�
+endstream
+endobj
+1630 0 obj <<
+/Type /Page
+/Contents 1631 0 R
+/Resources 1629 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+/Annots [ 1626 0 R 1627 0 R 1628 0 R ]
+>> endobj
+1626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [492.502 590.261 522.722 602.216]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.956 520.942 126.679 531.79]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.3) >>
+>> endobj
+1628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.306 61.606 298.777 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+1632 0 obj <<
+/D [1630 0 R /XYZ 86.4 726.045 null]
+>> endobj
+198 0 obj <<
+/D [1630 0 R /XYZ 86.4 566.23 null]
+>> endobj
+202 0 obj <<
+/D [1630 0 R /XYZ 86.4 337.943 null]
+>> endobj
+1633 0 obj <<
+/D [1630 0 R /XYZ 86.4 224.732 null]
+>> endobj
+1629 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R /F38 785 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1636 0 obj <<
+/Length 2745      
+/Filter /FlateDecode
+>>
+stream
+x��\�r�8��+����h�	�.��)�\�L�^��h���T�3_?H�&D
+���d1���' �
Vx����۳�.�\�(�T�n�WJ"��h�$#���귵��Tᘬ�Ye���Sl}������
��1��/J�ѿ>�|}S��uV���~<{{��3�H�GR\�6Og���W[���
+#���湧g1��j��9����_�l�P�
D0�h%9G�	c��9`K�v)�cl�����|�˳�����������2ݗœF��%q9"\�8���,�m�)]'�y��XT�}�o��$�*~��v�Y��I4��z�ɷh˄|Y��4ɷ�5A!._����U;�{��’�$�JŨ�$B*�:y�kP�hD�ր�	���K
ݙ`�0�a-����%���F�I�=|LR$�ø<��z�o�i"&O��!A8����K)��i��b��S��� &�������O��\�ܼ���7�iZ��
�k[D�I��X!!Y(?�絘"b��M�?���{O�B�Po�9I; f�sej�I MƩZ��CZ�O���E��zN6��0�i6W�0q�z��CZ�
+ n� Z��
���$�ZB:cDbk����&q�K��~����gw�Ȯ[�A�e��T��s5��<
�*�L02|�?��t*�q$�"$"��M/�
+d
+~K�&��l��
�L�&�l��z߶�m�>��<�~�
�
�_����d7�{0�!�@��x���� �wY�&�����N0Ti�>Z�yF��p�贸�r�l��hTc�
+"��eA@�K���&�l�$��eaɯӪ��'�N�E#��cR��
����e���2ݎ�5�B�Z���Z���L�L���	�1�)�e��S�"�w���6�Uj��v_f�E3�5JX�wIe%i������s�"6�_��0����놚�EXgqX7)�7:j+wR���sm� w��meO��_
+�����Ep
0"���O�
b�,���%t 
+�Ρ�C"�7ɿjc "��ݖ��N�]V�t�_�۲��J�M�t�|̳ï�k��?%w��Scؗt;����
e�F:�˄����7�z��,���o7Rt�J��3>��q�a� ��7�@���1 �C�
�Eb��0C7g&���+��{�"0�{f��2��R �90�<�&�88W`
+�����IƎjvnv
]XW���
��Z�+zc�!�X&"�$g���7ð��u��Nw8����-�F�؆�]W�Hq&���̳�/�kRO��ll�/
�P!�da�BR���x����Fɦ.�
����]Z&��jS���S>��r������ ���`=�z0�!�!2~�q4�\��Y�y�2�}��Id�=<v��Ʊ=j@�T��3B��2��"#�J3����a� c~M|=�
�Cj�"�2�8�"�T�+H;I�YZKS����r��y��
��,�U}] ��q�x�1�Ĉ�e|�R��)��Z�E��m�^mA��ʐԺN��0�����w�v
����3�Hc�C��#D�2NN0R2:��M��- -�Cj���5j��
0�_ �G��E�mb+(
�@
��" ���zԛ�L�ɶz,���P^7=&���u��G&��0���p�E}����0�Z1�i7���Xt��5�`MjŽ�~r�z
r?�.���?L��ĉX�� [...]
+��i�#��o�9Bf#��hc��wz�U�ui_؏��Ӊ!����w}u��~N6
���ؙY8�!���]��1����o
��7]����t|�0��p�)v��m����y}�v��`^~���1m2���r� (��+(V��[�]��3W�L�z�-�pp^�N�"��b�Le%
IF=���
� b�
 ��9��L�~7w�����U��
+1�B?��E����P_�1�wYb[��l�4��S9{
B?�.Ďh�ڀn��
F1d�W�qu�b�	��
`Ͷݩ���߷[d�!r��6B��gvW'��$A�
+��3�.�@=�\�����*qD�hh�H�d}�
S�t��\�v[���A�S�<�~\��
+�ԏ(
+a(  �t��)B~�5��&�9�&ǎZ�H����S
���v��I~2�ūQ�k��V��
+���&O�pNYb/��C9A���<�~�v1�O�T�`C���r�uJcDx�Wf�y��2��;�H�����/��\��C�1�~�5~Q\s:Q����H��p|�D(��4|+����W�Tkq�^}���K��\���%�,���rI0J��X��"J�E�0S�ۍ�?}����=������CA
ɏ$��ن 
+1��t�(ўێ�ۙ����
��U��#�p C�%,���q����$��k�{��qt�.6�E�^�:��i�_
ׄ�G
ކ#�!4�|9�I��s�v�m��n,L6�3Q�)wa�)�
'z�p$Cʡ���2 uQJ@y�e��=��m�m}K!
�;ʐn���e<�Q��q���
�������ִ����W��⣾H:��e��ng�2�O1���3�>/��^t<ft��~�\��Mo��ʅ�d���
+��p2�	�/�
vG���8
�@���L��Vt,an?r.�g�W�G�c��`$>]��C�C�����S;
+endstream
+endobj
+1635 0 obj <<
+/Type /Page
+/Contents 1636 0 R
+/Resources 1634 0 R
+/MediaBox [0 0 612 792]
+/Parent 1604 0 R
+>> endobj
+1637 0 obj <<
+/D [1635 0 R /XYZ 86.4 726.045 null]
+>> endobj
+958 0 obj <<
+/D [1635 0 R /XYZ 201.03 656.491 null]
+>> endobj
+1634 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1642 0 obj <<
+/Length 2943      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�K%�x��|�:v*��Ukɹ�9�$$�L
+ ������ 8|Ȥ��TN���~��=���
�x�����/�
9�4ף���D�
wD
6���ތ%Q�Š��*//&�|~~��ٻy
^_���zV,��
ce��������g
��#֐U�J=�,���NGS������_�I��������g4�I��2�a�)�Բ�v�0��o)
,4�
���=�	����
+�b|��8���'���
�ݣ�T7�����Vu�֤͢��� �q��߆?o��a'c��B�]�u�I�Qxd͂HL5�u����e�-�"q�!̩f�˸��4qFX�
+�R5�`D�:����K�ը�&�&l1I���l�4
kl+粬��	Ek�Tk����	���9
�T>�C>������Z
��������</��$�6Y6�Hժ;�b={
�a�T��
B��})�F�}Cn�
I$P��c)
+:�*ZJ|��|,O 
�e6[�s;��
O��6��ϖ7�-�c��)MbT=
����p�����1��oŞ��B_���vV��Y _�~怜M9T��-��2�
�
.�i����)az�?%N�P*�8�
�;I�?��'��<$��F�C`kF `.�$ȣo�2O�­��
���Ԡ�.�?ו��!����a]QNS�a�%eC8n����� �2IO�<G����Y3C�eĸ���}�[-ι��7�
+���̳yX�����dǰp�L�+lO�>��
+L%{A 
&v�:A�'`��q��
"������|R	�I��� �	�!�5
�!X�F��ڨ�v��2	�,
#
�U�P]y�@�f��O<X at 4���
�7�F�%Z�}u�M�v�3\��æ鬪gb���5����e*jKZ�����$t�V�����ׅ�����J�pY�����
+����^ψSj�Ҙzof�(������*%����/�g��a���<	�C���oS
���C=;��ca�� ��N�g_
+�%�- ��Á
�Pܑ@�`<�FY�(i�&�e��:��y@[�8QN~�xy8�N�

+U����Nk�
(fp�P�bG=�s 
��II%�#H��PZ�4���ጤ��b�CW�Oĕ�n
��d�X)
%
-�k8U
+#���S���A�
+��.�|�aA��f�K%@H��Z޷�P8p�0���~:2�t
+@���T��
@��L��
@
��[�|V�ߤ�ځ��eky��}\��i�0����
W��H
�cT�5D$8$%m�ߝk3��l>�
+��3�4|��<Dwe��`CU�U�q�bG�+�/�-�J��t:|����j^�-8
?!lR
p#��ڭm.t�����e���K`�E��z9���:Hl\l)�|O5�D�Al<:
���_ �P��%6u��UM%‘x�}���

�;
+|�S�J���ޣ�0os�:�P_n��*��Jo$�kf�gY�nn�âNg3T��PrO��E�;���{M}w X���*֍̖��c�M�(E����HK$]
�k��,j�B#!��I���t��/N1��"_�����/��1�1��8��߮÷?Vٴ��U�W��r�?B���++�*_Vp��̷�=�4J��^:�?��r̥���`p���&����$�Vh�hk�?#�tX�ļ�j�z�'I�������z�=PB�\c���k�ry��k��@n�Il��y����r	qL(x�D��9�f�
!(�w��x���
,������f����jqY�w�&�Lk�~�P~؏5�p�{��vxW+�!D�"<��ׇ��6��:��<�Ӝ��O_��f�,Q��A�@
+j���@4n9��=! �~�!0¾�ѭ �V��8�u������;��eL�0�δ���+ N�u�R1p�A���4m��9�e���&Y��;���.�O�n����6Y��P8=��fzN��:{+N�/�T�_�<!b��2:<W�<0S�oA��'����uV�hf�Ћ�U�L�}y�Z�窷� �L�
��
Jpy��Z,�
���
���vx�D�9v�
ݱ�}8�;�7�����y
�.�h�
�-�~���!�X�_���N�%��BꇭM����+�\0�ACϒD���6g���{�����7nق ��Ԡ�#
�Lj��m��3sNu3`}��~3lcZ�#�[C�b�Py��`=�Y�Ҙ����%�c�w��m/��i^�4��"b�'S'@����(}ˠ�^�ʵ�Ąc�"�5��NaQ
 FH���6�x�u�<���p����Ϟ=����튈g�f+�
��^�w��U
g�
u���OL�Y�P,��V�	��׫�<Fo�׻Cb��E�n�I
e�4�R [...]
c�d�.�@�^��~�p@��-§�azU��?��2�f�U��bT����<o�?֋f
![�wBu���:�T�;E!AR���信�á�q�|ަ�-���/�ַL����7�P��!L
+�J~��j_�5����
ۏ��� �ɨ �N��#)*�_�7ѻSu���)4�����
A{��/�ُ����]���>(���~$�K�1���n�* f���N)�L�m]]�A�y�i r�f.rp�f�}D�*�n��2�W�eQ����5N�U��D���c�C�4��"���e��
Ч�t��!U�,��YH��2Ϣ���Xn�k���X����OA��j��$ng�/�
+endstream
+endobj
+1641 0 obj <<
+/Type /Page
+/Contents 1642 0 R
+/Resources 1640 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+/Annots [ 1638 0 R 1639 0 R ]
+>> endobj
+1638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.962 406.28 292.433 417.128]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.1) >>
+>> endobj
+1639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.561 406.28 340.032 417.128]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+1643 0 obj <<
+/D [1641 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1644 0 obj <<
+/D [1641 0 R /XYZ 86.4 386.384 null]
+>> endobj
+1645 0 obj <<
+/D [1641 0 R /XYZ 86.4 225.23 null]
+>> endobj
+1640 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F10 1095 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1649 0 obj <<
+/Length 1944      
+/Filter /FlateDecode
+>>
+stream
+x��[w�F���)�Ԋ�������!u���8��N_�<6' \!�ͷ��EB �Q]������gv~Z���G/O~�<����AFR]N#-�5H2]N���Ѓ!�ؐ��j�^
�L�����������t��S��l���b9/��2
|�|}rvy��	�8"��4��xq���&p�u�3:��]��83�·ytq��	�n��qA��J���RÂ0&�Z �X�
��#��'
�u�
RZE�D��ҽz��e��-�Ը�H��f���a�FK
+{�R�)p=t;�b3��h>wC/oi	 	bT�w�t>�TT�?���Z���MF��0��~����"LWm�
�
a��,�ŷ~\_��Y�*C�o�X74�L!	��D!#p��'�q6��2��7z?$D���:�� �i��˫ZCt�"U)��i��
)���,]yg��*�q�P
�Q>�
P���^
H��_>B��S$�������h��A����9�f)d{���
��A�d���+Î#ɾ^��Ns�R���9�/�Ѽ��_?
ev�PS�aH�Ɣ<ˮ�E�Z��q�^��5!��,␐�lQ��IH""�:SX�*#;ROS]�*�%�Ҫ
+�v9��
�f3qīi�
�Z�إ>^μtI敯O�3E�
Cap���
(�G[��B���'���>{��K�wl�~B]�̐�u�(��a�T�غ�;$
+�Mq���eְY�o�˕�%bge�yWY�YV(�*�k���������ﲒxUI�*��˨
+eb��u
��q;"
͋���	��We��hg8���t�l&4��~�T&��}��}>n�`WbV-�[�X����̂��4�&�3��U���k�P�6f}����;�xwzzvqё�\ ��r5mKם��
+q�
h[��'̣���~^éQP裗?	3�*��d�����*����j�NHTًt`�����ٛ-N5C�^�º$�i:}����c�`�7��gk3���2���r}p}dTPp��Q���*.�0��w[�p���ҐՍ�B-a��hU�h��`Ե�.�%0+���"�p5EXʻ�_@�#���,�.�U�b4�o
+�A�1��0F�C��&�A����B�����mE��8*��dkSG�$������j����`���7Xo�;m��E���[gy������F�:�d������1�/��$���>p�D�E��a���a�E���_�����Y�� �b\dY2�
��#=������nMɲ�w�?U�^��>����_A�m�܅D
�x��϶r�fa�dX�
�
j�W5�A삹-�'bb��>`�^j�@�`g�]�UΚ����}8
��p����C%�7�x���$��;���q���(��י�����]�U�S6I�-�����-�鱷ݔ�8F*�?J�4���T[���7��e�V4�����9
�n6��Ϟ��w��
�ړo�HkB("�:Yoƃ��tW��U6
+��pp���
�&���9p_�UN�����y
�P��7yܪ��mEBy�U��Ϳ���*�O����
�1.ۃ��
��A�=��:���.J�V��;�`�' H
+�
L�;�<��<���[r�5�OP� PM�I�	�K��)R.p_ US*����SD�=�����N��{����F����1���vJpiiW 1�y\M
�
+���tjw�ҝh
�aY���B���!Bt�5Q@�X�H�u%vo�� 1cν�G%2�p�"�H�=.���H���=�n�ƮbqW�4c G֛yk�Gy�q��`�1�@��Υ�����?x�+� ��n~� �"l~��%M�
+�d
��E�柧nb_��[S��w�v����
%u����?J�m_'����O��� >5����,�i��wQ��n ��U`#,�y�x��(5��
��1T���bx
���� �����
+endstream
+endobj
+1648 0 obj <<
+/Type /Page
+/Contents 1649 0 R
+/Resources 1647 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+>> endobj
+1650 0 obj <<
+/D [1648 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1651 0 obj <<
+/D [1648 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1652 0 obj <<
+/D [1648 0 R /XYZ 86.4 534.188 null]
+>> endobj
+1653 0 obj <<
+/D [1648 0 R /XYZ 86.4 367.714 null]
+>> endobj
+1654 0 obj <<
+/D [1648 0 R /XYZ 86.4 201.24 null]
+>> endobj
+1647 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1657 0 obj <<
+/Length 2289      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs����W�S�ɼ����:[��nU"�d�� �������_���	�!l+Y� 
���g@���&?\����/�:q�i����j"�
т%׷��T5�
++�w���β�r2eiv�����v5+��f2�NK�*7���Nj����`��&�"���:�=\���&���DŽ�l���{H�p���2�������ҡ�HŇ��ȹ�P����*�"�%�6R𚒶�)G�5�v�0����|�ꇼ|�mʫ2쫁i
�̼#?~o�<A~ڴ��[I�rA�K40.���#�fDpo��ev?�*�ҿ�K[���۬�
d�{�
X�"���on9�h
�?|�����`�Hդ1e\S�,H|�of��=��a�~ʘf��
��K^�?��,�1G(�t�w��"������"/��*�QV��	7i�����7H.�-~���W���)�Ԛj�'i�d�ʼ�A	B���0�
+�A&���i��5�ū�~�������
j��0
��ਂE�9�´!�rOJ ��]��S�!Z�ѥ��Z
�|\/n����of�Z� � �
+��	m��́�2-��-Γb�lm(�;�M8O�M�'��z
��.>�7˵�;C����ȟ2
�Yst��	�||
hOR��)�+�lY~~��RH�Ct4�D��*��1����?>����?�
��C-����G��Z`�����!2�3 �$IM�.����\|�L�U
���V2Ơ��`0[
d��o��b_
+��(o� ��7�{�kݹ�w���b�*���6�8��g~��%�D�$�9'V7S�|j
_|�(�f�m�M��ҐcqVq�nt
K�.����(9��t}�̛2�>?5��Mm�U����ѽ��Z��H�s0���T�pjT�,��Iix^���|}u5ߊ�:j��}���Bo��	K�ex
�`A�8�W�3��d���֛�l�o6w��2�M^')Їe&�({��%���R��3���O{�Z������������ۡR��Z4��wr(wҸ�z̥���Ɛ�+�L[�X�;��X��}��GY_ 	)P�V��x����@� ����a��;$��}��
��&���E�:�yX(X��N^@W %��ǫ`��P�Hu#�

-
�>
$	��.�Yx�;C�dmA���l[<�}p(�
+����Q
��n��6����O�kq ��&���*��&#6���M�u��Ċ�����KB��
���U�?#��v�QV�e���H�	�d���[�!E83F5AR��K��߶(Qw�߰CuGʪ����!Ox�㱬��z�S�_9�8���zf������f�	�W9yHJlt�(
Ii��0\R �v
���eG`�1�F
�b�u1�RT�%�s���b�
��a�b�Q�0�06
+�����լ�f�7��! �Q������

���a��}�vDG��mU
Dめ��� y����
-Y�h|�����97�
~�y��O��]�>�0����H!���+l��fY��XRq��Ճ�8�
l�J�
��P��e�� 	�Z���o�,�r����|�����tC��_'�,�|��?
	�~rQ.�hz������gB���
��"[��p�
#���
\� �Q�K��P����#�������@uK���gs
+�jo��.�M7i	ml��c}�jY��
׀,mB
����{�Ȯ�����1��]�%���Q#��5�~�Fop���j���P����=���H�d0M�4��$�/�{�#��l ���<
� ��
`��T��}�T-���
X
j#��g�t
&4�ԟ�f�{� ��+�_���������w?�xDt��f[�Q)�
�P��(�>�z���!�J
+�|Z�V�������"���U�z�]���w�����Cy��=3L��+�1�b}���:)g��鈡:i��@�����NbH��3>;
�M�$^�����������h�u�>�y�2�I+X��`����E���
+RHy����n�gh
:g���3���wf �T}b�t�z�>E;}	]% 9L�c4�.�z�1��P
O
�!w~^�U
��i4����h't����C4ܩ�{�VyI�

[�kؑMY�y1�K�:��~.�w�턤h�J�8^U��r<=�����o۟3l��(�H�;�ҟ�۟���x�
�OvC0�
6��/�]��
;i;Jk	���=�9�3���w3
iM���,���,��fg�P�j֐�y5����hy
+endstream
+endobj
+1656 0 obj <<
+/Type /Page
+/Contents 1657 0 R
+/Resources 1655 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+>> endobj
+1658 0 obj <<
+/D [1656 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1659 0 obj <<
+/D [1656 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1660 0 obj <<
+/D [1656 0 R /XYZ 86.4 539.288 null]
+>> endobj
+1661 0 obj <<
+/D [1656 0 R /XYZ 86.4 389.338 null]
+>> endobj
+1662 0 obj <<
+/D [1656 0 R /XYZ 86.4 189.559 null]
+>> endobj
+1655 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F7 1094 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1666 0 obj <<
+/Length 2798      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s�6�_����D(���=���N�����!�#���T\���
�IQ�
���$/H���~� ��rFg�����䧟���$�\�.�fV93<&Z�����}���[��]���ӹ�"z��T����E���UQ�����
��m��釋_O�.N>�0`Jg�a���z�؜��@g�����ٍ�n3�"&
Z�����Nh���D*>E�1F�e-�
�3m-a�Lр�9�ZNs�v5$t�3����g���E�>_$���dQ�����bC��_0��*�5$��!��]K�CC�Fͽ,ϓ��ͽ2�_a���}}�N�TWѿ�ߘ*���f�ɾF�5�=��)�a¶��/�`l��D٤��~VO�b]]%
�	��@�.�9�p 3g0#.=�i�(���ț���s�4�.V��\
+
]m�E��`~�sbM��Cӟ���J6�ʴޖy�y%���.�i�Z��(��e��'��O��n}�f�-N��V��n&����
+'�J��`0�ك�2�ȎsU�b�����g���@�B��*�}�.0�D����
�]�7�b�-�ŭZ%U�rC�L?mӪnȻp�x��=ˑh��y�
��_��:΃Q�U�=+��M�U�����ϴ$T��sJ�f�1x�
D�HQ�Z���n0A&L3A��C]3�\d�ރ~ܷN�!�w�1HBD�~��u��~���͑b�|�f�����(��yrA(my��Ey��~\{�r&�'�
+aμ
��4l� C��Пd�E�=����d]�^��� -+ž�?;�F��+�l
}�G�v�n4����
u߾ߺh�~>U*J��t��>��W�C��Pg��
����pٵ
Z\90:�B4�4�A����,�Gb'䁘�+8��ފ<Hl'mE�D��g߇�[	%�1|))������g��S��,r��]��%.��^�m}
�����Q�et�+�J��>z�yc�
���j�^���z��@���e�>�Ӕ�2>�ꀔR����#L��
ǎ��(-�>�7�^��
+Ɗ�TtWk��!�KOf.c"�GJ�v�/E�(ߊ	e���{�g�I	�l44P
�[�%`��T>%n
�Ӈ���0������
+����,O��*}�3`,��<��Ђ���U0����z<�S�A �A��p�
j�GYỏa}1v  �q3�����@A����f�����~�߷��5���U�Ȧ��,Լy��iY�b�7�H3i
�%�`8��e�oCO�II  �K�SD�rA��T�G
��k�:�5X�Mӿ�/�L���b�1�4. �l_\���2��$
��/\��8#e[��xK+������E`+��lK?����Ԕ�m���X|c����2���?��)��5u��z�Db
.�1�/��B|�$��$!l
��ۙ���D��R�(X�),h
�4�4�|�����k�p�B\ÎN\s����睢�k&jz��փD`���D_I�U����c
�bM��
`"	X�l!)��=0�1�L�c�u1��h0QO�&��2�@(3ش~S�i5�]B��f�ٍ�B���?䭤�V��"��U�ˢ!&�bt� �U��Ԣ�f� *뙈����ɧH®��w/��Ë�^n��E+�EIr-V�}��)����ks'μ#�A)4�A�z�_�d}�	�:|�$4X���I`~$f�x�I
RI}L,��ŝJ8#�1�z�t �:}�a�z �t;��h���aҾ�
�
�){�&��XJ�����8��Ϯ��^������*�m����(�{A 5F<���gB�h��c�5�1�SeDa�h���B%U�^=� �R����`J�W�_	��m��0���(�j�~�
��M���(AIIf���1�(�Rʪ{`�c0
����b�#H�`���1��e����	��{���d�
:��jiܣ�,�!Y��
�U7�7�[6Z7RN�X�V@�F���F�m��FW#�
��%;��y��<v
B�E�$m$H<����y�L�������-8�06̘}�ݡ	�jw��ܱB  8*�%�s4N*���^�V=ʍ����i�c��)�y"m0k�,6#�!Xm
p��ζ9%�1�R������<��kWp����B��6��@yt�B�d.=[�
+�����e4���Y����E�	a(o���pU����mUCL
���n�}�v��9^ŀ�L�
�-ڤ��R�ԌW�t
���t9��F硲YdP&a
�L!E�X�ᐰc��jG�����
+Tݭ;h�}}�����W(:�I�c���fUT�,���R{'Ɔ?���u���.���k��F�=��UC߯y��/������Zyg�K��/}D�q
n4��ds�N��ɘ�n�+�Q(�ܡ 
~���skkk|��;
���-	���l�-S��l
+t
�(p�Ӏ�)-���#
��'�	$e��X�3f'�2���]5��Ղ���=��.Ӽ�v���d,�c��L
�����o$lX3}��
&4�VO�'5���g0�5��#\�`
���nd|���L�$��d��bY�ރg1����>D�;kx#��;k]Ll��~R��m�Y�V�/L�v�Wt���L?'���:��l�U!&R��k=��ݱ
��:����w�^e9&��`�d�
�ꌪ�}�����X���$POm��Ȇ�~���A9�8زؿRb́]%�0�>�J�?vwU<�'ㅩ`J��E��.w���oY۽;�n����**��
����
{�€l������J�V�s)
+endstream
+endobj
+1665 0 obj <<
+/Type /Page
+/Contents 1666 0 R
+/Resources 1664 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+/Annots [ 1663 0 R ]
+>> endobj
+1663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.361 482.971 303.083 494.926]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+1667 0 obj <<
+/D [1665 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1668 0 obj <<
+/D [1665 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1669 0 obj <<
+/D [1665 0 R /XYZ 86.4 541.371 null]
+>> endobj
+1670 0 obj <<
+/D [1665 0 R /XYZ 86.4 375.842 null]
+>> endobj
+1671 0 obj <<
+/D [1665 0 R /XYZ 86.4 136.551 null]
+>> endobj
+1664 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1674 0 obj <<
+/Length 2188      
+/Filter /FlateDecode
+>>
+stream
+x��Ks�6���<�R�B�8�
�4��f��sJ{`$�҄"]�r�~�.�&��e1N��bI| �?v�i
\8������'ϙ
BJ*���@K�EC$	.6��Gb�b�-^q�ZGI�\�E�:����C�.wYZ,W4�\/$Y�y��ٳ����t�R7+��2X��^���
��9���:x[]�8
�oIp~��v����r�.�
+A��
	"J��E_� �;�<o�%�Z����?����N�
i�\�d��r%�X���^ܾ�0��$�
c��a��jqH�rw��z���nϽ��"��	��.�ւ�k�1�ũ��������g�(�8'� v�%��������f������(G�]�$�N�<���O[`�ǵ��=Un��p�/��͑ƺ
F
��I3
upL�̰D�����.-��0�'�c�f��\p+���6��u%���6'��ՍVh.�bm�]F��s���q��ˊ,�Y�)�~�H��Q�A��H섲
++�p\^F���{�#�y��Α㢴'�Y�%�<���43�1���M��
�A��ݗc�۬�=���r���ˉ.r��"� �ތpe��Qbϙ�:-��(줺7�C�q�`�����\�
�4�H��-iTKv�4.z����nNu�8J�w����&Z��z�o�B.���,����]�k��������x�k#xeD
����C��B�>�?,���1�����,��u9�9��8M
 凗F��֞��/w{'4�6g��Ʒ̒
1����T���;,˹�"O����{�/.j����b���a�$��L9�
�zE,+B�v�?����F=(!�:�ns̤_�f�n?��]�>2c��$��(�}�i�$�
+�{�c���O�>;?�pG at +(��M�Ȯ
Z�	63LQ^�N�u�l�ld֖6��(�˗�^$����$��Ѹ�0�GW��J?�BD�l!�)�����g�t����)T�|�����_~��:�h�kk�b
+l��8��VP.�t�sXAy�)ߊ}�)��0�A�5Y����A
2�lB�V�#
F!%~��ߖ�!
rrW�0�X��5�k@�a�U�x(�ڀ�)�R�j�C��
+���Cʨ]�Ǹ|qؿ�L9x��O K10yD�
����4@����m���f�f���S�}4��:#��_�R�ڏ1=L��i��D� ��aa>��!�!!�o���vh_���v(䛉`]Q�!6�5ᇸX�*�vWPB$qK(�M�;���5�M�N'�FJ�(ì҅��.H�$m���T:�
`NT�2ܟV�05~U�
K��~%of�6�Ɠ̕;/�e��Vb�%rێ�[���,���ŹU[����ޱ��p/�
�z�ᔡ��Ӕb�ˠc� �6�1�n7�nc����[@�0=��6��o��f���&�n��[��b4n��rG�[W�����|���lxN�\�a�����Xr�:&��v�ڎ����D�Q�'�f$�����dW�w�ȧI�
�L��f�w�4�R<��/ƨ��i{�ނv'� ��oNgR ��,�AS��{p�
�:N�:=��/9
q �;8=��.��
+* 6��x�N��t�N�ɺ�
+Q��A
��08�
�Θ)��(m=�қ���@:����J$���J2
����$�
�MƁ
<��"O�m& <�u<�<^__����|_�� ���e8�
u���
� �����C;s|�֥�ua�ceA�b0�u
���d���[>�U���"T=����!�6r��62��n�U�̺ڬ���N�os�G�)*��]A���;;
�a����뻞�r� �����0�O?��@{
������q;�k-�gnn��|�P��fO,��n7��!,^sHM��`�
}:lo����>�5����X���P����usB�8��I���>k�q����y�C����axǏ�+�5�
!�4��P�9a�c��!�*jF�	O��`�lxPߘ�����	�K� jg�.jW��}�"�UBe�֡�a�	z�(lW=�{�����
c��n�:���ydkI�+����g����A�	�
K�iJAF���'#����E�͛���:W�^����qX?�RW�P�w� ��
+�e��il�o
]�Ь}���|�o�g}��'�,�!�}��_�n�}�
�U����F�����w�N�~u�����6��P�6m>�Ҧ�3 ������
+endstream
+endobj
+1673 0 obj <<
+/Type /Page
+/Contents 1674 0 R
+/Resources 1672 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+>> endobj
+1675 0 obj <<
+/D [1673 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1676 0 obj <<
+/D [1673 0 R /XYZ 86.4 492.501 null]
+>> endobj
+1677 0 obj <<
+/D [1673 0 R /XYZ 86.4 346.034 null]
+>> endobj
+1678 0 obj <<
+/D [1673 0 R /XYZ 86.4 199.568 null]
+>> endobj
+1672 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1681 0 obj <<
+/Length 2537      
+/Filter /FlateDecode
+>>
+stream
+x��Io����_���Mg_��C꤅�֯��^�
h���ʤKR	����B��(ڊ٠@{�hr���
�F8���볯�e22�H*��M�%③IF��u�!�t������v�d��o�ƯK_�7��
�~��>��������]����3HqD$i.���ه�p��/�G1��On�}ęA������g8=��1�N�!� �I
�AI-�Ql
+��� �	���
RZE�D��x����~�ֻ2�v��^&��4�QHhz:A��J�S��v��f C
+k��y��:ڛ=�%@���չ�t)����?c��
��g�%���^�K"���cx�V�2{h
��}X"I|}P0��nA�|�,
�M�Fʴt�X� �%2�5�J����H\7x��b���O�=`ĩ? ��
J�:�J	2Z7�VE^�I��:�=�UQ�i�`�5^I�^Z ���
��x�+3�ňX(H�ى[k�4BF��t�����0��W��^�����]
��)��f�*��J:�^�W�I��n_>z��1�j.aZ����2�m����#J��^���WLDr�?o��>���d@�sT�����P��,����]���
!�d�K���#�rtG�m���qU�����9
$Y�7
�[wj�
>��r
f��	#/�^.��2x~��;�t )�
_�Y�%[�i �:s�2�*ٮvۤy��„_
$��]
�Vuu$I	��6�E�EpHPD̐\[%��.w�߬~��d�������d"����������C������ar��H����%['�"a��z
+ؤD"L��
��A�В�y�O�_y����8z��o�8���8nm�Hv3B���@N#�PD��ާ7@қ�����T�7�F�i�W�l���]���9D�2�~瀭�<���H����\5*�,O�4)
����E��w! g��x"$��,ouq~(�V�Xr�a%�+�xr{�U��*�
a�#���y����H�5�⥵�	��@��>�O#"eH�����8g��=����:�:��T�
���5#�b(KZ�fV�-;5��E���m��z�DS�gI ���
��}��{B~
�
r���k�l�<D��R j�%�O��!�-m���pE�[�[7��n����u�Y�uV���5
��'�~�7WA2�a���JAE�ke�S,��
+���"S��:�\�렩m$kD;iS�&[�!�&b Lc� �
������WWS�,lX�W�����
U��V�/�Q��%�M���`�i�x�[�Ҫ��M�_���?�@4Q}w�
�N��YDGm_�<���8�b��d�P*If�H/����TԆ2���F�;(;m�X�� P��
*��Q��EH=�2������
�!��Bۍ��F�U�O�?0Q{z��HG*~�
�.�)�R>U�3�e�7O:�H�Uu�׾pZ�)w:
CA�_��	�����bЂ�X�wq��1c�|Y�0�P��Ⱦ�|�#�m���,ع������r�+f�m����'���Y���p�'�M6��f�}b��)�M�ET7ݰbU�k�of�ha��?�9C��
`�o^�A��~�r�fT��
��b�^�
��(h[�}�^�پY�9��
߳���b���f������aA��
>��`%��4���j����<6�Rsp@���D��_�׋��Ʊj��$�P�6�\�}���ʞ�Y�$�֥�Q_���UH�94i!	E��*_�A��
s�r����[\����9(�6�)�����?����⨄2R�� [PT�s`ۂA39��=�
�"���
�
HC�Gz����	m����Ֆ�N	��S'�+/Bp���&�:?��!?{�m�2�M��i /����9q�
+����S�]ۏ�9ߑ�ա)�CA!N�pr��I"6^h��a�
H[�"���h�!=.�
Ð��� ���@겨ӃC{&��/l����1!��*(m�(��X�r^/����.��N�n�-��{�n�Z��wl����Զ�Г�I5*8=���%�dBBw��]���4~���w{�ݽ���&���,�
Z���A�d���Ӯ�e��3d
+E����j�^S�}	lĈ6я�.�ؔ�
B���e�q� q�o�l>��c�g�x�\fВ9�
+�s2�n
��'��J
�X��᤽ⵝZ6�r�"-u��gЌ�oͯ{�,/����ћ����t��
XGnIn"����­�w�O�qQ۴�ؼ�UJ�����
[b c�]�ɾI|���q��E���aU���@sɥ��
en��^~��;��,���y962&��
992V��1�'���5�L����!z�ي���7�XM u�g`J�^��0����hpq3㨸���11�}wU�N�Ջf[TS;u��@G�)v�ӳSbҟs鑑'F�	2���1�>JB�l���({���J�2�3N�ouW8����>�e�L�����B��{��hE�?���Ǟj�n�
������w�
�4cwH��)����f)��_�������M�	dI��
+endstream
+endobj
+1680 0 obj <<
+/Type /Page
+/Contents 1681 0 R
+/Resources 1679 0 R
+/MediaBox [0 0 612 792]
+/Parent 1646 0 R
+>> endobj
+1682 0 obj <<
+/D [1680 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1683 0 obj <<
+/D [1680 0 R /XYZ 86.4 701.138 null]
+>> endobj
+206 0 obj <<
+/D [1680 0 R /XYZ 86.4 590.835 null]
+>> endobj
+1684 0 obj <<
+/D [1680 0 R /XYZ 86.4 555.987 null]
+>> endobj
+1685 0 obj <<
+/D [1680 0 R /XYZ 86.4 399.685 null]
+>> endobj
+210 0 obj <<
+/D [1680 0 R /XYZ 86.4 170.904 null]
+>> endobj
+1686 0 obj <<
+/D [1680 0 R /XYZ 86.4 124.655 null]
+>> endobj
+1679 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1689 0 obj <<
+/Length 3373      
+/Filter /FlateDecode
+>>
+stream
+x��[K������)!cq4�]>8��KV��r� �%�]�A`
�Z˿>=<9�(/�$U�,�t�t�t���
���꟯���`ra��T.^�Z"�P� ����v�fɑX��f˟�Zo�<_��2��Syw(6MV�jM��z)���������튀� �X�4������[��1�n�~��A�����OW8L���`��+b�D��3�ʲ�w�غ��O?}1|R(D���_��v�D<CZuc��Y����ÁT""�@Y�93UU��z�ޟ�;���yZ�6w�� �h+���]q��a$8k=d �Io�R/>+��&��:��dy ?�q��B��U�n&�a^Hd�vGJ�Ś nD���\׌qĩ�qqb�;g�$[6����;g�w�O�$���T-Ku͊,8��動�˲�͜�
q7�Ȥ$R���A
(�1Ia�y�+��T�/��?���*�K
+
V:�K‡�
Rj��b��vy�E�
��plL�"�y;�Md�)�f���C�mdI�tg5y, ��9:��&c��0�3
7�,c�2
aJ8��k����#��^����2qA
_ې��3��
�eQ6h�qlЃNa��
(�b��6���Ͼ[	�L�C:~��Z`�|m��
U�zbL#̺����m$WqD9
f�r�E7+�h�a�ݻu�40�A
S�|"���\��T{3�EXU���瑦50Q�ƶ���7�ՅH�0�
��������/0��""�:Q
D9��?�����j�b����V����a݇�
l{h�)�Q:?�L <~㽐�ׇ��&���w�<������l��+B
f�
+&���F�S���#*5C2�T����W?�|9�3@#���N��.�f��x
�ۚm.�
+��+5Z�>�Gv$E��`�Yˬ�����
v��r8�0�
l�31
���m�iB�֤�xS�*���&0&!C�;+�\~$.�
տj���b�)�aE��$PV_�Q
8Xe0����]�������+a�
��
�U6��-�8��.��n
�D���j�`��k6�P��U���)����cҸ�dZ��6�R�����-�p	�*כ��문t*����}�<ŗ_�HY�D��0��<�� �9�=
z�bS�����`J@#
[b#�9�d�a9�`!�>
�:׵�r`�0\ݦ�<c�CX��#%�T���mB
�V����t���s���q��`�<��Ǯ&
H�e���xyܥ�Mm��4-��dc6L��oԦ�6i
��^	~�5A���
+#�n���b;>\x���.�����\s��2��n�hq�U��
+�m��yfd�x���AH'�/i=X�q���lh��P,;(�]ڼ:�{�.��H��!���u�Ο٤��8�γ�3�������Z�-�[�J̀ �	�b�]'������B�x��P?a	V���Q�^+F�����O�o�mfB���0k��R�`S>K�M�9�9�����i1���Xq@TW1"A2q�ms�}�����iZm��O
y�d
ʅ���{�V��� �RN����LZ���;p�/�>]q��Q�>^�� ��Sh1J(P+�)TD�8n�n�!�9�f�4�-F�ir	�nE�`
��S��bgpf]�{Wfۓ���jz�(� -�����o�[����@)��
�[�p_��覭TV��=� I$
7Ua��u�	�?�~yY�Tm�A���؂�m��E����h��jUU�o��&��J���͝�u:Y(�5�g6�FBt����]RM�c���3]��}��
y�$�8��
�����$X(“|j��c0��IbEaqKr	��&)�ky�
��%JF���`J&o�z����{��
␏�� ׊:}z�e�B�m��2ϊ4�����߭xT������vq{�{%g�}�ng̿C7������e�n
L�`[L�4�ax
���T��[�4��������ʽ��6
0哒���Kh�
�F�}��
��r�VRyJ��~��M�U��v Kv ,���9!=���@X��N�%W'M�k��dS�dI�GV`��2B����}��*�������o�q��}
�~��Y���
��J��3�s�]lx;:�/����r>�=�'�ז��"��y�zy�;�U5
TA���S�u'��:
RUg9���g
�
�EkyE�:^����]ZuW�A����y����4]:s�o���
*�m�2���N��,��"۴��kX{�u��?;U3غc��~C1�$
�����g�����LL�
����Τ/�#���^` v:��e����^�9��;k���!��6}s��Z�4݆��ì�ݢ430c��
bfP�Ȩ�@'�>�Z#2�vn3z���,( ]5O��h��N֮@�P���j<�k��
9��� � |��f����;���j�V�/E�L
q�����;s�a��
�E�+�1!���~�� �@� g싅yr����\��c���!�Sg��KW�{U�ri����Q�����.C
�
# B��@_�m���«�H� ��);�X����`
���>��T��Q]��,�u�Hal�
�
�Q<�6�
O
�'�l�[�[�������Tz��Ɗ���3��'�%~T ���R��&k�RH��
�b��Z}6Jd=�3��L�k
%�=H��_V�
��fbOy}��%���?>��{a�84�d��>3y�b�Ȝ��@	}�Hr��4gE)}��OP��9�̳]�	2/�7ę<׀�om
Ջ�#6o�|@����D11��AoC
��N�)lɑ��yP	� �%��E� 
	��j��O@�3�<�wT;�=1a�~�H��0$�/�!��3��R���C��0��(��L�$��-���^�^mu��(�(��?k�$���>�u�O>s�P���_��XY&@9Qe
G���b�aX�`+{D Q�]iwJ�j_�C[��y������a?y	vѱ��x���*�B"�׶���� ��M�H�NI|2z>NJ(�r�
N�\�}���42m�Q�\¤��'?i�Qp�O#�A�
�˃Qv�����k�C�c���=H��m	H{����]��n~X� ��8 *㎺3F��?��3��
�I]��+7p �dL
���Wg9Wl���p7�Q�5����hr� y
�\��*C��a��~gӼ��à�vT���3��̽Y�wk;�l��u���'�ɫ�@����̨�g{���Z"#�޵���?�H��znY�}�7��4�!�S���}Z}�k���I�ӻT��ˇ� Y������(�����ɍ�������lFNN~��5S��X��N���>��-Ƨyi�4�[&�ͬ�(�=�9��n��E�?S�J�
+endstream
+endobj
+1688 0 obj <<
+/Type /Page
+/Contents 1689 0 R
+/Resources 1687 0 R
+/MediaBox [0 0 612 792]
+/Parent 1693 0 R
+>> endobj
+1690 0 obj <<
+/D [1688 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1691 0 obj <<
+/D [1688 0 R /XYZ 86.4 539.139 null]
+>> endobj
+214 0 obj <<
+/D [1688 0 R /XYZ 86.4 386.065 null]
+>> endobj
+1692 0 obj <<
+/D [1688 0 R /XYZ 86.4 289.884 null]
+>> endobj
+1687 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R /F16 729 0 R /F7 1094 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1696 0 obj <<
+/Length 2843      
+/Filter /FlateDecode
+>>
+stream
+x��[K�۸�ϯP吢R#o������[v�N6;�\�{�%j�D"gEʯ_�� H��Kv%k��gh���} ���Gt���?�.��\�QLb���n>��ȑ�1т��f�ב��	�4fѫ2���aE���X���x¢[e^�­��2�-�*+��w//��.~�`�(
��E�ԣ�����t4�;/G��؎޻�#)b��h1����
��ۡ�H���a�aYc�cA��H[K�5�l�ӜP��	�9i۞��:f��}��ٓg�򇴺Y/_&ӫwɢ�v�
Q�F/z��֐��Ǹ��#��AE4�cy�,���+��k0��qO�	���*���r�/T�l�l{D0��طoY�o@�0a��lO�`b�w��L���W��������F׶2��f&LZC�YZNW�C������4��ަ�T6���i�T��
"(���+b��a4&
� ��J��*/}[�o�D��r�m�^$U�n�M������h�������)�t韭��Q�
�Nf إ�Fb�|o�٘�(�
u\H"�t�'q�gi^BDŽ�� BFo�|��pJ�u�C�&Kr�<<�
+
‡l�8�����cM1#U
9���$� Т;�OV��e�<R��珊���eZ*!x� ��S��i�;SL�ѻ'R9���ၠ���f�
+�1���
L�
�2���BTd�ui�9
�;
.�B�b�;&A��D�p��Go�͢p�N����}�b��H �����dP��k�YyHuY^m�
Z)z
���b��� N!j[P�[����h�_���X����l��6z�v���=
^UT���,
��O
3]Tϓ��*F9�!CwP���G~�ލ����:�gHE�O���j�}@�&�]e��G.�1K��0.э��>|�Z�E�����B���DVzy����#TAGm/#a��
�*��P#e,1Ҟ�U,w at DSJdܾz����v2dԣnf�p��E}]=`�V��R��t�o�2�ػ?
3^��Ӵ,���" �tQ^�G��0��v ~�}^��Y��T���~
�uP�c~�69�Lt��yu}�g� q3!�ӵ
�
X���3Y�kv�1`:@�ۃ�����P��w��8�m�G��
0k��%1o��0N�$~d�)N�ag�00%M �׃1Ʃ$�s�V9�S�n�@����7��n����̳CG���%�٤�E��I��X���
�\k�I^T�EB��*�FY��>�gpFvR%p��IBR�`�Yt�d �n�����|t'������Xz��T�Գ���u$v@�F�k
�K[H�
�����R�+�WJB���+h�R$��[R۪|�bCQ����-OQ��
�[�ȹ�H��^�oU�`�%<�('��@��r�UZf����M]ڈ�W�e�;��2	��g��t����~Kx� <��G��>q���� ��!/�.<
!/�<g#��7�8Y^Z�|֕�u�G�!�*���
���j���C�
���ֲrb���0J���V��B�k	E	q�O����)Z�oD(J��<:MQ���hP��6��T<� �T���I+��� ���"�e�(��۬�b��?�N�T03�+�a�E���z%��a������[�t�=�R*��f�X?�v�OW 
+�o����(ȑ��(��+UݟY:O֋*ܭ��������o�ʂ���)�¨���Vg��o*
���.�-�N�߭�-�x��x��E)xk�!�-�D	�z��:)��9� 
��Bit�>��x��
��y�v텝*���mta�"V'�H)�d݁�T�����
���
+�|��6���6�mI�v�t�3��ږ�&������G5���'r�ZK��ٓi�������&����l
����v�*�x�˫Y�!H
�P�h
+W4��,�D�]�N�����.{�`۷WJ��_S�vdB�S�F�z uu��� ����S�"��3�"
�c�Q(€m��.�+4�oہ�w���D/��OL#�Q�)Z��oD�r vZo�����{�F����uE�9Dog@��A
2e�d��be���gh�ֽ�V�5��)�XM��Akl��r�X�jxj	E���niM<K�
+_a�'!0
�C��r��k��7��༡
(��!��� �������v JɁ�B���g��uY	��4r��u��^ݽ�i�]c
�>G���/:�>�bW鰀�NX 3R�hG�Z���8��u���n�kE{�
+y���6(��oB�z�E�b�^��8�g����|*��!�H��A�)��4�,O�����9��6\�?�8�%a�%��8�(Klw4]���#���#Gs���4��:�;���z�᧰���sc8�~��ɴ*V٧��Y
>#l?����+�����f�N��^&�*�@�)e�|lE�NJ��
Ak�"x�J�˃t ��s6��3,$1�.-���������j ۾�!�!���
U
��TgX�b}i{�^R��M�L� dp���G�:��6��ؿ`Ÿu�B|ƂU�#
\��zc��e��-��V����ǵ��j�=m=���������<H(~�K�tׂ����([����"/���A`Z�&!�s���j#P�|��a1]
�Es G� t;�*��ʠ7;��
�6aZ��/����z�2䨍2���ݲ�
̆�=j��+��mɿY� ���2<;��sG/a؃K���i;��5"�M�*�]��������Fa�	I���ת�d}*���
qhZq��N<�����
+������,�T�g
bP���r 
+�S�bu����nI�؄�k��(�p��
A$�,�B�j�Ћ�*�l̕ںv�o6��Ϙ�7����\�J�;;�OQ
+endstream
+endobj
+1695 0 obj <<
+/Type /Page
+/Contents 1696 0 R
+/Resources 1694 0 R
+/MediaBox [0 0 612 792]
+/Parent 1693 0 R
+>> endobj
+1697 0 obj <<
+/D [1695 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1698 0 obj <<
+/D [1695 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1699 0 obj <<
+/D [1695 0 R /XYZ 86.4 535.714 null]
+>> endobj
+1700 0 obj <<
+/D [1695 0 R /XYZ 86.4 353.267 null]
+>> endobj
+1701 0 obj <<
+/D [1695 0 R /XYZ 86.4 155.089 null]
+>> endobj
+1694 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1704 0 obj <<
+/Length 2602      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs���W��v`�I$����uyK�*[���j��sH��H���t�s8�(�RNN��~����4�
h���߯/�z/t`��\׷A��
"n�,���CI�j-b~��j�I�|�far��n�v_l��,�՚-�P��O�.�]_�r��

XKV�X�`����
�0�!�D�8x��v��pxʃ��.貘�0�"݉I
�ʘ���CR�^�mV���e�gE�Tn�.�Ǖ�aZ�n�|@=��M���a�
uD�QO����@��!����\���W,���§���Q1`�k<��R�����Ǖ�a���ܖfU�
��XQ��2\P�i
2YY���0���#&���]	d�p����/���&,P��ſ��L兾u"l�+�y�%*�t�
 �ɦ�ɒy0‰2`+૔�Z���'`f!¤غ�<��r��Ui��
+��
����5ܻ3�`Z�N�':�ڕ�O�#���MK��@K�ΗG�10&���h�jN�֞�
9�:��# el`Yٿ��뫼�6m>�w`�w���w�3Q��/�bj
+ �U�S��:>�j&@2Jo1ݠ��;h��U�my1��
+��~�l��h�MM"%�8�E�a"��9���cUv��O�?S/	��D�!�5��@g�""���MZo���ѻ�g,�\��*��9�H@�]"h��\f,�����%����8�Q��tI#O����M%�&��ݸ4�k1��Dc�i_�q
y6���X�G��'�L����D9�v���]4N���FJ��
G���n�K��M=Z~��κ%��G�@�0*_�
I@�+H����/|�s���E��w$�:%
K�
���=rD�` 8?س�̜��7pC�pv�"
+l�4��_�����e��ѽ�ݙ�A�?��D�LI�k&m���| /�O2H���uk��I,+�Cm�`,�Ă\�_rABM1B�*������c,"-�8d��'��!�]��s�^S6���ɺt�TPE�x�M*�}S�rb�g���r��$�)J]ꛩ�7�!bBE<:?�G.�>K���/ь_���}�8�N�.~fw�)��aLd����-���*4
'$��W3I%��A�@Q؛�U9%�6
�����]}z�����B\(�� 
�Vþ�4^�2PNK����Q쌟�����MZ׷�<�a^[o��;C����~�z��0�4
_8�߿�~�b����s0�eb����˅���̈́nء�s��"�x�qȢ
��
JDP�@
=��f� 3��.��l�
+Ii�
[h�
�;�/���Ǽ��"��!m��ɀo3�嬗q*�}���S���C�ϸߟ���w�f����
��}���dR�>���1��aVdM����a6I�ǰ��SM-"��82�phP�p�a�J�a�T��Iݼ�G���b�.�,z�S@�/0�2"�p�ց΅[#
��
���{�_	 ��dcEx0�o�$��A(��
�'�An�2��rq��~2�w,� �iZ�9���j
��j�I�n����Fx�N�u
�"�k�iy)�H��l�Ј�@6$���)��B�/�
���M��i��.֖�-�����a]+
��oi
k$b
+s���x�4��E����H������	�	pIu�
+I	���P���N�, Ii�����ԣ�����C	��FZ�Q��ڌ˳�P����z�-D���!����ܺ�\�ږM:.�
�11���>����t
�Z��?�q�t���
�X�Lv��0��x�
S[��b���-��
��(�O�]���b��1�8ay/X��� ��� `
n�$%B
,�����}<�V�![����"���'Ƥ�˭MY�M�Ұ�)����
��~�׭��O����<�"��1��J�2����������s��
+�p�D4�Aˢ-?��Ko|e�W�q��x���u���7�229,��B�
 ��Z_
��^��^�����P
ȉ��U�TNu�M�y
��ݏr{�I-l��!��x��
�f�u9rg�l2j,��1dJ-�]E�w}�����]Cgh(:��H���r�u�u�PO_
+���nʶ��F��6"\� #.8�FU�dg�C6�Irt�2i$Ҋ�O(DY�\?$/W���ϪԆ
Q��=Bp(h��
�恸�؇$\� ��
��&�m!��������=�캻�@yq�-�a8V��������W
�t�I���P:V���7*��Q���(����
�Z�
$|����-�K�
A{e��p�Ç�.*o0p�b��MSzR�%�vض��B�,�������/Z;��m���}�Nݢ8� 	RB헮�<���f���kg1��3VG|�G�5�2�;�#��>S
�3�8�M���2��u9�R��X��>�e���M4��=�d>ݧU7�|
������<���[�^����� 7�c&۴���~��
싐�cy��3
�$
�E�:k��0����zk���k��ރ`��9

�?+����٤~İѥ�u�w��D^u����9�
����v�n�T�'}
~�칭hJ��<b��{�<-��9����U�]b�X�
WE��
+endstream
+endobj
+1703 0 obj <<
+/Type /Page
+/Contents 1704 0 R
+/Resources 1702 0 R
+/MediaBox [0 0 612 792]
+/Parent 1693 0 R
+>> endobj
+1705 0 obj <<
+/D [1703 0 R /XYZ 86.4 726.045 null]
+>> endobj
+218 0 obj <<
+/D [1703 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1706 0 obj <<
+/D [1703 0 R /XYZ 86.4 642.511 null]
+>> endobj
+1707 0 obj <<
+/D [1703 0 R /XYZ 86.4 454.947 null]
+>> endobj
+1708 0 obj <<
+/D [1703 0 R /XYZ 86.4 272.372 null]
+>> endobj
+222 0 obj <<
+/D [1703 0 R /XYZ 86.4 155.308 null]
+>> endobj
+1702 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1711 0 obj <<
+/Length 2453      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�F��+���V�ߏ����vRJ)*'�3
Oɨ� r���m��E�4a'q��� ��>}��\��{����oξ��I� #��n�=-�5H2���yo|)�TcC�כ(yX�3���
F�g�s�_W�ܧ����W���Ӹȣ4Y�t���˛�_�8�
������7?a����È�+�[y�D�U�]�}�ݢ�v0F\�);��4i,u,c<�2�Mـ�9��Y(��
�AJ+O���t/�]��x�M��/�~�^�p�1
+	M�_D{�R� p��O�2���� �˥׷�/�0�My�}
 Q��?cH�

�C@�5�?GDL�!�t���0€ȴ��U�zZ-�q�d�.�[o#x
�"���m�R�(X='֧+�/��2��
��{�7�H�߼
!,���dY_�[.�@
Lkwѧ�
�5�R�7ea^dɦ��N��6��k�o��B�}z���4Lڹ�0��0���nA�l쒆��Y|��ʛ���^��
+ԕ���p�%
��<|m�`�g��f7v�ԅ�ܱ��T&�e�*��l:�D�Q���@H�Z�S(H�B�F�ͩJ7
� �`S�
�a2�
k6���$���d�=�2G,��_ۼ�������qJ(
nY�C���%2l7��Wvo��^FS9圀;E-e�8�K�.h'�*
+����&N���$��l�`U�[�b���ޖ� eU��_p��BH?��2
+�}� p{��x J
+p����x�F��D
�j����`[R�m^aC̓)�% ���
(⼗�~(3v�LQ.�_CƮ��T�qG?�0(
ev�V�a�BG���� ���@�*S�y`
+�k��FϓM��<#wi6g7�
�m}X��������UaD��4 �:)��`��)ʝ���ϟ����
�����ҲE���� .�^f�޾����y�}S,�>n�8v�u���m 7�u;�} ~B Xd��1NV|��S��H
+6�SJ(R`�������ĉA����}dC�S�M���
@-A�"��BC��M��ea�D�Xi/#n���M�� �RF�6��T
5ݚ} �l���,4��]�y9�3X��\2�WJ ���n{��3P�y�)A}�
^��(	w�4~\������m�R������ڹ���(��1({�
��2J�d�)eWi
n���A��_�mj�%�jS�,�
��R���Yz��7V�8XH��A�Jި���H�^I5��򣴷
+~�V�m(�n�۲F�����Ϋ�>����Sk^nw,�¦�ҋEӶ{������ ����UJu��l����]K�1H������ ���
p��7
��ŶRc6�+�#�t{���i�:M�aۂ'c���m縵�Yw��[7G���v�[
�n^�3b�I���7IX��4�߯G�<�$�m:]#y���=�&�F�
+�� Q<��QX�-S+aE��.=
��R��8wx��j4�'��q�
�|�ZjX�R��ޘ��"6�����'Ņ��e7(r J~o_��Z��0�#$t�S��DJ����'
�5��,��0n��<J
�n�VyQ`k�1���
+Ց3.�YؖO��7�j�#I�ݕ	7°��j‘�Yt�i�I�I4�a397�V���duB2� �3�4a�	�U����
�������G/���ϧ��C1=B�!���3���ȶ,�j	�S�Ȑ�1d��nZs�$��R�
��\6�CǔO�q[��M�U�ޕn��vtL��Tx���,E
�Q��5�Q~�e��e_�>^[|�s�C���˰N!؍M�{���2��'��ךbD~�~��M(\l�&�M�ZY�(��h,0��#ۚ���Q��!�e��_ƃs<Ȁ���9�
�p��Z񀵘?hb���gpZ�;N?�xp�]T���&�J���i]
+�T�A3j8��
2
��k=
�x�lǃCmE�//�
E���n����>¡3�+
+���b�K~�&�_�>
�}
��>ŽL�1XL�+ʕ���/�0&��
H^v	�����ʔuv�W�{��=�C����(�+�~J`Y��R�?��8��H���}Ew<�;+}E[����4�Օ��&YW]���C�,]�`!-���\CV>��\����FAU�
$;]rA��/�����\�?�?VsA|�1�j��D��J}�b'K1sh�G�DF��ؚ�?��
����Љ�d�_�XS����
Nk)�q�i��
���Xg��#Tۍ��2�$%9D���b
�#!F�BJ�����:�ϠÌ��X/�*
�/�)v�*z@��X��D��CC�5P�a�.�
����[�n!�H0s�3�|�?��#
���C���(=aڸ�\��0�|\�i��%�`�-H��b���
ơ��~�c�V�����g�y�B�V����K��k>V��k_ at f��D���6�khE��>A�F50�wY��
+endstream
+endobj
+1710 0 obj <<
+/Type /Page
+/Contents 1711 0 R
+/Resources 1709 0 R
+/MediaBox [0 0 612 792]
+/Parent 1693 0 R
+>> endobj
+1712 0 obj <<
+/D [1710 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1713 0 obj <<
+/D [1710 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1714 0 obj <<
+/D [1710 0 R /XYZ 86.4 440.94 null]
+>> endobj
+1715 0 obj <<
+/D [1710 0 R /XYZ 86.4 276.709 null]
+>> endobj
+1716 0 obj <<
+/D [1710 0 R /XYZ 86.4 110.541 null]
+>> endobj
+1709 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1719 0 obj <<
+/Length 2114      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�D~ϯ�c3x��e
�-
�Ё&}*<���
+d�Xr��z��J�V��Q3��Ɏvun{.�g)8z����oo.����� #��n����G�$�nћ	Gb:c�M^�v6��l:#��m�����z^����Ψ�\O���zsy����
jpDj�i.����ͯ8Z��e�3:���[E�D�[]_�|�+3q�\ݵV�����o��v�d=�zRΎ��/��m� F����E|h<�
a�1%��g�0����
���4�y��KC)��6�,��ܑːV��y�������`'��iK
�cdl���ӓ<��K��*���_-�'^i'� ��c7�t�:)C7:��|����6˝޹��;�!pqF@���3)Ɍ��$�qV
ď$
?!~͞,_���K��7 PsvA#��ne��eq���o�� �U���y��&����*��ZI�D�4�)�r���àF ]!L��'"��M�@�v��
+1��]��f&0�ܼ���
��k3���p��Y��'A8�����Iic���T�٧����=2"T�ᑥU��uҜ�`
+
+0Tױc^�Ͽ��釫��a0"FF�S�Az��aK�(f�S�~��ً����~7g�olÎ���]�� �J�'
����|Kq�*k��؋�|��r�eU9CBװ�S��>9~rH�Q�G҂{�?���P)�0�@�J)�HA�J_���81(^�X��3�bĕ�YT�fIF�BCw�����T����TY�@qw��ɦ�� uZF������2jDM8)NH3 |�4Q����?��8
�d���!��nk�#� �|�g�|�晟�4+z�"��h��uWG^�Y=ɤ��޷��yY!�vo����:Og�?����� K�
$�

+!a�7��>��-I({
fH����1�J+�#\�h�u6`�'����m2��p$E_>h$�³
���X
�k!a���ꙅ���i7�
���
�����m�A;�����U$�UH@'
��>��7����m!_
Όr��� ��I1ߦn�va!���K�i�RT�*��r(u:��<�
��Ь���Zq*��]�k�ՠr��.X�n��~]�
�'�w��dD�6[pU����"�'���nYZ��C�E_L ���wF�B^
+��
¶���.�F`�Vi��PKW�Sd�g�0܄
+af]�CTQ"M�9��SE~��a at 6(�НOT��"=�r({��Ԋ��qPœ1<�A�(T�

+���@GPZS�@��R�1��T1p��DO�E�C�t�hEY\qU
AkM�O�*r%SwPE�0@�1H�1�"��K/�t�/��Ä �� wζ�
{�:'�T�i@��cP�V4��D��Za�W���q���M*[���S
+�I\Q�a�8H��;��i�&�|C���k�
��J����TK�z�M�z���YY
�z�iƉ
+ɢ�
����A�e<�ߦ�z����+��
d�Q�������L�v���c2E͐�/Yk�hE�)~8S��)V��$���M�?=T| �H
E����(N�S�
+rH��P�*���Lq�5S
�>,S
�
�'
�CE*l�)ZQ���8�֚)Z�S���
f��Nmz�)R�A��)�t"�L��q���a*�mF7�l��a�h[��#��Ww�D[�› ��H"Dz�&�[�"���f�m�y��f�P@���W�)�}��E��< �E�KCѮ;
&��.9R R`C��"䌻�n�ۤH�m4!pk˼��
&
J�(��f�6Y�+r�gq�z
+��ͫNo�5��/�@V��2��������}0
+I�t�7���(>�B2�J�>���J!5�+ݥ�u��h������ы�m���I
��-u˃@tF}��G	l�t�hEqJ����C�УPE���wS���T1P��Tq
/<U
�x�TQk���Y�?�(�_g��:-Ml=)�l�\���e^v^0��Ť�U�Ӣ��zf�5!�Y����j�~�^v��o�f&
1_��h�����m�~9�Kx�.+{
U�/%>�������[SK�v��=�s�~�����2��>x-�:���
ԋ�!���Z�G
+endstream
+endobj
+1718 0 obj <<
+/Type /Page
+/Contents 1719 0 R
+/Resources 1717 0 R
+/MediaBox [0 0 612 792]
+/Parent 1693 0 R
+>> endobj
+1720 0 obj <<
+/D [1718 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1721 0 obj <<
+/D [1718 0 R /XYZ 86.4 592.638 null]
+>> endobj
+1722 0 obj <<
+/D [1718 0 R /XYZ 86.4 417.648 null]
+>> endobj
+1723 0 obj <<
+/D [1718 0 R /XYZ 86.4 242.658 null]
+>> endobj
+1717 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1728 0 obj <<
+/Length 4329      
+/Filter /FlateDecode
+>>
+stream
+x��\I�ܶ��W�)՝�0�ƕ�"K*�dG֌rq|�f8���2�E����= ��n����4l.x�[���7l�y�fo�����_^K3K��3���9���ib$����~�����|�q��|^\I'�o�]H1�����p�~������.��z�:
������y��3�l�
":q��n��~������Kd�f_�{뙒i"p��]?����n��X��85g&ᚗ#5F�i:3N'������*.���\�qib����'ܚ���߾�~\��o�ûlx��>w��S�H���sh񁾷V=�����ƪ��4,�e�Z��ߴ�ox"����=��J
=�[��É1͖wY�!��D��
�?� �p���t�"�K�ͥ����0�?���a&�����\	!�a�8X�E��|�[>�^|;��s��7��JY>�?nn��Z��B&�\P��d8�R�*����n���$���y����_Zϳ�1�t�ۮ�KY��{neb�(-�B̳=M�;�+	SM5��㯎���l�ɟ��+
n��}>���B��a�x���*7`��"K�8w�
qc�ɸR�N���0�8=��
����R�_�`�W�?w�+�Z'j�q�X)����e`\N.X��a��>tk��jj�\�4�����a���oa�O���{KT����
W����
	iG
vw�}�A"O��j��
g�9tע8b����[
�
�a�m���}��C�,��
+����b\�������ߜ�B`���	���с��HZ�h(vÐ>�ӓ5�o9(�X�O���h�t	�fR�����g�����J�z!����:�GAZ�[��O�X*BlW��}��vSI�Zj����;r��߾��
�P���4Yi.�%�L0S?��j=��/_���>a���.e���'[���`��У�j��GYdӧ �<�}�������jM|�N�u
+(��0����2n'ៅM�茿�}��`��ZNATp�X�]��߽;!1�l.e]d]�G�P6=ŀ�+�$�p𙦹��ZV��Tie}A�[\w=J%Ҕ�_0�SQ~Z�1HD5o��%"�F�0K#����@��+����F��S=�fH�R�U�F�i���س~ˢ���՗�w�H�⽇�Q�|����Z��� dz�V�����
�N�V$�a{����%�u�)B�|���q9r�A��pz��0t	��K���*�
O��%������",D�&|��=�Ϋ�,��y�Y�34O�(*)�vJqh(�b��������=t�!���BQi���oϺ
����Ā�ʄ���-�
7�J|]����`�5��O�p�S�V������?��$S6z�)u���$X&,�FREu�=D�����]NT�"]ڤYȧE�M�t
+��J
14�~��ë�=ZQT4�K}a��JH��g�i
+te'��d��c�$	+;5Q�
1FJR�$E2Q-���t����PYI����}F�`�6��uJ�$�b����rS�N�>ʪ 7n
+������
�F�QA��)ew�
��a���?�w=�1�Ч���"�����߈�hEdX��#"2<܈x
\�Rs:
â8��S~Q�I���h�2�zw��w�|է��^H� �h�~��%�3_`?��$p�Je3��nCƑ-}���r
]�
�7(^�/�vQ��k_���XV�Ꚕq at 14�$J�g��0��
�t
�m_y����F���~� ��HX�FI/5w�(� 
+HF�H�U�k�D5��((ԉ��E#pSEK'�� �rs���q�\MF��s'�.�΀�!�S����ymZ���Y�7�H�{F��'A���E�L�TxCA�
����������	��tY<�|��@l�@�JSP�:V5��F#$����XÅFRᡩ���.�ݒg
+j�}ZQ�2�G��~�C������֏���~_QuEFr�V�ɞal����B�.�m:��>�Dƭ>����9��b�2�h ��1�u�\#��p��M�	�*�7�h'�y��t
+��A
	g��(���P��vz��Q?�I����:�Z6$Mŷ$t_�ý:���S���v�Kl���R%�*q��3�߾鯝��g��e���]"�L��a*�2ۛ>��
f�0
T��d�<03��U��a�v��v������=rFtӫ�x���W�~�a��;���}���{�
���Yڟ�	�z��9��J"�h�u��p�qh2M���N�Gt@�F�)�*n�Ɋّ�
����򖪟0b\�
+P&\�v
�+��V�Yg���מ ���]P��w`�.�b	����
	��ݹm�z
�P��(�B
������^�ŗ��>�y���Qi7m[��F[��ʴ��mO�r馍4|U����o���Ѩq9cZ%����ZAc0k\��O!_�5J�*�+�9�6J#'�
?	�ߤ{a�hS���6B�ico��HL��I��Y#�$�5^N�H4�L���
W�I#��Z���k�kE�[T$�4�PҘ:�������	uF����j�/���~(i����i=]�9L�Aw(o�Ub���n�D�s/�����F��%�B�V��i3�8r�JO%��ܙ�Q'��-{�F ��
���K�A-h�����1:�7�R��2-�L�Iq~.{�gj��i�	�$;�>@>Q��5h�-mu�t4�U�<�DC

--�]'y�'�t��T�Ĵ�'�G[����c7����q�T�
�
���Ja��h3�x�{����J��o���D�vD�~Gp=.P���Ը#�:�1 .a�����].�bX8I���ipi�ଙ�.
�֠{������Ö@.�\�<eĖt���t{O҉��_C
܈�۴�Y{DICDIKDI�=����R'B��[�SJ��_vz� �4�un���h�*D�D�"M��=
B��ٙ
+U�p5��3�6������M\u���bK��*w
T*�h��B2"/������M�K�3�R
&��|�o�
�`�L'!Jgv�/4����i��t
�t��� �{�e

U�R�.�
B�䗪�ׇ.
������z�^V4��ҸAtI����|A�b�^��`���l���
����^��%�Hg5t�4�N��I��Kr��u�c��UmU�
Sن�١�w���) ��9Y�G�̞�E��y�%�K�m9�k(�[���
+G;ʲ�<Z@�}�l���v��Z��>�6/����͍�
�¤>g�

�Z�@�a��G���5��j��E�n�
G��ѵ��Pe2�v�<�/���ވ���*�*��cἲ4����,

��G�N)v���� V��\�6t�b�/��;���k$'�@Xndo!	M�Z/�vS4�d����������nc�V/[�eOjM{�lgʺ-ZU������no����S�����3:B��1mg��˰z5�v����J��`��߫=ji"��{Yu]NS+�
b
�z^"ҸTd��
Pt�f��_P<�]N���!�g녂��1��i��˞
yȫ�s5��!K-���yO�)ʙ��@�PP[��=�C���9�}��ڽ/��..e�k������A���ɿ���
�~
���ׇ|Wl�JD�Z8�^� �����"����7 ��9��Gj��C�
������:��X9P{�"�9���7�;G�M�_YU�s->�m�+�:CW��%�/��qkbL'�Lb�b;�;��!�E�����
�� �5m��(Y�T�1�Zn
��p��֟�/
��2n����F��e���u��)����q�4�{��
>�T̮|Pd�
+��U��޸0�
�P��ZY�A�y?�֋O�$a`�l�G ه
SDk`�_��x���*��BS'��g�
�o폈�v�Sx,�>tP@\���#��4he�F/�d/lF�A�a�:�}tut�._���O���O8Xz�x� n���W=���ׅge�C�*��bK��]��*�P
Z��3��e7�V�d������B�R��_/��$y<����{^o�
�#;� ;�
' ��SY�x
��M��D$tX��3�U�}���E�5h/D�
�M
߄�mWo�k���kj�2z�P��c�ud�8�v������)%&F�q�'t��/��.!+����A�u��28�ux�����a���.��
Up��S�
+g���s���
+��+���^Bm�%�%mD�w� c�%SY���0���F6_��(�]£(���Q}�ʢ��_Q�� ����%�e$�����B�8�݅� q���&~�e^��e�w�E:�%�=lw}e��&���������l�Ň�u��
�W�LY
��
���P껡񂓮�Jz��	��U�mm
+endstream
+endobj
+1727 0 obj <<
+/Type /Page
+/Contents 1728 0 R
+/Resources 1726 0 R
+/MediaBox [0 0 612 792]
+/Parent 1693 0 R
+>> endobj
+1729 0 obj <<
+/D [1727 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1730 0 obj <<
+/D [1727 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1731 0 obj <<
+/D [1727 0 R /XYZ 86.4 296.365 null]
+>> endobj
+226 0 obj <<
+/D [1727 0 R /XYZ 86.4 191.135 null]
+>> endobj
+1726 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1734 0 obj <<
+/Length 3571      
+/Filter /FlateDecode
+>>
+stream
+xڽɒ�6��_���e1�F�����v����sIRSl	�bB�
+wz�~��(�b��+' ���/���x�ϋ\]|�HY�%<Y\�,t�Eʳ(lq�Y���Qr�Z,?��Y��~_f�Cry�W뮨��r�3��e�]�r���뫋�/
/��REZ&����_������#��ŝ��[H�E
Z���ſ/�D
@�b	)I�"�&��7�+�f�nk�M�̩�-ח\/�yukZ7��0�ʢ2yC�.?���{�[�4����un���r��Z���.��d�|�o�}S�Al|�
��G�
�
A��ųg�h�hZ1���u^��Լ�ً��E��^��2��1�)�f�PI�lYT�=���*��a�?,Ո\ͭ�ۇN0/n��HE�-#J�`t�J#j�5���R�;j�7���=u�=�9/��}�ח��H�
��Q��8�u ���f��O
Z��B�?|����,�a�,�_��4�u:�k)��="��h�s�
+ %PBF��D��t��7�sQ�myO�����.�k��Yw����j����!h����n:�g��jٷnB}C_��1��"�B��`����L�E�O�Zȁ�ґEu8���n���
A�֦h�5
k���K�,���lh1�4�%�pJc�b�#�r`V 
6Y_���B�,٘^��cm�
Nbvc���[<
��]���A�`��Y�b�F�� i
�
�`��v5J���ɺ0�68��`�]�����19I+�HքK ������
&Bn��Wj ����c�$�Ft�Js��]��ϻ�ۺ�4	h���o;�z�k^��ή�L�1%
+\�o-݇��h�	�?�/40br�4�Ӂa��HP�R�1r�.��"`����� �ӄ�C%AO���,;�s&��q
� N���q�BF���,�
�G��m�m-�a�
��'�3���R��){K�C����1d
g��Ƃ��Ƃ1Gq���,+���a�n����8c:����o�
�����Q�
�)��a
����Wb
�
�7 e%:����gI�4*fj�`[
+pU"
+�K� ]���"�<l�P#�'�T
�lp"��tr`Ū��V�D�
�fQ����k����8�]�w�����
�}&+m�K6U�1���O�<��4`��~"n���m�Y��&B��8�@֯�BD���d!�̞Z���ۖ~
��
��4
��uk~�Ӂv�!�
��
Y��1p��d�Q�5��ͤΦ�\k��K{#k�������`i�YnAk��-
�-���!a�`Jq^����Y�V���r�M��ng���㰀�i�+�E:ѧ"`
����F���w�ڭ�$s�p�����(����h��v����dP�~p�,��Y�4���-C��'�=�Ԭ��
+�vh��0��-�ș��c�)ԃS"U����'���W_�f�
t���a:
�������[�#?�m
��ܑ��r�,��Ȭ�D~,vE�1�~r
���ݺ���iܖ�;=�{��ؙ�|V��^��Acc
x�fp�p���?����DD�
+�U�N��
�w��ʀ�A
b��[�ls����ٟA����2�<	�`�/?zz�8����o�`Po��:� �_���<�;',��9Ș�����<[l�c,�K
��CS�ξB�p�D1���3��J������(��o��tY��
As���!��{ A8B�04	��r�'Lc,}�o
M?
t��bcC����}ѠN��
��m�54�v�����({B����`��La�PyY�ϴ.�3S
]mvp^6���\����i>r��
+|� �/������gq�,�D��W'"'���[�F
��[�i:0�	�;�
���(�W�9�k@�eϹl���Sg61@��7b.�`��ӹDŽLc8V<NG���ypݺ��}�}�����RV�x¡!����f�@
hG�E��X����fF��?q��¥��T뇖��Yحo
�(
G\

8#�̋���#
i�"Zp��z7#
Y)0
R(PG��/�"iĭ�
��X�}>'?I�z?������D'c���2�p
1�44�����&+���OM�f�@�����`�����L���c2�8�yh�T�

�B�|�c�(C���6�@����=����M�2B
+��
� s����
�䮠�
"V�P�������eIY(���=��
+.�'�
���������)�+n%]����˗�?~<!n*��3P�e�
�]a�yNro0�
-}ѡ��kӶ7}���HA�66{�Q�&��iP	[�>���̡�S̞�P�
��}��͛��Ä�7�o��"�Yn
+�GnJO�;:����b�|74�s+�����j��X
�α�J�(1>�M�z�� �<�üŀ�|d�Ns�O��'�,�*� "��93��m�'9S�H���̷/޼y��k%�"�^+�X(_j�غ4�=�
這��1���G�c�
��������
�l%�
��\�
�9�瀩�|\��gav^v���r��h:���O��d>��tμ�{�C��
���OWg��Cmw�w�`��;��H�0!6K�
"%�؆ms�6��i��4��'Gy�#�
E����wugک�%�T�gBdt����iHβ���u�4f�|��R"��O_L�ab^�\,�֚j� �ע�Kp��
����P��d���ͫMi\�9+'����G"�Y�� b2"^��X	2��a
��郞Tz��
9 ��F>���d
+�aw
���c�C�Vf<�zc�(�2�}I�/t|���1�h����*,{;w5&�
2S�qE7�:���q��&���q��u�`
�Bȕ�$��������=�s�-�G��Z��5_]l�s
+�ξ���d��K΁%�U��'—!�5N������.�j՘�jA����������I��8exd%&���o��7�~g�	�\�Xtf(�d���̿(�A��Z�JI�
+J�g/�����J\�)l���i ���#8
5n��m�8}S��6%C?�Ɯi�BhJ����!�
+��5��+���
�:��������@	�͹\��2>�Ĝ�p(��?+�L�>��;��g!��`;�*���D=����{f7��5�4����(������Tڌ_m
�����:
��V'KR[c�`U�A�N�Fέ�00���1������������B�/����u{��ʩ��
+���:&W7憲Ә��
��g
!(�80�b��ҹ��L�K@�����ǿ��#�%�rrS��z���`Hp[1i��`H�pz
+��s�D K�r���Yjb�%O�."
䄍�D
�4?A
b�� >�L�z�D�@��&|2�haN�x`���ʩ�{���=��$V�3�>��޺ށ'n�?2�dw�D���	���ظ-Ȇ�������>�
+�,**}���m_����P�>Ξz'r�4=Rppoe��F��x���T����!����%nS�
:���S�)�C�O'�cJW=e���M3�$�j�7
���h��w/G��6�#N�f����ӱ
+endstream
+endobj
+1733 0 obj <<
+/Type /Page
+/Contents 1734 0 R
+/Resources 1732 0 R
+/MediaBox [0 0 612 792]
+/Parent 1738 0 R
+/Annots [ 1724 0 R 1725 0 R ]
+>> endobj
+1724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.441 676.287 169.913 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.733 664.332 205.204 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.7) >>
+>> endobj
+1735 0 obj <<
+/D [1733 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1736 0 obj <<
+/D [1733 0 R /XYZ 86.4 520.076 null]
+>> endobj
+230 0 obj <<
+/D [1733 0 R /XYZ 86.4 282.933 null]
+>> endobj
+234 0 obj <<
+/D [1733 0 R /XYZ 86.4 179.676 null]
+>> endobj
+1737 0 obj <<
+/D [1733 0 R /XYZ 86.4 133.594 null]
+>> endobj
+1732 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F49 983 0 R /F16 729 0 R /F11 787 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1742 0 obj <<
+/Length 3386      
+/Filter /FlateDecode
+>>
+stream
+xڵZYs�6~��P���0���'oM�L
��g�!Imq$�b�D:$5S�_��h���c�}"���ht}�|u��/�qs��Z�U�2#���v�
�++3f�X��V�'��7��L$��eu��(��7��J&W�H�S�m݄���/:y_N]YW�?o~�����
�򕈋��i��
/~���v���3���'?��*c����^��43�݈y�-�+�	&�!�
<q֫�񌔳4�v?�l�q��n_�N���)��tIG=�i��SA���l®�a٤�v8ώ�$o���!���T�mW7��ޫk!FlI��t=c4d�8�Z��?x��(欎c�s
+��F4�Ij"܍�,LP���,K�t����M�J����̱��o ���ؗ�G�$,@�IiZ�|�|�Sw
+�i��ܝ�CTT��]	iX&T${}�/0�L|��|�n,�y�L��9E�1�L
�t`1^���2
+�O��>�Es�6� ��f�6,��S���P�����i�-����˻��3�˸�
�sI��,!��KŠ��ή��ߎ�k\�7�ˠ
�����4
+��\�<;��A��2��1�ͷ���Ke4���|��
l���}޶�.�^��F*�@�X�W�7����o��׋+ZŤ�M~�a@ɥLhxځ⻢;5�
�&�~ߤ�'W���1cz3���uu��J
�v{���qn�J���PS��I'-���Z D
v4�	|�{Nr:
N����h��=m�E�ޞ�`��ٴ`ݖ]Ip3'
+�Xm
`�P��K�8��H��4���h�ph��z���&ĥ�ݱ%��U
�����&�
+��uk��Y�h��p(�M��?VD
��bL�
xR��
�c,\$��ًE���TM�����,�8�d6�Def,�����A�dU4�� f
򶣦m��
��Jr��]�wq�}~��H��rz�vrd�/>�P�}�� /g��lu��G@�y�����<��s[�mFT����a
���r�`J�S�}[wE;�Te�ðUe�bb�m^
N���Ñ
6��4��,��LA���~���x���F_n��ၚN���bM-p��w��cf�h����|Ԋn&z�Z
F�Q���̹i�`��@��T�
+<dC�����
�J��[�A!;��utq�P
s/�0)����bf�~ƾh�k]

��%����>3�͔�L����'�,SpO{�K��E^A�HJ�
�`�-
;fqƞ�r�jL���3�%3#E٭�D��U!
+M����
	{;ó��C�H
+\p�f�M68�D&jD����{�����LJ�D��Dt^�&y[|��K��9:�K���H`w����0i��z�d�8}G!�
�"��=���.bS
����w�覓
���5�W����_�!�I�Ma�eQm��)��K44K{��׸��qL
��k��˫<��
+D��;�l�CWO}[W#����ZH�7�������f��
׭eU�
��@�\����n��(�1�ϻ+*�!��Ը(s�2�"�
|���,la�y��}�
�`�
z at K�ƛ0���?�t�ԭ�7~�T���IC�)�<8t��w\��zG�
�F�����::xx�ҍ��l�<��ݩ!����o�������c#Z��F��'��� ��#�a4���Y�1HK�����U��h�U�Oė?� ,�p>��!h��}��o�M
|�??�55���p�-}�u�w�9�q�l�a���"o;0#���ݵԴͽ�F��[=�����
��R��>��ۂ�2
+G������,GBx��"
���6��C	#�
�
<�T��C�Pn��=�_������@-sf�Qyg-"��)���b���!�x�>����<�B
�K)B�'<��,�@�D3/s�N�B����.O���B��"Ss!�B}�U ������Bx�[D
��N��+��WJ�6��FA��)*�z
ڃӫ� 1GK
�S�L�h at jGڎ �HZBxr�

6�-���{_{�MѻF�.JA^���1P
�(>�4�"���i^��.ir5h|�-@
�Wc���6ꓖ<	ȫ|�U�T��1�
=���[H��c�W*|�5(Ո��P.uLd�y=�đ�3���ϰ*�P0/z<�*�ň�
+���ۢOմ�,�(�"s덳�_1���PAx��+f��:�=�� mTزZ�P^`�"c��Ie�յr+����30H�X�c�i�f���N!'H~!�Ma�m���A���^��x �JΤ	��|Ȗ�����V��:�z��b��CGA��>��X���Gg8��3�>
?I����@o��
n�Ta���k���C�"GEJ�T���0�!ւ�(��^
��ntEf���;o�Ŵ3c��#�������˘�N<#h����:�sH��Z+�
�4��y����oؐӠ�q*�a�T�T�U�n����O�\K
�ݐ7״r��-(�
+n+K�s��mUq'`m���9i�!+o�!�#�z~[&�J�g��Z3G�
�L��x���!�m���E"d�,�꩚�K�����d~�eeY �-7�Ѳ�}t���h��(fWV0���_. ����"�ܡ���/^?r`�5
L�_�>r%jpQ]�
���&\���n|C{�n&4Gl/���3>�����.G���Q(��!�Ӎnk��x <i3�=��ݱޝT�Ym�����hL��ۻ˥g��w�~A� Aص�JAp�HJ �����'�� �4S�j�)�<���xopvI"
G�!{�1
����#
��Cpk�vV�Q����l
d�6F�
q�!�q�T�wv}������as
�2hD;/G+e`�Y=���;
�}��.�"�z�(
C
+ǀ�L����4BRV��(���T�^a��nK'�+���M����
:��S��4�1.*�)���q�NB k?W=�ac�X8lB9�n�^?��Y�������ک$Ʊ緔E�ȑ�/��Ӿ��k�h�3��\�|��������������2/'4������2�Hi�2���
᮵�
�c���"�����f��ᯁ4Ĺ�F
xb��#
d�����,�Hsˤ��BD=�Y����.�4�~�X�i �"˖�x:h�4�<��r2�_���ҟ�	�0��Z�>n���k�3��
��?)���sW�_� 9��[8. ��'�o�!wj�ج�1xy�[�;��RQ�:|!W�p/FSN
������'
?T��MīX5:ѥ�'�^"
+22+'��ջ�o����aFL���m~l�D����4���3qK+�ld�{�I�.���T2q��
�,���:ַ�j[��H���������ڥ�:H��4Tk��3�A�~
�A��A���*��մX��l1bn���(
+endstream
+endobj
+1741 0 obj <<
+/Type /Page
+/Contents 1742 0 R
+/Resources 1740 0 R
+/MediaBox [0 0 612 792]
+/Parent 1738 0 R
+>> endobj
+1743 0 obj <<
+/D [1741 0 R /XYZ 86.4 726.045 null]
+>> endobj
+238 0 obj <<
+/D [1741 0 R /XYZ 86.4 338.804 null]
+>> endobj
+1744 0 obj <<
+/D [1741 0 R /XYZ 86.4 261.672 null]
+>> endobj
+1740 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F16 729 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1749 0 obj <<
+/Length 3211      
+/Filter /FlateDecode
+>>
+stream
+x��ZK�ܶ���-�.
L���|�XRJ.GeK��`�R�
w�e9"9�l~}���J�$��ݍ~~@
�Fq�׋�\_|���(!�b*����""�,!���z��D]�����^7�áȳ-���c�i�l.�,aL�4����ۋ��/(LG�#)�*��/~�5�����(&<1ѝ
��O��"z{��E<a�D��DJ��J�V=��_�)er������ruw��*�ow���Z����<���/�H�8Zӄ��ӽB�L�JK-.�͐D]�m��.A�
?�U[�a���df�!���{��2wSg��ˬ�������k�����mUduZn��j�
$���}��߻;��Y=;��-�{�nPj+�ը�E~�8زjc�0FX?����_��k_�'$���ơ:8��M�?X�8��)|��ia���%1�&:2�]���b��l@:�צyi5�3Xu�{�ʱhs0��H�8��ޣ�����D�nh7�O~H
)�h�Kd�
+�$"��̗�*"��h
,��񐗎O�0]���oo�"���� ��Dz���	1^!��_����9>HHB�z
+z$� �aNP�K��TV�
���h��~��^)�G��Q�F��Eh�v&|@T`J���ƍ��xR���~~�eL��2�W�חR�^l��U��RLI$��G�fn���1R�t���z�~pYM���K~4�RG
V)�
lj��#m�nX�<h.���*�u�f���xbW��3�9���:}����IЁ�^O,�@�	j�D.���.k0���ep��lu����=�x�o�"��!��k����}�f��T��O�l�u�/���h�B�L+��U�p.Q�z�x��
��h���K��H��
\�� �����	���>U�-�#?��N�뛪(lb�k�|�LP�&Jӳe�!�~>! �$����H�vb�ơb"�I Vj e�?�T�,Hq�`j>a��H����O�$3��$XS�|0x�%�
+��ߙ�
+3�}�?d�
�YBi����A���S��x��
�	���2€�3�AP�O.	Cr*��]aY��.��!Cӧ�C�"9�+��U�uw_؂m���P�
+�l	ŠH�S��i���|5[��XCx�q0{�?�?�.6`��5S����\����75���
>��m�l�`_e�F��Q��.��HQ���׋ӄ&���f�q
+�J��;�ʴ���S
\շ�}Vua�Ã�����%��d3���*���H����d��!���]n={���<}W�z��?S?�n�o��n6�4߹���h�M�}��r���YZB�3m᎜�=k��5DC)3.��˱�T�
ѽ�h�-z��Ǒ��y�h���O8?Ta2�D	�9�O5�
PJ#)!���g��x���\�ȱ}�Uԫ
+�tI�5�on��O
�s@�1󊃯M��w6���7Pa����D��
$T�J���ɰ�f����M�� Q��C����\k�
��{@�|����<Ψ9$ y*<A����$:���c]v�-�
�P-�xuU��lO=��M

�GH$��ڕ��H6�h
�{�/m!
���.�����߸Ǽu��q�ɚ��X��K��O��7�'��"i�K�Q�]
+��܏�Х�q�sҢ_r�{op+���JV�M}�7�|�|�,��
+s�lQ ����*�貦��p�g�����5��P-�T�<@����yd܁���.���ݥ�^���8��:sP	T2��G��Qf�Y� 
��6�
|������q�GVO��"k=|����W��}޶�Z&�l��p^!M�X�ึ��џ��:k:�M���]��Ū.RIi��C��6 �/bb���j_v���/_�Y���C�i�h�GĖXT,�MP�|�)��
�D>�u���O�s���@8�T�
�7�b~�&��T��U�>4`�
�"ٖ8�SxwͰ	�
i�������j��v4d���Cq�W���

^j�z��PWPL��ʁWT4^�Z��p���g�m��p	\0����fv[{���+ϐ5A�y���^x��M��1�J=
q�I�.(�,`�W=�������	x8%T�e��i2$
����
+g
Mb�|��p�	~�p��aN�	�F8�pg��n�b��Ymk��O=c
!�y<�NJpJ?<�i��,-p�Ӟk�5�P'"�N�<6�Q�3t������sl
�yĐs0���O��-�A%(�K�����$0��Ē�R=� �5<�Ճ��Q���f��i�"�.�;�u_=o��!T�����&��(:4	�!���㭁����W0���y\��
+VZb(�����иЇ� ?�"C��� |jw���|�1C~�v�J�h��LB��]�엾�ۛ2�W4�P	��S
+(�f��m(h�>eC�u�l�=�[n�cW�m��
��c�cB��̓B`��l�u=`[�wZv
�m�n�!cp�‡8�h��?'��z���1�7D���
8����~ȅdbƖz^�,�vWk����]Iy�
C�X?�~�G���y6HX3(b���bSz�ȶY�;�Ωx��*��\}��Xi�l䟬4�!O��u��.��G�<���[��	�ib�|�ґ�f�����x�x���һg(?nOO�q�yc�L؝�G��s)�GR�+���P�'PR����D�} F���l5��X؃\I�����],��v�vs	����U��WVW�i�8��z����q �M��	
э�JA �S��7�0��M6���,���(�:�l;��!pZ&�`�۪���8;ҏs�k��L��\���8 
+��\
=�CR�������_��W�4œ�+h)�tޗW��
�bL��PX`�	��D�w�#�<����qr?"����~�|�v�Č%�
e(��sxYzx��tS�˭�i�J��
X��k���3���ر���x�^z :
[
��r�Ok���7�|B�U��YZ��=����b�h�,m�}��_��j$3��P
+\�7��	�
�N
�
+��B.
%�P���>��,C (]��
4���-�&h��.=���N��
9�6<��I
klx�g�����'O���2
�	뀛@}n�{/�?O�]
Fd���C�0
 �p<��������a8v�ǥ�2ڸu���p0��SD��
/b�Xu����=�,�,�L�{ޝz
�	Y�
1��y
+endstream
+endobj
+1748 0 obj <<
+/Type /Page
+/Contents 1749 0 R
+/Resources 1747 0 R
+/MediaBox [0 0 612 792]
+/Parent 1738 0 R
+/Annots [ 1739 0 R 1745 0 R 1746 0 R ]
+>> endobj
+1739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 626.105 104 638.06]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+1745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.208 61.606 236.182 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.164 61.606 265.886 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1750 0 obj <<
+/D [1748 0 R /XYZ 86.4 726.045 null]
+>> endobj
+242 0 obj <<
+/D [1748 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1751 0 obj <<
+/D [1748 0 R /XYZ 86.4 609.675 null]
+>> endobj
+246 0 obj <<
+/D [1748 0 R /XYZ 86.4 397.537 null]
+>> endobj
+1752 0 obj <<
+/D [1748 0 R /XYZ 86.4 333.504 null]
+>> endobj
+250 0 obj <<
+/D [1748 0 R /XYZ 86.4 109.487 null]
+>> endobj
+1747 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R /F7 1094 0 R /F1 1099 0 R /F16 729 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1761 0 obj <<
+/Length 4304      
+/Filter /FlateDecode
+>>
+stream
+xڽ[�s۸�_���W
�7�fn�i����]__�7
F�m���9���� �)Hrb�O$\,�㷻 ]�.���~�7B/R�j��7
��\�-��z��91�b�-MY�SS��KaE���B���Œ%�}�MU����72y_mvmQ��\�����O/|�.X�E�ԋ���Ͽ��z�_P"R�xp�
)R��n�x���/h z>�D*~l�F�~���*M�Z¬96��j
�p|�v̷��B��0�=��^���4Wy���g�7F�P�5�
+
+fL�֐�ڧ3��%��@E8p�-�*�e�,���ޝ�@3"��
�V�x��󛋥�*)�����*�͜/�ȰcS�xMƿ�?]��:�68�j�h���%R�`V�K�H��n��g� ѡB,�DIq�{�0a{��¢0�07����'���ZT
$��1P
�C� ��СA�1:��!� 4=

Rh��:��oՒI�k�$�Y*�ܦ�[d d$��kU���7�&�#
�)A-T����p�~���M%`*G�:k��jf�љP}L��T~��`��Y�n��!3�P.�B���i~�~D̔$`Q�A�T�0u������r�'Y
+C��Y�
̱
�������%U�O^^��䚪���h��Q��\�dW���t
�j{�ks׭��.�7k4y~u����2gS��E
�Τ�����!c�S������ه�.�I^���c��[�f�9j�����}]]�B?۬3�%G�K2��w�H��z���
D��}p�G���XJ�
�"�@}d��τ=c1��ȴq<
n���S��m���6��OrS�`�H�� ��n�aM�˰n`ۇ��,�6�o��å���-R��	Q^�N�Up�?�
���u��]z"�N��Knۯ&z����.���RI���S��r
b�#�C}0I^�GH� ��.2`FL��&����`_��٤}�q^p
�#�Sn�>~7h�8�4�l���a��yg�8p��5+/�X��`
j��l^�fS�Q�^8	p�/{�?���N��Tۦ2�-'F��-1Ka�P�C/{�NH����O����Or��D`��A`���׸�qY ��'�q�ǀ�%�!�W��|���-O
� ���x�?�b"�wdi�
7g�:��t� >!��)���'}u�띷
b$a��3P&�Ž�_�8�E�{	�Z�U�rBx��nxlS�A�l�)�Ֆ1�`U�zC�]
k0�S�v�3��5請�Q5�`zA����8|�G ��L�(���3�|�*�Ep���1�»n ���HY���ޟ՞ok�o�P�0Χz��Ħ
l���(�
��
'����aCtvD��#�'�dm��%
Ȧ*��p`
:�;��[��#���<"�6�6�e��]��S�������Pk���
<��$�Tq
�X#G��>�aA=q�
�UE����B`9E.o�^��۟`�W�/A��K',9����p`��B��2D�O
(�j��7\�=���WB�6�V��o�6��!�����9S���#�0��'0�uє�1������p[
+m�b��dJB�M��JS;	��m�
{���b�K���Ze]�	�Ok5�3y��kF���̕������]gIN�m?>�\K��@}V� ���e���	A�Å����g�|
�r��5�X�y���9|���ɫ2�H<rO[���3$(��I�kj��f���P�P�ؤ�	�v�U�47�ͥ��|{�+)��c
��v at I��%
Y4*���lG���5v�A'|�����ۄ�M��/C[�e���o�19{���-�U9���?�e�n��!w�x��$���\��7�oB��k�;����{ؑ���H��B.�0cgsn��#u�Pl6a�����h��D���.[��w+��cѐ>�K�`��,	l�ʠ�wy�
+�V�����
�͡�TD~E�z�<gX
��={Wa�n��B�e.�<
+X6���M�	�BBo��O������?m�,�
�	`�fb����)~�J
�<�8`��ܛ�
�g�
��#�j�^�N �<�
+��4S�~(Z�����#�$
��{�	�!��� 
�Ƅ��$*��w�u+�(L�Q�a�	���QT�M;a�A
�9,a�C*��Q�pFv���1��t��y�
�'f�Z��`h(7��;����l�o`��/�&r�a��G�ľ6��>��u|n.�i��+*�
�Y�	_Ye�&�Ӛp�%��'����r���\ѯ��l-V%�:0Kjb���t�:CǁwN�Lf9V>h���p��UI0ʕ�u7U�0�}G6�ˋ�Vj 
�Y�E���N�
&.�
���"4�$P�y����kkOgx�8���ۼk����XaX$'�����jJ�$��J�v�q-�~��[y~T�

�5

+����ƭ��+eDq���w�_�
\k´\p@��>+`���rS��������	BA�zC�l�l6`��X
�^@@D?�BrWq�P���U^�o�
���.�7!�@i���
����2�<�E�{o�՗�|V$��^x�ƒ�5�V�K����ǟ���Ŭ��S�7y��-����i�
�K����c�z���y���F�s:F6S��I���
i�Q�BbV$w�y�7(�)\��?O��$�X7�6f�o�1���"\?:��12sǛ�� >ܦG�}:�]D�8������H�a
6r����6!���l(Q�D8�.9Q���
l
�������a�xn{�������d�IU�G*�E�%�௬= 8JGȑ�h�@�֞u ����D��B
!�I�&���.��7.��k��@��w3
0���#

���s
̚��U��ѧA|x�h��ײjC��f.��E��@aj#�)au>�˜9�8
�����~�(��*ob�(�
��ۈ2���{�YePWo�bI�z{U����X$��s~o�8��
@��ш�؃ƒ|ҝު1��otzn��ܼ���ot1
+��0�NG�CHD�!�}�ꈕ�ѰUG� ၸ
�C��)
#:��G�]�0G���'<�4
+������L�u����,���XPb�Y��;�U.��
�!VzҔ����A
�I, ��0wR�&�6�?e�O� 
�(j3�S>XpIR�r�jw��9(


��S�9��Q��p�S��T�CA�%Y�%6C��
������m�ƚY��ͪ9���C'|�K��T�j�ۺ����,X�ȃ
����O��'����xB;$���	�U�
Ox�kZ!�3]�kgIlq��0$B"D.C����-c;�uQ�`����s�#z��%-2�1���!ߺ(]���,�v�
]�|
(�N=S����a�!�lϢ#9}��K�v���K���5.� V}9�2��C���9HO���|�T�S��
P*K�e�Y���M,v�)�
0��r(,�$�����q?pL��3�����z��3F�!�*��&�a�1�g�q�
vk���E�jv,���Je��X���&�]�n;x�V"� �����

f�`sfy�-f�@��ǽ�m���\ϸrfDF- A%O&f�G�2Bi��Č���ME�>�� -

�e'ף �
N� .J�ϱ
a�G1YρD%)g��������
+Îy�Y9�iB̀
�˛��.x�DB���yi' ��e�
ͬ��B
+�mV�>�].
pw�+W��O,Z���z+X�଎d]t*�Y�"eA>�C
+1b��<
+DF�` ,�`
+�t�����@0�3��xR���H��T�I+��g�^
+�
�)�q5g;���	ؖu(V�g��u��Ԉ&�a�
�jOOn�#���f�٬vj&�
+�_K��� �w1�Rc��K�
��o§��u�Ei���}�vU;Xtl٫_���]Bo~m2�����`����*���"��|\.f@���.��,���+~��w9B�q�����MѴ���⌖i�٭�؛;�?��k�)������>�6�;
���tAq{��إO����%gdr�<�[}h3��1̛U7Z�����֟m0
��+n�=�А��~�FǢ.�a�O���:� �A#�!\>鱗����O,�v�u�QR��
��GY:U��/5��)�q�R+���3�XΙXӮ��>��#��N�X�����7O&�ʹ67]eV�4n�R�l!����$�D��R�7��N2�J$���ڕ�;���R9�9͎few�mt
.CM�#A�3��R�۹�޽��UB �x�♅�j)����~����o"���c��?u2���
~�X����Wd�&�
,f3ΰ �?�I�dA��qC�"R�!�<p`����y�

+endstream
+endobj
+1760 0 obj <<
+/Type /Page
+/Contents 1761 0 R
+/Resources 1759 0 R
+/MediaBox [0 0 612 792]
+/Parent 1738 0 R
+/Annots [ 1753 0 R 1754 0 R 1755 0 R 1756 0 R 1757 0 R 1758 0 R ]
+>> endobj
+1753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.771 607.308 261.493 619.263]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 550.231 279.252 562.186]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.357 355.089 332.08 367.044]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 290.684 165.88 302.64]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.1) >>
+>> endobj
+1757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.78 114.609 177.503 125.457]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.1) >>
+>> endobj
+1758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.156 62.16 442.376 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1762 0 obj <<
+/D [1760 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1763 0 obj <<
+/D [1760 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1759 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F14 1050 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1771 0 obj <<
+/Length 3740      
+/Filter /FlateDecode
+>>
+stream
+xڽ[[�۶~�_�Gnk!ą�4'�ԩ��$�%n_��
Z��ҖH���l~}g0 o���x�'� 8�
f�@��v���z����/^I�r�i�WonVV3�2�1-���v�c���^K+��E�n��î,�ؤ��c��ʺj���	a#�������7W?_q�"]�H2cV��f����z^�R&�]}���+%
�[�p���t̢
qȕa at m�
g�hb��50X7�U�%�]Am��Z�$��7�{�ʛ�ٗ
���Ϡ��Ỽ�=�
+�;��Wj��s~�i�d�eF�8�l�
����vJ_	椉_����z��,)��t*�A�"����WV3�l��?ih��I�ɮ�
���5��eA��ɷ�!�\����mQ����w��h���
�]��*y
��
+�rl�-#1�]��2���5g�`R�����8�_��m��0��E�����4K�eSl:z��
2��-5|,AZ��6��Eh�T�s~���a�����VP�`)J�$N����*��I%֫�in
��d�"��@�'��|s}C�Y�HrlF�b+j�ZP��zm�K
+�
�=�+��7�o^<��Y4)�o�Di�$�]n��d=Ao%�ɚ�9nƛB8	��ۡ
�)o���CW
�!��O�Ͽ^�~�#l�&���O��ء9f����r��LL�~���l2�7ǝ�K��a5�~��c�͇�Ʒ嶠ޜ~�缎��և<w�,��]��
yU��|-uʌʦ{z[��rU�
 �4oig�Ի�g�c��3^<�$/yq�1!{/>�>sn��,l�
`�`�ց� - � K+�YUL��3�*�>�\@@K�x�
dDN+&� !^�”�0�67S@��
+��C�-n���'�a��[l��� a�=-t�!��3%xƙ�S�Z�dW�O�
��
rIo]�ؼyG�S����RBcB�Z��e!�d\�~%N-I���TxJR��o��%������`Q�=	FA���8�gCIP�)�P��!��g�	6�� QR�l�R`i��a�����rKO�.��1�SX���؇H-`g")�F_�wyd��T�7/;={�J*[Ph�?�
xLd�)�$�eFij%����,��0�]fA���r����
@�*k0k��
+�u[��0��͝��N��.�m��������3� B�WB_��	���#�8q����BB���Q�O�u������޷]����[���s���+6
��s	6�
��/e�G���"��`~��"����?�TJyV΂�D L_ at Il��c|X>���Q��N�?*����d��$C
܅d4�v�u�iL�k�.��5[���	��E�}$�!��M1cf�D��w�~D at m1����|w��},�>����fF5�������f�o�M�k���:��{w,�0Y��<�R�쁁�B��2����5����$���^�(�'��gK.Gn�=c��.��P��wFE�U=�<�!Av;��/�V8șv�W�f\&�]�Y�\�3�=��x�p
��~������h��1�����D�"��{�����$�}	�WS`ɒ/��c��8|iQ׈��',�C�;˙;ؼ��I�~Ӥ��ܻ`NU�Ig���
��3
q( �#5-Pb��D�;T�����*�'
+�y*��V��r	���w.O5�&��j��z�
X-��T�
���O}� �
�c�T
��*���5�/�N9m;y:6 ���v
0��-�gpo�
H�|�/ْ�c�t��K��z���;����O�ڧۉ��Uf�
+1]��d�k� �,)
K�������@J3k�.^�'�AP���s�2�K
+�
�A����K�A
G)��`�������q0
+�
+�ֲl�뙌:��	���d*[V�L7jy�J8�mKgF�PPҲT�ԓ(:<vz�8��L
���+ �ljc�~?
+�cz�؁��~�O
- 
���žn�-�-�
8�-���:)��
4|l�1����z(�T	P�aj�����R�2���'�9=)��!5���
�rGbm�*
]I�u6���A\���d�ݞ*V�+���h��y�.�>��	9t
��1�S2����{jm���g�tn�	�r�v���M5�{��G������9�
/"Dl�c��x����4�����-u7�M|N��������m{sܡT):Pl�E��+?\G�.�F
��k����;���-�bS���2��
Q�E��;ɣ�m���1��ת��n v vN�Uu5������z�6Z�o�d݁?_:��b�?,�ߜ:h>3�;
+?
��� 	����on����:�X�v�z���Q3�""4Q,u���]~���)��%��%#>%,ʓ����qWT�0̟6���m�7�J*c�7`�'�c	_���B��5�g;Qjca+�e�}��E�|y�:G 3U�B%��Q�Ƕ��]��o‰��
�ӥ�_ at YNEJΧ�x6)S��T��N7��C���=Z
� 
g�
+t�f1>
��x�.R*��b�g�
�Q�l\�q��l|�BPbm.�q`��O���rX�{�$(
�L��e�_
��A�i�
�^Ю[.P���B�`�
��3��I

"A�nmR����ݓ��`�F�,��S�*v��f$D���;�T�d /��†�%���|mX�s���~��Y6��]�66��ze������
�@����f,"��"�~��Su�\�Z�R9��8�
�-,�7~
+#�
�g�G<h�盦n����V����_�bO�!�=Õeθ���BkH�'+�/�}��B>�2'�%{�1�e�%
n '�\�E$��1��۷
F�1���F�H��3��!�'���v��>H0O`9�@�s*p��Ǭ��;$g�.
�O�=���C&J��~�"��<8wS4J��e�Ǧ�
+z
���j��\��;k��Q��>�P�?�xoJ<�����)�p�
�#|��ME��x��-�m����`��84Ex����$P�Lu���~�9  '���4�-ۨQ8	�� �s�K��2Ra}1�I��`1Z�k
e�}�|o��
W�h]*�Q����s�"�[����P�yw�{��_`�<�7���ᬁ���egx6
Og1(O
$�`��ųdSin� 0�MS��)��3��p����PL��DEx8��]��o��0���m�/Ɣ��%����B�	���M	k|O�^;��#aK��^Ie�QCN����y����q�6Ի��b����	��r�g�}#]���8eYm�M�.AY�������˲�n��1�Rsf��8���+�'k�UE�gT\<x����`&{�5��=������x���>��j�.|T8	 �8�W=�Lh�O����("<�R�8[p�2
o��.��afc��
Ɂa3�����Q��b�S���B��':����F�Y1�
r�:�8C���j

��>���`t,_./�p w�a��E��%�w��|с�����V\�ϟ������p�H�2�����P��ΑR�����?�
=��[�9%�jq����eP�
��2`�v��0t��	`_�9j��~�H�>&�h
+W[��nC�ߺ
�?5L'Q���\��hFG�B--4���G���Z f��w�c=j��
����x�Ww�_)
�
\�x Y�x�V��}��@�#%R�O��
 ��]6  ,@�uh_�����
RC�ǩ:�
4l��6��뉭Q�zڜ��WK�H(Dxr����X��
+endstream
+endobj
+1770 0 obj <<
+/Type /Page
+/Contents 1771 0 R
+/Resources 1769 0 R
+/MediaBox [0 0 612 792]
+/Parent 1738 0 R
+/Annots [ 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R ]
+>> endobj
+1764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.288 614.046 234.262 626.001]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.568 614.046 265.29 626.001]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.7 485.138 317.423 497.093]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 360.959 279.252 372.914]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.357 212.701 332.08 224.656]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1772 0 obj <<
+/D [1770 0 R /XYZ 86.4 726.045 null]
+>> endobj
+254 0 obj <<
+/D [1770 0 R /XYZ 86.4 659.888 null]
+>> endobj
+1773 0 obj <<
+/D [1770 0 R /XYZ 86.4 591.782 null]
+>> endobj
+1769 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F38 785 0 R /F14 1050 0 R /F11 787 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1784 0 obj <<
+/Length 4220      
+/Filter /FlateDecode
+>>
+stream
+xڽ[[�۶~���[��.K��9=�Nm�$u�6^�%���J�]:�(��
��� �I�v�U�$��`.�
F��n�ξ~����?���&6����vf�D�4�I&��z9�i���7�e�wM����F̿yq!�������=�U
^��j���j�k�js��o���~��â�u����l�X?��_�l�7���DX3��ƭgR؄����}��g�h3��I�`�YfY�t��^`����|^�
z%�_I�(�1��m��c&�svC.i23�7K?kyK�l���y���)�6���/�л\�E
�*B
�"����.�U�y�IW�/��C&JΒTr�k��)>��	����o�
+.f��{��p�nj��<F+��T������XkL�1=}0��%V��ï
+�P��=�0�If��{���4U'3Ԧ��߻�#QR��z�
YЪD��N�z����q�e�,�6��=��D�&Zp7�~Ϳ}��pI�4N��cI�BH�dɗ�_~�s�Ҩ���'���X:S��z���K�
e�}:��1K#3�������
�m]�}+M.��`��{�
R@�͉"W��� ��OK,�K36&;1�˰��K�L�73c���ny>�T„�z	��u���\F3<�&��Y��2h��$
|ቄ�b���h�"߄��8K�VU��`������
�n܋�-1L�X�Ԃ=�#8n�R�d
��DfO3qi��L��x�m�E�/�'��RB�>

�;K=�ZK��ys�H�
�/�P����	eC3���%z�Lsx#��`@Ժ0c`��Yք�1���yҼp!q���x��d�M8����K'2��5ֱi�|����n���&e\�&��Y1����!oH�qo�R`�,{�
��#�d=��v
����-�"Q�O�s0������X���e�U�,7y�9
�뼳
x,7��Wf�]25�ٵ�?�)�`��+�5|s�{��î��O�l*z�iU,�!�=�c6:!z�5��go��7�x�tUu�6 \4r?��At��.��n!�nG���ȉX��=�_������T�{���(�LY�@�w8��I�f���4�$ �U��O�l�¸�dgZ6c�,
�w*�ɋ��"�=�ś>+=���s�^��X�����A�4�	�W��n�-���7����ث
����������. �
q��WyM�EM��
T��$y����<	�h6_Wu[���lQv ���N��k� �� �0����b`h
+t��<
�+c�ZfHX�-hV�4'``Qȟ`*��ƞ� �h��:RŘ�%L� 9�4�� ��
�(�{��L�eQ@�,��E�o
�
A^��`�2/<�1/<�#�C2��!��sS@R��gؘ�(0�
����F�F�x��]��aS�cYl��.򦠐 n�����T�M��:_�U�o�ZQCΝ
+yK_��w@�
E�O�,���5t�
�G�8�^���wS��Kz����t]ǣ_J	��
D����r�ʑ-��s=Ν���������ă�9"*�
v��	�=-<����MŴ~��\��|
F
		 ����A�Dx� ���o?�
Q4���x��
/�F�e�ayl�EUJ��,�Si��3�Ph��T��:���	�b�!jW�p�&4�D��k֯n�~s�]��_��'!-�t�����f:���b)eTPo�G�\�?�����)�B�,z��͋���� ,_��,Đ��m
tk4��,6DQ��o��îj
��{������r�1���5
�`���U�G�,
	�
ɦ �C%�K�_op|��.I��q�Yyɲ`�бpF�Z��i)~���eSt,V�ex�ڑ9���Q_�ۦ�9
+)���khA�`������g�>-^�
P�2Dq���M�;��wAn4�
+�t�a�ҹ
�<��'a�|:r��u��*�>�
G2�B�c�.�y�XX�@�aW�O2V'����k�w��:���:�ïDF1�^��v49�`F>CrD1�:�,�6�x�X6�.��%�;ȕ
�\�r>�鯋�����Ȫ���ϼ,�E]x�Z6
M6D>�ò�D%Q���r��
Y"��wWda���\O�3�b�}���
��E`H��߽��:�O4�d*DO�J%Έ�Je�������^Er�8ެ?�%vr��;���;�����WM
�C}�9�$,� e�%��j���$fI�FA�?V��l�ȱ����,X;��M�Kw��n���$1�U�.=F�����
"�ݐ� R�V3��
X1hhX����@���%Z�3@W"����9%� �L��*��?��M��[P�g��
Ԧ��-�t�Uו�{/_�[���%hv 5����2�J����Q�H��\&�\���w�Ak����Z�Y'pV�qE���M�
�V ���C�A)�eY��?�������
t1�[�6��N�0k�"���y���b�3Eft
R��
]۳ć���צ/���4u������n����횞���z�Y
z���I�m-�|\�@�؊
y���~5J������ ����>&|��6�~����pL�Ӻ�Z�`��A�o���nM�}
wħ� [...]
+�{2�&V4� ��d��)����n*�’?���!^|
��A~�LdDy'��
�CJ�(~g�CJ�N{���;*ȃ�{	��>����r
+�����*Q����i]܀~��*�(�먦�����)B�sӉI#
m�[vBƀ�� �A	��!19A	���W��B��	��iD_^1��S��Ιp��2����ށV��`����K�5���0����XT��uY5����
�� �������
8,��z��`R�$�Ǔ���W{A���˰��-־Mf�]J�������z>�K� ؞ZztNזĐ�߃Cm����@9����(&��$���d�y\�$�|�����N`Ϩ��ُ{vuݣpz��B���]��|y��r�WQ��]�Y�&�4�Ǻ�oVEr�u_yʮe��i����Ȳ�ЯG���w;"J*�c��
nz�>GKU���h靜
�^d���q��i���M�����������#[�&��>��я��
&����	_]4�r���ѝ�EvN%L�{���t2D��b_��$��_�s�C'v�W at CC��g���f����yA�
.E1�wOʊ���o4�d�2�# �S��t��h4�|��$P� [...]
+N�&��%"�8��(�t�ĊOU�|�d��3ؿ�� /jG�Tɑ}��}g����.��4����x@�l�U�?@�.}�v�v�
���b m�x2��E� `�
�#
+uw
+�d xH���nޠ����/�bJF����?�L/��
+��>K���>�՜O�O�P��hr���ØjzZq~wFS1)��aG�	�M�D��q����./�ҩ�1݅(����J��u)�6�:�\���c�t�>��Hܘ�D��9�$C�`�IeZ��A��
�L���‹6��1�V�Q��h�a�/�+j��A�
��
����a$cbFQ�3�Ӂ���c͑�Q�@pHT0�x�.֕�9F_N	IW���z���x�ц��a�{0��̺��d���qJ���%St���T��I�+l
a�O�e_?�m-�.��k���d�%��$
!���
����7$�-��`y�ν�Η�Z�h��*���]\D.�\�EU��

��E�/r� ��i�E��7�`s/�Wi:
�����߶�!�2��n\{��\(�ڭB�y�щ�4�L߆a;w~�[��ש{sJI��
�d��}\�!5]��v��BX�Z�	쩋E`]�A=.Xw�տW�B��@��r|>��D,w���C�_�����вڌ7~�V��Kv�nT'dģ������Ԯ��
�zz�
���P��{6����]���H_�C��-�uȨƋ����_
��'v�[���
U*9�u����|�EVN���]��)k/8R��w �3�r�_����.T(
+endstream
+endobj
+1783 0 obj <<
+/Type /Page
+/Contents 1784 0 R
+/Resources 1782 0 R
+/MediaBox [0 0 612 792]
+/Parent 1738 0 R
+/Annots [ 1774 0 R 1775 0 R 1776 0 R 1777 0 R 1778 0 R 1779 0 R 1780 0 R ]
+>> endobj
+1774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.314 564.288 250.036 575.136]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.1) >>
+>> endobj
+1775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.156 512.065 442.376 522.914]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.421 407.916 226.395 419.871]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.646 407.916 256.369 419.871]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.771 285.906 261.493 297.861]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 200.968 279.252 212.923]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.789 49.651 372.511 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1785 0 obj <<
+/D [1783 0 R /XYZ 86.4 726.045 null]
+>> endobj
+258 0 obj <<
+/D [1783 0 R /XYZ 86.4 454.355 null]
+>> endobj
+1786 0 obj <<
+/D [1783 0 R /XYZ 86.4 384.609 null]
+>> endobj
+1782 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1795 0 obj <<
+/Length 3838      
+/Filter /FlateDecode
+>>
+stream
+xڽ[�s�F�_���2�v���>�&M����q�pm熦h�=ITHʉ�����h9��>�\���?, ��^�ŷ/�~�⫷�.R�ZiW��2�p2eV���f��R3�Z�D-l�z�
�mYl�I/����-�}�Z�TJ�tf��Ż�\���B�|!┆%�.�݋��
|y��L����[h�2	O�Ň�~��|Hj2�Ԧ�	g���U[4~�8h��ZY�,_�B/���9duS��,�.�lOo�7zۭd�[z�VY�ބ�y�;�E��5͹�Wk���+�<�Y�)[#�
+��f���&p���g���[=dU�,Q8�L�3�⤊]>���j��!�4��b[��
+��m���u1=�~v!���8�I8% v#����>3�b���h�aX�����׳,�������o-�KE�qw:�aR�Q��Z�@���7YV�
w������^XPRۭ�ή�����,u�<͏��g��f��5��C[��u�o��]��P߫��S>Ü2)���B�l[��5���s٠��?K�FjX�.m~o��1
�W�j������7�[AG<�bY�[]���@s���=k�(Y=f�9�
��"
mB��M���o��V^G������9i)Ŝ~�J׫PEK�T�01qM�j�{Q��+��=��8���U�
<V��ey�݄O~'��5	CŸ0iƝ#Ɲ&OE�iV��&��v~��� ����
�dmFM�~CM�%���o��Ԟ�u��r���/�M�a�>��iE��|�6�t���%���oˌ�,I���<�.I��a��3��p�@+��
�F)$QB at z������
m5v8�C�w-	���q((
ȫ�f��0+��r�/u��1e�X��2��㝱j����t�����N����gFԆ�ި3��b�Zi���A����*L��� ��7A��]P|/n콧_�+�� �@�IYI
3�#�s�&��뀎~�v�k4ӲS#�@�dњ�	�����C�.l�k�N��f��1����7�Av<j��?�a
+��v2�QX���M	�Bu��=n��X����>��@g�s��v�4W�0��r����i�Ѵ�9.�sj��%v��M����,<r6����l�wGv&�T�v�+j��
�
�}<f4a	�5q�@"���Q"���םJQ��2�y�-�y���|{܄�nt~�����N����
`�H�)������<����g��q���jD~ ��e���k���U���H� ~�Tn���(��cK�	
��qW��Taz��}�iw��Mvih��� �ޝ
6*�
\���
z��Oš�_tW�f]C����ρ8=
$�:�
��M��n9�
fL���'�CT&TG��C���x��G��x(=R
+�"�8��n�ҁ���h_���9���� r6E����
4€e�9s�
���f�cL�Z\8'"�
+ 
+<��f_jpԛ
+�
��>~
����#Z��)��q-\�R1�~?����TaF"N� ��OQ�$HN���+��������o���(M�
6Z���=��#R��L+�msʓ��11���ⰓR�yj�E�nf0�eV�
t�0?m��{#Mʔ�xOtw;��X!�����S��JrJ�ە��UM�
�v��a�	�h�A5t�{ze�TEx�
]� �����@�^�ybnW�@Ӷ�YM�M��Ou�KaG6�{T7�p��g�	<�i�:��2�m?�e~=3K�w���=12
S�0��~��j���
iZ��NL[�:�⾀�g52c/gAf҇�q�
�:L�M��	.�GۃI�Ѝ�Wx���29�؂a1��A XX�$3��&���ǀ���}���ݖ���f�~u��]���'�>F�s�_vp��7��6p�.�]��T�V����
Ո�	,�!2�����U�wV�dr=B��7}G�����t���hh���ާ9&L�ߧ�S
'��
��M��&
~@{�
�����~ז&����)�9
Vx�
���8>m���m�ì#dO8�&,��XDc��@�����!x�� �	a�̑��=��Z�m?�����\�h��
��� <:3��
��Ϲ$)s�Y�t�E�u�b�ِ\��{4SI�x�F�����t�aC]��CN���m7vzI�ؼw��EV���
Ю���Z���E86D.mL�Ϡd�HMD�!����)
`\��.Xg!�X�”�
�M��+̓�
D�Rk�
+�v���9)fճ�Q9s�

u
e��
v

��Q� �YD��}�)e�g;���
�3D����bS;V�����o�rCO/�	�x�:�$��Z����sӇ��l@���/W}0 �s�+L)���
ę�E�S�
��e�`��"�z}=1��`Ni�����`d�u�íGSL!���@��}��CWov�o��a�4f���«��@�k��C��*oХ���^�;��;z>�3e��
S�c�
=��P`ypW��L��'���Xhw(��1�>Ħ}�QP2�n3�#��>���~��4���7X��H�
+�J�q|�p5 at m���G��p�
]fÇ�dvϳq#ķڻ�ѕ���u�8��e��=s@��8��]���:i�B�^��������@�~�L�CB�.1!�Ρ�5Q�F�������8�#�`\�@d)�ï?��H�?���	}��d�o>'[	�Ĥ*H7
��4��f
҄��=�|��q_.
^
+1־��봯.�rs̶��ql�p��cn���Q�T����*���HW��9����1�*��A��9�.���,B�I��=��eJ۶�%N�X;l�� �>|�
���g;��@Sul�m�ah�Q(�6��o��)ޑ�C�g[�DH�?F��Q���/����jD
tTx�`
+�k�{Ղ�y.���)CL摄�98R2��W�9H�Twb�:���pCG��&���D�惚�ʐ\3�̟#��SI1�}ݣ$�
3x}
��J����/-��7܁B?
+�֚˾���v����^�2�$
q�O����D����D6z`�Y

uB8d
���t>﹖*a\��o���I�̮��m ����b
g��?`e� �KmGV���T��w����U��
�N�u�����	˅9���y�B\*8�i��"a�ZR��`���n9|to�TκQ(<���n��|2$$�%Xk'���Ê�c
�%e̤e8 �Gg��ie�I�hϳ:�VM����+�j_ at Q���V_xuE9�"
QT�(�c��¯I�o8�
������^�'%|�c��bj��!"u"D���M�
]غE�����'�}�r[������XVwqqN?Xf�6�<��4��k��i�s0 �I}qc�u�B�M(��5�}���E��
+��ƐH�z�2��y��nTG� ڽ��
s.2V�J�>�/�`b\�L�b�o�;���'���Ӹ�
+[�������*^�Y��kO2�(Y���'|��
|�v
~c���y��O~D��C�RFo��
�B���2:���S�-��&4��'l@�D�N��YI'���'䬈�˞���'-u,{�}c�>�B'��~^��~Z_�O$.?�O#��	2�9-t
+�g�f���|�S�6F/<’O��+#�d�U窜�_z��	Jʸ�dM�#>�>-��� ��C�Kk��N��P	���L�4�v!��L�m�7�g��O���Z&�l_�L:���{o ��A!yik`>7��y�AG�:��[^4�۞�nu�}a�|U�4�@�m�v�$ՖX����$@����&���4%)��t���1��#�
S�t�����O�
�
+endstream
+endobj
+1794 0 obj <<
+/Type /Page
+/Contents 1795 0 R
+/Resources 1793 0 R
+/MediaBox [0 0 612 792]
+/Parent 1798 0 R
+/Annots [ 1781 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R ]
+>> endobj
+1781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [503.308 616.511 518.031 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.2) >>
+>> endobj
+1787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [325.641 552.149 355.862 562.997]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [117.517 475.652 124.491 487.607]
+/Subtype /Link
+/A << /S /GoTo /D (Item.11) >>
+>> endobj
+1789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.997 475.652 155.719 487.607]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.318 328.967 436.041 340.922]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 214.98 279.252 226.935]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.156 67.974 442.376 78.822]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1796 0 obj <<
+/D [1794 0 R /XYZ 86.4 726.045 null]
+>> endobj
+262 0 obj <<
+/D [1794 0 R /XYZ 86.4 522.078 null]
+>> endobj
+1797 0 obj <<
+/D [1794 0 R /XYZ 86.4 438.056 null]
+>> endobj
+1793 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F14 1050 0 R /F38 785 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1803 0 obj <<
+/Length 3216      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s��_��R���`��4��2w�4�I�Óh���BR�����bA�� َ��t�/6��b?��,�K�䫫��\}�Z�$g�&��M�a*�"gF��f���Z3�
+��<����w��t2}�j"E��d��w4s��ã���J�m���ڬ'?ݼ�����+�f	���)��VW?��%sx�6ɘ�]r�׭%s&`�L�]��*��Y���69g��Z1�r �
�~S���z^!1t��3�-�uY��yh�rƁrXÑ�O_���d�
�I���wD�n�dܗ�óO����r~�C��
XV�
kz�.JZ
�j�ZM���-�o�
��P��‚H�C�	��h����z�Z�_p�[ϼ���
�
���g��iY��
���><@
f��N e�2O?F(���[�yl��i�^XQo1UR1%r��WZx�(�2�
h�㍕�y^j�>����v�O^V0�*ں�����j66]���[�5JϦ�V��
�
+m�{ф�����W>?A����b�y_�ё���*07����ۂm�s�o��6���L�s��Ӈ�=%gR�2�sdW
�n��g�
+Oi�~��m-��~���
��y�"B�fB��9�LAқ���TC;�rhx��=�?�m~lniI�K
��Ӡkj�J*c��|��w�j٠+���|��$g��
�����W�rN�
M�n�K��p�&㌃�a\��Ŏv��q�
s���X1���7��rf�M�,s�,7�w� �ųI8��n
F��
G�I�
K7yEҩ�8׽{���[[��-�%h��Z�4 at w�I�5��Y]K|�V��5
�>f�� �������q���I��2k���ߗ��=���p��'S
�
p�t"�I	�P:����/�MJT-��FDh۞clo/B���\����;
i���<�9s���`+�E�W(gg��% As	Jء�g(��)�|r���3�OЍ��s z<
q�-h�l���jNk>� ����%Z,����~�i�2y�^ e'-�r{�ӕ�LH=>}��v�E��ف��*	���&S iR���v5�MS�^N~�
+��q<���>���2�0�5�z{�q�)�)�`:3�T��|�F��J�!�
�$ǃ�Q��V���6���3b�@n>��C.�vu
�'& ��室�=t�^���.	��Y�(���E]�%;ަD���?�&�rt;x��@w%T at 4��jI�Sa$F��.�ۧm����`~��"��$�-��{2WsEٹc9�G?�
�t�p#��|�|u��)_]6�|W,�՝���
��˽>�<���Y��
��X��T����י˥NO�W���@t��"�����tQ��!<P
�8nOs\�w�v�o��H�}�c�h�&�
�n���:�+ƌ,��K4۬���
���Z�5TGt�Ƞg;qHПESWǂA3+��9���a�ʬ�j\��m�	(�F<@vjS�-*o�t��)�e������`S}
�s��V�^��X���p��r���Wt��A��.`�o0���
����􈑁#�L>� ~�%.�����
PO*S�fY��zV��x�~j
~+�4]��
m�[x����!L��v��vҽ/W[*b<�Մ��$�aLr�8�\"}��T��R�fES^�q9���}4�:�!AѲw��N�
��
+�
�E�\�<��P���A��j��1�J`@gp˜�Ylv�9�ZD��ŀŽ�� ��0Z�MC#`�:R�M�� z}<�S{����
�H:?_�#��|fψ%-��a��|-G�T
�!b��*�
֬7�
+�Ei�V�d
*
�M���0�+n#	�ºz��
�5y.���E;���u[I��vT�����A���_�𵦊�)�-r��O��#��
+C=bs�l
�q���GU at V�1��m�T0ic�
_utj�g�)���u#E9�;'�~�_#*?�
��AQ��
�3
�'Bv���ۂ�����y����+
��D��q������-�Q	1?(� ��}�kR�q
��2r���jP"��l����h#
�Y0D3D�MYFt$2P�_O���D_�=�b�������,�ts�Ga9^n�0�&�&�DL
�	�~'��Ŧ3H@��21����K��<���Q��NºP�R�h
�6�*����Z̝cz�S�Y�2����,R`�Z�(�8��׶��>=
�Eӣ
`G��>����)�������AX�/��
��TYɄP�2�Qn���U
:߮�Y/^$�
i�
� �� �զ~��?H��Y2��!�>�Lj ����ӄ�|����_
+��%X���e���O�q+i�%�㘣�q�p�ۯ��~�z3�I�( ؝�'pjK�Բk���AѦ�OH?�Ŭ<�Ar�y�A
�۲������A�VgYz�ᡴA0��*
���p�'����#���{��~�v;
~
�9ʋ�.v�������A���;:��^
+P(_Ʃ�$�-����3A�I�u�:�,���Ͱ����v[.!�j��j��ǟ!���B�������a��u��>^
2 XG��K`���� {
�`q\��
f=�(1��c��
Z
��)=
�XR���W�%���dYW�
���t]ލ27�Dԃ��S�ӑ�k��=� 
�K
��w��)�Έ��%�9����y�0��$t�Ų�+02�q[д�A_1�� �=�4h��
g��ܠHج˻r�����i���eW�eӽ�X�θ`QG̴.��\q��`~��Q�Q����Q�l$���I��$�|_��z3AB�e9�C8՛N��b4]�i�سa���e��vfb at R�l�x�}�y�B��v�G��g���>��c۞�ɰ<���?���4�e �|zBw��|QwDl��@{6[���s���g<��>��J���gp�����۟A����H�2���K_�?��h./�{�[IH�~S����3N�q�?�D����
+b��S]�	Y+���o�
]�~O6��Ч:'[�5���Vb�&�M��
P�����D��J�`����	�R�E���vc-b(�sΟ׍aGݍV� �
 ��I��JHUC�Дa�c(��	��sD�l��<�R�wz���a��/�<�?�k<�҆c1Z:j化��_�,��!���w���N�Zb1��
>7��J� ����
�o
yQ[H�\����
+endstream
+endobj
+1802 0 obj <<
+/Type /Page
+/Contents 1803 0 R
+/Resources 1801 0 R
+/MediaBox [0 0 612 792]
+/Parent 1798 0 R
+/Annots [ 1799 0 R 1800 0 R ]
+>> endobj
+1799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 426.168 279.252 438.123]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.644 376.483 518.864 388.438]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1804 0 obj <<
+/D [1802 0 R /XYZ 86.4 726.045 null]
+>> endobj
+266 0 obj <<
+/D [1802 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1805 0 obj <<
+/D [1802 0 R /XYZ 86.4 632.555 null]
+>> endobj
+270 0 obj <<
+/D [1802 0 R /XYZ 86.4 260.422 null]
+>> endobj
+1806 0 obj <<
+/D [1802 0 R /XYZ 86.4 202.576 null]
+>> endobj
+1801 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F48 982 0 R /F14 1050 0 R /F7 1094 0 R /F1 1099 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1812 0 obj <<
+/Length 3502      
+/Filter /FlateDecode
+>>
+stream
+xڽZY�ܶ~�_1o�40�� ��'�\r���Z��q��C�,�r�C���O7�5�ʲ6y�% �@���L�9l��wW����H7�������M�2��ܰT$��b�s$���D&�W�V𨳇&���.��^Է�<���ֻ>/�
�tØ�����v�㱌M������^\_��J��x����d�ٟ�~�%����M̄�6�n�i#�a
Z�͛��b�xz,�M��H�`�Mj��N�pv���z9�B�Lw3K Zuwx!�}�4���,�����RQ~�-u�%*�p��^&�de�1��͘m͸����c�,"X�U��]�!�z=Y#a���سKR�8l�K3��Ϛ�ʟ��mˢϏa6|i�]ݬ
=�y��_^

dm>�_���d�*��r��0��a��Pw	�|�P?!�fL3����H
�G�>?�
�����/�Ξ��}��oʼzFs�M}�͢�A�%���b��	��ִ�>&)O7ꬳ9 s�$�(E���^1>".Ι
�K�%�
�b� �QD/ޱ�NJ5,|E@�
<����L�,����h�����Ӆ���6� �� \ZnR��y=�q��"0n�4g2n)�!�Ȼ�
`51�)I�E9>L�r�Q��� �
�t���;���{�vȘ{���6?�V��,|�D4�9˘�`�G2Θ�ӧ�-SR��h�9�s���
�󶵅?W�x�Eƀ�35�z.�۾ڣ��p@����^=�������R��\�ٟ�p

#�Z؝���A�㋉���0Q�Qʝ�WɅn��(#��dOu�@c��X;���c:���zIn�)��k8��9
b��՚�q�x�zE�$
3�欤�"��x#��[JH�
��x����SgtW��(wt�}^y����Ty��¸��uZד�B�����}1��t�}������{P����Z�}1��K����Sp
�
��p���=�
�oݤ�h�=�{;�ctv`|*�0��IF�5�2z���N�qt�V�b=�1TLȅ��p�q�"��w�t�O��S����)�-�S�)#���D���]��˩
>J���*J��:8Q�	\͡�����D��ӱ�����-ն���ǦE�/�
8���>��w0��

��N�7�����Fp���ͺe�"��
���L9=�c�
vk�6h� L��m�8�H��;O
��Cw��~>�j"(z�����O
 �A�Mi
���$:���Na	͹
{�~߾H��eI��q�E�[;��@�4����'N��,��w��#��V1�	��Uw�{
#���
+7���l�-

cp��D<(?���B�xۃ��^���<܅@
f����>���P�ݛ���M�F�g�g� ���	����?
;Q8񎔐��`0�<��[�ns���	{�)G�
	F��bA|�9O0�E
T	-j
�Z�W�I
ar 
8z1 ���0���v�-P28��۵����x!�|�'��m�`}f��	Ey��	�лw ��]q�+7���[c�>�� p(�5�d:���V�l<����p��
+����П|*�aW&`o8Է4˳Cx���
�oI�;�hM��L*s��5z)ʠ�{��Ѽ�P
Kr��ua�kuwyG-g��ݾ>�{Me޸F�
����P�7d#�{Dl��Y��.�"��+�b�=�ܯ��/���?�Ѫ�h M��J��DZ��
!�#�����-Mp!gp�8����cm}
|���?[;�M��ڨ �<8��m�3Ќ�:�M��\:��v��f���h;K�w�_JB�$
+��
�i�}���G�&̈́�k{�-�獾켳X��+�(7^Źqaf�v-�CO�g�|HF�
a��v,J��mC��w���+-e4r�-��؅.dp�y�ˌ�{��:u��r
�����m���'
�@[�s��
���1
+�t�:�m�u��O�6|�]��+_:��� �=X y�>\ܿ��(��>��m;>`���	*����4���rgL�ok�l����hR=�]�"^���Jy�rz��4���ӂ�D
)FY�+ə��o � �����hWXÕ�bGj`O�E�x����q��L�W~���盛���23�xYRZ��7�����Ud
�[hh�m*��Mg��������\�qK+��7���=��DN+x��z���G�u�%�|(
J��aɲ����R��g�ʎ�h�*�PO�LT�zz���oβmw��R��u�k�Y�L-z�����jpřF�Đ,���J�LkX	�!������?�\��Kn:H���Y�Ӕk�+�ˆ�[`^����
�G=����Lefv���l[v���)KG�h,�H&d��b%gY�`�
�#&w\I�\�,Wӊ�
+x�
.h�W7���-��� 5OXfd@�-烮,lU�A�]

���|
�\v�K��� �����I�-�<[�
+	��;��\n|�F@��LX����UH,ې�8O23�t'�Nu�������h��46���Ce�Z��ȉ$Zh-Vo;����4�����X=�
�s����b�ۦ>
cԨ l++��Np���{��^�,2\
xU�*�uX�D�K9�Kd�j�<�U�(>�nZ���\"�Z(
&�C�0�p�M[(.��w5� ��Y�� vS�h��\���M��]�������tQ>+��k����5k*�(��Ww��aL�0�����?�^4�����$FO?r��U�>�8��NyA�`�3T�yFّ�kO0��}��G.���n�
�o��\<���������X߬�C�0�~F�I�р�α�#�%L�\�(��ɜG�{��uo�����zE�;�
DV
5�����ʧ����i��}i���-��Y�|�[���1#i���_��>�sC'�`R*p�'��V���
V
}�h��7���y
�XG�Bx_Q��),Q
���y �	"js���v��7�:���4c���KD�1��S᥼��b�����D8
],D���u��!�����+��
��	Hݤ�h��h'�,�μ���2�RϤ+I�`��b���f���	Ӄ�Q��� [...]
+
�4��%�d��#f�l �����i�����
ťz~_J�"+G��Ď����}��J?
�s��Hp†�t��։�<+%CcFg�/
`hF�����L�J6��&��Fb6
�G�E�@�]�h�Cw�
Aڒ�W���5�q�g(&���$�g�`/�b1_�	f^=�Y��

�c@����	��L��W���:����t7�]�c�7��c�ŴJ���Y��Ѩœ�`��{| ��>��$�����T������(fƘ��OE��1}�+ɠ��S��
�փdp�L
↳�
+,�#GӂAb5JD=ٱ�u�� a�]L"p��E�x���*x
�l��;���H�^����C�
��s߭+Lx����/(�›
+endstream
+endobj
+1811 0 obj <<
+/Type /Page
+/Contents 1812 0 R
+/Resources 1810 0 R
+/MediaBox [0 0 612 792]
+/Parent 1798 0 R
+/Annots [ 1807 0 R 1808 0 R 1809 0 R ]
+>> endobj
+1807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.529 647.76 279.252 659.715]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+1808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.156 344.902 442.376 355.75]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [331.121 218.124 345.844 228.972]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1813 0 obj <<
+/D [1811 0 R /XYZ 86.4 726.045 null]
+>> endobj
+274 0 obj <<
+/D [1811 0 R /XYZ 86.4 318.485 null]
+>> endobj
+1814 0 obj <<
+/D [1811 0 R /XYZ 86.4 213.983 null]
+>> endobj
+1815 0 obj <<
+/D [1811 0 R /XYZ 86.4 192.983 null]
+>> endobj
+1816 0 obj <<
+/D [1811 0 R /XYZ 86.4 130.583 null]
+>> endobj
+1817 0 obj <<
+/D [1811 0 R /XYZ 86.4 112.074 null]
+>> endobj
+1818 0 obj <<
+/D [1811 0 R /XYZ 86.4 89.137 null]
+>> endobj
+1819 0 obj <<
+/D [1811 0 R /XYZ 86.4 68.138 null]
+>> endobj
+1810 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F14 1050 0 R /F38 785 0 R /F16 729 0 R /F49 983 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1830 0 obj <<
+/Length 2590      
+/Filter /FlateDecode
+>>
+stream
+xڭYKs�6��W�H��X<I0�=x황IU�ⱓ�$�DY�H��������F�AQ�_��G�����M
�E<�x��۳}PI��,�It��l�t�ʌ%JD���K��ٹ�<�oM����+��OW3%�ٹ�o�gY����bC�7�zז�v����g�oϾ�	ؔG���0��h�9��'����3������DZeLBk
ݜ]�q/4
+o�g�)+��"M���m��e&���h���DZ.��uR��V���m>�犎�.�E���T�����7<e�ح�P�
e?���K��HiK�f��-I��XH\��u�kz[n�wm�l�-m���?M8�f�V^�jI��l�N��D��zW4#���ָ��8��56�vW��8�.��,<��$,S�tng�Ə��<_�g0�
��Tܮ
+j|�勺[^�d&�/�4�j�^���Gi���#��+~Պ�<T
��2alh��V/M����oE
+
�v�u�]�A�w�i���/A4HGI�S��M�.�a��p�D�
Z~(�\k7�4p���zZ�CT6��R��:���W]ޭ���U�]��ʅ��m��X
����<��z���W�s���$5��=�EM.w�)6haU�H��b
+�.tl%�2^�
e �,
+ғ�C�jͤ������� ���������k�Z�'�
ȳ(ڼ\7c��	�����v׻�$��|�)	���LNۥ`V
��B�|_חS�ڔ�V�)Ȳ(�u�/?�
+ ��^U5un��:K�� 
f 
�����a�b��H=�6�$Ϙɴ�I�-�kT��ڝCk�l�����Թ)���Q6�92}Z��"��0�/Q�7~�F9�X"F��C[��:�Χ�5K��z�v��x�P�]�֒�Lvg�{؃�NrU��%��	�4đ ���ҁIyG��=�
&�!޹�9�i��,y��C��/r��:"��|
�
�bA�T�S{�N�wݳ-7Oc?SAN=l������
�I�$��q�x|�r�>�
�gR8D�pY����
���bW=
��J��4��P�+\������A�I��
Z���O؃Ω�9e��A�E�=��.iz
O�Y�@y���绺.��0���#@�־28�H3 �dd��͜��tT�v������g�J/��O�"��H/��J��&��$*���$
���]�	���
NVj�Y�`6�"4F��O_�s��
 ���`�A�9b�@
�k��y��b����Z�
��*��"����bC�
��iM��{\��5��
�
;��~"�g#�ƘR�%7����7�o�fY�0�'==�q}�,�ۉZn�,Oſ���'�^ӎ[�����a&g���ɤw�y�f���,18�~0-����K?�{k ��3h��
wdwڭ�S`�8Lup[�B����
+XMкSB��)Z�<�U�	
���0�@��_��)."�c���	�a���Nc'g	9�3�'e#�,�![Z&�f�p
i��:��rA��Ë[tH!)��{Ȟ
��4�E�"�)��[��1����$
 7O�)�!I*�q�7�	;� �C"x �w?�t ��\���-F��� �h�#H*dG���� r6ޮ���5	�i�m�� �n��Ρ�>�A��"�U�%9}I��E
���ψV��x�|+y� �D�6�Lq��o�L�E"�L%��
��6~W�

�f����R��错��
P�_����8_$�3��lM�Y�@6dTǐ`H��-���zp��c� ��r��A&p6)ܾJ��F��G�@&p�&
� �����W͵o>^sDޟN�s�!
+e�b�b^ͼ.���	�"�ӡJ;
'"/8�Sk���tC�k�
��y;�T<�5�L��!��Џq����.4ae�1�=�x�HL
 ���چ'�b4��R��r�U/<�Q�d���HoV��/����nDz��9i{<�k�y9�x��☕n%!D��&9K�>�G��0�l�W��W��w"uQ��I�t
T���k=�v�A
�\�a[�W�LJD�=�b|_i�y:������E{�����Jutf�7 B�PzY�
>JZR��b���R)ô��I�,�F��p�4 ��.����U�a���H�&ztC:��g���P�Y�Ϻ<\V`z{PѤ�V�
�ߊ~Ϋ
ٮ�f:\��g�����sD�� �:�]O
��p%�1�+��)�H��>���Ւ0G*,Zڐ��:������#!-��ةU�@#I�r�����
u�(
(
�y_�Fh���5���ŧ�dB�SO�?�1�!��k�\��+̈�Ri,osgi��
��C��>�GJFtM�o���B�͵G�f��`5�$�-�%�,�?�ڀ�,s�i����ҳ�;<���|��g��8)�*XI���;(���
o
|`�T+�?��wE��'  � ��~� ��
 
�r�?��0�uį
��d�>6㠼ma0�CW �Ձ+P����8>�N� ?Q}�Wn'�0,���=���_���W�G
���l����x�)

ʪP���� �^˿;dԞ~��vy����/�7��qʨ�'�q>�Y&���[����^���n>/��MJP���	��
+endstream
+endobj
+1829 0 obj <<
+/Type /Page
+/Contents 1830 0 R
+/Resources 1828 0 R
+/MediaBox [0 0 612 792]
+/Parent 1798 0 R
+/Annots [ 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R ]
+>> endobj
+1820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.24 579.363 373.712 590.211]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.1) >>
+>> endobj
+1821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.785 517.499 406.256 528.347]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.4) >>
+>> endobj
+1822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.87 446.573 287.341 457.421]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.3) >>
+>> endobj
+1823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.701 375.647 147.172 386.495]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.5) >>
+>> endobj
+1824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.088 289.934 420.043 301.889]
+/Subtype /Link
+/A << /S /GoTo /D (Item.30) >>
+>> endobj
+1825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.696 278.532 184.67 289.38]
+/Subtype /Link
+/A << /S /GoTo /D (Item.23) >>
+>> endobj
+1826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.37 278.532 217.326 289.38]
+/Subtype /Link
+/A << /S /GoTo /D (Item.31) >>
+>> endobj
+1827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.713 95.718 352.185 107.673]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.6) >>
+>> endobj
+1831 0 obj <<
+/D [1829 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1832 0 obj <<
+/D [1829 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1833 0 obj <<
+/D [1829 0 R /XYZ 86.4 687.095 null]
+>> endobj
+1834 0 obj <<
+/D [1829 0 R /XYZ 86.4 664.141 null]
+>> endobj
+1835 0 obj <<
+/D [1829 0 R /XYZ 86.4 626.187 null]
+>> endobj
+1836 0 obj <<
+/D [1829 0 R /XYZ 86.4 576.278 null]
+>> endobj
+1837 0 obj <<
+/D [1829 0 R /XYZ 86.4 514.415 null]
+>> endobj
+1838 0 obj <<
+/D [1829 0 R /XYZ 86.4 495.335 null]
+>> endobj
+1839 0 obj <<
+/D [1829 0 R /XYZ 86.4 443.489 null]
+>> endobj
+1840 0 obj <<
+/D [1829 0 R /XYZ 86.4 422.472 null]
+>> endobj
+1841 0 obj <<
+/D [1829 0 R /XYZ 86.4 372.563 null]
+>> endobj
+1842 0 obj <<
+/D [1829 0 R /XYZ 86.4 351.546 null]
+>> endobj
+1843 0 obj <<
+/D [1829 0 R /XYZ 86.4 330.529 null]
+>> endobj
+278 0 obj <<
+/D [1829 0 R /XYZ 86.4 265.382 null]
+>> endobj
+1844 0 obj <<
+/D [1829 0 R /XYZ 86.4 206.807 null]
+>> endobj
+1828 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F38 785 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1848 0 obj <<
+/Length 3041      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W�Hn��g�
��({K��� ���
+	� iY���=3 1 ���dw�r�k�������
����u�����3�	I4׃뛁�D
O�lp=
|
JbFca��	>\f�e��Gc6\�����We��>��i��es/���|QT�1��&C��~������������+b�
L�'��)<�i@�H������H������℆�����mM�IC��0Œ�3;s��ӒP)�Ha�.%a�6J�Ն0�c��޾�jQ�
E(�P�$����?;���^���{'T�7��.ñ/�X�18%�$��|:�|�V~`�-A(���y6_��� B
F��+�X,�I^��<��dS�!��F��+�?ܗ���O'�l�o.^x<��nU-
V�u���lSOpj�9��u����D+=3A�8�y�!J
�y�SB
�<GZ;O[������s�g��r+���7�	bG�xV*dUp��4�e�x)��\&9� *p

z�̪x�DZ�����9
�0+K�
��Z��d�*�l���{�%T���\ ����n���
+VMg��˫�bZm��S.��<���6�˅���6ԽK��,+Q4N��:f�$Jy�7�b��J�
���R��s4��h��9���
���ē#n5����*+�
�������ô��O�,@ cm� %yҀ��0�4I
8 �@	T��$h�y��0�%�����`�~��Am��<[���
#��ۮ�Ɛ�\
x|J���M�Li{�4lm�
+�*H��t�*,O
?

 h���u^��W��$<�+�(/&0��0(��Y`���<T�:Q�d��H�3f	?�
+�J���� �+�Ww��^���P��|��(zr �����V��
�F��9~���}��>Z��T�3`�f�1�� �F
輲�ۖ�x�a�%�~�)�s~�3g<
���e� �H�I֓��D'����b�S�i�jKN��,�� ��χ�1�
+��T��Qc"Aq�m�Q��x��IOl⠖�i���ݠ���A�e����!������ZQ�������
Mꙅ~�x�ޗ��Od�X3\U��j�MWe^���e-�Z�VN��rh�4<D�[L��C��E Wsd�U�f���/F��P
+`\1;,�um��>�i&��ݸ�fP M�}�6�d�@Ƃwj&��&�MG���K��k4
����jNl_�&��=�lsk[NQ7s	�ȍ��>O]��B�V�kɤ) �-��p*[Jms��~D�!���*�]�O�{R�j����n�Aa�JùA��䕟�
|�gU��.��M�/�fd	T
+�
p3�D�#���\̃q| aN.Ylߦ MA.��$����k��zr]������ݺ���=�m�80�
�|�h�����]xy���n���*篶t� ai�]帑�褩ǣ(������v}
�[
z�1&
��b�n��>Yvw���9|�Q��v[���kd�ΰ�a
+�z]g),�����" ���t��F�Bܡd��s�*�W�F� `}��y�����A
�R�YwA�dդ������0�Y
=vWd
���'D�nߗ.
��SB"q��
�W�* 
��\�ս��I\IN�0>
+,<�d.����;0߄fԠhS�2m�#��R�Q������ŝ����ׅ�v���pX�#��ST%�
�j́�D��cG���"�z��Ǿ��cپ9��sQ��l�A��Q3��Z�=�d��L�4
�<�����-�@4�ڷs;L'),�S,��g�Hh��&+���S�v/�S����%�,���w�Y�1��r�aS�n�ujp��O?��u��VFE�E�s��֘n|r�:��
�����=Ei�y�t��F7� S�uG�e�MG� �m�Ҧ-�T�/�Z���lĺ@+zp����hyͮ���b[s"")�v�p3nEl�� �@'�����R6��Շׯ�^]�
+HE֎�,�>� *�p
+M(�nNM�����
+*�}�a��CL
��m	.�����Ou��1��-�H������� ĸ>��0��z
��#���
;�L
�O�X��7;|��
߅��R
C��K�u���pOڌ�kz���	j�K=|��x
�
�#4{��C��k����?x�A�Jc~�Ǚ��Jɾ�8��K&	c�)[��p�?�ǰ爧l�B�3~x�`���7IQL�$F�)���#���p��x�T+Bm�c���H�
+ۘ;�BNP��H�ޡ�;B�α�
���̲���n'������|73�L~w�ι����Fo�w{A���

���"�
�5�\��
��H���2\�+�m�=z�3
U
������i1�~рX�[���W�O��õI-��P��m����{eMa�WQ�}?����̸6��JJ/������|܈��}c1ݵ�0���s��?����,���'���4
�9;���sEo�"+�Yo2�ל6�
��E�B>֭9\�ݳ�A ���Ձ�U��ўq�1���k�_����#�i�Ӱn��b�r
C���H���d�U��ۛ'��@�Y�B_�4z�c\�A�ƥ���O�Aa���#���W�t�g}�k7��=�-���QaC9���"C҅Q�H� ����@�暤�EV�G at P�\��o�A
�O\4� Ӽ���''�;B�끷��
+^�#�����y���t��=֚��h�[@��x�þ

5
u
䁮��,񧨦[�5����6$�ˍ��5�h����NĹ���?�?��:��*q��q��鶼˃v�o
��x�� <��rI$���"Hb�����퀅۾#B�6�Z)���joG�J�L⿸�
1�z� �����i�������W����G&ħ��2��P���2���i41���Ӌ4q�]�!VV���D
���>
��ix��ɆW�O�j
��*�l���!���b�WoA��Ӧ��g�!-����k�0�X`�zc�_^]��h��!T(�t	��UPZ
+.�!H��,����rWW=�m��nN�<ʮ=
+Q�{T�}��lp*��j�ᖸ�TV�u�����������E
+endstream
+endobj
+1847 0 obj <<
+/Type /Page
+/Contents 1848 0 R
+/Resources 1846 0 R
+/MediaBox [0 0 612 792]
+/Parent 1798 0 R
+/Annots [ 1845 0 R ]
+>> endobj
+1845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.85 89.66 160.321 100.785]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+1849 0 obj <<
+/D [1847 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1850 0 obj <<
+/D [1847 0 R /XYZ 86.4 453.231 null]
+>> endobj
+1851 0 obj <<
+/D [1847 0 R /XYZ 86.4 253.755 null]
+>> endobj
+282 0 obj <<
+/D [1847 0 R /XYZ 86.4 135.226 null]
+>> endobj
+1846 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1854 0 obj <<
+/Length 3138      
+/Filter /FlateDecode
+>>
+stream
+x��ZK������)�M��r� K�-��ծ\��}�Hp%�X��ͯO�� �Y,ׂ�J*�
�{��u��zFfߜ}uu���\�lbS���̨D�4���tv����r�`�X:S���7|���9g�g�
:��O�E�~�/������؝�v���˫�g��m���5[n���Ff+�nFn�쓛��	nW�����	L�.��
�W�&T+���ώ�S�M��ɵ
�'����c���&��}���Q�`���(H�S�'z����U���$T%I�}�/_�vD�|�u��f
��������xv�t��
���묪��:�7�2��]�68_.�e���T|�q�:ߦn�0�o�7W��0����-��u�T�-
��7�.(M�
{�����
�ˢĕ5��;���9�����}�*��s����
��7�n�U�*�^���$9_H��W7y��>�K5O7�0�S�����tS�$����;
vn0���}�{l€g�
؄g�%W�u [...]
��.��t�'W5�W�?3�+�$���׎p�)��z(s���OI��|���WN����燥�TP<�����w��y��kf�	��$��e�h��"�	�����=�����L��}���/��EܯM��}��A�mXL���ѭmps�"�벑;<�I+��+;�5���Aܫf<x#\�>1,���? Wt���
�
+�2m�Dn��+X�x3X$���'��Us����G���7
NE„�[I`�ugK��Z�e�)4���J����D�vn�:g`��AڰT6���v_;Cs�J(  �[��q!��2��p̹5�~X$�� �̘Z��[b�Ho�qL:��@/��B}�O"�cJ���r�
�c�_pȳ=m����!:8mZ"�\�6w���$
W
P��'l"k��;f�HGe�Ȇ(�f����:�R��VW�lOE�`��
p��x��wu��C�6^c�l���b�q��S���0Ǟ8����
�&�I�ecBڄ���- ��I&)��0�'��!�&�hX�8�h
盬Fό! 9��h�����
������#�*�T���>�wpTo�
+�k}p�IA�|�o��Ls�*=��<��2��1c��f�'��������sݗ#
Q$V[P�j/�jY�m�м;{
�(�$�lp�$�x"� +x'�tLd�`�uZ@*O�n(�>�A
>jC���QnYc��t]g�e��_.��Z�7�>D*��P@�!�b��<��>
4,):��'I��nm_�����6��p�aF-�*&'f�#��J\�0X
+x���10 at TJ�B@��H�'F���X at 2v���c�rدa�娇z��(����b��ע��e�1/���.�J
Ү�	�	�
n�� �1c�cqD� I��#�e%c�cE"B��<"]A at c�n������Ak=H6�.��Y�`n��:�+kp�Pj�{d��� �Z ~�(�t��K"��)�S�Q �HHm�,��	I4�%.Exp�_|t:٦[�й�H���B
�^Mt?ļ�̿*��qQ^j��i�}����6kzY�N#�o7
ed,s@�W'%	��ByX�܊��Q+�pf�
+��X51� !|�
+KQ"<��7ϟ���
��h3�
+ffp��}W �n�w5�y�b��ڨ8@@#�B��$8�?��1B�@�%t����}�?��ᇘ��A
�^���*6(U��L:�1��C�y@�ҔQ�Q����$ʅ�����������44��i^�y�b$g�
+衉q1����xG�|�+�
���x�k�l�~�B��4Φ0)�_�ĝ��i6�֥���
�ĕ)��~q�ly���E��G�Ӳ>�š��s���~̧;%�j�
=4 ����H�ASHN&�8��#˳ʫ��tz�����2�]�:�` P�MZ�tq}KQ#<���bo�V�l��nWl��+��?U:p�MLH��+�.&a���L��¡{�\ ׄ�@����*t�q�5vp��8>p@ی����^4R���
�U���O9(!V
@1)���
+H�H�R�-u�)Dv��^f7A����+�k���j�H: �4D�O7�G�1��	���r"�j7u�D���I(\+�_o�N]Jxۺ�6����plS���m��}��{��r�X�Ҡ;e��A��hAhQ�5uǘe.R���0�C�ҏ'>�=��{����c
f
+&�o�i��
u���,�ʹ��`��8�Ț����zJ��⡐�W
�uʌ
��5�������e@#$�K8����<��k���������?��Z�
��NJ���6�
�i�Q��U��1���z��~�+����R�������~� ��T7�6��m��!G�N�v��6��X�=����/������X�&�$"'��������5Xw+�-r��oC�4�;�e�cw��o}�����(��*��P�k>XX��M���6iClV�3���{!}�"ݮ���q/�(#�	�
�S-
�Mb��~J
�w�P	��
;mQ�Ouп멭�����

����V�]��%+z��W
 [...]
D�w�؈����6�>�Y��gt�
����ɦ
�W�)�
.��#�Q	`
�5�����v@@9{D?�Ҡt�cPJ�� {B�z
+����#zԽ
X��¢
s�'�
�"����cx�Y��N�Gf
�3�=����+5~%t�� _J�)lV���XO|��%ޥ�?�7"�VM�
�Nk�	
�	H��
��Or�N&�~�� ��@c�k�����qW���ce�'�1�$�:A��
:��~�
+�2��� )���Q@��: �m��f�/#j"�4��H����|���Sw�
�g੍x�\���õn� ~�<$~S8I�V��`
�
��%y�� pOY/���#�'&���O����f�śU��h#
��/�	�u
+endstream
+endobj
+1853 0 obj <<
+/Type /Page
+/Contents 1854 0 R
+/Resources 1852 0 R
+/MediaBox [0 0 612 792]
+/Parent 1798 0 R
+>> endobj
+1855 0 obj <<
+/D [1853 0 R /XYZ 86.4 726.045 null]
+>> endobj
+286 0 obj <<
+/D [1853 0 R /XYZ 86.4 624.714 null]
+>> endobj
+1856 0 obj <<
+/D [1853 0 R /XYZ 86.4 541.384 null]
+>> endobj
+1857 0 obj <<
+/D [1853 0 R /XYZ 86.4 302.655 null]
+>> endobj
+1852 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F38 785 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1860 0 obj <<
+/Length 2529      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s�H~���mE��_vk2������
��,!�Z$
�����=M7’�$S)?	�����
��� �9�����{&���2�\Z"
(j�d$���C��d�4
?�&��E|�GE2��0[�����m��]}�D�<�{�z-��"�V�ɔb�M���˟ON/O��`�"/��2�-O>���9<�9��
ܗ��gQ�J�����G� #�呆 �d-���"�tg9�R�P�0Y�m���^d��p�x1�MF*-�@���IS�8�
�:r�|Bi��F��GR\��r�]�M��&�X�X��ml/L��������>Yݸ�Yͻ�+yw���j�]
���0
�<Kݱ�-��I$�Y-���p�M�{kɩ�'�z�N�N��6�c[�A��
��`Ưl�z_�c"���	��!.�	�W��AJ+8I Ε��û7qq����[g�6��AHJr<]0������޺����ַQ���W�t$�1**�[�8��@����*�w,p2�vuAA�B�@R���!�t-ʮ-��H���x��1�9��9�A�Ց�yd� aM�@��@�gyrWEi�j��U������-����M��>'�D!"�^�A����%�c�m`3n���b;w�3���
+����je
x�u"D�It���%�?0�-e8.�1����\8�^T���:����fqYх�u߹�u�_k%���gv�6Z%�[�O�ۤ/!R��i���|@jR�C����
�=8�@�Wv��3����K�%7���'!��+�;��	�$p��4ĮݹB���٭�/.�,��h5����
Q\�>�{�	|]t���cKc�g)�Y���t�y��U�B�"$�@�xFMw��E�qcm����>��a5�ɥ�o��2vγn�?(C�&"9œ�
H0���C$ī��Q _�~r
d<�XŠ͐=�f��y��k._�����	Ӵq
q�v�#�
+se��=��
4e

{<Πjc\�q����{
]��[���P)�	=��.��
����8�2Ώ��u~����xW��xG\�^�H�����=8����폪g�j�n�e΄�=\S��53��^��(#C�.�.aS%G at WҊTW
�@�(�;����o>^�Q���
W++ at 3���.�N�M���� P*)�O#���W���n�nE��
��}ot��i��n�3�RsDySj\�D6O>@-����
+���#jU�$h� _�hu����T����$��UVy۶t��:��Ϟ�*�wq������P
��v��l[Db�v�d
W>���>|{�[ofP֋M��
������k��ygXO��S�(J3d�7�/����
�Q�B�/H���]}�8T�2��~y��Ր��2�5�B$�����9Ֆ��؝��:T�*`V=��_�ѐ�U�{���bJ�	.8JR�\�}�C�Q Ac���o�<�z�n�e�!�v��N˷3�Q룙m
ӵˡ�z+)�( 1�)��N�8ˊx�-
+L*
����<^D��x�W����u�уt��m����|S7W�@quTeE
�	�����hW�$M��2Y���<��- ko�?�b\�io ��a����C�Ha:��X��V�� U^.�F����4��_N��ˇ�o�X��
�?,i�.o?�M�Y��a;������

 S���`j���ٞm��Nh���k��-e�1�<��7
l.�J�l��378�잔�쌃)� lO�s
+�X9��n��>2 T�9l
��A��
���r��xk벇���w�d��	}V�F;{�Av�
�9�?
wG���� �#��?
(��d#
��
& �,n(�z<]=��\�c�0<!d
+j�
k@�
Y�2, �����)j
k(j�%�vF��)ps��뵽{|bH)d�'�
���
mGΎ�e��:��9 �
!�u�
�h�����"�rzE�[�)�>�[���q
�|�(]�=Ji�2�y����<���Y
��9���³uu�uu�'j�
�
r9#�-�Og�ۡ��ض=�v���
�e ��< $R���
#�٣��8t#0�v�O������	S�^�3���e� j{f �1hzDݢ���NV
����ZU��吰B��^s��.BB3��E���ӱ1���X��#ӱ�����1�B�!Ь�n
�
�Hw8��D{��?MH�J{c�x������(F���m��a#�<�E��W��اm����;�r����M���ζ��D=
:Sle�#@gJ��8���:�CW�f<�L���w���b
���;�gn
��
��EZ��n��;��~AS���#��բ�,ǵ��ş[(�_�Iw?������儱Q��=��|��/X�����H�ۉ�~�>�/��BLy�-�o.-
�;�n�xЄ��@x1�^���F�W���FA�����k��
��IL �G��}���E�����$L��#��I���Pa��?�����Q=�$�!�~�޷Z$�;� [...]
+endstream
+endobj
+1859 0 obj <<
+/Type /Page
+/Contents 1860 0 R
+/Resources 1858 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+>> endobj
+1861 0 obj <<
+/D [1859 0 R /XYZ 86.4 726.045 null]
+>> endobj
+290 0 obj <<
+/D [1859 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1862 0 obj <<
+/D [1859 0 R /XYZ 86.4 647.402 null]
+>> endobj
+1863 0 obj <<
+/D [1859 0 R /XYZ 86.4 397.054 null]
+>> endobj
+1864 0 obj <<
+/D [1859 0 R /XYZ 86.4 224.359 null]
+>> endobj
+1858 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F16 729 0 R /F8 741 0 R /F48 982 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1868 0 obj <<
+/Length 2332      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s��~ׯ�S
v���w�L\K�8�8�E�N
`1	 �I}�^  ��d\�H�8��~ 
�8������
"I*��m�%⁢���e�>�t2�G$�)���d�4
�\N
_N�$�vgn��_��_���l[��f���������
Jq at j%i.������8X•��X��G�n
p!
+����bv�[F�	A�eDQ�Y͑B�#T�?�3�
�R"̷���*݁�~|���"��E��̈́��J���Ë�d�S8�R�(�
+���0.�J���rĵ��v�}�O��e6pM�j���y�ً�Ư鄄���8wkƒҝ�Vq��Z��ドS�em�d�������S��̳�()�񽻵 w�����H7���?���d�<��S$Y\]�1��1�x���S�T4EG�B2�('CYA�D���%ADQ )��tH�f�
/�fߏ����
+$I8��N�\��.�f������Uy�g��6(�H�yg[����"v�'Z��U-	F�1��Wq�Y��{:�1�$�mC&
+������
�.�C�0"����]����GÈFZ��f���g�_6Ū�%��mg�����Q�AԔ(�!PV�eR.���[���{�zI¹)V&�sl7��
S���2�P�848|"}�f�2��*�I���S嶖�k��W}�.�n��[�S�x���swƋ�I-]m� ]۵�j�P�Ez��U<]ś���2]���Ů��M}*97���,��ĵ����I�؛eDr�9��V�3��H���V��vY6�N0
�b���zR�!�x��!��a��o�i�`���#�ɮS�u7-\\�e6���JaP�v�;:�¸Y�͋ߜ�0��ޅ��4�8�D�жe�QD��ve9�B��
�6k�|��R��7�	 �
'��Th����0��܄a��*��u��}53��*b�Ut�E)F�R����X
1
!��T�lgp�<L��l�t{��ط,S������4¶>v����&X��*�����
U�Q�
PMF��F ��إ> �&�����|`�f���x��
+�/Fi ��j�N�o^����
� .kF�|�_����s��;�@JH{��K�w�
�y�],����f�/�2��k
��j���x5,��3������Տ=J5�,LFQ
+I������?
u|��]����
�W��آ����g�
+ at 4J�w��V��"�IS�}C�V��8�
mn�=t0
+#ڔ�iH�:��SRL.��1F��(����
�J#��(:5�A
�u�n^^d� š
�u�X�Q��w�3.���nw�t�Vi���M��8 ׁ�
1��šv��q�$bX���WE1O��u���0�3���-�zPDD�9��a��	!��a��8�ŀ`K�+g�!]
"���>�%խ7�
�.�*�i�z9�"�{9X7}:
�qZy'
���~
,��5n���'Ea�8!���L=
� �RަaP񾨗���Ah��9XW��,)����ć+穝ڈ��D��O%b~�659��(�B�����0���\�
���d�W]ɀ������ch8���G*�@!��J�>�bPT
+�Q�X��,F���c�D����1�z��R�y	���	Vk_�b��8S$IIN�Tzz�R��WT	�j�ŎA
�8����p�զ/��WTJ�T��� ����w���Y����l#����%��
G
3+�P5=2�ڹb������k���b�
Yk/;R��
�-�)U��Oz���0�"���jgL�b <\��m"��+��� ��~��o����Ŷ�i4 ��/�]A{����?�Q
��F�AF�9��=���5�!���g��z������@\<�`���D�d�9YTP<O�V�97�87�Q{�ߊ�����{0f��t���0�ʴ�ϴ��
�+GyVn$qE���l��)>
+
6�WO Zc(�D�����vQ��.�4�E�vM�()�d� a�i���S���?�ڛ2T"�;S�m^%ew�0��?�O9��
��d�5�Y� ��Kw��ۯH{*� 
P�GC�G�X���M�$�� ����=Y/�'^�Y��2�ΚKS+j�'�GX� �BC����70
��{ �|�*��&�沍�9�6_�e�#���՝�
����#|sm��
(��]['
3|W�f&��Z�^1�Z��=��k
'
P�a8p�@e^7��U�tZ���jf�cZ���̐�M�`C��Y�H���\

+W
Q����|�_�j1z>׊��,]�ڐq�ı���L���

�#�&O�@���`�@P�˙ �� ��
+endstream
+endobj
+1867 0 obj <<
+/Type /Page
+/Contents 1868 0 R
+/Resources 1866 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+>> endobj
+1869 0 obj <<
+/D [1867 0 R /XYZ 86.4 726.045 null]
+>> endobj
+294 0 obj <<
+/D [1867 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1870 0 obj <<
+/D [1867 0 R /XYZ 86.4 637.958 null]
+>> endobj
+1871 0 obj <<
+/D [1867 0 R /XYZ 86.4 457.482 null]
+>> endobj
+1872 0 obj <<
+/D [1867 0 R /XYZ 86.4 277.005 null]
+>> endobj
+1866 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F16 729 0 R /F8 741 0 R /F48 982 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1878 0 obj <<
+/Length 3914      
+/Filter /FlateDecode
+>>
+stream
+x��]sܶ�ݿ�Z��c�`3}Pb;q�����%�t�#%q�;�I����. A
t�#M'/:v���^(Yݬ���Ͼ|�쯯D���<�����Jg�\)�Ǚ`�w���H��b-��.�GF��+��jh�}�+���x���?��˺�iwEc�wզݕ�P����U[�_
��b̈́�Y��ů�}��ݳ�l.Y1��4�2[m��~�5Y����U�\�>�yەy��Y�}v�,��-�$I,S~�Nc.F8��i��2�Չ8f
�b!�J�7��V�,g1S1���˯���P�o�b�O�����|�
��,�g@�K�^
+I��8�D�W f�nɂ�ł���̾n���u�������/I��eq��e,$7�5��Q"b���Ӄ�Z�0�����i?�u��U��h�q�����ͱ/����<aq�Wk��9��_T���������׌e,zw
z ��������1�I�'&�fqH,V bvzW
�n��Й��W��ũ�nA]^p
�\�I"�y�
����銡�~;���ހrGg�~�GF7]{�_�(��c͕��v��㲻9l+B��<Hނ��2'�X�8��cd�e�gn@�<
�錔�Yfj�!
+|��E��x
[8#�9=�j�c����xֺ3��C{N
�ٴ�����vG�k� � ���s�a�20ݠ����jˤ}g8�����

�4��z7��#�� �w*:��n��=P�"�Z����~7`�S��C_u�CJ-d
�8j)
ഌ��3g"��
+Hc�<�:v��<N��s�!lA������J��g�uΞ
U?�G�����-)���p} sv���qU4��"͢����M�/�
K�8���X�1�� ��4*�C�4�i�LV��k��i�81�d���6���Ȁ�:i��!
BA�&�
8 ����B�6
+�Y�Ma�Z�-5x��Mm���Oaj�������z�����i,FO8*ek��	S�lT�a|��c�\������a=::��
}��W����i�5�Ἢw4S3M=�F��2y6(n���_~��E�&�Ipb�)��~��s^$kr1����JR}��s��	�OA�9�S3"��_h6jq��;�G��d�z:�D9���`!�W��p�J!��O#^ 
+�(�g(��1W�IPjf��Gy���3�A�t]9�auۏk1 '+��];M@��<�h��VeL��f,�S�<�q�,f`�׀]f�K��l��`�D�Pa����� �*��z3^
>�;V�~/�v|"6	J��=�. 7��
+�
���0=bh��Pc8$�kU��:�zk<���0�G��
Z��(�ǣ&���Ue�K���Xa�i����onְ�-v%�j�3�&�z�2h|2�G=�B�L�iϳ�EV[?!9mW����)bݮ�!���<f7Xa��/E�~I`�\T1T%���b-e
+QI�/�IX��~l
`�'��h/E�ysۿ
+[�S�@ҝc�'�ε
�
+��O���(�H0K9?[��"�rg�Fo��OP��)O2
ӿ�m0U�߁|I?�Oί_��l#!D̙+K�S�O�g��ḯ��z���j�_|��H�`W
.�i�-��p�1�qH���%�ǹi�A� ����6�@�؏ǻ�!y�>�6����߹��s��XE�5�����['�>�f!����tB��
SQ�$��`�{�eҤQO�/�!�Ǔ��UCqo�M�$ְ��Z�㡳�W���,q֒k�YK|۴[�*��Xn|�]���:�+y%�#?d k񡠟��r	�x�8�m�C�2bup&"���l.O�T�,��^[�a
�r�'�$1y��w�֨�7�Ոť�W�L�(N�i&f�S&�@A -?*����r"����	�#ˉù�I
gLF�Y� �͡���
�~�-��J��jq�����<�v�g������q��[7�)X���
��T��A�կ�9o��
+�=��\�1g����ܲ�j
j���WY�ߩ�\�����^Ha�P�]�wq�=�"��d1@��r,�]�	�N.}���X���U��*0oޜ3|�L�`2,�E},?H=��B�	�RS��y�A`.��	G
��2 A���QY?�w���×1Z����C�����
Z�
.U�<	5
$��&P$��K���)�2
�S���ؤ����,?��T�h�\:Z!@�x�;+闡�	�u�&���E����%��v
�F	
����Z*�>��Yc\��.`�'��<+�C)
��Idɒvdr��1L����<���2c�qˌ��|�t[�.�-�n�>Բc�F�{H��k	�����Pm��`/��jaK�5�#S+2��gWݐ1�0
�BX|5,�_
�7U�2

gy6g�a�Q����(,����
S�2���dl{���|��L)v_�!͇�]
O�YY��U
��S.FP����՛o��J	�3{�`�20�3��._�7L͍&p���U�AC	�=�C�)�� �L��qM�bY8^sY�,*�@����:�_
�v
H�{te�]ٸZէz��w!�����Zb��y�
cF
g"���/��6$����l6%�^���.>W�{��&+ZP�7�S�/����ޣ��p�.��	 ���n����ꂚ�D2/��s7”�y�ބx@
��㌼Q��m1�t)�_&*/>�Agm:j&�HW�jm-]!���V�z����X�e*z
� 0���Tt�{{`�%B�l���릦��U-�ƹ- y�y7��y� �~��j,0����Pֻ�P�,��q��'$-:��X?B/��!5��������k��*��?U;��������
�.�Xe�8��}Sm}�ےyƸ�	�'��8�آ�P���ĪKl��,�džF���m�j�9^hiD�I�X<%]��
+P=�o���|sʟpQb
D����E£
+��J� o���ng:��
��46F�F��1
a�K䴧�%��cC|dr:0�[)vV��eݍ0�S����ۡy
� 7�`��s�Ɯ	��ϲ�W�X�=���)K�jpn@�<����X���/o��z�W.t�~�
�#����f$���T�9�N���j!t8q��U��ap�(l|�mJMїf�1ǻ��x2�����^q�X�
\��k�K�2�L����N�	��LƼl����PEK
��`����7�����&��Z�M�:���g��vk�E�1vE܍�
�9,-n�<
+�:�0L���`d�ucS&��
n��o
�
[O�6��NE�k�4+��/���t"����_0�B7�?�>$_޷
\�B�Vg3
�Br�%�s�o
���6�Ψ
��8���7o��jAt�$h��	���;��:�O�U2�?G��͛�܁�nk�
�nk`Ucwp��	=�C���qI/����7�?"�G��G�_�G�mi������
�b�.
]bp���=B�׮*zӈ��k�k������<v�_|{�Zy��^���Zj�.�6��P�!����{�
R���Mm�k�I�ͯ�R�&��o����Ȫ��5���}��
���Fo*��\4̼�
Rd����eoCA������|c����^��%&Ε����@A��莍]g�kH��
m�ᖌdI�!��G��>�����x$�p
"3��[�l�C*���U�M��޻�I�K50�swb$q
�G
�VZ��h�
+�4��*:��!�� 2����Tc�;���0B!��c�
+<ye�
+^�qɖ�i�=��/�z�1��Po+
+�1���
_i���M��+��tG2|2
���U�giԃ���Z�Iw� �K��ֆ��D
zb�]��4�>t��	�<�\lM�E"�����m����t-�S�"�66sPT�c���HO����d�LgG�
��k)*��F��Ӊ1�yUUޱ�P���� �\R�
+endstream
+endobj
+1877 0 obj <<
+/Type /Page
+/Contents 1878 0 R
+/Resources 1876 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+/Annots [ 1873 0 R 1874 0 R 1875 0 R ]
+>> endobj
+1873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [263.349 192.038 278.072 203.993]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+1874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [303.2 192.038 317.923 203.993]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+1875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.782 73.562 462.504 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.5) >>
+>> endobj
+1879 0 obj <<
+/D [1877 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1880 0 obj <<
+/D [1877 0 R /XYZ 86.4 701.138 null]
+>> endobj
+298 0 obj <<
+/D [1877 0 R /XYZ 86.4 536.836 null]
+>> endobj
+1881 0 obj <<
+/D [1877 0 R /XYZ 86.4 466.118 null]
+>> endobj
+302 0 obj <<
+/D [1877 0 R /XYZ 86.4 138.222 null]
+>> endobj
+1876 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F38 785 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1886 0 obj <<
+/Length 4429      
+/Filter /FlateDecode
+>>
+stream
+x��ْ��}�B���E'I�\���
;�x�y��R
�3b�"e����ק
�tlv
�/	4�F�o4���"Z��zrs��s�i�j�7w�D�r�4Ԃ-n֋��D^/y�,��-���HD���k�����,xE-wuc���d�.�]QWׯo��zvs���E�s��0�z��^��:Z����E�4Y<��B�4��T.^]��*#��q�)
Y�	�}����"�����C��V�
+����A�u�)	�;jY�<	��O����ʂ@2��[�X�kދ.��
+I��
��m�YP#��m��|��}��V���n�%	Z��!D�����������jw0��
H�{2�*�A�K�D���]���
I�`�W��>�v
��Ø��̷�vg���
+�Y�)&�TJ���Qf%�Ͳ�8L� nZaM��`�
t��(X��V�v�5A������]�
��S����!�&��S�g]K#2j���8�ۦ��Z�2k���/�>[��.���1(��m�"����j��t��o:j�d-=�Ү�^�=
w���
H&
�R�$di�d%5�Nʢ�է��2(3`�e���|�M��<���ފޏ/� s�lI�����bl:f<��Z���9
��
��!+���]ן~��Ժ�ܿ/s�Pt7
+���9� �ȐsT����� k	r,�\�<�n��p�7�J�}G�@G�l�v�	H�EF�u�Ƃ nf�]�/��DV
��a

šbj*��-�N�P%�檷�lS
ɴO��C��SjR�"���4�qJO��DH3WVRw�:��(+u��!i���q :]�:,�x��:@l#D ���ߖ��
+�����
+9
a�Y����[�&���Xi�q�#>ǒ�n� ��;�[����hE�(^�m�d��@����
�����"Sּ�C�m�dƨ췸_�\!-���*�fi��֮綧�W 	R�uۜ
+\	�K����z��Gzyk䤱owM���2�쵯-���<
�sFЄ� V�'�����q���Hͥ�@�X;�B�]��*	�T3�q{��<�o�`"
0ٳe
�ĜAK��c�Rk�z���&)p'9
E���س�Ωh��o��4��j2,�:6��u
��-���F�߲��
�0�>0\��5Hn�z��cM#)��gZ����h|l,�^o"?+	�\�:�~Hs
+M�ں��e=r��l�/�ĝ�z,hq��k��3�
��/K�#�tdK}E��T�$*
�3�	R���٧$g�KN�6���a0X㽧�:�u6�S�?�� 52�xI+��H^�Y����.{/SZ3��O�=�zF/�c��ې,���‚�R��N4#�b�<����J���"1g���I��
+m������7�
�����a�(!)���?Z|��}H�hH�A/h�z:zo$����HE�Uk8Y�Vc/-�gN���~�$�
��֘�Ϋ���-�{rʒ�n_������u7����Mn�L ����sY�Q
��g�W���=<��(Lc�x��!�����~��g`ܸ�龀]�W����
6�I���g�%
�wn
=��4!�h����
F��%w�hh�Q@�Y<��N�J�����R���&����-aQ#��0c&A�{z��HI�
�k��S�
�lv�>/�l
0 J��18��/��O:/Qػ���z�+��m��H΁�R��p0Ԃ�d��g�x���� �
ڇ��d�jPzF߱���c
�l�s��٘Ѻ5'd�1ݍ�7j�Ql:
��!�n��x��eW����^��
%�	nKB!&޾L#/�g3qj&L� ْy�x�q��3~C�s��h�]��h�s_�p
�4l��̢�*C�0I�I
+%���y�B
�ft�R���
��� 2�#�!�‚9�����0�4�:%``cF��;�
�.��������M���ƍ�iH�AD�Pr���
2�:����HyD��i:�~�QB�\��DR�8R��t12��^��Q�"~![�
�D�l)c˖R��C�'c���R�?-sV6af� y�S�P
(�ːe
��b<�m�i*&�mHc��D�G#��3��?jmke� ��R��%H�*/�7C��n��B�qtD�+��)�
���F�O����n��*/Kz_g]f= � �w��F��`8�^~��X�f=�Tq1gx�


+|-�F �v;t]�}
�yUw���	c�?\��@�8>ƼQ�V���������цY�8��~kE��M���֭u�y������c���F��,j{2D>�P���3A�2I�NOz0h����+B��C��3<�&+�Ȳ��F�d�'��
������G|@�g����̓��N���B�x��
�{��c�̕Y|һc>)���/|�d0�#k��/��G[v���Giy�s��i6Y�����i���
�4����
j�)S�1U5��{�!%R���}&:��3�,���>f�ߏ��g6
�&���Y�s�Ky�*�GP���Q(���x�g
��1��#go��c���7e
+k@χ�,'��~ _F�%����*&�
 }�1�q�Tg��g8��(�����Z��
#���*{n���H3\�0�.6�S�qltX#]x��q��K5���Ho�`����3�]����UdʧB���k*��u"��!Q��{fIL�ia|�_��<4.:��į�Zk9<��/2��O٢�>[��J��V��aF�Xd����Ĺ��L��w�<dZf��gJ���r9=r!�Tx;����o��u�/�.7�K�ҧ�2j�H�8a�?��T��
& �2�Q~�$+��*a3�4�
ҹ��6dX�����Px�&�
�:�f��L�"!��ۺ�	>+�ZS�P�/`z�5�w�`�;wYJ�d��
]���5͛��[�\ź�X�,�I�H>��������.������l"���籷e��Bf�`"UV	�.��*C�PPC
�
�j�[�7��6�׌���J!�nR��`�t�4m��t�4�3�<
+C��VDR�%l=(�唽����"�1%��+�_�uW��������e��_ƶ�đqo
+�=�$�
���=$
>�M�B>�qǏy4
'��נ��ro�`e��k��*�w��8��vo�ZW�A�z���:̀
�ռ��
+��>2
6��<�
�&$�aq��Q<���if�Z�w��X|M�(!մ���ya�x`NwYьn8��#k�m�Q��۲;��q�1�E(V�4{�4�<�i���o�U}[dU{�b�]&����{��i�Z�s9�O�Я�#
�n1�n�#[�W�g��L,�"����ucP���H��m����󀿋�z��b�2���}_}�3V���Ga)֊�L�=]s��}Y
�Xb����@w��o89�x��Bp�\S]1�5`,�l��&��]Kd��Vy�en�Al
<U%#h�P�=��
C3i
4
Y�J�ڡ�~٣E	�82�bI)
��z��kǔ�K��[F�5�Q;��G%g�U�æ(-���;?�"���z��9��>����t���(	|$a�i/
y�"�X��w+��N��'i*���� ZF�x_���U�4�`
b��F�3�:�����.�
��+*8��� ,"<�P)��r8f��07�������vׯ��iƂ�Ҭ��s�Ϸ���6?v�O�-;��a$���}	?sB
+3��jf�\}�
��!��Q�N֗���o��K�ι��C>�Z�cߟ�q��<�����;�= ݓg�bɪO����Y���=x���u�%�<\����*6M��y���g���Ͼ���Q�
�W#M�

�u�|�4XH!m��OG��{��N��L�B��
.�\
�ޓ�����b	�sp�)C�9
��,��H�/j_�wN���+�
Ȩ���l)�"��l�ܾ;^��R�DαÙ+��!���8�[���
��=�E߹.v�����9t�р
k8f�'�*�Ei�Rο<}6"���
F�SQ��p
M;���v�HW��$��
5��Ƕ�&#3ҩ���K}�3��Q\ϯJ�8
�g�:�S�L�[���^�'���6�	2�>����?�
_5B�%6>�9|��8Kz5�/��
a��)V����\���ɠ�?
��g���C丰g��~�51�+�v!����>�k��E�o��6‹��4ٍ����Y��_���)�'bg��C��s�cS��
X���e����
�T���Y�@s���Fw��(�����T��=��x�����WO�<��R>���q��jV�
��+��s:���K��q�>��(
g)��Z�)����B��%���ؤT��ya�
�J㽛W���xd	�D���x��#�	}���#wކoS��S�U,�o��]�'��\l|Dθ�a:����U=j
��Ձ��
+g%,��IN%�kX�+`|\�g/�>'���ڪ����g7W��Ѯ
+endstream
+endobj
+1885 0 obj <<
+/Type /Page
+/Contents 1886 0 R
+/Resources 1884 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+/Annots [ 1882 0 R 1883 0 R ]
+>> endobj
+1882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [480.882 654.171 492.837 662.584]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HiTa:98) >>
+>> endobj
+1883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.872 520.032 353.595 531.987]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+1887 0 obj <<
+/D [1885 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1888 0 obj <<
+/D [1885 0 R /XYZ 174.487 453.495 null]
+>> endobj
+1889 0 obj <<
+/D [1885 0 R /XYZ 251.436 396.993 null]
+>> endobj
+1890 0 obj <<
+/D [1885 0 R /XYZ 238.563 362.408 null]
+>> endobj
+1891 0 obj <<
+/D [1885 0 R /XYZ 290.484 190.054 null]
+>> endobj
+1892 0 obj <<
+/D [1885 0 R /XYZ 279.824 155.469 null]
+>> endobj
+1884 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R /F12 1132 0 R /F7 1094 0 R /F14 1050 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1898 0 obj <<
+/Length 3203      
+/Filter /FlateDecode
+>>
+stream
+x��[K��6����m�����=��d�	�l��K,Ԗ�-Ķ
Y����[ŢdI����\��G�X�����ng|��ś����);�Xf��]��R���ɌY%fW��D��r�R����l�&_��U^�b~���I&�K�������z��B��\ԛ�j�zS6�kM�����
�f"I��oW�_|{u�Dž ��Lt��j;[�/~���
+x���3���Ͼ�z�U�$�V��.�y���K�k��`�YZ,�r��4�6�2Mڲ�o�
ʋr��w�z�Ʒ�M��qT�)�I���c[�o���x��ex�
�|���H_�u��)wU�e��~'�@^e%��LN�~GM�+r,U�{�.�O��e��&l�~y�w6W�3;�e�SBA�[���i�+�;��n�ݮ����^f��f�Y��^<=�O��ѝ���x
��"�`Vfɛ�]�G����Q�A�<�V��H�mhӉ��ס��=uI���p�#�Υ��j�cH
\��a
+�X�����ik�٦b`߽mz�
M+`6�:?��a�"o�cM�|�d����,-����@�usGe҂�

Uudݸ�z+{���Oe�3�y�Yv�
�)���&4��oA�3�"�e<�
g-Zy�,�,=S,�c>��
+e�G��CfU]��ڛ��B8������R�n�/B�_����v�u~�����U���@����[�҆9'g�fx�
kR��#u���-q��^��&1Qx�NG%9Ǡ��&��4cN�˼��l
��M�  ������Q�e��vk\���]�����j�a9#�퐽����>V`a��䦩�4*=W	x0�N�1�nv��6
g�w�[*�������^y��G�x�Q����j��.i�ݲރ]]��,5�3��QV��O��7�ӁʣX�NDu
;����غ�6�}4�7a�dکsC at kɸ�'�
�-:_n�����y��C��W�6�oA��	�O5 H�������ZRP�_���W.��<m�w�~+���?Ow۲(o.�FbLm��𣏕R�]`�F�8j�q�M^�CS�+
������+a��ت>F�"쉴jf\ʄV�� C4�0�mMS��\���P��� qL'��^F��
��i9���@{�"rh-����q�	��;���{' 㧺*��W'B��LAba [...]
;<("�;?s�
$�=b��Z���`
�
@��7ܧ��2؀�5��*7�풝�Rs�e.�aa�oO�
+2t�zI�`$�:�W̊�|D	%�]';��Mȿ|��#�x��$�ôW$�h^,7�>^,;4�'��T4w[}��r�'���F������O�޷�};��G��	z B;
QP?/T
C凒]��R�+?�
B�_:�A��
3!��O��7p�� o�)(
�>�Q+|��Ҕ�Cp�+I{Pf_BI���&�����z�@*s]�J�9
\X
�� ��fGN�^�D1yp�GN;�8��>�Dz�7���A_5�*���u�r��-�Ԁ�'3�8��x{�Ңs��.
\���C_n��X�GM��@}�
:����x"���
XȻ�|� �ş��aP�o����l��	�B�N悞o�ؒS���̑����������h[>��
�AY�d�k1�B��»�����x~�L)���4�4��Rb���<� g����}iSBW���
���
@<��b��m:6"H����a�̃��W��w��k
+[����Qo�
+.��s�������Z����7��y��ȯٙB�m�<x8
����>�ic�Z�
I'������|׭wY6e�ñ z&c�}�sݩs����?`?x�V�������\-:�ֹ���BI�
�w񩅘N
f^��~�ǯ8E
!)�8�5[�:C
)e<����w�Y3���se� Ku�)�O5��
v���yZHIHw����B��g�B�5`�8�
+hg�}
+- �ġ���d�,X�}9`?
?'G�
+�K��3��R�T1��X��.�x�$�f�|6�"���xs u@�$�� �zGU>�b�t�ŷGTv�>�7]{B�P(����#�Uz[� �$�<^��
p�^�i�KG�{M
+?��W4�~Gߵ�Z�	�
�C�
�g�1g?�(���O=�@�=����'�_\�_\ǟ��x� �/A3�HR�?!��|
u,CTG�w,��DZ�X6k��/A��S��:��
ɀe
z��{ |��dPB!ɀ��9�mᓐc�4ͳqz��E0���>��9��d�Ft/

Y�-���h����xt�g��ey��5��P�w�2�g�5�/)��چD��&D�8 ǥjl����/��$�dNf�?
V����g��R�!~(
Cݗ��I��
+�����/�@F�CSN�����g=�`gP�61T�i��w3�+��k��;*��$��K�P}��r젌������h
�&1����$H'�8��7ѱ�X�lzs� ��Ի�|+�!�Ñn���ʇx�A�gx�c� Vk��Vq���74S���0g�ǩx
+��ƣ��;Is�W$���Щ�ׇ�K�)�,AGQ���
O9K�[�PQvX7��X� ,�R^���R�<�=L��Шt(`n�=����3������^
��C�?�D�̹p)��A�]�|�C��9L�i�i��[M���c���_�?����}Y)Y�u�Gyx�0��6>����z�>qmUJ��{�@~ �~S��k�o��bW�#�V>z��
��h�f�c���ߠ�+��6��&Y�y��+1έ�Z����d<���CG�S�M��KK����[l��[��65@�u7-��Z=�6���䗀+0&6�!8�8���d04S0�}�u��}w��
�Ab��E	�d6��P�|��u��"�(]t^7��,�sː��O�9�
�@+�C�
+w��.
u�X���o���g�L���*�]$� ���� ����1-�A��x
�tĖ�Z� ��^K������\���2�
+�H
��}/³6��@�m=��;%V@!�7m;
+endstream
+endobj
+1897 0 obj <<
+/Type /Page
+/Contents 1898 0 R
+/Resources 1896 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+/Annots [ 1894 0 R ]
+>> endobj
+1894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.698 73.562 470.421 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+1899 0 obj <<
+/D [1897 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1900 0 obj <<
+/D [1897 0 R /XYZ 86.4 615.488 null]
+>> endobj
+1901 0 obj <<
+/D [1897 0 R /XYZ 86.4 348.991 null]
+>> endobj
+1896 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F11 787 0 R /F48 982 0 R /F14 1050 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1905 0 obj <<
+/Length 2102      
+/Filter /FlateDecode
+>>
+stream
+xڭYKs���W�HU��ă �T��q�V��$v��d�I��!){�_�n �H�֌l
l� ��n��kF�&��ۛw�7�|�2HH"�
�ׁ�D�%Drܯ�����9�QB�6Y��͹��3�·�9
��̺��ҿ��@�wU�o����q��ͯ�7�n(
�;$&Z�`Y�|�#
+V��[�����+��`�w7���L�
�4��
Ȅ��c�~kfs��p=�a��Ռ���
+ ��ƭ���EZ?��j�&ێľI7�͹��

�'\�s�;-�ĕ�L�����a���|ۛr9��L��3�!��`NI@�9�$�����gj7*Ҭt�]]m� @I�]�f׸�v��0��hݽ_.Q;[8.-7f�f�uUt������4����
��J��G*zW&��,����|�6⌣�x+����=u����YE�՞�2Y��(!Jq��ؽ�"oO�Ϭ�վ%C"�eM�9;����pKD�k����
-�o�

Ru,*�6K���9���/�����P�3g�0�o�]��;�:ׅ�\�pܭ�”
�o�R��9|��c��
6�:
�gN�n�a��{s9�qg\���}m��x�o㊀v۲Ռ�0m��=���O*�$ �A?#��$�C�_M��T�pK��_�O�i��q�8�h�� w{
+STi_hS��6U�0KuƓ��}�b�QC�����M�������N�̙�c/�J����T9j�-�o<���Y��2:��/d[��r•m���(�t�dWI`G��:O!��,��~>}x{��5��V�i�� (Ix��K��P��ަ�'�i"�#E��e���H��(�_�(��z �$ԃ
?���zX,7?ԃ��\x
=(���
� 4ĩ�?TH���jh������	��D�W���HiKIv6}�
�"2������I
k��h/��E��b���DȏA3��r�gY��
���p�����Qd‚X��M���w;W�.���ܗu0���Z��k7.B��u�8�-`�1[�[����)��F+��o��Aq�0��y3A"�>�'���dx����
��Ә�)%�җ��
AT��
Yua5?A.�pE�yoz���0 4�3
�Ё� F�W��i�%%�����:���9
R�հ�v�?��=��
��)�b�<֯_!�Ơ^$%�,7��'�h at V�8
D���OO^�[�H�pY�!D���C�-Dh�!_������NW{�Ta�.[[�-��
�^��g�?c��,P�m�K�P��VX��) IEu�!4�M�6���1Wo��q�
иi��O
!���O���:����c$C^pb�7V3���8uhf|x[�m-±T`��o�
m
|�qp��Z�lP&ׯR�e��2З�?Y��
���
+M�q�[nd��G�8�l�}�r���zzA%נ��:k�˞�:�+Kϴ��v��ivPJ�B3�����~��!gdC��b�B^�f���eysjo.�ho==s���CGˆRbah��PP�
�����
�;���jlb�aq�+=����/�4*�0\_Q
:��ܩ�]��+�B۟�a/���Ю�m�¼�c~��
�t;
Y�}�y����N$�6ګ�G�>y*�!�1��
��e��n�P2|���O���H�3� �
+���Q�
���0�e�fy����µ���8N����0	���Bf�K���~��
+���׽SŠ�s
�6�|w����n�.'$F��urI�: �y_ܮ�_ҩ EY����8��Gm *��)Lz�	�]
k��OM�E���C/��_M���DBah��,���X��c5+x����:�����h�������.���T�$�G_
��=��4�CB���ݥ�=z�ٸ��
o����1Ą+)�p0�gOcl^�$�gc;��m��
+;>l�d�_{l��ՠNl
�����K��h8�
��un`�'Ixc�~

���gA_�Ee$峈E'Di�'�{�2O�$�����H��G at KA�o
�����F����s�������
O։~�֌ ?}^���pw�H,U�_��eDT#%%�9ԭ���Ƒ�W�lp�1�I(��(Gj
+endstream
+endobj
+1904 0 obj <<
+/Type /Page
+/Contents 1905 0 R
+/Resources 1903 0 R
+/MediaBox [0 0 612 792]
+/Parent 1865 0 R
+/Annots [ 1895 0 R 1902 0 R ]
+>> endobj
+1895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [495.176 676.287 509.899 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [289.863 114.577 296.837 126.532]
+/Subtype /Link
+/A << /S /GoTo /D (Item.45) >>
+>> endobj
+1906 0 obj <<
+/D [1904 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1907 0 obj <<
+/D [1904 0 R /XYZ 86.4 661.883 null]
+>> endobj
+1908 0 obj <<
+/D [1904 0 R /XYZ 86.4 642.595 null]
+>> endobj
+1909 0 obj <<
+/D [1904 0 R /XYZ 86.4 619.432 null]
+>> endobj
+1910 0 obj <<
+/D [1904 0 R /XYZ 86.4 600.143 null]
+>> endobj
+1911 0 obj <<
+/D [1904 0 R /XYZ 86.4 576.98 null]
+>> endobj
+1912 0 obj <<
+/D [1904 0 R /XYZ 86.4 555.755 null]
+>> endobj
+1913 0 obj <<
+/D [1904 0 R /XYZ 86.4 534.529 null]
+>> endobj
+1914 0 obj <<
+/D [1904 0 R /XYZ 86.4 454.746 null]
+>> endobj
+1915 0 obj <<
+/D [1904 0 R /XYZ 86.4 359.808 null]
+>> endobj
+1916 0 obj <<
+/D [1904 0 R /XYZ 86.4 309.691 null]
+>> endobj
+1917 0 obj <<
+/D [1904 0 R /XYZ 86.4 290.402 null]
+>> endobj
+1918 0 obj <<
+/D [1904 0 R /XYZ 86.4 267.239 null]
+>> endobj
+1919 0 obj <<
+/D [1904 0 R /XYZ 86.4 247.951 null]
+>> endobj
+1920 0 obj <<
+/D [1904 0 R /XYZ 86.4 195.619 null]
+>> endobj
+1921 0 obj <<
+/D [1904 0 R /XYZ 86.4 174.671 null]
+>> endobj
+1922 0 obj <<
+/D [1904 0 R /XYZ 86.4 153.445 null]
+>> endobj
+1923 0 obj <<
+/D [1904 0 R /XYZ 86.4 91.513 null]
+>> endobj
+1903 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F14 1050 0 R /F16 729 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1926 0 obj <<
+/Length 3619      
+/Filter /FlateDecode
+>>
+stream
+x��[I��6����Q=e!�A$����.�
W&�[bw�B�2%����y P��2����� ��>��tr?��WW��\}�R�%Vs=���d�ȉ�h�&7���SI�����9���:o�**�6_-f�U
W|:����f�2��Wy�7ż^-�mY��ƿ�������1�Y6����7o�����p�`qt���(�I=�/�~��N��̈́a��'�o9���j���W4l�7����-#�h��o�ͼ)׸D������3�4��<�:%ӻ�j����
��8'�jx�
�����|����׫r���C�0m���yU�Ql�D at Vl�)��ų�<߶����k��- 4\3�dY,��1��n�[X���
9͹&L�n�v�̄�g�8�*�'��] �w!%\�cĬ&1)g�*�%��	g]ϛ�ݲ�{�D/��#2k3�~��>l�J`����r�u�qH���
awCQj��@�h�1I��h�.Y� � ��m��u	�V\M��Oa���`8�b�v��;�]9���i��´���5�k�?'��v�ZLḷ-q��Ȉ
�g�d�+�7�#~�wU=�p�|���琯�W��|�*q�$�!�	�
��_��fZ̷u�%�rH>�K+���&��Ň�}��Nwk��m�yu7C���\l|����=}����t� c�+JAl,�_(ES����îޖ���o� J�"�� J�_ݼ�-�'q�^75��{�̷'I
��I-������:4�>>]j�1�������6�쩍WHm�⨍��5�:�c�$��7�
��GH�w��(�;ʑ|C���
��^}��=���ۼ\
���vL���lH��L���� +UѦG4�ڣ,�s��OY�����
e��OY��=���AR9[
+*#�%@3f�i�����t,�����^4�"�f�H0K�I���)"%�
�4E^m�ř�aAr	&q� ]>^�w�ռ)�����N���y�
6ͪ�]@X���8�k'�_]F��6"vO)"e�qȅ&
+Xq���h�	�
{[r�-`�Eq��нܤ�n W

S�"��XF��O��Ȁ(���PF�#�T��n/1�����ē>&�(������~�qmF�
��:�ta�z�8xX��ҕ!��x���ۡ�Kߡ;�$RS�V���
Y
������|8�

5R�<�
.��6G0J�U��o]��^�M	�<�x�
�]�$�8l@����X�$��C,�n(c��9!A�qv�IxA�Ɠ���7�4�8p9c9h;��˄�����1R䯚bsQ5�
+o�}z��_/8�֪�0և�X)�z�Hy:ta7��y6}�(�w.6���N]��_1�
6�b�^��3(���B7��PDwb�U"�B2!���1$��+0��q�MO�JP��8���x3F�=����e'
h8�#��{���
�Dwr#B�T��26j4cS�ԏ`����
�
��d=�p���r��T4wu���[yU�F�!���Xl6X�����##ta>��,v%l�i%�]
𰆆G���<���Q�����NfB)�(�cx?�]�j�(
+
�jW�㨊�`��<��X���Pы�*�OHj9Z5u>	2
��c N� ��1؄wzB�$�G�&p��ap�,+Xe�c���{����>��`���`暧�V��'�P<����ŋ�޿?"H�Z]���ܝ�hܧ'�d��p�ಃ��3�@��n���nW�л\�U,"� *3���b`G�������I9�D�����
�%��h�w?�}{��`��^��<����ر�:�(1�]d�5
o"D���e��KŻ��t!��
�Nx�TI�k�SX�Di��XV:�Xá�g`���X�&}����X{�9�gd���C��N���V=�b�͊�*'"�(m�`��D���F�o�|a�R���'J9��<!����*a��Nq�Z��&���
�rU��,n�
��5澈E���η�ܛy����H��'�P&/"�Z� �^��O��'�N`4�~��,q?S܂B]���X�+�%����r�
[�i�
+�
a�p@�K�;�p������
+�|*�>�AGA�(t�.ÍPX;��g/Г8�?V�(.c�]�
��`k
+
^�k0A�x
�5�
�@#g'�sV��i�z{���n�i*B
�l��:6
�p�]�/|[�r$#���nk�l��F�QLjW���0���}
}ud��t�{���2��Y�pwU������~·�
���XlF�������(�Gy���(08N�S�r�L����Nː�,��(�����bS��|�]B��q��h��SL7bXp���9��͢\�W�י��
.��Q�E�F�3�n�%�;�
G���
��$�Yﴭ
+G]X��
|
����f�Z��P9C�q��B�/�؁x�� τ����D��
e��+R�,`0AF�Q�gAO>!��Yb�U�����
�̇�a:?b�bQk�?�o���)@L�9�9�F�����+s�M
+R2�Ui�9�3���8K<�S`q�(��(�Qt�@N��:��d$�ͰK�u9I�0�I��=�k:�2�vI
�8��
/û���ݾdcO�ݼM�n���E�(G�'�Em\�L`aZ��:ө_�$f;
+�6�<x,�P<��ݐ��F'`��p^���h��E at p�l�#Ӆ�>�p�x]
�?���
�L|y���
+�5ld�
�US
̇�r]�y}	"WXh��}+ �c���r%�(ღ����n�īm��&�}'�����6��`�э��
3�1�
�(3p�bU� �g��	�Z��՚a#bYp`�ܳ��M��W��q�/���r6��Ya1��L�꽥���>)��Z�LJ���8e�;�{k��a�C��J����J�笔GD���O
+K�~���;;�)|�4�\����^��}��m͈2��(ik�b�|C�8P
+'�)Ώ	l�H��m�Kƫǰ��@�$���(�� \�v<�%kO��h<�	�v����`�0�ɘ�u�;A~���w2���{|Mg�������X�C� %���� �۬/CN%s0��Ϊ

D|����fw�e_[I���
#ێ!�
�d��A�6�3S,}��,<�=({Ԡ���p1ш��)�2w���#���*�}IE�2y뚡��Bq 0�K0�2�>�gT\�
��iT���}��i�M
������0����N�
+����p�:dJq-u4�|��W@�A
�s)�N\G��
A��dM�z3
bZ=)łn�uɴ��������E��H΢9OWD�:cD��k��UOr`~3��Fx��s�f����m�C���dX�6:U]H�+�.�=«&�7�ɁH�
+裱8�D�
��@�38��c#P
�`��!~e�UA1D�=,�ƥ�<r�'0����M�M��Ϡc���i}�G��.��Q��c*��[�9(����'�q�A��X:�+B�6����!n
u�%	
�X�xM��<`4
��<,1���#f��:d�Z7bGE g}B�=�#�PE�lg)u�+��{Vl�}�-Ls�ݍ��3?qB��Q���'NŤ��N03��8���������?�?���ܴ"l
+endstream
+endobj
+1925 0 obj <<
+/Type /Page
+/Contents 1926 0 R
+/Resources 1924 0 R
+/MediaBox [0 0 612 792]
+/Parent 1929 0 R
+>> endobj
+1927 0 obj <<
+/D [1925 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1928 0 obj <<
+/D [1925 0 R /XYZ 86.4 139.381 null]
+>> endobj
+1924 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F14 1050 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1934 0 obj <<
+/Length 3459      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks7��W�Km"d�����
�]��ٻ�$�9��<�03���o7�y�H�q%�\lq����C���dr3I&�Ͼy{��w\M,������QDL4�Dq:y;��85�������:_ޜ_pç/��s6}r~A����uY������˲ج�ry��ۗg�ޞ�rFa�dB�A$1BMf��N&s���$!ܚɝk��n	�����ٿϒ0�?yaz��B�v�,%T+?�E1��M�y����K(����?%2�ƣ�91Z4m�� ���˵o<�²x�C
+��
^;gfz��d�t��W�r~��׷��Mץ��
+�>���M�����S��Mַ��c~N��O	��(���,��eS��l�í�k/�~_^�'BM��Rbe��U�Bߜ�i�ZUn¿��HF6
��"X�rb����<O�!���R���9��M����N�����~�*+"�j-�I5�����߃/
+c
+v
��,-����0hq����僳>�{��|9��E�l����f�b�@V.���oP^G�H
#��f�����e�@�|8\�$��A���C�qE$��cQ�
F �b�59�LLߺ� -��u�)B�-C
��d7F9��X���D�y\8D��Y��fFE��wO0�H rF
��8
6+5�1�׾l�^�&�����F��̹��qw1�${g.5L��>�y�U�e��1�*7�y���
q��w��
�p`$��0�͚���S�P{�g3��pH����{�b��.�E�b ��C3D�LlX�
p8��$�uš�����I�0���Aw H�!���� G�(
+�j_n���`���0ـg�lIp�������7Up�s)�i�Ɇ��x!��G��]o�=�
I���@�Ez�� l�!l����L��4�,�5�v�Q+3���{^{�B��|�ޙ����>0݋�O.߼xuI�6!�B�H�B�L�����p]	@t���o�]^�ɗB�m�ݺn��_7�m{�K����o������


ۙ
+��r>G��`�z3�eu}�)�
�0
�9Ԯ����vŮ$
����ۃ2t���Qؠ ����߽z�Ǔ�(�}Wn;b�Э��yY�I��ӓ�� �R�E,�Ed�Y��v���{.��
!y��<�q
�^¶L���(| b[�>�5(�0���X���:	֠+i�ȯ�`���3'�Q�������
�I��`{�
9H
+����9c�U^�Q��D��|����uY4��N�3�PYݷ��ɲ
�%]�SOU�9y ^CN�����41`�S8[av
+���~g?~����Q�rv�$�7�Y#8��$� k�3D<?h(GD<?�
]Uه����}��ƾE�t^�A�}]��zLT���"0���Ŵ����-Њ�h�q,�])��x��/�
�*�t	K�M��(�nڡ<9��ev��P�0�2l�m~�eټ
-
���Ȁ�S�N�uQ��#�
+�
nz�,I"�%Z�Q�~�K�� `�j���h(W���t�ޫP�f��s(aO6uۛ�-�YY͡V$�S	��?	�Y6%u�Sʢ���
9��	{H�Z��
\�-��
6��f=�q��i|�bޡy�^��5t� ���f��W���a�+�Gq��j;p�DX9v�cQ��=�ٗ;dH�h�C��0�Pw��AŠ 'fo�y��0h,dM
=Ag�8L=���-�����K&c�!�����BX>���@�5cY��
�-2�=�O�����\Nc�����]Q�ȑ_I?��1�0�����j ��'��"[Vw8�ރ�=���=i
��yvX�=��Y��Z἗#(U4�a-�e;t��z;ݍq4b���M��!�\��h�f��o��
���B��B��b�؎T?���x��h�� m�P)�\u`��nz<
�Y���E��
`�=N<�T7�E+�����( �A�D�
p�(�[
+�{1�
+1Q�
#A(�=���v�8S5�D�Lr����i��ql��q��c|}�}� G}� ��-l�j��>Q��D����W3�]H��Bm�� `V��4�&/���n7�w@|7Ju���:�Q�-�!�2���L ��o�}� |hx
�
�TA��G^
`x0�a n��F��4R��S�OPrcWR��i����i:��3�~u�Ցus��\��w
+hS���z�.�K챒W��I�)�JQ}�z�A-t0��BO�
+����Bǚ��ړ�cؕR�c'����
-�m��1؎H��dV.�9F� ��>�%�:X�%��P/l�d�)�:T&�!5�8,D6�WdS����uH���k������<�_���ఒa�
 _�&�D��[�C��I����
�LzmP������Ny
+�֋Mt+��zǭ��E����`
`T��G-c MI"��#�NQ�jm����b�
$_EL�OL'[�ϲUĪ�
k#�g1nB!��N����V�j��>���ˊi:[o
���}�S�?+�f��ãi�_67S�G��oE�܉:At��x�˻���$	�ܺ�ܰ+tۑ��� �u�0G���Tv�j�}*K
+X���Qp���.�#X��y�ok�@�]����w ��͒��.ȇ 8�l�,�%�UQ�?N�ܧB��	߭�2 ��0�ˑP�)��,�����,�z�x~�|�!��x�<l��)
?��9�����9�K�L	w����h�
��Q}�J7	���'	"�V��G�7N�05TB�G���'��

b�
�k�
�C��'���G����$zK��m�3�y�`ӿ�����

+��O�����Rc�nW�;�~^eqʹq��]��Mֿ�̺��
P��ip{�=ٺ������Lg��`�������}�׭0sW
.����<v��Z�8��(�r�m�Ϻ=�
qZ�e�f5<��V�$I��|2��X<�8�~��F�w���<2Y������f( �b�
*�����f{�

H)�! �����{���)�@�ȁ�����(3�Sp!s�B�B�dG��TAq/�)��6�����I�%'р�#v������7�U/��]��׽�I�p��a������6��`Կ�r	Τ^��׫�B]�q�4s?����t�
v`%,,U��>�p/���
/eMT����4J(v1+k�a��X]���k����ݿ��S�c�]A��
j�J�y���yl�.�3'f����ȗ�wGV-�6Q�z%��:EQ7��Y��HF Zz}�M]�Dt��5m��|V."1�AR�
�
ڎ�\���� �����D���������Bj?} �0z��|������
*�A��k'E�2���^K�^5���1�=��ͪ(����{]$����}S.
ö�a��
P(0�Ip�]G�Y_�e1}
��ۮ
�
�iu��[%�]tA �:�}MZ$b�}�)F�	�f�P"O���k/2x�,�=P޻8/����6����!�65�����ѶV1[�h������~
+endstream
+endobj
+1933 0 obj <<
+/Type /Page
+/Contents 1934 0 R
+/Resources 1932 0 R
+/MediaBox [0 0 612 792]
+/Parent 1929 0 R
+/Annots [ 1930 0 R 1931 0 R ]
+>> endobj
+1930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [489.735 92.3 519.955 104.255]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.1) >>
+>> endobj
+1931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.086 80.345 422.306 92.3]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.9.6) >>
+>> endobj
+1935 0 obj <<
+/D [1933 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1936 0 obj <<
+/D [1933 0 R /XYZ 86.4 508.31 null]
+>> endobj
+1937 0 obj <<
+/D [1933 0 R /XYZ 86.4 290.34 null]
+>> endobj
+1932 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F14 1050 0 R /F11 787 0 R /F16 729 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1950 0 obj <<
+/Length 2480      
+/Filter /FlateDecode
+>>
+stream
+xڭ�r������-`��A/؎�g��\�x��`��!�",4i����$$j2�ҁ����۷f���ěob�~w��6ߘX��I6w�M�*�Iu�
+g7w����cy�����,����w�3Ney��L��%��x
��Xw����w[��ۏ<;�rˇm�~x��r���wc=����&zBDx�)T��|�mW6Oc=2��PEj�@�QV�ƻ#l��q�ߚ,
+
 ���~�?�$��l����H
�ơ�
$�9�c�I]m���+���̅}S/���i���7�T�
/�
�u�if)���
+�%Q��#��w� �
Im��T�Y
+��DԂ�S۝K��
Pa]�l�؝�e�1�~�+À秡����A�p�#
+��	���@��}'0�K�$W�_!C��
A1B!��A��r/\�]9̔�Y���"�\+g�(e
e�����5�v���'���)I.N��rbS����7
 �9�z?��j�M��q�[�8_�V�F���
N����sW��b�:_/�T�8�Nd�� ��4��
l�#�JE\8 Bq�P
K���x������'�A^v/}s��Z��PyAG~ _&��Bх��k�e�Xp�其�="�
4�5O
;�aW�ߺ�]�K�
�#k�A�ڗM3�$�~�l��κ�+IW0�-N���"���`�
�u�/�3�DUդ
��A�F�<
�=u�2Z-�p�j.�����f��8�V�"�H$�x�7f

���
Pi�6�ʩ`�ٸ��+�E	1��S9L�p���Ћ�OG`8���X7�؟��ȩFv�j�r��(��嫘](��0�ӻ۟���{n ��E��lB(��h*�
�:B���c��Z��:wqg��.�?�"�gt@\���R�_s�ROG�	&�����%�d�
+{c�9 ��J�Z	�0sJ�4�8�M�\
+��Zq�
:J�Q�{*G��a��_43hR\����>5A�m8.�!ԏ�k�C���{�S��a��� �qɰX]zN��Z8��\����@%���*���i�����X��f��Pu��n��Ѣo�dʦz�C���ۛ_�7�u���v���ECh6o�Ε�
+
�I劂n�2�I��̤Ng.�dj�s"���?�:BJ�
�ðh
�O%) �9+�=C�
+$ �\I�^��X۰��;��9@�;m�K�������A;�
�X�P�� @0�T2�2!cZIz=)���i�x�b>���j4�A�(^�w�s7�m�}�0+�ӈ'Q��X�~�
l3��3�D� ��q
����3�ɻ�w�E�b��*�R@��#v9�Ft

�V�
�U��WSm��y�"M��@{�DsR����-�	��=��5I
F�lj�a�mx��#������>#
�rⰺk�7
n�D�O<�$��6
�-9Xz���8��8�\ҥ��<�V#�n��B[܉Py0�5L��$�y�8"׻�����aX�"��S#{.j�,�k��=�EG��lj2�gG
�z%�?�Ĥ�^Lq))�^6_bflVn�3�hP�AQC
+"�.5�
�ZZ�,�$
+��$��VT�gP9B(~���
P
y,e
�B�w��� �A�"�'^��#!s��\�D��%���E�"
-0Z��(9��Js�1�}�&���D��\S���R�
����m���ݶ�B��Y�
�=�Y����[Jvw�� ��䤾s)�#�ҏ�
+GW\��u�����*
҂�Z��R�]h4w���9��~x�Í`��B�σ�
V�Y��97�*�t��m��UxG�����B5��
+��IDYI%?�6��=�>����p.�yY�������"��S
+�m?NB�Y=�tX~I$�����8Vil����x�Y!W�^��
@�p��O��Zʊ�=5����*F�|�Q�V4_Ygv����H��rH X
�n
�W�Q6e�J��32�h��"�"����س 3:���A5F�t�7[��P
+ P�HL&S
�	!��UF	.?Cb"�ėY��\	k��y�ܰl���Q"Q��+�.c�#�
��y�X�J�|�]���Ae3��-�~�S�~�i�B��R�G1#
+�ņ�tKGR��ɗu���K� �U8tEb����^rh^����rYcއ~�"��X(�|�\�Y���a$W�

+�8ZD�1$<��;���Pp�s��n��,c����sk��7s�K�v���51�/_^	?b��YS�
�pAB,��*A��G��ܝ�"����b���Ԡc�����b�g�N�V%1�
F+����]�J6��/�D�]=��U�)ʦ����1oŵ(j<�7�c���G��L5n�MG,4I��It��P}��xZ�(ߵDvB
rW8�)͛q��OL
�v��y��_�G!}ګ��Vɒ��i�Y%L��6u���7����t��
c�+1��3V-�s=x+��/�
���̪��
%y3�n�k��a���F���b���C
��m?<}�fҷ�
J�X�
�Vԟ�a at c���%� �H��w7�'VL�
+endstream
+endobj
+1949 0 obj <<
+/Type /Page
+/Contents 1950 0 R
+/Resources 1948 0 R
+/MediaBox [0 0 612 792]
+/Parent 1929 0 R
+/Annots [ 1938 0 R 1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R 1945 0 R 1946 0 R 1947 0 R ]
+>> endobj
+1938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.097 420.149 431.801 432.104]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+1939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.914 408.194 376.385 420.149]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+1940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.361 360.414 350.41 371.262]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+1941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.765 324.036 262.739 334.885]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+1942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.005 241.687 400.728 252.535]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.103 229.732 459.077 240.58]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+1944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.103 217.223 341.825 229.178]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.999 217.223 519.955 229.178]
+/Subtype /Link
+/A << /S /GoTo /D (Item.64) >>
+>> endobj
+1946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.33 205.822 394.052 216.67]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.886 180.845 208.608 192.801]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1951 0 obj <<
+/D [1949 0 R /XYZ 86.4 726.045 null]
+>> endobj
+306 0 obj <<
+/D [1949 0 R /XYZ 86.4 701.138 null]
+>> endobj
+310 0 obj <<
+/D [1949 0 R /XYZ 86.4 307.813 null]
+>> endobj
+1952 0 obj <<
+/D [1949 0 R /XYZ 86.4 177.316 null]
+>> endobj
+1953 0 obj <<
+/D [1949 0 R /XYZ 86.4 155.923 null]
+>> endobj
+1954 0 obj <<
+/D [1949 0 R /XYZ 86.4 133.977 null]
+>> endobj
+1955 0 obj <<
+/D [1949 0 R /XYZ 86.4 113.967 null]
+>> endobj
+1956 0 obj <<
+/D [1949 0 R /XYZ 86.4 90.084 null]
+>> endobj
+1957 0 obj <<
+/D [1949 0 R /XYZ 86.4 68.138 null]
+>> endobj
+1948 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F14 1050 0 R /F11 787 0 R /F36 740 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1961 0 obj <<
+/Length 3449      
+/Filter /FlateDecode
+>>
+stream
+x��Zߓ۶~��B�R��A0n:�6q�<�n}͋���$ޙ�D�$u����.$A	��>O��!	B�b���
�����~����շ���e,3��n�f�0=Keƌ�����<㋥�2���eu�X*��X(9�X��;j���y��̼n>a��Yc���+���ʇ���G����7�m�����n~������ ��L�$�j3[m����gkx��3���'�o;�*c�6�wW��~e<\�
�	�������S��˒Y�k�g���:T��0N
+�s#�+:Z[����G�/�ݾk����T��4Δ�;`��x/Q�]�����d۔U���k���*�󶆫�����K�Ͼ�nG����_�����NE�9�Ӏ^��X�)�S�`���ɻ}S�ػ����kz*�WU��S�Y���ۘ�Z���/^�����*~(~�BW^��_Lsn�����7,�ٖR�4Q4L�
�'\�f���8o�ۅ��[�'K�� Pw*�,Zz�+OxS|ܗM��{���XK��2�hd���+m���d���.vj�)����=u"�v"�
o|>%��:�e�' ә�^��4��!A���ݐ��
+ur��5�
vy�o��hZj�Tv�MS�;�˪����}>�+
�w<P.�țb��<����Ś���eb��h@�2��7�����n��D���������2��*��(�
	�-�3R35�@	��T8u�xX$�<����o>�P{����ܧ�}�m܂Gz�>�]�ma�n�K�l�AE�^�ݱ�	�J���XyE3�M��w��rQ�7��
"��� ͨx�!�/A�t 	C��f�'s�+z
�
��u:��[jq���[�H*�Y0�^$�V�G�s8�7�k
+��
�s�����S�m)X
9�%����
+�
+6���Y��-bu�
+��4�U��CY�6�5z�RC�K7
Ft'Z��=��� �N������[b�:���u����v�~�W*џ����G�Ng�f"%��[g�
���stn2_�A� �8�Q��9Q�
��L`��
f)S�����Z ����w��m���b��Ɯ_��j�,���9+�<cVZ7���B��JdQ�]v/���oSc��-����ځgS�A=����gN/���
+1����*���d�#�·�Ŕ*3͒L���$ޓ��D�`�!�8��V"y���LH��1h�-.���`S���@�(A�c�'� ɔ�� i�ic�.�a����
�
��
v	�2‚9�1ȸ�
K6aP~@�48;E���M�&��8�����v��p
�Z���p��C-��J�NƤ�T@��yp�c�P��>`ZJzW�7A��G�o����1��&f��h�#�Zj-���qk(˴�.�˛��򦖦�7^ydצ,���1kFb��i,(P��`
�M��
�y���ߢL��att:�e�Sʮ3��:��5��Vʲ��pi�(C�LH+H����O\rH^���6I#2�R�Y8��ody<�aV�Y�'��&����
H� ���1�X��
ҩ�EE�cB�a�<&c�Ѐ
/�rL:�/�.iyA���
H�p�c%��kb2���~�iMjLp7hEx�a,���c���+^�4�MB�W( Jq�#!%�1�٘bG��Tn64��?�!0����I�U>���i�9��h��
�o̠
��Gt��LM
���욢�)wB`	��9c���Y��r	��BOu\�Q�c��_�A �#HT�}dž쵷!���+'����{�*<{�h2f�����U	{��N)��)�)l�νUK�Rs`�O��DU�&�mW���0;�W]ݴ�$��b$Ug�I1)��yx-ڮ�Ҏ��M��ժ�(H%����Vc#�`�K��@�Â��Rh�����Dx�����SL���G�
H�ڎ*Dx;�?|zX��
ql�Uൌ�QA(I�')!.�\IJ�:u���5�\Ʉ*W�{M��z�j
�w����p
1Q�ޟ7���� �O���-k4|U4(z�q_C"�O�{�w�$D�o��
|TK��%>l����W�}CƄB�ѵn��
R�s���6���n��IqY�	�M�s�� �&~bY:e�`��͛KE�B"\⥴
K|�O���'��o6f���E{�3{�	x�8�Y�M�7�*v�
+�b
�IJ9�$nɸ<�iN#6���2� 
+��9^)hzν�Ȋ`!�k��;ȓ&"�I ���l�I�},��,
��X�"!v�¤ge	�XFA��]M e�iE;��`�:;�G��p���ɘ��ÞP%�('u@,N���LGNbIXQjw=.�9�j�3�������'A/]��[$���N��©�%���Ӥ�5	O�<c�w�����{�A����#\�ԍ
��׀�聽q_��-
�8����G�־�4ej�I��R��#��-�1�$`S淛"�����'X������`{�6��=<w}S��`�2Ǔ�̣
6U@�Z��
+8Z P���A��"QDI����yb!Rq���V��,�A|�[!�uΎ�N����<���x�Ϩ �h6 B4�vg�S�8:��Z p r �>�@As
�uCa�/�
�(w��ã-�Ps[vM�
Qty��z��}���n�Ω[o��}Sx��!o��[O���x�%­�AY�.-�^V����@��;����D�7p, ���qp�i�U��`g<��|K!?�[��k���	�=Q��"��5<�T�jc,e�?�G6civ��05��|3ؾØu���
+ϼ
?����H=V��v���.��ì��Ci,�����Ju�#'k���f��T�ΕXĈjT�Q�gJ-�s��#/� uK��["%P��wl���-�WWR���\W]�&��X�Y<��x�n׀��
��η���ʵ�Bh��j���˛�\�7=�Oh�L$��EU��"v &�G~��=@
����IJ
�c�� P)�
�ӑWe�v�$ܪ)����3̒�:�)���B���ߪ�~���8�6�W\���AVȗ"�,v<Q�������qh�\)���b='����B�7<<���M]��5��>F�ʱ2Z|��v*�7�|���}5:x����r���L�$�|��k����WQ3���'���v��t��G�_Ai��gS9>C� �b��Mq�D��$�Gq����"'�X�O����ddİ�	_�3��o�k$@
�X�|eSH�L����	�9��h&�&�bJL��{�L,S��
��͇��>�g1��hZ� �����":�Ó����b�W¦�=�t���7�<a J��R'���d<-��J��59-W�����ǕX!��,�H��yu���̺���I�j�>:215ׁ

����|2��у#
+XMI ]>V�#sC^��,䟗�DH>��������1�	�X�j�m	t��j΢�r��߯.i
+endstream
+endobj
+1960 0 obj <<
+/Type /Page
+/Contents 1961 0 R
+/Resources 1959 0 R
+/MediaBox [0 0 612 792]
+/Parent 1929 0 R
+>> endobj
+1962 0 obj <<
+/D [1960 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1963 0 obj <<
+/D [1960 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1964 0 obj <<
+/D [1960 0 R /XYZ 86.4 685.834 null]
+>> endobj
+1965 0 obj <<
+/D [1960 0 R /XYZ 86.4 667.43 null]
+>> endobj
+1966 0 obj <<
+/D [1960 0 R /XYZ 86.4 645.152 null]
+>> endobj
+1958 0 obj <<
+/D [1960 0 R /XYZ 86.4 624.811 null]
+>> endobj
+1967 0 obj <<
+/D [1960 0 R /XYZ 86.4 215.585 null]
+>> endobj
+1959 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F14 1050 0 R /F48 982 0 R /F11 787 0 R /F10 1095 0 R /F16 729 0 R /F7 1094 0 R /F9 1096 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1975 0 obj <<
+/Length 2429      
+/Filter /FlateDecode
+>>
+stream
+xڵZKs�F��W��Ԩ�o���of25�J*;sIr�%�f��$5����_�%��0e�E�4��84��h������|/td��\Gכ(�DF	7D
]���bE�b)R����r���b�����r]��b�7�nS�x!��a!x��k�K�-�-.�S�.+M/3)x����������`�"�XPI�T�h������"J�I���6��Wetu�
�M�CSө��0��,e����+װ�0��/���ز�`B�;[f
1�k�/���v
+�@�%�Ĉ����k�ç8%Z���nK�U�/����+���h��B����n��D�NP[-��$qf-Q�Y�+���4�����4X>ࢎW��~�zӜ��
�@�	�d;|��B��n	��p�`�(�T�h �	o�mU�
��$g
�F�/�`K�^p��sA(�:����nt npd
�8:8����@����#���
���/I�����_>MbPɻ��D#l���G9��h�SN�2p���>v�3b�*o�s���m�2���*?��t�2B�����:%�"�.4��Մ�f*��sd�S
�4��R�������b)��΅���䕑���1�
+a(x]��B�YT�H�w�=&��V@�b@�h9�E��;��0�Ǖ�f3".&�]����iSW[��q{��[\�l_z{
��� )�
�X*��^\��*nuU:p�M;l����.o �8��𝯅-��B�f�4�$OD�.� k
�Y�.v�=���=�UY
Ϻț.�-�́\�-1x](�s�̱6��Pf�Dz
?F	���n9��Uu���p�`{�dW�m(����gh��K
e\�fZ^݃N<�W����]���3�[�����
+����*�o����9 �C	FRU�1���}����
+w�`�k�j�l5�6Tk�Ӛ��9�v���)��0���]�_A�h6����y��m"�A3eG����NU~͏U�
��2I�����`�n��\��m�U����"9,8Z(gE�Y=,^
���l�
���X���l���v��
X"-T
��+E��/�
��]Q�N��^��W5�ޭ2qc��1w���ݭ'�լKB��6
�f���~�s��Y&�?r���$�w� )�]��-�UH$�G:9_}H$p�d[�˘{%�o@WtV+#����������|x�
S��wj�V/�2c��
f��]cZ@�����.w2l^p
LN���	�x��N���KJX_� .?9�rl��`�<Eg!A�R���e��	QB����~������h�<-�I嬼�M����l�;%�L_�!ԓ%
�*9�v`oU�>�υ*��S�A��f ����a�z������3
+�3Ԝ��ʞg���4���8�Y�
c�
s�:\Nd7��m��
�V@��� 
�W������ޡ*��ab�$��-���R@�~�dO���$�O��.�=
+����L�Q:�H &�\��	�����1�Xs�rI��4��[~��7��
�X�^�uv8V��7ӷP�C���
+���;D8��n��S��dk�F��h��(��[�6uJ��sx�"�9�H\�5�~rj��
�
=1gHBj�xtc8�
	�����
+n
��Iu��!����
ud�"���h��
(z}�p*O��@�&�
5�Ua`
cAI���b�>��)�y��;��y��7y���	���(���Q��Y�T��y>���g��O0��1�G]��R!�����9��s�(}$p��y��p�������]!B*ɸ,��P�P4~���O��p#OYL�q&
j73�P*Ǎ�Ϩ{�/���	Bm�0pm����wm�_A��O��-���8�XI�	ؙ��[�*�
���?i�G���8ͻa�&VY��L������]p�7�ǟ?����M!�it�У!5)($q1�<�G���|����
6����%j�x�b7q�c]�	"���΍e
�Yy�
+4�YՅog�ֵ�)#�Ҿ,�
3��C�~gwk����Ɏ�����o
�ڝ+��t0� ������M��zE� ���lނ�u�t�����⍫
���
��i���F�9	Yt�����!U鈪_� ���6�Ɇ����8?a`ڶ��x >���$���2>n,�����ܵ!���

_
~�B`�3���
~.���ڸ�\�h3�A��k6��5,0�S�
�{g���t�)D��~��/��nLTQH���};��E��>DԲD�[�.��^����/��Ǭ	�{;�H�7���L���)���h�F�+c"�m�=!��\�j�(�H
I�$�8��
�P
�M_���x��S��a����
�}��9�0��:���Xg3,Z
�.��
+�!^�J��P��&�_MX<��}���O�n
�nP��0`�
+endstream
+endobj
+1974 0 obj <<
+/Type /Page
+/Contents 1975 0 R
+/Resources 1973 0 R
+/MediaBox [0 0 612 792]
+/Parent 1929 0 R
+/Annots [ 1968 0 R 1969 0 R 1970 0 R 1971 0 R 1972 0 R ]
+>> endobj
+1968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.463 658.797 389.934 670.752]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+1969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.438 620.894 497.91 631.743]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.2) >>
+>> endobj
+1970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.835 570.483 394.307 581.331]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.6) >>
+>> endobj
+1971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.657 431.049 373.128 443.004]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.5) >>
+>> endobj
+1972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.455 165.873 441.178 176.721]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.5) >>
+>> endobj
+1976 0 obj <<
+/D [1974 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1977 0 obj <<
+/D [1974 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1978 0 obj <<
+/D [1974 0 R /XYZ 86.4 655.21 null]
+>> endobj
+1979 0 obj <<
+/D [1974 0 R /XYZ 86.4 617.307 null]
+>> endobj
+1980 0 obj <<
+/D [1974 0 R /XYZ 86.4 566.896 null]
+>> endobj
+1981 0 obj <<
+/D [1974 0 R /XYZ 86.4 547.314 null]
+>> endobj
+1982 0 obj <<
+/D [1974 0 R /XYZ 86.4 523.857 null]
+>> endobj
+1983 0 obj <<
+/D [1974 0 R /XYZ 86.4 504.274 null]
+>> endobj
+1984 0 obj <<
+/D [1974 0 R /XYZ 86.4 427.462 null]
+>> endobj
+1985 0 obj <<
+/D [1974 0 R /XYZ 86.4 406.496 null]
+>> endobj
+1986 0 obj <<
+/D [1974 0 R /XYZ 86.4 304.998 null]
+>> endobj
+1987 0 obj <<
+/D [1974 0 R /XYZ 86.4 285.692 null]
+>> endobj
+1988 0 obj <<
+/D [1974 0 R /XYZ 86.4 262.236 null]
+>> endobj
+1989 0 obj <<
+/D [1974 0 R /XYZ 86.4 240.716 null]
+>> endobj
+314 0 obj <<
+/D [1974 0 R /XYZ 86.4 207.479 null]
+>> endobj
+318 0 obj <<
+/D [1974 0 R /XYZ 86.4 139.686 null]
+>> endobj
+1990 0 obj <<
+/D [1974 0 R /XYZ 86.4 81.247 null]
+>> endobj
+1973 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F14 1050 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1994 0 obj <<
+/Length 3325      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�6~���#�!8yL*Ό'�T�dǞ�!Im�e�"�
�8�~�q�aY���nվX$ �>�n�tv;���O��>���g	IB
ήW�8$r񄄂ͮ�������9�	>�yq{:�.ޞ
+
���YpeZVee
ޝ&aPVw8 ���(�����&��7�|oF����q�����oNίO>�0��Θ�D�X������_�l	=��(I<���3)��i3�:��	�;��
��
FX�
���E�,4����s�B\�3�7���l���p����pRd�Wz‹�g�ߋv����LS��
`ɩ
+���
�:+�
�-�������qQnwm�"�������ͦ����v��
���H�>�DY
4Y€�B�l[V���A�m`���hJ�;$'��@�"�,ڍ!���8�=
�+�DnV<�n�mV��z4�����NbY�/өʰP*A�0���!������%c��a1��(�a*�(pfD�X���0��_��
M$�:E�T��Z�U���o��1�蝖l��e���M���ɆV
�&z�`Q�YO��Pڍ�A7N�p�ߜr4mU8�1��3������P�'�ˈОL���Ѥ��"69g�0)�'���H
+2�x��c��
x��X�%�+Z.���h���\9�A[/N��� ,	
��rm�Y�ϭ}isϖ����q'�2E�m�ۿ�+�� 5?�P��[�ܺ���H��v���6٢1Ϛ��q����r�jw�߶Y�6�	̙�
+�x�e�릵�-R�	r6
+2��B���A���<&\��.O��H
�Ê!(��x!J��HOJ뫯.����������<�%c�,}{`�p*�AP�H��
@y� ������ߟ�}�	��S]&���bP�P�#
([t@����@MHz��/l%���V�!�PJl�9�V��(�S	&��5h��;4��Ue�
��l+�ƌxL�����Q�n�7-��Q <���t�P���r��,���(�
+�W����_f�"4��6�M�����*X�b�SRz@�a-w�p�b�zV�!'	xL�
+��������/=�Y��v��`����8��
���-������ �L+�}(٘��}� Ԁ�������׽B����E@@۲uxJ�q~w6
��������HCv
\fw�ð�e9 �Ԓ�!��k
����}y�
�
�fw_
4lc��0�T��V�<ጃ�>fְ��)	�\��"F��U��?�'���MZQe##��Z�	�haM�3=:s�7}{�n4��
k�9���h��#��&�
�r�;t
�"3oh�R�����nʷ��M��� ,Q�h &����ck�رjn�Ƨ��T� �LW�uxj�
�@�5�<"�Y�d�m�uZ��E�����U��ҮZ,GSJ;����T4�uj�� �.�;X4 �"�r9��eUU:ԟ���a��4��UV_�$ �����~Wxb��=���<N
�Y 6P�9�7
�IID;SY�E'�8�[�
��ڼZ�<XO7'�e�|�f�"q�=T�.y�ԾSti9H�-.{vN�ۻ�X�M V�Ɗp�5i��m>��q,�#������Vh蟪[��Oħ���D�W�x$�b�)2�n��������\z�$"*�f2gI��9���+=�6��� ��@�-�\���I�c$�x2n�芃
+�[U��x-���IB���'p������fM�@y
+ȥ
� mM�����Om7;d|υ��r�>N�dTt�`llhYA�=Q�pɏK�A�$�������9�>Ey	����{���!�
+��š7�������2�Y���~%XQj
�0�z�I>Ht�x�Io=579����E�x��G$�3�'��r�dW
�/e���U��V%����;P�ׇmrY
�1��@ەlE‰L^�b�3qg�W޼9�:w$��w^��9`sS��G	?��OI�׋�T5�],��T���Wp>v���E:�y	n�T
�ҋ~w��g���^d�8uNƋ^~����ཅ
+p
+%9Aʣ��"�'�oH�&�oh��r��<X����j ͺ*�۵-��]�}���~k�
���m.�����
U�N?I�@��|�������z�E�j
}wvq�j�MOdž�l]M����2�vƾ7�_Ԗ�|X,=E,F>�PщEH��BŅ�=�X^`Q'�Ѣ�?|�>^.��y)��
��x�hZ�t'�S�J*�'���0x
օ��ݺ4�;{����y����l�zt�0�����g�
�#��Y�K�'�	��|�%"��!�u��'q�4��;\N���7�ĝ�P�qWi�iLkd�)3�芣Ȫ��R�|lK���
���l����^ժO��szҕb� QMȍ���S��0h�h�*[���K�ɱ��LtC�M]�5vUޗh�dl���yi�w���i7���Ņ��x
#n�%>�ax>bVWX*����
�����l
��
�� ���GAB��yú!
�X�
+I����EE�[,ɀ���
6��
4��f�5pl�!�zr���Q��_�=��#����gqCB�9��aZ�!��أ��YH����P�e# �֟{��y�c,ͦ��m���-H��
�y��E��[2AI���D0�K�����-��1��j�r	 �*��Je�[�ӕc�k�w
W����6ۈ���� ��xn3�p�
t{�*�-���~�C� 
���&+�;�	$D���Ko6NhoIGM���U���X?SG��z<-�
�ţi&j|y�Ӑp���$���=E�?���wz�H4:�Ew}�cSn�*���1@���(����%��Q�)��a�yɣ�L�5&��:��Ўq���٭�3��������|��|A��� :f�_�
+�1�@=e���À�ra�̙��r��8��?�0�1C=e�܃7�`�p&
9��\�
����[g���4~��zh�Lt���+
��!_�찎�7�-�E|��BP@`F9�Y���J_é�u���Xh�=^Nc
a!��ؠ�*ir಴
+!
c���)�o9��EPg�vc�Y���=�q�/��]�Mm'ht�9�	G=n����*'��a�����?�Ը�Wjr�b�ݪ��qj�-�Ą��C��=�+�[�0�c*�z��{�%����R�3��s�tӟJ��"�k.l|�!5<
U�2?U��(
V�҅qa����S:r�q�
�fx�DLB�۩�Q�T��kӕ�u�5Z����������OZܺ��un��]��?P
f^��������ݹ��
t��CLo��y��y����Sӛ��h�Z�k� ���7�
?�
+endstream
+endobj
+1993 0 obj <<
+/Type /Page
+/Contents 1994 0 R
+/Resources 1992 0 R
+/MediaBox [0 0 612 792]
+/Parent 1929 0 R
+/Annots [ 1991 0 R ]
+>> endobj
+1991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.926 480.219 331.649 491.067]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+1995 0 obj <<
+/D [1993 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1992 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F14 1050 0 R /F11 787 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1998 0 obj <<
+/Length 3151      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs��~ׯ�#�ZN极SyPve�\^9��y�RX�P� �%��tρ�%�\NU^$����_w��ngt���?�O���г��������j"g��D
6�^�~N�saE�Ϋ�"[�N�,ɾ�r�*��b����MY�ċ���'Y��O�|]�����'?*[g�������&�8��������Nl��Xܒ"V������_�l	O��Q"R;����ϤH	������_'4
q8�D*�o
#��i3Qo��3m-a��FsB�S81K�sJ
L�SF��^�ή@F?�k��H
LS��W�>�����־@�k-vh,�(��?�{��y|epl͈�
+���7���t��J����$�*Z,�� ��Z��,�wA���9�j��
+St�p�߿��)�x�tE�������
�ٝu�RJ4L;g�<J�y?���*
6E��;�yΘf��
:�h

+
�
��6�od0�m6k�]��*�U��U!��r.z��R!�^
+���.����&íפ��9�"�Z��zV�n��5N��{/
d�jgZ*�ޤ"��I�L�!�b�Q�
�rP�qh���42�y,��7���U#ถw�c^��sYYx���ɦ�O7w�(X�
�eE+�S�[���Pڌ��UP�U��]િ�5�|����2���0e�)��u,�}�g�|��Ok�I��,���CΙ <�%x�
I
+:�~���ˀ
$��"�H2��3e
+!
���3�����i	��*_l�5j,�
���Y��ܯ�|s���$�s�Dr��
=�*�d�m�l��W��p�8a#���g$�~���jB�:gm�6����L��Ӕ�	fA�JC�=�T�E�.>~�������OWcMh
v�l��:9N��3fa�1� n p*g�>����?���Q�Z�`�an�9Ǵ��	DM
Q�B�&��-���榊�7���
(:��5�
��C!�E'��&�npUe���gy3e'����y9�� w�<��V�qk�
L��w���MEh�&��	�K)\�:�̥�%͔����ΰ�E饚%X�z��)ؠ�}��DN���



��qq*�nѮ����0Dш�i�o���DLI���
�0/R�����"�J2�7z֍� ��FSB�S��\1�����;�$�
��O���a�ʳ�A��(�d/������Y��ǜUv7��e$Ђ
��%��HP�y1��ٿ���H�܏r�w5%���ڱ
�
+���^�b
+er�d/1�Q"��O#�Q ��ݳ�O�ߟ_]��GE�J�x�P�L�r��Rޡe��S�Gh|�+J/�C�],�ٮ�c>�
�!N�Yb
�ʣ���6(���ljE� ���,j1ȧ�E/?���
�A��Z8���
����f�B�Q�h�8{�{�2�Ǻ���� ��76wU����?2����r�
��c�Lm.�� �{`{�$�1P3�Ӊ���[��)V)up��'�4��v�51�a(�yu~��kh��1X��6��E�/])��'�6����bl_���g7x7[E�.���t��nzf�1��1�`~�
+k;`
�8Ԇ�j����$a)�R�©8L�
H1�O�X4�S��~�>��֑#=l7^W�2��D,�x�	�wJ�i
+U��:���,�I��+�o=Q��_��@��Sf^��株�@��`��
���h�vw�o�.�Fg^�mR���!����?Z�����"+V�,�p=*Jc���>Ǻ,7y=�B������^��s��\��b�U�������íx��]Y���y���ע�l.�@�P
+��6��l��U�zyp+�e���|�n��$�Jq�8�i</[ե_�*Z���F�~g#�@
+���?߄��
��3er
�!/Xx����jE�4��/M��پ��D
�4qt��9
���a�=i�h�фD@���>��-�I�y/��M�Bd:ݛ��1�st���%�l/���Y�Y
�,�)�aQ�4�4O"1��P,��:6��$�]P�](mK&��ھڶ�� ���$�9n"
N��[- `��n��!�
��+�&�������|�1��Y|( �@�` ���_� ��kz����n��X�
�"�FO8�kH��x��+A`R���kUr�]/�Q�����Lrۮ9����
��l}٪[c�
9а�
ZX8 !B]�=sm�y +ܯ
��|K����0�B;�O��w#+Xdg��*�G���ɡ/
ԙF�a�ٔ9�d �º����"�k�~-����������*���c�lU�,
�Y����^g��NbDŽ���6	hx�������z��,�m��
�O��6_�U�z7�'�9?�ݙir�u���u���~`��#&��F�"�I�r���E������>���S?��	�ݔ����S�8�4z�EMqeb�2,�|��2
+6$�
+?�8��3�+F2�TD��� ���I��ˍ�����_��]���V[p��30r�
��f�n$�9�F��1?ų�� )�8)~c�A�鼤MIn�b
Y)�J��JՀ�b~��OIS����?Z�������Qp��v����D��k�h�u�x�"ZT��l
8{AU5�Xm��;,!��k9�+;�n�\3�����A���rtWD_S5
ބ�G4����^'!d�}"R��Z�].��7;/K���^�b�o7�e�B��
�Ć�slK,=ۼ.ooW��77SN�>�x��C��&e�
`?�u
6c�@x�#�f�
+1�-�͛�4\iBa|o��^xA���250W��=�
��%���ZI@��C�qaI&�8��W����
~e��b��/���4 ������� ��/�nw
�D��W!�A�!+1�h��qZ2L�;Fq�Ҍ�O}i9�O�lf�4��}(ɱ&̻
���,��v�4QY�?q�~�\����t��
+�1څ�;�c�i�[4/h��
+�Q�
f��jws
�`1_x������!S�\����CmA��O�E
a�Њ�.9��Qe�X��w�k����I���v!
�>
�;�6)iK��L#�L�D~T��h{p�X/\�Y�B��(x�V���O��q�z�j�f�)�+!���m�w�^�u��!e
^� 
JM���El�`��ց�i)~9ph��:m?UA�0��!���
+endstream
+endobj
+1997 0 obj <<
+/Type /Page
+/Contents 1998 0 R
+/Resources 1996 0 R
+/MediaBox [0 0 612 792]
+/Parent 2003 0 R
+>> endobj
+1999 0 obj <<
+/D [1997 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2000 0 obj <<
+/D [1997 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2001 0 obj <<
+/D [1997 0 R /XYZ 86.4 378.66 null]
+>> endobj
+2002 0 obj <<
+/D [1997 0 R /XYZ 86.4 196.211 null]
+>> endobj
+1996 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2007 0 obj <<
+/Length 2562      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs����W�Hn-g�=@R98���֮�D�s�� Q��
+( (��ק{
  BY���Z�𚙞~w]G4����/N~z+t��Ds
]��X�-Xtq}�%r��'|��΋��B�b���\�٫����ݛUY����D����������&��|��F�*��c��"�����'�'�;a�3��Eb����ɧ�4��/?G��$�
��H��p�[G�'�:�=��1�(�[�t�3ڱ�'
�3�p��m��m5�;�fv��)�Y��̏��+�e��7��2m�p_V�b�O�����
1�h�b`���}kqL�r��ƿX��u9������}���%`oq�n��%\��L���
+��߽Í�e�z
��
\�ɮ+ώ�����*�P+�<�	2k���w
��
JK �6x'�.��;ܜ��� �Z���ߥ�&���p	��J[v��YB3�-��wo^�A�+@�;�Q�(!�P�aj)��l�a2�	S�5��
+*I"-8a�^�ќP��֪{��	1���a��w~���,�D�c
���$(:1�H���0�hP���5^�bq�a΀͈�*hk�N�K����eD�QE�tW"�B<��ҏy��!A���V������mv���U��a?��)���	���:`���s�,�`�h��7Y���;�ݩ�'�?�f�AB�q�)��1���f�D'�CmC	����u
^�zO�!��Ϸ�W��.� d'ʐ>G�� �sϿ�N����m��Uݛp���ӒP)#�@�|�!0m�/�]J�MCأgІ6m�Ak
љ ��a�}�_9S�aWS�"�嘓��X"}�eә[�u������G�Ei;�-�G�ץ��D��
��l�"�
+A�<��)��Y�L_WY�d��!�
"�� $���	0*� �{�$Dpy��`����nl�
J
��!�
;In�Ob�O&�SVUer�������"���Wa��'T%��sI-�xM������B�ZU��
�h�)���⺹�(���m;�s��m�X��~���=ؒ	n�r�FBD�Rh�x4M�ј�v"
��H�ыx��������&E�6�W����a@� �e�]ǖ��L���-V�>
����B���)��Ʉ���C�j;i
Bo�P���v
7�K�h��^``�B�^N�Ȳ''0c�8EN�������ׯO������wA:��W��0)��̾7�nj�*�E�� To�0�^m��c
+t�Ā���~�R0�d�,
K�������1�PCMA�U

\��ه_~٣C�moq1�d���$+t��d
�M��n�Lx(���@ k�t��n���pV�������]�������g��-�/����D����إ5-ib�c9�i�R24Xg�Gh� n�$4�%$�
��ӳ}�Ah��
: DN_���` �x�AP
B�:�{�`��
z��V�Y�6�g�{t��3!|V��
�w��z�Ò1� ��w�ѐ2QR�D�������;�c^�m�a���t"=�*�n;���	^
+�E�hUl
+�CB�1
۾~<�8~CA�2�d���O����x���9�S�=V�?�1���C?�ɧ{�g�P2ރ~ Ͷ[c����]80޻1˦�3��X�>8�z��Yn����V��`a4L�������/��
l�'�M���(|X�h�/q1lԠ�Ǖ$�C�m���K��s��+"0��E`���vy�*�
�@A�v��s�a�<�\�����!��0#��>-N�L@)�SR
����\p!�f�
���2�

�Fa�����@
@�۰���۱nP@˦� iyg��ן�h ��
-��˖#��*�|��"�6��fx�wϏX47��T,g�l+�����(�@v_
�c��*p�L���R���bv�;̎C�d�$�
.��!��D}��#���}O�
G��`v\C#��즠�1�
����+��'��p)P���DCH�=
+��pǮ�;�7�;��b�����Ŝ�
6C��K��e�g�Cf��%
wk`��
��\>�ܤ��.z�ͥ��Ms���ߜX���<2Vk$�M
�¶Cr����n�
e��ș�W�s���TM��?ܠm�+|��	>y5�[5�"ˮ�@Ս��VTQ��tdx���Ȫ,l!T��Mm
+����h����*
�	-W�"
	
+к&m=��H���ϝc��d�e���f��Ў���NO�����P� 7l:��$TN	wE�,�tBS@�=V���:0��}w�
L#�9�94�]`��Ncn��ڤ��H�'C8��Dn�)�!��Y�䷖����w�֘�
+"z�#*��[ ��.0(�$,�D�h�x�C
}��:Į�׌�v����n����Tu�6a��ٞ� q�9.��,"Y�#�^��+Z�	�my7rX�P��+Q(kA�
+��n+�5�of�O��RZ� �8�
-D��;f/����CX�$JN�*�Jx��9e!��_��Oi��h�b'�k+�89 љ��ᄎ$_�
���X<GAQi�9/	��
��L@у9]�
,'\A��!�[�
+endstream
+endobj
+2006 0 obj <<
+/Type /Page
+/Contents 2007 0 R
+/Resources 2005 0 R
+/MediaBox [0 0 612 792]
+/Parent 2003 0 R
+>> endobj
+2008 0 obj <<
+/D [2006 0 R /XYZ 86.4 726.045 null]
+>> endobj
+322 0 obj <<
+/D [2006 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2009 0 obj <<
+/D [2006 0 R /XYZ 86.4 647.14 null]
+>> endobj
+2010 0 obj <<
+/D [2006 0 R /XYZ 86.4 445.598 null]
+>> endobj
+2011 0 obj <<
+/D [2006 0 R /XYZ 86.4 194.201 null]
+>> endobj
+2005 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2016 0 obj <<
+/Length 3272      
+/Filter /FlateDecode
+>>
+stream
+xڭZ�s��_��V��`:y��}����ڗv:I&Ó(�JtI�.�_�],���}��� ����.-��⛋��_|�V�E�#���va
S�X$�H�x�Y���L\�����Z�Ӣ�\�e���h�*M��j�m�
+
+�.�X�Ն��پΛ�c����J�i�T��1WR�e�/~�������\p 1Z�$ͬ2����ǟ���|���L�ⓛ�[(�0�bqw�(8�]p��EwF�p�cӝ�I��
�|{���#�{�c
�
�0��a(-��.��{�M���H���a�v=8�o�
�<Z�D�T,�����o��74u8S%,�>pӢ./W"˵Iqɩu�V�dخ�����u�m�ۑ.bٓ��:bŲ�'���"��㻏�Zpu����-�M�{u	2}}�W{��l�.W
+������8�X������X5ҫ�!���
!�v�ilj�q )‰���N7�2'^�ԋ7��W3"�b6�-�O�Hs&E;o��
ꆶ��|hixqd��|p�qB*ø��V��uV���Wx�M��eS�
',���;8�
H}J���Ѷ��S�#`�tEh�h���Ț1K5X���~CD���Рg�?�C֟����gOʵ`Q�
	+��ٌ�p� �P�k�h�^y�4W!竬n�|�uLJ$1m��y|,�h�
4z� C��B� �`h͌��g��33��dc�h�:�R��I�Y
w"��9R�սw���\�x”�D��f�F����+%�H�J)�ۊ> (����P$��_d.�|�
��e��
J
��zy��p�z��}�V�V���!�S����t�С����ħY�K�C
���O���<��"Gz1	�vW��8�wQ�_^�׎,��|K��>�[����-}Pӫl��A��i�
;���?�!F\�0��^�!���N�D��	�6~��e�roN�o�!3R;Hw�7�zdauk
*4�n�
�� n$�W��.��m�ރ����Gw
+tA�&�e��^ѫ|
���
����3��)
:#�;���n�r��Ĝ��p�,S��_�u3�;�{]L*�:'@CU�
������1�d�"
+0�Y1 Sʃ��+�K��<�nj����D' QoDJEΈ�IF�0#��ވ���foD�R=
&#��hD�I���.�=�,�+O�q�� 8E�_�`^/ռ�QI
+�#z��h��<�
�#
+�Fs
+)���g��bs��K�<v��HnrX!`n��=y��Fgh�	d"�=ds�,]]HwF<a*$���N�ʄ�q?Dev�(�mcKo� !��QJa[���?�9A���8�P�h���r
	g�]��r�g,�?\ʘ���^���
+~PE�,�ʈi��]߾��nę@�0�v �}����r
(�o-��,�zi^ �F����?{@�NN�d}�
+�v�~�U��VV����Y������,�F���^�}N~��g�l0x���_e�8ˮ 
"ȭ�]�ooO(
��PiL��b�GD
�u�DC]�^�=����8����8�^ڮ�����`�\l��?E\����
�x��F[��P�
�B �jꜞ������a���q֟]��~k�t=-[����D\�Q�Ж#��=
����0�!ů�4�=��Μ �+7�]�`�N�Mi��`�ME�q_G9�
k@��ì(e�,��a��-b�e	�mC/��^�sBU at Zc��Io!�$}v�Yi�+��5�0�I:�7����SBx��=��U��b�P�<Pןt��jP���2�&a"��m��MkhV��fC�P,�:>�	��ar��!��Hd��Jb-Ўb�I����O�C�����7 &>[�a
x�rȳ���
Zf{�<M��2U'�_��_fŔz�9_��^��h� ˊ��9���8��a\��k)З{���J$6��V����w��y�@K�c�z�yo�&x���
v�
`|B���p��s�};g\�	p ��
�G*�2J���/��3�^'	X0�&u2��l�"c�_�e�����k5���A?3��΀���{t|\@�.��T����BX�}:�
S� ��"��Q����)X)@��=��#
16<@_m�Cv��Ow]��0Z��$�F`��jWY�����D�U��8 �ԩ$�ÂF
�
yb�E��ִA��4n�

�%h�리���A؄�R�U�1�lR
+�ޗjw����mU��<�
U-_XIx����b���������8
�m�ԩB��An@� �RC at 2�
�r�V��4ĖV	���rxm0�^��;M�X�p���)O%�׊э�Vr�eN�ka3��Z���!�|��Cݖ�Stθ�:mZ�ރ��`���y�%�q1�|!�N�Fhp�����'����n��E���������S��|����3m*݁��bP�¾�3:4 
q�g�i��mY�S���s2�݌�`��0�#�W�C@���0q)�}���sSGu�Y�U�
�bzFp��ڻ�
��&���+����'w�4N�\ŷ�c�&�F��8�۰Z�]�x
et������i��g�{����̳��/U����!&��w�ķB'����B����$L�xn\
+o|�f�Û7�wwc1�؞<?�s%�c��6�Ч�cM@��םf�̾��-!�=���~fO Y:�g�`��I����nN��!��DϜ�4�$	I��{$`Б>h��1������CM�?�^/�\I&u�9:!�!Ϣ�F�����mf��BJ�ϲ��LEI�����S�
d�e
�bZ\K9稇�N��V�:��kR�%l�|�O
H`�s
�%�+u�M�~}u�jϰik��M����I^�|k�%�X��Mj�`e��#��q��b�H��ĺ���׀O�7(p���bZl���>�۪�H
+����We��� 0�b����o���V43��J�'B��M�W讗�K�4�`P����&euE�
T'��
j��4#�U��,K�`*,�5�fp�X�ot�I�?����w~���䯀�~4�`��_gjw1�bg*�F�����������"j'畫��b���ITm����
+a���ĸ�7Գ����$�"�|&W<��
8��� ��)�au>I��Q�.�����D
r2��22�p�_^F6��~��5��Q��1��畸3`��P�x�r��l�B���I&.���_�#�H���jw逛t%N��+q��b*ѡ�uGs���gi��lˆs�瀟�CQ��
+endstream
+endobj
+2015 0 obj <<
+/Type /Page
+/Contents 2016 0 R
+/Resources 2014 0 R
+/MediaBox [0 0 612 792]
+/Parent 2003 0 R
+/Annots [ 2004 0 R 2012 0 R 2013 0 R ]
+>> endobj
+2004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.609 631.905 468.08 642.753]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+2012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.487 541.013 144.958 551.861]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+2013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.56 474.483 217.031 485.608]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+2017 0 obj <<
+/D [2015 0 R /XYZ 86.4 726.045 null]
+>> endobj
+326 0 obj <<
+/D [2015 0 R /XYZ 86.4 701.138 null]
+>> endobj
+330 0 obj <<
+/D [2015 0 R /XYZ 86.4 523.25 null]
+>> endobj
+334 0 obj <<
+/D [2015 0 R /XYZ 86.4 403.771 null]
+>> endobj
+2018 0 obj <<
+/D [2015 0 R /XYZ 86.4 311.671 null]
+>> endobj
+2014 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F48 982 0 R /F8 741 0 R /F14 1050 0 R /F16 729 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2021 0 obj <<
+/Length 2892      
+/Filter /FlateDecode
+>>
+stream
+x���r����S
+��tz_�� ��K^�JH�*%� π"J�� F4��y�`ǀQ�*��4��o�x����.����˷L.
2�����BK��$Y\oo##�+���ћ<ݿ_��fѫ�%����DW���!�o�FF���n����ɣ�d��E�1-�����>�>��/�]�����
'�
R�D ��b��x�/6���F��Ž۷[pf��vqu�

(���qA��(��4� a�Bj��bc `7GT��\7�k��j!
ADI��W�ϿK
+˟�}.����;�����gЏ�*��"C�*O‹x�u'/��-	bT���f�	*����~�����
+�&��#�0D��鋁*�01m"v��+�"�~��Wp,�u��&�1I��"i�=��$_g�]�
��woW�H]�&`[ZF7�����9,!�V%�z��>���\��,)��>�86I�~\
+�`�K��$<8���ŸFEym����?�ۣ;��� ��!��;�M�d�<��

kXd��G������z�8��o�[ϟүo��n�	X��D�	W��ǤO?'@?+��6�W�`�
k
�y���K���"o�0I���H�03�Qɞ��D*D4u��䕲�(#UT�E
���A���n�����S�j� G����C�Y�X��xT
�S�Mvg=d��]�|L�|����88(�H6��/^��'��!JMC	^�AE��`�tX: W H��@#8b��W��r
�:��Yo���Gu��s0?��d���	�Vj�:~�E�
�������2�6��0_e���L��w��`w#�͒_�I�G�z9
+������µ���;�֐�$D��v����
�����>-n�}@Tb��˻��u�X����ˠ2^��6�(�w:yn��͒Dǭ�	D�y��>f���?8�����J"�
+aj���(�=y��ƥ�����[Z�aN�L�R"Aj�7�C�)���
+{+Y�����#<U�#��uN�^�b��� *�oSŸ�8X��뷠0	��/Oz�A+�R�,.�.��v��V����VqHkk7ތ�����'N�.u������/��s��X�

�\I�׷`:I��)>�6
&������Z`��De(��;�
2ؚY����w���8�

V�����8�H�n*`��
+����sL�����;�n��z��Do�[u<L}�"5���d6�:QɃ5�Җ��{!
�

��鎰
D�9�

�l�՛/^^]u%��~��fC.T��E�d��i�!� ��<�8�|���p �U ���?
 ���Y�B1'!򵐾~��CJ?\�AZ��
g��g�9KHt{��	޽5�2��ξZ�K�z���dbT�
1��GՂ{��s��%��zZ�>�Si'�9pj�i�z�z,R���<��K�\Ȋ&
��WV:G�{@�7��t����߅�U��6��1��k���-W	2�| #�W�<�<m�s 
f�Bz�ÿ{M
�}��Y��8\�
:U\����om��M3��M�
Tg��%
�[
���3\*(R�
��)�
j!�#w�Z̀�T�&��JA������J���bm������-!-'��&�HVо
ȋ����  ��&5 ��EϞ=s+	@�
A%GLd
�!=cr��ؾ���xv�J̣" J>EEf at Z�H��X/I �+s���S� ���H#@V:]�\����v2��S�Э JA�amΩ���#�@�q7����j�Os(.“x���ߛ��oE�]�ʣ��3�G����}qٟ�Wv�.q
3{�
���D�N#�6;
��v8Sv�=�m��"���!1Ң
+�~3�F�!p�p@T�IW�We���׸���ub)��ى3�6�� ֧�6L��a��	EX���6L+pZ|��
���*� � (�g0`|nà&�l�
9=��
XF
^9Nǣ���
+�&������Z<��<,�
n4dB�7\=6�!�L2CK��c���
p�iE�YT'��A���C�����z�W���:Lvܣ8�i�q	���?�	��"���	
aê~�|�@�C
��4�aTB�:K`'Z�?�;�a�
+�_��0�
�>�������b��X9��d��B����͞�wl-�q�@Pe�](���l��xY�S��݃��r�����U�V�jK5�T�u
o��
8���
7]��*_������mVk?���x!��
ڧ�H@�\AT3�e�C�z��󸐙�oK��M[��P��2m���i�d'V�����(��kNY�
+*����u����
;-�ꋜ"�O(Ο!@9@�<c�@!���:GH���g��P
%�ذ�mvԇ�2d?�t�!
+IE��/PƑ��p@)�&
�@�
-��2P��,�@�u��ہ”�$�BΣ �I��<a�a��������-8
��,��h[p���6���:�/��7�oC���>^�2��|��Q_l(�nt�@͉g��%��΁4ȴ��ԐhhD��K|�I���
L�!
��
a� (>S�3�R8M�_l��W
�F���P$yW� h��B�_�E�
+��s�J:��L��t˪��
ל������_�?00�q�@�/�Z��`ѫ"@�N�4�]ާۭ��RE���xW~;�M����y��8��]��E���V3�6K(E\�	}4�H]�A��D��K1��+��-x�b�f������S���������O���
���FC�H����H
^�>4��
~�:P��y�$���DՃ���	u�'4��4�!�@�7yx
+[�ի>|i�}k;֨����
DY�
oau���܅���.��ў?�H���9V�%Q�
��cG7��l����[v����耚@�'��C�/���k�
���,����h�?��_�����?9
+endstream
+endobj
+2020 0 obj <<
+/Type /Page
+/Contents 2021 0 R
+/Resources 2019 0 R
+/MediaBox [0 0 612 792]
+/Parent 2003 0 R
+>> endobj
+2022 0 obj <<
+/D [2020 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2023 0 obj <<
+/D [2020 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2024 0 obj <<
+/D [2020 0 R /XYZ 86.4 397.597 null]
+>> endobj
+2025 0 obj <<
+/D [2020 0 R /XYZ 86.4 128.637 null]
+>> endobj
+2019 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2032 0 obj <<
+/Length 3688      
+/Filter /FlateDecode
+>>
+stream
+x��io�6���|ۙ�È���.��I�6u��Y`�
eFc
�+�&����{$us.[E��$��{|�A��Q0����ۋo�E$RL�n�P1�,"����|��X6��?�I6����dJ���eb��ͮH�In��
o�<L8��ܾɓu�间��G;+^���<����,
Gz����on/>_P at 1�%IB�F��ů��9��~
��3o5<"
�����b�ܪ[�BXv�"J�Vv���_~��m��a�L�-���,�I�E9'K�e�M��Rv�\�N�B�q��L�
�,�-�����}�nҕ��
{}�Og���}_�i$2�k`�*.���
�u���.ɋdN��TH��
M)%�t�5������oh�ʝ��FDJ]�_!��
��r�0„�?��}�v�J�0 ��$�2�r
���I�N���#�y��U_.c
B���l��(_�ń�wK;6��{��h
�=K����� B�avFU[ �zo�|�@��>	(�SM#��9�4�V�'��ɧ!�2]{�D%=h
$�|���IfɰY�!H�#
+d�H'���]I�@$ݦ
���/�U_�x)x�uC��p5�-����/�iɬ0�����~� �C����,���
Q�@�)Nt��2��6X-Q�I��Q��v@�T�<t8�v�"�桙�(p���1�#��0�s����͕ B�6��
o���u�U�H�b�Ѓ΂��r}��P
�90 �r��_��=
+qJx��V̐�F���ʋ�|��%�)�t���:�}���h��uWlwCƔ5�8�o㙻]�8�w���²�F{'SN	�h���j[s8E��`�7�y��K�5�镀%��-8h�@�$�I��/F]J�2���?�u
+:d�_+�狮��!	
�
��2��S��ȋ�R`�<� �Ee��._}�7`6.?=���Z)dCg�m]'�e}y�'�!�
�M#��Q P�@��
�>G��Ƴ�RT2
�����onn��A�,
��⹟��D�cN�.�ؿu���bmKrx�����:,����=@CNd@
+q��H���ûw>�O�q�@L��0�hQ��e����M at +Uy@�/# љG+ޗ��h
���Q�� ��
����p���X�4��'L
�� 0C0�AԆy����'�Q^�ҷ��8˚l�7�i&c8��y��v
V������
R�c3H�U� ����߾�<�� -��	��wՖL��B��{��O z�@����
�Q��C��������i�:�?L����
+1��<�×k��r�
t at XϺ����s�q�Ah߃I-��f��.9�T���'3�G�0JG1�8I� Z2�	�ʱ@K�;w
$d'R��Cz�.�[��j�o|	�`��R��D!��I�/_�4w
+60�l�U�h�u��v"�N�{�D��> �|���L�"" -E�	��|��W���
�{An-���oa�6'cV׵�`�&Hu�PU��(0㟶X�ê-Hא3����h��ÄS�@�FKMX �UX��b��	0��2
�
+�1O6%�R,�8�E�ؽ4�0$���}kSa�fh��%`
+?6=�,@��]>��Ԫ�bFM��9��l�*�H��ΓE�[^��5R`��CNih�|�6��{��Eq3.`�t���o�l$�76a��OVE	�f.v��?��_*�es��[IF�����b�
�$	�ZC
^�y�v`j�xc� ��I�/8��MC��'[@E;!�l��ºt��ꩄ�4?^=e��^6
+�Fm2g��I>�R��y֕�8]�3��*F���w�ʉ��Rg��l���L�f�F�LU��q�T����e�@B2#� �	��k��B

K�>�Ʈ���,^�Dl$���1�������j˄��lǹ��(�|�
o�
Vt�
�?�K,-��g�!�x>+<a�?mo��-F���1��[TL,
~s�AA<���
TfF�r�2��+
+U����Y��Ʃ��
�f����`	�
��{Ƶ��
[M)&�W�7]�c�
fW�j[����2v�]WtR�*����v��:�v��$��JM&qL↉�����U]��,�
鳪�_6`i��}uZ!M�e�j�9��Mi߼� ��m�a���Ս?�Ҳsޟ��>*"�['��)��}ē����ea8��ek�䆆�Ґ����ڐggY��.>���ݭS)|n�
+�!
<�M��W���:������q�:u�Oe���UX���$	5�~���O��-r.�A^+_�6I�U�?�����\ǤL[�r�ك�-���������
h�ެ�>9��R|�ڳ
+�XZm률�4ʙT
����bPj/��.��
98h�
+�������}��nV�2_~���X\\��9�U 6B��?�Z�`	)�YJq���ti�q��q�5L��n�}���|�p��(
�vfo��ӛ���J��~���!�	�T	q$:f
↿ܲq����f��cw�
��ɰ�`_�
ea$k
1Ro�<�Kh9�}�5ŇE�]UL���vt�
S��1u�"�C��
j�s���&������b�����X�����
+���0�)��b6lI�n1��
���
*D����
+R/=�#Z�

�
�$Z=Au��T'`&Jm��C�;٧7L��i[o���־
�)
��G��"
+�:�k
Qa����T.��x5%�@�p8��Z��
��i'rz\�peX��\
�1�w�)�t�V�ޘ

�I^��"e�gk���S��ٟwqU)���c
LjF<�4�B%]�U"��q�]��x���AD,:�����@S�Tюn
$�{̀:S�ٟ� �D
�F����Qy�
�tz�3���Sj�k��s"��9)L���s"
�l6Lq��%����<e�+�7�����j_ޗ�hwɤ;����b�\>�e���5�
!`�Y� 
�X��
+�N�
�uBZ@{'K�!����6GQ'`���)��	&!?�%Z�8�H��t��=v!�}�S
‘�D�xV��Fik1���RT��T�����`
;�A�����L�)�T�h�a,U�����
�Y���?ܞl^��~�+��qѲ��F�H��"Ю	���Z�f�b���H�^�JAfw[�c�:�yZ!&�hj���6Kfx��:�����
�\Pe*�
�&��G���:���dȚ�:��ZE%+%D�!p�n�|�Hh^�W3X�w/�Vlt����g)�N����⽞
+�
�$)�Z-[�r�7
n�/m��E�?��ּl17�זg�� *��m��Cq,��cV�P��:Ұ��sC)Z�:Q��@���
�mb�?KU����"���X�H�v�6���,��
@h�  ���� Ή��8\�����>�'@��z�0�X}d�R �������'������L'y޹�-A�����i(Z)i"x��[�� �"�D�
+!��q6�>c5
m�C0��t���n3s�援�C";WIqoi��g��0󲴉Z����?"
��L}>qJ�61�%e��̿��h?φ���� ��l�l�M���b�N7Vdq��=����p�r��T�Y@���{�: %c��}����~n�
��M	�*D[!��P�%�1�����\��'�L�JV�$�7�%�˸��@|m)p?������Mtk>���+��q~>�Jv7���Y}6@/�9?�kw����?��
+endstream
+endobj
+2031 0 obj <<
+/Type /Page
+/Contents 2032 0 R
+/Resources 2030 0 R
+/MediaBox [0 0 612 792]
+/Parent 2003 0 R
+/Annots [ 2026 0 R 2027 0 R 2028 0 R 2029 0 R ]
+>> endobj
+2026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [325.744 442.819 340.466 453.667]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.1) >>
+>> endobj
+2027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.668 309.146 445.391 321.101]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+2028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [348.862 283.756 363.585 295.711]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+2029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [304.252 246.411 318.974 258.366]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+2033 0 obj <<
+/D [2031 0 R /XYZ 86.4 726.045 null]
+>> endobj
+338 0 obj <<
+/D [2031 0 R /XYZ 86.4 488.107 null]
+>> endobj
+2034 0 obj <<
+/D [2031 0 R /XYZ 86.4 420.298 null]
+>> endobj
+959 0 obj <<
+/D [2031 0 R /XYZ 253.378 134.976 null]
+>> endobj
+2030 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F11 787 0 R /F10 1095 0 R /F38 785 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2039 0 obj <<
+/Length 3171      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs��~ׯ�#��&�sl�Tim9孵������>�$$�BZ ����9p�,�
	
=���=�f��h��������˙!F29���iI�L1C$������ыs1���l{�8��߾^p6�X������
w�fa�</
pBR�pP̯�m�U����G7�b���
���_�8��>���΢
;��r�ܜ��k4[��f�F�
��LpC\�gWg?�E��>�(""fSt(L1�֔:bcf�uħh�l�x
+V�B��k��j&
%TI'߷�/��
+���wiu�����Z
+{{�zb��e$�"��m*�o)R�D2�ȫd��[���p�;�f��-�,��tC9��Q�J���Ljs���f�
N(�53C��f(�ad�n^�=���z�O��.�$_`[�/=F�$��D�s�<��i�,��*˷�wg?�S*���.?3��f�]�Y��R|KD8n9��E"-��=����2�%�"-݊UXz��<-��ҏ��˫,�.��Wn����Jo�]��X&e��@�A9�o`���;����%�s��u�(�2[풵��o�_4��&� ��i��.A��nNR��U����y�n���~W�+7�#c�F�a�Sp8Qk�Z0�f�P�"�fa
��
,�P;
K�(nw���We煣
g�#�$���<��X��m<b���*��a�#�ˉV��~�A�֩�4)v���9e9��3'���7&4ԣ�`Y~X���(���y��Md��u����T�;�R�Dus´�{B&�'"P�S��m�;��ehWh̨Q�_�[�y��N��������O<)7�l [...]
x�+1��U�'��3V�ڷ��:�ݹKb1#����@pD���Ƭs<`6Kӭ{��������U�M�]�
Z��OS�]��W��
g�6�c '��]
+������b�)g�%
A���;�=
	 �C��d�Ob4� (�n��V��'s�I�t�6q9\�R��7�����p����x-�
9��Q>
+x���F,SAu��
N�zV:���4@��SB
;��
�Oċ��cH\�$�#)
+��W_�����p�8�:'�\�-���A2��?|x��
�e-�+��-�iY����� ߪ�p�:���e� �J}Y1j����廱"��8�'Y�0Hl�E����	� ,����3�\��Uf)20�X��	+�"�e�#�H�h�c8�z֐��\�n4@�����
5�J?��`�ҧ10 k/��^��v�E��u}�Ϗ�G[��6�S�\�%`��ᑟ����� B
�{�+���UZ������ތ��8��݆*=T���v�ߣ R�@ox]7b^DɚP�(I�	Y��|���98x C6W���
��M^l���G��
+O��~��
�mA<� Oxt��=b�M�
jؐ+8 
����^/��}����?���
<r�;��a�Y�w�j�Di9_�9ݮ�5-;"��w��P�Qo5�T����f����U/�9���lbLפ��۔l0�G"
��F�t��1�
�7=bo-
�"�6�zq��������A��Am+>ZW�x����ZF�F�)!qz�y�|���
�t]b�PVI�bKI�)���'�u�-Y�a��t�Z�7ɲr=�x\���tu8vt*�@(wq�
+X��aث@�
+`��	xj5�^�C�Ň�L�n��q0,�T��Ӕ��G�<7n4b�x�3h�5h�t�:j�1���f���t�;w�l���
0q��ɧ�o�u+K<MHG���4�!ԯ�X�[�a?
*Yp�z�� �p�[�䡵�J�$[��)�I��a+
�_��Uz�����g4��(����	/ǒ%Q�L6Z�1�8�L0N��� ԝD
+iI1�vZ:���5R	���/])�'�
��N�dϡ��8�l�� ����8�4���s
]
:K� i9�L��ˢx�O�SI���� ���B�>H�JeN}�䤰�
��
c�0\�@���bȀ��.�9RZ�|{u��(ק�@r��v

Q=<7j�d����S�VG�"s��E�����E�v�i��a�7�D����E 
+����^���P�

o
����,���>�\BQ�����NY�y��
l�g
(ʈ���S���d;�}c�)z�3|�W

w���2b��M�
���� ��l�\�V<�o��+p�:]�x��]B�w�
x�AI��^��}�oa���}��ŏWc
K{:l�n{��!��e7� K
L�Y�4 �Sþ5���F5���DA�Szl�CӲ��>�7���Q��>�G̀I�O"&�gᳬ��	��
�Κ:�Px��
jpc�~

��  v��
:��5�����V[�j�~v*�8��/�e��[�q��lO����Ĕ?���Iq�8���\
+�m�MڻM{�}|��'�	Hg�
׿ō�3ܼ���W����8��1�2t&���N�
�u��Tp�w�d;�ð̓M�O�y��]��%v��'�!�:N��hy�S��_"v��n���I��yn?K쉬{Mk�C�s.��������]y���!8��VV�,�5;3�^�K:(�`�,��6��z;`��Uў"�ڐ�9R/���C�	߼� Ǣ4
�k��]S��=�u�~�d�N9#�*eO߁j�����`?I
 ��(�%_���u�}k۸��N5d(�;�R�����/��U�B��ѕ��/Z�
4���T>���c��iEl�/˼8�!��E��r&�"$��͈���r4�D�S]	�ƑOZ�qO�[����p�p3- �	v�4���~lۍ���9"A߆��?>�	���6�dP�ہ\Y���������O X�m�����u7�Ϟ�����십q&}�3�3�ێ߰���s�y�a�M���H|ýܰ���3�_��x�o�γ"��m�) �����
���S� T�Q��:�v�>
��1�����������Y̓6
�㽃�3�v|�x='�����qgZ
+endstream
+endobj
+2038 0 obj <<
+/Type /Page
+/Contents 2039 0 R
+/Resources 2037 0 R
+/MediaBox [0 0 612 792]
+/Parent 2003 0 R
+/Annots [ 2035 0 R ]
+>> endobj
+2035 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.842 435.607 427.565 446.456]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.5) >>
+>> endobj
+2040 0 obj <<
+/D [2038 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2041 0 obj <<
+/D [2038 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2042 0 obj <<
+/D [2038 0 R /XYZ 86.4 404.088 null]
+>> endobj
+2043 0 obj <<
+/D [2038 0 R /XYZ 86.4 197.19 null]
+>> endobj
+2037 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2046 0 obj <<
+/Length 2520      
+/Filter /FlateDecode
+>>
+stream
+x��ZK������)!S�d�8��#�TvI늸�
d �B�6 ���ק{f �E�B�T�
	̳��~΀�
�\����O��"i��ۻ�h"��GD
�n��
E�r%�X|(�b��w��-�O��5��J��towy�~Z
+�����)��L��1���ɍ��x�T�0�I��"��?�~wu}{��+$Ҁ�$)b�6���?�`
=����?�q�@��px�뫿]��&`�DJ�G
1�B��HB��q����Js 

��{8T�{q̹`�y校�
��Ac�
��3
V�.xkE��4�2˭�QbI���#}�f��"?d�����<�G
�
+�5����}�>Ƕ�,��:�k-��J�*��Qq��
Hm�{\�H/�=�����q�I\k��w��5�.��N��M��a6�xB6
�����aH�k���{�&�����H����[�3��o� E�ͨxN�{�z��\�0�7���ov���6)7E�����b�Tq��U�=ME���VZ�������L, �ah*I$Ĕa0��fG�謠�(P'Z��5`4'Tk���*��0�Є��"Zy������$�P�9��'��c�+�|pʉ��'�'
\@N/ЗE�M��#TaD�F�
+]_[zЌ��ǎ����˕���7*����6
�D0EB�(@�K�0�o�$2�b4�2�O�tt�.�['���
��uV�@�
l0$��B�Xŷ��o  k��EE���Y�s�P�8(@djѝT�.=�I�"Y�r�t�UnW���3
��덳p#��p �zRޛ��/肀y at F�]OT$e�=X�,D�*�Jd�5���{�����>�TVeg���lTw���J�
��b�Kt�iK�ۥ
ݙP�3:5���#�
b���<�:]��e����r��؅�<u���QH
!�"�v)֎�!�m�QvK�ɈfqA(m��y���������d�
���|Ě
zh/���&(51\�@�������4���H��������F�������mX��^�h�0����23`
+��t���>��y�K����
����
U���Waa�㗇�K�e[�h-�
+��du
3�E�rب���!�
B��^��*��jZ�PjD���<���lm'�+)���ëW����
+9�g�����"ߐz�lm
���v8����{	y�x���f����a�{����G��a�7G��i�9��Et������ߍljQ�Ͳ)�.ZD�Mo>�};���.��󘞃g�a4z��t�o��\p�Fv��g\��1ޱ�`
mȐ�����ZB�p��r����Sv=���)IZ͢b���>��~d��
�Y�4�Hu�\_�L��L4�ˮVuw:�
�p���}B�W
�
�Ż�_��T�$��S�Eu�ĔO�9�$�*£v��Jv1�=]'�OF_�@8��yū,M�X'���l��(#稓:�t�$�����u�f�NO�Xԭ�ڒ��F�$�E
�$ܬ�w
����
H�u.h'�ɇ2)~�;��K� �r:�Rá��m
�۹��j�›t��$���ߦ�.�"��J�?<9N�9�ϖ���h�.���Q^��e� ��h���K�跪�˫6g��v��Mt�R��Z�iN4��Z*�[K��T7
+�D�4
�o{
�G˴o�_yx��[`�
36ƻ�>fP�B���o�/R X�*3�?�&$�v(� A2��"���B��
+p�M}��� gࢮ ;\��U�\ЏY��P'�S�
{�
+���S؊6\&y'���UR���СŷQ��䇖Q﫡#�6ERgxه�yf�v߹�.۴�;y,��X�m��Ke�e,����
n���⭽�D�@��:!�k�v����2>��$Y�aq2In��D'
���3hs�b�K����+)�
+�ض
3Ds)ߦ���B^�A��f�$�
�H��,bV�?Sn;Z�ҹ�ǻ*�$��c�
ߺ�V���(�k2��z 2��J9*�x�
iPT���
h����~&e���+
3	D�P��/�����
+��(L}����!� �^�G7��Am3�«�س���`��,�H��h�rL�r������\�@�2N�Qi��ƒ����A�:��n ��'P��u�][DRy]�'���wq�;I9�eL���c&�Eq
D�r�@9��P���qP�&&:�Tvif)���я������p��5��= �d��xǨ�T��i���H�Hg3�@��Y@�d�%w
e�|�f�l?���R�ƞ�������r���
�Q?G��#
k�u
+��)b 唤|"�!�ר��
�j"I�?c���$l�T��:@ZGOE�	�
���Q8ڬ
� ����LAr6CDH9�Q@I�T4�M�V���}i��
+TePX��g��¿��Qᷩ�x�K&:�o��	�&f��2��,t
��A�䶈���?^�<�/#vT�mjO�U�=>��&h�P�b*$��cdSz��4J���
��c�x.6\F�("m�[�4p<#Φd
+1�D���Z���3���
+endstream
+endobj
+2045 0 obj <<
+/Type /Page
+/Contents 2046 0 R
+/Resources 2044 0 R
+/MediaBox [0 0 612 792]
+/Parent 2050 0 R
+/Annots [ 2036 0 R ]
+>> endobj
+2036 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [273.135 635.825 287.858 646.673]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+2047 0 obj <<
+/D [2045 0 R /XYZ 86.4 726.045 null]
+>> endobj
+342 0 obj <<
+/D [2045 0 R /XYZ 86.4 701.138 null]
+>> endobj
+346 0 obj <<
+/D [2045 0 R /XYZ 86.4 681.565 null]
+>> endobj
+2048 0 obj <<
+/D [2045 0 R /XYZ 86.4 608.601 null]
+>> endobj
+2049 0 obj <<
+/D [2045 0 R /XYZ 86.4 425.937 null]
+>> endobj
+960 0 obj <<
+/D [2045 0 R /XYZ 250.334 194.752 null]
+>> endobj
+2044 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2056 0 obj <<
+/Length 2417      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs����W�"S�ɼg��
[vy��VL���L�*��!G����̐x�$ػv�"���{��~~�]�����?/N����Y�I��b;�����.6�Os��bIE����ӫŒi6�z�����W��6��7�@γ��Y�s��WQZ�e|���]y���}!����_N�.N�sB`kxF�V�\��7'�~dz
��e�
��K��f�Y�(|Kf���`gZWƈ
:&�0�c;I-	"fRkD���)�R:5�\7�
�2 �(i~���mT�Ϋ��<����M'�Pʐb�	[��!�B�֏�7�Fw}F*�X�^�IRo�?�AAĨ�;��m�W	*�?ۏ�����7a�$�\�."���,�;��'Ę9��A7��OvoIWQ�u�!��X����!��ْ(�0��^G�:�o�8K[��>-	�d~q
App:�V�گ�l�P\
>��{"�#��̣����($��kNTϫ���b	���ȶve�՗�ab�Gy^����aK��?`HSA�Vw�GF1�q��R�蹷w�BBB��ω��K{�:4+��'��q]�y�Am���['s�_U7Qm|Y���Ń~I$G��3Q��z�_� �i-
+z�
q@���ߟ��_��Qܯ���u��}����6�
�m
t[�"��?�Ȋ"�2�0�e{�jŀ�B��x����{+��wB���h,�,��
+!)|�HRһ8
AP@�1&Y�rY��}{8�j���BN�!���y�<yk?}�Tm���J]'"@8Pm�Xǻ�$�aRE�4$0vYV凞�z'�3�J�����aoZi,�_�LC�I�v.3�.
+kݸ�Xe��
ۿ�;���j���� ��Fl�O96��(•U��|��l��Q.tp��ݹeu���1�*oܪlfRs�6w­�A�~䎼���(�U����\� ��j��8t�	��$Ё(A\r�p�a@�fH`2�R�{$4-���ߏ�d��}>��
rtH�
J�XY�
�ͩ~�r
W�m��+�肄Bv�;���H��9x��A�P�Vt��sh�1��	�����
+�^k�����J#��$:5A
m����t U�����Y��ef18$;�
�B;����>�rB���tSx,L���*B%$-�Θ�ԩnyaRi��Z����U
�
�F�����c��^��:I5������K�*�]�2=#�8�6�U�,�}�(�/�uڳ��j���^��gw�c��u��
�j��f*\QW�8�b�����M<t�|���`�k�?�U��\ �ˮ��!o�2�r���W>�;�Q$;V�Q�X�@��,f�5/v��
��DPD0'A���� ���	���~��4�eg����j��
�m��lؐ΂=L��Cm��BR<h��@��"Y`
�߳�>U��XQR����������_/W}��̲kKùȒ��
k�n��ڶ�.\�.�;��*|h������F)�(G(�I��y
�|=ĠpϵV��8]e�
DSu;H�h����.
�<�Sx
�

+
+:��	�
�3��'�]��--)&m��J�E���
+y���8�Bj���r(���9�\5R� ���0�k8a�P�y Z;���P`s����6!���F�q*���צrc��ʹ�\��	`��*	���fP8�H�):8#I����q<���0V
C���)��|�5�`G8�)Q�fU�y6U���B�h`/d��%[�
��M�
�(�d�>:.��z�@���d�J
��R�mɖ	��dKˊ�la�"�&![�(�
�Z�P鸖���j�����������f�&����ʭ]y
})MSY?rB�c�%�Hi�7���iFJ�-L��
����_�AZ
�V��F�-�࿂|}b ����@�ge�@�w�Z�Ү�X]��}{����@g��
蹢���-�xw�7��f�|��W�R��]��;�����
�
L����Rc��e��xK7I,2Lb
TBUǣ$��#���O?'x3�
+�|��JWeXC��{��.P�4��#0�dP3!|b*��� A5>0��6��s�N+ZV4���*�
�b����� �����
E���$�i����#H���#�C$���:�
G�z��QRg
H}��e.�V=
��
d����?��z�2�4�̣$����lF�2.��$
v-�n�X��Kih^�Yu�G��F�h��(�^�����xlړ�kKr�b��̣"�Tv$=�[ta��E�.���w������no��7=M��S0�>�$�􈷈z�C���ƿ���,��+W_��i2���'�7� �Co�P��{_��+� 1����&� 'P����oK>��6m����c�fa��4�D�B
����5�W���4���\�BF
+endstream
+endobj
+2055 0 obj <<
+/Type /Page
+/Contents 2056 0 R
+/Resources 2054 0 R
+/MediaBox [0 0 612 792]
+/Parent 2050 0 R
+/Annots [ 2051 0 R 2052 0 R ]
+>> endobj
+2051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.451 517.145 341.923 529.1]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.6) >>
+>> endobj
+2052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.138 287.341 193.609 299.296]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+2057 0 obj <<
+/D [2055 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2058 0 obj <<
+/D [2055 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2059 0 obj <<
+/D [2055 0 R /XYZ 86.4 485.586 null]
+>> endobj
+2060 0 obj <<
+/D [2055 0 R /XYZ 86.4 267.183 null]
+>> endobj
+2054 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2065 0 obj <<
+/Length 2374      
+/Filter /FlateDecode
+>>
+stream
+x��ZKsܸ��W�Ie�&��c�.o�*��=8{�G���h�
9ʯO7 r���8�]��C���F�����UD�w'>?��[���Ě���2�����h�����B�\	+˴Xm��v�b���6���|_e����.�/$^|]
+�H�
��LweVe�Y�����d�l��
^f�(�`�-:������'
�H#V�I+u��9���.��w%"��W7�&�"&
�����'4�ؗC)��O�a�aY#�#A�q��"�S2`�$�	��Ҷ�
cM�cF�����߼z�Vk��iQ��fW�U9��
Q�?~=G�����8������FI����8������� �+x�F_n���Jq����s�ߩ��E2�`���� j�"A���=�eL@��-7�������W7�
+�cϼ����£�E�uvrޤ�ȾTY��}Z1����R��xq��m�Q�	2ג׎;2��0j���~�H�}�+���V��On1?�fZ��x�u��5���߻��tS�E��T�0
�_k¨�
Fb��6��HwA�rQe7)Y�����E��4<�w�t�})rԱ $*����0���X�xNAs,j�
Ch�1},���1L�E��
��!0l��Պ�eXO���*��\�'�����3�h	2
���n�J�72ݒtŭ���Ъj����Mpq�y�A�8�fLCNHH39E�sҌiCb���l�l"�8%�4�X�������1�yv�������l�%�y�q��g�ui"+?,��v�4Ԋ��
��HrA(mƁ�yq��~ކ�F�� S�	UN#��P�k`�p���r� 6Qp6�N����1M��#(yI�Fڿ9,Q
�]�Y�JN��]���ZA�#�
�����5P0��>����s�az���
��`�~W�E�ݧ�¢(�u���7��),T?۩��h�H��
���w�d�]c�45M�쪑��tG�5����]Z���Få��p
G8e%@*��PQ>�>�~}�^O%�ŵ�ͺ�gH���}����������GIp�g��4,y��lҲ��o�wu����
b��bʹ�
����:����F�ZAe�(�X��ҳ��?U� �x~~=�P���'�*�P���gZ�u�kE� [...]
+1��p�a ���<�ˈFc	�9͠�2�c�5�OϦ� :&��z�
+���S�c��R�Bc<���d;x-�f�N/��Ca�5s	�,�Ҳ_Z�6��Q��.�7�r_U��~�
+C���G��Y�]���f�LKF��H�
(�v��$�UF
��
+�M�=t���}�__Uq����o���6ۭ���{H��Hm��'��6_��
�&�2VP�%�C�
� �P;q"�=
E�R���k�a�7�5����=� ЪS���
 ���� 'Lwƃ��XQ
3�
@�U��U��K��E��k�p�S�&�6:$Yy��!���]Ώ���.:- �o� e�	�1L��7�m�d�+�7��R1G�f�?(�Bg�B�I댜��n�]��Q~�-=6�c\�E�Ś
�3G��i�C�%0Mv
�3�2��&�M���@Ȅ�%�A���0A�2`�,ۄ(
+���P�`G�e�3XQ3���4&(���YB
D�X�����`G�ρ
��٠�Ġc���brQ?�v�"�{3��1Dp�C��r�*(އ��

c
��8�6t��Y�IY�s
��j#��:=�J a�ډ�4p����w�N?���v�}y���)�+?��ww+�MY`�mV���=��P�J at j
+ɺM:��2��<�E��6n�ב�^	��4��2��NŽ�v�
�v��	���sv��Sspvq����[�����$ێw���O�Q�+  ��#�2M������&qo�r��A80F�
�9<'�
$/�jǮ.y�\�����a�c��x�.��>0!��=�M=�3�=
�V^�
�!8{s�u4ZD�D<o���ݳ��I�S��O�\���&t���}��5KLBa�NP}���_=�s ��?0��(��������}:OxZa��c<8��	��Je@�]~�IR\���� `�� |�
 �&�,�(�)���`1�Y;��P���3�
��۲���P���
�4�Ϭz.9k�
D5�l��ϡ3p��������ِ����]��
��p�p&`���o��
�e��,Ks;��L��
�Z���U2��>�)!�0��?@���c�1����~ZF����9N��S*7
���(��D=�F��@�4~ ���_�L�	ݬ���x��
���!�G�6{Ay���tz�
���@�u��%�aY�#5��de�mB-I�_�����_���
�������4�p�S��N��_�� [�
+endstream
+endobj
+2064 0 obj <<
+/Type /Page
+/Contents 2065 0 R
+/Resources 2063 0 R
+/MediaBox [0 0 612 792]
+/Parent 2050 0 R
+/Annots [ 2053 0 R 2061 0 R 2062 0 R ]
+>> endobj
+2053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.99 642.607 394.712 654.562]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+2061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.138 345.767 193.609 357.722]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+2062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.138 153.78 193.609 165.736]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+2066 0 obj <<
+/D [2064 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2067 0 obj <<
+/D [2064 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2068 0 obj <<
+/D [2064 0 R /XYZ 86.4 520.355 null]
+>> endobj
+2069 0 obj <<
+/D [2064 0 R /XYZ 86.4 329.099 null]
+>> endobj
+2070 0 obj <<
+/D [2064 0 R /XYZ 86.4 137.112 null]
+>> endobj
+2063 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F10 1095 0 R /F16 729 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2076 0 obj <<
+/Length 3466      
+/Filter /FlateDecode
+>>
+stream
+x��[Y���~�_�G�ǘp�U�u8�7�Wʋ�JA$��
+HP (y���=nB\-�'�h��`��ϯ�G��n.������ׯ�Z�$VL-�l�"b�YL��7�Ż��l����:x[e���G<�~��,xo�[;�-J��z��(?ᄤ��n�}���Ǭ��;��>��
�������՛�WH
ԓ"I$�b��z�{����!�q��d���DŽ�S�����*tG
�GQ�Th�.TL	�ʞr�_o�,�t���~��P2J	/���2�Ƀ�9���s��%�
�}m'w�
+
+g�)��`�dQp�-��/W�o�,*��b�&�<ۧ�^{��?M˻t�N�
<ձL+�;�bEeL�XÃ"L
+Kïi},��ÏK)�$?��߭do����/�\�	y��͓�1C� L�.��ik<�Ò`�p���V��'N%���U�W�>�L�f����y at i�
�]����S%H(�BɈD*�SdN�a�U�	�U�Ј�����o_�xu{;��B0qw�Fnš�
+�?w�c} �
k��� 
_�T+�[���V
��|u\�QGӪ�
�����5�e#�&�����P��E!�V�"\����vӟ^�4�iĉ
�E6g�x�����?��
<_
���:�B"t���&����p��O��
+���إ�	C�BC�6[dƯ�i���@�2W͇�CƄ$f��k���UL��b<뺈��J�ŗ�L�#�4�Ď%"�{;޾���
+
�o����1�l����|��
��$6fWv���y�}Q;���$���n�_c�(S���_��9z%aD�T���]‚�m�
ݕ�
�$_����/�c�/3�
A�q��w�X�BT�"�u��*l�K�$����6<�)@p�N�>��gn&X�+�{[
�;��!�v��8�_�Z[^2��
�?'�uQC�l�Qa��?�����}SS��2"[$��x|�b�h�!d1�q�b% "F�s)��38-\�y_' \6>�8�r#��"L��>Rm�</p֧��7'P���� �Ϙe�Z��[A��B��CϬ��鞲Kp>:�
)Q��oߧ5��^�j���0�L
Oǐ���_`Ȍ
x������d��5k�+
+&.{�� �o�in�RO3��_"	�b�X��39��0���@0{f	{x�
'�הh����ׂĐd��/6~������&qv���
����Ѥ�:7�� O
҆�i�.3ㅇ���:�%.�Sk�v���6*!;���
0�s
7�ML�kᜉF�\��6��[��^^�8��n���}�1h��&� J�3<�D�5m6�
™G���Y�>�J�
2����q��U?�=�j'M��%�J^��JB�
�<
���, ���j�{ C<b�p
+�
+
�M��q
v��
�p�-J�C��}׸�?�o��������*�	S��ixS��(7Kq��1'1���=Fb7S1����G`!��T�#�\�	5>JvՄj�hd�E��F��ऽ�[�����؞�cT4y�̈́�P���Ŧ�H|e�5� �
��EM���˜���b����}D����9 �y�&ev��N[z���q��M��et�b�����#4��=Ÿ�y�nn�2�uHx�)X��YX.T��?+�ӕ�
B�HH/x�����B(�O��!$�����,:ݸ*�L�)"b���yq2����XISzF�{�"fo��1�e�//b��I}�30�����%LzF	��YŒ��t�&�h��a�R*<��y�=]����ʘ
+��G�
_ ���0ǝ�
���RR �ۆ�}R�Λk���m���P���X�r�g}G
����	y{x�KI�A�Ύ���6�ޣ����o�LEU�K�L�B�hb=ʠ!��e�l\�zJ�:)�D�B�MQ�Ր �t\C���m):�E#d��Q�
{ ���F��
+�_a
+�L.���QG�i��)�xژTS��e�=
u�G!ᣂ���
+[J�
��o\qV am��X���]`5�z�|b�3}��"�ypR��
���
4M�+p��l4�D!�j"%� ���!{��B�~]�1O��f�t,�5s�S%(X1~	�1*�X�Mqvۺ�	�Bl�
�֦�	0���p�ؼ�͠����ޱ���K�jeVZ�K�{/�
+�B���
�aJ���f�[oACW��p�3[8�AY
�lo*rX�4�a>-9u=4-���{����6Քb�^Q�ћ�`�,Lb����`P��
^Z���2�pD�ٻ�Nw
&
g�	���Ƌ�&��s^�M�\<���x�����9O�{y����N�QA�����(>ݧ{O6���j���6F��]gf�U
�y�
n��P�)��
+Ѹ[�Âr�
g�؄C�t����֎
��\�Ȭ�W�}����Hj;�۟�pu���昘v�iov��d��{O4wy 
+��8��	q’��l(�ƎѴb��:�����=X�n�mr��g��e�����)�rKg�������DE��X�Y�� ���x�G��]d����(���Z
���S�yJ�
s�b��l����,W����
�t�-T�S̉A��y�e�$ &���x0�[!�UF
����
6)0Q���R�c�jy+��|��L���NH�pU
 !0�5���^� AjWI�Y�k��y�$c�d=�
�⤵��������C�nw�>-{
��l�c]�&���V
}�uk <Q��m8Ĝ��.q�q���
��^��iB�v0g��`�c���ˬ���
+�A�� ��<$e�KAd�c��
]H
�+������=����s+Rv�ӥ1*!a�� ��5�^�'�?��6�t��Q�S7�l5ߠ�,W���* 
��
�fx�AƇ�
��݇
��
���[�E������E6�8��1�C
+����k
P��2�ڀ\?�rMy�)s\���

+���J���0$!�
��|�EP���YJ�R���Ã#x��j�.C���8��Cpn�_\��!��3t�����ϼ��{�j��,�&:\B`� ��':�3s�N.A��t2C����	�L�6��\�� � �DbB�_Y1zNu:�&f�5L � }:eBD"G��MR'^����=�U�1��@FQ<!�zw�s
+�
� 
@ �z�6��0����!����?�I��c�J'䟏���W��S�؆
3�}�G��bw8�
�Y
�cPo[(�S,���;��3uSA�ຶ�m

�y:U�Ca��
}2�vI�@�
���vK�E�b�
�����Uăo��W�z ;&T�^�q�0vٛ9��p!B��ʁ��gD�
+d�y �Q���mVO�#�J��j
���{bI��	ƌY�]�&����z+t�MAp��ؠM
$RI'��]`x
+k����amtA֢�
&��1��KNE�i�2ZBFњ��>eS
��q{��w���c��b�
�����/��7�
+endstream
+endobj
+2075 0 obj <<
+/Type /Page
+/Contents 2076 0 R
+/Resources 2074 0 R
+/MediaBox [0 0 612 792]
+/Parent 2050 0 R
+/Annots [ 2071 0 R 2072 0 R 2073 0 R ]
+>> endobj
+2071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.744 252.218 434.467 263.066]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+2072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.826 227.754 229.53 239.709]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+2073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.765 179.62 394.469 191.576]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.12) >>
+>> endobj
+2077 0 obj <<
+/D [2075 0 R /XYZ 86.4 726.045 null]
+>> endobj
+350 0 obj <<
+/D [2075 0 R /XYZ 86.4 610.308 null]
+>> endobj
+2078 0 obj <<
+/D [2075 0 R /XYZ 86.4 552.789 null]
+>> endobj
+354 0 obj <<
+/D [2075 0 R /XYZ 86.4 292.862 null]
+>> endobj
+2079 0 obj <<
+/D [2075 0 R /XYZ 86.4 154.6 null]
+>> endobj
+2074 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F38 785 0 R /F14 1050 0 R /F11 787 0 R /F10 1095 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2085 0 obj <<
+/Length 2370      
+/Filter /FlateDecode
+>>
+stream
+x��Z[���~�_�[P�5�<nboʧR�*�[y�9��b$� ��F���
�wuֲ�F̵���`��7~�y'T��Tq<��D�<%J��1>����HD��Z
vz�d]�X���lG��ϯ�,��C��]����Z۝�=�࡮�ڸ��
���g\=kr���-��	�4̗I�BF����_n>>�|�a� 
�8"�T�jw��w���K@�H��ٌ�R��ï2x���
u �!��2�beq�m6���<	���1]���
.�<�
3�MoQ�~`�p	v[�Q�puh���yZDQ��m_
��	E�/X�� q
#�$.� �"�Rj2�k���J�d���
�ǟ�I�e��Ca�^uu����`_
¢��|�CF�.����FtfA�X�l�� ���e� #R���$��P�"&��h�&$�׀'z��rx�ℳ1<�n���R�V��#+
� F,�X3��Q�_��\5D��pf�uSl�
+7�p�ۏ�4*�CV��E� Y�-����~��F�{��
b��ڏ��"i,
!��A"��Y�����W<	��S5��7 at 8�h{s�v&��2AK�:#��0���b((,��1�[�����
�3���t�^
���V7�y S߁��h
+
�T B�H�T���ў,�D2a�RJ�]��^�	���)wgVu����!�j�E��i�1�p�?�F�۳�l�������C�86
�d*z(~=?*�)IhD'4����
$�p�l0v�-�a�j�a !K����-�RW�n;�2%T$#u&���_�y[�ж�.hg���
�@���sg!ޏ�noF��
�=��n��$I��`����;�{
�w5�N?���95@,�y�Ӈ�p�{��U�+E���_��P����2 �Q�T��k{X�tۮ�;hH�q��wC��N&7�U2�ϪF��Yۡ��
}�L���I#G���xeXD���d<��


���֧
��QȦN��/8�s<�	l3�{������f
�vg_��^5���0m|��h	v�}Tz�� �����!2O��:+JP�`�D�T��8T
#�
��A\�,�
(��r?���f*��M3
�mVv��a8
���pC�;g
�Rpq`e�7.��4$

�ŕ�t������̦R�R�+l*c8�t�����؍��s
K G�Z:?O�!�'P��l��֝n��/T���[mjtI��ky� ~x����yh�<1�����U��Gim[X�>m����3� DL��sѠ�[���X�����#��8�;	�A�~�0
����Qe5V�Y爩�#����v�"ݶp��HǍ�s��34v�w�M�Ƭ2�
�e�7�
4:���8�U_ʽ�1�
���&�E�
+Έ��H��#�̡K"y�"0�H�3(f��E�	vj��4q�����qf�R�(�ʶ	�	��h�yޡ��,�Ʀ�~
+�}��<�����r�
 �3	���-#DB"ȴ��Ne��#d�G撐
CW��X�
^����G�����^�o
��L
R8›+]ըr�8$���j���)|��EnJ;����)[g[�&d[��2�6"
+�
���4�{�`H���3������>��ug��l���ǰ��ܞ&t��(bx
��/�����U'�cs �����Zc+h'���vy�
�`��4>��_�"�����
�tO�~v�k���J-؍�Vz܍D��+�z�}`��'׵�|'
(
�n<�:�A�2��
:��o�2w��5>ɯ,�f��g���M����&攺�H���=���~�/R8B��v`�IJ��r�?.�#�4G*��b)��v�,�%4��d��<���E?A[����s.�8�0����C�$�D�p�I`��qp�M�d	�����΃W���k����*���,��}�b�sȆ��t邽Kv�V��~)Yv�Fg�vU�6_R����v�w��
+�KB+�i��Z�_M��2�?`���1/v��@K��݊�UXq}a�={�d��
+{X��i����{���j��,��˨0��|F5Z\����/�%��/���b�|�X��j��"�c_��6��y/1΁�����s������'��oT�
��OQ�ݛ
'�
��.[�ske+�Jg�qں���ȞE~(�[�O���Iby&�5qO�h���h���T8.�j��zV��.�	�� �A�1Ҍ��Q�.�T���֬�

}�@��a�R��I���PN��
��ya��d�o��_M����a4�^��աt��[�?	�
\����
ou�9��s�%B�r��Rӹ���W����
+7ؗJg�"޽(�CcW�<y_`Er\��w�O�B��
WO��X�������F��3�O�>>��7W��
+endstream
+endobj
+2084 0 obj <<
+/Type /Page
+/Contents 2085 0 R
+/Resources 2083 0 R
+/MediaBox [0 0 612 792]
+/Parent 2050 0 R
+/Annots [ 2080 0 R 2081 0 R ]
+>> endobj
+2080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.33 360.724 394.052 371.572]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+2081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.571 360.724 522.294 371.572]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+2086 0 obj <<
+/D [2084 0 R /XYZ 86.4 726.045 null]
+>> endobj
+358 0 obj <<
+/D [2084 0 R /XYZ 86.4 455.272 null]
+>> endobj
+2087 0 obj <<
+/D [2084 0 R /XYZ 86.4 356.827 null]
+>> endobj
+2088 0 obj <<
+/D [2084 0 R /XYZ 86.4 335.923 null]
+>> endobj
+2089 0 obj <<
+/D [2084 0 R /XYZ 86.4 315.018 null]
+>> endobj
+2090 0 obj <<
+/D [2084 0 R /XYZ 86.4 296.052 null]
+>> endobj
+2091 0 obj <<
+/D [2084 0 R /XYZ 86.4 273.21 null]
+>> endobj
+2092 0 obj <<
+/D [2084 0 R /XYZ 86.4 252.306 null]
+>> endobj
+2093 0 obj <<
+/D [2084 0 R /XYZ 86.4 231.402 null]
+>> endobj
+2094 0 obj <<
+/D [2084 0 R /XYZ 86.4 212.435 null]
+>> endobj
+2095 0 obj <<
+/D [2084 0 R /XYZ 86.4 189.594 null]
+>> endobj
+2096 0 obj <<
+/D [2084 0 R /XYZ 86.4 168.69 null]
+>> endobj
+2097 0 obj <<
+/D [2084 0 R /XYZ 86.4 147.786 null]
+>> endobj
+2098 0 obj <<
+/D [2084 0 R /XYZ 86.4 126.882 null]
+>> endobj
+2099 0 obj <<
+/D [2084 0 R /XYZ 86.4 105.978 null]
+>> endobj
+2100 0 obj <<
+/D [2084 0 R /XYZ 86.4 85.074 null]
+>> endobj
+2083 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F10 1095 0 R /F16 729 0 R /F38 785 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2112 0 obj <<
+/Length 2880      
+/Filter /FlateDecode
+>>
+stream
+x��Z�r�8}�W𑚵�� ����&�T�fS�س/�Ԗ,Qk$�&);���n �
+����>�L��t7�N7D��F��qy�ן��R�*���ed���)Q�E���k̨�LY�������d*��?��
��/�kY�{�y���(�ì\`��/�m���]^c���|����U��T��/9{yv{�@4�F���������4Z��_"JDj�{�oI�O�������Ѿ�f��JaZy
bWo��L�4a��/���-�1[�fN�*��x���.����l�ȶ�T;�ow�E9�we���8�!��y�EY�"�h�I�v"���׮����`Պ���gX
+͎�i� T4��b2�J�H�M����޵ԫ
����!�+�}+���F���l���
�w���I�vhV}
+��|Vg(*�K�J�#i�8)�]"+�o�|Běl�,ʽ{/�5L�p/8=��\�voo2�J�
�9+1�7���'���w�(��w�/F.&���$D6���
ȳ��Y���N����=��ƚTz_U��Ջ�{]q��Z���fWW���\��5���Gc4\���<_f$Q��̠J�����mhfF
��0
+�[�֯�M���
<�t���:��k*��I�Y泫uV�.ժح��
�aWe�9GD�n,(��
�؆�0&�jk`|�x!P8�,��k�dsl��ʫ
���&���Êsp^��b�K'�0+_�& ?��:+g�yV,�
�o�5�\yQ�]U���&V}!�#�����v4�:�o�w���Ǭ��d��v�ݢ.�Ɓ/p;�v;O���@��
zy:�',xh@�O� ��1a�6jz؍�$j�P��� ���n�d���Q ���;oc���o��-��0�

%6� ����r6��tg�⑨��.x��z�P�0: :�S
�y��>̗�D�gc��О8ݻ?���ID�
 W<�B5���)SE�J�L��+pl���pbL�q@�P�K�Av����w�0��:�t�<�-*�1e;&�����]O��$�wV�燇��,3�/�
�cn�E�(��1��)�0!�0�X�@ݏp�)�8��ŀ�C�9��R�'� <����D
g���<I`��jmV�r
�,�}̒�u��O�.����O�� \���!ϥva
�}X��VX�f�u�-
����Y��g�
�t�{ƃ��O�t��C"a͊qmm�wx�3>9�
�P��C>y
+�gRȎ���
�w�˨���kS%�&�cu��H����5�y�N�'E��hqX\���t����'�;Eزt0�kd����y�Jɋ폭�ِ9:���j}�r��۶d#����τ����n?bIt�M����W!�5D1��eNm��7�P����E�
��ήlU �:�����6�!�W����V��������m�ST��-!����ЦD����T9gN��wJ�SyE�S
:ET}� wf�=d�M��;���
m�e~
+��:ai��衐����0=�;pQ���S�kb����H<�K;
+�l`�(��yS�l�d��m��h�!B
��)����f߲W�
d )�2yLٱ�v�o
C���T�4mMCv�	PYz��"�ޣ�R
�3K��
���(|X`�s�9���}�'�dž��B$�4@��m��
���U>*���n����
łΡi5 Zk�rU}�8��  4�䭄��Y�ж���O�����Ā�)�]�٨ὀ���$NT�9���sC��e� �(�J1~��a�[�2��+���i^l@�f�"�F���
l����n��77�����q
;g�̝
���� �QlT��F���`}s ���t�����k� G$����Lc
ZIȤ�^����C���
�h���}2�к�O���%P�CV3�;X`bA�n�TAmԃ�$DQ�W�/�
O�*#HJ�)s�� S��OhK��Nۊ�>$�̝8,a���
���
+PB��S`Ko�ÞJ#Z_<���P������
+ۢn�Xz0��O�Y��
D�bB�us�XN���.���7ͧ���z���n�"_
�U�,
�q$ի#w�̤DB0��k4�%��k
�O�XgB�JN�@ѳ��q3���0�
���@6ΚK���:�i�G������R?n�ӗ�L >�Q�(�@oň�J���
����k�od�|1;�7p�@
��ڰS�0�iU9�	n4��P
8�ϝ@�4������o�r�%
�
IH
+Lj��y��
���G2���}��1HJ�yL��i�(�$����iL�nwyiY?*|����4|�ztw�p�J�$�sw��ɒn�Αo[��I���8��\$Q�������^�:^
��ٿ���
\�
/���
�-}S^�6��t�Rp�S�^�>C��{C鳼�)�=���ƴs��=UW����!���wP5�ʁ�� }��dD[;7(Z��������r�5(щv�
+�[ۯ��`>װq\��f��l�K�+��6R������2�8��4����n����1d��X8q�#[$��C�����~�n�i��m�4u5G6D(���*oCw���ĸ*즾_�E�
���-Ҳ� �z�Xk�e�6�y�ωC	dT���
s�
�(���(��c
�!���$�Y���/�)�a\��q@�p\/!�W�Z[�þ�
2l�ua�\��t(ꏗ�u�<��$�?K8���ٳe8�^ҙ?3�p��H��'�:�)��Tu��ە���d�H18��c���B�a�ɟG�����]`⻥���G|�.,F7��<}��X�����
�RO�Ϣ��#�0�o�

���L�Z��	��	7ݏ@�~������ CUU��u��}n�{W���r?}���lL�������>�_�W%I
+endstream
+endobj
+2111 0 obj <<
+/Type /Page
+/Contents 2112 0 R
+/Resources 2110 0 R
+/MediaBox [0 0 612 792]
+/Parent 2050 0 R
+/Annots [ 2082 0 R 2101 0 R 2102 0 R 2103 0 R 2104 0 R 2105 0 R 2106 0 R 2107 0 R 2108 0 R 2109 0 R ]
+>> endobj
+2082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.24 659.35 373.712 670.199]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.1) >>
+>> endobj
+2101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.189 597.61 446.661 608.458]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.4) >>
+>> endobj
+2102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.37 526.93 478.841 537.778]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.3) >>
+>> endobj
+2103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.91 435.356 254.381 446.205]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.5) >>
+>> endobj
+2104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.425 308.553 233.38 320.508]
+/Subtype /Link
+/A << /S /GoTo /D (Item.93) >>
+>> endobj
+2105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 296.597 97.359 308.553]
+/Subtype /Link
+/A << /S /GoTo /D (Item.94) >>
+>> endobj
+2106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.725 296.597 300.68 308.553]
+/Subtype /Link
+/A << /S /GoTo /D (Item.88) >>
+>> endobj
+2107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [321.38 296.597 333.335 308.553]
+/Subtype /Link
+/A << /S /GoTo /D (Item.95) >>
+>> endobj
+2108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.649 214.478 356.353 226.433]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.10) >>
+>> endobj
+2109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.286 79.484 213.758 91.439]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4.6) >>
+>> endobj
+2113 0 obj <<
+/D [2111 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2114 0 obj <<
+/D [2111 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2115 0 obj <<
+/D [2111 0 R /XYZ 86.4 656.389 null]
+>> endobj
+2116 0 obj <<
+/D [2111 0 R /XYZ 86.4 594.648 null]
+>> endobj
+2117 0 obj <<
+/D [2111 0 R /XYZ 86.4 575.692 null]
+>> endobj
+2118 0 obj <<
+/D [2111 0 R /XYZ 86.4 523.969 null]
+>> endobj
+2119 0 obj <<
+/D [2111 0 R /XYZ 86.4 503.075 null]
+>> endobj
+2120 0 obj <<
+/D [2111 0 R /XYZ 86.4 482.181 null]
+>> endobj
+2121 0 obj <<
+/D [2111 0 R /XYZ 86.4 432.395 null]
+>> endobj
+2122 0 obj <<
+/D [2111 0 R /XYZ 86.4 411.501 null]
+>> endobj
+2123 0 obj <<
+/D [2111 0 R /XYZ 86.4 390.607 null]
+>> endobj
+2124 0 obj <<
+/D [2111 0 R /XYZ 86.4 369.713 null]
+>> endobj
+2125 0 obj <<
+/D [2111 0 R /XYZ 86.4 348.819 null]
+>> endobj
+362 0 obj <<
+/D [2111 0 R /XYZ 86.4 283.677 null]
+>> endobj
+2126 0 obj <<
+/D [2111 0 R /XYZ 86.4 192.093 null]
+>> endobj
+2110 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F38 785 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2130 0 obj <<
+/Length 3099      
+/Filter /FlateDecode
+>>
+stream
+x��[Is����W�H�f�w4����%�����x� ������
���^@ lB��T��AE����x���~���	����ۋgo���$�\On����$<%Z���b�a����	#�W�K�����ʶ��Mˍ{P.��]��g�*�{9�a`[���=^��O�͢���W7n견���Y�p�|S��+���4	�2�.������ŗ
@',lX#�d�����,�ɏJDj&���D��p�ZMn.�]P� �f�4-F0�Xv�SFX�
/�^�8�ӒP)�L���M„i6!��
��y����K8��ٛ�k��¸�~�	�/�t��Vx%��_�т�R
^�{һ�_m���ޞmI`C~��Kn�Y�V�w�y^��݊��ء7㔓D�Ɍ	
8���!L�Q8�$$�����o#D� ��Q��Rj�v�^���
+�80�%D+�6NN�LA�K�Q
+��Pڬ���e���.��M�u���V�?��G��%s?�����ӠX"�X,5��R��U�m��}��Ѥ���e�1�k?E{�7e�(��0v��<�fН6�7/�NםN6{��)����L��݄
+�9��
+,�b�/�E�P�kr��*F��F,%a)gJ����	�&���i�����!�-0���P;�*�ؠ�۠8�A��Aq�
r����

�v�%N�B����
+�H9�W���
�أi�
G �C����o�q��Y���m^E$��ۈ,����<����Wu
t�6�	S���-�
��
�YI�
�7��P����������C�֊40��l
�N�:9� #�����k�㣜��ܫ��cW{��7��Uޙ�6�`ym�jmU((�B/3��@���/��0���0�<�Z�ɫ�]�h�֚��2#T�S�Uv���`GtW���
�2��
+���$��|WU��iDl)%L�s�C�Ć٪.
���v��&�~
�S]gw���W��z���m+g;�	#
+}
K����n3G�湡a;��R����4�G^�Q
�ti��Tk
�>ZYmk��$8p��RiHY
+�>o��[��i�]�)t�I� � � RC��J7�K���@��`���:��X�]۝�|r���(�Ev�x��0�	�	���iXï����t��jTW:�EB�j���������â~p���C��,1��|��� �ɎAAč
��R{v�JY2 ��*|�@�m�	w�˟ǒ'*ְo�o }=��‡��%&���e�8~�J�-�>�#�'*y3ȗ�5a1Q_AL"�S^u���d ��hV:��/��e
��JD���m	��m�y$Gb ˚�-����|���SD��xr�*O"��!�H���$�
+��S�� ӆ$�!n�ƨ���p!|�����л��? �H���? �q ��?@�� D1
+@� ����.=2�	�b�%�ˈ�~Ώ����L�#��|�[�J�bW����u����ܹz��Y7>�:�f��*��K��l,�z���X�}�
+90�v�!�A�ŀh���@Y� XubM���U�E�Û���#*
	�
���k�,	��駹�9n�V,�X5A@~�&�Y��ʥ�D
+�e��&��wUu+h��D�
��}U�J��v�i0�k1����
l��M��������^קn�_
�Y���Ի��q����S�wF����._8s��w�M�����wѤ�#���#�`T򩄄R<X�(t/�>�fG�DIK�0��F�ߠ����
+I�],�j���9�HS���RE�?ve���
+2=�p�`�� ��“I!�J`%2r���x씝��>
�}���<�
���Q� aJ�k�/Qʋ>q�\e�ӊ+���
���
��Pa�k��b0O�
�u?�����0:��@�2�:���[�y����

_��Ƙf�l$�C�qN�յ����2�/����ž�
<(*�
�����ԟ�鼀�L��ɮ��s8n	ph3���$��k���
���
#�n�su�N���0������J��BP���
 �[�[�<I)��j�Bp
�#Ժq)�E�n��)�I;T����P�kY,���龚���]�J�lB��h���eB��x́��pp�T>�`ћw'BE��$��û��"B6��3}�Pj���R����|�Ew}D^�Lm&�c��TV�

\ ���ӍB�l�g��&�d�0�\��A�ƴ���9��G�
�>*J��'ձ7��# �LJ��s��o��%�/���<UM�Ql"��9�C��V�n�}7��XMd�C��|X�j!�����N�8�IJ�T�����V@S`�X�*G�
��^N�V��_�3N:y� ��b4=��`
����C�n 
���U���[E�ݭ�H��+�
�ףh�	�cC�c��
���J`��/�
�jʽڦin�7�CrOA���*t�h���q:�U�ƪ
�����
�`G�`5�nq
� �P�7[�Ӕ�����AXkƁ XJ��%�fP�6�w�_�z�"I��"I�8E�1�H�a_�p�S#���3��k�j\	ޠvE��@�:�<� �:��G��xLC9��eb:���c��2�`C��I'�!yO;ϡ�;��G���#���<��4���`��LSۨ����/}����wUu�\
`O��P����T�  I��#H���
�V�?�7[����f�+D �j[}iih*qg����HY��^�A�3�eq�.�
��L)"C��b�*�c 
�*�'�g �XX>��EA&R��zHQ����+��X�=6�<&'��n���(�ުj�l�_yF�O�t��*��.s~�+�c1ީ�œڑ�~r���M�m̡�-YeL$�����zU8�����Y�Ysǯ>�f�lI�V���v��6�X!K�B�<R��,�f�U�
�^�xy���('r��g���l�r�k�~Tif�6
vs�p���O��ϱ�Wr�Nx�)�܀�î�DL��M^e��7�`����lR���m�W����Ɵ��ɬ�O�s�Y�;�
���wN�#�_��W�v�r
��Q�wo��^Zu
�S��Ո����c�Ύ���0��D�
+�
+endstream
+endobj
+2129 0 obj <<
+/Type /Page
+/Contents 2130 0 R
+/Resources 2128 0 R
+/MediaBox [0 0 612 792]
+/Parent 2134 0 R
+>> endobj
+2131 0 obj <<
+/D [2129 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2132 0 obj <<
+/D [2129 0 R /XYZ 86.4 400.002 null]
+>> endobj
+2133 0 obj <<
+/D [2129 0 R /XYZ 86.4 167.396 null]
+>> endobj
+2128 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2137 0 obj <<
+/Length 3435      
+/Filter /FlateDecode
+>>
+stream
+x��[[s۸~���SG�TX\I`;}���n��ic;����t��9��,I%�����
IP�,7j:�����������۳onϾz)��!&����n�"g)7$lv���4g49_0��t��)����b���\����߸���v/�M2��O8 �W�)�7y�m�h��э�(��cS�$��/�ߟ]ݞ�z�`it��R�2�-7g?�Bg+x���a��
��Ia����������g�����FX���)"	�+�#6��ݤj�T���k׾ۖ˶�J\�W/��ct�`�f��x��</�\�yq�~�f�s6��v[��U���
:q^��	���5�2{��W������~(��l�v���>�97YQ�Av�<���v�|9\�8�
�xuyq��׍+�*˖��1�vi?���	e�c%�j�
�U���R��`)��)
��@�7�
��ޣ��۳����'�(���

���/�P��*�eu�U�������[fM
��C��K���R�l��'��
`��aEw��~��\`�c��_@�n*G�
0V身2w��]���o�v�
�:��hY
�R�H������r��`4��:���0�;
��3������{ss���Y���$'!+IS�}y�����(J�	��
ɼ���� 	�:�4����Ջ��\�1M��o;
��wY���X��o��m�:_V8��'�4
�U.Ko��e^��b7�������sF@)N"u��1���������O at 6H}Hv�N�'!���1<&{u}} k
T�7�
l"[��&F``�) �aNF�̉yֺm �3�i]��3�
�' ����"�
V�����Q��Y���D�8#��Ф8�F���R�C
�=�&�"��EU�����e���B́R��X< �ת��Y.�u� ����U�f��Ѿ+6���6��#�:� B���v*�5�h�"�c~{־-DQE]Wu㞭uLR5���kG`���I� (�Z=���
�!C`Y&��2���W�6Fٙ�:�d�S��<IC��H8&9�bE���$�gj"�
�1t"! [...]
Q	���9�fN%]�����|ضVba��-B���P���nFGR�L�,!	�y6���ILG(�6O4�q#l���j�2L�$*:�LpC���_�Ng��sC�A�.
+ at t"�t�lX2����%�v�X*�];�#=����v.����>Hړ�2Q��L��適�Y}�8YqX���ys�=c{ }~o��
ջ6+�`@����]��#�FF�}�$!���}0l_�)�I�tС��c:�
}��DyӃi�`b��ڐT�0���Gv��6o�-���ŸO|�}��
�~������eR)$$z�Y�@�w aJ ��*�-x�?������U��
ghI
H�>#6�XP��M���[��ZP[�������

f05��
�y�����8(Ł:%,��Pu�A���f`�F@y7�)��Y��i�8�fSAPo�\��e�B7���ڼv&�
XËLD����ri���ۮ}�
�!jl]m�6MS� ��ˈ�"�Y=��Q�m#�\��ۍ7SM��Q��D%K$�R�d�ԟWDI	��N���`�T�c��T�Dtڹ��U�r���.O!���cNV��W�n_��I�f�k�jI��E�m־��a��&�./v���n"K����x���i
��6 H[���<VQ��WR�s�[�ٺ}��$\{�v~�:^K�%r���I"����
���h�m!��Ҍ���x�4bX�Sr������(p"M�LNA�@3E�!F���7k���{R
��:

f6��ݚ�����X��tY�ܔG%QlT������7�F�5��y��g��GQ�W[�}_씕5����
9�"'�~B��1
M�ᩛ�K�1����
�����u�`�� *�Ob�іR_	�y������X\*�$� �1]
�
�"�������3��D��9��
����0�Ԟ�?^�8ARmE�I�Bt�@V}���vxOS5�ѹ�D����K�b���GB6���,�1.�	�2Hm��9ҥh�O�s�
+C��L�L5�);	M͈�&�ys����J��W�V3�9�䜨7�e�X��9�f�	o
+���`?� ���(���TO��4=�#�o�^\>Ko�ʀحY?���I�
·��/#?pL��N!?��J�o..��S��1"z�����bƢL ߠ�/
+��G��6QWC3�`0�O�/1�$i_�-��
qxE&X����p6*iq|eb޺X�@&�
��
�=����z�����A�u/s Ք��x�O�3��,ڇ�<u�y���f�nfO'��A��'�5|���w�Dz���O���|UW�ӳ(�wss\t
���n�x�b����A�G��r��͢#�R��m숧��	�B/�m��{sR���
uO�mx4
p�9��M������1:��0ţs
H���V�&�����&����Vc��m�UQ��� '��Gl�p�f��ʁ/�_7x9da��#��mBr��*����:��c�
+9�a�_��xQ���yp���
�7���*pa}�HH�������Ľ������P\}�W�)�rP$�F)�QuV���:+lX��wL���R+��9�
2�@���mX��
b;q\}U��OF��ay���AyV��{
g�GWa���$>�
+��Z�/W��C3AOR�ũ5���~�*��+�9���L\��
�%*؃k%�D���h�o�����i�.KT��{�)�����?I�Xc�������;��"CD�a�\D� �,�:Ďx�<Pe��u�E����|��އ��c<�wR��\R`6ώ���>�1�ޟPE9!
����hU��b�D�
H��]Oqx���$F����
��MB
=I�
fJ�e�7��
���d����������D����Kt؉t��&)�R��7�?=��H���W
�\Y�]�?ppN
�
�
h�8t�&<�&
��q�>P�>p�2��^��::8"����(��qz� J�$U=�>��`�

��c����j\
����AJ

+endstream
+endobj
+2136 0 obj <<
+/Type /Page
+/Contents 2137 0 R
+/Resources 2135 0 R
+/MediaBox [0 0 612 792]
+/Parent 2134 0 R
+/Annots [ 2127 0 R ]
+>> endobj
+2127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.85 657.621 160.321 668.746]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+2138 0 obj <<
+/D [2136 0 R /XYZ 86.4 726.045 null]
+>> endobj
+366 0 obj <<
+/D [2136 0 R /XYZ 86.4 701.138 null]
+>> endobj
+370 0 obj <<
+/D [2136 0 R /XYZ 86.4 541.168 null]
+>> endobj
+2139 0 obj <<
+/D [2136 0 R /XYZ 86.4 459.692 null]
+>> endobj
+2140 0 obj <<
+/D [2136 0 R /XYZ 86.4 220.813 null]
+>> endobj
+2135 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F16 729 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2143 0 obj <<
+/Length 2897      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W�EmE�y?�݃c�)��-���r|�IPB�"% �����y� ��'�$�@`�{�����n 'W	N�;�����L&Ier9O�D<Q� �Hr9K�N�gL����)��*�*�*?=#���?X����u:�g�"���$�U�Z���,��
:ɖ�|y�.�����h����?(�e�W�=�e0�kE&��w�ߟ<�<�;!����`�4������;�����	F���w�pf��Erq��� �n�p��l"
ADI/���O�W@$G�s7�)�o
��E�0�
+M�Lz�SS͐�d� B�L��7?��F	%o�(Vb�����PΑ�����eg17ٍ����ֲ
��j�
�xJ�$-�0�GD
��&E12��1����3"�/�:#
̆؅R�+:�] )��W���4
 ���ql�</���舧9�K�)���h�aƘU��d�A�������
+1I�l�_���%~	',j
�)�H�Q�
���<=?J�k�
��\0
�����u�»�7�
&Y�_��I��h�C(�j�).�,�}z�ǩ��4:�&�����S%Ɠه���nI����\Q_A�.�n�&��pM�U��
E��Hͱ|�������qy�K��z�x>�¹1���Ĉ	�`�c��R
1��F�h2��kL
+<��-S�ᢡ���|�1�"]^c��!M���F���X��2�!���dC�
D:y�䉻������@d���"cr��P�y�R��
� 
��0 %%
b"#0�&�dz���$L��˨�*��z�.��z�V4 9:����be���쳆�9���
�FH����F&�`H#�XZ��j�����u�b��n��4
O�E��W�}t�?��W�T6b�S{]�����=��`��~�s�i�"�i��k?���dU
�9�a�6�a�0ku]��W�
i��˩O�z
4$
��<��wYe�da����utH��~��v�<���C�pp15կ"l�����f�ͬ���';3�Q���A
DY}
Z�1�  d�^$
����Di��V@	�
�]��b9 `�x�]�|�~[ ��Tw3s8�H�sp{xgo�Ӕ���:\�) >A���_G?c���;����6�
��iHKt{��}��Ȫp���`
+��|��Bb
+HI;�M�0�Y9-�[�?:�I����G���P%T
?����a3�J��z�m��e�.��@-���gյ'��/�M
���&�7ҹs[��;eJ�mȶ�*��iV���Ÿ������b��΋�M��W��8��b���z@HN����$Eܴ5���Z�dK�Ѫl�d��6
A��3Jny
2��*;
��T�����(CZ�Q�~���y�{���j� G����*��s�
�W�:1	ֺ*
���"��W�r�Ј��4�bp�Mn{�� ��a/�y��C�0���������� &%�"K���.keۢ��e��<�qpAO�c�|�LS؀i|��9��պ�]W�����9U;K��1�/{�gQ�-�2���E�T�'�s/�0h
���
���m���j�h4>������1�g76Ky�faq�u�����o�qjs�ɫ0'���t$ �=�
UٗBQ��Ƙ�ZfVk�c�>0��_�xD��P�6D?*ɥ�ҹ%Eu����;���MW7p:��;�t֨h��g�A�j�-��F
H��ª
v���.VVluk�κP�q�q�ft#�3�f��0�M����CD���G&
1�k����/|Cj�UҐ�g�s�R���x��o�={~q�UJ�
���
��}_��Ё
��`���z�d^�Q���0t at oh
���b�i��VzC��|ٽ!��Z�b@Jjs�;1�Нh�<�5���v
��b�,��t�P��ND<�u"����������H=JSג���A��3(�����?b0k6����s�T��`
o��ˋ���9 �_���
+�d���`Mg�J�n�	+����hʤ���S)\c�N�3���sWK��!(1�X~���v�(޻_�#�
�[f�=%j��s���-c@��}e��@����%t� ����]1�/�2�
5?C�
+bg
��"1c��5�G�1þ���ɦ�
���\�q>\�%��	�\8��k��Q��g����ώj.m�������v-��e�
�_~�����;�p�L
,
oq�b,Wf��6�

���[�����U�a���i;
�Q4&F���V�ٮ�1�v٤��~β1Ub�޲%%%��l��ƴ���}jƜ��z�����.\%�^����(������\�n�����I�9u7�"�[ge�ə-q�>���=Q8�����̾��7v���.�����6G�c^][��E��u�B���h4�F�ҫg.RϢv86���r��M��=��3��|����e�H�뻲mf�78F��5�N	A�Vi���_b��8��W�,���.Y_,"v%@�[9��][bӀٮ1�����6(���}`'
נ8�?���'L�3�?1�Cj�~��7�P#cf��%E�'4(pp�
�v7

L���Ti���-�:	

�U��!�d���F�t.�qI���4o��ٓ�D7R߸g�k�`���Ǫ������Z��vG��
�$��{?��B�	�!���Y���bI��tXS�_���4�Wrq9�
�� [...]
+Ԣ�
EA at J颌�3*����ERp�d�i� %���z�,��m�|�8�+��m�I�8[ /<����ːV��9�49�z[�>[�`����MC2��|��x��˿�j�
_5	�m������1�`
M�_�M[m�� �L�
+endstream
+endobj
+2142 0 obj <<
+/Type /Page
+/Contents 2143 0 R
+/Resources 2141 0 R
+/MediaBox [0 0 612 792]
+/Parent 2134 0 R
+>> endobj
+2144 0 obj <<
+/D [2142 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2145 0 obj <<
+/D [2142 0 R /XYZ 86.4 578.035 null]
+>> endobj
+2146 0 obj <<
+/D [2142 0 R /XYZ 86.4 346.265 null]
+>> endobj
+2141 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F14 1050 0 R /F10 1095 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2149 0 obj <<
+/Length 2793      
+/Filter /FlateDecode
+>>
+stream
+x��[Ms�8��W�HoE���[{�$Ζ�2�zd�%�mQ�ji�C�Iy��@J�(F�p33[9@ ��~��Hs����?N~�:y�F�^’P���ҋC��H&,T»Zx|��әH"���j}w:S��/^�*�ağ۞eQ�ƛ�$��3MH�uj���U��������<[��s��E�ӏW?��_��v"p4��(�u��>�|�ȽF~�8SI�}6�
<�&�ʽ���	�{B�$d+[�&���0�4�2��?֫�Ѣ�_���ʶ�dhT[B�y��
1 �l����U�y�=��2��ʬY�
fw��
$��7b[�ܛ�R�c������xk��L
+�ͼDz8���i��pT�~}��Ʋ�s
F�gl.�;�M��Ȉ�)�<�SI�Ssv�������k�0��ua��blZ�E��seZ1Mg�������+j@�h�&qF�I��&ѨIvo���[�Rw���������

+�f2��lH`�֊:+I⅊�%Ɩ�d�t�0槷�.NXGX(`�K+���yV_B ��|e��+���<�
}5�q���BǗ�>J�"aZGV�Wi���7����
�]�),2�����Rį<�E��% Hb�c�b��^���B%��<d/챲���_�qѓn{�i�$��	���,�:�n��c�����s(�+��5\n}�������XX4z�g/��
�vU�Z��ݮ~�BR(������A�u�*�<�m]Զ�nN۸
(]ק� ԯқ<���~����恀,Q:�o��l�S�-l
@b����
3�֠3p/���u<d��q��W�;��R��e�ೝ������l��K;�詪����F8ޕ��_"�SQ�.�L׷��{i�f�6���M�
��l�=��k"2�,޶��<��S�	YV7ϽX�bC���/G�`��0�3Հ
��G���n6S4,t�+�ʻ����L�y� �$jƵ��g0
| �0bX��A��� {T5$�
аbq�
+�@�a �/�JU��r�^����	��*J[OV
vӚ�c[���޴F!&�� nQ>�uoק]���B�L�\��0҆.�j |D�:d���(�U����1�&@�V��@)C�#�6S���
�+ݔM��\_v�I��G
+Z`��I�L�@/���aĚ'Α������|�8K��5���
�س���q�Ǜ���MB&�;4�A5�M��
hv�&��A$��M�v)��4���AӁ��OY?~���Y�'���b�U�Ɂv�F�����@3�2.Յ������"�j]@f�P
h��
++�N�b��qgCؑ��*Ƚ
�Y�'AGZJqg���W���c뇠�M7Wl*>�$1tuf�>u��^�9���n���S�;���z
�b��.,�k*�DMŔ�����6��'&�uA�"����o��W����w3��`�(
�2DY���*a��E�/%���W�������탍��0v��$�,R�¢C

�yNc`���]��3Br�I��m��9?wxp��P+S)*�Ƚ2�
])J2��u�8ܿ�>��8�F�X*L��{6��������Q7p�f3N��������"!�z�UZ�
���)YM���<F�Љ���:���
�u���ܜt�>��P�$p�Tj�ݤ��
TTa;oU�!�M��z����%�T�@����\�ݐ�����FA�����XȘ6���tD"���s���HW�c^r�. ����B�b��v`�:� 
+�h�C#_�4!m$�3~;A�bƚ�����:^^<H�u�l�ff���Z;���(���y��hpbIEd
]'a'٧�^�O]i��>�em��fh��=Y��X�������Ǵ�ɏ#��"�nV
��E
�
�|�,L�D�na��Yθ�	˦�t�R>��
��Z��*��ϽL�`���-
+O`�&��eS�)c�
N��hc�,ލ���y$���*.��� "$6�$O/+"XB~�1����<�hb�:VD�D�Q�C|�~����'�AF_�
�GS]q6�q��8����Lo*󓊮����Z0{��Al���&+zp<U��s�]>�����ii�<��k
�z���5n�"�]��u�$�a�.cL'�ogߌ�S<�3O���R*���z�-��T׸֤�^���0�G���qvY�6B5^`y!����T��6.{"Y�eG�F�'��&`�==ĎRǞ�e�:js��KWk����u
(����d
B)�@���"̡WܮJ��`_0k��:-�p_�����3��BY�x��)�W*$sM��S1��0
+H��4��R�� 
�����M�)a8�
a����0�<1d����:���bOGYu��c��I`�	�OK)X��?ŞN��=������3��)��T�8U^8�
��)6u�����?�������`��y|�{ɰ
��Rwk��-&�Q5��9
|U#��K��j�[~��s�a���s�u�����G��N�P�+YCg�������5R�K �_#�i򣿼�7��a���%l��6T��FR}b
���
4�#m��8�~���M����)p�x��w��;o��m�
�Ne��P��7�_S�pD�O���b�`�L�)�����2�����w�� �̷m���`�
_�]|��z���a;�_�o����DbD��
�J1�65�
��]u~��E�=�.}U��$@y*���#
+8L �o{�eY<
~^,�G�<���?����ˆ
Y at 2�a�h>����w'������p�(�[o�^h3ݾ����v��w�����^]��Ņ����

+endstream
+endobj
+2148 0 obj <<
+/Type /Page
+/Contents 2149 0 R
+/Resources 2147 0 R
+/MediaBox [0 0 612 792]
+/Parent 2134 0 R
+>> endobj
+2150 0 obj <<
+/D [2148 0 R /XYZ 86.4 726.045 null]
+>> endobj
+374 0 obj <<
+/D [2148 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2151 0 obj <<
+/D [2148 0 R /XYZ 86.4 645.02 null]
+>> endobj
+2152 0 obj <<
+/D [2148 0 R /XYZ 86.4 377.65 null]
+>> endobj
+2153 0 obj <<
+/D [2148 0 R /XYZ 86.4 162.087 null]
+>> endobj
+2147 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F16 729 0 R /F8 741 0 R /F48 982 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2158 0 obj <<
+/Length 2588      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s���_���D���
��k˙d�6�郓�ELAB@yܿ��w A��`'m��@
no��������������^|�R���D!g���	��i
�P���r�.PD^^	#����UrW�Uzył|�
�+���.^³]��
��J�m�
/�{��A�]��;���
]��G�=.��A�l˴J�/����,`4����Nj�ۋ
�3V/X#��bs��W:[“g����>�q���p����/�7 m���F�0
:;�I at 3\��åRA����z�ٻ+Eip�Nܨ��߽�mYLB��9��U߹Q�A\.y=���5;L]]r
|�d���`H�а��~9�V��3E@����͞��		;��W�h�u���� �p7�/�
n

%�̬��"9�{�0k �{v��&
5a 
��0�:����|�[m���P�V�ٸ�
�6�u��:�p
{��s� I���-IY�vY�ɍ,�����P��K	��9�R���I,SI�}��ՀLm�l�eE]���>{1�52$��zk^�S
z��\�����G����y�~��,�4g鿓���!R��I6�RL;�?_�< �X
�D(�PD]�7o�ilGQ�l�a��H
5�fj�C�n
+%xh
MW�M�Hn��I�.O�M�;�GJ"����@��LIě$2�`�J��Y
&`$דxLrsB�O ��������䐟w n�G�tI�|�� ^�0[_��
\'�@���0��	�@fm��L̸gm�>��
�1F
ᄇpC\��}��7�	`����e���d��I�(/�'����t�uvn�����ۓ��=ZsƮ�M��y�Wy��v��C�3��q[p��ح
�F��Te\����3�����
ʁ�F
"�Qs�q�a&XU�S��b��n)zX�`n������B3b����b�|��6��<� \%���+�U�7��1�D
�h�CpyK |,���PI�EG(��/�:��W�u���Xċ�\��}��X�
��༫�vQ���3���2�'=�9��̗>.�_(�A�������R�Aƅe���|����
+e�ސ��)hF"�-�ʿ�C/p+0oH��\����|�-��Q���ARV�S�{�*�{P��ҏ�/r��!]6�����roѸߠs\;�.��"��gI�M�+�n�}��Yq��x������Х�z� �
+=	`ǩ����#�
1�
�"�C$��$�<]����/
+���C�>l!���m�b톏���/
�r�5��
+Bi3��
Os�g���@���o0P�!;wv�k/�s�R���&��T���K�X���J�
�g C� 5�I�!N�zs�B�dž
��0w�H������%�r/��Zp�A��j�Ǧ�
`&���n���0b�Z�Sa�y�;N!�sǎ�Gx#T$&�g���G8,*��tNp*-O�L!�6[�!u����uJ�M^%e�ԋP���d�G���p
���cBԆ�`W&�o�R�5pm�-�d�i� |l_�a
�<{H���{\��
��A���0�����
T�Rt���FR
lp�]Y���
�����"�)�Y��w�c�8�� I��{;R�x
o�d�v�[F�b
��N\l�$�Ӏ8+=L�1����5�WQ9�	q{q�L�]F��M
+Ӝv��+x��.Z����U��q��E��	��
r2���r�:g�p����W
s4��=��e��[�͞�r�x�ʳ�>��ᜂ�a"��2�,�a-��,�����q5��@�������S?����y�p�~K
0�=���n�}�?�~�I���$s\�u��7�քUIs���c-+���,_�bv�eţ�:��[V�H��b�}R���f�y�.� 0�d7-��+�Y��J�c��7�h��u���q�o% ����H�'���PO! �ߺ��i[�����/�^�Dz[O�eI�G{Y�Ä�U��;P�<
+EXS�
�.���ljg3���=��%Eh
�i/�[6
�i\#
�g�y7�!}�x��I��Ez���|�v��B��б6���H‎���?�T�.��$)`d��H:`c�P���r�N
ϱa�o}jl�X�'������7d�m���.��V�����o��
]ll�[
X=��
:D�}Ⱦ6�L��A�
�$�:�J�i?|B�
��U�;��ȡտ3u�N|�O��QD�I�/N�����B}��#�~y3���7
%�׾�ax��'i��T!?�}7�L�?��<�4�
J�<�m�7.��a �\���[a��0�
��
$�h�����8F��y��(iQ���Y����I[̎ �뢸M��e��8p�0�٫�[�
;� �,�q�Q<�<,�m��LN�
�]�y�Q�@x���T��b�V~5�9
I���@�P�
+k����vz�'�A�j�نе>�QÄn�GUP�� $E���d�&
��!��sh�V�y�òz��:P���M2|����~B%�Q3E�7�DԜB�0�9���?6��O�s�w��;��
1!$
+��~�b�S�
ds:��c�йs�֗vb4�����9�i�b��g3贂���$�V����[���
+endstream
+endobj
+2157 0 obj <<
+/Type /Page
+/Contents 2158 0 R
+/Resources 2156 0 R
+/MediaBox [0 0 612 792]
+/Parent 2134 0 R
+/Annots [ 2154 0 R 2155 0 R ]
+>> endobj
+2154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [304.756 400.425 327.227 412.38]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.1) >>
+>> endobj
+2155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.873 388.469 249.345 400.425]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.4) >>
+>> endobj
+2159 0 obj <<
+/D [2157 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2160 0 obj <<
+/D [2157 0 R /XYZ 86.4 586.423 null]
+>> endobj
+378 0 obj <<
+/D [2157 0 R /XYZ 86.4 371.975 null]
+>> endobj
+2161 0 obj <<
+/D [2157 0 R /XYZ 86.4 314.347 null]
+>> endobj
+2162 0 obj <<
+/D [2157 0 R /XYZ 86.4 152.199 null]
+>> endobj
+2156 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2166 0 obj <<
+/Length 3184      
+/Filter /FlateDecode
+>>
+stream
+x��Z����~�>�:'Z����@]?�۳��$(�N�I��_ߙ�%ERO��@���j^;;�٥��	�|��˳�o��8�4ד���DN
wD
6�\L~�2F�g�f��lus>VL߽>|��L�a�:/���s��y�'$��t��ʬ��
+��̗�d�PfH�<���7�g���F'�E+������_�d_~�P"��|���&R8��i9��]�Ѩm�(mKE&
��aF-߽~�+ӒP)�LaԘ�0a!�jC��]��^���=�Z��o�ӌP������)N�i���
��or�o��9�n��z��4Yn��z
��2<:�q;M�U Sn��Ҳ��,�q$�HO��3K��v2chw��!���H1nӟ��4��
+���)�������
Y-Ɉr��Z0�G�S"���d�dW
���Jpm	Ӷ��]z���e�k��$�V��S�Ep��
�GJ"t���@]⠳��;��q��iA�1'�0 E����}��������eDR��y�������c!Ajby�d��
+K�0[�a���"
���M?o�E�T�"�w:ť5�MS
�7�-��|��b���U
	`�0!t�k���2�o� {B���p��l�'\��R��r`
�Z���ɒp����c�D''E�Nߧ�����(��f7��@��B@G��7�]Iv�):���3�f��0�Ϋd�
�S�D̍
s�L �+��/��>k�B
�OB��2�p�Ii�QJt�� �m-���€,�/#�b�%D: 4c�0���iyUd>Wv�;�yƘf1�J>�ެ��Y�m��k��\�Q�%N4,R�|�2�jƸ-a��;�Ң�H
+
��F�~#��&Ֆ0��%���8��զ(� ������n�̢ctl���������yנ�ԑZF�����HJZ��h{|6�r��z`���Y��<[|�������9��P����kU��Fۆ[���9��v(���u�"�O���B��O��q��Njm�؈������PJ
Q 1�2 ��58�D+OI����L�*�7{V
�����j
prQ$>s⫙��a��.�ޔ��ڔ�o.��c(@�V�^u2,>w�$Lڒ��uu
��ꃏ
a�ݫ��{MQ�-�}��o'���]��&�
O����b
Cn��m_U�R(�vwT��|U�=�ߍ;���3�(vo!B��D$ �ԡ����wTׁ=,3G�n�F��n@�Qv at U�t����|���Uu����k:鈈����`,������.�`p*�q.�
ኝ½�U���<cI����-�ZY	ӧ���y���,$���x�)k
t��o�*�C�aKRũ[P#}+q`�1����:��gO0�V5�i���YO��>�>�տ~��
�����9,�E�i�I�Z�vʵ��(����-�w�?�nÌL���ٯ��2�x���
<-�E3�'�z"N�oWyp�"_�ow�:�m��0�2X�Szu[� 5~ 	?WXXzb cw�vK���Ni�.�:��P��L~� "
���
+�Y� e.�/.?||�K6�smtʾ
B:J��R�j�M�^���E�_ _�	I	w:$� H�=�/{u�a� wV���I�5�5^$D~ak��@a#���Ƌ�	� #�
��
�H���|���*j�0lj��y�
};x%�1�x�E8E��Mo���������I峀�'5tT��[��*nˋyz�,�fޫ�$[��7a8�@��&k��.y�	c����E�@E�3����ոbDYyl5^#*̷y�U>��XM����*
t�
X���w�w�Ϻ�Aƒ��1���� �#Μ�BRƸC�3̩���33�����GkG��r��>Ɔ�|#�`M>�/}��6w$"|���[��]�G�����6�$L7��VvP�4��p��q�E��ٴ	i���'4iZ�n �p#�/6i��
�����PdɧeZ��� �(�����N�`���t:��ď�9	�
��&@R����վ��L���:����?���v�O����n-Q�$w
�����-8�؇�0=�n�pE�@e�[����Zp��HG��Љb��\�'��t���D��\. at R �
�D��g�Dux�a;Q�߂����!���(��)��OI4�c��?Ҙ���z�a����oxÌ�e�b�u���#<Ta^GG�2���g� "Q���h�m9�q�f*������s
�7��14�).����gA�X
�<8��`(�1$�U�p�f�-:�dQ�V���.r|���Jf�
��)��@��5v�E�
er����sć�>ߞ�&�E+=
|B];�}9��*
A�o]?liI���x3�JocO��^V��I:���.��܀Z5
<
;���[�B�)����"܅��L�>>a���12�+c���y WK���S*��"Y�q��5�*��-�B��S��e$P��,d�Ux�� ݸ
�#4��(:�
U&�h/���d�Z�
+��]Қ�E�-L޵�"n[��D��{&��ExyH"���滄;`�
�F?����Zs�	
D��jv�1Az
+զ|{���r ���j�8�����b���0��k"E�`�֜o8���E^0�U����D Dh���!%9umPk�zV�
�Ds�AqSE
T�0(;�5�NW���p[�
H&�J�խ����kA޺�t��
���nO�);a{8J���9��PmO�9f�F��o�>zP
`�h�}
��18��Mc����b/ԯK��

��U�t�^o[
�có�Ypw�>r=�}��-�d���[G��H���[ʟ�B%�.ѶA����÷�,����{�H ڇlȠڶ�IYp�o� )]��p��F��Pr
+9��4���x��0Y.(T�Q��DB����d=�La{�
�``��'Y0 �݀7��Ȋ9<nS'�)�d#�<+n��dyQ�RbT�V�
�O'��M0n& �O�0� th���?�L�dĩ�1�>o	:+�m�mSUwk��0����Gᙻ=�C��X>(s(��:�
�B=hG�5$�w�&������7v6��)b���i�rMU
�t��U~��Tu˯i�
+ν���=��$�ΰz�-�U�&���$����-8�=����=Խ�`�Z�l5X�z�C%�����!�!�X���2`�*�g��c����ӇBn2x���?�f#�
+endstream
+endobj
+2165 0 obj <<
+/Type /Page
+/Contents 2166 0 R
+/Resources 2164 0 R
+/MediaBox [0 0 612 792]
+/Parent 2134 0 R
+/Annots [ 2163 0 R ]
+>> endobj
+2163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 182.349 108.982 194.304]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.10) >>
+>> endobj
+2167 0 obj <<
+/D [2165 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2168 0 obj <<
+/D [2165 0 R /XYZ 86.4 643.062 null]
+>> endobj
+2169 0 obj <<
+/D [2165 0 R /XYZ 86.4 420.564 null]
+>> endobj
+382 0 obj <<
+/D [2165 0 R /XYZ 86.4 254.384 null]
+>> endobj
+2170 0 obj <<
+/D [2165 0 R /XYZ 86.4 157.013 null]
+>> endobj
+2164 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F38 785 0 R /F11 787 0 R /F10 1095 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2177 0 obj <<
+/Length 3992      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�~ׯ��p�,�8H���7^'qjw���v��J��
9�Z�ק/��X��$�
���n4�> E��M����WW_�1�&
�D'����KB�Iu&Fm�v��8�_]g�����
�k���n�xʛ���^4M�p��
tM
mZg�
�R�~���⛫�_.�#�(?o
:�l�Nj~�6;h�n�&s�;�w�X��J�͇�w��M�qKv�L�*M����m,�W�]K�X�򍝒HTht
-4�����lqƙ�Y� c�n�R36�9�#��Y8��o�C[Tmٕ���s�G,ۮn�p1�l��<����V�����n��!�e�q��b��ɀ�ڽR|��̥AQ�&,H��)��C�|FD��?NvŌ�t2n`����
\ޗo`�㲴ܰ�{�2[x����?Fq�Bń.��OwN� �nBC=.[��0�������.��X����B
T��gI�2G�Eq6p��
�u�- VZ�
�t�";��,ʄ�0�T�-OD��N
R+3�q�F#$��9
�To؞Xg��	�q����2q�
��1<��I+V�Ɇ�R~YhyP/�b+�����j_"aػ
�L���,㱄穖�+����q�_��m�p
=l��0Gh3+���~F%�I���O�͒�����/r�I�o�~@I%�9��ҿ���&���Ї��j]����N��3~T1�ͤ��iU��gƧi��~��>ߑ2w}#UMy�'
+��
|�ߖ�b��$�����r.�Q1�2 
8/�S��ۏ��ݳ��D�ZfY=?1q��|�l�n��uߝ��3
P��0!��lo���U	x�`r��M�K�Juh�!Rq*'t�w�#2D���Z��N�;D���mF�	7�W�n�� ek��-���G��m��hF�� k�No�~����<~�:ejB����Hz����V#.�3�[�'�xǑ�y�Yɛ��U	D��[�A��Pǀøw/�\
Ђ��(�L��1��s<���w�r��bϟ[2�P�x�?�a�s���Q���+[�5�]�b �ą��C
�s�x���e����� l���պ�Y�&:�P�ĺ����s��n�v_��Ǫ$hd
V�A�U�
��v[��M�h��4ȹ]�&���e���� C��L%�b�&��<����
sdэ��eIx�lM�%Ӵ�*�:�`R�w����6o���fa��NF�ڽ�w�
t����Á��
�y�]-�հ�m�
I'Y���OU�棜tl�r�('��7yy .Y.�9���+�q!GT@�a/���T���B
l��P��T܂�.kF�
���Б�C8*ح98��L����[�A$h66��4y�Q�p�#�3�'�V���aeRk��o0)��Ts6��o��j<�p�,���؝���K��Цj
�l�@`���9	~�&�ر8֍8�7
�V
�2��S�h�q��/Ly�w�&�懃̃�ݡ���e�v��E����%�9�`�6��\D_��~U�zn��J����]�)���1�qz���N�>8=	���@
����1�fa
 .�/2�N�N"�D�OG��Ѥ��|�\�5��GyX�S;��
��H��4/�����L�

�
'�Љ|��9�.�V�0��4k�C����9�Km)��_�d �`�k��&�9���O��������3|���
�v�\�
+shZ��>���)Z٩�-���kӈ�)��j,�x���&����|�ț�����l;�[J`��ǰ=�;N
(�=�F%h:m�ε�H���U
�
�mS�\�i�#*r���`h�en �����
g|��ӡ�7-dج\��W�y��H��4���?���'e�K����	�=�(~�T�-�j{�ʙ�
�̈́

��.���o�j��[
M·L����O;�$��@T`T��hlBA~�H(Ec�S�>R�C
e
[�U�!�ʞ��Ўɶ]��oTw2��A�>�y%ʎ�^9Q��EƆ�I�	Q֝�����Ѹri8M������)�U��
����
@Kd_)��H�dG�J���n�%<�m�y;�Ip�G�>����4����e�
+ۧ��
�9Y��x5�
�"x�/�M/f�<@
@hQb�� ��h�K�W�i P��Ы�K�����9	�̢sH�[�1�-�}D�|(�[1���e-C�3�z����2`��
D�cv�1���a�u3V�kX<]jA3̀]q~��	���>︺bw�B� WU�j��0��3v��З(�~��6����(�.f��G�`Y �1��x���&���2��̃10ޝL��a��HkL��
9g�������
+�
�}��E�&	@`H	�&�޾�p�2+�+)���g
]�糾��
v&��x������I�y�~���-Sg��_����hv'��E�^❟�'�P�ұ����~�;(��P�ß6(�;��P�GAk0�~|��
�Sp����H�
[�����ɻ����R���P|B/��N��
Jr�5B�w��
u*ڎf�;1�!���q�C5��},=97;L�و��7\��3p8��30Q��Ĩ�T 2�
p������\Fl��a����WEݷ �)��_+i�ù$��>M|�X�I�����
+~!���Cnܨ��q�
+.�$�Ƶ TU��f)A�"x_��F���~���<�]�V'��/_W

+�.ll�P`���5t������nP"ʡ�@���*��eӁ%��s�3QYp�o���p��G��5���J~�Ba�Ӓ�J���(7dM�\�0�ֲ��,8��yU�G�Z��d���2q
�RE@�:�t9�Y��������e'��6��K��� ~�m�;OЋ�2ȁU����âЀËW�A�8
�$��kZk
�'�k�
�
��z�JE ���`
�3����"�tU� q�]J�w��0
&�-��T�LP��*Ay
��zy�|2���ڷ�e+π0'bG��do
���,
��ܣL#
��ac=�7��������
�a�}��z�^�D5
B��a���.F���������	}�V4�6
+z�n���
�O
NM5Lü��
+
��k�Z=��UO� �k�=���Ѕ%:��JB���o��:0�U�s����f���e�r˘e�_A�o!��"e$��L�����"�|h��V�R)S��+���U�c�Ʀ"o�D�(����}�i
�1,�󍟎F�o���Hvɣ��X�ӥRCCC��������!�	5�Z�d���1MqS7�bZ1�8��'�͍�?��6��%,���rɄ���ۂ���x(�����Gò���H��߷^�ΌS�=��ʅ�i�N~��d5���	��,yT������_SU�M��Vz
�f�Y�8
�ʍ�A}�s��~�9��0ק��[QI������H��d
+���/���
ʴ5-�\ԕdI����؍4��T�n΁�
�F�ŵ����ɳ�=�-�]-[!h���l{�
\c����e�4�P��c�
�=���8x!o�v���e�q��E��k
�u���$�:&�J�ș�8�]��`��
�&`��Ϭ���$
�	"���_��Ms,�O6��$���F&�}���w��t��Ѐ7�}CHhE��և^�>߼vT�؊2��5�r:tϺ�OG��HwM�0���&ʼ+�����Y0V�N��,"�C+
Eן�S�U��w>
+
� m�v*8
W�ѹIM�<�7�NjǎMQ�����.���|[_�9�b.�ؓn�̻|�ܟ�i�R��VB��j�R\�1�*��-.V����gW��ny�|=����X��+�IƘ.M�kzQ"煴�U���U{D��mފW�_����?5�9��0ړVny��l �{U�q�qKx�ɮa3?`���E��+/yձ<\St���O��r
�
+��3Ĝ�8�̍"|�Q��$[A(zB��-�b���
+t�$g�YN���2u��:<��338\k��!F�p��t����C�]
+endstream
+endobj
+2176 0 obj <<
+/Type /Page
+/Contents 2177 0 R
+/Resources 2175 0 R
+/MediaBox [0 0 612 792]
+/Parent 2179 0 R
+/Annots [ 2171 0 R 2172 0 R 2173 0 R 2174 0 R ]
+>> endobj
+2171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.942 374.362 401.664 386.318]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.792 374.362 441.515 386.318]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+2173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.963 217.841 222.435 228.689]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>> endobj
+2174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.29 193.113 332.013 205.068]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.5) >>
+>> endobj
+2178 0 obj <<
+/D [2176 0 R /XYZ 86.4 726.045 null]
+>> endobj
+386 0 obj <<
+/D [2176 0 R /XYZ 86.4 318.832 null]
+>> endobj
+2175 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F10 1095 0 R /F16 729 0 R /F14 1050 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2182 0 obj <<
+/Length 1678      
+/Filter /FlateDecode
+>>
+stream
+xڍXK��6
��W�(ϬI��N�6�t:�NI�ĵ9�Ñ�l���xQ�w�iN@� �88q����ݫw��.�"��"ʂ2��B%�}|
+�$���L������AU*|�f���5��Y�0NL���E8N�����Y��
�u��u(~b�׃�f�F���������\��Ļ�GUVM���%ZX�đ����� Su��w��mh�&�$N"�eAQ'QR
�_'3�i^��
Iw2L̶ߧUx�
�x�Yڌ�d��"�w��–"EEp&�q���NNp#[��Vd�'�h&�y��`�����@�`�
�,�!�C�Du.15�*�w4C�3U��v���ȕ!���Fw�����d�?����7�rfr/4y�I����W��`���d�G3�֯�%�|��:�K�9Gx�F�`�^'*l/xN��� `�A0;�
�(Z�9�`^)��|�hg�a�����
�"�@��m><����W�܈a���/x`)x��$��<*�	Kf�Bx:qy�Ɂ	Lxf W�Tg?�I���
+�����<\����x\DH
'�
+
+$Z���8;۰�
��{r�?.����^Pc� 0�2��3n�
/��8����B���X�°���0�ڊ�r=.��Gu;,�X��%������Zp1J%�
Z&B�R1!�|
,I��ld���K��p[d�&E�KK���A2��^�"��zu���ٟ�1ۀ�|bޜYg��x�� ��b��
+�Q��
+4��z�5��@Q�c��'����H��[-�D�፡�Q
�X��Z���>;�I1C����Ղ�����9�p��37y3�R8�e�i��M�*~p?���?��'�r���u܊,|��^��t*��ҞP WU,W���@�s��kyn7���{8��ν�К���d��
��ψ�
�LX�� :ҿ�Y�%=���������F M�0�M��XyA�����LFϲg�Uxx�҇� !F��	mх@#O�M�w��5���]�
�T�Fe��
+f�}
+#�̚�Y%M�<�jN�<z�#!��(���\5c�
>zi��r3�栭fi�e��i�fa����y'�
b��/]ˬ��̯L�]���MP����3���Y7�D����E�����n����i�*s._v��F�^�b���Nk�RN
bx�-J_
�RH�RH���8��i�҈�b5!�B��G`-�uO.�"��a�/c^��4y�9$�x�}
���H��
*�=��DrC�e��
I�A���,��$�%��%��٘��L�
�OՒ���ot�����z#A��m
�'��#���%�m�:h��:3��<6>����
+���s{xS��l��X�4��=����M)]
�[g��� -�EE�C-����QY�\Z�d�`���,���r>���j'�݌_���fƓ�T�Ia�ߊ���a89Y~+X�h���Zr�P���-�I�X.TǶ�f��k
+_�ش��$����&��J�
�D��~�#x�G�Ib�2£��M��)
5e�TQ����u<�7<�d4��U��
 �;,���VUkR��B_�9
+�H(�T��00�EM_�l�R��a��~����V�i!�j_�P��|��Q7p
���N�e|��hJ�
����µ��z6�d_>�9�
��
���N�'�qK�ER
�6���?�?���~�/���
+endstream
+endobj
+2181 0 obj <<
+/Type /Page
+/Contents 2182 0 R
+/Resources 2180 0 R
+/MediaBox [0 0 612 792]
+/Parent 2179 0 R
+>> endobj
+2183 0 obj <<
+/D [2181 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2180 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2195 0 obj <<
+/Length 2424      
+/Filter /FlateDecode
+>>
+stream
+xڵYKs��ﯘ[8U;
�y��^��Je��`� �
-9!9�(�>�����RV�F�ht�͉6��h��H���~��g�ot��N6��M���&U�_ś�j�s����F�ow&K�t���_xM
fy�pM���E�'��C��3��O[�������d��귮nqjd�W�[�c����skt�ps
��9o~���i��#�a��T�HT��3�
�i��"(�:
� `t�}���
e_��K
8�
��Yt{�ҙ,k���L�UW[����֡I'������<��Ύ�?��
{0��jWLܟ�r��v��qh٬�?ζޑw*MB���"ID���O�AX1n���:
+n&I<o
�]�d�
ܪ���bo�h�$#M��!g�
�P�Y�jkiT�-�֙�|��CI�u���ru���0��r<���c���܈yRރ��(Fu��
��@��%R.�����Jϱ>����o�i�q�,��Oh��Yx����[��d����t��d�6�鮯�k�S~��Ͽm�8���j�	w^�"����Z���6I�uw
��-��mI�u���$��t���<y
�ȼ�FS�N|�K�z�8Ÿ�d�%��a��:8���L���m��p� �L�h�w�m{׈Gh��)�f�b"$�T�y���P-�pnD

��]�*&yO;
p��!
_'anp>���"!�[�߿�i܈lscI���[�n������b�=�K�<�4w0�~�V,��Ʒ�����dK�1�y�;�U�D��~984[U=��AR
+������/�k
���=�����>�$E��0�^澅�4��l
��ɛ@|��)���ܷ$:�k� B�� /&(m+�
�L
�2^ ;��ސ��K�D�
d�h�6=�w
����
 ���4X�X*��[�H���8��[^=�=���XLp��49tG��I�:�
+��L�d
x�/�2���j
jc����Z��X.��ޒC�K�P�r�A�K���č�tDҒ-`�O���^���y�����<�ҬB_�b���Y98k,�V3��u�b��L�z�!�P
��>JZ�B
?K�w�
ړ�1�� �wt�˶vm)V�3�f���_#�w�4�sQ| ��4%��߯��~�ܯ8��n�'�[Jn���s���#+
}��<�g�kw�z%O�T&��QV�{
�`��9�P��9f��#�f�)!�3DxI2��=��
3�%�h����"���2j�OA73����-�>e��pƾ�e$P�
K}�����ƻ�
+�?1�6���ڕ�6��2�q6�5�u
���I�PR�{��5ߡ|���U/�V�n�TKaL�R� �@R)
-
'P��Z� �lO�
�xL�d^r�նEC�R���U��*
ׁ��K�4\?C�.��DW]��f]`�u����-��x���ҼZ�h�t��5�*�4מ�&��۹~K��
)5]�
�^���
+;�kP�
)�N�ѩy�	]_�T���� P%f}�d���q��
w��
d!x��0�M1��T���a�]L��nj|`���<ਨ�[	���=�*�
�I�b�\�!�v�fK};�|�	ڧ����S}
ϓ��¨�*���{y��>�v������-A7���	Y
�y2L�<�O������Sh�]��w��B��3�:���q��s5��0�O����*F�ɠ�{8̱�%6E2�� q�������$�K��=������U� ���a�c/�5}(�]�{����;�<�S�a��
c|��
�_%��Y��Z��n�}��^�Qy��?��	d���Li��V�<�������b
�͸�^ F\�l��'�
+�(��sj�
��
+�^IM��4
�l��/mٜ+q�֕ ��Ǥ
%���|tR@Յ�YP��o��,�-�:��\�kαCxx���L*Njd���c�faTq��h����jD�32������F�|���$X�Ř�AL�@��>�ى�p�]��Q\�uӾL◟Ր����
����,?d�p�L�h
>��y-��r� �k� �Si��ѝ���kq�5�Y� d���1�U��P��9h
����`<]8p�޲���2 h^ƺ<7V&^�s����LI
2֞)uDC�9��T-?%� �~;#_x��2x�
��
�+�N�t&c�g*0��
�r�{�n�� ׶�x���}�*ϡC"
��(���
56��
�6�M��
���3��k<�n<`O@��.���Ǻ��#���	TR at 3���x���-���/��_cP��~�/*0j(�
�V;��0�ҥq̻竓����(�aG�v��� c����/
�k�_
��B�W7���g�w?[�
���2�
�y���8Q�s�{��{��q�*5Pk�b�EZ�M8���:�� ������� �.K
+endstream
+endobj
+2194 0 obj <<
+/Type /Page
+/Contents 2195 0 R
+/Resources 2193 0 R
+/MediaBox [0 0 612 792]
+/Parent 2179 0 R
+/Annots [ 2184 0 R 2185 0 R 2186 0 R 2187 0 R 2188 0 R 2189 0 R 2190 0 R 2191 0 R 2192 0 R ]
+>> endobj
+2184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [312.168 409.607 331.872 421.562]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+2185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.539 409.607 372.243 421.562]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.25) >>
+>> endobj
+2186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.361 374.253 350.41 385.102]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+2187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [277.351 338.347 284.325 349.195]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+2188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [306.931 259.373 321.654 270.221]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+2189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.689 247.418 390.663 258.266]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+2190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [335.051 235.462 349.774 246.311]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+2191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.297 235.462 373.02 246.311]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+2192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.915 235.462 415.638 246.311]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+2196 0 obj <<
+/D [2194 0 R /XYZ 86.4 726.045 null]
+>> endobj
+390 0 obj <<
+/D [2194 0 R /XYZ 86.4 701.138 null]
+>> endobj
+394 0 obj <<
+/D [2194 0 R /XYZ 86.4 324.151 null]
+>> endobj
+2197 0 obj <<
+/D [2194 0 R /XYZ 86.4 231.312 null]
+>> endobj
+2198 0 obj <<
+/D [2194 0 R /XYZ 86.4 157.505 null]
+>> endobj
+2199 0 obj <<
+/D [2194 0 R /XYZ 86.4 110.146 null]
+>> endobj
+2200 0 obj <<
+/D [2194 0 R /XYZ 86.4 89.142 null]
+>> endobj
+2201 0 obj <<
+/D [2194 0 R /XYZ 86.4 68.138 null]
+>> endobj
+2193 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F49 983 0 R /F14 1050 0 R /F36 740 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2210 0 obj <<
+/Length 2751      
+/Filter /FlateDecode
+>>
+stream
+xڽZIs�6��W�]冉��avb����b)sqr����1�TH�ͯ�����ѭ5sP5��[��R��z�~8{q���4��%F����*6L�"�0#��"[}	8W�C���ڢ�^od��O߯�ޝ�
�����E�K
�;ϫ��oE���nW���
�ۢ]�q��ه��?�8��xO�f�2������*��W!�I����v+%&`T���~=

Kᔵx�Y™����/�
�f��~x��U��\����XJ�
8'���I�ʲ�D�M���
���|̓
R
��g����~&Dt7�0s�g�MF�M}Y�9��w��Ƒ��i�T��緖�|[\�ϸͯ��+��qR�y�Vۼ]��j�9��1�wDP}�l�%�[T���]����չI^�V']���"�,�<u
�u�
�r��#
g�r�l��&Փx���
�<|	�t�Rw#�����^������X�T�SM��@��a��>����
>�d �."_�ɖf-�n0r9��
�	����o?�)��(�����
+T e�yF��߽)$Z�;i��2<g�L$rq4ƒ#�G1Sp���
� )Y����ߢ!�%����sH�� i5`���J��]
8���D��
rUe�1	5��$
��ަۣ�*]&#�z�N��bhJ^�Ȉ.�.-K0�vM�	���P����5��$��萃X��E�/z�
��3���5l�ז
{�p
+���ï0�`�m
> �m��\M�-��H�_N'��!V���R��)1H�0<3U�6*DE˹ɓ�12��.-���֛X���@�d at Q(|�����M�zT�\iz~�E�E��@w��(
]���$U���QV_m�߶4�6t��
+=�+�4NՎ��j��
L��s�8��II��0�&�t-���Z0#�\v#�y����״lh-�H�h�6�}�	˖�{����}����\����;X۷���8���t�tP
"`r�/f�4�̘y��\˧I���D�Y���iH;��$�xx��X�	j�I�h���&��
��3֞p�*%%��9�a4�"[
�=�T&�p�.��S{
i��s_mG':7J�&^r�a�Cy7c2�S �p���J��m<��zTP�A��	ܮ:U?J�e<ԏ�^�_�(&8
%�(r3?�׻
�I���\|f���OBg|8(v���*T�Lj����P,��hz�[}RfB�,R
+�Nd��	-Y

{�t��?}�\�L��U.�$�p�����<$���
+H�2���~\��oiz��j6��]��6`�=�FK/�W�΁��J�� (��
���$l��sdy
��m9�x9�	D�8^��^�뢵�����6�P�m�1��;��}����;���p�
	&x
��F4إ6��{qaj���H��d��\ӓ+�
R�1>�U6�N�|�YJ��C���!Z
���:ܡ�I��C@�&�T;P
)�����s���ނ���Dۧ�GSt�Y,�<��'ҡ�$�*��сm9� �v[@�����<�ȃ�����*o 
��XT�r���аp�I�L&	GR&	�����K�+�Ll&)��YS ۞��!�>�ٱ���]��ɶ-.{�F�P�Q��|(6J�ێ�2���_,Bw>J����H�
��+�
d���9�*��&�|[C^���
k��@�X[�D��Y���=������c4���}�V�Ɔ�?<�����{� ��6!_��D��.�u5�c��w�a���N
�	c*q���X�7�C���
#4
��G�
��+�h$7#W�J�0\ ��\��;a�ԥ�+æ��t+�'���&j����2�v�����.�81()e8˹��s�<(,��2�L����T1:�0��u����n1�	�U��#��
+�{i}^X�|%.�Xr��A�߹�K�P�`"��1D�M��෪,�R�(�(�=K\J��*5\ ��5�l-ţ ~z��2
+
+6"�MTuG���ME�~�>φ7�"�D^�6�H�BH"�S�,Z���
�
O�@��C�����i.���^��*{��	>Um������I�,��Ca�,����[l��qI��{�Ŷr��M�6�kUR@�H�":�Ir�\�Jq�� _% Զ��/1�IۘG���l�h�r�Hأ�KzN+� �1D���V������4
�޻�b{�I4�0c3��F�[
+��o�M0E5A��|���(Lp�u&�k�d��-�M��Ze��t��v�(��f���<h�q9��'yY�|l.+χ������9
� @|ڳA�y|���U�	�Bo N�����Q� XQ߶ϻ�˻��fpv̻�!�
:����zy
+U�c�
��ç���c)O�늼
���U�\cc6�� �����:5`
 ��2��q�u/z�( Q�\��cq���d��ѭe^-n:g�2:7UI�~��78��퍢�N�N�7Ԓ�di��!s":�P�g��$�
e‡�	��$���n�a�X&�!Y�
���D���EJ�=�n�~$\������S
+���
�������C䙙�y��
�oڝ>	x��g��?�q�?��}8�����~��U
ne�`&u
H�8�����L��Iiͱ����;+���|,B�sDƔLM �]�NfN+�G����|�^����������Jw����oP�짢}c�	��b(i� wyi}���8�V&7q��h])��n�+:�<�
��i=�1�Bq�@�:SF���|t�pq�?Ӡ��
+endstream
+endobj
+2209 0 obj <<
+/Type /Page
+/Contents 2210 0 R
+/Resources 2208 0 R
+/MediaBox [0 0 612 792]
+/Parent 2179 0 R
+/Annots [ 2202 0 R 2203 0 R 2204 0 R 2205 0 R 2206 0 R ]
+>> endobj
+2202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.125 486.315 526.596 498.27]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.1) >>
+>> endobj
+2203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.071 462.404 396.542 474.359]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.6.3) >>
+>> endobj
+2204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.486 399.997 273.957 411.952]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.3) >>
+>> endobj
+2205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.259 198.376 245.73 210.331]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.4) >>
+>> endobj
+2206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.929 112.058 443.4 124.014]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.4) >>
+>> endobj
+2211 0 obj <<
+/D [2209 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2212 0 obj <<
+/D [2209 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2213 0 obj <<
+/D [2209 0 R /XYZ 86.4 684.615 null]
+>> endobj
+2214 0 obj <<
+/D [2209 0 R /XYZ 86.4 663.054 null]
+>> endobj
+2215 0 obj <<
+/D [2209 0 R /XYZ 86.4 641.494 null]
+>> endobj
+2216 0 obj <<
+/D [2209 0 R /XYZ 86.4 619.934 null]
+>> endobj
+2217 0 obj <<
+/D [2209 0 R /XYZ 86.4 598.373 null]
+>> endobj
+2218 0 obj <<
+/D [2209 0 R /XYZ 86.4 564.304 null]
+>> endobj
+2219 0 obj <<
+/D [2209 0 R /XYZ 86.4 543.298 null]
+>> endobj
+2220 0 obj <<
+/D [2209 0 R /XYZ 86.4 521.737 null]
+>> endobj
+2221 0 obj <<
+/D [2209 0 R /XYZ 86.4 458.777 null]
+>> endobj
+2222 0 obj <<
+/D [2209 0 R /XYZ 86.4 358.059 null]
+>> endobj
+2223 0 obj <<
+/D [2209 0 R /XYZ 86.4 308.161 null]
+>> endobj
+2224 0 obj <<
+/D [2209 0 R /XYZ 86.4 257.709 null]
+>> endobj
+2225 0 obj <<
+/D [2209 0 R /XYZ 86.4 171.391 null]
+>> endobj
+2226 0 obj <<
+/D [2209 0 R /XYZ 86.4 108.431 null]
+>> endobj
+2208 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F16 729 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2240 0 obj <<
+/Length 3478      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�6~����J{"����}J��'��jg_�>�m��.!���_�3�ERPl7ݳ�@ 
 s��&��Y2������W����"w�ͮnf�f��\8-gW��/s'�b�3=�?f޾_h5/��mi`wC#�]I
��l��R{ST[�7�ۦ�,�JJ�ϥ��߮��xuu��B�v��
�[�7[m.~�-��a��Y"t��������\(hճˋ�.��q��id������R��с��bi���D���p���y����)�Y4��M�]�l�ᦿzmF�8%�Ѱ���]���i�Y
+8iU��
(ˌx�KTk�_��HS6ԋ��=�Ӯ��B����8�h��
��^�y
��|C�4ewh�%ϸ���"{_�,6�А"�̣7/�ݔEW�8=�UB'�aW��eY�Li�G�"
���&17�,�H���W�P��k$��/~��]�˚�f�Rîj
����v[1~e���e�l	ȍ!�J�gM�@� �~�eǚ�G�EM
+]m���՜v
6�%����^R8�����)W �O� �.�:"-�vbe�H	������2�u��]��q��λ
�zM�+��%=�4�
ϸ+�����8�
=|\X;/�Cɔ�-��0�z�h�@9
�M��ڑ�7��_1[:��֬��
 #��w��BN���i�Pp$�p�j�P����A�� Pb�x�����H�+��\l�;Ж�f_4x0콡�(�:�
MGz������U�5����b��"�%(�
J�&rl���1�f�B'9@'4*Rf��St�a��i
��!:�p�y?�K8t���B�t�����
+�L��kb�6
+F �<�_G��p=9
��B5A
��y���u!w(u�-
F�vW�n��7h�j�>Ԍ>S<�C<�Oǣ7۪����RK�!�N�q�����P����~c���	�1�����ީK�W����
+ ���Nh{xo�T�)4r�@�G�
(�N0���F
�؁
+�,�mLM*�Tm�Wn�^�u����G=���b_�ޟ�X�	c�C��	�3�K�P�>e{�z�.BG;�zʶ.��y�5��<�� ҂p1�c��d����O	4&
�r��}��q�)��%"W�3ﻛ��A�)]�0�A��r����∷̌��C;�#uwEG����y���v�
d�i��=�=��X߹���b�����C����`�Gc$�;�D|?��4aJt��ɔS|�^���𘻰 ��f_�^�y�d|�q��gG�kԾ?
������+<�x�I,��5	�ֈEu"9�n`�hY~�

+��.O��ə��=�x���'�ӥR����C�F
qg�����(5���	
x����~8릀؅�)��ա���y�2-� ���uuL �	M�0tt�$
+աg�
=�
������[?�,ou&kp����'X��f��L����K
�]F|��c֋XUݐ����D�#�XL?�{o�-�u����?X��#�Žt
8���q�I0���n���3�j��
�
+�!��1�KG�L�W��3
r5�jP1����1���MKu�@���y,'�<�H-�	Ȭ��ޑ�
+���z�}���)�ļx`:�%"`@t5t
+�:�6%���~���RCo'Ya���m�I���t�'���-�1Ҟ3
	���j�M#Wb���˨A~����
EȨ�
�L���nj
��]�Q��Dc�\��3�T�G���Z����Au
g�}n�{~�$�3�3���
��ׇ��쇲<3�cFP����Z�hl���>!�ž�3��_^cѣ@

�c�~Rv�F[�v�nF9��H��3�bd�ڇ
��ɱ��Vwz4�0Vۘ1H#\"��~8G��>)ْ�
��*
+/�P�A@#A�aޖ"�6Fh�3�{�D�=�!��T2P��0����M��cT�T>�k	��

\=+<B����K�F	ត��]EE�Ya����nЕe��%�h��;$�:�K쾴>Ύs#�$R*���?����X�<n�b��B���RKaL:����K� 5VƬ�B�K����Ȓ�3����%�	��p�˫W?F
�%�f�̦�J=��}�"W��I�}��d�H{��� A��*r�ū"�����Q��>
�L;��Q�J�d��s�RN�)'�(�DA��
z�-���6
�hDY��F����և@<�t m��r
+�G���t
*���ƅ��%�{�N3n)�0������8*>�cO���i����O�ү�L�⻒qrc �q6Uk��J���s֠��>�V&?ˁ��QA�
+�b��TX=t�~
��j?p.��@%�<]�
3>��G����?
^����f2���nV�
� 9VO�<ț��S �M�������]�0�D�3�U�A4�yr<�?�XL'�:M�&�|�����L�eIIħ�>t����
i"Fؿ�aa�"÷/&�Ō���
ƚơ?&Hk�
�O��rU�m�y>��
@cU���1���H��R�8���ګ�> �,�c]�]sXu;Ld��*jY�"���x�����v+Ա�a�L #�0�=S�=y�b����~��Y
7;�,^7e<�6Yo0�P����D;�1X���
N <r�8�������6Q��I ����QѴ��0����N
U�������T��Oƅ1������:��
\��Y��O-AZ�WJ&�VA,�k����i���͡��#f6I�
C
$�'�_�@ت�������ҵ��Y���J��_Xs�%#t"/���
;�U
8�X3�I����9��0�B�ID�Ob��u
�lX�[��a]�.N��A
�>
�!=��f.�O
X�X�uXZb4��e/�M?��x�
��M�G:������:x�������i=���7������+���Q�p at A�ў�>9�$��� 
�/�_\,B�O�/��|JsS�x��`�&�f,Gf�R��+b"}
+oʥ��?� � ~�Gӆ�`m
��Ɂz
�
��j��� ���X��[
,Q��������wU�|Uw��
�m�뚇��dΆ�{�ox#��MY�����gQ����x�z��
����~�I�Ԃ���
,x�;��]�ocp�xu�`TF/
��I�8Hi�=�C��-"��/�<���Cw��
�:|����b*
(�`ٿ��Z��Q:������ ��^�q��&��"\[5��P(��<X#���O8x�~@����Eՠ��lY�Z�j��yǨ�8�sg���6�Ԁ��]Y���
�iO�a�a�/��k�y�|��S�I�R�ՑR��S�
^�Y�ج�ˣ���6(�C�U��{&��z�G��ۖ�Sŀ��Y�u�6X7���QS��ԊsKon�fof�(�|���M�6j!�O����vGO�a�iB5�z�V��c�ai��Z��K* 
����e�VJ�J䰑R�a���cH���b������0I.����a[�S�_�
?��}����n���t����&1�����/g�q�
+endstream
+endobj
+2239 0 obj <<
+/Type /Page
+/Contents 2240 0 R
+/Resources 2238 0 R
+/MediaBox [0 0 612 792]
+/Parent 2179 0 R
+/Annots [ 2207 0 R 2227 0 R 2228 0 R 2229 0 R 2230 0 R 2231 0 R 2232 0 R 2233 0 R 2234 0 R 2235 0 R 2236 0 R 2237 0 R ]
+>> endobj
+2207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.092 676.287 205.564 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.5) >>
+>> endobj
+2227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [484.545 607.942 507.017 619.898]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.9) >>
+>> endobj
+2228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [312.928 540.151 335.399 552.107]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.6) >>
+>> endobj
+2229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.018 448.45 433.22 460.405]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.11.1) >>
+>> endobj
+2230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.199 356.749 310.671 368.704]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.8) >>
+>> endobj
+2231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.036 277.556 448.237 288.404]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.11.2) >>
+>> endobj
+2232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.453 197.256 365.925 209.211]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.1) >>
+>> endobj
+2233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 100.483 101.233 112.438]
+/Subtype /Link
+/A << /S /GoTo /D (Item.120) >>
+>> endobj
+2234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.31 100.483 122.265 112.438]
+/Subtype /Link
+/A << /S /GoTo /D (Item.129) >>
+>> endobj
+2235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.486 89.082 159.209 99.93]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+2236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.278 61.606 101.233 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (Item.120) >>
+>> endobj
+2237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [110.31 61.606 122.265 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (Item.129) >>
+>> endobj
+2241 0 obj <<
+/D [2239 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2242 0 obj <<
+/D [2239 0 R /XYZ 86.4 667.276 null]
+>> endobj
+2243 0 obj <<
+/D [2239 0 R /XYZ 86.4 598.931 null]
+>> endobj
+2244 0 obj <<
+/D [2239 0 R /XYZ 86.4 497.765 null]
+>> endobj
+2245 0 obj <<
+/D [2239 0 R /XYZ 86.4 404.127 null]
+>> endobj
+2246 0 obj <<
+/D [2239 0 R /XYZ 86.4 324.38 null]
+>> endobj
+2247 0 obj <<
+/D [2239 0 R /XYZ 86.4 268.544 null]
+>> endobj
+2248 0 obj <<
+/D [2239 0 R /XYZ 86.4 176.566 null]
+>> endobj
+2238 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F16 729 0 R /F11 787 0 R /F7 1094 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2252 0 obj <<
+/Length 3378      
+/Filter /FlateDecode
+>>
+stream
+x��ZI������Q��l$A�� ���L�3ݓ��l����6�Ҍ;�>_a�&J��(/��P
����a�G�����/oT<JY�xt{?21ӣD�,Vbt;�4"��HΣh��*V�e���ե���
}����t���_�bEC[7�&_UŶ�\l����Ze�ˉ?VEu����o/~� ��D !bFǣ���_�h��F��Ԍ��yˑV)�h-F7��
��Hh�t,k��T0���I�/$����Y�Xdw�
�%��~��m����742ϛ������f����#D�4�,!|4���k*��tL�-.���5Zb<ˈ°��5���xÏ%ɴ�
��aʤ����6�Z���SN

:�����|�*�k�ҙ��/�Ҍ�r�:6�b\�!��
t�d|����
��H�q�?�uH�k��m���XkPn)�z5�Y/>�o�y�	�
+_�5�t���|t�
>��h�bɌJ �7���zI����d��6���lF�_�i��1O��d�����s��9�a:
���J�~���Ʌ:�k�cEfi�
+
W̙�%.
��՞�"�T3�]Nb��o�X�PL�؋ś�@�)5^�ӯ�4�Ó��#����_]@�
K��#. J�cS���Q�b\3�cKp������HФ,1	VJ��Ő��

1	���u�{�?��gp����#�j�_�v���
ӱ`JF�,�/2x�^�[����3�x1��� ֙H��Ǹ��R
�
+���e`i�
+�r=��b絹}�� J���^{ʼnH4K��΄��]�U^��b
����'��XXS��>jn��Ts�,�#
���x7-�3�k}�K	�0��%�3�a��;:"��:3v���y/Cm�
��
�F�� _�ih�[W
+�I�ɺ�p�J:�s��s���L\$E�:̤�0�K�l�P���(j���&��~B�~۴��
y��V4O�d������k�ʷ^	�=��H4K�|�4�	&Cc�k��t���'a�֜�w���zb7���Ȝt%
�JuW��~�����f�{Q�~�	VV��"Lpn[�S�)wZ��hT/�f�]�0٢�w>g]3�x��1�i��[�a����<Ϡk1<#|J$�U�5�E�	Fڥ$BM0�#�C��L ���P�e&������Z���Ӡ�������xy�PMO���𺙶�6R`;u��P�g���l�kP_	@X:
D3RA;���b���W�b�qO������H�lyїeS
+�c!m"�f��a�<n����p$L�
E/֫�:
+���T�#aU�#�!0:��w2�Y[��
3�\�?���
V�|S�q�/�4���<������!/�g;$v�{�آ��������H�	���@���}��3�|V�̅�+��
��doj�N
߻߃
ۂ|kh97l��
� >!㖝�f��i�WD���)�U�J'��4�K	�5������~��j�v_�(�w&s0�� �J�sˑ�'W�1���(J�JŸ��_xwu�z����vF�$�y0}���R��&s�X�������zY
�N�cD��]1s���rYl�)Al
��6
�˼>��(�.�Typ�]p$d���ިH�����yi�e
g$�
+=�km��	IYwNQ޸?�!������}
q�0����?��IS)��D�����c��l�[=�nZ
�y���
���h�c4P�*Y�7�CPD���B�A
	G�K����R�{�s�����77{����h�"x�d��8 ��P�f����w�'��<�
ǥ��$.�",����߽~7��Q,Œslj���M�L��
×�֖<u��d����"J����
�W�OA#�8�YAuM�LD<�^�N���*���9�BK%!!:��sl�������۷{��	�
�7 &yzj�w0��.5>�_ʸ���G�?au� }���^F�9�z��U�+/�a��aӠ�Φ�?~�=���[�.S��Ґ���&��G����o�!C!Ç�b��P\CVĥx�
�h��ml�Zo=5�ۋ
+u��!\f�p�Z����`/B|��|
�
+�߼�|�
,�$�iz*:�ДZ���W(_���9-#}ق�X�����86Wid3�sp����.�1�
΀G��V�k2�k_dl�:'�ó�PS����p����|4����
f����j��~��®
W�B+i*��u�=4f^��0
+%���h_aDG����<����%��b�3�8=�Fc��F�æ�6;6.;6�͠
3�
��	a�(�������b2� kd�m�܄Ͷ��枉|W$u8��'_tU�j�gr�̈��WV��:�3���N���3���9�!���MI�zȩ�,I⑒��R�S�,ꥥ�e�$h�]
��1_K)Mݴ��>�k���t�Vc��f����/�؇��'
������C���U�L�x�
r[�n|�m��i���I�+��
;p�'�n�q4
�,R���<����.��HDm�}�\�A~�������#������<�}���yN�/���~�W4���"�wx�/|��F������X
���
+	Zܵ��Htɀ T�l˼���F���Db�S��8D��W�i�~5�2e0�1��IN_����vK*i9/c&"�u�.�ҋ��酽�۹�.�n�֝�-�/178B L|l�
�Bqx
+R���iKg���.]Q��Oce��
+�U����#n��V���*I��#����PM8~Y%9����S*�Ͽ���b�Β������i�U	����@,��.����e�Z�U4����6����~ͼ#u�V�»6�>P�N⯼��>1p��=n���V�Ha՜P�g�>Kq���tz��j�]
�*M���*��R.�Q�!x#�<���T�Jx����x:����8��
����A�T��G���m�S�Z Q��-�����{�םeOK ,��9}���ջ�
A|�
�S�:1��(͗�T
E�M�{���8$��3�1O����20�#��_YP�d��M٤��8
+�}����|�o=�\2mA��B��w����P� S������I�-��Rf���)��
В�F���/{��C��[w�\_��#�SQ���:�CA��*��LI�r�?�ӉU�G��ɥ��
���0Uh��}Z^�ѐ��3���ц{��H|���z$�#Hl�e
��`���[F�?�Dx�Nx΍ԯ
1H��
	y3��ś2ϟ�;���=ϴi;�rCӛ�k|)���g�4��'_C�^i���>����#y�M2�Ȕ�̎��*��'�
Q
�
�ND$�=Pwm����[�o�w��~3#{/?$������)co��C�'��yc�S��C���%ro�'-��ӊP}�K���8H7C
+endstream
+endobj
+2251 0 obj <<
+/Type /Page
+/Contents 2252 0 R
+/Resources 2250 0 R
+/MediaBox [0 0 612 792]
+/Parent 2179 0 R
+/Annots [ 2249 0 R ]
+>> endobj
+2249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [344.764 448.717 367.235 460.673]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.6.3) >>
+>> endobj
+2253 0 obj <<
+/D [2251 0 R /XYZ 86.4 726.045 null]
+>> endobj
+398 0 obj <<
+/D [2251 0 R /XYZ 86.4 701.138 null]
+>> endobj
+402 0 obj <<
+/D [2251 0 R /XYZ 86.4 678.52 null]
+>> endobj
+2254 0 obj <<
+/D [2251 0 R /XYZ 86.4 611.416 null]
+>> endobj
+2255 0 obj <<
+/D [2251 0 R /XYZ 86.4 293.666 null]
+>> endobj
+2250 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2260 0 obj <<
+/Length 2927      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s۸~���SG�D(q!@n��\:��M�k�/�N���ITI�Y��� �iZ�=�>�I ���
,>/���ξ�:��[�1��Ћ��E��Z3-��j����L��d$�ʴX����|ŗɧmꦯ��u����?�
�2���g�s)��{S��2��۬��;�j�l��
s��Zrn��zw����?g
D
^�H��zw��`���w���8Z|��v
%c&0�..��qx&��S���'�Y`�f��a
/t��ȹ-�Z1�
��Uԕs�Ld:��$��닋ͯo�4
����	������ƨGptm%��6��J8^�q��7�5gR�x3`�_Ad�d̵���5N1��Q-�-�c�
���O�.��l�r at t�;�e�$>\q
ɇ���i�.��}�����/�n�;�i��V
(�`N�z,���4�,м^y�5�۾��'yq��E�M�t�W���S�>f��빈�I���A�X����Ri'�E|�����,�+����C/�O�1
*���#��"���c�
Z�d�%
&��:�a|
@0�z%��|%@�
���|ܥ��r�$i�$%�2�o��(�|D3bI�DoHҖ,ޅKnb�&,ۜ㓤
3 $�L\���E��M�~q�
0c�y�
�­.��X�I��[� K���Q M:X����
+��e��
+E�*R�~̆2�u�
x W>����Y��y¼��Pa��A�f}&`��L�L�P�7�7�}��蓥-Y#�
�^�
)����JG%������8jYpO�ai��Acn��pvΫv,�5��N����V��dM7��Yv
�Phv{�h��y�y�<$�ԡ�
lys�=cF��LЂ�
+��6��M,O��sY�7�����t�:�?X�V_��A�3�\�w������1Z�I��oBڧ喧�� O�Q!�����錇�I�
�H����3#鉧��Q��z�Ʉ�0`g�
�θ�َ�}�o�L���,��Xҁ4�����H�5��[���$H�#e8���MDKܩv[{�'
k��]�I_L
g�
?��;��7�q�q��ʉJJ��H��E���!*��o�l�tD����8�!Y�ˮ�n��4o?8V�Z�C�����������4�R3�E���G
ǡ��.�,_� ��lyJ�9���'��&�&�%��� ��Mp��{������{b&C�R]��)e��h���]�F�c��?��?9a����ުk�n^|%��� ��$ꑝUoW���h��
7Y�K���
�a�����w�ݸ�h��=���d~o�݅BV}��TJ���.R6&���1*
}9�����%
3q�u�˴z�_�,&��W
${4C�{��E0_�(� �j��m��𰿺���/u �(K�K��Ji5���)����7�962��l��p��}�(F$�j'ۗUq\W��ր̈��Η��6};*Pf
�Rx�TS`��2� n��<����
�)�Si����AC*����T��ى%�I�:i�\+(��F1>��F�	���d�3F�E�^H�2�u*����6G.f]����F��
��TO�i���-�@�%QKڷ$��JoT�"V���'O���pCN� �!՘xhJu�
��s�
|7��L�-���GE�6�4��4�_7�+."*�/���3֌�9
�ǚ��D�o����՛���V!����R�Q�)w���p�r����\�2^��q�FIp}ܲya�[ px
�"L��˟E����Sǟ��4qh$�9�,�"�k�}���� )dq��W7S��Rmog:�+����'s!P�+c�\xT
�[̂�R��cb���_�s���,J��~�Eq�����J���>�tFL V?Ǚg
+iE�̋��f�	�K9ƒ��)�������WU���ӽ{�;�ue�*�邒
U�
+J�
ʷ籲���uw�6g�
�v����L%i�#��Eߌ|"
��pA��t�۪=�-�\��.�&�{e��|��d3� \��mF�2b�U]�����t�sY��껴��D�7o�d��g�?�"Hh\8��A��C6��u"�I*?S��n
�ڤ0AW(�D�4d�o��i���
jپ����4q(l��
���}��
�,��=۷)%ꆎ�"�x�d�z�rQ���=̿'6Zqo7;� ���|ɰ�txG
Ov�
�P/3��� 8w=,^[�T/m%b`{ �
��:I�`SV(D�M�l��-�Ր
u���tq�tes��̈́��m/l��S�*=�lb{$
<�N+
+$�
"ڶiZ�}sP��qM��f{W�9bl8}-���nTG�Uk
�
��mRM	�x�O�k�4��wgm���la�[�
�������1yHJ��׬���l�}�Z��'

��
�˶��\c���B	�?�F�v� ^���	WFc ��KK;��
z�5^N����^�1��-��?5
#�$
�s�n���ӐIW=�0
B���'��.a�
��d� �ۧ&j���"bw������+R15�W�aL�:�[o�Z?���F��˜�_$}�7
=d_���#؟���P�d���~���~��c� �!�~RE���{��l;�H��c��&���3<��J�/�������H@|�_$ă׽�����
+��&j��v��$�����ث!۫F]��N��[�&������%�Mbh���0S�Nt߃���'MwҸ`l��.
����
D��<G]�9*P|��&��M�q!
�j�B��`�_@!��]�&���0U�p��

�	m��7�Z_��|���&sV���Y�;
��d7�oۈ����/�����`0/��Z)f '`����Z�`��sW֐K�`x�}�cɹ�㱢�{fQ��@����7�=zb4
f�O�I��������H~��n�
+�ݼ�D.|j)8�! 
�j9�qzA"%�y��n���U��d���Կ��m=�:
+endstream
+endobj
+2259 0 obj <<
+/Type /Page
+/Contents 2260 0 R
+/Resources 2258 0 R
+/MediaBox [0 0 612 792]
+/Parent 2265 0 R
+/Annots [ 2256 0 R 2257 0 R ]
+>> endobj
+2256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.719 257.905 436.19 269.86]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+2257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.979 210.638 500.953 221.486]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+2261 0 obj <<
+/D [2259 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2262 0 obj <<
+/D [2259 0 R /XYZ 86.4 701.138 null]
+>> endobj
+406 0 obj <<
+/D [2259 0 R /XYZ 86.4 510.787 null]
+>> endobj
+2263 0 obj <<
+/D [2259 0 R /XYZ 86.4 448.33 null]
+>> endobj
+410 0 obj <<
+/D [2259 0 R /XYZ 86.4 292.995 null]
+>> endobj
+2264 0 obj <<
+/D [2259 0 R /XYZ 86.4 185.448 null]
+>> endobj
+2258 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F38 785 0 R /F14 1050 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2269 0 obj <<
+/Length 4200      
+/Filter /FlateDecode
+>>
+stream
+x��;�r�H���
+�-k�Q��ىP����V�$�>�vL�$(�6 ڭ��ͣ
+K��fϼ�ԑUygVŸ����_Ͼ�;��
+g���2�ݭgq��Y$/Tbv���2">_H����&/��*��7?�+9���'5_W57.V���Į���fe�����ŗ�fT��
1l���׻Ϯ��~;�%&�/��l�9��W���g���x���mfZ%��V1�=���o������ф�<Xv&�Qȧ�۴�L{��{=��}O(xO���|
;YXyq�혼ly�t���2�|�<�F1�Az��\�˴%D�s��q�S�������9u&�*���x���GM/��[n5m���Z��;��?�
#O�n�o~��'�$�1�RE�!2)@`ܑi�,:ў�,�o�]��G�B���B5[�%�M4\�$�?�
�����"b ;!+	
N�k�5��~�G�V�mV��x��������-/����:K�8�![�����kZnma�)�A�� 8* ���c�>5�{�d����4��2v�<c��0/BK���9X�JD
Go�:�dpF`�
b�
FMD��g�Kɛ�������͚��W���J+:�B����d|�:kw5̑R�S���t��+��{������9h���e<$��%�PƔ�t�ؓ=�=�����DN��O �־��ñ;��m�	6
�9u?~Bԕ�R|P��	�]ax��|���J�Jָ\��r�����S���������O��R
}�m�W%s���HLD3+
+dz!��Bc�M�����
+)|b����4NJ��E�-f*hԬ�a�
�Pj��w�g�e@�d�Ou�^̲Rc����ħG�lҖ߲����l4By�6*�\>d�����g�y:�n��Y��<�*�#h�JdүapC���k,f��q�� ��N�1� /l��`o�Vo�*�)����e����d>"�	�-_9%��1�����k���t&�r����p��"L�h�ma�s�ȵ���{���u�:J�n�F |4�����:3���	Qr�]�Je�hB�p:ɴ�5��FN`

�:O?�+q<��D����xב'{3�_Nya�qڧ({�yiv̉�I���Ձ�I�
+<A
ԍQ'O�]�
Ym����y�
zt�`d;���r�U�&��^���
!c8|��
��y�E7�5s�����'�	�Ak��F(�͇�D$�rl�'Bh�Z�hҢx<�@
�'
�Q��i ��.�T���J��'�/
+�!�h�N�F�g�#if`�
���k��5�W[P�q"�i���O�h�
��l��ǦS��$a�����
�ld�1�]���'���Sܱ��������D
��%`J�e��.'��!��
#�^����!�oԧ��ӽ�9�͋�:
������)���*
+�	�BX�(�z��<VT��
�]
���4/c�3���h�ҋ�N�~7V=��޸�7{e��ڃ�M����K$C�}c���@���,@����_`@O {@ �z������v�[(z퀣 ��>) Fh�e�lu��'����
�Pȓ
���Tлۻ�
`��N6�c�7Wwn�OQ
G�!L'>Ȳ�C4��G�G���rC�� �T�A[m�ݠ��z
�—�| ?<
ۂ>�C� __�9�ƱA`w
+�	BK&P��W)��E���j��]	ުyb퇍���N�Vm�Y��6��B�Sr_�@~[����0m2��� ��WS
�v
+��J
�B	��̠Q�F0C��&��|�pLm7KYF1�v��}ʨ3 eݮKW��v���C/���vH�B�����8�V���0��׬����M��
�F2���c�U�q!Y����|�A8t��U�,��V 
K�G��D���$������h��c�I�d78N|��荞>e? �9G�n̶�p��>.�A�l�f������~2��������	� �zύ
6
�w��掦!Y2�O"ߔ�ˡ���J(��eՎ|���G�h��ծ)�Q@��*��LTt�V�!(�0<	eC����K�ö|q�1�N2���w�(
*�����+���*�y!<6�i+�S.=��

�I��p\
�x�ϸ�Jz�?ƿ�:�P�����4Iջ����v���C��>\�m��c�^|�Ծ����\�����/�՞Z^�~!�ٕm�k���
�W`8z@�h�}>��%��N~ܙ<����V�|I������K.
s��
F���Z�(D=��R��g<̶' j�v���v�
��^\^
Ƿ2��7��oY��:4|�f��ݥ4���rW�Kӳ�6��ff��Z�9f�sr
�
�M��o�����k�8��c�
����p���9�����;P�uC��/޼�ps�R�wU���0,ӕU [...]
+G�5_��ɀ�x1^8o�sK�!�P�^�wÉ���� "�ݜ�+쀨��\k^������*�d�ǩ�Q���
���}��M�Nrl
+

{�a4X��իb	{:��R������??
�	�GP��
�sY�&�B
x��K�062�l �4�B{a��

�O$���>
lZѠ���
��b�������;�P��Р1��?J4��`�^&��d4�R�BA��#u�������۫��l%^)�S����b�X��.g�������,����
���
$�&kw[��bc~�!n
b*
������:[V�3����㔅2����/R|J ǝ���T�����W���p-q�`�'�eb�+U0!.�va
?��'C`l�%/���'�C�����E�*b��9-������)`�����?��i���'wf
+�e�f����1�
3��$	
\*���ͻ�wO�� j|��gdt�_ V��o�MU?r;-&�y�%D����Y��M�^��䉗��mk��Ͷ�(�<�,.k���2
� ����kWM=QM�U
��)8{,'���+,=�^d�Q<��f,�4�>�Q�iw�ޘ�M;���{_l!�-��.T�l]���y��u�VJr<�.����(m����7|�7踇�N�f7�� �� 		D
���
+��z
��0��
��UQ��#꺃G#��{�D'^ܗ�PM]c�OW�1��l��T�݁+%��*�"��
+���޵�$�-{�X������c�157��_�򼐆�߷�s����]Z���).�.J*û�nc.h���0�1 at nS~0=�d�m��:%� P̅.����C�>����PQ_�m���.oHO)�(�
��&_Rm�f ��y��XFNd
�@r�_�()�����\�sMR[ҋU�̔r����l9��
�u8�Xp�ƕA�.0e�й��Ms���7YYa���?�x�R]0t [�i��NA���}�M	��ژɦ��̈6�j����/��
<���jR;߄�����
��֦}��
S�O��p��S
�ųZu�u��~�>�%d��38p*� ��<5unN�V:
^v�.�M
*ޅŭ����ccc+"0ʔ�Q�_�ff��(M�����^>-����	��yP�
h�WЌ��_e�Ȉf� 1�
>h�&�3a��P�s ��>Pi�z4y���©iҢ��)d~���2/L  ���e�ѼH���EC��c��O�c�g�B���	��"�_��x�iͣ�j
+�Q�H#���N�֨ˬiP�
+K0M������ۙ�����_c�G=�t��U�[�܌)��>H9�Y�٘O���ј�_2���}6��,�F��Tpj�GL��%�:3p
2�ݥ8�\ME�m��lae�z��������W���=�™ ��P���8E�e��
m^|�f#g?T�����Z�J�~)
+\�#
+��X���,�j*QH�iܵL��-@�nd^���g�
+�J�c�a�	q�$�0�� ��Ԥ��=po����{������x27F�
��
?�Q�i���
�٠�a��Sc��a,�\�Q\G���$��}�t	Z�;w(��S�
����bR��XKC�
�ʸ��j/�
&N�r��q(��b�?S��C�d���¡5w�Gx�!<��_���"��0
$b���Ucp5- �M�W��!�J|
�=1@{�ǥ
1�{

�qi��L��l�҇z�XÐ��h++n�>���3I��`7e
�ҫ�_��A1(���
�{
+endstream
+endobj
+2268 0 obj <<
+/Type /Page
+/Contents 2269 0 R
+/Resources 2267 0 R
+/MediaBox [0 0 612 792]
+/Parent 2265 0 R
+/Annots [ 2266 0 R ]
+>> endobj
+2266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.068 551.009 434.539 562.964]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+2270 0 obj <<
+/D [2268 0 R /XYZ 86.4 726.045 null]
+>> endobj
+414 0 obj <<
+/D [2268 0 R /XYZ 86.4 95.493 null]
+>> endobj
+2267 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F14 1050 0 R /F10 1095 0 R /F16 729 0 R /F38 785 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2274 0 obj <<
+/Length 3301      
+/Filter /FlateDecode
+>>
+stream
+x��[Iw����W�)o�'vzC/��Ԓ'?YN,*�h�
�!��ϧ�lb�"�K|1�FUw�Wk����.�~rqy�7B-,�������("�[�[\�?.�gˆ��*+�V�fszƖ�M懯v�U��*�,J|��t�K�oO_��M�m�����¬m�y�r��	��1{���'�/O��0X$]����������5��vA��fq���,�����f���'��I3ܣ��0��
o������!��u�G>��Sn�����r�_ߖ��<�\�9��N-7��jӬ�G �v���r���*H����^-�F)A�~�o_��,���.���dB8,�鼇�L'O��}IM�
�z�(ĵ�o�V���7�j�~>=Kx����i�Mh�N���C�u\�4�a��ľ�[��o  �¯�O�������6�Q��ӒX�r�Q�{*��jU�h}�o?�1����!���Fq�`y�S [U�5$	I��3�mU�[��:���g���S�&�����) [...]
+�/�첡�O(
^�-�}1vpd�x��KI��6-���<���2'�H��� � �b�P\�u��7$��/*���n7I$ѐ���w�T��_�|��Ôa�Vl5Z����L(��#ñj���������v�iw�4�s���jZ��$�%�!)�C&����F���)䐘��������T�L�m�����!�Jm'�?��������	v�����э�!8F<�%,i�2
+d/���
 �F� h�A�4
��
�B�Al�{�~������,<
#L����շx�܉	��&rs(�������_�n���3�NCp������ζ�v���bWm:Q2[r�C>�W@�6T΢Y �hr����i�]�o��
�+νT�TUB�v���\�'u~� �Ŕ��.�j��ut�W0#ͣZ0��X� q�AQ	8��B�
j�vg��2y����:���N�~bZ�>�T�k)

����_����q"��
+O��ٶ}�7�
dr#��-Wl#�}��2.x�!��/B���8����>ݶ#�g��
+B��|��Y��%"!��C���k�T�[?�׃�z
��VAuU�I��ƺ>!��S-bb�
+�O�l(q�ٯ�g���@@�M��	I�͠��8�"R�Dj9x�+�U�Ё�:07��QX8�Q+;���Z�Cpˎ�~���T��/�~%�k
����m��a.*��%T1]O7�Zt����Lo�ZJ?�1��
��sD�V�L�>�����̓�M�:_�6iٚ.L�f&쾜}�� ˕�ba��t�^\U��*�����.��4<�������]NI!�3G�SRM���8
�
+!��4_�y�{ ��}��{��BR1[�������P9��y�M�X
��ŷ�M���P%_�����������
�Br!�W�A���bzƎ�Pձ����r%~�y��J�%�k,C�r���1�DĬ�@D�-T�$��'�(�!�x�!����p���	a|��;.:6�|>8r�!
���n�R�Fh;G∤���Q�G��`+�̠*���o/b�U*�M��wR��2��D��S6�

�� ���Uo�����|R�Ǒ	Zd��/G�
1��a�ԓDu�f��F�����g��K�4� �3j�#� �QڰC�@�!?G&�Q�І�r�*f�W�
�C�!��
¼}4�Ċ��:����
���O^�O��'�����݌�xp��
+A�ʮc�l�gQۀ�"� ��� ݥ�8yWe��1�r
'nH	{^� g�#����i�^8��{PI4��;�
� cS��P#Ƕg1*���$\5��5�n��
v�Þeɛ

�a���YȴAs0nLߢ!�Ӡ�o��1g̈�{�	$$����Z�:�TY�5f����}��
�q�H�޷(�:�ܢ��U�]����i��I��~�)>�ӧ;�K+���5��0ueyY׃�}�N�j��FڈB��p��Yt�a��5t䩇��4P��{0y�&�Gr-�I%O����
æ�hH��a��Vu���ɋ�APq}�:<�r?q��84����e�$�ߌ�;�
 �Z��|2p��PUlv�1�98,�~/X��Y`�bM�Tpe
*��Oʶ����=2��_��0�Z���h����|\�L�>/�,�Koo�m3

�
dА��xd|����p��w�<�u��M�b���s�.s������
+II)�=]N�����t��
l�yg�x�J<�lRlu�
�DRL$�O��N{<�;����S�����|�a�x[Y����O�%��4�Y
�%W�hV+b�:�$p��$�������Sޯ�5�WM�
���B��7��Ks�����<)N4ӳ�	H%�l�S��3z�.�w��&��
$���0H��4 #3�j��wP.�_M���FW�ez9�����F�E�4ɲ�o�
X���e
+^�n;oMG�Ů������Y}�ԬeH��\W��{��As䝻^���
��l�?�� K9~g3�tnz `s�� �4��`
�*&g����E6�joC@��
L#�zL�����oY�g��MVg�8�D[=7��]�2)oP�i��Y{
�ګU�$+�)/����:�
@�K�݃�6�k��j,��-cW]/F��	ȷ��uc�=��5E�1��j��ᕏ�W�<PvPż/Bo�[

+�MU��+��. <vF�}���uE^�&n�
�=�jnq�G>&�b��ޔ�Hs4��V��pp�@�_�7x���[Ȱ
+|ך�)�c�cG?8�^z�x�[��s���#Ŷ�C��{9��$5[�`�;���*op���K���"��嫨�#�i���eŸ�B�T
�^��x��oݕ�a1��e�vN���IYϓp�=m�_k�5"++?5�6��+���UsA
R>!�����?=���?z��%
+endstream
+endobj
+2273 0 obj <<
+/Type /Page
+/Contents 2274 0 R
+/Resources 2272 0 R
+/MediaBox [0 0 612 792]
+/Parent 2265 0 R
+/Annots [ 2271 0 R ]
+>> endobj
+2271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.017 290.165 404.488 302.12]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.1) >>
+>> endobj
+2275 0 obj <<
+/D [2273 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2276 0 obj <<
+/D [2273 0 R /XYZ 86.4 673.742 null]
+>> endobj
+2277 0 obj <<
+/D [2273 0 R /XYZ 86.4 417.756 null]
+>> endobj
+2272 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2282 0 obj <<
+/Length 3304      
+/Filter /FlateDecode
+>>
+stream
+x���r�F����JY�޻1S9H��J�vf"y.I0	I�P�� �h�~��[ ��J⋈��^��7��͌̾=��:��7\Ͳ4SLͮ�gF�b�Y�*NgW��O	e��"e�*W7�g܈�W��%痸���z�.����>��{�Ū*��cY��G��*_����*��_��?y}u��
+["3� S#�l~w��/d��'��H�33{�����RW���ɿN�?�!��l
���4�z d�͔1)5z
��R��a�
+ ;d�R
 TFS��#�w�ο[����.	� ) ǣ

_�f�
q|�
3�
�e�����|��[�
άhʙ�'���e�#�L�v?��&���|�
+L2 fq�������G�%?�*%�~w�w��
����r~�7Euq��
�
۫�
������*�@wF�p�^�|S���z��t����&W���ɒ��j
�
�R�� �oA��lh�Y�2�|,E�����I�{��I1/&T�s���X��/�k���A��F]l�#4 �z�x
+�
>[-pO@ bR	g���)a�e�,��9�I�g�\$�9�����7
��o6����˗%2�
������p�z�$�Q1�J�2��s�J#�#�Ti�gfAq�A
&FR�y� �JD0@���|\�
'�_�
+���G=�-��
o
?�u� 
�v}�&����;e,ɫ]����4�ya�p?�\w87E�ݬ
+�����	] �vt�� !��NI��t�dJ�
+���As���ڇ���Gq�\ջ�D1��.g6�=%�i�2�UD��nU7�m}=x��>H���hʤ'�v��FrJ� �~,�oV1SN�>�
ɒ�r�q���,|�2Bn�f�!wct-Hd8R��-��;�V�Oi�E+�ў0�_纁v��/��`SB֒S������b�VW6����Hc
Ϝme"��i�2�$�pu�n���gB�8���^����m/>û�
D
�6��R�ܮ��l|f��l���;���;��E�m[��1_�նQ�1� &)��m�s�4'*���B�������/���U�ꞈ��]o�Kw�(�\VNC�"��X"e���o^��h��wt-̄OT�S6/�ʌ�83�c���
��)U
��~���g
+�@��.,1!,�XA���B���բ�bz	�!
E�"
+I��7/<�
q� ��j1
h�zU�[yx�\-�
d��~�L��}��(;������z��2
�I� }V<Ydx 
+���Q���:CW���SHX���?�3�qS��
:�� ��h$��"��0������ �c�^n�<�Qb�R!L_�1]�\b�L*
�D, 3�x�`���k�jo��ŢؔN4j�E����=���O��P���Y�B�dgG

n
�w���h'0x7.0�2�r�Ϙ~���Pg�$�%�. �_�C5���w��q��6�D�x�G���Qî�J�!���]��*���ID�ט�e����G����J�z�>ijO��1E
������˗�/��rIR�^��y
���.�ᣌ
K/�N5v���l�� �`T)�Xzl��#>=	)�ޙ��!�S�Q�t�W
+��q�=�懗#��hY��F�E���,�.bI�7���?OV뺧3��-!
�X���򱕟b����ӏX�9
dt�$�C����FP"C�lM��(kX�(߽�f���8��ɳ�a�l�FŤHA&�&5�2�w_���,%�
�=���6�0c�ĕ1zX�	��G�� �Ⓢ���~1�`#�8�_}�i
���׸��X8���Fp!�(�����Td�,ҋ�W#fb��Nt�^�F�v�L��R�L��.f>@c
OP@e'
����u��C�o��ԉ}��ߵ����7�,��B�\�\�v 3e�4��M�3�����iW�`ξ�B]�p�pil��cd�BhE�1T����л��lM�4�V���:N�x���|��u��Ko��D>�
�%am	(T�QtG�#SV�tH�J�+.
_��� 9���(�f�&~��G��ɺ	���t�E�'����;cc�$$�ݪi�e��>��B�A�0���Ϧ�M���=x���p+k��"��3��vc���G5�*40@�P�U!{sBp��c�*��^�~��n���̔+mZW���Dh]jۺ\/�T7I+����UI�r_V���딶�+�<z1c�]l
r����l�≮���L3ԣT*�w��Ԏ8Č�&�2���<��A
��i�������H�o�!K�l
��aBc�4
���:���a����}�[���F@<�'�Ie�/<)r��q
	"@��c�o�a����&{���n	
��u�c=%r�Ie�#K�c� �.�%V�;��[�L=
d���M~��w�z
=
+��L��M�k���َ�?b�
�P�2�ز^4�������{�������n�V��
l��͟�Ѵ��
�>4l�����p��	��q��/���h]Qv�;{�Z�1�=�>8���u�v���8��w�^�,V�f��\
�pU��º���e�'��+�N����oݕ��t|���49C
1�ėWA���>~�▒�7�M��N
�<C�&���\ ���|�:z�H�E�?��mu�S�T�gU<��H��]b��$T�V{�EQ���Ԛg\�՛|ޮ�߉�/gh)h��n'�-꯾�Vy�+̫����;]I� H�*�[!u�H�;��Ƴ�;MICq��ݝ:^�1��D��j_���o�w�2�����А�
N2
�#
-OB�O���#á(I�xd�v
"4<��ž�G=<> �{�=��xd��A�T�� ##�&��Ś�g�,%����y
�s

s�2��1�/
��ŰC�Q�D<
�h�U$,U�fۇ
�5�4ޜ}b8�)	z�z���É�b�v�R��D��#O5���DH��.�kW_f�q�?⸒���Jh!
1S̥ (E�/�J�q%*!PT�L�Q
��V�e\铌+�gN+�~�S{����N��U�H�Ke���K�3�l�R�}����\B>o�Ic͎h3R�R�'CP����	S���	=��	�C8�1�g&`l��,f�`� ��
wQ~�	��!L0u�p�Ӿ��׮M�sP>֙Ŭ�=��'���Ґ<BAݳI,
 ҂�7,�G��J�_h���H��X6�X
+@"?`�i�ެtQ
=��Xg�	O�;1 
Xuw$†� �u����Q'��uҮ
+w:�4��
��6?��fsn���⫚l*:�~�c����
+endstream
+endobj
+2281 0 obj <<
+/Type /Page
+/Contents 2282 0 R
+/Resources 2280 0 R
+/MediaBox [0 0 612 792]
+/Parent 2265 0 R
+/Annots [ 2278 0 R 2279 0 R ]
+>> endobj
+2278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.09 577.694 451.561 589.649]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.2) >>
+>> endobj
+2279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [247.846 334.865 275.298 345.713]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.10) >>
+>> endobj
+2283 0 obj <<
+/D [2281 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2284 0 obj <<
+/D [2281 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2285 0 obj <<
+/D [2281 0 R /XYZ 86.4 276.295 null]
+>> endobj
+2280 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2291 0 obj <<
+/Length 2700      
+/Filter /FlateDecode
+>>
+stream
+x��[Isܸ��W��0����A^&5./���gT7��
E*$[J���= \�bw�,ǩ��j���[�E0]�.���gϯ�~�I�EHB����f("��D	��Z/>y���������U���s�E�il_�l�U��Y�y�ҋ��I�ܫ�2�ʤJ
�
+_�ܬ,Jwe��P\z����W��^]����&�՛�I �buw��w�X×�
JD,
ͼ��!��..�~9�NH�V
a���.T������ˋ�
0%	���ڟڄ L�&F�*MX�L߼a�S6
SP���|�2lk��Sw���B�3�j��w�]\�.
�Q!lK�K
7�jcg��R�(�'�}�o,y�U���2�U
8����W^�&�c�d�:6_��7�d\<[�K�=�{0#�`��n~3�O�$��Fw���6�O@]��g#T��	Ulq�	}����5.	��Џ(mT��,$�o���`
c@���7s�� �7���
a��Z�s
/��L|8i����2�^��E��PS���{��^�2J]E�C<���
���Q�WF��p
��H����
�ھ�/r ����S�]@$s �>�\*����6�i���
���}3C4}n_t��w�}[V��5�h�QC�B�2d�j��7�
���������:�1���g�P��Zt���m��N3�VJ�]^��"b���Op�k+������h�HD7x0
�xH���8�>����s�T���&}8X����?�S9$u9BK�EυG0_Q85\L!_H	��z��0\�!�=��@q�T�'��BHI�6J\^���|�5 at .`��;(	�i}%�^0
��֡��F?��
"Hg��4�c�z���
���i���u�I��_�x�	��Iq�=�2�=q
+[{�F�u�#�"��D�;��y�ᝰ�_��H�

t�.>��V̅F��B�'���U��
�'��z~
T&�9p(�hG�=� . �òE�([���2O�
�4\I_�]�@0'���/���
�eo�Q>3�u:�
(X3�SHJb�s1ac��j��v�^��<�{��e$�y�!Ǭ֭�06�M�@p�Ά�����0�Iz"p�f
��;���Q�v�j[d�
�e7梐{Ѐu\�EGU|
z?�
�҇X���� 3|�DRē,�dա
��L�rj��~�L���]jiU��Io�������>��+H�z
+q`5�M��0^Z����Ǡ����I�l�lF� �k���"���T�EP�Y�]$u��-K����R�|2�zK��ȯ�ڕP�@LJ��0������
�ѣʉ����
��Ƌш�{�
�(`Y��:[�I�l6ɷ9?�ip�d?��q�{�/U?>M��R�_H=G�AR
+H��^�xuy9�>���·Sq
�S=�)
�r��5��6�>��C88=0�V)�ẈRD� �L߾z�t
d���cZ��Gw@�C6�uR
��
+�B���!޵ƄA�W�!�j*����&�ËjS��ۍ
D�b�C�o�Z�q8w��%��~}:S�g
��Oq-3��ŵ���"޽+��5��g���a��ۋ7o޿��-� �"Jkopm�CuŪ|X��d��غ�&ri�u����m�� v 
3�{�|ھpV ��ž��������o����קwŽ�J2
;f�X�1nI"o[_
�d
�
A�,���f�
]���1-xt�@�Tc|�uT�1=�1����tr�$��V�L���N��ŷM��T+L�I|ſ�& �ᡞ�&�"<h���ǣZa��`� @�	��
+�͂�Za]-L�°�
�_�

9�/Ƽ�0�1�9�0�O��ظ��~<��2.'za��)ؤ?,U�M��S
mk

�~�VU�V7�
�S$h���|��
�s���B�dQ�� ^�@R���о���w[hsj�[l������@�S�w#pj�C��2C�ˢ������a̰��=�m�܁x�ۺ���›?�,�����I�h������=<.!k�4d���h}��k��>~{=<�CS
ϡR E5?��7SW���~��}�
�1-
NAE�,�a$�|}��3O�����k�

xsN��I�08l�9x:�x~���M
���,�R\�G���`�B��g\n�bx���)#�&
[|��
�}Ӭ�iwR�}b�h�`4�6��*�s�q抭��sg���^6,���P: `N-9�LU����1ݓ��z�8��'�N�*�[��7�8è _�*��S���j�dq�.k�vF}���4Y:�Zc�)�"��`SW^��Z��)3~�@�*�2�%��╫窨j+�u��z��pٜ��t��; [...]
|������
�'���*�N����vݞ�*	&m"c��f�
�
+0C����;�`. �Ի
;���땑
�7K�5-�&��:��
N��KS��q<bXLh�b_`X�gV�
+ ��j���L8��
+endstream
+endobj
+2290 0 obj <<
+/Type /Page
+/Contents 2291 0 R
+/Resources 2289 0 R
+/MediaBox [0 0 612 792]
+/Parent 2265 0 R
+/Annots [ 2286 0 R 2287 0 R ]
+>> endobj
+2286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.619 74.115 421.09 84.963]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+2287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [279.592 49.651 294.315 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+2292 0 obj <<
+/D [2290 0 R /XYZ 86.4 726.045 null]
+>> endobj
+418 0 obj <<
+/D [2290 0 R /XYZ 86.4 663.016 null]
+>> endobj
+2293 0 obj <<
+/D [2290 0 R /XYZ 86.4 604.976 null]
+>> endobj
+2294 0 obj <<
+/D [2290 0 R /XYZ 86.4 386.315 null]
+>> endobj
+422 0 obj <<
+/D [2290 0 R /XYZ 86.4 119.437 null]
+>> endobj
+2289 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F38 785 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2300 0 obj <<
+/Length 3817      
+/Filter /FlateDecode
+>>
+stream
+x��[�sܶ����>R
�!�@�|��$U�n,w��d2�
%1�#/$O���w ��{�>w�_,�-����.�dv7Kfߝ��>��[&g&6�����L˘�5�ddv���J�/h��������i
]�:g4�|�o,�-+�p����
�ԸyﲢΛ�!op���*������>�����o���8#�R2#-
"�\�櫳�~If
���,��ѳG;o5������wg�:K�"�D$!1�|&
���N���
X���rY�S
=:�8�
�t��U�Un�vS̛�,j��yZ����#OiSg
7�)�H^���2���(��M(o�@�r�̋,��s].λ�Y�*�*��2�[��������/���"ޤs���G�7��7*d��ʛe���/81����f�mVY�����M��=�
�!���pe���:sP*7�6P~� f����u�1M4��2�������;ď�ML�cNU�
����9��d�̛{�r�Q�a���%�6�$���z��5k��x�.`�s�C�q���e�p�{�$�#�"ND'��}>�wӆ���� �z��n=>oq�mr�ܙ|�����
��Xq3�

�
;�����"����zu�
+6v���D$�"�u��^�OV>�\�w�W��d��ɗi�8H�?�6�uVuo��ޞ���t���
b8ŸA�{��~�bE�g�X�ӪΚ�u�,�m�����>��f�ks_e�1�5�w���z����To�w��js��3��
+p��=��2�
�2��fS.�=�c�^n�@��$NdS,��q��\�vr܅q
"Ok�ⶩC�Lt�˼h��C�
'��M���}�����eQ�sl�{ڑQ���[�[E�ˍ
�Y���6���j at v[.�$����
v�F*$��"z&���"��
+�	�
X� e�%�;BYRJQ�(8N@��l�:�>(�\��I���o޿~
�$6��yh����f���u	�1_Z�@;�p&�:�bzy�n[���X��'�7T� 2����7?l/�`F"�I��Y	/z;`�	i�)s"N¼��Gi
̤a�	��r����}9 Š0C/{��*�5Zc�$~�Ak\�#��
�8��	pnC>��b��A��K6���˺��E
6��-���
�� ��"C������إi��w��I�؝/��{f\r�"tPn -v���,��\H��3��	X&Q��6�a��5k����0w ތ:Ś��
(��k�y��zGr ���
�`)q��^4�(�	��$k���8�]�z�<."��K]~8��
ܒaܧ�
+�c
+��
���{�G$89#'YT��C6/z���nPwʤ�%Z(<
�_{z2�!� �v�(w���2�m��^��|�L��a3_m3
�xf�g�7��c�g���g߼6˰ ��j1�9�
��&޵ � Ʊh�	
՛��eոϖ��]Տ@��n:�cy��+���̪&�=9�3P���%��>\`��&���
�jA��8��o���|�^��qC��:�V���rsw߾d~Jg�@�f<fl�m��\}�r[�����;�M��o
����)���M�*L_�V� d�0QY�t����
&%d�I
Q��S��2����͝ڷs��{*�yV�i��&<�gŨ�����Ǔ�vC��S*�P�շ�`G&u�Z�@��z�r��Y�T��!ჾ)gPx��i9��8�Jq����@s�'����?I�y�?;����]-�<G{���<�	p[M�l
�4�i�Ks�x��S�O+�
j���\Ƣà�
,
�@��үT0�ہh�U,���2�~R�t������?�5�r��nN�&�AH�z�櫷�E�dB(~�E)(�Nj^����k�U8^盔�V���N�n����RgY��M���&����þ7��m��K<d1V��6M�sX
R�w6r�`�K�\��i�H��T�'>�;�Ȱ� )�t�aȑQ X9
֖��=˪� �
yhc
���� G�A�����,�����
��]��[�^ې��A^�١/�AP_D
+�`8�;=HG�3
�O>Va1Ald�*�c�W�@j�S[g�
�/l��QK!k�N8DE��w|��R^W�C^njLe�&��e��n��M�y~��r��)!���
8!]�e7�]
�mM�j�K���:^�x$Ĕ��f
 Aի�~�
N�>�0%�`n3��6n�%S��ԝ�h�
+��"��:����P�4�u!���$1��VL��w�Y��
���" �hȤ���c�<�p%m&`���JX~BX�=W�bXʼ}�@����0���m��8��>	�l��;s������b<�P��
D"`��kO�b���D���
D��'b�Qf�6�!'��+t��O@i]��*���)Y�2���O\���!��M�YJl <WL��jz�տ�y����͋ݜ@�~�O�	l�
�ݜ����
j`�Q��A��
�̓y���*�ԇ�H�oY�
�#`o��,�L�᝗Ub�n�$TFR�F�=#
+u�!��
�cV��`E)�N��:D���[:�g:
$�pC���_���ZpA
ᥚ�I!	n�Bx����o��/G�D��Q0��c4��క!��i�'(���0rt��õiKņ'�!�ĺ�?�ؒƽ�m�0���9ݙ����`J�
H��Y���v	 ��Y��^J�n
�[V��p�t�����}A
�
�FR{�(1j��ߡ=��E�����m���`�}aӶ[;/�L� YSᕠ�-���Z��t��.��l�&�PĩB�n
���q/�5 ��3
0؅π�j��: j�޽��O���
{Ԃܹ�P�^Qguc��Y�Er[���;W��	�r�����f�#l�%x�ͪ�$}�w�a����,ڇQ�y�1����;�����q<ǜ�O|�����—b���8wU��e������
1(������W������� ������S���<@v5{�� N�1�޵5��RJ�q�@ sʝ@C�@�(�
̲Ok<A�
�I1�Gh��Pޙe���]�~[|t�JV�6<�B�g4=���h4��ȓ
H�V��e�EV�.�6y���hcR������2������@l��E��v=1��)|�Cc����x��z� W��;cH��1��}r;
+ i{g
�K���]����>a���ƀ�~i熮��R
wP@�H�p{�8�$b|rp�.�?D��=���9w

K`a�
{�&i7��tG�w�#��j�{�B{�����vŽUBڣT�ɾC_'���=E����k��g`I�c��)��x�d�K^��~��z�l�r�
ko[ȀC�!�>�G'}��`�C�oߔ�wה=P
�.� �(q�7
�!����H���$�$�j�_ f�h{]aG��%��do]B�},�����QJv�W`��W;�/�������"����o;q���M�d���T:�DL/��n�|��rD���F |
4X�{�N*��A����C���p;�$�X7�[e
B��NHc�
ɱ�>���ى6]XK�ʮl�,U�ڱ�;������[��8ڷHQ�`N6�?�r:B�!.�}HyT
�Md��o����/ipthB|�Q�%�>�
y��C��tl<5��Q�Q�=M"P?�
Ek��%y��`�
 ��5���i ��A\����F�=���6��
(�c�k6
+����۞^�s���?�
A$��9����)T�Fg��5\���?f;�	���;���5 xfP�߸�LN6/���V���_��L�ػ��3������r(�wY�ݼj���W��1�; �?� ^�#IL��0ԛ��_��~
+endstream
+endobj
+2299 0 obj <<
+/Type /Page
+/Contents 2300 0 R
+/Resources 2298 0 R
+/MediaBox [0 0 612 792]
+/Parent 2265 0 R
+/Annots [ 2288 0 R 2295 0 R 2296 0 R 2297 0 R ]
+>> endobj
+2288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.039 676.287 444.511 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+2295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.458 396.056 421.929 408.011]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+2296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 152.615 173.628 164.571]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+2297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [292.1 49.651 327.301 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.10.2) >>
+>> endobj
+2301 0 obj <<
+/D [2299 0 R /XYZ 86.4 726.045 null]
+>> endobj
+426 0 obj <<
+/D [2299 0 R /XYZ 86.4 480.277 null]
+>> endobj
+2302 0 obj <<
+/D [2299 0 R /XYZ 86.4 336.839 null]
+>> endobj
+2298 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F14 1050 0 R /F48 982 0 R /F38 785 0 R /F16 729 0 R /F11 787 0 R /F7 1094 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2307 0 obj <<
+/Length 3723      
+/Filter /FlateDecode
+>>
+stream
+xڽ�v�6v��В�Q�M��E�43���t���g-�6�tI*��܋
>�J�v#� xq�/@��f�������ٗ��Y9�0���Uf�ZYᘑ|u�Y��&��e&��ۢ9_����9O�mA�׻jݕuՆǺ���?�:�"��M[Tmٕ��¬*�>�%|̥*�B��~�ݳo/�������Hi�)�Z�=���t��7߭R&]����ݭ�tL��v�����S"�	�<�L*�2�3n
����T�t�H���:o
�p[4���U�>Y����͆F�3��ȟ+��w4�oۚ���g��EQmZ�+� ���)�4A4xR@�R,�[�bY���8K$;�Ϳïwmד��ιb�>�9
��U%�m����eu�Cj,M�j���)�
M>/+�'��S�M�U�Gdi�`�d�di�i6s@;�2:eʨC `�`�1��5U��1�Y %��2���/����ˋ���sXT����� @�
xT�	��,s�HxD>|� ۀ�

o���m�B'��e�R���|�� ��u3�º萌ˑ�}!�nN�]q����p[�o�}wQ�:

~��JZ�R�N���Rƍ�c�
(>�7\�Ậ
�Di�R~L����C��{T��
��T�47����`ƕ�,�if J�w��
d����	���
@�
q��_/�c
+�\h`
�9�I��h�My�����կ�kÓK�	�
�&�Z �E�lov
?3���D'���嶴@ׯ4�\xx�5ę
Ą����`����<��g��&ŁCr���@��.`\�xR1��5�'���"p�k�T��4f�>��!1(o(`�75$.wl.���Q���y����
+�t�l�Qn5�698�b��$�i�9��
��L (<��y@�A��
�
+}{L*,����.7d;_�
G������)���Y�LB����k>M;m
+�ʑwgB$y�/�[:�r���^A����١�w�
��F���|�9�=ᣘWV]D�5��s�i��3�Mн�7$�E��׋im�!eD��|�
I�Ӂ	��B����BS�����g����+,'VXh�d@��Yx

=CH���SLdf�,�K[&���) �
+�\��ǜ.m�݅,�X� vW�m6)�)����
a�^7�]�7��[&�

B��z��������rvyK�bg��G�(6

�
�������3�E�8��*|
T
+�K�6!�A岤��s��!7M>
D�MS�nnIm[�F��a��]YQqd�8Bݷ�p�)@��.}͹/m!2��; n	����jB;�
+��Ni�<�;�4�"�[f5���,����z�
�����Qx31��Dc��J��ρ�v4�x�9ʧ��-ev�7
+-�`�$BP��E�*�m��$�����!LI��N'L	��f_D�M�T�iu
+a�̍�qZ�|qd4t�\K��w�8�
+צ�q�}��E1 �o‰H���z��4�oi�uMX�P��f���Wp3v�J�E@��ar�x�����`v:?#�o�����S9��8�j ��OWM��j�%��"�� ϫ&N��&<>���yP3%H+�� t���R9E�4p
�
_KX:����r��L��3
U

����xT9ȧ�-�P	'Լ����vM5�T!u\43t�R/Cqi-}��Ķ��Rn��
�w�K7�Rg�v�> Aw^/Bc<f
܇��
+A���U���*h�_���w�@�dc
+M_����l�^Cg;�څ���}&�f���L����/��@s
�O{^�)1H at 1��B�T= MJ%��1���\�
4-g6U�6�2=L�\��O` �D��x����B|u��w�	|�XI=�tQ)�,F���R�2 E~�ߑ5mA��dMpI*u�5_��ni�"��w�b�Ǜ��؈���<���>*T�a�)���e�k��ɂ�I���
+��gA�`��Om�
+��.����G͠��w�E!�1�-��ǟ/d��s98�)��wX�GLPe,
�C�j�Y3P
;6\@jmh
�V�(
U�/�m���M����jz��R-��!��-|B��QҬ,[x�|=�-��5!
g!���*1�B�4�K�G�
���+���|�g��,���TL��?�B�$L�e"�y[���!�<�
&�TD�KE�
��=+���]N���Hc�������u^nwg<Aa�s�c,o�9�'U�ͤ$����=� �~
/D�v��-��S���7��1��G4�����V��G���	���_J
+��[�ODZq�y��H��%%U|��TKyDĂ-s�� �z�Jt"�a˝�	�M����N(\]:8�4�\D9-�n,Rf��H����
��8l�O��|�|˩^h��S �ɜ����m0-�oL]��	w
)�R�IH�qJ���a3�?�����D
+n"�;�6$�k��>�4�M���l����q����s�hn.�sG�K�=�ĸ����+axy�I<�8�\WX���҂���O
��]l��|t�d���Q ���bZ�U&ѝ
+й
�3u���i�����c
� ����@?�jz�xYd	�d��Aƕ\��3�qH�W!
��W|��48ߡ���b
)��e���-m
i��
?���Ճ0��7O�0�0�T W[�4��^iL��^vz�
+G�}�s����F˖>.�>-*Ac
h0���%a��	� Hݝ��
mAk<�Ɠ�F&v��Q��<l����#^j~�H�w��R �kH��d�mG���L��?2��	t�ۭ}
�
+�$���gh MS�IÔZ$��?�fBQ
+�
=e�rz�u�a_D�hxm�[�a�_�^;zh��|��X��x�:,C�ʹ�s
�nUzOjH`:��>/�.UH}׃T�
��S��MgM
�-��|9���"L-�>���
,�3�u0c�J�	�.�;�ߟ��;/�v�>������/?�i[,B��#�]~���a�� �l�~�����&�򯱿�7�a
8U�p��	�Dx�b�g��V>�;8B���#��f��p(�l�o�Mf��#���:@kj*�8Vi
p�
��M_{�L�
o��xJZ.�#���Q=	�d��d�<SG���v,�6t��
�ʌ5
v��b�,c	�p���cz^vm����*�dEa�����
+��whW�Ͻ&�
<��������$��4����T3N}�pjd�g��sj����5v���c��e�d�"���2㙛�1^�!��LJ�ȉH�T<͌R��vwL��hrC���w�7eu�-	#,h�m��{�(��I�f��/^?��񜖝0�x�4D���C�=�1�Wf�P�I>��s?>9;?
~�h�
K��<"��J��n;��c0��
+�;��"v9���@���%a��h�\l k����]u���-�^�^?u4�9�U������`=޴��V��B���;��1�r��X�񕡏��ֻ�ܶ��-�Q�
�E�]���
������7��&E�P�-\z_<;��꺋���}�ewۗ��hІ��#5� ���
!���� 
$��<
��s��G�m�sOw��
�_��P\
<|�%8�K�f�3��WBc;!��g�����G/� 
���/H�	˝��D���F�١B>����O�O����G�����wO�%Ǔ��P��
�;K.�Sgɳ�iG��^���a��&�+|z�큓������6u
+endstream
+endobj
+2306 0 obj <<
+/Type /Page
+/Contents 2307 0 R
+/Resources 2305 0 R
+/MediaBox [0 0 612 792]
+/Parent 2311 0 R
+/Annots [ 2303 0 R 2304 0 R ]
+>> endobj
+2303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 421.012 173.628 432.967]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+2304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [324.534 296.377 359.735 308.332]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.6.2.10.2) >>
+>> endobj
+2308 0 obj <<
+/D [2306 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2309 0 obj <<
+/D [2306 0 R /XYZ 86.4 663.471 null]
+>> endobj
+430 0 obj <<
+/D [2306 0 R /XYZ 86.4 283.561 null]
+>> endobj
+2310 0 obj <<
+/D [2306 0 R /XYZ 86.4 96.44 null]
+>> endobj
+2305 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R /F7 1094 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2315 0 obj <<
+/Length 3667      
+/Filter /FlateDecode
+>>
+stream
+x���v���S�ʳ`l$�,I�q4��
-����jRg(v�d�F��Taa�l��7�r"�(��*��aB'?
��
|�V�Mt�����D�DN"�I(��&��:e\

qJ�`z[e���Prz��P���5����������<+p���Ӣ���sVc狛U�����TYu��ͻ����0��0���(NfO��N'	���P"��<�yO)4���'��:��H�}4�?Y�aQhOv\>,��␫im��_�����DȈ���ϳ$^�<
%��Q�i��0�����v��0"L�ҧ�N�g䔄����'��DE���<ϒã�ӿة��p�[�1���0��"�u)�^�i=���cj�bmƊ(�+�
r>��u�\J�yp�y�b�-�zYib��!엁�iN"���o�O�4��uH2"t�#�Ckg�#A5a�>b@^��'��|Yo���@�}�����^H�X��ڠ�H�Ԯ+{Jm+����c6Cl=�n�;�?-��E��V�|Yg�¾�X�g�V(�YyȦ)�hlƔ [...]
��p�m!�\��J$�=U�0D��k4�Ԓpf�b���yqy����:��C"B$dD��u� �-2���Xan��1�����
'�ÚrX���O�խ�5�1f>`�X��̍d�]�1v� -�����c�`|\V�m-`�1�mU�$8* �{,#?TM�UZ
U���
3���/r��0+�#����^�*��ȕ�h�COÅ�l�w�MB�&f#m�!H�aaGd9���V��!3y^&�;e�1���4g?b`׃(� 6���r��dO�/M'
8��W
+��Y��pW#�����ɀx
+����oB`�,$�Wd
�S�I�j-�V!���|��	��
��8�� ��8�o��1�J���d����O��U3�1_8�ĭ�<�\�r#m+=�A\J"U�"o��F�b�����@n
+\�K��< ���Αxt,��t��J����v"���2�Ȩa��H�.Eנ���p�b������ʑ�̫����G��J2�M鿀�6�!�xc�s�S�g �Gm�A�����ZaP �zӉK?gyn[wny�b)D�f
����<7Z�l+�e����!��&B�	�Ϲo���3�q�]��i�m[��XгE_
�Q��'MWk>HD���:=jmqd��

�
��"`D1�ǏK1�<����ӳ��>�	�l�$4
Ҷ
ȕ�Q-g�4M�d��TJ������x24
�ذ
��ه�J���Q�B<
+�zq���75�$h4�+�
`=�CD
!n�1�#�|t�B�
;hBY� �QB}�%{�X��xt������&�0�b~��&D�(�K�Hyww f� �bDR݅y���&nB���Mƶ�/
k��i�[9P�����y�
�sԚ+?�x̸v1�}�l����E�~���*w��,��m��S	0��`�9,2ea)*��
��l��鏻R���HL�0Z����앉���.�5/6��:���8IR7�v�� 
yf�
�e"VH@ :4�
N at XG�(ș؀�;�楕'���$x֙2
+��z-�r��	��K@0�C9
+��R���.#���҆���7�T'��
���o��� #ڃ�R�L��(�RT8�����A�a
��c�����fW��H�H��d�bY;�
������)~���>�^|��[4���D��%?��å(u�����J� �S�
������Q��&��˪K�2�q��ˉ�����z����@=T�>�
�a�K��"F�
����@��zb��~�=���M�O�դ
�ف����&��+�7���Xv�o�{���-���x�b�'[8��du)LjbvԱ���1�l�̓��h�C��E����r�qrΕ�v�8�R�DK�
� �sn���z�
綡
���Ǹ\�nn�
�`���Yu�b_�G�O�v<�-�x�F��).��
o�n�}�>�
�m���@.��?5�t(ɸ��JY��:J$�p
���W<����u# �\��������ٮ��,1�'C
X��CF@�8˗%^I`�UbH�Ɋ�b����f,{�_&����a�I4b犤x����4�߀�B`2����h'w��?Q[�H�Q�jFT�;@�[BP�ܘ��
w�����3Ds�
�E�H�o-ҷ��`�F�8�
�p�,`�s�Y���!�

R�%��7�P�G	[ yDk�w��>���i �Fx|
��r�w,2� Bi��U5ͳ"�K�^��?�$��Vi�\��&z�o��� pw���sY��l���.wЀA�EZ�M\� 26
+q1�\������φh+�Q�j ����Xl���� 2��%�H����j_W�5o����
+�D��^!/N�~Jrm�0%9ȋ�M�o�J‹����b���Fb]L�+�0*�z��+�^y�]�

��+���cLlo����`>��Z�
Ll�sV?�{e`_�4�&�ěS)��=�KŮ���l��@^=J�,��7�s!c u�`�����Y-k
T��b�q�����	*�m��@�Ԏ��~u���d���U�8���A�,����>��V�ES�}L�F8*
����J��R��0a�鍢P�Ȋ
��8%���(s���ٹOO*��:�����q�fEVgq��'vfGR{�!]�
+v�(�؎��
+L����*x��H��fX(���Z�H���ֻy�X�1�C�S��Eb=X����j����5ג��8������؊�q�
V�|������0������X
�u�2���g�6Bi�V�j‘E�j
��W(IGB�*	��/9�4�u�M.�X�ׯ�#5=F�ȹ��Ȧ��4qe�c?�H`ß}&a5����~^�~׋Qހ���:X/Y��vk�>P� �X�Q
�V
�
�2^�����M�2���{@>`��t��[I#��j��
+�u��Y\��
��'�˼��q�Cz���t��U���+b�u,S}��Sϊ�������lw�K�P�/�
Z��!�m
+�6Tr
�$����4
��`�f0��PP�ʼnZ�Q�JEh��@_/�l��6�a<*!�q9.A�S�Ϸ≹,Sk�f��Iq��px?�m*���p�`�8uu��2_	�n�H�M�
j����'w��(������(F]eFl��.�TdcE.�N�nV��i��2'G�5����{Km�i�,a�ː�5xD��9��B��Rn�Qel�{k[W��
a٤��\��љ�:Ί��o~��
����e�z:R�F�|�V@��0|���h�S�Pd���h����C������ʛ=SM�������
+l��
�¨���8�
�C7� �9�a����# ���T赳�
,�7����?:�۶��w��?���#�����3����f̶��������p���a��}���������V�	�h����|�~9�n��m���eQװ�I�Y�-<߷�+����R��嵊{ʇ���sf~��U;��;b�nh�G�	}M7�A�<>�(��[�CE�
���_�
+��Q�I`%������I#���?�!x�8����+/v��Aa�
O����@�?�����C�7��t
�~����Ĥ�ֳ�	"�_U)��
+endstream
+endobj
+2314 0 obj <<
+/Type /Page
+/Contents 2315 0 R
+/Resources 2313 0 R
+/MediaBox [0 0 612 792]
+/Parent 2311 0 R
+/Annots [ 2312 0 R ]
+>> endobj
+2312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 584.305 173.628 595.153]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.6) >>
+>> endobj
+2316 0 obj <<
+/D [2314 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2317 0 obj <<
+/D [2314 0 R /XYZ 86.4 138.862 null]
+>> endobj
+2313 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2322 0 obj <<
+/Length 2968      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs�F��W�HM���dj���첝I$�%I�`�����5�~^���s�Y���9H����[���i������wW_'t�Xs
���&2yL�`��2�y�	���H�ޕi1_$����͒���>��mU�oJw��BΒ��y��|V�7e�)�*��U��k�IVOe����\�W׿޽������+�IҀ�I)I
,�W?�J�%޼
+(q|�ۭ)b�q�
+n�~��n���Xu�dH�m�cFX��z����_}�]�
I	x^���*j�z$
+�o�v��DEa=�ա	�5
/�S:^���E%���
�E�3y1�
�&���O�<�����O��}]櫝ѯm�T�l�N��IFd
�A�"���Ĝ�6d �^s.5�(
`
�UNEۿLG!~Ë�=���*Z�E��Zi�
+�h����($�;Au|Zu�\(ȕi(K�2���V�bc�ƴ�,Y����?���;�H1+�}1�����ݯ���K�eW�4�wr��!��m�絔&�$D
lD�m&$�����*���@Y�
݇^	��-���W�}�Z�F]���a�`
+����sh�~y�lŽ�$T�@KE�/�5L��uW��5��^����v�N&�0�>���ES�x�֔K+�r�X�ey�[
� �Mԏ
+� 8"�E�'��#����� 
+1�c"�i��|�����)W�l��'�_b2
���`2�t=�1���9$�	ߥhҸ�_���	��/�:�"XD���K�+��K��ab�0"
"�Ę2,��c>�yu !
+�Ak¬n�Qf
�/ �g��_n������\�G��b�ɫ^�K]n��,ߕ�'����tyD����sTK%Q�"�EOB;[��n�ٿ|L��1�����!����n�I���*-&��a8�?�����®
��&N����d���{�D.M
9��V�/�ɴ��#�����UZ�����%�����bm�ߕ�$&m��H*״�&
o���8҇��؞&��-���l�SA,�k��P�!x@��x�Q*"Q���#���yEIT���C��=���79�������5�tf�]0l�x�����H
��y�~ؚ���"�l���^vI���I
.,z����`�������]���Lj�`7�L�03
Ego�l�8c^���1��dz��$��$�%�I����;n"�^�Q�*�`mMi�[��
�L���$�I^�{�
�;�@�� ��i�%,
}���"�nm|,ܣZ�v"ee�h�T~����k�~�$s�L�nҥo�V"{��h {m!v����*
�u�4bYD�F}s��0�y�B'����/c6[�� �"�,R�Ą�[=�bZ���|s�z��+
p_d�O�c7�l�Z!��B�p�v%{�!�,���*�WӲ�C��萆Y����]‘��1�
��*�m�l��t�3)�~��F��#u�
�t�'o�r&�?�&�t|͆}���K�ݘ��
s�nV�C�Հ4i��Z���Li2�
F3G�3�I�\���a n��Ԯn�*yn p�o��_���ݵ��ߖ�
�{-!�͞�$�~(�G�_'�r��ܾ��ַU�-�
����`;����a�u������!��'}��N���Ñ�K�2�-��â9���|����T�\uL��~K;J߫�����
d㿙q?��b�d�)���E�{k)���Z�4%^�R
t?����5���#�Db�lS���dc�b}cg��r�ܣ՝ɾmcn{Y-򝅮i ]�_�LjZu�C�� ��	�����KVen��bD�
y��(H[� J%��/b*���A]��� O7 ��Ș!������> �"����bB[�u��Ÿ{lz�l�)$�X�f��E��M�x6Ie$j-sRY"�EQ�A�@Y��S� ��"��&4
h��cjH���u�a�ݴU@�AΓ��,ʹ�ʔ���½�
3n*���8�c
7�t�Y����i
mj�虈g!G�E�D�
������1g�-�w at nYOm4��] ��6iR�Q��ig�g=^c
�h�
��ie'�f�C�i�B��C7�E��m��

]�T����T5��n���Dsk��
_Bb~�gS�k�P
,�1f6UXc� [...]
+k̠�_�4��=Y�kO�m�ys����MZ.�l�K���<��#S�`��qJxLZ� oҐh�@��
�1��cV~�p�D���� �K��2�)['n�Mv��
���n�C��\`R}"xtӅ�a��YVo��Y�[��_����9iu�v̑��(
���H��F�
˂�ux֦����]�����}dk"y�Q���y��qV
+��P�T�mI�͋��~�T
�84܅Y/�Ԕtǩ/V��
	�u�A$�:Ap��p�2��Se�7�ɸ]��A�Q�i�

%����F�	~���
`�W���X:�3�Ւd�D/v���թL
c	��a ���	���с�o>�����۩
O "�2s
(�_��� d��2:���)�S��;����tyt/2��z�yX
v �E�  Iq��A���K
�)�9:|pl;rj��0>��9�y��"��P~o'�Z�tr׏�N.�O.D��*:Ӥ�Q\ƯЕ�R��B�y|t�1AvX���
5��L��#)..���_O�
N�N
�Ĩ���
�z$`pEb��
+V��g(��3
+��j
+/�����0jM)�%�UY���]�44�l�Ub�)f�
+�w"BI��C3&�Ld��o��F�eDN �N���m��c_�aDd[�<BB]+�,3
��ËXz���6}F��/ҥ�ވ�'dZPo��í
��� t퉙��QS�qrM
�:�&�cG���g� (;���q�����u
���_�)�M�;�Xoz��0x���
�j0�� W��7
+endstream
+endobj
+2321 0 obj <<
+/Type /Page
+/Contents 2322 0 R
+/Resources 2320 0 R
+/MediaBox [0 0 612 792]
+/Parent 2311 0 R
+/Annots [ 2318 0 R 2319 0 R ]
+>> endobj
+2318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.831 509.131 120.051 519.979]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.7.1) >>
+>> endobj
+2319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.035 55.742 413.506 66.59]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.5) >>
+>> endobj
+2323 0 obj <<
+/D [2321 0 R /XYZ 86.4 726.045 null]
+>> endobj
+434 0 obj <<
+/D [2321 0 R /XYZ 86.4 572.532 null]
+>> endobj
+438 0 obj <<
+/D [2321 0 R /XYZ 86.4 552.039 null]
+>> endobj
+442 0 obj <<
+/D [2321 0 R /XYZ 86.4 328.031 null]
+>> endobj
+2324 0 obj <<
+/D [2321 0 R /XYZ 86.4 269.976 null]
+>> endobj
+2320 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F38 785 0 R /F16 729 0 R /F14 1050 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2329 0 obj <<
+/Length 2424      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W�n-'�~$��r��R��H>99@$d!�-AJ�����B��\]L�t�����O0
}��?O^]�|���#G��zty=��ȑ�h�F���DŽq=�pJ�J>����x"�Lޞ�ON/�J$��2|9��^�
��
+�.�E����|�?>�U�t>������o��N�\������U[P�J=�ޞ|���fp�݈������
I��o���ɿOh<R[�D*�'�1M4�HjHP΍���Y�'VsB��"�]�ݶ�#Dh�3:X����ټ��Vg`��]:�q��b�
�rba�o�e
m
q�
c
�
(�
'�(�x����|�7_=Ӳ�fDpw���y
+���J�>:��+U4���6L��
��H�0a��zF0K�����f��z�ɧ7��������:趼	�H8[2a�����.�U^,ώ>N��,��� ˄I�׋i���S;u�9�������UO�w��&�4��2��A�*���
e��@bq���p���-�1<�g~��
����	*��b�[�ˆS*�
+��ɪ�O�\��b��X2
W
F�ڛx�*���?
�
����`'Ws�!	�����i���
n�ev�H��t�E�-f`-!D�G�O/S�@�^
�)k�˳�4=>��Ј����m�@!�����t�L�%���9��zN�0m {�%����'8%ڈj���
!-�5�Zs_䳐h�
c�|K

������˖�!l���(�]�
�bc�1�IZ���PZ����� w����E6
ڮP�c��
'Ʊ��}���U��IB7;"}8:�(�?��?
�z�!)x�g�U�(�7��8a��-���`�n'� �Ƹ�=T\����4>/�)�e�E�+NE����X=�A��c����v�0���2<
4i��i�i=����F�
���T���3ȻC���Y��(JC��Dt�m$�P��:��8�p����v7��q�b�vi�O�Yq��1��T�������Ԋ&���;1f���*�7 �g��
�������.>�~���b�?�T
\� F��)��i�ͲY�0-�k!ʓV�
+`h#HI\�y�������tb3-Z*�8?�A
+�<L�Pqy��P�q�՘C��
q#`�k
"�V88B7
c@ֲ+���u/Q�c��;��P�Jb�m��v� �C��;��?wœ����3jj<={�N��'�T=}?��tn����v�w�\�4�7i,ŋbU5*��,�%��}^��y�j�0�=�
j맛c��A�� ���<"�y'Zp*��X
@+��(L�m�O�W�Q�t��<_d)6?J&e1��d���
���S�K�����2w��<���
`�C��	���
���� (@
��
�W�14��6�8��:`'�m���]:�c�dc�T�@1�;�(�ҙ�!�L:s^�w�wgM@i,JM��������t��f8�K[x�vW=1����:z7�=W�s��0s�fZ�<�o7�펕C���5;���*+ۭ���v@�V'y�+8��&�
վ"����9��ML�Y}�0V�m�"U���0+�O1h~�C ��v
B���
B��Xډ`��
�A��iN`:C�*��J�����c#��T��=,Q�^�Ϟ�J=�h8���Ov�D�W�=�5���
��p?�s/d��Cr���&�-��g�y~��0�/���DzUc�����6�O5`¯��,�ɟn"�%-�04)�:
���j�G��_�?E5������{�n�4q�w�`RE��
���K�!8ja��T�$#�SH�.(�R�36ѶP�jGX�����a�)��Ӑ
�<�������P6)k
e??�4=�A�k��a����#��
z�9�*������J9b"0~�b�᪋�����i0�V]촯&E�C����&۔o�죫Z�����H��!_�
�/��7����w/�;<�ۇ^Vm�ato�]G�s�?�����`~-�;��}>�k09��
��EQ�(混�*v�Ѽ���B��l�����^� D!Q�4�;��8d7t~]�w�CD�q�o��=�
���ܩ	)%�~���߆ƿ�{(\p|�f�E	��~�ZQ�
��S��m��/����S�����
��o��#P�x�����-�va%�("RW�!����ΠШ9\3�{h�Ml> �/��8 �2�� uE�����ƚ���W!~��$~{�xŨ~
�I��Nڷ�,dBF���
'�
��)J�
�,�Ɠ��daW�B�T���]�M!
�V
c�~�b�H���¾�Y��ta�=�.dL�7���Y�!\���
9�uV�X_���
��2�C�0�[�!��!�����
y��]��
%aT���ժ��[�_��
f�!N�{!8_�o��4_��^���_�8�;�j�>!����ot
+endstream
+endobj
+2328 0 obj <<
+/Type /Page
+/Contents 2329 0 R
+/Resources 2327 0 R
+/MediaBox [0 0 612 792]
+/Parent 2311 0 R
+/Annots [ 2325 0 R 2326 0 R ]
+>> endobj
+2325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.265 471.756 418.736 482.604]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.5) >>
+>> endobj
+2326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.804 180.256 408.276 191.104]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.6) >>
+>> endobj
+2330 0 obj <<
+/D [2328 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2331 0 obj <<
+/D [2328 0 R /XYZ 86.4 701.138 null]
+>> endobj
+446 0 obj <<
+/D [2328 0 R /XYZ 86.4 454.786 null]
+>> endobj
+2332 0 obj <<
+/D [2328 0 R /XYZ 86.4 397.838 null]
+>> endobj
+2333 0 obj <<
+/D [2328 0 R /XYZ 86.4 163.188 null]
+>> endobj
+2327 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2339 0 obj <<
+/Length 2975      
+/Filter /FlateDecode
+>>
+stream
+x��[K���ϯ�Q��xL*�}�)�g�Ě9ٮ-��Y�ֈ
+)�x���
�IA��Q�JeO�l ݍ��?@t�aDG��zyw��WB��h�Gw#��
�-��n>�a�	��+��UVNf�ry=a���2����&/VU�-J���t�s���o��*[U�&��o���j�.?U9|̄�r̸�����՗wW��b0H:b���R�f�W?�DGsx�fD�H��ɵ{
I�W����_W4L��'k�s�	#�h?��Ͷ\�Ȅ�Vj�.��O-d��DQ:�[d�Uy�/�����
+
2\G��o�n�%��m~��^��P��'܎c=63���j�/�)�m�g^:�_9.VaV��_;��u5a
+Fj^˥�����o���c&!F��6�(Ň
(s:�t�j�rb�p��r�N�_��r:훉I*ܘ��4ۼLW�7����iL/�(����fY6��dX	� Zk�tq�4#���� D)
t��˷�N����_�SN9�>�����)�㏰���S\0�>�)�&i|v��O�J�f���>���1{�8DB(k��5,����jP������iJވ:�QV�l�(v�KIClr�Q~:��<J�G�31�u{|��͐?i"tǟ
T��'b
��4�z|1���U
F��C.���^��u�8�V�v]f�b[-?�v����XP�Yh!$��"�Ыz�����H���wʩ!
+�l��#h�=��c]���2_ei��r\ˏ��ҿsf��L���h&����y�����S�Y�W����
��1x��-mۃ0����	�V7�о,� \Ip F����:��r at 0 �9��(�hq&zPK���1EM=�`�x at z~�u@����?��ΊHn���2}�6Y�j��'�	�|��@<�i|�� 
 �EWݠ�!b�!E���(B:����<|��H��ʮ��y�ôNB����b�U��Ghc#���"�
�b�L��I��wH�3���C
�nγjV�a5�3���f��aa���k�zK�!���}C"P5���{Z�+�W�LU����������`����
U(l�9:�3�
6.C�0LVV����A����u�"�X��z�������bS�E�=T�-w�x	����v�G� �5� [��YX��'�ڮ�r�}��CL�viY����k
���p�4�.��?���c�3��*�D&�ۥ3���:gZ�񃉸�(�C�uY@���yQ���&� [...]
+������]���n���6:7����@�d9?0����4�ܛ��Y-G)����1 at hU?����V�:å���
�wQT����M�I�cb�/����������@%���„\�3���Y���<2�t>���5�e��Ai�⨲Y�����h
��D����c�OC
Ԁ�Mo=�[�/�@�6>F����~��(�-0B�דu4�Dq5��������
ˀ�H�@��J���M1\�^����K�n�m>�3���-�:�f���z>�s����E>��40�)����ۻ��[m��f�:6�=O����zM�5���1ȋ#�2cR${̘r9��9�Z
y7~>-�D at u�������9�'�
e�
̼�k\+jVlC�X�n NM�����k�M�Na
��ƂJo$�z
�!x���A:R���m��ax=ȯhNvV�W�~"4 �R��{	�v8���0D�^���T+Q�Ɗ,��"�H5鞲�u����^�OX;�%�>O���{���L��q�_���c�r�v}��}����5�K,��sn�:�:��֛~��p�-�?��@-��cN�����4��<���f&N
��
T�\�mr�Nu�V�ӺԎ��KW����
�
����l��ӑ� �C�
��A1Շ���M��f$
w+�1��/��{c\'�w�(����>GÛYB)Be���� �4#b�-Es�=U�D"uX��p��u�1����3����.79��L��b�1�-�䵣(�5s��8b���~�1��6]��^0d��F�U�\f
�*���.�8cX��]y����cD�_����p'!o�	B��nG
n�߄�U���0GM�sut��S����w= [...]
s�b+��e7�k@|gg�M�
�k� v�C�̕�2W�8�CK�����Tg���� 6�^�$L�}�l�p�<��7.ӰC�
^�x�/G���	�H���
>���#g5�p�Zo
q��+��B(�	s�Y������k at R��
�V(��EQ��k\�Ӱ7���{X���5:��_8�1�R ڨ��rb��������
�����xXcش
���1-��u�3|Z����5:��\w �= �n���Sx�ejc���
���:���I��?�6q" �[ضM�|s{�""qL�'6��
j�="j�$9��D2!��2f�(
f
N�20�O8�q�>CH�t���ƥOk
��
��
?�!�۝z�Y
=��	��$av�
�
�o�&w8F5�H2@
-�h���Ǔ�8}U�6���0O�[7���
O8=Lb���Й�CB>Bѝ�a�pzS��Q�`
+�N�B�`�j�)��Kg��0W��n���r�w�Զ.�
�ۀb����H1���&z�"-(��j���s7�+�2p��n�E�B*k���p����;�⮞Y��D�"c���,�k5@� ��P٥bv�Qɳ���4�����&nS��3�������|�w*���
+endstream
+endobj
+2338 0 obj <<
+/Type /Page
+/Contents 2339 0 R
+/Resources 2337 0 R
+/MediaBox [0 0 612 792]
+/Parent 2311 0 R
+/Annots [ 2334 0 R 2335 0 R 2336 0 R ]
+>> endobj
+2334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.035 589.318 413.506 600.167]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.6) >>
+>> endobj
+2335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.946 493.713 366.418 504.561]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+2336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.265 165.827 418.736 176.952]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.7) >>
+>> endobj
+2340 0 obj <<
+/D [2338 0 R /XYZ 86.4 726.045 null]
+>> endobj
+450 0 obj <<
+/D [2338 0 R /XYZ 86.4 572.875 null]
+>> endobj
+2341 0 obj <<
+/D [2338 0 R /XYZ 86.4 384.117 null]
+>> endobj
+2342 0 obj <<
+/D [2338 0 R /XYZ 86.4 149.383 null]
+>> endobj
+2337 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2350 0 obj <<
+/Length 2704      
+/Filter /FlateDecode
+>>
+stream
+x��[I��6����Q�!ؗ����<;mlj�ON��n3�5�d��� p(�j�i�=ON")�ZP��	On'x��W�?grb��TN�n&Z">Q� ���j5y;%T��c!��e���͙��Og�N-�
��䅿x��#�6����H7e��>d;��S5j��gs2�Tf�����Ϯ.�sA`IxB�%���,�.���'+���#f��w7�� 
+W����
\��U��@5��i'�D�����,/���~�Lj0x����c;3��Ǽx�h�.ۤ(ӗ����O�j
b��vZ&ff�/�b�JÄoҕ}�������d�I��"�Q=�3�KvY��n����C�Z�!G
+�ɜH���Mw�^d�M?����z��/��
��W�S?�8�F��L#�t���:�=6�rzh���O��Q�B�[�JOc��(U���fw<?�
��q�|�o*��:Q��+������\
0Q)�&�Ͱ��f]���H�j
+���T�rr�O�<[,�^"
�:��ݙ$R#�Lm�r�\��*]�^+�"T�2Z��
\ ��
+0^�g�""acCGI1�___^�d
+Y�5��n�㈥����*9V�*��$c���7�w�]$
�f~�%)c;��yph��~���f��`"���	��$%���`*��ϱhb��Qd�H(��ӗ}�$�ȃhri����@���
�!��/6Y$)
+H��q����so�O�� �i�n��H?d��\���z}>Q`��t�|K��q2L����h����C�� �b��ݳ�RϤ
�7ӎ��t�mҤ��e��0s��R��򖪽���t�-e�V���k�}�1۽�W�����W�<��8s��
��.�G�/���
+ �x*X�%8�AF�6
�۴��~u�W*d��g
+
"�

3���QR���2^ɭ�
�H#�JR(����AE�ma��]�KcN`@Xg?�ϖ�#y
��j��H!G���;w|�T1s�+�x.���V�
���iqW9GR����wi�>L*
I�0r�3Z���h�dz'�iZ�Y��UZ.��ڎ�Fy�:�Ї4���J
-�m6�
�!��,
����N�tssf��7�Y�_�N�A�
+x�x��j����K>в�Eyll�7�u)�yk
n{:&%���J�C���x������D3J{l�uD('H�1׬&oeu�;'����?X�`���;�k�M�R���㒥���

+�ڭwk at P��"�ߺ�րޒ&�]��z�����诣���D̍
؛0�H9��SF0� ,�!�*���Ѷ�9�t4�
$V�u�`����xS��|�ʬ*i�8Re)�(��t��
-��#`t��� ]s
OlI�)4 `��\+;TL��?N�v�Q�� �5@Ȣ�%?�,0���@C� ����xu����o7w�mR�D�cO	�S��$<L�O]���X4�C�$>
sl�+����hT-�� �F�/�m�ˊX�2Rz��Z�6�}���T��'�d��-���Z
�
�m�l�zs~K7�=�<l����m��ؙ*�#?*n�wU�
�޽�4xDr�9�
�����	�j��`*����ꥎ�8ϧ5J|�-`����}5=�w|L��k�&��"�-�딢�a��
�͋�1z��u�{�
rqȵ[��H���a#O�b�U|
�j��3,�.���K���W�iT�����>�P��X
�K�V�p�P�8��}��[0�.�p����tF}��N����@���7���s]
�s
x�t��N9a�5ƒ�+E��T�M�1��1aգ�3o�
�'��ܗ�q�?9n�,o�뚁��ֿ����1-p�Z
v� �X��顪)6H
+6�PJ �B�B�[��k��������jr� W���������Ɩ�Z?���*W����N(�\�=K���
��KC~A*b�R�C�
Gc�Ϻ�x�*�\
Qa��8UvĀ��S�S�̕�U�+�;W���u��X�Q�Nl��No��2k<��p�/{�Al�E����
ڌ�_j��2=�s]aF�YW�@����}�g6�z�0�޼3Da�hg�Nhg�C�9Zf�D�ȡ8
���-k=��Z
�‰�J���8�X�ΙN�熠���`�[
�ܦkv�p�y �am{�:�]b��ٜ
��PM���H�A!�+�8�"PXy{�p��
��H�����i|�؛O���ɞDS$ۣ��E �ٍ�s��O��V���I��2B���,�	H��,��l{�)(�5}6��N������Ȑ�����l��t6%�

� �q� |�Z���i‡أ���
�/̃/z�p{N�e��='�B�<�"$��p	-
+�
&�q�τÒۆ�
;���+\�&í�]��#����V��:&�=�2�I~�	��x&�^8���1��!�O;L8x��c�������Q`�]Z����ю��#�wHg�WiU�7+W����a6�t8M�!�3���YZ�դ=l{
��NE�i� ��={8i}�PI{�4�C�7�J���=�#%���ìџa��g�֐ �����d������cY�4>T+-��?$�������I���Ԥ�o�Ƈg�������{��Y3,�"�.�?���?T���������P�����.�f�e~��}�	6�a<�
+endstream
+endobj
+2349 0 obj <<
+/Type /Page
+/Contents 2350 0 R
+/Resources 2348 0 R
+/MediaBox [0 0 612 792]
+/Parent 2311 0 R
+/Annots [ 2343 0 R 2344 0 R 2345 0 R ]
+>> endobj
+2343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.495 572.005 423.967 583.13]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.7) >>
+>> endobj
+2344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.741 266.706 186.213 277.83]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.9) >>
+>> endobj
+2345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.263 266.706 240.715 277.83]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.10) >>
+>> endobj
+2351 0 obj <<
+/D [2349 0 R /XYZ 86.4 726.045 null]
+>> endobj
+454 0 obj <<
+/D [2349 0 R /XYZ 86.4 555.29 null]
+>> endobj
+2352 0 obj <<
+/D [2349 0 R /XYZ 86.4 499.044 null]
+>> endobj
+2353 0 obj <<
+/D [2349 0 R /XYZ 86.4 238.273 null]
+>> endobj
+2348 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F14 1050 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2358 0 obj <<
+/Length 2629      
+/Filter /FlateDecode
+>>
+stream
+x��[�v����+�$s�j�\��,ܞ�|l�Ӕ�q�"!	I( (G��y5��R-��ASP����]���zMޜ�xq��k*&iA���j�bI4O.V��S��lN�~*�|�����
O��u�._��2Ͷ�����6�W_�t;�dZ�;E�-�2�KKs��?����E
+�1�M1ѳ_/ޞ��8���CF
őbb�ܜ}�5�����I��V����̈́Q����,��vy%���LՔ�L"�v"4FX
+����狏���c`
!��}�J>t�0U�Iz$k�(eM�~��$C��1d�H".pS��o��`�^חP���p�>{qc\N�.7+[B�FL�l�|��|
.��6��

���
��63�B��r6'r�$[��6O��lW���s&�j
�q�9�`40
��L��_)��b��V�H/�ݻ>C�q:�P�	���~���b��
����8�7I��=>����M���J��Cy��0#jZ&+��x�d���݌�i�N��t�N�0K���?��k9����ʤh>�yN�TN/B�>t��H���/j�Vv*��S���m�.>��r�����]�18"�aQ�]���w��ݞ�q�Z%�2O/�V�dN	CJi0F�s�"�)�Y}S�#a�y���̯}��܎S�dXE��5�kސ�`q�
.O���%p�l6gC�ޟ��;��J�4�
�H��AT��0.�s �H*�w��n���V��&�5��{��SqU%LJO�0��ǫ�K�ܞ��	�'�P&�j [...]
���M�c���� �c�]�f�����,�D�K�j��|l�pի���!"� h1�<������48G�N)���I�6^^����{����Ą"ij�COҶ�gB?�
���p�C_��9�^ 6��iyU��Z�׳9'|�W�q�
�D<JWq�,@�`ܞBC�zD���x���&�<sg�������3G�h]����~�&���ۀO�5	c�}�������>���U�)�JcU�\+��2
v�.�x;wY�,-x��yf�v�rڹKx�!@m�%�>�ˬ�ܗ]�K��g=��`��5[�I��AX01p;�m�AX���Vi����(W�=1a��p��*�w�!&
+��u0�%�Hm;�+��W�z���B�y������@,��n�<.zZEQT=�f�G��k'K#��h
��D

W���XdP���n{�>DL
]��>�E{�vv�z�2v�~5���*4�
��Ͱ�0�͛ʛ"3��N
-`�HȮ=vf�^%�ۀ��k�S�^#jsY+�e���?��}� �
hm�K��G�~&��h')U(��у��M
u�V�6��~�}J�I��)��]!�@��	A����շ&��C$S&�1fH�l��Ӌ���������w�m���)�g�������]�ˤ(�v�0u�
N3-@{�Љ&E[Uǰle:��������B������w7�!_�ԃM�(�P����*&�J����)�"���!���`�ܴQ���Jw�mF���" ��*G������:9
�5R��V�z��?����R	02!Q�z$	���
�ҎFSL���1��
+��m{�a�4�q�(<�G��
*Pj�C<M�u��]��oG`�"��%F{��^�����I�dR�!����/�]NG!��V0�@� �j1
�O�n u�[�~���t	��
+m�j���^��]�Sp��⑴�j���(9���b��cYb��� 1�����#���)�>JN�V��'i[ֳ��mk
Sr�EJ��Rr�Ü
�Y%�=����bS���RN!�Ys�<��#D
�r��B���\��&0���R��3��p�ށ��h��)�/ž�
R�KGqU#��!���Ѝ
�n��5
�Xƅ��M�'����
"�z"�}Y%^��pW�Y�~��,on �ܩ5�E��}�ߛC�����cp�:���C|��!.�x���AT��!�h��|b�!�h�ңL-f+hR��4���
�0��Q^�1[&O�Gf���oK#����J��ш'�\2-G	F��T�h���!��F<�� �9S�x�]A��8��@#6d>ш]�b--72��V�q����E�?P��{R����"�O�AO�PߟF�0������R|�F�L ��4"�5N����Y\��&=��a��9���Gh����w��f�1�vM����3�A�� mS���@T
�P��6�.J��ġmc�w�
��� ����W
��a������X����-�g.�)�|��j9_X8{�IW����7ٵ��y(j�ϗ����e,�����C�Ű�iy��04L���z����
�߀F��
�kJ��1*�r
��n6W����7���ԻM����̶E����Q9j���O/�_��zy�3�<����D��R���vT����!F���x�|�8��
a��OOtV(�GO0\���cg
�L����;��v�� 47wE��v�6�7r9�r��x�!��U�� 
�"��$ɗ�(�e �����A���yأ���_bZH�
b
^>"%O��	l)O �6-M
MK�Ȣ�����n4��&ߔ����x���
+endstream
+endobj
+2357 0 obj <<
+/Type /Page
+/Contents 2358 0 R
+/Resources 2356 0 R
+/MediaBox [0 0 612 792]
+/Parent 2363 0 R
+/Annots [ 2346 0 R 2347 0 R 2354 0 R 2355 0 R ]
+>> endobj
+2346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.398 646.119 185.869 657.244]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.9) >>
+>> endobj
+2347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.234 646.119 239.686 657.244]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.10) >>
+>> endobj
+2354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.186 412.183 439.658 423.308]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.8) >>
+>> endobj
+2355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.417 178.248 444.888 189.373]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.8) >>
+>> endobj
+2359 0 obj <<
+/D [2357 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2360 0 obj <<
+/D [2357 0 R /XYZ 86.4 617.89 null]
+>> endobj
+2361 0 obj <<
+/D [2357 0 R /XYZ 86.4 395.633 null]
+>> endobj
+2362 0 obj <<
+/D [2357 0 R /XYZ 86.4 161.697 null]
+>> endobj
+2356 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F14 1050 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2368 0 obj <<
+/Length 2777      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6~�����;+w��tg�8�8M�$r��>�%qW
�r���{@��@B�
3�i�'S ���w��H�h���ٓ��Gϙ�bK*��y�%③1��DW���0|>�
1�Pf����i>��8gt�xb~��</�����lcnUv�$ݔY��f���fm�������Yy���˳gWg��l	G�ق@��h�>���fp�e��u���8���U49{w�ݑ��Ѹ�;�
+����	"J��-���M���E�����q�D��F=�W,���Y�!�D3'�Tv�'] ��
]0z�z��T�G��|no�(��x25��lV�Ѽ���"f�K�,� o�јP��p!f�
+|�V�bcW�=[&�m�?�q,0
]-S;�8�DW�L�b���d�?=�r����p~~AF�
+�U�ꫴ
�eU�q���?tl�;��W�������W����#�H
+��8>�
�ZK�]�3[��r�7������s
+
��
�5]~c��Ę9;OZ��7����5(\��tc���4-��v��bg�i��*+�p�t�P
��u�b�
�+X��R����^��R
P&�B)�H��yB�|x��FS1�fI`7C

�	*Нݬ�u 6b�I{�
�$e(���Z
k��	c�bچ�q� �#��'{#�9�w�R;�|v‘�p@*%���
Oj�=:�(���o�r"}�s��x6;��w��ʾ} WQ��p�mҤp���n�m�!��C6��.�\[
n !�@�&�̤�������B���{cQ��a��"@��B�8�C��X!!�'����#g1�z�=�n��Q	ـǭ�A�Pb]��/ ҶP����7Ez��۲A�i�Z���֥�twߘ�`2
��R�p'�W�.�E|O蛷���Ÿ�&�,
�$PͥUZl,%�����t�^�k')��SB�V�
Dp<J6VTV���������~ń�6꩹�[�ۄi�bv 
0

8��BX�P��8o��WUw���wsQ�-���k�1�k�7y���
̤һ蚥�d����lS #�;
}������g_S�$M� ����f�ך�uX�b�����A!P(
���Zf�~=�0ݍ%�G@�*�^5�����Y�
�#¡�U����"�� [...]
+0��n���q}���i�F�1XIE��;�4�|�V���WO(�$�`rMV��uZjAM��NW��J�.I  
[P|
+��X�&o�G

����J0
b��
+Ek�����ǀ��_vG5
+�������An'~^���n���5	D
Q
�c�i��.����c
��Lm\i��A�������\��{��
��
A���.o����,[ǀ��Y�<f�Z�
�h$kL��O����*�n

=Wύ�w���aȆ˼.8geꝿx�|\,�k��|�?���D$�����AN$���Y� �~Cv���H*v��Z�67��8�?�Ϋi���J��j�Y��
�: �nk
��H[���.\��qk��wt
QR�kh
�C�
��R��x��c�����:Ӯ{P[�3��"�Ժ>~zH2~Q�ns�@�/�de��`Ө9�k����Ѣ��v`T���SV؞�AI���TI�NP��%�ڙӂ��p�1��%���5���R��(��6
�'��(�!v�(Jo7��iP
�9`%�t{�ʇ
mJO�w��D����!�Ka��f(��0����e���tY� >,��>��
@h�����S�u�z�����
�(�vMC��4&M\���(C�v� �!�^����*��U^Y��+23l����^��+��vo�f�}�jd�W�_�*EC�
+����.]� H횹<d8�!���|�kV�O�"�*��#�@�q� �m�
7���>Dm�m+�x�Iә�ݲ��(
�ʐ�w��:,|N� ���~���G�f�kނa��d���E�Z��*}��mi@萄����`GN[�^��	�Y�$i��lf�c��W���'H�!F��1z8��ҋ2L�R��1��KpS	~#�w�<�^jR�~��"��M�*ۄ�^��SI���W�����L�GA��^ʡFWlh��)� ��`��_;<��e�-�"�Iv�oz������b^��az�Ǚ^hG� 잻���!��^�urTi%V��dZ�1���gg��ds����}>��v�ny_I�3�lk���
M�5�\�.ҍI��$�RV���v�FL]@:�
MMa_g
�� ڬ�tK�I?W5ؚG�zI
�
��o�w��|&i��+��Э�w�5�Y,�����sP��PM��DM u��|ƚwx��sަ^�Z�y���V�9�r�

c~%��^ߣޟ���unCXwC�$�d�:r��/^��n[�x5
������w���m+�����(��m��0�wm��C��؛����߂�6�?%��(f�?'
}2'
�P,�Y
+}
=�І���A4�)��w����)J9���!��mL�ρό8GL���ljD���������J'����ٞп9�}:�`1�m��T�Mg ���=�#:�䘎�Pl6�t��p�M��D~
����3�ɪ�Bw�_y�>b$��0���4���q��=��[�ڏ���y�#O.���r4V�K�o�}����ϐ�
�3�~ �''�(��8�*��
�ibDZ�ʼ��Y6M�����0{��tU�����l����2Rj
+endstream
+endobj
+2367 0 obj <<
+/Type /Page
+/Contents 2368 0 R
+/Resources 2366 0 R
+/MediaBox [0 0 612 792]
+/Parent 2363 0 R
+/Annots [ 2364 0 R ]
+>> endobj
+2364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.743 205.638 187.465 217.593]
+/Subtype /Link
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+2369 0 obj <<
+/D [2367 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2370 0 obj <<
+/D [2367 0 R /XYZ 86.4 539.346 null]
+>> endobj
+2371 0 obj <<
+/D [2367 0 R /XYZ 86.4 276.305 null]
+>> endobj
+2366 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F11 787 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2374 0 obj <<
+/Length 3258      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6~���ӎԉX�F ��C�d3��i���N��a$�f+��H%���w �N�v���a_,$�s��t<��ų�g�g_�C$3ل'��˙I"9��F�`����y��R1���v�U��,�l���d~�r�]Uy�-�m��
9O׿�v!���O�l[�U�1�h�.��M7we��L$\Ι`�_.�9{uq�ጁ�x�j�Tdd2[ݜ��K<[��7�8��>��nfR؈�j3{w��Y�c����R��2�,b:i��X
*W��C)Z͋}u���u�Y�u�⢺����t�l��'����~�vW@^7��@��l�L��jɈ���w)$�W8�$�e;?V�d�]M&�ڒ�v4�7�p�+5ߗnY�̋K?�y�@�$7N�xrS,��[�7a2���X�5���&
������y:A�~�:-���jE,ge���@�#��zb�����V.��><�\�[�^�u���r���;��5�1i뒸p���9�]Ny���������U0�^�����亞"#�0�-�-�R [...]
�H>�l��J�]�&y1��&�f�nzfG�e�Xjf��г�c&we��]�o��8h�4��
+2μ�d��%Kp���}�����bl"plmU-.�k�"��Z�R_L�%U�*���hf�D����1p�Qۿ�z\���ڄ�

Y�`�<2I��MvS����7���j�?���<ڄ]�[@���_�6
hy3��F�ꁠ
��Uvk�&��0���ZG3
9ZVf~F#:X��5Yx'`	�nh�}Y���r���v�e�ۘ�)�^���Gؼ�3��U at F"(w�u��aq����e,`�XX�q$�&��+kgJ����
+x[F܄\@�.H�Fc%R��������8����O>�W���
M�P�/��Y�0{P	9����.�
OX$�j
%��2�Q,����cT��!����
1�{B�狥`���
��s��I�Dl$��	D7$왧��u����({xʑ�D;`eOn��.��x8/�P�Y�g��)�����r`:JL��.��;BW�%�?cL�Qrn�;������A�D��!���
S��cf���v�

@F��$��
�� ZD6�Z!{X�Jw캧��PY��?�s �ӱ:�sPz'����
�!��0�Q&�GDF7Q�c�9��
+�����r�d,�B0$�b�N�����x��ıE`�;��s���*[�|t�p&"�l�a^�y������R"�#8(JG�r����#��%
��|[��d�ŗ�b|�\�u��B�א�)C���t��;�B�3�kp���L���
�6�ll*��F��kI37�ٔ�$C��G��K	a3i��J��m
�G*�*�Ģ��":K�U�/z���{L��� 
�g�
%u*$�d규�E<�<���;��:0
g�X�g�J�(M���A�p
+�~[TY94)��P ������~�x[T������Ip0���lB
+�F���<��,�*Z�#�<nf�5�<xY[�]�~���W �&\)�f/���
0�
ֿn�~?
|���^`����ү��,6�6|HC��R��F�w'm�+Wp�~���oӲ��q{TO��A,n���@I��c倞.�<(

y���5Vܩ�����jGW����ܛ����e��7��,
á}�����UV
����{���
r^���.
�

�Uv[~5%{(ݪ&n]nҫ�����
��r� �R�[(��dOr$)�'�[���#=�۶
T����Sٶo*r	e�F@���2�{�Q�6���q�PP;��_7X+mka�q����'�" 
C~i�$�e���`��~�Kpl������Áb�gc��Κ��ٺ�b٨·m���$��
�n
z��;'�h���Ɔ��d��
0�y��-�B�ל`���l��d�e��h�uZ�����3��ux���	S�2�Dtu�;�Ų��JK@�������Q���yu=!��R�
��IIX';u+R�~��@7�����
ܨy^���Cw��j�򰔓
+]l��]/��[\?��/4	Hp?�ȼ�7;��s��bu��w��cv���|�>�m�V^�b!s��$������
$�$@';(��=Q72��Go=�
Hm�w���
	���l�qͣQ��?���H2 .ڕ#|J��1}�N~����{�9L��b���s�����Ͻ�)3����Z;j��U�S��M7�BV�Ѹ�eKg*�� 1� �/"X/���
�wSX��
�P�b
��vN^�>Yg��#H���0^�?�.i(�'��Qb��!�bq�6����g��o���@�)[@ rS��N�	W�b���3��ɷ���
ge�u(G��@�]
>' o
O|�d��X����Q(PI�����|��u!�$Պ9.tJ�����2;��VG
+1�k:(}Rl�cW'�J:	.��lU��{��y��U���a�g��n��Qo���&�w��5]R�k�i�
;P��K�H�-?�"���ɟ��nPLBP���L�"G�hۦOP��G������FAȢh�-�n�p�ک��&.������m	I�w�� l�u��D����{���b���W��BQ�/��v���i�V�"Ϡ��

�w?�x��ݻQj+cq4Oeq��n%�1���*+����
t��f}t8.F���$R�Rt��6���w�8A�N�)J�D���o��ۑ�cdhӅ���I��Ğ�5��ʌJ+>T��@�A���Q�j9X�E�`eL0
�Èy��Ӹ���ݦ�_]L��*v�]-2<D�ޮ��_^
������s��p�(���Ǝ���Rlҫ�}U�묗h��j��5��Lݥ��H��mj��)$��4����gD2fu��u�3�n̝�l�z�*P��*kb�T�*�Q���n+��_lj���g=C���Q���C�!�8��Ng�_"3e��f�8���c�l�*�_�B��v���	:�Y�7�Y��VV�:%�=&��>��Q�aN�|
� ��.��$��Ç|�۶yQl˼��m����T��#��g0�
+d��c�p����S�O�����G[�GQ��J=	,El"8}���W[u��<� ��ȓ���4A<�R��n���I��'�tO����69�R0:�Y���~�&e��9�! 
+�-��˵��p׫Qf�@t�78dm�Ca�?_Ń�}�
�\���M��xK�������x���6Q���N��zDž��
+��������%�

+R'ț�G�u/{��_�{)ؽ��w/�k��g������m�ם�?����3���
+endstream
+endobj
+2373 0 obj <<
+/Type /Page
+/Contents 2374 0 R
+/Resources 2372 0 R
+/MediaBox [0 0 612 792]
+/Parent 2363 0 R
+/Annots [ 2365 0 R ]
+>> endobj
+2365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.365 639.184 124.837 650.032]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.9) >>
+>> endobj
+2375 0 obj <<
+/D [2373 0 R /XYZ 86.4 726.045 null]
+>> endobj
+458 0 obj <<
+/D [2373 0 R /XYZ 86.4 701.138 null]
+>> endobj
+462 0 obj <<
+/D [2373 0 R /XYZ 86.4 682.342 null]
+>> endobj
+2376 0 obj <<
+/D [2373 0 R /XYZ 86.4 589.999 null]
+>> endobj
+2377 0 obj <<
+/D [2373 0 R /XYZ 86.4 376.324 null]
+>> endobj
+466 0 obj <<
+/D [2373 0 R /XYZ 86.4 169.783 null]
+>> endobj
+2378 0 obj <<
+/D [2373 0 R /XYZ 86.4 137.105 null]
+>> endobj
+2372 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F48 982 0 R /F49 983 0 R /F11 787 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2383 0 obj <<
+/Length 3198      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw�F��W�H�3۽�ȼ9Hv<�y�'��$9�$a�"h ������DLF�MN$�TUW}��.�t�ϳ˛���D�HH�xqs��1�
�
����,���+Ni-?����|%�\�{.������쟋�?e��W��w�o�)
��ܬm�9_��S]����p���ٗ3$��$DD�x�~8��7����
JD�_ͼ��	��o��>�:��%�eM�kL*�.��b���%
R�bI��f�P��0�["F�a���>��9����]w	p�P/��_id(��+�V���0d�SN4Ss��)�!
���
\�!,�
�ӼC<�+b�.A�&ߞsetƊ-hj><�s�4���lbVT��Ŋ	��E�R��4y�-*N$��[qv�%R+>�%����;
�~�Y^��Q�L��qR>}�p�%	H��=�c�쫭_
+��n�y��UD����
P=���Bj�d�ݤwC��$\WW�ڭ���-w����ؕ*@N��f�?�
+�4/`!��e�u\��S��" T�Pv��^L������3؊G���?�y�����9�5G�g���r���j�ov{nc�"�=������>[�����z����~�yr#9��fF��F�eV!u2��`+��3����3� e��	�4Ip�O?�8qW0�	ѽ����I�^h��#���9x�8n�

��Je��Z#�p~��j�lȎ�DĭIz�
=������0M��z
e�L���Y�
�����_#g*
ԱY���x��̋�?�њS�  >|
c(]�-��fk��ҡZ=�c���wU�X�����:�l���U
��`�l�x����D������p�7���?�9��F�I��!G��Mb���z_��G�&�h'eEֻ�
+�����
5
ܹ_�9]#U��ji��&���
�7f��3�,��_�J����@Y�
=>�M^��W�J/�c
 1G�΋'�����q�	u��7PSn퀋~�L̓p�ɗ�]'�j7pQT�(m���>�_���^V�fa]Ty�
+��r�֣P����i�[�(�pQ�p�.!b��R鮦�wNy]VU^�m���f�0�Vw�ǔ�;���,�u�k
��V�k[�=���i�y�@�)�Y���rL=�z��2��	Ɓ0��"H+`�

N o���N^ts�)/�n�1����9��
�u@�<��G� �?�x
��ۃE��Ô(���A at L<��WH��F��Q��;�k�t7���_�-�����l���e� zaU��U��+�cn��	'
u
dy	 $������a���J1���&u��/�4��}���
pV=3�D�

͛CO�Ѧ
��AC�EC
E4�@|d�~޻��.�Z�%�{R��j;��G��4X���*�I�6�nA"�fn���
�
3�Ax�A��#yM�WR����A��q�)�>1aE�,Z�D�
��hqb�+������Ѻub�h�	�|l���~
+�,k3����o
�.�� �n�)���	��Z��������"��ye�+
�����vTl0�
6�
pY|�[>������ݹ�V̮^+��WvY�eo8�����T��^���!9�X(���&El^�~9�-٩��
g���By�8�{g5_�e
A���v�]{����0jcI;V�w �
$��
����
�c�W�(��#C�䪮k�Zn�`4�U�;˱�/[f��B�Z�[ ����1�Q
[<�-�I�LZ,C��9^Hh%�N��\����~��%��)^Ok{��d�k�WyC�����8�q
����a�"�v�ZYS�T��^����y x� ��j�2�
��9�f�� �qM7�mQ�9�������&Mmxv[�T`��.23[>|�L�]h��d�
''$m$l%	�rj�,���
EtB$�B%�Gb\EzIS%N?��=,�5;���ՠ�M��X�r��ϩ�4f�FA]rA�������F
.1�c3k��x`n!	y sze�1���_��W�����%E���D�	ha+�
�o�z];�싱�YX�dgVđ��MXQ�/Lh%��2�����\�>
*x����M^i]Lmr�x��<~��;�&��Á��c�1l����@k!#9�q
f�����:�
nᢓ��Y�Qj;����".��~�[y�]
p�
sR+��J*�ߎo��U�	�<
��X�U+H\���
|���
���K�R��xF�Q��^�2Aݫ��<#=	�t��Njw�^�_�i��q�w�9�=&�I2opkN�
�|���m�GA\&{b�6��9-�dKƛ�n�����x��=��q]>@�;
c,؅w��3��W#\p.�=�
+{E#�����O��ah
+^%�B�^+���
��4� ���c�֤�L�
Q<<�H��x�C�3��f�64*�W�x�w�<f~��S��v����n.�ܣ�o
�7T��5^�q�����p+�1�1K��Ҩ��$Q�u�O���D����3���sL|
�
�m�'&���?��w�3W�'h�^1���\G��,Q$��;Wt���Nͷ&��؟�u/y�D{9
���H"}�ٌV�G��AsI���hB�Ȕ	i���-6��i5l�O�iߝ��?��9'��ҿ­(�/��ce���FjX
>2��	�m�i�����G���"4�'�i9�6�lq�VT�#���P�

|���5�_�ߠ�,�p0/�{�
����<�0aь
|����Ķ�?˷5�Uѷ�s������~�]�[�����
~2�ڟ�
 L=$����}�?�	��;� �A�t���b�o�8��|p軋���sa�z�:ePh-|��%y
�!��觅m�ch�/�8 �/f�؊Iqės
�%8�/3Z��M|������|�q���(qۭ!����|��{z��+ x7}5i"�H��2��
�}'b�Byl�����VP$ÓL�L��� ��
+��Mg K�ʦ�8:�
���&����$	�ra8�k	��% ��
O�h|�P�������f��d� |�'�����d��>�b�����.[�~x�e$'�?]ه4�j�����}�+d�p0��e�}��%
u��Ca����~BI��Te_���>�ƺ�t������������s�}
����ھ"
+����~$�������Wi��Ҿ����g�Ե
+endstream
+endobj
+2382 0 obj <<
+/Type /Page
+/Contents 2383 0 R
+/Resources 2381 0 R
+/MediaBox [0 0 612 792]
+/Parent 2363 0 R
+/Annots [ 2379 0 R ]
+>> endobj
+2379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.033 264.441 392.505 276.396]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.3) >>
+>> endobj
+2384 0 obj <<
+/D [2382 0 R /XYZ 86.4 726.045 null]
+>> endobj
+470 0 obj <<
+/D [2382 0 R /XYZ 86.4 539.338 null]
+>> endobj
+474 0 obj <<
+/D [2382 0 R /XYZ 86.4 445.661 null]
+>> endobj
+2385 0 obj <<
+/D [2382 0 R /XYZ 86.4 389.289 null]
+>> endobj
+2386 0 obj <<
+/D [2382 0 R /XYZ 86.4 122.657 null]
+>> endobj
+2381 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F38 785 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2390 0 obj <<
+/Length 2998      
+/Filter /FlateDecode
+>>
+stream
+x��[Is����W�]f��јT�����D����
`1�f �F��y� M�i�\�8��h�����V�Q�������.�������&P�� a)�����P6s���U^�'�|>�0�2�M��f9��ղ���"̦���刳�6o�|YuqW���`G-��CU�ǔK&B�����g��Ͼ�Q�dP���(!����ߢ`
+o��
+���E xJ������Ydu+T�T$�
dJ	M�9������
܇/�t?�
���_�8±[s�����
�	�ڙ�=8��������Sa]�Q�����fkؗl���u��rj^���gA����q
��8 ��&f#嬺�����^�_n��Y�fif�'L8a��i
�H�T��hWL9He���e})Id3�ɨ��
x6�a�K��{'��zS�]�z��.��4R���h
Gaϙ�"��n���X�Ȳ
NV�U1�ds�,p��L&�3�$�c��Fи����[f����r�ЪHFc�F��
��oZ��=�o$,�i���p��R�FD&�
Ɉ	��~n�ox����,֮q��4���˵`��l~q�l����&�Ș��!��AfUcv퀈"���Sq���O�:����_.HyZP�NJEWn����ên�������`D0�>���i�ՑÚ�)��V��]{ �ECj��]�P�I��@�!FixO�D�f�J$�,��|R��
�P��`T�5z��Q
��|cќz�;>
+�a<�ף1��3�f��yͼe�nѮ��=

AX���r���
s>���Pp�c��2�>尡�� �A}���v!7��}_l;J�H����g�=V�&�L�o�f�L�%f�d�2��\�}�!�v�0}ZϸZ�{|��j>_!3���O5��p(�-��ƥ���$"�Ә�<}��Sp��u�k^}~����!�
G$N
u�x
O]�z��l�U�[u��%��W3��2sW��$������a�)����
�ɩ��Aȩ(�֒����E����(Ĭ`��E?~��a[i
��f��a�f�t��0P/ƶv��=J����m&�X���&js�ڲ([�߂����	��
�T�!�
++��޳f�K� kD��k��z@�!��m(�hv��h5��4����w��]
�`S��{f��U�Y�|i
�e~W�6����.��֪�+z
+k��ƃpf?q��?}M���5ߜ��p���w�熨�����<CO�>s���E{��������
�
��i8��a�$�:9�C|�c1W0Ԍ�c{gMb?WXԱ�[��?>_͗F��Y�-�:/{tMob�D�2��6&��ږY�*t�	q��S�����

@l�E�;�,�'�K��~�bv�:�-��`'�C�!�E�i�X�2�#tk4{��&��y��̻�(��A�T��.��d�[���P��w>u0�6m�'�����R!z��vY�ɯqx�C:kGw�ݑIAT��ъ\A=1�27a���PK��2�7
��I|P�'Rq�����,[ZB��4��(d�,�g(��j�iMB�G]f�Ơ��zN���x��ۼ~�l��l�l�:�*k���Χ.��g6´PB�Stb�%كR�~B	B���'��jGg�ߛ �̜����
;�k?TJ�hEr“}R�m3%a�/�}~������{H��Fu�LY����췁�N�4�7��S s��6H!�ĥ [...]
��#ֺ��7i�7���$�2O�G5�
PM�ӛA�8G���k
��O�5A�)?�@Qg|�
+��\hz�bQ�N{�~�9�n
����ύkr�<�Yp&*��� KZT�[�B5��8�$L
�Y��	q�������\�(}�
�2[`*.�
+7��N�k^~>u��]vK�$퀅��xC|���
D�L`�Q �g�js;���O��q�zl�ˎ|x�[��Up�H��R�h*gD�S4��ħ��f�J4rx�
bQ�����Pw'K`L�4Q>v�qe�n
Z�N2k���H_?l*k���nj��f=1�Ai
���(Jge���#��D�9ɪw>FX$���c<��ʴu)t,��,��w0c�\
%��
�@�(��D�3L��Iԕ�I�T�m�m��6=�
�h�#Un�` ��yme^�
	�X��v���maH�ϫ�yVٮR3�Fl]�8y�ț�z@�hµ��Z���
���D-0�:�{%���]�L�.uNxWL�z /#�c4�
+���2[�l��rS㨏?�aʓ��y���X����'ܠ$!���#g�D����9�s}��L�Ի\�)b�T�^��#����
��jTA�괷eN_������� y��W0 �S�
U�p��_��p6�qX���f&�r��G�_��.�e<^�PX�N}4�Z����Z
?Iwչ?"���c  W��
����MJ�)b��;�T���֥����x�-3�U#��7��:3�B�l�w�)pj�����
+�����p8�?t9�S�'�.�א�2����:�>sYo	�:u6e�Y>u��L�A�A���v�]�ٛz���S��o�.
�u�N��
RL��D�Ŕ����Ez���c�vLD�Itr���H�dJ ]���g����՝n��x�n��W+�L�dݐ��r����~!ؗo�g�2Q�N6u�W����ڜ���I�qhOrº�&m|�[�IH"�҉�����/rr�NO[���:Qo2 N��I�aw
+�l/����f�S�g1��~#�
+endstream
+endobj
+2389 0 obj <<
+/Type /Page
+/Contents 2390 0 R
+/Resources 2388 0 R
+/MediaBox [0 0 612 792]
+/Parent 2363 0 R
+/Annots [ 2380 0 R 2387 0 R ]
+>> endobj
+2380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.949 649.882 481.421 661.837]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3.4) >>
+>> endobj
+2387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [284.241 210.924 306.712 222.88]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.3) >>
+>> endobj
+2391 0 obj <<
+/D [2389 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2392 0 obj <<
+/D [2389 0 R /XYZ 86.4 484.855 null]
+>> endobj
+478 0 obj <<
+/D [2389 0 R /XYZ 86.4 255.327 null]
+>> endobj
+2393 0 obj <<
+/D [2389 0 R /XYZ 86.4 198.024 null]
+>> endobj
+2388 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F14 1050 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2401 0 obj <<
+/Length 3272      
+/Filter /FlateDecode
+>>
+stream
+x��Z�r�F}�W�r���n�9){'��Tm9�-�%l �@y�_���
9����ʋ�
fz��O��A8����oOίN��FD�4H#
ֳͮ$
+�,�i	6�Z�>͙��

�J�?�Eus�����8|~vI-1_׍�q��O]T�3�.�-���������t��mў�z�������'
"�3�DPA"�����ӯ�l�'�fa �d�Y���I�
����ɇ��n)
oM&�[�R�82[{{q��<
y�D��:$��Hz	�Wd!6��颗�����^�	;��`2$зy�a�����W�Lfc,�R�=��S�̳'*��.�yۮ�e0�xG�a��
?�x�s�!V��(ǀ����~��{Ϣ���Q�	&������w{r5/V�G�G
GL��;���w
-�AȸS���Đ�
q{�Nág�O�Q��T��Q( Dz��L2�P��ϒ,
+R���$�$L�tɳ�w;g3~ED���;ūۜ�
p���]QW
�`n�����o+`ߞ~�
+"����c1���8�507��ye��&�/�m[>�qˬ,��jM��%�.F&GQ+����i�
aM���>�]<[��M�m�_D0`k�ߠ�ԬU0�ۑ�
+�.�YY�/���B�^b����o�I��{��8HB����!��:
/z���!�R���'�0`R�F<"�S��Ȟ�� @���pj0�c�a>�ܢ6^�Ut�E��&������!�����ɚ�.��ƣ�(�+u�-��

�c1
+}zڬr�F�?U�
ζ���B(�◐ɼ	̬J�`Q
D
+�$N�,�G
>�`~?l�Ӊ�k-�Ͷ���v�g���vBx��ْ��o��o֬���ǀ�vA�`hq*{�	��=#� C��mޚ��6��e�99uv�	�AB��o�aH(��C5����Xbj�����ev��K��&�ͪ��.�njMi�^`Q z3���S��|�mK:U�'ۢvw��ۛ[3�b��MW]���ڽ`;�8��,�IQ�k�24��h��=Ӻ���l��`c�<o�F�gW�8���ݵ�ݺZ��Y4�sb�1'�`,�P��a�̷r��[X#aru �i�J��~J���X��i�ce yOer���
�S֙����#�
)y�v�e��/���i�v�}1�}чӉ�EO��AZ՘����C翐L�k��}�7̩�.A�
q�Z�c
�6
�
���&�ש�<	�
AhIK�
+K��
2�Hdu��ϑ�q���2��($!�0�h.M��i����_B"A�7��f�>8�;o��
b�Y�o~���˼�*$�O,��%�~��캥����H
N�e�9�+�7i�� jB�x��i�,�(vF���o��޸��m�X�#dy��]$A28mQy2p�(
O���zI���@r?ӓi{0�(����Σ�%���X�[
����K�����@�y,|p1ոQ�
+-!�4�K�=
+�ǜ�Ϫ:�3�D �/#8�h,�S�X
HH"$��Q��y���%m���냀�V�6�h�3<�fF0��晱H�y&�0�ˠ��*p�g��3ͳڋ�2�����q��8[�w��N/I�)R<v�5S�R��Ϟ#d�]2��Y!\���r,tb�
�̽�@×����
_N�|y�Hͼ��6Q;�E����_,��
͏�@v�iS���d<��c�
1��J��i�uc-� Ŭ|�eE�V�v(��Bl�J�(�
�Lib�\k �R7OT at lI�Ⱥmy�վJ"
M�>�
<�>)V�z����E ����)�ڥtB4���3�e�S�y{�OiWu��+����L2,~Q�F$ zAS�0鋢�B A��̋�C�4�9��xDC���y_5��ɃH�sbݺy0�^��6
�/�flI�$@�)��|�9�Ə�����#����6����%Sor����'#m
�77�;뽦�0��1cL��{�{m<dI�'�!�Ӊ���I��4�C�h�s=��q��o])h�P�1�D�����[
Ob [...]
+bf�V\j
Aa�Fk�������u���1�Ϸ�L�NHM��Y�K}��GГ���h�]�ao�-s3�ϫ'�"p��i؀�EI/ēE/Rl�f�l�7k���@��A�8+x�v�>�Q�*�� ����
TM�����^��!��="
K��HR�As,�z+rR6�W�v����t�.[��EV-��O#�
+��s�%��yB�(�LC�t�����M�Xz~��)��
L�����%�pz'���sm^����e�� �e"�]���
$G��iZ[�&1k�̅���e���|No�߶Ӫ�V��/�fPX;��V���י����=,fk�n-��@���:�E��➀"���2��A{#�ԛ����z�
���
�<�H��s&�hBJl�*����qT-�&�N��ִ��QM�
+׍��=ȱ�оD�n]E����[  E�p@[ZrI���t�PΟ����9"��˹�Ub�+��j��ȧ�U
��B�K:G�&(�^Δ����̓�<�A�$�T�Nu�����2ԉ�˗��>&�O����'&{_�P ���ۮ�;
�q�X �J@���W��T��X����O� �z�<+i��ْ�{mG���H˧�e�����VΑ�����!C��Cj�A16�m"(ܣ)�zd�	q<����/�m8�+:���(��v~@S8�$>�B� ����s{D�
�!VF\
�0��
�b�ҝ�}M5
��J���a|�4>�dQ�
5m�u�y_�~�jt! K�0�����mcS�6߽��Q���m'��1��U���� y4��tǏ�A(3���(

"h��C�Yn�G"-�m��FbQj�S�� ��
C�r�9���66?9�z4O:����,�Ft��ۚ
T>�w�t�su����ۦR����7p/�|�[jW�F/K{���x�;+� [...]
�����x:�Ko�����=���j�F�ퟻ
+�p_�����L�}6���0yqT�Ak����g��;�D4��/ܴ?�ӕ
�%�o!�/���L�L4p����ʩ�����ڠ0�6�v��!ѤE^[����in�����kx��YĞܕ^�
/��S��D�������	��Ʀ�
+endstream
+endobj
+2400 0 obj <<
+/Type /Page
+/Contents 2401 0 R
+/Resources 2399 0 R
+/MediaBox [0 0 612 792]
+/Parent 2363 0 R
+/Annots [ 2394 0 R 2395 0 R 2396 0 R 2397 0 R 2398 0 R ]
+>> endobj
+2394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [285.426 540.919 307.897 551.767]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.4) >>
+>> endobj
+2395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [293.032 413.821 315.503 425.777]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.7.5) >>
+>> endobj
+2396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [295.67 389.911 323.123 401.866]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.10) >>
+>> endobj
+2397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.164 148.593 183.868 160.548]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+2398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.149 148.593 224.853 160.548]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.25) >>
+>> endobj
+2402 0 obj <<
+/D [2400 0 R /XYZ 86.4 726.045 null]
+>> endobj
+482 0 obj <<
+/D [2400 0 R /XYZ 86.4 596.17 null]
+>> endobj
+486 0 obj <<
+/D [2400 0 R /XYZ 86.4 375.978 null]
+>> endobj
+490 0 obj <<
+/D [2400 0 R /XYZ 86.4 275.101 null]
+>> endobj
+2403 0 obj <<
+/D [2400 0 R /XYZ 86.4 228.907 null]
+>> endobj
+2399 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F14 1050 0 R /F16 729 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2412 0 obj <<
+/Length 3533      
+/Filter /FlateDecode
+>>
+stream
+x���r�6���m锅�
p�4^gR���ڌ'{Ir�H�͍$*|���n |I��#W6���$ 5��F�F�����|��{���$����2�����h��ϋ��Xq=V�?UY9���v�g

������T~Ų(�K��w�o��k?Pe�*�󧼾<~�N7�����Lp�c&�����q���߯ H#�"���:���~��F
��GD�Hl��֭#)��m�_�xE���v��:a����)��r�	?]+��&s��@��g����G�}/��%�HX�`}�{�)��on���BE�e���hVHL��E����|�?�f>Ϫj٬n�t:N���z�M\8�^�[�֣?����̋knc��2��
+벲t
���<�!��L���f��Dr͛�D1���/T���������q�G�9O��Ӂ
%�Q
+�IK�|q�y�V��p�.{�W+
�S׀7�����Eد ��5 ŀZ
O�3�_��
Ҟ`82 ~"�����n6eH�@�I-T�Ř�@	đ�x�櫦D������p0����C�����R? ����LQ��`U�ʿ��ńd�D��y_���)�e��:/������3� ��W]�%��L)�hrL{a�v��u�)d�;P�a������>�}_N%���ž���Ѿ��}�aBJA�{1E�#c�1c�
+g�1M�
��X�Y�ke�66~�Z�	�F�T,�s���ͨ���	�۞��S���:��D�N
+�di�<l�׏^����^/\�u��C�
u��%4RԌ	��1�bJ���eBx	�q3@�t��l'0�
4;��� �S0 at Y�
� �C,��m;��x�-Kˇf�y[R�
�F!�S��8�
�*.{�~f�1�qb�'���Q�
+!L�9'��D%G��FH�k݆�K����Ȍ�^`
�4��L�Q�쟋�36�96��xlxw���|
E3�P����.L��E�
e"+�,���ɔ���2�®aQچ{0�,��1����#�j	��N
'�
���
+K�
+p��ގ��w�K��_*ow�$����:s
�˿�ܓ�r�C
x�.

c�-s
H���M,�:�os�UՁt� �;���Y䛇,�hz����ո�1�
�6t[�����{��\Lb at k

+(�y:�R�Wt*����l=�
+��f����5��-B�Ŧ���g�	�9/���C ��A�F��de �z�g��
B�A��=p�L��<�{���'FY���;�>�b�&����4�HC&�ivߖ����.j]�	t�S�
HO�8�W�HX�9����7�����쬄Pa��Mo�n�Cs4ǗvΉM6G�����:�AkP4�\
�B�Sq	׀p
+L9
Έ�2��l�e

{B9�ߣO�
����l�K��U��2r�pr
l�Hb��:<T�N����Lc��nC��
�[nm�hW at X�Q�W��wv��h��]�sNtFeM�D2`" (WX�/�*K�3����U��n�'�Z'm��w>>�>�iUa̋�(������dA���ĩ�BC@�ߡ��&9��y�c�[�
�j	μ�/H�
�i'��!]��u�
�X�ޫt�F|!�'9˨��M
g-�a�!�R����-1�4�P
k��R
�,
���
Ɨ�DW�r�?-�0�.u�U��L�bC�=҂�
~�`�vLq~\H�.޾��a��h��	�������̈́���wyNI�I�&��?�3؀/���XI�p4�w�cY4�~ �k������~+�H(pK6Rܘu���%�M�O7خ�~X�� �����yX���j
�,��dI/b�9�ؾ�S�oy�3,H�
+�u;B������a�ɝZ
�=Z$���ӿ�v5ܴ��T
��6���� ���$�,A��
�e��U���'ֻ����K	DH��0
���M��MoL�
w�hҐT�vϕ����2���c��C�QK����ؕ�F�r�r<]�c504Wr\lD��6�Y�Wc��ھy 4Q2�K���(��,�;P�%'�`"�$X�7�K6���B�
 ��!��8��"

�E�#�k�v�����w��
���m�R#H�!���=�_��8��
�q���@��M�t��UP��S,�`�@�����`bM(�wy6�w���0�M�;*���Q���.=��
�I'+-e�Q�q?�H����xx����X�w�1�����w��Mn���#�e��L̶��
��AI�`��H��@��":��$4Q

>`5'T�R!��&��߉i!%�����=��r�+��^Kh
�
�w繒;9F���+0��d��6[d 0��Y��
F��AϏCe~��7��q�b-P;!d��b-P��2;���a,$(�~,$ëy��M�#�]=N�'P� �
+�
���P�$4AJk���7/�G8�� �[ "��
G��2YJ���f��IB��ބJ�
�=&͚0�X��d�0��@H����G���-$�5�
�@��"O���dQr���@M
+�?F��: �����;L��:El{��Ϧ
Qv�w��5U��]]��c��a��(^p(뎦1�N}qm���D���
Na8��KUgk,xK>@i�:	PJ�%	ɠ �?P-����ҩ�P"Bs�:XZ܉v���w���p�y����i�>6m/;�l�]�w�!�>���k���]�d��Y
~�
+@(�
,�1�;
h͘�����:�^~
�U�j��1\q`��z��ןg��:�"+s�5�t�������g��h.�T5R�z
>1�OP��V��pة�%����8uχ}G�9+�˼���%HW���q�Ӣ1\cF�4�@���
f���W���ȫM�
��p4�f
y����y�����I�bv��z������� ��ƪCf�r锯�@gHB�ء�c�'�����
���i��v��O}���w�p��4\����Ϗߩ~��ۦ�����i�2�a
�3��_Z���wxT
��
�aҫ}�JC
�
S�PЩK.�
� �����%�B
P����p?�gϜP��%��&8��k���+�t���~����߻�
6c�TjT��w�ZB�
xw�&�ꔆ�L��Jݕs�c�-��Ox�Zme�Fa��
�^�p����1���gXF��8�/|J'�l\�i	�ZEEBC�ܸ�9|
l����Y7���aK�uݵ���
7w�BV�o8�� >��Zo�`d@#�t�ȸ~�
ѥ3om�-聶��lC�7ܲH.�zl��{l����B�m_=�0���rq�Ƕ� ?�c˓s{lw;`�6�&�X�ߢ� i-�챽|۶�v���[l�-��vI�-��k�
���:�
��.�ag�T�Z����>���!��
 ��^��]h�x{-�*ڣ�R�&"
�I�e�4J�¶yHv�+�k��񗦞&"��r�����7zE�����~S��iVC�}��V�u��q��q���Շ�l��.[y���Js��V���V���!�����N��}�����-�
+endstream
+endobj
+2411 0 obj <<
+/Type /Page
+/Contents 2412 0 R
+/Resources 2410 0 R
+/MediaBox [0 0 612 792]
+/Parent 2415 0 R
+/Annots [ 2404 0 R 2405 0 R 2406 0 R 2407 0 R ]
+>> endobj
+2404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.157 547.522 165.88 559.478]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.008 547.522 205.73 559.478]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+2406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.164 299.482 183.868 311.437]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.20) >>
+>> endobj
+2407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.149 299.482 224.853 311.437]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.25) >>
+>> endobj
+2413 0 obj <<
+/D [2411 0 R /XYZ 86.4 726.045 null]
+>> endobj
+494 0 obj <<
+/D [2411 0 R /XYZ 86.4 453.999 null]
+>> endobj
+2414 0 obj <<
+/D [2411 0 R /XYZ 86.4 392.539 null]
+>> endobj
+2410 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F14 1050 0 R /F38 785 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2420 0 obj <<
+/Length 3601      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�6��W�:e!ě�=�w2�I�R;��e�G�mn��g���k |I������ڋD`�h�
_:����.��_|�J��c�3{3�
S3+
3���/g.��\����/u�����L%�_^J��xGo2��V������rC]M����eS>�
5>�Q�|u9��c]֗��������.8���x��2ef��Ň���=?�R&]6��ǭgJ:&𴚽�xs�Y�
qe�͌�[��
VJ%E��YrG���~�M����oa�hLʴ��|���#R��1��G(q&3юb�skM�	����!T���y�皤XT��aXU���+�l!��
+Bo���ن0��E
?jA�<��bѴ�Y�MN�͹L��9
E��I���g͊�*�k��r�X�AU��'��]
�7�
ZU��Ck���y���:_T�:<�T�uxo7#Af,5� 7��y+͔�v�\���H�2
Yա�~U�#�ySn7`�c��4ɫK(�_kj#?x��߽0Ûg����~(����$ů)7���-�`C��<�+
�'9�
z��mD��8t�`7�o��KR�	!�cOII���Ҿ$hv���jKm�XR�L>����pI�Ev��B$y}8��иn�r�n�M�jqT8��Еo��Sw�����kK��~��V�4c8HcI�uϥ��a�B��p��2.�����x'��-�P0m8GFI��:e�$�2댛7jc��
�$۵���&J�l/˼�ݵ{X����E�K
>5��>��g)�R�F����gpV�~b��<��E�Y��l����f{�%ᬆ
�̄�~[f�
_��+�L6giOv�:�L�Ro
y*��gl&w0:�S2��"�{=�p��K�$�K�Yx�yg!3���u�#ڼ�-�4O�����3�;-�)�~��2ZS(dt��1�\��e�֗%�|�*���&�
��HJ�e�o��~�ޭ�����:_Ǧ��N�kpc6���U Lp�.��:�N3{@�����NX;ń�'�<��f��mE6�Z>�༊C`�?��cYG�������.�1�	vĻmz�ąs'T%5LاT�$��+W�Aq8��
� ��
�MQ,��m��
+R
���M�,\sWmw�w��n��s�J�
+���̴3,U^
>]�,�}�ol�dž�^�������{R������K}z�6c�-[E
�}`�n��V���mg
���7P	�)6j�@��� �#]��&|�
I����Ѥ^`�Ů�;
+�i:ن�j/�	��X��"��
�T��mQE��ڋ�aeMb<Ɠ
+B��= R"���^wU|/7#�C�r��a�������]���Z�ⰻ|Մ�gˠ�#At���e�-�
{�ё���z�_�|�n�z(&��&[�ځ�(�iv�f�2|��z@��4Ju:�qk�c��~ü)n�����ݫ_~���İ�R��2�C�`�x�W/^�4�_�V�>#�@<졠!s)2��
X�V��A���ɛ]�Ħ��:���]J�4����������6/��G�9H��L�#�V2��W�RP�����M�:���k��]݄�A�ޝ�	3ϑ��m޼�P7�p�D@�Y�����������Ι
h I��]�j31!\��]���<Jm�/|
��teA�/��Y��uZ4"���K���S$01�>���
J��8��^�	�u��'���k����r:C.5�e؇�o�0���`���y�/��D
��Mx ���H$䝩�*`W�M�\���|K"}I��k��yv
+Ǎ�.?���e(�@��,C��(�O,��*{RRd�q�D�j&��)��<�sDD�4�"eR1���[e���u@��'�q
�daل׵N		��Eɳ�RF���Uw�C��~E��E 䟾��W���_amJ�s�Q���t���w��_Υ1ȚBj!DT����.�� ¤�rAa���2ʊ:��D�>Eo�@��M���{��3�W���q���#�R-ђ�m3(AN6į�X�N�/�4�Qr��a/F�����
�	�kͲ>:)�QF���U�8�t���)>(���,b�k�
|L�am �2G��N�y\֜Cy�O�")���]��B*e t�x���Kq�,�2Pi�6�p
+.� ��"���0p��>~�]�K�
�XH`�����ݺ�/�@���4��m�P�`%����6���p5d]�� ��[�N
��{��B�>��(4����ri
����3fY8��*�"W !B;��*�G�/��N������RB[ ��'�4�ոl*c�T����D*脿2���9]��v�
���)3��ʌ�oC�b�
�E:M�S�*Mh��!��H��n�7m��:ICSy^��"ܝro�w�+�����<e4��`��5���"U΃U����6G�(21�o_�S��9�,�!��QE�H=�66<�T���b���*���b*ח�l�4�����3
��i�p�KQ$���%a�G6����Q�P`x���XO�U)M	��x�s-*$����	E���e�
+��Z��G�g�>
�T�kg<r�O� YvNŎ3� �NU��y��c�'�u�(�/�+��:{Vj�
L
VG�d[�~��G
+v"u�h�5f\ 1���)�u�C�u�������Tc��1|�b����|��%�u���K�x#3a-��j�����
ܲss`�)�Y�w>t/]n&,,��OW�
�K­��&��єe�U�������j���"d=fb�)S��O�����pS$43n�
+�)G��aœ���
�}G
+���0��Ez�x�,���f�S���*qq��`Aw�r��ꀿ��T*�����*��>���ߪ<�8,[�MJ�gn%#�(H���_����P��5����]F�
�U�=�����WJ=��S"�<Ȋ:�����\
�i**� 
��I�Ͱ�@V�u���>�FkG���rt�
H��1V�ZL%
j���O'�V_�"��8�(©�©���-�N���h�3u �BS
�"�O�P9���Ktq�YD�
�
�V�8y�}�
D���&V6��'ah��$����|�r_E8
+k�
+�x���*���U~���ZZ|Up
�G�;��+BmО��+��«�B����*�$��[l��'
�����lR�g%g�j�ZxR����U�<l	M��|P�<J�T>���yg��֪火R�IV����ȝ����T
��\�������O���ҧ�R3��n�.����<�	����
�gZp�o�
+�c��%��u�ޚ��ZRW�:�
W��ϥ~\����^���J>'/ ���'�^��O�U��#�*��t-�)MIa���~LSx���V�g��T�C�"z��=�mr
�UJ����:�����Y9�p��UO�(�
+��ˢ��
+�p�}�A�a���b�(}t4�
i	5
�`L=��(�QX�g
�hL�ٛcZ�WOGf'7��\
@T���J)E袊K �p0S�������Be���9j����:����h�h��x��4y��zP�9��0�ʹs1U�K1U�4�
+j*4��x
�KC��Rں���x ���i�$T6��l<��u(��_�Y�
+endstream
+endobj
+2419 0 obj <<
+/Type /Page
+/Contents 2420 0 R
+/Resources 2418 0 R
+/MediaBox [0 0 612 792]
+/Parent 2415 0 R
+/Annots [ 2408 0 R 2409 0 R 2416 0 R 2417 0 R ]
+>> endobj
+2408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.168 639.868 370.891 651.823]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.019 639.868 410.741 651.823]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+2416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.079 134.767 453.802 146.722]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.93 134.767 493.653 146.722]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+2421 0 obj <<
+/D [2419 0 R /XYZ 86.4 726.045 null]
+>> endobj
+498 0 obj <<
+/D [2419 0 R /XYZ 86.4 540.556 null]
+>> endobj
+2422 0 obj <<
+/D [2419 0 R /XYZ 86.4 488.049 null]
+>> endobj
+2418 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F14 1050 0 R /F38 785 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2430 0 obj <<
+/Length 3506      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs����W�h˜�摜�8J��rŖ7�
`�
�R���=3x�%K��̣��_�
]�-��W�.~�ja�U\->�.�"r��%J�ŧt�9RD\.�ѯuV-��nW�Y�M2��oWM^nk�㶬�C���̷��E�o��m�7�}�\
+

��d��:��Lp�#&����]���ŷ
�k	���j��\|��.R��nA��f���mRX��X�\|��#͂1b�w
*�Ӫ�H ��8�ʢ�2�v@,��m��
In�o�$��f_e�������r�lS�V�i����:�|IV����&U��/$#Ԫ��Xi<q���Rd����Բ�m	������
!�=l>�hs	���Ʒ�t�~�H����O-�s3�Xi�������1\.y�'��_�����%��D��B�mD;��7�?�\?����܊Z�X�m�4��2�u�K}A�'H�v���S 
�X�i�h�>(�A��� �M��
N�F�
�j�ɂ6�S<��gJ�^?y�)�0��?�dAf�!�
+
������G�ۡ�#�w��
vY����`u����ј�4	41l����A�c����?��Ђ��8�9Dz 
|=�_N��
��O�jКq��i"��$��
!�&�
�W�y����?p��w��DZ� �&��g�4N	�}L�O��3�d8���bb����M��D�O�Ѱ�}1�TZ����9eք�!8g�
�� "
ޟ?AD`&�^DD��a3X���������}��ak]�;6@�L�K'� ��ĥI�\�o����b4n���K�$����€h���Fc��\��8b"
�T/Y�l��uUnv�&�C�]�@�m]{P�M��~\� �'��X
:5k *� ��/�׊�ұ!c����P�{]��7���ԣ���
+g���9k{�S�W��
+
�/��q
%�>�@�v@��u��x|��8X���9Ֆ��%�Dh�;��l�e��@+�������e^�`�Y�x�B��gb(ͪ��H�17b���-�y4�	h�PQ0���p[�����d�J<2u���
ܦ�pe�����Зqp=���3Z�UV��"ɷ��.P�Ň>�ʳ�#c�G�;�ޣ	����B��n��w�4�*
����W�� _��������*�g�
A��y���B��
<uT�:�
1㞷��:��h��8ڎ����z��+�
z
6ģ\뱃B�LJ���^��Ԭ�>�z�N�0�Tv��HO����!x(�
@
x�v@�w�31l����Z�`�p��B
+�
�A�`ꧫ�<,d�B",��*���Ls"�pq����P��
���&g
9<�m崢���
+q1��Id�%uݖD`�3�@v_E�d�&k�����}Rt1D�]�	��-4�J5�3���Ԇ&P7�4z=W|��6O�	Y�it�.�r��c�����o��_�����(G���.�;��%4��`��]g�kjnD�|Ȫ�w�V at V*ǚ]������`�WμƒJ��z�2��u�g�_WI
�iL�P�4��wz�9j�\�Nv"~ȋ�O�4M��a��0�xn�HZ5��`��l�Ig( ���^
[��w�W��oBȋ!��l,��$/
�1���X���J<
+|rBqO��
+-8��B"������:)�vE,�
�"�1af��7eq��XI�Hl�b�W�zfƥ�
+����y�<��O����9*��
�f��;~�����_���x]N-Q�x�u9�Vm�h���o�QGJl���iS?ä&���gB��}�i�į�M�(Jg˫�(��6eu�FY��H-I��Qd��;�DN
:�YH�r�b���_�����2ؓ^��7#��*G�O �>��N��>��ҫ�	�v�w3R"��
���p�#SHb�vsS�D��K�O����K<b�%�A��Q}�Ϗ���n
��O?̹�F5�q��sed
+�΂�N�S��GI7�4bTb;bp���
)��
BC���!<y��~ZiU c�"��&ږ�p�Ԃ��n��
�`0� ޺<{� &�T�0g،&.%����_
z}��0��QxȒ2���������_���N�ʅGr}�}gg
9��r���;F���Sk
+�A�@��%/�&��nD�� >(�z:S���w��i���M�s&�qxU�S�	L�����,��!:�Y���A2-�m�����ϷU����;�6p
,�������vc6��f���f�F> --����QKTGx�|�
+�5^h�c>�2l�
+�Z7��[�#��o��U�mW�K#�„ls)�ƻ�ÃvxE �3u��V��B9#�(1�_.�����K
T�*����S,)	���Qx�%
Q9����i�'uB�]�ao|K���l��V�⮺FT�̧�u�;���Xh��Uj��<$_ܧ��
P�d�9�!X3�Ob�z���b��JS}�;�)�4	^NЌ��%�p��;�	��/�,䩺
�}����U�5�<�fb�G�	J������d�
G� �j��X���щ*��<��&�~8�t
`ʺK�|*���N�f�ϖ���m
 ���P���6f���<����yv|�g�B�v+曰d�
�c"�����I�!L��v�l�

˶N&]��-�
A�yL�����r͉��&��<+��P�A;8E�*��=q�F���P J��eX�����3;̻9��xlW
a7Ňs���A��(
�
���ɛBBO���Ll���I�8����m��!0:��fm"ik��uU���]
�e�Pv+��� [...]
?���śT�C�i��Z&;�`��.^b`ZARv)�tܗVj��Z�w�!Vg���CN�ڟ�����D�Z����O�EW^��($֫}Uw3��h�l+�A��s^/�9e W�_A;�b���*���ܱ�����\=)�]���̱_����Q��5?���!o������\�+t�c�9�E1�X��@Q�����t��]�j=�V� ��c�T�zE�~(�����ذZ<��w��K�ų@g� }8���{�*���(�"++Mb��+��V���%ӥ�#G���3��3��=�wɪ��;��ƶ�L�����ʿ��X
_u����
��4�Y�o�f]���ohQ����n�Tn]¬{[���˧oC��u��3��,�|�R�~zS��
Y~D{F��3\	 
�N�%ͦ?O�*$Y�<h Vt�uX,+�=1�*�ɨ��)h
ܼ�:-������Gӻ-��7(ӫٺ��
Μ/C2@����/�.Y}=5�a���gAf��,#�{�6ȉv'6�A����L�q����~U=�䮎�( [...]
��i������v��X��Bb̰�(n���3LT�`����݊��^+���Pw�B
+endstream
+endobj
+2429 0 obj <<
+/Type /Page
+/Contents 2430 0 R
+/Resources 2428 0 R
+/MediaBox [0 0 612 792]
+/Parent 2415 0 R
+/Annots [ 2423 0 R 2424 0 R 2425 0 R 2426 0 R 2427 0 R ]
+>> endobj
+2423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.65 230.265 234.373 242.22]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [259.501 230.265 274.224 242.22]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+2425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [318.13 73.562 330.085 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (Item.126) >>
+>> endobj
+2426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [346.196 73.562 360.918 85.517]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+2427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.033 61.606 375.504 73.562]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.9) >>
+>> endobj
+2431 0 obj <<
+/D [2429 0 R /XYZ 86.4 726.045 null]
+>> endobj
+502 0 obj <<
+/D [2429 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2432 0 obj <<
+/D [2429 0 R /XYZ 86.4 640.298 null]
+>> endobj
+506 0 obj <<
+/D [2429 0 R /XYZ 86.4 134.587 null]
+>> endobj
+2428 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F14 1050 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2437 0 obj <<
+/Length 3413      
+/Filter /FlateDecode
+>>
+stream
+x��]s�6�ݿBoGw"� ��:�I��kc�/mh��ٓD����s?�v�")��"M�/"����b����N�uq}w���'1�5ד����DN
��lr7��1a/��R���e�z��
++��7��GW��%����/W�?�l�]�w��ʬ�>g6nèU����h[f���w�.^�]|�`���E�ԓ������d=�&���N��qˉ1���^�|AI}8����X
7p:�U
O���Y3FsB� 
W�ms5&@�f���ۛ��Ey�I�%�7��}N0ˈ��W��ザ���
��ۗm`0�dܤ�Q&W����QPO�@3"��
7�ڮ�y�p9U\E٪�/�QE���
�2�Y�(|�	��Oׯ�k�&
�꿪�"3a�M�d����w����A����DR-��r�����4
ܗI9QЂ������*�
\~�}
���y��1�f
���ݔIK�b]�
1�kO5�
+��N at N��\8P�
�6�W
�
��F�X_
�&(�s0��f�J��E ʨ��+��s���$�{��z�;	*V��s����w�2-�P2���j�$>��RJ��
��Gj�TI�3�l�X뗹�4��<\e�w�>W�嚍��
�>*�V b
^�
+<
+g�p����qGp0�(�"�'���g���L��$�NJ0t�M��`�Fy�v&O~�rMUt��4z�d�f5sn�5���zS��m�zJ��

�Y��$��z#��%,��/��s?l]���t釠B2�������?�e2u�|]gS<�B����)��B&�.��f�9
+l�*
7�t��Teg�A����V(3����_�%���g
v7l�!e�WꛑA����
Xd����8(��I�
�>�=:��)�� kU����6E�{>_B\�,6��f�
d�Ke���&K���%Y�8�<�"�#��,Y$A� ѻ�mY�"[
�+
cq߂���;�y~����?i�hHe`���x���@���0֢������"H��9 �M����'r9�R5�/��+
�����"���g?pkpzA� ����n��Сmˋ/�A�•�b��!~cf�D��e���]��(��E�@���P
+T~��ߐ�{ M���C���j�]�[�<�	)҇�=���k�;D�ߐEMO��7ȌE�wWٍލ�g���b���t�
+b%�؉_���?5��]Ԅ
0���<
�ጂA.ʍ�H��2�����K&
(�vI����Ϧ��v�
���Q�E;z� /Ӱ�o�_����#Y���
�uR�鼁��^�.(Q�s|{su�Va����.2�{�[#���V�*Lm�J��[��e
�#w0����1*����8V�f�tx.�e^`�rP��
Z�H���{���c[
��
Ao�y�>��L6��P
,I��D�D�4�
+ہ�8���Y`�
�x}y�\\�䩚%+�r�~t��@m-�A��Q��<Pr2Ւ��Je/V�
�lgmo�e
l&n���m�cm��J8���
��:�������(nCb���jS�����8*J��� �����2^�m��o�I�;
�ȘG�7e����fiY>lX=
�
�׉n��8�K��8�顄I
֙��|�%���Wg�}X!)�_2_��8?7�MHct��-���n$�����	(����d�K�q��x���1��-
vR�tT���-�^�
+%�Fl�k��R���.ko}i���/Ӫ
����A���")��}��೨8��BP��J��"y
`�$T4$�
D݈�8�x��>��H�΁>��(�C���o>��a`aKA{�Y�v�u����_>
0N��.�T
�K0�m��

��
�2��D�DMt��?�ι߬��YG���[?"h�WW
h����q�Q�R��mx���c���6ba@��)Y�|5$��B���m����7i��Mڐ��v� p�
�ݎ
+
e�=�������Ëo_�}�i`]a`=}�uAQ���u�\��q�Ɖ�#IV�!�Q�>�d�t�nMe�t1ܴF�1Yr
�����4�㑤r�D���	
7Y�0c^4Yp��
�s
!��]�5Y�Rpr�


�����?c��&�ul�~4�@�n4�>��w/����
+S�r�i�Y�Z.ntS
7�]
���]q
�\5w��y��q�cp�j����4Z7q��!��X�c at 5$鐭�����b�L��PiwX׵�Y�!7�'.%�g'��-hv9
�!�Gm�r,�d�䀡Tuf�^6��v՞`Cb'U�5�.=

���C������ �_Q�c�Ő0	K4�XA�IM'��h�6��Ľmly�sC
ל��"{�\u\ ����o�;�e:�j
��
�͞��tXu��
(�����١Rt�':>���D�g�z���2Y��*��uW�g�V.�U��+-r?7�%R_Q�a�V�
�tP�]�ʽ��t

�M *�3�Q��Ĵ�$�NVP'˾J���O���}�
�4�Xk2�%�����ty�i
�0j�j�Z�6h�
0�S�8��Gu��	vx�
�H�_d��%H�H	ߕ
�݁}�ň�|W�jp*ȉ6�{�_W�D(�I9R���kcj��QҬ��3�?���ȝ2I���s���
�+���AD
j��)���]N>%�|ӚP�_d
(m����?j$f	
+i!���{.|]
N�<>,�
.1
�cxW���rx�b�xG�W���� �����_zd�B �i]���hhA�W=���)$au�0��i
�5��!V��
r]��>]@����k������.��&���k�@M[��.�1b��p��p"qT�p�M��v�V��ۙ�� �UR՝E���p�h�ᆞ^^��'M�6�����E l����S���in�ٞ�!	pUv�h��f��}t�^
+������-���{S��-C�
w�X
ۺ$�:Y6~b9�_��D�.٘R�0Q����Y�.��g"2��Ev`�M�Ai�
Ϻ$�~sb�i��n-$�J��[�fϲ����,�l�
9Ћ)����2�j����ڐ5�,�p��(��:�&(´�n�p��KU��)7��1��
�m��i�X�A�
+�
EB�!�8Dzx����������t��KHGPc�w��̕r�x+�
Wʙ���zƋ�5�r���g:��
È�[�X֗�[�*�=�Z�!V|��r��
c�œx�
v�XJ�co��?�Y�@�M���T>r�2
+��n����d9�"(�n�~��
�+�o΂�y��"����6�-u�����́��@RZ
{�
��<�'�#X
}�>0̞��

H�����=�GȬ��S�Ig1�`���;J>w�^
�T�7J|��Q���k�
�	}D$�n��"×�_6a�y�Ŀ��.�+����?R�>.
+endstream
+endobj
+2436 0 obj <<
+/Type /Page
+/Contents 2437 0 R
+/Resources 2435 0 R
+/MediaBox [0 0 612 792]
+/Parent 2415 0 R
+/Annots [ 2433 0 R 2434 0 R ]
+>> endobj
+2433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 520.212 284.482 532.167]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.356 240.643 253.828 251.491]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+2438 0 obj <<
+/D [2436 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2439 0 obj <<
+/D [2436 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2440 0 obj <<
+/D [2436 0 R /XYZ 86.4 161.457 null]
+>> endobj
+2435 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F16 729 0 R /F14 1050 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2448 0 obj <<
+/Length 3528      
+/Filter /FlateDecode
+>>
+stream
+x��[�s�6�_���g��A�[��7��rm���-Q6[ItH*�;���.� E�V����	�]��o0������'�W'�.���,��ήV��2=s2eV���r���2uz�5�\��Y���[�_��j�]4E��iĪ���--���^���.��kќ*9����m���
�X(��\����'o�N�� ��DK�a������_�l	=�g��4�}��63�R&���]��p��|�h2�Ӧ�	g���w���L�e�{2�og?�I����I�)��N�<pN/��n��؝���6�����٢�.�0�\�F^g�SX��o�7��4�*�������
G�b�σ�w0?���dgH��
+����	�RX
�Z5oJ�-�N ��g��E��	��"�C��m^�Q�$r]D.t��|
���I��vYӛ��[&����u��ko�YǞc�)b�uu���[�������
=��0	��?�_�bM1�zR��Q�
+�PJO�
vw;�C�⏜^�
z:w��5
+�W4
��_v�7*�"6�,��,�v&4K����yf��
+������̳�.�ߒ�} z#��<�X��DRd �#�0D����v%��z���`,E0���nZ�j�� Mp߂�p
�u��
�_x>�⟼�2eհ̝7J
�1�+�xu!Ā;)�	�~�BѠ�R�T/�-���
;=��t���n�;���l.�
����-M��]�0+���_�t�~��p����zGn�f��Y@`���`��ft���h�W���sq
+\
oa��Of1�Vv
l���ADžo�u���J
+Y�2
pO��[��A�s&m���}��F�3Z�*���Ȋm��	�x˃FC:2�c\x�H�D�
�j؆?�A���:/_G�uA�6�z�|m,_x< _�xj
��bB$���w �V
m��uGL<r��S� häPӂ�<I���B�� ���
�ߚ�%!>@��8���Ѯ,0_���l�W
+�j���������@�H5��x���
>�]�
+����&o���,8��Y��T���o�����NXHל�i+Y*�C�
�)�t����bW�$��Mp*'êˬ�
���O���2b|�
{���"��E���Fb��P?�
*H��p��u��f���Rqf:�����˼���M�M̄K�6��xk��=��0�6w�|2c�5
)i����
+�an��ڃ5��B��M�)+�p	���x
��Ƌ����"���s���Ӥ�
3=�����Zk�B��$���h��	�8�LB��G���7Zi�;m	�v[����Z����*AR��a�:�۪nP�kT��	!΄6|��ߠO op�=��HD
��u�z�|�fR��8
��\v�z�`�-��o!W���8闠��"��?�ͮڎ���pc8���N�	�J�<�̈́Y�	��-w�%�Z)��}K��~��&�z�X�&B�Xa�XC��]���_������ ��#M��U��
$�g-����F��0��Xg�P��
��ޒ^aˆY$�
+���̓LF
˅����d�婔�{ғ
+��γ}+�k�;kPQz at c�
�@עAAI�Ԭ'�s�I:Z������1�t��ΛzB)�I
+��DճuV7���T˗`8������uv3!F͸�X��!H�SC��p�O�Ԝie^�|�3nD����]|�����	�X�^d�D�.�x�Oo���ӄ�,F�#@��P��~���7CX*ڀB@
��oC��
�sI��66��
�ӈ`ed��W�Kbs
��Բ-�B�*h���B]_b����6[CH��Z��*��E���O�
+����[d�nv�Z�FK�p"^B�;�
���>+^r����\�h��o�>?��r�h�"낡�D��^�~�a��)�I8�.�� �4���З�4y�u	ܴ����$�0� M�"�B/",I�}�t���
}�eI&�{�eY���
�/��m�1�]��
��|���1T�ẟ?
�Y��|�
02�����O�F at HY�
�k��
��I�N��c՟sA�?�؁n��u����9M��B��;g�3k;����ք�(&�8f��%R�)�
�����zl�Ƃ��@���A�m���E�4�
���O
�P��:�F354"

�[��?1i��a��F�>����bx�
���?���Oq��m,76
UND*�Cad
�h ck���������$vX�L����]wY7�?A§w?~O
��8��L�*\�,��G
a�<�	�OrU?��
+�C�V�E�We�Q.
+"
�nE7ͳ�!�;�ef�X=7<yP}��o��C��� =���w�Z�ˆ�l���w��.N�a�l�
���N����{�ޖ�?�$�AfገE������ذ�=섖w1�ۧ���s(Q�q�E�����ô'�
+'������ΗI��&���H��\Ъ��)��|
<���/C�A�U�X>���$]��rN�Wt ��*@����	�ޤ�!p@
����)T�2��7��?لr+�T"�*^L2U�E��	 �UNy�g)l'���^
�=����I��3-;���2�w
E[r�y�O�)a/�
��*ȥ��?<��U����LdJ^��X�� �NWK�#����ʾhXP��m�(�1�[}�)$W뵿�pCϤ�d��I��S�]rT��F����R
�=���L�5ZM�z� ��6S�Z��+C�mU�nnihW]=kQn�q
@�� ����	@T���������ջ���)���u��\g����_�H����]�O�=z��x'�|h������c
���.aA{U��Qw���(�F�=}���ZI[7�f_7���5&.zt�X�T,<�'h����/ Ƹɉ6{e��j�؅Պ]
��6���DZ�+n&*L�#V�%�%FG�X��3�vj�(��R���<�e�k�	�#�
+n�T��*8|�H�ɳ2<��	E
+�<I�S ��&y�u
��x݃u
+H
�S�D?��j���P�R��>\�0\0�_d
��F�0]�%x�م
+,�������C�g�Y
$�0�a�ҏ�V�d2}�e�$
�@��u�W��Tz9�l�
d궒f$����2cn�c���2i��;
�92
C0��q�K�	t��/a��e�'
+�ɛ[����O�љa�'�3R�R
(��H{P��i_���% 
�1M\��^�
P�� ����"�!�^��S�{ZB�lU�5��‚�M�B.���#�H�$M;Ϫ�lݍ\hO]FN��{'"�/l��M�wZځќ#�nD�7��cб�)5<����e��L�@/]��j�Q��Om��$�k/jNޖ�#�ܫ����U�S�i�����|�ng�"G�Ɗ$�{@Ʀ���!T���
�Јk[�}�R�:x?��Ӽ�IG��2oP����١M��~����"A|�����:�'6LQ��j3$Km<�3
��'|�ޖ�<4V�A���K�� Ѿ�7a# 9�k}�JG�6E)l���0a�D�<RN��
 r
 }h��!�=D �၉�`3��XaF��֊��	 �az��K-���s�
+endstream
+endobj
+2447 0 obj <<
+/Type /Page
+/Contents 2448 0 R
+/Resources 2446 0 R
+/MediaBox [0 0 612 792]
+/Parent 2415 0 R
+/Annots [ 2441 0 R 2442 0 R 2443 0 R 2444 0 R 2445 0 R ]
+>> endobj
+2441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 616.476 284.482 628.431]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.178 260.449 480.649 271.298]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+2443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [312.618 104.055 324.574 116.011]
+/Subtype /Link
+/A << /S /GoTo /D (Item.126) >>
+>> endobj
+2444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [341.939 104.055 356.661 116.011]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+2445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [346.925 92.1 369.396 104.055]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.9) >>
+>> endobj
+2449 0 obj <<
+/D [2447 0 R /XYZ 86.4 726.045 null]
+>> endobj
+510 0 obj <<
+/D [2447 0 R /XYZ 86.4 165.771 null]
+>> endobj
+2450 0 obj <<
+/D [2447 0 R /XYZ 86.4 64.023 null]
+>> endobj
+2446 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F16 729 0 R /F14 1050 0 R /F38 785 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2455 0 obj <<
+/Length 3182      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�6��W�tj��`�Ɏg�<��&cO.I�D�L$QCR�(�?~��)Z�ǪTN"��/|����vB'�99�>y�^�ILb���z1��ȉ�1тM��_#&��S�T��ַ�Saetyq*xtv�o"Z�8���gk�����t]fUv�U8�
����tʢ]����_8yw}��Kt�j�ROf��_��9�|�P"b;yp�V)b��i9�:����hW4;�Lnj0��d�o��5���
��o���̸���&���ө�*�֕��*�����Ų<O������
N,sT[o������t´!°ɔ1������f��{[����J=��i�D��ʪ
+T�ó?�?��o#�)̃>�"�Ƈ�$�1�3KO��KBc�H�>�K:�Х���.0;Ɔ5D��S�9�������V�ɳ5$Q�{

)Qo����*:��
�cs��J���8n��>kEZ�'�ZOpJL±��ZsmI
�>��y6��ۖi1"���r �)_�_व#%e``�TI҄͟�>P
R*5D��(����j�Vv��$�
�:+�j8��Yᵢ �93�v?+b�8����r�=�¿��Ke�(
+�L�%���O�b!�Fy��>��:嚪����Tr-��
gS��h��6�*
s�]�o @�s?ޟ�dI� _�-��r��p
+�'�܏n��f���Z
p($N$~(l����g�d���l�xn�Q�㯌�
+�D��NB�0e<���v�J�H�*{��10�Y�5�D� �N5���nT�K�쯔
�,�a�)S���q|T
��k}R�l)�"
��t�pB�����9 ~g„���b��} Pd@���th�Ʃ^.{U}�Afۢ��g�O!gM���ՀMp�51O��J�eۏ%~�A]Y�|�
�J�Hnc�>��d��x��v&we���ϵ�����p��S�9����gN�{o�2��v�\T���l��+O>�x����t�#m-
���/�j �m ���!UC���tq��B^ĉ
� ~���asYKD�X����t
�x at Tm@�̗��afX a�`���o��GI4O��S�J�Iד����Fo@ĽH�%{=�h���R��{���[�
��QE-O�ͷ��e���Ļ�Q=�T��bE��r��
+���{�V�m
����aE�}}9��u�1�FB}X�����p"!�GR�_w�Z�2�AJ?�R��i
v�৪�
��
+/�wi�ď�o��M��?҆�&)�t�Psa�'
+��&6^^�]��g��/��D�&_=l�%�J�)�Ϟ�I���+�K3N*�����4V�a�t�]����� �pҖ.g�f�s?�O
=h
4��EZHz�iT�P�1���#��$f֕s�����:�!)�m�"�3��@;�{��\mq�Ś%k_�r����M�v��~7�ڻ%(J�T
�,�Y��P�s�p���\3qf���
����t8x̋?Cq�If���J�z0X�	?�նXA{P+J������ �ȫ��)ʻ|��c��=$��uD�P���v6K�r�]��6K�|]�gm ��އ]��WOE�>M�;Y��#p2-���%=_(rW6�(
��~�jWM�38��;?2K�pbX�:�1�\���r�>��5H�U���r��&:J�_|!{��լz�^��[spv-[�൷�䄵&K�r�@�XZ&e��eDI6��ѯ9�����Q�:�%
�=ާBiׅ�UY�у	b۲	]�����
`^M��D��E�XC�#%i`�����?�~c.��<������7����_>�����m��x��c�;
�]���|G: ��1��x6*��H�9�~z���
�:Յ����#� [...]
��'
R:F
 �8r��6�:��H������q�B��ƙ�1��
�'0�KJ,����P�����e� >����"ro��A-��
j��Bp��w�?����>B�1�j�i��l���z��z�ڻ|[!�`��8?�̓��>5_/�A�\-����
h�6apw���I�TH���Sn�����L�Ԍ-F
)
+v����u�C
+�z���#�:���s[ox�؛�8~�m����7�M5�:��
䌡>'F�z�n�z�O���+j�.-��֡m�;��X\wK�Z�.T k�w��"��T���&�m�:�T��O~-��e�1V�X�X�F������v=��
���x{	�+CH7�D
+�����2���
+o�r:�ZG�]c
+���|�WZ��ep"p:u�~
�4�'� ^�
B&3��)�}!�K�5a�Y�-�Qȁ����D۹�J�H!
�g/��jM�z�E^�a�]x�%X�_�v����[T���R�,�����
�i�"F�G�jMfE^�g��3�}�tc�~bQ�N�<��NV�(�Jb%��b����U��:���Y���� k��w���&׻����Ẽ�;v�(�ªo�6���\ى&f4�@�c�xa7��]��fmM8�B3�N�
	�nT���K�A���G��*���H ������<8���W�?�t�0|���_�3�
+\��u"��jnz)�v����AD[�#蔁����u�����VwE����M�1D�i��5u�!��e���}9��Mտn�^
�^���"���fj�(M[R{�=d��p�p'5\�
+/\]jSĶݡҿ;_n �WIUO.�|5�~�n��P�M��PT)i��@���5v�\����Q�Ppk� =�
�ڋ6� XѰg��t��h�޺��k���� �tɰn���ߡ`Ɓ���8B;�Wle�?�A�}��
Gdс��S��}$�!��a�c5�����5� �
�H�>��36�}ݿ� �����!��م�
i�1�5�������FF=Q�[b� ��
#��*ف^���G�E�e�i��mF,���mF�,x���뺌x����x���	l��=�*�jg�����Z��99��Qu����
� �.g
+F�<�u{L2�W�����cִ�ؘ���� ��(`x���.�@
+endstream
+endobj
+2454 0 obj <<
+/Type /Page
+/Contents 2455 0 R
+/Resources 2453 0 R
+/MediaBox [0 0 612 792]
+/Parent 2415 0 R
+/Annots [ 2451 0 R 2452 0 R ]
+>> endobj
+2451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 471.5 284.482 483.455]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.215 153.674 387.686 164.522]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+2456 0 obj <<
+/D [2454 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2457 0 obj <<
+/D [2454 0 R /XYZ 86.4 64.718 null]
+>> endobj
+2453 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F16 729 0 R /F14 1050 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2462 0 obj <<
+/Length 3300      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s۶~���ۡ;�;�9Ov��I��ic�/mh���J�BRv�9?���U�,ǚN�H�bw������N�svy}���Г�Ě���bb5��c��\�'�F���"�\�Ŵ�n6�,�c�������u�G,�¿$�?�l}.XT��2]�Y��gչ����������g&8������go�Ͼ�1`�NX͐"V��lu���t2��JDl'n�j"EL8�-'Wg?��  �
+j�r�f���M�er��<������d�O͈�
+z�_�n�����Tqe�ʿ�F�����7��2Y�?$�w��+heس�׷�>�_._�f8єO���X�F�X�B����,�7 ��@OyzE�,�s?���~���?�/��0�&Z)�h|h�a�6��֥�^�'�p�j�%�UhZ��n�
c#�İӰ�ũll�n���_�֐D)y
)QO�����!
˓0")#�
dds�d)1�j���4����^
aG'ࢶ�G��\~�
1�hy;RR�,_���ɲ�`ُI� ��oK�X���>��� ��3F�0�pe'�����k�?HJ)��<���?�	���zU�^F�S�I)1���j�X���H�O���X�!Vx�)p����5e1ƞDS at J�x�=q�n���ܥ2咓�L�u���m�9�r�e��y��k���;�<$�M_,�f�j����Wݥ���8�=���dI�!_�
��s��p�'�ܷn��f���X
PH�H|S� �"���H6@ 	~�V��V�8�r|�(�PM`TBR�|��G͒2�MwiC���Zǯ��bk�/~�S��t=/���p
�X��	
� 0KK�_�i#���
@rQ�nW�������b3
��
xv�Y=8sr�Z
�Պ��"�Z�Q����C��4�.���B\6*��
G�"�kۑb�l�ɐ����qXT:dt�,S4��o��|3�w��h��٢Wշ/�l[�|���RQ���\J��k���%��A[Y��l1 0~�
܆͆/�,Y&��}�c��ܕ��Z~�c�v
xV��O��n>��91�����	P9}.*P����zD����1֑�Cd$m-
dL��j ��*`���B �j�ywR���	�9��g���kxb�W�Z"�[h��mn&�]
��7_nk�aaf��F��g[�n�h������	
+B>_«��Y�(�
o�����Ot�\�E�v��u���QJ�n
�c�oތ�d=�����r�E��3L�
'n��K�6lt�t���q��P;(	ԫ�
��<�jy7��k�zuP/�:��z���rBcuP�52;�^=�^h󪃗`��5Ʋa�?r$Z�*����A�Ae��s�7��i/���i7x:|�G���M��p�!��F�
+��(Q�Sf�-�b�;/Q�ͨ�B<�|����˙o+H�B<��ln�(�M��
F��g/�x
��p#'�Q"�yI*�e[	؁����:�%	T�PI��{t�s�ty��I|��J�$h
�
+�#m(l��L�
�}��� ��7Wi���7�4}!�%R5�~xe��ĺ2`')�j�Qِ+V

�
�M��؋"J��T�U��
<��
���ސYWN��>�������۷H�9ȀL��WD���XuHJ�� �h�_T
��PX
$%��_��YH�
׌=�e.;��b͒�w�
�!��r�M�6�`|7hػ%(J�T
���$
�@�Ԭg
6��n��l�m
BaG8D̋?CR�If�:�UL���ħ���!NjM���b="���j�
)i�R���%(�+��,Pߔ-�g���Ҳ\l��F�":%kSw�Mp}8�[��6��H�փgy'��Av��4DPT�8�æܥ���
�|��7a2�`x��rN�η����A�g���b�����s\�=�A��x}ȖKO6��4*��h�+�f�˶�
���}k9��9���%'��0eZ�c�pL(k�h�����W��
��.�~��WTmbGJ��Z�er���T(XK%�k9�0 ym��%�p5�lcA�V�41F����@�JGJ��.������s�A�SL
(�2��ğ�~�˧�ӄ)�VJ\uVƱ�
D�����N �-��?q�x�
�]$`�s߽]��e
�������&��-p7)��u]-��b��Bn���,C����_�Z����D��OG��|ImyD�0������
+���`�V/9���p�
%��v������F
3����i%�� ��M����#F
�6��a��Y@�
r�Z{3kp1�	̂(���0�]u���E[�Na#)]��q�B��Ƙ�1���O`��X�N�>��B �=��,��q�I&#��&�����h�C��P��2�H�c�f��Ghc�
� �\�ҹ;�M>�÷6�ï�4�V�;�ؖ�$��y~u է�3�1�0 ލhu��ڴ
�)�"��D�>���xoW�C�}53ؓ=5<[A
+��H�հ)��9s]��њvH�<��G�������?pp���&*�FX�\Y7�3����6���^N���$.�"Q;h\wF�O؊��`xYHuz�d��kf���N9��j0>���n3w܃_��ɿ$U���Xe&v�ȞZ�C
+�h��7F� ���^���y�
ܕl�;O�{5� �O'Acl�i
��Y.$D���r�A�=h=X�W�c>
 �/1���r-BZ��z
�6��8��d�
+��@������w���_i�{݁�5��U���
D�.�7�����9䂈����� $�mY�lD�f��ifɶ
[M H�r�1� ѦH!p�ʤ�����/$�bFޅ�Y��D��`W�F��Q�nX�˓�5�
�F�8���ǎyZA��̛����[�1���۳
<ج���P�����-�/��OcjcxQ�1�Gݏ���A�
����o ,��tp�fx��`ѻ�M�:mڮ�w��_+iʏ��������ya��Jf�^�qL�Șn��K�!���oCf�<Y�� &u
�E���G��6��Y&������JrHfd�S��p�^�A�`<(����F
T����k�Z�>��H�&g��Ƙ�QO�uf ܧu��O����ȷ�w~hS�
1ʹ��b���N0ғ�^�3��]_�t��������O��?��tM=�iKk�9������D��	�;
���ж������w;�De�Tu��W����®��E��r�����4��\�
���[�Ppcj�\*ۋ6f.!dG��nkb��޺2;���12<�����]X����_��
j�M#��LB=��W�O��
$�%�u���
+endstream
+endobj
+2461 0 obj <<
+/Type /Page
+/Contents 2462 0 R
+/Resources 2460 0 R
+/MediaBox [0 0 612 792]
+/Parent 2464 0 R
+/Annots [ 2458 0 R 2459 0 R ]
+>> endobj
+2458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 456.355 284.482 468.31]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.794 90.081 211.265 100.929]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+2463 0 obj <<
+/D [2461 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2460 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F16 729 0 R /F14 1050 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2473 0 obj <<
+/Length 3707      
+/Filter /FlateDecode
+>>
+stream
+x��]s�6�ݿBoGw"� �Ov�t�K3m����>0l��D���s?�v�S�lמN'3����~cCg�3:��������B�R�j�g�W3����-��r9�9a���9�J%�|s}:V&o^�
+��]�H��2
Ζ��_�a݅�Ty��k���U�lu:gɮʫ�_/ߞ��<��Jt��R�듟��%�y;�D�vv�׭gR���h5�8���I�=��4��t�3:u�� AntR�8
���6��u��y�	o��"�_��}�)%�
+��{���X}v�ae�L��YX�z[n�	�B�{���"�%�IO�0�ca¶��
n&��C���xu��}� B�g��h2:��go��s�
�a�Ȏl�
KX_P�%��k��)�I��];8Nh�r�r��	 ����VYU��BQF�|^(*��tȍ�Uv���\(MR%gs��7���)"8 3=9z��b�
{�
�ߤD�P�RE��aӷg߾�����]���ϰ)
+ ����x��O��'4ь7
uf$,�-<;A���*����j�bM1`�W��lQ|�3�
+�j0`���L��+�f�ƒ�(��S�8,���f�2��-�O+�Kо,��-��v�MC�,��]^� �3�Y�9$�&��mVV���0D'd������o m�6�#�M�b��|�2�+�nh
]|�H�/Z
L�z�
S�x�
a���V��[�5��t_Y�H�F���H4�D�Ш
�=g�G&T�S�Z�S����8a����� �IU���]��֕�>~9̀��V
+�4Yd�U ����U�n���)���|��d��_�y|�]�N)�nJc[s�� ܑ��E`�ͼ
+�@\Es>4�VA2h���Vux�����ҵ����,��7aE�q"�&�ڜKA���CF���
W_x!�z���=�/�`}�0�f��� _LAc�tϸ�ʹ�s`N��I��Iz�$��l�4��n�Q�A��w��@��b��'t�q
�ќkM��CN�~
�A�$d���B�F����N,��c��QPG�Zk?���t��`+{
,�Xu�]��+�'j f��HnF^�� ��b0f|.,{
�� ��������2������c�
H�6Z�w�n�@��|S���W��A1�W`�W�aX\�/�`8�����$C����TXˈdj�8�Ɵ^
+I�
�1L�	

�Dn��8O��ς��(��cx�
͍"�h�
�����`
+�����
z2-�aq{>Š��>
� �`j��lxz�}uT���t������+�*'�,� *��X���^,#8DP"��2��#'+����<����`�>���-k�@
��>]	L��YNAI�&���8ѷ����y��7#�>�
lk07�X��l�m|sQ�q��5� �7>5�2�,���v�]�`��3<��!Ei/T71T��.灵�L|�/8٭�M�%�{�k m�%Ɖ>��6�먜�_C ¢�?+��MvR
�?�g�G�A)1� �M|
H.�e��E���RI�ں���� �� ]
�6���?��y,%ǜ�<��sF+r�E�i�����@
�B
c��S�{���e
ƍ���5>U�Y�b���-F�C
.�(q�rg�Ȇ�Y_��ڕ���~�i�x����
�E�1 J۫?��\J��L�N�T���Ď��D
k�����k=Ņ���o;�
��b�)�<^�v��(�����:�
(*Ab44���O@"�\3��x��
�x��h���C���C�m
}ޑx��F�ˆ�*_n��(�ޥv+Ep�{<����db����,�5Da2:{
�
\zĶ�1`q/ƀ7��̿<
��P���9��>)�e�C`*<(	��X�� �eB����Q|M�7h�S��눦̆
������
\D�X����mVUn�B���B��U�
W��^6Ԍ�XEnC��G#�$V額�y�d�z�}D�Е�����&��4�e�=��w��E�������|Ē,�P����'�a�����&��|�J�@RJ�2;��B��[��%�R���2��m���&���M k�mb��!��0��mD7��'��%L�Q
�he75D궼�5&ǭ�X3����ˮS�"4���,؟��
d�(;L$>�[ܱ�
�Y���l3A�1>=$��lT7�v�Y��u2h�&<��{�A�j�X��BC�q�v��b�����������(���t��f�E#tp���!B.�h$J�+�p�ñn
_,|��^
��2��W5�0��g _
{7u��

+&
]�VWɜ��
+�.�
��F9��F^�arQ�x��*$b���l��~�޿���&Dz��ÈB�����K
+�0�p:�(���z�XKX�ء�n����ݜ_�� �V?�Ir�� �Ais잛K�Gm�}�z[�ם��mH� �>�)��>�/�Ȥ���4�S0�C�
���05��F��"�9
B
-����ǼZ
T
xU���WY
n'a�ݔ.�#1�
���*����˔�z�����
]p����=8���H�{v��Ŕ�d �\=��L��H?���hC���T�8E���Z Ĥ
+x��LSt>Ԑ�4�<þM�`�閜Q�:ښ�g��c����#�����q�J�����^�ִ
���2��O,Ƀ��0������	��g�->�6Ѓ�5ρ=��X�>�m ��Q��e_	��~��}l�O/� ��P�}���q;�669�&
�S�9H��*����.Qe�D�z�tx�B�Ӫ������ ����l
`�}xT�0Z[�P`*;\��x���v�\���u٥���
l&�]N]M
�&�:ǒ�&,
)RS��f�%���
,գ�+�<�l�5Ȓ��B��p��4�.d��u�{:���@��3�n\9���ȸ
�M��	H���0U'7���ޫ���̯s_{ǧ7?��hp]�v���br���Z�06�8
e�=$H�}$�5����g*G����J#�P��*[�8l!�s-Tr�f�i�R��[\;�:�x��.��V�˖� �}ɫ�
+cO%��B5������Dž�݉��

�T�
b���v�6�u�i,)�T�X�X?��eC�M`���B�^�]�'1mÀ�m�$�WI�ԖR>�C�GT�Cu�a��
�0�X-�c
�d@��
�b�+c����0��0	Q�78�!(�e�Ս�
+]�0R/�0���	^G 
9
*��i���PX��4
낵u���]�
+��W:?uջ�o��K\P�a�*>�ߍsK��V`�/=�ʷw�P�2I�j�
G�
(V�|
<<�]����G�=��W��㱑�w�J;���l]l[η���*�0��j1����4��C��!�7(:�*ܜ�4��p
���2��m�I�D�.q�����7�b���Ϣ����EU�[XW���.'���ق=�aQs���mW���
��x�)�22���w�I:����
/ܢ�q7WB�ɴ|Bw%���-^�
+5���Nb�Z
Kw�b
�,�0c����AzF�^|J��
䠫A$[�����z9
�f^d�*,� m��-F�x�4�*m���vjQ����rv�;�ߗ
R���A�GH�[~��g�������G�P!��z�
�L
~�>��(������zV�"`��7�����iz�aI{�0o�6{2D�TH� s���&t��d�:N|�f�g/
ȡ~ܻ"�?���]
+endstream
+endobj
+2472 0 obj <<
+/Type /Page
+/Contents 2473 0 R
+/Resources 2471 0 R
+/MediaBox [0 0 612 792]
+/Parent 2464 0 R
+/Annots [ 2465 0 R 2466 0 R 2467 0 R 2468 0 R 2469 0 R 2470 0 R ]
+>> endobj
+2465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.868 603.294 311.823 615.249]
+/Subtype /Link
+/A << /S /GoTo /D (Item.126) >>
+>> endobj
+2466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [328.66 603.294 343.382 615.249]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+2467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.236 591.339 374.707 603.294]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.9) >>
+>> endobj
+2468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 404.899 284.482 416.854]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [290.321 78.172 305.044 89.021]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.2) >>
+>> endobj
+2470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.808 78.172 436.279 89.021]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+2474 0 obj <<
+/D [2472 0 R /XYZ 86.4 726.045 null]
+>> endobj
+514 0 obj <<
+/D [2472 0 R /XYZ 86.4 662.634 null]
+>> endobj
+2475 0 obj <<
+/D [2472 0 R /XYZ 86.4 566.837 null]
+>> endobj
+2471 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F38 785 0 R /F14 1050 0 R /F11 787 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2481 0 obj <<
+/Length 3627      
+/Filter /FlateDecode
+>>
+stream
+x���r�6��_�G����>�m��Lד��>l�F�m����Tu���
 ����X��@<87�+Dg�3:�����������$�\�n�fV93<&Z���r�k����
+�UZΫ�f�g��dt�]/�XW~�]Q�A����֗�E����u��٧��<����u��
>f�S
1).�}{����
�kR�J=[�.~�������g�n5�"&
F����?�O���Ǥ! m�cF�ў���ۨ���7���\�8�R0}�T:J�mZ��⮿ U���˻�X���|��
�r�� o����t[�˹6<zs�'k�*-Kd��04�b�-�. X4�#�
+��
�
��i9 �~��k����hd��-/9���/�3�sb�h��ev�"2" ���u�.
+$�n����< t�d���s�]�M�Ǭ�h����-ڃ#x�(#J�@���|��
V�2zHrT�X�0��"0�O���'Rԃ	"Eˎ7?��)�O��>?#��fa���r]M@�P@����B
��im��ꘖ
„m��i�p7�	@@H\��|���û�mc
k�sl+A(&6�}_�|��
Ib[v$��J2�x����}`���Y	�e'����v�IHK��ڴI�|��������4����8`/m{P��Yυ FʙV�(?��
x`-w��}�'�����D]L���(����|3�8�mu��D�L��/|���ljm�"�ڳ�
b��
��p��Տ���V�N��=�nJ
N�>���0�Z�T
���=�$�A�lL
h�F�
�N�yu�I�*c�z}5!Ws"2
+c.���IL8�=<*HL�'��7��:s�
)h�
1A3"xkg��&]��^W�j?@��gP���L����~u]�����+�Vg�
+>:��	5F}�j���Ȅ稱@QK �[=�%]�6 r�]�y	le�,xH��`�
ϣ���
�
��1
YJX���#s������1&��sD$�QD67�M��Q�t6i
��,\HTNI��Mz6�"
Dcs����4��h��vB�e�0	,ʿ�`e��48[�H��
+I����_M f�0;�!B<
���
+!���-�:9&Z�7g�
�jev�s�^mX�(
򵱧K�
s
�
+�%�#��1N1)�>*<7��(*�
+��#؇2�zh��0	�i�ݶI	�t����9����&�\�^!}�(V��Kr��%W��r��OvY
��$��TE���v�0�n��ĕ@��D��I�8����K�J|�
��@;LF��7�]*Ϣ�<�u��
!-�*�>?�e:x�'��. l1�2��L���ϴh<�� tP ���
��
+bޒ��Խ,﷫�'��`�i�O}DQ ���dQ�B>!�Ŷ,���ͧK�\5�?�� �Y�/��e(��Vȱ n
Кc��C��֓�6TapP-�<)���BL{/wU�d
+�F�Qob��L�J��n1���
���4+���!5p�_�	�[e�v�	�Fi�4���TL�����^�E.�R��X�}0]���G��A�|),���B"=�n�
���%
2����|*>
+fq9gR=]�v�E˴�<�$���@�W�xs2�	(��M�8�Yw:D��I(\���@�D��R@�U��*����fEGh�wY
�$[g����;y0����30�>a��Y>:�A
O`�m4�i�����x���_
�
o��
�
��X
�/�&�N�WO���4�:�N
����;w�Z��V�31������I�}�
O�G p/���q�xF����y�#$!u�L��ZS��7$�lh����3�zb�J1X�l���N&�_Og��!����H��6>.�i�
�)�/O���y.�1�F�����ʟ��TL��.s�Kt��I0�*�|J<��6�1�� �а���߈��ET�jH�B�$U�.[h�&�
�9@� ��؇���fH��Uk��Fh���2�$|2�p��p%?y�8]C�$�b/����c:���UQb#�r8k�
�!��
;iӋ�b`X
wx���6Mr_ՅSY?���aB�
+D<�@"-� ��
d��=		��Y�"ud-�
��$�����@n��A�>�j�&��(a����j$��4t�����褫&�J��мt�-�w�#��pB��,�?�)c�H��2�[������5dǦ{T�P�F/�4CX��;�fλ��C��1ٷ:4��������V��"�
0���.��.��ml��q�����f�E2Q�{��5�(
�̎J'ខ༽g��'��o0yt%�����Q�䦺�1�"���
�m����kkT����>L.
+ at k���%"�On
�SvR�e�����#d�I˦�
�S=l�L���%�C�p�t8
h#3:&�va��F�^K�5��`Y�����������D Oρ}�]7`���F2(��ga�
,�m��
���>2j��N�`C�h����`-��G~�w�
+���ָc
+c��4��&�V���4�ϝ���b�Pd(�:���:u�޺���K8��ŔG�ø:�~
�\U�p�F@{�~���*f�2�����(�)�⍓>t�F�U%�α������N_��
�A�r(��7m��'��8���HNՔ��6��c�n��2�'�ͳ�3%
f���6
^Âeg@�aY���4�xc�*u��%�
+'l��/�t!� {.C�
�
l?�B8���^�MA���U&��
�W&�
e�Bk��j��I�>�P���U����=̹��
+����
+L
�QA�<e!��6��H������`��P���u�<]8�!���蘀O>���I����*�
�6ɍ"��
Y�S�1(Y�b�7�Sn��nw ��n�
��އ��πa��o+N�,�mZ%o���j�Դm)�+�J��:��D��g�W��o~y秝�q]�J'��&�Ǐ��

�vs�4�OZ@�W��yGL�湁�;f�x{T�Lx�?DqL��COQ\8�s��c : ����z(W&���/Txr��_�Wq�����@�����O
+B�
��W)�!���4<�ǜҸ+�S��@��,~�R	��]i�Į����Uu�7pmr���
K\_à>��-�4�3c�kA^Cj}��,K�*_��Qȼ
ɱ�I<�vו����>I�G��7��"��|�/7�P����/5�\6UB`,�}�W�L��C�/���|��u��;-����D��o���ݮ�
L�����7����5u�i�r���<2M
��TAѫ��x[�Dz]�-�Jw��΍}����?l
C5�>w5&��S�L����D�n�
��ԁ�$��<*4�5�ɨ����pl?���L�	|�
ca���m��
s??VE)[��0

I|‡�,w�%o
 �f*
��Νs)^F��@��)�l���Wu�]���!�d�c� /Z�q}��Iǡc��
��I,�u��,�=G:���}�߻m	�(��20�����w�����j8tQ7颹�
��
�ӹ�/nj��� �e+
���78�KF�� H٘I
9�$��y��*�6y� 1,�q����
�Wbơ;����2�A=+�E�ރws����w֪nj��a���Ǥ�B�B��'X�?@:d�����` V�
+endstream
+endobj
+2480 0 obj <<
+/Type /Page
+/Contents 2481 0 R
+/Resources 2479 0 R
+/MediaBox [0 0 612 792]
+/Parent 2464 0 R
+/Annots [ 2476 0 R 2477 0 R 2478 0 R ]
+>> endobj
+2476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 457.253 284.482 469.208]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.103 62.16 201.825 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (section.9.2) >>
+>> endobj
+2478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [320.746 62.16 343.218 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+2482 0 obj <<
+/D [2480 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2483 0 obj <<
+/D [2480 0 R /XYZ 86.4 633.584 null]
+>> endobj
+2479 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F11 787 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2490 0 obj <<
+/Length 3359      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s�6�_���3J|�����Mr_���N^��
#A6[JTHʮ:���. ~
+R쳧�����b?~�`<��ų�]\�}���YJR���z5K3�R�8�]/g?ET��9�c)�u��9��DD�^�s���_<Z��{x����78ոuWfS�M~�78���6Yq>�Ѿ���_�/��\�}>��R<�-
�$B�볟~�gK���ń���ޮ[�O	��bvu��Y<)HD�&@m�RJ�VN�
,���*ZdEa�\Fͭ�զ���bD�R����,�w�_]��6�js�-�n.��K�wҔpݽ��-�C�kB�nA�<g,��CBL���v�Ƙe��mJǿ�;��ʊ]�7�s,��*w7�ni���JoU.eB�NC���g1
�d������W��l�����M�
�����#�p���Ҙj
v�De�5y��)�Kc$�F �B�L�~�+��/������*דi8��s���Z��Tذ17�ݒ�ϕ�ѻ���6�}SUh�8TZ�]e���5�R�s�7�;�C��M����?@&}���3���onLU��2��nsN��,��Jd���*�Tx�VY^��+z�5� [...]
��Ds:t���3�j�� �vae�]�	9/�Dh6 x~x*�J�LIId���@�P���@��ǻ��
+`�H�
��]�����ᶂ��q�
�
+�I�G��}�1I0�.�d�e�0YL
�
�bwH�k
Ѯ�9$6�*!i�&n�}�5U�[7��uL�6M00�D$�]Tdus�e&S"!�)����)Zf���%�[QVEvvZ�;mb�A�
%����!���9��\XG
���۷��6��K�l�Q4
o����o���>`T
+w�ä@�"���s�:N���@�r��$�(H�
5f3$���@Ly��(�#���9��o�\l���mUB]����H��>�õf�82v
`
-m��	J�T�كg�6,w�Ec�܁��n5��›�
+�Az���,Ü�ѿ�}�ý��!.��!�9&��sm�C�sC
�V�@��]���7�*`��(�)l#�)�|Z�\$�g=8G�!4�SkV<>�8����}��NnS�9��Sڑ�#!�t����T�ٸ��Y�|)bAS�8�sx�l��9'�n�������'X!"����v���;��!˚�.��~��DA�Zw0���^��^:V��G����:C�ٻa�w4�|i�l��u����6�l��v�#�*
g�����9��[�i���?R8H��NO�Q�-��aDA��L�5r�OрՈĎF�-C�$�b	��7���!]�kS4X.�T
&.�h6��@�:��TG�(G6�S)^��c*6y�
�w'�P�p��m��o����K����q�/��A��� ����
��3���P|�]�җd�Cڗ1��OJ_!���(���G������{�! x%�Y��(�O�u:�k �L?XG"F��PR�	
�v�e=��VC���^�T���"�@�|3BR��C�*S�eE� ��G
�o���
P�
pw��|2�	
����ℍ�#��ז�
+���&�C4 {ȥB
+�O��C�\�%ũgl�5Y�8�� �=�h!�I�>���P�h�[z�x�p�R?'JF��S�0� ��$�Z�P0
�5a������T�)�b*���mn[gt Q��\�d�ݝ�[h4�݄�`�(�V��p�����M0�U
��U"@>ۄ:t�׺��	YXw	��$s��tx�F�e�Ɖ��UVՇ< ��k��
1TY
�&c
�iL���=�|�٭���ԣ

N� t��@�)������Gz
���@[g at f�
�,|�ʱ�FN��gk�զ���Ocu�%T��%GY�Z<�[+ at cAK������Z�*wT�o/(�p	c�����0.,P�Aq�}�
��P��"/��P�cǭ{ܴE
w���W�8u�Ĭ�wc��F+]K�PM>�<Zһ'9H��A+`p0z�����.��M���==᧊&��Y>�a/�"�s�k�a��5�!/C
\5��}�~ʛL*Y8oNEc�z����� �>J4����	�"+����؂bi<��׍�k�s{R/qM��T�����-'���N�P4n4�1��5�<��?���=9 at s�1�Eҷ�)\���6ۛ����
�`�-�j�u<��Ǖ@!����
+�T��b�$�o���)T*�rK
+or��ℕ 
�|� ��G�X����t�x�8�0������%ց��0�����v��[�B�6�
yBe�=�ϡ2^š"
�젵�e�S�fU�6�N�Y]۰�;�L�o'c�>~գ��e�| �_���^��
x���ЖsA�m=p��=<�dx}�c~`1��&��f]V�b���7虋�q��H�G@�Ӱ�2�
��z�K[��G�g!�4�m��U�b@"!�T���lT�
^@ٟv��03�X��Wh
�8�ӱ�t)�%
�/���VG���-�G7��^��J�����
��
�\��Һ��q���
ޱ��lq�on��f
3�a��d\����S�4)�e
C�n�����y��Y��B��-��f�A��6�Р6!�1�_uݖ�b�� 
�n,�|�;
���W��
PyӀ*��Ʌ����a*⨈�V�s|t8�v�f�(w�������7Aж�j��:�y��
���C�)T��}�m�����RK�$zI��y��Z��Z<2�q�������r�h�Ƞ��ָނL�U��'��5��n��ot��2�II�v^w�7����" e�I^��c�C��ꆁZ�a7��i
�3�h�gµY3!9��n���'���5_&� ���w|�J��I���_lAy��bo��Vs��H �Oz��y�9��/��眈���?%��%�.�a��H|4N�U~�[ ���>����:P!������M�)q�=��+���D�p{���G4�8�iC|`�����
^�

~X�i{��Pgk��!�v*}����b�b��*5�*���3�w���/���%�[�]��Z�X�,U��\S���?QK:؃��K�4:��(g F�ɬJ� K�
�N\����7�����{EE�PQg�  ��ZJ_}��AX��Ԙ�1�� u�*s"�]T��<�O���Oz�
�V�|��� ��B�.�C}hp�x�c5_$P:�
��_�0���hlZ5��������Q��
�ç�
"l
������8�S�߸_!�R����#
�I5 �0`I�]�:�;^
*���� )(�Dm�G�
�2�`
9���6����B�X��༔�Y>A�����
+242���DS�z�
�5�� R��
+endstream
+endobj
+2489 0 obj <<
+/Type /Page
+/Contents 2490 0 R
+/Resources 2488 0 R
+/MediaBox [0 0 612 792]
+/Parent 2464 0 R
+/Annots [ 2484 0 R 2485 0 R 2486 0 R 2487 0 R ]
+>> endobj
+2484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.114 561.509 130.069 573.464]
+/Subtype /Link
+/A << /S /GoTo /D (Item.126) >>
+>> endobj
+2485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.172 561.509 161.895 573.464]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+2486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 261.61 284.482 273.565]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.728 98.166 441.199 110.121]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+2491 0 obj <<
+/D [2489 0 R /XYZ 86.4 726.045 null]
+>> endobj
+518 0 obj <<
+/D [2489 0 R /XYZ 86.4 623.212 null]
+>> endobj
+2492 0 obj <<
+/D [2489 0 R /XYZ 86.4 544.853 null]
+>> endobj
+2493 0 obj <<
+/D [2489 0 R /XYZ 86.4 65.092 null]
+>> endobj
+2488 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F38 785 0 R /F14 1050 0 R /F11 787 0 R /F10 1095 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2498 0 obj <<
+/Length 2803      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�F��W���ɼ1Hj�:ލ.o����aLB�P]��{f�$D=˕�4���_7H��F�:9�<���QJR�utyMd��h���U�1�D�.���ZԻ�v�g+���ծX6yY�~�UY��]�Q�ũ`q�'ꬨ�&�͛S��?m
���9
f�S
3�N�<?�����	i�Z�1RG�����i�������۷��H	��:�8��	

�!�fʧNa��|��>Q&�
�qd�gx'�'5#�+Xq���6[eW�
�U��|�����훋m�����2�d�o��]qvk
׫̮�?Ѽ�wF�
+�-#�
+��?��P	Q:�t�ɏ�E&L''�;BS�P�n�ܿ(mP�H�~��f��\���'��#Tl�|�"
+�x����"�z�U\�C�^��Gd$$Q�E(�"!:��(�^9v�<\N
+�J��\�Ǝ�
+�
`H�'�����؞=є� E�\%Ԍ�����@C���	FT�2*���!u�����48O���1������2_'�A
�a I���
r�|���a�Rᮒ2���m	g�_y��(O���˨��pՁX�͖
�/��� EJNR
#��a��i����,��A����3>��邛�������k�����I�]��K !q���N�d�P���&��m�6^M?��)��ϯ��V+?�����l� ��s��:x1��$�V���=�-L���
-%�r���
�72�è
����D}HX�0�n�H���X��5J�����0p��u}�ɪl�:U�E��(*���7,^e��$ΊU�w��� ��ōu`��ŀ�`�3��3ĂQD,Zp�B���Mu��d��ԣ��G,����
��
!d��UUx�_�=U*��]���Fr���ɠ��%
� �܂�cpv�Z0M(�h���|\N��
p�.�;�n�g��D�ܩ*�r
��[q�ʪ���t�;� [...]
.t
be��f�����qy�,n��i`�0v0J������L���0م���ڿeYz*l^��u���:
���9s c�'��f� ��ql���n'_��>�9�&A�:�V�|�X��x�|9)uT��x������/�y�� أ����r��v�"�����*{��Ͼ��b����
3�������cTg`k�Wp�eX���<5z���;
+ ޘ���uۮ}�o
�
(���'��g�7 at n��1p��M�0��䌇�6�
n��M{~�*N��u�����w�
Ζ��,��5�4͆��B�0D*�C�Ws��k�o7
g����oPC��ې5n���q��k[����)
,����ݴ�B�Ԡ���\a�Bu����}��b�
���=���
�2�:��
��^t�
e�I"���2q(_(
E��`j?!P�H�]|���:���bEs�'E
`
M츺��*:
kk��g
+�DFB
+b䳚p,�DB�ë�ԃ����`)&������3 
Q׸�r3�?����y
j�ay�l�w57.`�8N��GD&va�K�L�[���!���B
�:�����d�L���5^�
\�s��Q��f8��n��|��猷�D$X��b��c+t͔�����x'x�XMK#l���h4��qk��=NIHr�ҡѥu��\���C8�r-��>�sM��A�b�u%25T�#��:Ғp^�Ÿut�EƑvJ�s�7�T����v�.U��%��%Gx �X��.�

+�
��
~�*"A���n�_Y!���~��u��a ibK����Nb��.����6�m�|K�5kvU1�N�
��4�ta�`�:���� ��с-�]��Ǿ��/*4-�M�̛��D�A���3MH�g���ܭW�U=ځ��偌z�\f�ka�[
I�*7i[�U�ŷ�*C#& �heU��I�!OV,�]���u��q��*	�H!���+�vd�n캙·h:T#e�/���*W���o��C�|�ũ�,z�����%�j�l�̠�
+O��'>�K.��S.�w%�aĘ��g��YҤs�
R_��
����$U����
�.N
4M²n����/�vm_�k�ɕ���{�5v�Dݳ�
2u��۱�7@��{��瞿�#
��]�&|���=��@�|���MЅy�o�9� 2�G���=�e&�%=;�B�,�U~�;p�˿���O;��>TsX� dV��"Q
BA�A8bz����Z��SX��π���ǃI�
��p�




��U<
j�	#�"
I�
+
Ã���'؋Sa-��

�u_��Ჽ$|�
�Bʺnk�&p�Y���{�㒤=D�M�3��n��V��Y��ɱ�S����
���r	Ulw5�Pb��,����+�{GLb���u
+��� ��*�Pe˲X��ɸF�HTh���+h,����W*av�VS��,8'
��pS��Kn�KȡDv��b]�9�'����k�T��/pCb��k?���l�ծ��(:�dU��V]��5��?d91�+'��
+�Y[�)6�����Wa�
F���
�s�E8�P�в�`�)J��ޥ-�HcT��ž��j�?�؊����+���P�Hҷ��1w%�u7͠y	H��<BF�/���:��3p>�R�����dA �T�_�4_�q��p(L9��������wnB�)B?lҨğ�a�;�z
m����}��y�����.�
��,\�����Y�4D��� �2������g�,'
�B&F�
��
��Lнt�X&B��3�c�0-��$��
+endstream
+endobj
+2497 0 obj <<
+/Type /Page
+/Contents 2498 0 R
+/Resources 2496 0 R
+/MediaBox [0 0 612 792]
+/Parent 2464 0 R
+/Annots [ 2494 0 R 2495 0 R ]
+>> endobj
+2494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 356.185 284.482 368.14]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.216 172.273 431.688 184.229]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+2499 0 obj <<
+/D [2497 0 R /XYZ 86.4 726.045 null]
+>> endobj
+522 0 obj <<
+/D [2497 0 R /XYZ 86.4 150.382 null]
+>> endobj
+2500 0 obj <<
+/D [2497 0 R /XYZ 86.4 65.854 null]
+>> endobj
+2496 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F14 1050 0 R /F38 785 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2504 0 obj <<
+/Length 2329      
+/Filter /FlateDecode
+>>
+stream
+x��ZK��F��W�(V��&�؃��a�&{qr�=#&���2��o��")J�F�a$��Hvwu�W���0x
+��_���ɛ�T1���c	�Ib$(����31��0�|�s�O�9����w3J�o��N��>�M+�B5v�Bu�d�Y�?�ܬ"�gs<��Y=�������
,��,p1,דO��A
+#��8
+>�y��xʃ��?�ЉvE����#,����%Ĭ ��°�׾yϺ+F�p1���F��q6�O�����<|�㻷�M��+�\���z_�� փ�Jr��No^�

E��4�c�b����!$�a�Bƈ�S�P�iԂb@��BG ��D���j�hj�v���a�
F���������bc�K�8,����#$b��  E���
��磅�(����a~�$ ��D��J��I���P
_�
��sv���#�U�jyJ���0��`�P��Y�bY1@�s"X������o����T�M�Ȅ}�e��I����F�'��
x}v
�1Aa$
)�
ibX;
+6e �����J$��z�w�n���1p�]"s�A
�`��	�T>n�
��hZ֪�8�4'"���IJ9�l��-fx���D�H�5��,W�}oV���@�(��!]��]ݨ����{�;�I��
+�>�&4�~�3�R ���R8D
���C���m��2��,�@���*��|���1��P I��TJii����kU��M�[p^ >�D�K�~f6}��*��
y�Az��[e_����L�4U�T�v3�X Y��S��ܱJC2r���}C9
A���ɽ��4�{C�Vj�t��HĜD��J�TU��y���')H�ᄀ� �>lrx��1����t�]˜�����
ӷ|��]B�
��<u�n5����#��˳
�Y����V��ʈ9_%�?�Yz����Dd�ܐt Y�*�z�N(�M�����
��i�p��s�\�Ѳ\o��r��ޮ�I�^��b˒~��I������$;�L��!Y�YR��s"mf./����Vj����}+^U+���`��Fm�r�:��
H��cyA�E^:(���Đ��p��?�l�bKxb���ɥ�?�oJ�d}zny§�6�[�M�/3!^���YaM�k��*)�ʿ���%�
$��[�8 ��⎟�d�Vͪ4Gůq�w���:��s����s��_�Q
��|�Y�-XĈH�$�WղRj����cܩYNh�b�J{�! ��!Sw ���v�(F�<���~���b
<ԉ�ڽ%��լLL0���.+�	�֕(�b��|I� ���P�2��&�0/�&�kcT��	G}ñλ��m���������f�6N5?��y�b��-���\��LS��������94����X�~]V;� ύ7�.3�7���� ��Ʒj�����L#�ʻ�s�@g
a�1Ow��0}�	�B���߁v(Cd�
|^e��\Y��I�LF�($����}`8��QK
&d2���ݥ
+�d��+�ӂ���?�f[��mp��pz�rZ��
+�����
+r��xkhs;E�:���o���04�fsAGtUn������׽����ڠ! g�.����9D*Co���G�sTX��-�f˅W����*?U�_C`}G�zh��n�u��(�O��<�O{��-�*S�ͣ�b>�.ԓ
��K�`'N��b���l��
+*��uD��0Ц���?��[�e>U\%yc�GG$�Dz�4b,���I��c�b�kWn0[�ã'�cI��vM�x�m�šڥF���\
������!��D�l��zD��M��"N���B�69��
� �&�ź�M��Io��Iy���E#	'@�7�HQy�ګ�n���
�-��l��Q
��Q
��m,	H1|i;�[��|��t���v��:H
2C~SR
Hݨ���c!��m��x�^�O�* ����(1�գ�|���!
�&���iQ�@��1;���Crt��#(����/�	w�^�Ocr_�Z׋�f|�9<
6����4� �:���K�#�4�N7���Һ|�\�iLڮsm
�Um�
�A>��L�_q�RQ6�7
4�ؾV\����7U��i�t.���?~2U˪����
8�(�yڀ����-ΖQ��T����Ws����$T�P%���~qGn�t�"�77����V�����v𕆋$���pb��w�[6�sd��߄�0"W���&t�B|��W:|��F
���/�
��@��O�
G���|�����٣��c�2ӟ�h`k�h�� �p�7�����_����TMm�
Y��:���
+endstream
+endobj
+2503 0 obj <<
+/Type /Page
+/Contents 2504 0 R
+/Resources 2502 0 R
+/MediaBox [0 0 612 792]
+/Parent 2464 0 R
+/Annots [ 2501 0 R ]
+>> endobj
+2501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 462.628 284.482 474.583]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2505 0 obj <<
+/D [2503 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2506 0 obj <<
+/D [2503 0 R /XYZ 86.4 329.318 null]
+>> endobj
+2502 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2511 0 obj <<
+/Length 2412      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�6��W�Tj�!
��)�ɤ2�T6��� K��	ErH�.���o7�H���5ک��^,�Fw���5�QpD�wW�7W��J
d,�B7wA��
+�1-yp�~
5���Le��.o�ݮi�"_c�
+�vժ/ꪣwuK
�~_�B򰧎.���/
�~!E��զ2�+`1�"!W����wW��\}���`p�P�R������ߣ`
#�,

�m�d�����^EN�h,�JG��f
�:�'�dm�յ��/|�v�(6rfg#�Rʰ���Pa[�o"
���Tk�uN���H�|Ճ�`��o9�#4�R�I�)�Se�wG[�E���m���|�&�4~�X�������ّ�-y
+���b10g����t���ͮϝv�]_�~R��y��Ĕ�mV�_ƒH3b	�ʔ�;l��.E��2��ά���T�pN6m��@X�x	L���G�&L"��.�
��\�y�2 �K�Y��nW��
�(�fLG����t�E\�O�yP at E���K���]���ݽ������n�&1x��+M��
�:/{�B�9�
�-*2h�u���Z���~o��]g�
�
�a18���,�m�oj{U��9��p۔

�x��t<Gn8˹��
���xoO]"����(c\���&��W��`�K ��L&�|����1��
� ��ݍ �Ӡ=��
܄���X��X]�/�Ѭ~��S��=!N�3*S<aB�K�L	���'T6��Q+�ZcZ�5И��f��F�J3�NM����}��;�

ֹ;���y�1��<oI��a�yۄ�l�$���N7�V�?�V���sfx�ۺݻei�i�26j`��5�5֡i
s[�4`�+RD�����S�	���3��b�c��dq�}�娔��R�@����L�b� 
7�
+%ِT+S9�I2�dj3��㼟��
L�qaC�,4f�OO�%�+
�pm"��Oy�k+���f�E�e
E��ƝB�V`��br@��6_�պ@���0��r��?ux+��~�f���+�i��@���:��zW����D�J͙48Qd�jIaCjڭVy���J��2��[`�c�#E�BC?(��  )�m�b�Q֏�V�s��	 'l�cQ��:��ݲo�cp~5�j����`����wһj�y�l��T9� `��1����v�<Xܘ�'��
�Vľ���"�E�4�q81�E
�82����㊝h� &���9
+�
�����M�A�L�Q�w�
� �t�	��^Tw�b
�G[O<�ԙ�Q����a��?�6��2�S�X��i���6/�k�)V�5 ~�
\�`�~v�6���DB�nS
�y5g;��S���Ν��S߳��Ӷ���F�$!Z=A%��rHv�q�``�ǃ{
�"�.7r���d	�
�
+h瑌�P���D���}�Db� f�g�Veʇ�0!�EI�?Gfc8x2�@���	PJl��S�
^ ��mu=%�Ģ�3q������NJ�������͇�,or�jTUx��Nq~�YE�o�ug�G(��x���S�d
ls�>�����?y��[No�
Z�
+��@E� 0Z� <@jK����p���߿��
jp
+
/���cu���t�Lb
�t�?�#�)
�/�#$��
o�����:z���zNI7$�b��/�$ %xr�
D�SzS��3�oz%V�R�bM���H�4�f��ZbJ�OR����’Z��.�7�dKd����SG��,��ьf!E��,P(e�%XQ��,+«*����)
r1�������,{Һ࿟I)���\ټD����]��I:"tC>bK��@!�'���nS�_TTi�
�S܅��s�#*��a�C�v��9�
N�6� B�����Q��������ު�s�a�QJ�M{���Żc�q�qn<f2��\e�^#8���Lj90rꢄebH�M�v�9�8��s�<�SY�Ox�޵��8�� �a�]
�s�
��h���V��Ip���r`�]�������5s�h��w��/�ȡ�}��H����3J�W���æ_ϰ�ˉ���e^/�>JW�ѫͤ:�r�
���
+h�<]�ޡ2J�"ۣ\�vVO�M����/��v�|�u�R�]�|�����GИ�
�j�R�#�.
��xħV2X}t2S<{�|�w"x	�DZ�u�MF�(l���\.f�CqƯ�7�wch

I��h���8�:��sn�5��-��������Uw�D����ozd*�B���_Ვ�E���!�<y�F
&9��_��3�T�s��Rq(���6�"�S9֠�h,��OqG��"�HSk
	���>`y�C_.��T����������K&�/��T_������T/�-�˖|�\[�Ab�~�t�G�/�|N�:��� �Kv@
+endstream
+endobj
+2510 0 obj <<
+/Type /Page
+/Contents 2511 0 R
+/Resources 2509 0 R
+/MediaBox [0 0 612 792]
+/Parent 2514 0 R
+/Annots [ 2507 0 R 2508 0 R ]
+>> endobj
+2507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 646.569 284.482 658.524]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 179.735 284.482 191.69]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2512 0 obj <<
+/D [2510 0 R /XYZ 86.4 726.045 null]
+>> endobj
+526 0 obj <<
+/D [2510 0 R /XYZ 86.4 510.162 null]
+>> endobj
+2513 0 obj <<
+/D [2510 0 R /XYZ 86.4 447.936 null]
+>> endobj
+2509 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F38 785 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2520 0 obj <<
+/Length 2781      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�6��W�(�,�x wO�dkfkS�����
h���)���(�?~� ER���qMm���ht�'�hv7�f������G�g)K�г��,�L͌H��|v��>ιJKEq<��)���R&j���B���k�����v�7�oۢ¡�ͻ�US��C�b��Ϫ�r���CS4�_o�_�ps����,�,Qz�����k4�a��,b2Mf�4�~�d������?/"/ҘN1�st8�L�#��8Mg:�Yj�90[1�x
+�J����$f�Sθ��wo�\�P�յm�����S8D$X콘����$���$c-�F�(6N���S�UG��H��v��L�FhU{��ܮ�X��j]�SG�M�#
Gk�����o/q�O%���-9gi
�
~:T*�x�gZ��?�d\&

��*�	������_vբ= k�åkL�+{>

���|�
FKF������f�l��W攷���3(	ŢԼ'J&d|��ݵ�	�

��8I
���.)�N���3t����t�I>vWSʤ�

����L at JH}�\m���

&,MG�>t
����"�Z�ol=�6LE�5
x��M�b%��H|�ͳ6
ls��"U��>r��� 
��� ����s
+,Ka^�%`
�eE� �
+�|;���A�z���4|�;y��ꯣ8ا�ZB~�G
��/����w�k%�mc�gaA�o6�0-�Q���ZQ��/9��vWoi��6�m\wV��Sf
��"���g��4�g��m�U�ږЛ�E��n���}��h\��ݶK:��`��rJ�����$�
��
+�~~ĿY��^�䶴��(f�E���Ǎ��KH���:�m�S�	ԇ@����
+?��Kj
۰�I-;,
��'������
+����d�4��u���T���C�Y����C>�dJ9�>т�IX��a�&\�[���˹d��`��kq{F��D�1)s�վ���n�6F��
$��
����j�4�.28{vV���gb��7�b
B�����m˽7p���hBG��/�g�&�����;�\a�]k�$!�����f�g$2\g��a7�6as�����f�İhSa�Dm�.�
������&NȇAc�^:6�s��'��l:J�Е�_�-/CWB�8t�GW{ta���Ct��	t��L�����4�z]�s�A#�u�<@L+�����5if��
��Q�y&
<�oh�� FHӏ�8�9>��t�α��y��i�sX`�l�#��8�{��H����A����E٥6��>�:A�'P/ʫ	)�ԛ4�UVf�kS�F��C�RB��bƘ&ȫw�5�>��nG�] p'ZSN	�p���T��z��Bʹ(�{�	���|ԧ��S?�2#� �����l�T*�_������Ϙ6�ӣL�'~���|��t��5T�FQ�鯺W��:�Ri�hѫzϨ��@U�@p
9R�����x�8JQ��h���~
+);4�
m��Q�
��
Y�DdJ��
d��-�|
Ȕ��F<�)���.��euvo;LvYӐ��(&� �ρBn�,.���@hP�xPu��@��4o&a�8�}�����SM�z,�t>�Ϝ'��\u��X����--����ΰ~�j�����\-�4uq�Sx�T�n��
+�%lܺ��>@�<�,ll�=K�)Ug�
�ްUv�O58|�������ʱs1Zv\�r���ê�g�0�j
�F�m
��6�����E&졨����AۿC@
����xr|�^}��M@(C`��	�)�f�/��
/_��0z
��b�~��
+oZ����)�����2H���M�w��e�Aю�'�.���uX�Q�]�辦�g�
+	u��R>�s��t�n�5vn��� .'o?�~T���;&�;]���3�WN
��1I����� \�>��.�mtH0��:
��R�MV��{��
8P�l��G8G	6

�4S�0�f�|&��۬ʗ�h���W
��y�ٝ�
p�X���p��Sjf� 3I!���8���A'��eX
�C�Rsr+��R
+}l���^
+;N���� �ȫ	v�k�^�Z
<����{}(�f:���zy/vA\�8�9r���ӎ��Wzce+��b�'��2:"�
�*y�_���m֖7�V��Z�cT����n�����)�������K���z���s��5p�
�}�s�P�P�G�
/_@�����@�T�E��J�)�%��)r�Tݝs��V�1����A�c}���[�M�b���%!�`��r=>�OK���ø"��a�4���Z�R��,��Ɵ
�H�O��QC�iFQM �#���	C�w
ߠ����h��5n��c8���}0"l��,Qg��<j�pFO��iX�>�<�BK.S>��
������9�����iWnDx������'��]�����p[Ŕ0a�bɸDA;��Clg+�0�f���q�Z��p�3c��1
�g���b�G�j�EK�(�������7�>��'J��F=��ߌ�]��ct�9��s�:r �����o�m�1���w���Pǎ6'�S,D�|x��j�,m�|�u��q޿q��u�zp+O��*IQ����S�aM4�O@i at +������nAW�N�KP��S����c�T1�@����n뜔.�F��q���
+h*���˦���6��-u/^a'j`$=�4��џ1�릪���8?N��1��qѾi�uĐۋQU����	�Jը�h镈J	o�3Zw�t�қ�p�6�D�O��
�V��
��OS�[��2�?��=
+endstream
+endobj
+2519 0 obj <<
+/Type /Page
+/Contents 2520 0 R
+/Resources 2518 0 R
+/MediaBox [0 0 612 792]
+/Parent 2514 0 R
+/Annots [ 2515 0 R 2516 0 R ]
+>> endobj
+2515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.759 357.875 284.482 369.83]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.044 98.578 245.767 109.426]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.8) >>
+>> endobj
+2521 0 obj <<
+/D [2519 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2522 0 obj <<
+/D [2519 0 R /XYZ 86.4 701.138 null]
+>> endobj
+530 0 obj <<
+/D [2519 0 R /XYZ 86.4 218.615 null]
+>> endobj
+2518 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F38 785 0 R /F16 729 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2525 0 obj <<
+/Length 3069      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�8~��ࣼapGRy�]�ʤ���43�E���
+u������m
O�r��٭͋� �n��u�qt
����ˋ���2i���U�⑤	F��4�u
�s���s���M�϶7��LV���X��-N���<͓��*)��M�-֫4���UV����e������&�If�{�)חE��N��dF�>����7'_O�
G��k��by���8J���FL��֎[F�iD�UD�'�<�
�UD�qL�BD��#�"4��kC��g�+�����ً�/_���u9ڠ�x��HC�'4uo<����ު�)�hN��6q3�!�}R���P;&OO)�|y�Ç�I���K8/�f鮀-R�fye��,_�9%E��,u
��0��
Z$Ea%���ԙ��)��
� *g����]�V
s�O�V�n�2�(��f��-��`ǔ!
��A ;n9�y��v�'<F��
O�M^T�8Fa@W��MDsN8RD�	X�p�u�Ͱ"+�S���Mb –�Y�r���=/��0�Y��
��h>
|4/��@#ـ4l�<�������p�������*E ��'NA�k�)�ޝ�G����(�3��	
�G���L蜊eA�:��ZG�a�`��~���M�� �fbHK�)g��.��9I~9�>�q����
��&�3�ctT��
+Pv�-
�@<:�ѣ[�h\��U��$�`����

���i2�U
1N��֞ ��R�@��$��::T,����ۛ|q���5H�K��ܥ_C��m��`�x,�
+��}ɲM3���~-��~zWfUh/�˥�y�ci{�`k�����@�t+�ΪE�o�
+vu6&���s
�FQ��k�L��1
҈x���^3��ƕ[	��i�Yb
��3
0�%p|]��-'d�f�(
+>�@��]"%X�<n��n�x N!sm��`�����y>ƭ�1���WD]Ͻ���P�Ð��n	Vf�V���ɨ��<�C
��� [�T�A	&Ďb$dp�FQG$�!%�I}[�YY����Ыhk:�N�9�u�X��G�n��P@$�e�آw�8��%�:�Z@��)�6'�� j�r�Y�1�=p��A��W�! a���L�n��^�?��n�_{ؘ�;M}
X[Ǟx�Ǽ��"�����X����L�8r"��=3@/[lמiZYy�ұ
��7 ���
+#�+�i
S.��/"��6
���&)��&
��S���*�{��?�
�fB�z~؍�!cY�����n�ͽ��?'��܃�I�s��y�jaI���21z�͎e
����沶�dܞ֌�����2Z����3Z�ѺVW�&
��JF;\�k��^���h="��>�k�U�2�&<��یvm��M��9k
&��ه��6[k+Q�W��c�a���鳜՞����y�9k�Κ�?��^`=�>*g�,)�w��P��K
��x.6w=�jQf�F��_�W
x4�
+H� 揀w@㚇��^�H
��
Nk����
�
i�=��%
5�
+�q�)��ÌH
�&6��
+�a^�Q$�2���Q���@�(�|$�@0�1B���b3D�
�8��$T&c�ظy��]!�a��v9y.׻U�6�5�,,r4 ��B-���8 ���"x����0w�I*�
�-�(]��ҟ�\��@:
`�uH�<
��H����� lMc�k"m�|L�����]�H��Ȩ	Ȝ.S,�CJ}��"#��m�V�AB��L�D at Y������#|�
+��:��
	�%�}#Ō��B3B�@*�QkLñ�z�c��g��BZ�g�FhԈ� T���%� �L$fa�!-��q�Lj��j�Qmj��QL�z�ֆ�� ���p�����Yh꒥���|�^�}ⓞAui�V�J���:�qqރ�/���T���f��QG����`�Qui�Wǘx��t�����QN��h<�r2&F�h+',S�Q&r��Un�I��F��0�� s��dU�&���'������|.c�4�Pf_wyY{�:�
��FҤ�k�е`ZE�v
e?:�ω10T�wsb���\�qy
�vY?Y89�Ϫ����jW<�VR{���le�
@��E�brM{	ʺӦ/�6��Ҧ-��
rS mŝc ����
��1|@�
+
�BD�}�9MI�����/
��%M��0�f>2A�y�;4V٭�=�s�H�v�ͽ�:������Y����2�>%
oK'�
��^�t
"H���O�C���]s�0D
�.�!%fђW�1%�hfPR.���*����i܃H��J�������l������:~T6X�Œ�T�������Wo��'l|
�:���`��
�I�!C�#M�Ypʍ�;����i�E)X�~�� ����Q�*M������旑�-����1��Z
�Y�틳�	0�4w�/�96�q^�Gcq����RV���>��E�N����
�8�`b� �
�``*B�!��E��������
++x�^�K=yqDF���P^T�.˱��0	V1i]�9�uyH�``Ѓ��94���4�~�`)L
l ��]�G�3no�������Tq(v�E!�A�
vk�{�
\�n����L��m!���_�
l�Ag�ݺx��OR~���(�b����=ƕ����,�����Ͳ7��y���WwI�,�����}L>��A��a�FZ�
+�
+|�LJ7_�`������s+o�z��b8`��ռY�[�E}�@��m��Z��Z3���=q���U�_�k>�ͷ7nh�:|�

����:!pER�J��т	W��{w}=�I��c��@X�
gq��
M#�@��)�M�o5��r�rʗ˵k���)�" I��,��4�/�"�C���QqE at 6�}��)�Ws�Si�
[�s&��t�0]uEE��r=ZՕg���+
�	|�Y]<��J�9pҥc��j�Ҫ]9uo�%�`w��H�k0Q#E�	`Z���
��XqkS[eR�kZ@
+�|@���T^�9p��.�V��v��
]�z����?���Ol�&��Of*I��ʧNfƭ��1�
�1�_��.��y��{Q�p��i`�@`"�p�����G
я������� �$t�
+endstream
+endobj
+2524 0 obj <<
+/Type /Page
+/Contents 2525 0 R
+/Resources 2523 0 R
+/MediaBox [0 0 612 792]
+/Parent 2514 0 R
+/Annots [ 2517 0 R ]
+>> endobj
+2517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.599 657.344 404.07 669.299]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.6) >>
+>> endobj
+2526 0 obj <<
+/D [2524 0 R /XYZ 86.4 726.045 null]
+>> endobj
+534 0 obj <<
+/D [2524 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2527 0 obj <<
+/D [2524 0 R /XYZ 86.4 644.451 null]
+>> endobj
+2528 0 obj <<
+/D [2524 0 R /XYZ 86.4 187.728 null]
+>> endobj
+2523 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F16 729 0 R /F49 983 0 R /F14 1050 0 R /F48 982 0 R /F11 787 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2533 0 obj <<
+/Length 3553      
+/Filter /FlateDecode
+>>
+stream
+x��[Y��6~�_��դ,7��i&>�)��x�����h��p�"e
v�j�v EJ�F3��ʓx�@�ϯ�!:YM������ŏo��b4ד��$�DN"n�lr���>e�^�8�JM?�Y����XN߽�|zu�wb�,+wq��w���q�nҢΚ�[���{?�H�����Y}���/�o/�^0 �NXG�"�ԓ����?�do~�P"L<�nǭ'R��*��\�vA���pk2
l�Ɉ��ma�v�[|�����R�}���g�e$�������3� q��1U����&u�v�%�ŀ!BN��/|�'��K
O����W�:-�Q�F��y�ހh�iY���P.$�X
���=��c�DFt#�:]��d��"��2�Vi1���̸���Ɍ1b���׶l��b�l6Uyɣ�_��Y�lZ�&�� `ʈT
+.b”t�}J��*�L�.A��M��>S�No
��y�]ވ�Pw;_��j�;\>
>۩��=�ʼn#��������h�WTsW9�4�Z�]�˟v�u��
Fx,<��ݫ��������3�0�'Z
+�;fr0�rə\�Č @*Lʼnaށ�|����77GLLQ0�n���I�{�(
��L/
������U:���+�&�܆���w���s�n�󴮗mN�2������aB�Xڥ�Y�#w����_��|��X�3���}s���Q
+�w!WN��t]V��� ��$�������Mk�(�:�,���,O�%c4p�x�ȓ���h<�*���<�^0�E?|~�`���M�S"���E�EL!����R�Ǜ M	8FC(�
cR��q<�lyC��cwǡ
��~���aî� ��l�=���T����Ê�$����aU�sF�>�h �
}��m���
3E=r�AL��+��PҴp��*���m��o�C�� �|�dcP^s�Si����q�>�^��U%���n�iR�@Z��V;n|GBI�$s
x�(�~�X4D,q
�����=���
�v�}�臏�oO�>�f�CzЛ-��MR%�	�'�ă���
9��24�Zxp	i\駁��!�"m X�x�Y2�1�oC�%���˗���+A��:�C�
�	����/�'�K�������{�&��C�  �q<��
�k]��A�# �ho1��@�q̎�jV��M���)R�e[�����r
.0{fS��>���7�H
ҫ���� [...]
+�>�K,��F�q��
w�ׂ�]�šSږ�F��a�т
+ '!bL��s�� ii��TJz��tޠ i����u�s�Ib;B�ƱhQ:�E���!�I ���"H��BF
)�>F��c���ti��y�H�o@|��G�J�9��
���
৉�AD�a�U��I���<�:̈́�v���|�Ƕ�}�z���5U]�P�	,�<
	�vP�V �h =ɢv�
Y�˧-�}
=Ȥ�m������
7g����
���4���
��Z�c��
�В(��H=��g��"2K
�_t!��L:���BM��*�eC�T�P��}�{v���`CQ�.��
E
��ms��$
4-�[��j9�6�$Y1W�>�ՠ�Z�>8)���x����4uh�o=v݃������Qi�j��
0��f�<%��Pty��J��kT�j���n�=�Q'�7��#V�6Q]M����$ˁj?��y[UJv�0� s���.�v���ҳ �Do�x8S���h�V��e��=}����[��ɴ�
�y���> [...]
���C�*��3�^�ͦmvu�,�9F
q����A!����� �1
�P!��*�
�l�Ȍ�
�i^�td���`�O�}�W`����>bτ�����I�lgo3�Y�v�2�c��cHۧ�8�)�e4(9�g�F��L�#9�K�|^
+�D
ũ�d ~r��U�E}���4e_�r/
0� �Op��~�C��V4ϵ���F2`��
k`�@r���8�$���Y��2��P�=
ؙ���V�A,MX�W��iʶZy�6��x&"�크P�Sȟ��絮B�ZX�F��p����껲�mFoπ�5u?���n�� ���>x�e���GzE�$�:�ҵ�l�GCx�V>#2 ڹ
�+�(�����y�S�l3ߠ?�xx=���<�Cm �3��T��ɞ��3,,�IӤ�
vybgtv�H�7�0�g��xbk�8�HW��Oo�a���:�Ÿ���Ҟ���JL�b����U�5f
+ֽ�$S>(�E�GV�Os�3t9��.ɛn��Q`SC]�)�oi@
�?��o���J3fj�e�u�7�%�RB��D�g�I 4�6��Jj���o^�~�j�N�
�r�	x�Ѳ�1��Y���ؽ���"�JlX�8���Uj ���� ���k�t�O0Q��uݮ���.iܕ;�G.�u�ႏ-ڄ�}���"M�Y�˔��$���Q��y��o�
��W�*|��L�Wi����X�E:(Ox|�
C����� �E3�%8
l�*<��P�U��'�"�g
��J;ہ���ǃ,�����v�qX�N�����?��ě��O�Q�u�lO�<���"��5��~�͋��ZT���iu���t��
����
٪�Օ2Of��z�EhpL9
+��%�}��ڇ�h���wk>yU��~�_��L��T{���(�G��148�F(�]? ��ݣ5�ԍkw���*�x%;�h��6��Y!�	'�r��/~f���oZ�����
lfC^Z�3�T���G܎�۸NP�Wl#�����T�j�V]C�v�U0ܦnF�Jݸ���;�v|��=�!�m��aK~2��t����H�u yޝPʛ�
�&���
,
cKP��ѳȇ�5���A�6M�z�q0a N�g�x-��Yt�U%�B
�8\�H�f��u�
���*�
+endstream
+endobj
+2532 0 obj <<
+/Type /Page
+/Contents 2533 0 R
+/Resources 2531 0 R
+/MediaBox [0 0 612 792]
+/Parent 2514 0 R
+/Annots [ 2529 0 R 2530 0 R ]
+>> endobj
+2529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [247.523 548.041 262.246 558.889]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.8) >>
+>> endobj
+2530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.995 445.454 238.718 457.41]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.8) >>
+>> endobj
+2534 0 obj <<
+/D [2532 0 R /XYZ 86.4 726.045 null]
+>> endobj
+538 0 obj <<
+/D [2532 0 R /XYZ 86.4 530.33 null]
+>> endobj
+2535 0 obj <<
+/D [2532 0 R /XYZ 86.4 427.743 null]
+>> endobj
+2531 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F38 785 0 R /F11 787 0 R /F10 1095 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2538 0 obj <<
+/Length 1962      
+/Filter /FlateDecode
+>>
+stream
+x��Ɏ�8�^_���(sH����
�I�H#2��\�}PItYhY�Hr�
菟�HJ�l�I-����������]D���V7W{������n�Q���47D%,�)�/1,,�I�ğ���á����k�Y],o�f<�����(����*�km��EٗMm[jݴ�q�
3Xdq�wvms[�m�XJEY�$[�v��՛���^1��Fl�U�T�(�^}��F��Q��4�wp�H$�pUѧ�]���)
J���
-�VfD4A ��T���K( ��T@��/�c���2�0��޽~�Z��g�ݾ�W�b`���p��T��I�GH�
�QzjEJK��g���2Q;+p

GO�W�$\Ž;�?�la�`\�e����Tҟ&2���U�:�P5yV�����Y�H���FR"�-��h�1R��?��9��p�DJ%$U⒘’t�ҹ��A�C�T��?6��/���@�

+���P`l�] c�%�Ԕp�~\D QC͋�Pi6C�ꂈ4�1/CX��H�M2v�AD�H~"��MYx���
�sJ%'	�_���)SJ"�t��@@���󎿟8���%;�pt� Dw���-�<���NG_� ��ͦ�p�4�	"�у��CW
lJ-ġd�Z���E�%�d쯵-d	����qVU~��\ǽmw�ō��m�����2�aX�-�d탟���|���]z5J�:��1��$n����y8m 
̷���
���s�����
���?��߷�`<�0(�ݾ��
�rN'�Q`^�ʇs��o6�_ϠP���`w��A�T�@1#�@��Ts��} d
�
3����.�yƜ��A^�w���Q�}7��,R��L�HQ�M�(b,���sW2M��+[��r)o.�K���
�>�N�ׅT�u{{n���
+�F^t~NJ(��
ʷG���L�i$�����䄇�k� �=��-�f�TG�
�e)*�ŏׁw��
G�mK��/=wN��'���?�x
,B� 
B� �F>��q�do�/�տ4�
��r�-}�G�;��|)à��ZDZ�4U�)e��D�ġRC=�J�
BO�aJ���9�
?<�M���P�����!�����?��
�
�
���P��Iz.M����	�!�&/!2�^�o���H��.k��
e�˺��>��C\(�*���m�c�V:���l��~=O���^�o%iN5�Z�,
���~�֧.sR�JJ�W�
}x��:k�O�C�"�6;�LA�L��/�k?���/E�
��
+J7�h�A�
����x�(�
#ˆ��m}�}ۆ�5���i��+��8.��&<���v����~S�x��O�
&��D�`7Ga�X�d݌}A0Z�}��;����nw=N�빻 )�E�~��ؓ�<j{w�p�X`0u�o���$�ŔM����q.h���z�>��Q(r*�rBq#p0D��6�	�a���MV�Í�,7<+=����jg�zOy���Ε����y��w.X
B���0�A%��`�4���><�X������Ǚ{
�g�K��)���k߾z�~�
)@��CS;
7,Q$�|�|hz۝F�D�߹��r����Wu��A��_�G�깷 Xr�_�Bc0�+Ӗw��y�!
Ȼ]��#��`��~S֡�=�� ӱ���v����������8�
��
�޳T�p�Aֈ�&�s
d/�'i٣D������d��sC���%ᄈJה(���t�;W:�E����m�:��-�����%��`���d��!Kb�ػ��M�	PA
;y�hmW{�F���(�<\'��=��������`�A�(��j&B���6���?O\zZ �:<�<<���^7�(�%81:���FJ�2�_7R�����A�N�w�A��m at P87����*���q��oV��k�	���]-��P)�kpp��K���s:gj��\�
b�?�D�%�������ۣ��WH�FO�Ï���d�:|!��:�1
+endstream
+endobj
+2537 0 obj <<
+/Type /Page
+/Contents 2538 0 R
+/Resources 2536 0 R
+/MediaBox [0 0 612 792]
+/Parent 2514 0 R
+>> endobj
+2539 0 obj <<
+/D [2537 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2540 0 obj <<
+/D [2537 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2536 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2543 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+2542 0 obj <<
+/Type /Page
+/Contents 2543 0 R
+/Resources 2541 0 R
+/MediaBox [0 0 612 792]
+/Parent 2514 0 R
+>> endobj
+2544 0 obj <<
+/D [2542 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2541 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+2547 0 obj <<
+/Length 1547      
+/Filter /FlateDecode
+>>
+stream
+xڵWKs�6��W�Hy"o��[���
�i��d<
	[��H���z2��]`AI�(ˎ�� �O��K�F4������W?�"L�)њ���&2��H3M�f�U}��,�Uo��\$*Nf_�~C
I�0�C��LIJ
2��]ޖ��ljdjn��/,.>|z����N�c�)1&0/ aq��,�2��\E���`��"�0�G�p����t�(��;&%I����63nb�v� g���][����
�
_E�g�.�j6w̰���
��Y]ۖ��Rg�}`�*\4������	�o-0�9~�ayߴލh��Gs��:�*��A=0����w]"M2���Q\�������
�X�%�T�L��k�����F
BĈHMt�I�� 
��FU����Q#]L������Oޛ�F��a�
-�f}���
_��q1x�w��z
n�
e��~~�73��Xem_��*k��	�|l�7'L���
Y�\Uv���C0tB�c�������Z�yV�b�63�ě����-.'�.v��t�渹ӟ���f+l���?I������0��\ɾ驉�`�
�7����Y
l�i�m�����K�`���1
�9沟�xuxl>X��x\嫭��Q�����&ܚ�DOZ� -�E>�!(k{�9���(�z��
C�� [...]
+5����������� �w��a��p�/U� ?7p�$��Ӆ�cb�CJVa#Ԭ0��s��&�u�n �]c�3��d;���9�_�
�DA���+[X��U�|\_�
��p
��ۗ����+H���� �w��� �6MY
9��V�q���q�e@�"�|Jٿ�''l7?��} �Ԑ&�3B?
 �=�tN�!
{�}��2�yŊ�_�+�j
+��P���c���?Л
+�S�"zS���
��8f.���h�wh��G��v]��ǫ{<��*a6�ܔ��>���Yu�������Wm٬����p
x84	W�f��C�+
zX z�1z�G�
��*�jg��zl���[�t�p�����8x���r����D�
�pF� )�`�~	v����
��(&�N��m�mʱ�n��G���{
oqU�!
�
���ڬr��2X%����6�_A�B�>ljiI�ޱ�? �*k���zy(�@d�|���
=����~�;�Q���m=)�(7���.�*������[w��'+�͓���V�x\����1 M���x��e�Oݴ˓�}��[�\ɐ�
+endstream
+endobj
+2546 0 obj <<
+/Type /Page
+/Contents 2547 0 R
+/Resources 2545 0 R
+/MediaBox [0 0 612 792]
+/Parent 2549 0 R
+>> endobj
+2548 0 obj <<
+/D [2546 0 R /XYZ 86.4 726.045 null]
+>> endobj
+542 0 obj <<
+/D [2546 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2545 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2554 0 obj <<
+/Length 2987      
+/Filter /FlateDecode
+>>
+stream
+xڽZYo�8~ϯУ=sx��.0 at O��vc'�~�
,[I��%���Ӌ��[�C�e;��}�DRE�X��WE��6���?]]��A�AL␇��M�D��$,��_L���Njwi���]���r%"�(o�W,���>|����է�lﶄ_�شy����׋�W^0���O�H$�`����
6��k@�������RĄ�S
\^��.����Daƌ0
ڕWi�7�;Xg�.�I�����uQV[xe���_��uSV�/W������a�c$VO��M���|r"ul�mVL�?S�C�_���Bs6'��2�,W����v�T���gy���2O�®�p�d�}���K����uY�M��8�?۲����;X1J��F��k�~�0�&I,%��&��]�V|q�i���Wl�JR���{3��t����(�
Y\ �l��cg�Hk;[Rll{�����E��/�ڶ7~]��j�4��$���Z�E�P奮���u�
+����u����Y2��`"P� ��`K&����JPIŌ�PI;������S2��* �㓅��R���
�Ne�Zv�E�܁f:U\��
�P%;��ʩ���S8�(�Y�CK�k�?Nw���ͣ;���d�6O���6Z>eS+?p��f���U�kH%w`��x��Y�Hj�z��u��o�
��֍�m[;��v.�:3)w��3ED��Am��� C�X��C�I,�� ���
+��X�e�B0+FQD
7Afڙ �]�n�*%˕tq���_�
fy�BҤ�N|*��is����8ZX*3{`���X�}��J|{�o����a�1N|�?zێ*��č7����In�FmƏ�ڶ�T�v2�aP|��=x�B,�d��3�9Q4<b.,�D�2P
�p�
sa�&1� 
+8���r	ZLO!�ۆ�@�
��^ˀ2��6Y����Z��eBcb�u�E���J5��~�����T��w�S%��ɜh�T�����ݱ��
�g��w"QN����G.�9��YOB�}�:��
��
���i��<��o��V?��������6dC�f��N�Fr��k�խ���~����Є�t隁u�95	�[ԣD:��Mj�nl{gKyn�F
�E4h
F4x��i'&{�y(�B�8�fX������뱒?d���n���Q�������O�	ɜ%T��
���'���c�V�͓;�nH��e��M[���g<P&�1*ƀ��@(%"dgQ1�	��8�ŵ�yY�օ�TU���
��Y��f�0:���0�"X
+p:����vh$q����v��l���P�Ds%!�����ж���� �q��'z�3�ܱ��D�J��g�8
��=Ζm���ݘ��
+Av�`Rw�
�t��e3�$ ��(z�!Qi��+
H�?���P�&�H�A�a�\��֡R�y3
�y�,�����lg�0D~���!�a4��WP���P�!/�
+Z����d��ܮ*�r�y����������+�Q�;x�z�A�jC4�l@~8�����8��9�m�
�D�h0�;|�Hx�NL„���1f3,|U�#Xg(r=��Z��0��=a

�XBP:�ΐ5�#��2
B�l��ut
�Q��
�4���U�Y����? �!#��UOoV�� Ƨ�4=�3wPS���5�eK�nXV�Ս��
&M��
_M
��
v��j��|
$@*T  �kq������(%�	@����։S��G^.cp�W����rH�������r� �
+2�#�3�b�1���6�5�.���|<Ύ�]u8�Z<Ԑ ���
+H����������)�M��P�K
O
���C���
5YnY�0<��n'6�p ��m1I$^��U_��3
��C����,�9�|lDi16������8��
A��޸*A_*4��le�^����d0��ϔ�d6
+h6{bBv�l
·8k[7�D�#"A	9	8F=�j�=������q��Q]R��U��)pѤs��-�1��O:��[���$?��h
+Q�AeT��.�)@��H������`@!b6��x�A�s�,��9|:ECL}�]��}�� ��2@�� �UI *���]ڮ{1X��n;E�z�~x����
(<_��ϔk�E�g� �sY�����r�0�h��j�V����Yc;��V�o[V~��ċ(��S�R၉�w7��Ig�﹚\�=d�K�6��"�R[V�� >ʢc�V
�NY�Y�ֈa%�՝pӴ�3WKO�"��Β&��Y�; t�C�]�������2l�G��v�>�u@
�
�z������mS[��
+y���&{
�ڐ>�~��;��@ 1
�
h�F��i����Үi�*����6� !�y�Ypg���O��N���w��"}��$!L!�
$�I;��$bP���EJ���;�(r��B�tK�{_ٕ#�E^2~ܞ���1�����[fX�
UW��T쯻けkD�o����o��N�
G
�z��Ewlɥ��n����c_�>ˤ�&R�W1i�ճL�`<�%�n�����@vUw�8�8s��p9�������m�V��� �q�Q`��ZǍ����lc
w7�f�
�p����>�R�(�tc�
h��}��ȱ���f�C�ȫ
��� `.�>���m�����u��hk��-ׯ�C�>v`�������^�8����>si8�����
F�?/	:�Q����#!���v�>q��'`
|�=�O=�O8�M%��\筳>��:��qN$���u[l�$�gg�}.yg��\���¬��1[�-jw
`�h�������v
�j����.�\�uYf�C������3�{������h@:��4m��4N`m�t]nA�V�B{V"�ѡnw�<�v;��4���������<���I>���l	��:}���w�����L��!�<���g]�1	T)
Q��J
��:G�)X�z�9����pη�_^}��I�>�\2[��e��1�
+endstream
+endobj
+2553 0 obj <<
+/Type /Page
+/Contents 2554 0 R
+/Resources 2552 0 R
+/MediaBox [0 0 612 792]
+/Parent 2549 0 R
+/Annots [ 2550 0 R 2551 0 R ]
+>> endobj
+2550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.801 437.184 127.523 448.032]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.691 70.558 214.414 81.407]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.1) >>
+>> endobj
+2555 0 obj <<
+/D [2553 0 R /XYZ 86.4 726.045 null]
+>> endobj
+962 0 obj <<
+/D [2553 0 R /XYZ 86.4 61.537 null]
+>> endobj
+2552 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F49 983 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2559 0 obj <<
+/Length 2841      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[s�8~ϯ�i�Tu4�vjz�3==՗l�N�V�<�$��6'�?�HB
6�q�%�:}|�"�D�Q}8����O�pbS��]$��*#�
Q�F���{L�<�������?O(<�D4J0L�T�h2?��GM��oQB�I�';n
	n��Ytu�ߓ�K�>ZM҆"�
+B5�T*��)r}��8���g��X���3!D|�7�I�,ݝ��|q�t\�'TL��X.��V�^/O�XO��ʧ�ǧ�zpg��Xc����м\�3���כ�jV�
���
m���щˬ���bZd0�
شRP�MG��k���M�")M#�%�B�9��p%��;&Q���&��)�
�@�����RDj�
�95*8/�����a&Vb%���گDu�Y���
�����Q�(hM[p��Q/g�M�V5}�݋�
����o�uF�	/0��W߾�����ծ
��Sn�
�#|�����` �m
+�rs���	�kF�C�$ݲ����y�{9�-�y	t���r�yɖܤ�G�� %��`P
+F�~1&a�Pf
L6�
��`��
�'�^������

p���XWeq�	Qw�ϗ�
����f�|��������G8�
W3���&�A��;P��,
�
��/�V.��M�p<Xh�qS�׋�/�/z <���-�+�;�
n��~��^<��p|�*�
�
-����k�G�/�<����R���
��;Xf at oC������o�_��w��|[��<����+��/��p�t��
�
-��	��1�
��˙��d�m
+>���Bv�B}
+������u����6�?`5��*��R�4U]I_ฬ�Ֆ}MH[�?ښ�V��!>
,�M
DƏ��qi��Q�Y(��y)�q�c�sKp?Ƈ
�1�zq~}�n?�_�d�պh�]�UG��Q"A���䵈
5�[J���>^d�uJL2
+k�j*#^�h����| у�D7���vu��s��{9 �)��:/�V���XL�tc�YW�y�
��p�v��
�
-�����^��Ƹ� �O at -���8���9${4������w
��s#�����륿�U��s|���|�|ow��H!�H{�X0M(�
�G75$a���P�0 ��a�k
INAR��g�+:2�z��h�@���m�����-��
�kabG#I9����82%i���Ő���&�H;3�ܮ^�]��ͥۻR�]\N(O���H
+E[�͇���յ�`4��FM�@G2��
:�g
�"�p �P��; ;sOؗ���G�b
;B��B�O  -�
�����9:��-�0
+O��y�)�f�2�>u�
b�n#>�!�ݓL��d�ޅ':���`{}��R����n�(�]���x&%�?VND�ެm
Y���2�+��8Ytƀ}d��3�Bv�y�����Sl�
7�9�

3�ܞzs�:�X���+i�C<�8C��{�^�
�7xAC��nR�b{�����τb�]i3
+x
UDS��
��*�I��V�|����	��&ҳA/�@��N$����r���>��,�?��.����h����R�-F�W��>��n�|�/��:m ��>���彷���I��>T�
+�a��� ���� $��t��!$v�
f�(��%���l���>ư4�TS�����F��3HF
g]��$^
�m�@ɣ��xq�
��`@'��~W�Y�/$�w2^�O
$�x�����Kp���L�D2��t/
qbX�
+4��4f�ٵ��M����-�u�W���Ž��
u�a���4�-��M�qҵo�@$Ӓhi�Q�fZ�:�&����6
��	
Cl
�M1�j�"����}Zd�W���uY��	U�
7�G���
wi�n�\e�Jw��䰄OB]b�aM�(�ږ���0�"OX�m��},>୲�%��A�����,=��0L��pxS�c����z�O�Í
�є�rn|��=ƿ�ˏu�6d�����{y����8O
�|��E� ��a�c�zY�ئ�/����
��li���!v���
��ı���]�X���Բ8^�`q��gq-H"{H�F[$�;�*m�e��h�$�Q���8�NwI
{e�ā%-��N������&	�-T��v`��iVe=��z��WD*(����%@Q�C���

�W[o��P�-�Hu[��|�X��o��a-6��4I���
m�6F��e*��S�'R!��p�`3!$�
+u�h���F9���3,�g����QP���/�a��J>q�]��ޮ��
+��E
��z��Z���z^.�כ�~ $E�4x�^^��;T��	;�Rf$�C�B��(�Ҕxs��&=�����4p�pSknٵ�e�x��'o\���Y�N���۱���
����
+V��E��s�g�7Hv��\6������MQ�s߬�C|(����씦Ҫ���0�'R[-�L���+�
ڛ��{���?�lM�	�c HG���	!G�,}�����I��y�7٘��������t\����L϶����
������p�O�}��0��0 F$Bw�r*(��Lo��ֵ&���FВx���v�����L���f1q
p��ͦ��چ�Z.f�؊}�P�>�}���c�qۧ�
�A�y���~�jYA���� �[�ۨ�s�D�B�^�f6u��?�9N
�����2�a�������=�
x�����?LaCJ� ���
|��ۻ.�N7�x����ny�W�a/���8���m��mv�Tz����|��٤e
kMzlS,�J	�h`�F�Ӵ�ʘ�r�����b�:.����/+߀�㢣��0�m?�7��J
+endstream
+endobj
+2558 0 obj <<
+/Type /Page
+/Contents 2559 0 R
+/Resources 2557 0 R
+/MediaBox [0 0 612 792]
+/Parent 2549 0 R
+/Annots [ 2556 0 R ]
+>> endobj
+2556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.073 462.148 492.796 480.315]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.1) >>
+>> endobj
+2560 0 obj <<
+/D [2558 0 R /XYZ 86.4 726.045 null]
+>> endobj
+961 0 obj <<
+/D [2558 0 R /XYZ 161.495 696.212 null]
+>> endobj
+2557 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F55 1066 0 R /F48 982 0 R /F49 983 0 R /F62 2561 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2564 0 obj <<
+/Length 3338      
+/Filter /FlateDecode
+>>
+stream
+x��\Ks����W�U�ȼq���
W\���Ut�}�(�Ą" �J���=� 8 D�J�r@`�������3C��݊������������V1����2*+�l�8]]ݮ~��T�k�,�ѷi�ɷ��6�_��Q�	�<*�S����o�~�ſ}��ʢ��.���ꇋ�.�uA�c��uG26B�6��NV�����5�Ϯ��Jp3�ۭ>^��T���[nG�0
SJI=	ʘX9&���JY	p�Sle�wJ��,���+宕�6�*�\�����-�D��S�=�
�vIQ����FwWI�c	���c�H9.`�M�Ŕ�q��x��N��n�"f�{7}H
�SKc��"�R�cBE�ۿ�]����Gm;ȇ��l�N
	������`
L����V�Ƽ0���4�
�S�Y3.]3�F��c�M��i��@OZt{��>-������l�/�|$���	��
+O�I�\�%��{	��	k��b$��oD�'�C�	�=�
#)M,
`l��a9_��HpT 01�!���!��kaa��ED� g:�|F�`qOˬn�:�9H�4p2�4ٕ/��o�n'T����%0�ŋ�S���>
t�!$���

�	Ąv*����<fZv}u�n�,��>��Xc\|��LD��ٲ�B�Z�PQ�Uy� �	��n�� i���!-����ߌ�>��W~f��v
H.��1��n���5��L�u<w�2���Z�mes��t�@3�;d@���i�+7��H"
Yש8p�_�o
��<���:
��<; ]I��m���ѮR�P �q��x�G
��	UM�u�
�6��`^n�/�����0"
3a�?%

n���ܐ�[��6��m�$��;ǩ�!&�"ͷ�3��C�ܿ?�V��'���$*
�����U$]�
\�%�?8v�?;�𦼇q �P�w8����yεI�>�+����8� ���{0��qR���R�s㜵��enX6��?׷��.s3
�����n�6L���[�D�.�僗�ܾ�[eA�=m�q
}ނ!."i��	Kބnq���]
]m�1t!m"yH�L.�"�HJ�:Q
3#l�$]�uz���Zf���5O���fKX͈�.Ǎv4Q�gfS��|W��G��Du�d,�0#:[� !� 
����*u}η��2�J�xS���:ԩIp��`#�˙���wͬ�3�
����v�\mE��K7Μʪ���~_=�sȤ	��DVk!V߀��8Z�wR�cM��O�H���m�eÑ�cߠ�+x��H��]����x!ۍQ$
+�*��V.f�HA!�*'��)��lJ���x�
C2�!U��Ii�ufvp`)����Dm�@��pC�T��;�V%�\??%�P%&*�������L�8
�գ�8�ذ�4�{��>q
�?��L��� ݦA�<�O��J�>uP
��Y���[�@�
3w����wx|�m=��z��b@Ș�f at Z��G��,�&�������s��6����
!3�����D�%x����"� ��exA���
3�xxfKX[�Д�5#X�ފ
�����������T�/��|����n3A0�b3��1���R�F֟}j�I� ��٪�Û����^�	O;�cG����t�C���L>��<���0}��[�! �B|4Pw�r*¶��$HH��>�Ӏ0 (*���
+31Ս�Xj��գ�원[�9��C�C��5���_l�
�vB�S]LP�[7&?��G��0�#�%�6\�l�첹�OB��V;�x
a8���#߀;����
���p����|R�i��S�30�Gͫ)Bub�A

�Xq�
`������U���dR����
�X5ՙ���Wx�Y�����L�`O��s���F_!G�!�`X���d�f�D$� ���J���E���/_��unm� hxc�o��м�ǘ�c4������D�/�B `)Փ,㚪EXH���o�=��a2���&,m�|Skrj)���kIƹ������V�9
�l�
�����ǴĂ�+y��P�=�l��+_�@D��=� 75�a �LU��O̧
[�M��KpG��&����o�c'��$n��Rn�r:1�#����>���a�e�}H���B�`ѱ��zq������"��m��p�I�3斟�F��.��
��L֑�L�Ev�;=^��g��	|	C�
2ei��0��৖b>�Z<��h��Ϊ�1��!� _�v&��
�gӄ��g&Hl�qR
�����W]��*��3��Nzv
o���h��9����mQ�|��e�
.�Q�K�A�PC�٠�Y���|	�
(�*�����
3�d����P�& z�X�BOғb�7�'�E	)l��R��T⼚*TR�XYq~��T�����gѷ'A�D�����@�01�E6cB/��
���>� �v6�~��q�[Z#n��7��.��
+��� �a�
��"���gl�tl W N����'�������8#YW��
4��Who��M������-�rk�
B�l'�1���h
Y h5��@�����:� ��q�U�. ���Zs,�����I�^�:�zH����
OK�G.ȇ��1iőA��
J���v-���
��L?R^GM��?�h�y��1r)�-f)[|>�iQVg�֌�����̌o�EFO��dw����7�M���7+���ַ���3�O�>��7�o��?4���'��"l�5
nl���?��b�x 
+�;$yRm��]��w��.��y� � �w�[4�ݒ}���b�[&U��U��QY����R�&�"
̰X��
lf�"
�
�?����d	Kk(�2��S
�Z񩀩�5��W2��Џa!��Z�8[� �b�
�K�\�Pt�S���
�T�M&�;�k��a�9G���,b���Fg�k�7u�
����;�#[��Վ+�~/9t�
S� �&�q��EL�ny�ˌZ��iqؕU�����PV��bc�^Al�ڕ=sa3�+K�1�e
���_�7�3R�O=\�Y��gR�2�P͘Z����x��M1T
��d�	C��oi
T}Cۅ�$<�mz?F��-��Wz��ax�V�v
+~�����Mp�_��3dp�2��`<�͉v
+p����S�
[

�q�
���?w�:>Hn�lw(�OP(,Ұ# �B��hJ��:�����c+�@�cm��r

��(�DQ٧�j�p�Y05�
w��`'��e8�me���ɾ����U�3Y��x�1�r-��f�?Rh
�-��B&F����W����O
���p�~�������ZQ_�
�6*
+endstream
+endobj
+2563 0 obj <<
+/Type /Page
+/Contents 2564 0 R
+/Resources 2562 0 R
+/MediaBox [0 0 612 792]
+/Parent 2549 0 R
+>> endobj
+2565 0 obj <<
+/D [2563 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2562 0 obj <<
+/Font << /F36 740 0 R /F62 2561 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2568 0 obj <<
+/Length 3446      
+/Filter /FlateDecode
+>>
+stream
+x��\�s��_�GyZ�����=�I�I&�I�y�e�:Kg+�$�$����
�?@�<��̴/MA
�b���.@�����~�׫�?�M�#Ns=�z?S����pG�`����9S���o.����p��t�fV	��R�n�?�Lg+��%��ٓo��I��������Y�u9�'\R7�1VH�I��cUJ�e�)�	��k>�������D3��3��f���n~����?�W�
!���a��+1�_
O��ay��릩D�Ї�1��J
�2��q�
ׄ�EJf��Hn&#	g"���6�8s�Pa&�9C(��n�u\��Š�r�Sc������y8m`�ڧb���y�b�T(P��	�c�P��62�����l��Y
�͔N�M&l1�f��BOFV{��z�1�>�Y�O���rb
�BSN5t�T�-U����
�����^%�t��5Q�����������ExSD��@RL���t�K��t�k� ���傛�~��5�����%ت>���$��mV�ɂ�8 M͘Y*Tt�^ߜ��0�Oa���HN
�l|�}h�T��u�!�|�?��q}
w�����|���f
f�
��
�
��f�ތ�Y/�;�bF�BcF�J�`i *�瘥�g��$ARņ8��
��
+B6�?��B�-��L� �Fg�8��i J#�@�2��4��5
���5z���H�LA3SSEObt�=�H��Y�7x�
4�DuE� �/5z~�LLC�����L=ک
dڀ��Ç�?^���L�,� V
s�����戀!ʢ	#�
)���n|*����(�:�/0/6_�c��簼-���������n�����׌���
+��������]���
�a6�:�r��?ޯ�v��E����@
���K���9݅��.�ָ���
+�#�n�.��n�7�Lm�箪����
�~�%d@
0���-�{�j��}Z�vgp) ��Ǩ!&�(

$M��� ��1�Ec�˘���Tz���j��~	A+��B�<�vi�s�	�͸L\�2�yד�
�C�k��� �l;�*���(#�^�
�QK��8+�sX�������򰎰I�,��8�<Ġb�+�Ż�
`��B>ph~�s�ck=� ���
P'U�*���
e
֧���z�
&�=>ޟ2,c⻪b�f�(nG��4K�����x�DZ>.$�EQUe}0�OQ��L3v��Q�EVK$�SXv�6q��� ��/E,�R�?D��W�C"�.JD����DĎ$"f
��ADJ#g������KR�IRw�8a;Swl�;I�+�x�����a�J��	t-����*����# �
�S��!�s��u/����7�u��ܛ5- �Q%R��2�C�,w�A�Y�<�L=����K�!�<f��,������얇���
+y;^< 
ξz�9����&`�dLR��cR��`
���>.RP�}�Fsnj��)q�� ����MF#��'��j���+J9ԉJ�pg���Δ�h�

+�e��03��0rg+�,�9�{
o	����A�3<���ܗhдVu���؏Xqa�¼Q�'A{���4��l
+�/�x�f�����M����R�z����^�}Lw��](?�
+5��0�Ru��!��V�.�
��
��|��})a�|�l�&�6/)
��+_�l��L�M�o�
�G�U�E�k
+����h"��0]^!kL
A/ �T�(�j��T��Ȱ��h?��W�s
+�t&�t�_��a!�I�TZ	��ua)6�v,��x��a{L����K��wo0�@�
L�ʗ���j�w[��;@�;v.(�
��ٵ��`��
+TL'k�*sj�O�V���
�U�뉱��O��z�[
?<.��ʌfK�U�x"`R�H�.
ܰZ�Qb�<���Қ�9��X#�+��Q|9��łì0i �`�r�YR���zŸ!T��Y�;
X���,�W�P�irj���x)-9�Bm��ɩ�eXS��
+�.DI<'���3}�F���i�o���}V�R�"���� LEkd����5��[Q�<��Q6%)�Ԫ¸q{ �o����Y���a�Yԥ�;���Z�Aw�R�d}���/8�|�ʚ��ݕ5l&���Uz,B����G�@�""�����������s��HÆۦ�M�ib����
��p팁K"��3�2��x�1�݂1��H�w��w���;0��


�������*n�r\de�
� C|�n��s���:�v���q�3<u�����NP ZZp�w��{/���fw.���*�N���~�-m�Y����	76yܠ����pX�m�Uv���э-��,��U9HP
^�R ,v���J�����B�w�K�/J2�,lV-
�����39� Y�]%$\_��{�e�"�#,�Sa�ᮺ��r,�P����ic�7i%�gY�(g������t�WӋ��IJ�ث����ϫ%��
�u at U���ݵ
������Z��i=D
�9E�5b�c:Y�v�6����u�fރ7�A� 7�7S�f�qLv�f)%W��ys���7�];]�B����������}�&�[��*x�9]V�ܛ.��
�cu����i�u������O��b��|�q�x��VU�;1i�)�Nlv��	��Yg=�;�>�4��g�0p�_��N���э��L�i0�����������+��u

�{��1�;
)L
l [...]
+[�S<Jk���#
�-B�A��1<iMr�r*��`eF��x�UW���15V{���T&�=h����l[ G5��ڷ-�Ħ�2���m
�gA������3�kߜP�4�6ҬE�Q����6��	�LJ��"�̩)xA���oY�L�i
�*=���5�YAL�>	�p��E�_�F
�
.��
�sbZ��������~1^U��$�+��8���-��*)t�a^ {����ţ��j�I�-=�0ؘ�����d�$�?
,ʡ��ؚ��Mu�J
G
[��$�[K5I Q at m��
 
+?�$������n�����աk����fO8FuŠq�e�}��0�
+u���X� �[2�=�
��
C$>f�Adf
":{�/���
𳖑�p�ҳi�����A�q6���:��xJ|�W��Ъ
�K�{<۩�<?���l���V��lS�BPH�l���.
m��]
+m���	1�ʧ����?)�8^f$�Y�E������&��
�0��x^����)�%H>�s�x��&!T�M�NZ��?���},JZ�V
+a���n��[�ULI`6V%��`���j��İ���ж��
sc+o��
+w�+�j���9�SLan�o�
�^(N�	�.4�� ۠�V�M�
-�>C�w���e��{І�/��H���n���s�� ���
+endstream
+endobj
+2567 0 obj <<
+/Type /Page
+/Contents 2568 0 R
+/Resources 2566 0 R
+/MediaBox [0 0 612 792]
+/Parent 2549 0 R
+>> endobj
+2569 0 obj <<
+/D [2567 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2566 0 obj <<
+/Font << /F36 740 0 R /F62 2561 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R /F1 1099 0 R /F13 1100 0 R /F7 1094 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2572 0 obj <<
+/Length 4095      
+/Filter /FlateDecode
+>>
+stream
+x��\Y�Ǒ~�@ľ��޺q�Z�e:dj-����azf:�c�f$m��/��O ��}aw������2��lr7a�o_�����Y��/�fr};q�P+|a$�\�L�9�ڽ��
?�SY�7�öZ�^^I���[������7�?��������W1��-ʗ���닷�/~y��0��f!]8e&����Mn��VH�&Oa�r��/��/���%���0Vx��#l�9og�`�+���f�X^x���wFL
xg�΋BZ;1ᚸ7���m������D���f��;9]��m�{���ӻ
�4���ϧ1�I}|�Sl2��B
'A�B�#=6
T�a�U��2���l��8��`�^dU�m��.��zv�4w���Z�W�âx6E{����<G����1�����:�\F���4���w��:
��(�d��k)�_�3�d�pŏ�V��%
�
+]`��
+����j����%�u!da����4�K����L�_��d�����>�#��r?�|
dJ�OЈ��s�d%� ���
�Pnk��gMX����17]����!�����X�BaZ
2鵄�	�`�=G�R�Bq=���r�]o"��G
+��([0
}�u
��j�e�����)7u�g 8���h����$7�&���F�fQ�h��pQX0���7�>�D��R�0��T.��f��
�UC_0!?}����M�|���U���p���{�YǻǗZOg�]Y
������8�*�,��ɡ䅷��H� ��¨j�^��̤7�u�d�h�z�С
+�xC����cӊ�������}pV�sL$
�m'��^^�6�M9�R��T�e����61!7���ċm.�⏫4���ð�9~d��ࡲi/� 0����&
���zU)�C��mV��,^~���]��Uz[��݊p"=��3n	^�wzt��?��}�a9u��P-��.��=#��I�졟��|Ɣp��5۔q��z�L
R��w�9��i]��!�{�� �(��W��D
�	��L!���n����@��ʆ�5��橪��p�<'��xI>�2PK�Y�SPK���@����Y����o����h��mb�`��F[�~��m�4y� W��'���3R$���y
_�ø��S
�]���	����,��謍�����z�X��<��<�q�~��#��'��F~gpta �S��
�oo�2��AR�
���6��ڑ�l8���
+�{D��&�ʬ)x�ڣ��B�A��EU���g3�^�*�
�ca�Bh5��_�`y���)*
E���1E1q�)�p\�b�8Ŕ=�^g�R��, ��,9�#嗩?F��cck��I
�_ m�0� >�y����z�ۨ�kV_��!}R
�,W�/�²Q����=d����l��䪃�ᡁ��0��N	� ��-4�AYh,�%Rv
+ 
+��a�0}�oq�rQ. �ɕP@�F�u;��MD�!�EH=�6�+���e�݄��@�]Γ��ѩL�����X���
2�w

�z�vEnۍ
h

+(�q�]���]��!��' �!e�O����l�]�fc�
����/��"�n��ʳ.���	�
8>}j̕'��f$��!��^� Q�T���=�TCƯ���2�
*i�D%��
+
ݔ]ǠYT0R����1<4?��u%"׫�oiQ��+
�i��!��YJ'���2\~�;�:�X#�5�`F_"sRV��҉̉�9�/�9
V���j���z[��#��K�����ꗓ��
��
���0��,��i�[���\�O%O�g�X����:1����p���9�OʐkI�S4]B�醇&<�CrT�dY-CCq����h�/�˝;Ř����p��S
+v�r���l��,B=\7��
�����>v��"9D��n�
𯇅�Dd&2™�6/	ʓY	<�'��
Y\o
9Sx�7q�tEw}L�<լ2Q0S�
i��hC�SEᚖ�E������!���'��'`���~G �� 7�Z������H�P�����n���(��OC|Xŗ1��f1�ܥ�Ǘڄw{I�a��?��vߔ�R�
X����9��(��7��H¢?�}�]��
+��;L��M�#,��!��B?Gq�"6�&�"�ݗ��r���^�	���T
�V@[��@�R�D�7�
fC�
�mml{(��>��0\�X��D�

O�v�
��E[7�Գ�!�~��p�"�jq養t�>w�O��
��:��nϣd#�f&L N�
)��(Ԇ�L�|x��;�b��Z>D�!af��d��^�5�� q֥�@%4ȧ.7�a�o�#��Ӆ�)����@(^���z��QGQt(us�p�'L��	u<ĂС�/���56!sv��{��uI��L��s�G��0aid���Aɐ0��9X�²�a&�]����֢��-��s��sQԚ#��uJ���	S�]�Cs��m‹��5���!sU.�[�o�H��kes�?���D�
��D���T�=�p@�.ՠ��=t=l<��i�n�~5�h������ӻ8*�-;]����}
�����NQ�s��������u�&I
���
5�R�V�P�.-��,^͘��ۭwu��f�Mog��,"
'�!,��\R��fk#x
г��J	M��ր�O�SMR�����O�b`��E��
Q6L%�S
a��QY��b>�W1�����WA��ҁ��$��*7�}��rz�WX�[?T�
��d
$65�
��^�1~C��U-�Yͧ������Ӈ�����U�
�6D݋5i
�Vi��˯�ѺuP��q,D��v�
�)g�n�w�������*�%����~�"�A$�@�������[
+c��b�
�/����zB$kpI�D6E"��ʵ��f���`!�5�$�
'5�A_
�-�MśC�1Z��Sr�c�i��<�}䩲��ՙ�������f]����f�� *S��e��o�e��%8�F�E��2�YxH�O�f	`�M�����B���»�T���Y�+
v��;1bd?267n"�;0���	��t��T>+JR��f&�·�A�A���d5[�(e�5��C;�A��cs�
�q��FM�+�s?�k�
}�FG?�����
���% �`�;�sH���a&�8�o����uf]CǢ�%�5��$����]!�F��~�W�!)t�Y�箊BI�Z�ī�kn�� �^6�`�
ۗ8e����(X�?v���B"g�HoN
=�-�*\M��=
�lץi|e �v�Z�9�r��7��
�T��'�+
B��
h�žw|��qa*fe[M�f
�k����(�V�̋2ZN��)�*�jH�A��Ԩ�,���29\�l
C���B�*�F+��G�.�� [...]
+^�cw���4:|v��y|1����1t^AOY�)�X�����K�[���䵿��\
��-�p�E
?\�Oo����;p��Y��U .
V�p���i����Q� 6���ك!>�S��HR.�*�V��gq��b�;�(Q��D+
���D�����Ʌ5
�	ǀ�If]��	o��M��ݒ�\����MB
�t���TK�1�TӇ�f {�2�������;xq�Ҩ�������� f�Z~	���L�ऑ�'�~p
Nj N�P�\4iO1S�W������Y��I��F��p�� QbHi/��q�O��k� ������� D�+�� �R�X{b;Ay�W#{up��xy�%�*%��h��6�KU�M8*dD��<�X5��_V��1��}�,)�p>�ѓH0��S/���.���/�� Ÿ�d�p����`~h���nj
��?
+�Yj�aG=k�yk���<��+����N�����&�I�.�����`�1Nn�1_R�$�tPX�ý�*�
�� �m#ќ�Ӏ�ϒj
+D���m�a �4p
��:>��^�;W���
�LC�
+�O�BJ{v��4'<jesN(�`�M�j�W���̟���_J
ު�?.3�[��)�gl���x�D�f�J
+endstream
+endobj
+2571 0 obj <<
+/Type /Page
+/Contents 2572 0 R
+/Resources 2570 0 R
+/MediaBox [0 0 612 792]
+/Parent 2549 0 R
+>> endobj
+2573 0 obj <<
+/D [2571 0 R /XYZ 86.4 726.045 null]
+>> endobj
+546 0 obj <<
+/D [2571 0 R /XYZ 86.4 395.998 null]
+>> endobj
+2570 0 obj <<
+/Font << /F36 740 0 R /F62 2561 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F10 1095 0 R /F14 1050 0 R /F38 785 0 R /F16 729 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2578 0 obj <<
+/Length 2902      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o��~�� ������r�Hs��
���C���Bu�h�������RKʎx��Ŗ(rfv���of���
goN�69y��� #��&_3-�5H2�Mf٧�B�t�4Mn
���.>�����p�e��������pF2��=�����������2���٣�s�1ę�O����	3���h[ry����wޘ��nQ,��)��2/O�d4_��a���0�օ�	��쳍3�hmn�J7M$1,3i"Jz����|��߬��T�Jk̋׼��"H	��
{H�R#C����^g�cgF���
[� �Ƃ��_�����6PƑ�l(SHJ�������ׄ^	��� zE�X��g,��!~c�8��W�-�mb�A\��c�"�0�
+ �����N 1���\{$^���X�
��
+�)o�����5l���cm2���t�9�_y�ek����n����J�ƌ2�1��AF��g�h�/	{xa�0�V"�DeR��УFbg��Di?Vmp)��j$"�GZHmk��V�p�0�*(@�E�$�!ٓ(R����
��4ƔCu�"

��Z���A�(WV�1�
+Lm ���`�Q�����?�J�)�
$H��۪��z��P�~N���iV|���*�_�����//'/�ڸ�_�^����_L7���~\]��2�ow��֧���OW���u��{��
+�M]uE���εc��(R����z&��H_N�u��L��RG�@�`̉�*l�[XݾRN�t��CM�u^�
�I��M���CFX����焛��Ex~ɧ��r�m�;֭
2_��d�0���
i�^޹ |����>j�u��ex�9u�Mno�ּ���U�� 
4��>�~�Pp����)y��9

+y�J2�ݏŴ\o��̀Rh��)L�ة��8%M6��l�!Q3��abH ��R!��Q��Ͳ+
+s�k�$b�����X��g�4-�!�VH�(-���ؒ�����MU�ܗ���J"�(_܇�����=AG��2����U���ئD+�IU�ⴤ	!p"��N�����]D��H�vX�7�pLЮ�Q�N�9q�0��ɯd�F�8)���
���9IE	k �~m&�}�C׭5y�
eO�((K�>F�E�6l�ҥ��F�
+֯�&( $JM�N��(k�o��MUݾn�K�	\��}�J �JQDM4"����1N�#kHP�ބ�����J�����-#�.]�L�}kt���m�춃mB0^��FD[����KL�Z��}�%h�6w�5�{BFU
+�
hWuin��`%2�$
��qb���VNP5���y�H�&mo��k)���-
\�f�X����\WR���ޮ��\��gm+�.4��n���
+BF���|[��a�MN5���G�-WTW� ���E��u��&x�Û����#(�U�&��.9Z�K�P�}S�k��2��7��Sy�ކ[fB�|�)���@-�-��ψ���M�0���Ö��$��#
�qe��Q�+;��N��|�!
��e�
t�
+� ;��]�CsL�0q)�0G�H#�v�$�@�)��f�-
�'�jm�!Dz;�g	9kx� 0���
�~r��⻪ۙ\���'.�?�P���͵�$���w���:�sQ+����b�~|�x�K�l6�y����
���x��0[,l�$1�6��v�s_�N us
���u�	���Fqk��~̜(Jº>^����Z}�
)�mO��9l��jZ��Ƨ�"/��S���v�m��2��U7
���X�7߂8_8��"�*�bs`֎M%v�A��1��D�s��ۍXQҘ��ce0��)��",5���/w�\���U7D
G����6;�


^\�=	��0���n3�bm���4_��d�+/�&�?��S��8c�#��qfEnvqv��+SBjw�0�jE@%�UwF��G��k@��67ઢ͍�����cg�
�0��w
+��T{
�
wB AH��$;8
Z�:��Uט���U������s�ju�|�.qv��;�"X�� �7�@��U�v��
+1����8�g�Lg�f�*�����H4;���v.k�.h���;B�4��4�wՏ��b��:e
����8��4��l�P9-.U��f�B�k53_��j(i����D�u�87V��Fw�����w>H�D��
�ؑͨa��f�ؑ���q�f���Q>�d^n��W�����c<y �-��gahW���]c����~h>�6k:D>��8	��_�?
+ﱗ�h��b��� &PB��<6�39L�G>?;�}������ۓ�����P�Z�K
�Oj������W��4rEws�(�(�h��DUj���k{�����l;��ߐ��c�5�
`�p�;X$e�,=�
�$�0�эb���%A�E�\6@�Eb�	�=�+Å<<�D0\�@0�J�0l��bW)�g�
+|ɧֶ[�3TΆQM��"�B"�;
顈4���%���A��,un����-Y*����>���39D�YQ��x��_6ܓj#(e�s�
pPd3Ɉ��q�ۦ(�5c�2&T�p���4̄�]���XH�
��'D^��D{���^xӔ?�������s5hk�d��?���1E��9��
�����vR�&�>�ͪSf���4ѥ��/)��oy��H
��}�R
9��b���x:[b	@� &ؒ%��M��
�6:���I�'��kp=;�
���`(�b
�Q�9���vpw�)�����uڜ�	[Qi�f
��Y]��d�x������Ք�L�Cˇ戩!�"�zC�MQ�����
�|9�b%A�w�
)��i]Ʀ(�7�����
h7;�_ZJ^�n
طG���w���'�V at P��N`=�#����/v�
+endstream
+endobj
+2577 0 obj <<
+/Type /Page
+/Contents 2578 0 R
+/Resources 2576 0 R
+/MediaBox [0 0 612 792]
+/Parent 2580 0 R
+/Annots [ 2574 0 R 2575 0 R ]
+>> endobj
+2574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.579 474.868 117.302 486.823]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.749 474.868 353.471 486.823]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2579 0 obj <<
+/D [2577 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2576 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F11 787 0 R /F16 729 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2583 0 obj <<
+/Length 3864      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[o�~ׯ ЇR�9���A
+���*p'܇$V�JZ��U�K;j���sffo�tJ>�pvv.���
��ÄN�q�����o��8�4ד����DN
wD
6�YL~�2M/g�;����|]<5EU^΄���
�b�<�q�����
oW<�t�Y旿�|{����

�	kR�J=��.~��N���	%���g?n5�������4n���� �2"��h�3:��gʌ�B��˷�>�-x�_�n�1C��
+��W&l�_���R��x*����~]�Mb]ʼn`�,�*E�/�!_��}�v8v&%a@�
[h�<5�S�����Gr��..ٴ��f��A
�1�B;mB�xf��:l�w}�a�����]S�͍N�%�Ȗ]u��6��!��vL%��f\s”
��SU,.g����m��m���TQ������}f
iьK�(L��dU�����-)
�.|�T�Pm�J�^���#�xG�K�<�d�T��#ܴB>���$l̫�S^#��s�zn�{�>�2AC�׌��#(�ۉ��X{�

F���O�m�;�!��O�b )qN��{㴙M�J���֑9\ϋ<�m�TF�+��cgu�dEٓF�5��bĩ��}{=P@��:ß���"K��	b�i��i��
h�,�(lj�P���1��LF�Y�Y�:����4#�ig؁
Pv��o^ݼJ,	�CQs�5-�( �p���^�w�	4[R�2$+�{��=���<��+
�5;�I���9�(��a�O�/I��6��h
��;PhtX��
��i�T2
+{�"�|�
���M�'H"
��n��l1��

b��4��OeL��U�X8��gX�I0-�5�x�(�&$1��m��fU�`	9dNf�b@�ѠPг�BJY�
?�+�������:��f��<'�֖P?��A��d���CcO�EJ��2�l gʫ�vΙ#�m��ׄ��%���,㠪����I�=T&�9ؙ8�>�U�,� ��o����rp"^�E~�#|R™=�>��D(��"�
��@*|�h7�m��- {���ߵO���
/�V|�M���{5�S�s���:�	hq�&���Z}.:

1� raS�*�E�њ���1\��+�6,����
�߻Yo_���&1���`D��҇p��ɤ�ˎD!��ha|���7��9�� ܝa]I��+���+6t�RQ�
D 0_F�c�q��� �￴�؄DW�P�w�(K;-�&4�����G&9������f��u�΃�ы���!&��0�f�cV�C�#���-���
f�|� [...]
Jb� |w�~����ؖ��	��@>�S(6f� ���� E�f�b��
:�Y����
q ��q@�� �T��b,�
��
�G�n�庸+�0S
���"ϖ10�gM��ǻ
cd��fh��ۚq��v��昛��˾��b�9ɧ���bU��g#D���?���p��1�.��}h�;f���r�0��E2١n��S�-Q6»��J�#�A�X�GK
+^��R�b����
G�zZ櫘<�B�1�-k�i}&%&�
+������i������KB�<���)�>��P�e%Q`Qqz�N��`m�h�{�Q���m+[?lV}&
���3X%hl�����
�œp]��h�N�J�	��u�@0f���}Kɼ���$��B�y�p�H
q>��B^B"�x�9$&<�`�^���!
(�yYo|���r	�ׄ=$���MS�y
>��/�[�"�fDm�V��)
X5
���'eT��>����P��`A
쌏i=�6���!�s�8ǼE��y��:�^�1H��]H@�k�la�LL��!�Ȅ��$�D�אH��[���&��1����ExU���f���,��o�5jo��>�ǡ�`��
a��}ȋ�soV�#��DJ9����I�
xe��8�d�(�
+ۥ��
+'ϖu
	U���!
��h`���7C���yx��$%�N�f���ǫ��:�W
��OG��!�����Χ1� �w�l��
	���h���bW�]��3�w9�6���	�'��(}
+ۤB�B���}�m�<Ŷ��L 3F��'jf�;����H�d|p/�<�~�,ʧM����W��DF�мo�ft|>�q
��0
�:ɽ8b{o�EO~hn����	aK0u�+��v�5�8:q��Z�p�d~L*�5���y���{����N��$�EM�
���=rc!
+�B��uZ�� SM��B�-����"���3�i��6��*k�~��`P���=ʼI��_Vx��
�Ƿ�.�r��B�x-#=*��?5n�
�|���DW�٬��|Leq�ooi�I�#����fK������`��h�f,^��;mhd�
��>�	N	�
+D�p4�hH1 ����ݨ��b7h�HQ��)5���c�o�Kl[�K�"��K'��~|��ݛwa/�[.X���

�0׌�/��R��e�D�q�Ȥ%��@ģ',S�0��T��6��
ݴ��J��0�%\��3��a��sk%p�� md�qj�O�
TD����jʓ�M
l�؏:�^�s���w���[�& �;��}��*as�������@Wzo�y���f�_��W%�M҉Q���R�~n�M����Cqޤh�&
+ �:�&ł� �TF��))�'P[�
w?��,<�f��7>2������(}
HKV�xXVwm��2&^*��˼|h
�{�\����X��WŔ�eQ�
@2�&�S��4�Ϫ���
�2���5��c�V<l�M
��\�2�u
�î�"$P5]%����� (-Ġ�}�o^�V8��,�Y{hӦ�A9x�V���`�Y���2��o�?	ᇕ{�%}��- �w�<�jŀ�A wL;�8�q�H���^H��%�Y��S0�m�WW#Y�6�cU"�g(�A�p��
]��T
�Ԁ�ds��ٻ�L��mk�^��}�Z��?�׾0i�����
+�6(�/C�䛠�ɏ"��U^���<|�q�J.�������@�o_���q(�_E(�=��J�bX�f{��y��g�<��!:/�
n5Ԏ.����"
�

+m|榓�汭7Y
�;�T)W¥�1�u>N`68�'��p0 �O�#㞢 ��]�a�g��
�q��d}]���u�abJ
.��j�4	�W�V�|]ա�R�{�Ep�!�Ok][��:��U�ag�vm
5�Vp��8w�,�A(3���� ����v v��Zm
+���!�[>'��S��'PY`�0
}�Ӓu
�I
�z�;�>C�!�V�P���D)}I�x�� �+�6]~n����sh?u؇C�
8���Hйtf
�)U�	��,xY`N�DK
a3N��
�������M��ⅴ8�����x�Og
+�7j_E�W����"p%�A�E
��1�v�
��*������
2^
o��
�����x��|-R�\�XBhBY�;v��[���^��CK�5�5���;�_`9?P։-�0J	��Rb8(k}��Q8T�+ f��
[�<C-F[ث'�Xba�3,
VӁ�
.��P���]��S> 8��P5����3�
�
��r��}���zZ�X�v*7|o�E=o��>A��TR�9tg81�J>;6<� ��E���܍|�A�;��#�E��
�/Wn�Pa&�z
;En����	@�m�S�����XP 
B�:\p�������:��Z��x���ݭQ�6�1f1%ط_�����-
�?-����[P��(u;�
�
+��}�
����6�F3�d�	d�)�
�
+endstream
+endobj
+2582 0 obj <<
+/Type /Page
+/Contents 2583 0 R
+/Resources 2581 0 R
+/MediaBox [0 0 612 792]
+/Parent 2580 0 R
+>> endobj
+2584 0 obj <<
+/D [2582 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2585 0 obj <<
+/D [2582 0 R /XYZ 86.4 638.039 null]
+>> endobj
+550 0 obj <<
+/D [2582 0 R /XYZ 86.4 375.504 null]
+>> endobj
+2581 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R /F49 983 0 R /F16 729 0 R /F38 785 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2590 0 obj <<
+/Length 3157      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�~�@U^�*a<��TR%˲,E*
+"?�.D��p0 H��>_��.v��.$��{�v����uϐ��{������w?)�
,Xi{����L��
�*�Mz����Py�}�҅�_��bt�n��藋���_�=��1c��
��..>��{���Ǚ
+��9�\����j����?j����]U���`���=��|y�D�
���x�O��@��v����x��}aš��
��6I�U`���g
+�e�	]��
���� �p6I�.����Oڗ>�Wx_��Ѩ���D�ʙf�
+�*����Q�*���W5L�`��N�j�B������y
Sk!^脩��8W���X~�Sy�aR���^W�X�}h\� 1Dw"s�4R��)),sNt�U
+\�p��D��|����!
ۉ��0m�<�����˫W��kXP4���
����@_Jx�YI83FTD~uy��1u)����8�r��[�5�p~�eo�6Z���7�8J��Ƿ��&��Ϟ������d�4�<��t�1�v��FnW�oL^x�0^o�w���w��
 �����(PM��~<�O�5���L�]�8ԭ6�i
�������VŌ�������v�Z*Xa)}�h
�
�S��)]J�<��7���r���p��
+#�C
~g<�F�
%"���8�/����X#M�o�>�]!54.dU�#!�ƭ脫�LP
+-s}�7�	��ZK
����f
+k?\<�}�
_<�?��.f@�p]�x-�G߅)~

���v�~
��
���kz*�/�����f��ޮ�ﯖ;��ãCH���4�$�$D$%d�����(��d~tu�Z�
{�� �R4D	~��Q�e
+������!R4�
��O5�!��c�!�y��xC��b�@�8�<�-i
xP�.f��
+�ՙ�{�
��u�QOhS�Z��r8��*-�	�/��9BAeI�zW��PXk��� ���U��c�Gʊ�w��4fY�.U�<�DQqs�ܜr�!=T..���S�g�������L5��HJ��hX������
�mFs��3��–Oa�ǰU.|�xB��P��b�J*��N�,
+�r��"&
+�P� �,#W.�f۲چ�{-�^U� es�	�l
�/��j���B4.
��w�5�ӶʺE`q�Q�v��T��Dy
+qNkW�����jx�Ex�7�C����Sz��~��*������C�1�& l������ֹ�h�VW\��
��<o,27��,wq�9�cD�z�Y�13�(U��oDB���Hv͗~O��Y
�
�����,��k�
+l����"j$#�U���u;�]�M#�Y�Z���@"1�} �͚"�=�A�Y�lL*��`{��g6�(�H�PadyZVTF�ӁR��BЩ���(H�
�wH��»1�P�j-N�iL+�R������׬`���vd�EV��m�T

+�����0wx��
CﷹI�6֮i��O�`Һ?9��3C��H�p���m�k ��-/�>�R��S
+mEu$
<����)%���	�D��U:�י�6�ft�3��
�N��j��ULMT����n!���[�}�
y���L�w��4�7׿^�P��lH�8ӧ�b؋��˫Qi����˛]�2�m
�){
+�F��QQ�T���vn�B�Mn�_2�](��w�V��jٖv]+[�ô�:��	�:ީ�5��b��H)�	���͛��ZǸ��p5
>[eZ�W�������
ڥ��)�p���i6�nғ�1ۉ�>&Q|T�ME�
 �j/W�����[[���j� �~\�nDZ�I�7�I��[4��@�k�bbvGs�T���+S���������R#���X�E�O�0��_�l��E�B�E�
Fl�����<'�
	d�_�qi���K`�n��,��5���9�.��s��ΩPs�:g�FM�1D����!ό�yl۔�X�0�m�R�8�RQ�
�^��)q37�/�.
+�p�XN��u
f�v�ܦ�V�zg����vZ}�)n�W�j�����O��I;����h�ۋK��;��pR�{@��(�l]�º�
c��2M��٬��s�|{�2�S����V�0Vg�6��6_��������6k�����K_T���HÈ�A�v�r�W�(u�RS> 7���1k]rsd�F2�Wr����d��	�|��|���f���rş��*�264-F�_v�ԢJ�U��-;m��Ôv{E�:�l�8C�B-���������eFZ16'�s���

���5�c�)
/|����i�"�v��z~��sp(��@;yj�
+�3�Z���}�a�֫E�l�H���
�a�l��(D�“~��ű�+�ų�������.t.�)����HN�AA��2�
+�\�}�
+
�|s�^�W3��^ş�G� �����#$�]�>,�����>����=�5^9�>t�
O����� v"��`�<u�8�
+5
^��ɘ%'����ݬX!W!g��#��1�T��f�_��5]ǥ���g�-a��23A�h��b4�|��
�"���F߽��}����r9�=
}ʁ茤	��
/�
�j�.V�c��$�%�����&�3ıTn:����C��S���}�0c�y�j��
A�XFIx���Q,���<?�r�~�*���,yӔݳ�ȋ��N9�
�Y��L���hH�.��&��?N7��ꏺ��&��A�-�3U�ǵH�V�h��C�B�N���.y�a�q
+AI��%-��D�6�:�#��N�5�8W ����yׇ����z��������h<��(N� �D��;r�����=1���q
�|��I�(+!��:	uV��5� �w�c<`*Q�.�sﯦ��7:`���MA���p���M�o���x[����b^����/������F<��ҹN:��^$#z��/��nG����j���7��Lj
+nH�7��)��y���Eћ�.U<���gBf�Y�e�"�����6;�Pjz?+z�%���Ҳ�����~��<
ЬL�+;�2�����ag�/��p��Ɵ��	稲n�gC��f�ƞ��ޙ����`B'���:�0m{�S�>O
̠
 R���ޔfnw��,�7
g3�b���Jh�����\>�]^�
̶�J�>]��y�?ɳ��{�ow�hw�y��,�
��<��e��-H
+endstream
+endobj
+2589 0 obj <<
+/Type /Page
+/Contents 2590 0 R
+/Resources 2588 0 R
+/MediaBox [0 0 612 792]
+/Parent 2580 0 R
+/Annots [ 2586 0 R 2587 0 R ]
+>> endobj
+2586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.431 260.275 129.153 271.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.025 260.275 363.748 271.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2591 0 obj <<
+/D [2589 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2588 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2594 0 obj <<
+/Length 2911      
+/Filter /FlateDecode
+>>
+stream
+x��ZY�۸~�_��h�f`�G�����-���N���őhk%q��4q~}��H�6ê$O�@��������
����/7�^
�p�i�7_V�0�-��f���d�_^s�[�L�U��WY���V.�/x��.
7�>�zq�׿���
�|��o��O7?^��������t���R/Vۋ���b
_~\P"�]<�vۅ�p��,~����F�iwLv&�(#Bʅv�0��
~��x������󓿃��Sa3��Щ0jJ^A����^��P�C{*��}�)�m at GLB-�eXE	��Q�'E�٤
���nkX>�@��Lc]h~s�����.��w�xZiR��	 ����-�
���r?»m�͋o�������Z�t��?�U���CV݅�}���E�
�:�í�*v��%�^�Y~��
h�7�_���|Do>r�F����z��k
�0�j����Tw �Eݤ��0Z��F����
r8Ņ`��
+VS9b O��`�p�{R����d^\.#ɪ2�|!�G�3�C�i���9-��Ɗ+|B3�\����o>�ȷ��bwW~9�P��b^3F
��w��w_C�lW��M�J6�7��kuw� �ѣ�|��#?Ł ���}�w��CU���dz�t�$�X_sQ�2�89
5aWF���T��uz^ɷS8u��g�3�*�"L���6v���
�%*���E����if;`��
��]�
m�R�NS�z�6�)'���U��
�X�4�rv9ODλ�fK�uIγ+
+�fʮ����E�Y�|/�Uc��>

Gw j�CΌm
+���,ئ�83�W��j�H60�
bp�f\]1���
�b����9�^
��S���Gw�66Hv��mB;>
m�`�J<m�:�6v{�!��K�Ē�4Y�xwA��޻ry;��h��4$����<���o��F��
�j������i=r�#��ك�g�#��v���e�R���,ƈ]�EDk��*�oӮ��i��sA$x��S���	���\
�]W�OE��M���hp
��@X�$
+[u�
�Ͱ��Xn�p7m
���,���LH�pd?ڽ�,
��XZL`C*�"��$�D?) ��
+��I���F�Lt�ij�O��`��rb��{�ftɉvSӃe'V�(�|Z�%!��.�+���1��D�fݙ6�/�8�!hE���		�S%���	U
+� �Ps�C �!Q�O��}J)����A�ܠ�
(�Z��1*�Tsȳu�
N���D�
ϡ�:�q<_��F�#��nDhC8D�3��� ?��[��
�
Y�,cMD�'��V�j}^�R�վ�T�
��1@�
��~���m�QMF�I!겉\��t����N��Т��X���1�̣*�@�
�k`���.���E�{���
V
F���A��|S�#& ���� l��6e5��B�}
9���g�õ�*�>ؕ�u��}��(�h\㳌��U�a'@#�Iy
h�
�CD�d��f������˚����@1�e�*��j��3���.�b����v�Ϡ(�-�k
��]^���� vu^m`�̍�o{��K1
v�6��>C{�N-sTd�N�x-��*��{� P��5��Br=�?[JH9�{��]
+hi	dMO��(�]�wE���^��@�� ��Ń@�f�U�yg)VTB
+�֫�A��P
��Ie|��VI�;R� �r��$8�.�~� ��FUL+�K���%C�}A,P�x}�3J�e>���>��*��bWT�n���}4�BhT�,2 �8e�2�|~�|`P����~�Q-P?p]o��h��� t��!ica#
ְ���w�J�r(?愲��p�X�aV�a y���O�Xv-&lٮ�R�i�~2U��,wV�9y_
$��i�B3̓*�T�I�p
yZ�����f8�@�b�A
t��c�]e����Pq�$���aI�����^7�0������CR��p�+��:λ�a$g
Bl�ԡVL������WH��Vچ�#0�2s��qU�=���� �����
�
���Pc�9��ˁ��&�d==�,���
��wv=�
�?�
rg'���N`�6��k=!D)a��^A��/(��[}�/���ų7[�x���?7��}Wם��4zV�/����c{�F�����6��*��n(���O�
�x$��� DW��"��
7rl����
+���B�-^?�˫�n4a�MU��FO�� ��ϛ�c4���zӯk�C���pR�22�:
�Mo�il�1�0E0n�!�n��sH/@
k��6Y}��G9�
H4��?�A�F
�Qu�>z�

L��#���R�<��΅0
��'߄��.c��&-
�q1k#���*t��aGK�a��

�(�&sN08��< kn�cO�>����hC\ǁ��$�	��N�Y�OS�0�0+�⟳
+ޓ��p̐�
s���|wov�Z��
|���J��*SGs�H
+QW��Xߟb٨H�:�.��l�U��7uұN��E�y�^�ў_��6
+96��`
7c1�x��8���	�5�m��l��
gDm[�X�SX�`G�1j|�+B	����O-�c��{JqD�-�CcGH�Ÿ=�l��G�%Aeɽ���h
�D����!t
%?C�i�$�޷�I,<R���*��.i�c��S
z�ة�j4t2 ��9z(P	�B��� 0
�Lm��f*K�@��@�\>����X�t���F����߶�/�
���+:&�!���«��ZvY�:hlm�w�M��
-8��K��4T
�c�
�7�[)�����70���#k�
�~�c�|�!�6Jw�H�^�q
ZR�}��*ۥe�9��X!���~l
�R��p�v��V��'U1��b�'Z\�?V��щ�.^O"�?�Ru�n$�X߯k��	���ضL���kh�0<ܽ�w/O2rlT�odÚ�
+endstream
+endobj
+2593 0 obj <<
+/Type /Page
+/Contents 2594 0 R
+/Resources 2592 0 R
+/MediaBox [0 0 612 792]
+/Parent 2580 0 R
+>> endobj
+2595 0 obj <<
+/D [2593 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2596 0 obj <<
+/D [2593 0 R /XYZ 86.4 217.914 null]
+>> endobj
+2592 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R /F49 983 0 R /F16 729 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2599 0 obj <<
+/Length 4663      
+/Filter /FlateDecode
+>>
+stream
+xڽ\Y��ȑ~ׯ`ľ�7DL݇'�Y�L;�ny��y�:��ƚ{R�xc��ff.�H���4�B��*�/���&6����^|�N��ϼfrw?q&S+|f$��-&��L^ͤ�ӻ�o������w�?]���O/�޽����؄O���������,�ݟ&,��M�Q��DfJZ�[N~~���4�g�wv8�ۏoo>|
�)WO�bUTWRL������麂�Ni1�F
�..MgN�SsS�g�������x&���3nM��+��zs5�O����p�bS���c�
we5_�Ex���U��v�WM�+a��bs��c���v��-����`����;��P"N��iZ��b��i
�DSp�i�i�I��"���g�
��te�4���e�
��sP��s�̑��hi�-�z=�V�CLfR�^Lf�g^GJ�C��o7W�}5��Z�KxX�_h\�s������&�2�6�B7Szw�������1�^�~� ,�BO��Eoo�߾~��y����ۧ�?�w�pق�N�V6/ì��p-�r[���q��DzNت�[ޗ�,pGW�����uR�iP>1�f�\$z�\������ϔ��&!��j����Xl���
,N�*�2I�Wf���-���';�a��C�|�Z�y�r��^&Bg�����K�����n�:�_-B;���AT�
� �v�sDL�S��\�ZA%$x>)�:!�}xy��P�U�v�4�^~H
���)�bn*O
,y��l��{YKDž^J��q����7?�!�l;��~�;˜n�3yb(0 o[��"5޶}��H�˴p����XRZ�Y��/�g$F7����1�9zz����Q�+Wz���~�q�2|��
ݎ$�\�%LeZ��5��u�W�v�q�1<��oq����I� �M���u��fYm����Pj02
|@z�m�M�G��b��x
��b��T����b�_w�B�e�r�|R��*��,X����rR4����@C`�}^.w�k�Oon���.�
������&���ƭ���r�Rջj�NDw at 2RCLF�������
]���@��a�P�q��}��=&ĥ3���-
+\LUԉ� S{���ܼ�~���Õ(
�
c%�2
A��
	�$��@�1H:��z$��5������Ǡ��3ߧ�N�nH���\��~}VI��+56�c�w�+1y��n_��H�v��L�ۀ?D7a	�:��/�K��?�"�J�
ؐƹ
�|맣�""��6��Y�ì3
|W���ѫќv�r��Ġ�B���
؀d�
�v����@/���uR�~pIl4J]�����C��FH��
Ew)M�2
=4��<�,B
+: ^o�-d�0� ��1$`B䈹)h�Yp
A�
+���a�V�~Z�OKq#[x�z�
�eJS�x������C<
+C9��m��u�ħ��I��
��a63�2/��{J�P'����i�F�*`���/�?��F���߷r�Lm�e(" �	���U
C��j@�R��SNA^*��RR<P����`W�Ǽ�XB���^Bp�¤a�\e�N��
��\8����b�񊋀Ac�!>������_rLC(�w4�i2�����j.��"�qm3��`6+7׈�
"��>���GL��xC�x
��p&��r[���棧M�ŀ�(R`#��6�������>P�쪪����t{jRVz�>n ���*ȷr����i�Q�1�U�Zo~�J��T��pu"v(p����E�,��?�a[���
�a����K���k�&u���zz�|� ��2�Α[)��
�ʏQ��X�9y�W��
f�D��SQ���)��bP��1�P<0�I�C{�1���'q�U�IN�|���tv
�H��x�c�SO��5���s��w��E�m�Ln�GR�oU�Z� ͞ȩ�X?o�C|��E�-8��a�.����Q�E^�[�X�2`
+��.��>��
�M�� �ܓ��J�h:d�����[��
>
��y�o��"x
�����P9 �	�B��)���)B`i��Q���E|�{
+-_����qpe�j�ٰǠ� э.�e���0jx��0,+�~�P�!�X�
'�>	ہR�3.B
�8���
�
�
���A�lo(�y~�P���=!ga�%���;��b����Kr�˿�E]���qw��+ͯ4n�l�TQ+i��
W��m R{�2'[��$���
��L
+y	j��RA��"濟�(,��6b�k�
<��Ro7��v����uT�2 
+l
�nZ�1|ٙ�p�x"��n �&~��>'G��R���8ᇲj�fN��K3��a���dt�o��|�Ƀ��]"��Rt;
`k
��
+_�*ڡ:	*�<]�H�_�„�A&
+�1��{��tK�P�D#��
�X�i���c9�%?����ВԹ��1bP+6�c��2�p�\a��u#�pD$�9��P[�{h���k�zt�$o��V*:F�F	���X��8�z��)۾���vL�c��4 �jJ!��7m�{�`�S�<2V� ��
,�u�<�o�hhz�?!��L���a�n�~��_֤��ߞ��4�3�)�ֽ���a?�Ty"�j��
E�}����o����Ǜ�F2m}�O��F0�&�7u4��Tq����Ej��2*Ao[94��b��,{Ju�����=>&.�:C�d ��P
+���d��	d�R��X��>�$u�^.�Y�@�����
)]>߬��.��A6p�{>ovtS�׭�-–~h$c�A�TN��r��b��c��
j(�=ġ
ujx at J-���
A
�w� Ѐ�����#p��7m<�@f�!�����s�`ҽb#��!
��*_b/�j�m
�}�Z��P���ћ���'�� {:%��
d�>,��Z0�)�JX��z"!�����-:��$V m��qs���.� �
G ln�!�
g�b��Qf�9��h��A����:��`1�Z�EC2\
��Y�u��&�69T‘:�9�O at a�-,X� �tYٖg
x�Cqi�@a�I'�=�����-BY܂���Z5��p�VўE�)ƃ߶v",�Fo/R���5
%�k7*�
��J�O�I�O�X(��1f.�� �g~�ƄC��Q�^8m����p�k�&L��c�$Z ���	�K�N�"v�%%����)�%�=��p	&=�Š5|�lHx�Cf̄���^�$�ci�	
�@�˼6�g���D���>��Q�8�+����7kr�~��*5�Kp�
?��EqO�}�
���@	�%>vw�<{�g�?����d$Q1
37
� ��1�`��`��������b��|���U*��~�Iڽ�&ћ&�8,�

B��N�q�Z�"!�`:N>�[B�L�QD$$��w1�H��eڠ/Қ�߿�����],߻Q�$i��=��lJz>ʼ��y���_>�b��Tx!Im2���t��Oo_��9\U&���Ǻ�~�� N��?@�u��+:
�xxn2��T�(!��C��m�&r?!��a�{��]��f
+�9
u���X��҅��.�

 0��8g��� od���V��g.����Ǧ2�X�՚L�
3<!A#	c{�Y�o�G
+�H�S��,s�9
�
�����"��fH�
��$�;�t�Fr�TZ'���(#�AJAY��>�%����^D����Es*׆��:
���*~V��
�°�w:8��lSt������#�
V��	G ��mங��2Ђ�`�4���L���5Y�뉿W��ŝ7}񉟎�2Sl��I�U{�K
h����dt��aJ=O�~W�
+�1�B�&�39j=���U�g t:����$ Qn�v��}��
����j����Lk>0�ގGj����h��hB�\Z�O
J�s�It{�_z\���J���^i��M
.�����+f�3�b��t��9���"���O��}��PYW�9RJ��s���eRk�
��<b�%n��
xbC�1��;1t��p4?�`rv�V
tC�g��NN���t)5%/0��H����R<K�/�&vA��/�:�o�u�}ғy���'<�ƨ��M���jE*k<����U�AʁK}�+:�<�>��2��Jh�d��i�!��[	sY�ơ+���9�У> �F +�)�Q�ݣ�6��~E=

c6�lo6�BZ��}�6���$�Rݯ��I6�q|��lk&�Y6
�%�H)��'�NɟE8�ӟ
1�����i(+��V�U
+�C��>Q�qK�
���F��/�� ƙh({�H���"�B��/EԐ���|5a
_��!�3q���L��L��s���b���kP�Uzo����Sp=
+Q�J˴��2O�m�������{�MiSz��u�9�i�<6I�?
9����x�Y�R)�'�}v��M�
���
#=�5Aݵ�ٱ���1?]w��+aG��0���U�����*:O�%����d��QV��i�˩*��}�G1D�$, =�Tl�'����a�G�<�#]NU
�F�M(�L1�"�W�J��3�T�~�p�<)ñ��Ï�!N:##��8<J�.�gb�r� �r}F�=$�c�U�N����t��+ڑ�`Sߧ7�o���%����G6�gh��
��o����вr.
+endstream
+endobj
+2598 0 obj <<
+/Type /Page
+/Contents 2599 0 R
+/Resources 2597 0 R
+/MediaBox [0 0 612 792]
+/Parent 2580 0 R
+>> endobj
+2600 0 obj <<
+/D [2598 0 R /XYZ 86.4 726.045 null]
+>> endobj
+554 0 obj <<
+/D [2598 0 R /XYZ 86.4 578.672 null]
+>> endobj
+2597 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F38 785 0 R /F11 787 0 R /F49 983 0 R /F14 1050 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2605 0 obj <<
+/Length 2787      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۸~�_����7B���Τ���M�\s:�$#���R�����@�)َxM_DQ�v�ŷ��.��nG����?&gO_r5��*�F���QD�4�Dq:��F����1�l�"_O�b�)�����,o�ʓ͗����x>y��?],�ʒ�v����zv19����֊$1B�������
��:J	�f�Ս[������������
Ӛ8���T����j����Y~S�07�$���ųɳ�wo����>���͘��.'��h���l�5�).�1��p��u���|5y�}��yy���8}�����~����ߧ��.�7_�<��c͍՟���e��
+�2D�g�1�z�?�6���~��U�1�9R��T�c��r�@��.�9���2�u�v�*��
�Tbm��:��l
sf�N�`|�y�Ȧ��mqw�L��'�t
+�N�u��,��9!�/�YqN��b������r�/6	x.M��K��	2�#�ex�;uU���o�"�J��h�
��2��o��Bj��^����'XZ��0Ɲ(�B��ʧ�eյ6��`��P�@l��Zo�@�I�^��"���Y�����Yy��[�eݵ3P��
C�=a�
|N+�D�#�f\��� *�s�5���IQG���B�Dm�u`��Z����#�C��sX���
`�I�(Zi��s)�l�
���yW�
��ࢫX�(�1
���I<	����
�XB�F�]��
(9��/��-
��+CF��Ӡ9a5w+���?%�iQ�:Q
D
��dI;�R��ku�t�mW���R.���?@����E
{��c�CR
$��
+��nֺz�d���
��F^*>;�}S�̨�>�u10=
����^�U�Oi,���1	D�(����n7�r�
�6�+_Kp�f�!E��j���1M��
�[3�C��������rJ���к3�).]�M-6�5{�e�h*�D��b5�kOϐt�ܳ���Bp��>߈�`�(>�p��0�8���T!�.ozs�(Q���wMz�
s�I������S��H#��
$Ai��׻\�%x[7C�D�X���]�2�'�
�(�����׼:��

+#%x�E����F��U�?���&��E��@'&�!�`�s���ϡ��F�n�5߿:}p��&,b�!�X�f��me�pއ�P�-?o2�����T�痮�[�è�����sM/QȪ6�(ok�������D���X*��`3էKM��� ٘]�����.��Hd�.��4'���Qǂ���F��C�-#
Ҿ��P�NY���`��P!
�pE��Z~��A8Sj�XO�॑�Dj�[�������
�b �Kz�a�B��[������
�1t��u��͜���<���,�s��G><�f���+�`�v�W�i6�׾��R��Ib��n�y�?��)�p!����B �*1�Ŵ��0
�
��i�.\]�_W�Ch��{��n���
xfUr�-��SƬL�U�m��(+g��
w
�=�=\�e��?wl���_���c7�=R�`ԑ��H�%�J
.�O1G�o�E����{,8K�U��:w�v���v>�����G;p���^w�\�M�D�	�.�3��j���Z]��
+{zy
���5��ڣ��|��r�@
���z����d�H��?��v�C�����/��"ǫ�'��b������i�j������~*-1\
j����5�j?u`���{X��o�Ѥ�
)�
ÿ��D��K"�{bSƀ?� �)�qA�Xi���;�K�a�Z]>W
��k��K��͛�&@E��+YwE��hD�K�x�H��J�>7tP�������՚A�%ǨC����_y_��,D���"��������f��L���d�E�,u�,�&Y�P����>*��v���ǫZ�,h�u��A���}��F�

+*3?���v�� mZQ�rӵ
���1gg�
+�������Q�h�Pl��V�B��
(��$&B�v��F
+#v}��:�ߐ]�!	�Y�!8
�
�����*�L~�����߆��:���
+�xؠ��`���`�'}�Ժ�?��`ֈx
+#M)Q�|G�F4�|�,0q��iI��w�u�
� -���N�۲�]�B7�E�����=����9?��v�Z�oP�&��q����?�|2	A/eC��IMl��� �S1
���F�x
���4P�>$
)ZHƻ)����C�n�Cs����������k����S�y}PF�-(ʄ�I�M�/��O�nJ���f�rN0wB��pO���?�zBR�V=���y��.8p"�C4CI$(JQ����O=�$㎰D�8����7��v���Uy

4�����Pw<_|3G��	
�� e����
s�cɪ��ߺ��5;m��'~t�N�z�� �>H�OjOzF@��A�bV�[���9��߳��MM

\P�1&#�
[�;D< ��s�i]B�/V:Q�ۇS(���1LaJ�x
+;�Q�
���DP�4������!V�)� ��c�Y\0d���p����J��_H��zZq�nY̚D�
��챗o����
?�� �dz����Hu
�U�yӜ�w_\��9�n��
�>�6���
V�T�f[a��~PZ�a��<
)�ds�9
��S�|+
D���Fja�|M>~�
+�B��.`�S6�V)	���҃��P!
��U�ol�]��E���ﭷ�v����t/��i�\"��߽���-���{L��z�H�s;�P�W����_�
+endstream
+endobj
+2604 0 obj <<
+/Type /Page
+/Contents 2605 0 R
+/Resources 2603 0 R
+/MediaBox [0 0 612 792]
+/Parent 2580 0 R
+/Annots [ 2601 0 R 2602 0 R ]
+>> endobj
+2601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.295 520.385 128.018 532.34]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.531 520.385 357.254 532.34]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2606 0 obj <<
+/D [2604 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2603 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F14 1050 0 R /F8 741 0 R /F11 787 0 R /F16 729 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2609 0 obj <<
+/Length 4432      
+/Filter /FlateDecode
+>>
+stream
+xڽ[m��F���_!`?�fa1���9��7�X�'ɬs at 60h�3"���H��.��S�M��Z�d%��l6����婪f:z
�������_�z�%��zt�0�:�#óD
6���~
�D^M���yAr|�������~�������`,
��&Qʽn��t���_��
��:J���g�s9�W�я/�����4ɬ�Srw��ׯ��ѓS.���j������y]�Wh2L�1��İ>�X���"KxK`:�/����]�E�&n���
�ݵ�$�r4aXZj�K�H��{�v^qWhw}�X���x���p;^?��G��l���f��
+�����i��b�^>��+�ل��ۺ����?_!_��vo?��
	����I�#mXb�
�|&l�{�	�&Rk7�ҁC�i�k��)�#!/�j�{�~ڌ��s�
K\�7���%	~ՁSk���
+��u^�v��ģ	�l
�>a,��������[��lr���o?�y���IL*�?
��Cj�6#��[���^�l���
���S��:��(�������"���"Dh
�}"�}u�*2kFC��̚�D���f}����J?�

+���V����oc핐�w:-�*��Ff'��=�)�K,LB<�5�{�s�KDYo)�\��r�.�_���K��2Ѱp=���!�S4!�S4�'U��mU��A�imID�X���a��I�2�p�e��F�*ؒ�z
�0	ks�99�d�'�I1{Y�M���m6�q�9^��m���$C�e�4�k�a��G=�<�b"��aMD��
;kK8���iNg<���������Z���.ؠ?���b��.��P�w>%"ɉ�R
gg0���
PNV�fz�io�_�ȴ�%m�E������ap�™�C�eb�u���k]��
�^/�=�x���I����K�!�KR�LV*�߬�OUԞ��>k�@J��5�6�*��jg ���H�
6������Y�ѷkP�}�h�ǚt�Kʺ� hM�LS����(1�<�
1�S��٘*���ޜ�nUN�_��9�jm�71`���Eo^�����0�Y�r�D��X۠!HEbS�����T#~����EUo�_b� K��]`^��� [...]
+E�7]
��-:=�\lG�g4z�b�/�
ǒ4WCZ���ѩ����-`���>/��C�x���A�K��̴��6N��g�E�����e����s�������As熻Yy)��S�y�l�8ͫ�%]Z
+�
��yM�})E����4l��	���c��H>l&��D�"_��d��� n�6�vyB�AL���}�8����nE�8�(̾��bL
�|��/��?]�����h(G1�re%�)�ɐ��zo�i.6.�U�F9`��1L��,Ao˘էV-���[�
+(lRe��,R��ޔ�;����x`��O�T�P�<�4_Ȩ��
-�g��.����Ca֋���Xn�6����&H��9	��pW �1
�hš��"ȇW���}N
d�_�H=j
)o	�7��e��������&\x
Q��_}SpxF�]սZ}[�
߲)�`�v�8��𲨂]!��`Ut�kit���2R#�ܞ�@2'G�
�3@�x� ɐҠNŪں,��
+&��7;���Zo�rUT��yc
+�U��u���m���I���A��)���H2	�jP
H�@�[�8T�V{�ĺ?�LtH_�Ġy�)`�g��!���t]��`�� k��L���]�2R%^$���	v\�3��^3�֋OR�M�<��m���
+�����zC��;y}ȧ��ҧff�9B��c�W�n����*��
+�3��,�k��U�Pƚa�+(\h��{ZZ�gE��h��.0�j��bQ��B���T ���|��]M�zG��b�6)�������}H�M�3b��T_�\��m(������6�
+�MU1���_�ʺ��sN���"{	E�:;���a�8� ��*�
o�b�����|x+'�S�c/.�l)l�Tz�
)h�
!�j�O쎀'X�
n��_3�IaҒ�m훼���ݗ3߅v�������̨V���)≒�A]lg?ix���Csm��"

���g{�����Z���h�L�a����7�
����
���4nF��UT�&a��ù�4��2������Rk唁�i�f�t�6
���Iތ�yݺD4���ީ�
Q 7�h9�XSm���\��R��|o��~v��&��g÷K���vS� ��U>C\}hQ��f���7�r���kx��E��8�=�.���窷��@_叡�o�ƹ����&\ ]�2�w���;'��M��rxRT����B��U)l3O�1��>c`�/�u�����2�?��~t+�=2��k볡6;(탎��j��֍)�dg���!S��5�U��& ���s�B蒜:�R~�a�W�'['���L��K�sb\���+
+v�j�?�����6�ժ����t{�7�.ȕ�����
 q��jk=^�,B`xh,2ltk]��jV��>�
�ȝ��")�*�K�$�h
¸���Msc#~�`r���m�W5~��ŀ^�� �#kBR=7<	f\ܷrQ�\j�+C`u��7�	�(��P�)�
[��@�ʼr&z��?�|�7
��]�0�QVQZg�4�D�!��
0D �Ё�-C�:�'ڝM��$��'A�U��z��⢚;���8�7E�D�l���w�B߀׷����<R����X=�����-��%K��e�.�.��ud�	�Y�<� ]
+
�)����
Q�������߶`܌���職t�"-:(mKq0�)�
l�^.�u�U��}�X�_��x��[>����+�e��{�rY��v�
�ڳR
:��R)I=����W��y-�e�a� :�`�	v
$9`�ub�=��
�6��PY�*9��u
�_�k���W"2Q\�H
tvV�!��w�n(�-���/�
���b/�;��t��&�?��*��
 ��}U1(�w��M�
�Z?�O��D*9X�g	G�h͙�3@`
��9]�إg}!'m@������z����Mh���Ȗ
xP�P�I[S��^��!r\_7�JEt��;�zXp�T��=�Q���4|�[����z[�G�$��Ԟ��( �|�w�g�`�W�9��H�FC0��ޘ4�)UqR��7�dK����'�7��M�i^���'�#�i�Ĺ�\k9
|_���esP+R7{���^y�C��pu���F�P�pN4��x6v�-�M�|�{{��
����;�g:�
�B�v7�H{>��C*�̹<L�=�{�����&lX��l/��`�O<�
>G�J��ԢWB�~������R�ZJ���
o��P?�u^_��E�N��/O��
y�@;����>�x�μ�.?�q�W�C��7kz'�M�[ùn)B�JҼ(�g[�塂�,����;l�v0J��N�#yx��@_���
+OMb�;ƌ L#���tS�m\g2?d���P:�=�$Y�����d��3���w�l�O7��_{��SaLa��ek�KH0е�><tڌw�jt�Lo��i*��S��(�T�Qό��0
+��m�4���r�v��v�%i�c����aN������p�~0::qމU:E����i?}�h�w����z�/��)���G	�w=p��
+�x��M��=������؁_�A:��4p��.U�X�
�t8
+�������}�l)�1�X�I!֟8�q��)}>�(K���B����c���I)v���ݬ�����C\Mœb۾á{�E�a��he�RO���#�i
+s��Pt:x"�N�6���1��:����h�|\-�O>���wi�O�C�d���o�g
JW�
E	�Pc�E5tGa�t�.N���|��<!'��R~T�8}
e�E&��e�O|w?���d�\T� Ɂ]G:<|�%�K�V��u�
I�[�����
Dh�տ�1j���
Y��Mx��|@���՗����=
���J�a��	:.��<gַ7Y���p#��Y�଱�&�C�]�s��vwu,
�����M���l���5��_u
8^Mg�%���@/���Q�H�SJIH�;c�2	W"�ĔBӛ3
+�(bbCߎ�n^2��I�Y>�h�*��'���|�.1'ā��N�)tn���Ɋ ������ۿ��lƅ-��Nsi��!Q����TrE�.ɷ;M�]dJ
�����G2y@���#,����	7X��Y��>T9�7��Iw�J��m����>�wu�>��<�8�]�� �����PN\*�pcG
+A�8+̕
��|�?
+��t �� c�Y
+endstream
+endobj
+2608 0 obj <<
+/Type /Page
+/Contents 2609 0 R
+/Resources 2607 0 R
+/MediaBox [0 0 612 792]
+/Parent 2612 0 R
+>> endobj
+2610 0 obj <<
+/D [2608 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2611 0 obj <<
+/D [2608 0 R /XYZ 86.4 701.138 null]
+>> endobj
+558 0 obj <<
+/D [2608 0 R /XYZ 86.4 452.084 null]
+>> endobj
+2607 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F8 741 0 R /F48 982 0 R /F49 983 0 R /F16 729 0 R /F38 785 0 R /F11 787 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2617 0 obj <<
+/Length 3330      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�}�W�*/Ԗ	����*g�ծ�x�΃���ő�
+E*$%�����p@�C�
'y�A7��ݧP1����6>{��4ϼf0�
8���
+ό��t�vȍ9	�>/�W���f�\���S��5����C/.޼�n��u|{�įN������^���u�!��Z�fN������?��o~
Lz7�����L�j>����gE[q�қs�da�sƭ���I-��p�^�n���\�ᆔy��jn%� t
�{�W����B����]Kƥk4�&����*��:�l&�#-��/���;Bq���C	��.�����Pc��kil*���]����qa�_Ȃ	߬˺ܬ3�'�Eѵx0���œ�1gs���;���jm���aLnX�~����p9<�pS�����M��wW��&�\-o�G��tQ�oI��H(������J�`���."���z�ھ۟_���
�E"��$bR�g��))4�6�$D�����
+>�O�Dt3�
֣D�|��e�.k���Z7��X�����'���.\������.�h�Nd�-��r2���d�ՓfW*Q���3��|
+\@�.X��%–�X#�u�~�ZM��'|+C��� -07�IUrLk޶d)ec��D��vE/�`
$����+����G&��V�}kV�00x>���q�1�j���i�����}
L��c�RHx_����
�u
�1J�y�h D�H��qWaѥ1G��#�h�4��*� ]�J�� qՎR��JׇBL�Mu�����s,�v���*���`���GXG#+:qjX�{y"��|{�sXO���bC�fS
�l>��s�;��lJ%���bG�W�x�a��>�]��@R��8���|��!CvEV�-s
��ڞd0�T�����`%���>����
+��=`+�X�V������|*JR��

gU��u�_�
f�f
������&����1Mh���
�&2��B��#B�zD�Y�itF˴�舖��L�]�1�JU�����w�
+���� �>���*'���؅,\�~������f�"/��� �|�����_<{�[.�����!X"Rk�R���1�Ա��F^wEL�ƶ��X^�G�U���>�*. 8�G�~-���I���oC��x3] ��j��)r@������뭡���
+||y�s"�<>��C����{U�yz��H�~��t��nMw���!����%�gD�Ii�a�RkV8އL��>�y؂=��}�ED�ަr���Uh�l/�`D����2�
�ޢ?ۃ\]LPnז�A7����\0,
+�5����챦7��M7Tˀ!_��Ez�قЁeh��N
N�LJ���GVUrsهXJ��ّ{�gE���(S����ݼ�s�	�D|���"��O��z�(k�q���Tx��31�m�}��b��b�n5�����r[����1�_*��%Ŝ�Kdլ�s��_V��KD�	;��6=O�窵��p	��|��]���7i�*|ҕ�
+*_k�24u��n��������O��}��3�i�C�Bj�S����6�
X�N�2�����j��	���
���L��J�lX׉�r'a�-�3�����~2��ZEZ�	�G�]�:ު�j;�ĵK�uK$W�\���U��EFd7�`��
yRh4Q�S�I�G�lO��EΤ;>M�����>J_ }
�|�
+)0�&
��gU�]T��tRr�|�:t���D��@p�>��:�S��y2�g7�c�㻆�6\��DC$�
+԰}�y͖
�3m���}�<����n�Ѫٰ�
�;�B!�ev=ji�]�B
+�v��M�a�R�`�S.u�<N���u:Z$�
Cd�
s��C��Y7
It:Z�,�|��_��BS,��1�)8�uG�
%�/��z)�It#)�ks@:�5f
��}-һz��H�߉[?����w��'3%�&5V��M
�W��NQ4Qn��/���j��	�q��y����m��\�����n!�bi���nvTK�ֻ̆����ذ�ˌi$�p�������
�"�s
+S�?�
�q2L���e,
���_l���1� 
���D ״3�BWT[r�֒ W5(�sR��pNj��J:� d��"��lou�����
.|���J}�_�g�M9�h�H��Riqj��G����3y_��󷺩&��g����e"!�ՙ
�h�f���br��������f M�]e��l�r]ƶ'�
7���]5' ����0���
��JI�F�H!iO�7D%-A]q[ӛ��AķL�}�Dd@%�a9
�ke=�D�$
9Q��Iɏ`
+�>u%xeo����j�)#ͼ�H&�im*��,R���G������h�U��U�;0��n�AC'ϴz��
L8x�T:�Nc���
Ƃ�,�C��ۑ^/����c�e�p2���IL���ƫL����jD��`�!:�����ۮ$���˴���%�9�P�R0
�r��<�
]��0�(?
N�����Dh�8��#�
^�/��S�2t�)�W��4>�Т�������ݖ��է���<�a�O��!u&�/���;�dT�X+�������1����@�lus_�j�!
+�(��/�v�, 	��q���8�R�2�#j��8����?�tI(�����|IK/g�Mu�����z=�yӪ������-�
�Q:+d
߇�RW�^M΋ۻM6� >T�O�l9��'�;�6SB&�-���Jf��8Up;�e���pB�u
��^�PE`'�#��e�I�g'Z��l7q��lk*qL%V�U�
�A�̄��^���/N��vD�]�EE�**���LVϙ�M3s@��7Cݳ�:mz�BtejV����?�\��2��E��2l*�+T:�y>TZ�2A�ۆJ��
.b�tu��gM��>�a��&lt�N��>�]��f����_ �m�v7B���i��e�3|�J�4�7F�Xn2G�ilk1�
T������Gz�y��SmN
���'%RD�=Y-

z�Y��k��8�NA:�n�8��g;4�o>�U%�o
¶��k��ʳϣU΂+$2M��3U��|�ʝN���N�@p��S�
��# � x���0�x��M�
+��Q��@�`#��z��_l�Ǡ�6'}�
i�N���h���s$����]X���K� �n��Ic!�>>�O�L�U���H�wp|����}t�Bz�0�]X�DG�J���nAzՆ2�G(W8�֓E|��1=��ȹ?�cIW�>���
+�a��tf�ԓ+z�!���5�S����O�71�6�"�vN

��_N��O~�DX��|���s�/���h���
+endstream
+endobj
+2616 0 obj <<
+/Type /Page
+/Contents 2617 0 R
+/Resources 2615 0 R
+/MediaBox [0 0 612 792]
+/Parent 2612 0 R
+/Annots [ 2613 0 R 2614 0 R ]
+>> endobj
+2613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.418 373.238 140.141 384.086]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.688 373.238 369.411 384.086]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2618 0 obj <<
+/D [2616 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2615 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F11 787 0 R /F16 729 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2624 0 obj <<
+/Length 4162      
+/Filter /FlateDecode
+>>
+stream
+xڵ[m�۶�~�B�����
�L>���\&�^�;�$�%��Z"/$e���w �$��D�'R$�����.V���"]|s񷻋/^p���*�w�F������n��9�D^^qÓ��
oDr�����������w�]P�,]�5�X��
|��\��k�X���)��,>���'�k�[/^]���)�FOgr{iU�������(6�|����%m�UyyE��&�J��.,M#������sK��ұȨ�5��
�P�����/)�S���0���
�p�o"���P�;�Z�˒r3��d(ʠ}ʧ�{�u޴u��u�l��i]g��'�ܗ�
�`
�\��$n��:�V
��ŋq�+J�h�F��ow_4��L%���o��U�yx��7U���g�uuy�L���|�V��i�6c+X�%4r�z�g3�=�0��ײږ���AWE���Į����O���Gv�=����4����n�;SZ
{¶i�=w]�4������@h��`�P��l�Ȉ���X��k�h�c�dDٹ���#A�'>=E�#�Jו�7~}��U��k>gD���a
+����k����t��r~H���V͈�3JdX����L��Q>�<�y
+���"O!`|�xyR��^�HD�W
,��"`

\ ����M,�t#���Zx�q����y��
+@	w� Z�/w|�đ\y�pE�&�=�a�(���G�+��+�7y�}^���3����x 6
{�}(IR��;�X��{p��y���K�4���
ЬD��n.��Z�$�}
����#6;��sOG�a��4-�NL�����&��Q��H�άJRk�x~U®����m]x��3�d�Sv�q�$@B&��h� \�qZ�P�B%*K􊴬���a�D����FT��*�H����W4��Fh	�f�,2m�ªt{�(��a�W�6l
+]�V*0���͛9��𑓼&���A���=��/M�

+46��I�{�\�6n��fYm</��!M�9���gx�ʈ1f��7N5�@#e�HjOr��) ����X:�mn�#�0uT(L\�P:)Z/�"��s�E�V�"��U���J�MxX�m��
$�!���ڦ�p$��R(�v
~~,��x-������l���S.�?-Z���
+�x�VVY�ye�*����$T��9&����$�~z�42�g�YF5�0j���ޡ�;��=#��ʕ��֙���%�2o�X��i�̶�4!��X�ʁ�޶�\��MK�ׅ
�(���
���݃���{` J	h�v¡" ���~o�X(�q�^�c�F5%U x�Ӣ$�
J�
�4��R:�c��
+[02�ٓ"�h
w��m��iŰ!d�
Qאּ�z$�!��s�#�J��~�:]QeHڟ:4(t:�c��'=�D���X�I���0uƀեfGj?d�ȨR@
a�2��o��Į��4c��(Pҹ�
ku�U�JŎ�

�MBs�y	�)̣�)���4��Eza:����(�á[��o)1�ewu�����������ؿ��}]�:s
�� ?�+��+>$�E���N@�>��X�)�z4�H4�J�#d;	�8�N'��;s�D�~b_�ho
+!Co�/�~��y�l��� 
�f�0�̵z���r��,����(�%�2�f�2>
y^�	���� 
�,���s���q��fS��P�c5)eH�l�
�5�Hʪ��La��em������4��!Cx�؆4If
+��uİ)c�
�ထ�V�~������\"���Z�Y
0]�L3ħ��-P������GO��c��:�^z븖`'�Qӟ�:�N�1��|I���k� ��ǀ�(�⺻.���.qw��V��2k�'A1`����0A
Q�%����x[���;�
�|r:6���~�yK~D�a�i/�]Øg�x��Aű��A6~wix���M�{�)���_}c��8��0�������a\���c
��B�j"
�͠��[Ď&+�CL1�?}<SU�
�ĔV��89���
E�
�?+�
	g�~uY�L��4Ɇ����>:;ȟ���K���9�H��A�ا�𕞋�
@���iN
�
 ����
DH	XV��n�T,gU�+:(w�Q"w���w�-�i'
�6Wfk��� �[�$���eބ�
J]�Q]F��D7�`Z��ڥ
=�����;T9 B�ЧE���֥]/���1���ڶE�7���b	���x�|Tsb�
��i3rm]w
+3��b�w%��Ww`n)��
#u�>
���g�C�#C&���1�pL
��	l�o�M �N90W�q���]�:���s�Q"���[�N
�W�Ko���(pW���v�����o���7
+��.[���V�u��m�!
)����`�u���H�I
�n!Nî5��`�{�-+�d�TI5��C����j at C���B�����?�����B����7�w�w�0۶�Vy8��y�cw��w߾|���W�����
��
���04p�e��ڻc��p��{	����TC��C$zy�^J~�QוR��^"̀]�鶌��QH�|�&qH
Ta�Z�
+�1��y���!��ö���󿋕o��I��w
�L�L���^��	K�S�@��hS�{�/��
��\����D����t̏v�O�CQ��g�B�t+
�mV8(
P>T=�cN�آ�x{�&T�
���;+ ��<���?m�I�cܴU�\�[[�w��u=�ߛ��"<~�
�&�����5��$�Y� ����ǻ�x���uxƌR�Sv���p�Ύ�
]?�x����,����B��
������އ��m;���#���
+�;��
��N���]V����|�*𜜅b�EorT&K)���jy�N�qK$"f����Q�~�
e'�`��+����}�,�d���
��\J�R�W˙��!�x!N3�<
+�Tx߀u
+B�S�k at R�]W�N	Q�|��A���V��y.�Q�Q`����R
�>�ҽ4��"��a����X��㓁�N�����m��Ok���BpY��
���Kr��^���(h���:�{x�����
�]�APP=����҈��E� �� B(��Pa� >u!|��p3�������|��/����%����
+{���e8y
U���
�ul�n;{X� ��
̏��
�0
!\��Ci<�K����R•ܵ�<�4j�i��:��/Pq6wx� ha��
+�O����u=qy<_��rS���?���_���.[-�OWQ�B��mr*�~]�u���
�Ov��;Ⱞ]��v�w�Mԃ^}�Tu*���u��K���^6�]��s_�+�h�@";�
s�
��7��N�wB
TK�a������l?�3�+n�L;X�!
Ԡ��@�S�J�5�?�^G�E���f��EY,�v��Zm�1�ꪝ
}�7�W�έ�®l��
RJbS:&�R˜tQ�'
�)�#ؑ��o Y�1���C��/@B�"���������x����4�N���籓�[��՘�Y�k]�O��-���k������K���2�b�
+ƽ���u���!a��� ��~��7��ߢ����8�r5v; �_��� S�x�p���w�h#�x��~��mU��l??��п7�
8��'`Ho�������&��!Ǜ��}���_�
���������S��u�{�[ת��=���Z��G at o��0�@���W�m���.}�����}<+� V>�3�DX��׀<��4�W�:J��v�"'�����2�?����e'��`�CF~I������+D������=P�$2��u��Ÿc]
+D|�؟=��~�73{J�}�7�����ZB=R�#>�l�e]uU�U�
+��'E��������u ���Bڔ@��L� 
M1<��Dž� ���N��IB�P�S����B��Fc�'��w���t�xL\ヱ�ዽC8l���U8o(��;
-\���N�>H��7(|���Ntq�8I�,�_��_��E��$��UYP	�
/��?}��@�Ğ���ϯ�֕V����
�_��Q)�T�X"��
��Y�X��1]�7G��߄F
6'��2�2Y�E�0�S���ߛ��݉�L��ƻ����� ꒏S
+endstream
+endobj
+2623 0 obj <<
+/Type /Page
+/Contents 2624 0 R
+/Resources 2622 0 R
+/MediaBox [0 0 612 792]
+/Parent 2612 0 R
+/Annots [ 2619 0 R ]
+>> endobj
+2619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 49.928 100.126 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2625 0 obj <<
+/D [2623 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2626 0 obj <<
+/D [2623 0 R /XYZ 86.4 531.315 null]
+>> endobj
+562 0 obj <<
+/D [2623 0 R /XYZ 86.4 284.078 null]
+>> endobj
+2622 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R /F49 983 0 R /F16 729 0 R /F38 785 0 R /F55 1066 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2630 0 obj <<
+/Length 2507      
+/Filter /FlateDecode
+>>
+stream
+x��ZK��6�ϯБJY��'�c{�Jf�����\���L�Z�������Di�V�$�l����P��_���W�����
W��D������("�EDq��I��r�XĢ�Ǵ^Wٮ��b��F�
��٤np}���Ϳs_�%�� �������Woo��wE�q��-#I�P�����p����!�Y<Z��B�0��^��*

+n�V%T+'�&.�<M�+2|Y2|�1�
Wy���4G�'�`�HJ�rK�ٻ*u�C��)�w�b�ک�r�
^׎e�_��W�(5�+��\ ��uSV�}_���㼇�TA���Ф}}�N�ש<f�ƉG���4'�`����H�8��7��&"d��$�^��p�e�T1��4AV�@MZ����)i��I��x
ok7n��eTv��S��0~L�4���=d~f��I������{[o�}�8��	DZ7'�UH$��
�!24-�X0�RQ��+��1	Y�#� X���Fx
�2IM��H$ T
�6m6%�$�gT�_���u'�$�K8s~��{�6}���<���h'pJ�z���#�4"ZӅR�%�Y.'<��Z�
�
�	֊K1�u�[*
�����X;\vP�+��]e
�!K���@�NM
´���.-�kS�<��^?�N
~���@%%(�� ��(7c�yJbٕZg[��KMAA�,,A#"�#��
YO at Q
u��#�z�
+���{�s(98[��^�KƂ2�@<�x�~��w�����{�X迹  o>9��`�`��B�c���CZ�s�W���j՛d����	��Y~s��(x3����6�S�%(5
O1
�B(�C(Y
!9��B{|�Hw�/�	�3<֓ �TF�
 ƏF��:"F����wz�
W �x����
	c�
�/������؏#��]vʗ&�
+�� �]Un�{�P{pf��f	��f ��`���
�þ� ��YiR��{Ǻi�S�!�	���hf^���p%	+Ym~��Mz|Ad�y�?C��LX9�p���Sn�ΰ*�4�vp
�qS�&G#CL����B�!.�
%�
uG11���B���l=(}~~`b
+Λ�g^
��%�;�ptb�`w��Qԙ� 
���\U�Ї�9�%壅<~��$�d���ŊA
i��ABW��q�so�HU�o�f�Fv�C�{RP8�y{T�
�
��0$)T��4����� �!��8�<���Ƿ�]3aeHh�_�r*��) �$�]���Y��[:q(x�Z�
ʺJ�&��b�S���sȘtOe~�!H}N�
�&
� �$8S/�`�!��e�k�3�#梨.7��ݗ�5�
�W%�dk2���Ɏk
+W�������+ڴ�M&]�vs��嗉�C�N�dd'
d%�4%�m�C"����g���d�Z v�°�뇟>�)�[G���+� /w`�y�
鲢q���9O��f�&��:yb�}^~�&����9�¨"��mm.�!
%B��1p)�5u�k�u��C��z��*C�؈�Iw�
�@��]������]�S�.�!.��
/�]{��_�ZZwt�U�]U~u��Dq��o���
�	�d���ݝ�O�;B�q���1�����a�S�>$.槾�3� d�!8���u�t�Y��[v
Ju�a�nK(@`,�~�ݐ�N��c��y{��i~w���,	4x�I tb�:��!�wO�ۭ3A�K�k�
T����j��vk�����D:G5d�|
��%��I�j2Tj�z�
+
{Ti5�Ҷ��9�áq�д��p(��	֘V��i�c�_\
�qt�*NV�!
mlm���d�
C��bHBM$��	E�HXI0_L߾����]���x"�����\N.2b,�IXR(��m!N$���
$��V�m�m?�
3�=����^��5�=iۡ=(�a}R����L�G�>�
��P�mcTt}�7e�ps6�B�
�� �]FdE~�y��
+���e�c�
�ƥ�9���
+Y3�
�G@��r�7�j�O�\f�v�;l�!��G�ml$�
�k��

�66H����;5����-Z
�b
��]�9�\�4��Z�F���)�#���R�j�u7)�������v��
D���1�����2h~S��PAmS��0E��n����1���s� �
+(,GB��C�7�d�ajd�JS��K�a<��Oj�u�N�l
L.�a�@ӧ?x?]e�#���
g�w�E�3
����	d���c�
=�K1*�o���p�/i/����Z��? °�3�|��F�8# ��/ ���]����%��K��
"`(SZ�E8���a����tB���iB�
N�r9�.8�{c��"ODs�p!3�
�E�.���?Y�p�1l
��,����<Y�|�P�:hyYW�w�'%a4K���N�C�9xx��Wl�Rbr��d� �E���P�U
�=�	�2x]���+��K��ߎ���q>� �.��5�&)����qP�ͪ����/���z�J�
+endstream
+endobj
+2629 0 obj <<
+/Type /Page
+/Contents 2630 0 R
+/Resources 2628 0 R
+/MediaBox [0 0 612 792]
+/Parent 2612 0 R
+/Annots [ 2620 0 R 2621 0 R 2627 0 R ]
+>> endobj
+2620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [330.574 654.314 342.529 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ex) >>
+>> endobj
+2621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [182.976 642.359 194.932 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (cite.arkode_ex) >>
+>> endobj
+2627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.908 627.55 414.631 638.398]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2631 0 obj <<
+/D [2629 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2628 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F55 1066 0 R /F16 729 0 R /F48 982 0 R /F14 1050 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2639 0 obj <<
+/Length 3991      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[w�6~�����{*�����C7M��i�i�f�
Z�m��V���ݳ�}���IN��"�0���
��F����?�.^��(�҄'��ۑI"9�<��FW��籎�ˉ0b|u�Ӎ
�����տ~�������W\0�GlČ����|>]\|�-
����Q
�Ԍ
m��HDRh��G/~
+
��q�=
ɇ�W_����<_��K��uV�6^-�75\�Y����LEF&��&E�vh�aM%)��N��ޯ꼲
7_�x�dV2J�
Mx
���k���7�����s������D�鸾�˜n͸�ܣ�]�y>s/�1��o4]-֗n�,�µ�/V��lI�y�F���5�E3�����cE�Q���
Yy&�p�}	�"��������O�U�U�ތ<G�&�4�^?d�?��N
��,�]�o��Q���aW�)��'�P\�q햢Y�2�j��gnASZP�MQ
?�0��Z9���̦$B22�+����Ц�����i]���	�~h�V �����s�
+o'�ew�8ZpZXe"��)���$VT�(�!�^N�����Rn��8���:��!|z��{mUJga��-��
�t�_c?�

t�Y�@�r֚�ҭk�x�	k{�B2��m�by`b����j]Y
�@����s,����f9��ղ��+F��	�Z�{�U��׀�0�#� bx1~�0�Kİ �i�h{�?�^��@�	�c۟޵F��l��)���<�4Δ5�3���4��m�������]�Ea\�[�'6��[
DR���N�#s�	���۪{5�K;���,��=�'��83�xA$�~�.��i�RUNM	�p�ɟe>�5n�
��v���qF`�5W��i��x���V�O�5��r3J���1:D N"�z\|��� ��uX�҇Z
�)x��0�}�/g�CN�&�
*���e�B� S$ZZ���>� 2�@�6
�$O!)�(�Y�8��O���*>}�Wu�
+�2����g
O���y�)�m��7��P�
�8��0x!���!��!�R�c
��p�g�X���J�����d��3�DE �)�s �Ia3!d(�Y>���=C�c���r�Df�� �a��y�E(����ms�Y2�r	���XP-_̣ .F 'I�r��E�
�,�{?�t��6m� J��+���FB	hN��yH��0�x��i
�L}=&"|��C[|�t��L/��
9��.Ӭʿ�[9.j��R@�ڰG/6U^��?,���UqS��)���}Кz'e`���
Ʈ�af�H�1^��V_]1�q��x�})�r�+��dZ����!��ToX���M7/3�����]�T�%ژ�6Z�X>���d$Ȋ�R'��R�rh��.��}!�%Q\��,
��›��j��V�(ٲm����>#�8h��?��ʶ����5�	��5����n�Ui�Lј��
�5CX�D�
J���
�N�|LhÑ
�:ֲ��4
��5���
L��}n/��G��hJ�Y������l�Z�9�IE��_��k��%^;ha,��� Z�P��x�e2~G�ك��$ǝ��=�H��
�
D�Q��6��h�\`k���!
��V��X��8k��f�-]�7̖Ϥ���)�bX6U��$�J�ѐ(��Ö0AB�����ɻ'��h��Y�B�^�YMj�mH
�;�ӷ�����>��]�A�Lt�<ǜ)e��[7'΄��
kӫ�3ƕ/�k����)�W!�##�V
0.��XY���AtE|�@��B08n
+!���}�错���$�
�$5 ��S0��o%1��dy]M�c�-�,V��f�9(k���M�}ЍŮ�����hvt���M���T���p�4 �]�H	�
Л���ԉ�@(�r�� z1�/-6
�
:��ּ�h/�Y�Aưf1t˦&�4 v��h;$P�a䇶1��s�I#N�;BGI'Ib�q�M�P��ۙܐ�,F�G�.��6�ڂ2�D�q�P,
�óYp7_�X!	K����
+�6/��򮾯��s���%�Jl�=_[!�6��eT����	;�cjpF��&G҆�k
{�V���w� �v ��B�7�b��e�\���ܸ��T0�pm^�Eʻ��3�[�<I���0-������� ���)�ⱇ�YVgA'��w�匦�L
+sZ�J
�yY�k��v��8!�&Ov at hX
��"6_���=E�I�ء�
���Jn�������Wx�?X���k��%�v=�+�5)�^�|��v��~���h�#���
+6�-�u�>��\�:[j����F�6�\�"K����_z��;����]��>���#Mɳ�
9�:����tu����r:��
Nz�h�����(Q����F<
MnwJ�;1~�m��HP�F�VY3,�YQ�i ��� �'��^� 9o<�e9/~���Ԗp�.���ĔT��V!�ټ
+��Q(�C
��2�MlU�-K�M����x2�
��D��o0�SxUJ����l�h���!}�򳠙i���ץ���b���lZ�|+���Y������/��������틇K��@$��n��#��LRmρxє
��ss� �COۯW�Q`�
�)OR,�"(nE�D
c��;�Q�l�2��!���,�7G$^�
ƮR%:<�?6żv)O�2:Ӽwxb_ at Ob�
�G�UY�
�,b1i�=9�R �d~���`O1��2K��r+*N���*�x��
����&���r\]Ί�A������s:�b�ޥ����p��4Ȁ�>8���;����^�>�f:����6�[�/Z��4'\�9U�iw�}7Lz+���"��ۼ��@U=M�*U�s���40ӫX]�xT���Lz oL:��@Ű�

v��m��}���i�t�)�D?6�#T0�x����
��`��n�AGUq��7�|[֥����*�&��117�|��M�ׄ�d����:���2�4���YZj���7�t�-��|������(z�
�J��h���ړ� ���9ɯ��T
7{𛜮�j[�f>up�.�ݦ
+V/�[���eÐ���{����k�MHkfmoH����Tٝ���jkhچ3�&�
��Eg2��:���E� ��9���:��蕕>�X&��M5�f:kKo�JzXϻ�we���qv [�.w�]r>�X��P۰�y/4���F�����Hks,
+\i�xKE�qa���9U:�z*��B]����P!��l��\-�
���MHKt}�S�]���oh	�̸֬MFD�eS|��jCD_�
��t�J�S���*���h+�U(T
�t�.����!S�P��br}��3E��
&��(�`'�9z����Tg7JYOu����v9�.�Gg��'t�AR���
�˃�q����4�T{�F�V7s�]��|
���Q6����;8H_�]ޤm�	m�Xs[�~��o�>m��{
�N�=����$��s�C��k
r��
۝(�g*i&ݶ�սc!z|��m��߯�����ZJ���<>��T
���q�4\�'�~Sɗ��#��t�Y�z���f�����9�;\}-%��⠦��Ь��ޑ���
!2��;2��?��zC�!��|2�
���٧�.5$v;62R]�#t�MI[We�����N���V�8r��bH���+������pʫ���lB�G�(���:����Cwg[��&B��stkb0�g+L�?�Q=�r��%�y^�T�b��?��4]ٚ�h���2k�
UԾ���M��|��M.���i}�(3|0�sE'�H�� H&���Y:L��.io��{��8
tHR��?K�_m4��>�-�8�5�^.�Ū|�2l�`�V���q [...]
�[�X)�V�W���B�22]i��C��&��N1����o���i����;���t�W�a
+`y��u��o�h{�?���I
+endstream
+endobj
+2638 0 obj <<
+/Type /Page
+/Contents 2639 0 R
+/Resources 2637 0 R
+/MediaBox [0 0 612 792]
+/Parent 2612 0 R
+/Annots [ 2634 0 R 2635 0 R 2636 0 R ]
+>> endobj
+2634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.106 289.163 523.829 300.011]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [350.583 243.28 362.539 251.693]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ida_ex) >>
+>> endobj
+2636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.097 229.174 415.819 240.022]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2640 0 obj <<
+/D [2638 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2641 0 obj <<
+/D [2638 0 R /XYZ 86.4 701.138 null]
+>> endobj
+566 0 obj <<
+/D [2638 0 R /XYZ 86.4 515.543 null]
+>> endobj
+2637 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F8 741 0 R /F48 982 0 R /F55 1066 0 R /F49 983 0 R /F16 729 0 R /F38 785 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2645 0 obj <<
+/Length 3217      
+/Filter /FlateDecode
+>>
+stream
+x��Zے��}߯�[H�a����Ȓ�.[���`�\��E�$h����szf $x���T^H\s�>�}�g���(
}s��ۛ�o�
��j�G�w�DGrd���`����13�dʹ�v�u�����ʋ�d*9.��_����_�}������o���x�]d��n��y}{��
�����(�z4[���[<���w�86=�vˑ6�Z�~���&��w
�Ik!��H�z�-���~-o�ͪ��LWt�C�1��]Vmf��*�K���cFO�����Q^�a�5��]��X��֏�k���7�i�O�0�C�0f"��Hk���dD�D�H�G
�c�R��C��&��
�6"�b������ݱ��iؗo�m�hk=�2�8���!� =B�ﶫY@���2���j����Fk at 4�j��*+�Ӫ�<<�`��g��9_��i�6�9Dod��5&{8W�"�E�f�{}�p3v2�:�?�)�I1
��X6J�a�
���)8�M"��म�N�
^-�U���UY�χS�u
c�)p�#����a��,�&�
��2K�,�"�} X>��XcN�'
�|��n5�{u3�N;�g��`�]U}h��4�2W�Gl^$0P�F*�@����ʳ3�H�t%�ٙQ�<E
���#��Mps��8�۳������igM9d�9�h�A����3�d`,B�
�����-� [...]
�p$$��@��#i����tTw_�!&����T�I
�7�Ta{�:��Nwe���lY���:],
+g03��yhJ:�
�<�U+����]�(�I��ٳj��iE]�釅���)��F��Y
���_0����K�!#y�N�� E����
5�.����\��{ faX<PЭ�[=�䑶���G�渄��.�J0I
Q{���ɬ ���lmLw
+�ƅ5,B�tD��IkN�Q�d;r�E��X�3r<BYh|����$�o�e„u�F�Q���0�<
/�X��&
+
��c����<�����(2��b�P� ��z�u����2�
poXD	���*!VtF=+$`%�e	���UW�f��A�
+�<���?t^�@��S���u�
M�l<�����\ѦV�Zռ�V��)���Tu�Z�Wm�D�[Q4�@+�ӟ�2�GN62'JG����~*MBJ)3��cR$=J��*�X����l�m6��X��
+j
_�
�r���N�{rʗJ��f���
+���(ߓ�f?��$�� �&�Q�ΰy�}
���uzP����S�D���Yf���2��4��ЬE�Mh�OU�Ψ�����td��,��ۥ`�>O{V��T��;�zh���vD	Y,�U�k1�AWT�	�c]��G0�)Xun�Rm�Uw
+���B"�L[@�T���81�U+ud�F?�j�`e�O��>O��D|�
��J�>��e�8��A�(���{ο�S{��}��vO�i��
G}�
w���A�m�:A0�A��@M�Q���$��X���m�t� ;�7�Дց)u���>��):�
��b��X&���hˬ/
 �!���"N�_��tg�=���SlV �l�%h���%\�� �/1�<$;��2Qڈ����f��
���	���&����w�����o�|�u���Լ����������o�"0�Pl$�"�"O$�E�e�^q��B�Ӫo�N�2�5O�6b���k;ۜ�*p��Y��*�/��E��l��Q�,i������_��|9�Ʉ�#~%/[�9��@�xw�u6�������ٚHŬ;򻣛M*a�ݷ��]�>� �$9b�Ba���K�d�Hҗ�Pj0��`���|��f�*����G�1]2�VU��c�dj抨��C�8ػ?�j�0Б
�~�&��g����F��
���r����OQn5�.����n�aւ�j���lԚ�̛��9�y;� 
sy��O{;��E��=�#ގ�C7�`R����h��|��s�}���l�,�l�p�n���v�����o��l��o�jSf���o��"�Z��u�d�u� v��
�� �Y�ֻo"��;7�
+�>I�ؕ=�7���e�g��2t�gy��=O��Xw�Z�*¶C�z��
��ɩ9|�i3�.(R��N+ ̂�0��'O+ ͲQZ�\/�e��R_�Vi�
�V��J?�
+�¢v}
eQ
���c��/��aTьC�Ĵ/?��'�3i)]�ʰ��3dՉ���o4��l��~�lUS�x
6�)>��=d���c��!��T�C[������ ����N�%^{wØ'��m�����z�-�%8 Y; �r@ҍ{��P��F�j�uuL�˄�
q�s���b[�l�?N�/f�^�4F��#�@๖�
+��2���dW�%H"UI�+��i$�-A��
�h!���i��ON�$�ކ�|�h�텅� ��v�.�s��A�Œ*��0�}�&Pt����Jx�v�[��i��LhKZ���5~�)%��S�����7�nY�h��C5J����Q�	�&���]�^����

���&_m��)�u�F_�ΛP�7�%0�4�B��
:��$�uZRW��aWd��;�Q!���{S\]~��z�j�du����4	㸂Jz}9}�L?:�l�-,�_8kǿ'
�h�I
+m���?@�mc@�~�
�
h�F,N
��ƈb��)���v��D8��xw
ω���u:EqA鮼�ZR�v�y(H�O��ə�
C��}�;i�)���F��gኔ��v���e�x����1N��9UJ��&]��U�C�y������y��\�\i�ޞ�i3!��lu_=��^ál���`/e{����C���h~W�IzQ{� Zr>-�R�:
䱿�N\���}�
+
��ՕfP:��;7E
�
�nkN|W��XO4��ܼ�}��� ���
[�$P�z�����Q��j����]R�o;`@� �
X|թ`AGS�
w���3�/O�r������=��޵3�T�%�װ0w�N���Gy�D�Av2��I�v��eҞ����h#驔r�jw�ڟ�κյǖe� ��W
+� �����ּ��� ��_	/}
+endstream
+endobj
+2644 0 obj <<
+/Type /Page
+/Contents 2645 0 R
+/Resources 2643 0 R
+/MediaBox [0 0 612 792]
+/Parent 2612 0 R
+>> endobj
+2646 0 obj <<
+/D [2644 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2647 0 obj <<
+/D [2644 0 R /XYZ 86.4 341.138 null]
+>> endobj
+570 0 obj <<
+/D [2644 0 R /XYZ 86.4 158.545 null]
+>> endobj
+2643 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F14 1050 0 R /F8 741 0 R /F16 729 0 R /F49 983 0 R /F38 785 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2650 0 obj <<
+/Length 1819      
+/Filter /FlateDecode
+>>
+stream
+x�͛Ms�6���<�m�Dfrp
'3�6Mk�.I��$�H�+�ɯdP�M�Y�|	���|v �N��Q���1蝾�*2�(����(UDD��8���c��>����烿��'"����W�|u�gF0
SMO>��.��z�']�$*�{?'�����M�V��#�
ap4�.{��߹$�$A'iB	"R����秄�
��N߈4x�:�
�̓|U>�/匤RVv��Ou���M��.��(�Ę�.��!)(H2I!@��8<���b~U��ڧo��&���+yy�B���<+-W�E<�O�C
_�/��읰4��n�q>.��{*[L܅���-�~�{�7'R��l:�ޛ� ��Xc߷�i
+�����הH%P؃)�d3{I�>Tt����2��iJ
U{z ����y��� �ҟl[�����N߃���DK
� SL5���w�P��K�$t	u�ڃSq
&�N6Sx/Qu/Qk/Q��h�%j��܋y/��qƈ�J��n���8pn��5`֤)�׀)��f�A��^*��e�-��̗;���ʭ<�*�
I��W0oHc0g��dC�3M8�G�IC��@%
����CUS
^�J�4>��
+ ��*f!�-A/N��o���@�4�Wy�\UOW<���Z����p�X�l2���*%���
A�z��lq���G;�I�A��)��|C��P�8�s�ȳ���|ǔQ�6S��l��4{�
,I���f��0��~__{��R�)Q	Ea�D҂��g*vb5j����h��h�C
LIC�i!HzZ�b'Z����Z	�Q&=֒N[��uE�*삊�N�w(I�H
LA0P	�hЍ�
�P��Q{P����P�piP@�)��1
+Cѓ
+;��
R#7�<b\	C`�F���h^�aHz`�bb|'���s"(,s9*0%y
T�
U����ڳ�?��*��΀�4k^�cHzX�b'X����&��Iř]p�6�

C���)v�%����ч-��]%
+���I�C�
;k^��s�aph�)f�g���V�؅���O�#�9��'՗W
b`J�-�!Hzb�b'b���3�lp�����R�yC��
+���m`}Jd����
/˜�$�ٺg0�H[l�cH:f5�.��=���0; 4M	��\������
Z����ֱ�D��D�
L1���*ϋ��K�8%<e[��o��ٺ�%,w�����e����i�m�&�̬����zV>�g�%I�ኝ����lZZS��f���e�8��,&Q2E��[(�`{�sn���j��Gg��㣈k3IQ��7�
E
+���S���� ����ӛ
�b�~�&ӛ�jZ,��?�]�j��O]c9A�:ܰG
#	E�Ԥ0I[�
`H:t5���8��-��z�1�-+�����Z�U�(w��#>#��)���e��Q�ؑ�-���-�i�##�} 
��d�~P �%ڢ: A�3
+;2�e���|��?.[����b-�����
O�ב��D��F�hjK�r=@m����2�N$�)���Cѣ
+�g�U˹��k�ˬѪ�]����]ʪ��A����H�`	�s	�
N} XҲyA�a
��g��#
2�I���l2ylյU�Ȩ5�-���<�M͡"O���)�Aߴ�@t C���ܽ
+���a��|f@�u
�M0N
+��jYT���qY��&�[K�x���
>
��$"=��'9�
�����X
�낾.���ݽ/��`�����ῇq[LN�)�Y6��(�-���Իz� �XG�|P�wM'�y�W�
�k
��������
+endstream
+endobj
+2649 0 obj <<
+/Type /Page
+/Contents 2650 0 R
+/Resources 2648 0 R
+/MediaBox [0 0 612 792]
+/Parent 2652 0 R
+>> endobj
+2651 0 obj <<
+/D [2649 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2648 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2657 0 obj <<
+/Length 3158      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�F��W�HUE0�
ljY?�I9�&Q)'��$�A�&��_�_�
�
�t���ړ�A�L?�����,�}��o���Q���]��
ə�i��]/g�����+�S��_��b[lvE�����Ww�W�w��|����/���U��|�l����/^__|�``
�X�HE�Գ����_�l��gq$�d�Ѯ[ͤH#�Q9���׋�o<

���X�"!�L�,bF�3�3c��~��L�&������	
%JY�¨��,"&�n�v�#nL�(M'[�9�R2��ga)%X�9���]�?W�q~�f�\�(6���.�d��_n�l=s-揗���Ůںg2��~]]�d�q�.Sj��M^�Ɛ"�z�&�v�U��eG��%_�?�]��maOx�v�q�g�M��ɶy4���,��82,�]1��_�,
��y���:n�g�mb��3������Yhcw80
��/�����9kߴ��ʱ��.b�ڡ��ћ�3��P0�
����
+�
o{C��r�m
X�*Tg=B��Cc9o�b}�^ge�y���51��Gl�ڋ31u~C$T:=����0�m�

��
>�����������Wc��tr
)	RG��
,��
9��T��������)�n
I�֔�q�im�&37�f,�rS�b����O��%Tb"��94H���G5x�N�#�7���	�J����+6����GK`��4��Y`u��oy�����zO�3�zzG�L �s�
�����
,�އ
o޲�څ�4�_�y߲��4}Em���<^
R����g`�9�x�Zm(����9�js	O���=�z�,vnfQ��
<����m�]�]�X�5���Ʌ�`Qۢv��

���Xq�#9�C����&p���
o~X?�g=��/ �z��w�_NOw�{��=}���e؍�(��sh	�%A=��3��Zr��‹�aP����|BQ >6��c�d;C�,���i��N��Ƨ��`6�zꄩ@t�
��2�8�t�`��9�H��צ��:�x��
��R=SP�K��
)��ʽ��X���ijPd��m�'��҆�t+Mis-��PL�i�� ���jV��Ju$夤���dc}��#3		%��p#ֳ+�4�>.��a�
ucߡ4j~׬�ͬ�cS[����`��n��+z���})�`%r�)��D ��_ n�������ޫ���/f��2�����
����K'U �c�E
�� ��mە�zM
�E��\4Q����
�
��ܸ���b��H�m �T��V��m�	�[���~��,S	�[R��s�}�0�4R��70�M� ����8�����9X��*����ܨ~��u�&�f�;y0�13pOw
����]��
+��/�����^�q �ڽ�\��7���΅����bh}LH0��t�\Te��և��C�ǖ�{jjȎ�̹5�fB�v��d�~q���6s���J}^�HV�Cn#2ۜY�E��]�w�nǵs~����1��Lf�S�=�q�(��<k�FO�3d�
a�@ε/x��(N�'�H��BY��l���U�om<��� p3�t{�܄��B��� ,�]$�ܳ
)�JSP����P1"\xOJ��\D��d�WE�A��e��P� ���)�G�Q��*^��j����6όnCJ at Y��&'�͂^�lׁ#�3����6(
�tJwY$!ddT'1*I�>�ܵatDuKٔr��J�Ȇt)���@
�a�S����іa�[�m�4#���l����h�
U�痱>|~��=���P�Q �
�o��0wu�n�b*=�+��!Y�U�>��

>�v����=�%���j/�MK ��h�NA��b�>~�LޗM�	!���-3j��閛M�E����Ru4��Y@���ή��k��ڥ\D4��nnw>�0B�U�
+
+� 
��/kv��*��=��C��W:F��.�wE�O�I�F.��;����V�
��
&��G	���`�œ�<Iĵ ���3�qǨ�PP��T(a8�Q�Ꙁ����)a8�,T�DJ��w���k[-�Ѡo
�@@p�YYZ-`|��j
�c
h��Q^��f{�-r7M �
I����zd��	�O�C>T%Rx��j;Z��r�#�$�|����i
E�Xm�%Rw�ř/�: ��m�A�
+ɜgM�$�#�  �@�~�U�6r���4K��AƑ�!L�&z��X
?�_*U�p�b
%�Q�� ��<tH�}g�6�@7^yz~���`0�9'��@� �Q}p��+��Fy�q^D5���z�fD)x�HN
S)�Jq�=�5�m���U"��w(�(}CY�{������J�'��d �Ih$f�#�
O������tw���x
 Q��:j�ڤO�
���96� ��o<
E
���w�gt/��>����{
]��X�xXgң�cZ�+�6 �
�,
�`�9�'c0�*ұ�����jns�Di�H��X��UC��R�m>��ڟ��b����P���LP,������
m�'|Զ�3/�8�ibI%�TB@�>K棆
���n�m��)�X������d���P�!�c��8�n���}��n ��S��m�|'����LZW%�=�ET�o�
 :\�'V5T���=V_T�������� �.�ͮ=C֍r��?��4h�+#�&$|
���5U+ωx ��Ԓ2�)yx|�	;�B�A���+��cQ�M�K'���X�Ѐ����i�[T�6�؅t�u$�I�))�)3lO����Țv?�6C
{� ��
h`P�`�I�-��h��2�O}�P��wv���[�µ�G��A�뮰;�\���G�������Sz5Ըr�
�9���콿/����/���U�}x<����7o��O��/w@]�WOR�ѕ��%��P�F�w���Ƚ���O�E�v�$``!{
+�q�
+
��0=$�ge~�3�|�9�	q��ĤY5"H䞂u�.$q�3�]P[G���O��́��v��7M�Yv�ŦYV���j��|,<Sa��C�:�Xl��Il��3�C&(Z��
��"����� ��74��.P��u ����^����p]$���xVA��	�S�,�=<�0
+
+"���/p�^��fS�� PK���S���
�w�[�`T�H��n1R���_S.
�jU��1��U��+R�j��S�C������
�R�
+endstream
+endobj
+2656 0 obj <<
+/Type /Page
+/Contents 2657 0 R
+/Resources 2655 0 R
+/MediaBox [0 0 612 792]
+/Parent 2652 0 R
+/Annots [ 2653 0 R 2654 0 R ]
+>> endobj
+2653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.227 418.282 142.95 429.131]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.3) >>
+>> endobj
+2654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [247.272 226.723 261.995 237.848]
+/Subtype /Link
+/A << /S /GoTo /D (table.7.2) >>
+>> endobj
+2658 0 obj <<
+/D [2656 0 R /XYZ 86.4 726.045 null]
+>> endobj
+574 0 obj <<
+/D [2656 0 R /XYZ 86.4 459.032 null]
+>> endobj
+2655 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R /F38 785 0 R /F16 729 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2661 0 obj <<
+/Length 2508      
+/Filter /FlateDecode
+>>
+stream
+x�Ŝ�r���z
+.���/���I*�عH5IU*
J�S�#�%��o�9=˜ �Ʃ,\�H���1�

H��c�ߜ���싯�]�����
o�^8�Ubq�^��t̟_(��ﺯ^_��s�E/�??�<�n
�=?nև�]�+��xh���˫��
)��K����Wߝ}uu�癀�B��a^�����o�����n��
+~�}���V�I������3�g���}F>IHX�<W
�3����
"]]�m N� E�����z����S|M/����u.�rs��
^OW1����ul�1&���"�S$��A|{��������e�T�s��n��o~�����_��6�?
R
���q�!]δ��Z0�^��XDõ�^�D��(��p�����r�Ơ <�~�g�ſ��,�|qx��W��E����~ �.�X��R�~<i�f昱,��nFZ4�?�_�Hy�*)��29��Τ�i�zZ���JZ}�ܥ�p�Il���p�>#1�#+���r�e���w�aL�JV�6�����v���F�����E`
+n�ż�Q&�է9}ҶMR/Ri�`
������a���p,�ʍ]�����}=�
�c��$�

R
���q� t� J�eB�QL(?䔱T0W��c������P�
����pku:#�@��2�4


g}�F�� ihW���CK
���Cq��J)��O�%3<A�Ǥ,�xw��z���@�g��ȱ{}�}�P����jna��k�əl�!�E����հ4J�Z��a}sr-���Z���ت%bL詔@����II��U�
�	�I��f&��N
C��@��ز{�y|�m?P��m�Ժ��d�
�-�F�kq#̔��q#̕��x4�<gB_�$jE�Y(?-�f.���
+,����i�����Ќ��LC���aV>��v�U��Yg�Nc(Q=�3C5E)�h �����`��r
�q��p��I	�+I�N��>$gx8����o�'q�9�~l����73�,yi%�&{fȣh y
$��1���
�U��@
!�'�
L
q���*Th&�]u
+��M���ew�auSZ���5
[j\�m�g6��F�@�l
�����{e

h
խ!V�0
�5
T������
�@�q�8�j��}#�
��~��q{��ٝ�hz��T���J�����ȑ�SD����I�q�0�)��{�x��≔R�
+)�h��qa���OoEJ�L�;Jc3�]
JG���gS:9�
�3;.G�(�����R�RG�(�h E� [�a�
������(�u��[�r�q(OR�
Ml'��v`)Ɩ��������� ��|s��ȼP,6�D�j�\
�~g�ꉀN�� J� m�;��j�@�NYT���QY+�d�`e�tu���&�԰{�}x|*�<3�,ɉo	�ɖ0[��`V�F.)a#�����\�S�$��B߿O�R{F܎�����
��p*�q&�޷3�DU,�$��Yv?�����B������a�
3Y���39[a�q��5[!��r��e��K4�鞅�L��Jǽ��!4�
tb;�h���K5�����U�kf�Y�R�^�=3����ō�Q�F�f
���R"5񉞒��6��T<��B���v�59�6��.oVw��
+ss�–�`k�KŚ'����y"�-<�
ת'��³�q�y�7�
Jޚ'�,&{�8W{�h7
0q*���@)m}^�vF�&�rjٽ�~,�*ff��U���[�d�
�
D���h4�(�A#
��H�
��
9\�w]��p É&䤖ݷ��vn�YrR�9�=��!i��4zr(HI�'����z቏�w�R�vp[1��gV

��$W�v^�Μō-Ɩݫ���
:7�
?#�?�=3�P4���C���h ?���o�Wēc�iH�7��C��5�>��
�[|�adٽ�>�w+�g�����8����l��5)nć�1�C�@|��׎xvLZ��K�
�C�:>�&�����ﶻ����f'�Ժ4�L���F�@z(HAc�����4ҁ/$�)Y,��m���	�ҧg�x�vθ&�[j������33�,?�w��ɞ~Zč�U-n�7�F�x�h o�爧��rP�&�
�Mr]�g��4W-�F���ۇj33͢�ږP��A����P4
�ƀE�!h��^
�9+	YZ⓰��O����S��)�:4���0r�����v�P�g��n��Ľ��d�
>
��4|(�A#
��Rw���r�x�X
*}

+���gN�};h�b^~�x8��{�z�o�y�f�I�K�L���C�@x��|�
��3_"
�N;�'C<�$%�l��L��a'�QK/�픦
vRP�ɱ�B��33�,<�	�ɞz(�E�!h
 Q4� �F:��!
b
�5�M����8�{t�]��&��f���]���ls���
�L�<Ƈ���C���h >$�
�F:�9�����/�*���
+endstream
+endobj
+2660 0 obj <<
+/Type /Page
+/Contents 2661 0 R
+/Resources 2659 0 R
+/MediaBox [0 0 612 792]
+/Parent 2652 0 R
+>> endobj
+2662 0 obj <<
+/D [2660 0 R /XYZ 86.4 726.045 null]
+>> endobj
+963 0 obj <<
+/D [2660 0 R /XYZ 216.126 561.547 null]
+>> endobj
+2659 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F41 1433 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2665 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+2664 0 obj <<
+/Type /Page
+/Contents 2665 0 R
+/Resources 2663 0 R
+/MediaBox [0 0 612 792]
+/Parent 2652 0 R
+>> endobj
+2666 0 obj <<
+/D [2664 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2663 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+2671 0 obj <<
+/Length 3051      
+/Filter /FlateDecode
+>>
+stream
+xڵZK�����-��� AtN��N9��r������#qV�)R&�
o*?>� A��f���$���n4�~@���&���U�~�����Q��2�n�76z��T����6?F�ǡ�n��F�����-�5�ě�4ʸ�u�M"�ծj���5Ph���曪)
G�][���FZ*�Z��m
�d�;�e�[�M.�Le��J�����=�W&���+��F�h芚�,X	˒XZX�n����
�:I�y�h"7�Q�{��c���DOհ�т;j'-v�(-,);
#��S4��~��O70T
�#O�u�s��r�O��7�t\�{<5ۡj�^��i��z`i�/I�w�0�7wR�<MYƢ�C�q�+�v(w�ؗc�c�4�CUY+L�U
+BWÊ>3!S9N�]!�'�J_��9�D��&��
���@F]O�}A��
+�)��f�BN�"��Ǯ,_������ˮ*�ӏ7V�{
����T���H���h����p
�m]�xzO=�����:��N�FX��t$���,ͤ��k
�O���:©UQW�A�

�C�}��$�Y�r[��o��
'��;�;F+�;�Rv`�yV�8�
ԘO��9#]�JL}�I
�"���B
�ݮ<v
4�)�B����*n��[֕۶�Ux��K���ԣ�$�5��	N6��F�A� L����w��I�v�ev�Z0P�kBlX�v���:�u'�DUߟ�L��]n����5P⤡�/]C.
+��2����F*E�ZF�8gү�^e��;z;hμ
������GO�����!�Ă�O}�ݡ�+
j'n�u�x�Q^��Dy�(�v at O�]��dlE���Oq��/N��a�L��~;޴�aj�:J at I�,\k������!��,��N<��M�ǎ��هLj��
�h��df(̷�t
=�-��wͪ����"
!c��O`�
�Q�>����/��vA�Px�gg�%��U������' ���#r�
zH�Q�w��5B�]��ZlFG�c-b��G��9�CE�)�*4��;m�zal��}�*���d�t��bG��q�h߳;/��"�Ey����__Ig.I��8� �����l�~�9��`�k��v�DS�D�
�޼{�ONf�%q&�ɉ4�8Q
��ؿ��H�A��x�D�('�
���
��F�.��
+�xE
+i���c�����G��+zM,x��7{�my�F@�ǤCί�k����t��
�E��}����/�fh�ч�A����
+����ܖǼv�E����G�kN��Z��a�Z
8�,0�s[�2��7p�B���[�p�s��*��(t-��D&��%�X~�
\kH��_V~�
+rl�����J�H�l���&\W�n38��b2*��B�&sm�g�KY^&���
+��V�I�9�H2�Cw�&!���
�
:�]g�)��K޶\��
�$��=����r�;X�(B��d�]zB�[�T�M�V`�`�jB��6���}���ѕ����܁<Yj�`a��˲���:���x�>��]�9_l���AH�cM��4V=��$ர��k2���Ζ��
oq�҉/�8
���,WT�1X�@=�5D
�e �����[Y�&���bh�)&�&
Θ<D
�*��)�iW��n�4SF�N�c�)�f� �mוN;�SRe�G�I��=����p�.���\��T���ox�f��"W2���ȞO�T6O�ԥ3�U��a�{y6�$V�#TN�HSX �`��XpM��~��^Q+w�<��*R��?�[
�C�T�#���mޞ��\�Y���@�I��Lb��^�$ H�LD��2
����-׬'����������n��U�kd��T~�[�er6��:N�	�j�D\QZ	��0����ͻ5�!��r�T�=U}9
�P@�N*@gw���$�
+z*0�C�';�7����'�8⠝���<CC��t�0Z��h��Ǵ7r�Ǯ�3ng��f[
����"�z���QH�2s�)�%0��b!�3I�D��ˑ&��
�
�5r�Ue���Xj�(sJo��U�B��e�PR@��|

W+�E2�T����m@$��In�ST}Xˤ`Sk�#Tn/a��\:��~���Xt���r�Yˏ;���+��QY��i݌�J�N�m䜛��Ef��ǧv�;������'eJ��n��U��pv��k|!�}M��,���r�}U]
���j�:*c9���

#�b(f�z� Y�fA&�7�
;�
0(*0�ݺ��}
���6@�o��ͺk�^�6[�3Pu��=����v
�c������mX
��� 
���(���a��|,N��JN>�HK19L�@5Wd�@��+��=Xt�*q���Z��l�:T
�pOXQ�q��~�ހ��:d�QA�ix�(�
�xBt��Q�|�|�P��g�/ܛB5�
p�d�J��B��2Q��}�=
+@/,
/h�=��HӔ>�S����
���U�ɭm�M
+��3�U�lnw��N�
+co��=�
����ڜ;�@"�k�F��yx�y�"J�S]߸b2�g��$�
�W\�ʃ�W�S����Q؟�����
����LzT�Lo�>G	3
���3���C��g�M�̝�c���A�g��+d.�_L��R����#�2ac�t
es��@�pC@
��{,�:Zz�� �ܕ���
��PTKb�ًЄ��
��2��7!�o���z P�ȝ��������8�C	�S�;��Ӊ1��q,�j�
�z������I|I޶����$�nBv;0��ai<8:���E4 at w7u�Ə
qk��qk�'6b7�j
+�Q8Z�-�x?�S���{n�y0�)�T��T'��Y9V
�x�q?#��N��N+��;2˾�����'���۟w�����O�򋛻4�'/u
��<�]z2ˤ���*S5��Ɍ��"
+��~�f�)�w�7ny�3Rm���)�%�	�R�|
�k8��v���k
������1A���B�$�c�u��$��Dh�#

�0'{�
	������Q��G��@����
i�� �k��
+endstream
+endobj
+2670 0 obj <<
+/Type /Page
+/Contents 2671 0 R
+/Resources 2669 0 R
+/MediaBox [0 0 612 792]
+/Parent 2652 0 R
+/Annots [ 2667 0 R ]
+>> endobj
+2667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [100.614 326.466 123.086 338.421]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+2672 0 obj <<
+/D [2670 0 R /XYZ 86.4 726.045 null]
+>> endobj
+578 0 obj <<
+/D [2670 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2669 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F14 1050 0 R /F36 740 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2676 0 obj <<
+/Length 3906      
+/Filter /FlateDecode
+>>
+stream
+x��[Y���~ׯ�#6ǘ�r9�|�*��XJ^lW
+KbwaqI u�ק/��
*mU�8
f�{���g���W���g_�y��w6�r�Vo�V1(��L��ի7�կ����ڤ�����paM��V�답�6y�k�z_�k����c�/��ۯ�w�II�.yu�_�lO�������g߾y��3
Ĥ+�-�Uta��}����j
o^�Re�zO�nW���@k�z����13qċN��έB�p�켹 �L�%0�1�.95�Ö��:9�¦K�uYl.���/LL�ZFW{|l��h�Þ;�W���50��wz,j\X��DX��0&)
'�Oc7����P��a�<$�����厼�3}��GҁoOM����U��֫��*�"�b��W.͒#�;,	�^rG���-ʩB��
w���^o�ݮ�����H���T����\����)$��>�Uo/xO���942ɶl6uu�3m���bu#i��
m'��f�_��(�/��T�)gz	eT��X���Ӽ���j��a���U�e�y����ڶ�
�g�$l�,�u��s'�F�
��纣�U��G�N�Y�;����_�X����Bá�F�j.4_2#��ޙҫ�u�u�ӡ-;�
Q/
3e�������U�P�%lY��!MW���E>�1n�`�J��
+�?|��Uy{.
� �n�,ѭ�?���Vu�iw���lʦ�H�����б�����KY��$
�`-|_�cG@�6��Jd���6Ne��4�L�C��H�Թ� >�<7�ҏt0�N?pީ~�'ߑ��yD��\W�pH)�,xH����A
[�Z�
�|g�
*��?���,0`�';�l��9�u)�t�S�b��^��6)wܛ��:����<BT�
��E��	{p{�H�!���8/�Yx)P̑	���[�8�Ķ3	����y�>S� ~+����Q�
�0J�s����0
�r���[\֥V��b]����x�b��’ƀ��'Y@G
���O�^X8�*�$
g�䩙-|���L�o���#�M�Rt
�6�5�.��T��������o.�a��皖۱��)�M��9a��0@L<���޶l�jנ/1y���`q�
+i�-� �c|���6���,ş:
���J6�*Y=�@xG�`�

+4F�0���ݞ�S���T��ϳ�sy�py��}��[~\�^�/$"�t��jT	
�z
����t3#�(�1��`O��3�w��r���j,X��N�ƭ|�Uf��X��P�CSy�x!�#�d���"�pZ�i�q�֧
�7�8P�K�9_2B��=� ��^�b�,� �;�^
�Ig�d���@���'
���
N;P����cuL��5
�����#�ٝ�+мW���o��
N�V�p_!�̅w�F�?�H���'�D�3
z{΋��
���=sKP�!�(v���s�a{u�<�hn
V�:w��s�F����t�8�r��F at b9��k�+�
+���M� C �HҢ��D4'� ѝ ���� ��7bG *�*62��H��ށ�2�4���(���&��i
�z��]���)��\n���)� 3�rS�3
���F��g�����@-f���`��	T����Њ���N�H���W�
;EI���Xw+2C��D
�͈_3�&��d/s.bk�$�w�I� ��=�>���]�]�������(�A�/�@w�md�~9v�K��;ͪQ�H�V\��:��j1��Y�6`+��`�!�>��2^�����֮b�%�Į�����h;��1 pZ�o(��%bi�D��
c��>��C
M�O�~�;mˆg*�SBn/JY�0[������f
���`fɗ��S�<
LC3X������i�>�<�d�i�[�|RiA�I�s\ns$���I:� h�"�P�;Nnh��0���QY

��80ē8LRY"� ��?B�h�iP.,���>��9
�hY�g��qv�]����k��
t�*�FY�Bm�d cbx٨�>E�
(N� "t{j!?�N�
�`������ШK,�q}pC�:�砳�Qp��*�h��]�'25�Wb�L1��P�����ɕ�TlH��1EQi0P�0�
�
��,A���|�Dׇe��-�ñ/�BHߖ�q�j �;�'� [...]
+d�G��a;@s���
 ����d�)10��F���NE���"�IUȲcS�5�
�:����Yǀ�O`���=�gA�#����f�����5��
�G��
	 ���^����
 ;0 
	q���2�L�v�S��?!-_��+
�u �@�|�%J5�V�6!�b:��Գ���eH����������|'�x
�y!emK���ond�d1ؾZ`	DH�� 
�^
+y�i\�Ǔ�y	��� �~���(�M
�5m�A��![���]�2���%x����
;øYp�4�t���(����Z�7C�{���EӰ����� �a�,Yq��1r�M��� \�
�Kh1#�Y*>:|�C��
?�Z�h%D"^��8 �d��UL*5�=d�&���J=�qѴ���wX���Meg�Ͱ�N�����Մ
�3A���z�,��qT��C�r�2�83�&F�@Fz1jq�/���m�s�<��-z0
 JJ�b1l�gx0
2�����]LJ1w8/�B��!�_Hg3:�}T6���3
�w�[7(�GI:
*
5�ǝ%���@�
:L��/]%��
+.g^��}�T��2eR��ݥƜ�
C;w��(���XB�TX͹�Bߝ(=�:�0ŧ!C�eRg��\��2d�Ǭ�S����\p> �fG�\i�\0u���D��#��j�e�*��5t�B}
�;�߁iCT,��,}�����Y�;�ݍL
�I� "H0>L
�ef����-�瓗�s��J�'0~?.չ��O�K����
O�5�a}�<`��4l��-
g��?-�1��m�X
0���2]���E����x�����~
+B���$�C��
B�GO�t8�؝t���
+V?�
.Pg
�2œ �\�Y ����ʤ朼wmy{��lڨϟ�<4����b��5�2H
����E�?@�}0ٳ:*�0��*��#�=�& ��r���i�D,	��q͏�:�#W����'�r�l|�ڜ.�����-�n��6���
�Y��|��"�M��`�0�OADWwĚ�ԍ�����	d������� �9�2��F�
�>l�0�N��z�.2e<Lw�|��'�~\�z�@���D��
��ے[�Q��}�n�A
|�/zw��M/���*��Z�
��M}���R决�E9��
L�
�)$�]�!+�
+�3/�C��uY����������|ڨ���,�
�a7`�0�k�<�C�)��.�ܝ'���G��&K��
��;�)b����H*�L�+΅ 9W
�Y at 1vy�����
����
|�U��p��;�9�D,�oB
9�p�j���@��U5����y�@�7Q�{Sh
���'I�q*��C��
8� 	��l4����ʋ�E�Г�v�μ�t
5�j�(�j0�����-T��In
9Ң
|r��'������t<�RnB���8/��������+����H���a�&GĠ��+�Y��`������;���3���I&���o
ѱ����T�����-�/��Z*b5�YO��
^~�Zخ��p��cw9�Ϙ<|�$c_�pϾ,�t}r��LݼJ�O��.�#�5����6mG�+�5�*{�%��I��\������
�X;�&wK�e����#��Ə������ţ��V�DG���
<���Q|�U�-��@'e%7�p�/�b�����N6��j|�'L�
�<�H��^;~r�wW]���'
ݤ�-t˅�l)��#�lD�d4^^�a˗ڲ��mF�e�vF�Z,�����.��
+endstream
+endobj
+2675 0 obj <<
+/Type /Page
+/Contents 2676 0 R
+/Resources 2674 0 R
+/MediaBox [0 0 612 792]
+/Parent 2652 0 R
+/Annots [ 2668 0 R 2673 0 R ]
+>> endobj
+2668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.014 675.733 493.486 687.689]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2.6) >>
+>> endobj
+2673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.15 137.82 330.873 149.775]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2677 0 obj <<
+/D [2675 0 R /XYZ 86.4 726.045 null]
+>> endobj
+582 0 obj <<
+/D [2675 0 R /XYZ 86.4 473.868 null]
+>> endobj
+2678 0 obj <<
+/D [2675 0 R /XYZ 86.4 418.944 null]
+>> endobj
+586 0 obj <<
+/D [2675 0 R /XYZ 86.4 277.717 null]
+>> endobj
+2679 0 obj <<
+/D [2675 0 R /XYZ 86.4 221.962 null]
+>> endobj
+2674 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F48 982 0 R /F38 785 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2684 0 obj <<
+/Length 3186      
+/Filter /FlateDecode
+>>
+stream
+x��ZY���~�_��Pɪ�w�0
ā��
�q�E�`G⌘H��cǓ_��>x�G�ݝ8�'
�쮮��"]ݯ��7�s��B�2�i�Wo�V�&rexF�`�7���IJ�z#R�|WޮO
+|��]_m����?�y����,j�a�������t��-]���"�ԫ�����j#�W��,]=�yǕ�pwX}w��:%5�Pʤ!��Jg�0���o�n��r65#��@ܡ-���Mg	A2 �����'e�W�Tu�n���P��`��o�<M���=v�%���!�p^��WpkLr�w�]]
��uo�⧾���$��~
�܇�P0�h,�7J�	�j�ɔ�Ů��XV~,|l	��2\�H~:5��)��Sk�����&wus
��)�=2ҽ����F2�|Y��a��K��>�As��'��m}[�զ)��Ξ��3(���A݄Hh�4x��-.��u
+_KqU֒:�B:q��g<
�p;샜��[7�
��
���Cy��7�\+���#�S?^߹kW

��EK��e&C2���;:?m��#�F�t��p]0C3"�`�_~��U2-	�r�%�<�d��0��i
rnf��r���mz,�3J�r�hs&�.X1��&n�����5��q&[.�<̃�k�H\�I�.
�D�(�R^b^�j�)�p�+w��j��a{�8�l�
�)�JY�4������I
+R�1̞���r�	��&_J2>���s�S��S�mW{.���l/p�}�xe�H+Ӡ��*�A2U~p�X7r��2T&<��=�^���D��evz�l�����v�t��b��xxX�����1�Z��ŌQCL�����)x�W�xf �0�k�bE �S^9�JR��N ��
\��Aʒ�����5I�\%�]�����	
+��DSE�QDr��L�D�MP�ي��g+�P;!����<9[�젚p6�4f>����
+t/U��J/�e��\(�fj��+�'
�69�8;�_�:]U<�|�ƛ~�bV�� ��`F��
�v�S��'m1m�]�n�>��(!��Ҕp�!ɀriW��c��8x%
�d���rҬ��6!�
+��S��!<���_ҫ��²�'_��JM5���ه�o�O`������t����D�����a��O
�Sw)���~�-���?���
+o��+R[v�
F���3��i��X���	á
T:�8 ��<[/��n�C����a�M��T�}>�o<$���3�䕻��d�4�o��^�8�Qɟ��V1���&�A��a�!(M@�}~(���2�9DX�:�)~®ߖ�}�}k�L �߳�g�,`^�B���z+����-j���ʃs� pd
+��F1���0G|��jW�@���1��9��
����k�3W�> ���K�'%L����PYfk)��
K�lN��Oz��
K)���/N�@P
���{�<;, �=��O�F�r��ŀϦ��爱�@���*�v
����
���(��R�3�Ci�!����c�#�{嶏2�Iy��Cn���7���n{�
@	�� v�Kd<���s.m��4s�!�sMR��Df���C���
r0\J2vN�#@�K!���D Rτ�@��2)`?��^�p$L�OS�HA���Bv���ڌD�����z*a$}���Yv��`�E���Ar(�
��PVE�g���*�%Rb�}ьf��Q0�����R~H�nϗ��n,y
��/�"�0w�:'G�O�p������l���8�D�L�E�t�}�YP_s
*��sͽ
��(1iCj���Z�z>�~���nR�|�*V���'���GH6
+l�wT�4q�
k��
�?�θq��H��-|���*_�����{s�
�[����œ,��ek�E+��}�E	�
B'T0�
+3��bFJLوu
�N�
#\𹲹�|Z�i�Cq�����~ox��,�%��ʗ�I��S��I�(�SߡL�L��D�t�D1&@xT-m1w�y7��C !���<�ps�L.!���@��?�L.����c�|��r�Gv��a #~���BF��;GYJ�X�"�m�L��!��
M�"٢^凃�A,ٹ�u�-��il�p�|]<t6�H�a/\'�Dѽ]������6~_�my��4|��J7���]+�u����{�=�.�L���0����X�1ֲl��x7
�lD�E
+׋���uc-|,��
�z5�G�v��:R�����F�u�����;�ʅ��|
��R�>�yW��I����o�#8�"TB)��VQ�X��Oւ�1���w+Y�‘K����%t�+�{����S�崾�E|VT�O_V�N�m5l�jg�Y�,KQ��Rm at n �0�m@\�0��6���oߩق!܆u�iJ����ᝏ�Cyj����9WČ���m�澈˂��#�=�jw
{�<�
+O^Y-ΰ�rѵɦ�$B%D�1;��0�0�Ι��;I s��y�/����0t+����0V��P��w�A�-0Ys
�Z?���ב.��`"�v|$�f��2�Is��9�D`�k鳉���1\��7@]$���v:�Ӷ.
��g���
z�'�'~���
�����߸(�!�p��
"��U�
�X��*
+K�T��{- KE}E]y`�7^
|����	��x���P��WǢۻȷk�����
������^<@�B�
+�F����C^ܺl2N��?-l��]��y�
O[�"�
�,�eZ^k�j�������0� 
PۮRǬ�H"��,��H��ֽ5��mz�y��f������L,O�m��KG=C:���3�Q�
�'�$���������7����A>���?!��g�f�'s���?B� ~Vӓ�e���0��[Ȯ�sک����t:���}�.����}:��jg݁��.P�a�����0

��f�a�{þJ�I�E�t	��5����
��� ��H�y�g�ֱ�
�;�-we�
ۺM�1�p�.xѶ���؆��eW�M�i��8ȶ�Umk����oQo��>y�	C���\SG��4>�<�.2��_2�{[.��{7�7~:
��7g۱�b�m�ECy�V<��yG��zT��gm!h`�;����x�=����e�K���6��̹+0�
��Z����W���E���,��K�8�_�t�<
+endstream
+endobj
+2683 0 obj <<
+/Type /Page
+/Contents 2684 0 R
+/Resources 2682 0 R
+/MediaBox [0 0 612 792]
+/Parent 2687 0 R
+/Annots [ 2680 0 R 2681 0 R ]
+>> endobj
+2680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.334 364.591 444.056 376.546]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.6) >>
+>> endobj
+2681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [479.58 245.442 494.303 257.397]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+2685 0 obj <<
+/D [2683 0 R /XYZ 86.4 726.045 null]
+>> endobj
+590 0 obj <<
+/D [2683 0 R /XYZ 86.4 497.305 null]
+>> endobj
+2686 0 obj <<
+/D [2683 0 R /XYZ 86.4 436.832 null]
+>> endobj
+594 0 obj <<
+/D [2683 0 R /XYZ 86.4 93.384 null]
+>> endobj
+2682 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F11 787 0 R /F10 1095 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2690 0 obj <<
+/Length 1722      
+/Filter /FlateDecode
+>>
+stream
+x��X_s�6
����9�'u�=t�ko�uk��>(6
k��L��k?}A�R$[I�K���I � ��:��o��.��*t��Ls�\n��L
ψ,��$�Sf�rũ�,}��K��OŦ���+aE���\S��r�R��ߋ��
����'ąo�^�0�ts(]��x�f�����ah����R'����G�l`�MB��lr��)2�aV&�.hT��D*��Ij��&
T�%�*��
�-	��C���c{f�X��f4Z��q��T{�2¸y��G�����'(N��`��AN4�P�W�e�*����
+��#�5#�+X	��
+
Dq�~��~��_�_��p{\���Y��D+İ �Cj&���cp��5��F{���Rz�������Ñ�c~+��p���$�{{hn `lZ�nr6y�⚪�r�ǎ��to��E�r
����C�� ��h�(Ү��}
�T7����a��������z{���1�筏m�� Y�$7���~1�"\!s�8�n��^�d%AzH6+�H�갮�7����p@ݻ�)�^�,K�e�3,-�.�
Ac?��Az����� �⩢mq��ߐ7d�6.n��ÃE�
+jЩ�b�������یi��
#�
�Ad��c3~��pCJ���(:�2pQp�yYc����v3�e�P;�����S�~��Oq�h�Ǡ���]��
+��$���	v���g�ᘄl#� �x�q���>+E��^d="�S�������{
�'\��-#Ѧ�
�p���v"$d4�֋x�
+<��K��q[�� �%�w���Z۹2�B����9�es}�;��N����g�6ӒP)�AZ��9y�iC���
+p��!o?��9k/
���$�'���߻Yr���L(	B�op�|F�1�@�_��z���\�j�#6���6�^���p=y}W
žg

Y�#�S߼�lR���lJ�9�l�A
��k2���p~V4k�� l){�W��ҽ/6���T9�	1	�u}�M��Iàv�T�)�(:1�
β#�b
�d/������۩<,��s�I��Ԑk�$���N��s���WPU �t��HW\�vy7Iy��FP�w5R�������s�Bs��㐤w�nqkpp
�)��O�TYT���bב�e;���$��c��eYLo��Pnp~��sb�4qu皸t����@��=�U��ƞ
L�

K`M3�.������j�I�f}(s�q��{��Oxh��0g
+/&‹�
#�u��B�_�;4
 gW��O�[E��孥�Z%#�.i7�7��>����&�>`�EBj��9ؙ����X
+��+�"����F�@�C��;�' �P-�H
+��A#
{���!�L��+n�
S�To�
+,��
nUn�
3Pq_
-� ��紾�F��7��P��}%D��*6��>��c�=J��5��A����_o�'7���Dzo��N4�"�M.{n�;N�x�]��c�.�4��l{��<��g$�
4
oX[c��iW��C���pר�&�!��UC�I�0�.K䣭sٜ�q52�`$��Gij�C��1�&���Y�)����pC�t���0�<��Hl�V�a�a�vm�=��0��O�8Tu��5u,��=�;����;w��B
:�0r,���4���N�Ƃ�9n��������x$Vu."��_K��L��2}�†!~�8��ǯ��U����Z��]4U_}ϵ��_<���
+endstream
+endobj
+2689 0 obj <<
+/Type /Page
+/Contents 2690 0 R
+/Resources 2688 0 R
+/MediaBox [0 0 612 792]
+/Parent 2687 0 R
+>> endobj
+2691 0 obj <<
+/D [2689 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2692 0 obj <<
+/D [2689 0 R /XYZ 86.4 701.138 null]
+>> endobj
+598 0 obj <<
+/D [2689 0 R /XYZ 86.4 497.973 null]
+>> endobj
+2693 0 obj <<
+/D [2689 0 R /XYZ 86.4 444.555 null]
+>> endobj
+2688 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2701 0 obj <<
+/Length 2358      
+/Filter /FlateDecode
+>>
+stream
+xڽY[s�6~���#5� ��Ӧ�d�M;��}J� K��
%*$�K��
H�-�3I
lB����p w
�xy%�����/t�H�Ȳ�.�oy&�"S��f����m���w�Y���I�|w�
�1��N��X�B�J�a_�?���W�.��˛����*�]a;\���<���=�SI�
;�ֵ�����������
Ӓ/
+Qdi)�J�2��3.�y�ݗ-����%��v�T�@���|Z�yx�&�림Y�Ʈ�g �-.E&p8��k��	�O�:�
�vmO����[ c
+H�=+h
6a3��*;�Q'
(G2��a�)}՞
�(ኢ�����9��?ݗ,
R�J煰�.VJ����	T��-~�9rI�!G.�J�2��8ѷ<�m �ν_� �/�M�]h���	S���mC�e�d�,	%t7Ӊ�z�?�nݕu���x̟В"�3�+�02}\z�~�D"5)['m���w����u"H�ʈ˜8?Z��} r��G�h�l��
*�V�VJ�T�'��
+Y
\E��5w~W���$Y��P�M�u�eU��5K�67�1ֈ̹~{�͂�ΐ������hoPܝm.O�{r�{-�hả�7e�`�ƨ�
�jK����Z���}S�ң[��ۺ�F>
���b:��hG�?��0p����Q� �2�g�d�i<z`��3jC�� 8��wM�&��
������6<��d.t1R�/��O�PV��o���IG��4i׾
+��=��E��}%d3�-��W�)��o�qߏ�K��a���JXs��$ P�
,z�8�
&�N�m������(
bK1�l|�ㄮ9��C�>�Yܴ���緃�ϙ��O�%s��H,�_Oy#������+�rw��'��y�Q,2G�m"� IT��d&�1
���I�S*w��j��
����T	��nvm8��N�Ժ�t�[�fS�
�ȑ3l�G�s|�M�ζ&ۆ�>�j��a]���[�̛�pw�?♃��~$�/q)��ŀ~������8R�$"��H��U�|�ȶ���c�i<
�&���X�:��WS����=�<�8Q�
�ӹC)j�F�t�Q��ߤ9������s��	DQ�"�uGH�kg
Z�)��^�4~�E�C�6�C� �!� ����o5�9��
MR�@n&�Xm@
5���ͳi�<�|��+?h�F�g�$�B3JNC'PP��#�ݨ��K�%���M��[��[�����xG�!�
����a.%�6��M����lׇ���vD���r��ἰ�2 at 0�@^?���H�S$o���'�j���A鸆4��ü�[OQ
o��G��v<Rv���$M�P [...]
pߝ��f"��$.
�;�&x��
�P�h��)
']�Ba��`������ZX9'4��K���j��k�8g��t��O��
��c at zW
�H=#�
L.#J�����v�mf%`��<)L������nDz�F�}/}�ӛH<
��>�.�l���� ���n� ����I�'9����añ��}C�DqH����fu��������IR��Տ/�t�&Z�_��{TF����&ՑM}��)c�>�~'I]������Ԓz)A7"07	B/��G�EN���ַ5FȴpI*���
w ���C;_UTfBV�F�����oC�M,��w�;DՏ��)��Au3���ڸ�Ҋ���
�h��Ֆ��H)�
��$��"�1L�����Õ��MY'�����������wr���_ "�|�nZ(���Z����_&&:�7�vB�]��b�ʬL�#�72Ū����ĺ2�9�\rTĒ\��9�e3#E��'�h ŤC�	YZ�xB΍���0�e����}njܑ��z�l��!��·|M�=�aO�^:-2�MUh�zLU�Jݱ��	���7�
>̖��=3V�y��KtI�cv>��
>i�t�l��}
��t���)����ջ��x�ssWE.�S�� �Iwn
'�
-�G�$p�
�$ӗ��t�����}�En�-,E�H�8����������A�`����a
U��>�
+���j
��+ Syn
A\)4�
�����@ٓ@��rc�ل
M����,�b&�Y�'�<��$��+_:Ƀ�a�����l�G����MSbh�}�
I�r��,��ʿ`+
�
8���������K\S����?(3����6=�a�����.�'9��O�{�
Fy!�P�<$b�?5��X�	bx
+�K�����
+endstream
+endobj
+2700 0 obj <<
+/Type /Page
+/Contents 2701 0 R
+/Resources 2699 0 R
+/MediaBox [0 0 612 792]
+/Parent 2687 0 R
+/Annots [ 2694 0 R 2695 0 R 2696 0 R 2697 0 R 2698 0 R ]
+>> endobj
+2694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [434.163 261.844 441.137 270.257]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+2695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [445.232 261.844 457.188 270.257]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+2696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [516.855 242.069 523.829 250.482]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+2697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [110.31 230.114 122.265 238.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+2698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [126.361 230.114 138.316 238.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+2702 0 obj <<
+/D [2700 0 R /XYZ 86.4 726.045 null]
+>> endobj
+602 0 obj <<
+/D [2700 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2699 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F49 983 0 R /F14 1050 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2705 0 obj <<
+/Length 2639      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o�8~ϯ0�/�`͊wj��6�nm�ۤ� ���"3������`���CR�d˱�x�4/	-Q�<����F������?q5JH��]ߎ�"b�YB�����׈�x<�B

��
[��x�
�>�"z�/lZ��We�y�Yd��7�|	-�
�����/��.�/^���v������3
+3�G���$F�Q6?���x4�7?�b�3����G�'�A�]���,�jf�S	%T+���z���r�3�<�-+ߘمS
��tU�
=V�MWv���|�,B����13�C� ]���2��e���rn�ŘFŃ�5�uV�7�	ӑ��
���f�d��@�	�$�A�/8��oxd�.C�> �ߧ+�juo|�K^�m��x��k�0�E�]x������*E�����lV.f9��U�
+�5���9�Y9Ga7�‹�*'�r(�s���
�>@!���O���J%q�k�NZԾc7,�$���0z�8i
�;p3*�
U$
i�!��V�2�1BU۩h����5�O�w܌� \(�_N�Dk=��"B�M��LF�hO�et	��C'��
[�8��8�Χ�WS�֫�ׯ.�w'
+
`���ҕ��
SQ� ��e�����s�!IMkh�b;r
+���C��3?Jk%ho��y�iP���y�T�.����p���
�m`�,6�$�p��
1#X;ϺKe�g��[jtӻ�r�3x"h�h?�
�p�����C�l�
�.��$dh"
�2�Iz��\��ԽMg6��ƹ
=-cgI
+N`�
����ah���c��M�"_d�zf_��VcH��j�

�
+A+	�y?�B�

�>���D�汵�
+٬5n��
M�rDQ2NB�瀇+r? >�]�oBcWEbc�B���p����dL��V�uH�������hE��2!Z�xDI)�ȫ�����
+:#9�
:�Sh� j}
�@�*@a�a'�&��*y
+83.{
+ 9���
+� 
�:p�L l
LB|;�����c�文���o������
3�I�
3�0��w�#�(|
k�)�|h��Y�=���*�`�S��Y�T8&��$��Sh�9��}


(0a�`8}&�y�v�x���
�U�D� ��e80����
�n�m���w~�,�Ow�!�3�,&J�Ex�Ix��#P�f�����`DO
����fp���-��'q�� �;�h��ߍ�@�������<��
�eX��IK����	Th�����?
g)O� D&�'�+����(�}
�a�ET�T�r\�'���;�6��]V!5l��>�^�}1��ϰz��XG�c�S 	�K�;�wC����m�p�
  �D��Q�D�:�Z�b�V<��ޑ3T����<�X,t��`���`印K
'
�����[���8kiQ�1�L4!\�#�h��4���M���y�
+�
W�
�
��W^�´� @>�y"W��5��A�S at W����b�/��CWj��.�8�]]
���{u�L
Q�$-���ygC��m���i���8�!3mw�q��0��G�;y��/��D
�wd��Wޗ��� K��|��%���6��9�M2�ȁM`W�se���g-5	.�Ɖ�YH���^��� ��%N0.xMb����o.�.>\zPoq
+�Vϳ  �'1H�u8����|����=lk����f%�?NOM 
+��4��\O/ϧ�C|�B
�S��P�R���,�+/8D"{:�E at -���i �����)a�*��¿n΀kj\�Ђ��PmN���/�����B�g��(
�@I\�`�t5
�
+L�N1f��� �c��^N?^��
�
���+D
����u��N$mQ@��h�[�X�b�jz��Q{7H{
ÆE?sK�`�ĉ��
ؑ�� 9;5*��JwV���3Z�Y�����=g�[�ߝ��#
:����Z���CD'-�)�¦�aq
+ H�A��jϦ���jm�����i~w.��-O��������
D�����Բì�&5�<f_�#�➅�@;�Q���F��.�N��0}�0�v^��
kg�& i�#bO�y��Jp�i
�����Cs�6R认W�
�[
��-�*|��6��Kf�Ւ��5���
�1���ˈX)�����r��a$^`�}�^����#��Ý
���#���C{x��?�҅�a���~]Ui�q[�s�b�e��u
ˏ_v����\����9��%d�,$2,i�l��;�9n���fS�֬�җ�� \��˴JW�9p���*���j�;����]s t!��`n۹��fɚ1���޼�ܽs�0��-���S��������N�����K��K���O�.�Ţ]4�
+Vb6ſ��
S�%W5bx3�<�|�k�(j���@��5 "�-������k�i�5��U��V�*X��w㦳#�%������ $`�51[I�bN
����>���\��m;z~o�{0���P��dF�Y�~�Q �6�Tv�!��</
��jz�[�M8�*\ȁ�z*���ۿ�Ht?�tF��Y�6��"�@9/�n�%���}�����Ѕȁ��,�+t�>�gql���=R[���0KW�2���jP�YY�/��u�E�
ݼ?_�
+ �� ���L
+endstream
+endobj
+2704 0 obj <<
+/Type /Page
+/Contents 2705 0 R
+/Resources 2703 0 R
+/MediaBox [0 0 612 792]
+/Parent 2687 0 R
+>> endobj
+2706 0 obj <<
+/D [2704 0 R /XYZ 86.4 726.045 null]
+>> endobj
+606 0 obj <<
+/D [2704 0 R /XYZ 86.4 650.819 null]
+>> endobj
+610 0 obj <<
+/D [2704 0 R /XYZ 86.4 244.583 null]
+>> endobj
+2703 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F49 983 0 R /F38 785 0 R /F14 1050 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2711 0 obj <<
+/Length 3101      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s��~ׯ�#Y����&�q�v&�X������$�$���e����gq%�R��/�r�=����'�>����˳��);q�Yi'�7��2=��cV���rr5uL��*V�˻z���4���*���*��u67BL߼����&�%=���7���&E,f�.9{{y��� "�DT�k;Y�Ϯ>����2�L�x��[O�rL�h5�p��3�>D�?�u������`� r���p �w�}pe�q,�_X��mx�����z�/c�s\:�K�@N�t�~�
L��hZ�οq���rK��7=Y�ٖ�nQn$EX-���M�Z�3��&Ĕ˥�^�eZ����
��c��uR�<�dn#Ҙ̅`�yj�Ra�����a�b��
ެ��a�}FiqU=�I�%��ɑ@��װA4M����
��yŨ���˹���@��,���-g�}H+\���mjdĸs5�SYfu}�/����|OQ���
+1�^p����Pq��^G;;
+kXd�J����1�QG5u�q��+F�%x�b)�a�Yѻ�G�$��L�0��ڻ�����Ĵ�����Z��D;t(��H1��)Z�vפ�=R�j��
��V&J�W�l=�CҸ
1�4Yf�[�bx�-�7t�4�i KNՖQm
+`�ۛi&uK��
���k��Wäj)�u1�EJw��L�d�%���G�mP@%�FO˜�&���[T�|�
��"@]����:pr
��Շ+�dU>=
�6LؚD�"K��_�rCJ�"�S��v(�D�q�t1h�涼�1j(^����_Џ��H<��_o�C���
�
��X
+`�֞���0�첢��z�{����l|��t�Z}?��h6��
.
��]�߁���q�}������}�D�Ij�
���
�+I�y
��|~��h|@��k�2
X�c`���}0cj�~�
��,@���J��z�_L�	
+N�f�n��(�4��u0Nf>ȃ���C�n=����
l�k���
-
7�⟮����U�i
�b����:*pp�1TV��6
)��������w�
Zo��I�iYsw���4�� �~�����wF��Ŷ�?
�mSY?~�m
W '�`���l���/B���kdm�h�q�NGQHz�>�wQČr�
�_�^���&�!��z
� �m|� �Y+ڀ�� x.>%I�E'�
@;
 :��q��G�։�?���#<!�;@2@���s�-3�J��
AϺ#�'�9�!hxػ�t�
`�\Dpr���]��
s(k�hDu���O�"������
[������Pf[I��d��,�`�Q���G>k6���l���8�1EL}2����AP\T�,��mH>������?�%���Ӹ~�UB�/��H�!痌k�U1<�! ��n�L�ՓOi��B��w��
�&)}��Od�
C	`���
+�q\�t8�tn�� r�b�
O-DbT
�3a-��Y=ш�
�jaD�e�u
�x�i0
%&0���,GK���
+q�T!N/Uh��C�	�
+\HUEA_�۷�^�
+I�<�P��s
+#e���
+�W�Cḙ��w\�G]��S\�x�ĴB���5��nL�93��1h�����]�����=f����p� @>�|U��
�Q[����%��!��t�N,�

�.^*"�
S��D��߈EB�Z9*0!��KH�c��$����Jg��{
<� 05���}����v΀�W~%���X�m���b��HnѳZ�7�ʁ�[z1��5>�6G�t�0$��I�&#ˢ��6��d�X
Ot�6�#Hx4�#��T�a�m�s"g�H�t��CF��B��E�+�MJ
���x_��&a�H�l��h�&Y�\��!S��_�t#y�s��ڂƯ]�Xx���~�"K6��U^�����s��kS�x��ލ
�`DO�ʝO�?Ϩ�3Ɇi�#���t^;�TG�4�^g��	5�!���rL�sq~�W��݅�8_
���\5����v��$�E���
uK9}H�2KV�O晛�Fݢl��
���&60E
 "�0���K���D�3~)L
�O1�n����Nv���
���.����
�n���.ERV]MJ�`�z��	�h�j;
ᰶ�C
6f��Cj��L�E
4����v��F���]����\�r��7�|�
��]��3��H�
�hj���
Y5]_3D�����*�ouJ��Nmw̅S�ǮkL#U@޴�|�-����^,T{�UdT,�y����xH)��
+_��:v�o�j at 7��!L܄���	4����t�O�؀�

�
t���i��1��ࡳ��ףy�Hq8gp^��c֒nw�'�OU^�i�V/�8Ѵ�*���4�VV-N���-R�" Foj��{9&�h�
{ ������k0�mK��x�y��#�CT��ԕɦ"^�S��y
�=U�J�I��@�s„��n�]��mTq*�� U�>�v�l�3{�[‡��,��h�@V�A��/C���������.tzu��	�`u/���Ɯ�6��7ap���\��;ژ�c؈f�Q'���l����u���	߽���z9TUa�w�w��
W�
����.������������;}���������Ba
�L�T���ze�Dӹ0HU$��
� 9x��8�=$\*���
; �GMaȚ$��E\� ��t�G�R�V �5� ��Aw����ڂi�Hm��R�-���#�8�H>X�QL6�6$&��xx�^�=�B��JQ��> [...]
+endstream
+endobj
+2710 0 obj <<
+/Type /Page
+/Contents 2711 0 R
+/Resources 2709 0 R
+/MediaBox [0 0 612 792]
+/Parent 2687 0 R
+/Annots [ 2707 0 R ]
+>> endobj
+2707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.087 452.478 464.81 464.433]
+/Subtype /Link
+/A << /S /GoTo /D (figure.9.1) >>
+>> endobj
+2712 0 obj <<
+/D [2710 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2709 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F14 1050 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2715 0 obj <<
+/Length 834       
+/Filter /FlateDecode
+>>
+stream
+xڍU�r�:��+�������ˊ��Tq3�����LL���![{�CX��n
�N�)�"�n��Urq-4��j��j��&��-Z��'�
O3&s)�Mٖ}Q��0
JgH��jˢ��]�#
�q��k���qז�s�C�T�q���Wo^��M���&�V���Af�)E���I>}�h
���a
���Ia	�F�ɇ�ƛM�ƤD�B
w`�J�Q4��m�vŅ�7M��:��0�2��
Az.�)��j´
T^W�]�X�sl	�'͔`��*�}ф�n��!�
c��8�t}0�0��\�)ƾ�y��r��0���ky�"7�X�!��z��C�q�`D>EH;W�u�/A
+N�S�s0C�Q���}���qv��\N��c�<�`�(;G|��/�0J��'0�1�5
�.e��D�y
c�
+�fx�f��Y��z�e���k��Ƈ����]�%�.?層��x��>��z���u�@E�B:,�D�|:��-P"�����)�%RP�
+l�x�RT�/�x����ᓯS�
+ at W2x�w�;��a6WE0E�V�V徫wM����r��b��Q��
()�+��1�k\"w����k�wM��4
�E�Y����V�H�t�GA��©A�܇��g��B
+
+��GR=��\����;PB
RQ,��.8�9B
���<k�:�_�\Ŋ�˶�%�IC�=��]�z����ߔ���)�fA��U6۾|�
+*��R�1 �b�k�0z����?���v������q�
�>�����;�k
���R��f2/��7����ϯ�O�W���n��2a9a<�\鰡r��ķ��>;����)S�
+endstream
+endobj
+2714 0 obj <<
+/Type /Page
+/Contents 2715 0 R
+/Resources 2713 0 R
+/MediaBox [0 0 612 792]
+/Parent 2687 0 R
+>> endobj
+2708 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bandmat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 2717 0 R
+/BBox [0 0 473 537]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 2718 0 R
+>>/Font << /R8 2719 0 R>>
+>>
+/Length 2720 0 R
+/Filter /FlateDecode
+>>
+stream
+x��Z�n
���W�.�^������@��D�
I
����F�0����U��]5�f�!%��w��3��3�O�9�������}�2��l��m��_���l��S����O&�>�t���R Jw� �P�
+Q �\�C�Eq :致P��o���8c�8ca� 	�� 8�B8�ę�ƙ
�I�DA���8�8��*�I�$�4'�b��i��3N�Nt��N�Zg��W����TVEze�G<*�rk4��0�(M�䀡G
+C�'�j���.���l�xD8ɮ@�/ae����2�#��xe�\�����X�L�Ger\��W��.L�g<Ϝb21��R��qs��S˩�5�C3���l���`�ZO��)�|�bc���
����]u�5��H��\z]�!����S'޻��o�y@P�[E���M��.��A�ԮV�ApFu��;���`8	�H�x%ϴA��E^Dm�����5�ED����I��H�j�Q�0�E̼�H;;��."�+V��l ((�
,�;�Ti���r��u�n+f�E׶�p����ĩ'��J�F2⡺(��<$���(�"ϼ !&2�v�i-L5�1ҪJ	p�
��w[���Ƒ8�CM�bAN�pb][h����(�"	ϼ�Y+ײ�z-�2�2�b-����H%�εl�^��ϵL�X��� �Z�TWlFϳA��Yt�Iс�at����p"ș��,:p��\���.���C*��^wR�L 
+{.��B1���f��ic&���]�f���
�:
3T�4����l����O�:��y�ux�~�B�B@�Ck0��%S|&���<1E%R�Q����Lʬ��f�����.7���ø��
�7�ۅ���
�|H$?�\ nD�4�
\@KN��F��鈏s�ɜ�
�
�-A �Yg��>҈,gj�2O�Q�b�e��,���
am���
?U��d��Q�W���M�d�;��A�Z�������5$��!��

�vY;��
+Ӡ�n�
{G�(��!V����hT��ULGtl����U��5�fOi��e+� $� ]t3n0MN��t�+ɶT��Ȧ��p��7i�]>j��
���]_���B|�!(|�� ]L
� /�
r�ZM��)��.4�jH����ɦBqv�q4u ����
�T�E0B��LQ��h�����R�ME��� t15Ы-��Yn�p�
����{ƴ�'���iu�V!;�<
�-*V2Wm5++T�����Š��Kk�+k^�u�;�:�9whs��VfW�֯0[�Œw�K�Ya��n��J_Q�M��lm�� �X�'��F�����k�;H��s��
ĉ~�b
����s冰���U��׸]�y�K(
+���������c��N����p~��

��"X�_�dY�`�`��f9U5.a����K3�%�������̫�,���fNKbf�K��
��(Ғ�5QK��4
��������fI������۷/�t��}��m	›�j����v��������a���o��������{�~{�S�y�~{}����p}�j�W��}}w�����
�\�Y7փ�[�;�~}c�sW�&���4d[ߞ�[ߘ
5_��P�qq�c�ط�� �
�`��/.b~�A�5 %����n�ߜǑRߏ��������%�m��zh|a��Oh��8�����߽��o����9�c޺�}4��{�uS��0�m|���m�f����ڱ���B�����B{�p�����+tG)3�+��e�5f�O\�I�Ѱ��C�L����xP�,��$��Ǝ‰�WY�8Ӏ�SH��P,'��]8�V�$Npt(I��wr���d'��jړa�A8�p8�+���4��1� 	��ᝠ�j��|�0�t�k��5N�'H'9 �te�4E�4�q�$p���/'����a��n�����pZ˫$��
 �SHqsY�W����@8�ѡ�Ud�Z�O���4iog-�32� I��i甮L���X��L;Hgf�9e����a҇�� _���5�D��Q��"��;ؙBJ��2M.
��

%��B��@�k�硧sNg	n�,>+��{���I��)�7q��qF˵�U8�AP��I��t>m�b:ˤ�M{�L;Hgf�G
+)��z��ګ��ګ��uu>m�c:�_���p�X�K4Hgw��d�6eN���	f�k�4qvo�6E�x:�8L1��M�A���{�
�*�������ƙ,�JV�L���$pF���I��Y�z���A�$�2hW7ѹ��;�
3�Y��|�L�������'
�^��t
���P�k6e��?�V�����/�
+oU/�y�/~b`U
+endstream
+endobj
+2717 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160529-07'00')
+/ModDate (D:20151010160529-07'00')
+/Title (bandmat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+2718 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+2719 0 obj
+<<
+/BaseFont /QDOSHK#2BTimes-Roman
+/FontDescriptor 2721 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 0 333 333 0 564 250 564 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 667 0 0 0 0 0 0 0 0 0 0 889 722 0 0 0 0 0 0 0 0 0 0 0 0 333 0 333 0 0 0 444 0 0 500 444 0 0 0 278 278 0 278 778 500 0 500 0 0 389 278 500 0 0 0 500 444]
+/Encoding 2722 0 R
+/Subtype /Type1
+>>
+endobj
+2720 0 obj
+2333
+endobj
+2721 0 obj
+<<
+/Type /FontDescriptor
+/FontName /QDOSHK#2BTimes-Roman
+/FontBBox [ -70 -218 863 683]
+/Flags 4
+/Ascent 683
+/CapHeight 683
+/Descent -218
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/B/M/N/a/bracketleft/bracketright/comma/d/e/i/j/l/m/minus/n/one/p/parenleft/parenright/plus/s/space/t/u/y/z/zero)
+/FontFile3 2723 0 R
+>>
+endobj
+2722 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus]
+>>
+endobj
+2723 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2797
+>>
+stream
+x�m�yTSW
�_
�}P�-i�%Im뾠���.�S+RE@-�DHH� �IX�r!����"�"HQi�(��im�Z�E��N��i=��2ϙg���9��޻��~������{����`FKd���QrYr��}
��A-]@-c�ř�_�;Xˈ�&�BȄ�~-K��	F��EmO��g&���w���lI�X)\ut�ڵ�~��i۶m���F�{D9��L�
+�!O$�+d�L�k�pz�T*9)L���
arj�(շ,6Y*��H%
+�<O�*|�psh���mk�D���#|�0R�M!���J���� ���2w+r���ꃚ�H�$]*�Z�:a���b9�6�q��&b�Xb7Ol ���Fb�q�8HD
Ÿ�$��D ��x�x�&��	?BD�eh�8 ��/����^e��W�K�߃c���G�'+I������9����ޤʂ���ōP�{��f�;�&��6�R/�g����xE�6���B�� !��UWY_��#r�G��)�YPσٚ��
+R�j��9��.D�.VU����gўYf��[]��B�ˡ�`
�QF}\)�Cb7����� ���ąֺ>H^l��`��1ߤT7��*��I�?&^�uB�9�g��������� �Fج�

����2?z�Nz�w
��V�Ys��"���`+#9�*�
�o�
��z.�	8�>'�u*��j�t�8�[H����=4��m�»���w܇p�<���_��<��䥞Tf�S��C2^���?:����cs�L'l~=6q����e��&5��z����wfQ�\�젖q
;t@��n:.�x�h<TBrVh�p�i;-�Z�!�6���v�yH���z	=���5G�c_�kL����5;�=W�o_܁Ǐ�~<j��D�L�
j���|���ig
�
��-EKYFvyyaqEE)�@��XErkrsmYK�GŅ�=� A0�>�ߘ���
y�D�jU��:
+�
WI-u��N�����/o��o,��,mZ��GS�^��{{P����
���;w�k�j�ds?�1MR���.d�gC8P
��|��lgEe	������$�NJЖ����b�bXf)�,'9����g��'������>��6/[cʅ�S���,�<��M�7MEy�W����f�>�K#�s�kf�0֎
�Ox3��i���:<F� �f�ިȕ� ���^�iD_�z0QV��'H\�O�}>t����?:�
+�[�%�`��z^u�t5j�Z�
|�k��!�
T�
W�/0� �,��� N��u�I͇ �~W|�ғ����i�UTU�厊h';{[�]�̌�G�ᠦ(I�����t�1�8=6�29�縎V5�,�-u����5Jͅy9zya
$���Q�
�k#�h��K��Yj�à�4m�D��m(ԖV��
��n
PuI}�
��`��>j%�8EN�6k4��+U�e]�Ҡ�u��L�����Xh5U�������������7'����
�:Wo����������@�1����
+�)w��a��f���5��U�zx��誽�rݮ&�q�Y�V���,
�bev���� _ԫ�J�u��
��
�BR+�Ϳ˪�����0�W���f:V�5hxz��0���F��j��
�p ������N����W�t�B�K�I�@t1:�P�,=4q��IVPW��2H�љD}����t@�ӂK5���Ô"��@ԫ�=I�0
/���ق\���/8 �����lS&$â����]<
+����S����/�(#�j�s��U﬷
�hB*0\V_�.��
i� ���\J��;T�QX_t�89p���R�qQ�42_�~�2{dP�P7aGR���3�����ʧI4�.��ԝ�+<�r
���"���
��F��V�~�"���=��[{�hN�v�k
I�<�O�<h��{�^���7N%q��h���VguY
����&
+��p�q�O
Ln����	?#
*�qJ�\ު��nk��R�e
+h�8������O��
�P'���CJ�ᐚޙ*���8!�͡I�?
��lc~�I_��:h�kZ�mz��Na�&7��}���]�\��%λ�}B7���f/�[ͮ��Y��u��~�`��a��7�A���	? �A���Fdڧ�嫙Ʊl�17�"|���LWe�O3O;�	\�;RA��v�X���%� ������6�8 ɱV�^�x�h���R�A�E�o��
+��5�C�j�"L��h
.*:\LO��A�Uf54��<�P@��7�e
�᫯J:c`"���"�;��Ʃh���Pe���aL�1ф7��+A�u�Ğ-��C�Z��K#	�s'3����|@q'��.������F׍��Ϧ�
4�3
�
Rpg�-�����9�0�˽=�szh��7?C��s�
��(e"��ho�v���Nq���7kw���C�"R
!K
?L'�
��::��e�I
���N�6�[�����}N{|
��ma�>	
�a �
Y�Y.��Gr��A
+$��r��Ϧ�ģ�5��
�$}�����0
����g��(%|NKF�j��n�T�9IV;��%5�%E�S1����^�����Fi�k8-{�5h�[�To���\�?�
>�h�	�~b";�5&kN�a�,���{d(�r��
G�>F$D
I�
���!��,������(Q�uk�?Q*_@�9��e��ߢ	K��
�7CYzPWUk�Y��6'$[
�
���)���B}Y�/��`�E�$��{�X���{
<�S��)p!A�����
+endstream
+endobj
+2716 0 obj <<
+/D [2714 0 R /XYZ 86.4 726.045 null]
+>> endobj
+987 0 obj <<
+/D [2714 0 R /XYZ 139.066 218.119 null]
+>> endobj
+2713 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F14 1050 0 R >>
+/XObject << /Im7 2708 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2726 0 obj <<
+/Length 3716      
+/Filter /FlateDecode
+>>
+stream
+x��[ے�}�W�xa�#'�R"9U.[���'���vּlfH����07C�j)U*O���@��8�} ��������߽��[eg9˭��w�3g��e2gV�ٻ���y��յrj�=����d�ů�/���yyum���~���7�k�Y�����յ��©�_�}��ͻ�y! ���SÜ�����Ͽ��_��q�r7���gZ�L�i5��ſ_�� �L�#�Q�\0��nL^]
!���bQ6Ͷ�t����E�m��m[��c�C+U���0V��ߺ����Z8f�
�yUiλ���:p�r���χPV��5�^�Ͼ)��ۆ��.�*7����c���`L�&�Pm����r%�0	���?b#�r
[��P���]|��]�y^����z
+�xXU�
+���̗Ů�'=ov�~���e�P��e]n����M�
�CH�����6A�_*��`�]�n�
�r["-f}~��a�Y���clHw���V�m]�/�hXv0_���v�H���^��ٯvj�]�7e�,��[Մ��]�
%cUӷ�.�V�?.�+��5M�&(�)c�M��6*�:��!h�
+�#K�}o��e0O}h��i�?�`äB5���t�r��[Ӏs��m((����Mx�
���j�G�O�WExH�'��Jo� rJI�fVY�ry
+'��'<>�zSʰ\��,����_�kE�̸V,�ñ�B�,�4��Xp��."y.Y�=Y� C���
+;�	�g���_-�|t�� �[&�ߑ�`ڼe*�&Շ�rS�N���P���m��f�6��IƳ!BJk���,�t@���h���=,	�70�sC�?�O��	;҈`���N��)���8�}�u�#B�(�6t�P{���Q��;�q���x�b
_��/2�t�Y�����
K\���
�^���:F�_{�� 9����
+����$�Og�%,�qgg�Au�9�-4��Ծ%
Ï7߿�!�
D(�Wl�EU�����LhKF�s#2"�`5��9��2f��MIi����
�U��=
[�$
?ű@�`�
s	��ɱ �X����$xp!��亭�<���"���l�n�g���"R(�W��|~@Tj�FG��[@��	��� 4��PO,!�Q�n��-� �ip�鷘\n�W�xB�߿J�|����$���(5���G&j�1�h�!۶1F魫��D3#$|�^�_3Ľ\�^�J����xJ6Ŝ�z٤Nu-�X�b�fL7����S&����R�?R��I0�}C씋��4
&89-�gpr>Xʋ�Q4ea��1����O�r�c��[�u���Yc�&Y��4,"��#��"�,��BH�AMc�� �CP
���'���
,��M-I#N�춇�$�v"v�3N<Gcbg�������OĚҜ�OŔ�g�S at g�$|*8,{��+��:�!P�^�
3}�2
T6ק�*g�H��
+�c���ڪ�6#�#���{!3E�tȹ�H-�y8�
~�eg��Y4���b��gs�ϭo
+^j�%�
�S'cդ��c�/V��e �?%l�2�=�q���ݕ�{B��3�� �

+�������R���$����Y(J�|v��`D�1�OB�4I� м�u�l���d�����
���
+�
h���gi���B�'t跮��6��P7����uxⱥmb� G@�`���z�'���N7��l��B�A���d�9A*��3OR!р 
��RO4�X��X��ٹ���Mw~a1i] 
1��I�� tK�pX�6�!=��if}C�����~MBg.�(ț]�o���B
�#�G���������
(#|RF(�(#��4e���ź!R�Xt��4cD-oCocƈ�j�A����3F:�b�,\�P��Q�D�B�����D�B4���iu�3�-��D������(�F/�,�H�?雲&�d�H��v���� �F}F�H0��t	�s��

+>R�Y��B�c]@�~f��t����Ⱦ(���Ge��L\b�PS:�'	#5��-�<F2���Q��KF$��S��$�Dƣ<�:�Uư�̩���0����j�܎\�.��
�A���D�0T�W��we
�%�
��;eΥG0^{n�NM���
�Wz�m��8L �}:��I��~��0��[�p
���E��Eє��!}�	�"
wO�� M�����v_#�]�ὁ��m2��Hz���e�
O
9c��"�W�[��,p�ޘ�|
+���X�'P�S���c��J'��+���I%����>��<��d�_�!�)q��|n4u����B_��T#:�M��)�A-/!��cI�D��&�e�I�b��]d���V��&�:�w�t�[��˪x����#58��`
��
L
7O�2�h�ev[Az³g9";}҇`�c���iϮ�8i�'�<{Ɣ��xv1ڗѓ�2Z�Ǵ�K�e��K��gE�����N�V.�`q̜
+&Z�hy(8ɒ
+:�����?��
��!c9�����X���z
K�d�'��4�?F�h��rI5 IG:��t��<}� ���n_�C[�ӓHp] (�ۣSA�
�`�Z� _�T�L���gu
t&�gt�0&���c��m�(
��H�S=GJ_�#����#��wUw^�U��S*����B!g!�3#��]fݟ�k�٣����G��J���?[�#�PZ~�ܗ��||��SZK�.ѩ����>'�*X�����UR�<��_EMIaOi�9f��H��
_>�eU�A��Vd~�Υ��^�:�43���."H��n�H�ifN�g��	fN)r��>�.�:?�1̜Ctf."��cr�v�9g��:�ȸsm�`���}���
M�&�6a5�Ǥ�������B���
��8�\�
�I�Dx���ώA����ë�"��a瘞o�{+�� �8.N�Xr���I��Mۮ6AE���~�YDn���!��e昱r
�q�t�+�q��s*AD���~?���4�UL
a�k��S�>j�M�B��v�>�7���ޣ�؆�P��6{���3N����Ʀ�!T
�
��?�qҗX at A��i$�O3�����$�U�!�=X
����}�k�
���&,b#��yS��۷W9�' M���!ht�-��ko���}���v�u��������ι�v}^w��\�BM�������!�z,�O�m]�M�y7�p�
�b]�{1yL���z��]�I�D�
E�iBJl�Lρ�
$P���
R(����c�+�]�C�PA[��k^(X��3ixY�'�vH�#�O„�a��B��#(�Eޏ-ڞ�������S����R�jꈁ���eZ�&A�q�)�SMM	]F��Q�F���K��i�@��1��7�U�g��y_��k/X�;J���TCO	���^}#��@z��N��ۑuI
T�1ʸ%S��M�~X�ԭ�
���-)č��]|Dh�WJ���n�Σ��^F�շ�[�uИ��
R�jUܬb����8q����g{
x�gU~��-�kk$P
!Զ�ç����"
$�=8I�,a^�&
lo�򀽾+�e{��@���{��9л˖�=�X5�lOJb�q��c���I�mcY��b���|���Owf� �f�?7:=e
B�

AY��x4�<eO�8Va���ؓ�����$Ir]��խ���o:\�
�
+��E���G�AͲ��m��9��
��Z�$>n٧\}(�]���V=�j���%�.�[�T)/�O(�9��z�"R�oa��s��
+endstream
+endobj
+2725 0 obj <<
+/Type /Page
+/Contents 2726 0 R
+/Resources 2724 0 R
+/MediaBox [0 0 612 792]
+/Parent 2728 0 R
+>> endobj
+2727 0 obj <<
+/D [2725 0 R /XYZ 86.4 726.045 null]
+>> endobj
+614 0 obj <<
+/D [2725 0 R /XYZ 86.4 701.138 null]
+>> endobj
+618 0 obj <<
+/D [2725 0 R /XYZ 86.4 184.221 null]
+>> endobj
+2724 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F14 1050 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2731 0 obj <<
+/Length 2737      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw�6��W�ʳ`� 2����S��Ė|���-1�&�$�r�ק�pG/�&yys"	�`���
+U���
�^������+&giI��f9�%�3E5���n�����ኳ�u��e�:�`1�>T����U��I�����sF��??/���Q����+�R��>�}q������͏g/oξ��
�H#�@1������'<[@Ϗ3���g�v�zƙF�V��wgد
�WHxo��8�IMQ�-�L��y��+
�^�w�a�\fy�&��
O_��qҲf�����h�ϩ�jX1cQ�^L�1"B4�XU��G
+�����̾�9��\yT�I�Hʅk-��f[�Ѻʸ T")��bD5y�6ަ����YY&��̒"%yO#��(Y�@`G��
+���b鮉}��&<�1��{�7B�T5ӯ���@�+��@���
(qT��iY�O,���l-��
�g�}5���?�g�]H
&��[�^�y��~y���T�� 
+� p���^hZ����Y���
+�n������l<��?
�˽�
���.	n`W-�H
��&����(�D	�
�
J���m&�`�
�����m�-�����C��M27�~s�
�����11��z�R����Aq~
&��du�-rN�H�-Ro��ڳE����$%�Q�6i�
+I;̙
mL�|�r�2����]���mU����D�����p����qy�VuY�NDžG�2M�S_���9���ev��u��
^��O��ý�uZ��M�" �BX�7�U�,��N��v�,�t�3
1	p%
����X\�}�Y}��2�g��Lנ}9��l��R}�&eMoQ�1�� �uSdu�{m�6�������K��~
p���݉�͍lŦ'-�nc��8

Xl��Bh�p=OV�1;�����}��l���Tx!9�
+0S*
Şx`�
#����e2��2����=b�&)������]
+�.��Ht�'��\��
���x�����m���[`cH���?� �<ٌ�<��^���*3Q�}��n�����*$dL�z�w�
|�	@J=��?�t:�����m�W16Th
��}�+i�^�F7��6�(��v�����
<5���i����a{�	|�߅��xy���#L٣�Ȼ�)���q2�Au�>9i�g?dX�[�$��y�]��|*4dk�
��'=�
�Bq�&�r`����(��!��@�1�������o ��P��Ͷ����Q��d����%�,�E��#"�ӭ����

�ne���1Rq����d�:;��UR��d�|��(+N6v��g�����MRM�'�� �	07�< m�o��hc��>
��Mw��d�v�ca�NU��7�9�Ev��'
+��YK���y �.w�!m@
��r�ƏK��
҉�d�i�Y�L r��L���"���|n
p5JP�u�Z�!�:҅�&Zrn�l�t��빐&�p��M��ݶ�VۯX3�|�_N[��N!���z#D�ܦ��xW_){����}c'V�xv�&�N�M��~��@0�mS�h'�m�:)����ڳj�M]�ń�Ú	�Or>�~�t�B��;*�!�틃i<'�T���T�xtY��2��e�����-
������d���z� 
+]�
�)a"�A1n����ljKnS��-}�vT���'c]�_���.�;�\�_�iU��y�Cr��?���*�X*�O�_��!h� ��{x4�'���rr����
��f�~���N	t״
�L�{� 7�|���g�V�
+�ɕ86�RM�+�c����B�U3�7����!<e!�)�Hq=�3~�ݱ8��n14�ߟwR�
Ӿ��8�U�Qy
��.��}�@L)Q<�����x"	R�
�2�xw��~p�S=	��>V�=�}
���tf�|�����S��j$T�eZ��u�FM�6����,�R����߾�k�}�O�/\�@k ZqNW�:mK`���pu4����k�b��sXc�G8�
�t�4 at y��8���F�
+�[
���)��4X^v��t�D^��
֩B[	Q�u�X��3s�)t��OǑ��lV9�w��:�	ൊ)�K/+O�	����Itǚ
׆6C}I�ŽѺ龰A
�Z�ڮsw<��&��GH�s��I��a��iQ`r�q��7��C�fH���
��$�1$|"q_1j��J�Z!�3*��2�bD=M�G��I| ��K��n�mP�o���l��
�@�F�&!v��ǣjX��c�,;ԃ�����/�y�8�e�^�
$�MJA��ej�4���i�
w��!��H�pP�
�L��x�����l�	��1C������������F���
�xG�I�{�9����p�<�!�V�i��8�?��щI&�݋���??�X��\��U/��q�M
��e�IL�ܾ3p���C�|�:m�L���)�\�	�G�D��
�'���
Z�4_k�0݉3�R�0/�+o6�1mmjc�R��>�R��C|
���2Ds:�>�r%�@j/�%w,�|�r)�,�aM��S�X�=,�*��r*��]D?�3d��qd�-�y���-ݩ��ZnëmHcZ�4vd�"�ޯ�
P�3�5�6)���
��)�
����ԛo�2�����u��
�Y���t~I������_��o��q
+����\��� �
��M���}q��>�Gbن]���u�Jk
���Ԋ�ڦa��45��
C�k��3�������~���i�����9�(��
+endstream
+endobj
+2730 0 obj <<
+/Type /Page
+/Contents 2731 0 R
+/Resources 2729 0 R
+/MediaBox [0 0 612 792]
+/Parent 2728 0 R
+>> endobj
+2732 0 obj <<
+/D [2730 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2729 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2735 0 obj <<
+/Length 3233      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۶���Б��Q�$�t�!m�>w2m���Z�c�%R%�:�_�] $A
+��f�ͻH$.�ŷ��.HW�Vt���ww߼�*%i�����*��\i��X���f�1J	�����
s����nmˮ�
mۼyuy��~x����4+7��w����S�,Q���t�����
��+�
�H"��zw�������V��4Y=�~��)�p�]�^���n�_
��beDH��SF���z~�L�)t�}�V&�K�
+
��i���u]g/��_���X
?��*���
�y��L(It'����!yԢJ�]��K�D/��фb�u/kK�=϶[�����|cG����$q/�̟�eۯu<J̉�e��*$
�	O�ͬ,����k
Ө�2A�q�<��l{�
����ג3"�tu��
+e�_�gP�
"$�����UF���{d��}��Bh
�C�(����H#J����x&H"�a˰��Z�vY[�C����od'&V�8��ZZ�Ѐ���J�?^�>F7��<
+p|
0�u(�]g�|��)�p}���QN�V�/9 �>X��7�_\�6��v
�A�~.�$cN�����ΛX�P�r�TV�e
ڻ�u&�L�����k�����.ڢ
;-
�c}�
^`34M{^�=$7I�a!��tB�����y �)
 #\.l7�O�b\��ӡ�?����x5(�5N%p�D�u����d`Cp�b��26� SD�f
����ד�b�j���^D�jv͊H�Q^�e����X9������}x;�<��b���~�Oiգ�![�Um
U:1a�B,:��곜O*��'�w>���xF~
�$$�MQ~�r�MSd��˷Ů(���\�s�>ګ��5=�
���E�¸���i��nб�82��� ���hMP�v�d��P�ؖ�!�>
�I��j�`Tn� �h݈�~�
ÖÍM1�铉O�޵�u�Ɩ�~J���:
Vl۝��#l]s�tw
z<VM^
G<sዄ�K��1NX�(����͊U4;�Y���k�u�
��i
[{�������6m��m)諱mf
x1�U
�3��ԣ�-#ɞv�vI;��?1�E�h��
+s �P4�<!8p�d
��|���ͫ�'C�$�h�Ȓ����Ì?>�q<i.	��ueM&+JD,WGpљ��1�;��7Y]^�i���n�

F������zN���,���F�s#f5#
i�|��IO,�N��@�=��(U��B'
DP��2�#�5$����X@��y�
,QG�^��6d�8X2	���/�wJi(�ײgX ��&TO����x�(�n`y����8:�ş��6���������'W�"���~C����T�(�D�qv���׿��!�'L�
�oJ�-�y,C�8N�KE����y@����~
Q�G�ά���K�J�Ɯ��h�w�B��C�(���<׻��TKt!8�E�YN�ڽȇ�r.6Hq���s`03��{�q�T�&�b+����1�5-۴)�OU�u6�
�l���u����N����I��L-��	?K���N���5�Æ�pI�"]V3�=(�}$8$�ˬ�t����
f�9.K�l��?��>�[�$��BI�=ðh���7noP�!{8R��] v��>�$��р�&dP^x_�
��:��b�hu�n�/�y
+b�C �׬��y؁��q��&�����o�
��m������*�A��o�H�J"�H

�4Py�6��k	.��!\�M���!ք��6�e�yh���\� xG/%��e��C4lmÑ��#jI$d���UJ|'���ͥ��C�[�a��d<�ہߣv�~
��昦_k���:����m�l�/y]ن��򮼷�d�b ����)���hc,i2&�m� z�)�Yk�$�o�,�47��ٔ�A
���#��ƞz��Ė���Kw�\&��պ�
vȇ)��Y�d�G7e7��I[gM���`�����O��8]b؏"�N���9�� ��]Þu��WU�7h�J7��ca���� I�Q�!@�
����,3"�og���+-^����<`к����	k��*=	�*]�ȑ�8
t줜~�ۢ��;�ĚȂvc������P���"���
�w���p�2S���eMs�
�

/
�f���
+�]�
�,����P�ᕉ��C :~�a:��
'Uh4Jr���pF��o��vm
Z����Zu�x��xk�:�Vӥ����f��m�n��f`��+����Pc�:p݀���'��]M˭�|�5M����R�� ��<[W��]�'˟CE
��4 c���*l'�]
��O
�
U�DDˎ�kI�r���2�x��SW��l���
E�l�"bj�@��t�E�?Vۼyz�w�|����ٜ�j�.�d��ӽ
+�� ��3W&�:��L�3)���K�`Y���R9���m\����,�@�����M�������F�=���
�d&�7��&���&M�]���d�2�u
�IXL.H{����
���`">ᄐ�!&����y�
+�m�m����T�߁�
C˴Nsـ�1|���.��mw`4�#�C�!`�h��s4BZBo
+`��at��	��#��"�`B-�E4?�!�pl{���r���!��
�W�i�Q����L5�2�t&I��]>o`2�ey�o{�����k��N�sz|�'|p����rV�=��4�e�Ϗ�n��*
�ӄs���F��F'K��$Ƌ�����C�����}�fW���LR �z8c�áH;Ǜ���� ���d��nN5�ُU4V����2���݁'>_�̆>!�'>6Ġ*CBH2Ԇw��B�AW!�I��� �����K]�� ����V�"w�������66�ޒB
S�����S��
L�sѺ�p����3�T��
�xzpo���>��d�ᗕgj�"N���Ű
���
�*�@�$@ a����Y����l1~��y�%]8f4%��?���H��9���c�]��lس��}E�{8�\uǿ���e�$
�5���Q-%�p�se7P�Ʃ�Gu��������n�
VK*����>��x�4��o_�1����n{[�t��o������ؗJ ����>��`Q����X��r�x(�_9�|pꤔ�)����'�G��l at .��)��B�)�7�^6p|�TÞ��Ul�Y���.`�Y���aU���u>��������j�
+endstream
+endobj
+2734 0 obj <<
+/Type /Page
+/Contents 2735 0 R
+/Resources 2733 0 R
+/MediaBox [0 0 612 792]
+/Parent 2728 0 R
+>> endobj
+2736 0 obj <<
+/D [2734 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2737 0 obj <<
+/D [2734 0 R /XYZ 86.4 452.387 null]
+>> endobj
+2738 0 obj <<
+/D [2734 0 R /XYZ 86.4 421.932 null]
+>> endobj
+2733 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R /F49 983 0 R /F11 787 0 R /F10 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2741 0 obj <<
+/Length 2635      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[s۶~��У4c!ĕd;��i�L;iz;/��,�'����ן] �I��ħ�I ��|�-�h�0�&�.^�^���j��T15���$��I�R�8��.'�Oi�fs*b���La*���<��ϵ�����
+�+���g�M���T�7�bӲ04�{)+�
�?���������_.��^�uAA�hB[I$I��,���M�0��$"<M&;;o=<%
Z�����E�O
OH��4��
1Q)%4V�D4�"�コ��%ۂ;yi�����׏��x:��p��G��d�/ח��i�����rW}���{u=܀ʔp��[,t���1�.&�i�2���Jh���vѸU(
�[��Uv�}"BU7�_�%`������1$+���3��ʉ��GM���]�Y40�.4Rk�HĺC���J����m���Y��sX�8���R����U%a���r6\Mw+S���N��(�fU>��<�׺���!��Ȥ[�c at g�D����nAS,М	8��=��he8<`�a�mև۠u�w3X�)�
D�Ν��2q���ԣe8'��}F],������˴��i�������N��t��D$���``�E�������#ŧ��n3�
���o�X����O�],L]�osׇH�-��2d
+MR>��wo?~������%I{��f6��x�WF{AtUi�ŐCĠ�ΐ�U0�UJ�No�>��
[`}>"9�0
��֍���81��(����
>јW��6�������nf�_�^���0�cҔO�,"���77���G��c��
;�|B#�-M@�$�8.�8ҹ���#���>	����9A
�*H��s���� '`�������vg���+:�	��Q
0�������Õ ch/X��oR)1���(�I�OI9�G��(���
+H�0O&NDf�NI!� Z�SS73%�8 at d���z���X4YY���.O��Ah����Ƶ�%j�17��`<��c�m��C� {4���1�FBT�|�>��s!�t		�`B���.0hp�As��K|@��i���.��������������L�a�XfŃ�Q赩�c�: Ƈ�� ����Ƣ,P�Fg���U�Y���p�������5�FW���x��~z�5��C'7
�,�7�߬t�g/|�,ܯU�]�:ߢ���\�ʧ��g&@z`y�׀|�����6L`q�:� �dq��t�6�@�Rx�Bc�S�dhA���A�?�D�?��S�{//�]l�do���6��[G�Պ�8��E��j��N�m~X�2p-��r��O�l��}t�
�_��6��S��À���A� "�͙;�'�hѩ�� H1��
E:�X+<�2p
��ʸݬ�3	�$��]��t����w�
TdJqb�C
x@�ǝ�̤����s	�_Ϡ�9����5�
~�6e�G�'%�1�h��%VF/m�˹
��Y����(d+V���y}X�2��1'i�NU��@��U����KX�Ġ.\*N[�U�y��Pql����������O�%�������'�C��CG؇�ST�A��re���;���{
�B2
����>2� ��Bc�9��h�Q
�B|}n?|��E�#Ж2�x��* ��|�}c�*���������Y�-Iw��-T�"��ߦ�g�>��s�O�|���]eE��g"���70
�Is������sV�fS:�BR+���Pn�Ͷ9S�0E�zI��
�q�)Pf(�0���AL��S0�նO����� SI��l���F3\�}0U�>�����(@�vܸ�l|�r���
+,�v at tx���u�9@ӂ���9�$a�B#��׼9�p�
2CɗY�磆�1hahhœ��y�

���;Z�
�)	�Q1hh�Si��Xv����4�+ڏXK'����lZ��
+�e1�
+�oy
+J����b5މ[�X�6�S��c����s��HF>#qk���C�F!�j�����9�2:Էv��*{XY��W]B����u,��~����
cE���_�"��0璤7Ug��G 
3��ܘ����ʀ*c��y./u[�
����s*
�
+�	
+�������˟��h��9H��gŢ2k[�9�h��s¿����bt��.Dx[
�RK_�e�`x�K�P;�a(*���^ 
+?���g�E��ֲ���Ox��>X�9�8Ѡ�7

�K
+z������ц�
��^��?��n�t`�$(���N�{�7��߃��� �m�d�n;-K���t��g
��v�a/�%d�e�����)�Ͽ��
}P�i�Ƕv�!ǔ}�x Ǣ�J�<�tZ�k`��7��?9v�O#Fh������i����]�ҕ8�N>,S

��J����BF��ď�.��$ԗ�lx
f%k��ps�a��;�Qƭ��C��q��.�,Oj9L�r���<�����1v�rK�u����'ݕC}$}u�)�ܵ�wt����(޳��IP�ַ����\`>޹琑�?@�PCH�����`AQ�`���3B��gx�x�2�#P�6Ѡ���i�k��t~?��v�2��UN�ާ�<���;s�s�X�n{�}��_7��)�=� ѭ�X��V@;)������hЩ�#�v��T�KL��}��h��^��0s
+endstream
+endobj
+2740 0 obj <<
+/Type /Page
+/Contents 2741 0 R
+/Resources 2739 0 R
+/MediaBox [0 0 612 792]
+/Parent 2728 0 R
+>> endobj
+2742 0 obj <<
+/D [2740 0 R /XYZ 86.4 726.045 null]
+>> endobj
+622 0 obj <<
+/D [2740 0 R /XYZ 86.4 564.762 null]
+>> endobj
+2739 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F38 785 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2745 0 obj <<
+/Length 2784      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs���W�(WI0� ��a�ڙ��7UY{N;{�)�f
%jIj�ίO7��R��7�T�b� 4����0]<,����_o/��	��H��^��/�&raxD�`�����eD��ZX��}L�A.o�o|˶�_��
r�ጩ%���۟.~������"t��I�R/��ů���z~ZP""����mR�b�/n.�yA!�PX&�2ʈ�r�#F��^�O�y���I;��=A��K�^g�������#h_3Mh�N�?QEw����w�9-#��v�8�A1�.��N+x��2�5�0�%t=����O6��eT'b`9�@kM�����!-���* 0��Ī�=\�W0A}��d`�NM�r-�X~����%[��ٲ>�S�k���n�E+W�[��E��I��[z��FiP>#�R~�4O�����Ô���
�0Ц����!IҪ�?�(��Np
P���=U���S�?>^_�*�K�E��v�Fp�t[�Ͼ�L?�U�_��o��]Ѵ�9-5���:�P!�
aw�5��&�J87߇���p
�F
�t�w-=��w�w��x��'!g�n��b���i�s���(g� w
QΙG9��� ��{�w�7�:x㯃7�n��Z�H�x��D�����-Z@�0���7��7B\Y";q)�H�C\
!.z���bq�r������ �K�s���H��i&I]*�@.Ո��9L��fz��K��=���������/�J��q0��"gp?�7��ȷ!F�Ǩ��N�(�:kbØ��"�E���?��7 UY<O�s؏��O���L
��F��Ӝ*[
>�|�Q��*���_�njf%��z*���91�c�Uh6�LLĮ#w1D��\@�tY M�!��;j6�sR�y
@��-:�'%��w��� 2�>DE��[�V�i��~���e$	�ufnA��]���#���@��� �����������\PP�y�Ź�E�>]<
t2��<�!����4
��I�f�INQ!
aT�fޖw�<�
��ԋ��z��q]fO!/�
�Ϸ�Lؤ&��N�!�3"�%� ��q<�޲ V��-+ŏ���=�e�D��S'}�5�������$q�N���D�LV18%�s�� ���2Wt�SᷕO��/�ߴͰ���
e�0(ۣ��U�d�m��܄/�+y
"�H�JH���|ؤ�:��d

�){7�
+N,N����x�ͮA�=�������08�o
d�`�[=��3 �_i��?���n��]gk���W9����n��qR%���LXW1H��
٨�/	IJ�O㬋BM[2�>���޸��Z-U��N8���PU�+���˶�2�b�#�B�n���k�X�R���տ�3ǚE
�C���
�ܰ�S���+ܰ��
����|�g�Y������g
R!]H���i�?�������
>;1�}+b'X�}�D�$��X��F�T���
+��k�T���XT��4����	�*�!ӣr��"�L͏J�[��͜��
H
u�������]�
C訜O�\�Y����Q
3g�鶝g�4.�X�sU�[�c��E������`,�F�%0��ΥcP�=8I3�9� ��:l{��u�P�f�k�=��wR�S9�Gyj��+�!E����Q��Q}"��R
����
�� ��-1�����Y{������מ����k�kz'�{�4aE���`��B;}�+�ĝ;9j�L�u+�[ȯ��uG<�9�cX��ǩDk�Z����;B�P �hxh+es9��zh�ȱ����SH%�/۲�31n��lK��4�rp5�*����X+ΰ� �1
��bɟ��K�LѤ���xZ=���Q�P�m@�
rD::9ޗ�i^pH��Q�D�ڨ?�z�_+�S����
r
0U�P��4�b>xK���_�+�6�I�LOg
]4g�y�{�� � � �u� �����"��("��S����`�C���E�		hv)�o_�
��WՌA������
�]5�w�
6�ko����q�m�8�a��_
+�}"���;P$ˆ�eRl�%�ۧ�u���*]'�M۝�(�}�+�}w
������?���s��)��eTY����.A�
+��&�n�
+�l2
�
+���:�����ʰ6 }���J�l����2�^C��p�g<����i��#�㻼�wL��C�/l�94*+���$R@�9ڗ��w���28�
��'P8�
��|�h���m��«
"
a�8-i3�����r����R��!�f�
z����C��0��
+߻�32
��h�1~2T2�
��s^�$
^����l����b�������B�O�>���

�K�����DN�
��i	~���У�8ʅ=�*��e�H��:�k��US��
+����w
���
 Ma2�CPF�(���*/�� ���_��c�/�
�F��ol�D��4�%���1�`�M���co�FI=ZAL!����E{s���T	xT���
R�<�C���l��Mz5MUւ9�(+�P		�2�>���U���cy�H�Q>�	�����8��9b��
�:kC�;�����l�+
+1c�����b4F�Œ�!�.�m�yHc�џo�4�f�'�c�8k���ȷ�=̄��)�
)�J��k^�0��X��~�r�
ɷ?��(~���0�_�����b"�V  �+5o  �I�.(?��f �X`��K�<�A�'��>{��O�	K�:[�N���8�I:z�X�	;P/N�^v��WU�̄
m@/gC����Q?��7@���!'����o�
9�
8�IFjA�
��
+endstream
+endobj
+2744 0 obj <<
+/Type /Page
+/Contents 2745 0 R
+/Resources 2743 0 R
+/MediaBox [0 0 612 792]
+/Parent 2728 0 R
+>> endobj
+2746 0 obj <<
+/D [2744 0 R /XYZ 86.4 726.045 null]
+>> endobj
+626 0 obj <<
+/D [2744 0 R /XYZ 86.4 215.234 null]
+>> endobj
+2743 0 obj <<
+/Font << /F36 740 0 R /F14 1050 0 R /F48 982 0 R /F8 741 0 R /F11 787 0 R /F38 785 0 R /F16 729 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2750 0 obj <<
+/Length 2640      
+/Filter /FlateDecode
+>>
+stream
+xڵZ�o�8�_a�^�b��>vq�4�eѸ���]
�q�S�T������
��%�q�M��Iq������h5�wG�̏~|��Q��HF���(��
�2e���r�y,�d2:�j�Ζ�Ί�T%j���8���yi��&/���Dɱ�����-��*m�
�^�K�§ٛ���/&�=:�}9����
�7G���%��:�L�����i�2	�btq��#޿Y�{�(L�]�CY�
���x|7�ɸ�	5���µ�����ְ�� �M^�h�2��b���q
������z"���k�-�\`�;��x���>��H�Swp<6�r�gE�/
�pxI�+��
��bB%���d4ALp1�΢*���&
�۵f�IZ��_����:1�8+Qk/�j+Iw�X�d�G�e�CjS-5<��T���m�@"��3�VȁR�K�B�*�/���)�W?9�<�
�k=�Jθ��A;��+}�ܨe�wnxm�l��0@^��Ң�K�E^�4�
+~ɪG�Z�Mp}_V�LH
��}�l-h�N��28�D�n�mV��om�P~�
�&S�b� �眷7㫪(*�|GnS
+���a�v��I�^�7�¦Y�/��Yz I5����%��:���W9�f�9aDjX���aڤ�q!�&,���$
��x���/�O��J�Y
�/AW*�R�ݏ�'ǧ�f$ A��h(�T�p�"r��
�ظ8��;(�����ԧ���k��K�	�R��������ɛ���=�L^����hH9$���)`Ÿ�QS��Bju�q3+|H��i|,p�&V�F�=�d�j��զ\��
9�(^�D�(-�'�W�1S#YR��y	�3
;�(ibb��E�T�
D/B4M!/�!�w'�����}���<����L�jH����o=c����(��+��=�_�� .
�KB�,����p!�,�$ ��<uGI�s��&��p�a��Q
alZ���#,�! h0VI
En 
�'duؗt�e�2�+ at 4�`�eU6+��E �8"/$���/�����H [ ���EaDi�??�0���s� p%]0��1��Ν�M^
E�L��v$A�B�#cRp��EZ�$ [<I�F�q,dE
+@]��Y\��"�
���.��W��؂3�q�
��0���Cy	�Ng����
�Oz���r��jJ
-�
G)
�OR�ߧ�e�
���2 ��R$�պ
�4�,)�	@��3��«	4� /���'J8;WT�u_�Y�x0Մ�(~��[Κ�-�QUcQ#%�ޱ�
%�'�r̂8Z@�
����is�Ս�.�bsS�r��☒+nw�
�W��x�^$e�;޻��
��m�o'P�;#�-0%W�S�\�\�.'�oq���7��.���7_�-}A��غ�-T� ��Kڞ5A ���
H)�K�c
�
����Y�$�	���#�I�
�:'!c\MӃ\��22�D�pa�v�
e���k���jR-!
u��L����֝E��-�m�{ ���9��O��f�?
@:
WK��ɲ���@���wޚ6��H�:�w�h�nj��f���8����8D8��rXLw��̹��
fxl��IJF��g(4�MEA�E�8D~�q���u�|�'�}y��L|�s$04u��*�ɋ�a'h[��!��P�V
T0y����I�4��7P��'I�~���K���g��?�<{dy���hw���
t�^-�uv�'�rx߫�\�o_�����v]7������p�+�g���=�4 �=m���NR�������@��g�X6�D���ڹ�H�
+
Y7�ol[iM{������+|���V���������`e`�~��!R"F 
+���f�OO����{��K�@!$�
��[��
������wG�!���1=vi����1���8���1K���$��P�b<�֖(��ѹ�k��,�LnH�A5�y���S`,�P����
b;���'��?q`�g�3�@��b�ԓ�o&ײ��H���L��!V�у@;;Ċ��ݬ�>�	�L�x��� /���x�
��[N}��(�À9��Z܆����oK��ݢα`�	�
+�������#xT�
U���
�E�F#�
�-W�wq
�����}t_`���k�m9P
�v 3G�NŐ�u朦i+�����h�b>
R�`q��MF<�\���r�lE�]���4
+߲���<`���AE7�+���<t��ˑ�en@:��I��WR�m[X/u(U{jv=�AƝ'<

 ��%�S�_�A~�;x����G�:���A��6
P�� �k�xK�yLo�Gg�#`���o\q
+y�%j����Xl,=�� �h�m��$_ ����ˌ����+o7�$�A$��H�j��E~��1
�p?��l[�ȁ"���M���A��T�oF?���M�ihQ�����k�m
�`Su��>@�yvYXO�}M�����Ԓ��mK����,m����5���W�^�
����
�K
( ��
�x��]N��>�	��u
�v��
6����o��/
{�
L¸�;���s�Ca��3
w�ΰtt�+�x�Xu~l����LGP�+���
4��
m����k�
WH&��2
��(�
+��W*aZ?��=�
����� f��?
+endstream
+endobj
+2749 0 obj <<
+/Type /Page
+/Contents 2750 0 R
+/Resources 2748 0 R
+/MediaBox [0 0 612 792]
+/Parent 2728 0 R
+/Annots [ 2747 0 R ]
+>> endobj
+2747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.452 241.895 331.175 253.85]
+/Subtype /Link
+/A << /S /GoTo /D (figure.9.2) >>
+>> endobj
+2751 0 obj <<
+/D [2749 0 R /XYZ 86.4 726.045 null]
+>> endobj
+630 0 obj <<
+/D [2749 0 R /XYZ 86.4 533.175 null]
+>> endobj
+2748 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R /F14 1050 0 R /F38 785 0 R /F49 983 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2755 0 obj <<
+/Length 2376      
+/Filter /FlateDecode
+>>
+stream
+x��Z�oܸ�_�O�|�~���
��ĸ�ݗ&A!{[��ʕ���"�{g8$%��m�"��,)r8$g~3�!���V|��?��|��UŪR���+W2���b�����mQ1y|��*ί�������tP�b��`���U���:����?�L�W"25��ruys��=_���g�r�;Ow��
+&��fuv�#
�_lY	&lI�m�����q��z3����/_��H�
+:����Y��
+Wt�����UcG�5}^v��^��@]���Ğ_����ӿ|���
+�2q�v;тƱ��H��ؔEݷ�Ŧ��;n8p�3o���x���f��\NO����0�]$��1�[��X��v{Em#*+}�}w��n//�4�J�:�U�Lly
�UJ?�����.��/���fK���,G�Gz��$�����Z����M���M=��=�jHg�'�n6k�h�E�͈OI�,�Q8�z��д �Җ�B��
�V��x;��Q2��qU�@�ֱ���b�ضD/�<
�Z?ĊqQ= Ĩ!R�.6^[�x����ӟ/'��UR�ɎO��ūc�ET�
+p1E�౨�b\V��8�Q 
��슏���r�x�Q�op���
�#}$�z�}KF�M��"K΄�0��fF'S���>�a[7��`�����R뾯qџ0}eeѰ+��Qe��`s��a
��B��o���ᔥeUe�0���bC��
�d,|L�
$s�z��7�C���kjL�v��輰3��2P�7
&��dl�i����V�G������J��}�Rz��iz0�h�ajh�ۃ��y��6�!́���(K�D��	0'�@�D�J2
��+js��g�:p6
{��n�7�(�	]-�?pw��~�ޱINk�
�Ѓ�܎��|�Mh�p��f�JR)t�p��u�o�v�/
Œ��K�D�0g��D>qei��rl?"���-��0 �8�f/���I�/]��ջ�C?n���c�zT��п*���YK��_��
���>o), _
+b�:
��$��R��:�#���
�-�N��p:�%�$3R?)q�ՓWV<O��9�L+��sQX�"��
+��fC��6��+x�4�@=u�G�kY��
�����)6�g��M�9���
$��/�V�V�Se7xK�)r$
ٶh��
^��ݰ|y���!����]��M�c�U��O�>�h�Z0l���2`�;�� ǖ��+�v2lO1���q�7h-�YTӧ��#�f
-��6�e���
/�iE���K?y�t��e��;>����
2��z��(y;كo�;M�H8������U�[h�=���,@
�����9����f���C�C��D)�c[���#��
	k�t�d�A�4��v�
��,�c���XA�[U%�B0	��#i1�S���4x��h�ОV~�78*�
�� "�]��쁐�u�l'�p��ׯ���,�C�)xf�L� �{"m�q-�*v��-vԳ�c�
;%��\A��
dU_�
�@ <DV%��-씎X�>v��{D`�'��
~
3�{tg���
�׃�D�1����B�
]�\
_O�p��s?�K�hQ�\ik�3՗��
� [...]
9���,1,�"޳D8K�
x�g>�}%ԛ<��&aj��2��o�
�X��5���1�<�A�软�W��͞Y���;e�lÕ;TwtQO7I�
B�k<�/&v��\v��&n�z��T����	:��0
�w�m�������0�k��{@�.D����:��)>À��x���>�_
�
����
��)��~����
��.!e���&�g
�̾6)����9Y��F��z?��k�:�p���@�!�嬄xc��z�{T
�lP�lхk��F�+~�h�t��n�#�=�Cz,�R�@b�S���I�I�ʡ�3��Cx� ܇^b���R�
��x�]���iHz��~�-br)�k��
�d��]����br�c
+endstream
+endobj
+2754 0 obj <<
+/Type /Page
+/Contents 2755 0 R
+/Resources 2753 0 R
+/MediaBox [0 0 612 792]
+/Parent 2757 0 R
+>> endobj
+2756 0 obj <<
+/D [2754 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2753 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F1 1099 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2760 0 obj <<
+/Length 1308      
+/Filter /FlateDecode
+>>
+stream
+xڍWKs�8
��W�(��
ߢvO�Ͷ�N��N�˶=���#��$7I}AB��Xy
<�H>| a�l��Y�}�8y-t��\s�\^%F�d<'Z��r�|NYN�+&3)�7E]4�Z��駶���/��6�x᪟K�Ӣ����n`�SW���Z<T���O�goO�_,�^�[�{���``M�`�"F�d�[|�J�
�K(�In��.�"'
fUr�����g�8hcR&<cD���ǂm���<l�����;��9P�1n����De��<��˜(a���v�����s�RJ�g��6v���
+��:ș��\c���+����x��m�ͪ��M[�֮��j��ٮ)�zM�-y��CL`(<�'���h�1�-����C�1F��Y�4c�E3���\e��鱲���@�@R�\�"Ujk<�����=���Kȉ��h�J��FAh�9?6�q�x�
F�"�0������B�k�G

EV�� u[vר}�| `����vs�D�;��Ü����տ�ơJ�Wp�,�H|��"-}X��O׶+6^q�4'�� �UQo��'!��p�����ϣ���c�!��F�l����qe�zS���U{�Lf�fbd�b at g)iz|�=YD�z��L��
.T�pɻ��6�m������Ry��åW�ۡ�a��!��!��'S���Ij�c��H
�
+�+�/v�0�k�@BֻzS�[�Nko
�E���+��@���~yfy⭾Y(e>x6��
��g�q5����
% ,
���))�؁�a�`a6vB+"�~�u*�^;�^20��0�_q!
+��hc��%�w~
�IL?	o���W����
�0��An�1��L�!RDo�+���X���1I����uC鸏��@�1O�
+ at A5�Jj� uo�C��[6E�|)
+���
+� 
*�AXN���������N�<��X=4MT��p�5� �X٦�@�)�ڙ8 O�Ȟz����@ZB�f�{B��|7���4 0�M��ܘs"�y����g
��J����M�W����`�g�5f��
�G��76��L(�y7
Á��eŘ���ѧ�j�Lq�fL�T���,���eU���Ǽ�4Ӕ�{}=-q��E�Q�*��"��N
�I �e�����Њ�g*�����@���~;�L�4ϵ�Q�ȴ�աكF������\ �/Cc��k�VA�t
/Yw{��
�{� �����/���1t�p`��
h�ݾC)l�
0�anS}]���l�!�`�س>�E����cE���=��u��!� ��qa
�5<���ÿS���~��
+endstream
+endobj
+2759 0 obj <<
+/Type /Page
+/Contents 2760 0 R
+/Resources 2758 0 R
+/MediaBox [0 0 612 792]
+/Parent 2757 0 R
+>> endobj
+2752 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./cscmat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 2762 0 R
+/BBox [0 0 473 483]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 2763 0 R
+>>/Font << /R8 2764 0 R>>
+>>
+/Length 2765 0 R
+/Filter /FlateDecode
+>>
+stream
+x��[[o\�~�_�o��H���yH�"@�u�"@�0d�m�r�i���΍���#��'-G3��7
Β�{�׽��{���ߛ�ݧ�,����t����H���˝_|ۇ�-�X
n�f�B�s�
ykط�9�����_!�m��r���;W�Z~i��7�V���W�L�#�������|f?H���?�
Y,��ݿD7 �
M�*�0i
��Ct
+��b
	YA�-D7C��U�n�X�@D�@�q��Dt$�0C\�@D�@DV"�=!��Zh�[
y:����!6ʁ����fZJ�&XT���� ,(�1)S��w�O]`U�7�[�� zc��B�'VVrN�Ř�����nƉ�e�\s
ʂ�IԪ

f�X^�9N8YPcR�����}p1 N�C@�)Fr�O����
hy
+*�	1���N
}
��/�P�!��&
���[R���	�oAp5p��{cBLR���	�o�u_������8k
8k�q��q"ep� �	1y�e�Y��)�����
q��
;D<&���`��U����PV[����*�-�]lN���ւJ*\
+�Q��f��$�7L���/Ѡ�AY�!���{����'@{F��d�9�ml3�Њ#��� 4o3�,g�9���
���
4�R7
x�g� � dg2P�a���� �j2i��Tl�f�-6�aJ ůd0���CS��Jp�	�6
+խ��B;��9Q��=�R"J���E�ʕ�v���U�]9��p���HP�!Y������y�(���NN>&��ɇ�;Y���]�ͪ��M����s����<�;Y���*H�t�Eg� �����A��l-
$�;#ٔTH[��v�3��PS�~{��
���vC>��n (�0�皀�=͠"���E�,ER�a
S)~%���
���v78�h7p�,"�Ft�.��YD�e���Kv)K��cÔ@�_�`a������������
��[��.-�$:�&�
��	O�¹\A}��4k
qt|v�"����}�'*r�duش ������Ó
+���q"��e���5�
֟&%&>�
�0��Hv
l�>*��
R�{+W�>t�f���&[�8M
f��1�N�x�����Zax��:!5�4�Y��,M7-Ɖkv1�����
��㵆dh�Q�ҴXݼX��moݼ쭛w�u��t���c4n�u[~��9��
n��x
O.����R��D�	ѧԝ/�Z�G���i.���+��c.�*sß֞��
+S�� fg6�)I�]��t���
�gi�:�q(�p��*��hR:�Ϗ ��l �!�2�!�*�^H�\[����/Q�9Ѭu��EZ�*�� 
��*��G fg6Љ����
��)<K��
@jX�5
Wy��y��~
a�n
+��}
QO���
�R�֠����-�5���A'`�����5E�U�k�#V�:��d	נ�֐]i��긢��8���zT����)�	ǦL���x��tR�ЇNg�S�-��J\
VF>$��`�ٿ��w����toe�a;:)��l��������鞟O6�MNp�`q����+�O�Q����f���1n�K�7<
h�DK�>{��6�8�pcp�����Ԥ!��+��
7R[���1���.E�FR�^�Is�a�l�@��el�B��/�&��8�8�9.��<��e=
Ӥ?��
T�-����
���R��w!�Իk,�~)�������q�lF����h�=��.
|�w�~�zw�q3����i�K��Lsv�M�qH/Y�ͽ���]�������V<�rr���6w�܇���0n(�����w}�ڻD��w��
+�q(��Y��U==5���xL��ps��>x�R�/7�[f���HSҵ69���D������/�s���:�i�f`�A�i�>i��٪�d�&�����

��|]կ_}i=Y�{�6���f�S�]�%�����Vh7i~E���8 at _��0����z��.ɲiի����������>���b�G���kߙ�8��qk�V��9A1�W`f�S�~Y�.Ex
�5i\ogx�=p����8^���t�����m����Y�1�B�R�{
E�L˟�����w�~����a�/9�A���^�ղ���]�~��Փ�w�!֫�O�w�zw���������������W��J�⻑���!��p��jw��'�Q$r(���Bh��h����o���$�$����v��5(6b���|����/�LߍR��.�~��?��O.a�h���w�O^^�uwI�R��~���Eץ��j��.�6xb݀�E5�MD��߿�
+4D&Rė��>i�_<�����ϳ���H�_~�'p%v*�l�Kخ�4~z�ɳ�]������ު�H%���������I���?p4W3O_�b
}q�˫��7�R>�������k��Oܮ� 
��g�����\C��=��k&D����p���T�]e���D�7�-�B�a"
/I4�2Fo3�I.�P��d�/&���Fr�/�*sM|
'�%jq��}eqV�&&̴0p�2�L΋/�
N�bp6}a���
ә�({�s�S�eG���&Œ��4�=�^v�,����M����
���6]�l9�Em4Q�����
j���頡��L9�@�6��z��#4�Ƚ�l�8�;m��Y;,6h�q�����h�m�mg�������I��q�c��6f�
Rg1h�]�閡����,�6�����~�u�Z!=A�0D"Dwj t���D���"����O��E8&1m8�N�<7
"�;5`:�frj��e`?�6
�
�h��h�I,�Ρ�uYꌄ����b ��9,s����,S���ȋ�s(�J|��G4Y�����,�����H�Θ$��y��Z�/����v�I�=}0�tr��]�.�=�7���3&I;��e‰-"��wF�jL���s�i����K?
���;hͽ�j����^�c���e*;
r5&���9��锃n�'�t�%�r��A����g]����+[�"�՘d{
?�f:[8�2㬱��q�YZ]
��6u
o��{5
r5&ٞ���N>�vz.;
r�w��.gL���Ns��+��Tv�jL�=��L:
 [...]
+���!#~
y�
����0��ڛ!����[
+endstream
+endobj
+2762 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160615-07'00')
+/ModDate (D:20151010160615-07'00')
+/Title (cscmat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+2763 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+2764 0 obj
+<<
+/BaseFont /JTFGJT#2BTimes-Roman
+/FontDescriptor 2766 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 0 333 333 500 0 250 564 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 564 0 0 0 722 0 667 0 0 0 0 0 0 0 0 611 889 722 0 556 0 0 556 611 722 0 0 0 0 611 333 0 333 0 500 0 444 0 444 500 444 0 500 0 278 278 500 278 778 500 500 500 0 333 389 278 500 500 722 500 500 444]
+/Encoding 2767 0 R
+/Subtype /Type1
+>>
+endobj
+2765 0 obj
+3203
+endobj
+2766 0 obj
+<<
+/Type /FontDescriptor
+/FontName /JTFGJT#2BTimes-Roman
+/FontBBox [ -70 -218 863 683]
+/Flags 4
+/Ascent 683
+/CapHeight 683
+/Descent -218
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/C/L/M/N/P/S/T/U/Z/a/asterisk/bracketleft/bracketright/c/comma/d/e/equal/g/i/j/k/l/m/minus/n/o/one/p/parenleft/parenright/r/s/space/t/u/underscore/v/w/x/y/z/zero)
+/FontFile3 2768 0 R
+>>
+endobj
+2767 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus]
+>>
+endobj
+2768 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 4513
+>>
+stream
+x�mWytS�ֿ!M��bc$��T
�(CU���c,*R�t�`[h:�M:ej�6�t�4s3�I灖��2We**( 8 �{�>�pn�۷�w��[�ﭕu׽���}�o��o�� "�
caJa��bu��$�4����fP�Σ
c�Kg�:������\2�ˆ�G9�Q����q1�d0������0��2�Ԥ�+�yfտ�yvÆ
1����&&^TQ�_���Db��DTZ�R�v�Z,.<
�/VJ
*brrsE�����E�1/�
�R�,��+c���}v5���SXr��"���c�H6�$�$���9���
A���J�K3�+*�d�
E���nU�
Qb~arQJq��$�O�^�t檃Y���2�u"�XN�%^"��"��G�'҈mD:��� �5D&��XK�L<K�J�F�#v��b7��`b>�K, 
 6��M��!"�X�Q'"q���o^�<Ѽ
�L湈�6�
+�
;���:���
���|���-x�����p�B�h�"Ǣ"u�5��_G����
�\ܸx|����?$�"g�`�
�
1f��oX
�봅z�'gӹs�]�
+]uf#_�2� S��k��l^�I4����cϴH
ePÇ��}M�9�����>D�}�H����o3>����0�2���6{ ��Rgi3�IzMZ=�F~�֬n�#$:
+N��h��.�N!-0A�J/���
���!�|�u~�A�j�+���h�P�S��أ��z����5�}�DV*�K?�
-���[��PԏG�d���B��{��3�c4�W���uMȄ����5�SW�	"g�j���&�0�Y��ǭA2��m�U����j{F �y n�q��);v��@z
\3��\��׾�

�|r�sRٶ5~gI
�'��P�X���1I��;4=qaZvxB0X�_#�	�VU�����Q7�K8u.�1���.H
u�
+ ܯ�'�H�
+��7�����!ѳ`���0	I��[��@�w������,��dI�hST|���������l�I���e����A$�������⹪d�L^UQ��I�$�fS���Y��N �7�zخ3�Pk{g�	�U쭌=�s��,55�P<+����c�q��A-���.s
$�]�YB�
+`�ѸK��j�W�*?�@�*0x�l��Ug���
�.kߐ,T�SZ�!��Y�U�k8�|C�.D�	i;��]A>Z�Y�>@�s�ѣ,=������T�&h��m$��YU�\�1)m{���2����P��*����

+����S{���c�l��ق��IpA_c'����[���?:[1����&ޕ�ݰ�?q��䅁��:��a�Z8�Eu��;K8_!'&���d���&���Tc4�R�3��I�Wz��X�6���$��7��/d_:3�5=$�zd�*C��{��q���Wv���B��j|Q���V��,��}P�9)D?��ΐ
+\ih1�t��(��h��*�����G'��Vt�^��|jx��m`��OF������Yq����x64�9�
�&Dm
1�2|Z�f6�
P
��z�St
�	�2�|�Ňm
ǰ���ij0��0�\��<��j��ڕ�Z;�C��?�
F�y��
Vkѿ
|��Q��UPm��K���y/�J�I��;<�Sl>K
F�[�T�¡�+c�L�S�W�ntC7��8�6�U��Ag��Б���x-%N�
ڠ��҃�������Mv�w@�+0���g^ۤ��.@$�h��t��uE��=���	j�U�J��SC����� N�����F����\�5#�2$��ju47ٚ
�FW�:�����3����=�^�[U�-��k
+a�IK�ʚ�:�>=#�x���dǢ�����W��/�P\W#�Uh$52HH�
6x��Z4�
���3БG�A?[
���0J�}�{�f��~N
�&��:]U��ΤSj�O2�<
+���u
�1X��.0 �#����h6����X��W�'�@��y��7$��
���i6YL�ćJc}Q#���b��5��%
)���U�4�jUAn�2����i��B��k>�m���ɫ�;ȹD���
��:������i�-\A��;�
�$L�hL�@Mu}���(|����|�^����;�[�!i at O}�ީBl��g�����Օ	�MY�BM��b�)
�f�\^Q4X>����h�[B��Z�
���0>�X���O��2��ܑ_��0v�g�����G��<��^唴)�!��#�y~ǩ3������Y�W�F�~���<182"���1�DF��"��2c�j�ǜ}���;�`�N���ҡ �f��p-�1\^�u;�+�es�����
��:�n#�p�Fg���`S���JRO�<w���j���
��U6�M�Z_�*�IÚ.`�j%�O���6����2Vs�έ�j��g�}�޻H~��~2pѓӬ P65�H��bݡ� [...]
J=��?��f���o�C�Ώ�N
���F�A���J!��z��\�����X
�0`Qa���
+'"��R� ^v��>��y�#�S��_��&�q���$�5��R
+�Y�>}�ȹ݀��� {p��

Y8���AF�*��ܜ]�
&����
�1�P�
�fص���KF����RTx�4
n��~�
�n\BĤ���Vq=������%�Ù�&
��	tvT���
�F�%
1zMq{[�z�-���x����xNjƤ�������൲9�8gj�����������	�Ѫ��OH���E�:
�(�ʁ�O'��@�1[*���z>��t��q[��#T�io�*�x��M@�����ɓ���2H�ٺ=6�Wt�H�P*U���R�
ʡ�EwL
�_Z��}��~�q�grZ0v�u��+&�Zi����R��u��
MVl�6��(���
��ó���S3H�ƹ��!�g�3��fH��ws.�z~o�T��;yVhC�q/�
�<ң*	�
+Z�\2�����9������x�?
B��Eݺ�.�C�Ý���Ӱ��5� ��~ߡp�A�r��4��N[�~L"8T�q���IGe_gG_eg�K3R��c���kw���%�G���8��]_�׫�bq��!_^��8:f��J
��
��4��"?M���6� _M?���Qd���=@�:؜����������[R�M�ND#��ۿ}��
ͻ&\v1g
+�E�=9v�Ĥ"Xp��WH$����t��و������C��An�5�R�MT�L�����
��.U�p�A 77���&��V���P�+;5�j,�JUU�D�[hޥ�h���k����
+�z�/�
��D�Y�;� �
z}\X�N��f�S�r�v(;�ydۄ6��f�&z��݅�A�ߧ�8?�
�%�2�8Vx��[�)���&��a{�K����|؂9>�G	 �Я[�-
�k�i��`
YSc�	jT�ggY���s�j����{�ꕓ�N���gi���Ogk��M�z\kk4
�"yT
���t��{��%��pG2E����9Ť�
�Z_��̨�)P�$i,A�E�%��]�-0
ftIO)���>� ?�x>s�/F�ɣ�rM�譟o@����ギI�I�)y�ƌ��a1v���b��9���V�
�T�6������f��MR����W�
/����A��cӌ�wPB��
�a�ku���
Wu����m�����r?�gQ{�8���8�Gw���aHNu�Ҹ@'��I���$��^!�


j;	�
m�8!�����ڽF�H�e���
���!��^޴7�lo�@y��7fA�&.����4����Hd��f�«h�Uu�z�;g�I���҈�o��0�<�8}��N�\ۚYR�w0~]����i���?=q,��j��%�{�
ɰ�F������7��W��
�||�
����#)�*�
�ee�e��;��O􌞼��ÿ@4���~z�ޡ�e
�uռ�z
��t���
����I�HJ��
���S��LT*׬��L��B�QY��zR
P�ۂ��o�W�
6�a�
���QӮ�-�w�[um�l��;zԞ,�0�^�R�����
S�1����Nu@�Vi%���*����`���s�
l@�^
���j��Yi�	�E61��Z jW�F�]:'�g��Z^Ҝ��
A���;T^m:X�F�J��*��#�[�C6���v9l�
��w���YW7�O7�h�^�]�.�n
ήG��A���t�?/�|
(�)T��(;����%�8���3�2y�`�����B���S1bw��v'���
�j�%y�y�{B��<�=����Kt~�]0P���5Z�����YF��=;א
�I4=�Q=����ǰ
�qS`�*�`o�������J
�:Wq���[G�/�=�H��('=N/4�q��
��eŬ_����
+N �]�����v!&�v@��Ҁ������hm�B��R
ý[Qmeu��FӐN�~?�h�v��$�����}!�b,���
_�-\D�


@�
+endstream
+endobj
+2761 0 obj <<
+/D [2759 0 R /XYZ 86.4 726.045 null]
+>> endobj
+988 0 obj <<
+/D [2759 0 R /XYZ 139.421 261.494 null]
+>> endobj
+2758 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F11 787 0 R /F14 1050 0 R >>
+/XObject << /Im8 2752 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2773 0 obj <<
+/Length 2736      
+/Filter /FlateDecode
+>>
+stream
+xڽZKs�8��W�(W�� H��
�lej㚍��dr`D�f-EjHjl��o7
)��f��
"�@��놢��*Z�������\�Q�����*�D����tu����a�W<��ۇb}��d��'[��
+�0J�5U����/?�^�~A�hEݦ1I�\m�_�E�
����W��Q�mW��a��V7���&L�+J��c6p)%4���'�,^�Tb��7}��
0���6���FX�e �_HGڈVWT����Ԁ��c����X����x�ι#�#Y��F�:/~�����|��_���7�lc
�C�5P���޴��k��������n���nw	g?dm�c^����1{Su���#�8%<e��\^	����+�։Q���ʪ{���+
+'�fau�!L)з�������w�|��B���Ё�n_�efL0�A�$$��JƊ�*^rCN(O7��79��
��V\Y�vh�p�)A�����|\I�H�(8�L��w���
��
�ׄ����.
�մ'D�������'0I
As�>��ؕ��ށw�4��ij��ପ�_o�
}NP������
�"�w��4�f�0I5}:>�-�{�]{qh�+vd�'�12�l�϶��+th�~,��,!�%S
�C��q����<� �$�z����HD��M��h�eQ_Bؚ�ց
�eu
8'M�7�TN���qqL$�X�
Or�>
}&p�D�
�����q
+�`
�R��U/�@��8%�V�u�OonO�
p��Hx�?8OR˜��p�Bޔ���U��0�3W1I��� �_N
�f����b1}���!��d�!V!6P� j��?�qߙ쐙 �qW�t��;:��P�k�S0�S�zQބ�~�:,���/�i���T�~��D����ZD�|���G]<���
�� +��M��OG���n�X��P�NkA���N}N�
�LQ���9��+�� &X�Ґ ��ޤ���z�R

+��邥b(|�K�S�����]�6ϋ�i��=c�p��
+�&����6�y��>��wW�4ݬ�#z�K�����`M��9��xN�%����	��bz���s���T����A�
+B�<;QI8 ��_�N7E��6_��O$7����a��p8��0��d��:gDD����3�
�w_f�X�?��>d��j�*�
+��A{���"?�""Q��
+���-Dz%�P��\@3(+���3�+�fL+$Iq`ZM�
� �>�n����XIh����A�J�-t�^(c'��u�~���
�3i
��m��-�P�3=�ѲqMw=�^t�֮�n �||�i����
a����m���
��t�
��.��]��@X)_Xކ<u��>d�ز���erS���	��|h��2[UV'�����.�v��
U�c9�d&�
�W�"-�y�g��&,�:/,���6���ܫP��F<I�
q
+�*L[8 qXll
�G2y�1�t��0&��yu�#����.l������M-�X�I?����fш�TkQXQ[�Fk��ꃶ�j�pb�8ƆX� QD��8Z>�Y���˘�j
���I�E��*("^l�7y�Z���->�[B
�P웉�޴�I��,���L@��Ȗ�YA[F�<�%s�OX��=��G�
���*X8�"ܑ�"�}ie��l��
R�+���1�j6-$��`��0𽧲�MS��2�o�2�&-�6�D��9@�h�����8�͕X�0���L:�
I� ��0vp���@�6�d��0,�&A�&A3.�����
�w63(L�Ц�ڭ36��h���l�zF��ˏ��r��p{!ʃ�[y������Y��p��
�\��x��O�f1|<��H
nAzc��LEz��d�P�1ȷ���	-�,(�������޼�����o�-\�8U"�D;�tВC�!��<d��A�+����N�:c �=���P0�d,�"��p�
^��0�#����`,��A���U����$	�O٦��Gh
+�i���!\���C����x�f����!�
+iu�`�P��<�H��7��
��`:����6+�}[�!i�W�
��w����'�W�np(�Xv��*C�6ԙ
�=���e�q�:
��2�����	OM6�4v�=��ٖ{��Gq �5~4�;;/� �|�8|��Z<��4�AR����mY��
�)4�(پ3�
7L�ZxJ�"`J�c|J��it�i���
bg������BMp�b�	�$'<��4�|y��)���OJ=����3�>s�~���(z�]�v_�������i�!�Ћ���j0��f�T���R�d?��'o��VL={�¹,�<��^�������
�Jx��7�+{�O'�d��s�2S����6���Q���,
��xL � K�������*K*�N�T��Y_�;U�z�����ɀ���
���G{o;q$
+��J���>�`��o��6��a�gz�^��~:���_t�%��~D��%ɤ��:
b��3b�%
�9�l�]�}�P������S|	��z��#��TKٜ
+��dU ��eF*��Q,��*��p�>��I���R �G�O삕z�/�l�_���
+yq��F�_9} ����`��2dh �k@�C�΍�
���Ã_۲����X�
+�2��0ǘ�I	I����cr)�Jk�C
dmn�8�=�pj�O��>������
+endstream
+endobj
+2772 0 obj <<
+/Type /Page
+/Contents 2773 0 R
+/Resources 2771 0 R
+/MediaBox [0 0 612 792]
+/Parent 2757 0 R
+>> endobj
+2774 0 obj <<
+/D [2772 0 R /XYZ 86.4 726.045 null]
+>> endobj
+634 0 obj <<
+/D [2772 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2771 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F14 1050 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2788 0 obj <<
+/Length 3739      
+/Filter /FlateDecode
+>>
+stream
+xڽZIs�F��W�6P�	�W sK�����8�\5UI	I�� ���_?o��FPK��
�����f��YE�7g�^��|��*
S+���z��P�b��V���v�K Ry�:�*x�Wy���k���S�cA�*�n�����J��W��P�A]�vt-O**7��O��~������ξ�<��L�ɢ��'1a��j�;��h���VQ��duG�v+��PB�\]��|Mn���Scd5��PĖ�C����x��?��ą��"�.p���ŘN�j-�Њ�W��<�d4F�PCiH7�V~D��)�M��k�/\��6]�f]QW<4���G'�	Q�eq�d�=��k���+��a�\�,v<�Uv.��3D�͙�͍���7g�s�Ŵ��'��B�'�.M�Q�X�)r�h���z����Z
��@|�cc{���^���.�
L��%���
H+W�۬�LH��
Zs��~�����6:t�%����ҩ������q�g4N��{Uִ���������ɪ�C���T�5��J$X�ݱ�����?h������X�+���h�u�l�f�Ҷ�n�*s���t+���_W�/���~�*Ϸ�w�e���˹œ˷���
�xظQ�FB��,	UMth�ꆫ߼��K���ݨ�q�ʺ4��6�n�܊D�~���u�Z���7�SP)

ڼ�+��h�����u0Yplo��Z?"�&><�G��r�m�ͯ�C�ּ+��
�gl(T���84��-��Z�$�u
+חa'ir�4��]5y�r��u�f���씎�0���
��5�9�͌	��ܵH^�8�(M����m�����W�%l*���
�U��l�2��j��6��4P*�
+��
�
pl�
�M�� �&I�h���O���z�&eM� 
���7'��ʞ�v�
�;<��F�Zf�#�34+[�l�����Por>����˃f���Pڐ���A���,���QT`?�-w���r�R��,>�EjA,�/f0��Lw�ɥ�&j@)
mt-rne�&���	iױ�nS
:x
�$�f�nlFK[�mG�KMX�7&O�H��-
7 
�Q�%�Ѷ
+
)|�y��5�j\s�$;��v�UQ��j�DT����!��5���M�eyr��2ষ���Nv�\�y�m]9�8HXL�����^
+I�WB����j9�vɚ=��
�D��Ȥ�ul���#>��t��� lz��
*`{�
���L��2�zώ��\�d�'��"��9�����(���v�*RT�vX��E�՟پ9W�1W�iU��屇"�-˙�����?eJnrZ�]�L ���c]�q
�dZ&	0��&'��!�O
+&��{b��^���vl X��y[4H2=%u����.
+�'��b��' �LM��
��hp̽�~��V��G�)
Jӏ�O
% ��T/P�v]i�f4�u
��
Vn�:3�r���`$K:���R�_:��F�ӂ�ݻ� #A ���o	�C�X�c�
�5,r��Ċ'�	u|�j�>�߂�P���q��²IPt|f2۰xֶ�
+[��[�I�4~��Ie&�.�>wDD��8�]W���I��NS(���5p�}S��1s�ܚ^���BE!��'�C���#���P<���X�x`�Oa�M,'��C�(�U0H�n�p�l�o�=�A_�SH5���; c!PN�9�Y��S�T=f[���=�Rm�웽�~�_N�h�,
�N�s�YQ�
�%�����򶸩Hv"�&GRr#��͡�-�R�h�S�E�B �����8Q���8 +��u��?��Ir��5�&t'
���2~���Ý��?�	��R"pv����I��f Y�]���{��?�n�KgS'�pW�s��K�LF�)�qf`{(������!�<(9q����PK҆*��<}<O���yq-@��$%�5*R�z�J�������>��|~B�=��<�
���h�f
+4�"0�-��[�Sl쓌��瞠}	��%q�8�H&�'�sH2�q����B�^��
N�wK�;�D@H>�������5��,d+׆�6r��Xp�8c���7�$ Fg-7�!�=Nf at w��2�1n���XT��c��'��"�6�<�p��/�V���l��T#;A�s���.g�A����X
�5���
U���%���qC]⏑��ST~F� �i
\�G���.KF�,1=.�"���{
+�š
�q�U�.��q��rX����P�	:K
:K\v
+n0�3�o�� l���
1��a4Xv@
�Ga,�T�F�Mkn��
+
�a�a4
+kn�b4Z�z1�[i�_�h�Ƙ���l�T��>-�N�
W
a4��
A���'#JLH���o�x�����q�6��}
+�Ah�����01��FX�Fn&z�e��m4�Lʤ>(�@ۛ�l� �ZtR�0����)�r��x����gv�^�������n�k
+<�?E=���	#�W���.��
+u>/#�s��~�`�C@�$�I at O
'�=�b<8���y6�3�"Ѓ�zf聻Q`gY�G�����!4�B���&O��Hy��->�h��V ��V�<_��@��_p�Ň��>n���7/�['�l�l��k@婒��Ň�׈!~��]k?>�nO���0�%ɞ��XD|���%E��-3B*Luy��k�L89�z��[�֑��H�ew;�>��co
1��`���_
+��!$�7��b���{V����" �� S
fx��f
+�a���<ຩw\�i
DN��1"+��='��]�7�U)��;��Dle����u	�{�6��B�a	V ���'��0��r�O
����~�ć
�v/�On�Y��y=��pq�M�G�EN'����V��.	�=2�C
`0@�"�Ǖ��-�:o�ؒd1ҟ��EƘ+�

(��]�J*���B�q��(c����T����O���=���lE�ND��
T����*l�ʥKlxf��j��I��%3����_'�9'v�7C�^����L�؍o~�<3?�2���`�V�Jt��M�Z46�?�e�č�#k�2�"&J��OM:9��{�k� y���W1M(p9(y
+֎i�Q@��y�@��ņ��q��8�p�LX�Ǿ�ؘ��KQ��P) 6t
��;���8t���O*B;d�OX	E=�,dn�;�
�Z�Fܚ��8l���8� ��$c��;-7,>!���}Z�ٌ��%,
+����s)�e��u5��8�o��W��b⋑��ۓ��LM�
2bNGg�c�l`���������k�?��`ݫ�
�s۳��W��5��a�]s�x��(���
��l�g����4>z�A��1����`��A�h����#BAq��I�b��6��︄�p�XN/1ؚ�Ŕ�Qz���CK�z�� J�y�Q�p��-0����`
I��q�a�ǖ�W-��� TYͨ���'}<M(7�^� /�q�O
�:' �0
��ĔL@,>[���9ǿ��϶X��:I<1���G��<I������M�
L�
���$vYB �2U^�E<�3bX��<
�I@C�)II��?X�N6��Z�QF�&�KQ^���	�H�͸XXu-��z��7�qA��]Y�_���
��%A�&gNd��
�$}�)e�����/1�zr�g�SwH�`
+�M)�w�@M�i|�-�
��ܠ������G�
+endstream
+endobj
+2787 0 obj <<
+/Type /Page
+/Contents 2788 0 R
+/Resources 2786 0 R
+/MediaBox [0 0 612 792]
+/Parent 2757 0 R
+/Annots [ 2769 0 R 2770 0 R 2775 0 R 2776 0 R 2777 0 R 2778 0 R 2779 0 R 2780 0 R 2781 0 R 2782 0 R 2783 0 R 2784 0 R 2785 0 R ]
+>> endobj
+2769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [442.313 671.562 449.287 679.975]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+2770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [454.661 671.562 466.617 679.975]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+2775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.616 465.467 204.081 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+2776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [346.248 441.434 360.97 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.066 441.434 379.789 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+2778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.489 441.434 415.211 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+2779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [88.171 384.815 95.145 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+2780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [99.563 384.815 111.518 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+2781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [115.937 384.815 127.892 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+2782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [322.99 334.381 332.455 346.336]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+2783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.012 310.349 471.734 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+2784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.069 310.349 490.791 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+2785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 310.349 526.596 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+2789 0 obj <<
+/D [2787 0 R /XYZ 86.4 726.045 null]
+>> endobj
+638 0 obj <<
+/D [2787 0 R /XYZ 86.4 701.138 null]
+>> endobj
+642 0 obj <<
+/D [2787 0 R /XYZ 86.4 427.963 null]
+>> endobj
+646 0 obj <<
+/D [2787 0 R /XYZ 86.4 283.85 null]
+>> endobj
+650 0 obj <<
+/D [2787 0 R /XYZ 86.4 187.989 null]
+>> endobj
+2786 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F16 729 0 R /F8 741 0 R /F48 982 0 R /F49 983 0 R /F14 1050 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2792 0 obj <<
+/Length 3235      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks���W�*�ʄo��
���Ֆ-ۢ��U�=�ȡ4�!)ϐ��_�n`�$��H'�X�!��}/�]��r{�򂫞%V1ջ���"���%�����g�>r���	>����ջ�7[�_֟���x5JJ����7/�ף���z�?���e�e<�T�nݲO�oC87�S���vv~{���Q�V�Ib��gg��&��o��pkz_ݺYOpK<e��٧��ͪ0-V)��G��,%T+�m��O�8+6�����[ε�E'������RKe����Ǥ x�ˋ�j���Ȑ[��/��Hdl�`;L0X�N��0&�
���C�8��e��g��򩒧`�3��]Ƌ�4��,Ԇ������򤅇��?�gD�ڏڇ�����*�'q���9�A�e�O����2��%鼔�mPiU�e>��?�&i
�/��z��"�lK�K���ZY-�h`�!�̹���Jy��HpN{灝"[���~����y�f���6�2��e������H.N�@
��B
\
+"��O�x��aȔ!� �&�����<�oe9`��u ���/S���K�:��1O
��=��H���=X<��>��J�������I<Ir��;]�KP:�H�D��&J���p�u[E`�a�+E!�n�8�K��ɗHaRJ���H��h;����r̓ёn�	S�>�c�ԿR���2����>���_�.h?ɦ�v�S
+q�u��G�)͊}��
0�$A%�
�b�_�E�_g�2���i�~S\�B�Ydž���պ��ʣ3۠�1B��'q�0 �)�SoJC�5xOҦ<�8���"�LG~un��2�<q���o�~�?XK��; 
� I�
�_�
+0u7��$��H�d�?�|���5��͔`%�fۓ�K��!Z�U��'��Ͽ�;Dr

��\~aBv��xs��jt���
�z�Sд*夞''����DN�������r���?��S���rz�=AJ�R�DN��ړq�������!l@!��S�� |p��'�$�=�
+�Eƞ�O1�.
1l�YQ!��d����xq�̓<
�������|�B.����ӄiz��V�.���(�T�
+u�Cd:خ{������՛��R:|u����b�w~���ז5��5�1-�nZ�}&�<��MTX@�'#�>�`p&XB���{�g9�,	�� ת��,+��j1�
2Y`!
�(�/= �ú��O{Q8�ָ�n�Ȓx
�NA�+=J�|�EˊA@��
+�B�x
P;�l��67o>\�n���h��C�d�[ �+3x� Cb �9W�
�(��Q��������D�
3vj3����I2�<�����=8��">�ƃ
�_]?���T{��
�����aD�L`�ѧ��6��}�"J1�:W�$a�3q�A7�] l�-X��:׬�U�%_���
(G`D���?RM$�:	n�
+(�YTZ�� @u����A/�u�f� �P�XH�Bc,8�(�I��ŭ"��%>����;��%���ߕ�(��)��)��
���,����%
qw�I�,�c�כ�
Jwr�`G�U��*�`V��[�
�ðp`�D��l|k<Ú��-F#�\
b^�׊h�͝	�n���]�m�O����=�4�f�U�����<	�A	���
ИК�N�2a ��5��],?�ɾx�"�"��:���v��V;QU
��;��q>Z��C���;��D7P�:Թ�^�I��
+�-_�~4���9I)�A8� BSu
+�Y�@���0	�(������
�J�
w�~�>��`��
ue�)Ȇ�O�v�~�k��GA��� 
 �xv��l1���rM�e��n�����>������&
� �PGȾ���P���'�2_|?(���sy8�
�M�C��q
B�u+� �0n��g;�c�H��h) Y³��c�Ƶb�C3��YZ��dd��K���4(A
��s�ஆ6�6����q��i���/�H���l+��Z��QAhډ)�0Eە�#g����#2�ym��<��"�<�e��S�j�}������v�
��0�5j�һ<ο�M=fv3a�����,��}I*ڕK�%
KJ�#
��S��3�56@����}��W�G�Iu6�4� ��,�˒����
�W
�װ���ӫ=#z�̔�+��*�6AGH��ıw
�
+��}\[���
+�i�Β٢R�t��S���Н�G��)����[\C V���{���u9�l���?�B~�����͝�l����A#"��s�A�$ڳ���u�,1�4�
��Y�|(
l�
�"du�
.�$�DĶ�����۶���VLJ�L�����
Q�N$���D�y�ƽ(V���^�K�f}^
h�(	�>`�o!C��  "v
肢���lb�Z����b�t���.�C��������$����rt@p�  �X7+�X�R���]��l��
0w�~f��Z}�c�ʓ���%SG��7Y\)�A���Ǹ��fب���Y�s9Î��}����W}�Qc�)�/�5F�����n��n�&�tQ�(�_~_����n
�s!���ξJ��O�U�6zJ���C�e1��U�f�?ԡ��vƕ �̋��� �F] ��P�c�#~��H�w|�Y
�\qL����K� � Yc-�=]��t�gw������ё��#�\
va<
-�8
0�gTKh|�B�
���� ���
|�8��$4>@�i&
+��
5
b�q=
��a
�I��Z��%>;�{��
�����{<�YJ�o)��s
���8[M���r�Jg�Y2,�'I����ȱ�_T�A��/��T���)���xyk��ջ�,��:`�����G�����`���_
�p�~=]e��$K �c�"���N��XW"DABV���M�_iH�P��<�)�_E��j���
"��a��}l�
7Rg
<Z��4�o��ILb�
ud�j&�� �]
�m�1�PqP at 1D
+�C��u- ��J���8SV�&x(�Y������v"AQ3��^BN�Hѿ[-K?1����N��ˇ�|P�L���I�{����Q�0
+S��V�c4;�����u�KK4���[5���Hcs;�!�݌:����N�3���p5�ST
$��:/;��k��
T�L�Ի�ڝ�6�k���/�
}��~��`�
��#
+��)�?����
�b���CM��

Ӏ����Þo��.L�v�.
}�g�c�_��� �F�
+endstream
+endobj
+2791 0 obj <<
+/Type /Page
+/Contents 2792 0 R
+/Resources 2790 0 R
+/MediaBox [0 0 612 792]
+/Parent 2757 0 R
+>> endobj
+2793 0 obj <<
+/D [2791 0 R /XYZ 86.4 726.045 null]
+>> endobj
+654 0 obj <<
+/D [2791 0 R /XYZ 86.4 214.187 null]
+>> endobj
+2790 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F14 1050 0 R /F49 983 0 R /F16 729 0 R /F11 787 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2796 0 obj <<
+/Length 1564      
+/Filter /FlateDecode
+>>
+stream
+x��WK��F��+t���xz��T�Mv+.;g���A�إ"`��
����H �xH��Ѩ�Տ�����cD���͠��������(""�,Q
��8��I�<����2͓>7<�Pdn!��y�.���"��pg���b��+/���}(�ph:�|��?^�}H>��~�� -�ԖHb��F����4�7%ܚ蛗�E�[�p�G��=���D �J�֮)
�
+�Y�	G��x����2~����>,g
|B<^噳��iD�F}0hIP�{hF�Q�P���y8z�Uā0)j��t�0��H���
gA.j��[��OD�A�h�3�h�VW���i���e��t�4#��C!�0�u�}h[�d]�ҫ�F5�-�Ӯ�B�dma:wx�Ɏ{�5���5����ӋQ���䵅�<���8+B�R�5��t��g�l�wZ�>犠0�ǃ3((�r�p����=E�m�(Fi�����2-0
N<���fڿ�(�a�e�Ba4&I_�%Xs�e����<��2��3������1|\��pb:/��j�~���	ڶ�Ȝ$��\T �Ȭ��y<��
̨�T_�Y0 at 8C��>��VfIH0�e��vhƬ�ѿ̳l�3��r����,;0N���:#���fU�]w򪇮q|�iYd�$�����	�պHg��›������~3] �٘�8[v�ɉ�]f"��x�*�B0�(��1�6-�:`�Q��� �D�
+'��`#�Rl
�j������� �5k��ލ�񜧣�8��;
+Ð
�t<
���t�	!�Ŷ�����IM$[� ]w5�,t~�����7��)�з��d5�%��E�-�k"U�-*
��v���P
�F��WX�g��!�y���}��ʥF/�b^V��:Պ�_տ{p6�K1
�c�}嚷�����Q=#�|<f�l��^y�5JA+t����up�����r8
'/R�
#qȒ�@�|Պ@  4�)d\�s����
�X����
@�DTU�]�$��^u]J�`wq�)�V�,C�H"�#�����[f
y��v
&ˬjdM�5a���U�� %s9�&HhS�>��3�K��}A�
���~p� �����I�9��1�Z�Mr�I�X��k4
+�f��\�i�;
S,P)��!��Xp�G.E�Fڨ��>R �%�2H���g�L�U���o��F�E��5��V�Et�1�SM�2U�}���ʛg�5՗�G��Co.�5�gR�n�pԅ��F���z��;A1�� v"[��c��3~�90~wn���fM���*���~&�s��5�SE7�?J[�]S~ܕ��*��4Ď���0��?���^J�݃m~}�{�Gt����1��a���P��,kۑ�W[��CM���a�B����������!�G����P�����:�ߩ������p�W���X��<�8�
��<<��#���Z~"�?\M
�y� �|[��ry
��<J7���{ ���{��`�V��M
�P�淩��Ώ�![�w~���>�.�:�.p2DO�p������t^R�N��	�!-��'6�� 	s
�
+endstream
+endobj
+2795 0 obj <<
+/Type /Page
+/Contents 2796 0 R
+/Resources 2794 0 R
+/MediaBox [0 0 612 792]
+/Parent 2757 0 R
+>> endobj
+2797 0 obj <<
+/D [2795 0 R /XYZ 86.4 726.045 null]
+>> endobj
+658 0 obj <<
+/D [2795 0 R /XYZ 86.4 701.138 null]
+>> endobj
+662 0 obj <<
+/D [2795 0 R /XYZ 86.4 529.11 null]
+>> endobj
+2794 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F14 1050 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2800 0 obj <<
+/Length 2803      
+/Filter /FlateDecode
+>>
+stream
+xڭZQoܸ~��X(��4)R$u���������z}�we[�V�J��ί�
���]��
� ���3Ùo>R��_�����O7W׿H�J9�:�V7w+��Zi3��٭��|8
�)���UO�2Y�a���Л�k��W�3+$����_����gz�5H(����Zˤ�/i�c�E]C�6(Ť �Z�[׺շ��ؕ��]�,ש��f�Yy ��ɓ*��z�;z�:5�3�:�%8g��A�������U�e6L;�Y�����r��~����(w�sK��JV�=�

�%�L�84�O��X
^�"(˓LJ�.�;go���d�j#���^E��
i�g�����-4P��E��a��u��u��xd덒��鋽k��	n+����&pT�%>>��^G/�
u6�p�ʎ�j�؁�} ������1ؤL������P��N����U�	;B#}[E�e��H�,m��
��`{3�]�6@�D&��Q�/��L��u43ڜā�spE��Hl;쪯��X���
3u�yW��W��ٍ���-� �ʾ�y ������C��]���>��b}� ���l(:v���.��i��*zB��
"��.�TƓ��
��9���&��7�8x�:1�߿k��7(�7J�Ք��W��s�ӌq3N�<�g��E�ay����A�hȒ �3
@�L�%f�� w2��lFw����F����ۯF�Ur��\���g���-�|�!Kҷ����e�`�^.��,j�b�]q.CdL��b���{�p�i��FZ�c��D�Ĉ=_ ���m�����-Ůf2-t��`֌�q�l0�DT�(���I@
��8�
���֕
+�`�?n .�)�����
UTJ&�%�=c�N�ź��hר�	G�������0�<�Y��P���j��M���pE��?6r�ߠ��X�35wL�t�qW�hW؎ݶ��S�-*��+\�(VCu��bG����Eq�� ��@���M�J
5���Q���
���D� �/U�����ہ��&jS���
v�
��
��+�C�=/a7P��?��o%�/W)h���o
�r)��
��Ź �V� �2����I1�*���I#t���`
�y��_B��]�/���6�3��#
%���
����#*�;\�E9Q���\,�y�U��h
+�J����^�

+��p�C�[�#&��C��]�H#��� ������:�	���,{��jFY��<�!j��;����XGG��rl�G�"pr&�t!"V
�0%䏌�:�����)��#Ҽd(4;��9(�Q��rX>C�ؽb ��6�!R�Ӧ����R��dU ;��mW.JQ�����>����*V���(K#�cW���w0n��sp��	^�Í��jN9�:{m�6)� `�k�0�^�=V���=�3��=�
+
+�ߡ��K
��6�}�Y'�����"޽�M6�䫕[L(tD�7|bKa��S+ވ[
�e����=l��Z;Zkso-d���ұR3��Efk3�P�o/�(
���*��"Ш�ۮ�����
+}���/L>:������C����UX%2�G%�Q����F�j�]�gn=^-ݹb�#��;E��u�l��ˇ
��H�a��2\��L���+E�&���?W^�j[v��c5��e/98�4<,y�2ev��	�1Q4�V��
+�2�V
�*6�
���b
��ڗ쵪�I5l���B�=u�ut :��K}�퉘j�Hn6�E��R�S�����M �8���z��O�qh �x�n�H���D���@K�]ȧ
׎!�z/���j��N��A7^���������d�3��1���r~
	���L����X��B�!%�ŝoUεs��x9UB���H�N�D81\kn�c�Y�N��Tu�a���:��
 L]�v��YA
+|r]��_!�,c��{�Ry�[�Gd��p �QRR{<��
CW�A�r��D�z�^BV�m�O�4��_��
W�'�)�ΫD�>CCz�K���u�mn���K���S��%����7��9�
.�QO����
nY���"|�1�g�
�p���*��3��Wdx�wy*(&&�h��vs���Xe�edBi�����^qf�`x��0�w\ܧ��۫����aʆdn"�������$
L]H`5��8:�"��#�&ٕwű
��/:[J��_ͼ�@0adA���P��uB�-
y��,6ͫ{'�dB�o圑�[mH�,5����
?���)��x���;k3�ȹ?�¯qB��a� 
��|����׾M��"�G�g�$�|*��
��#�3��Y1��
k�N�Nh��B�)�BG�
�ߍp�_�(�vؠ�9���
��
�
ߙo:�Cy����|�!0�ޑ�'L��8��Gї�����G9�����
+oQ���|�����^k{�u������藠��
Uv�[�77��q8
]����/x�*�C�m�d��˦��)�۩*!ڇ��ŻO����;,k�2
,}	�K�<�@�w �tU
xv�W`3N#xq:��$>E����~B`&�M܌/\,sg.bp����t�`��,�wZP>m|�V���9N�r��&
�#jg
��h����!т ,�w4��#�h=u�o�4�ȶw
KU|����^��Qx�P��S,�Y���O�L=�j�қ��wEr4��rôTK)��|u�R
��Ux�m�I��������F��S�|A��>�b����z��T9�v|Z;��Z���{���;J=�#���'	�&������*?�rp4~��?4�> �����
+endstream
+endobj
+2799 0 obj <<
+/Type /Page
+/Contents 2800 0 R
+/Resources 2798 0 R
+/MediaBox [0 0 612 792]
+/Parent 2803 0 R
+>> endobj
+2801 0 obj <<
+/D [2799 0 R /XYZ 86.4 726.045 null]
+>> endobj
+666 0 obj <<
+/D [2799 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2798 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F49 983 0 R /F14 1050 0 R /F63 2802 0 R /F36 740 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2806 0 obj <<
+/Length 3393      
+/Filter /FlateDecode
+>>
+stream
+xڭZ[o��~��
+
�,��.oysڸH�&9�{R��-�l
S��K
���3�%���$@�������7�U��[��^ޜ]\�d��y%���"K|�H��OT���,���<Y��@��w���^_��^�T���Ky�rzkl=,�w�_�]_TUїM�=�{�6Ј���
�Y�u��٫����B�$X�����t�X����+Xl`�E�<[<Ҽ�B�܏�U-���}��d#a�*HI
�a�0/�~�6�ze��r�C�U�`
8��f��c�����)͞���f�}�CYm��n�
+�\\��(�P�Q�����PoJ8�g����σ��3��ݾ2
�X�����9�R�Q�U^��o��Ɲ�(	@>+`?��m�o��T��?�8��;�_�^	�(��u�w��-���3�1tf��E�=�tE]�(�'�fy�y�ۦ�1�"6����'
���U�_Uy�mi:�
I3쵂H�#�5�����
��`�+Z�/�}�)4�k�x�c��Ԧ�z
+�͖ǻ��%@�H�,����me6���^S{�����'��
��s֭)z�?�
zY\�s�����׿ӥr�13�k�6�	ޫJ�^_�u��԰�*��H���N"
+`�.vD"�31�ҫ%Xt��-�	��^�
+L��qc7�P����t��MG�I��f4h�+-ЌG<�*XiP�y�w`VY��
����.7�w�kڶieۢ������Ό���-�x��A��4h��� NS}��m��W�T�gV��
@e��ߑŃ���H�v@���У=G�
�)d f���V%�b�6
�g�<� ��tKOK����!N҉
+ޛA拁H�ou���-�l���s�O��<�)^�Z蝳� TI�
�}q��~��|D�1U���)���i���)��=��r�IWI]���ߋ��	,{�5�{F�pɶmv�`?�X00;RS�һ�"�&*p3�j�d�yf�ٔ8H��\��z����y�K�|�8���^���]"��ꞇ
�OS�2�/G/����2�m4�[|q=\��/?ZUP��(+j��S�Ta��t�J�?�P�5
�
i>�洯���UŽ���,]a6;
{r ����eP�\y�'s�v�u�Y�h?�����I�IE���{��
zV�z��Y,2+��A�} 7���f�/+���޻Z
y
+���
�����j�a+�x�
U�ľ��F�� *oM��e�N
�`�d�8�F�4�%R��&c��
��$�W6z]��l��"��B�I-�����0�
�����A�C'%�N�q8�y�(��h�6=n�O��B��~��!J�@�j�^��%����4Dk�� 4�� P=�$RDw�����<l3䡒�}�[&ޮ Ξx��$�0�|
��xpSv}[�h��y�� h)��f�'`��	Rk:�ߝ�&��z]

�f�l�'��� �INzily��
+��,%�l��<rc�ro
Q��Z
�N��D�#~%6���>�9VH@�kq�@"x�s�Q��bF3�G
��
EO.���Bz$�M<�D���v�e
��e�n�X� �
��F�}�qq������M{w�za��$H�"�_@ȩ���d��IB�kQ-fEC���1��[��
�l�ʧ,�
pb�]D�8�d��W��o3 Fm�L�4lFщ;��+I��� Eׄ�z�A�Iʉ���$|O'ù���`�+�K�PB7I�nL ��D֜�ULG�o��sql�x�
6&
+鶕��$��d�vB6�v"���dg��,5(Gsm�aLw
A���/�^~��/Q�t�`>��БJ�ث��n���T�
:�u�\!�R_�`FVKP��
��M��}�믈<B?�s�f�,m<����� ��^K��J��"(��A�@�(IѴ
+(����
����2��{p�MK�
+�B��2�J&���k�v��M)(68Sh��m@��ޛ��i�Ӿ*�%"�ky�K �/o�ަ-�#�ǟ���<��}UY$V��>';��m��%
bt�v-�uX�Q�N�\l��c/������)���j蛾�,�2�,>@!P�D�/wË(�"Tml(7����)?�,�PbC��>{]��D6�"ʏ�?E�Tg�ȟ	e�
��gZ�-�6%S��$;L�~:x�oq��0�l��I
�郈���]� ��_5SQ�&E��đ���M�
-�@@�F\�X�]�͙e�NG[i�L��^�}�=p����������y�nN�G>X^`��Lʖ2H-����T��f�ݕ��-��f�L?���j�e��GhIS
�T��
�=��`�~��35�B��?�!�ttfNJJ���1�\:O�8L��n�#�J�cy��P�R�q*<���Se�(������L�����3���s���ʧƂ�@
���bBQ�
+G��Ta�N�
��f[
 |������QS$�0��`ga���
����)1W��(gL�uIC.������SO�OlyTar�!��B���B��T6й��W�1S� ��$��K�|�� ��JNNd�>���O�1ɿ���j�Eu"��$g�������W*�3;j �o��2�;
=�:�1��@����/�?�:~_	C�`�Q
��y�&�l|b���y>
&̦��*�
������7'�����?rp�@���~��+�,��
i���KH�A�0��9j�
�\:i�����
+��ݯ�Dn~�|;�}� ����4�6�ƙ�޲�'����⃂����Fи��[
��8�-ƾ��G;u��G��ӑ�I	���z�gr��8LC�&
{K��S�$��`�ү+I)\�N0}Qp=�����a̲��1����@j�������%�^M/uA4E6i!�(z�{�����-�-�H�N��!�	c�B/�G���`R_�߄�*��,)Y�'E���e���Î����b�2���L��#6*[�;U��`�S
�|��G%�B:�5����}[�sD"!���
����L�z
?��y1{J��@0(��4�נq��{@�CM�I|�ޔ,�x���C��u/���|��w���Uyn䔊8�ɔ���F�Ѕ6��FIź��U͊�j��
�ɨ鹸q�,xJ9�^��G��=
۷��O}������u�!3���h��?1���A^+�ro��t��f~�M�t,�
|���@���|
�)����ǀ�-e�j�1f
g�N�
�C =,ί��ՠ��-!���s�bj���齡wky6��'=��ydG����G/�g�ihݭd�h�ET��&f�v
�{M�{��0 k1��$���4���⒤�a�u�
�{{���J�N�
�T�o��*s�}P��8Z	�+
�4����w
�.M������0��G��e�-��4{���W���H���
+endstream
+endobj
+2805 0 obj <<
+/Type /Page
+/Contents 2806 0 R
+/Resources 2804 0 R
+/MediaBox [0 0 612 792]
+/Parent 2803 0 R
+>> endobj
+2807 0 obj <<
+/D [2805 0 R /XYZ 86.4 726.045 null]
+>> endobj
+670 0 obj <<
+/D [2805 0 R /XYZ 86.4 616.479 null]
+>> endobj
+674 0 obj <<
+/D [2805 0 R /XYZ 86.4 346.598 null]
+>> endobj
+2808 0 obj <<
+/D [2805 0 R /XYZ 86.4 161.836 null]
+>> endobj
+2804 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F14 1050 0 R /F38 785 0 R /F48 982 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2815 0 obj <<
+/Length 1660      
+/Filter /FlateDecode
+>>
+stream
+xڭX[o�H~���e,œ��T���6��Vm�*�} @
�������L���K2����7��*���������@!%�
��A,"��d$Xf�������,|�>��3拫��3=�âl�d�Nڢ*�
q�B��������r�ό� 
�@1�A��}���
V�1�f�&�L!
+�up9�4�NQ��„R$�"�D����������EZ)��|�U5��X�
���8)����Y1'a
�$L۪�_�9�ۛ\
;9�!� 
+/��6���n���y����9�����M����ơ�jkq�b+���ܭ�6
���,HLv�(���F`2#����Ϊ��N�R+�k�D���1��y�j�y����[�򦨽5m��Y^�e^'�;]������_�5��ur�v�a�'
�8�wY�;#FBБ/�2rY&1��9d��#{Ym�:xڔ���If�ԃemv��C���A��h���X��9���~N#;z8h����m\�$�q��I2Ȥ	�v��V+��>�
(�rS� �G�
+)H �X�LQ@E
j�/����N��kʵ/O�>Fv�Λf�1�b���ɴ�d\@��qZ:��q
p��i
�7�}��Ȉ#���^>�z�
��/ 
Aa##����:�C�"
��:ٮ[��V�.��m�Z���6E��z��ű
]��F�d� �.)�(p
+��޷�I�p�/��4��e�����5�l�C, iX��)!�E�������������C������3�>�đ��b�X�zE�w�U�WB~�/��܎:i�tR�B E��>�v�5-ѻ*��.�7i��&��T��i����Ӿ�j�R�
���f|5G5/����П���QM~��a�%D�zl�`�C*�'O.6*x]%��ݺ0�.z�z��
QI�ʒ3
B�h^ 𒄯w�A�r�:��|!�
+?TmnN��,�"Y�7�[
�0�o�Z�b =�����:����#�'Y�ڃN/��09���\����q
�Gz ��+��vҴ�4́`���l0���~�9�]����>_�7v�4��Esk;���#Iz��l=8Z
�
���ɢ��ʓ
�I�0�p��:0R��۬ ����/��k��O�,��:�mI A�S0 0'H���q֕�f[f&���
Lؕy[��?�xU����ט
��M~w�0f������I�re��Y5�h�@J[w�|�KAKgH`6t˫����qa�Q�x%���Y�=sL��#�P�"�
+^L$�b/>\.O߽�
n"z�B"��P���g�_&��
��ц���s�����wg�����*�
��`aO��a�, B�B�����?'�)�;
e2})��K�,�L
�:��LP&���������6
��?F���#�<��"r�A�[�
�Tă
=ױo��Ne��f�j��IT`W�K��i᷻��aPo�]p� ��D��X�B��m3
TK
+ϵ�
��2#�:f�_���i�� MbM�s
�LLq�uO�1�N5�$�fG�޵�^?��v�cAiٌ�����ș&�Q<I�
5�/و�+gH�z/����P�%yBK��]O�4���	�C�1r;�s��7��C.H�B�(�]7b;ߦ����@*�e�Ҍz��]������
+endstream
+endobj
+2814 0 obj <<
+/Type /Page
+/Contents 2815 0 R
+/Resources 2813 0 R
+/MediaBox [0 0 612 792]
+/Parent 2803 0 R
+/Annots [ 2809 0 R 2811 0 R ]
+>> endobj
+2810 0 obj <<
+/Type /XObject
+/Subtype /Image
+/Width 953
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Length 104438
+/Filter /FlateDecode
+/DecodeParms << /Colors 3 /Columns 953 /BitsPerComponent 8 /Predictor 10 >>
+>>
+stream
+x^�]	�N������x����*�4P����h�ޣx��JD�"%/!
��兄\2OdHiz�
��{����>��g>�
��:�����k��>���:k��X���
L?�/�؁�#{
m_��ǖ�l�7;d8������lq�:y����b��Zp�������=�g"bOru1n��FJ�Q��:����9�r
���
�sh�d�{�{�w��)ț�D�ڻ܉����I,^!1�TB��Eo{9�=	
J�0�L�"�z?ڭ�_=���KGm>�W�
��L6��%&Ӣ�m�ŏ���Ʈ�߅l̡���f>��1\�D7�
J��
�@XH�%��e�Ed�@6e ��d�
��5BƳ�]�A2�^?���\%/��ԫ�$y�����^:nP��t�*�]!;;�v��h�9!<6�����^�~����ۤ�3�uO�d�ܬ}��v1l�Nw�l�9�Y�s7��t��P�X������e�����W
~�l�9�z�z%fET��L��_~m�ч�
O��,�d��be�o�qd_�ڷ}�u��Vm����?����ODϳ$���a
 L�²���w�Jw]�
T�zg ��fl)�l���̒f	QOjmQBE�����_����
�A��_餃U4]�$ʉ�dg�X���:���!!S��&�<���"�1QJ��u:d�R����+z����I��t�P)\)v}{�0씲�)�H7 R|XT�

+\}�ن5`�
����$e�Q-�>&���$.Z
4�bwjyzcC�}
Qɩ��j�[0���v�~����U�N���,���d/i
c9f$44�c��-1�W��
���Ϯ{�Q92>~��L���ru
+���
�^w�8
+�qƽ%;�~[��:��M�γ��S�ݪ��^j���i3�:G�W����#�+#�3b�]T61.�w�ĦqpKtm��>������]Q]
II��N
W��
=�񰰎�����[���	��9�K�~�-"���b��*�8�~zd$��ROU��U;�X-�D�D-�%�i��C���}Z�M���5U(��%�za@��W��zϽ3����C�T�o���\�;��
T.W�7�x�������A��2ϭ�����eK.
��u�9�ݷ8Z�¿�*�Q��+��
+�|��Q�h{ҥ
l�6���pb[
��	%��=h�S�'��d�O��;m��
40��JVN��E�g�(�j|���~�e_�(�3Ӊ4T�^��L��$��3g�	�
%&N*RH��
a۹)T�H��"Iƚh�,���zU7)���*YHԂX{�P���d��IX��=�~�*��!D���\Dʤ�(S�P��XI��)%ȝE
+��l%�hQ }T����
�pa�*XE�EuU@�C�-A
��ta�@R1!VvSn@�b�(������"�C1l/�&D��QX�šB���^D4*����F����tr��ZH[��^ԠQ\?l�6iP�
��3A������m�^`]7F-"�=���5D
U���%
�<
��i
���}�:4t]I�J�j���'8���[[��
(�4�oij���!�@������>�{����T��P�餪��
�nH���>��O�;�M�
F>�DZ���[� ��
���t�N
ζ^}���l+>S�� �C��_�dZ�H �~�sg�u�ꉇ�B�>��\˵���F�O-a��'�"�c�����6}�r_���������g�h8��"]

�q� ;���'��Z#�Y��+~�c��ey*FF�H=i�U�qB�P���Q��'M@��#
OXa��b�e��DܤՃM��
?B2
He���#)=�(!�
++ɲ-�
+[}�6)��)
Ùii�i��
^o;�4�`���H�c]U��/�M���-�p�@Y��v
����S�'
�Ɵ��L8��~<5!-5=-5#
i�ii��z�u�
+�"�h9�)$��5#U��v�zzډ4I������k7�r�a�NI�cwR��_�z����Wo��yqK&���� ��z
&&r��X�P6���d� vE�*��
6&Ȗ�Z�R�6�)��P��dQ�N	z��yAe�}/'"��(!ɒDJvHk�d�L���#�wJ�(u�
$�,\�U�
U�x'�MA�
%Փ�K�*��*H'�(#����Y�\�P��"R� ���%��d�����œ
	N."����� 6J`gQQR���mA���(*��/
+��*��b�X�pɡ�D7���
+p�
�˒X�k��[�2���F^F�
+�,Y.�.�np�qh]j�j�a�+oXNV)o&A���XE-A���}aO��F\G��
G�L٬���~�u"`P0�d� My�������3�|�"�nE��!*�Y���E�U
�IPD��
�4�ku�9�~���dzz����D�0"��lN <��/�A�'����a�6Y�%�k&J�W긤���zD�(�6�-�I������8�?����6|�:KĘ�줾��F������n�]6I��|L������/�s��;Ě�Y��t���|f���"����"������1��� }F��}H3fk��ނ�ʖ聨>�J}�)JRǩw�1��j�|N���^,�����CR���˲���c���a���[�u{�*���2��5#55
��Ԍ�i'���8
+"+���
ɧQ����zBk}Hn��"$ȿ�)$K��"��uP��4=�l�����J/�q�Ĥ���[��[���H�}�Е�da	��2H�zP�
&ip�v
+�$_1,ӂ[=
Qi�p.6�ip,ګ�>�3�Ƈ
$��B{\o`�qSk�Z#M�7�P�k)�]��k���L��]�b�75�|�Zr��u-��
<��TE�B{h�yU�~�*B����7l�{Ყ5�D:�y�m�".�Aq���,����z���T�)i$��S���k[B=�b����Ǩ����2Ac�Y;��6U���1�T���6�]�4D���z�~��U��I�cwS��j�Yw[�.>>���|&X��N���F2m���x�ې��c���OQ
�(� �����
om<�9wJO{��N�uz��̣@l
�_gܫ�x�$G�Q̫�>���ag�}��%�;�+ �L��`�V�n�B���ٮG'cNB�I�z
�W��=��X<LU�2ҧB�f��t��O*`{�$��!��^��=�W����?�5'���̓v*�c�Y�t ����ʓ@��nC�(Ѵ�NRsJ&ia��Q��=����z}���!��͈��8e�}Uʗ����޽
���> [...]
+%�n^>蹱�E+�HY���/�Lj�O_��q'���C"�˜�g�0
+I�L��Qg��4[ ����%�ǧUXT���?9ƥiݱ\�R�1o{H�H����d�c�Jp%��݌d�;���d���1Rki�#�#�nNJ��+1�ײ�^p�W�"B
�#�k!\u�TR�z���q[׬��t���&߿%QNO��'N$��?Oȟ�9�^�%�����-[�+
�4�շ!�"
��Q v�J9�[���	��Q���a�uG0���`
+�YF
k�z?{�����
+��%2��fU��u
J=����(�ᩮq5x��Bܒ�����
Ǣ�j�cO]D�r��@�[��=2!/3U��f��i�ɬ�#|��B���#v��6��t��ە}F��v���
�^�w�y5ҸuX�T��{����t�
�=ĻYGc��Y����]��o����%��t�F�銶س��� ��S{,�*���x'����TW+}�2���Ժ��jSQs�Ъ-eG|*�=Ѱ�i婀���ͺ�Ysw�㮛��o�1�����g�u7v<#�l�'�uH�^�b�7^��Gz}���D����1��{gB����;����Q]�Z�Z��ls�c�֮��Å�?Ęo�SM�����n›�V:���=#�ՠsN��N���	>#
�h��.����>�\�����fM���w��C��:I�)��
@x_����/�j�+�`��<�?��4P�
�C~�������w��U.
+�_���0Œ��S!]�����@��K~��+�)7
����=��(�	�!�[�	g	�J�� V҇�ɽA�W`U
����t� w
ru>�KXn�}�DQ!UJ-TB�,)�	?�b��B�p�(�2�J�m˧B�WЊ���[�%E]H@�d�p��ZJ�M.Q
{���B�"�7g�.��7�1��o
代����0>
	�-���/�,CA��C�u�9
�$DZ�.�إ
�p9�{H7"6�G�m�����z/��
��?�$��!Qz��	��S������b=N�c�2��gI�?�\���1��椚��7�o�
���G�&'ʸ�w����#��kf4
}J*ټ̫J�8�^j�E��sӏ�
��Q����It�$�9��׋��2��@� ��� 
+�=�}ˆ\И�n���>y�3�8
�lj
00lw����n/�3�����F�d���r�6�#@>	��L<��t�(!t˴djQ� ������t���˳
sƐMX��1�S�p��6HM)�r���d��{Z*�
O�����X�k�a3��g���
=�ǑC
���#bŶ^�OZ�8"
+���/�Xu���z������DQ�#G�\�(����HK=v��
�S���{�p��C
>�z� ���8��ǡ�r�F�\�T,
+�L�";�2���T
� ǒ�&�J-�����N��ivОV�$���S0v)�o��L\[4����4��SٚƧf�Iv���
��
6��W��n�s����W�HS��b�ʖX5qM��vn�8�����l��+ZNȓ���Xn3ވdKfl�o�q��鵬���3�-&F�ePg�mqz�-
+�Yw�ڪ%�
/dr5�=\��`�l�"KR.H69+K�c���,�2�)
eI�%�&^.X8��U�=[D
���S�F��r$�5	oMD��1E�I�b�mᥜ.�bT	�l�]�������e�
+�[���mP�o�'��z6����M\�|q���x��Џ�L�:R;.�������=1ˍ&M�{�
��~�;�uN�� 'he7Q=��cu9�(�f�2
���"
͂R>-�ƙ�\�Ѹީ�u
o�|�I�{иFn�8fVO5�ԨR���	Q�
�|j$�G]�6��.��	_�A���zX�x�BnJ
�i;E�X4!�J���5�d(�'�#�H4�5o���7Nyo�R�4kvl�KK=!ȿ�d���p#&2-e��r�nZ1f�R,[�=�e�.9Mv���q\�'�(Rk�!ɘ�#N�b�G¹Qր�Ϲ�~e�dUV}�U�)^OH&$��8���T���a��j=�
cϟǏ�G��Q>�@�$5�
�ӄ���
��X�!x
c
]�	H�Wi�%|N�wBz˿���)���>�k���덕�5._Ĥ���`?��
�3�i!��?��u�h
���Wr�E�`lߴ~���KG5k��ԏ��&���}�U1�
�iV�-Ҵ?a;П,AFC!w+58�}��4�;���3V�V����~��K$���ّ^���؆���uY�R��|���9��kI�
+Tr�WFK��E"mg����u	�s`�nH
����t���>��O��sFq����X��S�+����cN��Oxe����}�<�͒�
6��j�>qYZ��4d��
#�G��<��B��
DO}�FPe�{i�ط
���h!�;��Ig��+��.%��Aw^s�
|�G
5D�[�`XW�u��ը���KE�A����~����ĝg9��
��	(뭃v-��J at O�;_��ؖo1�m�6��Os���~�'>c/��R���W
�c�Q�DG�#�2�-f���C53O���Xmݤ���Q?J�<�>�w�h��R
Rc��������SUǃ�\���Y�ĕ�

�
qLZO�E6���ņ�-v��OmP�K#�؅X��MOJ��1�G��|X*��@�d<9eW2<C(�
*��)
�%X���T�ҳ�5u�v�w�����~�� u�q���R}����֬Vq��=��U�v�SJ���=����c�{Ͽ]��
}����@�jW<���^�~[�@t�V�	@�Z�L^���
+$g���ў�UOP��z�2�n��L?UH8kC0z�Q�H��p�HO���/n4h����,�>(�`�5j�sse���y/���֤[o�+6���@�7qijC��?���Iĕ�T��mS�t{V����r�ʉ?�sN���>�T������wϽ��g[����n�g�Uo�my(c��t����Y�/yC�eZ���x�V�w̨��KB�=omow�8Q�����ь��ٰ�*�c�9�e����u������G��S#�w;+�ׄ
3�}b̓/|y���q�#ީ�����:18����oy���\���?oVPw��E�
�
{c��ٵ��{���Z[�iQ���`)�h�E�Ug��=���b��c���Zٳ鹫&-��؜.���"=��i0��k�M~���F_U��[r�
	�״<[8Ɍ�S�1Qdpe0c1���/~J2
�,H3�HO
1��z3��鬬�J��Ew;��u���Ur
g8��d�
����%�I��)��`C!��Tֹ�42%�Z�P�Eݪyb��Y�C^ �tL?c�g1Z���T�_
7��X._4y]_P曤�Z�ߎ���	�9
U��Z�K�XB5�7��A�p����1)��+߼��_�
U<H����)�k�B>���� �9s�2zֳ�j���.����6�C�흟�*��f��� �]�Tp���6�h�I��T.?�/Ƹ2�EPdU^Ru'3�2�#�#7b�;���VR�jŹI��1+������1�Ѵ?��$�V/���[����
+����O-\�I�*�ך?ؘ����1_�T��5�ٞ5�	
�?k��)��>:k�Z�.t����qc�b�C���b��4h{��\F@�hC��kW��X���=�i�$A���>��NFh�B	����e�o������g�/~:5M�_x�V�~��%؊�_�8M���HH��2Bz�io挄3��iИ�&�����~���V2�4��i��M7���.�W��sjT�~f��O/S�L���
*���pcq&�?-iߒv{��S�����������o�N@�
��t@K��ݖnSqǀ
f������ĺ��ݺ5{㇤���V����W��MN {��$��E[v�i��n�g
�����A�?�>k���&~����ވ}���][�_ޭ��)V��ES iM66|�#_���$Py��X�i�%����{�(�fC*'���P��|;��:ta�@�z�DIa�W�P���+F����|-a��y߼4�������<
+UF.\��p��n��B?z���Q��
��&/BBI��9"c����B%�k��<���>���v�>YW�|^�p����&�*]i�)V+n��T�.Fk��bU�f
�������*j�<H��w�<����i�T�D�	�uד#B�UP�w9@Լd�]�֣�rš��N��Ǔ,z�P���bu���0�Ө���;y\@�@T�D�v �'5���
D�t%S�f_�C�H����ط��>H썱�{.�	#�e�ܭ��y�A���#�v��ة��H��>�IQzl���}홂cp�q
�-ȸ�kak#V��rw
v^��Ef\V�;�
=}��������Ka}�Πy\櫘uO��*�N}��|W�}��`>e(4
�2h�
}�!i򐼂�O=�FMh�d�����(o��Dַ�ˑ<2Y^�JŌ��G
9U�t�@�V��OB�<�Sו�)�1Z�"��"��
OK�.	'�
+�
߀5��~�,�vB��
i0���%� D�5���2�b{\.����%�ȴ����@
dQ�©��t�0W<.l]T�L�^
HMc�6�`��.	7�;[}���pre}��Nݙg�Ѽ٥͛7o*�&��4j�X��.i��l��JWhE���O�}�S���<q�K���owե[���JLY<]o���&uz�{۵{���U�FϮ
t���.�{�҃���.�l�Ko�r��K
��@�hߞ�W�~��:'����U����N�u�z�X�
AF�]yAQ�� J
�v�'
FB$С���tͫ�)�� /YNF��]�^�$����
+?Ͼ}V�����,+ڪ�z�7c��V!o�}��a�vh��-�e[Z�
:'���t#��O�
+ob�wyf˕RDG%aR��&�P�駋]?�ۓ*�JJdI	#���̚���
��l��ѵӛ+�6l��$����
���C?;�
"֝<�W{H��D�¢UV�
�f�w[W�bТǢM�L��|��#����$
S#
���*��;����B��rsS�8O�ǹ�:����]c�u��Tܣ*t�����nod#��w��F+�. ŵ����N�J`�쭏T�q��V����a��}a���g�Q�y��m�u��Q�z\}np\���WK40]
�������x�'���\́�MK�ca���6�JM��<=)(	�jH��[IiPĪ��
ꜮK�^re�$&�
[l[M���*����"ҳT� �ʕٌ�l�e�Zpi�t�
�2ر�Y�^=*m��b��\�M�ׁ���/p�7�����8��!1=53���8��V_�ϱjMW��)�����Ʉ|u�
�8d��,a2�Y��
+�n(Y
m��>��
+`?����	0)	
�2�H�'��u��8|��4�� ���
o���
��
�+��ۿ������,=�� �ܶ��|����(�m4�h$���h��xF�!C�yz旻�
KQA&6*����e��"�X���߽����Ժ������.�+s�R�Tl�P������"�Rm�=���mHJ<����&�p�헞{�����#)��/F7?�C�s;������/�t��O���;�ٔ����-ϻ
�e�u�$�ۅ0	+\d�z�l�����S�6Ϳ���l��|��Uu�_]��6'$����W��=��`��v������g�
�����z�zX�������{ˎ+��6%\ܦN9�zm�`��[�>�v���/��o?x|r2)�%7�\�

�����L.��}����橻`3�q��;�<}g�����I�d4��Р�$���dP7+�
c�=�B���Y���K��%�;�{�b�a���nܚ��
+��� %�}�7�r���0
薼���k_�(Q$�~�
8��Y�.Wy���;�̪o����CyYHq�_�V�XR�Ǻ��N�pϟ�r&�r��('���:�

�
d2�A
�ok�P�n���Pj�,
7�F����/v��_
t]kl��گF��5lqN��

Q�9Qe��
t��ub]$ۏ�{
PO�����죄o�Ab颍W_�#<ֈ�8c|QBJ,��L6T+��:D�]U�ϘD�eFX%J�ay��dI��H$/��2t�2��)H��=���*�J��\�
L�����Ęi��
ϖ�X�)/F�1U�h�5_P���[nn�'��2S���#� [�P�H��(�
+�Zl��>1�o�b�ܯV�&-pAL����s���'G2�!:@���Iœ�%'��Iŋ&/�X�DB���%2�Q�8�$/F�U�?ݗ�|�߈z��_���8j��d�	�%���H(^"Q�)�$�%"��E��ȩF�y�W�/W�����;w��1p�����O?���/����O;wn�v��-[�?p��1�X�zV����O%v���9���������q�$Vn���zY%ɮ��g�Ř�ik�ľ��ϼ{�IH�{ѣ�,�,������O8���us��M
^��l:���<������
���g>C��o��V�_[�[����+^���7.M���ܭ3﨓P��>˶��:gR�E�.ߪE�8�eD���y���mJ��
�,��u��k�jUd���Z��q�	�|q���{����s
^��+����k�����V�{[�P�B%��S21���z$��f� ��O&,}��9�-��j5���:�}���  :Q	�oz���Ο������o��Ǿ��Ճg~���>����;�&��e�
Qs김�p��7mM���$n���HF��{�z�p"k�:m�
�:���5�L^�F�5��Ns���]2bO�Sk�?=�a�>b0
�8��a2
����+ t x}�]�>GD9�n��4"����Jn�afqk�u�Z
�j����F�;n)���	
̳m�V�N��n�����ie5+�d�)��FhѨ��
΀�$ǁ��oZdQ��Zf
�9���}�
j[)u
��!����1�l��(ԧ��D'@���~�ȧ��M�L���}��I�֎6m��S����޽b�F��i����D��� ��h�ӆ-�H�!]2��|d�.2�ʧ�fU^^t��f̱pTF��\zvò�>��FKr.jzژՓP�b��t����f�R�ŏ��
1JM
+���Y�����[�P�Ȫ\�t�ޏ

X��._�J.R+�B���&R5#R��]D����\����k���D6g)PȔ!\9bJ�*\���[�Tb��I�J*Y"�T1�����Jb-Ak��9l_���c�UR�JB����KK,Q��l"�x���"��6a�e�n"?���>z���!,�����v���]�����o�~��g��۵�؟���z<tY_&��U�˨���m�W|��ך#��
x��}�V���x�
���Ҋ����Q�E�W0���1�ZBv�F��3�{�uK׋�W�&�=��Â�k~���^o�GA��U�wo^��k��1a���%Թ�˹	]{��#.O�?������<����yӽ)�bG���g�d�y���7���s��>1a��/�K�K�y�^���
+u.�<a��n����W��n��6Pb���ʨ����_����6�M���
���qw�yv�>m�v�m��ُ\5����o�
}�����޺���
?����������I<�{=�$��uۧO9b�Z�N"7DQ������Q�w�~*��;��Ukfl\	��c�%��Ѧ�|��
µ���5��?
lB<�T>
<��C1�݅
8xPV,�;1]Ms��#de��i)$� ߝe	�/y�&�T�(�j�l@�u��q:u��b���
+d
2_~L
cU-�x`�I
+<���\� �~"����0���K�������q��ur�K�A�~��� P�&b��th�ǁ��ɤ����kԗE
��/v�{����8w��v��
�
�F�n:��)$|�Z@�Z^�X����j�����n�(1�l�Y�#vHcc�W�)����`�k˕Y�1�!&���Ƭv�
�ǎ�1�>�x
�ʐd^Ǫ#..�!֝.y�ԅT$O
*�
�R���L�BE�
%f/Z,�H��I.RAn˞ۨ��׈��X+ɵr�6U.�k�6��k�bb�uQ	� ��œ����X��E(�\��E՚\g�iz
�gȵb��HեU���$$�(]�p�R�K��H�R�˖�Z�t�¥��Z�lb�2(�TF���zU�?z�I+�i�#�=�ʔJ��P�l��2BZ��e�ʔ.�eK��B���r�J�@��K�iW�l�F���,Q�$z4a�x�����w��]�D�b%J+^�h���E��ve7z��N�8����4u��s�ј��7��%q����
+��kt��ǂ�E#E�R�yr׷ߌ�hY]ƕ ����a	�
itv��g��44#��o��q�2����������x��}J��Z��}�JȎԽqN�E�����*d|�N���_�ݴ%s�X�LbF���딮%u�m��Z��m>x
n�mR>L��/��.
�]�.6�1- #�v�
	L_z at NvP��V��n�󛶜�b��vm�s*Y�
�z�IO��ͨ�
z��$Ӑ���gѤ
�������3�����'���Ye�!�˺p��'^��)��E��~}�3)�&��])�Ư��BN�W\��Ͳ�
+BiV�[��(���ޤ��	��xC��m�S���C6u�&�
;�ʫ=���N�z`X'�M%Zw�=1�q\������rMֶd"B���P�
k^�%I�t�C{�{s?�mO���IX�Q
+�26T
�|٘��ā������|����M���G��]ys�NH9<��qa��&߿�j��(�B��&G'iN�l�vv�
]T1֐��7�����6^-�F�0��TP�
t�lR�d���xn��נZ���g�%J�Ȝ�tO��z�Z��&�q��L�D
�,�XY��j�-�8��aZ��>�I�n��1���)O��P�Ϙш5Y�q2\2bS�d1͘��D*�� '
"�o$d-Q*�PF��%�+Z��X��?��X��������*kW��%h�03#���I��iI����,���OP��"E
'+Z�
���
+c-S6��`�b�\�"XA�˖)TN
M*W��²�cM��Z2UEd��+��^
A+D����ƕ婗�-k����~�!���
��כn������ٽ{Ϟ={��ݿ������ҠT,��2[޼�oi�m��錫j���8�������m7�ˍ�Fg�ۨ�x���W�:���v�(�_��!��e���׿v�=�WQ^
�o�
�����2P���qu��+��
�՛��]���K�'_�vo��QB���X�j�(툐�ԢhZm�W��/�l��%>��w����'v�]�����e�仔�D��+ �ʑ-��X��i'*�vE��5�b���2��悙���z�տ'���h�R�
+
+�파���',y`�VL���ӷ}�ZL��M��N�||��<5KpnDl;����-CQ�˲b�}�M�������۪�p���	�����v�R٨<)7����#G�Xz !�����}�룵�����-B~�Rw
"���D*�~�^D�k�$ʱ[�
{������q7$~l��t�?Ѳz
+�Ț^���l3o�v}��[�?���]��(�yg;��z:��#�u��
��������J���mi
T7c��<����R�2)ShyT�^̓�缝�H}��e�a�
�.�I�x
�fX�H���V�-�<�Q7֜
�
++�n��t'����J
To:
��z˱Μ�C��
4��,�k�1="!cic{�!r������ؕ�^�T0n"�^zi�{v���
�7�f�1v595P:)������.{i�RVX�NGT���;�2��ǜ"���2�*��
Ǟ;���G�z��<&Ԡ��u͘���I~��!mjnƬ��*Z����N̊S�
��Mf5��k/g�J�����#g�{������T�X�L����
>,ȭ�P��(�<��3q^����0%K�	l��*(�l�h�dX��ZXk��떔��\�L��e�K�*V�Tr���eJ-S:Y��
+�`�(P�t��0<���`
�Oa��
Q�l�R0T�2!�L�b�g�r�J�V������W�†Ơ3F;�"y�Ӎ&���sG?��
;~�A^�4KQ�k�0�r�/Xr߰7(�|�)�������X�^Zѭ�tBCL��{d
�o�Ҋ��8Ml����6�^��q�T�#�W�o<q-Vv������##˥������5��»�0����+���J$"6�]2F��1��c�
��bJ��O5}F��NH���D���i��Gz̻u�ӭ�?��[_
vEy�{�<r�G��2�嗵��,���/{_Z�?̬���	�y�c¿���mK�]�6�)�Ÿ�>h��K��<�v�Qϊ^,@�6��}#��������^�xU”��N�����/^P~��i���ϻ7J�ﳭR����%3~߈�k�ӨҁU��c�|Q���_{!����װ�c��27ѮÇ�����2�v���>w�WW/��%�����:&���e5�-}��M~���{6�p�V ���Y��{��G�u��س�y
����#�l��
 [...]
M�3l$�aR�? A�bї%IU�~�"�6�i��k�q�	ɩ��IJ����
]�@R���e�-�Yr��]��0��+Q
+�'�Al�83�05o�`��Q
�n/�_r���Q��W�
�GU�XM���A+�w�L�7�T`�<D���I��;����r��rg���›��	��g�����A��[Y��R
�O�3>�
xu�=mZˠ���$O�=���O��w����(�fH3{�
��O���@ܥ��/l��+�G�T�zd��y��
�cL��(�
+I�{<5v~�e�vQ1�cĒ#K
���b�r��H�B�T�~�z* n
D����j[%j�^���

tAݺ��Үt���-vC3�,�����#��3��&'Lxah��?��y.��CF�U�n���n�DaU��LZ]
+�l!j��>
�׆��X�ѝ�H(�x*>\��=�R���ç3&�y��
{O���%"����k��Hjn����o�ɖ���F�����;|Û��r�ƌx�����g�/����E�z�+K6-����b�#��
a���Uِ||��	��g ��jr_ʮ{�Qܺ�b#ߠt�M-zS=��:*6%b�O�"I��DWQF����E���R2v
��.T:��
0ݮ���:d1v�v͂���
�(N�ɥ������)H��Ope�"�8��L%�E"2bRrQW��vه�u
�"�E���u�
dW��\�9�:	�b���Ү�N��"A�3���^
t��,��P2F����*b~0�᧨Q����yd�!ͭ�+F���ם9�
7�~��x�!�����:s��
+���p>¼�

~~=
+WãD�J�i�nc�{�� �eꃾ�PE���_j`ƍ��e�/��du�<�
׏4�P7v������ǜ£u��w���Ѕ�d���y�eY;F:]t�����CR�]��P�T��w��R��~Y�	�,l�-��2vƬ��l�Θ%k�3�f*@�Z��-zM���W4:1�̊%ZԮ2y�
�m<���O���\�n�W���DټS$&�(�g�YBB� ��
@�Vk�X��
+jL=�3$_M��[tHˋ�Œ����Y
����՟�i+���Ū�,qn�z-���q��_�
��"D�>W6zKw��^z�7C&�2�
�
,&%�6�[���'�9�c,Y�e9C����� Ts��!f�?u���кo�:c&�pW�]���4h��ܩٞjERY�C�����z�SEK��W�l��T
X�<A
+T��mӾ���6♋
~�sU�x
'���A2��
n7P��J�yIJXS�>mW��}�@��}����Z�0�1l[�L
}��.J��~z���ogB��^
�&h�h��
+\��!]'��Վα�YKVI��Jc��	�^H�i�HuiX���i�n�����v=�+T_$�鲺n��J`G�����J��`Z�Q�7��A8AE��ųW���1X7 /���:'�r �
;�ُ�~��f_�~���cô����B
�.���
;
;W�6�ق]��aa�P�L�.밪h{��4�g�*�z���h�||X���2�d���RLN\�13�� YzF�vV
���܊�k6�U�1
%~�[�l��T*]L�kن�\mu�㖡o�g��
#5x�Ƭ*ޅ̽�},�F�9Z�
+
�Y����v�q��ٕ_�/��ĻMo=yG��2���-�2B�	�/�1"�a��4*�/*u����6��f�Z��,`Ut�&I���ж�)EdI�D�,J@	��
+��+C�%���?1˺�tL�A�5A

�<�8����e�����w}�p��ӄ�3�T%�OP�+���r�5���Y�^0`I�EFk��G�e�q�T at b���(���LFez{
Blwy���IQ�~Z�z�eCyu�"ۥ�n'���C�l���
}Ǵ��������{7�Vط���$���
7 [Q�U{P�S9�Sy��kM�]k�U�.�EHİ��#&S����A+A�l}����~F��4�4��xmp�s��	~f�Q-Õ��p�(ɷ&k��l�b���PXb�
+?�|�+|
Gc?����ꁥz����2/
|�n��*vY{��=�Hv�is5�
�m\
&���M-v+."q����`̊rZ%�{�U��'�nM�TE8e��VF<�t�Fb𺌴�JQ�YY at JP�
�!Dh�<FL�ԵJJc���*#��M� r!+�U�
<�
7����0UWR
RL4� _[�m'��hPx>+���%+`?
6��졁l�v���Z�k���\���J��z�I(���#�
�Ye���e�J��N�MB�L�����OX�
f��+	��DSZb�XB�;�&͒U�m���X�D��]ꪯqm�U�Kk˩C},�}��
�հ�QI'!�qr9`


�q�q
1�i�rj.
�2�����L�XPdŕŔGA�i�2*���1�aS��8�����d���f���C�
�W�P��j ���r0͠�Q�Rݪi�Yx\���y�ET@)_i:U �9V�V��/4q	�7��C���Y]�t}ʿ�Z5�/���}Ç�Q�
7�I`
��lL��K� x
+�f
4�%��h^�QR=�E$�Q�	�P�UD��ل�z��NG"��UQU�����hm������~����9���W�c,�۫�����N)t���bG�ve�L*F�� )���;����d�ʕY<t�Z�"���^���%�ɮY��4�蛆�59��x�QE�O�c%͋1۝�c�(��zN
+A&c�qn���A�k�>�E��t��J���t�ej�\�+��b2�(tY#lq9;��6��}�9�۞Ԝ:�P
?
\�[�0��t�v'��u^����+�
@2-˟*Q��U���ꇞ���e��RʭW�Q^��
���ԷT�m��i��D6fY4�n�2pD�M�mY�$I!dF%y2�K�(+�$H��{�vu�,Ƭ�_�C�:
$�M:b� ��X9�8?�/2-˨��
K� ��
Ӳ�F�
�@�(�_�
eyJ�WR��v#Q?��C���5]�ɴ_
+�X{6� �������̨��~Y�D��1K�^�^�4d;$Տ� ��7	
+�\�h�)7�|l?����?&����]c���a�he
_�l��|�4�nR�ݧ���&_��.D=i����t<���
+�m�

5��g��g�_�0,"A�BUe
�l�>ޭMx�[��a�
+��Na����G%��[�4�y�ܗ��V�l:���y��8����0oF��"�t���nU
����(�y��e� ��Y�+�Mtٺ��'��[���Z��櫴W\�0ICEU�#C��H0�S�]M1�:�x�)?_]X
��D[zΘ�e�7$+6l	�*c�>�r_J�����\�2����;ΨI��v�yk�=�
�
+
OdՆ��,E
�����c���?Ev:s�y��
3�ֻ�0�+r,Ζ|���C�K�eZ�ZW��&���k*�������7(i�L�/ ����G�+̟�;�_�c�apQ@#��*�F�}d#*ɒ3���S�Ǖ%eU�
`��!J�2j|�$hHbS�UW,��< F��
|���W���B�X���m"�2:���c��{�N��G�Ɲ-���Ȣ�����R���9�;n�������c��1D��0>����⟶
� qW	k$:�sʎ�f������M�е�X��o��Z�
,ե�/A)H3�9V��F��(6���
���
'y�;����45�
7�:�kf���O����$N����G�%�1c;
�UkA���[W�,��x�P%�3�SqC7���
{�:�3 dc�q��h|Q3��-�f��U�j��mW�#2��.�k���P
%f�Qd��2ٚ
���%L�DqhK��Zg�.%���h�e̦��~jB
�%bD��<���
��E���pɐ���~����B�,+@_V���db�M[�4c6�2�{�t#]�>
��G�>q�j�� �,ϋi&rLR$5���C��8��8�{�i��,@��t�����70��+e�9�&GU,�sQ
2�u`1G�Dȱ�KZtTR�Z4��Ƅ�i�1T�t'6l���tT
�
�ZU����JBL at JV�nA��GFL��È�b�B�bɱ`ĪQ�]2oR%֭�g��G�ch���[]t��
�
�49c at s
+�
ZL��)��>J��%ʖ��k����Џ�R_�7>l^!���
͸B܌�����
�0��4^7z;0Ϡusq�:u!j��(j�V�7
y���8w�k���N_�֝!6�-�,�ݤ��#��24��]	�3��tY���"U�0䒳�_p�`�
�AF�\rw�d�}�Qo�u��-��̶g�U�I�����`W�;b;��94�k�>X��Ω���Է��
"�$o�����8��2
C˸+ڞ����=&���f�S�,��٘X��ʰl��=Y�UW�����#�n~!�d]�.?f�1ӝW�Q����Lrɐ%L
,SaZl��� n�M�jâ�PT;i�&��t��^
�ˠ��!u����:E�g%E����W�e�p]v�a�����j��v�k�8Ujn����ĕ�b�
c�A���5*N�Ӌ����/6c	r�
,q�B�6b
�
Ed�sG�;e2
Y������c6H

�T163O�+r��֍����)���b�Ѹ}N���$�������▂
+��q*�n
+5�I�fu���;nz
:
<����t
I
7�`"fL'Cl���sϥ���9����g�:F���B��9��X�����s94��֍(�e����To;E���x����BʐNޅ���yּ~Ǯ���*`S�mP�)qnl�K���-E

��Ek�+�8b
�96^
������q��XY�'jQ��
�*�U��2)d\fa���� �cB�KُD��P�D��n5f͕�ҽoq�&j��֪U�v�p���G��
xJ\RB�3��w��n�[n��o���䰱�	r�*��o��a��M���Y����ʲ�w
+J��'i'�SK�qK�Ǚٺ.�$��#��6�TM�A���/?ۋEi��'���9Ə�C6
$�8����J%����<({d)@{4]&%�J�G��y'ѝr�MO����d<���I_O���I���e�&W^�8
w��dC4�Mv#[܏Z#@V�PT�{��6������Q� ���;N��k
"�L�-zkN��M%��z��d
`�*�<D�����g��N��)B�.��͊g���3Yg���ԗ�XH�X2� ��x?�.� u�
ꦱ���bEx,d]V����v
$�=�Y�Կư��B�u]�X��B��b��
�4�v@"Ȏ�����o��؇X��бD�=���3��G!X���J{�UwYK�� ��nv�S}I�m at _�$@]�֕aIS���T�qsPx
��`�
d-:�j�����*�[N
0Φ�����z�Uw[�b79Ͼ�Ɍ�s_��:l�q�e1h�A�?(��jH:
+��{x�e�#9�eߚcغ��]�qov��q<e���O��)�5���1e�KF�ƽW>����"UD{�C1jkX[��R�U�����g�}?���V��N=%UU�DY뢖
+i����B��U
&?X�?�K���R�A��3���t�
+k���3
̲��T�T}�z����QйP�v?�������\������]�ʭ.�V�h!u!�$Q�
���
�c#C�i��
+A�qغ�(̼�pҷ6C��sT_��U?��(��$�C)@�Q���M���y+6+`�U[�F/L퀄؀-����落�
Y�mg ���go�q�/�Y��΃���T�W���Ӎ���j(�nc��Wf��i��p���_暈[rx��z/���s��Ƣi�����
�A�ES&��9u-ys8Ջ�L�e�~ |E��qd3�ؚ�ˊ�Fi>	5w>����C+�Ү�qT+v<��
�捣���ު[�����X��@CM71�&O��+VH	�=�
����,+��{쨰Gz<�$I���0��1�4/�-b��3T�����K��QǮQDž{[g��9�}�[]����u'��U(|���
�co�����9�C�`��>vEݪ�����O�t�2���O3�̈́r
ⳳE5�
�eg
��w�,(�U5
ⲭK���W.r����N��
�ή��~%�of~�!ӏ�p�r~�-d�#>jf�<w3�[�\0
+��*�̬��֋�M�2Vsњ�V*��D�->}sPo(,V��+����C��3�c���2Q�:9���Ml`�k�_��V����Z]�Ƥ˾\���ϼ����f�3+C��2� #�0� #�0y��n�9s�??��{�0q�B�K����������U-����w��y�o�'#�0� #�0� #�^�6�C����_�~4�u������ʔ	;+Zq]F�`F�`F  ��/��2X2�\p�XF�`F�`�S����h1c���ՔFG��8u�[fF�`F�8�L�>���7l��hSژ��>�A���F�`F�`F�`!`��m�ʬ��
+
+���#��V��\�?�8�7"V̮b��
;	
+��&�
����
̴����	0Of[�P��0� #�0������V����6�ϴ+��r��U�+W9�\���
�)^���yηn�X�C�7i�.�۽�‹H���ǎ�o�(W���������h��*��LH�D���7�ts���Q��Y5������ B�W��It
�3��%3}2�;K����2�2�Vh߹ #�0� #�d;�	��hd��������`��^{�U�T	˻�y3��ֿ?�8 at P�"E�E�;:���'�
>|X�������Yw��1���Gjj�wu��_�X��>_���9�GL��B��Н'Nd�zpE=0���6J�Y����6]��|B5�� #�0� #���tٲ+;ݕ���߰,��V�X�J�ʴ���*����%e������6o~�g6hp�/�J9��[���
+�˓�}��u���3�_u�՛7o�vW�Z�5�������gaָ���͵E�&ϝ;W���������j6���}����5nBu�M���?_�9�����uv��k�FWf�ͻv�:xP�Z�j�}�]w�����B�1cF��W�sϫ��C
:xP�����V���������W^y�i�K�rƙ�.���g�+�		�f�+����Î
�FI=0ʗ+�SP�R%��᩵����sɒ%W_}
����v|���ի���
�5~���扦�_,^������_���(��sXΛ;�q�� }��M;~<��3q�pF�`F��e)v�
>�� �r���
�U��/����7�y��+W���ؙ�;��1�ܟ}$;���o���_>��'C��d�o�=;W��j�7_c����Eo���wf��ka�u��+U"<���c��M~���_~�
eRRV�/_>e�
+l��7��׫W/�2*V at s
.rW	@8)���!�W�Hy�mڴi�?iW�G�
��ȥK��P���#G�;��'��\��)o�uVu]�_
���>_T�P����������
4����_xaĈ�.,V�X��:��g�}��E������I�d�� d�;c>�kZ�W&L����Ӧ���'�
��+�Ё�0� #�0�@!@�-���N�}�r�
�� 3d���`mޢ��9�a�O
��?Ǐ�g��WT�zz˖-�1p��S�dʅ<��{��r����>�x�?֭[���ͺ�s��`�QF�ʕ�T��5ަ���q���?��5�駟v�x�%D4�NJ+�w�))�Q,eŊ�=�c���F�.)\�Pte�U����^���ip���?�����n0�
:�v�e-Q�Y�&O=�$��Z�'��k���5k`���
���ڵEɋ/nЩ�]���P��sj>��C˖}]a�ר�񐠵�9�x�K.ix�95
���u��

�~>��K�.5��=Om@�Twl����0B������c\Põ����)
r���bF�`F@���1ڲ
�_�
�XB�Gs�.��3��L��D澭[�����o�Q�\Zx�!|�?��O�q��-47p�S���?·��
/$ib�mX���ۜU��%�Ԩq�{�	s��+V��u׶QҤ��>6m�����������A��w�iִi�*=ٿ�W+R�>�xzz�=ݺ�
�bh��֮�㎻.�wQ�s�C��(�.�@۶u�ѣG[�U�
QB���k�~8���矩�ƫvt� �֊�R��ϧ�+�z���x(c�qOm@�L_���/���2�
%�����;�O�gF�̎gn�`F�`�0�1=�i�\�Y9�*'T?����q�g�i�R�~"]�����|�������/
.
�
rt[h�R�ʚ�#,����TY�C�3�{�
��"����@H�6k
++2�ʍ5*W���g��fݺ�+W�CNj ���3:w�<��W�

�ꄉ��q�H�;�:�3��9�?��y�%�s"]������)�

M0��̟���=k�����Ѻ�2�w!s
1�aժU#v-x�fB��0� #�0َ��*�~yŌS^:P}��ޣ6�=�fɒ%��5�2W��$>��nK�{�Y���������6X*����?���!�xv���m۶͛7��c�Ƨы�>��������6k��A���9�ȑ?�ؐi}d������T@�۶m=p�@���C͚g�ٳ�
D�áx��˖-��0O��)�֋(��!?�O�s��� D��ex���a`S�
�5j�HJ�Őɑ�F�`F ��f�v��(��)	��,���Frr�>}z�����{���;ڶ��Y�?
=zL<�c�v�����u׮�R�d�o�S�6n����ɓ

+�L�j�D�O���=�؛����y�K{�/�MÆ
��(}D��O?���CrF����Ë.��X��qi����<���˖�s��t���.k�211) at�H��_���;��W^����QϞ=�|j��yA8z{�t��1 B�C@��`ܜ�Q�Ni�#��\�A��k(<��Q���-N�?�9��7�%F�`F ��f�1
ɒ����-^�L���zp��'��y���\s�ĉ�-So 	�.m^��Ŵ^��2bij��~�u�_��Sz�zح@�ʕ�aȐ!�opA=84gƆױC��v�g���G�&���9sҮ�����U��еGz�nҴ���t�Y�����B
?�+T(?zԨwf����_{������!	�����s��a�]��ܹ�q}~ƅ����1�"�t9S�� D>#�c>Z�0����A��6m�Ŝ���ƅ6fF�`��!�ɖ�V��}��W���������/w��b�H?~��F .V�YӶ�M[��
Ǥ�*raF�`F�894��鯿<w���v�p��5k_�|��M�W���ĕS|�r������X-�϶��
jQ��6���O��F +�ӭsn�6���!�PWn��-̕C��� #�0��)B��ŕ�>�e'W&�lp�N���,#���\��-�mb�r~;��F�`���@��z�]�:�L\Y���D9���yzp-F�p!p��
�ig�%3�3ώ͌ #�0� #���I����dN��T�	#�0� #�0� #P@�T�aA�bƉ�06#��w�#w�`F�`F _"��2P�3��>�u6,�]�`F�`F� !�9�E���r������7��o�rƍ
���>ӆ!�+/� #�0� #�0�@�Gி�<�
3���gqe�,��?|>-���=dF�`F�ȧ��}�;v�^�j��ݞ],T�P��/ix�Yg�ݠ�}ĕ�99!�ƕ�Y�HpXp�̕���n1� #�0� #P0ذ�ŋ^uյg׬	Z���.�Xdd�
O�d�>t���ߗ˖^q�7�bre �3�` ƽdF�`F�((|����/jp^�څ��N�����㩩�ǎ
=z���#G��V�F�(��ɘ�G+-jn_b��������dF _#0eʔ�/���3���_���;ʝcF���ii�4i�s�G&�X���. at I?)V�8E�%��`��Î`
+(k֬���y�������'
�^�z]t�Eh��?��J�{��8p`���W�^�v��PQ��nhC\�`��� (rѢEC[,T��$���"Ոc�\Y����B�rF�`�1_~�%H�o����_?��'��eʔ���{���O?�t�ĉ�n���N�R�J���j7�!.�0���E ���;���>�HL��f�S{�uF�8�T�T	�q��������C����\s
���?����OϪ>x� n͚5[�l9a�m�c����a�>��z��
��n=��3Z�
+�۷�G�
�{�\0h� 4G����7ވ�s�9�l��j7T`F w" ����u�^�m��t��Ebd �c��;O2k�0'�bŊ�@
_74
N
��/��bΜ9p� �%]����׏?���_���VpȐ!˗/�6m�G}���߃�f��?��o���h����|8]���[�X�b���`d�b,�`�\� ��7_�ݷ���u�"���۷y�e�d���1
[ƾ\�EV�`��� ,Ǡ�M�4IJ���ݻ�^{�g֪U��\�lO
0` �͘K׳gO�V�S��.î��p�={v6����SO=U�v�F�=��C3g�$����+W�+W�v�lT�E1� #�;�f��C\um�sΫըIӃ���~�MU�,�
s[�ve��<�f��y�Y+F�894h� �ྈ.��/R��ׯ�ҥK����}��
�=��?`�N�:T̕6`HFX"��
,��?\&��D�{��?��
�N��A{�.�%0� #�/8�j��[_%��'%����U�rF�k�_�q!���ˊ+�$Č�`��/�w�`�C ^�}��ƍ?��ó�:
�a'�뮻�����k����G�w�� D(�������e���C#~|zpiF�`�lB����OĂ��\�h�T{�!M��H�Iʄ,x�d�`�lUΦ��bF �"P�zuPdD���oݺ�ab�]���ց�P�p���~�-�ܼy3m�L�"E��ߏ
� �}v
��i�&�
ړ]�Y#�0����[7l��*x2n㔑�8^@q�n3� #`C ��}'O��pl
.|�W�p�R�ڶm���O���[�a�h�%:u�bL��������sυb����w�v�?�m,~U�㯺�*�;G�q���r�-���
+Do7�MpEF�`���|V��+����DWXIF�`N"�˗饗�y�
�tC�	ĠЍ>���O��
y䑮]�b?�Z`bb�=��͛7��U����^K�50��X�������_���6m� FG�|�q���V�"#�0y��b�����o����^N컱A�N�=�c��y�?�3#�0�؏�-�o�9�:pӌ #�0���g�E�╏����ع+�U���#7]T��

�6+8�+�_�V�$#�0xY`
+�Ν;A�njs��78�Ì #��J6��s��ֹ��ZW�wޕ=k��Y�
՚w�z�=U��]�q׊����%-װ
J�1lLݎ�+S	&ʹ�\�R� #�{@$8�C�7��;�D��'�|2��ʚ1� #P�8t,��Ѵ�X�
?p���?R�
�^�����П1H0�O�*j�< ���#�f��w
�nj #PP��ː���c���/^�xAE���0�@
G@��) ��[$���}��8�LF��W����y�\��'����/'�Qn�`F�(� ֐]M��m�GSX9==��
KM��؁�J%��,_�޶���|��M����C�����gF�`F�(�H�lf���+g[���
0��`F�`F /#@�H�9|�$OQ���Y���i9�����n8����<��O�<P��
����Y��ԩӥK����7�{_x�u��=q�C�\p�={���_�z~��'�{�%KpilܴV�Z��`}L
�_��EU.�_��*� |��w�ׯ����F�lذ!>�?��Yԕ�>�b��bF�`�1��E���}�
s��_~��ڵk�Ν���
�J���[(�b�
+lG�
�g͚�I��~;f̄VA�*d�*V��W_}e�
��iӦ!�l�
=
r�-[֫W��c�bv�1���iҤIo����ᆱ���C8�r�������1����[B��{};w�С��,RET�X1����0� #��DkJe-�YcI�i~:Z��+G�ƨT�RF�w�yH~	�n @(Y�\9�\�2��@	�0Z��۷]�v/��rh��>��U�V�[�ƆY��_����>���_�z�g��݇
��W��C �H�{vӦMa/G�.-�O�OKɒ%C������$�c|[@vb����w�q��,��̟��#�0� #�g�0��6
�����
��ǎ
�3gli 
+�g�ȕW^���Z�?���2
+c�]�!|�<+��۶m�����u�]T
�
8P�^=��
O{vD}B��
8�-[vÆ
�/l�#H��U0��+j>�9w�`F��/������
X�ED��$+�\H��
�2��K��c!� ��v����vkd�ںu��_W�
;v��4-�g�ڵ���K~ �t��^͚5�{��ۇm�����]�>��hѢ�Á%�rʗ/
1�HOl�:�w3�� c����0� #�0�m[�S��1�PR��I`N�?��3�x0nܸS�a�]�����)SS����zΛ7����w��a�����ر�c�=v���(��d�b2������S�´�/�ƝbF�`�	*i_��++�dJ�'�hnիW�Q�F�-0�i��٨��Q�P�,b�2���}<�S1��`�$?�ez¨<hР�5k�
=Z+3`����ٳG�t�aT�v����϶�ו�s���;�K�������w��3g^q����4�<#�0� #�G :�$�&��Xٕ�3�ʖ�r��}�~o`p�� qX
ܱp��Y
�
M�4	�֗/_>q�D2�N�0�͇
2���R�  �z?�,

�8�%����� �M��n7T�,����Q��r��
���X�
�+��O?���y���6#�0� #���(��Ö�t�P:O�ܵk%�!j�g�a��1�i�&��ޙ(I~�0�b�1
+�UТ]�!��ͣF�����8+�/Fܺk��a��`

;
Uڶm[�B�3��z�͛7G�
���
�O�8���������@�������
4���{g8*��Ҹqc�Q1cRIx�cn(��0� #�0���
�,��\�U|e���
����P̋/�.��K���S�L�h߾=\F�
IbP��V�m��n�	�����vժU�r������D;{`vhw4
X�A_ at Vt��	r�y��*����(u��s�f�/?}Z�
��
>
�t|���ӧO7cR���L%��#�0� #���
���d=N,v��[7~=~�x~
G���/�����v,���{��3'3!�In��cF�`
+,���{�A�nk����������Xj����P*9%e����z��1sV��X���7]T��z*f��6��q�Q`�3� #�0� #�P�6
L}�a�r-O�p����SQ@�-w�`F�`F ����1ӱ�ۗ.Y�N�;�c���zX�,���F�`F�`�ҹB�X�r\c'T'R�eQD��sW�uc�F�Ғ�aF�`F�ț ŵ\���С/�QΝf�	9k�0� #�0� #�G�S��°�3N��aPƪ�2�H�XMF�`F�`F ��2���!���)ʅ{`�Y��hA�-�"�Y�HY�Ii�ty�нqT1+�B
w��eݺuQz��h�\s
�3����^B�1c� ��Y�Q��{�S�w�޵j�B���>�]���?�DQ��4���ׯ_�#�7l��l(�7��l�

�/#�0� #���^*�5�/����{-
+D���_�]�i�3�gϞ��GI$A�+V`;
+R�?k֬
 �
�X.\��~��{�e�^}�U��ݺuk��_~��*���o۷o��i�?�
�Hy=iҤ��~�̯��.���ˎ�.S��ׯr\#��b�Νͼ�mڴA֞���`F��K$&��d#����d9���qA3�R�R�*U� ��w"�o at E�,W�

+T�\�Q��|����,zH�
\��WF�=}�9�Q
6c{��K�.E��.���
#1��(
���_ͯ]�/-%K���.S�@�J�c|s@�>�"G������Y����2� #�0y��t+��TZ�+è�Crn_|˱c��̙[�B|5#��%8%%%��޽{7l؀�؎2ݪU+͕����_�
8P�^=*�
O�uh��{�
xO+[�,�"�u���=�w8aL,��� #�0�@
E at f���X��n���'��l���Zx2�
 ���޽;�nM^ժUs� �
�	ڏ
pel�۷��M��n��vu��E��\Yr
E�|���|����?6@��;$�_ZZ<��h�XmF�`F�   ]��/��*��Hr�WFT�
s����g̘��q���N����_�^�X`N&�����9P�5k�9!\� #0u�T��
2�wF�`F �# ���O��-Vq0�K��#I���kԨѢE
�g�={6�z�ad=�
���r��Z�*Z�s��s �1���|c�_�>M�r��`T.S��[��]�W�@A��\~�Y�����{��
4�W̜9/o��O���"#�0� #P� 7I��"����D��S�f1�/�ѯ'� � U)H
�e�,\�p�����ФI� !`����grÀ�2�bP���
c>"��_)���uC��b��z>C .@��X��
c�Sxe ��]wݕ�:��aF�`�r�
����<�&�a'�/��=ڳgϮ]�@4ǎ
�h�˞%�c۱cǦM��B{g�$�q�X�m�(
VA
�j���7oF [...]
+��W_}�xfl/�v���
:t(_�	�Dv"�����{�U��ָqc�W1cRK���av�ͲF�`F ��xq��r,o�r� �
��:|�>�| �Gǎ
a�%ep�)S���
�o�
�#G�$�Q��V�mG_n��&D��Egp�|ĩ]�j�\#�[p����z�jDVF-��5?|���ĉ���p��B��q�Fw�=���g��k��Kː!C�|:X@>D`������'O�>}���z�w3d*ɇ=�.1� #�0yiKY��ײ�Ob���n�����[�i_FU���c�&R���00RF���F�`F ����OB�A�nk����������Xj����P*9%e���fO��҇+v�p"IR��<��X

��
-`��0� #�0� #�<(u���
>��������r�%��ٽ�Ţ�I�1#�0� #�0�@�#�������s�h�_���ٯY�D
�ر���t�MsF�`F�`�|���q-b]ȉ|b����R"Ht��+��Ǝ�|ڸ�� #�0� #�09� ��"���'��&W�IJ(겶9�B� #�0� #�0� #�K!0�*2�W|eɤc12r�ڬ#� [...]
+��`F�����p���z�Y3%��
v��eA2��k�"�BrrrϞ=�AAId,C�+V`;
+��?k�,$A���7WY�p!r�!
	rY##�
!-2������/T���~۾};eMCrA����'M����o����ڥ��r���CHZZ�*U
+ ,X��S�N{���5.�_�ׯr\�	C�s��f>�6m� kO~�8��`F����p2ɵ���0K~L��"0億J�*U�R&UV�;�Tyn�P�\�r�_�relGA�a�F�jd�C���*�=�
�2����Ԁ�>�(��f
!`�TF�
+*\t�EP���a�Fa����j~�Ri)Y�$nٲ\|ذa�ɽ�:F��ɗ o%�1�9 u�	�;���qh�̗p�F�`������']-�Ō�� L.�Hǎ
�3gli 
+9�,�)))�a�ݰa�c;��DުU+͕����_�
8P�^=*�
O�uh��K�F�ŋ�P�Yl�B �ie˖�P$��Q�n]�|W�C}��`F�`r)�_�
u!��žL���r#��� ��“!�|�
���{�� �5yYT�V���.|'h?6����o�>�%;7m�:��;���E�-Z��g�qF�^����s�����Iy�{��4�˗�����^`�Y�Cb��i
�y���<#�0� #��P
�
���qM$Kd�2����ϟ1c
ƍ�;���+~��WxJ`�9��r��W�@i֬	�����{��q��A�+���d�i��?�:u*L���/�
F�`F �!���	we��2EV	�"X�	��իרQ�E���g��
O7��'ՃQ^�>
U�VE�z�y�`3�=�o,��ק�U���eʔq�w����
(w�[�u
�'N
:th�}g��9���Fe�A��+f����������#�0� #P @��
0e�ba��a��
D�B�8p�ԡ qX�
��p��Q����C�&M��cv
���e�
�A�W
+r����~��v�
m�Q�f͚G�
	��E(�znF .@��X��
c�6�2��Srs/X7F�`F�`# 
1��p����$��2!�gϞ]�v�h�
;�$`�E,,ǶcǎM�6�!A{g�$�q�X�m�9 at a�
+Z(T3�߼y3�!�h���
��h�-�WV�\I�iEW��E��U��
+��W_}�xfl/�v���
:tr���ki�p���(bq�l�2��8쁛z�פ��{�U��ָqc�W1cR0�O��<�%V�`F�(H�y}�
+
o
�
È����IH§�% ��~t��f]�= M�2e
+�.�@�����0r�HB%ᨀ
�jl;`G�5D��Egp�|ĩ]�j�\#�[������Y���4����ĉ���p��B��q�Fw�=���g��k��Kː!C 
+�0�?��Cp_�֭���\�.(��>
�o{���ӧO7cRi��!SIG���0� #��N(�5Qa햜X��y�6~�����en�wz��~��rg7X+F w"`&�̝�V� #�0�@�C >~��:h�mm�
8�z"=#==��
KM��؁�J%��,_��쩯�4g��I�5�w�z5ϿPڕi�����b�#�0� #�0� # ��e��DfŐ�C�d���@n](��{��EnU��bF�`F��+(��������(K
�O#�uJ�7vld=,]��+k�0� #�0� #p�@�8�nD�caM�a1��
����A
�ر�2bF�`F�`��.�c�T

�y�D��]1�
3� #�0� #�09���H����DZ�-/�(1�r@=�0� #�0� #��$��.�_�����b��Ϡ��V�5k� <-H���
�@��#������O��

���Y��K�.�֭
�S���Sb0#lsݺuyj`(�\ "HT9f�DP^�~��ްaC��?~<	���vQ&cF�`��� ��#���4��)���-�h�|uk׮Eڅ���={�FId,C�+V`;J�!֬YH �
{7n̴|?9�W�.R�H�bŐ
"�>\�E�_�~�q�
:H�ӹsg3d�6m��'T`F�`�S�@,W_,��l�_��9��i�J��T��nHȇ��f�<w=�,W�
�W�\�Q �|�����B�������g��j�
+��E.�#��� �ȝ��}x'D�t3�e�̟
&#�0� #��.T�
�
�R��WI��g9��رcs�́-
D!�j�E�씔�xjx�u�A�9e��Fօ�F �@e˖ݰaA�
x�hX�]E�^_�*#�0� #��L�=Y�%�q0��~2�\���d�ҥ�&M�P#�E`3޽{w��:�hS�Ν;�n�z��_v�e;v� k^�� P�|yT߿?	���~��/PZZ�[V�ຌ #�0� #p�/!��`��r�_4�� s����g̘Q�d�q�Ɲ���	�]��ʔ)Ss�Бl΢O�N�
+�2��0� #�0���Z��P:
+�,�_��/z���իרQ�E���4{�l��t��zR=���uS�.0��c�$?vYΝC6oi�o�>(L~�X�&v��A�{�̙3��⊈��y��-#�0� #�/PFc����ʂ�EYٔ#Z��D�B�8p�� qX�
=�Z�
�"v�-jҤI����m�/_>q�Dʕ=a��C:t(�M���� "��
�w�@�W�
漚��+��O?�뮻
+2J�wF�`F �" (r�1�O��#^�p�Ҳ,��F���ٳk�.L`;vlӦMa�=K.#F���M��B{g�$�q¸�mF(
VA�v
��͛7�5
+F�~8� �n9�/F��k���\�`�
;s�c��x]|��
�q�oiܸ1⎿���1��I�BoXGF�`F��!�!3�H:,6e:�
�V�F��7o~��w��Qc�_tyʔ) �`�۷�T��#G�(��r� �ƶ��n�	������vժU�r��!��+@�[<. at e�s6`��h���
>
�t|���ӧO�w
m �72�d�,�`F�`���pK���$K&��������7SR~H�
d�g\}~�;�{t��S��"K`
+fBʂ�k�)#�0� #pj���]M��m�GSO�g��g��c�iz;��B�䔔�|���c���'��(���N�����}�)��˧���:#�0� #�0� #p�Pɫa[6���MῬ��'Y�8��p���ĉqHᢌ #�0� #�0��2�<�A��񕥩�\3"N�; S�
+����t��3�$#�0� #�0�@�C�"�/�"�+Kz��"ŵ�Ȝ�4O8�gɅ��J� #�0� #�0y
ɃE�8�ape�(���$�2bYD�ܗ����2� #�0� #�0$��/���Aa0,�ein4Y��c
F�`F�`����E�տ1���k3���rP��5k� <-H���
�@��#+
ɦ���O��
����Y��ԩӥK�u�օ�%O�ZOO9�
���u��5��#����Q���K�.
m�
0$�3f
"(�_�^G
+oذ!�ٌ?���Od�d�F�`F w! W
I��Å��G*�(�.�gbߗ_~�v�Z�]@��={w%��
eV�X��(�@��Y�4hp��oܸ1����^��H�"ŊCz�����åJ�B�,XЩS��{�FQ��0�@�~���oY��{o�Ν;t蠑iӦ
��0P� #�0� #�k�i{D���H���jʟ�Z�փJ�*U�R&Xb��fڀz(Y�\9�\�2��� �0Z��۷]�vH�
\%@��
d�kժU�֭�A·l���a��.�u�q�
H(EU.���()	���_D�>����B�e˖�?1F�`F��uh�,�1Qb+�u�h���ȖE�cǎ͙3�4�
�02f���d]�Cbρ(c��n]�ti��x�⬷�
+ p*[��
��؀����U�P��U 1�.3� #�0��LY��i�,X2�����MGxGPZ8�N�4)Z�̔��x����v�(rM9;w�ܺu��_~�e��ر����8�^�z����aφ!0�X.��˗������Ol�:�wH�����bF�`�܊� ��e�����]Y�g��0'ϟ?ƌ%K�
7n\�*��
�.��Aeʔ)��V����˗��������W���==bMr?S�N�i9���2� #�0�_YyY�e����*�>KsT�r���kԨѢE
��ٳg
Y^nYO��2�����aʁ��B,��]��
X��=q�ġC��w��9�sI����M�/
����e~�9s�W\�_?�t��`F�`
+jb_�
���s�ȨLa2�T%Q�A�+ĉ' 9 at y
+���ѣ�U�p�(B�,Z��I�&Y��Z���l��eO�0�Ї
r4Q�f�#G�d��#뚳�<� "��
�w���W�
漚��+��O?E��<�
V�`F�(h��n�ˆ���G��e
�H
�{��ٵk&0�
;�iӦ��"v�#F�xӦMp`�ޙ(I~�0�b�=
+�U�B��X ��ͣF�����>[��r0{q�ZQƂ
pz����{��
��_~�e�ʕ�=�\˖-�n�.h����U����?�8*�7F��w�}ׁf�a:i���;�0� #��f��0
K��ز���rº,��E"ʨռy�/��cǎ�K�
+:e��]�����c��ȑ#	��c6����	��@Xi�
 qjW�Z�/�H�l�|�
x\��h�l�n
sժUa衇�5k֭[7ؕ�_97�\�����0�'O�<}��w�yǡ$�y#SI.ԜUbF�`�`፬��D$��_j�ܼ~��@	M�*׶�#�?y�!c���	)��⒌ #�0� #���W��i��ms�h����
�{,5MocvV(����|т9s��s��߄mYJ��E�3ϭg�"��$:KIV�溌 #�0� #�0�@
B����'gd�Z�b���?��
�d���9��'N�lU�=F�`F�`�|��
+�A�:ǵ��I"�2��>�F�La+�K�����
bF�`F��0d���II�[A�]Y�!�s#O]=�g�.�0� #�0� #��H��$e��WFI3N��&��J���2� #�0� #�09� q`6lٌ�,�3�\�
%9�KeF�`F�`r%�����D8'+�
aP&U�9�L����Y��hA��\�"�Y�H&��4~�<mh|
Ů(V�N�.]��[�.O��O>�F�,Y��.����z�#��郐���K�.�2�A�4%�j�B���>X�\y�Y��� �ڌ3�ׯ_�#�7l��lƏO�Od�<
+q� #�0� #2%������1�k�<%}0��n�ڵH��
x={�
V%��
eV�X��(:C��Y�4hp��oܸ1J�Y�lY�^��J�R��lÿ���)6--
��K�*�N-X��S�N{��HF���~��I��~�mw>���q���@�~���oY��{o�Ν;t��ۦMd������1� #�0y+i�

�ز��'���V���*U�R�
+L�0ĂG"�o@%�,W�

+T�\��'@>��}��m׮]��yHRݽ{�aÆ�p�
�D@�-Z�p�U۲e
�ʨ�v����;�@BAA�@���vn�
�
ݝ�-J��L�F y+A�_|�E���;�o��!����8�g���{�0� #��A;F�
8`
+��eW����˱c��̙[�B�Zq�D�씔��*۶m��F�>}`-���S�N�0�M�.]�/^쨎/�
�W�
��Ft;wM�L�@ �=e˖ݰauu���]�w�������
��`F��#P���B�,�]
��]�����N��L�9`޽{w���w��u���͚5��I���
.Lnʹ�q��� ۾���aφ!���۷�.N�Ρ�DT���ʗ/��`R����!�S'r
�`F�`r!j��.D���}+N%)��<����ϟ1cFɒ%Ǎ�NN���:v���c�
?~<b;����l������{��q��A�+G����
+�`�a�p��� #�0�@�E at F���_���W��`D�D���kԨ�_��ٳg
��冑��z0*��9��c��ܳg��ѣ#�/��[��b׮]fyX��1q�ġC��;��^�r�2eB����78�?���7.���̙3��⊈����#�0� #�W�/����1�Tt
3FFĎ!��ā�
�
+�Â8k�?��r��-Z��I�&Q��;b��� ���Q
�	�O��)�f͚G�
A��
+r���T
~��ώ��)P��
�X�
���1C8�+�W"��(踳� #�0�@n@����J*����y�W��#�

.,� �І���"v�W۱cǦM�����3Q��8a$v�q���*h�P�X ��ͣF��������(r뭷���G�o(~��0!/\���#��(ï�_~Y�r�s�=ײeK�

��!���ꫯ����D��X�A �U��
� �J�ƍ/�
[3�0W5�t�;�0� #��'�_�Vc"��_YY���� %����ƀ��� N9e��]������ua�ȑ� J��b��X��Zk�
 qjW�Z�/�� �L��oݺ�R?���4�0B«V�
+��C=�	�ݺu�]Y�+������{�]���S��
+s�|�����0�'O����؂x�B��|�_�#�0� #�� �d岬Llj�Ϩ�ۖ���A�zKbB�J%����֏'��sg�
F�LH��M�xF�`F�P�������ֶ́��'�3��3���4��
�Y�TrJ��E
�.���Ty�`E��j�רk�"��)�5/� #�0� #�0�@AB $��o�b���9�c�F���sv/'N��]��6� #�0� #�0y
����>�e�+�upeb9W����d=,]^;��/#�0� #�0�@6#`ČS�Ѐ��G��20.�u
w��r2u�F�`F�`�+nJ�|0��ʺ,7�+�/F�`F�`F�
+
G�0���,����
#�0� #�0� #P�0r�HJlreaQ�솱f��Ǣi�s���~��#������qwT1+�Bw��eݺu��	
+ ~3���{ʼt��`}p�#��nݺzj���\#�ZϞ=��D�1���$���zz��?�Q޳��(q��F �*nj���ׯב�6l�p6�
�D�˜V��3� #�0�@\���-
a_�H�JG���֮]��
��ɠ����$2��̊+�
Eoȟ5kV�
�3/8g5R�!?H�R��̂
:u�w������ի�)R�X1��0��]��iӦ!�`�
=�!�/-����?������9s���9��"����[�����Ν;��
�M
Y{�(��3� #�0�@�!�c]Pf�>�P��#�W�T�R�*U`ʅA��a�
P
%˕+��+W�v�NB>��}��E�<�?ϳ�-[`g
6l�#�6��!�^h�}�Y�V�Z�n�
�0��~��H���׺_����%K�*���
>n�3��P@�@@(F�c|s@�>�"���qٲe�t�Yl��3� #�0�@6# S[땄[9�

C.j�ǎ
�3gli 
+Q��Y�SRR*�.]G/^
�`�Q�pl�+“�>��F�~���z��&Ι�oVZ�Q��Nٲe7l�@��]�U�Pę~� �eF�`�S���A��!6n�A��
AiA�
<iҤ��츻w��[ý�W�^}�����a���TF�i~߹s�֭[Q���.۱c�[�B�k׮
G�1�S�-Z��o����ȍsp3�
+��:�˗���(l�:�w-���y�-�
�F�`F��~,K�c
+�ŕ��>#d\��aN�?��3�0nܸ5r��D�/_���_��ـ���d�رZ�]���ʔ)Ss��}��͛�%K�
>|�ܯs�4k�,;c�s@O�b�P�L�:��xkqyF�`F�89H2���>Ѭ�E"r^k�h�T�^�F�-Z� o�={���冑��z0*��9��VxNO�8q�С&w���äjժ�g`��N��`��鲌�0*4�f͚�G��U�
�B�7H���n��g:���x�s��B`߾}E~�X�&�77�{�̙3��⊈��٥�aF�`���

N���:ǵ����}�~�^p��� qX�
=
+NY�p������C�&M�
�=r�H��������&L�?�C��&��]|��{���t�zF��i�
C�oC\>s 
�1|��z�z�0����O?�1[2'�k1� #�0�@�" �0�����}�#2k�ܵk&0���iӦ��"�#F�xӦMp��ޙ(I~�0�b��O��E�C��͛G����?
 
�U�������r���{�e˖vh�D��k�����`��=5�m۶*T@�8j��K�I��멻��o >n���o��*����{����#
K�ƍw��w�u�x�e�F�`F w" ��.
����
)
+F���/���
;"j,�<��N�2dl�}����4r�H%� �
�jl;�A�7VZt�G��U�V��5�Q 
+�
+�z�!�w��
v��s� ���!؀��

q�
�JVB��eȐ!Z��z�*�����9���α�/�>|8�!���ɓ�O���;�8��`��T�/�ΝbF�`�<d;�;\$�8������n�J��NV+S���l��F��0w�8��	)Ob��#�0� #P���_���v[�6���H�HOϠ��R��6v`g�R�))�-��b��v��U�b��FFF�^2DL��:w�`F�`F��!�� ,�XT�W�l�� �d9.�ؽ��D�Y򊞹1ք`F�`�S�@FzFZZ�XO�O;At9�ę�۲a�O4>�R�+��𖹯�r�

+`ʠ�J▫T�+z�*��2샑N"w�`F �!��>��|�۟�K�2�K��j��]Gؕ
K���ݟ~����~������&
+��^r��yE�܆��0� #�0��)D`�o�_������O�������8Ȃ+�q���������P�)Ԓ�fF�`F�`N>���c��_i]���
�
���'��3�2�*��-g擯#��0� #�0� #��
+҉c��2dH�e#��|k֬�k&-H�� Ĕ@��#+
��~R?]�6t�
Ů(V�N�.]��[�..(��͘T��"�ʼt�R��h�l
�#��nݺ��@��~��	db��k�w��/��R�������g���o(P\ G@R�1c� �����u��
•j����4�D�
Մ�3� #�0�@� `q���!O�ڵk�v9�z��, %��eV�X��(�A��Y�4hp��oܸ1�JZZ��*U
+�,X��S�N{���h�Ѵn}���E�)V��Ch�~���_�p!r
+�{�˖-{��Wc�E���(������,�f���
�x[Ð�ܹs�
tmڴA֞ln��1� #�0�@N ��$�$j��nF
�1�R�JU�T�)]䦆�6 at U�,W�

+T�\�Q:�0Z��۷]�v�y��l�;�a�P
I���$ƣ&Ж�i�:���jժu��������������"
�HI�裏F隻L >n����ֹV� ��� �/��"R����7���В�6e�̖Y#�0� #�d7NlؕeF�x��
;vlΜ9���(d��J
2f���/]�4�.^�8.��D��٭#ʁ�zÆ
��
�|V��8g��Yi��FA �Ke˖Ő��؀�����*p(B��(��
#�0� #��b�#[<�%�U۔;��J���I�&E�9�\w��
`�>�3z��էO��/�
vh�Bٹs�֭[Q���.C8d�w��_P�Z�j�V����L�7��p�(_�<*�߿��c�Y�C—�3o�εF�`F ��4�Ņ�1�a�
+'�0'ϟ?ƌ%K�
7n\k"
~�˗/�ѣ����
�Y� �)S�
�Z�#�V���=q�����wJ��S�´\��̝eF�`� 6��rl_8IV]�^�z�5Z�h�6{�l��t�(T�P1�Q^Ρ>
���sz�ĉC�
����t:���L����V�Z�ɺ�s�gj+���z,Y#�o�>l�_>������
2s��+��"��>�0� #�0�;6b�)O
�Udƌ��~�8q� �IA�
=z!�
+.��~.Z��I�&хԬY�ȑ#>�Fh�j0f,&L�?�C��7A%� �	3��
osgG�������
�r
�}�^�^=�y5E�+�%s�#�0� #��$

DŽ<�s9�"{��ٵk&0�
;! `�E

+,#F���M����3Q��8a$ƶC<
+�UТ]�!��ͣF����&4���{��
P�xW�\��-[�
�Cc ��aN
�1c�8}��@?��
�n����Ih:4�2���� |�8���'��dx={��
�q�A5n�q�10
r1��I��1�0� #�0'����2&���@
�7o��
;v�y�|
@O�L��
6о}{Lu9r$�@I8H`�����J��� ��S�j�*|�FҐ ]�
c�C=ԬY�nݺ���
�
P�
�
ح���~�_��`�
mR78p����q���'e q#��Ç#`
�|O�<y������F��`F�`r;�i9�ę�]����"�y^<����O�nN�����~�@��	)��5F�`F 3�۾_�����ֶ́���W���A����m���
+��SR�/Z4o��
��ZK�����7����E93=�:� #�0� #�0�@�B��l^΅ݠp���ĉ�Jۼ�g���aF�`F "`�+��Hr����V��������W���^�4F�`F�`�ĕm	�r%OZ��䶳�W��m��>� #�0� #��6��Pʑc`�^�>� #�0� #�0�@� c�#�5��ܾ�c�5F�`F�`�N
�ܾ8:�
d�\s
�
�rp�Y�a�r�� �1�2`e�C�a�I�[����G�E����'�
�d��o./��b�ffy��
���!�~�2�Z��
+����ԩӥK�u�օ��O?�p�V�Z~�����)����T i�Q�>}
8`�����`F�`F�A�����I.�ܕ.\�\zȾ�l�2d����Э����۷o�O��(S��޿z��"E�+V
��*BN�^��P��C
���r�����W*�4��׳g���(�
j(�b�
+l�
+Gȟ5kV�
n����E8ꀅ7���*U� a���?�����H�7iҤ�Ba�R��o -�O<��NjC��pF�`F�`Ol���FD��%� 
+�|�
w��T|�>��>�d{�J��`����A�[�jպukl84;�޽��a�n��}�R�J ���,Y2�tRy�kC�@��N����ʕ��ʕ+c;T8
+@>��Hjݮ]�ༀ(Lj�MP+��w_jj*2�a{̘1����fx�	���g&��(}�2� #�0� #�0�n��C��-�r�my�޽6l@>j���\�����#ٵ.���=�l�۶m�c
�뮬��cǎ͙3�
.@��K�.�k"s�aV�߿��ѣ�����
<x�[��M%b��̩��F�`F�`�0��E(2�nu,�,���/(Y�Z5���\�t�#F�S-Z���ܹs�֭�_~9\,v��A�Ĵt��u���͚5sH���N�hѢ�ө�/]��
��3] ��ݻwg���r�-U�V�С^*�ի�P�a�nҤ������~qEF�`F�`��eZ�_��8�ײ�`�S�L�_] ~�|e˖�sÆ
�ϟ�]w�u
;v|�ǎ?n
+�yX'�p3iw�(�3f̀�Ƹq�r�NLLDgᬌ���ĉ1Q8�s���!�v�cF�`F � ����b�Y$:�
0��Y�=�[o�uȐ!-[��G�z1���\0��tY
0` 淁;�3��V�zu�ԣx��j�<��h����0�醑�$0���9+>
�˗�z�W/�Ā�(㬳�����!(.�0� #�0� #�����p��9��Š+b�����,���Y)��-_�|�ĉd'�0a�}
:��`
<wa
�/���-�Gfl�� qX�
=
+�]�p�(B��!>Y�N
�lF��&X #�0� #�0�@\H�
�5f
�A����w����W�\I���ŋ#,�"|2l��b�Y
�hDF<
����f$��$�~�PyL:D�9����
<��!�i�&(�ҡ$��!
+Fbl;d�0"iТ]�!��ͣF���1@�B9+���!+mq]F�`F�`mWV,9��2"��5"�2.L����Z�Ph�̌
�e�fi�Z��?~<��pޥ

������Vm�W]��4�.f�y>#G�$9(��r� �ƶC�M7�BO����7�B�Z�j�̙��Ov���j��0� #�0� #�$��~��5���IG�x��_�?9`���
F��� b�G/�%F�`F [���������ֶ́��'�3��3���4��
�Y�TrJ����2x��wWkis�_רqaW���#Z���g,�`F�`F��-v��X|�ܢ��
:ܲc�;N��M�S7�0� #�0�@�B�F�=���R�����z�̝�ܦO�z��F�`F�`,��e'WNL0`�2�t�e�ƩR3��s�p�vF�`F��G�{��
�y�����0� #�0� #�0;WV,9F��2�����; i<� #����T 9z�N�XSF�`F � ��
�n
�*���\s
���r��Y�a�z�:��yH�=�91���nݺz*
�G�=*��'� Sɒ%Kh����⋡���	��Y
��z��]�V-����ϓ�~!!)y�g�|�>}
8 at U
�kM
]6���q��
.��gϞy�C��'�
=z|��G9�ht��|�
.R��2�J��G��F�`�\���U>��
.D�:d!Y�l2�������o߾
?����ؼz��"E�+V쫯�r�9�z�B�=�Z��/�\k-���b�xV�+�|(����N�4���Fb��~AO��7�x�믿~�'�<뭷��b�
+lGAկ�$ڴiH4�E�9�`�)���^˩ �q�G.Lwr�`����fF�`��C�3F���s�=�|�
w���w�M�UDr;d���Y�fa[�unժU�֭���Xf��݇
v�
7�C�*U�b-ߗ�|�>��y��������S�:u��w���;��"=���_�~:!��+Wu+W���(�ϯ���~�� @�H���9	`$#m�y�Ж�#�v��СCJJʏ?��\�]�vպQ�K/�@�{ow�ڦ|��m��
i؟y�

�N$��Z�I���;Q
&g\�n@
��;p�@�G�����z��T�o�I@��`F�`�1w�/��l-Q,���ݻwÆ
���Y٤��
<�1�K�2�x*c�#���mۺt����+�m����k����E�z��
+66nܨ���K��
�%9�e�����
,s(q��� 
f���F��"����z�}��9�#�:�!��
:�Cn���z+��Ν;�i�����x����
��v�W�/��⩧�r+鐏$�𭂆-[�W֯~�O&��#�0� #��(�%i��Ɇ3�o��5[�Z5��`.]�4�@��)k�Ν[�n�����b��d�.li�.h֬�CZ�
t��E������_yb*d�
Pg�}=����޽��_nҤI���_i�ڵA�ɯ��\�@�F�p����g�
+��/-xOû�9s
U^y啥K��(�p�!O���6mڴjժq��u�ؑ
+;v
���ܚ�u
+�l|9�w���!�D��:u��?�w��~�	�����k.�0� #��b<���	����`�L���Z� 8_ٲe���O����ׇ���:<�{��Ǐ���7�dn&��2]��/�".
�
�2ѯu��b?>����
>�i��IC FYpP|Z	mq˖-��;w�1cp$'';��[��|e*�
�ׅ�����(�� �p�0[qȇ4�ӼC������ #�0�@�F <o_��U�VE���
�
����\����ٱ�\��7]�
 W�={��
=�l>�:�G���t
+��Qׯ|���QR�`T�79��_(.���[3�:�L�{��b?���
�Y���L��s�/xA�.��W�N;��r
\&p5�B�0a�C1�
{���}����}��*���C�%3� #�0���Dz-
�
A��ίѲ�U�X��
n�f�P vP�z�+�W�8q"ىA0��СC�
+�

�oǦpt�B�q��+�y� Lj�A�ᓍHm��C���fď�G/	��` ��x��^�K�|0K���2"�K6c��t��
/
L6ŧ����*�
�OqI�ެ��ʕ��qˇ4|3��K
U���|̹EF�`F ; �l-W��9z*��}��=3��I���_�oY�x1��"|2l�N��fy�l1�	�
�t(�B�Z�bk�V��<˃��~����Wl8���曈Q�9赓(���� ��M�B�۶m[���~��Ӎk�
��G|	G�8pJ�6F�=:F�< v�O(���`��)���0,�'X�u�
+$=$���#G�`�

:W(�'q����?��eɌ #�0���C�����>��:<^�P��G���Ax|„
����&�k3360�m���$��?~<� �p�

��ĥO�����G��v���s�=�*��x�;%:� b�a�!䦛n�
-t���0v�ާ��dN7��s 
�0�j�M �
�ax�M1��C��	��\����Eh
qO�$!A��O��V0#�vR��衾�����pmbz�����!�:��۟s�dF�`F�$#�X�:kV�z��ͲaaY��q��O
���ē�
+7��i�*���R|�l_𲔧�g; ,�`F� �q�á�i��ms�h����
�{,5MocvV(�������?2x����iis�~M�ƍ����_&O�A���0��
x;�W���Ē���&,�`F��^�
ؘ�gsY΍lY�[vl��$�[>{�fi
IJ��~h��LÒ��g��\�`F�8��Hr�9Y�[vlhOh��?����fF�`F��渖��^

nٱ�k��s��aF�`F�`N
�*��"Q��O�r�2#�0� #�0� #pJ���
�Unä�ݕO)l�8#�0� #�0�@~F�����+Gv����O����9 ~0�"Y�f
R �1���
H��=��O�`���
�֭���Qy�����L%K�,���� ��ƭO@w����U2%�����ۺuk�@�ri'�J�����B���oFb�P�� #�0� #�0�@n@�4-;�`D�o�
?�0��,[�
,�L��<۷o�
� 13?�^��H�"ŊCJ<w+�ӫW��c�^v�et�d)���

���l�k׮�}��
�D
y��4Ŕ���ǤT�Rs��]�`A�N����X.�0� #�0� #p��Y���?F���Rw�Bpe�����鐛Zw	fT�ŀDb���A���&Xl8����_w��}ذa7�p�>T�R%�Ћ�dɒ���P�li�������^�ݻ�-��
.���
=z@Ȗ-[`WFw`VG~
+��D}����� #�0� #�0�"`ؕ��2q�`weXI7l؀�̞��o�
\�����_y啺
"��(c�#���mۺt�ҧO�b�՞��9��Zn�aA���o�>R�ҥK���ŋ��i��0� #�0� #pJ0��I�
aVr"@�jժyj
�]��#F�D-Z���ܹs�֭�腋Ŏ
;`v�u�����f͚9�5h�@'Y�hQ :��T4�HMM
(������*U�V��!C����s�g�����۷/�3Nɩ�FF�`F�`�A������-#
��eaZ�2e
+���p` 1-[�,<�6l8�|}���ر�c�=v��qSܜ9st27�κ��`6_� ��'J�@�1��ȑ#�ݯ_��˗�%�u�+����٢0
aF�`F��)<�r���1ߋh-�%����˭��
+;k˖-�Q�^Lѫ!L�3]�
0p��={��
=ڔV�zu�L$ؙ8T?=�&���-���~��(��o��o�
+H
����P'N
:t�q�A˥F�`F�`r���R+�
�bŊ���p;6����SO#��`�d'�0aBJJʡC�t�r��

<�r�ƍ��&T�L�4��鏩��j�
+�K�Y�&��9�E5�:#�0� #�0�@N!�Àm\�rWe�	pÅ_������?�\���+�-`���ɘ
�`�X�;��b�ݼys��@�5�K3B��bk�V��'�M�6��Z�Z
���?>jԨ�>�8Peا��1��w��
0�'%y���j�F�`F�`N!����"1��>$
GDde\������hܸ�63c�I�&n�4�b�����IHF�Z���Q\��o � |r��m۶}�駟�yh��;� �
�
+���+=�ܬ�u��2�+�b�F�`F�ȅ$�:���ի{�{�PN���lX���Om|B.T�Ubr-���kuc�F�`��� ���u��i��ms�h����
�{,5MocvV(�������
<h��_'�8
X>��Ս7������p����4��`F�`F�`# g���$�W�bŕ3A��L�w����
'N��T%��'�?�
#�0� #�0�@nC@bI��ŕ]IHr�}Y�[vlhOh���mg��aF�`F�8�xnjˍL9!A�[vl�!o�S{&�uF�`F�`�\��6-îl��
��ȝ49W��J0� #�0� #�,̹}�+�
�yaF�`F�`G|�8�ʟ~��5�\?�?�\$k֬A�,�:&Xc������^xaݺu�T<*��xT��O>A��%K��~sy��CO�[��*�&+ZwA�dJp�OG?���֭[��/�
۴L���
ѣ�o��Ҕ�-Z�:u�t��eݺuT�s?���ќ[y*F����*`F�`F� "`����>3
F("
.|�ᇑ�dٲe`�V :T���߷oߎ
��(S���z��"E�+V쫯�rˇ�^�z�
;���.���{��Z���`��	�h6ѵk��&<�AG��G
y�#?R
BR�u�]�J��;w�
:u�w��PH�̬Y�4hp�����p��h�Oz��,�S�P�� #�0� #�0
pe�͊<��a�e�Bp�;��˦M�"7��f�ٳg�'���~P�V�Z��
�H
+ݽ{�aÆ�p�
�P�J��XKɒ%��S�>�&�v;�	O����o���p饗���B�l�C/���Yg���0t�A�G��v�ڙy��p��0]À�����=�
U�
dxi�4i�!����C��E�f�p��0� #�09��-FCVj�J�a���T�}����
����+��e�
D{
٭�m�ǃ>}����~�9��Zn�aA���o�>R�ҥK���ŋ3�4���D�{�ر9s�\p�II
!MH�����bYG �ۑ�
���x�#�ͱF�`F��.
��*�u��_~��U��Y
�� � �|�x�s�έ[�£.;v� �ZZ@
���߬Y3�4x#�d"�-
+P)X���f���%=����_Q
�
B�B�g�J����N
�����Żw��vb?
�~�*a�
h�Oϸ��™F �87�x��O?�i�&��L�81Ӣ�"#�0� #��$
vc�_�Js

"��t�iyʔ)��
��ܮlٲ�ݰa�����C�]w]ǎ
{��Ǐ�a.��D�L:[`2��/u�� �)"�1&8
9r�\����|�r�d��eӧ"^��p�~�8c�
8��7.T������@���]~8�
�'ڳy��xeryF�`F�8U$	^�X�v9�-�%����˭��
+;k˖-�Q�^X�j���L��

8pϞ=�G�6�U�^]'	v&��OO�	��۳�����~:
+���o�[�BRC/�.ÓFġC�FᲺ"�ʕ+W�>~8`?�lѢx99�{�a �a���j���v
����A�#�0� #��p&�Vve�BcG¬�+V�,4�۱�
+ D�N=�l0��5��x„	��=t萮R�\����P�����P}���,�?f�ժU+�/�f͚�7Ͻ3ۅ�I�&M��
Gh�0ۣ�w��Q�c��Q��-r� �bD�.�#�FA@@�S�vm�`F�`r71^lƌ�|9�,'$�
~��.f�\���+�-`��k���6��p�	St���O����Ҍl���ڳ���	=7�+Ed	Z at t����G���G
+�
�4�z 8b���p�&���w���:i0#ƈV�ڏI���P$��o�X�)��.�� |�z�����Çϛ7�O�	O�nݺe�X�0� #�09���P�ly��7F��2���!�2.L��FSx\4n�X������,
����Ǐ'� YNh�GG0q�
++B���ӂ����m�s���yh��;� 4�
+���C=7k#ؕ��+CB�Z�j�̙Hڢ��Á���fu�� ]��8�=fU�Y�|��#G�$9�z����
�����W��?Ƌ
���<���aF�`�lE�
+�\�F�5�W=��=D:/'����l��J�����|� blG�!bb
>���.�R��0� #�0�@0���W��i��ms�h����
�{,5MocvV(�������
<x�뵴�O�nԸ�-f\Fb�XD$^F �@�|48��3A�៣s�g�|��0� #�09�����C�eI�������
o�,)�rn�'��\${�
K��ã
1�֭[���f�\��0� #�09�@"�`<������|o��s��[����<Q��|C�������4�}0
+,�_F�`F G8y>2e�r��-;6����|N�:����e�� #�0� #��u�C&#�
ny
n֟`F�`F �"�C�Y�c�_��:�Z�s/��#�0� #�0�@�C at pe/f
Ζ?��S$�_��R.�5k��e��	&�F��Lr�����u���S�<r�Q�O>��J�,YB����_
�ޭO@w����U2%�����iкuk�p����r�ט̇
! �)�[ps�@���>h�$���������q뇿ޏ��\pAϞ=)�y��r��Г�_
 �Θ1c������#bw�v�aÆp�����N�:�NH>����'�<�'Q�`>��C{����7�D���dɒfs�O?1쑁>�_|�����,�`F�8i$9Hq8G��-\��吅dٲe`�4g-������b� Rx�)SF�_�zu�"E�+��W_��9�z�B��jy��Z�����H�>�&�v�܄�� �>�<��G~>$҃�
�뮻J [...]
+AӨb�	h�O�FW_}5r�h�~�c?�i����ߣG���
/��뇷
PF\2�;w�СC���in���x���F��i��j����7s��
$-��]�v����W�?E�
\�-Z�����^�J�l�/
dF�`r�
���'[D9Y/W��;`�D�e��� K3~Κ5˴'�:�j�
+&Xl8����ݻw6l�
7ܠU�T	�XZ���� }p4���/qO����r�Q�b�wܲe
�����%$
=������ʕC�ʕ+;X2�b����޹s'��f~D?�i���q�q�t�Ƹ�W(�� �)�
���x�]CBw�RRR~��G�C}a
�9�a�E�F���S��[�ٜ��W�̩n~`��cxy�����O���; L�˗/����	�0� #��K�(��,�`D$˰�nذ��A��!�2����a?F�e}I�A��Ǒ�z۶m]�t�ӧl���>X���t�r��.؏�G�U�ti�]�xq\M���'>
��nZ�3�.�C�����Q�z��:�E}��p�	�L���bx�*[�,.�&6��o
��x�BR�}��e

+|cAru-�ח���8�+��Bx������
f�:u�@l���F�`�����I\9�2'[��@�2y�V�V�S{x�1$R;/�l�u�Vx���.�0�꺰��k��t�Cp���;���T�>�&�e9�������+�T�Za�%m!�0����}���a/�i��-�"��#�ܻu�̵��O���C�ٜ���v��xE!��x�W4�S���ˣ;��)l�:�;F�
+
+*�O����rΜ9Y�8���
+��a�3�
����(/�i�˭.���l��$z�AWǠA�HTrrrֻ�F�`��E@`[l8eW����5&�)S���� 8(<�1�h�����u�]ױc��
{����f��`ʥ�ͤ�)�	�R�
П,v ǘ�x��2��?����:��_~��(
+�q
�{!L�f�L�{��!��

<X�ؐ@?��޼y`K��֭����S^F�(��0���5�\Qe\�I

�(��
�Ƙ�K
�Ct-�ǧ�;��`�FF>^K�(`��F�`��� e!ʬ����l8*��,�݈���˭��
+;+�O�(�.f�Ր
ȁ�<`� 8 �r��Ѧ4���
��ġ���i6�,�����O���~�
a $5�+/�$0
j�С�ƍ�r�ݸ����M(�t���p��d,G[~�c?�ʰ֬Y�<e��W(�nM4uȳ��α�oP�À�0pv��
�&\&L�[��
+�ʻw�6}$fΜy�W�M�s���4���r��Q-
����{|$���{�a�GtE�Ձ�d`�`F������~ጯ�՗��2�1k��vl�`w��e�	C��`�d$!��
+�L]4vMʍ7f�P}2!Ӭ�?f�ժU+�/��� �Nݖ�P��8����=KFi�FG��ж
�j��$�����x����h�n¿���hO�z��𢡊�\bV%&����UW]�������&h������p�>A�N�������(�?G���
��v��O4��`F "��ͧ|0�[��4��O�7\|]}��w��`���~
�$>.�.�
c�
��	�*
pZ�Z�c��7��g+q��;� �����# �Q�>��#�@A�A"
�1�'
+c!�
��=�yj�1���R�Sy���$��v���<
�&�
+Т�ſm۶��#x\��r��>+��$�q�P�f�ƍ��n\8�G�y�`��'k1آ�Sy�77�ᆜ��2�,wLB�+o�3�٢��~}DHD4�	m���ʣ#pC���Mn��F�k��K�$�|v~�;� #�0���lqe���H8��� �0!?��q�����hҤ��,�o����S'�q^�Xf�
+ƥOh�5��O�|�駟F(Yh�r!��8c���N�Yw��
�݈��n��l���� �m�Ю�
���Q��&B���B�>T��2�
x���
+
>
!S�<y�d|����ɂR�|���pb	�#
�
�� �Q�F��A�GIL
�����Wތ��W)]��Ý�_�_W=&�"*"����&xe���h�K	�
�B�:��
�;���8��`F � �X�F�5�W=�`�v��~�iO��;��M'�#��I@��
��0� #�0'|��k��i��ms�h����
�{,5MocvV(����|��
<���*�+d�z�F�'i�d�4##l^���;��0� #�0� #��,�xp�_�:�{ٲ���  �o��>�M���/�gF�`F �#�X�f�5�V�]�]E�HL�^�����u���@ O�1��s��s�\�6}r��M>�`�3��eF��
d�Ɛ�O�r�`�^�}Y��

��A�[vl��o���vn�'����F�`F�����
�e�jK,��#���3� #�0� #��N�B,�r���f�e�F�`F�`F��!@6d�.#��Z`Tۑ-���t��+ at h^�E�f��l"�1ID�ad(�
l�'��"�rݺu�T<*��T��O>A��3�����gʭO@w����U2%����j��g����N�h@\dL�C�n��fJS�he���z��I��pp at G��q���S���z�
+r$�3f
"
#�1�k(xy=p��	D�n:(5l��ZX�Y4h at Bh�XN?�f/�<���S�
ڃ�2o��&b*��Hdc6���a�/Z�>�_|��3�/��0� #��
+����]Y�D��O��p���?�0��,[�
,�LʅT۷c�`Rx�)SFwr���E�)V��"�{9��5v���.����9Bs4�����*�O�A�A}��
�#?�C�A�.U�rO �G�N����z��
H*��!Q_�
=t��p�ͭ������\ ���ʈK�s��
:t 4pR(g

� ����F	�`��qݺu��7R-YБ;�-֯��S�^ i���ڵCV���"A.�-Z���G¿L��+2� #�0'i<NLT$Ynj���4�/��\�`�EJ9��� !@/��5k�iOunժL��p�ə�w�>lذn�A2s�jەX��k6�_�������
8\z��q�l�K!��:,p@	��BO3)S�~}�	@t*ĸp at +~����o��
,���
��F`��vY
	B۫V����_���ؕ/��dC�
P�I��ȑ#��N-oq�9S�_y3������c� S#xp�v$�

w ���/_��k�e�S\�`F�8�&c�!���Ɖ�aZ�����tÆ
���Y�}����
����+��e��D{
٭�m�֥K�>}����98��ɜLw-�������}�Z�K���ŋg�i��>� �*�\$���gE�L(P`��=�lٲ�dl�v_�	�/�\20�g(|c��Z
��d�4�	G����]/~�	Hk��ԩSb����0� #��"dl8k1|0
�
�A޴ժU�� <wA�F���w�ܹu�Vx���.�0��p~�ׁ�t�Cp���;�� V�>�&�e9����0�JժU�wȐ!�-����=��o߾0�E9ӤL�ڵA��ot��8��������L����q
r�>6@���Ѓ>�Kvex(�]'���
�g-�4��ڵ�-�Q
^
0
ӂ�[]^�oٲ%<I�+���A������w�%0� #�09��;��\9Cx(
�r,�r��r��0-O�2u8 �{�"��S��ϟ�]w�u
;v|�ǎ?nʜ3gL����t� e6� 3@�؁
c��#G�0�T|z�K�� @��� [...]
9z�hSZ���u�`g�P}��4�~�{���C�o������Ej�V[���,��C��7.�
C�a��Y��	Et
�	�����o��
, 4���ݷo�˕+G{�ƈ7(��p�����
'��DC}o��
�¨�{�n�Gb�̙W\q��;G��_~h9z����I�Ɉ^�=�0冮�:�
̼0� #�0y
e8�\��2$QVq����GĬ5�۱����P�B��(Y��H<a�ث
:���F

<�r�ƍ��1T�L�4����o�j�
+�K���9���l
�
A?{/YT[WşJƥgv���h�����m �0Ӟz������q�L8*�re�|�(8N�\���	�l��.|Rsm�'X>Jj?+�Ђ[��C��������
1� #�
�U�`�S�������

�3�W�[�&A����`�Uń)A�B�m2���ڳ���	��	����� ��vԨQ}�p� �@Q,
~�0�
�耉=�i�ڶm
+5��ў 

z����?Xϸ��� �k�a��
�q��p���@p-���y�0�b�?�䓈0��}xs�w	�2�苐���WތB�?i�� ���<�)\X�ƃ�?�ܐ�>D����x㍘�Hߗ�L.ȃ���0� #�;�%�#ӱ����ˈ�IU$
GD�U<�aB6���A���ѤI�Y�v1�I�N0�£#X���	�!�f҂�����>���%
m�y�
���[�1`{���ݺu��6����
+Q�@�@n(iK =I������zƅ(������2��&O�<}�t
 r��1��1c�_���+x�
�4Px7��F���O
r�l��N��f\mx�*��
�B�ʸ�11Q��o�j�WV*�{�V��A-D�C�๳��5WdF�`�
�l9Y$��y����z|�ђp�H��AՁ���
�b��ʱ@F �" j�U�5gF�`�(���y�A�nk����������Xj����P*9%e��/>:tسsb����nqI�F��>�A�ĒG�b�F�`F�`��! \,���l���+K�,�I����q�S.J-
nٱA�
+�%��Qt�J�ܦOV��uF�`F�ȧؘ0�`�|����n�G�j�<8�` ��)��"�����������4��Q��8��`F 7 ��>Æ
>w�����Ce#�_n�M
nٱ�h��s�ùM���/�gF�`F /" �0,Nl�"��twr�F^��ufF�`F��+	�3�y/[^˹�a9�`�z2'�3�<��hA��lo9��g��,�`F��Ft|e�"�=���n~_|1�"Y�f
\6��C�ad(�
l�'��"�Bݺu�T<*��rT��O>Av�3�����}v���$��4�2ȡ�Ԙl�o��fJ#��!�~�!���	����k����"�4 �ӧeD3�#�[Ϟ=)�x >�C�����e��EJE����8_��-��@�
=��&b�L��1*p
b<gBH�*9-?�\�`F�8��|��E"�`D��
~�ad!Y�lؘf�k��퐃eʔ�W�^]�H�bŊ!-���Aޯ�c�^v�et�̉�����!K�w�
2�a�,
N��=H��|��J�BndJ�ԩ�޽{� �:Dii��G�-��
���o �
r7蒴i������O�bq�cB�l�/7>xU�޽;�MP*dT#G&����% ����^{-��0���s׮]
9�VN��!�Y,#�0� #�4]N��hWD���������kӦM��Zk3-�x��Y�����:�jժu���p�v҆��7�p�>d��
�����ʕC�ʕ+c۔��h�&M/��®��`F�a�@<:��QZZ��Y9��"�!��I
	����d �S$�c
B:q�'>HD�{�n�t�H���r�������H_(6l��#h�hѢ�
:��������G/6�P�K/�/{�x;5Q5��]�|y�u��D�v$�DJH*��ց�
+�Y����ի�~(������c<L�0W�JF�`F� # z��ʊ;G��+�
������ۃ+<x��+��R��3D{
٭�m�֥K8
�֛'ߦ�N�jZ�K�.��/^
Ws~��%$Ja��a�s�
���| 
0�(B"��q
��aQ~��'��Q�V���X0 ��#��a�_:
N���H�(�4�x�C��I�&��"ʇ��O?��o
�_�ߒ�f�J�Ŗ-[�+�B|�?��_��Dzeˎ3�O4#�0� #P�p�#�KeY #8	y�V�V�;x0���1�X��v��	���p��)
v2]Oq|>n֬�CZ�
t�E�e�<�g��7h-n��� ;�>}����G�� �C��U Vޗ_~�I�&��k��+
+�Q���y(555X��n�
v����ĥ*�C�Q�F8_o��v(D*T�7>Y���w�9s�8����+p��Q8��C��bF�3�<�y��U�V�7�
lJ�(�������駟 GI�믿k�v�����㛌��
#�0� #P��?�t�k��/��r0b0-O�2u1�8X����������C�]w

�p8~��)��\Z�L:�S�5L�f�9`N�a�o =
�\�&��IZ����
�)�����1�k{�����5�:����_P��pk��
+�;܁��yXpq$'';��[HD����)H6h�f1*��R���<y�d�d����>rF�`F � `pdc3惡��#L�Z�*�L�e���[o�G^|��G�wA�j���e> p�ܳg��ѣMix���
�t��,
��dJ�u�'N
:t(Ln���ϴV�� ��e�ƍ~�!���Q� #%f�լYӄ( �P�]���x��}
g�/[xv�� ��mڴ1]&L��� ��r
B��j
 aDǎ
s�q��.Tq�M�>
W������Ê&!����j��0� #�0�
�.ۜ_E��_\+V��Yq�c�{( ;(>.�N��ˆ
VJFbLf:t萮�ig�aS�	� �<�S88�#G
��f�P��Egp Pd3r�)��.@�Ae��9�o��橧��������_�(�`��,U
r�ˈ�.ٌ���t^�,�O+W]uU�?�[>	$g8�k��/�Q�K��`���	
+�.���&�����p��]e��,�_0�/��`F��!���[�f�!᷀�	���}�����
� K
�X�
�cj
L�p,�)KO�)�%��X{��cf���a?��0!�H��{���&�yP
4&� ��?�n#� -&I�۟�Aֶm[��j�լ�TaS��18|j����^pO/˜��<���NG�8�ND�F�="Є�
��<�����>O�;*z�'�����yN;�4�y'�Dċ�c&B�`?�
1�p�q�!�����(��28�=�܃O.�l �LU��
�)�^3� #�4,
aR}e�&я5
+���	9���B�ffl`��,��p�Ō"j��K
<:�O��ŀ v�v�:�|H�]@
�ݭ[7ؕ���C�G� � ��[�۟�A�Q0!L�#O���q`�:NY�v��!���9���ܹ3�0�|�h
=z� ,��a�7��b�)>|�����G�S>	D+�L�5���;���ǫ���a��s��.=H��k
o�� �xM��N�P��3
	�<��IgF�`�^<8��9�Z��O7K�,�toXm𐡫��3_u�;��0p��|��g)�x�/xY�Q�ٮ0
dF�`N�q�k��i��ms�h����
�{,5MocvV(����|��
���siN��8�n��.id�`(/�����yn��C J1|(�HN,9-?'tf�� #�0�@^G@���D���ȝ���
y%zC^�?w��ܣ�����$�
+��L+�F�`��� Y�U��'N�~�#w���
�:�����.���cF�`F P�c�i!���Ld:Z�):ܲc#���n�y]��ƃ�1� #�0� #��p�W����@��j��) �F1�TAE`w"F�
�E��
"�����p���F�/J æ(�����2��}g�ܩ�Z�g�yK2��}��s���>u��s��r&̙T����������6g
aYT��I���&"" " " " �r`�o�_�)�'�[�t��sq�36y[׬YC�,J��$m���K/����wbHK�w3�^M;�́�%���Kr<7mڴq��v��+MHNl
����n���7�. �H�";#G�\�z�����L�� ����T�~��S7��&�g+;���aP�jT!�?>Irrb8y
(�K�S�����/ٽ{w��๑J�üͭр�nJ'x��K�R|��� [...]
j���+�߸���

8�k�K�.|4���疏�4i����.�" " " �N����$�O� �Bc+S�
�,��Mm��rU���׿Rޙ
+�T�
n�?%�H(k�5j؞mڴA~�Tף�p�
�q�5r��)sM
���
�7n��*)��(��q�3�O?���}'N����%�
�}˯=��+�D@D@D�"H\�>�-[��X��zΉ]k֬y��w�Q���;q�ڲ�~��%��䥄��d��0�;v�X=�n�w�1c>?
�4�!"J���ڵk��0=�!"(�(u� ^� �n��3ĹLM�
u�QI'֭[7\��l��������G�y��x��ٳm7
XS�w�ܹ�7n\�vm�v�ڶm�~�z�L+g޼y�Ǐ=~�
��@ݺu!�m�6Á
Lg��lٲe�� �˯�����E@D@D�$X�c0b�0"Fa�*���c��ݻ�(a��_�� ���xG�֭�n=z����w���ir�!��^j֬Y�]��r�ԩr�3&z���Ǫ����Yk6> ��_�`�������:����k
�fr��ܠA�2����;��K
0h� ���_���
��
�p��^pΜ9�6m��X՘���7��!�ȡ�(g�]M�>=�x���ǪCE&�u�V�_�N
�;�
;v���6lࡇ�� "���
Ss�
!�$F�f���'[Ұ�W_}��?�뮻H�FF��{�H�k
+ȋΝ;O�2ż�@$�7n��C�
;6;;{�Ν�c�U�F�е}驤�D��p���M�4a-���������i�<L&Jn�ѣG���`ѢE&�2��}��GZY�I߆#yĈ8��ڃ���
_V����H��L�'k
O�o���Ѽk��jԨQ��p�GIց5c6�
<n�>�R�X	p6mڴ���s'y�i�q���XG�p��&P�Sy$���N�w�c�=FfeVڑJ�8k���ܳgO��E]D������ڃ��&�
2d��3��M�A�/<�@Ӈ�V�ZY���C��pO�2q��f��#��-��!�e� �:	�H�=a��{$MnX�'(�E@D@D��ȪwB�ŋ�������W7kp�!�^]�Xh�"P�+��:VD@D@D 
�8�
�s��nv޾k�O�s���1w��g�i��^ͪ��
��}g�С���쀼�q/�m}j�S��q�M����t���������d.��x�<C9��Q����ɞ
7{Fq�/�" " " " "���ž�}%�[��=;6�X�ND@D@D@D@J��[�//�rI�c�'{vJj|�#" " " " 
\�6g�-H"^" " " " " 16^9^޺DC0tD@D@D@D@D #	�Y��`Xc9x��|@z,w{��G��5k�=�XJ�o޼��
/��yI�M�6n��.�3rH�l:����	F��G�!���۾}��c���
�O�Pa��%�
�FI�.]�͛p6���>}��:�m���5)l��T���kGJ���ȑ#W�^�|�r���E���y��'�a�%U$�QD@D@D �	�le��֣
ݳ���������9���^{����Mi��~�z�1�.]J1��ի/^���I�n�:Z()r�!�ط��e��� [...]
ms�������CF�|:�1�X(ݷp�‰'r�Y
�ϟ��(ͥ�������7Fn���r�P��w�}7
�;�g�-CMO�]
�
;z
�K.�[yǎ
��y7Q&�h�6Bm��kժE�9s���c���
99y�\���˼�{��3f�kĐ*5$$c	rS�v�+V
�!��j������ѣ0�����rL���0s��cD�m���m
�ٳgۣ�u�K��M�m�ƍ׮]ۮ]��mۮ_����ҁ�q�Ç�PN
��K=z��V�Z�ښ���ܷo_�`��؋25�y�y晕+W�;w�+$`^VA��Ǐ
�o���!Cԭ[M�m�f�a��^������!�J
�(\gg��`ܥ��H�֭�`��9f�޽{�ֵ�*`
b:��ڦY�f���Z�4i�Fc;�r�)�2k������J�믿
�5�ʘ�ab|�Ł�q-��>Ls�ԩ��3�0�
�e� �P�PUJ�����@�#���_f�匋{��-�s�aÆ������w�qV/~�A�ٔX՘���7�yB��v�:dȐ��:�U[�n+W�|��׉6=a~��]&|bܸq��w_��O
+�N���M�6Ye�
&K�3��	���
;T�g��[��G�:u�6�r�����׿�5Q�����@����
ec$G0���~��W?���Didv{�����]�U�
;vlvv�Ν;���7�S���͌a:A]�?��~�!��g+3�lS�L1-��2�,�ga�-��ux� 
�1��f�&M����
��
�����d��(" " " �'�̓]�w�}���l���/�[���Lz8
�#F��ن/��i�:u"�1;��
��$X!f��ω��l��o&N��Z�h�C=��:4�9Q���{�gZ��e��kԨQ��~�;nD���
���M�6����]!
�����(�
+��
X3A� " " "�H��u!�v�_d�2k�&6
M�8��={�a.��"�X�G(��u��Z�(i��N��0��f+>$�ӠA*��p�
�S����
%^9Q����=��e������Q]�e� ƑT{„	<HL2H�����yIa����Є��A�3V2z4=b�!�Ϗ��P4qH� 9��8J�������� 1�~��
<�ۅ����������s���{��}h�W�jv��9sg
z߰7�]Z/�x�������g(��X.̴t���������d��B�y0�(���aKI
�ڳc�v�$M�E@D@D@D@�
�e��l�I^�r�x�KĦ���xq��	Js�"!���X��P��M
��)�"" " " "P	乒
�^ ^�y�bX�e�4Jg�� ��X��<I�L��8�)" " " "P��E��&�r�����
��
}�Q�[�f
��(�gl޼��
��5/��дi�ƍ�%tF�y�g:�
��� ��<5����o���9�2x.d?}�C������(]�t�7o^�����
�O�>�K�
��c^�q�W@{���*���9r$��/_n3�hтt6O>��a^Rͱq�TE@D@D����l��2���r,
F*�0���a�ֻwo�a�^{�6��~�a��R���Y�t)���W�N:g&��u�h���[����>�,��n��P‰��۷�z�5k֤6Ļ�{�Wnٲ%X��}.\Ⱦۙ�Ĩ��7`\QV���	�C�8p �<we�l�ꪫ.��2�3�ѩJ��S��" " "P^	��������7^���W�}�����˃�X��/(�wx�V�F
3ޭ�����R��2������S�}��
:t`�U�b��鴼��k�۷�|��aD)�~n��C��]�����/�`^0F�S�};�0���mڴ�a
�o����4?O��e,ʘc
��}�kM�8�K�j;�|�e��B������@y%����]���s/��邮g�wi�4�.����2�
e?�8q��n<�w�yg�^�l9h�c�b(w���c�^r�%��;v���̻��qE�a|�)m�jբ��9sR:ʯ3�
/��B���:=�~
�DI	)E��Ԯ]{ŊFv�8���G�
Y�g7�D@D@D@2�@rS�`
FJZ7o����={�=�[�n�x	�$��6nܸq�ڵ�ڵk۶����q�ڷH܆�9|�p
�� N�ԣG�nժN�`��!ܹo߾���
����=��<��ʕ+ϝ;׶�!?�Catӱ�@�nݺ��m�6�
;����%F��
��LPU:�����@$�N
FN~-���͘1���hݺ�=���?�,޻w��K��,�ɬm�5k�;
��I�&��m4��)���(�v0xK��������[���
&&�}�����
���P�tl�����|=�������Ka1��|�[%�H�<�O|'�s�
�Z
,������^���
�)/��1���o,n�,w��uȐ!g�u���/�V�\���m
z�����K�ĸq���1cƄ�	��:E":6m���II~0���cK��֭[����qg�
�;DN�_��מ8�RW[
+��������H���
L�ꫯ~���w�u��W_Mf��{�������j��cǎ���޹s�U�� �
����Dv3c�D
��?��Cq�v\� �L�2%�&��C9r�:�t	�	�<F�&M�|��'�JDe�M��,���F��I ,#f�2-��9n+�%TN
+����j6c���-ie�W&=
�#F�l�[�j�N�:�䘍
�ЅYrG�
�����D}H6w��7'��W_-Z�衇
�u

��\L�)q�
���������3����t^
��^1/�5�aӦM�߿?yW����"�`<ڲ�/�֌���rC 4#w�1c9�b.�`��]����Z7���F����ܳgO3�E]D�����t�ncvX�%
�߹!���lŇD}4h@Őn��p�?���}C㕙
�0�~���'*�Dlr�T�rH:/t�k/7�n��Ƒ�{„	<�$d�${a�k���&"" " �@R�7��_4]�xѐ�˾}�/<d���F���k."P�li��
H�E@D@D@,b �h�
<�ۅ����������s���{��}h�W�jv��9��y���
x㳘��Y�j��-[��W���k2Gp,�,���������@� �
qf��`�K���(s���M
�ٱY;���59
wq��E����-�Ne�ڳ�Iġ�HD@D@D@D��H����\�LS�i�=;ezRR^D@D@D@D����8߇
���;9V���#H����������6^YVr�8��E�#p�1ǰ�l5j�(�����R���YT�
��!��>�|@z,w{��G9l͚5TڣD��y�f�2P�׼�RCӦM7nl��9�w��@.d�ӂ#���
ү_��۷�>�
+�Z��C*��/�5|�@�ҥ˼y�癗;h�>}ܗh �#Ǽ���7������
�%�OcR==��K3_m�	\����ߢ�O���O�
�<U!Q�G�_��
U5���r�AD@D@�r
��Hb���`R���0o�ݻ7�1I�������:�?�0�~�w�n�,]��b~իW�
�+�zݺu�P�íh�|��g�}��x��v[�iK�g߾}��Y�&�!�}��+��r˖-�r����p�B���T'FU�%@�㊲��8�N0b?nI�
�3�pꖔ �D)�������������&�c�(�{�Q�E�(r�GD@D@�r��m�XC*�ʔ�;<o�O~o��V�CS��������ō)ܾ}�
:��ܽӧO���^c߾e�S'o���Q��%ꃟ��СCqW�����)�|��N�:�9���w;�i��S�-@�㊲��8�u��-�z�>S���O5�7�|��h��FG��jժY,�]vYvv��
(�nk^ڣ�8�
nҸ�meus�+?�pݺu��׮]K5x�kV�\�t�uРA�)�_���W^iذ�iG>k_|��߱c��)�x�<�0н�޻|�r>##G���=r>�`n�~�����0qne��5�ƌ���S��'TL��L;ϋ����>{�����M���rR�'�n" " 垀�Q������(�y睽z�����o0�rǎ
=��%�\���c��ͼ�H
W4
#�Ni�U���̙��Q~��m~�r(���'ߏC�(�
+�p+�q�|"eQ ?�Dx��<�*�/a�bS�}�֭���p�f����Ǐwߊ(�G
y�\���o���n&���:�,le{#ǃ�'�x�]�v�U֮]37"|�><\bF<�aP
+��u�]���n����"��
^~����0�?���v8L�6��?��OF�nݺ��誫��н����6�>t�q��&" "P^	`
W���^��y�涖��ٳ-#~�pm�^��8c۸q�F|B��m�W~2���0:������L�ԣG�nժ^��Ӑ�?�}��E
�
0`����
s"�W�N͝;�
+IC~ ���x��[�Z���V�r/��SO=��_|��Й֫W��\�8J�W�1c�琧�z� {ޝ<y�}+�|
�s�9�
���d�
�& 
+�.V�=�܃�����7�y��g���j����O�,%+¢_�>x�{��y�_9|~�6�	mb8,�G
yd�ԩvmC��DO�
�uP:oT��;/?����=�� " "P^	�`�1��`
�ﺭ�ѺukK����{��u�}����T���#�Y�f�d�)�4i��A5o[�EK�2k�������1���[c�
&&�}, \�n�T�s(�n�ؤ����
5jT�(Vq��d%\�K.tʄ(GN<=
\
٪U�z��D!�Y�
&����i��
$Jf)-W8+�q'L���!=Cg��G2A�c{��	�a=��.~e�]+9`\��u��w�f�[
CɝV6}�>��C�" " �@����K'���ﮭ�a��v�
w`���% Ҧ����t�G���O�r׮]y(��`7��V�\����[z&����K�ĸq���>\k�r:`���:*�OJ�9F7{lRni�ky6hРH� B�ֹsg7d��t|@.��RB��@�1 [...]
�Dv3c����O�dq�v\��aaO$�$T~(�BN�
�ȭd�-�ˁR�p��QF��5�P�D�
1�-��ʺX���X�D�F�={�K����zA�v��vL
AP<�iٲ�G�*� &<�2}x
+�vH�o�M�����Ž��
�q
S��s$\��#<��%a�E�
���:Q� }�*�rp�j
+" " ���.��|N-�J��\H$���j6c���-�p0xt��yĈ,W������E6v�$f�
�_Y�o6k�$��O>��	��iG��\����ͽE���l&���f$HU~(���bP����z��[("����yR�a�<@LCO�7�հ�xD����K:VR��'�O�q�z�G�,��ˍ+�Y�G�ڹc$h��*!�8w���E;��ظ�\s
�JX<`W��ɧ=�>F>q�,�C>��n��v#:w�+��ج5

׏9�O�
͑�&�I��O��C/ u(���\0^9n;��
~h	&6��!+�潺袋�� *�P
+R�Y�1;�Ջ��7��1�͆in�%���^lL©��?��
�W�5
N?�t�`"6�G��C9$�:��G�
CǍ(G�B	���`}V��=w�څ���0}���oaݲ�(#�=�@��)ؒ�7��4!�"ۨ����s���[o�꛵q�0�Yx���o�z�$q3�ù�e!,��sc�z	$������0�$G�f�'�|2�	������M7�ԤI��q�h 
��<
�Dl��z&ՇCR�z�����@�%`��xF�c9�FM�,^����fn��99�O>t�!�&�����9Ks(I�
a����
/��q�*?U�KK|ɬ���S�3U��_D@D�| [��Dz������w��i���9���=��>
4֫Y5;{�?�ͼo��a[c��ܧթ��,��� 
B��1�֚�� �z�=0�G�c+n���i����������@	u�R-�e�
�c�B{v�R�
�׫NY�?��
�9���X��*V��MU���H�G�-LO�ۗj�r�*��mZhώ'Gi�i̲��I���  �%�
+��"" "P��&pn��<�r^���o)p�M
��)b��&���_l`$XD@D@D@�%�k�g	_<�ils�SJ��
:ND@D@D@D@2��[D,�Vv2.g���KD@D@D@D@��@̓l
�xf�|�r���XJ�ؿ�X
2�nO?��IW
+�'@~b���t>��Lr
S�v<BL�5k֐~�R�%�_���K/��ITƤ�5�*0��
j^R�iӦ�7�K�\9�HY[�$i��߸�u%7�	Pd�rt�W�^�|����֤9#����T�~�?Q)(" " �@�D��vc�@θ��娓'��y�)ABM;�P�z���XϮ�wݺu�4��\��TI���
웁��@�\����?��/���ݻ��*��t�v7�<�ҥK).HM�ŋ�o9$p��`�^�BY��z�:�?��Z�ҥ
�tx���r(�l���^��hF" " "��r-�<C9n6Ƕ�<���R�G�>r��
��#��L�/<����F�%�aj4Ph�}�΁�
�a�
ƾ�L2�LS����/��2Cɺ�ԨQ��oӦ�[׶c�Sv�C��
�u�YSC����߸�
+�C9#@nr�c�i|����M�8��;G�
;���[~�匏�#" " M��;9�T>�R~�E�J����-[V�XA��}.��l�
;v���رc0��5k�}��x���N����t�1y)��	�F��0��$i��ݻwϘ1!P��
+H���ڵk�0sg��
+�AS�2J���֟�7���qi,�k޼����g�
j ����J
+��Z�j
>
�Z�j��u�˖��~���v�����ٳ�!<��ܹs]!7n\�vm�v�ڶm�~�z��ʙ7o����C��7�@u(g�֭ˌ�m�f����{��l�2b��F����_{9�鈀���@� `������m
�ǿ
i.x^m]
bC���L�&C{����?ǜݻw��c>�U�u��n�
=z�Zv[����Ŕ!r��U�fͲ�"��S�N%�c̘1���z�:T(_|1�^�ƅm���^��h�" " "�Y�r�0�)�"iذ������ՠA&i��I��]�2䬳Ί��;���
0`��A��T�v�1��vc]�9s6m�d[0�1���o,�sC��C#Qά�2��[��a���rE`�֭���߳q'Fđ�a�
b��
+�k/Wt4(��me�-.,Y\�,�ׯO�����0:� J)�W_}��?�뮻H�F1��{�0x1_:w�<e�#�$�7n�q��
;6;;{�Ν�!�g�ھ�(�c�R�a
�n&դIֆ��	j." " "P	�l�|+9%�r2Z��G�
M�
+�E�����^�I�
���l���HOK�2�
8�G�a�v��L ��e��������e
�	�
��4�w�
f�5�T
n�)I9�~�fC��ǭ��T��2�UӦM�߿?w���v�y|*,
M\D@D@��W���ˇa��mf
+�<��cdVfE
.�P�,�J�b��}Ô
qX�&a3�E]DP����Ij���t�v��4���uo�ӪU+�7r��
�W&���l��D���*�,"��%a
ɹ'L��s���
+#�R7�L �ux�_-Y�xĢ�l�����
���9
������++�JO(7�e�K����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3w���>��j+�վ�N=���Z$��&"" " " " EB�Y�G&�,^�
Q$�	���=;Q�d�r@D@D@D@D��ps�Q��:~�-3�is9{v�$���I+�L&�_�$C
d������d��MD@D@D@D����")�3��" " " " "P�
+��Yd�+Z��&" " " " e�@�V���dX�
�>���XԴ3�~���1w�\�=o��F����cf:�ۣ�>j�����k�˹iӦ�7�K�\9���6�- �g�e��J�'@Q��#G�^�z���67Z�hт�6�ֻw��W\������$'P g\ܭ��cy���}����]۶m������a�f

�͜9s��͉c-]��"իW_�x����Cyj����+TI�qCT8p 5��t�B!������.s��ek&M�d��kO�R'��籎��}�ѵ�^;t����?��gB���5jX�mڴIZ�j|�۷�С;�2Fi�(Hm��R�~��%���
:�1�@(ݷp�‰'^~���
�r�v�o���3>�������E�
�9�`����{��ѯ_�+���$g����
/���x%�
�rǎ
m�j���ݻg̘����$��X� �;�k�^�b��2;DU��k�" " "P.	��`�[����s۶m�[�.&.͛7�5GfϞmG�u�ʕMx��6nܸv��v��
+�~�z�L+g޼y�Ǐ��o��ա��[�.�P�`:��f˖-[��dq��Wp�������d��H��Q#��=���ݻ�z�{��-����5G<9�l\���]`�b�
r�!���5k�}9��:u*�
cƌ	U5`��c�A\|����m�Ư]0E@D@D@J�����&rb𲿂w�}��A��|��ǃ��4�!��^Æ
m��
�C`�ϙ3gӦM���|��7��!�ȡ�(g�]M�>=�x���ǪCE&�u�V�_�N
�;�
;v���6lࡇ�� "���
Ss��'�q��>9�V.�1
���{��Y�r�ʀ�`4�M�ƪ&l_�(�F���;w�2e��@��
�7���ǎ
����s�N��jժ�3tm_�Z��
+N��p���M�4a-ig�鋀���@�#���̕R��o׮]	 ��[���g�[�jV��
>6�
>
wo�
=:J�979@���
+���{ό�����N�:�晍
lqͻF
�Hlw�駻Nn��naK
�̝o)\b�
�6mZ���I�}�i�����_.��5������@qH�"�S�j�̺�'�|Ҷ��j6*2`��M��$�\r	K�
y��ɸIg�
��-ҨQ#�H�/mP;�Z���0�
�6�ׯ�W��i����:TdÆ
#a
ɼ'L��s���
+2�]D@D@2�@��og
q⯖,^�����y��/j�sϽ�'<�ᓑz"�Q��Q�H����f����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3w�}C����yi�s^��U�SO��+����"��
E@D@D@D@*
��+��}� �5�K�M����駟JX
'" " " " ���A�4����ɞ��tr:�" " " " "P�����{m��4˩��KKS�>ٳ��0
$" " " " �"@��Z��l�%�
+���
%��.�x�X��
UYj���������@I���
��+�R���> Ce�u�"CӦM7nl���lG}4o���o�������歙3g�s�9�g�
��'���3��o�M呹s��q����
}�Q+�O�>�@�͖
Пn�������c=
��-��qJ� EpF�
�z���˗�Y��ѢE
2ڸ[�޽yׯ��&��E@D@D�bp�ʹƲ��u�}�K�.�R�J���/^��~���1"�}�ُ>���n�o%�OM�o��뮛?��O?�����.�0����K)�����a�f
k�o޼9�z�1���F`�^�B/$�qCT��K`���Ը�ҥ
��UW]u�e��sq��P�Ǿ��^v9Hs(���:�y�<�ra,f��o߾C�츘=���?�{���

��衇��/��r\�����+
+k��k�
:t���z&̸f�Q���ߦM��eՂ�'�
嵩ݍ�9xh�qCV�2J����<��t�

'N�����-۾k�.��_{� �E@D@D�l�ٿ6&���`
�o-cc(S��5�]d��	ϰ�fb�-[��X����IA���=z� ��+�(̙��}�=����޽{ƌ�1�
+3��-���]�6���;D"��ijF" " "P�	��X�W)�(N�L>��7�]��]�v�F�_����Z��~���ѣ[�jelͤ����+�:ꨣ����={n۶�u���S���m��ٳgۣx�]�reO�s��Vμy�Ə:�߸��C%P�n]4��4������S-[�lM�F$���_{� �E@D@D���-��5��x�XK��
_�WS9P����p�!��ni֬Y��
Y��w�^�Ǝ-���s�=�{���z+r��	���։���?�k��r��ԩS	�3fL���
����_�rU��W�_{���I�����@�ȳ��&�'F��\(C��c�� ���"97dۑ�+W�|��׏=�X�)i�
��.'nw�}��A��|��ǣ�nذ��uB��l�9s�lڴ�6�
&E�3��ӧO
:`��cա,غu+jשS�(�
�
;ܸ�
6��ln�_{Y� �E@D@D���
Inr��]L D���'H�
�7��qǎ
����s�N#��
�����I���l̑{��.�w����t��yʔ)FH��v�jժ�3tm_aӱe� )�0��e7�7i҄5�eq"�YD@D@*,��p
+�()9�W�Z�5`6B����ɚ<�
����F?��
@X��/����h�"�_�ݺv�J�1�1���|:�$�p����t�e��F
�HTGj7���H

��^��x��>M�6������<�\��x��������3NDr�E��̡RV�r�hS'���lT^ ���4G��� �p@���;��
#�21�j�:q��:�'�|2XY7y�!C<�Q�Q�F�1X#��
�ޞxe#-x�h�ի�6l	�H�=a��W$MJXƦ$uE@D@D��0�/bfr,
#�\�:��fK/�|k9\�?��3x���.��0|4Q(r��x
," " "�:b��9xr�
;oߵ��9��瘿����4�X�f���s������|�4����9`J�-Z���$8� ���#D@D@D@D@D #	�gV�&�S���Ji�6}�g��'����(k�.c���nq[9�
�([3��=;6r�lMGڊ��������
+c%�ˆk��W�T�+��
ԦO��-P��������T4&�"Iݾ�B��@n����6�r��>������������@"ϱ즺(`+�"%��0>���c�ـ���)�@
E���v��G7mڴ_�~۷o7}L�݂����裱v��O�>�p���Kr03h�ƍ�>WR��)�s5��]�j�P|g�ȑ�W�^�|9ǭ�-Z����z��ͻ~��BG�������@n�r��|[��	
A��͛׭[GGJx�����}��g�}���>��ی�?����gg�
�G r�i6cX�m�̙
�(a�ҥU�T�^���ŋ�w�
�CPS�W�^�C��z�:�����qݥK
+�\u�U�]v���-O3i�$��_�x����������HYdV���߼�}��U� �>}:�^{�5��L=���?�zx�
�h-u�ԡ�a�
�~�i9f�Q��=�M�6Iˡa��o߾C���
��QΚZ�IK &�O
7���S�	P�
�g ���p�ĉ�_~�
�-{�k�.��_{E��������@��W�v�e��j�f��K��w�؁�cǎ����K8D�m�*L�^x!'���?�
CM�V�޽{��3��aФ:���@Dծ]{Ŋ�3;DE9P}D@D@D@2���`�`�r*j���V�ZÇ�<�V����o��v��ѭZ�J�6m޼��-2{�l+�֕+W�;w�;�ƍ׮]ۮ]��mۮ_���%��ʙ7o����C��7n��P�	ԭ[۶m3
��tv��e˖��ۈ����+8OM_D@D@J�@<g�	�ȯGb�+ۂ$)h�k��K���[�SNٻw�Y��ކ��iݺ�+�G�
����.ӄ�i�K͚5˾�
^N�:�@�1cƄ*0n�� .���s�6>
��_�`�������<���
7��	1b�r�
��]�v
2d�Yg��ckb��\����_?��cӞaÆ
mm�
�r�w�>gΜM�6�F�j�
�X��,#�F����6��[��a���
+M`�֭����q�F����a�
z��
"�k��45y(�New�J
C9��_$��ׯ�zO)ilMLd73F$Y�t�
�ܹ�)S�A�~#]ݸq�z�ر���;w��$P��E
?����[�	�㘘x3�&M����<OXs��K�Zȉ��i{��h�6q��1���c�� ��/+��{�=s8>f�?;u�tB|c?4��]#��V�F�:������U�Va͆͘8�[~/	ͬ��
�6mZ���I�M
�y���˅��E@D@D@J�@2+�ɯ
�#^��Q~s!|�w�Vُ2e7�,�
�C�E5jd���uo�ÚB�
��!l/�'^�8Q
k�����F�\}*,�aÆ�0�d�&L�G���&." " �O��s��d58�ْ%����;S����;��=������/��|�P�� 9�\������� үC����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3o�C��|V��
ى']��-m
����tZD@D@D@D@D��0�rn��b	U�Gl�'{v�`R�ϋ ������������\�R�b揱�K at 5�>ٳ�I�Q�hH$��7�s����8��O���<���������@�H�,ίۗ�Lv�����PD@D@D@D@2� �I*y�-�#a\&LU:���������@D���'�r�s9XЮ]�n��f2
7m���6�?���f�
}�Ѵ���o���n�y���Gc	�L�>}�����㏦����3�P܁��%�離�'�F%P�q��v��+M�1a
���(���7n�s�ne� EpF�
�z� [...]
+f�9s��͛�Ҹn],�
�F܊�~��NL��.]��J�*իW_�x�+�ȡ�5{��z
��z�:�]��u�.]��~�UW]v�e�\�27�&M�o���]�\D@D@�
����ǹ��3�W�cj��|��������';��C?�p
+�a7��y�b��V�F
K�M�6I˛apL�>�n�������|�S�긘��۷�С;�L#��v �>��߸����D<(��q�3J�-\�p�ĉ�_~���-�Γ��_��������:��1ќ�<J&��I�&F{vV�\�8\��1�ڔ��/��B�Q
+n�\r	��
;��v��1m�~���ž�PfD�зBv��=c�
|�F�~�@F �v��+V�0Z�C$OFi(eD@D@D@R%�|��lݺ�^u��1}��t����~���ѣ[�jem��͛ۚ#�g϶�� �r��s����L"�Z�j��Z�Z5ϻ���Oi܍7�]��]�vm۶]�~��KF��3o�<"OB9��z�:�Qu��E�m۶���tv節-[�&o#��Nӯ��r��" " "P�8��yfr!S��SNٻw�Y�g6ܱ��H�֭]�=z������2a��u���wVR��
�c�!�z�Y�f���r�ԩ��3&�"7�Xu(�.���s�6>
v�~���&%" " e���+Gq(�N��?é�ei�g؈X�De����c��86lhk��.��Խ{�9s�lڴ�îk׮C�
9묳�v?�~�Sk�|��7��!�ȡ��j�M u�0nءz�L�<oᎋ"�yˆ
xXa67�ȯ�LR��" " "Pf	�#��&q��
o�%W��U&.��mq���61&���"�Q
�;w�2e��g����'�)y�
��|?<����t�ƍ3��c�fgg�ܹ�s8!�
����:�3��c
��q��3R�f�鈀���@y%��l��-n+��S�uDž�������U�V������XI��
PVڽ��{��=�����"�ԩ�	�
��4��
n
F�E�7XEf�!����L%�t	p�4m�4�Ð��<0�qs)��n]D@D@D 5y�r�d�h�����]t�E�\s�W\�ɍ�T7�,��>�T6Im�zG��
԰nlvX�h�a9������+o�am6[�"x�h��W#0l�0Ƒ�{„	<'I�
��MIꊀ���@�&���fK�,���[�Y0b��=x�=�g�eD�&�ً@j�MJ� �(4b �d�
<�ۅ����������s���{��}h�W�jv��9�f
��g�
+�
p@̫<��[�t��Y�x���an�BOKD@D@D@D@D �	���6m�g�J(�_
+��������d.o-����_3��ٳ�I�Q�&�E@D@D@D@J�@^-�Qe,æm��"V
-" " " "PT�(cvr98���������@F�7�
�+�NΨ�$eD@D@D@D@J����ȵ����|��؎>��M���׏2�f�ݳ��Ժ3}���ѕC��^�z}��W��+��'�q��v鞕C��
=z,[�,���o�0�M{�>}<z���r�'�=a
�x��
+�W�^�HP�f�ȑ�W�^�|�ʹ��-Z����z��
�^$�H������@!	`[�2��c[t���>��>��G�v�m������?��

��`�F��ɓ�m�v����δ��ٌaa��K�V�R�z��
t%����^k޼95W�\:?�3g�ܼys���!�'���������C�8p w}]�t�6�UW]�g閧�4i���_{��W�����@�'�$g\D{��C=���)t�}`����V�N
�
v�a�e0D#�Y�f��r
f7�[�ߴ��F�V��ڷoߡCv\��ǹ;`� �	�
=:����oӦM�rk�!��(�M�k���~�*�N����<��t7��~�Գt˞�ڵ�Nǯ=��+�D@D@D���I^q���A~e\��C�ڈ�4��x��W	����]��ܱcGk�{��Vvvv�'���^���: x�ݻwϘ1�b��i+�3� �5�k�^�b�ѓ
"�2\g�'" " "�H�����i,
#�c9.��o�ʼn۪U�P��S [...]
=V
�4��/�����O���_{������A �V��U��Âd�믿~�dž�hذ��ҠA�3�8�
|���?����-۟CH/`ڱ�YHw\|c��'d����L�t��;�|#�{��s��ٴi�U&`\�
Q��mO�>=:w^�G�C�غu+J�`}6��v���>�ذaC�����g���������c&
7}�26"&2��"aD��.0�Y��'���
�7���ǎ
K\�Ν;=�	� &�0Za�t��yʔ)FH�q�U�F��؏�(�c3� )�0��Y7J6i҄�����t�!��p-}[���^x����#y���&01�^�<;u�tB|c3���g�}��c��ܽ��C�K��
�
+���{ϴ�����\Ė�~��?{ժUXKf����ㆪ�K�ۤiӦ��ߟ|,�!���/����J1?n��
��YQ�y��>Sd�M:;d�Z���9������l�aП��K�,y饗ȧz�廇0P�F�LK�m�Q�~}O�2q��f��)��
U[
2���a�HG��	&�\"i��L�_�������xd
uR3��gVl'N9�/+�7
4�w�2B�D@� g\���)" " "P$����s��nv޾k�O�s���1w��g�i��^ͪ��
�̛5��
���
�Ư��u-Ni���W�f.�IH����������A�1��Z6�7�MD@D@D@D@<r
+�ɠx�"?U&]F�f#��|D	(��s(��ˏK9~�L:�ĭ�?�@D@D@D@D�X	���ٯ\��$\D@D@D@D���哭\�N�f�����\*Ԥ��9����9��͖�n�����������@0�侙o+��Ae
�u�l�� d5�7o
�>���fQ���6/��G�ӧO���u��'���cٲeVc�͝	H�ܸqcw��gh�?��~W��v��G3D�~��o�n'bک�֫W�����m��>��V�̙3�9�
"@Ⱦ��O�v�y����׮]7�|3����v�&r�'�|��Z�sW>��Y�����@f����_|K�W5����w�WԬY��
���W^�e˖��b;n޼9������k�5o������ʕ+M�?���$�,\��}���K�V�R�z��/
4==����g��裏n��6;�i���mۮ��z�

�F�n�N�?j^w�u������=J�y���a�����$����_|�E�>����N��C*Dr�e��ROD@D@���1���5k�
:�Z��
{��_N��P(mڴIZ���CE΀.��ѣG9�~x�:u�9���w�SE�}��
:t`'x���DF�n���mQ@2�͚5��[0�qo��M����
z[28�)|�!�
+�3)��8��2�x�S����9��C�	p�>��3�֭�I
��
+�[��_��k�r�CJJT�k��ѭ[7�(�����
����˗s-�
9���$������@ �Z$�j���9s�D�g�/��Bb�ұc����P�د�tv
٤G�����O���M;&���*��*��z�e_�bu�C�b:��'��4i��
Ύ���2�sD��-
��P���s���{+��#�<�
.�ٳ'��
+޵kW��\u�U�;w�q5~G

<��3��	;�+T�:������D!���>�v���K8o�v��fe�3�<��ܹs�:�C���o=����ƍq�1n۶mׯ_�{;`���4�'w�V��ML���'�x"���1�i7��ٳi1��G
uT,�IUϭ[�r��
Lg�-�sD��-U��`%?���W�&@��#�C!r
�0Nb�ɏ3�{���	�Y�jU��x�	��\Ư��\��\rI�|u�B 
[��',X����
;v�Ͳ��C�k9�Z~}���6�]�6���g͚,-
=���"��{��k�f̘��o��������qi��NZ�n�����3`��sNo�(�(s��j8`隝�
r�e_�cZ�q��Y!�GrժU�d����N�Gh�F?Y������D$���M*9�/�7����ƍ���p�q\ҟs�H
�4"7X��t\�D'�X�qb
���/4d���
�"�/b�j`�
֏�}�S������㏻�܉�mР�w9�]O,!��5^8��sp�s���z�D  �(�
�VV�g/��&!��G&��x���>�lb�U�=�s��" " " ��?�EP���~  w/Ð$��&�����"Z���)S�$=0�p��ƙ�un��cǎ%�y�ΝϮ�3�?61&2�g�n�4$����������j��pj��C�d� �J�H 6�Lv��`�q�[�6l؀��C	s ׀١�O�}Ɏiٽ{7���/+D=���ܡndm�={�Г`z۟wy�Ig�n��u��S�\$<�w�d� �/9�p�.Z���g�u~MLL6�,���	2�D{��&��ۈ�I
�c�=6}�t�������l����1,X3GRg6v���% [...]
7i�$�T�T���P�G
yģ�ب��6��j&�az饗�/a޲5H�ži$4��mP;��]�-��0����?��O�B^xʱTX�g
s�?��t`F�y睇�O�(��l�%�W��I�#���qdٻ�kȖ@r�P΅���B����R\���{{	���y뭷�lx��;���{K��?��c�|�iLd
���SO=e��[o���t�}��B�� Ѝ;X����ej�#" " �@�Q'5�N}�X�:�ujx�A�f��k�VL@��D$�O7bOu(*<���s��nv޾k�O�s���1w��g�i��^ͪ��
�̛5���}g]�������)-Z�����'9" " " " "�q�b,*��l�!{v�: �.S)$" " " �J �V����T�,��m:dώ�ޮH�0�2I�"��m:d�N�<�RZD@D@D@D��TD[��`J��������@Y%�4�"��
V#��"��" " " " " [...]
=P
J� ������4W]u���[���=V=����_#�����@'`j��
��rD��5kp�
:�(E�)G��P��
z��N�=�	�؞i7[�5�
�ެY�[n��ږ�

��Å��4R�}�Δ>����`�~z�i��-Al�`�S��C�츒�
\�8��
:/�qS���M����<���O��n����[��{V���VX�E@D@D@������˵j�B�9s�㋫���P�'���W_%�C$�ᨶ���c����NOH�Q����I��~ C��+g���3f������|"XHD�Ԯ]{ŊF;D�R�(]I
�Ps�0�}�vܮ]�̟??�
����ѣG�j��ڈ͛7�5AfϞmE��O<� ,��Fb8���Çc�V�V-=!
�'�+W�<w�\W�ƍ׮]
��mۮ_���%�r�
?~|�>~�
�%L�nݺ�HȐ�
Lg�^hٲe<�18V=���_É�����$H�YK
ł
#�_K� [...]
+7�Xu�(�*����)����g��RFD@D@*&�4me`�]&�`ܸq��w������bx�|X�+W�|��׉r��6lhk��F�mǩ<x���?���8=��r`׮]�
r�Yg�
����ݻ��i�&+�|��7��!�ȡ�(g�7L u�0nءz�D	lݺ��L<wJ�I��F6l�!��ܠ
���^�������$#���l�a�����4��ͼ��%l_��Kl>Ld��"�����"9�5��	
���ׯ���JXc
u��yʔ)FCb�q�sa��cǎ���޹s�GB�1n;".u+E���8&��ФI�n��>ZD@D@D U,@�AK�V&+��7�L.3�
/Z�衇
�e�sS���`�f�V�"0�h�P�$ �%�_x����#y��p��
+�޸��y:뉋����3��c&�S�N$�fc�{���a�רQ�N?�t�)��'Չ�1�gڴi���'?
�^ȟ���/�X+" " "P2ұ�4h����n ���~e���GX0�+��f��#�<:
7�,����Lcv���� ��lT|Ho�P�<
���6jԨ�9��
^Z76;�e��0�
�6�v{�=�2�B��:�/>Æ
#a
ɳ'L��s����otI(rYG��lɒ%�?��3[���{Ь��fn�k#�"Pv	�3��*/�E@D@D�� �O�'w����]{~ڟ����{�>�O��jV��^0gެa���;�v�-�z�8�E�t��e���(bQ��<ʹ�2K����r�Ǧy���؏r9kMJD@D@D@D��@�rV��
�W17��ٳS|	4*&g�ZD@D@D@�
+�|[���\!�e��ٳSVΥ�(Zy1E+U�D@D@D@D@D�L��'{7��+S�Pʊ����������$
[��> =5��Ҕ�#�2U9XG
�.]�̛7�v���
}���9R��C��C�k׎� 9F�>}�x�1���v�tSe�W�^U1�z��JΜ9�s�A�#?�����w���SXDT�hڴi�ƍ�%��q�� Ρ�ԡTPtf�ȑ�W�^�|9���-Z� �͓O>龤jc�h�AE@D@D@�����m��•���w�WԬY�Z
���W^�e��
u�>��([
�%�)��M7�4�|�R�.T�l޼9Q�߸�c�Rp۶m�_�9)z��

ٷҨ�w�7R(}�~���{��qQfݺX�>J�����.]Z�J��ի/^��
e��C��G9��	
��w�\*W]u�e�]f��
+:�g2AI� " " "��@R8
���5k��W
:t(nT�N_~�����=����5j��#FPF��K/Žz�gX[����i�&i�4����Y�f��r
U�q�"��:u�s�a��o��^�VfF�Caj	��0��O�N��^{�}�ӹ}����ٱ��;�;z�X�	��q�3J�q�5q�D.�wY��LPX:������$�%j6,c=����x�kժ�xs��)$w<�X�NI�/��B��+�H�W_}��

���X��z�)�C�ol�
;v�?v�BB:
eZl��Īs��>�v��\*FCv�����РG�
d1�X��������@b���+�۷o�~��a<`� 
i.��͛��g�8_�5�6hЀ�C�
1G�ٳ�
�'��3Ϭ\��ܹs=�����O<S�?�m&�����J�"�����Çc��ԍ7�]�>m۶]�~=n�P�V��~�Q�P��֭ˠ����t��`����y/y�4������@
+
+
���q�W��/�5,X@��T�G�
m5�1c���Ѻu�P��㛅t?��u��o�k�#ٯ?�o��&q�����}�>it��<i�$��c����ń"��%_�f�
+k�5jThgu�d\�\����t��L u
�(�y��E1���+��vx�	�7n�}��7f�;ZÆ
m����#�<�w����֫W�8����޽; �B@���v�ʃ>����� }�6WF�k�k׮���:�,{w
,�;.����
Y�k��p���z�
��[�2�	:g㎈;Fo��^z�׿��"�K�th(��}�<��m�ı�ڵ
ۗ��Bؠ��][!�Ƭ�kԨQqϘ)d�2eJā����
������"}��/�@���.��h���E��رc���w��][��d$��8&�Q�I�&�|�0Qdk!WL&�B������@'�틑p���ʡ�29.؈�%�vժUZ�(L�I����L\��-"w.U����k�P����=�����7����.�
+��K��n�9
��
/�{M�8�B7o��ߺ�i¯���/��>L-8�����_�jU��|��
�1Ҹ%��Wp�N���iӦq�rgu�i�]}��\0
m��Ou�j��W������@y#`0L�r|���n�r��
;�R%�pY�Ư>��,iz�Gh'H g�
7�@8�����n�2k��a6"��b����?�0G�	�rX��`9�(��]���Ǭ���8�ams8��طr(,��Nfe��*N�Y�(".PϺ��iժU���v]���
6�.��0a�7���J%�hƚ������'�
q�Ve
uR��K�<�2	`
��
s�݃��ˈ�4u�E�� 9�{�������'w����]{~ڟ����{�>�O��jV��^0gެqԾ�y���3�W�-O511#��(G�.�T���������@9#�W�$�
v��撚�M���!��T(�8e]�BM^�������@�"�s@�?���}l���Nd�Wb��l�eώ���p�e]�
�+�D@D@D@D��	�-��H�WnN��;��|�1
�{�ۊW.ᓣ�D@D@D@D@��@����?��>Ϫ��G���-��s}�q+Z��Ew�$ID@D@D@D��0Q9�m�E�e�Z$��
�B�22=�)" " " " �!��L�����egm_ܥ��!�ra0�X��I oQ_A[9
{Qb���&9i-" " " "P�	C9'g��e<z�1�mF��ɉ��������@y�rb
F<[�V������L��H�
+|mh�" " " "P�	���"1�����e��+𵡩�������@�&��sg�l�����
+}mh�" " " " qwr,(9+�U���+%F(���/�Xl�^�|�r��\�Xh�" " " " "�K �al���me|̎;ﳜ˺lD@D@D@D@*�<+9~a��ܵ}�4vc�+�VD@D@D@D�����0
k+,���." " " "P���/ϯ��b9ׯl
e
��6�8��8�_9��_Ł�����������@A���W�w�y��U�u#" " " "P�d�����ŕ�el�c��ЌE@D@D@D@�	x��y��B%" " " " ��7�2����r��Ud6���������@E%��lj\Ƿ|��
�zUh�" " " " ��S�.����.c>�b�c���Pfm" " " " "P�x+��}�y~團�����r�TE@D@D@D@����y�d�,�r7�/" " " "P�Xײ5��xe&���&" " " " �@,Ty~�����1�e0W�kC��@��[9�G��t����������@�V�4����&���ED@D@D@D@D�ɯl
\�T�u!" " " "P	�`e7y\n
���M�8����ДE@D@D@D@
���
����+njh�EHD@D@D@D@*&� [...]
+��Z$b!" " " " "���+kI��
(H��q�L�8D@D@D@D@*4*���ـd�`T��A�HF �|�le]
" " " " "�K /�r��x�k����!" " " "P�	$��k�L�r�G$ " " " " ��	�����`�\����/" " " �@n�r
��+�Š�������������kCD@D@D@D@��:�f�/�����?�y�=�����~�3a�2G��/��9xr�
;oߵ��9��瘿����4�X�f���s��r����Y�Lsr^���SO;��WΏd.sH������������tle'�����"ТE
U�f
s�1�4[�5�F�
]s`����D�P�
��O�8�RRD@D@��@�Vέ�!�-o(c�mժU'N<��cy�c+����ov��I�
+ [...]
�ؿ|���3�<�좋.ڳgfh�
w�駳�/���e˖M�6�q�ơ��l�r�޽�w�>���������+�ԩ���#�M�6�G��馛�Ν�[��/٥K�뮻����l?}
�=��ӡz�uH���o߾M�6Y�?��/�mۖ�%y`柯P�
�%IOc�������.�x�>���(Ǭ�x�����2[�f���?�}��0 at ck�}��yp�qZ?��#o��F߾}Cq��7���?�1{�lv��FϏ>����o֬��'/�y�A����[
�[Ǐ>�(��
�/������&���7���_ۿjժ<�w�.�����u�{��8�����`��>���[�n޼yܮ��D8���!�G�
}�ᇸT;t�`�T�\��{�����c
�|��v�Bv;��֭|>��
x ,�(s�8㌙3g��_�z��x����������
.��c�
v�a��u�������&G}tJ��������@�01q�8''+'�R�k�#�z��_|1���/���`U�n�:T�9眃�Lgv;e۵kW�9������ [...]
+�x���ׯ���r�-W_}u�J�� � ��������u�]V�����q�_p��
w����X�v�B��
�s�]q�<��ܹs�>}<b	�:t(�Ə�[�
rW`�v��q�q��#�V�Z�V�C-Z������," " "P8��cl���}��
�
Lg'� �#p"��u�YD,nԠ����o
�[��=�0����f��f���W�^=7�wҤIx[1gmϺu�oc��|I
ף���(��5U )�$�$z�V�>H
��ŋ��x���8|Æ
��_5jd.��=z��\�V�!�i��K��_��W ��Ç�$^�dɘ1c�w�����SO����<y�d�������m�ƍp{��'��<�p����o���e�
˫����e��" " " ��O��W�[C�R��
e7
+�V�N�~���xp�
7�?jQ
�}l��۷�ر���(f���^���{5kִ����K/���c�U�R�0* ��\�5pT�Q��O�
X�5f��+�|���kg^�4�p$p����;aLs��$���0L�c-^v�m��k-]���ܴiS� �ٙ0a�<W���k����L�_���
���E��䈀�����D �8�Y�Df�R�o�!ùH�����q�_W�0
H�4pbg��D9�x`�'�>l,sC����!C�%�ʿ���y~衇�ƭ[��.�f��2�w�
}��>o۵kWړM䙓��=�9QWN�����"N��0�}���G��{98_QH����=<�?ĩ�������\�����]�����׿�5wV���u�QX�������-�9��N嘡

��9ˈ��[�.v�� �#�
+9s��
��������j���o&��=�'��1�m;�+�p���d��c
�N�t �8��qC�1�����dy;	9�u��IZ:�l�a�c��4-'�tR�3bn�C_�
�0�ǰ�
��y���$�
�g�x��
p
��
�2=�7
=/���_�[Sle|̡��AD@D@D��r'�,�

9��8����
����Ǡ$�Y#0�X��F�5
=c1���$bc�����e�#��X�f�����ڸ��[�
������͆A3k�,�$����N��
Xoٲ��gn;���>)2x���OG�d�ak�X�e;��c8��5�S]ۗ��	��}��D;���
O?���9(�G�;w�$��;��\>��S{��
�a�@Ƚ�i�j�8Z�oI��

a',��������S8�g0��[�^����� �
�k�!�Eǎ
��?E9/���
4�:��_}D@D@D@���k������Nv���$7!��7o6�ʘV={���������	i0`�Q����c��}��3f���ldl0�"�

�X40I".X�f���:1
n�����+121n��Æ
#a
��
���k���c8���mi��D�X������
m�d3\R�
�
���&�
E���$R ��(Il �9��W�a��>c!���ۨ�Qn�WR���e�l�x8k 	���_�~�%d�ߍ7�H��(煸|�"���X�(4�\s8�蓛/Y���O�c(�ƿ��
|��{�6n��B#" �`����7����s����M��۞�'w����]{~ڟ����{�>�O��jV��^0g�,��=��g��G�y��3N=�4��/�Q6�r<��h�U��ً@�H��3
"7�̙���:BD@D@D�P�9�s��"|YY�Fޟs K���B
���&%Y�扩HK��2@�P
�f�Q�%�e`�RQD@D@2�@��l���
�S�tme��سS��t|"��� ��U�r*��R$�|q���Y0��'�1����g7<��{�yg�#������H;^��X�ܒxe�B�y�M �	X.�^:VD@D@D@D@��X
�q�P���|+�Ԕf���J�DP�����u�(l@�����R2����i��.
�." "�9�/T��������c��+ǝ�1s�5��UJ
��M����T�˄����Ir���P#���
q+�q#�v�կ~E2O����'@~R}Ҙ�K�"�w�\�)����O�_���;����D12�;�8 R���3�t%�m����
+����
j�ڵ��v u�z�<a��:��(��"uJׅN��v��9
Ԟ�%��f͚�5*TH�z	LpW2+�L���׵�U�����R�L��L��y�[�̸��P3ϔ��������KQ�LӧQhh�"!@�4�>]w�u��������T3%�����r�!E2\��
:`,ں]�|�
+P��ȇ.��S�Q��ZZ�&M��O���<�4%�N>�dS���
����r.�Q��zs]
3f̓O>I�`9)����C^
���ʉǛ��Ԃ��
5�l�/\�`A�Ν��0�W��{/7�Y(��l�H�nݺaÆ�Z��xh{J3I:��p�ԩ�Yr�2{�l+���.�������0o�t�))Ig�q)�v���SV�����C3���IѾk���I�u�Y�N����6��ܷ���7��z2
gn��N���|?}�'=���W��Mࡇ
�V�T*?@��~�-��b�ۥK
8^Rx�}ӎq�?(��?���~�m"��ƍ�j�vB⁘CQX��-,�z��a��go$�����t���\p�1�
Cv&�fn3(��w	qc������'s�޽��
��ȡt1F�+�;
*�R��������/_�)��#`��6g\����^�Ȫ^�:��9c�4߳�'�������߾��
�o�lڴ�������-Bݺu��#N�v��<��6O�24z
+G�r�r�X�����߸��vh�E������,�OOJUs���;�<���n���.���J���o� =_y�
+>s5S��[@#�O��>��T������@9&�e˖+Vt��)�
/��l�
;v�b���$�����34M�b��t�M�<�
�� ;'�YYY�۷��2;��T)fz�jo��Q%�{�?[��tkԨV�iӸ��[
+m�C��ɡ�
�� g�L_�|y��6T�h�
s����}�s��������o�k�c�/]�����}NR��ƾ�̻Dٖ~��� �aӂ��
���Ƃ��ׯ����=�ܗ�V��o\�s�����c�]��G�ݻwG�?�|=�
���h�ˇ��pˍp�3�8#@��|��3G���X�xJ
�����oh?=�XW�6m�p�{+X��y
�" " � �G�J��Z����Ͽ�;0��� �՞���T0
0
�����F ^�E�̛<Wǎd'�^�7��(#�3���=�N�c������y c���NjJ�q�kϣ?A��Ǫ�����E����KܵQDy���=/�����|5a��ϼ��q�����xc�c�>⵵��fش��iՓo���
{N����m3���ؿw�o�^��Fޛ��X����Fw���	�����>�1�[�li[p$�P���{瑺y
�Kz��
�K/�D7s�_{4�?�W���hРkԨe� 9X�9НoJJtްa�L���>��C����s���)*
��`=]�ф
:�у�G?�����" " � �e��������d�z^s�5-��ЫW/,"M�(v����믿���E6ܥ��#���)�KE�{�M����ڧO��K��m���z�-B�񐲺�0�V�*U��]�4XZt=SҪ��
7��Ʋ��T��+W�@\�G:�������}�Laj�
ģy@��������S���t�؄
�?��'nj�8�4T-�C��~1�B̝_ю��y,��%MD@D �	��]K��p׮]	~�ѱ�	\q��?��s<
'|�C�߯|�(���`;�3(���9�̆E^�~}�!%{��TO�;�:nܸ�
+�c0b�5i�':��8$��k���`�
����14�#��QT�ùq�_�+����QV���
 �>ر�=%�f�N�ɖ�m��~�Qfb���'�@wݷ�ɉ���8.�i\�j����i��'Gs͚5VN���;*XO�?kQ�`��E%?�\�GD@D�"��!����C�/
�ڵky β+�X~[����G a�i��.��
�!i1
+c�D��R�+�
P,7��YDx�A�=�oܸѽ� ���9����J��7.�d�e2��J�vN*'@�?I<}
��o]_��>��+����"t�
�Qc9��۞z�)�(�9�ݱ�V��H��u
+7@!˜qx��4n
+v�''%U�8.�!g�}6K�C�k/��� �~z�D��s�
6l��%Kȕc�n��m
-��o�J��o�`=���\�<=`r������!U��/" "P�	����ZRF`��t��W�����7a��bIs�A�������㷕 ���LdleL#��0
9~�Rq���M1�b)��,"
h���lı
y�x�C>��c|�䓶�����(Rљ\~�d�φ�C7?��c`�_u�U��V���_�u��챕
��
@<��ӟ�D��#FqaT$\� yR��C�5���S��߸rx�Bv3�Z��̆"�!'UU��K 8�'1
+9�Xv,�OO��s
+$Wt��W[!���!�r�ص��L����zrr��y����3%��O�
R���" " � G0�03�Cp!',#+�4O�y�M*"
�����
+3�����Ӛ�DxC	ư�S��g/��)v*�x��@ln=`.�<S�
�
v	:�	�W1��7�GHNǾIcB�3Q
�g�F������g�@�U�E
�%�����-
i�3:���=����e�hG<� ��M��?X�T�d*��K���N�����.�}מ������ݽg�ݧ��z5�fg/�3o֐!�>8�3+����8���
+����\X�r��'7g{B@�
ʝ[��� ��!�]@�x�P�:c�EW�B�>]2A/ʔ���e�>�AD@D@D@D 
d�3�{�o��4(�C�V�j�l��WJf褣����9)�J�uXB�9!1%<}
'" " "P��F���\&1��y�tD@D@D@D@J��7
�y]��ʥ�O㊀������T4e�V&�I��ȡ�l]xᅦ?y�����>�$K
�W����A��%�RaU���m�8���)+>�僼f!" �C Ϲ

�����
+��)$�M,iS:�8� �z
<8���#�^���O���}��w�"�6eJ>��Cw"��կh�V�Z��U���n��Yδ�c�M��-��-Bt%" �H !
9ܯ�U��7�
?��#RC�r����e�
Am�(=3�ń�a~��q��+q�$鷧%3�P*Z�-�4:}~��RO(E�2V)�i��6p�@�ƺ�P���,Ԭ6����w�����/~A�]�vٹQp�Z��(�
A��)Aٻw�СC	T E�n�(
���332�a��g"7�[ԋ����O8�_�����f�|?}��1$�N�����(&��C^�������r����c���<%�Ǝ
k�5�MJ��*��
ؒ?�L\�I�W�����'��:�
�
Hz���@���;N���Hv�o^��K*?@�N]{��s�p���3�T�R6��3������Ͼ���o��
+�����@Q(�R�/�me;v���qpz�ERT�|x�h�f#���ɓ����}��<�9�������1c�PU2�=�	c�����H�7o
��[�<%Q�4��
~ ٷ1(��7�0)�|�R	3X��>r/^��믷k��Bc?}�~b�r5�~�믿~뭷(��ސ�B�x
C�d`�L�n�>_
�Eu������F���m@���z�F'�����3�2�N��P�
>~�������y��w�y����8qb�U�T�s��>ȣ��7��˚5k"����w
CP��%P�j���W;����/���v�6V� ٣�:
+G�X�ؠl�ͼ;s�Lۂ�.ְi�5k^X��駟�y����sp������ʴ�1ű�����CB��޽���Ǜ�m;/�Q�8� 	~���1�Q���
�
s
7$
ή>~o�ܹ�=�-�Ä	ˁ��;+-��0��y��\�~��s~�0tK<��^�~��}���ۀ�f�x�y�6g�
.c�H�W��PPV����|�[6���{>2�!�����
߸�
�85�'��=tj� " "�!��{^|}�w���j��/�y����o��37<�ƺ�^�|�kkzeͰi���Ҫ'�ZG�c;��4w����(�ߊo�vd�p�2դ	� <���G}�c��l�Ҷ�H޳gO�
=��ֻwoBL�/�Ix
��^z�n�(���n0�э�)
�3
�r�t�
Ži��O�
j� ��
8�Nt�l���_�>��Mˉ'�]H��]`�����0�+
+�T�[?}>ר�x��7���/�/_��F�f�5jt�5�p|����	���?
�
���������o�R~e|�QΚ������.ǣ��n+�T����ʕ+��}� �=-���
+.^6S����_{�'�|����OH�9ʯ�t1���n�P�(�#��"Ԫ�E�-Z�I?�
�wu��7Z������
+�ˉ��a�
+t��w�
,?Q��
+p��CL�l���b.�3"i" " �I �
��y
��|�!��*D F�*UXcj>{*?c�P/�c�=�m��~���f\
hF?$�g�J1&��4�Z��
Ŏi��O�rR��������?��3�.1�|~�C�����3�C�_�~�+=���n��I�zH��ڵky Ų��
�IL�8����H�+�/�5k���{�	���M7������gϞ<R�e��M�o�!� " "P��m��ó���+��뮻�ʼn���
z���<��SXo�'L�>�_e�ݙ�=���4��s�=��2�i�Xធ�3�����cS�����>�%w�E�
+�K/�4@��>��	��q6nK�C� ���eC^�m�e˖gi$�[N����T� �L�y
=�,v(����|�ǰ�׭�>�^��Gs�u	�g
�{��B��h�'�&��;l�0��%K�<����g$@���L�$6���ट_3J�yL�z�Q" " EE �V��NW<
Y���?��dI#F� ��H"
�Uk]�ti߾=a���ǯ=�������ӧ�I�T�~�T%��<
���;Y�O�/I�L;��$�;�������
y����O�r�F!|�
e�p�駳oz��G�'�,\Y��!;蠃��!\�S�N䤋B��<F9�,�)��6��J`�\�~��z=�ԟ�8O<��_��W�;aM�+�%�t^E(?)m>�$e瓎3�ꫯ=#I��	�"��j|cԨQ+V�@��痷��7Tu(2_�y[y0�,^2��-���:��&>ڙ�)�Q�T>c��5;;��4�(9���ק�����JV
�B/���zH����S�x%\D@D��
<�ۅ�������
r�������4�X�f���s�ͺoȐ�X
��sb)
^��������(*sqϟ,�J��B*S�(=�A�_X�ɢ{L�#G��/�*OS�\��T�[]?��b�\D@D@
+A �"�TV�c;�&M��^�<��zk<�49+�ҿL�!�a
<����~�YF0I��NyR>�up�J���S�.9�ED@D mnN����Ԝ�[�|��ft������E@D@D@D@*��c0�r^��u��2�`�8gZ3(�e.��9Р" " " " �I��ʹvr��$�Y|#e�ajZH��1)�M��GM�4��N$:�"<m�z&�=�yJ���U���`�i\�E�mJ���L2���"�O��U
��	�y���HI(n~�|s���_w�ƦM��T�SR�����#����
/�����G�i�Pَbd[��ȇ~��"�IvjHI�"ס,
+���m)@$��B�ލ{��>�-?�E^���ʇ(@��<KEI
*" e�@~
F�>N�V�*�k�"p}��m�ݖ!�"c?嵢(CM�(=M��Q���/>�#�?��"�IHI�"ס�
+�h�m)�)*��'���"�RZ<K�(��r
�k.c��Cx�i�Q��Lmv��oABV�[Q��cǎ�EΩ{�'�/~�
J^�ڵ����r�֭6lتU+�
B�Se��o8��d��٩
k�3�
.�����?�c��[[�n����O8�_�����f0� ���-Q�!����R\��p�>iϽ�
X&�[
+ s]q��iӆz�iG2p z8�T��x�&=�I�qc<�J.B&��`��t�-ZP��}��d<�%
�I?_I?��JI��u�]|�5�
;֞Ǥ�k3�ԩS����~��J���;N���H�{��O��<��W9���tD@D ���}�Z$��W���u��X!�Q
��|x�T�H�W��ɓ'S��/�x�L�M�6Q���wnjCU���4N��(�Ѯ];;hBl��

ٷ1(��7�0)�|�R��#��!`�z�q
���+�L�2��_�5kfV�� �d�u��?���ꭷޢp�{��I���
��>LI&�O�ya+���v�����Ӑ������(���
��믿�<�
=�=����<�3ز��qk1c�
�pO�����ǓC���7�T�O���M���_}������74�o���|m���
v	�����������7�yw�̙��~����5lZ���š�O?����ׯ����=�ܗ�V�&T��%?�
s
}�!��w��m��#DĶ��(g�qF ?�F�D=�y΂;_W��3�ho���C�k�=�\
x��u�(�OW
��*i/�(�I�Ǿ�N����cc�W�^�<x>b���>_~���y%�iR�w����2���	&D~���|�߷
e�̙���/@�[~��ͫ�}�h�" e����y��E�=7�	��|������O�����
{����}�5æ}v�K��|k
=���s���'�yV��L�����jG6������I�~
<T�p�޽Ԅ��hٲ�m���gϞ
=zП�w��<�4���'���|���Kt3G���q�ѠA��Q��oTMC��!6l�����;����r
:Q� n�\}���q)�ˁ�̿n���V��X�أ\��ŭ����+/_��w���/�_9�-��*�T��Ƿ��'�l$,�����
�|� ���f͚5j��k�A������W�|�_D@�:�����ſؖt2<������r�J"
�K������� š�Lei�с�����x\��~B��Q~�i`u�/y�1�����L�-"s��s���m��2?}�����/��ˌ�4H�Ȗ��
]��=
�� [...]
+C�\ ��T�[?}�}f��Q1�����
X�fM�/=��3g�y&�D�Ǐg�Z�Nt�~
��]>��,A����=����D��_�v-�X.�_�c=	=���w^���P7(�����>�_NV�h6���
���|�W�u�]�`�(b
�C=d퀧�z�_B��O�nm;
���ვ`~��>�l�
�?�}�M���K�p� n�B�K&N�������;����ч5�x�/���"ԧ��*�떤��{�>H;��
+C��z�#��PsǤ�H����;
w�?��"FH��*�26sY���}�n�>�ËL^�Y�ˊU"�L�"���!`^

]l}
+��o�e˖���(��N��j4�7Ax4i.I$��+3��<��Wa�R
+" e����u%�H��sc�79���?�"1b�@�=V�u�ҥ}���>������+�nj�8��������_r���h����(
t�x*��Il�
���<�x�>}�V��&���[��

��8�����0ؑC�@/K�2#*��6�>\�� ��S�N�K�JbԲ����O�6./���7A�m��E��ST�r�W��6��#���ᦛn�ٳ'��س��uR)�'��O<�׿��{
2��Õ�� Ϥ��ͫ0���2G �g'5[�dɳo������

��_Fd�d�FW
�wD
�8$��R�VΦS*
K~�гf:�[���
=�Xg��O�Wn��<�����+732)��*g�I���9xr�
;oߵ��9�H3w��g�i��^ͪ��
�̛5��
|c�	�����M�[�zZ����k�2�?m�uEщ��lQz��7]��M�T�u��g�$b"��g>��F�Z^�U�$PD�\�Q�	�r��M�4!�y6n���(�fԨQ&#�Q���]��A5Cd���0b!~���q;D0L�(VH5��
+�E���T4c0�r,�̍��hgH�H�@ab0nZ�ӝ
��\�r�;��@�CD@D@D@D@D �@Q��n/b0�ql�eʺ�D@D@D@D@*4�\�+���E�X����6`��(��ԧ�?yg����>,!23*�I�&eo&lŭO��'�.��3Wt
J캚4i��H �u媗���tӦM�>
��Z�+�:��!�;�J탫ԩQ�n��?�_ԫU�~�j��rme�?9n*[��_��M��T�S�O���?x�`W?����?�|tU��T����$k��~�Ҥ�O_=
O`���\u�]w�+j�̙d¦�f"iq
?J!%$^�Ex]Q~��э5�{��ͮ�T���
Y�(��el��k'Y;���z�����8N���'������^���k��n��/������z��M
'~�x����m]���^���u-����"0�J�Y��G}t�m�e_2�Sf,�2u�[��e�e(�R�&UV�Gѓ���z*��v� [...]
+�1���S��E%?��ҨQ���_t��Qd��_|�G
�"�k?�3(�N�����D@D@���������;�y`��u�m�����~7���������?������j�yc0��J�I;��(�E�6
���H�I
;jVw�ؑ��1t���L��/~�c	�����e�֭6lتU+
����t�Є:
B�2���ᶳ���[�^��'�p�/�K��L3X~�rv�؁!�򤝢ֱ�y�k�=��C8)8;�;N:��#e�M7�_{�F��
�ƕ+Wr�Qɼܹs'^��˗��T��B�]�'�zo�g϶:�ݻw�С�#�[�n�r4o��T?f�n����$��޽;'�瞣��y�*O���o������U�b����YD1���r�-�k�4�A�^ޤ�/�3��.�J��fSW�zv)Sσ&L[?���z����'��d�G�̓�̸\p;��s��NO�[��R���." " ��aڏ���}��@��ٳ{7&��~��~�������4�b?;^[�/^9ɠի [...]
+��������������z��~��O~�<��
+R����lٲb�
+
+D�t)�Ξϗ��s��?��
7���[&.nw1�����_r-�O�t`��,��7n�>d,�*J����	$<���IͿ�~�
���}������11��0bl��5�M�ƾ�̻Da��s܄Xæe֬Yxa����~Jg<R�sp������*��ǵ���
�t�ٕ�?����(<���E��v�7́&L0
+������1[ �Pm�0g�
��^���c��62G1_
g07<��W�^<CH�l��T#��82�>wp����=����O���)
+�3f���Iz
��Ǔ"�
��W_Y�p�5<ں�e�U���r�{�ϝ���ﺢ�o߾�N�xy�����b�P5}-Z�Kn�������]_,Q�a����������$�DƁ�s���۾���|��7_}�տ7�{�6��
z
۱�s��u��Y'�>��[���Վl�_�c>�^��g�:T�
�5��<�y˖-m
�d��ѣ��z���#o��Kz&���^��9ʯ=���b<��<��옖T����
J<�6O<�D����7n �C0�8_͚5c�5�\c�M0.-v��p
�J��3����o�J*ǼՠA�֨Q�g�[&vx����O� }NA��F������y���'?
�
�
��o��G�������s���]z�o��&�ǚ5k֮]Kn�4��}H͚5���F�rt����@E&��W_a	`�|�m�c�`,6���n<r�����ST����!�iy�Wp����,��z|��'�0�N�g��(���|.
9�����$T�+� 
�X^
nA7��#u���8ծ]'1� +�x�O�9ʕ����%��O�4�������4c�%�n�Bs���٣m2��/#$��.
�I�BS�J��m�_9x]���nD�X�C�T)�p/�<<�n�jժ)�nu�����fQ����4����V�w�%�@�–��}~�
�2��1���
%�sR~P��d�nv$�b��~��d�Œ�~Y����<
̏q��P9@��U�LOvLK������o�ʕ	S1?��3���n�5�Ϭ�����A��ps��
k�''���=��y�y��L���kN��
?>FO"<
���'���0����O~�<�2�t3;�2�_�>�"�u����w����i)��휞�~���늱�
�t�2}�tle|���B��
�`�n�j����8� �Ļ��Ա" " �@��-�]�������O�.ʮW��&�j��S>"�l��n_��:�����ʻ�^~�X��#
���UX�<��_>�S�מ�N��"�5.��d5N����g���4���cEZ��������ڸۡ�l�2�����ͻd���»���?Ƈ�?)O4Ī#<��$53����b6
syɒ% [...]
���R�#��<��O���[��},�s�n�6��|��5���qq��
��7�Z�������yI���(\�ʬ@
]��ǐ���kq=�&�K��.KuRn>��)�
+" " 8��4mV��þ���#
��f���b)_�<	�s�zd�?*O�� �|��g�9b�".L?�:���";a����kO�Kp�w��x_���!�
�T?�$��L��i�
*?%9��@�M7�ԳgO����v�:蠃��S��_b��>~��j˳r�6�y��'�9"l70򜝙_N�/�pr p��@@�
 Ǐz��ӧ�	 x^���'�D�
�Σ���xځ8��-��2YN�=�%c�y���ƒT'X�nތ�f��y����+�	��1��~a!�ڔ!���	��C��4&e�7r L[�C �q��-Ok�G�E~�d��f�'��v@�~�|��5���3޻�/������`�+D_>��!�=� ���15<�I������:)��ass���(��b�/���͗�\�*H��ܹsC��JR+�%" "P&
{`(�Hb��b9��[|�Ћ����<?���C�2��� [...]
+[�����e�ŝ��|\�{�3�љ9mi%" " " " ��l��_����R�	1���J���l��c~�e��l��
�W�VnJ^�g>���
c+�uL��o���hQ^i�Ĥ&�2�
��~���~��ى����4�n�Y7b���-?�=װ�����
�4cGpɋ�$f�h[x_�$�� �I:� ��8���Qg��L8&�s)x���Zș��R)M��T�
+�>��r�8'Qy䙥<`�R><�V�B7�~:�$J���R^��4B휢�cʓ����[,�W���D��S�d�߅HÇL$MEB�D
uJ�Q��,�	��ˏ�=�~�E�x�"H���<R�^
+��|D"]�	�RQ��_��:���f�
�
+�*�����iצu���w;��\�rx�o�V>��&����7p,ǂ���s�1�>�r,gY��:k"�8n
��f?f
:�b�
�`�2
'_��^��i�o�ۓ[�
���oz��|�}WX=�v2��J�U����5�sq�ݝa"}��pxA�
�ɔ�%�
?��ԣ�9k�ش>	.���@C�SH�)������Q��\%

�V�j
p�ۭQpq$;�
&��Z�
���\\	W[�k%o���@:�|�
�
&�}���v\v�<��ip/G�
�����I$ꕖ?ρѿ�
�c��o���.QB�Orȷg�->G�f_�I盠p�s��0�J
+?�
��=2�7"�
�iH�o�K&�J��b����
++�b����ʁwQ	?RAX����?[V=�_��r��w�m_�nK��9�Է5%���o���o�r�Y���<�-2�gO�٩�g�
�RV/�K[�y��7vH�>�_����7�y��h�;��Q�N�=�2ޘ�DZ��y�q�%p[\�t���I��ɾ�<�0F0o�y^r
?�㼛�#a�o�n�.qqy��܏B,ϱs��]��qNT�cH�_�=��K��%��a���;�y�I1V7s��8����/�<1v&y�&��x>��5wΆ�w�3����i��H�{�����'�s��k��W�:K�
���|
�����
2_{�a�	{���%�(~X
+>��2Iv������������,G��
|��()�~��n�W�(��}��9<��,t�:�*����gң�
|;&~y$�
�z�Q��\�{6��#���)��
�*
�Gr8Ѿ��
+~�'|�l��tz$u�$�-�
4@��_��#��$P���4��~���m�p���}�
+'9�����w�
+	>?P��ս���Zq�jе�
���J����`�������sE%�(0�?
�w
+�&�޴�i�ؠ�iY�
zxL�������
mqD����MӘ�������R)�r�oU�
X�2/+��V90�r޿̊���U)����Y�n�F����61a�c�v'BK�61ww�����7��Q�u�I
y(\�����Ʃ� �9qupNe��o�1�O-��'�����cX�6�k�H/xA$�$���k%��t��i�
)����V����c�:t�O}����G�6~“u/�͒�2>�^��Y�?��g2�I�5���{/�$�\��xeȆ�^���D~Ws�뾶�f:fbI/�g�#�+�H*Xa����i�T�����(W��'>q�M����,�ř{l�{�+ ~Ey�ǿ�d�׃���/��o��\��b�%[p�x�Ҹ g���B:����;I��a}��B~"�+�Ր��iL���
�\ͤ����
�d������{|跄�7D�C��'�*	��Hz��/����U%~�r��j�m�=�$������|؂߷�&�g��2<��xb���?%V������wGK�I� [...]
+*��9�����* I�:1�
|҂��7�/Ⱥ�|9�4����x����@��Ʋ��~��Z�~fy��I�S�a�
�:��!6=����zi���'
׾�i?����^~�4vp�V��_9�,΢o�1�c�e
�c��
�����~�����p���ǹ�r���Wy�y�d�r��Sl�_�俰>=?l�G,/ݓ����OM�;0υ�{xB�/�X��S1�/
�BY�w�bN�βc�Yů�_l!?
�m���=n^��_����
r=��:886pDc������f��*�udGK޷�+7�d��|��'ʵM}��~e��]���	�(H^��!���WN¤b
�7�G*����2O�5��~+�vC�s�徕���2�������:�8�d�݄#�����I6֤�*LI�؏�I�X��-����&*x�x�L��
+S��y
ac
኏��8�|q�_�QGL����m��6�A��"N6�\�����y��[?�E�%����/���Cn��.*��o��
�<C��=�^��o�Ԡ֟:
�{͜{�{:��1Y�<rۮ핷|�����
X�߭����+�NS~"
C).� �~I�I<�x��t�rͦ�c��(�]�ί^�3j�[�՜��QI���7sT�B�Ѣ
+��W��+�sQ�F�R��
+W,��
+�b
iQX
�������6��ߏ�cQ�S.�U��]�q�oy�����������TNd5�5*�O]���y�O�xF(
���/]���a�L��!=f�
+��,����f��/� y�M{i���Q�{�Yu�ɩV+��3��u�;�}��_�ݱs�'��!��%� ��5H,
4��o�%�C�.�4
��>E���W����(��B
�wR��ԥ�{�(�t�	�v��J�["lb��=�H��#�B�(��rQ�
+U�h:��X���?�E3��� o��w��X�I�kI���;^(R"R�(����M��;�*����T��U���j5s������X�
+endstream
+endobj
+2809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.939 544.286 345.152 555.134]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.1) >>
+>> endobj
+2811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.938 132.884 436.151 143.733]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.2) >>
+>> endobj
+2816 0 obj <<
+/D [2814 0 R /XYZ 86.4 726.045 null]
+>> endobj
+989 0 obj <<
+/D [2814 0 R /XYZ 141.991 204.57 null]
+>> endobj
+2813 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F14 1050 0 R /F49 983 0 R /F16 729 0 R >>
+/XObject << /Im9 2810 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>> endobj
+2819 0 obj <<
+/Length 1163      
+/Filter /FlateDecode
+>>
+stream
+xڵV�n�8}�W�e�A4o�� ��c;�n�4���@[�-�DuI%���~��d�q6�C�I�
��
�
+;wv���{�3&
���™��H �T"��3_:_]"#ϧ���;��
Mә糈�W
�n���]��OOp7�K��$��8M�Z�^��UY����d�)���Co<����;��
��
g���~��v>819�.s8���(uf�O=�d�~�XD�D���a�����ͦ
������$#�����o���Ce�a���@:,��d��;���s��x>�;\������z�6��ϸ��͌�� )�w�Jk�u�
+�l�VEcB��
P�G�M�ɗ*N�c,
 B[�8_��EY&�=�"r
8
+q�p�G#�8i�&���.��8�O���>���g<B�HPD�=�Q����[�Ef��4K�"�l�0I��l�LL��I�"J-�Me1u��O�M�q!X���.`���YV��V
+R��ql?Y\�Iia�Uc�Y
�d�V�'����o/n\��6mV������X�^��L:�@�t��:Pi�H�������,0ަ����;_7�^iZ�xv�~PijG����278�doҺW�
UbZ���� _ !Cǧ
��F���4pqb��hx18��\��������l�����Ȓ~��c����o�˜�F? 4�>�j��_W��l�=���2r?iE���rє�S�&U��+�f�lg�7�"�SC$4!��A�'m
AJ����������P��qe'�p�or�؟��c��<�
+y��Z����R'v����#[�
	п�����vB���}��=��#�6���3}�B�����1�`g�8b��&�{x��f~�e�-�F��3�a�G�WwYh&��P+q����U��vU�W�� ��h=�y��蹝�es�PbV\
��^-��.
����6�C�f�����$k,t4�v;�/��g\ٺ����
���<�����e��.���Rx��?��LG��0DB	�2F���~0��E�
��L"#��
+I���?��O�<x���IƷY���}��o���fL��y�n˸�Z�p���C
+GV	'��|�,�r$��/FQ
�
+e2B�
c2�
a�ϯ�E ������]�բ�2�(郧��fL��)߅1@€�gl�
�Q6{��_��_�

h
+endstream
+endobj
+2818 0 obj <<
+/Type /Page
+/Contents 2819 0 R
+/Resources 2817 0 R
+/MediaBox [0 0 612 792]
+/Parent 2803 0 R
+>> endobj
+2812 0 obj <<
+/Type /XObject
+/Subtype /Image
+/Width 953
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Length 105528
+/Filter /FlateDecode
+/DecodeParms << /Colors 3 /Columns 953 /BitsPerComponent 8 /Predictor 10 >>
+>>
+stream
+x^�]	�N������y
�W��H�L��^)Q����h�ޣx��JD�"%/!
$M^H%�L�R�
2�����o������w�N��|���ڿ��9����k%��2�M8�?��"�'�%1��	5rAdt4�E��N����h����wyw��-?bO����ؓ<]�F�접e�N�3us�\"3!�D�
�$مDA��ޯ�^��dp
+�':Q��.w�Z�beKTLL)�P�Db�����cwŸ��)[�h�����7����Q��2ĕ,C$5�Cmx�ɲhgE�o�#�䠱k�w!�s�ੀ����!w
W'�M����yÆ7� d��
`Yv9 Ѓ�D��29�G���t����A|�k�̨�ON�3O�
~:��F=I^7Ĩus�����6
�JqW��θd�]���xn�
��`�������6��Lpݓ-Y>7k�{�h����]
���-xNqV���?3��+�)�������K9{��5���'eN~��c^�A����ڶ������_?n��#�ҫ7O,U%�x�Ĕv#2�MZ���᏷i{��-�~��>�����y��Qq�2����TX�?���S	ᮋ݃jY/��
$�ڌ-��
4ݞY�,!�I�-J��UԵ��A𓺃?�1�+�t��f(�D9���L�Q�
Q��8$d�_�D"���Z$3&J)���N�lZ
+�UUE��Q�:)����*�+Ŏ��b���R�8�D���b��@���"۰��!����d��6�%�Ǥ�w��E���Z�N-Ool��!*9U�]
��=v
V~�������)Ӛ���!5��%�a,nj������%F�
�U=��w��u/1*G����Ex
CB]�Na
7=����.�BA�8θ�d� �okX�ݸ��yV;|*�[�T�K
c_P7mFU�(�괿0u�~e�yF�ⶋ�&ƥB�����4n��Ͱ�G�q[}�ú+��!)�~щ����r����2
�Q��z|�|��P4![�0GsI�o�E$�Q
�R�g�Oρ�R_�ʑ�j���E�萨%�d7-ÑuHu��O

v��������г�Z/
(���u��q�������>UjD?��Ϊ<Uʗz��W�������|k�7=���s+���J�R�F=ru�}�-���/��g&r�_����4J
�bO���
����Nl�C��t<3�d�3�
l��7?_�S�sNY�ѼaC��yEB�*I�H��
��M�:�~�#����t"
թ=�8���?�bD��YkBr�Ĕ䤢E�\�εh�bE��M2�D�gQT�P׫�!�hr"V�dQ
b�-B
ڃ�Œ���X{��PU�%�C�Xi#���I?Q�H�b�XI��)%ȝE�QX��T��(�>*Q�Y����L�Q�(���
+�=tH�E ����T��.�H*.��n�
(P<ŔB1�_T�~(���Є����<
+��8TD�Ջ�F�
:;�(���L'7I�E�����@
����h���P�>3$[�)��A����uc�"!�;�#�^C�P��*�
�]�Qȳ�����
��CCוd��d�v�y�{��^���5���RIc�n����O����[ꓼǩLu�
u�N�:��Q��:��3p���sل�`q`��z
�
��|���P��O����l������M϶��3�
;t���I�U1 ����<wVY��x8O�(d��ε\�{�m������.�8�Iȝ!�p�i�7*����xiڹx��Ӻ+���q
���yb�5��u���wYX��bd�ы4!ѓF\5����_)A
U�z�$�>���!:,v[F.qH��MZ=�d+��#4!ÁT�
+
;��S����,�?���gl�2JϘ�0�����������C�Hs�f:���d<�UuO���t����	�
�|�ǰ
?v,#�X�1l��y�τci����2��2ӱ�����)�z��]G�0*B���	�B�X3�D�h�g�O�$��=��|[�&�
6"��Ԅ?v%e
��m��~��]��d�xy1�rة�ab� lj��E������E%K�+*�WrJ
+ؘ [�j1K��,:H�PSCY^�E�:%�=���!�I����ޣ��H)�!��R�2�>
+��)���A2H��3�z'���.�N���vI*.�'��<U<U�NjQ(F�U1T��$�h�)E�|Ape!Jh%�.�#
+H��}K�$� 	N)*���(�� 6Jbg1QR���mA���,&��/
+��*��b�X�pɡ�D7���
+pҋ$�eI��^�P��e#/#}�K�,y�P7��8�.5�@�Ȱyە7,'��7���Ab��� �Dľ�'Lp#���g��#yS�
��TK��:0(�x�H���T^QZ�X荙N�bj�����Ҭ���˪�$("��@ŵ:J��N?����Y=a�b�ZF�?Z���r6' ����� �B_��ذ^����5�w�+u\���Q="Y��?���$}ǂ�@�q
؟���a>`�%bLVvR��c�Z����B7s�.�$Xm
�
�EL�`��⹊F�
bM�,�l��C�U>��qdh�|j�W���Nɘ�~]��
��q�>���GsoAseK�@Ti�>��%���;��\�S>�L�L�
��A�A�!)zA��eY��q�Mj�0fv�ٺ={� I� NÚ�����XZ������W
���X���(J��s=.��>$�EE�_���|j�:(ufF�
����ls�ueJ�<�[b�)����O�:-�{8�>C�JS��Z|�H=(��48[;e���i���

+����U8�4���`
֙S�C�h�=�70ٸ��5d���ƛ�N(vѵk��I�5a}u�RԮy1Л]�f-9f麖[��
Vm��z�=4�ۼ�e?f!TZx�6ݽp�Ӛ~<�޼�|�͠����OO�bX�^���@
*є4��)��b��-�
K1����c�t}vr
��1�
We��A��h*�vgƮ^"�B\�p�_�*��ձ�)Q]5���-U��B>��t�W�ɊB#�6�o�
��m�����1�\ܧ(�
+E�E����B��6
՜�%���}Q'�:��v�Q 
+6����
+�UR�_�#��(��{D��3���Н�|&�N�Y+T�w!���lף�1��E�$��R=�+E�OU,
��P�S!n3�O���'�=b���}sP/x�
�+C�X�����?l���A;��1K��K:�E]�Q�I�PT�!I�hZY'�9%����ч�����+�����c�~����]�fDxz�2���JM}yJ�>�m�y�Yտ�d��5k=�X��]ذ�_�R�Y;��/�x��m{?���X�� ���aȝ���;�Y��>�t�_��xNusO
��,G
�q<��X��
z��ߒ����C��{���6��jK�ٴl�S��U���|��_n�)��
+t��N�'͇D��1#�2a
�\��S1���Ii�@<M<�KR�O�����r�KӺc����c���&������ڕ�J���ɠw:KA�zUc���
G�G$ݜ� �Wb,�e%Z��Z��1D�:G��B�ꖩ�*����㶮Y;���5:3]�K���.�16�O��!~
�?�s�K %1��
[�BW8i֫oCE&�@�ʕrl�x�=���tsQ���`�s��B���@�~��7L�%�Y��Kdt�ͪ>��z`iu�QL�S]�j�Ȼ��%�E���3ƞ��
�t�4h���{$dA^V�D�Ͷl�f���G��S��M�G�6hm޽�6I�+� ����w?9����j(�q밺���� �a����
<�{�w���Bu��
+�/B����ƕ�1a�K,�馍@�m�gM%A68+)��XTU�!ri�N*#�+��V��e0f���uc�զ��$0ơU[ʎ �T�{�am#��S����u'���(
��]ɕ_{e����U�&�n�xF(�^O�j�z�2���҃���G剠��i�ƾ�Ƥ���ͷ�ս �V�R��������Y. ����?Ęo�SM������n›�R&��=��פsN�Վ���	>#
�h�s�����3>�\������͚��w�r%B��:I�)��
@x_���(�/�j�+�`��<�?��4P�
�C~�������w��U.
+�_���0Œ��S!]�����@��K~��+�)7
����=��(�	�!�[�	g	�J�� V҇�ɽA�W`U
E���t� w
ru>�%-�
+�>Q����*��))K��ńE�d�+�'��L�Rr����b�8���v)QP&+�1��VSJǞ��п(��������
g
�����(���<��G�~�*g ��5�P�l��u]�G,�q�
/v��~\��
ҍ�
��`�ii!-�ދ��G��'	��{H�^0l�0�T��i��,'�X��
)�YD�9!���{��G�9���z�
���wC��o�Q�ɍ2n�]����Fw�M�G��J6/�R'Ρ�dDk���#b��x:�F�y�za Ic������9�
�4�#�kl)��l�@��l߲!4���%&�O���:NC�qb�
۝&����挣��G���'Y��@�\�M��O�< �&�� ]2J�2-�Z�(@F+�'B,��,
��.��,ǜ1d�!q��,����
��ES
+�\2�$3�9򞖊)Ó�?)/�$V��k������v��G�q��G�q�X��W��?��*��*V�#�
��؟ii1QT��(�-��a�$�Ҏ
����k�
:�v����
:@�?��q�\��.צ���"S�������<���tȱd�	�R�r=����i�
��T(�=����]��۟�8���#�1��Æ�T���p���yi6�c5����U>���ܵ�r�U3�Ԥ����%VM\S����--(,y0[�������9�ƌ7"ْ[�[p\(`z-kf,��EaA����}�Y�@[�^9m�z֝�j���
�\��y''
�
�-_dI��&ge�y��:��W&7e�,I�d���
�U�j�g��!:_rj��(�,G^���Dt�
SD��+��^��
!F� ��ۥy�O��\�и�9�1���z�ۯg����(���E���팧:���"�#���j
�OI���h�d�琾ʰ!9q째�X�D

r�Vv���?V��rk�+��1�	n,��l(�ӂk�������[� ��˧�4��k�ƌcVa��Q#O�*��m���0ʧF�z�E�jh�ߘ�t��[����Ǎ!�䡘�SĎE���QMP�J�bz�9��D�^�0}��6�/�K�f�������{M�?�
+7b"�R��.*��c�*Ų�݃\���d��Iz��z��"�f
��Y>�-�z$��`
�����WKVe�g[����dBB���
KO+8n:V���c�0��y�yT:��� L M����8]H��>�௎U��0��Ś�|�^���4
qǥ����gzڟb[N�*���^[�x�
+EM�L
a��(�@?�n�"���X����\|%�Z�ƶ��&~�_:�Y
��~0�/y�,p���c/��]�� H���m���	ہ��`	2
+�[����
����AE���r���W��E^"1��ώ���6��X���+�z��b����i�_K�W��c�2Z
+(5-i;s�O��X�KH�[GuC�
ԥ�
N�Q>v

�3�
�8�Ś��_y���sF&~�+��wu�c�Im��o���LU����*�!{He�q=�m���B�� z�k�<0�*;�KCƾ�E
pG
���5M:��_�u)�/��Kl��=b�!��ú����0�F���e\*z
�n>����?�%�<��x�O at Yo
�kY�Vzb����_Ķ|��n
����e,��?�{}���%�Z
�&:�
ѕm1
�4
��y�\��j�&�%�x��Qz��@���
D�N����՝\��؍��:

�j,��ڴ �d���c�zb-�)��.6�l���/jˀR]�Y�.�*,ozR�͏Y>����zP�W��&��)���Bq�P�%MY�,��Gd����=��׽ǝƏ���;�
= �ӎ�}v�ꋭ�ԵV�JS_y��~�ܸC�R��}��ԗ'?�����~M�;���{�5�WZ�h�k�
�m�B�YZ' �j��2y-�_+��m*����V
8NMS����r
+�T!�
���G93��1##I�cT���ß�����@�{�7�Y���+�&����צ�x�m�q�x/�⿉��
���!��O!�,פ"�,n�֭ǓrP�{��WI�፳�e��n�����/����^}�M��?}��
_\�ؖ�27�rC�̱�{������z,�J]��+O�����}V����xm[�sĉڷ��
f���F�U���z(s�;���k�[�@�ߗ?�����&l�u�#�
}��;̝��
�N�t�.x� ԉ��=�=�ۗ�3��u��8����$(Jm0����O���ͻ�y��:�L�:6OKE�-r�:#������/}!�\?��Kk�����b�����&|�-��˼�c_����gέ`�Uu��o�%a��Vg�'�1y*!&�
�
f,f�
��OI���iF�i!�
[/b�5���Uiݽ��b'���3���QW�#�
�6�Lڃ\X��8��?��l(�"��:w�F�dW+
J��[5O�T1kp�
�����g��L F��x@�����&~R
��&��
�|�tR+ [...]
+nܹ��<����G��W�b����K
+��d&U�}Dq�FL{'c�>��JjV�87I�3f%_~���w0fC=��������Q�z����*�����E+7�[��Z�����0�K�/U���Y�����3fL�6���s��1�B�=_>a�p��Vjp�m�Zc�K(m(sa���x̀'7N�"���؇��M[$�3ྌ��͂:�b>|Z�u%N���������Z=�[1�+��K��	I�]FH�t�͜�p�U�
�Ԥ���\�o���JfB��6kڨY�F]x���}V�5N�v�e˕-^�D�"�i
+�i;g��Ӓ�~��
O�m�淾�����>]���	����H`�����[U�1`D��Y:��??���XW�3�G�����P����5����
�����	�`��]jZ!������ejO�����Y�����"�7b_c�uۖ����%~����p�HZ�D�́
_���{�`%	T^v?tZl�n����-ʨِʉŪ�%Խ�?�N��.]�$�
4QR�2�q���:�Y��_J�8|�7��3�o���}'�B�ыV�1�g����Џ^o�DA~�=���ɋ�P~�(D�����r��@���A�Z��+O���y7�]��F֕#�W*�~��2t�ɳJWm�Պ��-U���Z���XՀ{�ق���罅?>���8���
3���{�7�2q�f���s��]5/YiE����\qh誓���$�
*�#u�X�3�6L�4*u=�N
�1�0ѵ
H�I
,�&~�-]ɔ��W�'��E�<5�m(�{c���
u��}7w��u
cл��Ȼ��2vjm!���zR�
��v_{��
j\G
2�g�Z�ڈ��ܝ����y������BO��l���&���RXߴ3i
��*f��!���J��S��"���c�9�O
+
G�
�1C�qH�<$� �SϲE�/Y>�d�*ʛ:�4����r$��F��E1�3��BN�1�7ЮU�<6ē<���u�e�p���89���������K�q��(��7`M?�O8K��+�B�c0~	'u
+b�����
�
6~��sPdZ���j ��
�ԁn�W�^��
�..u:��s����`{��]�����-��y�`8���
��
����Ok���-Z4K�&M7i"��5�R�|�?�+�"��ꃧ��m�	�����%Ui�����-�yo%�,����|�ݔ./o�vc�s����C����Kwƞ������>��냿���}Rm$�=ڻ{M�7�%�Ή��x�EU���<b
�
:E�G�}W^P�+)��B�
��IF��	t���{:]�y
+�*%�KA��� D)A�W3���?���so��j∁�ʉ�괙�͸�uT�ۄ���|{Ⱥ�
\5�]
mٖ�1�Ή&A`9"݈8����›X�]�Y�r��QI�T'�I7}��b�����ʨ�Y�F�hu3��=��B�5��pt��������~:ɪg����(������u'��
��)���h���������֕���h�2Ө!�jĈ�D����'����7v�ʂ��"���}���Ԡ���q��Nz���.b��<n
q7��
+
���e������ݫ��J�
Hqm9p�{�S��4{�#Uw����pi+Ei��g_�8���vr^%�w{]ou��
W�
Wct��
LWCD%%D�a�<4
�	k<&�0Ws`d���Xi䥍�R�)OO
+JB��~��V@�E��p�j�:��ң�\�)��"��V���'��`�����,U1ȷre6�+[n٤\5
���
v,�E�W�J�+���<3�u ��%�
\�̀&��a,N��@HLO�
"� N$��gF
p��C�� dJn(-(d2!_]�*�+YvA=K��xֺ����KUG[$���#�؏�faeLJ��
>��I�j�z �._�2
`� ����P�;���������C{��ù:p�,K?e�<���˟|dЧ��d�=	xz:Z0'��vذ+���.)�FTP���*gu�v����(�-4q�wo�`˳j_�s�[�~�•9B)�*����
w��VA����
H}�AK�'%�O}��AS�:��Ͼ����q�gc[�ݩ�ٝ[N�aϒ箻sY‡O]wέolL����V�܆��s�
�
��B��.2C=I6~���ۨG\~���CW<��=�Z��w6%$����z�W���
?o��t�yw�=��'>?$
҉߿v�����7�ᗯ�����
W��nL��m�����ᰉ7|qߚ���|���Љ
e�ɤ��>����bm��u��FfrAx������O�	��3�����[����|�jW$�Q̇��&�=�&ˀ�Y)f���y�&�*�%�X��@,Yݡ�
�
S�%v����U8vG�(Q�����g�Y@�䭶WW\��D�"I�+�x�ѭ�:�t���'}ܑgV}C��%h
��B���ҵ�ǒ<�u�uj
�{���3ٖ�<D9	^�שo� � �Q|b�XO}[+�Zt�դ�R�dc��5Z��}������ZcC=g�~5<�a�s:�_��:Ή*+��H��� �~T�[�z:wW�g%|�
Km��Z���F���Rb�7g��Z�,�!z$8貨b}�$�,3�*Q���@
%K�LD"y���[��>�MA���yD�U�T���b̨��`B�%&�LS�� ex�
��GHy1ʎ�D����_T�rs�?q'����7
��
+W��@EQW��bK,�Y|#{�~���6�

+`�?���eu<92��
���$�LI*��P<%Q�H*Q,�D���%��LL)����%�'�DqZח�6�����#F��s'��O��Q���%��LH)�T�dB���BN�$P,���.ZOAN5���:|�2�X����ܱ}���C��Î�~��_~���_ڱc��l޼���G��`���ʅ�/{,�g��g����>�-�T$U��'�J�
�\�w�JIv�E=S-�LO[�&��g���٤nBb�

�p�&��n�.G¹׭x��k�oz���e�1g����M�.{'5u�<�	r�;�C������2�w�Y��{��k��e�-u*]�o��YX�Mi���e[��g��ȱ3`<�N�7�ᰅ߾��f�]���zqm�76L�5���^�-1s��/��T������}ꪄղ5z����>O�Y��`�)��p�9��|�I������x��Y�-��n=����:�c���  :Q	�o|�/�;������ޥ3��oSV
���c#�-~l��t�����2Dͩ��5*ߴ5Z���)
+�#5�I�iN�9��q�s������3y�����?:��vɈ=adO����0�����tl��G��d\pķ��Q��Ё���gtE�
�Ћ�
r҈ ��+�%��ŭU�kq<�7��q��
'40϶�[�cX8٢S��ԓ.
+��լ쒡�X���E��(v8��
�G�i�EA�j�y��̮��1s<�m9��yP�Ⱥ�~
ƨ���\P���� ��.��"��b793Ů*�y�'�gX;ڴ�SOit���{��
+9Φ=`��Fl|�����K�YN��#���tɐF�M�)���*�BD�Uyyщš1�b�QU�r�Q�
˲��L:(-ɹ��icVOBE����a�"o@��1K�?��{�(5)H��k��Bf2<e���[�HQ�Ȫ�\�B߇��E�TH���E�`E]H���D�fD����5�h�*�
���R]ds��L)��!�d�䒥�����J*^�H��	��cM,]���(�P
+kIZ�g���a����
{���V��,���X�xbɒEdI%b�&-��	k,w��].�ѫ�?b9���������m���~���O?c���]G�D����ci���2�
G�B^f�F�o�������%�&h�[��۵{<��C��t��V�o���.8��ye~�������k6
�e����_�t��}u����G�^S�����z�<
+
+=�x�g��<]���	���7��_��н�������蚨�k��snmyέ�ݙJ/v�I��HV�'h|�I�<��˓�
�L�Q������WHȬX��K������9�.}�qM�N�ƽo2%j�
��
+�KZ�岉
_ziÞ���y��Ы�w���6��
k�Ɖ����ϝ=�z1�����K��;/ڹ��KHXwh�ٚē���cH��[�}��#V���$rCu8Q����(%�jp��r��c*[�f�ƕ@z9vX¼
m�ɧ��1 \[�X�I���&��I��`�S�:��]؁�We�Һ��4ǚ9BVfzК�B�
+��Y����h�LՈb���dXw�S'�/v}m�@�!����0V�������
���	���!��
+��C�ݾ$-���h
��=P'���P�X,
5m"FkM�� x
�x�L*�	��F}Y��Y�bg�zh୏sp(n�ʾ���l��s�>�B�Ǫ����Տŋ
+���k������#ʖ�E?;b��16f|�
��;8>
��\�e�c�b�H�l�j��|�83��1�
I�u�:��b��K]HE�Ġʰ-��~��,R4�Hbf�b�S��Xkє�E��ٍ+]x�X]���\�4j[�"�6j[ᜦ(&VY��
�+,�I�����\D�䔊5/���js�K��i=M��j^@��.��ħ$!�E��ɥJ'�kѲ��˕�Z�L����`-W.�LY�I*+�d�^Q��wЊm��}O���e�T/W6����\�\R�2E �\�UD6�R�|R��H�yI;�ʚm�(���%K�B�&M����W^��ƌ�K�,U�d��%J+^"�X�#ҮL�F{���'#���^����4��M�`I�$�=���-�ߚ]>���%_�HQ��x����7c3[Րq%�|ef~�rDfˆ�١ə
�
�Lx���j���d���fff���|��W^�t�`�VE/b2��#����iq�a�����
+�߿�rT�K?�n���Y�LbF���딮%u�m��Z���m�ynomT>L��/��.
�]�.6�1- 3�N�^	���b���
��h)B���6k�`��/x骦gU�b$
X��3S
���7c�[ث�%��̔?�&e���}�W�����ח?��'�('�
�/]օK�>�.O�(j&�뛞I�5���J�7~=dr����o��TJ��h�"]D�4�&
��H�N��.n{�8��E-
����0	n���W^�
u���:n*к�p�)����
���k��%����Zl�X�,I����
��k�أ(���o{ꇝO�j�RX���b�����&���ƅ�c���o��F�="l��{�{tB�	�Qn�
�77���V�5G�
+7!8:Is�g뵳{�袊����A�?����:h�7��������J�Sg��'�
��s������?�-QbF�,���{������z|�6ٌc6f"%� d���"�T�la�A�
Ӳ���L"t�ԌY��Oy:F�ƌF��ɲ�����'�i�L]%R�6�9i1P|#!�X��)E2˗)Y�x���Ċ����"7Ă�u�8��
�5VY��Z�/A���Y
�OZ�LK�lE�e�|ʀj'-��R�X��XSʕO�Z�\J�h�F�rE��4�+[��8�T�<6��ɲ�cM��Z2UEe�%*��QA+D����ƕ婗�-k����~�!��͝����n���u
w�ڵ{��={��۷���}���hP*HO�ͯ��Ʒ4�}�x�5�ff�y���O�ں��况c3�l\W�	Y{�U�K�k?e
�/}�Rղan�k^��^-��/�_�����6(C���k��+��
�՛��Yz��_�O�������	�O)k}��P�#BS��i��^ݎW������/�o�S�PD�>�sϺ�f��+�/ ߥN'�,_�W�l�U�z5L?^��f��{~x�Y�7�-�x̋/�#���dDkԐ�UPXmgf��� ��{Vl���]�<~�;���ݤk��K'6����΍�m��l*�e(
+yYV�ݩ��)�����v9z[�۱ �g�S����.�B6*O�uϭ}���ѣ�؟�P���������U�t�!�p��V�f"C�b/"�5l��-O�=�S��L��?��n:��hY=�ddM/�i{���c�>���D����U���?���[=�����:b����̓�mxr%�Q�6	�4��1�O�`��k)j��)4�<�X����s��T��n�2uðT�a����� <��x3,o$��W^+�o
�kNe��q�Wu����A%�7
�Qk��Xg��!B���rt����
�����=���9sj���v�J�Y�c*7�X/�4�=;����}�rލ���M3ۘ	���(��zފXu�B��4~)+,]'�#�W\�
]�W�cN�IQ^c�LM�c�
Ic�\=�t
jP�B�Ǻf��Yc�$?
r��657cV�d-J�jo'fE�)��t�&�������e�KH�u��3�>���>:��*�-QR�_c������E�G�pc&΋���d�>�-�
SŒ

���
��R
kMyݒRRRJ�-Z�lJ���˔N)]&�l�beˤ�=Xa���˔-ó�
+	�Q��j�u�-
Cu!rʖ).+_��)�+��`���od
:c�S.�>�`2:�������k�?�
�f)�Mc
�R��������
+���6V���:�O#y�s�{ԔNh����'���[������=�>���+>�pQ%:�k��&��bEϚ�|�
2R�\�}@ᙿ�Y��X!�G�AS�K��Ǚ�D"b3��-s�򞙳j=$ːϦv��X�'D�넄�_yI�i�=��.{���'=�:q��߿���U��G�w��
�OYvI�˲͞����U����ڏ>��p���:'|t�u�[�n���m��&��N���C|�7���V�b��i��%d���N/>���+��}�SR����|��
+���D�eW}ڳq��l�zէ=.�����l_���ƕ��|��C��
���3	ϯ���55;ŕ����U
��״�u*����+���¿]�8 �>��s�s__R3!q����n�O�[a��g������~ҭў�;���Kj���4]���QU��㙑�(�M��qw�JY�Z���)�����&�� ��0)�� [��˒�*_?U�n�d��Ƶθل��^ObY��K܆.S )�a	�2Ȋ��
9n�.�z�Lݕ(�� �C�C��7M0��([��/9��Bc�ʨ��+�~ɣ�J��zC��Y��z*�q

+"���$|����H�QI��\�z�MH�ur�3�xqՃ���˭,b{)���N����6�e�X
G^�'�
��Vԧb�;X�iu��Q3$���_�Kڧ��e �����f�˕ܣ��Q�b=2�˼��
�1�Z�]���=
��;��2C����1b���
�z at P1K9��G{�x!W*L?i
+=��b�݁�h���	5O-����9�^��o�P�©����w�M�~���WR�ɓ&=3|����s�<�wK�!���>����k�n�0����~&�.�"[��d��B��<(�1�vt�8"J;������hڷ[�x��~/��}��v�D$�۾A�:"I�m�����l�l>l�����C�^���ː�6f����(�ӎ�O;�/�{�
,^�\Y�i��O�p�
)4�XC���ʆ����N`�<� ��W���Rv�s��������mjћ�)/��Q�)�~�I�''���2z
TU$?�.z]�����u���ְe��v����"ۈ�[�k$%]7��Eq��L.-ܔd$�LA��}�+[Y�Y�e*A.��������
�>D�k�}T�/Z��3� ��6�j�I�I@n�=�v
t�
	�������
,d�͇�1PL= T���
?E�bזv�#�
in]_1�L�θ��A︙��0`
ǣ
�8D��י��Wx=����]����Q�
%�U2Msts߳\1�.S�8�*ڕ��R3nL�-�~��$�[~��	e�~�م��#�
�>�
�s���D�o�.�$�Tl̓.��1����<��
��(�JW�b�j�E�cŔZ4��jN�eq`Soq\��3fŽe�v�,Y�Ř�6S��
+�l�k�ݤ��щ	�W*ٲNթ��m�ná��S}5��B�uà�◥�$��"1�dQ=����5l b�Z{��VPc���h�!�jB=ݢCZ^l�(�$\l�򘕷����HO[i��?(V�Tɳ��o9�
;�������!��ٸ��[������u�
2A��np�`��0)!�����_�
:��ɘ�cɒ.���t��~�(���f1����H�<��}3�3����r�ǰ��@S?��N��T+��R
�he�|�3�*Z�M�Jg�������	R��m��
X��QO\p��]���c8�of�� �p���oV��#�Ś��i�2��Z�}��"�)�aۢf����vQzd��CH� �~;�]��7A�$@{�T(ષ�:i��vt��Z�K�
��T��O�u���B"MC�D�K���Okt�]L]L��A]��"�L��uoW;��F�<V�_� �r��@��L�8�	*�},������yqe-��@8i���؁'�~��˗4�J�;�?�
��O݀�(�tQ���ع��	��B\
s��gvY�UE�s
�Y?#Ty��/D[���z�(�,�i'�t�G�br��٘in��3:����ŀ5�V|_��	�b�Y(���j��S�r��^�6��h�;
�
 [...]
+x��[B�8�y`�\I��O0���S%�QY}P���f��~w0�#׺�e���6IbM�ŀ��ưH)"K�$�fQr "@H�V�(�_b,�t�_��Y�զcb
���	.����)�e-KՄ�u��c��_�LuvyMU�����
+�
!�mP�,��%��tYd��{]�
�H$�
���`�dT��7�!�v���y��e�ծ7]6�W�,�]��vri�?���8��yq�!�wL��G {��Z�;�w#n�}�9HL�Y�Αp��_��9��9�W�:��D�صf]���]�$A
k9<b2e)=\|����G����g�J�O�OA���'��<�
+��g��2\鐞�Ǐ�|k�z϶/�
1�|��!�����g���q4�ӻZ �
X��)��.�b������y�b��GK�c �d�6Ws�a���a"�zQ��b�� ��Z^Ƭ(�UR�7X�I>yb��$IU�S6!�he�cOm$��H;�������@B�V�c��
A]��46+K�2B
�"��_���C
�qӭQ�=�
+Su%� �D�
���vbMLp���R�K\���`M
�
��l�:h�%����̕=�4.�7!��BQayn(=2�QY�U��]v��y��$4�4z+j���U�a`����@;I4E�%ƌ�!Ժ3j�,Y���+[�POtIܥ��ז]u�����:���y�Q]
��t�'�����w�� ���*��B�`,#Q
+N�
�ďEV\YLyD�&(�2���
6̋���qh�LF{��o
�:���}��n�&
ꨋ+�
�,!խ�����u�
��]D�"�S� @�cEl58�B��1|c=$�q��uIק���U��R���7|x��p���1z��D�
��W��j�AC�PҬo����!�3�QA�qu���]E� �ߚMH�/:�t$�iYU�lp9έ�ֶ�
.���]?l}��/{5`<Ƃ^�����y� ��B���,v�lW�ɤbTX^���;��+�
H��\��C����)R\��Eh�Z����JMӍ�i�[��ʋ�U��4?VҼ�݉9V�r���d2�疑]-
T���~�PĝN�'瘝]
M7]�F�E�B�
+&c�B�5���CikS:��ǚ��Iͩs������u
��MG?�h�q2�X�,���2�$Ӳ��U�X_1��~�i�llP�I(��zU�%i�ai?QL}K�ۖ
���Jdc�Ec�V_!G�߄ܖUI�BfT�'�Ď	��rL���]� jWw�b����n8��@Bݤ# �g���1 ��C�"Ӳ�
+)ذ�1
Ҍ�0-�m�ް
+Ĉ2���P���x%%]m7��
+1k Z]s��L��`��7a�
r� ی��POj�ό����uO��
����N at C�CR��������U��n�r����c��:l�cr����e1�i�6��V��ˆ���H��&��}���i�E��Bԓ�[N�M���(n�`��V��Qcx{�|��
�"*T�Q�a+����ݺф7�Ej�������9���p�Q"/���Hs�'�}ٸo%Φ��8�7ߏ�O�O	�v`�+�H=q�V��
>-��{A��]�
"��e��
+�D��۞}��{��8�l�J{E��
�4TTU=2d	�C;���C��(�����Յ�1�A���I^f1xC�bÖ@��1V�,�e����l<�e-��㌚t�n���V���`q���DVm(q��R�!ܯ9K�>;v�<�cd�3ǝ�
�0���`��ø"��lɗy>Ĺ�Y��
빩u�noR�ϻ�2A<��
|������{��;�z$
���I���%9V4���"i��GV12��,9�O.
+<�`q\YRV��6
+
;��,��GL��$65Xu�B��b��:���Iz1�
?,D��+��&-���X9(�w����{�m�ٲyi�,���
+�Q)e默C����گj]=��
Ct/
��nZ�-�i�1
w��F��:���jF+�O�jL܄]��M�����R]����4c��cu��kԚ�b#�.8�Q-��q���I��NSP��Pp����ff��9�:M1nM�D�ox{t�_�
3�ñ[�$�8�u��"
Q��
+Ur<s<7ts�ڰg�c;�J6V�i�V�5��ޢl&�P�\,����v5:"c(벼fm�
�Qb�E��1+��ɰ
�K^�4N����u��R�hH�f_�l�X�g�&��Y"F�8@̓h��!�]Ĝ

�
����WZ1����!��2�D�e�N&v۴EQH3f�.��O7�U�3A� 
}��'���J���f"�$ER#�ak������񱌃a����Y�D�OwY�/O�z#��rP���mrT��b=� s]s4I�

��EG� 5�E�
oL8��C��Mwqbæ��IG�a�Ы%P5�ᨊ�� ��du�{d��=�x*�+�-�

F�%�%�&Ub݊y6�}�=�f�����E�y����J�34�pΠ�J�l��__�l)m����>��.��}�#��bJ��ь+��xhH[hې
��
I�uS���
Z7�y�S�F�Ɍ��M@`}C����/O�s��f谾��%l�bc�bɂ�MZ_	1�/CSiە`;��O��
�k�.RuC.9k�
v�0ota����%wGN�W��6Zg�q߲��l{6Y5�t�m�	v��#�3pʝC㸆[00��ޘ휚�
?H}�o�!RI�ʻ��c��+�1�������kO_�c�iV
Q1E�"k����h�
�flޓ�Xu [...]
+i݈�ۘ.�ByH)&�������Jx�^o��-n)��.������PQS�4hV�=Ͼ���ǡ��c	�Lǐ�p&b�t2Ķ�>�>�\>�K��K�\|V�ctٺ(�˙���U���|=�C��l݈b HQ���I5�SD��W���!�
��]���g��w�ʍP��6�f��F�ƹ��O�R���jX�ƺB�#ր��c��1�1�;���7	���5~��?��Y5�+�B�e��!�~	R9&Կ��H4ie1H���Vc�\�-���o�6�l�ZEl7
+�^
�ztQ^ �ʁ��%%9�K~�{�����}��V�:�xK�� Ǯr��-�����8�%Nl��,�z��4}�v;�d�Dz����N�,o�1R,o�1�H�$
T����X��iR;͞c��|0d�@Ҋ�
q�x�T�;�O˃�G��G�eRR��x��^�w�)�����z1oJƓO<���Ș�t(��Y6mr�u���q7Q�M6D��d72�����5d
E��w^+�k�x�)�K�e
��j���
��!b�Tۢ��{�T"���g��G� 6H����Ct��hz�|�+�d��"��a(ެx�hH9c�uV�iQp�^H}鏅T�%�����r
P�Ƞn{mo,P�w�!�A�e��z=�Hj�A�C��O�k
�`�,�Y�%�5o.�	!�kPN�QK3k'$��:;��}{�f{�}��j�

`A���j;��x��-̭��G�[u��Dp��fw;՗4��eH�Ej]�4U�:J%
7��׀�
��@֢c���Q{��[��B����l����� [...]
],�+YIP�a����DzI,��X>3I�N�n��v�Q;��,+J_J�M�w�7Z���
�oA��
+
=<���ظ	~��n{��� �����%�Q7�L%�`
ٱ�162����$
��[���[
G!}k3Ԍ=G�Ej>Z��[�rOb18����
+!�T?��b��[�5o���H�
؂(��N�9����vb}{��
'������<�]�J5}���?�x�
+���ګ�b�6�qe�Y�V�G�(�e���%�W�����x�z?�}n,���Zk�qt\�1eBn>YQג7�����ϢNZP�G�W4
�G6㉭	��xo�� Ps���Y8>��)�*G尢aǣ���k�8�譺���
q̏E�
4Ԥq�n�tq�b��p۳�q/p>�̲B�}�ǎ
+{�ǣO��X�
3i�H�R��B!V^!�0CŬ��n︔�u�u\����u���ޗ���<�^w��[��G��8�@>��?�<��7?�Cq0���+�c�ի��'�{�b����u��x���l����-��P,'[�B���dC)����c]��r�kd�x�p
+���
�u��+i~3�;
Y~l����C�l!�
�Q3�幛��B�Q�Qa�`VEf�^�nz�����l�RYT%l�雋�xCa�J�p^�����\j/��
{�Ĕ��։�WTmb�^#��^���7_���mM��˕����[��v3Թ.#�0� #�0� #�_��]��S���W�k��+I.U�����ܺK���S��[�}t�-�䗾��� #�0� #�0�@vxq��N
�m�y���hR��q��h
q�%vv�⺌ #�0� #�0�@
@��_Rqe�d&�y�,�
+� #�0� #�0'=��b���+��)���q����0� #�0� #p�4s~���m�e�hSژ���>�A���F�`F�`F�p!`��m�ʬ��
+
+���#�+W��R��?�8�7"V̩b��
=
+��&r
+����
̲�Y��0Od[YP��0� #�0������V����6�ϴ+��r��ʕ��T=�\�����)Q���yηn�X�C4m�.�۽��
H���G��o�([��w�u���A�l��
+��,H�B�u��_w}ǿ�V��5������0
B�W��It
�3��%�|��;K����2���Vh߹ #�0� #��8�	��hd������Պ�`��^u�UU�V
˻�u3���G~ �hѢ9��-�o���
:��JOOgΜ[n�SMD�#--��ۺ��/�-��?�.^t��w
�#�UD!�b����dz\=��
3^
%W�ZI{B����	>
��sF�`F�(Hh�lٕ����g�oX��f+W�T�JZ�}�M�SN�̒��Zu_~��[�8��6���g�d��e�-��V�
+H�޽{�v�v��5���_7m�D�Z�RkrM�k���g`ָ����UŊ����{�֧�~�o��F�	
����иIS�;c�
����O�},-�3k�Y�&�2�6nڹs��C�Ԯ]��3o�����]��Y�Z��
ȟ}N�{�������?��nX����efd��‹͚_���N��O>9RINH at 7�\~$ ��o��0J�Q�|9��*�+�
O�O��|�����_�z%����vۿ�~��UW]��?���DS�ϖ,qk�	�c���/c`k�BO�9,�7�I�f ���O?v,���p�pF�`F��e)v�
>�� �r���
�U��ύ���W�x���+�?����o�9��q�ܟ}$;��������_>����ÇC�[��_����V~����tJ�b�_���Ե�ݦM�J�+�	�����i��?���/���2���+T���b9����X��ׯ]���*������ ��Td���˗���ڿ7n�8��C�+��cƎyv��V�bŧG�
7~���\�<���^=���3�>;�����H��

]a���-:hj��O?�̨Q#/ZT�x��w�3|��O>�ħ��-:`�Z�`m@�Bw�|p״�/L�4���g�x��?���
YЁ�0� #�0�@.!@�-���N�}�r�
�� 3d�ZgamѲ��9�a�
K���&N�W�6�U�vj�V-�9xЫӦeɅ<��{��r���?�`�?׫W����{�q��`�QF�*��V��5ަo��yٲe?��5���w�|�%D4��J�*�s�٩��P,u��޽�c�����ƍ/JN.]��ի�}�O�~�^x���ܳ`���p�N7]rI+�mެ�c�>
+c���с5��V���3q�
#�|��Q��
v�r�.6x� ;��Z��w�ҥ_FW��5*l<$h�`���
{좋�uV�{�k�ڵ�����{��_|a�{���������7a0�
�u����;�
�k����;K:�����2� #�0��2
c�e=ƿ�\9�����{o�'�`}c�L%�0�mټξ�_C�Zg�zϽ����4|z��$m����
��~����>In�2u4���/��f�3�z�mHxo���Ŋ]}U[%M�
�c�f�������~���;n�
�}Ǟ�͚ūң~�<���gdd�ѣ���φ��v��[n����:�
Tٷ�B>!�|
��[�
9r�^u�%$�[�퇳͟���gZ�jG�
+pj�h,�=�\�^��0��=���2���6 ����>���x]!C�P�
���=�xFV���x�F�`F ��ӛ͕���èrB�3j�	�ٚg�v��&)%��3ľw�~k�'�Њ��˾��Hrr��z��m���U�hN���ZZNSeыN�:�~�-l�/\2����!}lּ��0*7iܸ|�
+g�y��kW�X
/(���N�ڵ�_
6t苓&#���Ýo���N�����,X0�� ��
yJ��S ~�`&&%�?3��{�(�����uOe�3�.
B�:b��jժE�Z�p͂&\�`F�`r
;U�����4t��f�Gm�}v�R�J���O5k�a�"�I|��ݖh��3j��}�
B+���֯�T����-~dd �C��t�M[�n�?>Ho�Ν�O���}���w�}���7o�
�A���:���?�ؐe}d�g����T@�[�nٿ�����C�Zg�޽�
D�áD�K�.��0O��)�֋(��!?�O�s��� D��ex���a`S�
�5k�LJ�Őő�F�`F ��f�v��(��)	��,���FJJ�~�����z��
;~ں��9s�
;v\<�c�v������u��]R�T�k۵Ô�
6�x;u�T�(S��_0��Ï>޽~{��4"��hq�C��iԨ����� qꩧ���<aH�L�߹�{�/^".M����|x�RxN����
��%�Z%&& ��-�<��)?�����Inp�
������͟�>����g�$�
 t<�(
+V���
��V>"�υ����£�
��
��$��_|0z�\�`F�`ro�
���,�>�/��就����Pȼ��{
z!�Z�lu�WM�<�۲�����
^H녍."!�F=yꩧ\}�5�=6�O���
+T�R
�
vA���ՇCsVlx�;u:p�@�NzV_
}�k2�ߘ3'��M��9^50�]{�oߦ͚�~G�Z5��׿�)+��C�b�
+cnjyc��.��^8p�
��?r�]��
��׽��
;
'��g\H��8

�)�O�3��B�3�;�u-S<o����i��*�Y��n\hsaF�`F���l91�X�Z�6�{�?�88{����w��3G��k��0q!�j���
����&8&�U�
3� #�0���A��M�|���V|�m��whP�����gm��
qe�~M\9Շ+W��in���r~�l��ɥuNb�
�4�m�s:�:�emC{0"Ep�
���\9k.�0� #��$�Y\�]vre"�W~�$���2
ɕ����F�+�S��aF�((4��/ٕ�C��ĕ��>M�c�͚��b]�藟v�*Y*K>����0� #�0������XI�>
+}A%��0� #�0� #�0�M�
d+f�HHc3"��=qGA.$0r7F�`F�`
+$�-S e=���A]g�2��F�`F�`
+�[DX9.;嬭�~3q�&�!g^��/]��7c���0� #�0� #�|n���3�1����qW֞ʒ+?�ç3
+>*�CF�`F�`�����w��}��U+w�����"E�T�T�F�q�
��E\Y��l\y����W��\����#�0� #�0����Y�x�W\uf�Z�ř"�Eff��t�Ofơ�����}���.��]�a&WB�1�
+b�KF�`F�`�‚��|����ԩS$)�x�X�
;���v��#G9|811��)Uk֬��ڜ�Y}�Ң��%&`ΟX

x�OF�`
+4ӦM���
O;���/���9F�`|8��~Q�f0'{d�ժW�<��bŌSZ��Lf�<�F��"�z�j�K,`��~�~����°�ӧ�\�������4�{����
8pժUk֬	�S�6�F�8��"+V,��"E�%��F
���b���*�
0� #P����/A�_y啯����G
9a=-[��wޙ��~���Ǐ_w�u��rJժUC�T��
qF�`N.��?��lf��Ebe6+���ȭ3���F�r�ʠ�M�40`���R��7߼��+��v���u�]zV��@pkժժU�I�&i�0
�

+��9�ӷo_8Džv�'����bT`�޽�z�:���;�!C��9����Zl�u�Yd#W��Ҹ #�0yP�u_�]����[6G��V.#��
��y�Y+F�8�/^
Z���Ypb�d|��g��̓c�/�>�믿~���?�<����Æ
[�lٌ3�����
|4gu����7G�����������^����˱
�#gci� #��A@���z��=�ש[��߶Փ.k'
m]��`�2���.�J� #��X`9�mڴiR��U������O?�v����{�ҥKq�=t�x�A�`l�\�޽{���"O�>
tve��C�ܹssP}w�{�:u�4n�����={6ɇE�|��بR�
+���`�b,�`����7kV
<����ڞuN��M�
ؿo���l�
+we�H��۲�+[��!6+����Z1���A�aÆp� �Et�g�}�]�n]�n�4h �{�
wP�~�u�֥2`��C2��<�`����2��$�ߋ��nt�
ړ}�,�`���)ժ_��
+��0#)���
.����R\3�2E�
A�5]V\�$!f\&��9<�S� #���O6l����q��
;�m��?����
,;v���!B���~�_,
.�
���ӃK3� #���V��q<<7��Ŋ�كi�lFRNR&d��%Skf�r��0��5j�"#:��˖-0
#��g�y�$�b����~�-�ܴim�LѢE��ۇ
� �}N
��q�F�
ړS�Y#�0�����[7l��*x2n㔑�8^Hq�n3� #`C ��}�N��pl�-z��p�ҥ۷o��㏃��]�a�hɒ%�t�bL��������SO�b����w�6�?�m,~U�㯸�
+�;G�	&�p�
���
+Do7�MpEF�`���|V��+����EWXIF�`N *Tx���x�
�tC�	ĠЍ�
9��SOm׮�<н{w�'_
L�C��{E��<�L���C��ꪫ(�&bK@8Rc�
�����ֶm[����W �v��
+WdF ?"�X����|���O��ˉ}�6����/~=?��ufF�$" �1��}��7'Qn�`F��Ĉ�P����3^����E�f��u�:�|ù�
+�����.�0�@�C ^��c�P�q��]����0#�0y��ig�wսu����_�:��޵��yY��-zT�����n�Ҥ{�&�Wᢿ�o�
%у6�n�����<y�Y)F�Ȼ 
�!�q뭷"�ܣ�>�wue�F�(|
<�~�H�����?|l�i{�uփ�~��$��'W5N
\Y�{sn�v�;�cF�(�\r�%H�@ˈ1���O�(Q��"��fF �# �� C�-��[��f��W&��
�we�|~�Y���_���(��0� #�rk���Cf�Ծ��#i����I����m��Ί�SRS�-��;�[��d>~��_ٌ!W����3� #�0� #�^$K63M���s,J~��{�0� #�0� #���t$�
>g��(s�V�^��ʹ�{�~;
� 	���?
���L
��ӆ��QŬ�bu���֭��G�ٽ�?��z��
?~�!I�;�޽{���/n=?��ó�>���?�!��Ep�ڵkC���1q�~a~OU�LAE �����w߭[����;u�Q�F�<4q�D�g1W���	��`F��G�,�]���Y.���~��k֬y��RRR at C�Q@��^{
e�/_��(�A��9s0���oƌ��*�\��Zŋ�ꫯ�R;c�
$��ի�C�ҥK���3~�x����Q�F!�?M�2���_��7uy?}Z���P=�@F`��x+CȰ;Sk׮�:uҝE��J�*�s�F�`����aM��e:k,I4�OG�Sv���+WFʨs�9)��/a�
 %˗/�U�T�v(!F����w��������'��nݺM�6�0
��
4x�����kSO��ٳ�#��
+Up��`�n֬���ѥE��C�i)U�T��\��"���r�o
�N�w�W_}��[nѝ�[�������bF�`�-���u�惡�c6��#���ѣ��̓-
D!B�����SSSCk��?�QFal�
�3�wށg��s�֭p�@V��n����C�����ׯO?��iώ�O��\��! '�r�ʭ_����
x�>�
+ƛzE-`=��0� #�0��5c��"���	+sb��(��dŕ
�4�#`T���_�c!� ��v׮]�vkd�ڲe˥�^
+W��۷��4-�g�:u���C~ �t��
^͛7�{��݋m�����]�>��x���Á%�q*T� 
1�HOl�:�w3�� c����0� #�0ym[�S��1�PR��I`N^�`��Y��x0a„��a�]�����-[S����zΟ?����w��!��ꫯ�ܹ�C=t�ر�(��d�b2������ӧô\ �ƝbF�`
+*i_��++�dJ�'�hn5jԨY�f˖-1�i�ܹ���Q�H�lb�2���}<�S1��`�$?�ez¨<dȐZ�j�
;V+3hР���޽[�t�aT�v����ϴ�ו�s���;�K������w�ٳg_v�e���5�<#�0� #�O :�$�&��Xٕ�3�ʖ�r��}�~o`p�� qX
�1999�`���iӦB���e�&O�L��I�&������ftA*��X�СCa'�d���
c�"��)�������r�|� ��A������
K�#xe|����?>�v��fF�`
+<%|����N�BG�� �;w��D�5D����
� �<�7n܈��;%ɏFYl; Fa�
+Z��1�oڴi̘10Z���geɒ%�[w�UW!L2l��c��J���+V���q��o��E��_Rt��� � �
��1���!
hq�?���&x]|뭷G�[�4i�8*f�A*	�y�
e�F�`F o"��I�e��˲��
��r��s��z �y���Qc�_\sڴi �`
;v�K��ѣI
J"�
6����}�uׁ�Ң38@>�Ԯ\�_��"@
x\��hgl�펆
7�
ȊNVB2A�1/�RE

8���;���
���@˰a��`����#G"`
��O�:u�̙f�A�6����� C�}cF�`�5�!����lj�O={ˆ�'.�o᨜�x�պ����E��uOYyF�#`&�<�Mss� #�0�@�E >�~}�>d�M���?�v<#3##��
MK��؁�K���.[��9��4nފ�K����
j�[_ŌS�f6�\1
+-��qF�`F�`�B����惁�o:�\����ٽ8|*
+��n3� #�0� #�d��:f:Vs�2$��	��&]�a�
�K�MT�:#�0� #�0�@@@:W
[�k�D��D
+�,�hs��c���[Z�6� #�0� #�0�����Xb>:�E�"�yӬ�?!g�F�`F�`�	pJV^
�b�	S3
�X�WF>���0� #�0� #����B�V��03�?e@�p�իW#<-H���Ŕ@��#�
)K?)��.O�7�*fEC��nݺ�]�6J���+��{�
?��s�2n�8?6�"7
+��`r
+��۷v�ڈ����O�k���G��(*q�† ��`�!��u�t��F�!�
��B?�����eF�`�:��B�
������Yy�E�(1����5k� �r����;��(�$ (�|�rlGA
+��̙ӰaC�ң
�ˢE�����;�\�t�/�H��۴i��/�P��~�m۶m�5
�G�#)��L���믛���ڥ�҂t�Q��e
+
@�k���P�ڵ����m۶��S� ��2� #�0�	�Ą
�lQ02�,g��<.�bF\*W�\�jUDpCB>�N$�
����˗G�*U�`;J��u����E鲃�<��S��H��/R"g5��f
!`�T��/�@��
.� ��
#1��(
���_ͯ]�/-�J���.S�@�J�c|s@�>�"G������Y����2� #�0����
+��TZ�+è�Crn_|�ѣG�͛[�B|5#��%8555���={֯_��؎2ݺuk͕����_����_�~}*�
O�uh��{�
xO+W�
�"�����=�w8aL
+,��� #�0�@>E at f���X��n���'��l���Zx2�
 ���ڵ+�nM^իWw� �
�	ڏ
pel�ݻ��M��n��vu��ŋ�^Yr>E�B�
+�|߾}�?6@��;$�_zz:<��i�XmF�`F�0  ]��/��*��Hr�WFT�
s�
f͚��	&�M�.��_�^�X`N&�����9P�7o�5!\�0#0}�t��
3�wF�`F �# ���O��-Vq0�K��#I�5j֬ٲeK�g�;w.�z�ad?�
���r��V�Z�s��s �1���|ciРM�r��`T.[��[��]�W�@A��<~�Y����{��
0�W̞=/o��O���"#�0� #P� 7I��"����D��S�f1�/�ѯ'� � U)H
�e�LNN�S��8

�6m 
� a��,CnpVFX
* �R�c�G���+����nh���W/`��ȱ
K��c�z
+�
D6���
+Xǹ;� #�0�@�@@�ޣy}r���؄<��E�G�w�޹s'�����Mv�3�pl۷o߸q#�Wh�L�$?Nk�� ��*h�P�X ӦM�
�5b\���@s�n��b�
+��L
(2��e�(Z��sR��!^��ꫯ������.�����1���I���[o!�
+�ܚ4i��*f,Bj	3��8�ɶY#�0� #�d/�rT���S�䛡�]���G�d��ܹ3̺�
:m�4�]���
;��a��Ѥ6J"�
6������u�]�(��
��8�+W�ėkD
��5�\V��ʨ�ж�o�^
?~<--
�Z���0�������`^~�Ri6lX�O
(��
9�t|�ԩ3g�4cRo�n�L%���%F�`F �# m�"���ZV�I,^�����hK��L���j��y��OD�^F "fBʈU�#�0� #�d��I�>d�M���?�v<#3##��
MK��؁�K���.[���铟{w�v�B� I����Z���!\���El^F�`F�`�‡ ��}ٚçs\#��pYγd��9��X�3�=fF�`F��y����u�0cnM��^9�5
���;6��.�i.�0� #�0� #P��9�E�
9�O,WVYJ�γve
�رQ�Ow�`F�`F ��=Y�S��u���2I	E]�6�\W�`F�`F�`�"�PEF��,�t,FF
Q��`F�`F�`N "ӈp��y)�}�uax&"
��^��hA��\�"�9��6��4~�<mh�* [...]
+4Ȉv�W�=�)ɸq�٬��(Ì=�)طo�ڵk#r��O?
ܮ�_�yL�
+:��јnx��g#42iGQ��T����׭[�#�7j��l&N�H����vYPA�~1� #�0���2S/4k�D�r��0��"H��f��]HII�ݻw0((��e(�|�rlGA��̙�"ȱ�aÆ�*�-Bn?d!A.kd$�!�E�>p�_~������o۶m��iH.�
����)S^�u3��_��_Z��nIOOG
�ҥK��
v��eϞ=Q��e
+*
@�k�5a(v����ٶm[d�)�
�~1� #�0N&����bfɏi�_���P�r�U�¤
+�*x��*�
J�/_
��T���(hB>��H^��z�_
\婧�WF�=}���Dy،!����[�b�
.� ��
#1��(
���_ͯ]�/-�J���͛7���1z"�7ZG�(]�2�9�7���;!r��� 1͟�#�0� #����������q0����	��ѣ��̓-
D!�Ё%8555 at 8���ׯG~lG��[�n��26�z�
�����ׯO��i�m�L�2��dɒ\�8��_�=�\�r��66�ի����*p(��6�0� #�0�@
E@�+��.��Yؓi���Wn�v ���Zx2���r�qw��`�&/��ի�� ߅����26��݋�d�
Pg�|G������ŋQ��N�ӧO�~�.��Rؿ5)�rO�b�F�B�
+�߾}�
l�:�wH
?8��c>_���gF�`
+0��#]X9��$c�lS�9y���f͂C„	�&p�]vٯ��
+O	,0'W�ڂ��
(͛7'!�O]�lY�^�
8 �P_��5͵
+ӧO�i�`�{�0� #�<T�8���W���"�_�2AS�F��5k�l�|q�ܹ��醑��z0*��9�ǣZ�jh]��3�
lư��A�4��a��Q�lٲn��v�_��t+�.�c{���Çϳ�
o4��
9�W���7(�{��ٳ���_?v�UbF�`
+��	��],lq0�������W�N r�:$
ⲁS&''G�SM�6
��u0�z�!7
8H ,�_)�1�#�O�����]7�]G�Z�j
>|8x�c6���y|� 9�c	~�z�����@dC�N�˽`�F�`��t�0��Y>V��(�ʄ��ݻw��	�9~�xD��]� � 
����7n��흉���	c-�
� ��*h�P�$ӦM�
�5b\�6�
�9D� _Y�b�W�\�-
TE
:�+@�_}������ڥ��r��A������a�F���ѪU�ܛ�X�n>�=^��z�-�W��[�&M_ŌEH
�
?=�A�XEF�`F�0! ��I*,�-,/
#���'!	�ڗ�4��ѹsg�u�� 4qڴi �`
;v����ѣ	a���6����
��ł����v�ʕ�r��o�g�k��Fde�Bh[Ӹ
׋�Ǐ����C
8p �!�
w�;��˯]�/-Æ
�(�~��~�}��}�G�
�+��ra��<�:r�H�C��S�Μ9ӌEH��n�L%�
%�>#�0� #�7��D��[rb�j�l�����m�Z�����]�}���Λ�`�������2oj�Z1� #�0��u���7�o��H��̌�L�{4-]ocvV,����l�'s���ܼ�?$&Q��ľ���:�|iW�
06G0'<��G� #�0� #�0���R��A�C&
A���yu�p��.yUe֋`F�`F � �l�f2��¢,=4
?���)
�ر���ty���#�0� #�0��	G �T�A��5Y�� cs��W�uxc�F��\�`F�`F�F@�X~�E�Qq0��E,I
v��s�0� #�0� #����"I��_Zt.iY����Č��X$#�0� #�0� #pR�DXF�)~\��+���?��[�W�^��X� �r.Pڏ
~$�~R?]�64 �*fE [...]
+�[Gm�ٱcǖ-[.���K.�d����o�
#�
*T������#!� u���JOO�x�N\�`F�`N 2�"�1
cY���F�`N^�`��Y�J�*5a„�w6�
p}P��e�b�:���Y#�����aZfpF�`F o"��[�XJG����+��E�q]�F��5k�l���Ν���n�O��2�����aʁ��B,���.�ys��/����
��/
��
8`~�={�e�]�_?���eF�`
+�h,3�\Y�\�(+�rD˲��W�N r�]$ˑ#GB+999��-^��iӦ���Z�]�l��ɓ)W��I��}����7�
+3�r
�}�~����j���?����n+�(q�F�`�����șd8�$>���x1�-K˲�7U޽{�Ν;1�i���͚5���
��5
+
�7nD�
+흉���	�.�
�0X-�u�7m�4f�����`X��,Y�qꪳ�
pz�̻g�5��u��z����I�&�;��o:�
?L'��a
F�`�‡@��@"�ؔ�H��r�[9UNhѢŅ^عsgD�%e��iӦ��
t��S�F�
M0�$B�a��쯻�:VZt�G�ڕ+W��5���� �n9� ���!؀ݚ�a�
"�{<r�H�C��S�Μ9�7�p��`��T��
�DF�`F��>�-Y���,��-KT?g۷�LK�!C6�����s��z׃�>���Y#Px0R�^sOF�`��� | ��>d�M���?�v<#3##��
MK��؁�K���.[���7^
�њ��j
�����5��7��	���/��>s� #�0� #�0��	F@%��m���6����:�`��h��9���Ǐ�!��2� #�0� #�0^�@�T]��W��fr͈8��$ La+�K��ҝ��p�� #�0� #�0y�
G����,�1��ז#s��<�L�%��*1� #�0� #��/$1�����HRb�dʈe9s_��>k�0� #�0� #� �XD� ����\���Y�d5��qdF�`F�`
+9V����b�͔�Ϣ�AA�W�^��X� �r.Pڏ�x$�~R?]�64�*fE�[�n�n�֮]z�<�k==� s�6׫WϜ�� 4�"G	�;���MsF@#��6�ƍC�u���H�5B8��'R1��l��#�0� #��-�j!ɰp��y�HEe��"�L����/׬Y��
ȁ׻w�஢$2�����˱
ȟ3gNÆ
o���
6dY���U�V-Z�x��HA���ӑ�t����

�t�gϞ(�rF�0` r\�-��;��ڵk�N�42m۶E�
�`F�`�,4m�H29`I�\YM��^��zP�r�U��
C,rS�LP%˗/�U�T�v� F����w��鲃������}�[�nӦ
6H��͛aW
1b�E��[n�	���eq%%�
?��H݇w�W_}CH#�t�R�'#�0� #�0yM�%1&Jl�N"
M>ٲ����y������K
F������
w�A�9e��٭˔)�V�,Y���XB!D �@�ʕ[�~=�
���8�
+
�⺸
+!��eF�`F�$" ݒ)˵� M��K�0��a2���J
��)S�D���R��ڵ+�n
E�)gǎ
[�l���K/���۷���i��֧O�~��a?��0F�eB�B�
+��o�>��
Pg�	_ 8�`�1\� #�0� #�WDY�,�s��Ѳ+K��=1�t ��
̚5�T�R&L�R%��>�Lٲe1�
+
!��o�lٲ^�z
8p �ʡ�y�G�I�G`���0-�}=YCF�`F�p"`�++/
�,WVe�gi`�jW�Q�F͚5[�l	~9w�\!��
#�I�`T��s�}<L9��C�����2z�2<�'O�<|��|�P8Gv
��޽{�	��c��޸��!�gϾ��"���N�� #�0�@�A at M�K��b>r��)L���$
+:�~�8q� (OA�
9r!�����	(�x��M�fS�k9��c�aJ�=i�$�C<x��D�Z�>�}ߏ�k���r
�}Ҷ~����jj���?��V�EwXIF�`F��! \D�%
#�#o�g�q0"y,�޽{�Ν��4~��f͚���XF��7A{g�$�q¸�m�(
VA
�c��M�6�3F���?�l�w���=Ĺ�ꪫD
6���믿�۷/�J��+V<��S�Z�ʾ=����B�_�V���[?�0�4i�q��|�M��餅"�8#�0� #���>�p,�b���b�	����(�V�-.���Ν;#j,�*@�i�@v�:v숩N�G�&DP�
� �ƶ&�fa�Egp�|ĩ]�r%�\#iH0���r�q*��C��5
�ժU�Q����k޼y�
=`Wf�<��n#G�D�8��:u�̙3�x�
���L%yPsV�`F�`���7�f�����cӺ���� �LhzF��=
���
#�DG�LH��dF�`��  H��̸݇�}��GҎgdfdd�ߣi�z;��b���e��{o���n�Mؖ�ě[�:���F.JN���dGk��0� #�0� #��#(]xrf��u,f
M��Q�0Nt�)��{9~���V��cF�`F�(p�P䉡s\
��$/�*�s^���½d?,]�;��!F�`F�`�� C
NNJ��
+���*���y���>K|0piF�`F�`F��@b��')�-�2Jʘq2l�09�U��'�`F�`F��
���q`�f|e��A��j�(�
X*#�0� #�0� #�' 
.�d$�9Y9\�2�*��dr���o����E
�. �%��ȊG2�'����iC��bVD��u�v��m�ڵ�x:�|���0�����K���^����@c� $ ��_|Ae��iJj׮�H�O?�t��y��R'$�7n
"(�[�NG
+oԨ��L�8�4���vy"�6F�`F 2dJ&
�e�c�	�LyJ"�` �ݚ5k�v9�z��
�J"c�,_�
�Qt��9s�4l���oްaC�*(�t��>}� � �

hن��wSlzz:��.]�Z�pa�.]���C��9�}��)S������|l��b� �5޲��ή]�v��I��m۶��S��ϽcF�`�7V�>N�e��O�����$BG+W�\�jU�`a��D�߀J(Y�|y�R�
+�#�O�|����ߡC���󐤺gϞ#F�h׮
5�n˖-
i�6o�
�2��]$��[�PB�5�c�.��yaGw�c��#.S�@�J��g�}���N�ꫯb�.�-��Y����1� #�0�������emٕ�4�/�r���y������V\%�1;555��֭[�ѯ_?؆C
� (����3�p�eʔ��%K�8�������ׯO����
E.S0�cO�r�֯_O��F�z�t��]�3���`�½`F�`�	�it��)�l�BoiW��/����w��S/<r؆w��l�F�ݻw߷o_���#jҢE���drk���N������^
+{6
���޽�Kvq� u�'�\�� P�B���z�
Pg�	�"8��k/� #�0� #�P3��υp� �l��Xq*II$�aN^�`��Y�J�*5a„Hur���W_ݹs�
z�رcہ��e�0�M�-[֫W��_9��G��X!G �
C�����gF�`�.2�X
�� ͖��#B'jԨQ�fMx��_Ν;W�n/7��'ՃQ^Ρ>
�
<x��ݻǎ
A}Q�
;w�4�ú
��ɓ'>��
�B�˖-�OD
�X�A���Fe�q��fϞ}�e�E��/0�pGF�`����a,�����c�12"v
ѯ'� � U(H
�YC-�9D��Wl���M�6�"�C����O��N0s�LO�j�:|�0�?T�c�_�b�C�v}�L�B ~� �zl��]��^��џ�PAǝeF�`�䯬WR���E�k�
+F
A_Xpa�qD�6D����#� �����7n�흉���	#�Î��(
VA
�j���6m3f
�����D�o���>� |C�3�]�	yѢE$
a4D~����ˊ+�z�V�Z�_X��
��W_}��f,0?�#*��
+
x�z뭷/qT�4i�x)�؂�ᇹ����F�`F� !@�ʴ�!�����
=
(�^7D�%_p�iӦ��
t���
�G�&Q�`��v���lWY��� ��S�r�J|�F��gd}˖-��!�] �A�^�Z5���>L�ѣ���_y�����uw�q삎�_��GW�KF�
��q��=u�T|�p�Ļ2���rGF�`�� �%+�ee:N,qZ��6�w�"ԃXjW.uy���|0�@u�;��2fB�\n��3� #�0��B >�~Xt2��m�I;�����I����m��Ί�SRS�-^����/��G��V�KΫ~j�zV.
_�r\��0� #�0� #�&@���V,V*k��:�ad��[�P8g�r���(k�0� #�0� #��\Y��[����WWV!��i�?>K����S��2� #�0� #��0F�8 
��}*.
�rX�@qg�,'Rn�`F�`F��"����:���r��B��bF�`F�`<��p
+�
+��"���~��1� #�0� #�0�
+#���&W��n�W�Fx,Z�v9(��G?M?)��.OwG�"�!�q�n�֮]z�� �7c���g����_|�E�>8���\�^==5P�
i��}�w��HJ��]@^st==�뇏�(���P��@n#�D��ƍC�u���H�5B8
+���~"�en+��F�`F .l�ʖ���/[$Z�#�老�vk֬Aڅ����`UP�Pf���؎�7�ϙ3�aÆș��)���t��Pf�
]�tٳG��
hhժUE�-^�8�C���.H�3�h�W�^��������Q� e�q㜵�F���d��-
okw�yg׮]���Ȧ��=ٔ��F�`F �б.�	3oy_����+W�\�jժ0� ���0�����˗G�*U�`;J'!F����#[�Ο�Yq��Ͱ��1�dI��H/��O>��u��mڴ��Y��ՠA$�F�k�/�OK�R�t��zf
7�Y�o( \ � #�1�9 u�	�
���t�RG��l6��F�`F �����J­
׆��!��G�Λ7�4��u�,��٩���ʔ)��K�,�K0Ё(C86��I��;��I#z�B��K=Ga��7;�s�(�K�\�r�ׯ��؀�����*p(�L?Q��2� #�0��IA�����|�7Πq�� p�2eJ�u	v�]�vح�^ܧO�~��]z饰CÀg*��4?��رc˖-(�%�l߾���i��u�ԁ#�����ˋ/v�7TϬA��9��Yk�ke�
+*@\wH6@���|i�<����X#�0� #��<���1����bn�2.B�0'/X�`֬YpH�0aB��X~�˖-�{��l�l at O�a2~�x��.�AAeʖ-��V�>����χ���~��!s�΅Ҽy�\�]�'��=a�qC�"0}�t�����F�`F��  �0��S�D�*��y�����S�F��5k�l��m�ܹB��F�����
/�P_X[�9=y�����
zR�jժ鞁�b:
�ǂI~��2�è<dȐZ�j�
;VW�r 
+�� E�3��Rn��_���s
+��{�B��c������!�gϾ��"���V,�`F�`�" 2,8���
עzv2�!��{�	@ ���a9r�8errrT�|���iӦх��
>|8�g��
VMv�I�&�����f�	�.�}��ݻwGl:^=#���4Ύ�����!.�5	���T�~����j��W����-Y�ϵF�`F W�^�I{��>��5�D�ܹ���ЬY3�}�˨Q���q�F8Bh�L�$?N_���'
+�UТ]�!ӦMcƌ��������*���
P�C^�b�SO=ժU� ;4f"��UW]�`�X�N�ؾ}��+"x
5M���$����]p�7 7���7WG
���쭷�z����I�&�;��o:�<�2h� #�0� #�7�Fe�����c��E�^xa�Ν5�|
@O�M��
6бcGLu=z4��p��X5�
� �+-:��#N�ʕ+���( �s����w܈{��;kp�9x\��h�l�n펆�8��
%+���2l�0�Ot=uw�q�
o��X,�Z�
9��{�ԩ3g�|�7
�D0od*)�}�N1� #�0�
�
�
.K�Vg׶�~�K%�C'��-���{��%�w�;��@̄�'�Yn�`F�(��ү�̸݇�}��GҎgdfdd�ߣi�z;��b���e���|�v���Q�R�s�Fff�^2EL�B�:w�`F�`F��!�� ,�XT�W�l�
�d9.�ؽ��D�Y�y1ք`F�`���@fFfzz�X�g
K?Nt9���u~ۼ~�O�5>�r���v���^>�;��AO��-O��_��S� e�� �D�#�0�@�C }0>���?��e��p�y�O9���+8��Ѧ]����~���#y&
+��^��Eϼ���0� #�0��ID`�o�^���e��N��βm��8Ȃ+�q�����u������`�IԒ�fF�`F�`N<�����
���ŷ�
<z
.rn��W�Lϔ��V���O���"#�0� #�0� #p2� J����!
�U
��&�^���� ��Sڏ�x�;�Ii�ty���wT1+�Xݺu�u�v��P�� �7cR
r� *�_|AU
횭#s�6׫WϜ�W�O4�LlW^y%�.#���
Vճ�~����~�
�
�*Hj3n�8DP^�n��ިQ#�RM�8�����˜���pF�`F��,�
�0��[�f
�. ^�޽��$�z����˱
�5ȟ3gNÆ
o���
6TIOOG��ҥKC��
v��eϞ=T
m9�֭�Z��hѢŋGz-ܯ����-BN�;�s�ҥ/��b,�H�
e�q�
��8���9�����ok]�v�ԩ�n�m۶�ړ��8F�`F��
����DmW�͈C�"�U�\�jժ0� ���0�����˗G�*U�`;J� F����w��!8��͛ag
1b�#��-�܂�x��r4�[G��֭[�i�Z��~�#�6�2Z��)	|��(]s�	�Ǎs@��:�������g�E�>����Z2ަ̟9�"
aF�`��F�I�
����o��G�Λ7�4���U�C����� �eʔ��%K�ĥ �Z�(C�;�uD9�^�_�
y�#��N1��7;�s�(�}�\�rT����]EH0E�aF�`����xd���$�j�2`G]�
AI7�
<eʔ���/��]��֧�vZ�>}���w饗�
^h#;v�زe
�_r�%�L���.���
�T�^=ފq�w㜅���"�*T@�}��Qul�:�wH���y�-k¹#�0� #��2����6;�]���
̚5�T�R&L�e�C��Otٲe�z�:p� ���}6 
~ࠠ2e˖�\+t���к'���7���P)6}�t��
U���� #�0�@>D�F�W��
'ɪ�5jԨY�f˖-���Ν���nE��&F0*��9���VxNO�<y����
~�N��`���
]�jժ�0Y�soq�Lm����S�%k��݋m��ǂ71����CfϞ}�e�E��g`F�`F�� `'�F�8�!��̘Qѯ'� � ?)H
�#G� �Vrrr6��x��M�FR�V��l@[������L�4	��
���DX�&̲�s��i�
C�oC\>k 
�1|��z���1���
DD̖���Z� #�0� #p�0�-
�,����޽{�Ν��4~�x����1(��5
+
�7n�#���DI�ㄑ��(
VA�v
��M�6�3FkĚ��믿�۷/�Aa�]�bbS�j�*��Y��s�9yƌ���S��{4���o�'������
w�q�
o#�L.���쭷�z���դI�
��p��
?L'́�X#�0� #��b��ʘlZ�5hѢ�ot���U�y =�6m�.�@ǎ
1�i���$%� �
�jl;#�+-:��#N�ʕ+��ICt�/����w_���{��;k��2<. at e�s6`�6���5׀�#�2�EH���y�
�����9�����čF�
��q��=u�ԙ3g���\��J,F�`F���X��Ē���f�ʻ�d�yqo��>:�y��"����1�#`&���6�`F�`�� �o�~պ�qS�����!_uFF&�=�����;+�NIM]�x��aC�9|�*-mޣ�4i�46�/
���0� #�0� #�0�
���x9v��9���Ǐ�)m�y
+4V�`F�`�<���l�"ɓFf
+[�^��.gOL~�3g{��F�`F�(xW�%�˓<Yhy�ϒ��J~�3����0� #�0� #��H2C)G����z��0� #�0� #�0YG��ŎD���s���)�dF�`F�(X8
,
s���,2�]y��7 at l`���z�j��B�a����Hʀ=����&�^�zz*
�G=*��"3��N����g�
��,����8��OR�!_
wT��Z~ݺu�u�v��P�
��'�Ԯ]��w��Ց6ᓑ5�
+ m5 �ׯ�����v��`
B��� #�0� #�0!8r\?�#���E��K�7�.]�L
�������}۶m���e˖��W�ZU�h��ŋ#
�[E��ӧR �T�÷�Z�����J�9�z��
\
%�A
e�/_��P�( �s��iذ��7߼a�G
���f�Y�jU$Ly�����Q	��L�2x�`(L�A�_y���{�G��xq��.�0� #�0� #��m����H��DD��o���<����ԇ�lY����z?�s�֭۴i�
�f`�={�
1bD�v��ʕ+�\�R�T���I��
	�+;8�
J�/_
2�T���P�( �0Z#�u�
���0�m6A��u�]iii���q��5h�@��I$
0`��D0^
���0� #�0� #��"`�-+
e�,����={��_�
��=@vkp��~�d׺
��2�8�Ioݺ�
p<��۲Ύ
=:o޼��;	��/�S� ���	�Y}���cǎE���_}�Сn9(7��鲳��bF�`F��C�d��LLȔ�ձ@���/��d���=�s�2eF�NY�X1*�cǎ-[�\z�p�ؾ};��ҽ{�}��5o��!
�:���ŋCO�.��_��!�|�
���k׮,s�n��Z�j�:u�KE���
j at 2��M�6�\?^
��/��0� #�0� #��L�1㫝
G�Z�C,pڴi��
����\�r�`nԨт
����s��=�бc�L�0�
n&�n�!v֬Ypؘ0aB�=Ӊ���,����T�81&Js_�8�َ�b� #�0� #���
�X�8�D�wfQ"��r�76�U�V�(X/&�Ք
&��.˃
��6pGx&��jԨ��z�(Q"T-���-[�ߗ
�=�0����_x9g�ǣB�
+P�����`� e�q�z�8��F�`F�`��0N��?��Y�CX�R%�rs�
��Q !24+ET�e˖M�<��ē&M�����ú��.����%��W8~�E�H����$ˑ#G������	(��HdS��:81(�9$Ǜ`�� #�0� #�0q! �r,R\Ԙq��7�|��^�b�W�[�,Y��h�
���X�Ί�fy��i�4(�X����X��B�1����v_PO,𜆇�ƍ��H��p��(��퐉ˆ�A�v���M�6�3Fk� �
������uF�`F�`L�]Y��~ʈtֈ�� �0!Ot�kB�i336`�u��Aj1�o�ĉ�$�y�xt��6*�gX��_tn� ��e�i�<�
=��$B�a����]w
=-��ߵ>��r��ٳg#cH�>9U ^
r�]��0� #�0� #�X�ƹ�W��w�F
㞦��Ms_btF :�5
�0�dF�` [...]
d�8)��5}N
+�(#�0� #�0
]�Ln�G��:ܲc#�a�v��>Y��bF�`F��pZ��\91�H���`��
'Kͼ����eF�`F� !@���vl��K���0� #�0� #�n�\Y��Qf�\���>� ������~*S���?}bMF�`���@�2$;�q����_y��C@|b�E�z�j��B�e�
�!��P�<�`FX�z���xT
9����~�L%��9�7�g�}60�>�U<�#�_߾}k׮
U�~�i���/$#$%O;�4��ׯ������C���˦|w5��y����; �x(>\�#ЫW���?��.��o��E�XFT)����#�0� #���a��#�Z"�aѢE�]�,$K�.EF�����m۶�'R���W�ZU�h��ŋ��W�V �O�>H��S�}��k����V,@ϊ~����}��)S�����HL�/�	R��+�|��׏<���⯽�6�/_��(�����Ϙ1�A_���2'
�7����K��<.�ȅ�NN
Q\�O:ڬ #�0� #�{x��wZ~ꩧ��o��XC������Hn�,��9g�
l���έ[�nӦ
6
���ٳ�#ڵk�U�\���|_���xb�Y
�o��~�nݺ������o����Db��d��S�|yԭR�
+���?����
 d �"1JC\� ��������G[����
�S�N���?��#r�w��]�F%/��b| A�I�ݙj��i�M7݄�2�a�'���i'�SB-��$�z�(�3.I7 �x�
<x0�#]��o�]�F
��� �M0� #�09�����_Y��(��v��ٳ~�z��,�l���
��ɥu�H<��Ǒ�z�֭ݺu��m��޶W�`}�5�ʃ@���~��T6l�����
�d��\��Ty�w���5��։D 3�� �np�x
�������w�޽{
�b
��s�
�!��o�WP׮]۶m{��Ra���t��x�ë�g�}��c���t�G�y�VA�V�Z�+��?��'jn�`F��U�4Z�dÙ·]�^��g	x0�)S�
��ڔ�cǎ-[�\z�p��i
+v2]�4x4o��!�aÆ:���ŋP��]ѯ<1����澞���w������7m�4�\֯���N�:�����K
G�q��8_��	ճbŊ�v������r޼y�*/���_|��p�ч<��۸q�ʕ+'L�йsg*|��Qx_��rk�)������Wd���%Kv�����'܁~��'h�V �oh�� #�0� #���+{'��N`��6m�j!`�|�ʕ�3>/X�@����h衇�
;f6
+ޠ�}��tv��r]w� ��,�w�?�
D���������W�z<t�P���'
e�A�i%��͛7Ï����7n
����G
u
��L%�����w�_���d
�f+���p�wh�?��\�`F������
ѿZ�j(����q�k� �^8;֔

����A��
+�{��cǚ
�'R'�(Q�D�N��8����P�Jj#
��`�&�p�
��e�
xk`F�g���s��_쇑rȐ!�j�r@�嶸b�!��/�eœ����i�n���&\�&Mr(ðc�[��/4S7��~ZE��{�dF�`F�$# ��H�e�p!H���5Z־J�*!�����
+��SO�v��j�'O&;1&3
<xPW���СC������T�>Q~�1O�q0�<|��-�_t�ٌ�]��%��
t
/�kq�� f�b��^F�w�f����@��e�ɦ��r�W�ڃ��I .I���ܜB��2n���o&]t������9��0� #��$D����ʒ:GOEҿ��b�<)1��+�-K�,Q�\@�OƂ
؉��,�-&0!ԃ�RWKZLb��J\�@�gyД�o�~��
��W_}1
+��v��;\䃑ӢIUh۷o�V�o5k�q��C ���/�N�����GLj���{�n�	
>
�sC=�Sw�r��+���B�d��d���a����
+��$������
�,�`F�8qXtٚۧ�^�NjJbR��1c0=�O����pQ��{mf�����Ҙ���'N$ N����#���	����סC�;�Q/k�D@�9l;�\w�uxa��"������t2���Ƶr���FPm�	$�A
7
o��#F�y�\0��
>��S|��#�)�"D#(�̙3�
+f�N
+P
=Է�|� !U�ML�����?�P'�~�sa��0� #��`K�Qw������I6,,�w7�>�Aߙ|�U���|� \q@%�|�I�/��
^���
�2� #�0@ >~8t2��m�I;�����I����m��Ί�SRS�}���Æ��Z-m�?�lܤ��WV���!�2�
F��! o�*P���X�����e2� #�09���s�l.�y�-�pˎ
?��x��,�,��!�Xp��?�eX��,w�+2� #�0'#I�7'�pˎ
�	��1��'�4pӌ #�0� #�0y ��
�R��낡�-;6�`��|
8=�#�0� #�0���C at Pe�\$*���S�[fF�`F�`N*2X�#���Mb����I��gF�`F�(�x�_W|��.��W^	?��\$�W�F��:&�������~�z��T<*��T
\�����?���� ��ƭO@w����U2%�����ۦM�@�ri'�J��o��B����Gb�P�� #�0� #�0�@^@�4-;�`D�oѢE��?��,]�,�L��<۶m�
� 13?�Z��hѢŋGJ<w+�ӧO����_r�%t�d)���

���l�{���}��
�D
x��4Ŕ���Ǥt�����

�t�gϞ��r1F�`F�`�����r���1�������+#�
��HM��ԺK0�R.$ö��4�0�b�������gϞ#F�h׮�>T�re�Ћ�T�R���P�li�������g��۷�
7� 
.���^�zA��͛aWFw`VG~
+��D}'���� #�0� #�0�"`ؕ��2q�`weXIׯ_��̞�u��\����_~��
"��(c�#��֭[�u�֯_?�b�՞��5��Zn�aA���o�>R�2e���%Kr�i��0� #�0� #pR0��I�
aVr"@��ի{j
�]��Q�F�D+V���رc˖-�腋����av�u���o߾�͛;�5l�P'Y�xq :��T4�HKK
(������*ժU��aÆ���s�i������߿?�3Nʩ�FF�`F�`�A������-#
��eaZ�6m���p` 1-W�
<�5j�`�}�ꫯ�ܹ�C=t��1Sܼy�t27�ξ��`6_� ��'J�@�1������=`��e˖�%�u�+?���9�0
aF�`F��-<�r���1ߋh-�%����ˍ7�;k�V��Q�^Lѫ)L�3]�
4x��ݻw�
;֔V�F
�L$ؙ8T?=�&���-���z�(��o��oŊI
����P�'O
>|��	�A˥F�`F�`����R+�
�R�J���p;6����SO#��`�d'�4iRjj���u����
:�rÆ
Y�&T�,�4��鏩��k��K�U���9�M5�:#�0� #�0�@n!�Àm\�rWe�	pÅ_��o����?�X���+�-`�)))�
�`�X�;��b�ݢE
��@�5�K3B��bk�V��'�7��Z�Z
���?<f̘��8Peا��1��w��
0�'%y���j�F�`F�`N"����"1��>$
GDde\������hҤ�63c�iӦn�4�b��ĉIHF�Z���Q\��o � |r���۷��ǟ~�ih��o �
�
+���+��wܬ{���2�+�b�F�`F�ȃ$�>��U��~�Y('}v{7�6���6�=)��*1y��γ��b� #�0�@AE �����}Ȍ�ڷ�$�xFfFF&�=�����;+�NIM]���
2��d�,������4������p����4��`F�`F�p# g���$�W�bŕ3A��L�w����
Ǐ�T%��'�?�
#�0� #�0�@^C@bI��ŕ]IH�}Y�[vlhOh���kg��aF�`F�8�xnjˋL9!A�[vl�!o��{&�uF�`F�`�<��6-îl��L��ț49O��J0� #�0� #�.̹}�+�
�yaF�`F�`G|�8����W^	?�?�\$�W�F�,�:&Xc�������~�z��T<*��xT��?D���?����˳�>z���Tq7�XѺ
Z%S�[:���i�8\z�ئ��`�ט\�
]�����o�� [...]
�|��f�o?
h?�@��޽{���3T%.�0� #�0�@!G \�h�"�* F�}�\��[n��Y�f�M�q�u�ܹ�	�m�Թu��0�b�:�B���sĈ�ڵӇ*W�\�ZJ�*|��	�h6����Mx�D}Hg}�
7 ��/��W�^�y�fz�
}�8�
��D���
ʠ<�uw��������l$�N��g�J\ ��K�)S��/
w�u��+V,���
F�`F��=lq0��RV����#���Z
;vW>p� �Ǘ_~�.�n ����n�u�V8
����ج�3X���t�r�
���~k��j�)S�,Y���!0555bݣG�Λ7���KJ�iBB����>�ߎ��x�Ǔ�/�o�%0� #�0�@N!��WVi������/(P�zu�b��Y9 ��Ƴ
;vlٲ
�p�ؾ};����o߾�͛;��A'Y�xq�J��T4�HKK
(������*�@�;l�0�rN;�4P"��vb�g�u�`-޵k������T	�e@~zƥ�2�ƹ��k��7�mf���Y�F�`F 7���V�kh���+L�ӦM�_] 
�v�ʕ���F�-X�@���;w���C
;v�s�N&�f�9��|�d�O)A�1����� [...]

<x���cǎ5�ըQC'	v&��OO�	��۳�����z*
+���o�[�bERC/�.ÓF��ÇGᲺ"��U�T�>~8`?�lٲ%x99�{�a �a��'k��v
����A�#�0� #P�p&�Vve�BcG¬ʕ*U�,4�۱�
+ D�N=�l0��5��xҤI��=x�R�|��C��P�����P}���,�?f�ծ];�/�V�Z�7Ͻ3ۅ�IӦM��
Gh�0ۣ�w���c��Q��-r� �bD�.�#�FA@@�S�N
�`F�`�61^lƌ�|9�,'$�
~o��&f�X���+�-`��k���6��p�	St�-O����Ҍl���ڳ���	=7�+Ed	Z at t���nj����
+�
�4�z 8b���p�&���w���:i0#ƈV�ڏI���P$��o�X�)��.�� |�z���r�C�͟?�O�	O�
=z�X�0� #�0����P�ly��7F��2���!�2.L��FSx\4i�D������,
���'N$� YNh�GG0q�
++B���ӂ����o�
s��~�ih��o 4�
+���}��7k#ؕ��+CB�\�r���Hڢ��Á���fu�� ]��8�=fU�Y�B�
+�G�&9�z���r
+���W�>��
���<9��aF�`�
E�
+�\�f�իV>��=D:/'��𔁃���B������ blG�!bb�
9�
.�R��0� #�0�@0���W���7�o��H��̌�L�{4-]ocvV,������%
:t�;봴���iܤ�-f\fb�XD$^F �@�|48���A�៣s��|��0� #�0������K�eK�������
o�l)�r^�'��\$g�
K��ã
1�֮]��O�\��0� #�0��@"�`<�����|g�S��[����<Q��|.C�������6�}0
+,�_F�`F W8q>2e����-;6����|n�:����e�� #�0� #��w�C&#�n�
n֟`F�`F �"�C�Y�c�_��:�Z��.��#�0� #�0�@�C at pe/f
Ζ?��c$�_��R.�իW�e��	&�F��Lr���������S�<r�Q�?��J>��s�o.�>�l(�n}���@�h���)��?
EL�6m� �K/�T�7@�c$��d>�(M�����@���^�'��׮�
�w�'�[?��~��>��z��My�Η���ĂZ �wƍ��w߭[��s���5���o��v���HwB�i�XN?��1�<����
ڃ
7���*R����J�2��|��a�
�����ϰ��]fi� #�0��	C �A��9�TmѢE�-�,$K�.��D�9k���߷m3�£lٲz��U��-Z�x����=��ӧ25�Ts�{��Z���`D�	�h6ѽ{��&<�A�y��?��!�
� � [...]
 ���k��|�rl�B�4��{������_��W�^����~0�3f�۷�W�^��C;^
+
0 o���d�v�کS�
�5r��p�
���[o�T�o۶-�ո��+o澡HZh�
��Ґ�>X4�=��[�l����jժ9�_�0� #��.
��O�&�r4�
^�|�-�����M��!@�f��3g�iOunݺ5L��p�
I�{��9bĈv���C�+W�#�m��%@� 
�&`�
F�S$�C�\p���
7o�
�.��:,p@	� CO�'n�{���Q�J�*��L��؀v��h�w��㷙��ߠA�t�8��1���FA*�|� ��6�/�y`�Ő�
ġ������C_�`A�s}��ohx��%�g6����7s��Xh?�^����s�?��#��� S�e�^z饂tB�/� #�0?
+l�+�(�2���ׯ7m�&dȮ
�|��؏�lYBRke�qd�޺uk�n����[l֠�'k2ݵ��ì
�c��j�)S�,YW�~��	��>�����
�2x�`8uԨQ#��`Q���j�9SDi�ޣʕ+�K���
m��[84�$^��}�޽ه�X�\]����%��z/���
+�^���������nݺ����F�`F�#�|bWδ�ɖe9кL^�իW��
�� m�F���΋0[nٲ
�p��
#̮�.li��o>���.u�8> �O at E�	|Y(������*ժU�_XdI[ȁ;/
{`��o���a؋r�=q
��o��p�n]&k�:��`i�P`6�?�S�^Q�?$����T�B�
+�9u
+���Q�b�"E���x��7o^�;�/�B�w���9G�6��;�Ë�cZ�r�����Z��'I��tE��1d��������F�`F wP�Nٕ��q�E���tڴi���6 �� fL-Z�`�>t��Ww�����
:v����riq3�
A�l��2�'�
�1&8
>|��Oŧg�d����>��n܂k�^ӲY&
�
<x/6C��/6$��?>�h��C�t�'�|E���D3�&(
?xxM�cWAB�|��C%�>(�1����]
��)��[o�'��C�х����ƒ%K�CEqF�`F�D!@�F�2+��+��a.�d7"k��r�7��
+��>
+���c5�r`�,4 �
;v�)
� :yG�3q�>~z�M?�=�?��S!���~�_I
���
7	̂>|��	��c7n������A
+��.(>\)0�і���2셵j�2OY����[FM�� �s,xc��0 &
������	¤I�B;����]�L�ٳg_v�e~�
��9�/?�
9rD
����
I�fE���n�]tu���yaF�`�:��"�_8�+k��`�
D�Zs�
��G�
�q�v�#+X#�A`��9SW��]�rÆ
Y�1T�,�4����l�k��K���9��S���-Tm��;s�LϒQ����l>�-G�Z 8	b��%'޺��&���� 9�|8�S�~}��� ��U�ɩ��r�W����;���	�;����)~���O�b�-�ܿ?J��x������そ�ͽcF�(��r�)
�V~3��?���
_W�|�M� <�)���6������`�X��Ǫ�b¤
+\�V������Mb��J\�����fh�ku��@;f̘��8Pe�HD�@p
���Xp@�`b�@�Z�fL~��:��T
�k=�*�]?90î	��h5B�o߾=��
z�
x��_�
+�5	q�0T�٤I��o�
�{��
���	�Z
�(�T����
r@�!�_����
<�
�P�ʛ�Lh�(-�D�zB[,p����ܐ��<&,B�k������9	���_�#�0�@�D�23[\Y�fD�.��#"�*.L��xx\�"h336�6m�6K��.����	f�W3����q��Erͤ��_|���J�b�
B�� �����n�=z�}7���[1D��~�ö� ��m����'���pT/��P�1���)�L at y����#G�D��%O�:�t�?|��6�~�)�XB� �w3�iܸ1<s���Qa�5w��7�j�UJW��p�@��W�U�������5����	^Y�<<��R�k��!����3�=bF�(0$��Yo���/ܦ
v{^pʣ�����I�#p����0� #�0���D �����>d�M���?�v<#3##��
MK��؁�K���.[�هÆ}|���
+�s
��q�&I�7Y|$��
��w"��m1� #�0� #�0'
+/

�W���]���-;6����[>��C^�'����F�`F���$��Uo�ʕ�nS�/z68����|0�nL-��o��>�yM���oa��>��sF�`�9�1l��s�>��"E_?�B�=t��
~��[>���������|F�`F�`�;���"*�aY��K�u���� #�0� #�0y�����寬Y2EY�`F�`F�(l�
٠�H���vd�22�!�.�
+��r��^�.�uLc
+���h�ȥ\�^==��#�,�������
h�� �A�r�P��bE�.h�L	n��(��"�p�@��9��У믿�Ҕ�-Z��Fv�޽{S�� 

Б�`�<���3k�����\ �wƍ�Lj|���
+�F^�d�A���J�5���pFƆ
�گ��O��
.O�hA�-�� �̫�����z?٘��4~��/���g�}��,�0� #�0'g�>eWD9Qd�d9�/#����ߏ,$K�.�4�r!U��m�)��
e˖՝\�jUѢE�/���C�~�?��K.��fN��

��l6��
+���StPd2����Gy�z��K�.��H�ѥK�={���l(��4xH�׫W/]>.
ps��g��v�0@r;��2��ڵk�N�
��Y��$�/��r�QB.�`\�v-r�T�At�Nw��+o攡HZh�
�U���D�HЃ˹e˖���?��/��⊌ #�0���F@�I�1�(�2��
�� /WFF.X�R��u7@��
?�̙cړ@�[�n
,6
}Fr�={�1�]�v���kWۮ��
+�' _�	X��τ��Hԇt��(���/&��y�fX
+�
��a�JH\z�I�
 L �S!ƅZ�+��?X�x�
�`�-��� ��6�/�Ȱ�bH�^�r寿���7���|�E!bրBNr}G�
�74�vj!x��͙��ʛ���,�c����s�#Q����lٲ�^z)k��Z� #�0��	G�0KO
��%5N$
�B�
���ׯG�g�
;vW>p� �Ǘ_~�.��� ����n�u��nݺ��������O�d�k���
���#�*S�
�.Y�$
M�����;pV	�"Y���?;zfA�B[�Q�ʕ�%C`ô��N�~q���?�@�

�Z�-$;�)�M8����Bx��H at Z{�nݺ�͎puF�`F�$! c�Y��a�`'
�^��g�
6j�(�H�cǎ-[���.pa��Uׅ��̧;
�ۥN��� ���	�h6�/�%=��9U�U���Æ
#m!n�0��������a/ʙ&e�ԩ�~��D�! 7O������(},�e*T���c�S���߅��^\�+�C	�:ه�_�=k���֮Mn����������z�V��I�']tu
2�D���d�k,�`F��U�A0М�ʙ�CYX�cѕ�]�t�iyڴi���� �

̘Z�`�}�ꫯ�ܹ�C=t��1S�y�`
+��ͤs)�	0� �����
>L�y����3\2`_��P�������B0��СC�|�8x���?@�x�
�`!)��f������#{��ñ!����x�
+&���
Q���-������Sҭ�ފO��FF>^K�,`��F�`����1k����G���ܕ�nD�\���o���'}|w͚55��L���A�

oȱcǚ�jԨ��w;��㧧�D��S�SO=���7���,RC/��"fA
>|„	�����
;\�Z�L(��@Mx���O�x�
�`!)�����޽{�]�|yڃ7F�Ai�������8A'�$�{�� F�]�v�>�gϾ���&�9������Cˑ#G�p쇞�H�OF��醁(7tE�Ձ�$d`�`F��o(ñ���!����
hV�?"f�9܎��� ,dE���0D��
+�HF�I�&�^u��A]4b�С �6l����dA�Y�O�~�]�v�_2�/����f[�����sxyȦںz(�T2.=sJ��'GM�5�o9�٘�ԯ_��e�Q!�+��;D�qbŊ�Nx} `��| w�����k
=��QR�Y���
���v^�N.��`F�� �����>�*/�0�
_W�|�M� <�)���6	��6�x�:(&L�J�zn�9�$֞�ĥOh�O l��V� �cƌy����Q��b�����
� FL�
Hkվ}{X�<�����ӯ����zƅ(��� ^��
Co�M�4��.
 �k�d��	���GE��,���K��	F_��p x�$T��f���I
�чΈ�N���7
|�A���!*�����k�żF��e�pa
$�wF�`����-i��u�8<�`\F4�H�"�8"¯�r��
��̌��M�������IN:u��

�jťOh�5��O�����G(Yh��o �
�
+�����ѣ�Q���V�:rCI[pp�I�����3.�C!-�F�
��)��6u�ԙ3gb� ��G�"��Y���^�khh��»>G4n����x␃&`�5w��7�j�#HW��p�@��W�U�������}W��Ryx�÷
+�j!b
B�ϝ�r��"#�0� #��(e��"�\��V~���
6���3F�
�

2d��p�
W�2��P��9#�0� #�O��}?ͻ�qS�����
����Ȥ�G���6v`g��)��˖|����#���~�oˋ7���	�
��'�|
+��0� #�0� #�d
�b����d��G\Yd��O��l�˚rQj�pˎ
�Up/񖏢Cv��5}����0� #�0�@E�Ƅ�cŃ'w�?�U��Сy� <O	�y|n�FOn����g��vƹ�� #�0y�
��1b���6�n��!��|04Q6R����t��
~��[>�;�������|F�`F�`�#�
���F.�Lw'��a�G�YgF�`F�`��� �`_Y0c���嵜g
��
Ƭ'#�d�F��k�Nq1�=��O?�tT��R��~�^�v��P����v�:#�0�@Dt|e�"�=���n~^x!�"Y�z5\6��F�ad(�
l�'��"�B�z��T<*��rT��?Dv�3������q���$��{�5�2ȡ�Ԙl����zJ#��!�~�!���	����k����"�4 �ׯeD3�#�[�޽)�x >�C�����y�f�EJE����8_��-��@�^���&b�,�m�~*��v����d��
Xpu���,��*�~El7��,�
i7k p-F�`B���f.#"F�>p���#
�ҥK���0s�\۶m�
��([���jժ�E�/^
iܭ@�~�?��K.��fN�}V
Y��e�Q
�fapz�d�Aj4��-]�4rC SZ�.]���CP�!JK
�?"n��_0�W^y��A���H�L�x���I[,|L�-�����
+={�D�	J%��*`��d����$�����K/��-�O��..؝;w�"��p�eZ�]��_��Bs�UNV�9��0�@�F@��$͜iWD���������k�f͐�Z�3-�x��9s����:�nݺM�6�p`v҆���ڵӇ�\��_T�}�|��[�Jl���Ҥ��Tؕ�
̨0��H�GGQ�!JK
�?G��	�4�LjH�4h ��N���y�ĩ_�� �]���e#�2���H_XF2��#}
� �"�a���S�N���?��#��ы
-T��/��
�+�NMTM�؏������V�~��5jPa�X����q~'M���C
�l�O���h��p���_�뭷BO�Nq+�b18_~�e�c�
�'z?��ڭ�������Ù�;���n���8`'��
96�5�5oCǃ_�y?#�0�@6 =Vveŝ�E��v�������|ǎ
��
8 ���_�����#�8�[oݺ�[�np<��7��������M�w�2ePrɒ%q5�\B���
2G�p�y���;�� �"$bב��G}>
�k׎X��# 0� ��bx������H
�4ю�H��:��2e�y�!I���	�Z�W�/x����K/�o��ʕ7n
	�k�O�n��n�����m�П}��c�=��bV�T�ꫯ�
!���x�t���ڡz:���.�{��'_+� lc!
����x��`F �p�#�KeY 38	y�V�^�S-x0���5
+�X��v�رe�<��b��d�.li�lڼys���
��
�/�2����p���
�s�ӿ��
+�?�n\`�}���6m�91�P�N
���-�����҂�馛`���� H\�ra?7n����믇BT�bE|��'
X
�n9o�<G�^x�V
��>�_�dI�������O?���+W���0��g��w�ĉ��"f�&$x� �������l���Ox1#ep� K~��'�$@ {Z�
=��V��/?���t�˯]�w��'�k�q]c�<I��_�/��:̸ #�0�@|���q-r�E�Wn��iӦ�.6 �
B���`�}�I����رc�X��riq3��
�5L�f�9`N�a�� =
�\�&�
�p0�2|ʇ�+���C��� |�C��
�!��x�A�?��W!�#%� �Vh��?x|���WAJJ��
+���8���gN������
�ЩS�⥑ƃg�rH��_���U���_��I�@��
+�А
+�]$7�~�U
�3���|��~x�)���jQ��!..�0� #
�#�1
�
az_�j��$Y�=�o�s�9X��)��M�e� ��r���cǎ5���R'� ��,/`!�pL�u��'O
>|��	���e�
Apˆ
�}�]<M�Q� #%f�ժU˄( �������u��l�9��� �m��t�0�
���p�
Ղ�	\�
������*���3g������?xLѤR �]�L�v=��b�G�=QFH@����7:�$ܳwq�o�N��Cĸ
#�0�@V����U\�4����p;6�@�Aa+���!��
VJFbL:x𠮂�.C�aS�Jg��@>�
x�gAp�Ç;��͒�����8�٠�f��(�]�F��D�|�1�
+��pE7���G�ǥ|�,U
r�ˈ�
ٌ���	�/
L�ŧ�+��"��-NM�,p�E9$#
b�
+��
�2�૎Y�ݮ�
��n������

\2 U��-��+�_�t���8��+�!�w
��b��x��&\�`F g�qe�B	3̐�[�
xRb�>�W�[`�Q�e
9,؀e�1��h8��C����X{���
t��	YG u�۷/�;ã�)0�p�P������b�$��Y;��۷�ۥ�[�>>@6u����p��y���i[8k�q

���AA`���h
&2���s��
+��<�l��)oz8������o��
+�w
��;��'L
@C�i�v����K�֭@=G��G}���
�a3 �;.Mp�p>Ex�û�)��B�_��
�g�C:�<�,�������x�[8/%�5#�0y�C���V�,�TǤ�1c�`�

�0!?��Z����̌
�]s��1
����DM at 2�
���`�
��݅��� p
�t�
=`W�W�A�@
��n�o�N?�M� 0��<%��"ā%�8e
:t��
�B���Z@�k׮��m�q�ȑ'�x��MV|�X
&��s���~�
�q�=�C \t���� �qA��ڃ����5"<�N�~�z����{�	�� �U�	�����W_}U����Ъ1��N�Q醑!��ԔJE4�!��hʠ�4MD*�$Մ��H5D�A����t�%���
�t�S*��g���������}�9g�s�Ksf������Y���Y�z��I�w
<.ޥw<�,Q �ۮR��O�~fx�u䞖e�
��>3��ْ�>Y" " �G��Ϊ��3�-Y�w�g�A�k�����?�|�_�O3�$�� !4��F&�x�7n��T���%�o����q57��L#`��'*�}Д�
;�ܳ�ǃ9昿{�
��
�`�ꕳ����;C
2�
��<Vq���4o�����ѵ�i����,
�
a��V���t.�~���SfY
WQs�|(ol
�������l�e�Ni��P����Y�9Z�N�~h���.j�~��T�)��xbY
W�᫙�������禹ȷ�+��.b�0B��_�nٵc#�KD�蝖v���T-E@D@D@D���u
�FZ���&N��<,�nٵ��*P���_Z8KOHw~帵��s�.9" " " " "B��#�"���Qj�����������M�
��ïl���ͭL2�
.���r�Z$�֭#m%��x������_�;�ǗĨ�Tpn&5�9NA`s�yI�d�
ύ5jР�]�甃&$'��B�[dEu���oٜU���׮]�r�Jg�m����ƹ�T�~Nj@5�H�@���X�%�xT7�
+�

�H������@�X���$�=��g�ѵkW�����J�T`s�h�F7�\����)>GmۥK�:�2r�x�
j���#�_��'��
0�9ߩS'>ԹpU�s���4i���w\<E@D@D@J�����I4��!ԅ�V�$�ٖ-[R�ڜOŬ-[���o��3��
|<`���3�f�(k[�n���'R]�2��ڵc������N�k
+Q��D�~K�RI�
'@�t�c��|�駔��
��β䔗�o�
���J=(����z۶m�V���sb��ի�w�}x���
���������Z`�R��x���0�۷o�X=�f{��5k>?
�:�)"J��ƚ5k��0-�!"(�,5� n�g�>�g�s�
�4=��c=ֹsg\��l��������&M���
s�ε�x`Mq����;Oܴi����۴is�y�mذ��%���Y�`����C/�_��'�A9'P�vm�ر�p`��yo�b�
+b��FD���w�����E@D@D�$X�c0b�0"Fa�*���c��߿�(ag#��~�p��
�Z�r6�֭�e��.�q1M�8��K͙3Ǿ�
^N�6�@�1cƄB�7�\5� �_~9�a��Ķ�;.�" " " %N f+�Z�N39�`�W�
g�r�v��w_q����8p�����q?��׷�;H/�l�z�y��m޼�
Ī�4?1������
�̺��3g��7�\5(��o���kժe p�k�.g|�ƍy�a6g����
Sc�
!�#T��u뒂�3,���^�����^����^0������� s�C�S�N5����ƍg��cǎ���޽{���*U��2tm_j*�, %
�11�EÆ
YK*," " " ���;�����x���d��>X�d�ɯ�y���V�xeҷ�H
>|8�6�����
_V����H��L�'k
O�o���y��a�ըQ�H��%Y֌�l�sp���bK�"%�m�������ǝ�Yg���"�"�Q�E@D@D@��@W�(�2:]|��#F� �2+�H%k��d��J�޽�Q���.#�aذa~ǃ��L:;x�`Wcl�d��
^
z衦
;-Z��no#��
��xe�D1��f+G�[��C�K5�:	�H�=a��{x&7,���" " "P�d�9���%K���zFn
���{`��%�G�7�� 9�
+s��H� 1~gu4�s�;����`���9���}�>8X�z���E��3dȐ�o~vH^ڸWz�jެ�#g\a`�0:�"" " " " �K /^9�P�r�d��6}�kǙ=�(��lpp�®�}��[��];6�X�ND@D@D@D@J���n_^���RǦOv�W��GD@D@D@D@\
+��m�8[�D�D@D@D@D@D@bl�r��u��`����������@Fȳ�
����r�
+�>���X��'�`��֭;�(�gF�u�V�2�����%9�5jԠA�t��!U�i��?О#H0;�8N�ӧ�Ν;Ms
+���P��
F�Z��Aj�t��i��W�O�9ޫW/�h<.3FDM
+[�$Y�3r�H)_�9r�ڵkW�\i3v7mڔt6O?��9ͼ���8������d>����;�z��{�����={"��n4h�)M��c�Q�" �����)�W�jեK�:�`R��
���G
a�B>����?��G�q�
�(�9p���W_]�zujC����\sͶm�R�cN�={6�&��7.�]SS�G�
)�z�d�0�+�@ϵ�^ۥK�U٩��9�J��+FsTk�}G�mժU3����w˖-�+�|4~)cf��n۶m�v��qj�a1s�L�̘1�}���OA>�[�/�&ꃟ�.i�q���ꪫ(�:-<��Y�[��,��7.#��
���6�I���dʧc
��}�/�8q"S�j�p�B�ˌ�\ʈ������p���m�\N�����ã|�=��L�e�i����ܾ}{��{�W`+�ڵ
3�&��M�F���xb�588o޼�\~L�ɓ'����r��7.��޽{g͚��C*-jHH� �f͚�V [...]
6��]�0�vذaʉA�x�G�
ݢE�P[3Q{���ۿ
{Q��7�s�9�bŊ���w
+	��C�����C���7�D5��k�F�
;v}��t��
��������B���
~����iժ�����?�,޿?Ѻ� �
+؂�D$��iΜ9N�p-O�4��΃�v<��3e�o����J��n�	�5�ʘ�ab|�ʼn�q-;%�
}�i�P3fLa�
=W
J&S�T�*%E@D@D��p���/��r��=ʎ-�s�~��������w�}7V/~܁ڔX՘�'�7ùB��������{�N�5i�z���_�h��
��e�'ƍ��F�Y�� ���ؼy�U&`\�a�D9c�����-�߰S�~Fؾ};zԪU�hÝ!wh��!r���W�"�=#ԕ" " " �r��l�������^{��?���{I�Ff�^x�v����Z5~�c�fgg�޽ۊ ? y\���
1���1"
'��I'����ߧ�l�b��`�ԩ�H�L3KhY�~
9p�^<��qLl��a��tvMT�T��R<����p���.��o���j6c���-ie�W&=
��Ç�l�K޴
/��$�l��.̒;�l`��͆>'�C���n��8ѯ��jɒ%�>�(��и�D9N&���{�=s$x\F
�F�ղeKg���~-�2p;4}��~���w��-�.�
+ƥ+�<�f���AD@D@D �@�B����.eֺLl6"(8�
qX�ݻw7�\v�e!�h�P
+L�6f��zQ���]0R�ap��V|Hԧ^�zT
���	�����_9J�r�
�
�&�
��C�^sW�GD�5_K
>$�#���	x���d�d/,{-u��" " "Pn	d�=�!�����X�����'��~qT�����@
+���Y:ED@D@D�0���;���)�;vعgߏs
�1��;`�9��:�+gg/�7��!}3ߥ��--�7o���g('�X.̰t���������d��B�y0�('��aKJ
�ڵc�v$%M�E@D@D@D@�
�e��l�I^�r�x��KĦ�v�q��Js���VvX���P��M
��I
P	(��\�t/��x�|Xͥ�2Jg�� �e,W�N'S�(.�d���������*j���ɲ
l*����rnO<��[��J{��3�n�JQ����TjhԨQ�
�:#��/6
ȅL{� ��<5����g�Ν��9�2xN�~�ІJ%Ta
5P:u�`�������^�z9_�m�|�
�ҏ�߸���9V�����ȑ#ɠ�r�J���iӦ��y��
�j�刋�*" " �� �e���Ϸ�cY0�ɄA=��={"��n4h�����c�Q�b
����)�W�jU�9;qaR��
�����5�1���y���q�
���9p� ���W�Nm�w�}��k�ٶm[�
De5�,^��}gc����H�|�)�J��:@5�|
`�sWF��k���K�.Vg��S�&� 
E@D@D��x�i3_��;o�:�ﯽ������˃ᰒ#�_P��輭Z�j���}�nٲ�re�q��/e̬
��m۶m׮
;N�0,fΜɑ3f�o�2򩓇���_�>���+2w5﫮���y�\�V�Z�9ꨣ�w6nݺ��
[�|�)�J���Y���9�1�X(�ǽ�ĉ�rVۅ
:_f�(�������UWv�������^z���&a��K��~eg�눆�D����w
�{G�
�
4�w1�۷o�2|���
+l�]�v�o��Dɸ�	�0�ꤶ5j�~޼yI��טX�ɓ'�8RT�&ߏCZ���$@�M͚5W�Zet`��#��u�{v�MD@D@D �x��c0�ҺI�&���ܹs�;w��K�&q���M�֯_ߦM���;oÆ
�{�[$n��
6l�rb'^�ѣG�h��]�z���ܻwoԠ������Kj����sNŊ�ϟo�� ?�Catӹ�@�v�ڨ�c��
;��v�#D��?T�" " "P	����_�$ib�fͲ�<Z�je�����1������%� [Ӂ�d�6͙3����I�&��y�ؾg�y&������S�7X)x�M7�&^�;LL���q-;[$+?�Catӹ�O����|=�������Ia1��|�[�H�<�O|'�s�����Z
,�����n�^���)/��1�O�o,ns�,_y啃>��s��a��l��կ��:�ơ��O���O�7��
3fL����S$�c����6I��P�tn�ؾ};:� u6�
�Cs���W���+��Ֆ" " " l-������S���k����{�uב��^�ovp�b�?�رc���w��m�"? y\%��}1���1
+y!O:���>��g�/f�
�N��I��P�
�N/Yd��8&�Q�aÆ�|�S%�2ȦBn���S������@�$�3�Y��Sп
���*{���o�����wKZY�I��y���8���V�\��
/$�1;��
��$X!f��ω��l��n#N��Z�dɣ�>��:8�xS�]�c�{�g�����s\t�w�|N�
5�aӧO�ׯyW����"�`\ڲ��sk�J������@�!��;Ҙ��o1X0W��ҏ�_f���f#��d��J�޽����.#�E{�R`:X�1;�Ջ���ڐ�
��l��C�>��գb��7�L8���G����ʌk�~[�l�~�
�&�HV~(�q����23w��@��0�|�&L���+� �$�
�^��x5(K<�߬#�h��%����}��3�4x���F���k,"P�liƢ�H�E@D@D@,b �ht4�s�;����`���9���}�>8X�z���E��5��!>��g1iq���ޭ�5k�W��v�k2Gp,�*���������@� �,8��##^�/7-F���(lZh׎��Q�G�����������p���l-�����nw*۴Ю
W"M"�rN 7^y�|[H/���x兓�*�h4|�b&���b��D�
H[�����s{���%���n٬y<^ٺ�c�H� 3
AD@D@D@D@�A��+�JNN�(
�>� �"�
���#�=lڴ��Fݟ�i;;b���(���ߴ��v�i�PE@D 5	y0"�1_���'��u��Qi�}F�֭[)�@]_�J
�5jР�]Bg�\|�Ŧ�����p�GsJ�>}v��iژS\?�~�ОJ%�Kf
5P:u�`�������W�^Η��O�K�y���o\�=Ga9$r���AO=]���b�0�JY������^zi�)]���4/�~��_~��U�T	�y��Ҍj/�1O
W�~��K��Z��]\/$�Ԯ����$�c��E[��X��=���e2[Ϟ=i�Iz�
7
4�ԑ~�Ǩ�۵kW#g����Z�*���1����
�P��Y����<���ǻ�;BY$�s���	W�^�����5�\�m۶`9��v����;S�U�G�,�gۈ���8�0b?n����;5�$�
����o��"�S����.�~+V�x��G��dm.�(D�2���"��Bw����o�\�(
+�?�
%PD@�A 709�V�
H&Z�}�2��Z�jF��}�R
�re�e��/e̬���m۶m׮
;���9s&Gf̘��}�ȧNހ��K�?7~�!C����}�UWQ /����=ꨣ\?ϭ[�v�a
�o���m#�J�㐎����ͳ� =ӥO����[oq�رcG����'z��PW�~����4i��eZ�C��^Wel�|Nٿ?�J�?���:w�q�F#�\p�3���O�i�{��'Ǟ���t���o����i����ܹs�X
+�s�MeM��soi�s�i}8�2��7��8���qy���'�<�K�ah·KɎ�΢����
x��r�/n��={� ��￧��
/�`�����'f��=���>r�H�
<��,s
D\�SO=��{���>v�z������Q��d&G
F:2��Ľ���(�ڣG[��c�b(��2|���
+l�]�v�ov�h�&�W��V�F
�ϛ7/����1y��
ʃ�m����%�B\܊�ߴ�4
+
7n
e�q+�y��~���~�3fL�ڵ]��(

8�g7�x��-�|
����H �[��1+B����͚5�@&�&sܯ_?9�kW���'���믿ަM��~ؾK�z
ڼ��;O>��ĉ��.]�x�U��ˏv���q���|O����=\Jv�v\������QS�L�������۠>������#���?�!��
^�
0Ox
wY�������g�y�(�ꫯR����^�3g��O?
<�=�	����#/�E@�*��
+�:}�k�4i����p����Ƶ�v�Z~�-8��ׯ_��y睷a�ܽ�-<a�Æ
�PN
I�6z�h\n*I�$���ۻwoԠ����/\��0�
������p(�n�纸�Я�ݐ^�ʼ�e˖}��g�^{m�H	
+�>�׿�5�:
�$>�������w� ��\��b��)ʜ�e���Mc���L��ܵp�G���y� �HK
W�����‰�C
�"�2�w��J��%�`�����gX�߸���8.�~����O�{>\Ja�v\Q�^d��1O�+���@���e˖Ln��>���~w��g��=�����f��LE3����>
V0�p<�E)���Ia��]b
����b0�	�8O����C4����Y��\g�/ �^5k�$"�iӦ�"�Cµ��g�:[��|�2k�7O}�Bǿ��G?��ab���֭?B����P�칞�R���
5jTZ+?BpRb
:�����
o֬����bp�۷�Ւw�u�����Ė+W�d�6n������Q8-i��o�
#9q\��'�T�^=��M�Q�;g��3(,�Щ�7��8G�^�O�ߏ��2)�׊�2p$3���Ɨ�q�}�v&q�]wa�r��w����qap��W��R{��aD�n�����	�j "  [...]
��U�reN߻woD�~�Jv*�]G<漬Ɏ7X����A��`�|�㼸��[��?t�ޝGƗ�ӯw{�7b���D�f^y��9�%��" "�n�l��|�Z$*$U��_}<�f3�/�ݲlW_�8��ί5�X�@/��B�Q����0K����$o��ω��l���E}��WK�,y��G1J��
�錅x_���\	\�����OV~(�q�!q��gFh��E�e0>�yp���V���?��OL�18%peY,��A�A�N�ó#O���"�����g��,�>}:�
+8�'
|
'L��Z.&�]�efTb�~r�G;q\~r��9(�+\t�E���\&t��g����׋�#0.N$i
,����gN��3`\��\��눶|���[V��#���0pX�`>����>#�'D��Џ�
��_��I@׬0a�2ӐIđm����+O}������b `����q�9�`ete!��f#��#��a%�0#!
+��
�R	�`Ɏu��Z�(i����
+��l��Y�>����©IJ��74^��`
#�E0�'*�@l`e��C9x�

��G�1��F��f�H
�� ��ْ;C
�C���Js��UG�
+R%�m�` ���ٗ�|Z�����LR0
�p��O=���E�*bE���ׯ�
����SN�x� �f�<���GR���zq}$�ʼn􎇞up�kD���o\��\����W"� ���
+2B�o@��,d>� �!�~�)�P
<l�aժU�<�zg�b"�CG�N��U�>�%�" "P�1
���w,g
uJ�eK�>���5s�����#

�`�SE��d�@Y%��)L
#�*�t������YR���[Y
WI]|��AHcb���J���+i" e��]��8�t��a�}?
�9x0��ݻ��� �T�����_
f?8d�п��"�^-�7oV A<.L��\�/��&	��gͦ�HQlE-�O��(:e��q�v����J�����@Bݾd���K�b�c�B�vl֎b�%��J�����4�Ón�y��Iy(E-�O���7ePO,��*��G�Lj&" �H 1
9�<*�n_�q��8�4ue�B�v\�8��[�Ŕv��ODE@�� ��<�,� ����/n8�Tsn���E�xe�P�������$�P�e2��VD@D@�C }��s

�W6i��L�rsg�rR)��3<I��!યdc0d(g�5�&" " " " �L �K6�r<3\n����3b)�b�B��I�g�fS�R�T��# G))<��4&��铜ǧ�vG�q	1
(I at Q雗�c���/��,Q�'�x��ks�f�
 ��5jԠA���)�
��j
����&�����b���.s��w�ȑ��Z�r����z&�ӹ���3�x�H������@�!3�ㆲ��-�3.�@����:a�m�	��n��
+V/\���������/hCi
[���_|�E.^��}�y
n��A��°��?�3�v�|���C�l��t�x.5��jF=ޥK�:�5r�x�
�����#t~��z��=
a�R������^ۥK���r&M�d��;^��hD" " "��r-�<C9n6Ƕ�<����GI���6<j���*�2����R����o�D0 ���Kʽ�o�s6���9ꨣط����K�iJ�Q���T
%�TƹF�u���I<
��bi�ڵc������N�0*K{=`��7Ta5(c�M�q�3
+�q�G�eg�_�,þg�
;|��e���#" " M��;9�T>�B�9n%�F_
r۶mTL���g��a+�ڵ
?n���aU�^����ãL4����t
+�1y)x�
+�F��0��ij��޽{g͚��(�NuJ9$��a͚5����C�O9�!�����@)%@��A�O�C�!���^�פI[c߾}_}�bɐ�	��5j
6
�J�*�;w�˖�O�;�6��S��s��Sx�My����;�lڴi���mڴ9��6l�`㒝r,X0~��Ю��
=Q
��ڵk3�
;v�q�����Z�b��f#����x�ሀ���@� `��������`X�Ga�y�u1��

?�e�4�ڒ��9�����m
s�YNeZ�j�lܭ[7\��#�]`�b�9ͺ�9s��w���iӦ�1f̘PU�
=W
���/��e�fcb۱�
/Wp4X�,Y�Q� ����bé_�>�b�eeeիW��ƻ�]y啃>��s��������?p��(է�ʘ�i��.p޼y�7o�G0�1�O�o,�s�,#��D9�N�Xo��������۷3
�ƝG�x��7��lΠ ��e��#" " ��@��l�Ņ%�
eݺuI���kN�����~��>���{w�mdj{�
+��C�S�N5BHB�q����رc���w����@Z���+�b:�, %
�11�fP
6dmhY��"" " �@�V��*{��
<z�h2W`7,Y���W�����N�^X�/f�>HzZ�	���<|�p�
؜�
_V������hQ� �
����A��¬Q�F���oJR�����~��*�C�j����������6�B���������@� `��YYy�0�����L��#F�Y�u��C���+���G�R�
S2�a%���l�]vA,
+
&�LRK���1��M�A�/�{��-ZXw��C�^pW�2q��f��&��-�D��H��K�8�sO�0����
+#�R3�L �u�)�\�t��%_�*%W�Rg�̛�d&�'
D�� g\iQUz�����@�!@,��X��ҹc��{��x0���
�w�v�
�S�rv��y�g~p��o���^�ݢy����H�
2
DD@D@D@D@�B����LY�L9�"-�	���];Q�d�r�@D@D@D@D��p挋�"���3�\���];Qk��
���������9��Z$j ;�\�"��D@D@D@D@�%w-�r	A�m�,��	����������@�@�V���dX�
�>���XԴ3�~�m*z̟?�}�[���y��?�]���=��VN�^��b�
r97jԨA�v��S�!�
a
��دf�D$@Q��#G�]�v�ʕ67�6mڔ�6έgϞ�#v�f" " " EM�@θ�[99��

{��M����;/�������mư0��ٳ�nݚ�����)�W�jեK�:�5r(A��
=z�*��o�j 
��u�N�(�s��v�����Y�fҤI�-���)" " "P�b��\�qtc���>���
r�%��}$��;:o�V���ߺuk�rhT�k۶m�v��q*c�f��Ԧ-%��o�(�e� ��1�yB�ŋO�8񪫮r��Y}Ϟ=�-��e���#" " ��@�xe��
n0���ݺu�ӧ��W_]�#��<yrNN��S�a(�o��V�v6ػw�Y���a����� z�f͚�V�2Cf����3|�TD@D@�$���p� ��ݻ�ر�U�VEĥI�&���ܹsm/<��X��	��ۦM�֯_ߦMBA6l�`�i`�,X�`������z��s�k׆ 
+Á
Lg�ي+��mDY\~��9O
_D@D@2�@�Z$�p���]tQ׮]������	n`[s�e���Ƶ�씸
l\L�#�8�uTs�̱�"��ӦM#�c̘1���z��@ ��/��������;.�" " " %N���q91x�_���o����Z>�����
{-�W�~}[s���.���͛�y�f{��|'�7�9C���A��Yw5s��P����������~�Z�
��v��匏߸q#=��
"�;^�aj�" " "P�b9.�'���#0"�c`<��8kW�^
0
�޵��XՄ�K
E��C�S�N5�^�hѢq��?�رc���w���_�JZ���KY+�X�	�㘘xáaÆ�%-�L4|(u0��s�$sĹ�{�W@|��8p���f���:|B|6l�4�=zt�s�� ��/+��{�=�#>f�?/��B�<���-�A��B+۵l����v��l�)l�����-��� �aӧO�ׯɼ�:�,�y���+�ֻ:(
+
I!":��6���{����/1X�FE�S��b4���+�`	��?
:g������c��r�)� ��A
�h��f�0rۨ[��+^٥���o��jP�	

:��q$�0a�=<��g>�����d8�<38�
��ɩ�\�t�K�gT�N��y��̝0"�#�D ��3.��2" " "P
�7�t��a�}?
�9x0��ݻ��� �T����h���y�7��%�y�͚7��+'���<��E@D@D@D@�
��+��}� �5���M�������Yu'" " " " ��3�rI���];���t!E@D@D@D@D ����Ļm��4�ɮ�KIS�>ٵ��0�$" " " " �"@�õ
3�
��QK�J�," " " " J��]��ʱJ%�����"/�ۙï�L��>��
Y��Kԙ�
�5j�]�g�
w�q�էO��;w�ۛ�fϞ}��Av䧞z�#�N�~�m*�̟?ߏ�������OX9�z�2'�f��`��4��5&��<�����⺾��Pg�ȑk׮]�r%�ŭ
M�6%��s�ٳ'��
/��c(�
N�\c�]����˗W�T�jժK�.u�~���1"����>��;�oy��&�-��r�7.\���g����Ku�w�{��M)�����a�f
k�oݺ5q>��LP#�G�
�ɯ��ՠ�0` 5�;u��Խ��k�t��
���
�y�[~�K/i." " ���1��Ne^z�W.��L��m۶k׎
'�#�<�裏��
��-�G���>�(��UW]�+�����v��ھ��
r�%��^	ӯ٪U�f۷n�ڳ�Z������6��q?w��o��jPJ	P��g��[�x�ĉ��α8˶�ٳǾ�w��r��" " "P:	��_���H0�S����1�)g�4���p9�am���۶m[�j��=A���ݺu#��ꫯ.̕��<yr��:X��{�Κ5
�!�Qaz׹e� �u5k�dꚡ�C$R��F$" " e�@|_�U|�����Cٴi����۴iChĆ
l\�e�e˖ѣG�h��ؚ����+�:��c=�D���w��ѪU��שI�&���ܹs�Y<��X��+�9@+g���Ǐ�ݯ��ՠ��]�6�39���`:;�V�X�.o#����x)� �E@D@D���-��5�
�ʱ#qGs|u_aL�X@6"&�G
���9s�XX�vd������;���~�/�袮]����9Q�n`[��ea�Ƶ��rδi��3fLh�����e���_�rU�9g���2	A���%�g%�MbW
�<+�P�2#�*e܉�ErΐelG^�^����_?�
&������-�]N��チ���OFa]�~}[�4�S���͛�y�f{0@�0(�����9sfh�����������Q�V�ZFy�w���k߸q#[��
��;^!Hg(�(G��
.n���/�p�$uڢE�ƍg��cǎ���޽{���툉���v�׾nݺ�f�
w6��<�s�;uu�r:t�0u�T#$X�Q�*Uh���0����H��p� [...]
+�5y�=fc?.�p��߿?aͯ��
+�ǒ%KL~e�v�WpL~�_Ng�k��SX�G~:�2X#�[$�#5�3���H
��N�2<pn��O�ޯ_?����B
n&p
��&" " e��#"9�"�O�P!+��[��g�Al6*/b��p衇���a
_�{8���_<b�2+c���Ӊ;l�0�>�����:��
<���O9�s0X#��
�ޮxe#-��h�ժ�:t(	�H�=a��Wx&%,eC��" " "Pn��139��k.g
sj�eK���-�Cǟq��A�>�������@E�P�W��u������@��A�;���)�;vعgߏs
�1��;`�9��:�+gg/��`�Ї�
�s�Q�`�!S{6kڬyB�ं0�����$��YٚȎׅ�WB���];T<)!�ԭ�������@i#w��}v���y�m�F��M��ڱ�ӥk8�VD@D@D@D�D+97F\�\����_�(�r�6}�k'e�:QD@D@D@D��01
u���WD@D@D@D@�r
��忰y���9j������������#�
��Tle[�$8�|@z,R p?���8B�>��
w�q�5�ӧ�Ν;Ms�n�č|����v�x�^����%����`��
�%}N9hHm
+�8ϥ��S�~����P
G��;#G�\�v�ʕ+�8n�5mڔ�6έgϞ��w�pZ�l�B�
YΕ�o+0�#�ߺu�_|ACJx8+W������?��G}t�
wI~��/����ŋُ ����lư0��ٳ�:Q����+U�T�jեK�:�5r(AM�
=z�v��o�j 
��u�N�(�s��v�����Y�fҤI�-���)" " "Plrb=e�Y9������%�V�`�̙H�1c�v$G
y��GM=<�[��#�jբ�QG
�~�a9f�V��=�u�֞��0�۶mۮ];v��
��QΚZܞ% �'�Eg�)�({�q�3J�qO8q�ī���	�Y�|Ϟ=�-�����." " %B ^��a.�<V��6�W\���k�.���۷O
.^�!Bm�dA`�N�<9'���?�
CM<�j�ݻw֬Y��0h��Q�E 
+"�j֬�j�*Ә
"����6" " " E��`�`�r2j���F�Æ
�<�R����-[��
=�E�)ۦM�4��E�Νk����bŊ���w��iӦ��׷i����۰a��K����`����LJѯ��ՠ��]�6v��a8�����+V�X��dq�
/�<5|(f�q&#�
�ͯl
�$��e�.��<�ؚg�y����͚��6����H�V��B�u�k�y��
��4!r��Rs�̱�"��ӦM#�c̘1���z��@ ��/�����O�m�w\0E@D@D@��@�b����1[9z܅K�+��r����{��8�&���ի_��N8!�֯_��!��SN׮]�͛�y�f{��|'�7�9C���A����6��[@�a���rM`������q�F��3i�ƍ<�0�3���x���������@	�u*;{��2��
+�EҮnݺ��w�����Dvfƈ$+�F�#
:t�:u�9��o��7n��C�
;6;;{���.���2����(��e� )�0���7�lذ!kI��56(��������9�>`�I
��
p�39@���
+���{Ϝ�����
/�����~h�w�
Z�5�e˖���5k�`͆͘8�[v��FVX܆M�>�_�~$�&
��_y��
+��" " " �F��
+v�W���UR��
����u˻X��G�3�,�
�S�EN9�s��
^Z�6;�)��0�
�6�╉Ű6��
�o�զ�:t(	�H�=a��{x&7,�p4p�|�0���HV�S/[����5�y��k�?���7>�ey�B�@�	�3.�2%PD@D@D � 1�~
��ҹc��{��x0���
�w�v�
�S�rv��y
�<:�'��
+��xҍM�l����(X�O�ED@D@D@D@�=c+�()�Pe�6}�k�
+&�����������@��a���*�,f��T��];��Š���Dy1qC9w+
K��Cl�d׎����������;gq~ݾ|g�s�_��E@D@D@D@D P���+ڢ(�e�P����������D$`+���+�;���ٳ��n#�q�F�
{�1���> m�q�
��>}��ܹ�yܼ�����t�}�^���������_l�s��
�8��|?U�>�5r�(��
4�K
�rЄ�p�y�r�N
���xmԬ���ȑ#׮]�r�J����4mڔ�6έgϞ�K/i." " e�@B
F�E}Æ
���믿>~���^z�Y������X|���?��;������y�1�6{��[�&b��_�R�Qj�Y1�O�߅I���˗W�T�jժK�.u�4r(3A��
=z���~COT��K`��Ը�ԩ�߯���.]�8��,s3i�$������A������@�!��
�q�n�����Z���~:u��:�
y�G}4��l�<z1��V�Z5K�u�֞��08fΜI�3f�o�����$���i޶m�v�ڱ�i�ގ��' !x��[f���"@�t�c��P�o���'N�ꪫ�m���y2c��;.�" " " %N�`
F4�2��	�hذ�ў�իW'��,a
�6%���ɓs��Rp��+��w�څ�}��)��C��/�=�2=:
}+d�޽�f��w�aT�O
+d�qj֬�j�*�;D�d��RFD@D@D YN�/^�:���۷ӪV�Z�-;��.�x˖-�G�nѢ��)�4ibk�̝;����+Ο?��3��jԨA�fk�*U\�&��S<�~7mڴ~��6mڜw�y6l�q��r,X@�I('�~COT�RJ�v��h�c��?;���{�+V��ۈ���;^J9Hm(K
��yfr!S���3�ܿ�Y�g6ܱ��H�V���u�k9+�e�:��|�O��UI�_�.���C�4��̙�ԟ�ӦM#�d̘1�� ���sՠL����/���t�1�
/�4((]�_9�C9wh.�Ne,K�?�F��$*��'�p��Q�~}[s�tNL]�v�7o��͛]쮼�����{���~���'�/�<
�N�o,�s�,#��DW�m����~�N������y
w\D9��lܸ��fs
�
/��������Z�`�I�g+Ǐǒ+G�*��q��6���L�w�61&�3sE(1�8:t�0u�TW˺u�O�U�4Y�~
+��%�i�ƍg��cǎ���޽{��tBh�
:j5(c���8�����g���T���J s���[�VN§
k�
����-�k֬a�
��]��<�9�'���{����{�~�mEz��
�����A�����Q����C�V��l�sp�E1R�,Y�>M�>��0$�&
�a��KV7�." " "�
�<s�`2k4�Y�w�}7	�.��믿�ꫯv���TřD��
+Wl
*�$7�h���K�jX76;�M��0�
�E�v�╉7Ű6��@�o4�ժ�:t(	�H�=a���x&C,eC��" " "P�	d�;���e�����x�Xƅ'
>��A��:�|���E 9�&%w�Z������� 1�~2��ҹc��{��x0���
�w�v�
�S�rv��y
�
{��'��
+�
rH̫<�ƦM�6s����������ʅ
����������@�(
5l�f��P2���\�Z$����f6m�kǕ@�4M:��������� ��Z$�.JY�M���)A��ZD@D@D@D�
��N}Q���2p	4��"�o�W���QWIʈ��������,��k'G1�?���c�
w�q�5�ӧe��0�q�f�S�δ1/���
�����㫯��
�B�{b1Q�N4h`��Y9�|�֭ۊ+�����
#�
�ի�KO�2�_΢��'l!א���U��@��� �kF�
�v�ڕ+W�L�Hnڴ)m�[Ϟ=��E	($
c�W&�rl�.�����"|���?��;�Ü�a|{���_�x�y,�ș2eʎ
;n��&ۘ��t6cX�m���*U�Z�*%��i?cƌ&M�PSp��ա�?{��[�&�
�/R~����)�z�d>�p�שS'j�_{�z���4�&M���;��㕆" " "P�	x䌋h/y�G}4��lq;��ժU
pG
u�y
��iܸ��ߎٍ�ִ7��V�Z5+��zm۶m׮
;Nɴǹۿ�	�
=:����oݺ�g���~ѐtu��Ƶ��O�~CV�
'@�s�c�QP��Ej���Y:˞�ٳ���x��Wꉀ���@�#@
���ֹ�KC~e\��C�ڈ�4��x�����n�]��ܾ}{k����Vvvv��w���99.P���w��Y�f�S
�?e�tb� ��f͚�V�2z�C�P��,�D@D@D@	8-f�a
�X�
޲e
N�-Z�ڈDG�Z!��������m�6�a6۞w�Νknڴi���mڴ9��6l�`ポ��ˋV����|��@�bŊ���w�
���Y�`����C'�_��'�A��]�6Jd�d���� �~]�FĎ
���
���2O �9u�����<�����;���Q��jj��5�ن�o��&񝘧�}��}˶�V�Z��B�/&�G
�z�9s�|�<�i,ĵ�
�/rPcڴi��3&T��~C�U�RM���/� o�Sc��w�TVʋ����@� �h+G�*c�aA�����_?�Bqԯ_��
+�W���1�q*4褓Nz��'�[�=��^�
�nf!݉��v��e��2�ҡ~nO�FB׮]�͛�y�f�L@��A���۞9sft�q����O`���(i��ٸ�۵k����ƍyb6g������4�2L����W�F�Dƿ�F�~����uN~�i^�hѸq�z�ر�%�޽�՞�
bB
+��N�
�N�j�D�J�*�
��(�b:7�	�㘘u�dÆ
Y��
+K7�
�R����cǎu��!y���L`
b|�Dy^x�'�7v�7sж���F��s��[n	U/Q��V����{�Hh�x�Y�ElI˖-���5k�`-�͆V���d,n��O�ޯ_?��|ۯ��J�j+�D@D@D@�83<d��̊:�
���"#���� �
z�;��m6
ړ�vٲe/��2�4B/�|�)tt�)��#���M�Fݺu]��ġbЛ�V��7Tm5�dC�%a
ɶ'L��s	�䃙��tp�:���ؗϭ�I�r�_V֯�6p����u�`��D'@θ��RD@D@D -����}Д�
;�ܳ�ǃ9昿{�
��
�`�ꕳ��[0g�#�����_����ٴ�ۯ��*��AH����������B�1e�Z6�7�MD@D@D@D@\r
+�ɠx�_*�.#q��i�QE@D@D@D@J?��
�l��R�_"��9q+��O#(R��rY�+)?	({\e�d+��K�ej��2�
+5�jcN�d����?��fK|7�^�^D@D@D�E �
�EHr�̷��
+����:X6GM�/X� y|�i��]gd��?����ի��q�:��ӻu�b�
+�1��s$T| }r�
�K�\]���z��
#��㎣�>}��ܹ��
�*[�
=���+�q��O<a�Ϟ=��
. ���O=��9�7.?=���ٳ��n#4z>��cN����I(�u�%>wec8�����d&���l��7�r��|�������z���\x��w���m۶���q�֭�����3f4i�䷿���իM�?���$�,^��}�Y˗/�T�RժU�.]�ijz�F���?��G�q�
�
s���;v�馛����l��6ǩ�G��o�q�
�>���G�
W��~
�
F- at J��?���^rև��
z�� �	psH�H�_��)�D@D@D�,��6�׭[�tȐ!��=����*
+ԅBiݺ�g�#�<9������F�
m�
}�ѵj�b稣�b�)�*zm۶m׮
;����'��#u�
`�ґ9޸q��o�
3����
7�}2�裏b+C�0��9%`\zzr�k�cj)�G8��`�8�^ 5(<&�s�=��_�Kc֮]�������á%%*y�k��ѹsg�(������

x��+W2�F�
I��ED@D@D@ �J-�5jp�y�"ȳ�ɓ''F�X!�۷��������Lc�!�yVjzZQ����Y��
'���^#�B�Po��V���u�XL�d�$\���
��ٱ�x^�r�����@�xJ�_t�E�
qc%�s�1�\z�ݻw�/�Q�¯��J��\{�
:t�q5~g
4����	�O<��{�7T�������D!���>�v{��M8o�6m�f��s�9�������Cݲe��6u5޴i�9�=��6l؀{;����4�'w�-�ML��٧�z*���1�9n��s�r�D3{�Q��&Y=�o��Y��nv0�-�P��R�d	pσ���#��]�� !bo��#�8��u��8��'?f̘�]��
+'�f͚5Q��E&�s�2]3o���P�j " " "�@*�2r�OX�ha��v�›ec'���
�r���w�mZ�fM�
[ϙ3'XZ
+zۗET���w�՛5k֛o�I2��w�}g��-wҪU��F���
�sj�(�g�D��U�K��ԯ_�;.��
s$��=+D��H�\�2�,0ذ�	�
�(�K����~�I%g�E���ܸq>� �2���9w�ÝF��<;��Ktr�
�UJ'���BC��(Q��!b�"��V�a����78��ޝt�IO>���-wb�D�ի�_�]��E�K�v�Ne�
�܂9GWI-�"_�)��>++�K`����%��f��l�>1�*�ԵSc���q��a;~���� ������5�vt��� �r�ԩ�׃ b
.��8��΍w�ر�7�޽;�յz��&�D���l�MC�
��o���O��V

��;=TO�
�
�Čb��d��9".5K��ƍ�Py(aNd�
���/�1G���˻����
+QWw�=wh�Y[y߾}�$�޶�]��p�ٱ[�m����^D@D@���	�C3�
rY H�K5\�K�,!�ù瞋_��8K~�y�L`Q�.���ɧ�<��I
�#fΜi�<��X8���4�k�H�����s�!�bA��Pf?=
y�;v�X�N
��9菆f��;a�
�l���ͯ�9� ==ۃ��zć0^�b'N�إK�P΅
�N%���w��n���͛���)�Z��vX�͚5���I��4>&�X�ԅg/�W��
�h��>g���?���F��'?11�ܩ2��fy�Q,�뮻B�Uo�{8!F��9�d&ƀ�x~�	�������+c�M�4	#�$�."T���w)A.6*h8��j&�az���/a޲5H�ž9Hh�۠v�C;ݷ��À6۝w��g!g�r,�����菆f#
�~��c�9ʻ�8ۅw��
+�ӳ=�1�HG��믿�l	$�
�\�Q��(�u�Ɛ��m���SH��m�[o�Ŵ�]s�ă
\�-	����]�1�yû�<�}�����KH:پm�?�A|h�
,I�����24���I ���c�>�I�@��.����g��m�O@�D$�O7bK5H�����>hJ�
v�������s�߽��}p�N���ً�-�3쑇�x�\iY��pS�3�6K1F��'9" " " " "�q�b,ʣ�l�!�v�: 㦩�%�k+GX�W�j��s�ٵ�Lo��%LD@D@D@D�T(�~e�ٵS*/��(2��V.2�," " " "PZ	x�Yx��a5�J+�-" " " " ����|[9��e�(SU��q�!;�
蒄��͢P��޼$��a��3����CYf���e6�k8�Ӟ�t=z��b]]8;��TǦ�P
ͨ������������p�׼$�2�mР�]2蔃&$i�� [...]
�$�xs?��L��+g�޽�f�����>	,$�ej֬�j�*#�
"p
+)S��������,4�\&��w�ބ
�iӦ��
.�>�-[��
=�E��FlҤ��	2w�\+�
?��S	�0��m$�ø6lfk�*UR�Y~z� �bŊ���wJ޴i�����s�y�mذ��%;��=~��P}��
=Q
��@�ڵ鑐!�/;���{�+V�L�lD�X������ND@D@D �@��Z�(-ZD1�Z�1C����3�ܿ�Y�g6ܫ�&H�V����|�M�>1C���P�
p-
������ݺuõ�N���T"B��[s��q���ӦM#�d̘1�*�z�dB�.���X���g��RFD@D@�'�me`�]&�`ܸq>����<�	l1<l>,�իW����D9[���׷5AH#�<�SyРA'�tғO>py����+��r����{na������ڵ+)�7o���Y�wb|c��3d9
$ʙ�
H
��v��/V۷o�?�Ɲw��X��7��lΠ
��Ū�:�"���l�a�~����
$#�y��Kؾ�'���|��6E�ˑ��Er
�k�?���/gխ[�tѕ��<�С�ԩS���X�t�.���ǎ
����{�n����2b�vD\jV�H	�qL
�ѡaÆ��,A}Ե�����@�X��Z����LV��n��\f�=^�dɣ�>���.�0����֬YC`Ѻ�*:� $��ޱc�:u�<ΊB8V��N��P�\
������{�S�1�z��|��
��RH#��_�F�jٲ��)����'ف�}�g������#?
�^ȟ��+�Q_+" " "P<R���ի����o&����#~e���GX0�+��f���?
:
grY"%����`y�-�A|'�٨��Z�����mt�)��S���uc��ZF�
��!lo�+^�5.#-�O�Q��#0t�PƑ<{„	<g�L&Xt�K������@�	d
{Z�e˖��$VH�l�?|�}�7sӮ��@�%@θҫ�4�RJ�H?ͻ�ҹc��{��x0���
�w�v�
�S�rv��y
�
}���߉��mY�L���̦�R�+�R�R[D@D@D@D@��E-��(���,��[���d��ٵcc?��5(?��Y1s�_��l�g�N�%�(��5j(-�m�&r���m�g�Ni���SD@D@D@D ��b0�+U�D@D@D@D@D�T��'�7��+U�Pʊ�������ga]�I*��|@z,j��)�Gre�r�6�
�:uZ�`�m@�=���c�V_�v��hӦ
�r��z�r�c�'�k�S��*k=z��9��ީ��ٳ/���!;�SO=������6��8�EDŊF�5h���d�կy�9����Ό
9r�ڵ+W�$�ѡiӦ��y�駝/��X"�S�(l<����Z�������իS���w߽�k�m�f���߇ye����0�Ը��[.\H]@
+݅�ᔭ[�&������ܱc�M7�dNDA����x�b��4j��r�-�F�g�}6�#�_���X�>J�8+{/_��R�JU�V]�t�=ˀqv��=�U�L 0`� Kd�\{�]�t�ZQ��3���t�$�i ��W��n�:��C�
��J�髮��Bt��G
yt�V�Z��4|�p�h��7���z��g[[����n�ڳL�_{s�q�Ʒ�~;U�q�"�#�j�b稣�b�*����̈Ї�Ԝ:�0�fΜI�3f�o�c:�m��9;������{h_j�	��q�3J�q�5q�D&�U��,��LPX:������$�%j6,c=��ʩx�kԨA���+$w<�X�NJ��'O���u�%���^#(Cǯ;��V���vR�P�׮]���c!!
�2Gl��Īq��>�f͚L�!;D�XmyhЭ[7��g��RLD@D@D 1wr:�ʄ���ݻO�>D���G��x�&Ml���s�\�����w�ի���������gN�s�9�T�Xq���.�~�� [...]
��CeZ���C�R��'P�vm:%��t����#� %�{�+�
E@D@D@� P���V�{�Rw}��h�"B&��<z�h�٬Y�l��V�Z�jl<p�,������8@~;\�.�~�9��oW�y��w߅�B\˓&M�=��
l_L("�Y�5gΜP�V�Q�F�6V�L&��d�f���MD@D@�3�X�E,�����P�
W����.1nܸ|p̘1�������
��
s
�~��7��S��q0G�ӵkW"@�
9˯_��T
4h�I'���O�c��2�ϡ+������kO�n�E{'�7�9C���Z�]
�����C`���td��ٸ#�������_�կ~�H��
�ED@D@�B�U�/�G#��M�8�={�`���R��V��1��N9��1S�60u�Ԉ
�
�5I9�I�����E�V+�^̉���]��8ݹ�0���c�fgg�޽;��j��H
�qL

�dÆ
?����De���\1�<
+�&" " 圀cm_���n_��
j/�ろH\"n׬YC����$��+����d�rG�R�Nh�Q<�f
5���7bĈ�����&I�],�6�ݜ�8�ߎ
;�&y
g���7ݲe��?M�5�|�WЇ��W��aX��+Wf� ɧ���
#�[�r>�3v��N�>��˝�Yg�u�u�1a\���Ռ
���F�`�������1ʡ�r�
+�e]��㲤����8A8�o��f‘���?�Wv�+���*
f#2!.��C=��c�q��H!��iN	����O�)<�_<�51A7�mN'1
�V�E��ɬ�4\�)8�E��Y73;-Z�H�]]��e�СCI�B~�	&�|#1�!IQ�TR�F�������@Y"�W0iUֱ�5^�l��c� �P����7p��/KC�XD��	�3����|���1�>hJ�
v�������s�߽��}p�N���ً�-����w>�3�s��hִYs�3��
�(�e]*(c�
+����x�<���Fl�-�v��(.
+�Oi׿P���" " " "P��
��l�p�r���[e1�nٵc#z3�i�?��J=(fq
�@1╛�<a�.k(��a���╋��;��H6^�ᇆ<���Yr��S�ԴY^�r�o9nE+V9}�H�D@D@D@D@J	u�s��_�^�E�p/�+%Ó�" " " " "P�Q��-̍\v�틻�s#1�].
f�+" " " "P:	�-�+h+�c/�mQ_�$'�E@D@D@D@�4c(��
���G/;
e�Q�9hp" " " " "�A �\N���g���>��rL am_��ʊ�(�sCC�rL �h_������/n/˭\�熆." " " �@�j_�i�e�a8le�_�빡�����������ɱ�䬘W9�J����W[�D@D@D@D@D�|��x����y�s�b�ъ��������@.�<���Zη��1;��x [...]
+H4�
~�xӘGY^e���G ��$X��U�(�`,cc
�P.SB#�'�J��+
����������g��ʤS>?��G�<���E@D@D@D@�+��xeS�:����e(��Y�q���������0Ne��/n+���
�e�E2�C�����������@9"�4�-���sb�J[��頡���������ȳ����&jY��0nz_D@D@D@D����ek
;�l,C����������S�P���F
+���\��\N熆-" " " " ���}	�r��*�i����������@�V�4����&���ED@D@D@D@D��_�����y!" " " "P	�`eg��
k��q2����АE@D@D@D@
���
����+njh������������O&��#�E��>
��9�v��\>�F-" " " " �<s����
�<Dz�eM��N�@�r�P��\���/" " " �@�J#1[�8o��������E@D@D@D@\*云c!ʹ��
˚%" " " " " ����O�e�
��V��#���gY�CD@D@D@D@\u�DD@D@D@D@D ���n�9.Dzf�����������"
'�<����i^���������@A��ʄ��!" " " "P�	P�$��$+�\O
^D@D@D@D��@n�>�ʚ
" " " " "�K /�r��x�k����(�����}&\��# �rN�`���c0d.��ዀ�����@y'��
àx��>4~?��57D@D@D@D@D��@ֱ�5^�tٸ����/�Y�������ӟ
+����������:�����ҹc��{��x0���
�w�v�
�S�rv��y
�
~����,w�993n;��Yg�����̥��4�OwQ�Vv�1����L&дiS�8�T�b�L<���G׭{��~��������-������@�V�Z5����z}C��
+��~��u}��o�z����3����[�/�s[�
+�+ҹ��׏7�_|��g�}�iX�n�5k�t��ռ�P��ʕ+W�^}衇�#F��o�m^b�О#H0��甧�z�f͚�S�?�VN�>�u�	'����֭[�~�믿~��st�����O?�|il)?�.9�;׸�{��^�Dn��9詧�c�)��s�a��
9r�ڵ\�;�3~"�(���Fm�̏?���3���
+�O1虔zG
y�!C�
ڬY3F�Թ��[����W_1�����.����fi�3"�bh:ޤt�'.n��7)%�XD@��@���_9n(�v;�s�e2۳�>�qL��{n����ż�6��O^~�es
+?����߻w�Yg��
&�I'�đ_��׻v�r��g��c�ƍ�
J!Q��+N�:��ᄏ���?��)S�ԩS'X���mٲ�ˀ�С�:O�o���m#�J��:��
���ͳ� =#v�l��g�qF�N�n���k���K�.i[�B
8�y��b�;��k�5k�����"]1s���Ȏ
;\����fŬgQ_���&�@�<qqKo�I)��" "P"�u��/ϣ
���b�e�ͷ�~�/�������
1b�QG
u�UW�v�iFw�}�m�)���s�ܹ�8�����+���o~��]�.]:lذ
.� �B�>����
8w5���oX�r�o�-[\�

��� ����6��4?����pH���o��~�U�\���Ι�ג[&��O<�駟.^�x�ĉ��o����~�7h��_Xg�iÍ�}��#�<�]J
+r ֪U��<:]�`�6�%�Z׻3*���3�ٳg3��{�=��<���F
�Ս�J�*1�Æ
���j����q��r�v����_y��&7�f�f34�������
*��~�3
,`��	���i���;z$�o�|OnF����wp�%ٮ];��Jvv�ƍ�,Y�C�`>4���������=v�X�s�I��G
q�����<�ӟ��p\��՗�|8������?���1;
�z���{��p3f
��n�����,��E�x���)~�$�s�)*�_�����Y" "P�L
F�2����ɩ��Z�'�C=�G�fܸq<|��w1�1)\��̙3�����l
׆+�5��ؽ{7���_E?%�%�
ݺusڈ����%�B\���oÆ
�i��>Ta�<�j�*Ӓ�
����Ν;_}��8�/���^�z�,����
{��]t���~�u��6����c}ۀ�N$�|L(4+��k����KO<��{�״�޽��o��f�����>�hs�o��`
s�1�j��-���R��/�z�5����cnb. JK����1�9ÿ��/
9 a��
@J۷o����Ymڴa��1nKBg�g�d�侽^�z�\rI�޽�Aе�|����f��s�3�v��K�9�0.

�pݧO��Ο��g�oR�
���7�y��p	���ﺧv5u����\�1�rn�>��rṊ��bŊ8���ta
+��<�S�1���I8�����?>~/ܽ�-<m�<��PN
	�c����

F�����ѣQ�~��֭["� �9�w�yVH
+�8F��s]�R����w15�pRr�}&�fM�=��3
9�)8�-[�����) '�
M�d��o������c}��g��ň�����Ma�WFs�<0��|�L!�
-���'76?�0Nt��:���"���ņ%��k�_����E 7��<�!_�Γ�(���@�K`���]G
�ߴi�YH�G;ʃ�D����/�-������C����c��|/M�6mѢEFT���}�]�<iíS�Q3�蟋 }��
�~.������`�����$��4yu��6�P��uȡ��
���G�_t��h�z���?�,桳3ޗ  l��;w���b\��q�Z�I�_�Ac��(�v0x�ԇ<U���?�q�����ɓ1��-��̡0��s=��Я�y뭷:���;m�nҢs!(�;�k�fyv�4
5�
�vE��˗�f8�	Pa��H�B�x���!snQ҆
�(��5G��;����3:v�H_���{��7#��l�B�)����_s��`1�ň��C̍�%7j��}�Wm„	
܊JA%�S�d��E�=w2�}��s֣�>�爛X�C���q�G0��Tv�g(E�\�.n�r�M�����," )�<�y�1�٫���=�8�p	�mϞ=�V�c��/�ٴMy�=��L|!��\!˸����,q*��F3���'#
4t
~���#|�G�
8�x�*'���Dt��eR�9F7{�'���<�ѐ�f��
+l�ũ̝�rr�o�R3ycYY��
*�
��SN���pq��3qs�rR��,xJVf���~yr��Y&'W��3��ۢȌ�&q�Q�r��jP"��r)�w�}���Oɚ]
^��]7
4Nm"���7�� ��?��S��e>�W�x�g���&uݓ�ij/" EM 7g\ܩ
3��O94��W^��_����,�"�Y���]�UcC�&�U�V<��cغu+�.�[
ٙ��cfEO�S�{��b�� ��YOMB�r(� �����o�}<O���(F�3+��1���a.�Fm�m/�EM�SO=��A���$B�s��y�v������{{�&�9�-�������#���Y#����9Y���I���:�<�!p����o߾�f�	���9{n��+��&�4b����ߪU��z�;
}�:��N?�t;������aԨQ/��¤I�p��B���J�\�q�':�Ж�������
����+�\oDC
9��q*{z+�r�����w�2)\>8���~�pw�:g�
�o����0K��y�3�
}Nԇds�����c�mѢ�]w�ŏq���X��x_���\\��۷7�����9.:�;
q���Q�i}m�Y�D�
����5s&��N
"�m�!1�
~zN�ˈ��L2 at D;V2k��>횲���.��;s�y��={��m����1q���p�ȝ!�Bb[�r�k�?��LE�����e����r�Ap*K�/6C�����P�[��+�
j�֯g_Iq33��j��x,~s/d$'��_/�_=k��0�Un�=�"�`���'?��4��'�'��n�퍶M�4!�e0g���Y�a��x��F�Y�<.��?~
�Iv�pK��o�uOV%���!�||��W�G_X+��|
�&6�������ĨK�!|�J�z
�6f��zQ���
��?f�47��!x c��`�S?����}C�
�0�X|�~�
��&+?������x�i�oD9)4�~��NfA�<776.wJ��ir��
��b�
�����w�r:BHf�¤&�stg
ps�#��L��)���Xx�l�F���.�Y~��&YR�Y����emo��]��s���U N��n -L�D
+�z�,7�[�Zp���@ش�v%��=}��!� ��X���s����3ͺĉi�oy
OVO�����
^a�E
c�9�L�?�#x��gI �����
��s�~�3ُv ���
��ɪ��" "P�r���No�l�җ>ى��1��=������q�m�]1����/��XۤM(���:�۰`ȿ�O��]zU��������()��WD�� F���)�;vعgߏsXHe���w��s��u�W��^4o�
r�>��g��G�y�ֳ��uV�Z>k(�W�fTi+�E s	�D�P
"�͛��Z�~͈�a�1�+0��-q�N*���D@D@�	�s(�ny	��6���
B��3#\^���i�];6kG�*��Wi�?��F�e!����,>+�����G�
+�$E&�`�Ң��H;���OoBl�K���u�5}HN����4蝿��
�y�b�Y�9��ҮQ0�L�B�01�oL
F���ʵ�_�d'
e�����'��;����ڈ��������@H9^�i+W0���
�a�3p�RID@D@D@D@��@,^�8f(��f��lj/���߿xYy�F�a�O�eo0�L�\�%
)Y���O��P�" " " E�XŹk��N嘹�4��UJ-�F���h�Ν2�ךd�)o�2���j��F���o���X�O�1g�b0���O
+��)" " " "�
	n�
+�1��I�
Yv��*�ܡ��f)��
=
+-��}��م��� j�9ˆ�.���du�g�¢�ٻ�Lӧ�8�_��%��W�K���ajJS���|�*�#1��E�u�ЁԦ"4��
x��Д&/)��l{�
�jՊb]���5�x��xR�<�5����3�ą9w�\+��]v/O:�$Aa�
+��s�I)Ic�~)�u�M7�|��T��_
��OO���p�

��sϥ$�UϷ�+*�O�qy�i���)_|�=�X����� ��:&�_�E@D@D@D 
+k���o�ͽ�T�jU
+�
<�:������=�x�
��	��)S����S��Ǧ)�|�W�9Ȼ��]�v��(cp���6dģ� �u�2
t4�e���\�MVO�~�CM]�q�߿��/����3u��y�'�|�YùK�.�k�d?}�z���W_�0�K/�D�eS�:���>�=�c���^D@D@D@"�7�Ƀ�۶l�2z�h\�*�/����?�&��k��/2���q���Tܻw�3g�۶m�����MK\ԗ_~y��0u
+��/�z��3����Z�v�]����N
u�Q�Ȅ`9�K�x�R�4��w׮]8���^��͛7�0��/�
 �O�ݻwc%��>���}���)�S������i�����O��>��=�c
+�@��������@0�i\���,��oV�5ݤI*x�Ne�'�x�%�Y�f���}��u�֍�l7<R7��yIK�
����9��xR�0�_�ԫW��ժU�Xg�����MJɀ�7n�[��iڰc�����_~�1���tih����MRH�,?�uL�%MD@D@D�<(`+��丱��f͚���c���D2�삅��u�g�xI��}�݅
�����1c��=�؇
z�O��9��x
+�ij�؀
v�O�Q)q�)���S�t�4-]�,�QP'%?�똔p5K n
�Zĉ~e7(0��8�P��d�T���ر�5q0��ָ뮻F��m��~�C��
����c�I�����D�ӴL��
\�f�i��9�'�OO��u묜(�%��wV��V��>��	c�O��(cQ(��d�A淮/R��~8Q��ݲ��ܬQ{��G����3�`Emذ� fkKa`y
��_^��~�43o75DL����$�*���>����g�!|�/_������7b��$��E]4t�P��e˖=��Vk+ٸ�����۷���:X�aÆ�?91xz at tx�|O}��,y��0��u��첕#��
쁅}\p
��9��Çqa�.����S�Nm۶%,՚q~�Æ�~߯� 9��c
y-XQG�5�29ɪ��/��,���K~��ߓ���/�b��d8�YDq��]w�B�9�9ҲeK��[����
�'�ꫯf���+X��>�rH�ڋ������@4�Vqֱ�5^�t�_?��i&8��Ϫ�?h�;

MPq��s�A�Z`gw�>�e�J�I���8Q�/����ҹc��{��x0���
�w�v�
� [...]
�^�<}����F�e2~F�	�H��
�l�s}�-��A�R�re�d�nݺ��cp/��5�dNʶb�ҴiS�rfNHL1_݉������1N���V.�e�h8" " " " %E��μ.}~��~E@D@D@D@���g+�u����Q�Vǎ
M{�(Gi��m&M�D�5!3
+�z�I�-�	��y��W$�zE�)+:���f" " 
�˱0��~��lݱ�5jD�ߝ;wf���РAQ��<y�/���i�i?`�~������nʔ|��΁���H�*U���<�Լ-KW9�>�id���-��M#:��"$��
�W�*������裏��"T.�TРL]�3����ef������?^~��?��O�W�T�bŊ�#�9��J�D��������J-E@D�	���X�dg�uր��fu5��YS%����۷�<��8��_P:nϞ=��+��ҪU����hт����IAٿ��!CT E�Ν)
���1#��	/��g"7�[۷o�馛N>��3�86�
�紐�
Crڴi菫i�ܹN}.��R^���?wꃧܼt�`�ڵ��oD�s�=w�ر�]#߄�$z������-��Jż��^)�J׼����s
0o�<�_�{<��O;�?��O�a7�� ߓ��� ���
7����ŋC���>��=�K_x�s:;|~��w��}~����������@��}n+۾�V�������Nm(�L� ><L4�S{�yʔ)������?��æ��͛��뇹ɻcƌ�]�v��d�����o#y����t��Ӟ���$�6�������߿��/����	��t���_�M�6Z�>T?��:5�~�믿~뭷F�
�!	��:�����<oS�^.�隷~��}�Q�s��7���6:!^��׿f͚E������P�.>~�����;�n���;�<��'N
�՞��p��y�

mڴ�
^V�^
i~�_����������@���_��?x������߅7����!@��c���>�'6(�f3�Ξ=�
���[k�
�3g^X��駟�xÆ
�q�qW3�K�V�8
S
�����J<%T�޽{m~��ض�"
����৏�
�
U����p���sC������ݻw���4�0ab9�9|��u
u�UZ���r]_�
��l���O�ϵ߼
�
`���5�y��1��G q\��CAY�~�cX��nو����ȸ��3�k|���ub��,��{���@D@D�E������o_��Մ��}����������7�����g���uC����k�~�
Z���N�s�)y�V�gg�cN	�+SM��
+��+x�'\f{�f��
�����֭��z��Iȁ	W�%-	o�c���/�̜�w<��Lpt�"FRgEoLD��<
6��c��I��'X5MHE��
'�z��_~	��O?�
9��S�
�x
�
,�?o
s���Mv����F��y��h�o�\�r%��7>�S���z�q�G �|� ���Á� ���{0�`}��.*��W�g媩����@�px�sw�me�����X�z5�o]���ȫ������T~>��Ci��3f<���xh
z�!B�Y~�KS����]Qu�"9�uL�VE-J�6��=?�t�7������U
W_}5��D��0�@�~��;�
,?Q��
+p��CL�l���bN��4��$�o����<�D>�#B" �R�J,�15�]��1�Y(��eĈ���/�w<�;��������P!���6� ׬Yc�b�
��O�r�
�������?��3�]b|��l��
����gH�̟�~�+5����~�$;�m�~�z
@���2�S&�+��i3s�RZ�n���_� }�O�z����w��#5^�^��񆞢" " EJ �V��=kY���{w�^�(��{��G���3�<��F|�̙3�U6?	؝�ǣwJK�����O�.�N�>��IIp6&4��vl�|p�p�������YA����&@��>��	��q6nKhC� ���eC^�m�+Vgi$�[N����T� �L�u
=�46(�y�w�RcX�y�O��!��hν.����{���B�<�W~"m�Q^t�EC��\^�lٳ�>|E��I��TMb#�ܮ	����^�cj�Ag������@���.���x������3ɒ�Ną�D.��:u�Զm[�(�Ϗ��d��ߋ/��W�^&ISݺu��`��,��{�a�>�$�2�	�&q�%�\�����
y����O�r�z!|�
ehвeK�MK~�9��ě�+�#x�;�0n`����
�I���u�rnilSR���z�0-��O�d�CR�Ɋ��SO��o��$�b�<ǕF��������O:��뮻.�x��
�EHI�����Q�V�Z�4��/oy�7T5H�/̿�-�<˖.��6s��:��:>���O[�i�Ϙ5�d��Ύ(8�S"J��f�������g���G��I�x�BO)Rz�?E�W�E@D@��@�AS:w�sϾ�c��ݻ��� �T����hނ9
��kc�pN,��k��ݬ�Y��t9��z�d9�W�R��EiY���L�c"�
9G~TY�k�\����?ei�i," " � �oW(-Ʊ
mÆ
I�A���}�FA�sO�����(�Ku�m�������w�e����%�=�m��*�y��S����"" "�2gN����ք�[�}��f\��1)['���������)�`��zk�1���\~��F*" " " "P"
+�+�\.�k�NE@D@D@D@2����s���7�I���F�R��
!
�'bR��~
Ϛ4iI�Ht�Yi�l�z&v�=�yRʧQa�J#��y,<�y�Fm�e�f���Q~����P�TȌȳT�EJ���@1p�W�7�͞�u�jlԨI�]%��A?�.(;2hР(
+L�<��_��Ҵ��
%�ȶFّ?�0��ioIvjHJ���P��y[�I���ԻqΖ4�S��='y�/�Q���<KDIu*" ��@~
F�>�p+c��K��>��;�ȐQ����ZQ��� [���
�èow����'?��H��ޒ2"(���iס�
+,o���Ջ�R��K]�t-�%�]����^q[����6��J�!<묳(�F�6;T� !+խ�Yݾ}{�"��<����%����c�S]�U�V���oѢA�Ǔe��o8��d�ܹɞk�3�K/���?���M�yk���7�t��'�|�g��f��
��3�[�(C
3㥸 ����<�2vb���@f^1�Z�nM=�#8�=\A*MF�����Sgl��[�$�aB�
?}<;mڴ)���oQ㓌�
IA������0���GO��x��']�رc�u��\�~�M���}�=��}˗*uRO<���N;�O���
F?�=y��7�2�]�ሀ�����}�Z$��V������X!�Q
��|x�Tp�Z�X�S�L��׿���~شܼy3�k1
xw̘1T�
>��e#�
e8ڴic;MA��yX�x1�6������_*񺄻8t�� 9����ԩS_z�9s�`f�0�rrJ&��;3y��[oQ8�y��Iy޺:JV
+�x�	���9.leS��nT�1�r
+�=?_��_�bI�Ϲ����k���ѣ��1�s�����{[��8n-f͚E�
�	3?��xr��>~�Jv~�����n�W���-�̿!����
n藓�C�.!��}�
�����f3�Ξ=�
�������a
�#�pxa����~J�
6����]͜/�Z95��5/��8���1�O	��w�^ۆ!"��G9��8�	7�'���u��u�W2`D���2o1t������pN�ĩ��y�(�O�fߩ���Qz�}ɝ6oq���N�
=�yp}�B��}��>����
����w��q���	
"��ua��߷.e�͛���/@�[~�����}�h�" ������%߾0�	s��ܻ���6=;{�So|1��χ�X���N�졗�<���<�}�I�7�z�����[���U�9%�W�w3{��8x��q�����	�jѬY3{G�}��u�F{��={��ӄ�<&�����/�̜�w<���z��qV�j�p~�j
+�Nٸq#�@<�4
�1G��
��N�3�[�(�>_~�%S9�C.�2�2�����^�Q歳Ǣ��ot��W�\ɻ�Vf��Ư�–��J�C�����[���O7'ev�?ש}��g ��m�ƍO9�믿
5R��K��o\��Q{(�b�rV�b��`x����c���D8��j�n�bkf3��Y�F�Θ1�P<.=��u�,��)`u�_��c"�!����-"s��q9i���6�.��>E��b����_,3>D$� U"[ʶrtm��,�G��s�����{�� W_}5q�/���|�I�LyR�Թ" "PR��sm,���u�o7�\��#�U� �J�*�ر�
�Y���,|�뮻F��m��~�C�+��P�š5kL��#�R �[�ʕ�G���>�}�(���k\%+'��-W�����0��p>�Hv���c�3�,����L�����ի�|��;�s�&?~<��B�p����<����Ff	��� �
�\'�H�����yp�r�ʜ�J�]���7��@�D@D�40�c���|9Y1�����
>��?��k����{	��Q��G}���<�
�"�,Ϝ9��v|���;+��l���,Db�X�����&��p��$X2q�����܇�~�
�>�a�[�UW�Q��&���-I/��G
y�v��
+C��z�#��PsǤ�Hv���
������'#$^p*�263-I���}7Q����E&/�Ҭ�e�*_�qZ��q]G�[��1<.��lŊ�g0��i$�

�M
M�K��E�� �D}��U�Y�sE@D�4p׸���ql��&�џ��g\DÇ'�œ��Ǫ�N�:�mۖ��g�}6�x���$λ�K~��ߓ#�����ڏ�
v�ax⩨BX'���_`b"��z�J�>�MZI�[��

��8�뮻�0ؑC�@/K�2#*�y�3�`R"\x��K8�Ĩe�C���-[Z�����
��M� ��H��r�%ߓC�����С�
s
���zk���9�Ğ|�=Q$՞lBO=�����7�1��C��LO�<=��Wa&���RG 맧5^�l��o�����j���_�g�`�FW
�wD
S8%��iVƆS"
���Ыf|��� ^�)E:�D}���2#��iT�$�]��HY
W�L����@�AS:w�sϾ�#��ݻ��� �T����hނ9C
|�7֚ 
�8��ڪY󳼂n���e
��늢)E٢�T(j��EM�D�u��g�$b"��g>%�F�;-��J;(	(�l�r����rÆ
I�A���}�F�6�F�29��^mD�(h��
�I�6�<�����~���0�X!�(��*$�."P����ʱ��37��]!�WD@D@D@D ������[:b0��s=��XN�N�@9D)��9[�a�cc,�P�$(���_A��-����Ʒ���G���>5��;�}�a	�Q�
� 7){3a+j}�"�l�$N�\�u(�y5i�$��� �y�T��8	�O�
}j)" " .5�V�qX�#�wx���W�U�r�����S�J�U�����nr�T�V)�j�5"���4T	^���РAN�L
2����UM��d���I��?�0�AE�Z��֭[�u7�x�S��ٳɄM�
�D����BJH��i�W�_&c�)����9���R��RsdU��
+�ؾ�w�d��w�#,��u����@�!pZ��?�����ٵ���q_�
��y����^4a��[�Nں���_���dZ��X�r�_�/���U�Q}��Gw�qG��%�>eƢ(S+�EiYZ�P��(elP�~=)Ѽys��mLY�[n��|,�!ec9��&�󊢒�|�	i�(X��K/9��Qd���_~�O~�'"��g�}6ީX�4ԝ���@� p����9�;������o�;n�׿��}n�}�ͷ��u�-�us�?�ts�`$,c��v�YgQ��Lm��K���:vԬn߾=o�c�
���_���%۞��V�Zկ_�E�<l
=��B�8p
+�LpBR���~r�o�~�M7�|��g�q�l�,?Y9�v�By�NQ���<�
��=���)\��'�x�i����?��2ŦU�o�����ŋ��իWs�Qɼܽ{7^ҕ+W��)��j�I���ܹs����2dǑйsgJ9�����������o�<8�n�v�ʅ{�h�w
��'�Ө���o��׿v�G�wle�,���n��v�5z�РD/���˶��
��煺��ճ�]���	�֏?-���;���,��y0����K/e�K����
�%�-�n�_w:." " ��a:�����@��۷w/&��{���{~�����m$d�~vܶ�_��G�U�V�#��P
��D߳y�L�V~ŧL�B�����?���y�f~;17yw̘1Tg
>��U�1	v�;��&%�O���7

++��T�
��
�C�����zk����	��~����k��Kh
��g͚E�
�7��w�I �;���ON�8�
lР6��_"k5u}�/�-?9��t�R��mڴ�����o`�0,X����0]���O�%��:�?���-;�<�
������dy�Q7�pւ޶m۪U�(��T4�]�/+!��ΏR�n��/��LLnw1���������D>iӀ
�̾_������Y�=�"" " �Hx���Ӛ|���Gm���|�
n��cb
+	a��fk���}��w�´G��qb
�#s���
k�?��S㑲�����9_:�J<����s�N���4v������p�
h��E��v�7̉&L0
+�
w�7W�l�C����y�P�{!
��?
�Ȝ�x-�����=z��B�d+ǐ�9m0Ǒ�p����?���:�O� }� �>HQ �1;�Ύ�u�O�T��W_}eu��n�pi뜖��.����Q>w~���߼�x�޽��0
��+0��b�P5m�,Y�Kn������完/�(sXmD@D@D�I��
�G�x�q"�@޽k��
[6���|��W���?����ˍ_���'���‚/O0�Իf������1��Wv�ϱ�N�3N
*x\�ך�T.�Y�f��d��֭��z���#o��KZ&����_��9��x�7ExyD)�>�1G���OΗ_~	%
X���z���;��o �S0�^�7f���_o�M�/�#v��t
�J��+��%�\b��cުW�
�U��L���-;<�wi��>��J|��Cء��?���:��O�'�q�cƛ���l��|9D��y�OA����7o��&�cݺu�ׯ'�L
+BR>�z���7����
�(" "P�	|�����0y�l�}�
���``"��G����?x�ʓt܁��1D\G^}�U\�l��4
�h�_�
�~�i<L��♸9��xy���
�'O���\}��ģ��C �-h��Xb��=���5k�$f�
do��1g9�!<tt���*�����`��y��̒Sg�Bs���٥m2��/#$��.��H	��T�O
�6��
���DX�G7�x,s�GT��D��K
�p�S�r�.�����������}�$�}Ld����V�
w�%�@�–��}~�
�e��c"�kJ�����Ɏ�lO��,�뮻� �m��~�C�s50?�)�{C�@ �k֬1-�1G�5L��Ox+V�H����g��
���]c:��ڪ�?Q[
�8�	7ǯ̹6! zrQ� ���s��_|1q�D_t�E������c�$B���O� }��$�ax^G?���4���蜖qݺuy�\kZ{׸Kɘ��X��S����8���ЩS��3gb+�cV|]� [...]

���t�KWa���_\~��O���t"�x�q�&�q�
~��?�|���?
+�B��.�G�<����+Vl��wܼK&<�,�����g|x�=y�!V
���4 ��Y�Ɔg;x�С��˖-#Ǚ�t�.pB���f��r�.������'��yB�	26��O�G��:��O���[��},�s*F�
Vm�
���k�+c��.%�!άj�GdZ�����%q^�^��ʬ@
]��ǐ���k1�Y���ҥK��r��CA
��Hй" " "���a��u�<�ߟ��z����.;���p<	�s��d�?*�fN� r�Q>�s�>|8�
V
O�qM����]k~�
O�Kp�=���x_��� ���)�~�a&RE�� ����

SrJ ��[o�޽;�M��q�:����S��_b��>~�=��Y9F�����ك
�y��H�/'��tr 0ۈg �9
 Ǐz��ի�<����z!�
������xڎ���-9�e�\,�=�%c�y���ƒT'X�μI�(��
0����	��1��~a!N�)5B�=��'·dy)
ʜ+n� ���(" " � L�������2��"b���i��
NX�㐜�&\�����{g�{_D�E�
$��dW��|*�S�z���cj�
���;^���kO$��&���Yk���"�����7_�c!� �[����z*N�ԗ���@� 0��!�"��b��X�o�=B/�vs�P���w?���o��bYO��e��g���M|F�x���e�\�䢨���B>��K!�����M�6a"c��7���;�^��ԩ��J�i/�)�|�
i�_��8��/J�P�E�r1cWw" "P6�Hv���uJ�,璾�a
����9<W��P6�r�	ъ�)�
H��J��}�F�tԨQ&#a�QڗH�q
@,��~�;n&1j�
/%�it��ً���mI��2D����$�3���ܩ�(*U��t�б�^�	-������Lq�o�H�
~Vk��g�*Z
D@D@D@D@D 3	�Z���k����D
Q&�`�����Y�p�ڷ���
!#VC�
gz�V�``+�[�����e�ŝ��|b���?��љ9li%" " " " ��m���
>�`9���ʼn�I�@��3�5��	?;�Kc+�f��㕱���鹏�K܅���=��ܷ��^�$�4IbR
�~���c?�e|?������ki�n�Y7b���-?�x�ao��v��o{�gƎ��I>LѶ�nI����x�s�
+z�8���QG�l�pNt!f*��ǯZȕu]RI
��R�
+�>��9~�#Qy�%�a��>=�V�!��y?m%��
)/�k�vN:Ƙ�"~wD��k�)9���I��w!R�!IQ��/�B]�TT*0�h���cl϶_j�>
��^:��#��%!��#i&&4JF������G��
-�O
+�,�$�����kݪE˶����\�ry�w�V>�Ԇ����7p,ǂ�O�u��5?�b,gY��:k"�8n
��f?f
:�b��`�2
'_��^��9d߈���]�
Z��t	�.
���zz62��J窳���k�gr9�;���Q��us��R:��d'~◩Ks՜bS�$�<	���d���)���
��QfD���Ͽ*Q����vk��8��q�I���G�<\�+a�yϕ�A������6��$L��}�'�ᒰ=��,��tt�c}��\�D�����:1�7sAu,v����w��%J��I��
�����ߌ��9��Cǜ���1TR�p�H]��ɿI�pMCZ8�zO� +%����i�W�d����ʁwQ	?RAX����ZV=�_Eo	9��o��/w.�b[��9��ܻ%��Nj���[n�t����=y
[d��^l�S!�f9`��,^�c�;�e���)q��~��O
o~����f/v]c����������6�ٞ�7'�D�#N��wK�y���������>�Kn��v
���H��m���%..�3��Q��9vLW��LW�DU]�T�T/�.�]>79�k�/H�%λM�	���IR���i���ؑ���q}�5w\
���|>�>�)�#a�
����/��ϕc\,����0 at m;}
������	������0�]c�v��ً�����L�.�W���.����
��r�^c����%�_2���o[�>v�qzb��'&X�>�u�,������섻�ߎ�_
	oǿ^|s
.�=����|�<%>`_e���-ު��y·^��_�������!�:�����>�&�JϥХ�s���h+�����KT��T�9��
7�b|~����sR�o��Nՠ��8��m���m�A�
������5�Yf���;.��޴�i��Z��YY�
|lL���^��O4�I����MӘ�������T!�b�oe�
Z�"/+��V:4�b޿C͊���U!��!��Y��@���5�
m
b�>�
��?�N,
�#�������ƞ�߄FF���1�pA��b��bL\�ĩ��Rz\}{b�A|h��\�%�{
+�_ǰ�m>s�H/8!<���C�?W����H�vߞ�ώ�oʼn9?��P�N���
A�|tm�ܫy�oo� �<;i�Y�?��g2�I�
����1�
+��+#�@6
Ox^�G����^����ᘁyN�g�%�-�H*Xa����i�f�j�s&�lr���|�$��'�~q���s
��(���
��z0͜;�
5���|lf�Xi�b
v�Q�m(��~o;���&�[�/������
+~5�o&�ӹ��V��h!Fd{5Y��|������-��
�lW��^_%!?��)�/��*��c�=v����ȓ��2��w��o
vM�3WOe�~)
+~��\o�?%V������w�����z�=m�)������Z����R`d��E�k��F>9"���=�{<�d��g
S'6c[��
��cq�_A�B�z�����>��8[9&�e&�~w�/h쀸)�+`%�#�͗:�x�~��Nw1qi�X|��gk�w���*���Ѿf\�\N����_,g�?�N�v�Ջ����?�Q�w���

�a�~���vޚ`\�cI��g~�}���\�/��_��-��?�
S0�������4��H�-s�y��R�u".����y|rLW��
~.]�����I�&r~~5�B���1��y��p
6�����OD
+|��}�$h�0�|�/�1�7I�a��q��t�1�)��5����D+�O����&��f���~���S�s���τ
:l� �͘���g�{��6%��N☿9�恅}������B)A�S�[��6^_TH�ԉ��x�</�H� �����ds���I��
��#�e�{~��Z�~fy��ɕ��q��]{<���6��g���zy��f'�ض�Y��?��~~�5vp�V��_9�,�� �bc
���8���>6a��3��]�g�Z�q�3n
��u6�_�
���{ʡ� ���޿�>]?l�s]B�X^:/�����;0�D�==�q�A���P�@|�
l�P��
�����l�qV�
�-�g��� �{���&�/.лA�gܫ����h얘8_Ӳ���Z忎�h��6w��
lBg������B9mS�_A��w�`���%x
�|�$
*v�y%��𑊷����^_#ή��
+渡�h�o�v�Lh�������8��볛pf
���ԑ?����y�”��(���y���o��ܼ�}��0Q��I�z35�+L��-8�=�q�q ��|���衹��m��6�A��"�S��G���x��[?�E�yO�@���'���8���I���&o���3�{�e�.��i�j���I{��{������Cj
�u��w��Yq��~�pa�C+�����W]�w��YJq��%���&q�V�e��5ʜM���q��t6�
�zig
Ժ��ٜ��Qq���7sT�B�Ѣ
+�oWp��ET)��|�@r�T�%����(&\���!��[h��ߚa�H���:��p�r���`�
|���@�n�G=_�`�r"�X�yG�N���		��P�������4蒢�O
f��1+pV�-�����KO?�_A�fLy�S#�(�?�Ԭ���T�����۾��];������ڽ�O���n��$�E�7S���)~�(E�CAqi�'�
�Ҡ�[D!D�Լk���3��R��t�G�*6�
A���D��R�{^Zŧ�O!Gzz:��NY����A��U	)�S��1&)�	"���n���O��X��g���A�4�HrR5OR���#7�U�@��Z#��YU��T�����
+endstream
+endobj
+2820 0 obj <<
+/D [2818 0 R /XYZ 86.4 726.045 null]
+>> endobj
+990 0 obj <<
+/D [2818 0 R /XYZ 192.312 371.339 null]
+>> endobj
+2821 0 obj <<
+/D [2818 0 R /XYZ 86.4 318.522 null]
+>> endobj
+678 0 obj <<
+/D [2818 0 R /XYZ 86.4 209.644 null]
+>> endobj
+2817 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F49 983 0 R /F16 729 0 R /F48 982 0 R /F38 785 0 R >>
+/XObject << /Im10 2812 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>> endobj
+2824 0 obj <<
+/Length 1959      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�8~ϯ�9�Qt��o$�^��esvv.
�3d1Lwϯ��%���4:}f��e��rէ�H�`�������|�d���T��@Iă�j$	&����H��
/���;��Iw���
�0]�8��M�Zv�4�\�D��o������� �)
��
fOg����9<�!��i|.�=�iD�*
�g�9�NQ\U����RD"i��q8�z� !
��b.�D�0���/1	����;�������+#1xP���
/�if��x�yL���CUس7Y:]��Fn��IŃ.!H
z�<��l�N�s
��44�iݥ
i,�t�8c	�")�
D	�5n�� M�a��s1�4)�%N5?�\T"""/�26��~ތoG-c��G�Izi.nW�w5��
	���\F��Ž�ݻ���
+1y�q)긣��)���uWw�I��zGJ�%m��`��=��^��"�:��&���x�-�S�=�9�q�ou�����u�S��7�ż�$�2ٿ��֑T.e��:��]�]��2�|\A���U���̅I	_���ŐW�����\G<\=��%�`ၫ���j����~�
�h��1EZ�9�_�)EJ�5,
�
3�@Ɛ�8���>��wo���o'��*�n.����5r�}�%q�X$p��t��!�Z�K�)\
��.
Vv�u�
�&0��_Y8�
W�W%cD�*�C�
�D ����3����w�Q��e��*S�Y\Z��VO�i��]��HZ���6_�O���l��)�=�K\�}�����S����>�����_Y�ȭW
V늗X�K\�WkY�>!P�s/Y߈�Gm>� Y��
+��I
VP�f�
���H
���������*pZ��F	�cFq7߮���]���]d:W�Da�i��.|��)H�������k�@G�*�
� �T��
m�s�����Q%�O"H�I#��Ѻ�ӟ�e��ɪЊ`�hk���:e�W7���,�}��|�L��l�3�%Ѫ�o1�lI�*,����Uߜ ��w Z�[����b��-v
�`nD�n�(A
�`�ެ��!WC�'"/�B"�e
�[��AG��)}�4��@�䮀\<쿽Y�߬6��T7 1
��i�"3hGLo/��&�2sA
��M�F]�:3m�؋�:],��o���W� }��	�0]q���)ӽ���Juh��>)Y�Ӭ\
Fc3��)�ǻ0>��
�t��BP\Pš[<��PI�
+QR�~�ӻ��r�:��h�w�����gRf���I�8?���̄��ݎI�k0R�8�0DcD()�G����C�1�F����;,C[�"��^}O���#��l�Q�| �HT��+��"YD���6Af-�'�(���N� \:��JA��P��U 
uP
���<,?��>�� Z!��
MQ��Gr���P
��C>`
�j����QXB���7�$#��iD�(:�[
�KnՀ��ؒ[Uؿi�d|�1�>�0���m[#JH��
+�v��Z����R��?p�w��z3�
�_�3�c�`1��N~ń���ugQ�y����x~�Dҽ
�v�Nf���t*�H�77�3{
6��*��]E8���l<2t4D�2|2Jm�
���
w�#���V�qw�l��}���iv������Ya���0o>�W��cyS�� �6o4���e�n�kE1N��Yj�]�v9O�,Y�s�Ԯ�xL��r^���g�$$��
���<ܟ��S�*�`Z
1�a��Ľ:X���m�*�p��)��l;O|,S�c�Q�,\
H�9��K1DW;���)��DT6va^

Їaȿņ�iQ�'�<(6D����%�k:c�Hv^ԠL���
�;�oR�l���?io	�&�����?���F�C�*s�,����
����d���	3z�>��lg���I�.�%_�笌�fTC�?�O�/��/�h^8
+endstream
+endobj
+2823 0 obj <<
+/Type /Page
+/Contents 2824 0 R
+/Resources 2822 0 R
+/MediaBox [0 0 612 792]
+/Parent 2803 0 R
+>> endobj
+2825 0 obj <<
+/D [2823 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2822 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2828 0 obj <<
+/Length 2662      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�~���[������<i|d�#�����-�23��ǎ���
�)Q�]f�����@_7 ��#޿N�ޟ|���dһ�
��XȐz�3�7�22*�O
��.G��`�п
�̏C�O��} ����r��b�z�=ܿ���`�4��Y2�������?N(̄x��,ͥ7]���;�f��g�a��f���a0h-��ɿO�[	i����ɈTI���_FW�����
(ӁVf4���,€����>W���f|y=��džo5�/��8
D��?���,���K��,��?��E�#Ao(Y�"�
)
"�8�%Oq�(�1r���k3��1Ž�^	̿N�ϑ����<h������<ɒ��Z��O�+��2]�����6&��M��g�2oSLV���ғ�
Ap�;„qAHj�
�i�Х
+����x�F-)&��ίG_��v���`�,�(k����C\Y�_�|8���v�y�ٮ
D���QB+͒���m�o�O�׌6�����t#d��a���lZюW��̶�ZG��,6e�e%��
����:�
4K#���J]y����"ߗ�����x`ڟ�5��9.
 
Ә�Y+�qZ
v��?R����h��ϒ��y\gE5�XWLܘH~Z��W�M�P�j
!�d�i��0V+4�����<T�m��hp]���G��[��,2��>��r
H��
]��m�ގ��W9#A�h%��
+pdN�����PD�t�B)�ˬr�O�tSضU6���֕.��.��>���Vj�(����y�J��է �0��lTe6�U���V� �I쫙��):'�<� �%�h6Kqf*��w�HR��Mz
�,�w�^9f�S�M?u�ۥ?�җ�"��S��k^$K×�K'�ڭ�#��8��F�l���� xc ^�M�����y��5��W��6��>z� ���k�X��Y��I��k-�2�Ș��
�m��eQe�!-,��8�BT-)j�5���C��-���#�
+@�R���2!!v	CJ��
̠��0� �Fa���`[�h'PmAR� 
��h�o�|B��=�|HJļ!H	i,׽0V,�jƕ $��gG��$�76��<̹�K*��!��
�eza3�����H� n;-�R�ٗ�
��_
��H�*��qn�v��+?�e�џ[������L�M^8�~�U��Ju�ץЂ$i�Q1h2
U�k�u/�a�6����a�%t��]�f�s"�ڂ8�};�0�PC,=��U�2+،0�
)%�[��4�ܼƚ���������}1��C��Nh`2���������Y�i*	����Z�AH�?��$���%xh�ݭ�Iv��]
`W
)�W�Sە��f����f���\\
�� �-��~�
W2 QR�J:�}I��D�M�v� ����87�}ȋ� ������λ�!T/|!��l�=��;{H �n�
@����dW���(/�gI�W�8����?�	�
� ڇ&�an;4��z7������w�e�M��6~=*�(mK����C.��j�n�ß�
OF�RD�xtxģq�|9�S޷/�S�ɘ�}�	IQ�}Õ��H�za�9K(ڌ{��I��dg��ޭ7�wy�&�Џ�B����	 ����nM|�m��&���
Z��k�x7�v�e<�
�~�YH!1a���))1�0�AR����d
o�)����<�
�P��
Rm���Fv�ݖ�n���L��<�������c���������$�8�[�+��N
~~�ŷtδ����C�H*�j�!/��[��ID�W�jU�
V��_qUJ�Nz����#�����U����7�*���'3�U
��'���83����C7���U��Ҙ}���Wc!eמ��~���5>��j�x��$���RCA���(j���Ɛj%یT���U9yl���zWΙu]�p�Hh����$k-
wn���������� 
��%oCRB��ߓ�ɿ��ɟ�	�
+H� +��d�Jʍ�
��8�
�0,�
rFR��k���c
+�@���}����g�I��NJ��e
��@E� ��+B���^$��s����z3��J���	�f�-��7WW�볏�2'�aœ���re�x�^.�X��4���
�cQ��;�� |o�R�xeI
+
�)�8���<)�b�asX�ă���9�;�+Jk۴��7N+
N
+
l
L�����N`��>�5�|@���ܮ�
icH7��P���:�·(�E��O�wW���5my$ֳ L�N~��j=����@�|��E�H
{Ne:�p�q��;����{���
+2N���7yI�µb
����o��9�?ۖ�wL@m<v,
����.J��Y�3���Za ��5�
�>&�Q�5�����!�E�a6�LD�at���:u喜l�%^Lq}�hwn���Uw�p���g�s۴n
{�\]������K@
�5�u�N]r�iPHJ�0��g���F�)��H��
&
�
* ԰��@bK[,a��ӻ���ɾ�z��J'�ґˢ4���F���
���<>�I�li��2�[Z�!aM9�o���Kǝ��
Ϗal���Ԝ�A$v��
Z�;XKVx��.h5����I�K�ȷ
+endstream
+endobj
+2827 0 obj <<
+/Type /Page
+/Contents 2828 0 R
+/Resources 2826 0 R
+/MediaBox [0 0 612 792]
+/Parent 2803 0 R
+>> endobj
+2829 0 obj <<
+/D [2827 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2826 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2832 0 obj <<
+/Length 1691      
+/Filter /FlateDecode
+>>
+stream
+x��Y[o�H~�W�����an�x*u%JLK(
Dj�V�c��*ֆ����Ϙ`p�(޾��x|n�w.c�uga�]����1גH�Եf���"n	*�ˈ5�[_�"���
?���Q�&Ȣ�Z�v�d�`�6�*i���\���ه�?k�� �[�� ��V�l|���9<�`aĤg���--�$�p����?���
�ޡ��$�W�q쏆�c
��2�̄s���vF
+%� VJz�Q������{�o11���|{
Ș�'��"R����V!������Z/�ҍl���\�X-B�t���6�.6��-�AH��o�f��7͚ �6M�֕�^� _�]�Z��I�}ü�a�. �I���Tv��U�P�[�r$�
�I�0�-��i�
+. at A \\ 	d|	\"OD.J0�
��	��>Dh�l{
+7a	2o2M���]5~Y��e�i-Q�+����;���+;
9��E�$�nY�Ur+��+�VcE� x��ڬ�*.Է�Q0�
ݿb�Qv���{{
�v�
�(a���vҙ|~�:����(���	��M��ٳQ)�c�~�w�*�C��v�xy��/Uco�S�eVQ��j��K�I�
�lU��
U��gW���zt��
�UPy�&3��e�Q���������������h9�
���i�Y�#���.q�D�{�4P1�9��ȶ�<�޸�
+�������Ai��L+
+�� <_m�/fO'wy4t̎��D�
��)C�|�S���ݺ��c2�
�*�c
���{xQ&sQ���L�����=�>��� ��]�EғeJU��P(D��	�*8�z{~ī*.��:���(Q��AppT֢j�
-����^5ݚ�7�$���"_��9��RA�W�jT1
��U�qm�4��D���?�q�W��LN2�H�8�pP��Q����(J�N9ujP\Pg_�/��y/.�ξu��+�{ňu��[������
�Z�(���d���\	֫E���������S-�:Pui1�f
�}�7��h�O�|�R�@��;����$BD�|���Ӫ�
mH�_Xv�Í�E�(}��I��H��RԢ������ag��
<��uf ���(��ǚ�m�a^.�v٭�(�N��,�'G�
��)����4���}nC
����U���n���kpd��.X�M–=T�q4l����~�X��S9͒;��NT��g�X�u3�{�6
$Z��3��m�3�ar�/�N�8���;'��P��<�@Jp�K/
�Վ���s��0$�ٷUӲ��
�
��P�ծ��\?�5=���z���r
/�4��;N�����2�`�Ļ/I�~
�0̙�
%�Bd	�{rn�8��X at 78���A��  L%/y�0�m&��g�]�Vׂ.��s�n����
�K.�}|���?��6
M6
p��bT��ka1��q���X
E��"X���2j/� .[���#�A��08�.��''o(�Lp�V����-�9\?"}�d����ǭ�����?��:��w8�����T���!�P���3
��l���%���E*���w}>{u�wz�a��ٷ��[�Fgi��Q��U�b.����O	8�5��+���+1=zgř�
�YRY<�sL\��x���	��
ڹ��v�y��㗼����	8�Le��ߪ;
+endstream
+endobj
+2831 0 obj <<
+/Type /Page
+/Contents 2832 0 R
+/Resources 2830 0 R
+/MediaBox [0 0 612 792]
+/Parent 2834 0 R
+>> endobj
+2833 0 obj <<
+/D [2831 0 R /XYZ 86.4 726.045 null]
+>> endobj
+682 0 obj <<
+/D [2831 0 R /XYZ 86.4 386.427 null]
+>> endobj
+2830 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F38 785 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2837 0 obj <<
+/Length 3796      
+/Filter /FlateDecode
+>>
+stream
+xڵ[ks�6��_���ݑg"/�dw�3J�n�:�;��;
Z�-n(�%�8��{. RM=��~h
 pq��^ |p?����99�N�A�b#���n����Qbp3
�6�\��$Wa0���������t�"5�:Ur����pB�O�F���
^,�:��Ί���UY�!��t�,����pr~s�� %| ��i3��O~�7L1�À3G�G;o>�*f�|p}��	�8I4��A ۣ�X0w�1L�`!��Nc=,�O��
d�p�Y=s��K���$w�.��2)��"�Ͼ�֘�#1�얿��n�X稔�s��vN�\L�$�YLft�̻^f5X�#3���2
�Iv*���:��<Ag4|rS���
י.��<u}��!O����B�9�s�_��,��v�p�8K��i���Ӽx N����D�4��-����|ii`���G�#��]��-��8
ä�cU1O]ע��`ۙL�eZU����
+&��7	<�_��2�'��GR���Rc�:��RzX��v����Z��]��S{8�y�z��S|���!))���U
|�ٯqn+�
c�bҰ(��z��SG
,��,�r|u�ᘬ�͏n4YL���K�1�-��+�)���%)��>�i���|ڀ���x}9����#a/�쯈=�Jk7V7�����<f\���b�1�f�J�L�p`�b���`ōu[���Q)�,a�D�?���������Q�	�꜑�C�F��F�RE;�����i#�̭uq�ל��WӬL'uQ>�~k�dv�b�
���jN1��k)Vl��:�@��
h�u孃�?���b�\��p�Vro{��#&�
p�􋤆��Hڥ���ˋ��~��WG,��(��l}߫����%+5����:G�9+�E�4
3?�Z���m�D�P�7�O�E��Y�;)˘�<��dPd��bQ����'H(v0B��@��C"�4�.�"�h.�{<N�Y��
�a�;V2�%9���\�+��N[>f����2��,s_�u:�
*�'$?�8Cg�e����1
�x���^�j��u{���	��WӤ�ӫ�
+��
++&I�t�[_K�/y6������S{ �(GhO������!B��j
+V�VJ[���*�����.�}��H���RB� *�]q���9I.�޺��~8�P^��p�Fc�V��&�">y�����/	A�o,0���
edb��f`<&�+�
+��d�|J]�w�t��
�}�n����oƗ�\}8���o�f 3g�E�?
�;� �\����������U�W>K
��p�G+�o��CR�Π��_�<$�O�*���H�駸*'Ċ��Z����K�R������H
��0������J���Hqi'�!6��עa���Qܹ

���� 9q����ts%�4�7O�2��w�>���W��*���;b̾+��[�n�.
�R��`��w�H��E� Y�9�T��6�E������I7�?��o����2��ؤJY�̗
���4��A
���lV��l�zV��$W�1�V �J��y�4�~tp�wL� Ih
h���P�鋔z]�n�eY��
���%C
.�k�
m(�+�"���V��h,�`{
T^b�,��`7-ľZ+fd��{�4��WPa+�n&��B��v2B�Ӫc0Bە�d���7�ߞ?�8���8��ҩa{c��s���w�U��&ކ-9�5�l1ɗӴ�V8�zktܢ�=��ш�DO�Y�A�C]hl�&d�V�WlE�I`�K���b��e_�$�e|��#	�
77�'�[�
��ȑ��=�푡KI�f�ݔt%X��0]�*Z��Z��	U( ~1�u?�a{j�i�P�f�>*„H̗�Ee�g~M_:
+}鈺��
���h׾h�"Hʴ0t��'�Ցb
I�
+Bf�y�Lj
�n%�]�N�����=�
G5L+�)��C.�1����f�/A�< P
+�R��3���8<���S����f� ����Dm�x}�]�f�,�Bxy���±
��}��;��`���A��1"xt��eDH�(jFe���K��O��&���� "G�]������o�_#7Z�~
x��
$t�`\ʣll&���n� �'zܤ�5Ӂ�t��h�u�T`��(nR�s��4p�JC����,-�!��BQa���SFG��<�U�G �]�4)໛
�)��E�o�FZHG��|z��C&�{d����,���F�Rp�> ��?ђkiX����©0�$�f���]Q�񩻖Z�E2�C6g�V�
�2� �L��:-
���'��{
���}�2���
4�t�U���pʫ�
y5լx�I�'�t������9�/>���X�sM����߹�=�,��/YR<�g+I��/5�e�S�6 ��@��K��MJ�qsU;��߾</�,+^�(Hq��r���*�w���+��
�M����>3��u���f �j ]h!.�� 4|�z�+���GzU����V�M6]�P��b�U 7��
�_9"�SDd�F� ������ˏ�Au�]��S�W��	Tn- r�xw��ƒ:�6q';�Y����`[�}d �|م�P����Rܘ=�B�a|��CJ��͍�%�|��֯zJjȌU�^x�o9�<cA�<+����c>��u+���x!_��=����r&���+��ި��;�
M�]Ƞ�R�`�J
EѰ��.�[E{������M��xCϴ�ۊ4��8�W��c��g� �Y�0b��!��=���
�
��&#lt1�R���9I�A�
V��S]gs���k�}@B��{��ۇ=J	�P���.e
�H	���
+^���Ѥ�Dc7�8������
c_zS����W罏�8'y,+�zkKki�
x�h�,|�o��
�#�ZE�zV�ɴ'�6#n���-D7C|���!]���YH@�r�!Ó��d"
�<3��!bA��\cn��b��D�����S�>���Z�6�u�=8R�h�I��쮊����٧A���� O4o}��#<*��5\ܤ)�H�Dݺ+<�1u�f.O�$�4��}���J@?]��wb�Z�󒔬J���F3�J|�S/���a�z[s�ՔM�&�q R��X��5�x�C5��ķ
Zj{ք*���%ac�b�{��*��8�'�h��w8`�
h�f�2�*��^�������e�6� ��������=��p*M^o�����q���`l�����
j���f��8��������
ٕF���<��g�.]��\Ozr<
+xৣi��!4b�!��S�n[����;d�!4V7����b��
+4�>��u�nt�q�����#�O*�,\m�!��I������E_A�B�>��u�7
�z���~6�?�:/)�mY/7_P�b �q �,����)��r�F�
]{��
+Ֆ�蕷9$M���%b
f�W/rɱB��R�y�åE+��-I^�ч��z�k	e+R�Y�8�r`�#���N;�ؚJ���-�
:���+��?���և�@_�9�q�`\w
Т6g��;� :�Z^+��׀���K����K�(�Fԓ{@�
m
c�����n8@h�2&�w��,
+�cl��2	?���K#�R�=�s���b�F���$�d��y�$�ѿ�xz(�â#�O, (�ϵI?���)
�$�� I�� i�l��V�lwij.
lO�˳��l<%B��IS���Qߓ�m�^׈�}A1X���򼉪e�tRWg3�̨�$���<[�I9�l�l4_�uv_f��<�gŴ/z"	T��Y��1.�ῠb'
+endstream
+endobj
+2836 0 obj <<
+/Type /Page
+/Contents 2837 0 R
+/Resources 2835 0 R
+/MediaBox [0 0 612 792]
+/Parent 2834 0 R
+>> endobj
+2838 0 obj <<
+/D [2836 0 R /XYZ 86.4 726.045 null]
+>> endobj
+686 0 obj <<
+/D [2836 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2839 0 obj <<
+/D [2836 0 R /XYZ 86.4 613.163 null]
+>> endobj
+2840 0 obj <<
+/D [2836 0 R /XYZ 86.4 415.436 null]
+>> endobj
+2841 0 obj <<
+/D [2836 0 R /XYZ 86.4 298.129 null]
+>> endobj
+2842 0 obj <<
+/D [2836 0 R /XYZ 86.4 156.732 null]
+>> endobj
+2843 0 obj <<
+/D [2836 0 R /XYZ 86.4 75.291 null]
+>> endobj
+2835 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F14 1050 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2846 0 obj <<
+/Length 3132      
+/Filter /FlateDecode
+>>
+stream
+xڭZIw�F��W��g����dYv��eG�3��� ���,�<�~��
�)y��h4����
+�gw3�������w2��,D0���ES�P�,�|v�ξx�L�2�ޛ6_�yq�O�K���/ۢ���;}L֛�|��lνz�2�'|9������룿�8��g�#�Y���r}��O�›_f>�q4{0��3%c&`��]
�z�Y�;�1g<
���-�<Y�H���hpVih
�s�I���
0
yYV�c��M���!o�iu?��m@�*Ý��g���꼴?�l�������J:���*s�DpO���/��{u��jȩ ��B�ӟ��ty��J�𘤗�>�Mɸ��6�G���r��Ӌ�7移j��	s�9Ք�s�B.�#/v/�>S�N�"�L+c�H��l��upP)���a<
˜)��p6ࡹI"zvqr���Y-��� �����۳�	
�,���

!���gS�2.���b�j�l²��s�M�Ώ����尐��~^�M�Z%
��R(�)�
�����X@���K����\1_�?��!
+W�b*�#�����<��c����R� �Z(��i;/�E�Ir��"v��cgթp��L�O��>D��x!�~K����qhkFׂ�`3�A�F��-dȂA5�\�a9	�-'���	<P9�&�?��”V6A%K�
W�W|�:�!���`��}���rեy"��D$���oZS)p�*
Ih��������ٺMV�G��$u���m��eXI"��.AN�|δ˄�nP�d4R(,��F�T��W�hX�U�$�H�a���i������O�vCC��b���!��ʑ�#F��J�ʑ�Zӱ�
+���j“"(A*�#DP d��gW����2�R=UQy$�_QY�jC�f��~����9�ؗ�э��lf��mY�����z��ʅ�;�0��C�
l'{�
�@2� �F��̳(ꑹG�|�*�� �U>��ޢ�����]#҉�Ј�œ�W��H�96��ˊ
2ȔjRq&��G�ś�s�]5k
�]���9ٲ,��su�V�
�/<�Y��/
�y`O�{��v]�!��|5�<C和!��D1�%*
�y��h_.�G��i��O:Ye�Y�ˬ{�)(
嵘�H��
������t��,�#�ʱRΝ��Y��B�e�ej(�D�S)�����@H��9�XV�P���8�ϱ������P�*���4G/ 
풍��ϴr��:1Ȃ(a	
+��
��4`H���m����E�}�DR���+��#=����a�G�Կ�9Q�G����c���\f�$?�^V��ٸ
���4��V������Wc@
+�%���һ���v�Y��T<a��|��u�Ø
D�F�QP'H�#�Tm1� ����b	
2��.D*�c��c���R���K���6�S!>ʖm��¨)}�$�	�Q2$W���
+I�
+�O^l]j�Y�v4��XM`��NJH�*[6e�
-�-z�QN P!t5{9�
��/�'���0����� ��!JX(h��bpAE�?�QVć�r�*��)Rڽ�ț�D
+&z������fl�1�
1�i�
1h$�\�
�	�2�Ei\�����CS`gP	�Ѹ$
��i���/�H�!#�E�UN�[
���M����:��"vp�����.���
a�x<�8@�C��ܠ!t���a
�nW����^�6����m1jB
�~��[��M&{�c�
�+��~��
;H�t��2�g�A��;Ā���[�M�R��s��
�fȌq%�dg&��u�,�̏����1��x}��p�R�ƥbA�Q��5Фʐn�W��!�2uV�Y��(5]���_�Xt6�u��Mjp��6�ya_$��h {�f��ِ4)��j�ˮ�
�f �鼲�[6fJ��d�d͒u�ٍJt�"(D1T,D��,2ﺿf�;n7^����m	8�W�jAW-��h�=;�A�	D��:H;u8qH��Mn�$���(�V
7�0���;/�r.��p`0!{��v�S� [
8dI[.T𡥩9��
��A=����F��O;{`����i��Z(�4`�,�a 
&A�{�B�V<�^��8�%:�c�7��uK�RH�x8v׫�M����,lq�H4悭��6�)����#=���@��쭳�'�݇�o��"�~к
8��A�{����c [...]
!�?�v '&r�9	Rg�?�Fu�Q

+V�!�yO�b1�DNr��N?�3��5��
��\�m[&�O�+7M7U�(��eg�rB!c�~�
a���4��դ4�������6�-�^O�����;�̏�
+6=�q�	�~6�˨�K����‡0¹e�X�W����>3%�+t�T��9���
f�X���4@��
��.��|$ŝ�����&>E?H��B��WM��(
O�Ɵ>�=ȸx���x
+s��Jh�����Ch�1�O����~?���@
�(O��`XX

�+�g���:Wi�`�rc�i��o��yEh�I{gO����lm��p�ڊV=�o�}u�}\�~����C+�v5p+��H�+ֵ�<�υ�)�s
�a�/r_(�Z�����7����2���Ma
+��_�Z��N����0%��X��/& �$UPb�(
+�Z%
�Z%
�p.�?�z@�	���=�F
)~���ɖ�p�
g� ��'�
��4S��\x�
���R�
�H�pO�W���JZvՠ'z0p"�Y��) g���۲���M
+�#��%x7��ݴ���]�Y���	_��u%t��Ƌ|_
�\;���(y��-�jo���>�n
{�/WS�#T��$M�:1
+�x��W$�z<������AȮ�)l��g�Ӳ�!�p�	�
+�
��DT׏㿛����zR�V�d�8=8C�5L�<
�q:��ߺNŎ��Si�<f�	
�4�������%Z��
C�‘�����
�{� L�b1~�~�����H_4P�
E
Cш!z�9]Ǟ)X�o�9{hڮ
�|���7��9Cb�^��
�H�bi_�/�xn �{� 
��/$����W
+endstream
+endobj
+2845 0 obj <<
+/Type /Page
+/Contents 2846 0 R
+/Resources 2844 0 R
+/MediaBox [0 0 612 792]
+/Parent 2834 0 R
+>> endobj
+2847 0 obj <<
+/D [2845 0 R /XYZ 86.4 726.045 null]
+>> endobj
+690 0 obj <<
+/D [2845 0 R /XYZ 86.4 646.538 null]
+>> endobj
+694 0 obj <<
+/D [2845 0 R /XYZ 86.4 428.312 null]
+>> endobj
+2848 0 obj <<
+/D [2845 0 R /XYZ 86.4 369.231 null]
+>> endobj
+2849 0 obj <<
+/D [2845 0 R /XYZ 86.4 345.243 null]
+>> endobj
+2850 0 obj <<
+/D [2845 0 R /XYZ 86.4 322.362 null]
+>> endobj
+2851 0 obj <<
+/D [2845 0 R /XYZ 86.4 298.928 null]
+>> endobj
+2852 0 obj <<
+/D [2845 0 R /XYZ 86.4 272.07 null]
+>> endobj
+2853 0 obj <<
+/D [2845 0 R /XYZ 86.4 254.375 null]
+>> endobj
+2854 0 obj <<
+/D [2845 0 R /XYZ 86.4 236.681 null]
+>> endobj
+2855 0 obj <<
+/D [2845 0 R /XYZ 86.4 218.986 null]
+>> endobj
+2856 0 obj <<
+/D [2845 0 R /XYZ 86.4 201.291 null]
+>> endobj
+2857 0 obj <<
+/D [2845 0 R /XYZ 86.4 180.727 null]
+>> endobj
+2858 0 obj <<
+/D [2845 0 R /XYZ 86.4 156.913 null]
+>> endobj
+2859 0 obj <<
+/D [2845 0 R /XYZ 86.4 136.728 null]
+>> endobj
+2844 0 obj <<
+/Font << /F36 740 0 R /F16 729 0 R /F8 741 0 R /F48 982 0 R /F38 785 0 R /F49 983 0 R >>
+/XObject << /Im2 1061 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2864 0 obj <<
+/Length 1707      
+/Filter /FlateDecode
+>>
+stream
+xڭX�n�F}�W� Xk����M��i��H�@�+�E�$�������-:6�<i/ܝ�33gfx[/�^�~]�.�y�%$�X�-7����b���So�y�|���<�ۏ�~��zs;_p���s��t���Z���#�[e7oʦM�"m��+�_W0��c�柗�g/��f�
�$�D��[�g�>^���^@x"��滽'xBF�w;�s�,�
�����D	%4��)W�P��N=�A%V�:�s��iZ�u������>ݩ4S�
�
PQ�l���'(ނQ"���c��[
��ow .�o�/s&}eO�S'İ0�Ŝn�e��ńJ���1/2+��oZ�����H�^����p�~/����
H
�E���e��>���(�0�k��!��xh���)�
�a��G�^�fhs�HN�0d��85������&� Y���^��8�����v������*�@��r�r]
3��:��H���d�\��N��y��+�ѱ����^��D���ph)IB [...]
5HV� "���Aq?��C�s��<��[w���ii�VfK�U����ܚ���J/��/#�m���5,����[��d����ܔ��BM@"1}��x{���s�KʘAp����&>䲧MC�c�H�&�J�yw��z�fB��$�)RE��c��?��������{.�I�h��vW
�;=��%,���	>�k�䙲G
�m آ�1���H����	��&bG��|*b@؇��&�����4�F��j`*Ltޛ�7��j\U�yUo�2�W�
+��E(���l�+�:c��c�pD
����O�1_��?q�e�q���E&�㧞��zZ���S�a�+�z��{=�A�w�j�7�׆��n�6�V店o��kt27���D��.c>��y��wW��*�[

+��9�s����<g���.q�ٱ�֪�q�'����pԨ����r���{sk����	��:�>�HSM�+I
�5�V>�����*|���j��
pb�E���&�<>բ$���ug`��������dL�
ۿ�e��*4�pD?p�
]�	�
��e�?K�Z�����_���*��|O4@
�1��������nqJ�Dˑ��nsBc�C�}w)&*�����(
�A _�@��^��cc��֡��u���R�`�e��%d>X4o�{;��7�Rp;��	۹�F�g�]M��f��tIJ�խ
�x��

�7u�w�E�
0��2�>�
�
+���?���q3�Bi�t�ު����E���[4��SO�
',����Dg�={�{�Z�\4�Qy�1(MUؤ�mM
i�\3	����X�P�l�i��
����he��t}We�\�6 f�
�2� ���	
�Y�xj&�t� �+���>\~�Ri&��x��d*�ǖ�w�V�'X
!Gϴ-SD� �G):�s�t
|u�I}�o%���!`JV
�V�j]�X����DںBJP����hҍr��>β�Λ�T��{h
+�Ku,�tx]�7e�6�œ��CO E���Pn9ߌ
���+����އ�Z�<�B4�NԊP�O�S�14�B���~ğ"
+�B�?��'�� �>�l-�]!B��j�t���(, at r�jMy1�����p��YU @C�j2�O@���D
+endstream
+endobj
+2863 0 obj <<
+/Type /Page
+/Contents 2864 0 R
+/Resources 2862 0 R
+/MediaBox [0 0 612 792]
+/Parent 2834 0 R
+/Annots [ 2860 0 R 2861 0 R ]
+>> endobj
+2860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.922 578.75 484.135 589.598]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.1) >>
+>> endobj
+2861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.616 578.75 523.829 589.598]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.2) >>
+>> endobj
+2865 0 obj <<
+/D [2863 0 R /XYZ 86.4 726.045 null]
+>> endobj
+698 0 obj <<
+/D [2863 0 R /XYZ 86.4 701.138 null]
+>> endobj
+2862 0 obj <<
+/Font << /F36 740 0 R /F38 785 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2868 0 obj <<
+/Length 3256      
+/Filter /FlateDecode
+>>
+stream
+xڭ]Ms���W�h
��#��*�d+�T|�݃l�c�ȶV�l��%@M� 	6.#k�|x�{��������oW����I�U`�J��^y����������/�f��Vyu�����z���כ��_m_�����p��~��^_o�������3]��Y?m�ǟ�Bo�M�Kk�%77���|����߯�+���]=�]��_=�����L��Ow��J��$��]���_W�Ա�Ϯ�
��d�����.�]����x�n��R�s�H��'��H��������p�7�
"���P�4TJ��E��%Fb�όp+k�ƇE��+��8=�W
�9Atc��������d���z��SɔZ�,
W<H����3�1�
Ѣi��C������F�TL�%�

2���R�	�FԎ3Z�j��rJ1��q��^� ��Id
1�4���t�SP�2#}w��rȮ^b� du�`������ͭ��ϡ�
8�D���el�������H�+��`��Pᘵ��B����(L
+&��7ܧ��
x[��JH�$!�T�iA� �%��(K�aq�ZB�/f�b�qB���<~~�c��,�B�Y���Wje�4>9�X R��@$��c�f�cJW-�6N`��p�O�{�KDJ�w��$sa:��n���}�U=���`���� �]U�Qv���
_��}�7�f�y?l:_i�|E操��<�Sب�j&OYxZԊ�)D�T5F�SG�[
+n��Ϭs-�	����Re
	��44�yO�
��a5FYC
KL� .�}�5�
����f��|=.�U��*>�y����ݷ�ѥ
E�d.mXP� A����(�K�IJ�[p�M&�{�_�
:c]��!�����|�}�YM���Y>8Z�"@dgUc���`yi���>g��-�`wrV4���V�L)�7(�穐E��9Z��H�زI��HäH��?��ρ�3
�u@�Z��b*
��{�Y��z���
6{�X�^�ݡ�i��e�M����޾>��<�Uv�hOM<����Ȩ�p�������x�h���
��6
Ct���Ւi٠WZG ����p�n�5�`��wМZ�6
�ZR�
�<G�b�,�`h@"�L�>v�
�>��8����(��J����>�c�ME�) PR򄎅 a��	��z����6�7����z�_o��r�X�������.4�' nz^��
���'6�|���e
K� G�E��V�e
r�r���z
��H��WvЗBXR�бgI,j��C� 3�>O�9�Y��8Mh�?)33M��d_�$
+���qV��S�s�"Qh��A�L�jQ�A��5��ۼ���)bYgnvN��7�͏���"f
��їM��ӑ��,a��X����૲�_)K���\��X���w���y�h��
+ƍ Ѩ�(O{|�\�*�$�t�$��
+@�ʵ��v�X� Ț���7��/�q���F2���|W�qh�/pûϗ=��P��z<8p�s2��<p��2����=����4���"0��*�a��=T�;�����`��rE������ӹBA�ԒD��<=���aI�����X�+byT�����KM�-����t���)�$
+�XH�ˏ0����iS��Z
t$nyN��7�}����a�,�i�/�_t����P���Up���8挭
����P���|џ� ]������c���P���z����RZ]��s�Sq�yw!��ͭ�F�_5`A�@
;+i��b�	1�׷�xa� x�
�L��0P ���e͹fܚ�Ha��d
1$�<���w�؜��j���F&�����;L�d9?%�@"Y�
�h9��&�B�E�C�a2�<���-��Z��6u4�"q2Z��YRl�@d�Uc���9,h�-b(�"�����ۨ���Lz�b��Dֳ����L���č3�|��VK!�
2�
7�Ծo����or���Z� @d�Uc�]f`q�5�gqSF7����ǩ����x�L>G�%�kRWs�8-� ���eu5,}��
���b6���;�CX�hE��H���9^���l�37~>k�l�l�j���TdE
%�a�ja6��|��V�;v���������e�����$ʦ#ȝL'&��'MG�Ȧ��(�N�}�� ø&��O1�}�TR���4Ƒ�e���
=wbX6
And�x$���8z�d@qϸ��(��.lz���kz�F@���<�M���wH�l|��7m�`J^��Y=B��JE���0�!<E�
�h3,�K�U6���9\H~wi�V[5u�P��L;�5&-�i2�yjM��T��"z����
"�^�Q��k&��%�@쁡��u(J�b���Fk`>�����F�����ͫ�SO����h� �mW�Q���LX�� D���u�N��+��œ����c�sdr�s��T��"s2��1�G��f��(�
>%'�8@ѼI��|�j픱L��;--| ���eE5�uu�*���&��9Wܕ�r�޼B��#�7Qu�(���$��I�"����7
֠�~
T
�a>uuw��&}%gΐ�R��o5FY�x�K��	��[���+�S
���r8鳛��S�N�㞹@��S ��1ʆ�ʓ
+��$�`>��.
7�k���*lG�m��8�O��d>,����d�z����/I�v<V
�D;�U�њ� F旍��7�O�
���
?��:�/ ���������
�
*����Q�o�t�+��g���
ҵ��
���J0o���|�T�y|zo�y�^o�/�3r �^�A/JO�3nr3y�F5DyJ8�Ē�
8乁8\�yw�o�3P�M]7�CW>��)ک|+OB�iO�PDO�������!@dݫ1ʺ[̈́5��Z?h��E���K�\���
�ɑ�::r�}�odz�o�޼=���v�]S��|
+D�]5F�v��[Au]|�v6?��9�XxD_
������=���l
+������l�j���4g��Au�h�$�a>�¬%���e�azf���oq|ioP �ߪ1�~�����79����
�0SF6�+$s�T�@d}�1��
+X�jr<������9W�y��2�
N��&*����8g�ӊ|�l�j�����5v�� ��&���x�g��������fU�)�����V!ٮ��p|��f: ��E��l���چ�#�K���=A�לe��2!y���5�^�8 ��E|�l�
�V���%������ h}���{���?���h�
+endstream
+endobj
+2867 0 obj <<
+/Type /Page
+/Contents 2868 0 R
+/Resources 2866 0 R
+/MediaBox [0 0 612 792]
+/Parent 2834 0 R
+>> endobj
+2869 0 obj <<
+/D [2867 0 R /XYZ 86.4 726.045 null]
+>> endobj
+964 0 obj <<
+/D [2867 0 R /XYZ 255.116 672.857 null]
+>> endobj
+2866 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2872 0 obj <<
+/Length 1940      
+/Filter /FlateDecode
+>>
+stream
+xڭ�Ms�6���<J� ���ӦM&�i'�)Ɂ��D�Q${����
�	��dY�]�>\K�7_��1��jv�L�7�4W��3L5Vzf at 4W���\r���
������޽��qq�/@��Ņ��t��/���_W�?���?��M���q�}���~�9�Y-w�ŗ���߯f?g=��5s�47w�O_x�Ŀ�o8�����I��i>����+9�y�2�\�p�	��@��]-���z�9
0��/�c�oE�
+es����u���&�F
>�۬�w�n�����e�AͿ-�|�E�]�O���\�M��k~���n���q�X��^�(�l4�8q.x�$mb�D0-�9
.���I��^���̡�=D���r!;Z^�]X�$����X1)t����%��1a���0�M�4��rbܣQ�3 g�1.�w>��mo�8�wˎ�*���0�B_B�-SR%C�P�h=�%(�G�\Bw;�U
0�,�����;�w�+q��i+i�Tk�o ��H�c�\���I���
+t'⭐:�8^vH~[\8�6�>�Z.q
f�@
+S�}%O���nЉ<Q�D>���Ic�!�@������Ra��%@/�Y�8���h�#��9�8. at zv�����CH+����깱i��M�X�~$$�2F�@"hD��5� 9��r� �h�� �v��������P�ً�Q��5��D�~ �hf9�4"A�y�
.�}q)���OR�R��m�{BD�ӌ�FD(u����,A���40��5��	����K\����5LR�R���-��|��<�
7y�2I�BȤ�zb- h�LVk�3�;np�4�8Z�IjAjw�]o�])0ܗ�����z�;�%�!�S�b@ЈUk�\$��!
�	L�Pjw��>������� $�/��/�?GP�`P�s��A#�T��GI�:�W#
m���������v�:�BJ��gh�ƎA
r�v��]���ڍ�|�񕆇�-=���	LG�R�E��n7A��$��~���I�1�duT��
+ �f
t����b�F�.��h�M�D��D���C��ae�q��
5�9�
+`H�
�sy��HC��� nۍ�-{(1���|:�$w'�
@�滘�x�i� \4xѷ���S��"�ȎD�RGʚz$L��7��
�hD��5�0Y`RC9L8^i9L����SN�"��~D�R?�{$E�2+�%��)���SdÇs9E8^�IJRj����h�=�ȎD�RGF�{$EJ3|~�("hD��5�)\�*YN��j�Z�Z�k��r��xlj��sY���%����\�x�&��������
+ُX�~���H��;�5�A#bT���H�*JBw�
+���O�|
+��D�&���f��GB!�ĻH�hz�D��V"���S��7�L�Rj���G�~�@�g
+�}�V��.������~�c�o���`&�[���tD.5]���f���H�@���|�a�1g��
+GWu��~�Xa�2n���̹���
�#�G[�ҍ�,
w�Z#{t�H�ל+���p?�8���)���k��v ��0n�A	
i�&=����4֒$%5�aG_���AЈy�����#
��e(�cb���
%(�7��Aٷ�ܖ�ǟ*Ɖ�L�)u��5I"@eF_I�CEЈPUk�2�I���9�t�8B�Z��I�
��"��J}kQ�H4)�,�4E#�T���I^Y�p�擔���s�RzQ��#;q��|��DB�	,�ij��HS�F�&��[e�h�9ZMR�R�u�JR.B>��#�L�h�|Vk��xY�O���$�!�
[�`|yq ��Cߗ��%	��� �ǔ)�j�<N��PY
�#Y`��)�~Һ�V�b��
E��
��/IH���\�N)R4"V�y�0��UV)>��ťX���]�
��(Ɗ�Q�*�h��
+V"���:8��7��™Ǎ
+endstream
+endobj
+2871 0 obj <<
+/Type /Page
+/Contents 2872 0 R
+/Resources 2870 0 R
+/MediaBox [0 0 612 792]
+/Parent 2834 0 R
+>> endobj
+2873 0 obj <<
+/D [2871 0 R /XYZ 86.4 726.045 null]
+>> endobj
+965 0 obj <<
+/D [2871 0 R /XYZ 238.927 547.3 null]
+>> endobj
+2870 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2876 0 obj <<
+/Length 1658      
+/Filter /FlateDecode
+>>
+stream
+xڽY�n�8}�W��j�x�
��I�H�l�bQ��B��
Kr%9i��C�r}����p9s83
����˞�>��{]��#>�po~�1O`�˅7_x����z0���҅�#���_�ە
�@b����,D�v��| �F3��,K�2J���®�����c��Ze�C&8|�Wv��EiG�je:]pSO�
;�6庞�
<��jjS('��@������$�N��V�FB� +��(oJ���.6+U�3�5G����#��R�SJ�O�|0#f6��djn��8Z٩�7ߨ�~��R
���!�K;�PE��u���Nd�G��R�.�֝�!�q.���v	�8 ���#�a|���x���à���e�
+�������-�?`D��{������Y�KQ,v�BG�ɘD
K�=�ҏ
��<E
�Ub֫4��a�չ�n
7;�uF����[g�4	�Rz
�D���'�c@�H���d �
&E
w���A�7wף��{�1�iX�˸
��g;�6��U�����)r�+��U����)G���q�帶��!�Q8��
y�0 �8��0�I��Z7�q(	�q�P
+`!���Ƿ
��}�R�����}Yϫ(6b.��8VEq�q��(պ#W�0D,�]�¨"���lr��j>��o>��3U'U�\A R�ƅ�8�s�Yn�q��OF*�
I
��ԏ�t��H%�]��RD,�	i�*ʶ�]^����/�iK�2Z.U^_�7�G�h�|��>�w�$P�e��x:oe��Eg�ʽe^�]i��4
+Kcefh��&+��2�z�WU��D.�����"c�(�p �� �
�)����!��Ke�B�[�*��ͪRcq
v@�F'�}���f�	 
�k�
5
���������ݿ����@B��0�-.���
e�B�ir!L�&���\�iC G�O� *[}n
ȡL��́D"!�q �b�Ug��0�x!!�`(*>�<�m e�ca'�P�r
�N���1�|$��,��H9^�
yŖ�?��PP��%�RQ,���1��i��L�IT��a6�+���
�w6�,�-Z���9����_�gm��.|�� !TV�Us$	��b�*��$m��@͐t	����#63C�
+��8����FH�l��]�K>=M�F
�ԋN<�ԑ2�o{e�S�*(��F�Wf��?��
�}l�?���N5
#��'p�|ւ�
�A���~�]O�����BY�|Py�Ke�������S3[UI���
B4̰��s�)���7W��7ד�mrxz���u�m��
�̕�Gm��i��;�y��e��|o��^��Hµ!ԇ��l
��k�n�^��5�~�^^u ��wq|�(u���n|��)T&���A_B���S�d8�C�j*��
+��9

hY��ƣ:]�Ly��8d�K���**
���b���~{p4�7r]˪!k��Jݗ�o�����bb�|G�PI�
$ޘ_��Ǚ�T1PU!_64+Bj��'c\�,�k�]�Q2��&a>$zQ�4���Zl�W4�ήF����ƠÚ2��H�+ [ML!Y�J�Ax�py2�ū�(�7�m��ES�����H����KB	֭l���޶*[��M���E/��_
����!
IJ�o�?���; M
+endstream
+endobj
+2875 0 obj <<
+/Type /Page
+/Contents 2876 0 R
+/Resources 2874 0 R
+/MediaBox [0 0 612 792]
+/Parent 2878 0 R
+>> endobj
+2877 0 obj <<
+/D [2875 0 R /XYZ 86.4 726.045 null]
+>> endobj
+702 0 obj <<
+/D [2875 0 R /XYZ 86.4 701.138 null]
+>> endobj
+706 0 obj <<
+/D [2875 0 R /XYZ 86.4 485.931 null]
+>> endobj
+710 0 obj <<
+/D [2875 0 R /XYZ 86.4 150.87 null]
+>> endobj
+2874 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F36 740 0 R /F48 982 0 R /F10 1095 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2881 0 obj <<
+/Length 3003      
+/Filter /FlateDecode
+>>
+stream
+x��[]w�6}������P� ��N�6�[KNN��#�6O%�%���� 	�T���Hĕp�
f�Q4y�D��Ͼ\�}�ˉ&Z29Y<LI�D1M$���j�ӔE��/�o'<VDF	��4_u���b~>�	�^n��N�sN�u��Ϯg��Q�
M�5&������_��
+�|;����c�o3\W���쇳��-E������D�'|��sq�K��H-��Z�cМP��Ї��R�p�a��//��s���י	i7U���ƌM��2����&���î8��%<�����F>-�zWČ�}���B�%:����� �;�HC5������X�T������wW������ւP��tӁ�c�0s�v/�����p$!`�[�WHX��V�3����9K���u��K�}ʋGl
+�2�z��d�-�a��tZ���gۙMM�m^�� �`w�	fَOa[j�aT.��Pf�ooCds��K3��:F�&"�"�WȎ	�|�l4�m�^?lw�ʘ���Ei�m��m)��Ժ�3��K��Kᧆ�3�DG֌�]��\�|=ඨ��oi=4�0i,����
�vW��L߮��]�Kצ�Bǘ��5u�QL�$/����'�Y��o��0H��G��U���v �%��<(��iꃾ���f 5f��c�U⃾����P
+J�b'����
��!�Yi�k�XM��Ъ�)�v���U�="r�4(u������� �[^�Q�ض���+�Vlm[�����������a�Y����<� a���$� �N�}��
 ��������X_\+Oxo�������
+\P��ɴ����P��ͫl����-��'s�/��'B&~ ��\pxnM������m�"�7��b�gA$�C��Ѐ^�ݍK.����������Q�i
θ���,�	��gU���4_�ʬ2w�5:
�Mٰ�o�����66l��7�jW61_3X:D�T���Ea9k�Ʊ�(���B>��E���v��6������G�ni��
tij���BIH��*��`(F-���7o����6��P�5�%��NB�J�^��8�Y��K����b"1�j��*���^���F+(���cXA�'�f�"С�8��&Ԃo����?�IhGa�C�������z1�����)�;"'Hj�6>��ފs�΋,��t�ӿ*��U��:��?�e����#ED�����1W$�����P��9$yC	�C� ��
+�|�t=�aV�ℎ鱢"dť

9R-Y�{6�0ui9����//�gj?wE�-�=o��_��7��"+C�
�7
�.
%D����WG�
�����Įڏ[�k#B�h�Lj�gkx�x��ܶ����5�[y�&����9s;3���.���<��b���*㬉�gϥ! 7[y
��|��4�]�fsg���ܶ��'m�Ta�<�
	I-
æ4�`����@
�>萄���8f
-
�[�)���P{RtP@��w=��/3����j�ɽ������5�� �N�Y�3����sD�������O3ɩ8
n��
ɛ�;�9�P^�"
F�`Q��ū�����% �][<�E��u\�~<W�
�O��I	1d�".������gj�5�E��C��G�
�	�Kxc���8J9'i�|qw�� ���>�I�Q?*����70�v�=�-�Lm�U�Ə�
�ڇ|�F�7w�Y\�nd�)jͳ�	D3�'�o���]��Ȝ����GR��6�`�ך8!������Ez��MJ"(����DF��b�u���^�u9�鷗A��֟L�fq�>�Vd_b�[�w*��0��2]�	�'
&1��8�ך�mN5����h��(�������
��p���C��]�!۰�
�Zp$g�����P�4�S��f�(��XH	A`�������ݏ��,�������3�&���1��]���}��Kƶ^.-�-
a�g�}<��~�Dߒ��S�2ͩ�o�7"��m�U
߈I�t��l)x
�{'���zy=pN2s]��Ps�5�!��uF�d.H�
+E�}s�f<�	j3
�����>2�^Y?R<�C��Y��
�*=�L3�@��g0�䎤�36�f��4���;-w��C~�q��@�����
�~u;G��⑂�&�����P�U�
�V P��>����-�^�B�l�-?ٔb��G�i;�/_}hDDƖa(�jW��bF�; ��o������'܅s��]�6\w)��E�ϻ���ۼ<_���t
��qQ
+r��C1W�q,�i� ����׷������T
���ӹ*�
qp�m��7��]�}�$�&�2�� �wQ�ݧ�pL!�b�_^u]��@��������
+�D��`��Ro�C1m��ˋ��m6��Y���	����d�ͨ?���ܹ*�������[#�,|j�>�w����Ev���O��$S�CqW1s�� ���>�w��&>�b:jſ$b$����'��*+s`8�²�
�׵^��f�b�|��D��D&�H�_B�d$N�X
œ��, �#�z�����)D8�TQ"ۘr��I����-�[X@�U���N�&�+`���
��B`���824��a�����8�@
�}����Dz'�"qG`��
�E"�d@�G�^��]Q���'���Փ��������>�q3� �'���?�U�D���"�
��
+S��C��M��.��c�po�w<��.c�a��ʴ��r�j��[O��J�`�������%�p��|��,��7�PGr9Jho��~�4o�%��p���9Rn���.(�=��m3~��,��kL���o�(�0YR������5�C�&�
Y�@�� ��d�O:�kO(<����pAT<y���C�%�{�,/�(8�O����^B�;�!O<pµ#PJ	vB�FP
x�#�4��!@m%�:�N�Ew\���%��C:��|�0�/�SAb���
��*7�.u��Q�Ϩ�h�>�>������v
+endstream
+endobj
+2880 0 obj <<
+/Type /Page
+/Contents 2881 0 R
+/Resources 2879 0 R
+/MediaBox [0 0 612 792]
+/Parent 2878 0 R
+>> endobj
+2882 0 obj <<
+/D [2880 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2879 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2885 0 obj <<
+/Length 2614      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�6��W�HW��
��zv�$����l�D��+S3����o� ��@Y���Ô���读�np���O�?���}w��$E��r2�h��D�IF&�������)�,��>g4���3�lv�ϻ���ؔ�6+��m}>�ZR�P���6�pv3?�rF O��^ ��d�r��ox��;&�TO�6�^&�����z2;��
�����1�&~�y޻�C\�5��l�2=�a��>�$� �� ��� $(J�@R��$����̀~w;�9��<B3h����PE�Y^�Ŷx�9��1�|=�:ɫܜ���l��,�I�-�u��#�N��<Ք0�p at P*�)˯	„GY~�����b<����!�gT&��d�z{q���)C"�Y�8
�W��\�dW���s�1��Z,�̒�����
[�u��ek;�yW.�ŦtgY��\�v<8!<�
,�3��O�+�|aA�᳧unM���e^�m,X��:nc��,���D)v��p�S��4"�EeQ0� t�X�B �*�R [...]
m�=���c�
��,u�����#�z��A��%�H�^\c}�(r�4�V���9�`^���z�t�D`a���h0�
'�T�z;�G�􉾏�����i�^
f���en\H_zsX;|�e�*͝A���w�M��):�]D��Q��L�k���� X£�r���Cذ���n�3PB�^�V&d�p��w�q#��ޖfxgK{^�V���@��ʥ50�g�g�|h.8�ay`3woW��y���`q��P
q������[��a6?B���4}�1�J�T_1`Aj�lP^�8g
W�_���z��Q'W�3OT8.ܵ��į�)�j��TFq�IaU�b�"[���2�r
+��!�D�5L�Ru�d��� t���0���J@��5Hjp��H�����L8Rs&!�:/���*���
���}J��2C��6�Z]�%I�@T�m%�I��VVb{A���A���Tv3f�9�Hۇk��{�>��I�;E9}S)Ƚ��3�����Y�›?[�gS�
��Z����K��µ�J4Y����[@(e)}�[��V�T�2=!>@��
�k5 =�fc`:5;�����-R��<�`
���0쩰> W�7��f��>e
s�_[V���_U_���9h4���d�,/�u���OF����}���4�
E�r�&��m��ޜ}��_��6'
��]f�.�
O~&�!ہ���kW>��D���*-6�z�{��G
G	TOZ��pDA�RU���o�
5\Lo�>���?�6�O���؝�i�hf�[Gk���J�Ke
[�����

Dy
��0?�������Ț�
����e^U�v�ۋQ&.ڃ��t/(���
������&zd.o=XQ
�Fׅ���빐Mј�_zӮ`�ba���^m���&l�7��:qK�=�v c�b�	bq�vf*3�I�;�p��,���%J5
�
+(
|��$�
���*���NkĒ�1ױ� =���N
+Z�5v�������6���<��1M��
�"���������c�Gח�&��`�ĴU��@����g�A	 �f�R�#
p�Tڶ�ZW���ǃK��SS,�z��ܥe�͚�2%B!���#��M�e��>�w�\b6���h�HV�J��k��,�UK�&��
+$\ ��0��ʑ�����Ʒ6c����*d�y��)I���E�_�͎Ц��b@����oh�;�\hYg����9���
��`��F�����H>(��P��8X���ʎ�j�F�I�b��ހ�j��KFp ${t���Pܰ����mo��b�;{������#F��2�^�n����y�
i0��F�
!�av(я���i����\�釛Ƴy
H��{���Û
+���
{��p9A\�	�Xf��@SS���`h����
ȸC�@�ѽBV}ڽ
��|
	�%�T�

^ ���Fe�W
CQA�}�R�y
��w�G�ej1
UPDa��#�.�\t�\���O�a<��pʘ>��~��ߊ� �IߣŽF��������J�֞]���G�>��O��7c{Ӽ���2o�q��4 5ڂ�&f����~�g� �~���b����0dWU>*
>
i�6ٔ���֨S
+z�P�W�B}r(�}l���$�p.Ҡ�{��)�xq
J�{io���(��Ttt���)ߩ�p���/�����ڮ�'����.�{j�B���z��S\`Q��L�ӎ.�n�B{�����,U�{5 ~����gh�
$f�C��q·l�y*�=��_��?O��?���2�%�:������DcE ����f*�
S�2g��k��.��m����i"L at I��'l?�
o���/b`��/���(
e�J�/v��i&%J!����Le��mU�e�3 ��"
+�P�7+ذ���Zv����P��;��3��'��o�z��	��l� �n�����o�v�+ٯR1�$w;`���v��G��w�����'���
+endstream
+endobj
+2884 0 obj <<
+/Type /Page
+/Contents 2885 0 R
+/Resources 2883 0 R
+/MediaBox [0 0 612 792]
+/Parent 2878 0 R
+>> endobj
+2886 0 obj <<
+/D [2884 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2883 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2889 0 obj <<
+/Length 2614      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�8��+���Fh�.݊��q
�Φ��D۬�(7%%���s)��cRճ
+ŀ8sA��K���~}8���^�Ie�ṧ%�=E$�=�z��)����{L($��������ǃ!Ӭ?Z��$0�_��𳋇�?���=�gHsٛ.�~�
�f�?�=�X�{��E��Q����g_ΰ{��y0F	K��Ǯ���*��R=�1�D���o���N(GL��%�`"L�%T!AEw�8]�-�/���#���ƃ!<N���t��Vϛ9�<���̀���:[��"]o�
��5��K��
���D�#�-5�2ʲa&.
�>]|
+`r�10a���M��Ǜ��}�B�>����4��� ;�g���"(�KK
a4{a�\�"]�� �]äx�,�|@u]�⻹��
�
)����
��p��1Aj1����)
ǥ`*��Kݴ�
6I�(��"
+��@ma�Ao�Ew�E�v
(��W��2�����<��IaL�������v
+H}w�Lo/�庼x
͘��,��G��<��>8�_ACS"���džNΑ�cf��bW��-���>��!o�
:#벱��Hk^��������̘T@�KY���t�x����yZ����_˫���5��
�/G���z��[:
��?�L"1����e	^���m����[:J.�
+O����e�x��7�6�������2qbȁX�Gs����lӓ��yy��;�q���r�!y,���=���q�_=0�
�ؤ+g��I6O[6�S��:q�`ȣl>L%�ý>
���~�렷��ݱ@�b���f_O�˧l���RGq�፷�.��5������G��
��b�6�?/
����B6��
�u�
�u��Q���WR}�S�@�6�@u!~K���QXb�R��ޝ��}~u �0J�(�R��&p�Qa$I�89��Q]FN�\�E>��{�6���Dz�%�n��ZS�;�v� |wS��iQ��;u9=­�L�B1�>��T� ��Tޭ/oG
���x{1�z�i3�pn��s����2L��f�����H�06��?)S��ؓ<O�x1XH����]��F�Ɗ �U>�T�S�Nf
_j1s��0XL�P!XG1װc��XL)��(�P�*A����9�!�����u�=�X�B���d�YyZ�����E�2
v��K0̢
n���	��w-a���x�ҖA^��P�R��iT 
��L�d�t
�
+��"
+�P�sք
K]p9�uͬt���F�)*�j�����k>����H�=6،	
(s\�)p���'�J�20��c�ȓ��{˼�c;�Oq��ٵ�
Fʽ��F51jUS[7�'P�b
�
ʕ��-��>��8�����0�e��
+����v�
2��"��a*N�!��\8�s�h؅�� �{�Vᛡ�U�Ú�
����^0W�`7T$H0T�X��^0b�w?�
���
*R.c�C!���i�B����P�1ԅqB	L%�C�`Oԇ��>�4@�]ѝX���,�ȑ���4$�� �M
�
+^��ܨ7E��)j���9�U�egWT�HW��f�Lo
�aL%�8&AE ������&;�����`�o� 0���<��5У"�ح�ߌV�gP�QlB�9��߽��h�m4V�é���nj�Lm���2S�D
����1�;{l`e6�*!�w2�èR�E��R���&�]s+�kn5`�N����f�!����6�Pj$=ơ�W.Ǯ�^E at b3(�eU���yZd�RSo�6wz���v�B����W�
��ډ޻�O�V����hDz�~{��D���#S��J��ҝƚ�\��Fဨ�Z �P=�(
��LXt=�q{�3�ku�~x
]|��U�r{�����i����n>M���m��a�E��f(�/�ESѺA��4�����"
+
�TT8�>�~m?����m��2��*�pz9��P?G[/�!Zn����{-��k͑�Q
�L��_�/�G�E|
\W�7p[�Q��u�v�5k�U���^�|R��u��Y�.Ot��6�KB�M���/��(t
+�,���xn��q��b�1�n�����SE�����zS�*(lUS����pW]5~�����*
ۨY��c�Z�g�`�<��|��=���x}<�H�D�%�<�
����`��,y?�'I
��$�u
�c
��v�;\g�t5,�k���y����"��(|��8����Ád�'�:j

@�F��*�S�D
BJ��
`yb�h���2�A���f���w�����*�fX�&
�����4�krO7�
��qM����Nw��l�t�7�R��'�Y���q���@�3�G�������#���^��Yb;�K
<%:5�C�W�yq�K�C~
�
���QQ�3y��Y��Ӣ�����c:R� ��k�;/wΝ��*�=�82j`�4�5p��h�*��x�YL&f�������̞���X���b��m��u��\W�pg8)(�4�
��Hǩ��TRz�
^�������u������f�̩W�e�%�S���s��P�a����"�I�"�K�*�ğ�7��/�=�W%��p�^V������
-᭒�]�<�?�����m}s�
+endstream
+endobj
+2888 0 obj <<
+/Type /Page
+/Contents 2889 0 R
+/Resources 2887 0 R
+/MediaBox [0 0 612 792]
+/Parent 2878 0 R
+>> endobj
+2890 0 obj <<
+/D [2888 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2887 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2893 0 obj <<
+/Length 2321      
+/Filter /FlateDecode
+>>
+stream
+x��\Is���W̑�
+��Q�%�]�c�r.IIˬ����Iޯ�`2�fc؊y1���_��L���f�g�n�~�:s�i���/��Df�;��ng�/�W�GŠ���C��c�I����~W<��W��d������gl���۳�۳?��ьE�X������h6�'o3J��ٟ��e&�#
�=d�Og�:]i+�u�c2
���w�����sd�
a��k�	[�?e��T��q|y[*�T��JM��	����w5���� 5�hQ�����£�xU
�,�R��|�HG�>��:�9x�́&��n�^�7�;1��w������X͋_&������~�8�v���3�L�
�
�H��1�rן]���NL	�6Ӱ�R;�>~r>�_n��'f#,�F����a��ia
��ɦ0���ᛷ�|��r
�|0�?̋�RE�+X`�x��~j9�
�u�A�U1�d�\Hbt9��+ ���"��8l�����̥
���/|=�׉�D�Z��7ټ֒h��J��K	�̣�_�[;�D�b�P�8k7Dq������x��
U��ri0���*P؀���3R�4A1�U�0��D��4�As��o.�-
4:��������ՓH���,l�u�$����|{W���+��c
�}
�e3�.f��C�i��,��O�q�l?E��)q���
D�����ujr���� �1�����DG�p^�
]yg
�k�	
+�5(��f랛M�o[
� Q����n��/�¼rq
+���'E�[�݆�B��}^��v���?LB�]Nv��_��
+����z������M�P��O7a�d�[o����g��<SAГ%b��q�ӻ�/������6�cV�]pTk���6�JM�e[26d��
bN�So�!ۯ�������yٜ���M��
����	�t~��}ml��@����v�5��
+ڃ
�);�N���d5�-���P�w �� �T���g����(� I��������!�&�
�0
;� 5�b�����wL%�!ޢG����T
G������}s�2����wu���U׬����H����O�V�V�”u�r�\o�.���hGZ����D�7�4-TH38�?���܏����
+��ۏ
����Ј��Ujiď��`���C�oo�<3ha��}?(WB�p
D���μ7������@�*h?z�^}��9�1���7�բ0>^�9
p��I<i~�+x
��:���M��"���2*�z3Y��S��_��ٮ��Y�f�`:��n����������5�g�u,U(���]�����y�;�#M�%�5u~Y���2��
rS�"�h)���O=Bc=o�.�d��\��R�ã�d�����-m6��Z�\��ǯ�m-� ���h!��N��‹�쑚c���<Am��1P��<�l:Z���ъ�pN
s�™#��( ��:�w����`�cG��4,�'��0BJJ+O
_]\7�<���i�����,����wѾB�CCY!��\��("h
����6
E8F�=飈v%1� �CCũi?�(�e
�P.'�
�TrZ�'=���|"{
�x<~l.d�T	7�J	nSP�`�8
+��ё���D
OO?N���{�C@
���(�:��90p9�vr`��H@{�C�X���%Q<�eB��I��;'���0P����B<�|Mg
߿��N
�eV��D	����hȬІw��8��]�6�
��u�EMw*pb��Ki����_*��ُ����
+��؏
~���Խ4��9��vOj�΋p���d<��J	1p#9��
�@@
쨂�c�	��۩!81
� I�~��x����
��x������&���?P�{\�L*A��z�1���3�?j�&�ݘ��	Zt�o�q+��|=���է�6���ď�xL�#��d`)p�^
+>̠�Ѻ�h��I��F0O����t
��I�t�7�/z���.5iJ���hm��H��"y��p�`�r��k�!A��&@�#q��*
+�6��Ip�.8"�`�@��
KQ��&
+� ?�fZoc�p�c� �Z�QtE~ �F~Tq;����QE���S�u��Os��
�x�_�E'���t����@-ʭ�G��j]�`>�d(� Q���[�!�B �9V���f���ˎړ�¦E�:¿�M�3�j
�q�p�D�x����p����vxy��嫨
��0y-�ݵCz$

`���\xQ\�~y n`@��� 
����N��ַJ�E�^���O��@
�>Am���E�O@�5W��.Z���+����(
+endstream
+endobj
+2892 0 obj <<
+/Type /Page
+/Contents 2893 0 R
+/Resources 2891 0 R
+/MediaBox [0 0 612 792]
+/Parent 2878 0 R
+>> endobj
+2894 0 obj <<
+/D [2892 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2891 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R /F11 787 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2897 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+2896 0 obj <<
+/Type /Page
+/Contents 2897 0 R
+/Resources 2895 0 R
+/MediaBox [0 0 612 792]
+/Parent 2878 0 R
+>> endobj
+2898 0 obj <<
+/D [2896 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2895 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+2901 0 obj <<
+/Length 2606      
+/Filter /FlateDecode
+>>
+stream
+xڭXKw�:��Wh5G>'fH�����joR���n����B�[3��+�M���Z�e���٘$�0�� �{s�{�O�k/''g�d��Eq$�ɳ�Ly�Lڛ̼��e��g�JV�������=��]�f� �͊�XxC-��c��U|���}
j�������N�������$7���LC�7e�
���I���eOUR���P)�/A�7�����9���ǯ�X�lZ��I�(X�t�>�%����g�:k��^��	��,s�_�
�D�����3^�C84���p�fr����%��P!�q�i3)o�<���{3���8�&�^�ҥ�
+
�ro|�OhW�B&#mOBҝ�'�.�ɢJ�Y:�Q�Y
l5˭f%h��s�Nު�*�F�tZ͆y:O����)g��*�v�Ȓ�4�J8���
+�2�7s2:���jꬣ�а!�h\�[������/��H�S
�����Gn�U�\=�?�[�3�
�ŏn����g�����)��B #rױ7��^�U6
h��
#\�k�[����Y�%��� �`�:%�C�[˧<]֤� ���9G��4
���_\��nJ
{�� �|�>Yaw�+o�^[�k��=C҂Q���E�ۋ�Sr�P�"�����"KZ)(��Ƅ�!�"ՁP�B�`���������KACB:n�ʵd�l	��7��#8�4u��`����U��6����&IVl�X���������
��g������3y���
�.V��$p���F�?HrU.W� ��fs�Ӹ�ʼ��� �su п@	 � ����+׶�w�!������a��Ί9M~�^s"���f�Rg�R8�B}ocWۣ�����4�S���a��R�u�,�(���,L��ft��Ρ8ư4�
�8<�M�1
������
�7��Eը.�����]�
+�Vʐ[i����Ν`�
+o�����ǎ��yt�>����E��
+
2h�#;�?e1�
!��U�C��D�.��x�����,ݿ�6W8�"�K�+��o�������7��`
_܅/�
Cف/��
�����תHу��H�̗��)M�����l鴃�f���5
Z��i8�P H,Bk=
7o��ą��M��nr�6ݱGv����WI�@w����-��=D�tG��
+t����U}�
_�L��=Ad��KAV���YV`
+c%�Q�俈����x�D��.-�&uxJT�R��`ʳm�
uIN�Ⱦ[����v�C���o�D�Q�	��Z��r���Qv��\�G��jP�BV2]oL˹+
��j=|�)��Sw|A��� kӷ�w�M��6���<O��Oh��\�2AzK��uQdS�0p��}r��q_r�8�^��q�
"��Ǒ��'h~�-R�oi�
�Y�p�gc��<��EAv��\�5�y�-�|�͂"�6�J�;
�I�+�T��V��y@�U(�fU��?�*�'��io���h0[Q\�Y���3�>.d�Q�CZ=;
ݰ��C�S��
+j�.�ʿ��
+~�y�՛
��O�
�X
߰�����M]A�JJk��;�(s��<�v/�w+ȁ�%H��SR�� B����&���b�}o��\ ]�B��%� �',#���8�8>A�<��ZEf�����J�	��Һ��V�^�׃H�_�.nh@�-����
#	v\q�nf�,�ώ��e17�QV���:�.ʢ�h�`�B�Y�UC���~t	�Z��&#x�	
gN�s�A�im�f��'�m�{g��M��6X�Νa�OF��rܤ/Dgh��ԇ6�˶6��mah��\	�_��U�0|�\ehWn;T��w��pEM�ؖPT �u�A����5���I)&:�7E�B��1k�j1]��X~�
hp���!�!�q�:T`Υ6{�|80P
u*q�q�2.w�
�g�H
�:v掝�cg�u
��ɐ�$�̥JgA{m�rG�|�*gE�?=�WEq�����X�M�Xմ'��G�e[�������eۃ�
�W�EW���2�\4�:�2��<��
+N�r;{�fwK�t�D�NH�#���n�O�J����:�Â� �Q����1x̦��s��ǟF���������C��#�1� �7)��d|����)����-��@��q�J7��Mi�#���|��7T����/`I��a�H�
QV at 0KZbx�$�"|�=%YB�̲*�6$��C���;�m���4��k�����h�Gޕ#�>o1�q�F�v�ʺ	>��[����K
N�ܼ�g&����1[��f�FA7U��.��
9�,���2�/�a�N>���Y�d�<���(
��˭�=#
+�._AR���VeQ�kڱ���v�M?װdSLΧ� ٚ������9_��d]�Y�
��<[Byv,w�f��+���|�6��h���E�c/�qYJ�o�O#���/�O��Dx@���1�
+��n��&]��ڎe&$�wn�Ƶ��)�z����`(��
�r�KH;P����P8�����M$�谈CZ?6;�e
��Np��	��jǜ���Hc��ك��f�[kX��D,��7�@#��B�ěV[`�}`7�����*��
+endstream
+endobj
+2900 0 obj <<
+/Type /Page
+/Contents 2901 0 R
+/Resources 2899 0 R
+/MediaBox [0 0 612 792]
+/Parent 2904 0 R
+>> endobj
+2902 0 obj <<
+/D [2900 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2903 0 obj <<
+/D [2900 0 R /XYZ 86.4 566.755 null]
+>> endobj
+714 0 obj <<
+/D [2900 0 R /XYZ 86.4 566.755 null]
+>> endobj
+1120 0 obj <<
+/D [2900 0 R /XYZ 86.4 570.789 null]
+>> endobj
+1123 0 obj <<
+/D [2900 0 R /XYZ 86.4 551.662 null]
+>> endobj
+1101 0 obj <<
+/D [2900 0 R /XYZ 86.4 519.582 null]
+>> endobj
+1124 0 obj <<
+/D [2900 0 R /XYZ 86.4 488.057 null]
+>> endobj
+1014 0 obj <<
+/D [2900 0 R /XYZ 86.4 455.977 null]
+>> endobj
+1015 0 obj <<
+/D [2900 0 R /XYZ 86.4 423.898 null]
+>> endobj
+1363 0 obj <<
+/D [2900 0 R /XYZ 86.4 391.819 null]
+>> endobj
+1018 0 obj <<
+/D [2900 0 R /XYZ 86.4 347.785 null]
+>> endobj
+1019 0 obj <<
+/D [2900 0 R /XYZ 86.4 315.705 null]
+>> endobj
+1236 0 obj <<
+/D [2900 0 R /XYZ 86.4 283.073 null]
+>> endobj
+1200 0 obj <<
+/D [2900 0 R /XYZ 86.4 239.038 null]
+>> endobj
+1017 0 obj <<
+/D [2900 0 R /XYZ 86.4 207.513 null]
+>> endobj
+1023 0 obj <<
+/D [2900 0 R /XYZ 86.4 174.88 null]
+>> endobj
+1119 0 obj <<
+/D [2900 0 R /XYZ 86.4 143.354 null]
+>> endobj
+1122 0 obj <<
+/D [2900 0 R /XYZ 86.4 110.722 null]
+>> endobj
+1203 0 obj <<
+/D [2900 0 R /XYZ 86.4 78.642 null]
+>> endobj
+2899 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2907 0 obj <<
+/Length 2572      
+/Filter /FlateDecode
+>>
+stream
+xڥYKw۸��Wx)�S�|ꑝ��['���:](6��\[�Hrz���
�凔ɹ��$ �(���f��
�]��ݞ�� �^�ǁz���(�U/�H޻]�y�����O=�?�9�����d��r:����O.nO�>A5��z�G*��W'߾��4�z̗q��a�V=%c_�ݲ7;�儹e���E��
b��0�e|��w��zL��@3�M��@���^���)�0�l-BoH��~$�"�ʧ�@D^^��+2�
~Y'e:�J�t�,I45e�Xӓ�ˇ�H��>�V$��
2�γ�GS��*M2�MR��L�p��~�Wa�p���}�lSVfU�h����w\����6
+���
+&֑�	?T��l��$9�WOn�=ƾ�z�w`+��թ
+ً��(�DZ��
;��
�Ra6�� D��
�P0��^��15w�Ŧ�H�d�}�n��1Y=����PIo�zZ��ZnH=21�2��Q_����My���^��d6v�|���<+i\~O�/�
r�~$��Y|�9N���st<5/�1(�
�G0
1��|_���:�׃'ɝ�T 
S� X��b��8b�Qخr/qk��Pz��* �b��#�^v�ot�kg{V���?2g���/��%dK��z�͜~R_�q����Lq�dN8ڛ�����*�O߂ýՂcw����_��KC�y�8WR`�G
�~�
���̭��\�d�Ҋ@������$&h�|�֤)
A*M����(I�dj�^��}�/��;Z�W���,��o��;��pe�mP��j�m?
�Th�*]j_%գ����Տ�4}!�A���4�
~��
䋌V��>Jw�!�H�i�۹�n���.�(�:=a��v�_H��!ӛ"(�UIv6{�Ŀ�_!Y��Y������$�!E���
�7�\O�u�H0x�8B��z>�
fW�l�oKA�;
�`����%�4�O�~�P�ki
+�����A�
���d裐|��[�T->���)d]�Ѯ3X�D�t�A���E��J��:\w\$�\����3�z)�
���)z
+U]�B
��qРiF����
+hOk��=8uah���I��鍾��y��WxE_��P����
y�p:h���KG��tP���25z���#���v
ě��3��&yК�`�*��1Ҹ�?�V�B�^IF�q?�8M�|�,��譳B�u#ڇ
�<�u�
+�;�@��R�Vɺ\u�@�|'�M��n�1ڐ�[Ș��xCv������h���i���yӔ�џ�׳/�Sz��m<Y.͒$��YvBCRr,܌���N��@n�l���Y�!-�^�V
+h0

��C;��ԃ6zGo�s��^�sh*�P	'N0u�ę�~�˅� Gsj���'�/,}��g%t+ϩ��L��\7eZғ�Lp=��`�C����Q�� �:���JR���ӎ����L�H	�(IR[8b=��yZ����Ҭ�ؗ B�m�3|��� �Z��^�\E��SE~���8��j��c���
u�i���
+�5�zb;�R+#�%�g>�懓޻ak�b���Du�����������0dm����)S�'s��j#�G"�a��?a[
+x;`�Ds�K�C�
�Vk?
;WKg�$N�ċ�n��f2��n<�}��놁/tt�u��-� 
V�
��v���O��3���
�M�z]oצ�bb�r@�,�Q���-%ն�Y�aƢ��X4`t%��Il����-��D�KH
�ZV����l���Ŭ v��8�
���>�`�:|	��x"<��PL�s��3
�g��h����ږp�zRc<�I|�eWU�ٺ	�`ͳ�U>�ei�y=G^,,��v�f�= ;Ф�} ^�J��
��kY�Ȑ��&Q����,:{���
[c����}�d����O�I�q_D�5Q���&%���(_k5!�$t������(�R�Z�Dë�d�d��R4
�
��'�
�N?o�%
����1��u��A�=��`�׀�"�l�vr;-k����9A���q���d{���e^�J&�eUu�	�+���b6GXV?�@�|y5�����
/Mf���?M=S}"�͉(�nwR:v��s�=tb�X�Y�LUP����&f�3Q���Y'��`��Ds�kvxr�F:x��� E�1
+��"y$�}@��k5�ʏ��#���n�6�
�@Ӿ�r�Nɲ��&K�-HIu���T��e~'��Y����ۍ��n�9���Ǹ��
�Eϰ,�E�p���#݌3����E�yvo�&sSZ�m�`���k3b<^�۾�!C��wԇ9�oIIA�M���vL���/X�d}ᲅ�p���Lr �E͙I��8��p�(Z�pvuqDO�/��_v�J�W�׸��W���U7e�M��!tt�D����i[4U�vJ`C�R�:%`S4�>r�B�����
V���m>XԸ����iF#ʈ��l%

��Y:8���
��ngAS��Rb+�k�@i]Q�ϫG䉨��0���¢~�?	���-8�7Ӕ�a�t�w�����d][-�l�����3?T�+:�s̽�ྱ�
�
+����/�R
�����'��o
+�
+endstream
+endobj
+2906 0 obj <<
+/Type /Page
+/Contents 2907 0 R
+/Resources 2905 0 R
+/MediaBox [0 0 612 792]
+/Parent 2904 0 R
+>> endobj
+2908 0 obj <<
+/D [2906 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1026 0 obj <<
+/D [2906 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1158 0 obj <<
+/D [2906 0 R /XYZ 86.4 673.298 null]
+>> endobj
+1013 0 obj <<
+/D [2906 0 R /XYZ 86.4 641.418 null]
+>> endobj
+2632 0 obj <<
+/D [2906 0 R /XYZ 86.4 597.029 null]
+>> endobj
+1016 0 obj <<
+/D [2906 0 R /XYZ 86.4 567.639 null]
+>> endobj
+1021 0 obj <<
+/D [2906 0 R /XYZ 86.4 533.821 null]
+>> endobj
+2642 0 obj <<
+/D [2906 0 R /XYZ 86.4 501.941 null]
+>> endobj
+1020 0 obj <<
+/D [2906 0 R /XYZ 86.4 470.06 null]
+>> endobj
+1893 0 obj <<
+/D [2906 0 R /XYZ 86.4 438.18 null]
+>> endobj
+1201 0 obj <<
+/D [2906 0 R /XYZ 86.4 406.299 null]
+>> endobj
+1121 0 obj <<
+/D [2906 0 R /XYZ 86.4 374.419 null]
+>> endobj
+1202 0 obj <<
+/D [2906 0 R /XYZ 86.4 341.985 null]
+>> endobj
+1301 0 obj <<
+/D [2906 0 R /XYZ 86.4 310.658 null]
+>> endobj
+2633 0 obj <<
+/D [2906 0 R /XYZ 86.4 278.224 null]
+>> endobj
+1024 0 obj <<
+/D [2906 0 R /XYZ 86.4 246.897 null]
+>> endobj
+1022 0 obj <<
+/D [2906 0 R /XYZ 86.4 215.017 null]
+>> endobj
+1373 0 obj <<
+/D [2906 0 R /XYZ 86.4 171.181 null]
+>> endobj
+1025 0 obj <<
+/D [2906 0 R /XYZ 86.4 139.301 null]
+>> endobj
+2905 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F49 983 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3035 0 obj <<
+/Length 2022      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs�8��W�(U��
[vy&�L,Umme�@���
Jr(*���m>�E7��^,[&�����n�[yػ������Żk�=ʑҊx�GOK�=I8"Zy���<�݆���_^���֞�|Ie�{�#Mx�x�km�T���16ڛ�>J��Q:�j�\|l��y�3�
aTxB��R����YfK�|O��Ej�]��T{�K2��_�o.�� ������i��&��h���)�i�ێ�e ���&�b��Hq"����Q�/
�� 6HM_�kU���_W�cQb/���#��O��SU#x�k?�e.y
+�W��
ǤK'"
t�-�5e�
�0	�Cb
+U�ױ� >���"��Vw'f��+
Es'Ge+D���\У�Ih���#9��3�	���Z����KB��)+k!>a����R$xI�C !p�T�O�A�2[�D˂�8ښ )i���fƘ$O�B �<<
��̒}���m�
��w�	�ҹ�I�Wgup
+\��l���K�d�m
+k
�""�p(��5�!��Œ��x��
b��eHc'&�E5�&�!E�ļ��v���-.�\�R
�
+�����a�!�rs�����_<��k�[���c�����؛_|*��(0
�A$؝�^~��P��>�I�b����f)��
����- �΍
+yͱ
�a(�:�0�k(&*�O�KQO��(�� A��]n8�
+�Gk�L����4J��5Vq!z
�^J
+a5�d\��9A�Ӂ�Ka��7���u�BX���
aGVg����
���Єa
�

+�vd�
ZS3�ݍ���&�7�4x(���w�>
vH�5�vm(}�F��D���i*`0��� ��Rg�0,�UT�(���~6�pf	�ҕH�{m�՞���t>���6�
^�
+���
+Q��+��%qٓ
�]١~��G�������%r8˧�!"D	^s7]�٩Y���d#�V��7͝3�Ȯ�
P�1�g��t�?r</�A�2N
s��y��>/q't��y�������!
	d��=�}D�C�D��\��
L�ق�~�d�W
�˚����,zF��
x^�Z[t͐��[tѪA)�H�-�[�&���
�f���IwlVE�f���������$�O�
+ �\��Ž-�x���l�����]$�:�=�P��+����1��tC�E����|�#�Y�Ĩ�,ߧ��y�$ACՑнʷ��)��sm	ߤpc/��wVW:�;H���9���N]�KcƉ�|��+���
_����[`�qM`
��t*�
+D�A�D1�R��48�]���NPը0I�K�	b��f������\Y�:�*ZI<Ħs���fJE����l�"�.�ܲ�Irb�(1�΃�ci�.�7�$4��/�&,t]�06�����'(���u換��ټ�-c�|��:^~A=�Y�����[$���\|
c2j�`9!x�����cs�΂�ҔC��Ͳ�y��$+Z�[ -�K� 5��#��w�N�ʱTQ���V��w\, ���$[�9���v��j]��%r�QX�� �����,��
{E�.H��^
d�7`���2M�{�2G�o^��|��㦸U#��P�������
/S`~���%u�RX}����$�|@�VG}zX�9�!��](��q&��}��a�6ICk*�78�z�	��q)��{��V�=2�fᦹ�_��9F��ۺ.�Kau�ÓI����������v�T��;y�;�@w��dJ�8��j�����v�]�o�`3�7
7Q�e�))ڰ�	���;��"=��W��� ~�du�(��ꢝ��)�-^�N���'X� 4娐��qg��x<�F�2p�
���6��
+1O��)��A�a��	�D��5��[.�K���
����E����y� \_�h׌�CH��5�p�
�$�vז�P�C�!�$){� �e`T!g?�xPb�@L�!�ID�
� Y[��=u�/��때�s�g�����>B
�:Q<�� K�U!o���

�̽۳Ͳ����<
:
+endstream
+endobj
+3034 0 obj <<
+/Type /Page
+/Contents 3035 0 R
+/Resources 3033 0 R
+/MediaBox [0 0 612 792]
+/Parent 2904 0 R
+/Annots [ 2909 0 R 2910 0 R 2911 0 R 2912 0 R 2913 0 R 2914 0 R 2915 0 R 2916 0 R 2917 0 R 2918 0 R 2919 0 R 2920 0 R 2921 0 R 2922 0 R 2923 0 R 2924 0 R 2925 0 R 2926 0 R 2927 0 R 2928 0 R 2929 0 R 2930 0 R 2931 0 R 2932 0 R 2933 0 R 2934 0 R 2935 0 R 2936 0 R 2937 0 R 2938 0 R 2939 0 R 2940 0 R 2941 0 R 2942 0 R 2943 0 R 2944 0 R 2945 0 R 2946 0 R 2947 0 R 2948 0 R 2949 0 R 2950 0 R 2951 0 R 2952 0 R 2953 0 R 2954 0 R 2955 0 R 2956 0 R 2957 0 R 2958 0 R 2959 0 R 2960 0 R 2961 0 R 2962  [...]
+>> endobj
+2909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.916 549.449 182.871 560.298]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.844 537.459 225.799 548.307]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.895 537.459 241.85 548.307]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [244.839 537.459 256.794 548.307]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.355 525.469 236.31 536.317]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.299 525.469 251.254 536.317]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.225 513.478 224.161 524.326]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+2916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.139 501.488 210.075 512.336]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.171 501.488 231.107 512.336]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 479.479 142.191 487.892]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+2919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 443.01 167.983 453.859]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+2920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 431.02 193.471 441.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+2921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.459 431.02 213.396 441.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+2922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.942 419.029 158.878 429.38]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+2923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 407.039 182.152 417.389]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+2924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.14 407.039 202.077 417.389]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+2925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 395.049 143.825 405.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 395.049 164.857 405.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+2927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 383.058 168.512 393.408]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.608 383.058 189.545 393.408]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+2929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 371.068 149.056 381.418]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 371.068 170.088 381.418]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+2931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 358.8 186.883 369.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+2932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 346.81 150.271 357.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+2933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 335.096 155.501 345.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+2934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 323.106 155.501 333.456]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+2935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 311.115 160.732 321.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+2936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 299.125 155.501 309.475]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+2937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.828 287.134 187.784 297.983]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.879 287.134 208.816 297.983]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+2939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.912 287.134 229.848 297.983]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+2940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 275.144 143.825 285.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 275.144 164.857 285.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+2942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 252.603 164.747 262.953]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.842 252.603 185.779 262.953]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+2944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.64 240.612 138.595 250.962]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.846 194.09 191.783 204.938]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+2946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.771 194.09 211.708 204.938]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+2947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 182.1 193.471 192.948]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+2948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.459 182.1 213.396 192.948]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+2949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.942 170.109 158.878 180.459]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+2950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 158.119 182.152 168.469]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+2951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.14 158.119 202.077 168.469]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+2952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 146.128 149.056 156.478]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 146.128 170.088 156.478]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+2954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 134.138 154.286 144.488]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.382 134.138 175.318 144.488]
+/Subtype /Link
+/A << /S /GoTo /D (page.183) >>
+>> endobj
+2956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 121.871 192.114 132.498]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 109.88 155.501 120.507]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 98.167 160.732 108.517]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 86.176 160.732 96.526]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 74.186 160.732 84.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 62.195 165.962 72.545]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+2962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 50.205 160.732 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+2963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 561.44 385.313 571.79]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 549.426 385.313 559.776]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 537.412 385.313 547.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 525.121 395.774 535.748]
+/Subtype /Link
+/A << /S /GoTo /D (page.185) >>
+>> endobj
+2967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 525.121 416.806 535.748]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+2968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 513.108 385.313 523.734]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+2969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.409 513.108 406.346 523.734]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+2970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 501.37 359.411 511.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.506 501.37 375.462 511.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.557 501.37 396.494 511.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+2973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.483 501.37 416.419 511.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+2974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.515 501.37 437.451 511.72]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+2975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.221 478.415 363.176 488.765]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.428 454.387 433.384 465.236]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.419 442.373 391.374 452.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.546 430.36 394.502 441.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.113 418.346 436.068 429.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.164 418.346 452.119 429.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.152 395.39 412.088 406.239]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+2982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.135 371.363 467.091 382.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.079 371.363 482.035 382.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.642 359.349 435.597 369.932]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.586 359.349 450.541 369.932]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.637 359.349 466.592 369.932]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.688 359.349 482.643 369.932]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [486.739 359.349 498.694 369.932]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.936 347.335 460.892 358.183]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.88 347.335 475.836 358.183]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.72 335.321 434.657 346.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.545 323.307 461.5 334.155]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.545 311.293 461.5 322.141]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.219 276.324 377.155 286.674]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+2995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.005 264.31 380.941 274.66]
+/Subtype /Link
+/A << /S /GoTo /D (page.180) >>
+>> endobj
+2996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.555 252.296 370.491 262.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+2997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [350.234 240.282 367.171 250.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+2998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.171 228.268 381.107 238.618]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+2999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.056 216.254 387.992 226.604]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+3000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.942 204.24 382.878 214.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+3001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.89 192.227 393.826 202.577]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+3002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.335 180.213 405.272 190.563]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.517 168.199 396.472 178.782]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+3004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.925 156.185 405.862 167.033]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+3005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.368 144.171 438.323 155.019]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.419 144.171 459.356 155.019]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.144 121.216 398.099 132.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.195 121.216 414.15 132.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.139 121.216 429.094 132.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.19 121.216 445.145 132.064]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+3011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.863 109.202 376.818 120.05]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.914 109.202 392.869 120.05]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 86.246 382.633 96.597]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+3014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.729 86.246 398.684 96.597]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.78 86.246 414.735 96.597]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.724 86.246 429.679 96.597]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.775 86.246 450.711 96.597]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 74.233 382.633 84.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 62.219 377.403 72.569]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.499 62.219 393.454 72.569]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.55 62.219 414.486 72.569]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 50.205 398.075 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3036 0 obj <<
+/D [3034 0 R /XYZ 86.4 726.045 null]
+>> endobj
+718 0 obj <<
+/D [3034 0 R /XYZ 86.4 574.336 null]
+>> endobj
+3033 0 obj <<
+/Font << /F38 785 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3291 0 obj <<
+/Length 3805      
+/Filter /FlateDecode
+>>
+stream
+x��][W#G~�W��Y*u�<c3���&�sr��O�Yn�l���U���n��ݢE��<
.}U�J%�T2����㝃��wG��
V���k�[�{Nf���.{?�Ja�~���i�Y
+�e�>
���3����#���'��ym{�;?��{��w=�T�߳�]��
+L�OW����
^�����A0�l>�o�
+.�>��r�Y1��3�&��0y�ʠ��
+P)��8���%�����
�J�"�K6��\�N��
��~�WJ�����m� ��9j��
;�!�$xy����fB�޾����FA\`JZRB�6
+B �+Ht��(�i��1�
�~ )�Z�h�E����aX��*"D�
+D�Z��,G�X:-=�D�R-$B �K�:;�W�Zi�0��L���<k0
ְH8�%
.�

�~��U�ykIp�`
ԩ�;:?=��1�/����0?"x��`�4<V���

G��dx��\`��m�|�F	&C��V�i������ƣ�lR�P�as}*�
�O��žk*��s<
+�p˼��"��ʌ:��%Am7p��Pk$"�H"h�k�f�K
+�DRΫ6�@M)�F��O��BQ�Y���
+�v7�
����F1
N�H����+��d��ݠ M�F	��rի�	�+Qj�8XVM�_ e�i�_М�E�z�Wo������ɑB*@ʪ��8:�LgU��>C�
sN�a?N��V�a�"A��i+ʨI;�[myUo�X?��m����G")�];= �����qZ�V2c	���e�� �Ś!jU!;�F
�$I�۩l�
+E�ɰ�" 7 �� 5��[y�o�
+Nm���$����O�G�ɧ�䰣���
n9&t5�wE�GR:��>�d�(0s������kr4��_����FJ*	�x8��=�!�LO�8븵��!��pi� ?�R:%@�N>�̺w�v�j��$t$%C�.��҇�{�4��2��[fػ]���ќ�)`� �;�2��
����n
��
r�F �������H7�`�$�iQ��^ 
w�FQw�ۻ8
�
 [=� W!�޾���Q���b_7�/���QH�1���Q0�
+��B�;"
+
�Q��)P4g���@OOF��?|_mx7i�-��X¦�66�H
Υð�/�I��������'5A$l
+"K��གྷ��C�4_��H���TɊ�N����s��v���9ʱX�X�W`S�m��R�CA+�L{�rv�uv�3�Ԇ� �.�m��d^�x:
��0ܮ��I�K���-3��xh�P�/O�FR"����;I!
h
+�J�]%�.��5 o
`@@9О��D at z�q��Fx�20�l���ׂ�
+���U���h�
��L$%�2���B �o�"h�"-�2��
2��<2�Acװ��X�,C�q�mO� �(C�
2�6�i�t<v:��
2��,��„�k�f$��
�g����x���iAr}II��4G�
+LaYІN �{	���s
�E��em2K8r15�[�,�m$%lh!l�\�Ẽ���–��| ArmI	��]
+���"d������%�$v*R�N�`nwȜ�E������T@��:��
e�Dac�~��z��5��9QI�T���l�_	0s�*b~<�v�8��W��ⰸ�B�MIa%�U�4��F������Q���h��=O���X ��w�&��sI���ڀ��!��%RĜ
����
%�p��g��p���H��w��	0s1�
e�6��uu
�4y��W���������II�N��4�:M�+����Gݽ��ke$g^a��$��4�+")�w���۳��)�[�Άg]/��#��}%��
+9�
I��5�����h��j��WDU�N0�9�����4X����O~R
0j*.��t}��F���ppzӴd���
�����hP��=Sґ �4,��LQ*��Ov�BP��1�V�*��4r����E���(PS�U�`k����\;%4�q$qM�d�ҏ���}H�8!�M'%�?�}:��K�4!���2g��v/�4yA%�-gD��JT�29e��}C> d�B�X�b�HJ+�F���P��۬azJH���`�ߔn
7�*J�B���1�@J�U��b% ��Z�ܪ"&��pĕ1�˴�8X�g'0"�p �GR*/ҭ)h.�"�t�L��%@��o��P�im~���}���$� ��7u�%I� 2	��
�aB��jE�%�w� al���J��M��/�R������`Vy��������d<�մ�ꎙw�*bg�Q��i׻��e���j#�}pŜ��O!j
+���������ɛ�7f
�T0=�<���+�@yE�b��{_�]<=�p~:돆��

�auK�����
+-7L��n�W,�9��v���̡ؼ7�͵啉2``�#���y0�%X
+���Ǵ�m����6�����j�O�e�(P!N?��J`"�!n��%x��'�I��oso|�?>�ҫ4�,Vod��0 �F4�
*٭��3s�o��:=
��i�Nr:(܋��63X�`��E�]��u���_�=��"�5��\�H��8���*����Af�+=X��-�J\�D$����h��o�D{3��t5��L�
�&�h?��OR��_֘�;(��>�2��n�	�����Q�fB�j0�M��n��+X�*h�<L�]q4��DR\�jC�ԦZ�6�ImJ��Ɠ�v�J�7�]�j�7>~� I���bv��e6��϶�h�)F+�~���,�Z](��.�\y��O���dtܱ�㍽�\{�3�{�Rco�T�4T��[� ��K1�C�a�|
d�s6��ڑp6����\��E�ڤ�ԚYk�0�L	��ؗ���w^�
Z#Q��P�
��߿���~��R}�[W6:����$ ?�Y>v�hj�O�īɢz¨Li|"V?]<�n� [...]
i7��A�FB�G[|��E�
+�q
	����m�AtXu���(6�2�[�ۀS�j
+���i �����)0�י�uЮ
�7�R[�ܚ��3m5������i�3�	0s
A)��K��[˴�,J2�X�b̜�EP�/�ð���6X��ñ	V�1��ևh�β6��)q����FyT��K�Jй�����*<Pٵw‡�\��\.㙙�yJ1�׶�����~�
�M�͚�A������E	�sm������_>�m���/�]�D��q���۽}����U�܄F5sX�/����~�b~u5�r�f���&�
��=a
A��Hj�#��^�U�|x���Z�E�en*h�2ѷB�M\Ҭu@
����
6�1�O��_o��ͯ
*.3d�%�m%�g'sb'��\>���}z7��0:B�
+	��$b[�R
�;nji;���̊V
~�ݏ
�i;��Ͳ1��-�ؖ�@%xP�3��Tp�{�%�B"�>�����dб
+�)ͺ��.��A׼��/�r%�
+oǸ��e�mR

gV��_�]����i
��
���\U�5�s����*f�o
��wv���:}:��TU�.�A�ՉH�o)}��/D������
+endstream
+endobj
+3290 0 obj <<
+/Type /Page
+/Contents 3291 0 R
+/Resources 3289 0 R
+/MediaBox [0 0 612 792]
+/Parent 2904 0 R
+/Annots [ 3023 0 R 3024 0 R 3025 0 R 3026 0 R 3027 0 R 3028 0 R 3029 0 R 3030 0 R 3031 0 R 3032 0 R 3037 0 R 3038 0 R 3039 0 R 3040 0 R 3041 0 R 3042 0 R 3043 0 R 3044 0 R 3045 0 R 3046 0 R 3047 0 R 3048 0 R 3049 0 R 3050 0 R 3051 0 R 3052 0 R 3053 0 R 3054 0 R 3055 0 R 3056 0 R 3057 0 R 3058 0 R 3059 0 R 3060 0 R 3061 0 R 3062 0 R 3063 0 R 3064 0 R 3065 0 R 3066 0 R 3067 0 R 3068 0 R 3069 0 R 3070 0 R 3071 0 R 3072 0 R 3073 0 R 3074 0 R 3075 0 R 3076 0 R 3077 0 R 3078 0 R 3079 0 R 3080  [...]
+>> endobj
+3023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.636 688.242 147.591 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+3024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.687 688.242 163.642 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.738 688.242 179.693 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.789 688.242 195.744 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.84 688.242 216.776 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.636 676.193 147.591 686.543]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+3029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.687 676.193 163.642 686.543]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.738 676.193 179.693 686.543]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.789 676.193 195.744 686.543]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3032 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.84 676.193 216.776 686.543]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 664.144 163.033 674.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+3038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.129 664.144 184.065 674.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 652.095 173.494 662.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 640.046 183.954 650.396]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 627.997 164.747 638.347]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+3042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 615.948 178.973 626.298]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 615.948 195.024 626.298]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 603.899 168.512 614.249]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.608 603.899 184.563 614.249]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 591.85 189.185 602.2]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.28 591.85 210.217 602.2]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 579.8 163.282 590.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 567.751 183.954 578.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.05 567.751 204.987 578.101]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.244 555.702 193.2 566.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.295 555.702 209.251 566.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.475 543.653 203.411 554.003]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+3054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.507 543.653 224.444 554.003]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.244 531.604 193.2 541.954]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [197.295 531.604 214.232 541.954]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+3057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.561 519.555 159.516 529.905]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+3058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 507.506 168.263 517.856]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 495.457 173.494 505.807]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.561 483.408 164.498 493.758]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.091 471.359 169.047 481.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.81 471.359 185.765 481.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+3063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.529 471.359 202.484 481.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.248 471.359 219.203 481.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.967 471.359 235.922 481.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.911 471.359 250.866 481.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+3067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.629 471.359 267.585 481.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.573 471.359 282.529 481.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+3069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [287.292 471.359 299.247 481.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 459.404 137.209 469.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.15 459.404 153.105 469.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.046 459.404 169.001 469.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+3073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.99 459.404 183.945 469.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+3074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.886 459.404 199.842 469.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.783 459.404 215.738 469.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+3076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.679 459.404 236.615 469.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.556 459.404 257.493 469.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.434 459.404 278.37 469.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+3079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [282.311 459.404 299.247 469.754]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 447.449 142.191 457.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.286 447.449 163.223 457.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.212 447.449 183.148 457.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+3083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.244 447.449 204.181 457.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.276 447.449 225.213 457.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.309 447.449 246.245 457.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.234 447.449 266.17 457.799]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 435.399 199.894 445.75]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 423.35 173.743 433.7]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.838 423.35 189.794 433.7]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.041 411.301 178.996 421.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.121 411.301 195.076 421.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.201 411.301 216.138 421.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.263 411.301 237.199 421.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.324 411.301 258.261 421.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.25 411.301 278.186 421.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.143) >>
+>> endobj
+3096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [282.311 411.301 299.247 421.651]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 401.283 142.191 409.696]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+3098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 387.297 178.973 397.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 387.297 195.024 397.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.12 387.297 216.056 397.647]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.705 375.248 163.66 385.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.228 375.248 180.183 385.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.751 375.248 196.706 385.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+3104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.274 375.248 213.229 385.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+3105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.797 375.248 234.734 385.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.302 375.248 256.238 385.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [260.806 375.248 277.743 385.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [282.311 375.248 299.247 385.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+3109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 363.293 142.191 373.643]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.286 363.293 163.223 373.643]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.476 351.244 164.432 361.594]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.964 351.244 181.92 361.594]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+3113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.452 351.244 199.408 361.594]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.94 351.244 216.896 361.594]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.428 351.244 234.384 361.594]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.916 351.244 251.872 361.594]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.86 351.244 266.816 361.594]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+3118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [272.348 351.244 284.303 361.594]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [287.292 351.244 299.247 361.594]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+3120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 339.289 137.209 349.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+3121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.198 339.289 152.153 349.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.665 339.289 168.621 349.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.133 339.289 185.088 349.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.077 339.289 200.032 349.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.544 339.289 216.499 349.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+3126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.488 339.289 236.425 349.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.937 339.289 257.873 349.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.386 339.289 279.322 349.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [282.311 339.289 299.247 349.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+3130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 327.333 142.191 337.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.286 327.333 163.223 337.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+3132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.212 327.333 183.148 337.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+3133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.244 327.333 204.181 337.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.276 327.333 225.213 337.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.309 327.333 246.245 337.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.234 327.333 266.17 337.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.866 315.284 157.803 325.634]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.792 315.284 177.728 325.634]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.824 315.284 198.76 325.634]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.749 315.284 218.686 325.634]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.866 303.235 157.803 313.585]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.866 291.186 157.803 301.536]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 279.137 168.512 289.487]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+3144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.608 279.137 184.563 289.487]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.659 279.137 200.614 289.487]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.71 279.137 216.665 289.487]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.761 279.137 237.698 289.487]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.686 279.137 257.623 289.487]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+3149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 267.088 158.052 277.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.041 267.088 172.996 277.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.091 267.088 194.028 277.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.124 267.088 215.06 277.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 255.039 183.954 265.389]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.943 255.039 203.88 265.389]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+3155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 242.99 178.973 253.34]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 230.941 158.052 241.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+3157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.041 230.941 172.996 241.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.091 230.941 189.047 241.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+3159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.035 230.941 208.972 241.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.068 230.941 230.004 241.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [234.1 230.941 251.037 241.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 218.892 154.286 229.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.382 218.892 175.318 229.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.414 218.892 196.35 229.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.446 218.892 217.383 229.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 206.843 163.282 217.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.378 206.843 184.314 217.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.41 206.843 205.347 217.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.442 206.843 226.379 217.193]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.252 194.794 180.189 205.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 182.745 168.512 193.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.608 182.745 184.563 193.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.659 182.745 205.596 193.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 170.695 194.415 181.046]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3175 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.511 170.695 215.447 181.046]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 158.646 178.724 168.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+3177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 146.597 183.954 156.947]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.784 134.548 182.739 144.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.014 122.499 192.951 132.849]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+3180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.553 110.45 177.509 120.8]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.784 98.401 182.739 108.751]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 86.352 163.282 96.702]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3183 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.378 86.352 179.333 96.702]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3184 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 74.303 189.185 84.653]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+3185 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 62.254 178.973 72.604]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3186 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 62.254 200.005 72.604]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 50.205 178.973 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 50.205 195.024 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.294 688.242 410.249 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+3190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.345 688.242 426.3 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+3191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 676.2 403.306 686.55]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 664.159 393.094 674.509]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.19 664.159 414.126 674.509]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+3194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 652.117 394.558 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+3195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.654 652.117 410.609 662.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+3196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.735 640.075 385.69 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.777 640.075 403.732 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+3198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.819 640.075 421.774 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.861 640.075 439.816 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.902 640.075 457.857 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.944 640.075 475.899 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.888 640.075 490.843 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+3203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.93 640.075 508.885 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 640.075 523.829 650.425]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+3205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 628.12 361.791 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.307 628.12 377.262 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.778 628.12 392.733 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+3208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.722 628.12 407.677 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.193 628.12 423.148 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+3210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.137 628.12 443.073 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.589 628.12 463.526 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+3212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.515 628.12 483.451 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+3213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [486.967 628.12 503.904 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.893 628.12 523.829 638.47]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+3215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 616.165 366.772 626.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.868 616.165 387.804 626.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.9 616.165 408.837 626.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.826 616.165 428.762 626.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.365 604.123 407.32 614.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.416 604.123 428.353 614.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.448 604.123 449.385 614.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.596 592.082 412.551 602.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.647 592.082 433.583 602.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.679 592.082 454.615 602.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 580.04 408.785 590.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+3226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 580.04 429.817 590.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 567.998 384.098 578.348]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+3228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 555.956 377.403 566.307]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.135 543.915 402.09 554.265]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 531.596 385.313 542.223]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 519.555 385.313 530.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.409 519.555 406.346 530.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 507.513 395.774 518.14]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+3234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 495.471 416.695 506.098]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 471.665 488.483 482.513]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 459.623 442.461 470.206]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 447.581 449.894 458.429]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 435.539 409.944 446.388]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.039 435.539 430.976 446.388]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+3240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.965 435.539 450.901 446.388]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 423.498 416.032 434.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 423.498 430.976 434.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 411.456 396.439 422.304]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 399.414 364.641 409.764]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 399.414 380.692 409.764]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.788 399.414 396.743 409.764]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.839 399.414 412.794 409.764]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.06 387.373 414.015 397.723]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 375.331 408.785 385.681]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 363.289 408.785 373.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.064 351.247 405.019 361.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 339.206 374.853 349.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+3253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.681 315.122 395.636 325.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+3254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 303.081 416.032 313.929]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.854 291.039 371.809 301.389]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.798 291.039 386.753 301.389]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+3257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.455 278.997 468.391 289.845]
+/Subtype /Link
+/A << /S /GoTo /D (page.148) >>
+>> endobj
+3258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.38 278.997 488.317 289.845]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+3259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.719 266.955 444.675 277.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+3260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.663 266.955 459.619 277.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [463.714 266.955 480.651 277.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+3262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [483.64 266.955 500.576 277.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.096 254.914 448.051 265.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+3264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.04 254.914 462.995 265.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+3265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [467.091 254.914 484.027 265.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [487.016 254.914 503.952 265.762]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+3267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 242.872 453.557 253.222]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 230.554 443.096 241.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 218.789 401.253 229.139]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+3270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 206.747 411.465 217.097]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+3271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 194.705 411.714 205.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+3272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 182.664 421.926 193.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+3273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 170.622 375.102 180.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+3274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 158.58 385.313 168.93]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+3275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 146.538 390.544 156.889]
+/Subtype /Link
+/A << /S /GoTo /D (page.122) >>
+>> endobj
+3276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.639 146.538 411.576 156.889]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 134.497 375.102 144.847]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 122.455 385.313 132.805]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.409 122.455 406.346 132.805]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+3280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 98.372 488.483 109.22]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 86.33 442.461 96.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 74.288 449.894 85.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 62.246 409.944 73.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.039 62.246 430.976 73.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.965 62.246 450.901 73.095]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+3286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 50.205 416.032 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 50.205 430.976 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3292 0 obj <<
+/D [3290 0 R /XYZ 86.4 726.045 null]
+>> endobj
+3289 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3446 0 obj <<
+/Length 2212      
+/Filter /FlateDecode
+>>
+stream
+x��\Kw�F��+���+����Ɔ�=��<INOj�v+�#D'���\!1F��(����ƀ����z�u�
�y7��F�̨pR�g�ɑ1�#
+	��գ�a|����x����a� sx���^��h��w��]����9�L8����Ϯ���9.�J:�
��qU����Y����x�	
�
+D	w��{"W�
�`�����R:�?��#�<H�ߍ��6���<W�͌�����T\b
UŠo�n��.�
,#b�F�
4j�c"K��
�@m���Ʊh����&��y��h��a�5�΅Ux�/�n��D�U��
�Fǡ�@��sp��ZL0��N&�-
�v>ר�
�B
�Xv]VV���êJ0��c�
l�	?��'�����.��N��E��A
�\Br�wW׳�ŵF1�ȓr�C"e�����[�Ԛ��5�4v1�4�+
+�S�A�B]�@TG�
��h�S���P�~+ːfˀE���E
��� ����\����w��o+o�L ByY��!O�g��#��M�0�z´f
+f���ծ��zz�A�Z*u,Sz'9V��
K����m���,��{
qbX��ʪ�7�\1 Pv�x��%�
q�f݇a��7ܡ�^^%�fB
�U��c�[����Y�D%���XI���]գ0G05�Zm���"���Q�A
c
��b��|���.����W����yy��v�x�g�*�
��
z-U!�U�hw�� �h�3��޽����]���]:��'
谰�����,
	 a�� 
�/~�����8
+�S8��_��>H��63���h�0TT��@P
+az��'���A��� �c����c�
qj��,q5bPu4�WJ!��ըE.������A�p�=���eD�`��Ğ
>z�(�f��K.휒i�|
��}=s�׳ ��:͇�`:L
+d�a��eD��y3G��s� �^�ӽ�n�t�/�~�U/��p<�/&�`c�{`ګ��!�TU�	�.
Hy!L3���
a==�:���]l��k۪J�T�3
���59<C�O��>y
K&���_�b��Q��5
�+�U����
B�����-��8�+��p��O�ӝe"n�<4ݥ�x�G�$N�;�oJ�ݦ�S�q�L�tg�I��7Ŕ�&(������ ��e�m|�p(diX��(�.���0��}-3҉�~N����
1 �΀@x��]:���H�g43�f�n䛂��M 0/|��Z��|u}*
+az*^
*��:�0��WsYz^^�ܦ�6��l-[��g�~!Ǭ�z=��	��tk
0JYL�Jw����K�����]�tM7`Z6��ZMC�=�)��cn���w�htS�3�{����
<��Gxe$�Uc즆.�~��$
Z)Q���d�lK\�V�SY:�\��l�
+$�
+2 �`[�
+:��+�s�c"�-�7v�>KT'�1r��| 
+a
, l9�m#�~�{��F�cנ^kiY�aי����
k �9j��G+�R�Т����-ִ��XS��
�Q�J�3t[wŌj�0�-%"����b�,���DK<�3�QC��a��x�~�&����Cۜ�
�5�6/Ϛ��K
&w��9[Cw� z����(��v�����.��u�ʰ:�թ[�6D���
4m+4�#%�`pri��t[��X�

�b��z��Wk��
��TH�g���͛��T���i��&gG˵3���W݋(�h8�c���,�f���M׌�쳟�!�X^�����1V��ߕi՝P1�g�����_����A�Q���IM�%�|������+.|� d�?G{

Py^B:�$�����~A�q���Ճ*�w�:��ŅV��%�/�
�n��=W6����
�����PWyQ~�ғ�7�I�8	�l�1�>e��=�I�~���^..Ai���b�>�jRNĘ�&��2�/�>�2���b���t
#�K
I�garY�,�_��QNp�}٧��6
�f�8T=��ײ�������}x��%|%A9,�������7�Y�ݥ<f}ب�
+`�8�S�����
+�<�u��Z�D�4����1�����7���y�N�Z�B%1�$�r�f�����rC�^�+r 5������&�;%JG��v�A{m�dk��S�F��j_w��
e��I�L��;����˜�)�T�d��x��֪_�?2��5�D��翧�џ���i
+endstream
+endobj
+3445 0 obj <<
+/Type /Page
+/Contents 3446 0 R
+/Resources 3444 0 R
+/MediaBox [0 0 612 792]
+/Parent 2904 0 R
+/Annots [ 3288 0 R 3293 0 R 3294 0 R 3295 0 R 3296 0 R 3297 0 R 3298 0 R 3299 0 R 3300 0 R 3301 0 R 3302 0 R 3303 0 R 3304 0 R 3305 0 R 3306 0 R 3307 0 R 3308 0 R 3309 0 R 3310 0 R 3311 0 R 3312 0 R 3313 0 R 3314 0 R 3315 0 R 3316 0 R 3317 0 R 3318 0 R 3319 0 R 3320 0 R 3321 0 R 3322 0 R 3323 0 R 3324 0 R 3325 0 R 3326 0 R 3327 0 R 3328 0 R 3329 0 R 3330 0 R 3331 0 R 3332 0 R 3333 0 R 3334 0 R 3335 0 R 3336 0 R 3337 0 R 3338 0 R 3339 0 R 3340 0 R 3341 0 R 3342 0 R 3343 0 R 3344 0 R 3345  [...]
+>> endobj
+3288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 688.242 171.857 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 676.204 145.29 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.385 676.204 161.341 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.436 676.204 177.392 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 664.165 155.501 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 652.127 184.203 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.299 652.127 205.236 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.224 652.127 225.161 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.17 640.088 210.106 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.095 640.088 230.031 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+3302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.63 628.05 220.567 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3303 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.556 628.05 240.492 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3304 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 616.011 184.203 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3305 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.299 616.011 200.254 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3306 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.35 616.011 216.305 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.401 616.011 237.338 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.326 616.011 257.263 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 603.973 178.973 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 591.935 178.973 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 591.935 195.024 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.12 591.935 211.075 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.171 591.935 227.126 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.222 591.935 248.158 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.147 591.935 268.084 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 579.896 173.494 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.483 579.896 193.419 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.252 567.858 175.207 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.303 567.858 191.258 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.354 567.858 207.309 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.405 567.858 228.341 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.33 567.858 248.267 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 555.819 181.902 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 543.781 187.132 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 531.466 192.363 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 519.704 208.054 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 507.666 208.054 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 495.35 223.745 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 483.312 197.593 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 471.55 197.593 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 459.512 207.805 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+3332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 447.473 213.035 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+3333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 435.435 202.823 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 423.396 213.035 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 411.358 218.265 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+3336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 399.32 181.902 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+3337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 387.281 145.29 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 375.243 140.059 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+3339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.155 375.243 156.11 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 362.927 208.054 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+3341 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 350.889 192.114 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3342 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 338.851 160.732 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3343 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 327.089 145.041 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3344 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 315.05 197.593 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3345 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 303.012 207.805 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3346 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 290.974 197.593 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+3347 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 278.658 192.363 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+3348 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 266.897 192.363 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+3349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 254.582 150.52 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+3350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 242.543 187.132 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+3351 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 230.781 208.054 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+3352 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 218.466 213.284 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+3353 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 206.705 181.902 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+3354 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 194.389 176.672 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+3355 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 182.628 213.284 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+3356 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 170.312 213.284 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3357 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 158.551 213.284 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+3358 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 146.512 181.902 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 134.197 218.514 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+3360 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.941 122.435 249.897 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+3361 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 110.397 228.975 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+3362 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 98.359 192.363 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+3363 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 86.32 213.284 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+3364 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 74.005 176.672 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+3365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 62.243 155.75 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.846 62.243 176.783 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3367 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 50.205 165.962 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+3368 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.058 50.205 186.994 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3369 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 687.965 396.023 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3370 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 675.927 432.635 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+3371 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.832 664.165 458.787 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+3372 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 652.127 437.866 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+3373 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 640.088 406.235 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+3374 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 628.05 411.465 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3375 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 615.735 421.926 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+3376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 603.696 427.156 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+3377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 591.658 458.538 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+3378 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [467.753 579.896 484.69 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3379 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.832 567.858 463.768 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3380 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 555.819 432.386 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+3381 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 543.781 406.484 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 531.466 432.635 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 519.704 401.253 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 507.666 380.332 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+3385 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.428 507.666 396.383 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3386 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 495.627 385.562 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+3387 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.658 495.627 401.613 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3388 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 483.589 448.077 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3389 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 471.273 396.023 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+3390 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.119 471.273 412.074 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.17 471.273 428.125 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3392 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 459.235 401.253 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+3393 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.349 459.235 417.304 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+3394 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 447.197 437.617 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+3395 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.832 435.435 463.768 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+3396 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.832 423.396 463.768 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+3397 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.062 411.081 468.999 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+3398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [483.444 399.32 500.381 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+3399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.523 387.281 479.459 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+3400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 375.243 437.866 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+3401 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 363.204 411.465 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+3402 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 351.166 432.635 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+3403 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 338.851 406.484 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+3404 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 327.089 364.641 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 327.089 380.692 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3406 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 315.05 374.853 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3407 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.948 315.05 395.885 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+3408 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 303.012 380.083 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3409 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.179 303.012 401.115 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 290.974 359.411 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.506 290.974 375.462 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.557 290.974 391.512 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.608 290.974 407.563 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 266.897 488.483 277.745]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 254.858 526.596 265.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 242.82 449.894 253.668]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 230.781 409.944 241.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 230.781 424.888 241.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.983 230.781 445.92 241.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.909 230.781 465.845 241.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 218.743 416.032 229.591]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.123 206.705 411.078 217.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 194.666 396.439 205.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 182.628 369.622 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 170.589 390.793 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 158.274 416.944 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 146.236 396.023 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.119 146.236 412.074 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.17 146.236 428.125 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.221 146.236 444.176 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 134.197 406.235 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+3432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 122.159 401.253 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.349 122.159 417.304 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.4 122.159 433.355 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.451 122.159 449.406 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 110.12 411.465 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3437 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 98.359 385.562 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 86.32 385.562 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+3439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.658 86.32 401.613 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 74.282 395.774 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 62.243 401.004 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 50.205 396.023 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3447 0 obj <<
+/D [3445 0 R /XYZ 86.4 726.045 null]
+>> endobj
+3444 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3597 0 obj <<
+/Length 2479      
+/Filter /FlateDecode
+>>
+stream
+x��\[w�:~ϯ�1Yk��.H�1q�N:���Ng��b+S
.��5~$�s
����/�46{��m����Ʋ�wg�˳�f�Z
p���|�\
+��Ck����#�^��|o�
b���Ϸ���g����3(�n[���\B�����ﶵ����l��k�8|ok�������}���e<�C ��\}�{�{q��B����	�B���3l�&y����z�1>��_� ��_��.!6�E ��,���0J:�gnA{���m��+��U��(���t!C��fę�Z��#{�
d�=&�$/D�L�i��
W"�b��H�AG�6o�r���Oa��Bh�sq:�g;�ld���PI:1��	�*kYi��v]Y �H����x��..�}C��
:S_z�3��A���򫰔xi�s�Yאra#�\���/��_Lԥa�f��jj�Z���+/V�Y8`�+X��saU��yO�l������<eʫ<�;
+#�Bȍ�g�ݫ%bu�� �v���(J��`B.���_��g�À�����\3!-؝�*��/:�t�Z�Z�÷Q�\8��K�(�8����?b?��M�?�t��ݲo�[���R#l-�y�
��p�so#2I�W�>-0����Ep�8y�w��4�+0L)plxtVN��Y@���K�
�CXW�"
�/�C���K��E�'��c֥�&+-��{?H�������UEFK��_J�|�Z���mC�6��6�dk�y��u�"���IW�T�b�;������4�	��`]��F�,��߂��r(sG�<���<�=�6Z����6˕,mR�6�X��v�B��L����I��]�����h

�,-�����6�&��9���a���.ڽ�b+BUғEc-R����L�D�'�r��V��:C
�I�"Vi�)d�����;i���U^��煋�Fe�s��H ��n�a�w��.�?��9s���O�gN�>�F��_�} Z۷�H�f�k/Ϛ
+v�fj���J�-���*��[���Ŭi�*+.v_G���*��.;��G�j
zkkU=���Z�`��a��O�˞�X
+(
�X
+e��Րj0�u ���*%94���eVg+� :�mm��:��I3�2
B�+E9��ؓ
�7��Fo�-���VFu�(�JQ�%y�UmL�3���]"+
qF1W�"�
͕}���ec'.���
�&+QD���M���
6�� (O�Z�E�����+Eaz�"�M��b�D��.�� �}�hb�I��i����y�P7�ɕ�0��pX�Qw�E�
���7���f
���M��w��1\h����E~G��(�C�g�B ���X�C���a[����L��2�l���f�������j,��(L����4�gI
�,OIH�q<�Q�~]�+�ݞM������E��.�8��q0�4ܮ6_-�6a
+֫·H�n�A	��������P,���e�N4#��]��9��4D|����]��`��N�T�d6���8ih ���(1�|X�$��a�2�
�(
��6��e
��.���Q����~{ ��
�e�Aݗ	�
+⽷�c0��6
M�!1�R1x�@}ζ!�T_�y��6_�9��i�Wk���\+��m�R�E�}�zq�;
#_�P�ٻӒ��0�#��*�$O?�B��8�KT�(�i�2��4���:�zK(���c:�K��1�f>i=9U_�Ux����O��0+�g�VL�|� ��h=�ls�g�n����3&���ܨfpנfT�|�bo�
e�ug��Y�����_���W���ߊ��?���/��],��*�
�'H�~�!�z����nQ
�b���+�T&��7&R�R���齻�(���ώ���ԓ�_T:��
�wTޢo�V��jw�?�Rm�
M�59
�Jn�1
�8��
��j2{�O4�e�R��1���+*��N��t>$Ƴ��Oxr���o\t���
�{ܱh�����9U�0���a'
��NÉ��hK�@���%b6��3T���ڻ��r��3�R)•kө��CV�K�b���
ao],���Օ�Muu���q�C%(�['ٲ:��|Y-(�]��
+�I�j��Q�75�]"[��)�9��OFPz�ɩ҆�};���-o���
z�Bdu�v,�HF�,)������蔙� E'��whQ���{��{�;���S5�2�v$�6N�T���t5��ջiC5��cu���
+�|���v�d������4�
�\<L&��b`���W{�
+V�
$�Dz�%�,�Jh�=��lj�����Z`��8�E��CE��Ӎ��n�A��(,���΋!Y�
�u֗�"��E���H���uI���V(���")M�1JFz�L���jM/�b㙗�{
Q�
��k^rq������h��7�|�Js��^�ZcI��Gv.���#��tKG�e.D��fOx�]
�[0�ۓ�L�D��/<v��Cx�}ӭ�F��X|��qv�����Yi.����� ��0
+endstream
+endobj
+3596 0 obj <<
+/Type /Page
+/Contents 3597 0 R
+/Resources 3595 0 R
+/MediaBox [0 0 612 792]
+/Parent 2904 0 R
+/Annots [ 3443 0 R 3448 0 R 3449 0 R 3450 0 R 3451 0 R 3452 0 R 3453 0 R 3454 0 R 3455 0 R 3456 0 R 3457 0 R 3458 0 R 3459 0 R 3460 0 R 3461 0 R 3462 0 R 3463 0 R 3464 0 R 3465 0 R 3466 0 R 3467 0 R 3468 0 R 3469 0 R 3470 0 R 3471 0 R 3472 0 R 3473 0 R 3474 0 R 3475 0 R 3476 0 R 3477 0 R 3478 0 R 3479 0 R 3480 0 R 3481 0 R 3482 0 R 3483 0 R 3484 0 R 3485 0 R 3486 0 R 3487 0 R 3488 0 R 3489 0 R 3490 0 R 3491 0 R 3492 0 R 3493 0 R 3494 0 R 3495 0 R 3496 0 R 3497 0 R 3498 0 R 3499 0 R 3500  [...]
+>> endobj
+3443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 688.242 181.653 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 676.204 166.211 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+3449 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.307 676.204 182.262 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3450 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 664.165 176.423 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3451 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.518 664.165 197.455 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 652.127 181.653 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+3453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.749 652.127 202.685 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 640.088 228.726 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 628.05 186.883 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 616.011 186.883 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+3457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.979 616.011 207.916 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 603.973 197.344 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 591.935 192.114 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+3460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.21 591.935 213.146 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+3461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 579.896 228.726 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+3462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 567.858 228.726 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+3463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 555.819 202.823 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 543.781 202.823 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 531.742 150.52 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.616 531.742 166.571 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 519.704 160.732 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 507.666 145.29 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+3469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.385 507.666 161.341 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 495.627 155.501 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+3471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.597 495.627 176.534 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 483.589 160.732 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.827 483.589 181.764 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+3474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 471.55 150.52 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 459.512 160.981 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.917 435.435 236.891 446.283]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+3477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.88 435.435 246.854 446.283]
+/Subtype /Link
+/A << /S /GoTo /D (page.2) >>
+>> endobj
+3478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.908 423.396 199.863 434.245]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+3479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.039 411.358 200.013 422.206]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+3480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.763 387.281 223.718 398.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [160.206 375.243 172.162 386.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.758 363.204 162.713 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.544 351.166 166.499 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.094 339.127 156.05 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+3485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.71 327.089 166.665 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.481 315.05 168.436 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.429 303.012 179.384 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.875 290.974 190.83 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.822 278.935 222.777 289.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+3490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.102 266.897 148.058 277.745]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+3491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 266.897 163.002 277.745]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+3492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.357 254.858 225.312 265.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+3493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.82 242.82 178.776 253.668]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.873 230.781 243.81 241.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+3495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 218.743 134.829 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.561 206.705 159.516 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 194.666 164.747 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 182.628 154.286 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+3499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.022 170.312 169.977 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+3500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.022 158.274 169.977 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+3501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.791 146.236 164.747 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+3502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.252 134.197 175.207 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+3503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.713 122.159 185.668 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+3504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 110.397 202.823 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+3505 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 98.359 160.981 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+3506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 86.32 160.981 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+3507 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.076 86.32 177.032 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+3508 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 74.282 171.441 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+3509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.537 74.282 187.492 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+3510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 62.243 166.211 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+3511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.307 62.243 187.243 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 50.205 202.823 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+3513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 688.242 427.405 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+3514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 675.927 411.714 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+3515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 664.165 416.944 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+3516 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 652.127 396.023 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3517 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 640.088 422.175 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3518 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 628.05 369.871 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+3519 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 615.735 401.253 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3520 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 603.973 437.866 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3521 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 591.935 411.714 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3522 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 579.896 422.175 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+3523 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 567.858 437.866 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+3524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 555.819 432.635 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+3525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 543.781 427.405 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 531.742 422.175 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 519.427 416.944 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 507.389 427.405 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+3529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 495.627 390.793 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 483.312 396.023 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+3531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 471.55 453.557 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+3532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 459.512 432.635 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+3533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 447.473 443.096 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 435.435 411.714 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 423.396 437.617 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+3536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 411.358 427.405 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+3537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 399.32 422.175 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+3538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 387.281 411.714 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+3539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 375.243 453.557 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+3540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 363.204 411.714 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 350.889 437.866 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 338.851 401.253 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+3543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 326.812 416.944 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+3544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 315.05 401.253 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+3545 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 303.012 408.785 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3546 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 303.012 424.836 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3547 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.932 303.012 445.868 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3548 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.964 303.012 466.9 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3549 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.751 290.974 434.688 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3550 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.783 290.974 455.72 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.143) >>
+>> endobj
+3551 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.212 278.935 445.148 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3552 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.137 278.935 465.074 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+3553 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 266.897 408.785 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3554 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 266.897 424.836 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.932 266.897 440.887 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [444.983 266.897 461.919 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.015 266.897 482.951 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 254.858 403.555 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 254.858 419.606 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 242.82 403.555 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3561 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 242.82 419.606 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3562 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.701 242.82 435.657 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3563 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.752 242.82 451.707 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3564 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.803 242.82 472.74 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3565 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.836 242.82 493.772 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3566 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 230.781 398.075 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.171 230.781 419.108 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3568 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 218.743 424.476 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 206.705 399.789 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3570 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.885 206.705 415.84 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3571 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.935 206.705 431.891 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3572 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.986 206.705 447.942 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3573 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.037 206.705 468.974 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3574 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [473.07 206.705 490.006 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3575 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 194.389 416.944 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3576 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 182.628 432.635 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 170.312 448.326 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 158.274 432.635 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.91 146.236 442.847 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 134.197 448.077 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 122.159 416.944 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 110.397 369.871 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+3583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.967 110.397 385.922 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.018 110.397 406.954 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 98.359 380.083 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+3586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.179 98.359 401.115 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+3587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 86.32 380.083 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+3588 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.179 86.32 401.115 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+3589 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 62.243 488.483 73.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3590 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 50.205 442.461 60.788]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3598 0 obj <<
+/D [3596 0 R /XYZ 86.4 726.045 null]
+>> endobj
+3595 0 obj <<
+/Font << /F36 740 0 R /F48 982 0 R /F8 741 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3777 0 obj <<
+/Length 2241      
+/Filter /FlateDecode
+>>
+stream
+x��[[s��~���Q�:��;�c[.�l�9�S��,a*��r��?�F�'[�Y��o��u��;�vN���
�6f��'�tn�
%w\�!Ɉs3s>ή�O�;�����"L��=��K�>:�9z8"�-v��}���tq��/���ɹ���5�����C>͝���Gx�ځC�D�
+GzW抣UFK>
1��r�I��!�!��ˇ�#�s����������\+�U�	��_cgD��ܸ�h�4/O
+
�R�Ջ\�*��r� �8���j���n3$��4}�`���V�J�w���T
��rZ��
|-C\Ԯe
̃
���y��1�M��ϐV��;;~3Y�N���Y�	�3��}�ҫ���Y��6��`#��`�p6�t�W��ذ>��z�y�
�j��A��3�
+��
+���it��9�jG�[�
��l��,��m���P��eܕ�b,��{.3
6a
,�吺�dmI�$�X�/��K��M�f
+��)��6Ŧk�>��T{BH^�\G��W�2D�z�
+�n���0P�U&�{�V|qaЙr:�G� @�������MՍT""ڸQ`o ��W�`v�)
(�RCG�m�o��#�;�.DA��QFJF+G&�JX&�����LE=����ɥA�`H�~��\DA���<J����H~Qꀵ�c(��C)m�n��
�lr�ú
+إM^�=�bw�<��M�' �{�
�4�އRM���7g�Ҥmf�
�Ul�����J O���PD��;H₴�{w�[���a�6n箲s� �t�J?
�
+���8�J�\�{�
�q=�;Hz����pg{��{R&�*�
�W��`TҒ�@��@���PT�‘���Dq��຾?�A�?��ڵ?�(�s7�D�uU�
����t8L>�{w2�TM�����!i���H�S�=/U�m,�p�A,]�� ��;.�e[���i�\��d<�
{͞�d�D(��ֹ��L�j�x-�>�i`IHIꩶH6���}� (�I��'��
������`��0��,	b�
&�~̢�� ����>��`�P&��10bI+[_��j���P�s���A�d/�L��A�U����(�2Y�S��V
3�8��7i"
+��	�"k
�
@ra�8ɢ5=U0��bYW�gYa ���k� +���@iUJ!����4Z��!�5��#��۶�

�f� q:���
+^�9��v�^{;TA�-��Yi2��I��+�(��Z�4W.l�-gt'
0v�d���+�7����+h&]��
��K���y��`��ĉ�U��ŐT�'���j @��qҹ�h`�b�Q
����s�P��"u�̽�ڧ�'?�F��eҵQ��)޵)v���6�]��a1�wg�H�l��޺�y��RK���ݔ�u(�H(�H�f� �qvF��e��Ӱ׸��cܦ�8����2N�R~��8;k9�e
YT�qfr�`��#(b��*�q4�BZ���$�<���Դc�5m�m֢q1�w��ƥ}�Oj+�V��-D�U�7��`�뮷���@����(�`��>�Az
~�T@���Y����o>���Q
&�[��@ci�O�?1�S�)��
�ڊ_��|
����.c-V��6��I[#�A��Ț�Ѫ4���[�P�BZ[�_T�Ҫx��	w���pANR�J����-t�� zy{
b`A�"�k=�qZ�?�W?��|�qN�mǔRQ���E��!��a��B�c��6�����L�51��#�oD	bۻ��
+궇�겉�n��,{�-��l�B��>�򰉒PjM!/k�*}<�fc5����F�̢��X�hn�?����4�—����xߑ��
bXi���,�AŅ�Ww!�q!�a.�.tm���&��?;
�>`�}f�Y����t]Qc��.�h��˫xHQ���6�d�q�
��y�7;~��cC������Y&���?,%�/
+S�
V;OS)�����|c���ܧ�Q�2�<N��}(=Nc�[���d��\O�����3��|}�&zxU�6���&�eȥ\An�o�1P���e�ZV�@+
�
�[�
+
鷋�
5�ع�B��0����J;II�����R�Z���l���=�(n��]�,�ђM`�:���$�\�8!My�d�\�q���
a���nbY۲�Q[�â��r���}��C��/�9
+��q$("�
�����g'����
�{ga�v��˄D�K��1ک��#.��Ε���������}�
+endstream
+endobj
+3776 0 obj <<
+/Type /Page
+/Contents 3777 0 R
+/Resources 3775 0 R
+/MediaBox [0 0 612 792]
+/Parent 3779 0 R
+/Annots [ 3591 0 R 3592 0 R 3593 0 R 3594 0 R 3599 0 R 3600 0 R 3601 0 R 3602 0 R 3603 0 R 3604 0 R 3605 0 R 3606 0 R 3607 0 R 3608 0 R 3609 0 R 3610 0 R 3611 0 R 3612 0 R 3613 0 R 3614 0 R 3615 0 R 3616 0 R 3617 0 R 3618 0 R 3619 0 R 3620 0 R 3621 0 R 3622 0 R 3623 0 R 3624 0 R 3625 0 R 3626 0 R 3627 0 R 3628 0 R 3629 0 R 3630 0 R 3631 0 R 3632 0 R 3633 0 R 3634 0 R 3635 0 R 3636 0 R 3637 0 R 3638 0 R 3639 0 R 3640 0 R 3641 0 R 3642 0 R 3643 0 R 3644 0 R 3645 0 R 3646 0 R 3647 0 R 3648  [...]
+>> endobj
+3591 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 688.242 185.362 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3592 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 688.242 200.306 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3593 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.402 688.242 221.338 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3594 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.327 688.242 241.264 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3599 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 676.197 191.45 687.045]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3600 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 676.197 206.394 687.045]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3601 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 664.152 251.614 675]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3602 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 664.152 267.665 675]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.761 664.152 288.697 675]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+3604 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.445 652.106 249.4 662.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3605 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.496 652.106 265.451 662.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3606 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.547 652.106 286.483 662.955]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+3607 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 640.061 171.857 650.909]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3608 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 627.739 145.29 638.366]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3609 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.385 627.739 161.341 638.366]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3610 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.436 627.739 177.392 638.366]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 603.925 263.901 614.774]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3612 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 591.88 217.879 602.464]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3613 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 579.835 185.362 590.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3614 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 579.835 200.306 590.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3615 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.402 579.835 221.338 590.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3616 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.327 579.835 241.264 590.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3617 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 567.79 191.45 578.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3618 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 567.79 206.394 578.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 555.745 251.614 566.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 555.745 267.665 566.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.761 555.745 288.697 566.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+3622 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.445 543.699 249.4 554.547]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3623 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.496 543.699 265.451 554.547]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3624 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [269.547 543.699 286.483 554.547]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+3625 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 531.654 171.857 542.502]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3626 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 519.332 145.29 529.959]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3627 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.385 519.332 161.341 529.959]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3628 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.436 519.332 177.392 529.959]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3629 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.457 507.564 196.413 517.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3630 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [202.694 507.564 214.649 517.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3631 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.931 507.564 232.886 517.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+3632 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.168 507.564 256.104 517.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [259.093 507.564 276.029 517.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [282.311 507.564 299.247 517.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+3635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 497.546 142.191 505.958]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.258 483.563 195.213 493.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3637 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.202 483.563 210.157 493.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.94 483.563 226.895 493.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.884 483.563 241.839 493.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3640 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.622 483.563 258.577 493.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+3641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [263.359 483.563 275.315 493.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [280.097 483.563 297.034 493.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 471.608 142.191 481.958]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.286 471.608 163.223 481.958]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+3645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.319 471.608 184.255 481.958]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 459.563 189.434 469.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.529 459.563 205.485 469.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+3648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.58 459.563 226.517 469.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+3649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.613 459.563 247.549 469.913]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.924 447.518 190.879 457.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.782 447.518 208.737 457.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.726 447.518 223.681 457.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.584 447.518 241.539 457.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [244.528 447.518 256.483 457.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.386 447.518 279.322 457.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3656 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [282.311 447.518 299.247 457.868]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3657 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 435.562 142.191 445.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+3658 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.286 435.562 163.223 445.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 423.517 183.954 433.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.943 423.517 203.88 433.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 411.472 194.664 421.822]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.76 411.472 215.696 421.822]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.47 399.427 186.425 409.777]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.468 399.427 203.423 409.777]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.412 399.427 218.367 409.777]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.409 399.427 235.364 409.777]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.407 399.427 257.343 409.777]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [260.332 399.427 277.269 409.777]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [282.311 399.427 299.247 409.777]
+/Subtype /Link
+/A << /S /GoTo /D (page.149) >>
+>> endobj
+3670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 389.409 142.191 397.822]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+3671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 375.149 202.823 385.776]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 363.104 223.745 373.731]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.25 351.059 234.205 361.686]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+3674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 339.014 218.514 349.641]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 326.969 223.745 337.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 314.923 228.975 325.55]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+3677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 302.878 218.514 313.505]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+3678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.25 290.833 234.205 301.46]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 278.788 208.054 289.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+3680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 266.742 213.284 277.369]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+3681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 254.697 202.823 265.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 242.652 202.823 253.279]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 230.607 192.363 241.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 218.561 202.574 229.188]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 206.516 192.363 217.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 194.471 202.574 205.098]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.481 182.426 239.436 193.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 170.38 213.284 181.007]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.25 158.335 239.187 168.962]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.481 146.29 244.417 156.917]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 134.245 181.902 144.872]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 122.199 192.114 132.826]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 110.154 218.514 120.781]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.25 98.109 234.205 108.736]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 86.064 228.726 96.691]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 74.019 233.956 84.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 50.205 263.901 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 688.242 442.461 698.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 676.287 409.944 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 676.287 424.888 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.983 676.287 445.92 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.909 676.287 465.845 687.135]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 664.332 416.032 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 664.332 430.976 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.24 652.377 476.195 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.291 652.377 492.246 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.342 652.377 513.279 663.225]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+3708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.026 640.421 473.981 651.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.077 640.421 490.032 651.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [494.128 640.421 511.065 651.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+3711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 628.466 396.439 639.314]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 616.234 380.332 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.428 616.234 396.383 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.479 616.234 412.434 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 604.556 406.484 614.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+3716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 592.601 416.695 602.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+3717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 568.69 488.483 579.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 556.735 526.596 567.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 544.78 449.894 555.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 532.825 409.944 543.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 532.825 424.888 543.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.983 532.825 445.92 543.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.909 532.825 465.845 543.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 520.87 416.032 531.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 508.915 396.439 519.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 496.683 390.793 507.31]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.888 496.683 406.844 507.31]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+3728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.939 496.683 422.895 507.31]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.99 496.683 438.945 507.31]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 484.728 401.004 495.354]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 472.772 448.326 483.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 461.094 406.484 471.444]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+3733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 449.139 416.695 459.489]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+3734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 437.184 406.484 447.534]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+3735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.225 425.228 354.18 435.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.276 425.228 375.213 435.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.52 379.922 438.476 390.77]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 367.967 415.063 378.815]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 367.967 431.114 378.815]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 367.967 446.058 378.815]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.44 355.458 472.376 367.413]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+3742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.472 355.458 493.409 367.413]
+/Subtype /Link
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+3743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.52 332.101 438.476 342.949]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 320.146 415.063 330.994]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 320.146 431.114 330.994]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 320.146 446.058 330.994]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+3747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.44 307.637 472.376 319.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.472 307.637 493.409 319.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3749 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [497.504 307.637 514.441 319.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+3750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.52 284.28 438.476 295.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 272.325 415.063 283.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 272.325 431.114 283.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+3753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.44 247.861 472.376 259.817]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.472 247.861 493.409 259.817]
+/Subtype /Link
+/A << /S /GoTo /D (page.144) >>
+>> endobj
+3755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 224.504 415.063 235.353]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 224.504 431.114 235.353]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+3757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 224.504 446.058 235.353]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+3758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.44 211.996 472.376 223.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.472 211.996 493.409 223.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+3760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [497.504 211.996 514.441 223.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.143) >>
+>> endobj
+3761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.797 179.198 406.733 189.548]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+3762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.995 157.801 348.95 168.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+3763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 145.846 359.411 156.196]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.352 121.936 443.307 132.784]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.93 109.981 463.886 120.829]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.138 98.025 447.093 108.874]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.991 86.07 395.946 96.918]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+3768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.042 86.07 411.997 96.918]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+3769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.093 86.07 433.029 96.918]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+3770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.991 74.115 395.946 84.963]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+3771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.075 62.16 449.03 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 50.205 384.098 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+3773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.194 50.205 405.13 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3778 0 obj <<
+/D [3776 0 R /XYZ 86.4 726.045 null]
+>> endobj
+3775 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R /F16 729 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+3909 0 obj <<
+/Length 3251      
+/Filter /FlateDecode
+>>
+stream
+x��]�r�}�W�Ѫ���_
}��޲.�'U�>�⬖�4���u���i
9�"g �9��X"E�i
�t40c:�
��ۓW㓟~z��\�ƿ��&rd�#Z��x:��sz�������8&�{���/ߜ�����||��	���5�W�J=��v��W:��_~Q"�
}�?�m$�#
~��>�������]w�c�����~��v����|{2�r&�x!�ޘ��g��3.��[k�OG�8�ʎ�6�R�5A��a
��-,��㺶��d~~=_.����z�z�ZM~x��![�Y74�����ў9���qB��
�R�h�!�!�9�6>��8�
`@5����]���~J�`DX�J�	A��Rm{���������2��rٱ
ד�d>��O�
�B:ݼ�n��
�0�ZK
���K�t�{�] ����+�m��
�Sd�%�t>��
�c�����S��&L�T�
��C��.9���Dg0�K,e�]�A ;v�z����L��NO$����,�,�ޒ`.�n�[.|�V�ɼ4�(��Hzc[YA$Fh{C�Pd��[��a�)p� 	1�%X�af �s�1t��9�{�
���a���|��cA�`��X2��qa�`��L�����~��2�%�4T^��˔���1t��ĸz&��n�c?�g�q.�B�U��D�y&��n�c?�$ǒhJgYr�s�>
���%��3/w#0
�ѣ��Nke��0g�i�ѿQ��l?��r/��h�V^�r��`�O�,ݦy�_��?:[fΗL����%Ǚ��P��ȑVkE�w��M��ʕ�m�iYm
i �

� �$V�|��=d�.
%�Z��?�5��ctr�%cu>��
�c�Qfy�� �

��-a��.� �
�0�&���Y`ç��h�xKں|��=\�.��1�)�%̵E��`H?#m��#��aY�I	j�8�Ƒ��\�8�).
)o
��/H�FtR#a`�&SC!�K�
+��l��m��P-n׿�	>	Z�\�L�M��
D�9M�4�W�p�h�q�{Kҩt���[�Ci3�����
�����-�N'�
:
cU�ZD�G�֐1t��$B+!��r�@t�=H�j��pVPn$F��[q�X�L���E�4��Ǵ�J
Y�jBB	��[�=r��t9t�{��\f@
(!
+�1�-q%2X.�,��C��
#���
僢�
��i��.&T{��0�0P�[�
;��30��lR�j�P
 o�)�Fp9j 8�
(
[J�JN��A����[b�$Q���P܂
$��0����%�\�威�%	�n����
�~:0�7�D���t���V~�_e	�(�*��J#�
50
������
��K.q����=�2X|J��8D�m�A4Df~���H�αZ%�[��Q�$�`EOOp�R��
�
F�L�堁�u�$�b�?���*�HKF�$��A�1� 9��#z#��w*a��%��=pB�o�Pg0��r.T
y��|�Z�YE���ޒ6,��r��q
=P.f�frc�(
���-i.�y.G<���t��Y3b
��𖔑�$�#�c�!�up�8���dj���xK��&s\�
8���:��J��,
|
C[xKҘt�ˑ�1�0�Kq��fX�j���$o�@׫�b�o
tP���w�[�ô��!��%(]6oHX�Hp1j�7�
�S
'��DyE	������c�aZ�Y1l
�����i���6�ƨCl��}��5���
�C<����[ڐ�tR%O���[X��wfM��
�1*���4������,���Sp�
$O�mk�ݟO��
��v��
+�yS-���H�2ٛ�J�5VS�x@�X��=��5������A�����sx
����j2��q����< |�ԏ�aE
	�S�0N\��y}uq��
F�����:��#��5�n���ɝK��XHy��?��nun��
�_�����KiQ�!�+���W��-
VI.�	*Z$����e�~����t��F n��K㷻j*�b�Jg���]��.Տ�D��" 7�����=�K�����7N��W9	�U{S�y4^/��[�[����W����O���zo
�]0e�m�7/�/6
�mek�
?�*I4M�
+r��
�^0��H���7F
P8$P��$0�B-�Ҍ'Q���P�
=�J�
����NjRռ��|j��
��q�mn�
+(Ԣ�
+�݊η�^}8�|;~��X0�P�-�U�ic7+�M���V(bכ�j�9�ﻹFHV;�
+��Al�@1ʙL�
+	�BJ��®�n͡�nv@vc��ƭ���Iͷ��0J��\o��\��,����b�����t�S_(܂)�����-h�m
ZZ�\z�&0��.T(�֛
+7b
,e��{��>�t����ů���("כ�'���
�g����Oq8I,1�Hn9j�m�z�B޺W�O�Aѹ�u[�����a����1��&T�6�en^O�?��K��M=n��㢣�!�6%-
��x��ͧ=���pT� [H�R������H�V�ơ�k�qΤL+h3�1h��" 7���ba��Ez��
�*N����sb����U�fVc�-

W(G
T
kR`�=��o��۩x���C
ʚBXߴ�	s����h��b�n紅z܂��>�J�DY�c�#R	� ��g
�3���|ƨ��8� �3.QXk9��v�L��)E m�4�R�fJc��)Z�h(���W����_d}[��q�b�0�z�h����֒��t�xZ����3�V��-�9�D�!��[ϖ����Ɵ-�
��m#����
����)�����;YMOk����_��j�78�:]�:YL7n�g�j����1o��˼z�|�?��6��O���]�3�y���g����
�o�U<��=�i���5[���l�d���~w��6[ v�7��t�Cu�r2�y�O�=
)�����C�l]� s3������Ϛn���=O�mN\�9�?&S�êj��⺺]�L�e��-�S�j�N��S&!*�=wg��k���%a_�8�VM2�P�/9oq�_{�Lgu���+XO4;�f�&�	��`3"11P�|�
lٝ���&��$��^�;jLV6��xީ����|X�-�� [...]
B�ªT"�:IwH�D�9�@�^�r�u��E�A�Mg���ɾ[Ua�z]����s�2�e%4>�Nع70�L
r�
�*���%xQm	{,�}aA;�[�������
+endstream
+endobj
+3908 0 obj <<
+/Type /Page
+/Contents 3909 0 R
+/Resources 3907 0 R
+/MediaBox [0 0 612 792]
+/Parent 3779 0 R
+/Annots [ 3774 0 R 3780 0 R 3781 0 R 3782 0 R 3783 0 R 3784 0 R 3785 0 R 3786 0 R 3787 0 R 3788 0 R 3789 0 R 3790 0 R 3791 0 R 3792 0 R 3793 0 R 3794 0 R 3795 0 R 3796 0 R 3797 0 R 3798 0 R 3799 0 R 3800 0 R 3801 0 R 3802 0 R 3803 0 R 3804 0 R 3805 0 R 3806 0 R 3807 0 R 3808 0 R 3809 0 R 3810 0 R 3811 0 R 3812 0 R 3813 0 R 3814 0 R 3815 0 R 3816 0 R 3817 0 R 3818 0 R 3819 0 R 3820 0 R 3821 0 R 3822 0 R 3823 0 R 3824 0 R 3825 0 R 3826 0 R 3827 0 R 3828 0 R 3829 0 R 3830 0 R 3831 0 R 3832  [...]
+>> endobj
+3774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.002 688.242 117.976 698.98]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+3780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.404 664.399 206.34 675.026]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+3781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 652.351 241.488 662.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 640.303 251.949 650.929]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+3783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 628.254 241.488 638.881]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.321 616.206 236.258 626.832]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 604.157 251.949 614.784]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 592.109 241.488 602.736]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+3787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.555 580.06 232.492 590.687]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+3788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 568.012 267.64 578.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.164 555.963 278.101 566.59]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+3790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 543.915 267.64 554.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 531.866 262.41 542.493]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [261.164 519.818 278.101 530.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 507.769 267.64 518.396]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+3794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.864 495.721 216.801 506.348]
+/Subtype /Link
+/A << /S /GoTo /D (page.154) >>
+>> endobj
+3795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 483.673 251.949 494.299]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 471.624 262.41 482.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+3797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 459.576 251.949 470.202]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.782 447.527 246.718 458.154]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 435.479 262.41 446.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+3800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 423.43 251.949 434.057]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+3801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 411.659 143.825 422.009]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 411.659 164.857 422.009]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 399.333 204.876 409.96]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.4 387.285 215.336 397.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+3805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.4 375.236 215.336 385.863]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+3806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 363.188 204.876 373.815]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+3807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 351.14 241.488 361.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+3808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 339.091 204.876 349.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 327.319 199.645 337.669]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 314.994 178.724 325.621]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 303.222 189.185 313.573]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+3812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 290.897 178.724 301.524]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 279.126 173.494 289.476]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+3814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 267.077 189.185 277.427]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 255.029 178.724 265.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+3816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 242.703 173.494 253.33]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 230.932 183.954 241.282]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 218.883 183.954 229.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 206.835 173.494 217.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+3820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 194.51 199.645 205.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.17 182.461 210.106 193.088]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 170.413 199.645 181.039]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 158.364 194.415 168.991]
+/Subtype /Link
+/A << /S /GoTo /D (page.169) >>
+>> endobj
+3824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.17 146.316 210.106 156.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 134.267 199.645 144.894]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+3826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 122.219 183.954 132.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 110.447 194.415 120.797]
+/Subtype /Link
+/A << /S /GoTo /D (page.162) >>
+>> endobj
+3828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 98.122 183.954 108.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.168) >>
+>> endobj
+3829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 86.35 178.724 96.7]
+/Subtype /Link
+/A << /S /GoTo /D (page.170) >>
+>> endobj
+3830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 74.302 194.415 84.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.167) >>
+>> endobj
+3831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 62.253 183.954 72.603]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+3832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 50.205 160.732 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.186) >>
+>> endobj
+3833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 688.242 390.544 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+3834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 675.914 390.544 686.541]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+3835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.639 675.914 411.576 686.541]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 663.863 395.774 674.49]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+3837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 663.863 416.806 674.49]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 651.812 395.774 662.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.184) >>
+>> endobj
+3839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 651.812 416.806 662.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.187) >>
+>> endobj
+3840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 640.037 377.154 650.387]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 627.986 403.306 638.336]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 615.935 392.845 626.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.160) >>
+>> endobj
+3843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 603.883 398.075 614.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+3844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 591.832 392.845 602.182]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+3845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 579.781 387.615 590.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 567.73 377.154 578.08]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 555.678 382.384 566.028]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+3848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 543.627 377.154 553.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+3849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 531.576 408.536 541.926]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 519.525 382.384 529.875]
+/Subtype /Link
+/A << /S /GoTo /D (page.164) >>
+>> endobj
+3851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.987 507.473 371.924 517.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 495.422 377.154 505.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.166) >>
+>> endobj
+3853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.987 483.371 371.924 493.721]
+/Subtype /Link
+/A << /S /GoTo /D (page.159) >>
+>> endobj
+3854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 471.319 398.075 481.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 459.268 392.845 469.618]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+3856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 447.217 387.615 457.567]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+3857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 435.166 403.306 445.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.826 423.114 422.762 433.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.596 411.063 417.532 421.413]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+3860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.135 399.012 407.071 409.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.163) >>
+>> endobj
+3861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.674 386.961 396.611 397.311]
+/Subtype /Link
+/A << /S /GoTo /D (page.161) >>
+>> endobj
+3862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.905 374.909 401.841 385.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.165) >>
+>> endobj
+3863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.674 362.858 396.611 373.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.158) >>
+>> endobj
+3864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.832 350.807 404.768 361.655]
+/Subtype /Link
+/A << /S /GoTo /D (page.153) >>
+>> endobj
+3865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.911 327.192 358.885 337.929]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+3866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.571 303.089 422.508 313.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.597 291.038 425.552 301.886]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.648 291.038 446.584 301.886]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+3869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.573 291.038 466.509 301.886]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.866 278.987 427.821 289.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+3871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.917 278.987 448.853 289.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.125) >>
+>> endobj
+3872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.842 278.987 468.779 289.835]
+/Subtype /Link
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+3873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.866 266.935 427.821 277.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+3874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.81 266.935 442.765 277.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.98) >>
+>> endobj
+3875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.551 254.884 467.506 265.732]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.495 254.884 482.45 265.732]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.015 242.833 439.97 253.681]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.959 242.833 454.914 253.681]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.01 242.833 475.946 253.681]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.935 242.833 495.872 253.681]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.601 230.781 446.556 241.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.652 230.781 467.589 241.63]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3883 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.902 218.73 395.858 229.578]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+3884 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.846 218.73 410.802 229.578]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+3885 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 196.661 366.772 205.074]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+3886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.761 196.661 386.697 205.074]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.988 182.673 372.943 193.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+3888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.932 182.673 387.887 193.521]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+3889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.716 170.621 430.671 181.469]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+3890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.66 170.621 445.616 181.469]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+3891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.711 170.621 466.648 181.469]
+/Subtype /Link
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+3892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.637 170.621 486.573 181.469]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.679 146.519 521.615 157.367]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.836 136.501 366.772 144.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+3895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.571 122.512 422.508 133.361]
+/Subtype /Link
+/A << /S /GoTo /D (page.131) >>
+>> endobj
+3896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.597 110.461 425.552 121.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.541 110.461 440.496 121.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [489.645 98.41 501.6 109.258]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+3899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.866 86.359 427.821 97.207]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+3900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.81 86.359 442.765 97.207]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+3901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.866 74.307 427.821 85.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+3902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.81 74.307 447.746 85.156]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.551 62.256 467.506 73.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.602 62.256 488.538 73.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.789 50.205 455.744 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+3910 0 obj <<
+/D [3908 0 R /XYZ 86.4 726.045 null]
+>> endobj
+3907 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+4012 0 obj <<
+/Length 2026      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s�F~ׯ�Q��6��nw�I��vf:����L�� J������,V�I��!�,/�g�󝳸��q�g?<�^�P���D8���9
��y���7��^�z���O#��Ó���׳��O3
ߺn��H2�6����N��q���^�q��O�s?�e���#����@�pG�aOh�QrE�Tyv��i
�*�ZPJ�J���>�?U|W����׍�w?Μ����}��]��#���Z!{Z�%_���Ղ�r�i�yPn�A턱9xv����4ޖQ�
�G�
+ �8Q�QWuDbP��_�<�w��ܢM��8���s!M{��6��ź2��7�K2�I��?1
kOn���Pi7t��X�^������ur����1v��
���6�����'��˂�h6
�Q�,d�ga�k�̶�ֲI��	�m۱��(p��a��B2m�ZFA��Py�6'nU
�T�J��5��y���� ��E?�>Vk_��}<
Q�[Ȏ�+H���
���P交]��)�TV|���
l�ݕ�P�5����
�Q�
�+�l�$�H��j�&aTE"J�G���U�\V1
����e���e��mUy���$��u��E���N�ʹ@Pd
�}�֚h�b[�|Ql�,�Th����'�B1�S`��S�3>��3o��\>�*
[ ���

�3�1ͿT2�|G�*h�(BQ}��B��9n�/����5���7l�vA���������C�Q�.�!
����Dv*.�f�P3�@rO��,��
]QUE!�;A�|`���
�5
+�mMz�&�1V��TZ���p��Xm��m��OLl{��.��g���=[16
b*�����h�
+���`��V,kh�4��gB tz�ȇ<Z?�p�xj�lB6mH�xG+�O_T�`�$�'PwNXG}��]}/i?��=��ӄ!-s1���m83�p+�O5�$NF�*j��H�P�f�~B
�=]iy�T
e&��N�A��x,�F��\H�0�
s�>�
�\�J�]R}r��ޞ�ZE-��7A���&(��/��x��Hiit�q�.(Ϭ�X�ɥ����۷�#+�)ž�`�C�M�`!�4�Ԫ�Vu�b,���@�D���ݽ�~��o����-�E�;}_��u��*��koȱːp��1�lv+�ߐ^A�`���Q�2�� <��ӯ����
+���M� �_ȄFX�	7y�yP�z���L\ȈFX����Z�gip����Y�s
%e�
E����O�8@!A%r��
���&NW��R\2-ی�&ܯ�X]>&����e����P<ݱa��e
������ÚD%Lg��
��j� K
�E�w:�{:ȋ��>w��O`É��r��-�����JT
��䦒̅���b�G��H��_�
��A�����QS� �cE2כ�'(QON�D���B/:>(�$���g�
��n}F<�7��N�8֩|�H�u�}�7c�`29�
���z(�ġTY;����@���t���L�6��C%�`���t�g�>��f�@��
���`
��j�	��2��Sφ{���e�����Y@��>�$$Պ�[�yL���h�	�����f*���
j�Xp9��_P�<j���T5c*��B�;�M:�\y��9n��Me�/��/U>U�$o
ڮ���i�;�	
��i�� Y)�<q��%-��C�7V��  [...]
+��U�
�\�'�%`��5\&
��̱*#S�Pp�9~Ӊ&I>����I	�P������{�"�
�<�?o�=;
̘��*ܝZM��������U{�Y��w�e��
+�EG���L�|3�P
���a����/.
+endstream
+endobj
+4011 0 obj <<
+/Type /Page
+/Contents 4012 0 R
+/Resources 4010 0 R
+/MediaBox [0 0 612 792]
+/Parent 3779 0 R
+/Annots [ 3906 0 R 3911 0 R 3912 0 R 3913 0 R 3914 0 R 3915 0 R 3916 0 R 3917 0 R 3918 0 R 3919 0 R 3920 0 R 3921 0 R 3922 0 R 3923 0 R 3924 0 R 3925 0 R 3926 0 R 3927 0 R 3928 0 R 3929 0 R 3930 0 R 3931 0 R 3932 0 R 3933 0 R 3934 0 R 3935 0 R 3936 0 R 3937 0 R 3938 0 R 3939 0 R 3940 0 R 3941 0 R 3942 0 R 3943 0 R 3944 0 R 3945 0 R 3946 0 R 3947 0 R 3948 0 R 3949 0 R 3950 0 R 3951 0 R 3952 0 R 3953 0 R 3954 0 R 3955 0 R 3956 0 R 3957 0 R 3958 0 R 3959 0 R 3960 0 R 3961 0 R 3962 0 R 3963  [...]
+>> endobj
+3906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.602 688.242 229.558 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+3911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.972 676.283 303.909 687.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+3912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.718 664.324 213.673 675.172]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+3913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.433 652.365 215.388 663.214]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.377 652.365 230.332 663.214]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.02 640.406 221.975 651.255]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+3916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.964 640.406 236.919 651.255]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.015 640.406 257.951 651.255]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 618.429 142.191 626.842]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+3919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.179 618.429 162.116 626.842]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+3920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.407 604.533 148.362 615.382]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+3921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.351 604.533 163.306 615.382]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+3922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.135 592.574 206.09 603.423]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+3923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.67 580.615 164.607 591.464]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+3924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.702 580.615 185.639 591.464]
+/Subtype /Link
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+3925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.118 546.672 254.055 557.52]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+3926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [136.905 534.713 148.86 545.561]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.651 510.795 164.607 521.644]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+3928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.702 510.795 180.658 521.644]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+3929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.144 498.836 211.099 509.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+3930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.158 486.877 222.113 497.726]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+3931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [168.564 474.919 180.519 485.767]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+3932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.615 474.919 196.57 485.767]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+3933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.666 474.919 217.602 485.767]
+/Subtype /Link
+/A << /S /GoTo /D (page.128) >>
+>> endobj
+3934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.591 474.919 237.528 485.767]
+/Subtype /Link
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+3935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.623 474.919 258.56 485.767]
+/Subtype /Link
+/A << /S /GoTo /D (page.145) >>
+>> endobj
+3936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [262.656 474.919 279.592 485.767]
+/Subtype /Link
+/A << /S /GoTo /D (page.147) >>
+>> endobj
+3937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.457 462.96 137.431 473.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+3938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.094 440.975 202.05 451.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+3939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.585 429.016 241.54 439.864]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+3940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 407.032 134.829 417.382]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 394.796 145.29 405.423]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.616 383.114 166.572 393.962]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+3943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.667 383.114 187.604 393.962]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+3944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.358 371.155 176.313 382.003]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+3945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.45 359.196 208.387 370.044]
+/Subtype /Link
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+3946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.483 359.196 229.419 370.044]
+/Subtype /Link
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+3947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.284 347.237 208.221 358.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+3948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [242.703 335.278 259.639 346.126]
+/Subtype /Link
+/A << /S /GoTo /D (page.136) >>
+>> endobj
+3949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.84 311.364 163.776 322.212]
+/Subtype /Link
+/A << /S /GoTo /D (page.137) >>
+>> endobj
+3950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.959 287.446 215.914 298.294]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+3951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.254 265.469 142.191 273.882]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+3952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.827 251.573 154.782 262.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+3953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.878 251.573 170.833 262.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+3954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.396 239.614 151.351 250.462]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+3955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.301 217.63 243.256 228.478]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+3956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.611 205.671 191.567 216.254]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+3957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 169.794 193.471 180.642]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 157.835 139.81 168.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+3959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 145.876 154.286 156.226]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 133.641 213.035 144.267]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 121.682 171.192 132.308]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 109.723 176.423 120.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 97.764 192.114 108.391]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 85.805 202.574 96.432]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 73.846 171.192 84.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 61.887 171.192 72.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 49.928 181.653 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 687.965 416.695 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 676.01 406.235 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.191) >>
+>> endobj
+3970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 664.055 380.332 674.682]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.755 652.1 420.71 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+3972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.027 628.466 411.964 639.314]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+3973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 616.511 392.564 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+3974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.027 592.601 411.964 603.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+3975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 580.646 392.564 591.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+3976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.027 556.735 411.964 567.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.192) >>
+>> endobj
+3977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 544.78 392.564 555.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+3978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.517 532.825 429.454 543.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.193) >>
+>> endobj
+3979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.027 508.915 411.964 519.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+3980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 496.959 392.564 507.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+3981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.362 485.004 399.317 495.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+3982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.755 473.049 420.71 483.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.294 460.817 410.249 471.444]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.797 437.184 406.733 447.534]
+/Subtype /Link
+/A << /S /GoTo /D (page.188) >>
+>> endobj
+3985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.963 415.266 401.918 426.114]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+3986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.014 415.266 422.951 426.114]
+/Subtype /Link
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+3987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.046 415.266 443.983 426.114]
+/Subtype /Link
+/A << /S /GoTo /D (page.194) >>
+>> endobj
+3988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.328 403.311 366.302 414.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+3989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.397 403.311 382.353 414.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+3990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.448 403.311 398.404 414.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+3991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.499 403.311 414.455 414.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+3992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.55 403.311 435.487 414.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+3993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 381.393 394.558 391.743]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+3994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [453.835 357.482 470.771 368.331]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+3995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.167 345.527 466.122 356.376]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+3996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.187 333.572 425.142 343.922]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+3997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.856 321.617 394.811 331.967]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+3998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.877 309.662 461.833 320.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+3999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.593 285.751 394.529 296.102]
+/Subtype /Link
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+4000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.682 273.796 373.637 284.146]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+4001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.733 273.796 389.688 284.146]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+4002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.784 273.796 405.739 284.146]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+4003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.835 273.796 421.79 284.146]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+4004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [425.886 273.796 437.841 284.146]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+4005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.937 273.796 458.873 284.146]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+4006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 261.841 383.849 272.191]
+/Subtype /Link
+/A << /S /GoTo /D (page.150) >>
+>> endobj
+4007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.945 261.841 404.881 272.191]
+/Subtype /Link
+/A << /S /GoTo /D (page.151) >>
+>> endobj
+4008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.563 239.923 466.537 250.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+4009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.526 239.923 476.5 250.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+4013 0 obj <<
+/D [4011 0 R /XYZ 86.4 726.045 null]
+>> endobj
+4010 0 obj <<
+/Font << /F36 740 0 R /F8 741 0 R /F16 729 0 R /F48 982 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+4016 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+4015 0 obj <<
+/Type /Page
+/Contents 4016 0 R
+/Resources 4014 0 R
+/MediaBox [0 0 612 792]
+/Parent 3779 0 R
+>> endobj
+4017 0 obj <<
+/D [4015 0 R /XYZ 86.4 726.045 null]
+>> endobj
+4014 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+4018 0 obj
+[532.2 532.2 591.1 532.2 400 532.2 591.1 355.6 355.6 532.2 296.7 944.4 650 591.1 591.1 532.2 501.7 486.9 385 620.6]
+endobj
+4019 0 obj
+[513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4]
+endobj
+4020 0 obj
+[833.3]
+endobj
+4021 0 obj
+[472.2]
+endobj
+4022 0 obj
+[505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7 513.5 534.8 474.4 479.5 491.3 383.7]
+endobj
+4023 0 obj
+[590.3 590.3 885.4 885.4 295.1 324.7 531.3 531.3 531.3 531.3 531.3 795.8 472.2 531.3 767.4 826.4 531.3 958.7 1076.8 826.4 295.1 295.1 531.3 885.4 531.3 885.4 826.4 295.1 413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 [...]
+endobj
+4024 0 obj
+[611.1 611.1 611.1]
+endobj
+4025 0 obj
+[272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4]
+endobj
+4026 0 obj
+[1083.3 458.3 1083.3 736.1 1083.3 736.1 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1361.1 736.1 736.1 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1361.1 1361.1 1083.3 1083.3 1361.1 1361.1 736.1 736.1 1361.1 1361.1 1361.1 1083.3 1361.1 1361.1 875 875 1361.1 1361.1 1361.1 1083.3 441]
+endobj
+4027 0 obj
+[892.9 339.3 892.9 585.3 892.9 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 892.9 1138.9 1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 1138.9 1138.9 892.9 329.4]
+endobj
+4028 0 obj
+[458.3 458.3 416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.5 472.2 8 [...]
+endobj
+4029 0 obj
+[774.4 633.3 649.4 739.7 677 684 700.6 827.6 533.6 588.2 758.1 480.3 1228 880.8 702.8 739.7 658.9 671.3 670.1]
+endobj
+4030 0 obj
+[339.3 892.9 585.3 892.9 585.3 610.1 859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2 431.6 675.4 571.4 826.4 647.8 579.4]
+endobj
+4031 0 obj
+[446.4 446.4 569.5 877 323.4 384.9 323.4 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4 323.4 323.4 877 538.7 538.7 877 843.3 798.6 815.5 860.1 767.9 737.1 883.9 843.3 412.7 583.3 874 706.4 1027.8 843.3 877 767.9 877 829.4 631 815.5 843.3 843.3 1150.8 843.3 843.3 692.5 323.4 569.5 323.4 569.5 323.4 323.4 569.5 631 507.9 631 507.9 354.2 569.5 631 323.4 354.2 600.2 323.4 938.5 631 569.5 631 600.2 446.4 452.6 446.4 631 600.2 815.5 600.2]
+endobj
+4032 0 obj
+[444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8]
+endobj
+4033 0 obj
+[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 71 [...]
+endobj
+4034 0 obj
+[1027.8 402.8 472.2 402.8 680.6 680.6 680.6]
+endobj
+4035 0 obj
+[613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 5 [...]
+endobj
+4036 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+4037 0 obj
+[639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.6 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520 [...]
+endobj
+4038 0 obj
+[625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 [...]
+endobj
+4039 0 obj
+[833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 2 [...]
+endobj
+4040 0 obj
+[638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 [...]
+endobj
+4041 0 obj
+[550 575 862.5 875 300 325 500 500 500 500 500 814.8 450 525 700 700 500 863.4 963.4 750 250 300 500 800 755.2 800 750 300 400 400 500 750 300 350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475]
+endobj
+4042 0 obj
+[380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544]
+endobj
+4043 0 obj
+[377.8 319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3]
+endobj
+4044 0 obj
+[354.1 354.1 458.6 719.8 249.6 301.9 249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7]
+endobj
+4045 0 obj <<
+/Length1 1816
+/Length2 12811
+/Length3 0
+/Length 13808     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX�͚�q
\�5��!8�%wh�������!�;	�
Bp����3;��������U��ZU�P�*�0�%l�
XYx�r"�,� Fff$
+
+Q{��#��Z���
`��aH 
��?/;/3'@����
dj����'�
 l�X�

̀V�F� #�э li	P�'��
t �;��XX � #G�!�d�����&6 �;����3��,
+@�/�4 �HckK7�1��I��
���C��..�di)o`�O�9��
�@�n�ace�������w����Dl,�O�ώ� #akSK ���C 	�+�X�hd01�t �k
hm��%���� &Q�/�Rt�����T4 Y;~q��O����,�=���
��
������j&nmdc
�6�rp
��
ܐ��L
  ���
+ ��31Z�8�S `K� &6�H�l('�I���'�I�q�W�Lb��$��b0I�! ��b0I�!6 ��?�.���e����w��C��
+�!npw�?���ݕ����b0}�C`-����wW�C���!
pw�?Vm��y��g�� ��X���
ag�g���O>
3���_^�O������>�f%�-0�+L�?5��A翊�3o�d�W>8��/��S�
욙�������/�4�
�Y��`,�B�GV|�0���N�Y��b�G
8��L�c�g\���
hm	4��;����+���m�+���g;a�dw�s�?_��
��
��>�������
� �����H����,`-p�;����3��
]l�J �p�
�
;��`�.
p��_.���-t�#\�
h��V���'"b����>�
�`Q`�� 
vN��i�dv��_��Y�o6��@�+�i���_�yJsp��x�L9,-��iK�|C�|׻��8H��1;ڍz�NJtL���g��NO�I��~v��������m��rn��dw?�w4/\�r@*�m��%jf���S��r�F
+�M˹�[F '��D��jHP=%�2Z�]Y({Ⱥ
Zb<��t��yB+��M��cBn«
ă\D�Ç���PV~�{�m6r1�p��fV�4�5M�1U��kn�=K�����j��7?�V����.	
}X�~
�c��MK�4^@肷�z'��D��`�
p*'�ޔ���
렕Q�gb'U�vA�G�#�8p���BBcs�C��=��6{��^5gy�"Q�u��f�UV�{�v�n������#�a?v�
+_
�O}R�A:�;�RA0�$�[5܊����CD�����I��M�y�XōD�l��Ll*4+��G
�uD� u0sلڬ����w�G��g��
Fj��n:bX%��nƻ �0���uA-�3�:va��

�F��
+��Z�-�QM���̞�ߛQws-*(�{XW(��'���M7�I�&O$�%5
�t��ׯ<H���i�\��
�3~�ÔH(�א������
L�����t�����u��i]R�
�ٹ�W�i���p���~�8��GZB���JY'�6�b]�3 �h�h�������<&�~�b����p4�QKB �{AO9RzF�����"�t����y�A���򊦠4؄K$�I
���UAJS{$�r���hyu�l�O0���C��_�V��|�(�h�;u�nw��nU�f��)�zn~m�jDD���v>�S1��vw$ � �4r�
�X������=���n`��s,�9H�Vꞙ����i�IL�T(|#�K��0wiqt#k��]�y�>��ݭG6^�k�F�Q�m�/s<J��{��`-�fS���O�,=�iᒢ��	f��	�ʕ����Vy^.�H|4���M�e� �;�f֮C��|#�L:�e�{*� *�4p
g[�<���y��as�H���rR��.D
)��� [...]
+�ܪ�7��}��(����\_�u~1��k�L����Y�H6�l>/U͟"X>Y4�f�I�>��F�f at a����
N]
tGi�����m֞�
Փ�6Ӛ
9�H)o5��*�������^!6"���!,O�0�K��XG�a�DI揑!B�
*��4���P��m����1r\���+#fO����
 p��oTLfT���OZ�!��9�1(!�*�_Y����H��+!�<Z
Rl�
\潋�8z:�M����
Za��t�u
/L�`��̞�:������f)�l�����Ӎ�{��H6y����-�����|�!�_�g w��{Cx1QQ��8s��{C�L�~i��]���c���ϊ
��ԁ��U��S���u��#�5�И+�h����
�K�P(C\��'���
;��Ɏ�ϭ��ԯm)(�[yDw�o��߹֓���]*�9]��A�KT��
�� ��{�
+^U�{�_ر��'*EMg2�{��r\o��{	�+6�2�g|��-�R�1�3S�L
����
�|�
+��owT�$��[|K�Of���w㭝�Ӵ�2
���o����E��agc�ZO
��P��1إ�EGox
�o[
~I�4�5~��*C+rv{�׎�{�G�%���^�R�?1��]�m{��+����ng,ʎ�^�|
��w$R�"[\S�ԣ�D��o���i�B�R�癝s0�Bn�;S�ֲ�!p�,U�c�����=<w��e�����PC��4+�����e�۳�
�n��ō�Wa`
51L�����߫`�jO�*�a"��S�QIaV�nߧq��=v�;�;�b������Ѳ^|m<���ڙK�""��H���R��)I��'�(Hà50(���
u[`�{�e��ά����;ʦqc��<S�3Ξק%&]� �59Neu������E�:����3=xH�7�Qlc�lʻ|KH��y�����4��ȸ�y��%b�@�=�)�䱅�ǣ�OCIr��L���D�~���#�=��4Te�����6~�ͺ�}�@K7���:��z��ձӐ��U��b��E� [...]
���	��l���3�]�E�s������{���A�o��tpk]�
Ō��Ǯ
��ozi�y�S#��k<9F��
V=][qW5�7�G������Y|��[K����~?v*�{�x
�vW%�4��~{u-�}ꕂ$�B�ީ�r��a��9׭�a�a��'B�)U� ˜ߏt=�*���a�_��.�lJ���R���M
�#�%�ti�q�V��q�Rs�>=�0$
��V���"�Z}�ߕ6?v9`�3�"9�� 8_c��"0:��o�r����@���!g�f]�k��ޟ.M�{u�̖=)�1��E

F�[b�-��X�i�����?�H:

�
+��
�^+���ؾ���~����a�:���\s2�ϣ�RI�;(
�Q�`�H�;�Т�?����ߑ ɞ�zJ	8�����e*{*[��
^�e�r����c��C
)dž�W��Ѝ���"�=:%�	�M��]���[LrK|=h���ﮙ7MH�gG{@]¶	�����})����sCk��T�iq؆��IeL
�i
�>�m��1u�f
Б�-��(f
5s at xd�9�z�/��7&�P�ٵ߹���q�Y�]���s���5-9��.[�J�IJ'R�D��r�r�y=���><#�o`A`�������1�4�P[�`k Z���
�<@�����Pe?
���'q���ۆ�U��ҸW�2@�F
�GTc�v�]:H�.Q�
��8�F�V~1��p�;n�X=�1�5�
o�™�I�]�8���
��ʹNOM��/�b���,�cz��w�5X��7��'���D� g������_��-Sf+�b>
�V��1�,(�⌷�~k] �Փ����|��e��~����. [...]
�f-�ôߙV��~ﶝ޹�2���Z�=˄�
&
+��Nl���$،H
T~+��vx�<��5_����_�R0B�F���&?�F����u 	(�
��P+AI�W{�%6Ӫ�O�ն�ҘYg-��XVoT��3�l)�c��ڦpHw
ڠ���BQ�[ǎW��Ĭ؍�\�M��3-*����3(�>�dV�:_�7,�w�|
+�k���8m���

Nг�5,����W����P�P�Z�)O�*
���JR�
��᜕�²5�3鶁co׭�7��@�V
����7L�V��Ե٬=������$�g�7X�<&�x&�l*:�)U�Ѓ����MW�z)�c\�d�~J������P��T�)�y>cTE�)sxx���o���=�J��N'r[|8���C�>�
B��"H
b���*9�9B{,��]R��<nukt��E����g���!�l�
殤�2s�zD�T�xK��0

���wgu�^@[6[5ja�nA�'�/T��P�H
�%A(t���L�G�k���LEq��QT\��=�ۙY��Y$.[q��
+U
+(����,Me�8��k�za����s����-[��Q��� �8�}8
Lw�5�1)'�Y��],�ժ�����5�5�v��\|��A�y���ˈ;
�G!��ê=����8��[����`TG�zu�����8ħfb*���7�g��m:+N��wi-�9m�eà�
�w(
+���
+m.kx}`,7�E�
V!�O�ŷ�t�5��E�s�Iy8�q��}O
D"�&�C
���D
C@��A|n6��<Uk
���ige
�X{���d�Ffj؟?t��P�E�Zl�����
K���,J�~x�f���|��&�{�C�]����������S�ȇ����
b5
�~��5.����P���:{v�O�vDZ̕�yp�0�� E�6?��� ya�	�x�BE�I\Л��Ăr�
1��Kz�kC���&ﳌZ�x��X�6��S����S���<����7z����+t�ܺ;�3s;��&Po�C��.q�r��qJ|�r�{����L�Z⦬��Km���R[
+�����C��K2o�Pټ���KI�T�JY߆py������N�4�G��8�E�Cg�[�'��ߓ��2!
����ٳ�]
�Pa
)H�ƙv�f�����sXo%�2dM��c�
mNH��B�p�`#� 
쾼j���}}=�[��͜�L
!xR�w�8�t�9��
+��|w���2
+���
��zv���R,;d�����	Sf\�Ӓs�BJ	E�;�؀
]�m'Dn�
+��6��[m(ϥ�����{%�e%�oɠz\�nEW����@�C���U�R�
u�3�Vt���=��P0mņa��<��R��ߟ�j�J ��'8l��+6W�=O����MZO�qh��OJ@��t ^�l�
 \��ah�R��+I�YYh���]{p
���X
���V�����7Q�q�Y�@�u گI�Żz��֍X��hެ���Re�<��[��?ǔ�o!*+�`mxnvS���4\��[��vǠ�@�b��
�,/T��� V��˹H~F��d۔���V���q][�&N�m��93S~B�6k�"U'���[&��s�{���%<��
~#�����P��|3/�5̀��-v0|	�#E�H(f���3T^�^
+)� ���[�7�c�4��d��
�i�����O��E._�ݩ
��Y���w����

y�3W� Q'����ρ��N��B�K5��J�n&��l��hÛ=�&
h����vl>1Ȫw�b}*͟7���Q�я
�ɸ�̰E��=>��d��I
��ݽj�/���
a�Ec��u�lt���zx���!(o�ޭ�i�Gh�9�ʇ���;�(�g�a���h
�8f~��}*�!�C�
�ս��F�S;���I�B�/�=��i���;�`mxY�}xt��Q��դ�2��K䚥
I at 5��<.�ϝ�%.�s#3����u�yf
�k��
�=1^�!�F��[i��¨�-������%�)��:HϽ/,
J(~�+��6�-
)�U��MlE�\�;G��!ԃ���wNt��C��jm��_:�ܩ=��Y�/�� �m�oOC
�?�
��h;y�`&�`�����h��4o��u⦜��΂:[��4H
t��X5W�_bo\
�>��r��������*++}�	HA/ [...]
�ǫ�N�@�.�B*�r�
+,�C��/��+��OmK�
d at V>0V
�+{�0XP�
�_��Bx�iϕ��{��
�I�K�I��X�N�T��z1��ێ*�� �j6GFO
�JW�nĊ��2�{�d��D03�>n��~`*i�N�BN1J��j��T��+Y�ُ�B��
�d
��$���j԰o�+N�פ�r��?�RoPR�$��fPgN�Zs�S��{��׆Ly����,4��t��
���z4���D��D�uvQjƣ+>;V��]�J=	5M���/�Zcc�v��:�=�"���-�6M��4gI�
+��@��u��޵#����Gi1��Z�y�
�G�
+���ٞy��P�1��}?
+�L���^���1�71F�X����pH!�S�+��7�ՙA�4r�
-,р�������֮�G�����J�P�9��<~ת_�[f�'`����w嶘�o
SvQǝ_�x����tlЌ񅹒�؛J�D�:F��L�vc�T.K�S�d���G���y�

%�H��b�
�{R'ɘWƧ���.(��F
�b�\ �JV)~��y'i��Ƥ
�}-�l"��M���<g	r��lj-k�zm�F�-����1Y��^��2:�K>3��o5#ٚ�U�1v,������)��-�$h
�ʒH7
+/B��cYaⓇ٥)*dbި�n��db/�~���N�{UY7�2�î�X��G�Ag*API_����	�t��BP�N�
(��0d1���s�#M�2�$�M8��>Y̙ղ����������*�NRM�
o��;���z+ic;LU�g}<��vئ3�L])�vH���/�f�X��?�U���F/tZʈl�zxҢ
c.�'���[�Y����Ƭ��=��f�4,U$����R�:;���[W��O;=jP{������'�o�ͬ
�
�qRJDC̜�]��SA�1��d7��&�Q���]�����H�H�Ebe��1��}�^�_�j�*�_�i�w�̣�e��<(f��f��

��`o#�a�q)�M����
+�X6(�������^л?Iڻ?3C}���c?������K�;2Ӈ*�Ff���dA�W<�q����9�C����}oY���o8�~C��=���o�b�C���ɴ�+��]y�Ã��"s��]w��V4�,TTʙ���|>��
D4W���49��bu�5\x!{9�|���ü�<�7�
ᵡ�G��\�й�nl�s{8�A���
+�1\墮�L��a��q,Ĕ;��H
�n�Rb	N��A/�ʍ��C��|eyG��;���U���#o�fQJ�V�`X�f���p�b���;�EWѬo��z�Ͳ�:��
�߻�6��s
����;�y_��}i���V,J�`�fm�I|F�(����(���0(/�	�xQ;K��ɂ�O����k������Kx���{

���bj�g&�ʫ��q��-Go�^1e�hS	�����b�zA at m��P��n��H�a-�|,M(��I)�J3��=y�.0iQ���C�U��2_Mw'G�&\=T���Lc��'T���z�t��\�hc^�
+F
߽���
T��a
�͐�� Ss?�x�}��PܺH�-��X,ǻ�U`J�i����l�����\
�K܌#��!�,w���.��Y��n#�}_�� (�m�h% d�}
�,Y�'�G�d1޼�<�l�)�:�4��c.h1Hy}��bMS��+�N|$L��Jo����;��`
;(2���Fޗ��
������aj%�	����N��������,��|c[K�Fy@
Ϳq���r{�#��������\(����2J���'aÌ�y��U�#��{X�ل��c 
�T�F�Uǒ*!���)�Й�+x��cLΓ&��.��e<β
b��Q�����3���8D�>7�Q���xcm
�'��
v8瑆_,7��0�J-��<�1R����"�h'ǿX/^�_�I�h׌��2Gx�qםj�2�P�k�����.G�
�
U�E�؍���%���y���� ��X�C�P�� PHV�4�qC�|-s�P�����~
{�Q��g�U��Ӹ�~R)[@q�X�
��6u*�GT�}���0lů���K}RB�	<�.J�a�eb�՗�O�fJLg�1�w?+�2E9/�Ђ/
a��E%���|d��ٴ�����٧S��p�=4�1
+�
��<�31���
��8`s<��7�6�%���x�O�
+WJp���q}��e
��<���0�x9���!4PH�i���gQ�������lS�����V(u_�L*��,����R���#���<�wM��<*��A�����z�]w/�j]�����,���3��K�>��L�����^��h�8
a��T���k�-˻*{��V��e��A���[�������������w-�� 
�kڻc���h�^��S����@Zd�{Μ
���oٴhgQ��f7.E�;![��R�x]"0�+�=[�q�g��O��+O��|�d�%�6�i.X�G��^�8=�l���>�Bhտ5�K���B�qq����Ϲ6ЩGz	�SY��nWA���ݒ<iʜ�@%�ֽ�	r"������/�TJ
�Mg��y���[+���
�v�g�`;͹�
�W
��#X[��Pn�2�	B��x���-$0�� �\A�l��}��r
Zġ��R��k �Ug~���s)�&�\�W�
[)�P��;f�

Vۘ��W�fī̛P:����<;���T3d*���8�$n�/���aK��
+�������D��h�:q��	�е�K�+��[�U
+�=���#N��c��P|���@
1‡4`ֆO��7����-�s`#M]���C���tA�E�?x	n�`
�u�@�p7N��v��1!׉�?�$���:c�<�Qk���-�)Ĺ�
�β)��
+�I��[-�m;c�'��
�k�3
|��u����b�<?2��P�i����'��>&�����
r8�Р�.��q;���CT�j^ߍ��G
+:�x棈�\�'�R�Q=��H�•7U����ђ�[h�|�<�6�[�d+9L>�;��v*3�kb���2�pz3�/]�6�XT+��Fx�>y�։��)a��ϖ��Չ��FJv���sy2čPu}��.P#	��*?�mfpN�Pu�����ť�:�)qJRt���JZ�B`�8��,�ԕ"W���:���u�i����j��sA�OPo
����PHu�4K�gd$PEw3�3
Z� =�!�����"!�|�P�*�Q�r;����ǎw�?��s5�?��2�}����������D`���D.��_�#���y2X��~��Y�F��H�Ạ��?�"/f�>M��iSm� `(F
ӹB���9��@��2q4~�'�ɴjީܺq���D^,T��/���K��k*��Y�uv
+|�7O���>�����
+��A�� � �	�4@~_qfRt?|���
�:/H�.(,-�'�e?�p
[ ‚�C�
�jvH�.�E�����sJ7��-�
+��_�4ЌZ�S
%i+"�f�!:�_L��£�ծ�:7(�Hs�QD��K���K�0c=>m�<�q}�
����֕B�z�(�z��#gkLq�d*Ր
e
����W������BE�y1�5�,��AO���[#�ڀ)
�b�ۛx��('��m�$
I,��,�����jY�H�bN�%<��+�
Lk��s�j������J1��A�	\"i�ڌ��w��-��s,�~��U����K�Ha��K��g_5�s�X����٬�_A�B	B�c�a	+�V��x�3��sH�1=����b�����q��r�_^�v��/�*�i>.�9R0a�
v�����O5��)��}����A#���}��&�Цe�=�
��V�+��K1c��M5?��$���0��a��^�D�Œ��|�P��t3�f�m1NOw1(m��t�e��H#>�Q^:�R�;�#�
q>5��=�q�i���v
^���ã�ܠ��[�PJ��r�B;D�R�[���O���
M 
ole-{r7����:�d�c'r	/�P�r��g�LÁ8(V>j�{^�\�x)�奔��*Mj�ՒNf��
��6�_�����sM
+����~!+˶Xg�-[:ӆ�,���a'3��{�+3�%�
�
���0���V�1���/�1��������$E�dU��HY�
W��!���!)ݫ����~�[a_ۗ'��Y%�[�Ƕب(E��Ttˣ�|�bg�s�ڑ�+"{�
<��c�NÜ��N��	�Ka���rk�k����� ����߈�YH���o�52�Y�f;�N����"�v����W�V�0�������M�P
����

���r��0�0{O�4�/e�����9J}�n�5��KIm֓�
}l�Yc��ݹ|/&��|Ɓ�6L,j���[}x����Ŝ���jj���˗���M
��p����=����~�4﫲O��g*8��1�����2��V��k���n�:�4d��v���ƕr��Ψ
+�d3l�t��aM����.vҶ�
0����gr����p���Dl�o�?�=�k�-[�mh���`K[vL���K�yV?ާ2��?��\9��`Q�d�c����
.
�o�
��ؔK�VF�g��$T̺$���
w�L��X��w�VM�k=�����5y��#\�O��D�����-"��q��C��"g�\�?Yf�xl��&ͫr>�(͗�oDiym����S�qs`�w�G�u�۽���Jv����ܺ\*�?�B�?�
Ǜۍ���`N�̏�6�HZd{�KR
b�S����nFg�g�o>��ǘ9���{6�FU8�~��mR����8�e�0U��R������z�o�S^j1:p�D9��g���-9
� ��Ĭ�����謼ho�J#�8
+�u,��-d�F�Č؜�8�0�҆��h�h�̀U"B2n>D��]��X�ϼ)����g�/ަKgr���k#�m&�o�!Q����"*a�7�V�,IO�m���9 ��}����|�ܢ�
�
{W�F��f�I��i��a�t
��R
K��`u�1��M58�*J,��,����s���
�	�O:�uӭ����d��*�������4�͉
�!���� ��g9��$�g��B�?����ٿ�����v�x?�]��%���h7w��j����
+,�I����R �Gi�#�@���/�G ����a�-Go�_G��q��� Y�@+�W�:�G�y'�R�aH����l�<i�P�9��H�b��-seV��
�@���4����L��lTq�L`�~|����xo��bQ�Yq.�&�[��W��)�|��y}jυ���#i���=Wꉭ��+$��@���D��Q���Ac���z���t~pLx�
�<�r�0L�s������ўe�
���5
'����@���GA�Ɵ�U�\(ƉzBX�v(/�=��!n�u�Y��@�/
+}c�0}�d�*�8h;!����ԛ���&$�J
+)',��據$������
_�U�K�g 	�o^V���}�:�-�
��8C�ƈzZ�x:��>�z�?�Q����m�k��b�ޗDĂw�V�,��#�=3��Ez�ڱ�>� &�?�ŵ�y�ntG]����#�!�"Nsq�,e�f�����x�e$��*>�=��������NkU�B.��̎|U�
'�n�[ �lW8!���֔�=@��C�ZstT7Y������i��3D:�dH�G(_�f5W�<{$
qaˡ���o�4�I
+K��kHZ]�_�7��&],/�{v*�����dY7�VJ�C:��F�ǣ�2>2�O�k�����6xf.d;�
�Q%��=$�F]�Ϸ^o��9���
/�����3�nW��a'�'�h)0	��v(�l��K��pG�4�S��HR\X'2�4�{
��
+�%�
+Hp�(z�h�8e&5`��o�����]�&J� UG̸�a���Z�n�8��8�q9JK���6=��>cĭ���Lu��u��ț��W��Q0wJ��c}Χ���r���xm��y
�n WIS��!���l��
�:ܐ�̯�e�"�y�,���d# ��%�����,�a
+?��s�x�h��+�9����F5�F?�@~�_J�����L�Zj��wb�w}��
����U��5x���״����6��
+uq5�*�ೲG�-�bo�A��
��˙)���\����F��Ka��_��\#�#��g��t���Нד�ö��H���O-n=�mY��j�����S�]
1�3v�9o؝ѱ�p�;�j���|;:�tuQI�?%�P$��hT�K�
�G�TRu����K
�b~�j!�_PN���b��(P9���蹗Q��\K~����}
�8�N�����J����y
+��a�W����K�c��=
Ez"�U*�>�SbAn�X��%^�.f��v��q!
�q,L2%�i�O��8
��d$Y�y�Q��oq��m�ޤ��g���l2�Nh�
��T9]/sv��t��/��^�͍v�
�q?j���ɶ�#n�ZG��B�P���Z��
�v�K�y
�Q�
m9QTt�S��Έ����ۡj��y-'&�I2�쪳Ni�����u*(�f����l��G�
GZ��
YI.���s���3�>�P�cc�⏖�Iϡ
+	��
'��#Di��n�nK
+F��q�Cg�`P�Գ=
T�{�^XL�)n"��ь������%W�
+endstream
+endobj
+4046 0 obj <<
+/Type /FontDescriptor
+/FontName /CUTCHY+CMBX10
+/Flags 4
+/FontBBox [-301 -250 1164 946]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 114
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/X/Y/Z/a/b/c/colon/comma/d/e/eight/endash/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 4045 0 R
+>> endobj
+4047 0 obj <<
+/Length1 1791
+/Length2 11154
+/Length3 0
+/Length 12135     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX\͖�qww޸���]�qww
�'���;K�A��~��3s�������wժ����ڛ�JM�U�
+la-
y�r�q��%�88
l@::)7ks{0H���Z�! ���p
��\܂<�(t )���������?A| 	gk7{Ks@���������	�	�����eH894�Y�аv�v�bC�� X�[z ,�m�A(��(R ـ|�
��t��)/k7w�(��HF D���
���AaWCjYC�������z:9��;���_.��ysg{'��� ;�xzX���V�n��
�k�oq�`��SF�����Rd�d
 �{��]����J����`c��n��qk���� ��_ؕd��*�1����פ��=�C���?i���s�2�
7{�!�
�B~�����Y���A�
��
0ws3�E��
� �9 � +k��D1;�Y�X�����8yy ��
��x쒯�`�z%~ ��+	 �e�C|@ ��+q ��^��.�J\ v�W��+�D��W�hQz%��W�hQy%���?D��+A���D��+A�h�D��+A�h�D��+A���������_	��� ���!
Ȝ%�	r��{����g���
@H3V!���
U��¯�m^�������J��<�����ۿ���U�;_;k�_�1��"��/����BZv�
!~8�"����<�� {��_����b ���cҌ��4$����5�����n��u��qCT�@.&�_Vs@�p�rA��z�!w���b�_�q@�pm�����.
H�;�`��0�Iw'sw��R@�����s���A���� ���/�x��B�{��! �}�BHz߿b�߫8H&?k����7��$�ǟ��X9!*!~	@00�Zz�A�����rO�7��CnUk [...]
��
+�T>�֕i��}u..�.�.��#�{\g����I�kJ����n�_��y���
�M�!fǗ��#
h��kc���
+N߫����C\���5�j�͋��ӓ�uҎ��D�E�����1�;z�+=
nu*<�!��y�
��s_�T����jB����q�/���}��
Nc�qeܖg�r�~R��
+e>���yB�
���QN]��R�\a���*1w�\�"�}\{W�6TcJ=}�T�jI�����5�x���[���?�?M�I�=�l4z�C��7y��/�\o#&/D�<�6�P��4b�v��Pc��Z�v~'�Ua����X�O��^��Wi
�S�-3d�8ǯ��d�a�@��	�r�ȋAJ�����_.j�dxI�6(����}с�oE������F�ƴz�q�{�
6��⟫�$�8��t�E��N��*x<���TY�U�P�����IH�E�{ӽTj�"/
ϐ��a0��B%ڠ��-�T��tr�,�b���l!H��{7�D��ZD}ֳ9]X20!$��mA<)��
����n�J
5:���w���
�4�ޏkI6
+
+.���=�
T	�˜m9D�
�%V�����{��Z)t�+=��.�
+
A2-�$������O��Wt����O��zYs3=i��\9
��7߻3�2`�ɎqbtlN��b��}q��
���
+��ct�x7���m%X%Í���pg�E8�]~6�{�ؠy�ᰜ�3)�
�aId[��q��m��r���%2��UBat�5I�����#����A��,�/f�1"�v|��e�̕�R�)��}O��s�0<(ڭ�����PQ��_G�
�J�� 1�tg'
��C4�BÉ�܆i��
��g�O�U�0�����4�o�����2�a
�q�w)/�
Vs����P?��
�1���n���гsiC$�0�
#f�E
}����z�u�k":\*Ǯ��G��7'�Yl��4}L at Z��Y�ƕ�fy��N{�Nq������_?u�φ`g.xy�
˾���噘0��8e�ɍ�
[��{�K#�p��
��P %��N�@j ~�h%���;9���� s��MYO��?���)�}�Sg���J
i�u&�I?��h�Q��H�+�䇲�� eZ�ȱ
�6J�h�SA�^nbz��Zk�|�g6�����}��S�ҞE��M�@ZI��4\� ���B�����$�<2K&6 � =��
���Ҡ��9�J436L�w��u
ձq��OxGM������I�5.�ðh��,x�z���'%�/���N��칡�5@ΐr�9
��y��˷��L.]&l'ܹ$V����U��"Ѭ��,���@��2�*NI�5c�d��[2�↮����95�G
-")۪q�>:n/x�3��J;z�����3c���<�ޝP�3���͈���a�6�
�9 "R:�u�/]��<�\'r:�Pl�Ol��%�
�4��}xV�z�4��Ly�MO�=&�OC��U���z2���W��/)�
+E�k�z�F��,�W;�#��(a{M��eǷ��G���T��B����
�=��<�5C����߄�x���MM0
֘��S��9�K��Y9g�n�8��@�Z�t}|�
�a�U.� ��Bg�)�,o��Kd�� 
.�iF.q{��87�k�ݵ�}fh6��F{���
�����}N�:鶈C�YR�D�L��GyC�^i�������
+&��	�y3۞ }��?�=\-�x]��E��e��|6��/���O7���43��q�8�%�+#���O(K���oV�����5�.�_��5J�|�s�8��v�� �ޒ'4���~�"�s��xӎ&;�y�p�Id�9n�֚�G�k�Ҧ%�2y0�bX����( 0�m�L��ip�¿���{�L�պ�	����Y�����C�H8~B�����
+k�4#�z�����=x��������(����~���,���
+ҧ������.��@��
�y��ճ$��,�k*S�V�.m��鉭.0��
�ͽx"��teYT\-��Y��˴`";"7&+�6�R�L��Q��1��B%�ߤ��}<��$:etͮkE��;p�T9��#R�/��a��K
>R��_��;V�O� �f�ؒ=�9�T��x����q
�+KvCW��S�\	�	S�k$D��_/KX� �||��Z���)�Ñ
�O�=F�0ahn%W�з�<����Jjj��K�;�L�"���K��-�9Q����6V�H������=/��#�01�]�����fLYs���e�8�� sE�ZH$��{)�s��q�#��ۯ�N��
+j��Q��ls\����)J����_0#Y���S�B��p�k�7�e�N��|�8�=H�

�Zİ}�E����H�TH���zoj�1�墈�#�[U%�H��G����r���n|5�4c�YI$Uϖ�'��1㰸G���/V0�?�bJ�F`�)�Z$�X��m����
��
;Pmo�I�h����l\Y�U��Mr�Yi� BC���U�(�vCQ��Ngo�ꕀ�&X��x�\��7�q��

(=�ʯ?x:z}�j\w,�.E�*��� [煑]�Y/^Ag�TB�
0
K)��z)a
v�
��@�<�f��X��׸�u�nӄ��a���F4�P�B˹)�+(\c��$��	��	TB{n?v��t�\
+J�A�}c��R�N%����0)�΋n�_��s3n&(���,%1�<UB��F=�|v[&���V�X��
j3�W#�6'��g*����:%'z�(&)��>
+i�W�V�?#�~��{�
uTc��b.
;^��%�ӿ�i_��d$���Yc$K�^��ֱ
� 'W���^�+����o�i���7�: b&V��r;�ZF��Z�� �e��j�32��`[۽��H
lz���v6p.s�6f��W��F�oT���H

�F

���|�-|ҟ��J��q
��k��h�����K	Q8Y�ڢ�m����4�/n�?�`�q�/�9���
+2Z<�X&���D%�|������
+!R�Wt�@�S,�Xz��<�`�����D+r+���N�aޝn6+[O��Lo��4�Z���=g&�W۲�
��'
�M���Kx/�U
NVQ-��~��
+O�ȃ
��S��h��=So�B�
�G�]���#����#]u�n$�+�Ρ���@��@>em8N��:��䬓�R����<h�
*�ijE��>�b��B����mI�W0X���D�
+

��
ƁJh�eޯ
+w�p�Y�2��`q�1Y
_�$~JeQ��o�̬�x���{��
���$���Ǻ�7^�GQ�~�.�_5D�W�rL����5 �/i ���	��$�Q]���xT�%�6C�J"�2<
+Ոr_!�U�!x��� ��5�-��ܷ_m=���Q��gO,����T���(�&�p��<�A
�e�3����E�l4�n���Ւ�;
R�*�[�&
+?���ϯ>	��}�y���ɾs�tH
>�t�o���a
mKfh��������z�?�`0�0�NN�����˜�A�o�T���|�S�F^��Kҽ@t��Ƽm�z�Z~���D���~�>o
+�?$$�6��BkH�<��"��y���D�{Y[�
(�䥙���#�|xȭ?]Ɵ50���P6rU�X�|
(�f|bF�~c}�]�؇��ht���9��0��4��3^�,ԁ2x/'t�U
��x�9�|������Ƃ��
�4=��
�ُ57�;�Ѕ��6_<�>ힸ%����`+7QK�V���xnuUЙ����f��2v�a*��}�F}��d�Q���P�i����]�ֈ���˃�Y1.�f��4���`y�Iα.zY�������Ht�Q�Ch�`)���Pȁ1�s�|�s~�g���OV�HG�w.AH�&�|H�����D��_�-ˤ��-H
��Qᑐ��=�F����T��W���D�+%s��Vx���(�)v��I�R1S���ś��C��0E�„�a�K
}
��v	fd1�'f��#�
e(�o������)�Ik^�
����M�a4`�ъ5��p�\���E���&,�xkL�������a�5��Q�h�c8��dž���
�
} :�yŸڲ���� �>��z��?�z�<��Ćݡ$&�4������2��@P�~ �l�x̎y��Zd�[||� �mQ�;��$@�����n������E>h+>�ok�4�~�ⷠ2`�-��J`A�(��+��� �Gp@K�����1��#S6�I���TSz.͡ҋ##��{�g�����(F�ߪ�)��K^��,�31�[]���
��ϔ8up-��ѳ%��mN<�
y6�ڝO��28�[$+=�����y��K_]����@�r "�ʚ��N�\�Y|
�l
S���
��L��м�e+R��t�gy1u}D��H�R�ЏD�R!�Pl��6�	ĥ���؀�Sk*��U��^�F��\&�����q����s 6̒��.�T��t����(�c���`,�$Y�$8.ٮ8��Wg�1�ѱw�8�95(�����	G�j�����iV7��D9�E���{�qM�}�0T�;w36������#Tyơ��b��N�ѽ�W�bF�
+DGcqY&�J9�0P�
@�|C�C�Ⅽ�uq�dENuO	�OTΰr��խ��,��*�ٚ��H����
}I+~M��

8쑍=��j�oiQ�U��N�� t�[B�:�:F�#�/,эn(is�U�
.���&�M&��2������ �#F��,/���Jn>i����߿:?�e��䦥p3i����ۘ��E���b�R�J�j
�F?�7���l�'
0�vh^�S�ߗ>z.i}�� �(��o��1|�
�q}��W��5E����
Ypک��5�/�n� �s�m� 8��uq怌��Dx��0�5��pq6f������_��=Q��[��;i�*0v�
���A�x��E<�O
Yc�+�T��S
`�cu�*t
��}�"sb��{�V�T#q||�
�
?j�b���l��Q���,K��Z�4.,L�T1�
h%?m�cs� �F�S���Rm�cq���y_!����x�D�o
�9'Y�
%^�}�����v$',��x���|��JY|N�L���R9�8�N�Z�v|���̬�9Zu�T�Vb���үY
��-�Lp9���}]o�N��/h�=Mr�
��ڳxNC��_03ͅ��%�pk���Oh��_�� /��A77U�\&G�h
�#"
AN���K1]=�4/���YW�
\
Y0U*o
+_��}"* �cr��a�x���2WP��"��Ht.P���d��&"B�7}� yY�$o�t0I�S�	��}�
� }'�x�8�К����b4Y�D�0R�:H�9הbM4���J
��
��mU	��Ǐ��Ij��=�ߢO��&���!J��HL^7�����F�y��	G�B4�sd��1�>����������,s��h��`�'k3��$��`�m���>��$�8��x:�����H+U�]�:7�{��F^p?���}X*�� ��C
+�G0�JX��c��
c�_��0q�sl�\�
B}�
+W������^SH
h�
+���5?bפPc*�'���VֻD�v��cX�N��l� �y�N���T���M6[Ỳ���~�ȯ�N��/;'"�D���I�3�z ����ÿJ����OI��KT�-S�eT�ļ�Z~�����
ek�O���O��i


�ˬʊ�$[�Ц�\����@�Ik;� �
6Jw�Vl��/�Q3���1��(�Kd��cU�*����aP�V$HƂ�$#V��Yb#�U��#>�ɥO�g�tQG����)���S-6�E�#-r�C
4Δã��H�i8!lC�R���WTsX����ג3�}�zl陣��н֖& ��"��*��6�̘%N����yf��
��210���
P��
���O�޿�a
�˜��C_��p�1Ur�!��˜��Ry`6��
w"m|  �`
]&|�
!�2��Q�GPL
�^~�F��^����|1F8���e���sHl��s!;yPl�0�
qC{�
+��#̲�o���YtP?����`_�S���=���a'w��O�-v-L� ��F�]Ђ�$��0��;�U���lۼ�򕎟<H����s�+��e��۱=�G>ru���#��]�ӄP�6e1Epc��P'�z�o�0�~k����b�>/M�
�����Ĕbv�,�c�IŧI� �ֲ+U.IP>&6i��dѝ��~��6�]Y��t�|[ZG�4\��2�Fw%\L��ي�\�l��b� Cf?"H	�
ߚ�
D��MFݙb?����x��t?ve#��_��f�a����[od���i¬��g�]��y�2);�+G��
��T
+�@M��V�%.B���,^#��Z1��
�iK� ����S뼢_9=_×��|V�{t���4��vB�T�j��	z	��6%�J�`*7e;��N^�>�6�A���������zif����Y�5�g�
��WM�%�*&�z:t-�jp�U��d���n]I�8��~��HK�|�oP�*^~ڄt/��!�r���27/��$SLB� -q�ȳ&����d�7�m��V��[P�k��bl^J�5�F8���LS��(�\k�>�":��چTaM�J���K$"e��A�ӭ!h���*⊕��
TQ��4�&}O7�[�
.^)�79|ܬ����[�?l��!\���3h6z����K�k�Ǖ0�g����
50N,��ø�S>��5��g��>�K&�>�����^��!��ک���Z�u2�
�]*��V�]�[>��F���;���r��zA�$���Dži'}�P�^�D��
͆��6�8��?iɫrr�4l֊�����k
+�h�Ā+;���"LP
+�l{�8y�H���Gj��|�7��2��Q�~lb���5�o)Yb�P��ϝ�i�V�`ק�ch8�>�
ոt�+�%b��X�	0�
4mPD
r#��m�/)eh�ʢn��9'�
�+��H0k{����*�E5x?�%dr�gm����m�6u~!R���!�u��
C�����غ�>��9�G���
+��gt,��Zӣqo�W��
M�YJ`@\A��eQ[��
'�䁫O&zkJ�l,��Q8����h��߻�r?R�yۚ���%Z�I�-�8�T\q�{v���Jz��Oo�iP�:�á���'d��@�7},�S
+k������H$LI��
¬u��5
k
�m::�/<FgLj���@�g=��Uj�Ӂ�}V�O��
k�}��22��V��vQ�_�&����

n�>AE�V�
+�sŸ�����qv��h�x�s�y~�p��s�+��E
�P��9����F��,�s|!�Xq�Rn�@?�Y ��st"�c�\hM�v���*�~tb�J�Ք
+�X�"��ėm�,O�/��E���y����I�_1���ǭ���	��+��W��;]�
+���tH�eb	�
�^
��}�	:sp���>
}q��Ё��������-�����/�Z�Y(I�*�.�
o�؟Ʒ��K
�?�$̙���<��
���U����[9(���F�06�
+,�՗Z-�����h}�39Z
��
�Z[��� ����i@�O<=k�ҷ�Ά�U���8�V��6����P�n)��+(r�?���?C��H|�n�a�mO�燎.����Ch(3R)�V�ɢ ?�f_e���O=����I���8����g�ČE$��܍8G�Z���/y�t�
��|��=K����V�e�A?�@;д��OY��s/����U�Fr3W�C����/X[��۶a�L�x�z��η��7�z����
�~��1D
�V��φ$]�)Ş���U`C�dv��.s� 
�%�?�кb7���
���
+��;7A�H�b��	v��IJ�g���:r�Zc�A0v�lu�t�4��f
-4O0�l�wJEK��1�>[I�
�W�
+�=��u�t�A����g��..7ݪ�A������g�/����d.�1��0 ���hS�� <�Bkt�Fw=Q��V�h�L�(���{������ў_ù}���U�c���"��r2}\�v��t�c��p2<8a�m����S�"�]��'_�Iy�B�p�|��
�]a�D�f�|k��OI�Zai�n)R#᷹�]O���r}�v|X��m`�οK����g�
;�@|Y1E�)��L��'�FoW%�

+�T
��� ���"K���e3w��
�
���O�I��6�>L���D���,�����*����6g3j��C��f��k�c~ߣ*�p��
+gZ�n���ʊz�
�V-V\~��"zVe�������kv�_���X��uk
+��(p]z�-G5��(�MZN����G���ܤ�C�
+PAA
+�.����|�ӓ����D�e�lp{��5�6~��,����X�$��ы�1vu���+f��n
}��F_�}�K�m�^#w����1
+/P�*��%OO
+	�p��{x�e��[��
#҉G����l�V1=>z��Ɣ�V�����*CϹ�(��HW�H��2��{N?=��i�d>db9��j��&(^7�"���
L���1�q�+��" ����3�'7��l�6�p����F|/��#�@����xsJ��d
�4T�Gm��3
Dv6_K{��`W�6��P�
�Hg�
�1=26M8��R1� ��}��
��ȑƳ,IB�4�,$�����(�/1�D��[�q7C��Dq��_�~7(�_ţ�4@��8�ޑ�g�;��mX��-�6_��Oy�e\
Y[ϗWJq��c�ox������
�[�:�QֹS��*��Z����d��۞�����m�T��=[��,��̜"OXL1D?y����#|R�R7����Y��Dڳ��\n���\3�A

?—	9�l�GB��T��#0dhm�e������S[y���
+|M��_�h�h���]�����)�H/
������$P��.�z# 9��7�m��<H��R�ư�L��wU4��|�{
�)z�[�
+�����@�跡گm]
fߐ�u�`t�������,mf��r
7�nYg��i'��0�i^�jsw��0\k�n��o��
��,�4�q�7q<N�ZepFz�h��������߸L�|^8
�X?�:q6$�z�C>V�^�ʾd�ŭ`ݮ��%-c��"����W��ـY�B#'B-UfMa�)����֪v�Z��f(J
��%�T�g�C}
^�ú��n�9ET�i�_9I��M�
���N��ㄶ��A闏�ş���fYo��"p��Ϯ��,+J�j���lY�4Pa�F�}\�����J��8��
+~�=:��{����Yv{]����1�d"�#-Dr�
+G��� 3��wUh;��a�Ex7�ɍV�a!�.��[�kс�"��7��&
+��n�$sZ���x�����d���~y���7�~d��
�P
EM�.1���D��B�N�
�	��Ÿ��S'
+�a(\G77�d+*����7�P	�J�k�Z�8vo;L��ҵ���Z�
+%�|�Y�!�]����F��/*�l���
�ƒMK������k���'B

+t�D]���������\s��3��ft�.h닫1N���8a�	�!�-�\ڴ�� m*�ͼ��G�ܡj2ț@!F[
żH�.	��㐟&�f�*����>���̃�P�nK���K�a�
�X޼7��ʒ������5\s
?�5��c�P&]�
�ФK"��d]漻]�C8Tb�̜jʻ�鷎���t��&º#��n���
���;\���ƃ��k
����:*� �|X��-��r��v�Y����[���
\
��������ad9�p,|��T�GJ?h{	��v�>��='^�`
ڨV�ك6�sߎ�a����ƙ�q��l9�Cg[l��1�CC��{����g��2�H�&���Y�
a
+x9��Tا���'}��
)�/�y��D��y�
+G����B�A8�S+C�H�45�<(0P�
��R���_�+z
j�M�e����&�P��C=��F�y-��ƒ�Կ�vg�r�i:	W�;8����
�L��c��e�{
+���q���eg��7��z�|B�qmB����gھ�ZS����ݻ}A~G�_�̙q��'%�T��
��A"CpVoJ
x��������"�1�l��,V�b1�Z��7���q���${ �u9<ҟ��o��-�lBr�>��զ�+
+�_���4��z��c���/��|i/�@�<�+���d}���v����Mr��p��@,S�!$�w�r��2f�sL��њ�� S@�Z�
�O���9�Ң9B4�{-/R��h,{��4� ��-c�c
+m-��7����.F�S�Z�9Ln�~�PY��b!G-�%wIE�3q�8�oЃM �A�*�~)S���L���P�q!�+K�
+3��m4uBJ2�s۰� {�2�W �5������.��wh#�|�`3#�
�WPˁ�w
⯞�%9s|�����#����3�V��?�~��ݶ2�I%�d5�-?�"��E$���j��j���s�ׁ���0��*A����ŝ�ERw��8��*�Y���Q�	����$��=����Nr�p��
+N�lp���g��
+ ���:{��^b��@+�R���K�����)�څ�qN>�NӰ���&o��
+�[в���X���+�%��a�'1�p�RVM�g5C��[�#٨Q%���o�L/3��Ywx}k��]S
�*$Tl秖��n��Ib�w9>�x;��6���U0
�����ͱ�	3�Q����_8�hg��:G��#�ŧ|
%b�Ț{H.*"֖�y��O��`G5�G3m��
�p���O�\Gt��l8h��u���h���[����w�Ew��8��oij}��o�`��KV���A
�^��u5
a�wp�$TUU����ɓ�C~���B�TWE%�gi
ҙ�\P��l8��*Ӹww"��ݩ�KD�Uvw�p�M�S`.�
+k��1����0Y��`�91��$��9��H4�_���
�"Z�N�W=b�.�d����S�Y�Z~01 �O�w��oj��m��;>xx8�=�-�H��W.���*-ႋ�-�Ic(��X
���d�Nn:��6��{�
i�R�HԌ�Ew��N����y 
+endstream
+endobj
+4048 0 obj <<
+/Type /FontDescriptor
+/FontName /LEYKLP+CMBX12
+/Flags 4
+/FontBBox [-53 -251 1139 750]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 109
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/Y/a/b/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 4047 0 R
+>> endobj
+4049 0 obj <<
+/Length1 882
+/Length2 2735
+/Length3 0
+/Length 3324      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<�k�I�Q�f?
{�3fb�}I�������1Ø��9�}+K�c=Q"�II%[�,c�FrD*�;u�yO�9�����{ݿ��u�<*
+�.P<�
�$��P�&\0�3=�j
��Z3
+���$s,��h4
0�� p] ���<���f�P
+�Ǘ
+
0S�&�L�A
+�%vX�/�ϩ��2� RC5"p��8�A %�kB�p O�Q/Ї@���y�&y��?�xZ�_[� %�c
+8�1�p,��$b(��!0{2�,����a��-iD�=��[�?��/֟@
�SC��QA
+`Gƃ�?��{�d���b��	ɇP8RS
�G�dI�*������q����N�����c�-1�
��mG,�Du

 �����7s�D!� '�4���
!��ku��Y�pd<�� P�,��
�p��P at 8
 ��` �p<�4Id*'�t&�&S ���`^�B���Kp-- ��Q ��rR�#�0��`����
`�P�Ѿ�{ijJ	�"� ���
��tP����h
+H�~�������A0�AX��8�����_�,�{o�R��-��i�����d�닼�4>wZ��#T
+e���	�{�&�L":�]`�C�
{�ԋ���}��=O��,h��??�-K~&�Q�ð��Dpˮj�y�C�}��__m~�:͜d	\�+�fCN4�^��M\z�u��\Lf�vJx^]�bI=�?7�7�\`�es�9�,֫=V2��R��0z�ι�o(�y�M:vq�/�/��ע�J����~[�zQu
u�;����,�|�+|�~����O��"��T���\+�N��^�?��X�l;����e5�Z�T��z�گ�2=D-P�{�N+�Z��dhw�v�<�E����
���-�����Ԍ�{e���S�W�R~�T���7ECZo�n��Ҁ ���K��-~�g2��٥>�U{f�-�A�8��g�Z�J<ğ���>K/��Mڃ�t���L
���d_[�[|��UȧA<����UB
S�wL���N�5k��ȍu^aAכm�
o��j%I�fY��lK�`�67�d�L�Np�*l���5�
β+�X�Nn:
��m>r��$_bU��.X [...]
/+W�wy;J�����X�a$"�n�1��)0l��h5
)�Ed*bf�X�k���Α"��(~�A�G��쌄��n���orc״�/Q�5+�w��J���E�6;�1.X�H�-�����.�'i�n0A��G�W���gº5�@
���Bd��������Y毞"����
�&lA��(.�}y7x�U
+,v���
S��P�_ۥ)S7D;Ш߰��$����:��ne���Uy��f����
���0C}�©��K���ly��������*HMJ�A�s�\
+�Bօ"�AZ+�Eb��x���
�2�}��'�>���,rY�<��_sj�Y;���ԃ׺&�c���0$��r���ڶ�r�f`Z���r^��L�	
YA*�iy,���x����/�<m%F��>K���Fߦl?�M��rBC�۔����wg��rm
�!..z
�;�}=�"3��'0���G�c�?�q��]I5��m�R�=3�FCUt�7�
+�
��t�o�6$ܓIT�
+�2�8��
�;/E���n��c��
wR��l*
+�~��{���m�`UE�q�Q�4AEE�=�E�������ֲ�	GqW��T�;�_����V��[�+���K
�s�:7-Ѥ���zcs@���ɘ5=�(�+{b�_ Hb�S�~=�nq�j
��\�l�����k�E��eW���9�c1ݧ��k��"y���P1r���b6��ϰ�N4q,^�W �4�Iq�q�^��6S
�h.l��Z�^ຐh�ȞQ�<t�mٿ�J/8����S��u�2u�:��.�O\3�
+���TG���Ek����R�T��i
}6��D<�7����|5�|O���(�F�a���HbzZ������y��%w��#����� ��q�Z�A'�
VO�ƒR7Vp�U�Wiy��Qf��
{87 ��`��1)�f&����|��)���^�yK�
+yg��e����&i����Bh�bݦH�˰��bL���";��	���?i9�q���Uu�<#�$�K�='ס��ƨ��r�ݼ�r�U�������JwJ�=
�A�}q%'����q����d����k�
����';�;X#����M�"/殉��
z�Uekn����v���'����r'zz��&��7�n<�l�eO��&%)||Y�N<��B��񔾉Z�u��On>�I}��'4���<�W
�[ܽ5dg��#�9}l>�h��
�{�x-̼V�)e]��٣��N�M�7|��u��c
���80�۪l=�T��;�t1�Ro��4�PC
.�������
b�{[�:K��f�7�s��c�Y�5�u6i�;ɘȗ��tH�_����Y�Yo{�OC��U\Z��|
���o
��TM�n�k���i��\������G�����ޘ
6U�x�;�1w�o�\ꮘ��q�����S�.��I�ʘ<��[?_&yͶm|���?���eFQ$��
(��* F�w�
���썙���g�\�$w�
��uT��RWEe������vSc�k��Et_:�-�̥�'���=A�<h��u8)a�M��
+��]E� �	!a��[Mx`!�ɩ����v�:�*z?�KR�|ȳ���V�qj�z��v�A�������1�8��d�'��cic�4��J��$
������~2���y4�����ݮ1#y\	��,(�.���ePö�;��>]2�y�uzt���я@襌�10%�%�'��lcb~Ȳ��=��4�M�
+��Z[+z�9eK�'n� u��
�V��S
�Z�g���
AKJf�9
M�ƏKμ�J���
�&�yz�ii6vvdom�~!�=_����c�hZ���Jk�Ջ���/�i7�]������6�
gN�_N�v��*��ֆ;ᎋ��0]��Ͱ�D;<	�l$��<�A�z>,�у9ː���:2�]�(���Hz�⠣
ۿ|��p��-]'���[g�5l���c�W+u>M�����Zx3��t	
�ۥg�bv�~��_{c._L�	����
+BE�^�*�1q-��pS�qBMr
��W:��"s*��T6��!}2��
���
okWD�쨜y����E�R��g�2��>����]^����.>K�r
+�����wF��|i���l[�
+endstream
+endobj
+4050 0 obj <<
+/Type /FontDescriptor
+/FontName /YWRFWO+CMBXTI10
+/Flags 4
+/FontBBox [-29 -250 1274 754]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle -14
+/StemV 107
+/XHeight 444
+/CharSet (/b/c/d/i/l/n/r/s/t/u)
+/FontFile 4049 0 R
+>> endobj
+4051 0 obj <<
+/Length1 1158
+/Length2 5424
+/Length3 0
+/Length 6130      
+/Filter /FlateDecode
+>>
+stream
+xڭ�gT�K���H�&]@C�N�]��R"(] BI 	M at zGz�.R�w�&�HQ@�w�
+��Ϸ�g�ʟ\���̕�y�z�ɪ
P� ��j8Z at XPX���
V
+

+89��PK4
W�DCe�����@EW[��PXRFLBFL�	TF8{"a�vh �2�!I��	����-�vP'lkKG a
��=����@�?f���P������5h����?�
�m@ɿ�W��
�A�(��+��*BpGO j =F`ׂbM�?���\�������ڦ�
+X:�
=�7�prvEC�@m���;����6su���C��#�Zn�
+�U���`
P�.
mm��tDA��C�K`w�O��c
���|�9�?Gu-ap�O�������a�!a
@!A!!al���7���
+�F@`p[�������`o�ā^�@
� B=�� A8�������q��@���?IRR��D����6��7Ia���tA���d�IA���v"�7����d�b
lC1 ��oǒ��
�[[���@��o��t�
����!V���
������
��ο!V��7Ċ"C��7�Z�C���o��r�E��z���}˔�
^صDą��u�@Iq!����vE"�p�0����m`؋
�z@��Sk� ��ڐ���y#oyP�iEA���5i��[���&�u��@�
RS��J)�w
�� 6�_k�{�����^2
L:�x�z��
�/����)+|m��7�:�����_�Z	+�6�%_3�D�LO]
�t�
�:K�
+a_M��4i%A
׿�\l�#��}����W���
c�diґ9���i���x�,
����$c�?UJ�,h��U�&й���ڛ�x�3���m3�y�}0J��o����rO1z"�N-R
+�8�{�=�Tbs
+�����܄6�mN<�ő4���l
g9�-q�,�YA��B�-�^|s�
�.}��c�)��,�T�>I�D,`���5�K���'����ᷮ{�?T˕
R�,��VR
�� ��^���qiW���<��8���KOd<�Ai���@��s,¥3�
w�xM��Ѓ�

�Ce��R�q�c*
c`�/b|p�F|~Ǭ�_w�n�Y�!�p�f�6L�_:G��!5�t�=��
ǂ�I��V�O��s��Vݗ���"\]�_T�?\�Z�n�3�1�\��m�̘T�{��"�����/#�26XCB��f9
�&C�s?31w5o
+:��SҝĽ���8k�n�ҥ�J���ItK@��s�e�л�	���l�m|��.�V2�'���?���U��>�d�p��D�����>6�#��n�6~;M��π�eb!��h����x|�O��U������=�c+���jyUgT��J��tJbUߕ��I�>gaT\�LT(
+ �6Qсy�^�}u�"����ۻ$�
+Q���k�M����~�5�ݱ��{���*੼n�L�縟\|��;Z�7-@��.�z�<���o���O'0Gy����Uf��m&(�Bv�U��*g��­G5��7TԹ�_�P��N��w�gi*M,���Ⱥ������e�i��.��ۄVuњ���a��`�I�4"b,ig��"��n�gq�3�sg�2ʹH�b�Φ�iIj(�R�����=�@�yg>{Fy'pC)�{�8������$���;.*����TH+���I�an�
!��(4�]��֎ZɌ�rt�#=����q��c�]����Ym�F�;Cj��/[z�J\'u:4:���^-�Qi��:F[�
�
+?�[��V1b".
_��E��#�Zr45tmn0�y5gH���i�e&���Q~q�-5Jt��H<&E��o2����	K�
�M�r��H_����Q����)��S���
L���RV�
+��."�$�x������
�vP(���̓ԨY Ӷ�=FS�u�����!���M�bP���$�����C���f�ħ���(S����
J�o�Z2?�^��dG3�	S^v �/H
"�U���D�<��ͮ�7��
�d�~��l��
:��+�.�Kd�;���)�OVʺ@�ɀ�m�O��Y��z�r�ߧo�5��v��n�T,�*ԣ�	����ungf~�� �
6��'|�6x�)��F�@�i[
���头�
+�sqA i��i�=�X�7rZB�ۦ������$��RJċa�GT�c?sT����
+C�R�
+K�k�Z�&���VT���r�
d���ۮ�n��	^s�m�K�3�5��P����
��e�XG�?�?m�b%�_ů��V5�%̻��Lܚ|���p��
��/7+��#�ٳ�o���p=˼X�B��j�gɊ����؆�����=n�}q�u��_�����w=�?��gt-�RN@���#j2Ypf{M��Y�Q�'��Q˶�r�r,��.[���mk��7�Iq����8�e :�M�%��R�~�{�-x�'q�k�h�Ǵ��A�ͼ�
+�<�U
��Yd;vy�Ŀ��C�o����K�`�,muaq�"��x ��{�#\��){�a����[��΢]���}7��x�����
���S�C�$]cf�D��fdCM�~I,쿳
���]�Vk**Y�iM�
�	��v������ې��W
J�Z+�i`�F�
jf28̐u�M	��$"y%Z�`�+��O��܂si��g���Ԓ�����������\�2ьN����<��y
���[�����GN��
YZ�j{�[X/Ctu��1�8v
:��\�.�_"��^�$�}(�?�,
Ի��?�j){�]8|�v��.���$!i@�HfV�-���L�{K����M&�s��7_2�V�$�~o|�3
�t�
���D����kT����?�s1B�yB���iE�gˆwEU �i^�
+����|0��c
+��L��O���5�  �FG���_Ӑ|a�V!�X���iX�E��ª���KJ
�v���n�|��ȫ�br���S�X<wa�,�w��Ṛԏ?q�4
�p��ӽc�В#�9Z��3g
��
�6�[_����<v�d�b=y�|������)\
uK�0������sJ����Pg��E��12�9��W�exE�s�DHK��>�w�Qɤ�΢w!�5vwA��r���M���Y5"�Q��ŒE�)`���'#[k[˃3%�@�I������!
�9�K����%QA��u�ԑG�����R�hK��cj��[��6�HFN7���Pd9hq+�M�
�t�<b4�ɖ��:d<��M�m96�R`�E���&^R
�n���S&���[?�S��S֯�k/��[�5<�i������mɏ���%
������R;꧘��,�\J�r:��.�aҼ
@f΃���3-\���ص�^�~,��^
=��fڞ�g���H�'' �������93w5���̥�z=�>�Au�H�����Ʒ)I�8��� (�C��
+f�%]˧#���C�
�����
����3d�ͼs
�@ɣo�"����8]#���4�`�>
��
���=�O�Y�p�a��|���r at k����}Ì?T�qV)S;�^T�+��|U/Vb�z�����hՇ�oXd�Q�?.hD
�6��}'m2X
ۜ+s�6�=�Ga�K
��0�l�L�/1'�
=E�����;n�[F�~
+3�l
��ױ����9u�:�b����\�|2L�|��c�M����$�y"��)��Wn��QYY�W0p?7�Nv[�U�~Fj���^�
@�����-�i/��D=�7�]�

��j-
+ܸi_����;�+0�w�۷�&U�q�\Z��w�Z>�e��5;j^��
W=kZx��cv������{��8h�Db���>v���=|+]�K�a�k�r���FY�P�c_���k�[&��=>?
;.|��H��{���ǻ|<��yD���w�٥�w*�ON�HZ�(��^c8��V
3G>
Wؿ�
E��gVf�
�Z�v��뇣�+ր�:2�)<�ʯ)������e�0m^��N:T��8�&�c�|�'��G�:~|�4�E��y�W������(q2ݳ� �FS�m
�-v��*�#P�H�7X�VJ�����'� �uR��'��f�G�)�w�搴n�o?���MO/�X�%�Ph*�92iD�s��^��{s ���2�$#r���_F�Z-	!6���[�q�22»u�v�#E��.�]��?�G�i�	7���5F�d����b�J
��a>��j}��ffA�V��py���w��E��t~��Q��	�ɇ��
��R���U
�� [...]
+�eY17E�G�jcz�����l��.M
�W�&<'~GƱFy�������RZ���5S�"��e�^pX�2Ue��M}��f{����ݑ���%?���OUR�يZN��7/����D/3T��� 1�I
�\ُd=C���
+�+��/T"Z�\\���k2~���'�	���X~����5���|���sc�-[O�2��
n����{�6��e�
+��;���T��?�F�EW�ݮ]�4�Wؘ�_2�ڨ?�?��d@�=�_yf�
T�q>X���o�>�V���HaK��4-E��w���5TN��G�^R��2�FgIx��H��=C~�
�y�>m�a �
К�~����ܵ��d;dP�y1v
�܋&�"Z�
	~��s&�[�
dl����L��w/]��~Q\�0�1�PC�j�Ƅ�[��4��"\Z���F|��..H�d����yS^ϯ�ix*r'��Ha*?���[
��3�����
?�H
+�
�Rpb��
+9����˰qiw3Nv6�
��f��x�LI��h��!��=;��j��^h!���mE��k~U~7Ǎf� �t�
G+Ϗ^�P�퓸b��ŕH��l�p|�Y�NBm��HT�X��XI� �*�h�߽���^�B
��ȕI%��ԕzߎ���i��
�ե'��=nI=�N�=驦R>O�\y�7n�(�s������4*g�/��'��qB0KB�ܳp�v ���
��tk\�S���֨��6��&,*��nt�� �J/��U�/��
�`u@�CD�U%���L얥t|�hL�NBwd`0����cy�KkV�NU 
+'x#�_�����ج���F䔎�oLe�N��G�\��A���H���U����˩�`w|cjl_FN�es�|�%El�gP���F�2���;�����
4L�����4�g��ދ4yij{��^�_�S�����'�To�1�
����
�h�]��&�P�������
����:�����d�[X*��Ƙ�����Y�
r�馑�����7o	8��nܳ��ޮ
�B���mt���o^
�x�Li����$�)oK���p-��P	�/V�H#
��&m8V����7���Wr��"����oc
��l�zk;�Y�8m�
9��Q�<p	��A��
~�ZI۞S
� �8�t؈j��
T���{��:M��s�d=�>qm��
��䖻�Н�
f��.C!��qJld����^S?���jX'̼���s���5_'Dݎs��e�z��%��)n6d
c���4+›GG��+t�m�c��g�-
+/W�;y��DO��ɛ�+k�"����5�o6]`�G��<� �I0ϭ��#En�)�%�
�"�>x��E
� �>ũ4�6{�ӻ�Ԁ�9��d�����E�1:J7v��9����z,�S�I�A��
���^;�yOD�H}dr���S�.�@_mu�V�A�`����V=oH@�	9`~*I*���p��uh}m�B��)���Xv�^D��F�
����C=���	
W�nԲ����:�pz�;��?��<u�E�1K���G���S�'���ۜ�C��84��*�X�x*�߼�/��"��krdE<s �
4�	eh�{�y���0챱X��q+�Ql
�Y箬���
�K�9�U���C'ΗW�^ɷķ��w��䁜����>�
Ca>i��<��Pl��8�:0;PW$G%`Q�F%9~�Rϖ;��x�H��y?񩏎3?L"�ˮA������
�۳[)j
��Py~
s�!)�b y��VR�E`�8��RA���Q�Z;n�JA���N��
��
+endstream
+endobj
+4052 0 obj <<
+/Type /FontDescriptor
+/FontName /DNOQWZ+CMCSC10
+/Flags 4
+/FontBBox [14 -250 1077 750]
+/Ascent 514
+/CapHeight 683
+/Descent 0
+/ItalicAngle 0
+/StemV 72
+/XHeight 431
+/CharSet (/C/F/I/M/P/a/b/c/d/e/f/g/h/hyphen/i/j/k/l/m/n/o/p/q/r/s/t/u/v/y)
+/FontFile 4051 0 R
+>> endobj
+4053 0 obj <<
+/Length1 1467
+/Length2 4375
+/Length3 0
+/Length 5136      
+/Filter /FlateDecode
+>>
+stream
+xڭ�w<�����*{f
� �p�{��989�1��e���M!�"�DF��&�c��Q	�;��|>�Ͽ�������_����z
𘘋�"�NH-,'��
5m��@���$�������b4
qHy �����R�@)����<D�R ����B��� u�I�@Uw�
+�:�\��
�#h����� q�*
4���h��Fz�"�`0���NH�R�%]�3(��0������&��~�<"�t �t��0��!	V�?\�)��F9����٧�pGw:��
����4�"�^�?S���3g�D�|����8G4
+��qA#���
���P�H�	
+w:;���?�H
�O���� aii`�a$�����&�(
�"��_��?��_kB�P�@;IB��D��W�(���c(�
P
+*t��r
�$�
�
+
+
Q���'8��`q�- at BSn��^�?nT�p�r��!qh�3N
���#�'��
9�N�?�/�c����ؿ�w=�ǿD�/���~3(�;��!�?��?7���G��&��<�F�O�V���#���@;���~1�ܯR`�����w�
K�w�H��O
��
�"��������Ԧ��:�?�)&�y9"~���2`�Կ�ߤ����_@�pow��߽�4S�����2�� a
�Q?����`��a�Ť @1)�
aR �W)++u�L��ᐸ��=��?kgA��G�)'F�p�[��j#K�5
D��\��F�-C/�E�'�v�{��<�9(�d�^,s�
�{�6��im�y��G��}
�3o<g���4
X����J�X;��%2~7�S�b[ԑ�չ�oҰ�@���L��oM��[2�6Z�h˨�O�y�h�=K�!Q�~�)I$��ף��E���M>���y��W>�ww7?��]�;���@;C��s�
����:D�p�O'��J�F~\6�&^_�Cz
ψ���j�F�����D�@I���ҁ���&�o1o޻�TX��#j� [...]
`���̒
�kC�»��JQf�����������[?�X	�'T��=5g�v�����@i�����^�5�������MT]���t�����h�B�]�.�[;as��-o�ي0��9��P_�U��i���׈r�0�Xa�����X,o��۔�X
b�
�V��t&�5���Iב���
.4-���x<�~�
^�%w���஫v�m^+�����s~�KS�=�]���ҩ�}�/
���
l���Dd�ٷ͉��Q὾MJ�9FNi[�Ρj�nZF�GW��C�J����_�RN�5�_���;��]�7ȱdn-G�_��Z�0��՛!�r���S�2��L
*��
�֜��\X/�A
�l �	��xC���,�#���œӈ�M0g�{�B�ێ�wa�����T
��y����sq\/	:O�m}���Hi)+
��<( ѥ�~����n�L��3�w�R
QhUMi~1qXu�P�3�G4���&k��dٶ�6%�7��W#��f�k����7[�X�,�3L��HaVl4_��{{�%�T$�LͶU��!L�8{��w�~c�0r�6.N�K�9Z묅J������67��
+"��W��%���O'_�\����j�5N>����#�
����,Ra�}�	
^۠��`�M�s��7�E��$�\�
+��Ug��u�ӛ���m�
".
��~�&Y\
+ۛ�9�-Yzr��B�������D\��3]ę;ժ�PijR�
+-*�J��xS;�(�W�

tbSy�K��D
�P�v1��Թ�i#��"�Mm�I��H�υUanb��\����2���͋X2��P�e����ݍ��>�k�Z�m�A����TK�̋�)i��\,���	l��ͺ6y�ޞ�~�6�0�e[�
g�ʔI��
�����ߴ/�ye�y�EZ�<���$w�)��l��$O+�nyul��U9���@|T����Р���l���ǽ\�a֞P8��j��B�Ԓg�	�.+
���Po2}�F/��y����+��Nf{CmY���򝘳=$��#8�+q�Ȩ}�X�eբ+ܩp��ѳ�����&n��Z�
+l��Ib��,��m<��5�]Wx��;//jx�gY7?���Ne�'��gD{����P'ށTՈ��/��
�ɡΐ4h�R_r +bDؤ��ܻ��
o����M��,��#N�̕R�B'��>�8u��g�Yng^���N�J���0���sS�
����=^��m�mN�`�i(ɭn��v��x�&H�D^����RØW�\��b�hZ�y����T>Z����#�rF�
b�H�®Iu�|�ͰH��v�XOO��Z���K�;Xo2�O1G�/���7�W ���ͦ��kG�����Z�
t���#�'�ۦ-�|u%$�Z���
>=��
J�U�l���
�/���8&c�	�y!hXSZ�qڇŎ)k[d�˨'��)��W����Q݆�3|�t`O
�	�W���[R��zH��~�0��xRu��!�=�u�IZ��N��
�+!�:�V�5�����������N��-K%&������ۅ�ފ�焥�aP~}S�H���� �g}��9[S���-��	
�\
��b;b�M�M�,�	�LZ�
�I(� �#���8R8F�n��g�� ����
�����x�A�����
���o�B�X�9_���(�$6

]/��R�zY�FG�w')���D��
��`k)/�P�HV'y��[�nk
S�B�H<O��Q
+��P3���R��#r�����ڹ���
Ŗ-\5U���վ�F��$S�;Q3�|�����
+�Y9a�Q��2�������{-].�������v.��Utω#C� =�e���\� ��)��"��X�3������ߓx:
<�L)
zW����c�WF����р�I7V�@��7,G
��Bh|b��e�������v�=@�K��ֲ����S|h��A��
i
�-\[0L�}����^p6&��\��U�1�Q�9թSc,��yEo�M�CGw�B=B�=���m% ]��
�����C��{m��sK
P���uw���5�#i����@�&M�T�]m	y�r��S$wg�
+�[�n-
��m

7f9� �ȲZ��y�r\{E�����3�kIWx���-"�R(����2^}ku������gY��"p�B�8�+c��DF�B���ž�����A�S{�����퟾C�xL�T�K,"6h�vr��s�;�7�I�D�[��9�]��;���G���*�h/*0S�]�J�R����
�^��7b&qDgO�`C�E]L] փ������/Y�Eg;+^ύ咚��&���}-V�)�
�͢�Ki��S���7��B�Š��7����͗\��@]iPN� ���G�j�'�_��V?�9�m�2~��❽�=].�X)o��7���H"j�S[D��4 ]Ie�:����{�
̸����k6r�6��79�tc�1Ʉ��\r�I�v��V*S|�{�����^w1"-����Ă״�t�ͽ�k,/�r��إcԋ9�s���k
��#IDU�"�� 
+9ܜ�>_��Шs$�קo
rW�?�R�<�MdçVk�2��05ce
O
+�w�9 5�N�L��c�B�#��8��<���$e��(��\�o�
V8�H����
��0[�"Rib
X��@;��b�~�sV���µ �|Jz�4�~����wI�%	��Y_=;�hL��F�0��W�����8���^�[��U�=����
m�sG��[�d
돴+7gs�b��t-��d���o	�GQ�%%�
����7^�~��ʪi
�M��
��i�ɼ��*u'w���r�� '&���v7ߑ-6(����2-/��*�̨J;`���)�o�EW$/`��74>PQ�|��.���~��'
�~C��>�f�hH"B[u��&m&���n�QU�p�wsEAܨ9�^�#G�>g����
Dp��ͥ��b��Ȝc�K��wgK�+����]�
t�55X]OU��3�`ߧ�OjRZ)EtX���b��
8.*�
Oƥ���f�\QK��րH.:Q�t�J�'��
+qT�l�ƖƦ���ܭ-?7�0)��0]��(�|�3�Ij�૝��
�� �p��^KfJű�*��h�v��|�A���gp��st��IȅKQ1b�e\0�ZIcX�s[���m�>��U�Z�;
���'�h_�w����&��K��)��MW��� �L#�����Y��WpFgj�>�|TE
��a0�g
lɟk�҇��s��+�j�v�,)=<��d�`��6��l��g���~sQ���
E��ׂ{��Z� 
+Ǹ;ǟ�?N�ڰ�|�?:���3�}��`���8�s�m+J�(���Pm��9��1�^�
A�]�����ż�K���z�DK�
]�X���m�Idm���Ƶ��$��6o'��%�a|
��DF�j{�kZ����یb�T2��,���5�W�w1P ��ދSBkh�9Z$4�d������Yx�z�u�l?�ǫ^�*��g`��+��Yi
dz1_Ȳ�Û݉)
+J�%'V=���/h�E�N^�|9�y����ㄶJLa��&m@�I����������::A�Ԑ�@�ՔEX�'s(�"�"�GJ<�@%+w�y���i�`�]�� G��mW|�])�0��d
���jZ���� �1����'`K�Cf�D�r*���ج��s�!h��͑�+(H��
r�l=
��W���Ԡ�xZ^>e�|���]Wa����!��P��;Y�Ts���֕}<١q
t�0�!�9 ��%�@��K�p���
+��3�ũj��Z~~�s�y5c��� z78���}�H�%�-ĝײZ� ���T"�?1��UG�����?�����{*Щ ���@��c
f�jH�

�;��ܩ�
�.gJ?X�N[!#s��]�9��⎟z
�:}@<7�!,�ɺ�h D������ry&���= W��J`����2�=�e� 
X�
����ػ�VN�J����79�@W���>��7�zHƈ�+��`�c6����/v�9dx��
IO;[C@�G#�B����� ��7B
+endstream
+endobj
+4054 0 obj <<
+/Type /FontDescriptor
+/FontName /UULMDN+CMEX10
+/Flags 4
+/FontBBox [-24 -2960 1454 772]
+/Ascent 40
+/CapHeight 0
+/Descent -600
+/ItalicAngle 0
+/StemV 47
+/XHeight 431
+/CharSet (/bracketleftBigg/bracketleftbig/bracketleftbigg/bracketleftbt/bracketleftex/bracketlefttp/bracketrightBigg/bracketrightbig/bracketrightbigg/bracketrightbt/bracketrightex/bracketrighttp/integraldisplay/integraltext/parenleftBig/parenleftBigg/parenleftbig/parenleftbigg/parenrightBig/parenrightBigg/parenrightbig/parenrightbigg/radicalBig/radicalbig/radicalbigg/summationdisplay/summationtext/vextendsingle)
+/FontFile 4053 0 R
+>> endobj
+4055 0 obj <<
+/Length1 1661
+/Length2 12920
+/Length3 0
+/Length 13869     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX\ݲ����������	�qw
$�;wwwwww��{�c�}��{���]�gޣjV=�����&'VR�6�3J��:�330� D�奙� ��LLp�䢎@Cg
;[1Cg ���� �b
`a0q��s‘D��=
-�̝T���J�� 
-�
m���@��Ɔ� U;c
��@����7� *@'��+Є��`ba�
0�Y��1�K����
���M\��7�
+tt����Lj��H;[k�	��Q���S������������Ϳ��۩�'nhca��2�l�]��� y;����j�G�<����濣�Ά��¶f�@ =3���[8IX�M�,������N��mM�[ɧ���(�� �)I����A%C
[g5{ ��o����/��h��ab`bb�L����ӷ�j&nklgbak`a� ::z�}
�Obx1,lM�� ���bF[;��W ��� L�
����
� F�-�q E�'�Q�?���9�_b0J�%V ��_b0���Ϛr鳦�_�0*�%n ���볟�_����X �*鳻�_����>�S�K��5�C�ǒ��?��%`4��7�������/}�3�����ll��>ӧ`���)�h��τ�����
��?�2�~Ne�w/>�f��>�ߔ�
����Y-����[�?�Y�?����|J�6�12����s
k���_>�Y;;Z�;��̧6�|��q����5l���a��
>��::[Z�X�����S���ma��L��:�������
��g����|
+u4��G�Ә�s�|�da�����������^2��;&˧$g��Y��w�~���Y>ջ���������z��G�����R�s��geг�3�k�� ��L>�W����#��������lj�y���@c��E;c� ��Ơ���yӥ��N)E㝁�)�
���h�MSj�/7����e(I��&��۸���C^���˨C��9��ЗƧ�z`�Y���6��+D{�M�����[���Ur�̜���a%K�n�[�Nl���2!�O����&��8ڊ{9��˳[)��M�G_��ݘ�ZGL�ϒ_H��e�v7ݙ�cN�"Z���Q�!���N����h	�4��_������M��0+��'IJSZ��4͸ߚ_� Xݫ�e#`��W��ͪz��?�پ)�\����
Y$�ݷ���ǏpܮKc/b�J0MZ�4AW*�S�q&\ȹ�!⯆���‚R��B�6��;�-O� -�?�����c�g��l:ym���8]qw���|;�W'�]�i,z�:��jK���
�yb���߆�%$�Ța��`
��b���̣Vzf�c��;���_�	�x82f�x���ԇ�΋8�C���[E1���xq]�wʖxLs��
�`Q&��y�+'[��Ȗ�x\s�&�rW_1�g{w�	7�f9� ��d}�i���G˯�Qb�^s

�
+�w��:��U>{���+��ꚽ�
+��xE�^^/�������,��Ƶ�L���,��*�<��b{X��1�m��ۿ#Յ�_��B�
�����w��j���}�jgfћb'z�ed���١?W? |�`لS%NJř���VI*O�ڄ�Í�t
"��&@�+Ɵ�?��H+�ZP�
�Hk,��^��*�U�M�ƒޟ͗�F֡��U��z�F���Iq
���=��\����ʠw;MC����@�fW��3�<X�߯#�&fL��[�Y��.Gd��$B�jv8S��B!�bĺ�Iڀ�帄՟�m��v-�ɪ"E�5\�s$e�t?$���i_�'C��~�
;��91�+	��ӏ��$��f�	>�*���9Y��mì4&�0~|׮�|T�a�.���SI#��a��4�@ո:�% �m�g81�J�l
��V;W�$��)�X����w}���=�+inۃ=�+X
+����(���'�`�לER0����$��
�N_�A-Q���YA�mwlu���� b��
+�
qQ*WK��s��m�4��P�|ɯ�mӊV�M���ͱ�W�r�4��xh�)t�!�T�
���Ś-q�z�_��u
�Ph��G
�����
ֽU
+�!�Ɇ���Ű_
M0�U8�x� �s`�u�ÙK��peq���íC��Z~c,>!�~��O�h���N��)����v̬� �̫����(�f�J��T
+h�Ƹֺ�8�����f�2��x$P� O�)�M��P�=��o#��j{����9z�u��>�%.�v�{F˖ a��f
����
冗
䪱M�L�B�
W�+��'�'��<xRHJ �‘m~s����AK�с��
3x����sv9��jv1<�3����s_U��}�}s�

�`�0+^�&6c9�ev[U+2�[�v���_.��Ya���=�'Z�3թ��9�$��U�I�:�8��5�='�㻭b��3��9)�i�9dp@�3:��o뛱 ���
�[)H>䶰y���z>�s�����a�&<H[��`K�+$����N�����=�\D��F�U4t|
���x�𘅿�~��CRK�ETF��G&���>3�k踶 kƕSa�{�Q�p?O��U4�R�z�}D�+�d��M
�ix/GyV�

�1� �1Q�P�	Pt)��Y
;+�c�F�
�~�J�/NX I��A
Ɉ�ohr��a�
�#��L�+��$L.���\�[�O��@�


0<
+����Tx�N��)h��Yg�� ġ�q�i�<!-���
.��Yq�
�ΰ1�h׎#D��

,G���vs�#��H
kKy�:�!��=�7��X~�ڮX��:p�e��;H���V堝�
+^;-���~��BY��[��'=ȇ��m,A
E�&Y�M�ߺ��gj�����N�8�h_�-�`���7�kq1U���5˒帱TF�(�>� ҿ���R�g�,�0BN�=kyf&\-Z��Cv]+������t��.�K�(x�^Ŕf%ҸW�8N���ҁ���0�[�~�����	�$��#���Ut?L����*Z ���4"Q�-��Nֵ�V�����ǣ�p�����sH���`u	�N.
�ϥ:(	�D�0��{�dgJ���θԾ�U��Is��"E�9~�"��y�'���L^��Ϸ�l%[-��l;K
�O�_���_V�i
+779�?��!����k
s�
.�
�.j�V�6���wl.�
�?}������>=�D�L^ўBO�Y>�4�{J&Q����mG�U"t�|���tJ�3�y4SA�K��Ʃ!%'�F�pB4Gom�iB`s�[
+��U.a�Wlۀ+���Gĭ3kQ�+!f츀�}�Î5��ڤrX�k������ժ���)<X�ޒC�9<�V:sco�:8�8�ϸ��C{/�Qóx*K������I��a/=px������'F�*����`��A��`v
+q���
+��5X�;�*�bh�(�-P,�eD������ ���*�u�"�a���6M�J
+�
+_J�9f\e6�q�����i�d
�
���2�?�}q�������m�
+�^��������&��� J;ɛ����
Jc���;`�^�t-K�͒�^u.G5��x��]��
�Ӛ|U�4�Jx���Sh,��D�g��pܓ��o(��!LaL�ݶ{$rxИ�T��t�F��8�p�L��a%��j�����9|���߯��4��c��[,�u�'T���+
+
+���_��ʢ�!G=IY[����\w�$��
h �������l7J�檫mP���R0��[5�M��
�L�΍f�G'�=d?
�������> J�8����_9\�q}+�;su9�߼���"
��6
+�݃�� ��2�;��d�cU���%߳����o�@2�䧠�P_�1�s�(a[;],]�L���H�r�3��#���
�ߨGWK�Ւ��N
���!�
um�%8�O���� ���aC}#ë�pd?�<���YW�S��"�"�B�������Δ?
Yw�	����dwt����aq�"��@s�3�*�ۄu���e����&�U�+�$ccATE=� ��'�����2]	���G(T_{]|�.���� iX�
m
 ?�PX��u���@\�Xr��p^�ڏ���
+�@Q�g�&��dǦz̤�&5�'�r��>H�?��V�f*Rd(��O+����n�=�&nަX��`n��
{��jYgS֗Jy�l�q�`��M
�jt�s9J!�
y`4�]�ɸ�>
�^�3�BVx�#C�_��-x�y;
${�,X)��E�`�*3
��G��o���ܡ����:��>
�7��x��r[e_�d
��
���dm�c���q�o�~��$�g����
d�e^
�C
���ԥ�+����쉳��b�Dkk~�{	zn��F��&&i<i�V at H�`=P�cz�T\r���u��3';,6�*Cp�ꖵ�����*����=Wߣ��p���x�D}5u@��d'"m�K^,U�#AO�Dg�φ{��|�Z��
+4Z3~k�JB����tB�;s[�@بEop��
n��5'X�{|�B��������0X3���)���[
K�b�F��'E���lт癨��Rn+1@&�G:���G�3{>V6"��p�o�W���˸�n��^�J]
+��+
������p�qu.�����
+7h�
�J�٨������)��:�\�1�&�0�,n ��ġ`)�P��
+Ff��w��i�,��'3�@���ٮ�ѹk9\qdZ_AQ��&��ۘ�ن�q��Q��i�͈ξ��]����M+UաU,��H>��Yރ
�"�n;�Z��~����F,�\׎��/����5"��W�1C���r ��"�]!�.�t��!�/Ë́^� �Q�� [Z(	�o���k�YN-s������efuZ���
�`D!Aᴽ�JX
��}�U��c���6
'%��G
a�t�)E�f�d��Ѐeښ����) ���} mS�ঐmKl=�]���hx(hT�\R[d��νvv�O2z�������xFBUn��~�	�!�`���VK�
��T�t"9���a�?�U�-��ȇ�٪m
����E�\{��~�AuI�%����H87�h����Ŷ�=��흁r)#�_�i�������<_��N2���d:������b

�˙�#Ǯ=,U��ׂT��Q:��2P�=i�2�c�������4N�MD:9���
^l ��׷�k
,��D��l�-�o����h3
��m�JIe��f�Gn��S\ɠp"���x'��J��|r��_�@\�L�1T������Ah�7R<�b\�����G����Pe,��zv��%�o׼b��^�{���9��k�	�#��`MlCs�����

ȑ�7Q�Q��#ŵ���e
+VM2fQ���G
��_�D:��Lv�HN��7}v��ח�k(��ȍ-�1��
��Rb$��]
L
_X�>�#�������+�չs����"���9��
i�ۃ<C�4�U�$?J���}\�`��	�=��S�sa��V&C_Yq�w�`�U7w|����(,DC
 I���g@��t�q��s�/by�]�k���!�G�u�062-v_�E����{����Q��T^X��	�9���"}P�Q�u,�@L�u�?��q+�UM��;O������ش�%��!!�g<Q���
�~�hn�.r,V�W�>І߰

6�`7��Z����/7�u��.E�G:v^-����
j ��%	���'�l���ECD��W*LK[�`��XO��
t+�7�]�Ky�����\p�p#��Y��(�h�1�1,��[Aܷ�c
o�i@�T ���qU  �a?-S�w�QG�<o���T{GPP�LAD@�:�`|9wP�2��e
 �I�?��S�O�|S�&Tg����]�|�F�Ϝ
�u����E��=�DL� q����H+��
�`�A��L�ǪO�g�@��+U��58ꡌ�`RE,�t�җ�
O0����lw+�Z�� [...]
0�n5�	��G��1|SP�ۻ��ybOgtjKЂEK�m
W��1h��P
�H^���b�GQp�:+�T�l�ۓح�ub3��q߷`}��Xtt#�
+�/��vO�)�~z�Zw��+����}0�Ki��f/��
�-��7ì|J�!�id�|��,�ƥ�x�CI)�pJw�G�m� ���a3��hF�\:A�h��&��Ki��M��nE�K���i��}Eё͢��	Z�^�+���G
+��
{q�!����4�~�=btl�5����Ĝ�_�"�e���QV=��Fu�u���^_i��_F�3�V�9��>
��X�j̽�s�=
Ã�����0�	�tX|�n=�7�6������ެ��Sj5W�P3� �SzYN|��~&�������vj��rJ_����-��
�4ڌ�WZ��-��u<�}��(kH�
���h��FI]2��?��ޱ
Q\g���/���WQ�`?S�n
+�x�ҕ�1�%�1���NQ�|+�
0�	�D
B��~
����_V5��{fÌ�c�2A�LI3W�w�C��:A�nҪG��boV_~	m�8Äc�v訑W⼎i9����7�D�Y��/t��'-
�*710����� �Ŋp�`�%��� 9���@�o���Y
�
�H0ZQ�g?C��{gqP�3j�"NuT��)7d�G�7��Nd���⏼�N
+++Xr�t4�KY��fG��+?��S�������yycJ
���M.� ��@�I�f��@x-�`/16�
3�"Q{���F�$|�p�őn
+�s9��Z�z�{�HY�{-3�e�]Ȓ��ǯ�fC�n�y3	-#�7�I&�A�
&��!FH�5�"Iг!q�W����!�\g��]�n )����k�ԚN�
�VuͰ���ro���*���3")�H��Kˈִ�@f\�W�$�/����RI1�o	AN��0
+
�l™���<����oC_����='mVa
+���H���أh|�����+�f�8���V��&
���H���OF9��Ҭ`E�1���c��q�,M�T�e֠�f3��T���i:�{]���/��@���<dF
r�tK��d��a�D�U�m�C��~>G#��(b��F��<�"#�SZ�����8�|�<T���0�G�6
�]��Y͛��ϲ�XY�荬��<X�/1�CL3�6�SU>���<d�F��<�#mʷ���)&<lS0ҍ�]n{Ӄ��tL?
�ߗ~f�\(,R���g4 u��Ui4�7P�ߤm�b;nJLƃ?��/����6'ֿhzF�_L�]�@ &h�ֻ�'����H�@���?#&�]g�U�J�Q'0��w��
"��5�n���r���ᭂ{���S�g �(�r�9�@��z��q�db��R0ٔe��
�ɨW��"9�j�
]���
��o��[a4d�A��ٰ����*��
D���Q
L���ʒxד�t��ƚ�]���
�1�0P�v�P����`�@ۆ�6 ��9�(��H�{�'Jc�O���1�eBu�˜#<x?;�G^ήg߄�,
��sš<���vo�`hA?4,O:Z슂^պ
�!��;���U#���i����cM�F�
m.��2LԐ��Hj�
D'ǐ�~G��!��D�%�gD�3��DB�)�,�d�[���Ț�zd
۝Sb!G:�2S ���&P�ɖ��?k�ҍ�K����,�w�VD�ԩ��G�-:���P�(�Lcuv��$�8&��O<�VE�z���F�"w��:����P!;1����'7_b��i����ru��K�2���p���h�/L��*���A*
R�b��:8|�*�[��Fs��q�p}���j��Lr��\ݧ�_��S
�O�!�g���Ɲ$��"ꮌ�ʥ��)u�Rj}���6��{@��LQ|��#��Q\��u�K�}�����	8�/KxI�cǯU��|nb]�N�/A����G�U��oꁑ4Tިr��^��z�
A(��J��J��� W��׳�:����
 sU�"[���!�}�T�[:-B���
�>����#?��� 2ZuO��(���7՜
��w،'Sd+oq��������v�+:��&�+�qx�Úg�	�u�YvN��T�T-N�B�-l'&�xfv�q��
�_�
��:\���8�YL#n���2��v���o�Y1�\��V�����7ԂW�����J�s����U2ɮҩ�`́j�؝�
ţu�LʾHJ_$8j�$,�L]q
v���C�;]
�V,�N;��=���|J�&2,B�Z���
.�T*��iL��"�ϫ�r�
��2����^H�VlF�#(A4#�6���9$��{����l�
��7��h��M�`�Z�LT˫�o,a���o�H"q
T�O�'�m��
�
�ڜG1W�ǧ���
o?:'�5
��Xs]��������ei
IjI�16Q��S�#���o5	u��=k�ˁ\i����!Q�j��.>��CEe���/�D�\�^���,Zi��d�����FY��S�^$j�}^�mE�t
� H�K91�)��,)��9_g%��ټ����t��{D:�TZu������V��c���p�
�3v?u���g6�8��+��OcgB�k9�>l���������֩'��G\��H0�{�
?Q�C}�zp"z;������
+�NJ�9��_���׀"7-r��V2݆�L4R6 v�6�ͥ�* y�B�z
4s� �XϹm
�d��Y�pLB�t=�Z��/�[�JR1Mx&��"5/DCt�H������7��<s�K�Ԃ�����y���y��
+�EOd��0�ex�_ε E56�_ԅ��q�GA飅h�2��x�jt�[
ő���S�kP�H�w��o
K�ԣi�f�.
��8�/�,��MT��
�fޮ���=
�Kk��@F
�
�����
l=���ζ����Y���)=��p�^��XoX����J���`x�W�jQҥ(�&��qu���u���oZ}M�qM.����>l\���ڿJ�
��,�ڃ��y��f�s*�fɘ�j�چ�yv�b+Ҩ���
�ہr��3
c��&�͂�1���<W!u �}�|�+S�TF5����  ��(
+�<��q�҈F�	u
�B��G�x��fW����
>����q��[	J��{�,�ă,�'n똮�j}>*19���d����4(5`���1H��w/�*oV��P}�
n4<9(a��W�4��I*��\B��	�(c��
��M���c���>:L՟��5Rܬ�jB���R�ɷf�r:෥�'�8��vh�,T�m
%�gfQ���$Jx+�G�!�z�gӋb��7��̍Dh��Oj�\W�����B'څZX]�
��!o˭����J���t��L�����I�����N��Z|ŧ�%l��A� ��nP��1���ӊ���~=l�,$,sI%@����#�����<m�5"˞�q�B����Hwe��,�����"�ċ9�#"!�0����E
>� 
�t�E�O'�VE0��7��9����Z?�`'WGqjG��!%�4�Um�����}/-�tc�
OM�z'�<̾;��/���������G}%�c{L�
C5�s	e6�r
������o��ni/"I���#v��C�r͝�҃U_}�1Fj��_��)��u�JD�;!|lعV�
w{�kVD�Nym�O��D��t�|��F�b�!�~,�,��f*�)$�
5*<u�4O�C����E�XkS��&�D��t�c����J�*}����S�{��w�/�-�]5	w�}�b��ձ�i�
0�k��7�{� ���
�e���=��ָ�+R�}���
� 3
+�a	���!2��5��ܝ�E�ReL��B���6��<�kM$]�e^��Y�E��$E�%
-�c_����1���i�vT�P�O�g׊!���X��1����S"E�q�W(��\�j��]ޢP�j6U���$��Zwd����
�<4�
����?z[K����em
2�GX�x(��o:߿�|��)sn�MID�y��vG#�
�����^����]?��Y
S��Q��Ǵĺ?Q��S)e�q�f�k��S2�巬Ea��@*X���(wZÁ�A�瞷a-2�|RI}��@n0~��>�º���]g������� ��������/J�宄��!�G˙u1$Z{T�ހ�eFOp�F�x��A�/��a

o-W�'��ӫ#z��4�_��&g����
��ys3xxh+6
+�¾~U�ᔽĚ���7k
���*MQ:��
���Kg
V�e���̘�~�H
نN���R;@���s�[��4�P�~�;=#ׂ��4`̥6�w�e4
dԐGfk`�-�
�|�n ,�3�
��^>��=��K�p���fK�N�)�@����FJy[���7���Yo0�8ӭ�`�
+�^
�!��{��6?�yzNcW�ܦ
�]<�E�I��ڀ.l�|�3�M�FU�7c��{ ��xW���(���n��>X�^��O�
�?kM�|�f�?���XM��'��T��*�h�%c������)Iv*������c1�B(�=�`n�v�,��c���l�_PR��Y��	��v�N���IGh&���"L!7��m���E6�E�(��n�������P��1}�!G�Y��`��Q��XU#��/R����ѼS��
N,�9Kd��mp^hX�H7�Z�z��,_�#���(�3��)Z�=�I�"�e����,����It���%�̈�o�.9��u���$���r믓F�z
��`e�W��x�I-��c���ix�}\�P:N��4��w��q<N~}��sP�EDL>�/6<1���
�~�Px����걧����1��X�S��ʁH��ou�?Oz'� �]*	,����Ӈ�;�Ұ9�(Pi�����ܢ
4��B@���
�
$�䘞� [...]
+&��������b�=��Z:q�أY�
+Q�2_���
+
+�}S�5��
˄�
'��E����Z��
z�?��cL�]�>�1�&��������E8#�
�Ǝ��r凈���u�6�GP*�ٖ�IF�>�,�ҹ�@"��Z��]�Ϝ�nZ,7��_Em��p�l<�cB.�R�h�Ү�Ď��odj�=������[iF���[��:�$���uZ8_�E��箁\qСP8�h3S��u]�f��v��R؃�(l��=3��������b� c!�"��
:hQ�8n�1m0d�8�@�!����"�ҙ��'�
�oS
Jh!�A
c�'G�������Ȧ+�����B
+�G��$C��
+Z
�UI�D�{���q@�xE
�
R�9��d�8LmB��SiS�!��z>M\T��=�t��ޖZ:^f ����Vb��]T�Cb���>x�+��r�b�
ݵ�y���<6U�eK�;.g�\��v��F���H8���( ��+Ȁ�C
a�b���w��oQ3ȇ��&�/�G��B9tĔF
+�y(X���8�5z^f�F��
�=�n�
+��F@���q�3���(�U`w5{Gv`Yn[7ϱI���՜�V��l���=}�ceD-��yLd���t'k��ؘ�b��>��{Ƈ�D����;������}h$�{/�.��G�0�j�ɥ�>�X�-8	���݆�x���%�|D�
+�؁��M���4�� �&s�Ls)
�Kڇ �y��U
��֓�w��-�A��Ͻfs��PM�/D�B��%��c��vm�K'��$�+��}��*_��g�D��9菱Eɭ�/���h�;��Q)Q������
���C�=D�뺦�#�K��D�^�L�ƥ��>-
��+�dk�>?~
2
V׿e�>i^�����\�]���
�xI?>
�t)
���0#Q7'�S
+y��JRiWy�]��[y[((E
�s�o�+X�
>��w�W�
Wfqc��!���͌}�i�2؎��ߝ>�s|,]$bWlz��'��3��C�9�{�f�����o���2H�$^h(
j`��,�S�H\T���>q��|�՝�nꝲn��%.W��H�,�Igy���c�Q� }��H0��
+9��e�TBRI�K/��+�b�y������&�b't�is5z�V8�
Ԕ�t_�;�:�j�������]�ҩ|�D�=��p��.�9�M5�A��$��P��oyѭ��^(fH�
�K�

94
�
�J����t���Y��"��[t+���_��D�_�m�P�r�,��e��wX������
���*sq�Bא�:sR�N�=�ia�cA1�~�V�&�}4��>={
�e��lئ�
S�-����?܇�m���K�f����6�R~]5p��e-b�����z�K�|�C

FͶ4溌�ObC�~�#|t�2�[���^�f�oaAt`�R�S�TGG*���Jϧ�Qs��.��"����u���A
��$����(��v�(4���� ������?�]�؏є��e�U@��R���Zވ�T�L�2S��BM-W���[i�W4�[��mJd_�Mucx�O�V��4�����^0��>�����Q��KP�?�S�IB�m�k�����K�D���Wܗ�"su�#�&��'�8
nL�)��������ӨG����R�5�I��&"�
��N24b?���;ⱜoi�䬇���5�y
� �ڄf���
��f�3a7>��cs�9�]����4�{j [...]
8���_,S�����Hj�A����ֶ�L�iͿ�����ޏ�N�'@�:�\T6��zx��wԓ$Z�;�v�
�ʌ}z4�
�V�(ߟ8�@�ވ�ua	�9t�:p?
�*��x
�=иnn�X�™.�0��x����x�F�q8�.}1��t�TC�T,�`qK�ӑ��$�i�
m;"���n��H��Y�W^�ZNa
�I��E���
dP���&=>r�u���m��Kn����OZ��{�U}� �b����]��ɻy��t]�X=N�tR
C����]K/8o�/��Wqxt!�z5~��_z��%�\��iW��?l
+�G
�T��t�G\�/r��a��<�̀�|ˋ{[�k)��� �k�A��Q��
��{�U��[^����^aG.'��a�=��=��g���<��8}�X��F�LK.'*_D_�6�
��e�X���V��=U�0ù��#F�,U濾�Xv�z�wT�z�2��a3_a��5�	e���RדS�+�
n�y�~}飧I�(���xR�̓�J�;��9�����`�3�y�9r�׵'D��&��s
�Ft4��N��v�4�2	 
?1��I�	���
z�
H���!	jUϱt�� �8�
+endstream
+endobj
+4056 0 obj <<
+/Type /FontDescriptor
+/FontName /FUNHWG+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/A/B/C/F/G/I/J/L/M/N/O/P/Q/R/S/T/U/W/a/alpha/b/c/comma/d/delta/e/eta/f/g/greater/h/i/j/k/l/lambda/less/lscript/m/mu/n/p/partialdiff/period/phi/q/r/rho/s/sigma/slash/t/tau/u/v/w/x/xi/y/z)
+/FontFile 4055 0 R
+>> endobj
+4057 0 obj <<
+/Length1 810
+/Length2 2359
+/Length3 0
+/Length 2928      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y8�m�eK����<�b4+c��,�AYʘy0����
èy��P�,Y�T�B�޴'�%�V	)�7y�����;�������y?껝\`�D�hM�2a(8
+
���lQh��F"!���� �I�Q-�L
�

� �P2���X�>����h�l:) �	h���i��) �D�S
�Rx3x2�B#�@&��ɀ��

�d��0���P �D`~` �
+A�d���� �?����[a ���470� 
$�F%�"�A8�x��<��֯íC�d<������������
4Jp(�8�S�����@")��kז�'��� 2�P�p��uÚ��N$&!�Ǔ�F
�%�����¹:Y�k���M'<��te� �_��F��y!�I,�
	G"Q<#��{���aVT�H� h�
����l�7
+�� �(�D%�, d�p*�����it��w�G���
e�
 \�QC A�Q(�*(���W�.�ސ�����	�A04�G�D��d�	�t:Hen�e�
���$^� �	��W4�QlP��S�V�O/
i1r�b���js��SCF�/鷞��J_$�$�H���fT!���a����HD\�D�6i���.��S�G��
+:Z�(y���c����^�.�
k���D��Ϝ��}�:}��h�k6Qu�
ħ�}&���m����6�bZ��.9��
Rk��Ϗ
l�1L*�	�*��eS�9�Yю3���Ypvڤ(?�G��*c���'9��o���ASt#���=xk�w{E&o{�K��v�فv.[�2s�cS~��L����R��"Ybb6����U�ݕC�a�W*I���hw��ۯ��o�~���1.FH\j��-���@8��ߜt�w�Vdž<lvb
�
ۮ^�u�ںU��a�‡��]�7.e`��ǘ��U������sj�ſ[MǢ���w�B���k��!2Ĉ�������\�r����\Vd�h^]-`���m�K�)c��G���-�Q:��������.�x����K7�CL�=��c���у�H7Q�mY���b|(q���cq�E7琠�����;tO�%Z����2�e�QsY�)n�V��|
+'��ph�^��N颶x
����0M��n�:%ֻ-
�����O_���80�>�8ED��1\d�@��Ӿ|����7��
�i�)G"7��ɰV�.\�&����޹�j�~��H�r��
��CU�vv�e&��P�C��M�j;?�˶ԯ� ܥ��
�2$���%v��9KŒ�6ɱ��G�����ĩ��t���;��7OF�j
Ïϳ��g4�
���r�W��µ>�]I�4��`���/�,zq:�w�*�E��|�U�P���s�3�"�F7]Xu�15�ɺH���e������O��"k˽������=8��4��X�#'p"�Z�nt)r��W��e�mN^�#T	6x����S�����K���긺ro�2B�X����W���5b����
5��f�*d�,K:�s{E�&di	>=v�ؓTM�Hk�hY���`/3&�S���Nj;
+d�(M��1�"���49�ʕ�	���*j��BN5b�:ŹԜ}�|�g���|$�e����u����^	��;����7kK�>҂�2t�,��3�K�H����ˌD�]�N�^�	^�L8}�+���
K�|f6��q��	�ȲS$
\;|�tm�uM���ZZ�$w2$�w��J�`�?h���k��V7���܄�P�� 2
Y��
�k
CUW��m�;��_lí�w�{� ߬�>�ި`=4��/�F�})�-�:5�s�x��q��U���/y��|
��R�󯧩�2;Q�N5[�əI���\�4��xm�ۏ^z����
�P*�~/@����΀^4zq�k��`F�+wn}F���?C4n�:^,�DW�t��>���j_?�U
���>XQ9"��Zcz�8[�hk�\u�nE2�hP��އmȸ���Ϲ=;K��m��qt
+2fS�õ�i9�*�/WQu:�'���7�5��{�����l%�]�W�e�4b��[�39�
�L/��E$�S&����J��=��cw��o1�+9����y��8�6��-��h�9I�D�ηD�^b̝��#E�
�
��mʬ�Q�VD��L��
9��Pv<+�2�8;�J��}��	M��rI:)����-鞥��/2�	)�v��
X7>��-ܜ�h=q�	����K�.��D�)���)'~�����o�+���[qWKĂ��6�ͷ���O�>?��WV�l+9x�����r�@�=�d����d��Ɍ���U:[V�D�-�[��
�Kr�<�1z���U?�
��������ִ��-
Pޜ3
X������{�R>��홫�Y�Bmf\�:I엜�h`}wQ��K[Q���娬‘������.��/�����M�K���5��)�s����7�L�oM��X��*֢Y��;vQB�{��uW�C�p�e��A���:�S���$!B�ֱ�߰���l��s'�4��[��
��=�mnvn�݇�s�Ua��{^O<>�V�8�|�إG��Z�|ыn�eߣ��en
}��j_>*9%4yͮ]��-ko�.5z�
�
�d�@9���k���5J�=����S�!z]��
����dK�*�N� Ա��K\�Xv�M���g�UFn�B<
�F
���,��mb4�
�7"G	��`�YKc
�㴦���Ry�1g�þ1�
��z�
i2^�6�w��8
+1_&>;,�h|4�Ѳ�����aRq�D��0��
�����>�	�jxvG\�]����{�`�24���ژ�o״N����_j'Ci������
!���؆uB
A�ι�W�
+�Z����n��
w��R��{T+�����pW�þX��Mn���.��
�����7�J�͗ة��L$���k��
+endstream
+endobj
+4058 0 obj <<
+/Type /FontDescriptor
+/FontName /EMTPFW+CMMI12
+/Flags 4
+/FontBBox [-30 -250 1026 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 65
+/XHeight 431
+/CharSet (/G/T/comma/g/p)
+/FontFile 4057 0 R
+>> endobj
+4059 0 obj <<
+/Length1 819
+/Length2 2389
+/Length3 0
+/Length 2952      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y8�kǑ�P��Y�������n��d)ʘ��Wc�1�)��PB��k�j�$�v�ɾ�̱��w�y'��:����^�?������|��~�xdp�FD�'hF!���p}�k� X[�WA��� 
+�O�8�z0- ���ׇ�L�	�_���J'���t#_�
+�d ������<	p� ���H����= R�@�/
!
��!2��w$K���&���
+�,(@iS`A)dR@�x5m(��@�����f�$�
��{���W�
�B�k����@*��A*�g�3��

�@ߟ��4<	"��I ��րi��CfP0H�A4��'�;q�L���վ
M����������px�Ls
����

�[�ZD����0

�2��_;���2%(D��
h!t <��ᅱJi!�E8 ��`0 ��55���jL(�E��~�*k0���
g=.M�H�	�C"M߿%�e���d�v俻alL	�xTP�B��j#],�|�@*$�v���i/�5
	�}�*���ژ�0�¶r������₻N���AGc��ػ̎XX��k��#�N�p�y�h�NQ�5L�#Gŵ��١�������.9��ޭ"��n�!��
��e=�
1QU��6	
1K��o�㓙4+w�T���<A.�8�t<�u�I�����k
��/�_n��'o��f���%Q.?rPv(|I�S&�[��eߊ��bʷ��>��2|S9fF�$\Z�BC;�E��l^)`�v�,��.��Ύ䴲
+��zYa�k��Y���>5��~��Ms�����X��
�*U���M��}��5 ;���H_�l�z�xi� ���Ŵ����`C���8y
s=K]0�Y�y�e���%'4�i�U�Y�`E��q
�8�9��9�Usg��9���U�u�����Z#��_n0�
�/̥��p"��$��J}z9`�Ջ�iT��� �t/�d�杚�3q#Ŝ�����CMU�.b��
H�3��

mg��lp��ʎ&%0qzy�7{
Q�L��Mӻ69U�{�����+��
H���5ᄁ=���B�yZ��+c�\@�I-˗ZX�i�3��WR���ep��)K�ݭ����O^�n�(j�RۗDI���q���'{��-c�
�[
7�6��v�蘳��7�f�K��p
�,n
%,U���X��>�"g8�MurL
�
��|ZL��
+�
���W�7��S��]�xr������m���U
#ST�6G�����1i)�P�^;��*�C$9
j��U�S;GbkbF��̻�g�v��W[ٟ��钩����WR�A�;rϨ�z�
�E�uE�{AO�NK�S1~�몢q
�	��/=�"8j�p�)�Vh\�f�/K�L:+.��.�B���<��ؔ8��r�/,���L�w�!g�"
�޷�l^
�
��4>n>w�y�[}4���k��G�0�`?le9]2w�ٽb��G.����A�� 
%#��s2c�/�x+���/tN!N
�+h=OX�xLSz_Y��K7�op��K�|��}���]-�.��V�"��&rz'罚�
g��ȃ����yj�W��\2T���(6���C��
7�����U2
ft��=�o~L���{���my^¸�սįF)��[>��~�o���5K��U%�9cU��f|�R���m&X�J]L=6��0��_եdm�_0�,߯�`��A

^�v1��b�	/Qƕ&�ò
�b�z��ݷ\�ey���V[��u��Q��x���ƹ��s�g61�B����q�\=���k
пC���Z|�ٕ��s6�
���cFÕI�
��iR}�U�*�,��gK
r^�
�m�v*��>}?�_Z����
~�.���{R���(��:�q`���G
Q�q\:
n����==W$�^��1/6N��P�pә��>�:)pO���t��꫺�&�#m.�9�ڲ�]�ζ���I���O�Vm�
�*�������s��]�"a�
v���얎�������&��h�İ�B�
+0�O<�����ﲕ��G �c
oRkY⛎������QtC��j5oBXG;v���Q|Q�ALkݸh�MZ<�z��l���*Ť;<�M��p���l� -�.qi�:�����ԣ^� �Z9�E/�
+M�ťt�}N�3��Hd�eᤓ��]_��\��g�$A�� 2�l�����B߉-��~� ��ն�r�݆��Z���vQ�p����:v���tu�
�]dnn���SZ��zs޴�	��sTޗ�j��{r�2yp��_z�~r�$⑧�+ư��y�)�r
���x���~(�
+=�nD&+�@��K
Q��t�Jf�p�?��;���Wu���ǴdBq_9�^c���:�F�ʏ�N�
���{��(b�M
����j�=&V
+��@~��ػĽ7;f�=C��k��q5�4�|�'�?|�d��2jt������Aw/��kX�*�W���$}x���Zi��gG�*�Kýe����-�q�+�G*.�]4A�q�p�ݛ�
��b�<%��^V���|y�f��BJ�9�f���빿�1��NS��Q	�|Zl{~c�2E�bt���S��h82�ܦ��1�7�w>f/meq,?.ڬt�5q�!$��E�=�ű̟��fx��I��\tE�*��
++aX?�NrH��Ft~-לMQ��Q�xH�7��4�[�ҫ�Kk�6c�C}�T�>5.�s�U��\59�c�=a�����Bё�g���bUS������T�<��$��d�F��%���c�
�+㠛��4��[�1#
��I晉�a����H¢��Qޯ3��#���
PA��
�V�N3�G�^k�
Go��前��=cy�u4��i#�ʃ�upG�~�:�����c�
�ي��(�„ɣ�p�1�*��p�!G.� ������Z]���frP���go�C�
���cX��
+endstream
+endobj
+4060 0 obj <<
+/Type /FontDescriptor
+/FontName /LYAQOB+CMMI5
+/Flags 4
+/FontBBox [37 -250 1349 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 90
+/XHeight 431
+/CharSet (/a/f/i/m/p/s)
+/FontFile 4059 0 R
+>> endobj
+4061 0 obj <<
+/Length1 1227
+/Length2 7902
+/Length3 0
+/Length 8649      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\U�֨�	EB�tl��6 ݛ���Mm���TJB锖n)�n�����?�G�y���Z�3ǘc>s��=��&�$n��;��q�s
+����O�

X����P3W�A��*��(����
�B��O7=@���
��v0I3������:�,�
 �f��P��fv M�
������h�3��u�:�C!�X�� ��`��9`�QRp����=
qs���;���I
+��/Mf��$�`��@-��*�ՠO.�?�����������?��i��
+�����o�����
P�C�����
���2s��拓��
�B���
+`��a����8�E�	���\-��fv.��C
 �m�Ծy ��HIJ������WL�
����p�I�s��9�<
�

�O�O��<��Z�p��
+���0sv6���x*���
���
 PO ��I�� w}�xj�[�%�럷���$��п�� ��CO1�?� *�! P�?$�	 ��!. P�q��� ��=

��z�i��@���?�����t� @�_�� �
�$,�§u��B^ �>���/|Ҳ�
�����'�?�����>i���'
�� ߓ����+����K��IN�S��_�d����
+.vf.m�����/|�w��\O������JI�=}8 l\�
�����r���,ܜ�����<
��aK����zB-�f���!6I5�
+�d�G�P�](��CZB������	'�k������6�o�ޔ !��ˤ5��?}4��3?q��3S4я,�
��zһ���ߚ�Zw�}}4G{��ނZ���ɟEz��pz�����py�3�v#�(�Q)������g�gs{H
S.�
gI��l�q�#ҕ�����r�h���`�K��m���b�u%�6"P���\
�&x!�Y
+b;o�7�r�1�7����a*0��i�=��_�c�t*�L���B‹ex7��xv�wP&{=Օ�@��I�$�,��	��
�
+��r�ѐw�s'��*
�*(�\�=���uPPp�W<
�@D��Ɲ]V�y%!��կ}so��R`c,�I������ES�I�4�=ie�"�w��
+
ˍ�CH��ӮH �W���anf

B�HrD�}�띝����E �6RR��>9ib��i*Q�����
��o�7^��\X�8F�P�]�H/Kwn���
=J3�<���gz��q�;�x�}OcݳHo�^���VBܸ]��:�nw!�^��;G�SPC��m������@��[:�L�!��#�q1��ލ1!�qt�
����u+U%�G|#|'H�	�2*����GE�
&D-�wt��q�5
����
��6ϓ���cPHaR�ᆶq��\����F6��7�S�Ņ��n�w���)0��5��Y44�B�Dd>�
��#���:��ņ�
o���<
�L*
H�Q:-cࡗk���n�t���V��&�溏L
+DG��I��r��!�x
++�p_p�?�+h~��P�u"@5����KN��&���7!*5�/�	���
������ؓ���fe1W�Ӛ�V�D�

������3�b��.�9�2w�fsd�R5 at v��bo���5�g����n
a�齥�OP���ʀwߔݳ�|��j�AH��z�g�ER>N��_c	�ViՖ)��#��kG�����·�GV��5�k��
�ړoA��A(i~�a=�S�y檿�yt��
+:"��3+k)';�?Ё��cG/�����W�QcVq?L�˰���T���'���q+e@��&��4����-G���
햙��򘰿z�Ȭx��=�
�٘71Y[�O7�|���h�)��$��;��p-}x|m8�}ks4_�'4��) �>MըB-�l���
+��`K+��?b8��qh
��?�9����ERn��A6l��Q�ޏ��1���7��C�@Pp	���)ݨ;���ϡ+����
���ψ0����>!f�.>$
+����@ʩ,������q������8��w��
���wC�}^��,ם�g=��u��v�W��(�O	vX��';T��������	j����� �r�v��>�|��R�ڗ�(ez]�A��POq��Y�����A$;]k�
����K�BN��ɬ�[Pm����V�+���EV٥n(�Z���dR��
=��!�����r��� �
���'�Lʎi����4zR�י{�����P����to�$hE�lt�1v~��j:�
��ڿ=�=���$njR���j׬�F.U2�)S�L����
+G�uyD"�c�rKfv(�C�	S���%�Sٕ

��1�N�<�ؖ�NbZ�Ml�Ҷ�󌴙ȷ6|�-v�s���h2#a��D������^>�D���]�B�v}��V�M7j�(�Ʌdb�
+��
&j�	k
��Ƭx$���^Q�A6�W'$30p�]��"�0�����&����
 /BUvڣ꿊�[��™��u�]u�vcz��Y��-#��=p�����4RKNc�������;�=YP-�"5qQ�Lu�^J����%~�s-�� �aT��ίg�n1�R~���F=��]��[wUobHY���dG?���Y�*�ñs�k�}
C�3��{&{��a<~�Uv'(׶E���%�TBg�R��c�o�t���3�N�͋�O�m��È�5oMZ^#�q=X �h�m%
��4)������$��ګ����Ƙ��3������)�1l���#ۯ��>����"��<K��41�I�^�N��tu����=�,��
+6..j�V��G͙�x��?�72�Yeٳe���������3��
2����N������J��D$Y�f��*D09�}'�0E���0���'�w௒,�^,�Lw�_΢E�X��w�(����8e6<����΅�<4<ʨ�^� J-��n|���늫{}0��ll�ʛ�@
s��rU2��øvs����;����ZE����elZ9���SH���+eN�{�l
��P�6�����d����{j6��v5�{7@��TǛi;�i<>�-q�J���PV� y�})I
d ��[���7���6ϑ��W�n�s
����
+;�M{ԟ���̳�^[D΍^������
+��_3��nz��w]�׈^Ӕ�F#[!��IzG��K������?t�U
��Ώ������ �k
+k�iF��ݖԇ��$����/�(4��0y

_z��
9
���.�xw�;uu����ZYs�1q
�U��L�ޱg[N��
�B�� ���]	
+5��'f�N����'�!XT�6
��&N�$ʪ�
��M�U�#�Du�e�&�+�L:x�m����
�1YV~�7�W%�UҬA
Hg�Hߦy�E�XR�I���S�y6��Im�<�ӹ��z�X�BP>�a�O�Ei�HY�~�a�N��,�� I�
"S���$�Wv�	}?7J�mX�y��}��c>k�
����;X�jzC�����Df
+������1�Ý(�J@�����Q%�����l�k�|=�}���P�V&�ؽ���q-D6�N�JXZg1���Μu�)��R[f�ZLbǶ�~��#�&>Z���8�KonM���*��Ӿ�֕�6�DgP�p ��
�[�)�mKy��01�d�b�SRZ/����i2!�^�e�
����7���R5����?2qx�?0�)5����rN Zj�������uߐhA������4�&"�^�rHZ���i
�!r	�A����O�:s>��� ;��۱�:�_9Z��
,}�\_	�/�ZVv��
o&^
`��KUs�k�����.x-��Hj/Wh�^�i���^��2�%�G5��g[]�x{v����s�O�.�[����$�S�إ�]�=y�cC��*uĦ��
,����CwƧwRZ��Я�]�`;o�KU�3���b����ܖ2�i\	f�����Nuum\��䛍9ҫD^]��e����9G�xWϾ�}�
�#����%
��و
c���Ej��n%4y��T�E.H�l�ˆe�����=�Іd�x�j�e	��m I`Ԋ�<dP'��r�G�Ze�Ni �~)�I��i�
6�D+:�HZ_�0�����kڤn�U��o�_X���J$���ʴ�y��J��dc�U��D_��@�U�k���),u�w�"��&���t��
������
��︙�d�ɧ��tj�-�x֨U+l���5�E�f�1�
+9�I�_�!�TV��p'_Ol_�(�MI���JP�h��,�F�<�2�H'���C`8-t�C�G~��R�	���'���#�
����7��Ј|�Qm�sOL,���B��
>Ոu�^�[a�jl���A����S��ٖ�{`k���]�
�_���<��[?�!Nct^D5]�mP�0 ��߅
�%�.�Bt�y�15����.X��>�h��ۃ<'����2/��X|8���\�J�T��!.��LMha/ʰm�2λfXs���m]� 9�+�\��
��\7�Z�b�}G�Â�/�Ţ�J�J���@.V̈G��g���7g�2au���#=&9����5/*�i�d�Тr�����>c%!��AY
���YTK��g
�O��ݥ�:�d	
���cs��bF�_(�;B9գ��Xq�{V��B��?�����7�9���rJ #�v=x�H�Q��3���N/-i�'��:;��A\�#���z�}RY�9dW����*}���㓬<XSÒ��
�{�5�����x���p
_l��+$�X�I�j��P�Q�M
���n�]N��p>-�>�3(uHLt LJ����
+Ee=�%���^�@���
��_穸�nŀs#�ˣ�
+\^
i�$�M�'��k��6�An���T
���<7�d;
��3'#�|~V����b��i�Pq�Ѽh
I �
G:W
|.���(�����
+.1��&`�i����Uu��ӱ�`���J'OP��>�C�8��#ؑ"���r&C����+@��0�&��Y/{�lt�zu�Ī�R�M���
C�\�*�5B<牷
����)=e�ĵ��
+X�qM�<z%��@�)3�

�J�����gP���c�S���� �Y�TL����˰��xB5�t���9ͻ��Z�����Ͻ�
v{�+�l��GoP�~iIC�~�P=m��
a�K��e�ƣ_�Q����h���f�hT��6R�py��W��T��L�.c�R۪�8ɭ�b�[�;Ze*�-"�#B�c�L�C�K���#�^V�ei�k���W�t)���"l5_��o�VD�

�u�
��H5{Džψ���W)41�D�·o�~3[�q��c�%4R
G;�D� ��2ٙ���ɏ�QPz2�7�M�
+շ"��$=���|1�
���)��eV��q�8	�59Q���L'�_�����j<T�c�h��
�??�\�m������Fcv��6���xU�g/4���w�J3m�Oe@49�)�ytb:���
s���7��*Q{
ɂ��[�4R�i:8n��5���m:��G�_�����UN�ՉHÛy
+�1y޴o�
��X,%�S�������a�j9��,��Qv6
+��ߊ�*�����tz�ؕ� p����,a������'�~M@
o�i�Y���_�p*���a�9~@1�.�i��
+D	�+
X]p��@p�5��g�B|
���'W��dA��IV�eI������w�tί�'D�On	(�mJ�� ��C��-e�c�*c��T۴y���z����ƈ\	�GQh���^߷�^N��q����h��T�8� �2���# �ii��k�9NKHPǛ��0Fn��<j"q%�+Է�WHl���7t��^�iY���P����
��V>�~���@�z�AV"�. ��X>r	����(�\8ūդ��x�T�����i0�K4_���~l!��3�Ftp2R:��#fŒ3>�
+DO�딳���^�����
��
��x���/-
Z��{���~�%�O+�g���ST�B�M�9����87��Pΐ{��Tm��&
+|c�N�:�
�;��<���-NN�T���6�}���j.��$d�P��1���2�Mݿ���B`�
Jz

+�WU��Ӓi�5���<{
Iw�
+Hsu��a%�����
Y��9 ����Էp�
�����&iV�(�N�9�C26����Z�4K@���|����(GT�3�nͺiR;陂�8B6V��g����a���m(��g+��W
Y��/�)T�eS%S*���deG"�1�b��ӯ�cׁH(#�P���{�#Zv�'Ầ���GՒ���ܨ��϶�3���8y����'��m�9֯v�)�Gl�WJ��M|6Ji�t�G�jj��T�ڍ|��eٿ���	G�5K9�^C>���֖��٨��]u���[���1�f8nAF��:���'y�m�;��+�K	��������E�m��殤���"���`P
:�ʖ3����={>���AC�����<��웊w�[I�1=^ta�-j2]|>1㝛�P 
}Ŷcв�5H0��9Y@��pE�զ�g����Db�{�l��NL�93u�P�ԁ����2�FKDn
'�
��p�
�6�Ɉ���]%�
�EKJ
�z�dk~����?���8A���+ [...]
�P�ᜟ4,��lCʱ��CaKk�Ƞٚ�o�TNH���Y'?��'�
=�VdK���t�XEP8 ��w
����т���lD����&㯋s ���TR����Q���l��=���mnT��
�t����[j���&���(0�ޣ���7���*���j=B�F����I��T7$��Z�u�<
N[���\�*� 
���P�RF�s�a
+'��˕�k^�/F��P��
(���?��Tk���Y
����bS(<7�R���v'�,;�����+3�0�%�ia��ܽ�i=��ct��[��-0�Z�t>�����V��Y��;T���i�Me쮞(ܯ
+y�o��43�(ɑ3���ZbN���T�&E� i��J:�p��=�◉KD%�F(_���PN	~dX5�(�y��KJ�sFQw���ϒ��`g:�!A�J������^��t�
�[� ׀xw��z3�9wc�����Ԙ�}@�dam�~#����@�9uͷu�C}e�?�f�L{1�C��2)��Z�3P�#$G���ς4
��],I�"t�j^����Q�˽�:o���*�� �93�^9q���`����%	�\�ʮ���˪�r�
��{
�Z±�(�0��Ժt��������;�� L
hҶ���F��Yg�>��z���MAI�o:���:�M���z"���~D9=��3��^�
`�O�����OJX�<t1
{,&�a�2����2�.~:ʅ	$G�$��Ƨ[���K�����_�,PR��P�>��Lu|q���VaI]-�r0�%�?
+O�DŽ�x���.�y{)1?l���Fyv�#�����5~�����/�hI{O@��]b�[��wخ���=#_ɄU� �*���|��FJ�
{���Ǎ;�O��xݒ�~d�:*2�ٲ���_}u<B��c�~�h�/U6�ԑI0R8(�B$�M����^�3dy
)z��޸�$�}ԕ�^��0���:�gJ�AҝǦD���ڛ&��,��E�}y��Uңm�tI�c9t�%{���'���}d ��^s���\�ʇwg�Wkx�����Ҍ��|���?�=����L���Wg��q5M��/!���_��m�UoI8�	™#S^��m�6M�8�}����H͕��v��
�9�fR���m� ;�Z��M�2鈲X2!��� ˒
+��<�}�[7%�k
���}{���C��/���7^�U�%��7
��Zd}$�?���(���t �ɏ'WV+�@o�t�l�
	�R��C��������[
�sS�?����~��K[�<?VgX`��Vџ}x�1���Ծ�
�}�E�~WgC�
����&\�Ř`��^�g��ڹ��!/��r�����
�U�>fN�
�ǡ�v��]�܊�#r��X�����&�}^l�B��E�L�v�6qُ�v��C��jH��;m~Nߡ��u�"�N8S>��xz�Q
���V��'������+T����7��U
�ٮ����U�X�>���G�eE��'����Q�m�C5
+�p�^2`ԟ�xfL'7t��ƲG�`h�����"ؙo7��
5:�������
�_���!��5l�����1��Q�O����1�
���H�U�=|\P
��މvX[�W�zU�W}�(]��9z�#��X�Cc_��[q�ļ� �p�'�������Wl^�wXnP��U���q���ok���|YQ�o�����3\X�a./���dժA�0�΢��l~��o�j����'1yZ�F *�d�.z]َ\�$�}A��1�&F�Iz\���J�,�J%4�S�߳
\
+�Z�B#���9����t�� ƻ7D�
p�~P�A���i��e[�1c�,L

+ƿmn�ɏ�E���@	�A�;Y���Yl�2���΅������)���y��g`o��"	�#l�����C���A��)�����s����/�oDܐ�k�դr�l�+
+�L�����Kh�
+endstream
+endobj
+4062 0 obj <<
+/Type /FontDescriptor
+/FontName /BKBACP+CMMI7
+/Flags 4
+/FontBBox [0 -250 1171 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 81
+/XHeight 431
+/CharSet (/B/F/L/M/N/Q/R/S/T/a/b/c/comma/d/e/f/h/i/j/k/l/m/n/o/p/partialdiff/q/r/s/slash/t/u/y)
+/FontFile 4061 0 R
+>> endobj
+4063 0 obj <<
+/Length1 791
+/Length2 1710
+/Length3 0
+/Length 2259      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<�kǏ-5�祍'E�Y�Z0e���Bc�1F3�0�FF��-�f';��-�T��(e7�$ǖ-$'�ޡӧ����~���u����޿�Q�e��6!A�Dgj#u�� ����LE� 	L
+D?L`�� �� 
��(] �o��5D��T ,�
���=��V}ͤ��@�H�8���g	T ) 3@0�R��k;|��/��I:0$ Q�L�
$S�0��%��I~�?Z� ×��c�|HD� $������|��֯����Tmm�ZP�hhj������ "�
��VG�;$Q�h�v-�*�hB'SA@�����^���QX ɖ�$z
�/�^�_I��s��L�
;������=[��O�F����p
+��@ �F��c���YG�D�D��
B 
��B��@$@��@ ���p
:��o��
���H�. '����h N�)�( ��_����65�X��(=@�� �@��#я� ������A�'
�,��uCD�p�����d�*Q����
��s�k�35h$��x��
T\��H{QnK%�X�I
�7[��pN�t������
q괫`s��:IZj�8O�O��s}������XO"�������t�.^8��
O,��{4�^e� :L
]iY�6��!^n���%ٯ��u�g�Ź��qBݷޟ2/I�S�o$��On`/
�عuC��*w�Pjs���H��op
��x�{���aAN��T��N��Fֵ�e<I�K5߫��`�+�y��%����PK�����TwȔ�U|Ӿi9޽
�,�
����?y�Y&ߴ��B�����/�
�P�����"�rs��j�pPʸ��g�`�4Dt,6|���cn�˹������w�ń�j��}:ae���x-��#��[���ʷ�E���H\�"/n`T���EԸ�k�j�p=^���Ң���
6X9����Ʊ��Le۫ee�R%��;��I�˟��6�.���*t��
��[�i奧�#ّ�A�;5"�(KwAצ��r'1_Q�e,~!��v���-��\>�h�pX�����JvU
>�Ej�N�\�0:c��a��*��l^�Qq�ݳ�}V�>�����^���~��S��j�Rt��Y���[t�'ob�%��[5�)`��#�sDR|,MC��Y�>D�"0�
�|9����)�Z��c&��a����C!��p>Y\s�����mQ����0��NQ��R�k���=}���k��~:'YgZ�=8[Si�&Q���R��
iN9G�j'��x����O�������9
b!ٴ+kdo9
�fZQ���

+y��$��q��iG���Q������70��J���"ù�&��N;B�L���o>���WoK�)�
�~�b�x�
�8c��/�n����O[�`8���I��PeFR���%�mwaPS}kS�
�*��{E�QiS����.ܦ-���G�@�xɁ���
�
+L?���x��%�ί����[�5 �ͤ�b>�&�;�O	fY/
+ �t�>�5~�A��>����pml]���n���.
+Hy��lW�-��1Ϡ<g������u�F�J��
�4ڹ=V
Ȯ����5ħ���j�8�dٔ¶kY
�.�G9��*�qC�F��ɪ	����3Eh9���R�� �������L}-#)Zr���GY���6S�/�K�ћ���b�����7�_�=�e|Z$&N$4���̕:����0������=
������ӆ:�x��
^F��c�'ShV�bqs�X��H"Fru���А���2����	�	 ���&������p~ߣyq?=�������NJA��'f������
�@���o�e�R��:i|cb��q} ��*��(!ܱ{�~�yǥ���evGO�fel��gm�L<��Ŵ\Q2� [z,��$�`����
+=j���rTT��,�{

+��V�y2���:Z�}n�*q����g�Y�oe��*����Zu���	ըV=fI�t��
+[�{S�n2�/�%t�KfB����:ֆì�i�3O�?��e����ծ��5!%O��i���
+
`���Ճwcu��g���8�Sȃ�gC�/G�i�v�Y���5�!3��"�uf�Q��F�v�Wm�9��!BZ�_��0�����;��pZnp%�u[L���pdl~cL
'�6.�OM�e�@��lVL�k):�� �3^v��K�����L��j��3�Rr�D:;Y�i9���1���`^q
+endstream
+endobj
+4064 0 obj <<
+/Type /FontDescriptor
+/FontName /QAOOYC+CMMI8
+/Flags 4
+/FontBBox [-24 -250 1110 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 78
+/XHeight 431
+/CharSet (/g/i/p/t)
+/FontFile 4063 0 R
+>> endobj
+4065 0 obj <<
+/Length1 2210
+/Length2 16209
+/Length3 0
+/Length 17399     
+/Filter /FlateDecode
+>>
+stream
+xڬ�eT�ݲ��� �%x������	Ҹ�Cp���A��ww��n�ߵ�^����3���fͪ{V�짛�HA�V���(fk�D�H���Ubd 0�10���	; 
��mmD
��\ FNN&�����be�be�#�ڹ;���9(�)�qbZ
̍
l �Nf at kP
#+����9�ɝ heP�g�#@	�tp��12�͍� �@Ss8�$Iژ���m6v���%��#H��_2) �ƶ6V� c�	
��-(���Y�7��������?��)���l`mn��?��v�N@���1��������Mhl�l�W%�
�̍mL�� ���
��݀�
+�NFf +G��@��+T�I�W�Q��wO���``n��n����8���0�:�n mPyA����}��r����ۘ�X� �p��+��`nc
t �@���ll�@[ ��xLl
��i(+�^�ӿ�
@/�����@/�b�����2'�^�?�� ��C o�?����C� z�?����C q�$N�����!�8�?�"�� iQ�C -��E���(�!��?Ң��@Z��H��i��C -��!N��?����̠}�v��e ������8�������F���
������d4q�cg������?
 MFtN#s#gk+������
+t��#�G[k�?�@����T#c['##���_N }�?qA���
F&P`������_6�x������O
{g�ƟР��A���_��������t����ß����:;��
�`����Q�:������/���
��[����[�����}4P����L 1�F���B�YA�l�m�:�?�������A!��,���8 m�k�X�����
���j3
ۿl��.�^vVΎ�Y���
H���������2��Y�?�9�g�͌����N1�
+�'-+h�#����Ǚ���_�bq4�sX@�t����d��OZVPy��
�M7��N��m �p�
AMv�
A�\�P�n����/���8P$�ÿS���!![7OZ&�B�?�n*'������<��
@�u���
t���M�A= �
h�4ok�
h��\�#�?YM.d�+W�5��nU4,mO�^��T�����O������8&v��>6e�m���~�G3��U����
�}�	Rk���)+����Hi�fA���I������U"�nm����@6v
�4+Ր�Zrf"%���P��5W��Pk>!�?�W.mۜQ��as��t�1bP������Е�OK
+B��~��
U
�L�
 ��˰JÒYh�ՙ
8��SX㢡�.�4�mD�dl��E�����fR��
��m+��<�z�
�
8�ڤ�}I7�ν��r��t(���>5[�`i���O�{0"�d������'�{:
��
+z9™� ?YQ����#�
�(
eae5�H�)a9�D
\n	E��Uo�h)�D*�ȾL˪@xu�����B�
(W*7
+��|����8�j�+����G��i�l���_S�('�����ZO�FZ��W3����V"�9�l��]�֗���l��<3A�j���\=�
�q��:���-�[�i
f��:�H�Wx�a�����Fz<�>�X&-�
,���~��,^� H9��Ye���ž���]RqC��)��5��Y��� ����&'���s��ϕ�D����f����$����
,�F;��I��J�:�':��#���c������XapQ��6���`��cF��/��K}`��@$zekH5��p�
L���F:
]�g�_
�(�Z4��H{�,�����9�C�*MR藺�e�NE:���R�_�
Y�t��݉�#��O�<��"+���
j>$wP3�+
8�I�
iNݱ��ٛf)�ʋںJS=�]/p�G��!9���M`���掹���J����-dDL���-+a�6�X�>���:�]��ۅs�꭪�c̄q-�n�$�W��I2wm�����~3�!"��
�u���-Kg�-�?��R��l ��k`"؊�������sgٴqz���ƚ���]Xz��h���������;<�4^�4��������P1QϬE�ni򧏗��j�I�D�R� [...]
+�d!���[p��
|
+�p��wm�*����m�6k;Ε71�e� Y	�Hٔ>�0"��=�c�*̌���C�S���ż#���h�
�D�G��{��n8/��ϒ���s�d

�l���#������S�������5}�� ��B-bȉ��4xD��ʧ��ӭ�b�IEF��Ȭ EG�� �
s��~a��D�jB��}�	����1t��Ћ{0pO;z���
�U�mX$-�ፘ����v�F��$�fa�k�sS�|ϭ9TO`�/t{�e�`&َ�g,�/��A�S��1P��#�GL�Q
Rl7��0��)n��tE�����
ߟS�e��y�x(����M��,�$����������GZ����r�|��`��8-���%�9*Ly��N#QJ>���ɴV�eOD3��݂�T�#!�}I�����6�\�R

^yȾ꠷�!�\���7J�8$	������:n��K�1���Q�e4�3��ќ��|AGI
�^�_s;�uF�>J Ww?@Bw:��[�0¨;��}}��ӽ�� [...]
$�Idw�d�|:ֲ�h���
�����Œ��K^�"�ٷ^���
�~(L����
\��.E�!�k��N�����:�b�E��6Q��

�3���/ %�r���3n�ٖ�u|Fu	��v,�F������G��sc�A�oKs���b@����@���mn3St�)���^�	���&��%?t*C��"f��=58\2�A[V���
󠈏�|*@��md
+񲌶��_�ʂ��1���� PE���*p��	ME3J_yG�M�dpQR���tj<6`��䛭i��`{�5 3`V��$�$MB
1���pR
斄Ǹ!kQ���w�"5�Fme�Zh�96oj�:�F����t{	"
��P��`�|�
+��*r
Omf35��c���x��
`i|k�j�j+-��)�;t(amI�%_��O�����?�L������vH�է7��j֜�b��{M�6��b�B�O��xs�w�*�L�?`,ǥxcoB|�q��XV�X��{gX#��4�;����

�c!1^3��<T]��UTZ��\[
]�{��0���F��m{�5~h���a'��!
^�xa,�
j�g9��
i%l����)X�j�EH����p�c�����\#�!��
+-��r,�_�
+3��V�����m�
�"X`��D�F��~_��S
��+SS
��0&cg�5����h
6��?�PO^�{!�ģ}wh���g����5\�����yF4ԋ�M\
+�Y���5��m����x
���ɢ�C(����n�<j�I��M:L�[��
t���,�F�eĤ��5�ZܪJ���)�F�„��*o�CT���w4`e�Rg��Ufgh οm��X~�v[i�������bY��OOnWM�W������}Ȩ�g.�z~Ae{:&n��
 �K� W8�BB���9[��;���^F׷��{u at 7��t9Mw�C
>t��VZ��$c�7'��O�/��2��D��pP����7�Ǜ�
nG�Ԅ��ϸ�5Ӛ��W�x�y at R1U| �^O*6$�����=W�`Tx���<"�
�̖����}a�
Ʀ}I�y]6!��G咏N-Î�?�u#�P,��m@>�}�b��Q��y�k�g���
��)�%a��8?.�ʲ{Ϋ[�
+�vn�4���Cˀ��&?s�ԧkhi�r
�n�\
+BEs�ܛ���V�e��t�[U���OE-��~�
q�}�nafC�-n�P�hR�Mm��`{�S"�iɭߝ�ɟ�&�`����:@����}b#㯲[�Q�4���Q�UA�<�w�ɲ+�㆞��`H�\^9
/�i���vK4�	��N�n�,D\��}@�u�ѿ~!%n7Í&� 
�)e�H�ԧ�Fa��2P�/��l:€����@�
^ ōP<�[���!q��
�V<�1����`��EdIr�Sӥ��lˀ��' �E;d�����y���ӏa��f!��Ηs�o7
�tf�4�2����V�z��
/jP���&������'��*#�~�����V/�W�YA�Cd�g
.^�C�
.z:��F
���~|��	y��c�,��%�D
�(�8x�gvF���U�*��G+U��-
���Wt�'��z��_�E��J~�����>}�qG�48
ag���\�
������Q�ÍhF�Nl�	����T`�{���a>7������q�_d����kr�~��ô���:�������f������l���I��?�
Exm��]J1���Y�*�;Q�/��¯��=B�F2N"�'�b{��͖�Ž�S#σuS&�>�Kєbw
���q7�	��>qDд�IEq�
h;\��
+g�
0de���[���ٓ�u��+&P��P�Q)��=�q��(vH����P/B)
�
eC�R{��e?o��G�$���(�8	������
 �5X�
M�5(������%��<�&���XY��
�
�b�p��Ϟ�?6XWd1FԢ�̖��rhKQ�l
�V��w9�@2c�~�M�T�� ^,W��`~$��#8&�ޯt
��<��)O�c�p�U
�2�K�i
c�f3�z�_&�'=�P
��u^F��<�7�2�<����
=ӟ�s0�|���@$�C�#���mP��&�ʉ�Z��8R!_�@
] ���e��B4DB�L�R�Xk9"/�k��X:�	���G�bH�><�H��p�\�?��K�'Դ�}�wE����×�쨕�F�N�
Fy��s���2�tZR�;}� 6.T2w!���"��w�B;f��d�$ICʷ�\,=7�ɚ���T��T�'�m�D�F�Z�&aᆍZ����~�vx=Z��&���M�k���s�>���LS���1u��
�F��N��L|FwT��
����8�
��5�}��TҘ�Ȱ���S�������M�,L:���N��ԛ��P�
���2��_�8��K=]x
|�>زF���OZ�,>�U��Hx�>��tIx<�$���M���-_%;Ӂ��!���
[�Ui��
�P��kn,�n
��
 ��_��S�c�CA��2��l������
k��~K\�N����k�DaT)���
�WM.��,����'-fM���V
jF~�����Eb�ۑgF���U�Pi�����9�
D&�/�I�0~ZGŬ�)�,���o:��c���S~�6�+Arq�I�lvy*mR#6�h�ld�ɺ�[z|7K�-�Avim?.��#����`�XB�M�.�|�|
k�$F��
"9G�2�D9r����-�uޞ�-���}.��Ք���n�2���{������v
6���r���r���IEg��\X�s��*o9�Ӆӑ�2���t0����\�SaNr
�o����`fU�	��&�������wz��	�9������ˤ,31�������z�1~>˙�*D-�G��p��	!r����
òԆ�g=™�
+�r�,��
�!w�=hR�/���1I�~i�霝�����e�x&�
�
\�Zw�T֜�9
�f!�<s]���o>nU��IVm`�
�K+��c����|�B�;~����5�_R"˩+b�6tvm�k��bB��U
�HV����-�Fj���ݙ~��Q�OaG���I�Jl4Xy^��
�^�g�̸�������[R
IJ�Cg��������O�o
+
i�U>.�r�,1G
��ZS����KVa�
��r����p�#�%*�.��#�}=
� ��\&7�������ic2�W�����]?G_�@����Wڲ�Z���������(T�����S6������M�[��K�YZ&����%8��.��"�^� �
+��~����N��^>l���2iE�t7O
+O;�}o&-��%��[F�AJQ]
��盳�
�w>��ȃ����r
�en�ȑ=ɖë�xПj�\�H�-"���.5�
�<�T_����l;c��~��/7�9	���&��6�:ا����CG�{�k���4��|>1��t���6�*�!4��&`�j��z�����b%|�r�=M@������%�_�v���&�-5<
NJ&<��Y��q6T�czo8+
+��ex#� �����)���.K!����;+׬߭�Z[X*1
>�ۼk��i-=M{hg��l�2��x��;'yX�,
�+�M�렳���:0���
J�칦�
nF���\	owdDT��l3��!�5��p�vfj
��#*�YWM�#���Y���({tI��4����V�$*L>`hӷ�,% ��"5��
�B�j�3'���E���r�c|������<l���	�3��u:Ǩ���
�n�v��;&��.��������;���]8���qzQR曤)�Q����܊ɐ�QZ����hN�z�s�$(��&��Y9[��uq0Ӯ���}��W%����c?�>���IE�&��\m�5��)�I����.�Xr̬�Y%�_H��@Վ÷��7�$�o�.����:W�=G�	�LOh�b~�,H�I�~K���҃
+�if�Fj��
��4��&���1϶G9�
X��}0~.�c��LP�)�|:�^
)�I#K�ӵ�5��C߁�
�ӡ6nk�*2�GM�O����-'֕�
���f>^Lj��z���q;��LԗR��s�Z�9�Xb�]�}�<�՗�v�DF�{)|ꨒ�cc%o�K/~�4��׏-n������Dj�
�bO�j ���!
M[����%)����L��\k
a��uV�G�C����8Bv�}��+��B��a�:�{��
Ұ�W$�h�pnR
_D����Ie�B�	 �gI���e�'#O�h֨�|���2
6�?�C��^��._^����!�`\5i���ɔ�{�0�1��
��`�-_^
�1	O=R����_��8�w���yu���u�
V!�Z�
Cx��˿��M���
F_�jj=�Yo����\��\����^��[ �4�	k�y
)a����战W�bő	R*�v��}�o�;�p}�
���J�����ˁ�F
+%[zk�+žJ�`
J�j���
��M���^�U����\�,Gm�e��Ãm�o�$��V��+�]�d
K|m\To��^[��@\�3�L�o	�5�x�D��WYQ��E��	[ [VPw%\�fcr6o4��{�n�j��F����DۓY?�J�Gn�㟨�
�T�?C�U���
+{=��E�b��_|�
���~�X����~Jq��j!_рm7�����y���CU˼��I��~s�gH:x�op�hiI��ۇ�B\��z�4���7�H���"~|t^gI��
>�k%�*~�z�����t�gP6aA�p�te�aI����as��c�k��Yw��{�y�mO�Ww
+A��;��k{�����(�
Hu�!)7[|٨��M��aj.z�y���0:��$���o��p2�KP)���y�}7�ԣ�G]�!����Z��I.}n���e��`�1/z5��ǽ���!���Ch�S�E
6��)Vy.����P���ج<�����X����
3t!�vF�K�T�����e{�h�W�<�+���<��
nÖ;���֨�[�'�gN)��=�!�5Iu�i�F
����j�
0
�[�,]�
��u*�w� a�ER�>�[�ZkJ%�l�;^A	�V?y��d1������R�
�3#����<�|�ӵE�,Q�e��t�l6�
���o�`��S���.�J�BhLHF���u�E���1~�@f^��z���Q
>�zi�:��8��
�,b

1�wj3M1q!8*M���+$�"`p���Mֺ��Ώ�.�){�1+�IZd�k�h��EwsF�ϴ�M!
s���_�Ժn
sc~bM�^����w)��_	�rX�G1
"�� ��֧�7�cM;��e>w�P�7:G���Zs$W�����
߆+0�^pj��'}V�����%�֠�[mJ8�r|й0�҆�/x�!����V7h�Q��`�K���!�gF�I�
�a�pD�qb0���`�x��s���1z0 [...]
�87�R#h?3<��-�yٚ|�&�oZ�����Gd��{�-��m�1o��6��2:�BhS���kf�;��j:��
�L ��c��
���
+D����f��c��]�@�����;�ʻt�"e�#���
��.#Z~um�(����" �8�!�,�#l�}A�����Dz�
��!���R�̆�����XN�Gֹ�c�ߊzK�V}H�v�qW ��H�Ɉ�I^������1m�UlH]e��y�c���l-��K�͚�-�;��M�e�/�a���Lb~
+PzZ�:��$��4Vy�q`~|X���|%|ue[�B��gU�� ��pԔ���p���|�w
M{�X���V�v�
��׽V��"xҧ����o0m���h#���D�2t��c'�����1�>t€t�=�.��p���s�f��~:���yX�N��YO���4cFY�)
��g��!��f��*�{fx�2LQ�LD,{�=�R�X�^���@�}���C��X<	
��ʩ��
��O7�`M8~�׎ݎJ�ƿ�6Cʰ�I֠>��n
��#�L�P17k�.��-R��vS��������v�=✔��ӤZn<�!7�����$����Dw']?u�[q�W��=?���w$��c
ٯ�p1���<bTB崗P���Bc�qkЩz
_��۽S�;I?xd��DO���bNR�cP��&�A֝"0H@ꁩD�
��V�.y6J�l��o��r��e!b�Ԭ{~S?���P�y[_��GN
�c%uc���u����
ñ��
��ή��߉`ٓ��D�_ �KE�ub��
��վ`�0w"z2�|	9�Կ�Y�仿V��������`d�#�h}Y��`����p+87��F�` �
�j;�U<���G-�����2���W�uG���sH ;��,�wn
+�))�K5xm���%C�����
�%u��U��#O�
���q��~���2�m�Ia*��
��żA�R܍6R�%A0�!�Ђ�^����!7/��>�o'@�x���`����s^F"U�7���2M��2�GZڰ��]b��
��H
+�����
Or�����֫}��
gGl�
���V[r�}���m��X�Mb��y��O��W�Xx�l����Yu�o�M�՚
h+��N�U0�ÉoA�ъ�)�g�5_
�j��e�O.�8����K�����~�����R���6/8���V�y~d:#�x���ċ��`Z���aʭ���a�!���7�2àߕ���v���3ە�&ʈ�
+v['�~�v�8�N�u���!a�j��b�9.�����*يF���O��鈊.z��+Cٵ�b�AH��C��yT1P�HQAK��U�XH1�j89����s�<���0O����}Y��?��h�މ_pt=� 3�t{j9��?��"�d{�E��7={s��
��/c�,��J�?
%bU��Fv�hdTS��Ae�|C.��1�Ɋ��E� ��|�g�˘��>˻B�2a0��}'�ZSa1~i(g���Zg�����"�%
s���!aX\��Ae[VWxl}W�� (��L��zL�*,����
uid����e�z��#2P�++�{��A�����V��h$	�`�An_�*��#ʋg��M���ʦ�͎t$�yVn�B��A��Ӓk��h�V�Ï5��i	L�FƓ���u�,�
|�ݞf��]_E2��*��T�ejR��Ώ6�
����S��f�g��0~ދ|��R�UH�z�+�f}A���A�[�.E`��y��V���9}n��0Б�B��
)��.�|d�sɫ�L2��>��n:+�{�ސ�!�'�W�{
����)����S�G����,
���/�ީ*5�K�|�lJ�5����-k�V��JW�<�wDz*|!ҿLx�
��i�Sy:`2t�}]
P�\u�h�xw��E:j�B���:�$M�E#
n>
,ya����?��'�6J6�{Tj����@�+�Q�5����j��>	�# �+DLQ�b�,�� �VI����rG�g
���!���ŋK�Mq���YVLG/9{�j�h�m����_�6�o
�9� *�ֆO(�\((cT!�"�\�Yz�y�<r�Å"��Og7G�j1�8��h^'�
k���#,���Yqf�.<@����/��:����2���
��m3=��Y���

�vk�?Ƴ�AIE���g��ўN��8
+�Q��
��-��K�����S*����)�����>W�;D���A{fǓ��yZg�P������%�r}g�����r���7TӨ��IVE��!�؞�ПG7���"
R��RgӲ���R;:��J`����~�|m�S?��6=�ь�ͭX`��z��5�e�,��(b�
�)K<{�J7�5MK�8��R��" ��cD쉥�=�
f��{�q��3	9��~K�_n;�C�aƬ׍��0�-��D!�haWM.�=��I�4��bL
 _
��kGp������G?��E�\F���E�~�M!���ā�;/i8t�s�ﺙ�|���Y
�(R���
'��'���n
+3���}��&7���]T?��~'�)����55J�T'S���n�1�X�n��1Uǒy��}0[gW)�
dDC U$����o
�Xp�nDs�<>o��w]�M{��f��l5�N�k�Q`�Fxs!�w�6$������W���,E!�bF�q�
Ec��d�DР,E5&��ܙ�[
�xQ�:��)��%�����Nj�������Lfn�
��E���I���3e��
�"

��Mu׮��"N-��*�C.W���M��`
#р�Ӡ��$����y�	O���f�T�r������^4a~�_q���|�*�n�PU%&�xs�gdW�
����^T��b�6P���7�4R$��_A��t�TҦ��tnsz��NT�۫������N��*��y�w
+��`�.��l�X���C3ʤ���h
�� ��S��m��I�^
��w%�:�]�6k#��rSXլ��4�;|
�}�T�'r����ٱ����N+hCe�
C
Y�ig�t��p���\���*��]}�N�W�Q��q؈EZ�ʈN��wz/\J_�z?�̠�zښ����5��d�b�qp-��;�#�LS�(�+=�[
����1i�7�nob=����%����=W��A��ͨ�~�Xb0G��
+�{��-F��0���y�9�ϻ@W�L�᮴] ��V,��ɔ1�+.L�3���I�.7�Ÿe}
m��o;��ǟM��#�2Oj�2�IY��� �[�f�_y�4���2oÎ�
�69�l{��r8vu^ y��)��ū�p5�c�rM
&'Toq��חzv�G	��A<���_`�h6R̦_x?!���i).�h1�
��]�^�1cB��%��
�I<� '��>
k���x�_���{��-p]�P�z�{���FX�/��:6ݬ�>Є�֣<5u
]�C���~hs'�%
+!��8"���a$?%s�u��{�DZݱpJ`еۺX~��y6�- 	
+�����_]�ݭ���nZm��0�.�
���B�+�[
�ž-��@��z�'/�񬂮_�W
�V�׬
��i��'����Ē	3��
��>��EF�ï��YkD�#�k1��#�?M&�$�,E3L���7�E�)��l#����j(l�_��E�Ce�a�p�<ˮ�ĭ�诶߾�ƕ$�4[T�D������*_�ͣMݣS�����(��ͨf�
n�'tB�5,����K�%�Ơ/��J�z�8NrK싡S���
+�">�
��v
���3�r#�S���*�W�n���
��a�h
+��4�
�����M���+�/�����G��;8zE���ă���͸�ͭ���͟#je�V��8�
�lc!J0���1��K�i�����v�ջ
+��[΋	���,��_�O&!��+�
~�N�~�H<@vJh:���*��J�_�dc���>�����ڂS!|���·J�.����y�}����/����0�ki�j��,Ǔ��i$:��ł?��FϬۜdު�t!��{�28^'��3� pUT��`-"��$�@:��� �O	o�ҩ.�:*�O;�H
_��]�-|G���md���m]k��
dD�O��nƳ�F���w�"��f�f���twB��������V��q
�
(W�
+TZ��;�-S����h�1�V���_��;��^s�~1��bz��NV��
�V��(^Be�+��k��bWu�J�:�xk|K�-.|ce�1�/�h�s�NK�����/6h�����>?
�}V��\BE��N ?Lki>�o�q;�=?���
}aܨ��>�o�܌8�!�|�.
|8� ����\�'��)H[�W ��5"CL�]BJ�y�c��	sVv�����Ӊ��s\���;"x����1���	*L]�N�E�ġ8�E9?}�6j�D�&O �3K�-�0���1� k\�Ԭ:�d�$o�|C�q�J��M̴��(�0����
[ir</w�蓂���{�k���iΦ{��(�;�X�BK�gӀ�I����ˠ��=����:�f�ae�̧CdM�N���5)���+����_�
��Ue�,��Rxry��)�����w�W2�02��P�ùuH����k̖2�S�p��s30����L̇+bvE�(��1ԮI�E�=O��q�磗�S�5N��7���M|L{��%�Ɲ��
�ݟN��]&��-�UvEux�c7���grUr���iH�
_���
e9�yݷ�
Q
�M�»u?0
85��qd.\7��s��Ccz Dn�۳�뉖��d
!�QiZ�� -!?6M��������	JI����6���.�u�a��S��-��/
"�{:ظ���w)he�6�G
��H�ցg��y�RD�X�ڐ��7W�V�?t�g�}Ls��Bn�n�&Ӊ;dS�\#6����>�8Ӱ�����!�3��hw�!��w��DҳoD!�k?K�yH!��|��	^
�M����x���
�y{&��,�ܶ��)4��ZW�=���I|N}�������%2%L���S/�����\��([6�d�J|����p�č���O�A4�t��/���8XD-�`-�������Ϩ��aҬ��}��1b�.5�ue�=����������t�aGe�ωB4!(@C��_�M��ga��Bu�ol�����hOt������7Z�=愉�(��nh���
y�Rv�6�Vk"���ȼ.������S�x����dWg�����G.�g����x�>~H�PI�`��^~Ah�|&�� [...]
�8
+�����o0�w�^AD{�R����/1�)�x�!�Yd�V>JXŖ?q�kJʂJYJ�+����j����{���'
uR���~3�H���նr��� L�
�>��O��"����I!60��FV�IW�����pJm����O��<'#P�V�Fr�����e�)��E�
\
+�t�_s8�֍:a�4����DD����8�N�l�����J��Ú�%�VA�&%�Ʉo.�w�O�\I��C�#r_Ҕ�i���
��J�t�~���8�
<�>���=���}��*��*/���P�΢�����P�u�Ӳڜ>�]2ކ����P��n�z��L@���ʋu��FP1��5
ģ����,ް���<����D�!}�- r�h�pZ����B�8I��c�Q�ص��8�*���d���{���h�
oa���"�{'��K�_K��/���-۹�I���A���;o
a�_
�v
�%����`�
�9z*��YU�b�cdH�t]����+M��-��֔OQ����!�R	�y����2���e}Li,�ۊ�_������
�uc
�g�F�C�uv��C�U��99&]�)?��:ʮ��ʐΣ���AnD�cpD���<)�mj���2
�u����/;)s� ����J1�ﵫ-�C�(�
p��tC��B�N>1�
�١rEL�c�O�
>ٙ�`�t�g��7��<G�qw����k>du��c	Y"���>
��r��D��������D	a��y�+
?{��S��3w������������dL,Z�,ʬ|f1�L�^vF��D-A� �Ed,�Y]}�[<3
��k����.���
j�F1򶀢�o��	x ۤ�9���[��>
�%��ХL�،
3w��Q���'@����QpcR9��׏�����~ߍ5��6>@��o:)`�o����?a����g����9��7�'�r�m��L�8(p=����F���^���b�s�W4�A� 'g�<��0��r5��M�5ap��0�8�7�J�u���Xc��(�z8;��
8���V��a]���y%M^���<��/OI��jY����o��϶��>B���WB�rv.���!�2�Rc����y1\��:���0ľ�mUA�\�3O0~����u���}�:_��9W���D��y4e�2��S=Q�z)J���]�9kd�F��+���{�7F�~m� [...]
!
+�u�4#Y��<j~ͽ]2m^R�0i�;�!�
Q�`YBǗ�P���ǭC�)X4��fO��������l	

+^��^��޴]UY%N����5zb��{����\�'EX�n��(�e��uu
0�!�D�����Dfz�g'�Ĕ䒆ZRi�s��#�A�q	؅zl�u��0�Y�E̩��ƪ��r*���M����pHWr�j�|
�M�]{>β�x��:JG���Q��<Wm�\(^�Kl1�K˛D1����9�
5�@�'�X%����aj�AtwW��_�V(��\�J���ɒ�_��[!�N���*�b�&™��<!��7K�T�w�`&N����F]��~E��#L�Ui2��6Hm���IsΤ��a��,Æ9YX��X���<�����^������S�,��[C,.���}܇�$�"M����J0x�om����a/�#fD~����j�
	�{]��J1�B��qz*�i���;$S7b�0C�B}�J2�y�>�I���@�(�Z�NsZ�3��
<�.���}ԇ��OTe5d.[>@ۥ~���U.���b?�F\ �|��c��"4
�� q��1�
�b�L�F��f� [...]
�U*�����n4��FQQ+ZX��)3
��-�d-�^�t�%	��D����@(�eO��v=|G�F�(LC!e�0d�p$�,
��E�L୛
,�5
�]{�CG�1�aӤ:|l�;�4�����Dm�w

:F�XԨ;
 /����'�\mi�˓�+>B�x�a^�(�Ђ�Ćs5oY��q�CE��^��/Ga:��9o�ꝙ�
ՉUoQ�׻�P��Łr=S�f
�z���_�̃�K4^�.����J%�^�͌�G&�&]��f�F�B]��B3+�tZQ�S����Υ��¯��ۮeYT����ުY���1�{`"��xڰ
�����B��Y{ ��RH*��*���"=;�����Oۚz�N��RuH�͌}n�iT
L
r�%�D��
���p�a��NN�BڌZqC��$��
 IF�	Йa�%�z�|�T��R^$^#@b-��݃0� �>���_�0B״�VS�m�f$�O'g�:/ˉ�&��'Ϸ��pQ6�Љ�w3i》����i=�ޗ4�Ѱ'D(���5zz���F�4�0�ʈ�	�^�,mD�G��u�x��^����5
�T��������q?�?�~���|�\I��������e՜��[�
&�
"q�Y��$��۟�t����&o==(]�C���;�'c���}�_,�Q̱>4���3��
k��'�&3�`(��j�#5���A��\W�J&���J�� ވ���D�	|m�H���!��@P�:�
�C$`���<��F	)d�������f ��,#(��fk]��ga�is�~�dH��o�%YWFDr] ������}�w��Y�� �{�/�N���lP���Q0�r�@%�T ���ֈ�=G��P�w�
+
ʵ/�H��]��9f7����;P-X:T,�X8�ApP�E����=p���Sre<m��$M
���
+��ϛz�f�tQ��!l"� �+A��x[�
+�
w"qnu3B��P� +.�
��HYY�,
+ߡ��(e�j欯�?naYζ�q������>�z�����?�Cq��{�&�c0^ľ�R��WP�7����
+�S���
{eNɠ��}�s��z~���0�/�%�\�k{k���0D�{��I>�]>g<z'�k��l'ᑉ���Mq1M]uAV3/!R5E�y�Y���y7)?T� ͗����q˜��v
51�u�|��e�L���yP%���M`��-�	u<By�j@�a�)�s�=x�����
�}af$�B�ȶЮ����?�jm����MO���2�m�v6�%tF^��m\��Ȥ����'ΗNJ�<
+/f��6+
+endstream
+endobj
+4066 0 obj <<
+/Type /FontDescriptor
+/FontName /UGLVGA+CMR10
+/Flags 4
+/FontBBox [-251 -250 1009 969]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/Delta/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/bracketleft/bracketright/c/circumflex/colon/comma/d/dotaccent/e/eight/emdash/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/macron/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 4065 0 R
+>> endobj
+4067 0 obj <<
+/Length1 1254
+/Length2 6119
+/Length3 0
+/Length 6887      
+/Filter /FlateDecode
+>>
+stream
+xڭWeX�k�	���;�
��N��b���[DJ��钖��
����������\��^��{�g=s��ʨk�+g�fQv�y��� -}�  �'��ʪ ��=�n0E�'D �� 9/��  (*!$.! ��
+Pps��C

=

+�8��\!p�-�{:B\Q9l�. 7[(�ӏ ����#Ї  po�

���zl P
���`�n ���v^����!pJ�%���h�s��A�����P� (%����\���E��G�?��h�+���?n��^�8@������)�/mZ;���Y5O�
�V���e�"���;]���#�
삀�i����-5�?%�+�(�h�q�u�r�`(������8����1j:p�/�L�O@ �rD=�}��W-%���
�ZQ ��6�D @ f�@|Q���`n�� j&A {78��)*�����+�������(�_�7Byj��� ���*N�7��F�zO�F����F� ~����0������7@����!CT����oT
+��	Q�
��
!�x�l�@��@���7���#uY��~gG��� ��QSp�M�b��p�b�[�0�?V��.�j�
uQ���,�
�%
�w�@-�o��w>TqO��{�.��������,/���+$
��I
 &"��l��&<���@]��b{(��@ �[��7[��-Q��J�SUX\����ڍ=��—R�]�F5<�6����&#���g�����7�|ꑜ5�k��z?����<[�oϝ�:�Q{���gt�����t����/�>�r(
`�1���y7��D��+g�<��l`b�'���^�!NO�\�
v��i�^=s��"�^�S�����pF֌2w^��~~�q���
���-̐P���|��{M.�̔P
[rlN*7
,��Ɯ:?�Mؔ��69V��#�װ_��X{�m�
(ZiϹ��97Z�5k~k
��zY�9�cq��3�ޢ���Jr;�&�9z3Sd�_�I�R#uc^��n�Y�e
O��&�%E�����O
���OM�\U�	�6*�B���+��3��Bw�b�Xo����@�cM�GPFh] R��7���%x:�Rug)F��Q��m&���OYh��?�H[�I����������D��D��V�Ɏ��~�7o��_� '-�-��"3�r2'&�
Vצ�����o?ؙ�ï�~l��i��|�>rR%D'-c���?|3<y��K�'�A�&�X�9��Q
{��X�F�]����u���

~��z�A,7f�*�6�\4�=-�F�"
w ��_�8��������cp���_(�r�^�@��.$ .z@���l���MW:���O�8ґ^
}�������v�[T`D�;	��DV
����ղ�X�NM���[�/�LI͗��;��B��;RU&j���7FF�I��� [...]
+L1���n�w�d'���F�Y�����T�����z�Q��Bc�r*�[�fpLA��p���v����
+Bf�����m�nJ�i�¸��c���Oh�G��
(��DU�/� b$@9f�M�d
+�>�,
�[����'��g�
�]�W���
[[�^�x�@��U���5ɞ�
D�v�V�	wS��=�뼬�c7��e�L
+b����aL�C����K�6T╪
W����y��x�:�W��EJ
X�^�9���S�ȵ�.Z:�V�
�X���)�Y*&z�S5��{�l��V-��u�$��,�..,��^��xi�]b�N�zF���&a��4n�]�,�ez��P`<f�S)iCt��
�zpݍ\	�]	����q������	U�?�ǔ�ʓ�x���7�9�ށ[e;�R}}6'ʨ+F+�5���l�)~
�0E�ڨ'�*������9
�)��+�z��-wҌc�m��y}v���Ӳt�n�(U��W�
_Ui��w�@v�%s��p�8�Uઠ\
���]W���P�;~2�F .x��`�3gO�nxY���NF ����b�c��nk�[4�[
�t�	�;c���O4��R�j�ү��)�n�t�����̦jL��-\'?Hh��
+I�
��
 a}��4��q���{\�:��
Rо�٢��h�<h�P?��n��^\�v�P�YgY�
iHQ�K��,@����K��a�w
Y
�Ny!�^��
�=�:�
�W�	9z�C]X˴ç>�q���}9��=FÄE��}^3���x�)�"�	o�{~�0uG�&C�c�q��耰�I����L�#i��XA�fu�x�L�
+
��A���1�/�����4���V儜{�
��;zw��x*,tB�ᛮ����W�1��Na�vc�m�6�����
��[�lW6����q����,���?})�#xD�x��&���Yv��-��|���n�^��4s��I�0
(R⨼�`.csOt;�6
�p�>v~�D�q�ֹ^�a�Ѕn�q
A�*�&1�%�
+�(�rOY���q�C�,�g����B1��?�ò뙏�r��5���&zL=���#	y�
� C�'�
���#
ҿ�sl!�� ؤ� �n��O�G\�r{�t�S��R&iT�������\�[�Th�Bt�W��b�?OPf)���Ҿ�
e!W;O�U}����ڇ�ְ�.7��
z�T�
+kl\�ҷ'[�ޘ���`S
�?���
O~����E"
+�>s��l %����:
\E����Īv��l �Nȴ8�+������}5
��9���h��e4�
q
EnnB&^D�#���$�q"����:��8[�
{c~�X��k�F~EF��NܺrF����MlW����i�:�
�
�K��MU��,�]��Q�
z�eW)9��|�����g]<�GKw��!��.����M/Ag	��݋.ң��E�MZR\�@�
Sb�l#���B5H�b���XF-̽M��
+ϸ�r��tap��j���b�!hg�iR	1�/״��O�s�����񢟭5�=�n�e�#䧦�Ɏ.>�2lC������yw�eT-a��ST^�*)>��z~]#T�K`,JW���%}О�`=c�~��η��Y������
+k\�و
A��N�$_����ZV�uO���E�����w���7�~H�˒P<둱)��mϼ�����M�澮�
��3R
K9��
2�5���m�2�iq(5���ې����!�Jh��C�E"&��|�>�@ J�J��+Whŕ]�%�t.T���
�m��sO�9<A��zx�
���m�S~
/�m�5�f�c
��n�_�a��I�ľ�Ž�d�)�W�8�ľ��*vO
���\�S����w�k�E��p<oC��(��UÄ!�>�F5���r��9��/Rw	�֢
v�
���g���E�͛�2I�
�QF�H�
+`]i\���f�/���'��)��M�/�dFy�=�sT�q
A5%�1l]%�T�>�M��"�+���)
��T��P�
�L�Qtq�*1D� <��h1b�ޙDK�꽥�8��I
�?&�i-�u�n�?�4���9�|�Z�.{�ّ��|
+�8Jp³�gIXX���	��
��N�0��������P��
��Y�5���x ��
�
d

b4	�nj��?��?�Q�W�����/j��$��Q[b}Q�&zS�?7#mܑٖ�!��e�����x�$u�@z_F:�xŮ�?��=]�aG�7�3�C�ݥ�/a�!~��q*4�1I,���j޼�������::�|���wT����A�B5
K*���Bfw�#��N٫e��Skh�1Qŗ���R�!��ٖњ
���C
+�YwL���&�]�����
[���$�FM���ױ-�sy�=s�O�f�&��C���:/`�Qh���Ј;�i>|�s=��
{b�A�#���c	��+�k��2������I��.�J��/$e�J~U�S���MO>�	w
+��X3i�}�y���[%
�}�%M����n�������̸!I�XP���f�-�v�L)�c��)�qj1	�3����=�bz��,�7���<}��>Ղ$��]��,�e�S^�wg՛���"��B�A�&e(yb]S�W2&�Ҫ
��F%�cZ~qhڀ>54~���$ëH�']��v,:��Ea�8~/����몫^[��z��51nY=�z�����r�#�v2/��G�<�Ƀ�8���7�t��4�h�Z-X�X��V�Ԅ�Ȥ�w���
���~�M7�$=�M���ä�[�� ��������K�YI���B?f[;|M�\O/�+��ˢ;��rCk�.��S'��x_��|+�W��9��ϔ��,��;�"y̭)
�=]��%����gy�K�0}��@pF]�Ⱦ+#v�$
�e�Y4���̗��+��w�J@�|�LK��
���
+�72>��O at c�H��ZN�T4R��!��	
؊[���5�t�����7&��d���I�2��:��Q�O�{���T�l� �0�q���
,��T
��7�F��)H����e�Eã:�^k�%Hc�w����Tkb�:
�߷�R�<z�Ͳn�|�ҺY{���WıQ�y�et��特o\��-��'��q��68OU�/��Zjd����u6��O�ez9� 7��x����*����VG>‘
���

8�m/]�B�ԟ��[
_��b��YwL�b�'��˿WTW� 	W{���f#ƫi��VS��S>NO�:��
yq_���������Ź��I���1��c?oS4�[��	�SJ���6"v��VF�)t�Vɸ}^#�s0���^چN�<q�`P/Og�6}��'��2C���f�z[O\�vu��,��*�<疳�a#�y&ށ�I��Y##�\{U
����Ў����=
�UJ�ޱj����KF������۵X[�
�����WU�*bb�QmـN7�d�7��Ј��y4�NH��ׅ��
.�m#^
�&�V��}�z��;�E�N�]�B��S.�dʌȪ��vu?ڒ��l
b�o�z���%�HW���`9����J��U/���
+
+bU�
�٦��+�� _��O��#z��6��O���*������Wj��u�T�[Cc�D�X�U��$<��2U	c��*�}��JNw׳ٞ
.�Lǚ-���F�����������,Sz^Yj��7����
l�'�
�#��h"��S{��o����eҀ��]���d�Nbн�	���w�s�����N��R���7�z�D���X��X�Q�R�����`*�R�6�v��H8N� �P��%��t��,���h��s�ֱ4�C/�^pY��k�.n��l4x�0��
Jҵ~x6�D�18<��eJ�u��;�g��>���
�Z�V
֮���1��)�s��@
��N���d�oZM���$�-�;E����j>椵��
�*X�5�Y,�t~έ |`����<4�D[��"b�,A�
nP�Q�W
�s��
�+�Žl�v�
+���&��ƈ�x&j�]�۷�7�cDL��J_9^�^�>��e�j�����.4/��O>;U�jlhs�V���	nS�~d�����F(|�
+���ƛ�mNB�ۘQN��Y-!
��$;��WQ��@k�|@����t7P�����L�K �=�Ϸ�;�����Aފ��i���M$����k��dv
՜8�R�'Ť��?�������Ю	�\�z�"�x�
K<���O�C\�Ⱥ�Xr�KX���
��$.&��m
�Py�x�E�#5'�iօ�b�,��%��<8���#����
,��c�k�
� -}�`/��!�Μ�U�]ݪu�
+�(J����z�>b���CZ^�$*�f��d�]O����I�ä�=~S>�Yzkd3$�
+��O�[�m�\��}o���� �	k,�F��4�(�9	�1+{A�޿���Y/kl͔���H}��r���Z-���]|�]���xXZ���{�]��Q���wg��)E��4D
a���=����'\�f�vF,p+ at p�<�MS���N�d�A��8裗ŋ
�4�F\�*�
��J3F�U��<Ԃ���Lf1�X�ۭ6��A�o���j՞W�\��h1:���dR�)mk��P��h��\��Ym�ٛ��=}���ӕ�ӚH�>:��϶�*�C1��`2bpr;���"U����5K	���2
5��g�D޽6��)�Ғ)�7$�L��@*LZ]B�Z�>A����n�T�"� Uݜ\5ts����w8c/*����O��%����u�S 
�D+���ߝ��R/���IU
�xMcOӰ-�m�N���>D��q{��k���0\�z�."	 cMO�+��c=ڕb�KQL>�����CNRF����a�N��� �gW
+endstream
+endobj
+4068 0 obj <<
+/Type /FontDescriptor
+/FontName /FGFGNA+CMR12
+/Flags 4
+/FontBBox [-34 -251 988 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 65
+/XHeight 431
+/CharSet (/A/C/H/L/M/P/R/S/U/a/b/comma/d/e/eight/h/hyphen/i/l/m/n/o/one/p/parenleft/parenright/period/r/s/six/t/two/u/zero)
+/FontFile 4067 0 R
+>> endobj
+4069 0 obj <<
+/Length1 1091
+/Length2 4284
+/Length3 0
+/Length 4975      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\T[���R����A�n�;�a`f`:�C�F��.iA��AJ��Ay�s���{ޯ�o��{]�Z׾׽�Xt��䭑V0e$��I 5�@�@� �"
+A�4L�]m�B�@���}1	!a26�"����C9�~�D��0

+A 5!h;�#�
+q �#�pړ(�� �����s���`��d �E�`�p���@�$P�ﲵ����`(l( '6$��p�Z�l���س`�$���m����q�e��I�g�w��� ��䊆���Hk
+�o�1��l�0k���WU�8T
a� 
+�]��(�=`�:p4�hqp��U�!��
۷�"���?PQ���>�ZӁ�hO�\��b�o�v� �
+�

+��B���7�����"���@�E�
+�I��
,���  
a
� �<���H4v
�_�
E��:EĀ~��"10P���ޗ �7����F �
+l�@����u�� A� ��Z!�Aa���m-�;AP0����
+�O����,�-cG
i���0P �b�����_s������=m����B�#�؀���m���DX�����1QP at zx�ݿ����
������KuEa��������

;�0�
J�i	�
�O�-�S�
.!��U�m�Ѫ�k�4
��PЧ�̽PmrV�BM�J���~����GwPy7�9&y�窛�j�W���M����A�����-0���Bq£�����l
�k�s,8��n����"�&�)�a!���Y�(���Å���)��?�ه�4���#[\g�$Y�?-�ͳ��nVmN��1�A$�%��q՘�{�BQ��Ⱦ`~�WWs�g'��U䩩$OgW�?��T����ޖ�ʅ4k-^��!^��0t}Ȁ�}*���#�<-[R�ia�;�UO0y���\��ow���nl�! y��Ok��

�zdW��Wh7W�n��]�3ӻ��]R�@��h�:T�TS�)�W6 =�����I�7���OLN<���J�2jSVc

��c}��R0]~�E�!5ZL�P���0 
�wT�m
+
je�h�V�ڶ��
�5�WUn������s�� $bҕ�ҭ������{󏏳u'>�~ky�mQ�‚�3��R�	�gw�KnA��Wrn���k
��c���A(xo�,f�%߽2�<���D�3:F^�� ����*_4���3�I�/S<	Ao��@�����;��W ��������iJ�����"�96�O�\c�lG�Wu��~ys�+4��
f
ٿ��.Rly����"A�'&4hwn���x
��]��}�C�2.��|�y�����76�1l+\捎�
���8޾��=��A�.��H��FM9���=Ap�x�X�
�v�G �3
|��[�|���QZ,���}!��K���У��娪�>�����q��Y�Æ���U�i�*1y瘩���
�`��
�2g�I��A*�9�罆������p��#���pV_���}ke?6q�&9���l�
nr# h��E���ڛ���P.��Ӯ��ԓ<%��
c�t��L1�������5���M�8�
���f��ђiJ������;�j��
�w���Fo�j���ʟ���*#q�B߫;�:>/�����]�����iop���b�N˯u^��y�x���@?�y�2?�h߉�~T���,Q��K�� ��M�G�~W��*��A6Zf�z�Ϫ�������n�n�>׾�Z�&[�d[���Ų�L4�)�Ɣ˜��ṳ�J jye�w�vGj��
���r��6�g���"�Q=ioƤ��mix�^���=�
y�%�q��G��o��y�F3�ӆ��yn����1�����-�ó�{�vG�7�����&ʧ �X?�q�ة��U������k��,� %
���S6�&^ [...]
|��jc诓�x��q��3����X��M7�'��|�pmoi�&��X4���9��4����-����;~mMg����?�Ǡ5��
�K9zO�4	
+K�qBQ/ݗ����_EM*GMQ�gsG�@�^~���mϟ�
�c~wj���M�ahu�'�=�ʻ3+�A��-J�h��Ȅ�A.یu��;-��Z�MQ�NK��X����E��f[�V���#k������
�ʦ��p�&���I�
��	������������J1��� �j��2j����y��
��s�\Ҙ\��V&��7exx�&W�{E�1m�x&!��5��K[�2
+
5������|�$Rj�鍂�T\
��
�$L/�{ ܚ�.4�6�
+/Z�RM�U<?�Y5UL{IR���`���e�
fW���
;��uԋ[BwL�	�D����Թ�2���O3��z���j�te�h0'���K
�ƺLd�$��A�k1
�����<��ޑ
T��d�c�θ>]
��x�$�Hd��4�O�|
��c�[K�2pb�i�zv<g�?.T�Ľ}R:lɸ���,N+� �<R�!_
+�}�����B��}����uF�:�,
l�F����D���}X�-��wB
+h�p�ۙ7"ܢl�=B�YL��^P Ig����t���]��vT�O
fZ*=z.l
���b�Rxju1�y�+��7��%Y�o]S��,y�5��~M%	\�|����m�m^\�
��v�*�?���^�y�;m͒��>��Ə'Z{�DG�응��N���8��񱺮�3m9�ln,s���o���:����� a���#.3�(���6+觔>/J���
�
.OG/��G7�ߌ����w���m>
E�LK9�Ou�(ǰ:��8-��

q��YJ�V�!ս�<n��ЦJ
�:�
���jC9�Q��U����}Ҕ�B���6��x"�=C��>O��g��
���'�'Q��tti����/����Ӏk'ޮ������<
g�}�@c�d���y`�O =��&�G� lGF�L�u����e��jE0��=�ٞx��M�^�C=�g��r �{T��*�E���aڬ[��ʱe�?i$�R�z}=���н�
�k|w���h��2���F�(�` �8N>R����/������Ue��0]GO����E��{%}��5��{p^��s
#C9�����g��DZ�R�&#L�k�����w�N�i�}��LJ�XML=�&T,o	�f�xtdž- �D>�mW�ʾ/�]z�����*�7�1
�%�_X@�(�*
�(:/K�G�'q�<��\�f�}� �?|3���9'/�"��|x3m�=��I����LN����o�㓭ʫ�G\Q����?�\z���U���l�M�]����:U�R�}��5t�{s��C���޿��0N��_
�ʗ4����ԏ~�n£�x��ʯ^�t�[ SQ\)��=�[+Њ@��
q�9�d����g�r��ҏNn�{H�$�=*�
�‰K �e���~
�'9�c�wqjHf��o^��X9b
+�
���^����Zj�j2���EȪHV�'u<C�3���39iQ�/]Oɗ��^W�a�dw�Sk�H�{�Y_�W�u�\�ސ|�q�
l=�_���N�k�����<NH���P��mߛ�g�Dž�x��b�f�˛�W�#���q�&տb�i�m�*�
ivm�h��Ju�e��L�%���f�;a�`i�F�zm��vX���c'J°�b��iZ_�����Q7'�i�*� 3�����T�4�NJ��b�� 
!���'����S�ʇ����©�$nE�{u�']-��m�Eu$[�����]qI*z4�
9=�e�GY�-�3
ki��
�/�1J��kU�������\4(�Mf�����}kq�V����t��+
,�������5QՂ'Y���l��dEcG�-�uvʉ
+
����"׾~��*Z�?-29�I�u��?)qv�U��}
Q~
+ȭ�l�@���
�	�!��
+�k߫b��7KD�F�~fB2xi�m����xՊ�;}�B�����qg��ے��銖
���f#�V�^�*�A�5�D�I����²��;�V���n:K%G�	���JR��z4�L4TQ��8�/�V��y�l�I�/�l;��TF��
$�*v��V�\##3bB?=�F=�W��w��������gl��'�I��q�Z�!}{���m���
�iA� �Y���Q�����Os'f���[8�F�N
��2��\���~��VR]��Ν\N/Ӽ���Y�k�&o��A
�f���P7�l�T�"��
��#	6J'~^|�ȤF�9:��k���f�
N{8~v�}|�1
ߗ�r�ݨ�`dx�F!9�{d���О`�ˡOB�9�:E���^���Sǻm��K�ś����,,t����\�o	]�Y�Wǔ��� ;�6������z�"لG
���b_��~���pm�^y<o<�i�;@��K'�R�
pxgE�f��&�L�
t�k��	ëKJ ��֋ 
���b�Ə#e8b��[�ej�v�:��
?��
+�g�
Y�H���W�8�n�pk�
��c
1(�
��0l���~��N)N	_��{�.n���X��,��a/�'	�F��Sxt��* ��_V�
�m8îC$8�mkt>�*�����M�E�H��3�-�g�=�1;6�s|�>FSEՓl��-I�c��s
k�V6���=2�킙9�'�6JT0�б��:��A��AG��ĵ�E��	��
�`$�3����T�f�op

2�?h
?UV��
�x��
�
‘�^��V��"|lb� U�w�k_b�䎨80{	�oHd�/�O�>;�H.P

+��x�}�?f��E�&�
'�
�H�Js]S�#�������I�{n�
�Q�y��Y�}7���jq.5��2�uBw��؍oP��'�
+endstream
+endobj
+4070 0 obj <<
+/Type /FontDescriptor
+/FontName /JSADGC+CMR17
+/Flags 4
+/FontBBox [-33 -250 945 749]
+/Ascent 694
+/CapHeight 683
+/Descent -195
+/ItalicAngle 0
+/StemV 53
+/XHeight 430
+/CharSet (/D/U/a/c/e/f/i/m/n/o/one/parenleft/parenright/period/r/s/seven/t/three/two/u/v/zero)
+/FontFile 4069 0 R
+>> endobj
+4071 0 obj <<
+/Length1 774
+/Length2 1313
+/Length3 0
+/Length 1855      
+/Filter /FlateDecode
+>>
+stream
+xڭRiXSW���
+�.�N6p	;"A�Z4$
����*M$.��R:E��a���E���� ��8
��п���|����{�{�����)���0�1Śa������a0�(]];6H�0`Ȟ�� �@��`0�A>���C�v0��f��9�����
+ ��l�n

C4�&�S �o��L��q" � ���PX, at cP9@0ʀP�
G.P
X}�i\֗dG � �M�� b�CL>@CPhw�"^����;r�LwJ؆<�ӟ��0���>
��r at 6��@6���~���ܰ�]�ɠ��P&`>C�GFH�`p�t �Œ 7q�m5��i}���ӗl�y��-
+���+��ݬ��H6lF�A��"Dd}�}�e�D�i
(�YX6��Ga)���
��(�/�
�9� �$�٨��4' h7��5
@��܈?�C :dÛ�������1ścS�2�1�q�är�l�l�!$�/u��@*��L���Y�T�')�1��
���^���`����43��5�h��w�8Siϸ̸F�j��X�N����k=��3���U}�g���XZ
�i�ߪ����>�5��0��vK�\�t�����	�AM�� ޽�,����c&�[t�B�IV�/�h.�THK�1�TV$Wc<����]Γ���
��*R�4���F�䉣3�E
+�埚�
�B����L�
��E���T�
����gs��8\t�͚ܯ��\ӵ�n8w��ӉO�5�n�Ny�%�#yo�����T��<�)<�Q��
�Vp��\��`
'���,v�+
x��@�Ot��
�&#�H61t
2
����k��;���[2�"��_?��.�}hI7Y�VU߫)mߝ�K*
_P�1j�L�u>5,w���yA�@n
i;��+i��z{�GֱS��I�7z!�U�jbPb���?sq53dҿ.�B�l�7�R����r����.�Ӓ.���* ��iz5-�uFp��_0�?�H������#F�͚k��;��f���)�e&�@�
����|��D(8t�	��t�ٿZK�
�b
��G�=d��r�ܭ2������c�3������G�PukOZ�m$��;Ë0���&'�8��+��K��+�K�k=�� 5��V���J�>���'��P�����r>��a����>�q�V����&�#L��)�a�+�к}�јH����^�x ?y!��ڙcBSjs�A [...]
��}��*�<����Wf��HF�j�d��BZER������
�@G��?�a�vao4��[����q����~
Ɏ*I(��*>���Hi�<��9��d�p��N��M�
y�
+I�oT�n��5y���
>�t�����3�������g���	��@qWn^@�J;�HaG\��{�t�x�&���q����
�&�D���T��g�Ԫ�\�%�ߺ���ŷd�
q��L[G�%B[{+pM�E�<՝p��vz�T~>��Q�YNƸ�����VV�~J��^M�:/�XXڭ��F4�wH�$1K��ku�
����u�3�����
������y{��)��
+endstream
+endobj
+4072 0 obj <<
+/Type /FontDescriptor
+/FontName /JNKQXR+CMR5
+/Flags 4
+/FontBBox [-341 -250 1304 965]
+/Ascent 694
+/CapHeight 680
+/Descent -194
+/ItalicAngle 0
+/StemV 89
+/XHeight 431
+/CharSet (/one/plus/zero)
+/FontFile 4071 0 R
+>> endobj
+4073 0 obj <<
+/Length1 769
+/Length2 1408
+/Length3 0
+/Length 1947      
+/Filter /FlateDecode
+>>
+stream
+xڭR{<T�&�t�
+�˒�&3�˸��`��6.���if1����Y��eK��-v��r�r�hJ5]t"�!jʶu�Υ���}�|��>��=����4_c&�rA�$�6 �Ç�$��>�
�1E��d��� ��LM �bcfmcbJ��h��
��0��j�$�
8f����� ރAg�(�0	p`���<��A��I"� ���
+�yɏ+��_h&?�k)��pS�!n��-2Q�- �P���wA�����o����lO:g�=��_�t��YG9Q|
�
(�"�J��/�< &��|[u��l�င�!��
�\�8�I�1
��y�2!�oM�-[ �|��|�˿�\��a�D���v���x6\82!����__w!�\�0P&���`A�\.]@��G@<���8�/���~�#I�P.a�3ͭ2�@K�2� 2��B�Ř�L,����JGG4.�EcS\��f���I��|.B��³���`<Y����!�a�Q�r�&ɹBT��]�1�5׳���.�C��d�g�Eok
�?[���q��ͱ
:����^���ܢ�������:�=���HM�\j�{k!��?�SSX�]:}k��f���zՈ�̵���k%�� �b���Íf�>�E�5��i�����G�J�HSl#�6�v���+�������)
�� }��XC
6��yl7�|������z!y�Ȭ� [...]
洸�,�����i���uK�����3�1�4����\�Q�l#�%�ѯ���ڟ/�%���Q��Ӧ/Pܣ�vS�����h�9S+��#!��o�EϽhk�?���b��`/�م���^�Yk�e�46(M��+ ~>+X��v
�����
�&,����\�NJ7~�Yd���
�S���;[v�;�
�,��ڼ�x$�s�'��Jq����{ҟ�(;��O�V�)�I�V���fc7O�/D���KY'�*���ܲ򥤠�㕼*��dN��a��C��۱|R�y��m��
��Z�ۂam��(�'Y7Xx�[$nK����y�d����^�p/�@�4y��ـ��C"*��%��j/�,��*��t���U���[Xa��>��!�*^?]lxRޱn�*
����%Z�ROE��/&��e7�̟l-��+	v��͏F��7��
���7��Mt왢���a��9��"��sƚj:W��nER
���Q/��׿�5X�E�k7>�l�J*�|
�3��wm{a+)��NY��i{���ҤZ�W����r��
U�
��r����m�Q�A�
4��x)���¤��JfS
zVJ~P=�T���pҧO��+������2�iI_�U	�Ud��<���
��})
-��{)9vC}:�7������*�j��t��J\8[/�#6ډ"�Y�'�/�8�7!V/��L�q�����e�{����[o0�
��(�}�;�k�K���9���T^�����)��NbNt���
JŽbI�e�
�5��a68�+{0��yne"v����ʚR�S������&����
+�1G���vu�A��]�,�G�͟ݔ����X�
��x�6�Q�>����W�Y� e��k�s�
��Ϊ<ٔx�.wշF��_m���a0��~IClv�1�Y�:wz7Z7�=�.=Q�9H��}�����f8�1P�w���k�!cͫ�d�W%?4���H_�x�(��6y�i<���` f��R���S�	3
wG6�h�
�&�T=�.e�F�
����F����Ie�O�����`�`�L3�B42
#\42�����[�O��b-PC�ty��0��.�f�
�b��<�1�XK.��mw\����)�j�J�d�ע���n�sRJ559'6X�)Fo������|���wWF
.<��zW�"�����

K��
+endstream
+endobj
+4074 0 obj <<
+/Type /FontDescriptor
+/FontName /YPSQTS+CMR6
+/Flags 4
+/FontBBox [-20 -250 1193 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 83
+/XHeight 431
+/CharSet (/one/three/two)
+/FontFile 4073 0 R
+>> endobj
+4075 0 obj <<
+/Length1 1158
+/Length2 5241
+/Length3 0
+/Length 5976      
+/Filter /FlateDecode
+>>
+stream
+xڭSw<���j4��*�ml+F�����D#!b�ڻJQ���m��Q�(���U��ڛ_������߿�W���s���9���:����[���
+@%A
+�z0T �{W���!1��68�$*!�{8��  ������x��q��"
�p .�?�` yig�i��.x
;Hc�D�|@�(H�
+w�
�
��D�
 �P�=��E8"�@�?���
0 �_����C��;��
o���h�A�|@����
�w��a���J
(����������
��8������41�,�ߩƈ��i"�
.����lPH;y�#
+��E!ݕ��{
$��	�`�rG��#���6�͔۟յuy���!
$g������b�o��
�
2�@ P|"�����j�����#��s�`�6>@�]�(�
+B��� �7ޯ� �×��#	 9`��?�	��5���D�B A��H$���3��F�M
+��F� A{
������͊AA�7�z�ˈ�
��������7�ॐ��� A�?�H��7�B@��@|C��P��A#��7s�
�׺�`h��g�ؿ��oo����1���PT���
	�.ū✰�<
�
��G~�
�!���-'���/�W��=58
���/�
�u���D!�+����ϯ���H�y#�;��(�N*�9�:�U�b�@	1 ��!A�]�Py�x" Uԥ��3[irR�AK�L���u��
��_�Wi+�-!m�b��z9÷��d'C�gɕ�0t���zxoC��u��U�ia{֯��y:\�
VH��	Z�=�Z2��`&J(���J�0�
u�۫(��/��Wf�C�#�jx��1=hN
+�r�.,�k��s�P��k��vD֭/TS*�.��������
I�Ô���Q����L�ʯg�{�bmD�\�!m�
��g���u�
�z�"9��Yݼ��W6v>a`�,
��51��\�ع͵�:l�Az��s9N�|Ւ�Q$�k�
+Am�IpMv�I��ޑr��v�}ѽ����s���@ ��SB
+S��>�J(|��d����w̦�]z|�P�0�ΫJ_?��ت�o���������t�&4D��sn�(��
6�j,S�:k�~�Y�ԿC+�-&��4C�:��RFV��4仳�f
]f�gC~~�W��l:
+A�d4���s֯
|ʐ}� 
��[$�X�����U
Jɼwğ��9�Mo�d
��θ
+��
Z�77U��)Ќ&��7�)q����Na�~2��ě�6
�G���.J
����=��<X&�
��#Rz�"Te9�����H�mEi��������k�E���N��vJT�Ď�uī`V�
�@�]-�Fƕ�Ѭ�
�R�7�)�w���3����
�oIRǸ�Jr|�{]��.
�Ii7!�G���9G�]Z�&k�:�ƴ���cC�#5N�{_+yw�(=T��2x��s�eJXL���f����0-)�/3ܴ��R����L���'�%��*�o�No��k�[�f$�V�����g�L<	s-vh�#���с�J�ݤ
T%B;
gs�}ޔ�����n�

��\Q��
�)d$�L-�������V���)���
&�|%v+%��帊�+�2C�du�S��e;�p at 5>Svel�l+H���3�'
^̄�[��[�V������$�d}
B�vV��*&�
�+�Jư���@�t��,MJ��J^d���0��y���8�?�<���Y�R������ba�#uHqd���G�{�� �K/v�<����hj-��jv$CM
i���h�E�DnӁ�Q�||a1]��t��ʄu���ca8D
+
��8����ʼ�`�٠�G&��Y`'��+�.��G��3��|z�����J7��
]��\{��]��CyH��#��"DƵ��6�N�+w���B��#�0/k��j K�xBG��!A��[��fŷ���2�Jm5!�m�E'��uYV7(���D���S�˕l�p��e
]�}�a��I��ys�PkL�N0���?��Q�.���_.K�Z����'��S�D�'��!(LtӣZ5��b4`�k���[ɝ�����t��\�? 4?q8l>
�]&ΐ|�����ZjK���*��4dW��.`���?k����͉m��ώ�.�ؐ=��dP<��C.X�L�,��C-#rM�O�PS�r�	�
+���K
��br��r�v�js
5��{�����A�$�5��z`ڌ]'2"�j
A9���'�¹�g��*��UP�>HN>H"� �scKk�X��yu�#`K�I at -v6O�Ӿ�ڞ��2FA��c�~��26$�//z�L
+�^[y��5��ye�b��ﰖ�G�I�(�|�)�"�(��l�����$�������)g�r�Tԛ��u-#�w�t=Tu���48�Ϟ
��Ļp���/��YA4�D�:p~���<��R��]l���}�>w����m0��1�|�ۨp
+'�˶X��V7����z�$�f��nf-]�-L����Ӳ����\D/���C|`�}B(�"(
$ɩ_�6�J���8���� �"��R��q�
*�5��p�29����z�p�6=̥�0�6�H�B���S��y=�MKv�)M�A��J�\}�Z��;��W�`�� ���{�5 �M�7JY4�ٮEɞ�_@�,Ԛ�����L�<����Q�
+ߓ[��M�I�\�n��sG�p�F&�y�1�J��w��;�;�:|��gfb<�m���RFߤ�m�`�ᆞ�@�֚�̣���\+/����v�D�	a<ء��>�\��W��a�˜%�`�����4��@��沲���K�U.�:���b]
�r��w_�o�|.��)��-�`/���G'���� �ML"\J�%�ys
�v�"�^+�1Lٺk5rgpX���Jsvc�-
w��)��d,��F��C
ub�P�I�N�X�+����H�u�5�/��W[�CRj��,*�<��%j�o+��͗�l�'�k��y��E�
��
L|X��ά��o��cܫ�����E?�8���t�IJ~:�|%kX�agO at z�\����������VE�V>
�Զ^@eڣD1΋����c�ƀ����݂�]VV��p����+��"$�i�|-q�Mw�}׼G�.�K�崭ǭ�f�A|0
�򾂎5�d‚��_�L�^����w
�Iv�t�f�}~q��U���Hw�]�F&l�J�A����a�3d��Y�zR���{���N���Ng� O��Y~��z�˗�-�M-:3���R&g(��1�[�
'GRn�����$��fh��Rn~uW1��kiC\I�Ւ\�q&�T0��
<��N�P����Ӏ���dV�
��꜉��R�z \��S�1`�{
+��+�S��x�A��3���	�2kS���F��n����5���t��M�6��
���Bό�#�j��yh [$��
٦}7U��\މ�
+�`FW���Q�t}�<-L���5%͸�
���O�w�s��ؓ�ܤ�5���${�]l�'���X�4�A��1}D�O����G��|����VΡ��C9^jaF@�2�T����o�����v��l/C���5ņ�l���
)r'y�{nf�u��W�+���f�ׯ3�
�"��K�`�C
�'O0���7W�HS����v
��e���T��t��V��4�v`����K���
+ܐ�ߔ��,|@+�.
+�8|S���Mhg@=﯆���1^JvW�4M
��5ϣG���ҍ}A~C�`���]KA"�{��f�m^/��ě0P�U�//��"�e�͞W,1���,
8�v8F�i�m�f�'�*��Up�<k8
+L�
+TUMwl
q�����
�>�^Lx
�QR7�{W�)մ{7K^�\���
�z�Lګ�aE��?��vM�/QR��{	
k7���{��Y�($�3����
+]�F[FO�&4��!�lk���Ⴗ�O�D�&)y��kNsr�
��N��_�5�<�b'�I�)��|,
+ds�R`���**����|E'�kp�FF�Z�Gi�FJ�ߣ��f��}qT����t�/��X�ǐ�g
W�ǫ
+��{e���<�Lo�

);�X at +�N3BR�'R��-�E��4S��l�P�O4��YT_�wL�Z
+h	�Ag@^əR�q[Lk��&�9>û�B�x|�х���Yk�!i�3��s˸[�ߍl�
��e�2R��9�?���G˴�(\w
<�
+x�^��O��>W=��"���Km���ո��8߃�+�rc���!�7�-%��Ox4�^��]e����%TEUV��9��Dq�q?
C 
+Ҟ��n��j*�ތ;�Ei�ˀ�L�/]�Y�
}�꡿�����
!T>L׎��n�
�����z�?�Q��xzb8�~o�����F���^�N����'q�g��s�L
տ
����<]ՙ=c%*:����w��ރ�����	�\�\n�$o>xN���r���h
��螾l���k��u9p^Or��|�;�(J	����S�#b���ĸ
�✝
+�@	
�a��g�����
�s�I/�ި� ��@�|S�>Ye
�A��>��ը5$=
�
�g����{)g5
#u��t^6��gJ9�J)��C�7%�Cu��
j��T�-l�}H4���a���QL�t����(f�ٷ!0�{DA���^2�>�^�Y��"
+NG������@i�
+��C�a��
��
���۽TQL�/4��BxL=�cvq�"	fy6��M	M�_Y�(
�*���N�-ߝ�?L��Y)6�c����<�]���+N�� g����=��Sȼ��l9.Ļ]�7��8�G�BRRL�~�Q
�9קiHW�v|�^�z,��.v�v�6K�V��ڮ����T�j�CL�!��D�i}���pO�ڙ����
&�nP#�T�
�da~��r6��� }�k�h̍��,��
m[���-\E[
+	Y���/�>
+N>�㘷�a`^R��^�*�['8��M}�<�z��U�z��R�NΔNV���i��3�rx'��bvm`,]�t���
�Э�æ�1Ye9���BK��C
�O��_���%
T��^nU1B@$d\�	��Mͪ�J|#>+�1�������
�.�
��
�&!�����4�}���91���,ۑSL{6�>�
�|6�S�O[�o����Zr*mi��.��m>�n�ٮ\����i2g�Y�q�L0j
�40ZN��s��¼h�(�F3����f^����'��a�y+������Fc܈�|�6���q��/��d�m
�I��>�*���DAr�D�u ��r
�},z�^��
+8TdF��W'�:b�[w�P3��:�Q��2LZx�81yC\&0R��<�j�gvG��qP�D�k��PqpIt��U�v�'ef46��P!�ό;�\���ce~�#��|�{C�
��v.��R};��Ӛ���
��
�|!a�Lp��d܏�7�y��בm�P\��b�x�l���3���s�/���c��
bi��IQ�`�M�7%e�1+s�
)t�n����Y,�֯g�L5�~��af2�:-[�~��Z�F
j2��W�~o�v)��h��>�,�h��%�'�t�`�Ų9�t��kN�]d�����-۶wxU�vh=o
�v~U�ĺG�$2������8QƘ�z���
ZKy�4���
��e��</�h_8
+x#i�߲�r$dw2��e��g�035�΋t�J�<�ZշX��|����cKM�Yv�M{��/٬� ����y�J�^�GjG�3V��9��j�e�mK��HQw�J�
��Q�j�9����k?��?��R4������4F([�qw�p(?*	����eڳ�����kU�g�X�CkŴ��na1i2�T�)r�l��W!~�cI�8�G��Z �łc��<k��9��꫼KA߇+|����쯈]��2r��p!�X��kZ9��ȕ�f�s�ƙ�����g�7-YLݨ���P�dݏ�#�$��_�]
+endstream
+endobj
+4076 0 obj <<
+/Type /FontDescriptor
+/FontName /ZGEKOQ+CMR7
+/Flags 4
+/FontBBox [-27 -250 1122 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 79
+/XHeight 431
+/CharSet (/M/R/S/W/a/dotaccent/equal/five/four/i/l/m/n/o/one/p/parenleft/parenright/plus/s/six/t/three/two/u/x/zero)
+/FontFile 4075 0 R
+>> endobj
+4077 0 obj <<
+/Length1 1482
+/Length2 8311
+/Length3 0
+/Length 9165      
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX�벆�ŽH��.�����K�����E�wo��ݝR
�Cq
+'k�W���{���=3��3��}�BE���$b�`
+�t�we2� b
+�<  3+��3���`/n�
+� yy� 7K + ������)�98z9�-�\�btqD�@�`3{�����������`�z1Dlm��p��\@�� sf$ `6s��,��H,鑱�p p�+l����;��"
+@
I�H4w�����,�X
 �@%������������_�!
����
����v�n� g���9����K�@��� 2���wV���l&boi
��+v�{�̕��fV 
[��q��������E%YY��o�	��U��������
���	�cefeB
+!�3��Q�f�`{����0qv6�B�<�� `{s�' �	���l��
+9�X��ppF��2�8,"��E\ ���
`�M< ���
`����Y,���
�"�� =����?��`Q�� O��?��b��=������������
��d��;��O�_O�?	�j�� ��
��~��B1�!@ D��o�
�� �濲 +D��)��=⻕�����
+H�����@�;6 �	�?���oB��ݙr�
l��&�ל���a��HCVq���4s4q����
������
Վ�Ks��F �	�?��Y���4�ݎ2����4d�?b���������!���������:x�0�s�� 3!n��9Y���������߿�����l��D�@� 3��3�P��O����Sp�Т���g;�C���mKF��5h?Tfa����z<�u���U�<
rJ̘�s7���n}�}����H~r���i��1'��̷��T�����eZq�}�52�
=����P.nm�,[���jv2U�
��H��u���W�!���[V/
:ܰ

+_�<��<��{�a���~b~�j����$&V���4�0>��������'��
�9�)&\-��#���M9���ksa�
�;����!Ֆz ��Pಐc�
+A��	��I$��y����
+�r���4��/��v��"'?���
�p��u1�.j�y������g�Ȍ"Y��E%����i<t
�������jt#
;C�D_�hTNw\���8
wG95���:;�@2h5��tu�ǘMh���a�P4H��
+I��CX��=
�^�E�'pgF{x.�lJ˓)��&�0����r
Z��1�ۯs�j��D�1% �p�]m�dkj7Xx��˘ٖ&xo=M�R7�B����ۯ���I�9��
�0����+�J��+ϙЩ(��"
�;`�j���$C�,�7�#"k��B5���$侇�r�Ŋӥj��ڥ����!�d�
w���q�r

���2Fg��6���Kk
V��*�$�;_=��_�5�ҏ� �゚�x���D"o�<�<V��Q�R�K8��,o���^��"J�  ���W)_
��g���XkV�ޚK7.�l �L�2g��+b��O5E+}׍�~�l�H�X�bE���"^���D6���J��X.�
�7Y!����ݚ~�����lT�]�(��Q�U�P��
V
��?z�d��B��a��)��Z,]�����Ö_>�=H���/Z#pC�K�aW�"y��.�&vF�[�kܦ0�B����4fƮC�r�k���~�~�L
��iy�����#�L
��o��,Jn��J�J+n��
�6��uuc��N��穡�Z����a�GYQc��u���$U�S�wE��W��)CY��*�
d�>��(���
���1��4���:�!�I
+j�[���
g1��H�ɛ�c�
�}�^����v1�E,[��
��м�q�
j���.���x{d�3��\�O�f�q"�V(�.U���W�����~*�V}a��A�
�������l�w��󙣏����Kp0�}b���g�����,��	���L����^��|/���M,Ž���_�Z�-'k�GeT!ל�׎?�H�S�\'�g���Q��ⱃ��*QT�����]������%�!n]��5��
GS��ɗ���[�^�*�$R#�V�8(�u߮�*�P~Z�l��mR)�iGZ��&�꧸E��Q%$��U�S'�{_+9yŚ���60#,�9J?bh�@B�#��˝ۺ��C�79;� `2��g�}Ҳ�V A�0fH��Ќ�QǺj��VZ{k~��W4�!�W���L|l�D�(���qk+�
+{Waj���c���O�q_�X���
+e��c�w�fq�>&_�s����sb�/e�kY�$g�Br>
9�P�u"�GZ!o��-����l�ڳ�(��P��}s���mJ
�!����OPz�GN=Ӣ�+���ϓ
	㟹B��"<R�3�^.�5����/N�H7V��o�?���ծ�������	F4L�p�����YӖC�#�j63Wx
+�ߢ���f�#�'/"oY��L�̴��m#��~Bv��~���,���o�܆_x������yM>s�8 7�3���#���-�-�̭
�h%��0�
��d���ۅ�l��۫J��n�׼d<�F�w
+�D;)BO��cz
��)K桇��J|Y���������*X���|���yߺ=`�u��5{?�k��"������rR�¸<2��<���@#��k�&%\�b��Z���B
33�o1����]ē�F1���;y�l0�
�=�`:��Iqo�vG^NF�Qx�A�.ukm"~��
�H�3گD�I
V[���
��D����$ӣje����C'r�)�ؔP#C3�toE 7��[�'�D�8Hz��ʂvzwL
�RGF,d
��6�:�b ��!��K�
{d�PG�eҝPt�$��� �Zij����c�8�9��G�Qݡ��,|����������g���
�6�R'}P
��##�6��W!)K���io��}�|Ѭ�jT�O�p�����W+;�y�q�q�D��m���!��9;
��
��'ۓ���2Lt��~j�>�����o��rb�+��5�8gjv�����}Fޱ�6��PF�"��~KRc�L�bWk�%N��x�P^��f'㡇>l2�JJ��/��j��:��.&���*�����m�3��-��J��–�
��Q}�3����,[�3�Y��޲SJ�!���0�]c���r4�
�Ύ�	"p��y-o��ð��8��7h���\)S3t�5��{����U;��
�v��.�0~
+O������G�h��S<.ƒP�wl�{�
+.+��Td�HE
+�4���� �~N��n�>����o���o��Bk��`�3��–

��z��U��w�ezD���f �o� �}���J۟f�Z��<J,�\5n84�/u�M�n�hoIP]p%}�j�m���i��4�u^��u'��RȊ(,����Q�y���L��!����JT��ZF�Äd.�)�
��ݽ��L��w�S�D�c/���������6�e��FTi&_IYܫ2Șá�nK�>GA���g�o����0�y�.2]�*���6��y�"�эUp�<��.:�s�b��wqɤ��T(e��h�I����匩
�V�9<D�yR����JH��?$zQ���EG�>>7����$\l6�||V�K�
E��S�
�r2�@;��Y�tI��X�k)�ė6
j��z�J�h�\�
jG�53�ܜ5=~<\\��w'�
�z\8��s�ۨ����y�$�.��d�7;F���
�����>���{'%�����'?Ü�����O��aN,z��\��I.��l���j�b�]��K�������XӝL����%�kjn��|b:l���,o,���	�� �ËP�G_��Ȫ/7z�|�n-�����>��ٜ�i��͑��sm��׎T�<�aC�~5^;\m0�C��r�ڸ-��0 o�
j��ś��7
�3i#���lP?!F����
���
�:m���s}��/&�o��ݓ�������Q�]
Z?2Ĥ�?-��Hg$&�8y�?C-���b��Ϳ���L�-���!�vj	?��R�&�����
+ʰ7������ٓ؉�C��дI)O�ڿE�?�;��@	�
�S���,jH���`�@iB~v

���A���X�l�Lh�>���
��\��0"���ꊌS�p^m�RT�N(��Z����wwgܳ,"�.
+
f����=��)40�&2m"r��\.�y�Gk���{x8�X�8l�
�J�''�>���>9��?6]s�^�z=QB��g2��?����r~�Q�U�Wx
����t�w�_�
� ��E*�Kcb
�G=y���n�g	虪�&l��
+��~��P7��f��T���UeI����
ΧM�&#�M�f,_�R�	}_+g���2�cfI�Ccg�^2�?��6֩5~9�Z]��/շ)����&�3�{���Ut���RK4Ώ��r?p)��������{P�
+y��k���	��s9��;Y
>z��"��Kt	���
+ex�QP����s�ky۳�v�r��HEGJL'�kd���No�f��ݦ�k
eY��uG�ȖR�W�c�� ��	�@,I7v_�j��l<�/x�t
�'�G�c�τe�_�
f:m�Q�8��l����e�
ғ�7"}@��'�T8C?�!�c_��^�3�a���@�t��.�J�I<=�X�k����X����h"gpB���w�~�7V�Ԕ���,U��?���.��p����e��B:_C������.>�[��#�0��Y�ޓ~��-��o��nqz�39�<���
��O0:x�]ġ��&��y��CW��{�!�<��(�d�
+>�W7)�$�^�G�?i�ތj��N�|�<�Y�:L䇧�ĕ�^uV+v@�s���aN�3{�כahQ�@VB�Utx�C7���-��Ģ���)��^S��r2x
�Ռ&	��3#H�n>g:��gD��7i��~-ƕ�C��a&Q?�]���.ĭ
+�[)��E��]����-�wԲ�R�_�?�
U��B�bK�����'��x�ix�i8E���Zf�W"}bdtҔ3y(�a���)��돥����J����عZp� �wО��UY�
��;�#�`Tn�GW��;Z�
W�c���,#���ȯ�#bȵ(T~�|l�
v�Ѽ����Ep�)	B?)Gc_��Z>��7
(n�'"�����!�4��<��x�2�͖jh�b��i=}z�����a�u��*��I��f�
�,���򼛻�w�m"k{�n��(
C�|=�j-�����*yaz�GU��0���p�H-�;���
:#m��W���6U�����?!�
9��z���S��׹�I��� ~V�l 1�oS�����8�
&����(
+�G*����Q\�Љ^i�����:�h��YW&�`��dP5��>���[c��"!w�/��O<�bU����{޻7�uFl�ӭ1x���� /n%c,:�`��1�c
ԔtJ.��^�h��
y�!���
|KT��6�QBH�n�N���f�3�M�
���{��:�C4j���ì�'>�G��
k�.B��a��󜂘c;V`+�r�SH��rF��,Ү R�
�8U��Z�vN>z��*"�(�{����i��oɩ�nrCGx�Ѣ�w��*
4�
�*��*�7��l;0zcw
�f�I�ep6 �������q@'‚W�����/�Q��ǸA>�Ԑ�F(l��i�=��dЃ�u�(�?	ѳ����&,C����Jb�[�?��?7}lM��.Jm�	�Ɛ��y�Z{�e*&5^��Z�&�Y��
[΢0q�

��;�:a�
�r�a(�P�#�����?��e>���##v+��g
+�@6�)R�zŸ�9�5�����&
�E��w��3�>�ؑu%n�춽pߖv�����V饛�e�^w�
49H(�U��Y�`Z���y_�
rcA�سr����Ri.�_�gq�'&<n�
K���"s�u~�`D�!�Qd�.#^�_<��W�B�G:���7�071��}��g 2�H
M��s�}_kS+
~d�|3��Y��|�����ֺ���c�]3��W�W�����C(�O
+z�G�_�69u���.�:ki1���Ч&�Yϖ
�cj`�Lė
/�*��A�G���ƮF$�ɷ�(5���E�a P�L��˳oK.g��=nV��$"�A��Ա(H3�P�!c�\ �E�665���Y�(��[�;^�\ic7��d
O�U �E��dԁ]�>惀����u� ��ϽA��'�y
R����� �j1�h�[�w�ROy��]��,�R9�oY2>$c�+���Љ���bb-b"����J`OJ��U���5�l�2Q4��!�
�W^��$ޝ�d

?��a=[{]X�lٹ�*.1��a�5��1�n%����{���0"#QO�t�7j-D0.N��T\�yK���$(y۝���R�D����G	��4B9��������&�;j]���w^�X��\�S@�5Ѣ;s��&DD�#lF��w��Pʟ�4�Z
����i5��",�a_���A��٠Ri_�U*�M�,�;
+�

N͹������4����6�����+�`!I�/s�+�+�`��/
#��Z���u��+���k+�K���O��������~Rڰ,s�X��c�y��
����y�]���&��ۥ��
y�m��"7օ,���|�����EÎ!�uH<�ײ��Ll���X�L4�s\]��b�mG�=�,n}��%4
���W�\t;���
i�|��:|���qGQ+S���b�e2���t�ǻ��>(�c�X�:�<~ÉRv�4.�
��f���
�pF�c�LQ��b2)�X���U��
������ܽJ&
FA��
���%� U�ݾ�͒��w�5�R7�D�ߜ�m�#X�$���@s���s�z.�#�g�U;A����$���[?�mwJZzM�O�����}�ܭ��!zE��UN�j�=��G��@A��/��P��J׼ 4�K��	�m>��&����	�o��?y�]�x�/������|�b��J�����I)Pe�z(�
�E��
ی_UejNjNP�s7�\�a�.��D�
��
{��
�C��Va�~ �X�f�o�D��KV��	�a�c=�\fT��x~i
����5�s��K~����5��R��2�U>�evO��  �]R�m!��Z�����F��?��-�-��-qJf������b�~���,,	���u�֙Do�,��#�w�)���hi��~��`z=9Z
+��
�נ�&��t^�Z�*����ەF��� b�rsEM
e����B�g�aGo�/�ϱ��y�Ρ_"��
+amϲN1y�rT2c����9�1`::�HS�B��4��s�}��(b�+��{�Kyb�(%��u��h
�i��\�ޘ	sY)�҆�a�;�P�.i�>� 
Xo�x�+6{�2���L�
+���-���	y�+�<����-֩,���
q�V0|�6\ݹ���c�t0I"�L��LC������y����P�v���_��Y���H���
�,W�~s� ����,�BՋT
l&zo��~嶔��j�
y|?
I��٧� <k΋��*�U��j�,�Py��"YH:,�� 
�YC��^P��f�%��S;�m1�%�d��?)��O�B��f�?V?F)����z7ɘ)oIm��s�lDO^\F�i|*U{˄����T�	��y�&=�oW�5W��Pج�����Rޫ�.+����YՏ�a�q-�
��z��彪�T}�pH��ܣ�
��wB7&���U@�A'�P�h	{�����}nWHP���JN����S���(��g�qɒU��-X�[�I�00�m�U;r�g�&��E �?#��sGcԭ��B�d��QH���D���J�
GK[�J)�<v�"
I
��Q�u���و�K���n�r+O4�={��]�$Bi�)�y�Sk��/a5\h�糄=N��I.JQ���t6���WgZOgL
�FY�}4ڴ6RJ��oPP�JJ�Тd:� ��>Um���D
+pt�ť������I�8&�
���)���W���`B�t��M���5��JJ}M(�* ��_ӛfc_8	�9��l{c@��m�f�w�u��>y�+��?q$�ǩ% ��~w�A�A��%;;$Ȍ�C/�c�v�*�s�d!�jXuO�o�s<�A@g
K^(��
�����e[~�W~�a�����r���3��qk~�zB$�*���kQ�f at C�
�D���1���N;�K`����z�ʠ�ә�:Gq�����fs��
WG��-�^��q,���5��������&M�^M�j�b��"�UXY�c���
÷+v����sN���dFS
y�
+�{*�~�A�
4����:-���KZ�/Έ�
����O0.gۭ�~�l�sL%�4�q������?<�0`
|*�C}��4`���dc��p<A��~���2�C[o�6�@�J��
+Cl7�k;CA���T�4~�l[��y#��y`�g�Z'i&�7��
�SZ��z>�$�dž�-1�}x��t{
�Q��€CGK��'*Ms|��'<�}�����
'��I�k
��0^���6K�/���	X˞D�<�7��FwU
[Lj{X���
�\�Wo�G�*}BI���1��@I,2��2��JMƼOs��1
DQ��vI7DՍ�[����\���Η�c�{6�pȰ��o>���~�!9*�������ݨo84�?8w������s�4.L �eI�n�h9h��'@�[f�Պ�]O�j�
��B،~st�
=PUs��Pߵf�
q
�
:�:�v�6���Ћ�d�~�q��aq�&{] &�M��`�����f(���c�J1{Z��-����Q��JS="ES�L��QHB+QN��b5�����4�jlN
JNW�6�
�@�
/��<�Mq�ְ"�����5��(�����q����
����:�+7�"&�Q̰`s�f������|:���o᪟��m���e	u��"\���9a�'�'��_�3�lj����DO ]���'ۂ����$
��������~�x��ąv�xGK��I3g>.�)��nd���mh�1
[
�����,�
��O~Q�E2��ܪv��M�Q,��УU��� ��:
+endstream
+endobj
+4078 0 obj <<
+/Type /FontDescriptor
+/FontName /NIOJAJ+CMR8
+/Flags 4
+/FontBBox [-36 -250 1070 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 76
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/H/L/M/T/a/asterisk/b/bracketleft/bracketright/c/comma/d/e/f/ffi/fi/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/t/two/u/v/w/x/y)
+/FontFile 4077 0 R
+>> endobj
+4079 0 obj <<
+/Length1 804
+/Length2 1837
+/Length3 0
+/Length 2386      
+/Filter /FlateDecode
+>>
+stream
+xڭR}<�kvB���'�F�b�
�Y&y*oyZۏ-���[楃�R�)/)	���Hy�pQ4	E��P(jtF��y:�>�����^��{_���n����Y���
:[�ĘV�n4�A���6Y�@"�ʠ�l���p�"�З�F��hS}��b0#XT
+�b��$2,A�D��D6
�� i��D�H��F\�:�W0d��d$��T8�S�PԒ#[�0�Z&�0�S� +Xb
+�"1�H,�tZ@��('��-P���a���;Ch4'b���������o
+F 3�
� Gd�����s�Ԑ��Y[6�F%Y��i ��C}-S�wR�A�
�M� ~DZ0�\�䟍H�[��rqw��@|��e҅H���#� ���^ƘX��x��h4F"����?=fM'1�T�d-�F ��"F@%�!AX P�d0
 �%�QH:�-i$�D~
t�S1��(p��
(���P������Kz#����d�G��z�X�� ����!)�����
���
�Q%��`8H��z$|�!^���h�]E�:�������x��A�����NwP�r��!j�R�[��;�Zi�F��
+
Tt.d��M�^���h�iiT
�:�R�9ʬBL�k����
+
�1�y�o�d
+�z��b:�E�3��/ҡ�sj
΂{_
q���Ɔq�!�o]�9
[�6>�P��s
�����N�߳(�\����N�C���ӛD�I��y�ٴ;����
���,W�/
+���Ĩ
p�ҭ��[�>HU�B���%r���\��ͱ�#
a�����܊b�g�����&֙�;�k*���s�*۝�Ǭn�o%׌���댁%�K
�?"m^���a��ݐw7j+3|���j����D���-��{XPl�G��z���zZ����v����탨�w\�"�Ae�k/��=)I�mm�Yf��������K%��D�>]��u��+Ul�k�4��
�5>��m��ʫ�hs�d��i�D;���.�V���V��us.�(�V��
���)�=�ّ�S�-;��4�TF�ǻ����yq(�zT���7�Z��%f�
���|C9�n���C��o��8��p$��1��&�0�u�j���#.r�!_hO�AJj
+r�{<Y���LX8��5��Qh�:�|��Y�䧷
����6R������������؟��U61v)���1XJ�G��`�n~��󹦩H�T}�K�7z���#�iQ��u��a���u���Ua
��v��W�~�tj�fѳ"��K���
˒T��Mb%��1��}��?��Z��H��+&�����(:
����NLz���1Z>E�ʪ��
+N)H#���y؆�Vir���
+���uf9#���ҚR���E�pBt-1p�kԟ=ni�
W�Y>ӣ�_��U
�T��_ ������(V��޵ ���Eњ�+;@�:o�?���UԪ�
&���&P��+�vȤ'>צ��jY���������]͆�rɲ<�m\9�ij
���z*�k7�
�ħ�c
y�]����N?�va��<ߊk��m+���e_�
���f[o�b��9��F�{��c�NN
G�&ت�J
��}�mߘ���=��3��\�S��` J��YsN����#�B*�LJ��?�������P䠾:w�[�ͱJ��
i9�)[R3����k�2��\������aS�v�҈!T�kbVG���=)�k-h�Z11��X�Ἑ��
��Y�C���i�?�t�m\�U�q
s!�
X#����|��<��#�g
+�>%��`�
+�u
9�	}fይ8g��b[�ݞ�C�F@�x�4�3������nS�����T�V5���g	rk�/j�ݵ�Ȅ�w��n�i�߾Y�'�g3V��qF�5��򐔂���
HmI\���W�]~��z��T-�I?���Δ.P�KD����>+\ y���

(�q4P�{���;�d�s�w�{�)���|m�¦��"
+i�ImM��/�nǥ�q�6���v�vgz��P���f
�{���p�L��
+x�B�{A��=��S#�@����n�Ȭ��(N+��6_G�� AD	]!��^�(��R�s��b�3|˔M�I�^3P6�U�]W�GX��	�Wv-�M9mZ��Jo
�a
�-�G!3˚{�b<콨S���O@���ׄVK�*�E�9M�
%x�
n:7���&}t�:�w%�>Mw����%�7�1����y�o����͞u�R�f38���@[��	�����B�/$��t���T@�'�T��zl�Վ�R8�v�JRX]Rʑ�ѾR˔	敓^۴�ٕ�
���i�`Ot���،�g�\3@]|\��?pQcC��$��&b~i�]�P��
�����������N��
+endstream
+endobj
+4080 0 obj <<
+/Type /FontDescriptor
+/FontName /PTPXIX+CMSL10
+/Flags 4
+/FontBBox [-62 -250 1123 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 79
+/XHeight 431
+/CharSet (/e/h/p/r/y)
+/FontFile 4079 0 R
+>> endobj
+4081 0 obj <<
+/Length1 979
+/Length2 4024
+/Length3 0
+/Length 4656      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<������YK��}�Œ��ke'{3�a�h
FֲE��$[H֒}�.KI!�.dM„,�������~������<�|���9��0���D�\Pz8,A�� �F�� 

��h�Qp�ՁP* LYh���P vQE
�"+�q�x��;ז�]�hz��h

�	�(/r
X�h! 
hb0���/| s�
+�B�A0�D#�
�
�A~��u�������I���>dS�8٤@���a1 �
+���Z(���S�n���ý~��=����{�1�]����%����c�]j��ۛ
+����w�
+�A#4�n �
���w�&���h�
p�c|P�QX俍�g��
���������;�+g
+Gc	��( �O�_
���£��=
��ȅ��?o7����E�h,�P(\�x<< D>
dR a �D�l���O �\�W

�{��@�C�2 A���P ��a ���?P����
+ �*�H��ad!�H���d!�?P
���@���x��@������!���wcZZ8b��E #� ��
+(*@��W!��Ga	����îh�IA��(h|���ZU���_L+�ÛV�9�*�x}�����%�o�-��]r���k/ HW�9�͠�@
H�[73�D�
�o�uG���vV�̘�q�E�Z�oB�Y�f�2�U�b.��X��ё��о�q��H��G�ٯ
��Vf�zn���p��=g
��8N�yڧ=��Ӕ�eQ��
1B%���} X�'�����!F�)�����:;�EY�V77��>w���Z
'����
Ax�N7�^p	7�AQ�����1V^>J�|C?PT�>�����W
Ё��
�@b{C�1u����1L)O�r��Ҥ�Y��u���O�wJ/��]`�����F�")d��Y�F��)yh�ԛ�s:���î�b-:�_���M�Js��6_o]!E���[�H�'|��x�1E��kJ$۪�H#���)�Z?g<Ds&
�Z}\H�֖�e�#5��Z��\CBw�O����B_ܺ��P��>N��{�V�
���B.��C��f�Z���|��i�f at i����ҽx�P��c��{"s�4�]W��37����O�]����
L>T�:�?%�m�+f�H��d�(�n9��/1�w�э�I
�����D�a�z��f��Dr����">�߽G���k��^���+�Ii����
�j<}J�m�
+O�
��i�6ފ�.+:�H��fI�6t���|;s粝ފ�f��Ș7ͣO�vm�!a�k7'PNR����j,Kb����/O�
+�f
�_xRp�MmkD	�q�@:|�i��B��XX��)�N��(+�hj�U��e�d��mz�c4�]�!v#.�
��V�\>�I�8/ڤ揧�!�8-�#x��$)�W+�
/�a�<�dğd�- 
TLo9�U%Nu��
����:M��+᥇���U�ZG��+ESd3<�GB�$�WC���-B�
�K��鿤Iu͗S����b�����Ν^�Ԋ�
�fE#�~�*_T��,	��&���v���jT��o�`�=B 	z��M
!
A�'�})����n����>nMѻ�~�p�g|��8�S�E)a��2���e�����f�_�:Y~뢕����J	���)
��Wz��x�e�*xz�a]F�yU�6���}�G
+)�^��L�����m���o-h9�?B����/0�HB�g�=�����1��S]�c�oh�T �V�xCy����|�h#Oa�6�!�d��,"}tR�K{,��GiB�si�|��L
z?���5A	�~j`
f��0S"dc#�
�
�;
����CW
6�v74�����9�:�9�N�
+=��]�=/\1
�)-4o���A_���;�W��S��{1
�5S&%�X�wΌN<�j����'%ԑW2R|���g>�p*fBV��XZ��w1��D#�N  �H�q9!
�f\
+����l�ԭ�������؂�٬��D���
+�jM�W�Bo�`޽p��d���Klyɣ:U,f���?_��-(�]x˘��)
��ʓFo�Πxox)_�m}�=<G�T�P
C�ͳQ�'�_af��m'Q#/Yvd�V��E��]��������I"s���|�/F�'�
�w
��a�b��=Dz�b^z����٬�Ð���tӮF���U��s�=
�A1Օ�H��Q�zl���7�U
C	ַLc�u������f&�!�5;b~�~9l�����U
+6?�
y�/&ϔ'|[<g?�}%.�����Ry��
+D���وwu8��-w�.@����*E��`�����Z�0g���0ܼ�u�t�@�Թ� ����g���޿0п�)	��`wAӼ�Yw�n���
�7?�c2��0��;�do���
A���1[�.ܙ�"rg",y�ϔv�*h�A���B�J�����^�4
�B�|��Eh�k��ac�4�0u.��
v!���>ӷ��y��J.C�������̰|�%1�t#TN(�|�8N���8X��
�j��[�Ƶ�S�E',�O�ìS�+I�f\�
/BR{�j�$+��Wxk��C���0�F
MY��f�a6e�?k:	$�5a��s�d>Sr]":���-{��'�Ʌ�%�)�������k�J��M�S��9�J
��#�j����%�
K������HNsT�T^�>k��
#���e%W�?�
��rU����#�*_F�x
ZRt�R�C/*�܌�RX���L7�V��}��v��2���TW;u�
Դ����|�
uH�V�c5�`��M����6A
9�[���s��r[/Y�mKP@ڞM-��`
+��k��Jz ca{���!�}�����P�A��w��&,{/�6��K�K8���$����=J
��L
40�&
�z����qџHf$��Um���4?���
+�ů�����NE�S(����_�Lk�.������^�k�X��ý|2�\k�#h����Ihn\��^z��]�S�C��
?�6�B
,��KmSu���"�js�&��N;�s7��� �gL�u��
A��ގ���y��ooh�1i6m���6=��
i��Ә��s�j�X0��!�6)礞����r��N��\_22�BJUo��3}"B{1ܶ|�y�cC
�Y�����ĺEFoeΜ��-�%m
�<e����y�>3-�������kl��@�bQߚ+5J#oK��˾��fB�j�
{����D�6[w�]����6n���
�ȶ�Ƀo�/�<��}�9��+i�s6���G`V4>9T)��6i�v��K9�����GŶx�q;(��~��62�qkMCw��v���q��D䥼z���Xi�g}΍��WB;·�pa
GJ�
�v'����l���H�^�vcѵ�_9��q#���I�1u�OFUb�Y�P{�N�
��{�X��/-0�6��ڄY^B�62��G��վ`�L��Л0�	��5t[;����ͯ�[;��t\o�/\�*����T�����{��
r
�e���
+�w�
59��~T�>����tG��S��䤙w���ᤔ��'L���);��_\���ι
1I&	�q��1��\6���S0pZZ��W��BZ�G�aKܽ[���MZgw���9Hwԓϗ���4� �d9S�[,r��/��M�P�M�+�X�>�c�l��<c(�Ju��

�i��P�����_�����;b�)}�~\tBz�/Ϗ��zcJV�
;}�8?&�2-Tu�~�V�+c}t�y#��-/s��y=P4�ǡ�~,eqOօ�%4�Lz����䯴`�pz������$�/�>+�.S�32
4�ۗ9	��_��'�,%Z�?8݁S[ƭMj�?\$P(�X�}?CY��G�"3��
��x<j�6
�Z3�S�Cd��O�_�X=�[�1��12�2���HXw~_��.�Mw�i�]����x'��\� ��ހJ�ww��8v8���z�XNTE�{$�p\����N��]�;��_���ۣ
ũ<�Y��7�v$�{A)�0��M,�{�X:.:]��_����f�l�՜ީjT�`��X��%�L��{�붾ᝧ�Q��@��v2{}�
8����e�g�Ipp��O^�\�
�{K5I,��67�2�D�fH����'z�/��^�,C�S�%�~nH�%�_ȷb�[���~g
%}>1[�v^u_5���x��kqS�7�O��B��Rr�����P8=�2n [...]
+v��_5f*�9�a����|�ž�ڗݟ��(_��Qv����GKy6�=M��L��{$$fV
��P`�R+Y��
�d�M�|$�r�bO;��.1�=�>�ȃD����E���,Dz���f1�	j�����Y=Z�tC̈́��nM�4�[�
��@G�"��{�x7�����_-�~
+endstream
+endobj
+4082 0 obj <<
+/Type /FontDescriptor
+/FontName /XWRTTW+CMSL9
+/Flags 4
+/FontBBox [-61 -250 1150 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 82
+/XHeight 431
+/CharSet (/a/c/d/e/f/g/i/l/m/n/o/p/r/s/t/u/x)
+/FontFile 4081 0 R
+>> endobj
+4083 0 obj <<
+/Length1 1194
+/Length2 3545
+/Length3 0
+/Length 4313      
+/Filter /FlateDecode
+>>
+stream
+xڭSy<�]%3*Bvz*�b��R����>f
L�
3c�"KdIBY�ւ����
)J%d�J��w�]��~�?Ϲ��\�:�}Y)S
%
�ԧ��JHR
�5�8�D H*+�Kqt"�|
G�����q�h �QWF��1PY@��Š����A�C?D@���82`�����,<�XP�D�΀:$`�c
0i �$��H$@ ��
�F$C�?�$�R ��0���O���X������ VD�Lb �
+7���YI���m��C"��<����x�'���CA���T��B ��Kπ��3	D��'�8�Cv#��R�@�'�4}�?H0%���+�D� ���(���
?{�VG�V᏾�$MqD2ݒ��_�k�5�JT�?`��!H����������x
+�Hv�Ѫ �J�1��	b��@  �	�? ���ad
+��`�&p�P�?ڪ��8//*���a��E��Q�,�J���@W�/��X�%�<X=t�
G"T�
��7 � �����<]�8<�O$������������]
+��D*�z���D/V
���,���	��&ge`݊�#�d�`��+#�ۏ�R�yi5 N$��D�/ge�3	���)e��D�헌�'�
+ '�n?�1�����` ܋u_
+�
+̊A�� YNT
���
����:��N#������w�X��������
+$R�`����}�TV���5��]���A

��5�ϥV^,
���-��l��y?��٦:$�H�@�0�r��}�
���*��'l��H�>�3�u\��/��κe��D7�^X1¢���� ��d������q1�&���K2��+2�m�nf�����_r�
6O<,-�.�9�&(��~��:4��Q�|��S'M�h���}�Ǹ]Vpk�PW߾>�)���3�~„o��c���?JDIG�.>���
"8��S�?j6.{5�4�$�}4���d

�4h�8%�6�r�*ڦ`rU�
��^6U-��ܤU�=d���N����[8���d���o�
�l%
3��vv!���{�n�_���n��M�I'g���O���j�˳p�ws*���yL�m�D2��
��q�q��9�Z޽�y�ᰌ0�JQ�����0@���F}H�,���oؔ���D��
Le�nm�L���t6�c"�G���&v^�PԠ$l/��)�.�Wm��9
6�H ��W�]����f�xS�ǁ@T
����_q�G^*P*RK[��o���=2�f�5=?�Q�1'Y�6|3�y;�?yc�����AڎR;[;�G�{]���>20	�>T�mhn>Yp�Y��dmX���M�B��k��Z�4����rZ 8nPi��u�3>�N������HN��{�"C׭K��PrG�ߔ>Y�t��^��*�ݘê��H$�d��v�z!�f�F��j�lY��i�H��C-{X嵗 �N
b�Qp_���HWb���!�/����+*8e�x�lU�8@�w�/��p���������%37%�LS���r�F	Q� [...]
+̿ӎ��=w%�}l����X����;_ӛ�U�:��v)�e�|eF
R,Q����Yz�Q���1KM����
G���!N�n\r��S�E[I�מ���{��bΗD�d�ͩxZ�`<�
�h�y����.
�[ө��AO�
�
~ p+:����<�$�d,;^��a]�/��i0���H��9�W���-��V�B~�������O�s�w~Qڕ
�QU9T�
: ��!��>�dH�$� ��l߁���+�J����}�#�х���ޅeI��'�坐&N���:zucCL܁���,+����0��ڶ��3���W摻
+uN��#���i�w^�
��v[��
�[
����p�^.���y�
+�L��n ^�����֧��E��.��
;�p���2/nv#PU󽛴�W�v�*$�E@
b};�'x�S�W"F��(�a�z�R։�tr$.֒��d��Ѽm�
Ѩd	_@�v0��%�v{�8{Q��U@�;3d�dac�aly&�+<(Ug����J�;�)v�t���	�x�`!�e����<��C/�a����<���\��~nvsM
�oI+�
�v�d�
c���Vjx�%B�1$G��̖�
+|���)�W*�̱?U�J4H�)�{
�'��e�I�椞���Qɉ՗�AV_�rt�]�m�#q��`���1��I�qtm��u`�b�ؼ��`!�~�a<�U�3<�Q��l�<�
=&V�U�Y��r�A�ru��g?��x0 �n��{�������Bm��&(�	��3���~6�³���>5H�j�=5��iiF����'cVw�U���Uk�
͚��T
��C#e�zK�����|h� 24�Q���f�9�^7��{��

ӒJ��	�j�˜�殴�UY�n~f��#}��3}�²7(GM/�c#N���u����U���
�l�d��[&c!��`��8���u�nNA����J�[7��
���t.	Z?��
����
����Ѯ�=<�ۺ�y���v��=����gKX=�F�Ѵ�'���63N
���"�G���
xd��_�)��
v�?��A�\Ur�� E8{qy5��c�H%��Z�'�EDS�+�}ZQ��*fQ� 74�y������3|�Z��uw���QV!���>�
&��^tD��dS��i/�Z�?� ��\�Å�Y�Ȱ�[
,8�;}Fܼg���3־ ��3����W�	<��[�ی��)C���C���d��e��z
X�F]�E��!�b�R�J�R�ϱ c�|b"��l۱��1�/Q�q�F��!oK:���V��x��l-�^@��/�
�
+���5�E�
l��� t[]v
y�zR���m�Ö@����e����̌����.1�goO
��]������W�O�����=���S~���=�M�X$߇������OuAEOo���\��U����O��-���h��x���+
ە^�;��ۋL�Y����}��Qev�[_���%�.�]�+'�|�c�K�S��S^˩�jY�Ͼ�\�ޛ���~kmY]�
{e�9iH�7�B�ա�d�v!���P�V��#i�1�»���4�=!�����>���ݤ<o}�Ny�������ɼ,��0'��DF��HF�����޺Y���@{u�FՌ���}�L|��e(�C?��NO�M��5�Ŀ��C*e�D�Eq�O�O����]��Xcgި�E�������%�>N2&q�
�6����m�Y��8^mlOI��i������_w0bT�����dj��(9o8$��/�r?�	����]�y��[!���b��I�{�4f
�Z
�6�?Y�)�:�O�������[��:͂!��
�'���	/=��7��&���.yL�T^�E�8�
_��
�m�|�GE,q_}ۇ�� �]�SfN��[��GJ3��e�
ru��V��\���=џ�c9Ŕ����J�
z���a̡�\j�\!Tb��2��j�|I��:���m��`W�
+���~b�N�"��w
~/��E�����,hg�Bmy�m�;�5S�Mk��C
9m�Q*�3~u�[@1�/�Q�䪫�6�os�k�j���
q���u�[��Qg�k��<�[ծLL[L��§6��;n��,�u6d��TjjE۪���W؈(oL����m�&��w��|11j��
��
ߺ���?@,'\X1:C\tԲ�cʶ�
�R���0�
�KES?��l�ΰa���'Ӂ��
81>r����Յ�q�
�ĄtjI�^ly��jR8fn
��lq��k*��RѺ��
�>ρ2�F�<r�#Œ.��S>2O�i��N���lY0,p
V%tq9����O,N�
?��Y�R�pB3�X,�3w�u1+x|t��h�o��z�bD��R��u����I)q��ώ���띵�����g
uʤ���	�{�2�iK9��9	Szm3�t���� �\t{m�r�	�5%�!��O�g�W�W<��n֕f�ݒ@�".�	2
W��(��Jh9��m�S���<\���^b7Fc;V.�<ew:�����d���7�9�d|
�F9��͜afP��	���>��=�cz�C�ze�k[{&\��4�]�8]WE�t��W\�ԑ��V�^�	���c���)
+("!ŗ��~�ڥ����w�cK����=@�vN~�Z"��
+��x� �M
+B;@Ϋt�wT��5� ������'��,U�)VU~p�z�ۆ���*�Ϧ�_�]���02S�Ry����F,;\�t�hPrŞ}�^�F�����N�
+endstream
+endobj
+4084 0 obj <<
+/Type /FontDescriptor
+/FontName /YOZAEZ+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 85
+/XHeight 431
+/CharSet (/approxequal/arrowleft/asteriskmath/bar/bardbl/braceleft/braceright/bullet/circlemultiply/element/equivalence/greaterequal/infinity/lessequal/minus/multiply/negationslash/periodcentered/radical/section/similar)
+/FontFile 4083 0 R
+>> endobj
+4085 0 obj <<
+/Length1 762
+/Length2 674
+/Length3 0
+/Length 1201      
+/Filter /FlateDecode
+>>
+stream
+x�SU
�uL�OJu��+�5�3�Rp�
�4U0�3�RUu.JM,���sI,I�R0��4Tp,MW04U00�22�24�RUp�/�,�L�(Q�p�)2Wp�M-�LN�S�M,�H����������ZR������Q��Z�ZT����eh����\������ǥr�g^Z��9D8�� &U�ZT
t��Б�
+@'����T*���q����J���B7ܭ4'�/1d<(�0�s3s*�
+�s
JKR�|�SR��Е��B�曚�Y��.�Y����옗����kh�g`l
+��,vˬHM	�,I�PHK�)N��楠;z`����8{jCb,���WRY��`�P
�"��0*ʬP�6�300*B+�.׼���̼t#S3�Ģ��J.�QF��
+Ն
+�y)�
+�@���� �( C�V!-��
�
+���y�� Q�����~AQ&�� L99�WT*�Z��(� ��[֢�K.-*J�+'
`���i�� MM�HM�y-?ٺ%k����u��/�b���yb�˛�"v���L�
6���^����G[��g_��J��*\�E�ׯ'��"�5[�,���`�_�F�xes�4���<�͘��H�j��Y��:7�(ן����)j����q
iM�R�2����.��x���W�H+r6ϋ���k�F����|�ߩp0����<�?p5������w�苃�Z�0����Jw�>S1�-�-�:�[?k[a��L��*�
+�)�ns�8����h����YՓ��\{���
����T�c
��c>=�|)$�yf��UJ)�-�/��4�]����/
�v���gNk��=�,�-��W���;�
�߿��M���ܲ�ɇW���8�����m�q�]�1+��_�{�y��u at d�Y��O����|��/x-���%�/?Ҭ���~��D�蔍�*�.�9�t���u��V����d^��1x�Ƶ����һM��4d�����~�k�$?s7�EU�>��u���f��]{�R{�9Se�D�O���$��=5���^��t�3K<��G�p�?x��ǎ=���?�aQ\�srB�څ�ƒkR�Yl-Dz��z��]�-sl���Oyn�������I�=��.kN��,�W��ן�[۳~6�H�6	����I)T2q��1��d�wx~SSu���)i���l�W�m�
�u�Y��j���C7񲢰�w�~!����G@�hjܷM���bK ~e@#
+endstream
+endobj
+4086 0 obj <<
+/Type /FontDescriptor
+/FontName /NOPBSI+CMSY5
+/Flags 4
+/FontBBox [21 -944 1448 791]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 101
+/XHeight 431
+/CharSet (/minus/prime)
+/FontFile 4085 0 R
+>> endobj
+4087 0 obj <<
+/Length1 787
+/Length2 883
+/Length3 0
+/Length 1423      
+/Filter /FlateDecode
+>>
+stream
+xڭR}4Ti
+k��Q�Gb�ǝL���
!��c̽3nƽ�Υ��LԢ�$'ꔥF��P>Z%%�Q'QZv�b��h�-��Ŷ�տ{���y���>��{-V�0�a<q�1�1!{��
��M��p%!�☛�D�dg�8	���ͳ�@�\���2%�J�H���jR��1�����QH
�C$�� \�"��	��R�?�C�9B�#0�A FE$�D$(FcM�cb
�a8N���G9e
+��LZ�"�cR%�1��Sg!��������qR��0f��dH_��T��G����H� �8��Li02���Ѹ��,�JQ�3&�"��2٫��*wG싒�( J���`�L+TzSFX^A!�G����+D12P)C ��x��>�TF� al&�
QBj}��:�
��QL8�5 at HB%�M��p�@�@�a�Ij
��Q1N�&����r*)T
M�$j���ـ�bq�۵�%#P�R�ȗ�uq�*�6v\@
.��r�����ȩE����T��@D��v\䐴�HeJ��
�-guY�cM%�;���;���:���BB�8�S�^o}��S�eH\Zr�g��ư�"��iAF"��� #�i�s?�-������$���_#z����t��'4�Ʌ�]B�k�t�,��ϴ63�u��뚵�H���Տ��5�h^OٽD�l��Aω��5���SG����L���r���7n�w��0>w�n
�2T���V�~
ceu��Eu���V��ڷ���|�mS���h����9\
^
>�ُ�O��C9��4N�*f�IU�}�Ȱ+U:�|}_0�5=
)Y�V�$�Ħ��j\�|�E��WkZ껰
����ڍ	�s#��.�������JLj��yt���
��]��
Xt:���[�Y�GZ���*���yh�G
x=��[^��^���v@�����)�
��{�:���
�
=nw���zm	�9�=tU�;��z�� /|מ��Z�����;��l{����~nVPZ�[�Z
����}{�����zx�A;�"{k�xel�ň&�e�F�ɛ���(�i�:��0�|韝'є����$Ff��jHz���5]�1�V�삧���wދJO8���M����{ۘ��nי[�L��6�"�y'�����7y�nL��
r	�ͼ�2h�Ǡw*}�z��V�Zݖ][��V�,E�
+[�:A�5��B����m�_���oR�
{2��X�3
qe�O,����
���]u��ei�GK���-{�F?�{=�q_5)��\5�tk��
��cz+����
��q�q����鷞��������u�g���0mմΗ�k\�<�d��
��4���Ə���t��w&n掙�ܹj�o
��ܴ+F�tg�?H�晛���g��a�L
�&L<��[�s
�?�5v�Y��5+��+�

:�7
-��
+endstream
+endobj
+4088 0 obj <<
+/Type /FontDescriptor
+/FontName /LUYYYY+CMSY7
+/Flags 4
+/FontBBox [-15 -951 1252 782]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 93
+/XHeight 431
+/CharSet (/asteriskmath/minus/prime)
+/FontFile 4087 0 R
+>> endobj
+4089 0 obj <<
+/Length1 749
+/Length2 740
+/Length3 0
+/Length 1259      
+/Filter /FlateDecode
+>>
+stream
+xڭ�}PG�E���?C�����|$w� �X	�+�BD���n	��
^���b��
+�8��RT��TQk����:�(0El��ҡ��|X���8�;�Ͼ�<��o�]�kx���d �М7*F@�P1"�T,�9��W�
T T.G�2U
P@�R��M@Ť�YJ��w�b��(�����8��|ׁH�� g�N"l;
  k��X����$@-E
$6 5�� ��e25�d�����<�b�#�
�3&
+$a
�I���ͱT�.
����BzM�������ѧ�r��
	Yz�u

e
�$����9\GJZ���]"F|d�e�($�)�H��� G�!M�E����PaXh��諎h�8Esk�) ��#5���3b)�C���F~��ŏ9k%M0$Ek�T�
p����o%��@:
+(��& M<�DL3
���d�D��
�"@b������7	
+bL��>��MQ�_����1�,
in��y��)>CM���2��ϓ�Ul=�yeqS�D�ó�S���k�+7�ȌHY�jW-W�{�~����]B��������
۾���'�s�F�̔Ո�"��ܽS^x.�U_޴�����(jخ�
7���n��M."�_���8�#b�ǂ�~���-v��fKO��
W�������<>��cs�8�^U�>�t�[�m���I�K�Bj��6��췴�Xp��%�w��Ʉ&d��Fi�_C��I�e���g����Q?��ǟ~�v�
X�dBf�n���"��
�Y
����X
�hK%wJ�i��v(a�|y�
8�Y�M�4�(.���
��\�t7�Z�[4G�
׮9��ٱsY9q�?��9(^�u>s&�]=�!��u����M����݈��w~�*���t�q��wb*������l� #O?��-�<����*λ=~v�>��X�f��'y��76��[���=ey���ZL=��f�C|�ܐnU�UNw
~̯T��#�7�V�ab�ۜ����څ5��
+oꌾ—x��`f�˩���=���K��3,n�=NS2,�
NG�*���`���2E�d`��5�xG����]�������]�)�_e(�|u��2$~��g�n��s��A�I
^Q8��8Ǭ̠kA‚Mv�J�Y
6yh񬒏�[��E��5'*���U����*��W=��L�s�"�q���;��5��Q撫+��_����LE>H+�r�h=� N����������Z�V���)!4^.�
�>\�ҟ�
��8�W�9*ZP
+endstream
+endobj
+4090 0 obj <<
+/Type /FontDescriptor
+/FontName /DCFFMU+CMSY8
+/Flags 4
+/FontBBox [-30 -955 1185 779]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 89
+/XHeight 431
+/CharSet (/section)
+/FontFile 4089 0 R
+>> endobj
+4091 0 obj <<
+/Length1 1436
+/Length2 10457
+/Length3 0
+/Length 11294     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX����qw��%�S��C)'@�/���
���;�@qww-V���������\ɇ�7k�{V��R�j���ٛ�d��X�l at A����
� d��@���������vR�N A P@� 2y}x�
+��
+yQh�������A��$>��-65�(;Y�l_5L�m ��`��;@������ u�#�2cCf`S'�	�l����'9;s{ ߿�f�����8��0��&#�դ����;�
d�®l�Z
��������q��Q6��G�_��֍m�6���ao���� ���@��N}��9%�����W圌m���v6  +������q��
�
d�
+v2���8��ٙ�������������4��l�U��vN��  ǟ�1��	v�q�N������'��*&mgjo�� p���!cw��C�J<   lgr��^
����;��x����
��Ͼ�� ���	��� ���.�� ���!>N ������!n ��z�T�C����US�?��`W�C���US��ص�C�Nj��?��Z���������r^�&赮���U��������Պ�_������������y�mv�;�5b�����S�u,�
,Ave����k�V�k���kg6�kk�y{m�/�������8����`
�����'�Z�u�`��|m��_���/|����
+8�������W�.��?�����/|���/�������+��
�����)^� �����i�
ym��_�k�7��
�z�A 7�)�✽�P�Urcp��t�d)<�#YjQ�XgP}����
�iB��
+;�
+\��t�P�nfγA�(�9��
��=��ǘ���xnz�� f8{��63t�bǡ��|��vݥ�J�ȗG|W2?�|�m��}c5Ōz7	E?�M1�}�
����}��b�0�Ǵ[�ߋĽ�S�+���J���"��9��7�� ӭ)u�d_���1)�F\�TS�����>�a�[MY���ES��J"f�l��iֻ���OΔݰ�Ǘ��wɓ�!�l�;3�����
Lp�|�F�1/>��d6�U��8���9��M��7
+
bf����
z�
c�(
+�Ig���Z��]��p2J)����z�
�Q�ٴ�=���z�D�	��.��Т$�
O|�[�h�T����Y��N�B>w�f�
N/�Qu���Q�n5���F
��+=��R`��dN�!��>78���y����+���B̧�Һ6�0s����D�c���X����ͤ
��SD�~�I�f�^�5��e�J
�񣌮"���6���gƏ
/��#��)K�p5B�y�������=�7-j�W,�Zz���Cy���&�RwAی֦�
�H�>�Z���cv���崝ͣ�A�7�R>_��Fh���2+�$�:�#�X�~�G��  ��5'J��H'{�DN�Gͥ�=��/�������#$�O�P�F�B���4��G��I��9�3S�����#$��;���a���BDmN5�-"
�LY/,+/~{=�Z�*P��/�ވ���h����@Hh��*4(����0H/ɔ�2C�j4��
���ew����IPd:1�yB��8�}z�������r��
��@�:y�*=�Z�S�G�O׺�/u(�Ι_�ϗ-Fާ'ӂ (�p�~}��H"�U�B5�	$ϋ�J��!�L:JaM:ۧ:��B�o1
7��.l�"�K"�I��F4r�+�����}	�(!/�uu�9���fٌ��v*a	��QC�b���9+<�A�!����U)��

Dm4����|���Q�����P�/� $n�.$[���_��
�փ�y0�M�4p)wƮ%�a����a��NÊ��x4�H��er��������*��Seα�@Q՗e
+d
Z�r���W��>��C'%����
󹿥������P�u8��­�?�9�B�n��~%�̛�@�k��f�鮄�
���9tOT�S-6��~\�\f�����b�J
G���|2j�6���N?S���X�<�d��Q"����/5��q8�������V:[��Y�Y?�WL�H�:�SzBϙ��H�4������kr{�/�(�uX'��_qI��ĄR�;��C���͙��{���
H�
���
1*a��L����P�W����
�&��ԃ<6��A�2
7�[��<P2\m�3�W����Xw�����m5}2N/�/d��
/�qZ!����.Q��j�(%��~H&�ޓ��*eU��*���
�4)Y�ǧ��e��p�vp��k9��|D�&�m�	���V��"��@�*��^u�ڌ
�_��j�F�v1#$�� ��'4��.�i
�|]\�|�!R�N/��Ks���(�;��<N0
�@�{�Wj�$ƔX/��֝\G���w�E�%!+��!#C	ٹ{� ��-"��s)�C
�
eOwǷ��n
���!D%$��6M�4�5z�X�㲹��^�{ǝ~�ӅH�Q8�J*ꁥtx�E��ŝ��d�e.j�B�>��U�
�&��������-��a
��4J�D����(�ю
�"��^\ڪZ�ca����;C5}�A��A�����흡
��O�\?1cՏG���|ku��ij
.���ǔ�5�@v��yx;��sa�����L�q�i��|��D8"~�]�ɨ�]ҿr}Y���׍�@���_�_9=**N�p��R�/��ȹQ�jZ+�\;&��U~�SEu'̮����L}=�qr�ď���9aGp�0i��x00�{!��(�P�n��'-g�^�d�_-?	��~�
)Z-Fu_��
���2N8+Y
(~W�j�M+U_��*ބ�R����
1�YJ�/r��9���!��a5�\��N͛{����S�O�W,5;;ִ#��
���Q����Jֵ�2�e�@��fD;������73��G
+�xAf2~(#AQ��b�
+��['��O�m�
�Q�2H�H�Q�ϧc����s՟����>
+!���I{�]-6
3
wm��1�qh�Y�^L6�܎�`R�V��T5��-]P�Lk+ȉG�.f�~����=ř>#>C���W�&c8X����Y at N����)��ML:��D�qe��kv�C\n�{��
�nU9Bx��
���&��}�S0��^
	51e��~���1���?
��E��QwM���Z�r��j�����۩���X�?���dw at U(l��Ɩ��Џ���KKY;/[���^s��,��ۢ�f�b�����96�%g
�ﺙ�0æ�Y�|��X�m�3�
0�+N���K�1�l
�<���#�fg(�I�ɽ��?�Lh{��cɔ8����
CX�-��C'Qi��<dǶ�m4��p���=dm{���"S���w�K����
� ~K��R]�·��f�@�F]����'��U%sL�����
�7���h�TS-���/�
ˢn����M7�?ٰ�ο ݹ�ڳ���V�ΊR��?'�������F�>�\�	��
���<������n����m���>U�o�%��?"�w����Z�y�yT�)��!@�ɗ�N�
�n��Q�DO�K h<��a��|��ۥ,=�ZP�JX��b;TƲ�,����
7,}H��
+��T����;2�m7!��:���獧([�M���Y�E�`���I�쀎^��Pq�Ϫ�Qg���H��a�VD�/�̫걸�
������$py>�9
��T1o�g�3�׺�^�@�W���7X'�LB�_�(Dc��B��3~�
���SY�z��;s�$�r�
ـ�ʚ|Y�8�ҽ�M��rbYvqY�Ƴ��&��d94��q�q��O�Ӕf�\�_�`7<��[���`����e<K
~���?7Ɏ��T��^I&�d/��Nl!ӺN�F���3
V�m�OS�ݛ������'H%�������-��֒#
����^v����i��j��i��\����wy ��
9�
�ή }c�5e; 6s��Y��	�牁�Q�
E�t�W��%���%+U
��̯U��v%-{��/?�fR���Ϟۓɉ��ު9J�[��
�
����Yܦ0?s5��Ӫ�#!�Z�{�[�n)q�8R��	�
F�N勍�uyԪ$���o˴�z��W����v�U񰾪�N?�a-ժ��"���W���)�j��7B>
Q��߂���J�yG�����!_�ﱺ��=��L?@]�R�}�N��Fs��w,T�M��*��f���4���A�=NP<���1�U��1���0�l�ou���m�N�C_>E��ؾ�8B���?Zi
GmQ���LY�u8����B�o�Fz����r��_|	K���i@��g�Wn�qc�9�Eѽ������p*����
��*^ur��D�-_�+:�n3�j�����E�K��ھ
5''�X0
�F at g]�U�g [...]
����y�e|N�zV��ܢzA~���'�#��	yA)f����~�n'AY�1l�^�OR	i��Ş�;Jat�y9=��}˚��x]\��YX�-�~
+���leE
+"�j���mR��J���M�@fp��$'XH��Un�M�P���`I�c��:��{� �4'��Q���\8�·z�?�!m�|U�.5K]�Q�4s��T����,�b1���4�N����"�����
�^ܱfje��U�1 ��E����	(
H�k��-eb|�B�&

��4����坨
�vx�VG L&����Қ�=�1��^>��v��\fͭbY��p�k�W�M_����Z7��j��E�r^Dp?����)2�e�R�[�3��sO<��2�6)]-� LE�Ēwp
f��h�Cv��v�=	$
+}LQ���t�$��
���CP&��)�W�^��~��y�eK�����ҳ5H-�u
]R�l8�!�-l�^��oy-�Z\4S�v&1�a:U�Ԉ51��ɝC�|�NG�p-�����E�e�����F�p��	���9�̌�Y@����ȱ��f��)l[�<&Z��W9���^�|�;����O���`w{�5O��-
������
�O
r�4���lpm���,�8��'JY��n�x}�%}��݆�i�'W7�/Q
){���~1�=��lr<5��S��|���|�O�)$���Ȧ�?
�2Y�5B��t�OJeB����Ҕ)�t����5�
y������CI]��C����pX��w�NKT5y�+
fEQ�,fTKŸ��x
���麢�Q(��o���#���D&�
�
+����t����I$$�	~g���
��F[�PӪ���"�2�e����O�2���Q����ܗ��'��=�c�tM��]B���
0�5��
L��
�%7E{�ȷ˺p�#��;T!G���r:Ͽ�f5�������
+�Hbʍ�F�(��,�x���#��񡥙k�"�m�Q�6�ȋ��;D�AR�}`�/B:�����¯�̦}���{3b��T`^�f���u���(ԇ�U~���2���^1���r�bQ�]{��u���T�V�=�_~(�a��_t�ښȴV��m[<"x�M�񡧧�1����1-O�H��"
R}�D{�FUQ;����ȉ����D�}�wmy=ʀ�
Snmq����	T_+����kS0�
���q�Kb��ڂOm�ˊ6Ue��.�i<��q��!��':��PQ{&3���W皯�u���1Z3�ŝv��Bg�
؇�@zR��"�sp�t���L�w2�=�c]�&�Lƛ�$�,V
+���bܱ>��!�&t6z��:P^swda�:i���%�OZ6
e��{,���_/�|�%����s%.��`��Q@����ܑC�K����?�M��?\Xdc
|��p5IE�Tv�n���Ʊ��hƇ��Mo{�~���	��+�l��J�{�>�@b"6���UE���YW��:y��qQ���K��OT�}�0\,��Tb"0G����r�����xS��t�o9�
!)T��eo�s�M.>�+W�Jz���g�
Y��ޯ� ��(/>��
�
	H+	G
�'��-ه^��F�"���p���g�JI�-S
q�}΢�D�oIUTe�߬U���/s.�b8����77��gs���jSI�-�+L	�,]��Az�Pd�M���Q
�L�N�$
R �M/�|n��QH�J���Z�UR�5�S���_2������ak��%��)����
+��5�!hiab��m�L`�͉y��o��=�tEM
�k�\�;�����|��
�I���'Y�''���Y�������|�H�~]��\���:P�A��2�d��1{�SN�ZmQi6%
�0-�5���)���>�^C��{�_�a�d^�S�~�u�i�T�TG(>�{�
��˷��Oydu�9�o��C5���3��q��F�>u��`P�56D�
���Ix�.ˇ/�
>����c�m��O{�o�UB�QM j޺}���w�(;����&v�YbI,�^��k���4��7���;)���c�r�´�b���cC�m'�������b WO<.���B
8@� �v!�$�$�.����3���^�f�Hž5��4h��a�+Ok�Ka�Qgꆧ���ke��ز��� )d7��˩j����t��Ժ���[ͽ=]G��Q9�Q+���2 ���SOx�PF�Xg7���,��6���K�pi��:f�N�b�L0�8�����
�R�v��Yv�d�ŭ
+��
��؇�eٕ�.PO�
*$!���u<�
z�5M,�Fs��p-���K6���]N����-�5�L�u�����/�?��}~��BBNJ���)S3.�����c[���@�$�/��lB.�nj
PX�L���>�ޟ�-���
��T�u2�����qJ�Z&��v��'��Fƛ��&q��^�8M��ܷݞ/���[���T1�S�p���wM�z��u���đ�d�[��)�F:�"��y�zT&Sɬ��B���G�v����KBӱ�OUW��m��:�
h|fH�f&��e���Y��J���{�ٷ7~<Ԕ�^C��5$�����@��PJ2
+U���cf�(�n. ;�}���n��Ȉ�W��/�B˥�^4�駩oĹ4�E{�X7G�&L9L	��.�,��
�����I?<�6������V����
��

@�t	LL��{��o͓_�.��'g@���[e�M�
*b�l�
��c6Hp�<��믜[���$>�uU���
���0f8��M9=��YE�>�-G���F�J�Dt;j��r�e�!�����O��#�v�v�4e�e�%1s������=��P�J��
+#�č����4� U�l'�C&/�<ȶ,����.gw{����t��eI	ZO�0���2g�β=9��ݟ}iZ�aF��)��]�V�	1L W��½N���5�>F�Z�2�m�G�IŴ�)�}�2k1L2l	
��8�oT6�P����R�=8�C������W(�-������{x��S�n���
����h˶k�#��Ձ�)x��D?�	d�	У�˺#��T(���Q�o&�nu��N
+d�[���X�)׳���W����]!�Yc� Q
������d�•”���w�.�px06$틃���o+�<L�.7�Oݵ���� ��ds���-��X����w~x��Ȏ/�d���C�&���T��U�p�~-+R�u�Y�)�S[��rȰ�INK��A�r�!9���S���W��3׍:%��-
X+�������"��2\��{�u���'�s񅂹�ַG���W�3xY��#{(��ϗ���9�2���6��j3��(8�Ư-|�S�+�ҿ�V6�q�Vu��o���K�� ��~>0�C������S�,L����� ���#~Ϣkw�^�wlBk����®�YX�Ui�
�g�i}��c]TeO�1���𤋮�ωY����g�`�cn\���0p+F�Y��B�[�JNQ'�O���U}nn�*�z����LŻ�م*}*��)��]٪�(�~
U
���T��R���Sw���PUm�I��RK�Y���L�Օ��v������If�p�ˋ5]G
��7��;�
+˟7;+�6q^��?ho_}힓���R�}f�;ʻ4$���2�1D*#L�H13����؍���m��TWD
�=f
U5�q�2�$F�����F��bʌP?n!Q�*��
>OǴ���w��ܖM7��/�g��z��7a��ɏ>�	��Hj�kd�|����a���H
��Cb�Fqg
���
+�`B��#R�7.�W	���S�-•%�t:ȧ
�$�S
a��-p�C���`�F�j-�
�
+a��
ĢKp	���~y'���

C�<���$�d-W����?.�
��
R��_��T��p.(>4��F}�_�+�B1��;�-&�e�Q�rI��ep��b��d��S5/2M��
+��
��m�*]G�K�+i����h��B���
��B�m�B܇�Ý��v���K�;e.���Ywn[^հ%�L�5�����&���
h�?���ժ���Ld����!���b�6 J6�C�Т�w��R�{cY3+�o[jhf�dg�fU�"���%-�p����S�
9��!�l�!��A�˾˪
Md�M�{�~�1Tb����7/��n�A_7�/����1��r��u
�3s��Z�
�_
d�G
���uP��M��s��8��=EM6r�s��/@�u�r6hw�Ia��%�N�R��=R휦�=\SS0c��(�� ��E�\���Lu��\����T�(Zvts��Byl�G��������/���q(�͹��h�go�ѝhv��_q�
��������⬵�a�Λ�$?��q��FQ
d
t <@"L�
�Y��ʨ�yx8u�)���;�2�YNֺ�����wL��Ԗ_�
+q�б#\�u-|��H�_��ě��]z��@��9�ܦM�V��~Nx)X��S��k.���K^@�&X3\��2IFw4^S�2|�M2H�V��I������;+��g���s��͒uв]9�tHO9��M�4��&�e
��t<�B@���b/���$b��Hn��Ah~:I����E�WG�����fL���ZNz5��
m5��n��Kㆧ��A�'���+_�h��w�T p������`
+0
q���gw�� ��.L�kY�9䜂�A�y����,P��y����t�e÷ő�
�T�d�a{S�*���
w�e�
�X�Y���ė�����{��)Pܾ� �.
����6�,ܐ2��T�@Z���b`q0�t4W�,�
+�����=�Xd�L�+'�������m�
�S�6j�v��2e�(eӥ6�0A�b�8�,�eT�H���;��1N��x7�_,�i>F�ȟy������Y��`�6�z3������F��A�9Z�p��r��l���k;
��H`T3�
�9U�Y��1���
+�}�ʺ
� 4���M�tz"M%P��8�|����=����|��oQ�g�W/�
+"?WPPR�.�L�	W g
mZ�}��Ɣ��C�@s!�����q�֮�Y�\tͪ���T�I�
+
�-oq�P�t)��5i}u�����=��r�F6[�g�q��!n���v9
�\�F߂���"۽D=���ude���#
}Q\��dž��]� =����"/�

����I� ��Rh�J�#m�h%xL�cf.$���q�e7�S6��m� ��A���k
ε�<���:�k}=c�$\�5��Mv�n?�K���z�Z�@�x�M���M͗�KU��9�fv�fq�)�Ƕi%��p�Ȋ��ز@�5(�E'�
�8���ώA�R+��N����!��&�y���Dĥzz�LSݙ੩��
��vZ-�}�1�|u���`CDd�Iy瘤I���
�쟽[�2,a/��[z
�s%r_Gi5RC#����a�P*'
1-.m�v���h?E2�]�X��
-Qi�:��
��G�6�N�����$���z]΁��V�S�6�fx�Tӟw�pv<�_iA_�������|�FQȰ��@�E^��,����#JE�?��c8��r���m��2o���y�}� 
+�.�LF�ڌxA����cҌA�
�����U��`�����o�B̗{�Ӏ�~���`9��x+�p	�\g$`���}`d��H�<�)��[ߒQ���!��8��K]@?�P�\w
���������ƍI��5*�Lq��'Nֻ���Y�(�@<;�f���a"w�lI��9�eX(���cp<��T�3e��uR���o�xf�����a%V�VR����&e5�ASh��Z�@��(
|.�M���h��ͩ�H��՝�f����
+��U+����8=�5emi��y����AD���#�>ba�%� |M1��/�
y�k�K}0I�
�����r����j޸@����)n�=&1Nj����E�\=x|�t�)�3�T�G����0\�H�^���S	Y�ѽY/��(Y�C���7�敫������{�}3CM�n=a�+��˰v1�s�{������>�$�=�͍Z��8N,۔[��	�UWh��p	��L!š�
+���|��Sě�4���o���T5-F|5!�ႛ{*x+s�����%�Ԙ�v�Qj�������!�3��{�ݯC�?/!SD�˸X3��I�
^1K�	��.��v`�H��Ae��
5�t3��&���s
y��\�ȟ=�7�fm�u�U���]�%�����)~�!Z*�4�:�E�O<���W�	�@w����Ơo�LΩj��������~����A��R�rx
E�-��ز��K�3cZ�v��K�Á�4ښ�g�?�R��
+endstream
+endobj
+4092 0 obj <<
+/Type /FontDescriptor
+/FontName /ZUZUQE+CMTI10
+/Flags 4
+/FontBBox [-163 -250 1146 969]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 68
+/XHeight 431
+/CharSet (/A/C/D/E/H/I/J/M/N/O/P/S/T/V/a/ampersand/b/c/comma/d/e/f/ff/five/g/h/hyphen/i/j/k/l/m/n/o/p/parenright/period/q/r/s/t/u/v/w/x/y)
+/FontFile 4091 0 R
+>> endobj
+4093 0 obj <<
+/Length1 1097
+/Length2 5697
+/Length3 0
+/Length 6380      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\�۷ǑnQ��G�Bf�#�Hw3

1CHHHI	H#J��"� %�H7H��(\������~�7�w�����ޛ󮎾��
���Fy
+@�C$M5� �&��T� `�H4J扐 P(��r  �D,&)*L�	(��|1HGO�G�g�8 �� �0�	�tD�^���\ }4
���ȹ� z�� �
�7��>)�!ក-��"�ӑ�

��+l�����7�qm
+�6	�-ڡQ.��
žTP
}���v��a�͕�\\�`���kJ�'sE��������� �h;��RcĿ�i"�^��̪y�\�p9��
�����+��PF� �t��pG�
���+�@��������!��d�hd���c�+�C�<
|� ����7_	������`�u����?��)��h;$�`
̗|�JHT� H�
�@�\;��B{^/�' أ1����( (�g�_$*���� ��� ��_���K�,���+m�&( �/A�`@��7� ���P���$�o�kQ�������kY���Z��o�\�~�k]�ox���� ����z����n�~�k]���Z��o[���
��%��G��
�B��?-
+���U��`(Ͽ���U��#�o'Ⴠ�N���RaNiUE�J�C� 挂����2��o�K�
�T Xo��rB��J��(��]d��{��/>y�����B�h�ma�ە��z��U��ۊ[5��4�ɂ�g�����<��h����_G��A��Sd�v
������SF
	��;*�|�ԛ.:�'ԗS
�s#γИlM���s���}��v��l���'z:xG3�MD7����
/�U��4&r7����s��n��
��et
/_������q����M�
����
��W2��`Klt
�Vc7
	s�r����.X
~R���eP�7c59o]�sf���j㋽w�ũvh�[$$U����>�	� R{�M�F�O�qX��͹1�����
U�j�[�5�'ƥʱ��
l:�pںx��M�&��b#t>6�N5���b�]��f��;k9��s������
�w�u3�<V��?���m����=��Y"�	��N�hR�8e& �F =X�k���,j �=�
A���Y!j�ָG�i�˓� �����ё�跃+#��AqAI�������u�|l�jT�^0�
Q�W�u���Yn��LN�‡=nR�
�x,��Α��/߈�ڍ�$�͓d��"���OE�+2"œi�G�SK*"�7D�z�8.t�}k���(�W��d�vn�r�څ��T��J��Ց��L�z�?&^N��Z�]m�(�7J������}uG���;V6t���E��G#�O�
0~>TA��Q^0�(�I�D��/�a*u�#�����,-P��iZM� ��_�?�i���
2
+�rl���&>Ό�	�c�/�'VHH2���ڟZ5��d
� �xJ
^N~�
Giő8AX��`�(��
G�0�X@��¦!��Z/U��8��b�J��
Vb�{6,�-�=�%�߄�dc�
$?��\�I5�|�q���kW^Fa峾�?�l�g�y%�> �����XUBQ,�!:m7�L���B5Ēv]U=����,BԈH�4�L0�[��-����ol���M��
�G�
�T"���`��%��ϰ
ydy`�W��
R�F�$���#��ԏ(�,	hioz��k�!m�&1�\
+��۩K
��ʩC��N
��1+<o���K�-�V��KR]а9?Pn�>+QL_��Hyk�z�jЬV��꒻z�:�������w��
+d�=M��� yFwԬ�I�[Iţ�N���'��#ݕû��Z��b<�C(s谄aAg^mX��`t)�w�ۉ�K<z. $��
+dN�Wn��Kwm���G��
E�3��Q��o��mTo1��Q���Ƌ�|�P�  �N�GC����HQو��D���A�i���^&_tՏ1m?�-,n^�6ܑ_�b%�R��3�c���>��
���
�[m�D����ލ���Kv�ܢ@�[/���)�SQ����
��3i���a(�!Uc���=���4(
�
#Q)�<��a�f�tb!>�$ _̦P�,\ٳ�P�22
�:J9
�|r�
+.��*�H�����N�P�E)!{�7C���*o��ъ�æU/����j��!�#�a��	\���v����c���9�謟��J���C8K��n�F8�������
�77Z5-�7��\�\TP'k�q��UN%\v� MM�%�"�T�T:�ų��AT2������e^�b&YIa���jM��ɸ[��j�����9�����j�ݙEr#��\��
��)x��Ԓ}�����U�z�O�D���::�jo���镠�R%����X�8���F
��h��<Ԉ	f�2�u�u��δp����8�$n�ү���1���Q��K�A��
򜒡y�"&77ts�����,�=��6���"�9i�#}6��U���$j"���Rғ�'n�{ v������(�^��^?6�4U��亰��j��뢏a'�լ�K��%X��P�*������<3�g�IM�!���)&�3��)�����
�*C��vh@��[�|[�FC��
��l/Sy��'1,b�����C6����zp:x���N�6aD [...]
�r���Xr��#�-k^�?
&�{7�&��[�(��,��)*|3�����dߗ�6�Vp�j���3c3�-��\_�
3��B>�P
+��)C&kvm�xf�,.Ic�E� ��ա����=�:�Tu8\�ꚤ9��l�D2�kpj�h
+;��s��4�Ѵ�	Y[�tE������\<zoh��9�ⴏ���U-A4��|���9%��\��œ���a�Z��5Š��|���'kX�w�\� 0�4X��w���!���
�{h��c0۰�h�y{�˹���R�x��
�^�7���%lB$�-AolR 0��B��N�����3��YWB+��;��-�,u���.�(�[*���o��g
{d랬�7Ͻ�
"�i��A�ᵘ�����=���
+�+g�B;�93��T��0��l@ͳbg�Z���M=J�h������l6�ܞ�J(
��(oI��� >9I�v|8i�/�Q
�!�]�a�
+oϜ����"�A]`��:�
&NJ��fҬ�������euO<CN���}��<<�Y�X�pAG)���}�
�
ʓE�,m�-p�2/Y�U��޴�;�^��]�y�,��� 7���$����;�LS��^��l�J����%�qѻ�4�0����}^��0I~c�`q2E�u����I��"�z'�՟~��a���֠;�OV`ė��@垾K���T�
�%l�p	$ěQ�k����Y��6ކ�=����\oz�6���$.��la����dD�HE��[���
 �x����Pa0D��my����/sb}��[e������������"Ŝ�Lv�F,�%���6C�P����w{/�"��m�q;�`���*��X� g�6
+��`�(,�%l��
+r��}W/�Ťwux��
C�&"�� �0X�i�p;���9�4N�B3u3�T�5Z��Z�0GV"�ĕت��j�y�� � Vw[�
)����ӥ1 �N�(�TW<
�C
>X��J>�#�H�Q��%�\�Z3
o9�R{@7ߔ���l�;�j��7��H�=�JF��.�S
ɁT*���HO0��s8�P�^ł�.Ō�'�<��D!Z�H����RgI6���#�fW��Ƽ�݁�4�K��.�vT:C&[B)LW���Ɲ����w��a�o�A�Q'��
�(�Aw�\��T�\�uQɼUǥ�,��K�7[J哕��^-���VK��e�C�����
+)-S�뚼�&т�g*��F.��~VjI������
����ߠ��x$td?t�M΢���I�5�r��;h�4O<���=��x�xs���Z����@�
+bUr[�!cpTᘃ��%�UJȗ�*h{�\�g�
Z"=Z�ʔ��^��s
�M
r
>٬��
����(�m��C�W|�.Mz��]������_n�=�;��r����;��O�M
U��I�g�	sj��J=+�1.Mk _��La3���-V^�[��6�J��C8�\�aFG�Aj��v��O�2�B.�8����z��o�������&�� �\��q�b��g{*�����:<ک)�Ҟ��1Y<�\��W�*C��bg9�/ڸ8�

�3
�µ��Jc]���<B�Jc�
�S"���ұ{"��T
�������OaZ���ʦi����g%V��1��=f�]��#G;�zfG�/���2���jh at 1<
<��G���Y�v��E�xI�vE��]c]�T�Bw�'
/�͓�Ռw%Է�y���0dwԨ�e6���5������0
�\��AJz퉶��d��)��O��u��i��i�م�1�4:I�٧�M
~m#��C��T[�,�U›�%G���������؎s�f�V~-��� � �s�
+��Ţ}�o�%�%#�&3�Җ��1�+ܟ*� �,��QR�W�savV*�f|�y��BQ�[�a�]O�r�x�	�:��8���l�ٕy�br�L��h���������2%�(j7��#�|E�;�&I��2zR9e��Q,�n*�Ĕ�B�#�b�H3��@h��r�ɣ����[���[X9���<��2��w3���/�в�=�2�b��F�=,l�R��x���Oԅ�=�X���Z#
�l�]U��7e����ٱ_�]h�X[���LV���_imvbOL^��
Yv_T?�|�o�}�}�s<>c�Χ+)H��s�p6�v������燀
'����B�>"��&�N�/����J�h��o���2�'m ���
G����X
�i�o��=.n��v2&���>�<up���9h�9�K=?K�$S��~i��<���4d��
���y�����4nj{�~�}�7~��u���;�%��N�v<�Q�2�>�u?�|
�d Q6HA�)��;���û��F?��\V��lNq\I�
k�؛)ϳ*�gC'?g
�C:��Q�=]�f^�J۲��h&�)"�E�
L Dm��i�mp���I&&rA�?ba�	� ��I��Y���
��Rf1��[�'5��_h�� a��� 9߃��
Ggcly
M�Q�^�~�O�U�|
ˮ��-w=����
R�~h at rj�v�V3�
+v�&��
�K-Ds�LU$� �L���3{�������۴�L���#�T*#�O?���)O�����
K�>x�
��_��xJ�n'�{�Q�}��*���s���b�N�(	K�,��S<�fɽ��
G���
�%�L:�\&����
�
�:7�R�M4ă.��!���5�/c7�U�uR�\��ʭ������f'XĎ��`j��Џ�
�, f�01�lmENG�)���In�z{����~���/�4B�nhCU?�ʜ*M�����h&e�(
+��K����2��2Lk+�
tM�<��m�L���G��EEj
�+��L`
+��L���@��<�Z�dѻ���GH�~���4jѳI�,�;/8룛�?Y��a�����y�Z��1��
�ֆ�
ɚ�̨�#wN��������Χ@M1�h�a�3�O���������G��ޭ��<{�5ˠ�n
l2{�Y��\����8�V����VR�)�/�v�C���3�ȋQf
.�wOm��������	��
!+Ԁ���!
�geI���2}�����[$���7���"��1��&�
+�������ݓ�Iw��¿�[��%\���1o�v�u�܈�3
��D��s��b���'�6�\�^�3������ߋ
+ܒ/U`����x�<��rJ��Kyݐ6�yCHQz�+�z5
,
"�&�*F�`S��q���B��y�v4^��6N�|��5�]j���^��\C��R����*B�8?J�͕�f�{�3n���(O�[�J@�9�ʍa���yǔ�,�W|O
+J\��4J����D���qU�I�i��w#{+���
+�'�{����SH��ߵ��@���h���W�R�
+}��V}w���nXN��AqwgS�"��Z��&+����R�Ū��jq�B]^�|�9҆��
rM
+endstream
+endobj
+4094 0 obj <<
+/Type /FontDescriptor
+/FontName /GEWDVW+CMTI12
+/Flags 4
+/FontBBox [-36 -251 1103 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 63
+/XHeight 431
+/CharSet (/A/C/L/N/S/a/b/c/d/e/f/fi/g/i/l/m/n/o/p/r/t/u/v/w/y)
+/FontFile 4093 0 R
+>> endobj
+4095 0 obj <<
+/Length1 2105
+/Length2 13859
+/Length3 0
+/Length 15000     
+/Filter /FlateDecode
+>>
+stream
+xڭ�c|�ݶ�
6����m���ضm���ƶm�1����{�sv{����Y����9�
c�k^��H^�V����X��Ɖ����
 ,���� `�c`�%%v0�w2���w2�0rr2�
 Ll F.&�� lk��`nj����lj
 hm�`n�o��w23��0Է(��;���� ��D8�
�
\���`F�N cSsX��$lLl��69����#
+@�/LJ �����
`dlK/k
�f
d��뿓�9[Y��[���_�����ͭ���������� ckd�`�߮�����162w���U	'}+sCAS+c ÿM�b�n�F��N�f 'g���m���8���k(R���M�ע������������/��G��`��d Η����/��*&jchkdnc
+`be�;8���P�<�6F�n c7 0=���0 ��7�����
ec�
�c��b�
�Q� z�?�@/�Gq�E��� �b#���������
�^��H�Q@�?
+�"�GYd�( ���E���(�Q@�?
+Ȣ�GY��( ��d��GYT�( ��dQ����h�Q�8��(f`���
�Q������ 	�
������O �����Z:Z�;��������A�������/3�����(�'	�͖�N�ǟ��?��
+ 6f��
+$2����g��bm��AF`�FI`I�?�#5�?��Y�w^B����	�������e[g���.�2�M��A��v��
p<f�vf�6y m�I ��_���I�$��[�2vt�k
87�?x
��)�
+�ecn�#f`igk�.Xӿ��w3��h`Nۿ�����Yְ�w0��?;���?�����@�!44��˕�_6sۿ�%p�vV�5����%�c�kʌ�F�8��
�����a�����ѳ�8/��T���1g��!e6�d�`�י 6��j�W 0��c
��
�


m
�� p]��@`׿
"`R��$���_8}�?��L
��&�_
BB�n��, Z&�^�33�+���f�� �%��t�/���&��7�����!�ʒ�!w�EJSH��h�L$��is�l}�|'\��8P��1){��:���t4��B�W\Lj/�I�
�������t�V\��t�_v���H�M
�g��rs�㥉ꅃY�C�y�"ʇP�D ��.
�Al�jb�V*��ud�D�ȩ��a,��ȉ�Ӂ>��-�kW�
Ψ�й	� O��"���6O[��bslh��>mDi� @ꋻ�I
2�zӪ"�lV�V�gv��j{�A^wa
�&���)�f8
Uϡ��!N�D�+d�-
�+Ń�~��b%�gȝSj���4�x|�KM4"7c%�t�4� �y��h*6D�Eze�5�$��?�v���V3�v��A�L���,������P䝒�`��PL�f�
+Yz
�X�m�+%��
C��r��R
���g���&~��C�r�1��B@)��dX��(�w�}�F�ۮ�ޛ�:r�Y�+�Ms��f�cYᅆ����/����}
%�@��g����E@=ch	�:��o���Һ��C��x������3�ܦg�ʷխ�
r�^����v�:��Mt3f���۬?�5N�m��,�����"�\[�3�����<
v�<�!b��8À9m��p��Qru�ݠeAr��@S��L�+��g�>�Z���<"�S�\�;'�vG�N1�S}�+/��eQ��2�!ml'¢wۨn=R�	rQ�n�1����"��P�s)
��=9
�����
���;0�
W��zD�����*��
�8�R�
�e�OD��
�?[��U�K��W�%9��"$��
+jFn�3
+٩wO$�ڜ�~n���6��%"G�+o�W��O�c�+w�!�u�Y�p���
�QJ�OՒ�'�q�����a�]�C��H'�Tڛ�����7K_8`y�\Ekq��$�sy/�$%'ꌙ��}����&�pF���
�`�j�T��+|���LZ���e�6�o�_k^�l���r�"A�m"ϕYH䪲z���
+ܟ�p����:��U�=`�
+��<�u�\H-�
�:�F�ʖN�Gk�B.��7�A�﨡��ڮ�0���ש?������R��^*ɤ��Mc�w��L�
�Dgh�dc|3�twA���~Hܶ���v���8ݺ*:9p��,t]5ͮ��A9��M9P�J����V������r*]z����tٴ�X� ��nY+�aS�]
WJ+)v<*s�Iz��t ~����r
�%)�TM�j�t���KMt���z��ָL�I���s-{��
߱�f��'���y��s	�E1��.�v�������l��
Q�����C#��#,;�k^A
�����d;���O�#�3
+J�rh�z�h���EI�
��
��	�e�l)6^9A&/�Ze��j�H&5�
=-
���w
�Z���
)�­�5
/�L]�w^��"�����'�\�P|��$a�~��T�`�;�G�H/�>�;*�}�J�C�_��ԛ8���t�
+�(A.�
5�ǵB��f��]�	�Swx
�N����~ަ�V��<0��Fk7H�a�z�,���o��c�쿭9X�"���>঑�_o�"�\-)�����3�o5�% ��caZ�K�F\���2�a��c��U�p�0���}���,�MtWЖh5/��h���e�L�H$�f�0�޲%�"&�o�gC�>
=G.�>#
K!c�(YBԂc�E�*
+�.�y��wC��g��.Sݻ�@�KE�v4�8��V]���_��D6�Zu���?c�3cv~���1����+^A��Ll����vb�
`��cE(q�>)T
�
��?UX���-3_�N<4
Ѩ.άA��
�-��
�	����⑔����.Yi��X}a0��)�2q�Uy�|���p���
U^�N�����/�lϢ;
�C�\�2*q~	
FlA�N�����L�h��`�ܷ��P�2m-ԝ9LI!��=h�?�^�Z��`�к�i��Me��
O�f��s0Z%~~F�$NI�A�ȏ����x
+⾂6kG�DXMT��Ie�d�5�
�;?J��Bl�Y ۻ+F��Q
~�r��4���L��_���Z?�C����q~��/NJVy1��:c�̧���$�X,b��� 
�/�qcL�K\�Y��)�0�pP�H�
+�ob������ZM���)D
���
ws���_1��o����{�3���r�|��9ۚx_�#����M`2k�1�/V��
s�t�
i�X͎�����؃�r��IP�6���yR2O�#�����>��C�fc�OG
]��u��5��f�M�8o0`+�
ϔv�4C���I��Vy�g�RB�؀ͨ�Q�N�Sݙ(�<�\µ���Sq��5��ӈQ�Um_פFa�3�Q����
�r�� ���Tv�'�ژ0
sɤ*8�t{�
�O��y��JĎr�'�_b_vZ��'���+"�1&���ZM 15��x������MM�Y�%�7��Ъ���s���|��/8U���
�0�,̌KY�|�
]T9�1��`;oߌh���CA�����-}�gc����~��w��0�@~h����#RU��U�}N��vV�����m[1���	�^�/
��]�[ qXJ�ꥇ�2bk��1�1��o�٥��D OU'�'�h�||��O���Wr[��>��_K��K�読�h��~�����l�M����孔
C�z`�ƹ��'huG`u�Na
DY~���1ZdX^w�[/�4�oA�O���8g;�Z˵���c�>�&�`�U}�e���ލ��(�o��U4�E�^�݊�?�������\':���\��R�"D�hޜjyE5��I |���ܒz�6���.!8
7�Tf����m�dV
 2y��h(�Mc�G�opG�Z�
�j.��2cW��(�
+r��d�|�&�Z���C ���Zx����CF%���#W���=\�z�6�
+}�}����A�2W
��;F�Cb�@��)��@�Q']��
�
+��M��
tK��y$mzv��{���4�*^�Ҍh��+�'+�ٯ�v�Ή�
���b3��<x�q+oY�C[�V���W.�`1������M��Zť:�2��d��!Kc�I�����G���{9����]�[MoT)��t��W
�/�
+�|�Lc��Lp����dP3�tq}��E���F�"JIZ��
Z��V�)���ﶃi�����/�KQ��
:���8&�hRnn�������1�
�Xq{��΃�Y�2��~�k
,�/�3&h}�9�x�
^+��	�l ���e�xP�p��$�'�5�2�*���M��Z"�[\a��� �& �W�P(�|�j�P������Ӌf�6���5Z>�<\

������Y��Q�g�[���1��I��fL��1X��
�8�`�w��&�=�Z%���L�ȓ
�{&ꚷ��/��̔~M�B�6�_�����g�(?�������r-vW���[u���a
�a�p���Q&y�5��ϒ5a�o1�|<k����Q(ѵ'h�K|�0�Ȉbc�^']z�1Z��]�v�"
+�5�Na�
+��wHⱂ�3�DZ�G`�Ȝ�"Br^������+f��� f7"��?�����,*�
Z�3֯
���	�-BRM�OUK�h}����7K���\B�C
+�-w�s�`;�䬲\�>\��5��YXz(8��=-��d�	���lcy|q~qh=:��%8��)�ī8t�P�r+wΓR�!s��-.�0��mc���kq�L�+5�o=T5߽�1�_�=
+#rË́��I�>�d�B�G_ɴ#(��h���rN�|��
3\JQ���,x��Q;U�&��Q�0�:T���|�7��Rl~F�~M�7L�����W {?�&��x���
G�}x5G��/�=?Q�|z>��SY.�}�����Q�JE���%��6P���ά#lG��нX,�:�f�f�i��Jv�<�3r4
+G���&Ө9An=f��Dpax��r0�#e�)��ڏ �X���6��F � ���o{S��'�=(�Ә��皼�	,
�O�`|��%p_GbG�P�B}G��k�t�w�v�Ӗ�p^xeC�&j�N�o�%"�a���0!�F�y���
X�I�(��RjajoX��n^ro�p�\Ɗ�B� Ħ�;�W�60���Ģ��n(e���(>���E̠�op�u��)��"����.�z�'�i�/�uL5g��v
7D��������J�q�?J��
��NN���T�d
{�`�����C�t�2�s��c:[
  �OC~�*�A0�2P�K�K�k��uc�!�>���4Q��<!7!�?�
�6
���w�p~#9�-ѠG��UE(E���X���t� ѨsGh@�~���5/
����c������ۻ�`~���~�C�6 ���:���A}��S�v	��J|8�?�H�NC
�X��9�
����,��QGS��+L���
�ˇ�#��`�(�6�7�B�W'��ډTYX��ǚ�&:2~CP�so��*R|��1(#N�=�Þ����)�ђ8A�cM��U�e��ZX�
Eg�!+�<��VT>��j Z�c�x�bBzJ�K��H�ɚa�BGA��@�o���C�<^���1 �qcX�|�H��ZL$�y�o��;)Y�"�Sà�Eq�������P�sz�)�[M`��*�琠V\�����&�`d.���lB�*ݥ�~��,ֶ&NG��T��+�$���5p��+0��؇����ZF-S��P�ϋ?�Dv�?
��~�s���0Ap�
Iw���M��q/����>��
��j�D��X"<;1��	�L���OA&�GU���л�
%��5й �ܯ"۪P�Ҵ+���t�+!`^���9ZT�'��'P]
�PLp�@[��ࠀ�9+�,�hD��Û��
�;�U��*
�o:�5
�)܎ֹQ>r�\�Y��E$�y�u/V��g�g��	��_���z�O�&L�'���W׵�,��WΚ��`��b�Ш��}
_т}3
�[��j H�����U�9�P>�����.�v�n5��bj���OQ��(�7�E��t릩
�,'��<*�19$��n�D�� �����R�l��,�pu�\BY����ڀ��l�2,��s��OŦ�����7��B����9�ٺ��
g��Bo���]�k�JKE:|-�v�q���iۋ����1&>���3�5��(�z9�Wg�p����}ta�|P��.���ד���xs,#�B���
�)~_�߅wy���&�����M�;3[���T���Ι�(-�Ō�m�6��W�m��R�em#��'f�@�w�����,M�Nb���Qh}�mt5E-i7��r-��?g��`P��rcr��WۈԾ�#T0P��v�'Ԥf�Wyڎ/����+�#�σ"x���Q'e�;��Z���X�rq'�ܪi� ���0hI>�#됧B�p	}'�u��ߵ��Hp�	
P����-�mF.]�
�%�^)����9��d�q+.���
��rD
sU���/�z1F�T=���٨5;*$�P���[>ɑ�p?{C/��\G`W�u)2F�U”�
�?�*�c�t(��ez<Hh�X^e~��$���|~(֔�B
��x���
��}iA�~������#v����38�#�!��	� E�Q�`������L�� [...]
-��2*nh{�Jt��-I�wZf2�E7�_�
� �+{o��"��w6�	w��J�|�b
jǃ����n����

�q��2
��a9D'pPΎC�\Fֹ�3�<~f����ٰ��&K��4C��~ӈGb0CM��t4�{��ɠ��"alk�
VƮ--�R}��:�sh�)��k[^0�$8]_3�>��M�
_�'P
q����
��^Ӷ+|�� ��
� �9L��o���y&���z���c������c�w`D8U�
�5���S
y׌+��lw�t��.�����
=�
�G�'�I�R��	n
6�wYy��bXV#6�ŞI,:���T)sw�SW�5K�)�������.*;�(r>3�:C���Xd�x���>/7�T-U:I�����+”-�S{3��H�o�/���hU�qY�5��2�C���K��e�MwS�Eʭ\�잣�}�*�����.�6
��G�s7I

��N��oeH�N\'C����P�j`e~.d�pE�)
+��8R�HQ=�0��6]�Oҷ+E�@��<F�Lir ��jܞ2F���d���
o
)�%��wW]
�pb*�3e|��y�ҕ��O/FWy$
��mxnm�]w�
�
��MQ��[~`��֚�i
�GӨ:l��
�����N�S�#�H�5�ijƲv�)���zٍ�~#ߗx�x�BG�y�>A�y5w
�M�؋Ƕ9&+yKc�WJ���2�]HW3�R�ԜY�ϛ��f�%�q
Z`���0� 4�4E�V�Z1ĉ��p��^�)l��kլ�0�\9Ý�����C�j=i���5�K��p�'��D4���g��`��
+��=�
��t�
n1��
͖�Rȷ�F�(�����Xɍ@p����uC
d�k����g�̌%�R�7�N>�="..�aϣ�������c�����
߈t�{��f]�;�•����HS���bFLd�,tR��4e��;�
Xxqm
6}�a�3�4�t�����>�@���pF�+��t��=���U�RG��M�E 0��7��{P��r�`d��No�rG&7�O6������-�M�"��<7�e�B�J
ItXs�)
�{,/A�2#�m���[��Mq�Hb��h���w�I�������Y���QCW�tN�w�W�å v
�`��rz4!��ϕ%�X,
�|V��8,+֯g����A3zc�/��ˣ�T�H[��6����#e���������j,�
�!Ӥ
�R0b�L��k v/���>n��d�����t 9
�sb��0n
B�#|�����<b�'���4o�u�>��0w���k�%[D�A���g��)���Єs&L7f{��9�#"�(h
O���:���V��c�ט`	��IE����i�
d4@�l�_�GN\ӂkfI/[	.�%�׷V�{�sK콹�-��w>�>?Q�_��F��
+ے
�A��$�îk�����EC����3N
re��c���Mt�׵�9�4�m��5�O�ݫKZ,]e�`EQ�a@�Wm~�9XȎb�ay�J�.]j?��썴���.��q���ElM2�ZY"W�KQ�&����a�K�Eݹrd nU�1�h���6;��"uk�z�ٛ�� q������J��C��j�	-mD���9l�'��5��	�o/����:\w�(A9O�kz��t�%�&���3�2�W��z]J��Q3R�
�������Q�������qlt"�FƗ(�(����0�V�F���*c�� .|]#�a�;�G��]��!4GB�j����61�l��:�VZ抎㶤�Ι�#��2-�L"�>��l+˷{�{Y�py>����;�%q���Cr��U�/��.�615��L�|˵����0]�
6�C�L�,�w?
+��_<|��HF$!�L
��
�I�jP.ݳA7FY�ZU��<fzS�d^��w
�H?$��9�(��"��$�D�X.��Q���	&
�'�
]��e���)?@%Ddk��1N����3�h\�<�;�����>{M����AR?X�>ۿ=
+�:n�	�Q�7Q�TQ2@	'jK{.��-9��Q�
'I at _ON��+������)��0{�
�:]ƭ�=vi�=H��
�f�
�%_�1:f�r-*'��x{�~�
�qLD��>K�:z9D�3FL�[K�}���IqؽZ�v0�g���ϼ���^3	cKr�Jو}>�㍖�0׿�~�@�n�W���|<am�]
rt�$
n�ݑVuf!C�
v9�L�E�`�`
鱻'�5lh@�֩��<QSi���I�&P�5�KJ��6fտOs����er�ۇ�&4�=q.%����$��
+����;c�
��2ݶ���L�-��{�`faX`
;���B��"^R���'�J�9a��g{��د�@���DM��c++M���h9����$��l����z'�ێ`�z�^��^E$�4¡fi�/�N)�ppW�b�K������ئ���-���M�.��P
�Ɲڱ�K
XVO�٩�d�R�Sz�MC'�6CՃ���Z���S>�	BI(��,�q؜!(q�7U���|	���"3!��􃕺� ՜��/c�m���L�S����z�,}v�R
+�0�c�~�\����z��A��m�#�'���')�$���l�o��i3�iN�Qj,I8�S���\�
�/�-}
\��B�������K���fb�ľJ�t��9�.0�����M��%���K},�ry�����k�p]]��Wc�`�;e�%m���[L��>L�^��g<��xOK
�[�T�Ԫ���tg������/���<[�ZF�$����,42ϖ�V~�8�dώ�i��(���Ie��aMG
3a���0��oK����ZI�q�7]r?d;��
+�yS��5��٭��H{�al����R7�|4		AA�4aNb�<eRo�
��F��=��/��t��iAV��!��Z��
��1�
+���;淐
]=�y�?�t�:�נ5k
�1�p�B�Wr��)�O�Z4��/�\�"�T�s�G���
�;Ĥ�R������u�ܮn��c��0�1Ϥ�Tt���7�� �ڃMotc�ܛr�%�;�p��~�-R�f�\�1*C��T�
+����O�J���
^�
4{��:��A�v�|
#&�
�Z�H�g
һ����{
�i���7�U�M+��|�d�	u{�:���$��߅�m =���=�,�ԏ�4%yr�.�5�F�<�NW���
�nh��ˉ�KIFu��Gd��bة�(J^Y.�Q�}.�����b��Vc�(���
�����bs��)��C�Sf���>��|۩+Wxr�|�g��4���Lg"dԃ���q�0c�KU�`�=����Q3�:��d�Вk�!>
�{��
<W�W��~r!�&J҈\G�K`�%��r��Km?mdx�@�����d^����..>�f���'�ֹ��;���<��Wp�)�yڲc&�S>�<�b�4u����AAB8���P䱶U��
=Y�״5
s�eI�&g�m�iQݞ�fݡq?��h��]�`V(�j�N�<����� }�_��[�)�´�eo{��k��ab�î�Y�{*S D at n�
�����u���=I��`�"}�q'�+�����Jb
�<
䤁�$º2Hd��`�&�,=�
tZ]�����S�ۙ:�����33s�R4
Uv]8�p9!8����K�z���!��O`��K?�&��x�@+��\@-�-04��
��
+0s�Q�z����!���҄�ߦO�"��a��:!�Cu��5db����Fx/��k�)�i�W '�K�Ә{��_"*�kT�o5��
\��D��ސ?�J޽��%�|(&`�giEd�4|<'_Ve��W6����To�cP	k4�thDp����Rz�����s|(�%r
+'HՉ�s6������Z�)�@���p�h��+`�00������h�?kz!8��K���Qل�@[��

�M5L�p��k�W
�-Ĵ7m(�
�,�߼�A��0r�{ h\@Bʦ̤��n�de����q�2/x��P�j�`�����o��nzH�d%�j���[��c�9|
R�����yS���@Z���4���z���^^_҄�c�C��_�����+?�W.[
�U�n�y��m{C�|^k�
k�pK�7e���)�S[z�@�I�+Ă".���;Hi�C�#J��ob�K����
B[L��e@��]��A���2���"�~�#��� +D��Y�m1�����&�A�R1"e�~6O�-�o�S> wsM��p_G{�i]��1̔�4bEOI��>��/+R>�Wf�Po4[�x	��s�
/�^gKv�/V=:CA7(��T.�H�Ja��q�y?
���S����X�A���v���*�
Rn٤�{�҅�a�,���&���U
���:�3X�fԤ�Rz���jղ�n[
R
�z�p[��6}G�<���*r��7j��x
#)��nTSt(}��`�-���a`�
e�M��Y�Zs�+�t������+nkR` �U���6|E֪����0ІJI3�a{��	[j�
yV`9��Ǒ�Ju�Z�V��"F&��G�)�JȻ�畻�\�Em�uS�E�q/H.xƱ���q���a37��]�6S�ge�_KRL�
��k�yI��9�7|�
,��Wh�
�6�����v�wCk
��OF�.GO6v�n�'>nS=��"�q���n_<~�^�7-�����TQ9��
�7͛j���0|Ʃ^{�ɥƖ� ���Z��0�ϱ{ڿ�CQ�	x��c���Uf�Y�[ӊ"]m#���]�E��D����?$���� �u��m+
(~'ɕ�"��
Jw�g���6
+�
+��A^�Y}TEbx��ԭ]R�+
��9{,Y���#sI�V�dž1�#�����&�S�8�CNr��9>#���
��E��+�}΢}����œ���[��d��߁�؈/i����^ȺL�	vD�6d���ȧfv 
�
}x �\�,�Cp<a��֔�d�V��P_q~7e�1؛��֤l�1qh���1�PǷ�!՗r�.)
�*c��+I����\�f~GN}�L���V���8z΋�p�

+��(
���͝�i�y	���'�t��C ��
�1��2�i��_8pT�m��D3�1��i<�=��.�gC8�
�Q:�7�;L{�nHE	�@�m�̶��I�i�-D��wGk����y`�g�
�
��X
��H㧓7���nY���WM�68��{s
��pv�ɦ%�e�I
D>�U��T�#PI��Aa\
L�N�2�$Eԥu�C��"�ץ�;`��OJ}���צ=��f{��4�}�����
#�Q0���ű�[9��t0 9W�������	i����o�Q�0�U�
`e<j��Q
+C�$a�A���-_�`g�3�Ta�j"vRrZ���}�}]�����25�ON0�{�Q}��p��G�>�R�R���=�BX"��n-Na����
h���,��>�3{Y��~Z�y3
ʒ���s�
u��(�o��ɂȹծ�K�
^0F�J�D��	��b��4_4�PcJ�ҥ_�I
Ả�ɴ�
+����q?�ok�
+�)��������5H��fWE��.�A3}h]��J���[�O��4c�`�03��;�t
���jt��S��`mSv�d�]Z�v��'�&�
��*N�lTCbbؒms�[�뛷X�fŷ�9��1� s���ܓKz�i:2D�U�R��{�AM5_ �
"'��
�bOwS���#�H1�%�Zk����
+z�q�h��6��X��z�� ��Q4�k��s�d0b^��[| Z�|*�2w� ��|
Df=�ЅV�����/
�Y
l���C�n� _��˧E[M�!�����Ǣ1�VV7����C��;��F���}C
jy���� ti.F�uƷ�Z�e}0J���"���=���0���\\�8�Sz������+��
}����
�a���y���%G��O�U݌x&�z��
��ݠh�x����y��l��复iD��A>�����G�1
+�ޛ#��Q��
E(5��m*��
�vm��\���q�eT)
,�s�4	�[NH]��]v���fN�w����tF�K��~J����M���8�_2L��ͪ���c�m����y�a9r�x�\U�M̐!�p���YI�&��"�$<u��q�~�����	ȹ�W
��
+�U�r��`+�2T��ݎ��%V�昰ݲj&
�7�~�c�A�)SZ�v�^u~H��T��(�f
���t�/q�H���q���P��T�G�u
+�Qb��
M�>���Z��0V�|��c��锴�e	�Y}�ރs*��L���
a&�?������ﮰ�bk}������@{*YC�Y�����o��q\��<ӳկ.L#��~ޕN��u�Ηt�
�>�"�{0IZ�$��A����$�
�座L�ַ�v�q�FI�Ӓb˨C)�ͧ���
��$�m�2 �R}�ڏ�W�ׄ�0e��XL�����-^!��I]L���D���R���<�
+��Y��1����p
j�ػ�Ɵ<�L�)
ȈH�����S�!F�A�ެ=BL���������w�-U��%���(����U��#�l���noh��½�gM��0��X^�U\��Õ?h��{�Dt4�
�J9��"�
+\�=��0�T�&�M��,ٱKW�%�E0s
+��ѕF�w
��{����� ,Ss�$U>㷙º����ٰ�	��t)�:)�?I
�Yo8^~g�mZ]�r�B��)����O1Ԓ6:���Y�
ϕ͟d�ʈLc)`_�S��S[��8���t�K�Tγ�
�c��̤����?+�H
b-4VoG��!Pшi�=ό�����
XhU!�SdX63��Ŷx�5����<���x�[�����
ϼ ��4�1���g.��?�Yՙ��q��U�p$D�\P�t�W)�q�h~'����Ȫ𵀬�; �r�Q��S���߰6��Z�&��G��(�|
+V�8��;��2��ϩ���2E���hcsk�{��}���7w��'�i
�p� 0�n>-�8*�y�4��0~y�xj>�'��=P�O\�X��ji��
O>S	��~Z�����Pm�R�
񤋊�
�WX�6U��������*�w����_�����{
��d��uZ?>��{Kl��"v��s�
h1N
��!��ՠ!�^	@o
�~|�֐�}⎥Q
�>����j�1?�� &����O�T
DX�0��D2�:O�j�'&������p�*7�h6
e�! Hr�F
���5ǩTz����Kp����?���P���qC�sG���5Vdem���R
+2�\�'�����Q���!{1�cc�|9AV`�3
+���:�^�z�:������r	��|�W.�V���U��M���Jt+Gk��K��7��:�J�3U.t$�b��Ol�m$:,���F��t�j[�D��
_�I]���N��9;�ʂ+wrm���?�IUN�Ev��
7„���=q?R)æ+��Pȋ�9o`�A�	�̛] _u�X2J�&������K���d�Q����8�W"r3"�q�|��)�#ۈ�`R��Lw��W������X�UP�<C���DS�Z`N��M����/0j��Dz	�B�)o�M�y� ؗ��
�
�]�e��W����������jU��f)�+�Y4]I�m#1�
��:�7�;�
�w'30��8�������>�����4pb�#t��l2&wCn��q��#���b��Aw�g����x�8�i���.!�'+w�<\"�;$A��6��/�
-���%�G��W��4��S\�L1��`Eb�C҃뢰),U��<�!���^2�.
@-h��.8���
��Q��\n���RJq� ΩG��A�:�GШx<��O��$�g����78qa���Ʋ\o�od����f�s'����g� )Ό��M��ѳ�ܥ�����ND����S�T �mԩ(h"�+��<
+�
G\��b�"?�G#R�
�ĕ֋#�2��S�'���}�\>(:���ے.�<ܐYq�J�I��>��&�&}"���Uo/����]Ƴa�R���z̸ҹ�f���J������
N�hF�]�Xq�[��/
��T���
\H|��m8��
խ������`n�M=���i
�@vg2[m��D�9�t�Z2��w7�L�ю�Q}tR��#v��v�ƢC at L�
���t�N�6�D"L��������#�V�z�}�g����>�4�Y&M��#�}
�	��
d�3]�i��.>���o3�9��3�ܵh
+endstream
+endobj
+4096 0 obj <<
+/Type /FontDescriptor
+/FontName /PZTGBU+CMTT10
+/Flags 4
+/FontBBox [-4 -235 731 800]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/backslash/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 4095 0 R
+>> endobj
+4097 0 obj <<
+/Length1 804
+/Length2 1076
+/Length3 0
+/Length 1632      
+/Filter /FlateDecode
+>>
+stream
+xڭR}\S�ׄ�Y� �5D��!�對��x!
HyQ�l�1l;��ll����
+I��
+Iz�D �
��Lyɤ�J#�4�
:�����?�?�s��=��}�������:�-U�
+(�u$�  ���
�� 4&3��(��`������A�Dx>�P��ј@��I ʢU��H�@$ PA��APX ��T
	L��&�PK�*Q
�•$-
�'�[L�DV������ �F"':
  a�*
A�
+S�@՘�Ɲp�Kāh*�2ꟕL�0P� �2�(�*\��P�'Ҹ8��I�CM'�5�TK�Om��:��4�)D�Q�逵pj$9TaF��j�j0�T��@��Jaf����L��� '�P��.M�kR�
��{�,�F1
m���v=#�������8<
B���k�4��Wa:5�z� P
�GQy	� �N� ����

NR- at o$7RGF�&~�X
��$�L�HӞ���3Ā-����G ���7�Ni$�#'/�ZƳ8�V�*i��q����}��Y!��
�]:3P]Wq�\g���
�
���vM�he��϶oQ�S'�Φ̷��
lI-���X�iC_Qz�S�p��ҫ_�$���Fkף��U
��*>�-o-�x�l5+8���M���M�狷z�bdE�wr�ո�]"��O�xO�{+mއ�6���d%�ή���!�d�=<�t�غ'��_U6-�U���-i
U yw͸$̼�ճ���*�”NZ��q�_V�ӓ=�K[<��^�8q�Sz�_{ [...]
,��4YscS�lZ{�O�W�~�dz���w���ԲcV�X��s�+i�j
pH5�$�����gqLp at .
��w?p�>�u ��hd��m8k�ڸ�{{�����7���I��E�5�g�7���y�Ϊ!��(�7
=�c��-v�e:
�$ny�q:f�ws��q�E����
!9˿+�y�����(��>6��vUgg��e؀�-�v�L=�F�o���b�,����w�kۤ[
8jY���E%�6��/{�����x�kW���1��b��ೌ��䮰/����=��X'�R�w�]\Cl�~t��R�g(���pm} _�>rq���3]�*�86^��+i�v!�
�2�!�����PBu%��J�/@�Rl^;:�2?`�
�[)i���ٟ� �1/Ζ�.m

�LE�β��l�e����wImo�]�U4�zB�5��_�٧?��l�kԾ��S
�I�����*��=�,`<�}t�D�fܒ��ܽ�om����|��c��]� s�5��\�:�yH˲��0k�� ���b�/�c2>Kf��
2j���
��
+�
+endstream
+endobj
+4098 0 obj <<
+/Type /FontDescriptor
+/FontName /RXNEKG+MSAM10
+/Flags 4
+/FontBBox [8 -463 1331 1003]
+/Ascent 692
+/CapHeight 550
+/Descent 0
+/ItalicAngle 0
+/StemV 40
+/XHeight 431
+/CharSet (/check)
+/FontFile 4097 0 R
+>> endobj
+740 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /CUTCHY+CMBX10
+/FontDescriptor 4046 0 R
+/FirstChar 12
+/LastChar 123
+/Widths 4040 0 R
+>> endobj
+785 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LEYKLP+CMBX12
+/FontDescriptor 4048 0 R
+/FirstChar 12
+/LastChar 122
+/Widths 4038 0 R
+>> endobj
+2802 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YWRFWO+CMBXTI10
+/FontDescriptor 4050 0 R
+/FirstChar 98
+/LastChar 117
+/Widths 4018 0 R
+>> endobj
+729 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /DNOQWZ+CMCSC10
+/FontDescriptor 4052 0 R
+/FirstChar 45
+/LastChar 121
+/Widths 4043 0 R
+>> endobj
+1099 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /UULMDN+CMEX10
+/FontDescriptor 4054 0 R
+/FirstChar 0
+/LastChar 114
+/Widths 4028 0 R
+>> endobj
+787 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /FUNHWG+CMMI10
+/FontDescriptor 4056 0 R
+/FirstChar 11
+/LastChar 122
+/Widths 4037 0 R
+>> endobj
+1234 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /EMTPFW+CMMI12
+/FontDescriptor 4058 0 R
+/FirstChar 59
+/LastChar 112
+/Widths 4025 0 R
+>> endobj
+1096 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LYAQOB+CMMI5
+/FontDescriptor 4060 0 R
+/FirstChar 97
+/LastChar 115
+/Widths 4029 0 R
+>> endobj
+1095 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BKBACP+CMMI7
+/FontDescriptor 4062 0 R
+/FirstChar 59
+/LastChar 121
+/Widths 4030 0 R
+>> endobj
+1273 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /QAOOYC+CMMI8
+/FontDescriptor 4064 0 R
+/FirstChar 103
+/LastChar 116
+/Widths 4022 0 R
+>> endobj
+741 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /UGLVGA+CMR10
+/FontDescriptor 4066 0 R
+/FirstChar 1
+/LastChar 124
+/Widths 4039 0 R
+>> endobj
+730 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /FGFGNA+CMR12
+/FontDescriptor 4068 0 R
+/FirstChar 40
+/LastChar 117
+/Widths 4042 0 R
+>> endobj
+728 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /JSADGC+CMR17
+/FontDescriptor 4070 0 R
+/FirstChar 40
+/LastChar 118
+/Widths 4044 0 R
+>> endobj
+1031 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /JNKQXR+CMR5
+/FontDescriptor 4072 0 R
+/FirstChar 43
+/LastChar 49
+/Widths 4034 0 R
+>> endobj
+1270 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YPSQTS+CMR6
+/FontDescriptor 4074 0 R
+/FirstChar 49
+/LastChar 51
+/Widths 4024 0 R
+>> endobj
+1094 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ZGEKOQ+CMR7
+/FontDescriptor 4076 0 R
+/FirstChar 40
+/LastChar 120
+/Widths 4031 0 R
+>> endobj
+1272 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /NIOJAJ+CMR8
+/FontDescriptor 4078 0 R
+/FirstChar 12
+/LastChar 121
+/Widths 4023 0 R
+>> endobj
+1066 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PTPXIX+CMSL10
+/FontDescriptor 4080 0 R
+/FirstChar 101
+/LastChar 121
+/Widths 4032 0 R
+>> endobj
+2561 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /XWRTTW+CMSL9
+/FontDescriptor 4082 0 R
+/FirstChar 97
+/LastChar 120
+/Widths 4019 0 R
+>> endobj
+1050 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YOZAEZ+CMSY10
+/FontDescriptor 4084 0 R
+/FirstChar 0
+/LastChar 120
+/Widths 4033 0 R
+>> endobj
+1132 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /NOPBSI+CMSY5
+/FontDescriptor 4086 0 R
+/FirstChar 0
+/LastChar 48
+/Widths 4026 0 R
+>> endobj
+1100 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LUYYYY+CMSY7
+/FontDescriptor 4088 0 R
+/FirstChar 0
+/LastChar 48
+/Widths 4027 0 R
+>> endobj
+1274 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /DCFFMU+CMSY8
+/FontDescriptor 4090 0 R
+/FirstChar 120
+/LastChar 120
+/Widths 4021 0 R
+>> endobj
+983 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ZUZUQE+CMTI10
+/FontDescriptor 4092 0 R
+/FirstChar 11
+/LastChar 121
+/Widths 4035 0 R
+>> endobj
+731 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GEWDVW+CMTI12
+/FontDescriptor 4094 0 R
+/FirstChar 12
+/LastChar 121
+/Widths 4041 0 R
+>> endobj
+982 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PZTGBU+CMTT10
+/FontDescriptor 4096 0 R
+/FirstChar 35
+/LastChar 125
+/Widths 4036 0 R
+>> endobj
+1433 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /RXNEKG+MSAM10
+/FontDescriptor 4098 0 R
+/FirstChar 88
+/LastChar 88
+/Widths 4020 0 R
+>> endobj
+732 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4099 0 R
+/Kids [722 0 R 737 0 R 782 0 R 842 0 R 895 0 R 937 0 R]
+>> endobj
+955 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4099 0 R
+/Kids [951 0 R 967 0 R 978 0 R 992 0 R 1010 0 R 1028 0 R]
+>> endobj
+1051 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4099 0 R
+/Kids [1046 0 R 1063 0 R 1074 0 R 1081 0 R 1090 0 R 1112 0 R]
+>> endobj
+1134 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4099 0 R
+/Kids [1129 0 R 1139 0 R 1148 0 R 1154 0 R 1176 0 R 1195 0 R]
+>> endobj
+1222 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4099 0 R
+/Kids [1216 0 R 1230 0 R 1247 0 R 1266 0 R 1288 0 R 1309 0 R]
+>> endobj
+1324 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4099 0 R
+/Kids [1321 0 R 1326 0 R 1345 0 R 1360 0 R 1370 0 R 1378 0 R]
+>> endobj
+1394 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4100 0 R
+/Kids [1388 0 R 1407 0 R 1425 0 R 1437 0 R 1446 0 R 1455 0 R]
+>> endobj
+1467 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4100 0 R
+/Kids [1462 0 R 1469 0 R 1475 0 R 1483 0 R 1491 0 R 1497 0 R]
+>> endobj
+1509 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4100 0 R
+/Kids [1506 0 R 1512 0 R 1518 0 R 1522 0 R 1530 0 R 1539 0 R]
+>> endobj
+1554 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4100 0 R
+/Kids [1549 0 R 1558 0 R 1565 0 R 1572 0 R 1582 0 R 1589 0 R]
+>> endobj
+1604 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4100 0 R
+/Kids [1598 0 R 1606 0 R 1613 0 R 1620 0 R 1630 0 R 1635 0 R]
+>> endobj
+1646 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4100 0 R
+/Kids [1641 0 R 1648 0 R 1656 0 R 1665 0 R 1673 0 R 1680 0 R]
+>> endobj
+1693 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4101 0 R
+/Kids [1688 0 R 1695 0 R 1703 0 R 1710 0 R 1718 0 R 1727 0 R]
+>> endobj
+1738 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4101 0 R
+/Kids [1733 0 R 1741 0 R 1748 0 R 1760 0 R 1770 0 R 1783 0 R]
+>> endobj
+1798 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4101 0 R
+/Kids [1794 0 R 1802 0 R 1811 0 R 1829 0 R 1847 0 R 1853 0 R]
+>> endobj
+1865 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4101 0 R
+/Kids [1859 0 R 1867 0 R 1877 0 R 1885 0 R 1897 0 R 1904 0 R]
+>> endobj
+1929 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4101 0 R
+/Kids [1925 0 R 1933 0 R 1949 0 R 1960 0 R 1974 0 R 1993 0 R]
+>> endobj
+2003 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4101 0 R
+/Kids [1997 0 R 2006 0 R 2015 0 R 2020 0 R 2031 0 R 2038 0 R]
+>> endobj
+2050 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4102 0 R
+/Kids [2045 0 R 2055 0 R 2064 0 R 2075 0 R 2084 0 R 2111 0 R]
+>> endobj
+2134 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4102 0 R
+/Kids [2129 0 R 2136 0 R 2142 0 R 2148 0 R 2157 0 R 2165 0 R]
+>> endobj
+2179 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4102 0 R
+/Kids [2176 0 R 2181 0 R 2194 0 R 2209 0 R 2239 0 R 2251 0 R]
+>> endobj
+2265 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4102 0 R
+/Kids [2259 0 R 2268 0 R 2273 0 R 2281 0 R 2290 0 R 2299 0 R]
+>> endobj
+2311 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4102 0 R
+/Kids [2306 0 R 2314 0 R 2321 0 R 2328 0 R 2338 0 R 2349 0 R]
+>> endobj
+2363 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4102 0 R
+/Kids [2357 0 R 2367 0 R 2373 0 R 2382 0 R 2389 0 R 2400 0 R]
+>> endobj
+2415 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4103 0 R
+/Kids [2411 0 R 2419 0 R 2429 0 R 2436 0 R 2447 0 R 2454 0 R]
+>> endobj
+2464 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4103 0 R
+/Kids [2461 0 R 2472 0 R 2480 0 R 2489 0 R 2497 0 R 2503 0 R]
+>> endobj
+2514 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4103 0 R
+/Kids [2510 0 R 2519 0 R 2524 0 R 2532 0 R 2537 0 R 2542 0 R]
+>> endobj
+2549 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4103 0 R
+/Kids [2546 0 R 2553 0 R 2558 0 R 2563 0 R 2567 0 R 2571 0 R]
+>> endobj
+2580 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4103 0 R
+/Kids [2577 0 R 2582 0 R 2589 0 R 2593 0 R 2598 0 R 2604 0 R]
+>> endobj
+2612 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4103 0 R
+/Kids [2608 0 R 2616 0 R 2623 0 R 2629 0 R 2638 0 R 2644 0 R]
+>> endobj
+2652 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4104 0 R
+/Kids [2649 0 R 2656 0 R 2660 0 R 2664 0 R 2670 0 R 2675 0 R]
+>> endobj
+2687 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4104 0 R
+/Kids [2683 0 R 2689 0 R 2700 0 R 2704 0 R 2710 0 R 2714 0 R]
+>> endobj
+2728 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4104 0 R
+/Kids [2725 0 R 2730 0 R 2734 0 R 2740 0 R 2744 0 R 2749 0 R]
+>> endobj
+2757 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4104 0 R
+/Kids [2754 0 R 2759 0 R 2772 0 R 2787 0 R 2791 0 R 2795 0 R]
+>> endobj
+2803 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4104 0 R
+/Kids [2799 0 R 2805 0 R 2814 0 R 2818 0 R 2823 0 R 2827 0 R]
+>> endobj
+2834 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4104 0 R
+/Kids [2831 0 R 2836 0 R 2845 0 R 2863 0 R 2867 0 R 2871 0 R]
+>> endobj
+2878 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4105 0 R
+/Kids [2875 0 R 2880 0 R 2884 0 R 2888 0 R 2892 0 R 2896 0 R]
+>> endobj
+2904 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 4105 0 R
+/Kids [2900 0 R 2906 0 R 3034 0 R 3290 0 R 3445 0 R 3596 0 R]
+>> endobj
+3779 0 obj <<
+/Type /Pages
+/Count 4
+/Parent 4105 0 R
+/Kids [3776 0 R 3908 0 R 4011 0 R 4015 0 R]
+>> endobj
+4099 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4106 0 R
+/Kids [732 0 R 955 0 R 1051 0 R 1134 0 R 1222 0 R 1324 0 R]
+>> endobj
+4100 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4106 0 R
+/Kids [1394 0 R 1467 0 R 1509 0 R 1554 0 R 1604 0 R 1646 0 R]
+>> endobj
+4101 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4106 0 R
+/Kids [1693 0 R 1738 0 R 1798 0 R 1865 0 R 1929 0 R 2003 0 R]
+>> endobj
+4102 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4106 0 R
+/Kids [2050 0 R 2134 0 R 2179 0 R 2265 0 R 2311 0 R 2363 0 R]
+>> endobj
+4103 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4106 0 R
+/Kids [2415 0 R 2464 0 R 2514 0 R 2549 0 R 2580 0 R 2612 0 R]
+>> endobj
+4104 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 4106 0 R
+/Kids [2652 0 R 2687 0 R 2728 0 R 2757 0 R 2803 0 R 2834 0 R]
+>> endobj
+4105 0 obj <<
+/Type /Pages
+/Count 16
+/Parent 4107 0 R
+/Kids [2878 0 R 2904 0 R 3779 0 R]
+>> endobj
+4106 0 obj <<
+/Type /Pages
+/Count 216
+/Parent 4108 0 R
+/Kids [4099 0 R 4100 0 R 4101 0 R 4102 0 R 4103 0 R 4104 0 R]
+>> endobj
+4107 0 obj <<
+/Type /Pages
+/Count 16
+/Parent 4108 0 R
+/Kids [4105 0 R]
+>> endobj
+4108 0 obj <<
+/Type /Pages
+/Count 232
+/Kids [4106 0 R 4107 0 R]
+>> endobj
+4109 0 obj <<
+/Type /Outlines
+/First 7 0 R
+/Last 719 0 R
+/Count 15
+>> endobj
+719 0 obj <<
+/Title 720 0 R
+/A 717 0 R
+/Parent 4109 0 R
+/Prev 715 0 R
+>> endobj
+715 0 obj <<
+/Title 716 0 R
+/A 713 0 R
+/Parent 4109 0 R
+/Prev 703 0 R
+/Next 719 0 R
+>> endobj
+711 0 obj <<
+/Title 712 0 R
+/A 709 0 R
+/Parent 703 0 R
+/Prev 707 0 R
+>> endobj
+707 0 obj <<
+/Title 708 0 R
+/A 705 0 R
+/Parent 703 0 R
+/Next 711 0 R
+>> endobj
+703 0 obj <<
+/Title 704 0 R
+/A 701 0 R
+/Parent 4109 0 R
+/Prev 667 0 R
+/Next 715 0 R
+/First 707 0 R
+/Last 711 0 R
+/Count -2
+>> endobj
+699 0 obj <<
+/Title 700 0 R
+/A 697 0 R
+/Parent 667 0 R
+/Prev 695 0 R
+>> endobj
+695 0 obj <<
+/Title 696 0 R
+/A 693 0 R
+/Parent 667 0 R
+/Prev 691 0 R
+/Next 699 0 R
+>> endobj
+691 0 obj <<
+/Title 692 0 R
+/A 689 0 R
+/Parent 667 0 R
+/Prev 671 0 R
+/Next 695 0 R
+>> endobj
+687 0 obj <<
+/Title 688 0 R
+/A 685 0 R
+/Parent 671 0 R
+/Prev 683 0 R
+>> endobj
+683 0 obj <<
+/Title 684 0 R
+/A 681 0 R
+/Parent 671 0 R
+/Prev 679 0 R
+/Next 687 0 R
+>> endobj
+679 0 obj <<
+/Title 680 0 R
+/A 677 0 R
+/Parent 671 0 R
+/Prev 675 0 R
+/Next 683 0 R
+>> endobj
+675 0 obj <<
+/Title 676 0 R
+/A 673 0 R
+/Parent 671 0 R
+/Next 679 0 R
+>> endobj
+671 0 obj <<
+/Title 672 0 R
+/A 669 0 R
+/Parent 667 0 R
+/Next 691 0 R
+/First 675 0 R
+/Last 687 0 R
+/Count -4
+>> endobj
+667 0 obj <<
+/Title 668 0 R
+/A 665 0 R
+/Parent 4109 0 R
+/Prev 603 0 R
+/Next 703 0 R
+/First 671 0 R
+/Last 699 0 R
+/Count -4
+>> endobj
+663 0 obj <<
+/Title 664 0 R
+/A 661 0 R
+/Parent 647 0 R
+/Prev 659 0 R
+>> endobj
+659 0 obj <<
+/Title 660 0 R
+/A 657 0 R
+/Parent 647 0 R
+/Prev 655 0 R
+/Next 663 0 R
+>> endobj
+655 0 obj <<
+/Title 656 0 R
+/A 653 0 R
+/Parent 647 0 R
+/Prev 651 0 R
+/Next 659 0 R
+>> endobj
+651 0 obj <<
+/Title 652 0 R
+/A 649 0 R
+/Parent 647 0 R
+/Next 655 0 R
+>> endobj
+647 0 obj <<
+/Title 648 0 R
+/A 645 0 R
+/Parent 603 0 R
+/Prev 627 0 R
+/First 651 0 R
+/Last 663 0 R
+/Count -4
+>> endobj
+643 0 obj <<
+/Title 644 0 R
+/A 641 0 R
+/Parent 627 0 R
+/Prev 639 0 R
+>> endobj
+639 0 obj <<
+/Title 640 0 R
+/A 637 0 R
+/Parent 627 0 R
+/Prev 635 0 R
+/Next 643 0 R
+>> endobj
+635 0 obj <<
+/Title 636 0 R
+/A 633 0 R
+/Parent 627 0 R
+/Prev 631 0 R
+/Next 639 0 R
+>> endobj
+631 0 obj <<
+/Title 632 0 R
+/A 629 0 R
+/Parent 627 0 R
+/Next 635 0 R
+>> endobj
+627 0 obj <<
+/Title 628 0 R
+/A 625 0 R
+/Parent 603 0 R
+/Prev 607 0 R
+/Next 647 0 R
+/First 631 0 R
+/Last 643 0 R
+/Count -4
+>> endobj
+623 0 obj <<
+/Title 624 0 R
+/A 621 0 R
+/Parent 607 0 R
+/Prev 619 0 R
+>> endobj
+619 0 obj <<
+/Title 620 0 R
+/A 617 0 R
+/Parent 607 0 R
+/Prev 615 0 R
+/Next 623 0 R
+>> endobj
+615 0 obj <<
+/Title 616 0 R
+/A 613 0 R
+/Parent 607 0 R
+/Prev 611 0 R
+/Next 619 0 R
+>> endobj
+611 0 obj <<
+/Title 612 0 R
+/A 609 0 R
+/Parent 607 0 R
+/Next 615 0 R
+>> endobj
+607 0 obj <<
+/Title 608 0 R
+/A 605 0 R
+/Parent 603 0 R
+/Next 627 0 R
+/First 611 0 R
+/Last 623 0 R
+/Count -4
+>> endobj
+603 0 obj <<
+/Title 604 0 R
+/A 601 0 R
+/Parent 4109 0 R
+/Prev 579 0 R
+/Next 667 0 R
+/First 607 0 R
+/Last 647 0 R
+/Count -3
+>> endobj
+599 0 obj <<
+/Title 600 0 R
+/A 597 0 R
+/Parent 579 0 R
+/Prev 595 0 R
+>> endobj
+595 0 obj <<
+/Title 596 0 R
+/A 593 0 R
+/Parent 579 0 R
+/Prev 591 0 R
+/Next 599 0 R
+>> endobj
+591 0 obj <<
+/Title 592 0 R
+/A 589 0 R
+/Parent 579 0 R
+/Prev 587 0 R
+/Next 595 0 R
+>> endobj
+587 0 obj <<
+/Title 588 0 R
+/A 585 0 R
+/Parent 579 0 R
+/Prev 583 0 R
+/Next 591 0 R
+>> endobj
+583 0 obj <<
+/Title 584 0 R
+/A 581 0 R
+/Parent 579 0 R
+/Next 587 0 R
+>> endobj
+579 0 obj <<
+/Title 580 0 R
+/A 577 0 R
+/Parent 4109 0 R
+/Prev 543 0 R
+/Next 603 0 R
+/First 583 0 R
+/Last 599 0 R
+/Count -5
+>> endobj
+575 0 obj <<
+/Title 576 0 R
+/A 573 0 R
+/Parent 543 0 R
+/Prev 571 0 R
+>> endobj
+571 0 obj <<
+/Title 572 0 R
+/A 569 0 R
+/Parent 543 0 R
+/Prev 567 0 R
+/Next 575 0 R
+>> endobj
+567 0 obj <<
+/Title 568 0 R
+/A 565 0 R
+/Parent 543 0 R
+/Prev 563 0 R
+/Next 571 0 R
+>> endobj
+563 0 obj <<
+/Title 564 0 R
+/A 561 0 R
+/Parent 543 0 R
+/Prev 559 0 R
+/Next 567 0 R
+>> endobj
+559 0 obj <<
+/Title 560 0 R
+/A 557 0 R
+/Parent 543 0 R
+/Prev 555 0 R
+/Next 563 0 R
+>> endobj
+555 0 obj <<
+/Title 556 0 R
+/A 553 0 R
+/Parent 543 0 R
+/Prev 551 0 R
+/Next 559 0 R
+>> endobj
+551 0 obj <<
+/Title 552 0 R
+/A 549 0 R
+/Parent 543 0 R
+/Prev 547 0 R
+/Next 555 0 R
+>> endobj
+547 0 obj <<
+/Title 548 0 R
+/A 545 0 R
+/Parent 543 0 R
+/Next 551 0 R
+>> endobj
+543 0 obj <<
+/Title 544 0 R
+/A 541 0 R
+/Parent 4109 0 R
+/Prev 391 0 R
+/Next 579 0 R
+/First 547 0 R
+/Last 575 0 R
+/Count -8
+>> endobj
+539 0 obj <<
+/Title 540 0 R
+/A 537 0 R
+/Parent 531 0 R
+/Prev 535 0 R
+>> endobj
+535 0 obj <<
+/Title 536 0 R
+/A 533 0 R
+/Parent 531 0 R
+/Next 539 0 R
+>> endobj
+531 0 obj <<
+/Title 532 0 R
+/A 529 0 R
+/Parent 391 0 R
+/Prev 487 0 R
+/First 535 0 R
+/Last 539 0 R
+/Count -2
+>> endobj
+527 0 obj <<
+/Title 528 0 R
+/A 525 0 R
+/Parent 487 0 R
+/Prev 523 0 R
+>> endobj
+523 0 obj <<
+/Title 524 0 R
+/A 521 0 R
+/Parent 487 0 R
+/Prev 519 0 R
+/Next 527 0 R
+>> endobj
+519 0 obj <<
+/Title 520 0 R
+/A 517 0 R
+/Parent 487 0 R
+/Prev 515 0 R
+/Next 523 0 R
+>> endobj
+515 0 obj <<
+/Title 516 0 R
+/A 513 0 R
+/Parent 487 0 R
+/Prev 511 0 R
+/Next 519 0 R
+>> endobj
+511 0 obj <<
+/Title 512 0 R
+/A 509 0 R
+/Parent 487 0 R
+/Prev 507 0 R
+/Next 515 0 R
+>> endobj
+507 0 obj <<
+/Title 508 0 R
+/A 505 0 R
+/Parent 487 0 R
+/Prev 503 0 R
+/Next 511 0 R
+>> endobj
+503 0 obj <<
+/Title 504 0 R
+/A 501 0 R
+/Parent 487 0 R
+/Prev 499 0 R
+/Next 507 0 R
+>> endobj
+499 0 obj <<
+/Title 500 0 R
+/A 497 0 R
+/Parent 487 0 R
+/Prev 495 0 R
+/Next 503 0 R
+>> endobj
+495 0 obj <<
+/Title 496 0 R
+/A 493 0 R
+/Parent 487 0 R
+/Prev 491 0 R
+/Next 499 0 R
+>> endobj
+491 0 obj <<
+/Title 492 0 R
+/A 489 0 R
+/Parent 487 0 R
+/Next 495 0 R
+>> endobj
+487 0 obj <<
+/Title 488 0 R
+/A 485 0 R
+/Parent 391 0 R
+/Prev 399 0 R
+/Next 531 0 R
+/First 491 0 R
+/Last 527 0 R
+/Count -10
+>> endobj
+483 0 obj <<
+/Title 484 0 R
+/A 481 0 R
+/Parent 471 0 R
+/Prev 479 0 R
+>> endobj
+479 0 obj <<
+/Title 480 0 R
+/A 477 0 R
+/Parent 471 0 R
+/Prev 475 0 R
+/Next 483 0 R
+>> endobj
+475 0 obj <<
+/Title 476 0 R
+/A 473 0 R
+/Parent 471 0 R
+/Next 479 0 R
+>> endobj
+471 0 obj <<
+/Title 472 0 R
+/A 469 0 R
+/Parent 399 0 R
+/Prev 459 0 R
+/First 475 0 R
+/Last 483 0 R
+/Count -3
+>> endobj
+467 0 obj <<
+/Title 468 0 R
+/A 465 0 R
+/Parent 459 0 R
+/Prev 463 0 R
+>> endobj
+463 0 obj <<
+/Title 464 0 R
+/A 461 0 R
+/Parent 459 0 R
+/Next 467 0 R
+>> endobj
+459 0 obj <<
+/Title 460 0 R
+/A 457 0 R
+/Parent 399 0 R
+/Prev 435 0 R
+/Next 471 0 R
+/First 463 0 R
+/Last 467 0 R
+/Count -2
+>> endobj
+455 0 obj <<
+/Title 456 0 R
+/A 453 0 R
+/Parent 435 0 R
+/Prev 451 0 R
+>> endobj
+451 0 obj <<
+/Title 452 0 R
+/A 449 0 R
+/Parent 435 0 R
+/Prev 447 0 R
+/Next 455 0 R
+>> endobj
+447 0 obj <<
+/Title 448 0 R
+/A 445 0 R
+/Parent 435 0 R
+/Prev 443 0 R
+/Next 451 0 R
+>> endobj
+443 0 obj <<
+/Title 444 0 R
+/A 441 0 R
+/Parent 435 0 R
+/Prev 439 0 R
+/Next 447 0 R
+>> endobj
+439 0 obj <<
+/Title 440 0 R
+/A 437 0 R
+/Parent 435 0 R
+/Next 443 0 R
+>> endobj
+435 0 obj <<
+/Title 436 0 R
+/A 433 0 R
+/Parent 399 0 R
+/Prev 431 0 R
+/Next 459 0 R
+/First 439 0 R
+/Last 455 0 R
+/Count -5
+>> endobj
+431 0 obj <<
+/Title 432 0 R
+/A 429 0 R
+/Parent 399 0 R
+/Prev 427 0 R
+/Next 435 0 R
+>> endobj
+427 0 obj <<
+/Title 428 0 R
+/A 425 0 R
+/Parent 399 0 R
+/Prev 423 0 R
+/Next 431 0 R
+>> endobj
+423 0 obj <<
+/Title 424 0 R
+/A 421 0 R
+/Parent 399 0 R
+/Prev 419 0 R
+/Next 427 0 R
+>> endobj
+419 0 obj <<
+/Title 420 0 R
+/A 417 0 R
+/Parent 399 0 R
+/Prev 415 0 R
+/Next 423 0 R
+>> endobj
+415 0 obj <<
+/Title 416 0 R
+/A 413 0 R
+/Parent 399 0 R
+/Prev 411 0 R
+/Next 419 0 R
+>> endobj
+411 0 obj <<
+/Title 412 0 R
+/A 409 0 R
+/Parent 399 0 R
+/Prev 407 0 R
+/Next 415 0 R
+>> endobj
+407 0 obj <<
+/Title 408 0 R
+/A 405 0 R
+/Parent 399 0 R
+/Prev 403 0 R
+/Next 411 0 R
+>> endobj
+403 0 obj <<
+/Title 404 0 R
+/A 401 0 R
+/Parent 399 0 R
+/Next 407 0 R
+>> endobj
+399 0 obj <<
+/Title 400 0 R
+/A 397 0 R
+/Parent 391 0 R
+/Prev 395 0 R
+/Next 487 0 R
+/First 403 0 R
+/Last 471 0 R
+/Count -11
+>> endobj
+395 0 obj <<
+/Title 396 0 R
+/A 393 0 R
+/Parent 391 0 R
+/Next 399 0 R
+>> endobj
+391 0 obj <<
+/Title 392 0 R
+/A 389 0 R
+/Parent 4109 0 R
+/Prev 307 0 R
+/Next 543 0 R
+/First 395 0 R
+/Last 531 0 R
+/Count -4
+>> endobj
+387 0 obj <<
+/Title 388 0 R
+/A 385 0 R
+/Parent 307 0 R
+/Prev 359 0 R
+>> endobj
+383 0 obj <<
+/Title 384 0 R
+/A 381 0 R
+/Parent 359 0 R
+/Prev 379 0 R
+>> endobj
+379 0 obj <<
+/Title 380 0 R
+/A 377 0 R
+/Parent 359 0 R
+/Prev 375 0 R
+/Next 383 0 R
+>> endobj
+375 0 obj <<
+/Title 376 0 R
+/A 373 0 R
+/Parent 359 0 R
+/Prev 371 0 R
+/Next 379 0 R
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 369 0 R
+/Parent 359 0 R
+/Prev 367 0 R
+/Next 375 0 R
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 365 0 R
+/Parent 359 0 R
+/Prev 363 0 R
+/Next 371 0 R
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 361 0 R
+/Parent 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 357 0 R
+/Parent 307 0 R
+/Prev 355 0 R
+/Next 387 0 R
+/First 363 0 R
+/Last 383 0 R
+/Count -6
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 353 0 R
+/Parent 307 0 R
+/Prev 315 0 R
+/Next 359 0 R
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 349 0 R
+/Parent 343 0 R
+/Prev 347 0 R
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 345 0 R
+/Parent 343 0 R
+/Next 351 0 R
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 341 0 R
+/Parent 315 0 R
+/Prev 339 0 R
+/First 347 0 R
+/Last 351 0 R
+/Count -2
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 337 0 R
+/Parent 315 0 R
+/Prev 335 0 R
+/Next 343 0 R
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 333 0 R
+/Parent 315 0 R
+/Prev 331 0 R
+/Next 339 0 R
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 329 0 R
+/Parent 315 0 R
+/Prev 327 0 R
+/Next 335 0 R
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 325 0 R
+/Parent 315 0 R
+/Prev 323 0 R
+/Next 331 0 R
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 321 0 R
+/Parent 315 0 R
+/Prev 319 0 R
+/Next 327 0 R
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 317 0 R
+/Parent 315 0 R
+/Next 323 0 R
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 307 0 R
+/Prev 311 0 R
+/Next 355 0 R
+/First 319 0 R
+/Last 343 0 R
+/Count -7
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 307 0 R
+/Next 315 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 4109 0 R
+/Prev 119 0 R
+/Next 391 0 R
+/First 311 0 R
+/Last 387 0 R
+/Count -5
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 119 0 R
+/Prev 275 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 275 0 R
+/Prev 295 0 R
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 275 0 R
+/Prev 291 0 R
+/Next 299 0 R
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 275 0 R
+/Prev 287 0 R
+/Next 295 0 R
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 275 0 R
+/Prev 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 275 0 R
+/Prev 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 275 0 R
+/Next 283 0 R
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 119 0 R
+/Prev 231 0 R
+/Next 303 0 R
+/First 279 0 R
+/Last 299 0 R
+/Count -6
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 231 0 R
+/Prev 267 0 R
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 231 0 R
+/Prev 263 0 R
+/Next 271 0 R
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 231 0 R
+/Prev 259 0 R
+/Next 267 0 R
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 231 0 R
+/Prev 255 0 R
+/Next 263 0 R
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 231 0 R
+/Prev 251 0 R
+/Next 259 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 231 0 R
+/Prev 247 0 R
+/Next 255 0 R
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 231 0 R
+/Prev 243 0 R
+/Next 251 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 231 0 R
+/Prev 239 0 R
+/Next 247 0 R
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 231 0 R
+/Prev 235 0 R
+/Next 243 0 R
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 231 0 R
+/Next 239 0 R
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 119 0 R
+/Prev 139 0 R
+/Next 275 0 R
+/First 235 0 R
+/Last 271 0 R
+/Count -10
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 139 0 R
+/Prev 199 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 199 0 R
+/Prev 219 0 R
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 199 0 R
+/Prev 215 0 R
+/Next 223 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 199 0 R
+/Prev 211 0 R
+/Next 219 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 199 0 R
+/Prev 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 199 0 R
+/Prev 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 199 0 R
+/Next 207 0 R
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 139 0 R
+/Prev 195 0 R
+/Next 227 0 R
+/First 203 0 R
+/Last 223 0 R
+/Count -6
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 139 0 R
+/Prev 167 0 R
+/Next 199 0 R
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 167 0 R
+/Prev 187 0 R
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 167 0 R
+/Prev 183 0 R
+/Next 191 0 R
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 167 0 R
+/Prev 179 0 R
+/Next 187 0 R
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 167 0 R
+/Prev 175 0 R
+/Next 183 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 167 0 R
+/Prev 171 0 R
+/Next 179 0 R
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 167 0 R
+/Next 175 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 139 0 R
+/Prev 163 0 R
+/Next 195 0 R
+/First 171 0 R
+/Last 191 0 R
+/Count -6
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 139 0 R
+/Prev 159 0 R
+/Next 167 0 R
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 139 0 R
+/Prev 155 0 R
+/Next 163 0 R
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 139 0 R
+/Prev 151 0 R
+/Next 159 0 R
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 139 0 R
+/Prev 147 0 R
+/Next 155 0 R
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 139 0 R
+/Prev 143 0 R
+/Next 151 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 139 0 R
+/Next 147 0 R
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 119 0 R
+/Prev 135 0 R
+/Next 231 0 R
+/First 143 0 R
+/Last 227 0 R
+/Count -10
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 119 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 119 0 R
+/Prev 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 119 0 R
+/Prev 123 0 R
+/Next 131 0 R
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 119 0 R
+/Next 127 0 R
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 4109 0 R
+/Prev 107 0 R
+/Next 307 0 R
+/First 123 0 R
+/Last 303 0 R
+/Count -8
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 107 0 R
+/Prev 111 0 R
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 4109 0 R
+/Prev 47 0 R
+/Next 119 0 R
+/First 111 0 R
+/Last 115 0 R
+/Count -2
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 47 0 R
+/Prev 87 0 R
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 87 0 R
+/Prev 95 0 R
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 87 0 R
+/Prev 91 0 R
+/Next 99 0 R
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 87 0 R
+/Next 95 0 R
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 47 0 R
+/Prev 67 0 R
+/Next 103 0 R
+/First 91 0 R
+/Last 99 0 R
+/Count -3
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 67 0 R
+/Prev 79 0 R
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 67 0 R
+/Prev 75 0 R
+/Next 83 0 R
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 67 0 R
+/Prev 71 0 R
+/Next 79 0 R
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 67 0 R
+/Next 75 0 R
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 47 0 R
+/Prev 63 0 R
+/Next 87 0 R
+/First 71 0 R
+/Last 83 0 R
+/Count -4
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 47 0 R
+/Prev 59 0 R
+/Next 67 0 R
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 47 0 R
+/Prev 55 0 R
+/Next 63 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 47 0 R
+/Prev 51 0 R
+/Next 59 0 R
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 47 0 R
+/Next 55 0 R
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 4109 0 R
+/Prev 15 0 R
+/Next 107 0 R
+/First 51 0 R
+/Last 103 0 R
+/Count -7
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 27 0 R
+/Prev 31 0 R
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 31 0 R
+/Prev 35 0 R
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 31 0 R
+/Next 39 0 R
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 27 0 R
+/Next 43 0 R
+/First 35 0 R
+/Last 39 0 R
+/Count -2
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 15 0 R
+/Prev 23 0 R
+/First 31 0 R
+/Last 43 0 R
+/Count -2
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 15 0 R
+/Prev 19 0 R
+/Next 27 0 R
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 4109 0 R
+/Prev 11 0 R
+/Next 47 0 R
+/First 19 0 R
+/Last 27 0 R
+/Count -3
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 4109 0 R
+/Prev 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 4109 0 R
+/Next 11 0 R
+>> endobj
+4110 0 obj <<
+/Names [(AMS.10) 1220 0 R (Doc-Start) 727 0 R (Hfootnote.1) 1271 0 R (Hfootnote.2) 1291 0 R (Hfootnote.3) 1313 0 R (Item.1) 1077 0 R]
+/Limits [(AMS.10) (Item.1)]
+>> endobj
+4111 0 obj <<
+/Names [(Item.10) 1413 0 R (Item.100) 2121 0 R (Item.101) 2122 0 R (Item.102) 2123 0 R (Item.103) 2124 0 R (Item.104) 2125 0 R]
+/Limits [(Item.10) (Item.104)]
+>> endobj
+4112 0 obj <<
+/Names [(Item.105) 2197 0 R (Item.106) 2198 0 R (Item.107) 2199 0 R (Item.108) 2200 0 R (Item.109) 2201 0 R (Item.11) 1414 0 R]
+/Limits [(Item.105) (Item.11)]
+>> endobj
+4113 0 obj <<
+/Names [(Item.110) 2212 0 R (Item.111) 2213 0 R (Item.112) 2214 0 R (Item.113) 2215 0 R (Item.114) 2216 0 R (Item.115) 2217 0 R]
+/Limits [(Item.110) (Item.115)]
+>> endobj
+4114 0 obj <<
+/Names [(Item.116) 2218 0 R (Item.117) 2219 0 R (Item.118) 2220 0 R (Item.119) 2221 0 R (Item.12) 1415 0 R (Item.120) 2222 0 R]
+/Limits [(Item.116) (Item.120)]
+>> endobj
+4115 0 obj <<
+/Names [(Item.121) 2223 0 R (Item.122) 2224 0 R (Item.123) 2225 0 R (Item.124) 2226 0 R (Item.125) 2242 0 R (Item.126) 2243 0 R]
+/Limits [(Item.121) (Item.126)]
+>> endobj
+4116 0 obj <<
+/Names [(Item.127) 2244 0 R (Item.128) 2245 0 R (Item.129) 2246 0 R (Item.13) 1416 0 R (Item.130) 2247 0 R (Item.131) 2248 0 R]
+/Limits [(Item.127) (Item.131)]
+>> endobj
+4117 0 obj <<
+/Names [(Item.132) 2737 0 R (Item.133) 2738 0 R (Item.134) 2848 0 R (Item.135) 2849 0 R (Item.136) 2850 0 R (Item.137) 2851 0 R]
+/Limits [(Item.132) (Item.137)]
+>> endobj
+4118 0 obj <<
+/Names [(Item.138) 2852 0 R (Item.139) 2853 0 R (Item.14) 1417 0 R (Item.140) 2854 0 R (Item.141) 2855 0 R (Item.142) 2856 0 R]
+/Limits [(Item.138) (Item.142)]
+>> endobj
+4119 0 obj <<
+/Names [(Item.143) 2857 0 R (Item.144) 2858 0 R (Item.145) 2859 0 R (Item.15) 1428 0 R (Item.16) 1429 0 R (Item.17) 1430 0 R]
+/Limits [(Item.143) (Item.17)]
+>> endobj
+4120 0 obj <<
+/Names [(Item.18) 1431 0 R (Item.19) 1432 0 R (Item.2) 1078 0 R (Item.20) 1814 0 R (Item.21) 1815 0 R (Item.22) 1816 0 R]
+/Limits [(Item.18) (Item.22)]
+>> endobj
+4121 0 obj <<
+/Names [(Item.23) 1817 0 R (Item.24) 1818 0 R (Item.25) 1819 0 R (Item.26) 1832 0 R (Item.27) 1833 0 R (Item.28) 1834 0 R]
+/Limits [(Item.23) (Item.28)]
+>> endobj
+4122 0 obj <<
+/Names [(Item.29) 1835 0 R (Item.3) 1079 0 R (Item.30) 1836 0 R (Item.31) 1837 0 R (Item.32) 1838 0 R (Item.33) 1839 0 R]
+/Limits [(Item.29) (Item.33)]
+>> endobj
+4123 0 obj <<
+/Names [(Item.34) 1840 0 R (Item.35) 1841 0 R (Item.36) 1842 0 R (Item.37) 1843 0 R (Item.38) 1907 0 R (Item.39) 1908 0 R]
+/Limits [(Item.34) (Item.39)]
+>> endobj
+4124 0 obj <<
+/Names [(Item.4) 1391 0 R (Item.40) 1909 0 R (Item.41) 1910 0 R (Item.42) 1911 0 R (Item.43) 1912 0 R (Item.44) 1913 0 R]
+/Limits [(Item.4) (Item.44)]
+>> endobj
+4125 0 obj <<
+/Names [(Item.45) 1914 0 R (Item.46) 1915 0 R (Item.47) 1916 0 R (Item.48) 1917 0 R (Item.49) 1918 0 R (Item.5) 1392 0 R]
+/Limits [(Item.45) (Item.5)]
+>> endobj
+4126 0 obj <<
+/Names [(Item.50) 1919 0 R (Item.51) 1920 0 R (Item.52) 1921 0 R (Item.53) 1922 0 R (Item.54) 1952 0 R (Item.55) 1953 0 R]
+/Limits [(Item.50) (Item.55)]
+>> endobj
+4127 0 obj <<
+/Names [(Item.56) 1954 0 R (Item.57) 1955 0 R (Item.58) 1956 0 R (Item.59) 1957 0 R (Item.6) 1393 0 R (Item.60) 1963 0 R]
+/Limits [(Item.56) (Item.60)]
+>> endobj
+4128 0 obj <<
+/Names [(Item.61) 1964 0 R (Item.62) 1965 0 R (Item.63) 1966 0 R (Item.64) 1958 0 R (Item.65) 1967 0 R (Item.66) 1977 0 R]
+/Limits [(Item.61) (Item.66)]
+>> endobj
+4129 0 obj <<
+/Names [(Item.67) 1978 0 R (Item.68) 1979 0 R (Item.69) 1980 0 R (Item.7) 1410 0 R (Item.70) 1981 0 R (Item.71) 1982 0 R]
+/Limits [(Item.67) (Item.71)]
+>> endobj
+4130 0 obj <<
+/Names [(Item.72) 1983 0 R (Item.73) 1984 0 R (Item.74) 1985 0 R (Item.75) 1986 0 R (Item.76) 1987 0 R (Item.77) 1988 0 R]
+/Limits [(Item.72) (Item.77)]
+>> endobj
+4131 0 obj <<
+/Names [(Item.78) 1989 0 R (Item.79) 2087 0 R (Item.8) 1411 0 R (Item.80) 2088 0 R (Item.81) 2089 0 R (Item.82) 2090 0 R]
+/Limits [(Item.78) (Item.82)]
+>> endobj
+4132 0 obj <<
+/Names [(Item.83) 2091 0 R (Item.84) 2092 0 R (Item.85) 2093 0 R (Item.86) 2094 0 R (Item.87) 2095 0 R (Item.88) 2096 0 R]
+/Limits [(Item.83) (Item.88)]
+>> endobj
+4133 0 obj <<
+/Names [(Item.89) 2097 0 R (Item.9) 1412 0 R (Item.90) 2098 0 R (Item.91) 2099 0 R (Item.92) 2100 0 R (Item.93) 2114 0 R]
+/Limits [(Item.89) (Item.93)]
+>> endobj
+4134 0 obj <<
+/Names [(Item.94) 2115 0 R (Item.95) 2116 0 R (Item.96) 2117 0 R (Item.97) 2118 0 R (Item.98) 2119 0 R (Item.99) 2120 0 R]
+/Limits [(Item.94) (Item.99)]
+>> endobj
+4135 0 obj <<
+/Names [(appendix*.252) 2903 0 R (appendix.A) 666 0 R (appendix.B) 702 0 R (chapter*.1) 786 0 R (chapter*.2) 954 0 R (chapter*.4) 981 0 R]
+/Limits [(appendix*.252) (chapter*.4)]
+>> endobj
+4136 0 obj <<
+/Names [(chapter.1) 14 0 R (chapter.2) 46 0 R (chapter.3) 106 0 R (chapter.4) 118 0 R (chapter.5) 306 0 R (chapter.6) 390 0 R]
+/Limits [(chapter.1) (chapter.6)]
+>> endobj
+4137 0 obj <<
+/Names [(chapter.7) 542 0 R (chapter.8) 578 0 R (chapter.9) 602 0 R (cite.BCP:96) 1101 0 R (cite.BHP:94) 1014 0 R (cite.BHP:98) 1015 0 R]
+/Limits [(chapter.7) (cite.BHP:98)]
+>> endobj
+4138 0 obj <<
+/Names [(cite.BrHi:89) 1124 0 R (cite.ByHi:98) 1018 0 R (cite.ByHi:99) 1019 0 R (cite.Byr:92) 1363 0 R (cite.CLPS:03) 1236 0 R (cite.CaSt:85) 1200 0 R]
+/Limits [(cite.BrHi:89) (cite.CaSt:85)]
+>> endobj
+4139 0 obj <<
+/Names [(cite.CoHi:96) 1017 0 R (cite.DGL:99) 1122 0 R (cite.DaPa:10) 1119 0 R (cite.FTB:97) 1203 0 R (cite.Fre:93) 1026 0 R (cite.HBGLSSW:05) 1013 0 R]
+/Limits [(cite.CoHi:96) (cite.HBGLSSW:05)]
+>> endobj
+4140 0 obj <<
+/Names [(cite.HeSh:80) 1158 0 R (cite.HiTa:98) 1893 0 R (cite.KLU_site) 1120 0 R (cite.LPZ:99) 1201 0 R (cite.Li:05) 1121 0 R (cite.MaPe:97) 1202 0 R]
+/Limits [(cite.HeSh:80) (cite.MaPe:97)]
+>> endobj
+4141 0 obj <<
+/Names [(cite.OzBa:05) 1301 0 R (cite.SaSc:86) 1024 0 R (cite.SeHi:05) 1022 0 R (cite.SuperLUMT_site) 1123 0 R (cite.Van:92) 1025 0 R (cite.arkode_ex) 2633 0 R]
+/Limits [(cite.OzBa:05) (cite.arkode_ex)]
+>> endobj
+4142 0 obj <<
+/Names [(cite.cvode_ex) 2632 0 R (cite.cvode_ug) 1016 0 R (cite.cvodes_ug) 1021 0 R (cite.ida_ex) 2642 0 R (cite.ida_ug) 1020 0 R (cite.idas_ex) 1373 0 R]
+/Limits [(cite.cvode_ex) (cite.idas_ex)]
+>> endobj
+4143 0 obj <<
+/Names [(cite.kinsol_ug) 1023 0 R (equation.2.1) 1093 0 R (equation.2.10) 1157 0 R (equation.2.11) 1179 0 R (equation.2.12) 1180 0 R (equation.2.13) 1198 0 R]
+/Limits [(cite.kinsol_ug) (equation.2.13)]
+>> endobj
+4144 0 obj <<
+/Names [(equation.2.14) 1199 0 R (equation.2.15) 1219 0 R (equation.2.16) 1221 0 R (equation.2.17) 1233 0 R (equation.2.18) 1235 0 R (equation.2.19) 1250 0 R]
+/Limits [(equation.2.14) (equation.2.19)]
+>> endobj
+4145 0 obj <<
+/Names [(equation.2.2) 1097 0 R (equation.2.20) 1251 0 R (equation.2.21) 1252 0 R (equation.2.22) 1253 0 R (equation.2.23) 1254 0 R (equation.2.24) 1255 0 R]
+/Limits [(equation.2.2) (equation.2.24)]
+>> endobj
+4146 0 obj <<
+/Names [(equation.2.25) 1256 0 R (equation.2.26) 1269 0 R (equation.2.27) 1312 0 R (equation.2.3) 1098 0 R (equation.2.4) 1115 0 R (equation.2.5) 1116 0 R]
+/Limits [(equation.2.25) (equation.2.5)]
+>> endobj
+4147 0 obj <<
+/Names [(equation.2.6) 1117 0 R (equation.2.7) 1118 0 R (equation.2.8) 1133 0 R (equation.2.9) 1142 0 R (equation.4.1) 1888 0 R (equation.4.2) 1889 0 R]
+/Limits [(equation.2.6) (equation.4.2)]
+>> endobj
+4148 0 obj <<
+/Names [(equation.4.3) 1890 0 R (equation.4.4) 1891 0 R (equation.4.5) 1892 0 R (figure.2.1) 984 0 R (figure.3.1) 985 0 R (figure.3.2) 986 0 R]
+/Limits [(equation.4.3) (figure.3.2)]
+>> endobj
+4149 0 obj <<
+/Names [(figure.9.1) 987 0 R (figure.9.2) 988 0 R (figure.A.1) 989 0 R (figure.A.2) 990 0 R (page.1) 1012 0 R (page.10) 1141 0 R]
+/Limits [(figure.9.1) (page.10)]
+>> endobj
+4150 0 obj <<
+/Names [(page.100) 2057 0 R (page.101) 2066 0 R (page.102) 2077 0 R (page.103) 2086 0 R (page.104) 2113 0 R (page.105) 2131 0 R]
+/Limits [(page.100) (page.105)]
+>> endobj
+4151 0 obj <<
+/Names [(page.106) 2138 0 R (page.107) 2144 0 R (page.108) 2150 0 R (page.109) 2159 0 R (page.11) 1150 0 R (page.110) 2167 0 R]
+/Limits [(page.106) (page.110)]
+>> endobj
+4152 0 obj <<
+/Names [(page.111) 2178 0 R (page.112) 2183 0 R (page.113) 2196 0 R (page.114) 2211 0 R (page.115) 2241 0 R (page.116) 2253 0 R]
+/Limits [(page.111) (page.116)]
+>> endobj
+4153 0 obj <<
+/Names [(page.117) 2261 0 R (page.118) 2270 0 R (page.119) 2275 0 R (page.12) 1156 0 R (page.120) 2283 0 R (page.121) 2292 0 R]
+/Limits [(page.117) (page.121)]
+>> endobj
+4154 0 obj <<
+/Names [(page.122) 2301 0 R (page.123) 2308 0 R (page.124) 2316 0 R (page.125) 2323 0 R (page.126) 2330 0 R (page.127) 2340 0 R]
+/Limits [(page.122) (page.127)]
+>> endobj
+4155 0 obj <<
+/Names [(page.128) 2351 0 R (page.129) 2359 0 R (page.13) 1178 0 R (page.130) 2369 0 R (page.131) 2375 0 R (page.132) 2384 0 R]
+/Limits [(page.128) (page.132)]
+>> endobj
+4156 0 obj <<
+/Names [(page.133) 2391 0 R (page.134) 2402 0 R (page.135) 2413 0 R (page.136) 2421 0 R (page.137) 2431 0 R (page.138) 2438 0 R]
+/Limits [(page.133) (page.138)]
+>> endobj
+4157 0 obj <<
+/Names [(page.139) 2449 0 R (page.14) 1197 0 R (page.140) 2456 0 R (page.141) 2463 0 R (page.142) 2474 0 R (page.143) 2482 0 R]
+/Limits [(page.139) (page.143)]
+>> endobj
+4158 0 obj <<
+/Names [(page.144) 2491 0 R (page.145) 2499 0 R (page.146) 2505 0 R (page.147) 2512 0 R (page.148) 2521 0 R (page.149) 2526 0 R]
+/Limits [(page.144) (page.149)]
+>> endobj
+4159 0 obj <<
+/Names [(page.15) 1218 0 R (page.150) 2534 0 R (page.151) 2539 0 R (page.152) 2544 0 R (page.153) 2548 0 R (page.154) 2555 0 R]
+/Limits [(page.15) (page.154)]
+>> endobj
+4160 0 obj <<
+/Names [(page.155) 2560 0 R (page.156) 2565 0 R (page.157) 2569 0 R (page.158) 2573 0 R (page.159) 2579 0 R (page.16) 1232 0 R]
+/Limits [(page.155) (page.16)]
+>> endobj
+4161 0 obj <<
+/Names [(page.160) 2584 0 R (page.161) 2591 0 R (page.162) 2595 0 R (page.163) 2600 0 R (page.164) 2606 0 R (page.165) 2610 0 R]
+/Limits [(page.160) (page.165)]
+>> endobj
+4162 0 obj <<
+/Names [(page.166) 2618 0 R (page.167) 2625 0 R (page.168) 2631 0 R (page.169) 2640 0 R (page.17) 1249 0 R (page.170) 2646 0 R]
+/Limits [(page.166) (page.170)]
+>> endobj
+4163 0 obj <<
+/Names [(page.171) 2651 0 R (page.172) 2658 0 R (page.173) 2662 0 R (page.174) 2666 0 R (page.175) 2672 0 R (page.176) 2677 0 R]
+/Limits [(page.171) (page.176)]
+>> endobj
+4164 0 obj <<
+/Names [(page.177) 2685 0 R (page.178) 2691 0 R (page.179) 2702 0 R (page.18) 1268 0 R (page.180) 2706 0 R (page.181) 2712 0 R]
+/Limits [(page.177) (page.181)]
+>> endobj
+4165 0 obj <<
+/Names [(page.182) 2716 0 R (page.183) 2727 0 R (page.184) 2732 0 R (page.185) 2736 0 R (page.186) 2742 0 R (page.187) 2746 0 R]
+/Limits [(page.182) (page.187)]
+>> endobj
+4166 0 obj <<
+/Names [(page.188) 2751 0 R (page.189) 2756 0 R (page.19) 1290 0 R (page.190) 2761 0 R (page.191) 2774 0 R (page.192) 2789 0 R]
+/Limits [(page.188) (page.192)]
+>> endobj
+4167 0 obj <<
+/Names [(page.193) 2793 0 R (page.194) 2797 0 R (page.195) 2801 0 R (page.196) 2807 0 R (page.197) 2816 0 R (page.198) 2820 0 R]
+/Limits [(page.193) (page.198)]
+>> endobj
+4168 0 obj <<
+/Names [(page.199) 2825 0 R (page.2) 1030 0 R (page.20) 1311 0 R (page.200) 2829 0 R (page.201) 2833 0 R (page.202) 2838 0 R]
+/Limits [(page.199) (page.202)]
+>> endobj
+4169 0 obj <<
+/Names [(page.203) 2847 0 R (page.204) 2865 0 R (page.205) 2869 0 R (page.206) 2873 0 R (page.207) 2877 0 R (page.208) 2882 0 R]
+/Limits [(page.203) (page.208)]
+>> endobj
+4170 0 obj <<
+/Names [(page.209) 2886 0 R (page.21) 1323 0 R (page.210) 2890 0 R (page.211) 2894 0 R (page.212) 2898 0 R (page.213) 2902 0 R]
+/Limits [(page.209) (page.213)]
+>> endobj
+4171 0 obj <<
+/Names [(page.214) 2908 0 R (page.215) 3036 0 R (page.216) 3292 0 R (page.217) 3447 0 R (page.218) 3598 0 R (page.219) 3778 0 R]
+/Limits [(page.214) (page.219)]
+>> endobj
+4172 0 obj <<
+/Names [(page.22) 1328 0 R (page.220) 3910 0 R (page.221) 4013 0 R (page.222) 4017 0 R (page.23) 1347 0 R (page.24) 1362 0 R]
+/Limits [(page.22) (page.24)]
+>> endobj
+4173 0 obj <<
+/Names [(page.25) 1372 0 R (page.26) 1380 0 R (page.27) 1390 0 R (page.28) 1409 0 R (page.29) 1427 0 R (page.3) 1048 0 R]
+/Limits [(page.25) (page.3)]
+>> endobj
+4174 0 obj <<
+/Names [(page.30) 1439 0 R (page.31) 1448 0 R (page.32) 1457 0 R (page.33) 1464 0 R (page.34) 1471 0 R (page.35) 1477 0 R]
+/Limits [(page.30) (page.35)]
+>> endobj
+4175 0 obj <<
+/Names [(page.36) 1485 0 R (page.37) 1493 0 R (page.38) 1499 0 R (page.39) 1508 0 R (page.4) 1065 0 R (page.40) 1514 0 R]
+/Limits [(page.36) (page.40)]
+>> endobj
+4176 0 obj <<
+/Names [(page.41) 1520 0 R (page.42) 1524 0 R (page.43) 1532 0 R (page.44) 1541 0 R (page.45) 1551 0 R (page.46) 1560 0 R]
+/Limits [(page.41) (page.46)]
+>> endobj
+4177 0 obj <<
+/Names [(page.47) 1567 0 R (page.48) 1574 0 R (page.49) 1584 0 R (page.5) 1076 0 R (page.50) 1591 0 R (page.51) 1600 0 R]
+/Limits [(page.47) (page.51)]
+>> endobj
+4178 0 obj <<
+/Names [(page.52) 1608 0 R (page.53) 1615 0 R (page.54) 1622 0 R (page.55) 1632 0 R (page.56) 1637 0 R (page.57) 1643 0 R]
+/Limits [(page.52) (page.57)]
+>> endobj
+4179 0 obj <<
+/Names [(page.58) 1650 0 R (page.59) 1658 0 R (page.6) 1083 0 R (page.60) 1667 0 R (page.61) 1675 0 R (page.62) 1682 0 R]
+/Limits [(page.58) (page.62)]
+>> endobj
+4180 0 obj <<
+/Names [(page.63) 1690 0 R (page.64) 1697 0 R (page.65) 1705 0 R (page.66) 1712 0 R (page.67) 1720 0 R (page.68) 1729 0 R]
+/Limits [(page.63) (page.68)]
+>> endobj
+4181 0 obj <<
+/Names [(page.69) 1735 0 R (page.7) 1092 0 R (page.70) 1743 0 R (page.71) 1750 0 R (page.72) 1762 0 R (page.73) 1772 0 R]
+/Limits [(page.69) (page.73)]
+>> endobj
+4182 0 obj <<
+/Names [(page.74) 1785 0 R (page.75) 1796 0 R (page.76) 1804 0 R (page.77) 1813 0 R (page.78) 1831 0 R (page.79) 1849 0 R]
+/Limits [(page.74) (page.79)]
+>> endobj
+4183 0 obj <<
+/Names [(page.8) 1114 0 R (page.80) 1855 0 R (page.81) 1861 0 R (page.82) 1869 0 R (page.83) 1879 0 R (page.84) 1887 0 R]
+/Limits [(page.8) (page.84)]
+>> endobj
+4184 0 obj <<
+/Names [(page.85) 1899 0 R (page.86) 1906 0 R (page.87) 1927 0 R (page.88) 1935 0 R (page.89) 1951 0 R (page.9) 1131 0 R]
+/Limits [(page.85) (page.9)]
+>> endobj
+4185 0 obj <<
+/Names [(page.90) 1962 0 R (page.91) 1976 0 R (page.92) 1995 0 R (page.93) 1999 0 R (page.94) 2008 0 R (page.95) 2017 0 R]
+/Limits [(page.90) (page.95)]
+>> endobj
+4186 0 obj <<
+/Names [(page.96) 2022 0 R (page.97) 2033 0 R (page.98) 2040 0 R (page.99) 2047 0 R (page.i) 726 0 R (page.ii) 739 0 R]
+/Limits [(page.96) (page.ii)]
+>> endobj
+4187 0 obj <<
+/Names [(page.iii) 784 0 R (page.iv) 844 0 R (page.ix) 980 0 R (page.v) 897 0 R (page.vi) 939 0 R (page.vii) 953 0 R]
+/Limits [(page.iii) (page.vii)]
+>> endobj
+4188 0 obj <<
+/Names [(page.viii) 969 0 R (page.x) 994 0 R (section*.100) 1715 0 R (section*.101) 1716 0 R (section*.102) 1721 0 R (section*.103) 1722 0 R]
+/Limits [(page.viii) (section*.103)]
+>> endobj
+4189 0 obj <<
+/Names [(section*.104) 1723 0 R (section*.105) 1730 0 R (section*.106) 1731 0 R (section*.107) 1736 0 R (section*.108) 1737 0 R (section*.109) 1744 0 R]
+/Limits [(section*.104) (section*.109)]
+>> endobj
+4190 0 obj <<
+/Names [(section*.11) 1440 0 R (section*.110) 1751 0 R (section*.111) 1752 0 R (section*.112) 1763 0 R (section*.113) 1773 0 R (section*.114) 1786 0 R]
+/Limits [(section*.11) (section*.114)]
+>> endobj
+4191 0 obj <<
+/Names [(section*.115) 1797 0 R (section*.116) 1805 0 R (section*.117) 1806 0 R (section*.118) 1844 0 R (section*.119) 1850 0 R (section*.12) 1441 0 R]
+/Limits [(section*.115) (section*.12)]
+>> endobj
+4192 0 obj <<
+/Names [(section*.120) 1851 0 R (section*.121) 1856 0 R (section*.122) 1857 0 R (section*.123) 1862 0 R (section*.124) 1863 0 R (section*.125) 1864 0 R]
+/Limits [(section*.120) (section*.125)]
+>> endobj
+4193 0 obj <<
+/Names [(section*.126) 1870 0 R (section*.127) 1871 0 R (section*.128) 1872 0 R (section*.129) 1880 0 R (section*.13) 1442 0 R (section*.130) 1881 0 R]
+/Limits [(section*.126) (section*.130)]
+>> endobj
+4194 0 obj <<
+/Names [(section*.131) 1900 0 R (section*.132) 1901 0 R (section*.133) 1923 0 R (section*.134) 1928 0 R (section*.135) 1936 0 R (section*.136) 1937 0 R]
+/Limits [(section*.131) (section*.136)]
+>> endobj
+4195 0 obj <<
+/Names [(section*.137) 1990 0 R (section*.138) 2000 0 R (section*.139) 2001 0 R (section*.14) 1449 0 R (section*.140) 2002 0 R (section*.141) 2009 0 R]
+/Limits [(section*.137) (section*.141)]
+>> endobj
+4196 0 obj <<
+/Names [(section*.142) 2010 0 R (section*.143) 2011 0 R (section*.144) 2018 0 R (section*.145) 2023 0 R (section*.146) 2024 0 R (section*.147) 2025 0 R]
+/Limits [(section*.142) (section*.147)]
+>> endobj
+4197 0 obj <<
+/Names [(section*.148) 2034 0 R (section*.149) 2041 0 R (section*.15) 1450 0 R (section*.150) 2042 0 R (section*.151) 2043 0 R (section*.152) 2048 0 R]
+/Limits [(section*.148) (section*.152)]
+>> endobj
+4198 0 obj <<
+/Names [(section*.153) 2049 0 R (section*.154) 2058 0 R (section*.155) 2059 0 R (section*.156) 2060 0 R (section*.157) 2067 0 R (section*.158) 2068 0 R]
+/Limits [(section*.153) (section*.158)]
+>> endobj
+4199 0 obj <<
+/Names [(section*.159) 2069 0 R (section*.16) 1451 0 R (section*.160) 2070 0 R (section*.161) 2078 0 R (section*.162) 2079 0 R (section*.163) 2126 0 R]
+/Limits [(section*.159) (section*.163)]
+>> endobj
+4200 0 obj <<
+/Names [(section*.164) 2132 0 R (section*.165) 2133 0 R (section*.166) 2139 0 R (section*.167) 2140 0 R (section*.168) 2145 0 R (section*.169) 2146 0 R]
+/Limits [(section*.164) (section*.169)]
+>> endobj
+4201 0 obj <<
+/Names [(section*.17) 1465 0 R (section*.170) 2151 0 R (section*.171) 2152 0 R (section*.172) 2153 0 R (section*.173) 2160 0 R (section*.174) 2161 0 R]
+/Limits [(section*.17) (section*.174)]
+>> endobj
+4202 0 obj <<
+/Names [(section*.175) 2162 0 R (section*.176) 2168 0 R (section*.177) 2169 0 R (section*.178) 2170 0 R (section*.179) 2254 0 R (section*.18) 1466 0 R]
+/Limits [(section*.175) (section*.18)]
+>> endobj
+4203 0 obj <<
+/Names [(section*.180) 2255 0 R (section*.181) 2262 0 R (section*.182) 2263 0 R (section*.183) 2264 0 R (section*.184) 2276 0 R (section*.185) 2277 0 R]
+/Limits [(section*.180) (section*.185)]
+>> endobj
+4204 0 obj <<
+/Names [(section*.186) 2284 0 R (section*.187) 2285 0 R (section*.188) 2293 0 R (section*.189) 2294 0 R (section*.19) 1472 0 R (section*.190) 2302 0 R]
+/Limits [(section*.186) (section*.190)]
+>> endobj
+4205 0 obj <<
+/Names [(section*.191) 2309 0 R (section*.192) 2310 0 R (section*.193) 2317 0 R (section*.194) 2324 0 R (section*.195) 2331 0 R (section*.196) 2332 0 R]
+/Limits [(section*.191) (section*.196)]
+>> endobj
+4206 0 obj <<
+/Names [(section*.197) 2333 0 R (section*.198) 2341 0 R (section*.199) 2342 0 R (section*.20) 1473 0 R (section*.200) 2352 0 R (section*.201) 2353 0 R]
+/Limits [(section*.197) (section*.201)]
+>> endobj
+4207 0 obj <<
+/Names [(section*.202) 2360 0 R (section*.203) 2361 0 R (section*.204) 2362 0 R (section*.205) 2370 0 R (section*.206) 2371 0 R (section*.207) 2376 0 R]
+/Limits [(section*.202) (section*.207)]
+>> endobj
+4208 0 obj <<
+/Names [(section*.208) 2377 0 R (section*.209) 2378 0 R (section*.21) 1478 0 R (section*.210) 2385 0 R (section*.211) 2386 0 R (section*.212) 2392 0 R]
+/Limits [(section*.208) (section*.212)]
+>> endobj
+4209 0 obj <<
+/Names [(section*.213) 2393 0 R (section*.214) 2403 0 R (section*.215) 2414 0 R (section*.216) 2422 0 R (section*.217) 2432 0 R (section*.218) 2439 0 R]
+/Limits [(section*.213) (section*.218)]
+>> endobj
+4210 0 obj <<
+/Names [(section*.219) 2440 0 R (section*.22) 1479 0 R (section*.220) 2450 0 R (section*.221) 2457 0 R (section*.222) 2475 0 R (section*.223) 2483 0 R]
+/Limits [(section*.219) (section*.223)]
+>> endobj
+4211 0 obj <<
+/Names [(section*.224) 2492 0 R (section*.225) 2493 0 R (section*.226) 2500 0 R (section*.227) 2506 0 R (section*.228) 2513 0 R (section*.229) 2522 0 R]
+/Limits [(section*.224) (section*.229)]
+>> endobj
+4212 0 obj <<
+/Names [(section*.23) 1486 0 R (section*.230) 2527 0 R (section*.231) 2528 0 R (section*.232) 2535 0 R (section*.233) 2540 0 R (section*.234) 2585 0 R]
+/Limits [(section*.23) (section*.234)]
+>> endobj
+4213 0 obj <<
+/Names [(section*.235) 2596 0 R (section*.236) 2611 0 R (section*.237) 2626 0 R (section*.238) 2641 0 R (section*.239) 2647 0 R (section*.24) 1487 0 R]
+/Limits [(section*.235) (section*.24)]
+>> endobj
+4214 0 obj <<
+/Names [(section*.240) 2678 0 R (section*.241) 2679 0 R (section*.242) 2686 0 R (section*.243) 2692 0 R (section*.244) 2693 0 R (section*.245) 2808 0 R]
+/Limits [(section*.240) (section*.245)]
+>> endobj
+4215 0 obj <<
+/Names [(section*.246) 2821 0 R (section*.247) 2839 0 R (section*.248) 2840 0 R (section*.249) 2841 0 R (section*.25) 1488 0 R (section*.250) 2842 0 R]
+/Limits [(section*.246) (section*.250)]
+>> endobj
+4216 0 obj <<
+/Names [(section*.251) 2843 0 R (section*.253) 714 0 R (section*.254) 718 0 R (section*.26) 1494 0 R (section*.27) 1500 0 R (section*.28) 1501 0 R]
+/Limits [(section*.251) (section*.28)]
+>> endobj
+4217 0 obj <<
+/Names [(section*.29) 1515 0 R (section*.3) 6 0 R (section*.30) 1516 0 R (section*.31) 1525 0 R (section*.32) 1526 0 R (section*.33) 1527 0 R]
+/Limits [(section*.29) (section*.33)]
+>> endobj
+4218 0 obj <<
+/Names [(section*.34) 1528 0 R (section*.35) 1533 0 R (section*.36) 1534 0 R (section*.37) 1535 0 R (section*.38) 1542 0 R (section*.39) 1543 0 R]
+/Limits [(section*.34) (section*.39)]
+>> endobj
+4219 0 obj <<
+/Names [(section*.40) 1544 0 R (section*.41) 1545 0 R (section*.42) 1552 0 R (section*.43) 1553 0 R (section*.44) 1561 0 R (section*.45) 1562 0 R]
+/Limits [(section*.40) (section*.45)]
+>> endobj
+4220 0 obj <<
+/Names [(section*.46) 1568 0 R (section*.47) 1569 0 R (section*.48) 1575 0 R (section*.49) 1576 0 R (section*.5) 10 0 R (section*.50) 1585 0 R]
+/Limits [(section*.46) (section*.50)]
+>> endobj
+4221 0 obj <<
+/Names [(section*.51) 1586 0 R (section*.52) 1592 0 R (section*.53) 1593 0 R (section*.54) 1594 0 R (section*.55) 1601 0 R (section*.56) 1602 0 R]
+/Limits [(section*.51) (section*.56)]
+>> endobj
+4222 0 obj <<
+/Names [(section*.57) 1603 0 R (section*.58) 1609 0 R (section*.59) 1610 0 R (section*.6) 1032 0 R (section*.60) 1611 0 R (section*.61) 1616 0 R]
+/Limits [(section*.57) (section*.61)]
+>> endobj
+4223 0 obj <<
+/Names [(section*.62) 1617 0 R (section*.63) 1618 0 R (section*.64) 1623 0 R (section*.65) 1624 0 R (section*.66) 1625 0 R (section*.67) 1633 0 R]
+/Limits [(section*.62) (section*.67)]
+>> endobj
+4224 0 obj <<
+/Names [(section*.68) 1644 0 R (section*.69) 1645 0 R (section*.7) 1033 0 R (section*.70) 1651 0 R (section*.71) 1652 0 R (section*.72) 1653 0 R]
+/Limits [(section*.68) (section*.72)]
+>> endobj
+4225 0 obj <<
+/Names [(section*.73) 1654 0 R (section*.74) 1659 0 R (section*.75) 1660 0 R (section*.76) 1661 0 R (section*.77) 1662 0 R (section*.78) 1668 0 R]
+/Limits [(section*.73) (section*.78)]
+>> endobj
+4226 0 obj <<
+/Names [(section*.79) 1669 0 R (section*.8) 1049 0 R (section*.80) 1670 0 R (section*.81) 1671 0 R (section*.82) 1676 0 R (section*.83) 1677 0 R]
+/Limits [(section*.79) (section*.83)]
+>> endobj
+4227 0 obj <<
+/Names [(section*.84) 1678 0 R (section*.85) 1683 0 R (section*.86) 1684 0 R (section*.87) 1685 0 R (section*.88) 1686 0 R (section*.89) 1691 0 R]
+/Limits [(section*.84) (section*.89)]
+>> endobj
+4228 0 obj <<
+/Names [(section*.90) 1692 0 R (section*.91) 1698 0 R (section*.92) 1699 0 R (section*.93) 1700 0 R (section*.94) 1701 0 R (section*.95) 1706 0 R]
+/Limits [(section*.90) (section*.95)]
+>> endobj
+4229 0 obj <<
+/Names [(section*.96) 1707 0 R (section*.97) 1708 0 R (section*.98) 1713 0 R (section*.99) 1714 0 R (section.1.1) 18 0 R (section.1.2) 22 0 R]
+/Limits [(section*.96) (section.1.2)]
+>> endobj
+4230 0 obj <<
+/Names [(section.1.3) 26 0 R (section.2.1) 50 0 R (section.2.2) 54 0 R (section.2.3) 58 0 R (section.2.4) 62 0 R (section.2.5) 66 0 R]
+/Limits [(section.1.3) (section.2.5)]
+>> endobj
+4231 0 obj <<
+/Names [(section.2.6) 86 0 R (section.2.7) 102 0 R (section.3.1) 110 0 R (section.3.2) 114 0 R (section.4.1) 122 0 R (section.4.2) 126 0 R]
+/Limits [(section.2.6) (section.4.2)]
+>> endobj
+4232 0 obj <<
+/Names [(section.4.3) 130 0 R (section.4.4) 134 0 R (section.4.5) 138 0 R (section.4.6) 230 0 R (section.4.7) 274 0 R (section.4.8) 302 0 R]
+/Limits [(section.4.3) (section.4.8)]
+>> endobj
+4233 0 obj <<
+/Names [(section.5.1) 310 0 R (section.5.2) 314 0 R (section.5.3) 354 0 R (section.5.4) 358 0 R (section.5.5) 386 0 R (section.6.1) 394 0 R]
+/Limits [(section.5.1) (section.6.1)]
+>> endobj
+4234 0 obj <<
+/Names [(section.6.2) 398 0 R (section.6.3) 486 0 R (section.6.4) 530 0 R (section.7.1) 546 0 R (section.7.2) 550 0 R (section.7.3) 554 0 R]
+/Limits [(section.6.2) (section.7.3)]
+>> endobj
+4235 0 obj <<
+/Names [(section.7.4) 558 0 R (section.7.5) 562 0 R (section.7.6) 566 0 R (section.7.7) 570 0 R (section.7.8) 574 0 R (section.8.1) 582 0 R]
+/Limits [(section.7.4) (section.8.1)]
+>> endobj
+4236 0 obj <<
+/Names [(section.8.2) 586 0 R (section.8.3) 590 0 R (section.8.4) 594 0 R (section.8.5) 598 0 R (section.9.1) 606 0 R (section.9.2) 626 0 R]
+/Limits [(section.8.2) (section.9.2)]
+>> endobj
+4237 0 obj <<
+/Names [(section.9.3) 646 0 R (section.A.1) 670 0 R (section.A.2) 690 0 R (section.A.3) 694 0 R (section.A.4) 698 0 R (section.B.1) 706 0 R]
+/Limits [(section.9.3) (section.B.1)]
+>> endobj
+4238 0 obj <<
+/Names [(section.B.2) 710 0 R (subfigure.3.1.1) 1329 0 R (subfigure.3.1.2) 1330 0 R (subsection.1.3.1) 30 0 R (subsection.1.3.2) 42 0 R (subsection.2.5.1) 70 0 R]
+/Limits [(section.B.2) (subsection.2.5.1)]
+>> endobj
+4239 0 obj <<
+/Names [(subsection.2.5.2) 74 0 R (subsection.2.5.3) 78 0 R (subsection.2.5.4) 82 0 R (subsection.2.6.1) 90 0 R (subsection.2.6.2) 94 0 R (subsection.2.6.3) 98 0 R]
+/Limits [(subsection.2.5.2) (subsection.2.6.3)]
+>> endobj
+4240 0 obj <<
+/Names [(subsection.4.5.1) 142 0 R (subsection.4.5.10) 226 0 R (subsection.4.5.2) 146 0 R (subsection.4.5.3) 150 0 R (subsection.4.5.4) 154 0 R (subsection.4.5.5) 158 0 R]
+/Limits [(subsection.4.5.1) (subsection.4.5.5)]
+>> endobj
+4241 0 obj <<
+/Names [(subsection.4.5.6) 162 0 R (subsection.4.5.7) 166 0 R (subsection.4.5.8) 194 0 R (subsection.4.5.9) 198 0 R (subsection.4.6.1) 234 0 R (subsection.4.6.10) 270 0 R]
+/Limits [(subsection.4.5.6) (subsection.4.6.10)]
+>> endobj
+4242 0 obj <<
+/Names [(subsection.4.6.2) 238 0 R (subsection.4.6.3) 242 0 R (subsection.4.6.4) 246 0 R (subsection.4.6.5) 250 0 R (subsection.4.6.6) 254 0 R (subsection.4.6.7) 258 0 R]
+/Limits [(subsection.4.6.2) (subsection.4.6.7)]
+>> endobj
+4243 0 obj <<
+/Names [(subsection.4.6.8) 262 0 R (subsection.4.6.9) 266 0 R (subsection.4.7.1) 278 0 R (subsection.4.7.2) 282 0 R (subsection.4.7.3) 286 0 R (subsection.4.7.4) 290 0 R]
+/Limits [(subsection.4.6.8) (subsection.4.7.4)]
+>> endobj
+4244 0 obj <<
+/Names [(subsection.4.7.5) 294 0 R (subsection.4.7.6) 298 0 R (subsection.5.2.1) 318 0 R (subsection.5.2.2) 322 0 R (subsection.5.2.3) 326 0 R (subsection.5.2.4) 330 0 R]
+/Limits [(subsection.4.7.5) (subsection.5.2.4)]
+>> endobj
+4245 0 obj <<
+/Names [(subsection.5.2.5) 334 0 R (subsection.5.2.6) 338 0 R (subsection.5.2.7) 342 0 R (subsection.5.4.1) 362 0 R (subsection.5.4.2) 366 0 R (subsection.5.4.3) 370 0 R]
+/Limits [(subsection.5.2.5) (subsection.5.4.3)]
+>> endobj
+4246 0 obj <<
+/Names [(subsection.5.4.4) 374 0 R (subsection.5.4.5) 378 0 R (subsection.5.4.6) 382 0 R (subsection.6.2.1) 402 0 R (subsection.6.2.10) 458 0 R (subsection.6.2.11) 470 0 R]
+/Limits [(subsection.5.4.4) (subsection.6.2.11)]
+>> endobj
+4247 0 obj <<
+/Names [(subsection.6.2.2) 406 0 R (subsection.6.2.3) 410 0 R (subsection.6.2.4) 414 0 R (subsection.6.2.5) 418 0 R (subsection.6.2.6) 422 0 R (subsection.6.2.7) 426 0 R]
+/Limits [(subsection.6.2.2) (subsection.6.2.7)]
+>> endobj
+4248 0 obj <<
+/Names [(subsection.6.2.8) 430 0 R (subsection.6.2.9) 434 0 R (subsection.6.3.1) 490 0 R (subsection.6.3.10) 526 0 R (subsection.6.3.2) 494 0 R (subsection.6.3.3) 498 0 R]
+/Limits [(subsection.6.2.8) (subsection.6.3.3)]
+>> endobj
+4249 0 obj <<
+/Names [(subsection.6.3.4) 502 0 R (subsection.6.3.5) 506 0 R (subsection.6.3.6) 510 0 R (subsection.6.3.7) 514 0 R (subsection.6.3.8) 518 0 R (subsection.6.3.9) 522 0 R]
+/Limits [(subsection.6.3.4) (subsection.6.3.9)]
+>> endobj
+4250 0 obj <<
+/Names [(subsection.6.4.1) 534 0 R (subsection.6.4.2) 538 0 R (subsection.9.1.1) 610 0 R (subsection.9.1.2) 614 0 R (subsection.9.1.3) 618 0 R (subsection.9.1.4) 622 0 R]
+/Limits [(subsection.6.4.1) (subsection.9.1.4)]
+>> endobj
+4251 0 obj <<
+/Names [(subsection.9.2.1) 630 0 R (subsection.9.2.2) 634 0 R (subsection.9.2.3) 638 0 R (subsection.9.2.4) 642 0 R (subsection.9.3.1) 650 0 R (subsection.9.3.2) 654 0 R]
+/Limits [(subsection.9.2.1) (subsection.9.3.2)]
+>> endobj
+4252 0 obj <<
+/Names [(subsection.9.3.3) 658 0 R (subsection.9.3.4) 662 0 R (subsection.A.1.1) 674 0 R (subsection.A.1.2) 678 0 R (subsection.A.1.3) 682 0 R (subsection.A.1.4) 686 0 R]
+/Limits [(subsection.9.3.3) (subsection.A.1.4)]
+>> endobj
+4253 0 obj <<
+/Names [(subsubsection.1.3.1.1) 34 0 R (subsubsection.1.3.1.2) 38 0 R (subsubsection.4.5.7.1) 170 0 R (subsubsection.4.5.7.2) 174 0 R (subsubsection.4.5.7.3) 178 0 R (subsubsection.4.5.7.4) 182 0 R]
+/Limits [(subsubsection.1.3.1.1) (subsubsection.4.5.7.4)]
+>> endobj
+4254 0 obj <<
+/Names [(subsubsection.4.5.7.5) 186 0 R (subsubsection.4.5.7.6) 190 0 R (subsubsection.4.5.9.1) 202 0 R (subsubsection.4.5.9.2) 206 0 R (subsubsection.4.5.9.3) 210 0 R (subsubsection.4.5.9.4) 214 0 R]
+/Limits [(subsubsection.4.5.7.5) (subsubsection.4.5.9.4)]
+>> endobj
+4255 0 obj <<
+/Names [(subsubsection.4.5.9.5) 218 0 R (subsubsection.4.5.9.6) 222 0 R (subsubsection.5.2.7.1) 346 0 R (subsubsection.5.2.7.2) 350 0 R (subsubsection.6.2.10.1) 462 0 R (subsubsection.6.2.10.2) 466 0 R]
+/Limits [(subsubsection.4.5.9.5) (subsubsection.6.2.10.2)]
+>> endobj
+4256 0 obj <<
+/Names [(subsubsection.6.2.11.1) 474 0 R (subsubsection.6.2.11.2) 478 0 R (subsubsection.6.2.11.3) 482 0 R (subsubsection.6.2.9.1) 438 0 R (subsubsection.6.2.9.2) 442 0 R (subsubsection.6.2.9.3) 446 0 R]
+/Limits [(subsubsection.6.2.11.1) (subsubsection.6.2.9.3)]
+>> endobj
+4257 0 obj <<
+/Names [(subsubsection.6.2.9.4) 450 0 R (subsubsection.6.2.9.5) 454 0 R (table.4.1) 956 0 R (table.4.2) 957 0 R (table.4.3) 958 0 R (table.5.1) 959 0 R]
+/Limits [(subsubsection.6.2.9.4) (table.5.1)]
+>> endobj
+4258 0 obj <<
+/Names [(table.5.2) 960 0 R (table.7.1) 961 0 R (table.7.2) 962 0 R (table.7.3) 963 0 R (table.A.1) 964 0 R (table.A.2) 965 0 R]
+/Limits [(table.5.2) (table.A.2)]
+>> endobj
+4259 0 obj <<
+/Kids [4110 0 R 4111 0 R 4112 0 R 4113 0 R 4114 0 R 4115 0 R]
+/Limits [(AMS.10) (Item.126)]
+>> endobj
+4260 0 obj <<
+/Kids [4116 0 R 4117 0 R 4118 0 R 4119 0 R 4120 0 R 4121 0 R]
+/Limits [(Item.127) (Item.28)]
+>> endobj
+4261 0 obj <<
+/Kids [4122 0 R 4123 0 R 4124 0 R 4125 0 R 4126 0 R 4127 0 R]
+/Limits [(Item.29) (Item.60)]
+>> endobj
+4262 0 obj <<
+/Kids [4128 0 R 4129 0 R 4130 0 R 4131 0 R 4132 0 R 4133 0 R]
+/Limits [(Item.61) (Item.93)]
+>> endobj
+4263 0 obj <<
+/Kids [4134 0 R 4135 0 R 4136 0 R 4137 0 R 4138 0 R 4139 0 R]
+/Limits [(Item.94) (cite.HBGLSSW:05)]
+>> endobj
+4264 0 obj <<
+/Kids [4140 0 R 4141 0 R 4142 0 R 4143 0 R 4144 0 R 4145 0 R]
+/Limits [(cite.HeSh:80) (equation.2.24)]
+>> endobj
+4265 0 obj <<
+/Kids [4146 0 R 4147 0 R 4148 0 R 4149 0 R 4150 0 R 4151 0 R]
+/Limits [(equation.2.25) (page.110)]
+>> endobj
+4266 0 obj <<
+/Kids [4152 0 R 4153 0 R 4154 0 R 4155 0 R 4156 0 R 4157 0 R]
+/Limits [(page.111) (page.143)]
+>> endobj
+4267 0 obj <<
+/Kids [4158 0 R 4159 0 R 4160 0 R 4161 0 R 4162 0 R 4163 0 R]
+/Limits [(page.144) (page.176)]
+>> endobj
+4268 0 obj <<
+/Kids [4164 0 R 4165 0 R 4166 0 R 4167 0 R 4168 0 R 4169 0 R]
+/Limits [(page.177) (page.208)]
+>> endobj
+4269 0 obj <<
+/Kids [4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R]
+/Limits [(page.209) (page.40)]
+>> endobj
+4270 0 obj <<
+/Kids [4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R]
+/Limits [(page.41) (page.73)]
+>> endobj
+4271 0 obj <<
+/Kids [4182 0 R 4183 0 R 4184 0 R 4185 0 R 4186 0 R 4187 0 R]
+/Limits [(page.74) (page.vii)]
+>> endobj
+4272 0 obj <<
+/Kids [4188 0 R 4189 0 R 4190 0 R 4191 0 R 4192 0 R 4193 0 R]
+/Limits [(page.viii) (section*.130)]
+>> endobj
+4273 0 obj <<
+/Kids [4194 0 R 4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R]
+/Limits [(section*.131) (section*.163)]
+>> endobj
+4274 0 obj <<
+/Kids [4200 0 R 4201 0 R 4202 0 R 4203 0 R 4204 0 R 4205 0 R]
+/Limits [(section*.164) (section*.196)]
+>> endobj
+4275 0 obj <<
+/Kids [4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R]
+/Limits [(section*.197) (section*.229)]
+>> endobj
+4276 0 obj <<
+/Kids [4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R]
+/Limits [(section*.23) (section*.33)]
+>> endobj
+4277 0 obj <<
+/Kids [4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R]
+/Limits [(section*.34) (section*.67)]
+>> endobj
+4278 0 obj <<
+/Kids [4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R 4229 0 R]
+/Limits [(section*.68) (section.1.2)]
+>> endobj
+4279 0 obj <<
+/Kids [4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R]
+/Limits [(section.1.3) (section.8.1)]
+>> endobj
+4280 0 obj <<
+/Kids [4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R]
+/Limits [(section.8.2) (subsection.4.6.10)]
+>> endobj
+4281 0 obj <<
+/Kids [4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R]
+/Limits [(subsection.4.6.2) (subsection.6.2.7)]
+>> endobj
+4282 0 obj <<
+/Kids [4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R]
+/Limits [(subsection.6.2.8) (subsubsection.4.5.7.4)]
+>> endobj
+4283 0 obj <<
+/Kids [4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R]
+/Limits [(subsubsection.4.5.7.5) (table.A.2)]
+>> endobj
+4284 0 obj <<
+/Kids [4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R]
+/Limits [(AMS.10) (equation.2.24)]
+>> endobj
+4285 0 obj <<
+/Kids [4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R]
+/Limits [(equation.2.25) (page.73)]
+>> endobj
+4286 0 obj <<
+/Kids [4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R]
+/Limits [(page.74) (section*.33)]
+>> endobj
+4287 0 obj <<
+/Kids [4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R]
+/Limits [(section*.34) (subsubsection.4.5.7.4)]
+>> endobj
+4288 0 obj <<
+/Kids [4283 0 R]
+/Limits [(subsubsection.4.5.7.5) (table.A.2)]
+>> endobj
+4289 0 obj <<
+/Kids [4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R]
+/Limits [(AMS.10) (table.A.2)]
+>> endobj
+4290 0 obj <<
+/Dests 4289 0 R
+>> endobj
+4291 0 obj <<
+/Type /Catalog
+/Pages 4108 0 R
+/Outlines 4109 0 R
+/Names 4290 0 R
+/PageMode/UseOutlines/PageLabels << /Nums [0 << /S /r >> 10 << /S /D >> ] >>
+/OpenAction 721 0 R
+>> endobj
+4292 0 obj <<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
+/CreationDate (D:20160926151736-07'00')
+/ModDate (D:20160926151736-07'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
+>> endobj
+xref
+0 4293
+0000000001 65535 f 
+0000000002 00000 f 
+0000000003 00000 f 
+0000000004 00000 f 
+0000001206 00000 f 
+0000000015 00000 n 
+0000066361 00000 n 
+0001653764 00000 n 
+0000000061 00000 n 
+0000000093 00000 n 
+0000068983 00000 n 
+0001653677 00000 n 
+0000000139 00000 n 
+0000000173 00000 n 
+0000075633 00000 n 
+0001653551 00000 n 
+0000000219 00000 n 
+0000000250 00000 n 
+0000079792 00000 n 
+0001653477 00000 n 
+0000000298 00000 n 
+0000000347 00000 n 
+0000086349 00000 n 
+0001653390 00000 n 
+0000000395 00000 n 
+0000000437 00000 n 
+0000093283 00000 n 
+0001653279 00000 n 
+0000000485 00000 n 
+0000000528 00000 n 
+0000093342 00000 n 
+0001653168 00000 n 
+0000000581 00000 n 
+0000000617 00000 n 
+0000093400 00000 n 
+0001653094 00000 n 
+0000000675 00000 n 
+0000000712 00000 n 
+0000096695 00000 n 
+0001653020 00000 n 
+0000000770 00000 n 
+0000000805 00000 n 
+0000096754 00000 n 
+0001652946 00000 n 
+0000000858 00000 n 
+0000000888 00000 n 
+0000101712 00000 n 
+0001652818 00000 n 
+0000000934 00000 n 
+0000000980 00000 n 
+0000101895 00000 n 
+0001652744 00000 n 
+0000001028 00000 n 
+0000001059 00000 n 
+0000126749 00000 n 
+0001652657 00000 n 
+0000001107 00000 n 
+0000001141 00000 n 
+0000126808 00000 n 
+0001652570 00000 n 
+0000001189 00000 n 
+0000001219 00000 n 
+0000133028 00000 n 
+0001652483 00000 n 
+0000001267 00000 n 
+0000001313 00000 n 
+0000139782 00000 n 
+0001652359 00000 n 
+0000001361 00000 n 
+0000001408 00000 n 
+0000139902 00000 n 
+0001652285 00000 n 
+0000001461 00000 n 
+0000001507 00000 n 
+0000147889 00000 n 
+0001652198 00000 n 
+0000001560 00000 n 
+0000001641 00000 n 
+0000154520 00000 n 
+0001652111 00000 n 
+0000001694 00000 n 
+0000001758 00000 n 
+0000160416 00000 n 
+0001652037 00000 n 
+0000001811 00000 n 
+0000001876 00000 n 
+0000160475 00000 n 
+0001651912 00000 n 
+0000001924 00000 n 
+0000001971 00000 n 
+0000160598 00000 n 
+0001651838 00000 n 
+0000002024 00000 n 
+0000002064 00000 n 
+0000166945 00000 n 
+0001651751 00000 n 
+0000002117 00000 n 
+0000002159 00000 n 
+0000173466 00000 n 
+0001651676 00000 n 
+0000002212 00000 n 
+0000002252 00000 n 
+0000187655 00000 n 
+0001651599 00000 n 
+0000002301 00000 n 
+0000002354 00000 n 
+0000196770 00000 n 
+0001651467 00000 n 
+0000002401 00000 n 
+0000002438 00000 n 
+0000196830 00000 n 
+0001651388 00000 n 
+0000002487 00000 n 
+0000002528 00000 n 
+0000196890 00000 n 
+0001651309 00000 n 
+0000002577 00000 n 
+0000002614 00000 n 
+0000287556 00000 n 
+0001651176 00000 n 
+0000002661 00000 n 
+0000002708 00000 n 
+0000287616 00000 n 
+0001651097 00000 n 
+0000002757 00000 n 
+0000002811 00000 n 
+0000292474 00000 n 
+0001651004 00000 n 
+0000002860 00000 n 
+0000002890 00000 n 
+0000292534 00000 n 
+0001650911 00000 n 
+0000002939 00000 n 
+0000002971 00000 n 
+0000297464 00000 n 
+0001650818 00000 n 
+0000003020 00000 n 
+0000003077 00000 n 
+0000312899 00000 n 
+0001650685 00000 n 
+0000003126 00000 n 
+0000003169 00000 n 
+0000312959 00000 n 
+0001650606 00000 n 
+0000003223 00000 n 
+0000003289 00000 n 
+0000316401 00000 n 
+0001650513 00000 n 
+0000003343 00000 n 
+0000003401 00000 n 
+0000322145 00000 n 
+0001650420 00000 n 
+0000003455 00000 n 
+0000003512 00000 n 
+0000342153 00000 n 
+0001650327 00000 n 
+0000003566 00000 n 
+0000003624 00000 n 
+0000346740 00000 n 
+0001650234 00000 n 
+0000003678 00000 n 
+0000003733 00000 n 
+0000346861 00000 n 
+0001650141 00000 n 
+0000003787 00000 n 
+0000003827 00000 n 
+0000355679 00000 n 
+0001650009 00000 n 
+0000003881 00000 n 
+0000003925 00000 n 
+0000355739 00000 n 
+0001649930 00000 n 
+0000003984 00000 n 
+0000004040 00000 n 
+0000377265 00000 n 
+0001649837 00000 n 
+0000004099 00000 n 
+0000004176 00000 n 
+0000381454 00000 n 
+0001649744 00000 n 
+0000004235 00000 n 
+0000004308 00000 n 
+0000389278 00000 n 
+0001649651 00000 n 
+0000004367 00000 n 
+0000004436 00000 n 
+0000396613 00000 n 
+0001649558 00000 n 
+0000004495 00000 n 
+0000004569 00000 n 
+0000402868 00000 n 
+0001649479 00000 n 
+0000004628 00000 n 
+0000004684 00000 n 
+0000407058 00000 n 
+0001649386 00000 n 
+0000004738 00000 n 
+0000004786 00000 n 
+0000411982 00000 n 
+0001649254 00000 n 
+0000004840 00000 n 
+0000004885 00000 n 
+0000412041 00000 n 
+0001649175 00000 n 
+0000004944 00000 n 
+0000005001 00000 n 
+0000434070 00000 n 
+0001649082 00000 n 
+0000005060 00000 n 
+0000005135 00000 n 
+0000434252 00000 n 
+0001648989 00000 n 
+0000005194 00000 n 
+0000005251 00000 n 
+0000438206 00000 n 
+0001648896 00000 n 
+0000005310 00000 n 
+0000005388 00000 n 
+0000444866 00000 n 
+0001648803 00000 n 
+0000005447 00000 n 
+0000005521 00000 n 
+0000445109 00000 n 
+0001648724 00000 n 
+0000005580 00000 n 
+0000005650 00000 n 
+0000455750 00000 n 
+0001648645 00000 n 
+0000005705 00000 n 
+0000005755 00000 n 
+0000460201 00000 n 
+0001648512 00000 n 
+0000005804 00000 n 
+0000005847 00000 n 
+0000460261 00000 n 
+0001648433 00000 n 
+0000005901 00000 n 
+0000005938 00000 n 
+0000464191 00000 n 
+0001648340 00000 n 
+0000005992 00000 n 
+0000006042 00000 n 
+0000468410 00000 n 
+0001648247 00000 n 
+0000006096 00000 n 
+0000006137 00000 n 
+0000468531 00000 n 
+0001648154 00000 n 
+0000006191 00000 n 
+0000006231 00000 n 
+0000468652 00000 n 
+0001648061 00000 n 
+0000006285 00000 n 
+0000006363 00000 n 
+0000479523 00000 n 
+0001647968 00000 n 
+0000006417 00000 n 
+0000006496 00000 n 
+0000485442 00000 n 
+0001647875 00000 n 
+0000006550 00000 n 
+0000006629 00000 n 
+0000490987 00000 n 
+0001647782 00000 n 
+0000006683 00000 n 
+0000006749 00000 n 
+0000495085 00000 n 
+0001647689 00000 n 
+0000006803 00000 n 
+0000006865 00000 n 
+0000495206 00000 n 
+0001647610 00000 n 
+0000006920 00000 n 
+0000006973 00000 n 
+0000499792 00000 n 
+0001647478 00000 n 
+0000007022 00000 n 
+0000007082 00000 n 
+0000505305 00000 n 
+0001647399 00000 n 
+0000007136 00000 n 
+0000007208 00000 n 
+0000509191 00000 n 
+0001647306 00000 n 
+0000007262 00000 n 
+0000007302 00000 n 
+0000512813 00000 n 
+0001647213 00000 n 
+0000007356 00000 n 
+0000007407 00000 n 
+0000515934 00000 n 
+0001647120 00000 n 
+0000007461 00000 n 
+0000007523 00000 n 
+0000518921 00000 n 
+0001647027 00000 n 
+0000007577 00000 n 
+0000007640 00000 n 
+0000524052 00000 n 
+0001646948 00000 n 
+0000007694 00000 n 
+0000007763 00000 n 
+0000524173 00000 n 
+0001646869 00000 n 
+0000007812 00000 n 
+0000007884 00000 n 
+0000550485 00000 n 
+0001646736 00000 n 
+0000007931 00000 n 
+0000007994 00000 n 
+0000550545 00000 n 
+0001646657 00000 n 
+0000008043 00000 n 
+0000008100 00000 n 
+0000559715 00000 n 
+0001646525 00000 n 
+0000008149 00000 n 
+0000008224 00000 n 
+0000559775 00000 n 
+0001646446 00000 n 
+0000008278 00000 n 
+0000008359 00000 n 
+0000570495 00000 n 
+0001646353 00000 n 
+0000008413 00000 n 
+0000008486 00000 n 
+0000574922 00000 n 
+0001646260 00000 n 
+0000008540 00000 n 
+0000008618 00000 n 
+0000574982 00000 n 
+0001646167 00000 n 
+0000008672 00000 n 
+0000008712 00000 n 
+0000575041 00000 n 
+0001646074 00000 n 
+0000008766 00000 n 
+0000008826 00000 n 
+0000583412 00000 n 
+0001645981 00000 n 
+0000008880 00000 n 
+0000008948 00000 n 
+0000590669 00000 n 
+0001645863 00000 n 
+0000009002 00000 n 
+0000009071 00000 n 
+0000590729 00000 n 
+0001645784 00000 n 
+0000009130 00000 n 
+0000009187 00000 n 
+0000602203 00000 n 
+0001645705 00000 n 
+0000009246 00000 n 
+0000009321 00000 n 
+0000602324 00000 n 
+0001645612 00000 n 
+0000009370 00000 n 
+0000009445 00000 n 
+0000605605 00000 n 
+0001645480 00000 n 
+0000009494 00000 n 
+0000009584 00000 n 
+0000612202 00000 n 
+0001645401 00000 n 
+0000009638 00000 n 
+0000009722 00000 n 
+0000620023 00000 n 
+0001645308 00000 n 
+0000009776 00000 n 
+0000009816 00000 n 
+0000620083 00000 n 
+0001645215 00000 n 
+0000009870 00000 n 
+0000009943 00000 n 
+0000626898 00000 n 
+0001645122 00000 n 
+0000009997 00000 n 
+0000010081 00000 n 
+0000630549 00000 n 
+0001645029 00000 n 
+0000010135 00000 n 
+0000010220 00000 n 
+0000634597 00000 n 
+0001644950 00000 n 
+0000010274 00000 n 
+0000010365 00000 n 
+0000639821 00000 n 
+0001644871 00000 n 
+0000010414 00000 n 
+0000010469 00000 n 
+0000646249 00000 n 
+0001644738 00000 n 
+0000010516 00000 n 
+0000010579 00000 n 
+0000646309 00000 n 
+0001644659 00000 n 
+0000010628 00000 n 
+0000010685 00000 n 
+0000661873 00000 n 
+0001644526 00000 n 
+0000010734 00000 n 
+0000010810 00000 n 
+0000661933 00000 n 
+0001644447 00000 n 
+0000010864 00000 n 
+0000010941 00000 n 
+0000665867 00000 n 
+0001644354 00000 n 
+0000010995 00000 n 
+0000011049 00000 n 
+0000665987 00000 n 
+0001644261 00000 n 
+0000011103 00000 n 
+0000011151 00000 n 
+0000670899 00000 n 
+0001644168 00000 n 
+0000011205 00000 n 
+0000011266 00000 n 
+0000682624 00000 n 
+0001644075 00000 n 
+0000011320 00000 n 
+0000011394 00000 n 
+0000682806 00000 n 
+0001643982 00000 n 
+0000011448 00000 n 
+0000011527 00000 n 
+0000687783 00000 n 
+0001643889 00000 n 
+0000011581 00000 n 
+0000011661 00000 n 
+0000692467 00000 n 
+0001643796 00000 n 
+0000011715 00000 n 
+0000011764 00000 n 
+0000700634 00000 n 
+0001643664 00000 n 
+0000011818 00000 n 
+0000011887 00000 n 
+0000700694 00000 n 
+0001643585 00000 n 
+0000011946 00000 n 
+0000012002 00000 n 
+0000700754 00000 n 
+0001643492 00000 n 
+0000012061 00000 n 
+0000012100 00000 n 
+0000704136 00000 n 
+0001643399 00000 n 
+0000012159 00000 n 
+0000012197 00000 n 
+0000708196 00000 n 
+0001643306 00000 n 
+0000012256 00000 n 
+0000012297 00000 n 
+0000711983 00000 n 
+0001643227 00000 n 
+0000012356 00000 n 
+0000012396 00000 n 
+0000723372 00000 n 
+0001643095 00000 n 
+0000012451 00000 n 
+0000012521 00000 n 
+0000723432 00000 n 
+0001643016 00000 n 
+0000012581 00000 n 
+0000012638 00000 n 
+0000723614 00000 n 
+0001642937 00000 n 
+0000012698 00000 n 
+0000012772 00000 n 
+0000727566 00000 n 
+0001642819 00000 n 
+0000012827 00000 n 
+0000012891 00000 n 
+0000727626 00000 n 
+0001642740 00000 n 
+0000012951 00000 n 
+0000013015 00000 n 
+0000731655 00000 n 
+0001642647 00000 n 
+0000013075 00000 n 
+0000013134 00000 n 
+0000736325 00000 n 
+0001642568 00000 n 
+0000013194 00000 n 
+0000013281 00000 n 
+0000736384 00000 n 
+0001642435 00000 n 
+0000013330 00000 n 
+0000013406 00000 n 
+0000736444 00000 n 
+0001642356 00000 n 
+0000013460 00000 n 
+0000013517 00000 n 
+0000741165 00000 n 
+0001642263 00000 n 
+0000013571 00000 n 
+0000013667 00000 n 
+0000745980 00000 n 
+0001642170 00000 n 
+0000013721 00000 n 
+0000013792 00000 n 
+0000750857 00000 n 
+0001642077 00000 n 
+0000013846 00000 n 
+0000013939 00000 n 
+0000750978 00000 n 
+0001641984 00000 n 
+0000013993 00000 n 
+0000014096 00000 n 
+0000760136 00000 n 
+0001641891 00000 n 
+0000014150 00000 n 
+0000014254 00000 n 
+0000773483 00000 n 
+0001641798 00000 n 
+0000014308 00000 n 
+0000014412 00000 n 
+0000782660 00000 n 
+0001641705 00000 n 
+0000014466 00000 n 
+0000014557 00000 n 
+0000786442 00000 n 
+0001641612 00000 n 
+0000014611 00000 n 
+0000014698 00000 n 
+0000792662 00000 n 
+0001641533 00000 n 
+0000014753 00000 n 
+0000014831 00000 n 
+0000796360 00000 n 
+0001641415 00000 n 
+0000014880 00000 n 
+0000014966 00000 n 
+0000800079 00000 n 
+0001641336 00000 n 
+0000015020 00000 n 
+0000015083 00000 n 
+0000804590 00000 n 
+0001641257 00000 n 
+0000015137 00000 n 
+0000015194 00000 n 
+0000809423 00000 n 
+0001641124 00000 n 
+0000015241 00000 n 
+0000015294 00000 n 
+0000828888 00000 n 
+0001641045 00000 n 
+0000015343 00000 n 
+0000015399 00000 n 
+0000836972 00000 n 
+0001640952 00000 n 
+0000015448 00000 n 
+0000015506 00000 n 
+0000849422 00000 n 
+0001640859 00000 n 
+0000015555 00000 n 
+0000015611 00000 n 
+0000857958 00000 n 
+0001640766 00000 n 
+0000015660 00000 n 
+0000015718 00000 n 
+0000866940 00000 n 
+0001640673 00000 n 
+0000015767 00000 n 
+0000015823 00000 n 
+0000875428 00000 n 
+0001640580 00000 n 
+0000015872 00000 n 
+0000015927 00000 n 
+0000879219 00000 n 
+0001640487 00000 n 
+0000015976 00000 n 
+0000016012 00000 n 
+0000885401 00000 n 
+0001640408 00000 n 
+0000016061 00000 n 
+0000016111 00000 n 
+0000892378 00000 n 
+0001640275 00000 n 
+0000016158 00000 n 
+0000016219 00000 n 
+0000897098 00000 n 
+0001640196 00000 n 
+0000016268 00000 n 
+0000016311 00000 n 
+0000897219 00000 n 
+0001640103 00000 n 
+0000016360 00000 n 
+0000016394 00000 n 
+0000901277 00000 n 
+0001640010 00000 n 
+0000016443 00000 n 
+0000016477 00000 n 
+0000901398 00000 n 
+0001639917 00000 n 
+0000016526 00000 n 
+0000016577 00000 n 
+0000903650 00000 n 
+0001639838 00000 n 
+0000016626 00000 n 
+0000016674 00000 n 
+0000907353 00000 n 
+0001639705 00000 n 
+0000016721 00000 n 
+0000016789 00000 n 
+0000910449 00000 n 
+0001639587 00000 n 
+0000016838 00000 n 
+0000016889 00000 n 
+0000910509 00000 n 
+0001639508 00000 n 
+0000016943 00000 n 
+0000016974 00000 n 
+0000926366 00000 n 
+0001639415 00000 n 
+0000017028 00000 n 
+0000017083 00000 n 
+0000926426 00000 n 
+0001639322 00000 n 
+0000017137 00000 n 
+0000017186 00000 n 
+0000936431 00000 n 
+0001639243 00000 n 
+0000017240 00000 n 
+0000017288 00000 n 
+0000939685 00000 n 
+0001639111 00000 n 
+0000017337 00000 n 
+0000017371 00000 n 
+0000942982 00000 n 
+0001639032 00000 n 
+0000017425 00000 n 
+0000017456 00000 n 
+0000960099 00000 n 
+0001638939 00000 n 
+0000017510 00000 n 
+0000017557 00000 n 
+0000966455 00000 n 
+0001638846 00000 n 
+0000017611 00000 n 
+0000017645 00000 n 
+0000966515 00000 n 
+0001638767 00000 n 
+0000017699 00000 n 
+0000017739 00000 n 
+0000966575 00000 n 
+0001638649 00000 n 
+0000017788 00000 n 
+0000017860 00000 n 
+0000966634 00000 n 
+0001638570 00000 n 
+0000017914 00000 n 
+0000017950 00000 n 
+0000970339 00000 n 
+0001638477 00000 n 
+0000018004 00000 n 
+0000018041 00000 n 
+0000972386 00000 n 
+0001638384 00000 n 
+0000018095 00000 n 
+0000018131 00000 n 
+0000972446 00000 n 
+0001638305 00000 n 
+0000018185 00000 n 
+0000018223 00000 n 
+0000975718 00000 n 
+0001638172 00000 n 
+0000018271 00000 n 
+0000018330 00000 n 
+0000979624 00000 n 
+0001638054 00000 n 
+0000018379 00000 n 
+0000018423 00000 n 
+0000979684 00000 n 
+0001637975 00000 n 
+0000018477 00000 n 
+0000018555 00000 n 
+0001194464 00000 n 
+0001637882 00000 n 
+0000018609 00000 n 
+0000018665 00000 n 
+0001202010 00000 n 
+0001637789 00000 n 
+0000018719 00000 n 
+0000018761 00000 n 
+0001206249 00000 n 
+0001637710 00000 n 
+0000018815 00000 n 
+0000018866 00000 n 
+0001210171 00000 n 
+0001637617 00000 n 
+0000018915 00000 n 
+0000018964 00000 n 
+0001210231 00000 n 
+0001637524 00000 n 
+0000019013 00000 n 
+0000019081 00000 n 
+0001213488 00000 n 
+0001637445 00000 n 
+0000019130 00000 n 
+0000019195 00000 n 
+0001221662 00000 n 
+0001637312 00000 n 
+0000019243 00000 n 
+0000019277 00000 n 
+0001221722 00000 n 
+0001637233 00000 n 
+0000019326 00000 n 
+0000019366 00000 n 
+0001221782 00000 n 
+0001637154 00000 n 
+0000019415 00000 n 
+0000019456 00000 n 
+0001237309 00000 n 
+0001637060 00000 n 
+0000019506 00000 n 
+0000019538 00000 n 
+0001262979 00000 n 
+0001636980 00000 n 
+0000019588 00000 n 
+0000019613 00000 n 
+0000020222 00000 n 
+0000020334 00000 n 
+0000023908 00000 n 
+0000019665 00000 n 
+0000023790 00000 n 
+0000023849 00000 n 
+0001628741 00000 n 
+0001627427 00000 n 
+0001628596 00000 n 
+0001630485 00000 n 
+0001630923 00000 n 
+0000023568 00000 n 
+0000023721 00000 n 
+0000023768 00000 n 
+0000025465 00000 n 
+0000025294 00000 n 
+0000024047 00000 n 
+0000025406 00000 n 
+0001626986 00000 n 
+0001628452 00000 n 
+0000027655 00000 n 
+0000027808 00000 n 
+0000027961 00000 n 
+0000028113 00000 n 
+0000028267 00000 n 
+0000028420 00000 n 
+0000028574 00000 n 
+0000028732 00000 n 
+0000028896 00000 n 
+0000029060 00000 n 
+0000029219 00000 n 
+0000029371 00000 n 
+0000029525 00000 n 
+0000029678 00000 n 
+0000029832 00000 n 
+0000029986 00000 n 
+0000030140 00000 n 
+0000030298 00000 n 
+0000030457 00000 n 
+0000030616 00000 n 
+0000030775 00000 n 
+0000030929 00000 n 
+0000031088 00000 n 
+0000031247 00000 n 
+0000031405 00000 n 
+0000031559 00000 n 
+0000031711 00000 n 
+0000031865 00000 n 
+0000032019 00000 n 
+0000032171 00000 n 
+0000032324 00000 n 
+0000032478 00000 n 
+0000032632 00000 n 
+0000032786 00000 n 
+0000032940 00000 n 
+0000033097 00000 n 
+0000033254 00000 n 
+0000033409 00000 n 
+0000036154 00000 n 
+0000033684 00000 n 
+0000027227 00000 n 
+0000025549 00000 n 
+0000033566 00000 n 
+0001627132 00000 n 
+0000033625 00000 n 
+0001627720 00000 n 
+0000036313 00000 n 
+0000036472 00000 n 
+0000036631 00000 n 
+0000036795 00000 n 
+0000036959 00000 n 
+0000037123 00000 n 
+0000037287 00000 n 
+0000037451 00000 n 
+0000037615 00000 n 
+0000037774 00000 n 
+0000037933 00000 n 
+0000038097 00000 n 
+0000038261 00000 n 
+0000038425 00000 n 
+0000038589 00000 n 
+0000038752 00000 n 
+0000038916 00000 n 
+0000039076 00000 n 
+0000039229 00000 n 
+0000039387 00000 n 
+0000039546 00000 n 
+0000039705 00000 n 
+0000039863 00000 n 
+0000040022 00000 n 
+0000040181 00000 n 
+0000040340 00000 n 
+0000040499 00000 n 
+0000040658 00000 n 
+0000040818 00000 n 
+0000040972 00000 n 
+0000041131 00000 n 
+0000041290 00000 n 
+0000041449 00000 n 
+0000041608 00000 n 
+0000041767 00000 n 
+0000041926 00000 n 
+0000042080 00000 n 
+0000042232 00000 n 
+0000042385 00000 n 
+0000042538 00000 n 
+0000042697 00000 n 
+0000042854 00000 n 
+0000043012 00000 n 
+0000043171 00000 n 
+0000043330 00000 n 
+0000043488 00000 n 
+0000043647 00000 n 
+0000043811 00000 n 
+0000043974 00000 n 
+0000044125 00000 n 
+0000044276 00000 n 
+0000044432 00000 n 
+0000047482 00000 n 
+0000044647 00000 n 
+0000035606 00000 n 
+0000033794 00000 n 
+0000044588 00000 n 
+0000047640 00000 n 
+0000047798 00000 n 
+0000047956 00000 n 
+0000048114 00000 n 
+0000048267 00000 n 
+0000048419 00000 n 
+0000048572 00000 n 
+0000048725 00000 n 
+0000048881 00000 n 
+0000049039 00000 n 
+0000049197 00000 n 
+0000049355 00000 n 
+0000049513 00000 n 
+0000049671 00000 n 
+0000049828 00000 n 
+0000049986 00000 n 
+0000050143 00000 n 
+0000050306 00000 n 
+0000050469 00000 n 
+0000050631 00000 n 
+0000050794 00000 n 
+0000050956 00000 n 
+0000051115 00000 n 
+0000051279 00000 n 
+0000051443 00000 n 
+0000051602 00000 n 
+0000051766 00000 n 
+0000051929 00000 n 
+0000052093 00000 n 
+0000052246 00000 n 
+0000052404 00000 n 
+0000052562 00000 n 
+0000052719 00000 n 
+0000052877 00000 n 
+0000053035 00000 n 
+0000053193 00000 n 
+0000053351 00000 n 
+0000053508 00000 n 
+0000053666 00000 n 
+0000053824 00000 n 
+0000053977 00000 n 
+0000054135 00000 n 
+0000054293 00000 n 
+0000054445 00000 n 
+0000054598 00000 n 
+0000054749 00000 n 
+0000054900 00000 n 
+0000055050 00000 n 
+0000057435 00000 n 
+0000055260 00000 n 
+0000046966 00000 n 
+0000044731 00000 n 
+0000055201 00000 n 
+0000057588 00000 n 
+0000057741 00000 n 
+0000057894 00000 n 
+0000058046 00000 n 
+0000058199 00000 n 
+0000058352 00000 n 
+0000058505 00000 n 
+0000058657 00000 n 
+0000058810 00000 n 
+0000058961 00000 n 
+0000059114 00000 n 
+0000059271 00000 n 
+0000059429 00000 n 
+0000059586 00000 n 
+0000059744 00000 n 
+0000059897 00000 n 
+0000060055 00000 n 
+0000060213 00000 n 
+0000060371 00000 n 
+0000060529 00000 n 
+0000060682 00000 n 
+0000060840 00000 n 
+0000060997 00000 n 
+0000061155 00000 n 
+0000061312 00000 n 
+0000061465 00000 n 
+0000061617 00000 n 
+0000061775 00000 n 
+0000061932 00000 n 
+0000062090 00000 n 
+0000062248 00000 n 
+0000062401 00000 n 
+0000062554 00000 n 
+0000062707 00000 n 
+0000062860 00000 n 
+0000063013 00000 n 
+0000063166 00000 n 
+0000063321 00000 n 
+0000063534 00000 n 
+0000056999 00000 n 
+0000055344 00000 n 
+0000063475 00000 n 
+0000064729 00000 n 
+0000064880 00000 n 
+0000065032 00000 n 
+0000065184 00000 n 
+0000065336 00000 n 
+0000065488 00000 n 
+0000065639 00000 n 
+0000065790 00000 n 
+0000065941 00000 n 
+0000066092 00000 n 
+0000066418 00000 n 
+0000064525 00000 n 
+0000063618 00000 n 
+0000066243 00000 n 
+0000066302 00000 n 
+0001631041 00000 n 
+0000308633 00000 n 
+0000359719 00000 n 
+0000415331 00000 n 
+0000583533 00000 n 
+0000590911 00000 n 
+0000816658 00000 n 
+0000813187 00000 n 
+0000888379 00000 n 
+0001217200 00000 n 
+0001219573 00000 n 
+0000066786 00000 n 
+0000066615 00000 n 
+0000066515 00000 n 
+0000066727 00000 n 
+0000067799 00000 n 
+0000067952 00000 n 
+0000068104 00000 n 
+0000068257 00000 n 
+0000068409 00000 n 
+0000068561 00000 n 
+0000068713 00000 n 
+0000069041 00000 n 
+0000067619 00000 n 
+0000066827 00000 n 
+0000068865 00000 n 
+0000068924 00000 n 
+0001630631 00000 n 
+0001630339 00000 n 
+0000187592 00000 n 
+0000267026 00000 n 
+0000279079 00000 n 
+0000922174 00000 n 
+0000956887 00000 n 
+0001086902 00000 n 
+0001194340 00000 n 
+0000069435 00000 n 
+0000069264 00000 n 
+0000069164 00000 n 
+0000069376 00000 n 
+0000073399 00000 n 
+0000073556 00000 n 
+0000073709 00000 n 
+0000073862 00000 n 
+0000074017 00000 n 
+0000074172 00000 n 
+0000074327 00000 n 
+0000074482 00000 n 
+0000074637 00000 n 
+0000074794 00000 n 
+0000074948 00000 n 
+0000075106 00000 n 
+0000075262 00000 n 
+0000075417 00000 n 
+0000075692 00000 n 
+0000073151 00000 n 
+0000069476 00000 n 
+0000075572 00000 n 
+0001241394 00000 n 
+0001237613 00000 n 
+0001237674 00000 n 
+0001241516 00000 n 
+0001238040 00000 n 
+0001237796 00000 n 
+0001237857 00000 n 
+0001241699 00000 n 
+0001241577 00000 n 
+0001242185 00000 n 
+0001238101 00000 n 
+0001242124 00000 n 
+0001242307 00000 n 
+0001241272 00000 n 
+0000079973 00000 n 
+0000079616 00000 n 
+0000075803 00000 n 
+0000079731 00000 n 
+0001628886 00000 n 
+0000079851 00000 n 
+0000079912 00000 n 
+0000084691 00000 n 
+0000084843 00000 n 
+0000084997 00000 n 
+0000085152 00000 n 
+0000085307 00000 n 
+0000085462 00000 n 
+0000085617 00000 n 
+0000085772 00000 n 
+0000085925 00000 n 
+0000086077 00000 n 
+0000091685 00000 n 
+0000086408 00000 n 
+0000084473 00000 n 
+0000080110 00000 n 
+0000086228 00000 n 
+0000086289 00000 n 
+0001629758 00000 n 
+0001631161 00000 n 
+0000091837 00000 n 
+0000091989 00000 n 
+0000092144 00000 n 
+0000092299 00000 n 
+0000092453 00000 n 
+0000092608 00000 n 
+0000092761 00000 n 
+0000092914 00000 n 
+0000093068 00000 n 
+0000090083 00000 n 
+0000093458 00000 n 
+0000089865 00000 n 
+0000086559 00000 n 
+0000093222 00000 n 
+0001629464 00000 n 
+0000090543 00000 n 
+0000090779 00000 n 
+0000090827 00000 n 
+0000091004 00000 n 
+0000091026 00000 n 
+0000091265 00000 n 
+0000096996 00000 n 
+0000096518 00000 n 
+0000093652 00000 n 
+0000096634 00000 n 
+0000096813 00000 n 
+0000096874 00000 n 
+0000096935 00000 n 
+0000097372 00000 n 
+0000097195 00000 n 
+0000097094 00000 n 
+0000097311 00000 n 
+0000101187 00000 n 
+0000101342 00000 n 
+0000101496 00000 n 
+0000106626 00000 n 
+0000106782 00000 n 
+0000102016 00000 n 
+0000101032 00000 n 
+0000097414 00000 n 
+0000101651 00000 n 
+0000101771 00000 n 
+0001629174 00000 n 
+0001628159 00000 n 
+0001628013 00000 n 
+0000101834 00000 n 
+0000101953 00000 n 
+0001627574 00000 n 
+0001630048 00000 n 
+0001237491 00000 n 
+0000106937 00000 n 
+0000107091 00000 n 
+0000107247 00000 n 
+0000107404 00000 n 
+0000107557 00000 n 
+0000107712 00000 n 
+0000107875 00000 n 
+0000108029 00000 n 
+0000113941 00000 n 
+0000108499 00000 n 
+0000106408 00000 n 
+0000102234 00000 n 
+0000108183 00000 n 
+0000108244 00000 n 
+0000108308 00000 n 
+0000108372 00000 n 
+0000108436 00000 n 
+0001238161 00000 n 
+0001237369 00000 n 
+0001241880 00000 n 
+0001238222 00000 n 
+0001237430 00000 n 
+0001237552 00000 n 
+0000114097 00000 n 
+0000114252 00000 n 
+0000114407 00000 n 
+0000114688 00000 n 
+0000113777 00000 n 
+0000108691 00000 n 
+0000114563 00000 n 
+0001629904 00000 n 
+0000114624 00000 n 
+0001631286 00000 n 
+0000120144 00000 n 
+0000120300 00000 n 
+0000120456 00000 n 
+0000120736 00000 n 
+0000119989 00000 n 
+0000114907 00000 n 
+0000120611 00000 n 
+0000120672 00000 n 
+0000126072 00000 n 
+0000126226 00000 n 
+0000126382 00000 n 
+0000126534 00000 n 
+0000126866 00000 n 
+0000125908 00000 n 
+0000120929 00000 n 
+0000126688 00000 n 
+0000132658 00000 n 
+0000132814 00000 n 
+0000133150 00000 n 
+0000132512 00000 n 
+0000127058 00000 n 
+0000132967 00000 n 
+0000133087 00000 n 
+0001241333 00000 n 
+0000137954 00000 n 
+0000138105 00000 n 
+0000138262 00000 n 
+0000138417 00000 n 
+0000138573 00000 n 
+0000138728 00000 n 
+0000138883 00000 n 
+0000139038 00000 n 
+0000139193 00000 n 
+0000139345 00000 n 
+0000139502 00000 n 
+0000144898 00000 n 
+0000145054 00000 n 
+0000145209 00000 n 
+0000145366 00000 n 
+0000145521 00000 n 
+0000139959 00000 n 
+0000137727 00000 n 
+0000133355 00000 n 
+0000139657 00000 n 
+0000139718 00000 n 
+0000139841 00000 n 
+0000145676 00000 n 
+0000145830 00000 n 
+0000145986 00000 n 
+0000146143 00000 n 
+0000146299 00000 n 
+0000146455 00000 n 
+0000146612 00000 n 
+0000146769 00000 n 
+0000146923 00000 n 
+0000147079 00000 n 
+0000147235 00000 n 
+0000147392 00000 n 
+0000147547 00000 n 
+0000147948 00000 n 
+0000144608 00000 n 
+0000140177 00000 n 
+0000147703 00000 n 
+0000147764 00000 n 
+0000147826 00000 n 
+0001237979 00000 n 
+0001241819 00000 n 
+0001241941 00000 n 
+0001238283 00000 n 
+0000153366 00000 n 
+0000153523 00000 n 
+0000000000 00000 f 
+0000153680 00000 n 
+0000153837 00000 n 
+0000153993 00000 n 
+0000154149 00000 n 
+0000154305 00000 n 
+0000159109 00000 n 
+0000159263 00000 n 
+0000159418 00000 n 
+0000154769 00000 n 
+0000153175 00000 n 
+0000148166 00000 n 
+0000154459 00000 n 
+0000154579 00000 n 
+0000154642 00000 n 
+0000154706 00000 n 
+0001631411 00000 n 
+0000159575 00000 n 
+0000159732 00000 n 
+0000159888 00000 n 
+0000160043 00000 n 
+0000160199 00000 n 
+0000164997 00000 n 
+0000160721 00000 n 
+0000158909 00000 n 
+0000154960 00000 n 
+0000160355 00000 n 
+0000160534 00000 n 
+0001627866 00000 n 
+0000160657 00000 n 
+0001237918 00000 n 
+0000165154 00000 n 
+0000165310 00000 n 
+0000165467 00000 n 
+0000165624 00000 n 
+0000165781 00000 n 
+0000165937 00000 n 
+0000166092 00000 n 
+0000166249 00000 n 
+0000166409 00000 n 
+0000167129 00000 n 
+0000164779 00000 n 
+0000160979 00000 n 
+0000166565 00000 n 
+0000166626 00000 n 
+0000166690 00000 n 
+0000166754 00000 n 
+0000166818 00000 n 
+0000166882 00000 n 
+0000167003 00000 n 
+0000167066 00000 n 
+0000172565 00000 n 
+0000172722 00000 n 
+0000172878 00000 n 
+0000173034 00000 n 
+0000173189 00000 n 
+0000178009 00000 n 
+0000185505 00000 n 
+0000185661 00000 n 
+0000173588 00000 n 
+0000172392 00000 n 
+0000167387 00000 n 
+0000173342 00000 n 
+0000173403 00000 n 
+0001629030 00000 n 
+0000173525 00000 n 
+0001629319 00000 n 
+0001628305 00000 n 
+0001630192 00000 n 
+0000185818 00000 n 
+0000185974 00000 n 
+0000186131 00000 n 
+0000186288 00000 n 
+0000186445 00000 n 
+0000186600 00000 n 
+0000187224 00000 n 
+0000187378 00000 n 
+0000186755 00000 n 
+0000186912 00000 n 
+0000187068 00000 n 
+0000191641 00000 n 
+0000187778 00000 n 
+0000177764 00000 n 
+0000173849 00000 n 
+0000187531 00000 n 
+0000187715 00000 n 
+0000181359 00000 n 
+0000181593 00000 n 
+0000181641 00000 n 
+0000182028 00000 n 
+0000182235 00000 n 
+0000182258 00000 n 
+0000182555 00000 n 
+0000182800 00000 n 
+0000185131 00000 n 
+0001242002 00000 n 
+0000191796 00000 n 
+0000191953 00000 n 
+0000192109 00000 n 
+0000192264 00000 n 
+0000192420 00000 n 
+0000192576 00000 n 
+0000192917 00000 n 
+0000191450 00000 n 
+0000188053 00000 n 
+0000192732 00000 n 
+0000192793 00000 n 
+0000192854 00000 n 
+0000196250 00000 n 
+0000197837 00000 n 
+0000224142 00000 n 
+0000196403 00000 n 
+0000269681 00000 n 
+0000196556 00000 n 
+0000196950 00000 n 
+0000196095 00000 n 
+0000193149 00000 n 
+0000196709 00000 n 
+0001631536 00000 n 
+0000267087 00000 n 
+0000197721 00000 n 
+0000197088 00000 n 
+0000266844 00000 n 
+0000266905 00000 n 
+0000266966 00000 n 
+0000198216 00000 n 
+0000198437 00000 n 
+0000198485 00000 n 
+0000224121 00000 n 
+0000224521 00000 n 
+0000224742 00000 n 
+0000224790 00000 n 
+0000266823 00000 n 
+0000278235 00000 n 
+0000278391 00000 n 
+0000278547 00000 n 
+0000278701 00000 n 
+0000278856 00000 n 
+0000279142 00000 n 
+0000269508 00000 n 
+0000267242 00000 n 
+0000279018 00000 n 
+0000272468 00000 n 
+0000272704 00000 n 
+0000272752 00000 n 
+0000273072 00000 n 
+0000273327 00000 n 
+0000273350 00000 n 
+0000273624 00000 n 
+0000273897 00000 n 
+0000276015 00000 n 
+0000283137 00000 n 
+0000283293 00000 n 
+0000283507 00000 n 
+0000282991 00000 n 
+0000279309 00000 n 
+0000283446 00000 n 
+0001237735 00000 n 
+0000286729 00000 n 
+0000286884 00000 n 
+0000287039 00000 n 
+0000287192 00000 n 
+0000287343 00000 n 
+0000287676 00000 n 
+0000286556 00000 n 
+0000283619 00000 n 
+0000287495 00000 n 
+0001242246 00000 n 
+0000291941 00000 n 
+0000292101 00000 n 
+0000292260 00000 n 
+0000292594 00000 n 
+0000291786 00000 n 
+0000287814 00000 n 
+0000292413 00000 n 
+0000296789 00000 n 
+0000296944 00000 n 
+0000297097 00000 n 
+0000297250 00000 n 
+0000300902 00000 n 
+0000301057 00000 n 
+0000297706 00000 n 
+0000296625 00000 n 
+0000292745 00000 n 
+0000297403 00000 n 
+0000297524 00000 n 
+0000297585 00000 n 
+0000297646 00000 n 
+0001631661 00000 n 
+0000301212 00000 n 
+0000301371 00000 n 
+0000301531 00000 n 
+0000301690 00000 n 
+0000301855 00000 n 
+0000302015 00000 n 
+0000302180 00000 n 
+0000302345 00000 n 
+0000302503 00000 n 
+0000307322 00000 n 
+0000307480 00000 n 
+0000303212 00000 n 
+0000300675 00000 n 
+0000297857 00000 n 
+0000302666 00000 n 
+0000302727 00000 n 
+0000302787 00000 n 
+0000302848 00000 n 
+0000302909 00000 n 
+0000302970 00000 n 
+0000303031 00000 n 
+0000303091 00000 n 
+0000303152 00000 n 
+0000307645 00000 n 
+0000307805 00000 n 
+0000307965 00000 n 
+0000308118 00000 n 
+0000312200 00000 n 
+0000312360 00000 n 
+0000308695 00000 n 
+0000307140 00000 n 
+0000303364 00000 n 
+0000308268 00000 n 
+0000308329 00000 n 
+0000308390 00000 n 
+0000308451 00000 n 
+0000308512 00000 n 
+0000308572 00000 n 
+0001630777 00000 n 
+0000312514 00000 n 
+0000312679 00000 n 
+0000313202 00000 n 
+0000312036 00000 n 
+0000308861 00000 n 
+0000312838 00000 n 
+0000313019 00000 n 
+0000313080 00000 n 
+0000313141 00000 n 
+0000316028 00000 n 
+0000316182 00000 n 
+0000316644 00000 n 
+0000315882 00000 n 
+0000313353 00000 n 
+0000316340 00000 n 
+0000316461 00000 n 
+0000316522 00000 n 
+0000316583 00000 n 
+0000321774 00000 n 
+0000321930 00000 n 
+0000322205 00000 n 
+0000321628 00000 n 
+0000316809 00000 n 
+0000322084 00000 n 
+0000326890 00000 n 
+0000327055 00000 n 
+0000327209 00000 n 
+0000327544 00000 n 
+0000326735 00000 n 
+0000322369 00000 n 
+0000327362 00000 n 
+0000327423 00000 n 
+0000327484 00000 n 
+0001631786 00000 n 
+0000330964 00000 n 
+0000330665 00000 n 
+0000327682 00000 n 
+0000330781 00000 n 
+0000330842 00000 n 
+0000330903 00000 n 
+0000334634 00000 n 
+0000334335 00000 n 
+0000331102 00000 n 
+0000334451 00000 n 
+0000334512 00000 n 
+0000334573 00000 n 
+0000341782 00000 n 
+0000341937 00000 n 
+0000337554 00000 n 
+0000337194 00000 n 
+0000334774 00000 n 
+0000337310 00000 n 
+0000337371 00000 n 
+0000337432 00000 n 
+0000337493 00000 n 
+0000346355 00000 n 
+0000342274 00000 n 
+0000341636 00000 n 
+0000337665 00000 n 
+0000342092 00000 n 
+0000342213 00000 n 
+0000346519 00000 n 
+0000346982 00000 n 
+0000346209 00000 n 
+0000342451 00000 n 
+0000346679 00000 n 
+0000346800 00000 n 
+0000346921 00000 n 
+0000351567 00000 n 
+0000355150 00000 n 
+0000355303 00000 n 
+0000351791 00000 n 
+0000351430 00000 n 
+0000347160 00000 n 
+0000351730 00000 n 
+0001631911 00000 n 
+0000355458 00000 n 
+0000355921 00000 n 
+0000354995 00000 n 
+0000351930 00000 n 
+0000355618 00000 n 
+0000355799 00000 n 
+0000355860 00000 n 
+0000359782 00000 n 
+0000359542 00000 n 
+0000356101 00000 n 
+0000359658 00000 n 
+0000363215 00000 n 
+0000362795 00000 n 
+0000359947 00000 n 
+0000362911 00000 n 
+0000362972 00000 n 
+0000363033 00000 n 
+0000363093 00000 n 
+0000363154 00000 n 
+0000366381 00000 n 
+0000366022 00000 n 
+0000363395 00000 n 
+0000366138 00000 n 
+0000366199 00000 n 
+0000366260 00000 n 
+0000366320 00000 n 
+0000369069 00000 n 
+0000369222 00000 n 
+0000369683 00000 n 
+0000368923 00000 n 
+0000366546 00000 n 
+0000369378 00000 n 
+0000369439 00000 n 
+0000369500 00000 n 
+0000369561 00000 n 
+0000369622 00000 n 
+0000372895 00000 n 
+0000373049 00000 n 
+0000373391 00000 n 
+0000372749 00000 n 
+0000369807 00000 n 
+0000373208 00000 n 
+0000373269 00000 n 
+0000373330 00000 n 
+0001632036 00000 n 
+0000376887 00000 n 
+0000377047 00000 n 
+0000377447 00000 n 
+0000376741 00000 n 
+0000373556 00000 n 
+0000377204 00000 n 
+0000377325 00000 n 
+0000377386 00000 n 
+0000381233 00000 n 
+0000381635 00000 n 
+0000381096 00000 n 
+0000377585 00000 n 
+0000381393 00000 n 
+0000381514 00000 n 
+0000381574 00000 n 
+0000388428 00000 n 
+0000384687 00000 n 
+0000384388 00000 n 
+0000381773 00000 n 
+0000384504 00000 n 
+0000384565 00000 n 
+0000384626 00000 n 
+0000388582 00000 n 
+0000388742 00000 n 
+0000388900 00000 n 
+0000389059 00000 n 
+0000389460 00000 n 
+0000388255 00000 n 
+0000384825 00000 n 
+0000389217 00000 n 
+0000389338 00000 n 
+0000389399 00000 n 
+0000392433 00000 n 
+0000392832 00000 n 
+0000392296 00000 n 
+0000389598 00000 n 
+0000392588 00000 n 
+0000392649 00000 n 
+0000392710 00000 n 
+0000392771 00000 n 
+0000396117 00000 n 
+0000396271 00000 n 
+0000396733 00000 n 
+0000395971 00000 n 
+0000392999 00000 n 
+0000396430 00000 n 
+0000396491 00000 n 
+0000396552 00000 n 
+0000396673 00000 n 
+0001632161 00000 n 
+0000399855 00000 n 
+0000399495 00000 n 
+0000396900 00000 n 
+0000399611 00000 n 
+0000399672 00000 n 
+0000399733 00000 n 
+0000399794 00000 n 
+0000402927 00000 n 
+0000402508 00000 n 
+0000400020 00000 n 
+0000402624 00000 n 
+0000402685 00000 n 
+0000402746 00000 n 
+0000402807 00000 n 
+0000407179 00000 n 
+0000406759 00000 n 
+0000403078 00000 n 
+0000406875 00000 n 
+0000406936 00000 n 
+0000406997 00000 n 
+0000407118 00000 n 
+0000411446 00000 n 
+0000411611 00000 n 
+0000411763 00000 n 
+0000412162 00000 n 
+0000411291 00000 n 
+0000407344 00000 n 
+0000411921 00000 n 
+0000412101 00000 n 
+0000415393 00000 n 
+0000415154 00000 n 
+0000412327 00000 n 
+0000415270 00000 n 
+0000418675 00000 n 
+0000418834 00000 n 
+0000419175 00000 n 
+0000418529 00000 n 
+0000415504 00000 n 
+0000418993 00000 n 
+0000419054 00000 n 
+0000419115 00000 n 
+0001632286 00000 n 
+0000421773 00000 n 
+0000421353 00000 n 
+0000419327 00000 n 
+0000421469 00000 n 
+0000421530 00000 n 
+0000421591 00000 n 
+0000421652 00000 n 
+0000421713 00000 n 
+0000424676 00000 n 
+0000424255 00000 n 
+0000421884 00000 n 
+0000424371 00000 n 
+0000424432 00000 n 
+0000424493 00000 n 
+0000424554 00000 n 
+0000424615 00000 n 
+0000427844 00000 n 
+0000428305 00000 n 
+0000427707 00000 n 
+0000424827 00000 n 
+0000428000 00000 n 
+0000428061 00000 n 
+0000428122 00000 n 
+0000428183 00000 n 
+0000428244 00000 n 
+0000431102 00000 n 
+0000430742 00000 n 
+0000428472 00000 n 
+0000430858 00000 n 
+0000430919 00000 n 
+0000430980 00000 n 
+0000431041 00000 n 
+0000434373 00000 n 
+0000433832 00000 n 
+0000431213 00000 n 
+0000433948 00000 n 
+0000434009 00000 n 
+0000434130 00000 n 
+0000434191 00000 n 
+0000434312 00000 n 
+0000438327 00000 n 
+0000437968 00000 n 
+0000434513 00000 n 
+0000438084 00000 n 
+0000438145 00000 n 
+0000438266 00000 n 
+0001632411 00000 n 
+0000441867 00000 n 
+0000441446 00000 n 
+0000438521 00000 n 
+0000441562 00000 n 
+0000441623 00000 n 
+0000441684 00000 n 
+0000441745 00000 n 
+0000441806 00000 n 
+0000445169 00000 n 
+0000444689 00000 n 
+0000442005 00000 n 
+0000444805 00000 n 
+0000444926 00000 n 
+0000444987 00000 n 
+0000445048 00000 n 
+0000448235 00000 n 
+0000447815 00000 n 
+0000445280 00000 n 
+0000447931 00000 n 
+0000447992 00000 n 
+0000448053 00000 n 
+0000448113 00000 n 
+0000448174 00000 n 
+0000450929 00000 n 
+0000450569 00000 n 
+0000448373 00000 n 
+0000450685 00000 n 
+0000450746 00000 n 
+0000450807 00000 n 
+0000450868 00000 n 
+0000459760 00000 n 
+0000459920 00000 n 
+0000455810 00000 n 
+0000455451 00000 n 
+0000451040 00000 n 
+0000455567 00000 n 
+0000455628 00000 n 
+0000455689 00000 n 
+0000460382 00000 n 
+0000459614 00000 n 
+0000455961 00000 n 
+0000460079 00000 n 
+0000460140 00000 n 
+0000460321 00000 n 
+0001632536 00000 n 
+0000467897 00000 n 
+0000464312 00000 n 
+0000464014 00000 n 
+0000460546 00000 n 
+0000464130 00000 n 
+0000464251 00000 n 
+0000468047 00000 n 
+0000468196 00000 n 
+0000468712 00000 n 
+0000467742 00000 n 
+0000464449 00000 n 
+0000468349 00000 n 
+0000468470 00000 n 
+0000468591 00000 n 
+0000473500 00000 n 
+0000473656 00000 n 
+0000473812 00000 n 
+0000473967 00000 n 
+0000474120 00000 n 
+0000474274 00000 n 
+0000474558 00000 n 
+0000473318 00000 n 
+0000468932 00000 n 
+0000474436 00000 n 
+0000474497 00000 n 
+0000478692 00000 n 
+0000478843 00000 n 
+0000478997 00000 n 
+0000479151 00000 n 
+0000479307 00000 n 
+0000479644 00000 n 
+0000478519 00000 n 
+0000474697 00000 n 
+0000479462 00000 n 
+0000479583 00000 n 
+0000484289 00000 n 
+0000484444 00000 n 
+0000484609 00000 n 
+0000484760 00000 n 
+0000484915 00000 n 
+0000485071 00000 n 
+0000485227 00000 n 
+0000489826 00000 n 
+0000485563 00000 n 
+0000484098 00000 n 
+0000479796 00000 n 
+0000485381 00000 n 
+0000485502 00000 n 
+0000489981 00000 n 
+0000490146 00000 n 
+0000490297 00000 n 
+0000490452 00000 n 
+0000490608 00000 n 
+0000490763 00000 n 
+0000491108 00000 n 
+0000489635 00000 n 
+0000485715 00000 n 
+0000490926 00000 n 
+0000491047 00000 n 
+0001632661 00000 n 
+0000494703 00000 n 
+0000494859 00000 n 
+0000495327 00000 n 
+0000494557 00000 n 
+0000491259 00000 n 
+0000495024 00000 n 
+0000495145 00000 n 
+0000495266 00000 n 
+0000499257 00000 n 
+0000499412 00000 n 
+0000499576 00000 n 
+0000500216 00000 n 
+0000499102 00000 n 
+0000495518 00000 n 
+0000499731 00000 n 
+0000499852 00000 n 
+0000499913 00000 n 
+0000499974 00000 n 
+0000500035 00000 n 
+0000500096 00000 n 
+0000500156 00000 n 
+0000503266 00000 n 
+0000503425 00000 n 
+0000503585 00000 n 
+0000503744 00000 n 
+0000503904 00000 n 
+0000504055 00000 n 
+0000504204 00000 n 
+0000504353 00000 n 
+0000505426 00000 n 
+0000503066 00000 n 
+0000500394 00000 n 
+0000504512 00000 n 
+0000504573 00000 n 
+0000504634 00000 n 
+0000504695 00000 n 
+0000504756 00000 n 
+0000504817 00000 n 
+0000504878 00000 n 
+0000504939 00000 n 
+0000505000 00000 n 
+0000505061 00000 n 
+0000505122 00000 n 
+0000505183 00000 n 
+0000505244 00000 n 
+0000505365 00000 n 
+0000508851 00000 n 
+0000509251 00000 n 
+0000508714 00000 n 
+0000505591 00000 n 
+0000509008 00000 n 
+0000509069 00000 n 
+0000509130 00000 n 
+0000512995 00000 n 
+0000512636 00000 n 
+0000509416 00000 n 
+0000512752 00000 n 
+0000512873 00000 n 
+0000512934 00000 n 
+0000516177 00000 n 
+0000515757 00000 n 
+0000513146 00000 n 
+0000515873 00000 n 
+0000515994 00000 n 
+0000516055 00000 n 
+0000516116 00000 n 
+0001632786 00000 n 
+0000519164 00000 n 
+0000518744 00000 n 
+0000516330 00000 n 
+0000518860 00000 n 
+0000518981 00000 n 
+0000519042 00000 n 
+0000519103 00000 n 
+0000523468 00000 n 
+0000523623 00000 n 
+0000523776 00000 n 
+0000524233 00000 n 
+0000523313 00000 n 
+0000519317 00000 n 
+0000523930 00000 n 
+0000523991 00000 n 
+0000524112 00000 n 
+0000529055 00000 n 
+0000529211 00000 n 
+0000529748 00000 n 
+0000528909 00000 n 
+0000524398 00000 n 
+0000529367 00000 n 
+0000529428 00000 n 
+0000529492 00000 n 
+0000529556 00000 n 
+0000529620 00000 n 
+0000529684 00000 n 
+0001241759 00000 n 
+0000533349 00000 n 
+0000536153 00000 n 
+0000533685 00000 n 
+0000533212 00000 n 
+0000529927 00000 n 
+0000533502 00000 n 
+0000533563 00000 n 
+0000533624 00000 n 
+0000536308 00000 n 
+0000537555 00000 n 
+0000536007 00000 n 
+0000533823 00000 n 
+0000536459 00000 n 
+0000536520 00000 n 
+0000536581 00000 n 
+0000536642 00000 n 
+0000536703 00000 n 
+0000536764 00000 n 
+0000536824 00000 n 
+0000536885 00000 n 
+0000536946 00000 n 
+0000537007 00000 n 
+0000537068 00000 n 
+0000537129 00000 n 
+0000537190 00000 n 
+0000537251 00000 n 
+0000537312 00000 n 
+0000537373 00000 n 
+0000537434 00000 n 
+0000537495 00000 n 
+0000541619 00000 n 
+0000541381 00000 n 
+0000537680 00000 n 
+0000541497 00000 n 
+0000541558 00000 n 
+0001632911 00000 n 
+0000545444 00000 n 
+0000545606 00000 n 
+0000545948 00000 n 
+0000545298 00000 n 
+0000541757 00000 n 
+0000545767 00000 n 
+0000545828 00000 n 
+0000545888 00000 n 
+0000548880 00000 n 
+0000549037 00000 n 
+0000549197 00000 n 
+0000549350 00000 n 
+0000549503 00000 n 
+0000549658 00000 n 
+0000549810 00000 n 
+0000549965 00000 n 
+0000550116 00000 n 
+0000550269 00000 n 
+0000550969 00000 n 
+0000548662 00000 n 
+0000546100 00000 n 
+0000550424 00000 n 
+0000550605 00000 n 
+0000550666 00000 n 
+0000550727 00000 n 
+0000550788 00000 n 
+0000550849 00000 n 
+0000550909 00000 n 
+0000555071 00000 n 
+0000555193 00000 n 
+0000554651 00000 n 
+0000551120 00000 n 
+0000554767 00000 n 
+0000554828 00000 n 
+0000554889 00000 n 
+0000554950 00000 n 
+0000555010 00000 n 
+0000555132 00000 n 
+0000558068 00000 n 
+0000558228 00000 n 
+0000558387 00000 n 
+0000558547 00000 n 
+0000558707 00000 n 
+0000559895 00000 n 
+0000557895 00000 n 
+0000555384 00000 n 
+0000558862 00000 n 
+0000558923 00000 n 
+0000558984 00000 n 
+0000559044 00000 n 
+0000559105 00000 n 
+0000559166 00000 n 
+0000559227 00000 n 
+0000559288 00000 n 
+0000559349 00000 n 
+0000559410 00000 n 
+0000559471 00000 n 
+0000559532 00000 n 
+0000559593 00000 n 
+0000559654 00000 n 
+0000559835 00000 n 
+0000563577 00000 n 
+0000563793 00000 n 
+0000563440 00000 n 
+0000560033 00000 n 
+0000563732 00000 n 
+0000567537 00000 n 
+0000567178 00000 n 
+0000563945 00000 n 
+0000567294 00000 n 
+0000567355 00000 n 
+0000567416 00000 n 
+0000567476 00000 n 
+0001633036 00000 n 
+0000574383 00000 n 
+0000570737 00000 n 
+0000570318 00000 n 
+0000567674 00000 n 
+0000570434 00000 n 
+0000570555 00000 n 
+0000570615 00000 n 
+0000570676 00000 n 
+0000574542 00000 n 
+0000574702 00000 n 
+0000575162 00000 n 
+0000574228 00000 n 
+0000570874 00000 n 
+0000574861 00000 n 
+0000575101 00000 n 
+0000578647 00000 n 
+0000578287 00000 n 
+0000575313 00000 n 
+0000578403 00000 n 
+0000578464 00000 n 
+0000578525 00000 n 
+0000578586 00000 n 
+0000582733 00000 n 
+0000582886 00000 n 
+0000583041 00000 n 
+0000583196 00000 n 
+0000583596 00000 n 
+0000582569 00000 n 
+0000578799 00000 n 
+0000583351 00000 n 
+0000583472 00000 n 
+0000587180 00000 n 
+0000590455 00000 n 
+0000587578 00000 n 
+0000587043 00000 n 
+0000583790 00000 n 
+0000587335 00000 n 
+0000587396 00000 n 
+0000587457 00000 n 
+0000587518 00000 n 
+0000590974 00000 n 
+0000590318 00000 n 
+0000587716 00000 n 
+0000590608 00000 n 
+0000590789 00000 n 
+0000590850 00000 n 
+0001633161 00000 n 
+0000593743 00000 n 
+0000593901 00000 n 
+0000597041 00000 n 
+0000594305 00000 n 
+0000593597 00000 n 
+0000591098 00000 n 
+0000594061 00000 n 
+0000594122 00000 n 
+0000594183 00000 n 
+0000594244 00000 n 
+0000597196 00000 n 
+0000597356 00000 n 
+0000597820 00000 n 
+0000596886 00000 n 
+0000594430 00000 n 
+0000597515 00000 n 
+0000597576 00000 n 
+0000597637 00000 n 
+0000597698 00000 n 
+0000597759 00000 n 
+0000601675 00000 n 
+0000601830 00000 n 
+0000601986 00000 n 
+0000602443 00000 n 
+0000601520 00000 n 
+0000597972 00000 n 
+0000602142 00000 n 
+0000602263 00000 n 
+0000602384 00000 n 
+0000605235 00000 n 
+0000605389 00000 n 
+0000609861 00000 n 
+0000606516 00000 n 
+0000605089 00000 n 
+0000602637 00000 n 
+0000605544 00000 n 
+0000605665 00000 n 
+0000605726 00000 n 
+0000605787 00000 n 
+0000605848 00000 n 
+0000605909 00000 n 
+0000605969 00000 n 
+0000606030 00000 n 
+0000606091 00000 n 
+0000606152 00000 n 
+0000606213 00000 n 
+0000606273 00000 n 
+0000606334 00000 n 
+0000606395 00000 n 
+0000606456 00000 n 
+0000610019 00000 n 
+0000610178 00000 n 
+0000610336 00000 n 
+0000610495 00000 n 
+0000610645 00000 n 
+0000610794 00000 n 
+0000610944 00000 n 
+0000611094 00000 n 
+0000611251 00000 n 
+0000612323 00000 n 
+0000609643 00000 n 
+0000606681 00000 n 
+0000611409 00000 n 
+0000611470 00000 n 
+0000611531 00000 n 
+0000611592 00000 n 
+0000611653 00000 n 
+0000611714 00000 n 
+0000611775 00000 n 
+0000611836 00000 n 
+0000611897 00000 n 
+0000611958 00000 n 
+0000612019 00000 n 
+0000612080 00000 n 
+0000612141 00000 n 
+0000612262 00000 n 
+0000619803 00000 n 
+0000615968 00000 n 
+0000615669 00000 n 
+0000612488 00000 n 
+0000615785 00000 n 
+0000615846 00000 n 
+0000615907 00000 n 
+0001633286 00000 n 
+0000620265 00000 n 
+0000619666 00000 n 
+0000616149 00000 n 
+0000619962 00000 n 
+0000620143 00000 n 
+0000620204 00000 n 
+0000623694 00000 n 
+0000623395 00000 n 
+0000620416 00000 n 
+0000623511 00000 n 
+0000623572 00000 n 
+0000623633 00000 n 
+0000627139 00000 n 
+0000626721 00000 n 
+0000623846 00000 n 
+0000626837 00000 n 
+0000626958 00000 n 
+0000627018 00000 n 
+0000627078 00000 n 
+0000630108 00000 n 
+0000630267 00000 n 
+0000630731 00000 n 
+0000629962 00000 n 
+0000627292 00000 n 
+0000630427 00000 n 
+0000630488 00000 n 
+0000630609 00000 n 
+0000630670 00000 n 
+0000634258 00000 n 
+0000634718 00000 n 
+0000634121 00000 n 
+0000630855 00000 n 
+0000634414 00000 n 
+0000634475 00000 n 
+0000634536 00000 n 
+0000634657 00000 n 
+0000639136 00000 n 
+0000639291 00000 n 
+0000639446 00000 n 
+0000639606 00000 n 
+0000639881 00000 n 
+0000638972 00000 n 
+0000634898 00000 n 
+0000639760 00000 n 
+0001633411 00000 n 
+0000641983 00000 n 
+0000641806 00000 n 
+0000640046 00000 n 
+0000641922 00000 n 
+0000644796 00000 n 
+0000644953 00000 n 
+0000645110 00000 n 
+0000645263 00000 n 
+0000645416 00000 n 
+0000645571 00000 n 
+0000645724 00000 n 
+0000645879 00000 n 
+0000646033 00000 n 
+0000646672 00000 n 
+0000644587 00000 n 
+0000642081 00000 n 
+0000646188 00000 n 
+0000646369 00000 n 
+0000646430 00000 n 
+0000646491 00000 n 
+0000646552 00000 n 
+0000646612 00000 n 
+0000649829 00000 n 
+0000649988 00000 n 
+0000650148 00000 n 
+0000650308 00000 n 
+0000650467 00000 n 
+0000655535 00000 n 
+0000651601 00000 n 
+0000649656 00000 n 
+0000646823 00000 n 
+0000650625 00000 n 
+0000650686 00000 n 
+0000650747 00000 n 
+0000650808 00000 n 
+0000650869 00000 n 
+0000650930 00000 n 
+0000650991 00000 n 
+0000651052 00000 n 
+0000651113 00000 n 
+0000651174 00000 n 
+0000651235 00000 n 
+0000651296 00000 n 
+0000651357 00000 n 
+0000651418 00000 n 
+0000651479 00000 n 
+0000651540 00000 n 
+0000655695 00000 n 
+0000655855 00000 n 
+0000656015 00000 n 
+0000656179 00000 n 
+0000656339 00000 n 
+0000656505 00000 n 
+0000656665 00000 n 
+0000656816 00000 n 
+0000656967 00000 n 
+0000657119 00000 n 
+0000657268 00000 n 
+0000657904 00000 n 
+0000655299 00000 n 
+0000651739 00000 n 
+0000657417 00000 n 
+0000657478 00000 n 
+0000657539 00000 n 
+0000657600 00000 n 
+0000657661 00000 n 
+0000657722 00000 n 
+0000657782 00000 n 
+0000657843 00000 n 
+0000661652 00000 n 
+0000662114 00000 n 
+0000661515 00000 n 
+0000658055 00000 n 
+0000661812 00000 n 
+0000661992 00000 n 
+0000662053 00000 n 
+0000665434 00000 n 
+0000665592 00000 n 
+0000666108 00000 n 
+0000665288 00000 n 
+0000662279 00000 n 
+0000665745 00000 n 
+0000665806 00000 n 
+0000665927 00000 n 
+0000666047 00000 n 
+0001633536 00000 n 
+0000670678 00000 n 
+0000670958 00000 n 
+0000670541 00000 n 
+0000666259 00000 n 
+0000670838 00000 n 
+0000674672 00000 n 
+0000675014 00000 n 
+0000674535 00000 n 
+0000671152 00000 n 
+0000674831 00000 n 
+0000674892 00000 n 
+0000674953 00000 n 
+0000678684 00000 n 
+0000678843 00000 n 
+0000679187 00000 n 
+0000678538 00000 n 
+0000675152 00000 n 
+0000679004 00000 n 
+0000679065 00000 n 
+0000679126 00000 n 
+0000682253 00000 n 
+0000682410 00000 n 
+0000687080 00000 n 
+0000682866 00000 n 
+0000682107 00000 n 
+0000679325 00000 n 
+0000682563 00000 n 
+0000682684 00000 n 
+0000682745 00000 n 
+0000687240 00000 n 
+0000687400 00000 n 
+0000687560 00000 n 
+0000687904 00000 n 
+0000686916 00000 n 
+0000683017 00000 n 
+0000687722 00000 n 
+0000687843 00000 n 
+0000692019 00000 n 
+0000692179 00000 n 
+0000692586 00000 n 
+0000691873 00000 n 
+0000688068 00000 n 
+0000692345 00000 n 
+0000692406 00000 n 
+0000692527 00000 n 
+0001633661 00000 n 
+0000696636 00000 n 
+0000696918 00000 n 
+0000696499 00000 n 
+0000692750 00000 n 
+0000696796 00000 n 
+0000696857 00000 n 
+0000700252 00000 n 
+0000700416 00000 n 
+0000700875 00000 n 
+0000700106 00000 n 
+0000697056 00000 n 
+0000700573 00000 n 
+0000700814 00000 n 
+0000703694 00000 n 
+0000703854 00000 n 
+0000704318 00000 n 
+0000703548 00000 n 
+0000701042 00000 n 
+0000704014 00000 n 
+0000704075 00000 n 
+0000704196 00000 n 
+0000704257 00000 n 
+0000707655 00000 n 
+0000707815 00000 n 
+0000707975 00000 n 
+0000708378 00000 n 
+0000707500 00000 n 
+0000704443 00000 n 
+0000708135 00000 n 
+0000708256 00000 n 
+0000708317 00000 n 
+0000711444 00000 n 
+0000711603 00000 n 
+0000711762 00000 n 
+0000715164 00000 n 
+0000715324 00000 n 
+0000712164 00000 n 
+0000711289 00000 n 
+0000708503 00000 n 
+0000711922 00000 n 
+0000712042 00000 n 
+0000712103 00000 n 
+0000715485 00000 n 
+0000715645 00000 n 
+0000716048 00000 n 
+0000715000 00000 n 
+0000712289 00000 n 
+0000715805 00000 n 
+0000715866 00000 n 
+0000715926 00000 n 
+0000715987 00000 n 
+0001633786 00000 n 
+0000719169 00000 n 
+0000723151 00000 n 
+0000719507 00000 n 
+0000719032 00000 n 
+0000716173 00000 n 
+0000719324 00000 n 
+0000719385 00000 n 
+0000719446 00000 n 
+0000723735 00000 n 
+0000723014 00000 n 
+0000719674 00000 n 
+0000723311 00000 n 
+0000723492 00000 n 
+0000723553 00000 n 
+0000723674 00000 n 
+0000727345 00000 n 
+0000731214 00000 n 
+0000727808 00000 n 
+0000727208 00000 n 
+0000723928 00000 n 
+0000727505 00000 n 
+0000727686 00000 n 
+0000727747 00000 n 
+0000731374 00000 n 
+0000731776 00000 n 
+0000731068 00000 n 
+0000727988 00000 n 
+0000731533 00000 n 
+0000731594 00000 n 
+0000731715 00000 n 
+0000735470 00000 n 
+0000735630 00000 n 
+0000735790 00000 n 
+0000735950 00000 n 
+0000736107 00000 n 
+0000736565 00000 n 
+0000735297 00000 n 
+0000731943 00000 n 
+0000736264 00000 n 
+0000736504 00000 n 
+0000740482 00000 n 
+0000740636 00000 n 
+0000740790 00000 n 
+0000740947 00000 n 
+0000745300 00000 n 
+0000745455 00000 n 
+0000741286 00000 n 
+0000740318 00000 n 
+0000736703 00000 n 
+0000741104 00000 n 
+0000741225 00000 n 
+0001633911 00000 n 
+0000745610 00000 n 
+0000745765 00000 n 
+0000746101 00000 n 
+0000745136 00000 n 
+0000741453 00000 n 
+0000745919 00000 n 
+0000746040 00000 n 
+0000750029 00000 n 
+0000750182 00000 n 
+0000750336 00000 n 
+0000750485 00000 n 
+0000750638 00000 n 
+0000751038 00000 n 
+0000749856 00000 n 
+0000746268 00000 n 
+0000750796 00000 n 
+0000750917 00000 n 
+0000754846 00000 n 
+0000755002 00000 n 
+0000755345 00000 n 
+0000754700 00000 n 
+0000751205 00000 n 
+0000755162 00000 n 
+0000755223 00000 n 
+0000755284 00000 n 
+0000759295 00000 n 
+0000759451 00000 n 
+0000759611 00000 n 
+0000759763 00000 n 
+0000759918 00000 n 
+0000760256 00000 n 
+0000759122 00000 n 
+0000755512 00000 n 
+0000760075 00000 n 
+0000760196 00000 n 
+0000763846 00000 n 
+0000764000 00000 n 
+0000764281 00000 n 
+0000763700 00000 n 
+0000760436 00000 n 
+0000764160 00000 n 
+0000764221 00000 n 
+0000767976 00000 n 
+0000768131 00000 n 
+0000768351 00000 n 
+0000767830 00000 n 
+0000764448 00000 n 
+0000768290 00000 n 
+0001634036 00000 n 
+0000772489 00000 n 
+0000772641 00000 n 
+0000772795 00000 n 
+0000772955 00000 n 
+0000773111 00000 n 
+0000773264 00000 n 
+0000773604 00000 n 
+0000772307 00000 n 
+0000768518 00000 n 
+0000773422 00000 n 
+0000773543 00000 n 
+0000777648 00000 n 
+0000777804 00000 n 
+0000777956 00000 n 
+0000778235 00000 n 
+0000777493 00000 n 
+0000773784 00000 n 
+0000778113 00000 n 
+0000778174 00000 n 
+0000781978 00000 n 
+0000782130 00000 n 
+0000782285 00000 n 
+0000782440 00000 n 
+0000782841 00000 n 
+0000781814 00000 n 
+0000778373 00000 n 
+0000782599 00000 n 
+0000782720 00000 n 
+0000782781 00000 n 
+0000786066 00000 n 
+0000786221 00000 n 
+0000786562 00000 n 
+0000785920 00000 n 
+0000783035 00000 n 
+0000786381 00000 n 
+0000786502 00000 n 
+0000789261 00000 n 
+0000789539 00000 n 
+0000789124 00000 n 
+0000786713 00000 n 
+0000789417 00000 n 
+0000789478 00000 n 
+0000792290 00000 n 
+0000792446 00000 n 
+0000792783 00000 n 
+0000792144 00000 n 
+0000789650 00000 n 
+0000792601 00000 n 
+0000792722 00000 n 
+0001634161 00000 n 
+0000795929 00000 n 
+0000796084 00000 n 
+0000799859 00000 n 
+0000796420 00000 n 
+0000795783 00000 n 
+0000792920 00000 n 
+0000796238 00000 n 
+0000796299 00000 n 
+0000800261 00000 n 
+0000799722 00000 n 
+0000796571 00000 n 
+0000800018 00000 n 
+0000800139 00000 n 
+0000800200 00000 n 
+0000804220 00000 n 
+0000804375 00000 n 
+0000804710 00000 n 
+0000804074 00000 n 
+0000800439 00000 n 
+0000804529 00000 n 
+0000804649 00000 n 
+0000807186 00000 n 
+0000806948 00000 n 
+0000804904 00000 n 
+0000807064 00000 n 
+0000807125 00000 n 
+0000807575 00000 n 
+0000807398 00000 n 
+0000807297 00000 n 
+0000807514 00000 n 
+0000809483 00000 n 
+0000809246 00000 n 
+0000807617 00000 n 
+0000809362 00000 n 
+0001634286 00000 n 
+0000812822 00000 n 
+0000812975 00000 n 
+0000813246 00000 n 
+0000812676 00000 n 
+0000809607 00000 n 
+0000813126 00000 n 
+0000816444 00000 n 
+0000816721 00000 n 
+0000816307 00000 n 
+0000813384 00000 n 
+0000816597 00000 n 
+0001629612 00000 n 
+0000820470 00000 n 
+0000820293 00000 n 
+0000816873 00000 n 
+0000820409 00000 n 
+0000824341 00000 n 
+0000824164 00000 n 
+0000820636 00000 n 
+0000824280 00000 n 
+0000828948 00000 n 
+0000828711 00000 n 
+0000824534 00000 n 
+0000828827 00000 n 
+0000832270 00000 n 
+0000832423 00000 n 
+0000832637 00000 n 
+0000832124 00000 n 
+0000829140 00000 n 
+0000832576 00000 n 
+0001634411 00000 n 
+0000837032 00000 n 
+0000836734 00000 n 
+0000832788 00000 n 
+0000836850 00000 n 
+0000836911 00000 n 
+0000840597 00000 n 
+0000840750 00000 n 
+0000840964 00000 n 
+0000840451 00000 n 
+0000837212 00000 n 
+0000840903 00000 n 
+0000844333 00000 n 
+0000844095 00000 n 
+0000841102 00000 n 
+0000844211 00000 n 
+0000844272 00000 n 
+0000849482 00000 n 
+0000849245 00000 n 
+0000844500 00000 n 
+0000849361 00000 n 
+0000852690 00000 n 
+0000852842 00000 n 
+0000853055 00000 n 
+0000852544 00000 n 
+0000849675 00000 n 
+0000852994 00000 n 
+0000858018 00000 n 
+0000857720 00000 n 
+0000853206 00000 n 
+0000857836 00000 n 
+0000857897 00000 n 
+0001634536 00000 n 
+0000861769 00000 n 
+0000861922 00000 n 
+0000862136 00000 n 
+0000861623 00000 n 
+0000858211 00000 n 
+0000862075 00000 n 
+0000866668 00000 n 
+0000869938 00000 n 
+0000870095 00000 n 
+0000867000 00000 n 
+0000866531 00000 n 
+0000862287 00000 n 
+0000866818 00000 n 
+0000866879 00000 n 
+0000870253 00000 n 
+0000870466 00000 n 
+0000869783 00000 n 
+0000867194 00000 n 
+0000870405 00000 n 
+0001241455 00000 n 
+0001242063 00000 n 
+0000874846 00000 n 
+0000874999 00000 n 
+0000875153 00000 n 
+0000875488 00000 n 
+0000874691 00000 n 
+0000870618 00000 n 
+0000875306 00000 n 
+0000875367 00000 n 
+0001241638 00000 n 
+0000879279 00000 n 
+0000878981 00000 n 
+0000875682 00000 n 
+0000879097 00000 n 
+0000879158 00000 n 
+0000881537 00000 n 
+0000881360 00000 n 
+0000879459 00000 n 
+0000881476 00000 n 
+0001634661 00000 n 
+0000885035 00000 n 
+0000885187 00000 n 
+0000885461 00000 n 
+0000884889 00000 n 
+0000881649 00000 n 
+0000885340 00000 n 
+0000888442 00000 n 
+0000888202 00000 n 
+0000885612 00000 n 
+0000888318 00000 n 
+0000888845 00000 n 
+0000888668 00000 n 
+0000888567 00000 n 
+0000888784 00000 n 
+0000892157 00000 n 
+0000896723 00000 n 
+0000892438 00000 n 
+0000892020 00000 n 
+0000888887 00000 n 
+0000892317 00000 n 
+0000896883 00000 n 
+0000897340 00000 n 
+0000896577 00000 n 
+0000892589 00000 n 
+0000897037 00000 n 
+0000897158 00000 n 
+0000897279 00000 n 
+0000900905 00000 n 
+0000901061 00000 n 
+0000901457 00000 n 
+0000900759 00000 n 
+0000897491 00000 n 
+0000901216 00000 n 
+0000901337 00000 n 
+0001634786 00000 n 
+0000903771 00000 n 
+0000903412 00000 n 
+0000901608 00000 n 
+0000903528 00000 n 
+0000903589 00000 n 
+0000903710 00000 n 
+0000906508 00000 n 
+0000906665 00000 n 
+0000906821 00000 n 
+0000906984 00000 n 
+0000907137 00000 n 
+0000907413 00000 n 
+0000906335 00000 n 
+0000903895 00000 n 
+0000907292 00000 n 
+0000910569 00000 n 
+0000910272 00000 n 
+0000907551 00000 n 
+0000910388 00000 n 
+0000914040 00000 n 
+0000915424 00000 n 
+0000914254 00000 n 
+0000913903 00000 n 
+0000910720 00000 n 
+0000914193 00000 n 
+0000922237 00000 n 
+0000915308 00000 n 
+0000914392 00000 n 
+0000922113 00000 n 
+0000918067 00000 n 
+0000918303 00000 n 
+0000918351 00000 n 
+0000918756 00000 n 
+0000918779 00000 n 
+0000919127 00000 n 
+0000919223 00000 n 
+0000926486 00000 n 
+0000926189 00000 n 
+0000922391 00000 n 
+0000926305 00000 n 
+0001634911 00000 n 
+0000929633 00000 n 
+0000929456 00000 n 
+0000926637 00000 n 
+0000929572 00000 n 
+0000933385 00000 n 
+0000933086 00000 n 
+0000929771 00000 n 
+0000933202 00000 n 
+0000933263 00000 n 
+0000933324 00000 n 
+0000936491 00000 n 
+0000936254 00000 n 
+0000933537 00000 n 
+0000936370 00000 n 
+0000939745 00000 n 
+0000939508 00000 n 
+0000936642 00000 n 
+0000939624 00000 n 
+0000942768 00000 n 
+0000943042 00000 n 
+0000942631 00000 n 
+0000939909 00000 n 
+0000942921 00000 n 
+0000947472 00000 n 
+0000945841 00000 n 
+0000945664 00000 n 
+0000943206 00000 n 
+0000945780 00000 n 
+0001635036 00000 n 
+0000956950 00000 n 
+0000947356 00000 n 
+0000945966 00000 n 
+0000956826 00000 n 
+0000950984 00000 n 
+0000951219 00000 n 
+0000951267 00000 n 
+0000951704 00000 n 
+0000951727 00000 n 
+0000952124 00000 n 
+0000952220 00000 n 
+0000964376 00000 n 
+0000964533 00000 n 
+0000960159 00000 n 
+0000959922 00000 n 
+0000957104 00000 n 
+0000960038 00000 n 
+0000964689 00000 n 
+0000964843 00000 n 
+0000964997 00000 n 
+0000965152 00000 n 
+0000965307 00000 n 
+0000965468 00000 n 
+0000965621 00000 n 
+0000965776 00000 n 
+0000965929 00000 n 
+0000966084 00000 n 
+0000966239 00000 n 
+0000966694 00000 n 
+0000964131 00000 n 
+0000960310 00000 n 
+0000966394 00000 n 
+0000970399 00000 n 
+0000970162 00000 n 
+0000966845 00000 n 
+0000970278 00000 n 
+0000972505 00000 n 
+0000972209 00000 n 
+0000970563 00000 n 
+0000972325 00000 n 
+0000975778 00000 n 
+0000975541 00000 n 
+0000972656 00000 n 
+0000975657 00000 n 
+0001627278 00000 n 
+0001635161 00000 n 
+0000979805 00000 n 
+0000979447 00000 n 
+0000975972 00000 n 
+0000979563 00000 n 
+0000979744 00000 n 
+0001086533 00000 n 
+0000981844 00000 n 
+0001086687 00000 n 
+0001088500 00000 n 
+0001086964 00000 n 
+0000981698 00000 n 
+0000979956 00000 n 
+0001086841 00000 n 
+0001194524 00000 n 
+0001088384 00000 n 
+0001087139 00000 n 
+0001194279 00000 n 
+0001194403 00000 n 
+0001196917 00000 n 
+0001196740 00000 n 
+0001194699 00000 n 
+0001196856 00000 n 
+0001199949 00000 n 
+0001199772 00000 n 
+0001197028 00000 n 
+0001199888 00000 n 
+0001202070 00000 n 
+0001201833 00000 n 
+0001200060 00000 n 
+0001201949 00000 n 
+0001635286 00000 n 
+0001206613 00000 n 
+0001206072 00000 n 
+0001202194 00000 n 
+0001206188 00000 n 
+0001206309 00000 n 
+0001206370 00000 n 
+0001206431 00000 n 
+0001206492 00000 n 
+0001206553 00000 n 
+0001211022 00000 n 
+0001209994 00000 n 
+0001206780 00000 n 
+0001210110 00000 n 
+0001210291 00000 n 
+0001210352 00000 n 
+0001210413 00000 n 
+0001210474 00000 n 
+0001210535 00000 n 
+0001210595 00000 n 
+0001210656 00000 n 
+0001210717 00000 n 
+0001210778 00000 n 
+0001210839 00000 n 
+0001210900 00000 n 
+0001210961 00000 n 
+0001213123 00000 n 
+0001213275 00000 n 
+0001213548 00000 n 
+0001212977 00000 n 
+0001211188 00000 n 
+0001213427 00000 n 
+0001217263 00000 n 
+0001217023 00000 n 
+0001213685 00000 n 
+0001217139 00000 n 
+0001219634 00000 n 
+0001219396 00000 n 
+0001217374 00000 n 
+0001219512 00000 n 
+0001221841 00000 n 
+0001221485 00000 n 
+0001219745 00000 n 
+0001221601 00000 n 
+0001635411 00000 n 
+0001225254 00000 n 
+0001225077 00000 n 
+0001221992 00000 n 
+0001225193 00000 n 
+0001228251 00000 n 
+0001228074 00000 n 
+0001225378 00000 n 
+0001228190 00000 n 
+0001231235 00000 n 
+0001231058 00000 n 
+0001228362 00000 n 
+0001231174 00000 n 
+0001233939 00000 n 
+0001233762 00000 n 
+0001231359 00000 n 
+0001233878 00000 n 
+0001234341 00000 n 
+0001234164 00000 n 
+0001234063 00000 n 
+0001234280 00000 n 
+0001238343 00000 n 
+0001237071 00000 n 
+0001234383 00000 n 
+0001237187 00000 n 
+0001237248 00000 n 
+0001635536 00000 n 
+0001242368 00000 n 
+0001241095 00000 n 
+0001238441 00000 n 
+0001241211 00000 n 
+0001245724 00000 n 
+0001245875 00000 n 
+0001246026 00000 n 
+0001246176 00000 n 
+0001246327 00000 n 
+0001246477 00000 n 
+0001246628 00000 n 
+0001246780 00000 n 
+0001246932 00000 n 
+0001247084 00000 n 
+0001247236 00000 n 
+0001247387 00000 n 
+0001247538 00000 n 
+0001247689 00000 n 
+0001247840 00000 n 
+0001247992 00000 n 
+0001248143 00000 n 
+0001248293 00000 n 
+0001248445 00000 n 
+0001248596 00000 n 
+0001248748 00000 n 
+0001248897 00000 n 
+0001249049 00000 n 
+0001249199 00000 n 
+0001249350 00000 n 
+0001249502 00000 n 
+0001249654 00000 n 
+0001249806 00000 n 
+0001249958 00000 n 
+0001250109 00000 n 
+0001250261 00000 n 
+0001250413 00000 n 
+0001250563 00000 n 
+0001250715 00000 n 
+0001250866 00000 n 
+0001251018 00000 n 
+0001251168 00000 n 
+0001251319 00000 n 
+0001251470 00000 n 
+0001251620 00000 n 
+0001251770 00000 n 
+0001251922 00000 n 
+0001252074 00000 n 
+0001252225 00000 n 
+0001252374 00000 n 
+0001252526 00000 n 
+0001252677 00000 n 
+0001252829 00000 n 
+0001252981 00000 n 
+0001253132 00000 n 
+0001253283 00000 n 
+0001253433 00000 n 
+0001253583 00000 n 
+0001253733 00000 n 
+0001253883 00000 n 
+0001254033 00000 n 
+0001254185 00000 n 
+0001254337 00000 n 
+0001254489 00000 n 
+0001254640 00000 n 
+0001254792 00000 n 
+0001254944 00000 n 
+0001255093 00000 n 
+0001255242 00000 n 
+0001255392 00000 n 
+0001255542 00000 n 
+0001255692 00000 n 
+0001255843 00000 n 
+0001255994 00000 n 
+0001256145 00000 n 
+0001256295 00000 n 
+0001256446 00000 n 
+0001256597 00000 n 
+0001256748 00000 n 
+0001256899 00000 n 
+0001257050 00000 n 
+0001257201 00000 n 
+0001257352 00000 n 
+0001257503 00000 n 
+0001257654 00000 n 
+0001257805 00000 n 
+0001257956 00000 n 
+0001258106 00000 n 
+0001258257 00000 n 
+0001258406 00000 n 
+0001258555 00000 n 
+0001258707 00000 n 
+0001258857 00000 n 
+0001259009 00000 n 
+0001259161 00000 n 
+0001259313 00000 n 
+0001259465 00000 n 
+0001259616 00000 n 
+0001259767 00000 n 
+0001259919 00000 n 
+0001260070 00000 n 
+0001260222 00000 n 
+0001260373 00000 n 
+0001260525 00000 n 
+0001260676 00000 n 
+0001260826 00000 n 
+0001260977 00000 n 
+0001261127 00000 n 
+0001261277 00000 n 
+0001261427 00000 n 
+0001261576 00000 n 
+0001261725 00000 n 
+0001261873 00000 n 
+0001262022 00000 n 
+0001262172 00000 n 
+0001262321 00000 n 
+0001262470 00000 n 
+0001262619 00000 n 
+0001262768 00000 n 
+0001269514 00000 n 
+0001269665 00000 n 
+0001269816 00000 n 
+0001269967 00000 n 
+0001270118 00000 n 
+0001270269 00000 n 
+0001270420 00000 n 
+0001270571 00000 n 
+0001270722 00000 n 
+0001270873 00000 n 
+0001263039 00000 n 
+0001244570 00000 n 
+0001242466 00000 n 
+0001262918 00000 n 
+0001271024 00000 n 
+0001271176 00000 n 
+0001271328 00000 n 
+0001271480 00000 n 
+0001271632 00000 n 
+0001271783 00000 n 
+0001271934 00000 n 
+0001272085 00000 n 
+0001272236 00000 n 
+0001272387 00000 n 
+0001272536 00000 n 
+0001272684 00000 n 
+0001272833 00000 n 
+0001272985 00000 n 
+0001273136 00000 n 
+0001273285 00000 n 
+0001273436 00000 n 
+0001273588 00000 n 
+0001273740 00000 n 
+0001273889 00000 n 
+0001274041 00000 n 
+0001274192 00000 n 
+0001274344 00000 n 
+0001274496 00000 n 
+0001274648 00000 n 
+0001274799 00000 n 
+0001274949 00000 n 
+0001275100 00000 n 
+0001275251 00000 n 
+0001275402 00000 n 
+0001275553 00000 n 
+0001275704 00000 n 
+0001275855 00000 n 
+0001276006 00000 n 
+0001276157 00000 n 
+0001276307 00000 n 
+0001276458 00000 n 
+0001276608 00000 n 
+0001276759 00000 n 
+0001276910 00000 n 
+0001277062 00000 n 
+0001277214 00000 n 
+0001277365 00000 n 
+0001277517 00000 n 
+0001277669 00000 n 
+0001277821 00000 n 
+0001277973 00000 n 
+0001278125 00000 n 
+0001278277 00000 n 
+0001278429 00000 n 
+0001278580 00000 n 
+0001278730 00000 n 
+0001278878 00000 n 
+0001279026 00000 n 
+0001279177 00000 n 
+0001279328 00000 n 
+0001279480 00000 n 
+0001279632 00000 n 
+0001279784 00000 n 
+0001279935 00000 n 
+0001280087 00000 n 
+0001280239 00000 n 
+0001280390 00000 n 
+0001280541 00000 n 
+0001280692 00000 n 
+0001280842 00000 n 
+0001280993 00000 n 
+0001281144 00000 n 
+0001281295 00000 n 
+0001281447 00000 n 
+0001281599 00000 n 
+0001281751 00000 n 
+0001281903 00000 n 
+0001282055 00000 n 
+0001282207 00000 n 
+0001282358 00000 n 
+0001282508 00000 n 
+0001282659 00000 n 
+0001282809 00000 n 
+0001282960 00000 n 
+0001283111 00000 n 
+0001283261 00000 n 
+0001283412 00000 n 
+0001283563 00000 n 
+0001283714 00000 n 
+0001283865 00000 n 
+0001284016 00000 n 
+0001284167 00000 n 
+0001284318 00000 n 
+0001284469 00000 n 
+0001284621 00000 n 
+0001284773 00000 n 
+0001284925 00000 n 
+0001285077 00000 n 
+0001285229 00000 n 
+0001285381 00000 n 
+0001285533 00000 n 
+0001285685 00000 n 
+0001285837 00000 n 
+0001285989 00000 n 
+0001286140 00000 n 
+0001286292 00000 n 
+0001286444 00000 n 
+0001286595 00000 n 
+0001286747 00000 n 
+0001286899 00000 n 
+0001287051 00000 n 
+0001287202 00000 n 
+0001287353 00000 n 
+0001287504 00000 n 
+0001287654 00000 n 
+0001287806 00000 n 
+0001287958 00000 n 
+0001288109 00000 n 
+0001288260 00000 n 
+0001288412 00000 n 
+0001288563 00000 n 
+0001288715 00000 n 
+0001288866 00000 n 
+0001289015 00000 n 
+0001289166 00000 n 
+0001289317 00000 n 
+0001289468 00000 n 
+0001289620 00000 n 
+0001289772 00000 n 
+0001289922 00000 n 
+0001290073 00000 n 
+0001290225 00000 n 
+0001290376 00000 n 
+0001290528 00000 n 
+0001290679 00000 n 
+0001290831 00000 n 
+0001290982 00000 n 
+0001291134 00000 n 
+0001291286 00000 n 
+0001291437 00000 n 
+0001291588 00000 n 
+0001291740 00000 n 
+0001291892 00000 n 
+0001292044 00000 n 
+0001292196 00000 n 
+0001292348 00000 n 
+0001292499 00000 n 
+0001292651 00000 n 
+0001292799 00000 n 
+0001292949 00000 n 
+0001293098 00000 n 
+0001293247 00000 n 
+0001293397 00000 n 
+0001293546 00000 n 
+0001293696 00000 n 
+0001293845 00000 n 
+0001293994 00000 n 
+0001294145 00000 n 
+0001294294 00000 n 
+0001294443 00000 n 
+0001294594 00000 n 
+0001294745 00000 n 
+0001294896 00000 n 
+0001295047 00000 n 
+0001295197 00000 n 
+0001295348 00000 n 
+0001295499 00000 n 
+0001295650 00000 n 
+0001295801 00000 n 
+0001295952 00000 n 
+0001296103 00000 n 
+0001296253 00000 n 
+0001296404 00000 n 
+0001296553 00000 n 
+0001296702 00000 n 
+0001296851 00000 n 
+0001297000 00000 n 
+0001297149 00000 n 
+0001297299 00000 n 
+0001297449 00000 n 
+0001297599 00000 n 
+0001297749 00000 n 
+0001297899 00000 n 
+0001298051 00000 n 
+0001298203 00000 n 
+0001298353 00000 n 
+0001298505 00000 n 
+0001298655 00000 n 
+0001298807 00000 n 
+0001298959 00000 n 
+0001299110 00000 n 
+0001299262 00000 n 
+0001299414 00000 n 
+0001299562 00000 n 
+0001299712 00000 n 
+0001299863 00000 n 
+0001300014 00000 n 
+0001300164 00000 n 
+0001300316 00000 n 
+0001300468 00000 n 
+0001300620 00000 n 
+0001300771 00000 n 
+0001300923 00000 n 
+0001301074 00000 n 
+0001301225 00000 n 
+0001301376 00000 n 
+0001301527 00000 n 
+0001301679 00000 n 
+0001301831 00000 n 
+0001301982 00000 n 
+0001302133 00000 n 
+0001302284 00000 n 
+0001302435 00000 n 
+0001302586 00000 n 
+0001302737 00000 n 
+0001302888 00000 n 
+0001303038 00000 n 
+0001303188 00000 n 
+0001303338 00000 n 
+0001303489 00000 n 
+0001303641 00000 n 
+0001303792 00000 n 
+0001303943 00000 n 
+0001304094 00000 n 
+0001304245 00000 n 
+0001304397 00000 n 
+0001304548 00000 n 
+0001304699 00000 n 
+0001304850 00000 n 
+0001305002 00000 n 
+0001305153 00000 n 
+0001305304 00000 n 
+0001305454 00000 n 
+0001305606 00000 n 
+0001305758 00000 n 
+0001305909 00000 n 
+0001306059 00000 n 
+0001306210 00000 n 
+0001306362 00000 n 
+0001306513 00000 n 
+0001306665 00000 n 
+0001306816 00000 n 
+0001306966 00000 n 
+0001307118 00000 n 
+0001307270 00000 n 
+0001307421 00000 n 
+0001307573 00000 n 
+0001307725 00000 n 
+0001307874 00000 n 
+0001308022 00000 n 
+0001308171 00000 n 
+0001308320 00000 n 
+0001308470 00000 n 
+0001308620 00000 n 
+0001308769 00000 n 
+0001312871 00000 n 
+0001308979 00000 n 
+0001267037 00000 n 
+0001263150 00000 n 
+0001308918 00000 n 
+0001313021 00000 n 
+0001313171 00000 n 
+0001313322 00000 n 
+0001313473 00000 n 
+0001313625 00000 n 
+0001313776 00000 n 
+0001313928 00000 n 
+0001314080 00000 n 
+0001314231 00000 n 
+0001314383 00000 n 
+0001314531 00000 n 
+0001314680 00000 n 
+0001314831 00000 n 
+0001314982 00000 n 
+0001315132 00000 n 
+0001315284 00000 n 
+0001315436 00000 n 
+0001315587 00000 n 
+0001315738 00000 n 
+0001315889 00000 n 
+0001316039 00000 n 
+0001316190 00000 n 
+0001316342 00000 n 
+0001316494 00000 n 
+0001316646 00000 n 
+0001316798 00000 n 
+0001316949 00000 n 
+0001317100 00000 n 
+0001317251 00000 n 
+0001317403 00000 n 
+0001317554 00000 n 
+0001317705 00000 n 
+0001317856 00000 n 
+0001318007 00000 n 
+0001318158 00000 n 
+0001318309 00000 n 
+0001318458 00000 n 
+0001318609 00000 n 
+0001318757 00000 n 
+0001318909 00000 n 
+0001319061 00000 n 
+0001319212 00000 n 
+0001319364 00000 n 
+0001319516 00000 n 
+0001319665 00000 n 
+0001319815 00000 n 
+0001319966 00000 n 
+0001320116 00000 n 
+0001320267 00000 n 
+0001320419 00000 n 
+0001320571 00000 n 
+0001320723 00000 n 
+0001320873 00000 n 
+0001321025 00000 n 
+0001321176 00000 n 
+0001321327 00000 n 
+0001321478 00000 n 
+0001321628 00000 n 
+0001321778 00000 n 
+0001321929 00000 n 
+0001322080 00000 n 
+0001322231 00000 n 
+0001322382 00000 n 
+0001322533 00000 n 
+0001322684 00000 n 
+0001322835 00000 n 
+0001322986 00000 n 
+0001323137 00000 n 
+0001323288 00000 n 
+0001323438 00000 n 
+0001323588 00000 n 
+0001323735 00000 n 
+0001323884 00000 n 
+0001324032 00000 n 
+0001324182 00000 n 
+0001324332 00000 n 
+0001324482 00000 n 
+0001324633 00000 n 
+0001324783 00000 n 
+0001324934 00000 n 
+0001325084 00000 n 
+0001325236 00000 n 
+0001325385 00000 n 
+0001325537 00000 n 
+0001325689 00000 n 
+0001325841 00000 n 
+0001325992 00000 n 
+0001326144 00000 n 
+0001326295 00000 n 
+0001326446 00000 n 
+0001326596 00000 n 
+0001326747 00000 n 
+0001326898 00000 n 
+0001327049 00000 n 
+0001327200 00000 n 
+0001327351 00000 n 
+0001327503 00000 n 
+0001327652 00000 n 
+0001327801 00000 n 
+0001327949 00000 n 
+0001328100 00000 n 
+0001328251 00000 n 
+0001328402 00000 n 
+0001328554 00000 n 
+0001328706 00000 n 
+0001328858 00000 n 
+0001329008 00000 n 
+0001329160 00000 n 
+0001329310 00000 n 
+0001329462 00000 n 
+0001329612 00000 n 
+0001329763 00000 n 
+0001329914 00000 n 
+0001330065 00000 n 
+0001330216 00000 n 
+0001330367 00000 n 
+0001330519 00000 n 
+0001330671 00000 n 
+0001330822 00000 n 
+0001330973 00000 n 
+0001331124 00000 n 
+0001331275 00000 n 
+0001331426 00000 n 
+0001331577 00000 n 
+0001331727 00000 n 
+0001331877 00000 n 
+0001332027 00000 n 
+0001332177 00000 n 
+0001332328 00000 n 
+0001332479 00000 n 
+0001332630 00000 n 
+0001332781 00000 n 
+0001332933 00000 n 
+0001333084 00000 n 
+0001333235 00000 n 
+0001333386 00000 n 
+0001333537 00000 n 
+0001333687 00000 n 
+0001333838 00000 n 
+0001333990 00000 n 
+0001334141 00000 n 
+0001334292 00000 n 
+0001334441 00000 n 
+0001334592 00000 n 
+0001334743 00000 n 
+0001334893 00000 n 
+0001335040 00000 n 
+0001335187 00000 n 
+0001335337 00000 n 
+0001335487 00000 n 
+0001339793 00000 n 
+0001335697 00000 n 
+0001311384 00000 n 
+0001309090 00000 n 
+0001335636 00000 n 
+0001339945 00000 n 
+0001340096 00000 n 
+0001340247 00000 n 
+0001340399 00000 n 
+0001340551 00000 n 
+0001340703 00000 n 
+0001340855 00000 n 
+0001341006 00000 n 
+0001341155 00000 n 
+0001341307 00000 n 
+0001341459 00000 n 
+0001341611 00000 n 
+0001341763 00000 n 
+0001341914 00000 n 
+0001342065 00000 n 
+0001342216 00000 n 
+0001342367 00000 n 
+0001342518 00000 n 
+0001342668 00000 n 
+0001342819 00000 n 
+0001342971 00000 n 
+0001343121 00000 n 
+0001343272 00000 n 
+0001343424 00000 n 
+0001343576 00000 n 
+0001343728 00000 n 
+0001343880 00000 n 
+0001344027 00000 n 
+0001344178 00000 n 
+0001344328 00000 n 
+0001344477 00000 n 
+0001344628 00000 n 
+0001344778 00000 n 
+0001344929 00000 n 
+0001345080 00000 n 
+0001345231 00000 n 
+0001345382 00000 n 
+0001345532 00000 n 
+0001345682 00000 n 
+0001345832 00000 n 
+0001345983 00000 n 
+0001346133 00000 n 
+0001346284 00000 n 
+0001346435 00000 n 
+0001346586 00000 n 
+0001346737 00000 n 
+0001346886 00000 n 
+0001347036 00000 n 
+0001347187 00000 n 
+0001347338 00000 n 
+0001347489 00000 n 
+0001347640 00000 n 
+0001347791 00000 n 
+0001347942 00000 n 
+0001348093 00000 n 
+0001348244 00000 n 
+0001348395 00000 n 
+0001348546 00000 n 
+0001348696 00000 n 
+0001348843 00000 n 
+0001348990 00000 n 
+0001349139 00000 n 
+0001349288 00000 n 
+0001349437 00000 n 
+0001349587 00000 n 
+0001349736 00000 n 
+0001349886 00000 n 
+0001350037 00000 n 
+0001350188 00000 n 
+0001350339 00000 n 
+0001350490 00000 n 
+0001350638 00000 n 
+0001350789 00000 n 
+0001350939 00000 n 
+0001351090 00000 n 
+0001351241 00000 n 
+0001351391 00000 n 
+0001351541 00000 n 
+0001351691 00000 n 
+0001351842 00000 n 
+0001351993 00000 n 
+0001352143 00000 n 
+0001352294 00000 n 
+0001352445 00000 n 
+0001352593 00000 n 
+0001352743 00000 n 
+0001352894 00000 n 
+0001353045 00000 n 
+0001353196 00000 n 
+0001353346 00000 n 
+0001353495 00000 n 
+0001353646 00000 n 
+0001353797 00000 n 
+0001353948 00000 n 
+0001354098 00000 n 
+0001354249 00000 n 
+0001354400 00000 n 
+0001354550 00000 n 
+0001354700 00000 n 
+0001354851 00000 n 
+0001355003 00000 n 
+0001355153 00000 n 
+0001355305 00000 n 
+0001355456 00000 n 
+0001355608 00000 n 
+0001355760 00000 n 
+0001355910 00000 n 
+0001356061 00000 n 
+0001356212 00000 n 
+0001356364 00000 n 
+0001356516 00000 n 
+0001356667 00000 n 
+0001356817 00000 n 
+0001356966 00000 n 
+0001357114 00000 n 
+0001357263 00000 n 
+0001357412 00000 n 
+0001357561 00000 n 
+0001357711 00000 n 
+0001357863 00000 n 
+0001358015 00000 n 
+0001358166 00000 n 
+0001358317 00000 n 
+0001358467 00000 n 
+0001358618 00000 n 
+0001358769 00000 n 
+0001358921 00000 n 
+0001359072 00000 n 
+0001359223 00000 n 
+0001359373 00000 n 
+0001359524 00000 n 
+0001359674 00000 n 
+0001359825 00000 n 
+0001359977 00000 n 
+0001360128 00000 n 
+0001360279 00000 n 
+0001360430 00000 n 
+0001360582 00000 n 
+0001360733 00000 n 
+0001360884 00000 n 
+0001361032 00000 n 
+0001361180 00000 n 
+0001361329 00000 n 
+0001365712 00000 n 
+0001365862 00000 n 
+0001366012 00000 n 
+0001366163 00000 n 
+0001361539 00000 n 
+0001338369 00000 n 
+0001335808 00000 n 
+0001361478 00000 n 
+0001366314 00000 n 
+0001366464 00000 n 
+0001366615 00000 n 
+0001366762 00000 n 
+0001366908 00000 n 
+0001367056 00000 n 
+0001367205 00000 n 
+0001367356 00000 n 
+0001367508 00000 n 
+0001367659 00000 n 
+0001367809 00000 n 
+0001367960 00000 n 
+0001368111 00000 n 
+0001368262 00000 n 
+0001368412 00000 n 
+0001368563 00000 n 
+0001368714 00000 n 
+0001368866 00000 n 
+0001369018 00000 n 
+0001369167 00000 n 
+0001369317 00000 n 
+0001369468 00000 n 
+0001369618 00000 n 
+0001369770 00000 n 
+0001369919 00000 n 
+0001370070 00000 n 
+0001370222 00000 n 
+0001370373 00000 n 
+0001370523 00000 n 
+0001370674 00000 n 
+0001370825 00000 n 
+0001370976 00000 n 
+0001371127 00000 n 
+0001371278 00000 n 
+0001371430 00000 n 
+0001371582 00000 n 
+0001371734 00000 n 
+0001371886 00000 n 
+0001372037 00000 n 
+0001372188 00000 n 
+0001372338 00000 n 
+0001372489 00000 n 
+0001372640 00000 n 
+0001372791 00000 n 
+0001372943 00000 n 
+0001373095 00000 n 
+0001373247 00000 n 
+0001373399 00000 n 
+0001373550 00000 n 
+0001373701 00000 n 
+0001373852 00000 n 
+0001374004 00000 n 
+0001374155 00000 n 
+0001374306 00000 n 
+0001374457 00000 n 
+0001374608 00000 n 
+0001374759 00000 n 
+0001374911 00000 n 
+0001375063 00000 n 
+0001375215 00000 n 
+0001375367 00000 n 
+0001375519 00000 n 
+0001375670 00000 n 
+0001375821 00000 n 
+0001375972 00000 n 
+0001376122 00000 n 
+0001376273 00000 n 
+0001376424 00000 n 
+0001376575 00000 n 
+0001376727 00000 n 
+0001376879 00000 n 
+0001377031 00000 n 
+0001377183 00000 n 
+0001377334 00000 n 
+0001377484 00000 n 
+0001377634 00000 n 
+0001377785 00000 n 
+0001377935 00000 n 
+0001378084 00000 n 
+0001378235 00000 n 
+0001378384 00000 n 
+0001378535 00000 n 
+0001378686 00000 n 
+0001378837 00000 n 
+0001378988 00000 n 
+0001379139 00000 n 
+0001379291 00000 n 
+0001379442 00000 n 
+0001379594 00000 n 
+0001379745 00000 n 
+0001379895 00000 n 
+0001380046 00000 n 
+0001380197 00000 n 
+0001380348 00000 n 
+0001380500 00000 n 
+0001380651 00000 n 
+0001380800 00000 n 
+0001380949 00000 n 
+0001381098 00000 n 
+0001381247 00000 n 
+0001381398 00000 n 
+0001381549 00000 n 
+0001381700 00000 n 
+0001381851 00000 n 
+0001382003 00000 n 
+0001382153 00000 n 
+0001382303 00000 n 
+0001382453 00000 n 
+0001382604 00000 n 
+0001382756 00000 n 
+0001382906 00000 n 
+0001383056 00000 n 
+0001383207 00000 n 
+0001383358 00000 n 
+0001383509 00000 n 
+0001383660 00000 n 
+0001383811 00000 n 
+0001383962 00000 n 
+0001384114 00000 n 
+0001384264 00000 n 
+0001384415 00000 n 
+0001384565 00000 n 
+0001384716 00000 n 
+0001384867 00000 n 
+0001385018 00000 n 
+0001385170 00000 n 
+0001385320 00000 n 
+0001385471 00000 n 
+0001385621 00000 n 
+0001385771 00000 n 
+0001385921 00000 n 
+0001386070 00000 n 
+0001386222 00000 n 
+0001386373 00000 n 
+0001386524 00000 n 
+0001386676 00000 n 
+0001386827 00000 n 
+0001386977 00000 n 
+0001387129 00000 n 
+0001387278 00000 n 
+0001387429 00000 n 
+0001387580 00000 n 
+0001387731 00000 n 
+0001387882 00000 n 
+0001388034 00000 n 
+0001388184 00000 n 
+0001388335 00000 n 
+0001388486 00000 n 
+0001388637 00000 n 
+0001388788 00000 n 
+0001388940 00000 n 
+0001389092 00000 n 
+0001389241 00000 n 
+0001389392 00000 n 
+0001389543 00000 n 
+0001389694 00000 n 
+0001389846 00000 n 
+0001389997 00000 n 
+0001390148 00000 n 
+0001390299 00000 n 
+0001390450 00000 n 
+0001390602 00000 n 
+0001390754 00000 n 
+0001390906 00000 n 
+0001391056 00000 n 
+0001391207 00000 n 
+0001391358 00000 n 
+0001391508 00000 n 
+0001391658 00000 n 
+0001391806 00000 n 
+0001391954 00000 n 
+0001392103 00000 n 
+0001392252 00000 n 
+0001392399 00000 n 
+0001392548 00000 n 
+0001397473 00000 n 
+0001392758 00000 n 
+0001363973 00000 n 
+0001361650 00000 n 
+0001392697 00000 n 
+0001635661 00000 n 
+0001397622 00000 n 
+0001397773 00000 n 
+0001397925 00000 n 
+0001398077 00000 n 
+0001398229 00000 n 
+0001398381 00000 n 
+0001398533 00000 n 
+0001398685 00000 n 
+0001398836 00000 n 
+0001398987 00000 n 
+0001399138 00000 n 
+0001399289 00000 n 
+0001399440 00000 n 
+0001399592 00000 n 
+0001399743 00000 n 
+0001399895 00000 n 
+0001400047 00000 n 
+0001400198 00000 n 
+0001400350 00000 n 
+0001400502 00000 n 
+0001400653 00000 n 
+0001400804 00000 n 
+0001400954 00000 n 
+0001401106 00000 n 
+0001401257 00000 n 
+0001401407 00000 n 
+0001401557 00000 n 
+0001401709 00000 n 
+0001401860 00000 n 
+0001402012 00000 n 
+0001402164 00000 n 
+0001402316 00000 n 
+0001402468 00000 n 
+0001402620 00000 n 
+0001402772 00000 n 
+0001402924 00000 n 
+0001403076 00000 n 
+0001403227 00000 n 
+0001403379 00000 n 
+0001403531 00000 n 
+0001403683 00000 n 
+0001403834 00000 n 
+0001403985 00000 n 
+0001404137 00000 n 
+0001404289 00000 n 
+0001404440 00000 n 
+0001404592 00000 n 
+0001404744 00000 n 
+0001404896 00000 n 
+0001405047 00000 n 
+0001405194 00000 n 
+0001405344 00000 n 
+0001405494 00000 n 
+0001405644 00000 n 
+0001405796 00000 n 
+0001405948 00000 n 
+0001406100 00000 n 
+0001406251 00000 n 
+0001406401 00000 n 
+0001406553 00000 n 
+0001406704 00000 n 
+0001406856 00000 n 
+0001407008 00000 n 
+0001407160 00000 n 
+0001407312 00000 n 
+0001407464 00000 n 
+0001407616 00000 n 
+0001407766 00000 n 
+0001407918 00000 n 
+0001408070 00000 n 
+0001408222 00000 n 
+0001408374 00000 n 
+0001408526 00000 n 
+0001408678 00000 n 
+0001408830 00000 n 
+0001408981 00000 n 
+0001409133 00000 n 
+0001409285 00000 n 
+0001409437 00000 n 
+0001409589 00000 n 
+0001409741 00000 n 
+0001409893 00000 n 
+0001410045 00000 n 
+0001410196 00000 n 
+0001410348 00000 n 
+0001410500 00000 n 
+0001410650 00000 n 
+0001410802 00000 n 
+0001410953 00000 n 
+0001411105 00000 n 
+0001411257 00000 n 
+0001411408 00000 n 
+0001411560 00000 n 
+0001411712 00000 n 
+0001411863 00000 n 
+0001412013 00000 n 
+0001412164 00000 n 
+0001412314 00000 n 
+0001412464 00000 n 
+0001412615 00000 n 
+0001412766 00000 n 
+0001412918 00000 n 
+0001413068 00000 n 
+0001413219 00000 n 
+0001413369 00000 n 
+0001413519 00000 n 
+0001413671 00000 n 
+0001413823 00000 n 
+0001413974 00000 n 
+0001414125 00000 n 
+0001414276 00000 n 
+0001414426 00000 n 
+0001414578 00000 n 
+0001414730 00000 n 
+0001414882 00000 n 
+0001415034 00000 n 
+0001415186 00000 n 
+0001415337 00000 n 
+0001415488 00000 n 
+0001415635 00000 n 
+0001415784 00000 n 
+0001415932 00000 n 
+0001416081 00000 n 
+0001416230 00000 n 
+0001416379 00000 n 
+0001416529 00000 n 
+0001419973 00000 n 
+0001416739 00000 n 
+0001396202 00000 n 
+0001392869 00000 n 
+0001416678 00000 n 
+0001420123 00000 n 
+0001420275 00000 n 
+0001420426 00000 n 
+0001420577 00000 n 
+0001420728 00000 n 
+0001420878 00000 n 
+0001421029 00000 n 
+0001421181 00000 n 
+0001421333 00000 n 
+0001421485 00000 n 
+0001421636 00000 n 
+0001421787 00000 n 
+0001421937 00000 n 
+0001422088 00000 n 
+0001422240 00000 n 
+0001422391 00000 n 
+0001422541 00000 n 
+0001422692 00000 n 
+0001422843 00000 n 
+0001422994 00000 n 
+0001423145 00000 n 
+0001423296 00000 n 
+0001423446 00000 n 
+0001423598 00000 n 
+0001423750 00000 n 
+0001423901 00000 n 
+0001424053 00000 n 
+0001424202 00000 n 
+0001424352 00000 n 
+0001424502 00000 n 
+0001424653 00000 n 
+0001424803 00000 n 
+0001424954 00000 n 
+0001425106 00000 n 
+0001425257 00000 n 
+0001425408 00000 n 
+0001425560 00000 n 
+0001425712 00000 n 
+0001425864 00000 n 
+0001426015 00000 n 
+0001426166 00000 n 
+0001426318 00000 n 
+0001426469 00000 n 
+0001426620 00000 n 
+0001426771 00000 n 
+0001426921 00000 n 
+0001427072 00000 n 
+0001427224 00000 n 
+0001427375 00000 n 
+0001427526 00000 n 
+0001427678 00000 n 
+0001427830 00000 n 
+0001427981 00000 n 
+0001428132 00000 n 
+0001428282 00000 n 
+0001428432 00000 n 
+0001428582 00000 n 
+0001428732 00000 n 
+0001428884 00000 n 
+0001429035 00000 n 
+0001429186 00000 n 
+0001429334 00000 n 
+0001429486 00000 n 
+0001429638 00000 n 
+0001429790 00000 n 
+0001429942 00000 n 
+0001430094 00000 n 
+0001430245 00000 n 
+0001430397 00000 n 
+0001430549 00000 n 
+0001430701 00000 n 
+0001430852 00000 n 
+0001431002 00000 n 
+0001431153 00000 n 
+0001431305 00000 n 
+0001431456 00000 n 
+0001431608 00000 n 
+0001431760 00000 n 
+0001431910 00000 n 
+0001432061 00000 n 
+0001432212 00000 n 
+0001432363 00000 n 
+0001432514 00000 n 
+0001432665 00000 n 
+0001432817 00000 n 
+0001432968 00000 n 
+0001433119 00000 n 
+0001433270 00000 n 
+0001433420 00000 n 
+0001433572 00000 n 
+0001433723 00000 n 
+0001433874 00000 n 
+0001434025 00000 n 
+0001434175 00000 n 
+0001434326 00000 n 
+0001434478 00000 n 
+0001434630 00000 n 
+0001434782 00000 n 
+0001434932 00000 n 
+0001435141 00000 n 
+0001418945 00000 n 
+0001416837 00000 n 
+0001435080 00000 n 
+0001435530 00000 n 
+0001435353 00000 n 
+0001435252 00000 n 
+0001435469 00000 n 
+0001435572 00000 n 
+0001435706 00000 n 
+0001435852 00000 n 
+0001435878 00000 n 
+0001435904 00000 n 
+0001436008 00000 n 
+0001436688 00000 n 
+0001436726 00000 n 
+0001437056 00000 n 
+0001437403 00000 n 
+0001437730 00000 n 
+0001438437 00000 n 
+0001438566 00000 n 
+0001438965 00000 n 
+0001439447 00000 n 
+0001439589 00000 n 
+0001440284 00000 n 
+0001440347 00000 n 
+0001441011 00000 n 
+0001441395 00000 n 
+0001442037 00000 n 
+0001442679 00000 n 
+0001443370 00000 n 
+0001444008 00000 n 
+0001444520 00000 n 
+0001444951 00000 n 
+0001445428 00000 n 
+0001445918 00000 n 
+0001459848 00000 n 
+0001460294 00000 n 
+0001472551 00000 n 
+0001472989 00000 n 
+0001476433 00000 n 
+0001476678 00000 n 
+0001482929 00000 n 
+0001483209 00000 n 
+0001488466 00000 n 
+0001489088 00000 n 
+0001503079 00000 n 
+0001503486 00000 n 
+0001506534 00000 n 
+0001506770 00000 n 
+0001509842 00000 n 
+0001510074 00000 n 
+0001518844 00000 n 
+0001519147 00000 n 
+0001521526 00000 n 
+0001521755 00000 n 
+0001539276 00000 n 
+0001539875 00000 n 
+0001546883 00000 n 
+0001547213 00000 n 
+0001552309 00000 n 
+0001552610 00000 n 
+0001554585 00000 n 
+0001554818 00000 n 
+0001556885 00000 n 
+0001557117 00000 n 
+0001563214 00000 n 
+0001563537 00000 n 
+0001572823 00000 n 
+0001573206 00000 n 
+0001575712 00000 n 
+0001575943 00000 n 
+0001580719 00000 n 
+0001580973 00000 n 
+0001585407 00000 n 
+0001585838 00000 n 
+0001587158 00000 n 
+0001587391 00000 n 
+0001588933 00000 n 
+0001589179 00000 n 
+0001590557 00000 n 
+0001590786 00000 n 
+0001602202 00000 n 
+0001602552 00000 n 
+0001609053 00000 n 
+0001609326 00000 n 
+0001624448 00000 n 
+0001625012 00000 n 
+0001626764 00000 n 
+0001635768 00000 n 
+0001635892 00000 n 
+0001636018 00000 n 
+0001636144 00000 n 
+0001636270 00000 n 
+0001636396 00000 n 
+0001636522 00000 n 
+0001636621 00000 n 
+0001636748 00000 n 
+0001636829 00000 n 
+0001636903 00000 n 
+0001653837 00000 n 
+0001654023 00000 n 
+0001654206 00000 n 
+0001654389 00000 n 
+0001654574 00000 n 
+0001654758 00000 n 
+0001654943 00000 n 
+0001655127 00000 n 
+0001655312 00000 n 
+0001655496 00000 n 
+0001655677 00000 n 
+0001655853 00000 n 
+0001656030 00000 n 
+0001656206 00000 n 
+0001656383 00000 n 
+0001656558 00000 n 
+0001656733 00000 n 
+0001656910 00000 n 
+0001657086 00000 n 
+0001657263 00000 n 
+0001657439 00000 n 
+0001657616 00000 n 
+0001657792 00000 n 
+0001657969 00000 n 
+0001658145 00000 n 
+0001658322 00000 n 
+0001658524 00000 n 
+0001658709 00000 n 
+0001658907 00000 n 
+0001659123 00000 n 
+0001659343 00000 n 
+0001659558 00000 n 
+0001659785 00000 n 
+0001660005 00000 n 
+0001660231 00000 n 
+0001660456 00000 n 
+0001660679 00000 n 
+0001660900 00000 n 
+0001661117 00000 n 
+0001661323 00000 n 
+0001661510 00000 n 
+0001661695 00000 n 
+0001661879 00000 n 
+0001662064 00000 n 
+0001662248 00000 n 
+0001662433 00000 n 
+0001662617 00000 n 
+0001662802 00000 n 
+0001662986 00000 n 
+0001663171 00000 n 
+0001663354 00000 n 
+0001663537 00000 n 
+0001663722 00000 n 
+0001663906 00000 n 
+0001664091 00000 n 
+0001664275 00000 n 
+0001664460 00000 n 
+0001664644 00000 n 
+0001664829 00000 n 
+0001665011 00000 n 
+0001665196 00000 n 
+0001665380 00000 n 
+0001665565 00000 n 
+0001665745 00000 n 
+0001665920 00000 n 
+0001666097 00000 n 
+0001666273 00000 n 
+0001666450 00000 n 
+0001666626 00000 n 
+0001666803 00000 n 
+0001666979 00000 n 
+0001667156 00000 n 
+0001667332 00000 n 
+0001667509 00000 n 
+0001667684 00000 n 
+0001667859 00000 n 
+0001668036 00000 n 
+0001668210 00000 n 
+0001668384 00000 n 
+0001668587 00000 n 
+0001668804 00000 n 
+0001669019 00000 n 
+0001669234 00000 n 
+0001669451 00000 n 
+0001669667 00000 n 
+0001669884 00000 n 
+0001670100 00000 n 
+0001670317 00000 n 
+0001670533 00000 n 
+0001670750 00000 n 
+0001670966 00000 n 
+0001671183 00000 n 
+0001671398 00000 n 
+0001671613 00000 n 
+0001671830 00000 n 
+0001672046 00000 n 
+0001672263 00000 n 
+0001672479 00000 n 
+0001672696 00000 n 
+0001672912 00000 n 
+0001673129 00000 n 
+0001673345 00000 n 
+0001673562 00000 n 
+0001673777 00000 n 
+0001673992 00000 n 
+0001674209 00000 n 
+0001674425 00000 n 
+0001674636 00000 n 
+0001674841 00000 n 
+0001675050 00000 n 
+0001675259 00000 n 
+0001675465 00000 n 
+0001675674 00000 n 
+0001675882 00000 n 
+0001676091 00000 n 
+0001676299 00000 n 
+0001676508 00000 n 
+0001676716 00000 n 
+0001676925 00000 n 
+0001677134 00000 n 
+0001677339 00000 n 
+0001677536 00000 n 
+0001677738 00000 n 
+0001677941 00000 n 
+0001678144 00000 n 
+0001678347 00000 n 
+0001678550 00000 n 
+0001678753 00000 n 
+0001678956 00000 n 
+0001679186 00000 n 
+0001679423 00000 n 
+0001679667 00000 n 
+0001679912 00000 n 
+0001680155 00000 n 
+0001680398 00000 n 
+0001680641 00000 n 
+0001680884 00000 n 
+0001681130 00000 n 
+0001681373 00000 n 
+0001681617 00000 n 
+0001681860 00000 n 
+0001682103 00000 n 
+0001682346 00000 n 
+0001682589 00000 n 
+0001682870 00000 n 
+0001683153 00000 n 
+0001683439 00000 n 
+0001683726 00000 n 
+0001683949 00000 n 
+0001684136 00000 n 
+0001684252 00000 n 
+0001684369 00000 n 
+0001684485 00000 n 
+0001684601 00000 n 
+0001684725 00000 n 
+0001684852 00000 n 
+0001684975 00000 n 
+0001685093 00000 n 
+0001685211 00000 n 
+0001685329 00000 n 
+0001685446 00000 n 
+0001685562 00000 n 
+0001685679 00000 n 
+0001685802 00000 n 
+0001685928 00000 n 
+0001686054 00000 n 
+0001686180 00000 n 
+0001686304 00000 n 
+0001686428 00000 n 
+0001686552 00000 n 
+0001686676 00000 n 
+0001686806 00000 n 
+0001686940 00000 n 
+0001687079 00000 n 
+0001687202 00000 n 
+0001687323 00000 n 
+0001687445 00000 n 
+0001687565 00000 n 
+0001687699 00000 n 
+0001687786 00000 n 
+0001687894 00000 n 
+0001687934 00000 n 
+0001688121 00000 n 
+trailer
+<< /Size 4293
+/Root 4291 0 R
+/Info 4292 0 R
+/ID [<85578E1007BBFDEF09FBD0FE5747F4B4> <85578E1007BBFDEF09FBD0FE5747F4B4>] >>
+startxref
+1688453
+%%EOF
diff --git a/doc/kinsol/kin_examples.pdf b/doc/kinsol/kin_examples.pdf
new file mode 100644
index 0000000..1be2ca7
Binary files /dev/null and b/doc/kinsol/kin_examples.pdf differ
diff --git a/doc/kinsol/kin_guide.pdf b/doc/kinsol/kin_guide.pdf
new file mode 100644
index 0000000..dc14c67
--- /dev/null
+++ b/doc/kinsol/kin_guide.pdf
@@ -0,0 +1,20321 @@
+%PDF-1.4
+%����
+5 0 obj
+<< /S /GoTo /D (section*.3) >>
+endobj
+8 0 obj
+(List of Tables)
+endobj
+9 0 obj
+<< /S /GoTo /D (section*.5) >>
+endobj
+12 0 obj
+(List of Figures)
+endobj
+13 0 obj
+<< /S /GoTo /D (chapter.1) >>
+endobj
+16 0 obj
+(Introduction)
+endobj
+17 0 obj
+<< /S /GoTo /D (section.1.1) >>
+endobj
+20 0 obj
+(Historical Background)
+endobj
+21 0 obj
+<< /S /GoTo /D (section.1.2) >>
+endobj
+24 0 obj
+(Changes from previous versions)
+endobj
+25 0 obj
+<< /S /GoTo /D (section.1.3) >>
+endobj
+28 0 obj
+(Reading this User Guide)
+endobj
+29 0 obj
+<< /S /GoTo /D (section.1.4) >>
+endobj
+32 0 obj
+(SUNDIALS Release License)
+endobj
+33 0 obj
+<< /S /GoTo /D (subsection.1.4.1) >>
+endobj
+36 0 obj
+(Copyright Notices)
+endobj
+37 0 obj
+<< /S /GoTo /D (subsubsection.1.4.1.1) >>
+endobj
+40 0 obj
+(SUNDIALS Copyright)
+endobj
+41 0 obj
+<< /S /GoTo /D (subsubsection.1.4.1.2) >>
+endobj
+44 0 obj
+(ARKode Copyright)
+endobj
+45 0 obj
+<< /S /GoTo /D (subsection.1.4.2) >>
+endobj
+48 0 obj
+(BSD License)
+endobj
+49 0 obj
+<< /S /GoTo /D (chapter.2) >>
+endobj
+52 0 obj
+(Mathematical Considerations)
+endobj
+53 0 obj
+<< /S /GoTo /D (chapter.3) >>
+endobj
+56 0 obj
+(Code Organization)
+endobj
+57 0 obj
+<< /S /GoTo /D (section.3.1) >>
+endobj
+60 0 obj
+(SUNDIALS organization)
+endobj
+61 0 obj
+<< /S /GoTo /D (section.3.2) >>
+endobj
+64 0 obj
+(KINSOL organization)
+endobj
+65 0 obj
+<< /S /GoTo /D (chapter.4) >>
+endobj
+68 0 obj
+(Using KINSOL for C Applications)
+endobj
+69 0 obj
+<< /S /GoTo /D (section.4.1) >>
+endobj
+72 0 obj
+(Access to library and header files)
+endobj
+73 0 obj
+<< /S /GoTo /D (section.4.2) >>
+endobj
+76 0 obj
+(Data types)
+endobj
+77 0 obj
+<< /S /GoTo /D (section.4.3) >>
+endobj
+80 0 obj
+(Header files)
+endobj
+81 0 obj
+<< /S /GoTo /D (section.4.4) >>
+endobj
+84 0 obj
+(A skeleton of the user's main program)
+endobj
+85 0 obj
+<< /S /GoTo /D (section.4.5) >>
+endobj
+88 0 obj
+(User-callable functions)
+endobj
+89 0 obj
+<< /S /GoTo /D (subsection.4.5.1) >>
+endobj
+92 0 obj
+(KINSOL initialization and deallocation functions)
+endobj
+93 0 obj
+<< /S /GoTo /D (subsection.4.5.2) >>
+endobj
+96 0 obj
+(Linear solver specification functions)
+endobj
+97 0 obj
+<< /S /GoTo /D (subsection.4.5.3) >>
+endobj
+100 0 obj
+(KINSOL solver function)
+endobj
+101 0 obj
+<< /S /GoTo /D (subsection.4.5.4) >>
+endobj
+104 0 obj
+(Optional input functions)
+endobj
+105 0 obj
+<< /S /GoTo /D (subsubsection.4.5.4.1) >>
+endobj
+108 0 obj
+(Main solver optional input functions)
+endobj
+109 0 obj
+<< /S /GoTo /D (subsubsection.4.5.4.2) >>
+endobj
+112 0 obj
+(Dense/band direct linear solver optional input functions)
+endobj
+113 0 obj
+<< /S /GoTo /D (subsubsection.4.5.4.3) >>
+endobj
+116 0 obj
+(Sparse linear solvers optional input functions)
+endobj
+117 0 obj
+<< /S /GoTo /D (subsubsection.4.5.4.4) >>
+endobj
+120 0 obj
+(Iterative linear solvers optional input functions)
+endobj
+121 0 obj
+<< /S /GoTo /D (subsection.4.5.5) >>
+endobj
+124 0 obj
+(Optional output functions)
+endobj
+125 0 obj
+<< /S /GoTo /D (subsubsection.4.5.5.1) >>
+endobj
+128 0 obj
+(Main solver optional output functions)
+endobj
+129 0 obj
+<< /S /GoTo /D (subsubsection.4.5.5.2) >>
+endobj
+132 0 obj
+(Dense/band direct linear solvers optional output functions)
+endobj
+133 0 obj
+<< /S /GoTo /D (subsubsection.4.5.5.3) >>
+endobj
+136 0 obj
+(Sparse direct linear solvers optional output functions)
+endobj
+137 0 obj
+<< /S /GoTo /D (subsubsection.4.5.5.4) >>
+endobj
+140 0 obj
+(Iterative linear solvers optional output functions)
+endobj
+141 0 obj
+<< /S /GoTo /D (section.4.6) >>
+endobj
+144 0 obj
+(User-supplied functions)
+endobj
+145 0 obj
+<< /S /GoTo /D (subsection.4.6.1) >>
+endobj
+148 0 obj
+(Problem-defining function)
+endobj
+149 0 obj
+<< /S /GoTo /D (subsection.4.6.2) >>
+endobj
+152 0 obj
+(Error message handler function)
+endobj
+153 0 obj
+<< /S /GoTo /D (subsection.4.6.3) >>
+endobj
+156 0 obj
+(Informational message handler function)
+endobj
+157 0 obj
+<< /S /GoTo /D (subsection.4.6.4) >>
+endobj
+160 0 obj
+(Jacobian information \(direct method with dense Jacobian\))
+endobj
+161 0 obj
+<< /S /GoTo /D (subsection.4.6.5) >>
+endobj
+164 0 obj
+(Jacobian information \(direct method with banded Jacobian\))
+endobj
+165 0 obj
+<< /S /GoTo /D (subsection.4.6.6) >>
+endobj
+168 0 obj
+(Jacobian information \(direct method with sparse Jacobian\))
+endobj
+169 0 obj
+<< /S /GoTo /D (subsection.4.6.7) >>
+endobj
+172 0 obj
+(Jacobian information \(matrix-vector product\))
+endobj
+173 0 obj
+<< /S /GoTo /D (subsection.4.6.8) >>
+endobj
+176 0 obj
+(Preconditioning \(linear system solution\))
+endobj
+177 0 obj
+<< /S /GoTo /D (subsection.4.6.9) >>
+endobj
+180 0 obj
+(Preconditioning \(Jacobian data\))
+endobj
+181 0 obj
+<< /S /GoTo /D (section.4.7) >>
+endobj
+184 0 obj
+(A parallel band-block-diagonal preconditioner module)
+endobj
+185 0 obj
+<< /S /GoTo /D (chapter.5) >>
+endobj
+188 0 obj
+(FKINSOL, an Interface Module for FORTRAN Applications)
+endobj
+189 0 obj
+<< /S /GoTo /D (section.5.1) >>
+endobj
+192 0 obj
+(Important note on portability)
+endobj
+193 0 obj
+<< /S /GoTo /D (section.5.2) >>
+endobj
+196 0 obj
+(Fortran Data Types)
+endobj
+197 0 obj
+<< /S /GoTo /D (section.5.3) >>
+endobj
+200 0 obj
+(FKINSOL routines)
+endobj
+201 0 obj
+<< /S /GoTo /D (section.5.4) >>
+endobj
+204 0 obj
+(Usage of the FKINSOL interface module)
+endobj
+205 0 obj
+<< /S /GoTo /D (section.5.5) >>
+endobj
+208 0 obj
+(FKINSOL optional input and output)
+endobj
+209 0 obj
+<< /S /GoTo /D (section.5.6) >>
+endobj
+212 0 obj
+(Usage of the FKINBBD interface to KINBBDPRE)
+endobj
+213 0 obj
+<< /S /GoTo /D (chapter.6) >>
+endobj
+216 0 obj
+(Description of the NVECTOR module)
+endobj
+217 0 obj
+<< /S /GoTo /D (section.6.1) >>
+endobj
+220 0 obj
+(The NVECTOR\137SERIAL implementation)
+endobj
+221 0 obj
+<< /S /GoTo /D (section.6.2) >>
+endobj
+224 0 obj
+(The NVECTOR\137PARALLEL implementation)
+endobj
+225 0 obj
+<< /S /GoTo /D (section.6.3) >>
+endobj
+228 0 obj
+(The NVECTOR\137OPENMP implementation)
+endobj
+229 0 obj
+<< /S /GoTo /D (section.6.4) >>
+endobj
+232 0 obj
+(The NVECTOR\137PTHREADS implementation)
+endobj
+233 0 obj
+<< /S /GoTo /D (section.6.5) >>
+endobj
+236 0 obj
+(The NVECTOR\137PARHYP implementation)
+endobj
+237 0 obj
+<< /S /GoTo /D (section.6.6) >>
+endobj
+240 0 obj
+(The NVECTOR\137PETSC implementation)
+endobj
+241 0 obj
+<< /S /GoTo /D (section.6.7) >>
+endobj
+244 0 obj
+(NVECTOR Examples)
+endobj
+245 0 obj
+<< /S /GoTo /D (section.6.8) >>
+endobj
+248 0 obj
+(NVECTOR functions used by KINSOL)
+endobj
+249 0 obj
+<< /S /GoTo /D (chapter.7) >>
+endobj
+252 0 obj
+(Providing Alternate Linear Solver Modules)
+endobj
+253 0 obj
+<< /S /GoTo /D (section.7.1) >>
+endobj
+256 0 obj
+(Initialization function)
+endobj
+257 0 obj
+<< /S /GoTo /D (section.7.2) >>
+endobj
+260 0 obj
+(Setup function)
+endobj
+261 0 obj
+<< /S /GoTo /D (section.7.3) >>
+endobj
+264 0 obj
+(Solve function)
+endobj
+265 0 obj
+<< /S /GoTo /D (section.7.4) >>
+endobj
+268 0 obj
+(Memory deallocation function)
+endobj
+269 0 obj
+<< /S /GoTo /D (chapter.8) >>
+endobj
+272 0 obj
+(General Use Linear Solver Components in SUNDIALS)
+endobj
+273 0 obj
+<< /S /GoTo /D (section.8.1) >>
+endobj
+276 0 obj
+(The DLS modules: DENSE and BAND)
+endobj
+277 0 obj
+<< /S /GoTo /D (subsection.8.1.1) >>
+endobj
+280 0 obj
+(Type DlsMat)
+endobj
+281 0 obj
+<< /S /GoTo /D (subsection.8.1.2) >>
+endobj
+284 0 obj
+(Accessor macros for the DLS modules)
+endobj
+285 0 obj
+<< /S /GoTo /D (subsection.8.1.3) >>
+endobj
+288 0 obj
+(Functions in the DENSE module)
+endobj
+289 0 obj
+<< /S /GoTo /D (subsection.8.1.4) >>
+endobj
+292 0 obj
+(Functions in the BAND module)
+endobj
+293 0 obj
+<< /S /GoTo /D (section.8.2) >>
+endobj
+296 0 obj
+(The SLS module)
+endobj
+297 0 obj
+<< /S /GoTo /D (subsection.8.2.1) >>
+endobj
+300 0 obj
+(Type SlsMat)
+endobj
+301 0 obj
+<< /S /GoTo /D (subsection.8.2.2) >>
+endobj
+304 0 obj
+(Functions in the SLS module)
+endobj
+305 0 obj
+<< /S /GoTo /D (subsection.8.2.3) >>
+endobj
+308 0 obj
+(The KLU solver)
+endobj
+309 0 obj
+<< /S /GoTo /D (subsection.8.2.4) >>
+endobj
+312 0 obj
+(The SUPERLUMT solver)
+endobj
+313 0 obj
+<< /S /GoTo /D (section.8.3) >>
+endobj
+316 0 obj
+(The SPILS modules: SPGMR, SPFGMR, SPBCG, and SPTFQMR)
+endobj
+317 0 obj
+<< /S /GoTo /D (subsection.8.3.1) >>
+endobj
+320 0 obj
+(The SPGMR module)
+endobj
+321 0 obj
+<< /S /GoTo /D (subsection.8.3.2) >>
+endobj
+324 0 obj
+(The SPFGMR module)
+endobj
+325 0 obj
+<< /S /GoTo /D (subsection.8.3.3) >>
+endobj
+328 0 obj
+(The SPBCG module)
+endobj
+329 0 obj
+<< /S /GoTo /D (subsection.8.3.4) >>
+endobj
+332 0 obj
+(The SPTFQMR module)
+endobj
+333 0 obj
+<< /S /GoTo /D (appendix.A) >>
+endobj
+336 0 obj
+(SUNDIALS Package Installation Procedure)
+endobj
+337 0 obj
+<< /S /GoTo /D (section.A.1) >>
+endobj
+340 0 obj
+(CMake-based installation)
+endobj
+341 0 obj
+<< /S /GoTo /D (subsection.A.1.1) >>
+endobj
+344 0 obj
+(Configuring, building, and installing on Unix-like systems)
+endobj
+345 0 obj
+<< /S /GoTo /D (subsection.A.1.2) >>
+endobj
+348 0 obj
+(Configuration options \(Unix/Linux\))
+endobj
+349 0 obj
+<< /S /GoTo /D (subsection.A.1.3) >>
+endobj
+352 0 obj
+(Configuration examples)
+endobj
+353 0 obj
+<< /S /GoTo /D (subsection.A.1.4) >>
+endobj
+356 0 obj
+(Working with external Libraries)
+endobj
+357 0 obj
+<< /S /GoTo /D (section.A.2) >>
+endobj
+360 0 obj
+(Building and Running Examples)
+endobj
+361 0 obj
+<< /S /GoTo /D (section.A.3) >>
+endobj
+364 0 obj
+(Configuring, building, and installing on Windows)
+endobj
+365 0 obj
+<< /S /GoTo /D (section.A.4) >>
+endobj
+368 0 obj
+(Installed libraries and exported header files)
+endobj
+369 0 obj
+<< /S /GoTo /D (appendix.B) >>
+endobj
+372 0 obj
+(KINSOL Constants)
+endobj
+373 0 obj
+<< /S /GoTo /D (section.B.1) >>
+endobj
+376 0 obj
+(KINSOL input constants)
+endobj
+377 0 obj
+<< /S /GoTo /D (section.B.2) >>
+endobj
+380 0 obj
+(KINSOL output constants)
+endobj
+381 0 obj
+<< /S /GoTo /D (section*.134) >>
+endobj
+384 0 obj
+(Bibliography)
+endobj
+385 0 obj
+<< /S /GoTo /D (section*.135) >>
+endobj
+388 0 obj
+(Index)
+endobj
+389 0 obj
+<< /S /GoTo /D [390 0 R  /Fit ] >>
+endobj
+393 0 obj <<
+/Length 489       
+/Filter /FlateDecode
+>>
+stream
+x�uSMo�0��+|)L<8nI?���,QM^ )*���M��{��j#$�h������3��c�߰���J��)����	S��4�j���~��(N�o�(*�Ck"r&=u�q���F?�/D��	$��q���~�=�,W
q/
+�3�Ũ8$J�X �;�#��R=�PG���4�����e�B��ˀ)zlƐ�I)f,U�@)�bI8/�J�ev��f�����]k�\t�k�/}�Sg�A��O�����y��n��am�G%z g�
�y
�?�׈Nm�x"O/`*H���+W�fZ*����Y�v�yD^���#\��1�]�
��a�̳�
+H�s��|_��ٴ�^����^Z;��$�u�wt����|:��F���.d
+�!rZ�ru7�nj�Y��"�2
i%ԕ�Q�CT3]�
+���2$yCET$[=��*U����.�o������|�
c|B�����~�$�,���ᾼ[Ǜ�X�
}���Vj�/��
+endstream
+endobj
+390 0 obj <<
+/Type /Page
+/Contents 393 0 R
+/Resources 392 0 R
+/MediaBox [0 0 612 792]
+/Parent 400 0 R
+>> endobj
+391 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./doc_logo_blue.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 401 0 R
+/BBox [0 0 142 147]
+/Resources <<
+/ProcSet [ /PDF ]
+/ExtGState <<
+/R7 402 0 R
+>>>>
+/Length 403 0 R
+/Filter /FlateDecode
+>>
+stream
+x���[�.�
��g��(�P�e8[8@���C�����c�s�iZ-�X,��ϧ��T��������ϯ���e�ۂ�'�;��Ӟ��q�,�ާ�^˼�o��R����2��5o8���׻~~|��^����������No�
����q��>1Y��zE9�ث�1��>fi�Y<6c?gsi��_�)��g�Vz��l:�9�W/���N+���6~M�<%p�Ƕ��s�N�Uvf�_>?F��XT^2.����l��
�Y��noW�6�
���(�<��m ���f����"RZ�Ҷ<�1J=��\z�Z���/����g�mO�m=Ơ�!�@s�g�s7.
��6��
���Y����. max�P	D�߇��A�X_��/"�N�!Ѐ"�]x� E��x�U���}�vF��!L<s\+�p�~
@�i��}�5�jgrU`�
q���t�v?zV`��v*���5���R�]��	��O6��Qk
��?�%Ai�6 EU�w�|	K�~kw��2%�ajNX���	�e=z�sLw�Vɏs�WV~�L�p 	ƞ�RR����5=0m
<ە���Q �s% o�b+	h�1�89 �)[�����ɭQ.�[���������9���N@�%��4��?�۝��u��˰_^��W\s�;�a�7yv���g�PB�>z�t��`�#�2���q.��:��k��9��
Jrtb�2���CӀ�W�FM�F��

M�	Ԉ'.٥'�o'��`:�_�!K7.
h�T�N�[��(�����ҧ4�Q�*L���j27
 pV�~���b��Y�l�.R��k���!,䜮�&*%�x�6�
+������Q�"
�|풇�
+=�[�+��P� /h at w�Z,f�T�"���h'�#�'y��� 9��^�Zk3���谮Rb��k��%
+P���p�*M�
��珟2V9���D�W�X��8�8W�b�$2���i����er6�H��ɽƋ ꦭ�:���
~w��Rh�
��>�A�J��y���$�OqB�jb�U.IB�$3.Uf���nIb���s[	ym׽d��-��
��-�)�w�#*���D��
�
�R�q�
�f)�Ӫ2a�$bMu	Y;�K7k�<�~���~
��7�v�
�E���E�8B�ϟB�0v��Ҡ�]�跏λ��lR��(��>e?*����G�@�5sm�C	x�w����Xw�k:�l�R���)J�)r�Lz��#i$�X �}�|R:T��j9��d~��r��(�\���T��K!̒_*�p	�t� hduk��~�
 v���d
MҒihA,o�A�_@��{"�� ����h��"���`���E��
�0X��:G��
j��R>�)M@�L�a��݁�
�����#��K\�6O�މ�$Fs�_zqd���
<�ʬ�#��G�h7wt�㪲����8���B�&Z
:YKrt��Xj���Q��ԒG�
f�
#�2' B	jM;���!-��tՋN�9%����
�Y
PVtԃ�
+�NPɂi�����
D���F
6H���SL���x�$�z^���'Cu�'�
�(K���i^`�2 ~D�dT�]�O|ݥ���:
�B����	�!���0ƜI�A<�ӊ�be���A0��n=�lj�힪�jg���|��h���oC��,G@���N���Y�"��C�B��z^?��
��с��$�@?�dLM<�X2��
�%�z��l
+e�=�^�Yk��Z�̺?Ö��:H�m]L��R��n��J�2!�&��d�'T0�
+��*�5����1��W�ŝ���U�a�͓v,]1�q:!و��m�U�s�o�
��F�,r�ZT��R��DEPHSj2�#S�����<�O�W�͐B��i���d��%�&mMO|�W߷|`d2��>`G�*�d�0�w�T��Ǵ&�$�
�5dӟ#�����AD�s�����x� �ZHRRP~~ JE�C=�v�[o��J at 4[Y%B��{Tn{3Ç��$�.uy8_��T归��2�4t�
I�bqQ
֚��b\��
+�ͬKa�l�
jh�O����� =X1l�vh��Ty���J�`�_|�+�Y�Q�@�q��y�Þ��D��B'�Q�4Z�dYc����FQ޳�
���P�e��о�8���i=e�%	��"�L��O$���G j>�����l���p�0�̓2eLÊ�K�pi|4R�FKh�A_��mdo:4 (
�>���5����xM5ŧ���f�f
+��6q�ֈ��6�p��'�8u��s��~�ƻ���R䮺
ת�A��h+��
+�����NU���i��/�8���ʡ��������BlY3	x�
+��FS�6 H8�zg$
;!��7̹�񕚄��|Ohm3WK��p�[q
E�_�d��	��=�#�T;��!�&���e?~�;Pg��|h�R.�*{Ǩ����c�Wu::3޵X�2��!�P٬���������Tvh𺦉u���<��rֻ���=7V2}8����
B�QG^���-�mjrUC���}���>sGJ2h�V����ˠ[wcx�ڟ�EW�j��+,jlё
�KZk3������w�wG��>O8�'/�gϙ³�ğ��kj�ZO�懥�s�D+[|�p�G��g��rzn
n}ɸ�ڣٮ�G"��}�uF뷵'O�d�&Ξ�S��8ꆭQ^뛝Y˫�C}�
˟l}wߒ�dM�M��D��is��+��R��t=�2�sg������a�Fw�<���3�J���vkz�
Cs��z~��׻�����
^i|o��5�:!<e;6�Y�Z�;5�4z���=��7��7j)���]wԆ<�Ўa�
뤛L#;�
����v�Z���+���m��c��1XN_�8���;Jj��I�ntt�G���#�v
��F#vֻ6O���io&*�
����I�U �&�eY�|3�,_sb�[�%ܾ�)����t�Z�2��lDK���~�SVO��/����?~JT%�/����
+endstream
+endobj
+401 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20160805102442-07'00')
+/ModDate (D:20160805102442-07'00')
+/Creator (0.43+devel)
+>>
+endobj
+402 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+403 0 obj
+2952
+endobj
+394 0 obj <<
+/D [390 0 R /XYZ 86.4 726.045 null]
+>> endobj
+395 0 obj <<
+/D [390 0 R /XYZ 86.4 701.138 null]
+>> endobj
+392 0 obj <<
+/Font << /F15 396 0 R /F16 397 0 R /F17 398 0 R /F35 399 0 R >>
+/XObject << /Im1 391 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+406 0 obj <<
+/Length 1166      
+/Filter /FlateDecode
+>>
+stream
+x�uVKs�6��W�H�D
ߤ�'�v:�>��)�&!	c
+� �U����Ą�H��>�} �긊V�E�������Xm�m���a�UXժ��a��}��<~}y������������T7
+��JB�Zm�8��k�Oʮ7Y�M��$UPg��@8f_�^�7�F6x�&�������V�;�����lO�:m����:)�ov4w����[r'��w�ܨ�ℓ3�61d�{<�
z~�i4%V.�,��sf�I��
���0��0�h����<��
;�B�{s;�Uΐ,���S�-;~��`�C��u���]��çYFgD���Q"�ME2!
��s�v,��)
�<�7:�+\jc�ύCJ)���P~k
T
Q��&�u
�J6^� ��Z觟�ᡕG���?*�����BI!���\%

���� Ģ��Ҡ� 
餆����� �XT���ZK:Y��H緹d����Le��E��#�`=�78`e�
���
Y&b"��Fٺ�,�
̡���H�1d.
U#k��9��nh>�α ��������͋ ڿ�`��ES�s>��-NS\��A��G�0XR��
d����i�Z�
�Y�L(�Y�ZѨ�yfD�,gX��I$+ͻ�1��_ΈƳ�8Ko��ga޼�3�7
D�#�[.Y���紌�UJ3G™�q
+�Td���N��yE�
�t��*"!u�+�̓�TP(��G�t35aM�bڂ
��
��
+��Ѵ
�
w!��Z-��Qo�������8�k�*D�u��_Wa�Va��1�w%/>�}�]�4�K[�6�`
� ��f���w,�X@���!1�
0,��$�
�FB���*�Ɏ����%�e�K��
+�]�8p�A�a&���A�f<�a���G)�8$@�f8B'�z%B"�I����@�!u�w^C�����/%�S�.p������V���i
VE~����t}oL[O�U�6���=�A7�oTn}����=�A������/!S��"��
]��Q���
"OZ��_��"����qf#���7o�J&�
�3��`��ɇ�<p�9�<>m�1��<�D��}RB���<9WUn�`\�a
� �{\�S�6\�>���V�L�Ja�o^�J�\p�;
��4%4Fު3
�R<O��� �:�
+endstream
+endobj
+405 0 obj <<
+/Type /Page
+/Contents 406 0 R
+/Resources 404 0 R
+/MediaBox [0 0 612 792]
+/Parent 400 0 R
+>> endobj
+407 0 obj <<
+/D [405 0 R /XYZ 86.4 726.045 null]
+>> endobj
+404 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+451 0 obj <<
+/Length 1436      
+/Filter /FlateDecode
+>>
+stream
+x��Z�V�H��ڍ��P���%�@��f��B���-�Hr�$_?��/�4�@lf%��RߺU}�J�7�"�t/������	�
�a����=
�ԋ
+	^���GE�#ȯ38`��z�����bO�"Ʊ:)���"sƹ��^@8�{u�~�'b?�g�l�y�+�E�W�{
�1\���/�Jii��
��Qsm�N�hV>�Vj��ע��u���f�_��٠��̦8��4�M
�f��/�P�C�aeb2n�!,�0�?��R�1&�?L=��/�����^�D�{����@�x��\�#	�ℭ���:Z
[��
�|�hߗ=��fZf_e1�_��JCVV@��A��>���1vĘX���t(��~��*+�g�39� 2J����q�8��_�\
�
�_x� [䏁��EZe��s9�r��%|�x�
��n�a��Z�E��n܈R�8�=���J9zP��6_5�
��&Ğ�u��MH����P�8Y!��/O����Y$��`����O�f�������8'�N�gq/�@>l�����`׶N%wQ	�cWF��$!g|I�c���~�&im�1W��W ʴV���e��-�
� [...]
�+��ʺ�� U�������m�����AE�(I|�\+�R��w0 ]f'��0�˻2-��7���շ�p
6����w���9&�n�:Nī��_������:��k�1ՂDC�42g��Q���֙q��i;��݌��к�:�%��ؽ�]�9/�$`RR}���8��" ��~���*+��n�$��gӲ��D9�dk��-qĖYl���
+��:��
�?P�׺@�Q�t|gn
�
s0M���\�Q_沖�x�z�[05YR�+�
�C��ud_�_yAxֶI���2�Rێ�bl�g��j���R5�
x��;:#v�l���Rk�&��w,H�
+��^Np��)�Og�"�w6�#���1�����ض���v�^�l��{�V��-QA���/���7�d�
�fp��.�#s�_��s��\+p[0��;����瞦es�f��n�ITK��

]�&��-��z�*��'�Z<�je��f��^=)��7-�ܽh�l�Ŭ�Ћ���5�9�?�	�'7a�xG��7��
��]N�g���2���a�r��H��yYg�}�u�
?�4���e�EO������/6���il�=	}����4^�����3k��zf+
�o;v�>��[#௲�g�`���6�
�t�l����{{�M��:�tܚʲ��;ɪ*
٪~�&>������.�9���p���$]��]��(�j��5i
J��	�� 5e�'W
�������+�
+endstream
+endobj
+450 0 obj <<
+/Type /Page
+/Contents 451 0 R
+/Resources 449 0 R
+/MediaBox [0 0 612 792]
+/Parent 400 0 R
+/Annots [ 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R ]
+>> endobj
+410 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [512.192 548.452 526.596 557.363]
+/Subtype /Link
+/A << /S /GoTo /D (section*.3) >>
+>> endobj
+411 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [515.375 526.363 526.596 535.274]
+/Subtype /Link
+/A << /S /GoTo /D (section*.5) >>
+>> endobj
+412 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [518.875 504.273 526.596 512.686]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.1) >>
+>> endobj
+413 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 492.215 526.596 500.628]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.1) >>
+>> endobj
+414 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 480.157 526.596 488.57]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.2) >>
+>> endobj
+415 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 468.099 526.596 476.511]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.3) >>
+>> endobj
+416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 456.04 526.596 464.453]
+/Subtype /Link
+/A << /S /GoTo /D (section.1.4) >>
+>> endobj
+417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 443.982 526.596 452.395]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.4.1) >>
+>> endobj
+418 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 431.924 526.596 440.337]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.4.1.1) >>
+>> endobj
+419 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 419.866 526.596 428.279]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.1.4.1.2) >>
+>> endobj
+420 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 407.807 526.596 416.22]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.4.2) >>
+>> endobj
+421 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [518.875 385.718 526.596 394.131]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+422 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 363.628 526.596 372.041]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.3) >>
+>> endobj
+423 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 351.57 526.596 359.983]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+424 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 339.512 526.596 347.925]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+425 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 317.422 526.596 325.835]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+426 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 305.364 526.596 313.777]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.1) >>
+>> endobj
+427 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 293.306 526.596 301.719]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.2) >>
+>> endobj
+428 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 281.248 526.596 289.661]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+429 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 269.19 526.596 277.603]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+430 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 257.131 526.596 265.544]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.5) >>
+>> endobj
+431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 245.073 526.596 253.486]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+432 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 233.015 526.596 241.428]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+433 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 220.957 526.596 229.37]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+434 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 208.899 526.596 217.312]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+435 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 196.84 526.596 205.253]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.4.1) >>
+>> endobj
+436 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 184.782 526.596 193.195]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.4.2) >>
+>> endobj
+437 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 172.724 526.596 181.137]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.4.3) >>
+>> endobj
+438 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 160.666 526.596 169.079]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.4.4) >>
+>> endobj
+439 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 148.608 526.596 157.02]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+440 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 136.549 526.596 144.962]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.5.1) >>
+>> endobj
+441 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 124.491 526.596 132.904]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.5.2) >>
+>> endobj
+442 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 112.433 526.596 120.846]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.5.3) >>
+>> endobj
+443 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 100.375 526.596 108.788]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.4.5.5.4) >>
+>> endobj
+444 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 88.317 526.596 96.729]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+445 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 76.258 526.596 84.671]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+446 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 64.2 526.596 72.613]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.2) >>
+>> endobj
+447 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.3) >>
+>> endobj
+452 0 obj <<
+/D [450 0 R /XYZ 86.4 726.045 null]
+>> endobj
+454 0 obj <<
+/D [450 0 R /XYZ 86.4 571.538 null]
+>> endobj
+449 0 obj <<
+/Font << /F38 453 0 R /F36 408 0 R /F8 409 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+507 0 obj <<
+/Length 2075      
+/Filter /FlateDecode
+>>
+stream
+x��[Kw�F��W��E��Lw�Ʈp(���]� ;:"u��{G3`

R�
���w�w_sǫ�׼��g�O'o/DM��c^���.f��%r�C��G��ܥ�B�:�azI�Au��.��A
�� q��7��p����0���X8#=�w�����d���p7�7��[o0���_�U����2�C
�.Oj��0��B�

�]��s
��q�
�Q
9 *O>�Cҍ��R��0�
4��
��$��k������F��@��,zl|����4ӧ&�Ad6���)�{��7JXk�0 at uA�d)l��^��#�A�ч/�<
k��i<S�kx���0Mk��
3i�\�0[�:⌂<�	���
�_�6���ؕ�>U<�Oc��A���Y�a<����XQ�w�u�xh���>M����
��pv\R6�%�x>E����[
��
��QWR�#WJ�!�'1s.�_]�?����q
+�ԹJ�;y���P�� 40��Qw����/ԵzuɝA�y��6'�8�rj�q�$<�1�/;�'��y�E�3�_�'���,�w�㐒4�"��z~�mG����w�$/�z�.Pb.6�_�A� eVZ�s�P�h���eR�.���!t� ~&3+��\R�@W����G�7c䀰y~�疪O
�7�ྴ,w���	oD���z�V�!L
�,q�-ՙ�S�t��F�A�df̺J���\nɢ��>��RQ��������~sQK�T�z:|�2Xuu�ת7���}�{�D5�\GH��t�E��)�w��

'
\��:@ T�/�I�
�=�M��=F���{��l��Vj
N�:A提�.#�F%r	�����^m'��<�HQ���t\� [H8�k��_�T��t.
���ߤ��]5
[��$ǡ6v&7�
9 &�QP�
�EUmɲ�*X�AT�Q�=�
+
����uU���5��֊�D%0��E�z;�
n#��MdwqDD� "x���|趮;����
=��͒Fr'��e� J�x2�!N
�?�Z���f��<���Ύ<�D
��`(��=
�8Z�o?���@��!�$;��.'!�{�Q!�Sk�?�L
��`)(���ʒ�<�a� 
�*W5θXP�<��䘋&{�fv��^�X����%C]�,Ff��䞷�vXdH&k��
�8,�X|u���T7KU��s4ҋ
�^+5�!�L��dQ��,�q?�?�[BSb^(>o�&K#yh�r�?/''Q
q���ߝуg�Q/�����"�r ���*7��l�3Ư�d�
EP�|��TS+���Ub ���>� ��(��N8N3�[��� .�1+�T
+���\՚Su�y��=[t�w�ӯ�YB���0	��
��h`?��G�,Uk�0�&�^>��"S7��\�_5��-�`J��َuA�Z<o�WV
�?)��s��~k��N����9���GX@�*�!
\�^ x��
��M�m<�y���\F�[YA�P\��
���Pg:Ӳ�j

�tjb��4U+k�
�$�h�d���ʋ(����X�_L`�6CK����Ҳ$����Q�ArA�Hj�$�`#!;f#�CӖX]鯡-�V���v�;�Ad��9��qp��W
�[ҀZ�\98���
��[
�B��nWn�2,��7U��No!b������W`a���)���n�׾�
V��.�#Es�W\Y��wUߍ&?]�������c$�
+�r@�<=�|�_��
����)
��b	�J���)ͱ������a���X�w�i��Y��T�5 S_�@Ikt�*���5�2*~t>7�=K�C���E��e��l�7���`b���Mм`Y�/���
��C�SG���E�y���CR-��J�0
Ͳ-m�H�w]�k*?���9�E�Ѹ
��{-��wZބp�)��U���17u9THꜩ�z��ϲ(�7��
•(
�G��È��m#�f��$zl��C��9�����3�n鬩˔�h,,̨�u�
S6��|j�oۺ�z�h��qD�D��#[�
�4U
[�5�n���M]�Tp���d=TT����>
��
�fA{�ve��mx}H\�|����']!��3��tSkp�/��Q�
+endstream
+endobj
+506 0 obj <<
+/Type /Page
+/Contents 507 0 R
+/Resources 505 0 R
+/MediaBox [0 0 612 792]
+/Parent 400 0 R
+/Annots [ 448 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R ]
+>> endobj
+448 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.4) >>
+>> endobj
+455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 678.178 526.596 686.591]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 666.176 526.596 674.589]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+457 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 654.175 526.596 662.588]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+458 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 642.174 526.596 650.586]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+459 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 630.172 526.596 638.585]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.9) >>
+>> endobj
+460 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 618.171 526.596 626.584]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+461 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 596.176 526.596 604.589]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+462 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 584.174 526.596 592.587]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+463 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 572.173 526.596 580.586]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+464 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 560.172 526.596 568.584]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+465 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 548.17 526.596 556.583]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.169 526.596 544.582]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+467 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 524.167 526.596 532.58]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.6) >>
+>> endobj
+468 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [513.147 502.172 526.596 510.585]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+469 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 490.171 526.596 498.584]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+470 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 478.17 526.596 486.582]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+471 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 466.168 526.596 474.581]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+472 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 454.167 526.596 462.58]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+473 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 442.165 526.596 450.578]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.5) >>
+>> endobj
+474 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 430.164 526.596 438.577]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.6) >>
+>> endobj
+475 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 418.162 526.596 426.575]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.7) >>
+>> endobj
+476 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 406.161 526.596 414.574]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.8) >>
+>> endobj
+477 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 384.166 526.596 392.579]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+478 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 372.165 526.596 380.578]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.1) >>
+>> endobj
+479 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 360.163 526.596 368.576]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.2) >>
+>> endobj
+480 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 348.162 526.596 356.575]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.3) >>
+>> endobj
+481 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 336.16 526.596 344.573]
+/Subtype /Link
+/A << /S /GoTo /D (section.7.4) >>
+>> endobj
+482 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 314.165 526.596 322.578]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+483 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 302.164 526.596 310.577]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.1) >>
+>> endobj
+484 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 290.163 526.596 298.575]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.1) >>
+>> endobj
+485 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 278.161 526.596 286.574]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.2) >>
+>> endobj
+486 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 266.16 526.596 274.573]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.3) >>
+>> endobj
+487 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 254.158 526.596 262.571]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.4) >>
+>> endobj
+488 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 242.157 526.596 250.57]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.2) >>
+>> endobj
+489 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 230.155 526.596 238.568]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.1) >>
+>> endobj
+490 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 218.154 526.596 226.567]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.2) >>
+>> endobj
+491 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 206.153 526.596 214.565]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.3) >>
+>> endobj
+492 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 194.151 526.596 202.564]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2.4) >>
+>> endobj
+493 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 182.15 526.596 190.563]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.3) >>
+>> endobj
+494 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 170.148 526.596 178.561]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.1) >>
+>> endobj
+495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 158.147 526.596 166.56]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.2) >>
+>> endobj
+496 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 146.145 526.596 154.558]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.3) >>
+>> endobj
+497 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 134.144 526.596 142.557]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3.4) >>
+>> endobj
+498 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 112.149 526.596 120.562]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+499 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 100.148 526.596 108.561]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.1) >>
+>> endobj
+500 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 88.146 526.596 96.559]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.1) >>
+>> endobj
+501 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 76.145 526.596 84.558]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+502 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 64.143 526.596 72.556]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.3) >>
+>> endobj
+503 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 52.142 526.596 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.4) >>
+>> endobj
+508 0 obj <<
+/D [506 0 R /XYZ 86.4 726.045 null]
+>> endobj
+505 0 obj <<
+/Font << /F8 409 0 R /F36 408 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+518 0 obj <<
+/Length 463       
+/Filter /FlateDecode
+>>
+stream
+x�Ք]o�0���+|iK���$�$h�
+��)	���Ti��c㴴�*eC��M�q�s^�9
Ո��m���_f�0��-�!���R(1� ��Jt��0Ah�
+��)��	�R�•�Q�zp�:���M�}�TkB3�bF���qF�g7_�v����!8�W3tK3�1st1Z�� ��
W��m�
U��{�.G�gG��[�E��кh?[W�Dd��箟�����[p*��GU4v��
�P��$�6+B=���W﫢�����]�
�ݿ���	�dy~)�������O��
Y��d������3�dhQ��)p�
?�,�{� ��ю�+�3��A���i�[
}t���"
��u�g쏉U��&(+��w;�+-�#T/��N��4_v�ض��}�_��I	�8h�2=�Dt{� �ܕ�frJs��K׌�Wh����
�^,f�Q��e
+endstream
+endobj
+517 0 obj <<
+/Type /Page
+/Contents 518 0 R
+/Resources 516 0 R
+/MediaBox [0 0 612 792]
+/Parent 400 0 R
+/Annots [ 504 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R ]
+>> endobj
+504 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 690.179 526.596 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.2) >>
+>> endobj
+509 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 678.224 526.596 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.3) >>
+>> endobj
+510 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 666.269 526.596 674.682]
+/Subtype /Link
+/A << /S /GoTo /D (section.A.4) >>
+>> endobj
+511 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 644.351 526.596 652.764]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+512 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 632.396 526.596 640.809]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.1) >>
+>> endobj
+513 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 620.441 526.596 628.854]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.2) >>
+>> endobj
+514 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 598.523 526.596 606.936]
+/Subtype /Link
+/A << /S /GoTo /D (section*.134) >>
+>> endobj
+515 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.418 576.605 526.596 585.018]
+/Subtype /Link
+/A << /S /GoTo /D (section*.135) >>
+>> endobj
+519 0 obj <<
+/D [517 0 R /XYZ 86.4 726.045 null]
+>> endobj
+516 0 obj <<
+/Font << /F8 409 0 R /F36 408 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+522 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+521 0 obj <<
+/Type /Page
+/Contents 522 0 R
+/Resources 520 0 R
+/MediaBox [0 0 612 792]
+/Parent 400 0 R
+>> endobj
+523 0 obj <<
+/D [521 0 R /XYZ 86.4 726.045 null]
+>> endobj
+520 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+536 0 obj <<
+/Length 906       
+/Filter /FlateDecode
+>>
+stream
+x��W]o�J}ϯ��z�����o����"�/m^ǨX�s��׊Ӻi^

�x9g�́FW�>����z~��=7D
�|ED� ��"�/�o�?y�$3�e\.�q�X��kW'?�^�7�%V1�>�X!�����j�� p]L�-y�d� �!n�.�p��u��I��]�΋���q�2�poݵ�X�'"�i﹬)�����]��MФM^��*m�Y����d���_lk����C.�fm�iw?�K���]�'΢o3�i��8D�
��G3��J9�ǒP���M��t=��f��~K�F��� �ϼ@����H��^�(B��dY��v�8�>&Q�I���*�M��.��e������y��86�=If�ғ

�
8�1�x�Z at l�σė�f�|U^��GEK�p�0gvJ~ZL����a�����9�#HgD[��H���@	0����'X�7N�|}	|v�����&/��XI�
�\
b_`{��2�]���/,���X>	Z
�Q8�v�(�6���Y�wh��\zf��
I�
+$V�^� �*m��m_�bg�R��
��x�e
�����Q`��,�z���A����u$y�F(g�h�vu�F
}M
����
�MC�����| ��.Q &��F�y��g�O`��.���ZU�u�%��f��]oA���+��gR�pB詬� n(�M�Дh��%u��
�~}�f~~���tp�j@�P�L�H��
�:%��0�{{��y���S]n�lR��:���l#oCM�$���������2_�>�u�ܶ>&��?�n��J9�j��^���J�|�c����q���I���,���bP��_;����V�BҬ������$P>�N
�8
2���4vc�EСy��;�����*���
+endstream
+endobj
+535 0 obj <<
+/Type /Page
+/Contents 536 0 R
+/Resources 534 0 R
+/MediaBox [0 0 612 792]
+/Parent 540 0 R
+/Annots [ 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R ]
+>> endobj
+524 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 548.71 526.596 557.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.1) >>
+>> endobj
+525 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.2) >>
+>> endobj
+526 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 524.799 526.596 533.212]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.3) >>
+>> endobj
+527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.1) >>
+>> endobj
+528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 490.927 526.596 499.339]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+529 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 469.009 526.596 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.1) >>
+>> endobj
+530 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 457.054 526.596 465.466]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+531 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 445.098 526.596 453.511]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.3) >>
+>> endobj
+532 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 423.181 526.596 431.593]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.1) >>
+>> endobj
+533 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 411.225 526.596 419.638]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.2) >>
+>> endobj
+537 0 obj <<
+/D [535 0 R /XYZ 86.4 726.045 null]
+>> endobj
+538 0 obj <<
+/D [535 0 R /XYZ 86.4 571.624 null]
+>> endobj
+6 0 obj <<
+/D [535 0 R /XYZ 86.4 571.624 null]
+>> endobj
+534 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+553 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+552 0 obj <<
+/Type /Page
+/Contents 553 0 R
+/Resources 551 0 R
+/MediaBox [0 0 612 792]
+/Parent 540 0 R
+>> endobj
+554 0 obj <<
+/D [552 0 R /XYZ 86.4 726.045 null]
+>> endobj
+551 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+563 0 obj <<
+/Length 571       
+/Filter /FlateDecode
+>>
+stream
+x�Օ�r�0F�y
+-�U]-i�J;Cª���j���a��G��\�xh)ec��e�s>�����}5����#�$�P� #q��l��m�$eR�z۱-7�h�ϳ�gc4���b‘�
�A2Sq9C$I	�^��T��im]���2ۛ"�0�x9�
/����6
`Q�
+���Z?g�i<�
t���:��:%�	HԽ�����
�BtDiG�kB,�Y.#Ȧu���r"��5�3�
��&�ӫ��_�<lu�M�'H�Op���x$�
���6�j��
��a{8M[�;at�X��7q�����<�W�u�۽����$
��M�W�
+��`�xw�-���}x��B\�n֋��
+I�=Q������8�j���A���������ڸ�H�z�YUq�^;� �yR����V
�i�������8r$�!Ǥ��R
�u�*%��ʶ�,����&(Ttg�A`�2�ʼn0q��ͬ�O�p_�*r����}���^s�d��
+��Pcy
�a�s����T���}��Q�*�
t[5�ܺ�n��z�_���)�'���)���y�dgΗ��5of���J�
+endstream
+endobj
+562 0 obj <<
+/Type /Page
+/Contents 563 0 R
+/Resources 561 0 R
+/MediaBox [0 0 612 792]
+/Parent 540 0 R
+/Annots [ 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R ]
+>> endobj
+555 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 548.71 526.596 557.123]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.1) >>
+>> endobj
+556 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 536.755 526.596 545.168]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.2) >>
+>> endobj
+557 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 514.837 526.596 523.25]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.1) >>
+>> endobj
+558 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 502.882 526.596 511.295]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.2) >>
+>> endobj
+559 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 480.964 526.596 489.377]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.1) >>
+>> endobj
+560 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.66 469.009 526.596 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.2) >>
+>> endobj
+564 0 obj <<
+/D [562 0 R /XYZ 86.4 726.045 null]
+>> endobj
+565 0 obj <<
+/D [562 0 R /XYZ 86.4 566.804 null]
+>> endobj
+10 0 obj <<
+/D [562 0 R /XYZ 86.4 566.804 null]
+>> endobj
+561 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F48 539 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+575 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+574 0 obj <<
+/Type /Page
+/Contents 575 0 R
+/Resources 573 0 R
+/MediaBox [0 0 612 792]
+/Parent 540 0 R
+>> endobj
+576 0 obj <<
+/D [574 0 R /XYZ 86.4 726.045 null]
+>> endobj
+573 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+590 0 obj <<
+/Length 3073      
+/Filter /FlateDecode
+>>
+stream
+xڕZIw�6��W�-���
�p����N�˼X�)Ɂj��1b�2ۚ_?� \Z�c_D,�P�WhE��&ڼ������Տ�T��Q�$2��
6Y�M"�0�6������S�Лv�Si
��߷��%:L�T�h��a�����J}��
+�þ�M��D���<��_%�$����]S1]6#SqA+b*���q<mϭ��߂?]s�2
>㟢5<z(ζz����*S�0$�i*�Q�P�����,i�y��~��t���?lo�,�o��֦h
�u��4��o۝���2����
���ۣ�k
��7;)�0���N�0�>�|

+��N)8��>�rӢXT
��KA��FlZT16>����B�9�<��
�:
nO�-��l�o��v}�=�ъ�rdL{9�4�y*0��Y�y�땽�PD����[�$T�wz֨D��|چn��y���C��'�9+��#�Xّ��i'p-[�����N`�?�ΰҕ��V^�1����'�TAg at +��d��yyQ�c�:T`�ŝ���t��t�k
�0S��{J����y|��6mQ�
��a��i�t�g��C�{�zsv��b�Wt��&5|ߛ�}S�޴�U����W�f��S�T��q�� d���B�/X6�r��q:qL[PI�L �ߎ��/S�
/���J�B�*d��T� A����X��N��D1�z�O!h+��1���N$�d��
+A����y�!��Wp㦵�8��,���m3x�ϖqY*p���͒���v(�$]�8ɖ�I0<�r�18��t��9��$e ^S8
�M��@��FM���km���]�0*��)u���<h�-,�ۢ^	�r^��!8�:�lFV��3
/�
+���U�^#�1��LU�����r�d��,���
��)xpϤo߾{�M�_
Ϗێ:�3��
��ϟt�w��ݢ�
*1���|!�8X�(ys�
i���ܱ[��dw��C�="��#
��2�Ou
��Jj�W38#e�5�Pa��o7
C#�����Z�a
�(Q Y

Ҝ����Cǽ��3Y��ĨE�@a��ݾ5���a�t
�	��
*k|�wzh
$�Ң�]Z��#S�GA��K���V�^�У[���/���� �� mt�L`�^O<:�!t� ���`➄��Nk�S��r j-������ v�38�}k��XO��% ���ޢ����ٶ�m|�w��ݞc'��웡ZՓ!�͜ Е��Svl at 2'
 D�}��62���$/��!�&��s�
ϣF��1	�!04�$
a��J�{a|���PS-�.��<�+�il9kt�;���0=�J"��K�)��yL�CX8Ć�ž(��������� ��
k���;�F�PU��
=&3snZ73�
tF�?b�a�@q8�]p�5
�5 ��A�_����C"ϣ:�))�u��	cCw��z��Iȧds��8o��
PϤ�R�
Q��+�a�T�F6ɰ���h��C��iJ��"��	ʽ��Fx��#,
++7�ܧCcȲ�eC at O{��˘!\��~]���S ���=?T�Q{�l��<��w��{!bT�K$
?N���2�k�&���i�X|<U#���ke���L�ߵ+�
‰����ϼXд�2��/��(�v�4@�J�e���7�2�;s
E�dhK�c�oH�@�<P�&�o단Φ�ؽ_p��)��Y���d+�=�
+�b�f��+X/�˩�e
�ǭB��('��� ι`�j���Dz)6_,U���s�b����>!�ު��c�
�u��t�
���
+&��&��'��
$
rh�[�4F.������e��̡n�{���/7��+���\�������;[CR�xo �%l�c�Q
�X����L���k�zl����^��
[�	���B
U��*L"��$���̆\gC/����7}qǻ"8���
���p��mQZ�ܵІ�-1�� ��7z���5X}K�����"[�
�y��b����6�+��w��p��

T��"�՗��j��F��b����ahn��c���/�
��
��=|R"t�xE�|�; &�UEun���vݸ�q_
�^Dbw�9C*b��`
Cr�Z��
�a"��
� �q��z�~���Z
 �s��|���#��v�Pf��n�e-ꛖ��~T�K�D/�s2��
x�ga�����(I���ܹ��!�� ��4S��� -��r��Ŷ��R��	��j�G���JPr�
����3�Cki�.�N�. �����
�L�
��	h�<���;�����������k�Ɠ{�q�&�©��)ׂ!)/�
=N�ū&���%���%���:�"���oyqN�����=��F�:C�,��b;6
w:_?
�:z���\�(<HON^:O�3w����N��>�|�IW�P�bH(��ޏ_�C
h4~�,�5l�1d7{��
R��l[��[�y�zv�#ן8q(lh��
��j�
W��<K9�
=O8~*�

d&J&,J~�w��bb�Xɦ@��E�
+B�����a����h���w��(Xe
��g��w �W�xz�@S����E젷�[G�^��04�le�RLt=wVY�	�g2
��J�\���$�I̎'��#�\f1�솻go�<x
I����`4�%u
tŽO��=����2S8?v<J�
�+%�&o�b
+k at 7�5<ǣwl��bnc�ct���A�L=�Ga$�/���<�JB���qo�g%r at w:w�%��:�����](�A_�߁��H���w48>�
���%��'w; �H!#&��x�=р��Y�E�WY��/���a�cIͱ��7h/��T��5����u��/7�
+E���Q�X��ߎ�1RBw��lލ���'+����/�V����4�<������?x�+`5�Ī���Ҟb}+5��9��iJ��s��8� B�Q��Ƿ�����"J
�c���x%
Oh�2�7�
+�J7��՟G���xBR�L��
�
ݪ��\����x�Wy(�
7���û[f�k0?�.�� �NQ˕�5�#�
R�?��0
+endstream
+endobj
+589 0 obj <<
+/Type /Page
+/Contents 590 0 R
+/Resources 588 0 R
+/MediaBox [0 0 612 792]
+/Parent 540 0 R
+/Annots [ 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R ]
+>> endobj
+577 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [162.717 499.257 174.672 507.67]
+/Subtype /Link
+/A << /S /GoTo /D (cite.HBGLSSW:05) >>
+>> endobj
+578 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [422.116 377.56 429.09 385.973]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrSa:90) >>
+>> endobj
+579 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [107.665 220.39 119.62 228.803]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SaSc:86) >>
+>> endobj
+580 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [353.678 220.39 365.633 228.803]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Saa:93) >>
+>> endobj
+581 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [137.664 208.435 149.619 216.848]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Van:92) >>
+>> endobj
+582 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [402.859 208.435 414.814 216.848]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Fre:93) >>
+>> endobj
+583 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [203.461 52.142 210.435 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+584 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [214.531 52.142 221.504 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+585 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [460.708 52.142 472.663 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+586 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [476.759 52.142 483.733 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+587 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [487.828 52.142 494.802 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+591 0 obj <<
+/D [589 0 R /XYZ 86.4 726.045 null]
+>> endobj
+14 0 obj <<
+/D [589 0 R /XYZ 86.4 701.138 null]
+>> endobj
+18 0 obj <<
+/D [589 0 R /XYZ 86.4 442.789 null]
+>> endobj
+588 0 obj <<
+/Font << /F38 453 0 R /F16 397 0 R /F8 409 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+606 0 obj <<
+/Length 3909      
+/Filter /FlateDecode
+>>
+stream
+xڝZYw�F~ׯ跠�PPl����8����%�j�[�i�Z�2~�Vt#ə�sԵ/w��-��v�ޞ�xs�Û(Y�~����f��_��0��H�n���^x���O�(M� �a5�kΣ����~��z�����9�ϙ�q�J��b?��j�;���`UB�O����l�@�v+
�~�zu}��Y0=]69�
+�i�Jr�4qG�����Εg��ǃ���6}�-�c8r��u1T͖;~~��s�3�x�ި)YT��i��_���R?�/N������aꙮ��=�����.�j��>�'�}
(;��ES�U��w����(`���q뻢ٚ�z��%��R)�W��n��*ᄷ��yy������K��"�
��<rec���I8 ��3K�s�ϋwӾN�'�{T=�w����Л}��
e��/�4��
��pw^��_j6��&*�~�B�XαgJvt<B�
��lFfh_w@S��Py7w����	6ź����3�BЮ��K��(�X�����C�)�A����G �W
�l����-gx�@ �������vE
��ܫv�b=p�v�_�):�ۮ�Q0T��(���0��4Dhj#r��
�P����vD�<����#�@[����㞧"�)h�S��ДUQ��RviGΈ��������t
Vѭ��;��/��'�P��
&p9�+�jPp�]~��i
&�W��`��)�:�Y
u,��4��&��	8 ��ܵ���g��WY<'G1
�w�C� 
j�\.�'�@�j}����Avj+�;ò'����?�!�T"�؛�³a[+��F׵�a�����U
\��(?˜mAMR�O���X�I��q�Q��Ɏ?�$��8�
%g�e��_��e���27��	�*{Uds6y�AEӘ��US�(1�y[e������C��[��X��<q�A��9��z)x�<�;���]�bd��
�
�Z3ʭk�Lw��{��IU	Ep��)X~`�Q��y�menA/9{lٵ�l.Dvn�%�����^&G�$Y�v\��v�%o� �RK~�
ɚ�jև
1r@���5X�ӳ&�T����8��8�Fє�8X
t*�VfE/�n�d`��uɔ���Eِ
u��_p��w�V�ɝ�\Fk�Y��|�d�7RQi,ώ�O�
��Σ=t�Tw�-��0�L�,���*��r�8�s��+�04
�$A(p;�-�FT��r��f�����s7�L��
+���l��	c q��$
�
FsUd<[3\�X�-AO������
�d�`��i��
԰4�Qh�:�6g�W��#N
����ݒ`g~���9s�=�0FX�r��_g��ŇV�{ӕK�	}
�D�W���u�u%��P��L�u��$x�A|՞+�
d�A� �6 �K�o"> ��b�L'�� �K+����9q�_�Ԁo��Ǧ؁E��΀}}�2�^
+� `�
=�*i�����:t��ZV:�fs��S�v3���/��ɫc	�U�������% ,�(�B#(l�s����`e
+ɱ���
�y�t���Z�u�^ľ�Â(�o�>r
�,?���3��fQ�a��$�����,�*?
������g*��Z���|��–Db�4[� ��XCtdN'�
��K
 ڋ�<%�"��C�[Z�qW��@FVuq���cf�
,���<O�xL(jU
h�8���dV����y:涳��(Pj@\T��sgC#�����@"�͚���m]X*G:� ^�28Rg60�%CY����JG��`��j�������^�h"?u/��V<:e+�����I觀�`c��"���
+L�%I�i̮�J���U{����5���M�Z�	�0MJ�A�5��������
�8eCF��Q�|dYVH�EO80�&�g�
+oŘ��;�1'O��_ni9'��@�?�"�XC|9��p0��`�(J|	vɂ�5 (~`]�c�Ot���
+��
�Q��8���sW��q�r�T�b؃5jn�02�
�.L"a�=�#�8d�9LE'd�͡YO�kJ�ƂױZ��63�0�)ε�����/)O⇹��f�ڜ�0@�F U�f]J�d����F{�
^[ό$��0rv���
1`y�Z�J�w
 <y&M
A$��41��g�E�>�<]A�	r�y��ޚ�7����^
mA�'�/��E,u K#�}"���(~9�@Y�<�<�6K
�N�fg.X@`z���v%��Ar?\�#s��C�m�P4f+9
��������Fa$nxs8�aۀ��� r���;��֘�}L���W�'!Ɏ�W�=l�@�2�GᴔzSt6�@.� x��_I�qr˿h���.?�I���s�j�I4������Q�
WgW��N0�[սݢ�i|b�*������TV��ޡX�՜��X}'����y���3:xG��iYH���([
f�GS7����ㆌ��
��"�"��`AC/i�N��u�<V��nTr/��s/�M�M3��/���
+�%^sXe_�ǚ1�ٴ��xS5C6
f.
}��(�ƛ�ڀ0���9h����\$�d���$��[�ؙ���RGV�K ��$GXnNh����b��
+2r��&�PX<+4C�'<�㦭t�Q�#+�۪iH�3�P�� �C�����+��
E�\��
��p*���R�w��-�����4���s&@�^҄#���ā�Q:�.�P�"��:٭�<�[m�;�
��L�^A�3�#H
ٔ^��x7(�׃��6�1����<M���	�������+J)���_|
e7c8�/Ɗ�=�'L)�M��H_:^�������L=�E�[�{�ʣ|��M�rmġBT�^��
�~�<Ӣ���_��}�w��������*���˫��u����
+}��B�;�B�J��O��(��+w���:��}��<���RP��0�V�R4P���It5�,����H��p��O
�!��m��\M�#e���::�5�
�@�	.��ȏ�/A��
,�8.��tj�� �c��C��m���ͅ$4 �U��yF��l"%��<wbB9����gEh�Y+h�$�E�p�$2L�iԂ�7���|���+d��kn�ܟt��
�F�� �8����1��M�]�]��~��<Mre�E��ѥI&��U��$
����4���2
S��d
�HB�I-D�C5I
��-B�g/�lG[T7�i4�r`
:�u�稬Os��A���{�k�6�O��Ĥ9�;}f���s��?�ˇ����&΃���� @M

#]��'^3@}��[>,I���i�B^J&{Ц3O�
� ��M
F����'�ẍ
�kk�7��&A��L-߁�~�㝳��1Ʀ
D�R+~�4e����|����R���Ki|������es�\�͠��Xd�`�����-�R�@Є�� r
���ݲ9���8�7_�
��OE6�E�=L_���'0I��3-~f���C�<��(���'��J˗M#(�d��V�9���LD4�	(@D����L�(�-@`5�~�
+S��V���:ed�,��-�Į�s�qfk�e$�3\F�<��^I�V�wm�Q�
�a8��bw����b����Abv�w�~�@팽y�������wJ7lh�ŋ��殣C�t&�*��-��dC�$[�g �N�]����@!
���y�.�1*��E̯�4��V��O�Y�
+�إϤB?
#է,&r?=~_
�	
��7�t��I
�g	���X2FPp�� ��Eod\!�q~ĩVm�@ZB 
��
+}
+�;�:�<
4�"I_ә3�(� �Es��a��{�uIyK�Q��(_������Q��.��O�
��}x�9XWb��ֻO���	D���5�=O��p*d��0S�Q
+endstream
+endobj
+605 0 obj <<
+/Type /Page
+/Contents 606 0 R
+/Resources 604 0 R
+/MediaBox [0 0 612 792]
+/Parent 540 0 R
+/Annots [ 603 0 R ]
+>> endobj
+603 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.504 86.164 406.478 97.012]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+607 0 obj <<
+/D [605 0 R /XYZ 86.4 726.045 null]
+>> endobj
+22 0 obj <<
+/D [605 0 R /XYZ 86.4 494.402 null]
+>> endobj
+609 0 obj <<
+/D [605 0 R /XYZ 86.4 445.487 null]
+>> endobj
+610 0 obj <<
+/D [605 0 R /XYZ 86.4 122.731 null]
+>> endobj
+604 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F6 608 0 R /F38 453 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+614 0 obj <<
+/Length 4482      
+/Filter /FlateDecode
+>>
+stream
+xڭ;[{�Ʊ��+�9
�p���j7���Z#��K�4"������ǧ.�
�����Mߨ���{���z,>�yw�������H/n����"�R_�pq�Z��
���D$�;���u�aGzwm���m[|-�]ǽ�G"�+�NB��a4R:֞8���o�o���&���Eh�R~"�"߼��?��
+f~X�H����,�H�Z�b���7��ds��~kƼ�fmW ^Jy��-��]S}=�@��Ͷ/��::���osX]W���P������dW�eVq��� ��}�����g7?]sg��.�]U�G'*
�ӎg ��A ���O��O�9������V���=;<DxΨ� �j��m���Tp�<㉻��9
+�G}���]k�{�e
��VD:Zo?�c�A�xW�㗲R��M�Ї7���R$އ�Ϊ��X��|
UpD�p�4

EN�H|��(������	�� ����P��md*x`�n8!��	}�J?��G~�
�'�{�Pv�1�Ԁ3}�����c�۔uӚ�����A(s:L綏�e
+�.[��,�#��4M�+
+�Ԋ�ė*���� �F2��vuN�%Hr
J�*݆?^\-�f;���e��Q�S�Gjy��2"c�%��廭v�T���˛e�����ɾ
�d��i ,5��L�w�HĠ��iv���$J�Y��%��k�f3W	_�N�]v}Q#�o�78��r�)�~y��57J���
+�VY���S�f�"�
��l�<��C��ܡR��]8H�L��r�*��e�����,p[��.ɳδH�[V�]-N�zm
�������C9�219�����1�Ί���@�ӱ�u���tE�fJ5�Kfw�b9����=^��z9K�4��A��c�8�>7H37`��_�/�m�1|���
^
+6H��:/X���k�Ҭ�5?dys[fn�ݶ
�>���p�qv
7L1��
+9q�t��Au���w `�
�	�C�="i�0��a3����F�r�m���;'���:��F�K��`�Ue]��E�"�C�ف����?����
+���Ix���iS�y}�k�\�(�9`;ԅ�q�x`��t�'ix
����ΈE
��������Y�r'���J�jjz�%��5y? *e����,��CU�����R�‰����n�?���偋�{,������_�k�{y�8v`�}Z�x�R�u�"<Tg��

��(e����aEYFQh�������=B
�-),��։�۱�SoH�ኀ�fI�z`��9F�ԑ�����
 ��c�=������!ij
�Oo�
+� ��
DFδ]/��9=V��8!�>�
@%|=���C�^
p��X����xA4�8Ci0�Q '*��I�er�9
����b	�����j����I��E0s\�߃��W��#(��
��{�/� v��f!��I����q�{0C8n��z{����c.d|���d��� ө��������Q 
���F��|AXʺ�
$^��Z�B9�n�M�����(xw
c������%����F���@��m��	��Y�٦{
���$�?������r�Ao�¬����bD̔�}�."��w
IY�36��u�B�.�-!�hqfXD��Ͻ��9����S�&Á
G�(�&�������Ͷ���Y�Y�0��
�+�;����JĈ�[b<
�=P�A�y�< (�����Wu�r�1����^>�ٵ�q�j�;����q�����K��<��1���B&
+x<�V�
n�tg�(۶���"�������׀�\��l�0�2�i�GV�ȩJ\�M��jW9
+�3�q�8��T���c5���;��f�Iۉ��������
�@��͌R>�A�d����_R
�3Q�
�m���A(�bMN+
�����!]��
z�{�CB�k����z�j:���dw��l�:�\W�7��(��g��~
�Qf�ɨ�Y
�+�LI��aR�����R'�Yk4=���@������������б�C�c
��s�Fy�qbE���49Ol�6�~b�4�#fr��I
+�&맼S�X�`
+�P��P�{�ID
�� ��Md��?��`�Q�z���ڬ�O��+�		�tfhD�R0�b.�i���{o�(�CC�]�*\7�L��76s��X3�P�����_���g��q��\w���6&��.�_�F 
 "wȵV��"[�l�v 
�x-p�Mۚ�s�l�z����3��S
p|���3`�ȍ���g�(��UQ7����"G�k���3�a>S�*�����*DQ
+2%PR������`��o\'��G�Ј;�g�w��Cpz��/
\I����K��Ӄ��������Ka��+_�O7q���d*�m(
�L�LB���D8� BR�G�IΪn�x()
3�n�5Y�C	e/Fy+�;_Ħ��)w	[���oz���
�V ��7e�� G��"�V��3��|Ci<x#�.O�j�2{#��n��tgr�����>���o��q����	�y�U�+
+�B�
�ڐQ�m��V���~ nb������,�q(�ƊO�_#������`��I��^W�kSlr�M��8�K�� �
f&�
+׮䩥�@M�.RlYW|�=Ц(�)��Sn�ۮ��
3���*;n��f$�q���ʓI�Sٜ�
+�\
��8�ؒ QJZ�!�Oq�/����.ޖ�ꛞ'��%�x��*�T%ڡ=2�
� ��d�t�x�|��*[Ϩ>����lf�Tt8�/�c��qҩ��6��<��=�dFW�wi<��l�	73I���r�x���7����Ǽ���#[ms�p�����b���2�M���٨��U�e�M�IF)�]�J=�
yy�D�]�.�^��m>��<�q�[.� �o�X��x{�|},9d����; �8��o���a4?+)�0��tz��x���S����D;Xf=���@i�VYN,�H�B�~ng�`���2
+����}5����]�t� �ey��0�
�T�X�m6d�I�
���p�'�|}�c5D>�"2ҟ��RS���4ۡW
��n�R��$
�� �h�ֽ��_*�WS��#c
D�I��p��f���?�j�XD!;����a=
��/��+����p���}8\%��!Jӎ���0f@͟
+qb����}�rفdZO ǜ)2 X�5����M�u�)�c�s�@��7$��5��P��$	���S��9z�pW�R�|�@�+��E���
��R�3��8R��)����C��?؃�OW f��t6�w�x(�̏�`GX�ؗФ&]����rP;?^\}nA^/��ZEZ�X�T]�]u��
G��P�
�S]י
���}W�Xnl��
}E%�����&���-Cuཋ��R�"o6�:{�B,����V�W�
�-�\�8�S.
�����ڌV�z�K����'&E|1�9�����l� �� �x=�n�Y��B0�T������&
�ٕ�-2
Ŝ7�c8�}����9�
���@
.|��'j{��d���j�*�ʌ�����R�|/�����Ҍܛu��D[�D�:��������R�6
?�
�q!G������g�$��矤�8����`�o�x�,�.��{3�C���9�C�DS�S�y���������>���8�
�;
+Џ��H����¢���z:�/���B�}���'�
+4�dϏ�W��g3������Ձj��S䄛�
3����G��,����s�a�3���S�)(�$^������SDA�DZ&H�*�)f�a"�P�C �r���Żi�()l2Z(�M&�
"�PM��j�¡y����־e�� �&�E���*�_�9�PZ@�)���v��im�5/̪�0�K
�V�Ǥ|�ohx.�JBTG5�g��W�Y赙�'_���s��Qi�}
��h4��\��Q�Q|n��g3�Q� 80US[
�y�f�X��
�
+̵å��x�fc>'���ǰ�8�|�3C��l���سj�{�&#ⶌy
+fvӦ]g�}gz��F��2�z�T1}p�s�
�ֽ�X[��a
��6eU�ň�!&�:�q $�0Q��˷1�h���I�������>țz6�^�HZ���
s�+
x9������G����v{�=ڧ��`�	Ƭ}rK�z%@�B��Ȫ��;��^Ν�P���'J�efM�-K��H!��O>��*��V3����YÔ���w'�R�%?����qAg�*x�W��k<
�(.��^��w�? O�����aJ0����h����*[���P,���7q'�* 

�CɄ���HJ������x�CiSYj�1�4�
P>���|6�
+����lm��R~7�ݺ���
~�*#�5f������q�VV�=�)M�/<��� 
}U�
+endstream
+endobj
+613 0 obj <<
+/Type /Page
+/Contents 614 0 R
+/Resources 612 0 R
+/MediaBox [0 0 612 792]
+/Parent 618 0 R
+>> endobj
+615 0 obj <<
+/D [613 0 R /XYZ 86.4 726.045 null]
+>> endobj
+616 0 obj <<
+/D [613 0 R /XYZ 86.4 350.939 null]
+>> endobj
+617 0 obj <<
+/D [613 0 R /XYZ 86.4 147.004 null]
+>> endobj
+612 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F38 453 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+624 0 obj <<
+/Length 3717      
+/Filter /FlateDecode
+>>
+stream
+xڭZYs��~ׯ`U^�*�9p�R���x���x%'k?@$D"&-�=�������(�e��s����=W�U�z{������� �e���[�q�W�̂X���n�a�/��n��8U�]f�Tr�5����~ەuE
/����x!�.\	-
+R
�������
f�[�����g���*
$Z����O��t%D�E���řD3&�y�/Z�D���O2����y�&
�.\mNR���
�ˍL��)��2���K���bm�Ҭ��w([^��"o
?-��'����h��r�o��iܩ0+;
��xU琰�eS0�b��@��ѿ�]�ۇW�:Щ�S[������"�K�m�ѣ�qD�v���2+�������-S�E�nb
b����F��)o
K-_Z�@Ę��ۢ���+��|k'���vq��4v1ͮ�}��@��C2�1,/��yU�'
"��$m�����K� k�
^DA�=5E�s��%�X�L�bK�X�D�����%�-��D��WA at kB�3�C�m���z4
+)ͻ�I�S�yw�9
�u�q=�\
+�����x�����~�w�
�
����
+
"���$a�~�ەd)�#c�ȿ���"��tF
+s������;�k
�H_��m_
w<�~m���W�D�x<�h��
J Um��.��c�D�άjB�3��U�
�T]?L�-��&�,zmkN�A��]ݔ����vF┲R����;�
+�dc

���q�����
_/S��ʘeABB'
fc��뻾2&��.[���*4�EU4P��UkǏek���XC�
�I�D-L)�i�L�(ĕb�
6<�O`�T����#�3U�ı��
�)� �����n�"
b-�����E�g\A�$��
+�	�s�

H��J�l��e-�
+�x*����1)��T�Q>������{wu�
7�u�4�cz�0бtȜ<Q�Y2`�0)�x3S=�r
+���C�k|�

���A����@�HDbR/�:*�G0��lb��d���?� ��47��l�	�aT���5��*6BvΖ��5E����Y�X/H7B�4�W����oo޿yJ�^,�Ҹ�WH�@�9�'t�+M`u�ga� �)
��7��-{H�u�Gkf7®��%���̢
�C���pW+1�.�F&���
fo��7�Թ�@�E� 9>��A��°Dj%�7��� ��eP��q�I:
ρ-�;	�dDn6P�j�fR�
�i��@f��
B�
b��R����o���U�h��

x�ie uw�R�?���Ơ�~
+\<w� /
e#!F(;pjQ&"��[�n1��M���MEQ�!�	��C)0��Sq(��v�ZL [��,�ϥ
`I�Y����8~"���h���j8<�m
����;*7��^w�-wG~aL	Ch�'��#T���u�S:at
+�c���e�����m�yC�k26��S������*����"E��3����-w=��*��.� $���.�H
�t����"�#�y&�
+�xl<���E��
�e��l&҃sV�n=�;�?Hsl�d/H>�fhc�C�Ä���]^
[{q��
��3�2��$"�iʫ�9r��X�~]7
=������t�ݑ�F��"-c�<�ӏ9e�I�I��Rft�94�o��p�r�5f��i�d�`?B�����DžT%��ۏ����.�r-E+�(&:�z*�]y*��
�jn�%vR���}�L�!$u �rӄ��p�J[�J�W��8���;�`��ڋ�<��������,+��Ǧ��I4� ~�o��2�6t�vÞ�B
+�6
��c��dk��A�{�2�r�.<��
�lM}�`'!im���ٚ}ް|��"3�U�
^�iy����	
���iS��}G�w��{W��s���Zn�2 5|�:mA��4�|�h�"��|�ϫ�������!B�BѲdj%�9�M�&�Eld���z$�+�G�_:�
���)LUfv�-u&�KV�=���:��eW
*y�`�Ca b��G�©�;fur���$�x��EmW�b�|}
�m��zwM}▗�)�B@���ǟo��F��tj
����p�H�iL��eG�?�r!�.d�~�F�f�p'Ӱ�S�V�u�T�6�ܺ�y�@��*�h�V�m�(@�H�ʒ�	"��(�$I���w?�~*sUa��$A#�rs�}a�����E�� L�&�����a���i���4�_45�a�]ݑG��FUWc����U����3β�����
0����o��o�ӣN��yS=�|��zS�~����&V���U�����DJ�;��Ȯ�R}�j���E�my[
��	nڒ{F�����v&L�l
��XWM��j.�᫷i��[��
��F,A�ʞ��;7o��cv��`�=��U��'��N�x	�/U�<S�L@�H��>�Q�R��z�T�LL����
+��(	dĐ�4{�p���X!�Br�Ǒ�1lG���Y/��\��`�j�."1�=������.�
�N*�5��[�fCA�hs�D�Z=r�����*+k��ৄ�?%`3���Kc]˺��F�>!����,ٱ{�l3���
+J��hp�g� ��ɳo �H�����S�7�:�w�b�P�;k�
+Hʹ���cV^>�y
�ͨ�k3깯�*͜CDk����yh�1�
+���
a��b��Rl"���>@6�L�վ8gO�ىڂ@�ر�Fg�5+m�=���r�mm^omD����������c�md �2ixz�,�B;���:�< ���s���2/���;���>�2H�mo2m��f��?����'��+�(mRql��MH���h��vQ�?��ct�έ)
5�d`	:�C��;!f�;!V�;!�Y�x"
�����
�ʎ!J��>��#�Ae��VӠM}۷�Q�/��Pr��W3PV��Ѽ���ʪn��%�"˞��-|�ᅯ0)*�HY��#}�N�?��
Pa�,g#�8��g�r�ͅ�` D&^��h.�
T9��yZ�����Zz�0��� �i2�D��9�!bBԷ���#C���u�4T�ȷNQ�A�5���%3�|��q��/;R�4��&/bj
҄[�P��Hq,!Syǥ�i��'G^�	
��i�S����hj�	S��&��{��k�m�6����}0�a�|���m�}���%�`?������aX����:�3�@e^�J&�!{n��'�DA��!�Y|4�t�l�D�C��k��p)!.�~�P�K����S�D��:
�+�,a"f.�S���KD�w�3A�=
tQy���ydc�'�mǝ�
�$F��
{��l�D4�x���Vպҭ
�WG �^/Da8K�'�&�p��)KEi-���s�;���c�J�U����鈪o�RUΨ
+Ȇ�6�1^�
V�%Q�uy���oB����^�j����Hz��/��dJ�4v��0(��kآc��� �(�"�y3�S�����I��̔�7�p���j
w�i���X�4P�7S��,� 

c6
��+=�z�x�
h���$Fv7Kx�h��L��X�!�Pʾ�`�����f�^L�u�*.��T�0>��29�{K[I4�%��8���Y���
JE
�7���D�y�ۂ��.L����k
+��ԙO^�3ۖ��
37-�Ә���H�Ll���&�H�1�z-����I�
�
�65
��Gj{��L�s&��b�5���Tͧ�T�`�J������tsm�
+endstream
+endobj
+623 0 obj <<
+/Type /Page
+/Contents 624 0 R
+/Resources 622 0 R
+/MediaBox [0 0 612 792]
+/Parent 618 0 R
+/Annots [ 611 0 R 619 0 R 620 0 R 621 0 R ]
+>> endobj
+611 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 668.456 519.955 680.411]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 475.014 92.377 486.969]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.066 330.745 140.53 341.593]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+621 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [256.844 74.568 263.818 85.417]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+625 0 obj <<
+/D [623 0 R /XYZ 86.4 726.045 null]
+>> endobj
+626 0 obj <<
+/D [623 0 R /XYZ 86.4 682.026 null]
+>> endobj
+629 0 obj <<
+/D [623 0 R /XYZ 86.4 524.45 null]
+>> endobj
+630 0 obj <<
+/D [623 0 R /XYZ 86.4 294.236 null]
+>> endobj
+631 0 obj <<
+/D [623 0 R /XYZ 86.4 208.844 null]
+>> endobj
+632 0 obj <<
+/D [623 0 R /XYZ 86.4 159.317 null]
+>> endobj
+622 0 obj <<
+/Font << /F36 408 0 R /F38 453 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R /F48 539 0 R /F49 566 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+659 0 obj <<
+/Length 3344      
+/Filter /FlateDecode
+>>
+stream
+xڵZI����ϯ��[�
�r��H%�ⲝq� �!1$J @��_��tc!��l�n����F��.����no^���"i�����"��Y�*������c �^�t����lST[|0A�+Z&���
���M�\�TFa`��n����͟7�
+��mEb��z��S��@�O�P�4Y<Ҹ���T(h����z����n5J��q�[����:UA��%�����}�u�]�.��q�� k�|h�>��W���˕
�y�w����5�q�sK
����
o��}^-U
t-�֙[��q�#?���m��벢�7�*8�JJ�Zw�t�~g��ֱ�"�i����1�!�
+`���p_�tBKk
��52��8�O)a
J$�_�P�]V��w�n}�Kɱ�DFH��>U[��;�F�V�Q�6̪
�
+k<1�I����c�)��=_�H��$O�#	C㎏�������̻
�\.e�rWi�䛼-�(ޜ�e��	���
#U�EZ'L��Y���4�c��߮���1����4B�H�I@@�6
���ʎ�/������Zlg�����zᓘ��/Bkˆ�Mߙ�p	�{WT����Wy��~�l�稀�-2�k�udEs�2?M�:u\ș5�/J��2F�Y�W�}��c��p�ۚm߂,�Mސ9F�cAjd�{�U�t5����Έ��s���@��<�pl���w�;�+ص��+J�.����"��=q
�������.f��˂�x޼�G�H���f�U����&�@��]^mr�R�fY���5qv�G�^6ؼSV�$�!�jj���w���*F_H
lP��<��k�Wq\�?�
̚��~!ݩ�#���j�y�����5
��"N����Y{D�"M�nԀؐ
t.
���a!����w�8�7��it��_�.ߓj(P��<����Ք��Ƥ�l�@μ����������
G�f���o�oi
+�9��f�6 at e����s2
�M�	�{�qaJ�1���+�=�\X�ċ
���������
+l\�;��KV��3��ĵ�ȩH �[?�/2#�N��	�)	!T�
��)>����Ixl
+H1���<\��p�X��
+���#9[R4~�g^�
����]��yOCA��X����P χ� ��uܺ>�M�47��Ð�yf�A�P�^�� p��}�w�����@�v	!���o��w�?e��� ��q�2w*��8޲^IkD��o�D��:�pj�}\t�N
Vٟ�E�?���P	�Ҩ
@7�fVZ��^|�8�.��W����@l�1.
T��So�ɢ��93C�G�A�^��
x
A��%��xFB�j�����U��%���:sk��
��
+�
�gm��y��	���0��C����ha�\XsB��
������eɶD���d;'
C����[��O��yE-�+r���X;�4$��r�����K�&�
}��	�;�
+��
k
��X�k€зϻ�Ӝ�)ƕ�H!	wA�
�����yˬ����'
��Au?z
�{��j�� ��S�[�@(�P񷋐T��^eb�gC#!Ǡ<��K�X
+._k���
f��Hǣ��s�*m���d�V��qE7�ߌ�����$
��9gؼ(y܎;.�M��N1g}�q��g���
�$M�#0�C� sM���%����E/9RB���z��
^Tgbe��]���vf1kv��w%��g�9�!y��$5q�.K�d�sI�Z�g�P:�qa*���D?�T���m��c����1��ӢZ��M�Λ�__p�eaCJN�����5�
9��ģ�����N�Oݠ��As�
f�6�k�b�\'y�o��_
jQz�2E�����8�L4q�s����Qo���$������c��)�a�)b� �
��y4�sx�_z��=��R��$�Cs�^������JZFTͩ�bi

+}�N��;�gEoLz��WƆ��`׊�ƀy!��)�{�0�Aϑ7���^��8ֱ@�g)#a���� 0�P�������.��k�e
����T�`��9��+J'�ӽ�U���s��
+�~k���*�k�0�ˊ���T�3��AH�����S&��UL��^K
R�ex�r#��vuA�W*���p�ڣ�AQ��F�
+A�
��Ξ
�tƦ/Ɋ�y���yi^}S  ,��ĵ{W��������C�de��.o�=�v�{NQ�@m&
��9!ka�t�_�|8�/�%
��M�w(
+D�y�.�
Ag{���##�W#�f^q����
+pl}�X��H`�/�S%�m����y<�����R������H_]��/ڡyBo���������������w
/��g%"�f_H#߇
|N�H�n{h\}2��,l�s|
�
�Ԡ�:��ρuZle���[TF��$�G���͔7��:����ǰ��
+����$�!3JLB!��
G����D�$�$��Y"�(�?�����r�)���2j����g@��^K��޿+*ظ�
P	�V�Z�t2��r��׬zɀ�q�T��ر��O�;?��,RL.ϑ2
W���]�k����Ў���E����C����+ ev3 �M�\%Z�q�{;b�'�����%_	��Ң�|c�ӕ<1U�Շen��<�G*`����
-bߑCtr���:
;�����(>A�Uk}��
,6�~��V؁��K�o1���
��?<Q�*�,{\}���I�O	��9�
��
V#�冻}~I�Paj
�R
;�o��M&���!�L|Q�t�J�(1�-��񄅣p�}��Ɲ��H��F�m2��cR�B�O,P�ҍ���G�c�zE|���G�хC���?��n6���>�4%��S�˿tt����C�U=����W�����p���Ǧ��
�qq��|W4��h;���
���(�����
N�[=U+��>ꋶnΞ�12)=���^ ����ziA�.��Yic9�1�{q�
���=��
�S? ��r�~#����1dq�7��&��Fitx���WƫXtW��Č$���"Z
�߹H#iW@�F�l
���x	[����عi�=������^pV�n*6
��Ӝ@�}�|&�t�S�:�ge ; m���r�Y��܌W���(��J�Q`�mQ	����L��D�h-�w��	�y����?�pGx�a��o~���Z�T�a�
<F
�]��]/�
+>W5�=B��bj��s����Z��O�/�м�
�'���%���
�Ϲ��B_���4��r*�'8�w�yg�?\O�>a��?�J.��!{�|����	c���
ۃ+���җi�O�\�7	@~[�7w�C����E��
e�L���E�9}� 
+endstream
+endobj
+658 0 obj <<
+/Type /Page
+/Contents 659 0 R
+/Resources 657 0 R
+/MediaBox [0 0 612 792]
+/Parent 618 0 R
+/Annots [ 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R ]
+>> endobj
+656 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./warning.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 662 0 R
+/BBox [0 0 26 26]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 663 0 R
+>>/Font << /R8 664 0 R>>
+>>
+/Length 665 0 R
+/Filter /FlateDecode
+>>
+stream
+x��O1�0
��f')�W$�L�*�5Ca��$m�Ď<�u�;�&2,d��e
�@�
B�y���jE)�z�ܗ!6p�T�c�������P�>6��|����︭���	��+t�N�4��A���ciZ���P���P���f�
8'\�| ��8P
+endstream
+endobj
+662 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20160810091351-07'00')
+/ModDate (D:20160810091351-07'00')
+/Title (warning.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+663 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+664 0 obj
+<<
+/BaseFont /SOTQNP#2BTimes-Bold
+/FontDescriptor 666 0 R
+/Type /Font
+/FirstChar 33
+/LastChar 33
+/Widths [ 333]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+665 0 obj
+152
+endobj
+666 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SOTQNP#2BTimes-Bold
+/FontBBox [ 0 -13 251 691]
+/Flags 65568
+/Ascent 691
+/CapHeight 691
+/Descent -13
+/ItalicAngle 0
+/StemV 37
+/MissingWidth 500
+/CharSet (/exclam)
+/FontFile3 667 0 R
+>>
+endobj
+667 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 328
+>>
+stream
+x�cd`ab`dd���M-�u��Iq�~H3��a�!��]����;�,��\V�n
�n
�E�o	}o�����A�����b�b���ʢ���РpMmm
������BR%LF�%�83=OA
�(K��/�M�+�Vp����LVHϩ,�(VHLIIMi
K�I�Vp���,(�/S�p�T0200��~��I��
+A���y
+~��
+>
+��)����


��

L
L��,�?:��?��n�c�|ƻ�m��[}7�MM��^��k��
;w�n���ySt�w�){V����~�"�39�Bs�|��+f�ɭЙ9�7?_�����g[��]�{�
��
+�xx �~}J
+endstream
+endobj
+633 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.822 541.766 304.796 552.614]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+634 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.395 541.766 379.369 552.614]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+635 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.045 541.766 446.516 552.614]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+636 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [155.275 531.748 162.249 540.161]
+/Subtype /Link
+/A << /S /GoTo /D (cite.kinsol_ex) >>
+>> endobj
+637 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.264 517.302 254.987 529.257]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+638 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [93.706 505.347 108.428 517.302]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+639 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [320.758 505.347 327.732 517.302]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+640 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.852 493.392 143.574 505.347]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+641 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [203.046 493.392 210.02 505.347]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+642 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.955 458.563 168.929 469.412]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+643 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [469.876 422.628 484.599 434.584]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+644 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [306.347 410.673 321.07 422.628]
+/Subtype /Link
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.683 387.8 156.657 398.648]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+646 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.239 352.419 169.213 363.267]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+647 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.238 317.037 157.211 327.885]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+648 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [273.128 292.573 287.851 304.528]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+649 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.453 280.618 171.176 292.573]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+650 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.94 280.618 461.662 292.573]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+651 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.612 268.663 133.335 280.618]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+652 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [148.322 245.236 155.296 257.192]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.7) >>
+>> endobj
+653 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.081 210.408 156.055 221.257]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+654 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.607 174.473 286.072 186.428]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+655 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [313.155 162.518 322.205 174.473]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+660 0 obj <<
+/D [658 0 R /XYZ 86.4 726.045 null]
+>> endobj
+26 0 obj <<
+/D [658 0 R /XYZ 86.4 633.716 null]
+>> endobj
+661 0 obj <<
+/D [658 0 R /XYZ 86.4 75.987 null]
+>> endobj
+657 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R /F38 453 0 R /F14 627 0 R /F49 566 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+671 0 obj <<
+/Length 2814      
+/Filter /FlateDecode
+>>
+stream
+xڝY�w���_�O�'�|�}rl����l��>��lmH'����cㄴ{�K��h4��h�ompuv��}�4���z��
�����`lx�c�d3�Cq�%���Q5ӆU�
��i(MUG�9���,P��O�~�� �
t��V]���g��
60�i�����In?�LO5��
�/gډu�@�T�r��<��U}�%�j
G�n�J��f�$�����,�]���|�0 ?^���j��a��㲲dK
�]�򘮇��|ڎ�~�j榕�x�
�������'��P��s��r�J��*��%.��wl�:
َ%m���En��W�
t����|������6���T�I�h�&����*���ih�Jڀyx�$jI`
��^��ۖ�
+
+��%�&-6i���&�׻4��i=�»<��a�.o��Xy�_�Ȯ�́}�Xl�f۞Ce�������R���c%ە�����]Y|c�9o�,�
V�w��ͳ,���a���"�'�?
Y��D������_�����-�:�m�<��K�эxJf7�
���cZ5��]~_�U�����;�fB:/��O��2��z.SQ&�5V��c���c
�8�T���/1��`|
��`VBF~i�F�itTEI�Fǀ����!��-�~�T0,C�
�
�ʪp�Bto�jژ4���31T��Zyc���9���$�
+zA��Z�{� ��@�8��Y�a
Ț�%A�����R����G'��IA�M]��gLa�ՇJPMɿU��gς��$��]B*M�4<�h� ����:޸<J�����Z��BD
&�PfG3��)�8�lS4�	9s�e%�ئ��
#QiV��
I��ǔB�<-SW.1��.h*�'�?��!�����>+��V��n�p��J�y=���OM�e�$7��
�/,��S���`�^��Ŗ��
K��w�n���L��!�"8�)V�)��"d��X�^�
�y�S9۞��3� r��өN����s ��� `���Y;�Q�Df'D�

+
�3K>�l�����^�E����5���}DU����
��h
&pU=f�T{�h�=
+M��KJȍ<US�⫳�ա/�W���amr��\���ZG�\ݤS�Wm�>�:>a���RcB��

H]a?\K�]#��"�����7l]14� X�
B)��jn�X�qA(���(�^1��(�և*������ʢƎ �Q��
Ra
+� nA��fӱܴ'
�&���ѵ�Ҧ�d?by�r��u
5s6�0�d�'�Te�:/6�����۶��ԥ�Yf/E	P"&�x1g�=�P4���b�-��
'<��X	5�:SO���K�fŹQ�J��JP
�0"SY�3���]�.�?T}1s���s�����ɘ��O�*��ѫ�2
M�3�c�0)��_�"��h��R�gi�/�ǵ�
�N~��0džf�Y�vK��0��JDZ�����s���
[
j3��\j˩x�
�.��e����)	�]��M����B
r��w+D_A
��.�B 	{���F�&aq�F�B8��%��Έ�R}޾ɚ�8U^�:xU*�BbT-_$ħ��
���ՐŐ2��ό`#�Dd�w&3p�f ��O��uxPdU��S�� F�0C<B��
+�Aw�2�	�J�
{�[�?�72߳���5���5�1�!��Ks����_���
ē����n�[fU~�[�;���8`��D.f�I�J�>/���졄6
��
˧
H`;��ȁ��^�㟚n�)�h�#^� "�'T{
�M�<V�mO�F�h�h�~�w��/69n)|.��˳�?ニu��t_9�U[*}dzc��b���z�T<j��VY��s;�,D�����@���}� 6C&������.��H�:��gM{�؜t����
Ӕ2���?
�Ն��Y�3��2
��
�a�0u����Q�D�!�{ G�
+���(�����2\M�
+��W(@BZ�o}eK_q�+�� ߉H�֙�?u�xQ �"�D�{}��kiv�X�}J�}&����~iJq��O��ӫt�ۏBbӞ
�^���m���A��)F��Ӡ����Y���a��F�G�Q
t�� ���Gw��Ŧf�Ӌ=C6���٧�_�4�]�z͑y%s�b�������%��R%�������?��^
X �I�(��J��;B[��(\
�[34��si�sۘ�
�
�>��^Qr
�G������:>���b�f����`�Ϙ{qǿ�5�C�>_�-������p�/��I4�BQ�
.V�
��u�o|������;&��K?r󥐿Y��/D�q��(	0*|��\HF�p5
�+1����i�
�	�z֗
�
u8:�����3P���,5����
<��I�2x�ArǓ|p .�$���K�������ĿI0
�6���x��Y-s����q$fA<
'��O���ќ��~�0_O�pGԕۥM��0��/o�Rq4�'	��$ď�� �%
k�
+��9O�W����
Y3�=,�ߐM�G����K���
��S8}4s���p��"�]����8��Cb,�ir΃ z5�B���
3��Y�Ӡe���%|_w�'�;G}�a�Y�� }f�h��>%_QX��g��
�0��
D�	�(LsW�:܄�^E&�)Hū��[�� Y%�.�P���Y�$�~c�
����ԏ�˼p
K�K�]�>z����8����wՙ�F��Lnt���
Q��KR�Z`�:k��W1��pS�%�
y,��
'#�H2�X�tN�x'.���D�|���kD�<�����|��O��}�*i
+endstream
+endobj
+670 0 obj <<
+/Type /Page
+/Contents 671 0 R
+/Resources 669 0 R
+/MediaBox [0 0 612 792]
+/Parent 618 0 R
+>> endobj
+672 0 obj <<
+/D [670 0 R /XYZ 86.4 726.045 null]
+>> endobj
+30 0 obj <<
+/D [670 0 R /XYZ 86.4 701.138 null]
+>> endobj
+34 0 obj <<
+/D [670 0 R /XYZ 86.4 568.288 null]
+>> endobj
+38 0 obj <<
+/D [670 0 R /XYZ 86.4 521.615 null]
+>> endobj
+42 0 obj <<
+/D [670 0 R /XYZ 86.4 380.739 null]
+>> endobj
+46 0 obj <<
+/D [670 0 R /XYZ 86.4 287.684 null]
+>> endobj
+669 0 obj <<
+/Font << /F36 408 0 R /F38 453 0 R /F8 409 0 R /F16 397 0 R /F55 673 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+676 0 obj <<
+/Length 1379      
+/Filter /FlateDecode
+>>
+stream
+xڍW˲�8��^��
�'����)f�oR�$
�U� �}	?�j�WHլ�:j�Z�G�`��e,���_��Ĉ��ę��'c��h<qm#-�/�=��#7t��e=���g��e%�$���Y�'�-�
����E:�9��
˰���8�&F^
�|��V>�؍B��*�s��Vi$��u��}���
���Ҝm��v:tBs�>AVAh&�6��d���x����fKc
+�F{}�|+^�V/�x�$h�X���b=[\o
�M�~�
ڶm~��l��Ґ�ȶǑ���n�D�r�Ȍ�8��t���O��1�C��F6/)�l�	�SxI�噀�}��l����~R�L��'���X�α>!���\g�S��l�$����]W���T��'DE���
+�\��(�;�4�E�[��YI;�%s2�M
�QT��l؎��ȆV;~O�[�/#߲�t�%��&fMq��c���`�چ��x[S�
D�I��w��	2�NyS�W+��%��۽�ס^�ɘ�9;d��mұv4.j&^O�Bp���e
+Ro�QD�X����#Fkď�Y���x����5 �ZW:
�Uu�o1Q5BC�����JԈ�mĉ��,`ή��0�r�<Ϝ/F@������
+�S'p=�ڮ����������<X3���9����K�[��9f�f-��/�JW���	��FG�-�Bn
�Хp8KX�	ޢ�	�3�
$�Z��bg5�ܳ@ߑ���E� �U���M���
�*�� In80O4!����]�Ld��I����p8��BG��Lʮ�>#��(y�����oBA��
=���7;aة�����Y����AyS
G�y �+Y�Ю�V��ک�I��ʚ����h���9+�L��Zfv�2x���� _Y{9����1�s���y�H*��k�`�M at Ik�^�]X���I�FH�� 
DO{�;��W�u�:���AXy)�
k��	��G���<8�მ����LlS��������h`b�
<Q�V��c���
+�hư��l/':^1�s�O0�R�V�fbݔ\�j�1�x�O������@�
+�Y�U��O�Q�U�����[]Q���J-�XpD%:r�2���:��24�	^����ly۵�6
>I�B� ��E#$�����L�.zZ�
*
+�WJ�ސ�P��s}Љ����xR����FG���rڝ���B���>��#e
"TV�L�C�����Q���́�Z�Jp�k�PD�����w��
+66G�
7�@bY�EA0����%�Q
�J��U�����F{��R��=P�.�{D�j��{���
�xP܉��}�+*+Ȉ�geI�s�ˏ+�-�J��Y��o����^
�6!�<L

:�?,��)X?¿�� O�[4
+endstream
+endobj
+675 0 obj <<
+/Type /Page
+/Contents 676 0 R
+/Resources 674 0 R
+/MediaBox [0 0 612 792]
+/Parent 618 0 R
+>> endobj
+677 0 obj <<
+/D [675 0 R /XYZ 86.4 726.045 null]
+>> endobj
+678 0 obj <<
+/D [675 0 R /XYZ 86.4 639.37 null]
+>> endobj
+679 0 obj <<
+/D [675 0 R /XYZ 86.4 595.534 null]
+>> endobj
+680 0 obj <<
+/D [675 0 R /XYZ 86.4 537.806 null]
+>> endobj
+674 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+683 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+682 0 obj <<
+/Type /Page
+/Contents 683 0 R
+/Resources 681 0 R
+/MediaBox [0 0 612 792]
+/Parent 618 0 R
+>> endobj
+684 0 obj <<
+/D [682 0 R /XYZ 86.4 726.045 null]
+>> endobj
+681 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+697 0 obj <<
+/Length 2364      
+/Filter /FlateDecode
+>>
+stream
+x��YKs���`N�)�0��C�^'���Q)G9�>P$4b�CN�
�ʯO7|�`$�v+�̀ �n4���Ќ�]��D���͛/��4�c���� ��
+b��7e������0�n�Do��כ4G�$M8Ή�Pe,�)M�!��>�"�iַm�W��Z����e���
+��
+N�oUӷ5�K�$ʄ�v��}+ҍ�A�T��m�19j*�&�w�˫�
��~0{7�j��3������T0�d����X4��C^���Pp�x���
z��jv$�G�0�͟�{3ܷ�P$��zZ�9X��
v�Syp滢wm�yC#&{�v�Kx�	E	���|_	���K�#�R���
�
ϗ�,��b
�{L7_ӟoEK��چ�ljO7p�LM��#�+�Z�q�ONR�,K�aѹ��d��L��h�Z�*bR(p�y؟<�8XT�J_9�  ,e}u�s.����`�A�m��)��Dpw���������� ׯ�
+q�����{�V	Kc~r��bot�!g*S4(:W[1��!l��V)�闈�?L
,
Z@'�
4d��JF�T�
�6��LS���р�{�>����"w��)�Z~�ZG�dP
�,W_�kR���	r�4����./
+S8u„������tv�'Щ^�N�Z	�:��
+���ا�Lj�
>�� #_�O���>a��LV�.�Sϡ��).�39ç�"��&|��E|B
�����g��1�cF��]���1��A�m���Y
ۋ$u.
2<XA�V��9
��F�@�k��B
c:�� �|�
��s&�5�f=Ů'��2�E).j���E)�� ?
+�1z����u�������MI
?�X�ZQ��	6~z�$*��ht\]
k��9>���<z�g�	����'�
���0Ɉ�$�z����� oJ�|�
^	Ck��Od��č�q_��M�zkC�Q�<Bh	�G>��q5a
+�Bm�Ʀ��?�}���&��k����46��m�S:�e����H7c�0����ىAC
E���G��|��3�@=��!	�c�vD�I�/2���1S("K��»�w[
���7�hڊ'�@$VM^"�\�F���Ĵ�� a/�,0	�Kb
����ړ?�e�:��U�Җ�$'<_���	��T� �Q>��3wz��(@�����s�ኘ�WБU>'����(!��9��)i_b�@:�g��
�
+^
�y<��|�
�L
.\���׈
�p���!���E��#I�^�p�:�l��/��vᔾc�����KX,W��/�l1�����NBf}b�v�
w�$r
+g����
�z����ve�3?ќ	x�(�%G���O�6p7V:|���g��8&œ���wә+_�K��/ǯ>�
�
+�W=�8�
���	J�9l{p�@xwTR8�`�ҭgY �J��‚�b�@�.����
�c�3WJ�������N�!P���lJ�|�O�$�.}�J�=���
uP�:?�E{[�
P�D����0�����!߹S�j#v���x.��
�
2�:�`Y�r<
q
ˠ��"�m�F�Q�
��hmh @�%�U�1�m�wx�gI��P�-Q��,-�G��>���O�)
WK5@�ʚ�p6��Ec
�",���3��)4��5��@�֕3�x��`���}����2��{��K�%]M
��U
Z��r���N�\|5�h],�+r��J*����n��������xwe۪ �����
��3 �G�b{Yr����[x���Ė��(cZ����H����P��;�s���ޥ����mPG�p�E},�#���
�L� �&kG@�X�����I��?
u��7SY%^�%��o?b�6�xJ�͍�Ȭ��uEf=��e�]u{
H���a�,����.�
W������wN�����F�Y��k�4�l�;s���j���
+�cme`7+���XT��UYu[�� ~����b�Oj��IV��]�>	�3�d�����k��m�흒�{S��w��]������s�x��fB=MO�G���]o<�ɘL���
s�|
���z�.|���l8���ܫ~�(TR�jr �����a���}3-�\M����9���\#��cM��C��< �٩pAP
U��;�AE������!j����1����az��
k����"�a�GYs�f���'P
�(B�d-lqa
# �Kc�L��k��{
+����y�\��-	�i"w3�X�.J�^=����h"o'��SZ�	x��������a��
+����k�8ɖ�����_�L���=�zߘ�&����
��y����!�1�7���E�Gk���B,�*hc��H���Q�>�a|�w����X%��
5m���͛��)Ǯ
+endstream
+endobj
+696 0 obj <<
+/Type /Page
+/Contents 697 0 R
+/Resources 695 0 R
+/MediaBox [0 0 612 792]
+/Parent 708 0 R
+/Annots [ 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R ]
+>> endobj
+685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [480.436 357.114 487.41 365.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Bro:87) >>
+>> endobj
+686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [490.915 357.114 497.889 365.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrSa:90) >>
+>> endobj
+687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [501.394 357.114 508.368 365.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DES:82) >>
+>> endobj
+688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [511.874 357.114 523.829 365.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DeSc:96) >>
+>> endobj
+689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [85.403 345.159 97.359 353.572]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Kel:95) >>
+>> endobj
+698 0 obj <<
+/D [696 0 R /XYZ 86.4 726.045 null]
+>> endobj
+50 0 obj <<
+/D [696 0 R /XYZ 86.4 701.138 null]
+>> endobj
+699 0 obj <<
+/D [696 0 R /XYZ 244.063 492.65 null]
+>> endobj
+702 0 obj <<
+/D [696 0 R /XYZ 243.659 436.68 null]
+>> endobj
+703 0 obj <<
+/D [696 0 R /XYZ 86.4 370.11 null]
+>> endobj
+704 0 obj <<
+/D [696 0 R /XYZ 86.4 323.843 null]
+>> endobj
+705 0 obj <<
+/D [696 0 R /XYZ 86.4 301.801 null]
+>> endobj
+707 0 obj <<
+/D [696 0 R /XYZ 86.4 156.929 null]
+>> endobj
+695 0 obj <<
+/Font << /F38 453 0 R /F16 397 0 R /F8 409 0 R /F11 628 0 R /F36 408 0 R /F10 700 0 R /F14 627 0 R /F7 701 0 R /F13 706 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+716 0 obj <<
+/Length 3013      
+/Filter /FlateDecode
+>>
+stream
+x��Z[�۶~�_�G�
��-i��Ի����=}p�@I�Ě"e��z��;�)�֗����mf0�o����L�n���]=���Y"�P����,��E:��fw��;O��B�*4ޫ��e���Wi1_����X�M��j�Ak����Ջ���W
+v�3���؄�����{9[��˙~��i�~f�Dhh��W����N�\*�p���1�0QBE!3�o�"b�[��&v�P
�4w��k!
�u^g���MU�>ױ���5P"�
����`���5�Ӓ���Y]�F��?�>c:���U����H�g���t5ב���v�|�<w=�l/�IЋ�&�s:��yw�x���u�f*˲j��}7y�c�5L����R�����`�-��N�\��!��l�����X�(=W�&]Q����.������?�5:�!QH�/�~��;+�j��6���
+�
K��G��Vj:�=qm���l���k
XSY�.
�=#���x@��A��Rq,��g�����%��"��޹șܻR�CRF�������c&:UR۹/�����U��
t�{%_8_��yr���e|��y��`��$/$G1R��B���I5��w�Vh��J`�M\K0Y%L�ϋ��eF�+��+��}YT�
����lڴ[�6T6u��uᲱmD
��R��l��H��p#�	�� }0
B/�R�s�Dy��
+?YɶkB�����6<mp&�#7C���B�
.@AU��\N}%L�t��_pQ Tl��p#6&!n��O��4����k_c�A�5�D�4h� A�*�9�{�E��7/��0��-�H�E��{��Wy����qݛ
2�{��٤�;k�d�́��ؿ��Z
[�
�����
l�n����W�r3��;�O�
bG�&�Q����itr�O�ݠ�V��G�ސ���>A+_b�n3V���^��4���v�Z6mft��Q����M���U��f�\mϘi
 J;jE�R�S+��jE��|����6]�t�*���?�mJ&���:w<��pE�YX2� M�u�C�K��A�|�ٵdw�ٝ�"N���X��"9(�'
+��wG������
+��t�Ӳ�X5d���yl�2^���6��7<\;
������ַ�Hd�I�����,�yi/1�j�����8hy�����{o��Ѵ�������U��7�-��e��U[<��#p���t,Z��
p��B�<�ye���: ��f�me�9Jf2i���^��j���ܴ��O�&�ᷬj���{������\�{F�Mf7]r"/<�|��@6I��cH�pݾ�T]@�F�0�f���|���0&�
c8��FDڌ͊��ø�lw��m������d�TQRf��whN����B�b����ˮ�xʭ���a�?a@�sj�3�������k؇��A����-�rY����H��nN2���wOΦ����tʃ]��앷Te3�<���Ǻ�8S����C���	}��;�%r�'H
�C
�Z�h�6:6���5������k�7vn�2?̳ A��q4=
�
+��'�m��n(��	�{D��3w���D��O%�s��9�1����Q�x����|���
�n��c�HR�Ed�w��y�9���n�}�m���k�q�U��	M�"��&����hT'ҫ!���4�k��C���'d�xl��%\��u$�E$������wL]�M6Y;��d;i�e%u9���	�ʲ+Ⱥ�w2���
�q�"A�HQđ����"	���4�	�`�j�Q$�v?7��Bþ�	�'5:	�������7�G0���]�A
tSmL�b����E,j�ƃ'G�5���0�L` �*p�3
+��2�1N�WB�
3A؇�Ҍ �q
k�/{
�YU���ʅ�j4��k�V�NN�\l0S�oq at D70�f|
+���Ͷ�R��i	�����
��m�@@
I�Ae�5
�4�_
��0���(��h�mV����ֻ�d%�'
^���X@"닖/zj�,;���@p��Z}Y]�p�w8,r/!�r��>�c����x���8�y"L"do��B�eu�E Q����h��q�!D������
���L�`�w(��s�/�G�ا��B��	^7λ�hT�ԣhh�>`
�V�X�
cxmQn����B��(k�4\�"�
~�i��+"�d��
z,�VU��]:v{ ���=j�40MW�6��-[a�]�
+�����v�N+��.��[]��/�ke8��VG[s��>�+�Ke���"�K^���p
(wϲuE
�um�/
�^���-)��<���ӂ�T���	����
�I��g&l���,3͕�$W�d���9��~� 
+4ì�񬄇|>*��R$����٭"��L���`Z��4Ï5������_Ϻ~�.n���6�ݙ�H6��6��
�%+�+T��?�N
�8PO=��G�y��y�[HMA?��'��9+�5���
�	�K1$��
=%m���9��^8r�'
Yv�T��_�y�0��<�� ��^( �Pd
䫡x�a��Tz��/
-�oevR�ﻩ�Oxp}Z�mQ-�{� щl.�-��mW���>��� ڹ��h�O�T�gE*�?�T9+a����
�s��	�
�u������3l�E��M��	X?�3�~C,gd��9Ց 	����$N���/��� �zl��+�h����
+&�I,.�F�/M�(N�Νw ��
+�u���2e'"��֊q0}���^�z�yc_�M��jt��hؐ���9��@��ѡ8�4�_�kwur�:ۤǢ�l�����쾿��"
��Rf=�ӝ��7
��׾���K#$�$8��N(����.��#O����@/Ù�l-Fq��]B�����U"���V� �;��
���Y �@�}<��<���)�sA�e�@*v�B���{P
��,	"k�آ� ���N���
0�ı9���L~�cZ�q;
�̞����
�h%��{~ʦ�,u���;2
+�c:(4�}|Q�_���:G\

+endstream
+endobj
+715 0 obj <<
+/Type /Page
+/Contents 716 0 R
+/Resources 714 0 R
+/MediaBox [0 0 612 792]
+/Parent 708 0 R
+/Annots [ 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 713 0 R ]
+>> endobj
+690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [437.405 653.195 444.378 661.608]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [448.793 653.195 455.767 661.608]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [305.895 641.24 317.851 649.652]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [322.621 641.24 329.595 649.652]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [334.365 641.24 341.339 649.652]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.659 443.147 472.121 455.739]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.1) >>
+>> endobj
+717 0 obj <<
+/D [715 0 R /XYZ 86.4 726.045 null]
+>> endobj
+718 0 obj <<
+/D [715 0 R /XYZ 86.4 319.535 null]
+>> endobj
+721 0 obj <<
+/D [715 0 R /XYZ 101.643 62.603 null]
+>> endobj
+714 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F8 409 0 R /F16 397 0 R /F7 701 0 R /F11 628 0 R /F13 706 0 R /F10 700 0 R /F9 719 0 R /F48 539 0 R /F19 720 0 R /F18 722 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+729 0 obj <<
+/Length 4414      
+/Filter /FlateDecode
+>>
+stream
+x��<˒䶑����-;<E��9x�
�v�j
>�:���ݔ���R���7	�
��ь��.�L�D�3���i�������w�'ԪH
�����*g2eR�4/R%���v�]��������������ʨTT��V���w�g�-<�f���0�
�_IQ�
F�շw�s��]�Χ
+�2�h�o7�n�p�߿33�l�f!���F$����<)�ۮ�{���\�`S�n�>�o��ݳd}�fɦm�0���m�-=n�V�ʎ.���P��7�	�c�%O���Y\~���ݝb,DZh��ݮ��&yq�
 �MW?�fiA�s���r3��}����3��Zs�R�X3�yN�?�o�	 �
7�O�&�̓��
+�&�������O�~��X��ʽ�s��,I�גɻ{#?�]�n ��|-=�M���}�}C�����T~����s����a�ѣ���X��l؂Mfd���V
+C�t)��RY8�����)ϊ�
�-X�>#�l�%eW�`[�Omc�Wծ�W
Rn���E��]>;u��/���@�����=|9Dv˕H��b��l0�֬"@��Tg2��9����|���m
��v �nB�t���ٞ���ew��T��X�r�2�=5�p��K��<WMd,��\
O�s��wgr5�]��]�;���VI?��(o�R[���
+����|w��J�
��U_�GvE-�"r�����ċ8��t��*hƱJ��XP���O�h0�4�5X�J9�ibD��qF�#ڍ��*�o͘/�0
�����t�d:\�i�bK�p�"^
 �%]z^L�d1��Ƌ�3�K!�3�B ?W��T��co��
�UE�c_-^~l��#�d����i����_9��9�2�
+N��|8[c��0�S���D9p�֑c������G�8ܤ��*�Y��aN��0���F��̙Z"���j�V����Q��
+��"K�H\��ow�,�2vV{����=J�k��];�����
u��8J}�I�9�V\?�P.�� >�[3 ��Ǔdk–��1�g��`ӧDf��
��G�s�=99�>g`mԯ��L�?Y��Y�����4�
xM7Y\$rd缀`=p[����
~�z͹��
+����q�J=���,�)3F�����!*/
�;9s���!��`�a0��#_)���g&�.fѩ�&_��:B?�[���
sKy�֛��7t���dK�\�"_8��j��ǡ�<�W�uR7��s�oW6	�5��-��
����qW�<ܰq�
������=X�� 0�'�0h���ɶz,����n�eL��7
+���O�v���N�cy�$�ɇz���DV|Snڇ�tm���9�}��U�L��,W���]���
��T����"Vf�fK�]��8?G�W�ĢA�
h��T��BZ|�k��~q"
�e�S|�x5q�rO�����B���c�\m��1t�,�KG�*6��� �
+�XT[d �^f�|UTeKn!�ފͥ�G�$:08t��u{��#�N�%}�&�l&����������.��d�)r���-h�d�
q�
��ɮ��rz;#ݖIMi.
��~ �s��^Ĕ��c�W��ۮ �TW����Q
�#;>�YPU�\���^b��RS��$�MY��y��
6�<-����#r��@�P|uA'7P17���Z�KG�f
JϬr�ߒ�?YA�[#���i�"�$���P�C�A�+ްx��m�y��Xޡ�ԁ�!����
i���<6�%��A� e�����
9j���
6��|4�
+Y��O
1
��X��[�����{���>@]1[��3�x	��aW�����T)p0�EBo���������٣��(=V�t2���0�k�HU6�O�$rk�|���
{��x��4�g�R8>!���=�R����s�j<iMNe�:��C�j�g
#c�`�OC���ԹO����v�퇪n����-��M1$% Z5�xC����c���}O�A�Ao��&��n���I PjtqM��b$S��N�i��	�̲��z�w�"yB�/��q���Z
�Dž
��m�骲w�u4�8e�Ἃ���{��B�'\������HA���ix��eO�(��9�{��.�uS�q��>�K��,���`kC*-+4!Vxϵ@�Ϊb�@�e�շפ�h�0B4!W��Ӊ@z�P��7%�
�D5z�H��s4f薻��+�w���y9, �;�+g��J�H�'	p"(�?��zT•&'�=/
�
`|�@�|̠9�E!�A$&���j�L��NJ���B���Ci%�GP�VC� [...]
++����#!�8c�A�sQ\��� J�A�z$���d���/���:�W�GK3}%�d(���tDs�23w�E��$G�o=����Ō�@1�s��W���VKې-����Z��
+5-Μ��<��KB(��0r� ��<T����*���y���	��((��՚�+���uL�y4�9kA����hfRL�����O'#�����w���t\�pϠ��\�Ƀ)u�� �Hז�3V�Oȱ0��
qY3�Ȍ�tM^87q�G�jF���^s��V0�2|��"�0��ֳy0��P�O;�$�Oh1����qO�����;����OG�
1�i=ý�`���V2����Z
3h-�
��Xc���F\k,�|-�=6��P��}�v�h��
s�؊Q��Kb���G�֌Ʀ]��*�vQ\_T
+^���r�O��%;���ꟶl�X��K��
%��kñ[=�ͯb�)W��EXr>�U��0N�8B��|��8�7h��U�)����V+��]]6N��� ��u�'�l^��#]����8˝X�kF�N� �f�Lj�+�Ǥ���2Du�����"�.�Ɖ
+[�ɟ���yAmY;���T8><�?�&� �i��u��
X���6�2|��ƫJ҇�G_YD���Su.V�����:[��5͢����I�T0�&k��yO

��V��f�c���X:�2�\�X���9���p>n.@���U���%H�M�Q�2	�����9�Zq����
=�$��yj¶��aE��<7�
"
�=��.�����#IT�~8_ ��$��e��\�+�hy��xA1��y�{0s��7j�@��@�;�
�Z���{�f��?R"��>p M�st��8"�63DB�"��y���.�wS��fΞX�
+�6���D��|�T���=�9�ШG���±:���C����y�����p�
�u*l���
�)�eI���������d���K��g@�b.����޷��d�vic���m��6ɣO�}����5��6I_��޴��@��#�8e�
�pU�+�Z[k����k��U0��_oآ��F|��k) "g���q�P0����w�s���U��TtvQE_n�ӗ>�@�1uע�ܭ�6��4R� ����"Y��B-9�^?Gϟ��Y*ӥ~əKD8�mմC�ONWD�AxM�P8azCM_1��
k�m�Q[�T���_���A }���C�����7��QfQV{g�r׆�o} ������o'�U�r��+�t�c��`_W}�uҬ}�d�O�p- q�8��S
���ppI"�x� uy�����-={�^����j{���{�!5?hj~�mh������+M�i��ү���U��l����W^v�f�x˪�H��
���=����U�&�;�%F
3
��b
A�<��w��xv����"�
+�P�+�
���ynM�������/7���
��؅VYv��1�����=CoKB�9�G���P������y��
�p��y�-Y�`C��
+��ǁ���G���aS�8�:e�
�Oe�tc�|�{c+']F��\ �Ĉ�?N3�:5�̍R<�SL��ocdS�����u`԰�Z��4op���E�C��%���H����s�8B
�zpfle��E�B{l�-�"P1)5SL��V�,�a�ULRLwG��aߙ��] 8K�A�O
p�B]�����ˁO
7�/�pL�,�ӧ�l��ӵN�َ
�Č�b���>�\�O(2}�;�^�~��:�i(y���%h�ŤJqYI�@�I����R���r	� �J��b��x��u�[=�T����S�*�Nz
+�M-
��=��W�T1�S���)U�(�B$o�@f����15�25�p͞2�\���-�Q���N��s'��
�����X�vM��q�� ���`،�[������
(R!���s �x桯s�ړ����	���f�垐Ѧ�4��l2=�����:��NaCj����p�gO��~p���{PrO'��6�������
:Xi���B���;զ�#8
�îJ���������R�
+endstream
+endobj
+728 0 obj <<
+/Type /Page
+/Contents 729 0 R
+/Resources 727 0 R
+/MediaBox [0 0 612 792]
+/Parent 708 0 R
+/Annots [ 723 0 R 724 0 R 725 0 R 726 0 R ]
+>> endobj
+723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [328.714 547.384 343.436 559.339]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.885 547.384 386.608 559.339]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [368.696 446.296 380.652 454.709]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DeSc:96) >>
+>> endobj
+726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [287.037 222.156 298.992 230.568]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DeSc:96) >>
+>> endobj
+730 0 obj <<
+/D [728 0 R /XYZ 86.4 726.045 null]
+>> endobj
+731 0 obj <<
+/D [728 0 R /XYZ 86.4 682.804 null]
+>> endobj
+732 0 obj <<
+/D [728 0 R /XYZ 107.354 605.851 null]
+>> endobj
+733 0 obj <<
+/D [728 0 R /XYZ 86.4 517.086 null]
+>> endobj
+734 0 obj <<
+/D [728 0 R /XYZ 86.4 189.367 null]
+>> endobj
+727 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F10 700 0 R /F14 627 0 R /F9 719 0 R /F7 701 0 R /F13 706 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+741 0 obj <<
+/Length 3553      
+/Filter /FlateDecode
+>>
+stream
+x��[Y��~�_!��Sف�� iǩr
ەM9�x7��\�3C�$�$����ӍH����
q^F�A��wऋ�E����/�>�V�E�
+-����"�L-�(��|�r��)���F�\������6e_/�����e�u���U�B<]�����7/�~��z��~���J/����~I+y�H�,�Ń��Y(Y0O�ŋ�_����g�h��ժ��=EK�����I[��k)�ޒ�ٷy�L���9���U^$%��ʾO�f��?�5xH�1L�
ֲ����]�>�J*����CN&U��{�'0�m�ۭ�������~�m�۾\���0�#��C��r}�����gLh�w޻)�B���
�d̤r!�掗ud
��\-n�Y9<$OY�n�ԝh���\+�Yل�?�%��%DR:�? ��Vn�ZZh8(gE��keٞ
�J~�)��)T��n�ϩ�.�<�_a䇡L]�bn�����"ā�g��
��	mJ�	muG,Ak��D3c�,(aA���{Zk�l�\�mEvF�`��[Z��nA�r���F�<��.�H�v�%���7I�ڴ4�m&�äMI~�*�P�y�
+���LOӤ��������ʁ �=���D�8�����A �zM[��j��hî�vԻ��w�}Gݵ��i!�PW�8��ݾuo��eO��Y� !��=D��Ŕ=V�t����u�W+V���
绗��)W ׏׹J��&Ojt�:�!��V���꡷
����8Yр;����C��
*`Ҧ|[oP��k�l�
�.x"v���d�C��f{�2�ւ��@x^�m�t(��0���Tw�H�����u�����oWx�,?ⲤH�.} ��g �9
�)�j'n5+gD�`N�����O��4K_�N��tvK
�Fp
+
++Dž��P�T�L�/_� �VxRzQHI!

'����Lg�ـ� M���*ȫ�>��4ۺo��"̑�-=|�. at z��֊�@������wsΥB?�WV[9dA��I������
���Q����� r�fZ��A�M,i��֐�-�wx�f�Ʋ���U"Y�
+e����֑�@�d=�p0؁��j_�=�*�n���)����&8\4�7N��oy��~�a��3Wւ�e>��\6��rK-Ȟ��m,����|>	�D
�R���޵
����
�mIl�s
Ht!�
�6�A ƀ
�Z^��:��(.T���-��w�X��>�m��N�8����
���jC�Aز���=�ەw�F�]�L��d�*��pmhkR�wl�1�H���}���	��$���a��n��P^�C�3D�/1H�$��C�C��-�l����
zve׍�I'`�K7�<�N�e�› ��29e̔2L#���g��,4��8oŊ|`÷��7�|t�Y
 ����Y����QߟA���`���G���%i�H�n�Y
IJB3X&���
~r2�G�XX���	�E�|c9p������VgOc�&�Q��e�V����Y��/��P��b����EǪՊ<���^L�"d�8�:���y`2׶e��?d�؈�N
�R��3�j��5&)�٨u;�)x����Z&/�+
�p�}�+��F��I�����uG�8��3�wW��R.��j�'a��*#�r��֠@B�
�yS;�ON�3�-iV
5t�(3��=L�$"G�D�'	��� ���`��fbxZ��q��*ߢ�H#
���ϩn������ǯc���ǘZq�� ¾ ��&��QLYR�=�����
�C/���#�3�"�F8f�z�j����x��6�ւ�2�����
H�且��	�aUa���	8��(<�q�VK~�SkV�|T�HX����ӑI�{dzwg��$�E�).r��_()����
��E
8�ſ'E�L�OC�U�wz��Ba�М�Zh.�qU��	�����0�a��3�)�D�ہ�R~���
+,�v���\p�ݰ��-H)+�����#�
+����
�R2��+|F�F�/
A���<ۖ�(n)@1���c���
�D
�@�2/�h����)3Y6�p���{*�-���]ٖP�W���A�yZ�����Y1���15
�6zK�F�|��Wk*��Oe�j��"Z�"���Z����%)����-D��e
+L��
�q���u�>0Y5;Ȫ�-�k���Q�
�������Sc(�m
tv��~f�As��9[˃�L�U���[-���m�^�|�s������:�#&�bW��iđ
|�2�6�(�G��8��`��l*Ǚ%�E��d
�O���!1:�襊zj��NUw߬W �4Ǽ�R !!�����Dǟ}���
5\����%!��蠇7xaZ��`�0�!�C����|
+!r9@�\Y,
+����ޖKw�2`�\ͰC
�C�*y�+
����k��;�qȵ�
Q�r���]�[�
+q��d]���h����b��@�
�LhS�Ӊ���
�F�G���	-4e��mKħ���|��}=�ڌ�
����C����Z��tH�4*ꏌ��<2Xu�*$�L肫������=Вܶ�]�
���Qݡ;Pws�|�=����%	��U&�3E Ù] ��v���G����`FT,��3��ቋ
tC��o�B7�‘� <��r�z��dSL�-�;�d���VU܍����*���)sbvm��
Ǽ?����}\;S�$5��'qc�L�R:OH~0�	8��{�i���˞�8>��)�+#Ƞ
+���(�'a�O���f΄�	�y��P�
U��ۇK���$�ѭ�{����[$
�S��s遠ދ��� I�)
+I�S���d
���"��^#�7��f����ln?�x�y���`��2�l�~,��8��
m��M"ܷc�M�t���4��<B��
�v���
F ^
L5�s��w����:Z^����yu���
���]�	�1
��� Ng&k�Ji��	�	��
`͡�ᑼ}��C����)�����b_?�����g(~� m;���ݳ`�k���
+��&��;r��1 at 5���J��,��e��l�f��)�G���'�;]SL� �
�R�L`7����"�81���&��R)/
��d�
m�˳Al8;��1L�Քb���D,�J����4��|}�~o��ꄙ�AG!��N��NV�L�sN�R�T�G���
_M��&d ���hB2�%L���`�
\&��r�k��sy�P��.u#�+2�Sl���j���h���Z��ǘ^�����h#�edl3~�_z���?N0͇���3zЙb�
+��U�V���;"x�2c���>�.�|�nDibW0!�&
A ��V�&���
��cj�
�ޞ׿�h��w_�v
K�*
󟺳"ծ��]�RM��	�'��/@�e�tQy�i���
+�(
�X���Sv}c��&�oD����<�0������6
+���vm�kk��&��jy[���v�!�֕��vٴ�5j���w
����,,c��s�D��
�
�� {o�ۦ��Y�U���Zܒf:b~�L������TL3����
ˌ7n
+endstream
+endobj
+740 0 obj <<
+/Type /Page
+/Contents 741 0 R
+/Resources 739 0 R
+/MediaBox [0 0 612 792]
+/Parent 708 0 R
+/Annots [ 737 0 R 738 0 R ]
+>> endobj
+737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [324.413 283.707 336.368 292.12]
+/Subtype /Link
+/A << /S /GoTo /D (cite.EiWa:96) >>
+>> endobj
+738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [416.597 52.142 428.552 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (cite.EiWa:96) >>
+>> endobj
+742 0 obj <<
+/D [740 0 R /XYZ 86.4 726.045 null]
+>> endobj
+743 0 obj <<
+/D [740 0 R /XYZ 86.4 684.741 null]
+>> endobj
+744 0 obj <<
+/D [740 0 R /XYZ 86.4 579.245 null]
+>> endobj
+745 0 obj <<
+/D [740 0 R /XYZ 229.481 478.874 null]
+>> endobj
+747 0 obj <<
+/D [740 0 R /XYZ 268.712 443.108 null]
+>> endobj
+748 0 obj <<
+/D [740 0 R /XYZ 86.4 330.587 null]
+>> endobj
+739 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F10 700 0 R /F14 627 0 R /F48 539 0 R /F9 719 0 R /F1 746 0 R /F7 701 0 R /F13 706 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+756 0 obj <<
+/Length 3803      
+/Filter /FlateDecode
+>>
+stream
+x��[K��6�ϯ�m9��� ����a��)W6�T��ęa"Q�Hy���h�)H�'�ڪ�����F����������7W_?��̥.���z��J��3#\�I>�Z��$\^��zu�����
?d3>�Y���N��f��ś�l��/�f,����|��LI�
+�[�~���;:��/s<�&�Q�+c\��Z�sie�~�iʢ��"i�J^�ͻ2��{���6��c��/�<i�MU��_?����l�-HI��Z6��s�on
�Qɲ��&�_���*����y���L�Es���dY?���ً�[��$����I�������UY�C\B�Ot�S�}]���n�oʪn�[2��c9Gx�y�&��y�{wlлՇVǯ�աMCZ�$o�[��yi�Q����^Εd�ˊPK��ʛ�$w�"�Il��]�&�
t��W�n�� ��r>�`�L�91�
�Z�H�W�!�e�3�bCp:+g��\R���Cwq��j6�z����
-S�
0�o�<2�I�
y8�L%7�c�EF��5�
lؑI
t���ߵ
~cRF�`K	Γ*|��HO ,,�A�"ҕ��2R>bn�h�<��A�,e���3vD��t6ԉ�Щa�X�N�4S݌<;2%��
unN :�ќ<=�C�w��b"�Z���*��a-�~�paJ)��Z�5F�!"�I�}<L�6�_�Ts7��wA����_T��YDX�
+=Y�:�_.4ϲ�D�"^
+S�y6���Zm��0
+&A�2.R��DB5��^O	�'ґ�]WL����ؼ�[g�Ĭ�A�aW,L��̴��,�"�c��b��ef�8&&�Ձ�ll��P���9�?c!F�.r�h0C����
+bف��9��@��Rm�Xّ�s�5dR8��/.G���`�Xҩ�
+6���wZ�^z̤)��Ͳ�j��i�>�5}���na���΃�� T���bK��J���u��pm��åΒ|��	�yY6ױ	f�z�DZ�t�M6U�����-=-6��:%:(�.P���է~�?c�v�h��
�&��,k!����,�V�CT6
�ŝ
@��D�:^o�ᩬ�z�r[!:l:�������<���w���T���|u���^��LrG0{؍��5v �,��0jl�#s�j�N84����i��=����&\�\�
��]�lna25S!���m��쓼��#y�dY�
+�X�r����C@�8�ח/m�5��|����6I���_@!PlW���>���}Nv
gƆE�>��4
���w���^�^	5�ºԲ.H����ZD� .�U��ki"ǯ�P��E"�jӄ��6o��#�w�c
�P���fæ�fE���~���']F
+���i���"Y���P�vs�n^�}[��Sg}��Ulx*6�ZVar���lj`\�\�b9']�]��
+#�@OK
,��Jʆ>��
_��t3.�h����]��E-��e[Y
�t�2�*��(+�ud�1TN�\f��
O��N�������'X�����?�O��N�����I�`�ِp���DzQӵ*���:�T^k
%|�_�ʏsr�E��4D�����(ԝs�
j�^]�]�Ƃ@��A�0R'/��j�/ϝ���H�T�U�����S�fh��{�G��2
Hy�=�_7u�ԷA}��'/�g��v
`
Z�>~���@A��TAy8�߈}n
��6;0~4G�!Tz at U}Pǝ�?D�,��z��$�L��͛#@��=�h�� G
,�#
/����1��G�����\0�8�B�t����~w
�#6��9!=�#1\�Ҵ!� ���vaEїCJͷ�p�P�5H3N	?�Z���JvwJڟ^\��"��#���O��
P8��6������j��D�"_�;�l�	�
>�ߔ���?�'�2;7t�_�u�?A�� �I8��m���
�����-�iO2�D_XXu����0�y�AM*Nif!�tV�d.Z���bjJ�h
H���XU}(w�@ڢ����J@}�QJ��΃�A�9��>δq� �B!��
+|пk>����
�iOe�8�T�@��T��M�BRH�$[���de�CIM8$e�L	>`�?��$g�=�!�
H�|1��u�w��P
��ra��.o�#�
�$��ܓ<�y�Vb�c�xGr
%d�QFPH���t���F��J@�QmU�+�X���q�r1:��g�Ą ����
��q
+M��C6�GB �9]Fx
�}��k�#�\�:�7$���nA){|e;)����1�MxB�Q�fnP��C_/�1c������m�ڐ�
ׄT���mQ��ʄװ�f},��u�F	
i�ū
+��4c�	�aӬO�y�{Yԋ]8�%�
�P�v���w%d�2���
��<��I��[�/��ݪ�H;.�=3�I[/.5�
~���9��a9���Z��Dk:�P�	I�\C{�q
K�0�hi�K_������ڍ�}P0[ 
p�71�
]uC�xl�
+eG
��F��=��9qܽıCq�b$c�����\��6��C���C��30���&��<E�9���&J�ah����#b�B.dv�
����p9F����D
�"�Bݏ����fɷ�a8�	�5`H$�JAn^{n��a��
���\Y ����k���f��T7�7�?�
+7K&�b�	$GA?dXf�9�/
�-�"�Rm�+� �L%���IGV�k
���wU�oz�P�@Jr����U�*
�
�	����.D.>/?#���d̦�π��3�32-�6|߅�AMt0�}����=�&pЯ뙴o7�Zn���+�:F��%#/��!�($�>t
�
մ,<�=�tlݹ�$�f��;z<�L�\C���h�5�=��fu�;�,�\�
!γ�EU�ՖM�a
�����E���z�uU�9����/1�w�T��o���°('��3�������6rő���{�4��
+1Vw-��e��b�}{���r3�#����	����s'pd��{Bg5��Iy%: �U�b���2v��%"_���J� ��@#�h�֕�K�r<	&c"��lpf�ݱI��{Ou^T��=msr��0�7TAOb�y�ϫ��Xb�C�Տvm<8����c�2���DA���� ��M�#'D�j�^{��T7�M�'Ġ�@� ���>, �ajͲQʑ�r����=X�G�Fɻ-<������e (��݈M�v`E����͓���t��;j~s n� QA4�unG'��)S�m
+�9
),-�
h�V��|�0~^��Y7�"����U3�a���!�?Z��}�6�������a=:D&x.A@18"d�7;�"<C�Y~�
h�;�J��.��(��{�x�	L�6�
��]L���|�
+����
+`r
4=�& Ve�&������@�=8xaO>
D���}���z�T4ia�i:t��>��B!9<��m�E�O��hdv���
+�?F�
6=��Ct)�^{O�W����Mw������+���f�B���

:����"d��ug{ 
?��t����/�W=�$&��9o���|�*ŧ
��9Z�蓋�[d���"�
'�,

�j��D��!��
-="�:�P����;X���~���e����#�

���l���wdF�D_��k<94����
�����hnۤ��>I^I{+���9�(�0W�W��wը~�jT�ը�⢬�F�0Ң

��\��:9;�I3
��A�8!���P�
����18���ʔ#��*�BD����ư�Ӈ>; >T��ۯ�~u�?�
��
+endstream
+endobj
+755 0 obj <<
+/Type /Page
+/Contents 756 0 R
+/Resources 754 0 R
+/MediaBox [0 0 612 792]
+/Parent 708 0 R
+/Annots [ 750 0 R 751 0 R 752 0 R ]
+>> endobj
+750 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [312.626 456.78 327.349 468.735]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.1) >>
+>> endobj
+751 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [111.722 447.316 118.695 455.729]
+/Subtype /Link
+/A << /S /GoTo /D (cite.BrSa:90) >>
+>> endobj
+752 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [316.471 356.043 323.445 364.456]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Bro:87) >>
+>> endobj
+757 0 obj <<
+/D [755 0 R /XYZ 86.4 726.045 null]
+>> endobj
+758 0 obj <<
+/D [755 0 R /XYZ 86.4 682.804 null]
+>> endobj
+759 0 obj <<
+/D [755 0 R /XYZ 234.092 650.962 null]
+>> endobj
+735 0 obj <<
+/D [755 0 R /XYZ 243.506 615.572 null]
+>> endobj
+760 0 obj <<
+/D [755 0 R /XYZ 237.264 490.099 null]
+>> endobj
+736 0 obj <<
+/D [755 0 R /XYZ 221.783 440.695 null]
+>> endobj
+761 0 obj <<
+/D [755 0 R /XYZ 86.4 324.725 null]
+>> endobj
+762 0 obj <<
+/D [755 0 R /XYZ 86.4 300.64 null]
+>> endobj
+763 0 obj <<
+/D [755 0 R /XYZ 86.4 280.752 null]
+>> endobj
+764 0 obj <<
+/D [755 0 R /XYZ 86.4 125.292 null]
+>> endobj
+765 0 obj <<
+/D [755 0 R /XYZ 86.4 105.404 null]
+>> endobj
+754 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F11 628 0 R /F10 700 0 R /F14 627 0 R /F1 746 0 R /F48 539 0 R /F49 566 0 R /F16 397 0 R /F7 701 0 R /F13 706 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+772 0 obj <<
+/Length 3277      
+/Filter /FlateDecode
+>>
+stream
+x��[[�۶~�_��r'B�Щ�$���z�xg��䁖�Z�%q#RY����  EP�H��q:}"	������V�x���߮/����,%i’���L'D�KI���z9�9��r�4MD���7Y],���k
}Sn�b��
�.�~}����oz�g��M-��bs���l	5�g1ᩞݛv���)a𶞽���"�R���%)%T%�����������,!:Ћi�w-�YBR�5��D�|6�D�Ҷ��V���X�:m�
+'
G��Ш��0�x�?I��-t�Ҩ���9�v�4���t_z���?'�w���r.AB�.��bk{ͳ�%��a\+��R3%����ni߫:�s�����n_�K[
+?�γ�-
Q?� c!�P��d�d� '5�T:봁A�\��nW��F��"�%�h��m~o_��s�P*z���
"ql���v]l�lg?w9h��(>|����W�p�u[�g����Q��g�UP����z�=�y
"%slrj�m��*������w�c�[�[�$V��,Ց�pn
�M�%Α��MYەm]�5�2�J�F����p�􌓄:�DZm��V���I���y��7!�Ӗ�_b:�D+9b��(
�
+ΞP��>CtZ(p
��A�2�׍p�Nca2�B�q��x���t�9
D;��Ucԥ읱������ֿ8��܋m���
+���� �f x�[��ai����
��n���6�*���7�}m�ӧ�����n�����PD�UO�]Nј(ɚ���@��B�+��M�uf�J��J��Mm�����A�!���g��b[��c
+9�K�*
+R���H�
�J�����w���!�y�0I8G��9BIf?����/�wV1�
�m���m\{�O���^J�Jk�;�zS��f<�w���*wDݹ?�f�-p�h���ǧ�M�bS����,?}U,vu6��_�e��.Ũ��5���[H�*�`{�^,�u�rG€_)8
�h�6��!�»����X�4:�+4����
|�-1�/���GU����������!6wC�+.��_*0��'��||1��t���b_���3DD�d<Bv��
M��-����>���׎��o�ԭ��Ъ�����t�(�����(��8��桠
������z���2�8)(v��+G��h�-��d?P���U��/CA0%T�Qe� 8I�!�X�9TI�x`�
V$$�(2J�m���N�[ ��&�}���2
urA�ͻ:mLJ�3VI�J��+��3G�
�5&I|j!��m,}es�Ф�Rێ�
+Nh,�L5��� �NE/_�
�kB�����{-��w�X�/��g�!J���ٱ�N�7�ZL�&�]gY���(��6NX�6
�Z5�����37���� 4R٪�ʛ�O�Ƙk�`F���wgr
t��Vx�XBD��0�Xϑ"��V{<�s�;&�Q�Иޢ��d`e-ʜB�F"ЕqB1��b���?��B@�)f
ȡ�I�#��<����y���t��V$=��Z�=��!9�b+:�S��xh�f��O���Ī�r��޳,��
]Ħ	 EC&
+KY���a����!
�6�����|\��
(��Eo�-C&�	���԰YIR�|$�
�?A���P�/F�}�gsH3��9*&���LJ��Γ��`���@b+E:qB���G3=�8��T��鞟�0��.x��ǁ��*�Ft�
�b�&�!�
/�
8��8��i�~ �҉aJ�r�k=�)>aJ�A��K������ˆ��oT����m��.S`1 �.����\���C��v~ �4�5�G�<��)?Ѵ5�WAKc�		
S���+?��|����$!���P�`���$Mg�����E��Ro��;R'ާR5I��@V����
+�?��0��+��|u;M�
�'����}j�v�����!7<�����8M at M

�[��Cvz���mD�1�����oR��9@��N����k��-�W,I
7����.B�4Z�~��/_�G���m�A΃8� ����h������J
h��0���e�.����;�\�YUϫ����4!ջ��:߸�i���N˔��D������p�0
����̡���G�[�5K��b"Q6	���֫rWԷ��V\�_'�#�0"�#��È�㢧�&>QL�şFT#(��߅i�ipD9G�
QO�
�!�*
.�䃖jADQ

3X��|"&�
Vt�:�*����`´
���	���)c�_F��k�h9�V�Rq�D��⼘3P�ik�/B�$�/*��d
�|��i	g �>�b�»xB,Y��2yf,YL������n�d��`�
�Dt*�|6 �h2�B�3�H�`Of���|<90H �y&|����,����

;:�|j`Z
]�<��*�A<�*
tϯ�s"�P��<*�aOi�3b�>��$JR!اAs哠����x�>��Ho�`�ꌍ
+5�勉
{���j�
�T�L��I��!y�
\����2e!�[��X
wOq<��+T�~�c
��l�X8��R��������r�Ml�I
�:�1
	�G�U'�q���<��ݗd'�c�Y�;��k-�f���c7
�}U����4�{�*�v����m�����=��[�� �e��'�y�-�rW��9n
Uf� ���HR���q���R��R)����PV	���`W2�d����9�@��
�G� �|�D�6�
�GN���7���9�.k�՘J�N‰��3(=L�MB;��YGOfF�ks
�nw��,qU�K"���
��ʼn9>ĩ���m]��93��7;��3�����M�_7K&����,��v_B���H��:uyzm�>�~�Q
�>r"��N�>�yh�q��j|rY��q”��#ou\�NL��6�*��1“����1���!��6�
��n��{Ժ�9����2�+��)Z��������j�*�L��O
��0���;�W�n���J��-Ǫe���-nc�MV���"
Xj��`Q{�ֻ�b��n��V�S�/�-	*��ڸ��h��YY�[[W�.���N���-�{�oJ�#H_�u�#\*Q�
~b�D�e:d�}�b|/�	���
�!G"��=�����t�ֿ�%�r��]l��ne�{�m�[������<7�j[��V��a��Ru���(�=މw�H$x%�kJs�BJ���𮙽�$��h���3��uo�\�v*nj3޹���
k�r�/�wS������y�^�
+endstream
+endobj
+771 0 obj <<
+/Type /Page
+/Contents 772 0 R
+/Resources 770 0 R
+/MediaBox [0 0 612 792]
+/Parent 708 0 R
+/Annots [ 753 0 R 766 0 R 767 0 R 768 0 R 769 0 R ]
+>> endobj
+753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [88.171 630.403 100.126 638.816]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Ortega-Rheinbolt00) >>
+>> endobj
+766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [500.918 582.903 507.892 591.316]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Anderson65) >>
+>> endobj
+767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [511.874 582.903 523.829 591.316]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Walker-Ni09) >>
+>> endobj
+768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [85.403 570.948 97.359 579.361]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Fang-Saad09) >>
+>> endobj
+769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [101.454 570.948 113.41 579.361]
+/Subtype /Link
+/A << /S /GoTo /D (cite.LWWY11) >>
+>> endobj
+773 0 obj <<
+/D [771 0 R /XYZ 86.4 726.045 null]
+>> endobj
+774 0 obj <<
+/D [771 0 R /XYZ 86.4 596.303 null]
+>> endobj
+775 0 obj <<
+/D [771 0 R /XYZ 86.4 558.289 null]
+>> endobj
+776 0 obj <<
+/D [771 0 R /XYZ 86.4 537.123 null]
+>> endobj
+777 0 obj <<
+/D [771 0 R /XYZ 86.4 514.85 null]
+>> endobj
+778 0 obj <<
+/D [771 0 R /XYZ 86.4 357.739 null]
+>> endobj
+779 0 obj <<
+/D [771 0 R /XYZ 86.4 336.572 null]
+>> endobj
+780 0 obj <<
+/D [771 0 R /XYZ 86.4 314.299 null]
+>> endobj
+781 0 obj <<
+/D [771 0 R /XYZ 86.4 133.145 null]
+>> endobj
+770 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F11 628 0 R /F10 700 0 R /F13 706 0 R /F7 701 0 R /F14 627 0 R /F16 397 0 R /F9 719 0 R /F1 746 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+789 0 obj <<
+/Length 730       
+/Filter /FlateDecode
+>>
+stream
+xڝUKs�0��+t�ӢH�4�%}�39tډoId�	p����X�C;����>}�Њ�
a�s�~\��&�Z
k���%�R�$�T
N69��Z=nn�O��G�a##�M%�5R���?2���0*�!�=�@��4������ǃ{>m9��S�Y��HF~��M����+4�d�+]�vZdx���cQ����):�x'��Z��i�D܀N<i�w�C�0w��Tv�G�-��x�CCv���E��\N���TI
�Z���i �	PRk|^z���„&vt?0�(5�
1����6�/&M�)TZ��!�B�3��Z	gTM&,��/�>�����gz>"ʢKx���+b,�e�"4m������b*�
�
B�bf���P�"�̳��r�*�T>��_�1�N
��xB�|޻�-�Y� 6K�,���̒�^����L@е�dI��E���5Q�
���ѕ鮮���k�_���i��,���}��n�E��9t\l®���{�f"!	�,-�;{yZ�����U�kk ���0sf7
��K�K� �G�fºr(�ED�]����>#�Tǂ��*�x���ݞR��-&

cۧ+��O�CKS�v��s��,��M�n`��rӛ�*�S��*RV�_�΍��LKߺ� >��~}m8�{��yu&c�f:�o��Z�B���U�C��V�[��˓��jO��z�b�<lJ���jD�e�r�?g�[4���c˺�
+endstream
+endobj
+788 0 obj <<
+/Type /Page
+/Contents 789 0 R
+/Resources 787 0 R
+/MediaBox [0 0 612 792]
+/Parent 792 0 R
+>> endobj
+790 0 obj <<
+/D [788 0 R /XYZ 86.4 726.045 null]
+>> endobj
+791 0 obj <<
+/D [788 0 R /XYZ 86.4 682.804 null]
+>> endobj
+787 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F14 627 0 R /F11 628 0 R /F10 700 0 R /F7 701 0 R /F9 719 0 R /F13 706 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+795 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+794 0 obj <<
+/Type /Page
+/Contents 795 0 R
+/Resources 793 0 R
+/MediaBox [0 0 612 792]
+/Parent 792 0 R
+>> endobj
+796 0 obj <<
+/D [794 0 R /XYZ 86.4 726.045 null]
+>> endobj
+793 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+806 0 obj <<
+/Length 2645      
+/Filter /FlateDecode
+>>
+stream
+x��YK��6�ϯБSe1ă Wv
��q��xrrR)����C��$����o7 I��]���`����V�ڮ���g�{��8���W<������j��X���T�.����ǝ�Lw�Y��?/�Ekd���5�j-�8g�-ha.�JCK�w[�T��P�MX�d,��nu��^�V�����i���w�޼x���iO��WE\(��&��9g����
^DWz_�w0Γ��"Z�֟�y
�����2]gJ�<�D�=
���
�q�28Ϟ����uʐL�4���M��U?�sF�%q�Y�N�,��g*l3y��'g
+b
��\� J�0���w7��,L�#I���#v߿�	��֢�b�+�W\����̾���RƲ�~�몁�/\%�e.ON��������h��뭹�t�����k��}8d,V2�*}��ŤZd���H�0�iP�Ѓ�����k�fћ���Yg�#�˲B�^�M����NũH�|�
�Yf*��Y�l�Ciz"|:Oȿ�Ľ��j.`�80�$
����a
g��O>O�2�V�9L�
l���q ���S5�������썮��7�'�0��
�<NA
g��t}�lAͅ�
�i����q�]I�-�S��i+��f�Ͱ́Pz-�y]�f��y�O�]�� 7��G�[d��~^��y����7�u�*��<s�
�
V�9j����j=��EAu$1����簫
Żi�j�;�㞔�8\Z�ڮ�=�9�Cm�->�^#�( :��tF�h_k^P
"��-�h��e��;C�*�W5:�$��GCGƝ�Nf�U���
Q��;l�^�;=���M�V6NX:0D�r

�&�CM�[���Z�@XOVl�al��o?��>��P6������蓤H]��{�u�"��ʱ�鵆 faI�:`#(E4��1�҇������s�>�RA��{f`<`�w�V�LR��֗�y��M9;ED��GWk
��l�w�M�{k��7�,d���`>rj^��
��ˎ���3���
9x���=���Uj��ʢ+�D���`
M$` ap�!�A�����|��|
�4��R���k������X������)��4n.�1-
s��`u
+�v�D���U��
+�Y���В^�z�Ϡʢ��^;����t��S���!�X����:9�ߢ�b䔲8��z٘�|��@�S+�)������չ*$�Q��c(ͽ񌡔��R��C�Y
c߀�C��P�sXĊ��� ��rʨ�L���P��	ñ��W�0)
4���A[I┩�����V`hm��o�����֬9
�������4�"O�B����i�8�"ۀ�
�>i?��KҭݯP
�c����3|���S��2=_L�d
N�ka�5�3wK��%���]�K�HB�4>�m0��2�jC~��a~��?t�O7]�����
��ݠ�7!_�o�����cU�Dt&��
O7��F���f��aIk3ȷ��6��x�s��d��9�ξ�]��7�>���ݣźU��Q�@,����^�rʩ�y�U�`��XU
)����w�,�w�fy
���ˁ�l����� G�\������͗����Cy�ٸ��
�a�P�P.� �2}�P���k�0����놊���f��KW!Z���L��M�i��fc�^wwGa��)�
zCU쬠Kg�B�L��@ž�<@Q����{.���z\(
+�n/	��;�qd��}N˕��ׂ5
U~�	��+o\�
S��ĩ�w[dgQ�v5q��A1��`
5	�b�����E\f��n�I������i�u�b�_�[hv���I�8�JM��� �~�8��sp�B�Om}�R����>���J��n,�|uk����1�%\��p�o��y��"�J��E9�c�}T�1�
�
y
�������DDi�Gh�vn* ���T���
R�k�bΪ�Z��K�^)��ط�`�h��
�����o������
��6i�4��q�7�r������}����/u�zܾ���U}�k*k
��p{w����O�ʣ�b»'&�](��iɪ4H�(u�%W*
?��(��
�R�{�L�b �N�Ú����ӵ
+�N&\
���t/��¡w�.�f���Ŵw'D2.��9�.dQ��Y0�`�ۘ#�؎�ߚ���+>:����M���K�$��s�8
(:�25�������I��\|��GiJ�P�R�G8�q���T؎���� [...]
=gP�?�-�sDZ�F������+m.
+endstream
+endobj
+805 0 obj <<
+/Type /Page
+/Contents 806 0 R
+/Resources 804 0 R
+/MediaBox [0 0 612 792]
+/Parent 792 0 R
+/Annots [ 797 0 R 800 0 R ]
+>> endobj
+797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.72 423.776 422.442 435.731]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.1) >>
+>> endobj
+800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.997 207.474 412.719 218.322]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3.2) >>
+>> endobj
+807 0 obj <<
+/D [805 0 R /XYZ 86.4 726.045 null]
+>> endobj
+54 0 obj <<
+/D [805 0 R /XYZ 86.4 701.138 null]
+>> endobj
+58 0 obj <<
+/D [805 0 R /XYZ 86.4 521.972 null]
+>> endobj
+62 0 obj <<
+/D [805 0 R /XYZ 86.4 271.581 null]
+>> endobj
+804 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R /F11 628 0 R /F48 539 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+810 0 obj <<
+/Length 551       
+/Filter /FlateDecode
+>>
+stream
+xڍTKs� ��WpD��-譭�6�L;��4bGcY8Hn���EB�cRgz�=vѲ��`�9�P$��@#-��Pq�S�$#�(�=$*}(n �
)EB���ҌQX�0(���i�?��\ӗ'���%�1 �@�K��&��!s0bZ�_C�p�
�,������34N)J�h/	F�`%���|HNmc`v�e`���!�
��	� 
Q G:�� 
'��(�,�	�f�P��J3�)��Ym��ϔah렐బ�ڛm\��l\uϦ�g6.�76.�Ӕ
�n�άz�M�hZ[�h]5���Һ:�������a��m#Ə`��mm�R
;[��G��&�`�L#.E�ӫ��������U��s}_�K��%9�RNn1~�R
+]�K,=U6k�Q۫�(�J��2��J��`A~���j�����mMP.�&|ˁ���`�
Hå\ ����h��ɂ
�+oW��dm���n?��+?�n�W��
�:ܶ�B�<
�E(�
+d4�bd_T��d��
����)rq#1�p\�������2�}՝�_��w r
+endstream
+endobj
+809 0 obj <<
+/Type /Page
+/Contents 810 0 R
+/Resources 808 0 R
+/MediaBox [0 0 612 792]
+/Parent 792 0 R
+>> endobj
+798 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./sunorg1.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 814 0 R
+/BBox [0 0 719 456]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/ExtGState <<
+/R7 815 0 R
+>>/XObject <<
+/R8 816 0 R
+>>>>
+/Length 817 0 R
+/Filter /FlateDecode
+>>
+stream
+x�+T0�3T0 A(��˥d��^�U�`nha6155Գ4V0�3762���&F�
+.�\�@ }��
+endstream
+endobj
+814 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160728-07'00')
+/ModDate (D:20151010160728-07'00')
+/Creator (GIMP PostScript file plugin V 1.17 by Peter Kirchgessner)
+/Title (sunorg1.eps)
+>>
+endobj
+815 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+816 0 obj
+<<
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 958
+/Height 607
+/BitsPerComponent 8
+/Filter /FlateDecode
+/DecodeParms <<
+/Predictor 15
+/Columns 958
+/Colors 3
+>>
+/Length 25421
+>>
+stream
+x���	�չ��N� Ⱦ��

+
+�b D"�I@#D�E�""��b���;��
+��q�`�"( .�(qe�,�0���JQ[W�������{xxzz��O����Ϝ���7�|�   �����   @Dg    �3   �   ��
   Bt   !:ȴ�K��������w�|�Ŷ/�n�t�e
ڵ�g���vo֣s��uk'�" (*�3��z}�GSnyl���nHZ5iX�
vОI7 ���
 ��_�ʟf?�t+J�q=;����I� ���
 s^_��ɓg�ۻ���q=��wE�����%�0��o�j�G��ު���㶺�����!ن@q�dKՎ��ܩ�ithW��3�6iX+�F�ϖm__q��E/n�ռ��}��#�4��t� ��� ��%�O���ƛﻼ�Y[ՎoN���?�T���?t�o~�t� ��� ��ϳ������������I7'�^\Qy����j��[�2qh����#:Ȗ�'�~}�Gƍ��5?�:I7'��o�������g��7��ts ��� ���ȫ�vT7�ئ~��'ݜ��:�uㅻ�I�% PDg ��u�tuㅻ [...]
+�Άc��<w�ز�Z����6k�Dg��
+�3Dg �Bt�-��
�*�z�0:[��kt�.g�
�i�P�qFgsɇ�����Ú��Fg��
+ܟDg Bt�-ѣs�ȫ�7n�*:���� �9����
+�+V��Eg�[�����л����:`t��WYY�`�It�!Dg ٢��ƌ�P��S����ye*���֑f�1�謂���K.��z	3�����?�� 2��
 [��:��3�1n��l��>X�®q��l������l.V=E�hs�8�\g��
+��
 S�� �%���T�5�^�y���ͼ{�U�D�ζ�϶^a�k��	�@��dK��:�Y�Q�zFH�_�N��<b����
��8/X�L{†���z����u��+x�#:��3�lш�*�Zg[������V[tv�ԠWt����c�-Z4�.�J�٨�������Et '�3�lш��`3���^stV
0[k͋�ٲ�����}���#�Ư��S-1��Wtλ^����
 C�� �%��D�Y�;?l����蜳�0��J�;�\l^�μ2��zs�j��f��WDg �Bt�-�s�́d���!�9���kt�
���"�ŋ'�x���e󅌴}�=c�8b�tλ^y�d
+�@�D�� ��� 2��
 [���":��3�l!:Nj�
 S�� ���
/�3�L!:��s��� 2��
 [���":��3�l1��v�(�^��)Dg �Bt�-���Z����]��l߶"��[Վoz��P�&:��3�l�x��E/�i�8�w���K��I��Wy��O���m~�%'&�
 (8�3�l��+��L�&�U�2�s6��r��G�l5n���႓�&�
 (8�3�lY�y���\��ڸ=��ѿ�5��բ�N�~��}����o�d� E at t�9�~�;�ۇ
Tg䀆
��N�I������B�7�������N�I P
Dg Yt����⽤[�>�߫ڱ�Yc���o�8���,�&@1�d�]
^�5�y5sC�O�oi٤~ҭ�ӯ{�����_�1{ YAt�]����G^�ǚO����x���J�H��
�i�|�
;hϤ� EEt ��8z���NN� ��":�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��  � �!:�PDg ���
 B�@�3 Et i��B
=�7��qҭ@p���ؕ�. J��{�z���I�"���B1ڔ.�K&�.�K&�"uI
+�Y(v�t�^2Q�t�^2Q��KR��B�K�
�����
�����D]�Bt�]"]��L�%]��L�E&���P��B�d�.�B�d�.2Q����b�H�%uI�%u���$��,�D�P/��K�P/���L�%)Dg��%҅z�D]҅z�D]d�.I!:
�.�.�K&�.�K&�"uI
+�Y(v�t�^2Q�t�^2Q��KR��B�K�
�����
�����D]�Bt�]"]��L�%]��L�E&���P��B�d�.�B�d�.2Q����b�H�%uI�%u���$��,�D�P/��K�P/���L�%)Dg��%҅z�D]҅z�D]d�.I!:
�.�.�K&�.�K&�"uI
+�Y�W���٥���?�~次G���ۦG��ɵ
L�%]��L�E&�"�Y��7n�vҌ/��m�?z����j�H��z�D]҅z�D]d�.�e�|�c���zϑ]����!I����L�%]��L�E&�8��,�7�����z�D]҅z�D]d�.�#:�c}C�[I���L�%]��L�E&�,��8�7�����z�D]҅z�D]d�.�":K��P�V2-��L�%]��L�E&� ��ݚ�7��⟫�����}�ns"m���o>۸�Iú�e�i@��
�iۼ���z�_�V�iC@�+'�^�%'�.^�WNd��K��x�.	":�WՎ�Y�k�KI7��ј��[Q�_�g
�Y�n�bG�\%^/��*�x�^��uqE]��KR���26��'��ǚϒn�Dƛ��&���?����`�����ta?����$��V8D�o�������j���
�wm�F��J�;k�^���˶���R�s�A{^=nP����^Vr�E]����
���S/�bE]d�S��#:�xg�g�/�S�
޿����l{�xd��)��W�/?s��d|�'��l�����ta?����$��VPD����۬y����>�-�n�,Wܱq��_7ztnٙ�nN
��#�zQ�G��~$u�I�񭠈�5����g��cܸ��&���K�9����j�����3�i�QI7���`�����ta?����$��VPD�G�:�m_7e��I7G��
�������]�$��z�H�^���Q���D]dx|+(�s��ç�/ܵ{�-�����
!���T���?��ta?����$��VPD���������؏҅�H&�"���[A�k�K���KP/�Zdb?J�#���LҎoEt��.�O�.A��qj���(]؏d�.2I;�ѹF�]��Ww�>���Z�x�1���
[VVk۶/���-{o��~W]5���㎻j�����4�4運/~�|��%��u�W�������[�~i{�Y�N1���v߽��o_]�N���I�%4ꕮ͙���!3]DZN-fQl���Qf���q��m�B��؏�B׫W{��i������':���H�~P��xV���H�b�gil�$u>�ݙ��
��wF!��VPD�Uj���٨Q=c7�s��j۵m�fbS�*�G�B���s��G�t�v�˅/_ZN-�5
g��t
������i[H"{V��#mAB[����=^[Hq�e?
+�@U�~�
++]u	r��*�����ٿ������5�
�̷}��g�GWۨ����uW1ӛu!�bUts�ʃ<&�v�P�JW�l��|��h�w���Ԣ���>;�N���7�)����ظq��1��ܜ��]$�Y�ޏ�pM>
����B�#�Qp��B,ǫ��U���y���ַ1�蜷��}��G�񭠈�5�U��׼��j�;mS��Q��WPԆ��G~��v��XGL�
��]"x�RW gc\�N��RpjQg�>}:�w�/�8br˖���%^�t��EQ�l����)�����(���-�s����g
)�T�G��
+�
��JW]lG!�#���:ֿ�
�"��[A�kh�lc�^��0kVS��uk����_QQ�s�
r4�N�.�^i,�9�D�8��>7�\�ko�<"�mV��1k�n0
+d;�v>OHسһE�3����R
�؏�+P���JW]�
�\K3}�	��
��=�O�G9�i�v|+(�s���9�p��xd{�u,�:���~�֮[���l@�?�I�%�F�t�9�6�M������<=�����b�c>F�`�@m5��g�w?�(Hh�v�Q_�-�8��G��
+яWa��.A�T^�y����wFg���r��&��VPD���ζ���@�N�N�v�أ���>����]ۏa�za�i�X^��c��Y�ݏ"�m�[HA[k���R�*D9^����9Ry�F
�T9Ǝ��u&�k��
��\��6r;O	����d��7�r���$m��}�FNj�����O�����p����[\G\�qh5*c�(i{Vz���4�
+�o!m�I�~J��w�
++]u	r��)�9���~�3�����#��QPD��L�8g��u�5߯�����O�&�8?��([�*tֿI�.�c�b
�L{�ӿ�D�Z�����.
;�:��p��ǘNqN��g�w?�(Hh�v��_���&��QX��B,ǫ��U� G*��؎�{�\�ơ/B��:�ѹF�C��0�k��?��;��Q�n��)׫��B^G�|!.N�#]��P)�:��\����J���鬵�=+��QyC����n!ř�!|?
+�U��xV���H�_�����
�z^���d
�
+��\��_�b��sa�Bq��1�H�%��J�
!r�#i*�����z&�N�q�u��
��ͅ8/�bkC"{V��#ma��#�R�9����
+T��ǫ��U�o�~��ϻ����(9K�G9��O�񭠈�5
+�Eܮ��zG��I��_���K[���
��2ɧ�)49�uI�;�>M���C�
+�}��*��c�ڳJ`?��+��l!ř�!y?�P�*D<^�����_b9�����a����"�\ȏ��� :�(�)$�����_�N-��~�.�G2Q��
�
+��\�]Ÿ�]�z���"�Q���D]d�v|+(�s
v	�v	��S�L�G��~$u�I�񭠈�5�%�I�%��?N-2��
��L�E&iǷ�":�`��'m��^�8���~�.�G2Q��
�
+��\�]Ÿ�]�z���"�Q���D]d�v|+(�s
v	�v	��S�L�G��~$u�I�񭠈�5z���jG�\��&
k�}|�H�%�����E]���
��L�E&iǷ�":��ô���YS���l���u�n�,����؏��ԭ�čg$ݜ��G���.>؏҅�H&�"���[A�k�y�3s�b��}X�ɧ5I�9�ܿ����ɸq�~�_w�o�nN
��#�zQ�G��~$u�I�񭠈�5^\���W~�e�ם���j'�
9�����\��f#9k����%�ՠ^^��u��~�.�G2Q�d
�
+���-c�0v
�FE��F
װ�au[5-K�QIڲ��E/n��/������c�V��rbE��>�^6B�E]l���
��R/�bC]dR��#:k��C���bۗI7D"cO�zܠC��-����`�����ta?����$��V8D��zg�gSn}�k>K�!5�l��_�"�V�hմ�'��?���
�׋��J�.^DՋ㞉���.&9E�	�K����_���eᄒ�#u��|��VMwI���Zz�
��*��/B�%�(&�^��$�.^�ԋ�
u1Q	E�	�K�������?:9�V (�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%]��L�E �� ��P��B�d�.�B�d�.Q���b�H�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%]��L�E �� ��P��B�d�.�B�d�.Q���b�H�%uI�%u��$��,{E�P/��K�P/���@%ADg��+҅z�D]҅z�D]�(	":
�^�.�K&�.�K&�"EI�Y(��t�^2Q�t�^2Q�(J���B�W�
�����
����DQDt��"]��L�%] [...]
+��\���ׯ߼5�V�jGuEyYҭ@ 2�b�.��qO&�"�̢Mzv��I����5���t�n2�b�. PL/�uN�M(8�s
3:?q�qɶ   ]��x��At�
+�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt  �Ct�
�3  �
�s��  ��3��
  ���9Dg   =D��!:  �!:g�9�,q [...]
+�Ǩn	��1vZ\����}f
�
+���v[��w%����ΙCt%�A*�����\�=��tkm���:TÜ�w��{���A�l硰e�kg�J4:�j�S����I\�9�v�{��r.������W���.]-$�謄괈�J��Y���^t.�Y at cW�؞��9D�P
���Y�8����
���M�ӭ���u�
հ��`�S�H��[4^�\Y�v��T�sؖ8��s��ot��LE��Zl�4Q|��U�b��T�+U��
dx2�MEBt�:�z��WA��(q�"Gt� �s(�GvŚ,��������SK����{-�v�u=�bۑ1�i8H���~X�m��Ow�b=7x
���K�I��a+�7F�eV��8�
�m���a���ۭ�zY����n~����(�_����
�l�\�~���r�m*6��)����_l]Q��@�U�=#/�s��C�9Hy����q<�����<�l[�qc�	Oo��?=��3^'"
����
�K��e
+�N�J(:k�ĩ��Z�x���v�\��#�&��/籿D	d>s6��5rqG����oS�)ftv]_��\г@�U�=#/�s��C�?H��G󷶃l���2t
�O��
�A�:<�sX�0�_�uVaF����
[���ԨT���FK�
+�s�F��P�m\)0�旷(��EV��ٮ����
9����\�@�Qg�5ǂ�9D�P�gz��w�ck^���>���/qAV�g(�:d�8Wtv=����t�Y�R���z-q�7:�4x��s���3��6Bm�>�e�l�6��E1�)����|��4�(��r�m*6E��^�6:�,e�M
3GAt�
�s(a'�:OfA>����7~�U3�O&�F�7�z4�ّ �_��V�E����?�9H;�*��1Ak�8����x���o�t�U�
F�c�A��i_x���N>;����
!^��e�����;-�M�&`t.����ms�?
h�J��ȋ�9D�P�
�\��y2�J�ϸ6�q��j�Ot���@�+W��9�O���l�2�m�^�
+
��|">��l,�����P����s��6,ž�!:���\�(����Tl��}��P�/�Y@�0�p���ΙCt%�A*��,ި�2}��<8�����&':[�^)/��j��1�
d���"F�P�m._����+�ͯ�����f�4��
<J�괸6�bFg��
��c�g��Y��)�":g�9������|��CO����:kZ��B5,�=�9xt.ܥ�\?��La۩W�B�u�{�":[f�e��W�"�u��:[��}97�B�uVl�k�֭깡&/������Tl
+=�9����T�1
f��
�s��C	~�ҘB�
+�C��x��W��'�|����Nb9��=Q9?s���s��Wt�����X>���5'�5�Y_�ͯ�W�PlU��k��Ό��0�Nsm���bS��	��o�J�,j�5��
 �9s�Ρ?H��'�?a��G��^~9�7�Y��]��Y��u<-\t�;�
�+tt֨T���FK�
+���!Jt���z}�f�W����
+p]gg������#w��@\W��i��D�Tl�s�
��
^������s{��~�3��
J����r�����
+2Re
�q
�ް\�o�
�>aú|�Y1ѿ^+��5*U����E�cÈ�5�[���U�����^�
�yO�
2�k�����nشi��o��Q(Ƌ���\|��M�.N絾�+U����W�8���J� :g�9����_
���?�����9e�V�a�`��r�\�|!'��+EьR��}wؖ8���sfj��	���|��4�ۀ��u��g�^l=��1 +�:�|Gj]����v\��
���l*6�?&q}�E;
�]e����ΙCt%`&���ܼ��?n��ӡ����x�M7i7,�6%��닸��ˠ�xMJ)\t��$�,{t���E��F�q��~�uۭ����j�
��+���9ǻY�|c�̅촸6�5*tt�Z߀�m��������a�3��
J�L�S��c�Q���g�A�6�0b��+VFlX�#@��Bb��>
�y�P���TA�s��84:[7B��|댫�
z��v��{��y:����*ū(��ڞ�W���B�;-�M�k���]�7�n[̳���Kc{�+�s��  ��3��
  ���9Dg   =D��!:  �!:g�  @�9s��   z�ΙCt   [...]
����VI�����I3�~�)�V �޷M��[����;	J�a��'r2 ��8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
  ��(UDg N GK�*�3' ��%J��� �����
���  ��h�REtB�d  Ap�D�":!p2 � 8Z�T��8 @
-Q���@�
 ������������n�s�I�v��ڴ�5�vq":y��Ϗ'�������;hOu{P�N�z�\� @#:w;iƗUն��v��{�J�I@��@~G�����{jW�=w��f��' [...]
<O
�wĀ�I��Ӌ+޻�E�ۜtC �]��
G
wx��
�n����� �i�Z��~���[
�$ �KEyٳ��N�¢3�o �B���u��B4 ���]�$�aљ�7 D�qj1���\~j����N��At�3�O\t\�-�t9��y��@�!:{":�
�3�REt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgOy��
:������ι�k�.��.]�����u��]���zu�G�1b����
?����;ͥ9_�M���=Q�vm뒫v�����
X�`�Yg���2m��i3�q]�W'l߾���C��Ze[es������)�
��>��e���k�w- MA����z
�a��m#N3ᢩ���G
���Ɲg�{��G�Z��� �1={��rşz��`c!���a�E�-�]���q��K�cG���x�
�f�*+�.е��f\���Ì3��f�3�3a��t�����և9l]5�
��k���f�cl-1��h��c򮝭�

z��#\HCt�T���9��Egk�uM����J϶Xl{93۞e��7\_V��O'�%�o.�i������>�ٶF�k�Ȋ�s;�Ak�S��Œ㏊�F@�ջo�T皌6����K�������*�9H���Wf��	�9Gz�>�\��R֖[�
����::�"~��
وΞ
+�����#�*z�Y��?����-���z-�
�5_׶4d��z���c�I�e�����8�m��[��-^�
p���"+Zt��[#�9Tl�t�N��cߺ���d>�

+5c.�6�l[�J�9K(4�`.S����S۫�>�ˡ�|�/.՝���W^2���j[�������3�����=(:�
�9��۫{�����o�	͛53�V����n��
�Ij���ag��
�}��Uc6mެ�mk�^=	�p��s�9�Hg
d�*P�<�y�&�T����W�f��9���
UBU1w�->��΃O8����^H=Ҹg�=�Y��c���^�)ht�-��)@��Ξ
+���7~�U3̼��U�4�r��g��h>�u	>s�Ն��
kD�ޯ^���"�ȱ5([3�zp�U�F>k����ϻp�U�Mnּ�j�E.kP�NlP1.o�s
E��|�5�Z�
���(���6�j��f�����qg��8e��5�u|`��g��p�٧��2:A�us����9�ڀLDgO����#����*��/�\gs0�=����vm��hF�6m|�¼�67�9\mmF���
+�	ƫ��wyW9�����+Nt6��K�jdG�l�ٖeՏf������?m���l����a
�{��ޫ�ն���yWN�t����Z��WGs����9��N���ױ�uv�<��[��
$���@�YeM5d{��SCEg[�
�D�L��}�N=%zt�M������������(��EgUԻt����l�	����
+�ή3}�+>��k��<��[�:���u:�
iN]tVld�3�":{*Pt����ᇡ&l8�#���0?�|ʯ�5��h[�	���l
s��L�&>=
p�lk��
������ff�׼o�#k��1f�p�f“9a�����L_�p�s�3��>=�L�2�?��-:G��ѤYs��1*:��еRy���&o@,����Eg��Fg����,���^���̮Ͷ=�z�9��	Z��y�fO̹�K��7j��s�>=�F�k�:M@A3:�.�f
��ȱ���56�X�T��1A#�^1e�3��|L��AC��♃��aWk�?��_�7�X٫���~t~0��kg.�믿q���1����
F�7-@��=.:�v������5�_��L�^s���Fg�P��w�S�6�4x��s����O��Q޵p-��)ft������l�<u
+믂�:�%��^��� \�ęm���l�q�:Ҭ�ֵ�]������Gg�
�krr�=���_n�}�񿀱�J��uV1�޹s�W����kڱyqe׋��<&�8?�h{��+Q\;�vq�\��pQ���o�k� ����9g	�������/�7�8Cm�#:�j��uq:��
�I-Y=�G�[�s,_���KA����3�>t~%J��������ٌ�A�����{�9�ڮ�����{�)>WA�囶am��a>�
���P�
����(�Z (��Gg3nڢ�y�m3`t���"n�
�N3�� �����l����� �k[
g`u�p��{g7��n��
@����� ઠ� Dt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgODg �CtP���� ���
�T�=�@�@�":{":�
�3�REt�Dt =Dg �����
 z�� J��� ���*��'�3 �!:(UDgODg �CtP���� ���
� [...]
I���rD�4#:{":�
�3�����Et����V����7�n|k�-�;
+Ӵ�(��_����iԻc�ݚ֏}�%�υ�(%ӇQ���%ߟ����
Dg�sz�=iD�7�n������f��>����~���{��,�~.DG�(�>�"b�g�?������D��":{
+����i7=c�߶M�>�;�n٤A���l�h��Uk?]�²7^]�����̑=�n�0�%�X?��|�XFK�g�?C�����D��":{
+�o\�r۵m}ڰc
+ٮ�y�%�/}��
ͦ��-��j?��Q>J�����Y�� }Et�?�3�9��Ξ�F�s�|n����6��vm[�])SYY5�����)�;�,
,�~���|�jF���֟A���
A����<����5��r{��ZU_~u�ً�l�������g�}����4m�����Z��O
ХU���_9�����ԭ_a>��Ϭ�y�������%_?iɫ[k{�ރ���)�KV
�.J5���j��AtN;����ѹ��WU5u�Iu�T�]�3v�M��.TR��
oG�(�>�B��3؟y���
����MO��C�
������؜7��������*��p��F�=b�>*�Z=|�J�Y��E���Ҭ�[�ӨI��&u�~����^Ⱥռ��o�^H��o�֧�":�
��S��N3.8��mJ�xa	�sѢs	�a�����$:#�P�Y
���k��ɖ�������9��M_�Fg[�urFgg�����ն�m�x&:�
���9.D瀈��*��<�i]�y��]c\&��·�b���^?�λ�ol�Vk�.��e͸k�������0v}9gt�
9+��s�������)��iú�=ܾ}�yϐ�Ɯ~ޥƍ7V,
}�Q;vT��ڥ����[\�n=�)
5�����Tn�>zh�M׫m�lѺ���ki�۴�eErR����G�^5;�{o�g{�v�=�]{O�Ze^Oq�pD)�ήەs�mW�
�[Ͼ���':��ٶu����%
��vړ�<8q�u����k��al�o�Zn�3a����B���F6�s��/=�f��]�
����s'�t�g��ȸ֩�J��~h���_7��r��l}	�af�����L��&��'	��Li�8�QƏ��Χ�]u��;�*|�hh�V]��TD���0t�
Tש_���ڮ�ؼ�ڇ����+TT�
sj�>�{/��fl�F��G�ߠae�6�Ul�y��� $:{uڬk�ͺ�2�]��]U��ᚼ������'ǘ�sDgD*:��AF��Ո�so[nFg됰�q���5ܫ��s��5[�Eg��UF���9�s��=��ι�d�W_~�8S���j8�믿�;�� 
#��ٖ<���ymW�>4��נ����
x��M�M�ʈ�Fu�Ϲ��q˖��蜳���E眣Ӝ���,+�s��s�m���8g�茈BEg#)��+�{{�s���6#�Wt.�
u�yQD�#:{��U�3N���>ѹ�/���eg���������
泈ν�������ymW>)��O>��Qq]��D�hУw�1�ׯ��ت�c�Y�Ϊ�Ԑ��Y�7~�AtFDa���#�Ft�}7���i?�ꜧ���
+�^ѹ�T���F[�vEtN;��'���8A��~��d5�Q���x�~
�Ă��h�-c���;s��9�4�6s���XH����۫�[g��Cqݮ\�
��}��W��K3���G|YYit���;��G��v��%?a#o�Y'rDl at pDgD6:��Fg5*��~�^y���y^�9��t�p������6h\�l��s��=	��^���SN>�#ҝ:��g\�
vjRo��
f|�y��mF?o6���m���ěsή�
��ӮF��<j�ӏ�W� ���c�q����v��Y����}��ΈH#:;���P��c�s���W��]�s.�W�خ�����杶AtN;��'��9�
��߸m���#���1�
�Ր��n~��Ǻ]�	�j]'��.�'u���g���ؓ^?���F
p�:��h^|&"!�٧ӂO؈k��3"⋸���Et�$-:���z��
+_��#U^A<F������������NA>
�ڽ��|��[&�~��?���ʥ��G��l��2�Wrt��8�׳����LtN/��'Q�9���lYЌ�jhJECk�[��*������ψ�����b�����]Y/T�Ja}V�m�6a�x��8��m�aj��\gU��͚G#9:��&f�.N�ڟDg�Dt&:��ٓ��
�+Q
��W9#�:���[/�뺴b^�*�E�e�yب�m���|��9�7g)J,��s
�U�O�9�p��Y�x��Ӎ%=���yE��w�^
��9���(^��I^�Έ��LtN/��'��;.2��@)��%#��"DgDDt&:����9.D瀈��":GtFDDg�sz�=��Bt��,�spDgD��s��Ӌ��I/:_q�Ȳ�ؾL�4":�d?9:�dF1:g�?�Έh���o��QҭHL˦
f_��7�%���)lt>�W�y���n٤��J����	W����7
�xl,
,�~���|�jF���֟A���
�>Y���ob�z�Ξ�F�+Z��k�:�S����])���w�{�]ˆן�3��j?��Q>J�����Y�� }Et�dDgDAt�6:/�9w.1n�O�$Z����[�~xϼ'�UV�ѯS�.{Ʋ̒��Bt�����("���3`_�!�Q�=��Ά��}��n���UWW�ei�&}�
�Ү�ԡ�Ǹ�R��v��R��(���,�g��":C2�3� :{҈ΆWVz�S�V��0�J�ݚ��ݱ��n�ľ����u����(b����g��":C2�3� :{ҋ�  �3$#:#
+��'�3 �!:C2�3� :{":�
�3$#:#
+��'�3 �!:C2�3� :{":�
�3$#:#
+��'�3 �!:C2�g��ۤ�ۻm��?��t+��� ��MFJ�tݦ�[��l���w=Ѿm�d�al}~z��c�t9ą���
 z�Φ_���w�I�v������l�z�y��s��=�@���k�t����9��Ξ�� ���l":���w?��Q��
_Xe�ߧ������d���� ��MDg�\?��-���Ӄ�O
3 �� ,��'�3 �!:��ΰٰy���7��g�͓��s�Ӂ���
 z2
�����Q��r�?ỳ�
ܾ��4��g��Ӆ���
 z2
�
����W߱޳�n-n�4<��@��3C��Bt�Dt =Dg��3Cΰ2�rN
��'�3 �!:�v
xf�6��3CΩCt�Dt =D����
9
q냋�{�[!Q�n
�=�oҭH��'�3 �!:+j�!g9z���tl�����-.��� �Ȍ�I�8&�>�3цn	����
 zdFgy#��B�BFtE��Bt�Dt =��si�,�c�+�%��'�3 �!:'%
���n	����
 z��I��:FA���[B!:{":�
�sR���Q�?��P�Ξ�� ��蜔,�c�g��u=�}�6�
w}h�6��U?n߾}�#W�\>�1.��Y]��Y�k�������K�cG��U�֫����
+��� �����u�"Tt6c��������*�
���O>�ע�ծ]�|֐a#T,vf_�g����F�2÷��c�(DgOѣsU�WO����5뗿���-��5M��u��m����M��g�:�I7.��Me��Z�c�K��\��F��(P
��(��_����iԻc�ݚ��zX)Eg�Pb��Q����u�љlB�At
�C/:�̼j��o���]~�U������7aڤ	f��Eg��ǿ��s�|�EtN�������O6O}���m��Q�и~�����
M�nv��m2��[�k7\|�K|bd�3�u:��-�����
�ļu�3���r�O|q
wܼyS�1�­c����Vq���O
3�x��)�=xX._t��9E�Ξ�D��F��Qԫ{tϟ�ѦE�&���@q6l�b��O��u��z�)=}�Pd��&���z��|�M���mӢO�έ[61���MPee��O׿��WW�./�5sd��[6t>�d��3
)���5<9����,�:fJ�	�5���a��W��� #
�h���0�	�ϊ2׹gᆴ��b�(DgOQ��Wޛ��k��2��Au�T��4�n��'V���
v;`��ۂoe|�
.��{�•s_\ݮm�ӆ
S�����cK�_�F�=�M?���%���d�=:�
�,�:fJ,4���y�
�G�m�T�5�)�<�Q�!:{��/������Ѱ�z
|@��ە61�{ׯ3��&�|+��dp���s�|n����6��vm[�m�TVVM����u�����m�DgÂ�
8k���1��/Ȅ��c�]��О�a���1�M��cڌ�w>�7Nj��9�=ﳈ�)Bt�%:���[*w\p���w�����fUWWsq9�&�
������ꯦ�;)��c�ܔ�8B�RtVF�8~��
�*
���qG[�	;Y�û�����)�����
���y�EtN���(�Y�6f\pJ�mJ�s*�6\�7㽚���n�p�k���~���6l��dS�cG�1��cɋ
�UYU�r;ojN��7�q�5onT��k���9E���Q��a�
��
P֢s�r������6�hM6�
�� ����-bt�F^�N�0ݫw_�L�E�/0�Y��R�gY�Ra�����x�mr��ۻ>^��X�
+���9
+��4Y�&g]3���?�ع��vXD瀲��x�9�NW}�UA>&h
w�^��?O;Y�u����
+�ٓ��iú�=ܾ��o%wi�����n������G�����CNs�y�Z�ՠQ��_ZQ��z̦���m�b[���� :Kq��n�-Z�Q�ϖ����{WY��KG�9jҭg�i��S�V��,�K�{���z��M��]����
�xt�lu{��k��?�bS��
�Wm��'yp��궹@��W��\�Bt�}7:�n��Yp��j��9�
�𭮤ad���:t��a� ��
j�cv�?��P�Ξ�E��G�tk�Ĺ�N��v8��O�e�i�eUzpFgs���Ncz&:Ke�tn<���0���7����[V^a���u�Ye]��wf�U�ߡ�{�
46Z3�
?zH�
++�97]���UvT�09p���֮nk�oq��v�z

+f]3mֵ���'j�}�Fu�O�GI���钅u���qE��Bt�$6:����W_~�
m2N�
����1�ϼ�杶ắ���+:;
�Y�(ۤs
��o��fzk�g{���|�s��
x��M�M�ʈ�F�?�6��-[6�o�3�M2b�}�]k�_c�Fq��v����-U�/0.Dg����Q�?��P�Ξ�FgۉP
/
���F�m���W��%��>���+������'���̿�GGt�&zȳ���z��l�t}!�Yơ�G���c��_���
�]_���Y�W]�<���.���Q���:FA���[B!:{���&8����s�_
=���Z�����8��w�!O,�ߋ��2fx?��
�ɕ�,M�mҜDk�#k
y�,h��`���I�W1��G|YYil�F2�|��
�7�u�-�xj��:������c��<
+��@YX�(�WtK(DgOҢ���s�q^��]7��O����ϼ�x��c/�q��D�̊e�4���'k�B}�4��T:��������|��
�G
x������s�u.�h�l�U�C�+��5Htv�y��z��@YX�(T���M at DgOb�sΒt�H�J��X��Yy��̈́���6i����g�ƃ]ߤ�&��6��)�Gϼ��'�~�cg���tU"���0�$.N�W]u��
5a#��.Dg����Q��:��w?J��l�`����fXDgO���{���z�)E�é��g�^ዏ	fJ��d�	�9���z�3:_4��	��p���r��\#s 5�Y��\�9x��

+�
�7���
����
+�I`M#��'���<�=6�^�tkF�ؕ�,ubv��\�.
�l�*���]�K��ζ���2m6�g��?��x��q�s]��͚�>iQq��v�z���{q:�>�Tt�Ȉ#i,-��)Et�$-:;�]B]4�<;���I�9
+e
|%JE�&�v�nۦކ��9�MZ>�Ԭh۬$�?������Dz��fr�_����z-WR�Q��)Et�$':��Y����"�@D�":{":GAt��m28�s at Dg 
+�sJ�=�� :K�6\��|�y#���:^Z��(��)Et�%:�����2{B5�{٬��j��
l���zO���՟l
��A�[6)B�D1�h•w~?�͂?
��-�ȋ�RDgOQ�󙳞}s�ӆ
ۮm��ە�9�e�\ϩHDƷ��Bm�W>���>�ux�~=-B�Dyu���=ծe��O���-�ȋ�RDgOQ��
W�}q��{�6j��q�+�z��G�~��
ͦ��-��[�&�
��.�9w.1n��Ѕo�o���=��VYuF�N����| �ȋ�RDgOQ�󧛶���ɪ�z��~=��?��c�������rD�ݒn���m28����g߼��o��F��-d���
��]ڵ�:�pׇ�����)Et�%:�y��i��ng�j�A����~�a�.{��/C�p���m2�([�+�?��U�?�\��I�[���;�
�m������)Et�1:�\���g�2N��5*ڵl8��vGv�=��E6����z�Btβ���λ~�t+R�·�V�n�A��$���j
�ݹ�<%:{�
� ���Y�k���Ӥ[�?��.��
�}�n��-[=�����!��Gt�Dt =D�,3��S����������Ïu��@�\q�c
��Ft��
 ���eD瀈�VDg=Dg (D�,#:Dt�":�!:@) :g�o��߿�J��͜��^�~�����Yvߣ/��ʸ����w�Q�u0��j
9:s߬����s�V�lڠ��͍ۍ�=��r/�Et�Dt =D笩�Q=t��6o����{��"�&�u���\��v��ޝO��Ŝ%ϵ7��0:$��At�Dt =D�
2����������
H�=bo0��ƛ
��ٗ�jܰ^��J��7�~0zC�U�Ξ�� ���A΁g���؆Z3;��zC��s����
 z���d
x�ӭù'�M�=bY�Z�<�X{C��s����
 z���d<�2�Z3>䬘�!�9Gt�At =D��R�����P�q����z�~���sDgDg �Ct.�[\|ߣ/%�
+�N�Z閌�޴"��'�3 �!:S��ӓn�\A��%�
��[��'_�Ct�Dt =D�bR)�/�	�-����+��>�^G��'�3 �!:SR���+����
?�3 �!:SR���+����
?�3P|U�_=��+׬_����T&�
���)߷M��6=�˞��'�
D�b�B��@tvEt6��Gt���O6O}���mI�!�Ѹ~�����
M�n�
ѹ���r4�]�MD�����Z�c�K��\���T�H�9�RQVk�6��kӨwǶ�5��ts��j�MO��A��G���
mZ4o�kҍj��/֬�t��_7�7
+}�)=����\LYH9�ή��&�s�����v�������gD�3�u:���I7$���7��7�e�Ƀ�ԩH�9�p��>���������$ݖ���)`ذ~]�C;l߶ͼ�a�]Z����mG�8~��
l�qʘSnj5�2d؈	M5�پ}��Gnܰ~�s˶n�⵴�.
<�ώ
U�_�
Y�r��|�X׶Yk{@��1P�v�X�%�#
ֵ���O�zuH�z���4j�X��k��+k._������l�����P��
���=n�5�VY�ߖBt��9
+#1�v�3��m۴�ӽs�Mԫ�t�����j��_X�ƫ�V��՚9���-&�(?�����Ѱ�z
|@��ے61�{ׯ3�B_տ����*:�D�XQ^a
�-Z�63�z�Ot6e]��+�Iq؈Q��kR9������l{!�s	��
�
+�<��Y�GL�qݯ3~�y�4�ߜ�
����O��_�εC��������ԓ7h�p��m�~pV3��(:k��z�At�Bt.
7.\9����ڶ>m�1I�%�
xl��K��G��'vK�-~~u��-�;.8���
wI�-ir�e�����
���Ť�s;'�\��l=���_x�')*�+>0��3�M�6i�m��ui渣��1vK�G:;�?ӛ�[^^������_c[�A�:oڸ��i3�����o7~��ߛ�_NU3��":��^{�':� :��s�|n����6��vm[%ݖ�����p�����
�?��Qak��$ݐ�;妜��ѹ�R��=���
+2q�t5|�
�j|�:�kNl��[�?�6��$���y���+^[z�%W
p`'g�������E}�٧�#�&u��You����Υ���WU5u�ILZ�@f��!:�Y\�s1E��aͣ^��:5��T�6�S{{��fbL�����
d}-��l�T��uQquK�G�fS���z���޷�X��!�7oRk}P�C
���3��u蠣mQr��;TVn7��xgҵ[���5kw�lt�X��St�":Ǐ�
1H��ʆmF�����)��Տ��֥��먳=������y��b~���!�(���A�����F���>��
��
w��+�M�Eɣ�9�����R���������1AD��A
Ef���e�ٴa���n�^s�mѺ���/��]�z��K�]o���u����a��'�rҘa�ζ=�pý�w�\s�|c�����Ɛ�EY_����m[�x�D{�e��\L�6l�'l�Li�Y��h}z��u���†s!k?X���?2�
S����u�=��S�������9�
?q�/�~\Roe
�5V����\:b��>ah����w�q����ٴq�:�&
��֭���B����v�=�j��Z�ڀ
+�?��
Uǎt�pj��LW6ѷ�f�
+���M�"��/+�03�zb���*{����#N
;b��k��9}κfڬk/S�ڬ�u�?zH�
++���27�W	Nfq��Ŕxt6�7�b�WRt^�-瘺��1A[;����a?&h[q���z�6ci3����?�']j,�uFG��������KG\��?
�Dgלd�6��F��-[�-uy=%xt�
+U�Y�

���&�6c+��~k�y7&:;�wn{�
x��M�M��X����Ϲ��q˖���l8�C_}��(�2�Kt.�ģs�tجyssj�3)��k��ZǏ�ȼ.N��{ը�m�:z��z��%9ߋ�Y�$:�K�EgcicF
_���Eռ�TGg��!:�#:�����
+�s��T^^$:�,�F
H��}B�9��ܠQc[b�ζ!g�\Z�=۫g��
���1~�~ݧo�\f�8�����aI�ι�&"��߱��˷�;��i�l-�0�(l�ͬ
�n�;�7�#s���':�:Ĝ�����%���t�K곕i��aW����\:��^a(u��'T�c�fT�5nt���+;7���ٖ��/j��nG�U�j�����4�
cC�|��
�7�5:3a��9�,|g����_�m":Ǐ�
E�s�}�P�	*'�~{�m��Z�m�G�&l��*�s�ی��?5Y��c��G��l}��T�~z����O?>��鷌��Ա�8�b���֭Z�����)
)G����Dt��9�د����>&�5��h����O�":ǻͨ����5>:�=8�	�F�=e��w<<����~�����Y�?	*��D�b�B��@tvEt6��Gt���s���6L���5��
��B�9�mƙh�Gg��o�Z>~�?�1����2���h��'
��no�\��&9��zQc!� 
�����)
)G����Dt��9�]��+
��m�&��Gg�PEt��ͨ!a��'�&�h_���c�u�z��8���ј�ϼ���
�� 7k��!��D�b�B��@tvEt6��Gt�"�������R��uj��>�'Ht��
h|R�W\W��*�PEt�e�Qo����6��ι��EqFg5+�Hؿ8z�Wt�}�E��!��D�b [...]
#4ѹ��ւ?
�t[vBtP��Ξ��Q�v�ӫ?�<���Z�l�t[��HW�����o��+������}��mԐ��nKj<��k�<�R�=�M?�[�m�	�@�":{":Gq�CK�x�^�w���Фےu��Z}���ڵlx�)=�n��O7myݓU�_���A�z���W�e�態�o�������v�E�a��F�F�p�zE@Ab��v��`og>B,-�s���R�h%��\��
	��S�p6&���dֹ穦�q
�/˕���
�J:'I�6�������ФsХ�L�����ҋ�����7�ϕ���>l<|�2:7��Da�=�u��ۿ�O�<���ݳ�tj%���sK�������,�����g��s���ϛ�������C���'n^�]�-=�/�3P+�$��k��ˏk_��
2�Μ<>sa����0Y�3P+�$��Hg�V�9I:��@��s�t�#��ZI�$�
�G:���I� �tj%���3@
�
�J:'Ig�<���tN�� y�3P+�$�� [...]
�Rƫe���Njob
��ܺڟ�;SzE����
�FG^- ��V: @gIg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�t ��
  !�  B�3  �Hg  ��  "�  D: @�/$�W�
+endstream
+endobj
+817 0 obj
+64
+endobj
+799 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./sunorg2.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 818 0 R
+/BBox [0 0 720 504]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/ExtGState <<
+/R7 819 0 R
+>>/XObject <<
+/R8 820 0 R
+>>>>
+/Length 821 0 R
+/Filter /FlateDecode
+>>
+stream
+x�+T0�3T0 A(��˥d��^�U�`nhi�g
+6506ԳP0�3762��&F�
+.�\�@ m-�
+endstream
+endobj
+818 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160732-07'00')
+/ModDate (D:20151010160732-07'00')
+/Creator (GIMP PostScript file plugin V 1.17 by Peter Kirchgessner)
+/Title (sunorg2.eps)
+>>
+endobj
+819 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+820 0 obj
+<<
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 959
+/Height 671
+/BitsPerComponent 8
+/Filter /FlateDecode
+/DecodeParms <<
+/Predictor 15
+/Columns 959
+/Colors 3
+>>
+/Length 41818
+>>
+stream
+x���
�՝���}��	��
�9���<��L�WDNDA�
 =��Qs
l�0�hP2N2Ĵ�o�`$��>  ���k�t�w�u\��{Wծ{��~
���z�뿪��^���_|�   �B
�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3   ��   p��
   �Ez   �"=   n��   �H�   �[�g   �-�3�85
o\��ڝ����k�֝q7�4_���
��۳˥��۩}��� & =�͖ڏX�v}
wC�׮u���]6|P�� �Gz�_���G��w+����|Eܭ �t#=���ڏ'�\"�۵>i�em/�Uv�%����0�
>��
��~�K5�?��( [...]
�T#=�Z���1w��=�r����}{gBs�����Ś:�\ZR����=:���Q �V�g Q{�f�
~'Dh��݉�z�}���a_�}ܐ�[ iEz����+���Ob��k;�����nNs���#w�|O�����.�>.�� @Z��D�{������3��Ľ�.��e��i.i���2'&o�^xG����"=�ڀ�ɅW�<�m��mL�2`������Ew�� H/�3����vQ�x[�ܐ��?�3�����Bz �H� �Fz�
� �#=��9.�g ��
 j�縐��?�3�����Bz �H� ����{�����:uj�}�#�
U�ee%����&�H� ��@�H�q!=��g QKlzv��I� �̑�D�Cz^�t�رs�rϞ�er�ٜ���<��iCCcǎm6l�U^�U<‘#��UnܸC,?�\���O�
{֟T���Is6,g�G��dٲ
+���55��
+|�=Oz �H� �Vhz~�Z�E^Tkd�ܷ��>=����cɝ��d�����o`yR7�ȧ(..���Q��V�X/��G}.pE��C��� �#=�Z��YsՃ��سH�
N�8q�|e�mӦ�
K��o޳|���b�+mۖ�mD��ٰl���;g���
�9D
�66H� ��@�|�=�D���e޵l)#����֠��
Öϫ�g�سj�>�Ce����3����Am�� �#=���y�9�
d��{������f�x�
[��6;=�Ib��t���ɇ�
 ���D��=7�����?U
�QX9(�3���2s#�o͞��X/'~Ȉܽ{��ک�e	��h�w������� �#=���y��9�ۭ[{7����禦&7�%�s��f�{��F��C���ر�3�#ђ�A\���6�>���?�3����c��P��6���̐vy�:5Gb�©;w�aZ
x�����x9��&Zȇ��瞑���m��7H� ��@���R��3 �Gz5�s\H� ��@�H�q!=��g Q#=Dž�
 ���D��
�3 �Gz5�s\H� ��@�H�q!=��g Q#=Dž�
 ���D�U�ߵ�XX���Yws����_
��G���3 �@z�{~�b�����}�;
�&��4�}�0��>
g�8e郓�n ��@���n޳����/({�^�ߵFH
X��Ś:�0��3o���� iEz��>�즙K�7�囯�0�N��E�{�ͺ���W.?x�՗^rn����"=��~����
� 
�v5>��9�a� |#=���K��~
w+
WZ�B~MP�ѹ����uj�\s ��
 

�._��uq7� ��{

�ڷ*-)��9������&_At �H� ⴥ���/���|&�a�piL�".�{f�+����/��- `�3 ����;���XX:{B�����
 @
H� �� @z �H�  �3 �Ez ���-�3 ��
 n�� �g p��
  =�[�g  � �"= H� �� @z �H�  �3 �Ez ���-�3  ����k����o��
+x���#��9w+��ƿ��[ܭ��8a655��
+ @��m�{4
$7=�����Ƹ[  `�k�^��
��nE�$7=�u��̉�G�n���nO������b��������o�ݐ
>R��v��~n�
	��}�o{�7r8*� N��S�+���"���-�(�YNz�&����/͌�!����O��0��n
�x�"� N�.yU�Gz6���3BA��F}�Dz�DznH�~��
+�g6�k$�3$�ss at z���PP>�Q_#��!���ҳ�g������
���
��� =#��l��H�gH�����G���gk���6������n˒⛯
s���3�5R}C�ͻ�
���|���il,MB,6m�p��Z���濾����_-��Y���\�댘�����]W�:/{��)WL�z@��I�ĥ����+�ZV������
����J�Uײ��o�}v�XڃX�wP�}��,-~��.
���*n�O���k��kD}E�E��jR�$.=g�
�)B��F}M�=���s�������
~f�P�Kϙ���C7](�٨��,��
<7O�wȼ=6�>����IL���ˡ�:��l��T��3�͙���Ǧ҇�x� ��9�
�
�iD��F}M���xn��;d�
�M?3��MBӳ<z��nQ>�Q_S���z���s3'�!���lr���go��3'��̉�n��|f��a����^X���
m(-)*).�����s�dzT"�w�ߞ2�����Ds8p���m�Z [...]
+X����y%6�4aKx驣Nkƴqq7$"�?�$C�����?��3�
`ꡝ;=�����Ԟ$��G�jo�1�1��
IbKO
�%�X!�82�KP�lƔ��⒞������2$�-=u̖�b��>���.A��SnS�KzvFzN,Sː$���1[b���#����fL�M-n���h}��3f~~��̩jjjR�-KJ
���fj՜��񏖕7
��櫮�ۏ�׫��۴��?��]�8������cG+&�:����kJK[��B��)�
�!I��:fKl�t�a�>�(�.��/����}*o��'���]���/w�GkAL-�i�Yߦ[ǎ�������^���A����η��
7�vh���AҳK��Kl ���[,
�9J1v����ѿo�oM�����aT?�9ᒕ�
����
�s��(���[�
?7����9�Ȩc��KGz�RB�sQQ����g#='���,��
;��/�X$�uu"���C,746�t[w�\�E��ظIl�����~��b���?�r���������c�j��6�"{�Zo���.Ǟe��6�[z֏��u��IS�u5��O�.���ba�;��tu���b��7L�r��91{�B����ް��?���}����/
��4m�ao�cY��m�3_�����Rg���
�[O��U�o�{[-��������+�!#�/Y�/��D�>�x��Wv?��~̶=���r�U׉�QVy�C
~6�v���x�Ot^�
:�oG�6��r=�n�<��Γ8�
���ՙ�~\w�~�^A�	��^�-E��zj�Cӧe�Ͽz� �=��Ψ~���s�
n����[�0��^��������D~c��pv�
6鹤�X�6e-�6z���׿� [...]
+�6H��'�5��Ǖ�Z����o��ϜHl+�.���浘zX��Oz�!,�ʓ�M0rD
�9�rm�}T�2z�=�$���&XRu���W\&i�C��7���r��,��#o�o����y,�ھ�9����
$=녶���Z���y2�fjq���Ȝ��a?�l3f,�k��,�H}��߹�b�%?}}�FF��f��o׬U	�~���O��~��쑤BQ�^�����6��
����E�cϖ�N�s�
���L�����-��Vaz�-7�<�������w
ƞ=��ّ��-+=��|�sҳ��g������Z��0����5(��\�c�r��m�o
���Cˤ�R1�쒩�eH|�����7L��oe�9l��=�d�'��4��)����Ǟs��f�>���f�����=�E�-).
]9�IG
��;�<�|�Y_�Һ�D�͞�!ӳ
�r�H�6?����%2
+s�
�����n��(}*�
�ʞ߬ϓ�����k1��
����;'�ym�8�����:�����%Vd)=r���� �
+��l9dD��޸���+�m٤2��_�T�37�y�هy�C�g��\���y�u
��#?�-����g��y��	|�s�׾x;�g3����sC$T9�+����ȗ���i��sC����E at _��!�n��'{������6��
�����\��Pc]⧖������S���eH�����N�_Ӧ��
+��:d,����O��ߐ�rc�^���KD�>��s�c��V
�~
6�ܐ�f��(��2=ۜ�
j!���=7.��='_sK�)b�a�Ė�:fKT�¾�o�>�B��D6fn+��v��⒞������2$�-=u̖�b��� Q]B�o.����ǡ��XnoL-.���9�L=,C���S�l�*�9	�%��/�&=g�~.�,������X�
�!��O,�Kx�BB�aҩۂ3y6�� �7wzVv�9$�ߣs�H�H��ްc2cPi�6y�-��P��ztn�lΔ�
� � 1�����;u[p&��u����5=[
+Fz�L�}4�dd=ǤҤ�YWN���K3�nFeˤ8��39�Ś�-8��z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(���yϾ��u��(A��s��+�n�/�LTe9~��P��9�?\sg��n�/��X	�9����H�EP�y���)�ߙI��7�3+��M�
� �DzF(H���q�
0=S�D!=�Kuq��P���1��Kz������� �BzF(H���q�%=�Hu�I��R]\ A!=#f��#G�
�ܳ���폔���f\}I�6R]b����͗��ei��2	����3BQPϩ~e�����]:��Wr�M���{�a�K}3�8�<��N�S��x��A��24�`0�3BQP�s�ӛ�}(.���2W�$+��o���{ӟ��7C��[z�����o�T��� 
FzF(
+M�"`�q�U������j�%���Q,WT
���qԨ��w�+�����o�:�;b�����-{��.���f�׿����w����6#F\�lYEqqQ��3��[hz%����fHω$+�����E���?q�I2C��-8~���Pt
~��]뎩ʌ���O:�E�W_��t隱c�.\8�u�b���r��^r�X>��SŖ�:�W֦�&�
:*�_vYqqf��{�����թ�B/�f\}e}���f�>�_��&�O����}^�7H	#+�_벒�۔��
�/ ��
+��ಖ%
�|�UWq�U+�K��Y+V������_T�j�^��l_YY=w��6l�U^޵��q��__��۴*iYR��D��]:{��_����ȩ���.�6n��ř��q�H�3BQ�5x�����e�������(ΘQm��
+����5=��M�7m��WP˖��s�^�^��Ξ��Xoy��'rd�����s���`~�=˲�>�G��
�_ �@zF(��{����2'>�9��9sn��xf͚�"�˭�h�W_o�3���EAUY%�_ #=#���۔r��c�����u���ƍ;�dV�������|Y}}CC�篚�q������,���9��O��ޭ�e%�/ ����B�
�̀��R&�ˑH=��J��}A̸�T_���
�s�D�J���� �/��#=#f���0�q���o
��{zN�T@PH��93����n�.1��^��
 (�g���W_ҳ�T���l/���3BAz�nj�/��F�KLz����
+��*=�*�W_ҳ�T�`�s>��
��ѹ��g�KJ�
 (�g��ϙ<sɖڏ�kQ����~ٜ)q�— ӳE�s��Ҁ�9���Mu�
8~�DzF(�9f
��9V�s��ހ͑��@���
+z��«/='^�g pDzF(�9f#=���
 �H�=�l�gS������瘍�l*�3 8"=#�
���MEz G�g���c6ҳ�H� ��P�s�oz����^X�S'��A}�|E�
 =�#�3BA�1[�陿C
�3 8"=#�
�%!=Ϙ6.�g����.ɐ� �H�=�l��0��3i��c�i���${N��/6@췐�>ɍ�P�s
>��~��Dz�9��i9z�R���Xz��/6@췐�{�$=#��
��2�
�>�:=?���爅��U�F����ǎVLup��
�ה���֌l��L��e�+E�/HΞi�
�-$I8U��� ���E=�iSb
�3���Sd�y�K���]ٯei����������G����[�~�����r!=��,)��猉/6@췐$�TIzF(H�6H����%����tl{��A*CǞ�C��K��=�s�� �[H�p�$=#�g�g��,ӳ\Vz�M�d<]~�q��b����X�����+&]�x��X���L������I�v�u�����r�C
~6��cG��媅�����>��㽭b�S:u�_45���|�S<r��
+�I�$����|h������g��+��J3q��T`��$	�J�3BAz�Azv|d"C�7
o]V:��cχ
��Ej����^~~֏o��^u�Wz�4,�qY��"
w��%_4����~�����=�-	��(���%?ʜ(��#ҳg	L���cPP;�T?in��}{���c˓p�$=#�N�G��T�gϡ��)++	��I�6n{�7�]��f�����E'�mU���<<���kV�(�%�ʱ��M�Z߸���|�~}H[`{hX&��(�����7��qW��y� ��c�#=g���%���sz��������
+�9կl��f�E����Ċ�̠���Y&��n��	b���y�P���~K�R{��!%�qz
s����"C�	��ە���!CKN���<㬯��zJ��O���{o�
+'�&��ș<�v�g٪�z�Ё};j�e�����#Y�dy�S��[�hΝ���L�O�ICz��sdB:�[�i��34�9�"N�z������ƞ�Í���$\�L��`��%Y�_�|�I-�|�-
+�i]�\8��s,r��⒒�|y����С�g�eE���u��+ߪu��M��
+�#���]T�����:�X�w
�>��~?���!}� �wY��ۭw��Õ�"�o����S��c�L©��PxH�rY����ު����Q,WT
���qԨ��w��{����ۦN��X/ñ��زg��*"�G��_��J��w����6#F\�lYEqq�� j�˝Czvo޳5���?�����$!����\Pz�q礷7�W�m[6��<y#	��h*�o��v�;��G-Zd:��j�]߳�u��������I�b�K�<����
V�v?���gzV���W%�Iz�U���-ח׼�2��ѧ�G0����2���5���e�t�E��N<��k[*r���5e4�͑�w���
]�̪����K׌
;w�©�[�
55���+����*��ԩ�H�MMMj��С�b�e��9Xdb��{�����թ�
X>cF�x�U����,._
�٧ �X�����p��e4QIN$�5������$\���o�xs�_?�l�>�,\>��[?().r?s#sb`L�#�f��dI�j�K����'�� [...]
�}v���+��"
+�׻�����AD�#3A,37��ɞOw�l�>JjI3���e���=g= ԯ��.+��-�ww���|���bi�O_���I�h�<��Ȝ��Ӯrz��gn�P�s X������'o:�is���H��-Uz޹s�Z���ٳ��-O'6���r5sC�a�92���D��Un�+�W
𗔔�4�{gˋtv��\׳ӳ
�������?�o��U��
6-�7��>]��n^�%���z at 4_3��]VJ�[���,c��D��-=��,׻O�9Ǟ3'�2�
��97VT<�f����*.{{���
B��}"=�'��~����uGUn���L�*1��D^�p���a#_Z���l�BǞ��w]�*���̗o
,M��+ȷ�͜ל;'��_��� �wY)�oQ����=��[���r�F��P��?�l���%��YNҐ3����Yr�ƍ;������#�/����b�E^/--+�͛�/^g#=�DzO���7���62�S��Vn��d�
�k���J�~��ݝ~�
��L�p�$=#�����{n��r��>x��j{�;=���!='
qڛ����O�3���56ҳO�g.�R�q,O
�
��/�3%��~�O~�PHϙ�T*.)�o�g��l��Ċ����J��Rwx���N*�|���t���%w�Zҳ=�3BAz�AzFb�^��M��NϦʙ���3
Dz�AzFb�^�tM˱̴IW�
�=��� �[Hb��FzF(LϦ"=#��, 8"=#��
�ߣ����'�
��� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍��*���{��E/���8	4|P��&_w+ Ć�P�s��&gSX���� ��v�]q7@lH�E =��obqf0U��y��*Q�ߙI��
�'�3B`z��@A��x!iHώ
8~�DzF(H�6
��uf�ㅤ!=;2����� =�0��lz���Azv���
+�� =�0��Kz������
�4�rϞC۷?RVV�㧷� �BzF(��w�>X^~�e��Y�������/xI6��Kz���{��G����6n��.�ד����P�s~���i�9�[}%�9�Ҟ�	X�xK�'�
���gh�
�T�g��О#��f�Ez�&='V��]���sN����������]:{��_ٽ��m�F�Se肊��[��"

�b��bxUՍ�FUmܸCH
�S�~G���?[���YUP=��l���Uq����ՋmF��D
�����._oz�
 (�g��[z�T�.4Z��
�l�0�����v��u���;�w�PSSٻ��2=�
���Ś�{rIv�N��
>[�~e�H�Ӯ�gh�s��G�"C�;x8㮸z8^�t�رs.�ںuK� O�R,���b�N�ډ�555�"
:tT�+G�X/v��}����,�1�Z<�U[�x�/-���3B��,2��|�����h�_��fy�,--�ô��=��
2d�y�&N
"W��$�
�\}��g��gh�'�FV6�S�
���}��iYZ<��~�{cK�]qU8�#�^PUh�vWfkqت_TQ[���Y�����;�w�T��_�.B��E�_����
+���O���pݱVe%
Lf�&=��#/�����w��C/��Nu
�yI��M#
������p��}��52C��pu���$�3�9�en�y�.
ۺk$���{X������'o:�is���8�,[���s�^�^?Tg�~^��<�����ՉB�i��3B�g���Ӯr�Ћ
+�TÇ�R:b�%*?�L�r�Q�JuIvy6�������5�;����������f���񛳸���
��97VT<�f�L�����|O]P��[\ A!=#�ҳ��reA�Y� g�ܰ�g�++��8�IyY
��lπ�o��-���7VoxO����v�'��᜿{��y���s�侸�[]��rЉ��3n&Y�G��詡�Qm/6��y(--+�
.��7���3BQh�8a���%�Y�!��d3sC}kp��w7l�նmY �d��?3���y޳�۪0<���ZJ��v�^
�zu�LjW�7�I� �BzF(b�k)�FU�$�9q�
3�
�A%��YN~���a>�g�o��u����!=�����7�0�o
�-���3B�ؿ5�\}
�o}Cc�����
O&
��Qz�
 (�g���lÀ�o���`��[bҳ��@PH��نW_ҳ����(���3BAz�a�՗�l/�%<=�k�!��
�������� �BzF(LϦJ�՗�l��,L��dK��9���ܣs�es���
+ �!=#��
��oڥ��lz6U3Oϱ?
 ���P�s�T}y��4�g pDzF(�9f���"=�#�3BA�1�5� 
��
+z�٨��H� ��P�s�F}MEz G�g���c6�k*�3 8"=#�
�Q_S������瘍����
 �H�=�l��T�g pDzF(�9f���JBz����^Xj�2|P��&_��IQ�
��b�f��P�s�%�����&!=���[�
{�_�4��y 
�g�"���u(������79�yƴq�����]�ɓ����B�|�@�EzF(LWk�
�M�1`��LʯC��F��Kzv��
4[�g��te#��J��6R]_ҳ{�g��"=#�+�NW��������#=��� ]�Hu�����T�7��~ɏ���tlk�i����ъI���|���Җ���$/=�����)��)��
��H`�:r�~Р�={m��HYY����:]I	���{�����.��ϲe��E�1�n���F���Ξ��ό���ͣ����
��
��(�������і���z�sbzfs���|��5C/�W��(��,:�X���c��@z�Fzt�g����S�ʦ>�\\8��S���|�Oz���3��	s>�t���:L�~��Ф��2=�� �}�Re�n��q
+�2��n�,��_:t��Oطw���ǎ
�^y�Y_�Q���N]������2VE�����b�ՍǏ�_i{r�'��~Zϰӳl�y��v���
���������X��
�K����V�f[�s�=Cz<#=#
ҳ\�3t�c�o�U+����8u�w֯?{����
�l�0���k 
PR��$o�Y.�
]h}s�F��^�Nۼyg��
jj*{��S��ѣ]�b�X3p`/Y��w���ٳ������|غ�z�͈���S]�h�����l���9$�6�JZ���g~Q�x�
:7���
g�y��}�}KD��X��KJ�#�Ѻ��Gÿ{Ô;��R��H��g�eE���u�x�O>�)�תu����#�f��Y���=��eڼX��"=#��x&3����h�"��|��Q5B)�X/��Z/�TUՍ�G1
�:]I>�9���
kUVⲾ�
٥ٷ�N,���aZ��{F2s޼I'�+;uj'J�����_P7Hu}�9����77������c���.�6n���� *ӳ�"A�5������R1�j��1r�K�H*�b�W}�k��\N{��NϪI��j�9�=z����o����Օ9�L�N]Hπ7�g����э[?().
+#=�X�~�ع
N�*�#�|�AIu���׷�W����Ғ��]=�t+�r�~���{x��
E�[.]�F�[�g��-sv�{��++������O!R]�(��"C�yϙ/ss�{d�P=;fN�|��Ж�,cҖ�,S鱣GD���P�|r��q�gՆ��Xҳ��i����Ϲg�7���Px���Ѯ���ܘ=��3������Ⱥ�z��F��D
X��-����y�����
���Ja)M��,g\�w>"��rg��s�ޜ�@vKԯ;Ju}�O�zn�
+�❌�߽a�y���#��%���Y��A��gnd�=��tW����-,c�nfnXƞ�=���
+o��r

/=�{��eNb�
o�Y�f�����ț]��
+5I�����%�9�\�T�7�s����Yr@g�9i�k+E�,))��t��-Ga�s�e�6;=��r*H�37�y����������=�Kؤg� �g������7�YƟ2a�g}���z��Jr�RƦ���UU7�Kfn�T�A�;���}Un�<�����
{V�\���
f�m[�8�Y������B�ő��&�_�̍��ܐ�R�n"߼g�������|i�����=��ﺚU��/�X�c���o3��6��P{��g�3�3B�������FU�
�9���1�\����v#��J���9K#�q��,�x��D��sύB�A���I8��~�g����j#�Bzt�g�"��99R��$�k#��M�9��@�g at GzF(HW6R��$�k#��M�9��@�g at GzF(HW6R��$�k#��M�9_v��ș�M��^
��P��l�:]I��F�뛄s��K��~
c��ѹ��9S�5)j|��_,�l��� ӕ�R��$��(��� �H�E =�Q�Ċ����
��}G���qIo}9��#�3BA�1[��
ł� �H�=�l�gS������瘍�l*v; 8"=#�
���M�n G�g���c6ҳ��� ��P�s�Fz6�
 
��
+z��HϦb��#�3BA�1[��g__�º�����7��X��# 
��
+z�ْ���S�a�� G�g���c����ƅ׆X��蒌� ���P�s��&�9<Ƥg>
 `*�3BH���X������.����e������ |"=#�g��	d at z~�U���
ӫ��
���
��4����.�)-m��H�	g��
�'�3BAz�a��7�������G����[�~����[
I��8~���P��mp��8=�����7m���g�P�CBzN8�_ >��
+ҳ
��ѧ��>����
�9=�1��m��rۓ�?�x���WL����q��7L�r������X3�붿�g����l��ǎ
�U
����
}�y�{[���t�*��hj�?�x�x���{S�����[�Z߄~���}�����.�lYEqq��_<r�~Р�={m��HYY��fp���P$'=�p{A-�W߸ҳ$3��ř ƞ< ����|��������R1�꬯�RiX&�V�E�ة�J�2%��r"����>�/� ����.=�ꌪ���A��gh�3 S����z��
���
˥7CzN��ҳ���ⶭK����=<���kV�(�%�ʱ��M�Z߸���|�YҖ�
�Igz��m�tl�gh�3 S����zN�+�~��r˥7��
ҳ�D�
�f�����y�P���~K�R{��!%!=/�=�����w�������7=�q}���V�8
NL�ر͆
��˻ʸܫ�i�7��޽CMMe��w��<z�+V�k�%��w���ٳ�:��cN������W�|غ�z�͈���
8~�DzF(<�g��g�0ƞ�]Ps^������l>\}#>3�:s#��g��g}eG�V9��ۍ8����rqQ����W�YqHVUݨ0��W'�KK��0-~t�=#�
�9oޤ��ȕ�:�rSS�:�
:G
�b��ߖ���

�6������y
�z�so�hdz���f_�x`���55��Vm�
���ɀ�o\�9�o
fr�{֓���\Pz�q礷7�}b��m[6��<y#	��W���J}C�m�k��`��B��f!��H�����{
z�8ZŖK��;v�
SE���ٺuK�^?	�X�^߾��z����t
� |"=#�G�DNڸ���� ӳ~�̞��}�=�y�+*���tP
��F��C�c�
iξ����ՕzbIz�k+�}q0	��ۼ��ώ�T
+ql�q�K��
5CC�_���J�;w�U���]
Ԗ��؀��O�g���̍�6���
y�̾�ʋt��[~,�t��K�
��I83���9=��ނ����ʞ�aI��ج��f��'��`�c�
p���PxK����o�Y�Ͼx����
� �W�$�H�a�P����v�f?��я/9�l3sC}kp��w7l�նm�����u�������W�
8~�DzF(
+MϿs��s�L�9�U��싷X)��_ZZ,
D~K�Oc�|]���&��@zC\kpԨ*q�eNL�3�
�A%��Y~o��[��c��=7��]���� |"=#��k)�.�9/�ݺ��9%��@z�ۑ�/ �H�Er�sp�M™AvS��ˀ��O�g���lÀ�o�
�g.�R�q�
O���͙�S��
p���P��mp���`*ҳ#�_ >��
+ҳ
���Lxz�iמCr�G�v��(�>~�DzF(LϦJ�՗3�����Ԛ����� H�3BH�abkbqf0U4�U��. �H�=�l��T�g pDzF(�9f���"=�#�3BA�1�5� 
��
+z�٨��H� ��P�s�F}MEz G�g���c6�k*�3 8"=#�
�Q_S������瘍����
 �H�=�l��T�g pDzF(�9f���JBz����^Xjb7|P��&_aY�
^x>�G�]��)H������|v�H������&!=�P�Ϟk�eY�L^x>�G�.b�*���AzF(�9f�
�=�#F}
����I�3��
�
1���%��a���;�Q�.b縗���AzF(LWk�
�M�1`��LjӕD}m�����-�!�H�~����+�NW�������#@X�`�8"=�AzFj��l�:]I��F��Kz� aт
�����A����t%Q_��o���k/??�Ƿ���O[�����e@����
��4����m
��6�ϰ�K����/����0v�\��ҡ�~���X�ᓏw>�x�-�����iA���9��sbw����������1]��}�����.�lYEqq�\y�H��A�{�
ھ����?���h�NWR2�s��[}G��o����n
�]?䚡�?u����E���s�.�����@����K����l�Cf�9i�k+�d^��^5l䘿?f�(���c��f����z�{��gܕ�Z���IωU�a�=O_��9C�9Q"Nϒ%C�L���
?�����0��Cj�{Ѥ焼��g�
"ڷ߷�~౻���ܵ�
O��Q��Kϩ�9�g4S���W6���]:��y� =C���Ez.��0pœ� [...]
z��������l~d����!=G�s����a�Y.��z
=��+���T^|q��O�
�����
ů�
�%3�ƍ;Ě#.��[_ٳgg�H��ҳ\����ƞ�z�V����q���_�~�z�+
;�ٰaVyyנڐIy}�9�����?��
G�՗�;�g�Si7O��ߴ�F.�q�9r�M\�<`Y..)ɾ��;��������sX,�%��!~��^��[�n��UX^�>x�����F����9���!*��a���Q�g���xH���$�19FNz�	r�-�'3����h��{z�瞑C�̜7o�ĉC�\%�sii��Mmۖ�����g̨Izժ-r���O?�ԩ�����&��rsN�~��t��X����ҳz�$*+����ݻwP�E����1��)R]�h��K^Z�
�m�z�Ϊ�Uc��ҳ�,s:�+�.T~y��9t�F�ob����D���
�
Ff�
+=��O��_����Օ9�g�N]�J�j�3��6?��,���0�s ;'	}��eM�Fz�	����\�q�%�E��s�~���{x��
EH���U

�j���ϋ�\Q1\���t隱c�.\8U�o��c�|��������>)-))=�X�^�.����)ՌT�7�s����fndN|�,�-�YF-H^��
="���/
*�On�1���m�%٨�g�
+K�QÊ6/V_��ӏ�ܟrH2���p?���{n3�	*���(����s����IB���K�~|6�&�<s#s"7O7���=��ܨ����k�/=�e��2'�s�A�{eH�?37Dn�v�`��Pgn��B��
���{�:�q��l��,E���o����^��y��漟�%�H}�D�̍B_r�q�=����*�I�qD7��[����5���������{N��
j�$���A��[zV�Y����E$���f��'�G�g��dJ��ޯ�9�=��-=��,W����=��2U3s#[����;FY�Ē	�u*���VL���Ζc]�Wk��Xv���g�r�F�/9{N�����pm^l�9���Odw���(�@����>���G9�����
��9I�c�og��{����B����ܦ�f)�o
�^��
��ukE��_1,--+�͛��M2�YW�A�;���}Un�BM�z���׉��"dz��s*+�g̨f�.��
�_Kq�s��u�D�S�������|i�7S{u����Bą~]�*uC�̗���*,�v�m��X��!�����Rd��AJ�Ě7_%ߏr��8	='ؿ���IB�����3B����"�.v��~�k
���=7�⯥��ƨQU"CgNt̘o.X�`o�����.=�Qd���z���
%�/u�������LW	��t%Q_��/�9�g
ҳ#ҳ�g���F�ӕD}m����g�o4(�ʱ
<,�{�?}l��߿6��&����{zNu#=#5HW6R��$�k#��5 ='_B�br�C
�S��� ]�Hu�����T�79��x��b��q����
�)`�2UJӕD}
���IHϓg.�R�q�
�W���͙bY�
^x>�G�]��)H������|v�H�X�ݵ�P��;�����Kz뛄�
 	GzF(�9f���t�X������瘍�l*�3 8"=#�
���MEz G�g���c6ҳ�H� ��P�s�Fz6� 
��
+z��HϦ"=�#�3BA�1[r��g__�º�����7����4	��������G�v���]�NSr�+�3BA�1[r�3r%XIH�f��%��79v��]�N�e�+�3BA�1[���i��kI,�tI�y�g�j�R��7�����a��˹��iR�~EzF(�9f#=���l^M]"={Cz���l��H�s̞wˬ֠���Fz6��.���!={Fz�AzF��9�ϻ�>Ř���/�ϟ#*�W
9��#�;Z1i����/\^SZ��[3�����e���
��3ҳ
�3"`z^��g0mJ��wfH�A<��S��}{Ǐ�߷߷�?�TQQ��GȐ��=��%?��ұ��#ǚ��
;zD_Y�p��u5���>}����������[zN�>���/���{��s�]'v�k/??�Ƿ���t�:Kl�O��n<~�k�ӂ=�݈l׹<�&m�{0fHψ��
���S�{�f���7�
�����sH�Iz^:{���?3��~zY]�g���:��>��#G����O�%0=g�:�*�W

6R<{���"���}}��n��Z��#��99{��t#=�#={x�G��*�kYZ��-��Y�@k�m�mOn����.E��0e�
��a�aW]���?�-�?��g�o�-r|E?�xo����N]Յ퓏w�G�~Z�}����1�<-��O�rB�e<5���Ğ��OR����Y�t�<~ղ<K�����F��7(tx���̽'���\�g{�gO!ӳ\Va���e�{>|�X
.R�
��Q����K�a���Z������什�8"~��O��O.i&����U��I��e}���'���sz��S7�3�o��g��Ӗ�g���
�[E�x�W/�{�X��gә/ߘ�|oz��O�6���ڡ�v�n�hs<r�L˞Q��ް
A9wx,�yƝ��޸V6X��k���.��f&�;�Ӿ�|�g�{/!c���!=#$iL�G��T�gϡ��ijjR�ee%����&ҳ˧�'�Vq�Im[����O���kV��}*�gޑ�M�Z�X~������� ���e�Az�7�g��
���-2
 [...]
��i�b�3ϱ��җ�KJ�/�G���a��L����>QyE�s{]�>NiպMΗi�3�G�{C?������n�^x37��Yp�k+-��w`�w]P37��
��vN���sVox�������C�z�sbEpf�?��v�K���ұm}���e�3��;����~�=T�!=�ߒ�Ԟ?�4>=����77������c���.ظ���⢂�5�-I�R�\i!/��{
�^}�,�J
�CY��(��(7�KA}k0�}b�F���엩g8��������Օ9w��iO�T�Nݓ��׾����!=�w�y��` {/!c���!=#$�
q���#�E�y� =Cǘ�ݤa�s�g}��-�oz$�̍�ƞ�?~��e,�ӳ$2����9�������
~�={�����W�L�{S���0��-3��2/b�X>�}���s��$gT/-�eZ"��V6{C_��ӏ���r�6�g����u>Ǟ}
��vN��xH�rY�Ў�Y�׍w��#.Y��b߾����.���XnhhT��С�r���/��Ql_SS [...]
+�IZ�{.(=��m[6��<y�Y�g���J?�Y�c�҆���ڝ׻o��1K�
�
�� !37��|�z
�w
Y\�
A�T%�y�:5�)�k�B�・}���=�=%ރ1��ɐ�7�VmȄ4��7Z��Kϕ��3fT�
�j��p���ڤ���b|۶-S��i[d_�}��
,�Y����UU7��}0��Ϟ���%2��Cz�`�K��-3|�c������ӳ<Y��,g�y��`3I�}��`�Q��%?���ߌV���Ryg 9^�]t�0a�[���s�37�'ٓw�_�eϨ�c�7�M޵��~�y�u�{�}��ī��vsϵ��`�XW��K���o�dH����Ѧ?:�犊�"��5�ҭ{��_�b�رs.�:q��y��8wϞ�-����
�9(��A�f��s�+=;~�_�}��.�������Etxi���O��g�"*��Y��Z��2�X^�ej��l�Z�s��5���O"W-��{i�u�Ǟ�콄
��vN��x���ɚ��r�F��d
��g�1�{�K��w� [...]
.]�f�ع��gd�c�r��m�o
���B���b�)��l^M]"={Cz���l��H����6=7K��yԨ*mE�---Av޼Ic�|S%ڷ��@�cΗ������D�͞�!ӳ
�r�H�6bKKD
�yɤ砘z�'=�WS}����
�X�s�}��ǖ���k�%v���s��
��毥d�s���H���5�=4�g�~6�ܐ1=sbƳ�
�aÆYݺ��q7��vS����D�=�H�ƞS��g�gD*�k0J��L��dK��q�"=:�_6gJ�O��ʚ��ȥ|��l�3��LϐHψ��
�ɔ����ȥ�o��-���d�9��u�4%g�"=#�g{�g$� G�g���l��d�� ��P��
FzF�PY pDzF(�9fϻ��;aA��`**
 �H�=�l��TT 
��
+z�٨���, 8"=#�
�Q_SQY pDzF(�9f����� ��P�s�F}MEe����瘍�����#�3BA�1�5� G�g���c6�k**
 �H�=�l��TT 
��
+z�٨����g__��:���@���o�q�@lH�E =��obQ_{�o������ ��v�]q7@lH�E =��obQ_G)�o��y��*Q�ߙIm}��P��
���`ڔ�>�"��o��%]%
+��Q��
 �g���l��,�����(���3BAz�Az�HW	Dzv����� =� =K���P���F����Ŗ����ȑ�A�*��9�}�#ee%��Ó���� =�h���ݿ��}v�ʠ�Urr���t��������*��<zи+����
�T�g�����z�{���r��$#=������x�O�3��l��y�9�w�8�����Z�V���[z�
]:��3t4�-��D/���
^���zN�+�~��r˥7���,��M���v�
w��{|�晞E�
"=�

v�"={ +�t����{���
����:���H&���ު�lhh�:�;�׿��^�Jǎm6l�U^�5�(��/�@D����k3�!=�e=C�L���~�uC�]<��5k^k�z���^x��e���l�˥�-�6��1"��ǎ�-/��e=�DQQQ�ˬ|��q�<��	7O�v�m�o��w�?�w;U<NSS�e�z��<��/�;��E��o�1�yڸ!.���k�
S������3!�=����nܸC�
1�e�*���|�'��JV�?q �Ȅ��
:Z^~�e�����w�֋�WUݸ{�A�����R]_ ��'=�=!����
=��7Z�p��KJJ/XުUk��E&��k+<�������g��

:`Y��Zn<��>��<5�,��}��*F�?�O,�
�S�~j��ݼ:cҳO��J:�-
6=��
x`���55��Vm�
��ٞT�
de�	6��7m�P_#����Ȅ��W�X?v�܅
�N�8$��
QϞ���!���s08�Z��X`����l��AIq���g��o��Z��8�k5�d2���k�������-�w˻VQ[=�>sCEj��ꟃ�y�zv9��Ș��y���n
�]?��U��Ǟ
�U�g?/BsE�p��}6CI���ϼ�L�ώ�Hϲj�N�{���z�F��D,w�Ԏ�
 p��`p>�C���9�������
��ܰ���Җ"47����;g��qC���D�qy��=fy������&=�_T��3��=��|�Ћ2�|k��\��Ԥ��س���{
Q�=������ 
�s08���ҳ��r���,�oŏo����9��z�_~}j��-CȊ���س
ҳ����R��s�Z�t�� �A�T�
<��w�;��՛��3'�y����D��'	�ʲ�����}37 �!��
�
^=�
��O����on�s��?=;vT~�O};�~��>aZ%c�����=����~�V��Ȳ2��\h�+ŏD�.--2o�$�}�'�g����A��

5�J4sbfΘ1�\����v#�����{�>x���D�U��
����̉�����1}�Y�熺uF&��.u?���jV�ܮ���O��)�=7H�
�t��rU�n��.��99R]_ �7=���߯I���24���~�琐�%�U��
��� �*=��f��z�&�=!If��罐)�|�ߢU~�:jT�ƍ;d���]��ݥ(�@��ݺ���6���毜O�@zN,ҳ�T�
HώR]_ �p��ԣs����
��wz.�ںuK���R,����/ѻ���\�o_����r>
�9�H�6R}6 =;Ju}"��g��W�X��z�V�����/����
�j����s�aì_��uo7�|�sb��m��lxz�iמC�/SR*���(�={���j|� ���[ӓO�t�y����G��-[��s�ޜ7�7��<����˽��5������'V���T)�o��y��%[j?������
��/�3%�V �M����w��~α�̉��#G><g΍ϬY3�������ƞ�=��Ah�sl��i���o ��&P�����Y  $!�����a������@޺U��7�P_�[��{�o���ohhT�{��+��
+��T�g p��5�}�
�^N�����sCm�=7 7H?�"=����� =�Y!����
 �H�� =�Y!����
 �H�� =�Y!����
 �H�� =�Y!����
 ��I�6R}P�3�	ҏ�H� �(���x�������(��T�g puzv�YH>�SS����@�8NM���<�����.�e��>�M�B_����Y�ؠd�
�- 9�mdH� 
+�qj�$�gǯ�$���.�j|��Ջ
J���oA���f�g �85Ur��i�Bm��?�$�'P&��jV/6(9wZ���|�62�g �85�ٽf(�Ջ
+�9<����@�8NMEzv�Y�f�b�Bz�9�gP�@�S��:��Y� =�׬e�z�A!=���
�3(T ǩ�_�I��N�2=�_�#��.
�Z~j��?v�bҨ��?_�������m2�
�z��hj
+�eJ�^�3��Z<�X��^5l�B_��v"�N�9=�t��o�}��o#CzP� ���E=�iSb
�3Czv�,KgO���g�]���у�
Mz�&i������G����[�~�����K*����7=�w��o�9x�g �H�6H�.�E��1�<-Z��:�ϵI��bL�ɔ��4��p�{F��HF�f.&�7ɿ1~P�qI�6H�.�嚡U��I�T����e�����n�,��_:T�
;�
=��򌳾��v�)��>��e��0o�O��n<~\�Jۓ�?�xe��z���e�����C���&�T-\ާ�7�B��X^�hՎ���7ےNr�Pӳ^ ��;����ߗ��m��㝢��.^Ȱ����Ο���Z��˦�ݢ�S����/߾
�t�ٲ�n������~��
�;l���E�s��=��S$#����{����r�!=� =;�7�g��
��#��۴*iYRl@��PqQߴ�F.�q�9j������⒒�K��l��
S�_�ss���N�".�f���BeZ�n��=�� d���t��g\�L�/�2�*KV1��O�K�L2����U֪�x�
;u��N ���l@�$�����[��S<��k[*r���5e4�0���zf��ؽ�%����n
+=3�74�TdY�9=��}�����.�lYEqq�\y�H��A�{�
ھ�����B��ϣ��
����77������c���.�6n����CFFq�Wh�浗����[Է��+�.T�|�E��
�Ѿ��Os9�!�;=�&ɖ�4��
=����훭/�yue�=�'�ҳ�`U8�G^7��;�Μ��S�$��
�~���8�Ϊ��T=����Hυ!=���
6ҳ�+o�w��^�
pr�2���@Q��E���3_���g�ȸ;d�ks��'�r|Ѳ�e����G�����ҡb���
�JϪ
��54h�l}��O?�s��a�(�=��'GI�)0���{'	j�s��-��9x��g�/����%O?>��\�sHH�a#=�8a�G���Yh���M��"=G�\2=�Y*萑����0��}�aE%�H�>(+բ���=����]9ۣ�1���IN��g%�o
fώUS�
J�9Ǿ�qu�@�s��-��i{��֠�琐���
����\nۃ�Q�\U�
v�c��y��GW�X_SSy���*�
:tTn �o/��Q���`��^2oܸC�1����={v�q��
�s�7T��Yrs�̸sҚ�V�+tII��?�w�
�ʾN[Ʋ���[~���
}^�}{,/AeA�f��l?6i�z%{{��'�ܶe�j����qr6 �NHz�~�E�?�yϪ�om�o#CzR�n��3 ='y�f�ez�Cdhq�iۺ�Oz�瞑C�̜7o�ĉC�+�sii�
�ڶ-SQ���ϘQ-��U[����*~کS;�[MMM��e�s�
+����v
+򂭆��Mi�Kn?x�ȗ�/q?!��س8�լR7%�|�,���ͷ��7�r�(ǞkV��'6K�u�� �?N�/���I���X�[��S���w&�Ihz~���|���짾i��b#���
�f���������}X�Ш��f�E��񽢢��s�~���{x��
��n����j�Y$憆F�~���Eh��.EX�t�رs.�*���1c�Iz�Kr{A����AI�ͭS!���R�?IϹ�Q�E�KǶ7�
$3t�{���xGz[�O���{��"7O�~���:���\WW��3�"_z�#�r�F��t5=p`�
��\�sZ*��_rJE�$=�~F�7����?�F�n'�e��i��"Zn���r��M���K��lnPo�,)��x��{�d�?=��{��
>{'�9Q�O*?\�q�$�*�W:��7���G:�=�g�==��,W�Lϝ:����f��'�ȱ��r�L����;��g
��=�sB*��?}�A\����>����_���Iz��������_v��O:�E�V���_��+�6� �y��|7�ݶ��&�j���^���d��WO��r������m���X��ٰ���n��a��V>��7P˲V�k��+�r����+t��7��
��W�]�O�f)�{n�
�����n�0�[����Y$c����b�r޼I#F\¼g]r�sZ�
��JfzN����T#=[]y�<KnVDn��{��+?5�O��]�ݠ�7	Ͼ��
%���s~�4�S����
��ܿ='Ϸy���>ӳa�7������.��%��Z�C��{�L�9��7n�!b��O�-h����)	�y��%[j?������~ٜ)��5�P�/��
+AI��M/������qӶ���'3��N��}v�]{������V7-+-��7	�wCo��N<��a#]ޠ^��㗅3���=���
۽>�_�
v�o��*BsS��~��'�x�]?��ܥ�9��#=��0��BP��rd�oɹo#���,��A%r�q�/pA������V���[N-|p4_�
GI
��{��	v�9��ڽ>�_�
�6��9���;&L���sf<���j�8�9�H� `����W��,�41�&r�$<�
���f�K��
�g�{����9��ۼ��?�{6`���|A{��}+��)���,��$='
� ̖��\�Ш��,zSut��~��7�>��s����{����r�z����w��|;'�{n�}�����=��r��F�|@zN�3 �-��9[���j�����{�x���:���T�g 0��
�s�H�!IZz���̮=�2�^H;?O�x���Gr�� �X�g/�^���y��(�OzVrN>�
+�
 
�,=�'��
�H�AI�ɧYa���Ԥg��ͧ���@���I{gBz�
v; 8JMzR*�w&��76�ܦ4�_�w)����gS������k�\�����ߚ��&�����#
`�Z���"��3����	�����&+���D�a֠�h� :��G�fȬ� ����DŽ����:t�~�{Ow����EuN�v���s?�w} 
 }��=eU�N�s_7�c��ٯ� �)�g < �8N;  �{�����{�
[������sޔ�
�)�|  0�
��=�!�C�bq~���  `
+�  {�C��"px��@�  ���� �g=`�bA�  �����M
ش�
�p�'��S�H�s��m[5���!�����������t �_�= /���������K|����=�VH���[o��^N�9��F�G���
�̱u5?�+,	�E��3J� ~�
��<�Zᦏ�-���zG�[�P\�g�)�Y ^�Z4�\[�Ó#��J�yΫk���[��Yzivo�-�MIE�'�Q`� �6�g ��ȱ�ç�����/Np1
�+��z��#�N���xpݞm�,-�g  � ��Z�Ύ��d�Y ~�����&�#r͞�?��G���3�WV
$˭�&���V[�c0s̥�I�#��f�t���eب�GI��yeͲ��Α��u�={=�瞫�.'�K��,_nj"�N|C��閰
�,-�g  � �9P����5da�9YR<��=o\:��l��_�B
:s~�""�|���,� �<����/�;-��{��=�
S3nޢ%���̘�%��
ZHM^�ݩ�j��{��;w~�������ך7O0mw �3  �
�>=��O�>��P
z�{�,T=.������/�=1�]��\R�1f�������R�+_�xQϞ��6M`G��){>]}6�%S�
Pݜ�g �_�=�v�.�Z�;��@�z��޲{Ǟ
+�����ǿ��[R�H9�}
��s�o��Om�8{f��Y�j6(
�grQ�OZ�,�1<�wh[+7`�  �=`/R�z+j�ZWzV��\���
��QO
��=�պ�~gUe9-��l ��3]�
ڎ��g�U�/\��������ն��$%�ڷoI�n7����_EG��ys0>>.�`(�g  � {�m�[!��.�3�f�(ʞi�3oҬ�9,{^0;�l��U��*
 ��x�]{�����"ԞϜi��mƐ!=�'&�:��ډO��>q�t
[g���
6���/*:D������� �g �E���
+�+=ß>>H��y3E�u4Ӭ
sú=����31���m�=8�i{V�~9P]wVj�[�|>a��֭{z�����
>�|�m�I�ҥ�iG�rP�3  �
����mE��+�Vn(����Lm����9����D�G��M���ې���&��� �pڞ�����R�3��;س��=�,�q �L۩
���y��R���$4� �=�V*�@�<z{�޲�E���Ln�|��M{��
+
j�T���ߴ`�&�Nɯ�U�d#yy�D��	��q���uܱg�>by���!<d�z89��ر�D�������֬ٹoߒ�
1� �`�b@
+�G�|l�~�,!�� �g1�?z��me�‚C�'܎�R�'n^���NaϦ�� x՞e���)�#,{��y�3p(���}���r��j#�=���MAo �ўOW�eS�2`� �˞�z#��}`o	]�ҵ;����:�3
ux��Y/o�N�1lt���Þ�)�gS�� l���9�۶j>3cP�
)�����
d#{�3ʪ=�1�>�ٯ�g���
�X�^{�Sv�a����9�M�g��Y;yIRR�}��t�v3?%���a�@��+7,���%�a��^Y���ߟQ�v��~/��JI: @
,��ƥ�"����ێ
;�~��9?_m�� �ĉI{�N7�v�ӹ�O�C�/^\H'�**:�f��2
�3�#��i����Y�9
�g��\Y�?  OcɞB�
b�Yo*Z��g���t�WQ�NQ`�@���y�����mD���1�f/�3p(o�|!GI��{b�= �)���}�"�����od?6
�g
O����Lm����9����D�G��M���ې���&��䞁�s��3i?z�
��l�
  �8Q�L�y�
�Z�Q���{��T���
V�qc)��5�x`�@��
<�  L�מT��y3m�Þ���M��!�Ԟ�
ϟ�i��M��4�_���F��2�vG��{
�
  ��hϛ>:��r�j�g���;6���r��9=�ߚ5;��[ұc"�� �{
�
  �xu�Aـ==`��C�� �س`�@�挀=`�  `
+�Y
�g�����#j�؏_�= �)�g1��AL!�g�{�
[�
+ٔ���sޔ�܎��g  0�
{�+�g#����-P��9�� ���Y�o��"�;q ��{��WRo}1%�={��
+

+>\<�
+ v�=[i	 $�l
�s�{��w�+����+�1 v{ �
��:��p�"� �Ƅ
�+�����.��g @����{w/^P�3 1
� 6���)��s_7U����OV����O\j���:z���݋W�
@�{ �M���Ğg>>�whس<�ޞ�763�������$h�:�|�̇}��I�aR`� ��� a�=�ޡݵg+6
{�c/�����!��귰�Ȁ=��g @��?ҙ��}�����C�zu�bf��_��"�#G�޼9X]]߭ی!Cz��
.1�=s�����m���d������� 
�}VIV#+?��}��_C��:d���V��-���fm���$>>� rس�^6.�􋜷2��M
7�wh׋`�Z`� ��� a�R�BhӲY�c{�?ӂ��
�
�������x"��[7g��Mܗ�ߩ�M*{��%n������u!��t���H���{��
���9��B�@<��V��_e�A��g�МW�����V����>�
納]n�����]�ͫ�ޞ=mSƣ��f��t�"yI붉��u��6�홆tw�O��VWUV���u�={=@Bƣ:U����a��9䙁=1�g @�8�{��

� ^K[���U�[�|>a��֭{z����u�|����ګ֡��Gb
�Yo/��٦��F�У��S��7r�W/'�y`o	]�ҵ;�^i?'jx��V�
���Ŭ���W#
��5�%��%�J
�g�$�z�K�u��7$�-[��Gu�W�a��LS{f,
������ a�|�3o���b
�ܳAθ�
z�L_[_�H�ȑ��rrr�:|�•��{֒���t�ِ�"ݪEB��x+�L�$m)�����ӂ9��F���l\ǔ��bȄ+�ƾ��-�
��홅D#g�gm<�����F���Kwm
yf��;���
����S�:C��s�1+�̸8��ƍ�&�.
1g�h�g�b��6{j�Eb���=k�SV���ߎW��	���̌A���p*7���4	�ZM��V�3��Ɔs�,�

J��&&�e�,m<*{f�k�� [...]
+1�ѮCVPEBt� rس
�f�u��5oN�#E	��;���L̺;��ae�T��g���I_�+7����=2
��B���R���=3P�
@�x���7�3D��Ir��SK��s
j�܈����_���g��xcnPMW�V<A_�f�}K:vLĘ¡��{3�J/�`vfi�6b�		�`�g���,��#U�[�=��Z
+�d�_�l
��������
�
@X��}
��f��Y������7��L2�J6܄^�3�p���a�?,,�^
}��-)b�f(�>��Q�n�Ƈm0�;3�=1�g�{�{��9\$�LU�ak��@�
 �9*����0�g`�g����E�^��3 1
�9*bО�Y�@O-9�g����E���{ f�=G�ٴ=2�SK�
��o�r3Þ�#�Lݶ�> 
y�9����+��tC!g�3���L�t�N��rT�8l������Ϡ伲fY�st���@ډUU�h0����D<񬞭:\�{�)��
S
�<!dSr��>q��,����<��Bڳ_A�
 E^{V���Q�M�`8L:�O0'��S����2��nZYq��v���d�y����٠���U��h�y{��f��J��x�Y���L�} !'�|����4 1�,928����>Mi?y(�p�Ї@ �����7/+J>��O媄�ݔ����TVm0b(�^;T�6����A5�lH" [...]
�y�x�Y���=��v+���i�X~W  L�ў�}�
+>�2�WX�g����z��Ҥ��ܳ^��I�p'��ێ�L?0hK�aϾ��Wpe ����zݳJ���,ۿ{U���C����nj=���X��l�K���f�
��O<�w�{���+��  `���Y�~�
6��*�ˬ�g�B�nZ[��ܳjbU�17T��F?��ijz'��璢�i�����i�X~W  L�מ��s���
g�����܀=�8�_��  S�gE�a�a�{�
8�_��  S`ϖh���-
V
+]��{���+��  `
+�ٷ���}���
+�,  ��{� {v ��+��  `�����)O�!��Ua��
+p,��+
  �Hm��y���Þ�=�_��  S`��:�����٦��
۵�����N�s���
+�,  �{��?i��ok>]���Mn��=�_��  S`�@0��X at lϐ��'���)�1��)�
����/��� `+�g �s, �g����n$��xe�}Y%��  [�=���c;�y�Sc�lMZ��ݢHo]��y���@�@�'�Q���  [�=���c�s����  {��=����=��3  �
{�`� {��g  ��a��?9v�,
����
�~֣K�@|���+^�vh@<�
u��m[5W5ž�!�+K������]�
�=�>]׭ی!Czn�
������Ν0`��ߟ9z����ڠ�(�{ ���v�.�Z�1'��c�����{��ƽLn	�whس<Dpe�[36�z���x��= �
+�clṕ���;$��t}P��> ➁���3�аgy�̞�OZ�\���
Z�=��
 ��3Ƒc'�O�c?"��chϰq�p_�>g=[f=l�
+�̞�k~
5~p��}/+�KJw���+��uo���M�������@3��ã�g=�M�Ț�
ye񪸸+*v���.^�H�3
�D�
���Ɔ�f<^��a��!�Io�ڽ����v
h$!��!{�ʞ�>;�?��~d=�ה��yܸ׷l���d���wc�{�L]��ymݺ����п����W���#{S��o��=�e�3  J`�@$Y��ٱ�\A���ОAġ[��b0V�9!!����E��Ԥ���,�6w�,j�;v~@��v��V�;S�Z�zMW�y��Q���n����\A6��_J��6i`�Sn58�s�
 >�%
+{�3g���
��2'O
��.��@ ~߾%�[7g��xq���I
�
��ә�69�
yUSS��
{ D ������x�7�g�s_�p_������������r��ŋ���xMm��������<tqIo�D�7�q��CG�d�m
'�g>9��m�M^�iz[�sXW���K|ɖr-��f�J��������
zon����,�L��
K�}����4�#�K7�N��u�&�������
 ��3L֢w�[)��&ʺg���g+u�z�
4#���Ϧ��
����^$vK�W�>�lj�|��Z�6���o�9��g����h����+:�z�L3ʴHC�Z�������P`�  q���u��Ɇ�{ݎ�
+#�7�!�� ��ƞU�
*֞4����e��S�ӳ��\����vN�U�*��v�ڳ�%�M�=�
�M>�X�g�#�JtO
&'��?��ɓ��f���3�`j�������= � �
����Iޟ�%����]��ꔨ��UO��y��zu��ϛV\RD<;!>���
�b��ش���g���A�pu��17ƍ{�㏏�۷�c�DS{&fL1
�Ic^^�ȑ�Q�
 ��3����`f��a��z���'�q~�A{V��)�*̏�ѩcg���17�6�{�#z{޿��h����-z,��
�� ��3��3�f� س?�= ��gy�j��:]�3��9`�� �
 pڞ�*���S�3��o�/�`�m�h:xs���� �=�?��3��o��I`���7�=  b`�b�M
+{V�Þc��j��
��ߟ!���o�^�B�� �س`�b�=K�؞a�‚C�'�lJrR�'n^��vF������,�u �
+�Y
1h����c++��>�漺�l]�#�t��Ϊ��v�7�+,���<�9��բ�G&fe�z�b�g��h<~ř+�� �i<c�� ����7�j��v��fk1h�o����zy��{K�B��݉=�'$������j� ?� �<����/�;-��;lt��0`ϒ��+�g  0�F{~�`W�{o�s_7��,9��3�Q���+��9�������L��g��
�,9��{  Sl���9���U{��� ��b�Y,�g%��
�=3{f�iس�����3  �b�=�e��B�yܸ׷l���d���w�N�J�h����%d���{�3��7}k
�3����5��ӑ{�`?~�
  �X�gQ{���+���9�^���9y�`�w�=���-iݺ9S�ŋ
,�DL���]������mȫ�����eس�
fg�o#r��f�y6{i��Cy{�
9J�>@ݳ�����3  ��=�mռU�+V�=��u�ᇳC�ޛ���r}��=c�p�k_��}"�����ƍ�&�nݺ���?����=G?��g�~��s×�~�
+�  Lq�r�x��1}ɿaSW(Q�s}�yE��BϞiF�i(W�9X��

+��z0�3��ǯ�� ���y3YP�~j09�����N��_4slŞ�SKG��uG�Y�3��ǯ�� ��9k�;�wtb�L����ٷoIǎ���L̘>bēƼ�̑#{��Y�3��ǯ�� �OΖ����Ӈ-Z�XX�s��3��ǯ�`�y�}�a�^[ň=�My�o�P��S+
+�ISp�D�$ۍg�Yr|fϒ���W��
1�v�J_o�Y�^�U7���%�V�72�7�8o
�g1�ƞ�,,8Ty��(���>q��,�� ���g�
��+�g׿3%�Wd^	>\b�`E��%*Λ@����,��3 V��gX��Q���k�(��g�ĔP������ �go{1�9b`Ϧ{�[ĔP������ �eϦ����r��6���
Ҿ# �s���M����)������bŞ-��zўQ�
b�s����^>/�
��CRk�omu
:Ij]͏�
+K�f���'�|ؗ��D
&%��}������B0'w���p�(�8� �&�؞=zެ�#���{���@f"�
=r�d�
)�vس$8i��N�E�[�Ӧ��;4�92d�����
٧W��s^]�!��ܵg�7������
��D���k�{ʪf>>�ѡ?��aϒ�=��YO��y�v�{mس�YN�gـ=;� ��ƞ7}t�,���&ޡaϒ�=��Oo
+s�Q��)fJ�Y++��>�RϠ���pN����;�*��%߼�����&��䣇�f��t�"yI붉��u��6�홆tw�O��VWUV���u�={=@Bƣ:U����a��$䙱՞�
D"�����ٿ����N����][�#9�a��=�%]9�5�r�������I\�
r��1�r�D`Ϫ�6���_�?������,�~ V��33���
�+�
;�~dml��5?�?8������%��H�ڕ�����U|uds�vҷ�u

�>�l����@�
�o�+�W��ő���eO͘p�j����$����R{�W[W]y�+�;�ڶI�_S�9�V���]�W
;�ܮ�G�
��	i�NW�
�+�ЭZ$4K�7PZJ���-�
]�vg��u������[xC�Y��L̚���#���3q�]=�e*Ӣe������8l�N�ajό�Ì�`U9Tzɂ9�ߝ��dDȨ���ռEKr�I�
�L+�vB��M"$���y���	{�b�  +пPQ�ޑR]wť��9!!@l�E��Ԥ��,�6w�,��;v~@��v��V�;S�Z�zMW�y��Q���
�o��
w�>5��'��]��o��Gd��`aτ=eU{���w5|��`ߟ���9?_1P��
��CӖ���/�;�=eEVزq
{�g.�Mh�پ�;�b�ke%j{f!�ș�h����}�o
6�\�k[�3����.
����'Y4-g�����D�=;޼už��/ �
+�r�m[5�<�/�7l�
+�B�ŋ����Vo��^���,�C��f�z����@��Б/�j��...�y9}acc	���d�S��,
����a�
�д�Y����R+ʿ7+W�Y��E�j�t�J��~c�9���g�P��61�-{f1h�Q�	K
��/��~e�3CӊN�=S�YRZ3���NH\�ID�=;|޼už��/ �
+��=3o&
�Yݳ�=�.�Hs�?��g/|8c诟{�3���o�Pm���g)%��3����М4[NLL�=G
�gޛ)a=xG����uwj/>�����^4��|�6����'C�����Z1'Un���S���XVR
��܎q�n�$B�������,�~ V�ƞw����L�؞���N
N�^�r��߿�9�V��
U
+� ���wߝb[�Vn������5u�
�
��ٙ����;tBB�hij�Ki�K�>�J�iň~�M��w�r��+5�Gu�
�֫+5�M�=�KV����m���#����	��7�{v��y���=K�_ �"�
�SV��=��fJ����(�Ӂ�e
|����g�ZB7�nTn�A��!�S�o�,�W�J��?h��

�,�
+�L����A	�k§�GU�����c!ό��璢xcSy�u
���N��\�I��gWΛ��Oس� X��
�Y�Z�LD�Wa~�
*�tͰ��`C|��5ȯ��7�84��CFl����AF�s�>޳EDUn��(d��xt�noݟ���}���a�^�w�'F
�9o�C+��	�p�hϳ<'��
�
�ԭ���qس)����+��g�=��oJ�6���R�oDO�7I��[�=G
���݂{��J�Sx0�z��ܞ���oW��ǼržC�ڳ�w�G�rKI�7�id~S��[�=�
��m�l��YOž�B������Y8rvt�"�=��s��ž���
�g!H�{�س)S
�<�b �Ii��yy����E{���� 
+={�=_�_�s4����,�X{;�=��
+��~�Pp�D�$ۍ��|sRk����
޻u���a|c�2�d�,��z;q����  L�ڞ�[�P����{F���$� �Y�`���=�|lH��zȞ�$�� �)
�g�"�C�,v�gg�=?�+
  �Hm�-�'44^�8�ʡ��i�LBt:�;���ԉo��5��,l8�8l�������弲fY�st��\�w���LmuUekW�N�xBNw�=d�Y�T���Ջ�g?�d�](׏��¶r�ڳp`� \pe �I�9-c���z�}>s���:��q���w:�z0'��S� 
���xd�jf�ʊCL��.'��[�T�*I�a�}���]G��k���p`o	
F{P4f~�.]��� ]�OH0
�R�=��$3�V�N4�
�ʩ�ޞ��i:i*
�
)=KƟ7
��AlB�c�\Y  0ER{>P����U���O
r����_2w��a�ӕ���e�:j9|&�M�N�E�S��b<_</mD
�U�C������?�S����(���j��{��IVe|�.��j�V�d�<[�����}6{)9">�NϘ��
���3\Y  0ER{��Ġ���%�/�pЬ!�;��3p(Yn���ؑ�
6������!��G�L����FW�iT������쳓
ҞY�ڰ�gZCr��T���l|�`�@8��  `��Y�yAUZ�'d�*�h�O�j��2͏���N�r�Kf��=k���I��=��ɐa��U��g��L�0h���=�3p
\Y  0Ej{~ c��?޳�R,��Y����m�0�⽊�T�-*��ei;}`N+�k�dO�U�		�#�
��pH̪�h��2�Ξ�g�dm�3/�ڰ��=�MLz��ٹ
��� ���,  �"�=G��Se����� ]�+6���"�5?ZO��ӵ�����`0
�*���l�N�}v�ٮU�`��
+�J���������
\W  L�=;�3㋉�s�=;p���E����Z~1�7�g�.��  `
+���g�){v�s�{�lغW��b�zΛ�P�/�= �)�gK�.~V_B �X�g����/��1�s���B��Þ �سo�={س�[��Q�M��ݢ�� �f<`� ��3�
�s���� {  �ڞ�,,8Ty•]�������g��3,�y��c	�9v�= �Hm� x��?�T�ilj��Ԧ��7��vL?AE�YN`�  � �g d����ǿ��t}�֎7�
K"��
;�zG��
�,�3  8 � �=?�Zឲ���~t���vس`�  � �g d�����d�
�аg!�f�>
�;�q� ��
��xžgf
��;vW
9v���
�؞�k~
5~p��}/+�KJw���+��uo���M�������@3��ã�g=�M�Ț�
ye񪸸8�|���.^
<�IdM�8���x�W��r����]���������W,
�j�za�0F>�ȑ��t��|鷿�/���� ��Y��g�c��  O {@F<aϢH�#��37�p��='$���hђ*)1ԝ���.�E�r���r�.��
+ugjU�T���9/�<j��z�KLL"����D4����,ן���L���T�~��qUH�=j�&�L�9�]�ͯ�z�,�hޒ��.)�t_�Sn58�rڳ��R��< <
� �=G�{n۪��1}ɿaSW(r�D=/^��RL*�,]\Rě���+6�q��CG�d�m��n�~
�o
#..���wߝ
+�Gޘ���1?6v"K��
�v_����
@�{@"T����Kda���t�Y���/�%�O}l�ۡ]G�u�̛ɂb�Yz�4#���Ϧ��
����^$�J�u��+T[ ���_JI�{�[`k�3i?��ɐ{��B�Y/Y΀=;���
�D�^���S5��ɒ���h�yGi9�͔���pyYp������+������Sn�M��[%�ܳi��={
�3 1� �8�R�I�OW��?\95��.qϰ��*�{
+�͔��=ާ}V��Gi�t�u��-��12{��
���uўC��
{ ��3 rQ������O����d��\�'$�5h`�ʵB
^��0؈��17�m�$���B�QH�Y�/\��#yKb����3Sf�� ���
�t
���
���EO�k�܍GKl��͛.
O�}�k�ڑ�e���#��"j��g b
�3 ұcwy֢w��C�}�r��� ��o{5�w�[E���jӐ�S3g��C��8!�U��k��cG�H�vW�  <
� �ŋo}���Wg�U�h-	��g޴5�`�i�Te�ѐҾ��=�1�w�nw��d�*���M�c�3 1� 9r�$�O���ݎ%��g����)��s�o�0�H��n��f�Y���|���TL��=���O�{�lغ��(�0b@�ySďvg�=!�bu!G���Ⱦ!�y{�8��i��g b
�3 ���x��3LYXp�򄨭�2)�7/�r~�!G�b�Q��3 @8�g �C�a��
w�x���#�
�Nȑ���s�CzS3�5ԫ{�= ,{@<�g A��D=�������A�%%��
{ X�{��$T86՘�{@��à�g b
�Y��P�?
+����� ��5{F
+|
� �= �������0`� (�� >�,
�{@1��;����|�^�= 1
�Y�g�˞�763�VV
$�}�yu�ٺ�'G��r��U���o^WXR�uy0s̥�#	<21+k�KV�
{�b<����٭q� 2 {�0²����_�<w]ၽ%t�K��Ğ�V�o�t�m��?�Gk��R����̝��
6:�t˰g 3��  
�^{>r�����S�4�|����ӏ��2[�aπ�=�e�˽�~���ڸ�xj�Ī{�z �0`�@fp <������*}�z����2�3?w��mž#��
�=3{f�i۳���w�G��= <��L��C��B	s������]�e��wz����y�*�:�����Jg�bs�*�٧�f�T�5E�l
9���]�W
;�ܮ��J�3`D�� �1?21k�/��Z��������=� �Q,ٳ@�C�j���c�		��5�-Z�d3��,�6w�,j�;v~@��v��V�;S�Z�zMW�y�����f�g����$��t���s�l�Sn5��
a��ٙ��ۈ
��-�9���}��/�()���u�2|%�3��`�  ��=+מ�+�L$���
*��B����%EԌG
��v�������#_2�f[�+7�R�����Ns����^
CȘ̞I���_�{�
سp��`�  ��\���}�f>>h֫����9hF���Mٳ>�1��ϽHė���7W��@������v{�/d+��A�`��p�=
G�
��]䡚xU���"mI���'\��'��!{��L�W�y�4�g����S�ӳ��\����vN�U�Bf��䞁c����,
�{$�w��j�����Euk��`yb��e�F��v{~��b��!����@��cO�y��̌�g
��a� `�z
9v2��m���s�t@;:���Z�{������&S�n^�<\Bv,~=X�<p��D��Գ�سr��y��+�d3?�:Cь�AG�{~޴⒢�m���KJ�s�
"@��TB{~��B�z��
�3��C�̆��=G	�٣ĠDRb��a�zHm��B��*�R}�'�=o�� Y���M�C{�[��`�Q{�(1(��<pس
�ga��^
c�‚C�'܎�
+)�7/��Y�3��
�
w�8r�$��9�i�`���z�%ї���������Wtw=�J忤Z���qO>D����!i���e`���������
ˑ��Ԟ�a����!�{�(1(��<pس
�ga��^�(�2���>+jk�w��P{��n0�g;FW=g���.��'��]�vU�Y�
*�OQ���qe�;��o����
GH��=���L����q]a�^j��:�왏�rS��G�:X~l{:X�p���3`���!�{ ��SV����"x�*�l}
+R�F7�]\\
������zO*��j��if� �r�
>x�r�ڳA�\��=���%r�5g���!�5��92<d�GQ�kۤ�s`ϲ{��5{�+�� 0��=3o&
������n�;ހ�Ӕ�ڳ^04A����F�#��
3	��g�rC�V%bp����
v�����x���Aa��I��=~R֬�`ϲ{��{��$T86՘��=�(-罙�=G9������C�o�
���=�wz�B�$�G�.�mj'��:����
納]n�����]�ͫ�ޞ=m)~F��mW�o�t�m�3���ԟ������ -��
+{�z@�~�Q��(H`U_�G���'�n{y�w���]��;�BZ�<:�
=
z*���PV{zg�o��ģ���O���~����(9L�*���w/�hA�moI[�
ڰQ��q�]伲fY�s���	
�/c`�z�`� ��eOYUj�ޛ)��s���[�{��X�g��h��`����� i;Y /a�
\2r�W�� ��|r��o0������_������%t�K��,���{O���~Im���*J|�{&��l�ԉoH�-Z�
+��(诌#��
���Ds�VV�0kk~T����78d��w��re�!�;���_��s��2�o���B�]w㻗_�?"�9�y��d������-�=d��� 2�=+Q��n�;:�? *�w��N����=C7E
2b����^bd̍_���?7X�CR�����7�`d'Ԟ�2g�-���_2wZ0'w��t�–��T�2۪�Z�y�Di�,*<39mH���\�q��r�m!O/[�ٳ�0!+7x�W
����.�=�!���3�ف��e?�84�	��ۓ�w/r�1Gp���a�z�� �#�����l7�۳
+�r�zs��f���*7��_I�T�j5UNZe�,9ǴF�,tҞYڐT&�r����T�'��$
�g��w�W���%�!��=,�LdQ[���9v��w#t���Lڿ;�ӻW�=3A���{ � �Y8
�gޛi�����<21���^!�@%p�H��$_$�p�^R�m�*�h�rC�{f8S�lGw*J�>�{f���
�$�+��'�gׁ= ��-{�
9��
س3|���
�xo���ɂٙ��ۘ�=�������3�'�,t�r��I5)�	G�W��g���=[�8�n׮f�Q���K����
�\��u��H�ݺ=k�e:��Y�3 �}d�=� �ٳ
я���@��Z8]а�DY

n���2$U���j|�cn���X�Y�0I�oW���L�Y�~T
+vz���E�17B�ӻ7�ܳv_�����= ����������2����
[����
�����=;yB"��Y�3 �}|<
���czسl���F�sl{   /�gـ=����
  @^|oϞ#'����Þ��=  �o��k�ٯ���X 
���
  @^<T�*4�P��-����������	�`�y�}�a�^���zΛ��Q      �p����5��     �1�ٳ��E���     @س0`�     ��,
�3    ��=
�
    �{bȞ���xMm����MMMl9h&d��g     �c�=��>K��Ԛot؞����3SfÞ    @��k�{ʪ~��V���0�vҞ�:?5c�cc'�z&�o�M�
     ,b�=��YO��CGc��5?�?8��}�uՕǾ"-kW����޴=����,^u��j�k�<3{R�W��j�:v�?js�t��6�������b�=    �
K�<3cpd[?�]ͦ���C���CJt����@���]��zO�<����E��Z{&f��_��ܳ^�ƛ�W���l𳿔����{ [...]
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      ���     �
+�      �����
+endstream
+endobj
+821 0 obj
+64
+endobj
+811 0 obj <<
+/D [809 0 R /XYZ 86.4 726.045 null]
+>> endobj
+812 0 obj <<
+/D [809 0 R /XYZ 86.4 701.138 null]
+>> endobj
+813 0 obj <<
+/D [809 0 R /XYZ 86.4 83.712 null]
+>> endobj
+567 0 obj <<
+/D [809 0 R /XYZ 250.14 46.905 null]
+>> endobj
+808 0 obj <<
+/Font << /F36 408 0 R /F18 722 0 R /F16 397 0 R /F8 409 0 R >>
+/XObject << /Im3 798 0 R /Im4 799 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+827 0 obj <<
+/Length 2409      
+/Filter /FlateDecode
+>>
+stream
+xڥYKw۶��WpI�S1ă��6>y�'�{�"͂�`�'��Q���w�!����8��`��73P
�8�\�z�z�J���t����6��H��(,���B��D���W�CY�u�˫�߼+�
+4q������oV�_���,�/�D�L��a��s
la�MGBg���w���
�VV�3�?g��DEBh\��*���ĎOe;�_s��I�[
���v��dM���#R$���#��]ߘ��d����:�e��?<
M��%
�]�o�a��wM~��-=��A��xŦ��c
�,
���U[�4ojؔ���:�4��E����D`
���b
�m_�֙u��)����8;�3��L�������k�
ލӈ��֌E���j���la:O�4�e6u_m/X+�pG�k�uoڟ@)ux�/JC��Le�bC��Nw4�Wn���/�"o
��a�
�`����-f��`j�7K�Dv��|o�MN�A���k�õo�B
��*���+p���p��\�tL*��8�Ђl�J�(K�0���"E�Qw�ېw�*oͶ@?�\�ɝ٣�ݖzod��<�d��kR��|�)����X���P�Y:ii����H0�Dz�]�@�slL�^5[|��6�
+e[�D"�
�}����>ޒ|ջ�h`���q&�u�<���Hgz��3JIb`;��J���k-�G
���G2�n�2p\K�nѲ�;�sFs�o��P�� ��D��_-�
̸+��P������- W�wUY�n�;e��T��.�}ݚ�O���K1ST[��Nr�
��� A �A #-�Ɂ���hI�75{�$p�4a�/e��n"�����3
;\����͐��4(��U�#C�*�nO���m�v�
�5kt�.��[��8�_^��#�!���X�ۓ@#��jW(¹�����#�.���r"N��\��ov�/W��ܛ���?��u�����=ܚ3L„'Hg��%��BQ8Ǚ�;�}���徥-e���|h;�G���EB�o�=�Q�YxN���m��u�#�f��P�$�� 
+<`�HwnN�"�'@M`����
��"o�pTTPQ:*�t큊3f at E�!w��L��C8K
��h�ʳ��Б��Y�!�X��3S@����P�imW�����8(S�(84�<8,{F��Z����B��
���&�ʷw�L�H�rщ]M�!��r��I�ds�� <��	�� � |%5��
�:���O	�t��+y��,Nl�
�p�k|�g5>p�
�1��B��@̇����c�@�Ĕ[�-ZvgzҖ��&�
+�纑v���Ȧ�fSC��4a�
_(�� ޠ��?�r	��
+tJ��P�� ����G���J�{6?
w�f��dj5!G	t�y ���Aw����W$

T4�.|���c�������f�[؇�R����V�K���X������|(
��'mIDI�~tK����ץJ�i4<ccׯ|������
ɌE|! �˭��>�"I�I�WD
t���n��c��B;�R(J�7IEFJ
�^�����h�
+&1-�6G�8�W;���#��",�����H�'�[�;
`

���nh�o�:[C�)k�Y���P��
��
��5 �A�O%�i����@��0�n��x���)��A�a?����T�fc�"�mk�k�h���

+����+�<��~g��
�m���%
+�\�h�b��<��T=��AM6\-E
KA
��o��3�9&�
��
����U�IR�\eS��PɁ
j
ҩ
�;�G�6S9�t�)og%�
)�#�S�e9wE�Dpa��^c���D���M�:	I�K�jSP�KT:��|Rh��	��i9GٚEgj9ޡ��ˢDL/o�y��`�c[2҃���6e���RcGo�Cܓ���d
m@�,��ˏ����΋½

�������P�Y�BN�1�Ɛ�k_w�?���JȾ�����Z�W>(��>7̪��F�J���x������#ؒ�RS
�^��w�U/
�k�b"��� ��!�\�j���.᠉���eh�x!7/��!�7�L�o�y����/�RGi̾�E��L�?��wx
p}ۑ�ΈFrz4u��{���n�t�05��_��V�U
�:H�TG(�%'
��)dž��;�p�Wd!0}�͛-�:�7h���7�e*�G;غ�C޴�v����^���W�۰F�#\ ^���
�k�P�Q�-߇�e�r����
 ����9&�D��ͷ�CII�~O
+�%lr�
��'����
��zB5�Ai�
']��L|_�R�l�M�T���J��Zփ��2��H����j
�<��)x
�ऑq��9�*sd9�
~Ėؽ�K ��;e����ҭ-�n���C1
+endstream
+endobj
+826 0 obj <<
+/Type /Page
+/Contents 827 0 R
+/Resources 825 0 R
+/MediaBox [0 0 612 792]
+/Parent 792 0 R
+/Annots [ 802 0 R 803 0 R 822 0 R 823 0 R 824 0 R ]
+>> endobj
+801 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./kinorg.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 829 0 R
+/BBox [0 0 735 408]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 830 0 R
+>>/Font << /R8 831 0 R/R10 832 0 R>>
+>>
+/Length 833 0 R
+/Filter /FlateDecode
+>>
+stream
+x��ZɎ#7��W��
�i�˱�P㲪[�=���j�6��>��'62ɔZ.I�4���$_D�T��G5�Q�?���:|���
jJFYm����q�.��9�Fm����˷�����@����h�-�ƃ�u��yo���ܛ8R-������O��%���AsY�����;C��S�9��_�
u��x����u���q��ٌ�租W�ov����{�~\�V��o�V�o�������z�y��:2`����ذ�j7|���1���}��A!
uF�mP��
+��.�~�>���Ra����zx�*
^�6�49�-��)豐�d<<[�^g���
pd+\�r
Y�d
z3_�3fW
�����C�Ƈ��C��)�Lq[��
�	�A�۟���7O[T�h��H�)�`�-������fGc�9C�b.�a�Ay1E���[����8�j��� qJJ�
ݯ���[��H`I}�mN=��sLH[(�����Ï�7zn�2'<?��Zύ
�L,<��{x��1�
+:��j�s�ի��������z�3��8��Y��hL� 
�ߧ
��i]:O�� �
kX\n��l-tV��c}��.�i��_rw���n��VY[�O��}����@�ʄ����}�����G�ڈ1k}�r9$%���+S�`e��<�K���K4�"�`M"���Pȁ֣B�!l�˸W�Ev2�T8kfl�!S��
b�*	;��L
��z�߮�(.Pn�� (������2�`Ne�/<�&��
�d��7����՜�>�C��df?D�=�C�`�+Ach��Țόή/s�C+2� %h�C��;�����
d�*�"*+ӗ�Ů[�=l����zGZӲ3��;��1�&��qҰ3|�hEﺢ4:A�tR`�؄q��
4��!�H�����:pqan�Lg�"��|9�9��1�9$v&U�K�#�<YUa�X#K�`RW�$
%�.,��:v�;]���H�aH�3!�XG� ӌb�8G
+��C�܁

����
#uE�s"e!�7#B��d��mq
�)|
Ŏ�F����C��҅��Xώ
��ϊT��0$!�rW�#q ];�
�
)l$��US.,���BS�t?{��d�!�R*�������ZV����z��2;t�5K-
��zC-u�wt=;�X\�]�1�&�̭fh�]F}�&q�uM���.�7�d����d�
�����
F
��]��/f��W˷HH�i4;Г��:꒍.�z�+j줍r��Љ�{)k��J��(8E(��sH|�75�
�4��,
8F֛ej�bua׳�Wt�x��9�-��RVەVGQ��#%6Ϙ��6(i���Z8p��7���u鲮gͯd��8Z����9b3it
D�NeJ�-W|.�L��yi���3(�8�.�Qi�\
۟.[�yH\4UN\��(����al�jȼ�O
+,�YZ
����z�UN�v={cT�LF��Ӗ�+��r�\�̶|�e�gĜ�Ӫ+�^K����|5��$��hi��r��X:��
hMb��+��2�}����~wsiW��4eo��x�c����[����+$K_ȤB'��
4

10�Ϻi�\&���T%�
+��.�
ƫ\dF�,~!�
+X�M� ����� q����l���]�}�0
�ԇe0G_V%

��2�|g�x��

+pB�H<���($!P<����Q��RV��R<�gg�a� 
���� v����d��,�w��( �
��C���p��:+t�j

��lFJN���s%����$۸�
+�
�
+�1e
��T$�Ȩ"yB�X%a�ق	�
O/�Cll�[L �F�r�+�a �fTDͨ����R�B�U�͢�ʦF�V5s�A5�"jArϡ���l�����i�SP��[�㭐Y�t�]��@Dͨ�Z�����R�B�u9Ϣ���F��7sC���Q��za�6�f
�,~_/�C�
z��f^������S�=�G��5���Lk��^$��c��5��nU��,�::7��"~
�;r�7����Fl a(�)$�݊�򱣢��G���
x�yaW�>��c�G�";�=��_o���"��G�-.-��\�?gu�xb- :��_����	�&��XH�Kty�L�2�U�{�������LE@�@OB��� v����dCʔ=��K�;g_Lu�D����j͑��?>���DWS
�hź�������q���^m������"•�� ��ϢXn�]��'���0� �c��テy���\��Kpx�i�����^�m �XC�����$�	H�-s�u4���<E��Ïoo�!��§�}��~
+endstream
+endobj
+829 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151029185735-07'00')
+/ModDate (D:20151029185735-07'00')
+/Title (kinorg.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+830 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+831 0 obj
+<<
+/BaseFont /SYMKKU#2BTimes-Roman
+/FontDescriptor 834 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 86
+/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 667 722 611 556 722 0 333 0 0 611 889 722 722 556 0 667 556 611 722 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+832 0 obj
+<<
+/BaseFont /BFBEWG#2BTimes-Bold
+/FontDescriptor 835 0 R
+/Type /Font
+/FirstChar 65
+/LastChar 86
+/Widths [ 722 667 722 722 667 611 778 0 389 0 778 667 944 722 778 611 778 722 556 667 0 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+833 0 obj
+2299
+endobj
+834 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SYMKKU#2BTimes-Roman
+/FontBBox [ 0 -14 863 676]
+/Flags 65568
+/Ascent 676
+/CapHeight 676
+/Descent -14
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/C/D/E/F/G/I/L/M/N/O/P/R/S/T/U/V/space)
+/FontFile3 836 0 R
+>>
+endobj
+835 0 obj
+<<
+/Type /FontDescriptor
+/FontName /BFBEWG#2BTimes-Bold
+/FontBBox [ 0 -176 921 692]
+/Flags 65568
+/Ascent 692
+/CapHeight 692
+/Descent -176
+/ItalicAngle 0
+/StemV 138
+/MissingWidth 500
+/CharSet (/A/B/C/D/E/F/G/I/K/L/M/N/O/P/Q/R/S/T/V)
+/FontFile3 837 0 R
+>>
+endobj
+836 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2025
+>>
+stream
+x�mUkPW�f��N���ԔX ��*�Q�1��1�(� @F`�q�yɀ���kf�Dy�(nV]�n�y���h-�jvS뺎n��lO��6&�T%�����|�~��N���A��W|v��0dG~nz����H�߃[ ��+L���n�/xy�ޟ��A�s��W��kBD�l���|�� ;K��-ݵc�������eUxx�,C�Î,J^���'[�_4re�*W��^/�ħ���}�,�V�(��gf�3���t�<G�5[��R�kdK#��V�\�*?��f�f
*��.���E�vȳ)�
~�C���Ȩ-[�m����]܎��d�:��XL,!����r"�XA�A�$Vok���:"� 		���$��W�.r�#���W�+���sJ���*����Ŵ�6qޮ�Ў��r�i']	vij��&�m����[D�n���c��c�Y�d��Y{,նZk�zE�Z��`��� ��CA�9�8â�m at MRD�
��=bo�z�|��K�����H#�P�c���ZW�t [...]
+�����$H�-�?R}�Zh� Z
�0���TY�Q�Io(�7'�BV�����; �Q��]�*�$U���=����o�[���q�ѰE�����b�!ڛ�#�ѵ���
+Q�#���Z�z�{���V���
����{

a&�9���
5z�dP
ZL߇V��-�r���ه(N�D�JD�J�-5^a���[J�Ԑ����XU$�(�M�׎� ������
+L�g�z�O�N�2��e�Q�V���PR��OmIiH�%'�
� >mY��+q��n��
y�C at sF�!
�X�S��7zv���D�S��+��`
���_����%6��p��[6�_k;��g�XLX��垽$M�}�"��r�ZW�Ȍ׆�.a��ri�������� ��A�8��/����|_��ڜ"�:�
�;�j4��=�����٪����u8�^�?��K�*1��R�X����ӰHφ��8��Fq'<c� ոϋm���^*��po:�I�q�I�u�p�i�n�5�j��[Yz��v���]ߘ1
��vK9V�od�q��G�w
-��Kp�����b at A�A���GX�
���\aR~'��/�SB�V^� p*�Q�߀A���P�Ӽ����џ���9���KIgB�
�
[�v���
+E�6R �Mqf�āg����y2v�9;>�q��M�1�.
+V���VW�T䐞:�z�܅KM�]W���_`L?�:�ϱ�'wR+%iŲ��C�l���o,{����:�C$JN��]_ߍ��'/Z
���E��*u �k`�
�N'2�w\Av����)�#>��~j��w�����y7

<-
;% ��$�X�Ks�	�^Z�q��n/f��`��H_�B��51ZKI���r�=�
#h�TZH�&=�
H9�(>&0�<�����>����<�?�+����M�b���F�oۿ�!�/
>,>��Pj�a7�w�D�q7�g��7j5Pȼ���:�2�N
PS��B�AI��[��VG�e8�nx�<��G��?����N�>��K������ج��39��'��4����1�c+ֻ����u&S����k�V��
�hDA����`��r�A�F���]T";��fnj�s��N�C�!�"��ă&��:��[~���Mö2yI�j���MI]��ھ�!�3�n�p����z
1�'|y�	{��A�
��rೳ]c�p����k�;Ƹ�K�t��\�f�|()Ss� �ȗF_�e�`�5�U�@s��g����1�~|5:��m�P7����B�|oT�]��%���v��ՙ�z��fڼ���đ,�
+endstream
+endobj
+837 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2160
+>>
+stream
+x��UyTSW
~�޳ ����&�**n�Z�Z+���UD �$�[�þ\FI�B@���
7��Щ˱�N놞3�Zk�
9�T���x3��
.��c�y�%������}��$��%�H<7iS�i���z��g�8A"Nt'�#
�|�c�t�W:y�#/���c>�
oA�8(~�r�HL��cj6�MҤ+�7o��>sf����


T�g�z�
U�i�
ʩ�!S�7���
�K�!d�^�MP&�S5i�8�J�rm��W'+Wi���Tc��?d��ݹs��"�ڔ��4�cJ�Aa
T�+תUڌ��}AQ�"8$t�?
+
_�.r�����P�d���
j*5��fP�,j65��Kͣޥޣ�S
�E��P����I4�a�ungܗ�gzH=�<.I/5IG�4F�ؘ��b��#	��	H��F�ıR�U�*��o+����v_#�y�zva޶b?
b&rOz#:��u¾?�N�B�
Ԕ�2PfA���
T�W�<�e��`��
*��+�ގ9H�����S�s!���űX��x曊�\�:M
��+
.a9
�
��0HL�4G��Z�J����;u��'�/��|Ov��tO�o�n3�.��i�W�5
�l�rN���Y�uF<�RA���:�tI��Jw�; �\�����P�+3��Px�a��Y�M��!p�O���}�>U��g9+ at A*��1�M����h���ָ
�x��g�8
�ᩐp�Jk�犣���γ��=��n�}B��jF
�P,��������0� �X	o�\�Lsyf��-Ÿ8/l��ۛNܼ�[�-���
�����;�1��� vG�u@�B�#"t�*�p<�";oӜ��T��7� *kx�;�$��FZ�:˘d�Iܔ�
�a&k����S�&̲��.:Ӫ$Lհ��
��¢sZ�'��[$��~
)��;Ds���y(�7�<8f�&�9
��/U���C��<��i�frAp��ֆ
?_��
���S������f�r�vIza%
�\wG���G<}��fF���L�!cux\[�N
{1�
/���
ƞ!����۵���d�S�H|���C
+�t��i������	Ha�;H�����J	�'���ԌY��
��r{7+�'<s�|_
Q�
���1d��A��5���,z�B$l9&�ԑ
�y�������X��e����
�`�/�t��r���z�v�+iInB\��$0!��Vt��h�S�58�-����PA~��R�_M>`^��A	>�\SKu�@��@낲���č��ᲂ�g�p���
�
�|]�����Z]`.f�H^
f���� ��x�;����9-
ژ_8���PԈn�b�f��bR���N=�.���ӷ�Z
+\��
ZWP�bU 0�S�͊:j����
+���*���~1�<g�
b;���vԚwv�40hC^>9Y��>��=��č�S҃�=]�Z�l �H�ۥm�(�ŗ��>�!>�)
q��CVs�cN Y�F�J��O�;�t��c�:�
�dI�Z�̬%M��׀�1�Aq���<&m��Ղ�`��2�Pӽ��G����,�_�v��47�3�˚s�J�I$[[����U�]E{_`�o(�G�X.Z��hom��kW,��
ջ��iY��P�r
��q�W.
#K.έ4��h�^m���Ȗ���
{ߙ�_v�C#,��?L'9؉g� ��{d��0����Yw��b�L��7~��#����;Y�w�Ix
a/B=�u6$���!bwZ1Z�/:h�=
����:bY6*�Yq

���&X
+�:[N��k8��˛�PȨ�EEA��>|�&��d %�8��v��#2d�c�m�4��
+���w��<Ur�bW��ty5I�gd�o1�}��)��s<�X4�F��0��JJrH/�wgԱ�ݖ���<q�2���`8xnP�9�Ǹ�](�o��;���*�S�S{�r�������ա�����szK�H��?�|�c�Î*�[KNf����=pڔxLޭi1�װ��tx�%`qՋ���
+�y�+=��o17�;��������V��
�� F�
�+q���
+��g��=�h>
�ɗ}�+Z��Qn+E�(��0g'��w��3|�4Pфl~���x����Zc�!ax�3�K�K�MP�|��I�I���f��'~�Yv1�Qv��
Pzvuyy���k,E�:�U
+endstream
+endobj
+802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [243.648 330.555 250.622 338.968]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [254.757 330.555 261.731 338.968]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [371.246 286.093 383.201 294.506]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [386.817 286.093 393.791 294.506]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [397.407 286.093 404.381 294.506]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+828 0 obj <<
+/D [826 0 R /XYZ 86.4 726.045 null]
+>> endobj
+568 0 obj <<
+/D [826 0 R /XYZ 140.146 447.376 null]
+>> endobj
+825 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R /F49 566 0 R >>
+/XObject << /Im5 801 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+841 0 obj <<
+/Length 2442      
+/Filter /FlateDecode
+>>
+stream
+xڕYK��
����Q�kŇ^�mR;[�
R�vU�{�%�͌,y$jz:�~����\�|������N�d���_~���]���v�O�"��.�e�)�{lv�F2����i����B�1���~P2j
�*��p�:���پC�
�< u��i:�՗�_Ov
�|�%�*�ݳ���*c	�v��ÿ
���ŭ�Y)b�g$�;�
��>Uu�UG�K��
�yTu
-V��u/��Ԯh�?���:���V�Y��;�s�?袈~<U�� �X>:�������^�*�"�O���_mc��Wn�;�)_E,�h�'g;��,z�ª;ۑF�u�yd�v�0K���
�A����^Z�(�/Ɲ���Ќp
�$�6�L�w�E�( 
����hv�G�~���֚&l��K�l����P_�C�"��Q:rx���qU��/ �N�Ѹ�J�%i�
+Q�ڌ#�{^��l���T��S�f�0�\ �{��K��r�T�(�	~�(�a"�8)e�϶vD�vT��"с�[V`�e�uP���z{o�fj
԰ �n/�6
�H�xW�}�'f����Y���z�C����5(H!8��K?�иj[V�
ȻC���F1���^R�
�hӒ> �J�����	~�����+0�
x5m5�O�ン8��_Fg.|t�
y���`�m8�u���YU@
�V=�t���!�珃E(� f��0��V�$ᠪ+��wg
�-��3U�c6K�}$.��;wX�@y I@�GX���֮$�`�3m
��{�4P��	�r��� �2��|�����{Z�Ȳ��J�  A-�h 7:�5
1���
�0r���
|��
�`�l2;��_��
U{'����,�)�w�.
�>�G
���#~��s-J5�
u�tPQY=M]��
����o���(
r@�3�2���S=7>�T�y�m=��
�U��
+��������c�����҂Y^tm��G�`
`��!,�D�C��>DY�%7���`�Y����{
~�6d�P��v�z��R2y��
+��Q߸�⩻

h��W��(�,)-�hN��k᯿r
+���5���啘
,_;�ʋ8Q+�]��j�
t���Vj�0��Q_az�F�\�$�
�k)6��TՆ���m
S3���cs�~N��4��
���8^i�o�A�X���ohA�8��<n�U��ޭ��T�Bz��ƀ�`BT
:hDP
�Lq^� �;[O-�����X8q��P:�y���"�g�`�t��y���T�l�Mp�->��׆̓8M�QC\y�0h"�H�P��J�}
+��mys�/f}3�#�����3x,�
|h.�|��ěN�E��V�
��aI�	�>Ez�r��z�D�R�w3���p�

��
��1=^���w�'�$Ϳ�3��"]$;֧�J�\�@ϧ�Y[�MA���yپܓM'qQ�J�L&�������x�����E
�l����/B
+�C�2�
�6_	|��7�+a

��#>#��1d:�LculQd��i����>���D,J�:J���p�
+�~d�%HGd) ��S\7Rŋ�|���y�LI]#nt�/
_%�No�8�-]]&�q���wK˹���W���R�N�!z�JT`q��t�3��s+����Վf�"�� �CY�y_��|��+�g�}�}b��
��W|/e�b!ʭ
�S%�l��mU��3��
���_��괶iq+]s/EYƅ�+

�
�|-X�����$e8��K����E�}XX=.PVM�qySvZ��)�zZ��̗����t��!=

�G����C���r��t�ABB}��"\��J�>���T� Xg;] ��{/U*V����*�B�MA� y
+��T��
}�[��
/�@Y�V�.�D ἇ��x��C�p�^��:?xO�1�2/��ȩV��14�>������ ��m9�/����_�m0SBjsI�Ryx�C(�Q�ŧi��i!$��r���lǶ�+���߼UɜÉ���o
��; �!zn�%n;�7^�#��k(��vl�
B��p,�Dlh���N��
 �|P%�
���r]��G*Z=ql��.��.,��'�m�݄�vE��
S��|@C����K���z���<���I�
G3s��de4���M0:�`�b����7b��e˦�YOm�ZӋ���fw��$�f*{�M�z+y���Icp۞W�O�j[��u�0����
z%�����"WH ��.�חE�
y$�l<f�jZ�iU��\��n<1��̒�>{PNq)�{�"vˣ��_|�N�P�[�+��Ւ
������"Θ	���-�
+-�L�Ǣ����� ��g鷽d�F�Ǔ=Z�fzH�w���Xd��'�Oy���c�ėC�% "D�.߮��g�[�+?/�

+?�����_�y�ި�������F��
��J���
+endstream
+endobj
+840 0 obj <<
+/Type /Page
+/Contents 841 0 R
+/Resources 839 0 R
+/MediaBox [0 0 612 792]
+/Parent 792 0 R
+/Annots [ 838 0 R ]
+>> endobj
+838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.831 461.094 104.554 471.942]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+842 0 obj <<
+/D [840 0 R /XYZ 86.4 726.045 null]
+>> endobj
+839 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+851 0 obj <<
+/Length 2890      
+/Filter /FlateDecode
+>>
+stream
+x��Y˖���Wh*g�C� f7��}��Nb�W�l	=��������
+$E����
o$
+U��[&���d��M����y�Uj72���zs���&V#���n��%��P�z�no�LGj��ݷ�Gř��I6�*��Hy��]Y�����懟��
��@�K�{s:U��˦��qn�	4��m��;�
�%:�meM,abz��;��nO�&�P�~�
������DaE,r�����ʺk�k�R�D��X��a�@2�4N��uSWe�6,�������[�j|h���J
�A
���B�&�6�BĹ�|j7�wnǚ�M����}zb:r�����&BU�{��1.�QU�a�H����6��Lǒ�ڿ�s�EY�Sۼm���(���vmy
+r_P�V�J�8S�9Uߎ��?��������-�Zp�|i�GE�m@��n Cc�H���f�yݫQ�i���H/���~+"��x����Fj^��G*��x*jR�^8F�o��F���jR<i\��/�>�lĦ%Ǥ��_�`�	��]1�o9���E�5<���
?
\u�CE�f$jӅw�Ƌ�k��eLO.�@��pLX
�=UE?n�5�I�55*��
�%��jy�[����
+
+WK.BdS�Y��L�zOc�Gt��Np��-������ 7�V��E�Ɲ�j�3
5�Y5Q)�8���Af'C>;���V�x����iK_��3L�D�u�x/��4u�##/i˾w5�.�5��
+812��V���d�����[�X�	벌���P����9�
��1#�����0}8�^%��8
,����'���5���%(�
�0%�I/���(���_^S�BO
�.���b�ؐ����j�q
��%{
hq�x4��Ɠ�у����m���<��&
 �<#��I�4zL�;2��]�:��x՗
I�=y�~����8��~�0Դ+Н��d
 ,	bG�+F�����VE�  ]?z,~�f�*��JW����7"X�4y��b�D
��6���/�%�=^u0e7���&��DaTm~��/�DKK��8	"%� ɉ\�h�$��
+
+a�LL�%3|q$߹��E�O�>�d_���'����+��a>�B�f�*���'���)�H�\w*Z�4?Z���,��H�va]d:8oW�W/v��a��j��&G3��x
���G�t
�
u�N��p:gJk���b�ܗEM�M��_���$�҄k�d�W]ȃcv@
�Ju���&����_�
+8!�ٳ���{�f
+�>ǔ)����
�IזŚ@[OF��:֙x���ĩ?��ljʗ�7'WO�٣�������W!c��g%J�
+ڳi�e�9����JC�t����+��2q�L��+ o��t�C�
+���?u����:#����4��d��C�]5���#�S��NZj
+G-+����j8���
�0IG�E��Q�0@ ��XD����4��8.r
+J�m*G+��3_��$�G>�����
,x" <��4���h��y%j�&�"p�']E"kɗ�H{r+�<%�,��wA�(�1Ce�sex^�Ƭ?�yWfHk_��������t)�c��� ���J���6Ac
P_�1_�}�Jr�
f�j��?�J���E�@��"Ӎ ����K9Q,+B��D�&�O���6%+�Y~�Ȭ�}I��by�_Ȯ��������� t�g�LHOn��x�������# �
���e��HT����P�EL�L˘�24*�r�=)R/I�P�9͵��~͔��g2
�G19�FI:���/#۲�n��
ΞÔ�?)ɹJe�����'��Г�	wy0	�ɤ!�!X�y�|G�ZE���7�c���]�Au3��Ԓ�׫�}����>_8��2��7�PXp�,�&�X��d���cA5졳�K
�����
�آwdtsC at Eo��|.������X���SsS 5SF�F$�1!J#+D
T���v����8����o��?p���q�ĭ6<���|Λ� R:hڏ��*B1M56j�2,]7
�m��PJ1ra)RUܰ��Ֆ(u.��45`�Ef���e�#�|��
�0��07w�h,h7;6�R�YvaeoN/��7+
+�?��V(�q�
�4V!��
���
+V�q��
��G��h�
`���(���*B��ck�ޟ5}�ehB�C�r�
�J�q\uPeYx^i������:,��" � �a�W

+9��S�nz�xj�d
+n�5��?�	�
���w<W~��VjFD0l���ɕR3����J�+a}�}@�#=�>��ݯ���3]��b���Z�>O/��ǰ��U�{�Sk���$D:��Ԕ<�H�����(dZ��	 �]lBy3o�A
�Ղ�E�e�M�����n�oWB-��
�$QNY`㓱V�vk�
+d�:$R&���
�w!�#]7�XX��D
U�PhF_�p�WЩ�R5�S"�fbΛ���Rd������ڤ�>R��*o�>�
����� )�R�
�r=�>j��c��w��}�Q�z���5Ʃk#���:�0P���n�D����>}Z�7E
�ٯ�ׄ!�Y~�#�ݡh��c���cwh*f�w�
M���s)?E����Q���Q㎓o:��g
]��Y�5�Շ�󺁃&w/�8�?
+ie�{��������[���-�3����z�.)�Ρ겍��U
��e\��WYg�1�\0e �� &o�ȸ�}x 
��_P� 
����I���3$�m���Ϟ	I���)
��/�~���L��k�	��:��/��*�΍Z$�tP�v_�=&
�����m�������"&�Σӊ�t�U��5�,{�yb�/�iq�A'�����{(���(�e��݂����_�B1
D����˳���W�W%H����(�8��2
+endstream
+endobj
+850 0 obj <<
+/Type /Page
+/Contents 851 0 R
+/Resources 849 0 R
+/MediaBox [0 0 612 792]
+/Parent 853 0 R
+/Annots [ 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R ]
+>> endobj
+843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [134.205 477.975 141.179 486.388]
+/Subtype /Link
+/A << /S /GoTo /D (cite.kinsol_ex) >>
+>> endobj
+844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.861 452.128 406.835 462.976]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.855 320.621 388.905 331.469]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.B) >>
+>> endobj
+846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.066 254.182 140.53 265.03]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.005 50.205 186.469 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+852 0 obj <<
+/D [850 0 R /XYZ 86.4 726.045 null]
+>> endobj
+66 0 obj <<
+/D [850 0 R /XYZ 86.4 701.138 null]
+>> endobj
+70 0 obj <<
+/D [850 0 R /XYZ 86.4 306.887 null]
+>> endobj
+849 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R /F49 566 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+858 0 obj <<
+/Length 3849      
+/Filter /FlateDecode
+>>
+stream
+x��[�v�6��+�d6���!�$���D'�=c�3�$
���xܯ�l������F�Z�|f%
��­[(��N��/'/�N�?zb"���\�LR
�I�M��\�'L9?=�J%��}U�nO�D*���~s������f]��W�ϋ�fQ̲�X��ӿ�~=������	�	k&PQ*�d�<��x2�/�N�H�t���[N�0��bry��x p:a2R�VbmX��$�Df���OY�A�DM�S�����in���<�;��q��/��.w}d�3�H�}��j^d���L#�/�6�R��2Eİ�f�vy�)�D��PB)7s}�ɫ�nw"�R����\�
��zu��i�0�m���O�:�Nٴ ����ͨWM���'�e�$Q��e�-H�]%�,[�ÀRM?�3���MVx�U>wO�vzz�V&;,�{.<��q��	�D2��Hd���j��HS�%��y���4[,\
����5<{u{�4�.�Z]�9�-:=S\[��?�7�"
�#�")d�o�����{G<�5�����u�T���`{��w���׋�p���oT��)4Xo��5=kB���od�DJ� [...]
�Z�'g
�	�N�w��6w�d�2���n�Jۭ�}׵��Qz�o�G��Oc���ޖy����k�D!�QJ: n�e��1"���>�*��Fvٗ��(f�L�-Z:�,o=^���d��\�|�"b t���� �Nz }$�J�b>�h��{
+���:�r��PQ��
E�r��ζe�7[�~!;�v�]3i�7
+32�c�px"�Rf&'�o?!<c͉
J

CZ7��D�1v�l^��ew�P���9V!��
47XŻ�_\�JDZ�pT����6��T�EV��U���,���S��[�b&�0wE�O���
���U�o�8GF>qkUd:������Ů޹N"��=1��)z�	�lj
J%����2�����^
`�Zbב���^
�V��(O
�E
+F��`�����j��ߵ����� ��I$)XDʟ��LđT��y��o߿����yܙ�3�
f����9�l��Y:���}��p�<r��x�
�?� ��D�F"�Z���,VŒf�.:O��49���V�����v�6�b��24��>��V����B
I�>A�v�������
�4i�̀?К=m@�Tg~ڐ�	C����~�w�֐���
��~s��lV�J�=rz��6ͻWo�\^
�|h��^��r�B;��İNK3UF���y��Go��EQ7
�-����l�d
+�n�
����R�p�f*y,�`�R���~�o._�@�H�-N��
��ѳ�ijCRv�/�`b���r`;��S17��4�q������"�BD��u�������{�$}41�H����f�bЇ��4�e�C�o� u�
��7�b}�J�>�
+CO7���(N�(��(�`��
+��/
jD&?R�Lj`\
�������XbW�<ZJ��(6�9�
XKN�OS1]{H�?g��"�n@���c%q-�$�������ܫX�N��Ĵn:����z�`�Wmߋ`E�/�A�+".�|cw,$�]��BЮ��p�";"�D���L��1p��օ���8�R���ѱ:�� 8uY�˰�/��UP 񔿱˿�
��
:P�<9 ����
n��3���t�����t��T�4x�b�=ʒ����ʢz�ށ!��6�
?�žg�7-BkD�7C�Au,���=�l�O���K��̦�n��7�\�.4����ef
��Ӏ��vq�H ��Ў� Q�K-B�c,�tY-�{
+HW����`���
EJߩ���wt���(q#���_�
��o�����
2�b-������#DK��ك\ˎې�Py
Z8���8�6�ME��l��"*�lޣmE]5���L��hV�lL��ʨ�G�\���$�W�o�l�{�	�2/ҋl�5=X�ט��#�N�;�"�* ��2;>�
`];����kۯN�t�@.9��t�a�j
+���֦ϊ�<�*º��ō��9�<�7�ٞ�Ѓc����r�Vz-��T�豢�) �6s��󬜻���Ӣ@:Xއx��v5�'�����[b�q�n��S;ש\ö�H���y����c0$U��
��Sܕ �L�m̴r��\���lea��&#�J�?���n}.	��b��5
+<M#���߱A+T��h�#CC8�=&��Ȑ{�N' F�����5����{%ʪj��i
7��6�������SjtM��STuw��6���A|�$!�����9*�܄U!#�
�
[�pG)g�KP;[���i�-M��~�X���=O8��t@��,w?�Cc4�)�0{H/j#<���v�Ǩ�P��!�
]i�AzD
NF��nd���v3,���ͽ?%~*��tTt;G&}��FB�m%
�1����\(���7=٪�<2������!W]�a�ȫn�
tJ��� �ڵ��0�J�Ý��e��Y���O�8O@�G������"g��3�䆱�ƈ�7F��gs[WN��?q�e�3���u�ă���Ћ��#M<j����GU�6cC�]#������u�CO�l�����!��]%
sw
F�.qT��+�p���8��=
_&�j�x��B�7M|5�
��ES�&V`c>�\"K-|
��|�00��YFF�JL�5}3��;1�P���"t*��ߨ��x"K�eJ��ˤ��ǗP�.cvs#dw"�'�3V���Uv�����cKR'�=� �P�[PÀ��	��qJ��.�h�Q��;��aç�|�^XCy�'C�
0�(m
����:IL�Dq�α�5K'\a׃�=���<A ���2
�k�; s��:�gR�mM�
lՐ�U���G��
��5���J�F���z�g��p�P���~8 +2o&͡TcwZ�c�)������6ْ���
�^�{�N4� ����42B��(�� �*_[�r�N�
�SW����m^�P�?�\}DPm e�\��VPֲl���v�)���
F��B2�P7�j-�,'N���\'��
\DZN8�Qj�v�O�h(m����~�JëjG&f�˜�8��WwنN���a�:��
����[S��%� �6e�չ�e�-s?�%�ԫ�t�rm��\5-
|��f�6Ͱ���A\G��С�D+v�
Ti=���+�tI�.���9*f�!3)��^X��ڻ�V	��4,���2��A�K���o����{�
�--G+�Ϟ
:,�y�%FT�#
�:V<�e煿�&�%5�Үd|�g��j��!
��&S������@ =��~�Ѧ�hkȖM�÷�w���}5f
7s�^�\�>k�
}��VO�z	S�{��\Kt��m�q�ś2c 1c�[� ����BV�9��
��=?�dzJ�+�x��H@~����i� ��P�g��|U�{���9����-/w��i[����hg𛖮����?�ڳ��S:_$��?_CגG){
]K��^���AU�
�|�����)(��ٵ�_����U��/��ӡ�W�"�d�{�31ȕ⾒%H�
���LONɒ��
��~�}w(������~o�J���'V��={�Xȃ�M[������Fs�j63<�M�
&Cr�/���a���=�����Es��g�}��;eF�����"�55�P��Y4��Kҷ���vY���|��0c��z�n�7�hz�Gjz��ԥ�!vɖ�t��B���
W8<�w&l��߯YJ"'^�jȝ������
ix�����Y^�H����ut���.˯�+�k��GW�Uh��iw(��
����ʠ��
��^
+endstream
+endobj
+857 0 obj <<
+/Type /Page
+/Contents 858 0 R
+/Resources 856 0 R
+/MediaBox [0 0 612 792]
+/Parent 853 0 R
+/Annots [ 848 0 R 854 0 R 855 0 R ]
+>> endobj
+848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.842 630.002 237.805 641.957]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.831 365.184 114.793 377.14]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.A.1.2) >>
+>> endobj
+855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.194 213.76 230.168 224.609]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+859 0 obj <<
+/D [857 0 R /XYZ 86.4 726.045 null]
+>> endobj
+74 0 obj <<
+/D [857 0 R /XYZ 86.4 701.138 null]
+>> endobj
+78 0 obj <<
+/D [857 0 R /XYZ 86.4 351.402 null]
+>> endobj
+856 0 obj <<
+/Font << /F36 408 0 R /F38 453 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R /F14 627 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+869 0 obj <<
+/Length 4052      
+/Filter /FlateDecode
+>>
+stream
+x��[Kw�8v��Wh�O
M<��9YL:�>==U��*3��^�m3E�n�*����]\�$(�v�='�X  ����hu��V?\�˧����d��<Q����*K�Y�*���O���k#�f�3����u�y�պ�˾9�@s�#�]�
��l�������<|�6�mq�l�L�Y+��������կW�D+�w�Ef���p��/�j��?�"��l�`�
VF�B�U�>^��U�NMO%��T2�B�Jr)d�����Ԓ�����&/����ձk�s���B�Į���)���:��D�I���3"����C+�h���M�	.iO߷��뇻j�Q�����!�=������K
���Ǻ٨l����_�lyS9��d�d~WP�Qj
+��ӱ�������Ӂx�*���W[��,���I��e�&��RZf�׻����x@�9i*�~�J&�"�b'��!�X�$�o",e����z�tR�������d;&Y.	�� �$�4�y���2��+�=�E[�|L]v<pӴ��y�\��c��*�{n\�U�y���e�^O��[G��\7����c_�Ǣ�-������g�'�����qW��e@�rd37�n����K���3z%��(_%`S.�W���CK��)��j�]��V&���Yu���t�#	�
w��`�'�7�㮯�c'6[%�tgu/�֕�џZת�qn��
�\;�8��Tdـ��鸯��;�I���-�gR at F�_̽ 0��X�7p$S�O���d�]��N��(����+?�����ޒ��u��]ٹ>���[@h
��l%T����kݽ/�	?���	�"�.�1
�ʺ��m�e'뢭���6����YƩ
�
	�;��q�V��-#�UF�u�Ak�k��+���b`������Ҏ���9?�鿸�0��ǓJ��3�6��U��Oz
+%r c���狅B3�W�b�(�b"����
���q�P����"z�$��9h�&�E�|��2X\����$Ta�3`U�]4;�#OA
���
���
�,��w ���n��Ԕ�lg ��5��Vq�D������1��,O^�����DO3�t�]~�
+��܄a�_)��	�RF��M�ۛ
cD�>�����FS���9S5��K\WJ�1���[��D��-�`7#t��m/~t�it��2��#]��g���nڡ�	�M?�n��(���Fy�n4�=I~�������<�Y�zV�Q�m2x��9����
j�@�k
$
ȍ�� 
U��� m�j)����R���
X�u+R!�'�6
+��ǽ��dez$1�8�
!�U
�B�.'�^Vl��A��<�$�PH�ce����_'Zd\�T�s~�1��D��	�Ef]
I�NZ��b&����kO��;k���{ �f+�z ��d3�
���0M�8�jȲ����mq�~dzվ��56
+��
ϻ���R.�u}eu�X�Ph��MxL5xuf��҈H�;����Pؐ����ñ,�0�����5힙�����̝
|Rb	?[�8�
��e�-w���u�j�nC6G[��8�ץە=i���¤�]���Z^/$N���p���\!��Rʁ���qa��9��d��Ds����Nd"���������+��Ϯ�AD�������
+/%A�
����D�D��䮖����2������p?׵�}�,o�<��M�i�=>)D"'
+�I�U�6��3H-��
zҜn�f:�U
+4��Huٰ��d0�!����
+�}�/�e���*2��
3�J,�vH�#c�V* ��s�B5ZJy��J�
+�T�t ��y�=?1�t Dc��$�3�ŋ)>��e[?n(�w�{[! �v���Pm�)%!F�`v��`�qp��6��@{*�'�������
���

��p����C�mW�G��ϸ�
ao�6�21q��P��
�����[�OG��̑"�C�D��~!O��
j
�@�M�����aG7�y���-X

=�A��V�Q(�cs
���=v}y�66��˃5c�~�t=����vA/��}�pR��ιt92<�\[�s��|����!�<~A
+�,6��d�NJ��P�6s��8uv{��;U�������DN�)�w��f�����sRױ�)O@~ؖ76x�y
������1��N�ó}�e�	.i���l�"ĝ#�8�YV�S�}�v�KJ�I�E@�㹒��ř|�f<�x�G/��r/����g2, K1���y�Z:��~<�/u�?�����"xM$��6�uwt�w���&l�������P	
~���x�6I�f2�.����߷��E<���u:�m�4�1��傃H��e~��
��2N(�����)
+)��c,�S9�r!��A�-NT�\?7�X�4OgG9[4�F_sëz�
+&y�ue���D�l����a){T���[0Kg�0X"`+O��F���"�a
�y,�^�u��8
L��L��:���'�.)𪎳�e�ܘ¾��#�/>/uEV�%0�ϭ����l��Ҡ~��~,{�#�,\&]��:W!��w�Y�r7lC�#��Q��!݌��T/�6��`2��B�JU��~�e�f�S���?>� X�D�����m�D#tzH�?�
��L����<e!Zn���Cӗ���̸��U�U�T:'���&}�KP�1�vu��1���w��A10�C�_��|�Lcbof� ��J���
+�b[e韫
�
�*��<[��5��E|���8
Ȇ�X[=� �ݷ'k/����.��sma
_�SV���$B
+��e�A�NKR�Tčs�o� TՑ�<���jT��&H�+��A��ԎL��*,�)�/Z�q�{ĤD�
xNh��ReeK�g��'��(�
/:��&"�>]�
�
+�9Ix{b'�l���5��3�
7�ͅu����I�
<lI0��A,yX�Tc7(�5��
�=H�2����H��JF�p��]
+�g�����s��+�����jR��:���o��DK�-��/��_��"��#=v5��l�F��!����u�x_.�e2:��m��Y�D�WJ���:b:��q�S�
+ϴ�`�h��
Ub�S��t5�?(9��,5�*��`���z�b��k�Ugc�<Y�0�w_E�%g����l},�x�<a$���36��=��
r��w��eA�;�Ϛ�LD��/	ԫ��
+�v)D�l"p��M��i��dӘ��n:ZȲU�7��
K_mg��^
b���{J�����@���Fd��Ȩ2ť�\4\�i�fa���u����j�\y��-P���G^��������XR�\-�<�K%�c�_~(�? %
�� �q%���|�@F�	��eր��e�X
T
�C5�4��w����i9�Я*(3Mf��D�y�{�D�\�yfrD�
+гv�[�P���� �m��� y�ϊ
�w
Ӷ�"|��<�b
��j�
��~!������
m!h��C�`�s亥 ��̖�Z*��$Ͷmm��:�pj;X�–�?2J<�,fȈӉC8/B�ʼ�8hFh�ui9�w9�<�!{����}n��%a���~��Haz��� R���.?`��"S��Q�H��-�%8ҹ
+��` I\�g_�&�k�.MrZt��d�$�Ѐ���ۚ�ο
z���r�6�׹X)γX��X�J�$S|�My:qqY��:ϛ
I�$�U�eStED����}���b@��
 }:
�
+���bS
�5Ȭ�]��G�`�3E��~nv�s:mX�-�'BGɌu/pߑH䛰�dH����F�두y
:kw�����}W�_�V5�܇�O(�2(���j�SP�O�̅�@����B�x�ɏ���1H�j���!Ŵ��0BY��O�_r�H��.�>̚����t8Es��&f���޹��
+:��e��o@��j49��R������̯����}
�r��*O|�O?~`N�,�@N�\��1�
,'��l�����!�uM�ȫ�_V��$����p���vd��
�����)m�ö�
��oG������B<J�o�=�i&�NM� ��i�J
� Rp��+�҈�,3���Փ}n$_�����
���@
+endstream
+endobj
+868 0 obj <<
+/Type /Page
+/Contents 869 0 R
+/Resources 867 0 R
+/MediaBox [0 0 612 792]
+/Parent 853 0 R
+/Annots [ 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R ]
+>> endobj
+860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [231.414 487.214 238.388 495.627]
+/Subtype /Link
+/A << /S /GoTo /D (cite.kinsol_ex) >>
+>> endobj
+861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [284.604 382.719 291.578 393.567]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [124.701 152.786 139.423 163.634]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.752 152.786 155.474 163.634]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [317.561 99.984 332.284 110.832]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.5) >>
+>> endobj
+865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.412 99.984 372.134 110.832]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.6) >>
+>> endobj
+866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [273.913 50.205 296.385 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+870 0 obj <<
+/D [868 0 R /XYZ 86.4 726.045 null]
+>> endobj
+82 0 obj <<
+/D [868 0 R /XYZ 86.4 447.379 null]
+>> endobj
+871 0 obj <<
+/D [868 0 R /XYZ 86.4 370.844 null]
+>> endobj
+872 0 obj <<
+/D [868 0 R /XYZ 86.4 319.128 null]
+>> endobj
+873 0 obj <<
+/D [868 0 R /XYZ 86.4 264.091 null]
+>> endobj
+874 0 obj <<
+/D [868 0 R /XYZ 86.4 97.029 null]
+>> endobj
+867 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F38 453 0 R /F11 628 0 R /F55 673 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+885 0 obj <<
+/Length 1957      
+/Filter /FlateDecode
+>>
+stream
+x��XKs�6��W�ԡ<J�2�
ڦ�8M���{I{�%H�"U>����
,H�"%�rfz@���o_��x�g?ޜ}{�C/&q�B�f�E!�b1	9�n����ٜI��[��z6���z{�
U���'
~�n�t��i�W��n^��|s����G[�D"�����������l�m<�c�`�y�g��N�/xԓ;��G�
a�*D�%���3{7�
v*�c�^��/�F�$û�����-��oNCs��J�
7��.F��Q���L��cb" a��*��Ns]��"���q1cʿO����,6nǽNK�.�*i��fR�Iִ��|�"��,T�旻�#�8�ž��"�C����ڈ��CF�@	��R��w������9�)����ޘ��/	����4��l�N��q���B���#(��$:k��
o W�
�~��Ì �u�D1����ʏ���['iV
A* ,@p�Q4Fj���C���9��g4�0�g�C�S�4�
&��d�g�7E�p��qh2�у�U��2 ��@�t%AЩ�3�~�E�/��~@�d[w���b��
��m 1�U�/
�)i_;�_�-��	Q��P���
�n���
��K:|q*C��c\�O�
"���	�p��-a#�u�d�z�Q���_� ��c3F$P|ϊ���]��uSBh�B&f`>G&k�dL��/SI�Q�5���*�`��P���,�k7��кn6�k쀁�*���~!V�6VY�\\(�{���S\<�$fj���)
n��Nf��̒A�O\��2��[o0
,�L?�z�v(�w��g��1��qS�ޠ�Xv�紾w�:�]�
\����g,��ܮ¿&v�ژ���OZ�C���t�9ٞ9�t�Q�\�~Ά�15
+�L��� 
�J����,n�G��~�:x�M�MOe��Od�˛�X^7[]����������<��vu��1�w��I
���c�G
���_B�bԿ�)&˴ԋ������U�x��ľ�9�~���L�mR��[g��{�l)m���ӥ;�T�]��ʳ�AN�m��.!vtJ�d�cW��5�R�����F���q�z�����~����q��B(�Dž��v�G`$��G�,��q9y/�� ��@Y��]�
˛�(�k���Q�-�15D�#:����1�_�'	H�^�p~�)����k�5�
�����e�T:��%n�nc��5
+k�|T�|
���
��]v��U�Q�T����
זHH�t��h��lgƶ��M��u:{I�a
�?]��r��)@k1��j���;[ޕbS�Ȏ6� ,��̈́�1[c�B��՞9��f��
�Xuu(��)��q�pܲnZ�V����P7	����I>���B�C������C�W�a�I����#N���׍������1;��/'#	�)���ƤhL��:�<�h(��w�
�PqfE�n���)k흏�%PCi�\7���9g!�1�35}��_�d���6���:�ƶ��3�Eݶ�G�p��מT�_�m�
%X��Ft_���L֍�3�k�D|�E��+�
+w��1�O={'��qD�]7ތ����ӝ{�7 ����q��tkNYl�F�ݻ��^
EMc�B#�o��/63��;���?
P�8&h+h��U���A&5FhK5���r�
��"L�{Eܸ�AL�E9#!�8R�q(��a6�mHDR
+KJ���xe�V<Lp���_��� \�!���s��������@U�����x1�C�Ժs7��a����zZ�� f�n�|L�	�FPBD̋�l��
��WvKH!�
n2��dz��޸���=/�b�{�[��Sv�����/�{Q7��?��i޾��Y}����+��Tz�u�
�'L+C=%9�\=˴���P2�3К62�l�ľ�k]n�h=�";{�;���i��#(�?ා�
+endstream
+endobj
+884 0 obj <<
+/Type /Page
+/Contents 885 0 R
+/Resources 883 0 R
+/MediaBox [0 0 612 792]
+/Parent 853 0 R
+/Annots [ 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R ]
+>> endobj
+875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.41 659.35 237.882 670.199]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.312 595.785 176.783 606.633]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.1) >>
+>> endobj
+877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.094 555.577 479.565 567.532]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [218.35 289.327 240.821 300.175]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.588 249.672 511.06 260.52]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.597 198.062 434.068 208.91]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+886 0 obj <<
+/D [884 0 R /XYZ 86.4 726.045 null]
+>> endobj
+887 0 obj <<
+/D [884 0 R /XYZ 86.4 701.138 null]
+>> endobj
+888 0 obj <<
+/D [884 0 R /XYZ 86.4 654.565 null]
+>> endobj
+889 0 obj <<
+/D [884 0 R /XYZ 86.4 590.999 null]
+>> endobj
+890 0 obj <<
+/D [884 0 R /XYZ 86.4 336.151 null]
+>> endobj
+891 0 obj <<
+/D [884 0 R /XYZ 86.4 284.541 null]
+>> endobj
+892 0 obj <<
+/D [884 0 R /XYZ 86.4 234.868 null]
+>> endobj
+893 0 obj <<
+/D [884 0 R /XYZ 86.4 193.276 null]
+>> endobj
+894 0 obj <<
+/D [884 0 R /XYZ 86.4 124.452 null]
+>> endobj
+895 0 obj <<
+/D [884 0 R /XYZ 86.4 85.074 null]
+>> endobj
+883 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R /F14 627 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+900 0 obj <<
+/Length 3609      
+/Filter /FlateDecode
+>>
+stream
+xڭ�[��6���S���3&��esv�I��d���f:{��$��mv0x Og��$��m=��пT�_I�P���`��ݗw�}��U�'!
W�U
�|��Y=lW�z��k3�&�כ�(���K����;��6���~M���
��?|w�χ�wd�1�
+?��js����`��;߭�%��Q�;�8K|
+G���ݿ��o&	��8_�	�IjK�s��Ӣ��}
��s��*��NuuOc�c���hF����>*�2Kks��xO#/��YU��Q�WR�s����*|�����J��V��#ޮ�e��{����xU+DzZ���՚?8�T��y�|�V��췀��<+��Z}�7�~�񾾏�'�T���
OE�
+4�堹�7�zN�J��y��o��ɰ�OM�
Փ�{����y���?7��y�!�}�IO�s��v��+_�!8Z�G��U�R���>����[0��{��������v��AH?���M��}
BҚ$2
D0щ<b���Q�sj{� �#"��-��!-�78�J�����#�S��U�����4yp��D
^WޖWU ɫu���Ǭ\�X"Q�'T
��M%�>�B��!���=�� �,k��=���7w�_�,	 9l�I���A�(
N���K�lcg\��:j�z�n2|0U��
�y�)G7���G~[��&�0�6�0�!
���
++
+��:���hӂߕ'c>��E�J���`jc$`>��:�ʳ(#�A8�L��Zx_`۴Կ
�0:H?���I˲j��Y��H'��� �(���
+�yN��jN��@y�o�E��?��(b�c޴]N1S.�/�\^{����hz@��~
XR����x,��4�cY�K�v�S˫)��f
�䷕�l���f̑)�������
����!=����gMdJ�����1K��C�'ձ�:ăpp�
��,L��`
�#fh�@><�E������[
�5%�E�r�<��.�q<�u޶�zm$��Ja��p�S��2�\��
�T�A�*�.�0�X��r	�Gj�[�̢:�C�c=�>�EvYWg�Q���
�s�WSݰm��Y��)0�v��� w��W��K��/H���
�0
Ϛb�����qJ���(���	R�-A�"H浲���M�~}�S�u�ng��t�9
�4�K&���J�������$$w��q��L��V4�a��]��h߳	X��!��H;�
:��O�v9ob_���񶙄��a��NF>����j���.%�j@&w�K	�]���H��ڬ���AbW���m"�ͼ���!�@z�#�r��?��8&"N�8&L.�O�:K�̈́rH}&�V�����g�B��2�����bz�#S��
��А��Z3�ɍD>���CY�L����{o�"��o��6��[���hh�|�����ө�!�
�,$W4��(�-Y��;el�

��/$K�����f�D�N���b�&C���kN�'v���
��mVr��U[�EM��n�M���::�0	Y�8t��
V�`�bp������ݗr��4Q׉N՗�#�ŚD9���`�%ʁ�%jI�u��,Q��D9�%ja膨�F�8� ��ဨ ��F�I�_D��+����[0��5�p���µ`��˅��kI��W����p���ka��-V�b
+
pq�BIr	���u��$[��z��[�6l-�m�r�i�Z�4l��+��-} [�n�Z�a��
[a'/�z��l�������
Q׉N�W�#�ŚD9���`�%ʁ�%jI�u��,Q��D9�%ja膨�6D	拀9!J�5���������pu��4W}�9�^�9���-W
v[�
hZ��4
W7��ruKȕ��[��n���j�K���	W�/��i�g��Nu���
Q$)
|A���Ѕ�p^���@�� i�s!	[.��V��A$B/I"�.
���+�Ѧ܏��)C�A{wO�7��U��x�����]��$i�v i�^��|�.i�^�4|;�D�-߷+Z��$�o��E��K�xCHp�
��YƆ�w��
���N��םcہ��{I���B�н�i�v�i�^�4x��D�$-�$-�K��
IC���!�Œ#��IH��@vI
�Z�?̭�W�O��W�݅�}IAw�i at _�4��д�/i"�N4�I�
I
���݉�}AA��t�ID
�[
�CU
�}���
}�$��u&L�>0bw��EM��
M�}I���@�ྨipw��q_���;�4�/j"�.$�%I���%'q{�|��90V
P[���O���U�!Tte~��y$z%~S��R����ԃ*E��� SO`ј� ~S��
��˚�&l��l
����eScq����V�BD���#Uq ��t���a!�n��UL���W�+3��|���E�^�?eU�'���ǀ��w�X�߯c{oU�!l�t5[(�IM���� ‡��%����L�'�״i��`�G������#aK3�x�\e\�f�o n|~Q��	�"/�ǏG�7��yK�(ӭ/�ǻ���k�Iv���³�s�|V�[����žP����Qz�B9ٕ*��F��N�uz:�êJA
�*yҼ�O�M8v�3*�y�9�Φs�ɉz��Cb��-X����
�elX�4���0Gt2醝^Ϲ��q ��Y7�W�?-u�

��dHUc��,����,�XSӘ��i���?&�����&�Ȇ��=ץ>�- "ݛc<
TiQ <YkZg�R

�t��l��Sw�ϔQ��PiA�ԍ>��7�?e��WX����3�w�ڛյѮTpm6g����I~��0�SS	f}!)=	�֏y�K�t�WOSL԰퉣��`�������F�����<-�?S��Yd*�T��*�Z [...]
��t�K+U
������ :�
+�q��aS�����o�5!1y_� �gtc��	�漣%U�B8�u������
�	/M/��0 t9���lu̎U�Iw�����%�ڨ:KUҖ': �Aa�v7���3�9��<J��KV��
���ȫ.���%@�v��-T0?��D5</�vC�|�
��p�wa��l}�/~� 0}�|5���?��җ���|��������'�_��ᡟ�/
/��^tM� ����~C2��,�֙9v�,[��ځ�G	����7�c}.�L�_
���Z���rI��ñ)B�[S���\����úԤy�J!�v���!}`+Ё�V�ߐy�̖������ ����xPf/W	�hBx���xXc	��on(C����z6���7,
+p�?p�:;�8��N�]]����٬���/�٥���S�y�ɚfw.^MM
,B�H�75a�?�
̶r��
�I��T��xUn����2�jVf�ŧa�xω��0�I���Ժt���
WT�MM��L�	w��b�ͺ���*�j��2�Oe�}M���+b��%J�n~�nǻ���
+` �x�'K'9|��M�>�}�Q����C�D������-D=V^Û������͸��Qb�_޼�(f
�����T0����4R
+endstream
+endobj
+899 0 obj <<
+/Type /Page
+/Contents 900 0 R
+/Resources 898 0 R
+/MediaBox [0 0 612 792]
+/Parent 853 0 R
+/Annots [ 881 0 R 882 0 R 896 0 R 897 0 R ]
+>> endobj
+881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.801 651.823 168.523 663.778]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.1) >>
+>> endobj
+882 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 616.511 92.377 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.587 297.097 398.058 307.946]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.159 273.187 194.882 284.035]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+901 0 obj <<
+/D [899 0 R /XYZ 86.4 726.045 null]
+>> endobj
+541 0 obj <<
+/D [899 0 R /XYZ 138.11 587.544 null]
+>> endobj
+86 0 obj <<
+/D [899 0 R /XYZ 86.4 351.415 null]
+>> endobj
+90 0 obj <<
+/D [899 0 R /XYZ 86.4 233.342 null]
+>> endobj
+903 0 obj <<
+/D [899 0 R /XYZ 86.4 161.052 null]
+>> endobj
+898 0 obj <<
+/Font << /F36 408 0 R /F16 397 0 R /F8 409 0 R /F11 628 0 R /F55 673 0 R /F41 902 0 R /F38 453 0 R /F14 627 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+909 0 obj <<
+/Length 4005      
+/Filter /FlateDecode
+>>
+stream
+xڭ[Ys�8~���Ӯ�eb���Tm&��I����}��Z�lV�cH)q���o7^�e9��@l }~݀���$��:����s�&�S����("&�eDq:��O~�2u�0)��~j���i�
�����ſ�b[L��u�p?�7�����r�jN��|s�����
+�&��5�-O~�#���͛IJxf&_��D�0hU���_OR��1�4%B��t7�%4  �l��!
 �I��$,ӄ�3-#H����cp�����3�s%�~�ģ�+�If�6���n�RWZ���_�Ue�
>�XQ™�7v��A/$��g��o��T����>�`D �aJC�C[�r��`��L���
�~Y,��B���7��M
�?���'�P	ZԠA����U4��ܠB����P���� �Wl�8�S�0

��2`��i=.B��Q
�50?3-f��)E�3��6L���WU�L��^9�
��3|4S����t4�
ۢ^�����z`�`XL3hP�I閲����}#IΧ�j�%�̫�E�6C���Іf]��S��,�"C6'�$�B�n���z�,�����T6��T	�
+��}�RR�����:y@�XJ�ne�vQ N�n��˺�;��G��ܰ
9�D�ti�J
{�t�voQ���S���+@.��Q�YTK�*h
����X�]�*�]�o1��I;�`1/�8b3���"�!וpL3�
5^<h/�6I$

�ߚ�Ud�B�&5Ӳq�q)pNTj�W/��RS�ZP0G��Mi��
g��f�܀�z�|k��	����2J��e�dkL���H����!�h�2��>
M
�0~@߮e�OC�n}
�
|H���aۂ��)���b�
M��i	�c�
����rǬ֫�\�'��49Mg1P���	
+?�� �7��)Y|���[:t�H��
��K^��)�H
6
���L�=.`�Җ�G��|�V�\�"T��T!���9�%�',vU�|ż��eո��!z$a�4k�ݭ�c�d}�w�qϢ�`�=	���)	�ӓ0ň�`=�w$3�ґ����L[)
��G�)a
���ļ��S̶�V�)T:�E���8� �́
1͉P�)6��Iz܆�
 @Y��h��X��y|�v{�+��/����G`L��^�q��N竵��=�
�]O
����z��3���(]\_;K���i�p�>�w��cV�
v��(��d7���5c�Huc��#\�T$#l��
I��u��F�r���/���*6�-D	����jW��LS��aT}�c����
��}/	NY�A�\xi�$��z�� fpڦD��r���#�ؿ���^ymm 
�+��v7��b��,�+�Ϗ�%��)Ç|�t7�
�9{
+$��D�=�ŧ/^^\
p�2%]:�Jx��I�
>�Н�
�&o
�Wd�5i���fht�#X�`����a>2F̓���S�{�.2%$|=�4 {�
�|����b�E;�xEҬ/�;��Ό�3��tFO���tFk�vB���z�Fvy�ܽ�������{���M]|)�;0��u�|�e�H�$��
�:k����$,S�L�c"Sv�O�eHJD~P˞bR�g�Iϟ�>^Ϟ;��%�bPoqi�
zغ��`�X4�k3�9����T<D*��T=�T a0�3起øT�`� ����?|�<^,��T ��b���X7Bf���C�}��$WI�@����17'����G�
��c
�@������mь!W�$^/�s���^���׾ٮ���Y�iH'��v�U#��|����CҶD�x]�W��"��7�j^��SH��
�B(b �{D�_ ��S��+	�*p�v)i����Ǜ�0���hb����7�X�o�>D*Ja���y\
G���傃����41��w�m��@�>%f�����4#��/����r�sX�n�PBs
e���{��$A�S*�-�#3���7��zl2
��v�|^�|
lj��V��u7,����9���T����+WC_�\�#�s$
p����
�D�w'y��ݗ�=�,`�xŤ�����On<m(]����H��9��q��)�=H��,�� �C������8˵���|9�tZ��
�X™[
�l���
�X��zn�Z��[}s����anʉ ��/�n-ux�Ԡ��o��fOQdY��ۊ�-��2�ə���
+�
���e3
�h��ܖ��v�S����4���U���a��H��K�^�-�U�5�";p� �{���� u��Q�\kH�X|��uu^�N)�ry��H��l�\��j�%߸
��㲒���S۲ʯ*�Jw}Ba�(��ۼ��c4u�&,s^���c���Գ�D`A���K�x�J3���d��"����U���s҇Piv���v�0U}�Eks������L�G(Z�26�R����v���]G%�:��;r�h�$B�ɭ]��*��b�'X���pp�
{�٣���4��d\�j�޶f /�f /�	Bc.k�I87��E]����Q�)��e�i,���}�[D
m��h8�fS�z�m�
��m��]m$b��!-�=���7�l}U��O��=/���t�{;�D
i5��8����3|����������H���A�/��
+˜I�^&��Ow��T��������8��uئ�;�Ez��w��ո1�8�0H��
�����9*�_�Vc�¸S=p�F�sHx��
�ѝv7�ռ̫���͝]��-��U�Y���B3�me
xe9d��pp@��TE��-S`(*9 5m<i��=bG{�l�a�)?x�L�g�"R�-d��p�؇h��<�<�X<椎�Õ'��8lOs�
Xj�P��v�8�p$�B�=p
�a
6�bQ`
c��<v�H���
� &�$�pѷ�4�i����)B�E��IOb
�9OJ{����A{ +��|'
�Nʼ��7��n|���

��`W���N�߃�W��i��?U�,Wy�F�M� +�}�x� �x��J'
��k��+�*��FOa�Ͷ��*m������;�Q����[�F)�U�އ@0o|
�
h���x	J�6
��B��E�%���"Tv��7]X�� ,�����g6y��ws�d�X1^�����'N/�@��ʍB�o��L�<�`���g>Tɑ3�9��V� <�� BP6B���Ie
��n
bO��q���>;#qê���h�FЫ|�^:�vW"�[�
 o�	�
��V�&"e��'	#�4	gٻn���Wܖ��-�p�yU���
ð,�w��
��q����E�.֍.��e��]��[(/��?$;]tw��ݲ�����x�2��i�~�0x?�Ӳ2�V'0踡֭��WN���&R3
*�T|���Zo��ț"Ψ�6�����n�Wjp�1�)��bxI��A���Y_���.��EbEd����o$� ������Y�ݴ,���
�n�r��i�,.
�eчQ;2�R��iVƏO���%���2��-���E:`Y����M�/��~B��]=��H [...]
+�K�2Uc%dx;������/����1�����I���!8��
+U�9D�s��k?���(;^��u�F�G��0X8��
l�aN�t�{Hf!pC��p!nP�d`�Yw�껮�J"��1=h��&�+N|�Uؽ��x'R�Cg�����)='��]�\�Ii:ʸz������G���=9]�F_��	�$�^]��ixy+bK���Ue�
	����E��S��c�Z�	��x�>�q�P��_������Ct�EA��r�}E�O��˓��{�0
+endstream
+endobj
+908 0 obj <<
+/Type /Page
+/Contents 909 0 R
+/Resources 907 0 R
+/MediaBox [0 0 612 792]
+/Parent 853 0 R
+/Annots [ 904 0 R 905 0 R 906 0 R ]
+>> endobj
+904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.442 590.613 431.913 602.568]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.1) >>
+>> endobj
+905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.823 74.115 342.294 84.963]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.005 74.115 381.727 84.963]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+910 0 obj <<
+/D [908 0 R /XYZ 86.4 726.045 null]
+>> endobj
+911 0 obj <<
+/D [908 0 R /XYZ 86.4 701.138 null]
+>> endobj
+912 0 obj <<
+/D [908 0 R /XYZ 86.4 447.555 null]
+>> endobj
+94 0 obj <<
+/D [908 0 R /XYZ 86.4 348.489 null]
+>> endobj
+907 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F14 627 0 R /F38 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+916 0 obj <<
+/Length 3414      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks�6��W��V��dm�a2y�$3���s��@I��2%*$5.��n |@�(i�l�_P����׍��O��ǫo�����$����n5�U$&�%��tr��|��H^�x̧�꬚-Ң���i:/2�z��,�����3�(O������~��0
�Ж��b�&������d	_~���'��Ɍ[OO"w����?Wd�f<�q!&*���2zw
ܔ�W�z
���l�����z�
.V��	S��?曺,��d\D1��"�di�f)�/�8M�
���t�d��m
2;�J
���R8�(-���߼������$�8�5��ܮtUVn�t�<=[6p�zlz����`�۠
@�1kG}�/FNf�®�x2�4J�ێ
���j;r[��U��kdoW7=���r��W���
���!�RC�}�m�����7R"Jb: �!ݦ��#�4���Dɩ�r6 �m�Y$�"E��l��)
%�(W33
+��fɎ��>���Cz2Rd(���6�>|�x`�E�ߩc�����~]���0!M�Gh��#�OQ�����O(�e�7
F�lV��8�,�D�L���r�,��/v��{�-��
��>E�3׻�N9�θ���WBE��(���}GӾ٦u���
<��>d`�v�����CBw6����</�$"1?�ze$T7j����ٱeZ�n��}[eͮڴ�έ
lķX�3|�� O%���z�E"��4�;c�
�֭1e�ӭ��v;�b�c�i�Q��y(C��H�s—��Z7妋`@��`>өeyl(�{S8u�Xw��X
���°�k����A��`W�==�
��9(��
ޛk�1��¾l)�
�&_��M�m�]�z�h��yH��l�}ʗ�C��fK@�����fG{�5:�ރ,�:C��/A���76<�i����wo�v|T�`ŵ}a��
����,��A}�������n�
n��u>/��i�n�1+� �:]Te�؁H`3mЧŰ���)�G�'Cj����W����&˖���=ri>��V��na
��H�sgmΛ/�"�r��ųA����2���f�o����,]fUH
P
<�M�s�yj�4
+�)oܶ�����n�t�+�J����-��5g��#�� ���{�Y�
��P�p*�
C��
�w����ډwgV	v&Fৡ��]>���.�{D�h�hv�f��d�]^4����M�u/V���>�d8�vE�qPt!�Ea
+ at c_F�s�dk��|�'X�(Ɩ�VS;N���1Deuӽ�צΊh�d���=Ӟ�k��2۔�I�"�GqJ�a�
+^���y<: {H�UL �������
� �(�(#a�Z#�,v�&���
g��]�S��%��� _�QY]36
�Bu�������j?���n_|3C�ԓk
kA�)H't�h���2�U�\�s4u���ɬ��V����!�6�^�|��w��/?^M>���M�
�
+�	��&�+Đ4�N��I2��T'������," -	Sb�@b�D:�@
+l
+H
d�>��T	⯘y�@@��[��*��GcS*1��Ct:܆��ҽ����
�����^���J$y� ȗ�
p�]
[l1��%
J�I�N��C���X���[���� C@�\�-��Ror�i#8E
����`�@�b�i�ok�Y�-
��L�}�l��o����z�P~�-D�@+_���77S
+���A`$$z<t��&-��/�
+V�z�M
 3iqoB�
bo�ڡ]�u�	w�m�]�����I�y;(&q,&鶘�iQ�Y��v�T ��5��8J at _�N�KT�k#����
=��=�1�z,��|Ņ�KFJ%���
�����
?h�hP,QH �_"� !��!EH���=3�>G�[�ԺÎ_�|i���OյЙ8�:(+�����(�l5x*��I�{�і2��p	������)����W���xz�Ԋr�|~�iN�r�JH����{5����R�c<]���l,���l�;KBz�P
��Ai
�.��p�b�	�fҰ��S����T7����>
+�˝_sUo����Fc���χۀ�j /\�vaB at _d�13ꍤs���ӻw��ގ(
�o����
� 1�$g�;
�2Λ<-���&<�=��N��n���z�+NX�
+I�}S:)O��/
�8y���1�~��c`NA�
+s2�Y�?�ͧF��#��]0�
�_ �od���4��2�
bJ���
�1��9����,��AJ���c�>$�i��^GÀi%���vP�^>g�aޔ7��tw���%�s�����%��V��l�E�ނ��'���U���c
����$P�+٩��
`�2�a�0�ar�
�����'GoUA}�T
&�īh�B˕g��W��U��?�}��z뒁U	{*a`� RT�ﻬMVi^d�F!���M���
&�J�G�P'�,�e}lk�&��s^۫Qb�*1>[%�;se~��&sj��=�=+�둳9���Nk7�2J�⩧�3���_+���c�Y�Fꓓ���&D&�-q �׾��t ��l�`�ԧ�;H�ӢB]�
*w3H����6�p�?�MF@�E��q������k	
>J����P�R�������m {[yt
4CE'�y�Pwj�
36��r���f��6��}4\����5;�,�0���S�/`�<T����
+�c��b��E9�c�h�
A I��EQ��&'J��e���2l�J�F���8��'�[?�^',�*ʴ����U
�xm� Lqj���%i`�[�E�Q�~Ӹpqi����(��o�³
yX e�x�����*���+�lp�I��520�J�x07��-�rl�S��l�f��

��8���Ɖ�Ҝ�F�II�PSa6?T�r�qF�OU|H�G�8�99�
+'R���W8����E%�3��x
�|弼�	��U�|�!]k[���Б~E�3�>�(r���`w�
��j
8Xwtdu���+��TA
+}i���6a��'�����:�����N�P�t�	��!; ��J��b�R�
�d����u��n��j�)@��#�6��=�30�ƃ�
+�|DL��9짥����I�̀Na
_�(b�^/d��.�n��:�v13�1��S;�!YH.��D �o�;�2�c�
+�{iX|��VXI3��y��6
�
V>���FB�������� �
Es*��Z#�<t���_w]�[Ӵe
��)�N�b<�4�їcAO�
0����3 �3-�"F�Gq2��,����HvXg�g��C0�Non����e`���*��c`�I�N�k�D��<�;S�j
��}*1�W��H��/
+,�4 ؋\�4�����4 ���{D-����1D�^a�}�x�
+endstream
+endobj
+915 0 obj <<
+/Type /Page
+/Contents 916 0 R
+/Resources 914 0 R
+/MediaBox [0 0 612 792]
+/Parent 921 0 R
+/Annots [ 913 0 R ]
+>> endobj
+913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.134 556.735 487.108 567.583]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.8) >>
+>> endobj
+917 0 obj <<
+/D [915 0 R /XYZ 86.4 726.045 null]
+>> endobj
+918 0 obj <<
+/D [915 0 R /XYZ 86.4 543.917 null]
+>> endobj
+919 0 obj <<
+/D [915 0 R /XYZ 86.4 301.209 null]
+>> endobj
+920 0 obj <<
+/D [915 0 R /XYZ 86.4 138.046 null]
+>> endobj
+914 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+924 0 obj <<
+/Length 3139      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�D~ϯ��*{p���rx�K2/
<hl%#[F�'~�V_t�����9������U]���/�x�ϋ/n/>��ɅAFR���[h��BQ�$#���⧈��%B��u�n�/�L��ۗ�7߿�m
���x�/v�,]�U�o��_n������
���\.V���~��5��f�3z���m�D��-n.�u�Âqw�\wN�B0�B���~�׎~=�ӯ�8F��w��g,��;��!�x�'�-���(�V�so>,u'$ Ƣ]��ɒ�}��:�$�$�+�]j+
�XX �~��~�K��9C<�u�F�()��C��-����c��
����?���6D_
+�ī�Mo��]j^tljz
��
��j�v��%H+��~m��i��wM:�����E�s�?�	�L`�%U��e#i2!i�%��hWҤ'iڑ4	�(��$Q�
+;����†Q� Ö�1�&L�}���"��}���R`
�z�XT
1tL#�t-ʻ,���rD9���E���H#��Ծ*�
<���*���Hˠ�ۤݜj
լ/;p�_��;U�
R
�ֈJ1�Wh�n��������
to^_]}us3c#aj���9��nh�q��y�n�&O�E��V�i��Y�{G�M�A��~�J��n�͛:�O	�Ύ��0
qI�!O;���w_}7A�D
=Q�)b�ׯ_���@a����
��	�0�$gaB1�o�\l���m� L������Qy���o����Xk	

F�6��+����#ʳJ�1�B�E�`*v��
�=�d����G���׷�e}?AVϻ	��u�2��5��o
�m^��V�f."��� jh��i�/��+�Ī`2a��wɪʋ� +��A�̝N��Y�	�*ra��l��?�r��	�|�J�%
�|_��:�K��	�2uƒu�VT����l

 �c?�Ɇ�\.�T�!�1~92-��3�n�@�uBcM�;	�x�x�<�#ЁA��,����bq0����~:���4�~��x����88Ѽx
+ ;˼r�:�H~�'e�_��4K�#l��|r�WI9�rL*}��5A��c ��M�,�&�5"�v�)���7��C�g��צO�qda�f�9�\�g���1�J�´z�'@J�����\*&��g� 5%`+�'ƥ��H�'w_E��/8�O�����2��0 �6H��� Y9��(���9���߲��I�M��/}���8f(1l�v�}��Q�"0&a��	~�L
+`e�	��	�r2^������
=�1���
\�>�J��0
a7�%��n��wm����`B���٭�F ,�9X�F�|e��]�P$�zJ�@d��q��Xu�Y�5!_$z"VBw;Υ��[=��\�{u}R?x�֑��T�%�
�n%��ͷ�'E��)�.��+01�L쯶XЋ�Ds�T�U~�#�8�"��;1@��xd�O�-�Nb�{Ҏl at F�B���^��˻��hnC
��p���2�
+$�;�Q>%'H1IC�׉id��
���Z��''���c��e�Q�ez�6�
� ��f
��HӘSo��$F�Y\�-6�� � /�@p
,M����*�ū�_�1�h�"��ć��
L��W���5g��ݯlx����"Gѫ�*�����5��.�NM
a}�S ��� @�������V�8{����
\��#��C�/�rU�;����I�7�<��oWu��!@nLYS��� ڃ�4Q&�ғ��; 0�bǀCi���>8�w;
�
���tȻƾL|_��\d�H�8������N~弽E���o�.��ȼ�h��o�����msRp_ě��-H��<ݮ��:��&�3�ؖIZy�c�eR �
f���
+4
�/a�M�M(�dN���Fb���<@��k3?c�m�g
`�@i_�����
 ǡh
�
$��W��F�Ou�u�
+��O
��C^�x��>�
��(���3	�G��ҡ��*�U5����^Z��tZ��F
��N���0V���ϵ�-I�ai������Q[����B:\iV�|��W�{H��)g'�?@/�z��C*V���z�*�[�ǟI̊���%|h�l^s�L 0=�� 9��t
՞�i��,%�?�VY���?�t ��w��0a����l�&\IY骲��q��g����0�y�"��6�=dX���a��U�e��CȮ(`
5H�Vy<��<�^w�`����<��ţ:66�6��m�/�l
+i�}�
u��B
�T[O�
Υ����M�F��P߾z=�����#�y��A��y�خ����60Z�s���-Ķ����9xa��z�������C���E�TO��yx
ac�1�Z�yxM�n3�VWn����XkvX�}s��o����֭�jp5���՚\���Z�6

���!���t�
��%��^���M������ɛ"�� ��O��)5Hs�m�b4���SHz�6s:i��(>ke�&
Q
a^p������k���N�X*$s���;��t���ߟ���
_�ϼ�&k�؝&��i��u��S
��q\d|��
�
��������A8�c��	s��]��]
��&��]���؞|���@}9xA�ۖQY�E|���f�[�~=�>�SYY9؟um�
n���̡!��V�}�lKWi�Y*���Q�������TX�̴!yus5=�t�UN
�N�
�u0����
�_�N�n�f�!x�A���c�N-�����%|h�t��Ϲ�	��[�2
+h��T���d�x�Z�T�2�ύ� �_��~� 61������C���H'�G��L���W7?N�RI$�
�?��
+W��+7�����g{�М�4{bK}����Ŷz�b?�!7bt|f���x5�e�D������g]�Ycr=�I
+�*|�|�&�ᮆ�se���⷟�N^G��Ay����W�r\����j��H8?��E^����u�S5��f�6��Ȝ�*
̣��랇�
���˞��=;N��V��9$�4�����	:�d�ԥ�߽�y�=�.�k���%!�2�,W�E{�2{��t�A�z�sų�c�{��N���Ry Ow��6�׼�S��ö�2�Ӗ.�>��'�L�a��
���
+endstream
+endobj
+923 0 obj <<
+/Type /Page
+/Contents 924 0 R
+/Resources 922 0 R
+/MediaBox [0 0 612 792]
+/Parent 921 0 R
+>> endobj
+925 0 obj <<
+/D [923 0 R /XYZ 86.4 726.045 null]
+>> endobj
+926 0 obj <<
+/D [923 0 R /XYZ 86.4 459.498 null]
+>> endobj
+927 0 obj <<
+/D [923 0 R /XYZ 86.4 298.441 null]
+>> endobj
+922 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+930 0 obj <<
+/Length 3451      
+/Filter /FlateDecode
+>>
+stream
+x��[Y���~�_��pS�h�#)?(��%m�hU��� ��]�@`���_����"
'U~"�A�Lw��אNn't���?�/
?z��\O�o&V91�-��z1�i*���	+��괚͓<���i�>O��u1_eeQ_θ��N�������g�/��֐U�J=�//~��N���	%���g?n9��W����4N�v�+mg�Ld'�1Œ3~������`�#�`aԡy„m�1��rb���}��� S�s|
��r"�x>��g������'��'4
~b�L�e����Y���t��À*��N�U��I�<]�-&��ͬ��Ɍ	"4?Q
���(Z0�X&�7O��|�ݳ]ƜS˜�1�p�������Q�����P�2<Yݥ���w�M�����/T�j]�"�%��4
��2�����ќ%�B�T��U�J����f�3��Y����Y
8^kM��C��z6��i��Y�&L��i]�.����>��oQ��6���{�€,��s��
WAJ0 [...]
+�(1�ȞT��T��t��&CJ��-
�2`b at Z��Jv�� j�[�ܻ�(�$��8c
�	�����t�qy�����8 ��b1�_��Uw���+��md���*MCf��!'Uį�n&{��,�B
��vD	�εG at 97�Tz8;@FK��^,
6�F��2ߵ�O�W�^_�Bw�̷�߳��o����M��1l{��y�gkG p�Z�ɓ�˙�j�M��J�g�(����i0�<c-�r��ɺ� NyfS�����V��
f��
�h�qW��Տ ���~������F(�6��Uv-�˘f������x:l�~����l�H��К�
��i�Q�nK�.��8�����j��A�;N
h'o���{�4���
�Ęi ,�
R�
N��"ޭCPS�'U��Y��Z��)Ial��x܁I�b��&�
�_���2�b�
^��J�1PF�nᬘ��E�	�`�u7By
X.�4 W�>�t
�d >$e�iB��9r7`�X��
�x���l�z9
+�P������]7aX?�<	nфiI(DiJH�9?+1І@r�II.Z89�S�y����+�[�f����:��a��wȱh_>�+� � �~�?PR����G	�Fl�
OL�7)
��p8�c����� ���BLң(
(Q�G�
+�hV9��e� ��UCB�W����axQxX���{1���Eyӌ
S
7e��&��~��m��$�e������R�R��,#z�$��x

1ok
&YW ���
+��]Om���
+�
A�

2 �WW�Sk�=#%F���u�Ȉ�A$3 m�B�<b9fI{��lD�[�Q�W �#��-DW[���CF�i��b3�y@��
kZd �5����ZjkW?�akX&�f�h���G�m����,~K��`�'TYMaK�"�x���ɼ|�%�N����]ο|�#��t��E�N�C)E���W��� �s���XxG^
�M�t�+Ci}�dۇ8C�$� }4[�,6!��-�0����X-N*�]��8$����}����go�
0f��۠s���Y��S��F��*K�
�|F�L�P��|����:?�3�����&3�P��`�2�Lc�����ݫ���׃�����X���px¹�*b���
��vc�g~�.HB��)�5ډ*
o�62N��E#c'W�I7��Ĺ/���m�|���uY^�yw�p�.�)�O�
+p����ݼ�K�a��X�Ƌnq�Cq�z�懬�*����X��Tg1�P�Pc�R
֌�-�����5�E�

6���aXHJ
qz��4ZV���o�L`aό���
;�Gv>ߦE��;r�,�<vO�#�!���k9��R��a�����Ɂ��ӝ�Z-ř�9�ɧ�'r��
T�
�=!�z ċ.�} B����
u��O��w��1s��J�p�f����™�64��WS1ݦ�ÙԁxӤ��?���ߧ�� �}:���)F���0��N�VJ��p�K�"���~�T����p���k�_��ӄZ{��%-qc�
�
+H���v��(�;�qnvM�pn��IY�̽��M����Z&�
����{��[e�E�%�y� �?8d��V�"
�����a����Qr��2>���̗2m%�
���/!>�VyJZ�
��$�9n��JO�۴�G3
��0���X���������K>�����о�Z����6���ZRT:�c�(5�Q
+�zsݔ+���w�?mA���K�x9
�
�͜`���
?��Y�l��k�
;�!5u��@
+5}q�4���
��W�^F@�D�Hˆ�S,PbM��K��+@�����.)|FGM0�����+����&
��N���%�/ܟ;)«�U_�P�B�K"N��
���2�����u�^DǃGGؖ�b�>p�k��6��e����7�Uh
�}�Sx�A
�H�)��'$�=_!����G
RR��0Ȱ�Ս���e��f	�LCb�$��GM�ro�}�%��j�4&,f���:_4P
�"Ex��}5��0ВP]
�����}����[5�.�"[&y �]J�.ږl/*��[6�X�Y�2�D�ݝ7<
�:w&
w����t]@�V���͗p��~�p���[��?�fR�+F�#J��2:��|+;ªc��9��;|2�
̇
��v=3�O�p.�an��1�;_�j����P) l�2�x{���X��C1�A�K�h�bp��Ġ'�S@�u�Y_�!��Os f���=��-Z���
��ϡ���Q�؂@ ��q��!!�B�Zvs�=����)Sl/5
�j�W
+ѓ�}I�/��*
w��AR�5'AP|C�@ `ܦ�u�)��L]�B�{����I6��$e$���Y�@r�����MWچ��6��zx� 
U����
��������}
Y[�������K�&�RR��6�a���#���%� 
X�ᠷ�,
�,қd���@ s����d�~F4}�b�(
	1�
�4��x����.R�lj�~��}-�V%�`�a�j���a�ϖ�p��o_׳�<���Y0�a睽r�Å�
ӿk��O>^�^�(���
�3D)9�D�R�����{�#��р!vY���̆�1�`�9���w���v��	�zvb�
���C
�J��
��,�Łv}c`�l
��r�v=�P��=��G��:
+��;��\Ne����6��
F��Q�]�`7�����?U��"�?�El�t�2�y
�8lX�=�?��0�{G��<�l
��r�f��@�h�7���� �K[q
+endstream
+endobj
+929 0 obj <<
+/Type /Page
+/Contents 930 0 R
+/Resources 928 0 R
+/MediaBox [0 0 612 792]
+/Parent 921 0 R
+>> endobj
+931 0 obj <<
+/D [929 0 R /XYZ 86.4 726.045 null]
+>> endobj
+932 0 obj <<
+/D [929 0 R /XYZ 86.4 619.575 null]
+>> endobj
+933 0 obj <<
+/D [929 0 R /XYZ 86.4 240.393 null]
+>> endobj
+928 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+936 0 obj <<
+/Length 2077      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�D~ϯ�2���_`x�eZB)$�a���r�A�\I�_��]I�dE�Xd�N^j��=g���/[
�8���۫�/�1d$���*��@Q�$#��2x2<�S!�
+_��f6g��?<y�Ӆ}��*���O���v�&��L�M1�����ӫ�wg��
�\��ٛ�q��7/�����n�:�� 
+Oipy���ܧ�1₎�
8�P��0&�Z ��	X���3��ҙAJ�@���^kVA���:�� �a p4��v�R��q��ou�8•џDi�N^o�,	bT��z�F������H���d��*(s<)6c20D؝�ڧB"
���_��/�I��_)
�|ݓ�MaN$�;����'�]\,�dk���5x3'D���m
��X��m�����Hߩ���#+3�q/���/��[O�q�5���@��v5�4
�n�H�8M6q�{�E��Ψ
+�
�m�����T����Ⱥ+��3w.���_�yv�Gk�em���K6�t��{�t���%K�
�I��53���8
S��
Q�,W8à����٘�m
-�Jy�a��u��`d��;�ov�x3�:,����k0��L��Ժ?9E!D*D4R��
mBh$d���jlf�|���u�Q�m�,}H~��c�j�"G*ςң�,��z�a��E���S����!g7!�f�{O�:�
ׅ��˂s��MsœozZ�qF4ɟ
��dS��HX��0)-�dm���(U�L��
+����l�?K���C�
�
��{��.��"������k��j
$�%Sr��;���/p�iF��?�R�V�AB
+���Ÿ����2^E���ƽ�	F�n(U(��#7����ˁT�%RXc����
+l��� :�U8�x��žI $
mL��*
�~v��#�4�����.��)�/��UG`|����v�C�i`�;�z��P�y;��sa6��{n+�U��:�Ymq�*I����V_���������݀0?�*�'%H�
()������'O//G"
j�0��W��
+|�+�x�I�$J��]�����G��b�X�E�ڥ��� a
+l�$��*�K:�Z�d���z��@�a(��)%)��ӗ�/.F,	�0�gJ��L9 ��HQ2�ڞ�+DU�{�g�)n�f���8ܗ��&)�
+Ky�nF����nf�%ȗS�L�ZV���2����δq�ӗ�^_
�g��q��7�0'd�pӊ�ek��,w�M����K��å}��n�үH��4�{V�.�o���.��~H�Ue���K��Z��e�q�0�m�����19mh��r&�ә6��f�����9����̓�ޖ�ٜ���`
��*JR۾
�2�jC�0xJ���S��9
�	��A�X�f���̀3 at +��>�q_vد0;B�q8�Ky�2N������)\!z���N�x)�-Z����S8��a��'fv6 ��18�w�a .�GRܐD�
ZfTO>�ͣ,�™@X�)nCQր
+(��n[&:�‰w%�x�#��I�)
�,�x
+3�U�G<���S��h3E�mI)m�_D�B>
�"��;�2{�A�Z�@J� �� 3�z��0}X0e
+)<���S���O�f�Z^
 �L��q��G0eR0�aE`@�6
���Ng�8G�� �P���&&�D��M��8��t,�*�3k��m�z7|9E h��g�
�KF��~
M���5�S�)N���)�"����Rw��X<Eq�
��4~�k���k�hh��R�?o
s�� �a�T(
"�~��
+��ݢ� S������BU�7�AU�
�
Vq���W���x�U
a�OV!�
��S�*����GX壂U��
�S�ߖ�"���U.��T����ة�0�1�\c)���kN�Y�5
�
�L �GV:2|��
+����$7,)E���L/�0}DV&EV��Q5	�
��:$��β��6�GU�|g�6�UiUHX|��|.�cq$�����LR�ύ
f���N��c�#�G�ڥ��[��&pQ�Z
�U�*�m=F����U���ķ�$��C}��� nq���кU�9�&۴'�(����(YT�,?���2^��a<��؈�
+endstream
+endobj
+935 0 obj <<
+/Type /Page
+/Contents 936 0 R
+/Resources 934 0 R
+/MediaBox [0 0 612 792]
+/Parent 921 0 R
+>> endobj
+937 0 obj <<
+/D [935 0 R /XYZ 86.4 726.045 null]
+>> endobj
+938 0 obj <<
+/D [935 0 R /XYZ 86.4 701.138 null]
+>> endobj
+939 0 obj <<
+/D [935 0 R /XYZ 86.4 494.172 null]
+>> endobj
+940 0 obj <<
+/D [935 0 R /XYZ 86.4 287.101 null]
+>> endobj
+98 0 obj <<
+/D [935 0 R /XYZ 86.4 83.68 null]
+>> endobj
+934 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F38 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+944 0 obj <<
+/Length 3916      
+/Filter /FlateDecode
+>>
+stream
+x��[[w�6~���铲'��F\ڳ{��uZ�����n�i�@K���tE�N���
 ^�R�m�D ��o�@d���wg��;��+.G&2����|�e$F��Hr:���~
�(~1ᚏߗ�z2M��:N+�o�i�y�bŒz��_�~8��;�팂2�u�q��
MWg?�JF3��aD"n��ɶ[�7�������g�s�!��پ~��h���z
�ƌ��Z��Z��H黰K%tw�L��
ihD�t�����m�ܞ?e"�0����.����G̝t�Z�Z�8��
���^2���g1����e�x1�Y<���qs����c�o/�*b�X����3�(���W�	P �z�_���n
�[V�J����!q��S
�

���T���^�< 
6���U����A�li��	',R���QL�����u��F��v��RI�wh��5}l5e$ҭ��v� �"�n5-V��*-]�I��b�<>��L�?e+�PWYˍmߪ�5���E���4Y�֟�*]E����aҬ��_���b�Js�W������S)""��L��/�j* �]�F5��g����T� �>��#��I�^d3��
l�W�Nwԭ�#�
�[�t�w��;;c��]o�@I�]�KI4�[�d��g�����R�(�c��& ���1<������6{�MH�`q̺�P����~��1�������(�$��N�b}�&	#ǿ�B�o�{�V��	�<��d�^��,��=~��=o�t]����b�bA
�� �����b��#4��Bo���\��7�m���� [...]
+^�Hە4�Cқ���u6�D�#�I	vc�&}�
+�w3 �d�{� �Q�LO·\�dzЕ�
���n.o/��]|�$C-673�㧬zps\,��d��w�<�Q͎�i��4	])�7��۠�p�1*>��I���k��K�� ���Y�.����4]�Z�)�{�MIhp
h ���Z�
��OK�Ǹ<Mg��Z���c�z'�4���<�{{uq��ۀ⑤���ͦ�A�u�¾��ħv-P��Zb=�%`W�����F,͂�
�����!2�g�1ԃ
+�@����V��2R�ٮx�;Q�
� 1�f� � �P'���P�9
�c�i
����@�eb<C�,�
��*�Q�-��>�%���1P�u�)��D��1u����dd,B8���	�E����g�N�y=
�xh�Ӊ3g:F� ����F�5��I4,�l�<�ъ2E8����VI�O�3+(ˆГ�v�����
+P7����
�b�tW�BB��sX=7kT�ď>q?v�AS>�W�D�U���A���~�R3�,$xw�ߕ�?��
ۺ�,
���������ׯ�0���W<=��(^�0�c�Q��G��%ln?�K����kE�j��q�
�� �p�����s.6�x�n� b�p+4�
ܞ`
n{s8
+n��p��6��ˬ�Zl��Z��b-��X
/{��Y�5F�j�����
��
����6�"�<����8t�Fg(�pbv�37���X�9
���ڃgmg�i��sO`���c�uw�\WƇ�0�"=<'���{F�Ѓyp�kX�鵎�}>���b��1`��~�f��s��E]��M�5�|��p�`Ӿ�'B��U�#�x@{�E�&�g�Y�vz���^$��wR�e6K�h`H�,��2D��({���~����Cx��8���HH>�C�=<
��m�
��S�
	r
�qn��HL��
6���1�
Y����ژ�t};
���e��)Jx���7
/��!$�k��4c��^�Bܲ�o�`A@������R{B۳����
��x��1c8��%
�6�
+��3Z!��� ���YH�6³o4�{߽�<m �K�E']��<���	�I�?�
&D��$�4M�S
&aW�g�n�_\\�����r��v̉�U� }3X�dg�Y����3��g3$;4���xiB�
��󌁔�A�
�T��G Ȉ
4�	f@��l'�ث\�!
z
+�����xusuwu~
�00:�`�XҾ���׺8�K "~����t_����+4��w�9wGf��!�[���'& NzP
��h7�Av�J�I	��D�Rck��N����
Eq�Xm
?�90;`[�4��[:F�N37�gN����;��b
;��AW�������ۀTX}$�R
`�4}��w!#��
p�2
Q�`�o��\��wO`"�N���ʞ��MF�U��5 ����qW�h3��FXZ��J�i��
0:`,
}6X�����%�#Bx�n�k
����8��kW��'�y	�G���G
�3i�
�"���9����\B��X��ڤn���؁��xs/
�o*W�տ��,
����g�x�ev�R�n�<дS�\k0���F�/�����7�}�K 7V�G�����
XN����`‹5 at n��������s����x���v/{��`�G��O�=��U%	�h���Аr�z� pJ��a��D��"^ .D���,��J�X�խ��[�}�M	�
o�o Т
 ��|�f�8�^x at x�u�$�	�DGb$�):���T
J;%�"H��8;dm���a]�<���7���d���(D�(��
����P1�b�(�n���;�ח�C^�[�|
+��@�/�����>J��)�M��o|1t�
t���
_nK]�g3.��x� [$e0�6p"��
L���@��b�(��<W|�@�H<�^]_�Q����'�����c���Ӷ,�xk|L�6cI�7�7�
�6�=�〪P6�X�����$;]���7�
+��D�.OL_�����7{w������[�
3�ɲ6c�2>�wĨ�Ru�5𧈡|5��1l��:En�
tCl�
�5�?Ə0fjDĘ>��`W���ݦ%�}���B6e`�@�͛��77?��!����`��|t���	5
��

��M��V��L�+à-��os��Pj+�O
�1
	�U�O��U�t}y��j��%@����X1K�tZl�3�h�p�xЗ[��v�^l�=���,�;>��ѫZ�,��&�i-3�eHU�f�%�B��dˍ����M^�j�����W
y4�"����
~�.����aM=�@D`�.����[_�{�M����V�+�p�`���n
ԇ;j���N�c?�C
�;��0)�S�4��q8ٌ:����a�>ߣ�	���-kh��Ͼf�i<�1�?l��D�h�dg���2�o�a"�F�v/^�N���X���z���f-]���	O�#><28��ׇ��3HE=sߙD��cО�xLt
+�'�ޥ���puw�nw�����	֞�w���_~�腁xU��w��
{��#-
{���2���1�kNs6�w�!){g,���
:��Hz�;hG��iz����;z>�������44v�a��R1-�yOh�!t��
էHeǪ'�������(����.�d���7z�t
+��j��+]��΃n4��4����2w���
+vb�������=����0�r�k�N�0�C�6 �1��"2��]�
\S�6|
^I$�
ӕ%��������`��~D:��3�C�j��n�ca��~
���&�	�
ˈ
�޳���O���n���ֽ��ŋ.�4��Td�
�!?'e3�Y
+TO��Y���#��c��` \��}�L{�d`�d��b�^��hSg���?*
�h��r
+endstream
+endobj
+943 0 obj <<
+/Type /Page
+/Contents 944 0 R
+/Resources 942 0 R
+/MediaBox [0 0 612 792]
+/Parent 921 0 R
+/Annots [ 941 0 R ]
+>> endobj
+941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [490.716 297.131 513.187 309.087]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+945 0 obj <<
+/D [943 0 R /XYZ 86.4 726.045 null]
+>> endobj
+946 0 obj <<
+/D [943 0 R /XYZ 86.4 701.138 null]
+>> endobj
+942 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F10 700 0 R /F14 627 0 R /F7 701 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+951 0 obj <<
+/Length 3415      
+/Filter /FlateDecode
+>>
+stream
+xڵZ�s��_��<=!�"N���c7�\�Rۗ6�䁑h�s���9�_�],@�%���[  b���~�|v?��}s{�Օ�g	Kb�n�f6fzfd�b%f��ٯs%�2���h���|������������󻪦�
�y���2m�l��������?g�"fu<[��~���V0���3��٣���i�0	�bvs��3�߰��WD�%���D0ab���c;���
+v$�*�}Ȩ�,�"�M�m�Ud�}���Z���vy�<�PJ?wi^lk��:=�f����#��x쯮��mT�D�)�?�)�7E�Ċ0�[?��b�e�p��v�L'ͺ�X&f�Գ�I}�f�@�7
�e�F�9��%"f��!&�kD�#�ODG��-�2�I�q�89u���[#m�֛N�-���
�����ڬq)5���5�@�3�P��P��h+?N�W��y֧�(���6{E�N)�m�9x��҂�}iM����H���
����c�����I��̛�Vqs���B J��95
:4"�P
���A�	iiA��}��f\�Y
GL&��*&@vA{������J�O���w�7���/�ۧ-%gB�SЖR1�hsq�����l��JD�M	�u��y����di�YxN����ۇ5=>�P��öL�(�{e�>����w��J�U��t���U���/4�xM
+X�u�~?��

rIJ3km��W��&P(����UY�x��
h�۬�f
�cgHʪ��2[fM��y�D
KD#XbA�̖۠@h<Pkb1|�w̋z&�����d��Y����
�X��w�"n��;M�Z������;;�-�3)�ǵE  AUO�-B�DF���
�yBU@���� ,9��X
	�{?ASX��$4�`ƚ!��ˋ�?_^�rTA��L�Mk�z�l12q~_�y] Ak�G�~�7MU|�&'��ze��.hѐ�e �l��*�Wz�꺪�R��ض�!F7�
��{2�I=8�_�AL`GU��Y=Q�r[������
�8�q)#vn����D�{'!� �!��?z�X
�$�
x�E`>����R��N����RR_��{a~
�����W���cP�LDb�9
+��C#t���C�q0H��%hКŀ�S����oo.o?�4�a"OAWr	!��sx��*�ă�{ֆ'�X��ꝵɦ�
L���Qs�� ����v�Þ�1q(��]����M=t`�ؐ��Q�l1�=O�r��}
�^nw��
XJj����Ҿ�n at Z�싐��s	�30�x	C�P�r݂�;�Y���>�? `v�样��[O wP�5;8ؠ��
]!n��a�ވ�
��pk� ZPu��=.v"&A�

�a�^�~W[�B@�s��F����
ũ
�9n���:`���L�t�8�W����<
�3�&C�Jͺw�A�_�z����H2iNb�q)

+67��\}xwq8�=��?�|�K�'�J̯
 Iw�r�s�X'
+^7/�b
+�Ҏ�%V�J�N-3�
žDf�9[��p����H�v
+�.L=
���I+�a��!����c0si�E0ٷU>�O�Q!�7.t�����F%3�I�;�Tː��t��a����̀�s�9� ���`
�-T����0��1X�em
��U������� w5�&�U��
){������\Au0�Wpa��N���~���>]��B7�la�Sa��ʠ_�
I�hW=UX�S_$Qc ؑn%�Aܝ�Dd���:xZ����0e:��uQ@�O�uq����m�y���ǒ/5z8�u�l�
u�3_�찉/$�ê!F�
�
4�FG[Ȝ���pqqys�x-����}��"1篦��p��ؓ����X�$����zt
+���y�v�p��2y‰fɈ�?>xލ�*���T8l
3d���//�����
�Ƒ��N��:*7����
B} ����r�t�%&��I���0*R};�A�
+�Ih��b|ҟn߿�Ho��M��&�%*��.�pI���0٩�u��T�1<�ۺ�vw���sJw�1�d�i�^���Ю�ᅉ���vcȨ�vJ�#eW
�+����R
;MϿO���Htދ�Ǽ(<�:���OF����Y���MU�Y(
3��nm��u�
5ȖF%U�!����=�W
�0�N	��o0�pW��`6�L
��4���Kˌ����#� AI#�.خ3H��6.�&Z��i�k��N��~��cw#��X���0�Iy���0'���1��H��n!��1/�)F\�qu��+���%����h>�
�65�h�
+�.e�����ZKL/�ѹn|���Y�y���>
+d�o�M���kj���t[x"�v1�
F�<�ߞ[�7���,M}�Mε
�=��86�2�y�
l�y��Q�M��y\���
!��翱,�}�pP���4?�w
��j��)�Yֹg��#��ZP�a�2ު��z���n<��h2w$pm26A��y�,!UDŽd��
�1o���`
�B�b���q}��,2L�Ip�x�����v��6[h��I�ɈC�s��=���	U8�ɨ��.oW��!1���չu�\��2Ť��6$"늒g�e�l�G��Ww��/?�";#�j��U�Z�jP�1��0h��4��H����l�2�0�+��#ݣ
�� �
�$��{[�/䣳�z^V�o��A at Z㾥�._m�&yf7
{�@�Vw�聺�����&C฾����
��W�۱ ��M��*�.�|��fb
wg՜��h.�����+��Ca����qMC!,��~X��3�f/,����s"�1�����;�|�7�G���wQ'�}�
�i̝;�SڧP��LZ9�Cw�:���T�l��	&0�������B��<��O�J�R���
��@��x�%\U��f�7T"�sR
BJj�2]���2ܟ�N������qU�B��Р�߹ҋ��'�՟�y~G��pe����og���r�#��q?���˺�ʧ��E�>��'B�����
)�U��xbX����i���]F(�l�*|�����w at N��:��mx�W9���F���O����y jHA�]^�zȻh�
<i�Y
+�Ǜ �wd~؁OY���h��hf�j�@i4$�౎��QR<��d6q��`�3}�P2.�p��i�������N�K^���l$|�y�S�C�m���M�"���k����>R�3.*Ȭ���K���(����֯h7 ��
����XYX$
�+�;u�����(Z�X�ՓI�V<�����3-��X	
+1��4/sTI��$��&]�8��~�
+���a_/|�ѧ���%�À
`��{��a�vv�kjj
+���`�s��`1•꣋�{ћ��������gl�t��g^B�B�~�V�௻�<&r�:|�4�_ɀ 
+endstream
+endobj
+950 0 obj <<
+/Type /Page
+/Contents 951 0 R
+/Resources 949 0 R
+/MediaBox [0 0 612 792]
+/Parent 921 0 R
+/Annots [ 947 0 R 948 0 R ]
+>> endobj
+947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.939 262.457 456.662 273.305]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.2) >>
+>> endobj
+948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.356 226.591 341.078 237.439]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+952 0 obj <<
+/D [950 0 R /XYZ 86.4 726.045 null]
+>> endobj
+102 0 obj <<
+/D [950 0 R /XYZ 86.4 310.2 null]
+>> endobj
+106 0 obj <<
+/D [950 0 R /XYZ 86.4 178.759 null]
+>> endobj
+953 0 obj <<
+/D [950 0 R /XYZ 86.4 107.33 null]
+>> endobj
+949 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F14 627 0 R /F11 628 0 R /F10 700 0 R /F7 701 0 R /F48 539 0 R /F38 453 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+956 0 obj <<
+/Length 3283      
+/Filter /FlateDecode
+>>
+stream
+xڵ\[w�6~��Pߤs*���s����S�V;}i���t��tE*i���$(P� �y�e3��}���`�i,�s����O�T,R�����B
+�!QHP��X��d���T��"ޭ7Q���x}L��׏�lS&yV��D	&�����u�����

f�6�r$�Xl��,
�/��J.�U�m�*D�tqw��"h`
V����
�\".��+@���A��Z3Ɩo�4�(տg�${Z��,ꯏ�N�����pC��z��$+�~��A1b�}�GGCRZ�<�Y�b���S<�D��v��B��UG����n�l����
ZU�#
�%�{���
-��6�@?�6�i��M}��"��������6�!��̀�}ٗ)�
a�fCF~쀹^)�lFb�,��} 
�,�<^a�B�uq\ŏ�>ux�c�B.Gv2�p�*��H��$"8�"��#�v��7o���֚�FIC��%�xw�3�!9{2:�3#.�P�HG�p���׎y���X
�a�H���O�HDL:��Is� ��uv:`fpK/
 "�e�k�
�G�<��ϯ�s0���>Iݑw�y۝z�+s3'ԟ�� [�`��
���t�n�l9�NR��8�y÷e�(�
~����C$B9
�#"��d�y/|!��9��
��M�
�fSC{NO�����04���S�8
+	��b��Iȟ�I#�gD�8�n�-��τ�
�
ߖy�|�Ip����
VC1O�Q�(�**�F�f~��P�l���3Kt�����a=��ahM��
+ȧ)���ض������V�
�$�'�uiU��]���#��2/tE� ��
+�~��O�:��F��_���u�H�n��k��풬���Ʃ���3D�
���s��">Oc(�Y��u���2M�~�	՜˥ɩ
�Y��IGͯգzI�4��P���a�\��o�
 )<dO��!�F@�m�g�y�:��ɦ�|���7)�����]�O��".�O�)
��M�
��4�`wn
��90Nmח�w/O�:�l�U�b�
�j�)벺���a�Қ�/s?5�ht!��K�U;�0�P$p3S����8�N�;�
����ܓr����c�
���i��M)2
�aX��
���h\Q�-)?�̲RŐ�
��M�
�& W��"JSϘ=��
�6�����,
+�<�-8�
bَ}�����3$l���6zZ���Da���:���˃@������6�ap�D[�K�(��

8f���z�۶[�4�w}�r�k�g at pF��yd��i �rb��u%�Ƹ���a��Yd+�k���z���đy�Q0�yM��Woa*�r�M��®ї��/~y{��%��qp��r��=ψ�0
+q�q�F�2jS�T_W\,�t{*�?�
@��j�ܭ6z����W�Okn����l
�-�m�i'�p�Q��
+�a�@{����{ ��0�@�<r��[�
+ѐX����q�uk��o��w�.����7:��H
�ɫ0�	ʣ��(�ʁ��(�o:V9?4V2#	�b
�jf�m���a��da=�
��2����YbA� 9�YI�87�k��Vl]h��t��hm0��?|$\-���
��/܀ "�,�
�!9�L��C1q>�6�=�`��قy֌8��F46
�<��Ƀ*x>�e\�
+�F췹V�7]����zq5����d��
�J�qx���؝�w��u��I���3P��!�c�̺�p�}�C�(�eT�
��b/6�9���f�$�T~�����y+D�2�,Ҍ��f�����5�;'�����3��pP��CD��d���Wz��lg�+�l-�sY��͠�w4ëcX��B�%�€uZrAf�A=g=�ߒ�;-��{��x!��y:�*��Grt�S�~�Yk;�7y��4��s���]�ك�cw��]n��縌��ķX5��M��|
��M���)��\�@�
�Y����&���J,\�႑ќx4g���{�J��u�F
+�Vk% �:��8�n�m�&)J�ɯ}���>Bw1�s�US>��e(�p�0:)��F��5���LSv���*g9���]��0u���9�1�D(������:kWI�2z�{cշ2O�]�m<g���s���W�I
�
���='�{Ȩ�p��;95:���V)��MP��5��y�z4�o}�h/�sKc������$4E��&J�u����Þ%�q��ڱ��ک�t��g��|l
g�i�s���|w���+?͑
A��L�z���4)uR����A5��r�Ѫr��UU�TmeX�-O���s#���e#��U� 0+})�
��l��sí�Y�T0�&
BH�9��9/U|��c��Ӑ#A��Q5���L�2�)�L�z�g����F{d�>�y*z� �2U�e��
+���M�6[�M���X<E�fѯH��
Fbtr��T$���y��?
�
˞:d�E'�!'�n"�PA�,���b�Z�#�",3���]}G����-������
�JMs��\�!a��9�~U��B�U����G��({�88�;Vlh����p�0:�e��c����
e
6�g�sD�|G��­)~��ڵ&����
+׉�R�s�j#kI��q:�;�S����&���]�R>�j�@�Ж���v�?F��XH�4�� �yh��y�T�zwG͹1p
&w�ؠ4aU�����tט��A�S��F����~2˒7!>i���	[��w�*��JQ�)�%�筇�q �����_o? �o
���Nw�!�F�7Ī¾��"���������W
%
F�WB ��)0
�\έ�q �J��H�?Ż����2z�q��0�S,�VW`��S�
+Cm�
&��޻����p\ήa�ݣ�v�,�� ��zome����zw`B ��s6��6#��
�N�4��M6���olw����&F;0<��p�}A�� �,E	a�0���vq�5|�6���ك�
p��8�n~m��GhOS<ñ
�,�v
K�>z��G/tj�
5�y��	�
�_pP�|�H`$���$��2��ź��)ۭ���ʣ�7�[yVKx �^�=���38���������=��'��;��[V&���sp��)$��-0y�@�����Cw�m���]�@kW5:‹������Y���=e}���b8
V��ץ���w��h�<�٣љUuVӕ-�x>k���Q;[83����=ᮞ��S�d��}O��;Ǜ�$
+qؿ!�Ϯ�N[�+B�M�'_Z:���
+endstream
+endobj
+955 0 obj <<
+/Type /Page
+/Contents 956 0 R
+/Resources 954 0 R
+/MediaBox [0 0 612 792]
+/Parent 958 0 R
+>> endobj
+957 0 obj <<
+/D [955 0 R /XYZ 86.4 726.045 null]
+>> endobj
+542 0 obj <<
+/D [955 0 R /XYZ 187.06 639.516 null]
+>> endobj
+954 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F13 706 0 R /F11 628 0 R /F10 700 0 R /F14 627 0 R /F7 701 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+963 0 obj <<
+/Length 2620      
+/Filter /FlateDecode
+>>
+stream
+x��[I����ϯ�-�<�����

y�ȑ���d(
�C�P��}��+1 5+y~s"�ںꫥA:����?.�~}���3G��zv��YM��pG�`�����\��Wʘ��"��\.���|��߯�X�7Y
.>?�����ղL�}q����W��^0`Hg�b���z���x�
�����3J���O��ۙ�p8���\�xA���-��˭
#�� �����6�_r;/�
}"�^�6	͈�
+���?��cᙖ���H5&� L�Z~/o�ӆ0˻2�&�
I�:rJ���?SE��
]A���3�t}�P\��

�<	:X�"�`�����z�y��%��B��,�-�I ��nc(�-��n��$Ʋ�)P6�?��w��B�H�
�2X�����I�<�܍�NRX�/�܋���&�\v(�e8��2�K�z�FB�
h©
+�J�C��}�Tj��
������5��*�

+K�wR�h�[�
��%Ჭ+�6�.���dQ�!� ����t_
�g�@
�2-���}�
+؎z�A���`j$��$��I�Hi��y���՛7cި�nT�^��!s�
z���p��v��
�m�I���a�J�bs��b(I9
?��e&��9v�t;)]-�W?
0��(�&a
+9A
�e���Wc�����4�N
0,��\:""�Gj�v��E��Hr��:R���GձB�B�/V:�=��a�.�@)�c��d�:+��TB۸�:�,��U�ˊ�R���Y�����lV/�Ҍ��j�+�5�:��^mT�ރ�����E(�$��%���Vx5�XO+�T��(B�X�����X�v��� �9�>X���[@��M%ALCx�p���J���~x��,ﯬwX wP��a
0┪`
L���m���6�
+�(&O
+��&
�B��5\M!

-2��mJ���$s�^o}�j~(�pip�4'�	����*�_��䘛a�I�噞nQ����[YN�YV|�
rX�upCڍ���a'�R�/�s
�$�z�ߘw��
+<.Y�.��i.��[7O���x̪�h��ү��p�����Άx���`�e��J(0f
+���(�� ��W������³��|�]x�c}k�I-Z��z
�@�2SR����~�[�o"��Ĝ��K����u��p���%P
+�dU6���,X]��ݲ���f�jrO��1�
�=�V�
�O��rn���%�h��
��{�uP� ��q���\�׻$1�kY�@�/��o���	�
1�fB�
�$�*�|GʭnW�kl�V�-�
[1y����
+�ًq}N�:4���	��7A�d
^]Hb
$#9�$$ ��H�^�K⿎Tj
�1�Ws|��<��ѯ<�,T
R�:l�@�s��#��jWg��uEX�~h�b��s40,+�-`�3H-�b�  �
#۲-�p������B��\JvS�ZwAh�2�	��D���CT�Q�k�谝�����H574��H��4Ky�,%���S�R ����X(��#��j0X�T
�
J0fk��z#��[]C� V`����=���I�H�C*aY���h0t��&z�OG�#���$`=����؊	`�u�5 �
*
2KU�yd|!�pOJ�����G�;M��߻�&��Ixn �%�R5���0�b&}IB����eӲ�ˡ�c��`X)�Ã��L<�pz�������?n�X1A,�8勖8V� Z |
���䘑�|"Z��>
+����B3�֫ ��� ����5��'nlӗB���vg��ʩ�(�0ʞ?�8��ƅ0[s�Pt
+�q(�a�u��hQ
E;Z�!��ֶ���`%�
����R/�dS��I�5x"i���"�ԯ_�c�`���\	���7�{���wu���=��)N����#TP��P�
�iw�p����M���5���`u
�
�VրM]���R�6=V���U01��gb����~C
G�x^n�%
�7$e)�ؓ-����e�GbHW-��F|��	
��3�R
4#�����G��Q�z���8��=,���7p�,u�s�k00�1��
�p�a�� ���c0��j�1w���ɗ�MV9e?ـ�=�{� H��mѳ���
�.1RO8��Lp�싃�
p
Y;��/���(ь�R�dswr�Ġp��!�y�'-�!8V%��=S(�բ��J�
�M�60��զ�
j���,܍�����m���a�I
o��p-�ca2%@(ZŸn at z��>5�~5��[�q���0*,��e�]�מTq!��uS�|H�iP��AUէ�~�zѭ�G7�'��1�PY ����AyH���N���3�)������6�hQ5�
-��\����i��8��/��';�m,��<�î�W
�ag< �����������D(� !���*�K,1�b0�
�����+µ���}�
�%1��J��h���V [...]
�H6IʇΞ����7��F�����ޱ
w�����Gxp�N<����v�)1MkQG	� �G�x҄'��l�KyL=r3^�ތ�~!z�
�{�:
+endstream
+endobj
+962 0 obj <<
+/Type /Page
+/Contents 963 0 R
+/Resources 961 0 R
+/MediaBox [0 0 612 792]
+/Parent 958 0 R
+/Annots [ 959 0 R 960 0 R ]
+>> endobj
+959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.393 438.171 488.864 450.126]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.2) >>
+>> endobj
+960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [497.483 49.651 519.955 61.606]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.3) >>
+>> endobj
+964 0 obj <<
+/D [962 0 R /XYZ 86.4 726.045 null]
+>> endobj
+965 0 obj <<
+/D [962 0 R /XYZ 86.4 525.942 null]
+>> endobj
+966 0 obj <<
+/D [962 0 R /XYZ 86.4 306.522 null]
+>> endobj
+967 0 obj <<
+/D [962 0 R /XYZ 86.4 137.146 null]
+>> endobj
+961 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R /F14 627 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+970 0 obj <<
+/Length 3059      
+/Filter /FlateDecode
+>>
+stream
+x��[Ms�8��W�(oEA ��=�&�nf�G�Sf���(�Z҈TR��� )��i9Vf���I� �nt�~�����$����WgO_�d��4����rb&':NY"��j1y?�L�τ�wU��ͳ�<��i������n5����:��i"�T��?�~:��:��c�h›n32��o���Mx��$b"5�϶��D��Ÿ+'o�~=��4��t��L�K���$I9�:q3.n'��a�K�Ph56��0�
�L8KU
����̎������7�<�^�ƿG*�ƽ�3Z6m>����L�j�7�4h	!L��c-��n�f�.V������i�vow�{"�l�MVU��=E��Iq��TڌU�`�'����/�D���/~��6w#��V�
YS�`��&3i���̸f�k��-�wە��ӹRӬ����g*��W7~��]_�%�Ev��@�2�
P�Xv5
��^k籞~9�^�C#
wҭ
+W�a�\1���6�Z��T�峞�C͸�LM�<�������H$�$\B%L���\B3���D�ݠo�=~���WH� >^f�n��-�
(N
ȹ�
Ky�G�j�u6Ow^r8��L��@��+��ShO�t���k �'�`�ie��H�l$��~�
�ç��I[��󼪖�����5������
IX�1&�0��S��"g����x30�LE�$�".%"
�|����PNV{h>q8l1�c�:�"�)~�GJ���P���v eR�ņ��E�C�����6�)&bi�BX�c�t
���Ϋ>����P\��E��v%�
M۩��ҽ.V���6�xa����K+
޶Pb_-�m>��އ��P
���z5˷��փ0���Ռf9A�H3N
��*�Ϋ0��M�=���9���缠7.�J8-f���O�1���0�Ӑn� p쐇T�`L�m��o���|Y��a�([
�>�����
+�Ԉ��p��5��{�T��Ȍ:Z�,J�;=ȤL�
�5���J����u�)/��Sx�
�JР~�
�J���w�DLk��xN�}�Iwɏe�w���d��
:T�o<Տ�3ز���'nF�˒&���Y
��x�7/�j�-6
����s�sf��!3�	�*jݣ�4�C@�����;�
�k�+��օ�uUx��i�X�����>�`k��ɏ���m�%��,f�^ b�8P��@Q܍� ���#���u�U7Āw�k
��O
����0J�6�B��֯��rmG�Ә�Y
7
��H����3��9PU>Dy�g`� �TU��
xu݋}�Ȯ��;�M#@6fR��]U7!�����	��-����~�#�*W~YC�A�tQm�̹#M���F��C}�G�i��u�q�����*��Kh
&֌��͸�9��
n�벴����,
uf�
v
�}�
+98��Z=���ݼ,y恐�0{Kx�k�q-�B��hj��"�a2�X��I:�Ya���ڮ;]�\��Rչ��v�_�$�YM��
eu���n��8�
8��O��3�N�P|����콛 ��e�zzp��iJ��:߸;�[����+�hyrci'�
�T�iحD�/�y
�J��i�mW1�fz����}�|�����t�A��F 	�iu����·���9���u<�5Mܚ��ņ
+S$${n�s�}s�m��1��C
:�E b�A(� f��G+w�\}�C�F�&�;oNj��ۭ1��ϼ�Ɏ�<��G�����r���I�
ك.��ؾ;�B��>0� :4�`HM
 �
�*u"K3���@��;%��[��i�ٙ����z ��
�d��TMN�0f
�_���J��h��"f���n]A�FL:�~�D���v�� w�\;�!�
�e
�Q[�ӔI���	��c�)B��*�U��Qc
+6�	�'O[2���о�>���1�M���ˋ�?���_ƅ���?t��$u ��~�7a��cwi�
��rW��l�(�힓��������N��>&��\h>�jb
�_��[
����
+t�ٽ�)� c at B��n�
2x��Q�Q��@KmWQh�.���˅OIZA�j$�<`�x�&n�V�Ɩmp�LI�m ��	; ��@a=\}�/=����(�8�E�lPW��c�K*b{"ݮ�z�:s����7Yd���E+)��}���Q�O�J
+�4=��(���J�)���`�{*)�'NPI�E*}
+!b�:2�ߠ�(��Å�wL����8�6�����+
y5��K=h`��X8��/�
dave�f�SO�x�X�/vu��z��v��M�s�l�w��2���6>8�9`0"�A臕�h۩-��g$��*����U��5���Cާ�hG��4�����r�
+N,
.�n�ӱ��霞K@#_1z_�@�s����7q��ϝ�|Ө���
&ȁg4��
Ic�	B�7��a��Ʃ:��0UP�4
~�D��\$���^d�x����^1�k����X��a��tЏ<{�m����Mf;[����}ǧ
��--�N���Y��[w
��5T��^�
<_
+iO��
 ��`s�lV�6��hN��g�p�����KN
�+����*Py�2�<�7C�j:�����X%.lW���o�G,���˵w'�΍��0���

���c7�s�o��r�?�I�RҦ�I��?K��\�3ׯ�s!���s97L��(
+]q}̉�S
�Ӑ`п���	�hN
R��T��F�<��(��I�t̰
�g�A�:
N�Q��	�"���GQg(����*
=Lz��
�G���TL�R�FM�/n��
DbLG�
�
�o�$[�rlC�fR���X������d�?7 !3�
�	ȝF���k$H�܆�v30
��f|����kn�=
+T�
�O�~�"FםJ(���R'�U�/���鈬}�~�AO�C$�t�)�ޭ���6��W�̑�g�eP����;}�~DM�אZ�(��M#T���}�\�æ����m<y��r~m_�\W�}_w��G���q	VpZ՞F>6t�-�N������>�+���u��"mq�%q��%��ֲ�=d�:
W5�+���*��
+endstream
+endobj
+969 0 obj <<
+/Type /Page
+/Contents 970 0 R
+/Resources 968 0 R
+/MediaBox [0 0 612 792]
+/Parent 958 0 R
+>> endobj
+971 0 obj <<
+/D [969 0 R /XYZ 86.4 726.045 null]
+>> endobj
+972 0 obj <<
+/D [969 0 R /XYZ 86.4 588.289 null]
+>> endobj
+973 0 obj <<
+/D [969 0 R /XYZ 86.4 255.989 null]
+>> endobj
+968 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F7 701 0 R /F14 627 0 R /F10 700 0 R /F9 719 0 R /F13 706 0 R /F49 566 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+976 0 obj <<
+/Length 2612      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs��~ׯ�#�2g�>���+����]K��ʻ	Y(��L�>�}�g'A����J^�`������ �����?��~q��K�'�8����zb5��
тM.��wS��g\)c��e��?�	+��<=;��5���u��/����m�.更����/^
�\
}<b��NX�@+�d�:z�;�,�ɫ	%���g�n5��w�����#�ӡ�H���8E���t�W�M���Y3FVsB��$�Τm��$�c�
��
+J6g�՛���M�
���X�
!BO
�⬽�h��m��Q�9��b�e^����5#�+x�W_gs0����p�Q�oT�i��
�$�Tx�
� L�z3���
�C��FV��Y�i�%I@�����Df�1��ʌib�
T~J��:�E��;y7cL���M�"����M���Zؓ�1K������+�w�z��.v�,��(�I�<�tS1_Ϳ��cX�]�'�178�����:<(��"��<��TP���	�
�T�@z������L�Z�E�:�o>_�߮�
�۔�����A�aZ*�v!rY�b=LpG�Ii UYψ�pJ���h�g.�5��*�e�ƿ잵��Z�"� �
+1
�^�Aux�B��O��=)֎�[��]Yd
%D�ں`���k�z��\��
3
hT��a��gѝ�p
Q]V�1Ƥ�fw+���ʋ>���O��A:>��'P�-����'�F�$X��]+�l��<���X)p�mҏ��2p�z�}�Po�M��Q��˶
Ѱ-�T�W��C��m ����A53L(lW�i�W�I�Ϳ��I��Y��}\a޴�>����)���ŋ���[Uj�j���>
̳�q89
N�?��G����i�#e<�r�X$ey�Ͳ�me�w1pg*Mt1ue�N;���*X,
+ߜ�*hQ�
�'"Z�.ϳ�ׯG�&�}:��
�Z7�I8أ2�W�j�{�y��K�PV��P��~��
	V�k'���
�������>ļ�Aľ��(��i<�a�: ���:L�~��x��=2���+?�k�*P@ڙ��`Q��&�������5B�rb�<+6I�O1B�ȺL���l�O2~�8n �(
6QW_M>߭ h��Ake�X����������!
�I�D	M�|�
+����d*����/__
� n���O�N9 �=V1A�x��3
c`5fǻ���
+s��i�n�f{�y>X��
+�}5��C���_vH��(�N܉�5u����}4�3��aO�s
��~�������@O�F��x� �X��<L�@2Ų'x�~�
+��
+��dQ���
��B�TNu!g�����J�y����:D�
+q�b��f�cb���X͗U�)���[#W	���T�0���>�U
+B����r��;�O�
��Ԑc@�h�(�d�o��&����Q5���A)
�1�1�v
+����.��wdqA�8@����
�dpA�C��c�8Q��,x�����|�;!+��k��Ԏ�G�bB��å���yY��1e�|���d�����z�-8t�T�c<g

��^��x{y����p�m�M�^m���B��}�z��Q�!�#�i��*j
+m�s��� � {=�Pe���`���n�m\Q*�qE)
��ݍ�C0�@���N W��t�#"�~�.8�LiLw@/�ߣ��{���6�]�����A��a�S* d� �X��)Q��K A�^	�Vϳ �
+�p��	�����A��3u��AȞ~aQ�7�g̝�Q�ˢ�J��Uu�N
+�ױ��,�č���G�ꤚ���J`*n�
�#2̴���E�Pb2�P^��".���S�
�q.��M�E���°�/��dU��9-���7�/�n�P7�5�1�����C`w.(�-���mv0�^��<�SQ�0�;֡�k�Xl�d��Q�V���p�'_6Â{f�Z
�F>��
��i
`prV�5'���y<�6)��pE��}
����o
p���}��AP���� Ts���X�@����D�qpvvZ
3�8`N�
�7 ��
�`��l��J�rE�5#=nZ=lu�k�۹��?�|���:)���w`�*�C�5ƥ|����2D�d�f���ͱ.“�j4p3]�7��7�0Lj���
�����[��n�����K�m��;]w
�~�[�����n��Z>��
��5�K��I�
���呏]O
�l!�45�#�;W��A����O��!���������>����}Z
��� zR���Q�~��w��w��vQ!��.�o�~���P�(D� ��f�)`�M�G��>��)q,n ?,�"
���x�sc��a�%�^�d�6�о�����~��� ����xL�հ^ۻ����V�lC�·&Q��d���u^�Ӯ�]�.\���p7GS
+�N3P�
 fx�)�@�
7���M��
+����}�_O�:�J�P�n�$��9u6�<��3		fb�e
�~<�"�?��~�Z
'~8]��Oxۯ����4kH�<����P�h����~�d�
�]E/��
�����M1�l��&�10 t5ϗ��h}����+�d����m�`@5�=��R�K��m�ζ����߸�Ou�3�L�pS
+endstream
+endobj
+975 0 obj <<
+/Type /Page
+/Contents 976 0 R
+/Resources 974 0 R
+/MediaBox [0 0 612 792]
+/Parent 958 0 R
+>> endobj
+977 0 obj <<
+/D [975 0 R /XYZ 86.4 726.045 null]
+>> endobj
+978 0 obj <<
+/D [975 0 R /XYZ 86.4 701.138 null]
+>> endobj
+979 0 obj <<
+/D [975 0 R /XYZ 86.4 516.335 null]
+>> endobj
+980 0 obj <<
+/D [975 0 R /XYZ 86.4 263.42 null]
+>> endobj
+974 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+984 0 obj <<
+/Length 2694      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw�X��W�D}�Wo
�O-�՝T���R���:��K������a9&��9�H
�;�;}pt���g/fg?��dd��TF�E�%③IF��<zs$&S�Y��ȶ�4Y�&S'׫�_^�6i��7�dJ��:fj��������3lpD*�i.�t}��O
����#ft�ɭ[G�D�h]��v���]:#.�
�%"�ԔZ�1��ņh�j�����n�� �U$
ADIo��_]^e���o��ݝ���CcC�,C��y��C쀛���.C�U��N�Ꙏ�� F�q���f2T�?��
K�����
�a��d���
+1D���9��5☴UYg�g^�uq]d%B��ѭIdJ)E�L�B+O�eV�����ֳ��)!�ij[JBDLH��.�HH(AR��pG<�-��7Q�3�
��t�&<+,[��u��r=�����	'�{���G�EX�oV�1$�\l����
+v�`N!� #�#	a��Ii�x�&)��'A��"߮�ykAi��4�kA��x�L�瞴��Q�fi��/� V{-��E��4�^VB֪N��J[�����֭���٭3gŲh�?)6z}�H�0��#1L��D*D4u���|~��)F!��60{<�!�j?��/�>��q�
�մA���j��7��:��vڻv;
)Ҭ@
+[ְ]��z8rH��Z���Ϟ��*w\S��JaS�	l�C�Ӂ������!�[囐���PN�(���d�(��G�]i����(Βpنo
�p�iY��ҟ$�/u�nK�=sq&덉 �����'$�n�Y���b�̯!�����C���ݔs
�:�*N�����+r��x�I��}�
̳E�[�ݰ%�@���6��;p�n�s'B�������!uê�'�!�4�.(���`g)�nތ
+����*���b�
)h����9��|
Fݲ���	۳��p�d�v҃�t<k	x��Q��%E�L�ޝ�_\]
���пU:���������s�y��ذQq��L��b��YQ,v�U���I�*$
r����U��b, %TH�o/��0�
	h]�`
+M�d����ݛ7���0�ܟC׆�Õ���B�1��B!�u[�P
;�d&u���.Z��p�Y�ae���khM���d 
�~���"f
��eL`�*�u��������_��
�bnk��ISqٳIR ,�
�W�ö״]SZ%�Mv���S�Շ:�T��\�eVt�
�J�eŬ[o|����Sx��ӣ�k	�1RW��W/�.f=�
���F+d44P%��)�C�������z4���.�h3��A�#�n�R
����� ���3�`�9�	쮇��+�N��btM!5҆?��c ~�qc���8>�ySx����~��ά-m���bw}�p��f������ 4�u
�;`ho��n�)[���˵�طQ\�Q��ڣ���P�]P�
+?	 �$�lc�&�p���m��-��n��^� 
pݙ��ϭV�C3^,�;��
�7�2�.-�r�~ug��z�˯��9d%���ג"JG�_��I�(B(���_�3j:�8��?��F^�{o/�b
n�0ޞ��I[C���5~��WB�o
���
��A� ���\H��C�
��N
z�Ґ%E���!9��p
%g[R�� �L`j1}RH>�$o)���Oq0�N�
�����D>���ZL�
���}�_���\"Mu;�>
(?A���r�3��A#c
��pR&�EZVI�EO� ����v&��x>l �oq(�*��1*�@�l�{nK���6�?J����^�&շ
���nw�+��}�#��؃�r���?�:+{
]��I T^W��UD���:K6��֕�� Q
݄p���Π�v7�w�Z.��jM��9X�����Ӛ6�
�|�!!ڡ����Us���H����٦�z�a���.(�z(I��n�N6�޽��
�:V�
2౸!��O�=*�M�˶�ݺ�ۃ�/���;6��\C}
���!i���_%�M� �@��g:E�G6�{b?f�(�����A�T_��k �	��gR�Ž6�L*���(�����r��Q���R �i+�Eee����4�wE
F��/Eqs�(���,��$m9�
@qPp�v�>$Q{�?���7p���]��u��F%��n<�McA��5�	�(9{�@p�H{��z���D��03�����Hl�`q������t��3��}���=�P�A�%�o|Er��&ۤ��W�6����ȋ(h�8����$������G^�‰h��:g�:�:}�yF���$�&E~"%I�{�����:��
��`���쾘�z8��wT|�`�Mh�z���S7�ù���쉝����P�!�sO�$Hj�ș=E [...]
k(���Q"��8���������E�yh�>�� �H3(>�P��(�3lT�~���Y��S2�Gcd$�z�_�����}*z��/�W��=p�,�s3
��9���o�;�q|
[I�7A��+��.����v[T�d�!3,�6r0�%
���'SO3����fF��@
+��;����(�l�D�9a8;�0:k�|����U�&�M��o�,�T����V�'�eG`|���	����rh�y�̫�JxWh��%���~�e�G�O������0���4�倫C�c|>���c���c�QT����iU��
+endstream
+endobj
+983 0 obj <<
+/Type /Page
+/Contents 984 0 R
+/Resources 982 0 R
+/MediaBox [0 0 612 792]
+/Parent 958 0 R
+/Annots [ 981 0 R ]
+>> endobj
+981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [519.623 146.622 526.596 158.577]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+985 0 obj <<
+/D [983 0 R /XYZ 86.4 726.045 null]
+>> endobj
+986 0 obj <<
+/D [983 0 R /XYZ 86.4 701.138 null]
+>> endobj
+987 0 obj <<
+/D [983 0 R /XYZ 86.4 486.884 null]
+>> endobj
+988 0 obj <<
+/D [983 0 R /XYZ 86.4 250.307 null]
+>> endobj
+982 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+993 0 obj <<
+/Length 2644      
+/Filter /FlateDecode
+>>
+stream
+x��[Iw���WLn`���꽝�0L"G��E�a
I<c�1�l��T��=�@
�XO'�@��k���@���F�<����O��*��*���md�f�(��&�8��|̤�z�!�-�����ѿ_]]�}�^���j��y��y��0�M��l�L��|v99��
�!��d �*�.�>�@�����nM�Kvn	n	�W����?g��pH�R"$�T�PQ�(Hk#e
��h�iF�R�Lk�4�f�F��r�9%��M|�z��7�o��6�2�Q��/hBM�1�h�6���>��$��\��yv��+��
+g?�N��c������M|���4[�©$L��''�M%M�(�"(x�,�ŋ�R�&�K����ƌ�Ƒ�$��sO��z�����n�q
�`4�O08�n���Tp5`��Zc;\ſ
PF���w�
K3J��OD��<79s1�:J��
�l�>�K9B��0*θ��� 4�pE,�%�O�A�2����c�<N��ǜj��5*�XY�	bz��M��g����"��H	tv����a����
)-�Tw9yy���z��j�Yj"�(e&��nj��y��r}�]$�
R��Aq����kr}�
+ at i�9�{8�'� �t[��!i��91������&���*E�ܰ9�
)w��,W]�νj���,w�f��Q��Pw�j��Q`���
+�Zɩ�8_e\���O�/ݍ������2�ܸGq��1���:��/
y@��o+��x݈x5ʒIO�c��jO�K�i���B��;�(N��C;(������]�,#ZU���]嗝-o\�x���n��x;ߴ�Oc�e�����d�]/�䗄)[RZg���o���
��
+^[:A�h:7]��8�}�<\��._�؀�:�n:�V5
m?���W�B���w��,����3���Gb���
"�8R��<�?\\\^_����ز�"Wf[e�8��r{^�G�q��Q�z���0*l�n��$Mo��y��d���f��~���Jc��� �BR�
+e��|���p"�a�)Fq�3����u�y0��M��=K�ж��1tH���a��X�=!�D�%�h�*@Yd��/Y�a��Vٴ�u��h���
�a�%�AZG���xUغ��`Zz����݇�Q.��&.[-W��FR'�� E��s���� �,��
��<K
wy�i�נa"B���j�IҰ�p�M-DQ����e��U(1ky�`���
�Xk���A�Lʮ�45Ә5`��VJz�S�p(�.�:�.}aߦ[�B�R�C�k#��:n��<B�&�8B�op\��
I-v�lpC�1� �X���x���]���C 7r
��~TCX�����u��`Kv�����zf4�7<)��]�X��?���� ��9��c�� ��X���:�/��
Ɋ) �>8"	��tG
1V�
���ƪ#�򦋎%�9�"Ө�
Ҽ&��k ��z�k�
<|{�>��\K��
�"��bƥ��Tx0��jk
	�0bu�7k�Ȍ��4Wa0�z���uh��j
�B
�/?%#$'��!/GJ2�
�9
���o
�}[5�W
+��W�R��`Rf��Q�1�H��Q��@�c[/�A&�J�g
uV��D
����p2N)a�
��
'{
N&��9��T�!
+���R<	P��H�����L�y>����p��n�*%j&� 5���AJ+������
���4<�ϊ�
 D��yB|m�W�0�A<
I95�G͆`Zz���(����+}�.q�-�-�sQO
U��n��6��b8
V5��
+�u`r>�g�V�s����SX^�<N?��)���
��^x
�qUwV��@[j�&W5�z�Lj��w�/�ޡ�7���`1<p7�i"T�sQ�2xX�D��VJ�3b�
�{�o��[�.[>�~}�~ؓ����=;U
���; XN�hƇ `9Eݔ?��'�ղo��Q���#�*	H&�QF?�P,�CB��6v/���B�W��$
���B-���!��3A����u���Y6ò���u���9A��!�n: Yd�)��f�N�9���e3T[����3�y}��lAz�l5B�!JY�:3�ٖ��b��mVk�J�
��l��C)�
d&t���@Ó@�:D��i����
,puD�
P�|�{G�$
����
v�i�N�onkF�?/�;�J�gy���Hy��ۈd�LU��
�]��m~=��X�-.��
�쭯v�

���A���4��XC0- �鳂XQ�X�_��,���p���XC0-=�c�
�_~�2����8m
+�AK
��9lb�6�?�T���/�`���Iɽ
0$�k�كA����Z�RA�c�:���
~��u:�!e7�`{��\n
�����%b�4z/ \�[~J�\�� Ɖ�f ������s	�`n��
�PH�Q{�"��@:�bh�a�*�{�J1������6<���$ 
���o��~�
��̾��Հv����5 {�V��b�J�f$�8Y�~��$��Џ[ԳeG��ٽqj��X��q �����Di��MTM��:�
�c� }���%�QW���ߎ�x?s���K��.{>�[
&��
+���~C^NG^�0۵��hO�&�@�e�9�q��x����Q�?P��^
+endstream
+endobj
+992 0 obj <<
+/Type /Page
+/Contents 993 0 R
+/Resources 991 0 R
+/MediaBox [0 0 612 792]
+/Parent 958 0 R
+/Annots [ 989 0 R 990 0 R ]
+>> endobj
+989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [501.869 227.966 516.592 239.921]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.233 79.486 189.956 91.441]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.4) >>
+>> endobj
+994 0 obj <<
+/D [992 0 R /XYZ 86.4 726.045 null]
+>> endobj
+995 0 obj <<
+/D [992 0 R /XYZ 86.4 701.138 null]
+>> endobj
+996 0 obj <<
+/D [992 0 R /XYZ 86.4 522.879 null]
+>> endobj
+997 0 obj <<
+/D [992 0 R /XYZ 86.4 314.453 null]
+>> endobj
+998 0 obj <<
+/D [992 0 R /XYZ 86.4 136.138 null]
+>> endobj
+991 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F16 397 0 R /F14 627 0 R /F10 700 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1001 0 obj <<
+/Length 2904      
+/Filter /FlateDecode
+>>
+stream
+x��[[s�6~���ɝ����>$���6�v���Τ}`dJ�D"]J���o� ��Y邏<D
�
�����"��?�^ݞ}{�dd��TF��HK�#E
��D�wѻ	G�|�4���$�t�V�S2�߯�x�Kg�e�nΧ�H�'̜�v�������g����
+���f�w�����)ˆ
=��gQx��n��}��e��r�n-�p�@l$
ADI��l�,�u��XF��o/ۿ�i����b���p��՘<�W�����"�k�"`�&υ�ī]�>fs���/e�"	�����#p$�QL#�$��8#ܨRE5ĀAt����:�&9:�r�'��S5�7�

X�2�1��|�?	EJ��{\��W>Y�w�Y�Mm�7w�<ޭ��۔h�(���%P�q�I��<���ݻ��xr[	����.L#
�,W>_ŋ�r
QN۾Qo����s2y _ד�
LA�ԦY���	��/ˍ3`��
�]Dž���d�R͜�q�~��z?���s
I����Q�E` �BD�B��Mz���닛���0�T:���=�����s�ع�5�ck�煩�'�ݓr�7��,��L&sؕ�j��I�$
G�Na���1�:5�r�h 9�b9������*0�fH@��1'$^	"�s^�}�g�dR��[���#�����L�����
#�@�x�=
��:��0���hk��~u���9b����>�������~�"S�S܋qD(Ž��27�� [...]
+�@`�z\
*
�+�E���/�>�+W���oi�6Fd�pY�5Ym��
����l�l���I���YV�N�+s�<�
$k��@S�[�w!a1EO�U�'�J�$�H�Q�m
�He�;g��TA��C��U+�)�;t���@U�>�ؾ�Ѱ[�ߵzoV�"\�x��@�ٟ��lH5��ж��h�$��6TT��Ey��- u�IB"��d�a��! �Ih�{R
4�Ƙ:�y|!$tż���hۑ
̖zs�"���Z���d{�]-Ӌ�M�B@���]���\s��
��]�����[�-$�)� m^�=TL�w/�l�
�',(��n��L<��А텯4/�z�f%��=U
�<�Y���lf��hj�9�I�<At
���b��׾��Pt�G׹k�+&�H=0[�^���g�@�����,s6�V����jp�f�{�f��m�C��G(���

���V��NT���@�(:�R�
|��~���ڮ�i�u�^����VI
���ERU�!ۥw��y���o�w
+�|f��c�HK�\Hu^���K�����w�
+b
����%%���Lh�N�C>f�;/���$46L�}�j�yI
���6!HM+ֲ�&[f�Y�2�f��r�ac�3;�#}��*ʄ߷���<��>O��0�yI0�o�:~�h���pXtȖ����:T�	���&"%
�
�`�|kC��������
��\Y:
+ycE)*��7�&���M��l����l�WÎs5��&W#�
+H�Q�+��\�s�X�=���
+d�\
HW��D%(�.���ğ@��d
9�����mG��M�jp7U������-�C�	+=�āN7y'Hv �PT�/��\Ԗ��j���
����Ba��?�m�
<Q�T�rk�~�ٲ�
p�rmwf��ho��f��n[�E���o���"m8L�䛐�%6��<���6�&G5��cV�;~xX-��V
8���x���'.�
+�$���������
�A�ې���j#\%��+��Fa ̱s���&غ9����`����9Ɛ^E[���u��қm�ȳ����'��c�{��)v��

+�%Cƃž%�a����S����ֈC
�Ti ��S
+�ٸ��CbJ)��)婘X�~L
�kx�
ӥ� Iك�aN�1�*��&��o`']T���
�8ޯ�t��w�w��
�1錄�er�-;!X�
�t��lh�q
�,�S�����^�	]���KG�O�F#b:`�����T�mZ�xya�x���\��{W� �oBx�1*�)�8��'��V���2��fH���B��#�]w �WA&�P�����;�h$�W�,(�j��x��gEI���+P������ �o=PE�~m
c�(�� (=Ƥ%��&}�{#(Q�{���.>
�j��*8�����"�=�0g�_ޜ']{��2}�m���Z��#Mqu �W at l
t�q�"A}#�g k�#�Y�$;H�
%^���C-,_6�/>
��;7@�.G
+��.Gr����5�C����-�7ʸ����)@�B�HoQ�
%(�����$]��RuDIRR�� ����T���Җ�r��n�,vPC��S�]F�~�\QmH��c�
`#@�#��a
+�|�l��x�
+��kH
�����5��b�~րX���%zH�  ��O#
��]�k��g���H�?Bp~�0�����t�5u������o|x��$-?��%)����cqbh��	�_�D����Y@����JL
�`Pl5�@�]^�[��ku��|��yR�K�s���% 92Y�
��MLض���})�a��I� k�?���{��s�!F�$ӝ��(?��`�Q#�Ag
�
{J���l�� B��m,��������	��&
�s
++Ⱥ�U����5� %�Z�0�B|%��`06f����&_(�0�i��
������@.�0e���S>+��t*f���_�/*�3
+� ��!�q^a�)K��ܣ��ܔ�N
H7Gď�<�8�%����_�=��¶2�Ֆ���7��3W��~��2�y@��hd���I-O��elT ��\\�|��6�~x�������(�(Â�s���
+endstream
+endobj
+1000 0 obj <<
+/Type /Page
+/Contents 1001 0 R
+/Resources 999 0 R
+/MediaBox [0 0 612 792]
+/Parent 1006 0 R
+>> endobj
+1002 0 obj <<
+/D [1000 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1003 0 obj <<
+/D [1000 0 R /XYZ 86.4 584.093 null]
+>> endobj
+1004 0 obj <<
+/D [1000 0 R /XYZ 86.4 410.657 null]
+>> endobj
+1005 0 obj <<
+/D [1000 0 R /XYZ 86.4 223.173 null]
+>> endobj
+999 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F10 700 0 R /F16 397 0 R /F14 627 0 R /F7 701 0 R /F9 719 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1011 0 obj <<
+/Length 2564      
+/Filter /FlateDecode
+>>
+stream
+x��[Is����W�H��N�ˤ�0Q��8
ebI'�0J�!	 m���5��4���Qʮ9o�}�I
=F8���?�.����� #���摖�G�$��
�w�/�T�&��b�x9e�M�������k>����y�>~�l��Y\,�u~���������

qD*i.�����{
=���F���s�nqf��et{��
����qA��X!k:��˜Hj��VC`5EXJO���m����4%�լ���m��βW��l��II�B���V�h}�p{�uw�H`�Ը���R�Ꝏ� F<)Wϗ1���b���Z�7,����1(�P(Z2WxpC"L׺��5)��JVue�r�!�(�&2�X"��)�͞�3�g�bc
;x5z7%D���S ��r�Vu�#� �Ye�>7��B��j}��`ԓd��
��_�+�
�ݧK��=J��
O����f�j�-l(��i��ҚT�^�ʣ�2�c��=DҊWk��$��
{�$�|~Z̬�O��h�8E�3���n�ª��d�'�T
>����چ%Y���;�i�H֖v��ěM���_�2Sy���
���,����cX�-���wy��\D�!.�7g�ޭ�Z瘀?v����}�&�+7�1/�S����Za����	^:B$�+
+�N}|a�S��]yk�����Do���|�A��ω"�SZ������`�H�]��Z��u��.
\>�ˮ{3PWӶ�
+�+]8�%�۪�����Pj�c��-k�.O�=
9�j�fώ臥�2�~GC�|
+6���႗��$����8�:�O1^����y����4�Z±���N���r��IA#!�12B
c���D�`�1BmX���F����F*v9-Zg�>�9t�z?���$k
�ʎ������9�s�J/i���M�'Դڬ�&M�-S=�������!���e�MI�Zbœ�6)���9��K!&�r�t�����hX��{��mL#�t����!մ
�s֗TM�/���>LA�]l�.z�[ ��O)e5�$���V���� �l?�A�?#C��`��,$d3p����������@fõ������W�t���I�s�ç��X[Ml9$���v6K�|�].}v̓b8%B��\�q�X\�b(.��
�r�KC� Y��B�/��
o�߼�(o�����4�Ѵ��
?x�P�*@$r�C|�A��!�W��p�ՅsĚRR��Z?Pg
� �k�U��b6;�Q<
H)�]�g����5�ʻ�7��ߝ�^>]�@M�����Ϯh��_'�u��S;lo0ӥ?��n�"ɻ��I��u�E�Վ?zʆ��ˢ����e�n�!&�,D�t��
����j�^�
�t�~H-*B{2�@U7�Y������o �)
H2��ߤ���u�]������t���G��0<H�P>$�#RZf�?I��-����OR2���4���D)JQ�Rl�˿j����0EI
S:��bgC�
LS�A��xg�yC�{��}͋t��sQ;@X&Y�x⤶m�Zа�-��b���!ZW������=�F�M�<
�{�y�������A��In^
us/51N_n��)d&��(���Jv�0AA������p*&�޹�C�����@��@����&����߄���!.C�>��A{�
+T{���	(ev徴"��*����^d�I
���Dh��v�Fu��Zx���8����o
0u[x����A{��B�?���@{&5"r\)����30/�T����|�
~��(�?[�
+ܷ�ޠ=�����W %5G@�1�V�0�:h��!�[`�5`^
����|���t
*o����--<�n�fx<~9U�%����$2
+,o�5�� A�x��E�VAd(�`�
*�fM��z$F
 ��e߈�a����
��d�����ll@t[���)?'�����n�d�?&�7`��e������)f
�c�����!�
+�B�e�3u��a�8�$P��3����&�_L���Q���� j��2��8L��`�h3x�
X�EżP-���ލ���/��]�J|�a=,�)a�

V��
�z@�L�tqYf������q>e��h��|�,z=�3
+�F!����!�)�f�š�
bP�S�w�,Q�>™��m(�KB��'p�#q���m{�rz��:������©m\��ȱA�����x۝{�d5��
��q 8�&��y��B�(
+�G9]����VO׏KD��g�c
H��i���ԃ���B����x�ķǏ
+GA�3#�6ǜ������ ����oh�8��qy���d;fsې
�E��=���0�p�s�ٽa��ހ���@�U�΋,�›�?�?Y��	�}%�X� �fD@޲��s{`��CLձ}[���Y���{n
ܓ�����sp����=0�'�\O�����).��Cb���z
�`�q/!��g��6O��m_G1�"̫_%�̶�O��w�ː��e��b}z�.���e�����������wԋ����Ȼ�
+endstream
+endobj
+1010 0 obj <<
+/Type /Page
+/Contents 1011 0 R
+/Resources 1009 0 R
+/MediaBox [0 0 612 792]
+/Parent 1006 0 R
+/Annots [ 1007 0 R 1008 0 R ]
+>> endobj
+1007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.232 643.884 519.955 655.839]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.7) >>
+>> endobj
+1008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [322.598 631.929 337.32 643.884]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2.9) >>
+>> endobj
+1012 0 obj <<
+/D [1010 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1013 0 obj <<
+/D [1010 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1014 0 obj <<
+/D [1010 0 R /XYZ 86.4 498.393 null]
+>> endobj
+1015 0 obj <<
+/D [1010 0 R /XYZ 86.4 303.001 null]
+>> endobj
+1016 0 obj <<
+/D [1010 0 R /XYZ 86.4 107.533 null]
+>> endobj
+1009 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F16 397 0 R /F14 627 0 R /F7 701 0 R /F10 700 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1019 0 obj <<
+/Length 2665      
+/Filter /FlateDecode
+>>
+stream
+x��[Is����W�H�̞^�ݓ��q�)OƮI$�b� ���4 hE��y�� DQ��8>K�߾} ��rFg?�����W"�Yb#
���39�ܒH���j�~.�:]#�瘝\,�,;]�y|�%��z�/�ȫ���4s�N?��x����d�5�*bd4[^���Hg+���a��ƭ��Ia	��lvv�ؤ]v͐��2�t�}^^n�����y]9>��|�Jv��\�
���4�g�E�P�		��/����ۣ�"M��}����
�}� Tن�TQ\<�W�e��s��N�������J����v
�(���g�E�U��xU���߭7�ߊu�ES +:���l��$ڰf[��~׋�pT�H�(�'�SA$
/�$�H��ܮ.�4غ�@ĉ�����N��a#
c�c��sX���*�ܓ�G����x{}>�z�q�����*qv�V�@��/+r��R�_�G�g@��6:�}�~��
+8W�]����R�hP�iB���A�s���}:��H7�i�����=3��煗v_9�W�ϫd�W�[LE��V�mXBg���%�h*@@"Ak^
#�#��Yg
(�i�RKϫ�
�b�(�ܯ���'�z���ɰ���&�B��i<�g��&�4�F�� ��"���HAŝE(W��0�M���a^��y
O��-c��
Ѳ-�]'�G8��u�D
�$�u��N\Z	U���7�Ofrv���m%ytR��!O�!x�� �!ƠOX�B����ޖy�*5��m2f��MPcy�{
�!T�������%�ۜҦ
��=�=ea�� 4X��Z��*h��~���9lޒ�������pjDhH�������Þ�4�z�a�b�x�g�^�xyvv`\Q�HmD�v+�qȎ3/8X.�s77qP��	�����v�L�j�Ͳ0vUI}xւ��J�oI+
x�GS(
�tD߼|3B��(�����c�D߾���A��r��f̵9%Rۃ��Tz
+!��@M_��)
��:�l�M�"�rR�q�(h�
@�n~���������a��N�a�L���`�q��h�a=�o~w� ���l?��:0�#��&���؛e�e�
�~��t"ؠyl[�I5,)"��3&9�_�I��Kw�
�Wc���b��D����)H�;����߾� <�7q������XMf‚=�����:�[;0/,�Xȓ
{���=�����%� F�
+Yuo��o96��.�ok�m�%^�����r�� zI�.ʫd�L
R�L�=+2-��gv�,�m�n���L����eq����G\ه����=���ي�.����*�e�x)�>9k�nv��-��-�
�U���,�nP
+��8_��Fv���.��x�r
.q���V~�,n��8O�K���K�ȱ��Nw:��3�/�����(�����6
O�!�c����ص��m��m���In�Qv>���άg,��;I!���gI}v[�	��<��p�C��y
+�
/��w
:P
|9^�>��{��:f������4���x_����Q��Q�'��/4�<?k����J�����~��KR-��5����X�Ba��.�F�?G�h�=�L�0k��
+�m�~�Lb�BZuC�%�����9]�x��V�2GIS}�k�r9��
e�a

"3�Cŭn���^t�΢���|�jt���:c���b���g����B�#Kڭ~c�15;Î�c�1t���;<��
��

'g�#��Ao
i���F�w��
����"
� �a"�,��� 1r

����f�G
���*�
����n�,�c$�"D6�Ӈ:��@��p� ���z8Sk��P��������h<54����67��cكQ5D���7H�K 1q�
.�%j��	;	��G�c�
+n�Q4�����D�Dl
+���}RDl!D�'�׆�qQ�1���Vˆ#�)�6
�#�e�X�t�z^�)BOj
�
�,���-�
<��c
��
���-���5a���:t超�p���]��x�KX���4�<
a���ʯ�7e��܌�$��N����t�.	�*�8�BGt'����x�뽠0�J{&�
I?�q�ʚA
/��3���g��ϭ�B
ϱ��G7�"
��&	�E Ud
O�ğ�Xl��,���P���{'����U��p�b0������D$e��r����.���X�

+�6i��{��:e�=�
wI�
��S�Ұ�H����t"��i
Nz(>l o0�0ރp���= ��P�Ⱉ����
+���8���;��
p
!�a�_p�>��b�˓B�
� �T�
%
�{k{Q]��p{��3m����|������,^.]w�#�;p3�豂^x�'�� o?8�����kD�pk�?�˸\�pL�]�pj��v����vO��0hu����������G!&�S&Y���5:o��&��n��������x�'�2-���p��/��}����w��
�2�/m�����~!d1Ԓ�y5���h�`Q'T��:�I�P{��+莚Z� �iC\��<�o�\�c��
��ϗV0��/~�Oz�t/`'Hd�o��~�� ����.D){x1�0YvI>)t�x�+�W�)�r����[1B�:�C�Ǔl��|�"�C�o0
�/��2n
+�AA���
2
+endstream
+endobj
+1018 0 obj <<
+/Type /Page
+/Contents 1019 0 R
+/Resources 1017 0 R
+/MediaBox [0 0 612 792]
+/Parent 1006 0 R
+>> endobj
+1020 0 obj <<
+/D [1018 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1021 0 obj <<
+/D [1018 0 R /XYZ 86.4 444.004 null]
+>> endobj
+1022 0 obj <<
+/D [1018 0 R /XYZ 86.4 219.073 null]
+>> endobj
+1017 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R /F11 628 0 R /F10 700 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1026 0 obj <<
+/Length 3374      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs�6��W��h�kj�ʱ�){lOM$��
�&eqҋ�d{ɯ����l�)�KNIxx�{��ӂ-�u������Y�qj�Y\�,���"il$_\勏��B�$�>T������2������yKc�lw��Kyqw�*�Y]n7���Woξ�:���cC���:��,�볏?�E�7o,��]|q��
%�X`�Z\�����Y�p;�ۤ<��t��օ߿�h��B��FW�eR�n��%��甆���"<�_Ww����*+��PF_n�s
-�E�����țϷ�z
�٨ "���y�\�d�E�
���S��,��4�_�������U
�/��bU��$<"�����%��
��T�8�l	t7�
+
��6>�PJG�k�&[U���
+#
�-��,�K�:[���b��}��M��i�&k
yu��w�[.i^w��N�@���	�_�h�I��������|>���û�g����U����l��6��h����j��ID�&wzMF@�7[�
���
�v��%�؄}�>�x
+��D~���v���/�eF�-�^�t̓��h �UQ)ַ�f�(�cneK�ײ.v�dI
Kے��v��F�%���t����}���P�%��/�>��$�)N&�IZN�Y�ޔ��&6\��R�¦C�{M��lp
�Xv~DdT����᎜eQ�߯�e__��.��u��5"�q�
+ܬ��<��6��tX����zB޽x�,�u���VY]��
�_���n'�X��;4f���$�0X�1fi��u
��ظfѫbSϯ�M�CO^�e��t��Bd�����RD�lx��k
ޖ��}�^pd�!x
�&۸牼g�-8��m�
|�x����:C&�H��OI��ftIzEI�t]n� �����'ww�-���\g�_׷pWa�l��.�0�w�׉�ua�XJ;T�7��C4�N��l*�6�͜��:N����T�Tɇ(a�L��[�I�U�ߵ�C7�Tw��w�s��r
.8�=��jU9%~�
�hel���8�
u��T{dH��gy~[�["�K��ꍏ�P��IL*޲�,[���X<vH%ZYӸ��4���`��
�$/b\�b��
<�u���bCԅ�&4�
��4ӹ
���mCĔŌ�֌� �L�
�Zi��s�/9:�D՝������d��J�G.-��a�|�>��Uֳ�)?�#[U���-)
rkS�g�G
l�	ނ���
��\�� �0�
R
$0�Q:�u
aaN�SX}2Psn��?8va�I��t���
+�e�
?4��9����)�2VI�W�(}P�H
s4Rl�ʹ"����!��l�
�Y��HUP�����(,��/����xm
[�9���r(�F�N��&������Ηp�����(�&�����rWdu��Ԟ�d�e��I;�T�n����01�4�م�ק^2~��zU��M���&$�U5�����S
�{"�e�t�مA�X��O�����$�
�g�eӜ^�Ä���R�!�����v�O��5�FZÉ�=-��Gr/
��.[�:J��@��<N��#�"�`b^��;@^�a�����O�JJ��
+��K��:!Q�Ǻ��TMx�V,)�(y��
��n��t;i�0�T��/�����$E���mrȉ^��I�S�1���\�M�t
+�(�Jͭ��"f��q����K%q*��
������
NĘX �z '��-J�X���^R��o���o��wҺYe�/-t��`� �i�+���<ʃ#fƊ��Q�������:���lW� �V���j�+�X�oB����'�p��؜���KtR��L�L�m`m3!�D�.�&,�&�
;4�e>f�th����_�\hKe��ij΁o�;��!;.�^
��b�i�.|4��NR�I��F�1j!�E���4�$�q��-7�F(͌� 4�<���ʈ����?o��+���+�IC=�R$���v��aƖ0l+{�C26�#|G���{|׮%h�j�_�9��C�B�S�#�S,�b܉U�>���,e��NmbF�{B͓	
��.5�9��ǺC=��@N��Z�#w�k2�|��c�6f]y���=!�xK���W(Si�oayN�O���D�k����e�9n7�T��t\k4��䰕Hb~{9a�	��
J���c��
+g���Rn��/_~y9���!ihN�J��s��dt�Uw�� �j����j,�*�y3�,�C3��_(hԘO�/,�E�׻��M�4i���)6���h��޾��'��/���
�a��F�)�ާ8rY���S��2�)r#��N�{g_�B�'Mk�
�&�î�Q
��!5��
��1O�cT�7۾�T2���O��`
I���=J��?�
+�#�ⱒ
o�t]ɶ�-e�7	}ƞ/��f[��"��rSքf��
�7�Wb�`���
�T��ki��M����3L�tZ�zp��M96�X�M
Kz�v,};��a�D�3e���6"!W9���kX�~+�[S�7�����̴
E�6
�[6���Gk"��m�S��!�z��ծ�?
򑼥�< �JP�>�h��UFA'CO�
_#A�%��b���k�;��ݧ`�?
d����RT
y�Ե�� ('�
JRLz�#d�J
�t��2N���h��� R
��}����A:���g��kc���f6���v�f 
���� 
cE�p�#
Q�+���p�Ւt�z~\�������Q�
8zDi+��*î
�U\8������!
+]'v��z�$gF��_'���A��
`��x��X�W�[�#�M�&p?�yh���*#�y�
�x�g
+q����M�X��Hщ
+�v��q���Lo�����|h�!�C;g�ŨL�:^ӼY�Ǹ�,pݺ롃��[���
@
��~
+R�J�+�
��O�D3J�*��t�bǼR�O9�5j���I
�3���<I�T��9J&.PFh�� 
��1h)c�=�p�5&�_��ḳ����C\�N��0�
$/Ohb� ��~�h�T׈�
�C�5��:����
ʃۀ�ê�݆�
�!���P"��`="��A���'��&��
%��*ܺР��tr����*�,� tq�{��]����{�S�
�q`-����#5Џ�Z<|�����`��p�.OC,Q)��|�II��
�_�J&%��.�Ic�����5
lj���?��p8 ��HGB(�Z~�)��dH�����0f�뙪�0b
���~b����
�}#h{���П=|x��>	�A	�$|X�����p
٥���,:VWA���A<��y[<и�c��
s�hPwGĜ�~�����'��1
+ݯ�O �`%i�_��Cx�Y��<'�p��Nk
�<��
�x�PC=�
��x�+���D
+}W
+endstream
+endobj
+1025 0 obj <<
+/Type /Page
+/Contents 1026 0 R
+/Resources 1024 0 R
+/MediaBox [0 0 612 792]
+/Parent 1006 0 R
+/Annots [ 1023 0 R ]
+>> endobj
+1023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [385.804 266.239 408.276 277.087]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.4) >>
+>> endobj
+1027 0 obj <<
+/D [1025 0 R /XYZ 86.4 726.045 null]
+>> endobj
+110 0 obj <<
+/D [1025 0 R /XYZ 86.4 586.846 null]
+>> endobj
+1028 0 obj <<
+/D [1025 0 R /XYZ 86.4 458.064 null]
+>> endobj
+1029 0 obj <<
+/D [1025 0 R /XYZ 86.4 153.453 null]
+>> endobj
+1024 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F11 628 0 R /F48 539 0 R /F16 397 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1034 0 obj <<
+/Length 3417      
+/Filter /FlateDecode
+>>
+stream
+x��[K��6�ϯ�Q�e!�ޭ=l^[v
Wml�
�
85�
ENH���O7|��fbekS�'� 4���T��]D�^}���o�^8�t��
��\��1-���f��R2u�V,��i�Z'y~����&O�{�/�MV��*vZڥ�?�{u�ͻ�_�8l-x��bV��zw����b#��.
���B
+�bh勷W����ѐ\i�ri,�Ў3n4Q���7_�~{H7�A��Q���
��1����5b����_}��[ڸ%��o����)�~��;���
����$���^&�>
�%5�� �2M������:���>�COڰ��#�WV
�b�S���������`)-���7��l�
�.�Ħq31����ׯOH�8ᕁ�`���L�N��d��!b�X�
���Ƨإ;"l�c�"
�t݃��e	��O�V�Y=s )�м}���xq8����O�X
�
J�D
�@����R�N��U�8�L�q.�k
�P��]�hࠋ�-�����$��P.2f��vZ�iD]���kD�j$bY�
5n���iA �Y�
+�e�	A&݌�
��_�.V\1ɾ)��
O�q%���/��R�M�M�y�b��1�<L��ȶ��5��N
+����è��9~���G��b���_�e��4?,r_���1�%��zey�|���~��u挵(&Uw*2��Jt��9T�>��tCi�9����Z7�I�G����a��,��  �n�u�X��B�1���(3�u粆�H�#0�g1-��wG@(��/Aί�����i`�1z�=��&��Ut60,
o�	��k�C���Ǡ�h��m����pЩ�db��FW&�<
+$�������
+p��h��>��)���)�8�VE��PE
JZS� 
�h���fj
�,AY&�;�)�J���|���L����9���H��J��>����9\��W`�%N+�J�gUJ	�
�K�Y��u�V�gb_��	�j��պ2
+�a� 32\���
A@�M�B�I�����`��V���	>䄁�6�X��������T4�
+�t*;#P�H
��Q�9g5�۳̓�ȿ�z
+FC�m8���JA00ڷyM�|�l����H�&	��<��(Bԩ��Cj�`xm�ǐ�	��a�܅�֨�C1�-�7��^Z0a�
�����m�g ���8�u�"x�h|��P�s�"�W�F��NnS��*��}�#ẙ[|��9`,(�o�M�_7�*
��F� u�~�@ _Z��F�oy���#푄�1y�l����qzuN�
��^���(���!��U�	H�9�D��'#��a>��C�I���_�����U�Ak�N
�`is�D8ĝ:2O��٨�OON��[~�mq,�ȶ�� ��
�ZPP{�|��
���x�U�q�P��,����ωӅ����@ARb!M�n�&��^ج������Vk�V#[Е`8A�"*���փ��O�ȡ���j�6
���%��CM�䏴k��J�YWi҄Q�|�zu�5UR=�� Ip�C���@�"NQ
�Ow�BS<s��c�h=��>���2k�w��<�aۓ���c��
�#��h|
N�5d,Nh��֘�?F�oڗ�
o���&O��ޓv�
&�3�Ǿ���R�A��ZlH��-v������vIc���M� ��� 0�3:
�ֵK���衾o� ��+J�VHBQ��ۻ9
�{�"���"�׳������Ԝi{�F�At���i��r�
i [4�ր�� {���1�#U�$?����a
+½g�0��A��
>���vZӕB�؅<�+��(�D/�m����X-�N?s���v�&xĤ#$�9حE<>�.ݽ �0���o'J/�8�����k�[޷ϰ����	�6��".U����P��(����ȁ�6����_�Y$�$�
�IoZ�W!)�X��c�+�mM`���d��T��]���E�'iڬq
�Xʅp`�.���6�~��ţb�Z]Ĵ���X1!}��e�!���Ll�6;�9q}�\+�,D�&1
�e֌b�2��Q�u� 
���e�
D���A~9]Ӆ��0*鶡�����
�=;����M�FSPmH�a��4x�1|a;
�z�
�҉���BT֣8
+ol&ء ��Jfձ7�:*,��
������I��i�Oϗ�3{a E;�ʊ����
?dt[Q,���j{Zm�81�

+��]� ���E��p)����sOdX���a,ŭ~���6
�s�=���s�8D�����t=ǟ�d��U��å�z���vm��F���su>S��x�{��z@_�a�w�z.�|�����˜ց�i����I�
����x�}�
���+
��W:z�Jk4�����jȿ�<�MW_�fB?]dL�dU�nB'R��s�m��k� ���
��9MR�1��LJ�q[p�.�{_�:Qр���q��@ؤȢ�����ՁR
+�H�R:��m=�6�3�a�ȁFG�mRр''�E��UI�4����<�4N�aP
�|ٽ��S���t[V��+#
����ת�7�O_��\�[����HZ>.$c��l�
�e[��j��U����
+z��se�m�������%8���Q��
?g�u���� ��iK�zY��3/k�;	���DBb�1,�A�vBD�*��'�%�ݶɺ)��+���e���iU�Ue"9��u�[��DJ-
�e�ٯ>�4a�]/ҏ��x�X�>,��9
"�Ϊ�7Y�i;!I�H0���P�ü���h�r^*1���/�_I��!�
r7��ml�v륗N,::`�	���T����;�s�k�8��vt���1s�$�D�!��ͨ������� t�Η����s���
�Cz_jN�ߴ���
/Cr�VgJ�1��>W����bw
����H_�l
+3�߳��� ?�mԄ�
�xQn��T�c���c�-D|�o�Nvz>�� 7>C_x,���ShJ�Cq!'.A�0�9��45����(HV	�;J�R��%��!���HQ'�E&���ԫ)7��BG��‘�wa�[=6:�����^*zƎ	5��G�$ �
z�ӄRAH
��|�ŗ'ˤ�_&�"�R�(��Rf����ˤ�,����>�X��-����ԡ��jw����+na���u��
19D��ѵ�f�«J5fE������d¦gp�A�x��fq��
��a��E��}�qbW���m
��� L��S
+�x@�-�K>L.�s!�~��o,����q
�T� ��L�z�=8�#Gs��!)6|)|������[�H����I�}�M��+�L/
���Ⱦ�,�������j	x���ߡlw�&�B6c��7���7�&����En��Z��j
Ǐb�`Uį��F��3O��ߤ鱝�2ee]	-d?�J���Yw
+�����
+endstream
+endobj
+1033 0 obj <<
+/Type /Page
+/Contents 1034 0 R
+/Resources 1032 0 R
+/MediaBox [0 0 612 792]
+/Parent 1006 0 R
+/Annots [ 1030 0 R 1031 0 R ]
+>> endobj
+1030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.574 618.18 403.045 629.028]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.5) >>
+>> endobj
+1031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.035 301.922 413.506 313.047]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.6) >>
+>> endobj
+1035 0 obj <<
+/D [1033 0 R /XYZ 86.4 726.045 null]
+>> endobj
+114 0 obj <<
+/D [1033 0 R /XYZ 86.4 601.995 null]
+>> endobj
+1036 0 obj <<
+/D [1033 0 R /XYZ 86.4 462.428 null]
+>> endobj
+1037 0 obj <<
+/D [1033 0 R /XYZ 86.4 201.774 null]
+>> endobj
+1032 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1041 0 obj <<
+/Length 2822      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w۸~��Уܮ��lO��lO�N���Sv��yB�*)%����  ER�,G���'�`0�o>�N�:���7��$�$"��zrs7��ȉ�тMn�wS)/g\)c��U�//gŠ��/�\���k9�+J���y�^g�<ޤE^]�z������?/(�V+P�J=��.��J'
x�jB�����n5�""
������/h�0mOܶ��"M�
1Œ�S�N}=f�n�(��ͳ\��V�Kn����N
��[�4��}�o����o��.�o�2�
��}J�̏�r�x^��Y�I�r&������iWH^��*�d��T���>�B(�J�BO_���}���J?'������"
I~�'���Ǎ�ݐ��~��l[�sI�@����g�Q�ʄ
+Y�L?���0�4��x]������0��"�?��tB���X�%R�Zه4��m��$��G���3fQ�jB��$�m�{�/q��m2�(7~
bZ
ѳ �c���e�r�`e.+�B���F��f�pɦ��H����4��4�
l�"-��KO���i��Uy'h��4c
+&j�-%� .�8
�����f&"F����h\�8��vq�5����Dqf������_\_�&�
&�}�n�\���4�B�zT۹r��E- <��
�`���$
R���TFaA%�����7�WWG�
�;��m�|�k�V��/�k3�
+���b;KX%��ƚ��V�.�o������H	��
��ӳ
+%?����ũ���K��]
l
+ý@���t0��Ēz�VN
Q�u���c|��:%b�džK�F�ei��a��"��I���PJE]J����>	���&��?_����$'J���
׌��(����e0�`AiH#]�o�v{sd��5!��C��@$B���!>��K �УS at Ie�����:9Pܛ�5���e�2�$�
�xą �j�*Os!
�*��(t��
�Jkj������K�3o[��E�� �pQ<Lj �[�e at twq���#�+j���Ul���6v繋�.�f�>X�<�Z�1�1��Fmaku&�gY�b�p���c�$�4�3'�#؄ �HT��(6�`oA]#0 �#�+�h�<G�N[�}I�!uKR�]'e�]
�bC	��V��c�؎	�H��
C���/ˤ(��aϋ��������
+�+��
+6l�z+���d��� �5�-c`+"�f�v�L*p�]+:��qYնc�U0���ٯn  !�l�"�>ԣ�*
XFتA@ ��]6�'�T�7�Cc"�`#\\9���-]ś���	��E�,��
nl�o#����z� ���T?�V��5�Nj��I����&ܾǛ�ݴB

��Ƌ���z���_���mk��KN��av��}��\�
W��a�L�m �E���Fhy�w0�è-�`t��r���ڠ8/��D�mt7
��Q�}Q9{���,��{��oQ�]�6�o�
+L� ��Gx�:�O(��l��@�7D|���z���Y_S�0x,��c�Y��?�B��o�2<w3�'�i>
��2z�=��C]ZZ�`Ӳ�t�
h�P�����>8����G,PBmA���A�Ygi`q-�W!Oa���ܬ�ʻ
|����e���&{h��{ߌ��|?8�� 
�6i,��(h��)h�Dg���'!O)#�I���$8Xh ڍ5 �cv
��W����m+1� ���
@��3�� �
(5'�� ���)@b!a?G��lӐ���0A3���/�g��
��$'�7�ܞE�p�����e N��Ϩ8�B�?�1f  oڝ�����4՟��<��JʺlԏI5/ӵ+k=PƘf!+I֤���M�mJĠwv�De
�Y7O��J%C��
41��@BH�)��E�BE@:Ƹ=x����w5�*4 at di��c���AR񠥏��wl��\B��I
+�	�>δ$ʴ�0����j��,w�
�
&�PA�6�M���Y'�X�
5�X������$;�}��Z��u@	����f�w����X�><�gB���a;'Qh
4�y
[v^�Ah
�Davh��cā&B��k��r/C]N�bӄJ;x�6�,��zѣ8`O���
+�Ƕ�Ս����a}d���ɲw8�	��� �n˚��xK��f�*�;�9�
&:���l
������(eũg0�p���
+W����.,n�
��"f�1MU�m�
W��#�tR]@;f�(gV(J�@�(W6����ut>B�ﳭ_vlu�k6�"
$���*���
;�䆟zr�7�Ӝ�þ�Q(}��
;��?_gp���/c�Vy(

��k����Āa`��˅^z�]��죮
�\3����#i��F��;6M�
��Žq͜!��%�:�ŀ��L�7�~�d�P3�
�d�Jk[�\���뛣T� �UO�G�0^Z�[
'�@�d,�a�)�5�P�M�̓3
��Dg1'Q��c�BWc�38�r
\ėP-�� � w
�_�U@���4G��w4n+[0��Z�6P�1>H9 \o7�@'(K���	GN^ .�s�&�
������9�*�d���
|��QH�O�e�H��MB0
[�F!!����?��w�����
z	ǀ���
(�7������U��N `W�q
��'�Y n��q��<���ձ<�$�ߘ؎��:؀Ȩ��?��=�׮ �^���$�ux���}c�6������ I[��� Զv
c� mO����CO�V���>� p>�%�7Q>'��x�6�s�$m�	���*�wu4��>篶&|���
+|���|��J|O���-�HG��
+endstream
+endobj
+1040 0 obj <<
+/Type /Page
+/Contents 1041 0 R
+/Resources 1039 0 R
+/MediaBox [0 0 612 792]
+/Parent 1006 0 R
+>> endobj
+1042 0 obj <<
+/D [1040 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1043 0 obj <<
+/D [1040 0 R /XYZ 86.4 478.795 null]
+>> endobj
+1044 0 obj <<
+/D [1040 0 R /XYZ 86.4 265.904 null]
+>> endobj
+1039 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R /F11 628 0 R /F10 700 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1051 0 obj <<
+/Length 3244      
+/Filter /FlateDecode
+>>
+stream
+x��[K�۶�ϯЮ�

!����";Ǯ�d&�$Yp$�
kITH�����^ |�����E��H��~��Jfw�d���7�_��jf�ULͮogF1�����z5�u.��\p��TY�X�����ӛu�o��e���r��f.����o.^^_�qAa�dF�e%1B͖��_Of+x�f�n�죛��	n	�����⧋d�Le)�Z�dA�Fe2]geZ�.9�;:�|�o���4W��?*+���!
��?η�}=�x���ѐ��.�'��-@�y��dz��ove�,��
�ȷw~0GQ	=�
?����%��p�1����v�����'���€"*Qꎦ�������EB4eͼF6���
p �y#��V�@�}�'�����h�W������8x�)n<[0i�Q
�E�����
.�Y�v������>��X�4
����Mf�[6��*��"_�~$�+��6�dah�S��-���F�P!������J�*��=��rЅ�͛��L0e&�,�5�_��e.%��z�:��1�
^�dwe�8\fU����t�D��y�.��<�.�l��YXb��)^��6����,�	F.����*�R�D8��
*�Ndl��8`O���N��!:
�������緎
����qC��Ch�;[���nĖ(�ujZ����H��.l$UY�g�C`�

+ ��B<-��,�w��?�Y�o	���*�6D
�7�}r؇��.����� "X�A��𒏹�EE�
l�1uA$���Q+��%a�;E;���z�������P�<���Kg838,�9�Ap w�U�d�5=��ڊ��#aLNJGeF��a�.i��.��,�+�$:i�s�!3�L��^Xօ�- �3EaBN�hN(7m�v�Y�\h��vK%"D.P�M�lm���箾/�������kc�P{Y�@���4D!�J��_ICV��݈ƣ]-#�ғΉ1Q�Q�!Rғ�+Z��"`j�j�I �`���c5�(�iI[f�ea>��m� �<!-o�LKL�`�U]��
��dW�7B6�6�G!B���M���(w�������j_z�d���E�)[�}��[�98|3�G{LN{
AK��y�8x�^��*
�㸮#���ōC�p��	M��C�S`��L7>�S~/�
+F��m/ǐ�$��Gň^�b�H���c�����\p��L�
��Pn�o��0�!r�?���
�n�S�
<+�	?�t��Б��B�0È�
����;ط�?	Ѿ�q�:�ys(�	:����ddp(݅��5���4H�a�F�r��rdeH��M>�mB���
el�v��wY�Z6"qH��_��u�g�7 
+��
���(��s�WY��	E�F,g��~�#���‹��
̡�Q$�M!
y #+��<+��2��c_�yք
+
	����_ B�9Kd��d���ѧ��Й�?�M�*G�	�"��d��Ҹ��
�U��c���\�F��
� ��WK�,��v�Fzt�S�=�3�9��D
+3,4���
��l�j{�(.P�k0���]-
+7�X
G�b|^v�i��-7a�>R	x
��NPNNm�~]e��$��y��v
ݢ2�
֊OVY�;1B�A�\
 �8���'m.Gѡf
:��ǡC�?��iH`V�d" �=
2�`�
X�C��'���3 ���c�
+%y��&A�r��@a$�ֳ�Z�&P���1�a����J�-o�r�v/z�(K���} 
�& ��������ȑ&� U*���)��I��hi�LH(�A5k$�}`�1;0�h(u���G�^{d�h��'2���N�?Fԓ4Ö�`�6��o1"���@
+DW�ܮS �������Qy`|�� �X8Ç�
�0�YE
�+�0��6/<m��io�z�����q�-A��08
ԇn��jY��M���RE=,b�L�!�k�y�7Nd��A���D7MOm�
�%���)���,�,D
+*�ѫ�"��("!}]��73U��GY֨�P%�:3n�5��c+B"�I�:uc+���4?��
B�o����W���z�5�a�+Ɔ�χ��?
ǎ:�my?
���lڤ�X(�7��z�=ߓ�  (���p�Rî�ىs�D�8z�.>�@w\�X��1_\�� �
8�#0��6�)=��d
��3�w��};])Tz�<�o����Wj�����e�g]r�A�����+O+��|���g�E�?VO��PO��XãĂ�|��8�D��}/�
b.�L?\J�g�0r�$�g���F�e����&d"��`�?����dr�[��o둄�َ
J��V� ����cK
<�Nu����۫�`l�V �r���c��
+�:��S���/�~���j�XeB�#�Vw�cQ`�9sʂ/ݧ(�ΚxS=fA���u��#
�ӎf�ƞ��Q�'�,b���	u�/���u����dԷ��=�xDO��hw�s=z�Ut�h�gO�9�0�T�C��׊������
!����
,[F�#ԣ&�P>��6��4!_���p���D�v��03B 9î
�''����A
�ɡ��
롙
�[H���
r��MP���^�<��]g3]��n��rX�4q�zW�Y5LUPΛ�{�Q�\���8*4�>)}S젴)���\�\���c^�\=��eF�y�ҟ+��JB��c�I�I�����W�p�aTx����}i�Ci�7N��Zq�����L4N���34N��5����ðb�
+�L�P��
�O�t㄁�*#��8��1�7�D at dD"0�>�o� � ���N��V�0�J�9��ޙ�h��C�D~�Q� ��h���0��G�B"����N
\��:��
���1���-6v����9��#�H�
?w�}��	���*��b{���;+�tp�Z��S�ϊ���~,����9@=u�~��;��m�A��2��2�B�J��qX+- �F�G��gش)��M����9��v���d�M	�=���R\��T�gص���]��*mu������I�ƻM��Q��G`����|�t�6n��/�p�,�~�")
|��H�>Y�9�'K8ga/b���b��~zs��[E�	!��둴
ز�v��FY����7"��c@r0F{�[�h�c���nc��´0�|
�62�6�_?݊0xЪ�
+�(�����̟

ܬ�����v/q
+endstream
+endobj
+1050 0 obj <<
+/Type /Page
+/Contents 1051 0 R
+/Resources 1049 0 R
+/MediaBox [0 0 612 792]
+/Parent 1055 0 R
+/Annots [ 1038 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R ]
+>> endobj
+1038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.264 620.791 222.987 631.916]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.6) >>
+>> endobj
+1045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.753 512.399 419.224 524.354]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+1046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.319 275.828 433.79 286.953]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.8) >>
+>> endobj
+1047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [319.58 263.873 342.052 274.997]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.9) >>
+>> endobj
+1048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.956 56.26 434.427 67.385]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+1052 0 obj <<
+/D [1050 0 R /XYZ 86.4 726.045 null]
+>> endobj
+118 0 obj <<
+/D [1050 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1053 0 obj <<
+/D [1050 0 R /XYZ 86.4 473.59 null]
+>> endobj
+1054 0 obj <<
+/D [1050 0 R /XYZ 86.4 244.578 null]
+>> endobj
+1049 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F14 627 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1059 0 obj <<
+/Length 2996      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs����W�s�yb&�

Yvɡh[���p$Q�( +J����\��R��e
�g���c�D�Q�p���sbS��U�Q�
Q�F��},��	�2M�wMQ^�p���>;���E|U�n�����vS����������^]
}<��0�h` �*Zm����Dkx�c�nttg�m#�
ap��Ώ~9J���t����ѡ���҈�4&RZ��}4`� L{
+VhB�fH��HJh���PB�Ŧ9��7��y�fu� �h���eLD�里x�(�����c����l��k�L$�(�L�;�j���H&���ea����CQ�e�YB��%pB�^����
�UÙ ����l��7na��s�����nH��( rBAW cK仼Y��-������	���7��4�ڕ�0k�:�`U at 0y�f�
���xx���q�*~K��Ƕ
�a������n��c�
7�{�ެ݃�ʿZl
f� �:7epAA7�q.ڼG�����"�e�! p
7��=����t�<[7Z�}�k2��7��Կ��w����{S��(�\47��F��R��s̍��P̀� Z����X�:�yX �Ă�p�{3�Tkg�����j6 G����T��ӈ���=�j~�=
�4�| ;P�G�G�,�lUqT/7��B��> ����
Po^�;��N$���H�(�o���t.����������f
<֎�
�b�N�����
kJ�U�9	.j�

M�t�
o�vW����c)�l�˧�$�ġ��{ޘZ66��{��-�����%N4``(�/����Y�~����)�*󠑿�6��t���?�>=_@�fT$! @�� ��~aI��'
��^�|u~���%�	�W��m��A}ʩ�>�ɚ
m�8�=�6��*o���f�������ilߌ��Ғ���!,��R���>=]J� e�� <e$c�g?��أ
@]��L?υ�Id_���̯�����O xu [...]
+E�0"��|<�L�>
�v0L�/^oY�]��K��Ē:�r=
�:�u���*o"�H"Aw����$#�q�kow���m� �� �)�����v�p[WV���OnDl+F��?�y���J�iݕ
����
K�#�M������|�A���pW!��6+�#��{�k0�mV�<���bU}��e��Q���M1�5X�ű�F[v��ڪ����:��)h��\�q��9�[3�b�
�^Q�W��-��1�K�(�-+��g�� A
���ƻ�+�sw�X����xٯ�eؕ�s��f�4�nѵ�����Y����
+�[���0RЩ
�g\��A��E�
+��퍛��T���$e=7�$0
�>c
+L���Ȗ�6B��XU.b�����YcP��c�
+
�4`�����M�`�:� u���U���&o�0�����|B�̶��%��sL���
VPW[w�u
ȗ9S�9����
n��m,�"~
�Y�R���UYiAF,�U��&UX2
�%+o
��%Ô���Ӱ�m@����� \��C�R�n�w��y��M!

�w9�$w$QbX0;-�S';�zCmCt$��n=}!<��)B�^��!hW
;&fԔ�뤳�\��J������������ݒ �"���U���TR�d
+p �#e:R�b��I��)J�Ȋ&��3gmzT)�]�9
_
$�	c���H��W���w�0C:�@�]�
��1 l���>�a
��0��@o�gVn$�/
[c��A�a܄���N[�C6!z	[0������A�g�@��`8�
9Ff
���
�N8 +E�a*�>�������� ����m��4��㮀е��ER��Qp"�c�my����X�
l�9�
7���
��8����
xAǣ��u���s2� 2�ުD�������b�����Y�#�]�2�qn1��RH
���O��
�
/���XL`W�
�k(�{O����M0�[�� R�M�gW��:�)�
>�J(��W
d
M}� 

+�^v
�2Q%i>\��W�A\�Z<�("��u8��0
Z�F��f>E[�C-����H��u�y
�('i�q
��d��<����(1�by
��J�1��
X�	>��O���v�5 �ѽ�e����o
+,Xz�C�X�^7�D��i��
F���F�E�����
&>
0�'
+�*����
�
蜋?�y�x?�Sᚲ�u$��䑧��f��)"&� \�ߊ�i��^l��Ƥ���E�Q{�#�F�tvD�G��AH3�"�
+��-
P��
�'䥊��'�|�����s~�&��,=MG���l��Φ",�l���G��|AB��m3(kq��p������L�=8ӑ~� R���͗
"����*��P��
z"��
�+��~%.{ū;D�A}
Ca�OS�b2���X.�Հ+����VCޝʇ�l��O��Agm[� 
r��Ͳoxh!
�
+���_��>��<���ƒ�|{lw
���~�L�_9+���:+B�Ď��E��Hlպ���rM�q�:
a�%���}�ɗ�XA�����}V��- %��B�! ��\l����(�������^� ��x�e*80Q�f��Za���5�T|�h|�h�]K ��BԦ ��g��a/��n����Q6�Zj�E���1�c�Z���[`\�7>1�|&C{�q��9s�*�u�cI>o�2lĝ�

yt��mv��Y����_�Z.�
+endstream
+endobj
+1058 0 obj <<
+/Type /Page
+/Contents 1059 0 R
+/Resources 1057 0 R
+/MediaBox [0 0 612 792]
+/Parent 1055 0 R
+/Annots [ 1056 0 R ]
+>> endobj
+1056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.581 420.12 165.304 430.968]
+/Subtype /Link
+/A << /S /GoTo /D (table.4.3) >>
+>> endobj
+1060 0 obj <<
+/D [1058 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1061 0 obj <<
+/D [1058 0 R /XYZ 86.4 701.138 null]
+>> endobj
+122 0 obj <<
+/D [1058 0 R /XYZ 86.4 468.461 null]
+>> endobj
+126 0 obj <<
+/D [1058 0 R /XYZ 86.4 354.208 null]
+>> endobj
+1062 0 obj <<
+/D [1058 0 R /XYZ 86.4 278.919 null]
+>> endobj
+1057 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R /F38 453 0 R /F49 566 0 R /F11 628 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1065 0 obj <<
+/Length 1733      
+/Filter /FlateDecode
+>>
+stream
+x��Z�r�H��+�����w�f����q9��Y$Y� ;�Ab@$U��s�B��D
UfA���s���)���Wo�^_

�$�\G����DF��D
�O�/I�p$���NW�I2�Gl�<�S���&��<[G<���~���z������]���:�,��|����D���F?���1��n
��>_����-l[Cͤ!�GJh���}?l%J!�
+��p$�
|\:���}.��Xn��?����k�n�$6��ۋ�g�:��cu
���ݩW�=�P׮����5B�^c�h�k���S��}I6E�U@��}˙����@J��֑�H�$�� �6���
Ln=�3+U�q�
p)�.K��ތ���^�c����^`a	����0փ2>
9ȒEz
D�Nv �sJ��P�I��E�p%�
wAT��3�LJ���[/�"���@@�
+>HW
�C��2�B�u�����X�ge,	�c[jƳ�d�?"a
+��r՚�$1��N�R��|�o
P��H���퓟����y�L&��t�t4[Z$H���=-�c��#@�3�h&z�1ބ��±� %�vĂ�[ơ@�`�f��a�c�� �o_;O��
0N�
�'
p_Czz�#��x���5Ѫ��1�p��`>˳�
���dUz��Z�g�����.�ϲ1� ���`$�
+2���e�f�}�b��.c�����2y��4a�:2���t����d6߬sS7#q��VV��I��-��Nf��
QLB���������PyH&��s�*ߔ����֠�W��z�@2٢{��l "������
�caJg��N=�Y�Z�3��vq��{7�8�u��wW
�
�ӄ@w=�0��9�\�����^�[�"]60�

�p
�gx
_~�fO����!�
ka/l}���V^6@=���0�TT��
�� J�/�sAS���
��w��#\W�K��!�d.�z�Q[/^���춾hԻP;I����`
���2�z!�*bt���ˉ_�I&��,	m�;��y��x�	�ZZ�pծ��0m�`����L
�����NF�ZH���-��2"ޑ��t��
פA�N6��Ս��w�$
Qϵ���@ьXU��m�.<���ج�r�uU������Dﻜ�Q8����n�ܠU7
q��&Vb9[���S�P�p�h�
g�$�H
qq�"�n�E@��>��;��pT�e��
��(�K�)�!Lʞ�F7|�/�:��F0
�jxմ���a��=�l_*��ֆ�3rJ7�u�g�`
�4&Z���L.D���g�W������H|W�?I��
��
+u{��H�۩{.?g0���e��{��2��S	��0\��e�@n�8���	G��$���v���^
kЙG/%����s����F�
�5��H,�n-Q\��q�h��P;Q���
l�(�
'��~��2��}�g��;�)�#�Q
E�v��l�Á ,C�J��>X�Ї3}ː��7�%�)�&iY�[�
������6�~�l�Ñ �U�����)蔏/Wi��ɮ�9������O����
G�p�\֏�KJ
U�W�e�� �t�
��~bL������Yݏ�sK�j�F��I���/W��7��fR
.t�=�v\��C%n��"]��~0D
+׷�~\�ibb��m�^�,�lִ��h?.g��C=��Ӆ#AԤ���Ӌ�T+��;�D
|M��y9
.UA�Ʃ?Z����k
+endstream
+endobj
+1064 0 obj <<
+/Type /Page
+/Contents 1065 0 R
+/Resources 1063 0 R
+/MediaBox [0 0 612 792]
+/Parent 1055 0 R
+>> endobj
+1066 0 obj <<
+/D [1064 0 R /XYZ 86.4 726.045 null]
+>> endobj
+543 0 obj <<
+/D [1064 0 R /XYZ 194.643 548.496 null]
+>> endobj
+1063 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1069 0 obj <<
+/Length 2167      
+/Filter /FlateDecode
+>>
+stream
+x��ZIs����W�S�v�]9�
�-ӕ�:ɮ
+4Đa �R��y�

� � Z�x!�A�m���=4��"
}����W���
2���bi�x��A����2zs}��B(������i�����/��=�7E�<�oon��:��E^
�v�������0�����ֻ�������aČ�����"�
�p�E�G�<­�C:#.�

K
%{JaL$�FD�9��",eK�Y���
R at B����n`�����ٽj���$�0�E�{�
CH d�~�!p����H0�U9I��	߽3P_Ĩ�'n�&K�K���el�_����� 
�Č9���9}"L��	ðB�P�]����/�&mE!�
��YQ"�:+���?�j]no���FoW�H_\��+.H�9&1h�-
�H(�(tg�i�	�1B�uo�iݔf�
�u�4?�:nv��;^
��_Ql���ñ�q�5m����=
W�:�Y��i�}�
2�u�M�
+m�j�!�ط�U�K�du���SMz
�
a��B>�[��H�ԑbB�e�3(FR�wº��3���|(�����:�X�X�
9锱���`����;����?���H�~Wز��"���!k�n([�=�wYḮ-��h.�WD��r��V[3��c�?�xY��ie��ce���,45b:�������V�[kTw�`o�*-WUc
Zz��|�[����Ri���=o�Pn�ޟ_�5PH��A"�A�1	H�8��029� �C�_.���-��"
�5���jvUy�aT1
N���0�rDy������T�!������Cս<�D (����V>���ժ�|=��$�,4
��ÉIh�&K$&K�`Ꙟ�999=?��/`,;���V���d��M}c�S���
8��^ã�5Q9i��U�^�U�i��MUZ�g	0�&*��SQ�1
���x�?��<���OK0�$�	���y�z��dn���z�ѡ����0Y)7�����ةP��
�� L��;U�\���
<t�bg�Q���խA�	!@�� #�����&@�D��M��J�wq��Ί<���E��0�D+@�d��dh
H�z���
� �\x�-�
+
�q�! XĉpBC�� ������|ۊrGC��Y]�hl,l��m�ƛ�A
R
[nFMA]�B���k�ؤI�0�1\{ u h�x�%l���?��!����y�O�>^~o��\��
ugo�{+@��s.�n]��6�͖/8�yp2���/�\"C���9c�EZ
�
jM�`���������pr��犓9�FB�,2�6���@����K e�������:9)��W�vjbN����r
�a	�yCc��d��X.
�k
�v���c�$�
U8���w�M+�
(�V
�(y�8�����i�x�<�ƁQ�+���ق�r�d���~z�Q�2
�1/�3ЙP�E�A�7��
[+�l�
�P�ɱ�B���n�l�H���=
]���C�ֆ�Q��)�QA�>àx��
+�3(��.�m[R��/�So�E�KJqH���L��/�E�->WHNC��~�`�$���T��]�Gl�߅�)8�
�d��.��/7�x
@<H�`!�����
p|`�y8N9`a���=[
F㐵�H�
� �j�@� �;���!&���ϰP(cs`
Tc(>p�!��������w*g'z���zo�$
bYv���\�e����w�Uuzӝh�u�z쉖6Odi~U_��O.��T��� X7�ʴ��Ξp����q�UؑcWk�҉y�$�UQn����	�� ��|l���~�?m�����4ZQ�@�-ė9��
+�P��E��%��3g'
,c��N�1���/������
hс�@���Je��44�9��	�L�[�e��
����g�Z��]"��C
 %�,0�B�,9Z�,p�S��"/�,ȓ&�T�7�@�
���^�y�N����w
��Y���� ��
��P=Ƹ��;f�:�,����:�^�I>1%$��>��/Q�DF�9m<""lǂx��ӱD�����kN��
g�v�����1R��'��#�Ȍ��
+(������c��v'���#�=Ǻ)˶W�uHG LX+���� ԄEƊ�/|�4u�����
�i
+endstream
+endobj
+1068 0 obj <<
+/Type /Page
+/Contents 1069 0 R
+/Resources 1067 0 R
+/MediaBox [0 0 612 792]
+/Parent 1055 0 R
+>> endobj
+1070 0 obj <<
+/D [1068 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1071 0 obj <<
+/D [1068 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1072 0 obj <<
+/D [1068 0 R /XYZ 86.4 551.137 null]
+>> endobj
+1073 0 obj <<
+/D [1068 0 R /XYZ 86.4 412.95 null]
+>> endobj
+1074 0 obj <<
+/D [1068 0 R /XYZ 86.4 274.763 null]
+>> endobj
+1075 0 obj <<
+/D [1068 0 R /XYZ 86.4 123.06 null]
+>> endobj
+1067 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F7 701 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1078 0 obj <<
+/Length 2803      
+/Filter /FlateDecode
+>>
+stream
+x��[Is����W����2�
/S�hT5#�r�LU(��
�R�_��
@4 B���Rq� l����'�<���oWg/�291�H*'W7-�(j�ddr��|H8��,y_��l1���$��<��ov��6+��tF��:�f��ջ�7Wg����Ro+��r�X�}�O��ͻ	F��Ƀ[��pf��|ry������r�:.�
+��i"J�߬�r��P?��m�!�ap�-�	
l�v6fH+^�)�y���I��h+��"`ƒŮ,����dko�åK��;��[��-	i�5����m_(�lH���&��w�=R8:7�
6�Q����(����nw��+q?"��4~��L`�\ݥ~Uy艮�F���@7���f�崭8��m��R�|��dA��!	LAH���l�����Ȱ��Y��Z7�t�+6��j���]��H�0�)
┌���ȧ�@*H���n+JC�^������X2 �����ؔ��A��v�݅XGJ�H����]{�����n�H��f��Ýt�Fm�D��ܓǘ4�B��t�������|? T3$09�P����X�����gA5�����:ň+S�����ZPn
���ĩX�U��.�0i��'j����M���
"�y��P�0ڤ.:Ѐ$TC��5`<٨=.
���|lXls����AJ��l���Q�����r�n�����n �Ċ$O���
�� [...]
+E�p���b�P�H���
�?Tp��>
��HZ�(��RT�_�բ�\
�HB$	���@
�E�k���5(=�(����v�ʋ���(�ov�<[�������_�
:�]mf��Vk�M�|:�V�T�֚ @�k���@5{��]�Z�����}��*+� #BSX��l}��]�E���{�>��b�R%fn�܅9!,#����ݭz���G��`���J 4PPINЭ�V�(�K� �>�6J������.e���}�4T�y�-�N�Q�
8��e���$�՚�E��u^8�
+��8� ��Ĉ[�|�~BAMO��##À��o&�4����a[��
+��
hh��������5��I���}��� wn �z
+�٭aG �S
�=���hQ�H��p�0R3*,�p����:=�ֺJ_^��K�I-�2]ؠ�<ɳu:/�}�-�SF������t��m��\ih-�$,��;7�@�0��v�a��9t$0̓'p�%�~r2*�a^������Y
�5�[Y���p��	���Y��`��)�+�1��<�f:�$�
+��j3_�e�iFl`�

�X�>�V� �$ g�.
�.T�8�Ⴟ"��a�/-
p�<V�����:�>�`$����2���*�-��}��7���$W���nI�*ž��'LXZ��3�st
u~�۬����m
�o6�������/�*�p�ϫP�;-�]����sC^�i���݈�e��Z�C�1�	��>Fp���cfڜ`<f����&�:�`����
с�� ���#t�`�g�)V��2H
+u��c��C2�CbƜx-�s�ðf�H�֔
ع|8�l}����3�/�9�#3ET���<<�a�X�yoh���ˮ`�u;�l���
+�T�G��+��vQ]�֕4��`KGS�}��e
��l��'�~�Y�1��) ��J�7G̲��z����,K�=�jN��v�ű��8����:������
�f^m��n!�0��E+�q}�
-a�ߺy�d�z�I`��4Oـ�(-��B�r�d�1���1
ӷ�SR��3�
2K?	���y2c
�.ÿ2����CPv�6 
+c��L,��RRSW�HKz,��0Gp;��n��b�y���(�%7��')�F��|��c��1� b>�P�)b
����D	;�
ĞD	�f�H���A��7h�^�`����	Avl�r �Ԝ$� �����(��#��@*�����
â�^���q7�as�z��pD,pD�bCY��j�.�eŶ�lk_8�s ���Iz?�!���q�(�i�mXL*���ZJʞ��=����A��FYm��-��~ne�I�����<�\l��:�܊���=�Qs$Ğ
� ӛ$
+iD�۝���w�O����VI!&L<"�q�)գ��V���a�n[���ӟ�!Id�3�0��)Z�Fq��t@?KG�i
8#��=T�
��|���~Y]�<r��Xy�3�f�ؒ^#LE�Х-ҡ�y��Q�7��
9�����v
oߊc��v��ѷ9���񆖥`�����+;���pw��n�с��c،D�-�{
��~دEw���y~S3�Fk�;�*<��-�w���
s�0߇\����ve��$��l�<���a6ĤPj�VG
c
��
b�u��)����0
�N�Z
M�
�iV���푁�Olh	nk8�U^<
n�
�[oD
�
*q�Y�*
����
����w����T��Զk�R�B(>V���r�H[����O��='� �L���?Y"�zl�W&����. at F@���7-B�7x�[AF��������@@=�]SPI�`�qrٮƄ��\n��0�l�f� ��E/CXZv3ҥE/�����<�'S�I��O��$7�%�aJF�U���d��>�L5��l�20v��z� ��r�Vx'
�{M7�V�_�G��z��<���
+�zL��}���'���<�x�t�/�r��[�{y�7����Nhn
䋽��p�!b�
��2r
+endstream
+endobj
+1077 0 obj <<
+/Type /Page
+/Contents 1078 0 R
+/Resources 1076 0 R
+/MediaBox [0 0 612 792]
+/Parent 1055 0 R
+>> endobj
+1079 0 obj <<
+/D [1077 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1080 0 obj <<
+/D [1077 0 R /XYZ 86.4 625.68 null]
+>> endobj
+130 0 obj <<
+/D [1077 0 R /XYZ 86.4 475.156 null]
+>> endobj
+1081 0 obj <<
+/D [1077 0 R /XYZ 86.4 406.828 null]
+>> endobj
+1082 0 obj <<
+/D [1077 0 R /XYZ 86.4 138.561 null]
+>> endobj
+1076 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F7 701 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1085 0 obj <<
+/Length 2559      
+/Filter /FlateDecode
+>>
+stream
+x��Z�r�8}�W�iKފ1��n�C6OMƓ��y��#Q6w(��ܾ~.�H��혛�ʤ\e���h���Ag�3:����W'ߝ�h�8���j53�3�c	6�Z�^�==�Ji=Uf���3a���_^��¶�|Ul��g����6�I����׫'ϯNޞ0(�3V+P��h�X����Ζ��Ō��{�o=�"&
�|vy�
�m�M��(f�������m70I���S��I�K�=����3E���&�������\�u1a2��U�\�^�N\.y���h��S��O���5�!
B���~9�T��"nK>�ҳ�^�؄QAm{�=MgL�P#l�������p򘎉jiE$�c�'s.�����DÉ�‰���^�z����e���k�ףnf����-���w�����-�2�S�no�ҿ�ƻ?
3^���,W�<���
H!��3
+
1p� 1,���"F���}ŕ�z~���8&,�S(���������|	D$^iM��j�H�L�o��p\S�#6� �@��;�u�
��Pք�����R��&�$%Q���z����7�����&~�"���XL�� ��!7\
�2N%��Z9�Dٹnk�c���Ĕ,3�-�e�)�Ù��MrϳM���.��ݩ��H
�Y�M6E5�V$�wVeHFI�}r/.qC��ňkB���f,"�WƎe�5��=&�9�Qtt
+
����	J�~���i�r�>�m��%y9��f`�����Ը��/�@�����,��Cry�ğ)���Ag�"?��j�����c�C0CLĻ�A�z����f�ZS..-"��HĜq����N��>-��U�>T��Y�����0�W?kp�hվ;�nz��M�&<=+���1��[��!Ҷ���h������QU[�+���Dz�9@E��
�5��f|g<6���oY���(ַ�*
oBc��B�H��f���U����$��������^E-x/+��w㶷d��dg,C*��Ӯ�/�E�&K6ݒ2;
+�Ow({O�׻u����WX
.vIB��)�Q�٣�O�	j�%8��c���H�6�
�רj���Ȗ>x�|�*_��({
H��,��?�0fo|�z2�i�4��-����
�uau�6��a��.`hR��FBV�!�ˋMH��4E2=q�@���p<{��u<�����]�CL�v
��(@�$4�ݬ��*~U���p
TS�P+J��EQH�Т)�gEI��A'P�bG痥�S
"P��(�B�(5'��ID)f�C'�ZSŎ�ߋ*�
J��x[��ߖ�8�cy�t�,�	�t�I�'�&��'���ȣȬ��_UZ�K
���3�n%ǁ:�� [�ЁYY����i�ئ5�X[�ƧW���ת��	���uz�'
��>��H��Qz�G��y
����H�D�tt�ƶ�
��Aj����b{C��CZ��7L�")�� 5z\h�
lA�x?���}0N�E��bZj^{�(-�$Za5a�q��v �uҢ�y����ɱ�tB󞜜��Ʌ����R���6�Ft��t��s��5x�=
�Vm���
��(m��GR�3�o�3�@a�WH��7�-O��(���~&�
)݇��]H_��v�FMx�݆���M	ALٔ�X��-�cKP��0�sc�
�o��ǜ5�P�0g+�������b�lE�{1�	�����e���̹3���9s�NÜ�(~?�<�֚9w�~�Y[�|�~E�l�
�?��}��O���r��
�ֽJ��[/��yɘ�*�r��	�

��x_���#�K���r(x(�T��
|��Ѡ�
xV*������F*'���
���W�<�+�!�&�+��Xt��?��X��T�'��*H�{p�ǖ��6;<e�����R���ΕV{m���(��z��6�>��]*n{����m��� �L	�7I��o2��o�c��n�vE�KPס��A�7;4A�m'��G�t�(vu�Iϗ��;@h�nl�q��_Wɢ*�٧�I�>�X����׬�r��uRm���,�|~~j��\j�{	^�l�L���ۦ�a�(�5�zLY���k�����R�%�@���1Q*�HI�r��/o��
�=V�̶��G.��iB�
_�[8
?;�V���:6?����qX��~.=9����M�}���������Zb��C�,O��4�,m���j�%���#P�V���=5\���/�o·�+:cW^{��h�o�� ��Y].^y�S�[
:���ӭ)����\�
��`n����N`�a�v�m�R�Q��i,�g�7.�p;�
-b�G�(�>"�9Y�b�\�nD�x_�o��
1�{�xDbɧڽ<p�ȹ"����	��q��0}��?i0�
L����
L�D�B���W��A���
j}�62�B�C�p�@�,СN�or�G�e9/C�����!qPG)Z�c���؁�/�mi8���D#�m��1{�!��6-���:�c+ ��9�#�/,�t�-�
x��S;��d~�{�{ﱾ"��
d�KK
+endstream
+endobj
+1084 0 obj <<
+/Type /Page
+/Contents 1085 0 R
+/Resources 1083 0 R
+/MediaBox [0 0 612 792]
+/Parent 1055 0 R
+>> endobj
+1086 0 obj <<
+/D [1084 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1087 0 obj <<
+/D [1084 0 R /XYZ 86.4 629.692 null]
+>> endobj
+1088 0 obj <<
+/D [1084 0 R /XYZ 86.4 426.998 null]
+>> endobj
+134 0 obj <<
+/D [1084 0 R /XYZ 86.4 208.585 null]
+>> endobj
+1089 0 obj <<
+/D [1084 0 R /XYZ 86.4 154.476 null]
+>> endobj
+1083 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1092 0 obj <<
+/Length 2761      
+/Filter /FlateDecode
+>>
+stream
+x��ZYo��~ׯ��`�xz�>
�!q셽Z#�d���jDɄ9C��Ȗ}��ͣ���H��fa���]w�W]�7
����o'?�bra��T..�Z"�P� ����j�~ɑ8]1͖華\��<?]�er�����n���b[����\/9�����ˋ�O'��i�Hs�XoN���W���#f��s��f��A�����?O�g��z�.�
+��
i"J:�z����|�Q)�>fJ��!�t�G���H+�=����sG�e��W�e#a�y����AƖŭ�_��;�,v���,kw{w*�2�w����Tn�%�[/�t�n��z�V��.�����کF#v1VZ�F�bE2��>��t��V�j�����Qc1t�@�ͷ����؋�ua��`��d[�Ugԏ�v*UQIfB1�ބRlҍc,бA�Ж���]
+���i�|$�"q��$��VC�� �����}�b{c���#�L2ĩ���`+J��{�2�9P�sP�X!am=�z�� /L'nF�>7��jj���Wy�Mo���N�Z���ɶ��f�f�̶Y�%y���$�z �K��{�f���Z�^Xo�|�����L��5��V
	��N�W?��YRկ��&�o� m��9� �u�
+����X��G�
[q�ė�bЛ��J�T,���Lt�,p<K�4f
qI�7�Q�p�I�c�yu�!�+J�ˊ@|G��V�2k*f�v�~E�$}UmqI$�&��,�&!/�"
+8�/(�zWn}��|i�a�{�޻k�ߢ���UYl�U	r"4H,
�% �0	/V
r�$"��_˛�&uE�
+
�]Q�!�#��Bh ��7�l���f+o���܉�T]���
18�B��o���9�#�y5
lG��b��/����5���5k�"�P䐸�r
��Gp�y�P][��Y��0��
�=��������g�l[OE�K9�*�
� ���jlc6B
6"�f�#�Gih\���M� b�rz@����(	��<T>�b��L#�DG�ȧ�
*�'v:
��~��yj�S�
�.�Z��"E��*ߜl{��uGaK%
uw�	Ѐ�>�[qC���2Ρ�,��n%�>�/������߷/�CߗR��2A0RP��p2�ʂ�#����}Y@��ԗ���bQ�p�ۢNC�7m���İ}j&T!��í
�8����+�Q#��
+�E�o�Mq�f���1���F<F�{:n�*�xJS���F��P
�[yOh��<�Zq=鬦V%E� �G,�V�d��Uz��
+�P=��.
+�P��Ŷ������\�U�)��Ϣ�Lk�2�|��^e[O�!��DRH#=����.�<�1M 3��4=��Y�15@�Ŷ��`�3mz
���Hm��ݣ��g!�L�ง�
`>�7��y
郍�R3!})���A����/���\
��E��s��a�.��J�W�C}��<�e�
y0�;�݄�q(&D��k@!I�ݝ2�lF<��W��+�����J��
J�Ǔ��]��Xgj ���{�C�
|n�����y���ٛ�����ĩ<��h�٭i��0#� 1��f17��A����]�V�OW���g�@Q~�n��'^��vY�v����
+�@)
��������6e��:e���}�9�^!��P�[������&�Z~�Gנ:�߀SYXq�ްT���`OC��E��m��mv���:+?� d����^&��pa<"ҍ��s�e��8�3d�kD��;��A˗ݰ9��/{�&i>*.m�$ە`��[ݖ���u���<8�x��
+2�}U�wݕU�c-I��a
.�2H�,-���O���Үp����r�N.x���7*�
��־�7_�M�ZVPE�M�?ی�q�I�;��^ݡ�03O�)U�9܇ƈ-��adJ%4�̀L�����1���r�
�� �~���L�����cE쇥�k�$�m�0VŃ��7�#ٷ�v
0��f�,�yC�-?��n3�=< |Oa� s
����!����� 2����"-�N
^�ؼW\6�n��k�?iR��Ӿ��0
�L�ܕ+"
�ƄQ�҂�5���iD},��c�X��kN%( EL�
S	{���}*񴩄?a���o,A _��9����{DZA(�>�����,��%{����U{����O��^��'{
q!F� ���g��%eL�b656k�es7?�}�
�<�����'�C�%�@�6��aX��'��M}@û�ԧj�>}3����z�dt`�c$��L�?Ti�"�͢Jf'	l�Ȏ�`s��"
�N# 
x��Y�Аe(�� ��	=bD�� Y��耛�C���fD��;�fHCV��(%�n��D�� �I��Wd� ���IJh8_��"�K�����
�J/_o�o����M�.�� �ȝ��h�/s{�`ol?�!!	�u���oc��~�����&��m|
o�V�K�QBr��2>��e�%?���<�^�d]�l�n��ۏ�z=4�q����QĚ�C�.�7�@u�Y>����=|>����<���{{
\����s�lQ��ǀ�=8L<F�bMmw����&� �E\D5�����.�'3:t�LXc���@� ���j�}�r�>�R��C�$�(#M��?Y����ͦ�z���
��1k��e/	���B�ggs�����3;lg2���7ٙv�>�EQc[<I���
�
�aL��N�{�u M���%q����~Bۈt���
�!ٟ���h3�|J���v
+endstream
+endobj
+1091 0 obj <<
+/Type /Page
+/Contents 1092 0 R
+/Resources 1090 0 R
+/MediaBox [0 0 612 792]
+/Parent 1097 0 R
+>> endobj
+1093 0 obj <<
+/D [1091 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1094 0 obj <<
+/D [1091 0 R /XYZ 86.4 645.553 null]
+>> endobj
+1095 0 obj <<
+/D [1091 0 R /XYZ 86.4 476.877 null]
+>> endobj
+138 0 obj <<
+/D [1091 0 R /XYZ 86.4 368.238 null]
+>> endobj
+1096 0 obj <<
+/D [1091 0 R /XYZ 86.4 277.886 null]
+>> endobj
+1090 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1100 0 obj <<
+/Length 2082      
+/Filter /FlateDecode
+>>
+stream
+x��[s�F���z������NR��8uܴv��<`,lM�D��~��ծ@B@��:�XZ��=�?�_Dpp��u��ދWLIep5�D<P� �Hpu|�
z4�B(�?��ۣӬ�����o��;���]<q/��8
�Q�̎>]��^���0�RHs�&��ppw�1����q��3�(|�����=\^�.��p�`�@���nɄX�/^^
Ia��Y�!1f~)
R�Q��ptuNh1����Qv!�r]��
%��||Di��I�>���q^�Fv at 0 �!�	N��%�]��C����a6��0vg�|gs����E37��H��0^��Fq�6N���=[L&���
QQ�3o.�&�Y
+:��Q8��3��`�`�0�v��8���Vf�N�
�6��j?C.
+^v�6HiHΑ�^�V��(�����y���ìA�k�9�uWX
��+6��MH�O�ݜ؃�k/��y@��R��x�+����>���

z]�	�� !�Z��az����a�#lXu7�pr��]G~)�����
(���<��%���hjO���ÀI�Ww6(d�E2*FՖG`��-��f���ш�2G�Y2s����bbCkCntA�'�Չ��k�1�n�c�GI8�׬w��&� +�B�x�/󼋪x9���2�]L���|V���eB$�-$3��6�o�	���5ͧ�r��E؃Sl��n8^��Z&��4�q��~�DlW��t���<
���K�p�i�zÆ��0�e劐�
9$-R��ͦ�7�u�s�������hg �pJ��|L�8�H�|��i�SJ���7�mfc��s��l0d�����
�G
XF��d6
+�N�� v��@5����ǣ{j�p5��#�>E��l�u�2�LW�3 �Q^�.�4���rD���,�<�JH�Ά���ug�>M��������U��̀���/��`�
� \zP��wϧ��w�/ߟ��^^��V`Pm���ѥy�~�����7tD����K��¤�F��/��˲�j�=�$W��
�G)R�w�?�J`_ޞ�m�n���
��a���x~�rb�U	c�#[<$r�Lk��C�O:�-���da�
��2���~�	er���֊���BUF��h!3U���Y�̠������T�z��7�
�!�;�J������V��
��`��V%���WHg�j��"���Đ��D�2D�D�hG�7�x�km�Pp�-<�Ef��Wš:ۓ4�5�?�N�9�^�]F��"dO����UI� 8�tF
A��� ͖��񐁥��v*<4��l"�C��( ��V&Z73QE9�,a�	�H�Dt�U3����ܓ�h [...]
+�>u`������ŧ.v�𩲉��O��
�+�L'2�I_�]��>U�>|��
4'��2���Ġ�R4u��ptz?l㧽�Q�<O���
����"� j鍭 e� ���*�)�4�Ky(~��^(	A��"�ux�κ�O�C����Gؓ������n�Ȯ������a���ix��_G(DǾ�/rC3��m�odAa3�+�7�\��Ѳ-�B㰘nC�z#K�����
�fjKt�
+s��k���9�O��W)h�C�C�c�a��(��<3�c�0��!�;!;�� >����c�.�g����@|
-��b�q���]8�l�$>��t"3��?�l'���W��D�/O���rE,_��#� ��+�
��p�W�
��%x$lD>��p�ԝ�K"�qF;�Y at T�<�9wlf>�e�v�7 1`*V�N�f�R�1�FD��|T�V��'V�`�p�Ч�z
���ya�静���L��w�tͤ����=�5�Kk��
�BG[݋|�_�٦����' '.V� ?�������*ݖ�ە�`&N��x(��V	�龟ۛ�&R�?������t[������p�
+endstream
+endobj
+1099 0 obj <<
+/Type /Page
+/Contents 1100 0 R
+/Resources 1098 0 R
+/MediaBox [0 0 612 792]
+/Parent 1097 0 R
+>> endobj
+1101 0 obj <<
+/D [1099 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1102 0 obj <<
+/D [1099 0 R /XYZ 86.4 654.809 null]
+>> endobj
+1103 0 obj <<
+/D [1099 0 R /XYZ 86.4 490.198 null]
+>> endobj
+1104 0 obj <<
+/D [1099 0 R /XYZ 86.4 323.65 null]
+>> endobj
+1105 0 obj <<
+/D [1099 0 R /XYZ 86.4 157.102 null]
+>> endobj
+1098 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F14 627 0 R /F11 628 0 R /F16 397 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1108 0 obj <<
+/Length 3098      
+/Filter /FlateDecode
+>>
+stream
+x��\Kw����Wp�C���y?�Ӆ�H>ve׶�n�,h��𡐠R�����Ā�*a�u�������
Et��쇛��/�
8�4׃�ہ�D
wD
6���
%Q�#a���:[�&���|Ć���,ܾ�,&E�\��G�ii�J��|������3j�Ub�R&�w?���y>�D8;��?7H��O�����3Z�և+mm�Lb�1Œ#�۳�ׯ�]]��9J���qaT�Ha�nG���Bƚ��>yrq
W�������D9�����6b��C
�gx%��MqwΆ�"\ޟ+=
�6Y��_����{��
f�"�Yo&�l����f��;YA��f1r
�#&���h�C
��DVj~q�b_)��J�3N�c�җo��:<&��B�]�6�R"�֭���,,�He���
+bu<�y6�mL(cհ�|�,ap��V!B�ub>R�y�be�X8�����(�h ^�?:̴$R�^�
DqU���t�1I�}h���ήk=gP

{�a�/��*��z9�G�U��/�K��Y��Ǫ0,�E�Ө�"/��,�W6%-UZK�~��0D���(�&��3����4�Ղ�c�@
յV�����iV��̟�<[_܏g�/� ��Б4�����ֈ��m�V���L��l�
y��KAs+C�v6�p>R\
�����'�h�	����(�ҧ���Ƅ�
+}����/�Y9��#�G\A���Sw*�1[OV��ѻ�w#�4
���ݢ�DcP�ۚ�3zuS���WY�Yy|�̰�4O6s���l\�!+�}_^�we����4+e,Ý"4�:�*L����Ǔ��|��bY����o �'%D�Z�
�KYP���Z��������	��
�$�v���'
z����g�����
+�d�2(�Tʁ2
+"��T��!
����D���
S�Ͷ
c&%

+�����e>
A��C6�d�8Ռ�
���P�csCA����AB�����&�\�`��,�	����c3��	qîR��zR���ۆ�l�(�Z�(�g#P�o��c	�'�ժ
���6���?3����
 �Y�R��l��l�;-[ׄo����7��Հ�U@����(�u�U��1
��>v�b�A���X��I
+��'�
!,S��ia��������U^��墢;��>�
Y��;
�QWpQ	�5ξ
+Vw4�V
�����D	0�aV׃Ҋ�EJ�,��c��E��*Y���ߝ�%�(�̙cX]Z+Vi�?au���i
7��N뤆�e�Z'
8��0�(�F� �8 ���i
x_2�[t�:�
1T|R��F;�����cp�$�,��
+.���)ݭ�Wׇ9��PF���
;��m�tQ�4j&�9���@]Q�M"G�a�-�#7<P��˛u���Ӻu;�h`z1����'�mE� �(.����XL�2��fY�ԭ3D�c��d�v��p|����?���/�7k���>'���!k�Nb��'�ѻ��]��]@���C�w*�K.�Ѡs�}�HʐK6��
YW�`3
�t�=Z����>+o�Z�Q������k�܇�@���փҊ�EJ�,o�c��E��*y����{	3��8������m���I�V�C�(��y�,�u��ml9@�j�)�l�%Jo�M���ꢣ������d�Up0���˅�n��m�[Tc�V���fV�lM�
 � �����,�Z�K��4��U� �n���D
���Y��P�,{�G
�
�Cy�{3�BW��Cs ^V�
84K�z�-���x]\�8��Ȝ���14� �c
x�
��3B��?W�h��T�ŀj`�Q�%)��R�γ�m��
<���� [...]
jg�z�����{���j9����
Su�Ʊ%������r3*�^�
u��T��6����E�
h.��R��=��L����H��7���;[�WD+%b
+k�g�!�p�'�\��G%�2۶�F�p at 4�o[��Sdy,���?uu���(j���G��
��{a�(�KvC>]gE�#�_� �0����9|���
q���se�;�����Ǒ֯�?�n�� ���
+wT4���js��vt�j��<=��-����v��~��@���An" �)]�.���&���?	�J�:�(/J�]]_ܼ}�Ћ����E/�9�����f;���H��]o���=/l��=�Api���+��Wax��Cf�cv�����oR9�?������͉9� P�(��
NKhEW�^�JA4���V
k(�@ř�E�m�H�ۗo.�$�)��#$� �;?]&
%'��>FC
D���%gAm/Z�>K��� N��E�U
�|O���i�
A
ѽ�LJ��9�Q"�*݋V�֗�8J���݇V�W�Y=�w�K<�M�r�J�RN�΍7��Sǜ!X.XX�=�\P�DI&;+#Dž�~�c�YT��R�?�^�J�&��Z��#)ϳ@ 0�b�����-�
+���W�>�W	p��\U�1��,U,������5�ղʴ[�� X��>�$�F�i'A%5�`1��t�Q�+����H����`m�A�� 8e��`�C �a��W;L��jAW�!��z�8���du�Jr`+<����%���c���!\�����
���Ȅ@��[b����x1
:="�*�#c�¯���zPs
|���'q�r����D�G2�D��X��ZxH܃J�	w&R���k�›-_L�ɸ�bb\:C����쌋�� ��~��R}��Y�ތB�K�
7�,9<JHQD1w 
+���c��INB�PV�@IT�����ً�Ě4yb!�z�j8q2Rڂ+�$�E*hn#�]M�Ճ=
�o`��l�l�����20�.��
+�� d����G�N�Y��"�-kݝ��{��)N�r��R��?pՔ
+
���
�\�I?�(�D�ҽjmI�p���*4</"�-`�?U�A�f�x]�H�tr�r)jR������U�q��N1�~��qM�c��[jG�K�Y�>߭��,��Ñ+��
+
s�OlL��*��0
 #���mI�`O�����
��$7YHr�P���>�N� K�=hT���H�1���2
�߿L�
+endstream
+endobj
+1107 0 obj <<
+/Type /Page
+/Contents 1108 0 R
+/Resources 1106 0 R
+/MediaBox [0 0 612 792]
+/Parent 1097 0 R
+>> endobj
+1109 0 obj <<
+/D [1107 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1110 0 obj <<
+/D [1107 0 R /XYZ 86.4 647.129 null]
+>> endobj
+1111 0 obj <<
+/D [1107 0 R /XYZ 86.4 486.774 null]
+>> endobj
+1112 0 obj <<
+/D [1107 0 R /XYZ 86.4 297.073 null]
+>> endobj
+1106 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1115 0 obj <<
+/Length 3624      
+/Filter /FlateDecode
+>>
+stream
+xڽ[Ks�F��W�H�L�����ڱ��%�j+�&A	�$� �
���zf�"���$`0�����=�pr7	'�/~����Z�I$����r�@N"�Z���b��T��W*��_�|sw9������Ϳ�ѳ�.�������U>O��T�ܾ�xu{���p�*�������N��v"�'�̼�D�$�xZMn.>]�}��
�LFV��,Җ�|�0
Xn�4�?j�L�ծ��X�����x]���������u����,��h:���i��]�i��x9��O�ol��k�g��!!bpkX������C)H�  n��:&0�������2�� >}&�
RU,��sU2���^_�yg%2H$�5�x�H��~0�	
a"'3ƂD������ �S���uZ��_�c=*�P
�χ\0p�E3�i9���b��Z��.,ɯP{<��
�n���m�+�i��{7��g7�X=\�`���>���n2�c{���ɛ%lI�
�]��~��֖��o�����ݺ<ܢRA�[X>�h��n3'�to�la�U����%M�^�i
+�q5�ʬޕ,|��d�V����'D+9��<�#t�$
A�
c������D�!?U
��!�#
�Y@��Gb�,Z7�V�r��
�55�s��=����:�������!+K�#=�PȦ5lZ�_�J���,�>���$Z�o�KX#��!;�2�qk
�faW���V����0��?U�έ�a�åR�t�sS�wb�ظ�bi}��(�p�� ����ع
苬u���yqġx��餂��Zr���,I=�'r��u x2��u��7���89-�99O:'�/cN�!��I'����1'�P?��
899D�8��B$ڄ��t�MȐ����㿥���7���:z�ˍ�Y��K�^���szIN���s��Rw� {��1���t�n�0G�
)(Rj��X��;�u�.'���?x�)�\v@꧗�}�[�H&:D�g'bd�(2KE�E����{�F���A4�%��/�� �
�j� o?4 at 8T
�
+�H�H�q��#!H ����u�.�G�h^��B^����ُ�E 3:�1!��l� b}�RH��p�P�m�n߼u�!
��@�*#��>�&���P�e��t�Ҁ
5�����W/=:B�W�#��
-���w�)3g�
�T�l�Pֲ8�L�†W�
+��5Z�j����m:/���fV�묚��7�m����gr�>���.���!�9OA�a(O��Ц�U��q��q,Oi�'��B%Q��j at wĠ��&�B5с&'�S=fR�3)�[$?�����z�V��KqxޖR�"'��~97S
�eb����g[�s
������ZD�z��1h�<6v�z��E9�U$����#1F���X�r�O2E
�}@�xY
�3��y
("���� v��j0
�ՠD�
�T�R�I�`h��J(A���:QT�Q�
��Y���R
r�m@��
+�d-*����*���
ֻ�)�9^§#6��D��B"��B6��FGp!rV���x{���b�_��J�贠�`&)Mb)
E�	��s�*�
+��D�৿
Hy��@j�|!'F��t��)PY�}XHK���X��qa$�'M� U3��
?�%a�)�b)͏cC�(��NV��9�
���N�BS��x2��\ph����!
�#1�B���������A���ܵߺ)��`1�h
+�2���9�ۍ��Fsr
�1'r���f��[1 F-O3SB0���O�N�F�sХ�+�"���,TQ�1��T�	:�U�*���4�9�xq����E!��,�ɏ�MiA0�
+����5D�$M�
���0���RW�I)�e�^�_���U;:�3t"�n�:�1$<�‰��\8�
W�I�[�̀�����bi
�����Om00�� Q���1zo� z��U�ɨ�L��cUgk�M	
o�-�OW�G[vRj�
�C�L7�gjz �2�c
7}5<�~
��Ri٣_���aU�wYE
+d��������
����jY��Ԯ��ĺG6d^�<�D��{
dޢ1�ҹgA��!7�s��V�e�Jk�j`���N3��v��Ni�C��yYi8
�=���
vj���T�f�&�
v�gp滕%��א-��e�
�p�޴��#ɴ��Rp�� �G����j���|\9紿��u�BEî���2���U��@��8pֺm���~,
�����"}��;/P
+��y)Ɛ�cW�rW��Gg�X���C�}3�
+�Hek]2_�N��7����{�º,�gc��
殬��U?�\>���� 
�	g�{�$N���B
+�Hnc+N�@4!�X
�|�6��c�m�{��S+��;�va׋E�yd��ٙ[cb�o�v����j�~�f�
���#���|��F
��4��p�x�y�'uB9�l
��k-K���_�9
$����q�8ˇt�8y(�}��8���(���9��:�]�!_��NI9?�{ؐ��@
�\w����E�
~;�
�$T�@y5���m^���:�|�
��="����(�uYB�"T�����
o�r�ש�l��Tz��fa��^�x����ej��Cr˿��̉<���A���`�j��ʪ{:�g+Lt
}� �
8�"�8e��
d�;��\j�귙��{}}����K$Z،sj���¹*�v��J���YQlw���n�Θu��]Yf�F�%�X�<�����?��'��nl�&���S�ф�6(4,R~���ɠ�����fF4OIS��]��4��P9i����L'��5C(u�
A���Pq��� f����B���ؐ��#]�����p0����]h�/�]v��\��/�=�� :�ئU��1ؽ�k)���o��d5U�?{�([��HD�R
S����R?��H�_y��X���@Z"~4�h�ᴺ/v��}nO�
�?��M��箦]�V��[c
+����0s��D��JiC�w^����$���a�)
�����
 ��݅�o����k?�����f��%�����]��kƸ�-T�u����;��
�k{�cc�k��u��u5�/�箈��A���a�N���T�>j��I�Z��Ѹ�ID2�W#3ɸ5
a�;waî�7r���`^٩���T�4��t����?d	��4�;�vGK	�|i)Ɲ������ˇ��3��\�9ᄮ��!�c?��cwfCש�a#�9G=�F���!0�p�3������F��~�.��<�;�{i�Y��I�{�B�)�~��m+ׯ�����ޒ�
���_�rB�Px�#�Qq�ЅP�4�q�O�]��UsV5=2�bY-��4q��%��ހ�:��MϹ�I��v�(}�ݪ�/�
�>���5���K77�XbO��j_I��f�=VŧA���4=�.�B0���O�fs"�h��R}�=/߭A�JN��[���~ﮏS��2o�(1(k�v��kC�asd�
�g�1�8C�4��N��]�l_+j�Zt��N�����a��k�#}-$�=i0
��e�˗�Q(wm���h���tǦM�H����� ��� h6�Λ o
�ZA�H-U����ܖ�c����(���`м��y'�w�U��� \]�
+endstream
+endobj
+1114 0 obj <<
+/Type /Page
+/Contents 1115 0 R
+/Resources 1113 0 R
+/MediaBox [0 0 612 792]
+/Parent 1097 0 R
+>> endobj
+1116 0 obj <<
+/D [1114 0 R /XYZ 86.4 726.045 null]
+>> endobj
+142 0 obj <<
+/D [1114 0 R /XYZ 86.4 478.76 null]
+>> endobj
+146 0 obj <<
+/D [1114 0 R /XYZ 86.4 368.995 null]
+>> endobj
+1117 0 obj <<
+/D [1114 0 R /XYZ 86.4 313.914 null]
+>> endobj
+150 0 obj <<
+/D [1114 0 R /XYZ 86.4 110.852 null]
+>> endobj
+1113 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F11 628 0 R /F16 397 0 R /F14 627 0 R /F38 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1122 0 obj <<
+/Length 2793      
+/Filter /FlateDecode
+>>
+stream
+xڵZY�۸~�_�G����>�ڪ8��'�TbO��>�g�ZITH�G~}���cF�%h4�����	��r�燛�
+=q�i�'�����l�|�J�ogŠ�ʴ����v��

����f^e����qǹ�*u������7��a�����"V��|}��7:Y���	%���?o=���V�7�����>
J�T�
�
��z��D[K�5�(�lN�֑����m)9b��v�0���������K�Y����f(f����D��!���E@�ڶ}ek����
?��R&7���^�;�fDpo����6]���3���s�-¯_���zR�1��٦
+�Ңȋ�����8㙳�
;� L��C]	���s�y�H_�`����2)¯W�|�[�`l2S�X�&3ƈS��0�����C��S�F�t��z�.G�
Q�`
�P��<)}{�T	��=e��͸�D���R"��Ǯ؂��i^��œ�3���>,3�
+B� q˦���z��A1��_>O�2-�X���%,�r
��b�m�›5,H�Қv��q�޲vL�Em��g�2_�y
�Hp�zR�RL�*/w�fkd�L�J�=�LHK�^0��0�xڭ�
�
t�
����@
+��)��%f��!�P2����	@�v��f�U-� ����A���

3^��$��rG���q�I�i�����a9��<�4��Tȟ�\�����1���1Zz&R9.f8$EەC
C�-���{'����2���.ä�I����:�E�x�r˧����F���30\���\�DiM��y�Ƙ΁���>�
9�dP����%ƺ����@�a���sW�#�d�X���^��X$�xB�ilj�����HRC8���d0_�Khn�m"�6)�<��	$�E#��f\�.\/_C
�!��Zw_'	�5�ۏ�
�A���	�ާծ�^��V�i��
�t�f�S�~��ԏ�j
�i��z�2�9k��j��$��'cJ�Jd7���UZ�_��[�C=��5�R�tWπQƴ=�k=ݤOx��9d�o!����#F�M8D���
�� /�(n/�*v̧�#T��RNJ[@"�_C(B�]������w����4M4�5kX����*�����w��U����P
�<-N�	�l0f�A\�>���:/��䳙�zZMd�JL��r-<�4�[=	q����TJ �M)��%qNB����2쨝J(E[���Rf�.!�q� o
?
����F� ?�ۀ
�	j'Y%��l�,Cd	�z����a],g1��%/��
+��I�/X�
�i	&�
? 
&�U�~�*O�	������
�M��"�R�&`	��Sx�u�k���i� ��䛙Wi�f�� ����<2����*
�=�\ĩq�'��oc
Q���r��
q>�A���h��%eYF�V�����}��F,�HϪ��X
8'
�
�8����[F�5��H�c�Yp�W���
2JGӮT U� �"�Dz%��>���6<�o��u|]���<��,�`�x�\� M���yp֩sp���j)�t���4"�|�F�a�ػ/���+�K���3� ���Q�Q�K�M/����s�^�r�O9(�~ ���
��4�
�x�KXC�q߱��L��:�n:ґڷ�В9j�{=�^���׫l��� B���1qQ⃲Kj�II.��aR�v߿��K)g���(I�YMvAC�["��jC�d[Ej@��:m�
�*-ݝ�h�3�?���"A�tU�s���3�('�?�u2�kv�u"(@-ί�:AR���Z'����	f��i�������!�['
+
X_�Xl�8Z'Nl�8��]���JC�
+"��zь�h�;�Z��NP2u�$�c�w�7v�wr�
��=�
4O�!���<9U�A���h�D���wO��l
�1���!.���%��S�+ ����,
+Y�Ϋ�UK�Ma�KV-ïE�)#���z�s
+�y
�1A����-}�
�V�&���W��*��"L
���s�iR�y)�˻������X���P�C=A���n��'����Ic����6��[�M� 8�Fu���d�J�T�:�P��h����S����xq��[4.Q�*�.�U~���T{�J�q��۫F��D"��}j8��[c�x* B

]o	�O�DR#�5m5�J/x���.ڨ��p�O��q��)%��
 �Ku��l�@+O=���AOH��k�#U�0��.����QG,5<Z�X1u��G 3�H�X�Xϫ2�XD�V���
Q9��jw�
)��aCJK�҇�x�ŏ�`
+�@"�{�v7���"@,�5��@�HJ2��Sj���1�ј^�-7ؠb�5.�+��:�II="�j�eG,́SJu
N$e�s�OCe��
�
�"^
+���z���>b��
k2y�Z�Sq����u7��N�hw>G� d3M&�
i`�(�W>݋�d��_���j�/dՠ0��ߒk�B��c M�%�!��Z��x����Z��:`m����~]����nSBՓ.�Ϫ�����N<���+2��
��<��ɆF�$6��};�_'�]�r�ˋC�4��M�݋��*p�1��{vh$U�}}=&+��U�;�w��(P�X�� �i�̊��G�	?D�P�@r�B�nz�0��x=�A�ϝ��V�C�H	��9�
�5�h���> �շ�ؼ0�~Ԇ�>�Kw�W�A�e�
�
O�
�4/@PJ6

(
�%$��E��S�"܇�ݭջ�#ս
��ޅh�#�
�r���
��gd4փX�� � 
+endstream
+endobj
+1121 0 obj <<
+/Type /Page
+/Contents 1122 0 R
+/Resources 1120 0 R
+/MediaBox [0 0 612 792]
+/Parent 1097 0 R
+/Annots [ 1118 0 R 1119 0 R ]
+>> endobj
+1118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.965 214.143 164.939 226.098]
+/Subtype /Link
+/A << /S /GoTo /D (Item.22) >>
+>> endobj
+1119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.041 214.143 196.764 226.098]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1123 0 obj <<
+/D [1121 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1124 0 obj <<
+/D [1121 0 R /XYZ 86.4 701.138 null]
+>> endobj
+154 0 obj <<
+/D [1121 0 R /XYZ 86.4 494.895 null]
+>> endobj
+1125 0 obj <<
+/D [1121 0 R /XYZ 86.4 414.89 null]
+>> endobj
+158 0 obj <<
+/D [1121 0 R /XYZ 86.4 261.922 null]
+>> endobj
+1126 0 obj <<
+/D [1121 0 R /XYZ 86.4 201.4 null]
+>> endobj
+1120 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F38 453 0 R /F14 627 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1132 0 obj <<
+/Length 4172      
+/Filter /FlateDecode
+>>
+stream
+xڵ[[w㶵~�_��#w��A�+k5mf��4uN�/i
h�
3#�
+I�g��Ϸ�&A�'v_,���}���6[�_������ͫ��J�Ȓ����[�&Q
+��H���,~^js�Z[���-��W+���߾���舘�wu�;������:�ʺj�~�y���ͫ�^q,��_@'�2����Ͽ��o�-X"�t����Jf�@k����?^�@0���	�\��.L�n�����#��{�Yq��,
�����N'W:���76���=�.벺�OW4-ugˮ��wŮn>�v���n4�Rl|��>�x�
f-��m��w�]�����*���]
�feO��)���	�fa�M���X..Ӂ�,V�$\+7�4�s�*�
6�H��`���z�/״�{��u^�
�*M�p<ɴ��o�nWR��u�B��J���4K���d~[Tm�._��Nɲ<�|<�����p�M�
}-���wd��;*t>\�A|o���E2��I���`O�q��?���T~
��8
��g?�4c�o0F��ݡZ��Г�����3�/ϋ�8)��ض��m�d֏o���v�Wm�f,�`��
�����hۻ�6����ܿ��j����}���e�ŲD(;?�/���=a���A�'ܼ���=�46u�ӊd�Y�2CNx�\n��-8Qߖy�&��ӎ���v�i[��s�d:Q��)�{�ɼu�
=��)��i&[��]S~����O��,�{?_��b��'li���@��O�.�,S\9k�~�"��KOS9�n����
4�O��$��i�S�a��9tb�t�ʻ�)eIfӋ��a��jeR����~�SB���C�-v��
+mx]�$N�u;*1l�e��\%H��+a�%�K�F͟��#m��Lˮs(IL�M"�~d���e�k����Q���<�� �
��
��xr��m��>z5�=�z���D��#��N�[N2�v��+
���7Z���#���m)���{/l36è�b����LNM��
C�̭��x���_�y�cD =���o�|s
+
����ЖP 0�9%�	7�At˾����Ow.d�

̫M����
��^
2)^�z�#�S�W���y���l
��?�3���"����1�S��
cMم�ޞ3 Z��Kq�8҃"���%^�i�
�?x�N�?/��+��Z�3G�F
�jS4����M�o���'�It�A�	�q�mbF�rV4�� �3Л�L�}�|C�3i���I�'�:�6n*�N��һ�W+-�
��:?��R=;
۟���Q`܌f���^�&�r�����V���/��y8:%y*��)�΢
q6"a�^4�܊S0�d
+~c F�c�&�.Y�@���#��X�c�� 츚��Td�;� q��r9
Ї���9�L�Cp~;�E�"3d�›���;�d��C̹k��~�$Z���߈�%��spTpr�esx��B��|�
�U݅��g�_DA�:��u
Mh*��tCF��#��4 at 8�h ��]��_��6�h#GBZ��A�v{ïԉ7�l�(5
l;
i���9T��� �w���ud�8sB0S���Blt��16(��E5j@c[X��
)
g0��!tR�]Ѕ�F����:D���dغ'a���,�C���H|
�rD�܉P�?&`�|�����k����Y�#�
�T����߭��/�q�xv�Պ����~

^�z��NA!�ʦ� M�\/��Ba*x����J*�F�gl��\
Ldv�2��g�W2	�2n&e�����=�F!	f�.IQ�E�>���Ǭ��u`G�
+�Ƙ���O�isĬ3�TG��g1��sfaݶ�]���~�\��b������H�/82���sdJ�
Y1.zX�� �
E����{f��LN^2}��cG�Ӻ������b���.��	��2�θn6e咇�7M��=�N��� ���7����a�,{�m֗�B�»�0g����6�Co���m3�|:��6[:��q�
1
Xzj:4�Я�*��9������(^y4���0�<U�s:c�8Mô3�6{e�"*Q�M�35j�'���Ng���'����愘ST�
���y���=�
��o�Jz�J���[�Bdp����
a%� F�+� W;�M �~w.[D������<�U����96��(4�
<	8��3y�td:�A3u)� +���P9<�
+��R~f/�u٘P:����n
w*�l7g�=,���Mi/������:��mR�,s�}���v�邜ַ��\�>�ƿ�)ꇶ�j�!��xo#e��m������
�tG����}
��
ُY�.�QV��ԇ™�h��#��9RϘ
Dw`KD�%O؈	Ρ:�� E��B��� xN�E�PPR�h>���>5ꕴ���SQ6f�=n��l�
�G.=p �H�s),��� #��.�h�������M'j�@��<���d��Tl����X�
����_�~���DJ
�t���E6^/�wm�(
Y�[�]��nV �e�
��Cݍ��zN.��c@�Ǡ�|�i�[~��
�f�:F�`�@�7bC�O��[?�[ �
yА8��ւ��e�QCQv�[.�����}�}��
6��$-f	}>\�{��tАX�a�X
*���d�զ&~R
Ȁ5���/��.wĻ+�+�cj�Kc�d�׳�I��mM0����H
�F囱#�H��1�qSF�"O��i��U<
.¼��M%B�v�w���R�Ϊ9r��x���E
To��8D�/�ɠ��Y��9`�f��J�
�㩱Es�
C����5��&1#����O$�E�Od�����q��[2��j�Ԁj�&�.gT
��
4��@;�>�azb��A��������F����Je]��Yq��H7��T��䇟������S~)��O��`�����騣/�5 �e�mc�
�c|�=a	j����h��D2��'��������XH��ǡ�����W��rW7��.��^k at T���K9I ��62�M��i]�>��K)BX_
+@���2U
�8𼜦���ڛ�ʯ]V3����m�wyl��Z ݈4�h @���|M���Q�^��~�7E��e_[U{ };�~���p�A�K	�d}�]��5f���v80It[b�b7���7e�wEwO���w��3Z�0�E��g�'
��8�l�M�/y�Ʀ��[^gah]�۲*�ƿ��	1
+2�Tғ@�5E�M�ڸ�����d�xr
檯�C�\n��ʱF��/枍�;Z����@�|2����V�벣��^.4y���d��Ǯ؟�T����kR�1����/�҃���1��S�c0�zT�����=IDM���
�Cl9���ɝ1>x� �
z��9�&����t�l��_���3չB��ˋ��4\�z?�^gقj ��ZS�$ɘ�."�,b���X����q:�Q~���
6I-:fe��q9���
��?��I���x~a�� }㦸}�k����)$��?w�q
���W��~_4�:�`W����m�@���#�9ao���bk�	͙�0�n*��Y�[�p�
+���K�P�.�qw�����2d���>!��.7���x,��j�m�䳈��Z�Ҙj�z�QH+#��G(Y at 7���g�Sr��n*#�S~R���������$���"%�g������P�ҡ�/
���&��Iɷ0L�*rp
}�c��z�?tE{�v�
0v�;�D� `I�X@�_��U�J[��O_p}�!oxZO��`
�cwRX����P
+����7��F���]�~�?}��n+�-�sT�~
;������pk����=ś�/��)�}�bB��U
L�y8��|{���z(7.I���I%�
�j}�1�/���w�~}h�(�
	�r��(|��җ���t�>e�rD���1~���[�^���1�|�̶�K��_�%�,K���w3�>t�C3���я����u�d��/Y<xg=�B�*�=��П�
X�J���?�ҵC4Qe��e)�s.M��ڹ��@�I��C }"	3�) �p`�*
������4���Ph����4��"�� c�X�*��m�
-��K�su
`�
K��`$ȡB��|)N�g
e��
֨n���~���G�i�������`-��ʢ�	;�6���'��&Q���?9��
+endstream
+endobj
+1131 0 obj <<
+/Type /Page
+/Contents 1132 0 R
+/Resources 1130 0 R
+/MediaBox [0 0 612 792]
+/Parent 1097 0 R
+/Annots [ 1127 0 R 1128 0 R 1129 0 R ]
+>> endobj
+1127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [162.78 407.997 185.252 418.845]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.3) >>
+>> endobj
+1128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.965 254.355 164.939 266.31]
+/Subtype /Link
+/A << /S /GoTo /D (Item.22) >>
+>> endobj
+1129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.041 254.355 196.764 266.31]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1133 0 obj <<
+/D [1131 0 R /XYZ 86.4 726.045 null]
+>> endobj
+162 0 obj <<
+/D [1131 0 R /XYZ 86.4 300.197 null]
+>> endobj
+1134 0 obj <<
+/D [1131 0 R /XYZ 86.4 241.531 null]
+>> endobj
+1130 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F14 627 0 R /F10 700 0 R /F38 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1140 0 obj <<
+/Length 4613      
+/Filter /FlateDecode
+>>
+stream
+xڭ\[��6�~���۲�,W�T�ƙ�[�8�n�ޗ�<����$vH�
ϯ�� �U����K
A� 8��

4[�.��_|���2[��e"[\�,l���.�$_\��%*ͮ����CS���p�)�5U���[��j�\-��$�\���͋�_��c��m�:�*[��/~�7[���͂���Ńo�](�R��f�����`�D6$U��\��.2�Sn�@�~{�=	���g�4]C1j���a�J�X��u��:��c�6���~�E�P�K�Ux�-�U�%��ͦ�W��/�n�:|��Jg��?n�&��nb_���0PANf-�J��-i��[)�2�-2����sK.S.m���K�T�r�|WƸ0���=&�I6�X2���pW�h&waV�|G,0+�*�<uZ���l�R�����B��8���h�r�
�ϟ�}���o����1UY�2۵͛����ƽ�s�c��+���x��zbT�7
�
�|�O����WE:�
�L��q��e�Ū��~-��z���k�š��R3��B��tEOY�	���B�f�'8�I(1X�6͙5�"圷͛��Y���^�Y�)#�a�*���	�~i𛇟]�[�����<Ε�ĤL��W���~(����x*E��Q\�U{H�d�0��+Ut8�N�T�	֡�X滱�
+O[��C�-7��*����qOh����ϙ=��L�����񪻔i۾�[��
w� x�W�֟��q�K	PN����ܓ�I'"yRl�m�Wj<!�&�Z�Q�&>���̝�#���n��l��Z��6��>tjذ
l�=�|�J��v&��ҫ%tc��n�%L<Y��Kc�ҰdWMă�G�@Q�d>A�����1�G3Q�iq�
+v�Yl�u�>���䳬�ڌ?��2����h�}Pha~2iWC�C�bEMV�I,�`ܢ
����
-ZaK�B�B�e�ڳ�IN��p�
j������9;p7휾��cC( ���66�`/�ä�w�F���?/6�P����
���'
L�1�H��BFԘ�����r�	,�S
�d���_,�|l���]d
+VaM��&؇qXBs�AZ�ٓ�
Ytj�#?�-��E�xl�
~�"_�����f���.�E(F[�:[�k'��>������?���Pn��Y��b\�B_uqS��C)��2�������n]ԛ/�!Q��Z�.�f	����*���Q^U��0��Y����4
��Lg:Ǥ0�=¤�
+�5
�|
��V3�|WZ�a���8i��2���
��� ��Gؔ�W������-�X�X(�n���pN3�@�m����i�/�0p�2p�$�I�9�e���
p��Z?2���'����œ1q���V�!�857u�
%,�3���a�4����h�onZcD�7�م�f
!��u_n�D8 �˵9�ޏ
�FV$�0[���/�}��2X�&4�nW�CE
��9�#�ݓhi��zG�s�
��e�ۖ 8���o;V�[����Ck
+^y�1�v�l����:{1�P��VL Ҍk�ɵ�F����=�m�=*���"��H0���w3#�T莕F��N�Ua�v:g��93��;l�
�V�F���{F!�<�ִ�jW�Ǐ^�͉���
]�[x:ż��9ڌ#��c��z��	^�
�l�.aG��
+�� �	K�*�7K3k��b��9[P܂<hk��M�L��[{�e�A�U��z �i���}9�<�"�pqa�<�c��|m��T�+
.�
3�z
+�Ϭ�]~¨l�<�vK��kqz)��ۇ��"��6�s۠R���H��߲)LAM+
T޷�Z��Л�
vW5E��
[�4;s�
J�`��T�f-lx������ ����u��N�⪽ڴFU�>�:�y��ϴ�<Zh�9��E�I���$�/
��)c��W!t�4z�e�C�Cn=}4z�!y$?��kd�j�<<YÄ��m��7�b�t�i�z��L���|�}��n�`1����a�1�#p����H	�y�3��\�ɉ�ҡ��*h;��i��N��A�z]G\��
���[�o�_{�D��.
+�f
ex���b�
��F0�rO�pHG�t��u<7s.�!��[,�Ԓ�����M1�.�60�3
k�丯b,|�js����?����6j�X}2f����N��Ah���9�����	>�Sg\v�u˰�S� kƃ��r�o�6

^b��g���ۧ ��q����!�{�;�0(y�����v8���'/�O��LDV�U�+uq�n}�39��d
+���O }���#�GDtqZ"�}ᅇ׾��}�a
�l�b��ʼ�Cf���(���x�
BX��k}#�0߅�8\�9{2l �
�
�巭���i�`�t�
*�@��;��YRƍ�?�B�Ҟ�+
��H~�A
��{4�Y�"�R^d�B�2Gc�N��4�bg�E�%|�
���fBF���Q,2�4�<e@C�X܉�
#:��TE�<�MSE��1�~�
�b�%
λ�s��BU��]8�Fu�G�A��n]�	���u�`u-�����*
~����.��O�
���HHw��gQ
�[�R�xPM��:
T��B!m���.J,c��|<ɀ;r	��N��#j��~�f��N��ׯ���"X	a�%BJ���'ʜ8z�i�:d
+�����w�=�
�HOR�}>v)7@􆓱���A���et=��w�V}�ǩ ¯ɋ$N�%��&�b�|I
#�r�K� ��@SPH�]<3be�#�~}�W��ª����]8*�Sf�i�8]�f~��1P�-� ]��ij

d-��g��Y�O>�# ��#���y���y�s�ON�ٙ�Ƞ��X��'O�W���ȣ��y
��Sn;
~X�ؑ$� �]bb���~���D�D�&�	�*w��|źص]�MA� ���)Zd�At'�+
��#�x:�/�� `A��t�:��&4������0
*��x������k�2��	��ig�	P�'B,�샨gN���þ��B]��b�=1!�E�'s8u�
;��
x��
�<�3tX��ڜ��p�|�PN�	L�%('�D��R��ԁv�f��<n����s�.2
�(���cjFv�"˦�J3㞰�K	avzr.���uL!=�x:$$)�� �*�W�Ϙ-Gs�o�$=�sM���6��$�%1qޔ���Ɵn [...]
+)1�\{^V��'^RYPn�F���d�i�^����E).��I0h���������:��]��^��g�^t�eQ|��>���e�����8��'X�Q�Z�;���?�1
?[��
1����%B���iS�'{�f�q3C���
�-����@�W��Ǎk�m+(A��QB��{ jG���
+?b
k�� �����~�>
&�L0�X\ LF]
y��_>���ׯg���cظ^��2B�����>Lئ�C������Q"�q�9II���`�I�f�c�f|���4]H��Y�X����/4����5E���/�妪�e����u)Y����G�f���/u&Aer�7�3R��:}�Sy���:<
y �ix%f�2�����>�T�Q������y�|J�Iџ~XҒ�"�"��P����o�{�ә�S�y�
��ڄ~��o3Lw�GVH
бs�Bg�W�}(K�"����^�bt;�Ђ���I�� �a`����y�8Y����o(�3�C�Z�����:g�=���E(t*(�"��Pn�2�͢�R76uS�~�I#�Q1�8
e0s<�U���y
��tG:ye=0 ������K
+��x1g�8dR�ϼ?@�~��z�B��l3�@�f��6�x-�Y����?���F
Z��k.Rvѯ1���
�c�O��r$(�EqRv0�W�c���\��0������ �O	;�ᆾ�4�=_�p��O
W�K7s!��$9v��̑S�����9��ky�QdtZ��>eҬ���
~bw�rv�ӈ&�#
}~-�5������5]ƴ�k�\:��x��C؋����Y�A9�ޜ����4���ߎօ8���\��"��9�����"r<�x�w�'psdX�*�.B���47�h&
K��cE�>D�|��4�sU�cJϼK��Nu.v�Y1�&���G����[F4��VP��E������z�E��;�0��R�$?O����O\W�YHΧ{��}��s��/�
]:�m���w"�{��^U��þh&栳�<s[����콴K�T�ۂ2^�UI{
-Ɓl�_+�G�y�U����j
+���n��^8/�K�:�u�}�7�Z��w���ː��0�bzN�.à�^|��.Gd�y 􁣹˦�b�:3^�I���]���E�]��x��:���9�J�o
N��r�8e��G����{6�K�,ռ����V��%
���A�-
��fF.��<@k�?�^’
+endstream
+endobj
+1139 0 obj <<
+/Type /Page
+/Contents 1140 0 R
+/Resources 1138 0 R
+/MediaBox [0 0 612 792]
+/Parent 1143 0 R
+/Annots [ 1135 0 R 1136 0 R 1137 0 R ]
+>> endobj
+1135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.314 343.482 257.785 354.33]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1.4) >>
+>> endobj
+1136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.947 184.428 154.921 196.383]
+/Subtype /Link
+/A << /S /GoTo /D (Item.22) >>
+>> endobj
+1137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.023 184.428 186.746 196.383]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1141 0 obj <<
+/D [1139 0 R /XYZ 86.4 726.045 null]
+>> endobj
+166 0 obj <<
+/D [1139 0 R /XYZ 86.4 231.554 null]
+>> endobj
+1142 0 obj <<
+/D [1139 0 R /XYZ 86.4 169.552 null]
+>> endobj
+1138 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F10 700 0 R /F14 627 0 R /F38 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1149 0 obj <<
+/Length 4045      
+/Filter /FlateDecode
+>>
+stream
+x��Z˛۶���Э�|C���)m�~qS���94�+q�l%Q&��ݿ����/	����	/������"]���ﯟ}�Be�<�3�-�o.K���<ɔX\o�.��ZIc�]�m����J9���������nx����ᰭ�EW�����/������g�
�o`���z�����
f^.�D�n����-����v���ߞ��t��vą�	�.�\$�f���-�sD�V��ʚKX�D(7`���D
5�uSt�ߵ����op�<����UKTs˂���Ķ˺�_�+��j�����h��W+��e���ٶ؅V��*�"�H;�=`'�N]���kI
��L�H'�щ�{�E�
D8m[n���ȹVR�,��~�	����[������erros�B�p�6P�ƿ���
���?�0�
l�M���(���y~p����.6ϙ!0�+wu���v[��x{�N㷉�L�Uq�-[��o,��7����:I��Q{��=��׀o��+:K��
��9o�K������H6\݇w՚N�O�.���ܮE
�"\�M8�J)E`ízu�"40i"��Զ}�l˗����
�
�+;\g��r.�)��a��ъ;��^����+���<�
�u9gMb�<I3�s�D[��.�c�g�r�8��]�4]~Ohd���~M��{���G�o���
"���?h�����j��N���h�e{\�˶�=nz
��������M͋���iA�k�e�[�!�U{F�
2�
"e`�WuW���S�uD;%�����H����p��o�bϽ������mǽm]��Y����w��$y�b����J,��X
w
+����vM�1*��|����妯���A	����p ́��jW�G�	��jv~���!��%�Ծ�
7���Ԥ(*qP�B;�a�Na�p�n��>Q�<9n9#cf�Ld���-�k�o��ط�X�+%r�1��i�J��6e���@,ˏU�yA/���h��H��!��� ���:<Իwa������;f��)����h�ĢG0�?���ܺb�g�[W�+ze,��ՕD͠��㰲�ǘ\dP��"�;7hO
�zWoT>.3,e���T`T�qڰ8L�x��m�}�2	4���Ѭ� ���Ӳ�}H�oF
�!�*��=)'Ģa�,ق|74�+��cj
�16��֘o�
��Gn��|��oʏaA�0�R��e�)7`r���5���J��b�����S:Q:�|yZOL����_������.�+�2	��8�>��)�t��S�
c�*�� J����d��4��j�K►�X�R��)V
+V�����m����Q*O����@�W��~
:��h {`�����Qlq�a|�*�M��lHa��&��
���lU0w���ٛ�5-k	=�|&1r@�c��d�6w��}}f�'Z��K�I�.�@
+�s�G�Yx�h���]�",��/1�`�eG�"l�rkSAX��)�k��]�?��Dv`͙>߲�E�Iq 5Ȑm �L��h��iK���Qv�L �.Y�6U�ң���y���(�<���7���8���c� IU�|�h�(L���qD4���ZXh���tv��{���
+
+q\T�������*��؆����
+�~ˋX��t\}�WZ1������fy}� "y���
+�ugb�U���n�'z�^��qU��Im��<�cl@^l6�>���2����r
AY
?��Չ�{�_�
<0�{P*u����CԁV�C�F˔��t'�n&�1���~
���w.1S<��D`�o0�Eg�����Q��S�4��'ſL�X)=(e�c�Щ���,:�
V�V�(?	jѓ���W�C������S��q��ń�k�w�Qx�����
+�8�u�2^
Ϩ��緯~��ŋsA���@�MI�t�(j咾��}����m$�*r�"p��L7���W@awJ
�O��M�E�>��$gQ�o_ >s���[ꌼЁW��i�x�PZz�w
P
���*fu��>�:x&�=䝿3�H����G�-
$��� �i��ͧ�W��<QA� ��d[�ˢ��޲<n[�lf��"ٲ=��"�.���yJ��Pn�w(.vj�Jxi�4�cea��\w{5�>�..sSs��-���r�$x���hZ;5|�DMF
+
�6H�>$��"(G��0O�`ە��=��|iς=�
��̎�i"��	f$:�f$��s6|B4"�5Z�-�Ρ�@���}�MA郈
OR��e��U���ט�ܔ
��[>�pz<T�/������ڰBP�X�|p�E��cW�w	����.
��﹍D��H����+�p����`�g�m��>����}4���&�A��)�'��L���*�
W��My[
���CU�X�41����H�
�̞�4�HřU��jF�䁤
��tI'PP��8k� ��
�����u���^qybq�J��J�?�O!S���˱8%��˚�����;ͧ��Hrt��׫�G}(�"��Y�CW+#I�u� ��M�:$Nh6��!+Q@<��*�Ӭr(�O�5
��������W@���xy��߉e�={'�H��T��R�:��HtS�۲��E������#�k �����!v
t�<(�u�aԾy���IO�0Ul"m�$��փJ�
�=b��.�Q�B��1�����G�=K��,%�#Et��ԟ�A�џ(	�ޠ�BH+��9����'���I�O3#}����.�5Tp�)t�q^�$�h�7$g���'�6��(��?7�]�'Ѽ1~2�h���4�;�f�)`x�l���W}
n�U}oB�Z�G|.�1f����؁mN��C�O�z���KD��G�L�	�cӌf�,��xޞ|�)9�V�7���
����QA)2<]�]	#�f�I�nm�e2�8}����+��֖2a� [...]
+�ݿI|�|��}���>�w�D�ԘG����quf�T��DZl4ڂ�!D��� �٠�s����9�(m
2��ij�p$1Z��c�/0���;�I�pR_E��m9�
+� �C��@u��uq.����g�'�/*Ox���>C��lrfe��T>.��OE��n,���"*[����p�\��z/�]Y)��	�R[��@���
���o�MH�G��r ���
Ɠ�
+ 
�V��Ce���cBZ$:���f�iL��N`d]���1�
9{j
:}j��gѧ���c��"&P�Pa�	}V�hCX�:Mٛ2��%} u,$Қ��.�ojz�a�)>��G� �ϳ��'�%Ɨ�6+�w����R:������+�X��pՋ�z�y*�S��@��/=�
�	.���M[�?�ӒRo��!���b�
��b*T�e}s*���9^q��G*��,BN�#O��1�am(�
S_
+�]�ލ�U�6%Ջ~��z�]�
L.�F):�R��?,E�
+D�KѣD��������SE+V��X�ˆ L�?Zt���(��i�궎�����E�_0�����Y�����4}볷�Rq�/5�� ����<�?_l
� �r�N
�u��6��
�#�3���L��-��/��N()�^-E�M_
+� ���N���u
y����?-��LU�
��s6[�@q�%}F�=��;)�x��
�}\ɡ
�����){n8�A��G\w�	v
O@�{3�:|v4D?�d���B���$���{����
+��	��,t���6K���ƸiP�yԸ�x�Q��$��F�nK�ܨ㌎�s1h\`Y��8<�̤u_���$��y�fn:��GSe����>�j��Z�Z��
tо�㼲���������}5q]�Y�E�8a?#z`�<����I4���_�
W�
+endstream
+endobj
+1148 0 obj <<
+/Type /Page
+/Contents 1149 0 R
+/Resources 1147 0 R
+/MediaBox [0 0 612 792]
+/Parent 1143 0 R
+/Annots [ 1144 0 R 1145 0 R 1146 0 R ]
+>> endobj
+1144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [468.606 522.718 483.328 533.566]
+/Subtype /Link
+/A << /S /GoTo /D (section.8.2) >>
+>> endobj
+1145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [106.344 385.475 113.318 397.43]
+/Subtype /Link
+/A << /S /GoTo /D (Item.22) >>
+>> endobj
+1146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [130.127 385.475 144.85 397.43]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1150 0 obj <<
+/D [1148 0 R /XYZ 86.4 726.045 null]
+>> endobj
+170 0 obj <<
+/D [1148 0 R /XYZ 86.4 431.04 null]
+>> endobj
+1151 0 obj <<
+/D [1148 0 R /XYZ 86.4 349.572 null]
+>> endobj
+1147 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F14 627 0 R /F38 453 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1154 0 obj <<
+/Length 3232      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs���W�-#�o�I�*gS���ulٗ��
%1�!g��,��t�A_3��I9A������|q��\�����;e1������Ed�^83���j�����^�T��?Ti����~����˛&_�Y�W�+K�&������߯.�\X�/D;�a��������|��/��8Z<�q��V1���.����$�>�јR
&�%J?uZ��۟�Wʺh���j��C/�d��ąΑ�+/Ųh�,O�=��5�{��_�h��o���e}��a�<���:-�d�d�}��˘3�
��w���!_J��G�V�~Q�g�-����
�Pi	d�eL����
���&Z���gӗ����h�mT0�
�ۗ�%���.	
*���	"�0?)��,��ټh#/j�p�P��o�\��������ٶ����P?��w�TBHf�D
�R�:)��@FǥC.�'�{����
IIX˸AJ�V��/m�r�����.ت
z&k�wU���&!�f�z��*��C��QV�X'�-��YU��U$���.���]v{���_o�M:���Y�nkz,�����M.�
ϭ
�bO�#��UM�)P�@��ryu	g����u� �i]�w�2��Po���	ՁZ(�
4
y�	H�~�"�9tL����<�6‚q`�� N
ń�:��
�`=�$�B�T��.��MR'S5��Ţ��=*ܲ����L�\,�?�)C���`6���4c�:��!΄�8�y[�3䃵����|Pƥ8�J��������ph�VV[<f�Kg at s�;�e��
װ��3�pD���g
� � ��hP�����%量�f�Zr�#P^a��U{
*ɍ�Sq��w�~��ͧw��D�Q���	�3�����?*�\�l�0�Yi�����9��<Տ��bw3:`�=�IF`~�6�CVJ��?��a֚����f�m��
`
��w�ʙ�O��- ����걪�]h��1�	MX�]
���
|o��H�����a
z`o\5�Kt����o�ڊ����mOS��<�}�	�
v`�43�(���p���{
+�@��^i|�	
ǐ���_�H�t����*^�6C�����빩83�^QN�Xi����Ы<�!��N�8v��Ih�
�y��['M;��n�
+)�_aO����wǠ�%5��iR��
�}�J�:>,�E�������f]��dI>Ùr`�U'���."sJ� K��C��r��
���_
9���`���9���}-S�Sk���e�R�А�<�Ng
��x����I�
t7���q̔�h
�x`%����7�v�w���hȀ����hHp˄�5
�`�xa` ��Ss�h�dtԞF1s��$X��G�1�X�����I����D
��A
�9�Z��7�=��
�‘�`�`�НlRP%����jj�1�jF6x ������GOS�Z�5b�G�����
=�Ȉ
��C !�!�;N�Gc!�r���
�)1E���s�)��%ܔ���d{\R ���CyJ4D�Ν��/��
�gK
+"
nϣP������ ��"�P��pKk�b�9����C�0�j�tᘲ#w}JN <�|�ENBn�r�w{4ٗ̐F1�� �� 7A4e��t������l�:?ء��tf������cxKB�k�����4
	1���W�+��e�-i��مL�0��,Sޜ���}�6�)�^�Ly�����nt��K� m�� ��47A��);�}VD�
+ܤ�q��h�ڗP��D�Y�m�I0L� $��e$�&*��t�
=DS-3HS�7A���%$8d!�`/FL0����XFJ�x�K)�S4�{�{B�j2�

w��ˎ�njԌ9P�"�O2���!�>�JT)P�|��J�*0%�	�>O�"���Po��4�՗Q���a�Z��
��������{����~3�P�u�林F��@�����^|
�憁�e�&�Ww���?(	 __�ġ?�n1;t��#\���'M�PWF�姜��B�/�ЫM}DH�@ȮN
+ɘNH�h��a�
��f���\��m�NC~{bő��O�aĤ��酣W{��껂��ȱo:�u��:>G�
g��� �~�I V|�{QQ�Q�d��d��d<}�'%�ڄ�#���<Բ�k��B���Yf�$%�g7�9
�Z���ƀ
&�����'%0��`���5�U���t�0�I���In�)>,��rZc���Y��bR�g�'/�j!��9'I�ILj3�����]Q>R_�i

�n���>�;!�2K�})
z� �'�PRs�X�U��Q�����Ⱦ.
Վ�����
ƣӼ9�ns
�5�rG쭓`�e4d`���]����1|����`��:
�fXd�.��2�!M�&�9u�r}h*
�!����.g�/���������Q�nggn����0��W����
�gB���0�--�Q~
���p��R~��eR�V���
Y!x�_n�i��M�m�E�t��+�-n��l)�p�����aFLnZמ�
+����0�����w��,xq��
���,���\Y���d��&��1�m!c6��i���
 `����I�E���d��(��^c_������/o�l[Q�'�@�#}U��d�xW���܊Yr�%��:t-�*D�ҩo[x�3��?�=5[v(�
��W�7�����
!���G~�r���Ֆ��xI
Xh_��� �s]@佮���8ƣ�X˥Gt`����
Eށþ��C{��~�
������K/#0+ �T>- ݇�wɶ���%c�R(��u�����d]\g��@2r�){�x\�76n���ΉYT�/MV�U���E�_
iPK̪L��DqI[[
/m�
��
�E4`�
ǯS�P=4�=��,M�"���$�]����M��16��� �å���
�N�L��nH
\,����Xp�E�KP�:*�ъ��U��5��n���K��!� �gԮ�6>e��ڕPXH>G�J(���)��׮^L�X

+�D��v��m��'�+��3jWH��g)5
�{a��
d����d��v%8���,��JG��vuJ���qJ��]=Y4\Ϝ�E�^�]pt"�p&�%����{Q�;��Z:0=f���6$��b8�:z�>Eֻ���d���M��p�h���+7���z�m�;	]Q��K�\�۝����B]�j
+$pp�i�n�Qo]
i��xz��T?�Bȹl� �Є5
+endstream
+endobj
+1153 0 obj <<
+/Type /Page
+/Contents 1154 0 R
+/Resources 1152 0 R
+/MediaBox [0 0 612 792]
+/Parent 1143 0 R
+>> endobj
+1155 0 obj <<
+/D [1153 0 R /XYZ 86.4 726.045 null]
+>> endobj
+174 0 obj <<
+/D [1153 0 R /XYZ 86.4 594.307 null]
+>> endobj
+1156 0 obj <<
+/D [1153 0 R /XYZ 86.4 522.253 null]
+>> endobj
+178 0 obj <<
+/D [1153 0 R /XYZ 86.4 206.291 null]
+>> endobj
+1157 0 obj <<
+/D [1153 0 R /XYZ 86.4 146.193 null]
+>> endobj
+1152 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F38 453 0 R /F16 397 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1161 0 obj <<
+/Length 4069      
+/Filter /FlateDecode
+>>
+stream
+x��ZI����ϯ�-���^$�'��y�#�r�} I�O @a�h��S���X�Y��
�ޫ�k������*Z���oW�_J�JYj�Y]]���*)3�����_�&����x��-��ˍL���_���_����uC����O���e]QW���W�.~���p�a�h���%ʬvNj_�V{hy���L�խ�w\)�2_���ſ/"Gp4&<��mR�xl����W�"YwD���u�e
��9P,�:�t�*���]�|�R���
+�5�eB^������wo�?��h�dL$���1Y�v�]�eY#��_&����pأ�	|IE���!�:b:��--����z�7��9��騯�]V�{�����6��
��
姑�˛��ك�%�{���p���R�y���|�Y���]
��]VT�|M�
+��EvSWYI��2���f��0��uM�P���A��q!<����k&$���H*�R%�\����	��d	�|<4fQHyNz��05���
�%�zp�q�Fspw Se
+�f�ε[`�F���>��<ULD�c�v���A//�}�)�(� ��LY��ܠs���I�
��q��nm�԰Ƃ).�Tܸ��g]���'I#19�$�Ǔ����x]t(yC�]M�v?����r�"� Z��辬��^ش�
��i5��"�T�0�o�$�9����4�i�)k`G�	��m����j
���0��VH��9��u_�Ч/�@��

�?̻w���TŒ	����1ҙ9�'>
{4Um�(����5?�<|
��@�1?��
�e�7��;gà��4�yk�l[�n��ЧCݿ;١K"% ��i`��yR�M��N��׈�����I���3���R�����P�p'��.��%��̉
m�n�,��7�[��ݒLE�B�|�\E�=a~$V�MfO�+l/�q
���K��=ն�l74�5*�=���� ��h���9�ԑ�:�G��H	������"����"�\��`�冯�j�5
[[�}ݵ%4��\F��"���T�-t׃Gi k
+�Ɵz�Jǰ �[�!ñ���
�<_��=PU��M�
l�p=Fp�8�}����,Dn����0i��-s�؂��@ֈ�Xl��N4ɶ/;�d�Vt�
*�h�|����0)С�"�/��.�%�zZh�Be!������Ϣi��E-��צ�1ڲ�U'��� R�^
���M��
���������iL��h���F�oΥÛ\��H��-�рn�`yY�d��!�D��]�xT�o�I�FG
�Y���7�H�{����9D:;?�W(?т�83��u@���JS�����eI�T��u��u�b>�u�mʼ!��۲V�Zd	�/�rvTu���Y8G�}OdjO
�晳��]
֮�B4��q�E�?=hx�:D+��؄=
+�E��7�$I�~�uzu�.�T"���Gb9�a
ْj�aK1Z�8�~����zp���-����ٌ&z���R��/[m|�4�o��3+���€�w#Ϙ�&����K�t^��O2�~)��p0
��/`Hd����C�T<
c���6�R�x�˥-�4����$
�'��� �L4��E=�f��� <��
�a��/:��hM͘?Y�_Z-�0�u
3=�5/�ϫݪ�ξ*�G� ��>�Ӵ�	;�
��
���9����&#.�6�a2N��ͻ�1�	�~Hb�
n0%%��ْs�3�G��4R����
^�7��A���M޺p	p,�[�]&��G�A���b(���1�΢D�F{t��4��ۢ,����d
+�@����pj���j�X�;�w7�c�w+PW���
��A�T
��
���E���
�����˳=�

+�~����lȄ5�]^M��
�7PPt)��ŃE
��sm����
b�{�^��ۮv�Ie�


��?bD���(e�ٟ��W� R?7�[?��C�+�B�WH��$�Jj���]��V)O�Ʀ�?G�y�0p2K�P0�2BA�-T�3�d
���Jp�R�COaP���:Z
�*7�2JQ���h;�)Ԕֵ�O�we�'��r�'h�\���gl�|8���0�� jW�kd%��X_�^�4���T�t8-m�>"�h1�"�������I̴�Վ��Pq.<��=� ����ɷH��T���s{)��(_ޔ�c8ПoHh���7ؐЉE��
�g�1�3v!�s�R�4
+����|� �[�/�������{l���GP
��E#�ُ̡��B:�. at 7�ܥg6�#��]>i�ػ�?^-�5�
+ x]`I�U� ����S����~~����/�����@�>&�j�Qη#R0Z
�+�r��^^@��
�$�L��L��ݝ�
d �8��E��) ��	'���|G֊�swu6�V�`*��Q���B��/�_�RU��0�ﰁ�6�SQ[��z-���
��8C
+�g=
erG	���{?	L�IeŔ.s��S� ��>z�=�k{a ���
��&v$��%��ߌ���-Aݑ���%��P���$#��[BQ4��:Yċ6�z7�,j�SsG����=\�c�
(���
�����z�U?��􊇩�eQ.���V;z+a
7M�u��3��Mv-
ew /�Q"���㺂8�U
)�n�
#���-��8Ƃ
+�] `��|���q@)A��*N����u�Sל� A|���ŗs�>, at 0�vX �OIqؔ�g
i\�1PCp�@
�#�ZBt�=�Hl"
���Z�Ґ~
I)v�K)֡��9R:!RȘ�!n"����Yh
�M�Q�$R.��g#�'����a$m\��`F�\W	@ԉ��?a��:D�,���ʨ����QTzt�ؗnOp���p<�y�IB'��c?��<q[|3�]TL� Y��Y2?��a���/�M��)�4�hY���� *@� [*1�� ���S��=�ǔ�09
rw�:��(5�{�
;�@��q��	����Dr2Ok�5gj��9FZo�Ë&��.��J���������Y
�ϝUR��Q�]��S'K)��0%�I��jHudǺ�i��J�'�)�̓�G� -��?d��D,��p/"���e���	מ����H_�E�_e�z[d���6iW�%u ��Q
f
��u�����Q7�7���NK����{w�����aJ����fJ	_�!�����i"�7�? j���u���N����@�=���O�
�A��[�a�)~�8C<�겯z�]���=[�<C+�:󐪹�p:6Vdz�Jz��c�Ǣ���<�f�@%Һ�J
>���g�� [...]
+v�+���d�TS`��d
+�wM�i�ۇ l	 �+A,�#v]O�����LTqvؾ^�'G�C�nq����CV^o���b�
�gK�T-
+�~����<�G��K�c�8��r\�8���8Ɛ��{L��~�N���� Y�cD@��
eK��T���Ȫ
`�e%|8_�
�TV���G��f�͘��F�h����ܫI��r��d�1�RVwb���o`!���Ja�[��w������A�w�At�GC�?\�
��y~z
��y��!ut,�4�{�Z8<�䘑Ĝ��Y�L%����
z��NY�>;��x-�����
���yx�2V��!�

�B�^�3��
܀
\4zn�7ƧJM�1��r��}�c_�
1��<�+{��g�q�[;��x{��.R�zL
E��?DI� ��Û�hm����W;���dW̼E�|�%�%4�nIG\�}O������Y�!��-)9|�7��v
���vy���₦P�f��m ��Q
���}0ո2
8d�
{�(

�˗����N�M��w�L�
 K4D����f�SL� ��X�)
=K��<�@�q��i�L#X<�0��$�	�tDp��l�
+`!�_�&��v�56�d�ٮC�?�t*r�抏�
+
��L��V�4��8O�=�9�8o��� t�n��3T�
ꠈ6�-t���"�X�
+�յ�D8-"���Zk���ɿ���,=����⿷�B�
+endstream
+endobj
+1160 0 obj <<
+/Type /Page
+/Contents 1161 0 R
+/Resources 1159 0 R
+/MediaBox [0 0 612 792]
+/Parent 1143 0 R
+/Annots [ 1158 0 R ]
+>> endobj
+1158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [335.994 205.715 350.716 216.563]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+1162 0 obj <<
+/D [1160 0 R /XYZ 86.4 726.045 null]
+>> endobj
+182 0 obj <<
+/D [1160 0 R /XYZ 86.4 282.464 null]
+>> endobj
+1159 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F11 628 0 R /F16 397 0 R /F10 700 0 R /F13 706 0 R /F7 701 0 R /F14 627 0 R /F38 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1167 0 obj <<
+/Length 3627      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks���W�-�k&^$�T�ػe�q9����š4��
+�տO7�k8#ɒ�*W.�F�__�nn7����۫����h��$���fc"�6�HX$��j��9P,��J#�/�Gwi��e^R�uZ��e
O"�.�χ�Ho�*-��&��jWtE]�
}u���/�\�����ꛋ��.�}���p�=1�m���Ͽ��
��f2��ͽ
w�(�0�r���?/����roQ��#�[�w�$
ߤY}]�>�A^懼�&�Zz_�SM�}N�Y}��Iv��?����n_T�v�ȴK
�� � 8H���}��-
:ԍ_#�y􀣁Q��-�,�n'����-�7�'<u)Ed�o��J��
�i�[K4����K;
�궣��
�Vi�,�)+�:��i���
�7h���\�y�
�ڶ�%t�fYߤ��l��6j�)��\��(|��
���e�#�X����+��}��O�',V�c>���D�FN�G
�p����I��6pHe�R��SSG������
J
v��(��
��Љ=.;g]�]�g���O���-:z�?&8f�?_nU)��m$#����t�$��0���Ύ��*n���9�	uh�3��q�pgO)_YE&G����ᆳ����3��gX��
+���
��
ӻ;�O�!�BE�I
���,�<m�}h��@c^�7s����fG�y��~#��pe�L<l�_�/�ۥ9�l
���Wց�	��ޭ�J���Y8{b�Y�<:8c.A�G�`bU��$]C
{����9rv�[�
_�wxX��@�M
+uR���@�������xO2d�S�X��٭����8�'2�7X`M�U��X.���G���F�K6�z#S7�+�
+1X*��B
�K�y�a��[k�E`�
=}Ud�W at w�㐴y�G�x"�?^j�yكB�7{�X�u��
	��������e���
6�Q8��
��Dz�q&�ذ6�z���|W(nJ��<@�u^h%p���
�M�v�B
iǣv�h��_�C�_
��m���䷎��å�b���ޢ
$~�D��r.Xt�:
���Z$�� r+jG0�`5�
��>n�y�IN���L�'�C�g��r�B�Si�h�]ڥ�l��ю"pKt�vsi�Z��k��~�۽�
u�+;�`K�L,y�|��*9����jwL���%j�H�ř���2Z
���v �1�&�#�h��
)M4����FJC�����
�4
+����
�OhY�`?k��Umq]�q`
+��j<�XEuK�wi�O���H
�)��!�.���>f?f����#�
�fb�� �2�M!��
+
�9�ţ�
/[!搱�����1��F�(:cd b
�S�G�<�-�8�
�k��c&G�Oxc@�B��4��j+�$��@"4����}C@�X" �D�B��q�y9H�W�	@�|�<?+G�4���v_���U�QcW;�*o��8
K�/l�;����L���M
���9�@'�FKD��)`�`!H�)�6��
�y���Z��,�g�߰�r�h��O������ �lɗ9�\U
����b��"���.��Zj���u����F��ZcWY�q�E�Q���qǼ��]n,�&L^b���2��ٮ��g
Z\�C����b��+��DE`�B�V��2�K*n����S�n?<��ٺ
GTk@�^�.%@C=�
�8
�_R2��Rf
+1����8�}�8S�泏7?o�Z�kF]�L�Gl�bb
8/N�A�Z`
�%G��t0<,�7��b������;
z�٤O0�t�eG<~��.I���]���?F���%g�À��ׄO����������'
+��3"##&��$l�4M��\�������F^�yu���9˵�K`d	^$��:G�<IR�7�c�?Q��,�~P �����D�C�mt�x���mϠ��
#n@;h<�4/
+c���8�|
6�ػ �7fC(�6�'e9,��J��
+7f�������� �u�'kiT�_˗ R� �694 Ң�`����^gґM
A9�~
�	
3�:��
+-��Fs?�(��L�J�4,<F(�����f�p:
�/�`� &�'e`�!���
Ę3A>����L���S
Kj�Zo�W�q� �D�9���o�nXF�!YL�'B(�~��${�d��
�]��S�4��H�nk���J�mUy�#���j�qZnm��
�LN��Ą�J�2 ��N3_N
�]�����#��$��ส|�V� ���F���4C.8,#N"g�{Ǐ$~��	D�0X��7�?�v*��c�Y�t��R#�b�4�����.���Ԋ��90rz��Y��p��x�����Ä�Ǩ�(0����c��^f��sUc��5��ϑ�,q��� ����
���$��X����a��P:i-v.P(\ #�;����ɳ��czm粴�#��ܝ�� � ���#��
~�<
+^?K`���a	�C��_z�}
|����y�,CeA��%/��1
�XR
��"��ɼh��~~"BE �
+D)���rJԓ�
+�虡��UB�	Y at 9�xt!��DŽw��+��O���|0E(	I�œ���<�ɉo5x�$^\�
au"V�%� =�&����Z�o�;���Y��5 �O��G8L��?&V�������D�E�B�)I��@�8U�����+0ɣ�U&�}�����e�D�	x���?�6�=A�����8�	7^Ƭl�kR���?�Ѵ
��͕��������c��ݜ���,�tsJ/)*�cǢF�
+"���
g�^�Uo�We�y����bW��\�Yq�.N��ɳ��+O3���ҡx	�8�Jθyw9B��'v]�=
G(�
+�$Es��4L
�P�m�k�3�R`�C�Hi �%��@�p8Z�a
�JG�ͣy^�
8)��88�e
��N�	v�5IG��5�'S�;]���!�̰�
�V���ūl�0^���#�c6�><}a������s5�ǬAq�o��-���tEHC4a"�,}24&�\C��j! �_?~�=�[����+��"
Lۂ+
+�M��8�n
�}�1і��J' ���
+W
�@̆
+�h��U�i9
��� �O�~{�l����^O���m.e���E�>ɂ
��vN`M�i��۷_~��k�ҫ�EzTW�T>f})8,N5d�����>���ۼ-vx��Wucc��;�S��Σ�#��c|�*�ۺt��ʕ��oJ?��]|(w]ڪ<�
+m�DVb�0F4���F��:W��2(������Ʌk�W�*�\.Rз����Rs���:<Wr.a�Zɹ�u��d
R��9r
1"��$�%�OV��|�?'l�9�ɿRL�ȳ��̇̌vZ�
���L�
d4F�V[,
+ȇ\9&['�O�:�����?R��U"!��S|�	[o�oSzl���(��'\�8v�mz�S�K\~
{f�`����AmА�)��pt6m
:�W�bf�/ؤL.�f�[��Řj(B��	h9��2�H?v�]K/�-}6���U!�ͩn-��וZ��I
���uN�O�
�L7U��T/�Muv�ji��\~��A�P��6�;���tĤ�U;�
+endstream
+endobj
+1166 0 obj <<
+/Type /Page
+/Contents 1167 0 R
+/Resources 1165 0 R
+/MediaBox [0 0 612 792]
+/Parent 1143 0 R
+/Annots [ 1163 0 R 1164 0 R ]
+>> endobj
+1163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.101 109.427 469.823 121.382]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.3) >>
+>> endobj
+1164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [495.176 62.16 509.899 73.008]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.4) >>
+>> endobj
+1168 0 obj <<
+/D [1166 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1169 0 obj <<
+/D [1166 0 R /XYZ 86.4 544.183 null]
+>> endobj
+1170 0 obj <<
+/D [1166 0 R /XYZ 86.4 330.179 null]
+>> endobj
+1165 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F48 539 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1174 0 obj <<
+/Length 2210      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs���W�H�,,� ��afw�5���n�T�{�DJb�"5|�;��i<H���mUrp	�ƇF��ݠq�	pp;{{?��
�A�"Iep��D<P4B���>	>���T���Y��/�f�O�?���7��Ậ\�����~�g���ʢ��~�a����ˌ��8 �i.��n��w
$0�!��E:x��vg��ʃ�ٯ3��!p=�
�4	$�%
r�����H�_�	����=�� G�{V��"k�8����-��$��
Vq����w��ݜѰ͛�LX4�*��4qcia��,v�݌1����
͂�.9s���vw�6ݾ*�y�s{L2 at X�C��؛z6X�`��`����v
>f�֍d�\��M������`VФF�w��pS�����9+�2w�FҘ@T�nZ��/$�
ۿdk�#����H�7>�)>+�m�b�˫�{��% ���
�7�y�)xreE��ޛw鮬����?Ђi���z�5i
�l�ʳ"�=��n���Y~f���� >ĉ�DSn�u
�
*¿�C��ͮ�


fx��3$$
����
y3D���ے�
�)+�h��o
�]�G �_
 
�ЫC/ϡ_����
 >7h^��b%Q
}�FL�K��\m��}0
A������~��rN��#Li�#���S�BD+�u���N;�@��#J��p���N��TpVj@��e���	~
�ĺ�0gUIf�4��
+�bI����C���c��C�!Ff��.c�m�{?V��0	
+�!p%t?�c�8_/�0�1Kl���}�U�{Ü��P��}�ڵɗc����n�̈́��~��B�9���t!���	��4�Kg&��πx��� �
+R�	�
�0����������<테���sp9�*'d�M�$r����9$�}��M�1
а��i�T��!�s��Ǜa��(�T#�_�(W�r�(�=�*�'ei!��($u�e�E[��[�`�\��]�h�O��4���g��p�als�e��p��5v�Unf�5B�L4`6�r��`
$Ab�R<�iʳLJ�&F��"��z	y\7n����`�iM!d�nv�>��
�dl��ZQp�\t�W��x�C[
��¶k�V�ڐ#��R��X�j�JI�zUeKǟ��b�h�����8�@���(K����?e��d�>C�0?+� a�XZ�&��M��]mm�V�-�<q���z�
��I�o
�;�3�d8��N�v�z���#e��٪?�e���v� /ۍ�c�t}
�9�"�İ:�gy}lp�@Rӟ�@ь9E�foI��A 
���< E}T��,a\�_R�89c`�|�4Z�v�:,��h�H�F�&qFa^��pż��
�u�.�K�
{)p|��AP~"1�aAGLb���
�,�A��{i��:<���A��4"��؀��..R�Wrl�S��|�6��( ����'҄3�WY}��ǫ�-��_3��X4DoS�L����n�ŏ񔣘�[��:��	3,�^�~H���>$/3�QZK!�{p��\��!���m��<����SwϾ���o~=�Y�I,��/�o|�Y�
�ɹ2�"����\ZA��9
C���LW�����)he}�VO��P;��6��&b�,
׍��g.;4�
PL�ɮ��&���SH�j��ɽ��h&
��\LASA�W���Hǵ�+�T��N\���gRU{��>W
�/`�H
+��٪
��Ky2��T�
+DA�.��Dn
�H��
V?T  Q����
N
�����]���m`���\��9ċ+7 H�K5��t��Vb���u�&��)�}U%!u��Ɉ���+ݔB��5զ��E�Y��d��!%M�!V]�2��������%q<H#<Jv�4�T$&��ɲ����i�U"�Ѹ��]��|7"&!'&��L,5cӗc�kE�e�Ki4�
[8;4G/��
����;�I0��_7ߌ
+��yƛ']�H�0���u��̈�h����I�gL�rę
���/�U���2K����[+����F����2{��°,���5Z��=]�u��Iw;�3k~F�wA4G�
�C6�o�
��Q
�D�9���“yV4�U���X}���
+��D��S�O�M�=�E���0�C=�d���
�.Ӊd��B�*ƿX�↚�	?m뇒�7LXZ��*]|i�&�^���W�g.�"z�
+�,.�M�
�_��������7mp��O?�
+endstream
+endobj
+1173 0 obj <<
+/Type /Page
+/Contents 1174 0 R
+/Resources 1172 0 R
+/MediaBox [0 0 612 792]
+/Parent 1143 0 R
+/Annots [ 1171 0 R ]
+>> endobj
+1171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.28 189.886 367.254 201.842]
+/Subtype /Link
+/A << /S /GoTo /D (Item.36) >>
+>> endobj
+1175 0 obj <<
+/D [1173 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1176 0 obj <<
+/D [1173 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1177 0 obj <<
+/D [1173 0 R /XYZ 86.4 684.833 null]
+>> endobj
+1178 0 obj <<
+/D [1173 0 R /XYZ 86.4 663.49 null]
+>> endobj
+1179 0 obj <<
+/D [1173 0 R /XYZ 86.4 642.148 null]
+>> endobj
+1180 0 obj <<
+/D [1173 0 R /XYZ 86.4 620.806 null]
+>> endobj
+1181 0 obj <<
+/D [1173 0 R /XYZ 86.4 599.463 null]
+>> endobj
+1182 0 obj <<
+/D [1173 0 R /XYZ 86.4 578.121 null]
+>> endobj
+1183 0 obj <<
+/D [1173 0 R /XYZ 86.4 488.756 null]
+>> endobj
+1184 0 obj <<
+/D [1173 0 R /XYZ 86.4 393.424 null]
+>> endobj
+1185 0 obj <<
+/D [1173 0 R /XYZ 86.4 343.19 null]
+>> endobj
+1186 0 obj <<
+/D [1173 0 R /XYZ 86.4 321.848 null]
+>> endobj
+1187 0 obj <<
+/D [1173 0 R /XYZ 86.4 271.337 null]
+>> endobj
+1188 0 obj <<
+/D [1173 0 R /XYZ 86.4 250.272 null]
+>> endobj
+1189 0 obj <<
+/D [1173 0 R /XYZ 86.4 228.929 null]
+>> endobj
+1190 0 obj <<
+/D [1173 0 R /XYZ 86.4 176.036 null]
+>> endobj
+1172 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1193 0 obj <<
+/Length 3584      
+/Filter /FlateDecode
+>>
+stream
+x��[K��6�ϯ�iKJ,�x�H�۱]�:.�Τ�����83,S�LJ�x�v�Di2��[�� ����	g��p������w����@I*gW7�X|QHFfW��/s
D�%������&����
+��:)W�뢂;:O���r�'�U�v|��U�ʷyUf��jmƯvE�X+2�l���ۋ�W�.,.��v1"�����_~
g+x�vLų{=n=�L�����?.B��p�I
6Ix��3�H@"i��.V����{5��� V^����"����aLԍ)��v�T��rk;�LH�'��g
���f<�K��%r�>_m�̳me~�K
invM�2Wyi���W��א����4[~�U�<+��ּ~���9[rD$�-		��̹����y���z����e���0di�Bb�,�w�l����f�
��~��Lͫ��p.�l��f4����޸���qV�9��>Nq�����[�}G
�3�٨�(\
8
w
g�z���
+��f&k
�DD
Ą�$
Tt�:� ,\g�<�H⢩�)��b
�u�d4"� ����!��@	J�C�SgI����N�lQ ��
�K�$/�:[��JZ��i��hقs1�|A\�K$1��w8ز�:*��s: gI
sj H9� 쥃A��r&��g,����+�G���dW��y��d���OG��J���1`a*
0���� (%�6>Q at g�b���K�u�|jރVxE�
+�ʕ
h6��3��
	@�br��J��r��ک����֘��ڕ�
+��
@��˵Y�kQ�2�dig�:g�����+E(r�8
�_��M�49Xp�h@��,���?�y
��
$�+�� b�J��$��I
�O�
`g<��
�݀]���ߟ�����}8�a(
�t���J�������*M�W�g�4`���Xi�f6?L	hp�v���@ŢP�nve�v�Li�
��-���6��T
�h��=��
ȫ3ϯ��1c�lrfA6�	 �r�9�V�!
F<t�{�N�.��-:R�
�v$:�A9(@υ g}n
��9}�
,�F��:X��oI��$:!� d&X�	
 ��&x�ꛪ^7�d�f	���Y����c��1�U0� lCP���*7o*�Ԁ����.�[K
$�cT��ю�m��H��_A
& �n	�1n���l����?/� f�2��_�"
M�cxr���bq����ɭ�
�r:ܹ�1��(�/�N�>�F�d���&<�U�*1��)�C�
T?"`�1�����\~x�����?$J��WR�GE��
�:Lᇡ|��///'t_@���Nv�V����0>Rt`
�?��C��o0�Ǭ
D��:wL,W�]��w�+�9V�e�ǹ��/`���S	p��O/�'J!�����(E�
ht����ݻ	92��� ���!�:a�K�.b����e1
+���:[{tOa��ڤ�3�����/e
"��޵\Y�k�cXS� �q�'`
Rx��Y�S��;k�'�amH�ճ7�c홑������Q�&],��~2kl�tך���I^d�i�(����	�����V���Z���/C����*%�Q�T�X*$�ba���4��h��
u>���,���T�)���Zt6/����v�����X	�A�
.W\hx
�SaV�)��
�+��v
+�}���Y�%D��?7�"ǰ�>�l�����5j�����-WY}�!���F�/0Z�Aׅ%s�oM#
�a��-d$����0H�a��4���&���
��W�K��K&!�qc��
�@�x�V��e6%ҁ{�3U����Tv
��Wk	��i�f��{;�Į܃7��WX�t�2������9
+�H�j��hmoW���<$�(�
+�������-��(
��2�
o�Ie; ��i�������C!?+D���/���I��,
D�a�ͱ{�'؆
�(�1EVHi�
+�.{�lS$�Iژ�nh#}��c��z���
\�V�*/o�/���HP�G�bbu�N����Y
�;�DP�}j��(�Ӕ��.m�
:i�S�2j@���t�g�h>r�
�5�Z���
�E�q��
j����yyk�tK{��4����/&
K՟X��e��|��j���ب����ɰ�k�f�-��Y҅����aH
���^3ϊ������ɕ:�Z�H���Mޑ��G3��G�)i�T�`�K4�E`	>���"�M�
39*�,�W�#Q
���vc
+�V�Vκ�_��j���
�����tNr�0�V���R7�6m��v�I�BQ�e&���ծ6�b����Ǡ����p�����:k�Yj�	=�d۪��#�%�Ƃ���]��*�Ʋ�vlN��v�f�QS<ԛ�v[``�0S��Kj�b-C�߼HtXӦ
���n�
���.I����jS{ڡ��,Z���������
+Ks��%�b��1�
�e�
�d�Fc��`�� �#�	�����:����?^n�

�ɐ�p��e�Y�C
� N8g���'*��[ܽ@}��H,V��H}R����K�ފ
+��0K�q�Z�!$o�n �~b��"+�{\��A�`A��bI�F��[��1k�:ߴ=�a(N��Z��/�����~�p
�QM�ߨ?r�����j[Kx=p���I�"=MQU
�7�ٍ���k�f�
'�>Ǚ3Ul􎌩���5�|g`
+{�\����1����0�
������
�(��u���ܭ�
�X����S�b��U�2�����>�r���(�N	�*<9��.
+�[;tD�&��F��Suy�B<��HW��8ﯻ_kܛ���y�=w0��b�lF_�8'��9�������)2d�N����i)1B2&ݚog<�r)y����96K��8���)
�����9���1{&�o,
h,~�gt����,�o�	�
+>���5���
����
�i?it�V�8,�Qn���= ��Gg�
΁7��:g �V�
�_��x�]��������X{%c~��T<���d��
T�N�C�A��+���1�NK���/e�k��Aۣ���O�b���sQ�
��G��(�H��=}�|z�5Ǡ�w�a�߯�.p�]��W����U�
݆
��Gʻq �nL���
�!�/?5+_�塣H`	����p&!�D�S�a�(�ō����,
�+�1������`/��?�,A�����B���o}�
�U��u�M/#�O!:���;�L�����L
���ი���D��23 o�'(E���Ҽ���ӯG�"��{�<�(R������=�-
қu�=
���
�*T{J�@��|WXh�b��e�J.:��Np��
��:���;>��)�[��@�Z�	�X��,��註�D���)�
Wt�v S[t
g,nNn*ݻ����Ƶ=4�i�6ը�픍�r�bۏuv��� &��4��.��7��>~��??�<YW�~�����mޗ��;�/U�_#�2�M�++����E
F�o��`
+�hG����D��?��
+endstream
+endobj
+1192 0 obj <<
+/Type /Page
+/Contents 1193 0 R
+/Resources 1191 0 R
+/MediaBox [0 0 612 792]
+/Parent 1196 0 R
+>> endobj
+1194 0 obj <<
+/D [1192 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1195 0 obj <<
+/D [1192 0 R /XYZ 86.4 296.45 null]
+>> endobj
+1191 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F14 627 0 R /F11 628 0 R /F16 397 0 R /F10 700 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1200 0 obj <<
+/Length 1640      
+/Filter /FlateDecode
+>>
+stream
+xڭXKw�F��W�jQO4�73��"q\�N���*��8A� �����y����r�����w�n
��^\�~���@#-�
������H2\���P���
+E�u����S,�����枇˪vO���fS�I��U��?^���^�>�(����
����G
���U��*����gQ�+���3�
ޗ�1�
�CE
�^�@��:�J!��C2�4EXJ/�F��ݨi��	"�tq��x��m�%gY�f�>[��wq1J`�[��"����p�]$�} �H I�?'qQXۻO�b 	bT�{zY� AE���<�X�Oy9�
+cq"�
��CN1D��]��1��`w�������63����瞗���C�@Ԃ���2k�:��>
�/�$�ZeP*e[&ݩ=	ň2ޅ�x���o��:k�5ԝ��:�,,�T����F�
Tsf�;Q-�5��6�l[
>�ᶁ�K����ⳢJ��-��H
�"p

]
 �2L���1��ueDa��I�6_09+��j��zպ'�fSW���|
?�6�
D����&���¨Tab��Ը��o����v��l�]��C �77����T�Wů&ƌ�p4��47��T0
6���{��
�:	��Ǟ�����v�C�
�U���G$G�C�(1���#2N��U#���;Pc�!,tg��	�1���Z�<u���8@#L�
q���f��]�,X��[�q�#
j�N욪��ȡ��8[�_��!��!:]P���a���	ۡ��	��"XT���l�
q획c�8�����
��	K0p�f/���1��
ؚ&��}v+
�ĒX��eJg��\�0.��>
�=}�/�
m�V�C+���&G]�ZC�_��
B�4�注�x2e�)�#��>
@<]��8�C"�Rņ�c濷��ܡ1"Z"��0�)��
��V�^����������>�G�������o�
Dxۺ��M�i��U������7�$ɚf�-
+_��ۇ
YK�
���0@_���(,<�_����@1
���	�RP# �@�닋�&��l
yhE<��UE�<�
+�Q��]k��4¤/�����{S�q3� ��=�uQ�#
+�4��;=7�Ú:k\�R �k �`����H�<�V�9a��]������6��#�=:�1$e?L��:�:")�T�v�T�>���[���B"�(��%�1��L���q�T�_vjޝX�" pߊv���tS�㇑)��ѭ�����{Iմ�3!n�ʮI
���Sw�
�a��quT�)�S��P9�y��t�����2�'u������
��l*��:.��
~/㤭��[��X���
�k�#�Q9�h������T�	�� |ѧj�<� 60��e��bT�Hq��ق�q7�_��˹
H�q��0p�V��) �b

��ri1��hԹͺѭ������be�/���&O3w��Cji1*5���*�'4����	D��fv2���W7S�a��@7�[��e�?��f.1C��2
T m�0
��y�Ȟ�eBcQ��	b�*��l���n��PR��.���h��&����m��_�苧s�=�[�Fލ�F�{�sĹ7��)M��Р�M'
+endstream
+endobj
+1199 0 obj <<
+/Type /Page
+/Contents 1200 0 R
+/Resources 1198 0 R
+/MediaBox [0 0 612 792]
+/Parent 1196 0 R
+/Annots [ 1197 0 R ]
+>> endobj
+1197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.715 491.198 395.186 503.153]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+1201 0 obj <<
+/D [1199 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1202 0 obj <<
+/D [1199 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1198 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1208 0 obj <<
+/Length 2730      
+/Filter /FlateDecode
+>>
+stream
+x��YYs�~�@�%
1޹�pU
dYt1���W*%�a	
�������ϧ{z�Ċ"㤒'�������}�uX��/|������+��ς@���nL��Y,�j�_��^
�Sc��F����_��5��Q�q���h�I҂��\߼{��%�H
+��.֒{ �.��z]�/��m�:��
+�@�(��@\���:V������t��]ҤeQ�R�*fq �N%*�����
��ph�|�s�1-�2;%c�Q7--�"�!"��p
�c`GZ���<�����0��Z^rp�ʻ%�`;X�m��\�R�W�-vd���1ݡ�GڢnO'lye�Є�h��փ�Ȃ>A����h$�D(�Y0�ja�K�ύ�)%W���v���a$ �׸���P7*��EYdia7�~��;�s>�Տ;%�ε
Y���kA�dQ�[�=��Y�ˑ
NJ��~|�z%
�lB�y����IGr�X��uzM��lo%��z_|� P�<�X���>�j�4iq`�Ms�o�4[
+� b��_� 
פ�:���%���
_�Mc,.Dh��c�
���9B���NR�~k������
�n;��2�j�ICl�a܅�5�wI�v��SU
�$w��0}�W+K;�0�63�fo>�\(��_k&T8=~UB��SBz	ꅍ�*J�e�p_3��g�
x9䀠���|����J����=)��턡��L]'�}"�bWS.h- �E���	�Y
h�,���!��
$`���$ör��x�
+D�lɚ�zb����5�?3+�
G����φX�؇����*�j��T�6p�P8j�
�st��,�0'ČDkE�82,
q�n�
b
>
	O�7��5.�|p��
вގzo㝉

�p����Dܥ�nl�y��ӎ�Ý�Nj� ��RL��ӣ:`2��]$�����"#�Mo
�m.<�n�L��r<�����
Kj�ݷy�/	����^M�Ļ!�.~�K���^ޞF�҉�5��Vh�>�ZS���в�� 7n?kR���M�a ����(�

J �dOٜ�pmf �7:��4co�6k� 6-(k��Q�vv
O62�rؼ�
+�)�꼤�<�U<�4��X$z��
+C�t�j{��^]�W�� 

 D2 �]~����1�	�{;3n�or�zw�W�~'�i_
+�V.����f�� �"��xjmg�$A�xZH
�{����
�� T
iF�{�����B�̇�K*�B���
%��TE��A�,��;.\C�"%G䢔���=�*�����˻(_:|���]�����ȱ� S�ٱ�}%���w.7�*���+�`H���3���c����>:����f�Iӥ���8��A��Iq�RP��
V��2/��S���a&jD��u��꠲(l;ve~�����d+dd��+�AD�{�TV-R�8���A{����I�A�آ�LX
+�A<4
�%�٤E1x`����4��	xÉ�u
���DpşN:��aO:
��$z.x��%��S6E�Agi���B��QM�P'�F�Q��xDn�"0�P������6���]��4U��aR�U5����D����t��\�x�FWj�,��ёf
L�Gt	��ߦ�v��h��tS�?MU�e�ĕn��-����ʊ��
�kbV	�E��S1u
����
E�:Ј�x��$K�k>'�,b�G�
a�'��S�DD�@
�.�Y at Q������Õ�ذ�e�pLX ݊�

	2@��}�,q�@!��K�ΰ��%X����Ϛ?t9�B�-���Pޝ
�L�=���;�����Ϳ#
+�u����N՛��� ��D3 �'��Hp���s%X���a!5�r��S̏�e��2
+(2TZ�[5(�`���f�2W��=+��,����.pI�T]��h��s�Q��9��fH�l	�EؤpLx���0x��{ �Sя���L��4�
+Ybl�W�6Կ���ա�z$���n^���~1�g��:��[
����x�zOS�0=	�G��6�d3��V���
+h�|����I���U+U���j��=�
��m��;sAk�DgO�ksG�d
nc�KGU4�@
[���
�
�,R��T�Y���3\
�a�`<�������6��KF��
+C��ڦ�6K�d�
�?ӂ
G=0�����<X:�U�B���g7���.���%Ƕ"i�-=��XR��
$
-��cew��h߈����7?\�������b)���
�D�����p�S��u[xP��~����uE��Y�:WU��G��ӽe
r��N�>������=�
d6��:Z�Y�T�����?-���v�i���z0�O��k%�E�����ΰx-��Q
�|t���OIM�]eo,	��Ɨ���;�,��୾���ؿ%��ܾM^��le:�e��
�C��=4�S�&�[2qf�� 
�JPFtOtX3����'�
^��[8y�x��^ΉH���1%ues\J

�D0-�����
�bx-$|�%
�Y�`��'��A�����nr��
j��·/(�U
u��p�j��m=ㄿ��F�z�n)	���
"��C����Տ��.����jt/�S�
+&�d�I�F-d�����K�.�Vⱛ���
��R�	��
��X�m�29R�&��LQ�J
��
��n�KN
yi��);e�+f��.��6mF�ZV혠#W|Rd������
+�Z��2��&���
; \��i�@��l�M�_�T�
�ڿ �!r
+endstream
+endobj
+1207 0 obj <<
+/Type /Page
+/Contents 1208 0 R
+/Resources 1206 0 R
+/MediaBox [0 0 612 792]
+/Parent 1196 0 R
+/Annots [ 1203 0 R 1204 0 R ]
+>> endobj
+1203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.046 252.944 489.511 264.899]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.464 170.51 204.928 182.465]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1209 0 obj <<
+/D [1207 0 R /XYZ 86.4 726.045 null]
+>> endobj
+186 0 obj <<
+/D [1207 0 R /XYZ 86.4 701.138 null]
+>> endobj
+190 0 obj <<
+/D [1207 0 R /XYZ 86.4 416.348 null]
+>> endobj
+194 0 obj <<
+/D [1207 0 R /XYZ 86.4 236.67 null]
+>> endobj
+1206 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F48 539 0 R /F36 408 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1212 0 obj <<
+/Length 2289      
+/Filter /FlateDecode
+>>
+stream
+x��Z]w�F}�W�Q��~��7ہ
�v1�K���S,I$M��;��+Pv�b�H;sg�ܝY��;;o{���/#&
��Jg�p<�����$#�t�|v���B���������������Ϩ���"���Wx��|�,��H��⑾�z���;��]ߞ�V�h�Qg�?��z�i�k����!��tf��`g߼s0b��|7�=8���»�s����L�ܑ>AD��$
��'�5h����"L�S����E�������[}�=��I�y���Y��G�Fq�
+0��a<��28
��]�t��|..-�.0����A^X�%�hi"V�FvȒ��ƻl
���y��`�L�����0�߇k���uZYt�q�a�
A�(��.�]K
#��x
ߣ�~�J�Y�U7�^�1$��z at O%p�^㧜��l�����
����,,�>$���E�
p�Y������u bJm.�'�/�e�H���u j�T ÿr`�i�8��Z�w,�I��9�zYF$�,F$A�"���)�"!�2Ţ�~z��R�;�S��'��z�y
�� �o���x��
 1�5���b�7^�P�����[^
�.� �@���+p�45K�4̊zK���N5�7����ɒ�|�6�H���\�ʏ��K�F�4h@����R�QL���H������
����]� ��f#J|0�'b�b�
�T��ݨ4�
+G
+W����bn�u
���:>y��<)���DI��*����Sc�`y{AQD�˼⇼�l�	����!Ec�)fHpb�
��X7V���������a �po&Ë����ʢ�
+�v�
�����1,��#��G�u�g��+"-����c����
�a��T\�(P
P
+�/��
$�Ъ�וp�d�Gqh�06�M|��j��,L3� ���xfZ���%z�/#t_^�UiլҔ*ӧ�P���,Y��U��mii1Ȋ,���ٯ���	=(���ܨ�cp�`H��xF¯Z��[8�75���W���;{�Y��
 ����Ͼ!m[��է��xz{�Dt�2u��.�~1ۥ��S��@�[�#@dah�7	��ȊI�L uFAR��R�+K
M��W��`��Q�'*�`��%nV����{���S�L{FH;��yu���[�ׯ��t~>��OMs(3��X�ه��f��)�����.]�0j
���T
Iޛ���
�R
���z)K�+��A
+�.�3&/Fa�7CG+�(�3�<�:�}�&�'��9Lp��� Ö�YKC�R%�ő$��`�����4���r8���N4�`��\�
�,���ae		s(m&pz���`nt��+
����\�Nc�Ðj��k��j#�O�/�Kّ�7����x+$�P{��-,E�F~�{���� c�Jz�۰�9����y�FX �7�]��,�9�8�i�9R7}�
����0��;4��ɛ7�uZ�۹������o�
V�؆
ƾ
�C��CeY�ڬ�o9!�f
�>d.��mAéx;�!>��[?=�����!�A<��o@/���&��	k�ʘA�[�F�Ļa�
�W���9w�>�V�h�o�xj����8�r�/I��p(Hc���O�	r<HH��*OA#r��y
�ز
\A+�Np�/��R�+�X��aM��=]��Y�mS
�8Y;�!��`xS��~5�
�O��>��d���y�Z��X4]3���i}%�Y������e����0H�o��7
�0-Hb]A?@e��J7�
��W��4
�V��0Q�?�F���	���
���؎�Y�
AT,���d�Mga�i�qOt����مE�@��g�
�.3�O�]0Y
�����zru�*.�n�.�7��T�/�U0��!Ɋ!��3��Q�w��
�M�&��nϞk�����c]�}~v�����j9���GClJ����jX�mJ+G��-a������T���gX ��X����X�<���-�0�1J����ˏ-��
	־�O
��!!;	�0�'4E�c�S����1MR�d["��Q�in�x3�\~��`o׫0��xi�7g�=�U�
𚂽]i㖫�K�v�
�$�����η����О^�v�����|��
1h϶
�
��췘;��Z��@
9�ϑ=��:�X-���'lOD�?8[-�����zp�w���Lc��P�����s���� [...]
Q����rl`7��i�_�bq
+endstream
+endobj
+1211 0 obj <<
+/Type /Page
+/Contents 1212 0 R
+/Resources 1210 0 R
+/MediaBox [0 0 612 792]
+/Parent 1196 0 R
+/Annots [ 1205 0 R ]
+>> endobj
+1205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.035 688.242 303.5 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1213 0 obj <<
+/D [1211 0 R /XYZ 86.4 726.045 null]
+>> endobj
+198 0 obj <<
+/D [1211 0 R /XYZ 86.4 579.935 null]
+>> endobj
+1210 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F14 627 0 R /F38 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1217 0 obj <<
+/Length 2786      
+/Filter /FlateDecode
+>>
+stream
+xڭZKw�8��W�$ub�`ΙEUu2'�t*SqjS�
�	�0�yT:=~���N�� �}|��/�9����������E9	I"?r�K'�s���(��|�|sC�NgA
���x�x��r���'�o.~����|��f�iໍ��"5�W%\}w��0�{,�݈��1�:9���yBAϡ�{Hb9�������7W�G�$v�ռ�Â��p�;w'�=�6�N��2'J(�<Ҋ�O���`q�
�p�J�T��^^�ݝϯ>|���_�gǔp k���~l��A�M��0	#��
������͕H��J�_ezQl���P�w��"�g>g$
}gF9`���������x�?T>�P���iY,�&+
YMh�|�P{gx�q ���~7W��n[�jV��u�Ʌ
Z�E�,N�
bR�
�cW�HQ�'=1��FD��1��%��U%�5�u��ţ
�(D>1��/����c��J���1�R����(y�P
ܬ���(vмm�׋K�(|f̉���,�����|���M��L��a 
�e��%���50���
��(,�����$���%��� U�6Y!���$��Q�x��O`��X;�>
�E���	
��#�1����W�f0ת�Yɖ�`5$����D�
$^�#�l-��l؏b%����b'��������[V�w�JL8A.=�tc��}�&��,<0#/:�,��`����
H��?Є'��
�"#�C�iT:C:^#kG}�Ʈ�Ųϻˮ��C�0���	`-풁)
Tc�P*
C"��'��ȆƋ����	q*9����-�����7�Vv[�[�6�0�����i
Fk��J����_L��YW�
���4� �9|H7��"�ZB��7`o��sG�ym�_{@Ibv�y
Lc����g��b-��?�a���0��`;q?�7X� �#
�`{��X���#��1~��
o
���X�����z0�= 2
+X86��q|,�}&���[���o�P^&��z0�=`�		yO���^�	o�����̡F��_�J�=(Cy�A��؃2�D�Jn�߃����9�F v@�v�*ȟ����A]y�Q Lc�
WQc]]���
8[�{����
+�W�����v��,ȏ���i��%�^ϒ�l����-���-Я��l������>.�'�GnZ�ҩu�G��\U��n*j��T_��
��Lo{/'Z?P�'�
�O�~��D����3"b��}=D�w
zo0dz6�'Y���ݣ�/�83v�y�&Bԕ���P-d����J�����M+´�F<dy�{�Oe?|2s+Y�y�{xH(!f�(
[�����|�Ċh� :p�P����� �S��Z��a�;����'�lz��s�+�aH�Ω�o-���~<lx2 ]3���p۵
+�uژt�6�g
�Uk����*�e)��&t` ,e�}Xdm�z�V3�um�
���B��vU�ԣ����v��f%��R�\��)�

�~�\+�8��
_��&A#��	uU
ߕ�Q��Oj`UVfdd��rc�8AwpU�
Y���8
&�˕-��m�)��-#
� �3
�Vˏ+�Wk�Af,����J�im��	c�'�����MݮV��mc��%�9����~6��.��y�ޕ+��B6"��D�U�h��L}
�V6[�+|�]����Sȥ�*�7`T^�
Y�U�6-tn�O�D{~{7��O6g;�`H|��M�Z�Ѿ$�
+�]	+w�E��,�|�5�E�خ�Q��Ӻ�U�g��c�
�Џ�"q��C.�����T
qpe���)��L��iE���:)/O���B?�	�˔��b�%������(�a��S ,�4�48���.�ʹ]����AmQ�C���np��eO|�VǓ2Eo�Ra��[��F-���5Mg��
+k�f�{��"*� F�ڼTо��cB)B�
��U��
�'Uu�d�T�
��16�b4����_>��/o�OgPe�&����������^��=�E������gC�
)�3'K�J76�8AZ��P�K
0!��B?��ܘ]8�5J jw��ns�a�;pU%�
yw�	�l�aĄ�
թ�=Ozj��~Ͽ�&B���"{4F��q��|3O�فb�V��a�
�
��n�������4!�&m|Mx2�
s� ��i0��V%�� v��9 �x�ph�T�U�U��
+�1°w�
맲�zZ��ڬLR3=��-��6Me]/��L��M<���8]=��4�Ĺ�C*�#<�����x|x��T�:J�V͉X�f��R��<�N�N&�N�AyO��A��ϙr{�G@
+�Z7��N
��ƚ,�q)��(q
�(z��H
xT� Eu�K�?t�Jܶ�l\���g L�H��G��}tf�� �T
 Bk6�*
����\f�H�I�>�
���	Yx������ Gw���X��$����S��/8���M�$��
!ofh
ߥ2Kt��P���rf
+ͻ��$��X<)�(d�����
�5�^VO�J��y�*pai�V�B
+(�z�'_
�K���hJU��n�n��x߻�
7�U�G#�~<��U&�/�L@��v�>\_�Xy����r��
K�r@̴����;C�����4aVI�P��fr�g���D���k.��Q�@��&ZW�h�֒�fg)a�ӓX7������
M+�
l�ojR4�_�ߣ�7\p at Vyk���3G���—�W�V�S��y��+��6ÔP����Cn�
N�~f{��BǮj�Uv+8�{�����ʖ�P
+endstream
+endobj
+1216 0 obj <<
+/Type /Page
+/Contents 1217 0 R
+/Resources 1215 0 R
+/MediaBox [0 0 612 792]
+/Parent 1196 0 R
+/Annots [ 1214 0 R ]
+>> endobj
+1214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.195 89.639 511.169 100.487]
+/Subtype /Link
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+1218 0 obj <<
+/D [1216 0 R /XYZ 86.4 726.045 null]
+>> endobj
+202 0 obj <<
+/D [1216 0 R /XYZ 86.4 439.569 null]
+>> endobj
+1219 0 obj <<
+/D [1216 0 R /XYZ 86.4 331.588 null]
+>> endobj
+1220 0 obj <<
+/D [1216 0 R /XYZ 86.4 188.876 null]
+>> endobj
+1221 0 obj <<
+/D [1216 0 R /XYZ 86.4 85.074 null]
+>> endobj
+1215 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F38 453 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1226 0 obj <<
+/Length 2395      
+/Filter /FlateDecode
+>>
+stream
+x��YKs�8��W�(mY�&��M�)g�Ύ��K2��lV(RKR�d�v�S��l�
�\e �h����P�a����7g��r�$VL�])"�b�8
6���BE�eL���_�n>��>_�x����X\K�MZ�L��W�(���c�ve�&�Ź���X-6����pȳ�4YY��?6��.7g�:��a�V#I"��d��0�›wAHx
v�><&
Zy���׳�ﰗCCN��
�DH��(�PG���
-u����H?&�3*�eXK�h`i*
����36�����bsyj�ଗ/~jiG�
�Cf�/R�4���k��v�g��+J8���;��^�$������P�W�kxЉ��������H8�o�:��F�����RE��������"�Ӡ'I��&����?~����jز�����.s7o���Nڧ�����MuL�c���f+F�1��EuwܧŒE��
}�,�ޔ�d������)�Y8��,L~L��XpݩYhLh;��@0kgۨ�����C�z�@�SH��#˕�t��1��L�%��� �1IҺ�
��L���Y
C�u�����.4Ѣ�B���Q�pn ����
+�II,�����)�/��C�:�
���6ݺ�=h
��0w~��
+4�ic��vq�y�$���ʝ{��IK�����<�)1����1�&
qI���|A&���
o�i� ��yhrw
+d���Byl�VP�j
"�c�ߪ3�=�.7WW7��$#<����Y�H&&����bZc��ߜ��б�����r�DnS�S-j4l�:�0>����8[�Q��v�bQ_1E0ܘ
��H��gQ��޳xRTw��XO�B�:�'1&˜p�Ɓ?
�i`��|I����i���Ț�&Q��۴g��ѶAk��c�

�<���

��6O�n‡
�?:��ჩ�>F����r\ ��mR7��>�ZA�:��G�� ��o�t�7�qj�^[�D��2
�R�Y�	����X��6�m�5���
cVQT?B����)�C��6aR���%lX�˗�1��11��dH8h��ɐ�}O����9w�u�����	�ꃍ�4��@���Nph
�
z��ɵMU�KW|�^N�U'b�	>�0лM
�&��ǤO��&��I�F�i'� ׄ���R4t�#�c�(�G������ k���Clgf�Z�=�8��s���c���L��.�ݢ����;�3�1T�ϫ��6�5{��$�������cȸ� Y��F�c����Q.���4[���@<�u4�c�/�ڼ��$ []݇

��-s�ӯ�&���{��Y0�R}$�l.�\�M��H N=�͒R�A�Yѩ���J���M���I���K��
+Y
 ��:�g�*;>������
�gD������/+�Sт�H�~c��D�j
260�
�Y�=�j�1u�Ϩ̸�����w���7Y1cl�q����X� �Fge�6�G�ʳ���ր�����e��= �� ��%�O�Q��99���#d���
��~����
vaIv
�H���z�?���4�i�϶n`�3<#��ɀ��Z#�|���	�n\����
Gs�w
��֎����U���™�X#��LR�f�hY��ػ1u��(ʢ]�v�=�6pS�0��[��������ݷ,$�
��)ޡ`,>\˸G����O���Z&~/PL���iK!�/�$��	)q� ە��I��2K�Kk7E;�`�F&*Q����
���4nR/
�'~�6-�V�x
���g�AVC��N�_T͵�>�krϙR�������Y�_;�7�Z��eO��~ɪ���U/�<;��I����m�?Ż��֘o+��
+��FೋpN5�'6"/��)^���n
h�g���*��i|ى�3�-��e�Эz��!�kK�bX�0گ�٣�1U\#u�t\��E{��;����΀R�GْH
��o.o>
.�o.=�*O��@��� �8{ræh� }�J�hL�۽B��Zεl�
_
QN�
�V
�`�
j�Yj���\�ꩂ���gZU�W�g���|�~��\��u������q�����37z>C���J?���!�Gt�,۴���}bX���E�e��p��"I�`���nc��%걉�<O�Zܲ����1
瓽h
 �En��

+�ݽAGY��a>]���
��j^wpc���-O���b 7��F
��2{p"��0�ӿ/�㹌������_l^���^�`h��=�
�7
#���
�}j
+�
�'�?w�e
+�(:�<wuJ<4	��N
��&�i51��
t�8��>�NJ�v�՜���j=���K<�����L=Ƚi
3���
+t|��b�WI��OoL�������?���
+endstream
+endobj
+1225 0 obj <<
+/Type /Page
+/Contents 1226 0 R
+/Resources 1224 0 R
+/MediaBox [0 0 612 792]
+/Parent 1196 0 R
+/Annots [ 1222 0 R 1223 0 R ]
+>> endobj
+1222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 559.532 526.596 571.487]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+1223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.938 315.527 194.661 324.438]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1227 0 obj <<
+/D [1225 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1228 0 obj <<
+/D [1225 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1229 0 obj <<
+/D [1225 0 R /XYZ 86.4 596.892 null]
+>> endobj
+1230 0 obj <<
+/D [1225 0 R /XYZ 86.4 546.407 null]
+>> endobj
+1231 0 obj <<
+/D [1225 0 R /XYZ 86.4 485.191 null]
+>> endobj
+1232 0 obj <<
+/D [1225 0 R /XYZ 86.4 311.866 null]
+>> endobj
+1224 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1236 0 obj <<
+/Length 3032      
+/Filter /FlateDecode
+>>
+stream
+xڽZKs�8��W�HoY��#[S�vbO9���D�=d�@K��
%zH*N��o7 I���=�	B�F���N�&��ף��ѳ
MR�F"�̖�$bj��E�Of�ɇ@3u<��
�7�]��
+�%
�����ח7��\��bs,E���2����
+�"XlK��I���^
�ώ�<� M8�nu�M����|y5	�L�Ƀ���(�2T9yw��Q��M��
%�:�D)g<�h?�
�ƒl��0��ۢ���*���mSl�h7	�>��}Eq��P�����7��֗@�©�T�<��kS���E
��	8]—m��$�:;I�^����1J����ڶ����U���Z�o��m�L����R
��J
��}]ኟ�uf���uhTi�|i�|M���yu[�.IC���4fI���_�k'eZ�ᅩ�Y���㩎���)��/����>O4�0v�a�S����nuX�U��P[��b�طU���Py�@,����	h F�B�
���U��˪^?7���=�]�
�� .L��ܻ�go߼�]ޜ�6��z���ѿ�:�9������ſN�,�S-����S�R��o�7��C�_^^�߼�|scy�R�ɽEv�p5'R
�ޝ
+2�����!H��q��b�����(�j8
�pV ���CQ�Dm;Tm��fŁ깎�H"g,��}��f n���Ȉk'��砙���<�f1�6
E�t͉�w�R!z��.��ʁ
K�Nk��k� f�i��� � �WJ�dh"�ܮ7x*Ec�،iE�DF_�>�L�V�-�OcY}�]�fٶ;�P0#�!aq�WW?G8�E[�XA
�9�H��ؐ��
+,ъ?�ֵ�>
|e�֠2l
+pu� ��\��c��c���
�
�d�G܃Ut�
�%�zD

+�=
���F�è���ysQ�t�������ܞ� �з9���!�,I�� 0#ޚ���O�s�t�c#�v������(e�o���+�	�߄&�aV��c|�Mp�T,�� k��*��?�[sor+$!�a��Q���a�׶!e,cA�>���
�x'�AX�.k�v��"p��5��Cu�n�
ѿ�\gw4�aU�q�+�Ԭ�m� ��L��5yK�mEϐƋ���v>ϛf�-
k�>�8�e��0i\UW�W�%#�u>7i���n��&X�݁^�&C��
+�vn�aAC�|<���5��<k�Q��c��Lr�S��_a�����%��`p^�D�ֆj����4q��e=
��3z-�c�,|O������̊2_�>!�g��Äu�����l赉tO��j�i(	� �m)��7L}�� <C�
/QjL������ �,���7���4g���Ԉ:$��qw&���0�A�*��gVtʆ�ᓊ�q%w��) G��GbV�0k`NQ�B�
9
�˵ǃ=	v�\0�}�/+��0�+6�>k�K��#��ܐ��)�����4;�"���*8D��Hﮨ��,c� �4f�_�[s�=��Y��^�CG,���L-!Ӯ,
* �DD~���,���djA��m
��,,��%�)+��L���^��n�
��F
S¾�N�˛�����
Q
1c��ڝ�el�*�e=���|9a�c� ��I�<xqzu�*$��w�A�tqu��~��X��
f�y�!	�(p�^���$S]o �_1�^0����6��Ml���/���wa3a����SW�
��Iu
Va�}��W�30�UমB$C�0�Ʉ%�+b<�'���Rm�?e���Kq ZF]J �O	�&`�)LF�/�
�t?7� ���>l���y]ٟ/�ir�0�
`�򀐍��� 
+�&#��0��" �7�� iz
е���]�	Y@�6Qԃ/�&���E�p���D���+�"1�ӉD��
+r�um�H
��D�4�d�>��UDK
����j�q>b�w�C�~~u�������1]��$y����Q�/���S���!5� �L�nJ��$��H�A|ac��y3,�\�yDm����O��z4�`�i&��r�A�w�c��P��(g��o�g-�4��=����
+mkp�1�l�jp��Żз$��-�굛�8=U6��ᐒ	D����?-�!
*�)uܝi��/s���:�ن����
�U�Ĕ�(�L��Y�O��g�7/�:�׮�x}�]�cb���N����GbG*�T>K�
i��ʗ~���Z�v�Ml��
���-�X�����P5I�}���[��ٖ3��U�
+�����O
�����?*�����X�u+9�J0}.y4�*a��rN�^���-����HJ�c�D�����h_I�x��Kb���:_W��3Lb[�.4�HP n
�hX2�����x�bi��
+�Ϫ͕��1�;Ug�q0LMI Mu��꿕%��6���a����A�a;�_�x`T{eN�s
+��)�T;I�F��5N�Y�$H�e��QHz$�#0�$H��"��؉��B6C!�w=�4����l	���zl\g�<07~�_Z�ݯ���P��
+t�y���
�c/�`��f�$dq����ˋ�P9��;b
���J<�Pkp����׳��Z|��ˬv�������9
+$���21�d�/?�����mk
��Z	�"�wP�q�0��WѦ��~��.��lS�LF^�[<;�������vK
�]}�3�Y�7��,
,�Z���a��l7�J������m_�:��F:fa(�Pk1�p��
+
_��
i(R��9���;��X��t�����T}ǥtԻ�ҒS�ث�l�W؂���s)����do�#�ӿ�F�����>x_���>|]}���>���F����&{_��w|���p�<
���Li��@�A�oJ��bq��,��+G�
6���s:���ed�w����
��*[����8b
4�tF�Lw7���2r��q����X��tilV��!N`v������p��&v��Lgs*��6��F�`[��F(i�M��k��c�����_',�.�
�"a>R�R��&�w�

��
Cƿ�
����
���Q
�g��@y�#T�96	���=�=�
�x��
+endstream
+endobj
+1235 0 obj <<
+/Type /Page
+/Contents 1236 0 R
+/Resources 1234 0 R
+/MediaBox [0 0 612 792]
+/Parent 1238 0 R
+/Annots [ 1233 0 R ]
+>> endobj
+1233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.329 364.74 394.052 375.588]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1237 0 obj <<
+/D [1235 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1234 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F48 539 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1242 0 obj <<
+/Length 3539      
+/Filter /FlateDecode
+>>
+stream
+x��Z�sܶ�_q���%� ��L[�ȖdG��i�L���$�w�B�"+}� �$ٙ�O����~�v�hv=�f?��p����*��"O�tvy5�R�g&�E���r5�87��B�q��_�=>�xwr��P��5>����W�/۫bY��i�x�ڮm�U����8���~��/��x���v]-��j�n���7{G�{��I�0�IGQ"2�Ζ����D����EB����mfZ�"��zv���^4�P��2R"I�Y�K!M�L�����h��ܨ
'&"��l!���U��?</��$�g�iwUc�8�aJTѤ�w�D����
d$�����G3'�M�9���.�H�rs
i����Φdd&q3N?d"�<
�I8g���$D�̅Q���A.��ds`^!�l�=|W�ƷRn����/�8���_�C�#���&�ݢ^�� �˞�z �9n��q;��q��³��"�=b�U6��)��������^o7e��y��$2��!t�*� [...]
�����BO��yO<@c�mے���$��m��{s�[��<���ۀ&yE at 7��i�{�i��G*�V���TKKQ[v��Vټ\��o(�r}�~�:�R{�$�Դ���+��x0
0�X>s�������O��!��e}�
�Te �e��X�|v�Sp�4��X��y��m���V����1w<r��M��ߺ[�y0�C
�m;�	�]�Հ���ɿ����ˇt))T6�p�T������s�U�
+�@oٶ�r�DkЉ~��<��H&�5(�����M�D�o,�7�vmE�	}Ӽ�������Ȼ�+���g��h^]�k�].ˮ�ڮ,q�K;7]E��ߠe`�	Y)��]"��-�|h��->��2x�(0�2
+�I���V܅6F~��X��b
z��[t���1h]��2?Wu׬����[�]�^��t��D'S�}_nnQ~��<�
P��1G�F
+~��uጚ{�B�Hh�� ��guR�N�IWE�&����z$��e�C^��
��Rt�&��� �mZ�����1&�
�
�� Gz�&�bݗ+�
�1
���]
}�c��`��X�#+�̽݅]F"����9B!t	�~�'�����+��+����`�LR?����̏
��m�`�B������
+�#�Nb��JP�����αO�
`�w�3릾f�V�} �&B�^�KfuT!����*	
��0twS�����E|��Ox�M��`�������B��-��a���)@J���� ��������
��	'"ʼ޴
X[]�D������D�(�
����)�������B1;�h� ��]M�Hpt:9���^�HB�7AR�@�m�k�tl�޾�]��h 4	��D����)�t��{��l#18�򻗇'6Gp
\
]���]����B3�5}���wSǩ�@
ù� VB�
4���d��$&��g�a�\VW��CP�h�M�G�E���
�@�����"d�
B���[
��TJ�1��6��	��)�Z�A
�T�@>
w2!�|
wh����X�x� �8|���R���1�1 at d�
<#~\��d���NpuS/~/��.��'a�Ȍ	hH�$A�%h���
+Z���l�0s۱�A��t���aQ
 IL�]U
�6�sT�Z�(ZnN�L=����dN���0��7<
~��ÑGع{�vg�)�u���֨�7jc=<�V�v��	`���f�[Fc\�-���oj�'��_��s
��-J�X3��!����geh�^rlp�{�i<ձ��j�'vB�!�ۀ�l��XW]_����%&���Y�X�k�mI��ǽ�G��v"�!Y�T����4�]�mg
�^93`�-�
Q�y�t�=!s�ƫ.��{`ary�I�5ĕ�����j���=��N�R�F����'����SB���ڠ�sx�7
O>����h�y��XpJ
+�����ٿl����9(�?�َw篎Ώ��`��)� ��>{E�
\4y-m��2�w��%w�я�$�T8vL�/ ai���"A�Lͦ wFg��ھ�qZ$g�p�����FhT8�!I
C<�I�G�u
+����K��
5����
�R1�i�)MX^k�
vYGKa��T�Җ'�<EvEǃ��v�ln[H��Ղmg�|J�ه���%dy\�q��Y؀1�
C�����숛/x��������^^��L����
�eg
H���03��V8�7�Xm��۴��e	C�_�]E�|!�G- M�UT��.��w�~�6n�A6O�
ʯ?Ӓk;����8<}u�-9����l���K��;@b�D$�!���s��HN̍���
*�.˔`�ǰ
���!�
��r[_����@��)�(wC���B1.
S"ɓ�P
Ȑ�5�G�@�Pʳ��hk�3�;��Ֆ���n��Q��\�5;���m���_�U�lA�ê.��2��߈�$*���[�ek7����j"v�嗞Ъ"��]h��-装զ�Y�A���Z�
�jx0��

۳Ea�-'|SyL���%�~�p�����N����`�`�a�yJF�xRE}]v;pc�	���P����_�j�M�'Q-��������c�G��1�1(0�H�$�C*5
	@N�	b���D��=�H�U,2�����ɟ�KWBR�����}z�*�1�U�;�!X[
���ZK�+��t�5��-�
���
U
�p7ǯd�0Jp�X
�r�Av��;ڠ�n���=��jR8�CH�C�;�8�
�;n����?C�_
+,��d��W;=XڑIL�<�� �Q��i���r�}�#��W��1�C.vs�=�=i3_�4k���Mm��n��Ҋ�Ā�v�����pk�@
�D�� �[���tFӔ�p
�.�ג����dÅP�A
�����lO>�^�1�|0�s7G0�;����X�|�_|xtN
=���	y�f���~.X㰿,�֮(�C]���MYԀ};����M
+�
��1"��J�D�[�_�%ޙ1
�1 ��w�8���
�� N�)�	����
f�d꠆�<�N�4 u
Œ��Q�H��u�ϐ?��t/���d d�	^�,��U���"ͨ��'
��g�n�Q��\F)V�8���r,;�8�Ӫ�6aq��nKkM
�))��\
~�� ���/�<�&�@��N���
r��%�I
��	�!�����Ā��.�
W>(�Wrh��\M2
e�>��ĩ��5��:ǔb8_�v�X�uСfw�+��ઢ�6EĞ�+F��A��ih�ה�B/�)qp�+��z���NW��Z^3�
a?U���
Z��'7�>x�A#r7�ƹ
';��ܶ/�Q�bB5,��b��貕p5$�jȐ�{���5qZ�6��Y�*�����q
+��JmBC?�e"�
տ	�A�s�̟�f�
����Y@��/I�&�)52����l�-�q��{tA�3
+Vf��
�>�մ���G;���G�C9`������
+endstream
+endobj
+1241 0 obj <<
+/Type /Page
+/Contents 1242 0 R
+/Resources 1240 0 R
+/MediaBox [0 0 612 792]
+/Parent 1238 0 R
+/Annots [ 1239 0 R ]
+>> endobj
+1239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.544 451.956 390.266 462.804]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1243 0 obj <<
+/D [1241 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1240 0 obj <<
+/Font << /F36 408 0 R /F11 628 0 R /F10 700 0 R /F8 409 0 R /F14 627 0 R /F48 539 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1249 0 obj <<
+/Length 2869      
+/Filter /FlateDecode
+>>
+stream
+xڽZIs����W�F/ 5�TɊ��,ٲHe2��"A	5$� �eϯ�[�Ԓ��"<t7����[�`p7��&oOT4H�$��`2��׃X&~��`2|�B_G�(�J�2$�W�yh}�1q�����s��WC%�uV�ө�_��l����x��L��'�9�M0��ot4�.���̜
_%f�H��_��>V��'I�MG:�_ă(�X�����Oד����P�,�����oA���������WK���prX�W�:<�A��Зj0�OB{�_��ຣ����~���P�R�x��ۓ�#%|e�`$�Ē��
��?��t���#�L^!ze�Y竌_
�łl*;T��:���0���"鈗Ƚ˭�Wq�I���NJ�0��V��VVn��g�߯Y�%*`SٷE��x
�s�@#|-T#��YƏcQ�ߒr
ی4�6�m
��.�u
��M��C�UU,jy�CZ�)��an�Y�x�KQ2���Px����\��2���c��������.��a�]aT(}�u����:�	$��]�*VdeQYoW����S
�|�X *�SZ̀��,S�m��'	|5�C�����	���j������&��.�q��4���b���
' �,Y
+�c���h�Y��iV���^��S��=�Y��1�
nP(�j=;�t�%X�a�ռaB
+˄�`��\�a9
_����)@��K$W<̲QZ�c�aHYí�İ�,��y����9q&]o-�n�2[!v��^� \6�����R�xG�#&�=��a
+D^"�ІU�!@�Zk�T�.���$#�O*D���?��/�i"�n$���8��l�'����vU��p^�����T�BA�u^�Pg���$���N���f�ꍽuU9Ua �l�e��jv���ieM�d�w�撣Q�"l�4_�;
_\�{c�<�]d�O.���۫x��O�)#���`4/��6�m�E�!�'7���0y"�lk
�
o<:{�D��BR{Y�+�F&�}ax��7��֢P����*"�3 ����=t
+�"?��A�Ї��+l
+�FA|O�~3
[d�;B�I
z-&�&�ӦN��0?�E�����a�f��[�T�~��:$k�
U:+���29�.//�
^M������8�K��0wM(—/��L7�_�(����%-��[�D���v�"j��:E�!���:��J@F?FUژ�e��%&�
�[�W�|鳲��u��N 4Q7t���̐� �U�
��v��D at P��%� H�ٌ�^;��w�k8���S�
u�B��اY@Ӥ?��K`@G(a
N�;�)+T�B�;Al܁X[gKk�2-���z*�H5��E&<�tiG��K���Q�
+�C�������Y�@	��'Tc/R�/9��I4DR���zS��D���0�:�ӓ�g�9?��.m5�,ln)@7kѾ
���
������)?�'ɍ�⟬���,
+���R�JE^]E�Y
+?
+�X��=,E�X��٬ ǀ1�A�`��
YG,e_�=��&�
����u�Q�TjFHJD���T��%dg6�oZ��-�&nM-�;߃�ѷ�l��?0�|�g�l�cdb�k�F]�
�N�>��S��["��_ �9��JLW��׮v�	!���������'�\_
_�__Lv��b?It���vd�9)ʗ�ԇ7�:;���V;������FD�
����y�tx5>
OШ4���]�{�W��/
 �[ ����^P��4�$���p��
�)�\^�����ü�E�O�IP���`a�G��6傗fi�|�&
+��j��ճ�Χ,URkT���=���Ms`WOy�u�:	�N�Uq�ΰC{�&q�A��iZY#�6�M���E^qV��'��{ք�-�N_hD��R���ZG"����!i|yzq�=S�L�O
_�`C��X�Y��j��<�
Y�6d 3i�t�
D�*���Gз�	A"}h��o
����%F
 K�_=�
����Ɵ'�ύ��E�-gl���yqi.l��
��-�hDV���6�l��l`����2�}��H
��w�%&z���`[Ȓ5�\
��ܶQ��O^�V
(�e��
��P�����	��	Qs��*~ژ 	u�;�X�m��r���/�����l���o����4������Wx��#vK�P)�(��YRT�N���� ��O@��ţM*�/"ӏ�}�c��� tg�Yf� ܣ�������J=�-��vx��C���6� �x�7�6K��mvpbh{��#�A��Xw

�.#Ӗ��P��
��n2{a�zI[-�p�۲̖U+,��a�����A0����>�A�!	�t�2g�����8�#�
+Υ��oڦ�m���Xdw
dq	z�f]����Pw��ϟ
���M��F��	
.��F󡔞{7��=�M\,�(Gd�����]��ܧ�'���!��eN�ż?��p�e�Ⱦ��ǍpZ��cU���E�B�gXU��
�xt� �U��{I�L�$m�r��M頮Q*~��eV�a�NP({
����N���ܐA�jZ#��ɾ3G���J��=�����6�ub�<H�y��$2ґ��w���t�Nomg�N_:m��n
_��MX�
qR',�
nj
7	�]�Ȑ~d@
+w$ �KR��`��{
e[�m��\UO����6�����PU[���E��A��?u���I��g�X�����靳ש�]� ����
FI��wq��>�J�[yu�*���q
��3�R6�"�uO at J��%-^�Q�7�
3@�;�֏�
��9	ja&a˕�\*�
+r�lt�A���v�7i��.�U��_�������i�B����z�L9�
�v[4�
+endstream
+endobj
+1248 0 obj <<
+/Type /Page
+/Contents 1249 0 R
+/Resources 1247 0 R
+/MediaBox [0 0 612 792]
+/Parent 1238 0 R
+/Annots [ 1244 0 R 1245 0 R 1246 0 R ]
+>> endobj
+1244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [383.004 429.735 397.727 440.583]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.946 250.77 457.669 261.619]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.495 112.969 394.218 123.818]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1250 0 obj <<
+/D [1248 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1247 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F16 397 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1255 0 obj <<
+/Length 3201      
+/Filter /FlateDecode
+>>
+stream
+xڵZ�s۸�_��R�!@��:���ک}���r�3w�@K�̩D)�d�3�㻋~��ӛ> ����]�-G��������� �,�D4�.FI��()�>��G�z�O�a��|vy{u�f<	���J|J�
����"������›�Wz`��h�)ν���7�9������e�bS��ߧ�G'ӣ�G
v菸�Q��f�_�Gsxs>�Y�&�'5o=�A��V�ۣ�G�>a��N,�։y Y*GQ��#:�㋋�$�����ϟnh�7?�?
�
��ݳ���m���� ����'D�lWÉ�]�ܯ�r,b����=����l���ڼ����S�{��p>H�ӽ�֟!���:���X����ᘃ�Ș�q`&2��NjY��фG,
4߮�(�lE�n���ޜ�ގ'"��Y���N���3�ey[��pb����X��r�Q2���:���V魊z��i�(�9
�
߯��G�n�R���ǣѯjZȄ�@:d��A9��A��D��ç�UŖT����GkYI��W��8�ЦP%��3�u^M�=��9F
.ʼ~��%�g�'N�6cx<1bV�����N�
���l
���uޣ�>S[)���ke��|���[4
���
�˞c�=
�u:��OC�to
��ÀE����ӳO'���C�a�h��&X��&�bdd$@{��
�l+5񱘛
�W
c�<�m�<�����������(p��!m	!��~���x)���fK� �!ۙVQc+�*P��i<���/*���=���Vf
|�r����rI}�8S�L��la��OT3�����l�\��J�R�
�P�&h̲�Jm
��wE.݈X��.�S'�P���QR��7����<e�葤�2�^��@��6�D{��9���g$�����TP�h�0!yWLM�@���ql��۵# [...]
���(H�)�V���$����
P�!C�'�,���I���w�@����Q��V���R�g�c$�:nE�?���p�q���v��KPS��v$ke���{�-4��0]�5x!��0d
�0i�=<7h�o�ca at GI�#�*��|��t|�H
fKj?=3
Nu
+>X����l��&�U�ܔ�oy��}�xqqr��پ��cl�0
�A�L��V�lS�
�#9�fk\X/�y�!���W����.h���d]�b~�`�V�-�����i2���A��,��+MF�����8R;	��*m�2 R:���u%E ��C)
<�~-�+���H��E�/���ŵ?���כ��F��@��� �!x�-�=S����� FIgxbt��ߗbq��3�r���s3�*���@:�0X<���r�!!�	�3g��
��HڔN�/PJ��	�9�N.�9	 ň¤k�w=��X K�S'�mjd��J���]�L
��(O��T�E���ĉ+�OV�`�
�ú��=~�L�l:?W�Ƞ�{���aFE�͊��+��u�_f��{�rM�A�m���:��6c���*p�x _�_��*(��������y
��AF�9A��wfM*���(;��
���	�i?�0�DYƨH/�]}u<ƕcA��$Nj?=(B1AR,��K�1
�۴x�J�4e_Z
*��RQ���T2?��j�����cC	ī��Ѡ��� ����a��
c�ȹ�i�Z��v���u�|�h������'�p�=*���8Щ�6��~��&�����b��шrv����^���;�L���·� �
�`=��}��w@ [...]
+��$��U�J�~U:$�́�u �����������xڏ6�v��uy�˝n�
q_?�����=����_��_u�B���5��Sж"]�J”  �����O���<����\=;�5!�F��\�o��C߫M�P�xN`���,Jy;� ��
����`T[<�"Ղ�vy�F�k<����Z�$�\F�Yw�N�b̨L���q���r� �� ��!���+�� s$Y���T:�
�vQ�ؤ��:5M���.s_\�C�#���-
lPU�D���*ֻւ��D�So`_�DG��
+wfEY��F	��^ R����A�>
5 @�	9�@@
+5}I�]�]܏���e�J�H��Թ�ر`aܩ9(��
�#����h�•#B�����FvO�
�#�1�R�(7�)B �h?u�
� �'a��+	��X�w���W)g�m��T5�d|�Bs�s�!͔�Q( ����^T�O�"�K�@�[��gN� .gzu�Y�Xeʧ�����
�����
�+XH�^.��t��x�_m�p!	�#;�;z�w��K��堖X���ٯ��In}7U�(��k4����Q	)�em�!(*��R8\�m:"��;lr��
lJY��S
�y��Ȑ�6��ㅋ�������xp��`���İ
'}G=U�������z�zI�sR���{ 
���
�$[I�,O�oV{}
�
+W�����_��3��&�@-A�+����Z
bF�07x�����/N
��rl��O��_�'�̸m�
M�
���>����`�974��
{ݕy���k@�-��A� � ����^��N � ٺ*��a�>�	?D��#`��$L�@-/a�����t�ˆ7i�i
	{M�lX�
s��B�]+�
+�w�gJm��$ �nN
���7'JK��
ImlO���[w�-���䞱���Ų��^A
�Cq@��-z�tG9��
C`P�`lR���udf	�L|sA��&n����+А���W+
R	������͑Ϥe�3�V�C)���#�յ�X>�
�T�bX�H�� /k�'M�M��y�F��pTgH|[;�j��`���zk�6&�e�z�[��B}������ޏ�Qo4��
��TǘQMiS͋��$
�K�����z:]��o��-
{;Yv�i�$YUQ��y�,�e:��[�V���}D`M��%J�±�X��kJ����M)
X�����!o.o�����48���'��fS��-p�Ns�[嫌�5��-�{{	
���jof
+�W�k�\�dP
j��r�o�e1Sl�Zm̄
���
��������K�bn�G�?�c���٬��p�T��
� 
��!jo���dz�_�6'�
+endstream
+endobj
+1254 0 obj <<
+/Type /Page
+/Contents 1255 0 R
+/Resources 1253 0 R
+/MediaBox [0 0 612 792]
+/Parent 1238 0 R
+/Annots [ 1251 0 R 1252 0 R ]
+>> endobj
+1251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.214 647.126 406.937 657.975]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [497.483 215.569 519.955 227.524]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.6.7) >>
+>> endobj
+1256 0 obj <<
+/D [1254 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1253 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1264 0 obj <<
+/Length 3607      
+/Filter /FlateDecode
+>>
+stream
+xڥZ[s۶~��У|�b�
o��C������rfδ}`$��T
�����A��3�	q�]�.�o�p�0	'�N>,N�]�x�Y,���~�Ɓ�$2
b%&����iD�3����/�׷������c[V�|�]��q�r1߭̈}K�Rj���:�s������ۉ��É�kEA���r{����d=?O�@e���m'Ze���fr{��Ih�>��,:��"�2=�3�$fin�>�?�-.��Og��@����������w��_���ŗ�W��o��8��F�+�T.��0�@�as3!�,2;����������f!\�?8x���p��
ɛ�J׊{w�W�L�@�r2�:H„�z�����T��}cj����}Uo�%��g��O�x�o�9��U���9_V_K.��ә��P(����b�c�t�����4=��c]A9�.��)w<`W+����nxp�.���6{�B�"�
7����0�%��nU�pJ�ܔ�"���yn�b�p�+�KJ
�\�C^�
<�@�F�fT��-P [...]
+x�����k�4*
��n�dS�
G��ݎ��쑔���7��du�`t��P�m%����4��)�=ؖ�p��ށ���AC���r�o6ϧl�p���C�)����=���2M-��.�E� ���lx	\��C��#�
+np~`G6F"�h��g?"V�7N��(A
���v�����
����N<GA(�)<��
O��Q���_�-_�h�b�U<6��Љ�X W�_�U%U_�,�Yn���t�Za�kS�l��+��d�����6���T*H��(O��ue�3�K
!��b7�ҁ#��S�a��r�
���_Px�����k�c�,�)���޴���+�G��B�9'Ӯ�MWg>� �JC���cQ���⥙j G�a
+�"��bu�t��n�Ю���������۾�K�t
���*p7C
d����
�ZC4�wg\i���U
�
�p��
+	�s�q��4��{�i$ �x5
+�E�|�
$77�%������ߪ
+B�g�L����eN��;^��k��	��
��4�J�[�� !6�\�d�57�8:�|ĝ�:����]���?
��� N�^�
��c
׽g�N8����
+����L��B^�
�s�BW=&���ǣK���5߆�w�i`�sf����5�Dq�@#��vE�_j��Mû˭��T���u�x�Yo2���U �&�N�,̺�`|�0�P���Y���f�w/�]�!��5���?�G�q
ա)ԋehep�
+ "d�s�A�pԈ�m%�������ez�ǔ�]���m���a����T�,�$�XȂ�d�7_.���lօ��W�+����2k;1�͆�������0�W{�#���Q��2$C�������n��
/i�Wz|�
��np	�2�
�a����1�ty��MC��{��kH_ ")���vvE�(� ,�'/�JK(a@�H���a��+3qf
�al�:[+���̄
+�����Th<�'��u���;�C�# ��؊0=�Y<PH�4����	m��'pc�ݥr�8��X�y�
�Hh�U�`Q�WeY
t<l���VhlZ�}�ܳ<��]�K3w��f��g-
,�@�S�q��]�w��P�%��⩭��;l+��,a٦?��Oe���8�p�%�jm���in�R�LWk ���`�P�z��E�7E
��7K
��V�Ԩi��@X�ݹ���0��֌ `���@3�m���x4E)�]W��=C:�ӳ7��8�_��8rf̷*N�$����7��4/��"O�!J{�
*��X!��pDj���uӁN�7K��Q
�{ �b��Hl��6�uU0!�:8Y�?����|KC>�-���� U���H���N�rj�NE���
6����p� d�_�$�
�&JmJ�
c�;TLt�����.Ƽ�b�E�A�;�C�'A��^4
}� �q,}��}^`"*���x�TP��r5��a���@�؁�(�"0naZ��D�S(���Ǽ�蔋i8�
(M���� {
M�g't�c�x M:� �sշ��-Z-H�}Q�
��F
iJ��Ӟ
q}Yu1�GE�
'�x|�a!
dڝ�j�M���(��͢����-�����m�
b�������R�� �/��j��5
�����"���!��զ|�X���Nq ��8� I��]�{�@�I/�!���ܾ�
+�/�Р
ݱ��7
o��].�hD%n���GN�_`r����7

���vȀ$�a���y�I����V�3�U�c����2�h
��
M�����ˤv縵�!��
~� �{Np�/�*e
D*��	>���/<�=8W��H_8Yٟ
�yN{{�9�u�E"�����2
�Ґ�]�ύd*{��%�h:8�L���}�iO�>���*�ٷ=(�U�#�m�w���Bi�r`x�"� E�c��E��Ѵ�M��nO��41�����B3ԗ��W��B�.`�Un��7�pÜ
.3;1��f��?[��9ųE�&=�I�3L{X�� ��I��Wt"��!9d��9�Q)tg��`_��3�lrYO��7
T5�iz
�z��<ۍ�sJ+�}�k~����o���k�[Eʹ�Ii��'E���2uc0�%�1�
m�W��Gv��x��8�;��&�vi�uu,
H at j"���_-��b�u��U��7���
�|`�t�Ja��M#���0*��8������ۼ'�(��J/{�Jl..����m��{o�=�GGf��g��<۱�}����;ۑ�V_��uQ��� N�y�B
6�½=dc��ȟo����M[����cWZ����j��B�h�o���R��j;�x��
+1�/_wr�N��p��Mա�h�ܙmt�a
�tr~�;�!׵�s��jNZp�n���F��y��0Wx[�����rg��_l�mIۘ
30ns�Pg�P��}�j����z� .��4%'
BzD|��G �w9h��jdL2"��~'�G4�Vf
+���`E3����QBG�QB���"�+���m�w����w�+��X�2�QX��g�#))�y�RA�q�c� �3:�B�Y����K�[/k����~��+��"�x�Ls��@
�Bs`X�1�1o�LQ�;S�)�}�.ً
+�i	�f�T�u�@��$���Q6�����׷���_Љ,%z���_�: ke�o��VN��,$���#�+*Hw	�3α���M��i��'��8���a��A�o��M�bx0�K�*m���ŧ�{��f��&;�W�x �ID��e:
+L������v�IV+�!���	u�f�՛Qv��
+C��� |_9��[�,r�+��!��l�.���
+�ah�ٔ�lE?����p-
�Tx���]�
6	��
+�(���N�
Mzɝ쭮���gO`����W�S�X�O��'X#�[�j�
���O��X��n��m��,��2��x��
�퓮���W�y�K�K^�
�o�μy����c�
�?e�����^�&`�Ho�r[��U�?7���"oLQDg���E����߸Os^ܠ��@���
6�
+endstream
+endobj
+1263 0 obj <<
+/Type /Page
+/Contents 1264 0 R
+/Resources 1262 0 R
+/MediaBox [0 0 612 792]
+/Parent 1238 0 R
+/Annots [ 1257 0 R 1258 0 R 1259 0 R 1260 0 R ]
+>> endobj
+1257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.068 374.513 395.539 386.468]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.3) >>
+>> endobj
+1258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.351 374.513 438.149 386.468]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.2) >>
+>> endobj
+1259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.337 362.558 377.06 374.513]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.421 98.025 405.143 108.874]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.1) >>
+>> endobj
+1265 0 obj <<
+/D [1263 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1266 0 obj <<
+/D [1263 0 R /XYZ 86.4 544.974 null]
+>> endobj
+1267 0 obj <<
+/D [1263 0 R /XYZ 86.4 359.619 null]
+>> endobj
+206 0 obj <<
+/D [1263 0 R /XYZ 86.4 275.806 null]
+>> endobj
+1262 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F14 627 0 R /F38 453 0 R /F16 397 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1274 0 obj <<
+/Length 4342      
+/Filter /FlateDecode
+>>
+stream
+xڵ\Ks�8���WhvrU�&�$��.�i{�Il�:�[�=
FblV$QCJ����9 )@��P�]I� ����`�2	&��e~��
W��Ċ����$RDLB��d���1
���2&�����㧧o�g<��d��bz���l�K�/�"5_=��ʦ���>��f�
�}z���t�|�h���nW�"�e�����������_W8
&��H�H��b}��?���y7	���7=n=<&
ޭ&����*�
�j�#G`3��DE�0���(�g�>�SI���3!��}���	+|Y��]�yA����.)��!�Փ~��m�|e�,��P��
�oQ��̞m����J%��C�P��&$,2?�e`,�KZ�<�tj��T?�	O'�z�o�����ňC�p�'���� �b��i�!)P
��є�R�)�h�"$a�`.A�X�&�4��T&��G��l�]�&�J�.��
��GL��~I�����_�`��j�6��T�8��Ѳ��x4

+<"`}��m�щ�0k���-P ja�
+w��d�i�x
+"����o?t��2Q]�
��:��wtXi��z��i^f�kx����*�
]Cj�@��<���n��ƨ�iЁ���Hb��,�$�`(?�Ұ�psӱ��Q��F }���5�
�*���7f��t[dU*�2[�Ui>֡�f�L�2ߘ�,�*-t��X������ҵ�I6�
�
+C>��������@8�B��r�ከ0�H>��o�?u��2Q=S�4��i��4Z691)O�/6�f�m��b+�Y(�
X�j�%�Wt��7�&�F":Љ0�03	 }
�
��ۜ�z�
+İX�
����$]&��b
�}���b]�+�S�w<$��)��ʹ��ՐEn��U�,5�n�V#����
dЖH3B�:�ߖ@
PƖ�
. LE,j ��?���޶��Z�:��Êz�aE2��P��e,h�OƁJ��=�P����)_(�_�R�ّ�
�
��q̲v̎'�c�A�G����U�B���
j����Ռ Ee5���_���DZ�4|�l �T��BT��r=R��|6b��D?}<��HV��H�C�e
+��[Ip&O����U�r_3z�ӽ�
,�v }�@5�]�d�{�l�\)�����0 �[�||j�9���; aw}s�wi�C�{�6����=��
8�L�^By_�|��U3/�eU;n
(.����f�����ޝ��#@�F����͇O�
(�M��b	S���� ;�,
(f1�I�aćyN�
�|�m9
�
�q:
+Qۋ��v�����aXJ"�
+]�rt��t'	Ak�@ӛ���`��oZ�}dM:�>
;�=<jd��Cvo�Md
e5��4� �00b�(�vi>�~�@�D+d�D�
;�}�z�rU.��vs��f
�:g�vg�VGX��.K�ڛn
V���O۾%��{Xd	i,T.6i����Xz�	B
�?�'
+�X�X����g�c����ا�b���"�G��U���L��U�@�ڪ��ڪ���V��<�ݩ��F��a�T"�2,>��`
�j>c���=�7ꬻű
Ǝ�n=�󧎝�
��
��G4usp�Y g��3���"����-�]
�]�[�Ez�#0ZA��t_�F��py/V$ػ�$`
4�����&�	�Q��R���,X]��{~���k�6�h8l#ABp����4���[lغd�a{��>l#�f�e]$�t9+w�֞�pp*~��9�q�r�8��f��8�-]�*&T�Q�]D�H(��>�zT,�1�]<�'좂�er�;x��C���"Xѯ.�# ��ݫ�̧��]�5�Q}�������K��&�Tx�p����ԓ������:"
���3�o��
�Is�
��̝��e�O�8���R
�tgb
��[�Mk����AFPD���2��le��|œT@���bN.Ż�
�v��e�z��#��H�t�첿l��$-��hE}���JZ�E
+EG���z+�sO��eB�(��L�^���ͮ�n�LG���{;�Đ�]۩\�
�	p���	n,���VKn�\L�-zӕ"�7JWڣ����Ӽߗ��w���c����%v']��0e��;�xN	�飝��
�y�i���DL�󔟛
�;���
;��yn��C����|
.����
�[����h~�y�y��7_(�q�9ҧ�O4"�0
+Hߤ�W��u���I�'��:	�3
��pqkH���tlԔ�F��s}��
#J�33F��
�����4��8F� �Aոno"[#Y0�
w��s�	{��9?�u�
�{�� �p�k��l� �����s�WC�7|�*	$q�0��q
�K��LZ?}��w��w�k�� S
��i�m���]3p�ΰq��R�`��D�k�6W{�Mj�
ń�I%#�PL1�ޚh5<�z��O�����8�:�3����ij�3�i��W:]�I�3�vOX8���ejGE��o}���
��I��#�gi5��jeN�.�]��{Sz�g=�y�{M��}�}<���Y
�&e�V�\����
�>~
*�Y�jYw��ө2r7ת38Gx�$5�B�:7��U4\���.��߯&�06�������J��_SSO����R�e�1�vf����An
�K�c-�ٴ���/�"�N�5�Ԍs�#���EV]�cZ�8�
qX�{z�8fO���f8m��T�<�;W'��qA�z�ح3��̜`����X���T�>�ަ˪�l���w�:��\�7d��b��=���f�m��뼰9�2�%��n�V�Z�m^X\s�PL�c!�v���2��4��,�8���'�vV��2�D4�ǝ`��K �
��������A4�x�@1�ٌS�G��g�9W��D��S&����
�3��
��(84�n��W�
ͣ�l�s�j�}|�m"�Ę����V�궫p/�~��l��PPe�֩凅Ѵ�����3�Yj$㗉y�&�_����	�Ǖ
Ɂ�ۖ�7�ɒ{@�Ӡ�o����P�B���j
�M�3.��K��IE��b,.��
ž�9��$�����c9�'Be� `���}�
Wߴp,���uC
+����CL��0S�c��XM
4��g�F2 wr�F���.v�HZ:������!.�)�x �\�#�+93� ��u�p�q�!7�[AC�F<�#�B!u�QtQ�U
�H�hLf[�-�U ׎�
O�����'(��`J��(�qy��.�[���,E_�mk�
�p�m�;1
Jy����!��K�)��+]�=]�(pFc�y#��&���t_0}�ϊ�S��^���6 �� {����\��3,����
�3
�6s�G����Zt��$�O��
kw�zƤF����G��(LzD�tq���,�eT�G�
5`G���A1'�p�
+ŞY�Q<�rl2��¦$I}G�d�B����c��B
+\
p�<:@z���
߹y.���TW$:4�<�]�	V3��� x�����
6}��vM"!�TK
��ig,�p�z�I
��c��R�7꺤���K{
J�����mn־�ko4�$�����,f\B�^7��B����vo
A�=���N`�m���j}�^M�
+T�l��wu����V�A�w��
Wd�u7oR�7ڧ`�_e:���O1#,S��Ԋ�aT��H�ݎ��
����,L[��t]�'���R��p��q�iR�#0�z,U���c��UE����C
�:*�J
�<�e;ۙuMm
��Z��-H�ɪE��Ai
m
�������3���s��c�����]��
���(��3���f��? ��w�$<٤a*$
+��{�f���'*���s
^R/7$�2 �1w
<^ �
�ըj��)k�X���O+�}��w�'��s��Oi?]c�w<��hv�+P`��WPKzEgG�\Ru��x&z��x��r�pr�:����R{l��@7�?�b�,ۺ*'p;&"
/�a<���LҶ1-P Q�������=v`
�k��q�3X�=G��l>���/�|q
#P���R�r��w�,��qd�{������r1p�|�n{OqZ�x?r���듚
�n�X�.�}
T�h������S��0��nC��{��j�,7d`��uZ�T��+ź��j�6[���
���.�ZBӌ�t�dFU��n0ӋE�O�;�O����<�m�U[�	��!���o=����V�"�+�b�I�i�ŝ˕yp��ãj��5-,�&���z�ӥ%�Y��nj�цB^,u
��N.���^|����i�
L>g��{�8Ө�U�ހ����I�q"��V��eo��T�i^�d�[]<����J�.DB�J
+�@b�
�C��T��5�Kٚ���
o.��
+endstream
+endobj
+1273 0 obj <<
+/Type /Page
+/Contents 1274 0 R
+/Resources 1272 0 R
+/MediaBox [0 0 612 792]
+/Parent 1238 0 R
+/Annots [ 1261 0 R 1268 0 R 1269 0 R 1270 0 R ]
+>> endobj
+1261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.852 365.132 187.575 375.98]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.257 341.221 376.728 352.07]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.4) >>
+>> endobj
+1269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.856 341.221 424.328 352.07]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.5) >>
+>> endobj
+1270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.84 262.387 298.562 274.342]
+/Subtype /Link
+/A << /S /GoTo /D (section.4.7) >>
+>> endobj
+1275 0 obj <<
+/D [1273 0 R /XYZ 86.4 726.045 null]
+>> endobj
+544 0 obj <<
+/D [1273 0 R /XYZ 240.321 696.212 null]
+>> endobj
+210 0 obj <<
+/D [1273 0 R /XYZ 86.4 327.601 null]
+>> endobj
+1272 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F11 628 0 R /F7 701 0 R /F10 700 0 R /F14 627 0 R /F38 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1278 0 obj <<
+/Length 1950      
+/Filter /FlateDecode
+>>
+stream
+xڭ�M[�8��|
+���.�m��4kX�n}z�B�y6����q���rd�Ҥ ��oF�q�<{��������݈�L#-�Ȧ��e�h$(Φ�ٗGbxJ
|z�=�˷l�~�~��6�ތ>^gg��.VCJ���avW�~��^�a7��S�	�ɇ_�W'ӓN0ؔgxoG��������<���\e9�Ze���=e�jD��2���y��kz��[�����B���K��U��������^Ja���)cl�
~�/w���v����
Q��V.��aۍ�(�s�f��X����@��#�Ͱ���-���?��?����f39��R����x�z���O�C%�ad?f���M��f�m=��;�)�)"�e�X"�j�Ր(@�8��n*~�V��֡�<� ���U���e���i�B�A`���ćg��XhB��s
�
�q�qF�u{���;4��
i�D�`�4V���k�(;FP`���V81Ns��"�v�;&Sz&
~��Jk�c
BY����r�{����^ [...]
�
���6������R��Eq�L+�Ꞗ�Z�*~<��r����z	��K3�xS<�$T�8I�1E��u�fl���l�bt��@�`�U
��?g��h#<�
�<M���
+�瑱j�M�
0Q�w%���Q�XYC̖5������zu?�-�Ԣ
�P�
�<M�qk�
6�L���jI(�
������c�[a��~�6�����?��!l�v���g�� �g�����G�2S��/_�պ��j
���l�^�-�\��%��3�CK��
���lN�n�n�@{W>;�w��xH��&e,aȘ�˗�j�x<��n!���hb� Bx�Ռ����-��ك�(f�r�h#<Рe*M�R�ֺ�Y7�f
+~b+�h�T��1�C��Qe�#�$g��rGr4��C D,Ԅ��j"d<{َ���@�D�p ��RHϬ�0�B�G�ã���
w4�?%t
+�=-G��:�I����P$�L	�:t���IWG9oK�hW��.��f����f��������9��%
+�
�u&���K��r��T�[g��T�΅f���5��o�d䂧8 )�Op�V�tT��d�,*�S
��f�
L�T���,$���C0�O�@���1869�e��IͿ�ڒ�����!e�R�m��V�Xq�qϮ
�1$�?��)�Y�0�P�����y��O�%���i���Us.{��`��$
%
^u[��Q��:���{
+e�5�r�5e�
�ƛ��f0��{�J��c��9�Mя͖l��S(l�r$�h3�-�$	�
���������Ŗ
�/0�H��|�5��K���8�e�8i/`���Sٷ�!
+ҍ�w�
�]����ŧ��st-`����x�I8��
MJ�E{�Q��I��Y\M�
+0K k�ٲ.���3���I!��LpD�Ӳ�K+
弭��Y�Z���������[�E[�AVv+��q��?z���V:���ٚ�MhcL�j�٪��ʫ+��hS<̠�����&���|͗V:���ٚ�8p�(��af���ƋU�M�xC<�GR�~�B���`�eͷV:���2[�8���d����|���rm%�?3.���
@+�nY:1��&�'������{�C<��R๊�0�|�{�����D
C�k��*>�	%����Buߑ�����
�e|njT���
�VH�
 ,Y��������byGEoo�H����?�@�D��[��*{�b�y
+�6��K@��$��BTʶk����l��dzq��_ְ�e+V���y<_=n�h�Z��uԓ��/���~/7
+endstream
+endobj
+1277 0 obj <<
+/Type /Page
+/Contents 1278 0 R
+/Resources 1276 0 R
+/MediaBox [0 0 612 792]
+/Parent 1280 0 R
+>> endobj
+1279 0 obj <<
+/D [1277 0 R /XYZ 86.4 726.045 null]
+>> endobj
+545 0 obj <<
+/D [1277 0 R /XYZ 185.845 584.959 null]
+>> endobj
+1276 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1287 0 obj <<
+/Length 2880      
+/Filter /FlateDecode
+>>
+stream
+xڵZKs�8��W�(UE
���l�!��.g
;�5��
(��X�H��8�_��h�/����
� �h4�?|ݴ;�����ٛ��oŸEN�s���Bߑ��G�/�l���5�Œq�y��\���^�Z,E(�q��r~U,�7i�����ޗ���6�
۲��8��n�����}}<�Y7YYԋ�W���Wg_�h�Θ��sB�ϒ��_��
�������ك�w�I9
Z�����;�a8ݠ1�>mp��I[���a�<^/�<��
��낇���u��ɡ4�����oJyҺ�i��.'
+HG�м�9B�D�B����f��-�CZS������:��u��3�We�d
6/�Kq�'����h1���4m�S�����qޚ��=��Q��2

�
gKƜ��֋a�sP$S�IjB�&��2Ydt��++h
+� :�i�I+j�l�ee94
�������Y�^o�=M
4
�������	Л;�FVd�<3�K<凬ء׺󬦡�~��p��G���	Dp�.��	�R���Y,�t��Mz�ʹ��
UZB�疠���bG�*V�a�*<�yL
	ےN$�>�6x��]�A�I���ç�8u��s|&��?ˉ?��h�p��Q��f	���/A�gph���J*Or
of��^�G�����Y�n�"ϊ4�y�ǺIM۶H�S��QAX�d�Nc%���K�ܒ3�$�E���ϞV���&
`�:��6���o�
� �a�y�~��o�
�0z3�:��,>T�:'��Z{�_��}ڐz�R 	��Ƕ�V=�`]�o�Ã.(�����F% ������ߵ��0���+���� O��Xl�;�H�EV�
܌��� ��4Agζ�� �\��Huc����K���.wΆF<fym�L\��ͼ
((k(�c��R�D��Z�)�k||��$�su�
�
PO�e�{���p�����E��cI�w�OEyp3����
�U�������ډ^��
v�w
�󱚫���-"ybz�;u�({�j�ak�:
 �t��"�`�h��1�UjQ�0%)��b9i��y�?�8d;S�c��?������,�
+{�f_o___/�
'r���W7W+���z���-�xE
����i^��?�>ݸ:��w�龁z8"4C&%�g��CZ���t�1���vl� `����H�S=`V���ʴ��(��
+���\�s��Yx���M��U!F
(ŗ�����ײ�kѸ��r�p�CŸ��E`�n����҅�@a|ʼ\h^���0���qEh�h0��b0����r
3
�M�����~)2RUn�-���� W!a��P�;��k3�i��8)�Y����a�z�+��rM�q)�R5�3D���
ȯ��e���mLK�i
��u!$�4���
 �)j^����T��3�h�L��ʹ���;�������2�������
��ܥ�Zl�Z��=�Zp8��0$��� �u�oK�כ�Q@���l�R���Ҹ1�b��'`����1
����9Օ	 ��xa����R:��_mk9�u_8�M(:"�s
Xt�S�I�`�:���e1_w"qSe�̰J�����Ui�\���Z��@���
�-;�8��6p K
}џ8���}����K7�CG:w�&���0��"c�
0r���}`�9Qϕl^�;!��S�C�,*�io1�Φ�
+�B��S:
���
$�>��׺Ԁ%1!I]X!�%v��.���,~���޺M���@�j�R8�4�q桰�
�;���W�'�um���
e$
�1�j�
+���xL
���
+#�|gy[�4���@Z��G*�U�tqhW�M��7�]t�(�a���wtNj�*��y��
���-l���\zt�qN�ҁl�H=F�i�����i���PY<�RL��H�rW�R�
X�*
+�8�g/�Nv�B�����솇�7�;a�R�M1) 2;��e�o�t-B�P5 ���$�@�
�
+讫�{��߭�ޟ�[�eN81-�%��c�y�~#�~	ն��1Ӿ�pu}�z��m϶/�__���,�!k�6 ���H�:RL�
�oˤ�ؿ1*v
�{��>�&����D�O��|[]�^���/-"��lZ)d2j��ŕ��T�*������i���U�a�9Rѓ�?8��R�춍)KM�x�a���w慎
U�;�X �O�T 5���Fߑ=<����z6��)l��^g/CG�y���.Di�1���
�<��ې]՗�Uu�xM�Al�t՗�Dbn3�
�����H5�m�0v���O�'�C�R�Z��YL���
+���?p8���bJx�µ�b���E�*5��Ƹ�B4
rd,�n��Wl�|R]��0(�\���A�F|x��n.����(��M�(�e.Xl��+<$eQ�
�l��uw��C�Y�������e��5��%�w�9/����Ί�K��

��w�U�/1�To��q���1��T�~�U)�8Ÿ�I}R�`'���s
qЀ�L�
�9v���AқSϸ�G}*M,���T����nwU�-	�
��G���1�b���%U�)���0%�tDw��-v�:?�
�1�({j_�|�N� :N���
�B��������R�\Qz�+`A��&���I�	��߽���̚�*�����:�$�����${*��}��������/8AiBc�r�
+�ZĐ}R�\�A�"e����;Q�4JMlƃ���B��oi�` C
zz}����bA_ѥ�u�L���)�*=��T�/c��S�߆�	=F��/W�����v�6Z��`db&�w^ۘ����7
+&�a�L�%�
u��r��ܹ6p��97CʀU�&KT���Z��PL�
��\ܝ�?��9�<���Wg���$
+endstream
+endobj
+1286 0 obj <<
+/Type /Page
+/Contents 1287 0 R
+/Resources 1285 0 R
+/MediaBox [0 0 612 792]
+/Parent 1280 0 R
+/Annots [ 1271 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R ]
+>> endobj
+1271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.461 688.242 187.184 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+1281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.445 652.032 200.168 662.88]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+1282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.862 259.329 221.836 271.284]
+/Subtype /Link
+/A << /S /GoTo /D (Item.48) >>
+>> endobj
+1283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.216 259.329 253.938 271.284]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+1284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.561 187.767 117.284 198.615]
+/Subtype /Link
+/A << /S /GoTo /D (table.5.2) >>
+>> endobj
+1288 0 obj <<
+/D [1286 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1289 0 obj <<
+/D [1286 0 R /XYZ 86.4 646.666 null]
+>> endobj
+1290 0 obj <<
+/D [1286 0 R /XYZ 86.4 625.055 null]
+>> endobj
+1291 0 obj <<
+/D [1286 0 R /XYZ 86.4 605.38 null]
+>> endobj
+1292 0 obj <<
+/D [1286 0 R /XYZ 86.4 581.831 null]
+>> endobj
+1293 0 obj <<
+/D [1286 0 R /XYZ 86.4 560.219 null]
+>> endobj
+1294 0 obj <<
+/D [1286 0 R /XYZ 86.4 540.545 null]
+>> endobj
+1295 0 obj <<
+/D [1286 0 R /XYZ 86.4 255.65 null]
+>> endobj
+1296 0 obj <<
+/D [1286 0 R /XYZ 86.4 236.529 null]
+>> endobj
+1297 0 obj <<
+/D [1286 0 R /XYZ 86.4 84.521 null]
+>> endobj
+1285 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F14 627 0 R /F48 539 0 R /F16 397 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1302 0 obj <<
+/Length 1899      
+/Filter /FlateDecode
+>>
+stream
+xڝXYs�6~ׯ�#թ��ՙ�$�=v9���恦(�S�Tx�ѿ�.�!�N��,����B���x������ե
��Ł���L9��Y �s�q>�>
�+I��I
3�*����e4���z���[��˥n���$5�mE#
{��b���c7
�_�nw��
2y�2�,R�����x�vn
��8r���d��
+�����3:ycݢSՂ�3
�����~rb

2�G���7Y�j�áȳ
iSW]��Y�L�wyΊ,�!}{��$�����Z��}�����#�(�%*�������	{�욖8=,W��h
ł� ��ػj�t���)ow�6H
��
+� f���������Pg����Ap_ia6]��11�`X5�z%�
��`�X�#}������z
��1����5-��|o
��iy?L�����G8�Q��b�'�o��]�?]߮���ox~Ĩ�������H���
�Õ�\H�u�Ø}[���]�ffgg&[�[W�m^��#|��q���\��ER�}��dQ��nƛ,��<8��
����>�
gX�|���5�X<ȏ�
t�TM�?Gc�MV.E�y�D˝_�"�xᶐ�1+�;r��"׬��lo����F	�5固��������D�1>$
FԹ@PĔc��EV>B6��U�T��<[��8U�>������p�O�=���,m�< 
$�	<)�
��<+�T�����;+ƒ>�5MU��*�.��
"��H"w�쪳�+t୔G5@��)ֹ��XU�����b@�7�wZ�����a
�9�~@f�Kn� �dS�'
�f�,��P�f

�P�`�IJ���z�Y�ե��c�!z�M#��U]�f���O���&ki���GC�5�]���v�=�D�靷9�m̦\�Gu��BC_��Ca�Y-aj�'�j��0 ��Dl�
u��2M�9�;A@��*�M/�R�����Z��m��--�aw�
+$J[��J�ZdA��Pf���B[÷��3q��a"
�dU
��K�&y��l�rdא�z���r�Y�D�N쉡�9uA��=GUt�4y��D�M۲K�6۠u���=�B���s����w�~��b?��CS7A~���������FJh��zovv������ꮭ�
+'��Mj%�M��
��aO@il;e���H˭��o���%���+����Q�����Ԥ��
�sD��fʧ�	=��!�Cϥ�T��
�%M����a�@�Z�
��ru�¤96��4���K��gR�C*I{y?#*>�T<�vwzu�7h'��8��/��}F1�(�ͣ�?;�/_����a819�FS�%�X
;RWb�
��z\Z��c��a�AI#
6�S��r
a�a��c�)�
k��k��|;G
<c�gȃ��~�|�/��!��l5z[�#x�?A
-�E
\г�;A
�׊���)� e@
*����ŧV:����}1]y�N�ဠ(
�H�)�����uԑ���|�D
<�,�����Gq$���}�ZW���׺����"%��k��T��2���? &��6�_LnΔ2�CF�
+��O���
X�Ť���5���A���`<R�k�ׅ�"�iGM��
���^8o����[+�1;��{.�|��#���!5����kR���9��Q��,)=���b�R��$
� �^��A��i�!
Ͻ>�+sk/��W �`�U�$�$i��'��u�6�7+��S�$e��m���! �wC]�NZ�&�6���r��H��
� �`Z5tK�h���j�|�
�I'���s*{j���Q��3|O2�)ч(���6� ��j���.iI7��
��l��}�rz? uKu
�1��
:�zC�桯�p�&�[(^��n2�?��O[
+endstream
+endobj
+1301 0 obj <<
+/Type /Page
+/Contents 1302 0 R
+/Resources 1300 0 R
+/MediaBox [0 0 612 792]
+/Parent 1280 0 R
+/Annots [ 1298 0 R 1299 0 R ]
+>> endobj
+1298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.636 390.359 258.61 401.207]
+/Subtype /Link
+/A << /S /GoTo /D (Item.48) >>
+>> endobj
+1299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [278.538 390.359 293.261 401.207]
+/Subtype /Link
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+1303 0 obj <<
+/D [1301 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1304 0 obj <<
+/D [1301 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1300 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F11 628 0 R /F14 627 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1307 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+1306 0 obj <<
+/Type /Page
+/Contents 1307 0 R
+/Resources 1305 0 R
+/MediaBox [0 0 612 792]
+/Parent 1280 0 R
+>> endobj
+1308 0 obj <<
+/D [1306 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1305 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+1311 0 obj <<
+/Length 1547      
+/Filter /FlateDecode
+>>
+stream
+xڵWKs�6��W�Hy"o��[���
�i��d<
	[��H���z2��]`AI�(ˎ�� �O��K�F4������W?�"L�)њ���&2��H3M�f�U}��,�Uo��\$*ֳ�W�!�$�I���\�$���.o�U_65257��>�{s��'�1���
���XWU�Dk��"�@Q��jh��#g��@�i�u]�Y�

���|G�T�7�m;g������-����Q�w��"�yYv5�;fX�NJ��ˬ�mKfs)���>0W.���f}P����
?а�oZ�F4׊pƣ9��P
+
�Bŋ֠
�p�\�.
�&\��(.�]]�}�`�F,b��D�H&��5_^|�J�!bD�&���H�@�*���w̨�.&DWxQ	MQ�'��qL#���0p��m��]�G������޻MH�7
��2Y�?����Z\���/�u��S�y>
6՛�KE�\�*�
���!:�
бq���|�I��<�q�j�O�MYX� s���{��v^:Os���O���y�6�k��$�}�D�m�\ɂ�d_����M�s�ۛzX��,6�4�6\
+K�I���
0�\��
s��X��:<6��R<������(�WtY�nM]�'��A���"���=�
��yH=fy����0 \��p
;�g.(’[
e�!I�{�+�m�3��id4~_�Ow�� �;�7MUa>��-ď+�#����q;we����H");��@9JDa!��bbG)���v-a.�t�z I%�=�}ZB�H2A�H��}:!��$N�0g�O���;Fp�Q��;��5%���g��7#��o�y�n� [d=
,�AZ
�Ez>���6���1�]��8l�
����m��*��=�g�V�����&P֐�n/	0
��h���C8��G_���Z2����/`�G!υ�� 'i�5A!!�6$�j"k
pM���8�'xc|��ơ
P"���^�\��ʂ��T �;o�A�\��*�
���	8
t���� `�11��!%�?�0��jVCعʀI��:k7 ®�����v�
�z�
�/��fS��h���-,d��*\>��Å_��������v�$e��{���g
R~ w��,��
�g��8AN����2 e�>���ד����x�> HjH�?������
H:'J��=�>P
�b��/��O5���K��
Tʱ�]��M�x�)��ގ�~�3�d�G��;4���Yl�.t���=
fxV�0�unJ�q�MzԬ:���J�y�mlf
+ƫ�l�Aۀ�x�<
���a3Nꃡ��=,=�=�#у�xZb�3�y=6uK��-R�_��zsk{
�����݁�}O"�`8�t��W0x��
�\����}�|'Zw�6��6�XB���#W^ὁ���*����NjmmV�^p	���xdm�ݯ !w��Ĵ�A����_����n�<�| 2|>|�a����gt?�
��(N��Ѷ�^���Mv�g�}\
~@z��;c�������N�?+�Q
+<.�������Db<Q�2��n����>j
�G���
+endstream
+endobj
+1310 0 obj <<
+/Type /Page
+/Contents 1311 0 R
+/Resources 1309 0 R
+/MediaBox [0 0 612 792]
+/Parent 1280 0 R
+>> endobj
+1312 0 obj <<
+/D [1310 0 R /XYZ 86.4 726.045 null]
+>> endobj
+214 0 obj <<
+/D [1310 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1309 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1317 0 obj <<
+/Length 2984      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[o�~����:�2�Sj� '�$hO���K�l
�J]�����E��ח5��I
���7�
�F7��?����OBG	I4���uk"#���.��o�����PT�>dͦ��m^��k�Uu��b��f����_����U��Wۮ���������g
�
�(K
mvg��N�-��Q"�8���v�	��TDg�8��u�x��D�XG:a��^gi�>�ai�Q��'U����5eU��a����mڪ��|��Z�W��+.�[3F�,��������H
�h��s�/�p_�W���Ђ-�|T�]�o�ג6�n��Y�fy����ҭ����]�5�k��1���l���q�tU�g��w�f���M���v}�i�?L�DJM܏��n���&+�:߸��.��@���wv�C�R�S�Q�
<v� ��j
��d�5n��ܺ�|�/�

b��
�h�ކu�a��ҾW{�lV�����R�� u���W�%N�njи_��C̒qL�҂�J
�-A��{�:�+	@%����n�_ў`DĽ��;W) A���,�X�ZW
l8�*�r[/��4ӫ�k݈�:�{��^e [...]
+?�̩�񇊓D
3A��0)��<��`
+V��
�:n�
+̴7A �n�vuF��F���9���m0/���6sv*�SA��N��
��'��P��sm����ss[�۽{�r�V�۬q���ѻvT9��~���}�I
�06j;~bԮ�v��
�WZ�:�G0]!ĪLwY�`.�E�saZ�e��5��	�´!	� 
+8��rZ̞B,�
�=_��ev�kr8
�u%<˄����y�`�A�ӕ0Vi��_��X���	�J���%�
+��
+n+��c��=��X��L �"��^G�|@�*
s"׳��|��e��O�K<�?�N��G�\
ж���k��a�0ǟc�1hơ~�` n�W>?p&[�x������7{
��.}3�.4�6�`�fr�H'���\c�7�k�m�(\�$�ဃ����W8���d��
1��9$��x�%���د��*�S^�^
P��f��P�ݹ��mx�MH�
�b�'��l&8���[��l���tcr7,C���r�T����2!�Q1
B)��DŘ!�Ib���U�9zW����<�>T#g=�D�
�����¸�a)��>e7	2mm%qj
���ݾ]�/��
Ds-!�}���Ҷ���� ����a z�3�[�q�
D�NG���8
�0�V]�
�k���s�Av�`��-����g
�$ ��8~�!Qi��
H⊿���P���H@�c�\5�ΣҰy3-��,��/��l�P#?1G��'0H�(EPA(ĐWh-UJ�~��mn_Wm5ټ�r��ω [...]
w1 �?��?=�u��s4��;����`�gqyp�$$��p�ڄ	m)0	)b�X���G��Q�f��!a^�{t
�X�!(�bgȚ�EI�����pGyԤ<��!M'����1�7rq񏀺fD�Q���ڗ�����gx�
j�?�6wl��
�J��ш;�äI�1�����w���)\-a��#��@���s#N�5�0� ��z�`a��M�Up���\�A��bi�r
;�a�*���#�
l��WIQ�|

��GH���A~_=
gG�F������UI
1tsAۙ`�<��
�p����ڻ�c�X_�6˭�����e
@1�-g��� "�
+4Kf��
�NN�
+���+ʈ�Q,�lH~��UHl(�3cx�C�Ъ
��
z�


+���J>sF���(���	�#ek��Y���&�0��	ʈ�|J$��쫉��S���?��ٮ&uI@>T56�H��6[�� l�!}}�k�к�%�Q�ES�#*�29
u�N:��E���V�="a�+��
���b�j��k��
1
ELl���	���� ��*�W%�|ڮ���
b�ظGk�n���������V�=Px��9����� Ե�������r������z��ӏîvy�:��U�oW�a��4�(��S�V၉G
+�n�ϓ
΀�s5�
��[�Fm]EVg���� |����&!

�
�ؓ�1'�I�{�
 L�
�|-=�˴�;K���g��Ѝ��9:F��
ʰ}
���͞�1����`7��d�&&�蚺&��ȓl��6�k�΅����l�a���l@
�"|Mc��u��M
VA��
 icZFA�͓̂�x8kńx�]�
,�/���B$�0�85�xB$ݴ
��Q�f�
(������_=�-��	BeWN0	xi��q{����c�O��2�
+�V}I�SI��NFFnl���ֱGH�ї5��=�_�&���đK��
��S<�ǡ�}�I
C��ob� �����xrC�
�ɠ�������q�q��r�{
���Uws�[۾��
6��������ZǍ��ϻ|k
�7�v�
�p����=�R�(�lk�
h�C��ȱ���f�Ctȫ-����|�gCz���&��
��q���(�z�;��
��C��2 M�p]?��
��Q<�o}��p��?zQ�#F�?-	:�Q�0��#!�Чv�1��8$`
|�=�O=lH8�M%�����>�纐�qN$���MWn�hg�C.y���^���¬[��1;��
��h�������n������.�]��Yf
B������s�{y
�'�7�&lv�i
�ʬ~h�����٦ځ��:�	>,�D�C���E
�vʭi<v����g�f
�Z&��O
�%<�����|��û�],�	�1�/�8�J�I�JZ�$%���Qu��S�|�s���������O������,�i��R
+endstream
+endobj
+1316 0 obj <<
+/Type /Page
+/Contents 1317 0 R
+/Resources 1315 0 R
+/MediaBox [0 0 612 792]
+/Parent 1280 0 R
+/Annots [ 1313 0 R 1314 0 R ]
+>> endobj
+1313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.801 437.184 127.523 448.032]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.691 70.558 214.414 81.407]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.1) >>
+>> endobj
+1318 0 obj <<
+/D [1316 0 R /XYZ 86.4 726.045 null]
+>> endobj
+547 0 obj <<
+/D [1316 0 R /XYZ 86.4 61.537 null]
+>> endobj
+1315 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F49 566 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1322 0 obj <<
+/Length 2840      
+/Filter /FlateDecode
+>>
+stream
+xڭ[Ks�8��W�KW��
��
��'��<��㪭�
��Y��P�3���
�)Q�e�b�b��ǯ
:��O�ɛ��ܜ��
WK�bjrs7�T*�D3K�����Kb��7��]ޜ�yF��tB'FR��&��ٗ?��
��6I	�f���-&�[��l>�>��Y�
�!�aE;4�(#���qsnx�}�����D���
!Dr�7�i�*����|y�tR��TL��X-7�V�٬�/�I�EV�3�㷢z�g��Xc����h^.�{^$��z=/ZBl~��6����Ԃg���v9+2�	6��h刋r
�V�)U�P3QZ��辀smW2��cň��o��J���	e
L�0�"R[���U1xF$o_��iX�Q�`Z+h��9g��5\�$߷GpCX�F����m{ `G�d�ͷ]6X�U�
�'W[>!2��ߞ
�	/0�>ן?�~����~��S����h���W
��8�M�n/_u`1Ew�JYj�I͎����ٞW`x���қ�@7=P�W(З��M{�}��P���F�`��'c���c`���$댐l��<����w�.�p9<��
寋MU_�1�.�Ū����:+��<��;��2}����͌0n�I{P|��3E43����s���
+�Pލ��#8
�4⸩�����W=

��޵�
�%(wH�<de/��w���MY~OVف_(̵��b
�d������pC������yu��˗��{�;<��-�e��6��
��@w�y�
�xrO�؁ܔ���|����
�*
�y���`w�҈ݦ�PB���>�}^���M����.���4h�z%}�rY��[�5!������n�x���!��@�`�d���6%F����¢Hاb
ŕ��[��1>\i��ҫ˛�W���� Ӯ�EK�:�:�D�	Z���E�Ш�2Z
F��*;�
��(�-
���x2�A\�1X����+��n*}������
H�rDtS��M^^�������t��V��q=����E�6�S=�=Ye7vu�����qK `���(��,4�_�P��dZ�s�`�O���KV�D���O�.�rt��%<����n/@
+I���b�4��v4
�Ԓ������`�`-#\��4�5~��h�b S�G�J�&)�r[j?o����~���7�a>p.�D�Y$)��2}�E{�4��pt* �\
!�ԬOn2
+�1�)�v�d����m.��P�]\N(7m�l)�)�����M^�:���ψ0������#�L��
�3�xc�qF�b����oؗ���'�b;B��B� �,�
����1:��O��
+
+�@���j[��De}괙��
�F�
iE
+�'ižd
��
C�R�=?��R����jQ»�cC�BJ�����"X�ݸ<
����e�W��q����FO.�
����%��N��2�(�.0��sw����b|TL�C<�<C��{�޸
�xAc��nR�w�����/�b�]�*
+x
MDWҶ��MUfӪ#�
�2F���u�Dh(��`B �j7�H�n��2K@�g����˻l���2��n@>�K��^uV��~_��
+ٿX���B���Ζ���Oo�&_���V���՝0��� !��Q����9:�<P��Q�GK���j�S}��i䩦���Y����<gP�Xκ<J�8=�p�%�����c
����w�U�g��
�M<�d�� !� ����{ ^�C�4a��l�҃,ĉe�.\9�+.�3���Omzwo�P����_Ŧ*����7�Q����P�� �Hڮ��A7���LK��mg��
@�m�ԉ��}�Zw�a��Niq9|>�
��ϰZ'3�i��_m�%���SXTax�`���Lw�$_�a�2�ҟC
-y,ᓰ�.q��\�(�ڞ���0�E�p��Ys�����ʽ�
�=
+��2s��AL�q8���3��b]}?L������t�|���?��O
�.d����֧y���87�p���"M���p��q�zYܺ��/������lYz��!w�����ij����tq;ǩcq����x���Z�T���%��H�S7v��i�c��h�$�Q���8�6�$��2G�����uR�K����h���j�`'�v�UY�>���P�+9�r	P������x����u+�U���k|��8�p�M�1��f>��:�E}<F�'���`ri� 
=u��D* %ؐN|\%��J�M���(��ntk��=�l�w

<
+&b����6�PJ[�'Jޕy
��?���[�Q�֣�&��o��r��D� )ڦ�c�����ء���M�I/P2#��T�B/M����lڳ�
���#�Fn�j�-��"�,�����1/����h�vj8vp�U���
+V�Ë���8�:)n��5m�l&m����ۢ��YDB*�I���-M�3�0;a�O�vV5(�pM	Vj9t�ʃ����?��
�	�c HG���	�F��B�����2q7���o
���mq�W�
F���W�p�bz��,�@u��OC�P
�ƞ���@�� H�Bw;�z*X�?����mkM����h%	
-���~��6ۙ2��v9�
p���f��ƥ�Z-�߱�-�
}��v�����O�(�����D��a�jUA�p��� w[Ứ�s�D�B�^�v>�_ts�68̶�E�e�e�CL�!��]�=�-D=����?LaCJ����|_Ԃ��	�\g�z����YU��!�����f
cy��ŏ6;T*=iv��4Ě!����Z�������f���4pG#���i�26�|(�n{A�ąN@��*��:4���d�:
��>!D��O�
}�
+endstream
+endobj
+1321 0 obj <<
+/Type /Page
+/Contents 1322 0 R
+/Resources 1320 0 R
+/MediaBox [0 0 612 792]
+/Parent 1325 0 R
+/Annots [ 1319 0 R ]
+>> endobj
+1319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.073 462.148 492.796 480.315]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.1) >>
+>> endobj
+1323 0 obj <<
+/D [1321 0 R /XYZ 86.4 726.045 null]
+>> endobj
+546 0 obj <<
+/D [1321 0 R /XYZ 161.495 696.212 null]
+>> endobj
+1320 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F55 673 0 R /F48 539 0 R /F49 566 0 R /F58 1324 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1328 0 obj <<
+/Length 3338      
+/Filter /FlateDecode
+>>
+stream
+x��\Ks����W�U�ȼq���
W\���Ut�}�(�Ą" �J���=� 8 D�J�r@`�������3C��݊������������V1����2*+�l�8]]ݮ~�
�\3.���M�M�},���r͍��Ox�Qy�����}s��/��CW�
v���W?\|wu�

+������j�y���w���7?�H̭Y}v�
V�ۘ��n���o�һ/���r;*��R�H�IP����1	Ж�V�J�s�4+�S]gY̵^)w���W1�[���ނK�>����h���{L.itp��<����:����ܤXLW����GZn�DX�&-bF�wӇ�!`8�4&\/�+�:&Tt��{��U���o}Զ�|x(���đ0N��
+	��
�!A�Xkun�
LIc���<��51��L�Q��r�h|�!%�
��O˯�<y�9���4	�lnB����mR&�k�d��_n`BĚ.��������	�ЯFB�l���HJ
F��zX�<
 
A�w�/iy����ZX��x�#���2��1X��2���Nb��
��<Mv��c���	k��v	
v����ﺺO�h	i�/�Gp1�����9�#8���]_]��2˽�O�@?�_�-ч�t����FƬ�.T�oU�' nB2���(H%EqxH���A��7�Ov���Yx�݇F���|�s���C%gM;A`�D�F
ϝ���1�Vl[ٜx;
3��
������(`Z�ʍ�4�G�u����W�(��[è$���N'>�@WR�a[=ei��8�c��=^�уE�{BU�|]�D����7����
ko�!1�H�L�O�C��&$7��4�M�Eu[�5�n��q*x�ɮH�m�Ì�����$���mh+���$�e�jIW;'G �k���
��N;�)�a
@?��
�:?�s�sm�恏���%&%�> ��
L�Dg܆�<�����8g�ov��
�����6���Læ�upE�ۥ� =�)��)�Kl�� �/�VY�oO[?B�G��`��Hڦf�ƒ7�[
��dWCW[s
�AH��H
� �
�3��ĤN���1I�`F�
�?��-as��SF3�b��V3���q�

By��%:���|:Q
(
1̈�1H�$@hp���J]��m鲌�� �T at +��uj\Fc&��r&���]3��/�e0�
+F W[Q+�ҍ3���n��WO�
2i�(����Z��7 ��9N������XdD�;R �a[�D�p$��7��
+
u9��CW�;�*^�vc�B�
+�����Y3RPȬ�I�b�!!�m��&$�&ǐ�cHi`BZv��

X��p���F�7%(ܐ(U�厴UD	>�ϏD	>TD��
+���D �9½3"N|��4��6� �����O\�42S7w4H�i�;Ox������O
TC�}V�G���-Pi��ݣ���

w[OFz������2f����Q�)˫Iუ�'�a����ͳ���/G������1Qr	^ 4s��/�ff^����Gnj?

���� 4en���b��,�y�su���/���?8�1�8º�L
��
�sE
������g�`�=@na�*��&��<��Fa��N����&e~9��zy3��E���+(ϧ"(L��Ȱ
�ݼ����>0	}�O�4 
 �ʆ�$��LLuc2�Z�p��1�&�j�2����3}
j�6��d�m����TS��֍��!�*'L��x	�
�?[&�l�����Վ*�B��>Fg8��7���<:�!�4ܢ(-���Tk���
��Q�j�P@��jPG0V��8����E��@�3r�j38�T2u:�&VMu&�<o��tV����t�2�Sw��
�f��W�QlH+#�1���6	� ��l ��04pQ����W�a��D[1��!$4/�1��
y{���5�䋰XJ�$
���j�����l�r���7�A�	K2�Ԛ��Z��c�Z�q�� �`��t�8[�0Ǡ8�+2�1-���
+D
o,�z>�g���W-�Axτ2�MD��D;S�� ��iǖf�t����I������c��	�;��@2����1���N�z%����o�O�rbXlYc�(䵐4Xtl��^
h��u�2���q�?���k����禑����/:B7�u$6�f���N��?���p_��:�LYZg�L�2������Ϭ��A?Z$����ųE
fr�9�W���95���4�c�	b�T�桮�@�UW�:=����
髓�]�w@ =�nN!j�y[T/�z�j��eT�Rf�1�w6hdAVs�7_�3B
+A�
+y��%`�u�
:Yy�<�Eh�	 �
)�Г�X�M�bQB
+����"5�8��
+�T2VV�_��6F��f�Y��I�'Q!b��"�+LL�dф͘Ћ@n���o�O#����M��0�A���ֈ�7�M�{�
z��,�98!@r�"��{��a����-���SA�(���/�2;�"�H�U���
.���[lwS��5v���x����o�*�A�P-�Ih
h�{�ڀG ZM�(�ji'���=��t
h�
 ��n���
����}xqҨ׭N�
ҺCm����Ӓ�
�!�5B�GZqdPa���cj �]K�����$&ӏ��Q��@�;Zm
�c�\�j�Y�߆eZ��ٶ5�<m�3��3���p���%|+�
�}�"��t���͊�찻�m�=���ӦO���
�[��`��I`�[gM���n�X<
�B�I�T[�u�e��ݻ�
~s�; 1@�
��p�d��Xx�I�.u�.uT#lj�y�Ը	��3,Vdr���F���0�#�=Y��ʧL����V|*`j{
�����|'��EXH���0�1Ȩ�Ƴ���1
�T�-kG9�u�	�N��mr�`�Qb�*6��b ��љ��M�a��e����V2p��J��K
-�ߔ5H�	eD\�h�[^�2�V�zZ
ve��� Bf��(��i��ع�W��ve�\A�
��w�m�Ÿ�����M�����S�@f)���T��$TA3�)�;=^}S� �v6r����[ZU��v�?	Og�ޏ�cKf핞-b��������w0p�+���
�+�L1zOms��������eǖ�@�/A
�Ǣ�-���]�Ł���"�
��� 
+K�4�H�P�+ڃ�?�N!�h�$���=P��A[F5��G�G*J:QT�� ��
�_
vCŝ|3؉A��G@�~[�/ưp���5�|���D�$B=^yL��
B
襙��ZxK-����������b8}.���d�(��_�@>.����V��"�5�
+endstream
+endobj
+1327 0 obj <<
+/Type /Page
+/Contents 1328 0 R
+/Resources 1326 0 R
+/MediaBox [0 0 612 792]
+/Parent 1325 0 R
+>> endobj
+1329 0 obj <<
+/D [1327 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1326 0 obj <<
+/Font << /F36 408 0 R /F58 1324 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R /F10 700 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1332 0 obj <<
+/Length 3446      
+/Filter /FlateDecode
+>>
+stream
+x��\�s��_�GyZ�����=�I�I&�I�y�e�:Kg+�$�$����
�?@�<��̴/MA
�b���.@�����~�׫�?�M�#Ns=�z?SL&��pG�`���짹�?_}s���Ň
?�36��Hh���zv����g:[�7��(�Ξ|��L
+G8\��~����:�ˡ�8�r�!��BRM����R�-#N�L��]ٙݵD�
'˜�����7��%w��>��q��\����-^����x
+W�K6�]7M�� 
+�>|�%UZ@��4'����&
,R2S�Er3I8�L�-�řc�
+3I��B��v���
�V̗;�+�_��7���i3�>�G�0$�c�B�r��FH���������T��Of�n�.�o�t�l�0a�7;dz2����׻�	��@��}:�k��r��˦�o����\(����*ᧃU���r�\l� %�t����,›"j|���`�֧#�X��;\�� �n.����5୙�-���-�V���p%am�*8L4�hj�̪�P������?�1~
+#,�Frb���wڇ��@U;_�l�G��>
��p�l �����
�o�`�@+�@oС+oF��ȝ�R�3-f�)46aD�4�
+��~�Y�}�yI$Ul�}n�̭`!d��sh +��}��
�Y`t��30�`4
�*C�M�X�aKm^�G�9���43�1U�$F�ӈI��y��ϑA3J�Q�QW	"@�R�W�'��4d����ԣ��@�
h	:|���U��˄Ȳ	`�1�
yK)m��,�0r��B̯�6��2�=�������b�%:�K�}��2����|
+\�[ޭoP~��_�p��|�
�)������Q
�a�3)ǻ���*o��\����P nݿ��O��]�Z�"k�k
L��9���ў�6A� qs��6�p�j�>.˰��~XB���-�������v�ݧ�!kw�@H{�bB���A�D�/�rL
�]4FA���)hL��뿬V_�w��r�)���i��9��@݌�ĵ-�w=��p;ԽF�� >����"Z��2���Y�k��<��{X/�O/�k�D�~��3�C
J ���\�k�)*���>W<��C
 
�� uR%`�ҙ��P�a}z<쎡G�a�����)�2f ��*�mv��v�M�a
����'|
��Baa^QU�C�e,N�4ca��Xd��Db9�e�kW�K
:�RD��-��C�/U8$�D�xX�ID�H""`���
D�4r��y��>�$�$uW��3u�f ��ļr��_�O���Dț@�h�]�B�y
>b  ��81��
�>'x\�r |�
+|��Qw
νY� U"�,�=��r���c���<\|�T�c���B�����nyx	�������Q��ǛS��H j�O�$�X9&EJ��X�/1��"��gi4w���g�
��
��d4��x2���ȼ��C���
w6��L���̡�^�
+1��|#w��r�a����Q�0X

�;ãO:�}�MkUW kHJ����,��|��1iݝ�@3
ͦ@�r��o������O�k�-宷��~����t�h߅�Ps	�-U����lE��2�Q
���:���ܗ�����o�m��a����V
�0�t�VA��q��Q�[$�P��?�&���e���t�`��H��"��M�~�

ˏ��8�9ױ�JgK��uXb �K���H]�b3n'��J��?
��4�N�l��+}��	���4�|�;?!�&|g�5��c��
�]+���
+�@��t��2��x��k��ۻP�]�������خ�������� ���h��_ŋ'&ʼn���
��%&�#<@JA(�)��.�5�R�,ŗӛZ,8�
+� 
�*ם%5Z*�W�BU(���5�Ӏ���z�	՝& �vY�����B��)Ԗh��:_�5չ�0�B��s2yJ�=�}a
X�V�VI��NZ�g%-�-2K+9
�T4!�F����O^�*�U�(eS�rH�Z ��2+񦯁���%y�&�E]�펬%t1(�Kև�����'��I�H�]Y�fr��Z��"D�Y
Mp�	."R���
a�
+��j�
+O�>7��4l�mj�$�&�k�
+����1
����$��:c`,c
���-Ch��!|Qp��q��c���@�p)� )�h��f,w�EVּ�0���ƙ=���Ci�)�W:�S�ܺ� AP�u ��wx����R!�>nv��2�.��B�n����Ҷ���)��pc��
J�����1�\e'���
�آ��r�} P�����(�2`�:l� �x*I)�q'�$�G�Q�d�Y
+جZd��šg
r��̻JH��G����E�GX ��N�]u+w�X ��ۏ��Ɯo�J^ϲ8Q�4�+��٫�`��{����{�W;{U�WJV�;�뀪�qs�k<��
�Z��z��'r�8k6Ā�t�f�<mf}y���ͼo
�n B	n���B
����RJ6�����J��o6�v�<��$���M�'�;��
���M
�@�U�<s��й71\F+)
+��R{�-
���TYI��	��:-4�>���v'�ď���gwbҪS؝��b� ���z�ywB}Fi$Y�Ha��
�-( ���+����``�����魅)t-V`���88^�c�7vR�8�5�����/<��a�p���
똨�.�
a���������f��ϭ�N⅄>Ê79�
�ħx��S9GjZ�ڃncxҚ��T���ʌBc)𴫮3Gc
j�� )I�L�Y{�>��_ٶ �j2m?�o[f�M/Fe 	R��ςH��͉�gz׾9�"i�m�Y�R�1��mX���+�E
��SS�J��߲4-�B�<Uz�M
�k�����}��6�����T�:�;\F+��Ĵf-	Rs�+?��b���]�IW&��q0��[��1T,R��ü@� 
VO�=ˋG�E�@��[z�a�1g�����I2X�CW۱5�y��2�:�8�6fEH ��j� ����@~�I"H���/���2l!�U-��C��	�	�͞p��A�&�$���a��4ϱ�dT{
,�=�H|�,���,Dt�<^D%�/<�g-#�5��gӢ�������
+l>�Uu
+����(����U�T�x�Sy~���N����m٦�������3��]8ڜ����D�b*�Os���R�q��H�Ƌb�a���M���ma��c�
�Ɠ��S, K$�|��*� R�MB��� �����&?~|���X�����~ۃ�^÷�����l�Jx���Z�v��a����ms#;��V����vW��
��is\����.��0=�P��a6�]h�A�A�}p6�2���
1߭���e<,S�A>���"�r�������)�k
+endstream
+endobj
+1331 0 obj <<
+/Type /Page
+/Contents 1332 0 R
+/Resources 1330 0 R
+/MediaBox [0 0 612 792]
+/Parent 1325 0 R
+>> endobj
+1333 0 obj <<
+/D [1331 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1330 0 obj <<
+/Font << /F36 408 0 R /F58 1324 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F10 700 0 R /F14 627 0 R /F1 746 0 R /F13 706 0 R /F7 701 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1336 0 obj <<
+/Length 4094      
+/Filter /FlateDecode
+>>
+stream
+x��\Y�Ǒ~�@ľ��޺q�Z�e:dj-����azf:�c�f$m��/��O ��}a_���<�̬!��M����~��f�
o��\�N�)��
+_�'�7�N�zy%�fj����o��m�^���NM׷t���}o�|����?į�5�bz�[�/�u��o�_��c]6��:�p�L��������_'���M�¸�DI_�-&^��Kt��a����G؂s��4��8WX��̀���Z�	봛8��(b���vb�51oV	?�V��鮼K���n�K���Ŭ�ƻ��K>�˰JsYh��|3���'8�&#
+.�q�)8�c�@�6YU.#��ϖ��s�
&�EV�������gwIsg����}%?,�gS��H�I�sD��9��3([Xk����e��y!M#�}�yW���a�
e�,�t-��
r���������!
V�
�U���0^-��u�d�.�,���ػ�Fy)�{��i��W�����_
Q�gsc�:�A�Ǖ���B��	�<����D$s�!�m
S��	K
^x�� ��U
q3"�4�
\(L�A�!���0A�
��WJV(��{�Xη�M���Ha�7J�LC�v
����i��nbz��M]� ����+Zhr�-)��
)��k�Q�Y�A6Z0B�#\��~b�M��3k�T.L�0Հ�D�.�By��L�O���}��æj~���U���pۼ��ܬ���K���Ů������z�d
P�hJ��P��[�L�`��AaT�O/fqf��:
+L2Q�����С
+�xC����cӊ�������}pV�sL$
�m'��^^�6�M9�R��T�e����61!7���ċm.���U�D�Y�aX�
?2�rR�P�4�P ��}U����f�������6��e/?EK��.��*}���nE8��`����;=���o����}�a9u��P-��.��=#��I�졟��|Ɣp��5۔q��z�L
R��w�9��i]��!�{�� �(��O��D
�	��L!���n����@��ʆ�5��橪��p�<'��xI>�2PK�Y��)���s�e��`ŏ߬W�v�Y��a�u��6�}��g��
l�A[��O�<O��^�����)�r���/�a���)�.�ق���WD��Krt�FLAn�v�X���S��m
�8�V�M�]��S#�38�0���xc
+��7��@� )Ӆ�@Zu���_��y6�K�O��=�Rp_e�<i�QNd!� �Ѣ���L賙a/�
�a�1��B!�z�/g
+�<�}���"T�阢�8�W8.N1E�b�
]�3���c z�a�
K����ԋ��?�����A臤Я
��6A�I ��<vv�m��mT�5�/b��>)	B���Ta�(a�b�
�\F�X6�Xr�A���@cz��E�v ���Ӡ,4̇); �k��0q�>��8{�(�	��J(�F#�̺�U��&���"�
IȕB� ̲�n¯�@�]Γ��ѩL�����X���
2�w

�z�vEnۍ
h

+(�q�]���]��!��' �!e�O����l�]�fc�
����/��"�n��ʳ.���	�
8>}j̕'��f$��!��^� Q�T���=�TC��\^
+
c�{�4Q��nc��nʮcP�,*)Mcc���
���:d]���j�[�D���bZ=r#u�R�I���
���鎤Ng �x�/�їȜ���t"s�aN�KdN�?��Z�}��V��H���m��`�e���d�D�G�.���6�� 
(}Z�)q�)W�S���Y3�%�g�NL�l�?�=={���2�ZR�M��Ak��	��
�$YV��P\&4q;�K�r�N1�-�8
<���]�U�IE_6�sT�
���T��
eo�n�`]�
"��	�|����f"2�L]���ɬ����E�,�7��)�⛸�X���>&�
O5�L��:Cڸ%�P�TQ��%bQ0���z��9r�	� �	X�����>�M�ֻ9����4�z*sts�ޭB��_�i���1
�,f��t��R�P��a/I<lw��w�R
+�+���3�8#��4�BX�o��p[A�|��5�)��1D�Z��(�U���]��rvSn�K��"��0�V�����
+h+�8hQ���h����F��lȹ��͙��oe]�g����
+x�P����I���3�h놙z�1���w�TDQ-.
T�����n`�P_�hr
UW��Q��N3&'N�N�c�j�A&b>���
t1PQ-��0�Ys�`T����Y�8�RT��S����0ݷӑI���{
+"ilt����b�
{ ~�Q
J]�
,��	S?lB
� t(�& ��ռ�&d��zoֻ.)؟	�q.C�ȱ�{&,�,�W
7(��<
RX�6�$�kR���}s��Z�r��q.ut.�Zb䳻N�:aʾ+th��Mxq��F��3d��{k�Iu�c�ln]�R����Z�J��h
6¥������Y� 
����[�V�)��j>���Rز�E����DZ������D�?׮��a)�	�~���$�A�����Z
+�w�j��ҥ�q��K�Ww�����nf��u���"�qr²o�%�l�6��P =�˨���k
h��9�$�+
�
N��)�M_�~_�e�T�9�v��E��.��}�ʸ�:�yT;�*
� [I�O�rS�W-��w%����CA���.�Oր@bSsް��
�o�ں���1����ST�o����8}���J��چ�{�&�!�*Mu�� �7Z�j@?���?���7�l�
��n�U��4�_e�� _�v܏R�":���1�:^;xKal5_�B
��O�e\�:ZO�d
.	�ȦHD/�\Xh�k@
�Z��OB�pR�
���
�T�9��E~!�9%:6����C�G�*;n�Q��X+q�y9�o�u

�=n����)P�j>/�4|�,�x�.�Q6z/�t�	��#@j~:4K`9l:�ܜ��ޅ�ܜ�Ͳp]Y�s��޹�#����q�ށ���L��3�
�z�YQ����4�0Iu>���b�e%��2xG)C��m
�
r����/@ơ5A��������v�5:��%>�?f8�/A���Y�CҤ�
3��	}�����3�:%/��х'����H�
+1�0�'u�3�I���B<wUJ���&>5^s۸�������fؾ�)�?P�F�:��3��9#Gzs���Io�T��2h*m�	`�e�.M�+��c����cO�߸�� �Rw>a_Y��@ì���3� �
S1+�j�6[�P]��u��E9�:f^��r*��O9U��PC�ڗ���F]da$�����`�J'W�6Za�="t)E8wy�
HIF">[�v��@�;��Y��x�IJ4o�m����%��+�n�K0 at y���8b��GC��E(�5�_��ڞx�W�:Çя��
~8tC>~J���p�=vwyHO��Ϯ�0���G�m
�W�S�tJ.m9s at i�ᖦb:y���;WC |�-\bQ�D���ӛ�7��
%�E5p�K�U?�jdgZ"0&T:�
��h��F���u�-��
�J��3�Y��X��5
+FԠ� �J~�!�߽}���_ra��_DD�1�Aq�YW�›=tS'd�$ �${xn�c�P�.�.b?�Òr�%��a��޷��`�l 23�F�^
�4*Ń}��y�A�$4����_'�~%�98i�g�I�
����$�;M�S�Ĕ�ձ-����p�|�ơ��$
p4H�R�
�i\�Ӡ��' �� �a at h�:��Jc.@�<(֞�NP
���^
��1^
b	�J� �A#�_l�*�&
2"�w
qP��R¯
++��S�>y�M8��I�?������X����AP��k2xV8NWY0?��@�c�����s�,�ذ���ۼ�S�Y
�Uԋ����w'��`oyK��XXQY�v��	'7�/�R�u:(,���X
���_����hN�i@�gI5"z���6�0 l8��Z
�p�ꝫW��e��v��e!�=�vE�
wDB���9's���m��+N{	j�O�\�%oU��w��Rχ�3�J�~��"�ф
+endstream
+endobj
+1335 0 obj <<
+/Type /Page
+/Contents 1336 0 R
+/Resources 1334 0 R
+/MediaBox [0 0 612 792]
+/Parent 1325 0 R
+>> endobj
+1337 0 obj <<
+/D [1335 0 R /XYZ 86.4 726.045 null]
+>> endobj
+218 0 obj <<
+/D [1335 0 R /XYZ 86.4 395.998 null]
+>> endobj
+1334 0 obj <<
+/Font << /F36 408 0 R /F58 1324 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F10 700 0 R /F14 627 0 R /F38 453 0 R /F16 397 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1342 0 obj <<
+/Length 2902      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o��~�� ������r�Hs��
���C���Bu�h�������RKʎx��Ŗ(rfv���of���
goN�69y��� #��&_3-�5H2�Mf٧�D�t�4Mn
���.>�����p�e��������pF2��=�����������2���٣�s�1ę�O����	3���h[ry����wޘ��nQ,��)��2/O�d4_��1B���7.�L �e�i�Dk�p�S�i!!�a�ICQ�[�]&����fe�zTZc^����AJ�d��Cʕxw���0
�2RE
EX����6T����]|ܷ�2�eC�@�BR�؆w�o&�&�J�tEѫ(���z/?c���=���ژmQn�G
���
�1��V� ��$vo�t�1�U��#��tL�(����$V�My�/��&��a�
��k�~F�c�����
/�(X�v��fgVJ6f�!�Y6�2"�(<�F�|�H���
;�)���&*�
+v�
0;ì$J��j��H1�V��Hk��`
�ߊnfCXB��Ȓ4�zE�������1�Ƙ�`���X���9 at k �<��J3FZ��
�]3��l�6ꐓ�0q��P�4%��	�[�3[/�j�ω���?͊��UQe����������U7�k}׫���I��_׏��Y^���.5��TZ�����ӱ.|��T!�����/^Cyݹv�>�
EJ{;>c�Z�D����I��	�U�� ��9QX�
y
��W�	҂��s�)���}�C\"�y����y��|�Y��p3�/�/�tZX궭rǺ�C�����
��|�/M��;��{�GͶN5�
�7�n���ߚw�Q�J
������b��

+ְ��"%�q3��C!OXIB������;�P
+M[9�i� ;��� ���FU��2$j�9L
	d0�7B*D9?��@�Y�bEa.z`M�D��A���r��y�l���@?�>�
+)����[rT��ٽ�ʙ�R�
�PI�
��p�"�^��'�(�Y�޿y�
+�P
۔h�6"�jT��4!N���	���0�S���(��
I�K��W �€	ڵ9*�)�4'NQ=�Հ,��!��@""�����<'��!a
 ٯ���ph��&�‘��	
eI�Lj��H���U����V�����DɢiP�)e��M�������z�=���/_	���B)���Fdݟ1Ʃ�bdm	�כP��w_y]Q��XҾeۥ˖i�o�n�[���9��v�Mƫ�؈H`��~���_��@�o���殺fzOȨJ!���.���D�!�ā��<N
�B"��	��_�b3���ġ���r�"ev�����Ѭ �W���J��<�ەp�+7�m�݅&t�
w�T�@��h<��o�b4���ɩ�5������{�(Ӷ����~xs�}r�2��������%G�|�
+�o
+m}]� ����c�~*o��pK�L���0�=}
���%��� ����u�{�����v�!3�l<��peg܉b��/� $�!ջ
#p�nP"B�
`�>��Kpch�)&.%�i�.�$
��/Ŷܬ�%⏁��
B�m�0�hCo��,!g
� �T4�o����O.�S|Wu;�
�q����g�5R������w���8Xtc.�`e
��@�Y,܏�
�p)���6/�t�ރ��
�Uf��-�$��f}_B�n�k�	�n���n=�
�R��(N�q�:܏�EIX�Njⱻ[B���#�]��i�9��_MKw�b��tS�e~�W����-S[���C
X���[�
��T�Q�Rl�ڱ��.1;浙H�s��A�`�+J�{�
�� 8e�Z��曛�宝�+���ꆨ��V7�fg����C���`�'AWfW~�m&_�m<ڟ���
s���d��?v*�
gLqĸ"ά(��.�Ηwe�@H�
�P��$���h�DTt
�v��\U���������~�
��{�N�] ��j����N )w�$c�C�^G�������1�s|>�6bwn[����%��psb�[+� �� �^��*�n_R!���g�L��A���U������fǢt���Ec����G�ق�>�������U��P���c1�\���Ӟs��*�ťj��
[�u�f��pQ
%Msv�!��h�.��
+���.rB���>������{��;2�5
Q|Ԭ�;2s�0��|�<��u���m���v��V�S{�'ĽE�Sc�,
�|Q~�
c��
�1���fmB��V'����+�G�=�m��Rl\�J(2��&t&�	����g���u}�a�s{�tS
JY�|�c�I��c����*��F��n�%��6]���J����|m�U�5��mg5�
,��F�A 
��p��L@����ÞD&c;�QL0�$��h������@�
2�q�`�������
�U�� ��T�*���^�/���v�u���0���bRXH�vg!=�Fѵd�`�>Hԑ�΍5=�%K�[�=���
�q&��9+�2��ˆ{R
a�
q.b#��
a&qT6#�~�E��fLTƄjnu4������x
����~���k��hO�`q�
o��>V��v�y�m������ �>� ��Q�4���A���=�N��D�g�Yu�L�":�&�t��%E��-�
i���U�#�r at U�p��OgK�"��[��R�	��C�F�
u4��d�{
�g`�A�b� �W�#;�6�V�
���8�����N��1a+*����z>���~�l�V�y؞���)~h��
15D� ADUoH�)�w�����!�/P�$H����z!�R>������6a�P��f��KK���ۭ����؝�n��s�D�
+�}�	��}U�����V�
+endstream
+endobj
+1341 0 obj <<
+/Type /Page
+/Contents 1342 0 R
+/Resources 1340 0 R
+/MediaBox [0 0 612 792]
+/Parent 1325 0 R
+/Annots [ 1338 0 R 1339 0 R ]
+>> endobj
+1338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [102.579 474.868 117.302 486.823]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.749 474.868 353.471 486.823]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1343 0 obj <<
+/D [1341 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1340 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F14 627 0 R /F11 628 0 R /F16 397 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1346 0 obj <<
+/Length 3864      
+/Filter /FlateDecode
+>>
+stream
+xڭ[[��~�_!�����A
+���n�l�x�>$�bV��
D��hFv�E�{�!97���JOCq8��|�B�N
&t򏋿�\�|+�������O�&rb�#Z���b��������7y=_OMQ��3a崺ǧ�6�yh\|������UO>]l���/7�^�������t��u�RO櫋�~����vB�pv�ُ[M�p�Ck9�p���t�!�L�g�!�D;F��a
?Sf<	�w/�J;�ȷ�|�K,c�0
&F
�W&lG��o��0��1}߯��I��8��e]��T�e?��"[�/��Τ$
x8�m
���Ǣy
+1�ߔ�BN���%����L�8 �4�U���a�M��J�,|_"|�'
�ϛj
�5U n�.(1F�⪛E�iv7!�e�*IL4���x���bq9S\M�o�\n�~��BW$|�.�U�ydD3.��01ڑUQ��&���p���r�sB�٫�{�_��g�
�.���SQ>@�p�
+�ػc���1�VOax	��N/M륉�Q^������2�ێ��\n'�Jb�I:,%Rk?����D� ��v�@R�j�{㴙M�J���֑90\ϋ<�m�TF�+��cgu�dEٳF�7��bĩH���
(��z������S�%���̴��e/�8�&�q��)���9?�a�E�dA׿�6�1A�f,�
h� eG|���UbIp��s�i�D�k~@S�ƽ�O`ْ�V Y��k��y���y]'Di���I
+�f���G� Ȏ *~I�GG��y,�nC��aI�p`�
tSɨ����Wx��7u�`�t�ֺ�S��
#F�x,�9��)
� (
?�1�ޫ�1�(H��$ΰ���Z�k�zQ�LHb��m��nU�	9�Nf�b��ѡ0г�BJY�
?G(�������:��f��<'�֖P?��A��d���C�H�Eʴ�2�| gʛ�(��궙�]�k"���ks�q0U��O�ͤ�
*�
P&���=
����۬{��
��W���(��pf�A��e��� B�Ad�c��"H�}P�/-�
���n���
J��>}g;<v��Z��7P�C�j槚
�
+;rCs ��HM(���Z}.6
1� ras�*���њ���1\��+�><����T
�߇Yo_���&1����`F��҇p��ˤ�˶� ��la�����7��9�� ܝa]HI�ޫ��+6
�RQ�
D p_F��x�8��pm�	��_�s!���
상%&��N˪	��ir ��I��:��|����~�c�y�"�+&%E�I -
�ژ~��q���{����Ϡ��-i�Y	@��U0�����&T0?�b�1�x�z���W�%�]g�AI����/��0�	�m9��K��
�!]B�@���p移*�՛9��cv�gu��6����Q낎Rk���Bv��s,
��M���X�L1I
��<[��d�5y�
+�iX��#J
����-�H�팗ͱ0{o�}si�k
�OW��Ū���F��1�1�zᰌc�]Ճ���v2��ա3�&Laz+�d�C��Sg[�l�����G�7�ʱ*���
�1N%�n�t/��9�b���W�x���c�[ք�>�JJ`L2jW=G(4��o�&"!i
p'��KB��<�Ĝ��>��P�e%Q�Qqz�Nʀ`m݈н�� ������U_ɂ�,��
^	r��5tEǠ�&\u3�����W��g�?�E��v�r2�#� ˷�}
��2RC��5�P��$>~�	=عzp`��i^�_-�\�5�G�~�j�e^�����9�V�큇q۠�=FJ^͂b+��IU��jp*)�a5�AR��1����}�]"$�X�Ȗ��?_�ڋ8��
h,��"��ʁ��5
5���Б���
+�1�z�A����2��Q>T�H��r��,����m�F�
����g�8t�
v!Ls�y1~���~�u�H)'R2�?	y�
�
���E^a���`Wa�ٲ�†#��6�4�@�5V
,�!�f����2o���DZ���m���xu}u�Kg�j�<���7?��՛��4�d�nP���} ��ԟ]
��;]�j�kWp�.G��9�ē�O�TW(?���
0���-B�	`�H>�D�LD��0�q
��,��%|��|��E��iB�7��j�(H��-،�� &3���
f�P'I�#��f_����(��H��Q!�|@������]�kQ����1��ּ����ֿ�e֖:=瓀F-%
+ ʪ�ȍ�,d
՟�X�
+�L5��m@
����K�g���
+�
�G��߫��2��:<�C��jJ�(�.-ҿ����;
�o�]0b��f�b�XFzT
�k$�
�|����P�٬�vLeq�o�i�I�#����f˚����������f,
��3mhd��X>�N	�
+6DAp4Ψ	h1 ����ݨ��n�
����S j

0]���3&�Kl[�K�"��K'��~|��ݛw��.,���vc�uC�k�!Q�U��g�B�q�Ȥ%��@ģ',S�0���T��6��

ô��J��a
�K�0>H�g: ��O1���J��	����`�>�)h���G��Քg[ؔ
�ur�>�Dk�9� ��ӷ�
M@�g�1����U2��
�	�Y��s�����2�L'��
��0�;�J�#�d���!���� �D��	��.<Iѐ�	,@�u�I��A���bGKR�/�"��
�"~�Yx��z3o|f�?���ʢ�w at Z���ò�Ch󟗑1�Pq޾X��C��;�,� ��b�=*�tP��(�j �Pi4��b|�1|Vm}
��P��f�k���c�I@�Z�6u��jA��;�[�v�,BEP��d�X<�b
 ����/�ͫ�
+�ޔ�<k7m�27�����ݘ�@�k<Z_�Y<��'���r���V� 5�?�'
�7 	�΀�`G
g=n � +�����s	i�c�
c{���#E�>�U��g(�A�p��

���ܹ�ͭ
W�1��㶽��:�����;������Ƃ
�.���@Ao�a�kc��|l5�Q�ۻ�+P����O@;n�A�% �^�C��w
���kTp?U���[��W	Y
/����{�?��"�w���m�ZG���Ds�m|�ӳ汽o�
+(
%v��8\QH������<����t%���~*
��<�/~��N�$[@��:L����wo
D�XG�
|���MB�U��U6_Wuh��6�фp�qH�Z���u�s�n�ag�
��<j��ֳ/�$�Y
+Z�Pf�I�3xY�Aѱ/�� ��/h�%�.��4Sl���F�,���@e���@�K�V�cx���LZ�6*�ه�������*��C��_I
X�~�ݦ�ϭ�U�~��ph[C����	�Ό��]DJ]
�لS�<,0��DO
i3N�Z_}���&�h�@Z�ea���l�pB�3����F�7� ��"H%�A�E
��1�v�
ڲ�np/-{/=��@%�U;B͡^a����dȭSp��B���c��W��@�k"�v詸ƲF]<��qG���C�\�ă�J�����Rb8kc�6P8tAW@���H�"C-F$�n,�������{�}蒮 *G� �E{�6����g�
�
��J�0�>��s=-}�};77|o�E�=o]$�}�8u���r�ΰc�|ul��	.
$T#,��i��p7�y������&rp�.D��z
ހ
+3����)z���� ���o���\�


+�A�P�
�����3�Z�X\PK�/�~�5*�F0�*��6㫝2�_��c���E~_�y
���n��_�Ͼ�/����������h�L5���	�
b
+endstream
+endobj
+1345 0 obj <<
+/Type /Page
+/Contents 1346 0 R
+/Resources 1344 0 R
+/MediaBox [0 0 612 792]
+/Parent 1325 0 R
+>> endobj
+1347 0 obj <<
+/D [1345 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1348 0 obj <<
+/D [1345 0 R /XYZ 86.4 638.039 null]
+>> endobj
+222 0 obj <<
+/D [1345 0 R /XYZ 86.4 375.504 null]
+>> endobj
+1344 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R /F49 566 0 R /F16 397 0 R /F38 453 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1353 0 obj <<
+/Length 3156      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�~�@U^�*a<��TR%˲,E*
+"?�.D��p0 H��>_��.v��.$��{�v����uϐ��{������w?)�
,Xi{����L��
�*�Mz����Py�}�҅�_��bt�n��藋���_�=��1c��
��..>��{���Ǚ
+��9�\����j����?j����]U���`���=��|y�D�
���x�O��@��v����x�}�E��g�׶I@����<�/�M��\0�u����I�߸H"��}������^��W�k*%�2��r�Y�B��F+��l��
+x��U
S-�7��Z��<|>z^��Z�:aja3�U��%���T
g�T���:���W'H
ѝ�
 ���hJ
+˜]p��<��)Ѧ*ߤ*�a��v"�6L�=O��~q�������M'>$�aP�})��Bd%��Q�����ԥ�f�v��9��oU�P��-��!L�h�"�l(�(�_P�߮W�t?{H���Ζ���l�8�ӽ����&�]e�1w���x��ޭ����"u��v�~ʣ@5����|>��,*^3�v�P��p�5�:�J��[m3^DR�"�����j}�`���E�a4�7TN1k\�tQ(
�?�lf��E����:8�+���
Dt���py^t���*����r2�bM�4������NNw!��и�U!��hk����3A)����o��'��k-u�z�.�)��p��
�r|�(�(k��E �u���
}��q0����e�y��V3���î�,���V
 �כmz{�Z�g��Z�<�F�!"�P�0������*~{�
�����j�.h졮�J�$�yGі)��:
��H��rT�">��P��
�@�Y
��
�^���pCH�L��5�A%����(�WgZ�
+x�s�	WD=�M�k���ƫ�@�&t�$Z8��%9�U\UBa���/R�P�V�W�a�^�i�)+&�9�Әe9�T%�E��Urs���P��X-
O5�y
c�S�;3�pn#)�ۢ`m.�ǒV6�9�}��F
+[>�-�VM���m͒C
���*���;e����Q"����C
�P�� \}� �m�Jh��8{U	Ԃ��&`ܲ
@Px̾<S��"
.
�X�p�b�	k�@N�*���mG��&SdR��)�9�]�
+��.��E�%�	��O�aB�嗫�2R�O�[
=T�P� �� �Z�CJ�Z�n��[]q��7��n��� Nس��Y�P�)�]f��̔�T�
�	�*�#�5_�=Y
g\�Ndq�6��Җʲ�Z�)+��bp�ފ����Vٳ^o���>t�7�(g�kUܞd���
�07k��B �8fQ�1�8f����J�ٴ�L�#)B����iYP�NBH��
+A�"DS�G� �z�
�!�
+�ƴB!��8��1��J]P�J_��-��ۑMY�n��R-(�>�������2
���&��X���^>��I���|b��
]�"%�	&w}T��b����HJ��O)�Ց,�<�'�W��ܺNL'���V�^g�ڸ�с�4�w;-*�M&V1	4Q�N^盅�>�f��5s�Տ�2��͖�<��\�zuC����!	�L��a/��F/�F�Qÿ�>/ov��<H�1<`��)��zFE5R�.۹�W57�A~��v��f�5[�&g�e[�u�l�Ӷ�P
+&��x�VS�4���Z"�L&��7o�j
�^v��p�l�i�^
�K�:�j�ن�/h����������d�IO��Ll'���D�Q�7�# ���\�o޾�om�Z��ł
�q9�
ǖ'Q�L'�*o�$�ѯe���
��S���b
p�L�K ZP�⺪�
+K�dlP&kc��>����~e���
a�s�Ƀ� 6��w$D�!~��ƥ�?�N.�-��N��<[��0���(�`��QTx�:�B�U�q59g��j��<3:�mS�c�Ô�YKm��JEUvl{5o����
�d�($�Ac9=^�5���r�vZ}�)$b��i��wF��5_�Ӫ�b^ʺ>�'�R�7��n/.����h��Iu��.�d�n�u�R�'2�ծ�4Œg���̅����`�N�TP
+J[�X�]�7�|͞�†��h�����>.}Q9Κ"
#�����=^��aJM��� ��Ƭu�͑
��^��Rb*�Y0�'X�g����A���
V��vC��H���d�A~�S�*�VyVl��5�g
S��}<��
Y\
+��*7G���×
h�؜
�U
o�_|phx������0���v
+ק���څ*��y�����k���*\�j]���y��[�)��"�
�wd|�=���
+O��s^�®���ϟ�g��й����nƛ#9=��+(si�
*p��͡{UP�^��a�{�A��J���v)��@�""��� �SB�$�x��@�Y/<!Rª��؉(�E����
*�txeJ'c�d�t[
j�w�b�\\!���2�L���PS1^�:��~���t
�6�?�m�T�E���8���F����}�O3�O�\�g}���a���G���@�x�)�3�&��r��s
��i�X}܎aK�t������V�ldL��R���F�)�N����9Ì���a�s�b%�]��F��?DJ����Q���b��<�MSv��"/�k:�s�ga.F0m�;�!)k�HJ����8�l׫?ꎖ���]p�HH�T9�"�Z�5�
�
	:i�g�䙇��)%�j����U�
j�̏p�:��P�\�4b���]��6���j>�/?'���d2�8��A����f�
�6F�Ę֫�-|x�}S'A ��H���/�$�Y�C�H(R�yF��DI�,Ͻ��~>�H�i�#Tx6��v����6��Ml���m�OXN��y����� [...]
+��#*�!����h����Eo��T�~O��	�!f
����Ζ��B�����u����J˚��_�aB�x@�2���XH�,�
C&R���!�\<lkñg<.k'��ʺ��
�_��{N?Kxg�_��
@�	��n8��,´�	Na���.0�z�HY�[zS���A�ϳ|�p��x��*:p*����s���uy�vX0۲*u�t���u�$�
��3����ݝ��Ʋ�r�O�����_��G�
+endstream
+endobj
+1352 0 obj <<
+/Type /Page
+/Contents 1353 0 R
+/Resources 1351 0 R
+/MediaBox [0 0 612 792]
+/Parent 1355 0 R
+/Annots [ 1349 0 R 1350 0 R ]
+>> endobj
+1349 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [114.431 260.275 129.153 271.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1350 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [349.025 260.275 363.748 271.123]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1354 0 obj <<
+/D [1352 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1351 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1358 0 obj <<
+/Length 2912      
+/Filter /FlateDecode
+>>
+stream
+x��ZY�۸~�_��h�F0�R�������f'΃���H�����%)M�_�n �H��h3�J��
���> :�:����r{���3G��zv�ef5�3�
т�nW��sk�\(*�/�rYd�*˷�
a�<��W1���p��ë��[�������:��t��ի۫߯�Kg�
G+�l������V���%��كo��I����엫��h����g�%?��)g�1ŒS��2�E��{�Z��O�>���΅e��C�¨1ya�6�z�:C1������

1i�|�a%�wG}��z��q�g�ۭa���.�"ƺ���>+aA��o��,ҤJ�w�d�
+o�gX~n����m�M^|�}�E�#<�ja����L��o�Yu��eZ,vE�
�*�í�*v��5�^����
h�3�_���|Dg>r�B��
��z��m
�0�j�l��\w �Eݤ��0�Q
�k!�ҁ#%��p�
�`���r� ��
�4�����7?���ټ�$\6F�Ue��B@��cX���(
�Ѝs"Z��q�W��f�%��O��|~�o6���n�r2����\0F
��w�η_C�l[��u�L֟���ku� �у�|]�w?Ł ����.
�;|F��*�|B2
fZ0	B+���TԤ� NNBMؕ�55� �a��E��\N�g�	D�úʮ#<�l���'�S�>|Bt�!�DK\�4�-0�W�i�.ن�@)I�)x�s��~��e����X�4�r�9ODλ^�9�$�ٕ X3fW����"v��A�����V��; 5�!'�6��nlSC����ͮ��7�
�5�
��V[�1xsC��C7���n�W�n��F����
��
�m�zh�Ў�C�9���AB�Ρ��
p����
���Ż��ޖ��,G3�0�>�4'^�E��G6J
o�V;��B2J��uȽ�$�f"^d��ڡG���1J:�#v����ȿ�����B���:B��"�&&\4F�q5\�]
>i?4�
�w��Ula
�(l�r7`7��FHb����
�H�]g��:�fB��#��v^��g0ci1�
� ��L�� @B *�~�'�b�6=�f��<��e
ˉa��y���%'ڍM��X����i1�� ����S��X��@tgژ������>j'$dbH��J�GT)8�DCM1�f�|D�>]Jd�I�)� J_�O�r�6ңą �cTv��g���selj�8�Cys��x��؍0G4��I݈Іp��'p#��5 ~H��>u��
+ �I�6���;c�x����<�H�}��H��c�f[������P�(����B�e9O��&�U��'$��E�1Y/"��'U�����,�$�]�1
�6
�@��=�8
Ёw������'� �1HO��D/ǔ՜�g
9�1�
��?
��W������K-�,Dq'�*�p�d\� ��;	~H��@�+2@�Q�M��e
�G.
+/k�J��=Ő#�Uyx_V�|_]�M
w�{�NvC|E�l	]�he��*������jkgn|����}�i�ӵ��
�;5�Q�A;Eh㵌7�|��n"�f
�j���'��0�r�ܡ���Ț��Q
���r�	ィ��(�AxU��
��<�B�,�R�����Y�4��<\�,��2���l{��5@��q>���B���E��jU
0�h'u��C����@���}�(q�� �k�����]Q��%���D>��!P�� l��������A�&
+��)F�@��u�Qߣ�������
��,X���_��2-˾�����k��b�i�Y	����r~�>��`ٵX��e�fJᦡ��}`�@8`T�.�H�Y���}�W4�@~��a�0O��S�'���q�i�b,�ʛ�
!\�	uЅ� v��C
�cC�ْ
]�
K�#�{I��\
p&�K�I1�"������8�҇�|�ip��S�X1ɺC_���� \������9��Bt��J���pm��dXe����i<_���@6�F�A���)ff�����A�X`�	䐐;;i/�&pk�Y��X�	!J�����
+�~E����Y7�/������
D�����]-Z}�it��_�����9��W=#8؜;V	�}i
�~��h�#i
� �*v�4Fi\W��c
�(��}_ L�rl����_^�t�	Sl�j� 7z�%8D}���	�'ՙ~]��,��j��!�a�n:#�c��SC����>��䱦_m��w��SȀDC�C�Lja�;�N�G�p���)�n��TU���չ�������y�a��¤E�a3�!fm$02@�n�9�h)<
r��}e�h�	�b
a��`�
�s�I��w��2� ���8��:a؉�H�q��feW�KV�{���=�Rya.!=~$=�ݛm���z�/u�,�2�������>�B�"<���X6*ҲN���.[gU��M�t�Ҟ�u�i���D
�/
�	G���x0����S<Vm
��o�N���&�g����3��X�X�SX�`'�1j|�+B	����O-�c��;JqD�-�Cc'H�Ÿ=�l��G�%Aeɝ���h
�D����!t
$?C�i�$���I,<R���*��>9�z��8��ӱ���ɀ�2��@%�
+I������2�!š�,�yB,�s�$jd�b]G�AfT�����~s�|�d��,^�1������^ǀ�в˪�Ack[�� o�tTp�਷/�&�Py@�/���?�H	�e�����d$Y��l���{�
�|�Q�-�EZ��Ǎ��p$E�W���mZ�����%�}����(%
'!n'�)jE�{RC: /�{����!�c����j����$2�C(U��F��������0A��ۖ�&�z

<�������9B�M���
�v�t
+endstream
+endobj
+1357 0 obj <<
+/Type /Page
+/Contents 1358 0 R
+/Resources 1356 0 R
+/MediaBox [0 0 612 792]
+/Parent 1355 0 R
+>> endobj
+1359 0 obj <<
+/D [1357 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1360 0 obj <<
+/D [1357 0 R /XYZ 86.4 217.914 null]
+>> endobj
+1356 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R /F49 566 0 R /F16 397 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1363 0 obj <<
+/Length 4661      
+/Filter /FlateDecode
+>>
+stream
+xڽ\Y��ȑ~ׯ`ľ�7DL݇'�Y�L;�ny��y�:��ƚ{R�xc��ff.�H���4�B��*�/���&6����^|�N��ϼfrw?q&S+|f$��-&��L^ͤ�ӻ�o������w�?]���O/�޽����؄O���������,�ݟ&,��M�Q��DfJZ�[N~~���4�g�wv8�ۏoo>|
�)WO�bUTWRL������麂��	;u�prqe:sʜ���>��X�S�?C�3���x�qk�
�]��֛���|Z��_����:4l�m�+��r�(�C
.�o���j:]�R���>�Ǯ�5\�t�[/����.��w��>�D&���Ӵ���|
�:����q����L
%6 )�ϔ�����i�ɗ�bf��2�碙#-���"[��z����̤�!���8ϼ����Z7��n���j6G�ȗ�̿и��~Wͷ%�
+MH
d�mƅn�����������b�����X����׋"�޼�}��}�����?�O�o�������l^�Ym��ZV�̗�?�l��e��U���/�Y��X�����9Ӡ"|b�͔�H�L;MC	��){�MB���L	9���	X�hUe���
k�[��Ov�æ>^���z�B��U�<�L*��oC�?� Y1�+���64u!�Z�v�/
n��A��0�����׹N��JH�|RuB����=�2�Z�i���0�
�Sd��T�X�L[�|����
�
���{�珛o�~�C�
�vD�>%v�9�jg0��P`@޶D�Ej$�m�D�0�i��a���x�
2_F�H�n
��/Mc�-r��\���
V��P6E�D��Ge�z��
I*�(�K��"��3�k^��6>���
��cx|
��h��ѓ|�V����!�Ͳ�&��!h���`d����ۆ�2N����fC�n7�v����q�?�.�x������5~UH�Y���E
�hJ7㡁�����\�6�����޽�]�q}:!C�c�/�M���)�[)�	PO�Z��w�"F���d�������iϥ��M	�B��ơT�
���!{L�KgL��[����K��\���ys���χ+Q:
+;�J �e�To%I:�1�Pc�t�) l�H6�kHS3���AS3�g�O�xݐl	j��������^5Wjlzdž�Wb�f
d�ܾ���f�Px���n(��u-�_���
.�VE^���!�s=���OG1�EDem(i���I&
8��F/'�W�9���"�Ac�v)�;��Zh�p-C��^vSM����h��H'5@͇y��(a	<��R�Nez
hދyY�,t �ނ[
��
�?�C&D��������� ���
�i%�%��W0����W�@~Q�4�����nz/;p9ģ1���[X��[YI|* 8�T�1�f3�.�bL����
u)X��n�� Q��r���7i�kZ�}+�˄ ��_�@��QZ�Y�0�����.��>��"L�-ep �EkIz�AvEx̛�q�%���%�,LV�U&!���@�1�^��C
.V/���4&�;�������4��{Gc�&�oK.0�����y ��6�0�L f�ps��� "����:<{�4�n1�7�7��1�{o g�m,��l�n>z�D\
8�"6��l��<�i?<���ͮ�ھ�OM��&e����@Y(<���|+�y��֏%3]���7��L�+�
W'b����?\$��kI���5:ΰ
���\޺DI耸�mR�k�����W�`</C�
���� ��
+�U�s��y
+�aVM�Y?��)�"j-�3
���d>�7
�ۏQ}�GY%���$�W�Jg�`��눷=�<����\�Xh0��jz�j^��v��d�~$��VE���쉜������:4��;@_t߂C|@�벨
���eY�u��E.��p��R���� �4�
ҟ�=y
l����Cv*:���	a���P������/����9�9��>�p�a-ĸ��>a 	�"�FN!��*_�׻���*�oW֫6�
{
���r�[�M
��Wj�B��|�'u
����qB�铰
(�<�"��S�O̐��������ҙ�g
UI	a�r�_b�X�s �q(f���$׽��X�%��q'�����J�ʶHe���/�pU��Z� �W.s���M��0@行Ϥ���Fn,q(.b��鈲�B�na#f������C
.�v��ow��:_G�,����
��Q����n7
�'r�`n�g��sr�O!�^
�~(�&k�D�y�4.v�]LF�6��7�<x��%��.E�� ���i��E��
���n��u���)Lx
d���N��i�'�>9�	A�$
�M4Z�a��U�V
�=�s\�cXO[-I���
#p!�bS?�O-�W���[7��GDb�S��ž�&)��F�GWM�-n��cDn� �)�E�C��ޟ���{�P�n�$O�1�
K`��"�}��g��=��#�a�
+����R_������������
�V��&X��)��eMZ���}AC?����a�ˮ�
�3M�'R�v��Q�G�=���&HX{��k$�և��Tn�n�}SG��N�(�oX���(��CC�*�
+Ͳ�T�9��H��c⢪3$Lb
�`�^�K֝q�@v(5�O��\�!�OAR���2�u`
4z+�L��ϐ���ͺ�1��
�a���fW at 7�}�:�"l�F2V
�J��>+'PX*v�m�8F�ˠ���C
J�P�����"�.������~�
�_�@�? 7:!nKp���  d6 
J��;�
&�+6��
�
��U!��������w��
�KZ
����}"�]
��SbQ��Av����S���uK�'�Kn/��r�3
QIbж;7woo�R0 >�p��6N�p)�a_e���ɍ6�
�[Q^q�3�k
��^4$õ�p�~�~�U]�~l�h�C%
�c�c���‚%y�I��myƁ�8��
�tb߃
+��}�"��-غ.�U��Wk�Y���Pa<�mk'�h��"��lY�P»v�2���Nۮ���dq�������)c�B�
0�p�GmL8d��0��vHl
wྦO0a�d�:f�M� 
ʜ�8��(b�ZR��/��2+P�.�C��`҃\
Z�1)����?d�L,>�LR90�����
���kC&i(L�O>��N��#�ήM~�&W��^���R�7���X���ݧ�Q�?��^�cw���7}6��<�|�OF�U1�1�q�`��
#
f)O��KJ�
k1
+Q,��!�7��^�"?@.�G!j��[i�iB���� d��x��(
���s�%�̈́
EDBB����i�Q�
�"����ۛ�~L���EH ����/̦���[Z���)���C*�JH�G��&�nOHw?���՛�S�UeB�Q{�
�gH	�4�A��ZGx��s�1���&hJ%�y:H��mB ��>f�w����
+�a�����APw�H�%N�< ]�*���  \�Cq���
 ��FF��~m��~f�ҙ���pl*3p�%\�ɔ�03�4�0�W�%`��|�0>�Ď1��27�Ñ� ���*"Oo�T��{H��sIG�=`$gO�uR�L@�2��t��Pz�3\����p�E$�=�
_4�rm8����@�:_��gUO��)
�{��C}�6U at 7]P�=�=r�a���p�1���i..-�
ICI>�h�_�����{U?Z�y�w���)3�FY��}Q����ၖ��Q�HF��
�4��$�Gq� c*tnr8����
X�P�{@��)���@�vo��W
;N��a�)>��
δ����x��* p�-��\�� �ͥ��A�ġ�>�D�g��Ǖ��D�>����b�O�b�0c,V
+I'
��X�.�{�A�Y�T-Q�g�
�uś#�D)=�xP�]&U�Ƞq(�#�Y�6�9��'6�cx�Cw
+G�#
&gG�j5�A7${1������~K�RS��H��tJz)-ųt�� hbWT�������X�'=���J“i�
+]ܴNOo��P���C���]
�
��Ǽ�C̃�#_.S	���fO���
2���0��m
�"I�s	=�pj��
%�=k��W��ё1f�*��fs.��X�h�j1�L�(��jp젙d
�w^��&ܹfR�e��^⎔�*z"��Q��:�p�3�
+}18P���"�o�[� =$j`�#
�Tܐh{h�\��x
`�y��2�7�d�Jx�!�(D=�RD
�
/X�·Pc���
>7![���ϴ{?����-Ɵ���Y����J9ף�H��L�k*����y�j���9�'ٔ6�w�Y��#�6�c������[�;a
����*��{R�gGz@��q�X^�1�S[�]��

�
��ug��v�;
�/�]��z�qꩢ���[�(Z -N�)
5`�����␚ѧzC�M��ףLņ�qқJ�
�~4��>��T��m�
фR�+2{��|9sHu�W
�ɓ2
K��?���02R�ã$�}&�1+'*�gĈ�Cr9Y���
�N�ٹ�
�
6�}zS�����Xr;��d����x�m��
+
�?�Yr
+endstream
+endobj
+1362 0 obj <<
+/Type /Page
+/Contents 1363 0 R
+/Resources 1361 0 R
+/MediaBox [0 0 612 792]
+/Parent 1355 0 R
+>> endobj
+1364 0 obj <<
+/D [1362 0 R /XYZ 86.4 726.045 null]
+>> endobj
+226 0 obj <<
+/D [1362 0 R /XYZ 86.4 578.672 null]
+>> endobj
+1361 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F38 453 0 R /F11 628 0 R /F49 566 0 R /F14 627 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1369 0 obj <<
+/Length 2787      
+/Filter /FlateDecode
+>>
+stream
+x��Zms۸��_��~�o"�/�ig��I�&q�9��$�"���R����� E��lG��_DQ�v�ų��.H�:xu����ӗB
q����f`5��
т
F������!���E��T�r],��2[��Ud�/y�ryu�|��}x:_��g��,?�4���bt��3z��z�R&���`
+O~
P"�
|���)
��m6���g�=oi[�f�A�@;F��a���7E	sS\�ܮ_<=�~����T�;�`�	�6c���
]\��aÿO��q3��r`
C���_כ��W��ߧm����/��w��������^��}J���z�����U����ӗL�L>�_aV�h�¬>Rfv��lS�

�/���`�������P)AC&l�
H �� ��D��
ص�G(~�R�R�`g���e{�P0�L7u� �
!��xR����w��fy|2�L`�Y����E�z'��E9-�YvWL7�Y�i��/��m��2��e��
��m�^]U�q��H��˰�d���q��o��RB-l/����#,-5%�
/J�����zQu�- :�x�;)� ����[�&�4�V�m9σ�zVk ���2��4����vj4��c��G����-�(~ �����$*�s�5���IQG���R�em�U`��9b���#�˚��X���
`6Yܨ Z岻s���lo=T��b��ࢫX.(1
���I<	�a ��
�8�h#�_���
���	�V�ɈS1��
J�i�
��F��+��쌆(Ǽ(�DX��;�R��kM�t�mW����>����?@���$d
{�D���!)�j��z7k]=@�D0{ H�(�/����)Cf4�
���b	 [...]
�^[�ze(�Ȧ9�YY"4%�ٻ�y	t�?/:;G"J�
+�e��$?&J��X�u>
�2��N,1�h�s��Ɵce�X�Fk�u6���1��	�i��4ST�h+�s�}(������z
8����
+����{�U
U���ݳ�?��%
+Y�F��m�0pV��������Km!�@V lRs
�4�(H���55�Y�}�K�D�l��9�%=�:��z��cEv�pH��q˜>f!��B�,����j���L�S(�z���&��Z��hY��Z�f�*q�n��d���!�[�J<ly�C
�җI�w ư��P��R�6�.�
��{�����l<�
|C6��NƳY�k�: �˔$V���w���A
�2�Ꮻ�{ ˜�i9PLw\��!�(Ecw��2���z?��P�'J��6-�Y���Ng7�r:eܩlR��u
��i�u�;�Оl������{6��.�B鱝��O������
+b��3�J �֋bp}T�=��gϪ�M�;k�`��u{��_ZI3�
���;p��e�[��E��o��ip����.r�S�=���

|�Qx
P��~�@w�GE�_ ]�Y=�y�j�a����_;�@��q���C����ms1_���
dh��24x}�z��*G�P�m[?����O=�¥������g,��B��h��/�2x!쒤@v�l�X�5�=.�6Y�k�����
������AOJ}��^�o�t5*Z-�Pq�Ⱥ�([
E+�^�$('T}n��?�E{Z_VkO�-8F
*�ގ���eK���h�U[�t��@�z��ܴ����⣐,����i�%��$KKw?0�'��Ю�p\�|�yU��E��~[ȊX��ވ�}Ae���O��SX`�M+�\�����m7&�
� Zu��޿ۢR*i���9�J�RR��������e��ސ�H!aĶo�^���8�!�s�;�CB��� �6[[Ɩ�Ow�8���PA��
u�P���t�
L�c [...]
+:X.��@�	nw7����~�O�hI��C�'W�(?��2�Q��{�(��9Pv�yp�`�N��� �C�T��d�� ˬь?���x4G(K<���lAo��̰f�ʂz��2JnAP&��������T�)nif(�$�'�IKl��^���'$%��c�o����O�H�Ͳ�$��Nۋ�S���9�$8��$������7��v���Uy
4��M�P<_B3G��	
�� e����-s�cɪ��ߪ�
4{m˽'~tmO�z�� �>ȰO�zFB�-@��N�[���9{������l
|P�1&'�
Z�;D< �vs�q]B�/NyQB��S(��Νb
+�´1��vؓ�a{
���
h�5a7�P�X�`Pq�!�dq�Q�=�<�?��f�U�N�B�<�ӊ3w�b�$�n�le��|s��-G|��� @7'��T��_��7��z����'�m4@��{������
+�*_o*�1V�C˝7
D��#e��6��<zJ\�OcŽ������j��I؇E*_��ߪ"��ݷ
8��B�R�F[�^�HI��CͲ�76�'�"�B���[B�S����t/��i�\"��߾���.6��{���z�@��;�P�W���l�~
+endstream
+endobj
+1368 0 obj <<
+/Type /Page
+/Contents 1369 0 R
+/Resources 1367 0 R
+/MediaBox [0 0 612 792]
+/Parent 1355 0 R
+/Annots [ 1365 0 R 1366 0 R ]
+>> endobj
+1365 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.295 520.385 128.018 532.34]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1366 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.531 520.385 357.254 532.34]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1370 0 obj <<
+/D [1368 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1367 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F14 627 0 R /F8 409 0 R /F11 628 0 R /F16 397 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1373 0 obj <<
+/Length 4430      
+/Filter /FlateDecode
+>>
+stream
+xڽ[m��F���_!`?�fa1���9��7�X�'ɬs at 60h�3"���H��.��S�M��Z�d%��l6����婪f:z
�������_�z�%��zt�0�:�#óD
6���~
��j"���
�����ׯ���p���__\߿���`鈍�5�R�u�ק�?���fx��Q��̎>��ˑH�0�Z�~|�}�
��IfM�����~�~�폞�r��(�W6.��xu%ظ��r�B�1L�3vHaX�J��C�I�%��/
f��XŒ�Dޮ�r7o}�����d�I9�0�,������c;��+���?�
,Q�t�X_M�
����#ZD6^_q3�t��b��Դit1]/�|���lB<�m]����������H��
Lˆ��CƊ�$�ۑ6,1��=�����K��J����Ŵ^�5}�vߑ�L5�D?m�e�R�%.כ��
���������GrS����:/W;Vb�фc69�0�d�wsv�[x��-
~n69�~��<���$&
����!5V��VP-��a/g6IS��L�)gy�_MW�o����Z�L}"��
+�>߾��5���Ef�D�`Mz��{{��T����Kh~+X�j深�JH�;�U�S#��ȞJ����%&!
ʚ�=���%�,
���}.�y�j��/Z��%^H�hX����s؊��)��)ݓ*���*b��Ѵ�$"h,SIʰO�$V�s8�2
]u#il�M=�k�������a2ғ��,�&U��6����.��6�`S�!�2arŵ�0F�
F
u1�ΰ&�OsX����%
�a�4�3
��m��z�T�L��`��L
��$�O��X����>���O�Hr"�Ǚ�
&d���ն��c����"2-dIu�i%�e��c��p&�sD�b��:�6��D�s�Ǻ�
8j�*^�E9"|R�$��tH��T?��
+�7k�S�g��Ϛ;�R,f
�
�Ja��@�o/�ĺ�Ϳkl����n�|��T�>���&������>�Z=�Ԭ?�"J
 �!G
�T�a6�J�7'v�[՟��.r��Z��M
ز��|ћW��:2
hV�\'�a4�6hR�ؔ?o�'42Ո���mQ՛���)��w�W�D��7�Q�ZU���b1E�X6hxb���fG��11�Fo�K!��T�?��
X, �
�ֵ��뺀�j� �
8#���aSz���0M!L)}��@��MWǬp�NO(ۑ�@������Kdñ$�Ր�(ojt*1�y~
(%���,�Ő1^g;�E�+�,73m���0�B�g�?l䄠k٧�9��\� �v���ܹ�nV^����f
6�7N�xI�ևx�B� u^FS��E_J l�#
��j��X.0��	�6Ŭ�!6��u�ȇ��
�]�b���_3N�lD�[�0�>
+�ﯬ��,/���e�O�ac>?A)�QL�\YIpJd2$w|.��[{���K}U��E�e
ӽ5K��2f��U�=q�ְ
+�Tٰ8�T�Ź7� ����i(��X��S4�#T+�>�2*!�GKD�Y���K�x���P��"ph7�[���!�)�	�sNB�&\��g
C ��f(���Ui|v�YD���=R��G
+�[����v�f�h9�����	�B��W����vWuo�V�V�·l�'���]'�=4�,�`W��2X��Z
�`��Ԉ�)�'|&�̉��>C�
5
5 at 2�4�S���.��F��	����0���ۺ\�9oޘ�z3��3=n�C`Rf�m�j�fJfg!�L�D���R6P���+U��^5���>
��1h�n
+��Y�Cl���4]W�2�F8�n(��d�m׾�T�	od}��W�L톶׌�����bS�O1<#f�.������ix�ސ��NA^�i���vA��g�핬��>n{�J,���̬>���,a at U4��f��
+
+Z���V�Y�/*ڇ��
̪n�X����t88!�?�9?lWS�ޑ� ��M���}s{s�h����2���7W*D�����x����FuSD
�8����.��Ɯ�(��^BQ��Nn�b�/� ���b�[���%�b�ʉ��؋
:[
+�(�
G
+qG�Z��#�	�c��}�׌}R���i[�&�p�(E���w��d��19�3�U��p�A�x��dP��O����М@[�{�CG "b5�������-)��+�>�+�zoX�|z�ͯGy�(D�;G��5����x��I�1}�p�1
a�L��i���
+��Z9e�fڳY1]���³��7#��e^�.ͯ}�w���B�
!Z�/�T�$e.Wu��a%�[��<�l���/�ɠ�������Gg�]�=�1|���DZ�s��Y���M�
D�����~�)�x�E��a ���&<�W�c��۶qn�o�	@���
�*��	�u�ㇼ\ ��|?���p�`U
+��kL������F
��s�=�
&ŏC����~�
.���l��*���������uc�$ƙ ��<D��r
v���	����ܡ�$������o��U�	��	Ƣ.'�u�t�ǜ�Wl��튂]���O��i'?n��v�j���>5ݞ�
����
r�$/�+�H
���{��Z��"�
�
�Z�j�����G&r�=�H��J��1�<ZE�0��x�fS��؈_<�\��|��U���@y1���5@��Z��T�
O����\�C3�� ��X�*�
{h-�*7�hJG���t=�2�܀�����2�
�py�'
q�U���?�>a��
1t�mː����	�vgv�'�$�IxUu�^�����Nd}2�M"��&ۅh�인�7���b�?��� ��(V��<���i˫p��4p��K���|
Yel�<O1H��Je�(G�f86s0��-7�i�C*z�-]�H˟J�R
Lf
+pۻ��s
{�f�|$���,<�>���m���nc��j�Fr�
�\Ņ�b�]tC���T�N�TJR��q�<�4DD^
x�g#�3�s„
IXf�~�*'��
0,Tփ�J�g�j]G�W���)���L#R��qH��]�J6E����`�a�����(�)]�D贉�����m�+y_�E

+�睴uS G��O�-"�JV�Y�у"Zsf� �GC)aN�#v�Y_�I��or����l��vZ�� ��
�%T}�֔~����C�
�����R
0�μ
�2��E0g�e�A��&�?
����q��V��?��:�'�<
+�?�ݱ�%�o`:R��Lc��7&MdJU����!��n(e���
�jS{��my�	��bZ:q�<�Z�Wl�y�
�J��͞eoſW
�P}3\
af�Q*&���a1��]�o
�FS>_�;o�^pf�r����N傺��ݍ-Ҟ����Jms.S�E���x�?�	�$6�
�(�m����ϑ�Ri?���Ǩn?x�~�ԇ�փ��y�F�[�;ԏr݅�ׯc�ǵ����S��B�?�F{c�Ů��^�3���m�����������f���p�[���4/��Y�y��2�!���[��
�R�p��{m#�H^��9��f���S���1#ӈ�h$ݔpי�٧xpƻc&�NdOyI�!�j(Y/��"���?[��ͺ��^k��A�@jq��
t���6�]���:��h��"�ԧ1
+9U�t�3��,�B�x��2Mu�8F�
�ݩ��}I��}�`c���a�2�{$������N�wb�Ndn c�/"چ���>�^�ˢj��+�QB��]܇袂)
�zӁ"nO~�0p�4v�n��$3
���y�K �pC1
�B�~w{}{;[Jg��E&�tR��'�m܄`yJ�(��k��P9�{�X�}iR��$`c7�F4�t5��WS�ض�p��ip@ء#Z�����S-2=�{��\27�
�Ƚ����� n�����*.)Z.W�擏�y�]�S�P:Y,��[D�Y�ҕ;�DCQ.�XbQ

Ƒ�G)�Ɔ����$�:�r:O�I����.N�Gq��-}�����}�A9,�9E$Hr`�đ_`	��ճw]tC@�"9y��k�o�`��z�Gez����� ��}m�%>�iO��&�RdXj{���
4�p��)ϙ�-��AV�?#�H�/�iV<8k쿉�D�CW��3��]

��{q�_S��7�c
��W
�W�{	��-�K(��)&FT�R���RR�����A•�.1%����挂3���з#����eAg��&�õJ��IFq:1��K�	q �çSl���"g.A�" �z4����/���<�qa�f��\Z�H�`6���\ѣK�����D��w�F�g��ijƑL
Ш���ˠ��x�
�� {Vu���C at N�
�o�
�!y[���|���]]��;�"�q�{@�>bc6���$�ؑBP.�
+s��@�+�����$
��?P�X�
+endstream
+endobj
+1372 0 obj <<
+/Type /Page
+/Contents 1373 0 R
+/Resources 1371 0 R
+/MediaBox [0 0 612 792]
+/Parent 1355 0 R
+>> endobj
+1374 0 obj <<
+/D [1372 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1375 0 obj <<
+/D [1372 0 R /XYZ 86.4 701.138 null]
+>> endobj
+230 0 obj <<
+/D [1372 0 R /XYZ 86.4 452.084 null]
+>> endobj
+1371 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F8 409 0 R /F48 539 0 R /F49 566 0 R /F16 397 0 R /F38 453 0 R /F11 628 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1380 0 obj <<
+/Length 3329      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�}�W�*/Ԗ	�~�TR嬽�ڕ
/�y��T�8�Y�H�����s���P6�I^Ĺ`�
�t���7>���o㳧�+;,Xi�끷L�
�*1Oo�A���2\����n3[.�G����~�p�Ho^|7~�:��]�W��������g/�g�:����c��vpu{��>�����T����@��$�����~ƛz���B��
� �p6i>&�����z=�Y��s�R������S
��u��a_]8�\���3]+&��5��f�DP�i��:�l&�##��/���;R
���C	�53>�������2!C/B-�Һ\��;n����0�/g2��.6�œЂw-�̜�e��̻����
B���Z�e��{�V��7��37\� O?����bS��
z�ޤ�����HT�.��-i1I-a�j0�QS*mՖ��E�
]]/W�w���
��U�h���DL�

�<!�0C`COR&�o��M����4k@����`=Z&˧��[-ߓ]�zp-V��c����)�j���ns�J&�PN�i
��d2��t9-���b���Ɋ �Lh�)r�n���l>.��h�
+QKc�	�&}?Y�&���U1b�c�X�́�*yf�hZ�R����D��uE/�`-$���L+���5G&��R�}cV�00x1�I�i�1�r���i��G���}9���1X%��y�`9
Rl�Br�
+q>   �
� �<�*
���Ȳ
+�#��U��])t%Ρ�Q��:���A*��v�����a�cK ���E�����v��=��Kh�d'N-㢗!�'�@{˷�����̵k�@7�
+���f�!]��1Oa�Í!��F��J
_.v�,q�J�&��ʵj
$��������m^� d���*�c^ a��Ƹ�
��Hu�+:�	V���a��\� ["`�r����e$�SS��T�X8+���8��
+h�h�ci��
+��Ӥ�f��>�	m�Ѹ��D�A(�"t����gr0���q�
�ғ���
7F]i^&���6���H{*q
��͇U1����.d������̆
=.~��E(�qN����
�5��|�������
+��m�"�Q:�
1=s^��hLW��h�zY0�e<<��S*�����l;Z�kH\��B5L~�mɛ�": h�We�UH���
%���l
�n�W����6'"���ü�!��$�\|�U��g)̏���ks(�
�tg��e�,�7��D�� ?+cOڈV�0�E2�gR�\�a
`8&�!���=�"ڭ�X�z�#b~W��Q��
��
�Ι�ܮ)��`�v�s��(��ּj��f��)�Oez��zX
���Z��=2;:�
��i����ؓ�Ȫ*b��K��;r���D��UN�~���U�>���o[����iZ\�E�<._���
+o�{&F�u��^^�_\���F]~\\n��Ut=&�K�}����|�����4����?~�H��2c���z����B7v/�~uH:����|���']i���/CS�Qx!����
��Y����>�j�F!��j�oc�Ĝ���.����N�V˔ ��
������ꪠ͆u�(.w��b:[y�M�'��Q�ś�y2����-�(�#H\�d[�Dr�h+2��5�|m��
&X{�,G�-B���
+�Qg��tQ0��OS>mh�*p��q��T!%\����JX����H�NJ�/;��
�� �$чP�@�L.�t"Of��M�����!߆�U+ѐY4�
+�l_Q�e�xf�p2�/�':��	�
��
�ّ��(b�[ˮG%�uW��c�@�L��8,Q
+�LΥ��ǩ��}��E��0DV��'�<$�^�uÐd����̧�H�%��)4�b�[0��(�5��t�%[�^x4�n$�@�rm�m�9ϔ�_��
E2v�֏Ū�_��]4�i�J�j���
+r�+�Q���u����&����-t6!"���
�ͳ�m�^ls���}
+���w	%K��Lp��Q-���[6Ĩ|�?dž-^��F�	wY���9
��/<�ے��m�L�a�PŬ�-c�P���
�b7 ����u�2���Τ�]Qm9ʽ;XK�\]���Ia��9��ָ*�ǂ�I��j�Lw���)_B�J7��b��2�m~5��7�4�A �
Z�ũ�"
�����}y�+��ꦜ��?�
��f�/�dM+5[����hv
p_�Gǖ�7 h��Jk�g˖�"�=Y������N��9�]�d���p}�e��n��thD��BR�$zCT�ѕp�9�D|��gKDT���oA~��ǂH��#':
�8)��L#ק��(m���b�Y-?�HF��B/��g:�K><��zi���`.�#/ �rmef��L���|����3�7�n�i�����-�Cb�� ?�>��~�v����<��m@[1�L�3r�y���j�3��u�Q�8�b�N���F���+���2
7�yI|�]�
*%�a9	�t�P��$_'�}HMI|&��
L�^��W�)]���l���d1MO'��tx�*��g���r���#2j��sevH�����ˣ`/�N!5'���)��+e��%�#
�>[��W�
x�B4���9o���p�
���(O�t*s<��̎������cdL����j!��ϗd��r�ؔ����ˤד�7�j��?�B�a��B��>l����
+hr^��mZC
�C��T�N0�}&��Ni3%fҭ%���Rɬ���r�n'��0?Oh���`2H��l�}غ�=����A�Ә�:�~�mM%���j5
+}17h=3������ˁ�~��S�UQQ7��`vm���즙mA��7Cӳ�zc{�Bte+V����?��PIeXًXCe�\jW��,��P�\��n*q=z�H��W���ա�� |Ć�g���]3
��dt	T����hc����A�;�O�)����*�TQ�b�i9��Lc[����0(��d�o��םH���@x�sR"Et@�ؓ3��Ǡg�u1�fۊC�������S ��C@����]Y2��!n+���l�;�<Z�,�F"S���0SE��g ����i!����H!Y�:נ�q��o�@�|�F���W�I�AP=��l��\����M�1h��I_eG���%��V�9�`�ֻ.����%ˀ_7�����F��@��*��d$!�8>@Dic�>:]
�Z�L�.,�x�������iAzՄ2�'(�8�֓Ez��1=n�1,P�pNJ��}
S��4��̚�'W��Cz��kԧ
MQ���nR(��E��:�?ӿ�
���4�����\���_f��/���
n
+endstream
+endobj
+1379 0 obj <<
+/Type /Page
+/Contents 1380 0 R
+/Resources 1378 0 R
+/MediaBox [0 0 612 792]
+/Parent 1355 0 R
+/Annots [ 1376 0 R 1377 0 R ]
+>> endobj
+1376 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.418 373.238 140.141 384.086]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1377 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.688 373.238 369.411 384.086]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1381 0 obj <<
+/D [1379 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1378 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F14 627 0 R /F11 628 0 R /F16 397 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1387 0 obj <<
+/Length 4162      
+/Filter /FlateDecode
+>>
+stream
+xڵ[m�۶�~�B�����
�L>���\&�^�;�$�%��Z"/$e���w �$��D�'R$�����.V���"]|s񷻋/^p���*�w�F������n��9QD^^qÓ��
oDr�����������w�]P�,]�5�H�>7��rs���b�[��[���Zn���n�xu�cdԦ�=���U�ӗ����ϣ�<��M^^r��Y[T��������Ʌ�Ib������~ji�T:�㩦�p!�RB��S�%��M���Œ>rw��5��H�jB��k9/J��T���(��)�����y���������u�}ޟs_�sL�1�q!���m��<[58�/�ͯ(eУ�I����}���3��ۖK���W����&�T�g�����3�2k�UhZ���uʌ�`���}��ꝟ�t�\�L�_�j[���U]����.��k?5׳ٍ��f�G�0��3�!�"
�LiI4l�	�"����u%� f���!�)vB��C�B�X##��7baj�ŧ���	�e���N��S [...]
+xv@���V͈�3JdX����L��Q>�<�y
+���"O!`|�xyR��^�HD�W
,��"`

\ ����M,�t#���Zx�q����y��
+@	w� Z�/w|�đ\y� .�pc��G�!ʨ���J�k�
+�M�~���z9a�<ck
�MǞqJ�T����4�
\$u�n��&���=4+���K��:�k��!94��
����ܳx�61MK��y��(�I�@gT��ҥ3���0��C��+-;�s[ޭ�+ᔝe\)	��ɰ3Z$ �x�=��P��҆�"-+�<��)Q��լ��9R���M���Z�6��L��j��<J#w���
�B�@��
+��j�fN})|�$o�	��{P}�q���K�@���
�}R�^x׾��(�YV��*�xH�`��=�^�2"E
YF�;�SM8�H�2�ړ�1
+ '!�0�Nx���Lj'L

+�%�N��
�+�
d���ղȽ�AU�5�u
Vo۬(I:B�`4��)!
�w0��
+�
���,"^
(`����9[j!��
���O�V����3
��U�f^ٿ
+f�:2	�:B}�I ��l:����=��j��z�Q�!��騷wh��ƣa�H�r�w�u&�w���̛&�D>�� M���9�ƭr ���?�Fp���u!/�~ix�=�@d����
�Rڱ�p��_4=����&
+pܺW���QM�D ��(I#F�Ң�5M����w��9ƴ��L�
j���+�]�{2xZ1l�%G�;+���
	i���
���=���DWT����
JE�����ID�%�C��&�cb�3L�1`u�ّ�ه<2�G��
+5��?)�+f���#
+�t.���Z�c`E�R�#�GG�@ӀМa
Bb
+�hi
+�i/�&o�^����,�9J�p�f��EJ�{�]�î}x����-��`�?���|_W���B&v�ρ�
+��Ia������A ��ϧ2a
+E�

?M�R��N� N����9z���)����W1ڛB��[���߿z
�F�s1D��,L s�
��c@�ܢ&��r<1Jg�Eɳ����OG����A����0 G#�<}�
�ct\l��T�>�BMJ�� (�z��+��j��5S�ajY��t@)��4
�x��8�!M����2y
1l�ao8`d���gD�d�?���}��s�L�"��
�i�k
)��'e��+���Ű����:�%؉y��硎;�*���.8_�?�!H��1�7J���Km�K�������̚�IPL}4��2LC�	��:o�(�)��펷FA�*���
4:�_)DޒQa�e�
d�0��8��aPq,�}���]����d��^l���W��X~�6�n)L��.����pW�3��?����P����q3(?����
+c�S
�@O�T�'Cr1�ծ+�C��0�GQ�G��qC�Q�_]8��%M�!5v�?���ß���'n}��-�'�@>�vw at P#��4|��5*��_��B& ��d�R���'��﷛!�YU����x�����
�C
o�I�͕��?������;ɽ�d�7!k�RrT���2�
 �*�v)CB�!1!�U�6�iD��e�u�F�
�_�
�����mQ��8�X��>�:՜X:G+lČ\[ĝ�L,��]	����
�[�vx�H
z������Ȑɸ��p
?
��|�l �S���x\�t�m׮����
i�����SC��:���  
+��r�]��G�/�۶F������˖������v�#`u�E
+��#0l]�}""R}��[�Ӱ+E�# X�^�F�
+"Y7�DRMp��q��А����P���Ŀ�O�"!""����������+̶-�U
��o�������ݷ/�?��Uxp��e<'G�qGi�|L

�EY�E���!�(�9��^��*u|+%����I�^������b�u�?��3`�t�-�=tR%ߢ�F
U�Vy�B~
�t��aj�D��m������b��vR��]:�%S����%t’�T,�n3�T��K�k�B�>W3��#4�"��;
�
�S�P�����P;݊�w���ԃUO��:�h.�^E�	�z������
+��$uƺ�Og�7m�/���V�]��d]��&k{�����Ǫɰ�h4�i�A<;�v+@�D����ny,^,�-|A
�1����]s�2
���#pG��&^���=
�~��{u�㡀ý�/����o�ο��Ⱦ����Σ�/-�����f"y�k`(!_�
+<'g���cћ
U�R
+��e�Z
.�e�	���%4��b԰�:��4��{��J;�y{iE_(
3
+eiG#%�R����r��v�9^��L*��5�7`��P����Tj��SB�� �{��}��.z��~�r��-�����t/�$��;z`�`�.�*Vh��d������C:{[��{��Zb�;�\E����.��\������2� Z� 2�N�
^긿���|�}T�ᦼ�4�/`,�k0��$?TX:�O]�<܌#s�����2_7�����(2��
� ,zN�G78���b
����
� ��v�#j���+LC���P���!�����p%wm4�&�`�+��� T��
^2Z��,;����`,m]O\
�����,!��#󗦭���E���UT���a�C��ʿ_Wo
�|(G�]��8�k�i�]�
n��W�/U����i��A��R7Ex��
�_W����
+���/���0�
9����S�P�x����=)�� ����.��}5��8����R��C
A���Ql#���8vQˬ
��E�eL��jgG��M�U�s뮰+�2�}���ؔΟɩ�0&]��IGr�c�v$��@@V��z@�����
���,1D�}*!4�/
���=M����"�y�d�>d5�b���EW��v|�i��Z�/i+�}���=�L�ش�q�9�E�)qH%.<�x����_|�A�
���h~��?N�\��@��+��7
9\�+�
9��7
��uz[U�<+�������*�9�	қgh*��|��6s��f0d_����!����~��!�T�w
���ֵ��j����y@�Л$<
9���>��c�& �K4��bq��
+(4�C8s8A�E/@y
8���O�%ண�lg
 rr��	.��S�.>\vb�I	�<d�w�T=
��0_��@d!J�n�^���5O"�IX;����8֥@�ǎ�����z3C��T�G�~C�٫*�%��W!�:����&[�UW�]����yRt��M�<�ێ^���+�M) d��	���h}\�
+yp����$T�?u�'	�!TKh4�|�mQ}�)px�J�1���5>k��;��Fk<�X���?����%>�@��^~s����+�dP�=M
G )�%���ܝ��Q�h����й*
*a�A�e���O�h<��6���U޺Ҋ[`�}���+08*őJK$��A �9�
�`Y#�����"���ЈA��S[fX&���w
+���{���;Q�	5�xW4Q� �K�
+endstream
+endobj
+1386 0 obj <<
+/Type /Page
+/Contents 1387 0 R
+/Resources 1385 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1382 0 R ]
+>> endobj
+1382 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.403 49.928 100.126 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1388 0 obj <<
+/D [1386 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1389 0 obj <<
+/D [1386 0 R /XYZ 86.4 531.315 null]
+>> endobj
+234 0 obj <<
+/D [1386 0 R /XYZ 86.4 284.078 null]
+>> endobj
+1385 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R /F49 566 0 R /F16 397 0 R /F38 453 0 R /F55 673 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1394 0 obj <<
+/Length 2506      
+/Filter /FlateDecode
+>>
+stream
+x��ZK��6�ϯБJY��'�c{�Jf�����\���L�Z�������Di�V�$�l����P��_���W�����
W��D������("�EDq��I�H,W��P?����vMV�7"(���&u��۷on�����-��>O��n~�z{s��+
+|�m�Hb�Z��W?�����	�����m�G��(_���?W�Pns(��(�Z9�7q��i�\	��˒���y������
�9
+��;)�E�P*��[���U��
�E1؀'��k�NM�+-h�v,���ؼ�G�A]Y��	t����r����l���=,�
+�,���&��v¾N��1k6N<:<N�9	k��E��y}���4![�(%��J|��C-����ĥ	�j��.^��MI��M�?�kx[�q��/���{xt/��݆�c��A���!�3�4M���`�H��zS���Q�O Һ�89�B"���
��i	ǂ��ϐ��n^�<P��H�"�
� ��2
�
7��8�Ij��E"���i�)q� �=���Z5/W4�;� ]¡��{
����S���%�F;��P��X<8U
���њ.��(y�r9��,�Z숥` M�V\�)���R� �6�v��ᚨ��r\���*k�Y�&n� RwjZ����PWvi1\���i����u��cvww� *)1@���D�@�+`�S
+ˮ��ڢ,&Xj
+
+�fa	�
��m�z���sl
A��#T�}o�ÝC��ق�4\��\2���9���ݼ�uu����+�D��� ����V����
i����h�Ρ^�V�O�Uo��"�'�
+f���WH��͐����O���,<�H0�
���d-T�
�c
���#�1��'X��XO
2I/ �G #NH
�PFF��;�A�+ uE�ENJC̆�1���u�a�y�Ǒ��.;�Kg��R��*��=L�=	83�{��f3�S[�d���}��]��w;+M
+�@q�X7�~�=D>�t"aS���Kp�T�$a%��q��I�/��:��g(Ôܓ	+�P� Ξ�z�m�\ �6@�"
r��n!7n�r��hd�	�
�YV"ą������(&��Z�r������LL�ys�lB�����dw���N�
��| �:�
��۟�J��<�<�D�|����q�d��;߼X1H�!
�"H��:�}�
�*�
�l����`3baOj�Q��g@�������9
C�B�XH#H�,`@rX���#�:}|��5SV�����!�����J���x
���:��������ܡ��4nR�)v?E��>:��I�T������ i�`
+L�3�"
�b��KQ���;�:�~*�r#[��}9\��~uPbM��&�˞��q��.����,���M���dҥh7���_~�X>$��NF�q�@VLS��V<$�xH\�
+\I&��g�,
�~���r�u4k�Ž
+�r&���!�.+7�Kp��o6nb8��'����n����+�*������P"�,
�b^S���_'Z;T@�
�g�2$����tܐt����H�<��
�b�-��rٵ:�
񅨥uG�Xu�U�W�xaK����OY�` ��O�H���y�4�#Q*�
��\!�+
?5�C�b~�;@p:C
B���AG�Aǜ��w��eנT��鶄ƢO���
��:fI@��gM��w�9	J��@��Bw� 6�c|
�}���:t�ļV�AEZ�9��[m�f�>mnO�sTC&���!\�!�x��^�&C�&���A�A�6PS/m�
��>
M�����`�i��6?��Ņ�Q
Gǩ�d�
��Ʀ���Nf �1t.�$�D2��PT �
������������몊'RP���M��%`��"#���%��K��Dz��A�m��V��#�1C���	z���5�\�ܓ�
ڃ��'Uk�*��}���AP .��6FEחyS�
+7gS.��	��eDV�W�
�����Y&1��k\J�S�>Q^1.��5s��xj,�ip3�F���efX`a���6~b�~����F�����ѱi`c��J�
�!�S�.�ߢ� /� �݅�ϕNC���it{p{��N1��_)e�\w�Zٸ�H�m���Aċ�1
��y+<,��7ř
�65jS���6zܞ;c�L=�
����r$�i;�xM��A��4��$ƣ
<�Z��Q����d��f.4}����U�=��[�q�}[tL0������@������P!�>/����s�����
������2�M���� 
{8S��m$��3��2�HڥX��]�[��� �2��X�3�}
v�i;K'���/�&��4(�s�S�7��(�D4
2s�!8P��Bm����u�K����̒.
�ɓ��w�����ug}QF�D�Yn��?T�s��wJx����*%�!�LO
p^T��
+�]�A���Þ�+�ץo�rٽ�n�������
+��
_[�n�r�La.
�جZ�J����)�ɨJ_
+endstream
+endobj
+1393 0 obj <<
+/Type /Page
+/Contents 1394 0 R
+/Resources 1392 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1383 0 R 1384 0 R 1391 0 R ]
+>> endobj
+1383 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [330.574 654.314 342.529 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (cite.cvode_ex) >>
+>> endobj
+1384 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [182.976 642.359 194.932 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (cite.arkode_ex) >>
+>> endobj
+1391 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.908 627.55 414.631 638.398]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1395 0 obj <<
+/D [1393 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1392 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F55 673 0 R /F16 397 0 R /F48 539 0 R /F14 627 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1403 0 obj <<
+/Length 3991      
+/Filter /FlateDecode
+>>
+stream
+xڭ[M��6�ϯ�m5[C|���Cֱ�N%^'�xI�EK�V��������}
�)A�8�eH�`ht�~�����Q:���7W_�z�%��zts;�:�#óD
6���~�D_O����n�����/n����o7�]�����AX:b#fM������������
������ѵ\�D"���|�����0X�&�5Ñ�}y��K�XϋE��|��My=a���z�S���L�-LL%V�c#�"Kx7��t�f�ޛUSԮ���/_1ٟ�L2)Gd�t��ה��ol�w����1�L�qs_T��qY�G��,�b�_4��b:-��h�Z��$
]A�Mx����K̗�d
Z�F��x��\!9T��I{bᙰÅ�%�J�QN�����6�*ҫ��Yy�^m�.��ͫ>��:mY"l�&_D�e�7��þhSl��H�Cy�ƍ_�vA�����hA!j4L$)�l�X������*����<|�x��V$�ض�{Z��uU�>'�w�	��_��2��YZ(������h�ia�M���W,�L8Q�U�C1��(������rK��E� �7���Es [...]
+�pf/1�D(�L]b	����.�ᆓ?�b>k�
�$�� c��
+���k��a�<<������Ya�?v�&NԤ'��(��O���8k���q�a�RZ�*��)��8�S�a��\_+6Ϋ���m�*Tb
e�6<���Dt����߿{d���l<�H�	ώ!)�(�Y�8��O���*�S�M���2�Y�]�gO�����)�mj�7��
P���
�c���s��z�|)/1p
L8�3
+|,�sp
%��U�o�f�V	�j at J�ȆvR�L�xV̋��ϐ�����?���+�j��}
aJ�(3ur���L=��G��)TF˗���� �K�I��
ko̖�?��}|6���خQ	%ڸ���#�4k���
21
-�8"q�$S����A���_/=;�7�kn`G�+��4��/�V���?���.�ыM]T	��n�y]~,���ٔ�b�?�L}+e`���
ƭ�qf�I�)^}�V�\[1�qe�x�*�
+���=-����ub�7,�j�[T����r�]���6j�F�
ˇCY�FF��H�*�>n�"�C�
t)
�
�-��ƴf�
��>
+o61�bWТd�M��_�������e��(�*���#@^֤'�M�F�R&��,V��3Ec^z3׌a�N�=�tY�h
���|�4��H�a
��y^�m��������p���#�h4%�������(�e>���ᤦF&,{
4w���=�0�&
�x -�P��xb�
�&�
@DB�����D��� �� "ԨX�WftR�����p��9Y�MS.����_L��ܕ�pߋv�g2v��Ȍ%),���Z�E=2�2%�9n	$t�oa��{bޏn!� ع#+��U�7�׆���:C�:_�n탪�D̤E�:pp̙RF	��qs�L�_`ʩ��>c\�
+�Q�+�\��B��p�h�<�������I
k�Ķ��Z��_�� d¹[>Q��2�1{�����$0u�#��$�ڜ�h�i[R
�Ö��9�l3ǂ e��ҵ���q����� �-]��u7�h�)U��>
5-H�6W��DH���1�� �P9�c��Q���
����h+��D�A�H���-ۚ Ҁ�㦢�H����� ��-PGF�w�I$�N���i�M��6Gw3�H:s��� W�L��1�#B���:d���|��AIX
�WN�}1/�w�}=T��x�]Z��f����"�QV%��ٙp�a�!�g4�ir$m8.�Ƹ�H`§?�}
���@;.$x�,�y_������G:�
+��
��+��Hy1t� ��V4O�>)LKb�2=�d$�}�vJ�x�i�7yT��t�N����IaN+R�㲨��r

�"�nsp�B���H$����?��
(�O4b�i3�C�+���o>x�|���[�����@��ή�|E��&�2ș��U�C}�K�
+�|�}4�Q���
+6�/��u�?��|�u��~���u�Hm?��,ݵ#��*0��Y���5��c;j�9Ҕ"���#�3�yxN0 at W�;�oP.����W�n/��Ž5i�]l��a��n�4����i�0A���n�y�5���՝p< ���=��
��㟗����Lm	�ۦz;~�����jD�2��1�!
+�|h���\F���j�e������X�N��E2��H �3<�We�K;Am�v�V�X�g�0
���yMq]9{(g��ȧ�*�r��u���/��rQ,k�XL�ܽx�V�
D����zd��:3�
HM���>'0�@?��z�Y����,��.��N��c5�CU�Ǧ��:2
�:۝���ċm���T�-
��r���g�2:3�wx�P@�)�'D�UՄ
�,a)i�]M)�pT2?i�$��3�.;���4\�D��9�Bۊ� 
0�G���~�)�p�
W���fP�� g�8�򜎬8���-59\o�-2`xEΤ��.��o�F��fp�A�nw��-�
���	�iA}�]�E�-���������mѸ]�������*ɹ��m���U�>�wR�L��=��6M�bYW�T�.�ы����4_z
Ô;���*�&����q�w8�v�騣��S�+W����Q\�\���́���B>�Ϧ�k�Q2
�R��
��q�;�
L
�
-uo\�W:�V̈�c [...]
�F]"z�(n�gD��
+�1Do2��3�YWzsW��z�m}W�P�mg����N�k�Ǒ��
j�~9�c�wQ�.p!Һ
�W�#�Re\8��iN�
�����C_������J��u[���U�&�%�>��>»�i	�֬�KFD�e[|��zCD�
��t�J�s���*�u�h+�W(�T�tЮH���!S�X��brs��3E��
&p�(�`'�%z��j�T�6JYOu��0�v�
p�磳H�:� �~��N���Ѹ5��
���L��Sk�9ޮ�s>����(��J��|


�/�-oҶ̈́6S���-���g�6W�=I�O���qHE����!/�u89����N�/�4�v���޳3���6�4�����	o
�Ѡ2�р�4>���t�!���Iz�T
+�u�(d<����oC3��2��
�
+�>�
�Bq�PMfh�� F��Ajl�~�=2����G���zC�!ٯC2�
�p�9��>�$�;�2Q۪G�D������e�h'!�(q�+�Ő_�W�?���{=�W�ل�G�0QZ'/1t�7���϶��M�*}��֦`��V�8|��~^�#bKX!򼤭����:��ek��
+�Ϭ�zTQ��:��
+�:6��W�O��G�僉]*:Y@��Dl� ��z#��t���]����x( 	p8�2��Ⱥ��hD?��|W��|k�}�(��)�p���"ZE��y���UI
+����8���ƴ�xq�Y'����w3
+����_
�
+q*����
�;���m�>>7H�lbM��!X�^{
���nK3T
�O4���S���v�ۜvxHp�#��z[�
�h�o3ݲ���m
�`/����
+endstream
+endobj
+1402 0 obj <<
+/Type /Page
+/Contents 1403 0 R
+/Resources 1401 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1398 0 R 1399 0 R 1400 0 R ]
+>> endobj
+1398 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [509.106 289.163 523.829 300.011]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1399 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [350.583 243.28 362.539 251.693]
+/Subtype /Link
+/A << /S /GoTo /D (cite.ida_ex) >>
+>> endobj
+1400 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.097 229.174 415.819 240.022]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1404 0 obj <<
+/D [1402 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1405 0 obj <<
+/D [1402 0 R /XYZ 86.4 701.138 null]
+>> endobj
+238 0 obj <<
+/D [1402 0 R /XYZ 86.4 515.543 null]
+>> endobj
+1401 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F8 409 0 R /F48 539 0 R /F55 673 0 R /F49 566 0 R /F16 397 0 R /F38 453 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1409 0 obj <<
+/Length 3216      
+/Filter /FlateDecode
+>>
+stream
+x��Zے��}߯�[H�a����Ȓ�.[���`�\��E�$h����szf $x���T^H\s�>�}�g���(
}s��ۛ�o�
��j�G�w�DGrd���`���藱Փ)*�㯳ͬ��U^�&S��qqG�b\=d����ׯn���,�����"��v����ۛ?nƍG�
GE�ԣ������
o�ő���ɵ[�����b���O7q����[�LZ�`�E"�#mYČ�Ky���lV�d����ҏ���j3�5V1^�7_�3z���&^���
��!��r4�"��~�_cf���L���
��11-GZ���'%#"&�F2=�h
ו����7Ydp8�Ìmt$
���Lþ|�n;E�X�є���t���b|�]��
�Y�-W6����7Z�ɸ�W�UY�V�o����<+����O����!z#kݬ1�ùr)-�63��ㄛ��i�Q����SL8;����v��B��
+Ne�Hj38�+�� �W�b��u~U����xl��`
+���&�;�ce1��I.���*
�Hy���%֘��I��+�6Ţ[M�^�L�ӎyęj0XlWU�m$M�����	
T��J8�}��E,���(�ī]	mvf�#OG�4v�Hkv�\fA"N"��,�k!dF�p�YS��fN|/�x�����L,���8�����_���^��>3�9�`��(F{G���(��x�ȸ��w0����AcgtӶ3.m��`dԀ��^���
��0
��Y�d��I��CX���uFZÍ��䤑�X��}#޹F�Jg�����)�
�D�������E�B;
����{(8Vf�U�48�MVuC9i�G_`.�6K}����1�,oTJ����8P�|����O�#�y�!
��d(�{$
UY<����K3�$8���;�����*loT�
��̲�b�-���_��E�
f_4MI�t�'�jEv`�?�
%<�q:{V-w6���<���S3>%���hޔ�>��X;���T:�0s)4d$�щT ����"TCx��ܣҥ�����{$�,
K�
+�u~�G�<������(Q�
��V�EZ	&i!*`�{9� ]�� S�����N��ѸТ�EH��ȑ0i�	9��lG�rKqF�G(
�o�� ���L���3��T 
���e
�|�D�Cy,���q�G7�\
;�Of��A�j tPO�.<�W���
�(!bX�"ĊΨ�b����,\�9���L45�Y�g�^���kS�*�5�n��ɔ��}�3�ו+��
+\��۪�
6E��8����W+��� ���s+�F
hq�Pf��i�F�Di�(��� �O�IH)eF�vL��G��]e�]�"��Ͳ�ƿ��@�WA��k�#5@���)sON�R�@� �
\�^U�0�{2����"�D
d��8j��"����� ��A
+V��~��h�W^�:�
�"Zf�F=� ��H�	M��*���8|����~��Qw�,��iϪ��]}�Sm ��Ҏ(!�%��6`-&1�j7!�~�K����3
��� S@�ʹ�N�T�ZHdӀ� c
H�*ޝ�'��֡j��L��']����U�)p��)|6�h�Ot���Pi�G���,G�~{ h�� �r���qj�жO��3��tᨏ�uᎱ݀=Hנ͠Y'F#��S��:�� \��u��Z�͞��bG���:0����'R >Eǹ�Z
2q�D�Еm��ec6İ�Pĉ�K�"��L�'��Wu��
+��
��д������%��D`g�_&Jq�#��̚y!�7=aR��Q�����a�<<x�풏�.0���WS�մ՗�z��-W���T�T�d���l�+��^�xZ�ms©X��ə�F�Ԟ|mg�^�3�yZ�=�E_��^�M�>
+�%M�7_}��뿒o"';��s�O��e�?G(﮿�f�X�X�#[��uG~wt�I%�
��v�"�k��
��$gC�](�]�~��,I�rJ
��9l0��/�
WE�4��5�KfҪ����u�L�\5<y{��V
:��܏�D���Xިїa���A���_���)
+­�q�����9�Z0]�bܞ-�ZӒyS���"�9o'�c./��io綱�����qw�Lj�
m���t{��oW
T�m������M�"��֮��<�^���!�MV�-Tm�lS��M�!_�Uk{�.�̳�
���ӣ�@V�" ��z�M�4y�B��\A�'������S�����]�n�,�V��I"]�
�n^�VE�v(S������\�#95ǂ/8�@`��E*~�i�Y�f~C��i�Y6J˗�E�
�\�~���!��Ճ���R�gQa�AXԮ��,����q,7�eQ:�*�q(X����gA�dz&"-��^v]~��:ݙ��5�mZ�o��j���f1�'������}�|l��8dڛ��Ach�tQ�;[�d�t[�:��	��k�n���M�9�25R��%�$k$[H�q�8 *��([m����z���"nv���Ul�|�m��i��
�˕ƨ�|d<ײSaRZ5���I�*)u%�>��%h�c
-D4�=
���)›����P������
��n�ep�5>��XR��&�o���53�_	/�.|
?}7mX����U��Q�ןR�8=���?Jx��ōv�=T���)z-
5/��n�
�u��ȍA`������n�զ
+��[gi�E�	�:p�_�L�-�y��3*I2^�%uU��vEV?���;�!�w0��������vNV�x<~M�0�+��ח�G������"���v�{���֙��6�-���6T����ȁ�j���q�k�(Vޝ�+:h��QO�C(�w���^w A�S�����%mǛ����	�1d��g���f��m�iy{�H��n��.]�g߯�㴊�S�D(Nj��z[�9���,
�pO���l͕ȕ���y�6"��V���
�5
ʶK�
�R�w���8��΍�w5���w
+�%��.��@
����5���Ǯ�!8]]i�S�sS�Q�A���w1\��D����{�w�b/Jہ���I����z\j5ޯ��h��%u��
+�΁�W�
+t4��pWh�<���4/7�a�n\
߃��];CI�@%\�|

s�>��kx��ID
d'
��dmg<_&�J�m�6��J)ǯv'����kQ]{lY��n�q�@�y+��mͻ��O
B8��7/I
+endstream
+endobj
+1408 0 obj <<
+/Type /Page
+/Contents 1409 0 R
+/Resources 1407 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+>> endobj
+1410 0 obj <<
+/D [1408 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1411 0 obj <<
+/D [1408 0 R /XYZ 86.4 341.138 null]
+>> endobj
+242 0 obj <<
+/D [1408 0 R /XYZ 86.4 158.545 null]
+>> endobj
+1407 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F14 627 0 R /F8 409 0 R /F16 397 0 R /F49 566 0 R /F38 453 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1414 0 obj <<
+/Length 1818      
+/Filter /FlateDecode
+>>
+stream
+x�͛Ms�6���<�m�@frp
'3�6Mk�.I��$�H�+�ɯdH�M�Y�|	���|v �Β�I����q�;~�Ub�UL%_��H4�Dq�\����"���
O��N/��ם���.�^M��Q�YkMj���w����=
+���.mIb�J�����Y2�+pk����i"�%
�&�y�^���}�"�#�(�B$�RB�����Q߅�s�o��
���B}�E��
��rF���]��S]�r��r��55�%�v���H
+
+�
ER�\W
�N�Yq6��~8��7�R���<�
!��y�W+�"
���!O�/�Ni
+���I��w\
�r��g#a�.|+����͑Ti>���&��z-H60���;����%�R|���
+{0ŕlf� �NJ���s2��[<�b��� �����
lG(��h�*d�� t���%$%Z���`��%$�KĊ�\Bf�K�{���J�8!�eBp�"x�Z���y�^��zɽX��9g�(������;8���6�^f�1(^����^� �&V
�-��[>��YU̷8
'�ȍ<�
*�-I��W0m0)�sm`�!��&
�#{
�,�!Sc��ڴiF� �Q�)�wF��IO&��贎YuGP��#���[~?п���EQ�+W��5O�x�֪
v���Z��6��
�b���Gw
+���z��lq],�G;�Ie��
�SM>�!|(V
�9����z�e�(�b�)�i�s����.
I������0��~_^{��R������S"k�
+A2��;��l����
h1C�š���ʹ$�X��a
Z��	�
�(�
gI��~]1����bۓ�
J�G%��)*�
����'�uu�
T��!%�%\ZP`�6��P
�"�N��;�ԥ�P
0��%0H��S\4/�0$�X�
1����9
��
���*ɀ*V�J��Y���x���
g�S�5��1$�X������&���ř]p�6X�

C��ZS�K�;g��[\û�
+10E��	!�d +v"�&���3y�2#���S�6�
+1$�X�
-��
/���CfD��_^1��)aZC�
�b�N�v��g0��4#���R�yC2Њ���m`}�d����
.˜�$�ٺg0�0-��1$=�5�.�̎��]������l�;SY��u
� -V���>��q��LR"G��h
A2 �������8%ܰ���7��dY��;��v\}
�2�^���öwT
mf�M�bq=��޳Ԓdl�N
�T�Q6-�)�y3K��2V
|����(�"T�
�q�=�9u� f|5��3����Q�����(X����"�w�p�)�Z�C�
�b�����z�l7z���x1.g����Wk���}c9A��߰G-#E�Ԥ01-�0$=�5���0�-��r�)
-
�t����8�kQ�ڧG|F��S&�Le-�0$�X�##Z��_<�tKF�@�%����@K�Eu �b`
vd�Cˬ��W���X>�:e��Y��߁�H�#
������˱+�˫� �HÃ�;ʈV8��d��_
ŀ*
�\.Z�%|]sXf].��uU,�ܥ��
+Ծ�*��d��p@9��q����%-��0=�Xop2=� �d�o��G��V]�珌Zõe�ӑg3���W�ix]80����
`�7x]V�WaNU<L����Ԡ��`�
+�QP^�˺T|t=��C�r	�֑.��p�OG��D���}��q������p�.��"��_���r>m
v^����{w��4
��g����r;�H������w���p�x�ҙ�ae>���c_��;�R;��
+endstream
+endobj
+1413 0 obj <<
+/Type /Page
+/Contents 1414 0 R
+/Resources 1412 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+>> endobj
+1415 0 obj <<
+/D [1413 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1412 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1420 0 obj <<
+/Length 3445      
+/Filter /FlateDecode
+>>
+stream
+x��[K��6�ϯ�QSe�x� ������:�&�r�
8g�eJ�Ij
���� H�
�
��jOA����n at lv?c���vs��[��Ld��n�fi��&J$�ݬf��&�^35�:o�u�m�js����Ww���!w���y}������S�W�2����W��\}����f��G�Jf������l�/���H�t�ɮ[ϔ4�����r���t�!�\
��GR�Ybx�u��oƵ%����oU:��
�]|�7�Sz�Q����1�e�eړlI
a�2�����6�Rq�A�P�1���^7o�zM�_~;\�tĴ����B13]�Y
9�D�����˶��;)=?l�k��?m�eq<��]޼���$�Y��Y7����U��_�?�6��j�ޫֽ��̣i>�:�&
��°Hs3[p̉/��G�2ZH">��G�ub��W����S�H��p�"������缛�Ũ���1h�PQ��U�)�db�(������)
+f��ٽ�`
9\B�S
xdb�U�=Rv�Cc5�5���Mge�y���
!j�:f�ũX|y�'�s
(�O��0z% |����+%�T�ѱ/�Ƙ���2:P
+�N*�Pz%b|�C�y�\��m|�\J��D�y$[Uz�$��}��`��ˀ�i]l�
0Q�)�żD��H'�$Pq�NJ�(�G���F
HO�W��R�^𹗈|�$?Y C�����X����r�>.�4�r�_N��)x|	�
�i�_ ����7<,v�D	_�x��ɐ4}Ai"7�2V
P��a�@�9���u��R�;ӊ+2����L��'���Y��˲�4-,���}��vWo��\��������E�ϟ0�ˇ�X@
�e
�4@�T�
��*0�����c��3T��:EBԴN�/~sr��{p7�ҽ�N���n����KH	�K�0zRJ@�4�C���<F\�ꈠ�����7�Ea'��Ƕ;�$Xk<nt�f�/'N�
+X�/!N�\���Fw	�N�#�������"�
/�؆�M2�����Z=-	��?��؋��g^��iPd��]�'�^$Z�t+����Z�n]1A�a��ԹX����T&����Tݞ����ưe�"� dRf�d��H��~9�R�'Gݸ�P�x~��,��ٸ�]c�<�n�%�v�~����<�!*�P�6��ĀX:��n}��ɺ��B�����{,S�H�t�NK ��2/
O�ƨT�L����,��h��Zhjhc�a�+�\l���&���+b)(�W�ͣ��UC,]�k[��c
�#�8��s��Qw�>��*�b�N �(>��6[�v?X5�ϡd1���A�Z�y;�ʦr�桲
+m����דּ�������{��!�p��
���Ca��֩��ҳ���Ҹ��������\Zʟ���M'�Y$U$X�ږU�[S�J�oٽvH�ۮ�ܰ��ОD�\gE�*�v�nI�Cp�̩��j�R�O@�9�9�R"�赘�9Rg�~#1[�a���|�XG>}�
�y�Ɋ���h�Y	&���	S���F³���b�g�C�P��/�g5i�����"bJ��ޮ��9�[ۇ],A��*�y�y�Q���
��B�K���4��;��"f���\B���AG���|�U�u9���
������T8$�GP�M�
�Nz�Ĉ�G2���P ���&J��"	m5b:�Ѷ��?��d�V�
+rT��H�a���C\��㎑K�4�m��ݵ� 4D����v��P%�dO��}�
�P�J�m-��&����џ
�K1
�KuD/�t �C�
�2���J=t�nᵄ����m^é���$�5 r �BL  ���h����O4�۶�[r����v(�c����d`o3}
�b�v��bdh@�ޟ,�oKD��p������
&
�-�[Xp
GZ�������Q�Ƈ�� ԏ��� �� P(�
m&����Q&&QťT�����U���Z
ʢ>(�!XJfՃ�ˬ,]g��Եr�
�C3�}�����fj�ڹ˖�s�!�!�:��I
+u>x.Q=FM���ģe0IEtK'E�
�F�`�
��z�{���3�hς&��p�N��Y@�i�+�!��x.��?�PEi�ps���x�cz6�dĘ<�	0
�Ar�MH�1�8�D��5����6N����V
+Fw�K��9r�br(#�Lr���N<�vi��?�m�-Qf;.C�a��
V��tB��!�dل�vW�(�)��W��(��cҲ}�v�!%UHk�c�L	�L�e����c���y��'F_��3?ر<��Il�Q�S��/By��O�	�a,Y����>���(M�X�6t-F��KVbP
���d�k�|��A��c�����`\"�ٳ�Lj����)�3>"
U����6j�C,��)�W�6p��:e������Y�Q�L
��_�"E�c�h�g�����i�cu��Mqw
�
;j��E򏻢���[�x�����ڜ�x���5ɗ���6YY�W��-@���a����Ȥ\ʶ�Ҫ����)G�u��GG"=������FR$�<	���i�i{�Df�̷mLJ��s�ʬm�
�������?7�5��F�qF�k��#����#F�F�I+�y�QP`�1�%ψ��TC�
�E� C��u�՝���r��Y9��{u>K���/�C���W0�e2�*#��:%��o;�3!�or�{�̼H����:2��u$��)���@kErЯO�"�}t��/�B����1�y�������v��|>ͪ��
�*16�?�{��?��3�G�w�*�����4�IK/��ۧ���q�em�
q�&|��
N\��Ud�$l��N�m�i�;�|
�Sj�h�GЂ�`�r�|�}Ț⏼����q�h��
�g�w$Ѓ�
�"�n(`{|�<�$Y�
�%�7wU�3�F�~��������ٰ�k at Kfܑ �F
��
�
.a�
��� C��IN2��������'G���B�֫�JjOE�m'H��;9�$5�������?����ם1���k���朤��:o��v�����n�
eitG�kI���6+��ݻN�}�A�޼���H���I$};
�D���%ֹ;��
��+
���ƶ1��'��
uzH��|h4��¬�4uP���wU�ȁbA�+%�^%��
*&5?)z��{���P`l�{��끋�¶4�SYq���ZP
�\e�j��7N���E�7�r�(��
|�%��&�bB����Ѿ��h3�a�Ma��q
��g�C0 ������24�C�(�����s�Si�'8~�mXW	�5��
o�*�(x/�
�H+=�řw�"��ړ xQr�t�N{�]/�
ʫ�
%���� B
�R�"%��Bz�x5�

�tG"�h҉��
����.�;K��/�6��
+�� �����],��������R����!lY�
+endstream
+endobj
+1419 0 obj <<
+/Type /Page
+/Contents 1420 0 R
+/Resources 1418 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1416 0 R 1417 0 R ]
+>> endobj
+1416 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.649 418.282 142.371 429.131]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.3) >>
+>> endobj
+1417 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [252.693 179.179 267.416 190.027]
+/Subtype /Link
+/A << /S /GoTo /D (table.6.2) >>
+>> endobj
+1421 0 obj <<
+/D [1419 0 R /XYZ 86.4 726.045 null]
+>> endobj
+246 0 obj <<
+/D [1419 0 R /XYZ 86.4 459.032 null]
+>> endobj
+1418 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R /F38 453 0 R /F16 397 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1424 0 obj <<
+/Length 2261      
+/Filter /FlateDecode
+>>
+stream
+x�ŜKs7���s�B�~䖵���yH5�U�
�S�H�MR���o9=�ƖO�����
�7hp��͟
o~8����7�+����Շ�[�'�J4Ww�淪��s�����ͫ�����O?<-o����f���fq����L������޾�����\
+��ig\�x����Ӊ {��3�k��>���o���T��?���F��$���\��z����ݕ�j��,�%��n_���y}�$���Էg�Z�Ӌ�Ͷ��>]}ؿ������j��}\�ꪾ��W��"?w~�Tɬu�������f����3U�9�A�+3z�k?��}zXlvC�����3
+<4FJ&�ˍ���	/��<�ֱ�S�aTY�Ur�!�c�s�*(��T��N0�T���{�|���`�9F�Gổ0��C̓���2c��� ��x7�8	���k�U�8�A�����{�
Uu�u�2�9
JU�QGs��>Q�A���._�
�9w������U
�~��
+pٴ�TUuX������⨰��2]Z��,��Q��>����u�z�=�3+T���՗���"�9�n�"��J�ˁa	�
�����=Q��<��6�y�~�DH����8-�c��P~(*a)=X��e��b�������������m8\5IByƭ Iϔ�$	�a:ic``U$4�
Hc1�A �� 6S.y%�G�$�LtR�y��P�u���6�;IB�r�ˍ-�W��"��RE��p�LJ=6�ϱ�@�d�65�|�
+弑3J�Z���fƨr�H&!�M�F��ԃ\�mb�M��'^IX�/�	
�n�e
+��[jf�G������
���M�F�@�(�E��h 3�P̠����	M 8�CH;^�Ni">��8>p�0�~]܋�h��~��!�sҎ-�׋�v���3����[�6�ɞ	�j䍛[)o���7�Y#o��Jy#�<�
�̈́��AT�3�-��ҧrX�B��TKT�*}jl�^~�����3KM�
�P��@���hR4M��F��!h�˞KKc�{[��\EvD70��U0L�2<���fg�'�ӭ]�Ɩ��
߭�ןY�/����M����#7BQvq){�Hy�U����
��w�]�~G,z�����
��XS�'&�:E��f�����)c
q��*Xǖ��c=���3G.�u\FkJވ5E1�h v�o��0~v��cbT�ݍ/��:�
�U�I�%�K#2o�@6����X�=� Y�
ۋ���z}���mf��ntd��F�x"�%O䳆g-z"ϓ=<S4�g���'A�-
ci�|�����Iq7O�O�]�	��IqdپZ-7�
��KM�F�@vfy��x r�P�Fv(�Ac`��/{+$�
-���
�LK(J[�C�
��L����Z���]��e��zu�agf��}-���k5<q_+y"�5<�͒'�Y���%Ody�g�e���2A#�P�;��3u�k�Ω�[L�A��2����R�юv�Z'��ȱ}}�w�u&A�\s
O�LpY#m䲐6bII1�h f�3��@����Ļ�ݚp�J�)Sʖ�M�3�V�6c�����!s_bf�I�b�
h,q�,Y"�,˒%rY�w˒%b\�߫-Y"�S-�ϗ�q5��М�����Z�g�����d%�쭱e���&���J��Ƕ9�'{&(�h �
䌢��4r���L�

+61U
��1+�mi祯��Ȳ}���s+M�3�͠3��
�F�I�G��ѣC�@t(ϫ^2������5�<�&a���g�⴫�<�Ȳ}���ߞ�[l���:GO
Ͼ�,z"m5<�~��t���΢'�<�3A3Ac������w���P�
+�¤,��$RT�9�l�]���j���8��$̱u�ɞ	8)E�h <�
�F��">�&������E�����.�uU��ز}w�̠3��$:�m�ɞ	t(�Eѡh :�
�F��'��Z�Q�W�x�cR���qZ�*Ol���B6���&鉭s�L�L�S#o�
+Ky#m���6��F�h#hĠhIm�/wqěp.
v��:o3ϊ�|7���"�f4$t��^�k�KM�C�@vfy��xr�P�Fv(�Ac`��/{�ru������W)%4q����.���?�:��?ɵ~w��+C�̂��U�ۭ&{&��h A
$���4���w�x�Jrh�,�q���N��LU���.NU�NF��1�ק��~��<9��$B�}�ɞ	�(�E�h B�!�F������K_��?
�k
+endstream
+endobj
+1423 0 obj <<
+/Type /Page
+/Contents 1424 0 R
+/Resources 1422 0 R
+/MediaBox [0 0 612 792]
+/Parent 1426 0 R
+>> endobj
+1425 0 obj <<
+/D [1423 0 R /XYZ 86.4 726.045 null]
+>> endobj
+548 0 obj <<
+/D [1423 0 R /XYZ 210.237 543.182 null]
+>> endobj
+1422 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F41 902 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1429 0 obj <<
+/Length 19        
+/Filter /FlateDecode
+>>
+stream
+x�3PHW0Pp�2�A c(�
+endstream
+endobj
+1428 0 obj <<
+/Type /Page
+/Contents 1429 0 R
+/Resources 1427 0 R
+/MediaBox [0 0 612 792]
+/Parent 1426 0 R
+>> endobj
+1430 0 obj <<
+/D [1428 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1427 0 obj <<
+/ProcSet [ /PDF ]
+>> endobj
+1434 0 obj <<
+/Length 3138      
+/Filter /FlateDecode
+>>
+stream
+xڵZK�ܶ�ﯘ[�UZ�x��s�SVʎ�r�U�`����hq�5��J���t��1�ݍ��ģ�
t������t���~{{��W�lDʲL���~c2�6Ϙ���v��%�롼lw}#s��׿��@k�
���U0S�৮��<�X��=-{Y��
,}��[z�o��#N�
�4�@���c
�x�;ն��ͦ`E&2���1ͽ=8�2���Z��Е5���d�VL�
ֺE��o�s�R3n¤#p!��v�`��L�r
�A�J
��@�%u��<����GAa
�\U�
�~��l�(��h�^�����CK]���I�O�v�ڦg�,oL��~�9+�������\C%;۴��Q��v~���wg���ùa�㩫�ΏPd�k&�X�����C�{;��Wn�3i�$S�d���d���
+=���
+R�;k/��$v}��J����I��n��k�5||�62l8
l�ѡߟ�{Ѐ<i{�B�U��/}�
��u��E<�� �xA�Մ���h��F�x�mX��f����t�ߐ�8�*���^����v�����i��V���z�[�8
��u�
\l#
�_
UGЃ��L�I��k^T���k�%e}"
�C��v��#s8���Pnۻ�l�
���m��*�W��L�0��L�瘇��G�Zı���6���a��~���7���w7�)��	����/X��Np,�6ޚ�7z��H�tx<��a�!{
�
;p���U�
P
�F�S��%��z�� җw��WN]�P��EDN�7)���N��HDt�g�ӂ	#�_S���o���p(=�;�o������tG'$���s�R��f7���~���n���K���x�SS".QL31S♣�:y8T[d��?��� �0�[�f?2�*;m�vy�
�n �ޝb+�S��='r,���
�
�x2�P,+���
+t�j'���^�
p��2�꩝nT��\-.+�(�|�#�U=���c�~�N �u`89أ��E�k0�p��u����-wh
�ƙA��^ h� W��^�~Ž�H�4
?9�j�=^��[���ĎL�Q<��Ǎ�@�7o��A���Gx�Y8��LP��}�O�#އ�P"�vmBqguh�?팇������ƣvF%
+�R5����
+
������8z��r�FBx���߿��
�%���� ��m�[�zꧻ�V�- ���}�4|�
��(��
�h
��W8s����6��4)�4v�����I˂�Y��������3��˥
SJN4�\My��%�dE�Ez�3Ť#��/
�5ˤx�q�S���
��ș����|���CG�5����=,��cnj!���Z�[��Q) Db
})ڄ�R<'��Bt��
łUP�TC���iK�
5s�*��!
dr&g)p���\��|�B�5��7�gk�!c��d����I14rt��~;�������z��W��ȟ�J
��b}�I@_w
���$&�Q���"�T@伌����y�B����c><�%#S�u,ѱS
�SW�����B1lMA.�s�'�P5Z�m��z�%�(�f�ET3��b
�
�"
y�k1��4;��y�:	R�o;��c�\j�]
M��)�Ǜ�Y�d�
�g��9�e<���w�_��H
+�̴���n{1��ͦ�
+~�^*��h��hZ�yf]�tDy�xȘ �Y��~W��U<�5��'�u��B_Q �"��/�k	��́��<�9O�mޜꕈ8ӰyD
c�d+�q�<
���,��������[S
,���n~�݊�@�4�5@�
+H
���G��P%`���	$����q���c��W/_��nU
�x
��=T�
97��B� 0&�)��0��4�DrD#�eVb-B"�����Q��]�0��4De���9~�*����qo�H}�(lg ��f[�SMdTp?
S��ф��[v\ r�g
�m�V��`m�=�� ي�\���n��'��&Q
�I�gW�C~����~�26�s��hpu9 � �C��� :S׹#�*_��k��gy6�_����|��
!��
�y}.
ј#���oEE b���T֠����~�I�3��"_Ё��a>g��<�"��T(��Ԁo-�����&y.�T�mM,6�E!F:���е�`UWC���ʝJ�'�l��!g��tQ匶K���]�X���:Uw�<�;�Q�oPY֕����8I�E�;
�.4b�i�eQ��Ѧ�;��4R��n����ˮ<Z`ϱ�
1�s	
+�d1xqm;,���}y��ˀ�?0�8w��x
+Z�,��;W�D&KT,��8{��c�B
��D��8�:j*���=Ȯd����X�f�	\�X��:WI%�6�
��8��)�N����=�s���[� M$�����!����pZ
+����}�
�f�Gaq���z
⸑��1��mQ����vU{�k۰I9ꮧ	'=S�����&'�F��������m�m���H�=�I�3�S�S�V�:�����TG{��Q;D1���'Ἑ�6��2̅�Ә٫ㅊ
�;c^��ѧ aƣ���ALl;{��T�
�R|�;����
���o2k�d�
ȭ�3r�LgKI�C�,2fbY3zۼ��`���8ߥ���ܑ�$���]x�
��ʪYx�)��7�7!<�O�2��B,h�*j�پ����Y4�,��?30�<'��
"�g�Y�'j�M#[�>:��T|��
\��5Ҕ�:�n��`;�
+�;a��c���yd��/�
+8���W��\2�TM3�TM�>R?ý���@��N[|hݟj��@�;�L<���'7�}�WԳ`�򬖞�#��J|T�=5X �ON-��"�U<.�f|���l�>�,>Pf
ߤ"���6E�l\��OMZM�HIN�Jv
+t�B7�_ȭӱv�HAc�/
������ 0���́�6��z��Ċ�ʰ<�x�|o���+�f"��4��D0
+(U�X,+y�?��8\�
>@(g���y)̣���r�ı(����G���
ך="����Ëp�o�"�
���T>Yt>�nr�5r�5��2y�!|��$�.��DTcf>�r��*��?��g'j����b\v�4�Tעђ~ЋP��T͓>U�������+AP�u�{�Y�= wXN~�\RH��z�~�.�uy�C
x
+endstream
+endobj
+1433 0 obj <<
+/Type /Page
+/Contents 1434 0 R
+/Resources 1432 0 R
+/MediaBox [0 0 612 792]
+/Parent 1426 0 R
+/Annots [ 1431 0 R ]
+>> endobj
+1431 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [101.369 356.153 123.841 368.108]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.4.5.2) >>
+>> endobj
+1435 0 obj <<
+/D [1433 0 R /XYZ 86.4 726.045 null]
+>> endobj
+250 0 obj <<
+/D [1433 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1432 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F14 627 0 R /F36 408 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1438 0 obj <<
+/Length 3453      
+/Filter /FlateDecode
+>>
+stream
+x��ZK�ܶ�ﯘ#7��&Y)WE��D��(�r�}��pwq�c>�Z��t���`gvk��r�‡�䫛_���/�}��*e��v��z�X�W�L�Ub�q��%\^�%7RD���R��s�-�7�k���E���>k/�"ʩ�m�ϳ����3���g
�T����]�7��}|s�������+�/nX��j����7���?oV��4Yݹq��V)��*W.�y���$K]l*��-�r�6�2�>]e7(���
vuMKO��6��?I�V���
�����iH�Ƿ���&o���}��S_WeY�;2��g��gS�e���ۼ٠%�K������������,�U 9XL���ƫz]�ɵ ��η�$�L�
3595����B�m�D�6��c�pj��8S�26(��O=]p�������@Kz�h��XM�)���b�]#@�o_�i��z��S�o���M�Ai+�ݨ]���{��4��A`
+�o�S��
+���ۢ��	�<��ݛ�7�
DBC�ϗ�FY]T���fmF�:/�6��9+��>VQ)�L*z�O�h�Q0�C阋���q+�Ƣ@����1�4���~}�Ck��^؍���OxS|��|O�ž����+���R
���u�C���ImV�fxz
+-*�¡�lEe�rS��W��d�A[X�
�+7��kI�}�u~�+��nC��
+���ng:�(p�I.!
)5�'��ɹ{�rXW04�)
�����
�抙��)��^����ll��=�����"�F	,ޢ@��]]��BO��nZ��ثiŒ�V���p��X����c�3�)�K�J;�|6�Iӕ1�ٓA�q���&IY��0�e6Nzͥ"eB�O_u�8��
����h�$�SG�
+��
��`J۳�C�0�
+r�cp�ӏ�������O��s�H�0k�#��9[X����5�BY���f��Z$���ŵ�,�~
���C���g/�~YKˍ��D��H��~�`�+}>�1���w��~'D���p�N���N}ld�Ӑx��@�n�S��D�p 4
Q#:� 0�p��4
AU
+b�v�T������8�~K������ �����F�/܂�UW��Y�T������i���1���P�A�0b-к+
Y�W��;d�g2==l�@J�ݧ숺a�_��7��+�[���
�l
����Z�.~'���u��i�C~BA�1\IZ�G�ߐ� 4��`3��}y	D�o��C�[���ɺ�A���z�
+%nv�O��S`/����C�J|r��D���|�%")�r�m����v����((
b���q�W FX�
��cPI�
���N��4�
����9��]����
�`�t���Ã˝7��Y����b�ԟH��8Uq�;��)��y�՞Y|vi[�
���<z��'L��]D2��01in=LA���h�"N]ŵ�m�q-k�
0�Y�uW���Q=˷4���aWrf�<�K`z6�h��C��=O�H�uh�6=���@mC#({A�S4x�}�z���� !]�=F�T��TzZ��zx,M�[l�qR�
+?OG�D�q�IhH�0��tT�Ay�j&�stTA��\*� 5	2�ӗ]j
��i:��uy�ף�N����X��(�
&Q��1�a3�
�GS�|��1�|T����5�4�C{L�OĽ��P���!�=@vKI>v��lڄ31���()��]5��?���ʸB���K5�
����o�j^J�E��0sԗI�����쥨�o�|�x�S���5�ŗc�`�1�|�D2�ٯ���
8
�ȧUB
GA�/٦%9��P�\��`�����|@Ma&�m��
�Ʉ��(l��]r�e	�ۦ��!����+
l�;�ȧ�DW|}���R���r7Y�7�e�b�q�
�҂
�L�
ԫ0����a�M�.���<��X_�y��w/ɂfz�{Tw
+XZ���k���!�I�B�߽��������X~Ȉ�Q�vH6z���
�-8��7=n
+��TF�:z�m�+�2m��B��� �o�W¼��>R'�}�V��\C��
>��
&{�Ǔ ���:��@���O�2�{:���ñ
�Rp��L�RAhI?��
+P�����8���66�&ɉh�e<@�X�`�R��wRhd{�D��f�c��K@
{kt��cy�$C�j��w!�3ɣ�JXu��i��a�$]M-��,�Ժ��������[���[M8�
�`�Ƕ���+�c"SM�9�(����	��ؐ�c��1b&�-��.�#-L����&��Mw8�����?�먡6�#F�
�ɱ�T�6�,�fI
�V�s<,ߥюjUx���{�J��rbG��t��x'e��*�����*��W�wEݏ
.�l;��ʘN8!
��\uPgP7�F�"�}zYQ硿\�3�]��k���U��<
z�y�u	�2���2
�a�?�bj˧7�
���v��B`���`Ғ`%DMo�}^X�M�����	���ƮR�P���sQ����
@�ڗ���hm��Ι	�A<���9����R��׆�ΠؓC��;
n���B� A�;�(=�6݃cMw2n�
,���+���o
Ӥ����]�W��\҉
s�"�FW{?lR�h�zQ" [...]
��X>�E���Ĥ/Z�5��v�}q	����=d�.=p����P*��
��1B��2[n����~��딧����4��_�
���O�����w|�A�
��{��;������
`-�Y���>h0އ�i��ܾ���*�C:�ʋ_�<�S)��_�����0���O+�NB�\_��v=��D�B��l����yPѕ���������o��^���2,bx<w���YZB��U�� ]]��0�l蹯���H��0�5&,
3zT10	d�c���x�h��3�PvÒ؜�L��OoԚ��2r��}-c
��F'��`��������[��퍏��܆�B	g|4Nx
~�;
+䱰'��;��8�ؐ-�P
�I��]&6:֧�3�̈x�	�zVEG$�;�`&�����, n��m
U��'���H�T�^����àr�&}����	SFϔۅ�S 7�"ml1�wzP��*�?g��(�Z�zC_Sa�Cq) �O��H�@�����[u
(�݊��
T3�[8$�ϱD�y�^�(w��
?�F�b)q&��s$r�)P:�V#@�_��|U�2n��I��3�p
+�4��4>i��W��7�1����{ȎS�
ĦX��
���
+��p ��~����rH��:��r
#R���=��T�~�����*��9`�0��O���Y��D
+endstream
+endobj
+1437 0 obj <<
+/Type /Page
+/Contents 1438 0 R
+/Resources 1436 0 R
+/MediaBox [0 0 612 792]
+/Parent 1426 0 R
+>> endobj
+1439 0 obj <<
+/D [1437 0 R /XYZ 86.4 726.045 null]
+>> endobj
+254 0 obj <<
+/D [1437 0 R /XYZ 86.4 623.775 null]
+>> endobj
+1440 0 obj <<
+/D [1437 0 R /XYZ 86.4 567.179 null]
+>> endobj
+258 0 obj <<
+/D [1437 0 R /XYZ 86.4 423.081 null]
+>> endobj
+1441 0 obj <<
+/D [1437 0 R /XYZ 86.4 365.655 null]
+>> endobj
+1436 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F38 453 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1444 0 obj <<
+/Length 3927      
+/Filter /FlateDecode
+>>
+stream
+x��[I���ϯ�t�0�%)W�){R�
Y�T��v�zȞ�.sKwS�����W�˄�T�
�4� <|�[0t�0��������׷BO
q��ɇ���DN
wD
6����25D��Š�����L�i��rz��,�b������DrN(SЩ��Q��7����
�R:aM׊X�'���/���j�L(�N>�v��pxZM����D�&�����j�3�'+c\Ea�֨��_��ބ�d�scB
�
!������n6�_$���W���
�F��С���,Q�5K��@��p\!���iUTG�K+J���KX”ilЁrn���a�T��O�؅_����#ƚ��
���
�f
�z���
\I����Ŏ�Z��F�����sh�
�\3"x��Ŧ���ׯTѯ�
+�#��^��k�տ�Å�Fkȡ	���]�G��ΛNi��_���
.�#���\��1m����/�m��rB
c�����w�<6͙�G
qJ��e���]
�~U��m�e�~����~���HW��
j�$���w�A�N�U>�v�˜k�<�
������9�t�قܜ
5]�`�}U�7�`�
_����*6yV�6OU
+�Ga�7
Ӕ0i�q��r(	NY�p�M�
+�����
	(���Fp����2Ot&P9���
v�����O0/`��h�d
���nƦE�I
��M
��MjL�N/�#�4�(�����@�����;�yK&3��|���Y�/����fu��sZL���7� ����ڣ�BF����o�ݮܢ�|)��4��l�`U^%fí$V�����H���8l����SHE4��`qY9�3�b����
&�Nfs)e��rZ�~���lW�2�~�*��J4���O/J�.6�}M��{Ν&�:�����Z>��qk�A���'�+LKB��(e�Wa*�:a`n`WZ��WN��G߾!̧՘
Ж�պ� ,�M�v#`�m�:�@Z��Ó�W�K�B��2�a�Y�q����a�m{J�)�`�Ay��
��9
>�rb��}[~�(
_�=�
�U^��zd��^�Ւ�B��>�b?��ߊ������H�(&Q漙:Z����iF)�z_6Bա�z��W�p���U���ކ�ˊM�*~#A�}g[�R$��i���l��4EG�8y��̙�.S��v�w�Qn�:��ư�B�*�3�� ���%19.�����!�:�K�,� [...]
F�ȣ������?���J�d&"�r��v��
+
O��
Ͼ4��@�
�5P�(T!
9�\�gz���b��c�ͪ����#˻�r�a�x��H`oy7W|����u�Ǥ�Z˵0�{B� 
l��؀���
�#vA�7I�tr�˃n�N@�^� G��L
[��L�7��^~D�:�R���h�P�O0�I�L���#kG�Z|o�����tM�.�}@
+����MIܲ�~Q'�qhs���V-zs�=Ȍ
�c~�0�MCX�q��\!��j}IA�v�I�`,�B�!8�?��֧;��^��3�M�yf��g"������E�3�+Z٬3�a[�H�j�V�\0
V���x���	S2ۄ�>z�D�
�:JBݹU=�� ���
.V>y��o�|�+��`i�t^*ߥ����fR
�V[���3�D�=?0'b
��|s9�胕-�t�7B[?�����7��
3]��E���%��s�:���H���R���s
�c�rW��q�oc��U ����gL�_�q��i{��`ˁ�<rOn��B6�
�4�"�Q‡8"<{3ݜ0��a�yp.�И�G��g�9Ky�Ps��Ĉ�`�
w�� �� -�u���ƕi�/�ӄ��"pb��E+��x�-`�uQ�=Lj�9>JQ��ږ��j�E���!?\�M(:N�R�Ϳ0��Q�4
�;k�����A�����M�'#��#�Ƣ#�QȎ����'�v [...]
E�}����E^U�������X�c5𛗥
+�4X�
�A���2Ԕ��O?h��vA�������#�W!$ ;v�jc�~
+�-��~o�A�º�x����
`��Z	k��o���xބ�Cx�w�
+-��10�D���n�ֶ���*9�	����*���gJ
��4l+���D���YO�����iB�
z�]���ΫqHhc����(p�{��
+�M�yֆ��
ا0�ɶ
�.�	¦�>v�������3v���K揖G_u��t��.7ub�u�������1�\7��	�|����8�-N2
+�0�M�d�VWE��/rؓl��}b9Qy�
�r����7x��t�
+��BsU�M�߂
)�����~.�AhԪ2�b�
��STm��&17pd���	

kv��
!���֩DC�
�_:b>L$ڧ�g���dLi"��u���p����IU�OUb�^��T�q��HL�
 ́v�����
���9��Er�OɈ�b�2z@�x��HцŒG�KlwG���u��#�jќ�8
F^S�R2����Rѧ�#{h��|Z|��=�"�"!{Ŀ�H�3P�۔�
���E���^`��x��	^ &$�{x�N0�/��P�z3H�&��c�J��,����퐈<%��)�
+,
��vm���1�"�f�۵�Ǐ�z���B<L,��8�u��m��xN��K
|���E���ɬ�A
�Nm�)�-��i�#n �D�\x#(X�~Wn���w����G����s��b\�is�)��&�����wۺ������m�8�������|,�O���

yQ������~oC�2fƥ��렰�����ǐ8�g��������W��H"֎V�xN�\�#
+��f'�P8>�����¯Qp��6�����X\ٳ,.;��U'�%Y��%��Kg��)	ۜ��m� �a��E_��ʔ�ubA%��e�&�8,/��*�Z�I~%vE�y.a�
�9���
I�9��/$
�T,�b�x�!
+l��F	�._
+k�e���g��u���1�$/�ݩˑsE	��p
%
+�
uw���:�J��_�6сo�$3���a��3Gs3�װD���������bU}[�ƒZ��������<b����Bq�T^����"��P��v�t�)���fuT�,ƺ���mP��h���k:Cue��p�Qv.�.��4�,
:v�0�Fs�z9a at E��5�d�.ĮX��njt
+���2���
e�y�'���,�_f����f*Q�'?,`�pC��O3
^�:s�k��܄le�b`�:�S��.	Ɛd�a|lS
+��JS�����Et���
��H at 8�̮0qn�\��� ���qX��
|V
|V���!����6����?��/E���5��'zQļ
������
Ӱz�O�Fl}9U�L�à����5��r~a�`	 5���ǽ�i�Y��a� �<��%�nh��͛a�y��,|����ߧN��ђ��
e5��{xJ�1�h���m�����׿�>y%ypC!qp:� ]�,����g,Fd�_r��x8�a
�K��u�x���	O�8�ޒ���Mٖ�7)R�,ˑ��،���|
+��)6hn��
 X��	���v��;�xŹ��x�IWyJ]��V�%�����6i�i`���*���3��ve�(���*f���� �
7ȧ�?�N��mQV5�#�>�����wW�Ɓ�G��7�f��az�OE���������$p��hss��]��b��v SD�Q"m���p���o�
+|�;�`�1
e\}Ct�]?��tkc��j�C�5F��
؂-c!�o�����3	�Ee�Ĥ�q؉�]6�
+endstream
+endobj
+1443 0 obj <<
+/Type /Page
+/Contents 1444 0 R
+/Resources 1442 0 R
+/MediaBox [0 0 612 792]
+/Parent 1426 0 R
+>> endobj
+1445 0 obj <<
+/D [1443 0 R /XYZ 86.4 726.045 null]
+>> endobj
+262 0 obj <<
+/D [1443 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1446 0 obj <<
+/D [1443 0 R /XYZ 86.4 651.968 null]
+>> endobj
+1442 0 obj <<
+/Font << /F36 408 0 R /F38 453 0 R /F8 409 0 R /F48 539 0 R /F11 628 0 R /F16 397 0 R /F14 627 0 R /F10 700 0 R /F7 701 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1449 0 obj <<
+/Length 1349      
+/Filter /FlateDecode
+>>
+stream
+xڽW�r�6��+��:��c2]���؉�$��ɂ!�S�tI�
��{	��(1�[e����{ιW8ZE8�m��|����� #����HK�#E
��D�4��	��ł��SUN��4+V��,>�[I3������Ya��?ߔ�c��uk
_��K�t��z�m~99�O��G�s.��2Z�'��p�›�#ft�;��83��S
�L>O�v2z7i"J�\�"m��=���(X'
+l�3�I�e�����AAc�;��)B&�;���z?Ia1m\`L�Cy2D���t�
�i���
��'���8=##	H$d��W,psU�Tǩ]&���=�7�M���:.�����v���yZ6���9FZ���k�p�T�q=��6u�
jH��-*4�����S�AF���*i��iĵ�ìs�գЇ ��+�8=��� 
'ZK�z�/��n�N����>E
�.�7�D�|�Gj�����Z 
c��`��Z('
+��m
Vv�T)���r�O8$�y��\���Z	����ૌ�x�t#Eh����
�1��T�8�7�7n]��@2$8�=T�Ջ(ƀ�W�	V�ƪpҦQ�8���.��)��r�M��WL���Q R�(�K�GV�#���r���
+qy��ܙ�2Ta��wI>�Wb"�C�B��C��U��r3D��L{@A!���(6cM(g�뽀�e��^�]+䕭-M��b��O^�[�dc$W
I#"�2�
+D�$H�F��A�k��O��.��4�qI]��ԀnN�hn (>�"���z�ԕ�Ζ�y;w�x�4YY���X�՞
�(A��-)	⣼��ږ�E�z9ۿh� }�ʗ�
����i.#��
�V�ʾ˜H(��8XL�F)�[M=�V`�#	�&�Cb��p��:�
�~x6� lB��u��mݷ���6ڏxY�N �Z��.�%]���0�oǹ���0( �n��(���X��d3�:����f@:��w�6������o���X8F�\���=}��/7y��׎bI�z��^w�n_8V��n�
��m�C*@ +4L�� 
+=y�6N��fm]M=8�*���
�� @�ќ��@����%t ��):L(r 4�U�r9 ��g�
\�H;��y����2}~��a�ۙ�Fgi�$&[���X�`p���VM��PL_Ӡ�_l������.���ԫ>
�Э�՛���&n. at 8�?EY�m�ҿ�>*��5��.[�̤Ґ�Ä��A���
+�[���������o<T%̬k��O�'῀
�wQ�r�tF�1�=x�����LW��
�(���6���Xu
+kS��Q�)�!i
�
+endstream
+endobj
+1448 0 obj <<
+/Type /Page
+/Contents 1449 0 R
+/Resources 1447 0 R
+/MediaBox [0 0 612 792]
+/Parent 1426 0 R
+>> endobj
+1450 0 obj <<
+/D [1448 0 R /XYZ 86.4 726.045 null]
+>> endobj
+266 0 obj <<
+/D [1448 0 R /XYZ 86.4 637.806 null]
+>> endobj
+1451 0 obj <<
+/D [1448 0 R /XYZ 86.4 584.665 null]
+>> endobj
+1447 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F38 453 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1459 0 obj <<
+/Length 2358      
+/Filter /FlateDecode
+>>
+stream
+xڽY[s�6~���#5� ��Ӧ�d�M;��}J� K��
%*$�K��
H�-�3I
lB����p w
�xy%�����/t�H�Ȳ�.�oy&�"S��f����m���w�Y���I�|w�
�1��N��X�B�J�a_�?���W�.��˛����*�]a;\���<���=�SI�
;�ֵ�����������
Ӓ/
+Qdi)�J�2��3.�y�ݗ-����%��v�T�@���|Z�yx�&�림Y�Ʈ�g �-.E&p8��k��	�O�:�
�vmO����[ c
+H�=+h
6a3��*;�Q'
(G2��a�)}՞
�(ኢ�����9��?ݗ,
R�J煰�.VJ����	T��-~�9rI�!G.�J�2��8ѷ<�m �ν_� �/�M�]h���	S���mC�e�d�,	%t7Ӊ�z�?�nݕu���x̟В"�3�+�02}\z�~�D"5)['m���w����u"H�ʈ˜8?Z��} r��G�h�l��
*�V�VJ�T�'��
+Y
\E��5w~W���$Y��P�M�u�eU��5K�67�1ֈ̹~{�͂�ΐ������hoPܝm.O�{r�{-�hả�7e�`�ƨ�
�jK����Z���}S�ң[��ۺ�F>
���b:��hG�?��0p����Q� �2�g�d�i<z`��3jC�� 8��wM�&��
������6<��d.t1R�/��O�PV��o���IG��4i׾
+��=��E��}%d3�-��W�)��o�qߏ�K��a���JXs��$ P�
,z�8�
&�N�m������(
bK1�l|�ㄮ9��C�>�Yܴ���緃�ϙ��O�%s��H,�_Oy#������+�rw��'��y�Q,2G�m"� IT��d&�1
���I�S*w��j��
����T	��nvm8��N�Ժ�t�[�fS�
�ȑ3l�G�s|�M�ζ&ۆ�>�j��a]���[�̛�pw�?♃��~$�/q)��ŀ~������8R�$"��H��U�|�ȶ���c�i<
�&���X�:��WS����=�<�8Q�
�ӹC)j�F�t�Q��ߤ9������s��	DQ�"�uGH�kg
Z�)��^�4~�E�C�6�C� �!� ����o5�9��
MR�@n&�Xm@
5���ͳi�<�|��+?h�F�g�$�B3JNC'PP��#�ݨ��K�%���M��[��[�����xG�!�
����a.%�6��M����lׇ���vD���r��ἰ�2 at 0�@^?���H�S$o���'�j���A鸆4��ü�[OQ
o��G��v<Rv���$M�P [...]
+s���%%�OV��9�CO<B�S�ż�3��
O����T��a`9��GP���� �/�P��2�4�Ⱦq h�w�fO"�̓B���n�{1��>�g�C�����?�����Ӂx�c1��fZ8i�n���v	�y^Np�t�w�Ӌ*|.4
K
�7tO@4@,�ofQ7�I)a
+��$��\���M�o�U�e�Ge�J�omR
�ԇ9�2nC�w���
���__O-��q#2�r� �+!xTZ���k}[c�L
�4��\J�p"\�
1��UEE&d�H*���6����*~�1�AT�hI��iT7�H���+����]��K���\k�)^����1�LH.�1�
����>\��ٔu�j�J���|��^�}'�e���h�v���[�ś���]b��3|�(`'D�,�����9B}#S���K*�I�*�M��|�5 G%,��l�3[43R��}B�@L:$���{���5�'�ܘ��
�Y��
�w��
�ݮ�ʦ���|X��Dڣ��˥�"S�T�����T��
�j��� Z|����l�]�3cM���!�D�T9f�z��OG��F��GЁ�H��
NA�Ҫq�m_��?��:7wU��:�XY
+��t��pr��2{�H7��F2}'`I��m�n��_����B��k#�9/�:;�]O��
���Q�裬�������0���ĕB���a�|�
d�=	�X�/�7��M�ДK�_ʢ(f��yzr��yM��
a�<�5ۭo��fx�����4%�f��ᐤ-wk����
��؀#��*��
���55���2|�7l��6(�8�`�B|����]���7	�`�����C"V�S���
J!�� �����_HL�-�W
+endstream
+endobj
+1458 0 obj <<
+/Type /Page
+/Contents 1459 0 R
+/Resources 1457 0 R
+/MediaBox [0 0 612 792]
+/Parent 1461 0 R
+/Annots [ 1452 0 R 1453 0 R 1454 0 R 1455 0 R 1456 0 R ]
+>> endobj
+1452 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [434.163 261.844 441.137 270.257]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+1453 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [445.232 261.844 452.206 270.257]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+1454 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [516.855 242.069 523.829 250.482]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+1455 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [110.31 230.114 122.265 238.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+1456 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [126.361 230.114 133.335 238.527]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+1460 0 obj <<
+/D [1458 0 R /XYZ 86.4 726.045 null]
+>> endobj
+270 0 obj <<
+/D [1458 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1457 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F16 397 0 R /F49 566 0 R /F14 627 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1464 0 obj <<
+/Length 2638      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o�8~ϯ0�/�`͊wj��6�nm�ۤ� ���"3������`���CR�d˱�x�4/	-Q�<����F������?q5JH��]ߎ�"b�YB�����׈�j<�B

��
[��x�
�>�"z�/lZ��We�y�Yd��7�|	-�
�����/��.�/^���v������3
+3�G���$F�Q6?���x4�7?�b�3����G�'�A�]���,�jf�S	%T+���z���r�3�<�-+ߘمS
��tU�
=V�MWv���|�,B����13�C� ]���2��e���rn�ŘFŃ�5�uV�7�	ӑ��
���f�d��@�	�$�A�/8��oxd�.C�> �ߧ+�juo|�K^�m��x��k�0�E�]x������*E�����lV.f9��U�
+�5���9�Y9Ga7�‹�*'�r(�s���
�>@!���O���J%q�k�NZԾc7,�$���0z�8i
�;p3*�
U$
i�!��V�2�1BU۩h����5�O�w܌� \(�_N�Dk=��"B�M!A)��5ړk�CB�Ƽ�Љf���?�'2������Կ��A�����݉�%��q�t%��T.���nY�u������AcHR�ڧ�΀��4}�l�̏�Z	�/a^hԀ70v
:���,m2
��0�w�"�
1I2
2=/C���F��������n�\�
���0�Od�-
!� =  ��� t����uI� �Hý
p����;+�j&uoә
1�q.GO��YR�����?�l�k3�b��e�~Ӽ�Y�������l�fG�B�J�c�Ǐ���BC�O*�)ѱyl��BF6k�[czCS��Q����9����d�����E�ؘ�����&
��*0!�U�|
Ҁ+�6�9��$Z�o��L���$� QR
+?��ai맩��H�q���0��D_ ��
+PX|�	���J�BΌKŞ@n�;��>H���'��ju��2����� ��D&�� ������G�Li�$��&�/����
+Úp��!z`�}0{�
+-��Tp`�=�I .�b�p�D_� 
+L�dN�	x޶�=����6Cb�.�7H�v
&�.o�v��m���� ���
s��L(��R�g
a�;c������*4�S�ik,�$��~+`
�2�I��4���|�4|���w�;'P��;=��;O�;�cV�i�D��|w�sZ,��,���Y�S( �	���
+�;`9�y�|X`U0�
���I�`�ν@F��ee�UH
[{2�Ͻ�s_���3�
u>����b�H������P�(A$�a[&�0�(Q�y�1Q�N�����X��=�w�
U�la?�%
]�7��6Xy#��	�l������u?�ZZ�r�>M��"�F�2�p��q����d޸�G�U��ym9��׽0��= �Of�ƕ�c
6s8���b�,��������
8NcWW�>�~�^@
)GT�1I�c.g
���P 3B� �lZ �8���k�L۝y�hF;���G�Q�N
l�ˤ,р�E�
���e8+�?�Ru8��q@�������m�s�L>r E�Ձ�\ )�YKM���q�b���ç����+r��� ^�X�����雋���� �[��������I��b
�!�..�>j�g�Z�;�a+��Y	���D��C/7��/������ߠG�#3�T�!K���
�ȞN{P�%�fZ@�JثJ ��3`��ׁ!���1T�S�#��5�:����Y��J=PW!?]M����S��$�&���o��ӏov�hy��
+C�����_]��I[��7��V�����
�`T��
Ҟǰa���R03q��6v�=@�N�J��ҝ�����V{Vp��f�Y���w�v�Ȃ�6;��}m��I�8nʲ��bX��z�t�ڳ� �Zb⭃�y��ߝ
,q�S>��pyu}x�D�/��3��0���@M#�����������g�,�N%A�$��Q� ��f'�@�6�������ڙ�	H��Ȇ��gޡ���aZ�8�����\����+��/G�VG�*a�÷
+��
��Cy�Ys�dk|
�-;�Lo�C�2��Vʨ����.�E�j_z���m���pg�����0�О��)����t�o/��_WU��C�V�ܿ�s�!a����
����� 8�vr~��|	Y5
�
K�1[l~�/s���j�ٔ�5+��e86�f�2�ҕm
n��
+���������#iuל ]�,��v.�Y��F
,�F�7o6woƜ:
�nK�n���t5x���E��0��9�����-�
j�h
����M����$���{a�B��L2�;��-��(�q�� �$n
��fK�?o�2���lZz�C�zU��պ
+o�ݸ��j�"~���} 	��sM�Vҷ�������O�u7xx�΅����
�m�<�'�.�Qd���`Hơ�=��j�m:ϋ���چ^��`���
+r����y;���!ݏ?��(p֭�c�=P�ˡ~E�n�.m���v�|9t!r�c1���
+����Y
۳�}�Ԗz�n?��Uz��b���CV�˰s�u�C7�ϗ��H�?+s�H
+endstream
+endobj
+1463 0 obj <<
+/Type /Page
+/Contents 1464 0 R
+/Resources 1462 0 R
+/MediaBox [0 0 612 792]
+/Parent 1461 0 R
+>> endobj
+1465 0 obj <<
+/D [1463 0 R /XYZ 86.4 726.045 null]
+>> endobj
+274 0 obj <<
+/D [1463 0 R /XYZ 86.4 650.819 null]
+>> endobj
+278 0 obj <<
+/D [1463 0 R /XYZ 86.4 244.583 null]
+>> endobj
+1462 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F49 566 0 R /F38 453 0 R /F14 627 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1470 0 obj <<
+/Length 3102      
+/Filter /FlateDecode
+>>
+stream
+x��Z[s��~ׯ�#U���/�M:��L2�:��'�	IPIBA���9g��F� m��N�B,���s��
|r;ᓟ�~�<�ϼ�vry3I,�'=�JL.��i���L%jzy��@O_���fV\�t�]f���ό��o.޿���zA�������Lr���󏗿���<��L |"�M
K���WgW�dw~�p�|2y
ϭ&Zy&a���?���
"�=���	g�
o�a�r��Vp ỷ�{pe��
/,��&>�]Y	fyR?�ǗI8�K\:	K�@N�l�}:7�p.ݴ���Bg�ņ�)njz�8����ږ�H˸Z����b�,�a�G�S,�~zQTY�RZ�7h��fViU��H��u
�1�	���,
+�(���O�d���Ŝ�5
^/7�`�}Fi渪�ZgقV_H���k��M3���}
geA1j�����&L[�YJ椦u�s�>�.���]j�c�������,��9���~J����Jf��X/�Q]UL���ՠ��
�5̙���Qd<{�kԮ��7n�~�(�OX"%0L1k
��n�I�ϸ�I$/����p�MLK�_kMY��(I�C���1��z��nwMJ�CʼXnW�#���DId�r���uH�C�2K�����sˋ5�C9
h��W�eԛ��f�Iݑ�4+���;����0�:JsD]�gN�pi����w8B�Q�kPE��Ӫ��i-"B��U��n"&,	P�����\'`~���,]VOx�
�!� ���k�W�ܐ�3�wTuy�
�3�r
�!}����h����%p
��,� ��7�������Ǵ�3/E+z.���'�8�=�(��i?���
�h47_�����~_t	����
������
q�:�]������=DC�'iz�gB�s�gB�$����2��1�3�9�q��Uʴ`���E
8����i���W�Mo��
P*��{�lzOPp�7�Xt�B�f̯�q0
A
Lf��l�T%l`�^����h���xu��w/��8�@��E�Q��ی��b�waH���|%\�Co�z�N�8�e�I����� ���汾��v�
9������Ke��}�u\����Ǣu��u{3ľ�Š��u٣M�e�;�\Lz�>�w�1��7�;����:2�i<E
��
�;d[_1x֊.��z' �ONIыk#����r
8���H�9��G�xw�'uH��B!y��eF�	�y&�Y��7�=� {����	'���޵Y�0��vP�VT�(����1�f�;I���`�EL�MH�	�`���
K���
&���1+�p�vac�Ϧ��^��S�4$�Y|�-�e��b�Y����_?�M��3X��:�0��G^���"Oo�ts~ɸ}��hR
l׋�\>��F
T�Sf(�7i�
|"_���J s}
�0��f�#�!=�s�>�C0�ȝ��B$F�:�B�������@�P�F$}�\7qK ~�E� QbSK0X�b�d���X!��*��
+�=x�?�R�
��(Jz�����B#O(T@����B�HY࿰BT�P� sk5�=W��QW��W0^21�P4�f�:�
SfΌ3;
�><��r�.ofhz����{y8q a�(uXm�(��%�~�������t��K0G����HrÔ1;"Z��cN�ݢV�
+L������$	-��$�������
�O( L�8p�pu����7��UX�k�%k;*����(�[��F�uA9�G/��AP��'4��������� � ߤ�̝ƶq'�g	<��� � �n4
G����È�!�D����&ټXŌz���
��b[���<�y��
+�H
L�
+!ڑ
٢���M:��+�Oc�^�:"��V�����%�_1���J��e��o��4�@�ѽ/i�LQ�z
x7��!=�+w!A�tN
�I״HG�|?�
ډ�:j���:��N�
���c2���G�q�L�]�n���P�
������.
��2O�T���n)�iY��2��s
Ш[���A���w��&��D$���z�g���r&,���a�)��M�������0��eW[c:`��;e����d �K�VuW�/��aB|�����NC8�m��M��<+��a!SgQM��@�A�n���š�~�+tP7��[�ѕ�FW�r��n�+v*���v�1���:��rCVm�&�
c���@��N�;��p�S�
3����H��-��iKk��	D���^t9Kh
u=g
R�6����:�����
�ͪx�7q�~F%
���*[�S,6��������x:�lL�8x輺
�h
7R
���<����}��S��g��K N���Z��:m��׋�e���C��������^�	/��A�
�w6�>�Z�`��=���f����'+Me������,o�oODݠ�MR�%���
a�njw�n@�6�8�He
�j`�	{p��+{�[‡��,qz4
+j +� �����3a)���
�^
��F�>X��jycN�s�0����\��;ژ�g؈f�Q'떚��ث��ur���{#b˭�r���h�V��5}9�d�n:1�]*?�{�
���A/���w�`
��qLµ���<h�}���)���d��s5`��2HHC=�Cr�
3PIzH�����=; �GMaȚ$K�E�� ���l�G�R�N 
4� ��Aw����ڂiA����n���qD�s
|�,�(&[Dև@<�<�g}ϧм]X�9wb��uX�$�.4��۰�T4��qT+��W�,�F�3�m���AÕ
�E�VD��jb�?���w�e�Nj���I�
�� 3�z�x!�ge���IB_M�'��evWi�W��-1�xAA��sU�4l�7a�
5�5bG�e��6��ٸ��c�(`Y
+�Ce)��ٮ��/ඟ��א4?�'z�Šߴq��Ʈ��������R�g�>�^��� 88��6�:�>A1d�s.�ˌ6N�!(3mV��
�ͺ��; n�R����
�|9�8PPVg�i����a�\=_e�&?�|�D9�����B����/�NZe�k�}}�ש�v��
+��G��;
+endstream
+endobj
+1469 0 obj <<
+/Type /Page
+/Contents 1470 0 R
+/Resources 1468 0 R
+/MediaBox [0 0 612 792]
+/Parent 1461 0 R
+/Annots [ 1466 0 R ]
+>> endobj
+1466 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.087 452.478 464.81 464.433]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.1) >>
+>> endobj
+1471 0 obj <<
+/D [1469 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1468 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F14 627 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1474 0 obj <<
+/Length 832       
+/Filter /FlateDecode
+>>
+stream
+xڍUKs�0��W�(�Ԫޖ�D)-0Й�pj9�����������NH
夕v�i��'-EkD�et��N/�F�4�h�BF�R�-Z,�-f��	����h�.��D����5$�T6E��ś��
��0�����m��:��o*�������7�n�o��ѻE�#b�El�D#5z���o-��Q"2��.�FRd��U���:��f�8�1)�P�-؏�m��}�9�]a��C��y
�ד+���
���
Rɩ&LKO�E��t��4ņ�Wq���e����/�+?�!��._�ɪ���>o����u>t����
����^���QD�
+���W��|�q�a�a�E �T��E7)8�F��o��
Ɍ�e���@����$�r
�
+r/�1��)�R>�(���gĸ�X����H�
�%pL��wO4�{p4�����ԋ,�u���rx�����^rl�s���y�����1�V����\�
T�Ϥ�RJMǓ��
%��t��
�dD�
J5�B!��'6E����yʟ.��9�� t%S�N�p����m�gSUSDi�gU
�jS7�oQ�,��*F�?u��
%�{� �X�7�M�>��7p�������C;+���$�ۓ0��Q�l�a�T/{�cH��*:����鑔��7�)~�}J�]*�%N� ]TE
�0K����gm[��O��P�eѴC1'2i��ve�W,O�ln��Miʜ��k�g�f��N�@��]j3x��am�GG�56��v�s٬����8 at q=��cק�; Z^s?
v�~�
��_j[�D����l�����n��{�`���,'���+�7t@t���V}�g�Z�o
+��
+endstream
+endobj
+1473 0 obj <<
+/Type /Page
+/Contents 1474 0 R
+/Resources 1472 0 R
+/MediaBox [0 0 612 792]
+/Parent 1461 0 R
+>> endobj
+1467 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bandmat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1476 0 R
+/BBox [0 0 473 537]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1477 0 R
+>>/Font << /R8 1478 0 R>>
+>>
+/Length 1479 0 R
+/Filter /FlateDecode
+>>
+stream
+x��Z�n
���W�.�^������@��D�
I
����F�0����U��]5�f�!%��w��3��3�O�9�������}�2��l��m��_���l��S����O&�>�t���R Jw� �P�
+Q �\�C�Eq :致P��o���8c�8ca� 	�� 8�B8�ę�ƙ
�I�DA���8�8��*�I�$�4'�b��i��3N�Nt��N�Zg��W����TVEze�G<*�rk4��0�(M�䀡G
+C�'�j���.���l�xD8ɮ@�/ae����2�#��xe�\�����X�L�Ger\��W��.L�g<Ϝb21��R��qs��S˩�5�C3���l���`�ZO��)�|�bc���
����]u�5��H��\z]�!����S'޻��o�y@P�[E���M��.��A�ԮV�ApFu��;���`8	�H�x%ϴA��E^Dm�����5�ED����I��H�j�Q�0�E̼�H;;��."�+V��l ((�
,�;�Ti���r��u�n+f�E׶�p����ĩ'��J�F2⡺(��<$���(�"ϼ !&2�v�i-L5�1ҪJ	p�
��w[���Ƒ8�CM�bAN�pb][h����(�"	ϼ�Y+ײ�z-�2�2�b-����H%�εl�^��ϵL�X��� �Z�TWlFϳA��Yt�Iс�at����p"ș��,:p��\���.���C*��^wR�L 
+{.��B1���f��ic&���]�f���
�:
3T�4����l����O�:��y�ux�~�B�B@�Ck0��%S|&���<1E%R�Q����Lʬ��f�����.7���ø��
�7�ۅ���
�|H$?�\ nD�4�
\@KN��F��鈏s�ɜ�
�
�-A �Yg��>҈,gj�2O�Q�b�e��,���
am���
?U��d��Q�W���M�d�;��A�Z�������5$��!��

�vY;��
+Ӡ�n�
{G�(��!V����hT��ULGtl����U��5�fOi��e+� $� ]t3n0MN��t�+ɶT��Ȧ��p��7i�]>j��
���]_���B|�!(|�� ]L
� /�
r�ZM��)��.4�jH����ɦBqv�q4u ����
�T�E0B��LQ��h�����R�ME��� t15Ы-��Yn�p�
����{ƴ�'���iu�V!;�<
�-*V2Wm5++T�����Š��Kk�+k^�u�;�:�9whs��VfW�֯0[�Œw�K�Ya��n��J_Q�M��lm�� �X�'��F�����k�;H��s��
ĉ~�b
����s冰���U��׸]�y�K(
+���������c��N����p~��

��"X�_�dY�`�`��f9U5.a����K3�%�������̫�,���fNKbf�K��
��(Ғ�5QK��4
��������fI������۷/�t��}��m	›�j����v��������a���o��������{�~{�S�y�~{}����p}�j�W��}}w�����
�\�Y7փ�[�;�~}c�sW�&���4d[ߞ�[ߘ
5_��P�qq�c�ط�� �
�`��/.b~�A�5 %����n�ߜǑRߏ��������%�m��zh|a��Oh��8�����߽��o����9�c޺�}4��{�uS��0�m|���m�f����ڱ���B�����B{�p�����+tG)3�+��e�5f�O\�I�Ѱ��C�L����xP�,��$��Ǝ‰�WY�8Ӏ�SH��P,'��]8�V�$Npt(I��wr���d'��jړa�A8�p8�+���4��1� 	��ᝠ�j��|�0�t�k��5N�'H'9 �te�4E�4�q�$p���/'����a��n�����pZ˫$��
 �SHqsY�W����@8�ѡ�Ud�Z�O���4iog-�32� I��i甮L���X��L;Hgf�9e����a҇�� _���5�D��Q��"��;ؙBJ��2M.
��

%��B��@�k�硧sNg	n�,>+��{���I��)�7q��qF˵�U8�AP��I��t>m�b:ˤ�M{�L;Hgf�G
+)��z��ګ��ګ��uu>m�c:�_���p�X�K4Hgw��d�6eN���	f�k�4qvo�6E�x:�8L1��M�A���{�
�*�������ƙ,�JV�L���$pF���I��Y�z���A�$�2hW7ѹ��;�
3�Y��|�L�������'
�^��t
���P�k6e��?�V�����/�
+oU/�y�/~b`U
+endstream
+endobj
+1476 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160529-07'00')
+/ModDate (D:20151010160529-07'00')
+/Title (bandmat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1477 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1478 0 obj
+<<
+/BaseFont /QDOSHK#2BTimes-Roman
+/FontDescriptor 1480 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 0 333 333 0 564 250 564 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 667 0 0 0 0 0 0 0 0 0 0 889 722 0 0 0 0 0 0 0 0 0 0 0 0 333 0 333 0 0 0 444 0 0 500 444 0 0 0 278 278 0 278 778 500 0 500 0 0 389 278 500 0 0 0 500 444]
+/Encoding 1481 0 R
+/Subtype /Type1
+>>
+endobj
+1479 0 obj
+2333
+endobj
+1480 0 obj
+<<
+/Type /FontDescriptor
+/FontName /QDOSHK#2BTimes-Roman
+/FontBBox [ -70 -218 863 683]
+/Flags 4
+/Ascent 683
+/CapHeight 683
+/Descent -218
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/B/M/N/a/bracketleft/bracketright/comma/d/e/i/j/l/m/minus/n/one/p/parenleft/parenright/plus/s/space/t/u/y/z/zero)
+/FontFile3 1482 0 R
+>>
+endobj
+1481 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus]
+>>
+endobj
+1482 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2797
+>>
+stream
+x�m�yTSW
�_
�}P�-i�%Im뾠���.�S+RE@-�DHH� �IX�r!����"�"HQi�(��im�Z�E��N��i=��2ϙg���9��޻��~������{����`FKd���QrYr��}
��A-]@-c�ř�_�;Xˈ�&�BȄ�~-K��	F��EmO��g&���w���lI�X)\ut�ڵ�~��i۶m���F�{D9��L�
+�!O$�+d�L�k�pz�T*9)L���
arj�(շ,6Y*��H%
+�<O�*|�psh���mk�D���#|�0R�M!���J���� ���2w+r���ꃚ�H�$]*�Z�:a���b9�6�q��&b�Xb7Ol ���Fb�q�8HD
Ÿ�$��D ��x�x�&��	?BD�eh�8 ��/����^e��W�K�߃c���G�'+I������9����ޤʂ���ōP�{��f�;�&��6�R/�g����xE�6���B�� !��UWY_��#r�G��)�YPσٚ��
+R�j��9��.D�.VU����gўYf��[]��B�ˡ�`
�QF}\)�Cb7����� ���ąֺ>H^l��`��1ߤT7��*��I�?&^�uB�9�g��������� �Fج�

����2?z�Nz�w
��V�Ys��"���`+#9�*�
�o�
��z.�	8�>'�u*��j�t�8�[H����=4��m�»���w܇p�<���_��<��䥞Tf�S��C2^���?:����cs�L'l~=6q����e��&5��z����wfQ�\�젖q
;t@��n:.�x�h<TBrVh�p�i;-�Z�!�6���v�yH���z	=���5G�c_�kL����5;�=W�o_܁Ǐ�~<j��D�L�
j���|���ig
�
��-EKYFvyyaqEE)�@��XErkrsmYK�GŅ�=� A0�>�ߘ���
y�D�jU��:
+�
WI-u��N�����/o��o,��,mZ��GS�^��{{P����
���;w�k�j�ds?�1MR���.d�gC8P
��|��lgEe	������$�NJЖ����b�bXf)�,'9����g��'������>��6/[cʅ�S���,�<��M�7MEy�W����f�>�K#�s�kf�0֎
�Ox3��i���:<F� �f�ިȕ� ���^�iD_�z0QV��'H\�O�}>t����?:�
+�[�%�`��z^u�t5j�Z�
|�k��!�
T�
W�/0� �,��� N��u�I͇ �~W|�ғ����i�UTU�厊h';{[�]�̌�G�ᠦ(I�����t�1�8=6�29�縎V5�,�-u����5Jͅy9zya
$���Q�
�k#�h��K��Yj�à�4m�D��m(ԖV��
��n
PuI}�
��`��>j%�8EN�6k4��+U�e]�Ҡ�u��L�����Xh5U�������������7'����
�:Wo����������@�1����
+�)w��a��f���5��U�zx��誽�rݮ&�q�Y�V���,
�bev���� _ԫ�J�u��
��
�BR+�Ϳ˪�����0�W���f:V�5hxz��0���F��j��
�p ������N����W�t�B�K�I�@t1:�P�,=4q��IVPW��2H�љD}����t@�ӂK5���Ô"��@ԫ�=I�0
/���ق\���/8 �����lS&$â����]<
+����S����/�(#�j�s��U﬷
�hB*0\V_�.��
i� ���\J��;T�QX_t�89p���R�qQ�42_�~�2{dP�P7aGR���3�����ʧI4�.��ԝ�+<�r
���"���
��F��V�~�"���=��[{�hN�v�k
I�<�O�<h��{�^���7N%q��h���VguY
����&
+��p�q�O
Ln����	?#
*�qJ�\ު��nk��R�e
+h�8������O��
�P'���CJ�ᐚޙ*���8!�͡I�?
��lc~�I_��:h�kZ�mz��Na�&7��}���]�\��%λ�}B7���f/�[ͮ��Y��u��~�`��a��7�A���	? �A���Fdڧ�嫙Ʊl�17�"|���LWe�O3O;�	\�;RA��v�X���%� ������6�8 ɱV�^�x�h���R�A�E�o��
+��5�C�j�"L��h
.*:\LO��A�Uf54��<�P@��7�e
�᫯J:c`"���"�;��Ʃh���Pe���aL�1ф7��+A�u�Ğ-��C�Z��K#	�s'3����|@q'��.������F׍��Ϧ�
4�3
�
Rpg�-�����9�0�˽=�szh��7?C��s�
��(e"��ho�v���Nq���7kw���C�"R
!K
?L'�
��::��e�I
���N�6�[�����}N{|
��ma�>	
�a �
Y�Y.��Gr��A
+$��r��Ϧ�ģ�5��
�$}�����0
����g��(%|NKF�j��n�T�9IV;��%5�%E�S1����^�����Fi�k8-{�5h�[�To���\�?�
>�h�	�~b";�5&kN�a�,���{d(�r��
G�>F$D
I�
���!��,������(Q�uk�?Q*_@�9��e��ߢ	K��
�7CYzPWUk�Y��6'$[
�
���)���B}Y�/��`�E�$��{�X���{
<�S��)p!A�����
+endstream
+endobj
+1475 0 obj <<
+/D [1473 0 R /XYZ 86.4 726.045 null]
+>> endobj
+569 0 obj <<
+/D [1473 0 R /XYZ 139.066 218.119 null]
+>> endobj
+1472 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F11 628 0 R /F14 627 0 R >>
+/XObject << /Im6 1467 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1485 0 obj <<
+/Length 3716      
+/Filter /FlateDecode
+>>
+stream
+x��[ے�}�W�xa�#'�R"9U.[���'���vּlfH����07C�j)U*O���@��8�} ��������߽��[eg9˭��w�3g��e2gV�ٻ���c��Z95wW҃�����P���WΗ�Uټ��6B�_�y����,C���z���Zr�B��_�}��ͻ�y! ���SÜ�����Ͽ��_��q�r7���gZ�L�i5��ſ_�� �L�#�Q�\0��nL^]
!���bQ6Ͷ�t����E�m��m[��c�C+U���0V��ߺ����Z8f�
�yUiλ���:p�r���χPV��5�^�Ͼ)��ۆ��.�*7����c���`L�&�Pm����r%�0	���?b#�r
[��P���]|��]�y^����z
+�xXU�
+���̗Ů�'=ov�~���e�P��e]n����M�
�CH�����6A�_*��`�]�n�
�r["-f}~��a�Y���clHw���V�m]�/�hXv0_���v�H���^��ٯvj�]�7e�,��[Մ��]�
%cUӷ�.�V�?.�+��5M�&(�)c�M��6*�:��!h�
+�#K�}o��e0O}h��i�?�`äB5���t�r��[Ӏs��m((����Mx�
���j�G�O�WExH�'��Jo� rJI�fVY�ry
+'��'<>�zSʰ\��,����_�kE�̸V,�ñ�B�,�4��Xp��."y.Y�=Y� C���
+;�	�g���_-�|t�� �[&�ߑ�`ڼe*�&Շ�rS�N���P���m��f�6��IƳ!BJk���,�t@���h���=,	�70�sC�?�O��	;҈`���N��)���8�}�u�#B�(�6t�P{���Q��;�q���x�b
_��/2�t�Y�����
K\���
�^���:F�_{�� 9����
+����$�Og�%,�qgg�Au�9�-4��Ծ%
Ï7߿�!�
D(�Wl�EU�����LhKF�s#2"�`5��9��2f��MIi����
�U��=
[�$
?ű@�`�
s	��ɱ �X����$xp!��亭�<���"���l�n�g���"R(�W��|~@Tj�FG��[@��	��� 4��PO,!�Q�n��-� �ip�鷘\n�W�xB�߿J�|����$���(5���G&j�1�h�!۶1F魫��D3#$|�^�_3Ľ\�^�J����xJ6Ŝ�z٤Nu-�X�b�fL7����S&����R�?R��I0�}C씋��4
&89-�gpr>Xʋ�Q4ea��1����O�r�c��[�u���Yc�&Y��4,"��#��"�,��BH�AMc�� �CP
���'���
,��M-I#N�춇�$�v"v�3N<Gcbg�������OĚҜ�OŔ�g�S at g�$|*8,{��+��:�!P�^�
3}�2
T6ק�*g�H��
+�c���ڪ�6#�#���{!3E�tȹ�H-�y8�
~�eg��Y4���b��gs�ϭo
+^j�%�
�S'cդ��c�/V��e �?%l�2�=�q���ݕ�{B��3�� �

+�������R���$����Y(J�|v��`D�1�OB�4I� м�u�l���d�����
���
+�
h���gi���B�'t跮��6��P7����uxⱥmb� G@�`���z�'���N7��l��B�A���d�9A*��3OR!р 
��RO4�X��X��ٹ���Mw~a1i] 
1��I�� tK�pX�6�!=��if}C�����~MBg.�(ț]�o���B
�#�G���������
(#|RF(�(#��4e���ź!R�Xt��4cD-oCocƈ�j�A����3F:�b�,\�P��Q�D�B�����D�B4���iu�3�-��D������(�F/�,�H�?雲&�d�H��v���� �F}F�H0��t	�s��

+>R�Y��B�c]@�~f��t����Ⱦ(���Ge��L\b�PS:�'	#5��-�<F2���Q��KF$��S��$�Dƣ<�:�Uư�̩���0����j�܎\�.��
�A���D�0T�W��we
�%�
��;eΥG0^{n�NM���
�Wz�m��8L �}:��I��~��0��[�p
���E��Eє��!}�	�"
wO�� M�����v_#�]�ὁ��m2��Hz���e�
O
9c��"�W�[��,p�ޘ�|
+���X�'P�S���c��J'��+���I%����>��<��d�_�!�)q��|n4u����B_��T#:�M��)�A-/!��cI�D��&�e�I�b��]d���V��&�:�w�t�[��˪x����#58��`
��
L
7O�2�h�ev[Az³g9";}҇`�c���iϮ�8i�'�<{Ɣ��xv1ڗѓ�2Z�Ǵ�K�e��K��gE�����N�V.�`q̜
+&Z�hy(8ɒ
+:�����?��
��!c9�����X���z
K�d�'��4�?F�h��rI5 IG:��t��<}� ���n_�C[�ӓHp] (�ۣSA�
�`�Z� _�T�L���gu
t&�gt�0&���c��m�(
��H�S=GJ_�#����#��wUw^�U��S*����B!g!�3#��]fݟ�k�٣����G��J���?[�#�PZ~�ܗ��||��SZK�.ѩ����>'�*X�����UR�<��_EMIaOi�9f��H��
_>�eU�A��Vd~�Υ��^�:�43���."H��n�H�ifN�g��	fN)r��>�.�:?�1̜Ctf."��cr�v�9g��:�ȸsm�`���}���
M�&�6a5�Ǥ�������B���
��8�\�
�I�Dx���ώA����ë�"��a瘞o�{+�� �8.N�Xr���I��Mۮ6AE���~�YDn���!��e昱r
�q�t�+�q��s*AD���~?���4�UL
a�k��S�>j�M�B��v�>�7���ޣ�؆�P��6{���3N����Ʀ�!T
�
��?�qҗX at A��i$�O3�����$�U�!�=X
����}�k�
���&,b#��yS��۷W9�' M���!ht�-��ko���}���v�u��������ι�v}^w��\�BM�������!�z,�O�m]�M�y7�p�
�b]�{1yL���z��]�I�D�
E�iBJl�Lρ�
$P���
R(����c�+�]�C�PA[��k^(X��3ixY�'�vH�#�O„�a��B��#(�Eޏ-ڞ�������S����R�jꈁ���eZ�&A�q�)�SMM	]F��Q�F���K��i�@��1��7�U�g��y_��k/X�;J���TCO	���^}#��@z��N��ۑuI
T�1ʸ%S��M�~X�ԭ�
���-)č��]|Dh�WJ���n�Σ��^F�շ�[�uИ��
R�jUܬb����8q����g{
x�gU~��-�kk$P
!Զ�ç����"
$�=8I�,a^�&
lo�򀽾+�e{��@���{��9л˖�=�X5�lOJb�q��c���I�mcY��b���|���Owf� �f�?7:=e
B�

AY��x4�<eO�8Va���ؓ�����$Ir]��խ���o:\�
�
+��E���G�AͲ��m��9��
��Z�$>n٧\}(�]���V=�j���%�.�[�T)/�O(�9��z�"R�oa��i��
+endstream
+endobj
+1484 0 obj <<
+/Type /Page
+/Contents 1485 0 R
+/Resources 1483 0 R
+/MediaBox [0 0 612 792]
+/Parent 1461 0 R
+>> endobj
+1486 0 obj <<
+/D [1484 0 R /XYZ 86.4 726.045 null]
+>> endobj
+282 0 obj <<
+/D [1484 0 R /XYZ 86.4 701.138 null]
+>> endobj
+286 0 obj <<
+/D [1484 0 R /XYZ 86.4 184.221 null]
+>> endobj
+1483 0 obj <<
+/Font << /F36 408 0 R /F38 453 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R /F14 627 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1489 0 obj <<
+/Length 2737      
+/Filter /FlateDecode
+>>
+stream
+x��ZIw�6��W�ʳ`� 2����S��Ė|���-1�&�$�r�ק�pG/�&yys"	�`���
+U���
�^������+&giI��f9�%�3E5���n��!���p�Y�:��2Y�_��E�����*�Ӥt�����9�Q꟟�
�Ѩ���tԕ{)��
޾�|vu}���dz�7g_�H�g��D����|}���-���FLdz{;n=�L#
+w���ٻ3�W��+$��B�	b�Ϥ&�(��
&ʊм���{/�;调.��~��慧���8iY3���
�y����TE5���(q�
��!��^����#����I]f�ܜua�<��$_$�µ�z���h]e\*��lvA1��<@o�{`@��,��TfI����AD��V 0��yRg�a��Q�t��>�Q�Ø]�=�!
+i���WE~
_��BG A���8��۴��'�E�n���F߳ɾ��E���.$H�-B/ҼJ_��y�j*
LC��_���
@/4�FL�ɬ��YE
����A�c6
{����^؅B��a�7��vN���\�܃�wB	��uH���L��6[�͍�~����6�l{W���W�&��A������ p���z\�{��[����à8
?��i�:�9�[����Es��"�k��V�Ĩw�4h��
�L�6&g>U�k���Y�.�Uض*[�Q{
P"B���T8���ḼH��,v��£e��Ω��uQ�Kw�2�H�:[d�@�'���^�:�o���e T!�ƛުH^B'p�re:����
��`�?[,.�>�>�Oٳ|^�k�>���h6n{��l������ύ����� º)��׽6S�W�I����B\?8kϋ��D��F�bӓB�1��G
��,��k!�k��'��
�ETv�>�}6��n*��
Y�)���bO<0Y����[�2��E���x�	�h��uf�r�`�.{lx$��
z�z�O\l��f	��E�gv�6F{�-��
�Y��s
q�lF|�NF���m�������w��i�2
&�=
	»�>A� �
M��:����UZ��۫*4���[�S��LdUV��j�A���E����^��=��k����c�<�I����^��ɔ|��8�A�����2�
�-�
��<�U^>�5L�Y����pI��sA�0EtrQq�N����i���b�XG���7 �i�΋�f[{^{���(]r�����	D��V����V��k`�p���X���E�]`2��n
�
��*�S_�qF>Ml�'�
;�v��r�X��&����ck����N
�6E��ZD�1�X�v�m��;c|2H�xر0p��]����";���p
Ŭ����< W�;��6 
��O�w��%R��D{2�4�,
S& ��
z&oq{x�m>7�%��:Y��W
��p-97]�A:L��\HF��W��&���n�s��W�v>�/�-Ōj��u�u[�"Jn��[	�+���=�H���j<� ]J'�&�\?�M �)m����6F���ʍ�`K�Y5ަ��bBy��a��'9m?C�H�B�
�����4�F*�cd*i<��]c���2�
K\��
_MOK�i2Q�k��i ��v���0
�Π7P��}��%��{Ȗ�q;�V��
+����.}���ҌM�˝{.�/۴���<�!9v����[D,P��
�/�y�4L�M�=<ד��A9�Qb`f�dg3o?\]M��kڎA��G��m�HK�3X�u��J
�f�����w�p����*����u������i��
����X���� �����;)��i_�e
�*Ũ<�t�rn�>x ��(�VCAJ{<���)F�[C�;aH�t?�˩��`@��
��>B at C:�N>���c�)�_5���2-��:z�&g�pc�
+k
wAQ
+])��
H	�o��5�>�'�.z�5 ��8��t���?0|Kc�:��^ܵF���9,��~�#
��b�W�<Xr
�Hm�\ǭ����c�?,/;E^:�i"����T���(ĺq^���9���߀��Hu~6�
Ɖ�Lw
��Zňƥ���̄CY��$�c͆�kC���$da�h�t_؂ �m�Xm׹���H�M�#$�MΤ��0��(09�]��|�!}3�[H��R��>����5Gw�k������Ct
1��&��H�$>�Ĉ���n�Ŷ
+�Ʒ��e6���| �
+#w��@��|���Q5�G�O��
���s����k
�q����&� `�25sV��_�b�;V��c$D8�^
�u�SC�ET|Rp6̄���!X��s�|�?�X��~��}�A�#�$݀��
A�kw8l
��Ԑw+qдHW������$�
��E|����s�_c.�Ъ�o踉���2�$�qn����ԡx��
�6\��vӿt̓
ĔO.��#{�E��sp-c���u��ęv)�y�ە�
�ژ�6��w��aC�F�!>��x~�9�t`�@ ���;�K>`�a�ǰ��΃)p,�
�S�g9���.����P�
�vܖ�<�\ܖ�T�^-���6�1�};�sH�T��j�?(��f�pij�����
؆O�wg��7[��T���:~�߬�ov:�	�$B���{�/O������8p��q.���J
|�i�q��u�����_�#�l�.W�[��l���M�	j�qmӰ�t��^W�����5�ߙJ���|M	t����4��\_ޜ�F��
+endstream
+endobj
+1488 0 obj <<
+/Type /Page
+/Contents 1489 0 R
+/Resources 1487 0 R
+/MediaBox [0 0 612 792]
+/Parent 1461 0 R
+>> endobj
+1490 0 obj <<
+/D [1488 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1487 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1493 0 obj <<
+/Length 3232      
+/Filter /FlateDecode
+>>
+stream
+x��Z�s۶���Б��Q�$�t�!m�>w2m���Z�c�%R%�:�_�] $A
+��f�ͻH$.�ŷ��.HW�Vt���ww߼�*%i�����*��\i��X���f�1J�����
s����nmˮ�
mۼyuy��~x����4+7��w����S����?�~�xsw���I��U$��j����]m��O+JD���M��J��p�ڮn/�_P��/�Io1�2"�\�)#L�v=�S�����y+�%sL�M޴u�򺮳|	گYLT,���N�ÏY�7o}�	%��d>�yހ>$�ZT)��+pɓ�ž;�P,`�����pMb����v
���Y�o�(�s��$"�E���l���G�9ѱ��^���0�	����4Q“u�cUu@&�:��'�C�mϚᷓ=
�ZrFd���9"�_�l���
*�C�Dvu��*��H5�q��u�/B�c}H\�] iD�^_��ID?l3^���.k��sh�S������Ċg�VKK��Y)��+����&\��B�������l����<E
���y
2�I���j�%D���B����k���n [...]
+�q=�*&��	�^�Ed�f׬���Y�د���������݇���3O-��K]����V=*
�u[��Q�s�.Ģ�>���r��xbz�.:�8�`���HB����'+����4EVڻ|[�2k��5<��+\ӳQ<�Api��Q�/�{�ZN�ƫ�
��#��_м~���h�HV��m�
B��0����VF�fҊ֍��7�0l9���>����]{[gkly�d���aŶݩ��:b��5�NGq����c���q�3�Hx�D�ㄥl���[OܬPE�s�弾��ZG�a�Λ�ᰵ��+���*�8\`�6�ܖ���fր�X���0��K=���2��io���
+	�CY���z�0�
Ec1��wHư/ʇ��ݼy2t�I2���,�:�O=����Ǔ撰!�[W�d��D�r�p�������{���5>���k>��v�Рa�_��Z+���*���o߻87bV3�����A�����锛
���R���*t�@��)S="\cA��$H ����u��իoC&��%�p1
+�������z-{�5 ��jB���I��׊�����,<��CY�y�m#�
+���
+l
+{r��+�ə�7�h��O��"N�g�:N�p�+(BX`Pp�����D���`��2$����TDϏy��	I� ��5��q���j|����Tm���z��~�*D�8�����s�
�N��G��#Y$P��dl�݋|�-�b��/;3���
�KUl�-��. �

��XӲM�"�T�]g��1��VH)\w[_`�괱	������B8�8��t{-��$��\cP?l���,�e53ڃ���A�C2���O�O�>�a�3Ჴ��-@�S�ﳺ�O���+4�t�3
�F�y���1����#u�%`)�OҟQ
�lB����1i�c�,��V�v�b�� f:bxͪ	��
(�K
Njj���
+��v�Q۶�o��n��Nt>��&����!���q@�I�W`l]���o
���T,�
r`M��ls�*Q�Z���)��ȅ	�w�R�N^f�:D��6
�)9����DB�����_���wB| ���\�=Ը�
F��Iƃ�
�=j����@�\`�i���_^���-,@�������וm�(��{�Kf/�hz
�B�َ6�"�&c�ޖ	�כb���LB����Ns�ޜM9�i��1��m쩇�OAlY��
�t���`�	\���a�|�B
+��O�qtSvs,��u���
Q�;ɟ;��[h��%��(��$�l���
�{�5��PW;{U��q�6�tC=?��;�.�� �t �*d���+��2#��v�
m�������~���{�h�퐰&|�ғ�҅`�
I��AW�N���-�
�N�y�,hpP1�K{�}EZ
/Z�G�p� ~G+�')3�
�Y�4�ݠ?���j&��{�@�E��‹/y�%
^���P:�c�!
�CL-ѡqR�F�$��
gdH|���o��q��(�N�Uw.�^Z���n����j5]:�
�qnVM�v�.lvϼBޯ
5Ʃ�
��}BM�մ�ZΗ[Ӕ���.�� �>��u5�)ޕ��9TġLM2V[��v���A����PuJD����D!�*W��/ӊ��>u����P4ʶk "�
t�K�Y��c�͛�{���ɫ��9���Mf
+:ݫ��
 ]>se⬃:��	1�R9�j�T�%�?(�S�
������<͢
������4/�]����Zzot�sh�@HfxcnlYi��E[~L&�!�[�!�D���䂴G_ �Y��
&����
bR�o;�g����ؖ�h�N��
X߀0�L�4�
��כ����vF3<8�
ֈF(9G#4p�%� ��
AϝP�>"J,�&�"�PD�
B
Ƕ�p*-� }

B	�!z5��
%Q���Q�*�Hg�dM����6p!JQ�J���{_�v���8��g~��.���(�a��3�O�A^f����&��1]0M8���~:�h��jt�4k�Ib��W��_<�}����mv�\?�$��3V?
��s�����
mL� ���T#��XEc�/.��9�
Hq��A�l��Pz�c�A
�2$�$Cmx`�($�p����
+r��[��5�{�=`�,r����Mncc�-)�Ѐ1��q�
�1����D?�;w�)��?CK�z� ����a샸H~Yy��)���Z
��O^��`�2�OB �����ً���W~a�GNP҅�aFS��é��40`��
+>>�ەo͆=�	�Wt�W��Uw�;]>[�I��[��	
�R�9Wv%l��~P��:o�/�zP�����a��B	1y 
�I���H��m��5��}m붇�5�A���v/
���}�:K
����n���� �����3��NJ	���m^~�|tj}��K��,Ԛ�x��e��O5��_Ŧ+�e]�.�F�u;vP�O�>[��������h��
+endstream
+endobj
+1492 0 obj <<
+/Type /Page
+/Contents 1493 0 R
+/Resources 1491 0 R
+/MediaBox [0 0 612 792]
+/Parent 1497 0 R
+>> endobj
+1494 0 obj <<
+/D [1492 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1495 0 obj <<
+/D [1492 0 R /XYZ 86.4 452.387 null]
+>> endobj
+1496 0 obj <<
+/D [1492 0 R /XYZ 86.4 421.932 null]
+>> endobj
+1491 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R /F49 566 0 R /F11 628 0 R /F10 700 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1500 0 obj <<
+/Length 2635      
+/Filter /FlateDecode
+>>
+stream
+xڽZ[s۶~��У4c!ĕd;��i�L;iz;/��,�'����ן] �I��ħ�I ��|�-�h�0�&�.^�^���j��T15���$��I�R�8��.'�O)e�9���w�0��gs�����`CL�g�ѕ{xS�3Φ��*�h�iY��ڽ������|��f���/oo/��� Y4��$�$BM����&K�e�&�������|rs��"�'��'�bpBQ
���+w�?"[��^]�d�m����4Em~����O�
+<�SE�d��D2җ�����4���rw����S�コ
n at eJ�J�-:_ls�P�Y��T%4��r�h�*�匭n�*��>�����0CR������HF��e�D������
sۮ�,�e�5V$bݡ[�D%�xy�6�M�Ь��9,J�SJR)�[�᪒0��9�
�����@ǂJ�ll�U�*�]
�k�T�א�xBd�-�1�3F"�M�j��)h��f�`\�2

0۰�6��mЉ����X�
+�d��Ex���fp��2����>#�.�{�}D���e����F�KTBz'�P:�	`"���Q00�"R����Q����SZA�x
��T�7u,U����.��ﷹ�C$��p2�&)A˻�?]��q����zz3��Z���+�� ��4�b�!b�OgH�*�*�{��	K�
+Ȉ�H�-�>��s��n����l��A��cf��h�+\L�	��JWOnl7��/�F/
ك�Qn��1i�'s�X�ߛ~��#��������^>���ؖ& NJ
+�
+H
�\RH����p��DQ�����D$J�9E��g����HNHHL�3
I�
�\�

+
+CT��B��J�1�,�Ā7)��{�q�$�$��ң�qfp at u��$n�''"�r'��~�੩�	�G 2erz=K�t[,��,��b����� 4^_}x�Z��Θ�Ca0
������6��!	e��=��u�Y#!�O>k�FqϹl���b0�@�
+h48Р9v�%>��ڴ	��@��������e�_��EYU��0S,����(��� ��J
 �CܿB�Nm|cQ(G�3X��*	�,�KU	�]JFN
+���u��Ɗ�A�~�v?
��Kۡ��R���oV���Q��*�.i�o�ngc�U���s�3 =���k@�CKr��	&�8j
b
+�E�8�x�^P �	)�N�1ҩ}2�����ן]����)ڽ���.6�`��{itl季�j�w�Z�"
�@��o��6?
,^�
��qq�M��Ƨu���>�l�qoֈ��@�a������L ����̝�|4���bv ��yކ��"
F�
v��te�nV�Ǚ^���.�b:XIz�;�� 2�8
1�< ��N_fRN�d���ݯgP��
e� 
��W���U�����ړ��O4V�+������{�,{��R`���n�>,{� `�S���4e�*_N���*_[��%,JbP.�-�*ȼdu�86T|H�� J�s���@�r������!��#�C�)�Ǡ�O��\O
+�
\�ٽA�!����Qc�r�1��X4�(q!�>�
>A∏��hK~<Mx��X���1uS�O���}���ڬ˖�;ʈ��{���o�óN�H�9�O�������	J�3|����ɤ9~VD@��9�[�)�r!�K]y_(��fۜ)~�"J�����x����(3LzC
�� &D�)�jۧ���v]}��$Iz�brT��.�>��v�Y���fw�v;n\S6�o9B�b�w; :�{��:�
�iAOc�
`�0p�C�kޜs�ӎ�!���,��QC��04��I��<r��_��
�����44�4VG,

;KC�Y��G��oi�{6-wo��ڲ�X��<
�v
�{d���-w�O�)���l������w$#	���5ʈkv�!~#��]5��N��Ɯc
�[;
�n�=����.�����:\?I��"�N�/O��b�sIқ�3��# ���z�	nLs[��Te@�1���<���-^�\��ǹ���`I�_�TW���KS4Y�
�B�bQ��-�
p���9�_[W�p1:�]"�-`����f0�ƥ�U�
�0C�R/ ������3	ʢ��DkYCa��'<�@,��?�hP����%=���v��hC���jm
+/��vD�F�A:���g'�ƛ���A��F���j2{�����@��:��3Ip;�0���2�2����G����_T߅>(ʴ�c[�ːc�>S< �cQ�B%��
+�Q:-�5���w��
���#��zx���4P����.G�J
B'��

�|\�P��W�W!���R�G�� y��{6�����a�9�s�ѝ�(��k�!�ȸ�v�[�'�
&p���
|v\zۏ;{�%��a�r뇓�ʡ>�����M�Z��;�O[t�Y
p�$�m�[���G.0��s�H��t�!$�|؉��
��(B
0��|�!��3
�G<{�(T�hPR�����5���V:���{�l�vʀ*�l��i
�K��?���􂹌��N,G�=�>Џگ�a�ǔ�
L���{�i�
++�������g4�T�_;\Z*�%&���>RE��oo/�
	�0g
+endstream
+endobj
+1499 0 obj <<
+/Type /Page
+/Contents 1500 0 R
+/Resources 1498 0 R
+/MediaBox [0 0 612 792]
+/Parent 1497 0 R
+>> endobj
+1501 0 obj <<
+/D [1499 0 R /XYZ 86.4 726.045 null]
+>> endobj
+290 0 obj <<
+/D [1499 0 R /XYZ 86.4 564.762 null]
+>> endobj
+1498 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F38 453 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1504 0 obj <<
+/Length 2784      
+/Filter /FlateDecode
+>>
+stream
+x��ZKs���W�(WI0� ��a�ڙ��7UY{N;{�)�f
%jIj�ίO7��R��7�T�b� 4����0]<,����_o/��	��H��^��/�&raxD�`����ץ%�r-�X�>�� �7�7�e[�/_n9�p�Ԓ1q���O?�^�~�`�`�X�������b=?-(�]|u�
)"��)_�\��6Bҡ�L�e�!�BG�0����(3N����w�>rO���ү�ٮ��,�g���L���OT�
�a8���pNˈ䢝4�sP
��$��
+�"��w�/�t	]�������%�DՉX�0�Zӟ�p�:}H�jf�
+L�8���,/v�k�LP�.!�S�\K!�j/uyɖ`q���T��=����{��U�ֺh~E� v�e�^����F��H��_5��m�g�}��0%�r?>
����}suH����9
+.�
�i}@qO��"E������קJ�p�)�]���!��o,��iU���8�?fW4mwNK�>���*TH�!G�
~��3������!��<�?�ǻQC(��]K�w�
�]�0�-�I��b���;7v�\��� ʙ"�
C�s�Q�z� �+�
�
�
�����
�[x��!�=�%%ec�{x�P2
o�����W���C\�1��C��
ⲅ�B\�
�,�D)�:�����
ƻ�9R�`�IR��9�K5�!l����
���Ĩa���t}"���˥� h

n�����
�%�m�Q�1j<F�1���0�`��a��)���
HUϓ�
�#>����v��/SG��Q8��4��ւ��5�C���
+b�W���YI"��J�ƫhN���
&���]
Qb0/]H�el��M1Ɯ��E"m���II����o�>���Q��V�U|�m�ipdI�`���[&l�p���%-1�e$H$#/D�=�|�xw�8�e�bq.`Q�OO@�
�%{�@�}&
C3t��s�STHC����
%O� ��3��i��^�m\��S�
0��36�I1�SaH��kI#�?r
��,�fv�J�-#a�lY0ѫ���I_q��d���|a��7I��S>�:�)�U
N	���+��,��
�T�m�S��
�7m3���+Gb�
����6x�)�w�2>7���J^�aB�?l66���1YGx��͠��ˁ'eg�
a�kPo��q�7��
�FY=��AOg�@�W��������r}���s��D�Ơ��}��E��;5�U
��9�B6j�KB�����8�P�օ̠��7���V�C����>>TU�
+(���m��
��5ň�P��q���0�"�Ծ�}~�/�̱fQ��Pl覄�.7��ԯe�
+7l��<�2:�~*�83����T�DR{a�v�����:�x?���N�tߊX�	Vo�;�:ɽ��&����:Ux/�s�'�Z5U:�>U�;�'��h��
+�i���!�8S��R�~z3�7FGݯ�"���.B��:*�ӹ#Wz�ä`/qT�̙i�m��.�K/V�\����ظ~Q����9��	́(�s���FN�
m�(@����^{q
:��Y�h���Te�Q�Ze�
+fH�}(l�;�bDT�H���f���v�DC�;���dK
j�;��w�
?�/���ǵ'��q��`�����މ��;MFl�7�>���N��/q�N�� Si�
+���6}��oN���@�q*њざ9:���*@1
�J�\Ne��
�8r�jx2�R	�˶��L���0��j2
�
\A͸�(��)֊3,)@q
��X����&S4�{�1�V�/(f�"�v�$����N���?Bڀ
wy0�6���C���
+�%��k�\L�'T�E�������&0��ʀ�
pR?��C�Yz��
 58��(v
9���Aj����,�H�����2��~a�tB�]� �[�$�-��U5c�iz:0����wW��]�����<�3�)>|
v�,Ϋ@����{��~�"��0�z��}�m���f]��J�	p�v�G4�q��f�
G�<x����k���A�}sU־���K��*NJ|��I��G��7�
Ǯ�@���bg��g�2�
H߻��"�o3��L��а?���g��b������.o��
�g���
[n��J�:9�� t΀����
�&�
N"�6�	��eû?�z!Z�d����*�HC=NK�L�t�/���.#�|��2~H��h�^�/h���8Le����.��L�,%�v�_���� ��!Ŝ� I�� �p5[��}�Xp��<�4��ӫ��!pE��R�e��<�Ss��}Z���o!�(!�rax�
+{|�5�>��N��i�=-���&:���]ë09iHS�
���#Ja���K��?����������¸��,��?�_fI��vL)�b�)�dF�ƛ�QR�VS�5�t���
5z;U
��>��� O��a�*�%�a�^MS��`5��C9*TB��L�Omwtբ1ƀ�X����c�g����먅<N�w���7�������k$�b��B�o�a��%��o���g���Kf�}
Ҙ`D��[!������3��>25�-l3a�p�zG
+��h�W/̩6����_�/��5DG�-ď�;��_?�!���נ�y p(���� @�
+B�  f�
ʏ�@!���s�`Ё�I���
��Ӈ~���V����*e�΅��f�ԋ�����n�UU&3!G��ِ���0�F������
P���a�I�!��hC�p�o���_������
+endstream
+endobj
+1503 0 obj <<
+/Type /Page
+/Contents 1504 0 R
+/Resources 1502 0 R
+/MediaBox [0 0 612 792]
+/Parent 1497 0 R
+>> endobj
+1505 0 obj <<
+/D [1503 0 R /XYZ 86.4 726.045 null]
+>> endobj
+294 0 obj <<
+/D [1503 0 R /XYZ 86.4 215.234 null]
+>> endobj
+1502 0 obj <<
+/Font << /F36 408 0 R /F14 627 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F38 453 0 R /F16 397 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1509 0 obj <<
+/Length 2639      
+/Filter /FlateDecode
+>>
+stream
+xڵZ�o�8�_a�^�b��>vq�4�eѸ���]
�q�S�T������
��%�q�M��Iq������h5�wG�̏~|��Q��HF���(��
�2e���r�y,��L��������b2U�j,��}^ڬ�ɋ��:Qrl��qus
#9�J[�º���ҿ�i��������_�N�G_�p�G��İDG�����?�h	+��8Si2�s�nFZ�L¨]
����o��^,JqD�P���&2
�Md2�pB��+�pmiⶶ�5,¾��+�q��+ڴ�k�X�_�}\���z𻾞��?��fK'�΅.,^�Ƿ�Ϧ4��T�

�ͦ\�Y��G%
^R�J*6�$��PI'!'�M�\
���ʫ|Ů���v�Yb��ì�׫ma�NL4�J���
��Jҝ$�&��QwY���TK
f4���sw�-�ȿ&ƌ�r����P�
+�
�v����ON|�i �G@��Z���3n�t�N��J�%7j���^�/0�%��b�����q�W%M:��_�*�Ѫy\ߗ�H&�Yƾ~��vB'D�
�d"m7�6+���6p� ?�e��V1x��s�ۛ��UUR�#7���QZ�0H;�QܤT/�|aӬI����,=��Kv�S�|h
Yګ
y3�
�0"5,��G�0m�縐H�S�Q�rl�����'�t��,�◠+�b)xЀ����Ӌ�3� �
�t4���I*f�~9�Q
+�rl\���
����vr�����	�5@�%�G)��z���d���M at R�R&/AYB�PQ4�
��C���b\J����s!��Ÿ�>�Bt�4>�`+D#��
n2H�n�jS.\̅
��?/D"X������☩��,�M�˙�
x�411��"�*���!���̐軓�����>a�p�y	�Zs&c5$|�z���1��|eK�J�
���
`��%�S�bdb�^��R���$�9�f�Kp��0N��06-`p��� 4�$� �"7��:�K:޲r� �v�㲪
+����"�G
����p��U�	K@�C$�- m��0����]���P��.�� ��]�NԦ��"�k&�q;��O!�1)8��"�b�-�$[#�8�"�.N����Y��~Kk�vI��ml��8��F�Eҡ<��g���xy�j���'���qU9��
+J5��A�������')��ӏ��M��yv��@)r�j�PQ��� ���o�Ք0����'J8;WT�u_�Y�x0Մ�(~��[Κ�-�QUcQ#%�ޱ�
%�'�r̂8Z@�
����is�Ս�.�bsS�r��☒+nw�
�W��x�^$e�;޻��
��m�o'P�;#�-0%W�S�\�\�.'�oq���7��.���7_�-}A��غ�-T� ��Kڞ5A ���
H)�K�c
�
����Y�$�	���#�I�
�:'!c\MӃ\��22�D�pa�v�
e���k���jR-!
u��L����֝E��-�m�{ ���9��O��f�?
@:
WK��ɲ���@���wޚ6��H�:�w�h�nj��f���8����8D8��rXLw��̹��
fxl��IJF��g(4�MEA�E�8D~�q���u�|�'�}y��L|�s$04u��*�ɋ�a'h[��!��P�V
T0y����I�4��7P��'I�~���K���g��?�<{dy���hw���
t�^-�uv�'�rx߫�\�o_�����v]7������p�+�g���=�4 �=m���NR�������@��g�X6�D���ڹ�H�
+
Y7�ol[iM{������+|���V���������`e`�~��!R"F 
+���f�OO����{��K�@!$�
��[��
������wG�!���1=vi����1���8���1K���$��P�b<�֖(��ѹ�k��,�LnH�A5�y���S`,�P����
b;���'��?q`�g�3�@��b�ԓ�o&ײ��H���L��!V�у@;;Ċ��ݬ�>�	�L�x��� /���x�
��[N}��(�À9��Z܆����oK��ݢα`�	�
+�������#xT�
U���
�E�F#�
�-W�wq
�����}t_`���k�m9P
�v 3G�NŐ�u朦i+�����h�b>
R�`q��MF<�\���r�lE�]���4
+߲���<`���AE7�+���<t��ˑ�en@:��I��WR�m[X/u(U{jv=�AƝ'<

 ��%�S�_�A~�;x����G�:���A��6
P�� �k�xK�yLo�Gg�#`���o\q
+y�%j����Xl,=�� �h�m��$_ ����ˌ����+o7�$�A$��H�j��E~��1
�p?��l[�ȁ"���M���A��T�oF?���M�ihQ�����k�m
�`Su��>@�yvYXO�}M�����Ԓ��mK����,m����5���W�^�
����
�K
( ��
�x��]N��>�	��u
�v��
6����o��/
{�
L¸�;���s�Ca��3
w�ΰtt�+�x�Xu~l����LGP�+���
4��
m����k�
WH&��2
��(�
+��W*aZ?��=�
����� ���2
+endstream
+endobj
+1508 0 obj <<
+/Type /Page
+/Contents 1509 0 R
+/Resources 1507 0 R
+/MediaBox [0 0 612 792]
+/Parent 1497 0 R
+/Annots [ 1506 0 R ]
+>> endobj
+1506 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.452 241.895 331.175 253.85]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8.2) >>
+>> endobj
+1510 0 obj <<
+/D [1508 0 R /XYZ 86.4 726.045 null]
+>> endobj
+298 0 obj <<
+/D [1508 0 R /XYZ 86.4 533.175 null]
+>> endobj
+1507 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R /F14 627 0 R /F38 453 0 R /F49 566 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1514 0 obj <<
+/Length 2376      
+/Filter /FlateDecode
+>>
+stream
+x��Z�oܸ�_�O�|�~���
��ĸ�ݗ&A!{[��ʕ���"�{g8$%��m�"�>ؤ�ᐜ��p�\��Z�՟��x~��*W�JY��?�\���ʊ�J��׫��c��D9U�_7X����3j�頔�z��
)�)�����OG:?�Ǒ�I�JD��9]�.o�޾�5����LUnu��nVZULBm�:;����/����Ŷ�us���E��B�藯�l���Y
~���dq
�+�v{
���ت���ޚ>/;�n�v�n���M�^bϯD�}��_���i�F�8o�
�hA�X�u$�xlʢ���b�
��
7
���7��j����
��E.���Ld�.� W��-�b��m��������þ;� q����
+s�X��*S&����*���~�Y�C]O���fw��zd�	�#�#�d}	
E�e~M-�n�Ϧ���
���x5���u]7�5u�Ǣ�fħ�d��(�u=�{hZ �Di�J�`�i+f`�
�G�(���
���C b��QYS�Dl��t
��Y�bŸ�
 b�)C��-��<Z�y��Ͽ�J�*)�d�'Z��ձ��ш"�x����H�XT\1.��EC
�( q�Pv��v�y@�9V���78�{Dž>zK�Ͼ%#��R�%gB�}��E3��)��uN�భ�ԉ^0x��WVI�u�׸�O����h��ܨ�hs�9Q�0N|!׈����p�Ҳ�2qJ�Hs��@����g2	>&S��d��������55&�@��]t^ؙ|r�͛��Ao26�4Gf�a+�ݣ������V�w	ӾU)��P�4=�T��05���AI��i��א�@��e�%S"A̋��H�B"A�
�x\U�����3z
8�=Nc7֛ppÄ��G�����~�ޱINk�
�Ѓ [...]
+b�:
��$��R��:�#���
�-�N��p:�%�$3R?)q�ՓWV<O��9�L+��sQX�"��
+��fC��6��+x�4�@=u�G�kY��
�����)6�g��M�9���
$��/�V�V�Se7xK�)r$
ٶh��
^��ݰ|y���!����]��M�c�U��O�>�h�Z0l���2`�;�� ǖ��+�v2lO1���q�7h-�YTӧ��#�f
-��6�e���
/�iE���K?y�t��e��;>����
2��z��(y;كo�;M�H8������U�[h�=���,@
�����9����f���C�C��D)�c[���#��
	k�t�d�A�4��v�
��,�c���XA�[U%�B0	��#i1�S���4x��h�ОV~�78*�
�� "�]��쁐�u�l'�p��ׯ���,�C�)xf�L� �{"m�q-�*v��-vԳ�c�
;%��\A��
dU_�
�@ <DV%��-씎X�>v��{D`�'��
~
3�{tg���
�׃�D�1����B�
]�\
_O�p��s?�K�hQ�\ik�3՗��
� [...]
9���,1,�"޳D8K�
x�g>�}%ԛ<��&aj��2��o�
�X��5���1�<�A�软�W��͞Y���;e�lÕ;TwtQO7I�
B�k<�/&v��\v��&n�z��T����	:��0
�w�m�������0�k��{@�.D����:��)>À��x���>�_
�
����
��)��~����
��.!e���&�g
�̾6)����9Y��F��z?��k�:�p���@�!�嬄xc��z�{T
�lP�lхk��F�+~�h�t��n�#�=�Cz,�R�@b�S���I�I�ʡ�3��Cx� ܇^b���R�
��x�]���iHz��~�-br)�k��
d��]�����a�W
+endstream
+endobj
+1513 0 obj <<
+/Type /Page
+/Contents 1514 0 R
+/Resources 1512 0 R
+/MediaBox [0 0 612 792]
+/Parent 1497 0 R
+>> endobj
+1515 0 obj <<
+/D [1513 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1512 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F14 627 0 R /F1 746 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1518 0 obj <<
+/Length 1308      
+/Filter /FlateDecode
+>>
+stream
+xڍWKs�8
��W�(��
ߢvO�Ͷ�N��N�˶=���#��$7I}AB��Xy
<�H>| a�l��Y�}�8y-t��\s�\^%F�d<'Z��r�|N����離.[-Wˆ�S[��Lߗua\�p�ϥ�i���v70㩫��ot-
*����󳷧�/�_/�-��\�X0��&l�D#u��->��v�%���$�An�H��*�X|\�޳a
�1)�1"UP�cA�6���t
6�S����]��9P�1n����De��<��˜(a���v������r��J�J�m�����u�3i۹�n�CW����a
�6E��U{c��X�]��ո��]S�M���[�,����Px�O^˩�Bc�)Z|Q�l�rb��)�\i����fV%'����ce+)�3����B��E���x���	.	5zP����	&���/��5��� s~l�D�h9"�VEha
���5���6�D�8<��$��A��Q���@
�d����.̉4*�w����9a�����C�����Y��BEZ��T�
��mWl��d%hN2`�A
���XOBN�oᤃ�c�5��G�7���VC����z3�<�"ʔ����i��X�����ŀ�R��2�
+f{$��,��̅�$��\�(�*�wgm۶�]�ϥ�0�K��C)���CJsC��O�':g�Ԡ�6B0���W
+_��a|׮�
+��w����`���:
�:K�W r�� K!�����[}�P�|�l�
�v��^�j`)<Ii:
J X:��SR�������l�VD0�,�T�v�6�d`��a�'��B�!R����K���~�ډ�`%c}-881`:Ã�Jc˙BC����W�DZ:�c�|�#
�#��q
��
�Ec�x��j���n��·d�l���R>l;s%(A8T����z���A����y`ױzh��2�k�
@��M+�6SZ�3q ��=�d1h7"�����b�P��R�n@
�i `&����1�DJ��#���F�F�mg���
��)&����k�
�
P9d�
�ol(�P��n6��ˊ1
��O	��� 
̘ 1�>w�YLo�˪
�y
�i*�)���zZ�j���C��
T�+ D�Q�<֓ *���!��[���
T(��y���b�]��v��3h
�k- ��i�
�C,��D�����@0_��v��̭���:^���p�=j� �U嫅_(k�b����)�=4�X�}�R�4;`����������rB>���g}��"{a�!Ɗ
���{d���B������4�kxH�?�������␋

+endstream
+endobj
+1517 0 obj <<
+/Type /Page
+/Contents 1518 0 R
+/Resources 1516 0 R
+/MediaBox [0 0 612 792]
+/Parent 1497 0 R
+>> endobj
+1511 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./cscmat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1520 0 R
+/BBox [0 0 473 483]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 1521 0 R
+>>/Font << /R8 1522 0 R>>
+>>
+/Length 1523 0 R
+/Filter /FlateDecode
+>>
+stream
+x��[[o\�~�_�o��H���yH�"@�u�"@�0d�m�r�i���΍���#��'-G3��7
Β�{�׽��{���ߛ�ݧ�,����t����H���˝_|ۇ�-�X
n�f�B�s�
ykط�9�����_!�m��r���;W�Z~i��7�V���W�L�#�������|f?H���?�
Y,��ݿD7 �
M�*�0i
��Ct
+��b
	YA�-D7C��U�n�X�@D�@�q��Dt$�0C\�@D�@DV"�=!��Zh�[
y:����!6ʁ����fZJ�&XT���� ,(�1)S��w�O]`U�7�[�� zc��B�'VVrN�Ř�����nƉ�e�\s
ʂ�IԪ

f�X^�9N8YPcR�����}p1 N�C@�)Fr�O����
hy
+*�	1���N
}
��/�P�!��&
���[R���	�oAp5p��{cBLR���	�o�u_������8k
8k�q��q"ep� �	1y�e�Y��)�����
q��
;D<&���`��U����PV[����*�-�]lN���ւJ*\
+�Q��f��$�7L���/Ѡ�AY�!���{����'@{F��d�9�ml3�Њ#��� 4o3�,g�9���
���
4�R7
x�g� � dg2P�a���� �j2i��Tl�f�-6�aJ ůd0���CS��Jp�	�6
+խ��B;��9Q��=�R"J���E�ʕ�v���U�]9��p���HP�!Y������y�(���NN>&��ɇ�;Y���]�ͪ��M����s����<�;Y���*H�t�Eg� �����A��l-
$�;#ٔTH[��v�3��PS�~{��
���vC>��n (�0�皀�=͠"���E�,ER�a
S)~%���
���v78�h7p�,"�Ft�.��YD�e���Kv)K��cÔ@�_�`a������������
��[��.-�$:�&�
��	O�¹\A}��4k
qt|v�"����}�'*r�duش ������Ó
+���q"��e���5�
֟&%&>�
�0��Hv
l�>*��
R�{+W�>t�f���&[�8M
f��1�N�x�����Zax��:!5�4�Y��,M7-Ɖkv1�����
��㵆dh�Q�ҴXݼX��moݼ쭛w�u��t���c4n�u[~��9��
n��x
O.����R��D�	ѧԝ/�Z�G���i.���+��c.�*sß֞��
+S�� fg6�)I�]��t���
�gi�:�q(�p��*��hR:�Ϗ ��l �!�2�!�*�^H�\[����/Q�9Ѭu��EZ�*�� 
��*��G fg6Љ����
��)<K��
@jX�5
Wy��y��~
a�n
+��}
QO���
�R�֠����-�5���A'`�����5E�U�k�#V�:��d	נ�֐]i��긢��8���zT����)�	ǦL���x��tR�ЇNg�S�-��J\
VF>$��`�ٿ��w����toe�a;:)��l��������鞟O6�MNp�`q����+�O�Q����f���1n�K�7<
h�DK�>{��6�8�pcp�����Ԥ!��+��
7R[���1���.E�FR�^�Is�a�l�@��el�B��/�&��8�8�9.��<��e=
Ӥ?��
T�-����
���R��w!�Իk,�~)�������q�lF����h�=��.
|�w�~�zw�q3����i�K��Lsv�M�qH/Y�ͽ���]�������V<�rr���6w�܇���0n(�����w}�ڻD��w��
+�q(��Y��U==5���xL��ps��>x�R�/7�[f���HSҵ69���D������/�s���:�i�f`�A�i�>i��٪�d�&�����

��|]կ_}i=Y�{�6���f�S�]�%�����Vh7i~E���8 at _��0����z��.ɲiի����������>���b�G���kߙ�8��qk�V��9A1�W`f�S�~Y�.Ex
�5i\ogx�=p����8^���t�����m����Y�1�B�R�{
E�L˟�����w�~����a�/9�A���^�ղ���]�~��Փ�w�!֫�O�w�zw���������������W��J�⻑���!��p��jw��'�Q$r(���Bh��h����o���$�$����v��5(6b���|����/�LߍR��.�~��?��O.a�h���w�O^^�uwI�R��~���Eץ��j��.�6xb݀�E5�MD��߿�
+4D&Rė��>i�_<�����ϳ���H�_~�'p%v*�l�Kخ�4~z�ɳ�]������ު�H%���������I���?p4W3O_�b
}q�˫��7�R>�������k��Oܮ� 
��g�����\C��=��k&D����p���T�]e���D�7�-�B�a"
/I4�2Fo3�I.�P��d�/&���Fr�/�*sM|
'�%jq��}eqV�&&̴0p�2�L΋/�
N�bp6}a���
ә�({�s�S�eG���&Œ��4�=�^v�,����M����
���6]�l9�Em4Q�����
j���頡��L9�@�6��z��#4�Ƚ�l�8�;m��Y;,6h�q�����h�m�mg�������I��q�c��6f�
Rg1h�]�閡����,�6�����~�u�Z!=A�0D"Dwj t���D���"����O��E8&1m8�N�<7
"�;5`:�frj��e`?�6
�
�h��h�I,�Ρ�uYꌄ����b ��9,s����,S���ȋ�s(�J|��G4Y�����,�����H�Θ$��y��Z�/����v�I�=}0�tr��]�.�=�7���3&I;��e‰-"��wF�jL���s�i����K?
���;hͽ�j����^�c���e*;
r5&���9��锃n�'�t�%�r��A����g]����+[�"�՘d{
?�f:[8�2㬱��q�YZ]
��6u
o��{5
r5&ٞ���N>�vz.;
r�w��.gL���Ns��+��Tv�jL�=��L:
 [...]
+���!#~
y�
����0��ڛ!����[
+endstream
+endobj
+1520 0 obj
+<<
+/Producer (GPL Ghostscript 9.07)
+/CreationDate (D:20151010160615-07'00')
+/ModDate (D:20151010160615-07'00')
+/Title (cscmat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+/Author (peles2 at tux377.llnl.gov \(\))
+>>
+endobj
+1521 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+1522 0 obj
+<<
+/BaseFont /JTFGJT#2BTimes-Roman
+/FontDescriptor 1524 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 0 333 333 500 0 250 564 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 564 0 0 0 722 0 667 0 0 0 0 0 0 0 0 611 889 722 0 556 0 0 556 611 722 0 0 0 0 611 333 0 333 0 500 0 444 0 444 500 444 0 500 0 278 278 500 278 778 500 500 500 0 333 389 278 500 500 722 500 500 444]
+/Encoding 1525 0 R
+/Subtype /Type1
+>>
+endobj
+1523 0 obj
+3203
+endobj
+1524 0 obj
+<<
+/Type /FontDescriptor
+/FontName /JTFGJT#2BTimes-Roman
+/FontBBox [ -70 -218 863 683]
+/Flags 4
+/Ascent 683
+/CapHeight 683
+/Descent -218
+/ItalicAngle 0
+/StemV 129
+/MissingWidth 500
+/CharSet (/A/C/L/M/N/P/S/T/U/Z/a/asterisk/bracketleft/bracketright/c/comma/d/e/equal/g/i/j/k/l/m/minus/n/o/one/p/parenleft/parenright/r/s/space/t/u/underscore/v/w/x/y/z/zero)
+/FontFile3 1526 0 R
+>>
+endobj
+1525 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus]
+>>
+endobj
+1526 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 4513
+>>
+stream
+x�mWytS�ֿ!M��bc$��T
�(CU���c,*R�t�`[h:�M:ej�6�t�4s3�I灖��2We**( 8 �{�>�pn�۷�w��[�ﭕu׽���}�o��o�� "�
caJa��bu��$�4����fP�Σ
c�Kg�:������\2�ˆ�G9�Q����q1�d0������0��2�Ԥ�+�yfտ�yvÆ
1����&&^TQ�_���Db��DTZ�R�v�Z,.<
�/VJ
*brrsE�����E�1/�
�R�,��+c���}v5���SXr��"���c�H6�$�$���9���
A���J�K3�+*�d�
E���nU�
Qb~arQJq��$�O�^�t檃Y���2�u"�XN�%^"��"��G�'҈mD:��� �5D&��XK�L<K�J�F�#v��b7��`b>�K, 
 6��M��!"�X�Q'"q���o^�<Ѽ
�L湈�6�
+�
;���:���
���|���-x�����p�B�h�"Ǣ"u�5��_G����
�\ܸx|����?$�"g�`�
�
1f��oX
�봅z�'gӹs�]�
+]uf#_�2� S��k��l^�I4����cϴH
ePÇ��}M�9�����>D�}�H����o3>����0�2���6{ ��Rgi3�IzMZ=�F~�֬n�#$:
+N��h��.�N!-0A�J/���
���!�|�u~�A�j�+���h�P�S��أ��z����5�}�DV*�K?�
-���[��PԏG�d���B��{��3�c4�W���uMȄ����5�SW�	"g�j���&�0�Y��ǭA2��m�U����j{F �y n�q��);v��@z
\3��\��׾�

�|r�sRٶ5~gI
�'��P�X���1I��;4=qaZvxB0X�_#�	�VU�����Q7�K8u.�1���.H
u�
+ ܯ�'�H�
+��7�����!ѳ`���0	I��[��@�w������,��dI�hST|���������l�I���e����A$�������⹪d�L^UQ��I�$�fS���Y��N �7�zخ3�Pk{g�	�U쭌=�s��,55�P<+����c�q��A-���.s
$�]�YB�
+`�ѸK��j�W�*?�@�*0x�l��Ug���
�.kߐ,T�SZ�!��Y�U�k8�|C�.D�	i;��]A>Z�Y�>@�s�ѣ,=������T�&h��m$��YU�\�1)m{���2����P��*����

+����S{���c�l��ق��IpA_c'����[���?:[1����&ޕ�ݰ�?q��䅁��:��a�Z8�Eu��;K8_!'&���d���&���Tc4�R�3��I�Wz��X�6���$��7��/d_:3�5=$�zd�*C��{��q���Wv���B��j|Q���V��,��}P�9)D?��ΐ
+\ih1�t��(��h��*�����G'��Vt�^��|jx��m`��OF������Yq����x64�9�
�&Dm
1�2|Z�f6�
P
��z�St
�	�2�|�Ňm
ǰ���ij0��0�\��<��j��ڕ�Z;�C��?�
F�y��
Vkѿ
|��Q��UPm��K���y/�J�I��;<�Sl>K
F�[�T�¡�+c�L�S�W�ntC7��8�6�U��Ag��Б���x-%N�
ڠ��҃�������Mv�w@�+0���g^ۤ��.@$�h��t��uE��=���	j�U�J��SC����� N�����F����\�5#�2$��ju47ٚ
�FW�:�����3����=�^�[U�-��k
+a�IK�ʚ�:�>=#�x���dǢ�����W��/�P\W#�Uh$52HH�
6x��Z4�
���3БG�A?[
���0J�}�{�f��~N
�&��:]U��ΤSj�O2�<
+���u
�1X��.0 �#����h6����X��W�'�@��y��7$��
���i6YL�ćJc}Q#���b��5��%
)���U�4�jUAn�2����i��B��k>�m���ɫ�;ȹD���
��:������i�-\A��;�
�$L�hL�@Mu}���(|����|�^����;�[�!i at O}�ީBl��g�����Օ	�MY�BM��b�)
�f�\^Q4X>����h�[B��Z�
���0>�X���O��2��ܑ_��0v�g�����G��<��^唴)�!��#�y~ǩ3������Y�W�F�~���<182"���1�DF��"��2c�j�ǜ}���;�`�N���ҡ �f��p-�1\^�u;�+�es�����
��:�n#�p�Fg���`S���JRO�<w���j���
��U6�M�Z_�*�IÚ.`�j%�O���6����2Vs�έ�j��g�}�޻H~��~2pѓӬ P65�H��bݡ� [...]
J=��?��f���o�C�Ώ�N
���F�A���J!��z��\�����X
�0`Qa���
+'"��R� ^v��>��y�#�S��_��&�q���$�5��R
+�Y�>}�ȹ݀��� {p��

Y8���AF�*��ܜ]�
&����
�1�P�
�fص���KF����RTx�4
n��~�
�n\BĤ���Vq=������%�Ù�&
��	tvT���
�F�%
1zMq{[�z�-���x����xNjƤ�������൲9�8gj�����������	�Ѫ��OH���E�:
�(�ʁ�O'��@�1[*���z>��t��q[��#T�io�*�x��M@�����ɓ���2H�ٺ=6�Wt�H�P*U���R�
ʡ�EwL
�_Z��}��~�q�grZ0v�u��+&�Zi����R��u��
MVl�6��(���
��ó���S3H�ƹ��!�g�3��fH��ws.�z~o�T��;yVhC�q/�
�<ң*	�
+Z�\2�����9������x�?
B��Eݺ�.�C�Ý���Ӱ��5� ��~ߡp�A�r��4��N[�~L"8T�q���IGe_gG_eg�K3R��c���kw���%�G���8��]_�׫�bq��!_^��8:f��J
��
��4��"?M���6� _M?���Qd���=@�:؜����������[R�M�ND#��ۿ}��
ͻ&\v1g
+�E�=9v�Ĥ"Xp��WH$����t��و������C��An�5�R�MT�L�����
��.U�p�A 77���&��V���P�+;5�j,�JUU�D�[hޥ�h���k����
+�z�/�
��D�Y�;� �
z}\X�N��f�S�r�v(;�ydۄ6��f�&z��݅�A�ߧ�8?�
�%�2�8Vx��[�)���&��a{�K����|؂9>�G	 �Я[�-
�k�i��`
YSc�	jT�ggY���s�j����{�ꕓ�N���gi���Ogk��M�z\kk4
�"yT
���t��{��%��pG2E����9Ť�
�Z_��̨�)P�$i,A�E�%��]�-0
ftIO)���>� ?�x>s�/F�ɣ�rM�譟o@����ギI�I�)y�ƌ��a1v���b��9���V�
�T�6������f��MR����W�
/����A��cӌ�wPB��
�a�ku���
Wu����m�����r?�gQ{�8���8�Gw���aHNu�Ҹ@'��I���$��^!�


j;	�
m�8!�����ڽF�H�e���
���!��^޴7�lo�@y��7fA�&.����4����Hd��f�«h�Uu�z�;g�I���҈�o��0�<�8}��N�\ۚYR�w0~]����i���?=q,��j��%�{�
ɰ�F������7��W��
�||�
����#)�*�
�ee�e��;��O􌞼��ÿ@4���~z�ޡ�e
�uռ�z
��t���
����I�HJ��
���S��LT*׬��L��B�QY��zR
P�ۂ��o�W�
6�a�
���QӮ�-�w�[um�l��;zԞ,�0�^�R�����
S�1����Nu@�Vi%���*����`���s�
l@�^
���j��Yi�	�E61��Z jW�F�]:'�g��Z^Ҝ��
A���;T^m:X�F�J��*��#�[�C6���v9l�
��w���YW7�O7�h�^�]�.�n
ήG��A���t�?/�|
(�)T��(;����%�8���3�2y�`�����B���S1bw��v'���
�j�%y�y�{B��<�=����Kt~�]0P���5Z�����YF��=;א
�I4=�Q=����ǰ
�qS`�*�`o�������J
�:Wq���[G�/�=�H��('=N/4�q��
��eŬ_����
+N �]�����v!&�v@��Ҁ������hm�B��R
ý[Qmeu��FӐN�~?�h�v��$�����}!�b,���
_�-\D�


@�
+endstream
+endobj
+1519 0 obj <<
+/D [1517 0 R /XYZ 86.4 726.045 null]
+>> endobj
+570 0 obj <<
+/D [1517 0 R /XYZ 139.421 261.494 null]
+>> endobj
+1516 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F11 628 0 R /F14 627 0 R >>
+/XObject << /Im7 1511 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1531 0 obj <<
+/Length 2738      
+/Filter /FlateDecode
+>>
+stream
+xڽZKs�8��W�(W�� H��
�lej㚍��dr`D�f-EjHjl��o7
)��f��
"a�ѯ�놢��*Z�������\�Q�����*�D����tu����S�.�x�׷���7�ɶ�O����a��kJ��o��\�|{���M�u��$r��^|��rx��*"\��G=o�\�jus�ϋh"d����8f��RQB9H�rR����K%��zӗM݁`I�.k���3����3��?�#mD�+�H�b�	j@ϡc����X�\=����uhB8�n
+n�R�6J�y�[DE]t���Hv��?d�e;h�84Z�
��]›��km�Qַ���ح����.a��
����q�XV&�,u��T�'���H��27�\^	����+��
�!*w�>+��~��(�ٴ�+PaJ����ͪE���k�P�W���v�:/3c���$!QLW2V$V�rBy:��v�Ɏ4�`K����:`�C��cM	
+~Ͻ�P4���Jb4���3�4]]1pg�̿�ѓ���ȣG���
�ţ��������ߢ8�&�!h����;2'�w�1
8u����8�*�כ�G�����i�����
:>��iB�AM���e
���^
ZG@�ݴ�˘3�l�϶��+th�~,��,!�%S
·
�����;�o�%�0���P�"

Z7���m̒E}	ak�[6l��y`�4ߤ�s�-���c"�f����nC�л����跃Z�ݼ;�@�!QJ����%(8l��^*������)U���	/���	�
S��Sț29Cr���F�r��*&	<�b
���LJ�پ/�XL�Y�of2�+�!6 [���
ݸ�Lv�L渪�t�

�D(�Z�
����(o�Q?D
B!��0
B!��O%��0&B
�_�#B�Lg>���
l\��X	�n�M��t�i��p;%���Ju�I"~�;�>�6`3��.�{�kSW��!L0�!&�%$��IA#i��YK1 6��K� |�%�)
�����]�6ϋ��,�{�
<�-P=,VF-LF�m�m�g�P�>��wEzެ�#{�K����� &�fg}ܧ x+BI1���1�SLw�␛bn}Y�J��r�9[A��gr'*	��!�����A���
����F���18\4�{�Z ��
�Y���(9;��|������
]
맀�C�/���Ϊ J���/��,"�/F�w�n9��mZKu��4X��ΐ�8�1��$Māi���� ��xܘ_�'�����o��2�
[
�}��B;�����[L
fS��I�0O�ݦ�
h��š�A���1��tz�e[;� ��z�T�mm+�r
a��\��
��T����*��]X ����!O
���ݶ��=x�ܔ�1��}"Dc>�*��V�Չj(�4��AӮߖ#�<>���ę�j�b� [...]
+�h(ēD.��0a���C��%�

��'p�Y��Bl��Z����G")}9.l����
L-�Zf����o��i͢�	�ֲ��*��=����e�)���i���"|)
&��(5�8Z>\Y�ȩ�1
a
���I�E��**"^l�7y�J���->���@��e�i���Y<cK����-ѳ���RydK��0(s�kُ^~��U�p~E�#�E" ��Ҟ�n����{H�l�ǐ��Hl��
�0𽧲�MQ��2�o�2�&%�6���j�s�����+
�P6�,a$���t>=:)R:����
D �y�#
5�9pA�|0	:5	��0@ a�i	�
�lzP��L�ح36��h��6�l�z~Շ�c-�
�&�^�� �I�y��
<�s<����G��PO���.�,��'���å"Holў�HOz�L ��3��vU�1�%���
�?ݾ�ͻ�F��oa�f�T��U��#�QKu����p�
+W$'#Ty��uƀ {n?�`
�X(BE4C��9�q��(�������$"5�vWx�c6Н$x^<e�
$>
�)|���χpŧ�nX,���	��5C,�VH�/ s�������)�~���
���ڿ�h��߷��5$m�ʔ!1�κ����*�
6%
��κ�f���ԙ
�5�Y�e�q�*
��2˟��6�	O=m(il�{��%
����jj��wv^|s��y�f���9��,Ie�Ӣ*�em�v8�P�������`���S:�@S��
�S:�O�cN�[� �g�
�l���E��h��[N @$9�	?p����v�+<�z�{�c{�}��
�#��V*�ֻ��^;u��ӲC2.�U/�j0��f
���1T?������؊�go�R87�������+қ^�
x��\	����eo��IJ�
Z{!3���[h ��<�ޏ�4@���g	T_"="=����� Yu*�[��:ީ
+��%��O�oՄ��A
�~���G��H��WY
�
����m#
�F��굑���;ؐ��N��D 8�[dO��Q�LJ�� 'Q	=� ^�����N�UQ��ao�����
]1��H� ��]<�]@��ͩ��JfQ��Zf�\U�R>�)	���S�HO~��=�.�
pDꁿ�	aʒ*����5�/���I�O�X�  �!#B)]l�t�u����
�ږu�H܌j���)C`�?
}�ٞ��D��.=&�Z�
b ks{Ź��S�~�u����� 
��
+endstream
+endobj
+1530 0 obj <<
+/Type /Page
+/Contents 1531 0 R
+/Resources 1529 0 R
+/MediaBox [0 0 612 792]
+/Parent 1533 0 R
+>> endobj
+1532 0 obj <<
+/D [1530 0 R /XYZ 86.4 726.045 null]
+>> endobj
+302 0 obj <<
+/D [1530 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1529 0 obj <<
+/Font << /F36 408 0 R /F38 453 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F14 627 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1547 0 obj <<
+/Length 3764      
+/Filter /FlateDecode
+>>
+stream
+xڽZKs�F��W�T�	3���'�:���%WmU6��$�A@@��_�_wπ RR��
9����|�q��oξ�<{�ZG��K#-.�I�E�R/���r��m��*0���7y�7Yy�҉^~js*�廢ʳF/��˹V���_��;�Բ��:�V&�����~�����˟�~�<��, e�"p��^b��z{����b������dq��
�SO�T..�~=�G'KA�a���Ei�q$GK<�i
.P����˟�}�B�g	�, ���`�'�
+/
+bY�s��A�`�� 1�C
+�\Ef�џ^�wYC
��m�5�W)_g�n��f]QWvF��s�"�,1-X6�VWM�<������N���2��J��~q���|�77��ߜ��m��
/������߽�i
�)�c��v�MG���1�В,�8�kZg�E^hRH�o�<ᩎ�eS�:�-U�ew�uҼ�š�;��1�[��n�X����  ^�����[-���ۇ�˷Rv��uki�*k^xM�~�}M�U7�2cd�cm���A��`8�xg*�1c���ٺ1tV*�ei�7��n6d��e6EvSW�
u�0�����cP����-����}�y0����<w4�nu&y��,�|�]p&�\�?w,�o��RS�+�/A��ڢ���w�x!�W�|�*���?��`Ye�n���F������~��B,�v:�c"ogO�k�N����,�;��8-���5Lh݈\��x)�1�r�_g�Үy_@@3�u�
��
aJvȜU���^
�Ty~��6�(M�bWM�}���=]
�+� N��Ŏ
U�ImC�Ûf�H
F�k��:�n
��M����n���l�Wl�p'k�=�#SsĊ�	��豈�|]�@�e+�g����m!��4L7A�U��
�X�
+�򧟒�
zoB��5+��������*w���ݠ�ȍ��ޑ[np�y��oz�feK2	��:���!٪�mk�\q�a�QZ��a����,���(*��l#
�uC�u�;�0zF
&�H#���BT�0�YF��nإ�w��4T7�G<��OW�Qv7�_;4Px��N��L^��ێ���zncv����ȥH1o���_���
������
a�a��<�+
��.�*ʢs�M�>c�����^�lcƙ��{���weyt��Ц���܌v
��훺�Nq��Z�]�S?V�E`��8we1ܥ�����>
W@�Jz�'�*o�
�9���uC�a�f��
+b/���
�R��%����!����Z�J�U�T�� $��y�jj��uN�
+
��W�ă�����N�0��ӛJUJ�n�jm"��Qr&��[���n�5��Ccv���N�a1�wWN�P�h?x�b5g0D0�J��&g�更�h���K}���紗�{GF
k����!O��cZ���0�����V�_����$˘�:��������mK?�MO�����4~
M�v�G3�е����^��$T�?���vf�e�4é�@�0���x������p�w�
$4  ��/x˘>]ZTLE&3��p�0+9D�I<��C��Ǽ��f����؞����ɲ�dQv۠=k[���
$��N�zf��\���(R���疉���
�j�?�����CـI���� �b�5�5�šx�@�
��������Z8�])��e�O���X�c�8r��pH��nv��h���;b�.��j�D��-r������b~�`��1ߒ���DAT�[#���F�8���)
:I	ȥ�9�GV���Br�ģ�GA�y[�T�;~h'�

)��|�+]�K�uN%FRS������aކv�
��M{��鄪�Q5GIo_3n��d���P�s�o�&�	�3��=0cEp,oo3h�j�o��A<%N��r�6��x�����|Ϲ2���b+)�ͮ��X��,/���� �<#�$3��	?2�
��ǵt�U\��4IY{C��3�f�Y����Ǐ�>��|~~����M���\�a��{k�@#�92���n`o8ׂF�s�
6R��[rJ4gp�v96�H�}��*WCێy�q�728Y�+DC-�#=��T�Q�4^�3'�3��U���0�.[
>��kn\�ͱ1�vf�u)C
`��T� M.1��VPv&C
���m&x�*��u�W�i(�*b�s(�ٹ­��9��oT�
+n�j�
�ଉ�
�8�#l��8�Tu'��o����1��d(�cn�G��r3r)LA4m��w3-`�$�1��8�
FK�c-��}Pw�E::��d�Y��3j�,WyZ�C��Z���N�Gj��<RKr��
)���5,�G!��^
�c]�8c�ѿD�(8�Fe��8d��i��x���h~3
�^3%�EW��YV����iaw2�k�� �Q��k�ئ6.+�sR`�B�r=��>
�l4<�ق �T=E�P�}����n��EP��v&
+=nCY2 �?��t�� m͞��R��¨NϢ:��������*5BwD�n�z�����v9$,߮,�M��،#�� P����*�����
���1�2X��Ѓ>
<�Xs���	��{�AO }�A_ς>�}�3�׍�kL��N�@�i)�ִ��4t�o�Aˋo�=�D�y�Ǽ�;�F
P�����/����kz(6|���
Yƞl�#/��+ �T+�����k“���x(�����R��'�y%�K��+����Gį8���2c���eAi/�3z�Q�$�0�����%q
)��2/��
+�����@��z[�_�,B9~�)h'�� m��c��<�}~!�
�.��Xp����\*�@1&
�/��z+�n��`r�Ǐ1Yß���ζ�����S����"�
+��Ra����쪵�u�!�BT�
+��g^��i�I~�i�ߡ��^�Gz	
���C)��$��a
DRd/R
X�!i�(�h�w�^7ۙC¼�w�q����ž�S�ߢ�v&�
+Ė$�Q��#S�N9�
8r�3pI'�g0���hG#�si)���a����D�G=�:��t��GϠ�
C�W
B'�֩�;�zFfD�����.wvSI,����Z�Q�����q�	
+v
1�)�gqS��*O��Ag��"
o�iE�:�l�4"gC��m���clu�mp�W����v���$�_t�K-��,4��5�MB
4�
�<M�k+�qx�%�(ܾX��
"���H�fx���e��Z��%t
+�FC�v�L�"T:zs�'
�h�a?�
�f�Yz�ٽ��f�
�2K�84�(5V�8�<q!��]H��Q+
�ωq��8zZ
:
s�����s���N�uj��r:�>о�Z��0�^��(���]��Ux��p:��9����������k��9!�/LT��n/^B^ ѹk9�#�o�f�v��(V���X�^���|�yK�N�2��.�wA�� 8D?����
�U#�L�<rAh��=zA�X=�@�
�����j|�����M��ڌ>nZPn݋_O� �{�q��s��-(�p#M�I'"I��8#�?�����
K>'4�z{ʏ|���L@��I���}�*��8�@`^:���+�Xz�
XwsN���Ϧ���
�x�,��pG��<I�>�o��u).�
�0n�f�b�%�V�v�ē9# F�>�3c�L 9��M�t��dӑ��lp�3�8k^Z���O �`�ƃ�UW*@���'��!0.t�ޘu�M7~1}�
|ēJS�Kd�\��I�WcE����+
+D���
'r�
�\!�)
�2Сa�4<�
�f
G�G'�-�������L
+endstream
+endobj
+1546 0 obj <<
+/Type /Page
+/Contents 1547 0 R
+/Resources 1545 0 R
+/MediaBox [0 0 612 792]
+/Parent 1533 0 R
+/Annots [ 1527 0 R 1528 0 R 1534 0 R 1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R ]
+>> endobj
+1527 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [416.68 671.562 423.654 679.975]
+/Subtype /Link
+/A << /S /GoTo /D (cite.KLU_site) >>
+>> endobj
+1528 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [427.056 671.562 434.03 679.975]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DaPa:10) >>
+>> endobj
+1534 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.616 465.467 204.081 477.422]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1535 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [346.248 441.434 360.97 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+1536 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.066 441.434 379.789 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1537 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.489 441.434 415.211 453.389]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+1538 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [88.171 384.815 95.145 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.SuperLUMT_site) >>
+>> endobj
+1539 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [99.874 384.815 111.83 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.Li:05) >>
+>> endobj
+1540 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [116.559 384.815 123.533 393.228]
+/Subtype /Link
+/A << /S /GoTo /D (cite.DGL:99) >>
+>> endobj
+1541 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [322.99 334.381 332.455 346.336]
+/Subtype /Link
+/A << /S /GoTo /D (appendix.A) >>
+>> endobj
+1542 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.012 310.349 471.734 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+1543 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.069 310.349 490.791 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+1544 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [511.874 310.349 526.596 322.304]
+/Subtype /Link
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+1548 0 obj <<
+/D [1546 0 R /XYZ 86.4 726.045 null]
+>> endobj
+306 0 obj <<
+/D [1546 0 R /XYZ 86.4 701.138 null]
+>> endobj
+310 0 obj <<
+/D [1546 0 R /XYZ 86.4 427.963 null]
+>> endobj
+314 0 obj <<
+/D [1546 0 R /XYZ 86.4 283.85 null]
+>> endobj
+318 0 obj <<
+/D [1546 0 R /XYZ 86.4 187.989 null]
+>> endobj
+1545 0 obj <<
+/Font << /F36 408 0 R /F38 453 0 R /F16 397 0 R /F8 409 0 R /F48 539 0 R /F49 566 0 R /F14 627 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1551 0 obj <<
+/Length 3235      
+/Filter /FlateDecode
+>>
+stream
+x��[Ks���W�*�ʄo��
���Ֆ-ۢ��U�=�ȡ4�!)ϐ��_�n`�$��H'�X�!��}/�]��r{�򂫞%V1ջ���"���%�����g�>r���	>����ջ�7[�_֟���x5JJ����7/�ף���z�?���e�e<�T�nݲO�oC87�Sj��vv~{���Q�V�Ib��gg��&��o��pkz_ݺYOpK<e��٧��ͪ0-V)��G��,%T+�m��O�8+6�����[ε�E'������RKe����Ǥ x�ˋ�j���Ȑ[��/��Hdl�`;L0X�N��0&�
���C�8��e��g��򩒧`�3��w/���޳P��
*Z?
2ʓ
"8����k?j�j��|���9�N���d��?1���d◤�R^�m at QD�U���@�����y@�Lj��/�|��-�.�Jke����
��2�C�"+���#�9�I�v�l����YN��
�9���w�
��$���SbBj"�8�Ip
z
+-p)��kZ�?%��"��!S�D�t�H[����;���������¿XL��/1���<y�K�H�"����`�pj���+�;p�����?$�$��K�t!/A�
"EX�S�h(=J��Ñ�m��n���� ���8/E�'_V �I)�R��"iD趢�L?䂂K�5FG
+�'L���QS�Hُ��Xv����P�h	���$���N)�aֵ���4+�]�r� ��<wd������Q � ��E��MqQce"d
:2�W�N*��l�6���O��€��PO�)
��=I������
2	
�չ	��P��
������`U,�
+�dp(�$U$s�~�*�D���o�d�"m������۫׀7S���mO4.}TN��hi�V�2���>���<�yD4�w�s���9�������Շk/ �%NAӪ��z��4ov9�V�
+7���˝r:��ZN�s����)�Ku9�VTjO�����o�߆���nNq2�����
����*�{6>ň�xİgeD���	�k��}2O�t�? ��_OW�
�����OL��I�
[E�4�ϣ�P	+�)e��`����7WoK���)���=����_[ִ֨ƴĻi��!��"�l�4QamО�����
+���`	T��)�E�|�$��\�
+³�����6�d��0@\����Zxn>	�E�P[㎻�"K�yx;aj��(��=-+jC
(�
�1@퀲m�ܼ�p=��_�C`�����5o��� ��
�T�\�z(�@G[F `�*�fOCe6�ة������'��W���o������D�B0|u�̆�R�m^�q���F8��]3��G�nڸj�A�(���\���h�
��w�
�`9��@\��Vŗ|�c{�
�I���H5�8��$�*�<fQ}hY խ^�k��	���CIb!�
���8(��&�2������
^���P��xv�W�����*��jx�j��`�7
j��t�ݵO&����}^o��2(�
�
��
�V!fp��N�Y���oQ3��8U\��	��
k�n�� su�yq^+��7w&@���Kw!�e>�*S��xӄ��V
NJ�$%�*V{@@cBkb$;�ʄ�b�T�v���/&����`T䊈���^�ځ�X
�DUy��� >��h5
��ks�`B�@��P�{�'!�*ȷ|���8Β�$9�|�,M�)g@h�]��f�$���
+t&NB7�*6ܥ�m� \��c�6ԕ�� �?L�%�
D��O�
E���p PP��u³�����5��q�!�rnBt���:���,`C
!�:��Cܻ���|����
���26a��1
׭��h�¸�:��T�E"����dM�F��m׊��p>di�G����w.���Ӡ1�f
���������2������b�#
�:Z��ȶk��F�h'�h�mW
+��1RC���x�i�

�TΊ$�|��sN!b���y��㋪�	�00���֨%K��8��7���̈́�n���8��%�@hW.
�0,)��x ��N��S���� e��ݶ^Q
�'��@��@�K��.Kj�R/�^-8_��sFN����!0S����
���
!M�c��q�+ �B�qm5�/+��Y:Kf�J��EhBO���Bw�-��d���nIp
X�k��.B��P,�UG ^��
�Y#���6w��]��#���l2�]�m_�h�&�`�!�����{8�*g��t�=z����qz�ȓPۺ�j��R�o���FZ]0)e0I��{D�:�����N�����X=��z�/���yu���$���ٿ�d
�� ��q�
�j#d��aj�
���qӁZ�lQ"�Ϗ���t�&���A�	��
bݬTc�HVT�w�dz!�4��
�}���Jk�m��*Ov��L
��dqQ�P�Y\��[X
�&Κa��#g}��
;�Gp��f
+�k_�QF�
������f��:��:��� �EyC��}=��o�y0΅8�G�:�*�&?�W���)���ŗĜ�VD���P��j�W2/J���u�C叩��n<"e��g1�r�1��:/a�d����t)����ݵ^�wGG�Ҏ0rm,؅�p�hP��t�X?�Q-�
�Y
�/�K��<V�w����� �9d�d(��z�p����,��-p'%�k�S������
\�;zHN�����Lp
d)
db���n�y����l5A�4�:�i+�=fɰ,�$%"�k#��~Q_�.���R�_`�p�_��H�W�.��[�~k>��N#����10��S��t�e�i�,\����8}�`]�	YU�J4�~�!�Cq��(�

�q��{�4RD�C�=����E{�H�q�h�6�|��&e0�U6�Y�Q�� [� xvU,��Ld��fĀB�A�)Dx�׵ <�K(����LY��ࡈg�S\�VۉD��o{	!8
Ї�"E�n�,��@�;]��.��Ae0
+�'���N[G]�@(L�VZَ���
+o+�.-��c��nո��#�����w3�
r�c;���^���NQix������"����/PI3��R�jw��������Lw�=:��S���2��(������7;0|�m��_5��{0L�*��{�Y��0�f�ɺ0�9�A:�U!Z�n%F�
+endstream
+endobj
+1550 0 obj <<
+/Type /Page
+/Contents 1551 0 R
+/Resources 1549 0 R
+/MediaBox [0 0 612 792]
+/Parent 1533 0 R
+>> endobj
+1552 0 obj <<
+/D [1550 0 R /XYZ 86.4 726.045 null]
+>> endobj
+322 0 obj <<
+/D [1550 0 R /XYZ 86.4 214.187 null]
+>> endobj
+1549 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F14 627 0 R /F49 566 0 R /F16 397 0 R /F11 628 0 R /F38 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1555 0 obj <<
+/Length 1563      
+/Filter /FlateDecode
+>>
+stream
+x��WK��F��+t���xz��T�Mv+.;g���A�إ"`��
����H �xH��Ѩ�Տ�����cD���͠��������(""�,Q
��8��I�<����2͓>7<�Pdn!��y�.���"��pg���b��+/���}(�ph:�|��?^�}H>��~�� -�ԖHb��F����4�7%ܚ蛗�E�[�p�G��=���D �J�֮)
�
+��	G��x����2~����>,g
|B<^噳��iD�F}@6�rǽ4��(a(A�L�<
=�*�@���s:J���I����셳�
+�q���'
+"ϊ�M4�M4]�+V��4͋��2eU:R�k�s�:�>��_2�.P�Ui���i�a!�e��0��;� ��dǽ����^pC����Ũ�
@d���u�F�j�!I���x:{γY6�;-Q�sEP����i9]8y��b➢�6n�4��a�y��'
�d|3���?��0�̲�	��0��/�����2HOVy
�Y�N���te�t�>�
+�_81��r5r�Da�m[_dN���d.*�vdVXt^
�,hC 3�� �e
�$�`��㳕Y�
wk�
��1�r�/�,���\�窨$��F����N��k�Y�bם��k
��zZY>	�t��wq�.�v���2}�1��LHk6f>Ζ
frbh���3A!
�ʪ�$J�vL�M˧�0F�=�!�"Q����2�H��Æ�ڰ�D%}z1��@)B��wci<��*,��0d��
���=]�AlB�i�� &��R��V��!@�]M5
��,�|���͡n�8�mc1Y�Cc	��n�`K��Hc�J�y�
�)�ǻQ�����|�k
��E�d�a�r��K뇘׀կ�N���W��
�M�R
��Xd_��-b'�khTψ !�Y6[,��A^v�R��
+����i
�F2��:0�
��ɋ���H
�d;�"_�"  �s
+����w5�$��}��CP"U��pW&�6�W]׃�7�]\rJ��?��?��r~i"�YG
��ờ��2�Y}M���{Up:@�\DΨ	�Ծ�$�
���x_�vC��.��%H�߿��t�o�|���j��r�0�����v?�gZ��
T�)~��#�����KQ��{!�6�"���q��
n����$Sx��p������g� )y
7��xe�n���A��L�lߥ)����~M�%�Q��Pě�K{���Ծ�3
u!�Q3~��f�NA�*<�����?���}�ߝ�0~�Y��;���;�������hu
��T�
�ߏ�Vzהwe'凊�>
�#/�7�*��b���Rc�`�_�
����4t��{X��?��7��v$�Ֆ'�P0�G�Pn*y?����?g��Q���+"��_��'��w�@ma� ?F&� ����"3s9a�-���H��誖���Wv�-�+�V.�\
G�8��M���
��{�8�
�-�ÿ#z�#T��m�h��q�y�]�_�.�Ϻ
 ƟN�
�
��o��9~9<�������w8�DH˵����?�F
�
+endstream
+endobj
+1554 0 obj <<
+/Type /Page
+/Contents 1555 0 R
+/Resources 1553 0 R
+/MediaBox [0 0 612 792]
+/Parent 1533 0 R
+>> endobj
+1556 0 obj <<
+/D [1554 0 R /XYZ 86.4 726.045 null]
+>> endobj
+326 0 obj <<
+/D [1554 0 R /XYZ 86.4 701.138 null]
+>> endobj
+330 0 obj <<
+/D [1554 0 R /XYZ 86.4 529.11 null]
+>> endobj
+1553 0 obj <<
+/Font << /F36 408 0 R /F38 453 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F14 627 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1559 0 obj <<
+/Length 2803      
+/Filter /FlateDecode
+>>
+stream
+xڭZQoܸ~��X(��4)R$u���������z}�we[�V�J��ί�
���]��
� ���3Ùo>R��_�����O7W׿H�J9�:�V7w+��Zi3��٭��|8
�)���UO�2Y�a���Л�k��W�3+$����_����gz�5H(����Zˤ�/i�c�E]C�6(Ť �Z�[׺շ��ؕ��]�,ש��f�Yy ��ɓ*��z�;z�:5�3�:�%8g��A�������U�e6L;�Y�����r��~����(w�sK��JV�=�

�%�L�84�O��X
^�"(˓LJ�.�;go���d�j#���^E��
i�g�����-4P��E��a��u��u��xd덒��鋽k��	n+����&pT�%>>��^G/�
u6�p�ʎ�j�؁�} ������1ؤL������P��N����U�	;B#}[E�e��H�,m��
��`{3�]�6@�D&��Q�/��L��u43ڜā�spE��Hl;쪯��X���
3u�yW��W��ٍ���-� �ʾ�y ������C��]���>��b}� ���l(:v���.��i��*zB��
"��.�TƓ��
��9���&��7�8x�:1�߿k��7(�7J�Ք��W��s�ӌq3N�<�g��E�ay����A�hȒ �3
@�L�%f�� w2��lFw����F����ۯF�Ur��\���g���-�|�!Kҷ����e�`�^.��,j�b�]q.CdL��b���{�p�i��FZ�c��D�Ĉ=_ ���m�����-Ůf2-t��`֌�q�l0�DT�(���I@
��8�
���֕
+�`�?n .�)�����
UTJ&�%�=c�N�ź��hר�	G�������0�<�Y��P���j��M���pE��?6r�ߠ��X�35wL�t�qW�hW؎ݶ��S�-*��+\�(VCu��bG����Eq�� ��@���M�J
5���Q���
���D� �/U�����ہ��&jS���
v�
��
��+�C�=/a7P��?��o%�/W)h���o
�r)��
��Ź �V� �2����I1�*���I#t���`
�y��_B��]�/���6�3��#
%���
����#*�;\�E9Q���\,�y�U��h
+�J����^�

+��p�C�[�#&��C��]�H#��� ������:�	���,{��jFY��<�!j��;����XGG��rl�G�"pr&�t!"V
�0%䏌�:�����)��#ҼdS�Ϗb`��Faԭ�
�ϐ;v��,��i���i�e����+Y��(lە��RT� �n�O :~������,��H�ؕx�p�
�[ �
�7q���p#38��SF��^ۣM
+/  �8L�o�U�{}��c�|�����w(��Rţ�:��g_a։c"`~|��w/a�Mc�j��
Ѹ�
��RXa�Ċ7���z�l=�q��֎���[
Y9��t���r{��ڌ��@�
���/m��h�4��+�*�{��y�B_�8�
�σ�Cj��c���d�Pm��ymV�L�Q	eԤ���Q��c����F�WKw���h�N���xs]5�����a2=pش�
�&9���h�>�J���8�ϕ��ږ]��Xͯa�K��7
K^��D�
�{�dL��U�½
�C��
vC�����B}��%{�*nR
[h伐|O]�e

�N`��R_t{"�Z1���mѻ�T���+��k(θu����b
@7
�[8R�~�+��4��e�ǵcH�ދ���hķ��sЍWa����dF�c�?���|
�m�9��_G¡n,�x%w~�V3�ПsHIq���@��s�\a<^N���@*!�E�S8N
���[�`֭��k�+�@�uت���m� S׵]��@V��\�9�WH'˘2��?�T����Y�;
@o@���
�/��Е�E�ܥ$Q�����z[��4�q��׼s�U��	fʲ�*Q��А����),}
�Dۃ��z�R"��Խy��ch�q�EN�B�
d�����8�B�[����@x���a"
����~�
�6�^�]�
+��I3ڰ��\��|%VYf��P������W�Y7��3��
�������_�/le��!��H���4?�p8	SXM�.������H�Iv�]q����ΖR��W3���'LYtF�:TjsF�PjKC^�>�M���I+����A9g$�V�1K�<)?��.Ïq�-q
+�1^��i�<���L8r�k�P�g(H��*�7����o�@c������Y6I)����|�B2�H��L�cV��ŷǚ��Z+���r
+��Q|��w#
��(ʧ
6�r�$4E��B��)��w曎C�P
h,�� �zL�w��	S�y63��Q�e$�"��QN?�E�(��[2>:_`��7���ڞi
��?�ij�>�%�$�BU�������v{
GW��Ǵ��
�����A:����);��v�J��!�x|hA��S#����ڶ
K_B��q�$P�
�.]�]�،�^��<8�O��>��䃟�	f7��
�ܙ��ܧ&�/�#81
��O��թ5s��
d������8;/��wH�  ��
Mqz��3ZAF��.
"���R�.⨻�vw�^2������|s�� Sφ��Zn����]�
M'��0-�R
+�=_ݷ���u
{zg�}tq��C����*_�:�ϱ��:�����?U��
����⽖p7�^u��ΟR��䩅�IB�ɯ-�?Fa忊Ï�

���E2���@/��L�(
+endstream
+endobj
+1558 0 obj <<
+/Type /Page
+/Contents 1559 0 R
+/Resources 1557 0 R
+/MediaBox [0 0 612 792]
+/Parent 1533 0 R
+>> endobj
+1560 0 obj <<
+/D [1558 0 R /XYZ 86.4 726.045 null]
+>> endobj
+334 0 obj <<
+/D [1558 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1557 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F49 566 0 R /F14 627 0 R /F59 1561 0 R /F36 408 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1564 0 obj <<
+/Length 3393      
+/Filter /FlateDecode
+>>
+stream
+xڭZ[o��~��
+
�,��.oysڸH�&9�{R��-�l
S��K
���3�%���$@�������7�U��[��^ޜ]\�d��y%���"K|�H��OT���,���(Z��@��w���^_��^�T���Ky�rzkl=,�w�_�]_TUїM�=�{�6Ј���
�Y�u��٫����B�$X�����t�X����+Xl`�E�<[<Ҽ�B�܏�U-���}��d#a�*HI
�a�0/�~�6�ze��r�C�U�`
8��f��c�����)͞���f�}�CYm��n�
+�\\��(�P�Q�����PoJ8�g����σ��3��ݾ2
�X�����9�R�Q�U^��o��Ɲ�(	@>+`?��m�o��T��?�8��;�_�^	�(��u�w��-���3�1tf��E�=�tE]�(�'�fy�y�ۦ�1�"6����'
���U�_Uy�mi:�
I3쵂H�#�5�����
��`�+Z�/�}�)4�k�x�c��Ԧ�z
+�͖ǻ��%@�H�,����me6���^S{�����'��
��s֭)z�?�
zY\�s�����׿ӥr�13�k�6�	ޫJ�^_�u��԰�*��H���N"
+`�.vD"�31�ҫ%Xt��-�	��^�
+L��qc7�P����t��MG�I��f4h�+-ЌG<�*XiP�y�w`VY��
����.7�w�kڶieۢ������Ό���-�x��A��4h��� NS}��m��W�T�gV��
@e��ߑŃ���H�v@���У=G�
�)d f���V%�b�6
�g�<� ��tKOK����!N҉
+ޛA拁H�ou���-�l���s�O��<�)^�Z蝳� TI�
�}q��~��|D�1U���)���i���)��=��r�IWI]���ߋ��	,{�5�{F�pɶmv�`?�X00;RS�һ�"�&*p3�j�d�yf�ٔ8H��\��z����y�K�|�8���^���]"��ꞇ
�OS�2�/G/����2�m4�[|q=\��/?ZUP��(+j��S�Ta��t�J�?�P�5
�
i>�洯���UŽ���,]a6;
{r ����eP�\y�'s�v�u�Y�h?�����I�IE���{��
zV�z��Y,2+��A�} 7���f�/+���޻Z
y
+���
�����j�a+�x�
U�ľ��F�� *oM��e�N
�`�d�8�F�4�%R��&c��
��$�W6z]��l��"��B�I-�����0�
�����A�C'%�N�q8�y�(��h�6=n�O��B��~��!J�@�j�^��%����4Dk�� 4�� P=�$RDw�����<l3䡒�}�[&ޮ Ξx��$�0�|
��xpSv}[�h��y�� h)��f�'`��	Rk:�ߝ�&��z]

�f�l�'��� �INzily��
+��,%�l��<rc�ro
Q��Z
�N��D�#~%6���>�9VH@�kq�@"x�s�Q��bF3�G
��
EO.���Bz$�M<�D���v�e
��e�n�X� �
��F�}�qq������M{w�za��$H�"�_@ȩ���d��IB�kQ-fEC���1��[��
�l�ʧ,�
pb�]D�8�d��W��o3 Fm�L�4lFщ;��+I��� Eׄ�z�A�Iʉ���$|O'ù���`�+�K�PB7I�nL ��D֜�ULG�o��sql�x�
6&
+鶕��$��d�vB6�v"���dg��,5(Gsm�aLw
A���/�^~��/Q�t�`>��БJ�ث��n���T�
:�u�\!�R_�`FVKP��
��M��}�믈<B?�s�f�,m<����� ��^K��J��"(��A�@�(IѴ
+(����
����2��{p�MK�
+�B��2�J&���k�v��M)(68Sh��m@��ޛ��i�Ӿ*�%"�ky�K �/o�ަ-�#�ǟ���<��}UY$V��>';��m��%
bt�v-�uX�Q�N�\l��c/������)���j蛾�,�2�,>@!P�D�/wË(�"Tml(7����)?�,�PbC��>{]��D6�"ʏ�?E�Tg�ȟ	e�
��gZ�-�6%S��$;L�~:x�oq��0�l��I
�郈���]� ��_5SQ�&E��đ���M�
-�@@�F\�X�]�͙e�NG[i�L��^�}�=p����������y�nN�G>X^`��Lʖ2H-����T��f�ݕ��-��f�L?���j�e��GhIS
�T��
�=��`�~��35�B��?�!�ttfNJJ���1�\:O�8L��n�#�J�cy��P�R�q*<���Se�(������L�����3���s���ʧƂ�@
���bBQ�
+G��Ta�N�
��f[
 |������QS$�0��`ga���
����)1W��(gL�uIC.������SO�OlyTar�!��B���B��T6й��W�1S� ��$��K�|�� ��JNNd�>���O�1ɿ���j�Eu"��$g�������W*�3;j �o��2�;
=�:�1��@����/�?�:~_	C�`�Q
��y�&�l|b���y>
&̦��*�
������7'�����?rp�@���~��+�,��
i���KH�A�0��9j�
�\:i�����
+��ݯ�Dn~�|;�}� ����4�6�ƙ�޲�'����⃂����Fи��[
��8�-ƾ��G;u��G��ӑ�I	���z�gr��8LC�&
{K��S�$��`�ү+I)\�N0}Qp=�����a̲��1����@j�������%�^M/uA4E6i!�(z�{�����-�-�H�N��!�	c�B/�G���`R_�߄�*��,)Y�'E���e���Î����b�2���L��#6*[�;U��`�S
�|��G%�B:�5����}[�sD"!���
����L�z
?��y1{J��@0(��4�נq��{@�CM�I|�ޔ,�x���C��u/���|��w���Uyn䔊8�ɔ���F�Ѕ6��FIź��U͊�j��
�ɨ鹸q�,xJ9�^��G��=
۷��O}������u�!3���h��?1���A^+�ro��t��f~�M�t,�
|���@���|
�)����ǀ�-e�j�1f
g�N�
�C =,ί��ՠ��-!���s�bj���齡wky6��'=��ydG����G/�g�ihݭd�h�ET��&f�v
�{M�{��0 k1��$���4���⒤�a�u�
�{{���J�N�
�T�o��*s�}P��8Z	�+
�4����w
�.M������0��G��e�-��4{���W����j��
+endstream
+endobj
+1563 0 obj <<
+/Type /Page
+/Contents 1564 0 R
+/Resources 1562 0 R
+/MediaBox [0 0 612 792]
+/Parent 1533 0 R
+>> endobj
+1565 0 obj <<
+/D [1563 0 R /XYZ 86.4 726.045 null]
+>> endobj
+338 0 obj <<
+/D [1563 0 R /XYZ 86.4 616.479 null]
+>> endobj
+342 0 obj <<
+/D [1563 0 R /XYZ 86.4 346.598 null]
+>> endobj
+1566 0 obj <<
+/D [1563 0 R /XYZ 86.4 161.836 null]
+>> endobj
+1562 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F14 627 0 R /F38 453 0 R /F48 539 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1573 0 obj <<
+/Length 1660      
+/Filter /FlateDecode
+>>
+stream
+xڭX[o�H~���e,œ��T���6��Vm�*�} @
�������L���K2����7��*���������@!%�
��A,"��d$Xf�������,|�>��3拫��3=�âl�d�Nڢ*�
q�BB������l9�gF@��X��� �̾~�A+o����{�op���:��}�a�(~TaB)�RD"iu�����N����"���x>êla,��	_�v���@�ì����Y�mU�/��
ۍ�M�����J���{�\�a��w�<b~���a�`ŦIi�T��i���k���Wm��y��
@vb$� ;��܊k�0��W�s~g�HZ�H��m���"����
	_ۼq
�Ӽ���ĭdyS����E�,��2��֝��l|�q��Xy�:�Z��߰�a���;����#!��p9�,�Q�
��瑽�6y� �
+mJ�R�$�
e���6��F�!�e��Q4E�K]�n��
�z|?��
=
��j��6.M��8p�$d҄i;
|�U���J��?��L�f�� \�$�S�}�(��"5��k�PR�Z�5�ڗ�d#;sW�M3U�F��b�d�Z2�?���8-
����|�›�R�JdđP�K/��
�
ҎA�
+ �����J�W�b�١UY~�l׭�H�R��նv�KOn��\�N����؎��j�G�g�����@8��
+YQ���$R�ۗ�R���2L�Mb��o6�! �4,�~�����[�GUQ���{pZupE�!��s�N��T�rD���~1��]�|��"�;	�*Ĉ+!���
+kgn��4u:)u!����
K};ך��]
�{更��Qin*S���^�i�S5{�W��|~3
�����M}�`�π�PϨ&?��0�"z�?6�J0�!��'�8x]%��ݺ0�.z�z��
QI�ʒ3
B�h^ 𒄯w�A�r�:��|!�
+?TmnN��,�"Y�7�[
�0�o�Z�b =�����:����#�'Y�ڃN/��09���\����q
�Gz ��+��vҴ�4́`���l0���~�9�]����>_�7v�4��Esk;���#Iz��l=8Z
�
���ɢ��ʓ
�I�0�p��:0R��۬ ����/��k��O�,��:�mI A�S0 0'H���q֕�f[f&���
Lؕy[��?�xU����ט
��M~w�0f������I�re��Y5�h�@J[w�|�KAKgH`6t˫����qa�Q�x%���Y�=sL��#�P�"�
+^L$�b/>\.O߽�
n"z�B"��P���g�_&��
��ц���s�����wg�����*�
��`aO��a�, B�B�����?'�)�;
e2})��K�,�L
�:��LP&���������6
��?F���#�<��"r�A�[�
�Tă
=ױo��Ne��f�j��IT`W�K��i᷻��aPo�]p� ��D��X�B��m3
TK
+ϵ�
��2#�:f�_���i�� MbM�s
�LLq�uO�1�N5�$�fG�޵�^?��v�cAiٌ�����ș&�Q<I�
5�/و�+gH�z/����P�%yBK��]O�4���	�C�1r;�s��7��C.H�B�(�]7b;ߦ����@*�e�Ҍz��]��	Lƶ
+endstream
+endobj
+1572 0 obj <<
+/Type /Page
+/Contents 1573 0 R
+/Resources 1571 0 R
+/MediaBox [0 0 612 792]
+/Parent 1575 0 R
+/Annots [ 1567 0 R 1569 0 R ]
+>> endobj
+1568 0 obj <<
+/Type /XObject
+/Subtype /Image
+/Width 953
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Length 104438
+/Filter /FlateDecode
+/DecodeParms << /Colors 3 /Columns 953 /BitsPerComponent 8 /Predictor 10 >>
+>>
+stream
+x^�]	�N������x����*�4P����h�ޣx��JD�"%/!
��兄\2OdHiz�
��{����>��g>�
��:�����k��>���:k��X���
L?�/�؁�#{
m_��ǖ�l�7;d8������lq�:y����b��Zp�������=�g"bOru1n��FJ�Q��:����9�r
���
�sh�d�{�{�w��)ț�D�ڻ܉����I,^!1�TB��Eo{9�=	
J�0�L�"�z?ڭ�_=���KGm>�W�
��L6��%&Ӣ�m�ŏ���Ʈ�߅l̡���f>��1\�D7�
J��
�@XH�%��e�Ed�@6e ��d�
��5BƳ�]�A2�^?���\%/��ԫ�$y�����^:nP��t�*�]!;;�v��h�9!<6�����^�~����ۤ�3�uO�d�ܬ}��v1l�Nw�l�9�Y�s7��t��P�X������e�����W
~�l�9�z�z%fET��L��_~m�ч�
O��,�d��be�o�qd_�ڷ}�u��Vm����?����ODϳ$���a
 L�²���w�Jw]�
T�zg ��fl)�l���̒f	QOjmQBE�����_����
�A��_餃U4]�$ʉ�dg�X���:���!!S��&�<���"�1QJ��u:d�R����+z����I��t�P)\)v}{�0씲�)�H7 R|XT�

+\}�ن5`�
����$e�Q-�>&���$.Z
4�bwjyzcC�}
Qɩ��j�[0���v�~����U�N���,���d/i
c9f$44�c��-1�W��
���Ϯ{�Q92>~��L���ru
+���
�^w�8
+�qƽ%;�~[��:��M�γ��S�ݪ��^j���i3�:G�W����#�+#�3b�]T61.�w�ĦqpKtm��>������]Q]
II��N
W��
=�񰰎�����[���	��9�K�~�-"���b��*�8�~zd$��ROU��U;�X-�D�D-�%�i��C���}Z�M���5U(��%�za@��W��zϽ3����C�T�o���\�;��
T.W�7�x�������A��2ϭ�����eK.
��u�9�ݷ8Z�¿�*�Q��+��
+�|��Q�h{ҥ
l�6���pb[
��	%��=h�S�'��d�O��;m��
40��JVN��E�g�(�j|���~�e_�(�3Ӊ4T�^��L��$��3g�	�
%&N*RH��
a۹)T�H��"Iƚh�,���zU7)���*YHԂX{�P���d��IX��=�~�*��!D���\Dʤ�(S�P��XI��)%ȝE
+��l%�hQ }T����
�pa�*XE�EuU@�C�-A
��ta�@R1!VvSn@�b�(������"�C1l/�&D��QX�šB���^D4*����F����tr��ZH[��^ԠQ\?l�6iP�
��3A������m�^`]7F-"�=���5D
U���%
�<
��i
���}�:4t]I�J�j���'8���[[��
(�4�oij���!�@������>�{����T��P�餪��
�nH���>��O�;�M�
F>�DZ���[� ��
���t�N
ζ^}���l+>S�� �C��_�dZ�H �~�sg�u�ꉇ�B�>��\˵���F�O-a��'�"�c�����6}�r_���������g�h8��"]

�q� ;���'��Z#�Y��+~�c��ey*FF�H=i�U�qB�P���Q��'M@��#
OXa��b�e��DܤՃM��
?B2
He���#)=�(!�
++ɲ-�
+[}�6)��)
Ùii�i��
^o;�4�`���H�c]U��/�M���-�p�@Y��v
����S�'
�Ɵ��L8��~<5!-5=-5#
i�ii��z�u�
+�"�h9�)$��5#U��v�zzډ4I������k7�r�a�NI�cwR��_�z����Wo��yqK&���� ��z
&&r��X�P6���d� vE�*��
6&Ȗ�Z�R�6�)��P��dQ�N	z��yAe�}/'"��(!ɒDJvHk�d�L���#�wJ�(u�
$�,\�U�
U�x'�MA�
%Փ�K�*��*H'�(#����Y�\�P��"R� ���%��d�����œ
	N."����� 6J`gQQR���mA���(*��/
+��*��b�X�pɡ�D7���
+p�
�˒X�k��[�2���F^F�
+�,Y.�.�np�qh]j�j�a�+oXNV)o&A���XE-A���}aO��F\G��
G�L٬���~�u"`P0�d� My�������3�|�"�nE��!*�Y���E�U
�IPD��
�4�ku�9�~���dzz����D�0"��lN <��/�A�'����a�6Y�%�k&J�W긤���zD�(�6�-�I������8�?����6|�:KĘ�줾��F������n�]6I��|L������/�s��;Ě�Y��t���|f���"����"������1��� }F��}H3fk��ނ�ʖ聨>�J}�)JRǩw�1��j�|N���^,�����CR���˲���c���a���[�u{�*���2��5#55
��Ԍ�i'���8
+"+���
ɧQ����zBk}Hn��"$ȿ�)$K��"��uP��4=�l�����J/�q�Ĥ���[��[���H�}�Е�da	��2H�zP�
&ip�v
+�$_1,ӂ[=
Qi�p.6�ip,ګ�>�3�Ƈ
$��B{\o`�qSk�Z#M�7�P�k)�]��k���L��]�b�75�|�Zr��u-��
<��TE�B{h�yU�~�*B����7l�{Ყ5�D:�y�m�".�Aq���,����z���T�)i$��S���k[B=�b����Ǩ����2Ac�Y;��6U���1�T���6�]�4D���z�~��U��I�cwS��j�Yw[�.>>���|&X��N���F2m���x�ې��c���OQ
�(� �����
om<�9wJO{��N�uz��̣@l
�_gܫ�x�$G�Q̫�>���ag�}��%�;�+ �L��`�V�n�B���ٮG'cNB�I�z
�W��=��X<LU�2ҧB�f��t��O*`{�$��!��^��=�W����?�5'���̓v*�c�Y�t ����ʓ@��nC�(Ѵ�NRsJ&ia��Q��=����z}���!��͈��8e�}Uʗ����޽
���> [...]
+%�n^>蹱�E+�HY���/�Lj�O_��q'���C"�˜�g�0
+I�L��Qg��4[ ����%�ǧUXT���?9ƥiݱ\�R�1o{H�H����d�c�Jp%��݌d�;���d���1Rki�#�#�nNJ��+1�ײ�^p�W�"B
�#�k!\u�TR�z���q[׬��t���&߿%QNO��'N$��?Oȟ�9�^�%�����-[�+
�4�շ!�"
��Q v�J9�[���	��Q���a�uG0���`
+�YF
k�z?{�����
+��%2��fU��u
J=����(�ᩮq5x��Bܒ�����
Ǣ�j�cO]D�r��@�[��=2!/3U��f��i�ɬ�#|��B���#v��6��t��ە}F��v���
�^�w�y5ҸuX�T��{����t�
�=ĻYGc��Y����]��o����%��t�F�銶س��� ��S{,�*���x'����TW+}�2���Ժ��jSQs�Ъ-eG|*�=Ѱ�i婀���ͺ�Ysw�㮛��o�1�����g�u7v<#�l�'�uH�^�b�7^��Gz}���D����1��{gB����;����Q]�Z�Z��ls�c�֮��Å�?Ęo�SM�����n›�V:���=#�ՠsN��N���	>#
�h��.����>�\�����fM���w��C��:I�)��
@x_����/�j�+�`��<�?��4P�
�C~�������w��U.
+�_���0Œ��S!]�����@��K~��+�)7
����=��(�	�!�[�	g	�J�� V҇�ɽA�W`U
����t� w
ru>�KXn�}�DQ!UJ-TB�,)�	?�b��B�p�(�2�J�m˧B�WЊ���[�%E]H@�d�p��ZJ�M.Q
{���B�"�7g�.��7�1��o
代����0>
	�-���/�,CA��C�u�9
�$DZ�.�إ
�p9�{H7"6�G�m�����z/��
��?�$��!Qz��	��S������b=N�c�2��gI�?�\���1��椚��7�o�
���G�&'ʸ�w����#��kf4
}J*ټ̫J�8�^j�E��sӏ�
��Q����It�$�9��׋��2��@� ��� 
+�=�}ˆ\И�n���>y�3�8
�lj
00lw����n/�3�����F�d���r�6�#@>	��L<��t�(!t˴djQ� ������t���˳
sƐMX��1�S�p��6HM)�r���d��{Z*�
O�����X�k�a3��g���
=�ǑC
���#bŶ^�OZ�8"
+���/�Xu���z������DQ�#G�\�(����HK=v��
�S���{�p��C
>�z� ���8��ǡ�r�F�\�T,
+�L�";�2���T
� ǒ�&�J-�����N��ivОV�$���S0v)�o��L\[4����4��SٚƧf�Iv���
��
6��W��n�s����W�HS��b�ʖX5qM��vn�8�����l��+ZNȓ���Xn3ވdKfl�o�q��鵬���3�-&F�ePg�mqz�-
+�Yw�ڪ%�
/dr5�=\��`�l�"KR.H69+K�c���,�2�)
eI�%�&^.X8��U�=[D
���S�F��r$�5	oMD��1E�I�b�mᥜ.�bT	�l�]�������e�
+�[���mP�o�'��z6����M\�|q���x��Џ�L�:R;.�������=1ˍ&M�{�
��~�;�uN�� 'he7Q=��cu9�(�f�2
���"
͂R>-�ƙ�\�Ѹީ�u
o�|�I�{иFn�8fVO5�ԨR���	Q�
�|j$�G]�6��.��	_�A���zX�x�BnJ
�i;E�X4!�J���5�d(�'�#�H4�5o���7Nyo�R�4kvl�KK=!ȿ�d���p#&2-e��r�nZ1f�R,[�=�e�.9Mv���q\�'�(Rk�!ɘ�#N�b�G¹Qր�Ϲ�~e�dUV}�U�)^OH&$��8���T���a��j=�
cϟǏ�G��Q>�@�$5�
�ӄ���
��X�!x
c
]�	H�Wi�%|N�wBz˿���)���>�k���덕�5._Ĥ���`?��
�3�i!��?��u�h
���Wr�E�`lߴ~���KG5k��ԏ��&���}�U1�
�iV�-Ҵ?a;П,AFC!w+58�}��4�;���3V�V����~��K$���ّ^���؆���uY�R��|���9��kI�
+Tr�WFK��E"mg����u	�s`�nH
����t���>��O��sFq����X��S�+����cN��Oxe����}�<�͒�
6��j�>qYZ��4d��
#�G��<��B��
DO}�FPe�{i�ط
���h!�;��Ig��+��.%��Aw^s�
|�G
5D�[�`XW�u��ը���KE�A����~����ĝg9��
��	(뭃v-��J at O�;_��ؖo1�m�6��Os���~�'>c/��R���W
�c�Q�DG�#�2�-f���C53O���Xmݤ���Q?J�<�>�w�h��R
Rc��������SUǃ�\���Y�ĕ�

�
qLZO�E6���ņ�-v��OmP�K#�؅X��MOJ��1�G��|X*��@�d<9eW2<C(�
*��)
�%X���T�ҳ�5u�v�w�����~�� u�q���R}����֬Vq��=��U�v�SJ���=����c�{Ͽ]��
}����@�jW<���^�~[�@t�V�	@�Z�L^���
+$g���ў�UOP��z�2�n��L?UH8kC0z�Q�H��p�HO���/n4h����,�>(�`�5j�sse���y/���֤[o�+6���@�7qijC��?���Iĕ�T��mS�t{V����r�ʉ?�sN���>�T������wϽ��g[����n�g�Uo�my(c��t����Y�/yC�eZ���x�V�w̨��KB�=omow�8Q�����ь��ٰ�*�c�9�e����u������G��S#�w;+�ׄ
3�}b̓/|y���q�#ީ�����:18����oy���\���?oVPw��E�
�
{c��ٵ��{���Z[�iQ���`)�h�E�Ug��=���b��c���Zٳ鹫&-��؜.���"=��i0��k�M~���F_U��[r�
	�״<[8Ɍ�S�1Qdpe0c1���/~J2
�,H3�HO
1��z3��鬬�J��Ew;��u���Ur
g8��d�
����%�I��)��`C!��Tֹ�42%�Z�P�Eݪyb��Y�C^ �tL?c�g1Z���T�_
7��X._4y]_P曤�Z�ߎ���	�9
U��Z�K�XB5�7��A�p����1)��+߼��_�
U<H����)�k�B>���� �9s�2zֳ�j���.����6�C�흟�*��f��� �]�Tp���6�h�I��T.?�/Ƹ2�EPdU^Ru'3�2�#�#7b�;���VR�jŹI��1+������1�Ѵ?��$�V/���[����
+����O-\�I�*�ך?ؘ����1_�T��5�ٞ5�	
�?k��)��>:k�Z�.t����qc�b�C���b��4h{��\F@�hC��kW��X���=�i�$A���>��NFh�B	����e�o������g�/~:5M�_x�V�~��%؊�_�8M���HH��2Bz�io挄3��iИ�&�����~���V2�4��i��M7���.�W��sjT�~f��O/S�L���
*���pcq&�?-iߒv{��S�����������o�N@�
��t@K��ݖnSqǀ
f������ĺ��ݺ5{㇤���V����W��MN {��$��E[v�i��n�g
�����A�?�>k���&~����ވ}���][�_ޭ��)V��ES iM66|�#_���$Py��X�i�%����{�(�fC*'���P��|;��:ta�@�z�DIa�W�P���+F����|-a��y߼4�������<
+UF.\��p��n��B?z���Q��
��&/BBI��9"c����B%�k��<���>���v�>YW�|^�p����&�*]i�)V+n��T�.Fk��bU�f
�������*j�<H��w�<����i�T�D�	�uד#B�UP�w9@Լd�]�֣�rš��N��Ǔ,z�P���bu���0�Ө���;y\@�@T�D�v �'5���
D�t%S�f_�C�H����ط��>H썱�{.�	#�e�ܭ��y�A���#�v��ة��H��>�IQzl���}홂cp�q
�-ȸ�kak#V��rw
v^��Ef\V�;�
=}��������Ka}�Πy\櫘uO��*�N}��|W�}��`>e(4
�2h�
}�!i򐼂�O=�FMh�d�����(o��Dַ�ˑ<2Y^�JŌ��G
9U�t�@�V��OB�<�Sו�)�1Z�"��"��
OK�.	'�
+�
߀5��~�,�vB��
i0���%� D�5���2�b{\.����%�ȴ����@
dQ�©��t�0W<.l]T�L�^
HMc�6�`��.	7�;[}���pre}��Nݙg�Ѽ٥͛7o*�&��4j�X��.i��l��JWhE���O�}�S���<q�K���owե[���JLY<]o���&uz�{۵{���U�FϮ
t���.�{�҃���.�l�Ko�r��K
��@�hߞ�W�~��:'����U����N�u�z�X�
AF�]yAQ�� J
�v�'
FB$С���tͫ�)�� /YNF��]�^�$����
+?Ͼ}V�����,+ڪ�z�7c��V!o�}��a�vh��-�e[Z�
:'���t#��O�
+ob�wyf˕RDG%aR��&�P�駋]?�ۓ*�JJdI	#���̚���
��l��ѵӛ+�6l��$����
���C?;�
"֝<�W{H��D�¢UV�
�f�w[W�bТǢM�L��|��#����$
S#
���*��;����B��rsS�8O�ǹ�:����]c�u��Tܣ*t�����nod#��w��F+�. ŵ����N�J`�쭏T�q��V����a��}a���g�Q�y��m�u��Q�z\}np\���WK40]
�������x�'���\́�MK�ca���6�JM��<=)(	�jH��[IiPĪ��
ꜮK�^re�$&�
[l[M���*����"ҳT� �ʕٌ�l�e�Zpi�t�
�2ر�Y�^=*m��b��\�M�ׁ���/p�7�����8��!1=53���8��V_�ϱjMW��)�����Ʉ|u�
�8d��,a2�Y��
+�n(Y
m��>��
+`?����	0)	
�2�H�'��u��8|��4�� ���
o���
��
�+��ۿ������,=�� �ܶ��|����(�m4�h$���h��xF�!C�yz旻�
KQA&6*����e��"�X���߽����Ժ������.�+s�R�Tl�P������"�Rm�=���mHJ<����&�p�헞{�����#)��/F7?�C�s;������/�t��O���;�ٔ����-ϻ
�e�u�$�ۅ0	+\d�z�l�����S�6Ϳ���l��|��Uu�_]��6'$����W��=��`��v������g�
�����z�zX�������{ˎ+��6%\ܦN9�zm�`��[�>�v���/��o?x|r2)�%7�\�

�����L.��}����橻`3�q��;�<}g�����I�d4��Р�$���dP7+�
c�=�B���Y���K��%�;�{�b�a���nܚ��
+��� %�}�7�r���0
薼���k_�(Q$�~�
8��Y�.Wy���;�̪o����CyYHq�_�V�XR�Ǻ��N�pϟ�r&�r��('���:�

�
d2�A
�ok�P�n���Pj�,
7�F����/v��_
t]kl��گF��5lqN��

Q�9Qe��
t��ub]$ۏ�{
PO�����죄o�Ab颍W_�#<ֈ�8c|QBJ,��L6T+��:D�]U�ϘD�eFX%J�ay��dI��H$/��2t�2��)H��=���*�J��\�
L�����Ęi��
ϖ�X�)/F�1U�h�5_P���[nn�'��2S���#� [�P�H��(�
+�Zl��>1�o�b�ܯV�&-pAL����s���'G2�!:@���Iœ�%'��Iŋ&/�X�DB���%2�Q�8�$/F�U�?ݗ�|�߈z��_���8j��d�	�%���H(^"Q�)�$�%"��E��ȩF�y�W�/W�����;w��1p�����O?���/����O;wn�v��-[�?p��1�X�zV����O%v���9���������q�$Vn���zY%ɮ��g�Ř�ik�ľ��ϼ{�IH�{ѣ�,�,������O8���us��M
^��l:���<������
���g>C��o��V�_[�[����+^���7.M���ܭ3﨓P��>˶��:gR�E�.ߪE�8�eD���y���mJ��
�,��u��k�jUd���Z��q�	�|q���{����s
^��+����k�����V�{[�P�B%��S21���z$��f� ��O&,}��9�-��j5���:�}���  :Q	�oz���Ο������o��Ǿ��Ճg~���>����;�&��e�
Qs김�p��7mM���$n���HF��{�z�p"k�:m�
�:���5�L^�F�5��Ns���]2bO�Sk�?=�a�>b0
�8��a2
����+ t x}�]�>GD9�n��4"����Jn�afqk�u�Z
�j����F�;n)���	
̳m�V�N��n�����ie5+�d�)��FhѨ��
΀�$ǁ��oZdQ��Zf
�9���}�
j[)u
��!����1�l��(ԧ��D'@���~�ȧ��M�L���}��I�֎6m��S����޽b�F��i����D��� ��h�ӆ-�H�!]2��|d�.2�ʧ�fU^^t��f̱pTF��\zvò�>��FKr.jzژՓP�b��t����f�R�ŏ��
1JM
+���Y�����[�P�Ȫ\�t�ޏ

X��._�J.R+�B���&R5#R��]D����\����k���D6g)PȔ!\9bJ�*\���[�Tb��I�J*Y"�T1�����Jb-Ak��9l_���c�UR�JB����KK,Q��l"�x���"��6a�e�n"?���>z���!,�����v���]�����o�~��g��۵�؟���z<tY_&��U�˨���m�W|��ך#��
x��}�V���x�
���Ҋ����Q�E�W0���1�ZBv�F��3�{�uK׋�W�&�=��Â�k~���^o�GA��U�wo^��k��1a���%Թ�˹	]{��#.O�?������<����yӽ)�bG���g�d�y���7���s��>1a��/�K�K�y�^���
+u.�<a��n����W��n��6Pb���ʨ����_����6�M���
���qw�yv�>m�v�m��ُ\5����o�
}�����޺���
?����������I<�{=�$��uۧO9b�Z�N"7DQ������Q�w�~*��;��Ukfl\	��c�%��Ѧ�|��
µ���5��?
lB<�T>
<��C1�݅
8xPV,�;1]Ms��#de��i)$� ߝe	�/y�&�T�(�j�l@�u��q:u��b���
+d
2_~L
cU-�x`�I
+<���\� �~"����0���K�������q��ur�K�A�~��� P�&b��th�ǁ��ɤ����kԗE
��/v�{����8w��v��
�
�F�n:��)$|�Z@�Z^�X����j�����n�(1�l�Y�#vHcc�W�)����`�k˕Y�1�!&���Ƭv�
�ǎ�1�>�x
�ʐd^Ǫ#..�!֝.y�ԅT$O
*�
�R���L�BE�
%f/Z,�H��I.RAn˞ۨ��׈��X+ɵr�6U.�k�6��k�bb�uQ	� ��œ����X��E(�\��E՚\g�iz
�gȵb��HեU���$$�(]�p�R�K��H�R�˖�Z�t�¥��Z�lb�2(�TF���zU�?z�I+�i�#�=�ʔJ��P�l��2BZ��e�ʔ.�eK��B���r�J�@��K�iW�l�F���,Q�$z4a�x�����w��]�D�b%J+^�h���E��ve7z��N�8����4u��s�ј��7��%q����
+��kt��ǂ�E#E�R�yr׷ߌ�hY]ƕ ����a	�
itv��g��44#��o��q�2����������x��}J��Z��}�JȎԽqN�E�����*d|�N���_�ݴ%s�X�LbF���딮%u�m��Z��m>x
n�mR>L��/��.
�]�.6�1- #�v�
	L_z at NvP��V��n�󛶜�b��vm�s*Y�
�z�IO��ͨ�
z��$Ӑ���gѤ
�������3�����'���Ye�!�˺p��'^��)��E��~}�3)�&��])�Ư��BN�W\��Ͳ�
+BiV�[��(���ޤ��	��xC��m�S���C6u�&�
;�ʫ=���N�z`X'�M%Zw�=1�q\������rMֶd"B���P�
k^�%I�t�C{�{s?�mO���IX�Q
+�26T
�|٘��ā������|����M���G��]ys�NH9<��qa��&߿�j��(�B��&G'iN�l�vv�
]T1֐��7�����6^-�F�0��TP�
t�lR�d���xn��נZ���g�%J�Ȝ�tO��z�Z��&�q��L�D
�,�XY��j�-�8��aZ��>�I�n��1���)O��P�Ϙш5Y�q2\2bS�d1͘��D*�� '
"�o$d-Q*�PF��%�+Z��X��?��X��������*kW��%h�03#���I��iI����,���OP��"E
'+Z�
���
+c-S6��`�b�\�"XA�˖)TN
M*W��²�cM��Z2UEd��+��^
A+D����ƕ婗�-k����~�!���
��כn������ٽ{Ϟ={��ݿ������ҠT,��2[޼�oi�m��錫j���8�������m7�ˍ�Fg�ۨ�x���W�:���v�(�_��!��e���׿v�=�WQ^
�o�
�����2P���qu��+��
�՛��]���K�'_�vo��QB���X�j�(툐�ԢhZm�W��/�l��%>��w����'v�]�����e�仔�D��+ �ʑ-��X��i'*�vE��5�b���2��悙���z�տ'���h�R�
+
+�파���',y`�VL���ӷ}�ZL��M��N�||��<5KpnDl;����-CQ�˲b�}�M�������۪�p���	�����v�R٨<)7����#G�Xz !�����}�룵�����-B~�Rw
"���D*�~�^D�k�$ʱ[�
{������q7$~l��t�?Ѳz
+�Ț^���l3o�v}��[�?���]��(�yg;��z:��#�u��
��������J���mi
T7c��<����R�2)ShyT�^̓�缝�H}��e�a�
�.�I�x
�fX�H���V�-�<�Q7֜
�
++�n��t'����J
To:
��z˱Μ�C��
4��,�k�1="!cic{�!r������ؕ�^�T0n"�^zi�{v���
�7�f�1v595P:)������.{i�RVX�NGT���;�2��ǜ"���2�*��
Ǟ;���G�z��<&Ԡ��u͘���I~��!mjnƬ��*Z����N̊S�
��Mf5��k/g�J�����#g�{������T�X�L����
>,ȭ�P��(�<��3q^����0%K�	l��*(�l�h�dX��ZXk��떔��\�L��e�K�*V�Tr���eJ-S:Y��
+�`�(P�t��0<���`
�Oa��
Q�l�R0T�2!�L�b�g�r�J�V������W�†Ơ3F;�"y�Ӎ&���sG?��
;~�A^�4KQ�k�0�r�/Xr߰7(�|�)�������X�^Zѭ�tBCL��{d
�o�Ҋ��8Ml����6�^��q�T�#�W�o<q-Vv������##˥������5��»�0����+���J$"6�]2F��1��c�
��bJ��O5}F��NH���D���i��Gz̻u�ӭ�?��[_
vEy�{�<r�G��2�嗵��,���/{_Z�?̬���	�y�c¿���mK�]�6�)�Ÿ�>h��K��<�v�Qϊ^,@�6��}#��������^�xU”��N�����/^P~��i���ϻ7J�ﳭR����%3~߈�k�ӨҁU��c�|Q���_{!����װ�c��27ѮÇ�����2�v���>w�WW/��%�����:&���e5�-}��M~���{6�p�V ���Y��{��G�u��س�y
����#�l��
 [...]
M�3l$�aR�? A�bї%IU�~�"�6�i��k�q�	ɩ��IJ����
]�@R���e�-�Yr��]��0��+Q
+�'�Al�83�05o�`��Q
�n/�_r���Q��W�
�GU�XM���A+�w�L�7�T`�<D���I��;����r��rg���›��	��g�����A��[Y��R
�O�3>�
xu�=mZˠ���$O�=���O��w����(�fH3{�
��O���@ܥ��/l��+�G�T�zd��y��
�cL��(�
+I�{<5v~�e�vQ1�cĒ#K
���b�r��H�B�T�~�z* n
D����j[%j�^���

tAݺ��Үt���-vC3�,�����#��3��&'Lxah��?��y.��CF�U�n���n�DaU��LZ]
+�l!j��>
�׆��X�ѝ�H(�x*>\��=�R���ç3&�y��
{O���%"����k��Hjn����o�ɖ���F�����;|Û��r�ƌx�����g�/����E�z�+K6-����b�#��
a���Uِ||��	��g ��jr_ʮ{�Qܺ�b#ߠt�M-zS=��:*6%b�O�"I��DWQF����E���R2v
��.T:��
0ݮ���:d1v�v͂���
�(N�ɥ������)H��Ope�"�8��L%�E"2bRrQW��vه�u
�"�E���u�
dW��\�9�:	�b���Ү�N��"A�3���^
t��,��P2F����*b~0�᧨Q����yd�!ͭ�+F���ם9�
7�~��x�!�����:s��
+���p>¼�

~~=
+WãD�J�i�nc�{�� �eꃾ�PE���_j`ƍ��e�/��du�<�
׏4�P7v������ǜ£u��w���Ѕ�d���y�eY;F:]t�����CR�]��P�T��w��R��~Y�	�,l�-��2vƬ��l�Θ%k�3�f*@�Z��-zM���W4:1�̊%ZԮ2y�
�m<���O���\�n�W���DټS$&�(�g�YBB� ��
@�Vk�X��
+jL=�3$_M��[tHˋ�Œ����Y
����՟�i+���Ū�,qn�z-���q��_�
��"D�>W6zKw��^z�7C&�2�
�
,&%�6�[���'�9�c,Y�e9C����� Ts��!f�?u���кo�:c&�pW�]���4h��ܩٞjERY�C�����z�SEK��W�l��T
X�<A
+T��mӾ���6♋
~�sU�x
'���A2��
n7P��J�yIJXS�>mW��}�@��}����Z�0�1l[�L
}��.J��~z���ogB��^
�&h�h��
+\��!]'��Վα�YKVI��Jc��	�^H�i�HuiX���i�n�����v=�+T_$�鲺n��J`G�����J��`Z�Q�7��A8AE��ųW���1X7 /���:'�r �
;�ُ�~��f_�~���cô����B
�.���
;
;W�6�ق]��aa�P�L�.밪h{��4�g�*�z���h�||X���2�d���RLN\�13�� YzF�vV
���܊�k6�U�1
%~�[�l��T*]L�kن�\mu�㖡o�g��
#5x�Ƭ*ޅ̽�},�F�9Z�
+
�Y����v�q��ٕ_�/��ĻMo=yG��2���-�2B�	�/�1"�a��4*�/*u����6��f�Z��,`Ut�&I���ж�)EdI�D�,J@	��
+��+C�%���?1˺�tL�A�5A

�<�8����e�����w}�p��ӄ�3�T%�OP�+���r�5���Y�^0`I�EFk��G�e�q�T at b���(���LFez{
Blwy���IQ�~Z�z�eCyu�"ۥ�n'���C�l���
}Ǵ��������{7�Vط���$���
7 [Q�U{P�S9�Sy��kM�]k�U�.�EHİ��#&S����A+A�l}����~F��4�4��xmp�s��	~f�Q-Õ��p�(ɷ&k��l�b���PXb�
+?�|�+|
Gc?����ꁥz����2/
|�n��*vY{��=�Hv�is5�
�m\
&���M-v+."q����`̊rZ%�{�U��'�nM�TE8e��VF<�t�Fb𺌴�JQ�YY at JP�
�!Dh�<FL�ԵJJc���*#��M� r!+�U�
<�
7����0UWR
RL4� _[�m'��hPx>+���%+`?
6��졁l�v���Z�k���\���J��z�I(���#�
�Ye���e�J��N�MB�L�����OX�
f��+	��DSZb�XB�;�&͒U�m���X�D��]ꪯqm�U�Kk˩C},�}��
�հ�QI'!�qr9`


�q�q
1�i�rj.
�2�����L�XPdŕŔGA�i�2*���1�aS��8�����d���f���C�
�W�P��j ���r0͠�Q�Rݪi�Yx\���y�ET@)_i:U �9V�V��/4q	�7��C���Y]�t}ʿ�Z5�/���}Ç�Q�
7�I`
��lL��K� x
+�f
4�%��h^�QR=�E$�Q�	�P�UD��ل�z��NG"��UQU�����hm������~����9���W�c,�۫�����N)t���bG�ve�L*F�� )���;����d�ʕY<t�Z�"���^���%�ɮY��4�蛆�59��x�QE�O�c%͋1۝�c�(��zN
+A&c�qn���A�k�>�E��t��J���t�ej�\�+��b2�(tY#lq9;��6��}�9�۞Ԝ:�P
?
\�[�0��t�v'��u^����+�
@2-˟*Q��U���ꇞ���e��RʭW�Q^��
���ԷT�m��i��D6fY4�n�2pD�M�mY�$I!dF%y2�K�(+�$H��{�vu�,Ƭ�_�C�:
$�M:b� ��X9�8?�/2-˨��
K� ��
Ӳ�F�
�@�(�_�
eyJ�WR��v#Q?��C���5]�ɴ_
+�X{6� �������̨��~Y�D��1K�^�^�4d;$Տ� ��7	
+�\�h�)7�|l?����?&����]c���a�he
_�l��|�4�nR�ݧ���&_��.D=i����t<���
+�m�

5��g��g�_�0,"A�BUe
�l�>ޭMx�[��a�
+��Na����G%��[�4�y�ܗ��V�l:���y��8����0oF��"�t���nU
����(�y��e� ��Y�+�Mtٺ��'��[���Z��櫴W\�0ICEU�#C��H0�S�]M1�:�x�)?_]X
��D[zΘ�e�7$+6l	�*c�>�r_J�����\�2����;ΨI��v�yk�=�
�
+
OdՆ��,E
�����c���?Ev:s�y��
3�ֻ�0�+r,Ζ|���C�K�eZ�ZW��&���k*�������7(i�L�/ ����G�+̟�;�_�c�apQ@#��*�F�}d#*ɒ3���S�Ǖ%eU�
`��!J�2j|�$hHbS�UW,��< F��
|���W���B�X���m"�2:���c��{�N��G�Ɲ-���Ȣ�����R���9�;n�������c��1D��0>����⟶
� qW	k$:�sʎ�f������M�е�X��o��Z�
,ե�/A)H3�9V��F��(6���
���
'y�;����45�
7�:�kf���O����$N����G�%�1c;
�UkA���[W�,��x�P%�3�SqC7���
{�:�3 dc�q��h|Q3��-�f��U�j��mW�#2��.�k���P
%f�Qd��2ٚ
���%L�DqhK��Zg�.%���h�e̦��~jB
�%bD��<���
��E���pɐ���~����B�,+@_V���db�M[�4c6�2�{�t#]�>
��G�>q�j�� �,ϋi&rLR$5���C��8��8�{�i��,@��t�����70��+e�9�&GU,�sQ
2�u`1G�Dȱ�KZtTR�Z4��Ƅ�i�1T�t'6l���tT
�
�ZU����JBL at JV�nA��GFL��È�b�B�bɱ`ĪQ�]2oR%֭�g��G�ch���[]t��
�
�49c at s
+�
ZL��)��>J��%ʖ��k����Џ�R_�7>l^!���
͸B܌�����
�0��4^7z;0Ϡusq�:u!j��(j�V�7
y���8w�k���N_�֝!6�-�,�ݤ��#��24��]	�3��tY���"U�0䒳�_p�`�
�AF�\rw�d�}�Qo�u��-��̶g�U�I�����`W�;b;��94�k�>X��Ω���Է��
"�$o�����8��2
C˸+ڞ����=&���f�S�,��٘X��ʰl��=Y�UW�����#�n~!�d]�.?f�1ӝW�Q����Lrɐ%L
,SaZl��� n�M�jâ�PT;i�&��t��^
�ˠ��!u����:E�g%E����W�e�p]v�a�����j��v�k�8Ujn����ĕ�b�
c�A���5*N�Ӌ����/6c	r�
,q�B�6b
�
Ed�sG�;e2
Y������c6H

�T163O�+r��֍����)���b�Ѹ}N���$�������▂
+��q*�n
+5�I�fu���;nz
:
<����t
I
7�`"fL'Cl���sϥ���9����g�:F���B��9��X�����s94��֍(�e����To;E���x����BʐNޅ���yּ~Ǯ���*`S�mP�)qnl�K���-E

��Ek�+�8b
�96^
������q��XY�'jQ��
�*�U��2)d\fa���� �cB�KُD��P�D��n5f͕�ҽoq�&j��֪U�v�p���G��
xJ\RB�3��w��n�[n��o���䰱�	r�*��o��a��M���Y����ʲ�w
+J��'i'�SK�qK�Ǚٺ.�$��#��6�TM�A���/?ۋEi��'���9Ə�C6
$�8����J%����<({d)@{4]&%�J�G��y'ѝr�MO����d<���I_O���I���e�&W^�8
w��dC4�Mv#[܏Z#@V�PT�{��6������Q� ���;N��k
"�L�-zkN��M%��z��d
`�*�<D�����g��N��)B�.��͊g���3Yg���ԗ�XH�X2� ��x?�.� u�
ꦱ���bEx,d]V����v
$�=�Y�Կư��B�u]�X��B��b��
�4�v@"Ȏ�����o��؇X��бD�=���3��G!X���J{�UwYK�� ��nv�S}I�m at _�$@]�֕aIS���T�qsPx
��`�
d-:�j�����*�[N
0Φ�����z�Uw[�b79Ͼ�Ɍ�s_��:l�q�e1h�A�?(��jH:
+��{x�e�#9�eߚcغ��]�qov��q<e���O��)�5���1e�KF�ƽW>����"UD{�C1jkX[��R�U�����g�}?���V��N=%UU�DY뢖
+i����B��U
&?X�?�K���R�A��3���t�
+k���3
̲��T�T}�z����QйP�v?�������\������]�ʭ.�V�h!u!�$Q�
���
�c#C�i��
+A�qغ�(̼�pҷ6C��sT_��U?��(��$�C)@�Q���M���y+6+`�U[�F/L퀄؀-����落�
Y�mg ���go�q�/�Y��΃���T�W���Ӎ���j(�nc��Wf��i��p���_暈[rx��z/���s��Ƣi�����
�A�ES&��9u-ys8Ջ�L�e�~ |E��qd3�ؚ�ˊ�Fi>	5w>����C+�Ү�qT+v<��
�捣���ު[�����X��@CM71�&O��+VH	�=�
����,+��{쨰Gz<�$I���0��1�4/�-b��3T�����K��QǮQDž{[g��9�}�[]����u'��U(|���
�co�����9�C�`��>vEݪ�����O�t�2���O3�̈́r
ⳳE5�
�eg
��w�,(�U5
ⲭK���W.r����N��
�ή��~%�of~�!ӏ�p�r~�-d�#>jf�<w3�[�\0
+��*�̬��֋�M�2Vsњ�V*��D�->}sPo(,V��+����C��3�c���2Q�:9���Ml`�k�_��V����Z]�Ƥ˾\���ϼ����f�3+C��2� #�0� #�0y��n�9s�??��{�0q�B�K����������U-����w��y�o�'#�0� #�0� #�^�6�C����_�~4�u������ʔ	;+Zq]F�`F�`F  ��/��2X2�\p�XF�`F�`�S����h1c���ՔFG��8u�[fF�`F�8�L�>���7l��hSژ��>�A���F�`F�`F�`!`��m�ʬ��
+
+���#��V��\�?�8�7"V̮b��
;	
+��&�
����
̴����	0Of[�P��0� #�0������V����6�ϴ+��r��U�+W9�\���
�)^���yηn�X�C�7i�.�۽�‹H���ǎ�o�(W���������h��*��LH�D���7�ts���Q��Y5������ B�W��It
�3��%3}2�;K����2�2�Vh߹ #�0� #�d;�	��hd��������`��^{�U�T	˻�y3��ֿ?�8 at P�"E�E�;:���'�
>|X�������Yw��1���Gjj�wu��_�X��>_���9�GL��B��Н'Nd�zpE=0���6J�Y����6]��|B5�� #�0� #���tٲ+;ݕ���߰,��V�X�J�ʴ���*����%e������6o~�g6hp�/�J9��[���
+�˓�}��u���3�_u�՛7o�vW�Z�5�������gaָ���͵E�&ϝ;W���������j6���}����5nBu�M���?_�9�����uv��k�FWf�ͻv�:xP�Z�j�}�]w�����B�1cF��W�sϫ��C
:xP�����V���������W^y�i�K�rƙ�.���g�+�		�f�+����Î
�FI=0ʗ+�SP�R%��᩵����sɒ%W_}
����v|���ի���
�5~���扦�_,^������_���(��sXΛ;�q�� }��M;~<��3q�pF�`F��e)v�
>�� �r���
�U��/����7�y��+W���ؙ�;��1�ܟ}$;���o���_>��'C��d�o�=;W��j�7_c����Eo���wf��ka�u��+U"<���c��M~���_~�
eRRV�/_>e�
+l��7��׫W/�2*V at s
.rW	@8)���!�W�Hy�mڴi�?iW�G�
��ȥK��P���#G�;��'��\��)o�uVu]�_
���>_T�P����������
4����_xaĈ�.,V�X��:��g�}��E������I�d�� d�;c>�kZ�W&L����Ӧ���'�
��+�Ё�0� #�0�@!@�-���N�}�r�
�� 3d���`mޢ��9�a�O
��?Ǐ�g��WT�zz˖-�1p��S�dʅ<��{��r����>�x�?֭[���ͺ�s��`�QF�ʕ�T��5ަ���q���?��5�駟v�x�%D4�NJ+�w�))�Q,eŊ�=�c���F�.)\�Pte�U����^���ip���?�����n0�
:�v�e-Q�Y�&O=�$��Z�'��k���5k`���
���ڵEɋ/nЩ�]���P��sj>��C˖}]a�ר�񐠵�9�x�K.ix�95
���u��

�~>��K�.5��=Om@�Twl����0B������c\Põ����)
r���bF�`F@���1ڲ
�_�
�XB�Gs�.��3��L��D澭[�����o�Q�\Zx�!|�?��O�q��-47p�S���?·��
/$ib�mX���ۜU��%�Ԩq�{�	s��+V��u׶QҤ��>6m�����������A��w�iִi�*=ٿ�W+R�>�xzz�=ݺ�
�bh��֮�㎻.�wQ�s�C��(�.�@۶u�ѣG[�U�
QB���k�~8���矩�ƫvt� �֊�R��ϧ�+�z���x(c�qOm@�L_���/���2�
%�����;�O�gF�̎gn�`F�`�0�1=�i�\�Y9�*'T?����q�g�i�R�~"]�����|�������/
.
�
rt[h�R�ʚ�#,����TY�C�3�{�
��"����@H�6k
++2�ʍ5*W���g��fݺ�+W�CNj ���3:w�<��W�

�ꄉ��q�H�;�:�3��9�?��y�%�s"]������)�

M0��̟���=k�����Ѻ�2�w!s
1�aժU#v-x�fB��0� #�0َ��*�~yŌS^:P}��ޣ6�=�fɒ%��5�2W��$>��nK�{�Y���������6X*����?���!�xv���m۶͛7��c�Ƨы�>��������6k��A���9�ȑ?�ؐi}d������T@�۶m=p�@���C͚g�ٳ�
D�áx��˖-��0O��)�֋(��!?�O�s��� D��ex���a`S�
�5j�HJ�Őɑ�F�`F ��f�v��(��)	��,���Frr�>}z�����{���;ڶ��Y�?
=zL<�c�v�����u׮�R�d�o�S�6n����ɓ

+�L�j�D�O���=�؛����y�K{�/�MÆ
��(}D��O?���CrF����Ë.��X��qi����<���˖�s��t���.k�211) at�H��_���;��W^����QϞ=�|j��yA8z{�t��1 B�C@��`ܜ�Q�Ni�#��\�A��k(<��Q���-N�?�9��7�%F�`F ��f�1
ɒ����-^�L���zp��'��y���\s�ĉ�-So 	�.m^��Ŵ^��2bij��~�u�_��Sz�zح@�ʕ�aȐ!�opA=84gƆױC��v�g���G�&���9sҮ�����U��еGz�nҴ���t�Y�����B
?�+T(?zԨwf����_{������!	�����s��a�]��ܹ�q}~ƅ����1�"�t9S�� D>#�c>Z�0����A��6m�Ŝ���ƅ6fF�`��!�ɖ�V��}��W���������/w��b�H?~��F .V�YӶ�M[��
Ǥ�*raF�`F�894��鯿<w���v�p��5k_�|��M�W���ĕS|�r������X-�϶��
jQ��6���O��F +�ӭsn�6���!�PWn��-̕C��� #�0��)B��ŕ�>�e'W&�lp�N���,#���\��-�mb�r~;��F�`���@��z�]�:�L\Y���D9���yzp-F�p!p��
�ig�%3�3ώ͌ #�0� #���I����dN��T�	#�0� #�0� #P@�T�aA�bƉ�06#��w�#w�`F�`F _"��2P�3��>�u6,�]�`F�`F� !�9�E���r������7��o�rƍ
���>ӆ!�+/� #�0� #�0�@�Gி�<�
3���gqe�,��?|>-���=dF�`F�ȧ��}�;v�^�j��ݞ],T�P��/ix�Yg�ݠ�}ĕ�99!�ƕ�Y�HpXp�̕���n1� #�0� #P0ذ�ŋ^uյg׬	Z���.�Xdd�
O�d�>t���ߗ˖^q�7�bre �3�` ƽdF�`F�((|����/jp^�څ��N�����㩩�ǎ
=z���#G��V�F�(��ɘ�G+-jn_b��������dF _#0eʔ�/���3���_���;ʝcF���ii�4i�s�G&�X���. at I?)V�8E�%��`��Î`
+(k֬���y�������'
�^�z]t�Eh��?��J�{��8p`���W�^�v��PQ��nhC\�`��� (rѢEC[,T��$���"Ոc�\Y����B�rF�`�1_~�%H�o����_?��'��eʔ���{���O?�t�ĉ�n���N�R�J���j7�!.�0���E ���;���>�HL��f�S{�uF�8�T�T	�q��������C����\s
���?����OϪ>x� n͚5[�l9a�m�c����a�>��z��
��n=��3Z�
+�۷�G�
�{�\0h� 4G����7ވ�s�9�l��j7T`F w" ����u�^�m��t��Ebd �c��;O2k�0'�bŊ�@
_74
N
��/��bΜ9p� �%]����׏?���_���VpȐ!˗/�6m�G}���߃�f��?��o���h����|8]���[�X�b���`d�b,�`�\� ��7_�ݷ���u�"���۷y�e�d���1
[ƾ\�EV�`��� ,Ǡ�M�4IJ���ݻ�^{�g֪U��\�lO
0` �͘K׳gO�V�S��.î��p�={v6����SO=U�v�F�=��C3g�$����+W�+W�v�lT�E1� #�;�f��C\um�sΫըIӃ���~�MU�,�
s[�ve��<�f��y�Y+F�894h� �ྈ.��/R��ׯ�ҥK����}��
�=��?`�N�:T̕6`HFX"��
,��?\&��D�{��?��
�N��A{�.�%0� #�/8�j��[_%��'%����U�rF�k�_�q!���ˊ+�$Č�`��/�w�`�C ^�}��ƍ?��ó�:
�a'�뮻�����k����G�w�� D(�������e���C#~|zpiF�`�lB����OĂ��\�h�T{�!M��H�Iʄ,x�d�`�lUΦ��bF �"P�zuPdD���oݺ�ab�]���ց�P�p���~�-�ܼy3m�L�"E��ߏ
� �}v
��i�&�
ړ]�Y#�0����[7l��*x2n㔑�8^@q�n3� #`C ��}'O��pl
.|�W�p�R�ڶm���O���[�a�h�%:u�bL��������sυb����w�v�?�m,~U�㯺�*�;G�q���r�-���
+Do7�MpEF�`���|V��+����DWXIF�`N"�˗饗�y�
�tC�	ĠЍ>���O��
y䑮]�b?�Z`bb�=��͛7��U����^K�50��X�������_���6m� FG�|�q���V�"#�0y��b�����o����^N컱A�N�=�c��y�?�3#�0�؏�-�o�9�:pӌ #�0���g�E�╏����ع+�U���#7]T��

�6+8�+�_�V�$#�0xY`
+�Ν;A�njs��78�Ì #��J6��s��ֹ��ZW�wޕ=k��Y�
՚w�z�=U��]�q׊����%-װ
J�1lLݎ�+S	&ʹ�\�R� #�{@$8�C�7��;�D��'�|2��ʚ1� #P�8t,��Ѵ�X�
?p���?R�
�^�����П1H0�O�*j�< ���#�f��w
�nj #PP��ː���c���/^�xAE���0�@
G@��) ��[$���}��8�LF��W����y�\��'����/'�Qn�`F�(� ֐]M��m�GSX9==��
KM��؁�J%��,_�޶���|��M����C�����gF�`F�(�H�lf���+g[���
0��`F�`F /#@�H�9|�$OQ���Y���i9�����n8����<��O�<P��
����Y��ԩӥK����7�{_x�u��=q�C�\p�={���_�z~��'�{�%KpilܴV�Z��`}L
�_��EU.�_��*� |��w�ׯ����F�lذ!>�?��Yԕ�>�b��bF�`�1��E���}�
s��_~��ڵk�Ν���
�J���[(�b�
+lG�
�g͚�I��~;f̄VA�*d�*V��W_}e�
��iӦ!�l�
=
r�-[֫W��c�bv�1���iҤIo����ᆱ���C8�r�������1����[B��{};w�С��,RET�X1����0� #��DkJe-�YcI�i~:Z��+G�ƨT�RF�w�yH~	�n @(Y�\9�\�2��@	�0Z��۷]�v/��rh��>��U�V�[�ƆY��_����>���_�z�g��݇
��W��C �H�{vӦMa/G�.-�O�OKɒ%C������$�c|[@vb����w�q��,��̟��#�0� #�g�0��6
�����
��ǎ
�3gli 
+�g�ȕW^���Z�?���2
+c�]�!|�<+��۶m�����u�]T
�
8P�^=��
O{vD}B��
8�-[vÆ
�/l�#H��U0��+j>�9w�`F��/������
X�ED��$+�\H��
�2��K��c!� ��v����vkd�ںu��_W�
;v��4-�g�ڵ���K~ �t��^͚5�{��ۇm�����]�>��hѢ�Á%�rʗ/
1�HOl�:�w3�� c����0� #�0�m[�S��1�PR��I`N�?��3�x0nܸS�a�]�����)SS����zΛ7����w��a�����ر�c�=v���(��d�b2������S�´�/�ƝbF�`�	*i_��++�dJ�'�hnիW�Q�F�-0�i��٨��Q�P�,b�2���}<�S1��`�$?�ez¨<hР�5k�
=Z+3`����ٳG�t�aT�v����϶�ו�s���;�K�������w��3g^q����4�<#�0� #�G :�$�&��Xٕ�3�ʖ�r��}�~o`p�� qX
ܱp��Y
�
M�4	�֗/_>q�D2�N�0�͇
2���R�  �z?�,

�8�%����� �M��n7T�,����Q��r��
���X�
�+��O?���y���6#�0� #���(��Ö�t�P:O�ܵk%�!j�g�a��1�i�&��ޙ(I~�0�b�1
+�UТ]�!��ͣF�����8+�/Fܺk��a��`

;
Uڶm[�B�3��z�͛7G�
���
�O�8���������@�������
4���{g8*��Ҹqc�Q1cRIx�cn(��0� #�0���
�,��\�U|e���
����P̋/�.��K���S�L�h߾=\F�
IbP��V�m��n�	�����vժU�r������D;{`vhw4
X�A_ at Vt��	r�y��*����(u��s�f�/?}Z�
��
>
�t|���ӧO7cR���L%��#�0� #���
���d=N,v��[7~=~�x~
G���/�����v,���{��3'3!�In��cF�`
+,���{�A�nk����������Xj����P*9%e����z��1sV��X���7]T��z*f��6��q�Q`�3� #�0� #�P�6
L}�a�r-O�p����SQ@�-w�`F�`F ����1ӱ�ۗ.Y�N�;�c���zX�,���F�`F�`�ҹB�X�r\c'T'R�eQD��sW�uc�F�Ғ�aF�`F�ț ŵ\���С/�QΝf�	9k�0� #�0� #�G�S��°�3N��aPƪ�2�H�XMF�`F�`F ��2���!���)ʅ{`�Y��hA�-�"�Y�HY�Ii�ty�нqT1+�B
w��eݺuQz��h�\s
�3����^B�1c� ��Y�Q��{�S�w�޵j�B���>�]���?�DQ��4���ׯ_�#�7l��l(�7��l�

�/#�0� #���^*�5�/����{-
+D���_�]�i�3�gϞ��GI$A�+V`;
+R�?k֬
 �
�X.\��~��{�e�^}�U��ݺuk��_~��*���o۷o��i�?�
�Hy=iҤ��~�̯��.���ˎ�.S��ׯr\#��b�Νͼ�mڴA֞���`F��K$&��d#����d9���qA3�R�R�*U� ��w"�o at E�,W�

+T�\�Q��|����,zH�
\��WF�=}�9�Q
6c{��K�.E��.���
#1��(
���_ͯ]�/-%K���.S�@�J�c|s@�>�"G������Y����2� #�0y��t+��TZ�+è�Crn_|˱c��̙[�B|5#��%8%%%��޽{7l؀�؎2ݪU+͕����_�
8P�^=*�
O�uh��{�
xO+[�,�"�u���=�w8aL,��� #�0�@
E at f���X��n���'��l���Zx2�
 ���޽;�nM^ժUs� �
�	ڏ
pel�۷��M��n��vu��E��\Yr
E�|���|����?6@��;$�_ZZ<��h�XmF�`F�   ]��/��*��Hr�WFT�
s����g̘��q���N����_�^�X`N&�����9P�5k�9!\� #0u�T��
2�wF�`F �# ���O��-Vq0�K��#I���kԨѢE
�g�={6�z�ad=�
���r��Z�*Z�s��s �1���|c�_�>M�r��`T.S��[��]�W�@A��\~�Y�����{��
4�W̜9/o��O���"#�0� #P� 7I��"����D��S�f1�/�ѯ'� � U)H
�e�,\�p�����ФI� !`����grÀ�2�bP���
c>"��_)���uC��b��z>C .@��X��
c�Sxe ��]wݕ�:��aF�`�r�
����<�&�a'�/��=ڳgϮ]�@4ǎ
�h�˞%�c۱cǦM��B{g�$�q�X�m�(
VA
�j���7oF [...]
+��W_}�xfl/�v���
:t(_�	�Dv"�����{�U��ָqc�W1cRK���av�ͲF�`F ��xq��r,o�r� �
��:|�>�| �Gǎ
a�%ep�)S���
�o�
�#G�$�Q��V�mG_n��&D��Egp�|ĩ]�j�\#�[p����z�jDVF-��5?|���ĉ���p��B��q�Fw�=���g��k��Kː!C�|:X@>D`������'O�>}���z�w3d*ɇ=�.1� #�0yiKY��ײ�Ob���n�����[�i_FU���c�&R���00RF���F�`F ����OB�A�nk����������Xj����P*9%e���fO��҇+v�p"IR��<��X

��
-`��0� #�0� #�<(u���
>��������r�%��ٽ�Ţ�I�1#�0� #�0�@�#�������s�h�_���ٯY�D
�ر���t�MsF�`F�`�|���q-b]ȉ|b����R"Ht��+��Ǝ�|ڸ�� #�0� #�09� ��"���'��&W�IJ(겶9�B� #�0� #�0� #�K!0�*2�W|eɤc12r�ڬ#� [...]
+��`F�����p���z�Y3%��
v��eA2��k�"�BrrrϞ=�AAId,C�+V`;
+��?k�,$A���7WY�p!r�!
	rY##�
!-2������/T���~۾};eMCrA����'M����o����ڥ��r���CHZZ�*U
+ ,X��S�N{���5.�_�ׯr\�	C�s��f>�6m� kO~�8��`F����p2ɵ���0K~L��"0億J�*U�R&UV�;�Tyn�P�\�r�_�relGA�a�F�jd�C���*�=�
�2����Ԁ�>�(��f
!`�TF�
+*\t�EP���a�Fa����j~�Ri)Y�$nٲ\|ذa�ɽ�:F��ɗ o%�1�9 u�	�;���qh�̗p�F�`������']-�Ō�� L.�Hǎ
�3gli 
+9�,�)))�a�ݰa�c;��DުU+͕����_�
8P�^=*�
O�uh��K�F�ŋ�P�Yl�B �ie˖�P$��Q�n]�|W�C}��`F�`r)�_�
u!��žL���r#��� ��“!�|�
���{�� �5yYT�V���.|'h?6����o�>�%;7m�:��;���E�-Z��g�qF�^����s�����Iy�{��4�˗�����^`�Y�Cb��i
�y���<#�0� #��P
�
���qM$Kd�2����ϟ1c
ƍ�;���+~��WxJ`�9��r��W�@i֬	�����{��q��A�+���d�i��?�:u*L���/�
F�`F �!���	we��2EV	�"X�	��իרQ�E���g��
O7��'ՃQ^�>
U�VE�z�y�`3�=�o,��ק�U���eʔq�w����
(w�[�u
�'N
:th�}g��9���Fe�A��+f����������#�0� #P @��
0e�ba��a��
D�B�8p�ԡ qX�
��p��Q����C�&M��cv
���e�
�A�W
+r����~��v�
m�Q�f͚G�
	��E(�znF .@��X��
c�6�2��Srs/X7F�`F�`# 
1��p����$��2!�gϞ]�v�h�
;�$`�E,,ǶcǎM�6�!A{g�$�q�X�m�9 at a�
+Z(T3�߼y3�!�h���
��h�-�WV�\I�iEW��E��U��
+��W_}�xfl/�v���
:tr���ki�p���(bq�l�2��8쁛z�פ��{�U��ָqc�W1cR0�O��<�%V�`F�(H�y}�
+
o
�
È����IH§�% ��~t��f]�= M�2e
+�.�@�����0r�HB%ᨀ
�jl;`G�5D��Egp�|ĩ]�j�\#�[������Y���4����ĉ���p��B��q�Fw�=���g��k��Kː!C 
+�0�?��Cp_�֭���\�.(��>
�o{���ӧO7cRi��!SIG���0� #��N(�5Qa햜X��y�6~�����en�wz��~��rg7X+F w"`&�̝�V� #�0�@�C >~��:h�mm�
8�z"=#==��
KM��؁�J%��,_��쩯�4g��I�5�w�z5ϿPڕi�����b�#�0� #�0� # ��e��DfŐ�C�d���@n](��{��EnU��bF�`F��+(��������(K
�O#�uJ�7vld=,]��+k�0� #�0� #p�@�8�nD�caM�a1��
����A
�ر�2bF�`F�`��.�c�T

�y�D��]1�
3� #�0� #�09���H����DZ�-/�(1�r@=�0� #�0� #��$��.�_�����b��Ϡ��V�5k� <-H���
�@��#������O��

���Y��K�.�֭
�S���Sb0#lsݺuyj`(�\ "HT9f�DP^�~��ްaC��?~<	���vQ&cF�`��� ��#���4��)���-�h�|uk׮Eڅ���={�FId,C�+V`;J�!֬YH �
{7n̴|?9�W�.R�H�bŐ
"�>\�E�_�~�q�
:H�ӹsg3d�6m��'T`F�`�S�@,W_,��l�_��9��i�J��T��nHȇ��f�<w=�,W�
�W�\�Q �|�����B�������g��j�
+��E.�#��� �ȝ��}x'D�t3�e�̟
&#�0� #��.T�
�
�R��WI��g9��رcs�́-
D!�j�E�씔�xjx�u�A�9e��Fօ�F �@e˖ݰaA�
x�hX�]E�^_�*#�0� #��L�=Y�%�q0��~2�\���d�ҥ�&M�P#�E`3޽{w��:�hS�Ν;�n�z��_v�e;v� k^�� P�|yT߿?	���~��/PZZ�[V�ຌ #�0� #p�/!��`��r�_4�� s����g̘Q�d�q�Ɲ���	�]��ʔ)Ss�Бl΢O�N�
+�2��0� #�0���Z��P:
+�,�_��/z���իרQ�E���4{�l��t��zR=���uS�.0��c�$?vYΝC6oi�o�>(L~�X�&v��A�{�̙3��⊈��y��-#�0� #�/PFc����ʂ�EYٔ#Z��D�B�8p�� qX�
=�Z�
�"v�-jҤI����m�/_>q�Dʕ=a��C:t(�M���� "��
�w�@�W�
漚��+��O?�뮻
+2J�wF�`F �" (r�1�O��#^�p�Ҳ,��F���ٳk�.L`;vlӦMa�=K.#F���M��B{g�$�q¸�mF(
VA�v
��͛7�5
+F�~8� �n9�/F��k���\�`�
;s�c��x]|��
�q�oiܸ1⎿���1��I�BoXGF�`F��!�!3�H:,6e:�
�V�F��7o~��w��Qc�_tyʔ) �`�۷�T��#G�(��r� �ƶ��n�	������vժU�r��!��+@�[<. at e�s6`��h���
>
�t|���ӧO�w
m �72�d�,�`F�`���pK���$K&��������7SR~H�
d�g\}~�;�{t��S��"K`
+fBʂ�k�)#�0� #pj���]M��m�GSO�g��g��c�iz;��B�䔔�|���c���'��(���N�����}�)��˧���:#�0� #�0� #p�Pɫa[6���MῬ��'Y�8��p���ĉqHᢌ #�0� #�0��2�<�A��񕥩�\3"N�; S�
+����t��3�$#�0� #�0�@�C�"�/�"�+Kz��"ŵ�Ȝ�4O8�gɅ��J� #�0� #�0y
ɃE�8�ape�(���$�2bYD�ܗ����2� #�0� #�0$��/���Aa0,�ein4Y��c
F�`F�`����E�տ1���k3���rP��5k� <-H���
�@��#+
ɦ���O��
����Y��ԩӥK�u�օ�%O�ZOO9�
���u��5��#����Q���K�.
m�
0$�3f
"(�_�^G
+oذ!�ٌ?���Od�d�F�`F w! W
I��Å��G*�(�.�gbߗ_~�v�Z�]@��={w%��
eV�X��(�@��Y�4hp��oܸ1����^��H�"ŊCz�����åJ�B�,XЩS��{�FQ��0�@�~���oY��{o�Ν;t蠑iӦ
��0P� #�0� #�k�i{D���H���jʟ�Z�փJ�*U�R&Xb��fڀz(Y�\9�\�2��� �0Z��۷]�vH�
\%@��
d�kժU�֭�A·l���a��.�u�q�
H(EU.���()	���_D�>����B�e˖�?1F�`F��uh�,�1Qb+�u�h���ȖE�cǎ͙3�4�
�02f���d]�Cbρ(c��n]�ti��x�⬷�
+ p*[��
��؀����U�P��U 1�.3� #�0��LY��i�,X2�����MGxGPZ8�N�4)Z�̔��x����v�(rM9;w�ܺu��_~�e��ر����8�^�z����aφ!0�X.��˗������Ol�:�wH�����bF�`�܊� ��e�����]Y�g��0'ϟ?ƌ%K�
7n\�*��
�.��Aeʔ)��V����˗��������W���==bMr?S�N�i9���2� #�0�_YyY�e����*�>KsT�r���kԨѢE
��ٳg
Y^nYO��2�����aʁ��B,��]��
X��=q�ġC��w��9�sI����M�/
����e~�9s�W\�_?�t��`F�`
+jb_�
���s�ȨLa2�T%Q�A�+ĉ' 9 at y
+���ѣ�U�p�(B�,Z��I�&Y��Z���l��eO�0�Ї
r4Q�f�#G�d��#뚳�<� "��
�w���W�
漚��+��O?E��<�
V�`F�(h��n�ˆ���G��e
�H
�{��ٵk&0�
;�iӦ��"v�#F�xӦMp`�ޙ(I~�0�b�=
+�U�B��X ��ͣF�����>[��r0{q�ZQƂ
pz����{��
��_~�e�ʕ�=�\˖-�n�.h����U����?�8*�7F��w�}ׁf�a:i���;�0� #��f��0
K��ز���rº,��E"ʨռy�/��cǎ�K�
+:e��]�����c��ȑ#	��c6����	��@Xi�
 qjW�Z�/�H�l�|�
x\��h�l�n
sժUa衇�5k֭[7ؕ�_97�\�����0�'O�<}��w�yǡ$�y#SI.ԜUbF�`�`፬��D$��_j�ܼ~��@	M�*׶�#�?y�!c���	)��⒌ #�0� #���W��i��ms�h����
�{,5MocvV(����|т9s��s��߄mYJ��E�3ϭg�"��$:KIV�溌 #�0� #�0�@
B����'gd�Z�b���?��
�d���9��'N�lU�=F�`F�`�|��
+�A�:ǵ��I"�2��>�F�La+�K�����
bF�`F��0d���II�[A�]Y�!�s#O]=�g�.�0� #�0� #��H��$e��WFI3N��&��J���2� #�0� #�09� q`6lٌ�,�3�\�
%9�KeF�`F�`r%�����D8'+�
aP&U�9�L����Y��hA��\�"�Y�H&��4~�<mh|
Ů(V�N�.]��[�.O��O>�F�,Y��.����z�#��郐���K�.�2�A�4%�j�B���>X�\y�Y��� �ڌ3�ׯ_�#�7l��lƏO�Od�<
+q� #�0� #2%������1�k�<%}0��n�ڵH��
x={�
V%��
eV�X��(:C��Y�4hp��oܸ1J�Y�lY�^��J�R��lÿ���)6--
��K�*�N-X��S�N{��HF���~��I��~�mw>���q���@�~���oY��{o�Ν;t��ۦMd������1� #�0y+i�

�ز��'���V���*U�R�
+L�0ĂG"�o@%�,W�

+T�\��'@>��}��m׮]��yHRݽ{�aÆ�p�
�D@�-Z�p�U۲e
�ʨ�v����;�@BAA�@���vn�
�
ݝ�-J��L�F y+A�_|�E���;�o��!����8�g���{�0� #��A;F�
8`
+��eW����˱c��̙[�B�Zq�D�씔��*۶m��F�>}`-���S�N�0�M�.]�/^쨎/�
�W�
��Ft;wM�L�@ �=e˖ݰauu���]�w�������
��`F��#P���B�,�]
��]�����N��L�9`޽{w���w��u���͚5��I���
.Lnʹ�q��� ۾���aφ!���۷�.N�Ρ�DT���ʗ/��`R����!�S'r
�`F�`r!j��.D���}+N%)��<����ϟ1cFɒ%Ǎ�NN���:v���c�
?~<b;����l������{��q��A�+G����
+�`�a�p��� #�0�@�E at F���_���W��`D�D���kԨ�_��ٳg
��冑��z0*��9��c��ܳg��ѣ#�/��[��b׮]fyX��1q�ġC��;��^�r�2eB����78�?���7.���̙3��⊈����#�0� #�W�/����1�Tt
3FFĎ!��ā�
�
+�Â8k�?��r��-Z��I�&Q��;b��� ���Q
�	�O��)�f͚G�
A��
+r���T
~��ώ��)P��
�X�
���1C8�+�W"��(踳� #�0�@n@����J*����y�W��#�

.,� �І���"v�W۱cǦM�����3Q��8a$v�q���*h�P�X ��ͣF��������(r뭷���G�o(~��0!/\���#��(ï�_~Y�r�s�=ײeK�

��!���ꫯ����D��X�A �U��
� �J�ƍ/�
[3�0W5�t�;�0� #��'�_�Vc"��_YY���� %����ƀ��� N9e��]������ua�ȑ� J��b��X��Zk�
 qjW�Z�/�� �L��oݺ�R?���4�0B«V�
+��C=�	�ݺu�]Y�+������{�]���S��
+s�|�����0�'O����؂x�B��|�_�#�0� #�� �d岬Llj�Ϩ�ۖ���A�zKbB�J%����֏'��sg�
F�LH��M�xF�`F�P�������ֶ́��'�3��3���4��
�Y�TrJ��E
�.���Ty�`E��j�רk�"��)�5/� #�0� #�0�@AB $��o�b���9�c�F���sv/'N��]��6� #�0� #�0y
����>�e�+�upeb9W����d=,]^;��/#�0� #�0�@6#`ČS�Ѐ��G��20.�u
w��r2u�F�`F�`�+nJ�|0��ʺ,7�+�/F�`F�`F�
+
G�0���,����
#�0� #�0� #P�0r�HJlreaQ�솱f��Ǣi�s���~��#������qwT1+�Bw��eݺu��	
+ ~3���{ʼt��`}p�#��nݺzj���\#�ZϞ=��D�1���$���zz��?�Q޳��(q��F �*nj���ׯב�6l�p6�
�D�˜V��3� #�0�@\���-
a_�H�JG���֮]��
��ɠ����$2��̊+�
Eoȟ5kV�
�3/8g5R�!?H�R��̂
:u�w������ի�)R�X1��0��]��iӦ!�`�
=�!�/-����?������9s���9��"����[�����Ν;��
�M
Y{�(��3� #�0�@�!�c]Pf�>�P��#�W�T�R�*U`ʅA��a�
P
%˕+��+W�v�NB>��}��E�<�?ϳ�-[`g
6l�#�6��!�^h�}�Y�V�Z�n�
�0��~��H���׺_����%K�*���
>n�3��P@�@@(F�c|s@�>�"���qٲe�t�Yl��3� #�0�@6# S[땄[9�

C.j�ǎ
�3gli 
+Q��Y�SRR*�.]G/^
�`�Q�pl�+“�>��F�~���z��&Ι�oVZ�Q��Nٲe7l�@��]�U�Pę~� �eF�`�S���A��!6n�A��
AiA�
<iҤ��츻w��[ý�W�^}�����a���TF�i~߹s�֭[Q���.۱c�[�B�k׮
G�1�S�-Z��o����ȍsp3�
+��:�˗���(l�:�w-���y�-�
�F�`F��~,K�c
+�ŕ��>#d\��aN�?��3�0nܸ5r��D�/_���_��ـ���d�رZ�]���ʔ)Ss��}��͛�%K�
>|�ܯs�4k�,;c�s@O�b�P�L�:��xkqyF�`F�89H2���>Ѭ�E"r^k�h�T�^�F�-Z� o�={���冑��z0*��9��VxNO�8q�С&w���äjժ�g`��N��`��鲌�0*4�f͚�G��U�
�B�7H���n��g:���x�s��B`߾}E~�X�&�77�{�̙3��⊈��٥�aF�`���

N���:ǵ����}�~�^p��� qX�
=
+NY�p������C�&M�
�=r�H��������&L�?�C��&��]|��{���t�zF��i�
C�oC\>s 
�1|��z�z�0����O?�1[2'�k1� #�0�@�" �0�����}�#2k�ܵk&0���iӦ��"�#F�xӦMp��ޙ(I~�0�b��O��E�C��͛G����?
 
�U�������r���{�e˖vh�D��k�����`��=5�m۶*T@�8j��K�I��멻��o >n���o��*����{����#
K�ƍw��w�u�x�e�F�`F w" ��.
����
)
+F���/���
;"j,�<��N�2dl�}����4r�H%� �
�jl;�A�7VZt�G��U�V��5�Q 
+�
+�z�!�w��
v��s� ���!؀��

q�
�JVB��eȐ!Z��z�*�����9���α�/�>|8�!���ɓ�O���;�8��`��T�/�ΝbF�`�<d;�;\$�8������n�J��NV+S���l��F��0w�8��	)Ob��#�0� #P���_���v[�6���H�HOϠ��R��6v`g�R�))�-��b��v��U�b��FFF�^2DL��:w�`F�`F��!�� ,�XT�W�l�� �d9.�ؽ��D�Y򊞹1ք`F�`�S�@FzFZZ�XO�O;At9�ę�۲a�O4>�R�+��𖹯�r�

+`ʠ�J▫T�+z�*��2샑N"w�`F �!��>��|�۟�K�2�K��j��]Gؕ
K���ݟ~����~������&
+��^r��yE�܆��0� #�0��)D`�o�_������O�������8Ȃ+�q���������P�)Ԓ�fF�`F�`N>���c��_i]���
�
���'��3�2�*��-g擯#��0� #�0� #��
+҉c��2dH�e#��|k֬�k&-H�� Ĕ@��#+
��~R?]�6t�
Ů(V�N�.]��[�..(��͘T��"�ʼt�R��h�l
�#��nݺ��@��~��	db��k�w��/��R�������g���o(P\ G@R�1c� �����u��
•j����4�D�
Մ�3� #�0�@� `q���!O�ڵk�v9�z��, %��eV�X��(�A��Y�4hp��oܸ1�JZZ��*U
+�,X��S�N{���h�Ѵn}���E�)V��Ch�~���_�p!r
+�{�˖-{��Wc�E���(������,�f���
�x[Ð�ܹs�
tmڴA֞ln��1� #�0�@N ��$�$j��nF
�1�R�JU�T�)]䦆�6 at U�,W�

+T�\�Q:�0Z��۷]�v�y��l�;�a�P
I���$ƣ&Ж�i�:���jժu��������������"
�HI�裏F隻L >n����ֹV� ��� �/��"R����7���В�6e�̖Y#�0� #�d7NlؕeF�x��
;vlΜ9���(d��J
2f���/]�4�.^�8.��D��٭#ʁ�zÆ
��
�|V��8g��Yi��FA �Ke˖Ő��؀�����*p(B��(��
#�0� #��b�#[<�%�U۔;��J���I�&E�9�\w��
`�>�3z��էO��/�
vh�Bٹs�֭[Q���.C8d�w��_P�Z�j�V����L�7��p�(_�<*�߿��c�Y�C—�3o�εF�`F ��4�Ņ�1�a�
+'�0'ϟ?ƌ%K�
7n\k"
~�˗/�ѣ����
�Y� �)S�
�Z�#�V���=q�����wJ��S�´\��̝eF�`� 6��rl_8IV]�^�z�5Z�h�6{�l��t�(T�P1�Q^Ρ>
���sz�ĉC�
����t:���L����V�Z�ɺ�s�gj+���z,Y#�o�>l�_>������
2s��+��"��>�0� #�0�;6b�)O
�Udƌ��~�8q� �IA�
=z!�
+.��~.Z��I�&хԬY�ȑ#>�Fh�j0f,&L�?�C��7A%� �	3��
osgG�������
�r
�}�^�^=�y5E�+�%s�#�0� #��$

DŽ<�s9�"{��ٵk&0�
;! `�E

+,#F���M����3Q��8a$ƶC<
+�UТ]�!��ͣF����&4���{��
P�xW�\��-[�
�Cc ��aN
�1c�8}��@?��
�n����Ih:4�2���� |�8���'��dx={��
�q�A5n�q�10
r1��I��1�0� #�0'����2&���@
�7o��
;v�y�|
@O�L��
6о}{Lu9r$�@I8H`�����J��� ��S�j�*|�FҐ ]�
c�C=ԬY�nݺ���
�
P�
�
ح���~�_��`�
mR78p����q���'e q#��Ç#`
�|O�<y������F��`F�`r;�i9�ę�]����"�y^<����O�nN�����~�@��	)��5F�`F 3�۾_�����ֶ́���W���A����m���
+��SR�/Z4o��
��ZK�����7����E93=�:� #�0� #�0�@�B��l^΅ݠp���ĉ�Jۼ�g���aF�`F "`�+��Hr����V��������W���^�4F�`F�`�ĕm	�r%OZ��䶳�W��m��>� #�0� #��6��Pʑc`�^�>� #�0� #�0�@� c�#�5��ܾ�c�5F�`F�`�N
�ܾ8:�
d�\s
�
�rp�Y�a�r�� �1�2`e�C�a�I�[����G�E����'�
�d��o./��b�ffy��
���!�~�2�Z��
+����ԩӥK�u�օ��O?�p�V�Z~�����)����T i�Q�>}
8`�����`F�`F�A�����I.�ܕ.\�\zȾ�l�2d����Э����۷o�O��(S��޿z��"E�+V
��*BN�^��P��C
���r�����W*�4��׳g���(�
j(�b�
+l�
+Gȟ5kV�
n����E8ꀅ7���*U� a���?�����H�7iҤ�Ba�R��o -�O<��NjC��pF�`F�`Ol���FD��%� 
+�|�
w��T|�>��>�d{�J��`����A�[�jպukl84;�޽��a�n��}�R�J ���,Y2�tRy�kC�@��N����ʕ��ʕ+c;T8
+@>��Hjݮ]�ༀ(Lj�MP+��w_jj*2�a{̘1����fx�	���g&��(}�2� #�0� #�0�n��C��-�r�my�޽6l@>j���\�����#ٵ.���=�l�۶m�c
�뮬��cǎ͙3�
.@��K�.�k"s�aV�߿��ѣ�����
<x�[��M%b��̩��F�`F�`�0��E(2�nu,�,���/(Y�Z5���\�t�#F�S-Z���ܹs�֭�_~9\,v��A�Ĵt��u���͚5sH���N�hѢ�ө�/]��
��3] ��ݻwg���r�-U�V�С^*�ի�P�a�nҤ������~qEF�`F�`��eZ�_��8�ײ�`�S�L�_] ~�|e˖�sÆ
�ϟ�]w�u
;v|�ǎ?n
+�yX'�p3iw�(�3f̀�Ƹq�r�NLLDgᬌ���ĉ1Q8�s���!�v�cF�`F � ����b�Y$:�
0��Y�=�[o�uȐ!-[��G�z1���\0��tY
0` 淁;�3��V�zu�ԣx��j�<��h����0�醑�$0���9+>
�˗�z�W/�Ā�(㬳�����!(.�0� #�0� #�����p��9��Š+b�����,���Y)��-_�|�ĉd'�0a�}
:��`
<wa
�/���-�Gfl�� qX�
=
+�]�p�(B��!>Y�N
�lF��&X #�0� #�0�@\H�
�5f
�A����w����W�\I���ŋ#,�"|2l��b�Y
�hDF<
����f$��$�~�PyL:D�9����
<��!�i�&(�ҡ$��!
+Fbl;d�0"iТ]�!��ͣF���1@�B9+���!+mq]F�`F�`mWV,9��2"��5"�2.L����Z�Ph�̌
�e�fi�Z��?~<��pޥ

������Vm�W]��4�.f�y>#G�$9(��r� �ƶC�M7�BO����7�B�Z�j�̙��Ov���j��0� #�0� #�$��~��5���IG�x��_�?9`���
F��� b�G/�%F�`F [���������ֶ́��'�3��3���4��
�Y�TrJ����2x��wWkis�_רqaW���#Z���g,�`F�`F��-v��X|�ܢ��
:ܲc�;N��M�S7�0� #�0�@�B�F�=���R�����z�̝�ܦO�z��F�`F�`,��e'WNL0`�2�t�e�ƩR3��s�p�vF�`F��G�{��
�y�����0� #�0� #�0;WV,9F��2�����; i<� #����T 9z�N�XSF�`F � ��
�n
�*���\s
���r��Y�a�z�:��yH�=�91���nݺz*
�G�=*��'� Sɒ%Kh����⋡���	��Y
��z��]�V-����ϓ�~!!)y�g�|�>}
8 at U
�kM
]6���q��
.��gϞy�C��'�
=z|��G9�ht��|�
.R��2�J��G��F�`�\���U>��
.D�:d!Y�l2�������o߾
?����ؼz��"E�+V쫯�r�9�z�B�=�Z��/�\k-���b�xV�+�|(����N�4���Fb��~AO��7�x�믿~�'�<뭷��b�
+lGAկ�$ڴiH4�E�9�`�)���^˩ �q�G.Lwr�`����fF�`��C�3F���s�=�|�
w���w�M�UDr;d���Y�fa[�unժU�֭���Xf��݇
v�
7�C�*U�b-ߗ�|�>��y��������S�:u��w���;��"=���_�~:!��+Wu+W���(�ϯ���~�� @�H���9	`$#m�y�Ж�#�v��СCJJʏ?��\�]�vպQ�K/�@�{ow�ڦ|��m��
i؟y�

�N$��Z�I���;Q
&g\�n@
��;p�@�G�����z��T�o�I@��`F�`�1w�/��l-Q,���ݻwÆ
���Y٤��
<�1�K�2�x*c�#���mۺt����+�m����k����E�z��
+66nܨ���K��
�%9�e�����
,s(q��� 
f���F��"����z�}��9�#�:�!��
:�Cn���z+��Ν;�i�����x����
��v�W�/��⩧�r+鐏$�𭂆-[�W֯~�O&��#�0� #��(�%i��Ɇ3�o��5[�Z5��`.]�4�@��)k�Ν[�n�����b��d�.li�.h֬�CZ�
t��E������_yb*d�
Pg�}=����޽��_nҤI���_i�ڵA�ɯ��\�@�F�p����g�
+��/-xOû�9s
U^y啥K��(�p�!O���6mڴjժq��u�ؑ
+;v
���ܚ�u
+�l|9�w���!�D��:u��?�w��~�	�����k.�0� #��b<���	����`�L���Z� 8_ٲe���O����ׇ���:<�{��Ǐ���7�dn&��2]��/�".
�
�2ѯu��b?>����
>�i��IC FYpP|Z	mq˖-��;w�1cp$'';��[��|e*�
�ׅ�����(�� �p�0[qȇ4�ӼC������ #�0�@�F <o_��U�VE���
�
����\����ٱ�\��7]�
 W�={��
=�l>�:�G���t
+��Qׯ|���QR�`T�79��_(.���[3�:�L�{��b?���
�Y���L��s�/xA�.��W�N;��r
\&p5�B�0a�C1�
{���}����}��*���C�%3� #�0���Dz-
�
A��ίѲ�U�X��
n�f�P vP�z�+�W�8q"ىA0��СC�
+�

�oǦpt�B�q��+�y� Lj�A�ᓍHm��C���fď�G/	��` ��x��^�K�|0K���2"�K6c��t��
/
L6ŧ����*�
�OqI�ެ��ʕ��qˇ4|3��K
U���|̹EF�`F ; �l-W��9z*��}��=3��I���_�oY�x1��"|2l�N��fy�l1�	�
�t(�B�Z�bk�V��<˃��~����Wl8���曈Q�9赓(���� ��M�B�۶m[���~��Ӎk�
��G|	G�8pJ�6F�=:F�< v�O(���`��)���0,�'X�u�
+$=$���#G�`�

:W(�'q����?��eɌ #�0���C�����>��:<^�P��G���Ax|„
����&�k3360�m���$��?~<� �p�

��ĥO�����G��v���s�=�*��x�;%:� b�a�!䦛n�
-t���0v�ާ��dN7��s 
�0�j�M �
�ax�M1��C��	��\����Eh
qO�$!A��O��V0#�vR��衾�����pmbz�����!�:��۟s�dF�`F�$#�X�:kV�z��ͲaaY��q��O
���ē�
+7��i�*���R|�l_𲔧�g; ,�`F� �q�á�i��ms�h����
�{,5MocvV(�������?2x����iis�~M�ƍ����_&O�A���0��
x;�W���Ē���&,�`F��^�
ؘ�gsY΍lY�[vl��$�[>{�fi
IJ��~h��LÒ��g��\�`F�8��Hr�9Y�[vlhOh��?����fF�`F��渖��^

nٱ�k��s��aF�`F�`N
�*��"Q��O�r�2#�0� #�0� #pJ���
�Unä�ݕO)l�8#�0� #�0�@~F�����+Gv����O����9 ~0�"Y�f
R �1���
H��=��O�`���
�֭���Qy�����L%K�,���� ��ƭO@w����U2%�����ۺuk�@�ri'�J�����B���oFb�P�� #�0� #�0�@n@�4-;�`D�o�
?�0��,[�
,�L��<۷o�
� 13?�^��H�"ŊCJ<w+�ӫW��c�^v�et�d)���

���l�k׮�}��
�D
y��4Ŕ���ǤT�Rs��]�`A�N����X.�0� #�0� #p��Y���?F���Rw�Bpe�����鐛Zw	fT�ŀDb���A���&Xl8����_w��}ذa7�p�>T�R%�Ћ�dɒ���P�li�������^�ݻ�-��
.���
=z@Ȗ-[`WFw`VG~
+��D}����� #�0� #�0�"`ؕ��2q�`weXI7l؀�̞��o�
\�����_y啺
"��(c�#���mۺt�ҧO�b�՞��9��Zn�aA���o�>R�ҥK���ŋ��i��0� #�0� #pJ0��I�
aVr"@�jժyj
�]��#F�D-Z���ܹs�֭�腋Ŏ
;`v�u�����f͚9�5h�@'Y�hQ :��T4�HMM
(������*U�V��!C����s�g�����۷/�3Nɩ�FF�`F�`�A������-#
��eaZ�2e
+���p` 1-[�,<�6l8�|}���ر�c�=v��qSܜ9st27�κ��`6_� ��'J�@�1��ȑ#�ݯ_��˗�%�u�+����٢0
aF�`F��)<�r���1ߋh-�%����˭��
+;k˖-�Q�^Lѫ!L�3]�
0p��={��
=ڔV�zu�L$ؙ8T?=�&���-���~��(��o��o�
+H
����P'N
:t�q�A˥F�`F�`r���R+�
�bŊ���p;6����SO#��`�d'�0aBJJʡC�t�r��

<�r�ƍ��&T�L�4��鏩��j�
+�K�Y�&��9�E5�:#�0� #�0�@N!�Àm\�rWe�	pÅ_������?�\���+�-`���ɘ
�`�X�;��b�ݼys��@�5�K3B��bk�V��'�M�6��Z�Z
���?>jԨ�>�8Peا��1��w��
0�'%y���j�F�`F�`N!����"1��>$
GDde\������hܸ�63c�I�&n�4�b�����IHF�Z���Q\��o � |r��m۶}�駟�yh��;� �
�
+���+=�ܬ�u��2�+�b�F�`F�ȅ$�:���ի{�{�PN���lX���Om|B.T�Ubr-���kuc�F�`��� ���u��i��ms�h����
�{,5MocvV(�������
<h��_'�8
X>��Ս7������p����4��`F�`F�`# g���$�W�bŕ3A��L�w����
'N��T%��'�?�
#�0� #�0�@nC@bI��ŕ]IHr�}Y�[vlhOh���mg��aF�`F�8�xnjˍL9!A�[vl�!o�S{&�uF�`F�`�\��6-îl��
��ȝ49W��J0� #�0� #�,̹}�+�
�yaF�`F�`G|�8�ʟ~��5�\?�?�\$k֬A�,�:&Xc������^xaݺu�T<*��xT��O>A��%K��~sy��CO�[��*�&+ZwA�dJp�OG?���֭[��/�
۴L���
ѣ�o��Ҕ�-Z�:u�t��eݺuT�s?���ќ[y*F����*`F�`F� "`����>3
F("
.|�ᇑ�dٲe`�V :T���߷oߎ
��(S���z��"E�+V쫯�rˇ�^�z�
;���.���{��Z���`��	�h6ѵk��&<�AG��G
y�#?R
BR�u�]�J��;w�
:u�w��PH�̬Y�4hp�����p��h�Oz��,�S�P�� #�0� #�0
pe�͊<��a�e�Bp�;��˦M�"7��f�ٳg�'���~P�V�Z��
�H
+ݽ{�aÆ�p�
�P�J��XKɒ%��S�>�&�v;�	O����o���p饗���B�l�C/���Yg���0t�A�G��v�ڙy��p��0]À�����=�
U�
dxi�4i�!����C��E�f�p��0� #�09��-FCVj�J�a���T�}����
����+��e�
D{
٭�m�ǃ>}����~�9��Zn�aA���o�>R�ҥK���ŋ3�4���D�{�ر9s�\p�II
!MH�����bYG �ۑ�
���x�#�ͱF�`F��.
��*�u��_~��U��Y
�� � �|�x�s�έ[�£.;v� �ZZ@
���߬Y3�4x#�d"�-
+P)X���f���%=����_Q
�
B�B�g�J����N
�����Żw��vb?
�~�*a�
h�Oϸ��™F �87�x��O?�i�&��L�81Ӣ�"#�0� #��$
vc�_�Js

"��t�iyʔ)��
��ܮlٲ�ݰa�����C�]w]ǎ
{��Ǐ�a.��D�L:[`2��/u�� �)"�1&8
9r�\����|�r�d��eӧ"^��p�~�8c�
8��7.T������@���]~8�
�'ڳy��xeryF�`F�8U$	^�X�v9�-�%����˭��
+;k˖-�Q�^X�j���L��

8pϞ=�G�6�U�^]'	v&��OO�	��۳�����~:
+���o�[�BRC/�.ÓFġC�FᲺ"�ʕ+W�>~8`?�lѢx99�{�a �a���j���v
����A�#�0� #��p&�Vve�BcG¬�+V�,4�۱�
+ D�N=�l0��5��x„	��=t萮R�\����P�����P}���,�?f�ժU+�/�f͚�7Ͻ3ۅ�I�&M��
Gh�0ۣ�w��Q�c��Q��-r� �bD�.�#�FA@@�S�vm�`F�`r71^lƌ�|9�,'$�
~��.f�\���+�-`��k���6��p�	St���O����Ҍl���ڳ���	=7�+Ed	Z at t����G���G
+�
�4�z 8b���p�&���w���:i0#ƈV�ڏI���P$��o�X�)��.�� |�z�����Çϛ7�O�	O�nݺe�X�0� #�09���P�ly��7F��2���!�2.L��FSx\4n�X������,
����Ǐ'� YNh�GG0q�
++B���ӂ����m�s���yh��;� 4�
+���C=7k#ؕ��+CB�Z�j�̙Hڢ��Á���fu�� ]��8�=fU�Y�|��#G�$9�z����
�����W��?Ƌ
���<���aF�`�lE�
+�\�F�5�W=��=D:/'����l��J�����|� blG�!bb
>���.�R��0� #�0�@0���W��i��ms�h����
�{,5MocvV(�������
<x�뵴�O�nԸ�-f\Fb�XD$^F �@�|48��3A�៣s�g�|��0� #�09�����C�eI�������
o�,)�rn�'��\${�
K��ã
1�֭[���f�\��0� #�09�@"�`<������|o��s��[����<Q��|C�������4�}0
+,�_F�`F G8y>2e�r��-;6����|N�:����e�� #�0� #��u�C&#�
ny
n֟`F�`F �"�C�Y�c�_��:�Z�s/��#�0� #�0�@�C at pe/f
Ζ?��S$�_��R.�5k��e��	&�F��Lr�����u���S�<r�Q�O>��J�,YB����_
�ޭO@w����U2%�����iкuk�p����r�ט̇
! �)�[ps�@���>h�$���������q뇿ޏ��\pAϞ=)�y��r��Г�_
 �Θ1c������#bw�v�aÆp�����N�:�NH>����'�<�'Q�`>��C{����7�D���dɒfs�O?1쑁>�_|�����,�`F�8i$9Hq8G��-\��吅dٲe`�4g-������b� Rx�)SF�_�zu�"E�+��W_��9�z�B��jy��Z�����H�>�&�v�܄�� �>�<��G~>$҃�
�뮻J [...]
+AӨb�	h�O�FW_}5r�h�~�c?�i����ߣG���
/��뇷
PF\2�;w�СC���in���x���F��i��j����7s��
$-��]�v����W�?E�
\�-Z�����^�J�l�/
dF�`r�
���'[D9Y/W��;`�D�e��� K3~Κ5˴'�:�j�
+&Xl8����ݻw6l�
7ܠU�T	�XZ���� }p4���/qO����r�Q�b�wܲe
�����%$
=������ʕC�ʕ+;X2�b����޹s'��f~D?�i���q�q�t�Ƹ�W(�� �)�
���x�]CBw�RRR~��G�C}a
�9�a�E�F���S��[�ٜ��W�̩n~`��cxy�����O���; L�˗/����	�0� #��K�(��,�`D$˰�nذ��A��!�2����a?F�e}I�A��Ǒ�z۶m]�t�ӧl���>X���t�r��.؏�G�U�ti�]�xq\M���'>
��nZ�3�.�C�����Q�z��:�E}��p�	�L���bx�*[�,.�&6��o
��x�BR�}��e

+|cAru-�ח���8�+��Bx������
f�:u�@l���F�`�����I\9�2'[��@�2y�V�V�S{x�1$R;/�l�u�Vx���.�0�꺰��k��t�Cp���;���T�>�&�e9�������+�T�Za�%m!�0����}���a/�i��-�"��#�ܻu�̵��O���C�ٜ���v��xE!��x�W4�S���ˣ;��)l�:�;F�
+
+*�O����rΜ9Y�8���
+��a�3�
����(/�i�˭.���l��$z�AWǠA�HTrrrֻ�F�`��E@`[l8eW����5&�)S���� 8(<�1�h�����u�]ױc��
{����f��`ʥ�ͤ�)�	�R�
П,v ǘ�x��2��?����:��_~��(
+�q
�{!L�f�L�{��!��

<X�ؐ@?��޼y`K��֭����S^F�(��0���5�\Qe\�I

�(��
�Ƙ�K
�Ct-�ǧ�;��`�FF>^K�(`��F�`��� e!ʬ����l8*��,�݈���˭��
+;+�O�(�.f�Ր
ȁ�<`� 8 �r��Ѧ4���
��ġ���i6�,�����O���~�
a $5�+/�$0
j�С�ƍ�r�ݸ����M(�t���p��d,G[~�c?�ʰ֬Y�<e��W(�nM4uȳ��α�oP�À�0pv��
�&\&L�[��
+�ʻw�6}$fΜy�W�M�s���4���r��Q-
����{|$���{�a�GtE�Ձ�d`�`F������~ጯ�՗��2�1k��vl�`w��e�	C��`�d$!��
+�L]4vMʍ7f�P}2!Ӭ�?f�ժU+�/��� �Nݖ�P��8����=KFi�FG��ж
�j��$�����x����h�n¿���hO�z��𢡊�\bV%&����UW]�������&h������p�>A�N�������(�?G���
��v��O4��`F "��ͧ|0�[��4��O�7\|]}��w��`���~
�$>.�.�
c�
��	�*
pZ�Z�c��7��g+q��;� �����# �Q�>��#�@A�A"
�1�'
+c!�
��=�yj�1���R�Sy���$��v���<
�&�
+Т�ſm۶��#x\��r��>+��$�q�P�f�ƍ��n\8�G�y�`��'k1آ�Sy�77�ᆜ��2�,wLB�+o�3�٢��~}DHD4�	m���ʣ#pC���Mn��F�k��K�$�|v~�;� #�0���lqe���H8��� �0!?��q�����hҤ��,�o����S'�q^�Xf�
+ƥOh�5��O�|�駟F(Yh�r!��8c���N�Yw��
�݈��n��l���� �m�Ю�
���Q��&B���B�>T��2�
x���
+
>
!S�<y�d|����ɂR�|���pb	�#
�
�� �Q�F��A�GIL
�����Wތ��W)]��Ý�_�_W=&�"*"����&xe���h�K	�
�B�:��
�;���8��`F � �X�F�5�W=�`�v��~�iO��;��M'�#��I@��
��0� #�0'|��k��i��ms�h����
�{,5MocvV(����|��
<���*�+d�z�F�'i�d�4##l^���;��0� #�0� #��,�xp�_�:�{ٲ���  �o��>�M���/�gF�`F �#�X�f�5�V�]�]E�HL�^�����u���@ O�1��s��s�\�6}r��M>�`�3��eF��
d�Ɛ�O�r�`�^�}Y��

��A�[vl��o���vn�'����F�`F�����
�e�jK,��#���3� #�0� #��N�B,�r���f�e�F�`F�`F��!@6d�.#��Z`Tۑ-���t��+ at h^�E�f��l"�1ID�ad(�
l�'��"�rݺu�T<*��T��O>A��3�����gʭO@w����U2%����j��g����N�h@\dL�C�n��fJS�he���z��I��pp at G��q���S���z�
+r$�3f
"
#�1�k(xy=p��	D�n:(5l��ZX�Y4h at Bh�XN?�f/�<���S�
ڃ�2o��&b*��Hdc6���a�/Z�>�_|��3�/��0� #��
+����]Y�D��O��p���?�0��,[�
,�LʅT۷c�`Rx�)SFwr���E�)V��"�{9��5v���.����9Bs4�����*�O�A�A}��
�#?�C�A�.U�rO �G�N����z��
H*��!Q_�
=t��p�ͭ������\ ���ʈK�s��
:t 4pR(g

� ����F	�`��qݺu��7R-YБ;�-֯��S�^ i���ڵCV���"A.�-Z���G¿L��+2� #�0'i<NLT$Ynj���4�/��\�`�EJ9��� !@/��5k�iOunժL��p�ə�w�>lذn�A2s�jەX��k6�_�������
8\z��q�l�K!��:,p@	��BO3)S�~}�	@t*ĸp at +~����o��
,���
��F`��vY
	B۫V����_���ؕ/��dC�
P�I��ȑ#��N-oq�9S�_y3������c� S#xp�v$�

w ���/_��k�e�S\�`F�8�&c�!���Ɖ�aZ�����tÆ
���Y�}����
����+��e��D{
٭�m�֥K�>}����98��ɜLw-�������}�Z�K���ŋg�i��>� �*�\$���gE�L(P`��=�lٲ�dl�v_�	�/�\20�g(|c��Z
��d�4�	G����]/~�	Hk��ԩSb����0� #��"dl8k1|0
�
�A޴ժU�� <wA�F���w�ܹu�Vx���.�0��p~�ׁ�t�Cp���;�� V�>�&�e9����0�JժU�wȐ!�-����=��o߾0�E9ӤL�ڵA��ot��8��������L����q
r�>6@���Ѓ>�Kvex(�]'���
�g-�4��ڵ�-�Q
^
0
ӂ�[]^�oٲ%<I�+���A������w�%0� #�09��;��\9Cx(
�r,�r��r��0-O�2u8 �{�"��S��ϟ�]w�u
;v|�ǎ?nʜ3gL����t� e6� 3@�؁
c��#G�0�T|z�K�� @��� [...]
9z�hSZ���u�`g�P}��4�~�{���C�o������Ej�V[���,��C��7.�
C�a��Y��	Et
�	�����o��
, 4���ݷo�˕+G{�ƈ7(��p�����
'��DC}o��
�¨�{�n�Gb�̙W\q��;G��_~h9z����I�Ɉ^�=�0冮�:�
̼0� #�0y
e8�\��2$QVq����GĬ5�۱����P�B��(Y��H<a�ث
:���F

<�r�ƍ��1T�L�4����o�j�
+�K���9���l
�
A?{/YT[WşJƥgv���h�����m �0Ӟz������q�L8*�re�|�(8N�\���	�l��.|Rsm�'X>Jj?+�Ђ[��C��������
1� #�
�U�`�S�������

�3�W�[�&A����`�Uń)A�B�m2���ڳ���	��	����� ��vԨQ}�p� �@Q,
~�0�
�耉=�i�ڶm
+5��ў 

z����?Xϸ��� �k�a��
�q��p���@p-���y�0�b�?�䓈0��}xs�w	�2�苐���WތB�?i�� ���<�)\X�ƃ�?�ܐ�>D����x㍘�Hߗ�L.ȃ���0� #�;�%�#ӱ����ˈ�IU$
GD�U<�aB6���A���ѤI�Y�v1�I�N0�£#X���	�!�f҂�����>���%
m�y�
���[�1`{���ݺu��6����
+Q�@�@n(iK =I������zƅ(������2��&O�<}�t
 r��1��1c�_���+x�
�4Px7��F���O
r�l��N��f\mx�*��
�B�ʸ�11Q��o�j�WV*�{�V��A-D�C�๳��5WdF�`�
�l9Y$��y����z|�ђp�H��AՁ���
�b��ʱ@F �" j�U�5gF�`�(���y�A�nk����������Xj����P*9%e��/>:tسsb����nqI�F��>�A�ĒG�b�F�`F�`��! \,���l���+K�,�I����q�S.J-
nٱA�
+�%��Qt�J�ܦOV��uF�`F�ȧؘ0�`�|����n�G�j�<8�` ��)��"�����������4��Q��8��`F 7 ��>Æ
>w�����Ce#�_n�M
nٱ�h��s�ùM���/�gF�`F /" �0,Nl�"��twr�F^��ufF�`F��+	�3�y/[^˹�a9�`�z2'�3�<��hA��lo9��g��,�`F��Ft|e�"�=���n~_|1�"Y�f
\6��C�ad(�
l�'��"�Bݺu�T<*��rT��O>Av�3�����}v���$��4�2ȡ�Ԙl�o��fJ#��!�~�!���	����k����"�4 �ӧeD3�#�[Ϟ=)�x >�C�����e��EJE����8_��-��@�
=��&b�L��1*p
b<gBH�*9-?�\�`F�8��|��E"�`D��
~�ad!Y�lؘf�k��퐃eʔ�W�^]�H�bŊ!-���Aޯ�c�^v�et�̉�����!K�w�
2�a�,
N��=H��|��J�BndJ�ԩ�޽{� �:Dii��G�-��
���o �
r7蒴i������O�bq�cB�l�/7>xU�޽;�MP*dT#G&����% ����^{-��0���s׮]
9�VN��!�Y,#�0� #�4]N��hWD���������kӦM��Zk3-�x��Y�����:�jժu���p�v҆��7�p�>d��
�����ʕC�ʕ+c۔��h�&M/��®��`F�a�@<:��QZZ��Y9��"�!��I
	����d �S$�c
B:q�'>HD�{�n�t�H���r�������H_(6l��#h�hѢ�
:��������G/6�P�K/�/{�x;5Q5��]�|y�u��D�v$�DJH*��ց�
+�Y����ի�~(������c<L�0W�JF�`F� # z��ʊ;G��+�
������ۃ+<x��+��R��3D{
٭�m�֥K8
�֛'ߦ�N�jZ�K�.��/^
Ws~��%$Ja��a�s�
���| 
0�(B"��q
��aQ~��'��Q�V���X0 ��#��a�_:
N���H�(�4�x�C��I�&��"ʇ��O?��o
�_�ߒ�f�J�Ŗ-[�+�B|�?��_��Dzeˎ3�O4#�0� #P�p�#�KeY #8	y�V�V�;x0���1�X��v��	���p��)
v2]Oq|>n֬�CZ�
t�E�e�<�g��7h-n��� ;�>}����G�� �C��U Vޗ_~�I�&��k��+
+�Q���y(555X��n�
v����ĥ*�C�Q�F8_o��v(D*T�7>Y���w�9s�8����+p��Q8��C��bF�3�<�y��U�V�7�
lJ�(�������駟 GI�믿k�v�����㛌��
#�0� #P��?�t�k��/��r0b0-O�2u1�8X����������C�]w

�p8~��)��\Z�L:�S�5L�f�9`N�a�o =
�\�&��IZ����
�)�����1�k{�����5�:����_P��pk��
+�;܁��yXpq$'';��[HD����)H6h�f1*��R���<y�d�d����>rF�`F � `pdc3惡��#L�Z�*�L�e���[o�G^|��G�wA�j���e> p�ܳg��ѣMix���
�t��,
��dJ�u�'N
:t(Ln���ϴV�� ��e�ƍ~�!���Q� #%f�լYӄ( �P�]���x��}
g�/[xv�� ��mڴ1]&L��� ��r
B��j
 aDǎ
s�q��.Tq�M�>
W������Ê&!����j��0� #�0�
�.ۜ_E��_\+V��Yq�c�{( ;(>.�N��ˆ
VJFbLf:t萮�ig�aS�	� �<�S88�#G
��f�P��Egp Pd3r�)��.@�Ae��9�o��橧��������_�(�`��,U
r�ˈ�.ٌ���t^�,�O+W]uU�?�[>	$g8�k��/�Q�K��`���	
+�.���&�����p��]e��,�_0�/��`F��!���[�f�!᷀�	���}�����
� K
�X�
�cj
L�p,�)KO�)�%��X{��cf���a?��0!�H��{���&�yP
4&� ��?�n#� -&I�۟�Aֶm[��j�լ�TaS��18|j����^pO/˜��<���NG�8�ND�F�="Є�
��<�����>O�;*z�'�����yN;�4�y'�Dċ�c&B�`?�
1�p�q�!�����(��28�=�܃O.�l �LU��
�)�^3� #�4,
aR}e�&я5
+���	9���B�ffl`��,��p�Ō"j��K
<:�O��ŀ v�v�:�|H�]@
�ݭ[7ؕ���C�G� � ��[�۟�A�Q0!L�#O���q`�:NY�v��!���9���ܹ3�0�|�h
=z� ,��a�7��b�)>|�����G�S>	D+�L�5���;���ǫ���a��s��.=H��k
o�� �xM��N�P��3
	�<��IgF�`�^<8��9�Z��O7K�,�toXm𐡫��3_u�;��0p��|��g)�x�/xY�Q�ٮ0
dF�`N�q�k��i��ms�h����
�{,5MocvV(����|��
���siN��8�n��.id�`(/�����yn��C J1|(�HN,9-?'tf�� #�0�@^G@���D���ȝ���
y%zC^�?w��ܣ�����$�
+��L+�F�`��� Y�U��'N�~�#w���
�:�����.���cF�`F P�c�i!���Ld:Z�):ܲc#���n�y]��ƃ�1� #�0� #��p�W����@��j��) �F1�TAE`w"F�
�E��
"�����p���F�/J æ(�����2��}g�ܩ�Z�g�yK2��}��s���>u��s��r&̙T����������6g
aYT��I���&"" " " " �r`�o�_�)�'�[�t��sq�36y[׬YC�,J��$m���K/����wbHK�w3�^M;�́�%���Kr<7mڴq��v��+MHNl
����n���7�. �H�";#G�\�z�����L�� ����T�~��S7��&�g+;���aP�jT!�?>Irrb8y
(�K�S�����/ٽ{w��๑J�üͭр�nJ'x��K�R|��� [...]
j���+�߸���

8�k�K�.|4���疏�4i����.�" " " �N����$�O� �Bc+S�
�,��Mm��rU���׿Rޙ
+�T�
n�?%�H(k�5j؞mڴA~�Tף�p�
�q�5r��)sM
���
�7n��*)��(��q�3�O?���}'N����%�
�}˯=��+�D@D@D�"H\�>�-[��X��zΉ]k֬y��w�Q���;q�ڲ�~��%��䥄��d��0�;v�X=�n�w�1c>?
�4�!"J���ڵk��0=�!"(�(u� ^� �n��3ĹLM�
u�QI'֭[7\��l��������G�y��x��ٳm7
XS�w�ܹ�7n\�vm�v�ڶm�~�z�L+g޼y�Ǐ=~�
��@ݺu!�m�6Á
Lg��lٲe�� �˯�����E@D@D�$X�c0b�0"Fa�*���c��ݻ�(a��_�� ���xG�֭�n=z����w���ir�!��^j֬Y�]��r�ԩr�3&z���Ǫ����Yk6> ��_�`�������:����k
�fr��ܠA�2����;��K
0h� ���_���
��
�p��^pΜ9�6m��X՘���7��!�ȡ�(g�]M�>=�x���ǪCE&�u�V�_�N
�;�
;v���6lࡇ�� "���
Ss�
!�$F�f���'[Ұ�W_}��?�뮻H�FF��{�H�k
+ȋΝ;O�2ż�@$�7n��C�
;6;;{�Ν�c�U�F�е}驤�D��p���M�4a-���������i�<L&Jn�ѣG���`ѢE&�2��}��GZY�I߆#yĈ8��ڃ���
_V����H��L�'k
O�o���Ѽk��jԨQ��p�GIց5c6�
<n�>�R�X	p6mڴ���s'y�i�q���XG�p��&P�Sy$���N�w�c�=FfeVڑJ�8k���ܳgO��E]D������ڃ��&�
2d��3��M�A�/<�@Ӈ�V�ZY���C��pO�2q��f��#��-��!�e� �:	�H�=a��{$MnX�'(�E@D@D��ȪwB�ŋ�������W7kp�!�^]�Xh�"P�+��:VD@D@D 
�8�
�s��nv޾k�O�s���1w��g�i��^ͪ��
��}g�С���쀼�q/�m}j�S��q�M����t���������d.��x�<C9��Q����ɞ
7{Fq�/�" " " " "���ž�}%�[��=;6�X�ND@D@D@D@J��[�//�rI�c�'{vJj|�#" " " " 
\�6g�-H"^" " " " " 16^9^޺DC0tD@D@D@D@D #	�Y��`Xc9x��|@z,w{��G��5k�=�XJ�o޼��
/��yI�M�6n��.�3rH�l:����	F��G�!���۾}��c���
�O�Pa��%�
�FI�.]�͛p6���>}��:�m���5)l��T���kGJ���ȑ#W�^�|�r���E���y��'�a�%U$�QD@D@D �	�le��֣
ݳ���������9���^{����Mi��~�z�1�.]J1��ի/^���I�n�:Z()r�!�ط��e��� [...]
ms�������CF�|:�1�X(ݷp�‰'r�Y
�ϟ��(ͥ�������7Fn���r�P��w�}7
�;�g�-CMO�]
�
;z
�K.�[yǎ
��y7Q&�h�6Bm��kժE�9s���c���
99y�\���˼�{��3f�kĐ*5$$c	rS�v�+V
�!��j������ѣ0�����rL���0s��cD�m���m
�ٳgۣ�u�K��M�m�ƍ׮]ۮ]��mۮ_����ҁ�q�Ç�PN
��K=z��V�Z�ښ���ܷo_�`��؋25�y�y晕+W�;w�+$`^VA��Ǐ
�o���!Cԭ[M�m�f�a��^������!�J
�(\gg��`ܥ��H�֭�`��9f�޽{�ֵ�*`
b:��ڦY�f���Z�4i�Fc;�r�)�2k������J�믿
�5�ʘ�ab|�Ł�q-��>Ls�ԩ��3�0�
�e� �P�PUJ�����@�#���_f�匋{��-�s�aÆ������w�qV/~�A�ٔX՘���7�yB��v�:dȐ��:�U[�n+W�|��׉6=a~��]&|bܸq��w_��O
+�N���M�6Ye�
&K�3��	���
;T�g��[��G�:u�6�r�����׿�5Q�����@����
ec$G0���~��W?���Didv{�����]�U�
;vlvv�Ν;���7�S���͌a:A]�?��~�!��g+3�lS�L1-��2�,�ga�-��ux� 
�1��f�&M����
��
�����d��(" " " �'�̓]�w�}���l���/�[���Lz8
�#F��ن/��i�:u"�1;��
��$X!f��ω��l��o&N��Z�h�C=��:4�9Q���{�gZ��e��kԨQ��~�;nD���
���M�6����]!
�����(�
+��
X3A� " " "�H��u!�v�_d�2k�&6
M�8��={�a.��"�X�G(��u��Z�(i��N��0��f+>$�ӠA*��p�
�S����
%^9Q����=��e������Q]�e� ƑT{„	<HL2H�����yIa����Є��A�3V2z4=b�!�Ϗ��P4qH� 9��8J�������� 1�~��
<�ۅ����������s���{��}h�W�jv��9sg
z߰7�]Z/�x�������g(��X.̴t���������d��B�y0�(���aKI
�ڳc�v�$M�E@D@D@D@�
�e��l�I^�r�x�KĦ���xq��	Js�"!���X��P��M
��)�"" " " "P	乒
�^ ^�y�bX�e�4Jg�� ��X��<I�L��8�)" " " "P��E��&�r�����
��
}�Q�[�f
��(�gl޼��
��5/��дi�ƍ�%tF�y�g:�
��� ��<5����o���9�2x.d?}�C������(]�t�7o^�����
�O�>�K�
��c^�q�W@{���*���9r$��/_n3�hтt6O>��a^Rͱq�TE@D@D����l��2���r,
F*�0���a�ֻwo�a�^{�6��~�a��R���Y�t)���W�N:g&��u�h���[����>�,��n��P‰��۷�z�5k֤6Ļ�{�Wnٲ%X��}.\Ⱦۙ�Ĩ��7`\QV���	�C�8p �<we�l�ꪫ.��2�3�ѩJ��S��" " "P^	��������7^���W�}�����˃�X��/(�wx�V�F
3ޭ�����R��2������S�}��
:t`�U�b��鴼��k�۷�|��aD)�~n��C��]�����/�`^0F�S�};�0���mڴ�a
�o����4?O��e,ʘc
��}�kM�8�K�j;�|�e��B������@y%����]���s/��邮g�wi�4�.����2�
e?�8q��n<�w�yg�^�l9h�c�b(w���c�^r�%��;v���̻��qE�a|�)m�jբ��9sR:ʯ3�
/��B���:=�~
�DI	)E��Ԯ]{ŊFv�8���G�
Y�g7�D@D@D@2�@rS�`
FJZ7o����={�=�[�n�x	�$��6nܸq�ڵ�ڵk۶����q�ڷH܆�9|�p
�� N�ԣG�nժN�`��!ܹo߾���
����=��<��ʕ+ϝ;׶�!?�Catӱ�@�nݺ��m�6�
;����%F��
��LPU:�����@$�N
FN~-���͘1���hݺ�=���?�,޻w��K��,�ɬm�5k�;
��I�&��m4��)���(�v0xK��������[���
&&�}�����
���P�tl�����|=�������Ka1��|�[%�H�<�O|'�s�
�Z
,������^���
�)/��1���o,n�,w��uȐ!g�u���/�V�\���m
z�����K�ĸq���1cƄ�	��:E":6m���II~0���cK��֭[����qg�
�;DN�_��מ8�RW[
+��������H���
L�ꫯ~���w�u��W_Mf��{�������j��cǎ���޹s�U�� �
����Dv3c�D
��?��Cq�v\� �L�2%�&��C9r�:�t	�	�<F�&M�|��'�JDe�M��,���F��I ,#f�2-��9n+�%TN
+����j6c���-ie�W&=
�#F�l�[�j�N�:�䘍
�ЅYrG�
�����D}H6w��7'��W_-Z�衇
�u

��\L�)q�
���������3����t^
��^1/�5�aӦM�߿?yW����"�`<ڲ�/�֌���rC 4#w�1c9�b.�`��]����Z7���F����ܳgO3�E]D�����t�ncvX�%
�߹!���lŇD}4h@Őn��p�?���}C㕙
�0�~���'*�Dlr�T�rH:/t�k/7�n��Ƒ�{„	<�$d�${a�k���&"" " �@R�7��_4]�xѐ�˾}�/<d���F���k."P�li��
H�E@D@D@,b �h�
<�ۅ����������s���{��}h�W�jv��9��y���
x㳘��Y�j��-[��W���k2Gp,�,���������@� �
qf��`�K���(s���M
�ٱY;���59
wq��E����-�Ne�ڳ�Iġ�HD@D@D@D��H����\�LS�i�=;ezRR^D@D@D@D����8߇
���;9V���#H����������6^YVr�8��E�#p�1ǰ�l5j�(�����R���YT�
��!��>�|@z,w{��G9l͚5TڣD��y�f�2P�׼�RCӦM7nl��9�w��@.d�ӂ#���
ү_��۷�>�
+�Z��C*��/�5|�@�ҥ˼y�癗;h�>}ܗh �#Ǽ���7������
�%�OcR==��K3_m�	\����ߢ�O���O�
�<U!Q�G�_��
U5���r�AD@D@�r
��Hb���`R���0o�ݻ7�1I�������:�?�0�~�w�n�,]��b~իW�
�+�zݺu�P�íh�|��g�}��x��v[�iK�g߾}��Y�&�!�}��+��r˖-�r����p�B���T'FU�%@�㊲��8�N0b?nI�
�3�pꖔ �D)�������������&�c�(�{�Q�E�(r�GD@D@�r��m�XC*�ʔ�;<o�O~o��V�CS��������ō)ܾ}�
:��ܽӧO���^c߾e�S'o���Q��%ꃟ��СCqW�����)�|��N�:�9���w;�i��S�-@�㊲��8�u��-�z�>S���O5�7�|��h��FG��jժY,�]vYvv��
(�nk^ڣ�8�
nҸ�meus�+?�pݺu��׮]K5x�kV�\�t�uРA�)�_���W^iذ�iG>k_|��߱c��)�x�<�0н�޻|�r>##G���=r>�`n�~�����0qne��5�ƌ���S��'TL��L;ϋ����>{�����M���rR�'�n" " 垀�Q������(�y睽z�����o0�rǎ
=��%�\���c��ͼ�H
W4
#�Ni�U���̙��Q~��m~�r(���'ߏC�(�
+�p+�q�|"eQ ?�Dx��<�*�/a�bS�}�֭���p�f����Ǐwߊ(�G
y�\���o���n&���:�,le{#ǃ�'�x�]�v�U֮]37"|�><\bF<�aP
+��u�]���n����"��
^~����0�?���v8L�6��?��OF�nݺ��誫��н����6�>t�q��&" "P^	`
W���^��y�涖��ٳ-#~�pm�^��8c۸q�F|B��m�W~2���0:������L�ԣG�nժ^��Ӑ�?�}��E
�
0`����
s"�W�N͝;�
+IC~ ���x��[�Z���V�r/��SO=��_|��Й֫W��\�8J�W�1c�琧�z� {ޝ<y�}+�|
�s�9�
���d�
�& 
+�.V�=�܃�����7�y��g���j����O�,%+¢_�>x�{��y�_9|~�6�	mb8,�G
yd�ԩvmC��DO�
�uP:oT��;/?����=�� " "P^	�`�1��`
�ﺭ�ѺukK����{��u�}����T���#�Y�f�d�)�4i��A5o[�EK�2k�������1���[c�
&&�}, \�n�T�s(�n�ؤ����
5jT�(Vq��d%\�K.tʄ(GN<=
\
٪U�z��D!�Y�
&����i��
$Jf)-W8+�q'L���!=Cg��G2A�c{��	�a=��.~e�]+9`\��u��w�f�[
CɝV6}�>��C�" " �@����K'���ﮭ�a��v�
w`���% Ҧ����t�G���O�r׮]y(��`7��V�\����[z&����K�ĸq���>\k�r:`���:*�OJ�9F7{lRni�ky6hРH� B�ֹsg7d��t|@.��RB��@�1 [...]
�Dv3c����O�dq�v\��aaO$�$T~(�BN�
�ȭd�-�ˁR�p��QF��5�P�D�
1�-��ʺX���X�D�F�={�K����zA�v��vL
AP<�iٲ�G�*� &<�2}x
+�vH�o�M�����Ž��
�q
S��s$\��#<��%a�E�
���:Q� }�*�rp�j
+" " ���.��|N-�J��\H$���j6c���-�p0xt��yĈ,W������E6v�$f�
�_Y�o6k�$��O>��	��iG��\����ͽE���l&���f$HU~(���bP����z��[("����yR�a�<@LCO�7�հ�xD����K:VR��'�O�q�z�G�,��ˍ+�Y�G�ڹc$h��*!�8w���E;��ظ�\s
�JX<`W��ɧ=�>F>q�,�C>��n��v#:w�+��ج5

׏9�O�
͑�&�I��O��C/ u(���\0^9n;��
~h	&6��!+�潺袋�� *�P
+R�Y�1;�Ջ��7��1�͆in�%���^lL©��?��
�W�5
N?�t�`"6�G��C9$�:��G�
CǍ(G�B	���`}V��=w�څ���0}���oaݲ�(#�=�@��)ؒ�7��4!�"ۨ����s���[o�꛵q�0�Yx���o�z�$q3�ù�e!,��sc�z	$������0�$G�f�'�|2�	������M7�ԤI��q�h 
��<
�Dl��z&ՇCR�z�����@�%`��xF�c9�FM�,^����fn��99�O>t�!�&�����9Ks(I�
a����
/��q�*?U�KK|ɬ���S�3U��_D@D�| [��Dz������w��i���9���=��>
4֫Y5;{�?�ͼo��a[c��ܧթ��,��� 
B��1�֚�� �z�=0�G�c+n���i����������@	u�R-�e�
�c�B{v�R�
�׫NY�?��
�9���X��*V��MU���H�G�-LO�ۗj�r�*��mZhώ'Gi�i̲��I���  �%�
+��"" "P��&pn��<�r^���o)p�M
��)b��&���_l`$XD@D@D@�%�k�g	_<�ils�SJ��
:ND@D@D@D@2��[D,�Vv2.g���KD@D@D@D@��@̓l
�xf�|�r���XJ�ؿ�X
2�nO?��IW
+�'@~b���t>��Lr
S�v<BL�5k֐~�R�%�_���K/��ITƤ�5�*0��
j^R�iӦ�7�K�\9�HY[�$i��߸�u%7�	Pd�rt�W�^�|����֤9#����T�~�?Q)(" " �@�D��vc�@θ��娓'��y�)ABM;�P�z���XϮ�wݺu�4��\��TI���
웁��@�\����?��/���ݻ��*��t�v7�<�ҥK).HM�ŋ�o9$p��`�^�BY��z�:�?��Z�ҥ
�tx���r(�l���^��hF" " "��r-�<C9n6Ƕ�<���R�G�>r��
��#��L�/<����F�%�aj4Ph�}�΁�
�a�
ƾ�L2�LS����/��2Cɺ�ԨQ��oӦ�[׶c�Sv�C��
�u�YSC����߸�
+�C9#@nr�c�i|����M�8��;G�
;���[~�匏�#" " M��;9�T>�R~�E�J����-[V�XA��}.��l�
;v���رc0��5k�}��x���N����t�1y)��	�F��0��$i��ݻwϘ1!P��
+H���ڵk�0sg��
+�AS�2J���֟�7���qi,�k޼����g�
j ����J
+��Z�j
>
�Z�j��u�˖��~���v�����ٳ�!<��ܹs]!7n\�vm�v�ڶm�~�z��ʙ7o����C��7�@u(g�֭ˌ�m�f����{��l�2b��F����_{9�鈀���@� `������m
�ǿ
i.x^m]
bC���L�&C{����?ǜݻw��c>�U�u��n�
=z�Zv[����Ŕ!r��U�fͲ�"��S�N%�c̘1���z�:T(_|1�^�ƅm���^��h�" " "�Y�r�0�)�"iذ������ՠA&i��I��]�2䬳Ί��;���
0`��A��T�v�1��vc]�9s6m�d[0�1���o,�sC��C#Qά�2��[��a���rE`�֭���߳q'Fđ�a�
b��
+�k/Wt4(��me�-.,Y\�,�ׯO�����0:� J)�W_}��?�뮻H�F1��{�0x1_:w�<e�#�$�7n�q��
;6;;{�Ν�!�g�ھ�(�c�R�a
�n&դIֆ��	j." " "P	�l�|+9%�r2Z��G�
M�
+�E�����^�I�
���l���HOK�2�
8�G�a�v��L ��e��������e
�	�
��4�w�
f�5�T
n�)I9�~�fC��ǭ��T��2�UӦM�߿?w���v�y|*,
M\D@D@��W���ˇa��mf
+�<��cdVfE
.�P�,�J�b��}Ô
qX�&a3�E]DP����Ij���t�v��4���uo�ӪU+�7r��
�W&���l��D���*�,"��%a
ɹ'L��s���
+#�R7�L �ux�_-Y�xĢ�l�����
���9
������++�JO(7�e�K����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3w���>��j+�վ�N=���Z$��&"" " " " EB�Y�G&�,^�
Q$�	���=;Q�d�r@D@D@D@D��ps�Q��:~�-3�is9{v�$���I+�L&�_�$C
d������d��MD@D@D@D����")�3��" " " " "P�
+��Yd�+Z��&" " " " e�@�V���dX�
�>���XԴ3�~���1w�\�=o��F����cf:�ۣ�>j�����k�˹iӦ�7�K�\9���6�- �g�e��J�'@Q��#G�^�z���67Z�hт�6�ֻw��W\������$'P g\ܭ��cy���}����]۶m������a�f

�͜9s��͉c-]��"իW_�x����Cyj����+TI�qCT8p 5��t�B!������.s��ek&M�d��kO�R'��籎��}�ѵ�^;t����?��gB���5jX�mڴIZ�j|�۷�С;�2Fi�(Hm��R�~��%���
:�1�@(ݷp�‰'^~���
�r�v�o���3>�������E�
�9�`����{��ѯ_�+���$g����
/���x%�
�rǎ
m�j���ݻg̘����$��X� �;�k�^�b��2;DU��k�" " "P.	��`�[����s۶m�[�.&.͛7�5GfϞmG�u�ʕMx��6nܸv��v��
+�~�z�L+g޼y�Ǐ��o��ա��[�.�P�`:��f˖-[��dq��Wp�������d��H��Q#��=���ݻ�z�{��-����5G<9�l\���]`�b�
r�!���5k�}9��:u*�
cƌ	U5`��c�A\|����m�Ư]0E@D@D@J�����&rb𲿂w�}��A��|��ǃ��4�!��^Æ
m��
�C`�ϙ3gӦM���|��7��!�ȡ�(g�]M�>=�x���ǪCE&�u�V�_�N
�;�
;v���6lࡇ�� "���
Ss��'�q��>9�V.�1
���{��Y�r�ʀ�`4�M�ƪ&l_�(�F���;w�2e��@��
�7���ǎ
����s�N��jժ�3tm_�Z��
+N��p���M�4a-ig�鋀���@�#���̕R��o׮]	 ��[���g�[�jV��
>6�
>
wo�
=:J�979@���
+���{ό�����N�:�晍
lqͻF
�Hlw�駻Nn��naK
�̝o)\b�
�6mZ���I�}�i�����_.��5������@qH�"�S�j�̺�'�|Ҷ��j6*2`��M��$�\r	K�
y��ɸIg�
��-ҨQ#�H�/mP;�Z���0�
�6�ׯ�W��i����:TdÆ
#a
ɼ'L��s���
+2�]D@D@2�@��og
q⯖,^�����y��/j�sϽ�'<�ᓑz"�Q��Q�H����f����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3w�}C����yi�s^��U�SO��+����"��
E@D@D@D@*
��+��}� �5�K�M����駟JX
'" " " " ���A�4����ɞ��tr:�" " " " "P�����{m��4˩��KKS�>ٳ��0
$" " " " �"@��Z��l�%�
+���
%��.�x�X��
UYj���������@I���
��+�R���> Ce�u�"CӦM7nl���lG}4o���o�������歙3g�s�9�g�
��'���3��o�M呹s��q����
}�Q+�O�>�@�͖
Пn�������c=
��-��qJ� EpF�
�z���˗�Y��ѢE
2ڸ[�޽yׯ��&��E@D@D�bp�ʹƲ��u�}�K�.�R�J���/^��~���1"�}�ُ>���n�o%�OM�o��뮛?��O?�����.�0����K)�����a�f
k�o޼9�z�1���F`�^�B/$�qCT��K`���Ը�ҥ
��UW]u�e��sq��P�Ǿ��^v9Hs(���:�y�<�ra,f��o߾C�츘=���?�{���

��衇��/��r\�����+
+k��k�
:t���z&̸f�Q���ߦM��eՂ�'�
嵩ݍ�9xh�qCV�2J����<��t�

'N�����-۾k�.��_{� �E@D@D�l�ٿ6&���`
�o-cc(S��5�]d��	ϰ�fb�-[��X����IA���=z� ��+�(̙��}�=����޽{ƌ�1�
+3��-���]�6���;D"��ijF" " "P�	��X�W)�(N�L>��7�]��]�v�F�_����Z��~���ѣ[�jelͤ����+�:ꨣ����={n۶�u���S���m��ٳgۣx�]�reO�s��Vμy�Ə:�߸��C%P�n]4��4������S-[�lM�F$���_{� �E@D@D���-��5��x�XK��
_�WS9P����p�!��ni֬Y��
Y��w�^�Ǝ-���s�=�{���z+r��	���։���?�k��r��ԩS	�3fL���
����_�rU��W�_{���I�����@�ȳ��&�'F��\(C��c�� ���"97dۑ�+W�|��׏=�X�)i�
��.'nw�}��A��|��ǣ�nذ��uB��l�9s�lڴ�6�
&E�3��ӧO
:`��cա,غu+jשS�(�
�
;ܸ�
6��ln�_{Y� �E@D@D���
Inr��]L D���'H�
�7��qǎ
����s�N#��
�����I���l̑{��.�w����t��yʔ)FH��v�jժ�3tm_aӱe� )�0��e7�7i҄5�eq"�YD@D@*,��p
+�()9�W�Z�5`6B����ɚ<�
����F?��
@X��/����h�"�_�ݺv�J�1�1���|:�$�p����t�e��F
�HTGj7���H

��^��x��>M�6������<�\��x��������3NDr�E��̡RV�r�hS'���lT^ ���4G��� �p@���;��
#�21�j�:q��:�'�|2XY7y�!C<�Q�Q�F�1X#��
�ޞxe#-x�h�ի�6l	�H�=a��W$MJXƦ$uE@D@D��0�/bfr,
#�\�:��fK/�|k9\�?��3x���.��0|4Q(r��x
," " "�:b��9xr�
;oߵ��9��瘿����4�X�f���s������|�4����9`J�-Z���$8� ���#D@D@D@D@D #	�gV�&�S���Ji�6}�g��'����(k�.c���nq[9�
�([3��=;6r�lMGڊ��������
+c%�ˆk��W�T�+��
ԦO��-P��������T4&�"Iݾ�B��@n����6�r��>������������@"ϱ즺(`+�"%��0>���c�ـ���)�@
E���v��G7mڴ_�~۷o7}L�݂����裱v��O�>�p���Kr03h�ƍ�>WR��)�s5��]�j�P|g�ȑ�W�^�|9ǭ�-Z����z��ͻ~��BG�������@n�r��|[��	
A��͛׭[GGJx�����}��g�}���>��ی�?����gg�
�G r�i6cX�m�̙
�(a�ҥU�T�^���ŋ�w�
�CPS�W�^�C��z�:�����qݥK
+�\u�U�]v���-O3i�$��_�x����������HYdV���߼�}��U� �>}:�^{�5��L=���?�zx�
�h-u�ԡ�a�
�~�i9f�Q��=�M�6Iˡa��o߾C���
��QΚZ�IK &�O
7���S�	P�
�g ���p�ĉ�_~�
�-{�k�.��_{E��������@��W�v�e��j�f��K��w�؁�cǎ����K8D�m�*L�^x!'���?�
CM�V�޽{��3��aФ:���@Dծ]{Ŋ�3;DE9P}D@D@D@2���`�`�r*j���V�ZÇ�<�V����o��v��ѭZ�J�6m޼��-2{�l+�֕+W�;w�;�ƍ׮]ۮ]��mۮ_���%��ʙ7o����C��7n��P�	ԭ[۶m3
��tv��e˖��ۈ����+8OM_D@D@J�@<g�	�ȯGb�+ۂ$)h�k��K���[�SNٻw�Y��ކ��iݺ�+�G�
����.ӄ�i�K͚5˾�
^N�:�@�1cƄ*0n�� .���s�6>
��_�`�������<���
7��	1b�r�
��]�v
2d�Yg��ckb��\����_?��cӞaÆ
mm�
�r�w�>gΜM�6�F�j�
�X��,#�F����6��[��a���
+M`�֭����q�F����a�
z��
"�k��45y(�New�J
C9��_$��ׯ�zO)ilMLd73F$Y�t�
�ܹ�)S�A�~#]ݸq�z�ر���;w��$P��E
?����[�	�㘘x3�&M����<OXs��K�Zȉ��i{��h�6q��1���c�� ��/+��{�=s8>f�?;u�tB|c?4��]#��V�F�:������U�Va͆͘8�[~/	ͬ��
�6mZ���I�M
�y���˅��E@D@D@J�@2+�ɯ
�#^��Q~s!|�w�Vُ2e7�,�
�C�E5jd���uo�ÚB�
��!l/�'^�8Q
k�����F�\}*,�aÆ�0�d�&L�G���&." " �O��s��d58�ْ%����;S����;��=������/��|�P�� 9�\������� үC����]�y��=?��ٿ?��ݽg�ݧ��z5�fg/�3o�C��|V��
ى']��-m
����tZD@D@D@D@D��0�rn��b	U�Gl�'{v�`R�ϋ ������������\�R�b揱�K at 5�>ٳ�I�Q�hH$��7�s����8��O���<���������@�H�,ίۗ�Lv�����PD@D@D@D@2� �I*y�-�#a\&LU:���������@D���'�r�s9XЮ]�n��f2
7m���6�?���f�
}�Ѵ���o���n�y���Gc	�L�>}�����㏦����3�P܁��%�離�'�F%P�q��v��+M�1a
���(���7n�s�ne� EpF�
�z� [...]
+f�9s��͛�Ҹn],�
�F܊�~��NL��.]��J�*իW_�x�+�ȡ�5{��z
��z�:�]��u�.]��~�UW]v�e�\�27�&M�o���]�\D@D@�
����ǹ��3�W�cj��|��������';��C?�p
+�a7��y�b��V�F
K�M�6I˛apL�>�n�������|�S�긘��۷�С;�L#��v �>��߸����D<(��q�3J�-\�p�ĉ�_~���-�Γ��_��������:��1ќ�<J&��I�&F{vV�\�8\��1�ڔ��/��B�Q
+n�\r	��
;��v��1m�~���ž�PfD�зBv��=c�
|�F�~�@F �v��+V�0Z�C$OFi(eD@D@D@R%�|��lݺ�^u��1}��t����~���ѣ[�jem��͛ۚ#�g϶�� �r��s����L"�Z�j��Z�Z5ϻ���Oi܍7�]��]�vm۶]�~��KF��3o�<"OB9��z�:�Qu��E�m۶���tv節-[�&o#��Nӯ��r��" " "P�8��yfr!S��SNٻw�Y�g6ܱ��H�֭]�=z������2a��u���wVR��
�c�!�z�Y�f���r�ԩ��3&�"7�Xu(�.���s�6>
v�~���&%" " e���+Gq(�N��?é�ei�g؈X�De����c��86lhk��.��Խ{�9s�lڴ�îk׮C�
9묳�v?�~�Sk�|��7��!�ȡ��j�M u�0nءz�L�<oᎋ"�yˆ
xXa67�ȯ�LR��" " "Pf	�#��&q��
o�%W��U&.��mq���61&���"�Q
�;w�2e��g����'�)y�
��|?<����t�ƍ3��c�fgg�ܹ�s8!�
����:�3��c
��q��3R�f�鈀���@y%��l��-n+��S�uDž�������U�V������XI��
PVڽ��{��=�����"�ԩ�	�
��4��
n
F�E�7XEf�!����L%�t	p�4m�4�Ð��<0�qs)��n]D@D@D 5y�r�d�h�����]t�E�\s�W\�ɍ�T7�,��>�T6Im�zG��
԰nlvX�h�a9������+o�am6[�"x�h��W#0l�0Ƒ�{„	<'I�
��MIꊀ���@�&���fK�,���[�Y0b��=x�=�g�eD�&�ً@j�MJ� �(4b �d�
<�ۅ����������s���{��}h�W�jv��9�f
��g�
+�
p@̫<��[�t��Y�x���an�BOKD@D@D@D@D �	���6m�g�J(�_
+��������d.o-����_3��ٳ�I�Q�&�E@D@D@D@J�@^-�Qe,æm��"V
-" " " "PT�(cvr98���������@F�7�
�+�NΨ�$eD@D@D@D@J����ȵ����|��؎>��M���׏2�f�ݳ��Ժ3}���ѕC��^�z}��W��+��'�q��v鞕C��
=z,[�,���o�0�M{�>}<z���r�'�=a
�x��
+�W�^�HP�f�ȑ�W�^�|�ʹ��-Z����z��
�^$�H������@!	`[�2��c[t���>��>��G�v�m������?��

��`�F��ɓ�m�v����δ��ٌaa��K�V�R�z��
t%����^k޼95W�\:?�3g�ܼys���!�'���������C�8p w}]�t�6�UW]�g閧�4i���_{��W�����@�'�$g\D{��C=���)t�}`����V�N
�
v�a�e0D#�Y�f��r
f7�[�ߴ��F�V��ڷoߡCv\��ǹ;`� �	�
=:����oӦM�rk�!��(�M�k���~�*�N����<��t7��~�Գt˞�ڵ�Nǯ=��+�D@D@D���I^q���A~e\��C�ڈ�4��x��W	����]��ܱcGk�{��Vvvv�'���^���: x�ݻwϘ1�b��i+�3� �5�k�^�b�ѓ
"�2\g�'" " "�H�����i,
#�c9.��o�ʼn۪U�P��S [...]
=V
�4��/�����O���_{������A �V��U��Âd�믿~�dž�hذ��ҠA�3�8�
|���?����-۟CH/`ڱ�YHw\|c��'d����L�t��;�|#�{��s��ٴi�U&`\�
Q��mO�>=:w^�G�C�غu+J�`}6��v���>�ذaC�����g���������c&
7}�26"&2��"aD��.0�Y��'���
�7���ǎ
K\�Ν;=�	� &�0Za�t��yʔ)FH�q�U�F��؏�(�c3� )�0��Y7J6i҄�����t�!��p-}[���^x����#y���&01�^�<;u�tB|c3���g�}��c��ܽ��C�K��
�
+���{ϴ�����\Ė�~��?{ժUXKf����ㆪ�K�ۤiӦ��ߟ|,�!���/����J1?n��
��YQ�y��>Sd�M:;d�Z���9������l�aП��K�,y饗ȧz�廇0P�F�LK�m�Q�~}O�2q��f��)��
U[
2���a�HG��	&�\"i��L�_�������xd
uR3��gVl'N9�/+�7
4�w�2B�D@� g\���)" " "P$����s��nv޾k�O�s���1w��g�i��^ͪ��
�̛5��
���
�Ư��u-Ni���W�f.�IH����������A�1��Z6�7�MD@D@D@D@<r
+�ɠx�"?U&]F�f#��|D	(��s(��ˏK9~�L:�ĭ�?�@D@D@D@D�X	���ٯ\��$\D@D@D@D���哭\�N�f�����\*Ԥ��9����9��͖�n�����������@0�侙o+��Ae
�u�l�� d5�7o
�>���fQ���6/��G�ӧO���u��'���cٲeVc�͝	H�ܸqcw��gh�?��~W��v��G3D�~��o�n'bک�֫W�����m��>��V�̙3�9�
"@Ⱦ��O�v�y����׮]7�|3����v�&r�'�|��Z�sW>��Y�����@f����_|K�W5����w�WԬY��
���W^�e˖��b;n޼9������k�5o������ʕ+M�?���$�,\��}���K�V�R�z��/
4==����g��裏n��6;�i���mۮ��z�

�F�n�N�?j^w�u������=J�y���a�����$����_|�E�>����N��C*Dr�e��ROD@D@���1���5k�
:�Z��
{��_N��P(mڴIZ���CE΀.��ѣG9�~x�:u�9���w�SE�}��
:t`'x���DF�n���mQ@2�͚5��[0�qo��M����
z[28�)|�!�
+�3)��8��2�x�S����9��C�	p�>��3�֭�I
��
+�[��_��k�r�CJJT�k��ѭ[7�(�����
����˗s-�
9���$������@ �Z$�j���9s�D�g�/��Bb�ұc����P�د�tv
٤G�����O���M;&���*��*��z�e_�bu�C�b:��'��4i��
Ύ���2�sD��-
��P���s���{+��#�<�
.�ٳ'��
+޵kW��\u�U�;w�q5~G

<��3��	;�+T�:������D!���>�v���K8o�v��fe�3�<��ܹs�:�C���o=����ƍq�1n۶mׯ_�{;`���4�'w�V��ML���'�x"���1�i7��ٳi1��G
uT,�IUϭ[�r��
Lg�-�sD��-U��`%?���W�&@��#�C!r
�0Nb�ɏ3�{���	�Y�jU��x�	��\Ư��\��\rI�|u�B 
[��',X����
;v�Ͳ��C�k9�Z~}���6�]�6���g͚,-
=���"��{��k�f̘��o��������qi��NZ�n�����3`��sNo�(�(s��j8`隝�
r�e_�cZ�q��Y!�GrժU�d����N�Gh�F?Y������D$���M*9�/�7����ƍ���p�q\ҟs�H
�4"7X��t\�D'�X�qb
���/4d���
�"�/b�j`�
֏�}�S������㏻�܉�mР�w9�]O,!��5^8��sp�s���z�D  �(�
�VV�g/��&!��G&��x���>�lb�U�=�s��" " " ��?�EP���~  w/Ð$��&�����"Z���)S�$=0�p��ƙ�un��cǎ%�y�ΝϮ�3�?61&2�g�n�4$����������j��pj��C�d� �J�H 6�Lv��`�q�[�6l؀��C	s ׀١�O�}Ɏiٽ{7���/+D=���ܡndm�={�Г`z۟wy�Ig�n��u��S�\$<�w�d� �/9�p�.Z���g�u~MLL6�,���	2�D{��&��ۈ�I
�c�=6}�t�������l����1,X3GRg6v���% [...]
7i�$�T�T���P�G
yģ�ب��6��j&�az饗�/a޲5H�ži$4��mP;��]�-��0����?��O�B^xʱTX�g
s�?��t`F�y睇�O�(��l�%�W��I�#���qdٻ�kȖ@r�P΅���B����R\���{{	���y뭷�lx��;���{K��?��c�|�iLd
���SO=e��[o���t�}��B�� Ѝ;X����ej�#" " �@�Q'5�N}�X�:�ujx�A�f��k�VL@��D$�O7bOu(*<���s��nv޾k�O�s���1w��g�i��^ͪ��
�̛5���}g]�������)-Z�����'9" " " " "�q�b,*��l�!{v�: �.S)$" " " �J �V����T�,��m:dώ�ޮH�0�2I�"��m:d�N�<�RZD@D@D@D��TD[��`J��������@Y%�4�"��
V#��"��" " " " " [...]
=P
J� ������4W]u���[���=V=����_#�����@'`j��
��rD��5kp�
:�(E�)G��P��
z��N�=�	�؞i7[�5�
�ެY�[n��ږ�

��Å��4R�}�Δ>����`�~z�i��-Al�`�S��C�츒�
\�8��
:/�qS���M����<���O��n����[��{V���VX�E@D@D@������˵j�B�9s�㋫���P�'���W_%�C$�ᨶ���c����NOH�Q����I��~ C��+g���3f������|"XHD�Ԯ]{ŊF;D�R�(]I
�Ps�0�}�vܮ]�̟??�
����ѣG�j��ڈ͛7�5AfϞmE��O<� ,��Fb8���Çc�V�V-=!
�'�+W�<w�\W�ƍ׮]
��mۮ_���%�r�
?~|�>~�
�%L�nݺ�HȐ�
Lg�^hٲe<�18V=���_É�����$H�YK
ł
#�_K� [...]
+7�Xu�(�*����)����g��RFD@D@*&�4me`�]&�`ܸq��w������bx�|X�+W�|��׉r��6lhk��F�mǩ<x���?���8=��r`׮]�
r�Yg�
����ݻ��i�&+�|��7��!�ȡ�(g�7L u�0nءz�D	lݺ��L<wJ�I��F6l�!��ܠ
���^�������$#���l�a�����4��ͼ��%l_��Kl>Ld��"�����"9�5��	
���ׯ���JXc
u��yʔ)FCb�q�sa��cǎ���޹s�GB�1n;".u+E���8&��ФI�n��>ZD@D@D U,@�AK�V&+��7�L.3�
/Z�衇
�e�sS���`�f�V�"0�h�P�$ �%�_x����#y��p��
+�޸��y:뉋����3��c&�S�N$�fc�{���a�רQ�N?�t�)��'Չ�1�gڴi���'?
�^ȟ���/�X+" " "P2ұ�4h����n ���~e���GX0�+��f��#�<:
7�,����Lcv���� ��lT|Ho�P�<
���6jԨ�9��
^Z76;�e��0�
�6�v{�=�2�B��:�/>Æ
#a
ɳ'L��s����otI(rYG��lɒ%�?��3[���{Ь��fn�k#�"Pv	�3��*/�E@D@D�� �O�'w����]{~ڟ����{�>�O��jV��^0gެa���;�v�-�z�8�E�t��e���(bQ��<ʹ�2K����r�Ǧy���؏r9kMJD@D@D@D��@�rV��
�W17��ٳS|	4*&g�ZD@D@D@�
+�|[���\!�e��ٳSVΥ�(Zy1E+U�D@D@D@D@D�L��'{7��+S�Pʊ����������$
[��> =5��Ҕ�#�2U9XG
�.]�̛7�v���
}���9R��C��C�k׎� 9F�>}�x�1���v�tSe�W�^U1�z��JΜ9�s�A�#?�����w���SXDT�hڴi�ƍ�%��q�� Ρ�ԡTPtf�ȑ�W�^�|9���-Z� �͓O>龤jc�h�AE@D@D@�����m��•���w�WԬY�Z
���W^�e��
u�>��([
�%�)��M7�4�|�R�.T�l޼9Q�߸�c�Rp۶m�_�9)z��

ٷҨ�w�7R(}�~���{��qQfݺX�>J�����.]Z�J��ի/^��
e��C��G9��	
��w�\*W]u�e�]f��
+:�g2AI� " " "��@R8
���5k��W
:t(nT�N_~�����=����5j��#FPF��K/Žz�gX[����i�&i�4����Y�f��r
U�q�"��:u�s�a��o��^�VfF�Caj	��0��O�N��^{�}�ӹ}����ٱ��;�;z�X�	��q�3J�q�5q�D.�wY��LPX:������$�%j6,c=����x�kժ�xs��)$w<�X�NI�/��B��+�H�W_}��

���X��z�)�C�ol�
;v�?v�BB:
eZl��Īs��>�v��\*FCv�����РG�
d1�X��������@b���+�۷o�~��a<`� 
i.��͛��g�8_�5�6hЀ�C�
1G�ٳ�
�'��3Ϭ\��ܹs=�����O<S�?�m&�����J�"�����Çc��ԍ7�]�>m۶]�~=n�P�V��~�Q�P��֭ˠ����t��`����y/y�4������@
+
+
���q�W��/�5,X@��T�G�
m5�1c���Ѻu�P��㛅t?��u��o�k�#ٯ?�o��&q�����}�>it��<i�$��c����ń"��%_�f�
+k�5jThgu�d\�\����t��L u
�(�y��E1���+��vx�	�7n�}��7f�;ZÆ
m����#�<�w����֫W�8����޽; �B@���v�ʃ>����� }�6WF�k�k׮���:�,{w
,�;.����
Y�k��p���z�
��[�2�	:g㎈;Fo��^z�׿��"�K�th(��}�<��m�ı�ڵ
ۗ��Bؠ��][!�Ƭ�kԨQqϘ)d�2eJā����
������"}��/�@���.��h���E��رc���w��][��d$��8&�Q�I�&�|�0Qdk!WL&�B������@'�틑p���ʡ�29.؈�%�vժUZ�(L�I����L\��-"w.U����k�P����=�����7����.�
+��K��n�9
��
/�{M�8�B7o��ߺ�i¯���/��>L-8�����_�jU��|��
�1Ҹ%��Wp�N���iӦq�rgu�i�]}��\0
m��Ou�j��W������@y#`0L�r|���n�r��
;�R%�pY�Ư>��,iz�Gh'H g�
7�@8�����n�2k��a6"��b����?�0G�	�rX��`9�(��]���Ǭ���8�ams8��طr(,��Nfe��*N�Y�(".PϺ��iժU���v]���
6�.��0a�7���J%�hƚ������'�
q�Ve
uR��K�<�2	`
��
s�݃��ˈ�4u�E�� 9�{�������'w����]{~ڟ����{�>�O��jV��^0gެqԾ�y���3�W�-O511#��(G�.�T���������@9#�W�$�
v��撚�M���!��T(�8e]�BM^�������@�"�s@�?���}l���Nd�Wb��l�eώ���p�e]�
�+�D@D@D@D��	�-��H�WnN��;��|�1
�{�ۊW.ᓣ�D@D@D@D@��@����?��>Ϫ��G���-��s}�q+Z��Ew�$ID@D@D@D��0Q9�m�E�e�Z$��
�B�22=�)" " " " �!��L�����egm_ܥ��!�ra0�X��I oQ_A[9
{Qb���&9i-" " " "P�	C9'g��e<z�1�mF��ɉ��������@y�rb
F<[�V������L��H�
+|mh�" " " "P�	���"1�����e��+𵡩�������@�&��sg�l�����
+}mh�" " " " qwr,(9+�U���+%F(���/�Xl�^�|�r��\�Xh�" " " " "�K �al���me|̎;ﳜ˺lD@D@D@D@*�<+9~a��ܵ}�4vc�+�VD@D@D@D�����0
k+,���." " " "P���/ϯ��b9ׯl
e
��6�8��8�_9��_Ł�����������@A���W�w�y��U�u#" " " "P�d�����ŕ�el�c��ЌE@D@D@D@�	x��y��B%" " " " ��7�2����r��Ud6���������@E%��lj\Ƿ|��
�zUh�" " " " ��S�.����.c>�b�c���Pfm" " " " "P�x+��}�y~團�����r�TE@D@D@D@����y�d�,�r7�/" " " "P�Xײ5��xe&���&" " " " �@,Ty~�����1�e0W�kC��@��[9�G��t����������@�V�4����&���ED@D@D@D@D�ɯl
\�T�u!" " " "P	�`e7y\n
���M�8����ДE@D@D@D@
���
����+njh�EHD@D@D@D@*&� [...]
+��Z$b!" " " " "���+kI��
(H��q�L�8D@D@D@D@*4*���ـd�`T��A�HF �|�le]
" " " " "�K /�r��x�k����!" " " "P�	$��k�L�r�G$ " " " " ��	�����`�\����/" " " �@n�r
��+�Š�������������kCD@D@D@D@��:�f�/�����?�y�=�����~�3a�2G��/��9xr�
;oߵ��9��瘿����4�X�f���s��r����Y�Lsr^���SO;��WΏd.sH������������tle'�����"ТE
U�f
s�1�4[�5�F�
]s`����D�P�
��O�8�RRD@D@��@�Vέ�!�-o(c�mժU'N<��cy�c+����ov��I�
+ [...]
�ؿ|���3�<�좋.ڳgfh�
w�駳�/���e˖M�6�q�ơ��l�r�޽�w�>���������+�ԩ���#�M�6�G��馛�Ν�[��/٥K�뮻����l?}
�=��ӡz�uH���o߾M�6Y�?��/�mۖ�%y`柯P�
�%IOc�������.�x�>���(Ǭ�x�����2[�f���?�}��0 at ck�}��yp�qZ?��#o��F߾}Cq��7���?�1{�lv��FϏ>����o֬��'/�y�A����[
�[Ǐ>�(��
�/������&���7���_ۿjժ<�w�.�����u�{��8�����`��>���[�n޼yܮ��D8���!�G�
}�ᇸT;t�`�T�\��{�����c
�|��v�Bv;��֭|>��
x ,�(s�8㌙3g��_�z��x����������
.��c�
v�a��u�������&G}tJ��������@�01q�8''+'�R�k�#�z��_|1���/���`U�n�:T�9眃�Lgv;e۵kW�9������ [...]
+�x���ׯ���r�-W_}u�J�� � ��������u�]V�����q�_p��
w����X�v�B��
�s�]q�<��ܹs�>}<b	�:t(�Ə�[�
rW`�v��q�q��#�V�Z�V�C-Z������," " "P8��cl���}��
�
Lg'� �#p"��u�YD,nԠ����o
�[��=�0����f��f���W�^=7�wҤIx[1gmϺu�oc��|I
ף���(��5U )�$�$z�V�>H
��ŋ��x���8|Æ
��_5jd.��=z��\�V�!�i��K��_��W ��Ç�$^�dɘ1c�w�����SO����<y�d�������m�ƍp{��'��<�p����o���e�
˫����e��" " " ��O��W�[C�R��
e7
+�V�N�~���xp�
7�?jQ
�}l��۷�ر���(f���^���{5kִ����K/���c�U�R�0* ��\�5pT�Q��O�
X�5f��+�|���kg^�4�p$p����;aLs��$���0L�c-^v�m��k-]���ܴiS� �ٙ0a�<W���k����L�_���
���E��䈀�����D �8�Y�Df�R�o�!ùH�����q�_W�0
H�4pbg��D9�x`�'�>l,sC����!C�%�ʿ���y~衇�ƭ[��.�f��2�w�
}��>o۵kWړM䙓��=�9QWN�����"N��0�}���G��{98_QH����=<�?ĩ�������\�����]�����׿�5wV���u�QX�������-�9��N嘡

��9ˈ��[�.v�� �#�
+9s��
��������j���o&��=�'��1�m;�+�p���d��c
�N�t �8��qC�1�����dy;	9�u��IZ:�l�a�c��4-'�tR�3bn�C_�
�0�ǰ�
��y���$�
�g�x��
p
��
�2=�7
=/���_�[Sle|̡��AD@D@D��r'�,�

9��8����
����Ǡ$�Y#0�X��F�5
=c1���$bc�����e�#��X�f�����ڸ��[�
������͆A3k�,�$����N��
Xoٲ��gn;���>)2x���OG�d�ak�X�e;��c8��5�S]ۗ��	��}��D;���
O?���9(�G�;w�$��;��\>��S{��
�a�@Ƚ�i�j�8Z�oI��

a',��������S8�g0��[�^����� �
�k�!�Eǎ
��?E9/���
4�:��_}D@D@D@���k������Nv���$7!��7o6�ʘV={���������	i0`�Q����c��}��3f���ldl0�"�

�X40I".X�f���:1
n�����+121n��Æ
#a
��
���k���c8���mi��D�X������
m�d3\R�
�
���&�
E���$R ��(Il �9��W�a��>c!���ۨ�Qn�WR���e�l�x8k 	���_�~�%d�ߍ7�H��(煸|�"���X�(4�\s8�蓛/Y���O�c(�ƿ��
|��{�6n��B#" �`����7����s����M��۞�'w����]{~ڟ����{�>�O��jV��^0g�,��=��g��G�y��3N=�4��/�Q6�r<��h�U��ً@�H��3
"7�̙���:BD@D@D�P�9�s��"|YY�Fޟs K���B
���&%Y�扩HK��2@�P
�f�Q�%�e`�RQD@D@2�@��l���
�S�tme��سS��t|"��� ��U�r*��R$�|q���Y0��'�1����g7<��{�yg�#������H;^��X�ܒxe�B�y�M �	X.�^:VD@D@D@D@��X
�q�P���|+�Ԕf���J�DP�����u�(l@�����R2����i��.
�." "�9�/T��������c��+ǝ�1s�5��UJ
��M����T�˄����Ir���P#���
q+�q#�v�կ~E2O����'@~R}Ҙ�K�"�w�\�)����O�_���;����D12�;�8 R���3�t%�m����
+����
j�ڵ��v u�z�<a��:��(��"uJׅN��v��9
Ԟ�%��f͚�5*TH�z	LpW2+�L���׵�U�����R�L��L��y�[�̸��P3ϔ��������KQ�LӧQhh�"!@�4�>]w�u��������T3%�����r�!E2\��
:`,ں]�|�
+P��ȇ.��S�Q��ZZ�&M��O���<�4%�N>�dS���
����r.�Q��zs]
3f̓O>I�`9)����C^
���ʉǛ��Ԃ��
5�l�/\�`A�Ν��0�W��{/7�Y(��l�H�nݺaÆ�Z��xh{J3I:��p�ԩ�Yr�2{�l+���.�������0o�t�))Ig�q)�v���SV�����C3���IѾk���I�u�Y�N����6��ܷ���7��z2
gn��N���|?}�'=���W��Mࡇ
�V�T*?@��~�-��b�ۥK
8^Rx�}ӎq�?(��?���~�m"��ƍ�j�vB⁘CQX��-,�z��a��go$�����t���\p�1�
Cv&�fn3(��w	qc������'s�޽��
��ȡt1F�+�;
*�R��������/_�)��#`��6g\����^�Ȫ^�:��9c�4߳�'�������߾��
�o�lڴ�������-Bݺu��#N�v��<��6O�24z
+G�r�r�X�����߸��vh�E������,�OOJUs���;�<���n���.���J���o� =_y�
+>s5S��[@#�O��>��T������@9&�e˖+Vt��)�
/��l�
;v�b���$�����34M�b��t�M�<�
�� ;'�YYY�۷��2;��T)fz�jo��Q%�{�?[��tkԨV�iӸ��[
+m�C��ɡ�
�� g�L_�|y��6T�h�
s����}�s��������o�k�c�/]�����}NR��ƾ�̻Dٖ~��� �aӂ��
���Ƃ��ׯ����=�ܗ�V��o\�s�����c�]��G�ݻwG�?�|=�
���h�ˇ��pˍp�3�8#@��|��3G���X�xJ
�����oh?=�XW�6m�p�{+X��y
�" " � �G�J��Z����Ͽ�;0��� �՞���T0
0
�����F ^�E�̛<Wǎd'�^�7��(#�3���=�N�c������y c���NjJ�q�kϣ?A��Ǫ�����E����KܵQDy���=/�����|5a��ϼ��q�����xc�c�>⵵��fش��iՓo���
{N����m3���ؿw�o�^��Fޛ��X����Fw���	�����>�1�[�li[p$�P���{瑺y
�Kz��
�K/�D7s�_{4�?�W���hРkԨe� 9X�9НoJJtްa�L���>��C����s���)*
��`=]�ф
:�у�G?�����" " � �e��������d�z^s�5-��ЫW/,"M�(v����믿���E6ܥ��#���)�KE�{�M����ڧO��K��m���z�-B�񐲺�0�V�*U��]�4XZt=SҪ��
7��Ʋ��T��+W�@\�G:�������}�Laj�
ģy@��������S���t�؄
�?��'nj�8�4T-�C��~1�B̝_ю��y,��%MD@D �	��]K��p׮]	~�ѱ�	\q��?��s<
'|�C�߯|�(���`;�3(���9�̆E^�~}�!%{��TO�;�:nܸ�
+�c0b�5i�':��8$��k���`�
����14�#��QT�ùq�_�+����QV���
 �>ر�=%�f�N�ɖ�m��~�Qfb���'�@wݷ�ɉ���8.�i\�j����i��'Gs͚5VN���;*XO�?kQ�`��E%?�\�GD@D�"��!����C�/
�ڵky β+�X~[����G a�i��.��
�!i1
+c�D��R�+�
P,7��YDx�A�=�oܸѽ� ���9����J��7.�d�e2��J�vN*'@�?I<}
��o]_��>��+����"t�
�Qc9��۞z�)�(�9�ݱ�V��H��u
+7@!˜qx��4n
+v�''%U�8.�!g�}6K�C�k/��� �~z�D��s�
6l��%Kȕc�n��m
-��o�J��o�`=���\�<=`r������!U��/" "P�	����ZRF`��t��W�����7a��bIs�A�������㷕 ���LdleL#��0
9~�Rq���M1�b)��,"
h���lı
y�x�C>��c|�䓶�����(Rљ\~�d�φ�C7?��c`�_u�U��V���_�u��챕
��
@<��ӟ�D��#FqaT$\� yR��C�5���S��߸rx�Bv3�Z��̆"�!'UU��K 8�'1
+9�Xv,�OO��s
+$Wt��W[!���!�r�ص��L����zrr��y����3%��O�
R���" " � G0�03�Cp!',#+�4O�y�M*"
�����
+3�����Ӛ�DxC	ư�S��g/��)v*�x��@ln=`.�<S�
�
v	:�	�W1��7�GHNǾIcB�3Q
�g�F������g�@�U�E
�%�����-
i�3:���=����e�hG<� ��M��?X�T�d*��K���N�����.�}מ������ݽg�ݧ��z5�fg/�3o֐!�>8�3+����8���
+����\X�r��'7g{B@�
ʝ[��� ��!�]@�x�P�:c�EW�B�>]2A/ʔ���e�>�AD@D@D@D 
d�3�{�o��4(�C�V�j�l��WJf褣����9)�J�uXB�9!1%<}
'" " "P��F���\&1��y�tD@D@D@D@J��7
�y]��ʥ�O㊀������T4e�V&�I��ȡ�l]xᅦ?y�����>�$K
�W����A��%�RaU���m�8���)+>�僼f!" �C Ϲ

�����
+��)$�M,iS:�8� �z
<8���#�^���O���}��w�"�6eJ>��Cw"��կh�V�Z��U���n��Yδ�c�M��-��-Bt%" �H !
9ܯ�U��7�
?��#RC�r����e�
Am�(=3�ń�a~��q��+q�$鷧%3�P*Z�-�4:}~��RO(E�2V)�i��6p�@�ƺ�P���,Ԭ6����w�����/~A�]�vٹQp�Z��(�
A��)Aٻw�СC	T E�n�(
���332�a��g"7�[ԋ����O8�_�����f�|?}��1$�N�����(&��C^�������r����c���<%�Ǝ
k�5�MJ��*��
ؒ?�L\�I�W�����'��:�
�
Hz���@���;N���Hv�o^��K*?@�N]{��s�p���3�T�R6��3������Ͼ���o��
+�����@Q(�R�/�me;v���qpz�ERT�|x�h�f#���ɓ����}��<�9�������1c�PU2�=�	c�����H�7o
��[�<%Q�4��
~ ٷ1(��7�0)�|�R	3X��>r/^��믷k��Bc?}�~b�r5�~�믿~뭷(��ސ�B�x
C�d`�L�n�>_
�Eu������F���m@���z�F'�����3�2�N��P�
>~�������y��w�y����8qb�U�T�s��>ȣ��7��˚5k"����w
CP��%P�j���W;����/���v�6V� ٣�:
+G�X�ؠl�ͼ;s�Lۂ�.ְi�5k^X��駟�y����sp������ʴ�1ű�����CB��޽���Ǜ�m;/�Q�8� 	~���1�Q���
�
s
7$
ή>~o�ܹ�=�-�Ä	ˁ��;+-��0��y��\�~��s~�0tK<��^�~��}���ۀ�f�x�y�6g�
.c�H�W��PPV����|�[6���{>2�!�����
߸�
�85�'��=tj� " "�!��{^|}�w���j��/�y����o��37<�ƺ�^�|�kkzeͰi���Ҫ'�ZG�c;��4w����(�ߊo�vd�p�2դ	� <���G}�c��l�Ҷ�H޳gO�
=��ֻwoBL�/�Ix
��^z�n�(���n0�э�)
�3
�r�t�
Ži��O�
j� ��
8�Nt�l���_�>��Mˉ'�]H��]`�����0�+
+�T�[?}>ר�x��7���/�/_��F�f�5jt�5�p|����	���?
�
���������o�R~e|�QΚ������.ǣ��n+�T����ʕ+��}� �=-���
+.^6S����_{�'�|����OH�9ʯ�t1���n�P�(�#��"Ԫ�E�-Z�I?�
�wu��7Z������
+�ˉ��a�
+t��w�
,?Q��
+p��CL�l���b.�3"i" " �I �
��y
��|�!��*D F�*UXcj>{*?c�P/�c�=�m��~���f\
hF?$�g�J1&��4�Z��
Ŏi��O�rR��������?��3�.1�|~�C�����3�C�_�~�+=���n��I�zH��ڵky Ų��
�IL�8����H�+�/�5k���{�	���M7������gϞ<R�e��M�o�!� " "P��m��ó���+��뮻�ʼn���
z���<��SXo�'L�>�_e�ݙ�=���4��s�=��2�i�Xធ�3�����cS�����>�%w�E�
+�K/�4@��>��	��q6nK�C� ���eC^�m�e˖gi$�[N����T� �L�y
=�,v(����|�ǰ�׭�>�^��Gs�u	�g
�{��B��h�'�&��;l�0��%K�<����g$@���L�$6���ट_3J�yL�z�Q" " EE �V��NW<
Y���?��dI#F� ��H"
�Uk]�ti߾=a���ǯ=�������ӧ�I�T�~�T%��<
���;Y�O�/I�L;��$�;�������
y����O�r�F!|�
e�p�駳oz��G�'�,\Y��!;蠃��!\�S�N䤋B��<F9�,�)��6��J`�\�~��z=�ԟ�8O<��_��W�;aM�+�%�t^E(?)m>�$e瓎3�ꫯ=#I��	�"��j|cԨQ+V�@��痷��7Tu(2_�y[y0�,^2��-���:��&>ڙ�)�Q�T>c��5;;��4�(9���ק�����JV
�B/���zH����S�x%\D@D��
<�ۅ�������
r�������4�X�f���s�ͺoȐ�X
��sb)
^��������(*sqϟ,�J��B*S�(=�A�_X�ɢ{L�#G��/�*OS�\��T�[]?��b�\D@D@
+A �"�TV�c;�&M��^�<��zk<�49+�ҿL�!�a
<����~�YF0I��NyR>�up�J���S�.9�ED@D mnN����Ԝ�[�|��ft������E@D@D@D@*��c0�r^��u��2�`�8gZ3(�e.��9Р" " " " �I��ʹvr��$�Y|#e�ajZH��1)�M��GM�4��N$:�"<m�z&�=�yJ���U���`�i\�E�mJ���L2���"�O��U
��	�y���HI(n~�|s���_w�ƦM��T�SR�����#����
/�����G�i�Pَbd[��ȇ~��"�IvjHI�"ס,
+���m)@$��B�ލ{��>�-?�E^���ʇ(@��<KEI
*" e�@~
F�>N�V�*�k�"p}��m�ݖ!�"c?嵢(CM�(=M��Q���/>�#�?��"�IHI�"ס�
+�h�m)�)*��'���"�RZ<K�(��r
�k.c��Cx�i�Q��Lmv��oABV�[Q��cǎ�EΩ{�'�/~�
J^�ڵ����r�֭6lتU+�
B�Se��o8��d��٩
k�3�
.�����?�c��[[�n����O8�_�����f0� ���-Q�!����R\��p�>iϽ�
X&�[
+ s]q��iӆz�iG2p z8�T��x�&=�I�qc<�J.B&��`��t�-ZP��}��d<�%
�I?_I?��JI��u�]|�5�
;֞Ǥ�k3�ԩS����~��J���;N���H�{��O��<��W9���tD@D ���}�Z$��W���u��X!�Q
��|x�T�H�W��ɓ'S��/�x�L�M�6Q���wnjCU���4N��(�Ѯ];;hBl��

ٷ1(��7�0)�|�R��#��!`�z�q
���+�L�2��_�5kfV�� �d�u��?���ꭷޢp�{��I���
��>LI&�O�ya+���v�����Ӑ������(���
��믿�<�
=�=����<�3ز��qk1c�
�pO�����ǓC���7�T�O���M���_}������74�o���|m���
v	�����������7�yw�̙��~����5lZ���š�O?����ׯ����=�ܗ�V�&T��%?�
s
}�!��w��m��#DĶ��(g�qF ?�F�D=�y΂;_W��3�ho���C�k�=�\
x��u�(�OW
��*i/�(�I�Ǿ�N����cc�W�^�<x>b���>_~���y%�iR�w����2���	&D~���|�߷
e�̙���/@�[~��ͫ�}�h�" e����y��E�=7�	��|������O�����
{����}�5æ}v�K��|k
=���s���'�yV��L�����jG6������I�~
<T�p�޽Ԅ��hٲ�m���gϞ
=zП�w��<�4���'���|���Kt3G���q�ѠA��Q��oTMC��!6l�����;����r
:Q� n�\}���q)�ˁ�̿n���V��X�أ\��ŭ����+/_��w���/�_9�-��*�T��Ƿ��'�l$,�����
�|� ���f͚5j��k�A������W�|�_D@�:�����ſؖt2<������r�J"
�K������� š�Lei�с�����x\��~B��Q~�i`u�/y�1�����L�-"s��s���m��2?}�����/��ˌ�4H�Ȗ��
]��=
�� [...]
+C�\ ��T�[?}�}f��Q1�����
X�fM�/=��3g�y&�D�Ǐg�Z�Nt�~
��]>��,A����=����D��_�v-�X.�_�c=	=���w^���P7(�����>�_NV�h6���
���|�W�u�]�`�(b
�C=d퀧�z�_B��O�nm;
���ვ`~��>�l�
�?�}�M���K�p� n�B�K&N�������;����ч5�x�/���"ԧ��*�떤��{�>H;��
+C��z�#��PsǤ�H����;
w�?��"FH��*�26sY���}�n�>�ËL^�Y�ˊU"�L�"���!`^

]l}
+��o�e˖���(��N��j4�7Ax4i.I$��+3��<��Wa�R
+" e����u%�H��sc�79���?�"1b�@�=V�u�ҥ}���>������+�nj�8��������_r���h����(
t�x*��Il�
���<�x�>}�V��&���[��

��8�����0ؑC�@/K�2#*��6�>\�� ��S�N�K�JbԲ����O�6./���7A�m��E��ST�r�W��6��#���ᦛn�ٳ'��س��uR)�'��O<�׿��{
2��Õ�� Ϥ��ͫ0���2G �g'5[�dɳo������

��_Fd�d�FW
�wD
�8$��R�VΦS*
K~�гf:�[���
=�Xg��O�Wn��<�����+732)��*g�I���9xr�
;oߵ��9�H3w��g�i��^ͪ��
�̛5��
|c�	�����M�[�zZ����k�2�?m�uEщ��lQz��7]��M�T�u��g�$b"��g>��F�Z^�U�$PD�\�Q�	�r��M�4!�y6n���(�fԨQ&#�Q���]��A5Cd���0b!~���q;D0L�(VH5��
+�E���T4c0�r,�̍��hgH�H�@ab0nZ�ӝ
��\�r�;��@�CD@D@D@D@D �@Q��n/b0�ql�eʺ�D@D@D@D@*4�\�+���E�X����6`��(��ԧ�?yg����>,!23*�I�&eo&lŭO��'�.��3Wt
J캚4i��H �u媗���tӦM�>
��Z�+�:��!�;�J탫ԩQ�n��?�_ԫU�~�j��rme�?9n*[��_��M��T�S�O���?x�`W?����?�|tU��T����$k��~�Ҥ�O_=
O`���\u�]w�+j�̙d¦�f"iq
?J!%$^�Ex]Q~��э5�{��ͮ�T���
Y�(��el��k'Y;���z�����8N���'������^���k��n��/������z��M
'~�x����m]���^���u-����"0�J�Y��G}t�m�e_2�Sf,�2u�[��e�e(�R�&UV�Gѓ���z*��v� [...]
+�1���S��E%?��ҨQ���_t��Qd��_|�G
�"�k?�3(�N�����D@D@���������;�y`��u�m�����~7���������?������j�yc0��J�I;��(�E�6
���H�I
;jVw�ؑ��1t���L��/~�c	�����e�֭6lتU+
����t�Є:
B�2���ᶳ���[�^��'�p�/�K��L3X~�rv�؁!�򤝢ֱ�y�k�=��C8)8;�;N:��#e�M7�_{�F��
�ƕ+Wr�Qɼܹs'^��˗��T��B�]�'�zo�g϶:�ݻw�С�#�[�n�r4o��T?f�n����$��޽;'�瞣��y�*O���o������U�b����YD1���r�-�k�4�A�^ޤ�/�3��.�J��fSW�zv)Sσ&L[?���z����'��d�G�̓�̸\p;��s��NO�[��R���." " ��aڏ���}��@��ٳ{7&��~��~�������4�b?;^[�/^9ɠի [...]
+��������������z��~��O~�<��
+R����lٲb�
+
+D�t)�Ξϗ��s��?��
7���[&.nw1�����_r-�O�t`��,��7n�>d,�*J����	$<���IͿ�~�
���}������11��0bl��5�M�ƾ�̻Da��s܄Xæe֬Yxa����~Jg<R�sp������*��ǵ���
�t�ٕ�?����(<���E��v�7́&L0
+������1[ �Pm�0g�
��^���c��62G1_
g07<��W�^<CH�l��T#��82�>wp����=����O���)
+�3f���Iz
��Ǔ"�
��W_Y�p�5<ں�e�U���r�{�ϝ���ﺢ�o߾�N�xy�����b�P5}-Z�Kn�������]_,Q�a����������$�DƁ�s���۾���|��7_}�տ7�{�6��
z
۱�s��u��Y'�>��[���Վl�_�c>�^��g�:T�
�5��<�y˖-m
�d��ѣ��z���#o��Kz&���^��9ʯ=���b<��<��옖T����
J<�6O<�D����7n �C0�8_͚5c�5�\c�M0.-v��p
�J��3����o�J*ǼՠA�֨Q�g�[&vx����O� }NA��F������y���'?
�
�
��o��G�������s���]z�o��&�ǚ5k֮]Kn�4��}H͚5���F�rt����@E&��W_a	`�|�m�c�`,6���n<r�����ST����!�iy�Wp����,��z|��'�0�N�g��(���|.
9�����$T�+� 
�X^
nA7��#u���8ծ]'1� +�x�O�9ʕ����%��O�4�������4c�%�n�Bs���٣m2��/#$��.
�I�BS�J��m�_9x]���nD�X�C�T)�p/�<<�n�jժ)�nu�����fQ����4����V�w�%�@�–��}~�
�2��1���
%�sR~P��d�nv$�b��~��d�Œ�~Y����<
̏q��P9@��U�LOvLK������o�ʕ	S1?��3���n�5�Ϭ�����A��ps��
k�''���=��y�y��L���kN��
?>FO"<
���'���0����O~�<�2�t3;�2�_�>�"�u����w����i)��휞�~���늱�
�t�2}�tle|���B��
�`�n�j����8� �Ļ��Ա" " �@��-�]�������O�.ʮW��&�j��S>"�l��n_��:�����ʻ�^~�X��#
���UX�<��_>�S�מ�N��"�5.��d5N����g���4���cEZ��������ڸۡ�l�2�����ͻd���»���?Ƈ�?)O4Ī#<��$53����b6
syɒ% [...]
���R�#��<��O���[��},�s�n�6��|��5���qq��
��7�Z�������yI���(\�ʬ@
]��ǐ���kq=�&�K��.KuRn>��)�
+" " 8��4mV��þ���#
��f���b)_�<	�s�zd�?*O�� �|��g�9b�".L?�:���";a����kO�Kp�w��x_���!�
�T?�$��L��i�
*?%9��@�M7�ԳgO����v�:蠃��S��_b��>~��j˳r�6�y��'�9"l70򜝙_N�/�pr p��@@�
 Ǐz��ӧ�	 x^���'�D�
�Σ���xځ8��-��2YN�=�%c�y���ƒT'X�nތ�f��y����+�	��1��~a!�ڔ!���	��C��4&e�7r L[�C �q��-Ok�G�E~�d��f�'��v@�~�|��5���3޻�/������`�+D_>��!�=� ���15<�I������:)��ass���(��b�/���͗�\�*H��ܹsC��JR+�%" "P&
{`(�Hb��b9��[|�Ћ����<?���C�2��� [...]
+[�����e�ŝ��|\�{�3�љ9mi%" " " " ��l��_����R�	1���J���l��c~�e��l��
�W�VnJ^�g>���
c+�uL��o���hQ^i�Ĥ&�2�
��~���~��ى����4�n�Y7b���-?�=װ�����
�4cGpɋ�$f�h[x_�$�� �I:� ��8���Qg��L8&�s)x���Zș��R)M��T�
+�>��r�8'Qy䙥<`�R><�V�B7�~:�$J���R^��4B휢�cʓ����[,�W���D��S�d�߅HÇL$MEB�D
uJ�Q��,�	��ˏ�=�~�E�x�"H���<R�^
+��|D"]�	�RQ��_��:���f�
�
+�*�����iצu���w;��\�rx�o�V>��&����7p,ǂ���s�1�>�r,gY��:k"�8n
��f?f
:�b�
�`�2
'_��^��i�o�ۓ[�
���oz��|�}WX=�v2��J�U����5�sq�ݝa"}��pxA�
�ɔ�%�
?��ԣ�9k�ش>	.���@C�SH�)������Q��\%

�V�j
p�ۭQpq$;�
&��Z�
���\\	W[�k%o���@:�|�
�
&�}���v\v�<��ip/G�
�����I$ꕖ?ρѿ�
�c��o���.QB�Orȷg�->G�f_�I盠p�s��0�J
+?�
��=2�7"�
�iH�o�K&�J��b����
++�b����ʁwQ	?RAX����?[V=�_��r��w�m_�nK��9�Է5%���o���o�r�Y���<�-2�gO�٩�g�
�RV/�K[�y��7vH�>�_����7�y��h�;��Q�N�=�2ޘ�DZ��y�q�%p[\�t���I��ɾ�<�0F0o�y^r
?�㼛�#a�o�n�.qqy��܏B,ϱs��]��qNT�cH�_�=��K��%��a���;�y�I1V7s��8����/�<1v&y�&��x>��5wΆ�w�3����i��H�{�����'�s��k��W�:K�
���|
�����
2_{�a�	{���%�(~X
+>��2Iv������������,G��
|��()�~��n�W�(��}��9<��,t�:�*����gң�
|;&~y$�
�z�Q��\�{6��#���)��
�*
�Gr8Ѿ��
+~�'|�l��tz$u�$�-�
4@��_��#��$P���4��~���m�p���}�
+'9�����w�
+	>?P��ս���Zq�jе�
���J����`�������sE%�(0�?
�w
+�&�޴�i�ؠ�iY�
zxL�������
mqD����MӘ�������R)�r�oU�
X�2/+��V90�r޿̊���U)����Y�n�F����61a�c�v'BK�61ww�����7��Q�u�I
y(\�����Ʃ� �9qupNe��o�1�O-��'�����cX�6�k�H/xA$�$���k%��t��i�
)����V����c�:t�O}����G�6~“u/�͒�2>�^��Y�?��g2�I�5���{/�$�\��xeȆ�^���D~Ws�뾶�f:fbI/�g�#�+�H*Xa����i�T�����(W��'>q�M����,�ř{l�{�+ ~Ey�ǿ�d�׃���/��o��\��b�%[p�x�Ҹ g���B:����;I��a}��B~"�+�Ր��iL���
�\ͤ����
�d������{|跄�7D�C��'�*	��Hz��/����U%~�r��j�m�=�$������|؂߷�&�g��2<��xb���?%V������wGK�I� [...]
+*��9�����* I�:1�
|҂��7�/Ⱥ�|9�4����x����@��Ʋ��~��Z�~fy��I�S�a�
�:��!6=����zi���'
׾�i?����^~�4vp�V��_9�,΢o�1�c�e
�c��
�����~�����p���ǹ�r���Wy�y�d�r��Sl�_�俰>=?l�G,/ݓ����OM�;0υ�{xB�/�X��S1�/
�BY�w�bN�βc�Yů�_l!?
�m���=n^��_����
r=��:886pDc������f��*�udGK޷�+7�d��|��'ʵM}��~e��]���	�(H^��!���WN¤b
�7�G*����2O�5��~+�vC�s�徕���2�������:�8�d�݄#�����I6֤�*LI�؏�I�X��-����&*x�x�L��
+S��y
ac
኏��8�|q�_�QGL����m��6�A��"N6�\�����y��[?�E�%����/���Cn��.*��o��
�<C��=�^��o�Ԡ֟:
�{͜{�{:��1Y�<rۮ핷|�����
X�߭����+�NS~"
C).� �~I�I<�x��t�rͦ�c��(�]�ί^�3j�[�՜��QI���7sT�B�Ѣ
+��W��+�sQ�F�R��
+W,��
+�b
iQX
�������6��ߏ�cQ�S.�U��]�q�oy�����������TNd5�5*�O]���y�O�xF(
���/]���a�L��!=f�
+��,����f��/� y�M{i���Q�{�Yu�ɩV+��3��u�;�}��_�ݱs�'��!��%� ��5H,
4��o�%�C�.�4
��>E���W����(��B
�wR��ԥ�{�(�t�	�v��J�["lb��=�H��#�B�(��rQ�
+U�h:��X���?�E3��� o��w��X�I�kI���;^(R"R�(����M��;�*����T��U���j5s������X�
+endstream
+endobj
+1567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.939 544.286 345.152 555.134]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.1) >>
+>> endobj
+1569 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.938 132.884 436.151 143.733]
+/Subtype /Link
+/A << /S /GoTo /D (figure.A.2) >>
+>> endobj
+1574 0 obj <<
+/D [1572 0 R /XYZ 86.4 726.045 null]
+>> endobj
+571 0 obj <<
+/D [1572 0 R /XYZ 141.991 204.57 null]
+>> endobj
+1571 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F14 627 0 R /F49 566 0 R /F16 397 0 R >>
+/XObject << /Im8 1568 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>> endobj
+1578 0 obj <<
+/Length 1162      
+/Filter /FlateDecode
+>>
+stream
+xڵV�n�8}�W�e�A4o�� ��c;�n�4���@[�-�DuI%���~��d�q6�C�I�
��
�
+;wv���{�3&
���™��H �T"��3_:_]B��S�����\�&����Y��+�Q7�|�.��'��%vs�Wu��q��\�p��,`@�E�ܔ��}��7��~�D�
�zPą��z_�cg	;
����c�9�IDa�:�ާ
n2i�h,"�a��~�0�G��w�fS�L���b�IgT��OG辁�;��ɨC$a�tX �o�<Sw:w�1�=�|�w���;����zm��qم#�
�R@�R�ְ�bٚ��Ƅt��(�Z�j�/U�V�X<@��fq���-��L�{�D�p��v�F
q�
M��!�].�qv�&���u>Q��x��0��J{�t�ҥ���*��
+Ni�E���a�*�������E�Z؛�b
+�/�
���i�B��,�]�$Uy��*�������~��������L���B��O�����^ ܸT�mڬTI]�ue�
T�ֹ�t�����eu���`'�����Y`�Mi
sw�nd�*Ҵ��>����Ԏn�U�enp��*ޤu+��&
��t����A�@B��O‘���h�. �����bp>�1����鏫����˟�u�%�l���i+��V�9��0~@h`}����
.����
{0��e�~Ҋ�-.�W�)��6M�&�W��H��lo�E�5��Hh
BBw��O�2 �(�
����ہ+�G�����N�� ���?U�Lj�y��j�
�vC-) �N�,UUmG�>B76:�-0[	*m+!����){fWG�m\%�g�"�VM9Sc���nq�
+8UM���A��V�&�[[�M� sg>�
�����LP��V�Z�[i�F/�F����z��jm�s;��搡Ĭ4�:��Zĩ]8JE�/l6���±�c�k[�I�X�h�#�v�_>'ϸ�u
bS�;�-y�w�A�F]�I� ��46�z3���.a��^e�$a/�_�!�v��]?l�D FB��a\�
���y�.�!���o�>m�a�X�߂�s͘F3�Tݖq��:�����Nl�x�Y>�Hb_����d�~�d�†�_� ({_��
���E�e
x'P�O��͘�GS�
c��i���=$��l�
k�@ſg�
5
+endstream
+endobj
+1577 0 obj <<
+/Type /Page
+/Contents 1578 0 R
+/Resources 1576 0 R
+/MediaBox [0 0 612 792]
+/Parent 1575 0 R
+>> endobj
+1570 0 obj <<
+/Type /XObject
+/Subtype /Image
+/Width 953
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Length 105528
+/Filter /FlateDecode
+/DecodeParms << /Colors 3 /Columns 953 /BitsPerComponent 8 /Predictor 10 >>
+>>
+stream
+x^�]	�N������y
�W��H�L��^)Q����h�ޣx��JD�"%/!
$M^H%�L�R�
2�����o������w�N��|���ڿ��9����k%��2�M8�?��"�'�%1��	5rAdt4�E��N����h����wyw��-?bO����ؓ<]�F�접e�N�3us�\"3!�D�
�$مDA��ޯ�^��dp
+�':Q��.w�Z�beKTLL)�P�Db�����cwŸ��)[�h�����7����Q��2ĕ,C$5�Cmx�ɲhgE�o�#�䠱k�w!�s�ੀ����!w
W'�M����yÆ7� d��
`Yv9 Ѓ�D��29�G���t����A|�k�̨�ON�3O�
~:��F=I^7Ĩus�����6
�JqW��θd�]���xn�
��`�������6��Lpݓ-Y>7k�{�h����]
���-xNqV���?3��+�)�������K9{��5���'eN~��c^�A����ڶ������_?n��#�ҫ7O,U%�x�Ĕv#2�MZ���᏷i{��-�~��>�����y��Qq�2����TX�?���S	ᮋ݃jY/��
$�ڌ-��
4ݞY�,!�I�-J��UԵ��A𓺃?�1�+�t��f(�D9���L�Q�
Q��8$d�_�D"���Z$3&J)���N�lZ
+�UUE��Q�:)����*�+Ŏ��b���R�8�D���b��@���"۰��!����d��6�%�Ǥ�w��E���Z�N-Ool��!*9U�]
��=v
V~�������)Ӛ���!5��%�a,nj������%F�
�U=��w��u/1*G����Ex
CB]�Na
7=����.�BA�8θ�d� �okX�ݸ��yV;|*�[�T�K
c_P7mFU�(�괿0u�~e�yF�ⶋ�&ƥB�����4n��Ͱ�G�q[}�ú+��!)�~щ����r����2
�Q��z|�|��P4![�0GsI�o�E$�Q
�R�g�Oρ�R_�ʑ�j���E�萨%�d7-ÑuHu��O

v��������г�Z/
(���u��q�������>UjD?��Ϊ<Uʗz��W�������|k�7=���s+���J�R�F=ru�}�-���/��g&r�_����4J
�bO���
����Nl�C��t<3�d�3�
l��7?_�S�sNY�ѼaC��yEB�*I�H��
��M�:�~�#����t"
թ=�8���?�bD��YkBr�Ĕ䤢E�\�εh�bE��M2�D�gQT�P׫�!�hr"V�dQ
b�-B
ڃ�Œ���X{��PU�%�C�Xi#���I?Q�H�b�XI��)%ȝE�QX��T��(�>*Q�Y����L�Q�(���
+�=tH�E ����T��.�H*.��n�
(P<ŔB1�_T�~(���Є����<
+��8TD�Ջ�F�
:;�(���L'7I�E�����@
����h���P�>3$[�)��A����uc�"!�;�#�^C�P��*�
�]�Qȳ�����
��CCוd��d�v�y�{��^���5���RIc�n����O����[ꓼǩLu�
u�N�:��Q��:��3p���sل�`q`��z
�
��|���P��O����l������M϶��3�
;t���I�U1 ����<wVY��x8O�(d��ε\�{�m������.�8�Iȝ!�p�i�7*����xiڹx��Ӻ+���q
���yb�5��u���wYX��bd�ы4!ѓF\5����_)A
U�z�$�>���!:,v[F.qH��MZ=�d+��#4!ÁT�
+
;��S����,�?���gl�2JϘ�0�����������C�Hs�f:���d<�UuO���t����	�
�|�ǰ
?v,#�X�1l��y�τci����2��2ӱ�����)�z��]G�0*B���	�B�X3�D�h�g�O�$��=��|[�&�
6"��Ԅ?v%e
��m��~��]��d�xy1�rة�ab� lj��E������E%K�+*�WrJ
+ؘ [�j1K��,:H�PSCY^�E�:%�=���!�I����ޣ��H)�!��R�2�>
+��)���A2H��3�z'���.�N���vI*.�'��<U<U�NjQ(F�U1T��$�h�)E�|Ape!Jh%�.�#
+H��}K�$� 	N)*���(�� 6Jbg1QR���mA���,&��/
+��*��b�X�pɡ�D7���
+pҋ$�eI��^�P��e#/#}�K�,y�P7��8�.5�@�Ȱyە7,'��7���Ab��� �Dľ�'Lp#���g��#yS�
��TK��:0(�x�H���T^QZ�X荙N�bj�����Ҭ���˪�$("��@ŵ:J��N?����Y=a�b�ZF�?Z���r6' ����� �B_��ذ^����5�w�+u\���Q="Y��?���$}ǂ�@�q
؟���a>`�%bLVvR��c�Z����B7s�.�$Xm
�
�EL�`��⹊F�
bM�,�l��C�U>��qdh�|j�W���Nɘ�~]��
��q�>���GsoAseK�@Ti�>��%���;��\�S>�L�L�
��A�A�!)zA��eY��q�Mj�0fv�ٺ={� I� NÚ�����XZ������W
���X���(J��s=.��>$�EE�_���|j�:(ufF�
����ls�ueJ�<�[b�)����O�:-�{8�>C�JS��Z|�H=(��48[;e���i���

+����U8�4���`
֙S�C�h�=�70ٸ��5d���ƛ�N(vѵk��I�5a}u�RԮy1Л]�f-9f麖[��
Vm��z�=4�ۼ�e?f!TZx�6ݽp�Ӛ~<�޼�|�͠����OO�bX�^���@
*є4��)��b��-�
K1����c�t}vr
��1�
We��A��h*�vgƮ^"�B\�p�_�*��ձ�)Q]5���-U��B>��t�W�ɊB#�6�o�
��m�����1�\ܧ(�
+E�E����B��6
՜�%���}Q'�:��v�Q 
+6����
+�UR�_�#��(��{D��3���Н�|&�N�Y+T�w!���lף�1��E�$��R=�+E�OU,
��P�S!n3�O���'�=b���}sP/x�
�+C�X�����?l���A;��1K��K:�E]�Q�I�PT�!I�hZY'�9%����ч�����+�����c�~����]�fDxz�2���JM}yJ�>�m�y�Yտ�d��5k=�X��]ذ�_�R�Y;��/�x��m{?���X�� ���aȝ���;�Y��>�t�_��xNusO
��,G
�q<��X��
z��ߒ����C��{���6��jK�ٴl�S��U���|��_n�)��
+t��N�'͇D��1#�2a
�\��S1���Ii�@<M<�KR�O�����r�KӺc����c���&������ڕ�J���ɠw:KA�zUc���
G�G$ݜ� �Wb,�e%Z��Z��1D�:G��B�ꖩ�*����㶮Y;���5:3]�K���.�16�O��!~
�?�s�K %1��
[�BW8i֫oCE&�@�ʕrl�x�=���tsQ���`�s��B���@�~��7L�%�Y��Kdt�ͪ>��z`iu�QL�S]�j�Ȼ��%�E���3ƞ��
�t�4h���{$dA^V�D�Ͷl�f���G��S��M�G�6hm޽�6I�+� ����w?9����j(�q밺���� �a����
<�{�w���Bu��
+�/B����ƕ�1a�K,�馍@�m�gM%A68+)��XTU�!ri�N*#�+��V��e0f���uc�զ��$0ơU[ʎ �T�{�am#��S����u'���(
��]ɕ_{e����U�&�n�xF(�^O�j�z�2���҃���G剠��i�ƾ�Ƥ���ͷ�ս �V�R��������Y. ����?Ęo�SM������n›�R&��=��פsN�Վ���	>#
�h�s�����3>�\������͚��w�r%B��:I�)��
@x_���(�/�j�+�`��<�?��4P�
�C~�������w��U.
+�_���0Œ��S!]�����@��K~��+�)7
����=��(�	�!�[�	g	�J�� V҇�ɽA�W`U
E���t� w
ru>�%-�
+�>Q����*��))K��ńE�d�+�'��L�Rr����b�8���v)QP&+�1��VSJǞ��п(��������
g
�����(���<��G�~�*g ��5�P�l��u]�G,�q�
/v��~\��
ҍ�
��`�ii!-�ދ��G��'	��{H�^0l�0�T��i��,'�X��
)�YD�9!���{��G�9���z�
���wC��o�Q�ɍ2n�]����Fw�M�G��J6/�R'Ρ�dDk���#b��x:�F�y�za Ic������9�
�4�#�kl)��l�@��l߲!4���%&�O���:NC�qb�
۝&����挣��G���'Y��@�\�M��O�< �&�� ]2J�2-�Z�(@F+�'B,��,
��.��,ǜ1d�!q��,����
��ES
+�\2�$3�9򞖊)Ó�?)/�$V��k������v��G�q��G�q�X��W��?��*��*V�#�
��؟ii1QT��(�-��a�$�Ҏ
����k�
:�v����
:@�?��q�\��.צ���"S�������<���tȱd�	�R�r=����i�
��T(�=����]��۟�8���#�1��Æ�T���p���yi6�c5����U>���ܵ�r�U3�Ԥ����%VM\S����--(,y0[�������9�ƌ7"ْ[�[p\(`z-kf,��EaA����}�Y�@[�^9m�z֝�j���
�\��y''
�
�-_dI��&ge�y��:��W&7e�,I�d���
�U�j�g��!:_rj��(�,G^���Dt�
SD��+��^��
!F� ��ۥy�O��\�и�9�1���z�ۯg����(���E���팧:���"�#���j
�OI���h�d�琾ʰ!9q째�X�D

r�Vv���?V��rk�+��1�	n,��l(�ӂk�������[� ��˧�4��k�ƌcVa��Q#O�*��m���0ʧF�z�E�jh�ߘ�t��[����Ǎ!�䡘�SĎE���QMP�J�bz�9��D�^�0}��6�/�K�f�������{M�?�
+7b"�R��.*��c�*Ų�݃\���d��Iz��z��"�f
��Y>�-�z$��`
�����WKVe�g[����dBB���
KO+8n:V���c�0��y�yT:��� L M����8]H��>�௎U��0��Ś�|�^���4
qǥ����gzڟb[N�*���^[�x�
+EM�L
a��(�@?�n�"���X����\|%�Z�ƶ��&~�_:�Y
��~0�/y�,p���c/��]�� H���m���	ہ��`	2
+�[����
����AE���r���W��E^"1��ώ���6��X���+�z��b����i�_K�W��c�2Z
+(5-i;s�O��X�KH�[GuC�
ԥ�
N�Q>v

�3�
�8�Ś��_y���sF&~�+��wu�c�Im��o���LU����*�!{He�q=�m���B�� z�k�<0�*;�KCƾ�E
pG
���5M:��_�u)�/��Kl��=b�!��ú����0�F���e\*z
�n>����?�%�<��x�O at Yo
�kY�Vzb����_Ķ|��n
����e,��?�{}���%�Z
�&:�
ѕm1
�4
��y�\��j�&�%�x��Qz��@���
D�N����՝\��؍��:

�j,��ڴ �d���c�zb-�)��.6�l���/jˀR]�Y�.�*,ozR�͏Y>����zP�W��&��)���Bq�P�%MY�,��Gd����=��׽ǝƏ���;�
= �ӎ�}v�ꋭ�ԵV�JS_y��~�ܸC�R��}��ԗ'?�����~M�;���{�5�WZ�h�k�
�m�B�YZ' �j��2y-�_+��m*����V
8NMS����r
+�T!�
���G93��1##I�cT���ß�����@�{�7�Y���+�&����צ�x�m�q�x/�⿉��
���!��O!�,פ"�,n�֭ǓrP�{��WI�፳�e��n�����/����^}�M��?}��
_\�ؖ�27�rC�̱�{������z,�J]��+O�����}V����xm[�sĉڷ��
f���F�U���z(s�;���k�[�@�ߗ?�����&l�u�#�
}��;̝��
�N�t�.x� ԉ��=�=�ۗ�3��u��8����$(Jm0����O���ͻ�y��:�L�:6OKE�-r�:#������/}!�\?��Kk�����b�����&|�-��˼�c_����gέ`�Uu��o�%a��Vg�'�1y*!&�
�
f,f�
��OI���iF�i!�
[/b�5���Uiݽ��b'���3���QW�#�
�6�Lڃ\X��8��?��l(�"��:w�F�dW+
J��[5O�T1kp�
�����g��L F��x@�����&~R
��&��
�|�tR+ [...]
+nܹ��<����G��W�b����K
+��d&U�}Dq�FL{'c�>��JjV�87I�3f%_~���w0fC=��������Q�z����*�����E+7�[��Z�����0�K�/U���Y�����3fL�6���s��1�B�=_>a�p��Vjp�m�Zc�K(m(sa���x̀'7N�"���؇��M[$�3ྌ��͂:�b>|Z�u%N���������Z=�[1�+��K��	I�]FH�t�͜�p�U�
�Ԥ���\�o���JfB��6kڨY�F]x���}V�5N�v�e˕-^�D�"�i
+�i;g��Ӓ�~��
O�m�淾�����>]���	����H`�����[U�1`D��Y:��??���XW�3�G�����P����5����
�����	�`��]jZ!������ejO�����Y�����"�7b_c�uۖ����%~����p�HZ�D�́
_���{�`%	T^v?tZl�n����-ʨِʉŪ�%Խ�?�N��.]�$�
4QR�2�q���:�Y��_J�8|�7��3�o���}'�B�ыV�1�g����Џ^o�DA~�=���ɋ�P~�(D�����r��@���A�Z��+O���y7�]��F֕#�W*�~��2t�ɳJWm�Պ��-U���Z���XՀ{�ق���罅?>���8���
3���{�7�2q�f���s��]5/YiE����\qh誓���$�
*�#u�X�3�6L�4*u=�N
�1�0ѵ
H�I
,�&~�-]ɔ��W�'��E�<5�m(�{c���
u��}7w��u
cл��Ȼ��2vjm!���zR�
��v_{��
j\G
2�g�Z�ڈ��ܝ����y������BO��l���&���RXߴ3i
��*f��!���J��S��"���c�9�O
+
G�
�1C�qH�<$� �SϲE�/Y>�d�*ʛ:�4����r$��F��E1�3��BN�1�7ЮU�<6ē<���u�e�p���89���������K�q��(��7`M?�O8K��+�B�c0~	'u
+b�����
�
6~��sPdZ���j ��
�ԁn�W�^��
�..u:��s����`{��]�����-��y�`8���
��
����Ok���-Z4K�&M7i"��5�R�|�?�+�"��ꃧ��m�	�����%Ui�����-�yo%�,����|�ݔ./o�vc�s����C����Kwƞ������>��냿���}Rm$�=ڻ{M�7�%�Ή��x�EU���<b
�
:E�G�}W^P�+)��B�
��IF��	t���{:]�y
+�*%�KA��� D)A�W3���?���so��j∁�ʉ�괙�͸�uT�ۄ���|{Ⱥ�
\5�]
mٖ�1�Ή&A`9"݈8����›X�]�Y�r��QI�T'�I7}��b�����ʨ�Y�F�hu3��=��B�5��pt��������~:ɪg����(������u'��
��)���h���������֕���h�2Ө!�jĈ�D����'����7v�ʂ��"���}���Ԡ���q��Nz���.b��<n
q7��
+
���e������ݫ��J�
Hqm9p�{�S��4{�#Uw����pi+Ei��g_�8���vr^%�w{]ou��
W�
Wct��
LWCD%%D�a�<4
�	k<&�0Ws`d���Xi䥍�R�)OO
+JB��~��V@�E��p�j�:��ң�\�)��"��V���'��`�����,U1ȷre6�+[n٤\5
���
v,�E�W�J�+���<3�u ��%�
\�̀&��a,N��@HLO�
"� N$��gF
p��C�� dJn(-(d2!_]�*�+YvA=K��xֺ����KUG[$���#�؏�faeLJ��
>��I�j�z �._�2
`� ����P�;���������C{��ù:p�,K?e�<���˟|dЧ��d�=	xz:Z0'��vذ+���.)�FTP���*gu�v����(�-4q�wo�`˳j_�s�[�~�•9B)�*����
w��VA����
H}�AK�'%�O}��AS�:��Ͼ����q�gc[�ݩ�ٝ[N�aϒ箻sY‡O]wέolL����V�܆��s�
�
��B��.2C=I6~���ۨG\~���CW<��=�Z��w6%$����z�W���
?o��t�yw�=��'>?$
҉߿v�����7�ᗯ�����
W��nL��m�����ᰉ7|qߚ���|���Љ
e�ɤ��>����bm��u��FfrAx������O�	��3�����[����|�jW$�Q̇��&�=�&ˀ�Y)f���y�&�*�%�X��@,Yݡ�
�
S�%v����U8vG�(Q�����g�Y@�䭶WW\��D�"I�+�x�ѭ�:�t���'}ܑgV}C��%h
��B���ҵ�ǒ<�u�uj
�{���3ٖ�<D9	^�שo� � �Q|b�XO}[+�Zt�դ�R�dc��5Z��}������ZcC=g�~5<�a�s:�_��:Ή*+��H��� �~T�[�z:wW�g%|�
Km��Z���F���Rb�7g��Z�,�!z$8貨b}�$�,3�*Q���@
%K�LD"y���[��>�MA���yD�U�T���b̨��`B�%&�LS�� ex�
��GHy1ʎ�D����_T�rs�?q'����7
��
+W��@EQW��bK,�Y|#{�~���6�

+`�?���eu<92��
���$�LI*��P<%Q�H*Q,�D���%��LL)����%�'�DqZח�6�����#F��s'��O��Q���%��LH)�T�dB���BN�$P,���.ZOAN5���:|�2�X����ܱ}���C��Î�~��_~���_ڱc��l޼���G��`���ʅ�/{,�g��g����>�-�T$U��'�J�
�\�w�JIv�E=S-�LO[�&��g���٤nBb�

�p�&��n�.G¹׭x��k�oz���e�1g����M�.{'5u�<�	r�;�C������2�w�Y��{��k��e�-u*]�o��YX�Mi���e[��g��ȱ3`<�N�7�ᰅ߾��f�]���zqm�76L�5���^�-1s��/��T������}ꪄղ5z����>O�Y��`�)��p�9��|�I������x��Y�-��n=����:�c���  :Q	�o|�/�;������ޥ3��oSV
���c#�-~l��t�����2Dͩ��5*ߴ5Z���)
+�#5�I�iN�9��q�s������3y�����?:��vɈ=adO����0�����tl��G��d\pķ��Q��Ё���gtE�
�Ћ�
r҈ ��+�%��ŭU�kq<�7��q��
'40϶�[�cX8٢S��ԓ.
+��լ쒡�X���E��(v8��
�G�i�EA�j�y��̮��1s<�m9��yP�Ⱥ�~
ƨ���\P���� ��.��"��b793Ů*�y�'�gX;ڴ�SOit���{��
+9Φ=`��Fl|�����K�YN��#���tɐF�M�)���*�BD�Uyyщš1�b�QU�r�Q�
˲��L:(-ɹ��icVOBE����a�"o@��1K�?��{�(5)H��k��Bf2<e���[�HQ�Ȫ�\�B߇��E�TH���E�`E]H���D�fD����5�h�*�
���R]ds��L)��!�d�䒥�����J*^�H��	��cM,]���(�P
+kIZ�g���a����
{���V��,���X�xbɒEdI%b�&-��	k,w��].�ѫ�?b9���������m���~���O?c���]G�D����ci���2�
G�B^f�F�o�������%�&h�[��۵{<��C��t��V�o���.8��ye~�������k6
�e����_�t��}u����G�^S�����z�<
+
+=�x�g��<]���	���7��_��н�������蚨�k��snmyέ�ݙJ/v�I��HV�'h|�I�<��˓�
�L�Q������WHȬX��K������9�.}�qM�N�ƽo2%j�
��
+�KZ�岉
_ziÞ���y��Ы�w���6��
k�Ɖ����ϝ=�z1�����K��;/ڹ��KHXwh�ٚē���cH��[�}��#V���$rCu8Q����(%�jp��r��c*[�f�ƕ@z9vX¼
m�ɧ��1 \[�X�I���&��I��`�S�:��]؁�We�Һ��4ǚ9BVfzК�B�
+��Y����h�LՈb���dXw�S'�/v}m�@�!����0V�������
���	���!��
+��C�ݾ$-���h
��=P'���P�X,
5m"FkM�� x
�x�L*�	��F}Y��Y�bg�zh୏sp(n�ʾ���l��s�>�B�Ǫ����Տŋ
+���k������#ʖ�E?;b��16f|�
��;8>
��\�e�c�b�H�l�j��|�83��1�
I�u�:��b��K]HE�Ġʰ-��~��,R4�Hbf�b�S��Xkє�E��ٍ+]x�X]���\�4j[�"�6j[ᜦ(&VY��
�+,�I�����\D�䔊5/���js�K��i=M��j^@��.��ħ$!�E��ɥJ'�kѲ��˕�Z�L����`-W.�LY�I*+�d�^Q��wЊm��}O���e�T/W6����\�\R�2E �\�UD6�R�|R��H�yI;�ʚm�(���%K�B�&M����W^��ƌ�K�,U�d��%J+^"�X�#ҮL�F{���'#���^����4��M�`I�$�=���-�ߚ]>���%_�HQ��x����7c3[Րq%�|ef~�rDfˆ�١ə
�
�Lx���j���d���fff���|��W^�t�`�VE/b2��#����iq�a�����
+�߿�rT�K?�n���Y�LbF���딮%u�m��Z���m�ynomT>L��/��.
�]�.6�1- 3�N�^	���b���
��h)B���6k�`��/x骦gU�b$
X��3S
���7c�[ث�%��̔?�&e���}�W�����ח?��'�('�
�/]օK�>�.O�(j&�뛞I�5���J�7~=dr����o��TJ��h�"]D�4�&
��H�N��.n{�8��E-
����0	n���W^�
u���:n*к�p�)����
���k��%����Zl�X�,I����
��k�أ(���o{ꇝO�j�RX���b�����&���ƅ�c���o��F�="l��{�{tB�	�Qn�
�77���V�5G�
+7!8:Is�g뵳{�袊����A�?����:h�7��������J�Sg��'�
��s������?�-QbF�,���{������z|�6ٌc6f"%� d���"�T�la�A�
Ӳ���L"t�ԌY��Oy:F�ƌF��ɲ�����'�i�L]%R�6�9i1P|#!�X��)E2˗)Y�x���Ċ����"7Ă�u�8��
�5VY��Z�/A���Y
�OZ�LK�lE�e�|ʀj'-��R�X��XSʕO�Z�\J�h�F�rE��4�+[��8�T�<6��ɲ�cM��Z2UEe�%*��QA+D����ƕ婗�-k����~�!��͝����n���u
w�ڵ{��={��۷���}���hP*HO�ͯ��Ʒ4�}�x�5�ff�y���O�ں��况c3�l\W�	Y{�U�K�k?e
�/}�Rղan�k^��^-��/�_�����6(C���k��+��
�՛��Yz��_�O�������	�O)k}��P�#BS��i��^ݎW������/�o�S�PD�>�sϺ�f��+�/ ߥN'�,_�W�l�U�z5L?^��f��{~x�Y�7�-�x̋/�#���dDkԐ�UPXmgf��� ��{Vl���]�<~�;���ݤk��K'6����΍�m��l*�e(
+yYV�ݩ��)�����v9z[�۱ �g�S����.�B6*O�uϭ}���ѣ�؟�P���������U�t�!�p��V�f"C�b/"�5l��-O�=�S��L��?��n:��hY=�ddM/�i{���c�>���D����U���?���[=�����:b����̓�mxr%�Q�6	�4��1�O�`��k)j��)4�<�X����s��T��n�2uðT�a����� <��x3,o$��W^+�o
�kNe��q�Wu����A%�7
�Qk��Xg��!B���rt����
�����=���9sj���v�J�Y�c*7�X/�4�=;����}�rލ���M3ۘ	���(��zފXu�B��4~)+,]'�#�W\�
]�W�cN�IQ^c�LM�c�
Ic�\=�t
jP�B�Ǻf��Yc�$?
r��657cV�d-J�jo'fE�)��t�&�������e�KH�u��3�>���>:��*�-QR�_c������E�G�pc&΋���d�>�-�
SŒ

���
��R
kMyݒRRRJ�-Z�lJ���˔N)]&�l�beˤ�=Xa���˔-ó�
+	�Q��j�u�-
Cu!rʖ).+_��)�+��`���od
:c�S.�>�`2:�������k�?�
�f)�Mc
�R��������
+���6V���:�O#y�s�{ԔNh����'���[������=�>���+>�pQ%:�k��&��bEϚ�|�
2R�\�}@ᙿ�Y��X!�G�AS�K��Ǚ�D"b3��-s�򞙳j=$ːϦv��X�'D�넄�_yI�i�=��.{���'=�:q��߿���U��G�w��
�OYvI�˲͞����U����ڏ>��p���:'|t�u�[�n���m��&��N���C|�7���V�b��i��%d���N/>���+��}�SR����|��
+���D�eW}ڳq��l�zէ=.�����l_���ƕ��|��C��
���3	ϯ���55;ŕ����U
��״�u*����+���¿]�8 �>��s�s__R3!q����n�O�[a��g������~ҭў�;���Kj���4]���QU��㙑�(�M��qw�JY�Z���)�����&�� ��0)�� [��˒�*_?U�n�d��Ƶθل��^ObY��K܆.S )�a	�2Ȋ��
9n�.�z�Lݕ(�� �C�C��7M0��([��/9��Bc�ʨ��+�~ɣ�J��zC��Y��z*�q

+"���$|����H�QI��\�z�MH�ur�3�xqՃ���˭,b{)���N����6�e�X
G^�'�
��Vԧb�;X�iu��Q3$���_�Kڧ��e �����f�˕ܣ��Q�b=2�˼��
�1�Z�]���=
��;��2C����1b���
�z at P1K9��G{�x!W*L?i
+=��b�݁�h���	5O-����9�^��o�P�©����w�M�~���WR�ɓ&=3|����s�<�wK�!���>����k�n�0����~&�.�"[��d��B��<(�1�vt�8"J;������hڷ[�x��~/��}��v�D$�۾A�:"I�m�����l�l>l�����C�^���ː�6f����(�ӎ�O;�/�{�
,^�\Y�i��O�p�
)4�XC���ʆ����N`�<� ��W���Rv�s��������mjћ�)/��Q�)�~�I�''���2z
TU$?�.z]�����u���ְe��v����"ۈ�[�k$%]7��Eq��L.-ܔd$�LA��}�+[Y�Y�e*A.��������
�>D�k�}T�/Z��3� ��6�j�I�I@n�=�v
t�
	�������
,d�͇�1PL= T���
?E�bזv�#�
in]_1�L�θ��A︙��0`
ǣ
�8D��י��Wx=����]����Q�
%�U2Msts߳\1�.S�8�*ڕ��R3nL�-�~��$�[~��	e�~�م��#�
�>�
�s���D�o�.�$�Tl̓.��1����<��
��(�JW�b�j�E�cŔZ4��jN�eq`Soq\��3fŽe�v�,Y�Ř�6S��
+�l�k�ݤ��щ	�W*ٲNթ��m�ná��S}5��B�uà�◥�$��"1�dQ=����5l b�Z{��VPc���h�!�jB=ݢCZ^l�(�$\l�򘕷����HO[i��?(V�Tɳ��o9�
;�������!��ٸ��[������u�
2A��np�`��0)!�����_�
:��ɘ�cɒ.���t��~�(���f1����H�<��}3�3����r�ǰ��@S?��N��T+��R
�he�|�3�*Z�M�Jg�������	R��m��
X��QO\p��]���c8�of�� �p���oV��#�Ś��i�2��Z�}��"�)�aۢf����vQzd��CH� �~;�]��7A�$@{�T(ષ�:i��vt��Z�K�
��T��O�u���B"MC�D�K���Okt�]L]L��A]��"�L��uoW;��F�<V�_� �r��@��L�8�	*�},������yqe-��@8i���؁'�~��˗4�J�;�?�
��O݀�(�tQ���ع��	��B\
s��gvY�UE�s
�Y?#Ty��/D[���z�(�,�i'�t�G�br��٘in��3:����ŀ5�V|_��	�b�Y(���j��S�r��^�6��h�;
�
 [...]
+x��[B�8�y`�\I��O0���S%�QY}P���f��~w0�#׺�e���6IbM�ŀ��ưH)"K�$�fQr "@H�V�(�_b,�t�_��Y�զcb
���	.����)�e-KՄ�u��c��_�LuvyMU�����
+�
!�mP�,��%��tYd��{]�
�H$�
���`�dT��7�!�v���y��e�ծ7]6�W�,�]��vri�?���8��yq�!�wL��G {��Z�;�w#n�}�9HL�Y�Αp��_��9��9�W�:��D�صf]���]�$A
k9<b2e)=\|����G����g�J�O�OA���'��<�
+��g��2\鐞�Ǐ�|k�z϶/�
1�|��!�����g���q4�ӻZ �
X��)��.�b������y�b��GK�c �d�6Ws�a���a"�zQ��b�� ��Z^Ƭ(�UR�7X�I>yb��$IU�S6!�he�cOm$��H;�������@B�V�c��
A]��46+K�2B
�"��_���C
�qӭQ�=�
+Su%� �D�
���vbMLp���R�K\���`M
�
��l�:h�%����̕=�4.�7!��BQayn(=2�QY�U��]v��y��$4�4z+j���U�a`����@;I4E�%ƌ�!Ժ3j�,Y���+[�POtIܥ��ז]u�����:���y�Q]
��t�'�����w�� ���*��B�`,#Q
+N�
�ďEV\YLyD�&(�2���
6̋���qh�LF{��o
�:���}��n�&
ꨋ+�
�,!խ�����u�
��]D�"�S� @�cEl58�B��1|c=$�q��uIק���U��R���7|x��p���1z��D�
��W��j�AC�PҬo����!�3�QA�qu���]E� �ߚMH�/:�t$�iYU�lp9έ�ֶ�
.���]?l}��/{5`<Ƃ^�����y� ��B���,v�lW�ɤbTX^���;��+�
H��\��C����)R\��Eh�Z����JMӍ�i�[��ʋ�U��4?VҼ�݉9V�r���d2�疑]-
T���~�PĝN�'瘝]
M7]�F�E�B�
+&c�B�5���CikS:��ǚ��Iͩs������u
��MG?�h�q2�X�,���2�$Ӳ��U�X_1��~�i�llP�I(��zU�%i�ai?QL}K�ۖ
���Jdc�Ec�V_!G�߄ܖUI�BfT�'�Ď	��rL���]� jWw�b����n8��@Bݤ# �g���1 ��C�"Ӳ�
+)ذ�1
Ҍ�0-�m�ް
+Ĉ2���P���x%%]m7��
+1k Z]s��L��`��7a�
r� ی��POj�ό����uO��
����N at C�CR��������U��n�r����c��:l�cr����e1�i�6��V��ˆ���H��&��}���i�E��Bԓ�[N�M���(n�`��V��Qcx{�|��
�"*T�Q�a+����ݺф7�Ej�������9���p�Q"/���Hs�'�}ٸo%Φ��8�7ߏ�O�O	�v`�+�H=q�V��
>-��{A��]�
"��e��
+�D��۞}��{��8�l�J{E��
�4TTU=2d	�C;���C��(�����Յ�1�A���I^f1xC�bÖ@��1V�,�e����l<�e-��㌚t�n���V���`q���DVm(q��R�!ܯ9K�>;v�<�cd�3ǝ�
�0���`��ø"��lɗy>Ĺ�Y��
빩u�noR�ϻ�2A<��
|������{��;�z$
���I���%9V4���"i��GV12��,9�O.
+<�`q\YRV��6
+
;��,��GL��$65Xu�B��b��:���Iz1�
?,D��+��&-���X9(�w����{�m�ٲyi�,���
+�Q)e默C����گj]=��
Ct/
��nZ�-�i�1
w��F��:���jF+�O�jL܄]��M�����R]����4c��cu��kԚ�b#�.8�Q-��q���I��NSP��Pp����ff��9�:M1nM�D�ox{t�_�
3�ñ[�$�8�u��"
Q��
+Ur<s<7ts�ڰg�c;�J6V�i�V�5��ޢl&�P�\,����v5:"c(벼fm�
�Qb�E��1+��ɰ
�K^�4N����u��R�hH�f_�l�X�g�&��Y"F�8@̓h��!�]Ĝ

�
����WZ1����!��2�D�e�N&v۴EQH3f�.��O7�U�3A� 
}��'���J���f"�$ER#�ak������񱌃a����Y�D�OwY�/O�z#��rP���mrT��b=� s]s4I�

��EG� 5�E�
oL8��C��Mwqbæ��IG�a�Ы%P5�ᨊ�� ��du�{d��=�x*�+�-�

F�%�%�&Ub݊y6�}�=�f�����E�y����J�34�pΠ�J�l��__�l)m����>��.��}�#��bJ��ь+��xhH[hې
��
I�uS���
Z7�y�S�F�Ɍ��M@`}C����/O�s��f谾��%l�bc�bɂ�MZ_	1�/CSiە`;��O��
�k�.RuC.9k�
v�0ota����%wGN�W��6Zg�q߲��l{6Y5�t�m�	v��#�3pʝC㸆[00��ޘ휚�
?H}�o�!RI�ʻ��c��+�1�������kO_�c�iV
Q1E�"k����h�
�flޓ�Xu [...]
+i݈�ۘ.�ByH)&�������Jx�^o��-n)��.������PQS�4hV�=Ͼ���ǡ��c	�Lǐ�p&b�t2Ķ�>�>�\>�K��K�\|V�ctٺ(�˙���U���|=�C��l݈b HQ���I5�SD��W���!�
��]���g��w�ʍP��6�f��F�ƹ��O�R���jX�ƺB�#ր��c��1�1�;���7	���5~��?��Y5�+�B�e��!�~	R9&Կ��H4ie1H���Vc�\�-���o�6�l�ZEl7
+�^
�ztQ^ �ʁ��%%9�K~�{�����}��V�:�xK�� Ǯr��-�����8�%Nl��,�z��4}�v;�d�Dz����N�,o�1R,o�1�H�$
T����X��iR;͞c��|0d�@Ҋ�
q�x�T�;�O˃�G��G�eRR��x��^�w�)�����z1oJƓO<���Ș�t(��Y6mr�u���q7Q�M6D��d72�����5d
E��w^+�k�x�)�K�e
��j���
��!b�Tۢ��{�T"���g��G� 6H����Ct��hz�|�+�d��"��a(ެx�hH9c�uV�iQp�^H}鏅T�%�����r
P�Ƞn{mo,P�w�!�A�e��z=�Hj�A�C��O�k
�`�,�Y�%�5o.�	!�kPN�QK3k'$��:;��}{�f{�}��j�

`A���j;��x��-̭��G�[u��Dp��fw;՗4��eH�Ej]�4U�:J%
7��׀�
��@֢c���Q{��[��B����l����� [...]
],�+YIP�a����DzI,��X>3I�N�n��v�Q;��,+J_J�M�w�7Z���
�oA��
+
=<���ظ	~��n{��� �����%�Q7�L%�`
ٱ�162����$
��[���[
G!}k3Ԍ=G�Ej>Z��[�rOb18����
+!�T?��b��[�5o���H�
؂(��N�9����vb}{��
'������<�]�J5}���?�x�
+���ګ�b�6�qe�Y�V�G�(�e���%�W�����x�z?�}n,���Zk�qt\�1eBn>YQג7�����ϢNZP�G�W4
�G6㉭	��xo�� Ps���Y8>��)�*G尢aǣ���k�8�譺���
q̏E�
4Ԥq�n�tq�b��p۳�q/p>�̲B�}�ǎ
+{�ǣO��X�
3i�H�R��B!V^!�0CŬ��n︔�u�u\����u���ޗ���<�^w��[��G��8�@>��?�<��7?�Cq0���+�c�ի��'�{�b����u��x���l����-��P,'[�B���dC)����c]��r�kd�x�p
+���
�u��+i~3�;
Y~l����C�l!�
�Q3�幛��B�Q�Qa�`VEf�^�nz�����l�RYT%l�雋�xCa�J�p^�����\j/��
{�Ĕ��։�WTmb�^#��^���7_���mM��˕����[��v3Թ.#�0� #�0� #�_��]��S���W�k��+I.U�����ܺK���S��[�}t�-�䗾��� #�0� #�0�@vxq��N
�m�y���hR��q��h
q�%vv�⺌ #�0� #�0�@
@��_Rqe�d&�y�,�
+� #�0� #�0'=��b���+��)���q����0� #�0� #p�4s~���m�e�hSژ���>�A���F�`F�`F�p!`��m�ʬ��
+
+���#�+W��R��?�8�7"V̩b��
=
+��&r
+����
̲�Y��0Od[YP��0� #�0������V����6�ϴ+��r��ʕ��T=�\�����)Q���yηn�X�C4m�.�۽��
H���G��o�([��w�u���A�l��
+��,H�B�u��_w}ǿ�V��5������0
B�W��It
�3��%�|��;K����2���Vh߹ #�0� #��8�	��hd������Պ�`��^u�UU�V
˻�u3���G~ �hѢ9��-�o���
:��JOOgΜ[n�SMD�#--��ۺ��/�-��?�.^t��w
�#�UD!�b����dz\=��
3^
%W�ZI{B����	>
��sF�`F�(Hh�lٕ����g�oX��f+W�T�JZ�}�M�SN�̒��Zu_~��[�8��6���g�d��e�-��V�
+H�޽{�v�v��5���_7m�D�Z�RkrM�k���g`ָ����UŊ����{�֧�~�o��F�	
����иIS�;c�
����O�},-�3k�Y�&�2�6nڹs��C�Ԯ]��3o�����]��Y�Z��
ȟ}N�{�������?��nX����efd��‹͚_���N��O>9RINH at 7�\~$ ��o��0J�Q�|9��*�+�
O�O��|�����_�z%����vۿ�~��UW]��?���DS�ϖ,qk�	�c���/c`k�BO�9,�7�I�f ���O?v,���p�pF�`F��e)v�
>�� �r���
�U��ύ���W�x���+�?����o�9��q�ܟ}$;��������_>����ÇC�[��_����V~����tJ�b�_���Ե�ݦM�J�+�	�����i��?���/���2���+T���b9����X��ׯ]���*������ ��Td���˗���ڿ7n�8��C�+��cƎyv��V�bŧG�
7~���\�<���^=���3�>;�����H��

]a���-:hj��O?�̨Q#/ZT�x��w�3|��O>�ħ��-:`�Z�`m@�Bw�|p״�/L�4���g�x��?���
YЁ�0� #�0�@.!@�-���N�}�r�
�� 3d�ZgamѲ��9�a�
K���&N�W�6�U�vj�V-�9xЫӦeɅ<��{��r���?�`�?׫W����{�q��`�QF�*��V��5ަo��yٲe?��5���w�|�%D4��J�*�s�٩��P,u��޽�c�����ƍ/JN.]��ի�}�O�~�^x���ܳ`���p�N7]rI+�mެ�c�>
+c���с5��V���3q�
#�|��Q��
v�r�.6x� ;��Z��w�ҥ_FW��5*l<$h�`���
{좋�uV�{�k�ڵ�����{��_|a�{���������7a0�
�u����;�
�k����;K:�����2� #�0��2
c�e=ƿ�\9�����{o�'�`}c�L%�0�mټξ�_C�Zg�zϽ����4|z��$m����
��~����>In�2u4���/��f�3�z�mHxo���Ŋ]}U[%M�
�c�f�������~���;n�
�}Ǟ�͚ūң~�<���gdd�ѣ���φ��v��[n����:�
Tٷ�B>!�|
��[�
9r�^u�%$�[�퇳͟���gZ�jG�
+pj�h,�=�\�^��0��=���2���6 ����>���x]!C�P�
���=�xFV���x�F�`F ��ӛ͕���èrB�3j�	�ٚg�v��&)%��3ľw�~k�'�Њ��˾��Hrr��z��m���U�hN���ZZNSeыN�:�~�-l�/\2����!}lּ��0*7iܸ|�
+g�y��kW�X
/(���N�ڵ�_
6t苓&#���Ýo���N�����,X0�� ��
yJ��S ~�`&&%�?3��{�(�����uOe�3�.
B�:b��jժE�Z�p͂&\�`F�`r
;U�����4t��f�Gm�}v�R�J���O5k�a�"�I|��ݖh��3j��}�
B+���֯�T����-~dd �C��t�M[�n�?>Ho�Ν�O���}���w�}���7o�
�A���:���?�ؐe}d�g����T@�[�nٿ�����C�Zg�޽�
D�áD�K�.��0O��)�֋(��!?�O�s��� D��ex���a`S�
�5k�LJ�Őő�F�`F ��f�v��(��)	��,���FJJ�~�����z��
;~ں��9s�
;v\<�c�v������u��]R�T�k۵Ô�
6�x;u�T�(S��_0��Ï>޽~{��4"��hq�C��iԨ����� qꩧ���<aH�L�߹�{�/^".M����|x�RxN����
��%�Z%&& ��-�<��)?�����Inp�
������͟�>����g�$�
 t<�(
+V���
��V>"�υ����£�
��
��$��_|0z�\�`F�`ro�
���,�>�/��就����Pȼ��{
z!�Z�lu�WM�<�۲�����
^H녍."!�F=yꩧ\}�5�=6�O���
+T�R
�
vA���ՇCsVlx�;u:p�@�NzV_
}�k2�ߘ3'��M��9^50�]{�oߦ͚�~G�Z5��׿�)+��C�b�
+cnjyc��.��^8p�
��?r�]��
��׽��
;
'��g\H��8

�)�O�3��B�3�;�u-S<o����i��*�Y��n\hsaF�`F���l91�X�Z�6�{�?�88{����w��3G��k��0q!�j���
����&8&�U�
3� #�0���A��M�|���V|�m��whP�����gm��
qe�~M\9Շ+W��in���r~�l��ɥuNb�
�4�m�s:�:�emC{0"Ep�
���\9k.�0� #��$�Y\�]vre"�W~�$���2
ɕ����F�+�S��aF�((4��/ٕ�C��ĕ��>M�c�͚��b]�藟v�*Y*K>����0� #�0������XI�>
+}A%��0� #�0� #�0�M�
d+f�HHc3"��=qGA.$0r7F�`F�`
+$�-S e=���A]g�2��F�`F�`
+�[DX9.;嬭�~3q�&�!g^��/]��7c���0� #�0� #�|n���3�1����qW֞ʒ+?�ç3
+>*�CF�`F�`�����w��}��U+w�����"E�T�T�F�q�
��E\Y��l\y����W��\����#�0� #�0����Y�x�W\uf�Z�ř"�Eff��t�Ofơ�����}���.��]�a&WB�1�
+b�KF�`F�`�‚��|����ԩS$)�x�X�
;���v��#G9|811��)Uk֬��ڜ�Y}�Ң��%&`ΟX

x�OF�`
+4ӦM���
O;���/���9F�`|8��~Q�f0'{d�ժW�<��bŌSZ��Lf�<�F��"�z�j�K,`��~�~����°�ӧ�\�������4�{����
8pժUk֬	�S�6�F�8��"+V,��"E�%��F
���b���*�
0� #P����/A�_y啯����G
9a=-[��wޙ��~���Ǐ_w�u��rJժUC�T��
qF�`N.��?��lf��Ebe6+���ȭ3���F�r�ʠ�M�40`���R��7߼��+��v���u�]zV��@pkժժU�I�&i�0
�

+��9�ӷo_8Džv�'����bT`�޽�z�:���;�!C��9����Zl�u�Yd#W��Ҹ #�0yP�u_�]����[6G��V.#��
��y�Y+F�8�/^
Z���Ypb�d|��g��̓c�/�>�믿~���?�<����Æ
[�lٌ3�����
|4gu����7G�����������^����˱
�#gci� #��A@���z��=�ש[��߶Փ.k'
m]��`�2���.�J� #��X`9�mڴiR��U������O?�v����{�ҥKq�=t�x�A�`l�\�޽{���"O�>
tve��C�ܹssP}w�{�:u�4n�����={6ɇE�|��بR�
+���`�b,�`����7kV
<����ڞuN��M�
ؿo���l�
+we�H��۲�+[��!6+����Z1���A�aÆp� �Et�g�}�]�n]�n�4h �{�
wP�~�u�֥2`��C2��<�`����2��$�ߋ��nt�
ړ}�,�`���)ժ_��
+��0#)���
.����R\3�2E�
A�5]V\�$!f\&��9<�S� #���O6l����q��
;�m��?����
,;v���!B���~�_,
.�
���ӃK3� #���V��q<<7��Ŋ�كi�lFRNR&d��%Skf�r��0��5j�"#:��˖-0
#��g�y�$�b����~�-�ܴim�LѢE��ۇ
� �}N
��q�F�
ړS�Y#�0�����[7l��*x2n㔑�8^Hq�n3� #`C ��}�N��pl�-z��p�ҥ۷o��㏃��]�a�hɒ%�t�bL��������SO�b����w�6�?�m,~U�㯸�
+�;G�	&�p�
���
+Do7�MpEF�`���|V��+����EWXIF�`N *Tx���x�
�tC�	ĠЍ�
9��SOm׮�<н{w�'_
L�C��{E��<�L���C��ꪫ(�&bK@8Rc�
�����ֶm[����W �v��
+WdF ?"�X����|���O��ˉ}�6����/~=?��ufF�$" �1��}��7'Qn�`F��Ĉ�P����3^����E�f��u�:�|ù�
+�����.�0�@�C ^��c�P�q��]����0#�0y��ig�wսu����_�:��޵��yY��-zT�����n�Ҥ{�&�Wᢿ�o�
%у6�n�����<y�Y)F�Ȼ 
�!�q뭷"�ܣ�>�wue�F�(|
<�~�H�����?|l�i{�uփ�~��$��'W5N
\Y�{sn�v�;�cF�(�\r�%H�@ˈ1���O�(Q��"��fF �# �� C�-��[��f��W&��
�we�|~�Y���_���(��0� #�rk���Cf�Ծ��#i����I����m��Ί�SRS�-��;�[��d>~��_ٌ!W����3� #�0� #�^$K63M���s,J~��{�0� #�0� #���t$�
>g��(s�V�^��ʹ�{�~;
� 	���?
���L
��ӆ��QŬ�bu���֭��G�ٽ�?��z��
?~�!I�;�޽{���/n=?��ó�>���?�!��Ep�ڵkC���1q�~a~OU�LAE �����w߭[����;u�Q�F�<4q�D�g1W���	��`F��G�,�]���Y.���~��k֬y��RRR at C�Q@��^{
e�/_��(�A��9s0���oƌ��*�\��Zŋ�ꫯ�R;c�
$��ի�C�ҥK���3~�x����Q�F!�?M�2���_��7uy?}Z���P=�@F`��x+CȰ;Sk׮�:uҝE��J�*�s�F�`����aM��e:k,I4�OG�Sv���+WFʨs�9)��/a�
 %˗/�U�T�v(!F����w��������'��nݺM�6�0
��
4x�����kSO��ٳ�#��
+Up��`�n֬���ѥE��C�i)U�T��\��"���r�o
�N�w�W_}��[nѝ�[�������bF�`�-���u�惡�c6��#���ѣ��̓-
D!B�����SSSCk��?�QFal�
�3�wށg��s�֭p�@V��n����C�����ׯO?��iώ�O��\��! '�r�ʭ_����
x�>�
+ƛzE-`=��0� #�0��5c��"���	+sb��(��dŕ
�4�#`T���_�c!� ��v׮]�vkd�ڲe˥�^
+W��۷��4-�g�:u���C~ �t��
^͛7�{��݋m�����]�>��x���Á%�q*T� 
1�HOl�:�w3�� c����0� #�0ym[�S��1�PR��I`N^�`��Y��x0a„��a�]�����-[S����zΟ?����w��!��ꫯ�ܹ�C=t�ر�(��d�b2������ӧô\ �ƝbF�`
+*i_��++�dJ�'�hn5jԨY�f˖-1�i�ܹ���Q�H�lb�2���}<�S1��`�$?�ez¨<dȐZ�j�
;V+3hР���޽[�t�aT�v����ϴ�ו�s���;�K������w�ٳg_v�e���5�<#�0� #�O :�$�&��Xٕ�3�ʖ�r��}�~o`p�� qX
�1999�`���iӦB���e�&O�L��I�&������ftA*��X�СCa'�d���
c�"��)�������r�|� ��A������
K�#xe|����?>�v��fF�`
+<%|����N�BG�� �;w��D�5D����
� �<�7n܈��;%ɏFYl; Fa�
+Z��1�oڴi̘10Z���geɒ%�[w�UW!L2l��c��J���+V���q��o��E��_Rt��� � �
��1���!
hq�?���&x]|뭷G�[�4i�8*f�A*	�y�
e�F�`F o"��I�e��˲��
��r��s��z �y���Qc�_\sڴi �`
;v�K��ѣI
J"�
6����}�uׁ�Ң38@>�Ԯ\�_��"@
x\��hgl�펆
7�
ȊNVB2A�1/�RE

8���;���
���@˰a��`����#G"`
��O�:u�̙f�A�6����� C�}cF�`�5�!����lj�O={ˆ�'.�o᨜�x�պ����E��uOYyF�#`&�<�Mss� #�0�@�E >�~}�>d�M���?�v<#3##��
MK��؁�K���.[��9��4nފ�K����
j�[_ŌS�f6�\1
+-��qF�`F�`�B����惁�o:�\����ٽ8|*
+��n3� #�0� #�d��:f:Vs�2$��	��&]�a�
�K�MT�:#�0� #�0�@@@:W
[�k�D��D
+�,�hs��c���[Z�6� #�0� #�0�����Xb>:�E�"�yӬ�?!g�F�`F�`�	pJV^
�b�	S3
�X�WF>���0� #�0� #����B�V��03�?e@�p�իW#<-H���Ŕ@��#�
)K?)��.O�7�*fEC��nݺ�]�6J���+��{�
?��s�2n�8?6�"7
+��`r
+��۷v�ڈ����O�k���G��(*q�† ��`�!��u�t��F�!�
��B?�����eF�`�:��B�
������Yy�E�(1����5k� �r����;��(�$ (�|�rlGA
+��̙ӰaC�ң
�ˢE�����;�\�t�/�H��۴i��/�P��~�m۶m�5
�G�#)��L���믛���ڥ�҂t�Q��e
+
@�k���P�ڵ����m۶��S� ��2� #�0�	�Ą
�lQ02�,g��<.�bF\*W�\�jUDpCB>�N$�
����˗G�*U�`;J��u����E鲃�<��S��H��/R"g5��f
!`�T��/�@��
.� ��
#1��(
���_ͯ]�/-�J���.S�@�J�c|s@�>�"G������Y����2� #�0����
+��TZ�+è�Crn_|�ѣG�͛[�B|5#��%8555���={֯_��؎2ݺuk͕����_����_�~}*�
O�uh��{�
xO+W�
�"�����=�w8aL
+,��� #�0�@>E at f���X��n���'��l���Zx2�
 ���ڵ+�nM^իWw� �
�	ڏ
pel�ݻ��M��n��vu��ŋ�^Yr>E�B�
+�|߾}�?6@��;$�_zz:<��i�XmF�`F�0  ]��/��*��Hr�WFT�
s�
f͚��	&�M�.��_�^�X`N&�����9P�7o�5!\�0#0}�t��
3�wF�`F �# ���O��-Vq0�K��#I�5j֬ٲeK�g�;w.�z�ad?�
���r��V�Z�s��s �1���|ciРM�r��`T.[��[��]�W�@A��<~�Y����{��
0�W̞=/o��O���"#�0� #P� 7I��"����D��S�f1�/�ѯ'� � U)H
�e�LNN�S��8

�6m 
� a��,CnpVFX
* �R�c�G���+����nh���W/`��ȱ
K��c�z
+�
D6���
+Xǹ;� #�0�@�@@�ޣy}r���؄<��E�G�w�޹s'�����Mv�3�pl۷o߸q#�Wh�L�$?Nk�� ��*h�P�X ӦM�
�5b\���@s�n��b�
+��L
(2��e�(Z��sR��!^��ꫯ������.�����1���I���[o!�
+�ܚ4i��*f,Bj	3��8�ɶY#�0� #�d/�rT���S�䛡�]���G�d��ܹ3̺�
:m�4�]���
;��a��Ѥ6J"�
6������u�]�(��
��8�+W�ėkD
��5�\V��ʨ�ж�o�^
?~<--
�Z���0�������`^~�Ri6lX�O
(��
9�t|�ԩ3g�4cRo�n�L%���%F�`F �# m�"���ZV�I,^�����hK��L���j��y��OD�^F "fBʈU�#�0� #�d��I�>d�M���?�v<#3##��
MK��؁�K���.[���铟{w�v�B� I����Z���!\���El^F�`F�`�‡ ��}ٚçs\#��pYγd��9��X�3�=fF�`F��y����u�0cnM��^9�5
���;6��.�i.�0� #�0� #P��9�E�
9�O,WVYJ�γve
�رQ�Ow�`F�`F ��=Y�S��u���2I	E]�6�\W�`F�`F�`�"�PEF��,�t,FF
Q��`F�`F�`N "ӈp��y)�}�uax&"
��^��hA��\�"�9��6��4~�<mh�* [...]
+4Ȉv�W�=�)ɸq�٬��(Ì=�)طo�ڵk#r��O?
ܮ�_�yL�
+:��јnx��g#42iGQ��T����׭[�#�7j��l&N�H����vYPA�~1� #�0���2S/4k�D�r��0��"H��f��]HII�ݻw0((��e(�|�rlGA��̙�"ȱ�aÆ�*�-Bn?d!A.kd$�!�E�>p�_~������o۶m��iH.�
����)S^�u3��_��_Z��nIOOG
�ҥK��
v��eϞ=Q��e
+*
@�k�5a(v����ٶm[d�)�
�~1� #�0N&����bfɏi�_���P�r�U�¤
+�*x��*�
J�/_
��T���(hB>��H^��z�_
\婧�WF�=}���Dy،!����[�b�
.� ��
#1��(
���_ͯ]�/-�J���͛7���1z"�7ZG�(]�2�9�7���;!r��� 1͟�#�0� #����������q0����	��ѣ��̓-
D!�Ё%8555 at 8���ׯG~lG��[�n��26�z�
�����ׯO��i�m�L�2��dɒ\�8��_�=�\�r��66�ի����*p(��6�0� #�0�@
E@�+��.��Yؓi���Wn�v ���Zx2���r�qw��`�&/��ի�� ߅����26��݋�d�
Pg�|G������ŋQ��N�ӧO�~�.��Rؿ5)�rO�b�F�B�
+�߾}�
l�:�wH
?8��c>_���gF�`
+0��#]X9��$c�lS�9y���f͂C„	�&p�]vٯ��
+O	,0'W�ڂ��
(͛7'!�O]�lY�^�
8 �P_��5͵
+ӧO�i�`�{�0� #�<T�8���W���"�_�2AS�F��5k�l�|q�ܹ��醑��z0*��9�ǣZ�jh]��3�
lư��A�4��a��Q�lٲn��v�_��t+�.�c{���Çϳ�
o4��
9�W���7(�{��ٳ���_?v�UbF�`
+��	��],lq0�������W�N r�:$
ⲁS&''G�SM�6
��u0�z�!7
8H ,�_)�1�#�O�����]7�]G�Z�j
>|8x�c6���y|� 9�c	~�z�����@dC�N�˽`�F�`��t�0��Y>V��(�ʄ��ݻw��	�9~�xD��]� � 
����7n��흉���	c-�
� ��*h�P�$ӦM�
�5b\�6�
�9D� _Y�b�W�\�-
TE
:�+@�_}������ڥ��r��A������a�F���ѪU�ܛ�X�n>�=^��z�-�W��[�&M_ŌEH
�
?=�A�XEF�`F�0! ��I*,�-,/
#���'!	�ڗ�4��ѹsg�u�� 4qڴi �`
;v����ѣ	a���6����
��ł����v�ʕ�r��o�g�k��Fde�Bh[Ӹ
׋�Ǐ����C
8p �!�
w�;��˯]�/-Æ
�(�~��~�}��}�G�
�+��ra��<�:r�H�C��S�Μ9ӌEH��n�L%�
%�>#�0� #�7��D��[rb�j�l�����m�Z�����]�}���Λ�`�������2oj�Z1� #�0��u���7�o��H��̌�L�{4-]ocvV,����l�'s���ܼ�?$&Q��ľ���:�|iW�
06G0'<��G� #�0� #�0���R��A�C&
A���yu�p��.yUe֋`F�`F � �l�f2��¢,=4
?���)
�ر���ty���#�0� #�0��	G �T�A��5Y�� cs��W�uxc�F��\�`F�`F�F@�X~�E�Qq0��E,I
v��s�0� #�0� #����"I��_Zt.iY����Č��X$#�0� #�0� #pR�DXF�)~\��+���?��[�W�^��X� �r.Pڏ
~$�~R?]�64 �*fE [...]
+�[Gm�ٱcǖ-[.���K.�d����o�
#�
*T������#!� u���JOO�x�N\�`F�`N 2�"�1
cY���F�`N^�`��Y�J�*5a„�w6�
p}P��e�b�:���Y#�����aZfpF�`F o"��[�XJG����+��E�q]�F��5k�l���Ν���n�O��2�����aʁ��B,���.�ys��/����
��/
��
8`~�={�e�]�_?���eF�`
+�h,3�\Y�\�(+�rD˲��W�N r�]$ˑ#GB+999��-^��iӦ���Z�]�l��ɓ)W��I��}����7�
+3�r
�}�~����j���?����n+�(q�F�`�����șd8�$>���x1�-K˲�7U޽{�Ν;1�i���͚5���
��5
+
�7nD�
+흉���	�.�
�0X-�u�7m�4f�����`X��,Y�qꪳ�
pz�̻g�5��u��z����I�&�;��o:�
?L'��a
F�`�‡@��@"�ؔ�H��r�[9UNhѢŅ^عsgD�%e��iӦ��
t��S�F�
M0�$B�a��쯻�:VZt�G�ڕ+W��5���� �n9� ���!؀ݚ�a�
"�{<r�H�C��S�Μ9�7�p��`��T��
�DF�`F��>�-Y���,��-KT?g۷�LK�!C6�����s��z׃�>���Y#Px0R�^sOF�`��� | ��>d�M���?�v<#3##��
MK��؁�K���.[���7^
�њ��j
�����5��7��	���/��>s� #�0� #�0��	F@%��m���6����:�`��h��9���Ǐ�!��2� #�0� #�0^�@�T]��W��fr͈8��$ La+�K��ҝ��p�� #�0� #�0y�
G����,�1��ז#s��<�L�%��*1� #�0� #��/$1�����HRb�dʈe9s_��>k�0� #�0� #� �XD� ����\���Y�d5��qdF�`F�`
+9V����b�͔�Ϣ�AA�W�^��X� �r.Pڏ�x$�~R?]�64�*fE�[�n�n�֮]z�<�k==� s�6׫WϜ�� 4�"G	�;���MsF@#��6�ƍC�u���H�5B8��'R1��l��#�0� #��-�j!ɰp��y�HEe��"�L����/׬Y��
ȁ׻w�஢$2�����˱
ȟ3gNÆ
o���
6dY���U�V-Z�x��HA���ӑ�t����

�t�gϞ(�rF�0` r\�-��;��ڵk�N�42m۶E�
�`F�`�,4m�H29`I�\YM��^��zP�r�U��
C,rS�LP%˗/�U�T�v� F����w��鲃������}�[�nӦ
6H��͛aW
1b�E��[n�	���eq%%�
?��H݇w�W_}CH#�t�R�'#�0� #�0yM�%1&Jl�N"
M>ٲ����y������K
F������
w�A�9e��٭˔)�V�,Y���XB!D �@�ʕ[�~=�
���8�
+
�⺸
+!��eF�`F�$" ݒ)˵� M��K�0��a2���J
��)S�D���R��ڵ+�n
E�)gǎ
[�l���K/���۷���i��֧O�~��a?��0F�eB�B�
+��o�>��
Pg�	_ 8�`�1\� #�0� #�WDY�,�s��Ѳ+K��=1�t ��
̚5�T�R&L�R%��>�Lٲe1�
+
!��o�lٲ^�z
8p �ʡ�y�G�I�G`���0-�}=YCF�`F�p"`�++/
�,WVe�gi`�jW�Q�F͚5[�l	~9w�\!��
#�I�`T��s�}<L9��C�����2z�2<�'O�<|��|�P8Gv
��޽{�	��c��޸��!�gϾ��"���N�� #�0�@�A at M�K��b>r��)L���$
+:�~�8q� (OA�
9r!�����	(�x��M�fS�k9��c�aJ�=i�$�C<x��D�Z�>�}ߏ�k���r
�}Ҷ~����jj���?��V�EwXIF�`F��! \D�%
#�#o�g�q0"y,�޽{�Ν��4~��f͚���XF��7A{g�$�q¸�m�(
VA
�c��M�6�3F���?�l�w���=Ĺ�ꪫD
6���믿�۷/�J��+V<��S�Z�ʾ=����B�_�V���[?�0�4i�q��|�M��餅"�8#�0� #���>�p,�b���b�	����(�V�-.���Ν;#j,�*@�i�@v�:v숩N�G�&DP�
� �ƶ&�fa�Egp�|ĩ]�r%�\#iH0���r�q*��C��5
�ժU�Q����k޼y�
=`Wf�<��n#G�D�8��:u�̙3�x�
���L%yPsV�`F�`���7�f�����cӺ���� �LhzF��=
���
#�DG�LH��dF�`��  H��̸݇�}��GҎgdfdd�ߣi�z;��b���e��{o���n�Mؖ�ě[�:���F.JN���dGk��0� #�0� #��#(]xrf��u,f
M��Q�0Nt�)��{9~���V��cF�`F�(p�P䉡s\
��$/�*�s^���½d?,]�;��!F�`F�`�� C
NNJ��
+���*���y���>K|0piF�`F�`F��@b��')�-�2Jʘq2l�09�U��'�`F�`F��
���q`�f|e��A��j�(�
X*#�0� #�0� #�' 
.�d$�9Y9\�2�*��dr���o����E
�. �%��ȊG2�'����iC��bVD��u�v��m�ڵ�x:�|���0�����K���^����@c� $ ��_|Ae��iJj׮�H�O?�t��y��R'$�7n
"(�[�NG
+oԨ��L�8�4���vy"�6F�`F 2dJ&
�e�c�	�LyJ"�` �ݚ5k�v9�z��
�J"c�,_�
�Qt��9s�4l���oްaC�*(�t��>}� � �

hن��wSlzz:��.]�Z�pa�.]���C��9�}��)S������|l��b� �5޲��ή]�v��I��m۶��S��ϽcF�`�7V�>N�e��O�����$BG+W�\�jU�`a��D�߀J(Y�|y�R�
+�#�O�|����ߡC���󐤺gϞ#F�h׮
5�n˖-
i�6o�
�2��]$��[�PB�5�c�.��yaGw�c��#.S�@�J��g�}���N�ꫯb�.�-��Y����1� #�0�������emٕ�4�/�r���y������V\%�1;555��֭[�ѯ_?؆C
� (����3�p�eʔ��%K�8�������ׯO����
E.S0�cO�r�֯_O��F�z�t��]�3���`�½`F�`�	�it��)�l�BoiW��/����w��S/<r؆w��l�F�ݻw߷o_���#jҢE���drk���N������^
+{6
���޽�Kvq� u�'�\�� P�B���z�
Pg�	�"8��k/� #�0� #�P3��υp� �l��Xq*II$�aN^�`��Y�J�*5a„Hur���W_ݹs�
z�رcہ��e�0�M�-[֫W��_9��G��X!G �
C�����gF�`�.2�X
�� ͖��#B'jԨQ�fMx��_Ν;W�n/7��'ՃQ^Ρ>
�
<x��ݻǎ
A}Q�
;w�4�ú
��ɓ'>��
�B�˖-�OD
�X�A���Fe�q��fϞ}�e�E��/0�pGF�`����a,�����c�12"v
ѯ'� � U(H
�YC-�9D��Wl���M�6�"�C����O��N0s�LO�j�:|�0�?T�c�_�b�C�v}�L�B ~� �zl��]��^��џ�PAǝeF�`�䯬WR���E�k�
+F
A_Xpa�qD�6D����#� �����7n�흉���	#�Î��(
VA
�j���6m3f
�����D�o���>� |C�3�]�	yѢE$
a4D~����ˊ+�z�V�Z�_X��
��W_}��f,0?�#*��
+
x�z뭷/qT�4i�x)�؂�ᇹ����F�`F� !@�ʴ�!�����
=
(�^7D�%_p�iӦ��
t���
�G�&Q�`��v���lWY��� ��S�r�J|�F��gd}˖-��!�] �A�^�Z5���>L�ѣ���_y�����uw�q삎�_��GW�KF�
��q��=u�T|�p�Ļ2���rGF�`�� �%+�ee:N,qZ��6�w�"ԃXjW.uy���|0�@u�;��2fB�\n��3� #�0��B >�~Xt2��m�I;�����I����m��Ί�SRS�-^����/��G��V�KΫ~j�zV.
_�r\��0� #�0� #�&@���V,V*k��:�ad��[�P8g�r���(k�0� #�0� #��\Y��[����WWV!��i�?>K����S��2� #�0� #��0F�8 
��}*.
�rX�@qg�,'Rn�`F�`F��"����:���r��B��bF�`F�`<��p
+�
+��"���~��1� #�0� #�0�
+#���&W��n�W�Fx,Z�v9(��G?M?)��.OwG�"�!�q�n�֮]z�� �7c���g����_|�E�>8���\�^==5P�
i��}�w��HJ��]@^st==�뇏�(���P��@n#�D��ƍC�u���H�5B8
+���~"�en+��F�`F .l�ʖ���/[$Z�#�老�vk֬Aڅ����`UP�Pf���؎�7�ϙ3�aÆș��)���t��Pf�
]�tٳG��
hhժUE�-^�8�C���.H�3�h�W�^��������Q� e�q㜵�F���d��-
okw�yg׮]���Ȧ��=ٔ��F�`F �б.�	3oy_����+W�\�jժ0� ���0�����˗G�*U�`;J'!F����#[�Ο�Yq��Ͱ��1�dI��H/��O>��u��mڴ��Y��ՠA$�F�k�/�OK�R�t��zf
7�Y�o( \ � #�1�9 u�	�
���t�RG��l6��F�`F �����J­
׆��!��G�Λ7�4��u�,��٩���ʔ)��K�,�K0Ё(C86��I��;��I#z�B��K=Ga��7;�s�(�K�\�r�ׯ��؀�����*p(�L?Q��2� #�0��IA�����|�7Πq�� p�2eJ�u	v�]�vح�^ܧO�~��]z饰CÀg*��4?��رc˖-(�%�l߾���i��u�ԁ#�����ˋ/v�7TϬA��9��Yk�ke�
+*@\wH6@���|i�<����X#�0� #��<���1����bn�2.B�0'/X�`֬YpH�0aB��X~�˖-�{��l�l at O�a2~�x��.�AAeʖ-��V�>����χ���~��!s�΅Ҽy�\�]�'��=a�qC�"0}�t�����F�`F��  �0��S�D�*��y�����S�F��5k�l��m�ܹB��F�����
/�P_X[�9=y�����
zR�jժ鞁�b:
�ǂI~��2�è<dȐZ�j�
;VW�r 
+�� E�3��Rn��_���s
+��{�B��c������!�gϾ��"���V,�`F�`�" 2,8���
עzv2�!��{�	@ ���a9r�8errrT�|���iӦх��
>|8�g��
VMv�I�&�����f�	�.�}��ݻwGl:^=#���4Ύ�����!.�5	���T�~����j��W����-Y�ϵF�`F W�^�I{��>��5�D�ܹ���ЬY3�}�˨Q���q�F8Bh�L�$?N_���'
+�UТ]�!ӦMcƌ��������*���
P�C^�b�SO=ժU� ;4f"��UW]�`�X�N�ؾ}��+"x
5M���$����]p�7 7���7WG
���쭷�z����I�&�;��o:�<�2h� #�0� #�7�Fe�����c��E�^xa�Ν5�|
@O�M��
6бcGLu=z4��p��X5�
� �+-:��#N�ʕ+���( �s����w܈{��;kp�9x\��h�l�n펆�8��
%+���2l�0�Ot=uw�q�
o��X,�Z�
9��{�ԩ3g�|�7
�D0od*)�}�N1� #�0�
�
�
.K�Vg׶�~�K%�C'��-���{��%�w�;��@̄�'�Yn�`F�(��ү�̸݇�}��GҎgdfdd�ߣi�z;��b���e���|�v���Q�R�s�Fff�^2EL�B�:w�`F�`F��!�� ,�XT�W�l�
�d9.�ؽ��D�Y�y1ք`F�`���@fFfzz�X�g
K?Nt9���u~ۼ~�O�5>�r���v���^>�;��AO��-O��_��S� e�� �D�#�0�@�C }0>���?��e��p�y�O9���+8��Ѧ]����~���#y&
+��^��Eϼ���0� #�0��ID`�o�^���e��N��βm��8Ȃ+�q�����u������`�IԒ�fF�`F�`N<�����
���ŷ�
<z
.rn��W�Lϔ��V���O���"#�0� #�0� #p2� J����!
�U
��&�^���� ��Sڏ�x�;�Ii�ty���wT1+�Xݺu�u�v��P�� �7cR
r� *�_|AU
횭#s�6׫WϜ�W�O4�LlW^y%�.#���
Vճ�~����~�
�
�*Hj3n�8DP^�n��ިQ#�RM�8�����˜���pF�`F��,�
�0��[�f
�. ^�޽��$�z����˱
�5ȟ3gNÆ
o���
6TIOOG��ҥKC��
v��eϞ=T
m9�֭�Z��hѢŋGz-ܯ����-BN�;�s�ҥ/��b,�H�
e�q�
��8���9�����ok]�v�ԩ�n�m۶�ړ��8F�`F��
����DmW�͈C�"�U�\�jժ0� ���0�����˗G�*U�`;J� F����w��!8��͛ag
1b�#��-�܂�x��r4�[G��֭[�i�Z��~�#�6�2Z��)	|��(]s�	�Ǎs@��:�������g�E�>����Z2ަ̟9�"
aF�`��F�I�
����o��G�Λ7�4���U�C����� �eʔ��%K�ĥ �Z�(C�;�uD9�^�_�
y�#��N1��7;�s�(�}�\�rT����]EH0E�aF�`����xd���$�j�2`G]�
AI7�
<eʔ���/��]��֧�vZ�>}���w饗�
^h#;v�زe
�_r�%�L���.���
�T�^=ފq�w㜅���"�*T@�}��Qul�:�wH���y�-k¹#�0� #��2����6;�]���
̚5�T�R&L�e�C��Otٲe�z�:p� ���}6 
~ࠠ2e˖�\+t���к'���7���P)6}�t��
U���� #�0�@>D�F�W��
'ɪ�5jԨY�f˖-���Ν���nE��&F0*��9���VxNO�<y����
~�N��`���
]�jժ�0Y�soq�Lm����S�%k��݋m��ǂ71����CfϞ}�e�E��g`F�`F�� `'�F�8�!��̘Qѯ'� � ?)H
�#G� �Vrrr6��x��M�FR�V��l@[������L�4	��
���DX�&̲�s��i�
C�oC\>k 
�1|��z���1���
DD̖���Z� #�0� #p�0�-
�,����޽{�Ν��4~�x����1(��5
+
�7n�#���DI�ㄑ��(
VA�v
��M�6�3FkĚ��믿�۷/�Aa�]�bbS�j�*��Y��s�9yƌ���S��{4���o�'������
w�q�
o#�L.���쭷�z���դI�
��p��
?L'́�X#�0� #��b��ʘlZ�5hѢ�ot���U�y =�6m�.�@ǎ
1�i���$%� �
�jl;#�+-:��#N�ʕ+��ICt�/����w_���{��;k��2<. at e�s6`�6���5׀�#�2�EH���y�
�����9�����čF�
��q��=u�ԙ3g���\��J,F�`F���X��Ē���f�ʻ�d�yqo��>:�y��"����1�#`&���6�`F�`�� �o�~պ�qS�����!_uFF&�=�����;+�NIM]�x��aC�9|�*-mޣ�4i�46�/
���0� #�0� #�0�
���x9v��9���Ǐ�)m�y
+4V�`F�`�<���l�"ɓFf
+[�^��.gOL~�3g{��F�`F�(xW�%�˓<Yhy�ϒ��J~�3����0� #�0� #��H2C)G����z��0� #�0� #�0YG��ŎD���s���)�dF�`F�(X8
,
s���,2�]y��7 at l`���z�j��B�a����Hʀ=����&�^�zz*
�G=*��"3��N����g�
��,����8��OR�!_
wT��Z~ݺu�u�v��P�
��'�Ԯ]��w��Ց6ᓑ5�
+ m5 �ׯ�����v��`
B��� #�0� #�0!8r\?�#���E��K�7�.]�L
�������}۶m���e˖��W�ZU�h��ŋ#
�[E��ӧR �T�÷�Z�����J�9�z��
\
%�A
e�/_��P�( �s��iذ��7߼a�G
���f�Y�jU$Ly�����Q	��L�2x�`(L�A�_y���{�G��xq��.�0� #�0� #��m����H��DD��o���<����ԇ�lY����z?�s�֭۴i�
�f`�={�
1bD�v��ʕ+�\�R�T���I��
	�+;8�
J�/_
2�T���P�( �0Z#�u�
���0�m6A��u�]iii���q��5h�@��I$
0`��D0^
���0� #�0� #��"`�-+
e�,����={��_�
��=@vkp��~�d׺
��2�8�Ioݺ�
p<��۲Ύ
=:o޼��;	��/�S� ���	�Y}���cǎE���_}�Сn9(7��鲳��bF�`F��C�d��LLȔ�ձ@���/��d���=�s�2eF�NY�X1*�cǎ-[�\z�p�ؾ};��ҽ{�}��5o��!
�:���ŋCO�.��_��!�|�
���k׮,s�n��Z�j�:u�KE���
j at 2��M�6�\?^
��/��0� #�0� #��L�1㫝
G�Z�C,pڴi��
����\�r�`nԨт
����s��=�бc�L�0�
n&�n�!v֬Ypؘ0aB�=Ӊ���,����T�81&Js_�8�َ�b� #�0� #���
�X�8�D�wfQ"��r�76�U�V�(X/&�Ք
&��.˃
��6pGx&��jԨ��z�(Q"T-���-[�ߗ
�=�0����_x9g�ǣB�
+P�����`� e�q�z�8��F�`F�`��0N��?��Y�CX�R%�rs�
��Q !24+ET�e˖M�<��ē&M�����ú��.����%��W8~�E�H����$ˑ#G������	(��HdS��:81(�9$Ǜ`�� #�0� #�0q! �r,R\Ԙq��7�|��^�b�W�[�,Y��h�
���X�Ί�fy��i�4(�X����X��B�1����v_PO,𜆇�ƍ��H��p��(��퐉ˆ�A�v���M�6�3Fk� �
������uF�`F�`L�]Y��~ʈtֈ�� �0!Ot�kB�i336`�u��Aj1�o�ĉ�$�y�xt��6*�gX��_tn� ��e�i�<�
=��$B�a����]w
=-��ߵ>��r��ٳg#cH�>9U ^
r�]��0� #�0� #�X�ƹ�W��w�F
㞦��Ms_btF :�5
�0�dF�` [...]
d�8)��5}N
+�(#�0� #�0
]�Ln�G��:ܲc#�a�v��>Y��bF�`F��pZ��\91�H���`��
'Kͼ����eF�`F� !@���vl��K���0� #�0� #�n�\Y��Qf�\���>� ������~*S���?}bMF�`���@�2$;�q����_y��C@|b�E�z�j��B�e�
�!��P�<�`FX�z���xT
9����~�L%��9�7�g�}60�>�U<�#�_߾}k׮
U�~�i���/$#$%O;�4��ׯ������C���˦|w5��y����; �x(>\�#ЫW���?��.��o��E�XFT)����#�0� #���a��#�Z"�aѢE�]�,$K�.EF�����m۶�'R���W�ZU�h��ŋ��W�V �O�>H��S�}��k����V,@ϊ~����}��)S�����HL�/�	R��+�|��׏<���⯽�6�/_��(�����Ϙ1�A_���2'
�7����K��<.�ȅ�NN
Q\�O:ڬ #�0� #�{x��wZ~ꩧ��o��XC������Hn�,��9g�
l���έ[�nӦ
6
���ٳ�#ڵk�U�\���|_���xb�Y
�o��~�nݺ������o����Db��d��S�|yԭR�
+���?����
 d �"1JC\� ��������G[����
�S�N���?��#r�w��]�F%/��b| A�I�ݙj��i�M7݄�2�a�'���i'�SB-��$�z�(�3.I7 �x�
<x0�#]��o�]�F
��� �M0� #�09�����_Y��(��v��ٳ~�z��,�l���
��ɥu�H<��Ǒ�z�֭ݺu��m��޶W�`}�5�ʃ@���~��T6l�����
�d��\��Ty�w���5��։D 3�� �np�x
�������w�޽{
�b
��s�
�!��o�WP׮]۶m{��Ra���t��x�ë�g�}��c���t�G�y�VA�V�Z�+��?��'jn�`F��U�4Z�dÙ·]�^��g	x0�)S�
��ڔ�cǎ-[�\z�p��i
+v2]�4x4o��!�aÆ:���ŋP��]ѯ<1����澞���w������7m�4�\֯���N�:�����K
G�q��8_��	ճbŊ�v������r޼y�*/���_|��p�ч<��۸q�ʕ+'L�йsg*|��Qx_��rk�)������Wd���%Kv�����'܁~��'h�V �oh�� #�0� #���+{'��N`��6m�j!`�|�ʕ�3>/X�@����h衇�
;f6
+ޠ�}��tv��r]w� ��,�w�?�
D���������W�z<t�P���'
e�A�i%��͛7Ï����7n
����G
u
��L%�����w�_���d
�f+���p�wh�?��\�`F������
ѿZ�j(����q�k� �^8;֔

����A��
+�{��cǚ
�'R'�(Q�D�N��8����P�Jj#
��`�&�p�
��e�
xk`F�g���s��_쇑rȐ!�j�r@�嶸b�!��/�eœ����i�n���&\�&Mr(ðc�[��/4S7��~ZE��{�dF�`F�$# ��H�e�p!H���5Z־J�*!�����
+��SO�v��j�'O&;1&3
<xPW���СC������T�>Q~�1O�q0�<|��-�_t�ٌ�]��%��
t
/�kq�� f�b��^F�w�f����@��e�ɦ��r�W�ڃ��I .I���ܜB��2n���o&]t������9��0� #��$D����ʒ:GOEҿ��b�<)1��+�-K�,Q�\@�OƂ
؉��,�-&0!ԃ�RWKZLb��J\�@�gyД�o�~��
��W_}1
+��v��;\䃑ӢIUh۷o�V�o5k�q��C ���/�N�����GLj���{�n�	
>
�sC=�Sw�r��+���B�d��d���a����
+��$������
�,�`F�8qXtٚۧ�^�NjJbR��1c0=�O����pQ��{mf�����Ҙ���'N$ N����#���	����סC�;�Q/k�D@�9l;�\w�uxa��"������t2���Ƶr���FPm�	$�A
7
o��#F�y�\0��
>��S|��#�)�"D#(�̙3�
+f�N
+P
=Է�|� !U�ML�����?�P'�~�sa��0� #��`K�Qw������I6,,�w7�>�Aߙ|�U���|� \q@%�|�I�/��
^���
�2� #�0@ >~8t2��m�I;�����I����m��Ί�SRS�}���Æ��Z-m�?�lܤ��WV���!�2�
F��! o�*P���X�����e2� #�09���s�l.�y�-�pˎ
?��x��,�,��!�Xp��?�eX��,w�+2� #�0'#I�7'�pˎ
�	��1��'�4pӌ #�0� #�0y ��
�R��낡�-;6�`��|
8=�#�0� #�0���C at Pe�\$*���S�[fF�`F�`N*2X�#���Mb����I��gF�`F�(�x�_W|��.��W^	?��\$�W�F��:&�������~�z��T<*��T
\�����?���� ��ƭO@w����U2%�����ۦM�@�ri'�J��o��B����Gb�P�� #�0� #�0�@^@�4-;�`D�oѢE��?��,]�,�L��<۶m�
� 13?�Z��hѢŋGJ<w+�ӧO����_r�%t�d)���

���l�{���}��
�D
x��4Ŕ���Ǥt�����

�t�gϞ��r1F�`F�`�����r���1�������+#�
��HM��ԺK0�R.$ö��4�0�b�������gϞ#F�h׮�>T�re�Ћ�T�R���P�li�������g��۷�
7� 
.���^�zA��͛aWFw`VG~
+��D}'���� #�0� #�0�"`ؕ��2q�`weXIׯ_��̞�u��\����_~��
"��(c�#��֭[�u�֯_?�b�՞��5��Zn�aA���o�>R�2e���%Kr�i��0� #�0� #pR0��I�
aVr"@��ի{j
�]��Q�F�D+V���رc˖-�腋����av�u���o߾�͛;�5l�P'Y�xq :��T4�HKK
(������*ժU��aÆ���s�i������߿?�3Nʩ�FF�`F�`�A������-#
��eaZ�6m���p` 1-W�
<�5j�`�}�ꫯ�ܹ�C=t��1Sܼy�t27�ξ��`6_� ��'J�@�1������=`��e˖�%�u�+?���9�0
aF�`F��-<�r���1ߋh-�%����ˍ7�;k�V��Q�^Lѫ)L�3]�
4x��ݻw�
;֔V�F
�L$ؙ8T?=�&���-���z�(��o��oŊI
����P�'O
>|��	�A˥F�`F�`����R+�
�R�J���p;6����SO#��`�d'�4iRjj���u����
:�rÆ
Y�&T�,�4��鏩��k��K�U���9�M5�:#�0� #�0�@n!�Àm\�rWe�	pÅ_��o����?�X���+�-`�)))�
�`�X�;��b�ݢE
��@�5�K3B��bk�V��'�7��Z�Z
���?<f̘��8Peا��1��w��
0�'%y���j�F�`F�`N"����"1��>$
GDde\������hҤ�63c�iӦn�4�b��ĉIHF�Z���Q\��o � |r���۷��ǟ~�ih��o �
�
+���+��wܬ{���2�+�b�F�`F�ȃ$�>��U��~�Y('}v{7�6���6�=)��*1y��γ��b� #�0�@AE �����}Ȍ�ڷ�$�xFfFF&�=�����;+�NIM]���
2��d�,������4������p����4��`F�`F�p# g���$�W�bŕ3A��L�w����
Ǐ�T%��'�?�
#�0� #�0�@^C@bI��ŕ]IH�}Y�[vlhOh���kg��aF�`F�8�xnjˋL9!A�[vl�!o��{&�uF�`F�`�<��6-îl��L��ț49O��J0� #�0� #�.̹}�+�
�yaF�`F�`G|�8����W^	?�?�\$�W�F�,�:&Xc�������~�z��T<*��xT��?D���?����˳�>z���Tq7�XѺ
Z%S�[:���i�8\z�ئ��`�ט\�
]�����o�� [...]
�|��f�o?
h?�@��޽{���3T%.�0� #�0�@!G \�h�"�* F�}�\��[n��Y�f�M�q�u�ܹ�	�m�Թu��0�b�:�B���sĈ�ڵӇ*W�\�ZJ�*|��	�h6����Mx�D}Hg}�
7 ��/��W�^�y�fz�
}�8�
��D���
ʠ<�uw��������l$�N��g�J\ ��K�)S��/
w�u��+V,���
F�`F��=lq0��RV����#���Z
;vW>p� �Ǘ_~�.�n ����n�u�V8
����ج�3X���t�r�
���~k��j�)S�,Y���!0555bݣG�Λ7���KJ�iBB����>�ߎ��x�Ǔ�/�o�%0� #�0�@N!��WVi������/(P�zu�b��Y9 ��Ƴ
;vlٲ
�p�ؾ};����o߾�͛;��A'Y�xq�J��T4�HKK
(������*�@�;l�0�rN;�4P"��vb�g�u�`-޵k������T	�e@~zƥ�2�ƹ��k��7�mf���Y�F�`F 7���V�kh���+L�ӦM�_] 
�v�ʕ���F�-X�@���;w���C
;v�s�N&�f�9��|�d�O)A�1����� [...]

<x���cǎ5�ըQC'	v&��OO�	��۳�����z*
+���o�[�bERC/�.ÓF��ÇGᲺ"��U�T�>~8`?�lٲ%x99�{�a �a��'k��v
����A�#�0� #P�p&�Vve�BcG¬ʕ*U�,4�۱�
+ D�N=�l0��5��xҤI��=x�R�|��C��P�����P}���,�?f�ծ];�/�V�Z�7Ͻ3ۅ�IӦM��
Gh�0ۣ�w���c��Q��-r� �bD�.�#�FA@@�S�N
�`F�`�61^lƌ�|9�,'$�
~o��&f�X���+�-`��k���6��p�	St�-O����Ҍl���ڳ���	=7�+Ed	Z at t���nj����
+�
�4�z 8b���p�&���w���:i0#ƈV�ڏI���P$��o�X�)��.�� |�z���r�C�͟?�O�	O�
=z�X�0� #�0����P�ly��7F��2���!�2.L��FSx\4i�D������,
���'N$� YNh�GG0q�
++B���ӂ����o�
s��~�ih��o 4�
+���}��7k#ؕ��+CB�\�r���Hڢ��Á���fu�� ]��8�=fU�Y�B�
+�G�&9�z���r
+���W�>��
���<9��aF�`�
E�
+�\�f�իV>��=D:/'��𔁃���B������ blG�!bb�
9�
.�R��0� #�0�@0���W���7�o��H��̌�L�{4-]ocvV,������%
:t�;봴���iܤ�-f\fb�XD$^F �@�|48���A�៣s��|��0� #�0������K�eK�������
o�l)�r^�'��\$g�
K��ã
1�֮]��O�\��0� #�0��@"�`<�����|g�S��[����<Q��|.C�������6�}0
+,�_F�`F W8q>2e����-;6����|n�:����e�� #�0� #��w�C&#�n�
n֟`F�`F �"�C�Y�c�_��:�Z��.��#�0� #�0�@�C at pe/f
Ζ?��c$�_��R.�իW�e��	&�F��Lr���������S�<r�Q�?��J>��s�o.�>�l(�n}���@�h���)��?
EL�6m� �K/�T�7@�c$��d>�(M�����@���^�'��׮�
�w�'�[?��~��>��z��My�Η���ĂZ �wƍ��w߭[��s���5���o��v���HwB�i�XN?��1�<����
ڃ
7���*R����J�2��|��a�
�����ϰ��]fi� #�0��	C �A��9�TmѢE�-�,$K�.��D�9k���߷m3�£lٲz��U��-Z�x����=��ӧ25�Ts�{��Z���`D�	�h6ѽ{��&<�A�y��?��!�
� � [...]
 ���k��|�rl�B�4��{������_��W�^����~0�3f�۷�W�^��C;^
+
0 o���d�v�کS�
�5r��p�
���[o�T�o۶-�ո��+o澡HZh�
��Ґ�>X4�=��[�l����jժ9�_�0� #��.
��O�&�r4�
^�|�-�����M��!@�f��3g�iOunݺ5L��p�
I�{��9bĈv���C�+W�#�m��%@� 
�&`�
F�S$�C�\p���
7o�
�.��:,p@	� CO�'n�{���Q�J�*��L��؀v��h�w��㷙��ߠA�t�8��1���FA*�|� ��6�/�y`�Ő�
ġ������C_�`A�s}��ohx��%�g6����7s��Xh?�^����s�?��#��� S�e�^z饂tB�/� #�0?
+l�+�(�2���ׯ7m�&dȮ
�|��؏�lYBRke�qd�޺uk�n����[l֠�'k2ݵ��ì
�c��j�)S�,YW�~��	��>�����
�2x�`8uԨQ#��`Q���j�9SDi�ޣʕ+�K���
m��[84�$^��}�޽ه�X�\]����%��z/���
+�^���������nݺ����F�`F�#�|bWδ�ɖe9кL^�իW��
�� m�F���΋0[nٲ
�p��
#̮�.li��o>���.u�8> �O at E�	|Y(������*ժU�_XdI[ȁ;/
{`��o���a؋r�=q
��o��p�n]&k�:��`i�P`6�?�S�^Q�?$����T�B�
+�9u
+���Q�b�"E���x��7o^�;�/�B�w���9G�6��;�Ë�cZ�r�����Z��'I��tE��1d��������F�`F wP�Nٕ��q�E���tڴi���6 �� fL-Z�`�>t��Ww�����
:v����riq3�
A�l��2�'�
�1&8
>|��Oŧg�d����>��n܂k�^ӲY&
�
<x/6C��/6$��?>�h��C�t�'�|E���D3�&(
?xxM�cWAB�|��C%�>(�1����]
��)��[o�'��C�х����ƒ%K�CEqF�`F�D!@�F�2+��+��a.�d7"k��r�7��
+��>
+���c5�r`�,4 �
;v�)
� :yG�3q�>~z�M?�=�?��S!���~�_I
���
7	̂>|��	��c7n������A
+��.(>\)0�і���2셵j�2OY����[FM�� �s,xc��0 &
������	¤I�B;����]�L�ٳg_v�e~�
��9�/?�
9rD
����
I�fE���n�]tu���yaF�`�:��"�_8�+k��`�
D�Zs�
��G�
�q�v�#+X#�A`��9SW��]�rÆ
Y�1T�,�4����l�k��K���9��S���-Tm��;s�LϒQ����l>�-G�Z 8	b��%'޺��&���� 9�|8�S�~}��� ��U�ɩ��r�W����;���	�;����)~���O�b�-�ܿ?J��x������そ�ͽcF�(��r�)
�V~3��?���
_W�|�M� <�)���6������`�X��Ǫ�b¤
+\�V������Mb��J\�����fh�ku��@;f̘��8Pe�HD�@p
���Xp@�`b�@�Z�fL~��:��T
�k=�*�]?90î	��h5B�o߾=��
z�
x��_�
+�5	q�0T�٤I��o�
�{��
���	�Z
�(�T����
r@�!�_����
<�
�P�ʛ�Lh�(-�D�zB[,p����ܐ��<&,B�k������9	���_�#�0�@�D�23[\Y�fD�.��#"�*.L��xx\�"h336�6m�6K��.����	f�W3����q��Erͤ��_|���J�b�
B�� �����n�=z�}7���[1D��~�ö� ��m����'���pT/��P�1���)�L at y����#G�D��%O�:�t�?|��6�~�)�XB� �w3�iܸ1<s���Qa�5w��7�j�UJW��p�@��W�U�������5����	^Y�<<��R�k��!����3�=bF�(0$��Yo���/ܦ
v{^pʣ�����I�#p����0� #�0���D �����>d�M���?�v<#3##��
MK��؁�K���.[�هÆ}|���
+�s
��q�&I�7Y|$��
��w"��m1� #�0� #�0'
+/

�W���]���-;6����[>��C^�'����F�`F���$��Uo�ʕ�nS�/z68����|0�nL-��o��>�yM���oa��>��sF�`�9�1l��s�>��"E_?�B�=t��
~��[>���������|F�`F�`�;���"*�aY��K�u���� #�0� #�0y�����寬Y2EY�`F�`F�(l�
٠�H���vd�22�!�.�
+��r��^�.�uLc
+���h�ȥ\�^==��#�,�������
h�� �A�r�P��bE�.h�L	n��(��"�p�@��9��У믿�Ҕ�-Z��Fv�޽{S�� 

Б�`�<���3k�����\ �wƍ�Lj|���
+�F^�d�A���J�5���pFƆ
�گ��O��
.O�hA�-�� �̫�����z?٘��4~��/���g�}��,�0� #�0'g�>eWD9Qd�d9�/#����ߏ,$K�.�4�r!U��m�)��
e˖՝\�jUѢE�/���C�~�?��K.��fN��

��l6��
+���StPd2����Gy�z��K�.��H�ѥK�={���l(��4xH�׫W/]>.
ps��g��v�0@r;��2��ڵk�N�
��Y��$�/��r�QB.�`\�v-r�T�At�Nw��+o攡HZh�
�U���D�HЃ˹e˖���?��/��⊌ #�0���F@�I�1�(�2��
�� /WFF.X�R��u7@��
?�̙cړ@�[�n
,6
}Fr�={�1�]�v���kWۮ��
+�' _�	X��τ��Hԇt��(���/&��y�fX
+�
��a�JH\z�I�
 L �S!ƅZ�+��?X�x�
�`�-��� ��6�/�Ȱ�bH�^�r寿���7���|�E!bրBNr}G�
�74�vj!x��͙��ʛ���,�c����s�#Q����lٲ�^z)k��Z� #�0��	G�0KO
��%5N$
�B�
���ׯG�g�
;vW>p� �Ǘ_~�.��� ����n�u��nݺ��������O�d�k���
���#�*S�
�.Y�$
M�����;pV	�"Y���?;zfA�B[�Q�ʕ�%C`ô��N�~q���?�@�

�Z�-$;�)�M8����Bx��H at Z{�nݺ�͎puF�`F�$! c�Y��a�`'
�^��g�
6j�(�H�cǎ-[���.pa��Uׅ��̧;
�ۥN��� ���	�h6�/�%=��9U�U���Æ
#m!n�0��������a/ʙ&e�ԩ�~��D�! 7O������(},�e*T���c�S���߅��^\�+�C	�:ه�_�=k���֮Mn����������z�V��I�']tu
2�D���d�k,�`F��U�A0М�ʙ�CYX�cѕ�]�t�iyڴi���� �

̘Z�`�}�ꫯ�ܹ�C=t��1S�y�`
+��ͤs)�	0� �����
>L�y����3\2`_��P�������B0��СC�|�8x���?@�x�
�`!)��f������#{��ñ!����x�
+&���
Q���-������Sҭ�ފO��FF>^K�,`��F�`����1k����G���ܕ�nD�\���o���'}|w͚55��L���A�

oȱcǚ�jԨ��w;��㧧�D��S�SO=���7���,RC/��"fA
>|„	�����
;\�Z�L(��@Mx���O�x�
�`!)�����޽{�]�|yڃ7F�Ai�������8A'�$�{�� F�]�v�>�gϾ���&�9������Cˑ#G�p쇞�H�OF��醁(7tE�Ձ�$d`�`F��o(ñ���!����
hV�?"f�9܎��� ,dE���0D��
+�HF�I�&�^u��A]4b�С �6l����dA�Y�O�~�]�v�_2�/����f[�����sxyȦںz(�T2.=sJ��'GM�5�o9�٘�ԯ_��e�Q!�+��;D�qbŊ�Nx} `��| w�����k
=��QR�Y���
���v^�N.��`F�� �����>�*/�0�
_W�|�M� <�)���6	��6�x�:(&L�J�zn�9�$֞�ĥOh�O l��V� �cƌy����Q��b�����
� FL�
Hkվ}{X�<�����ӯ����zƅ(��� ^��
Co�M�4��.
 �k�d��	���GE��,���K��	F_��p x�$T��f���I
�чΈ�N���7
|�A���!*�����k�żF��e�pa
$�wF�`����-i��u�8<�`\F4�H�"�8"¯�r��
��̌��M�������IN:u��

�jťOh�5��O�����G(Yh��o �
�
+�����ѣ�Q���V�:rCI[pp�I�����3.�C!-�F�
��)��6u�ԙ3gb� ��G�"��Y���^�khh��»>G4n����x␃&`�5w��7�j�#HW��p�@��W�U�������}W��Ryx�÷
+�j!b
B�ϝ�r��"#�0� #��(e��"�\��V~���
6���3F�
�

2d��p�
W�2��P��9#�0� #�O��}?ͻ�qS�����
����Ȥ�G���6v`g��)��˖|����#���~�oˋ7���	�
��'�|
+��0� #�0� #�d
�b����d��G\Yd��O��l�˚rQj�pˎ
�Up/񖏢Cv��5}����0� #�0�@E�Ƅ�cŃ'w�?�U��Сy� <O	�y|n�FOn����g��vƹ�� #�0y�
��1b���6�n��!��|04Q6R����t��
~��[>�;�������|F�`F�`�#�
���F.�Lw'��a�G�YgF�`F�`��� �`_Y0c���嵜g
��
Ƭ'#�d�F��k�Nq1�=��O?�tT��R��~�^�v��P����v�:#�0�@Dt|e�"�=���n~^x!�"Y�z5\6��F�ad(�
l�'��"�B�z��T<*��rT��?Dv�3������q���$��{�5�2ȡ�Ԙl����zJ#��!�~�!���	����k����"�4 �ׯeD3�#�[�޽)�x >�C�����y�f�EJE����8_��-��@�^���&b�,�m�~*��v����d��
Xpu���,��*�~El7��,�
i7k p-F�`B���f.#"F�>p���#
�ҥK���0s�\۶m�
��([���jժ�E�/^
iܭ@�~�?��K.��fN�}V
Y��e�Q
�fapz�d�Aj4��-]�4rC SZ�.]���CP�!JK
�?"n��_0�W^y��A���H�L�x���I[,|L�-�����
+={�D�	J%��*`��d����$�����K/��-�O��..؝;w�"��p�eZ�]��_��Bs�UNV�9��0�@�F@��$͜iWD���������k�f͐�Z�3-�x��9s����:�nݺM�6�p`v҆���ڵӇ�\��_T�}�|��[�Jl���Ҥ��Tؕ�
̨0��H�GGQ�!JK
�?G��	�4�LjH�4h ��N���y�ĩ_�� �]���e#�2���H_XF2��#}
� �"�a���S�N���?��#��ы
-T��/��
�+�NMTM�؏������V�~��5jPa�X����q~'M���C
�l�O���h��p���_�뭷BO�Nq+�b18_~�e�c�
�'z?��ڭ�������Ù�;���n���8`'��
96�5�5oCǃ_�y?#�0�@6 =Vveŝ�E��v�������|ǎ
��
8 ���_�����#�8�[oݺ�[�np<��7��������M�w�2ePrɒ%q5�\B���
2G�p�y���;�� �"$bב��G}>
�k׎X��# 0� ��bx������H
�4ю�H��:��2e�y�!I���	�Z�W�/x����K/�o��ʕ7n
	�k�O�n��n�����m�П}��c�=��bV�T�ꫯ�
!���x�t���ڡz:���.�{��'_+� lc!
����x��`F �p�#�KeY 38	y�V�^�S-x0���5
+�X��v�رe�<��b��d�.li�lڼys���
��
�/�2����p���
�s�ӿ��
+�?�n\`�}���6m�91�P�N
���-�����҂�馛`���� H\�ra?7n����믇BT�bE|��'
X
�n9o�<G�^x�V
��>�_�dI�������O?���+W���0��g��w�ĉ��"f�&$x� �������l���Ox1#ep� K~��'�$@ {Z�
=��V��/?���t�˯]�w��'�k�q]c�<I��_�/��:̸ #�0�@|���q-r�E�Wn��iӦ�.6 �
B���`�}�I����رc�X��riq3��
�5L�f�9`N�a�� =
�\�&�
�p0�2|ʇ�+���C��� |�C��
�!��x�A�?��W!�#%� �Vh��?x|���WAJJ��
+���8���gN������
�ЩS�⥑ƃg�rH��_���U���_��I�@��
+�А
+�]$7�~�U
�3���|��~x�)���jQ��!..�0� #
�#�1
�
az_�j��$Y�=�o�s�9X��)��M�e� ��r���cǎ5���R'� ��,/`!�pL�u��'O
>|��	���e�
Apˆ
�}�]<M�Q� #%f�ժU˄( �������u��l�9��� �m��t�0�
���p�
Ղ�	\�
������*���3g������?xLѤR �]�L�v=��b�G�=QFH@����7:�$ܳwq�o�N��Cĸ
#�0�@V����U\�4����p;6�@�Aa+���!��
VJFbL:x𠮂�.C�aS�Jg��@>�
x�gAp�Ç;��͒�����8�٠�f��(�]�F��D�|�1�
+��pE7���G�ǥ|�,U
r�ˈ�
ٌ���	�/
L�ŧ�+��"��-NM�,p�E9$#
b�
+��
�2�૎Y�ݮ�
��n������

\2 U��-��+�_�t���8��+�!�w
��b��x��&\�`F g�qe�B	3̐�[�
xRb�>�W�[`�Q�e
9,؀e�1��h8��C����X{���
t��	YG u�۷/�;ã�)0�p�P������b�$��Y;��۷�ۥ�[�>>@6u����p��y���i[8k�q

���AA`���h
&2���s��
+��<�l��)oz8������o��
+�w
��;��'L
@C�i�v����K�֭@=G��G}���
�a3 �;.Mp�p>Ex�û�)��B�_��
�g�C:�<�,�������x�[8/%�5#�0y�C���V�,�TǤ�1c�`�

�0!?��Z����̌
�]s��1
����DM at 2�
���`�
��݅��� p
�t�
=`W�W�A�@
��n�o�N?�M� 0��<%��"ā%�8e
:t��
�B���Z@�k׮��m�q�ȑ'�x��MV|�X
&��s���~�
�q�=�C \t���� �qA��ڃ����5"<�N�~�z����{�	�� �U�	�����W_}U����Ъ1��N�Q醑!��ԔJE4�!��hʠ�4MD*�$Մ��H5D�A����t�%���
�t�S*��g���������}�9g�s�Ksf������Y���Y�z��I�w
<.ޥw<�,Q �ۮR��O�~fx�u䞖e�
��>3��ْ�>Y" " �G��Ϊ��3�-Y�w�g�A�k�����?�|�_�O3�$�� !4��F&�x�7n��T���%�o����q57��L#`��'*�}Д�
;�ܳ�ǃ9昿{�
��
�`�ꕳ����;C
2�
��<Vq���4o�����ѵ�i����,
�
a��V���t.�~���SfY
WQs�|(ol
�������l�e�Ni��P����Y�9Z�N�~h���.j�~��T�)��xbY
W�᫙�������禹ȷ�+��.b�0B��_�nٵc#�KD�蝖v���T-E@D@D@D���u
�FZ���&N��<,�nٵ��*P���_Z8KOHw~帵��s�.9" " " " "B��#�"���Qj�����������M�
��ïl���ͭL2�
.���r�Z$�֭#m%��x������_�;�ǗĨ�Tpn&5�9NA`s�yI�d�
ύ5jР�]�甃&$'��B�[dEu���oٜU���׮]�r�Jg�m����ƹ�T�~Nj@5�H�@���X�%�xT7�
+�

�H������@�X���$�=��g�ѵkW�����J�T`s�h�F7�\����)>GmۥK�:�2r�x�
j���#�_��'��
0�9ߩS'>ԹpU�s���4i���w\<E@D@D@J�����I4��!ԅ�V�$�ٖ-[R�ڜOŬ-[���o��3��
|<`���3�f�(k[�n���'R]�2��ڵc������N�k
+Q��D�~K�RI�
'@�t�c��|�駔��
��β䔗�o�
���J=(����z۶m�V���sb��ի�w�}x���
���������Z`�R��x���0�۷o�X=�f{��5k>?
�:�)"J��ƚ5k��0-�!"(�,5� n�g�>�g�s�
�4=��c=ֹsg\��l��������&M���
s�ε�x`Mq����;Oܴi����۴is�y�mذ��%���Y�`����C/�_��'�A9'P�vm�ر�p`��yo�b�
+b��FD���w�����E@D@D�$X�c0b�0"Fa�*���c��߿�(ag#��~�p��
�Z�r6�֭�e��.�q1M�8��K͙3Ǿ�
^N�6�@�1cƄB�7�\5� �_~9�a��Ķ�;.�" " " %N f+�Z�N39�`�W�
g�r�v��w_q����8p�����q?��׷�;H/�l�z�y��m޼�
Ī�4?1������
�̺��3g��7�\5(��o���kժe p�k�.g|�ƍy�a6g����
Sc�
!�#T��u뒂�3,���^�����^����^0������� s�C�S�N5����ƍg��cǎ���޽{���*U��2tm_j*�, %
�11�EÆ
YK*," " " ���;�����x���d��>X�d�ɯ�y���V�xeҷ�H
>|8�6�����
_V����H��L�'k
O�o���y��a�ըQ�H��%Y֌�l�sp���bK�"%�m�������ǝ�Yg���"�"�Q�E@D@D@��@W�(�2:]|��#F� �2+�H%k��d��J�޽�Q���.#�aذa~ǃ��L:;x�`Wcl�d��
^
z衦
;-Z��no#��
��xe�D1��f+G�[��C�K5�:	�H�=a��{x&7,���" " "P�d�9���%K���zFn
���{`��%�G�7�� 9�
+s��H� 1~gu4�s�;����`���9���}�>8X�z���E��3dȐ�o~vH^ڸWz�jެ�#g\a`�0:�"" " " " �K /^9�P�r�d��6}�kǙ=�(��lpp�®�}��[��];6�X�ND@D@D@D@J���n_^���RǦOv�W��GD@D@D@D@\
+��m�8[�D�D@D@D@D@D@bl�r��u��`����������@Fȳ�
����r�
+�>���X��'�`��֭;�(�gF�u�V�2�����%9�5jԠA�t��!U�i��?О#H0;�8N�ӧ�Ν;Ms
+���P��
F�Z��Aj�t��i��W�O�9ޫW/�h<.3FDM
+[�$Y�3r�H)_�9r�ڵkW�\i3v7mڔt6O?��9ͼ���8������d>����;�z��{�����={"��n4h�)M��c�Q�" �����)�W�jեK�:�`R��
���G
a�B>����?��G�q�
�(�9p���W_]�zujC����\sͶm�R�cN�={6�&��7.�]SS�G�
)�z�d�0�+�@ϵ�^ۥK�U٩��9�J��+FsTk�}G�mժU3����w˖-�+�|4~)cf��n۶m�v��qj�a1s�L�̘1�}���OA>�[�/�&ꃟ�.i�q���ꪫ(�:-<��Y�[��,��7.#��
���6�I���dʧc
��}�/�8q"S�j�p�B�ˌ�\ʈ������p���m�\N�����ã|�=��L�e�i����ܾ}{��{�W`+�ڵ
3�&��M�F���xb�588o޼�\~L�ɓ'����r��7.��޽{g͚��C*-jHH� �f͚�V [...]
6��]�0�vذaʉA�x�G�
ݢE�P[3Q{���ۿ
{Q��7�s�9�bŊ���w
+	��C�����C���7�D5��k�F�
;v}��t��
��������B���
~����iժ�����?�,޿?Ѻ� �
+؂�D$��iΜ9N�p-O�4��΃�v<��3e�o����J��n�	�5�ʘ�ab|�ʼn�q-;%�
}�i�P3fLa�
=W
J&S�T�*%E@D@D��p���/��r��=ʎ-�s�~��������w�}7V/~܁ڔX՘�'�7ùB��������{�N�5i�z���_�h��
��e�'ƍ��F�Y�� ���ؼy�U&`\�a�D9c�����-�߰S�~Fؾ};zԪU�hÝ!wh��!r���W�"�=#ԕ" " " �r��l�������^{��?���{I�Ff�^x�v����Z5~�c�fgg�޽ۊ ? y\���
1���1"
'��I'����ߧ�l�b��`�ԩ�H�L3KhY�~
9p�^<��qLl��a��tvMT�T��R<����p���.��o���j6c���-ie�W&=
��Ç�l�K޴
/��$�l��.̒;�l`��͆>'�C���n��8ѯ��jɒ%�>�(��и�D9N&���{�=s$x\F
�F�ղeKg���~-�2p;4}��~���w��-�.�
+ƥ+�<�f���AD@D@D �@�B����.eֺLl6"(8�
qX�ݻw7�\v�e!�h�P
+L�6f��zQ���]0R�ap��V|Hԧ^�zT
���	�����_9J�r�
�
�&�
��C�^sW�GD�5_K
>$�#���	x���d�d/,{-u��" " "Pn	d�=�!�����X�����'��~qT�����@
+���Y:ED@D@D�0���;���)�;vعgߏs
�1��;`�9��:�+gg/�7��!}3ߥ��--�7o���g('�X.̰t���������d��B�y0�('��aKJ
�ڵc�v$%M�E@D@D@D@�
�e��l�I^�r�x��KĦ�v�q��Js���VvX���P��M
��I
P	(��\�t/��x�|Xͥ�2Jg�� �e,W�N'S�(.�d���������*j���ɲ
l*����rnO<��[��J{��3�n�JQ����TjhԨQ�
�:#��/6
ȅL{� ��<5����g�Ν��9�2xN�~�ІJ%Ta
5P:u�`�������^�z9_�m�|�
�ҏ�߸���9V�����ȑ#ɠ�r�J���iӦ��y��
�j�刋�*" " �� �e���Ϸ�cY0�ɄA=��={"��n4h�����c�Q�b
����)�W�jU�9;qaR��
�����5�1���y���q�
���9p� ���W�Nm�w�}��k�ٶm[�
De5�,^��}gc����H�|�)�J��:@5�|
`�sWF��k���K�.Vg��S�&� 
E@D@D��x�i3_��;o�:�ﯽ������˃ᰒ#�_P��輭Z�j���}�nٲ�re�q��/e̬
��m۶m׮
;N�0,fΜɑ3f�o�2򩓇���_�>���+2w5﫮���y�\�V�Z�9ꨣ�w6nݺ��
[�|�)�J���Y���9�1�X(�ǽ�ĉ�rVۅ
:_f�(�������UWv�������^z���&a��K��~eg�눆�D����w
�{G�
�
4�w1�۷o�2|���
+l�]�v�o��Dɸ�	�0�ꤶ5j�~޼yI��טX�ɓ'�8RT�&ߏCZ���$@�M͚5W�Zet`��#��u�{v�MD@D@D �x��c0�ҺI�&���ܹs�;w��K�&q���M�֯_ߦM���;oÆ
�{�[$n��
6l�rb'^�ѣG�h��]�z���ܻwoԠ������Kj����sNŊ�ϟo�� ?�Catӹ�@�v�ڨ�c��
;��v�#D��?T�" " "P	����_�$ib�fͲ�<Z�je�����1������%� [Ӂ�d�6͙3����I�&��y�ؾg�y&������S�7X)x�M7�&^�;LL���q-;[$+?�Catӹ�O����|=�������Ia1��|�[�H�<�O|'�s�����Z
,�����n�^���)/��1�O�o,ns�,_y啃>��s��a��l��կ��:�ơ��O���O�7��
3fL����S$�c����6I��P�tn�ؾ};:� u6�
�Cs���W���+��Ֆ" " " l-������S���k����{�uב��^�ovp�b�?�رc���w��m�"? y\%��}1���1
+y!O:���>��g�/f�
�N��I��P�
�N/Yd��8&�Q�aÆ�|�S%�2ȦBn���S������@�$�3�Y��Sп
���*{���o�����wKZY�I��y���8���V�\��
/$�1;��
��$X!f��ω��l��n#N��Z�dɣ�>��:8�xS�]�c�{�g�����s\t�w�|N�
5�aӧO�ׯyW����"�`\ڲ��sk�J������@�!��;Ҙ��o1X0W��ҏ�_f���f#��d��J�޽����.#�E{�R`:X�1;�Ջ���ڐ�
��l��C�>��գb��7�L8���G����ʌk�~[�l�~�
�&�HV~(�q����23w��@��0�|�&L���+� �$�
�^��x5(K<�߬#�h��%����}��3�4x���F���k,"P�liƢ�H�E@D@D@,b �ht4�s�;����`���9���}�>8X�z���E��5��!>��g1iq���ޭ�5k�W��v�k2Gp,�*���������@� �,8��##^�/7-F���(lZh׎��Q�G�����������p���l-�����nw*۴Ю
W"M"�rN 7^y�|[H/���x兓�*�h4|�b&���b��D�
H[�����s{���%���n٬y<^ٺ�c�H� 3
AD@D@D@D@�A��+�JNN�(
�>� �"�
���#�=lڴ��Fݟ�i;;b���(���ߴ��v�i�PE@D 5	y0"�1_���'��u��Qi�}F�֭[)�@]_�J
�5jР�]Bg�\|�Ŧ�����p�GsJ�>}v��iژS\?�~�ОJ%�Kf
5P:u�`�������W�^Η��O�K�y���o\�=Ga9$r���AO=]���b�0�JY������^zi�)]���4/�~��_~��U�T	�y��Ҍj/�1O
W�~��K��Z��]\/$�Ԯ����$�c��E[��X��=���e2[Ϟ=i�Iz�
7
4�ԑ~�Ǩ�۵kW#g����Z�*���1����
�P��Y����<���ǻ�;BY$�s���	W�^�����5�\�m۶`9��v����;S�U�G�,�gۈ���8�0b?n����;5�$�
����o��"�S����.�~+V�x��G��dm.�(D�2���"��Bw����o�\�(
+�?�
%PD@�A 709�V�
H&Z�}�2��Z�jF��}�R
�re�e��/e̬���m۶m׮
;���9s&Gf̘��}�ȧNހ��K�?7~�!C����}�UWQ /����=ꨣ\?ϭ[�v�a
�o���m#�J�㐎����ͳ� =ӥO����[oq�رcG����'z��PW�~����4i��eZ�C��^Wel�|Nٿ?�J�?���:w�q�F#�\p�3���O�i�{��'Ǟ���t���o����i����ܹs�X
+�s�MeM��soi�s�i}8�2��7��8���qy���'�<�K�ah·KɎ�΢����
x��r�/n��={� ��￧��
/�`�����'f��=���>r�H�
<��,s
D\�SO=��{���>v�z������Q��d&G
F:2��Ľ���(�ڣG[��c�b(��2|���
+l�]�v�ov�h�&�W��V�F
�ϛ7/����1y��
ʃ�m����%�B\܊�ߴ�4
+
7n
e�q+�y��~���~�3fL�ڵ]��(

8�g7�x��-�|
����H �[��1+B����͚5�@&�&sܯ_?9�kW���'���믿ަM��~ؾK�z
ڼ��;O>��ĉ��.]�x�U��ˏv���q���|O����=\Jv�v\������QS�L�������۠>������#���?�!��
^�
0Ox
wY�������g�y�(�ꫯR����^�3g��O?
<�=�	����#/�E@�*��
+�:}�k�4i����p����Ƶ�v�Z~�-8��ׯ_��y睷a�ܽ�-<a�Æ
�PN
I�6z�h\n*I�$���ۻwoԠ����/\��0�
������p(�n�纸�Я�ݐ^�ʼ�e˖}��g�^{m�H	
+�>�׿�5�:
�$>�������w� ��\��b��)ʜ�e���Mc���L��ܵp�G���y� �HK
W�����‰�C
�"�2�w��J��%�`�����gX�߸���8.�~����O�{>\Ja�v\Q�^d��1O�+���@���e˖Ln��>���~w��g��=�����f��LE3����>
V0�p<�E)���Ia��]b
����b0�	�8O����C4����Y��\g�/ �^5k�$"�iӦ�"�Cµ��g�:[��|�2k�7O}�Bǿ��G?��ab���֭?B����P�칞�R���
5jTZ+?BpRb
:�����
o֬����bp�۷�Ւw�u�����Ė+W�d�6n������Q8-i��o�
#9q\��'�T�^=��M�Q�;g��3(,�Щ�7��8G�^�O�ߏ��2)�׊�2p$3���Ɨ�q�}�v&q�]wa�r��w����qap��W��R{��aD�n�����	�j "  [...]
��U�reN߻woD�~�Jv*�]G<漬Ɏ7X����A��`�|�㼸��[��?t�ޝGƗ�ӯw{�7b���D�f^y��9�%��" "�n�l��|�Z$*$U��_}<�f3�/�ݲlW_�8��ί5�X�@/��B�Q����0K����$o��ω��l���E}��WK�,y��G1J��
�錅x_���\	\�����OV~(�q�!q��gFh��E�e0>�yp���V���?��OL�18%peY,��A�A�N�ó#O���"�����g��,�>}:�
+8�'
|
'L��Z.&�]�efTb�~r�G;q\~r��9(�+\t�E���\&t��g����׋�#0.N$i
,����gN��3`\��\��눶|���[V��#���0pX�`>����>#�'D��Џ�
��_��I@׬0a�2ӐIđm����+O}������b `����q�9�`ete!��f#��#��a%�0#!
+��
�R	�`Ɏu��Z�(i����
+��l��Y�>����©IJ��74^��`
#�E0�'*�@l`e��C9x�

��G�1��F��f�H
�� ��ْ;C
�C���Js��UG�
+R%�m�` ���ٗ�|Z�����LR0
�p��O=���E�*bE���ׯ�
����SN�x� �f�<���GR���zq}$�ʼn􎇞up�kD���o\��\����W"� ���
+2B�o@��,d>� �!�~�)�P
<l�aժU�<�zg�b"�CG�N��U�>�%�" "P�1
���w,g
uJ�eK�>���5s�����#

�`�SE��d�@Y%��)L
#�*�t������YR���[Y
WI]|��AHcb���J���+i" e��]��8�t��a�}?
�9x0��ݻ��� �T�����_
f?8d�п��"�^-�7oV A<.L��\�/��&	��gͦ�HQlE-�O��(:e��q�v����J�����@Bݾd���K�b�c�B�vl֎b�%��J�����4�Ón�y��Iy(E-�O���7ePO,��*��G�Lj&" �H 1
9�<*�n_�q��8�4ue�B�v\�8��[�Ŕv��ODE@�� ��<�,� ����/n8�Tsn���E�xe�P�������$�P�e2��VD@D@�C }��s

�W6i��L�rsg�rR)��3<I��!યdc0d(g�5�&" " " " �L �K6�r<3\n����3b)�b�B��I�g�fS�R�T��# G))<��4&��铜ǧ�vG�q	1
(I at Q雗�c���/��,Q�'�x��ks�f�
 ��5jԠA���)�
��j
����&�����b���.s��w�ȑ��Z�r����z&�ӹ���3�x�H������@�!3�ㆲ��-�3.�@����:a�m�	��n��
+V/\���������/hCi
[���_|�E.^��}�y
n��A��°��?�3�v�|���C�l��t�x.5��jF=ޥK�:�5r�x�
�����#t~��z��=
a�R������^ۥK���r&M�d��;^��hD" " "��r-�<C9n6Ƕ�<����GI���6<j���*�2����R����o�D0 ���Kʽ�o�s6���9ꨣط����K�iJ�Q���T
%�TƹF�u���I<
��bi�ڵc������N�0*K{=`��7Ta5(c�M�q�3
+�q�G�eg�_�,þg�
;|��e���#" " M��;9�T>�B�9n%�F_
r۶mTL���g��a+�ڵ
?n���aU�^����ãL4����t
+�1y)x�
+�F��0��ij��޽{g͚��(�NuJ9$��a͚5����C�O9�!�����@)%@��A�O�C�!���^�פI[c߾}_}�bɐ�	��5j
6
�J�*�;w�˖�O�;�6��S��s��Sx�My����;�lڴi���mڴ9��6l�`㒝r,X0~��Ю��
=Q
��ڵk3�
;v�q�����Z�b��f#����x�ሀ���@� `��������`X�Ga�y�u1��

?�e�4�ڒ��9�����m
s�YNeZ�j�lܭ[7\��#�]`�b�9ͺ�9s��w���iӦ�1f̘PU�
=W
���/��e�fcb۱�
/Wp4X�,Y�Q� ����bé_�>�b�eeeիW��ƻ�]y啃>��s��������?p��(է�ʘ�i��.p޼y�7o�G0�1�O�o,�s�,#��D9�N�Xo��������۷3
�ƝG�x��7��lΠ ��e��#" " ��@��l�Ņ%�
eݺuI���kN�����~��>���{w�mdj{�
+��C�S�N5BHB�q����رc���w����@Z���+�b:�, %
�11�fP
6dmhY��"" " �@�V��*{��
<z�h2W`7,Y���W�����N�^X�/f�>HzZ�	���<|�p�
؜�
_V������hQ� �
����A��¬Q�F���oJR�����~��*�C�j����������6�B���������@� `��YYy�0�����L��#F�Y�u��C���+���G�R�
S2�a%���l�]vA,
+
&�LRK���1��M�A�/�{��-ZXw��C�^pW�2q��f��&��-�D��H��K�8�sO�0����
+#�R3�L �u�)�\�t��%_�*%W�Rg�̛�d&�'
D�� g\iQUz�����@�!@,��X��ҹc��{��x0���
�w�v�
�S�rv��y�g~p��o���^�ݢy����H�
2
DD@D@D@D@�B����LY�L9�"-�	���];Q�d�r�@D@D@D@D��p挋�"���3�\���];Qk��
���������9��Z$j ;�\�"��D@D@D@D@�%w-�r	A�m�,��	����������@�@�V���dX�
�>���XԴ3�~�m*z̟?�}�[���y��?�]���=��VN�^��b�
r97jԨA�v��S�!�
a
��دf�D$@Q��#G�]�v�ʕ67�6mڔ�6έgϞ�#v�f" " " EM�@θ�[99��

{��M����;/�������mư0��ٳ�nݚ�����)�W�jեK�:�5r(A��
=z�*��o�j 
��u�N�(�s��v�����Y�fҤI�-���)" " "P�b��\�qtc���>���
r�%��}$��;:o�V���ߺuk�rhT�k۶m�v��q*c�f��Ԧ-%��o�(�e� ��1�yB�ŋO�8񪫮r��Y}Ϟ=�-��e���#" " ��@�xe��
n0���ݺu�ӧ��W_]�#��<yrNN��S�a(�o��V�v6ػw�Y���a����� z�f͚�V�2Cf����3|�TD@D@�$���p� ��ݻ�ر�U�VEĥI�&���ܹsm/<��X��	��ۦM�֯_ߦMBA6l�`�i`�,X�`������z��s�k׆ 
+Á
Lg�ي+��mDY\~��9O
_D@D@2�@�Z$�p���]tQ׮]������	n`[s�e���Ƶ�씸
l\L�#�8�uTs�̱�"��ӦM#�c̘1���z��@ ��/��������;.�" " " %N���q91x�_���o����Z>�����
{-�W�~}[s���.���͛�y�f{��|'�7�9C���A��Yw5s��P����������~�Z�
��v��匏߸q#=��
"�;^�aj�" " "P�b9.�'���#0"�c`<��8kW�^
0
�޵��XՄ�K
E��C�S�N5�^�hѢq��?�رc���w���_�JZ���KY+�X�	�㘘xáaÆ�%-�L4|(u0��s�$sĹ�{�W@|��8p���f���:|B|6l�4�=zt�s�� ��/+��{�=�#>f�?/��B�<���-�A��B+۵l����v��l�)l�����-��� �aӧO�ׯɼ�:�,�y���+�ֻ:(
+
I!":��6���{����/1X�FE�S��b4���+�`	��?
:g������c��r�)� ��A
�h��f�0rۨ[��+^٥���o��jP�	

:��q$�0a�=<��g>�����d8�<38�
��ɩ�\�t�K�gT�N��y��̝0"�#�D ��3.��2" " "P
�7�t��a�}?
�9x0��ݻ��� �T����h���y�7��%�y�͚7��+'���<��E@D@D@D@�
��+��}� �5���M�������Yu'" " " " ��3�rI���];���t!E@D@D@D@D ����Ļm��4�ɮ�KIS�>ٵ��0�$" " " " �"@�õ
3�
��QK�J�," " " " J��]��ʱJ%�����"/�ۙï�L��>��
Y��Kԙ�
�5j�]�g�
w�q�էO��;w�ۛ�fϞ}��Av䧞z�#�N�~�m*�̟?ߏ�������OX9�z�2'�f��`��4��5&��<�����⺾��Pg�ȑk׮]�r%�ŭ
M�6%��s�ٳ'��
/��c(�
N�\c�]����˗W�T�jժK�.u�~���1"����>��;�oy��&�-��r�7.\���g����Ku�w�{��M)�����a�f
k�oݺ5q>��LP#�G�
�ɯ��ՠ�0` 5�;u��Խ��k�t��
���
�y�[~�K/i." " ���1��Ne^z�W.��L��m۶k׎
'�#�<�裏��
��-�G���>�(��UW]�+�����v��ھ��
r�%��^	ӯ٪U�f۷n�ڳ�Z������6��q?w��o��jPJ	P��g��[�x�ĉ��α8˶�ٳǾ�w��r��" " "P:	��_���H0�S����1�)g�4���p9�am���۶m[�j��=A���ݺu#��ꫯ.̕��<yr��:X��{�Κ5
�!�Qaz׹e� �u5k�dꚡ�C$R��F$" " e�@|_�U|�����Cٴi����۴iChĆ
l\�e�e˖ѣG�h��ؚ����+�:��c=�D���w��ѪU��שI�&���ܹs�Y<��X��+�9@+g���Ǐ�ݯ��ՠ��]�6�39���`:;�V�X�.o#����x)� �E@D@D���-��5�
�ʱ#qGs|u_aL�X@6"&�G
���9s�XX�vd������;���~�/�袮]����9Q�n`[��ea�Ƶ��rδi��3fLh�����e���_�rU�9g���2	A���%�g%�MbW
�<+�P�2#�*e܉�ErΐelG^�^����_?�
&������-�]N��チ���OFa]�~}[�4�S���͛�y�f{0@�0(�����9sfh�����������Q�V�ZFy�w���k߸q#[��
��;^!Hg(�(G��
.n���/�p�$uڢE�ƍg��cǎ���޽{���툉���v�׾nݺ�f�
w6��<�s�;uu�r:t�0u�T#$X�Q�*Uh���0����H��p� [...]
+�5y�=fc?.�p��߿?aͯ��
+�ǒ%KL~e�v�WpL~�_Ng�k��SX�G~:�2X#�[$�#5�3���H
��N�2<pn��O�ޯ_?����B
n&p
��&" " e��#"9�"�O�P!+��[��g�Al6*/b��p衇���a
_�{8���_<b�2+c���Ӊ;l�0�>�����:��
<���O9�s0X#��
�ޮxe#-��h�ժ�:t(	�H�=a��Wx&%,eC��" " "Pn��139��k.g
sj�eK���-�Cǟq��A�>�������@E�P�W��u������@��A�;���)�;vعgߏs
�1��;`�9��:�+gg/��`�Ї�
�s�Q�`�!S{6kڬyB�ं0�����$��YٚȎׅ�WB���];T<)!�ԭ�������@i#w��}v���y�m�F��M��ڱ�ӥk8�VD@D@D@D�D+97F\�\����_�(�r�6}�k'e�:QD@D@D@D��01
u���WD@D@D@D@�r
��忰y���9j������������#�
��Tle[�$8�|@z,R p?���8B�>��
w�q�5�ӧ�Ν;Ms�n�č|����v�x�^����%����`��
�%}N9hHm
+�8ϥ��S�~����P
G��;#G�\�v�ʕ+�8n�5mڔ�6έgϞ��w�pZ�l�B�
YΕ�o+0�#�ߺu�_|ACJx8+W������?��G}t�
wI~��/����ŋُ ����lư0��ٳ�:Q����+U�T�jեK�:�5r(AM�
=z�v��o�j 
��u�N�(�s��v�����Y�fҤI�-���)" " "Plrb=e�Y9������%�V�`�̙H�1c�v$G
y��GM=<�[��#�jբ�QG
�~�a9f�V��=�u�֞��0�۶mۮ];v��
��QΚZܞ% �'�Eg�)�({�q�3J�qO8q�ī���	�Y�|Ϟ=�-�����." " %B ^��a.�<V��6�W\���k�.���۷O
.^�!Bm�dA`�N�<9'���?�
CM<�j�ݻw֬Y��0h��Q�E 
+"�j֬�j�*Ә
"����6" " " E��`�`�r2j���F�Æ
�<�R����-[��
=�E�)ۦM�4��E�Νk����bŊ���w��iӦ��׷i����۰a��K����`����LJѯ��ՠ��]�6v��a8�����+V�X��dq�
/�<5|(f�q&#�
�ͯl
�$��e�.��<�ؚg�y����͚��6����H�V��B�u�k�y��
��4!r��Rs�̱�"��ӦM#�c̘1���z��@ ��/�����O�m�w\0E@D@D@��@�b����1[9z܅K�+��r����{��8�&���ի_��N8!�֯_��!��SN׮]�͛�y�f{��|'�7�9C���A����6��[@�a���rM`������q�F��3i�ƍ<�0�3���x���������@	�u*;{��2��
+�EҮnݺ��w�����Dvfƈ$+�F�#
:t�:u�9��o��7n��C�
;6;;{���.���2����(��e� )�0���7�lذ!kI��56(��������9�>`�I
��
p�39@���
+���{Ϝ�����
/�����~h�w�
Z�5�e˖���5k�`͆͘8�[v��FVX܆M�>�_�~$�&
��_y��
+��" " " �F��
+v�W���UR��
����u˻X��G�3�,�
�S�EN9�s��
^Z�6;�)��0�
�6�╉Ű6��
�o�զ�:t(	�H�=a��{x&7,�p4p�|�0���HV�S/[����5�y��k�?���7>�ey�B�@�	�3.�2%PD@D@D � 1�~
��ҹc��{��x0���
�w�v�
�S�rv��y
�<:�'��
+��xҍM�l����(X�O�ED@D@D@D@�=c+�()�Pe�6}�k�
+&�����������@��a���*�,f��T��];��Š���Dy1qC9w+
K��Cl�d׎����������;gq~ݾ|g�s�_��E@D@D@D@D P���+ڢ(�e�P����������D$`+���+�;���ٳ��n#�q�F�
{�1���> m�q�
��>}��ܹ�yܼ�����t�}�^���������_l�s��
�8��|?U�>�5r�(��
4�K
�rЄ�p�y�r�N
���xmԬ���ȑ#׮]�r�J����4mڔ�6έgϞ�K/i." " e�@B
F�E}Æ
���믿>~���^z�Y������X|���?��;������y�1�6{��[�&b��_�R�Qj�Y1�O�߅I���˗W�T�jժK�.u�4r(3A��
=z���~COT��K`��Ը�ԩ�߯���.]�8��,s3i�$������A������@�!��
�q�n�����Z���~:u��:�
y�G}4��l�<z1��V�Z5K�u�֞��08fΜI�3f�o�����$���i޶m�v�ڱ�i�ގ��' !x��[f���"@�t�c��P�o���'N�ꪫ�m���y2c��;.�" " " %N�`
F4�2��	�hذ�ў�իW'��,a
�6%���ɓs��Rp��+��w�څ�}��)��C��/�=�2=:
}+d�޽�f��w�aT�O
+d�qj֬�j�*�;D�d��RFD@D@D YN�/^�:���۷ӪV�Z�-;��.�x˖-�G�nѢ��)�4ibk�̝;����+Ο?��3��jԨA�fk�*U\�&��S<�~7mڴ~��6mڜw�y6l�q��r,X@�I('�~COT�RJ�v��h�c��?;���{�+V��ۈ���;^J9Hm(K
��yfr!S���3�ܿ�Y�g6ܱ��H�V���u�k9+�e�:��|�O��UI�_�.���C�4��̙�ԟ�ӦM#�d̘1�� ���sՠL����/���t�1�
/�4((]�_9�C9wh.�Ne,K�?�F��$*��'�p��Q�~}[s�tNL]�v�7o��͛]쮼�����{���~���'�/�<
�N�o,�s�,#��DW�m����~�N������y
w\D9��lܸ��fs
�
/��������Z�`�I�g+Ǐǒ+G�*��q��6���L�w�61&�3sE(1�8:t�0u�TW˺u�O�U�4Y�~
+��%�i�ƍg��cǎ���޽{��tBh�
:j5(c���8�����g���T���J s���[�VN§
k�
����-�k֬a�
��]��<�9�'���{����{�~�mEz��
�����A�����Q����C�V��l�sp�E1R�,Y�>M�>��0$�&
�a��KV7�." " "�
�<s�`2k4�Y�w�}7	�.��믿�ꫯv���TřD��
+Wl
*�$7�h���K�jX76;�M��0�
�E�v�╉7Ű6��@�o4�ժ�:t(	�H�=a���x&C,eC��" " "P�	d�;���e�����x�Xƅ'
>��A��:�|���E 9�&%w�Z������� 1�~2��ҹc��{��x0���
�w�v�
�S�rv��y
�
{��'��
+�
rH̫<�ƦM�6s����������ʅ
����������@�(
5l�f��P2���\�Z$����f6m�kǕ@�4M:��������� ��Z$�.JY�M���)A��ZD@D@D@D�
��N}Q���2p	4��"�o�W���QWIʈ��������,��k'G1�?���c�
w�q�5�ӧe��0�q�f�S�δ1/���
�����㫯��
�B�{b1Q�N4h`��Y9�|�֭ۊ+�����
#�
�ի�KO�2�_΢��'l!א���U��@��� �kF�
�v�ڕ+W�L�Hnڴ)m�[Ϟ=��E	($
c�W&�rl�.�����"|���?��;�Ü�a|{���_�x�y,�ș2eʎ
;n��&ۘ��t6cX�m���*U�Z�*%��i?cƌ&M�PSp��ա�?{��[�&�
�/R~����)�z�d>�p�שS'j�_{�z���4�&M���;��㕆" " "P�	x䌋h/y�G}4��lq;��ժU
pG
u�y
��iܸ��ߎٍ�ִ7��V�Z5+��zm۶m׮
;Nɴǹۿ�	�
=:����oݺ�g���~ѐtu��Ƶ��O�~CV�
'@�s�c�QP��Ej���Y:˞�ٳ���x��Wꉀ���@�#@
���ֹ�KC~e\��C�ڈ�4��x�����n�]��ܾ}{k����Vvvv��w���99.P���w��Y�f�S
�?e�tb� ��f͚�V�2z�C�P��,�D@D@D@	8-f�a
�X�
޲e
N�-Z�ڈDG�Z!��������m�6�a6۞w�Νknڴi���mڴ9��6l�`ポ��ˋV����|��@�bŊ���w�
���Y�`����C'�_��'�A��]�6Jd�d���� �~]�FĎ
���
���2O �9u�����<�����;���Q��jj��5�ن�o��&񝘧�}��}˶�V�Z��B�/&�G
�z�9s�|�<�i,ĵ�
�/rPcڴi��3&T��~C�U�RM���/� o�Sc��w�TVʋ����@� �h+G�*c�aA�����_?�Bqԯ_��
+�W���1�q*4褓Nz��'�[�=��^�
�nf!݉��v��e��2�ҡ~nO�FB׮]�͛�y�f�L@��A���۞9sft�q����O`���(i��ٸ�۵k����ƍyb6g������4�2L����W�F�Dƿ�F�~����uN~�i^�hѸq�z�ر�%�޽�՞�
bB
+��N�
�N�j�D�J�*�
��(�b:7�	�㘘u�dÆ
Y��
+K7�
�R����cǎu��!y���L`
b|�Dy^x�'�7v�7sж���F��s��[n	U/Q��V����{�Hh�x�Y�ElI˖-���5k�`-�͆V���d,n��O�ޯ_?��|ۯ��J�j+�D@D@D@�83<d��̊:�
���"#���� �
z�;��m6
ړ�vٲe/��2�4B/�|�)tt�)��#���M�Fݺu]��ġbЛ�V��7Tm5�dC�%a
ɶ'L��s	�䃙��tp�:���ؗϭ�I�r�_V֯�6p����u�`��D'@θ��RD@D@D -����}Д�
;�ܳ�ǃ9昿{�
��
�`�ꕳ��[0g�#�����_����ٴ�ۯ��*��AH����������B�1e�Z6�7�MD@D@D@D@\r
+�ɠx�_*�.#q��i�QE@D@D@D@J?��
�l��R�_"��9q+��O#(R��rY�+)?	({\e�d+��K�ej��2�
+5�jcN�d����?��fK|7�^�^D@D@D�E �
�EHr�̷��
+����:X6GM�/X� y|�i��]gd��?����ի��q�:��ӻu�b�
+�1��s$T| }r�
�K�\]���z��
#��㎣�>}��ܹ��
�*[�
=���+�q��O<a�Ϟ=��
. ���O=��9�7.?=���ٳ��n#4z>��cN����I(�u�%>wec8�����d&���l��7�r��|�������z���\x��w���m۶���q�֭�����3f4i�䷿���իM�?���$�,^��}�Y˗/�T�RժU�.]�ijz�F���?��G�q�
�
s���;v�馛����l��6ǩ�G��o�q�
�>���G�
W��~
�
F- at J��?���^rև��
z�� �	psH�H�_��)�D@D@D�,��6�׭[�tȐ!��=����*
+ԅBiݺ�g�#�<9������F�
m�
}�ѵj�b稣�b�)�*zm۶m׮
;����'��#u�
`�ґ9޸q��o�
3����
7�}2�裏b+C�0��9%`\zzr�k�cj)�G8��`�8�^ 5(<&�s�=��_�Kc֮]�������á%%*y�k��ѹsg�(������

x��+W2�F�
I��ED@D@D@ �J-�5jp�y�"ȳ�ɓ''F�X!�۷��������Lc�!�yVjzZQ����Y��
'���^#�B�Po��V���u�XL�d�$\���
��ٱ�x^�r�����@�xJ�_t�E�
qc%�s�1�\z�ݻw�/�Q�¯��J��\{�
:t�q5~g
4����	�O<��{�7T�������D!���>�v{��M8o�6m�f��s�9�������Cݲe��6u5޴i�9�=��6l؀{;����4�'w�-�ML��٧�z*���1�9n��s�r�D3{�Q��&Y=�o��Y��nv0�-�P��R�d	pσ���#��]�� !bo��#�8��u��8��'?f̘�]��
+'�f͚5Q��E&�s�2]3o���P�j " " "�@*�2r�OX�ha��v�›ec'���
�r���w�mZ�fM�
[ϙ3'XZ
+zۗET���w�՛5k֛o�I2��w�}g��-wҪU��F���
�sj�(�g�D��U�K��ԯ_�;.��
s$��=+D��H�\�2�,0ذ�	�
�(�K����~�I%g�E���ܸq>� �2���9w�ÝF��<;��Ktr�
�UJ'���BC��(Q��!b�"��V�a����78��ޝt�IO>���-wb�D�ի�_�]��E�K�v�Ne�
�܂9GWI-�"_�)��>++�K`����%��f��l�>1�*�ԵSc���q��a;~���� ������5�vt��� �r�ԩ�׃ b
.��8��΍w�ر�7�޽;�յz��&�D���l�MC�
��o���O��V

��;=TO�
�
�Čb��d��9".5K��ƍ�Py(aNd�
���/�1G���˻����
+QWw�=wh�Y[y߾}�$�޶�]��p�ٱ[�m����^D@D@���	�C3�
rY H�K5\�K�,!�ù瞋_��8K~�y�L`Q�.���ɧ�<��I
�#fΜi�<��X8���4�k�H�����s�!�bA��Pf?=
y�;v�X�N
��9菆f��;a�
�l���ͯ�9� ==ۃ��zć0^�b'N�إK�P΅
�N%���w��n���͛���)�Z��vX�͚5���I��4>&�X�ԅg/�W��
�h��>g���?���F��'?11�ܩ2��fy�Q,�뮻B�Uo�{8!F��9�d&ƀ�x~�	�������+c�M�4	#�$�."T���w)A.6*h8��j&�az���/a޲5H�ž9Hh�۠v�C;ݷ��À6۝w��g!g�r,�����菆f#
�~��c�9ʻ�8ۅw��
+�ӳ=�1�HG��믿�l	$�
�\�Q��(�u�Ɛ��m���SH��m�[o�Ŵ�]s�ă
\�-	����]�1�yû�<�}�����KH:پm�?�A|h�
,I�����24���I ���c�>�I�@��.����g��m�O@�D$�O7bK5H�����>hJ�
v�������s�߽��}p�N���ً�-�3쑇�x�\iY��pS�3�6K1F��'9" " " " "�q�b,ʣ�l�!�v�: 㦩�%�k+GX�W�j��s�ٵ�Lo��%LD@D@D@D�T(�~e�ٵS*/��(2��V.2�," " " "PZ	x�Yx��a5�J+�-" " " " ����|[9��e�(SU��q�!;�
蒄��͢P��޼$��a��3����CYf���e6�k8�Ӟ�t=z��b]]8;��TǦ�P
ͨ������������p�׼$�2�mР�]2蔃&$i�� [...]
�$�xs?��L��+g�޽�f�����>	,$�ej֬�j�*#�
"p
+)S��������,4�\&��w�ބ
�iӦ��
.�>�-[��
=�E��FlҤ��	2w�\+�
?��S	�0��m$�ø6lfk�*UR�Y~z� �bŊ���wJ޴i�����s�y�mذ��%;��=~��P}��
=Q
��@�ڵ鑐!�/;���{�+V�L�lD�X������ND@D@D �@��Z�(-ZD1�Z�1C����3�ܿ�Y�g6ܫ�&H�V����|�M�>1C���P�
p-
������ݺuõ�N���T"B��[s��q���ӦM#�d̘1�*�z�dB�.���X���g��RFD@D@�'�me`�]&�`ܸq>����<�	l1<l>,�իW����D9[���׷5AH#�<�SyРA'�tғO>py����+��r����{na������ڵ+)�7o���Y�wb|c��3d9
$ʙ�
H
��v��/V۷o�?�Ɲw��X��7��lΠ
��Ū�:�"���l�a�~����
$#�y��Kؾ�'���|��6E�ˑ��Er
�k�?���/gխ[�tѕ��<�С�ԩS���X�t�.���ǎ
����{�n����2b�vD\jV�H	�qL
�ѡaÆ��,A}Ե�����@�X��Z����LV��n��\f�=^�dɣ�>���.�0����֬YC`Ѻ�*:� $��ޱc�:u�<ΊB8V��N��P�\
������{�S�1�z��|��
��RH#��_�F�jٲ��)����'ف�}�g������#?
�^ȟ��+�Q_+" " "P<R���ի����o&����#~e���GX0�+��f���?
:
grY"%����`y�-�A|'�٨��Z�����mt�)��S���uc��ZF�
��!lo�+^�5.#-�O�Q��#0t�PƑ<{„	<g�L&Xt�K������@�	d
{Z�e˖��$VH�l�?|�}�7sӮ��@�%@θҫ�4�RJ�H?ͻ�ҹc��{��x0���
�w�v�
�S�rv��y
�
}���߉��mY�L���̦�R�+�R�R[D@D@D@D@��E-��(���,��[���d��ٵcc?��5(?��Y1s�_��l�g�N�%�(��5j(-�m�&r���m�g�Ni���SD@D@D@D ��b0�+U�D@D@D@D@D�T��'�7��+U�Pʊ�������ga]�I*��|@z,j��)�Gre�r�6�
�:uZ�`�m@�=���c�V_�v��hӦ
�r��z�r�c�'�k�S��*k=z��9��ީ��ٳ/���!;�SO=������6��8�EDŊF�5h���d�կy�9����Ό
9r�ڵ+W�$�ѡiӦ��y�駝/��X"�S�(l<����Z�������իS���w߽�k�m�f���߇ye����0�Ը��[.\H]@
+݅�ᔭ[�&������ܱc�M7�dNDA����x�b��4j��r�-�F�g�}6�#�_���X�>J�8+{/_��R�JU�V]�t�=ˀqv��=�U�L 0`� Kd�\{�]�t�ZQ��3���t�$�i ��W��n�:��C�
��J�髮��Bt��G
yt�V�Z��4|�p�h��7���z��g[[����n�ڳL�_{s�q�Ʒ�~;U�q�"�#�j�b稣�b�*����̈Ї�Ԝ:�0�fΜI�3f�o�c:�m��9;������{h_j�	��q�3J�q�5q�D&�U��,��LPX:������$�%j6,c=��ʩx�kԨA���+$w<�X�NJ��'O���u�%���^#(Cǯ;��V���vR�P�׮]���c!!
�2Gl��Īq��>�f͚L�!;D�XmyhЭ[7��g��RLD@D@D 1wr:�ʄ���ݻO�>D���G��x�&Ml���s�\�����w�ի���������gN�s�9�T�Xq���.�~�� [...]
��CeZ���C�R��'P�vm:%��t����#� %�{�+�
E@D@D@� P���V�{�Rw}��h�"B&��<z�h�٬Y�l��V�Z�jl<p�,������8@~;\�.�~�9��oW�y��w߅�B\˓&M�=��
l_L("�Y�5gΜP�V�Q�F�6V�L&��d�f���MD@D@�3�X�E,�����P�
W����.1nܸ|p̘1�������
��
s
�~��7��S��q0G�ӵkW"@�
9˯_��T
4h�I'���O�c��2�ϡ+������kO�n�E{'�7�9C���Z�]
�����C`���td��ٸ#�������_�կ~�H��
�ED@D@�B�U�/�G#��M�8�={�`���R��V��1��N9��1S�60u�Ԉ
�
�5I9�I�����E�V+�^̉���]��8ݹ�0���c�fgg�޽;��j��H
�qL

�dÆ
?����De���\1�<
+�&" " 圀cm_���n_��
j/�ろH\"n׬YC����$��+����d�rG�R�Nh�Q<�f
5���7bĈ�����&I�],�6�ݜ�8�ߎ
;�&y
g���7ݲe��?M�5�|�WЇ��W��aX��+Wf� ɧ���
#�[�r>�3v��N�>��˝�Yg�u�u�1a\���Ռ
���F�`�������1ʡ�r�
+�e]��㲤����8A8�o��f‘���?�Wv�+���*
f#2!.��C=��c�q��H!��iN	����O�)<�_<�51A7�mN'1
�V�E��ɬ�4\�)8�E��Y73;-Z�H�]]��e�СCI�B~�	&�|#1�!IQ�TR�F�������@Y"�W0iUֱ�5^�l��c� �P����7p��/KC�XD��	�3����|���1�>hJ�
v�������s�߽��}p�N���ً�-����w>�3�s��hִYs�3��
�(�e]*(c�
+����x�<���Fl�-�v��(.
+�Oi׿P���" " " "P��
��l�p�r���[e1�nٵc#z3�i�?��J=(fq
�@1╛�<a�.k(��a���╋��;��H6^�ᇆ<���Yr��S�ԴY^�r�o9nE+V9}�H�D@D@D@D@J	u�s��_�^�E�p/�+%Ó�" " " " "P�Q��-̍\v�틻�s#1�].
f�+" " " "P:	�-�+h+�c/�mQ_�$'�E@D@D@D@�4c(��
���G/;
e�Q�9hp" " " " "�A �\N���g���>��rL am_��ʊ�(�sCC�rL �h_������/n/˭\�熆." " " �@�j_�i�e�a8le�_�빡�����������ɱ�䬘W9�J����W[�D@D@D@D@D�|��x����y�s�b�ъ��������@.�<���Zη��1;��x [...]
+H4�
~�xӘGY^e���G ��$X��U�(�`,cc
�P.SB#�'�J��+
����������g��ʤS>?��G�<���E@D@D@D@�+��xeS�:����e(��Y�q���������0Ne��/n+���
�e�E2�C�����������@9"�4�-���sb�J[��頡���������ȳ����&jY��0nz_D@D@D@D����ek
;�l,C����������S�P���F
+���\��\N熆-" " " " ���}	�r��*�i����������@�V�4����&���ED@D@D@D@D��_�����y!" " " "P	�`eg��
k��q2����АE@D@D@D@
���
����+njh������������O&��#�E��>
��9�v��\>�F-" " " " �<s����
�<Dz�eM��N�@�r�P��\���/" " " �@�J#1[�8o��������E@D@D@D@\*云c!ʹ��
˚%" " " " " ����O�e�
��V��#���gY�CD@D@D@D@\u�DD@D@D@D@D ���n�9.Dzf�����������"
'�<����i^���������@A��ʄ��!" " " "P�	P�$��$+�\O
^D@D@D@D��@n�>�ʚ
" " " " "�K /�r��x�k����(�����}&\��# �rN�`���c0d.��ዀ�����@y'��
àx��>4~?��57D@D@D@D@D��@ֱ�5^�tٸ����/�Y�������ӟ
+����������:�����ҹc��{��x0���
�w�v�
�S�rv��y
�
~����,w�993n;��Yg�����̥��4�OwQ�Vv�1����L&дiS�8�T�b�L<���G׭{��~��������-������@�V�Z5����z}C��
+��~��u}��o�z����3����[�/�s[�
+�+ҹ��׏7�_|��g�}�iX�n�5k�t��ռ�P��ʕ+W�^}衇�#F��o�m^b�О#H0��甧�z�f͚�S�?�VN�>�u�	'����֭[�~�믿~��st�����O?�|il)?�.9�;׸�{��^�Dn��9詧�c�)��s�a��
9r�ڵ\�;�3~"�(���Fm�̏?���3���
+�O1虔zG
y�!C�
ڬY3F�Թ��[����W_1�����.����fi�3"�bh:ޤt�'.n��7)%�XD@��@���_9n(�v;�s�e2۳�>�qL��{n����ż�6��O^~�es
+?����߻w�Yg��
&�I'�đ_��׻v�r��g��c�ƍ�
J!Q��+N�:��ᄏ���?��)S�ԩS'X���mٲ�ˀ�С�:O�o���m#�J��:��
���ͳ� =#v�l��g�qF�N�n���k���K�.i[�B
8�y��b�;��k�5k�����"]1s���Ȏ
;\����fŬgQ_���&�@�<qqKo�I)��" "P"�u��/ϣ
���b�e�ͷ�~�/�������
1b�QG
u�UW�v�iFw�}�m�)���s�ܹ�8�����+���o~��]�.]:lذ
.� �B�>����
8w5���oX�r�o�-[\�

��� ����6��4?����pH���o��~�U�\���Ι�ג[&��O<�駟.^�x�ĉ��o����~�7h��_Xg�iÍ�}��#�<�]J
+r ֪U��<:]�`�6�%�Z׻3*���3�ٳg3��{�=��<���F
�Ս�J�*1�Æ
���j����q��r�v����_y��&7�f�f34�������
*��~�3
,`��	���i���;z$�o�|OnF����wp�%ٮ];��Jvv�ƍ�,Y�C�`>4���������=v�X�s�I��G
q�����<�ӟ��p\��՗�|8������?���1;
�z���{��p3f
��n�����,��E�x���)~�$�s�)*�_�����Y" "P�L
F�2����ɩ��Z�'�C=�G�fܸq<|��w1�1)\��̙3�����l
׆+�5��ؽ{7���_E?%�%�
ݺusڈ����%�B\���oÆ
�i��>Ta�<�j�*Ӓ�
����Ν;_}��8�/���^�z�,����
{��]t���~�u��6����c}ۀ�N$�|L(4+��k����KO<��{�״�޽��o��f�����>�hs�o��`
s�1�j��-���R��/�z�5����cnb. JK����1�9ÿ��/
9 a��
@J۷o����Ymڴa��1nKBg�g�d�侽^�z�\rI�޽�Aе�|����f��s�3�v��K�9�0.

�pݧO��Ο��g�oR�
���7�y��p	���ﺧv5u����\�1�rn�>��rṊ��bŊ8���ta
+��<�S�1���I8�����?>~/ܽ�-<m�<��PN
	�c����

F�����ѣQ�~��֭["� �9�w�yVH
+�8F��s]�R����w15�pRr�}&�fM�=��3
9�)8�-[�����) '�
M�d��o������c}��g��ň�����Ma�WFs�<0��|�L!�
-���'76?�0Nt��:���"���ņ%��k�_����E 7��<�!_�Γ�(���@�K`���]G
�ߴi�YH�G;ʃ�D����/�-������C����c��|/M�6mѢEFT���}�]�<iíS�Q3�蟋 }��
�~.������`�����$��4yu��6�P��uȡ��
���G�_t��h�z���?�,桳3ޗ  l��;w���b\��q�Z�I�_�Ac��(�v0x�ԇ<U���?�q�����ɓ1��-��̡0��s=��Я�y뭷:���;m�nҢs!(�;�k�fyv�4
5�
�vE��˗�f8�	Pa��H�B�x���!snQ҆
�(��5G��;����3:v�H_���{��7#��l�B�)����_s��`1�ň��C̍�%7j��}�Wm„	
܊JA%�S�d��E�=w2�}��s֣�>�爛X�C���q�G0��Tv�g(E�\�.n�r�M�����," )�<�y�1�٫���=�8�p	�mϞ=�V�c��/�ٴMy�=��L|!��\!˸����,q*��F3���'#
4t
~���#|�G�
8�x�*'���Dt��eR�9F7{�'���<�ѐ�f��
+l�ũ̝�rr�o�R3ycYY��
*�
��SN���pq��3qs�rR��,xJVf���~yr��Y&'W��3��ۢȌ�&q�Q�r��jP"��r)�w�}���Oɚ]
^��]7
4Nm"���7�� ��?��S��e>�W�x�g���&uݓ�ij/" EM 7g\ܩ
3��O94��W^��_����,�"�Y���]�UcC�&�U�V<��cغu+�.�[
ٙ��cfEO�S�{��b�� ��YOMB�r(� �����o�}<O���(F�3+��1���a.�Fm�m/�EM�SO=��A���$B�s��y�v������{{�&�9�-�������#���Y#����9Y���I���:�<�!p����o߾�f�	���9{n��+��&�4b����ߪU��z�;
}�:��N?�t;������aԨQ/��¤I�p��B���J�\�q�':�Ж�������
����+�\oDC
9��q*{z+�r�����w�2)\>8���~�pw�:g�
�o����0K��y�3�
}Nԇds�����c�mѢ�]w�ŏq���X��x_���\\��۷7�����9.:�;
q���Q�i}m�Y�D�
����5s&��N
"�m�!1�
~zN�ˈ��L2 at D;V2k��>횲���.��;s�y��={��m����1q���p�ȝ!�Bb[�r�k�?��LE�����e����r�Ap*K�/6C�����P�[��+�
j�֯g_Iq33��j��x,~s/d$'��_/�_=k��0�Un�=�"�`���'?��4��'�'��n�퍶M�4!�e0g���Y�a��x��F�Y�<.��?~
�Iv�pK��o�uOV%���!�||��W�G_X+��|
�&6�������ĨK�!|�J�z
�6f��zQ���
��?f�47��!x c��`�S?����}C�
�0�X|�~�
��&+?������x�i�oD9)4�~��NfA�<776.wJ��ir��
��b�
�����w�r:BHf�¤&�stg
ps�#��L��)���Xx�l�F���.�Y~��&YR�Y����emo��]��s���U N��n -L�D
+�z�,7�[�Zp���@ش�v%��=}��!� ��X���s����3ͺĉi�oy
OVO�����
^a�E
c�9�L�?�#x��gI �����
��s�~�3ُv ���
��ɪ��" "P�r���No�l�җ>ى��1��=������q�m�]1����/��XۤM(���:�۰`ȿ�O��]zU��������()��WD�� F���)�;vعgߏsXHe���w��s��u�W��^4o�
r�>��g��G�y�ֳ��uV�Z>k(�W�fTi+�E s	�D�P
"�͛��Z�~͈�a�1�+0��-q�N*���D@D@�	�s(�ny	��6���
B��3#\^���i�];6kG�*��Wi�?��F�e!����,>+�����G�
+�$E&�`�Ң��H;���OoBl�K���u�5}HN����4蝿��
�y�b�Y�9��ҮQ0�L�B�01�oL
F���ʵ�_�d'
e�����'��;����ڈ��������@H9^�i+W0���
�a�3p�RID@D@D@D@��@,^�8f(��f��lj/���߿xYy�F�a�O�eo0�L�\�%
)Y���O��P�" " " E�XŹk��N嘹�4��UJ-�F���h�Ν2�ךd�)o�2���j��F���o���X�O�1g�b0���O
+��)" " " "�
	n�
+�1��I�
Yv��*�ܡ��f)��
=
+-��}��م��� j�9ˆ�.���du�g�¢�ٻ�Lӧ�8�_��%��W�K���ajJS���|�*�#1��E�u�ЁԦ"4��
x��Д&/)��l{�
�jՊb]���5�x��xR�<�5����3�ą9w�\+��]v/O:�$Aa�
+��s�I)Ic�~)�u�M7�|��T��_
��OO���p�

��sϥ$�UϷ�+*�O�qy�i���)_|�=�X����� ��:&�_�E@D@D@D 
+k���o�ͽ�T�jU
+�
<�:������=�x�
��	��)S����S��Ǧ)�|�W�9Ȼ��]�v��(cp���6dģ� �u�2
t4�e���\�MVO�~�CM]�q�߿��/����3u��y�'�|�YùK�.�k�d?}�z���W_�0�K/�D�eS�:���>�=�c���^D@D@D@"�7�Ƀ�۶l�2z�h\�*�/����?�&��k��/2���q���Tܻw�3g�۶m�����MK\ԗ_~y��0u
+��/�z��3����Z�v�]����N
u�Q�Ȅ`9�K�x�R�4��w׮]8���^��͛7�0��/�
 �O�ݻwc%��>���}���)�S������i�����O��>��=�c
+�@��������@0�i\���,��oV�5ݤI*x�Ne�'�x�%�Y�f���}��u�֍�l7<R7��yIK�
����9��xR�0�_�ԫW��ժU�Xg�����MJɀ�7n�[��iڰc�����_~�1���tih����MRH�,?�uL�%MD@D@D�<(`+��丱��f͚���c���D2�삅��u�g�xI��}�݅
�����1c��=�؇
z�O��9��x
+�ij�؀
v�O�Q)q�)���S�t�4-]�,�QP'%?�똔p5K n
�Zĉ~e7(0��8�P��d�T���ر�5q0��ָ뮻F��m��~�C��
����c�I�����D�ӴL��
\�f�i��9�'�OO��u묜(�%��wV��V��>��	c�O��(cQ(��d�A淮/R��~8Q��ݲ��ܬQ{��G����3�`Emذ� fkKa`y
��_^��~�43o75DL����$�*���>����g�!|�/_������7b��$��E]4t�P��e˖=��Vk+ٸ�����۷���:X�aÆ�?91xz at tx�|O}��,y��0��u��첕#��
쁅}\p
��9��Çqa�.����S�Nm۶%,՚q~�Æ�~߯� 9��c
y-XQG�5�29ɪ��/��,���K~��ߓ���/�b��d8�YDq��]w�B�9�9ҲeK��[����
�'�ꫯf���+X��>�rH�ڋ������@4�Vqֱ�5^�t�_?��i&8��Ϫ�?h�;

MPq��s�A�Z`gw�>�e�J�I���8Q�/����ҹc��{��x0���
�w�v�
� [...]
�^�<}����F�e2~F�	�H��
�l�s}�-��A�R�re�d�nݺ��cp/��5�dNʶb�ҴiS�rfNHL1_݉������1N���V.�e�h8" " " " %E��μ.}~��~E@D@D@D@���g+�u����Q�Vǎ
M{�(Gi��m&M�D�5!3
+�z�I�-�	��y��W$�zE�)+:���f" " 
�˱0��~��lݱ�5jD�ߝ;wf���РAQ��<y�/���i�i?`�~������nʔ|��΁���H�*U���<�Լ-KW9�>�id���-��M#:��"$��
�W�*������裏��"T.�TРL]�3����ef������?^~��?��O�W�T�bŊ�#�9��J�D��������J-E@D�	���X�dg�uր��fu5��YS%����۷�<��8��_P:nϞ=��+��ҪU����hт����IAٿ��!CT E�Ν)
���1#��	/��g"7�[۷o�馛N>��3�86�
�紐�
Crڴi菫i�ܹN}.��R^���?wꃧܼt�`�ڵ��oD�s�=w�ر�]#߄�$z������-��Jż��^)�J׼����s
0o�<�_�{<��O;�?��O�a7�� ߓ��� ���
7����ŋC���>��=�K_x�s:;|~��w��}~����������@��}n+۾�V�������Nm(�L� ><L4�S{�yʔ)������?��æ��͛��뇹ɻcƌ�]�v��d�����o#y����t��Ӟ���$�6�������߿��/����	��t���_�M�6Z�>T?��:5�~�믿~뭷F�
�!	��:�����<oS�^.�隷~��}�Q�s��7���6:!^��׿f͚E������P�.>~�����;�n���;�<��'N
�՞��p��y�

mڴ�
^V�^
i~�_����������@���_��?x������߅7����!@��c���>�'6(�f3�Ξ=�
���[k�
�3g^X��駟�xÆ
�q�qW3�K�V�8
S
�����J<%T�޽{m~��ض�"
����৏�
�
U����p���sC������ݻw���4�0ab9�9|��u
u�UZ���r]_�
��l���O�ϵ߼
�
`���5�y��1��G q\��CAY�~�cX��nو����ȸ��3�k|���ub��,��{���@D@D�E������o_��Մ��}����������7�����g���uC����k�~�
Z���N�s�)y�V�gg�cN	�+SM��
+��+x�'\f{�f��
�����֭��z��Iȁ	W�%-	o�c���/�̜�w<��Lpt�"FRgEoLD��<
6��c��I��'X5MHE��
'�z��_~	��O?�
9��S�
�x
�
,�?o
s���Mv����F��y��h�o�\�r%��7>�S���z�q�G �|� ���Á� ���{0�`}��.*��W�g媩����@�px�sw�me�����X�z5�o]���ȫ������T~>��Ci��3f<���xh
z�!B�Y~�KS����]Qu�"9�uL�VE-J�6��=?�t�7������U
W_}5��D��0�@�~��;�
,?Q��
+p��CL�l���bN��4��$�o����<�D>�#B" �R�J,�15�]��1�Y(��eĈ���/�w<�;��������P!���6� ׬Yc�b�
��O�r�
�������?��3�]b|��l��
����gH�̟�~�+5����~�$;�m�~�z
@���2�S&�+��i3s�RZ�n���_� }�O�z����w��#5^�^��񆞢" " EJ �V��=kY���{w�^�(��{��G���3�<��F|�̙3�U6?	؝�ǣwJK�����O�.�N�>��IIp6&4��vl�|p�p�������YA����&@��>��	��q6nKhC� ���eC^�m�+Vgi$�[N����T� �L�u
=�46(�y�w�RcX�y�O��!��hν.����{���B�<�W~"m�Q^t�EC��\^�lٳ�>|E��I��TMb#�ܮ	����^�cj�Ag������@���.���x������3ɒ�Ną�D.��:u�Զm[�(�Ϗ��d��ߋ/��W�^&ISݺu��`��,��{�a�>�$�2�	�&q�%�\�����
y����O�r�z!|�
ehвeK�MK~�9��ě�+�#x�;�0n`����
�I���u�rnilSR���z�0-��O�d�CR�Ɋ��SO��o��$�b�<ǕF��������O:��뮻.�x��
�EHI�����Q�V�Z�4��/oy�7T5H�/̿�-�<˖.��6s��:��:>���O[�i�Ϙ5�d��Ύ(8�S"J��f�������g���G��I�x�BO)Rz�?E�W�E@D@��@�AS:w�sϾ�c��ݻ��� �T����hނ9
��kc�pN,��k��ݬ�Y��t9��z�d9�W�R��EiY���L�c"�
9G~TY�k�\����?ei�i," " � �oW(-Ʊ
mÆ
I�A���}�FA�sO�����(�Ku�m�������w�e����%�=�m��*�y��S����"" "�2gN����ք�[�}��f\��1)['���������)�`��zk�1���\~��F*" " " "P"
+�+�\.�k�NE@D@D@D@2����s���7�I���F�R��
!
�'bR��~
Ϛ4iI�Ht�Yi�l�z&v�=�yRʧQa�J#��y,<�y�Fm�e�f���Q~����P�TȌȳT�EJ���@1p�W�7�͞�u�jlԨI�]%��A?�.(;2hР(
+L�<��_��Ҵ��
%�ȶFّ?�0��ioIvjHJ���P��y[�I���ԻqΖ4�S��='y�/�Q���<KDIu*" ��@~
F�>�p+c��K��>��;�ȐQ����ZQ��� [���
�èow����'?��H��ޒ2"(���iס�
+,o���Ջ�R��K]�t-�%�]����^q[����6��J�!<묳(�F�6;T� !+խ�Yݾ}{�"��<����%����c�S]�U�V���oѢA�Ǔe��o8��d�ܹɞk�3�K/���?���M�yk���7�t��'�|�g��f��
��3�[�(C
3㥸 ����<�2vb���@f^1�Z�nM=�#8�=\A*MF�����Sgl��[�$�aB�
?}<;mڴ)���oQ㓌�
IA������0���GO��x��']�رc�u��\�~�M���}�=��}˗*uRO<���N;�O���
F?�=y��7�2�]�ሀ�����}�Z$��V������X!�Q
��|x�Tp�Z�X�S�L��׿���~شܼy3�k1
xw̘1T�
>��e#�
e8ڴic;MA��yX�x1�6������_*񺄻8t�� 9����ԩS_z�9s�`f�0�rrJ&��;3y��[oQ8�y��Iy޺:JV
+�x�	���9.leS��nT�1�r
+�=?_��_�bI�Ϲ����k���ѣ��1�s�����{[��8n-f͚E�
�	3?��xr��>~�Jv~�����n�W���-�̿!����
n藓�C�.!��}�
�����f3�Ξ=�
�������a
�#�pxa����~J�
6����]͜/�Z95��5/��8���1�O	��w�^ۆ!"��G9��8�	7�'���u��u�W2`D���2o1t������pN�ĩ��y�(�O�fߩ���Qz�}ɝ6oq���N�
=�yp}�B��}��>����
����w��q���	
"��ua��߷.e�͛���/@�[~�����}�h�" ������%߾0�	s��ܻ���6=;{�So|1��χ�X���N�졗�<���<�}�I�7�z�����[���U�9%�W�w3{��8x��q�����	�jѬY3{G�}��u�F{��={��ӄ�<&�����/�̜�w<���z��qV�j�p~�j
+�Nٸq#�@<�4
�1G��
��N�3�[�(�>_~�%S9�C.�2�2�����^�Q歳Ǣ��ot��W�\ɻ�Vf��Ư�–��J�C�����[���O7'ev�?ש}��g ��m�ƍO9�믿
5R��K��o\��Q{(�b�rV�b��`x����c���D8��j�n�bkf3��Y�F�Θ1�P<.=��u�,��)`u�_��c"�!����-"s��q9i���6�.��>E��b����_,3>D$� U"[ʶrtm��,�G��s�����{�� W_}5q�/���|�I�LyR�Թ" "PR��sm,���u�o7�\��#�U� �J�*�ر�
�Y���,|�뮻F��m��~�C�+��P�š5kL��#�R �[�ʕ�G���>�}�(���k\%+'��-W�����0��p>�Hv���c�3�,����L�����ի�|��;�s�&?~<��B�p����<����Ff	��� �
�\'�H�����yp�r�ʜ�J�]���7��@�D@D�40�c���|9Y1�����
>��?��k����{	��Q��G}���<�
�"�,Ϝ9��v|���;+��l���,Db�X�����&��p��$X2q�����܇�~�
�>�a�[�UW�Q��&���-I/��G
y�v��
+C��z�#��PsǤ�Hv���
������'#$^p*�263-I���}7Q����E&/�Ҭ�e�*_�qZ��q]G�[��1<.��lŊ�g0��i$�

�M
M�K��E�� �D}��U�Y�sE@D�4p׸���ql��&�џ��g\DÇ'�œ��Ǫ�N�:�mۖ��g�}6�x���$λ�K~��ߓ#�����ڏ�
v�ax⩨BX'���_`b"��z�J�>�MZI�[��

��8�뮻�0ؑC�@/K�2#*�y�3�`R"\x��K8�Ĩe�C���-[Z�����
��M� ��H��r�%ߓC�����С�
s
���zk���9�Ğ|�=Q$՞lBO=�����7�1��C��LO�<=��Wa&���RG 맧5^�l��o�����j���_�g�`�FW
�wD
S8%��iVƆS"
���Ыf|��� ^�)E:�D}���2#��iT�$�]��HY
W�L����@�AS:w�sϾ�#��ݻ��� �T����hނ9C
|�7֚ 
�8��ڪY󳼂n���e
��늢)E٢�T(j��EM�D�u��g�$b"��g>%�F�;-��J;(	(�l�r����rÆ
I�A���}�F�6�F�29��^mD�(h��
�I�6�<�����~���0�X!�(��*$�."P����ʱ��37��]!�WD@D@D@D ������[:b0��s=��XN�N�@9D)��9[�a�cc,�P�$(���_A��-����Ʒ���G���>5��;�}�a	�Q�
� 7){3a+j}�"�l�$N�\�u(�y5i�$��� �y�T��8	�O�
}j)" " .5�V�qX�#�wx���W�U�r�����S�J�U�����nr�T�V)�j�5"���4T	^���РAN�L
2����UM��d���I��?�0�AE�Z��֭[�u7�x�S��ٳɄM�
�D����BJH��i�W�_&c�)����9���R��RsdU��
+�ؾ�w�d��w�#,��u����@�!pZ��?�����ٵ���q_�
��y����^4a��[�Nں���_���dZ��X�r�_�/���U�Q}��Gw�qG��%�>eƢ(S+�EiYZ�P��(elP�~=)Ѽys��mLY�[n��|,�!ec9��&�󊢒�|�	i�(X��K/9��Qd���_~�O~�'"��g�}6ީX�4ԝ���@� p����9�;������o�;n�׿��}n�}�ͷ��u�-�us�?�ts�`$,c��v�YgQ��Lm��K���:vԬn߾=o�c�
���_���%۞��V�Zկ_�E�<l
=��B�8p
+�LpBR���~r�o�~�M7�|��g�q�l�,?Y9�v�By�NQ���<�
��=���)\��'�x�i����?��2ŦU�o�����ŋ��իWs�Qɼܽ{7^ҕ+W��)��j�I���ܹs����2dǑйsgJ9�����������o�<8�n�v�ʅ{�h�w
��'�Ө���o��׿v�G�wle�,���n��v�5z�РD/���˶��
��煺��ճ�]���	�֏?-���;���,��y0����K/e�K����
�%�-�n�_w:." " ��a:�����@��۷w/&��{���{~�����m$d�~vܶ�_��G�U�V�#��P
��D߳y�L�V~ŧL�B�����?���y�f~;17yw̘1Tg
>��U�1	v�;��&%�O���7

++��T�
��
�C�����zk����	��~����k��Kh
��g͚E�
�7��w�I �;���ON�8�
lР6��_"k5u}�/�-?9��t�R��mڴ�����o`�0,X����0]���O�%��:�?���-;�<�
������dy�Q7�pւ޶m۪U�(��T4�]�/+!��ΏR�n��/��LLnw1���������D>iӀ
�̾_������Y�=�"" " �Hx���Ӛ|���Gm���|�
n��cb
+	a��fk���}��w�´G��qb
�#s���
k�?��S㑲�����9_:�J<����s�N���4v������p�
h��E��v�7̉&L0
+�
w�7W�l�C����y�P�{!
��?
�Ȝ�x-�����=z��B�d+ǐ�9m0Ǒ�p����?���:�O� }� �>HQ �1;�Ύ�u�O�T��W_}eu��n�pi뜖��.����Q>w~���߼�x�޽��0
��+0��b�P5m�,Y�Kn������完/�(sXmD@D@D�I��
�G�x�q"�@޽k��
[6���|��W���?����ˍ_���'���‚/O0�Իf������1��Wv�ϱ�N�3N
*x\�ך�T.�Y�f��d��֭��z���#o��KZ&����_��9��x�7ExyD)�>�1G���OΗ_~	%
X���z���;��o �S0�^�7f���_o�M�/�#v��t
�J��+��%�\b��cުW�
�U��L���-;<�wi��>��J|��Cء��?���:��O�'�q�cƛ���l��|9D��y�OA����7o��&�cݺu�ׯ'�L
+BR>�z���7����
�(" "P�	|�����0y�l�}�
���``"��G����?x�ʓt܁��1D\G^}�U\�l��4
�h�_�
�~�i<L��♸9��xy���
�'O���\}��ģ��C �-h��Xb��=���5k�$f�
do��1g9�!<tt���*�����`��y��̒Sg�Bs���٥m2��/#$��.��H	��T�O
�6��
���DX�G7�x,s�GT��D��K
�p�S�r�.�����������}�$�}Ld����V�
w�%�@�–��}~�
�e��c"�kJ�����Ɏ�lO��,�뮻� �m��~�C�s50?�)�{C�@ �k֬1-�1G�5L��Ox+V�H����g��
���]c:��ڪ�?Q[
�8�	7ǯ̹6! zrQ� ���s��_|1q�D_t�E������c�$B���O� }��$�ax^G?���4���蜖qݺuy�\kZ{׸Kɘ��X��S����8���ЩS��3gb+�cV|]� [...]

���t�KWa���_\~��O���t"�x�q�&�q�
~��?�|���?
+�B��.�G�<����+Vl��wܼK&<�,�����g|x�=y�!V
���4 ��Y�Ɔg;x�С��˖-#Ǚ�t�.pB���f��r�.������'��yB�	26��O�G��:��O���[��},�s*F�
Vm�
���k�+c��.%�!άj�GdZ�����%q^�^��ʬ@
]��ǐ���k1�Y���ҥK��r��CA
��Hй" " "���a��u�<�ߟ��z����.;���p<	�s��d�?*�fN� r�Q>�s�>|8�
V
O�qM����]k~�
O�Kp�=���x_��� ���)�~�a&RE�� ����

SrJ ��[o�޽;�M��q�:����S��_b��>~�=��Y9F�����ك
�y��H�/'��tr 0ۈg �9
 Ǐz��ի�<����z!�
������xڎ���-9�e�\,�=�%c�y���ƒT'X�μI�(��
0����	��1��~a!N�)5B�=��'·dy)
ʜ+n� ���(" " � L�������2��"b���i��
NX�㐜�&\�����{g�{_D�E�
$��dW��|*�S�z���cj�
���;^���kO$��&���Yk���"�����7_�c!� �[����z*N�ԗ���@� 0��!�"��b��X�o�=B/�vs�P���w?���o��bYO��e��g���M|F�x���e�\�䢨���B>��K!�����M�6a"c��7���;�^��ԩ��J�i/�)�|�
i�_��8��/J�P�E�r1cWw" "P6�Hv���uJ�,璾�a
����9<W��P6�r�	ъ�)�
H��J��}�F�tԨQ&#a�QڗH�q
@,��~�;n&1j�
/%�it��ً���mI��2D����$�3���ܩ�(*U��t�б�^�	-������Lq�o�H�
~Vk��g�*Z
D@D@D@D@D 3	�Z���k����D
Q&�`�����Y�p�ڷ���
!#VC�
gz�V�``+�[�����e�ŝ��|b���?��љ9li%" " " " ��m���
>�`9���ʼn�I�@��3�5��	?;�Kc+�f��㕱���鹏�K܅���=��ܷ��^�$�4IbR
�~���c?�e|?������ki�n�Y7b���-?�x�ao��v��o{�gƎ��I>LѶ�nI����x�s�
+z�8���QG�l�pNt!f*��ǯZȕu]RI
��R�
+�>��9~�#Qy�%�a��>=�V�!��y?m%��
)/�k�vN:Ƙ�"~wD��k�)9���I��w!R�!IQ��/�B]�TT*0�h���cl϶_j�>
��^:��#��%!��#i&&4JF������G��
-�O
+�,�$�����kݪE˶����\�ry�w�V>�Ԇ����7p,ǂ�O�u��5?�b,gY��:k"�8n
��f?f
:�b��`�2
'_��^��9d߈���]�
Z��t	�.
���zz62��J窳���k�gr9�;���Q��us��R:��d'~◩Ks՜bS�$�<	���d���)���
��QfD���Ͽ*Q����vk��8��q�I���G�<\�+a�yϕ�A������6��$L��}�'�ᒰ=��,��tt�c}��\�D�����:1�7sAu,v����w��%J��I��
�����ߌ��9��Cǜ���1TR�p�H]��ɿI�pMCZ8�zO� +%����i�W�d����ʁwQ	?RAX����ZV=�_Eo	9��o��/w.�b[��9��ܻ%��Nj���[n�t����=y
[d��^l�S!�f9`��,^�c�;�e���)q��~��O
o~����f/v]c����������6�ٞ�7'�D�#N��wK�y���������>�Kn��v
���H��m���%..�3��Q��9vLW��LW�DU]�T�T/�.�]>79�k�/H�%λM�	���IR���i���ؑ���q}�5w\
���|>�>�)�#a�
����/��ϕc\,����0 at m;}
������	������0�]c�v��ً�����L�.�W���.����
��r�^c����%�_2���o[�>v�qzb��'&X�>�u�,������섻�ߎ�_
	oǿ^|s
.�=����|�<%>`_e���-ު��y·^��_�������!�:�����>�&�JϥХ�s���h+�����KT��T�9��
7�b|~����sR�o��Nՠ��8��m���m�A�
������5�Yf���;.��޴�i��Z��YY�
|lL���^��O4�I����MӘ�������T!�b�oe�
Z�"/+��V:4�b޿C͊���U!��!��Y��@���5�
m
b�>�
��?�N,
�#�������ƞ�߄FF���1�pA��b��bL\�ĩ��Rz\}{b�A|h��\�%�{
+�_ǰ�m>s�H/8!<���C�?W����H�vߞ�ώ�oʼn9?��P�N���
A�|tm�ܫy�oo� �<;i�Y�?��g2�I�
����1�
+��+#�@6
Ox^�G����^����ᘁyN�g�%�-�H*Xa����i�f�j�s&�lr���|�$��'�~q���s
��(���
��z0͜;�
5���|lf�Xi�b
v�Q�m(��~o;���&�[�/������
+~5�o&�ӹ��V��h!Fd{5Y��|������-��
�lW��^_%!?��)�/��*��c�=v����ȓ��2��w��o
vM�3WOe�~)
+~��\o�?%V������w�����z�=m�)������Z����R`d��E�k��F>9"���=�{<�d��g
S'6c[��
��cq�_A�B�z�����>��8[9&�e&�~w�/h쀸)�+`%�#�͗:�x�~��Nw1qi�X|��gk�w���*���Ѿf\�\N����_,g�?�N�v�Ջ����?�Q�w���

�a�~���vޚ`\�cI��g~�}���\�/��_��-��?�
S0�������4��H�-s�y��R�u".����y|rLW��
~.]�����I�&r~~5�B���1��y��p
6�����OD
+|��}�$h�0�|�/�1�7I�a��q��t�1�)��5����D+�O����&��f���~���S�s���τ
:l� �͘���g�{��6%��N☿9�恅}������B)A�S�[��6^_TH�ԉ��x�</�H� �����ds���I��
��#�e�{~��Z�~fy��ɕ��q��]{<���6��g���zy��f'�ض�Y��?��~~�5vp�V��_9�,�� �bc
���8���>6a��3��]�g�Z�q�3n
��u6�_�
���{ʡ� ���޿�>]?l�s]B�X^:/�����;0�D�==�q�A���P�@|�
l�P��
�����l�qV�
�-�g��� �{���&�/.лA�gܫ����h얘8_Ӳ���Z忎�h��6w��
lBg������B9mS�_A��w�`���%x
�|�$
*v�y%��𑊷����^_#ή��
+渡�h�o�v�Lh�������8��볛pf
���ԑ?����y�”��(���y���o��ܼ�}��0Q��I�z35�+L��-8�=�q�q ��|���衹��m��6�A��"�S��G���x��[?�E�yO�@���'���8���I���&o���3�{�e�.��i�j���I{��{������Cj
�u��w��Yq��~�pa�C+�����W]�w��YJq��%���&q�V�e��5ʜM���q��t6�
�zig
Ժ��ٜ��Qq���7sT�B�Ѣ
+�oWp��ET)��|�@r�T�%����(&\���!��[h��ߚa�H���:��p�r���`�
|���@�n�G=_�`�r"�X�yG�N���		��P�������4蒢�O
f��1+pV�-�����KO?�_A�fLy�S#�(�?�Ԭ���T�����۾��];������ڽ�O���n��$�E�7S���)~�(E�CAqi�'�
�Ҡ�[D!D�Լk���3��R��t�G�*6�
A���D��R�{^Zŧ�O!Gzz:��NY����A��U	)�S��1&)�	"���n���O��X��g���A�4�HrR5OR���#7�U�@��Z#��YU��T�����
+endstream
+endobj
+1579 0 obj <<
+/D [1577 0 R /XYZ 86.4 726.045 null]
+>> endobj
+572 0 obj <<
+/D [1577 0 R /XYZ 192.312 371.339 null]
+>> endobj
+1580 0 obj <<
+/D [1577 0 R /XYZ 86.4 318.522 null]
+>> endobj
+346 0 obj <<
+/D [1577 0 R /XYZ 86.4 209.644 null]
+>> endobj
+1576 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F49 566 0 R /F16 397 0 R /F48 539 0 R /F38 453 0 R >>
+/XObject << /Im9 1570 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>> endobj
+1583 0 obj <<
+/Length 1958      
+/Filter /FlateDecode
+>>
+stream
+x��Z[w�6~ϯ�9gQt��7���.�4���n�`�!>u �����wd��v�C�=��,�7��4	�-<�?9�����BJ*�ɝ�$�^@C$�&s��C��e���џ
F��;��x���,�M���&Y-;]p
������N����N a��R\z����`oO~�0b����
<�BD�*��'?�`�(�*�USaDi>�8
]<W�s�|.
D�0��R�瘄H�HP�
^�r�B��A���
<��v�x��g�$�vd����flxѡ�4�������u�vRq�K
+����m�������W

jZw)G!��
�v���B��N���
Jc�۬%@�7Xk��\
���ǚ�f.*�sie`?
��ף�1xI�
f%=77�⻚K�
	���\Z㡁
�ػ����
+18�q)긣��1���u
WK�$qf�#%’�zg0p�
	K��N���:��&���8�-�S�=�9�q�ou�ۗ��e�C��7�Ŝ�$�"ٿ���\"�D
u��M�M���?�_A���U���N	O���|H��;�h�����
u͒����U�`�j��r~���NB�1E�
+��~�)֭�gip��A
 2�$'u����M�~l�{
�
|;1w�t���e��#n�4�r�"��_��}��k�.�p5�K��[�I��r����\,~a�8^0\1W��UV2�؉@.u	�g�5 �/o���m˒�U�h�
87���

�4^���"���m�>�&���̹S N;�����z��) 
�T!a�o�/
`Y3�
�h��ܭ�/����@/ֲ�}B�N�N��UGm>q Y��
+��I
VP�f�	���H
�����T�fE8�SY��/���ͷ�d���y��g���'�@hڲĻ
�,b
+�6wA"-���Z8� �R�
+�
+�
�ZUA/�G�ֿ�u|"@T���q���x����d�A���*�"� ښ9��V���վEq<�t_`=4��+y� � Z�5�9�-�V���{��$B�
�V��A�vn�o�;�[07��	�@��v�Zo��r�����`!�
e
�[��AG1�*��4	)D��mɲ�\��Y�_�6��4l b�g�G��zЌ��,Z��M����j:E�؎���v2z�:6�u�X�f��Z-�'� �3�1�09]q���*�=���
+u��d�>)^FӴX
Zc=��)��e�_?�aF�Tq���'A��\����_��F}�\�N�(���If>��ʚ�i��}�4�NG�c4�!�O�cR��"1
	1"���M��þ�L#�
�p�t�
���-�ZSp��%�Q��N6{�(��D.�m$���^	M�̣�wi� ��y҅�@
��Nr \8��BA��P��U 
uP
���<,?��>�� �B�rr4�EJ
�!��Cu�v���
���_(Fa	�J'�ܒ@�����E��Pn9 .�U~�[`
nUa��
��M����u�Q �l�jQB�=TX���h��%����7���-�[�כYgh��b������u�;&���֞E-��WK���=Ivr���:�mV��E���^ݠO�q�,����zw`��c
+��@�Q�K�A+��6f�>ҷw�)�|Y�[���E�Y�e���K`̤Y(�1�
�C���,���-�߼_�����&/�A�i�h
^�k�n�ky1N��Yj�]�v9O�4{^�s�T�Q���\9��I�Sc�gz��y{��N{��/�v�~0-���ubl_
�p
+���
�6xIF8���Y���{��)-����#
��v��\
	�
��n�P^"*�0/���0��|C�
�R����k�Awƒ��՝1X�
+�

�jP�J�+Bs��Mb�M�������PhR�ߺ����wy3��KoT�g)
�k̠��XiIz���
�7���S`(�Js�.OB�b^�5zxL�(��AC����ɢ���
-^-
+endstream
+endobj
+1582 0 obj <<
+/Type /Page
+/Contents 1583 0 R
+/Resources 1581 0 R
+/MediaBox [0 0 612 792]
+/Parent 1575 0 R
+>> endobj
+1584 0 obj <<
+/D [1582 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1581 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1587 0 obj <<
+/Length 2662      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�~���[��C���<i|d�#�����-�23��ǎ���
�)Q�]f�����@_7��x�:�z��"�^D"ɤw��iI��XDdH�����O�

Y*�O
��.G��`�п
�̏C�O��} ����r��b�z�=ܿ���`�4��Y2�������?N(�$�h�Yͥ7]���{�����^@�H{?̸��È0h-��ɿO����"�wW$#J��vE翌�n���9P��Vf4���,BBC]�b�+
	�f|y=��džo5�/��8%"��Œ���Z�����%^n�}��E�#Ao(a�􆔒H8�g�S\.�
��s��ڌ
�a�\����?���H\��S
�S�Wd�|�d��
Y-^݀'���c�.f�jn{�U�&[ϳx��)&��qa�IX�p�;„q$
j�
�i�Х"\~J<�QK�I'������`s0�7#em��\�r(��E�%ʇ~�؎2O2ە��t�?Jh�Y�����B�������F��S
ݔn�lV;
�u�M+��
+���v^�8�Ŧ,���2�!��Zg��fi�A� "B"��ԕ��Y/�}�qId��%�������q�� `�ƴ�2X�+��6 |����p-�GC�}��l��:+��źb���@��b��Zo�A �Wm!�L2MQ
�j�V���a��A��f�
�K=�\p��3v�`��E��G�6[���Q/l��5zޖ�����}���D�V"!V�#�szX��"��Jy^f�
��|���¶���ֵ�t1�(@wY����̴R�D��m�ΓUL�>8�iTf�*���bm�X��xOb_ͬ�N�9����u ��(h�f��a����$��٤ױja�~g�c>���S���]��*}.ҭ<����E�4|��t���?2n�C�l4�f�Ik�7��фx�m�<!��y�P3o}�+l����
�Q�ƏE���Y�䈺ւ*��Y�ʰ�fa�ZU�
��Z��C�!DՒ�~XC퀊�0T
�bZK?�� �*�<��W*Sb�0�����

+q�
+�
�Bk�A
�E�v�$Ұ�!��^�f�'dH4��!�CR �
AJHc�b$tk�W�<�hB�
l'Ѽ����`�U^RY5��
��.�
��
o���Gzp�i�2Ͼ,l����h�G�U��
��l'ɹ��iQ��9`�e`�
 �/��>��c�G\�O�T{]
+-H��
�&�Q%��\��ms � �
�YbAjHߵh>'¨-�ӫѷ��
+5d��L�X�)���cܐRB�e�JC��{a�)�`�-Ʒw�����
��wB�Dhކ���+Kwg=�	�$ 7
���PIB
+�(H���^ ����
+��d�z�� v���x5<�]y�i�*��nf�8����Q�1`!�b��W��a�q%I�!5���Kj�&o2����%�Ź��C^<����t�pvޝ?�z�
���d����ݱ��vc�� ��x�O&��ߖ�@yI<K����AMD�7H�1M���>4��C�˯w��_?Z�y�X�ٴyk3�ף�Q��Ҷd��:�0���x��~�3r	����T �G<:<��8��
��)�ۗ��)�dL�>䄤(�����wA�za�9K(ڌ{��I��dg��ޭ7�wy��Џ�B0�{�b���nM|�m��&���
Z��k�x7�v�e<�
�~�YH!1a���))1�0�AR����d
o�)������=¡J;���\���6��-	��V�+͙��yvu
|c����N�N��s�u�I�q��rW$���� �ŷtδ����C�H*�j�!/��[��I��
�NժR5�l�
�.⪔d��d
L
�-G���#�-j�"����7�*���'3�U
��'���83����C7���U��Ҙ}���Wc!eמ��~���5>��j�x��$'R~J����H���
�
5�
+C�
c���m�*P�Ԫ�<6YZ�y���̺.B�T$$Z��b�-�Z
Ý`u��sfru{y82 at G%z�ې���m8���m򯃰y�q¬�#���,Y��r#�ª?��G5L
q�܃����������)Pm(xE�x�>�Yn��ñ"�Uñ��CXJT� l�"���E�@I9�{��7Cn�D,��mf�byzsu5�>��.sRV<��/+Wֈ��岎�u��I�
+�=A�H찳
+���+�W��������xȓŽ(�
6�UK<��Z��c��PZۦ]��q�XYpRX`�`�	���wr #��ٯ9�j�]?�v�H�@��ܠ��
��u>Da�,��~2~����%�i�#��`�v
+��V���85��}|(�EZ�s*�a������!�OWf�K<�W�q��8���K���k،��s}���ٶ��3`��h�cY fw��tQB���aTG��
+�� ��fy���d7���=?Yz;d8QA7��f���0�� �Y��ܒ�`�S\�F<ڝ�(��E՝ 
�����6�[A�
,WW`쩾#{��dMl]�S�
v�R)L����?��`�#� rGj���
 j�K
@bK[,a��ӻ���ɾ�z��J'�ґˢ4���F���
���<>�I�li��2�[Z�!aM9�o���Kǝ�����06�TVjN� �	;��-�
�%+<�t���Y�¤�joȾ
+endstream
+endobj
+1586 0 obj <<
+/Type /Page
+/Contents 1587 0 R
+/Resources 1585 0 R
+/MediaBox [0 0 612 792]
+/Parent 1575 0 R
+>> endobj
+1588 0 obj <<
+/D [1586 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1585 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1591 0 obj <<
+/Length 1691      
+/Filter /FlateDecode
+>>
+stream
+x��Y[o�H~�W�����an�x*u%JLK(
Dj�V�c��*ֆ����Ϙ`p�(޾��x|n�w.c�uga�]����1גH�Եf���"n	*�ˈ5�[_�"���
?���Q�&Ȣ�Z�v�d�`�6�*i���\ڄ��ه�?k�� �[�� ��V�l|���9<�`aĤg���--�$�p����?���
�ޡ��$�W�q쏆�c
��2�̄s���vF
+%� VJz�Q������{�o11���|{
Ș�'��"R����V!������Z/�ҍl���\�X-B�t���6�.6��-�AH��o�f��7͚ �6M�֕�^� _�]�Z��I�}ü�a�. �I���Tv��U�P�[�r$�
�I�0�-��i�
+. at A \\ 	d|	\"OD.J0�
��	��>Dh�l{
+7a	2o2M���]5~Y��e�i-Q�+����;���+;
9��E�$�nY�Ur+��+�VcE� x��ڬ�*.Է�Q0�
ݿb�Qv���{{
�v�
�(a���vҙ|~�:����(���	��M��ٳQ)�c�~�w�*�C��v�xy��/Uco�S�eVQ��j��K�I�
�lU��
U��gW���zt��
�UPy�&3��e�Q���������������h9�
���i�Y�#���.q�D�{�4P1�9��ȶ�<�޸�
+�������Ai��L+
+�� <_m�/fO'wy4t̎��D�
��)C�|�S���ݺ��c2�
�*�c
���{xQ&sQ���L�����=�>��� ��]�EғeJU��P(D��	�*8�z{~ī*.��:���(Q��AppT֢j�
-����^5ݚ�7�$���"_��9��RA�W�jT1
��U�qm�4��D���?�q�W��LN2�H�8�pP��Q����(J�N9ujP\Pg_�/��y/.�ξu��+�{ňu��[������
�Z�(���d���\	֫E���������S-�:Pui1�f
�}�7��h�O�|�R�@��;����$BD�|���Ӫ�
mH�_Xv�Í�E�(}��I��H��RԢ������ag��
<��uf ���(��ǚ�m�a^.�v٭�(�N��,�'G�
��)����4���}nC
����U���n���kpd��.X�M–=T�q4l����~�X��S9͒;��NT��g�X�u3�{�6
$Z��3��m�3�ar�/�N�8���;'��P��<�@Jp�K/
�Վ���s��0$�ٷUӲ��
�
��P�ծ��\?�5=���z���r
/�4��;N�����2�`�Ļ/I�~
�0̙�
%�Bd	�{rn�8��X at 78���A��  L%/y�0�m&��g�]�Vׂ.��s�n����
�K.�}|���?��6
M6
p��bT��ka1��q���X
E��"X���2j/� .[���#�A��08�.��''o(�Lp�V����-�9\?"}�d����ǭ�����?��:��w8�����T���!�P���3
��l���%���E*���w}>{u�wz�a��ٷ��[�Fgi��Q��U�b.����O	8�5��+���+1=zgř�
�YRY<�sL\��x���	��
ڹ��v�y��㗼����	8�Le��U�B
+endstream
+endobj
+1590 0 obj <<
+/Type /Page
+/Contents 1591 0 R
+/Resources 1589 0 R
+/MediaBox [0 0 612 792]
+/Parent 1575 0 R
+>> endobj
+1592 0 obj <<
+/D [1590 0 R /XYZ 86.4 726.045 null]
+>> endobj
+350 0 obj <<
+/D [1590 0 R /XYZ 86.4 386.427 null]
+>> endobj
+1589 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R /F38 453 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1595 0 obj <<
+/Length 3796      
+/Filter /FlateDecode
+>>
+stream
+xڵ[ks�6��_���ݑg"�x��NwFIܭ['ucg��v�CK��
%�$��~�@J��G���! .���
$���?O^ߜ�}'� f�fps7�
S�P��H>��~r��D C=���������t$#9�:�b����pB�O�F
���
^,�:��Ί���UY�!��t�,����pr~s��	%��7;k)3��O~�w0�b�A�d


��@ɘ	������'��I��,�Z�G11g<4�(cƙ�\��Nc5,�O��
d�p�Y=s��K���$w�.��2)��"�Ͼ�֘
F<b��-3K�
��Q!XH̵s��b�%y�b�0�t3�z��`���p�pX'�).*�
������M)
��~�.\g�Hn���e�<�����
���
p�~�n�<������,���g�O��8�#��g����*򥥁��tY^��Vû"�
Z��qZ�aR������kQ�`��L��2��vv� ��
Ī���Я�e���S�#)�
\J��p��f)5�g~�j��V-J̮��=\�y�z��S|#��!)I���U
|�ٯqn+�
c�b°H{Kz���#��
�q9�:��pLV��G7�,�n��%�����_B����K�ڴF�D>m@}vj��
_S�Б��S�WĞpX����V��� f��>c��̴�����q�wY7&���V�����X�}����ǯ/ϟ�G*ƅj�sF�
y~K����?_�L��`n��;��,u��fe:�����[�%��#g at t�ШMUs��^KѰbS$�����^@[�ب+o
���5��z$��mZɽ�Z1��@ÅB�/�*"a�
+�5\^��0��kϾ*bZ���93���W��KV(���u��sV��i:f~>��+#ۂ�(.�o�%���t3
�<wRq �L�O�A�]��EJr�Ϟ�Pl=�!B�V/�ך	#�RAC���y�����@��4�p�J&��$'�?��y唵�i�Ǭ��Y���e��N��A����g�Lû�5Ӱ��<f��7���E��^�Z�����xe1MJ?�z�@�����b�4N����4!��g��Ο��:�R�r�����8K�
"�;��`Ej%�ޢ��UALGC�X�E
+"8�补�:HAd��
+��as�,\8�uQ��pV!������4��M�M�E|�|#1�M�_�6�X
4`���9���6��xL�W����<�����\�>,�7<z������?.�_ߌ//���p���/ߞ� f��O��w�#

���/�wW��׫��v�|�:Tn�4�V��bᇤ��A!�<yH&�XU��3��
+�m�OqUN�럵2�Y�
f%�̥�s����
��0������J���H�NF�o1�
�E�BE;��s=�_���7 r�*����J�i�o��e��O-�, }��a�v!
+U6.e�wĘ}Ws�^��m]����o�`�0����A��js!��6�E������	7�?��o����2��ؤJY�̗
���4��A
���lV��l�zV��$W�1�V �R��y��~�;8�;&J��4�����E�.O7Բ���)�KN�����5\�6�k��ipX+��u��B�=�2� �_�B��MK��֒�"�^8
�+��N7vr�]E;���i�1���o2����ˏoϟo��cc�t*F�����Ň眃�J��l�����aˀ�5�l1ɗӴ�V@���(�E�{�y7��l�փ
����"M�j�&үؒ )��0�ޗ(6;
�v)�˾�HX��(G�nn�+O�\9���#%�{��#C���bŻ)�J�pe�]T2Z��J��	U( ~>�u?�a{j�i�P�f�>*„H̗�Ee�g~M_:
+}鈺��
���h׾h$#Hʴ0t��'�U�d�R�Cf�y�Lj
n%�]�N�����=�
G5LI�)��C�@ c��W�f�/A��P
+�R��3���8<��
+ܓzs�~3q�n��X�6P������H1dG!<����o�X���>���
�J�Ǡ]�<:P�""�u5��H�Ǘ���.{M�5
D�@��c��?�F�Bn�:���;H��!���ь�?�VO�I+���t��h�u�T`
�Qܤ$���;i(����^/�
YZ�
B
+
+E�YZjO
�r�T� ���R�I��� Mn�/z~�5R\8�m���u2�#�L�E�`�5�5z7�"��`
+��-����,�~�,�
+�MblV�1�����k�E^$S?dsfj��/
@�t1�=����<}r
�� ��
�.�,|��@�LX���
�:��:ܑWS�*Н�zRNGyz�L�X~�����O��:פ�l���
Ƞg������%K���
b%�����F��sJ�
"4�~�S
+`��g�\�����/��8ˊW;�)N�^��Xe��: ��J�)(z�E��
��:p�
w�3 b5�.�P �� 4|�z�+���GjU����V�M6]�P��b������ٯ
�)"�P#Z�|������G�:���.y��ܫ�P
��
*��?�E���A�A
~���
�,�Fu'#��Nw��/�p�2�u=Z*0fO1��ue�Ҳps�m�s��Y�W=%5dƲ�
�?�ٷ�O���M��Z�M�1IY�<���^����s�̞�X��_9J�����YioT��]���.dP_�i0Xɏ�hX��}�ĭ��|�F���ݦgq��gJ�mE�D
�+�ı��3Z��Y
�Oϐ� �
��}j��&��&#lt1�R�
+�s�z�V1�������T����}@B��{��ۇ=J	Ր���.e
9SH	����/�?@�h�R�����?����As�hi��/��	C���׫��G
bU	��<���I�������s�o����Reӑ\�"�U=+�d�	c�7ol����`���!]���Y�C�b�!��V2���m�o�1�Gc�1�Wd1]uY"]��]y˩\�{�F�[��у��

�C���Y]vWE�\�D
��� OW�i�Ǜ�>�?��
�y��.nҤa�|-Q��
+��wE�D����˓<Iz�f�X�/
\	觫��N�]
t^��U@����h�])���
z��>5�Vok����� ��1 Bʝ�� +U�oy�1��vAKe/ÚP��^�P6Fχ�Wi��
�<�{B����,r-լX�V���k�Xo
��]Vi���}�ټ"���A4�N��뭻�
�=.�?�1
���� ��C�_����
gs1x[��?�C#��h�Ԗ��� ����R������'�#
h?
M�^�[���zu�zMܬ��![����g\����tU������T7�sOu��×7
�|R�d�ji]M��
�\�.�
+z�a���`� ��o�g��#��ޖ�b� uHP�`k�f�ԟ6OAE��w4�g�ʋ�T(�d�@�A�C��7=>�^"�`!{�"�
K��.e��1;\Z���ے�U}X�������"��2 at Z�t^��i�[cB��q���	tg��|E�ϟm���a!З6<�,P�����Y��+��N[Cg�
W�kE~���S�y	����b�
eR�zb����a
�0_�M �ڥ���]��!���K�L��ml|��ȶ�uOi��\j{�حQ��;	8Y�r��.If��$�
�����
 J�s-B�Ϥ�_J��� I#6HRc3H�!$�U7�]څ�Kۓ���h6[O���,x���n���q[D��5�{_P������<o�jY�'���ٌ83�&�=�(�iR�(�A(͗y�ݗ�t4O�Y1틞H��}�}�
c�/
.
+endstream
+endobj
+1594 0 obj <<
+/Type /Page
+/Contents 1595 0 R
+/Resources 1593 0 R
+/MediaBox [0 0 612 792]
+/Parent 1575 0 R
+>> endobj
+1596 0 obj <<
+/D [1594 0 R /XYZ 86.4 726.045 null]
+>> endobj
+354 0 obj <<
+/D [1594 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1597 0 obj <<
+/D [1594 0 R /XYZ 86.4 613.163 null]
+>> endobj
+1598 0 obj <<
+/D [1594 0 R /XYZ 86.4 415.436 null]
+>> endobj
+1599 0 obj <<
+/D [1594 0 R /XYZ 86.4 298.129 null]
+>> endobj
+1600 0 obj <<
+/D [1594 0 R /XYZ 86.4 156.732 null]
+>> endobj
+1601 0 obj <<
+/D [1594 0 R /XYZ 86.4 75.291 null]
+>> endobj
+1593 0 obj <<
+/Font << /F36 408 0 R /F38 453 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F14 627 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1604 0 obj <<
+/Length 3132      
+/Filter /FlateDecode
+>>
+stream
+xڭZIw�F��W��g����dYv��eG�3��� ���,�<�~��
�)y��h4����
+�gw3�������w2��,D0���ES�P�,�|v�ξx�L�2�ޛ6_�yq�O�K���/ۢ���;}L֛�|��lνz�2��E<������룿�8��g�#�Y���r}��O�›_f>�q4{0��3%c&`��]
�z�Y�;�1g<
���-�<Y�H���hpVih
�s�I���
0
yYV�c��M���!o�iu?��m@�*Ý��g���꼴?�l�������J:���*s�DpO���/��{u��jȩ ��B�ӟ��ty��J�𘤗�>�Mɸ��6�G���r��Ӌ�7移j��	s�9Ք�s�B.�#/v/�>S�N�"�L+c�H��l��upP)���a<
˜)��p6ࡹI"zvqr���Y-��� �����۳�	
�,���

!���gS�2.���b�j�l²��s�M�Ώ����尐��~^�M�Z%
��R(�)�
�����X@���K����\1_�?��!
+W�b*�#�����<��c����R� �Z(��i;/�E�Ir��"v��cgթp��L�O��>D��x!�~K����qhkFׂ�`3�A�F��-dȂA5�\�a9	�-'���	<P9�&�?��”V6A%K�
W�W|�:�!���`��}���rեy"��D$���oZS)p�*
Ih��������ٺMV�G��$u���m��eXI"��.AN�|δ˄�nP�d4R(,��F�T��W�hX�U�$�H�a���i������O�vCC��b���!��ʑ�#F��J�ʑ�Zӱ�
+���j“"(A*�#DP d��gW����2�R=UQy$�_QY�jC�f��~����9�ؗ�э��lf��mY�����z��ʅ�;�0��C�
l'{�
�@2� �F��̳(ꑹG�|�*�� �U>��ޢ�����]#҉�Ј�œ�W��H�96��ˊ
2ȔjRq&��G�ś�s�]5k
�]���9ٲ,��su�V�
�/<�Y��/
�y`O�{��v]�!��|5�<C和!��D1�%*
�y��h_.�G��i��O:Ye�Y�ˬ{�)(
嵘�H��
������t��,�#�ʱRΝ��Y��B�e�ej(�D�S)�����@H��9�XV�P���8�ϱ������P�*���4G/ 
풍��ϴr��:1Ȃ(a	
+��
��4`H���m����E�}�DR���+��#=����a�G�Կ�9Q�G����c���\f�$?�^V��ٸ
���4��V������Wc@
+�%���һ���v�Y��T<a��|��u�Ø
D�F�QP'H�#�Tm1� ����b	
2��.D*�c��c���R���K���6�S!>ʖm��¨)}�$�	�Q2$W���
+I�
+�O^l]j�Y�v4��XM`��NJH�*[6e�
-�-z�QN P!t5{9�
��/�'���0����� ��!JX(h��bpAE�?�QVć�r�*��)Rڽ�ț�D
+&z������fl�1�
1�i�
1h$�\�
�	�2�Ei\�����CS`gP	�Ѹ$
��i���/�H�!#�E�UN�[
���M����:��"vp�����.���
a�x<�8@�C��ܠ!t���a
�nW����^�6����m1jB
�~��[��M&{�c�
�+��~��
;H�t��2�g�A��;Ā���[�M�R��s��
�fȌq%�dg&��u�,�̏����1��x}��p�R�ƥbA�Q��5Фʐn�W��!�2uV�Y��(5]���_�Xt6�u��Mjp��6�ya_$��h {�f��ِ4)��j�ˮ�
�f �鼲�[6fJ��d�d͒u�ٍJt�"(D1T,D��,2ﺿf�;n7^����m	8�W�jAW-��h�=;�A�	D��:H;u8qH��Mn�$���(�V
7�0���;/�r.��p`0!{��v�S� [
8dI[.T𡥩9��
��A=����F��O;{`����i��Z(�4`�,�a 
&A�{�B�V<�^��8�%:�c�7��uK�RH�x8v׫�M����,lq�H4悭��6�)����#=���@��쭳�'�݇�o��"�~к
8��A�{����c [...]
!�?�v '&r�9	Rg�?�Fu�Q

+V�!�yO�b1�DNr��N?�3��5��
��\�m[&�O�+7M7U�(��eg�rB!c�~�
a���4��դ4�������6�-�^O�����;�̏�
+6=�q�	�~6�˨�K����‡0¹e�X�W����>3%�+t�T��9���
f�X���4@��
��.��|$ŝ�����&>E?H��B��WM��(
O�Ɵ>�=ȸx���x
+s��Jh�����Ch�1�O����~?���@
�(O��`XX

�+�g���:Wi�`�rc�i��o��yEh�I{gO����lm��p�ڊV=�o�}u�}\�~����C+�v5p+��H�+ֵ�<�υ�)�s
�a�/r_(�Z�����7����2���Ma
+��_�Z��N����0%��X��/& �$UPb�(
+�Z%
�Z%
�p.�?�z@�	���=�F
)~���ɖ�p�
g� ��'�
��4S��\x�
���R�
�H�pO�W���JZvՠ'z0p"�Y��) g���۲���M
+�#��%x7��ݴ���]�Y���	_��u%t��Ƌ|_
�\;���(y��-�jo���>�n
{�/WS�#T��$M�:1
+�x��W$�z<������AȮ�)l��g�Ӳ�!�p�	�
+�
��DT׏㿛����zR�V�d�8=8C�5L�<
�q:��ߺNŎ��Si�<f�	
�4�������%Z��
C�‘�����
�{� L�b1~�~�����H_4P�
E
Cш!z�9]Ǟ)X�o�9{hڮ
�|���7��9Cb�^��
�H�bi_�/�xn �{� 
��/$��(W�^
+endstream
+endobj
+1603 0 obj <<
+/Type /Page
+/Contents 1604 0 R
+/Resources 1602 0 R
+/MediaBox [0 0 612 792]
+/Parent 1618 0 R
+>> endobj
+1605 0 obj <<
+/D [1603 0 R /XYZ 86.4 726.045 null]
+>> endobj
+358 0 obj <<
+/D [1603 0 R /XYZ 86.4 646.538 null]
+>> endobj
+362 0 obj <<
+/D [1603 0 R /XYZ 86.4 428.312 null]
+>> endobj
+1606 0 obj <<
+/D [1603 0 R /XYZ 86.4 369.231 null]
+>> endobj
+1607 0 obj <<
+/D [1603 0 R /XYZ 86.4 345.243 null]
+>> endobj
+1608 0 obj <<
+/D [1603 0 R /XYZ 86.4 322.362 null]
+>> endobj
+1609 0 obj <<
+/D [1603 0 R /XYZ 86.4 298.928 null]
+>> endobj
+1610 0 obj <<
+/D [1603 0 R /XYZ 86.4 272.07 null]
+>> endobj
+1611 0 obj <<
+/D [1603 0 R /XYZ 86.4 254.375 null]
+>> endobj
+1612 0 obj <<
+/D [1603 0 R /XYZ 86.4 236.681 null]
+>> endobj
+1613 0 obj <<
+/D [1603 0 R /XYZ 86.4 218.986 null]
+>> endobj
+1614 0 obj <<
+/D [1603 0 R /XYZ 86.4 201.291 null]
+>> endobj
+1615 0 obj <<
+/D [1603 0 R /XYZ 86.4 180.727 null]
+>> endobj
+1616 0 obj <<
+/D [1603 0 R /XYZ 86.4 156.913 null]
+>> endobj
+1617 0 obj <<
+/D [1603 0 R /XYZ 86.4 136.728 null]
+>> endobj
+1602 0 obj <<
+/Font << /F36 408 0 R /F16 397 0 R /F8 409 0 R /F48 539 0 R /F38 453 0 R /F49 566 0 R >>
+/XObject << /Im2 656 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1623 0 obj <<
+/Length 1707      
+/Filter /FlateDecode
+>>
+stream
+xڭX�n�F}�W� Xk����M��i��H�@�+�E�$�������-:6�<i/ܝ�33gfx[/�^�~]�.�y�%$�X�-7����b���So�y�|ʃ��<�ۏ�~��zs;_p���s��t���Z���#�[e7oʦM�"m��+�_W0��c�柗�g/��f�
�$�D��[�g�>^���^@x"��滽'xBF�w;�s�,�
�����D	%4��)WD@]��N=�A%V�:�s��iZ�u������>ݩ4S�
�
PQ�l���'(ނQ"���c��[
��ow .�o�/s&}eO�S'İ0�Ŝn�e��ńJ���1/2+��oZ�����H�^����p�~/����
H
�E���e��>���(�0�k��!��xh���)�
�a��G�^�fhs�HN�0d��85������&� Y���^��8�����v������*�@��r�r]
3��:��H���d�\��N��y��+�ѱ����^��D���ph)IB [...]
5HV� "���Aq?��C�s��<��[w���ii�VfK�U����ܚ���J/��/#�m���5,����[��d����ܔ��BM@"1}��x{���s�KʘAp����&>䲧MC�c�H�&�J�yw��z�fB��$�)RE��c��?��������{.�I�h��vW
�;=��%,���	>�k�䙲G
�m آ�1���H����	��&bG��|*b@؇��&�����4�F��j`*Ltޛ�7��j\U�yUo�2�W�
+��E(���l�+�:c��c�pD
����O�1_��?q�e�q���E&�㧞��zZ���S�a�+�z��{=�A�w�j�7�׆��n�6�V店o��kt27���D��.c>��y��wW��*�[

+��9�s����<g���.q�ٱ�֪�q�'����pԨ����r���{sk����	��:�>�HSM�+I
�5�V>�����*|���j��
pb�E���&�<>բ$���ug`��������dL�
ۿ�e��*4�pD?p�
]�	�
��e�?K�Z�����_���*��|O4@
�1��������nqJ�Dˑ��nsBc�C�}w)&*�����(
�A _�@��^��cc��֡��u���R�`�e��%d>X4o�{;��7�Rp;��	۹�F�g�]M��f��tIJ�խ
�x��

�7u�w�E�
0��2�>�
�
+���?���q3�Bi�t�ު����E���[4��SO�
',����Dg�={�{�Z�\4�Qy�1(MUؤ�mM
i�\3	����X�P�l�i��
����he��t}We�\�6 f�
�2� ���	
�Y�xj&�t� �+���>\~�Ri&��x��d*�ǖ�w�V�'X
!Gϴ-SD� �G):�s�t
|u�I}�o%���!`JV
�V�j]�X����DںBJP����hҍr��>β�Λ�T��{h
+�Ku,�tx]�7e�6�œ��CO E���Pn9ߌ
���+����އ�Z�<�B4�NԊP�O�S�14�B���~ğ"
+�B�?��'�� �>�l-�]!B��j�t���(, at r�jMy1�����p��YU @C�j2�O@����B
+endstream
+endobj
+1622 0 obj <<
+/Type /Page
+/Contents 1623 0 R
+/Resources 1621 0 R
+/MediaBox [0 0 612 792]
+/Parent 1618 0 R
+/Annots [ 1619 0 R 1620 0 R ]
+>> endobj
+1619 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.922 578.75 484.135 589.598]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.1) >>
+>> endobj
+1620 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.616 578.75 523.829 589.598]
+/Subtype /Link
+/A << /S /GoTo /D (table.A.2) >>
+>> endobj
+1624 0 obj <<
+/D [1622 0 R /XYZ 86.4 726.045 null]
+>> endobj
+366 0 obj <<
+/D [1622 0 R /XYZ 86.4 701.138 null]
+>> endobj
+1621 0 obj <<
+/Font << /F36 408 0 R /F38 453 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1627 0 obj <<
+/Length 3256      
+/Filter /FlateDecode
+>>
+stream
+xڭ]Ms���W�h
��#��*�d+�T|�݃l�c�ȶV�l��%@M� 	6.#k�|x�{��������oW����I�U`�J��^y����������/�f��Vyu�����z���כ��_m_�����p��~��^_o�������3]��Y?m�ǟ�Bo�M�Kk��7���|����߯�+���]=�]��_=�����L��Ow��J��$��]���_W�Ա�Ϯ�
�Sr�W+k9
\
�z;�� M����O���O��
��=��O����x!nB&DH��Ri��>��:�K
�ļ?(��V�(��"6�W
-�qz
�,s��ư7A3

@AO��.���
4����)��Y<�"x�����g
�/-Kc�E�2�Ň~��w믍���K�;8dʙ1�F��
g�$�e�b������0�5���bi���ܧ��eF��>�G�]��@A��D�

?�c￱��[)��CI;p�	�FI;
��>�����
>6 Vv9�^ɡ�1ki� �
V�Q6�LQo0�O7�&��|��0xIBȩ�ӂ
"KX�Q����2\��p_̌
4�
���#��y����PY�U�
+2�
*0����N#h|r�	� 2�`A�HN��(:�ǔ�6Z�m��L����^� b���5�"�I��t����1:����(z&Wy�
\Oq"����*O9�>~���o�+��i�~�t��"T���'
�y���QO�L����S��j���

����fǟY�Z
+ح����F/ih
�Y�j�����nA\���k0����~��z\>t��yU| ���72�oo�K���\ڰ�h� ��U�Q6��e���6'�L`��=�>~;t�
+�nAC&���#�������&g��|p��E��Ϊ�(;K���.X%�}�6	[����h,%��2�R6VoPv�S!� )2�s���e�򳑆I���tϟ�g&�x���TV��^�B�����=l� x�콰�C��^�3��
���7�}}�y�1��ў�x��K�Q����G��g�-
�$�@ã=��m�4蒑ɫ%ӲA��� �߫��n݈k6��P/�9��m0
����_=Dy�ŤY��ЀD�-��E}��;�}(wq&aIQ������}>�x5�(�"S@���	

A�4�
m�N�	��mnxwc��z��n7�t��׃S7>#]4h:O ��t1=�s�EOl4�v����FA�f�����N�t�;�<ث�LQ��/���L�cΒX�"'�Nfh}��sH���aq��>01~Rff���ɾIA�%�"%
+��E��
���(���F�D�k�c�yەSIJ����Ao:�7=+E��)�/3�x�#0��Y�v
��,!=��We	z�R����Ա�DQ��;%�����A�Q
Q�$��(� U�I��I,���k�+0쮱tA�5;�3o$-_��
m�/�d�������"_�w�/{�塜1��xp2��d
z�y
+��e����1zB���i��E`Ə?THÌ�{��w*�
ܩ��^��je}��!�s���%�F5Dyz��)Ò\A'�'
+&�<W���-r擭5�(�"[�����D!5S>4Iұ�6�a����Ӧ
���<�H��Mo:�7=/`��Y8�"`_����)O��P
W��FC�q�[���ɡw���?cA�Z�A/��O�h�H;��!,K���M琧��W��Bܗ�['�
�j���8vVҎ1�,<bʯo���A��Ι��a�@dͫ1ʚs͸53D��0�8bH�y����9���-{�L.{
��w
+�"��r*~Jҁ,
+D�\=F�r
+X�M慎�����d�y`��[�7:��7Lm�h0E�d�X����F��F��(�sX�b[�P�El뱁5ڷQ=	#���0A

��g5FYO뙤�	*4�g.�����B,�dj9n��}��uA��2#�5��A��.��(����Tk��⦌n50�ÏSM{����|��Kפ���qZ
!@du�1��jX�@S0��-��l��mw*\���ъ�-��>��s���٤gn�|֤��l�e��ȊJ �(��l�������Aw�\G�%v�#v#��v�ïI�MG�;�NL�sO�� �MW�Q6���
1��qM"
f�bv�n��bqki�#�˦�;z�İl:���t�He@q��>��qy�P޹]��Pٳ�􌍀M�y�����R7��2�g�n�*����	(سz����V]�arCx�F=D�f2XƗ��l�!�
s����� ��j꺡�v�kLZ��d|�Ԛ
�
+;E��?��;�Dֽ����L3K���Ck��P� �
i����|�5ve9'��L/�
ӛWe��lg����"ۮ�l;'��T��2����\gW���'��ţǘ������J;E�d6c"h1� ��V�Q6|JN�q��y���L��)c��/vZZ� @dE�1ʊjX��@U4���M��s��+-� �y�L/GLo��NQ:�MI���7D�[5F�o
+�AS�(:�~�|��M�JΜ!U�(Y�j����̗"�@1ʷ��9W�%�<t���p�g7Q{�H�
�=s�T{�@d�Uc�
'��'@1�I@�|P�]:n.���-T؎�1ۮ�qV
�"��|"X�i��)�|�e��s_�
�x�6�v���K�5���/��o^
�"92�%��~r�un
^ $O����S�6=T �5=�ߠ�4WzMϪ��;�kQ��:��'�`ި��������ޤ����<_vg�@~���^���g ��f�$�j��p��%'�p�sq����R߸g����n(���|S�S�V��<Ӟ�3���|c'��'}C�ȺWc�u��	kf	?�~�̩#���˗��h
��ē#

tt��������0�y{���⻦����l�j���⻷���*0�l~r
�s�3��<Ƒ�e�!rS{���,Ui��)�l�e�i�����6@ѦI��|P�Y	JN%��~��&*��������
�@d�Uc��&a�
�or����SWa��l�WH�
��G���Vc���|��x"&_џ�/�s�0�@	'dv9���MT�)R'�q�<���p�e���k�D���M
+�+��d�rˑ�e���ͪ.S$?><�B�]5D�u��;�t bU� ����?��
�=G��,��M�.z��'�9�<�eB�Z5D�k>��N
p b]�����=
�V#�KV뱛��A���7[�
A�$�?�h�
+endstream
+endobj
+1626 0 obj <<
+/Type /Page
+/Contents 1627 0 R
+/Resources 1625 0 R
+/MediaBox [0 0 612 792]
+/Parent 1618 0 R
+>> endobj
+1628 0 obj <<
+/D [1626 0 R /XYZ 86.4 726.045 null]
+>> endobj
+549 0 obj <<
+/D [1626 0 R /XYZ 255.116 672.857 null]
+>> endobj
+1625 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1631 0 obj <<
+/Length 1939      
+/Filter /FlateDecode
+>>
+stream
+xڭ�Ms�6���<J� ���ӦM&�i'�)Ɂ��D�Q${����
�	��dY�]�>\K�7_��1��jv�L�7�4W��3L5Vzf at 4W���\�\\HV�?���o��|��� � ���B�o�O�F�ۯ������ͦ}X���Q�w?�߬����������W��3���F˚9e���٧/�Y�_�7��w��qw��$~�4g���ӕ��<\�K.L8τ�F�f���ڮ�j{����a�α˷"����	���9������SJ��m�׻v�^���������b���.ç�q�g.�&���5���I7`��8D,\^/rsR6�g�8<P��61|"�����k��qu/`Bq�P�
"~��z��
-/�.�c�k��S���o�CL�
���	LKe��o	Ha91�ѨR��3���;S�Ҷ7L�ƻeGB�OCd�	�/!֖)��!�KP�f�������N.��
�*�Q�Y���
sҝu�;�8w�p���4G�5�7 �J��1�������o��VH�@
/;$�-.
h~H-�8
�q ��ξ�'~�m7�D�(J"�`P��1`�h�\�kds��X������g
��n4�RҜd
 =���nu��!��W�����ش���{,?	� j#h 4"H�y��`R�R�p�Rv
+�R����~u��p(��E�(��W�g	�d?d4��X���j�<A�����h�')E�����=!��iFw#"���}�x� J�A���DЈUk�	�%. at q
��&�A����w�n��m
�s��d!dR	f=�4b&�5��
78Y�I
��$� ��߮7���KJًX
+�^|�۝E�������)b1 hD��5�.q
Y���&@(���^����HZH] ٗRߗ�۟#(Q0(�N�9MC��Q��ȣ$q�h���6VL�Rj��H�r�[�M!%�I
+�3�vcǠ9A�Q���z��}���J�C햞�~��#s��~c7����x�v?�pď��A�:*�I Z3�HYZW�^#Kx���W4�&p"p�s����!����ڸ�o��Ĝq0�u� ƹ<�e��GJf ��FҖ=���j�|>�f���|��
�]�q��].��[~n�)�uFdG"F�#eM=&��CۆQ4"L�y�,0��
&
�����rl�)'TKd?"K�c�=�"m�ĒDЈUk�)2��ù�"
��$%)����C4ʞldG"F�##�=�"�>�i4"E�y�.o�,��k5I-J-׵�Hy��M��Ċ@Ј�����p��ly.q�v�T��rl�i�e��G,}?FZ|$FR�
�Lj�1���c$q�%�;Fb
+�R�'M>`�`"{a�{3��#�p�]$h4�^"�T+�g	c��)g	�k�`)�\��D?I���3�ҏ�C+l�L���s}���ɷ�^iv�	��-h�M`:"��.j�u3 at Nq�p �CM>�����
+q����:VH��p��w�O�q�\a}��ბ�ƣ�H�F_�;R���
�Z$�k�N�D�zN
sy���n���;�fi7���N��q���|kI�����/��� hļVk�����2��11]�q���p����[nK��O�Dv&�:S֚$�2��$ǡ"hD��5�PͤvuP�
E:z
�J���$H�L�}�L����(I$��g�x
��i���Ӥ��,Q8G�IJTj��M)�(⑝�8�Bq�UI"!��Y�Yh�F��Z#O�����u4�
�&�M���v%)!��?�O&S4b>�5���[���'��~��Z�-K0��8�}�š��Hے�B�I s�c���S�F
'��I�,ݑ,0S�Z?i]J+u1Td�"T}�Fۗ$$V\`.h�)�j�<V�`�*����R�R��.��BcE�(b�z��ގ+
+	U�W
������CdNj
+endstream
+endobj
+1630 0 obj <<
+/Type /Page
+/Contents 1631 0 R
+/Resources 1629 0 R
+/MediaBox [0 0 612 792]
+/Parent 1618 0 R
+>> endobj
+1632 0 obj <<
+/D [1630 0 R /XYZ 86.4 726.045 null]
+>> endobj
+550 0 obj <<
+/D [1630 0 R /XYZ 238.927 547.3 null]
+>> endobj
+1629 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1635 0 obj <<
+/Length 1791      
+/Filter /FlateDecode
+>>
+stream
+x��YKs�F��W�Ua2�Ǒ%�K��Yp尛�d����$�$�>=�F lS�J�b�5=��u��6no�������G����T��@K�Iௐ�r
|w����^���`�D�C���O�M��Vľ��7H�^�y2[̧N~��E�}إ,ܻ:0�H*��� ���Q����=�\
+����u�[�I�q��޾~���"ۗ���ʫ�}@}�h_D^�U��[�O^�6�S�*��O+�'
+�8�¼]h���u�O��;k�5�d�p&��&e ��=��]q{��?L��m�ǫ0q���
k�>*���,�½]<ey鞬�b�ǻ2�R� {<Ӱ��4N7�L����0�
�C�H
��Vp�u�]�N#|3^��qC`#
�*@�Z�����p����c3:x��gQX%���O"��B���
+8WH��{�B ���L �4lW���2�\�,�s�݆��*\���R�\yt~
rCSpr����#�
+	�HYIr�|E'C��Wt��f��t�
�>�'�19�DB`�L�2t��{("�q\D6������a�{����)�W�$��c�;��
+5Q�j�_0m9�@
�Z�C�a�q
gW�D{�� �����I;�0}�ô+�����1�Յ��V�
ax>[,���.f�.>n��*���|y����1~��4��6W8QC����nŸ��l>��=|�=h{�+�Y�\�
f�d_�$�'�M��t%���LW	�
~`+�=~���x1
~}����_@�_Y =]����0a����&š�� �a���22�A1�4jy��h@H����G��x
:,5���ǨDʷ��O�QK�	Cޱ�F�o��BX���K8��)�g���.��N�cP I���0�X���k�4���|�ƺ�ܟ���O�����͓�6��s�n�������08-��0CX|[��BF�/1E����Ź����b�
=��|�����`�2{��
Nv��y�~w����b2N[��7�� ��
�M)�j�;cq�!Z#!�E�J¢��
��
+��+��Àp���_��EM=AЖ	����;BX�/h'#e�.�ߍ�*DT#���{F+i�����P�x�Ƌ�JЋ��*��-��UT�{?�>����d�G�>�@8(��Nb�ΘN���Jϕ&��rҞ��w�XPHd�T|��
}�Vid
�D�� ��:����Z1~\Oml�U��2 �IU<Du��
+KB�}��풸����7{@�
+�<
+��/0��*Ņ,덋2��|
��':�*��]$���]�
)�
�
�VJ{�.�����Ȁ��N�2	Ց4�N�m�U0�t�R�*xrb��r>mi@
���6��h�C�hmZϷu�(�A�n��h�9y�nJ�şm�
+
/r�պ�
+,
�NF"4����_��f��m�S��C2��m��	�t���
au[��bo�9?�ouK�z/׎Ir���4l���_b9��Wx
��U7�ġ�)���]�R���0h7k*�=L[Pm`����0����ć �qn5���.��F"�eӊm�m��
���~U7�~���"ioFm��E�
%��-a;o�Z�Z�� 7:�L'��N�L��@��5�Jg��7�U��y���C�ַW
vU����
b_!�M�\Hq��5w4��Œt���Nnlo
PډN
+�!IS��p:��Z���/�`�I�1�'c���0[
�i'FuH
��,.�
�5�p_Ҭt�0I�����g_��+t��1etж K�伄���W秬�k������B�/L}�K
+endstream
+endobj
+1634 0 obj <<
+/Type /Page
+/Contents 1635 0 R
+/Resources 1633 0 R
+/MediaBox [0 0 612 792]
+/Parent 1618 0 R
+>> endobj
+1636 0 obj <<
+/D [1634 0 R /XYZ 86.4 726.045 null]
+>> endobj
+370 0 obj <<
+/D [1634 0 R /XYZ 86.4 701.138 null]
+>> endobj
+374 0 obj <<
+/D [1634 0 R /XYZ 86.4 485.931 null]
+>> endobj
+378 0 obj <<
+/D [1634 0 R /XYZ 86.4 271.309 null]
+>> endobj
+1633 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F16 397 0 R /F36 408 0 R /F48 539 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1639 0 obj <<
+/Length 2646      
+/Filter /FlateDecode
+>>
+stream
+x��[�v�6}�W��Zc���GWQZ�����L�:}�e:�D�$�4��9  ��(ZJ�/����7�����Q4������/))�8���Hr�F�(�)
-�G��1e��Ĕ���-n���^H6�yU'�9%�:�m��l�<��
C����b$�6g�����W�Q%G�v��
+�[�g�>��Cc�34Eb��
+�fl0�}\
I�o*���)�T����c$)�0_O_�`�pL�`R���
��˫k
��K�e���tM�
�	DŽ�/�
�ƛtS���=
'�uq~A�x��Y���I�N����f"pP1?���� ֖��Uz}5�.����O=؜!�� �\ Q{v3�����[^�f��ٗ�)�5�u��U���s0��~ǁ��E�Տ���qR��m�ܭSs_������L���c����:-�ڶ��Њ_��E�K�WlF���\�^2���
����Um^<���h�n7�mY�?�ڼ���2��g>�Lb�0�9�Lb�Y�^_��ZN�=�L�H� �1A�<�^N~���׈ԝ�V%����x���m4=ۍ~\�0�
�U1NKӲx�
�\K+)ͣ!fse��ʴ�
,
RF�&F�����R��
+�+�
��f��,�h�WX\tJ����z0c	R
+���Gʇ���L�/��$��C+'%a��2��I�WD�!]m��K��U�>U���D���x�D���N~��k��v*�
>����V��
�q��X����Ѹ�:��#�vT�� i�a�]E����& �
7]�&�qދ6��GV�h#t���:�F?~Ԥk�\���:��k�p�znƀqgD7�Ԍ��O�#E��v��:.�T�I?4�}��D��G0ݔ����n��j�� �N��[���χ3(�XƐx�R�]a��������؆,xvӧm�h��`rH���1��������
��.{�˦X4�ViyQm���Y��!��en.��?�i�&
1u�j��9h񰅄�jM٬w 4�������&�2��%
����nk�6m�dN�i������+�)���\�	Z� 
CXa<�Ru��;�^��`
+���e������T%w�G�^��.E�
T�B�]e9Ɂ�d����A���pUDcDX|
+#0�c�B0]�HZF����iQ\�y�(�Pgc�Q��:ӥ�aE�>+:�H�퓹�M�dm~�lb���6��U�-7q���1��lb��01CM4�X����J8Z! Lh
��h��
E+�hUb7�����ߚZ%�?�v
z����3�.�W�^y����7ˆK
�^�Ik��/�����@� �"~��_#���0�ܓV� ���}>Ҵ���^{�%�am�
��d�ʤBr� <�bJ���拁x��;��<dŠ�Z�����7�fj���ٗ�c���3(]Q��]t��r
J$P�d2�b�&;��Y�I X'�.��"	 lE��=J$��"yLZ�<����>,�]tB^�����r`\�u–Cc ��!�
LS�Fm��{�߻���2���l
�6(J�~R�,���^�%���	d}c�@�$9q�}�$
���U;A^\/��-�R7V��4C��bwq;�L���
	�+g4��/��UZU�u���+��N9%$�e~`ۂ���=�0��X �+��㡫�]���(��\P��y��������N��L�}+��1�~�+�L��|Q
F���؀���
�H�ݮ�|����وŭr�$����l��H���D��|��'�+�+�Ԃ�"f�� [...]
+�$���+��QP��.��Ż��N=�P�lSW#
}|�X��1"���"�&��.'2v����'y����t�v~��`�U�*�2W�*�-�Y���ۇ��/�J
"�L���ۥx�� ���.�1D�S���m�k�T
��BT��)J�J�WUS���t��Y��j�6
��Ք���y��+*
+y%��**���BC
+Սe�B(���V*�Ꮧ
� �㥞χ��6�u ��j*�7�j��
�_�԰�c��TЕ`�1�TT[Ky�G-U��ې��õT���[OQ���9B����Ὃ
�%�^IN䘃xd�]	uDE�9�.f�����
c�[O1a�)�-�𢭧��Լ�%�2%�n�LIE�s"ϕT�KJ*���*��!�N{Oۺ{���B��&��d��O�Ɔ�H�>��$ҩb8� uJ�~��ذ�I
2
+��B�KEX���? �3tv��>�	�J
��I��|�"���H�x�;
��F�I?o����J��E���S
�z.p�3
Z��aw����x�xX%��F%��'���������
����8���K��?�̓�=�fNv��h�}�3{7��JC=s���ak�A�G�!��&5�Pi��g�]En��ٺ=���>n�E|KK,�H��@4̮��J��őT vTu��!J�K,�����?7��K
+endstream
+endobj
+1638 0 obj <<
+/Type /Page
+/Contents 1639 0 R
+/Resources 1637 0 R
+/MediaBox [0 0 612 792]
+/Parent 1618 0 R
+>> endobj
+1640 0 obj <<
+/D [1638 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1637 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1643 0 obj <<
+/Length 2490      
+/Filter /FlateDecode
+>>
+stream
+x��[Ms�6��W�(U���x�8�˳
�ǖsIr�%�f��
I�d��A2!�5Ff]�'Q�G�_w�FS8yLpr~�����gL&)J%���!��D�IF��$�u���c���?W��/�5̫�s�j>�g�U62:X-��T�Z
��G�NGG
 �	q�
��L�ӣ_�����`�R�|��M�RD�Ln��
a{���`�R����^,i/�2�4��L)bʮ��b�|.ʥ�����a%a�z`Y��l���r^�
���t�t0��|ٱRk$�8���n�O}�*�R#,isW�J���ۨ�q�x]�0|0C��
��)�j�#�ޝ����6��ݦ@�+�mxxL����j<Ηˇ���b|�P�ƫb>3��`����
5�y�DŽ���
�R!z/[H��l��`� :� 
�DP�`��zuwy��ъ")S�������)�#��U��۫�@0-�l
M%�xc��t{$E�Pw_�ⱚ�!ՃUÓ��:[V$R��_���BРč	�a��v��
�_0֭.;�"�DT	�Q�G
�*�W��M�y�u�`���� ��VTe6���s��Ϟ����l�j.�!���|��C2XYY�]�po������8��
�n'��T$��p�lxG
� ��zu}7�H�n;
$��ag
��
��-ؕ
+2(��kmVs1�O��Uq_�����꩹Z=����Z,LlP��(0/^k�����00<� Q���j��
�&_�
���MV�Wý�ee�&_#�ࣗ�����r?l��e�?fe8�i�(s���i�5�:-a*�e���Ѳ
z��bz㖕�
�d2_|��(��T�-)����CV��$l ���
2�`Q⿙�9�}�3��@���C��E+.�6x^�P
L
+��u��ӄ#8�#��"�
ߍ��Yh��۴?�M�D �0�Yo��8]�?e!ך�1���F�V�V4Tt��hqH�o/�n������ i@[���cS��DJA$�
خ
+��+5�y%�ɼv/&���.���B&`���BfT�n`oN�@C�Q at a�
+4���w'�?
++��^g''����׻��ݝ�]ֺ��㭞r�Ť�J瘋i k-�I5�e$��H�CM���A%�ؓ�W�P9
�<
+*H�TS5��������`>Bt�
T-���:lo�	�9���5���W�~�9�p2�V1p�B�p;8�:=1_,��cU��b���_�u��|�0�f���I���X9O�rc�ecP��ߵ��g&�Ni
3�4E:�伾�|���3E��f�p��6P�;�(���
Лӓmj
e�|�r�z�]q���Z9�Ω�Ց.>��-����o�ϣ��k
k���\�`֗>�.>�%G
\G�6�nr�@��h�� ǖ������E6;^�|y��׸�@�5)�?O
+���1L���q:�N�1Pm�P;(*�91P��H5�		JL�O�!#_U�6$̫���'����8���t�i��1@� �@��(�&��w�E��<�Wy�����"t��M�6���c*�Z<=̋쵊���t�h��
ׅ�6��
Ն�6��UБM��i���;�;��sw����A�
:]���Cdv�T��~�0�cGw;"�Zv�A����9�� 5���$
+5`*⚹��s����L"A����R�DJ�N}�J����
+���|�M�o�f�Ğ�>/��p^
��
��0u]�/7汋�K!��(�&
��vT��.
翜���ɿ��3��]�&tBX��9L�*r���I8q-���Va_��v3��W]���kǭ3���F�~~ʖ
��
ɔ$�XJO�p�Le��=�y
T��=���<�U�
jG��N,���W���w���>��D�f�a�&M6�N�>
)
tt$4ү�"}WG�
�x>+�5_gf��PrY�{7�y6d��)������;���G��r`.H�$}}�����$Mg�Tn$�=鲊�E0��Ya�UR�����OA2�f�Vol<(ȍb�������QZ+��
�,�a*E��ފ
i@]H�A;z+���;�ȞV"f�8D���Ի�+���jň���\!���\ٳ�X����X!Mؾ�J����k��
n����5����n;�O!
+�N ɐv
��B��S
\k'�C�is
G��je�<�p
P�ݷW����`�
�AVf��,;"�:v�q��#�eG�;�[e+�S
'f at y�r���ki
T�H=Ԯ�7���
+�P�c��7��{핾���4N��0���u��bEp
P+�=Ў����;�+~��•��&

4Y�`X��41�{���m4�
+3�3�G�u���'�G@��
�u�N��������8>
SaM{����
m�=�j���G�w�f��
�Jen�Tĵ��w<OӶ�=̎b�k��O�,{LA�k�0LE\����b��1`m3ԃ��_���NKOZ 0�Qha������1P�N�Pw����N�0�-����hq�v����K�
+endstream
+endobj
+1642 0 obj <<
+/Type /Page
+/Contents 1643 0 R
+/Resources 1641 0 R
+/MediaBox [0 0 612 792]
+/Parent 1645 0 R
+>> endobj
+1644 0 obj <<
+/D [1642 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1641 0 obj <<
+/Font << /F36 408 0 R /F16 397 0 R /F48 539 0 R /F8 409 0 R /F11 628 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1648 0 obj <<
+/Length 1439      
+/Filter /FlateDecode
+>>
+stream
+x�͚Ks�H��|
+
E�2;��1!8�����r� {����H*�~[�
+a!����1
��t����m=E4��y?��y!t��\G���j"#�
тE�i�-fBw{�+!�.o��]_�V���r�
/����M���Sg0���00M#L)b��&�η�4��'�"J��ѯl�"����Ѱ�C��
ڡ�8���ɶƊ[��Ie�
'���m�&O��A0�\�٪�d��g�t�"�ϖ�x��`���L�������W�t7O�8D[K�U'nD�³e�o"�-���O8�����%������rX[C�	[Ce������
��K����u��c��T2]n�]n�gOɔ�_-�zL2B�����Pi"�F�!�b��ػ��*,�L�@a�F�C�����K�:F��˒y�ޤ�2��k3�.'��'"~�m�%ۿ���u��Mw�y��r�^�
~�_
o¢�n�$)�P
%H`�)/�����
+��{$
+Uj�,/S/�]^�
Qz��>D܇�
�a<������#1��4�p�b�k�����렂���T�p�!R�27x��j,$j�B�@;��
�/#�lT�
�Q~�d��N ���v�e1���u
�\���}�-'٪�{� �d�dU���a�;�88�
D0ť?�F�ו	3���Q�6����Q���<ǧ�d�0/{��"����N��u�"@>{Q�3D�ۉ�Z"-N� S��1���@
ٹH="	�^��T�X�2�RJ��Aꔄ�lw�>%�v[�<�NPd�.W(�3�!�"5%���zp}��€�Ϊ�����ٖ@����c� eKK�К&,.�l�� �>
,��j�;��lS	�d����
��n{Z��$�(�p�)at�Ԏ����ĭO��<����7�Y�,����;��p�}��-O:��#�i�0���SK��vM!6h��m���P/�"��4j����v�t�)3����nU�1���������k�zD�f�
ʐ��Ѣ�׋�b���j�:o�&�c�3���}�r
�X�+&i)���)�����)8'>��dt����B=�P���9����
xt]X|t�FA�Ơ�Қ�H�8�
�s�B+T3L��P#Q�
+R��#�4��oz��&	}+${�0Y�_�֎�|-Ǡ�b^�V�ӌ�Z�*Ӵ&gHy�L�����u���@���jp3e�i
�pi BzU���ս�4���@M��ċs���(7
���n�G�۠j�G��Bod��:o�5���
0E
��C�F��$]��߸0����m1h}�C�&]���(� S������0���*B��j����
�(l�B��Ϟ�A��Μ5��
+J��Ӽe�G�,_�6dyj��Eꑛ�0D�ېc��N��4)��T)ιS���} 7(��mP 5(�Hm��78EkR�ٟ�1���jW�����
�
��}�n��Zc���h�'x�"��{
+endstream
+endobj
+1647 0 obj <<
+/Type /Page
+/Contents 1648 0 R
+/Resources 1646 0 R
+/MediaBox [0 0 612 792]
+/Parent 1645 0 R
+>> endobj
+1649 0 obj <<
+/D [1647 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1646 0 obj <<
+/Font << /F36 408 0 R /F16 397 0 R /F48 539 0 R /F8 409 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1652 0 obj <<
+/Length 2338      
+/Filter /FlateDecode
+>>
+stream
+xڝXKw۶��WpI�A���G��vRK����Y�l��H�������ԋ���Fx
@��ofxO^�;	\�vv2��J'1�f�^1�E��P��l�}���E^=�z�	��>�'L�/eiF�Y�4��X	&�����o;��c�Ǜ/��Ÿ�t��K�V�u���F��u6s���|�����ۼ*I�&�u��Fc)����߶����Qg����(>��Z�ĉ53��d���=o&�:oMc����o�۽o�À%�r�	�3]�Fc8���0\����y�A$��e�D�1�Jy��������/`"M�g+��B�0�^�MO~!m#�e�D�ई�*�;�� �@��Em���i�#�d�� dտ:8�
N�
 �܆4����<�-

+�TY'��G�+B
A��o,C&���9���Fj����+ؐ�!.��[Ɖ�εg���MU�Pőݚ^��އ$Vue���
Ԧ��Ǫ�NY�E^�yi_o��
�1�-\����J�[z�3���?XS��i���~flj^-W��-�j��g[DZ8�gg
�M�B��6�Ba��7�
<<U2~UQ�|����GW�L�=p� ����-�w�}[[
?#�"��MT�	�Ye����d�'Sf�څ��=�oQ'i���9�@�X���<�U9�-�'��؟�0%
�A
#��aU����ɬe#��Mm�Ҵ
��|P�R�@F
���[x�JH�*���KS3�;��/u�UŃ��R��*��*ᇟ� ~�B�JK���&�xOm�j�j�֪-��P�s��Ϯ��T�9�
ȼy�s���~)��I��!:hh�<���9x�KӚeCk�#M^��~�?2H��H��8�F
+�(w]�C~��N�V�n�s�e�A	?�P�
+^e�{���
+�r��i ���
�ֵ�UQ䦦a�{�
+�6��.
b	��C/W�!��5]
d�1��x}7�tC��!�Y�6�P�&C�-������!���&���ߌ�z����p.
@77w7�0 �B�� 43�2����h��ih��6b��s{.�)�O�
���
+���	BX�X�Hħ�q
ǘ[��9M������m�*(>�4�c'��
2�C��
����b+
�y(�;U@'}p � �p�2��k�=��A�^t&^=��C��K�tϚE��"�Y6:;0��=춫�dPih��4u�Y��
,T�	7��m���yc�\Ү�Z\�u��&_��
�P��D��F�O���CӀS���i)�el
O�H��(�5w��a��R��E
+�
|$���e�]|�A|?8��ն�4�
�h�P�]^�n����������=7�%uyM���Pw
��*���hp]� ���D�,�t
+�N at o�w��
u�>���^7M�KB��2/��
镇�%qr<����V�}i�Jp�@��ժ�3�\6�
��;I �#t�~$m�N�z�|k
�u
�x�xp\�pХk/L��^
�tu�ܻ����:b���b�(e*�c��~���Q��(��Q\u�/t��VPj�� �[AZ��jAe}��:�S)���bu̴�b�;H�]vy��6b<�+�Uv�}��g�ݼ��X-r��I����3� �E��ġ�/�
}�4�:�ܕ���R�B��0�p�U5y�D���T��Tu�/ΰ�2�
�0�����Ԉ���q���X���u	�ϲ����
Ƨ<z�O�y�bp,�@�i`�z��J�JS
��RU�RUh]�*�ȟ=#�·~V覱�t'���4�p4�N�iƥT|����f�)l�8�N"���Ԏ�Y�U����S�QPH�Ѯ
l�)���ن�� �&��ģS�Ưa����+�)�с��Q~�B��6벫
�hݦ�5$*.�l�ت�6�~Y�&��e��x�!�l���Fa���G,ˈ�{��0k gW�9D�
+���"�ΏǑ]�?B���,.Oe�EÖ������� ��
�pT���%�~  �
;X�s�}=�d>��K'��F��}�*@}0u�7]k�[�w3T���.�,ٜ����R;�s�� 7�������Iu�sF�ȺFKK�������f��#��?�0��ֱ��ފӔ\�����
y}����^�!Z��
��d�ù%$�*8H�]QJk;O���<T�a�_��4���CD�U�����ay�
�ꨥ�;l{Ká�%�߻u�	|&�`]��қ5�<ٞ�����%I�U� �T����T�o�:"Wx
�#�Em~`�ٮl=,v��]/<^��Pg���!����)9^�
rB�z��I�f�,�������G�-�T��t�/�3l��� vj��?��H���]{9;���
+endstream
+endobj
+1651 0 obj <<
+/Type /Page
+/Contents 1652 0 R
+/Resources 1650 0 R
+/MediaBox [0 0 612 792]
+/Parent 1645 0 R
+>> endobj
+1653 0 obj <<
+/D [1651 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1654 0 obj <<
+/D [1651 0 R /XYZ 86.4 566.562 null]
+>> endobj
+382 0 obj <<
+/D [1651 0 R /XYZ 86.4 566.562 null]
+>> endobj
+599 0 obj <<
+/D [1651 0 R /XYZ 86.4 570.789 null]
+>> endobj
+602 0 obj <<
+/D [1651 0 R /XYZ 86.4 550.89 null]
+>> endobj
+783 0 obj <<
+/D [1651 0 R /XYZ 86.4 518.04 null]
+>> endobj
+709 0 obj <<
+/D [1651 0 R /XYZ 86.4 485.743 null]
+>> endobj
+593 0 obj <<
+/D [1651 0 R /XYZ 86.4 452.339 null]
+>> endobj
+668 0 obj <<
+/D [1651 0 R /XYZ 86.4 420.042 null]
+>> endobj
+598 0 obj <<
+/D [1651 0 R /XYZ 86.4 387.191 null]
+>> endobj
+710 0 obj <<
+/D [1651 0 R /XYZ 86.4 353.787 null]
+>> endobj
+601 0 obj <<
+/D [1651 0 R /XYZ 86.4 321.49 null]
+>> endobj
+711 0 obj <<
+/D [1651 0 R /XYZ 86.4 288.086 null]
+>> endobj
+749 0 obj <<
+/D [1651 0 R /XYZ 86.4 255.789 null]
+>> endobj
+785 0 obj <<
+/D [1651 0 R /XYZ 86.4 222.939 null]
+>> endobj
+597 0 obj <<
+/D [1651 0 R /XYZ 86.4 190.088 null]
+>> endobj
+592 0 obj <<
+/D [1651 0 R /XYZ 86.4 157.238 null]
+>> endobj
+1396 0 obj <<
+/D [1651 0 R /XYZ 86.4 111.878 null]
+>> endobj
+1406 0 obj <<
+/D [1651 0 R /XYZ 86.4 81.519 null]
+>> endobj
+1650 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1657 0 obj <<
+/Length 1582      
+/Filter /FlateDecode
+>>
+stream
+xڍW]W�8}�W�Q9���%Y6o����%t�=�&��:6k;��?�3�
!8=}����ܙ;�#��
^�;I��,����.J*#
g4<��E7��t���<2�Y�a��
^�}>�]~��������P�"�m�h*�h�ܻ���h�#FE�F�nI��fE4��k��k���۷K2N�N�5n�����D7C�9��a�%�v�"MQ��A*	E�w'2��W�4Id������I�ڵ
dl�E��Y�I��k&U����K/li�ʠ�˙W|��bKw��
+����g�q�h��>�!5������U�
[�3S�/l����XRΣ!�4S�9<�}�ą��e��Ĵ׉���,&�|aq�	2*���)Y㏩��<�]X������ˁ��yU�v�l�Q���/�Ҕ�G���u1Y5&x�z+S��S��H%Mc��m4�r4�ł�����Z64�,�T�48-8c��
|�Jۻ����G)������D��L1?� ��$b�4�L�}k�x����"f�
<:��J���z�
���"�0^Tm��ʌ|�7&�+F^���
+FG�h�iT�k�������-H.`�%�
������
>e�|��:�NMa�5a��;

]&@By��%�;�C���u��gS
��<6���;�6E8
4m���@�Mj���aMޮ���+�}q
A��s\!�C�|�[7��
+妩VuO̤��Zl�Lz��O��)1��vD�(K���h/f�!q�W�.��5���<r0�������`ji��TE���5MT��$%'MU �+Lb/pD c��~���̀�ʆU�Y��1Ī�=r��)U
+��_������J��@�������"�ȕ�3;�e�o��"��궰͢�wSy��7���	�5���K
q�\b�
���#.�y/����p��\�0�Dz*f��3��9ҩW^�ռ�1-���+���>"ԟ��7#k(���
�$P���k������x&��^.S)v\�
S�;�t��Ӷi�s��6ԋƶ�ip�3<�����?���7�=���
�K!W���᧽Eha.3X��
�S����6Ӫ�Y�L
e��㉟殂�P�zkp�F�ƨw1�R��Ԇ�Q��_�=\�YLK_�bwTs�U'vUG&�I&�~�������ɴs&�O (���)���\�/�&I�v�-G��Ԁ����2�N��K�2��2����W��*x�
`w��p�:h���%ԓڧ�p]��P�}��%8�(x�5r���];�C�����Sb�\ ����T%Oi�HF�ۀ��^lG����x�����)/��k4��z�����N'.�G�aoz⪸�V��%��e�	څ�D�
U�F [...]
�l��	��k�Pح�����|���kQ�	ߢ�}�3�^t���3�I|��j`L��̆��m�&�6���,8�*��Y	���uFn�i��zp�)S�5�s����XP)Ֆ�e�,(

r���B��T��ӻ���>��1
+endstream
+endobj
+1656 0 obj <<
+/Type /Page
+/Contents 1657 0 R
+/Resources 1655 0 R
+/MediaBox [0 0 612 792]
+/Parent 1645 0 R
+>> endobj
+1658 0 obj <<
+/D [1656 0 R /XYZ 86.4 726.045 null]
+>> endobj
+712 0 obj <<
+/D [1656 0 R /XYZ 86.4 701.138 null]
+>> endobj
+600 0 obj <<
+/D [1656 0 R /XYZ 86.4 675.235 null]
+>> endobj
+786 0 obj <<
+/D [1656 0 R /XYZ 86.4 640.864 null]
+>> endobj
+782 0 obj <<
+/D [1656 0 R /XYZ 86.4 609.537 null]
+>> endobj
+1397 0 obj <<
+/D [1656 0 R /XYZ 86.4 577.657 null]
+>> endobj
+595 0 obj <<
+/D [1656 0 R /XYZ 86.4 545.776 null]
+>> endobj
+594 0 obj <<
+/D [1656 0 R /XYZ 86.4 513.342 null]
+>> endobj
+596 0 obj <<
+/D [1656 0 R /XYZ 86.4 482.015 null]
+>> endobj
+784 0 obj <<
+/D [1656 0 R /XYZ 86.4 450.135 null]
+>> endobj
+1655 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F49 566 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1751 0 obj <<
+/Length 1700      
+/Filter /FlateDecode
+>>
+stream
+x��ZMs�8��+|$U�F_��#!�"�
x�������Z��ƙ�����m�`[�{�=�H������V���Am҃��k��aL

S�
�4�I3�C �k��=�����j�
�}�	L�Y<jj�t�P
w�5 �����x���7†��D�k��i�3\�������&����0F��XLz�Cbь#�L�\����2�ޑcĎ(9��1Љ$����xR�=́N�0��y�|/\�R�7k�s���]��v���&�8`����7;���
�,��/$cj�u6�ԇ����&i��C��3�h�[Ģ[g��@3kflD1_�W����x�a
*8���lv3'*�A�x?��#ք���9�� ���\�7�
����C�
�
���(e !C[m{_��o5�ihߓ�[� $�;�6ڲ�9=�P$��8����DutW$這�&1:��R��*��",n4ᆈ����q����@ũ��uJ�H4
j�Y3E*�b��V�� �}>E��D��8�.�
T1�?ˎ8N
f�k|
]w�z~��ދ
sP]��zrY��LRcyF���"`P��4�G�X�b��� r�tjL��
��c�y�"���]a [...]
�Z����ֺ
+���h9*��
�	7�5$�lh��	��m.�D���R�;��n���۝R��+��0
+�*Q��Z�>S1�;O-1o,�a
+�Z�'#�By��^����R
�)��ul���άn���Rd $675d� ��
�`cSwW(�_/���|b�
9�$բ
_�

C�WHi��Ԉ�����z �<8!L�i�T�%��J�6�h��D���E���>��y"j��r��X�DM���ϋ֑�"�t���/��'��V���|Z�`!�u�
>�Io���0

E�aB23z�;5�sE%'��x�_�Iȫ�-l�m�-��u���{
�7EE�M�"����R�D���`���
������i���O�XG[�
� �������Xvy�v^8��&���yq|w���S�rd��Uz����ߡ�CO�V�sCk�+��^A�eU[����Y�~!P1"6E�����|���1H�{z9�V�f�ղH	��N"�(�䎅hy�8��fQcEE*a��8��K�O��p�l��y���
�$?�}�ETԓ��Z�#
^�
�����1K�x��si�
��+Jq�Q������D,KIWbk��ٽ�"oہ'f�l�g����p�r��Y�^���g���ĻB]q�y��ɰ9�xs���_�-�$+�V���N���<W��9^Z��︁��68,m�J[����\����:n��w���
����v\�2������U�e(�bZt�����E-7�)t��G�����;P���"vW
��+����t>�[֜ծ�s����eJ�q��z�������L�ʝ��_lѻbF���!�<�M��+���k� [...]
�
+�L��(jq"��y�%"g1.��*v�����z	j��H�.�l�#]�
6�4 ���WK������|�>-
+��,_�`"
+��L
^��‘�k��M�&���&ao����z�?E��r�.
+endstream
+endobj
+1750 0 obj <<
+/Type /Page
+/Contents 1751 0 R
+/Resources 1749 0 R
+/MediaBox [0 0 612 792]
+/Parent 1645 0 R
+/Annots [ 1659 0 R 1660 0 R 1661 0 R 1662 0 R 1663 0 R 1664 0 R 1665 0 R 1666 0 R 1667 0 R 1668 0 R 1669 0 R 1670 0 R 1671 0 R 1672 0 R 1673 0 R 1674 0 R 1675 0 R 1676 0 R 1677 0 R 1678 0 R 1679 0 R 1680 0 R 1681 0 R 1682 0 R 1683 0 R 1684 0 R 1685 0 R 1686 0 R 1687 0 R 1688 0 R 1689 0 R 1690 0 R 1691 0 R 1692 0 R 1693 0 R 1694 0 R 1695 0 R 1696 0 R 1697 0 R 1698 0 R 1699 0 R 1700 0 R 1701 0 R 1702 0 R 1703 0 R 1704 0 R 1705 0 R 1706 0 R 1707 0 R 1708 0 R 1709 0 R 1710 0 R 1711 0 R 1712  [...]
+>> endobj
+1659 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.375 549.45 164.33 560.298]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1660 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.375 525.47 164.33 536.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1661 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 490.945 167.983 501.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1662 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 478.955 193.471 489.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1663 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.459 478.955 213.396 489.804]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1664 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.942 466.965 158.878 477.315]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1665 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 454.975 182.152 465.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1666 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.14 454.975 202.077 465.325]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1667 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 442.985 143.825 453.335]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1668 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 442.985 164.857 453.335]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1669 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 430.995 168.512 441.345]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1670 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.608 430.995 189.545 441.345]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1671 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 419.005 149.056 429.355]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1672 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 419.005 170.088 429.355]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1673 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 406.738 186.883 417.365]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1674 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 394.748 150.271 405.375]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1675 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 383.035 155.501 393.385]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1676 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 371.045 155.501 381.395]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1677 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 359.055 160.732 369.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1678 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 347.065 155.501 357.415]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1679 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.828 335.075 192.765 345.923]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1680 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 323.084 143.825 333.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1681 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 323.084 159.876 333.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1682 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.64 300.55 138.595 310.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1683 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.266 266.026 156.221 276.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1684 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.846 230.056 191.783 240.904]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1685 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.771 230.056 211.708 240.904]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1686 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 218.066 193.471 228.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1687 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.459 218.066 213.396 228.914]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.942 206.076 158.878 216.426]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1689 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 194.086 182.152 204.436]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1690 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.14 194.086 202.077 204.436]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1691 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 182.095 149.056 192.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1692 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 182.095 170.088 192.446]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1693 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 170.105 154.286 180.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1694 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.382 170.105 175.318 180.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1695 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 157.839 192.114 168.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1696 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 145.849 155.501 156.475]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1697 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 134.135 160.732 144.485]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1698 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 122.145 160.732 132.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1699 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 110.155 160.732 120.505]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 98.165 165.962 108.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1701 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 86.175 160.732 96.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1702 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 74.185 160.732 84.535]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1703 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 62.195 160.732 72.545]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1704 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 50.205 160.732 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1705 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 561.163 395.774 571.79]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1706 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.87 561.163 416.806 571.79]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1707 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 549.193 385.313 559.819]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1708 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.409 549.193 406.346 559.819]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1709 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 537.499 359.411 547.849]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1710 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.506 537.499 375.462 547.849]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1711 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.557 537.499 396.494 547.849]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1712 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.221 515.308 363.176 525.658]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1713 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.113 491.367 436.068 502.215]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1714 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.419 479.396 391.374 489.746]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1715 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.546 467.426 394.502 478.274]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1716 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.113 455.455 436.068 466.303]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1717 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.682 443.484 373.637 453.834]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1718 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.452 431.514 368.407 441.864]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1719 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 419.543 378.867 429.893]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1720 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.152 397.353 412.088 408.201]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+1721 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.956 373.411 388.911 384.259]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1722 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.956 349.47 383.93 360.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+1723 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 337.499 359.411 347.85]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1724 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 325.529 369.871 335.879]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1725 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 313.558 359.411 323.908]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1726 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.225 301.588 354.18 311.938]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1727 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 289.617 369.871 299.967]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1728 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 277.646 401.253 287.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1729 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.255 253.705 503.21 264.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1730 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.607 241.735 385.562 252.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+1731 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 229.764 380.332 240.114]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+1732 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 217.793 380.332 228.143]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1733 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 205.823 375.102 216.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+1734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 193.852 406.484 204.202]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 181.882 369.871 192.232]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1736 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 169.911 369.871 180.261]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+1737 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 157.94 380.332 168.29]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+1738 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.428 157.94 396.383 168.29]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1739 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 145.97 364.641 156.32]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1740 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 133.999 390.793 144.349]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1741 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 122.028 380.332 132.379]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1742 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 110.058 380.332 120.408]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1743 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 98.087 380.332 108.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1744 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 86.117 364.641 96.467]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1745 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.255 62.175 503.21 73.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+1746 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.016 50.205 461.971 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1752 0 obj <<
+/D [1750 0 R /XYZ 86.4 726.045 null]
+>> endobj
+386 0 obj <<
+/D [1750 0 R /XYZ 86.4 574.336 null]
+>> endobj
+1749 0 obj <<
+/Font << /F38 453 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1884 0 obj <<
+/Length 2698      
+/Filter /FlateDecode
+>>
+stream
+x��\[s�H~��У]���{�
1�


�I���AvT��pIfj��
!�A��Z��lm틡�8_�����ޣ��듋��oWLz>�%�����qOQIF����tJ8>�s���#�0���ߝ�e�1��$�|=!����i.���ɧ?�7�O�z1_{߷�=y���»�7<���G�,�`���	"J�Л��1��;]>f����9c�T���0|럃_8U��0��	A��s�py>�f��Yx�%���'�h
�*��O�l���M�Xm�YN�,cO�]�]!�xB.�]��􆷭�0���vB��͐�"���(R����a��}h�V�
tF� }u}3��1�;��b�]l#�����\ią��i��k�E��g�W|;��R�B+5J����
�5���h�
+	�
�iJk��6t�nF��R!��nx�h����o_����D�P[�긘�*�}
�f�%�i���2Z{���/���7�y�	��D�O�R=<��s�ߦ�,!��ڒR>KaG&^�@P��ʋ��÷���)�Xg0�a
.�I�MgQ
��g�X��Ͼ�Q}.W�:�n�dJ���x��d���;%�@�SZ7���*4�j��t�+0�e�1�„�F%�5#V@]�VT�
+�PSbE�����(c��UKq��b%܇3JO���
eʹ_	�+�q�1�9����L��
+�Z��\5�s����׉<#V�z������\�1�B3K+=��
+�4�D�!ƀIh��M_�B�1�s[�+	�
�$(<�a���p�y~�y:m��u�
��dz��$@~����u�
+U�
+Gv*�tYB5,K%5�e��~��p�J�ߘ�YX�Rڐ?YY��d
}��־B\k�a
+��>*Yc���	)�2����cC���$m�%ۄ�D �`��8�k<Y������8���:\��Fx;�0e�i��&���j��Vb"���IV�8bX�t�z޶O���3a�%
Y
�2�F�p����	X#/��R�,��ra���f���ߍX�u
ɚ��e3��R�)���d~����b��'��_Q*�Ԥ���AY��斷Rg8�@�,\��$K1_7�u�gT��k��n
e��
�-	��m�&�
)�v<yx:֐�Z�
�`�M
+����������/מh�=Y����#�{�Ӧ-�d=_�
�,2R~�(t�BO2h٘�ָr����/�x��P��K4.�j\7Ѹo�x���d��q�cxi�RD��
�+�$t\Z'#���vS�uz�#�
+1�#����ԋ�a��	�mTx
+�Z�7�N; �붃CV=�S)I���bҬ$�	�@�Yb��"�~=�X�('�)�������Vot�X��_�|�^��H�߄#���3�
��*Mƚ`%</dv�����6 C�'|�8��U��p0
9�e�ch��[��
q'v�P��_���Ǥ5��.�D�[/x7�N��@�Ҭ�t�H�^('�
r�E�ޭ�7��ۉ�
iI
+lR7�jmC	���׶�S̉��Q<|g�i�4.�J;Vi�}��`8��U��>Ǫ]�������8�����_ꤢJH*R�n�
�֠�������O�v�]
+�L얐!�3�;��	����V�؍��
�
��f=�nR ��T7���\λؽ~���v��#���4!�mo��8���s���t����;�f;n4 ��c�ԗ�f�}�N�
�5��� �a���p�s���n�o��-\@jJ�!A��>�a�;%H[��օ'��&l��k���N
�B�[]�a0��5�B���B�&�,⾂� *m�8�<fN�
+�8Ҍ��	*� 7�.�+
�‚�a_;
%���FC7���Q0�M��ش
<Z�7���ͮ��Z��
P0sR�$��*����p��4kq
�L�V���>G�A����ׅt��Ծ�t
������u
K�g������y��s����?
戀Aݤ(��o%�|�F�x�<A�
+����s�] *�,a��c;.M{[�QW���`
SG�w2�LH	�VT��h��]`r��E̛V��o��;�r
��i���_�?�����U��X�������������m��\�\�B��
& pj'#���*/�nG��G.`�B�v�p>�- ���B1)�a'�kB��S��(0��"9P���
+�
$P�Ɯ*��n��[�eNoGG_q��V�C]��U@��N�}	)�ť�]���
�}���=���+{�B��b'!�0�
��
�p6( W����14�v��ޖ�G8�&�Td��A�ӻ>���� ���K�o��vnG��wƲ{g�4LO&'��,��:?�Y����>���GGw�y
+��˿S����&Z�Oٹ�US?,�ً�=��,IM �u.���i��G�hm�a�f�yF���|�{�=��u��Ua����M�����orBW¯�Y8ɭ��J�����"4�tat�f٘7�f�^s2�Vf{�,am�!h\�G���2>_�ߑm溜�ᒪ`Є?k
������N
�C�W9��{H��78x�{X��i�G����?=�$(IV���z��_���躸����׽���C
|���dGۆ^����^lx^ˇ���p1��9�M��JX���^����N
.����u���
Ki���^��ux�]��2���.�A��E�d�A[�QiQ�%�]G�W���׮�ʯP���W�
+endstream
+endobj
+1883 0 obj <<
+/Type /Page
+/Contents 1884 0 R
+/Resources 1882 0 R
+/MediaBox [0 0 612 792]
+/Parent 1645 0 R
+/Annots [ 1747 0 R 1748 0 R 1753 0 R 1754 0 R 1755 0 R 1756 0 R 1757 0 R 1758 0 R 1759 0 R 1760 0 R 1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R 1772 0 R 1773 0 R 1774 0 R 1775 0 R 1776 0 R 1777 0 R 1778 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R 1796 0 R 1797 0 R 1798 0 R 1799 0 R 1800 0 R 1801 0 R 1802 0 R 1803 0 R 1804  [...]
+>> endobj
+1747 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.272 688.242 147.227 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1748 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.216 688.242 162.171 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1753 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.138 676.283 220.093 687.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1754 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [223.082 676.283 235.037 687.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1755 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.514 664.324 223.469 675.173]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1756 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 652.366 187.132 662.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1757 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 640.407 150.52 650.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1758 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 628.448 155.75 638.798]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1759 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 616.489 150.52 626.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1760 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 604.53 181.902 614.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+1761 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.998 604.53 197.953 614.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+1762 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 592.571 187.132 602.921]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+1763 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 580.613 150.52 590.963]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1764 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 568.654 160.981 579.004]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1765 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 556.695 171.441 567.045]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1766 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 544.736 140.059 555.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1767 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 532.777 134.829 543.127]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+1768 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 520.818 134.829 531.168]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+1769 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 508.86 149.056 519.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1770 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.637 474.918 152.574 485.268]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1771 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.423 462.959 156.36 473.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1772 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.973 451 145.91 461.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1773 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [125.652 439.041 142.589 449.392]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1774 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [139.589 427.083 156.526 437.433]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1775 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.474 415.124 163.411 425.474]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+1776 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [141.36 403.165 158.297 413.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1777 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.308 391.206 169.244 401.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1778 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.754 379.247 180.69 389.597]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1779 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.713 367.288 183.668 377.872]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1780 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.344 355.33 181.28 366.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1781 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.563 333.347 173.518 344.195]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1782 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.613 333.347 189.569 344.195]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1783 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.557 333.347 204.513 344.195]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1784 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.608 333.347 220.564 344.195]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1785 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.281 321.388 152.236 332.236]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1786 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.332 321.388 168.287 332.236]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+1787 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.64 299.405 138.595 309.756]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1788 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.375 275.488 159.349 286.336]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+1789 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.531 251.57 211.486 262.418]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1790 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [157.965 227.652 169.92 238.501]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1791 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.531 203.735 211.486 214.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1792 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.413 191.776 124.368 202.126]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1793 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.464 191.776 140.419 202.126]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+1794 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.939 145.875 213.894 156.724]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1795 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.011 133.917 198.966 144.5]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1796 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.527 121.958 190.482 132.806]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1797 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.578 121.958 206.533 132.806]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1798 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.522 121.958 221.477 132.806]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1799 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.939 98.04 213.894 108.888]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1800 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.011 86.081 198.966 96.665]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+1801 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.527 74.122 190.482 84.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1802 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.578 74.122 206.533 84.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1803 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.522 74.122 221.477 84.971]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1804 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.939 50.205 213.894 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1805 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.593 688.242 423.548 698.825]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+1806 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 676.194 415.063 687.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1807 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 676.194 431.114 687.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+1808 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 676.194 446.058 687.042]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1809 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.108 652.097 415.063 662.945]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1810 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.159 652.097 431.114 662.945]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1811 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.103 652.097 446.058 662.945]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+1812 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 628.531 399.789 638.881]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1813 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 616.482 399.789 626.832]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1814 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.064 604.434 405.019 614.784]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1815 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.517 592.385 433.472 602.736]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1816 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.991 580.337 357.946 590.687]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1817 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 568.289 393.094 578.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1818 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.19 568.289 409.145 578.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1819 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.241 568.289 425.196 578.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1820 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.185 568.289 440.14 578.639]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1821 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [416.287 556.24 428.242 566.59]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1822 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 544.192 399.789 554.542]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1823 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.981 532.143 434.937 542.493]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1824 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.212 520.095 440.167 530.445]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1825 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 508.046 398.324 518.396]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1826 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.978 495.998 443.933 506.348]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1827 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 483.949 403.555 494.299]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1828 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 471.901 403.555 482.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 459.852 424.476 470.202]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1830 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 447.804 387.864 458.154]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1831 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 435.755 387.864 446.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1832 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.959 435.755 403.915 446.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1833 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.01 435.755 419.965 446.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1834 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [422.954 435.755 434.909 446.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1835 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.005 435.755 450.96 446.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1836 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.056 435.755 467.011 446.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.107 435.755 483.062 446.106]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1838 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [426.747 423.707 438.702 434.057]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1839 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 411.659 393.094 422.009]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1840 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.452 399.61 368.407 409.96]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1841 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 387.562 378.867 397.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1842 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [421.517 375.513 433.472 385.863]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1843 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.826 363.465 417.781 373.815]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1844 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 351.416 384.098 361.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1845 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [388.194 351.416 400.149 361.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1846 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.244 351.416 416.2 361.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1847 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.188 351.416 431.144 361.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1848 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.239 351.416 447.195 361.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1849 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.29 351.416 463.246 361.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1850 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [467.341 351.416 479.297 361.766]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1851 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 339.368 408.785 349.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1852 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 327.319 384.098 337.669]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1853 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 303.222 488.483 314.071]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1854 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 291.174 442.461 301.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1855 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 279.126 449.894 289.974]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1856 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 267.077 409.944 277.925]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1857 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 267.077 424.888 277.925]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1858 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 255.029 416.032 265.877]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1859 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 255.029 430.976 265.877]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1860 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 242.98 396.439 253.828]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1861 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.63 230.932 413.585 241.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1862 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [352.686 218.883 364.641 229.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1863 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.737 218.883 380.692 229.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1864 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.788 218.883 396.743 229.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1865 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.528 206.835 406.484 217.185]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1866 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 182.738 416.032 193.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 182.738 430.976 193.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [359.854 170.689 371.809 181.039]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+1869 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.798 170.689 386.753 181.039]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1870 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.719 158.641 444.675 169.489]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1871 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [447.663 158.641 459.619 169.489]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1872 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.096 146.592 448.051 157.441]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+1873 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [441.601 134.544 453.557 144.894]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1874 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 122.219 443.096 132.846]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1875 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 110.447 401.253 120.797]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1876 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.146 98.399 375.102 108.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 74.302 488.483 85.15]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 62.253 442.461 72.837]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 50.205 449.894 61.053]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1885 0 obj <<
+/D [1883 0 R /XYZ 86.4 726.045 null]
+>> endobj
+1882 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2034 0 obj <<
+/Length 2559      
+/Filter /FlateDecode
+>>
+stream
+x��[[w�H~ϯУsΦQߥG��,���=�����Ȓ������-�Kn���y!!���UUWu�l�����g/nϞ-��\�
+"��{��Y��HPl�n���W�_��}���k��l�������gW�g��0�նp�}�
&�����ﶵ�O^[6��c}ɟ�Y����o��>�י},�s$���[��KQ0����^p~A)]�����#��!~(ey�����?�H�y�h���

F���ũ��

���칭g���M&A����7[٩�!Q���-�79�
%���~�DA��1JT ���X�1�S�ْ
��p8�\�u~>�B��3��hd gš0��]/�;u+����v�>
$�
�lׂ8Dء]�DKU���P�/&q���6r�T����T"G#LAY�f
��wnOQ$a>E9�
�������:A�.ŒH��|�o�n4\E�+�pe��\W
+_h��<���J3��sp�Ƣ=
���hK'���`s��@ӣ^Ţ�U,
3]>Ն�_�r?�����&�e`qg &&���ԘvD���x�ӱ�Ό��$�r �׈_9U'������z����� c$5�<H^x����Y��F��5���E7��։�I^��H ^&��t��%-�	^���K�e�=hD�R ���NՂ�� ��[
��Փ$�b`ۅ(�f䨈�m� 
�r0g����푣 �7�oQ���{Mc��jf�(iidX���9]Q)���'B���\��?!>ϏO6%>��Rs�qwb(i55��hXE�N�8E�
U��TU���E
��6�i
���ώ�
9�b�D��en����J\T\f$)��Mґ��E�3<*��XEa��(xz��Xg��4�!{��4�X�j�‡��̳�'G�ή�
IrTz`#��op�
+�ݎo�H?5���fdJF{s�A#(F��yn�F�\6LQ� �(ի��臏�A���% ��w�	��9�
���X@
��E8��;�+�}��>�Ή�����6�e���⁻��?�
:�no\7���
+4	_�*��*�Ç��l�Q짟v����������M.Vs"�u�qU
>�MŚK`���g*�D�=�����Fhz�EI�f�	c:f��:��0vhN���sN+���{�����C���
~'\���+}��E6�䠝�KZͼ
ܡ�~[E̼����m�7\{pn>f����.�Y��
i�6.l�
����j�YtC<��*n?L��N1���Z�����L��`�QR���)�Rcg2��F���5������i�Զ�p��qh��{�dfeݣK��������-j6��{},�J=~�҂����a��)70 ���皪J"[ҡ��݃F��k���t��r��[�B����Fa����������=�/�@k�QB�3B��ɘ"+v�%�BɦP��.����L���i0ZEY!�K23UP1��\E7~x��&�*܉��*z���(��_LLU�����>�AP3�;(��k�������
���:�{d�
\3%�;��%p�dN�U���IgjL���y���J������m���ED�6�HJZC��H�
��^��Z�Ұ����/��&>)1��[�	�YKH`��$�j_^�Ј�l�n���C�ՙ�X^sƶ�c��}7�ړƉ;Q�
9�AH�j�W��F�хt�p�6r�$�q5�c3~ׁ��u��Q
����7()QU�- ��h�i��L;�׆�,��, [...]
O�<Mo��n���
+9ޫ���1V�N��A$�1c����$Y������tt�I:��
ݳ~�w��UI���ž�/&�[�lb�mr�3�
�=��R�霋��2�}T�|�����y�^�%��q���d���s��C�
+Y�Ƈ
���SEv�� �"���
�iTȼz�~{=�NMu��ַ��n��p�7^��x��{б4_%�;�AZ��K�?�P���A+N���Iy[U
+�-`�� ������Sa&]z�W[�f��}�c�X� �Sj�B�Ʀmş�����:ۖ7
)<y�a\��"D�=�X>Q7'u����̓V�췁Ev��������	Y<�4<
����~u�%�Sŵ��
+O��\�:U<�5���\ ʘ×�N4?�U

v��~R�����5m?I��`9b9	�?ɞ
�'V.7Un�y�$�R"�|�g�wݶ�ݵbm�v��O-�nnH����4�
+��=��<`Fn53R�����A��w
4=�5�_Ҷ*�E]*�ڄ�@���M\~|j�
�ޒѭa���R�0r�����C
+��A��1@��*#��4��%Z����u�;x��U��s�\�d��[^���Q2_cj\cR������
ʢ��@���c�L���ҷEݿ:[	���P(a)+u���-��Y����!�����,͘�F
+W��Ne.!G�i7�N���^
+endstream
+endobj
+2033 0 obj <<
+/Type /Page
+/Contents 2034 0 R
+/Resources 2032 0 R
+/MediaBox [0 0 612 792]
+/Parent 2036 0 R
+/Annots [ 1880 0 R 1881 0 R 1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R 1902 0 R 1903 0 R 1904 0 R 1905 0 R 1906 0 R 1907 0 R 1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R 1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937  [...]
+>> endobj
+1880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 688.242 185.362 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 688.242 200.306 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1886 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 676.204 191.45 687.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1887 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 676.204 206.394 687.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1888 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 664.165 171.857 675.013]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1889 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.049 652.127 189.004 662.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+1890 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 640.088 145.29 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1891 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.385 640.088 161.341 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1892 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.436 640.088 177.392 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1893 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 628.05 184.203 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1894 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.299 628.05 200.254 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1895 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 616.011 184.203 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.299 616.011 200.254 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1897 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [204.35 616.011 216.305 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1898 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [220.401 616.011 232.356 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1899 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 603.973 178.973 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1900 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 603.973 195.024 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 591.935 178.973 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1902 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.069 591.935 195.024 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1903 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.12 591.935 211.075 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1904 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [215.171 591.935 227.126 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1905 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.222 591.935 243.177 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1906 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [247.273 591.935 259.228 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1907 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [163.252 579.896 175.207 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1908 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.303 579.896 191.258 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1909 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [195.354 579.896 207.309 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1910 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.405 579.896 223.36 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1911 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.456 579.896 239.411 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1912 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.507 579.896 255.462 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1913 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 567.858 181.902 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1914 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 555.819 187.132 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1915 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 543.504 192.363 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1916 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 531.742 213.284 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1917 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 519.704 208.054 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1918 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 507.389 197.593 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1919 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 495.627 202.823 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1920 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 483.589 181.902 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1921 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 471.55 140.059 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1922 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 459.512 176.672 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1923 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 447.197 213.284 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1924 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 435.435 218.514 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1925 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 423.396 197.593 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1926 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 411.358 228.975 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1927 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 399.043 187.132 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1928 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 387.004 181.902 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 375.243 187.132 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1930 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [128.104 363.204 140.059 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1931 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.155 363.204 156.11 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1932 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 351.166 134.829 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1933 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.925 351.166 150.88 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.976 351.166 166.931 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1935 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.027 351.166 182.982 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1936 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 327.089 263.901 337.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1937 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [290.06 315.05 302.015 325.899]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1938 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.357 303.012 225.312 313.86]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1939 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 290.974 185.362 301.822]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1940 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 290.974 200.306 301.822]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1941 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 278.935 191.45 289.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1942 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 278.935 206.394 289.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1943 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [174.542 266.897 186.497 277.745]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1944 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 254.858 171.857 265.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1945 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 242.82 166.211 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1946 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 230.505 192.363 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1947 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 218.466 171.441 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1948 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.537 218.466 187.492 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1949 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [191.588 218.466 203.543 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1950 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 206.428 176.672 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1951 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.767 206.428 192.723 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 194.666 192.363 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 182.628 171.441 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1954 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 170.589 197.593 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1955 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 158.551 202.823 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1956 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 146.512 171.441 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1957 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [169.947 134.474 181.902 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1958 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.408 122.435 192.363 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1959 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 110.397 176.672 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1960 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 98.359 202.823 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1961 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 86.32 150.52 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1962 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 74.282 197.593 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1963 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 61.966 202.823 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1964 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 49.928 202.823 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 687.965 443.096 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1966 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 675.927 416.944 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1967 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 663.889 401.253 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1968 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 652.127 401.253 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1969 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 640.088 416.944 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 628.05 411.714 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1971 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.759 616.011 411.714 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1972 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.141 603.973 443.096 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1973 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.219 591.935 422.175 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1974 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.45 579.619 427.405 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1975 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.068 567.581 396.023 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1976 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.298 555.819 401.253 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1977 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 543.781 408.785 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1978 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 543.781 424.836 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1979 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.932 543.781 440.887 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1980 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [396.83 531.742 408.785 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1981 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.881 531.742 424.836 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1982 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.932 531.742 440.887 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1983 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 519.704 403.555 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1984 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 519.704 419.606 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1985 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 507.666 403.555 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1986 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.65 507.666 419.606 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1987 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.701 507.666 435.657 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1988 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.752 507.666 451.707 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1989 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [455.803 507.666 467.758 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1990 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.521 495.627 424.476 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1991 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 483.589 399.789 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1992 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.885 483.589 415.84 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1993 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.935 483.589 431.891 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1994 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.986 483.589 447.942 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1995 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.037 483.589 463.993 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1996 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 471.273 416.944 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1997 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 459.512 432.635 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1998 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 447.197 448.326 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1999 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.68 435.158 432.635 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2000 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.989 423.12 416.944 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2001 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.024 399.32 424.998 410.168]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2002 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.499 387.281 461.473 398.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.2) >>
+>> endobj
+2003 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.49 375.243 424.445 386.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2004 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.23 363.204 444.204 374.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2005 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.345 339.127 448.3 349.976]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2006 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.788 327.089 396.743 337.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2007 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.404 315.05 447.359 325.899]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2008 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.672 303.012 387.627 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2009 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.458 290.974 391.413 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2010 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [369.008 278.935 380.963 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2011 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.624 266.897 391.579 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2012 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.509 254.858 398.464 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2013 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.395 242.82 393.35 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2014 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [392.343 230.781 404.298 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2015 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.789 218.743 415.744 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2016 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.684 206.705 372.639 217.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2017 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.628 206.705 387.583 217.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2018 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 194.666 449.894 205.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2019 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.402 182.628 403.357 193.476]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2020 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 170.589 359.411 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2021 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [363.506 170.589 375.462 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2022 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 158.551 369.871 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2023 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.603 146.512 394.558 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2024 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 134.474 399.789 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2025 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [377.373 122.435 389.328 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2026 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.064 110.12 405.019 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2027 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.064 98.082 405.019 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2028 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.064 86.043 405.019 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2029 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.834 74.005 399.789 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2030 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [398.294 61.966 410.249 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2031 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.755 49.928 420.71 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2035 0 obj <<
+/D [2033 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2032 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2185 0 obj <<
+/Length 2436      
+/Filter /FlateDecode
+>>
+stream
+x��\[W�H~�W�ќ���ݏl�dm�Mv��΃��3�E��p��o�f$��
j����T�ե����:���?����K*
�� ™�9J �H���ؙΝ/�����s]�1���?_]����'ӓ�'��:8��#ń3[�|��u����ET+�亥èF~Z8����E<�
+Gh����]]O>c�?]�"r�%*��k�ڮ�eE��!�p~�"X�^xzF)
���D
��3<���g�"��s�	r�No��
������[���}�O�O�/p�}�Y�}��g�3
�	��Tȁn�C+����V�FPqZ�aR�냕��D!Y���;�K���_V�:�n�G�K�ng����@�����\�����ַ��J��6�p
��-XzQ�N��b/��
n�/Om2���Oɤ��\�������
B�N�
D��
�%g�71no��u��:B�2���
&j�*k_�f�U{j�sV�~���j
� �<�h�I�x�;�,��a�
���
+]#��M��@F�!S%[g+`}�����
W��&B���#��aâ-5�)�Ȏ���d��- !˻SB��аcP�@;'~�[P�]Qv�k��~1�Tf��o�-՛eK�<�$���m����3�	��J�8t��=�-Ͷ)$�l][�՚�Qk��˖�����Q[��-̈́�jˊ����j�ض��prx܃c�K�\-T݁E����Or�SR�)�p� "S|5
t���ǎR����z|3=
#s�6��c��U��*i6� hm�5Fˮq�.r��w�a
�z����A'�0񲳡�
$�
�J�o�CC�]�	n��<ʺ���F_0ET��i�������D�9Erj��4������c9�v��!��yi�y�3��S+QQ��6Q��4�bQi�JC��_vC`���6�ZSC|Ԅ���Q�T�~���5�>�Z-��v
�`/������%�����ݻ���X�
L�Zx�[x��l�؊��{?z��r�N��FT��@d�����-߭W�
�z�!Z�EBj�����P.�'�x�,@�
���!
+����–e
L&��/�`u��		��hIKʄոe
��"�;Yb(����7b�kXRa���u��d��
`�!�O��F.���lg�gv�2����@T�T��!IX�38�n̦��l��xU�����Ie�� 2�}�F�I��$r�q�h�'�V�R����)B
AU�
^�.
+U)�$yƉJާ�P�r]~Z�|�B�YڊR5��e�J��,�t��-�QF:Q2�j
�k$o5�H�{R����:���:��a�sT��
u
+�k�:�����D���ol�S𗍧�
+��Mt��Nd��Dwf.!���G�ghK��^�m�p�[F��I`s��q!W*^���JZϕ^�@&����p��S��
���:
�_���[X���s1�yMK��cu>�@Y=�rY���
w_x���
�
A��	���Ld_r�]ȝY'w�
�c�d�0M���
��!^=�aT(���(�
����A=�1_K=r�Z6�(����`��)
k�
f�S;c٫���n�'�HO�ʞ���V�V�,=e���R=%���o���v���Bɯڎ90���HH
B��oA�s|���ӒLX�7[���sCzr�I��!;SY����
��P"�&�&��}�+hS\�b�e�����Ӥg`L吳���T���ʊ� �񬣟\Lo�o�T��k'� ��YT'c�F�����X���u��{E|PS�<��K%��N&�(β���b��D�b(� �K����)�O������;��f-
Lō�����-Ut��v
��Ղ¹J�����B�oI%W�����8���uO��/���3���������_L�
tq=��h�2c��HŊ��{ĺ+,��D�,���i��zy�y���
B�aڙƵ�iQ����U���ڞ�č�WM�P
�������X$���ًMc�P�Ƃ����nK�s�����x`���m�ʭ�~H�E����X1(̙�A�`���2���
+��
��t�Ǎ��{���mS��ޖ)��xD��vqv{g���[,�EϮS5
9M�h�n
��� J�g$w{!���	�m��fV��)-�$w�����`����mg=[t�0��r^�r�T�j��o'�)�$����C���a
���|ۓI4��$��}yb�pž^������/B��a�-z2��V��%=ςro��K��&z<��S���v��uƻx�N���
�M�W�r$$���Q��e
�R�q�H�*X�宕|I�˞���(r�Q�Ri&tbC[�K���� �e����(r�Q�JmV���ApD��
��(5}������]D���H����S*m���>���Q��.�x�
+��	��Њ}
+endstream
+endobj
+2184 0 obj <<
+/Type /Page
+/Contents 2185 0 R
+/Resources 2183 0 R
+/MediaBox [0 0 612 792]
+/Parent 2036 0 R
+/Annots [ 2037 0 R 2038 0 R 2039 0 R 2040 0 R 2041 0 R 2042 0 R 2043 0 R 2044 0 R 2045 0 R 2046 0 R 2047 0 R 2048 0 R 2049 0 R 2050 0 R 2051 0 R 2052 0 R 2053 0 R 2054 0 R 2055 0 R 2056 0 R 2057 0 R 2058 0 R 2059 0 R 2060 0 R 2061 0 R 2062 0 R 2063 0 R 2064 0 R 2065 0 R 2066 0 R 2067 0 R 2068 0 R 2069 0 R 2070 0 R 2071 0 R 2072 0 R 2073 0 R 2074 0 R 2075 0 R 2076 0 R 2077 0 R 2078 0 R 2079 0 R 2080 0 R 2081 0 R 2082 0 R 2083 0 R 2084 0 R 2085 0 R 2086 0 R 2087 0 R 2088 0 R 2089 0 R 2090  [...]
+>> endobj
+2037 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.82 676.204 178.776 687.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2038 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.049 652.127 189.004 662.71]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2039 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 628.05 263.901 638.898]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2040 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 616.011 217.879 626.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2041 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 603.973 185.362 614.821]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2042 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 603.973 200.306 614.821]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2043 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 591.935 191.45 602.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2044 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 591.935 206.394 602.783]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2045 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 579.896 251.614 590.744]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2046 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 579.896 267.665 590.744]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2047 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.445 567.858 249.4 578.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2048 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.496 567.858 265.451 578.706]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2049 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 555.819 171.857 566.667]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2050 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.049 543.781 189.004 554.364]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2051 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 531.466 145.29 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2052 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.385 531.466 161.341 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2053 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.436 531.466 177.392 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2054 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 507.666 263.901 518.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2055 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 495.627 217.879 506.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2056 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 483.589 185.362 494.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2057 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 483.589 200.306 494.437]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2058 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 471.55 191.45 482.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2059 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 471.55 206.394 482.398]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2060 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 459.512 251.614 470.36]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2061 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 459.512 267.665 470.36]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2062 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.445 447.473 249.4 458.322]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2063 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.496 447.473 265.451 458.322]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2064 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 435.435 171.857 446.283]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2065 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.049 423.396 189.004 433.98]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2066 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.565 411.081 150.52 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2067 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.616 411.081 166.571 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2068 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.667 411.081 182.622 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2069 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.946 387.281 263.901 398.129]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2070 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.924 375.243 217.879 385.826]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2071 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.407 363.204 185.362 374.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2072 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.351 363.204 200.306 374.052]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2073 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [179.495 351.166 191.45 362.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2074 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [194.439 351.166 206.394 362.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2075 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.659 339.127 251.614 349.976]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2076 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.71 339.127 267.665 349.976]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2077 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.445 327.089 249.4 337.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2078 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.496 327.089 265.451 337.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2079 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.902 315.05 171.857 325.899]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2080 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.049 303.012 189.004 313.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2081 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.334 290.697 145.29 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2082 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.385 290.697 161.341 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2083 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.436 290.697 177.392 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2084 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 278.935 194.664 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2085 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.76 278.935 210.715 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2086 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.811 278.935 226.766 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2087 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.862 278.935 242.817 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2088 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 266.897 194.664 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2089 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.76 266.897 210.715 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2090 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.811 266.897 226.766 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2091 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.755 266.897 241.71 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2092 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.806 266.897 257.761 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2093 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 254.858 189.434 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2094 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.529 254.858 205.485 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2095 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.58 254.858 221.536 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2096 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 242.82 189.434 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2097 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.529 242.82 205.485 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2098 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.58 242.82 221.536 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2099 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.631 242.82 237.587 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2100 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.682 242.82 253.638 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2101 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [256.626 242.82 268.582 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2102 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 230.781 194.664 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2103 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.76 230.781 210.715 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2104 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.713 218.743 185.668 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2105 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.764 218.743 201.719 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2106 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [205.815 218.743 217.77 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2107 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [221.866 218.743 233.821 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2108 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.917 218.743 249.872 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2109 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [252.861 218.743 264.816 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2110 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 206.428 202.823 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2111 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 194.389 223.745 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2112 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 182.351 223.745 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2113 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.25 170.312 234.205 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2114 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 158.274 218.514 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2115 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.79 146.236 223.745 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2116 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.02 134.197 228.975 144.824]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2117 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 122.159 208.054 132.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2118 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 110.12 213.284 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2119 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 98.082 202.823 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2120 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.868 86.043 202.823 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2121 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.329 74.005 213.284 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2122 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.559 61.966 218.514 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2123 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.25 49.928 234.205 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2124 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.29 688.242 419.246 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2125 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 664.332 488.483 675.18]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2126 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.505 652.377 442.461 662.96]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2127 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 640.421 409.944 651.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2128 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 640.421 424.888 651.27]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2129 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 628.466 416.032 639.314]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2130 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 628.466 430.976 639.314]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2131 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.24 616.511 476.195 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2132 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.291 616.511 492.246 627.359]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2133 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.026 604.556 473.981 615.404]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2134 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [478.077 604.556 490.032 615.404]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2135 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 592.601 396.439 603.449]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2136 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.63 580.646 413.585 591.229]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2137 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.377 568.414 380.332 579.041]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2138 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.428 568.414 396.383 579.041]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2139 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.479 568.414 412.434 579.041]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2140 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [476.527 544.78 488.483 555.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2141 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [514.641 532.825 526.596 543.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2142 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.938 520.87 449.894 531.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2143 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.989 508.915 409.944 519.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2144 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [412.933 508.915 424.888 519.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2145 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.077 496.959 416.032 507.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2146 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.021 496.959 430.976 507.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2147 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.484 485.004 396.439 495.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2148 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [378.837 472.772 390.793 483.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2149 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.888 472.772 406.844 483.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2150 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [410.939 472.772 422.895 483.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2151 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.371 460.817 448.326 471.444]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2152 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 448.862 369.871 459.489]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2153 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.967 448.862 385.922 459.489]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2154 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.797 425.228 406.733 435.579]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2155 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [342.225 403.832 359.162 414.182]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2156 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [331.764 382.436 343.72 392.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2157 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 370.48 378.867 380.83]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2158 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 358.525 378.867 368.875]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2159 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 346.57 393.094 356.92]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2160 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.452 334.615 368.407 344.965]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2161 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [431.684 310.705 443.639 321.553]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2162 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.263 298.749 464.218 309.598]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2163 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.47 286.794 447.425 297.642]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2164 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.769 274.839 407.724 285.687]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2165 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.521 262.884 454.476 273.732]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2166 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.407 250.929 449.362 261.777]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2167 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.956 227.018 383.93 237.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+2168 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [335.584 215.063 342.557 225.801]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2169 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.985 193.39 425.94 204.017]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2170 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.133 181.435 461.088 192.062]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2171 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.594 169.48 471.549 180.107]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+2172 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.133 157.525 461.088 168.151]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2173 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.903 145.569 455.858 156.196]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2174 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.594 133.614 471.549 144.241]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2175 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.133 121.659 461.088 132.286]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2176 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.137 109.704 452.092 120.331]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2177 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.285 97.749 487.24 108.376]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2178 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [485.746 85.794 497.701 96.42]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+2179 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.285 73.838 487.24 84.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2180 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.055 61.883 482.01 72.51]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2181 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [485.746 49.928 497.701 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2186 0 obj <<
+/D [2184 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2183 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F16 397 0 R /F48 539 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2305 0 obj <<
+/Length 3139      
+/Filter /FlateDecode
+>>
+stream
+x��]Ks�H��W�hW�{��8:���T�XY�nUv��IT#K^I��k���)�n��LC��K�%|�h �:�6���Go&G��z��\�&��&rd�#Z���~�����ۋ��>�m$9'�)�f�
&��磋�ѿ��+
����X�GwG_~��{��o#J�����
FR8�������G4�G�]}�c����z
�8���F��
+„�`_�9�u�����"���m����j�|��y~�g�P�0��L�]]��l5��=�/��
������rŶ��������
+!��*~�%|��)0
c��Z�Nƍ#Bh
�A�`�m�ެ��篗� ��\6m_6� �˶��ֆpX#²Au�u�u|Sbh��%Jغ
+׏���&��\�Rţ]L)�Q<
Qݟ�d���@���j:�g
�Y2�"֭m�n�Y��`�� �rޟ�t
*�C��_�S�Zb�5 at 3+0��,�s��A�u��M�Y߽��k�T4պ�ja!�E�5��"%��'U��5��U��|_e��ubq�G��lj�(�j�~&d�kP�
�0HF�N�VΧ���r�X] n9N\(絅v}A
�ʌ�u͌���a0c9����l�1[|�|o�=	5$7�L1"��AQ�98lI�ѕ����02���8�b8�
�(�CJ�#+�hIF���t��{��U�ۛ%|�aT	^�I�<�CW<��C�Z��vfY�C�%�C�I^�M�{�6�H�0�1D3SW`��!�?@�:4���6 I��� �/��
�N��
:��ӡ��� /IU���ӡ+�C��o�΢9�P����tYg\N���c!�AT&�CTqP�p�bÄ��1P�>^���>
�V����b
;O�h���QZ=^��2��tԊ�v��Ӄ5�����$��N���!,J�m�ٴo�h�U�h�~��$���7
��7��:{�� ����g�"�K [...]
+kN���)\��w�M��
+���!����vČ &�F)�?zQ���9����Q��mT
��b��&1aٿ
�¯f��%� �����p��݌Z��k�7���e�h�pȕ�)�
�
�׉G��\%e��
_ܶ�� Z��^^_ᒻCg����l�MW'�w���M��?�� ��\��g��L.f��r�U��SB����߲
v5ήI�}����eKPJ�,cR����ᴴ��5�o�Z)K�I-yQ�,�ϯ�&WM_8-j`��)�u��J�Mc]�ك�[��8~
�����"�솰���^�+΍��$ߠ̂����Y؂��f�ൔH
˭c�g��s
��� ��-l�m{���k�H�/-�U������l
C�,�X��
iw���A��`S-l�
����
�������̵�O�(
T��,���Ћ\40��f�@va�Y���fPKfC�C�޼�V��jʠ����l��%�!�m��JT�U
+JN�¬+H9D������W�'�6@��!H
��\c��

U5�_��p(��(Q������n��Fj�3=�u���
+�k
+�y���p� Zr�
�g�8���n��(��b��
�d��l%�$6ݛ�p&`��[j at E�B-��:*
 ��Ԇ��yL��l7����J
b�(E�3��
�L^-a�j���u܃�l��o|
�o�0���E�����/n�o��
X�8�]�(�/JY�.n�n�{�
+WA(�=����(��y�@?^��/py��

h�	��}���u��W�|�	�^��T	��rF� -2Z
t�����mõ�?g8�P�-D^)������&�%��8���K2��5
��i��m�t�Ҥ!�[(V�7����
�
�IA�Q���?�ZL� Z�4�ӷ���DA�p��R~�&�&��&��s(�4/�8cR�Ҥ!h�IPK���ͤZ@����I)��l(��?e�9@
s�@;̉�Z���z�C
X�TZ
�
��5�[��-�ZZ4m�(ji���'��
zq>�
7��/3�˓Sn���Y׼�ۙ7*�r@�EjY>���g]��n�wN��
+��~i:ߎ.��O��ɥ����tq��\m�i9�넛�lձ6��}�����c)Zվ������B;�.�M��nf[�
�v�Sj�>j�f���=T
�^\�V.֏�U�aDev�󚼶��˧�!]���^�V*�*�_���q�����~6�����Uv�\�瓄���>�jy�݇A�E�}��Q����ݷ���
�
v�)ڇ�g�幪��gw�U��
+S-{�_��؝����_8�6Q.W����|��
<�X����M���r@�jڥ�VQ*�˳ŷ�
������"T�-����:[w�
o>O�lu�~z|�ϲ��I��"��k�Y�͸i�M�Nj��ę�k'smsQ�Ȳ!���#��SE�T�v���:�
NK���_��iq���"[$�KJ�Qh}W�ϯ�n'��u���U#
+�1�<?f�Ov �j���x�r�/�Q
�N�N�>]�7������T���ⱉ��'�3(Ke�%�/��M���Qm�و�:�G��T�T��ޜ��.o��
��T�;
+u�^������R���Oy�x-���
�3C�2���UN�=9zdz�x�n���/H�:)
+endstream
+endobj
+2304 0 obj <<
+/Type /Page
+/Contents 2305 0 R
+/Resources 2303 0 R
+/MediaBox [0 0 612 792]
+/Parent 2036 0 R
+/Annots [ 2182 0 R 2187 0 R 2188 0 R 2189 0 R 2190 0 R 2191 0 R 2192 0 R 2193 0 R 2194 0 R 2195 0 R 2196 0 R 2197 0 R 2198 0 R 2199 0 R 2200 0 R 2201 0 R 2202 0 R 2203 0 R 2204 0 R 2205 0 R 2206 0 R 2207 0 R 2208 0 R 2209 0 R 2210 0 R 2211 0 R 2212 0 R 2213 0 R 2214 0 R 2215 0 R 2216 0 R 2217 0 R 2218 0 R 2219 0 R 2220 0 R 2221 0 R 2222 0 R 2223 0 R 2224 0 R 2225 0 R 2226 0 R 2227 0 R 2228 0 R 2229 0 R 2230 0 R 2231 0 R 2232 0 R 2233 0 R 2234 0 R 2235 0 R 2236 0 R 2237 0 R 2238 0 R 2239  [...]
+>> endobj
+2182 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.703 687.965 262.659 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2187 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [199.864 675.927 211.82 686.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2188 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 663.889 246.967 674.515]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2189 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 651.85 257.428 662.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+2190 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 639.812 246.967 650.438]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2191 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.782 627.773 241.737 638.4]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2192 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [245.473 615.735 257.428 626.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2193 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.012 603.696 246.967 614.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2194 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [131.87 591.935 143.825 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2195 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [147.921 591.935 159.876 602.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2196 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 579.619 199.894 590.246]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2197 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.4 567.581 210.355 578.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+2198 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.4 555.543 210.355 566.169]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2199 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 543.504 199.894 554.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2200 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.552 531.466 236.507 542.092]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+2201 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.939 519.427 199.894 530.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2202 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 507.666 194.664 518.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2203 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 495.35 173.743 505.977]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2204 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 483.589 184.203 493.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+2205 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 471.273 173.743 481.9]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2206 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 459.512 168.512 469.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+2207 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.248 447.473 184.203 457.823]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2208 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 435.435 173.743 445.785]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2209 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 423.12 168.512 433.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2210 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 411.358 178.973 421.708]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2211 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 399.32 178.973 409.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2212 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 387.281 168.512 397.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2213 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 374.966 194.664 385.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2214 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.17 362.927 205.125 373.554]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2215 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 350.889 194.664 361.516]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2216 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 338.851 189.434 349.477]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+2217 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.17 326.812 205.125 337.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2218 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [182.709 314.774 194.664 325.401]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2219 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 302.735 178.973 313.362]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2220 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 290.974 189.434 301.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.88) >>
+>> endobj
+2221 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 278.658 178.973 289.285]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2222 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 266.897 173.743 277.247]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2223 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.479 254.858 189.434 265.208]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.018 242.82 178.973 253.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2225 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 230.781 160.732 241.131]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2226 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 218.743 165.962 229.093]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2227 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.026 206.428 165.962 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2228 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.058 206.428 186.994 217.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2229 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 194.389 171.192 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2230 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.288 194.389 192.225 205.016]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2231 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 182.351 171.192 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2232 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.288 182.351 192.225 192.978]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2233 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 170.589 168.512 180.939]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2234 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.866 158.551 152.821 168.901]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2235 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [140.866 146.512 152.821 156.862]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2236 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.375 122.435 159.349 133.284]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+2237 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [135.636 110.397 147.591 120.747]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.788 98.359 173.743 108.709]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 86.32 163.282 96.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [156.557 74.282 168.512 84.632]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+2241 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.327 62.243 163.282 72.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+2242 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [146.097 50.205 158.052 60.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2243 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 688.242 372.173 698.592]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2244 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 676.283 377.403 686.633]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+2245 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 664.324 372.173 674.675]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+2246 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [391.599 652.366 403.555 662.716]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2247 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [365.448 640.407 377.403 650.757]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2248 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.987 628.448 366.942 638.798]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2249 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.217 616.489 372.173 626.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2250 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [354.987 604.53 366.942 614.88]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2251 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.139 592.571 393.094 602.921]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2252 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.908 580.613 387.864 590.963]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+2253 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [370.678 568.654 382.633 579.004]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+2254 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.369 556.695 398.324 567.045]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2255 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.826 544.736 417.781 555.086]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2256 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [400.596 532.777 412.551 543.127]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+2257 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [390.135 520.818 402.09 531.168]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2258 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.674 508.86 391.629 519.21]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2259 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.905 496.901 396.86 507.251]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+2260 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [379.674 484.942 391.629 495.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+2261 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [387.832 472.983 399.787 483.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2262 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.911 451 358.885 461.738]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2263 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.597 427.083 425.552 437.931]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2264 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.541 427.083 440.496 437.931]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2265 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.866 415.124 427.821 425.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2266 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.81 415.124 442.765 425.972]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2267 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.015 403.165 439.97 414.013]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2268 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.959 403.165 454.914 414.013]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2269 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.988 391.206 372.943 402.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2270 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.932 391.206 387.887 402.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2271 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.716 379.247 430.671 390.096]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2272 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.66 379.247 445.616 390.096]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2273 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.597 355.33 425.552 366.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2274 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.541 355.33 440.496 366.178]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2275 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [489.645 343.371 501.6 354.219]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2276 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [504.589 343.371 516.544 354.219]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2277 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [415.866 331.412 427.821 342.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2278 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [430.81 331.412 442.765 342.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2279 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.015 319.453 439.97 330.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2280 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [442.959 319.453 454.914 330.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2281 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [360.988 307.494 372.943 318.342]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2282 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.932 307.494 387.887 318.342]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2283 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.716 295.535 430.671 306.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2284 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.66 295.535 445.616 306.384]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2285 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.956 261.594 388.911 272.442]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2286 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.486 249.635 373.442 260.483]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2287 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [368.848 237.676 380.803 248.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2288 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.74 213.759 446.695 224.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2289 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.146 201.8 405.101 212.648]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2290 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [409.196 201.8 421.152 212.648]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2291 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 189.841 378.867 200.191]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2292 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.181 177.882 440.136 188.73]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2293 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [355.038 165.923 362.012 176.771]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2294 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [347.455 143.941 359.411 154.291]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2295 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [357.916 131.705 369.871 142.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2296 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.682 120.023 373.637 130.373]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2297 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.912 108.064 378.867 118.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2298 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [372.143 96.105 384.098 106.455]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2299 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [336.995 84.146 348.95 94.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2300 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.046 84.146 365.001 94.496]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2306 0 obj <<
+/D [2304 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2303 0 obj <<
+/Font << /F36 408 0 R /F48 539 0 R /F8 409 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2343 0 obj <<
+/Length 1084      
+/Filter /FlateDecode
+>>
+stream
+x��X�n�8��+���	˗Hj1�L)�hm �B�hWYr%����\=�F2#?� ��
�:�����{M��i�7�0��ؕL"o���)�b�)��0�B��y�� ���s��W��?
.�����	���
��D����A���]�~��Hp3�����<ף�ɡTb�5�.�TɊ:[�Q4:��~����Q���Z��� =�"1�T�
*�c��
���qF)v��ce7~^<��)�mL�$�@,:�k��ة�oί�w}���.�Ra!�.ka!�[kKKE�SNU	�dM;�<�ލ����C�e�3X�`��V�+?��y\&�����9%K�6�{�7hv!V�a%EO�5���c�� 庽�W`�
��ib��9���IB
�<p��q�,/L��W`
+e�5����if����{f�4�s� �1c}�@
f01Pޓ�{��t�G�}<�J����;
s�-Ǻ�
WX/p��q:�\B�`�0�!0!�U���
�8� ���9�,���p��3��#�`�i;����z�
wk���&
gU�����Q�ZdI�s��Фe�T ;R7���p��I\$�}

#�8ु8_dz.ۗ-��>���|��p�L-�h̕>���Û��S�ۏ)-��L����wE>�H�v't��M���l���j5:�I�W����̿6��������jŴ��
�Vjqe:�.��<pG¼��LP �����]��
���G iU�l
�e�h�ư�
�@��M@����K(��*c���$��-y�0Q��1�z�+�K���z���>��!���7O�f��Н�b�h��4X䄳����d��V�5I�ł��v��T�ư��i�M���S
�>¨��ոP��fRŲ4��T�apd	jDjU���^y��"0�	�Ņ]%^W4(&���R�?��o/��c�)�X��
+��=�}f���@a\��J�E�/+�F"�����0~|
�Z�6
י�0�J��<5�;$���`�;3a����l�W��Rۜ��t�⧝�5`��<�d��rƻ'
 $���YU9�g����	���(��u����
�
z�:����ޙ}����(�
+endstream
+endobj
+2342 0 obj <<
+/Type /Page
+/Contents 2343 0 R
+/Resources 2341 0 R
+/MediaBox [0 0 612 792]
+/Parent 2036 0 R
+/Annots [ 2301 0 R 2302 0 R 2307 0 R 2308 0 R 2309 0 R 2310 0 R 2311 0 R 2312 0 R 2313 0 R 2314 0 R 2315 0 R 2316 0 R 2317 0 R 2318 0 R 2319 0 R 2320 0 R 2321 0 R 2322 0 R 2323 0 R 2324 0 R 2325 0 R 2326 0 R 2327 0 R 2328 0 R 2329 0 R 2330 0 R 2331 0 R 2332 0 R 2333 0 R 2334 0 R 2335 0 R 2336 0 R 2337 0 R 2338 0 R 2339 0 R 2340 0 R ]
+>> endobj
+2301 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [176.534 688.242 193.471 699.09]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2302 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.874 676.287 139.81 686.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2307 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.331 664.332 154.286 674.682]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2308 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.099 652.1 213.035 662.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2309 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 640.145 171.192 650.772]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2310 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [159.486 628.19 176.423 638.816]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2311 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 616.234 192.114 626.861]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2312 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.638 604.279 202.574 614.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2313 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 592.324 171.192 602.951]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2314 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [154.256 580.369 171.192 590.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2315 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 568.414 181.653 579.041]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2316 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.177 556.459 192.114 567.085]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2317 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [164.717 544.503 181.653 555.13]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2318 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [143.795 532.548 155.75 543.175]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2319 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.173 520.593 196.129 531.22]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2320 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.446 496.959 187.382 507.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2321 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 485.004 167.983 495.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2322 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.446 461.094 187.382 471.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+2323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 449.139 167.983 459.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+2324 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.446 425.228 187.382 436.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2325 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 413.273 167.983 424.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+2326 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.936 401.318 204.872 412.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+2327 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.446 377.408 187.382 388.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2328 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [151.046 365.453 167.983 376.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2329 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 353.497 149.056 363.848]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2330 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.173 341.542 196.129 351.892]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2331 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.713 329.31 185.668 339.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2332 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.215 305.677 182.152 316.027]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2333 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [165.382 283.759 182.318 294.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2334 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.022 261.841 169.977 272.191]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2335 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [177.159 237.931 189.115 248.281]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+2336 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.388 225.976 187.343 236.326]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2337 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [188.937 214.02 200.893 224.371]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2338 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [170.053 202.065 182.008 212.415]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2339 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.1 190.11 149.056 200.46]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2340 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.151 190.11 165.106 200.46]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2344 0 obj <<
+/D [2342 0 R /XYZ 86.4 726.045 null]
+>> endobj
+2341 0 obj <<
+/Font << /F36 408 0 R /F8 409 0 R /F48 539 0 R /F16 397 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2345 0 obj
+[532.2 532.2 591.1 532.2 400 532.2 591.1 355.6 355.6 532.2 296.7 944.4 650 591.1 591.1 532.2 501.7 486.9 385 620.6]
+endobj
+2346 0 obj
+[513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4]
+endobj
+2347 0 obj
+[833.3]
+endobj
+2348 0 obj
+[583.3 583.3 472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.5 472.2 833.3 833.3 833.3 833.3 833.3 1444.5 1277.8 555.6 [...]
+endobj
+2349 0 obj
+[413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2 590.3 560.8 767.4 560.8 560.8]
+endobj
+2350 0 obj
+[611.1]
+endobj
+2351 0 obj
+[867.4 1064 1110.4 626.7 772.9 1138.9 955.6 1284 1075.7 1047.5 875.4 1082.2 1030 856.3 832.3 943.9 827.8 1279.2 1112.9 824.3 943.1 597.2 597.2 597.2 1361.1 1361.1 597.2 774.4 633.3 649.4 739.7 677 684 700.6 827.6 533.6 588.2 758.1 480.3 1228 880.8 702.8 739.7 658.9 671.3 670.1 563.7 846.1]
+endobj
+2352 0 obj
+[892.9 339.3 892.9 585.3 892.9 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 892.9 1138.9 1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 1138.9 1138.9 892.9 329.4 1138.9]
+endobj
+2353 0 obj
+[446.4 446.4 569.5 877 323.4 384.9 323.4 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4 323.4 323.4 877 538.7 538.7 877 843.3 798.6 815.5 860.1 767.9 737.1 883.9 843.3 412.7 583.3 874 706.4 1027.8 843.3 877 767.9 877 829.4 631 815.5 843.3 843.3 1150.8 843.3 843.3 692.5 323.4 569.5 323.4 569.5 323.4 323.4 569.5 631 507.9 631 507.9 354.2 569.5 631 323.4 354.2 600.2 323.4 938.5 631 569.5 631 600.2 446.4 452.6 446.4 631 600.2 815.5 600.2]
+endobj
+2354 0 obj
+[742.7 647.8 600.1 519.3 476.1 519.8 588.6 544.1 422.8 668.8 677.6 694.6 572.8 519.8 668 592.7 662 526.8 632.9 686.9 713.8 756 719.7 539.7 689.9 950 592.7 439.2 751.4 1138.9 1138.9 1138.9 1138.9 339.3 339.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 339.3 339.3 892.9 585.3 892.9 585.3 610.1 859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462 [...]
+endobj
+2355 0 obj
+[444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8]
+endobj
+2356 0 obj
+[639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.6 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520 [...]
+endobj
+2357 0 obj
+[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 71 [...]
+endobj
+2358 0 obj
+[1027.8]
+endobj
+2359 0 obj
+[357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 408.9]
+endobj
+2360 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+2361 0 obj
+[625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 [...]
+endobj
+2362 0 obj
+[833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 2 [...]
+endobj
+2363 0 obj
+[670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 [...]
+endobj
+2364 0 obj
+[550 575 862.5 875 300 325 500 500 500 500 500 814.8 450 525 700 700 500 863.4 963.4 750 250 300 500 800 755.2 800 750 300 400 400 500 750 300 350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475]
+endobj
+2365 0 obj
+[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2]
+endobj
+2366 0 obj
+[377.8 319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3]
+endobj
+2367 0 obj
+[354.1 354.1 458.6 719.8 249.6 301.9 249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7]
+endobj
+2368 0 obj <<
+/Length1 1859
+/Length2 13357
+/Length3 0
+/Length 14365     
+/Filter /FlateDecode
+>>
+stream
+xڭ�c\%^��s'�ĝm۶mۜ�	�mk��5i�m۶���}�sϜs�>�z���k]k�U��
+ʴ�&�F�b�v.��t�\ aY!
F #
�,)������������)����	 fj� ��be�b`�%�;x:Y�[� (�)�Ibښ:Y�d
],Lm�=�
m ��Ɩ�.�t A��?� %SgS'7S:XFF����
�������M�vf� �/��:�w����(
+@�/�� �H{;O���,��=p�)P��Y����������?�������Z�x�W�������@����������[�����#�bhci,hgnc
+`��������������������_�v&�[и	��R�T����3�WP����E���?m���3�a�;N�
 m����D����_�D��M,��L�l C''COX��+�+#�����`�TLOgg�, -���;��s�l� z���Ml z�?���C
 z�?�	���3 ���#�^�1�%�3�^�� =�C at -��E����!��?�"�� jQ�C at -��E��(�!��?Ԣ���Z��P��j��C at -��!N��?�3�C�:�?�3��c��6�o������bk�������/���O��_��$0�
����
1���f�?A�?-��A��f��wu��
0��/��3�h�������_�5˿���/f�]��
�����
hǟά�R;K;ӿ�����,��a�f
����

�L�lL��X���_�N��Y�j�f��i0�p�2�9�����y$�@������-�C�n��
+Lw�
�
ܤ���8PF��?X��],�L�:3��\���* �p�
�
���@��]`��_l��-��#�����ߣ��)$d��xki�����Y �,l>�#���	�˿�� ����%�U65�05�]��7��Ji
-�-�,��2o����i�
Z��)
�v�Z��x������O����
��8&v��:���f����
G�:]�sρ�!��sk���)+����HY�fa_�e�I�����*!H��[}WF0��X��jXH-3�R�c�7��5w��x��� _��O��+W�m�(��r��A���"#���-��!,�����ڨg��d���>��i,k�������ڤ~�p�u�C��R���#�6��g��00v�w@�i��}��z'-��d�S;��i�o�������# �DF�X܇�T��Q
�bb�dL������!� �&��� �:��S���o�F��fs���y�߄�C��܂�[xUڮ�29�yf>K.��Q��ER@���
^�ˍ
(����Z��6����$���
3DŽ�#�D3G���	�&̊�. l���֫y�G7��>#�N��\��Z�o��l�Ztz�A|i��x�Ǜ��
+['G��H��+��ڈw����|h�_�3�:rg ю��E��
+��Z�+�YE���Ȓ�ߙQsw+�'w1�ǟ�p�I�׾�̬B�3����j"gXM�=�[*�]`�y₎$RdU,�$PSvҒZ�7F��iq|/��[�2V����59����'K��V�.�gS����"�ԽY�
�IJ]m�n�ȳ��vg��d��4�
��l�[(���$���i�
�`�9%��[r���ⱚd�U�a�dO	񏆐4ȄkX�1k�Ϲ�!����=VbRHy52��/�t
�68}j���K�Q�vH��5����J����$
ds���6�5�q"=�b
+�^�-i��;Z��aR�ٷ�p¬
����9��!4��
tk��Q��Y�V��v*���4�O�P��^
+��>b	�f{㮭�d
1t*ݣ-u�:��›�v�I}�Vwh�-s9L��~��b*�
����I�(=�nb� ��ey�
�����U~]*�J|6���L�di�
qά^�)�¹N:�d�})4��5�ϩc?ʶ5{)�
+��5��6(�
��F��:��Paf��6+�`h>��5����w
:.�=�C	��@�84�]��F��~��zDe�=���PkO"��:YYq.�lal�)����v4L�-��sDK=\�l
�Ci�
�O�)��n�_�`ʿD��F�].�M}*r��#P��o����5#o�S 
�P{���qM�0~gB�	(�

��0;�psЈ���:w7.�sv���^8
�O]s+e�
�j~
1u�����
��d�-X��]�{�b���]t�0Mh�?
��A~kJ��0�oL��@�:jD�K(�@��ln*�_�������ϯ��!�Yc`2��f�L)����|{�ܦbQe���1�{����
�x���F��b���'��̌�"�tܗA#��[ZFζݝ�ԥ>Q�zn�/϶*�-9^�'�N6'GM%���N�&}��h�ny��)2(���
��g����6���(y
�$sa����0:͵!�T�ٝ���Yv;
q��A�����C
�ޥ;e�I�zj��O�_@�`B�X�Q��@
8*+���Ƿ��	��+@��6=�8������n�0+r�C�{j���m�3�2;�
�xMj
����Ǚ"
�G
-�w[J7��\E"����\ׅս�T{��gO�W�OK������LYu���3��y,q⭅�Io�vl����KV\8�.�-�2d��r4E�G4�v}���q�(L�%�|!_
~Yc��b'�̳�#w)����Ҁ_�!�]�
%b��vc<d���z9�}!����4}��W�\
 ��G�\�l�g������E
����2���	�����N��^�MC�F1ד?����g#w"��X׸���?
�1	j'6���^,�zv
F��~|b���6�ne��1j�.�w?6�~�u�S�N�A/�.:�����oz:��l,��W�#/C*r�
~�׉�~�"DU����և
L̽jQ����0����������_4��?K�W�i�
�z؜H���%����+Qx��6
�k�ﹷ=
k'S��X9d8��TL���
����L9�Ǟ$h�Q��y6ܮuE0G*f�2s/ݐ�Qb�_��A��]�a�
�M�ͯ��R�
+R�r��nͣ�Rj�E�w�О�,GP�8|^3�,� �x�/�s���λɑ��� xҦ�yl^�nV���
�$�Hŵ��\:�_�!+ɱ��
�eLۮw��O�̑��߶
Wp����,50I*)�)G��2��	K�&Oq)�}���6��))�^�ve=��@mJ��W�w��v���b/�� �f#��ֈ�)V|����ß�䁘aÅ�p3�"�
;�9�I��i�\�C� �m�]T������ 	��x_
������������S�_!Q����7�&
��峞�*�
�D��:b9�lV5`;	
+���!���1��Z���a��Zp�ӷ_����S���x��
�[�6
v4�������e,��[	�������)nI�Z�?�ɷ���P�O#�~�t���GÀ��E
S at vy�n�
�e�ƘW��W���[�ۺ�a����$�g�h�O
-
�sU�����p��M�Xu���PD��iQ�.�,�C��O�Ws���Ó�]\�,��w����*e�!t7�uB���5�� U�@D+d��mB���ÞWy
#/2�𐱣���e�'����P�R���X�p	��GxU���`ȍ���`I)��G�ٟ�
t�LM�
���-ǀ˸&W�J�\-�a����vc��F�3�i/f�����6�J/8�)o!�����<�i� ���ˡ�҇�gqB�Ǧ�f��OKL�7>�?�KJN)(�ݝU�J�0MѢ�fBR!r
��B�^���(���0m�r�����橙�0e5��m-�?JՖ4B��AF�6�O�	� ��LHvw���h��a���2m��lFD8��l]ϻ�!Hl��!E�
�H�-��1B�n�������L�·D�p�u�'���9)��Ȝm��E�
+����
"�w���Ḷ�
D���
\?�H0D/š�Q��`:��ƻ�M?f�Y~�,\�/

��Uc���F�O���պC�hZ��͏�dt��$�g��
��I%��Nn��������KRL�������I���3#������<XpQx�Уa�+�I����k?�
L��\<�	
n���+U��vJ��v
���j���+��P�JQ�
�(}����&�7K|��µ����m`{ӥ\h+H�%C�����u]$�����o����q��&���̥��Q�%{��qO����������)�7�K��h5Li�A
�RS6T؂j��DֽĦR��vWѷ���V����H��K<���S�A�����n�'�o
� 
b�l�Bn��qX�5�t�A�*L
�S��T��h�`�l�Z��r�`�r>�NV��	�/��g�_ӈ�8����<Bdx��"/F���r��lL}N�Y
�C4<�&xABg$�I��'W%��0��)�k���4y.�x:�!�����T�y�s���y�n�!���{�9|�d��X?���ZQی$��6m��c6�}�&\��� :T=N�b��<��Cyq$��e=fUX-��$V
�x���p��a�
���x�_t�R4���;9�A��jXa�"me
�ܓ/6<��`�
E���d�������d1�BݶG\�m�Q,V��}�Ke���O�jRW��
Vnz�?���XRs
6.o�OQ�aK���Q��&֦��
U�
�w%ً+��9�B��~�0��e㯈s�C5F�c���j���La��|O������]6�ty�f!��yi&�l�f	�"V�4�v�i	�
�'_T�B��NǨ81���
�e���.}uL��o��apx�g�
#�ܲ{cEʃ�����A���MV��+�[H��˯%�0������V��m��

��j]�L��
`�{�:~��0g�y�P'Io����W��".~�si�l�9\S"{���+=_&�����m��/5+�Ny0-!F�
����j��Uˤ�P�|T�2�ߠ��������7��+
��\�O���Joz�탏	e�y6>;H�UV?�<ޥ���2u�..
�#c�v�e:'ė�\2�M7��+.r%�Y���V $�Ha�R�x;�����t�E�ha�)��kz����u�������� 
��ӹ5��W��';���Z�(���`rs�3p3�m.~Y>fIR%
+�B z���G��Ўdޱ��(����y%N�imy�Y�Z4�!�@L:�w׻��}()0��bD~�K"i�qYZ��#����b�:{2C^��}��(��X�ʰ������0\(�z�y|<�CB$k��
+��k�HBg��[g�b�
�
��
��M���
!ׁ�:�8����E�¸9���H�
z�?a֟Z��QC����AMN�����מ����ڻ��Dȉ��+_�l]�-_�2��
+Q�\;C{^
�`�R��*y�R��\qxcS�L��Tg5��������
��j���ɠ� Ѩ��8�if���WX��A)�>¤8�;9
�
xd��3���(ۄNR���������ҭ�-
�M!�G��቙G�ʉ#ZxB-R���� K��,�%v0�:�����k.Wl�@SV�v��
&���—o�@���X/���+~L45}����z

��_?�Թ
+ؗCp����C&S^~
��XV�+�y 8
G��zW&��PB����3f��S�c=�+q�w����g�y�P�jI2D�}�ķy҃�oil(�Vp�稼D#/��M�ǚ;��W�w����䚺h�t
+~��,��J
�E~G���U˄�/⦯>^ʩ_�/�c��?��m�h\@e�ALr���9�Pda�9�6SJ[9�0���ۓ
+��򋱊D���S��O���LBɛNZG��y�>��ޭ
Ń�1���8О&��n�M"i�M����9x���
L���(a��ɖ@B
�L^����6��1X<��
y���OIګLv�v��D��z�o9�Ϸ�[rM#��
�R��x�X�����IH��JhJ��	�&
'�Y�"�
; �*t�oug�4�IV�8���o���M�ʋ���!�{�
e�8�<,���%|*�"��G�\N�
z���fq�ԣFҸ;6���h
����겫,��l#�֯Y؉c�*��M����8��"�(|�����
�xLI���4?��Vn��4������F�p�0�����;�W�|�E
�twkٱ��ly
4��]3V�4y�Q}:��c�e�M�ϔ��]{�� ����w��)�V�:�K�9�%&fTU�P����D+�\9��8#�s"�[�&��2�&���tbXJ���#����և�����Aԝ����vSW�R��
��"��.Lnq�e�(W�a1D�|?{���~	},
!�/�r��)�Y�]�8Ϗה��`yH�ׂ����Yz1�� �^�������i^����:�dc�=��wz���z��}o�[��}az�JƉQ�2�-7\��~
	�AW�k�6K�
IN�U�0�u�j��U�hvu.�_�/W�Ɇ�4-QF�
��3���-[��A�	�P��1�����m��U�sw�6�A��)��?���U[`��U98
а
���G��Zi�q�����͟BLI<4�SN�p��BK�ށ߾�P�z�"9�.T�-&��j���с���\�ua:V�]�6UI�N�Ё
}6;�Vbh�:��M�P6?ǭ
+��
+Z�k=�)eW� �����6:8*F�`b��'�xfB� ���g!n����\�CZM�(�J�hho��x�QȻ:<�E]��D�}Ė�(-�Vu�X�
����������(�F%�R~ѯk��#��	�]�HX��@��5�3<��.��X��F\;�!��g�p$�߯�ē�n�^/1gӄ`�v����Z�"7�+�#]�>Uπ��s�g[+ڔ9��[n-����*'�Aڍ�����aQ�'�
��{�i�q�G�p??�3���o��o[�-��\s��.��z�
+��??k���}��H��2.
+���S�'���㧝��mT;~p��*��c����V#�-ƛ���\AZ��|�A�
���c�>
��j
+,Hψ
y�/S׬q����S1
+�	�X���Q0�|����"�'��Lr^#QU�b�x��.��\D�����H�]+^a��Qn��R�0f�m줺,��� �NJ4
y�$��1���JK��'|:�=���1w?�bIa's|�
���A��
W4���j�~��+����j	]��\v-5	�v������6����KVPi棃���W�l2��TՌ|A�k貮
�vqf�����١�҄YV!��Q)*����n�(��ݕ�����#��2+M�K�����B�gv#ؒ�~��X��|[䷭X�/���Y�c�*
�a��H-�7\�N͍`3���Y%�/G��z�P�9q�R����X���_D֑2� �
�)�
9����Ik����v�ߧ�B��MC��k�x��f������5��&P� �z�x����Y��ŏ2������r���`
Zɜi=2���q
��$�0UVG�z#k����[}m	 �;q
N���i
�

F��PR񕟰 `޾����~Շ�p���_->�"`Ly�����)���AT��X�=
+�~~�
.�&ﵪT��:�kޞ�%�� ��Z��&{�O����mq���>v(��Y�T>�QͰ�|C6��u���� �&;4�رf%_������H�3�^ɬ}'�1�p���R�&Ac4�H���i�X�W�^'|c9؆^b�'���G�XهȢ
����C��4���b���H��?��3���=G��
N����ВE�:��z�}oy<
~��+�u�	�~ⶾ�sЍ��'�J�Za�xO ~z?�:��ݞ�V� �5��Z��b�Q���l<l ��qv�hT:�D)���*9cv�r�4��"qT��
+'H�Ss�2<1�R������Q^���@
I��xN�%��;
�6w����5��p��eE��2I
�g~��}=�瘄��'=,X2Y6VqqLf�qU$x� k
Z��D
����� �
*�z
�gK+ۛ)戕�
K#$�*
-i��l݀�2��{�J,1wή�9��qm���g��"굁�,�0����/���|�[����j<�w��-󾻹�D�=�M�zI"�GgQy*J�����\�K���|̩ױ��"�k��8ʳuP/PP���`�Q�Nm�o�������	-����oV,
���p�Mb5|�?��4kv�p:���G���Ք�T�IN�0�21{�0�`��ޘ�^���5ާ��"a�OF\L��W�%�ӫ6`�܃<&�t�W�B����Iz�@2$��$(�d�F��*�,[��Eڰ݊�B���VN�?�ʇj���E�m�����{� Ě�2J`�f$���/�9�F�/�h0����n�(�M�a<q�"�����ޟ�|�T�9u�R#d����F9FF������N
���
+z
�
�_ �����|0]
�T��6��a�F+u����/�����������5�;9�:�������n�ɹ����=�ZZ&�V�V�
g!nj�.�IV��dz!�:�n��8�Ϝ��	���h�Lz��e8,�_����¼=�!@����Wو��{��䛳��w;�P�xV����[�K���M���Bw^vܙ�=�=���L��~�����׫ ��
t_-iY}b��O��6���m]���G�HKΥo��ƪ
 �ϙ��B �>����m���O�S$h����N
Z|��Q�`
+��`j��m��-�>�g�+f�nl�ǥ`�=,�h��:�Vq[�]��
+�e#��=?�b� �����2S?�d#���0�d��a�[qxĈ�4����it_{2��b��\h������]�:��I�P�:B�He�|m[��hQ��Z�����m�
Z�*�|
���Ns�)��!�uSx����z��r�&�CY0~�
E5�K6�t+��A.z�����R<硸i���n���-ʹ	O�"%D� ��L��!f^A
��W~L2እw�R@���JzӰ)F�
��F�
Y9�I_�_�g�2ߩ�o�������5��������~� �_���� ��%k
�b_@�1�2R������F��\%�n�
G��k+E�1b�t�n~u�
Q$�1�B����
-?n͕�8�R����$��E
�r
}�boJY[@ 
<��u@G���b�v�x�{qLQ5��:[���oH�D1=!m�Y�_�v�z��v�%%�
����⢞)X�{I�.�XSDf��%##�
����a���pr
���xm�P�6T-���b�=�*��'ȃX�5���v�Wh����1��
+��KoɅ_®�_�_�ߥ��2��4z�.%VA$X�V�W�t�g�$����ك��_����3�'
��JšFQESpt�(�V9��j�0�N�9(`�0*ޜJr�9}���\hI
�nȖ��`"gP�	)yoL�J7��G�C��/Q��6����븛
���������)��� �e�]Z�Hj,�C�w@�c��}/�."����	
$��ߪפj^^>v������OǸ8��i�X�md
Vtj�vM��ƥ��_��R����H�;Z��Z��Tz�i�j��G1T��2N,c�$�G�="֋xG!�W���.{����7�#��0uxč�lyq�I�vx��U�@�Sf~n�S�Yx��D[��YH�"��b[^d����{잾~�y��٬�1ȝ
��.f�Կ��`DJ�N����H#�pʂ~�aKr�9�\u
�
|�P��2�H#�����=�k5ޑC���kR��(�|S�f��W��
�di�$ǙW�1ϼ���<Ew�7̷Vб��M��ʧF�ᢵ	���Or�e���	�>�'dq�D?�����[�*����{���_����C��!��JC�
+H�mc��
.&%�[��8��3��&�=	��*f���E	�P�0<��S��U��[e!l`�������Q~�X�J������hrU
J�
ƣ�]_VW�%�3�4.%Iqk�s������s%�!��� ���&�ն-
���W�z��Ҽ�_���J,=)��.�h�bb����f%��6����N��Z���7������<�6;�ef�8t¼ւ#�
UQ�gw�D�%+�IY����8cu�zB
jn4"ht�⧰�R���t2�V.�l�hL�2��)�VlIq�!�l�
�5�`b؞ই�O��o�����'�	ޣ��Ō�*V[��J,
��	�aK����lvt|r��b�I;is�I�
ɕ+:Px�Y�y��3]c��i!��Q�οI��Z1��E��3��0�����#�}(��0^��#o5=™�f�Nb&7�S���θ�����5�"��
P�/���	O�XB�Q��[|/�H���uHpC|������EV�H�C��tuL{��H���"v��� [...]
+�X�Op�2���
d��.�� ��3�e
���!�
��}���}�'���xS9C�8�.Ƈ��*��S�A��{��µ��
+
aS!"��n��J9|Գ�SS�$_>&
�u���y\��Dխ����;���f�����y�gLSˀ���MG��'+ۼ��$�\�\{�"���fD��N�zl\�k���u�����w�)n��
l
+P&6}���W�U���j'�_dg at k��9����
&Al�;�%��`H a٘ܩӊz�#k��B�~�yq'5
��)?y�Q�����	��OZr.��Q2N,��CC��I-e�;4륞ΰ���<�p�D~H�'�ސ�f>���Z
x�,�
+��KpKK���vy�3�mO�D�Dȩ�s��l);5�栨Y]��€7(��qYs��R��Hg��C��j��"!��V1�L��s2�Hy0�V��P�NhY�#�YEWCS�S_	'�Q�BTh�_�:���#��f��-��D�+�!k4�=q�60<ނ��Q[�E�p�ْv���ɇ�Ko��>�USk��D3Ft�}�K�-�]�	���h�����������$&�x�ZhuX�Y�$N St 4?������0HL)��R1���!E��g@ �J�n�亲u���%P��k��iڮK�7���{��vYt��E�,cI���jf� Y0��Ж���C"�\��KD�D��us��Ъ�g�_ܷ�=�
�k���+
b��ڇ#!�3o��ҭ6^�ʡae�Z
�\	�Ү��K�v@��((�%0e���Q�f;�~w��Ajg�$���
#F6�<k:F'�R�Pk*
Z���^(�h�2%�=Y��Z�Z��9��|������$�xksB�L`�qJ/@����k�4��1N��aP�����J���g^Q2�c�m���Oe&�P)�զ���X�@݄��+dH��@35^�|
�W\ʹ�7�VQ��5�R�����0H�}�c�Rg�q���Y�'NE�bS՘pE�ڦB�Ay��4/eWO%�������Q�Ql����ʋhw��"?G�.��nlS�[�j��8&�r�^�0}4����1L�����K
qJ�ӾE*'��(�H��EGf?�b���xS�
c�0	�
�W�Ӿ񄝳�X-�?��	"�J6��l�?u����r�Q*$5���I7���((k��<��1}�^M�
:�ߐC�k�}C������{�N���Z55��-��L��VN�B��OH
d��D�$s%� [...]
�5���k�i�Ĥ��M���]�X[�������}�'��V�֧г��}��g�_8E�����s�~��/.��v]��y
+�g%�F
Yo�
+������<\i'����u
+Eʹ�
+7]c��g��l{���_?t;�|�MV���ܒ*�%�����
F 
<'*��=�H ;ZfJ/�"�$+�:�ٱ́
	pg(�D�Z��~ש&ّ a�JN��@=�{m
��%�� U��O��7j�c-�%�+K#ߊء�fr��m�D�`�#��
?��+X'�pK�F�&��~Ee��3�!�o�-
�Xh�
/>��g��9� ���U�EYFY�*�A ��֫�WÚ�R|��f�� tE"����B�f�v��:Z:-l�/�yK�
RZ�*�B��G�:�5�S^�5�H%�r�RFY+A{��2 at Hx�
�@t�0�s��X��Xՙ������.�%�\�P;'zq�oE�(]:��&D�|�y������mQ�|o�����
qa-�RUC����^tCwd��jM�i9d̀$�pF�7T�
+��_=��EkD�����A�[�iYB�
�D�`�6�)��V �
	�?>��Y+�}
byQ�gD���-��\k_������,
��i at y�C��fĩO�^���UvT���N��u��k��������F��H�Ɇx$��'b���"�8YвN�
�5�	���يE� ��lР��3‘������u#X��r�D�uB�zo��FfSq�P�4���䋄�,a��X����}r14�P��y�F�5G9�
D��µYT7�JĄ����=���%:�m "RL���U�2K����~��̨�S
��'P
+�7�x�T��.���D]���ڔ��Y[�?5]��P±���\͑A��k&��js�
�1}A���1?D��ZZ���9IItܥ;~�8�ب��
f��輸�n���bszL�ř\/�SWӥ���zN���
ۊU�L����!���j[D�f���6bP�U]�h����&��8�࿊�c�"�2���o˝d�X݆�Q��Yr�h��o�شP�����n߬��OoW�5�>�#��D�ʩ�(6")�`���j{�N�aiZ~��@�Zy~�K��Ȼ`�]ϼ��!���f��Z$��w�/��J�C�)z_I%�T��mp/��#����V�K�:d!.��l���G�h��<9���B@;V�gk}��Gmi�9T��uY����ڪ@�O�6P
"�Ѣ<pt�e*H�#��^�=A[kW��c�Z˟Zp�`�f��,H��*�=�غh�=�[�!��!��O
.̈́�}H�,�
�Ȣ�It��
j�Z�!�3�,
w�^�c���
~��]��
s�Ȼd5�W�N�S��_m�
�g��I�
+S�i�
��L94 �XX{�'T���ܞ
�?ɩ=3�'�/�$s�6�������Ŗ6g���c���>�?��e��1�%a:?L�t�X��I��i2�6=r�lOAFڡ�k��kpS�D1�P�����r��{bV^
\:|��������~JJ�%ئ���H!�M��԰�/+���L�$`�]3���j��s� �ږ'VR�J����B�����
�$�d,^y J<���
2t]�����D�K@̺}�Zkȃ~���-�|�UoDx$
�`s�9�#�J�ҖN;8�t�}���E�����B�yˆ}���G�
�{7��P���o�&���
���G�֯�Ė��
0:�/
8˭i)]�vۮ���ߗ�N�f�Hͣ�(�����T����r�
����8(�'Q�!���t~��N�.���}�&c�q�{��qc!��Zi��>ke��
��#.1o�fxЎ�l�L�}��^g�"I���Luxh?��/��I5<�gb
:h�+��{q��������Dh1?�g��W�6�Ͼ�~⎴s��
E�wO��������SʺM
ڔ�A��<4:�eL�2<
��¸�Q�{s���j�Z��*:�y�=��lՋLD��ҫ�^ZT��n��h,&���鮧�A}��m
m�R��q�%.���-[���r��t}�O2���2
>�͵���^��J x?ݘ�T�FA
��m�ܮ
����S�)tC�<��?ǂ]��
�wٛW��_4rq5��H~ �
�*}^�?zC)d�\�9���4ζ�3
��5��k�P�(��Н����tJC�V*x�d���lϱ���=l ���)�,���ɦ羇|�
�G
?S:���t�7�~��M�W�����g�\�y]�L���M@&V��
I�������2�J��G�J�X��yZ���=�W�s(�Z/}�ɦ�&�0OO�*�$؇�\��'�mϷ���:�_i�.u�1$?��)�-C�M"���l� {�,�,�3�`
+endstream
+endobj
+2369 0 obj <<
+/Type /FontDescriptor
+/FontName /JPYRCL+CMBX10
+/Flags 4
+/FontBBox [-301 -250 1164 946]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 114
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/b/c/colon/comma/d/e/eight/endash/f/ff/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2368 0 R
+>> endobj
+2370 0 obj <<
+/Length1 1761
+/Length2 10869
+/Length3 0
+/Length 11837     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX\ݒ�!�4��XpnAC��M�иw� �C��;ww	���{��!3����OߵjU=��צ&WRe�`1KB�
��,@>��GQ
 ; �†JM-f6p0�X�8�� @^^ ��	��
 �������D��Al\��LL
 tb��$�|�ۙ�
�

L�V� K�*dvpe|������
���9��XP�@���`61�Fe�G���1���a#G��^r��CE�"�P�FkKW���U��*��!��t��T0�����\�?�Vf������qt �>B��v��;U
�oq����F����
����
`�w��^��l�d� 2Xڃ�[�o	P��%�UVJMUM����
̬
>�����?��b�
Cݱ3sh�����������_�$�A#3k�������BO�� n@���� v�*fe��8@� ��x �!v��<Nn. �B�&n ��
�����U��x����l V�X�^�
�*�B
 V��z�BP-r/�"�BP-_�EᅠZ�C<P-J/բ�BP-*/բ�BP-�^�E텠Z>�T��
A�k���g����:
_�	�qA�@K�;��N�"VV/��l�a��B�4�
+PU�>�/	��_�2{�����*��:����������E�SWS��_�_
��/��h�B
�zA t��R\Э�f��֡�B^�C7C��2T���2����
��l�b'�v��'N�s6��-���#z[�OG�P
�2���E�?v��.h�=���O'�T������6i�U�`j��@'qp���Z��/����B�;��ȡ�]�Bhy׿���q�J_�v�n��0QQ��3��0�CU�P��s�y��D��
�]�}
�7������]� Թi���<�&��S"{��VԤ6J�W�D3��l4�eހ�-��O�������d����M��Ò�>�QISO�N��)_�5�R>�n�P\�
`6�L^��U
_
,����N?�9�R�����HӮ�T՞���^C2�R-(�'
�
+V�ma0gВ3V\
��o?O� �:ƅSH�#�]6rf�
���g�k��W�
����k�Jo���
�̏ɚ�J
��Ҁږgᩓ��L_��Zl��&��h�*"��,�
+�}�a�МC�SUN���v�G������P�4����su�W��ժ���ZI�@ƒ��t��Tϲ
rs����U^ɤ�Q��w�%s˃�۰(�����e��g�
�ω�u�r
��Dي�:��G���h�U$�� ���Jݠ�xʟ�q�\՜��|��&�]%+W���r�`�7������Qӡ�P
�agwψ�*���-���U̔?Y���r�YfQd�Q��&���'��s{��B�Fw���Sd��W�+s0�[h�3?
+쒛�ߍg|���?o �e���%xm�f��=i�L��v�QM�"
gSOzI�7�K�Ċ��rVRzg)	�e
�1�
�������AS�~�&���z�� ���/�`�S��`c��w����O^��z9 ���=�U�o�D�W~����c��v�G*���@
���,{FnZ��9����w|}�OB^�����rx�Rr�;��ې�N�������8���l
�x���'����1H_%��"f��c>�P�5�k4^Z�-Eo���Cb骈ߗz��$[�3���ڒҀ
^��k,���`�0��{9���`1�(�w��'��4l�8h:�-ô��gvZ�1�1�N�DB��v���n�N��np�DT6D1���"��i�K���Ү���O:��F0���>���R�J����k�NwK��R4L�a\�߄�p�-٨��h���_-�@p;Q
��O��Kљ�Gƪ��~���B/.4藧��~�C�hx��N9W�
��/�X���("�V1�_�wܛ��=�V���&SN
�~"�y�ɋ9�ϾQ�#�!S2ۂl
V���<t�.=�Kv�5�%B��
+�׎���!�-\l�jTIpGb��
>�t�'���J~�����Up�sP
�'|�]��S5MsBN����dK�����ߠ!"l%
:-�p�!R��+���L��;Z
�߃ZV���������}��Zʛ�V���X>~��M�u�uh/
���JP�,�;����
`��.�6c����!+
Xj����ƍ,�
+2�)����O�l�e��{�cJ��y
l��&Y-8��fT}0Sݘ��H�Pzƣ��C
G� ? �b�ʮ�\VE#�8�����2u/���sI��v��~U�
+�1�bҲ�9^�qe!E��ק&R{�d�ȳ
}y��1E:�ڮci�Qt���vx�����+~��f��
�5\���������A[Oi�}ր��I��Y�Z.Pu�#�Wߊe��-�����4�s}��_��$<�>�K<��
�[��
�
u*���-����H�[t8�'�u
�ɔ�)��$(˼h9��w]d��������}��
�6�u�һ
	U���I2�e���iʸ�v͛n�hrc6��m
� rB�v�񀡔D
d����k�$
�|l�$�K]�e��ν87d'bZC���M���3���:8�s�r�U�.�ޯ� +1z���G� ��������2��ڂ��47T�>zF
h�	�:��U֚�
,�	���kR����*���螬sy놳_t1��ك�טc4<� 9�z%��������&�
�p ��OLΓ:�E�UA�@��	_��oZ�V{�J;�G$�z1��m?�3��DCjL�N
wtF���֚ }�*�feh/?f�r��q�D�k����ST�c���5ĩ:f
f�$�O�2��I�^٥Q��ї�r.��t�U�Ӷ�zr��x/�-��������c����1b��fW�T���wX;o���We����ўf��k�����[j~,��T-���S(=����8�E�6Y�xGI����#�@�	��_ޙuWT8��ލ�.�:�,�uva��h���
@w2/�!-��J�c?��(\ �CWI}�O_0$Ž�d��0�-P�A�]��l2������wnIm��2��g�r��H�0 {J+.�(3��(g��ۇ��cM��>�'-�8�����T
峨�҈Ki��y�p�P�g
��^'4��pƅ
+}N�zFW��7�>��bK�@=�qݐ��z��tא������1����#Jy�R
c�-��]�=X�)-�
~R�Yj�e-m�͈�k���_F6���^�ēUP
+~
1§
d�v�k"�bb���j��x����H���|�K��ǢЌ�
Q��ߞ��az)μ�m^9/g�6�p�~b̭�uqG{8��ыT(ޔ3
 *�h��
������j��
�'��c�nH��N뺧c�+�g��f��j���M���D9�Z�4|�	w>�`����/��/.D���Mke��GJ�n�C[#{m�K�a
04
�)�>���!�	\'j�)�kεs�h�ٵn�x���*�9��$]k0ᨔ�f�\�Z�|52xFPk at Gq�2"4|]*�(w���i·���@ex~WG�<|(z�A�w�{�0�)F��ʀ��\�(����P�n���cn��˄��k[r�ѭ������� ��w���̂��3�>�-��Wv01�ϊ�'�1��`�,�G'�_i����&
+��7����,�U������7>g=�H �T�GiT�b��i��
e8������-rL�qbk%
�[�D+M[³�a���
+7���w�H�2�I)�z�-���"��f?�Cj��sqL��m�b��u�i�GF���&}��.(̐����1��;��Bt\j�+�]��_�v==_�40w��
�P��͊O���2�-��+������><�o�z��,�-7g�s�
"8��]:j?
Ćٺ�8{��92P���M�E[�Z|�@�s]�Q2J��çcp�2��?IΈ�ƀS������Fk���,�1�
+瀎�
+6�1�=Y�o�r-X7o�ʶ}�NX4�X���[3�Fj�����w�.��y�#�ϳ��]������op��]�͑�����}5r]���+�O�1;v���S�F4�xJI:��}��M������ �<_���N3��l��a�jG����2�:����*�s���C�����o
Ϥ̞�|���f��?�`�~K��~���z�ΖP,{����b�cLi�)g��c�1��
��c�c �-�'9"[��͓�� �<[x��Q�_pd1U�!h�	n��}"{R�Q���.���-�n�(Ko�p8cmJ���J�`��7'�]2�E�bj^^-�+�fC�>�:��\��汬&�dWz*x�����
��6�K�����Şq�\�5ޏ�������>����uJ'�jwf}���X͔u�fj&][i��)3P^�d8M=ښ�Q>������G��������-�H]@�w��$S��*��
�\����+-mP
`��U��.&aG�
�E�f:}��.������4���[�'�t%�n�6o_ª�o�98�9�#y�L�`�dk�L�։���˖g ��b4�ޗ�2V���]���Z���oj����֋�S�{s�دI�N�KDf����WLZ���u3���Q�O��
H?S<�mS)�]���
��&:$��JQ5L�c

ĕᔯ� �y�� `��F����V
dh�h��c1�^��>J��ڎ!bs4���*.�����ۙن�`�y�-*���^�L��u�����ߵ47�8}%0,Z�J`(4J���y at 5B֑��FI)�f�[��!�s_���e-H�-
��Wc�N��hv0�?�q
V[+�
%a:>\#�����
v
��
���tS��x��\�t�U��USa!�>#H4
�����2R�
�%��?�_&3�
�y�m
+�<�R��M��>~
���W
	_yt�
Z�ۅ�;D^r��L'�Z��!!�g<D�$�*v��&�T���� �,
.�wr�^�^oNv��L˟�Ah���x8�-�:
�5����pM����>3�ݛ��Vv0��,�"J���'��ۺ]����o=,�S�Ta"�W���~r�e�z�a�s
�4��\�b�0�ő0�#S�&	��z]���t�§1�@��ɬ�v�tA���˨��c̽,�_��3o�f��S�HbAz�J�އ	�	�#�$o��b�
I2�&�}�����`�]�?Z�3����ˁ�u��Z2lx�eHUO�Cq3K��Le9z
90'G��\�y���.��OtI҈>Mr>�����Vg�?���v�B�^�-��n�����P�H��hf���_l�q���t�yա\C�h�F
B������d�߮�_�+�7U���j~'=?��t�hM5ס�
�XJ�귊���(���M
��'�b��x�p�C0+��ɮL�~\v���)��e>~�.sC֪��
+z�H�x��y\���~�,t�F��@O�]���擥����8$�]�
৲��b�����bq���&vX���WE���
Y� Ӯ��(A�uYd�Pv�u�Y�̪�z�d7(;vN\P�*~sŒxa��9������V[w�M�ݗ�s���w3
	�QG��M=������Ċ���q�3�=�@�R�m6n����kh����z�
/u�v-u��Qk���Aeg|̳:�{��T��0�Jv��#]�4�|z{
la���ʍ�)`
��M��~
��(O�uG��&���
�,�<�T5 g�
+r�9G]�G&�!��s�`"�r����C~�O�4���s� �`��}�h�#�7WB�0���+��>32>3{�lo���y at s�oa��k�%2�P������*o{
��K;3J5����r��������
��h\w
_
ZW�~\�O|�a��CУ3a"��>���2NnXyx��Uiacq�BU�������a�"1�kϨ��4�=z�
������B{Ov�F��d!H���l(HI Q7:�h%'���{�����`�P��4�w�>
l
:�;4���Y:��O��h
���f�p�aREw��!4����J�

�>Q�8���-����Oɣ��~�`�PS�U�!񷊏ٙ�#7���,�.Ru�k�d{|�yU�:#lY3gH�giT��|
�.���d.]�R \�W�&�7
�*�_Ey�
+*�
Eg����a�]�U&��O}���?�O�"
�S�~��+۝n5����?6B��^!2Qf�Q�=�Z
�
�j��?Z�.
5��?A��̍����V,S���5���$��v�G
�ĺ^
��T�y��Y�®�ER��l]�
���Re�s�o�o_.�g��0��ӵ�9��Z�H�^t���޳�j�t� �X-��b\|�
���(u+kt�IC�,`/5L��E�<4G=��$�� �xh��eN�x����w��1B
+�
�����mv�C��g�5�
�.+�z��E
����[��5)̌B�DfM5��.v�i����[2?�h
�R�콣1��l���֘B�
8Aw�Ƕ�=�{�
+)����=[�`�߼,p�0�U,b�����밳�gL��
+xݷ3�K�?.���Qɫ,d
�M�6P�?�2�5E�~@u�+@���0+9������҇|QW~HW�
�=����?{"p䮛�����!"$T��l�>6�Z):N6��ZS?7֯H�tޯ��,2J��_�aF�%�r
%����,/�υ?�+��+�A6�	�{��(���C���5P\���׈�KڧK�
+�����߯XrW��b���kQŦj@ 
�:�>6�O@$��-����(
��ڐ/�gF�a���vv�G���1
D
+:�%�n
Nu��k5��D�h���'qE_p����G�u��gA�o���~:��J��|��
�f�ԏ����E4���~~L�`#�*-7�=Py�h�k��P��n�r>��St�����,��K���Pj,*�V���}��a��'"�3�Xf(�ݤ��?ʅE�:P�;�
'{}1q%4�
�
څ}tz#
�>�ok�"j� 
�Q1cUk|��.�ޅ{��M���Č��O)���q�09Z��l�J���� zs�����4z�0?��Ճ|}�C0�O\M��fH��
+��k
����^�R�n'�;�߷��X�Foh�:D�k�
���ԃ�#�&U���ka@�D9h��׼�E9�
+C���j(�5�5#Ԫ�cR�6$�R�+�#��K&��Z" Z����;Q�9�c�ݐkO�A����k*�=��e�9��iW9�z����ތ�
\@��n�i�lh"��&w-���G��m��R
���+>5��3�b�֥�Z�(�až���?N<j
=��b� �U8�{��f8%a�&gJ/oAQr5���n��
�9�tx�˻'Y�@�؆�VO)��(SǦ�w�u*�Q�f��c�N7��]�%Q��i��;���j���a��~?�唖�+S�f.j�9g3��l3������'��J���
"�oh\[��b��|�������n�����^�'�S�6})��Oy����B<e��kd�0���M��~��N-.�i
Kk�>6��>�t���
����Ɂ˩i7�g��bb�Z(�~�n��
��gm�0C�	).L�1���6�˛��+�
�
Y{�1��
�-�ER��,��#�(TJ��Ȳ�~��q���p�F�
�,c�;��ŷ�.���"-R6�i�i���u���y.�:�.���|���%��"oV�'7�^��
��(��W�k��<m�%Ӆ����"�˓�A.忇��p�
w,�'�l�h0�j�3���A�'{��d�m���?�WU
�#0�=s��Cݏ\�-J��S�W����ᐅ��{Υ��Iaû���`���}�����[6F��	
�o03�N�ڎ;��3�M�8��GH�!\�&���Q��|t���ZJ��b�t
 �M��CG
K�ۼlu̬�k���
R�8c�������ɤ���?��X;�q���?��Dn�J� �2�ZƊ�R�s�ݍJ����ښ���������@j��Ю���"�v}_�o��q3,yMг=(
�+���,�����F�� H�LΆ�q���|�*���$y��
t;E�V-�|�+���٣m��_Z�ֿ&���x��
�VZg�r���I�ZMZc�<FRB`�Y!��
+X�_�� V��ѩY�1�_F#u�_�(
��c_���Z���g��W6o$��o���%�����j=K�\N(G)[@E�{��">� �m9h�̒�c��!l��a�">�>�%Z��g�-�Gv��+`:B��%�
k�;_�zA��()Q&ߑ�(C*{bܤ/��>έIÆ��]DM��q�
��^i�n����9�J�V&���yV���2~
���3
+1�5�#=<Cu�H]�L�ғ�h2�O2��|5�x����^W���S�ߠ{A_��o�x�IP�ǻ���y9���g�?9;�#�9��͈�w
��v]���5�"��4�}#��؁���Ieͺ�����P��Ib�)mI�e5��wWsA�I<$�x�r���k����V
qz4^��:��Ę%U�DT���ǟ�k��E�d�+�j�6yf��R�{9��+��{c0�BT4O`�ʙ�ٰg�

����DP_�Q��Ǧ][H�g]���I�&
��B�g|O)���&P�&�:�S$�����{�ӗֆ��J���b��dH�.t���Y�l<���
F��r!.Lt��	��jeE�2So�\3c�d��*&N'�j�0��U֌\��'�+V�r�6�rob��z�~[���cc�U�ۇ�
&K!�yq�sЙ� �?��4���*FgFQ�ӐO���
+9`�UB3���9�f�
�� ��yMf�3�����
���VgGH;t.c	#3�K
���rfg:Di] ��ڽ�Q >�{t���߿�9�c(�%tǼ7"��&e����������F
��N:
�x��K��E[����]}r��� s����h
z�G�!���
��.?j
+.�u�
Q8��N��FM瀒��B�
)Ca@�^�
_
�]F��:���BKm�8��D.�:��NQe��T���v������c����M
��jY����� V]�4�'��Mq��r��0�O����W�����Ns|Q�72����,�����=��H
�'�J�MS��Q'g<d冭i:$i�R�%
O�� frr�Y�-v��_.qx�q��Q��ԯ��䩧�0�
(_���gH����J��9 at Ov8˥�`W9��&a�1��/r�v������g㌟���2:�Y,5H��!p�0�\���>F��-���%��J��U��(5�}3O���E)��0Yy*��.�]���M��p�@�
��
�Y�)zSD:���oX�:J F����BE�#���e�SF9*�[ۧjܣn��|CWӶ����zM���^�i;L&r�-���^�@��:3T&a[�5S�	�~��J�/���2�8��p��q��}
��)J	+�h+�G
�0�e����
S"�p�
4���F��sk6�?�=Du�<�Cг7���̷M1��c�=�7T�
&�A=y�8e�V[�����<
+�}��x��@���[ܾT<�����h�z�d�
@��Y7Rz��b�8��#��F.��VDL1�Ei�GĦxC@=�
+M��e7
<]l���]HZ����y�u����G��4��V���c���B
���!r�{ȑ�����ۉ��1%�T|�m�Н �PD
����0\*,q\����<4pW�Yd���G�s�S�"��H�I�氤�	c��S��6��{~{��o�J��Ɓ��V�R�����
a���
��B��!�nU-UƩ
���U$���ܯ�6������;��C�ZGw[q,]��iVخ0])�>�M������a:?v�X�
�B3l�٥��gh��%�|T�'�/�Ү�Aw��.��n�Z"������a
t�y4G���6UW�/��h���%S���/�(�Řg8���Ȓ8�٪�����+:Ka��
���6�����c,4�
�Lcp��M�*�4%
H�T���)�6
_�s�U���Qк��<���˾&Rl
@���'���[�+�2
���U3*R��?���4^/|R��r?{oOQ)�h��*�hݱxa��E���/��ҶTk
u�.�C\�zO �~@G{S_��Y����/� Xn,�
sdO�♰�u����kH�jUD�A���
aW�w�����p��Lp�Ɨr9��G�F��u!0K,0����E��@9��?(G�*	OAi�>�l{W���n�P3����iEuD��|�{W�[����6|%�h
6�ٛ�!ly�.Qsx~Ԣ�p��G��8�/ [...]
_���g����=O;�
+:ݕ@�{[fx�׬RQ�y��B+1�]Q߇_˪/��1�[�rn
��m��[��
+��@_�'���!�n���
����ȄO���!F��
��‘d���姕2��r��9�T
2���/�S1��k�d�1U~x1;����P �
F
��-��l� ��
f�D����
��$и����^4Ծ٘�5J
+�͌S�u��ќ�y@�l�^{SJ�nt����XP�	K�h�
֣���-����o�V
x>@2P�)�>>6m
��&�a�$a�>�ԑ�Mx���㿭&v׍H1���x3�=����z�ֱ��v���
+0l�-��-��%�xd�(�Ӂ]�5�+y<�i�X_�#���L7
^A�v��N�A���
LJ���?_�K�3!a!��z�?oQF����i�+���l��^��n�<�e"j"��#�2���oYi�����>R	�^0������t������S(
+�]|]Õ�c�,{�^m���l���.��<B�G]���y���d�i����0��jۥ������Hټ.z[BA���e�:ϔ7��p��*v��}9Zb��o??�aL.e�K9=1�o��d�sN�E�2A"\�&>Dц�SV�Fb(%`|�R��5����ܼ��\GS������3�a�p��۔q���f���4���@�R����o��j?R� �V��Um�����0sW����u��Dž'��%�Y"���DŘ_����w
4@)�����Z�K~&���q��F[R��b�?���R2ySu6X�W����zo��8�X�
��T�q��1	��FUU��yw���	��WM��]��P��Ґ��h��ޣr�&��a�2x.�H�3/�u<�
5;�)�A[/#�D=��k�-gռ��܀/L�:d
<"��(�!�����#����9Q�,v�
�R��5A�����w�ֺ��pH�H-����ְݗ��śš�;�,��$
cA��.gzi!�.ɬ(
+��f7�:�)&�ّ�%諳D
����
l�q8�A�]�<)�PI;a}���M�R¯@qA��;<
+톓���<��9{�j�ׯB�}{هF���գ���C
��쥄X�Q`

�˨
,;Q�Y_��~�fQ�R_�h�v�@�X�y�j|�ѣ���c�P\q�yx�V�j��ع��=R�0������=������x��8����BH][��,au��&o��V�H����4t�A�j��-c�m�bn�1�VEމ|�4�
��̄9�f1?���kE
-��j��C�,_��0�o�I&��$�k���w�~�U럵�8[/��Y{���t�SM[5<��[a�}0M�n�3+g
`.K�k
+��z�
w��;���;��},��)��.�>��V��(B�e��ة�Q��
-Q(�l��1�,n�;��<Z�ܐ3�G><Kr�;�������gu�
������W�
+endstream
+endobj
+2371 0 obj <<
+/Type /FontDescriptor
+/FontName /JGUSUK+CMBX12
+/Flags 4
+/FontBBox [-53 -251 1139 750]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 109
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/Y/a/b/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2370 0 R
+>> endobj
+2372 0 obj <<
+/Length1 882
+/Length2 2735
+/Length3 0
+/Length 3324      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<�k�I�Q�f?
{�3fb�}I�������1Ø��9�}+K�c=Q"�II%[�,c�FrD*�;u�yO�9�����{ݿ��u�<*
+�.P<�
�$��P�&\0�3=�j
��Z3
+���$s,��h4
0�� p] ���<���f�P
+�Ǘ
+
0S�&�L�A
+�%vX�/�ϩ��2� RC5"p��8�A %�kB�p O�Q/Ї@���y�&y��?�xZ�_[� %�c
+8�1�p,��$b(��!0{2�,����a��-iD�=��[�?��/֟@
�SC��QA
+`Gƃ�?��{�d���b��	ɇP8RS
�G�dI�*������q����N�����c�-1�
��mG,�Du

 �����7s�D!� '�4���
!��ku��Y�pd<�� P�,��
�p��P at 8
 ��` �p<�4Id*'�t&�&S ���`^�B���Kp-- ��Q ��rR�#�0��`����
`�P�Ѿ�{ijJ	�"� ���
��tP����h
+H�~�������A0�AX��8�����_�,�{o�R��-��i�����d�닼�4>wZ��#T
+e���	�{�&�L":�]`�C�
{�ԋ���}��=O��,h��??�-K~&�Q�ð��Dpˮj�y�C�}��__m~�:͜d	\�+�fCN4�^��M\z�u��\Lf�vJx^]�bI=�?7�7�\`�es�9�,֫=V2��R��0z�ι�o(�y�M:vq�/�/��ע�J����~[�zQu
u�;����,�|�+|�~����O��"��T���\+�N��^�?��X�l;����e5�Z�T��z�گ�2=D-P�{�N+�Z��dhw�v�<�E����
���-�����Ԍ�{e���S�W�R~�T���7ECZo�n��Ҁ ���K��-~�g2��٥>�U{f�-�A�8��g�Z�J<ğ���>K/��Mڃ�t���L
���d_[�[|��UȧA<����UB
S�wL���N�5k��ȍu^aAכm�
o��j%I�fY��lK�`�67�d�L�Np�*l���5�
β+�X�Nn:
��m>r��$_bU��.X [...]
/+W�wy;J�����X�a$"�n�1��)0l��h5
)�Ed*bf�X�k���Α"��(~�A�G��쌄��n���orc״�/Q�5+�w��J���E�6;�1.X�H�-�����.�'i�n0A��G�W���gº5�@
���Bd��������Y毞"����
�&lA��(.�}y7x�U
+,v���
S��P�_ۥ)S7D;Ш߰��$����:��ne���Uy��f����
���0C}�©��K���ly��������*HMJ�A�s�\
+�Bօ"�AZ+�Eb��x���
�2�}��'�>���,rY�<��_sj�Y;���ԃ׺&�c���0$��r���ڶ�r�f`Z���r^��L�	
YA*�iy,���x����/�<m%F��>K���Fߦl?�M��rBC�۔����wg��rm
�!..z
�;�}=�"3��'0���G�c�?�q��]I5��m�R�=3�FCUt�7�
+�
��t�o�6$ܓIT�
+�2�8��
�;/E���n��c��
wR��l*
+�~��{���m�`UE�q�Q�4AEE�=�E�������ֲ�	GqW��T�;�_����V��[�+���K
�s�:7-Ѥ���zcs@���ɘ5=�(�+{b�_ Hb�S�~=�nq�j
��\�l�����k�E��eW���9�c1ݧ��k��"y���P1r���b6��ϰ�N4q,^�W �4�Iq�q�^��6S
�h.l��Z�^ຐh�ȞQ�<t�mٿ�J/8����S��u�2u�:��.�O\3�
+���TG���Ek����R�T��i
}6��D<�7����|5�|O���(�F�a���HbzZ������y��%w��#����� ��q�Z�A'�
VO�ƒR7Vp�U�Wiy��Qf��
{87 ��`��1)�f&����|��)���^�yK�
+yg��e����&i����Bh�bݦH�˰��bL���";��	���?i9�q���Uu�<#�$�K�='ס��ƨ��r�ݼ�r�U�������JwJ�=
�A�}q%'����q����d����k�
����';�;X#����M�"/殉��
z�Uekn����v���'����r'zz��&��7�n<�l�eO��&%)||Y�N<��B��񔾉Z�u��On>�I}��'4���<�W
�[ܽ5dg��#�9}l>�h��
�{�x-̼V�)e]��٣��N�M�7|��u��c
���80�۪l=�T��;�t1�Ro��4�PC
.�������
b�{[�:K��f�7�s��c�Y�5�u6i�;ɘȗ��tH�_����Y�Yo{�OC��U\Z��|
���o
��TM�n�k���i��\������G�����ޘ
6U�x�;�1w�o�\ꮘ��q�����S�.��I�ʘ<��[?_&yͶm|���?���eFQ$��
(��* F�w�
���썙���g�\�$w�
��uT��RWEe������vSc�k��Et_:�-�̥�'���=A�<h��u8)a�M��
+��]E� �	!a��[Mx`!�ɩ����v�:�*z?�KR�|ȳ���V�qj�z��v�A�������1�8��d�'��cic�4��J��$
������~2���y4�����ݮ1#y\	��,(�.���ePö�;��>]2�y�uzt���я@襌�10%�%�'��lcb~Ȳ��=��4�M�
+��Z[+z�9eK�'n� u��
�V��S
�Z�g���
AKJf�9
M�ƏKμ�J���
�&�yz�ii6vvdom�~!�=_����c�hZ���Jk�Ջ���/�i7�]������6�
gN�_N�v��*��ֆ;ᎋ��0]��Ͱ�D;<	�l$��<�A�z>,�у9ː���:2�]�(���Hz�⠣
ۿ|��p��-]'���[g�5l���c�W+u>M�����Zx3��t	
�ۥg�bv�~��_{c._L�	����
+BE�^�*�1q-��pS�qBMr
��W:��"s*��T6��!}2��
���
okWD�쨜y����E�R��g�2��>����]^����.>K�r
+�����wF��|i���l[�
+endstream
+endobj
+2373 0 obj <<
+/Type /FontDescriptor
+/FontName /YWRFWO+CMBXTI10
+/Flags 4
+/FontBBox [-29 -250 1274 754]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle -14
+/StemV 107
+/XHeight 444
+/CharSet (/b/c/d/i/l/n/r/s/t/u)
+/FontFile 2372 0 R
+>> endobj
+2374 0 obj <<
+/Length1 1158
+/Length2 5539
+/Length3 0
+/Length 6242      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\�[��A��n@�{`��{��a��n�C	���nD0PJZZ�3{��������{�<׽�k�k�p��A��6PU$ƒ_X at X���Q
+
rp(���
0$B��*	~�@��� � 
+�%A⒠�
@%��/
+����R��#*�@Q0[kP����^��� maP_�
��c�;P�EyA����v0[�
�� �CIa���*�y��g�
�rGK��@��
��A�	u�轠h���/��	��X����_m����

��������F�AQ�G�@��ӆ��<]�=��a
��* 
�P��_%��*�j��u�[�ݡ֡�K�;���������:����Q=k�㱯��������at�P0������0:�~��f���T�H;�("&�F��}	ѷMb@?a 
a�B}�ʂ�z
+ݕ �=E�Ǒ����J��$�PP�
+j�C���$�N��M�����$��6������$,��hw
����[(���h�[
+:�� 14��:B������o!Z
~
�f.� ��o-��
��m�z
�fn�m���h
�[(�h+�[����E�>����'��-STD�������ǂ�`1������D���??a�U����
+���.�#m�œ2#ʟ�M���vg�,
�
�ϔ��,E1�j�|
�{H
N�� ��>����Jߨ�?�
�@>HB�]��۷�6��3�?�K���Ȳ��Ļ����W'N��a�K������g΁�_�^ر����i�A
7�$�^�!�����hͲN(o�{?�8/�d>����z�)sE ��c�2N(��u'�H:����.l��΅~���٩��aﺶ"�Ǽ�����,Ҿc��W���vT��(ԉZ����ɔ{U��eaJ
�&?�
'J`~����Q�I!F�˷(`��U(����W��
�����l�\��+$7�I��B�x/�m	����$�������w�5�ș.��ħ_Qi���c�B�ڌ��S�::9�Hzx��ᗁ�dr�AūC��D�[o�7�Ɇj	����轖��J��*������3t�����?7�~�5�����Oo8E�(�5A�_���~Ob��h����Ц�C12�˝~f�2l��
�gH���w�q_��T1�0�{J+��9̛3�0
H����/o^ǔf�Ha��8̕^�0tyy�P𑑩�}K 
`�9Mz��غ��k��]��<K�eRt�_��k�u�x��\p�u
�K�x�M
�I"�:Z���4W��C�G�-���5r0��x�|�/���(�)p<�i,�EP��S	���zq�~>�QI�_
�8�Ob+wz8�|
+u�d\��Ing�ƪ�'m��uh�L��!
+H�+
���@x����áP��9�"��Nm3��!3��v���c}o��|�U�����PYaN�|3��4ٲd�uK~��=[5�w�fǯ�l��(52V��\������v��i�+I
+g���z��i|e5��O�S.1�_˺53�U���
�nf)�|SѲȱd�(���ق��Q�E����J�d�>S���3�䉨�{՝'��Y:�̮�$�L=_�&��$J&O�Y������P
��0)f?�l�$y/x
��O�K�q16�
+n�}aX�/D
�A��X����N��x�Eն��ԟ��I$�h�vŤ���
W�<|�1�V��^�G���pz˯�1.�{B�x��gO�8��|�$�����+�F��snf��	�	a��kϖ
i��䤄��J�x�T��:��%
��H�"y��,(^7?f�Df���}aj�݀��h�!.�◳zw���|��}��s��*���p���R�-�B�� �H6���
2����"�zUKT����t���X� Bߎ�0٩m
-UO����@KC��[�a�
+�Xw3�M�gV>��o;r&oN�/�=���7�=H:�
��&z�nPKe�Ȑ/
����T��	��s�T�e�ێl���ځ�}�g�I��o8�6���o�ܠ�I��]�guN��G����
��l-����;��+�r�
�ض�4�zrt
�89_z�zv&,$ghq^{������u֕�'ka����2�S٫P�_�V-Z:P�?.jA\��~𞷯���{�때��b�^�
�c�\�+�l׮��F·d@�V>��w̿g��{Q]�],�#�gN���N�e�4O�=��
/�����%S��%25
��0_
+�X�/'�b#)g|���ߋ�����
Trܢ����� ��7j9��6�@.�NϽHW�R�]���f�eE�B�x�����
/����9�s���N�#
2b����ү|=ca�XY|d��h��V�U 
�i��r9̘����6Üܪ��S'̸o���-�?I\w���Dvu��d��X�1�q����.W�W ���Y2��k��ԭBL{z�"���]��O��5O��
�>���լ�}*z�Y�
�T���CBg�������i
�X(�a��cʼф��r��^��h������?؉\��/��@�X���e��Dp�>HE��]�&tZg��92t!U���h���vd�1�쫜�<��'�J~{(�`+��
o�R5��`�������+�H��w�?�5�
��XʌM>7 at z,錿(��|�K�Z"<k�z�)O�u�䦘�Ao�b�IĽ9�_-f_��S	,O��]p��3wp6̆v�^�F`���F#�1
[t�4�݌�iҟ!v��H�zW%�|�Q2���I���
o��E�#,wl
~�q�B�Err�)
�;-3��\�gU��.U�?cZ�{�����d2�֥n�l����ݢA�ԪbY_ [...]
m ��A}K��
��2v�e���-o|@"��8����9n�m���]�jLhOQs-�T��������+�`��y�"�~�ז�h(�kr��]C��|!��:�%�hN��4�����r�z�
����;��a�X��u���Q	�Bʎ
�	w�;-��
������C��+�*��%ů7•wJ9��q
P�Z7C�u�ipZ��U��g;@�#��4��o��\���\JWk�+�$�3�<0s�����ocʹ���i��ݖky
v-������шQ��M��#�~����.�!��3�	��|�#K,���S�؅V� �� v���R�
n	��>����	y�X�C�����396�L��/v��kJ��
=��@*IA����#ED1��{ȁ���C����R�D�W�mٙ���'N4�#�cVJ�~���5�k��.'�y��5��CH,�
o
�#?a_Gy�c;v��f�}5F��D�?�1�,GȲ�/�A����u��Klל���f�J�R��lJ��$�,sꏣE�o2Ҋ1<
T� �~���,���F�
u\H�1� n�
�
+j����ˮM�F�&������ep
���ʪ���	�Y���v��
+�u:�f���L��j���
�
n46��MЏ
�8~�`�^�=��V
���V�H��r���-�T�9��e

9��N%�zܨJ+qA�ӱ������Í��^2�<�&u�fF�R��khɺ�d�yc�ze�>
!3��ӵy�2��p�>��_��غ:��[UD��}�
+w?[�M��J$O�U��?'x�{,O*Ku�V�u���Wu�q�c|:~`�K54�
���DtG5�&�D6����� `�
Iq"�#H���Q
h9�^���Z��C|-�c�jx�鵘e�
+�ǜ�Ij��GlQGdS��c��ڦ�R���i�E�*o�)��)�!3W��J
MUo6)!D���=�L��T.�I`QL�.2Q���`1���C�r)N�t�Tf�Ck[�@:��G}�
'=] ��w
�Ɨ�3���A�r�
�G�&]|�Z�$�O�1j;��,�~�ɥC-f{�+:�2��+�NJ^���g�W$��y��L�n��e)
+
�}`[M�
�ν�0�����Iu����}nЁe|/��s6�pm.�?�gleMQR�?
�{�:��T�j���QiäPr��ۓ�ȴ����,�tЏVT2���	���H�g�(J]��
+������"���w&��2�SK�Lf';������n�."Ϡ$�=���/7�2S�
+"�F�ʕ��
L��Q�g��C�/D��F
�4n��6ć�����VW������LZ�@q�}�=������A��k���;�������(�<��IrҼj����O���f�N
Le��y
��|�������*��u�
�oT
�"���Eo�&P#��G�b
�����_P;Ҕ<�P؋�~:
�Lg����p>�<�%K��:�6��M���_E(�H�Ru�2
P~}���x���;E︺�U[��EƬ�:륞��݈�4�vn����RY�A�u�F�DV�7��_��O4�T1��`
;�D�3�E:8��m�[�)��� ɒئv�k�
+#���
+�]X�2���
:��E�\kg?9�<,Ÿ�n
��u�U��oP�U�ENי#.�[j�a74�����Y�0M�\-W����x"ƃZ�g�?�/(
+Y�[��Y�1��%k������
���
� ��z{�
��Yw
�6V��Ƥ�v�E����3
4�Y
/�$�8�˭!�r$�K,�w2�%l�!�\P�|�E� �Y������[��km�W�K����&=e�Q
+�
��B�8q������ES�!&��a���B�M�9�;��AB�X�F�&v������%��ђ
4-����]��h`����W�O�]�3+��O&5^�M�]LqH�x|���BĪ6����\�^�=%9����pj(~�3��4J�}1k��1�h�f�#�b�
�9D�����1�L��T�2�
�����`�]�x�XX�Pdh��}q��Ŵ�=
y�����p�Zwk�S|������{*T�G�pB���D���L@(��@�����7�G��b�
Y{~��Yߌ�}a6+{S�{ !��W
]��ڏr�� w���n�.���i�<b�_����Oj!
šf�'	
+�.V}�ü�{I[C$�b2}��l��ey���~x��,Ud5L��Y�Eј�:�Y�	Y`�L�c�BK�B8��bjTmG�:4� 
V���0��Z

�*����"4��I&Υ�0�ܻ�WT�D�4����fF$F1��r��C[���|��KD&�՝�g�z[�_35�N��s�5�&3k�w�+�wǻ�
Ȭ���;�d���m�5��w{kcI�G���� �j
n~��-�o����$wc�*ڵ]�d�٩TZ�&PO\��ә���}��Ϊ>Xd�c	!rn	N���L�g1Z�|% 	Z}N��\���1��������U�1��
_U�FA�!F`F���i��l���-�w�d�O}�7e��gS >��q���i3 k��L�2�+��)��Me%l5�;~��]�z�#���"+M�e��
�Te�����+����x���*�ʊ�|-`8 ���5�n}H�Ԛ�
�=�"V�O�Ux
Y
���ƪ_���^r���m9
�p$�k�S�fq�Sy
�_��{�f� W
+���E���ݔ�
+�*�C��u�	8-�1�jz�@O�$|��Brŵ:.!����Ξ��_��	��vW�Z��<��2���5�
 O��0��4DE����ۗ�U�8#@�3^d�4Gĸ˻]��-���/��T9{[D�ΝV�b�k�a3�v�
J&�G�ndW���~65t`[Z�9wјơ��+Kڬ�G`�.��9i��Ld)��l�|6��>��E�c?��
������
 �GYj|�7���F���
	���2���Q���_ZUq�i4㜍n�C������B����.זQ�� hNY/�늝�x����
m�lɯ�-f�Z��D���#�Ɋ�bњ�k�c��ڽ�1v$�X�΂C4�˚����[/V?���L6���f�֔AOlHe-�)p�ʃn��!h�͈�Wc
@@�����\�h�T�� =�5gJ�jC�ϣ+�&3�Շ�W
+֭:���<��:�f��ˏ�����e
��S�y��l�=��~��й�~剋p��J﴿�c��K�ި԰|=��D
���<ú�7
B3�̓Љ������;��
�H��]�'�sV}�\K[2�3f�٫y�R��Æ�����~���
��l���L��C���Kh�e�&/[��Qk���t
+endstream
+endobj
+2375 0 obj <<
+/Type /FontDescriptor
+/FontName /RFYCRH+CMCSC10
+/Flags 4
+/FontBBox [14 -250 1077 750]
+/Ascent 514
+/CapHeight 683
+/Descent 0
+/ItalicAngle 0
+/StemV 72
+/XHeight 431
+/CharSet (/C/F/I/M/P/a/b/c/d/e/f/g/h/hyphen/i/k/l/m/n/o/p/q/r/s/t/u/v/x/y)
+/FontFile 2374 0 R
+>> endobj
+2376 0 obj <<
+/Length1 1115
+/Length2 2793
+/Length3 0
+/Length 3458      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<�m�)Ĉ���md��/M�lc��Ri�ܘ�Ɛ%!���*$��e�^
K"K2��*��^I�C�R=������:߳��s�%-na-�K���2M
������; � ���DZ��ш�
�jMM$`�G�� ��Dj�h@��c�@*�݃���l9��^ ��ǑS
��b���H�5Oi�
+�.�XmE�V�/H�	
+ �4�t'�!�[�0d7
+���L�����T_�( ��R`h$PȤ@� �A�(�b C��C���
�H$3��V��>��㼈���<(^�~4�
+�R ����=�C�)H �y�N14
���%��@@釉�k@
 	D�pÑ|�m;H&�.�ѹm	����3��f�
-pD2�&����[��gĿgF�� �Y��_Ñ���w�b�d<�@$�HU5 G��!��a�T�`@$�  
`(VT Sh��є��B�lMTPt��� 	t��ݷ�]�/������m���%*�F���/���/Q�����S:�_������"� Eo
$oB����`\�'�����K����� C9G���_B*��	�`�����k�93.���]
4�,�T䑚j�I�0ڪ��
���Ge��m�K���}v#2�@<���
y:�&��~v�,3��~�Y��gM���Iy]Xٱ
+�/w����Y���|���xֲ�`!�'!��m���tZP���R�i���z��=
5�+s���c݅�
s�3>v�ϲ��ټ�5"����_�r3RM�� �d}��,nœ�S�=z��Z�h_Ĺ���r�)�~�_��3�~;�Z�Ց�\�/�?��{��k!��])�ȵ��ŭ�˧bBE��G�B���Q��w�;�GߥƊ�-����w�=���8��
+Vb�]~�
L��֨�9�s��a����#��t4{fi(��ʢR�rU�D�`���f&�K�x��X6�X�4�6+��ؓcY̬f�
��ye\����fv]�,�`l[��G�P<}f��K�������@�B�!���EZ~^~	Gma���ɖYq;�p|%⼏�™�R��&XYr
7��d����'��0\�B��q��5���B�c
6q���]�R����ç9��|���8&��b�R�Q#�hL�^�G�ş%�y#��&�[�\n�?\	��Wꖥ�1á��)�R���_�
��6NoFp��(�䉿o����x�e�[�
v���SŜgV
�uys��Y�
ځڜ�
W�h��
+�ޓ�p�ou�e_�Y�`&�E�
��
�TLʍ�'�E'��&� ���c�6�`��׷9���|2,�#>7�eh)&fc]��f���o����zN���hV��r���wpTL�-�V���(U��QG'w�ӻQ�
iq�k>"fRP�-��2\ŀ��y�J����W�'P��ީ
4I~����R"zH�6j����z�R���)t�f�
�Z8�8��;���Z�;4�����VNJ�E��#b��-���CCh
�x}">�lجB�\��d
�Ʃ���:m]���n���J����r��v�1OH��X�l����7�����ht�
x�b��,o)�;���偈���@�l��eLX�u���s��k*,%;Y��-'��0��]
N��׳������
���)��t�Y�?�v��
�����"Җ���wI�l~�f26D-�N�7/"u��zg�Q�3h�������c�b`���\=ǥ�`���}4��H�%�x��|4��w��`��Jdm�d��n��a��Z�7���,kq3;ԗ�'y�_>����O]�0�C�~ Jg������?�d/����w��J��������B�m4Gg���Y?]	�Ix���|�s_ajk��W�4���g�s�,�(w����׳���IeO�M������{��լr�{�k
cM�{?]`�
+�]&8ɵ��z����a�b�a����iF���N��<|[E9�v���J��DU
+>p/Ny�Q:�6����� ��7+5���ɲ�0"J#ʍ4��϶����U�f������ɇC�$0_�<�kƆ��Ƣ�C/�{
�ڦ�;>(�.17�	�D�fK�R�u�5|؜�ؾ���WQ��T�Sy0��	V��'e�5�۵Wq�;��B��W�`Ag�ؘ|ܷ��� �F�S�l�b���'�#��mx����	�{��v��̚P��8�%)V��\R�2o�`-67��3�ٕB^�����x��Og�B
D���a�6��OFܿ�t�p�����BNC��ڃ�2H]�m�3G7H��]��&N�h��4�bfr:~u� hc�WH���ŖV=��8��;Is��v
���?Z>��f�ؾ򂖚<ɸc�\f�T�����=����J�eTgJΟ�h�ޡ����+a�Ԕ��0�fw_[���;��=ש�1�_�˃k��7��(`��m�;,�l7
e3��ue�
��x�'�׹���*�]q~N���g�b8�1�>���k�c�TJү�ia�,<Q�����0�D��՚{
Ϝ4�_<Z��i
����$�!?��];(+���vS�

+}�E�
��{���Q���M��`A���K�'�c�cuG�-T�
Iz�Ҡ>��M߷9��]�)D3Gu픳�I��0oK��/7��
ڿ�E��]��+-
+���f���'w�ah�� ���QdNj�#�C
L�gξ�
�*��1��B�*�
̌��,
4�^a��
Sz:���2�_o/�L���z2�l�b
��G>��:ڲ!={jF^1�sN�Փ$��A	��9���`�e��O����ۛҋjB(
���]�ޠ�S���K���C��}�W^�?pd5Sn����ܔҩ�<}�*�Gz/�u�U=��m܆�d�=P
x�9��@�
+���>`؞����oq���c�y%�Y�
���W�:H|Z�M,�������'��=1bx�ԅ�M"WD��
��'��k�j�h�ܽ�$��Sߋ(U�sn΍~�� �Sb��S_
�i�"5-��w�8۸1�	�mj�r}s=>y���P�T��/?�Yo0�5�\��Z�4wPwH�
�\Gr*���k���7�/
&+O��T�1���Nc
+l`��`'�(���6�~2.�t��2���O����t����^~�2z=b<޹�&�a�.D�{�c��ΌS���b�a��,ߚR']�Q���/In�����ZC�g�[z|w%\��ɿ�s������Wo�
+��z[ ������9�����A��J�6�}���м��贵��#�A�`��7n&��ocS1zǖ�ވ�—
^F��{�y��8��=�����w\-J�g�H��0p�=^��:��Ѱ6�E6W�P��w;��j����
e
VVu8��2��Oy,FH�v�	K��))��H_����-0n�f�@9�,� 4>T�m�L�僃�/���*)��!ఠf
��m�-)ۍ���0��(�
��
!Y^/��oe��O0�B�>.�݁F�����\�R��
���1�e�TN.3�J���c
��v�a
+endstream
+endobj
+2377 0 obj <<
+/Type /FontDescriptor
+/FontName /QAQINL+CMEX10
+/Flags 4
+/FontBBox [-24 -2960 1454 772]
+/Ascent 40
+/CapHeight 0
+/Descent -600
+/ItalicAngle 0
+/StemV 47
+/XHeight 431
+/CharSet (/braceleftbig/bracerightbig/bracketleftbt/bracketleftex/bracketlefttp/bracketrightbt/bracketrightex/bracketrighttp/parenleftBig/parenleftbigg/parenrightBig/parenrightbigg/radicalBig/radicalbigg/summationtext)
+/FontFile 2376 0 R
+>> endobj
+2378 0 obj <<
+/Length1 1573
+/Length2 11283
+/Length3 0
+/Length 12202     
+/Filter /FlateDecode
+>>
+stream
+xڭ�UT^ݒ�qww>܂;��������-8�݂�����;� �����I�=cݬ��f�[5�c,
+y%z!c[C����=33@DVV��	����GA!� 4p2��5p� ���9 R�V V ';+;'
@��������	@-B�O'@��`nd`�5p2Z�02�(���� BVV �V8��@�1
33����	`45��c�G����-�����v��r:8~�P�K&
�C�����;�h�(g�Q
�������L.�le%g`�O�M���
�ͭ��;�����	� ��5:��g�����͝���+�d`en$dcj�3�10�����Q��
h,o�dd01�r���1�O%���Fe��b
+t����r���8)��L�����cH�n -&&&�����t����������)���`��`��q�>�
��
0�1��n�ll�>� >&�
0�u��g_9��B����� ���&N& ��b0~�C� F�?�`��C
 F�?�	`��C��M\���G�?�`T�C:U�M�����q|
����X�?���d2:���0����![k�2}�2�������(	���v��V�6����k͇
���c���2�[�G��?���1��裒�_�1i���忑�C������_9?��::���G+G#s;���|
����~,��
?���Y?t�ZM�ލ�vJ~
�����������O��[d�q'��5���Y�mf��?��#��YGsӿ'��������%9���=q�
?4���}��uj>�v�
?����]z�
���/,l��I���ga���ظ ��L��+����h��
��
+�61��u�@7��ʢ�o�ErcH��X�t)$�#AjQ�xgp}*/��&/ڼCӔ2��5�¼
%�B���؄}�Q�k�S�1xu�&7M	���L[l8{��:���
+�]��*���K'd��	3g
�E8D���ۭ�����
+|�1�A�Nv�L"P�x+v����|ە�al�{��+����눩�ٲ�
�|��L4n&;p���+�Y�RJ<0
�9� <>�Tu��fi�K���=�T�Y� �$	5I���\4�|+�/����^�.k~����j� 4��i�f��D
+E��7��(�;������ܮ+#O�J05:�tj�3�q&\ȹ�!
��#'!�Mx��A�I�
��'Y�:���bq�
+
�	ϳur�'YM�����bn ��6�w�~��wE��芋hm�+/�
�7t狢��B�
5���7��.�	c���b�i�+̢Wzf�b��:���=��pdξ�
L%�
5]q�@
�[F3�+�zr]�wJ��Os��
�`Q%+{�+$[��H��X�_s�&�rW�d���j
0�v�TQK����
R荖_;��ʿ��38h�w��8��W>{����c��6�=�_����3���z���

���
7���G��{���gxT��q����ԍ�ms�����d|���]�U�>R>���Ձ*�NL�N�"7�������5ٳCo?�!�|�`ل���>~c^k[%�<hk�W�D�K�
��0�ϟ^���+.|�
+ �� �S�F���pm6���|��5�eM����[�J������S��ϱ3TX)�n�i(
Z�b��
+�c7�`�+@���(��c#�>��Ȝc�_���j
��B`����h�
��p
C	�?��+�X�e��+�y�p`j��2S��
�Yk`c8̯�Ώ�s�W`F�]��F�<��ݤ�AN

���Q$�_�T�p��~���݅��E
�3�7g�{�,z�{
V��;�Ԫh��A��H�2�BH�ْ�����d�9x���F�tƓ'"��J�I
)�/ _�N4mo ��6zxS
z��;hm�I;��V�5%��R�`RW�����i�:/��,~W}�4^*81�%<T/�&��e���
jġ���u�
rs=�f=���N���q�AKr����o$u���iO��X
9�2���6�w
B1��sx~?�G}O�#7���
(}m������
�9�^��g�o9��,��QȚJ����}9�Q)
+㭁�������:�P��Ե��
��T��%O��Ʃe�e��\qӁ�
+P���/� �_���4H�U�cS]eО�ւ#�ZП�������Z��D2���}�e1�Tb���]�D|���A�w���~O�2g��з��p�[E�'�����}�d�޺�[z�W\"pn���l�R������y
a��UI��ϊ>F�r�d�Bt�^��@�b�g�����~Z��oɽ$}��z̙ͣ*o���$�
��x!iR�ӟӼ�_��Te����y
��G+��]������Z�׆�
c�7*%�$G�
B�
��##��	
#+б���Z�����,ai�;"�y�Io����g�b�u)xP�Y��)�[�+|Q8�� J��*rey�c%��'<MM:����i*���}�/@œ1R�l�Q��
���X�J�N�����Lv���mޜ���a�Zr�I�4*��X���q�<[&�
{h�Ɔ
+�Oq�|�*>Uِ�EH��9�|U
%���m����|��NO:vM!=`�M*A��)��O���=���
c��詷�ꪰsl���E�����
+?Ӫ#<����V����3űM��J6QU�𑓹5�K�;M1����3J�ޒJ<�r�Gژ
'�@���7���(ca�+>����V@�i}X�����W��aK�*d,��1�
,i�Ǻ� 4s�J�n�

���6X��9G��O��G\4VNh��}y����O�&_	Rh����'t ,F�8�0Y K��g@�Re0	l$B"c�Ǣi
�a�uo���J��S�Dz	xj.[8�\���ͫ�t	áP^N�5H�\�q>�SH~IǗ�϶Z��}��rT��Aȉ���@l-��^���$���Y�'�'7	㯈�
+'4��J__hM�R�/���D��F�2���m
��Ч�W2o�H+�Ǿo��@�Lq�G�B��
��^��.�+b-h07g.7bRAc� ��2
+��|\�a#��~4/���DH
��I{PS�(�`���s��!'
Q�:@&��2E�o�xF���w��NF
X�<�
+Ӣ!sH'���*α��(��,��f%�P��R�6�M$-�m���z�x4��FGC�u�j�wO�
 5���.�q���ɻ[LJ�YZs�łw��B�m!Q��7(�-ݩ>C\�eG9Y��h�)����V3\4yP�u��K�#��X=z��U�x�r���=I@
z %���^ޓ�����Lk<h�s6�D���O�f��\K�K ���h���NBv�c�m+s��N
C�
+�*��~?�	�3� �Ș�[oO1���"�w��0y

]l����Ra�
|mY�~���R�U�-�
�Waţ������J+k7f���ѽ-���d>5㤤���f�#��#*�%�_���\�C�� ��C��
|����dE\Q��Q��iq�%/����=� �K?�/�K���#�TA���Po���-���羉V6�v�gJ��9���
[|@���6_�Ŧ�)ɺ���J�	w�nZT
SdyU�@����mE�z�~G���


�n�����zdjq�Q��]��J0Iw;�X�r��{���W]c�,�FKa��C����Q�2���f�X��%+
+���;�+����5.<�^��;L��qң�yC�P�o��0��{	ˇ�#U�����F;lj
DP��|i
4���>��X:�Eq��.o��#��. �i���JK.��eʯ�
ˇ7l��)�^c�&#�š�(�b�E���$�a�W����ev���o������p�3}�_A
wوG3�9����Q1�x){�	��	��
�1�2ڊ�e���-���Pd����O��=�li튰� �K��D$�	
L
+��8�]E��^�
�޲�C'B��$��Vd������e~ ߱B��qqr���L�j�"���P�3-
�1
��q#��	i��B��ũPK�<�Z�YK�N��ᙘ�5T�$1<�m!o>��촚�
9��ҡ�c��Ԫ=�!h{�evģ������]Ez
���X�
�@�/��ۼu,����6CE'��W���v���
R��K<�s��:Kj�*�)�d�	� ��b'_?ҫ����������
+���*���G���A��,3��6D
�?�d$�I�S��Kű�MѶ�8�D����_��c�J�Ǔ��.�M���
@[���!�~S�l�ao��?�
q[6pL���*�(i�O�
+�b�FK*� ��3���;a4	iD�G��vc�f���sBC���m�r�gmJ���K^�oo<�ݚ��N�i��qb=�K�������
�LCj]�0�J鿚�y��8�>O%9wv��
��
7u~{
��K�f���?�x�b(Xq���e+\�%^�
+L0g؀h��
�'���_W޶�IHP𤞭}��0�u���{D�J���-c��̇O��.(���Myŝ���
��<0���$;U� U
���ƥ��&�aAw��v���v��ȧr�*�|���������".�#xs�s��}�
����}gȔ�=�d|fv�P$�G�9�P?��)E�$�t�X~�X�Z�}4���xpjp��4��A�0fjZ����nb�n<��$��R��t3��K۽v�]1�~�}��2��a�qCp�V��g
��[[�ɸFCi%?���aM׹1�"�~߅.
H��q�
������]�ᘴВ�����U�
X���M�Ey��c��W 
�D���¾_�]�c���|e'<��S�t�"QD$}{%5���
�eh�3t˙
�Z�%�ѹ<i�/F:���N��;"s������H��uTK�3���R#	��n�9%,�:
+J��N�1K	G��`�R��;oͻK�*���3|תakطuI{�[U�M	I����n���K���7օɷ�:�UC*
m{F�vؚ�V�Ǫ��:G��=����
�f�������A���9�t2
]H^�("i�h`�Q���!k���򦗬Vv�V�Q;�3ۭ\b��N
mj��^�Qk|,y���H��樯f���L�8�
���h$ک?���F����c����j���ê�U-�	�3�՞r
�{	��t#� ��?e<�or�JI��@���IW���hɊ

/�Q	Lz�fV�jV��
5ٱ�kwqş��\���Y��L� /� k�[�a{�;
�A�����?=���cZE�/�m�&y��Y��<���
)�Z�(�*�
�Ɔ��G�/
U"�N�JȦ�[�;N}v�5��4�o`�uQu�,�]�M��YPy	��j��X
+"'�82c
���c{��skIÚ
M=&C�ӗ{�#�~Y�b��
S*�}�_���_��0*�G��D�%Ϣ�6��Gb��u�E��L��wF1ғ�	3)Йt	�C'�/�BZ�%vP�K{3�G��x
J�j���ࣇ����]d!�U��"qB�&�qSb�;����5��B�_<�_�Ng��$���m��a1쮎Ι �9��B�j���y�����O�<l@��V,

�BF<*m�����nX���z�{�+��LJ:#d}�795���D�U�oH��p
+��cH�$OI�o��9n����wȌJ'��>3V�8,5s*b��?�o����έi�䢵�
%�N�?=�o��Ꚙa��=�I�W�[�"W�D�e��������v�W{X�xt���=��Βn�M��j��7�Y��4<��,q�蝥�P�yy�II"F5ށ`��rA���f�3`��r.��44�{�8�x�>w!��
EF���f
����V��k�ȃ��3��~H��O3@ȭ3�`���3� �WUU�zbv�l6�t��$�S®|*ж��䘤˲C�'��[���r�`�7]�J��gy�
��4�Z9��2� MZ�;������h���������
$�Y
K.4����%�m��
��:#WaN���+
+�a��k
+���r��sa�5�S�O	���;A�(A��WX�����(m̚����9����U�p�&k�3qv��
9��t6
����)��bs���Ȝ�ͣfS?������*o��_��Aj�H
�IKS!��z�Q
+aqM͇��Dڐ2��
p���h��M�у��,˴FM��
����|EJ�4��a�'��9�f,�hh�
W���%�߻��_ ��@�<��ڶb��:�EQ����X�hA��
��&u��3}2������i��24}�ž����"���y�6b�Ž��;��fO�����횯�f�MR�1�
�,�M�<��C�$���2���"A������8�c�WS��_�����F3Ԋ��y;�ϱ	\m��ySւ��\��[S1}r4F
�e
̰�H�`�»Cjq��3j�(O�S��4�5\��� ���[qY
+ ����҈�0����!�dO�#�L�Х9gn�
�{�r��%�SJ�����qi�Z��
�������<Zӳ�s�X�V���*Zҙ͌���|Hn�
��j�����LE��}�D5�
�V�F�PX�6��`�6���tmU,�ka���W
�͓���+��
��\T_��;s
�� ��
%#����PJ�|[�f�6)/�)�����!Y���h�y����#����4�E�M�3�a--f�
���˖mAv�t�T���Dx"LFnF��ݙ�S�ɞ�n���b�\G(�����lB�8<����H����tm���ϲ��z�ϟnv�g

��%�h�J)v(�7+	c/+W�k\�.
�Q��%j�wKD\��hD��a��ԗ��0�k��D�Ú%�3y�
�]�;�p%A�Y�:��d�a�
)�t�|���zf��� ��k�ʴV�LND��GY�p(09��Uߓ��gr|�6��0�"��C�s��ɚ�w�W+
��t��C�=f/
+t$#[Sϧ������#NN�F4Q=����
B�14
���[Z��'�Ñ���s2����ь�p7?8���=^_P�S�&�D2�0e{7.������LMc�OaD���Uaُ�s[�3��-�*yG?�~��L
ք�}��sQ��v.n�����ǒND����֜ζ���P�4�vZE�(�T�a�\�^I�!�ȟX��P�0�Ò��B:>"C���i�t�6�^�e�ڒ�n�����v�zB���C�Hl�3j���+3L���"k�L�h���<8��/�E���Y�
���
+o�X����7�(S�vG��d��̔z
����IMW�F�e�=~q*��B`�nɑ��~F��z�'�X7j��F��f=%�h��cm؛��,��s�T��W�:^
��U�X
�Y%���%&�u|�pe���B�fJs�nг�͌Bb~�R�0�k+�F~�tl���lcotɓ,@����	���|5�n�i�	Q�i4T^�c�G#�6�Ċ���nW��o�4~�n����"�p�&e~}/�ݬ�i�����DY��Z��
[~�m��I����y�8F���&}��)�6���+v�k��Hx`B-M]Zt8'�˵�K5/�+D�pi��a 4�]�$�p��
�[`w
��5������hSz_�
U<��ĦDUk���D�'�h��4��q{��QP�J�Y�PU[(߭M��,KK6V�v�
:ab���C���
+�ͭ��-V..Y���wV*2���yR�2#n����Y�����C�^tD����I

쫿N=�
�*�]�\��3�Q���t/xb��B�fo���])�4N�bV�u��1���b�cE�ߓ�D�+�gة}(:P��������?�N+�U�>nNȹ�|d����
��6Y���H�N���Op�pv?�!�O�)�fI9TJϧ�q��_�'s��J���.`M�� ƨR8��eZ���6�X;
+o8����?��y��K�ɇ[���Ƃ�l�{=x���ԁ��
˕d]��]�b�
+��$*��ӌh2˔�-��=�_�W��뾏�2
F�q��j�\��[>�1��Q�<o����!�N�M�h�9�o�ٚ�a�"1Lj��`AS0p�.�`���)e�����U}O��~84�
u�Bs!A�;\+rn��k
˴�,u�h-]c)�j��kWr�z^�������w$|�Ʈ`�o����J�
��Cy
+Gה�!.�U|����giq�˟������G*8���Iӽ�)�9J�I�&o����
��]/�u���/��v"�1g|�6��f
rي�|�gm��9�D��w3�0Z쳢LG��Aa^��n���� �O^���
��#�w�
3+�1�y6R��$��.��.+��8����A�2u�:�8�=�^�{1��(��*U5�*�%/)�R�]��Q�]���-�*�D$�n��|M|�I	�
��S���R����9䥈&�d���̗:I�qN�o������T�
�#䷟?�#�K�~IR�K�A
+i����KE���ʼ2��ų�Ϯu�'����#D �)��yE��~�r� %J��K4��y���H�(y����ߋ8AE�_�
�U�|�1Q�a��qg���߮η~���
�����
�3��Iz�p�?Ϸ��~�jO0!�u���yӤ}۫��ݞR�v���z�+��{�P�>%�����Vi*�
+�G"~��얠Y�wE�4�hPH�"ǂ����tst��W�3q
7M&���f���MI�G�X���o!v�;6MiMD�H7HY���X
w�-"���%9����Q�O�F�g}���ך����7���!;ŁKŗk^��@��G���?q{#�Z�
�Dq�x��l��hV����Y���
�b�ԁ��|o
�p ��v���s���&
{�%�پhRC�o��M����t���)b�>}�{X;����*.��ҕ�`2��ţ�}:M�7�:fe�p	�zr�,���Y��d.H�s�c�T^�1	�����}Y�/��)�n�B���<K?0��<EƇ(�;�X�S$��)|�k��YOs.�Ԋ�*N{ƒ�m
 �3���i>��Xc
+��d1�ȹ�sꎱ�Զ�zI֓�X�,
���@���.Ѐ<:ZNj��~�VpU��s7f��0�Y����0nݨ���'A7��ڤ�Sjˁͭ������&(�}Z����3�:�I�3N�9�k;���@
�
4)t˂t��F�L���d�
${;�i���\��J�!}
щ��z�c
R6f�V���%����³	b���ȵr������6�֡��r�F�������V�����Z���|�� 0�b)s-Pi�����V��L��
|
���)�}r���[�C�""���H����]n
�.���[�a��U�zB��ȍ�e'B��J�

�0n17�(�t���
3������v� ��(.Rױn��	��HԜ�}�p��ŒeXqv�����9�i[ʽ��M#��Q_̡L^�c��|XЄ������Y5?�<�q۫�]���d7$Ӻ9
r�e����o�<���z9/4#R

py���ؓ>hj@�VZ ��&Z�bm�Fw�:[Q�������7��0X�%�z�K�E>��������q��g(����e-H\V�:���@{]���
�6_�@�`~}He*�q�9�����Pr�w4��_~��='���	��@��Vz0��9Qj����_�A�������F�!���*'

+p4�qqDv7�<����4��
b]B��
�\��� �U�cl�0��'M7�g�
E��q#�g�`���bL��qd��*fɤȞAQ�E�hZn�H�2Y���t�V2�dR�\d(���&�X�*�B�юb$Jk���O���'�l�3Gw{<o,5��E�5��r n�S>ؖ/ﺖB��L�Nq�����̂�5`V��S�|�Ge⟍"En����
�G���@L��$l��,mۣ3t!
+u��
������9"_
#������.u��ʙ���fO�4�����J��T
�@u�k���u	����S�i�qc'��'�^�FC��k�� -gN�D~��2��ǹ��/Ɉ�J#5;�J�؇�����)ӾK�"�Y�����Y���ھO��j��lq��p������Q�S��|P���z�"6ʹ�3��t�
���+}^55-d�e�gT�x z�W����Hw����[e�
+�t���0�צ|��EE>!=���Pe9d��~7�R���$2I�a��8��m�1����tM_:�������
����'Tޘl_�	8��~u:<�w�bz�A���Xk�K" Ҥ참������m�Ŏ�y�f���",���L+
5]Xc>Cxs���
~�:�	�]��gRI]�<'��7�&���D�Z�Cd9">y��6K���qT�&9��d!xRQ���`k Fu�71��X��[���
3H9��a!
 �r�U�6Nl)�V�Z��i������7�<I�d9��� � ��*g��a�I��,�$_��4��2=��mb�O�~��C{&.��Z�%��W{t�(�zA��Q���
���+��t�~��F)�_L���{�g�����H�BIq8>��o�I����tA�(�
���
��/�07+���iO�ݥ�P�R����j��V���S 	�x@����7]����E^�4?�c�ؠ[�j��E�㗫�^􇞳���§tc���[E�"M���2�������_�'�t�>��._Zp�ɏ_W�&f6Y}ۣ�X[�Ο�f���x��1c�CM2L3$q?!�� yiܛ��
�,m�5��\��
z�
x%��=���Y�t����7��SlQ ���
V��T6�6��>m��\i櫎��23���	,m����F�E:FZ}hL��Qֶ�
|>_S�gbT
���/�ra
�3�g/Kb�a3{®��5�8зi!q�
�g��_�a�A��1h�0B���}���3a�m^~4M}��n��(�gϮ�j��n��/q����
�(�������{����b�r��X\��4����]��'�(F��
+�v�7:.��/.�5d
�zY�iG�E�� 7�Q��j��u�FE��L��)�K�[���m����fq T�J�"(
�Dً���F�}f���>q�{u��*�nm9�Y
�%ڪ$����
xF�}�Z}x�|��N�<�
-sp�S��$6 �d����7Uò��
p$�^t�[�gC�
��`-m�[�X
X��Ov��D�O�Yֱ�L<�7v�
kZ==`Yչ$^
�D>�#g
+�8Mn*�S��	?���$���{/q�Q
2����GC��s;��o��-�4y�y����tDb���_Z�{�@�\��M_Dz�bV��I��;m���Q�3f��)D���բw�
����O�
�I�I�-
7�z����0*�;���
G�/T�j�����/���5:6��㧐��V�1�c��H��H��n],�Uʫ���>w"��M��
����Y��
+Q�(AYC���Ɵ1��(�?T_R�� /�=�i\��h��A�'���7Л@�DK��ۄ��1o�꘵ĖJ��C�X5h��ç}�k�z�E㗨�N�߈,�P�
����/k�?7�� #�AIl�

�(����C��Vfhċ���_�:�w#�����n��M��r/sd����=� ��
�.�<�����Er�l
ɬk�]�2J��q��m�?ߛ%�q44�蛨H�����~���u����^o���'?z�c��h.�$wҮD���dL�A`E���jN�1
�0�QWx�{��
��� �xiɗA#6C� �bx=+�/'h�����OW��
�s�%g
+�N��N�e���;j���M�(��
4\Agr�@x,پ�
r���㗪��u��
���b@�n
��
%�i�y��wnjt���Mdr��s��B��dI�s�
�ӄ��`�o�)!*N��+���
�E�d��I�R[oC�箙��6�
�2i_��qYU�-lPv4=���QX5��֕��
��x��o��RpH)�͒

+g�U����F��%��ϊ�1O�
��&4Wcq�[��4�7l��2:�=U�������\�%HY�5��%�F,��d�z��uF���37������i�Ձ;89�W�2[�<�Nr<����'.�h:�)ԹEN1E7��@��q��� �R
+endstream
+endobj
+2379 0 obj <<
+/Type /FontDescriptor
+/FontName /TCCOEQ+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/A/D/F/G/I/J/L/M/N/P/Q/R/U/a/alpha/b/beta/c/comma/d/delta/e/epsilon1/eta/f/g/gamma/greater/i/j/k/lambda/less/lscript/m/n/o/omega/p/partialdiff/period/r/rho/s/sigma/slash/t/u/v/w/x/y/z)
+/FontFile 2378 0 R
+>> endobj
+2380 0 obj <<
+/Length1 774
+/Length2 1757
+/Length3 0
+/Length 2301      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<����e�R⑈l3�K%�XG�%�m�<fa�`�
+Y�҄L��,�$%1o�bKʾ5FD��k)�����=����y�������{��GC
�g�#��H2��Շ��(�
�-!1

k
+����$
4���ƀ%��� ��
j� kr0����Z���&`I)x,��0� �ț�� 72R���%� ���\�P���ŠP ��R_�O3XGr ����2���RByP���6��đI:���
\ȼ�@
�����H��!��_�m
O���@&Ө @�q ����Ɇqx���C�c-I�Ѓ�C�~��H|�C�� �C7� 	�;	/�
'�a{����Cc�$�;= �74�o͋��� | ��g�}�V�;˖�%��$ 70
+�.ፂ��@$��p` F�
�Id*o
�
&
+�#S��_
��
��$�$0�m�^�ʊ
i� �`pށ�F� ���F��$��/�K�����+��%c���*-h�+��{�(����+��
�S��{8�=��1���2N��~K���3A�	��4��{�J��
��Ծ��h
��v�t{�%>S��
�לƽPt
�d��Q���m_���i��R�|w�1�o�Z/��z��]�+[�j�|ȾD{����1X��$k�m��4ufT~�`̜��l��=�v9���f3W"+�R��'�#-����Nc�DEu�o�+8����+�l��G^���A<��ʸ|��BN�NA�׃%�ȣ�����j
�Qw��P�֥�,�l�rT�[y�N�{�\V#8�E
Ƚ^)?�~�+�?^���_U��Է�Z��׶��Qq_�;�^ӓ�a��V��9�W�
|0���N����B�%A�q�7���T���<���X�:=��0�h=k"�b�
	�
8
�5
�� #�]3L������I���/@�D�!]ff��
�vB
}!�h󉒤YT*�"'�lD�B�T����Б���tmw��3F�&7
.V�I����<l��.���N��鬄O���}%(���v
�!��<�)����f����c�}#�,(1p�<
���
S
!V�����,�;6�o�����Z��)^wK:9c�]��{�s!�v�C�_�;+�V��ަ鞐W��i,��ل�0�����j���)d�=��;� A
Q�w�$l���
H8�]��,�%+E�tbd

���6.c�I�EwD�ثݧ�{�p�AW_U0���z�;oH�
+����V
Ow�a�"t ��aw\kZ6Ke���Úeu��C��˔����E
��xt�z
E��
�ZH�jJ�߃K��Mmr��N

��($
1
����J��Wu�ի�0�ƿ��!����S�(�XjRٚ�6ۘ6!@�dff,J��l���N�+�h���lN��2y�<D)����[qߣ�Cݾ(��%�^y����;���\��i�F)P=
�Ԙ�M��TZ�tϏ�d��ɍC��P��s��2��G�ᶱ'��ey��d��[�VfO�ًՓ�>ڲ*���S6EYȂ�ǟ;֭�4}	��xD�rL������\�(��
C�y2�}�|ut%��,�
+�!P���z�]�I����\e���j5B*�B�'ó��y-
Q�NթS��
AsC�9I��Fi�o9"�
;�է�ް�"�Z�]�UNvy�NM@���A���"�_�� Y;%��[Rz����K�lT���L�3x�1�L��v�bNU�g�F\2�澹F�p�^�T��[��ϩ���_	ӾE�5U.{���qO�ze�U�@�d�|�s���mKu�	[׿�_��Bv��~ԉ�ZB���/>UO2e[�E�T�/%�l:���N��]���kx=�p��*�՞t��CS͞f������mQ�Ĩ���L��
+��f����u��Q���>0O9�3�+�d�]�e��1�!���GM���������p�W��IDH�o��Y�P;���"��
�\�W�40�9�s�w��b�(�o�iǽ����v���4�)[t)';&�nʁOw�O����9�g�P�b$�?�;��Ȯe��9�;
+��
G���^C�C��
?����}}d��$�ʕJ*W�E����u�!V�׹m�!f�v\pA���:��
d3�Rs{5>$���^��Gd��&w
+;�c�]�o��WՒ�;�s׭Go�&�+��;�f�-s1|����
Wɾ�q��/��̥g���9�a5�7T�O�B�{N��J������V��W���8��!����
E�	7
�C#1.:]��;W+��$�?-���L�_/
+endstream
+endobj
+2381 0 obj <<
+/Type /FontDescriptor
+/FontName /UKFQUH+CMMI5
+/Flags 4
+/FontBBox [37 -250 1349 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 90
+/XHeight 431
+/CharSet (/F/n/u)
+/FontFile 2380 0 R
+>> endobj
+2382 0 obj <<
+/Length1 1095
+/Length2 5602
+/Length3 0
+/Length 6293      
+/Filter /FlateDecode
+>>
+stream
+xڭ�u\T[����F at F:f�p���������P��%A�n�D��s��9>��������^�[�Z{s��տ�E[Ô�(�{ !�}����p�I��\`P78�u�����$ ����( �/.z�p�o����O��w A�\�6P@
�� C�԰�" �h8��[ A  z�3\z0W���V���m� �0{8�D��$5�
 ����
�_����F��/�����h�`
�#�F�t��h��!��ŕ�m(�w�߃�?n(���h$��
��B��\P�5��G�����W�
���@P��
HL(�;�U��Յ��8 �W�_v���Jn���ay
������/�.�r3��� ���b�?|3"��
(�no���,��K	e�����"� ��
ԛxSJD\
�
�Q�0/ ��F��
+�v���?��B��T%$Š�MV��$ š��M���$)6��n�W�7�\&a(��EJ
+ l�7��&4�G�(@�
��, at q�0�����ވA��7�����у�E ˜�Q䦰�ß�Ʈ��M�+���G�M��x�w�P䦷�x�����+"/������@��f���C���
�\���
��f�`^0����t�czcxE�R�x%>�+kfY�ț��Li����4\��
`���è
�UTi�/�m�ė�!~����a����t�ϳ�	mv-�p���)��Q�s�k�&��yγ%�7�5�� p!�~4^�Ǚ�� ����s����i$��m��0�����{*�"�\� �E��9���I��L��|-܏
RK4"�3��sj൏���҄^�d;�_r;>�iW^��=jGW�B��k�|_yM�jD#q����p��
������J���'[�/�7F�v"���
i�8}Og�$��X�RkE��K_]�����|���}��U�z����ꏟ}_̓XYE<j���p�p`�'�jO��q$ZV�<������o�˦��0 ��	d�
��-��L��O�DD��&c�O�֦R�<r���'
��ɴ�S��5�+i�:�JE�Y��訝�����^_Q��x����:��ř=
&�1��y���
��ͅZ��_
+�YW�R���􎯃���vՈ�	�*M�.�X�L}*R�C�ڶ^��>�#� 
M�~���GA�آ~�^���
8��sC!�=r�ϳ�
+L~�d�}��s�ȷtw7��s|��#������& �Qu��]����R�\tߓ�{x�x��?;ҧ���N��a���������F��%�� y�|�Lc�Ē�
=׉u��ɌY<��D��,K>�3��A*~�봡<7k��qY�Q�P��Bșq�.�P���Z�1��>c��0���#���b[�P�;�)��-i�ć�������Cד>��})}s��	\c��-�{�͉�~-ýA������'��,��|���
�q�76C���}���SM3Z�����E0�������2M8�!9h�p<M��zlp�%��xW3E��!��ӧa�M����~mkg�u!��ʺnm��!Ćo�/O�2/�K5d���!��`���KC}������>HgcC�6b5M�(1���Pl��
�
+��wUד�IL竻 :�?ڞWo/��j^�q.{���93^���a�9���+�~�goAmM�Ko��R��V���
�r.3e��}�7��Z����H�z�gvd��Eďw���IU&>h벪
+��N�0a�x�I��0��S���
@�ے�|�b�&Eo¿:-
+u�R�e?����T{�����\|�?�F쓄�%]�ct�2�s� X*~GD�s��5�
��@�"G<Z����p�z�3��H�V�उ*e��.���HP��#W��6����'�m�2�H��
+ͫ�p��qTr�/vz0����}^,V �9bZ�iG

r�
����y~X�^�A�����/�fA����Z���
�[��]eZ�y������ڦW�
�8ʙA��3�_uD+�
+��޴�KG��F3��J;��gV\��:�aa�Q(2B�c�f>�q
+O�Hϙ��db��Y)�{�f
O��nj�>���ﯚ����CG(Ҡ/�y�F�����nS�)3M�����ʾ��x�
F/��SA��#ݙ��PSj<U+D>w�g��}f�c@�٦�rf��j�tg�G�O/ԇ;,O�V��
�N�
J)$$����j}��R�H��j“�mx+W����6�����_Rw���t&QC�҇��+z���ٓ=��,��g�^}�F��0�z�?���!���|i'GVW��hE!�w|�g+�
�@2���y���}̚��v"T�z./u����=�H�,�jO�R�T��t�\d��㥜�4yĥu��>o��@��(��{|m
Ah��Ɂ�l��rk��������4�4��nI���85R�?w�9�<Mq-��L#�����BKnL<�p��VL��,�­+�9	2.�
�✤P��H��j��򽘾�EZ�E�
��5C��1����7�s�)��u��
+
+;�<��"Zէ(7�@���[6��!1
m­��d�2���K�p^Eh�!,�6{:���]�����	)c�P\j'�
��_YM�;и��+(v�jt�lJ��;G�/J^EDl�ưhcl�u�/�Ώ������2Jqc����� ����{씓�Ǣv�gsd?D��;Zߛ��`Ǔ�9�;��pw�%��
@�5�X���%z"��*����ig��Tڀ>�ʝ9l‡Ki�->�)
� ����C�(��*�w��Ϲ�G5�e�Vs|MgtOeV�o*�
5���������;��A-�B��T�r�n�C��K�V��
�0[����D+��S�A�� 6�)�#�DA��ܕ�}o�
�7=������>I f�
CA��\���f��L�N�j�w���P��̍��zC��\�7R2V�^ܕ������T���Q���Qg��J͎1�~�������/S��Q��C������,]����2Tr��q?�p�-
e������(��/��)bwyIR�F�+W
�?��<�ͩ�|J�AKJ9��@�n�@X:NV���M�դ�M���o�bj]f�O��Z~���
��l��ނ
�#2�7��IV2�ADz����6�W��`��z��9+�Imř�t�[CB��V�3}
t�?�
�Z�(Q�4��~X�w��Ȥ�,��ۥ<�JQt��i�S�ݓ]ٓ�W�[s�.
1��ۃ�h�\6Fb��P��;�YÄÒ%82�Yݽ�f�:�
<��H�}19����,��dq�6a`����J*#�J{
*����
�����a��#���B��4�A��
�b!hf�:LP�A-U�F�Y�Cj"�趿e�q	$�0s�,��1�
�%�=���ʞ0���j�����/s�J��!���UT}�R�3���dO�*���|����9�̓�`b(�u~��,(oK�
+?����r�Q����$�v���a�#��y�(���Ӵ[����
��\���]M�;������|$͗���F#�ފHLd�,O.
�^P?@� F�*!Y�6!�BE.�V/լp�
t9�^���W������gz�6z��3	�v��E�W�SL)�uy���.��]U�*1bfs/�.����Z:
�
J�Eͷ�j�@�R�ۧ|wdvY���#�
+����ݡ�낤O�!,��eOpefq��0��`����^䡗�����[[�f�!6?�0�	�2�p/ɤ+j9���fN�YO�v��f�Iٍ=ecV�9=.}�
����
|i��F�?����Q����
+��&N�F�
L�c��쩨[�c��,�S�(\���v�OZ��Z�zt�`1�l����T��ƫ;���D��lu5\h��@�g�����{�>|�l��
�"j��
�O��7��LK'L�vV�WOP�4��1.]��0�.+�ޓQ6V�1�⼖��
+�7�
=It'��–D��9l�
+�%�_f�G^L�2�����'Z�
+5�#�┄���6���,�Vz)�O�Jy�{��V���
+y�6��5
+�0��c���
7�a��k&�Yt��R\K<�mg����A4�[J1E&o��Vo�gm^���λK����~�F.�n��w���¶O�&w��@�Ȍ���L��Y-[���@u8i�3����8��!��4�W6�t�#J
��
_t�R�-�%�lw��z 9옲���U�i�F/�>�7�e���Y f�Y.�/TU�2M-���I�_����������y4���
+_>�z��"�C��y�j��B+���Jr����ι�C������xi�®�e��S��"�5�K�����x�!!��R���(�=H�I9�g}Ͳ�?�}}�)��@�T�+�v��VVd��J�ɞ����ނQ5��@@�i_�b� �"�т��5���]�H�a`��O��v�K�����
"릂Ҽ;۪�Q�
�
��>��g�q>��Sy�6�9?�$���'<U��2):cV^�oV9(~QغN���ڳ/ � ���O83
h�|ߊ@�ö��!���`F����r�-�$
�����ǻp�����}�hWn�r_�q�a�>CjÈ_�ޑ%RLZe�_
2��n
�W�vҎ��m��^����48�z�A���
7�6��f�󿦺�}
���)c	P�g�Ј7e�|��@���~�]B�G�9��*�z2r���9�w���0>['���6
���
^�5
�y�RIZ�1���(#i����,������Cu��Ӻ泊���O��ۈƻ���@�-k܅w2W$
;���%�K5�
��](X�l|.�L�9��u���Բ\4�
F��
t)KWO�[��b��
+����ƾ�, MC�������
�\�^�dl�Q
�t
c{�Gi���rQqy�S����rg
>��}i>�[Ĭ{���
+�P�p���@�B;��c\Pi�E�o�N;
X [�W�n^�jξ�]t����@u0�2�̒���/�!2*v����8��������@�ʹ��7��k�p�:����(
gc�&*�
�PԢ�uy���s��3��
�֖0�j���*��J��+��l7HN��,9��7���jf�����*`�E�|��f�\t���:���m��P!Y�Ӕ
TjQ�1�F*P��m�bI�|/�=B����QJ���p@�&iB=
�gb������>�s�f�˱�4{��O�M�	��s��ns

Xm��)3O
���&r@���<u�^�*�w�����`&�	
'���\z�S;:���U�DO&��U�����S��5�_�_��X�;ӵ1��|���5�p�Ю�W�v�(ݘI���$������]�s'#�ؾ1 "=A�c�77�.>g�i�
��N3
���<
�j��B���m�
+q�):��K��W'�2}M��"sW���@?͜�=&�5��>�~�)K��,;�2.
Ӿl �̶���ގ]���e0��8gCg#����3��uM�`�����ƿ"(Ў�,�{�q�AB����6�D9�p)��@h����_�Iܓy�ZP��jQ9PK�Ԝ��D8��A�r��'�x��R���
+�U���y��W�5F{�#a�M��t�B!��p�������t(��w�n$n�[�r�]K��]��e�>�����
Z5�3
ڴ���yl�,�2疺��=L����p����b�M��~����]�B�hŌ�. �`�d�ʫSo^^���<eۡ��Է����6墏VFW����p_�[/�+q6�yG�Q
��]��x�,)��U�s�m����t��2���ж���w�_]� �ӿ�����U���Vq_��Wl�ľ��3�	��83�PfN$�O�a<B���T0��3Xk���a����F�aI�F0����ŚeP.�#I��Z�`-}m���
E^p���7%h�8���m�-�d��:���i��Ưg�x�ۦmkS�-w�֎��3q���Z=���i$���$��_ 2�s�kЍ�d��yLof��xz�%v�M1��j��P*|
�'Vm
��s'jz|�����sRb��vQ�E���;����/w�<�_
g�C��m�L
���J�����ė�3��7�?y����"���d��
�y�$-��k��>���V3xxTo?��‰�� 8�S��t�JHU���Ș�&yY
��0�ez@��{:�T��W�4\�j�
�҉
�����
u�[J�mݒ 'G:��+T����<�#�j�Pϡ����o=��J��X
ټ�����C\j��?�D-�
+endstream
+endobj
+2383 0 obj <<
+/Type /FontDescriptor
+/FontName /BOAXKR+CMMI7
+/Flags 4
+/FontBBox [0 -250 1171 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 81
+/XHeight 431
+/CharSet (/D/F/L/N/T/a/alpha/c/comma/gamma/i/j/l/m/n/o/p/rho/s/slash/t/u/x/y)
+/FontFile 2382 0 R
+>> endobj
+2384 0 obj <<
+/Length1 2153
+/Length2 15725
+/Length3 0
+/Length 16888     
+/Filter /FlateDecode
+>>
+stream
+xڬ�c��Ͳ�۶mL۶msZӶmsڶ9m۶93m�֭g�s��>��wU�Z�����fdd��ȈU脌�
M��l��虸�D䔙����a��D
M
�-�lE
�M��������M
_ on6Vn6f2";{G
3sg"J��8��lL
-�
l��
��Ml 1�
��T�,L�=艄�������D�l�d��jbL��Ddla�Ldhbfa
��$)[S;"���]��w����	 ���_2�� "��l�=��MLa�� �L Z�������X[�����B�?�6�
��`gc��l�H$ggl�h�]5L��M��������J9X[	ٚY�1��d�$n�nb�h�ldNdj`�d�/������ܿ$0ȩ�J|�����kL����Y���?Q�q�3�a at u
-܉��e8^��M����5�3��5#bfc'2pt4�t�؈���,l�M܉L���m�S� 5�!2�s��gC�و��1��؉�����$b�1������0������A��%�3��b!b��C�D
� N����!�8�?'�� Z�C� -��E��(�!��?�� Z��@��h��C -���� [...]
��L��ML���Y�c����� @���
���p��������mL�����X����������_N !&��b�_y���Ml�
����T��6��8� �?�e0�� ӿ����+&�� �?��G�?�?���q�sq�+���/�����xs{sۿ< ���3�n����/��v��?�
cc`���v0n
�?��fka��r�)��}�xv�5
i�g�������z������)��� :��������� �ß� dsp�s616���,��;

�������}�kW� E���
0�����[��׿��
�	p}�G?�|N��ՂL�U�I�(�����_�
(����_ 1\�B����� en5#`��_�����G
 ����S���aa;w/:f�B��?��������<�\
�����4�`�/�Z �]&&�&F0k�vF<���͡?|�
+g������Z��z�`�VねK�e
�7�5_*2P���p��wz+M�_8ĥ-}
��dx��j�d�y��y
:E�h^�;cV�ߘ���h(�j�4_�RT��71P��kc_f0;��x��ZXH=9
�2R�Ïpְu7����� _�0�V�_�v�.(/�Py�:���F��,�;�hʇgeEaH�u���5��Df*�D�?��ǥ�rPCk�=qľ�]aN��˹^Ҷuj����n��}c��f^$�Z�x�PhWM�
��qB���U�)��G��鍘���C�N
�fI��5��9��Ʉp���#�
��^ ���E0CWȧ�	�b��R���W�qp�W�83��@VfPӑ� F�z[8ƃ�fKGKq!JY�m^NĻ�
e
��hCP��J�Y��7`/ �=x��W
+] ?�:��@-ԁ���
A^
������:�����v�˓�L�k��FU��s0G#��";I�z�
+��R#�
��7wM0��p �#{
���:�8{M��x�Ȉ�$)1��
+p�C~�lF�9Pb��ݖ
�D�
+Q�Y!pk�92bG�~�5��Ҧ�
s�{a��g�a*uE	D
N��V�C믻d�����6�����H
L�f{�c�����4м�`$!�(w�|����D���:�/N������o�x.W����MTl@���>a,V�G�l�t{��E(����5ێ�
�0[��*H4Ip5��U��?�a��J��
+�ؔ�o�3���{F�X��z��EUY�7��B�vӌ�37��<H�
�{`�w0�Q�S�s��~��]
�a�L�@tjm�A/A� (
ɟr��o$���'rɴ�5�YEx
	�����c��|

;]\��߃q�
����bʆp+�i�"�U��M�p늊�|ﺛ����w�>I����7Ö�*���S}+�� �j"�_jb&؎�ϫ�S�l��B2k@�_�m��a�R�!��Hw<܌�`�.��4'
+rz�	�&��9O��l�q��4ZJܿh��d��#
��D!_�*e�8TZ�@���^�\��B��T�s� V���VQ
+"O3h;!���%���S��J�
����O%����"�/��\�R
\�F��B8�T,Vē��$�Z���
F�������
��ڃ����~�yч�1�'DC��GGO�
Ey���N��n	�d&?x(��zu�ρWo��G9�7Y��mF�2��F(.����t�-�}��4�%#��&��TL^�ϪY˞��[%&�*.��H���_-n���
�e{�5̮Y�nKN�
D�a[z�bR@:�
j}NN�%АE��4�q���Ģ�t�"�°��*��������fU�A���� ��[�N\�.>�D�Lk��!��&�1b{
������E�ӾS.}���~�B�*� �j\
�'p�3~�$��	3L�兑�͛e����d���)?���Gp'��INd>��o��tt����?:���D64��7Ŏw��v1(0��4}=�V�%�1S�}՘�N*�?��/��Q��k�p���$t�6��(-�x���Lu&�
ޑ�Ud������s. [...]
+(��`qy&�{�7+�/�gE�6F����k�\ݨZ���β|-���C����
b��:�5��

�8�t�NK���oZf���k��U�*C�^+�a��Q���V�ln������P�3��ﵟ�۴��3Ƭ�wM9���uG>l���j�(FLfZA�q�n'7�s�猰E����
+0�g�t�$��_�@�nڑ z�7ɷ���r&[��D�v�En=��'fQ�7�� �h��R��I~J��(H�Q�݈�ym�4�Y5�
IALa1v�j}�rTCY���w�,G�%��e�������8��znH���m�S��G��ǐ��>n�G'�!Fɀ���=���w���$�5��_!��h��MR����C=���W�r2�$u!��f.��-
+%,���zo2g�0�v�:�?3v4go,��:�j��^� B\~'����6��

��i2C�<��|�c�<܃�JN��1��e9�l��mQ�y��4�o�a�@5�H}�#R�+ئZ(~l�m>�8���V6N�A���*�y�ĵ�_��ý�h!��kk�y�HRxܧ�D^a��Sю����d̂Kb+4�R{��"�~cAP����p;��G��]���]����Z&�%ߢZ�Te�t*co��8g/�$L=[�!8�^��zW������\��G&�����?8ZSeA�`W��̩^�����ez:������N��J��{�eS�$Ui=�qR���D�a��A܋��)B'�Dn�� �]g76*a
�ԥ�W�d�8>�"�ȴ51oF
b��	E??
Io�>�-�28�e1��<��	:;�hr�
Y�
�t5��xbh޽��_i�B(��H%�F��dlh���=��GV���™�	-���M'�B6~��R;�4�<��4�t�H8$̈��U'cn6u�	��*�r<Z�{�7AN�Z�ձ�^K�]�W :�$l��u�Pw�˼��0�rC-Х-�ԅ�m퐟�3���7|��0��[��U���
(�/��k@�@���±�c �R�
O��Bj���B���Y��-��>��oR[%"��J�'�s�Cy��k'P��>�k����rܸ(Fs+?�=*!R>.�)�ĵ?��e�T�չw=�\�n��rS-�-�>�cUʿ)���Ę ���
ܧ����A�d@�:L��Z��x����۷|��Z,��جx��
�/�x�y��j[�p�w^�$>h���Pld�4��X�`�ؕ��Y��D�]��H�a���`�F���r�qoE�P͢�����C&�C8��Բ�

+��
{��Je�ns�����xB�k&8�wW��
�{�Sꛯ�����d0�Qby60L^�޴�A��^6��6�Ie��t�ᚱ��V���4B�
}_�g1���u�4�:���ڕ�^��E
�T)�k��|p�
d��G�o�=WԏJ3��5
Dɾ�J
�?)
FS�q<C�a�q���Q�V�'�
���
��G��<����
S�u�9���cݛ����M����
5�3��
���SP��5M�Ԧ
��H�y��"XVkF�o3%��#�nE$�
1)�,)�'�a�
+3�A�ّpө�	����f�8}ol�"E˟��:ml4㱔.R�B=��L����ɂ,��H�xFW��~�!ԭJ� �i�hwO��n%͕�4�M�TK�*�W<5OzhN�;��}��龡�
�'P�K
{ز�$/������N��a��V*槵�LNp�}�Fi�o�UP
Ő����b�2���̟iLF@ؗ�n�MRI�2+̈́�HA(4��ġt,�-|�L�"/Qp��~�A�}����P��
N�_
�~gs�Z.��W�������;�1/��K��gڤkxWS�5H�K�X-I��OaY4f�m��gF:^@�Q=j^[7�b
C�֔zm
%P
Se|!BB��6|�'fF��az���)���7�x}­[�B���p�,na�cB�
�� ��=�
�}*yS`d��/r��+�bCS�a��Q����#�7�`�w�	�#�7�W�3%�����?_+2�s�rk�#�:f&ER��}�
&�w䟘J5Qo��#�����JV��$;̀�����lTb��Ď��+�3�2B [...]
+~����r�*w`�c6��'Aq�ͯ"́{������}O�=er��=[
�en饌ỿp��(}�q�����]}��-���<ա�SWk-�!�b>~�dn
+j�\k��aj
�
����1ցH�k�q{���d�<�H��M
J����YϪ��-��s�
 �%P�P�
K at d~]):�
�� q�%�ɚ$o��m�b��^Du���UCP �Ư,�xc|��t��
�\ęѪJ�q?�g�_����-[Oe�A�QX]��#@����R�D{�E�q�}����Eu�Ǽ��
]���G�w� y9�\��<�,e�G�PV��H�z�(_ax���r��$|���]!z�W��0e�y�&��[����P�ւ�����P;�.ְ�W���]�#�X
+o�c=KP��O�k��)���j<��!='�W�<<QV%KM(��1�����!)� !��
�)|GPm��u*�h}
+2"��
��^�
��"��,c5��7Ӌ��j{t>���9�����	
R��n�C?�s�h1�>g�Q��]:�Klm�3�Uq��ۭĪn2������+�azӚ���}��S�H�ͱ�"	�B�iPءz�_!�=�"� o�Ԝ|nQ���Һ;#kx��"�
���3L
֕p�Y��._�
�q��g~(����b�X�s<�T[���#V>#s�N��U��UW<�9�y|��B�!��@g�'�$�
+�;��BJ�

|N]iF�mS�a`E��
+�d�
7v	횯���[6
���z��
�|�uCг��'�q��+ٜe�y�Sh�U*� K��d�rEu jϣx͍�+�j=��񝚔��F�c�=>��.L��3-��ф�,j|ď�"
9P��3/ў%t
<�3
8�6�d8�	4��*�%a�4���W��'��Nd�2h�
l8+��鑶�Q�v�
��nu�#�hr��1tKw���mj�
F�Ť^c��d�JXl�3�9G4�
op����S5,BTC=��}T	�������/q��H��
�
����N�*���˵֜���SC帢�f�Q���w8I�R3��,7���is,k_Bk���Op$��vUU�J�.�K�P��c��
v���=�M���R_��1�}d�0j��o�a� n'cc8���U�k|U�	�qG���V�1Ѐ�h�
�=;W�s�-����Q�����VM��nsbPg��0i�>2�Y��y��w#�U��Bq�
��B
�yg"k�7ciT�;��HEO>
+%듣(���KR����3��
�U�&��X{�K�
�a�r�	ķ �{�2����������?k&�ξ
����
bX���l���tw��u�y$�?9�R>k̮���ùD=n��2R���_E:$
ʟz�FQz� �O@{��:^#�FQ�!�Y��� �l�j	O*;�^�G�i߾,����/9�{u0� Ↄ.��\�2LCץN�4���d�s�p9g��j�����t��'-����o�ɡ�.�}�H9M����A�9����	�h�
+�k����
"WY�T�9�
���]�	,��Ɗ�1joOXe��wF�;��|g�
)QmF��f��
���f�����n���vw5{�R5P|�9�z&�sfL�:wwV
�l
���~�dEPQ����
+�#c�i�4�1�H���2n$W�	[GBQ�f�jCZ�y�f6�飷]���|3�p�@���o�U��'�u=���"�LJkPJ��	i����{S���ر-�>�9܎�;��/�
rӃ�����}
J*�9��wp�RN>�A45�ڦx�:�)I�v0~
J)�S|cľ�/�{�?������
hQ%H9�J0 ğd
+/$��T��DQK�N,�6����J���1S�
D�,�¹w�N�m���,��r�@��B�Ŏo �t"��GNk`[1)��[2��Bk�c�,�h`
��c�u��7�!��
$Z��tʊ���xg�c&�����"g˳O�[�
�̢�0_�;2սw���shQ�ג_�rh���?�/q=���uF�8��!��w��t)�Y��,���GAjK;'^Q@
k�t�-,
�
-��b�e	��]F�ubuPTa�RHA�Y��Rs6�W�%�|oT�T�p��Z���
+�N�b�r�2�j#�E\%�p(�
�R6r��6�svw��w��[И@�QK?���"�?H
ԏ�������
ٖ�R�Ɍ��S���>V�=�0�I�
o��G?3t�5_�
}�6��:,ۃ7]
MH1'����dF��8�q>��֥w#�MS{��#���
��k��m�-
�ESO�
J&�^��$�ϊ��n��jM�R�s�vjG����B�3�
�Q^���FfE�f�fQ��V�O���DFds��6���}SnP�j �
s�M7[t;���yrS{���Ps��ģ��C�{i9"���T�4O����&G
�-����U\���c޶�?���d7�O`b���W�(��b���
ʯO�
&-�
&�Zĵ�?q�s#`Vx{�y7��D�d�Ρ��ّ��
�˫���|�a5��9�E~�]�
�괖p���J�T�2&�k�f��>��eEj�}�&��Y��x��v�VG~Y�D,���'`%�n���V�
���ĝ����[Q#os�$$�P��[-��Ŀ��%;I��WLU�"Y���N{,�z����[?v!EQ�~J�4�F�oBe�I�k� ۵
+s����mR��q}�o�:��)t/�'����T:�K�(�N&-�䌖n�p$p#������6�����s�_�^"���ި�
+�Ȱ̃�[�`
PJ�.��3�g� =
+�-����݊s�vu�
��Ʃ\�
Go���}e����M��&���R���S�!+��yP��,�0�u�� ��ܴ�m޲Q�0�_[�H��p�q<����	?�5��>s��bv��o��T��K��րt��%�nR��ѽ��-�F�!�2C�g
p��jsh
̓]���֢.
}�=���{�WW����,[񥖈�Βm�^�'��Hg���K�j]���
ǰ|\����+o��,0�(��wSxBΰ0	�tq�t2�q�K�$�b������6@�45g3��
��
+�����s�Jw���_g��"����Q����|�E�=���x�����f�
��֖9�Yc��E��o���߼%��
��_�
�,��Z�
l�%�(/+��)��}�ӈO�^����k�
+9a�	���N|��ӧ��Ay�&�
���
�'ȼ$/7�!4�}�a��PIr��K,i����#u���7�Fj 1$>�Җ�t�Cyu��|�湡6
�(���3�V�����?���ަp�
A�
+̫H����KG�.׳Ľ��r�`b����W
8�f�C���
�Oѹfz�A+n$U�k/#��GaeDJI��ٖ��'��g@<g�
�;=�7O�/o6���4Ct�u��?3�)���1-Æx~�
�EH���Em4P�!=6^f�o��v�����,�5:Cq��Œ�$���f�vş��
�K��uy���xe�ʂ�_;'¼."FC'�$ ��ٍ�6��?���HDs=/��6��j�C��P��2
�I��`��$`����NC&'�ocݴ�^g,XH80�H�ɹː�
ET�
+��?�b�Sௐ�񓂉�z��Y���}x�i&�x>W��&p�	��O6$~r�b�;�bo2\��GZyx��D��9����.fZ:s;;
[]���^
x|4^����-�G�̒���"�4�eڭ�q5�9�^y�y�د��4�k#�J�8��W�Z����
V��h
��:�q�I�Re�S
}tCL�C���oy�737\X8�M�??�WNWR�}�&��G`��Fޛ}��>݆�p�(|B�5�y 
d!�ϐ����͎@�.xW������:�r�O������dp3�3�w8r�d�RT�1��(�$��ɵC��u92"��~�!�j�
��	#M4�h�*���<Y��A���s�s*���^��
+ud�	��nj�Ņ䗠T��)�l"���ӊ��>J]��`/��L�	xH����2���u�~B�"��p��#�r�M��
�
~�b�
+�ӈ��	�)�];:u�y99�p��X��L��Vw�X;�C(6l|�2�(��$&N�p�T�P]����w$�
+,P��
�6
":�,C��zK^���� ��R�_�]!:N��-��"�bʲ��
����H���6
�fh.i0��gϪ����#�Mg9�DDx�/#
+Z�.W2��7R��6���垃�c��X�0���x���<N&�L
�˼,:gJ-�,nd.�E��
�VieҲ{d���v��.0菖[�S��d$���Lj�6Tv�Rj"h#}��N�,��S�^�A$��oB�j
+�,�l�`4�	�����yi�
��o���ؽ�oB��y���=��'��cIJ��yԀ�
�f��	ɕ%���g�
�Ό<�/V���7�Pԕ���5N��Z�*�J���N
+���E

u
P�o�x�DŽ��q�J��v7Q? �@{��e��?r���X��A�fU��,p��͆��ũ���K-T��L��e�����Z����|җ����P �&_8x g���n�eO=
+�­Z+o��M�:b���&�<
+�����˶_���S�K^h�c�2>�>2�2WVK�|�q�)o���ݝ�,K�;���eϙ �!(d��k�L&_+����)&�
�s
�~�ms��,^t�����=5�]��3C�5�| s7�Z��j���-�J��2O\."��`�J/�σ�|� �s�#�9���(HȤ\4�
�L�Q�
+�,��x
XWdh��-ń�
�>�f
��
`�t.0�$���z�#�%�Y��-CT\y�J�L�
#Ruqd��ȹM`.�����@�䤗~~�תg��ttY?�(���0�~���2����S'�h�Z }��%G�j����챲` �.�/��
�̈́,��>�M���΢+<�JCB�+F��=��
�
K7�ٺ
�t��Ra5��ARA�C����yO����'��	�g$��w�i�
�3/��쬆���i�#��&��x�F���|ޡnGq�2C��>	�?����=���
FZˆ;��
�
+(݈%�>Y!��e�f
+=m�CL��;ã'=i�
��Otb}��=��<
+�r���pިD�pao7�%L[<��_����r�7q}�6)/ؿ�.���o��
�7������`�:{�
 j�]����v�|
�p������U
��Fw�db#��
+��9�vq�[4�Q���U�Y	V��(
���90(S?8'ο����z'�}{eރQ
ͅ�Iy�=�fh���윴
�S �Ae��[u��5�m~g8s(ߜN�u)��1��R� Ƒ�}E��
��N��c�Q��
���#-��a���Tp�{�H�d�J�!7���G#�/�H�
���k?T�YG��^:��š�}c�[
y�FeĪ��<�A��f��V�\�j�5���2�rʰ�
T#q�@��ϱ�ɞT�i���^��>&ޫ)���3��t�Ȼ��L�3V��r�K�W����T ����r���)��k���<c�1}ͬ�@�lD`��y�n(O&�A�Iᑻ7S
�[����It�#IH)r�6�I5�
�	?���|��j�3�٥ˑO�6
�N,��OF\5
+����{B�NSݥM&�����8�
+R�H�w{H�l
I��iI�;yԶ��p�B}����X�Պ��|�\�Zv��_�
� ����B��0]��	����Q-R�'
L.���%�uTʀ�.���zF��{�J�o�wc*��*v<��� �����=�(,С[�`�>�b5M�����!�\z�
:��l�G� (
�e
_����|��}w�Fj��/�)�Du3�L!�X;[�B1��]�JhTg���|���{�n��O�
�;��o�T#V�%��)��
����ӠD2����s�Y,���D���cG����`�"8��E�$���u��I�g8e����a��k��� h#6o�^�w�}�K�C����R�h�Y��2��r�/�&�

��������d���$5v0�#
0O��U���WmUߛ�ا�c
+�Md5' 
q�-���`Z�����������~c��H9��δ{rwxSN���>������tNت
#�
r"4
�� �3
���!������b��S#�J�=R�&�p�R�ONF�5����7Yuq��G��.4�&��6Q
ޘ�a������[i�b��3�v�구�p
L�dR(U� }��ܛ�Ɇ�s>���ӨnzB���"YSP$sQ�A1�
+���d���
+���6F�NimQ��{�(�4eY-ud�Ba"�/�$.B��ǯ�w#���5�G8�l)���t��1|�:�<P`m�!=����K�*���H-�o�v�W|�e(b^dl����
������^ڝC�k���]��
���8��0�y7���5��3�E�ɋaxY++�BF�VgJ@�[M*�~_%|��(&�gj�V�)<_�o�+
�����^Cn�V���].w��� g��{�[A`���X�7�o��+ʠ�`�=�g�%+��)�;��.��}��u�r�Dr�l���[m-�T����Y��
�y5Z�Kl��y+���<���G�ZVy&/��o�-�e�
��˂�>�͓Tb�nb����Ɓ��4��Xߪ#	�}��S��܈�b�`Mڭ���u�*�/f�L��9�	�
+�`����8d�^���T���m��Gd���""�@[�1��b۽X�53��������8���؁�M���{�5G����4�����2���t�`��w�Oy��*\�2{��R ��D
�%	"�M�
�7D}^$*��*�I�o
q��F\�eYEQnC��"l�'(�E��!|�Hi�;vF����8�G�i�<�B�|0~��=v�XQ��UW�����rJ�pW1��
Ԟ������Ur�[~�t�2�wG�r���9ɳ���G�5�-���tL#S 
�WxU��g�L���^��[����Ϻኍ������댰�B�x88)�����dC'��LɊ#t�_[����
7������lh����m�,�z
��d<fQ��'`�s��`���
b7=3
s�_]l�oQ6J��jX�$q�#�O
ȁ�a8&�z�|G���>�4��Ă����6)�t��tV�p;h�Z���k�GP�/��
�'MGY����������+��&�
��
��Z
��X [...]
��*@q�]YU������Zo�'��7����`�!:���7
�P��(�8..ǘ�}R�t��r�4�Y>��"�Ui���x�?Z�m:m$��K�q��ֈ`���-yM�M�g��)l ��X�Օ"{��f��_u�yj�n�����⯶�.kAި�4kC?�c��P14C��	���{*�d&"$�=l���17ʙ
���{�K����V8y|�d㑈�������c/�i�:|��YUz9�ef�P���le�A��U�B�5��� ����qW�8��B
[9}z��—�:-uG��2&��//>d��f��:
9�:k�/���ò����[G�ߟ�cZ�y)��`k��J6� �c*��ݶƎ��d�y�"��5A��8�R930o���irf4\���ݽ�}2R�O�p�.f>ܘ���ˈ!=P���Q?��
:(S�j����Zh����7Բ�rc�u��o�۬�y�(�I�(r��
œj_����@��kQ| �h��.�6̚�{��W]<Ὅv��
 [...]
���"�s�

�.{�Khr�'CFF�	E�
�
�
+�U
+�o�ݗ�B��Υ�&
+��D�����,�z�����/��쉋�<%�,2�*�g���K�Gx�yN���#��A4W�TQ�$�x���q�Ʋ(�?諺]�����ƎRQ%$�z�dA�F�L砶=��9f�?^�NSC���1��K#*�ڔX�_�'�K��1wM�ӌX������qsg�R���dg�$���?B\���K��(e�
+C@��
6��RH�j��c<՚'�5��������چ�i~ۢ�č/�ۍ�
+�wE5+�F8:�f�1�}�Ȉ�'v��1�B�ݕ�la�T5Ҧ����+��EZU��-e�w
��~�{_�O!H�)�W���,�bל� �C����#Ok`�1�(H�S!c�

��_S��ը?�ѥ,V�v�J뎚�ϻ����1*M\�g���$���Lu`�=%~� ;��8���H�6
�����!��n�"�1�I%� �]�"c�b���D]�270�L���z
��Hx�M�j�����D�&,����/�?�4����I�OD_�O4=$��v�fy�T��q�a�'ċjvl[-���le��Vygg�!ij�
�$���/a��B=�4����7����̚�`�w~nZY}�yG6\66�<qNT
���{��J
�o <�T������Gg��]�5=��OHmL�,����A2
���)�]��e3U�
(|)Z���!K��
3��$û gv���$Ei8Ày`��)�t
�齱
��'~u��*a�c 
�I�%g��͞`���5����R��mw��b�@ ���]��,�|9
�#�<AK�*��3��v&���g&���u���@��t+^c$AQ
Į�|51�y�g\j)�0QX�r�aj!n�-��O�j:.�"X/����L�<~���=kQ<Q��Du�b�c��8������W�
)Wb��o��\�y)n�p&u���Ί��'B�xs$Yz�kr
+Ak
ޑ-�x�m���yp6o���y(����	M0�℅�W�\������
+��J��Z޲Xt������ɺ&�
�ms��%'�S���e�W#9l�
�'VU�RS�b.\k��h��{��ޏ:��ݯH�qJI?����Æ����؞��#���,k���.��ip5z	���zV��癆��B���ƮE�+PQ
�uA�I�����
+,�5�\�����&#��r	�孜
j1�
q��*߇yK��k��-�rf:�F���\�p=�@
P�+�-�Ĵ��d�w�_�*����`{W��Aޚ�~���E2Kq�׾(ܨv���W_E�`7ҧl��l\{F05�*�G��F%��
bo
+�;�(��R)�6�^����h���]���(Po��_0�ۏ�Ҁ����L��q5tucx�6�БE�3�ww��Reu��f��«�X��.0з�X��2X����;j���=r��L)uQZX]z�^�WWm�8���t�h0��t�Ĕ�$X-N~�DQ��qa�IZ
Y�v�dҠ"6�Ԛ�ۍw
�r����_ s�{��G��
�6c $���>w���qdl°��yPA��RH�@T���o���� "���M�i>8����u15܉!$�e<uL�g �YA����,4��	.B�‡���5&u���K
�	>	[r�<>q<:4�$��Tq���{�y��ʫ3��3����Kj
�T��1|�(���(�iH�p'\�|¢Ά4!
���P�[X�c�j-��Ɩ2�؛o�b�uOq�N���#�+y`(��?�%|����Պ
嫩�X�|�Y([�-���p�Jaƨ�B��Y�+Oߓ��t��+�����oȫ�7{��oc���2�r���#�d)�kK�?�c��_n�z-	
+M�h��Z�<�ݤ��?��-��
�ʃ4j�����N
;$6߁��
�ع
���5�:�7
Ń�8�wE��O��m���^)���?+�B2�v�f	�ƾ?�R���k�2[�0�b�ZqDM���=R�6�n����z GA�4< a�*�<օXFH�)����4��}�
+��9��}-���g�Xh7�7�i
�6yJN
�*�&�ۙ��Etgi	m�+5�E�1)��6�gj��_����za�gQ]y��*dyQ_
!�]'|�о+��T
���v��O��1_&e,ah�0�|�`���ý�CP)�`\�2�]��(�0ɴEDL��/b)uO`$�A�|&%=�xSFU``B����tNN��Y|��~E9.e@�m<J
9l�|N����)�E�HZ���7
���:o�R?��
����"�,�([��]�\��'��b
Z�����6�=�@�Ѻ.�6���?�ȓ�a�Å O(���B�ř�����3+�_��-�j����J�Yz���=��:a�vO���o�e���4L���&����;�,�����.4h�=�;�� ��u$ ���5���������:DjR��m�,7m����q�3
�]������K���-n�V��.�I
h���E	�$
+�.'4��o��=P�ʺ{����B���<hF	3rB�d��@b���IϳU���·3
15F
�Ƥ\R�&
t���������&Їg��d�P�쎁�+�[��Ut��!�E�<��{;N��o܅��v#�S���w�Q�O��om�3���Ѱ�
7�gY�&
+��
� X�t���t;�$��Y�-�Z�
�h^�a|͚'����6e��M=��
�ݡ
sP�Ƭl����W�;�7y��AONy��ixC�D�[�����'7�~�J
��h����>���������z�����W�,�Eu�~7<���d���+�]^qL(N�́�ؾ���ꋒ��n�)H3F[��:�D2�&���!��ߔ%���q#�
��
��_
#ul��
+5W�\_z�(�
.��J��Q!S^ɼ�U�u����0�	�nZ��%Y��o�8�o�v��Lg�M�y)G��'5��p�F����^≩��!s�LZ��m��
�= L� ��X�����` �{DPn�mb�}Uo�*K�q~��
S���O��OG�f�O���W�3��v���xVeH�
-o}j挹���C'��g���
픲嗨�|� F�H�����
+��ˏ*FO����?N��$�#y��O:a��r�(~���̗[o�g\�27Օ�N��u�q�Fmp���ˋA$()1AtAsNɑ: ��ś�`j���l��r�5�*�
+�4���up�
Sjzַ�����+�9�jj
[g�����i�
+�٠J�7	iM.���[�!�9��ޯ���0^cO�k�� H��[y���ٔ�#�>���
�oC�Q/������Svg�lJWi��s�f*��|SȰ�!���i��
�7ù\�7L�!�K�ě�8�
�V����r��j���.CW6
+>�
���ڂ�'���î�L�+���R�� ��Y���
��Z~���\Q痊2t�,2��˞N1�n�:R�Y��RA]D�n���"��vv�/L�l�#�?"�
�դY���P
��|8j=]x|�%��{�3
��~U�h
,��{�K�&
��8L�T��۶��b���|�����4�^ƣ�G�/�q�F0aa$�+��q?=
��Y4	~��g�{tà�ꐷ�y�>�$���ϓ���h��|��
+�b𡺠[0&p��
ш��z_�B�h
+*�{�rjl�tBeƜ~�'A�y�������ޞ��!��ʂ��$�_�o�!�������4
.�{���|�;�[�4�F��M����
���+:+���:<��^Zt�<�,�;�q	6=�8��$
�_���>�
�s�[�6�$G�-"T[�[�Y��LZ�}���HMqe��Z�RL��eH�ޙZ�����߈$#�
��@By���b��+��$'i�_ m ��]Z���9�U�WC
|h��;�ޝFc e�:X�F֬�Η�!m5�m=WJ$��D�y-L��٬
bg����

=E>�?�8�
�N����_���^���赞��o8����d-8
+endstream
+endobj
+2385 0 obj <<
+/Type /FontDescriptor
+/FontName /MSDGYD+CMR10
+/Flags 4
+/FontBBox [-251 -250 1009 969]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/Delta/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/bracketleft/bracketright/c/colon/comma/d/dotaccent/e/eight/emdash/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/macron/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2384 0 R
+>> endobj
+2386 0 obj <<
+/Length1 1224
+/Length2 6165
+/Length3 0
+/Length 6919      
+/Filter /FlateDecode
+>>
+stream
+xڭ�gX�۶��H�H��" MJ(�;���B���{�
E:Jo*HS �*M�E�&�/k�o/=��=W���c<s��Wr�[�PD�������(H
�~�D�(n�RA� 
+�
+��� 99@����%d�Ť(nTPn�h�	�W�K$Pv��$ 
�8�\q9
 . C���(�� 
�����C{���  �p� �ap���!M�#
+ ��2���?!/�g
+��3) �Y���.� (̑���Ղ��_�����..�׿��դ���"\|�� ��扁�`�F�����70
��t��&�pPF�]` ��
�T�qp8B\<`���6������*�`5
����>�������/��
�͸�> K1Q11N������RC:��$n ��4�K��

I
� $����
E�(
n
 ד �#
+M��uJK��-�C2 �ʿ$# >�M� ��o�)���,N��7I ���	W��7����K�� B~�, h�/IJ�(W��q�� �A  �_�
�ύ��R8�N�3����C����!�@��?P t�� \�?��
 �wv��������w��
7��?��p�� ΋����
��
�e�}6)��7�0��� Ύ���s��������޿��y,"!	��A #%�?t�h4
���5����#�x�`>0��I�Ý`紆��@���2bA����x������ϧ�]����j���3hV�W��/�="��
��{A���W�^v��~��f�`�on<'Ϸh[�����F�K��_t�|��*��W5Z#�������
+��1S�t1
���~x-ݽ4\2l��Zr"����@�0�&��}T�'�YY~ҕ��ƨ�%S���5rpb�i���	�@H�+�(6����2�8,����
W�N�H�5�&N�-�����>������Y}��1Ǫk�(�ܚu"*|`2����n1
�/����_/�y�o0���A�ztgα�4�>l1U`
��!�KפG��;��� ���ˮ��`��Z��^;�$n�
�
��F/�kHX��.�%Ly%�#�
�Y�f�t�U�jw�
\�����o
�"0��I)}�<�zƙ��ҕ;�R9=Ώ���M���]WŸU��x�Ff0��~B[�K�c{=�{pZe:q���=d�c�nڜ���
򘘴=�8ku�Pbi�
+5G>�x��yi%
��m�0G��M^#�-��Z�
8���r�B2�cNʩD�����k�l�n����'��Q*
�x�Pdv��
B�%�t��k���S0c:yW:���N�h
�k��Gm��ï^�Y�����>*4��2b�BJ���&���6D��f�cg,�N�޽�>V>��\����b�T��8u��
'm���^k��P
I����7����z�w��(��
+y�:r��	WTt�~��,b}߁ s^+�|!R��Ա
Yb8��;ʺ!�4��	�7}��0
|��T�狗#^���t�
+�3<~0�s]���	'�f�@h,��G<�{�*/�@1�7ׅ��$_�=N$��H5��Rm���?]"���gz
�2_���*߭���KSY����W
+�sh���Y˛�`
7��V�Ro��.��t��/�C�H�ᆪ7M|��X��2�^�L6�{nZ��$n�٨�0��_m�GZ��YbU6x���
BR�:SE{73�ֈ�E!�ݻ
�Lp��"t��*�Tu���3ZO+�e<a �x�aDHҿrg�B���`��s�6#��7��xg��`�橸C�����<��;q�O��1iB���
��f=��{?;�	
�2�>�����yZe)ׄ�s�� K����O�\��|
�,��2#m�\ J0$�Š��2��{�W�|���.lY���0����v5�+ؾ�I�s"g1����H1S��N���8t�Ս�
��3���s
f4e��Ͳ_�
<�i�o���iG�'��Q"I�aK�9n�o���Tި���h����ᥢN��I��BѿH�Fo
��
�H�ҍ
[zW�:OK�$�د�q{`�)���F��݁0�^��熊�
pl*�m�[
+�?N�4�&\_��2a~�j<��ϝ��|΀6:W@�o��nxe>������X�O�֍�oN$5	��t�u��_>-
+(��lyA	��Ⱦ�>����6�*�"����w��#g�
n1�r�U�Yt	��f��ښ[	�<i�›^��!+K�ܡk�����]�
Q�(��o���E�na�?�h�9ZZ-��kE��
+h0W	뙭O�g�O�="���6��
��G%k�ܝf{ٔ{������j{��½Z}h�?#*��0a�a?��1��IRf诰;|k�$��+μ�"M�C�	�
~����A��%���`�~��{����8,.f���4W����lܽ�WU
+�ms��l�}���9m\r'��2�{��T/8f�9���z�а�H|�:��w���P��L�P{23
_l��4X�RSt�r�ԛ
+��p�P?KϞ<���T����&��	.��
�
8���:����hd��i�?|6o��a�KYl-�������vq�=��	Jܞ ݕڛ��~���(#�<��I<��7�v�v�x.6B�.[�*�
+h��}�a�N(}��g�>
0Xl��Hs tu�$�{ߟc2��Q��
+;��F��H���a�g
�L7T��̗��YA�X����JÓ���<����T��U]E4���x��N���V^��6*ຈ��+��ؾ�
M�������\�|r^���*�
�g�U8����Q�ÃN K�n3O�o�靵�~�Pi���7@��]�>|;�
+=��2l
�#��x�ߐ)+g��R�!f�n�I���I
	�%r�O��z_��	o�&^�\����Z���i�{�t�6��!�������*����K
Ӈ6ГMy�}f��6�t[\Wx���Ї%<��s��\Hl�������%#���3�Ox����G;�g�<�G�`�
+�B�̷>kM*,݈�gV�y"4=4~�'T����=}��Ӏ,��r���St��
ۍ�������5�� �~%3
���@HӤ`��n��*���*Ɠ�.N�뱧�y>�w:� 6��5���k;��W�B��W�$��o�f`A�`��>��UÛ�ԝ��W�&��.>Z�#c0
��$	
��r7��]�m`����w�֎F��,�Z��G
�f��~�������%DB��X?�+qcHV�{�t;ٝL?�z#��
xT�,�uV��ZL!�����Xa����J�i�#�lt���p�=k����YU���zF�p�ӈ��sg�G?�\l�/І<
x�������|�J�
+WL�jm��J�̗b�*
�:��⭝|f��L��Fۿ��v�]^L��w��6Q�C�L"��f��,؅>�|������/s��e�g�.V�+6�h�S$(�\�M�`�9+Q�N�?i�ح�� �M�.=�#O_$H%�g�o�D+�;��s����O�lv�s�f���[L��&-�}\��O�m���k�w
���~�!M���
��a�]|d���d �y���?�����˺����ަ�*ifƒ�^����b�9LB'�g�
S<=y
q$��
+f��%��`�0Z�t6�ʐ)L<
��Stj0���4	
+g���ޜ��$�|��{t���]X�g'n!�����Ts
�/�ij�j�o}K�Y+J�<�C`�BK'Z��qV˾��Pp��7_ɿ�`�g
I���x��/�l
��-���+K�7����=�V��=ʗl/��\�M�R�]�֎(�<�� 
=���۟�1�=Y�E楻���*�z�$:=��w��
+ec�
���ƒR*�O��I�|��`���k���ܐ�›�}�&��wl�4�"�o�?�f�Dг����K�
�q�G-;���;� [�I��& cGR�B�kM���K�{���k�㴧�x��Y�
 �A�z��
+�����
�z��)ZGI9��U�n�Ռ�Aw����J���]�e:�
¥!��G@�Kv��1�F���
$ԸY˲��Zܥ7��c�NŜs��.���b���l,��H��[�{
+�w��~����Tz�,��Y��13�eQ�N�Sj�fX���RQIB�`��D8�2�8�4����_=9�툇~-7) ��Ssn��
+E|W*�(K~˺k�	����|m�ܾ ��_�!}���x<_$���0\}��J�?�a��r��>��Y{s>Up����[][����J�
9LxJYVB���?���
�'[+�{#x�5ե��1�\�$�_M�������iV�������,U���;"cg0w{�!���8
�����v@�!���������/�����9�T�ya#��	<e):�
�a���Ľ�[��"��V�үM���,��:��H��4dj�e���ᙽF_�Q+��y樏����G}�����i�+�!Q-=�)wXv��Җ�7o��h"i#����ߪN��]���p̠%���I�C�_oR�P�YA�������ҕ����6�-S��h�OE�c 2��
õ�f�--�q�nS���T	��E��1Y��w
��6���I
>���'[��W
կdb���� �EZ`e���4¶��%��
�����2;�˷>���1d.9lmwr��B�g�G(��l���o���7��/�w��(o�
 [...]
��t&�dP�Xn��}fQ�,ؕD?�ʔ��v����
��m��Ü*N�k#���%\�l�>-�B��R��$'Ò׏G�1��],����0ɷ��ؙͫ��/��=֜���_|�=$�b�J��]�D��~
i�s��;�Ꮸ
7�.��?�����6~��ڔ�?���iua6��$,�s��9�H0��g0�� ]bR��'Y�/w�:��h�߭��k�-&���^J�{8uBK� �u��)��/��Y��F������v�S(%��i����
T�4����)ۼ
�=ir�qTt#�8ϧ&t!��΁|�ɞcs�Smxy�4�]���6��#mg��(��t!��(��]��w�5܄Qj�6��1K��C�`��
+"סOT�(rI,<S���Kf�b�Ǖlu�N���HV�\#w-h�&h#Tܬ�*q
�QG?����
,f��L�����`�OI��1��*�	��+�\�r �
6����#�+T ��~�
�6!Gl���h~�Ɔhk�H�R�:��4	jw�L�#}�Œ�x\է&t���_EMF�
z�4�]�zS{���?�Ze6� Ǭ��h��5������@���oB�J���j���mbS�՞)uՙ�Ap�K�p��z �����&)u�X�Oj�)��TH�!J��%Q�e��o��o�
ۥ2#�~�O�T�`B�h#���)��=vf��Ĺco
+i�T:tc�<?�R�>��b~���w��Um��\��E���wC��
+AA�E�L��O��Z��ސ4��e�8�������/�)'�Ԟ˴�^��v	���>L#"
8bf����
z�^�Q3��﫟^�&�]��sZ$�+���ɔ�����vc=�2�^�0.���85����}��'H�i��'���I����S��;?u
������3S�+.���5�ѵZ���:����>1�^|��Cb�i3z��TwW�`K|�f#q���K�F��m�ؠ+��WL6&�C��2j�c�WےTm�ҳ=���|�1_ .K�pՔ���϶����8�d+��ͯJ�C��͢/o4>�Ѻ)MnA+�;~�	����-|�:RcY�u��y"Y�smX\�4
��ȸ�%�;W�1�,m<l�Wh6���I�3~[�&�Z����BH
+`�T
^ݨ
�̭���ٲϑ�5.%�z��֏vf�L�@��	�=qB��x�����~7�:c������m��.��?$�|�t�QbN,�MD��Q��-h7{م���H�b���
�Fk�a&�o��u�����a��/����#�s�@��o���^���-ϳeR�A!�N�g���O�x)����i(�\x��#Y�ޞ
�1���,�aw�
mX)W�$M��L��SZ
�{K�|)� �
i=O8�Ӛ�Ҭ��[g�4sȳ?���8�
�%)Ā�y�u極���ב,��t�,7ez�$y�ۃ1�6
�[�H=�ly�v/�+? �췏�h��x!��,�I,�V_
��n��^w��z>$/���W4�?M�����
+�)HA�C�,:�Dl��G�Eg�M�9��$���{�,>'�LR����8��%��~�5ƾ<�J�/&܏��ݫ*1��4��[�ޑ���{���d�#:đ�yG�/�G���Q^$�)���.����X���=%��1ҬJ�}u�2��<���gBu�Ul�	tHG����7���SěJ´�i�z��*��x
l˼��4����Z�i�/�]!��9�Y�ں1
�ii���'I�"�>E��˜�6߬��|����"��|7��e�ס�S
��#w�
Iڴ�\[W��w����q�-�.ؔ�n�?��PYd�}7X�u`T|��qP�����=ݽ;
&ޗ��U
�A�Eޢ+�+s
\4΂���`�o�={��Z�������?
�YT[h�� ��Ex��
+�%-�f��g_�ڋ��)�ږ�u
+2���
Sݧ"Q���)ni���s���Ӗ���.D�ͰO�P!�
�_$�_
6�&?!.7
��&�&oJ�GT�
CR?B/��b.��{�V����/}_.>+3�d�M;��
7x��
u��r�t~k�_�tǣE�%�̀y<FR&��?�i�
+endstream
+endobj
+2387 0 obj <<
+/Type /FontDescriptor
+/FontName /PCAMEL+CMR12
+/Flags 4
+/FontBBox [-34 -251 988 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 65
+/XHeight 431
+/CharSet (/A/C/H/L/M/R/S/U/W/a/b/comma/d/e/eight/h/hyphen/i/l/m/n/o/one/p/period/r/s/six/t/two/u/w/zero)
+/FontFile 2386 0 R
+>> endobj
+2388 0 obj <<
+/Length1 1074
+/Length2 4131
+/Length3 0
+/Length 4815      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<����-���K�g0��c_*![;�,��0f�,C�]��";e�ʖ}l)Q�}�R������[��������y�sޯ������A�b�h;�&���C� u�D
��K҂��8
�@�n��p% ��T�� )I "�$��$%C
�����3R�Y$���1{
+�°�p7��=
	��p��8��DF?OxFpO8�� N
� {,`wB�h%~�A9����^����O�)@�dR Yt@����ܑVBM�'9��0�oqM/$R��S���'
sC }�[�vs���1 � Ǡ�]z��7(������Dث���p@��Sq�`���;�0�'��8
��o���iAB��X��L���3g C��&�����,��!��4

�
`)).)	!���߬��Ke�v@�H
!+�0�/-i3H$
�C �~��#�G���# i&8����y�r
+��?IA�0��H�%�E����?!�����R���oHB����n�"	H��AYR��i
%���
��
����pG�(�ѿ6쟰
)L�1��or2��7$y����'����
+H�eI�>���$�^�!i�޿��������BM
}�_LZ�"�*���2���Sg�!}����Z�#���p�=�=����r�KJmDQ�F޻b���jNuqz5m��BG�ɑ�}�
�����K
�2.Q-]�9���`د�%�#.u�x��v�_��o�����;�kL/j���e���^,�
ov���0Y�� ��[z?kO��7�|�4ŇW
H��ΦzE��'}�NM�

t��ԋ�E7y����d'
�P[g�вWnP
S>ο U�J�{����,�E�
J�(	��ƀ��9-/���]��J��t�񥍷a\�*��
�o\��
ި7s�B�JN
6�Ҿ@�w%�賊LjJq�������0�r�ʼnD��k0Ú�%?���޳��R�[o���˩|��S�~c�����������$��J�
���QqS'������a
t�h�
���xRj��K}
V�Y��M���a�>m��l�H���B
3XD�,��#��T=%59-�7-�|���j1.�$��:��+���>M??'�~+<
fޑ񈨃l@�
P�G��
��IA#��
�3]0j�J��Nd��!r:ĕ�a\⋹
��~
�>~�1�:�I�!@b&k?��Ĕ��0X3�)���{ƒ�-�3��
��Y^�\��g?_p��
��]4�_�(�_h�U\
+fI�q���j�J
�uu�͢���SE���[������g�vqR��w|_.����\n���L� ��|`Y�⣾
���w��}<v��2�q�	����kU�<�d�qB�&��k(
���ZS&�}*@�\������
?
9t�R�c:G�Xb���N�
�p�U�8���M;�����S��gobp�y'��-\Ey��Dʓ�1-
ti�a�@�u�ۙNE���^���;������и���e�ᓋ
+#vB�C�,��J%I<��&�������"z]�fw�ɑ�ֲ���������[O)����U�پi�-i��
>��݀n--D64
�h��� �������3���D2�<�8����<1�2!��2���3�����w� �������L6���a�sߓ)"����
�$�gdP�_�f�ތ8*a���@=އ�J
:���s��[iS�/NӏB�l^
+���s���R��� ��U�?L_�Hы=��^
���du�@>A��s����ܩ! uu���C�a�߹�0ی��BS|7������N�wx;,qC(jj�'?�U�s�
]���^���k�G
�JO�F�-
�ɠyw������?n�n�	�ؚ�
0HS~�P�����mmx��?��<�r��1��:��
`�
�W%;�Vo��Q)�C!��`�!je{,1t����o�E��Q�����f�;�_r�;(N^��*�
�c�T�گ���]�����@�Ah\
]�]�����o–ls	7kPDA �p���q�$ɧ���+
+;��~ȖYvs^�x�%��/c�a�0��w�0M1gGW#N�fkʫ����
+#�d�[�:�f:����l4�x���*�x��96&D�.���
?���tH���l���=�e�(����:��}�/����:2t�.S����
�
;}��.
��q��� i%�����t-���cD��8�XR�Ȧ�L�i��q� P��u�)����B�D��
g��k3ǩT�Q���%���x�~WT
+
�an83u�|�ȊC�+�6:��%��=���<�0����pD��|�����}�
�]���D�PQ
[���C�gU�c�
[�ty5��w�*�R�oF��)$1q�}�

��ˣ�����
+;V�S?	�A^��`�W~����|x�a������e!������I��e��c����zk���B�<��E:=�����i�b��J
[�R���Jq��ҥ�54��N��F�>^0��y�+7���O�}�pE١8p^�o���T�|%��%�2#��jR�-�@}�rs�
VJi�堽��!���**�ya���f,��Ŋ�f&��QM���E�S�7%b4{��P�7�����ǔ��7Fcru?g�gA�j��'+���͊OAl�:Ѓ�m^�Y�q��a9|Ĩ��-��7�ɂ�.��=�
+ͨ(�Y�
��ɸ0ϧi�l�Y�d�Z�w�yY���{
+���
Ȇ�dN�_m	m�{(�x���x��3�����'��Di	}��+fzq�Z�������:=4[-4���l��0�cn占���<��rj�I6�<����
�
/x�m/0�hr�wz��ilܲfWT��4Yc��9���lks"������ۏ� ��&��b|���D
���7

�s�ӻT��*���Qff華jX�5�g�Vg�L����(K#Z��|�Z�f@��^�FC.�R9����^�����_�S���f��[%t1%��Mg
�����QPa`k
;eJ��[s����Eկӿ#94�1�w��{
��vޚ\o�Q>���aO�6��
l�s'"�1H�"xW
�O
+��4�0ih�kk��n�.Au�W�6-6"_������]�f
I
��uJ�Ѧ�l"�Þ_��|~���
��Ƿl|�|m[Gu�U'~���6O
Z��Q�#��g��Cv��B�K�E7LCd�?–�*ĭ,���i��RDG� �8)�͸(ޟ����.q̯��. �1��C��#�s|)�㮜ȍbݗM��S
�X;D8v�#�w�L���3[��zG�>�);
]1�����kR�|�(�d��+�%�Dl��FGp
�On���*(�&��a{L�cT�l^6����nG�
�
�5��Y3m��Gn&���5X��R;��jz�2sƨ�K/sD�`�N���SQ���_l�bK����
g��:��ʚ�'���p���%,���7jh�0¶�x6b�ɞ�))�
+�c7mw����M<�ZV��^�e<K0*��Ӧx{�m��A� �߶o?ǭ0��M�^�"�J�^�{O�&Q��c��ߚ�#E����,7:��U�՗���l�Lsm��D�WQ���3�
/�v����o�l��'��������4��9qb�v�=�.y�z.A���6%;a���ʿt�fAT���:��Smd�'�W����b��
�&^����D�x��ܷê�'K��~^�D5Q�/�u=�?���D<#�!��bie8�,*�N?Cd"����Ot�
��k]����(M�$�bz�[�L).4�{%츩��ǐ �@\a��9�ձ��r�Et~!_I�����ƸI|�]NR�S�u�^�c�B,�4��#F�|V�waUf/�]GM]�v�.D�*�z��,����ɪ��ľ�zP��eoW� �ˡ
�KV�4!��d@~���w��-j�
+ړ�YV��W��ݸ��zxz�\��u��i�F�QHW��W��~[T�6�U���W���|��� pq�l�׭|��޸�WV-i)ov(9	�R�*�e�<�D�:�Ŋ��z�� r`4�kͤ?'%��n�`�:��R�
+�RX}NY��LP=7}���gLވ�:��3���H��*�H
�,=� :���i,�M��5�*��3�}����[��9��8#�ջ�&�����áMǵ0���g�r9��
�Uy0
+�/.
�͔�a�[5mS�K���m휌#g$=�I�s%�0�s��̏���y��������D7
�+(�����&D�y���6����]�j�
�˸�*��

2�R�M�B��>��/����	ѠBM�]n}WW�Wq�?X�����6�)'a���V++[�ȱ�X�SPb[rTv�6�+��+~
��l<��S-���~��O�s�>

L4�Dz����zF���+a�ٶ՗M��e
+�ׇ�� T�O܃��#��8����f�cO���<�
��A�!��Ɏ->��ڑ툇q�^8
+e6P)�Smo�Q2�z��˵���M
���r�W�B�7g��ioe����\�{=����5�*��z9�� ���~
_�i��B/�mQ-��	��So�d޽�e;�c~�(U�-�(ڟj�H����5���h�;�w�p���W
P6	X	�ɜ��v�|]���9�߭b�L�L8�lc�a?}N����~eO֯��+w���S���7�K
zt��vh�sTp/}��iI�0~���E�U�q���8
+�t�9H*]��;j��Ü�}��&���v�\5b�����ח����FO.
�G�� 
� �a�
+�r̟K��~ꨳ
+�T��/�@o۾�x�pI� W�~���Y�����R[Y���^+k\DױP�S�i�q����(��a��m*<H��{��g�l�
+endstream
+endobj
+2389 0 obj <<
+/Type /FontDescriptor
+/FontName /BTSFPV+CMR17
+/Flags 4
+/FontBBox [-33 -250 945 749]
+/Ascent 694
+/CapHeight 683
+/Descent -195
+/ItalicAngle 0
+/StemV 53
+/XHeight 430
+/CharSet (/D/U/a/c/e/f/i/m/n/nine/o/parenleft/parenright/period/r/s/seven/t/two/u/v/zero)
+/FontFile 2388 0 R
+>> endobj
+2390 0 obj <<
+/Length1 741
+/Length2 1058
+/Length3 0
+/Length 1580      
+/Filter /FlateDecode
+>>
+stream
+xڭ�{8Ti
�c;��u���"ט��1���ePFfPJ��1N{�1f0��j���E�]����j��6�dI(�
OC�U"�hm����}���������~��=v�!��


sqL�J��=�O�t
+��M�����
�1_H{������Ăx=Y,O����R�
�ʁ����p$�
B�A�XXBx!��B�+)���@0�#
�xX� �($:
��
D�b#QLj�
�?�E
+�g)��P�q
�	�"
C�@ǐ��8qL��X͹
+
�$c�DN_��A��D���2��E�
�8�
+��ƃE�B2Q
�C("�`b�O-$��$��D.�1��aL4�n
����[0~��R�`�0��ӱ���oMd#C�@$��N
��պ	G�aB\�`b��r�L)I4�ʍ��� �Dp��^*���@D�bpi�:�
@�����.�ˏ��Ɠ6�2�t���"|4&�pg��gR���`L>��Y|�c"9N���ֻ�pі��Ϧ��4�8�y�˳�OW޾8Uݲ[-�]
���T���\��:
9������d~=�/-.���Q]B�.WunnD.O�Dj3�~f|�l��s�ފ[���>r-�e���G߰n�v�I�#�\>�ŝ
��E�3���gX
L�g23:M�fO�hP�n�0�X��
+�*����gt��̟L�Z2C��<C����#&�e�֜Xz�Ce at gp�HP�֘���S�����r�M�L^B��9m��������N~
�hW���$�񨭠�6����;���[6��m�%�-�R�ç������
+0�j{�l��JUz�N�S�
s�S
+��1'����իʯ��R��
���
�;�
lKZ.�Ǻ
�ϝgf��{;��S
74�¹�>muF}�SiՍ}�ݹ

�]_�ii�vZ�ϗ=���39	]�13�n���y�O�A�[����ӎ9�ֻk%X�ڶ���;po�
�V]�
�mT�ҷ�l>Y�m�)�.�ފ:����������?��L�z~属K����y�r�
���o�.4y��E���tKH?���FO�vxQr������Y���4���]s�6�R��ӌ�+j���#7�}�{,���Jh���.A7��?r���u6�~b�M��Syf���4sG�Ū�we�M%��O$�+l�-q�ڹ�r�5۩Z
8z���sf;����!Y����JK\324�0�H�;�T����nq^]o�n�a�â�C��
+y�O5��i#�{zM��tuJ�޶�4[�pѪ~М;m^�.z(#����Pc8�o�����Պ��ɖ�Q�ro�`_�ϯE7��B��]��Tyx�f��
}k�o���<e�wn�u��8Dm�1M׹�
d�O���q
���<h����JȤ�9}�+W�֯l޶���Կ7gV��E-[۵p��,h��T48Ŵ��ۃ,]�tpW���TF{�1������A����(��=���~C)� %�vq�'�ǜ�\�ߜ����92��@{�)�P.qnxڹ�@�s�O2���꬞jkdu���{k_<����i�k2���Rn�Ma��
f{u�m���h�,��a�bJL�zқ�� 

��
+endstream
+endobj
+2391 0 obj <<
+/Type /FontDescriptor
+/FontName /UZQLUM+CMR5
+/Flags 4
+/FontBBox [-341 -250 1304 965]
+/Ascent 694
+/CapHeight 680
+/Descent -194
+/ItalicAngle 0
+/StemV 89
+/XHeight 431
+/CharSet (/plus)
+/FontFile 2390 0 R
+>> endobj
+2392 0 obj <<
+/Length1 735
+/Length2 1052
+/Length3 0
+/Length 1570      
+/Filter /FlateDecode
+>>
+stream
+xڭRiTSGŠU��
+�DA!��@X����������{�� A�(.X�.����"�("b�*n�E
+(jTqAO at A4"�=ſ=�g��޹s��g��d���6����@d�	x��D��,,<D0G0ԓ��N b0 �&	v ѝ�
'�
�x`�R�ǁ�����	a�a�����a!��a
@�A`\Jn
9!��E�\2	� ��`
��$�?>(_�\I�W(�	S��0i�\
H�l�qL8�?L���L�pD����-DҿqL)�a�ø�
K]��s�p,ꃳ�

��򥅈��X��Bp��1<ڇQ�XDl�l��zz�Z���(�b#(
,��Gt�;ZC��D6"$���)� ��n��P�EPb
ht���R1DE�!��\8���_[2���@D� x��4��
`���H����ݱ��6Ġ���U�A4J��
�H���xI|�y�
��
R{�q�
.��Y(��m*�[��
V��y���
����
��2j����b��w]z]�cMĿ���{k�F�Ko
��R�U��}��>�4H�v����5Mǿ����ຼ�̞���,K���
,wi}tť��t���
+��];�QNO�*L�ߥ��~��1I�K����^�Vb����J
+�{����Y�V�����M(�S�,����'����Am��vY�rѾt��U�Ʀ{�5?�z�cn|E����A�Uv��᏿�/l�5t�\��~-�,�Ԟۜ�T�A���!��v�ޭ:��+d�7��G{�;u�����
�y��Q�/$ݔ&]������@���8�o���
E��q��	;G��;I�9���?kF����
�����w�y	��.q�Rg�$��N~3�W���i]8�5�^_ק5o_ѬЧw�|6�t��
�^?~��h��+�l��Mu"T�*�H{T1I� ��#���Q_]�>�ɭ�C��������t}�Z�������5��N����iʗ�O��ة9X��������J�

�0I޼O#Wه+Wn|�rI,�
�,J���^�۴�[C֋�����5����%Cj�Y��c�R^NO9��H6��u%k�d�����
�(+�gi��r
�ɕ|ޚlVw��
�����9y/�fN�c��]W"��̮
`�[k$
$蚎�4�*yCpF��yj�V
q��Z�X����s�i�c}��v~�	���L
���24��?�j��
$�����?��5D�}_~G=/U���$&Ȥu/����Κ�:ֵmsSj��>ڝ)+28��,/{U7�{㝂b
�JͲ�֥Ϲ|X��MP=N���N��
hr˫�o#�����0���Ww~��e
��&63��oS�K������r����Ϻ�l�O
W)Ϲ���.?�StW�u��2ˎ���+�#
|v��ͷ8��V0�ɠ�4&�SV��o/�V���{�o5]�)�\�hfm�ʋ�?`���+j�N|]�.>Zv��
�]��S���,�~���Dxž�e���;�vV=o�50JY2�&��PG^@�L
:]�HNz}j;$Czq'
Z�(o�
��
�
+endstream
+endobj
+2393 0 obj <<
+/Type /FontDescriptor
+/FontName /WIRDCL+CMR6
+/Flags 4
+/FontBBox [-20 -250 1193 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 83
+/XHeight 431
+/CharSet (/one)
+/FontFile 2392 0 R
+>> endobj
+2394 0 obj <<
+/Length1 927
+/Length2 2787
+/Length3 0
+/Length 3412      
+/Filter /FlateDecode
+>>
+stream
+xڭRy8�{�l
YQI^d�f�!�5�����Øa�ed'D!�,Y�Ȟ!�ѱ
�-%�2�.ɾ�o�sN����w�����<�����~�E,.���n�
G��)��=S+U � ����@$�ǝCAu ��t< 8���+���aq@�K"`<<�����&U@�$`PH
`�$z�>t

\ģ0 �� �`��շ���A��p=08��7?F8w<���F��S
+	�tS�ݤ4@����$ 
�C���Y ����ԯ�X���<}G�SE�`����x� "H L�h������a�Dc|~��X
J��
+�o�	�"�pGb���<�C�j�����/Z_�h �=��%
$G�&��+���;�����0��T
+����?N���ǡ�h
�~ I  I�]��084
��t��
+8<����$
p� �¤'���F}G*0@�
������� ¿
�(��
���b(��$�8,�N����f
ÿ������F�#z��z�
1�s<���*�C@��f����"W��t!
Tа�jD�ƈ�ϛ��?�
C�
�A�:�G����[W��E)�
��G}�YM˫f����
آ�&~2c���,^���]A���C-�
���R3^����d�<�[�2%M��n�|�j�Z_ at 0��
�)�mO�3g��S���9�Y�Q�����ٱ*�vYX���	%+�
���xZ��4&�@L�W<[�������g˿����)o۾�����u?l�(�����nr!G�О��-�OC���-	!�'�wV����}��Tvy��X
ѹA�7�.����
M�>��7�-3��?�6���9*,I��/y�z�3L�[�Z��]:zv�瞶�_�Qi�5��%�q�v8�5��>�ƶa��y,�Hc�a!�Tt�316�A� [...]
+9���q|�c�e#f�
�	8�Iŵ�n��}}�jC��<� �!ZW��V�QF>���ɡ����E��JzB�ڪ�k\I�I�,�p�5sM�Kנ�\��3(�F/{'���2�E*#�a��2,#�,Բ�u|k\��Y���~�Ar+[4Q9���b|� �Xk �k��
0��
���DW��CJI��b�|�I�Ec�}Ͷ�2��T�D�P<���PƬ0Øa,xu���rM�*�/��n["���^���ȑ
k
+m�^b��^%
1SS=:���R8tK��e,�z
�Fף�3�uLG�Λ3���9��%ζ
+��g���ǫ`�CU_K��f����2B���Q�
˺��|��%��c<�Ǘ��`���7���䈒���
�
����VI&�����m����/}
��@�m�iI�I�F+t��Vj
�{40m|�?�/8x�7�z��,1=H�Bx�gWZ�l��M��Z;�[`d��m�2��%&�����]m"�[�q_5��#5)וE
R���h�RE����� �u��x�k瑿��ⴿ�y{g���k|����{�6�x����:֚��������.�6"�I���n��wԶ.�t�+�Z�c�+�<r	��i�����/� YuwIH�N�Z��Y��q�5閅H~�y�Ȁ��J#�O�9�Ӛ�"��\漣o���
[?��06�7��Ջ
���������[�_f�Nd��Ax*4�Y[��/�
N=�!�uԙ��)�{��I�h��H��1ù�b�
)8�dS邍�jwGm���].
=ؽ��2��&�ۍ`�|��e�T�H��a���٩4Y���?'l�t�-�\_
+����
�
+-�=�4���%31t���šH�J>-9��W1���`r$3���I$�M���d��F�;n
�����	O�P��UK�
��k	\ł����!�F5؈��;�Gs��p6�a{EOʯ�n"�\!}��
&'
	*ٹuhބ%Je�ڃ{����V
�§Ka�G��~��%�r&�J�
�'��V��iPK�$�ʧS�;8����x�g_`RA.5
+Iѕ����)�Poj�>&������e�!՜ ��Q�Ñ�����c��
�
|5n̟����޻J��$В��V�v�^
+����������M��/�!>���BTZ�s�V�F���v�����Ο�*n�n�y�z�yB��c���V͗v
����gk�B#1���p�Sa��\����
�i>�g���w�7�c,^��*3�y�����%f/�����D�W>PL?���2���?��u
xq=/se^���Sj����A�;+
��S僀��~;{�I���D�
��Mݹ��R#��n��m���i&M��v
����E5�h�;�N��:� �H�2yw��Xwm������:�.g%���j�o�Dl̖���V�{相�e$u��d�(p>�J{ܗ���TzI�3U�$���z_v��]�h��uj��y����ݵ��b�Zp��z���MӺ#q<:WgOT�}
�M�^��
G^=�T&jy/��"� d��I����-�����mj��c��˖A
MF��
k6&lR�s��
�?��ZU�!��
��PK�Ԃ��)s�i:)3>�sU�|�5+�- ���Q��M�q��h�PP;+����F�[EyM�̨�/L��7�
:��Wԓ.}�wy
��~��J/�)��|���A�g�\�Oҽ�i'r�x��<l��
��fA��-Cw�Psȓ�ʟ�;,��y�{U�<��
�>�b���UX�Q@
[=�T��ClҰl�i`�	8c����ް���>d�\.d�E��a��0'�J߫~�
(�y� �r�3a-�МMfr?~�۝xM�����O�v��-��E���(��R�cI�f����}��hS0ܬ�Y�S�(S?�װ$Mi!_��F\
�.��^�a�Z�yL�.�}
�|/�U���V?�������#��o����	1�g���0��G�^�{`�V����t�!%jc������41�|qm�����-Q&G�G�*:��m~�g�̫��m�s�ya���#qM�u�T.�5mV��f6���
+,�T�b��h���֣2e:�E;
+�z���o:n�a#9?���9�Rz�������g�\
l\�/s��i�
��IǮfF8��M�2�y���w�x�Sج��X4K�<vt
���®���ľ�d�a��̗���b�k��i�f.c��O��^!$^,gq
A��3�Cj��O?֋�/y�w
+endstream
+endobj
+2395 0 obj <<
+/Type /FontDescriptor
+/FontName /TSTSSF+CMR7
+/Flags 4
+/FontBBox [-27 -250 1122 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 79
+/XHeight 431
+/CharSet (/a/equal/four/m/one/parenleft/parenright/plus/three/two/x/zero)
+/FontFile 2394 0 R
+>> endobj
+2396 0 obj <<
+/Length1 1249
+/Length2 6169
+/Length3 0
+/Length 6921      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\�k׷A�A at b �rH�F��a```p�F at Iii��.i�;�)�V��{?���~�����u��ε�k��¨��#k���*!
]x�y����� ~^><y$�C8*�]�� ~11~���
@��B�N�H���
�]�� ��	��
`[�*
�! 0��'/@�����
u�"ݠV�x�� +�`	��9��ң�h� ��c�ru���
�tF���Dr P��pO����@Ղ������ɕ\�pM��_�Q3�?^�
���~����
	�@XA���
j�G��
+����^U0
�u��C|��`�J0��6�b
�Ý�ۡ�V�-5��% ee��
����Ϳ]�`�����ӿI�����3j6H��/?*������J):BV0G�q�H$�u.P$
���
��
 �J/���Z@��`�@���� Q P�/�?$ *�K" ��o �~ |��PY4�%�.���*
��
0g��!���	U�/����V ? �Q���@A ��D���][E�N�P�?"P6��k�����@�2��ȏR�G*�e"�@�2�ߵQ�N`$��v�m��_�?��_3j�N�!���
+�D�v�Q+\�@T� �
�?Ն�oD�
@�?���o���XN���#���5->��0���qE�r���@݅��5
us�P(o~��{W���O1g��]Φ>F��c�?h.
�?���s����$��h
s�����sx��ΰҏW/c��m���J�j|d|�����t�K�\7u�'��5�2T�`�ۓ~ػ��ͮ��
{���[Mgj0H�X)n�U�Q�$�eQ�PȲ;IB
��h��]N���ŕ�:'+�����	�g�i� sǑ�Y��-8"R�K�!2'*�����,
(=&X���8�$-

Rl`��
\��I��
\�z=���L�
*�yU)�A���K1d�����#��6�ۜ-�*�k�L�
oUs�r
����{Ft�.���{�0ɋ��|����C?/�R�O
�\㻃n,�����x������I���r��M��hh^$�Slh'�?�y�,H���.F�0�������J`Є��3B�=l���Id�<n~G��� ��1a<0�8f��c�O����^u���2�������5۱�}
X����C�2�9�HK���]
+��MIRW��t
��:�x7�zL�2�d��撀�䓃�O:Iv.�?��
41� ӥ}�\����e�� ��1�
Y5�;
�	�������%��A���1�sO.��u,}_
�H����=�� �����
�oW�Fɴ
�7�[�@��O �ҏ����m
��-���l9b��P�ױC�텙��'<dQ�r��U��%?�#�I�*���'��I��Z����Hj6;>j֮�cW{�3�;w*�V�f^�����0��<w���Z��I��
+��l]>�{�lF�hh���Z|��|~k_x�V�)��g���
^�<��'U����\��᭏Ҏ�XIl�q�	�#�1��K�
��s���glʫ���R�E �&쇸��P*&�In	��Ũ����f�VK��oƤ���,�	
�
^ʽ�)t��w&X'�a�	���aQG+ˋ��9����]�ͪ��,��D�} .���Ms˷�#oTQ���j)��&}m�.^�Im�e`�U��w#�.޿׽�t�T��U��/^��P��Bb pbZa��Ѳ��H�0f����wO�
ͳK�Ke��ΐƝ�����t����PK��#��f#6���G�:�ΔO��C�f�19!<b	���h_�q�G����=��]6Y�6���Up�%I���![.��삋&�$.R܁q�8[o���q�*Ԓw����0�i����s��>�)+�XlϺ�Sh�v���_�

b4D6p��OZSx��̾����К ��NI�
?�z	�%���0��&kO�[����3o0��5Z��D���U��\��cX7�u"WC�
�h/���>�I\
�u�
�Rf�{$n�Q&�'�`|��c
�L�~0e�^3��\����Wv�l�[Xg-�m�?w�D�����j�3sd����]hj9��EN��v?l��!n�<�!&,p�Km�׷4)v*\�SU�WE�&�~
(�UrG��-��Z�;ͥ5�۸ʢa��^IS��KjOp�����F�6�<�)��^Wq��/1�Ƶ�P%[��
+dcR!�V��K�
q�
�<�<k���O½��C~��g
ʻ�����zbq��vy�;�͖�Q�R�����c�_�h]�$��F�3w� jT��';[ì���/�;w["��
��̫óo1=u��ʻ�\��s^�I%x�Il�y�f�w�Tڒ��|��,<����4l�oծ�>P�߼�ݒ�x�-bi��
+h
�̈́kE�$��*�Q8OK���m���^M6MۧiR/��4+P�|��0h����K!� 2��H������6B^�<�Y�[��WW�R5>ã���/��,�W��s��;�g����a�P6�H<�(
��y�_��v��j����x���~e
+�&��,�3��YO7އ;<~��M�E�Wx����0�<�̟� ��i�62�����������h��fʭ}��O�Ԅ��!���<�!�Ņ��_B�^�k(+���)�(�4ٍ�d��ҕC�a!�Z)4i��|3lJj'���4�H
�h0��L$����n�zя�l�U\yq.�i�g��������
�M�:r	���>f>��t_Ͱ
_�|>�a�/�ؙD#�'I�a$��z��.��
9��|��;zXH��
:7��O��etY�'m#��~�D�Ԑ0YΉ2K;�Y��
�1
���Ր��
��E��Uq�`*��#�H�z9� p��D�Kv�C([��xϖ��)�f40#n�5�cN)����[����I��[�`|!�8E
���M�
dIɎ\��y ��k���PoM^���%V:=24e"�^*�%p�#��.-�M��89-=��T,���1f��e&��4�xhD��<좗�QP�Iz<���yh�<[P��:ZVjn�9���{�Z�Dq�"̳���?@mY%����~��fq�$�%��T�gj�9�@s��\yl/�
2���G��E'V
�mԥ��?D�����Ğ�I.����
+b(��xMh���ۯ~.+`���m��^~m�K��
jF��ݡ+3���ِ
[H5�

̒xC������M3

1<��/Q��7el=ʼn��h��g���)�X�V9LoIn6F�:^�>�'	t�v[��ՆlŌo"b
r`�Q�YP��p)��,8؈�b�1E���f����pL4�+��*�(���xB�۵8�e�@�{%�
>O
M46�3��Xi8)��O(��+��}��%����EZTJ�)ZD�[
��3��W!��C��k2V���t��}]��TO��E�ќ&h*���
+�9,9|��]i���St�T˲�{�=J��e�f9�u�Bj��e��F���W��������ݷ�#��r�ʫ�����W�Tѣ����,�6S�}
�.�����T
�'U�!�FU����4gJY�
~Mfߒ0�N{���#	iN1{�*�f��+��X�ҕ��O~$�f^y�����d����io��>u8iP<��d���C6��
:TaT:�[
u_*9�$|�Mu����q��>��̪g1�;
ʥ�P�U
���c
��x����y�F�z`3�����
+0uc�=`n����Ѳ�Jkl!=w�*J�V�s�2����0_T=��r�W26��e���[��'���!V�F�~
��
��h
�?5����{�(��ظ��e�4��}��x����n�\a=�{J������̣���P1������a���᠁I�#ߵ#,"l*���������A�t�\�w���.���r��X_�q����3��\�q/��=�נ����ˬ����t�4���b��j�G�x�O
^n?��C�&������(��^�s�&���
>菶����鸉yͱ��p.�%~*��MB�,���"�8߯u"n��be9a�T���pJ�FӢKSeE+��]l����
�n�8J�N
�x��q��ӏ? ˮ��r��d���o1�.��5��,���4]PV6`��բ��C
k��{٦���t���Zd�ٓ͞L���t*����

+��P<U�wq��˯����������4<7ޞ���Q�x����oc��-A&#��R'w=��RoU1��f�-�R�֤c*�-n}�
+�V�y�n��0�

b.���e��;��bPG�ㄟ��֟�"X�����LlCz�O�%YJ0O�
f��18rɝ�Һ�1��
+�y��i^���x�
����(Ԁb��I��C О��,��_�����?�pd<�k��b����
v�"�D�C
��� �����J��*���>��~�c3��C<��!��'_
�l���~��ˢ��\�pi�����Ɗ�]�Y(�h� ��K��5
�]%��
+���£
����M�&�4��-��|�����i���"���7Ub���)%F��%a+Q�_�
����p�k��xP�W�j=�B�b1�2^
�s&6�a�L���;M��8�ݴ.�Dv�7%ܠ�O]�ε��P�XrR�,�
/�
��p
+#%�����H����V�M���UC����܏��r��x
b~x�0�0̮zL1��ts

��zpH�+ܧW��o;G�������)���(S}
At��
D|���]�
���hk�p���	:m��!���0��~���5*�s�i(]}.�o�|��]�����y
-�*
�ڗ�TO����2��K at v�S>��!�#J(��Y.����.:��\�E��@i�(wc�g�P�FG)���=�<lr{�uL�S�U����B�C#C�gv����T��Z9���������w�
�y�������F�'�+��߈W�
q�I�C�����/�d�5������H�A���=�
��4�iU�#w����A��x+�UQ�g�b�(юV
8|��eE��EH�T���	e��'���֗��Qp��+��CKٰ�xN���9ޯc�U�s�*v6 ng�|
�8	 �v 1[U���؀�,.�q����S�)�L��{pēW�%
6U��v���&���-̱�s'��EQ�������� OM1ǽu�kׯ��Fj�-W��cRվؑ�~\��@���&��-�r� [...]
�"���B�م��r�'�ˠ��#�Qju�v]ǽ���G�Z0.
[�d�J�
+`��׹�1_?�܂b�O�8rt�{$�_���
!p<Ҍ���|���v�˽QE�������\
�x��0s�v�)
��``�O<
+�y�B '9]�;}�N!��d�������GWM����n��h���[3�%앜tY�y�@���lǩ���lR"������(<���~��۬o�A2fy���y�U�N��0!��cdԇ&�/G=O�E���
W��ڃk�mJ
����\�L��j	�	���y�7,����p$�Mܻ�+�穠x��,�����H2O/�yٗl
z�T��Z����(\;(�v$��™��e�+�!�ޠ��G'x��
�r�`T��T�(L
�]{�
l:f��A��0Dz���pV���'��?�
h �	u�x�t�sElD���¨7����A=lf��, 
�d
+�'�['bR
+7NK�wv��y N�&��v1Rz�cB�=�5�ꩴұ͒��_���
�M���9;�Z@�Hh�ނ�i�K� �]cg��*�;�K6�x1[1�dR��܎���Aj�(�;
+�̖v��Vo��ј]�E��7O�J�o����i�� �F�9
�Z@�*�b�\y�d�,�� ƙ-� ˏ�2%p��N�T.I&0��mE����d��gP��Q����4�
��'FGE]����_�
�3
���H:|FH�	�9[�'�DE�����Ix��jY`�-��}!�O
�t�	�+
�u\ުG
�?>����|��$CrRBm�3��u̦�ss�Ƭ�Z����;hR(�ع%,��������&���g�D��o��;��Ҵ���p�����}܇�/�Jj[��ʦ
s=,���q�̡O���
�$
$'
�4�b6��
BZ��d�Xe7�Ǔa
��S�o|��0�}��r��
�挵a3�q��C�
+��肶��,�q*B����x9�yӡ��"x
��*�o�Q�B�*
+
X�%zM&��i�7r��(���X�����‵��gtc�r�?_}��
���N��qN��)5
<zG�YՁ.*�wfE�����Ҩ����DGT���n~q[�P�!�zo��
U���M�t�B�h1��oBz�ӵC؃F�*��sk�}��Lc�'�e��v ��W��,Y��H��b�Ic}��g>-�
�FD3�{$�[L�-��n`�!A(9�["�÷W
r�6�dM�����2��������W��}'?�>̣�'K�0#�
~L%J��JlV6�9���љ
���~� K��m��"��6�wI�`\��	���������1���Y�2A+��?��d���/{
��x�)���<�~a�/�
��YA�3�H˧S
+�

�d��7�sr�
+�O��TL�1Ed�A�\
+Kb����]/�����c�Q궉h,esY��2�a �H��¦+���{o�g<��V@⦂��?�:jju��'MM�ՙU��N��w��
�<uWw3X���q�Z'h�
+endstream
+endobj
+2397 0 obj <<
+/Type /FontDescriptor
+/FontName /AAPCUF+CMR8
+/Flags 4
+/FontBBox [-36 -250 1070 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 76
+/XHeight 431
+/CharSet (/D/E/H/J/L/N/a/asterisk/b/c/d/e/f/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/period/r/s/t/u/v/w/x/y)
+/FontFile 2396 0 R
+>> endobj
+2398 0 obj <<
+/Length1 804
+/Length2 1837
+/Length3 0
+/Length 2386      
+/Filter /FlateDecode
+>>
+stream
+xڭR}<�kvB���'�F�b�
�Y&y*oyZۏ-���[楃�R�)/)	���Hy�pQ4	E��P(jtF��y:�>�����^��{_���n����Y���
:[�ĘV�n4�A���6Y�@"�ʠ�l���p�"�З�F��hS}��b0#XT
+�b��$2,A�D��D6
�� i��D�H��F\�:�W0d��d$��T8�S�PԒ#[�0�Z&�0�S� +Xb
+�"1�H,�tZ@��('��-P���a���;Ch4'b���������o
+F 3�
� Gd�����s�Ԑ��Y[6�F%Y��i ��C}-S�wR�A�
�M� ~DZ0�\�䟍H�[��rqw��@|��e҅H���#� ���^ƘX��x��h4F"����?=fM'1�T�d-�F ��"F@%�!AX P�d0
 �%�QH:�-i$�D~
t�S1��(p��
(���P������Kz#����d�G��z�X�� ����!)�����
���
�Q%��`8H��z$|�!^���h�]E�:�������x��A�����NwP�r��!j�R�[��;�Zi�F��
+
Tt.d��M�^���h�iiT
�:�R�9ʬBL�k����
+
�1�y�o�d
+�z��b:�E�3��/ҡ�sj
΂{_
q���Ɔq�!�o]�9
[�6>�P��s
�����N�߳(�\����N�C���ӛD�I��y�ٴ;����
���,W�/
+���Ĩ
p�ҭ��[�>HU�B���%r���\��ͱ�#
a�����܊b�g�����&֙�;�k*���s�*۝�Ǭn�o%׌���댁%�K
�?"m^���a��ݐw7j+3|���j����D���-��{XPl�G��z���zZ����v����탨�w\�"�Ae�k/��=)I�mm�Yf��������K%��D�>]��u��+Ul�k�4��
�5>��m��ʫ�hs�d��i�D;���.�V���V��us.�(�V��
���)�=�ّ�S�-;��4�TF�ǻ����yq(�zT���7�Z��%f�
���|C9�n���C��o��8��p$��1��&�0�u�j���#.r�!_hO�AJj
+r�{<Y���LX8��5��Qh�:�|��Y�䧷
����6R������������؟��U61v)���1XJ�G��`�n~��󹦩H�T}�K�7z���#�iQ��u��a���u���Ua
��v��W�~�tj�fѳ"��K���
˒T��Mb%��1��}��?��Z��H��+&�����(:
����NLz���1Z>E�ʪ��
+N)H#���y؆�Vir���
+���uf9#���ҚR���E�pBt-1p�kԟ=ni�
W�Y>ӣ�_��U
�T��_ ������(V��޵ ���Eњ�+;@�:o�?���UԪ�
&���&P��+�vȤ'>צ��jY���������]͆�rɲ<�m\9�ij
���z*�k7�
�ħ�c
y�]����N?�va��<ߊk��m+���e_�
���f[o�b��9��F�{��c�NN
G�&ت�J
��}�mߘ���=��3��\�S��` J��YsN����#�B*�LJ��?�������P䠾:w�[�ͱJ��
i9�)[R3����k�2��\������aS�v�҈!T�kbVG���=)�k-h�Z11��X�Ἑ��
��Y�C���i�?�t�m\�U�q
s!�
X#����|��<��#�g
+�>%��`�
+�u
9�	}fይ8g��b[�ݞ�C�F@�x�4�3������nS�����T�V5���g	rk�/j�ݵ�Ȅ�w��n�i�߾Y�'�g3V��qF�5��򐔂���
HmI\���W�]~��z��T-�I?���Δ.P�KD����>+\ y���

(�q4P�{���;�d�s�w�{�)���|m�¦��"
+i�ImM��/�nǥ�q�6���v�vgz��P���f
�{���p�L��
+x�B�{A��=��S#�@����n�Ȭ��(N+��6_G�� AD	]!��^�(��R�s��b�3|˔M�I�^3P6�U�]W�GX��	�Wv-�M9mZ��Jo
�a
�-�G!3˚{�b<콨S���O@���ׄVK�*�E�9M�
%x�
n:7���&}t�:�w%�>Mw����%�7�1����y�o����͞u�R�f38���@[��	�����B�/$��t���T@�'�T��zl�Վ�R8�v�JRX]Rʑ�ѾR˔	敓^۴�ٕ�
���i�`Ot���،�g�\3@]|\��?pQcC��$��&b~i�]�P��
�����������N��
+endstream
+endobj
+2399 0 obj <<
+/Type /FontDescriptor
+/FontName /PTPXIX+CMSL10
+/Flags 4
+/FontBBox [-62 -250 1123 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 79
+/XHeight 431
+/CharSet (/e/h/p/r/y)
+/FontFile 2398 0 R
+>> endobj
+2400 0 obj <<
+/Length1 979
+/Length2 4024
+/Length3 0
+/Length 4656      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<������YK��}�Œ��ke'{3�a�h
FֲE��$[H֒}�.KI!�.dM„,�������~������<�|���9��0���D�\Pz8,A�� �F�� 

��h�Qp�ՁP* LYh���P vQE
�"+�q�x��;ז�]�hz��h

�	�(/r
X�h! 
hb0���/| s�
+�B�A0�D#�
�
�A~��u�������I���>dS�8٤@���a1 �
+���Z(���S�n���ý~��=����{�1�]����%����c�]j��ۛ
+����w�
+�A#4�n �
���w�&���h�
p�c|P�QX俍�g��
���������;�+g
+Gc	��( �O�_
���£��=
��ȅ��?o7����E�h,�P(\�x<< D>
dR a �D�l���O �\�W

�{��@�C�2 A���P ��a ���?P����
+ �*�H��ad!�H���d!�?P
���@���x��@������!���wcZZ8b��E #� ��
+(*@��W!��Ga	����îh�IA��(h|���ZU���_L+�ÛV�9�*�x}�����%�o�-��]r���k/ HW�9�͠�@
H�[73�D�
�o�uG���vV�̘�q�E�Z�oB�Y�f�2�U�b.��X��ё��о�q��H��G�ٯ
��Vf�zn���p��=g
��8N�yڧ=��Ӕ�eQ��
1B%���} X�'�����!F�)�����:;�EY�V77��>w���Z
'����
Ax�N7�^p	7�AQ�����1V^>J�|C?PT�>�����W
Ё��
�@b{C�1u����1L)O�r��Ҥ�Y��u���O�wJ/��]`�����F�")d��Y�F��)yh�ԛ�s:���î�b-:�_���M�Js��6_o]!E���[�H�'|��x�1E��kJ$۪�H#���)�Z?g<Ds&
�Z}\H�֖�e�#5��Z��\CBw�O����B_ܺ��P��>N��{�V�
���B.��C��f�Z���|��i�f at i����ҽx�P��c��{"s�4�]W��37����O�]����
L>T�:�?%�m�+f�H��d�(�n9��/1�w�э�I
�����D�a�z��f��Dr����">�߽G���k��^���+�Ii����
�j<}J�m�
+O�
��i�6ފ�.+:�H��fI�6t���|;s粝ފ�f��Ș7ͣO�vm�!a�k7'PNR����j,Kb����/O�
+�f
�_xRp�MmkD	�q�@:|�i��B��XX��)�N��(+�hj�U��e�d��mz�c4�]�!v#.�
��V�\>�I�8/ڤ揧�!�8-�#x��$)�W+�
/�a�<�dğd�- 
TLo9�U%Nu��
����:M��+᥇���U�ZG��+ESd3<�GB�$�WC���-B�
�K��鿤Iu͗S����b�����Ν^�Ԋ�
�fE#�~�*_T��,	��&���v���jT��o�`�=B 	z��M
!
A�'�})����n����>nMѻ�~�p�g|��8�S�E)a��2���e�����f�_�:Y~뢕����J	���)
��Wz��x�e�*xz�a]F�yU�6���}�G
+)�^��L�����m���o-h9�?B����/0�HB�g�=�����1��S]�c�oh�T �V�xCy����|�h#Oa�6�!�d��,"}tR�K{,��GiB�si�|��L
z?���5A	�~j`
f��0S"dc#�
�
�;
����CW
6�v74�����9�:�9�N�
+=��]�=/\1
�)-4o���A_���;�W��S��{1
�5S&%�X�wΌN<�j����'%ԑW2R|���g>�p*fBV��XZ��w1��D#�N  �H�q9!
�f\
+����l�ԭ�������؂�٬��D���
+�jM�W�Bo�`޽p��d���Klyɣ:U,f���?_��-(�]x˘��)
��ʓFo�Πxox)_�m}�=<G�T�P
C�ͳQ�'�_af��m'Q#/Yvd�V��E��]��������I"s���|�/F�'�
�w
��a�b��=Dz�b^z����٬�Ð���tӮF���U��s�=
�A1Օ�H��Q�zl���7�U
C	ַLc�u������f&�!�5;b~�~9l�����U
+6?�
y�/&ϔ'|[<g?�}%.�����Ry��
+D���وwu8��-w�.@����*E��`�����Z�0g���0ܼ�u�t�@�Թ� ����g���޿0п�)	��`wAӼ�Yw�n���
�7?�c2��0��;�do���
A���1[�.ܙ�"rg",y�ϔv�*h�A���B�J�����^�4
�B�|��Eh�k��ac�4�0u.��
v!���>ӷ��y��J.C�������̰|�%1�t#TN(�|�8N���8X��
�j��[�Ƶ�S�E',�O�ìS�+I�f\�
/BR{�j�$+��Wxk��C���0�F
MY��f�a6e�?k:	$�5a��s�d>Sr]":���-{��'�Ʌ�%�)�������k�J��M�S��9�J
��#�j����%�
K������HNsT�T^�>k��
#���e%W�?�
��rU����#�*_F�x
ZRt�R�C/*�܌�RX���L7�V��}��v��2���TW;u�
Դ����|�
uH�V�c5�`��M����6A
9�[���s��r[/Y�mKP@ڞM-��`
+��k��Jz ca{���!�}�����P�A��w��&,{/�6��K�K8���$����=J
��L
40�&
�z����qџHf$��Um���4?���
+�ů�����NE�S(����_�Lk�.������^�k�X��ý|2�\k�#h����Ihn\��^z��]�S�C��
?�6�B
,��KmSu���"�js�&��N;�s7��� �gL�u��
A��ގ���y��ooh�1i6m���6=��
i��Ә��s�j�X0��!�6)礞����r��N��\_22�BJUo��3}"B{1ܶ|�y�cC
�Y�����ĺEFoeΜ��-�%m
�<e����y�>3-�������kl��@�bQߚ+5J#oK��˾��fB�j�
{����D�6[w�]����6n���
�ȶ�Ƀo�/�<��}�9��+i�s6���G`V4>9T)��6i�v��K9�����GŶx�q;(��~��62�qkMCw��v���q��D䥼z���Xi�g}΍��WB;·�pa
GJ�
�v'����l���H�^�vcѵ�_9��q#���I�1u�OFUb�Y�P{�N�
��{�X��/-0�6��ڄY^B�62��G��վ`�L��Л0�	��5t[;����ͯ�[;��t\o�/\�*����T�����{��
r
�e���
+�w�
59��~T�>����tG��S��䤙w���ᤔ��'L���);��_\���ι
1I&	�q��1��\6���S0pZZ��W��BZ�G�aKܽ[���MZgw���9Hwԓϗ���4� �d9S�[,r��/��M�P�M�+�X�>�c�l��<c(�Ju��

�i��P�����_�����;b�)}�~\tBz�/Ϗ��zcJV�
;}�8?&�2-Tu�~�V�+c}t�y#��-/s��y=P4�ǡ�~,eqOօ�%4�Lz����䯴`�pz������$�/�>+�.S�32
4�ۗ9	��_��'�,%Z�?8݁S[ƭMj�?\$P(�X�}?CY��G�"3��
��x<j�6
�Z3�S�Cd��O�_�X=�[�1��12�2���HXw~_��.�Mw�i�]����x'��\� ��ހJ�ww��8v8���z�XNTE�{$�p\����N��]�;��_���ۣ
ũ<�Y��7�v$�{A)�0��M,�{�X:.:]��_����f�l�՜ީjT�`��X��%�L��{�붾ᝧ�Q��@��v2{}�
8����e�g�Ipp��O^�\�
�{K5I,��67�2�D�fH����'z�/��^�,C�S�%�~nH�%�_ȷb�[���~g
%}>1[�v^u_5���x��kqS�7�O��B��Rr�����P8=�2n [...]
+v��_5f*�9�a����|�ž�ڗݟ��(_��Qv����GKy6�=M��L��{$$fV
��P`�R+Y��
�d�M�|$�r�bO;��.1�=�>�ȃD����E���,Dz���f1�	j�����Y=Z�tC̈́��nM�4�[�
��@G�"��{�x7�����_-�~
+endstream
+endobj
+2401 0 obj <<
+/Type /FontDescriptor
+/FontName /XWRTTW+CMSL9
+/Flags 4
+/FontBBox [-61 -250 1150 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 82
+/XHeight 431
+/CharSet (/a/c/d/e/f/g/i/l/m/n/o/p/r/s/t/u/x)
+/FontFile 2400 0 R
+>> endobj
+2402 0 obj <<
+/Length1 1122
+/Length2 2976
+/Length3 0
+/Length 3701      
+/Filter /FlateDecode
+>>
+stream
+xڭ�y<����˒�%�d�c+�c�Y][H�,c��Y���d��}�$Q��4�#*��Dd))��p�n���g>�s��y?�G\��\V
Mt���,L�
+��[����<D\\�")X"AIU��
+
��t`@^YUA^�
t���$��
�Б�MR�� 	�B #$���j��8���‚o9@
��v� f $]�r
@cQ�	t� �]#�(��ў�����$2M
+��IJ4E4���� 5&��i&�R����጑���{]��8��y��AĻ{R@`DD�$�練���@4��{Ԁ��aQZg
����ሿX�
�
D�b)( �đ�=п��ڷ'��7;�wI����M�X���
�f�a?ϴ.��^�����<��H�������PD4��
( � $����6�vB �` ��� Ћf
�#)�G Zk� 
��
��"��ID/�Ó6Zp���4N"��=��Fɴ�b�n�!���0y% �$��� �	�
S�1�@
�
���.ڦC�hS" u��.@�u�($��Ki�%x��р'��u�u��50E J@:�?b���{��$�� ԝ�ID�@®��2��$$zo��]/2��-�S�V���m�?������&z]�UPdU�hÄ�� ee��Q�$�a�����g
��� �� #CD�Z�kzmX���?�o3B�7;��F�
Y��gc�~戼
�Δ���ɚ8*�����(�T.R5o�q���
�;5Q�V	���as
4�m��Tˌ����-���HQ��uрN�<�͟�o�XK�%I��)��b���{��
�����Ө��QCS
�^�����:��{�
������֗��W���8LbZl�#D��W��{}�����۝��y�Bl�g_fH��v�x?5�cx�Y�P�s
+��S�8툳�8���z�
���U��wf��n�-F��ԥ�.�x�4�޸��'�Gm��JQ#�e��ƥ�rD'~3����(#Ϛ/i�.q
P��%ŧC�犦��Xys}/��AbM�z�b[��D��+�|emg��2�
+.�u�0ŷ&��:�湘C:1k	
9�6z��'��Y�y��W�J��m�Uا%�df�C|x����U��|���8��>�
l�ݪI
�Yg|����*����]�nK�l�j��-$,�D���ӌ2�lͬA���;u��G
^�ԍ��+�U��u����Yrkf���c{c��2YV7D�@�R�������M^�
�f3�7�z,
�`����E�����D��_��|6:�R�^��<}��z54��1W�����h�D��^���4q�̉
W����%�jI�Mu�5
߉L����7��L7�NI��_
��
x^tä�~o��W�c#n�{ꉞ�8��r�.Ѣ���v��v|ؑ���E4>-��8m�V��~�\
��TFې��ڸ�e�O�MX��QO��	A�%
�*M��r��-�	M���8��
��'�v4��#=�!%��c"�Zs�B��k�&��ɢ+�'�ի~����O��}Z
�|�

�����H�O{>
e\�.׀��Į/�'�~Be�+J���v�N~��ս��j�: ��"�9mn���?�IjU�,y��i1�����B�+�(��h��ag0/6��U�(>�)���
��\����#����vG5#�Y�OIY�Js�Zc'���+tr����宍���ٟa�w^��27>YEOt�~:n;Bv�t&�ʘ��0 at y�O^)f-ڲHW�?�))��N��qsD��[��޶
+]��\�ک��Ξ���T�`N��Xm^�ܶP7��<�� �5�Q�k5�vL�@�6B8o�
d�6~���0��%||���J��TYQ���{�@yAoU��m�����
��n"���\�z�Y��a0���|Ŧ�_ZN�)�U�"vU����q�[��=\{���\��o|������&F��g�Tl��K�/&E8�4k
Ǝ��}��
����0��^R��xA�N@׍8��c��^��ys�+�#��
�)�=#�I�1����*v��"xȐi��6�!I�.�%7�U���(0�=��&��F��� �!0��n�hm8OIZ�h��g��]9/v�
.(��]P;����K7�䉷㾢8՚�=��
[z���d�G
�X���丸pr�U�ҕ)-�h����8D��)h�k��ȖL����
~r�3]��cf�v��X��SGx��G���d�Q�B�J�S3D
lN����2���F��
+����`ʧ���-��l�M

c�w��A&`��=\J�J1�h�Ƙ<�L[��#�, �RWE���A�lC�j�p�
�����hU��V݃μ������QhK���L����=L�̘��C��6+
D&��ڛ
+����v�~�%U�H7��|��
�f�%�I�ᅶk
+�`�x��8I7O���GU������L*jC����[��^f�K
s�k�BN&���9d�hfG�/&
lU�h��������7��ȧ�Q����'���W݉����h߬7������PRw�s����c��/-܋M�R�=�Sd������|�� ���m�-������uB�7��4�-k��R���myU���*p9=��c�E��v
������
Hs�0�UE ��ב���u
;
+1��WEDpZ��dD��
`����.؆9|��h`er?KR�0{�
��L��>��y������!�p��sYlh��â�2S�U:1���}CA��
�b7d��'���j���424�:��W^����Q��#��͠sS�`�<ޠ�
�m��\����v
v_��5r���OZ��B��
\q��1O<�N�2{ث��"n��
9:����7 PL�_T�UC��8^�H��Ol�����x�M�f�
�V���K�-~\�Rb٘�p�~�v��
%a���w�
���{̝���yj����<iQn�g�3%�i'*�x���e›ьQ�]�?�,Xzt<�^����%X���]n�����$���r��P�wU�눩��
�%��K��Έ`
+.o�Y�fǮN=OWNN��	Sb֔�88
��E�
�Y9�<����Q�Ғn��H��TPu�r�ז
#�CT��BG����f��BO��g:ސ�
���woتJ)G^��i�J�W�4�8��.��2�e^r:E�X�"
+�������fbD��(��_���_u�m��L�C�O�
��e�l�?���촓�&��ر�*jx�
�UP�����;�
+�U�g/����k/���>�7���K
��	��z}^���V�ԣ{,i��-V�z��=,�gK��i�]ȥ>��q�[�X3ü���Zֈ!
v#�=�y�7
+����M�2��mT�V�*�	�j�L��.���q&�7��ufp�,q�jx2�u�2)����

�u�u0�ro�ڊ`�fYͱ�z�Td�j�Ԧ�6.� ��B�i���g�	�s�
���v'��a{�nvF��~�k�v�����ü	s�/�o\\����T�.*�_:Afd��0����A���l�%	2U��4?�X�A|�Piæ5\��EN
+�ˣ�p
�,�0�
5/d
x{��AoF��H��o'ٻ5�[`tC����������=
N��=�~�<�1�;�߁�8Z7,�n!5
]l����f������;��5�����
+��F<�
+endstream
+endobj
+2403 0 obj <<
+/Type /FontDescriptor
+/FontName /YHRGFW+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 85
+/XHeight 431
+/CharSet (/approxequal/arrowright/asteriskmath/bar/bardbl/braceleft/braceright/bullet/greaterequal/lessequal/minus/multiply/nabla/negationslash/periodcentered/radical/section/similar)
+/FontFile 2402 0 R
+>> endobj
+2404 0 obj <<
+/Length1 808
+/Length2 1061
+/Length3 0
+/Length 1624      
+/Filter /FlateDecode
+>>
+stream
+xڭRiTSG�"��
��$
a�
 *�ưS=*�	<
Ԃp at D�*AYTDD�F�
�"Jڢ�V�����T�u�k=�{��|�������i!�w����pI�
�������`2�((��$�\$�n quE��"
 \��9!n\'x�R���ˁ��ݨ�<"!��"���a$�I�?��P�b�����?(�T4�X
���f�
��!BL�{SH?Pѐ�Ѧ�-m��1��� �
���������+�@9�~4��ТH\��[@FJrH�5$)b�4���b�"r<�#Ipԃ�@�,bqr��l������@,���	l�:�1#쀵+|��S
�"����p>��j�cMgD�J����pZH��
���&PÉ0��u"��
���
b�T��
�Y)�� :�X &)��P�HF'�˶�3	%��E���b���@`G�B�Q��R
+�_:��7OOR�HXGW.'��8��K�*(
+�oFG���t�*!�hn"Q����K�Eq���u�SFjJ��'�
)�;�c��ܣ�a���y�Ӫ�li0���)��^A�ơ|�3SrO���ɭ`=򟣊O94�M�OUT�7ٻ;��*���d+��!�
5S�b���
+�_u4-��X`9��|jr���sT�=��>�V���c���R뤶f>���4.�N�Z%�ya_ lb��t^�1����U��fڠ��z�1Ʀ������F�۵Bix����o�@Y��ư��7\��~k
�a�W1)�xf��ۖ9�C�C����6Kv�/+�a
�{9��f���u�L
+�,�Қ�/J>[^h\�P�8=�����&!��:�W���˾�ɝ
���fE}VUi��^
z"��ʮU�)��Ĕ~f�� �1э�읙�	f�������}�B��Y�.��I�j�e��
QO^�6B&�����i�
�q˖���������/_�M(dNl��ۑ�ݳ�I+-jM_�x�����j,���,Gţ���CJ����>���/�v,?�b�.8��b���|6+����
�?�<9+�Z���,x����'�he�T���E�ŦӺ�W����
��^
m-i^��ݏ#����_�.���Kk�詪	8��>i��5��:ʲ(�l^_��S��
w=Y�6�/$����E��ʇw�uQ�Zº�:?��$cY�A�]���`�jzS"H��@�|���5�]��l메7zf���� �bN�Bc)�YXrko�>��`��ȊA����>ҍ��/إ0�]�u��0��̻�i�=�T����sW�c�T.��2����v�+��	�p��zE֧��_���w���VǍ�m�j#L [...]
+��Vo��깁
f?����p��Y?O0͝�4����0�
�V�(.&k<�0\�DS�qqn�ζ�o���b����=�W�iع�|�J`��R�:u�wKZ��P.�x.������U�L�|V�����
G��
+endstream
+endobj
+2405 0 obj <<
+/Type /FontDescriptor
+/FontName /TOGNJI+CMSY7
+/Flags 4
+/FontBBox [-15 -951 1252 782]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 93
+/XHeight 431
+/CharSet (/asteriskmath/infinity/minus/prime)
+/FontFile 2404 0 R
+>> endobj
+2406 0 obj <<
+/Length1 1341
+/Length2 9525
+/Length3 0
+/Length 10312     
+/Filter /FlateDecode
+>>
+stream
+xڭ�eX
��hqww��.�%��`���=AB 8wwww
�
\����|�I�������U��w

��:��9�(
�wafga H(jȲ��Y��đhh$��&. ����
P �������ݼ��y�y�h `O'���
�^��_A� 1;����
�h�b�{�afb
P���.�, 1[[�ڿ�p���Nn at s$vv�9��`
+��#���I��
��������n���ߤ ��h2 �$����� s����������'�v��U2��W�:���؁l=�'l���t(�́N��
�
���"�
�j�߻�.&� 31{K[ ��������� gi��\�bf�0�u���7�o��������� )%��?���M�������'�f��oMry ��޺���v�����7���-
�< ''O��C�F� ov ��
� z���؃]�
�u�`vB��w�����k���
`��C� V��/'�U�qX���U��eQ�C| V�?�S�?��`U�Co���[�?�����*h��ގ��z�g��������� ��!;����X��o>�ᛐ���M����
+h�W���/|��
��l��73�?�v>X�J�6�������O�v;����Wa�u�
�d���73��-��_�&�������o����M��/|��
�D����w&���
���<� fn�9� �y�}��H3W''���?<o���lz�F �h��46
�Nj+��ʝ*�ep&I)
��Kd9^Ěsj�� �]a�bZ�J1O��Y�-�7	�|��YC1Qq�S���͎
���2z��2>
,��:42�/S�n�u�V*�d��!<�
S�0�|�g�?����lN���d�٪� �:܈
}<�炗��
Ro�_�{�flVQS�#3��������a�5�ĞfC�����kU�:˰ۼJʢ*oa�c/���5,6��
	��'�åu�,�#ASse�7�u�%0��r��p'[a�
�ϣD�Ї��lt��_��,�G�
�'5k9
縂\��GEDGɍ,	���_�
.�/�n�ǰ�����4�Y[4;~v.e�H+&{���� <�!c�hNx���������\���.�#�d�r�_Ԍ�G=��ۛ����"��Յ�.'0�LB�2�CZ�ՠ�b
1R
W|�=
�o��dA
+�&��:?Џ���:0z��f$���rjYv�6�
�����^/}�t���Q-xW��6N�F���\���EN;d¸���R���c�w�A�
s>lXA�V(iD��W�4?q�w�;ǓRc�E_��&��PV�u��N�ؕ�:��eh�
�N�6�R���o~�
D�t���]Q/�B���˛2����Ǽ�3���#�X�a���b(;��
R�A��;0C�ƣ�r�>ڜ{�/a�LLj�[�B��3��A!�;�6���NWb_&��>�ƾ��(qF̎�;��o���ON¶��;��Μf�V/�O����y�y���9�����}w�>�&��$��I0&�)ϑ�}��ņM�yԴ�f��Q�Wh69�qB�l?���t�D6�u$q����}ò6�_��Hڳ�L�TeX���[/PϦ�7e0�ޕOu�;b�����,?�!��0�� �=|%�`u�7��kE#��sF�~�ύ:h;�:M�N���7N坘��n��AʶSP��
(�
s�
�C�MU�A1���j󁟆	z���6�tS�*�p݈�<���jU�K��ɯ���2��k��7v�29�E#��l��l����� �b�,c{�6?�t`pOO�}Ub�2g�j�z�0�����
T�Ӯ�G�C��S<ں�M&Н ���V7o^�^��ӧ?H���~����\<��'��Y�'��j�|;v��
+	�
+v��5󳩈���Ĺ�Q�i���B|z��e����˼T�W9pn���l��k���0I��K�k���[Xvg=[2���dL
�2F�[���I����,x��ѳW��Q��|�볊P���0
���Tn��3�*E-��U�Ʀ�º��a3��-Y�����
��°qv�栌�����Nt�啬�i~љ��b
��w�s
���xh7�*�9.�X
"�~(����X��䅶w���z����jSf�1��s�W�R-�r�b�A�ߦ��߬ʅ�Nk�
�j�"'����x��i2�ߎ�3�����W�I���R�Ƨ��8;|�8�h|�'�bh��sT��od��0�_�j �XRK�"[
+���Mq3�h�S#=`��a��������@Tjy�o�G_DV�1=�ђ��"mօh����]ف]�ݿ`+�Q��6g��^���I��+�_G�zIG&�ؠ,��j�S��c����qMX��ʚ�x9E��c\��7ݪV���q��#g?h=;E�L��B<d�Lݏ^��+W���޲g!"Jfԏ{�����Nv�Z�}�����R
��p�׆Ez̝����%G>�3�X��
���-Ńj��O�֯��ݙ�./�
��K&���p��pi:)��������t�D�Zz��,�U�'�O __��\�
+�Q	[΍S�?�)}��xJ�Z
�S&`��i������
��0�ػN�sq��{9��HOTW����xG=]�g+�!��
+S�ۡ�t�f�n�cz����TR��V~.�
_'8�� �Oۣ?�Y��V�#C at w�
ٵQ�{�ޗ��Y��{��΅î�����
�b�
)ė"`}������_"�
+N%煊��OW�ȍ�~k����>/~���k�Mڌ�
q7�4���.*�w��y�q5ܛ�7� �Z�y����2�5�腖�fTC���dZ=���^Bz��;LT��.mL��
�NP	���fJ&R��.��KQ�<Y�j
��泥߭�8���{UX�7�0���K�d��m�I�Y8�/ŽЌ
i�	�yX��'�#�,g�|:T\��)��©Bp�|��KU"c�
���#,
�&��_
��	&-��p' ��A�{�
�d��ˣ� �A�iKfN=�f�;x!m���,>�'��{����j��<f`��&�7"s\�'y#a7��/
��d���B]U.
\h�_��Xfh'(�V��\H̥3beU�|1H"���lc>��o��1�����a����7�`bi֌�+O�&�D_k��m���Sh�#H�+�)S�v�n>!��cI�,�
aQWe��$`?�{�j
�CU�=' K�CPfd�j��'&a��=e�*sX�mt�%��Dp�yGz(�׃kt��{cu�S򤕬WX��%�b2��/s�����4�~��Dq�2yzZ��JL�U!v/>��D�9��vE����������n�ʉ����8!�Rc�]�``��R�ySo�Ac��K�FY���m� �C���b�f�'9d�~�.tF��.�F at G�drL�����B~
_��G�
kZ��m���ʀ��+��:��d���/�v1�ѭΟƫ�p'��b������F�.�������ԙ�GW
+[O��Q#D5������{=&�~�i�4]]�4�>���8S'�g�v� �9ˬ,a�T{-�XgF��˅*qq}�f�
‹3��Y��ϱ�l]ML�o��>��.�J��g��#�����3�ьm�
�� "� �>
+�.MSa���5��
yb�� ���_"�O��2��zU����
���*���|5Œ���
b�]�
+
<��Ohڬ��=C�n�����5q
����Lrm�E�
�,��ssK���by�}��
J�钾��V��4۸y0�K��-��8\M%n��v%bw��h���ˠ&{��U�F�{^�n���FŹ�P'=<��M�ˊ�a��
�_�W{�c��
U�sh��r
�7?�{�֣{���a?��P��	X���`V/���I\Y��)�JA����E�5M���]����J��6����jȠ�@^
��Iӱq� ��,Bc��C�߆.�����=������ܦ�!Vp}س*
�F��Sp�-��<p�o�>��3��[�[�0�q at r1*���e��d����c�z ��k�2
+?HW���"(�m��{��KWx�I�&����G6!�70�I�o�)�2� �Z��6X�\�x���a��7���F�
�\�]$���v#����5��'��'5��Ox6�h�I�f��7�q��,{-��:5(�(����^~���pԸf��8���:vS:A��iK�L�Ky	��Ƃ��R=��cxXi#8\k���]CH��X�v���Z����E���Im[�R&g�A?��W��l�Q�$9lƋ�
�'	�1
�C�tN��U
+ڪ-��q~s�Ϫ�HOꯁ"Z
�p3�m�K�pve"�o��.^��n�av�r#=`m$d�3ݵ�
}�_kJ1�*-׶���Q�'��
�;S�¯lYx���v at e�݁��[5::�^���
+�QS���w'��
Á���U����q�
�
+����(��=�?.'�1��}��dT�u�Xs����
�1��J�'���x�
�SPez~l�-�P $�0�����*��|{��;J���=��|�(��
X��Ʒ0ĵ�ɽ��Z�;D *,ߎ$�_Y2�H4D��Qa6�������H$"A��0�Gɞ~Ra���'���ҹm�įttAݹ++s�Eb��NB�tg�B�(�N��̆p���7ahWwU��?3t�t�k
���
��Q.�V�ԿP�`y��t9р��2�8���b
����'�J���)Z�`Q�11�۰!S�%�|��,%w��:N�I&�H��^�>�r��55&%��C����>���
���"�0��JB�"%$_[
B"�
������y�n�����U챋Շ���{��8�T�nc���ȑp��wn
�r��"��}�%7f���3��Y�[&��t��z����]�yZ��9Gj�4����]Bb#��XF��͠GV�������ޕ�
�pi�\S}�`�UR���n���[T�qgʃ` [...]
hq��s��'�?�

���6��QHFZmr����/f>�nԥ��Q�z��T�
�W��T�����^s��N�f��e-��CU|vv�G+-�7����ˑ�ѳ�5o;�op��xEp������'�L���{��w
D�ď9d��

+�2�گG�

+��c7p�U�c�F���;���3��F���
��B�v�v`gܓ3md}���zN����s�) ,����I
�
+-Q.�UD�'=I*񾧯/�:�G�s�2@�E�K�݁���jU������eM^ۯ|���X���|��Se1��q�efzwĩ���I�խA���B܅��a��v�{��)p��M
�P�<3ݽj��P<
�4�fv:�o���+<
+X��
���5XMIC�����_�����$3��Z��	��.80|dp�]w
�9f��ډ�۞P>m�_��p浨���K/��Q%�z�:�ت�ƫO/�o
��&J�@7��T!V�#�q ��Y�q䤱���X{BÜK���m�Ķʭ�R0o��ӱ��tW����	�<ϯ�Z�7�)�ْ�!J��לf�fҡ�4'wt� D��RGR��>�!�񡩎�jQ�y{��VcP�@6ZB�ssgGqh���\��x���ӇR!��Y���
��#|�)��+�f�'��?�"�\��3�(1���� V{�?�4b�ˈp��Z�%I���k�њ�(�؏�2ߥYGvYhL  v_}h�e3Z)~�}Lv���;�X_P�2VUT�����W䤜�FM@��L���u�l(��DZ
^�m����W�­��_Y�A��~����)��37W5�M[�Diq�d#�+��F��{�f=a��u�>��F'
�z����i��#L
 0�����.
�%����C���C�;�V�#NE 
Ϛtm
c�4��Y<� [...]
dȹ"^�JQ=���.�_���,�T�)!Xj��_�@`T$�uQ~y�v���|Q�m��I6T���.����,tm�<z��ڀ{���~�w�dm�o�
{�T]����]�7o�cˇ{��/���r^�S�l?i*��U��������{���4��ak~���A��ψ�b�O��'�/��PtE�e�;��}��)�+�	M���$3K�����|�ݿߊ ۩�u��P<�
�cKV_^���>-�a-.��B��]��|��A�"�J�z�"�M�r��A����t#ܓ�	��A"�0iF#
��PWʨҨ�NYm�g�/Y��<������d����%�i8�C0E+��r��(�q��
+��CpD�zs@?�t(�X����{ڽ�BT�)����z�8
65x�p4���E�gu��v�J�!T�	R2�V�X�VR�Xµ�Hs�q��4�zG&��lϏЩCw9�ː��n�JT�������������`
��U�z���
+}�9�f�v{���MK58!ħ
HMv8v��E
+E(���!0�VLy��>ˎQ��W�����r<
=����N�#A�O�^�����Anz�yA&
��<v([o]��&�j ��ͣ$L��3	��fN� J
	ān���˭�}�3�}���F
�:h[pܱ+����3汄�g�`ƚ�I,�+\������%��{�4s�%���U4�4�[�'������Z@�gtS��P
uf�Y���s�(�R�	�
�/�U6!]GN�2�]�֙�{�~
+��+/aAY�~�ۖ��d�1��+p#�H��
�H93-�ph��\�r���* ��E�����vpe����õ>�ygj�'ށ�1N������.�J�c�c�h�=�;�����laU*  U5ޤo@}$5#'�I����
������/Sv���QM
Z(��
+�-?�,L�ED7]�M՗�{��N
ZHWnՇoH.�,
��ů(�NxO�
�)^~�kZ�t4��و���XC*�b��#U���f\����S�O�5����^YU�����A>�o]��W�"6�uM��
�Gj�h\���u��w�M� n$���fX�؇���*��,�X��3�(��h}!Jb�g�\��������-�XhK0屇o�U�Xu���Xc�H
+5 [^1N8�h!2�mT6�_*�
+�rk
e1xw
��qU�e�9��)�ԣìU.��_�ɳ[Gg[��5!�~��o��L�~t� ׏�1�A�0px���a��;���G���Y��
���u������
~�xW��������������5�R����!���W���]��K�}�=(O�0#1%���%�Y��s��ۗ�#|�)(�T�%#"�>�k�&���`bP�
W	�T ���[��O/��4��Egȵ��th��Փ��\���=b�Nۏ��Y��a�۫8:���Q��U�UD( L�#�RPY�۷Յ+
s���.����ˆI&�Xl�=�+�\�S!u�hn���y�T��$N-v�2f��³˰�[���s��Ik`��L�S�L�����L��c� �&��k��] �1��x᳥!��
��������������N�HՄ'g=�#S��
��y0�;�蝃9�|ڂh�f Q2�2����SȂc�p	��t{�%���3�o	�����1M�ZM�AMa�M�!�r��_�J� [...]
w�4���{�9:�� �b����
e�@2�o���ďcN��[?��X���:��>

���(��
�~c�'�^�S�
�
������}Tz�����Y1�K���L�#ڡ��,�Fh���\
��;

w��}o�=�dQ�o@�>�
+�T�ɥ�>B U[�L#IGÿ�g*8�?��F��0�LD���-��\�DM=I�v�Rϗ�g�ʓq��sA�h'=A�P2��6��Ȓ�$
+���g�
�փ<���Dhqh�t�O���_�O�تyl�Am����1��u�{��y>�v��t*�1�+�gl'���}p���3�\�!�
v���rr@�YqM2��a��
�/
+�
�x� c_�#Z76�YH<
r����$�����E���
�����u2�Y��Qi��"�cn%Fd�]��mf�
A���F
�	�[�鈭�;H�����vD4�N���8|r���VК(ѵ����w
��b4�`^�}�B���e~�:�}���}��Ä2ů�ɥ][����l�*
�2\��B߫x&�W|���5�ǽ��
Iϵ��n���!�Ծ�z<ۢuĭ�-���M���*�)TLl�C��Y���l"�+�e҆��D4u�*�5�~V���,2�K��G�._��PB�KԺ�~X
�y��`�GO��,��U_�)�z
b2s�^�3�wAr��mk��
+�
c͖i��l]���y��S��g����b������hͼ��*�q�fn���"ݤ��C�HCa��k<�ݔ�1	�2�X걽�+Ң����/ 
9W�.H5������x)���d#��
�Ͻ[��At^�$y`b�	l�y�	I��8�%�IO"L��Vm���o<
��'i��2f���TRP�`�����e�w���	�|�[���5`]�V�);�t&S������f;%�.7������
�/�$T�I�_�u�U-7�ts��YF�l�RѠ�z
ͼ,&|FM�g����u���f
�ӕ����̽�yBo
+���*�^Dj{��8�݇��	gr��������
F
+��ş=J��R���v#Ao
���]���XkAf
a�6�7pR=rS<�]���y���c
+a�Y2��8/���
���6�
�	|0�D��!̏1�obU��\�U=�'�S{[�o
�7q)��jDZǟ
+
�I��3+�O�M�旰p�/�ig ��C)I�Ug���
'N4*�^���i�F
��&�Ϧ�7����Ü�^�e"���B�1~dQ�|ZVֻ(����܋��9Қav�%�$5�=�*K��
+��S

�g��p ����*m�������7"�v
A�
}:���+�Z�r��"Խ��Ң1��]xt+�'U
߅����\�o#�T�bl���B��4���F�l.��.�(:�E��,��.EV���}Ld����^��U-$���{<
�@�{�̙����|j
��M5�=d!Cp
Sw0�2�9]cz�DHHrf=~��������ȷƓHA�����8bϐ��HJ�X¦��{Y[�-����$����{��]Dw�z����2k>�6�+ �,K��)��5�ʨ	�z�S<�]h���(�77��Jĥ�
��橜�`��
�J�;nL4ƹz�.- :I���1L`�#��7N��V�} 'j�y4�$U�e���`�Fi�&�&غ�,��r�h�xM�C/i�Q��X1	Y��;�x\7�g��;j��{XI�7�E��P�_�5��A��
	�����
�	��h��ɶ-���Db��|
+�_��R��"9͘v��(G�5}!.��B�g��c�2}�V|�☶/�j_v����>n�-�Q�fg8n��̏o]�
�Jy�2�:u5q��k*�"�bվ�Jd��ז��^���Db
���\(v\������Z?�0*��������eu�5��A��?
�i��?�꾒j4(���S��%��"?P�нAaU�kt�b�N70������5p"��~�d�@�����&�̴l�^�#7�[
^8�\d�S	Ŝc��ad�S?��R���e����zH1��( ��5XVY��|�\����/��
+M�|ű��� 1k+�TV��)<1nDi�����E�/Dž�&�_��R���uǭߤ�Z岼t�M��5a]�_������C�H���<V�X��,��E�/����X*s���-[����7� 1�LYy�s�C܇�S�p��M�� �Ɏx<�$�k���o\���m8��\�`/�;
��ñK��D��d���?�4N��?U޴>��	
^���Yʃ�����'�A����/z۹yL�f���
O� �
J�"~��X����N	��\�
����
�m߀����� ,��r?�L[熛�k6J���GgE7
v�^�F���6����D �j� F*i�kr���$�V�k
��L�
�����)�q����Ʌ(��]/�
+endstream
+endobj
+2407 0 obj <<
+/Type /FontDescriptor
+/FontName /WZLDED+CMTI10
+/Flags 4
+/FontBBox [-163 -250 1146 969]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 68
+/XHeight 431
+/CharSet (/A/C/E/I/J/L/M/N/O/R/S/T/U/W/a/b/c/d/e/f/g/h/hyphen/i/k/l/m/n/o/p/period/q/r/s/t/u/v/w/x/y/z)
+/FontFile 2406 0 R
+>> endobj
+2408 0 obj <<
+/Length1 1097
+/Length2 5697
+/Length3 0
+/Length 6380      
+/Filter /FlateDecode
+>>
+stream
+xڭ�e\�۷ǑnQ��G�Bf�#�Hw3

1CHHHI	H#J��"� %�H7H��(\������~�7�w�����ޛ󮎾��
���Fy
+@�C$M5� �&��T� `�H4J扐 P(��r  �D,&)*L�	(��|1HGO�G�g�8 �� �0�	�tD�^���\ }4
���ȹ� z�� �
�7��>)�!ក-��"�ӑ�

��+l�����7�qm
+�6	�-ڡQ.��
žTP
}���v��a�͕�\\�`���kJ�'sE��������� �h;��RcĿ�i"�^��̪y�\�p9��
�����+��PF� �t��pG�
���+�@��������!��d�hd���c�+�C�<
|� ����7_	������`�u����?��)��h;$�`
̗|�JHT� H�
�@�\;��B{^/�' أ1����( (�g�_$*���� ��� ��_���K�,���+m�&( �/A�`@��7� ���P���$�o�kQ�������kY���Z��o�\�~�k]�ox���� ����z����n�~�k]���Z��o[���
��%��G��
�B��?-
+���U��`(Ͽ���U��#�o'Ⴠ�N���RaNiUE�J�C� 挂����2��o�K�
�T Xo��rB��J��(��]d��{��/>y�����B�h�ma�ە��z��U��ۊ[5��4�ɂ�g�����<��h����_G��A��Sd�v
������SF
	��;*�|�ԛ.:�'ԗS
�s#γИlM���s���}��v��l���'z:xG3�MD7����
/�U��4&r7����s��n��
��et
/_������q����M�
����
��W2��`Klt
�Vc7
	s�r����.X
~R���eP�7c59o]�sf���j㋽w�ũvh�[$$U����>�	� R{�M�F�O�qX��͹1�����
U�j�[�5�'ƥʱ��
l:�pںx��M�&��b#t>6�N5���b�]��f��;k9��s������
�w�u3�<V��?���m����=��Y"�	��N�hR�8e& �F =X�k���,j �=�
A���Y!j�ָG�i�˓� �����ё�跃+#��AqAI�������u�|l�jT�^0�
Q�W�u���Yn��LN�‡=nR�
�x,��Α��/߈�ڍ�$�͓d��"���OE�+2"œi�G�SK*"�7D�z�8.t�}k���(�W��d�vn�r�څ��T��J��Ց��L�z�?&^N��Z�]m�(�7J������}uG���;V6t���E��G#�O�
0~>TA��Q^0�(�I�D��/�a*u�#�����,-P��iZM� ��_�?�i���
2
+�rl���&>Ό�	�c�/�'VHH2���ڟZ5��d
� �xJ
^N~�
Giő8AX��`�(��
G�0�X@��¦!��Z/U��8��b�J��
Vb�{6,�-�=�%�߄�dc�
$?��\�I5�|�q���kW^Fa峾�?�l�g�y%�> �����XUBQ,�!:m7�L���B5Ēv]U=����,BԈH�4�L0�[��-����ol���M��
�G�
�T"���`��%��ϰ
ydy`�W��
R�F�$���#��ԏ(�,	hioz��k�!m�&1�\
+��۩K
��ʩC��N
��1+<o���K�-�V��KR]а9?Pn�>+QL_��Hyk�z�jЬV��꒻z�:�������w��
+d�=M��� yFwԬ�I�[Iţ�N���'��#ݕû��Z��b<�C(s谄aAg^mX��`t)�w�ۉ�K<z. $��
+dN�Wn��Kwm���G��
E�3��Q��o��mTo1��Q���Ƌ�|�P�  �N�GC����HQو��D���A�i���^&_tՏ1m?�-,n^�6ܑ_�b%�R��3�c���>��
���
�[m�D����ލ���Kv�ܢ@�[/���)�SQ����
��3i���a(�!Uc���=���4(
�
#Q)�<��a�f�tb!>�$ _̦P�,\ٳ�P�22
�:J9
�|r�
+.��*�H�����N�P�E)!{�7C���*o��ъ�æU/����j��!�#�a��	\���v����c���9�謟��J���C8K��n�F8�������
�77Z5-�7��\�\TP'k�q��UN%\v� MM�%�"�T�T:�ų��AT2������e^�b&YIa���jM��ɸ[��j�����9�����j�ݙEr#��\��
��)x��Ԓ}�����U�z�O�D���::�jo���镠�R%����X�8���F
��h��<Ԉ	f�2�u�u��δp����8�$n�ү���1���Q��K�A��
򜒡y�"&77ts�����,�=��6���"�9i�#}6��U���$j"���Rғ�'n�{ v������(�^��^?6�4U��亰��j��뢏a'�լ�K��%X��P�*������<3�g�IM�!���)&�3��)�����
�*C��vh@��[�|[�FC��
��l/Sy��'1,b�����C6����zp:x���N�6aD [...]
�r���Xr��#�-k^�?
&�{7�&��[�(��,��)*|3�����dߗ�6�Vp�j���3c3�-��\_�
3��B>�P
+��)C&kvm�xf�,.Ic�E� ��ա����=�:�Tu8\�ꚤ9��l�D2�kpj�h
+;��s��4�Ѵ�	Y[�tE������\<zoh��9�ⴏ���U-A4��|���9%��\��œ���a�Z��5Š��|���'kX�w�\� 0�4X��w���!���
�{h��c0۰�h�y{�˹���R�x��
�^�7���%lB$�-AolR 0��B��N�����3��YWB+��;��-�,u���.�(�[*���o��g
{d랬�7Ͻ�
"�i��A�ᵘ�����=���
+�+g�B;�93��T��0��l@ͳbg�Z���M=J�h������l6�ܞ�J(
��(oI��� >9I�v|8i�/�Q
�!�]�a�
+oϜ����"�A]`��:�
&NJ��fҬ�������euO<CN���}��<<�Y�X�pAG)���}�
�
ʓE�,m�-p�2/Y�U��޴�;�^��]�y�,��� 7���$����;�LS��^��l�J����%�qѻ�4�0����}^��0I~c�`q2E�u����I��"�z'�՟~��a���֠;�OV`ė��@垾K���T�
�%l�p	$ěQ�k����Y��6ކ�=����\oz�6���$.��la����dD�HE��[���
 �x����Pa0D��my����/sb}��[e������������"Ŝ�Lv�F,�%���6C�P����w{/�"��m�q;�`���*��X� g�6
+��`�(,�%l��
+r��}W/�Ťwux��
C�&"�� �0X�i�p;���9�4N�B3u3�T�5Z��Z�0GV"�ĕت��j�y�� � Vw[�
)����ӥ1 �N�(�TW<
�C
>X��J>�#�H�Q��%�\�Z3
o9�R{@7ߔ���l�;�j��7��H�=�JF��.�S
ɁT*���HO0��s8�P�^ł�.Ō�'�<��D!Z�H����RgI6���#�fW��Ƽ�݁�4�K��.�vT:C&[B)LW���Ɲ����w��a�o�A�Q'��
�(�Aw�\��T�\�uQɼUǥ�,��K�7[J哕��^-���VK��e�C�����
+)-S�뚼�&т�g*��F.��~VjI������
����ߠ��x$td?t�M΢���I�5�r��;h�4O<���=��x�xs���Z����@�
+bUr[�!cpTᘃ��%�UJȗ�*h{�\�g�
Z"=Z�ʔ��^��s
�M
r
>٬��
����(�m��C�W|�.Mz��]������_n�=�;��r����;��O�M
U��I�g�	sj��J=+�1.Mk _��La3���-V^�[��6�J��C8�\�aFG�Aj��v��O�2�B.�8����z��o�������&�� �\��q�b��g{*�����:<ک)�Ҟ��1Y<�\��W�*C��bg9�/ڸ8�

�3
�µ��Jc]���<B�Jc�
�S"���ұ{"��T
�������OaZ���ʦi����g%V��1��=f�]��#G;�zfG�/���2���jh at 1<
<��G���Y�v��E�xI�vE��]c]�T�Bw�'
/�͓�Ռw%Է�y���0dwԨ�e6���5������0
�\��AJz퉶��d��)��O��u��i��i�م�1�4:I�٧�M
~m#��C��T[�,�U›�%G���������؎s�f�V~-��� � �s�
+��Ţ}�o�%�%#�&3�Җ��1�+ܟ*� �,��QR�W�savV*�f|�y��BQ�[�a�]O�r�x�	�:��8���l�ٕy�br�L��h���������2%�(j7��#�|E�;�&I��2zR9e��Q,�n*�Ĕ�B�#�b�H3��@h��r�ɣ����[���[X9���<��2��w3���/�в�=�2�b��F�=,l�R��x���Oԅ�=�X���Z#
�l�]U��7e����ٱ_�]h�X[���LV���_imvbOL^��
Yv_T?�|�o�}�}�s<>c�Χ+)H��s�p6�v������燀
'����B�>"��&�N�/����J�h��o���2�'m ���
G����X
�i�o��=.n��v2&���>�<up���9h�9�K=?K�$S��~i��<���4d��
���y�����4nj{�~�}�7~��u���;�%��N�v<�Q�2�>�u?�|
�d Q6HA�)��;���û��F?��\V��lNq\I�
k�؛)ϳ*�gC'?g
�C:��Q�=]�f^�J۲��h&�)"�E�
L Dm��i�mp���I&&rA�?ba�	� ��I��Y���
��Rf1��[�'5��_h�� a��� 9߃��
Ggcly
M�Q�^�~�O�U�|
ˮ��-w=����
R�~h at rj�v�V3�
+v�&��
�K-Ds�LU$� �L���3{�������۴�L���#�T*#�O?���)O�����
K�>x�
��_��xJ�n'�{�Q�}��*���s���b�N�(	K�,��S<�fɽ��
G���
�%�L:�\&����
�
�:7�R�M4ă.��!���5�/c7�U�uR�\��ʭ������f'XĎ��`j��Џ�
�, f�01�lmENG�)���In�z{����~���/�4B�nhCU?�ʜ*M�����h&e�(
+��K����2��2Lk+�
tM�<��m�L���G��EEj
�+��L`
+��L���@��<�Z�dѻ���GH�~���4jѳI�,�;/8룛�?Y��a�����y�Z��1��
�ֆ�
ɚ�̨�#wN��������Χ@M1�h�a�3�O���������G��ޭ��<{�5ˠ�n
l2{�Y��\����8�V����VR�)�/�v�C���3�ȋQf
.�wOm��������	��
!+Ԁ���!
�geI���2}�����[$���7���"��1��&�
+�������ݓ�Iw��¿�[��%\���1o�v�u�܈�3
��D��s��b���'�6�\�^�3������ߋ
+ܒ/U`����x�<��rJ��Kyݐ6�yCHQz�+�z5
,
"�&�*F�`S��q���B��y�v4^��6N�|��5�]j���^��\C��R����*B�8?J�͕�f�{�3n���(O�[�J@�9�ʍa���yǔ�,�W|O
+J\��4J����D���qU�I�i��w#{+���
+�'�{����SH��ߵ��@���h���W�R�
+}��V}w���nXN��AqwgS�"��Z��&+����R�Ū��jq�B]^�|�9҆��
rM
+endstream
+endobj
+2409 0 obj <<
+/Type /FontDescriptor
+/FontName /GEWDVW+CMTI12
+/Flags 4
+/FontBBox [-36 -251 1103 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 63
+/XHeight 431
+/CharSet (/A/C/L/N/S/a/b/c/d/e/f/fi/g/i/l/m/n/o/p/r/t/u/v/w/y)
+/FontFile 2408 0 R
+>> endobj
+2410 0 obj <<
+/Length1 2105
+/Length2 13859
+/Length3 0
+/Length 15000     
+/Filter /FlateDecode
+>>
+stream
+xڭ�c|�ݶ�
6����m���ضm���ƶm�1����{�sv{����Y����9�
c�k^��H^�V����X��Ɖ����
 ,���� `�c`�%%v0�w2���w2�0rr2�
 Ll F.&�� lk��`nj����lj
 hm�`n�o��w23��0Է(��;���� ��D8�
�
\���`F�N cSsX��$lLl��69����#
+@�/LJ �����
`dlK/k
�f
d��뿓�9[Y��[���_�����ͭ���������� ckd�`�߮�����162w���U	'}+sCAS+c ÿM�b�n�F��N�f 'g���m���8���k(R���M�ע������������/��G��`��d Η����/��*&jchkdnc
+`be�;8���P�<�6F�n c7 0=���0 ��7�����
ec�
�c��b�
�Q� z�?�@/�Gq�E��� �b#���������
�^��H�Q@�?
+�"�GYd�( ���E���(�Q@�?
+Ȣ�GY��( ��d��GYT�( ��dQ����h�Q�8��(f`���
�Q������ 	�
������O �����Z:Z�;��������A�������/3�����(�'	�͖�N�ǟ��?��
+ 6f��
+$2����g��bm��AF`�FI`I�?�#5�?��Y�w^B����	�������e[g���.�2�M��A��v��
p<f�vf�6y m�I ��_���I�$��[�2vt�k
87�?x
��)�
+�ecn�#f`igk�.Xӿ��w3��h`Nۿ�����Yְ�w0��?;���?�����@�!44��˕�_6sۿ�%p�vV�5����%�c�kʌ�F�8��
�����a�����ѳ�8/��T���1g��!e6�d�`�י 6��j�W 0��c
��
�


m
�� p]��@`׿
"`R��$���_8}�?��L
��&�_
BB�n��, Z&�^�33�+���f�� �%��t�/���&��7�����!�ʒ�!w�EJSH��h�L$��is�l}�|'\��8P��1){��:���t4��B�W\Lj/�I�
�������t�V\��t�_v���H�M
�g��rs�㥉ꅃY�C�y�"ʇP�D ��.
�Al�jb�V*��ud�D�ȩ��a,��ȉ�Ӂ>��-�kW�
Ψ�й	� O��"���6O[��bslh��>mDi� @ꋻ�I
2�zӪ"�lV�V�gv��j{�A^wa
�&���)�f8
Uϡ��!N�D�+d�-
�+Ń�~��b%�gȝSj���4�x|�KM4"7c%�t�4� �y��h*6D�Eze�5�$��?�v���V3�v��A�L���,������P䝒�`��PL�f�
+Yz
�X�m�+%��
C��r��R
���g���&~��C�r�1��B@)��dX��(�w�}�F�ۮ�ޛ�:r�Y�+�Ms��f�cYᅆ����/����}
%�@��g����E@=ch	�:��o���Һ��C��x������3�ܦg�ʷխ�
r�^����v�:��Mt3f���۬?�5N�m��,�����"�\[�3�����<
v�<�!b��8À9m��p��Qru�ݠeAr��@S��L�+��g�>�Z���<"�S�\�;'�vG�N1�S}�+/��eQ��2�!ml'¢wۨn=R�	rQ�n�1����"��P�s)
��=9
�����
���;0�
W��zD�����*��
�8�R�
�e�OD��
�?[��U�K��W�%9��"$��
+jFn�3
+٩wO$�ڜ�~n���6��%"G�+o�W��O�c�+w�!�u�Y�p���
�QJ�OՒ�'�q�����a�]�C��H'�Tڛ�����7K_8`y�\Ekq��$�sy/�$%'ꌙ��}����&�pF���
�`�j�T��+|���LZ���e�6�o�_k^�l���r�"A�m"ϕYH䪲z���
+ܟ�p����:��U�=`�
+��<�u�\H-�
�:�F�ʖN�Gk�B.��7�A�﨡��ڮ�0���ש?������R��^*ɤ��Mc�w��L�
�Dgh�dc|3�twA���~Hܶ���v���8ݺ*:9p��,t]5ͮ��A9��M9P�J����V������r*]z����tٴ�X� ��nY+�aS�]
WJ+)v<*s�Iz��t ~����r
�%)�TM�j�t���KMt���z��ָL�I���s-{��
߱�f��'���y��s	�E1��.�v�������l��
Q�����C#��#,;�k^A
�����d;���O�#�3
+J�rh�z�h���EI�
��
��	�e�l)6^9A&/�Ze��j�H&5�
=-
���w
�Z���
)�­�5
/�L]�w^��"�����'�\�P|��$a�~��T�`�;�G�H/�>�;*�}�J�C�_��ԛ8���t�
+�(A.�
5�ǵB��f��]�	�Swx
�N����~ަ�V��<0��Fk7H�a�z�,���o��c�쿭9X�"���>঑�_o�"�\-)�����3�o5�% ��caZ�K�F\���2�a��c��U�p�0���}���,�MtWЖh5/��h���e�L�H$�f�0�޲%�"&�o�gC�>
=G.�>#
K!c�(YBԂc�E�*
+�.�y��wC��g��.Sݻ�@�KE�v4�8��V]���_��D6�Zu���?c�3cv~���1����+^A��Ll����vb�
`��cE(q�>)T
�
��?UX���-3_�N<4
Ѩ.άA��
�-��
�	����⑔����.Yi��X}a0��)�2q�Uy�|���p���
U^�N�����/�lϢ;
�C�\�2*q~	
FlA�N�����L�h��`�ܷ��P�2m-ԝ9LI!��=h�?�^�Z��`�к�i��Me��
O�f��s0Z%~~F�$NI�A�ȏ����x
+⾂6kG�DXMT��Ie�d�5�
�;?J��Bl�Y ۻ+F��Q
~�r��4���L��_���Z?�C����q~��/NJVy1��:c�̧���$�X,b��� 
�/�qcL�K\�Y��)�0�pP�H�
+�ob������ZM���)D
���
ws���_1��o����{�3���r�|��9ۚx_�#����M`2k�1�/V��
s�t�
i�X͎�����؃�r��IP�6���yR2O�#�����>��C�fc�OG
]��u��5��f�M�8o0`+�
ϔv�4C���I��Vy�g�RB�؀ͨ�Q�N�Sݙ(�<�\µ���Sq��5��ӈQ�Um_פFa�3�Q����
�r�� ���Tv�'�ژ0
sɤ*8�t{�
�O��y��JĎr�'�_b_vZ��'���+"�1&���ZM 15��x������MM�Y�%�7��Ъ���s���|��/8U���
�0�,̌KY�|�
]T9�1��`;oߌh���CA�����-}�gc����~��w��0�@~h����#RU��U�}N��vV�����m[1���	�^�/
��]�[ qXJ�ꥇ�2bk��1�1��o�٥��D OU'�'�h�||��O���Wr[��>��_K��K�読�h��~�����l�M����孔
C�z`�ƹ��'huG`u�Na
DY~���1ZdX^w�[/�4�oA�O���8g;�Z˵���c�>�&�`�U}�e���ލ��(�o��U4�E�^�݊�?�������\':���\��R�"D�hޜjyE5��I |���ܒz�6���.!8
7�Tf����m�dV
 2y��h(�Mc�G�opG�Z�
�j.��2cW��(�
+r��d�|�&�Z���C ���Zx����CF%���#W���=\�z�6�
+}�}����A�2W
��;F�Cb�@��)��@�Q']��
�
+��M��
tK��y$mzv��{���4�*^�Ҍh��+�'+�ٯ�v�Ή�
���b3��<x�q+oY�C[�V���W.�`1������M��Zť:�2��d��!Kc�I�����G���{9����]�[MoT)��t��W
�/�
+�|�Lc��Lp����dP3�tq}��E���F�"JIZ��
Z��V�)���ﶃi�����/�KQ��
:���8&�hRnn�������1�
�Xq{��΃�Y�2��~�k
,�/�3&h}�9�x�
^+��	�l ���e�xP�p��$�'�5�2�*���M��Z"�[\a��� �& �W�P(�|�j�P������Ӌf�6���5Z>�<\

������Y��Q�g�[���1��I��fL��1X��
�8�`�w��&�=�Z%���L�ȓ
�{&ꚷ��/��̔~M�B�6�_�����g�(?�������r-vW���[u���a
�a�p���Q&y�5��ϒ5a�o1�|<k����Q(ѵ'h�K|�0�Ȉbc�^']z�1Z��]�v�"
+�5�Na�
+��wHⱂ�3�DZ�G`�Ȝ�"Br^������+f��� f7"��?�����,*�
Z�3֯
���	�-BRM�OUK�h}����7K���\B�C
+�-w�s�`;�䬲\�>\��5��YXz(8��=-��d�	���lcy|q~qh=:��%8��)�ī8t�P�r+wΓR�!s��-.�0��mc���kq�L�+5�o=T5߽�1�_�=
+#rË́��I�>�d�B�G_ɴ#(��h���rN�|��
3\JQ���,x��Q;U�&��Q�0�:T���|�7��Rl~F�~M�7L�����W {?�&��x���
G�}x5G��/�=?Q�|z>��SY.�}�����Q�JE���%��6P���ά#lG��нX,�:�f�f�i��Jv�<�3r4
+G���&Ө9An=f��Dpax��r0�#e�)��ڏ �X���6��F � ���o{S��'�=(�Ә��皼�	,
�O�`|��%p_GbG�P�B}G��k�t�w�v�Ӗ�p^xeC�&j�N�o�%"�a���0!�F�y���
X�I�(��RjajoX��n^ro�p�\Ɗ�B� Ħ�;�W�60���Ģ��n(e���(>���E̠�op�u��)��"����.�z�'�i�/�uL5g��v
7D��������J�q�?J��
��NN���T�d
{�`�����C�t�2�s��c:[
  �OC~�*�A0�2P�K�K�k��uc�!�>���4Q��<!7!�?�
�6
���w�p~#9�-ѠG��UE(E���X���t� ѨsGh@�~���5/
����c������ۻ�`~���~�C�6 ���:���A}��S�v	��J|8�?�H�NC
�X��9�
����,��QGS��+L���
�ˇ�#��`�(�6�7�B�W'��ډTYX��ǚ�&:2~CP�so��*R|��1(#N�=�Þ����)�ђ8A�cM��U�e��ZX�
Eg�!+�<��VT>��j Z�c�x�bBzJ�K��H�ɚa�BGA��@�o���C�<^���1 �qcX�|�H��ZL$�y�o��;)Y�"�Sà�Eq�������P�sz�)�[M`��*�琠V\�����&�`d.���lB�*ݥ�~��,ֶ&NG��T��+�$���5p��+0��؇����ZF-S��P�ϋ?�Dv�?
��~�s���0Ap�
Iw���M��q/����>��
��j�D��X"<;1��	�L���OA&�GU���л�
%��5й �ܯ"۪P�Ҵ+���t�+!`^���9ZT�'��'P]
�PLp�@[��ࠀ�9+�,�hD��Û��
�;�U��*
�o:�5
�)܎ֹQ>r�\�Y��E$�y�u/V��g�g��	��_���z�O�&L�'���W׵�,��WΚ��`��b�Ш��}
_т}3
�[��j H�����U�9�P>�����.�v�n5��bj���OQ��(�7�E��t릩
�,'��<*�19$��n�D�� �����R�l��,�pu�\BY����ڀ��l�2,��s��OŦ�����7��B����9�ٺ��
g��Bo���]�k�JKE:|-�v�q���iۋ����1&>���3�5��(�z9�Wg�p����}ta�|P��.���ד���xs,#�B���
�)~_�߅wy���&�����M�;3[���T���Ι�(-�Ō�m�6��W�m��R�em#��'f�@�w�����,M�Nb���Qh}�mt5E-i7��r-��?g��`P��rcr��WۈԾ�#T0P��v�'Ԥf�Wyڎ/����+�#�σ"x���Q'e�;��Z���X�rq'�ܪi� ���0hI>�#됧B�p	}'�u��ߵ��Hp�	
P����-�mF.]�
�%�^)����9��d�q+.���
��rD
sU���/�z1F�T=���٨5;*$�P���[>ɑ�p?{C/��\G`W�u)2F�U”�
�?�*�c�t(��ez<Hh�X^e~��$���|~(֔�B
��x���
��}iA�~������#v����38�#�!��	� E�Q�`������L�� [...]
-��2*nh{�Jt��-I�wZf2�E7�_�
� �+{o��"��w6�	w��J�|�b
jǃ����n����

�q��2
��a9D'pPΎC�\Fֹ�3�<~f����ٰ��&K��4C��~ӈGb0CM��t4�{��ɠ��"alk�
VƮ--�R}��:�sh�)��k[^0�$8]_3�>��M�
_�'P
q����
��^Ӷ+|�� ��
� �9L��o���y&���z���c������c�w`D8U�
�5���S
y׌+��lw�t��.�����
=�
�G�'�I�R��	n
6�wYy��bXV#6�ŞI,:���T)sw�SW�5K�)�������.*;�(r>3�:C���Xd�x���>/7�T-U:I�����+”-�S{3��H�o�/���hU�qY�5��2�C���K��e�MwS�Eʭ\�잣�}�*�����.�6
��G�s7I

��N��oeH�N\'C����P�j`e~.d�pE�)
+��8R�HQ=�0��6]�Oҷ+E�@��<F�Lir ��jܞ2F���d���
o
)�%��wW]
�pb*�3e|��y�ҕ��O/FWy$
��mxnm�]w�
�
��MQ��[~`��֚�i
�GӨ:l��
�����N�S�#�H�5�ijƲv�)���zٍ�~#ߗx�x�BG�y�>A�y5w
�M�؋Ƕ9&+yKc�WJ���2�]HW3�R�ԜY�ϛ��f�%�q
Z`���0� 4�4E�V�Z1ĉ��p��^�)l��kլ�0�\9Ý�����C�j=i���5�K��p�'��D4���g��`��
+��=�
��t�
n1��
͖�Rȷ�F�(�����Xɍ@p����uC
d�k����g�̌%�R�7�N>�="..�aϣ�������c�����
߈t�{��f]�;�•����HS���bFLd�,tR��4e��;�
Xxqm
6}�a�3�4�t�����>�@���pF�+��t��=���U�RG��M�E 0��7��{P��r�`d��No�rG&7�O6������-�M�"��<7�e�B�J
ItXs�)
�{,/A�2#�m���[��Mq�Hb��h���w�I�������Y���QCW�tN�w�W�å v
�`��rz4!��ϕ%�X,
�|V��8,+֯g����A3zc�/��ˣ�T�H[��6����#e���������j,�
�!Ӥ
�R0b�L��k v/���>n��d�����t 9
�sb��0n
B�#|�����<b�'���4o�u�>��0w���k�%[D�A���g��)���Єs&L7f{��9�#"�(h
O���:���V��c�ט`	��IE����i�
d4@�l�_�GN\ӂkfI/[	.�%�׷V�{�sK콹�-��w>�>?Q�_��F��
+ے
�A��$�îk�����EC����3N
re��c���Mt�׵�9�4�m��5�O�ݫKZ,]e�`EQ�a@�Wm~�9XȎb�ay�J�.]j?��썴���.��q���ElM2�ZY"W�KQ�&����a�K�Eݹrd nU�1�h���6;��"uk�z�ٛ�� q������J��C��j�	-mD���9l�'��5��	�o/����:\w�(A9O�kz��t�%�&���3�2�W��z]J��Q3R�
�������Q�������qlt"�FƗ(�(����0�V�F���*c�� .|]#�a�;�G��]��!4GB�j����61�l��:�VZ抎㶤�Ι�#��2-�L"�>��l+˷{�{Y�py>����;�%q���Cr��U�/��.�615��L�|˵����0]�
6�C�L�,�w?
+��_<|��HF$!�L
��
�I�jP.ݳA7FY�ZU��<fzS�d^��w
�H?$��9�(��"��$�D�X.��Q���	&
�'�
]��e���)?@%Ddk��1N����3�h\�<�;�����>{M����AR?X�>ۿ=
+�:n�	�Q�7Q�TQ2@	'jK{.��-9��Q�
'I at _ON��+������)��0{�
�:]ƭ�=vi�=H��
�f�
�%_�1:f�r-*'��x{�~�
�qLD��>K�:z9D�3FL�[K�}���IqؽZ�v0�g���ϼ���^3	cKr�Jو}>�㍖�0׿�~�@�n�W���|<am�]
rt�$
n�ݑVuf!C�
v9�L�E�`�`
鱻'�5lh@�֩��<QSi���I�&P�5�KJ��6fտOs����er�ۇ�&4�=q.%����$��
+����;c�
��2ݶ���L�-��{�`faX`
;���B��"^R���'�J�9a��g{��د�@���DM��c++M���h9����$��l����z'�ێ`�z�^��^E$�4¡fi�/�N)�ppW�b�K������ئ���-���M�.��P
�Ɲڱ�K
XVO�٩�d�R�Sz�MC'�6CՃ���Z���S>�	BI(��,�q؜!(q�7U���|	���"3!��􃕺� ՜��/c�m���L�S����z�,}v�R
+�0�c�~�\����z��A��m�#�'���')�$���l�o��i3�iN�Qj,I8�S���\�
�/�-}
\��B�������K���fb�ľJ�t��9�.0�����M��%���K},�ry�����k�p]]��Wc�`�;e�%m���[L��>L�^��g<��xOK
�[�T�Ԫ���tg������/���<[�ZF�$����,42ϖ�V~�8�dώ�i��(���Ie��aMG
3a���0��oK����ZI�q�7]r?d;��
+�yS��5��٭��H{�al����R7�|4		AA�4aNb�<eRo�
��F��=��/��t��iAV��!��Z��
��1�
+���;淐
]=�y�?�t�:�נ5k
�1�p�B�Wr��)�O�Z4��/�\�"�T�s�G���
�;Ĥ�R������u�ܮn��c��0�1Ϥ�Tt���7�� �ڃMotc�ܛr�%�;�p��~�-R�f�\�1*C��T�
+����O�J���
^�
4{��:��A�v�|
#&�
�Z�H�g
һ����{
�i���7�U�M+��|�d�	u{�:���$��߅�m =���=�,�ԏ�4%yr�.�5�F�<�NW���
�nh��ˉ�KIFu��Gd��bة�(J^Y.�Q�}.�����b��Vc�(���
�����bs��)��C�Sf���>��|۩+Wxr�|�g��4���Lg"dԃ���q�0c�KU�`�=����Q3�:��d�Вk�!>
�{��
<W�W��~r!�&J҈\G�K`�%��r��Km?mdx�@�����d^����..>�f���'�ֹ��;���<��Wp�)�yڲc&�S>�<�b�4u����AAB8���P䱶U��
=Y�״5
s�eI�&g�m�iQݞ�fݡq?��h��]�`V(�j�N�<����� }�_��[�)�´�eo{��k��ab�î�Y�{*S D at n�
�����u���=I��`�"}�q'�+�����Jb
�<
䤁�$º2Hd��`�&�,=�
tZ]�����S�ۙ:�����33s�R4
Uv]8�p9!8����K�z���!��O`��K?�&��x�@+��\@-�-04��
��
+0s�Q�z����!���҄�ߦO�"��a��:!�Cu��5db����Fx/��k�)�i�W '�K�Ә{��_"*�kT�o5��
\��D��ސ?�J޽��%�|(&`�giEd�4|<'_Ve��W6����To�cP	k4�thDp����Rz�����s|(�%r
+'HՉ�s6������Z�)�@���p�h��+`�00������h�?kz!8��K���Qل�@[��

�M5L�p��k�W
�-Ĵ7m(�
�,�߼�A��0r�{ h\@Bʦ̤��n�de����q�2/x��P�j�`�����o��nzH�d%�j���[��c�9|
R�����yS���@Z���4���z���^^_҄�c�C��_�����+?�W.[
�U�n�y��m{C�|^k�
k�pK�7e���)�S[z�@�I�+Ă".���;Hi�C�#J��ob�K����
B[L��e@��]��A���2���"�~�#��� +D��Y�m1�����&�A�R1"e�~6O�-�o�S> wsM��p_G{�i]��1̔�4bEOI��>��/+R>�Wf�Po4[�x	��s�
/�^gKv�/V=:CA7(��T.�H�Ja��q�y?
���S����X�A���v���*�
Rn٤�{�҅�a�,���&���U
���:�3X�fԤ�Rz���jղ�n[
R
�z�p[��6}G�<���*r��7j��x
#)��nTSt(}��`�-���a`�
e�M��Y�Zs�+�t������+nkR` �U���6|E֪����0ІJI3�a{��	[j�
yV`9��Ǒ�Ju�Z�V��"F&��G�)�JȻ�畻�\�Em�uS�E�q/H.xƱ���q���a37��]�6S�ge�_KRL�
��k�yI��9�7|�
,��Wh�
�6�����v�wCk
��OF�.GO6v�n�'>nS=��"�q���n_<~�^�7-�����TQ9��
�7͛j���0|Ʃ^{�ɥƖ� ���Z��0�ϱ{ڿ�CQ�	x��c���Uf�Y�[ӊ"]m#���]�E��D����?$���� �u��m+
(~'ɕ�"��
Jw�g���6
+�
+��A^�Y}TEbx��ԭ]R�+
��9{,Y���#sI�V�dž1�#�����&�S�8�CNr��9>#���
��E��+�}΢}����œ���[��d��߁�؈/i����^ȺL�	vD�6d���ȧfv 
�
}x �\�,�Cp<a��֔�d�V��P_q~7e�1؛��֤l�1qh���1�PǷ�!՗r�.)
�*c��+I����\�f~GN}�L���V���8z΋�p�

+��(
���͝�i�y	���'�t��C ��
�1��2�i��_8pT�m��D3�1��i<�=��.�gC8�
�Q:�7�;L{�nHE	�@�m�̶��I�i�-D��wGk����y`�g�
�
��X
��H㧓7���nY���WM�68��{s
��pv�ɦ%�e�I
D>�U��T�#PI��Aa\
L�N�2�$Eԥu�C��"�ץ�;`��OJ}���צ=��f{��4�}�����
#�Q0���ű�[9��t0 9W�������	i����o�Q�0�U�
`e<j��Q
+C�$a�A���-_�`g�3�Ta�j"vRrZ���}�}]�����25�ON0�{�Q}��p��G�>�R�R���=�BX"��n-Na����
h���,��>�3{Y��~Z�y3
ʒ���s�
u��(�o��ɂȹծ�K�
^0F�J�D��	��b��4_4�PcJ�ҥ_�I
Ả�ɴ�
+����q?�ok�
+�)��������5H��fWE��.�A3}h]��J���[�O��4c�`�03��;�t
���jt��S��`mSv�d�]Z�v��'�&�
��*N�lTCbbؒms�[�뛷X�fŷ�9��1� s���ܓKz�i:2D�U�R��{�AM5_ �
"'��
�bOwS���#�H1�%�Zk����
+z�q�h��6��X��z�� ��Q4�k��s�d0b^��[| Z�|*�2w� ��|
Df=�ЅV�����/
�Y
l���C�n� _��˧E[M�!�����Ǣ1�VV7����C��;��F���}C
jy���� ti.F�uƷ�Z�e}0J���"���=���0���\\�8�Sz������+��
}����
�a���y���%G��O�U݌x&�z��
��ݠh�x����y��l��复iD��A>�����G�1
+�ޛ#��Q��
E(5��m*��
�vm��\���q�eT)
,�s�4	�[NH]��]v���fN�w����tF�K��~J����M���8�_2L��ͪ���c�m����y�a9r�x�\U�M̐!�p���YI�&��"�$<u��q�~�����	ȹ�W
��
+�U�r��`+�2T��ݎ��%V�昰ݲj&
�7�~�c�A�)SZ�v�^u~H��T��(�f
���t�/q�H���q���P��T�G�u
+�Qb��
M�>���Z��0V�|��c��锴�e	�Y}�ރs*��L���
a&�?������ﮰ�bk}������@{*YC�Y�����o��q\��<ӳկ.L#��~ޕN��u�Ηt�
�>�"�{0IZ�$��A����$�
�座L�ַ�v�q�FI�Ӓb˨C)�ͧ���
��$�m�2 �R}�ڏ�W�ׄ�0e��XL�����-^!��I]L���D���R���<�
+��Y��1����p
j�ػ�Ɵ<�L�)
ȈH�����S�!F�A�ެ=BL���������w�-U��%���(����U��#�l���noh��½�gM��0��X^�U\��Õ?h��{�Dt4�
�J9��"�
+\�=��0�T�&�M��,ٱKW�%�E0s
+��ѕF�w
��{����� ,Ss�$U>㷙º����ٰ�	��t)�:)�?I
�Yo8^~g�mZ]�r�B��)����O1Ԓ6:���Y�
ϕ͟d�ʈLc)`_�S��S[��8���t�K�Tγ�
�c��̤����?+�H
b-4VoG��!Pшi�=ό�����
XhU!�SdX63��Ŷx�5����<���x�[�����
ϼ ��4�1���g.��?�Yՙ��q��U�p$D�\P�t�W)�q�h~'����Ȫ𵀬�; �r�Q��S���߰6��Z�&��G��(�|
+V�8��;��2��ϩ���2E���hcsk�{��}���7w��'�i
�p� 0�n>-�8*�y�4��0~y�xj>�'��=P�O\�X��ji��
O>S	��~Z�����Pm�R�
񤋊�
�WX�6U��������*�w����_�����{
��d��uZ?>��{Kl��"v��s�
h1N
��!��ՠ!�^	@o
�~|�֐�}⎥Q
�>����j�1?�� &����O�T
DX�0��D2�:O�j�'&������p�*7�h6
e�! Hr�F
���5ǩTz����Kp����?���P���qC�sG���5Vdem���R
+2�\�'�����Q���!{1�cc�|9AV`�3
+���:�^�z�:������r	��|�W.�V���U��M���Jt+Gk��K��7��:�J�3U.t$�b��Ol�m$:,���F��t�j[�D��
_�I]���N��9;�ʂ+wrm���?�IUN�Ev��
7„���=q?R)æ+��Pȋ�9o`�A�	�̛] _u�X2J�&������K���d�Q����8�W"r3"�q�|��)�#ۈ�`R��Lw��W������X�UP�<C���DS�Z`N��M����/0j��Dz	�B�)o�M�y� ؗ��
�
�]�e��W����������jU��f)�+�Y4]I�m#1�
��:�7�;�
�w'30��8�������>�����4pb�#t��l2&wCn��q��#���b��Aw�g����x�8�i���.!�'+w�<\"�;$A��6��/�
-���%�G��W��4��S\�L1��`Eb�C҃뢰),U��<�!���^2�.
@-h��.8���
��Q��\n���RJq� ΩG��A�:�GШx<��O��$�g����78qa���Ʋ\o�od����f�s'����g� )Ό��M��ѳ�ܥ�����ND����S�T �mԩ(h"�+��<
+�
G\��b�"?�G#R�
�ĕ֋#�2��S�'���}�\>(:���ے.�<ܐYq�J�I��>��&�&}"���Uo/����]Ƴa�R���z̸ҹ�f���J������
N�hF�]�Xq�[��/
��T���
\H|��m8��
խ������`n�M=���i
�@vg2[m��D�9�t�Z2��w7�L�ю�Q}tR��#v��v�ƢC at L�
���t�N�6�D"L��������#�V�z�}�g����>�4�Y&M��#�}
�	��
d�3]�i��.>���o3�9��3�ܵh
+endstream
+endobj
+2411 0 obj <<
+/Type /FontDescriptor
+/FontName /PZTGBU+CMTT10
+/Flags 4
+/FontBBox [-4 -235 731 800]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/backslash/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 2410 0 R
+>> endobj
+2412 0 obj <<
+/Length1 804
+/Length2 1076
+/Length3 0
+/Length 1632      
+/Filter /FlateDecode
+>>
+stream
+xڭR}\S�ׄ�Y� �5D��!�對��x!
HyQ�l�1l;��ll����
+I��
+Iz�D �
��Lyɤ�J#�4�
:�����?�?�s��=��}�������:�-U�
+(�u$�  ���
�� 4&3��(��`������A�Dx>�P��ј@��I ʢU��H�@$ PA��APX ��T
	L��&�PK�*Q
�•$-
�'�[L�DV������ �F"':
  a�*
A�
+S�@՘�Ɲp�Kāh*�2ꟕL�0P� �2�(�*\��P�'Ҹ8��I�CM'�5�TK�Om��:��4�)D�Q�逵pj$9TaF��j�j0�T��@��Jaf����L��� '�P��.M�kR�
��{�,�F1
m���v=#�������8<
B���k�4��Wa:5�z� P
�GQy	� �N� ����

NR- at o$7RGF�&~�X
��$�L�HӞ���3Ā-����G ���7�Ni$�#'/�ZƳ8�V�*i��q����}��Y!��
�]:3P]Wq�\g���
�
���vM�he��϶oQ�S'�Φ̷��
lI-���X�iC_Qz�S�p��ҫ_�$���Fkף��U
��*>�-o-�x�l5+8���M���M�狷z�bdE�wr�ո�]"��O�xO�{+mއ�6���d%�ή���!�d�=<�t�غ'��_U6-�U���-i
U yw͸$̼�ճ���*�”NZ��q�_V�ӓ=�K[<��^�8q�Sz�_{ [...]
,��4YscS�lZ{�O�W�~�dz���w���ԲcV�X��s�+i�j
pH5�$�����gqLp at .
��w?p�>�u ��hd��m8k�ڸ�{{�����7���I��E�5�g�7���y�Ϊ!��(�7
=�c��-v�e:
�$ny�q:f�ws��q�E����
!9˿+�y�����(��>6��vUgg��e؀�-�v�L=�F�o���b�,����w�kۤ[
8jY���E%�6��/{�����x�kW���1��b��ೌ��䮰/����=��X'�R�w�]\Cl�~t��R�g(���pm} _�>rq���3]�*�86^��+i�v!�
�2�!�����PBu%��J�/@�Rl^;:�2?`�
�[)i���ٟ� �1/Ζ�.m

�LE�β��l�e����wImo�]�U4�zB�5��_�٧?��l�kԾ��S
�I�����*��=�,`<�}t�D�fܒ��ܽ�om����|��c��]� s�5��\�:�yH˲��0k�� ���b�/�c2>Kf��
2j���
��
+�
+endstream
+endobj
+2413 0 obj <<
+/Type /FontDescriptor
+/FontName /RXNEKG+MSAM10
+/Flags 4
+/FontBBox [8 -463 1331 1003]
+/Ascent 692
+/CapHeight 550
+/Descent 0
+/ItalicAngle 0
+/StemV 40
+/XHeight 431
+/CharSet (/check)
+/FontFile 2412 0 R
+>> endobj
+408 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /JPYRCL+CMBX10
+/FontDescriptor 2369 0 R
+/FirstChar 11
+/LastChar 123
+/Widths 2363 0 R
+>> endobj
+453 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /JGUSUK+CMBX12
+/FontDescriptor 2371 0 R
+/FirstChar 12
+/LastChar 122
+/Widths 2361 0 R
+>> endobj
+1561 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YWRFWO+CMBXTI10
+/FontDescriptor 2373 0 R
+/FirstChar 98
+/LastChar 117
+/Widths 2345 0 R
+>> endobj
+397 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /RFYCRH+CMCSC10
+/FontDescriptor 2375 0 R
+/FirstChar 45
+/LastChar 121
+/Widths 2366 0 R
+>> endobj
+746 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /QAQINL+CMEX10
+/FontDescriptor 2377 0 R
+/FirstChar 8
+/LastChar 114
+/Widths 2348 0 R
+>> endobj
+628 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /TCCOEQ+CMMI10
+/FontDescriptor 2379 0 R
+/FirstChar 11
+/LastChar 122
+/Widths 2356 0 R
+>> endobj
+719 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /UKFQUH+CMMI5
+/FontDescriptor 2381 0 R
+/FirstChar 70
+/LastChar 117
+/Widths 2351 0 R
+>> endobj
+700 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BOAXKR+CMMI7
+/FontDescriptor 2383 0 R
+/FirstChar 11
+/LastChar 121
+/Widths 2354 0 R
+>> endobj
+409 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /MSDGYD+CMR10
+/FontDescriptor 2385 0 R
+/FirstChar 1
+/LastChar 124
+/Widths 2362 0 R
+>> endobj
+398 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PCAMEL+CMR12
+/FontDescriptor 2387 0 R
+/FirstChar 44
+/LastChar 119
+/Widths 2365 0 R
+>> endobj
+396 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BTSFPV+CMR17
+/FontDescriptor 2389 0 R
+/FirstChar 40
+/LastChar 118
+/Widths 2367 0 R
+>> endobj
+608 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /UZQLUM+CMR5
+/FontDescriptor 2391 0 R
+/FirstChar 43
+/LastChar 43
+/Widths 2358 0 R
+>> endobj
+720 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /WIRDCL+CMR6
+/FontDescriptor 2393 0 R
+/FirstChar 49
+/LastChar 49
+/Widths 2350 0 R
+>> endobj
+701 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /TSTSSF+CMR7
+/FontDescriptor 2395 0 R
+/FirstChar 40
+/LastChar 120
+/Widths 2353 0 R
+>> endobj
+722 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /AAPCUF+CMR8
+/FontDescriptor 2397 0 R
+/FirstChar 40
+/LastChar 121
+/Widths 2349 0 R
+>> endobj
+673 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PTPXIX+CMSL10
+/FontDescriptor 2399 0 R
+/FirstChar 101
+/LastChar 121
+/Widths 2355 0 R
+>> endobj
+1324 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /XWRTTW+CMSL9
+/FontDescriptor 2401 0 R
+/FirstChar 97
+/LastChar 120
+/Widths 2346 0 R
+>> endobj
+627 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YHRGFW+CMSY10
+/FontDescriptor 2403 0 R
+/FirstChar 0
+/LastChar 120
+/Widths 2357 0 R
+>> endobj
+706 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /TOGNJI+CMSY7
+/FontDescriptor 2405 0 R
+/FirstChar 0
+/LastChar 49
+/Widths 2352 0 R
+>> endobj
+566 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /WZLDED+CMTI10
+/FontDescriptor 2407 0 R
+/FirstChar 45
+/LastChar 122
+/Widths 2359 0 R
+>> endobj
+399 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GEWDVW+CMTI12
+/FontDescriptor 2409 0 R
+/FirstChar 12
+/LastChar 121
+/Widths 2364 0 R
+>> endobj
+539 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /PZTGBU+CMTT10
+/FontDescriptor 2411 0 R
+/FirstChar 35
+/LastChar 125
+/Widths 2360 0 R
+>> endobj
+902 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /RXNEKG+MSAM10
+/FontDescriptor 2413 0 R
+/FirstChar 88
+/LastChar 88
+/Widths 2347 0 R
+>> endobj
+400 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2414 0 R
+/Kids [390 0 R 405 0 R 450 0 R 506 0 R 517 0 R 521 0 R]
+>> endobj
+540 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2414 0 R
+/Kids [535 0 R 552 0 R 562 0 R 574 0 R 589 0 R 605 0 R]
+>> endobj
+618 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2414 0 R
+/Kids [613 0 R 623 0 R 658 0 R 670 0 R 675 0 R 682 0 R]
+>> endobj
+708 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2414 0 R
+/Kids [696 0 R 715 0 R 728 0 R 740 0 R 755 0 R 771 0 R]
+>> endobj
+792 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2414 0 R
+/Kids [788 0 R 794 0 R 805 0 R 809 0 R 826 0 R 840 0 R]
+>> endobj
+853 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2414 0 R
+/Kids [850 0 R 857 0 R 868 0 R 884 0 R 899 0 R 908 0 R]
+>> endobj
+921 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2415 0 R
+/Kids [915 0 R 923 0 R 929 0 R 935 0 R 943 0 R 950 0 R]
+>> endobj
+958 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2415 0 R
+/Kids [955 0 R 962 0 R 969 0 R 975 0 R 983 0 R 992 0 R]
+>> endobj
+1006 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2415 0 R
+/Kids [1000 0 R 1010 0 R 1018 0 R 1025 0 R 1033 0 R 1040 0 R]
+>> endobj
+1055 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2415 0 R
+/Kids [1050 0 R 1058 0 R 1064 0 R 1068 0 R 1077 0 R 1084 0 R]
+>> endobj
+1097 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2415 0 R
+/Kids [1091 0 R 1099 0 R 1107 0 R 1114 0 R 1121 0 R 1131 0 R]
+>> endobj
+1143 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2415 0 R
+/Kids [1139 0 R 1148 0 R 1153 0 R 1160 0 R 1166 0 R 1173 0 R]
+>> endobj
+1196 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2416 0 R
+/Kids [1192 0 R 1199 0 R 1207 0 R 1211 0 R 1216 0 R 1225 0 R]
+>> endobj
+1238 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2416 0 R
+/Kids [1235 0 R 1241 0 R 1248 0 R 1254 0 R 1263 0 R 1273 0 R]
+>> endobj
+1280 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2416 0 R
+/Kids [1277 0 R 1286 0 R 1301 0 R 1306 0 R 1310 0 R 1316 0 R]
+>> endobj
+1325 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2416 0 R
+/Kids [1321 0 R 1327 0 R 1331 0 R 1335 0 R 1341 0 R 1345 0 R]
+>> endobj
+1355 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2416 0 R
+/Kids [1352 0 R 1357 0 R 1362 0 R 1368 0 R 1372 0 R 1379 0 R]
+>> endobj
+1390 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2416 0 R
+/Kids [1386 0 R 1393 0 R 1402 0 R 1408 0 R 1413 0 R 1419 0 R]
+>> endobj
+1426 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2417 0 R
+/Kids [1423 0 R 1428 0 R 1433 0 R 1437 0 R 1443 0 R 1448 0 R]
+>> endobj
+1461 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2417 0 R
+/Kids [1458 0 R 1463 0 R 1469 0 R 1473 0 R 1484 0 R 1488 0 R]
+>> endobj
+1497 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2417 0 R
+/Kids [1492 0 R 1499 0 R 1503 0 R 1508 0 R 1513 0 R 1517 0 R]
+>> endobj
+1533 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2417 0 R
+/Kids [1530 0 R 1546 0 R 1550 0 R 1554 0 R 1558 0 R 1563 0 R]
+>> endobj
+1575 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2417 0 R
+/Kids [1572 0 R 1577 0 R 1582 0 R 1586 0 R 1590 0 R 1594 0 R]
+>> endobj
+1618 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2417 0 R
+/Kids [1603 0 R 1622 0 R 1626 0 R 1630 0 R 1634 0 R 1638 0 R]
+>> endobj
+1645 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2418 0 R
+/Kids [1642 0 R 1647 0 R 1651 0 R 1656 0 R 1750 0 R 1883 0 R]
+>> endobj
+2036 0 obj <<
+/Type /Pages
+/Count 4
+/Parent 2418 0 R
+/Kids [2033 0 R 2184 0 R 2304 0 R 2342 0 R]
+>> endobj
+2414 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2419 0 R
+/Kids [400 0 R 540 0 R 618 0 R 708 0 R 792 0 R 853 0 R]
+>> endobj
+2415 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2419 0 R
+/Kids [921 0 R 958 0 R 1006 0 R 1055 0 R 1097 0 R 1143 0 R]
+>> endobj
+2416 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2419 0 R
+/Kids [1196 0 R 1238 0 R 1280 0 R 1325 0 R 1355 0 R 1390 0 R]
+>> endobj
+2417 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2419 0 R
+/Kids [1426 0 R 1461 0 R 1497 0 R 1533 0 R 1575 0 R 1618 0 R]
+>> endobj
+2418 0 obj <<
+/Type /Pages
+/Count 10
+/Parent 2419 0 R
+/Kids [1645 0 R 2036 0 R]
+>> endobj
+2419 0 obj <<
+/Type /Pages
+/Count 154
+/Kids [2414 0 R 2415 0 R 2416 0 R 2417 0 R 2418 0 R]
+>> endobj
+2420 0 obj <<
+/Type /Outlines
+/First 7 0 R
+/Last 387 0 R
+/Count 14
+>> endobj
+387 0 obj <<
+/Title 388 0 R
+/A 385 0 R
+/Parent 2420 0 R
+/Prev 383 0 R
+>> endobj
+383 0 obj <<
+/Title 384 0 R
+/A 381 0 R
+/Parent 2420 0 R
+/Prev 371 0 R
+/Next 387 0 R
+>> endobj
+379 0 obj <<
+/Title 380 0 R
+/A 377 0 R
+/Parent 371 0 R
+/Prev 375 0 R
+>> endobj
+375 0 obj <<
+/Title 376 0 R
+/A 373 0 R
+/Parent 371 0 R
+/Next 379 0 R
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 369 0 R
+/Parent 2420 0 R
+/Prev 335 0 R
+/Next 383 0 R
+/First 375 0 R
+/Last 379 0 R
+/Count -2
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 365 0 R
+/Parent 335 0 R
+/Prev 363 0 R
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 361 0 R
+/Parent 335 0 R
+/Prev 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 357 0 R
+/Parent 335 0 R
+/Prev 339 0 R
+/Next 363 0 R
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 353 0 R
+/Parent 339 0 R
+/Prev 351 0 R
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 349 0 R
+/Parent 339 0 R
+/Prev 347 0 R
+/Next 355 0 R
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 345 0 R
+/Parent 339 0 R
+/Prev 343 0 R
+/Next 351 0 R
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 341 0 R
+/Parent 339 0 R
+/Next 347 0 R
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 337 0 R
+/Parent 335 0 R
+/Next 359 0 R
+/First 343 0 R
+/Last 355 0 R
+/Count -4
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 333 0 R
+/Parent 2420 0 R
+/Prev 271 0 R
+/Next 371 0 R
+/First 339 0 R
+/Last 367 0 R
+/Count -4
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 329 0 R
+/Parent 315 0 R
+/Prev 327 0 R
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 325 0 R
+/Parent 315 0 R
+/Prev 323 0 R
+/Next 331 0 R
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 321 0 R
+/Parent 315 0 R
+/Prev 319 0 R
+/Next 327 0 R
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 317 0 R
+/Parent 315 0 R
+/Next 323 0 R
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 271 0 R
+/Prev 295 0 R
+/First 319 0 R
+/Last 331 0 R
+/Count -4
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 295 0 R
+/Prev 307 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 295 0 R
+/Prev 303 0 R
+/Next 311 0 R
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 295 0 R
+/Prev 299 0 R
+/Next 307 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 295 0 R
+/Next 303 0 R
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 271 0 R
+/Prev 275 0 R
+/Next 315 0 R
+/First 299 0 R
+/Last 311 0 R
+/Count -4
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 275 0 R
+/Prev 287 0 R
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 275 0 R
+/Prev 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 275 0 R
+/Prev 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 275 0 R
+/Next 283 0 R
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 271 0 R
+/Next 295 0 R
+/First 279 0 R
+/Last 291 0 R
+/Count -4
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 2420 0 R
+/Prev 251 0 R
+/Next 335 0 R
+/First 275 0 R
+/Last 315 0 R
+/Count -3
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 251 0 R
+/Prev 263 0 R
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 251 0 R
+/Prev 259 0 R
+/Next 267 0 R
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 251 0 R
+/Prev 255 0 R
+/Next 263 0 R
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 251 0 R
+/Next 259 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 2420 0 R
+/Prev 215 0 R
+/Next 271 0 R
+/First 255 0 R
+/Last 267 0 R
+/Count -4
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 215 0 R
+/Prev 243 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 215 0 R
+/Prev 239 0 R
+/Next 247 0 R
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 215 0 R
+/Prev 235 0 R
+/Next 243 0 R
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 215 0 R
+/Prev 231 0 R
+/Next 239 0 R
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 215 0 R
+/Prev 227 0 R
+/Next 235 0 R
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 215 0 R
+/Prev 223 0 R
+/Next 231 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 215 0 R
+/Prev 219 0 R
+/Next 227 0 R
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 215 0 R
+/Next 223 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 2420 0 R
+/Prev 187 0 R
+/Next 251 0 R
+/First 219 0 R
+/Last 247 0 R
+/Count -8
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 187 0 R
+/Prev 207 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 187 0 R
+/Prev 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 187 0 R
+/Prev 199 0 R
+/Next 207 0 R
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 187 0 R
+/Prev 195 0 R
+/Next 203 0 R
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 187 0 R
+/Prev 191 0 R
+/Next 199 0 R
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 187 0 R
+/Next 195 0 R
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 2420 0 R
+/Prev 67 0 R
+/Next 215 0 R
+/First 191 0 R
+/Last 211 0 R
+/Count -6
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 67 0 R
+/Prev 143 0 R
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 143 0 R
+/Prev 175 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 143 0 R
+/Prev 171 0 R
+/Next 179 0 R
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 143 0 R
+/Prev 167 0 R
+/Next 175 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 143 0 R
+/Prev 163 0 R
+/Next 171 0 R
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 143 0 R
+/Prev 159 0 R
+/Next 167 0 R
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 143 0 R
+/Prev 155 0 R
+/Next 163 0 R
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 143 0 R
+/Prev 151 0 R
+/Next 159 0 R
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 143 0 R
+/Prev 147 0 R
+/Next 155 0 R
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 143 0 R
+/Next 151 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 67 0 R
+/Prev 87 0 R
+/Next 183 0 R
+/First 147 0 R
+/Last 179 0 R
+/Count -9
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 123 0 R
+/Prev 135 0 R
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 123 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 123 0 R
+/Prev 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 123 0 R
+/Next 131 0 R
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 87 0 R
+/Prev 103 0 R
+/First 127 0 R
+/Last 139 0 R
+/Count -4
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 103 0 R
+/Prev 115 0 R
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 103 0 R
+/Prev 111 0 R
+/Next 119 0 R
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 103 0 R
+/Prev 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 103 0 R
+/Next 111 0 R
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 87 0 R
+/Prev 99 0 R
+/Next 123 0 R
+/First 107 0 R
+/Last 119 0 R
+/Count -4
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 87 0 R
+/Prev 95 0 R
+/Next 103 0 R
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 87 0 R
+/Prev 91 0 R
+/Next 99 0 R
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 87 0 R
+/Next 95 0 R
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 67 0 R
+/Prev 83 0 R
+/Next 143 0 R
+/First 91 0 R
+/Last 123 0 R
+/Count -5
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 67 0 R
+/Prev 79 0 R
+/Next 87 0 R
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 67 0 R
+/Prev 75 0 R
+/Next 83 0 R
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 67 0 R
+/Prev 71 0 R
+/Next 79 0 R
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 67 0 R
+/Next 75 0 R
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 2420 0 R
+/Prev 55 0 R
+/Next 187 0 R
+/First 71 0 R
+/Last 183 0 R
+/Count -7
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 55 0 R
+/Prev 59 0 R
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 55 0 R
+/Next 63 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 2420 0 R
+/Prev 51 0 R
+/Next 67 0 R
+/First 59 0 R
+/Last 63 0 R
+/Count -2
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 2420 0 R
+/Prev 15 0 R
+/Next 55 0 R
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 31 0 R
+/Prev 35 0 R
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 35 0 R
+/Prev 39 0 R
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 35 0 R
+/Next 43 0 R
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 31 0 R
+/Next 47 0 R
+/First 39 0 R
+/Last 43 0 R
+/Count -2
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 15 0 R
+/Prev 27 0 R
+/First 35 0 R
+/Last 47 0 R
+/Count -2
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 15 0 R
+/Prev 23 0 R
+/Next 31 0 R
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 15 0 R
+/Prev 19 0 R
+/Next 27 0 R
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 2420 0 R
+/Prev 11 0 R
+/Next 51 0 R
+/First 19 0 R
+/Last 31 0 R
+/Count -4
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 2420 0 R
+/Prev 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 2420 0 R
+/Next 11 0 R
+>> endobj
+2421 0 obj <<
+/Names [(Doc-Start) 395 0 R (Hfootnote.1) 721 0 R (Item.1) 678 0 R (Item.10) 775 0 R (Item.11) 776 0 R (Item.12) 777 0 R]
+/Limits [(Doc-Start) (Item.12)]
+>> endobj
+2422 0 obj <<
+/Names [(Item.13) 778 0 R (Item.14) 779 0 R (Item.15) 780 0 R (Item.16) 871 0 R (Item.17) 872 0 R (Item.18) 873 0 R]
+/Limits [(Item.13) (Item.18)]
+>> endobj
+2423 0 obj <<
+/Names [(Item.19) 874 0 R (Item.2) 679 0 R (Item.20) 887 0 R (Item.21) 888 0 R (Item.22) 889 0 R (Item.23) 890 0 R]
+/Limits [(Item.19) (Item.23)]
+>> endobj
+2424 0 obj <<
+/Names [(Item.24) 891 0 R (Item.25) 892 0 R (Item.26) 893 0 R (Item.27) 894 0 R (Item.28) 895 0 R (Item.29) 1176 0 R]
+/Limits [(Item.24) (Item.29)]
+>> endobj
+2425 0 obj <<
+/Names [(Item.3) 680 0 R (Item.30) 1177 0 R (Item.31) 1178 0 R (Item.32) 1179 0 R (Item.33) 1180 0 R (Item.34) 1181 0 R]
+/Limits [(Item.3) (Item.34)]
+>> endobj
+2426 0 obj <<
+/Names [(Item.35) 1182 0 R (Item.36) 1183 0 R (Item.37) 1184 0 R (Item.38) 1185 0 R (Item.39) 1186 0 R (Item.4) 704 0 R]
+/Limits [(Item.35) (Item.4)]
+>> endobj
+2427 0 obj <<
+/Names [(Item.40) 1187 0 R (Item.41) 1188 0 R (Item.42) 1189 0 R (Item.43) 1219 0 R (Item.44) 1220 0 R (Item.45) 1221 0 R]
+/Limits [(Item.40) (Item.45)]
+>> endobj
+2428 0 obj <<
+/Names [(Item.46) 1229 0 R (Item.47) 1230 0 R (Item.48) 1232 0 R (Item.49) 1266 0 R (Item.5) 705 0 R (Item.50) 1267 0 R]
+/Limits [(Item.46) (Item.50)]
+>> endobj
+2429 0 obj <<
+/Names [(Item.51) 1289 0 R (Item.52) 1290 0 R (Item.53) 1291 0 R (Item.54) 1292 0 R (Item.55) 1293 0 R (Item.56) 1294 0 R]
+/Limits [(Item.51) (Item.56)]
+>> endobj
+2430 0 obj <<
+/Names [(Item.57) 1295 0 R (Item.58) 1296 0 R (Item.59) 1297 0 R (Item.6) 762 0 R (Item.60) 1304 0 R (Item.61) 1495 0 R]
+/Limits [(Item.57) (Item.61)]
+>> endobj
+2431 0 obj <<
+/Names [(Item.62) 1496 0 R (Item.63) 1606 0 R (Item.64) 1607 0 R (Item.65) 1608 0 R (Item.66) 1609 0 R (Item.67) 1610 0 R]
+/Limits [(Item.62) (Item.67)]
+>> endobj
+2432 0 obj <<
+/Names [(Item.68) 1611 0 R (Item.69) 1612 0 R (Item.7) 763 0 R (Item.70) 1613 0 R (Item.71) 1614 0 R (Item.72) 1615 0 R]
+/Limits [(Item.68) (Item.72)]
+>> endobj
+2433 0 obj <<
+/Names [(Item.73) 1616 0 R (Item.74) 1617 0 R (Item.8) 764 0 R (Item.9) 765 0 R (appendix*.133) 1654 0 R (appendix.A) 334 0 R]
+/Limits [(Item.73) (appendix.A)]
+>> endobj
+2434 0 obj <<
+/Names [(appendix.B) 370 0 R (chapter*.1) 454 0 R (chapter*.2) 538 0 R (chapter*.4) 565 0 R (chapter.1) 14 0 R (chapter.2) 50 0 R]
+/Limits [(appendix.B) (chapter.2)]
+>> endobj
+2435 0 obj <<
+/Names [(chapter.3) 54 0 R (chapter.4) 66 0 R (chapter.5) 186 0 R (chapter.6) 214 0 R (chapter.7) 250 0 R (chapter.8) 270 0 R]
+/Limits [(chapter.3) (chapter.8)]
+>> endobj
+2436 0 obj <<
+/Names [(cite.Anderson65) 783 0 R (cite.BrSa:90) 593 0 R (cite.Bro:87) 709 0 R (cite.DES:82) 710 0 R (cite.DGL:99) 601 0 R (cite.DaPa:10) 598 0 R]
+/Limits [(cite.Anderson65) (cite.DaPa:10)]
+>> endobj
+2437 0 obj <<
+/Names [(cite.DeSc:96) 711 0 R (cite.EiWa:96) 749 0 R (cite.Fang-Saad09) 785 0 R (cite.Fre:93) 597 0 R (cite.HBGLSSW:05) 592 0 R (cite.KLU_site) 599 0 R]
+/Limits [(cite.DeSc:96) (cite.KLU_site)]
+>> endobj
+2438 0 obj <<
+/Names [(cite.Kel:95) 712 0 R (cite.LWWY11) 786 0 R (cite.Li:05) 600 0 R (cite.Ortega-Rheinbolt00) 782 0 R (cite.SaSc:86) 594 0 R (cite.Saa:93) 595 0 R]
+/Limits [(cite.Kel:95) (cite.Saa:93)]
+>> endobj
+2439 0 obj <<
+/Names [(cite.SuperLUMT_site) 602 0 R (cite.Van:92) 596 0 R (cite.Walker-Ni09) 784 0 R (cite.arkode_ex) 1397 0 R (cite.cvode_ex) 1396 0 R (cite.ida_ex) 1406 0 R]
+/Limits [(cite.SuperLUMT_site) (cite.ida_ex)]
+>> endobj
+2440 0 obj <<
+/Names [(cite.kinsol_ex) 668 0 R (equation.2.1) 699 0 R (equation.2.2) 702 0 R (equation.2.3) 732 0 R (equation.2.4) 745 0 R (equation.2.5) 747 0 R]
+/Limits [(cite.kinsol_ex) (equation.2.5)]
+>> endobj
+2441 0 obj <<
+/Names [(equation.2.6) 759 0 R (equation.2.7) 735 0 R (equation.2.8) 760 0 R (equation.2.9) 736 0 R (figure.3.1) 567 0 R (figure.3.2) 568 0 R]
+/Limits [(equation.2.6) (figure.3.2)]
+>> endobj
+2442 0 obj <<
+/Names [(figure.8.1) 569 0 R (figure.8.2) 570 0 R (figure.A.1) 571 0 R (figure.A.2) 572 0 R (page.1) 591 0 R (page.10) 717 0 R]
+/Limits [(figure.8.1) (page.10)]
+>> endobj
+2443 0 obj <<
+/Names [(page.100) 1430 0 R (page.101) 1435 0 R (page.102) 1439 0 R (page.103) 1445 0 R (page.104) 1450 0 R (page.105) 1460 0 R]
+/Limits [(page.100) (page.105)]
+>> endobj
+2444 0 obj <<
+/Names [(page.106) 1465 0 R (page.107) 1471 0 R (page.108) 1475 0 R (page.109) 1486 0 R (page.11) 730 0 R (page.110) 1490 0 R]
+/Limits [(page.106) (page.110)]
+>> endobj
+2445 0 obj <<
+/Names [(page.111) 1494 0 R (page.112) 1501 0 R (page.113) 1505 0 R (page.114) 1510 0 R (page.115) 1515 0 R (page.116) 1519 0 R]
+/Limits [(page.111) (page.116)]
+>> endobj
+2446 0 obj <<
+/Names [(page.117) 1532 0 R (page.118) 1548 0 R (page.119) 1552 0 R (page.12) 742 0 R (page.120) 1556 0 R (page.121) 1560 0 R]
+/Limits [(page.117) (page.121)]
+>> endobj
+2447 0 obj <<
+/Names [(page.122) 1565 0 R (page.123) 1574 0 R (page.124) 1579 0 R (page.125) 1584 0 R (page.126) 1588 0 R (page.127) 1592 0 R]
+/Limits [(page.122) (page.127)]
+>> endobj
+2448 0 obj <<
+/Names [(page.128) 1596 0 R (page.129) 1605 0 R (page.13) 757 0 R (page.130) 1624 0 R (page.131) 1628 0 R (page.132) 1632 0 R]
+/Limits [(page.128) (page.132)]
+>> endobj
+2449 0 obj <<
+/Names [(page.133) 1636 0 R (page.134) 1640 0 R (page.135) 1644 0 R (page.136) 1649 0 R (page.137) 1653 0 R (page.138) 1658 0 R]
+/Limits [(page.133) (page.138)]
+>> endobj
+2450 0 obj <<
+/Names [(page.139) 1752 0 R (page.14) 773 0 R (page.140) 1885 0 R (page.141) 2035 0 R (page.142) 2186 0 R (page.143) 2306 0 R]
+/Limits [(page.139) (page.143)]
+>> endobj
+2451 0 obj <<
+/Names [(page.144) 2344 0 R (page.15) 790 0 R (page.16) 796 0 R (page.17) 807 0 R (page.18) 811 0 R (page.19) 828 0 R]
+/Limits [(page.144) (page.19)]
+>> endobj
+2452 0 obj <<
+/Names [(page.2) 607 0 R (page.20) 842 0 R (page.21) 852 0 R (page.22) 859 0 R (page.23) 870 0 R (page.24) 886 0 R]
+/Limits [(page.2) (page.24)]
+>> endobj
+2453 0 obj <<
+/Names [(page.25) 901 0 R (page.26) 910 0 R (page.27) 917 0 R (page.28) 925 0 R (page.29) 931 0 R (page.3) 615 0 R]
+/Limits [(page.25) (page.3)]
+>> endobj
+2454 0 obj <<
+/Names [(page.30) 937 0 R (page.31) 945 0 R (page.32) 952 0 R (page.33) 957 0 R (page.34) 964 0 R (page.35) 971 0 R]
+/Limits [(page.30) (page.35)]
+>> endobj
+2455 0 obj <<
+/Names [(page.36) 977 0 R (page.37) 985 0 R (page.38) 994 0 R (page.39) 1002 0 R (page.4) 625 0 R (page.40) 1012 0 R]
+/Limits [(page.36) (page.40)]
+>> endobj
+2456 0 obj <<
+/Names [(page.41) 1020 0 R (page.42) 1027 0 R (page.43) 1035 0 R (page.44) 1042 0 R (page.45) 1052 0 R (page.46) 1060 0 R]
+/Limits [(page.41) (page.46)]
+>> endobj
+2457 0 obj <<
+/Names [(page.47) 1066 0 R (page.48) 1070 0 R (page.49) 1079 0 R (page.5) 660 0 R (page.50) 1086 0 R (page.51) 1093 0 R]
+/Limits [(page.47) (page.51)]
+>> endobj
+2458 0 obj <<
+/Names [(page.52) 1101 0 R (page.53) 1109 0 R (page.54) 1116 0 R (page.55) 1123 0 R (page.56) 1133 0 R (page.57) 1141 0 R]
+/Limits [(page.52) (page.57)]
+>> endobj
+2459 0 obj <<
+/Names [(page.58) 1150 0 R (page.59) 1155 0 R (page.6) 672 0 R (page.60) 1162 0 R (page.61) 1168 0 R (page.62) 1175 0 R]
+/Limits [(page.58) (page.62)]
+>> endobj
+2460 0 obj <<
+/Names [(page.63) 1194 0 R (page.64) 1201 0 R (page.65) 1209 0 R (page.66) 1213 0 R (page.67) 1218 0 R (page.68) 1227 0 R]
+/Limits [(page.63) (page.68)]
+>> endobj
+2461 0 obj <<
+/Names [(page.69) 1237 0 R (page.7) 677 0 R (page.70) 1243 0 R (page.71) 1250 0 R (page.72) 1256 0 R (page.73) 1265 0 R]
+/Limits [(page.69) (page.73)]
+>> endobj
+2462 0 obj <<
+/Names [(page.74) 1275 0 R (page.75) 1279 0 R (page.76) 1288 0 R (page.77) 1303 0 R (page.78) 1308 0 R (page.79) 1312 0 R]
+/Limits [(page.74) (page.79)]
+>> endobj
+2463 0 obj <<
+/Names [(page.8) 684 0 R (page.80) 1318 0 R (page.81) 1323 0 R (page.82) 1329 0 R (page.83) 1333 0 R (page.84) 1337 0 R]
+/Limits [(page.8) (page.84)]
+>> endobj
+2464 0 obj <<
+/Names [(page.85) 1343 0 R (page.86) 1347 0 R (page.87) 1354 0 R (page.88) 1359 0 R (page.89) 1364 0 R (page.9) 698 0 R]
+/Limits [(page.85) (page.9)]
+>> endobj
+2465 0 obj <<
+/Names [(page.90) 1370 0 R (page.91) 1374 0 R (page.92) 1381 0 R (page.93) 1388 0 R (page.94) 1395 0 R (page.95) 1404 0 R]
+/Limits [(page.90) (page.95)]
+>> endobj
+2466 0 obj <<
+/Names [(page.96) 1410 0 R (page.97) 1415 0 R (page.98) 1421 0 R (page.99) 1425 0 R (page.i) 394 0 R (page.ii) 407 0 R]
+/Limits [(page.96) (page.ii)]
+>> endobj
+2467 0 obj <<
+/Names [(page.iii) 452 0 R (page.iv) 508 0 R (page.ix) 564 0 R (page.v) 519 0 R (page.vi) 523 0 R (page.vii) 537 0 R]
+/Limits [(page.iii) (page.vii)]
+>> endobj
+2468 0 obj <<
+/Names [(page.viii) 554 0 R (page.x) 576 0 R (section*.10) 626 0 R (section*.100) 1117 0 R (section*.101) 1124 0 R (section*.102) 1125 0 R]
+/Limits [(page.viii) (section*.102)]
+>> endobj
+2469 0 obj <<
+/Names [(section*.103) 1126 0 R (section*.104) 1134 0 R (section*.105) 1142 0 R (section*.106) 1151 0 R (section*.107) 1156 0 R (section*.108) 1157 0 R]
+/Limits [(section*.103) (section*.108)]
+>> endobj
+2470 0 obj <<
+/Names [(section*.109) 1169 0 R (section*.11) 629 0 R (section*.110) 1170 0 R (section*.111) 1190 0 R (section*.112) 1195 0 R (section*.113) 1202 0 R]
+/Limits [(section*.109) (section*.113)]
+>> endobj
+2471 0 obj <<
+/Names [(section*.114) 1228 0 R (section*.115) 1231 0 R (section*.116) 1348 0 R (section*.117) 1360 0 R (section*.118) 1375 0 R (section*.119) 1389 0 R]
+/Limits [(section*.114) (section*.119)]
+>> endobj
+2472 0 obj <<
+/Names [(section*.12) 630 0 R (section*.120) 1405 0 R (section*.121) 1411 0 R (section*.122) 1440 0 R (section*.123) 1441 0 R (section*.124) 1446 0 R]
+/Limits [(section*.12) (section*.124)]
+>> endobj
+2473 0 obj <<
+/Names [(section*.125) 1451 0 R (section*.126) 1566 0 R (section*.127) 1580 0 R (section*.128) 1597 0 R (section*.129) 1598 0 R (section*.13) 631 0 R]
+/Limits [(section*.125) (section*.13)]
+>> endobj
+2474 0 obj <<
+/Names [(section*.130) 1599 0 R (section*.131) 1600 0 R (section*.132) 1601 0 R (section*.134) 382 0 R (section*.135) 386 0 R (section*.14) 632 0 R]
+/Limits [(section*.130) (section*.14)]
+>> endobj
+2475 0 obj <<
+/Names [(section*.15) 661 0 R (section*.16) 703 0 R (section*.17) 707 0 R (section*.18) 718 0 R (section*.19) 731 0 R (section*.20) 733 0 R]
+/Limits [(section*.15) (section*.20)]
+>> endobj
+2476 0 obj <<
+/Names [(section*.21) 734 0 R (section*.22) 743 0 R (section*.23) 744 0 R (section*.24) 748 0 R (section*.25) 758 0 R (section*.26) 761 0 R]
+/Limits [(section*.21) (section*.26)]
+>> endobj
+2477 0 obj <<
+/Names [(section*.27) 774 0 R (section*.28) 781 0 R (section*.29) 791 0 R (section*.3) 6 0 R (section*.30) 903 0 R (section*.31) 911 0 R]
+/Limits [(section*.27) (section*.31)]
+>> endobj
+2478 0 obj <<
+/Names [(section*.32) 912 0 R (section*.33) 918 0 R (section*.34) 919 0 R (section*.35) 920 0 R (section*.36) 926 0 R (section*.37) 927 0 R]
+/Limits [(section*.32) (section*.37)]
+>> endobj
+2479 0 obj <<
+/Names [(section*.38) 932 0 R (section*.39) 933 0 R (section*.40) 938 0 R (section*.41) 939 0 R (section*.42) 940 0 R (section*.43) 946 0 R]
+/Limits [(section*.38) (section*.43)]
+>> endobj
+2480 0 obj <<
+/Names [(section*.44) 953 0 R (section*.45) 965 0 R (section*.46) 966 0 R (section*.47) 967 0 R (section*.48) 972 0 R (section*.49) 973 0 R]
+/Limits [(section*.44) (section*.49)]
+>> endobj
+2481 0 obj <<
+/Names [(section*.5) 10 0 R (section*.50) 978 0 R (section*.51) 979 0 R (section*.52) 980 0 R (section*.53) 986 0 R (section*.54) 987 0 R]
+/Limits [(section*.5) (section*.54)]
+>> endobj
+2482 0 obj <<
+/Names [(section*.55) 988 0 R (section*.56) 995 0 R (section*.57) 996 0 R (section*.58) 997 0 R (section*.59) 998 0 R (section*.6) 609 0 R]
+/Limits [(section*.55) (section*.6)]
+>> endobj
+2483 0 obj <<
+/Names [(section*.60) 1003 0 R (section*.61) 1004 0 R (section*.62) 1005 0 R (section*.63) 1013 0 R (section*.64) 1014 0 R (section*.65) 1015 0 R]
+/Limits [(section*.60) (section*.65)]
+>> endobj
+2484 0 obj <<
+/Names [(section*.66) 1016 0 R (section*.67) 1021 0 R (section*.68) 1022 0 R (section*.69) 1028 0 R (section*.7) 610 0 R (section*.70) 1029 0 R]
+/Limits [(section*.66) (section*.70)]
+>> endobj
+2485 0 obj <<
+/Names [(section*.71) 1036 0 R (section*.72) 1037 0 R (section*.73) 1043 0 R (section*.74) 1044 0 R (section*.75) 1053 0 R (section*.76) 1054 0 R]
+/Limits [(section*.71) (section*.76)]
+>> endobj
+2486 0 obj <<
+/Names [(section*.77) 1061 0 R (section*.78) 1062 0 R (section*.79) 1071 0 R (section*.8) 616 0 R (section*.80) 1072 0 R (section*.81) 1073 0 R]
+/Limits [(section*.77) (section*.81)]
+>> endobj
+2487 0 obj <<
+/Names [(section*.82) 1074 0 R (section*.83) 1075 0 R (section*.84) 1080 0 R (section*.85) 1081 0 R (section*.86) 1082 0 R (section*.87) 1087 0 R]
+/Limits [(section*.82) (section*.87)]
+>> endobj
+2488 0 obj <<
+/Names [(section*.88) 1088 0 R (section*.89) 1089 0 R (section*.9) 617 0 R (section*.90) 1094 0 R (section*.91) 1095 0 R (section*.92) 1096 0 R]
+/Limits [(section*.88) (section*.92)]
+>> endobj
+2489 0 obj <<
+/Names [(section*.93) 1102 0 R (section*.94) 1103 0 R (section*.95) 1104 0 R (section*.96) 1105 0 R (section*.97) 1110 0 R (section*.98) 1111 0 R]
+/Limits [(section*.93) (section*.98)]
+>> endobj
+2490 0 obj <<
+/Names [(section*.99) 1112 0 R (section.1.1) 18 0 R (section.1.2) 22 0 R (section.1.3) 26 0 R (section.1.4) 30 0 R (section.3.1) 58 0 R]
+/Limits [(section*.99) (section.3.1)]
+>> endobj
+2491 0 obj <<
+/Names [(section.3.2) 62 0 R (section.4.1) 70 0 R (section.4.2) 74 0 R (section.4.3) 78 0 R (section.4.4) 82 0 R (section.4.5) 86 0 R]
+/Limits [(section.3.2) (section.4.5)]
+>> endobj
+2492 0 obj <<
+/Names [(section.4.6) 142 0 R (section.4.7) 182 0 R (section.5.1) 190 0 R (section.5.2) 194 0 R (section.5.3) 198 0 R (section.5.4) 202 0 R]
+/Limits [(section.4.6) (section.5.4)]
+>> endobj
+2493 0 obj <<
+/Names [(section.5.5) 206 0 R (section.5.6) 210 0 R (section.6.1) 218 0 R (section.6.2) 222 0 R (section.6.3) 226 0 R (section.6.4) 230 0 R]
+/Limits [(section.5.5) (section.6.4)]
+>> endobj
+2494 0 obj <<
+/Names [(section.6.5) 234 0 R (section.6.6) 238 0 R (section.6.7) 242 0 R (section.6.8) 246 0 R (section.7.1) 254 0 R (section.7.2) 258 0 R]
+/Limits [(section.6.5) (section.7.2)]
+>> endobj
+2495 0 obj <<
+/Names [(section.7.3) 262 0 R (section.7.4) 266 0 R (section.8.1) 274 0 R (section.8.2) 294 0 R (section.8.3) 314 0 R (section.A.1) 338 0 R]
+/Limits [(section.7.3) (section.A.1)]
+>> endobj
+2496 0 obj <<
+/Names [(section.A.2) 358 0 R (section.A.3) 362 0 R (section.A.4) 366 0 R (section.B.1) 374 0 R (section.B.2) 378 0 R (subfigure.3.1.1) 812 0 R]
+/Limits [(section.A.2) (subfigure.3.1.1)]
+>> endobj
+2497 0 obj <<
+/Names [(subfigure.3.1.2) 813 0 R (subsection.1.4.1) 34 0 R (subsection.1.4.2) 46 0 R (subsection.4.5.1) 90 0 R (subsection.4.5.2) 94 0 R (subsection.4.5.3) 98 0 R]
+/Limits [(subfigure.3.1.2) (subsection.4.5.3)]
+>> endobj
+2498 0 obj <<
+/Names [(subsection.4.5.4) 102 0 R (subsection.4.5.5) 122 0 R (subsection.4.6.1) 146 0 R (subsection.4.6.2) 150 0 R (subsection.4.6.3) 154 0 R (subsection.4.6.4) 158 0 R]
+/Limits [(subsection.4.5.4) (subsection.4.6.4)]
+>> endobj
+2499 0 obj <<
+/Names [(subsection.4.6.5) 162 0 R (subsection.4.6.6) 166 0 R (subsection.4.6.7) 170 0 R (subsection.4.6.8) 174 0 R (subsection.4.6.9) 178 0 R (subsection.8.1.1) 278 0 R]
+/Limits [(subsection.4.6.5) (subsection.8.1.1)]
+>> endobj
+2500 0 obj <<
+/Names [(subsection.8.1.2) 282 0 R (subsection.8.1.3) 286 0 R (subsection.8.1.4) 290 0 R (subsection.8.2.1) 298 0 R (subsection.8.2.2) 302 0 R (subsection.8.2.3) 306 0 R]
+/Limits [(subsection.8.1.2) (subsection.8.2.3)]
+>> endobj
+2501 0 obj <<
+/Names [(subsection.8.2.4) 310 0 R (subsection.8.3.1) 318 0 R (subsection.8.3.2) 322 0 R (subsection.8.3.3) 326 0 R (subsection.8.3.4) 330 0 R (subsection.A.1.1) 342 0 R]
+/Limits [(subsection.8.2.4) (subsection.A.1.1)]
+>> endobj
+2502 0 obj <<
+/Names [(subsection.A.1.2) 346 0 R (subsection.A.1.3) 350 0 R (subsection.A.1.4) 354 0 R (subsubsection.1.4.1.1) 38 0 R (subsubsection.1.4.1.2) 42 0 R (subsubsection.4.5.4.1) 106 0 R]
+/Limits [(subsection.A.1.2) (subsubsection.4.5.4.1)]
+>> endobj
+2503 0 obj <<
+/Names [(subsubsection.4.5.4.2) 110 0 R (subsubsection.4.5.4.3) 114 0 R (subsubsection.4.5.4.4) 118 0 R (subsubsection.4.5.5.1) 126 0 R (subsubsection.4.5.5.2) 130 0 R (subsubsection.4.5.5.3) 134 0 R]
+/Limits [(subsubsection.4.5.4.2) (subsubsection.4.5.5.3)]
+>> endobj
+2504 0 obj <<
+/Names [(subsubsection.4.5.5.4) 138 0 R (table.4.1) 541 0 R (table.4.2) 542 0 R (table.4.3) 543 0 R (table.5.1) 544 0 R (table.5.2) 545 0 R]
+/Limits [(subsubsection.4.5.5.4) (table.5.2)]
+>> endobj
+2505 0 obj <<
+/Names [(table.6.1) 546 0 R (table.6.2) 547 0 R (table.6.3) 548 0 R (table.A.1) 549 0 R (table.A.2) 550 0 R]
+/Limits [(table.6.1) (table.A.2)]
+>> endobj
+2506 0 obj <<
+/Kids [2421 0 R 2422 0 R 2423 0 R 2424 0 R 2425 0 R 2426 0 R]
+/Limits [(Doc-Start) (Item.4)]
+>> endobj
+2507 0 obj <<
+/Kids [2427 0 R 2428 0 R 2429 0 R 2430 0 R 2431 0 R 2432 0 R]
+/Limits [(Item.40) (Item.72)]
+>> endobj
+2508 0 obj <<
+/Kids [2433 0 R 2434 0 R 2435 0 R 2436 0 R 2437 0 R 2438 0 R]
+/Limits [(Item.73) (cite.Saa:93)]
+>> endobj
+2509 0 obj <<
+/Kids [2439 0 R 2440 0 R 2441 0 R 2442 0 R 2443 0 R 2444 0 R]
+/Limits [(cite.SuperLUMT_site) (page.110)]
+>> endobj
+2510 0 obj <<
+/Kids [2445 0 R 2446 0 R 2447 0 R 2448 0 R 2449 0 R 2450 0 R]
+/Limits [(page.111) (page.143)]
+>> endobj
+2511 0 obj <<
+/Kids [2451 0 R 2452 0 R 2453 0 R 2454 0 R 2455 0 R 2456 0 R]
+/Limits [(page.144) (page.46)]
+>> endobj
+2512 0 obj <<
+/Kids [2457 0 R 2458 0 R 2459 0 R 2460 0 R 2461 0 R 2462 0 R]
+/Limits [(page.47) (page.79)]
+>> endobj
+2513 0 obj <<
+/Kids [2463 0 R 2464 0 R 2465 0 R 2466 0 R 2467 0 R 2468 0 R]
+/Limits [(page.8) (section*.102)]
+>> endobj
+2514 0 obj <<
+/Kids [2469 0 R 2470 0 R 2471 0 R 2472 0 R 2473 0 R 2474 0 R]
+/Limits [(section*.103) (section*.14)]
+>> endobj
+2515 0 obj <<
+/Kids [2475 0 R 2476 0 R 2477 0 R 2478 0 R 2479 0 R 2480 0 R]
+/Limits [(section*.15) (section*.49)]
+>> endobj
+2516 0 obj <<
+/Kids [2481 0 R 2482 0 R 2483 0 R 2484 0 R 2485 0 R 2486 0 R]
+/Limits [(section*.5) (section*.81)]
+>> endobj
+2517 0 obj <<
+/Kids [2487 0 R 2488 0 R 2489 0 R 2490 0 R 2491 0 R 2492 0 R]
+/Limits [(section*.82) (section.5.4)]
+>> endobj
+2518 0 obj <<
+/Kids [2493 0 R 2494 0 R 2495 0 R 2496 0 R 2497 0 R 2498 0 R]
+/Limits [(section.5.5) (subsection.4.6.4)]
+>> endobj
+2519 0 obj <<
+/Kids [2499 0 R 2500 0 R 2501 0 R 2502 0 R 2503 0 R 2504 0 R]
+/Limits [(subsection.4.6.5) (table.5.2)]
+>> endobj
+2520 0 obj <<
+/Kids [2505 0 R]
+/Limits [(table.6.1) (table.A.2)]
+>> endobj
+2521 0 obj <<
+/Kids [2506 0 R 2507 0 R 2508 0 R 2509 0 R 2510 0 R 2511 0 R]
+/Limits [(Doc-Start) (page.46)]
+>> endobj
+2522 0 obj <<
+/Kids [2512 0 R 2513 0 R 2514 0 R 2515 0 R 2516 0 R 2517 0 R]
+/Limits [(page.47) (section.5.4)]
+>> endobj
+2523 0 obj <<
+/Kids [2518 0 R 2519 0 R 2520 0 R]
+/Limits [(section.5.5) (table.A.2)]
+>> endobj
+2524 0 obj <<
+/Kids [2521 0 R 2522 0 R 2523 0 R]
+/Limits [(Doc-Start) (table.A.2)]
+>> endobj
+2525 0 obj <<
+/Dests 2524 0 R
+>> endobj
+2526 0 obj <<
+/Type /Catalog
+/Pages 2419 0 R
+/Outlines 2420 0 R
+/Names 2525 0 R
+/PageMode/UseOutlines/PageLabels << /Nums [0 << /S /r >> 10 << /S /D >> ] >>
+/OpenAction 389 0 R
+>> endobj
+2527 0 obj <<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
+/CreationDate (D:20160926151742-07'00')
+/ModDate (D:20160926151742-07'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
+>> endobj
+xref
+0 2528
+0000000001 65535 f 
+0000000002 00000 f 
+0000000003 00000 f 
+0000000004 00000 f 
+0000000000 00000 f 
+0000000015 00000 n 
+0000039623 00000 n 
+0001152115 00000 n 
+0000000061 00000 n 
+0000000093 00000 n 
+0000041956 00000 n 
+0001152028 00000 n 
+0000000139 00000 n 
+0000000173 00000 n 
+0000047555 00000 n 
+0001151902 00000 n 
+0000000219 00000 n 
+0000000250 00000 n 
+0000047613 00000 n 
+0001151828 00000 n 
+0000000298 00000 n 
+0000000338 00000 n 
+0000052099 00000 n 
+0001151741 00000 n 
+0000000386 00000 n 
+0000000435 00000 n 
+0000071376 00000 n 
+0001151654 00000 n 
+0000000483 00000 n 
+0000000525 00000 n 
+0000074735 00000 n 
+0001151543 00000 n 
+0000000573 00000 n 
+0000000616 00000 n 
+0000074793 00000 n 
+0001151432 00000 n 
+0000000669 00000 n 
+0000000705 00000 n 
+0000074851 00000 n 
+0001151358 00000 n 
+0000000763 00000 n 
+0000000800 00000 n 
+0000074909 00000 n 
+0001151284 00000 n 
+0000000858 00000 n 
+0000000893 00000 n 
+0000074967 00000 n 
+0001151210 00000 n 
+0000000946 00000 n 
+0000000976 00000 n 
+0000080816 00000 n 
+0001151121 00000 n 
+0000001022 00000 n 
+0000001068 00000 n 
+0000111526 00000 n 
+0001150995 00000 n 
+0000001114 00000 n 
+0000001150 00000 n 
+0000111584 00000 n 
+0001150921 00000 n 
+0000001198 00000 n 
+0000001238 00000 n 
+0000111642 00000 n 
+0001150847 00000 n 
+0000001286 00000 n 
+0000001324 00000 n 
+0000201011 00000 n 
+0001150719 00000 n 
+0000001370 00000 n 
+0000001420 00000 n 
+0000201069 00000 n 
+0001150645 00000 n 
+0000001468 00000 n 
+0000001521 00000 n 
+0000205867 00000 n 
+0001150558 00000 n 
+0000001569 00000 n 
+0000001598 00000 n 
+0000205925 00000 n 
+0001150471 00000 n 
+0000001646 00000 n 
+0000001677 00000 n 
+0000211584 00000 n 
+0001150384 00000 n 
+0000001725 00000 n 
+0000001781 00000 n 
+0000220503 00000 n 
+0001150258 00000 n 
+0000001829 00000 n 
+0000001871 00000 n 
+0000220561 00000 n 
+0001150184 00000 n 
+0000001924 00000 n 
+0000001991 00000 n 
+0000225732 00000 n 
+0001150097 00000 n 
+0000002044 00000 n 
+0000002100 00000 n 
+0000240174 00000 n 
+0001150008 00000 n 
+0000002153 00000 n 
+0000002195 00000 n 
+0000248921 00000 n 
+0001149878 00000 n 
+0000002249 00000 n 
+0000002293 00000 n 
+0000248978 00000 n 
+0001149799 00000 n 
+0000002352 00000 n 
+0000002408 00000 n 
+0000284578 00000 n 
+0001149706 00000 n 
+0000002467 00000 n 
+0000002543 00000 n 
+0000288922 00000 n 
+0001149613 00000 n 
+0000002602 00000 n 
+0000002668 00000 n 
+0000296931 00000 n 
+0001149534 00000 n 
+0000002727 00000 n 
+0000002796 00000 n 
+0000300738 00000 n 
+0001149417 00000 n 
+0000002850 00000 n 
+0000002895 00000 n 
+0000300798 00000 n 
+0001149338 00000 n 
+0000002954 00000 n 
+0000003011 00000 n 
+0000309276 00000 n 
+0001149245 00000 n 
+0000003070 00000 n 
+0000003148 00000 n 
+0000312534 00000 n 
+0001149152 00000 n 
+0000003207 00000 n 
+0000003281 00000 n 
+0000315908 00000 n 
+0001149073 00000 n 
+0000003340 00000 n 
+0000003410 00000 n 
+0000326421 00000 n 
+0001148943 00000 n 
+0000003459 00000 n 
+0000003502 00000 n 
+0000326480 00000 n 
+0001148864 00000 n 
+0000003556 00000 n 
+0000003601 00000 n 
+0000326601 00000 n 
+0001148771 00000 n 
+0000003655 00000 n 
+0000003705 00000 n 
+0000330260 00000 n 
+0001148678 00000 n 
+0000003759 00000 n 
+0000003817 00000 n 
+0000330380 00000 n 
+0001148585 00000 n 
+0000003871 00000 n 
+0000003949 00000 n 
+0000335582 00000 n 
+0001148492 00000 n 
+0000004003 00000 n 
+0000004082 00000 n 
+0000341229 00000 n 
+0001148399 00000 n 
+0000004136 00000 n 
+0000004215 00000 n 
+0000346301 00000 n 
+0001148306 00000 n 
+0000004269 00000 n 
+0000004335 00000 n 
+0000350062 00000 n 
+0001148213 00000 n 
+0000004389 00000 n 
+0000004451 00000 n 
+0000350183 00000 n 
+0001148134 00000 n 
+0000004505 00000 n 
+0000004558 00000 n 
+0000354945 00000 n 
+0001148056 00000 n 
+0000004607 00000 n 
+0000004679 00000 n 
+0000372983 00000 n 
+0001147924 00000 n 
+0000004726 00000 n 
+0000004799 00000 n 
+0000373043 00000 n 
+0001147845 00000 n 
+0000004848 00000 n 
+0000004897 00000 n 
+0000373103 00000 n 
+0001147752 00000 n 
+0000004946 00000 n 
+0000004984 00000 n 
+0000376032 00000 n 
+0001147659 00000 n 
+0000005033 00000 n 
+0000005069 00000 n 
+0000379447 00000 n 
+0001147566 00000 n 
+0000005118 00000 n 
+0000005175 00000 n 
+0000403327 00000 n 
+0001147473 00000 n 
+0000005224 00000 n 
+0000005277 00000 n 
+0000408901 00000 n 
+0001147394 00000 n 
+0000005326 00000 n 
+0000005389 00000 n 
+0000421010 00000 n 
+0001147261 00000 n 
+0000005436 00000 n 
+0000005489 00000 n 
+0000440461 00000 n 
+0001147182 00000 n 
+0000005538 00000 n 
+0000005594 00000 n 
+0000448542 00000 n 
+0001147089 00000 n 
+0000005643 00000 n 
+0000005701 00000 n 
+0000460985 00000 n 
+0001146996 00000 n 
+0000005750 00000 n 
+0000005806 00000 n 
+0000469516 00000 n 
+0001146903 00000 n 
+0000005855 00000 n 
+0000005913 00000 n 
+0000478494 00000 n 
+0001146810 00000 n 
+0000005962 00000 n 
+0000006018 00000 n 
+0000486976 00000 n 
+0001146717 00000 n 
+0000006067 00000 n 
+0000006122 00000 n 
+0000490763 00000 n 
+0001146624 00000 n 
+0000006171 00000 n 
+0000006207 00000 n 
+0000497229 00000 n 
+0001146545 00000 n 
+0000006256 00000 n 
+0000006308 00000 n 
+0000504044 00000 n 
+0001146412 00000 n 
+0000006355 00000 n 
+0000006416 00000 n 
+0000507966 00000 n 
+0001146333 00000 n 
+0000006465 00000 n 
+0000006508 00000 n 
+0000508087 00000 n 
+0001146240 00000 n 
+0000006557 00000 n 
+0000006591 00000 n 
+0000512531 00000 n 
+0001146147 00000 n 
+0000006640 00000 n 
+0000006674 00000 n 
+0000514435 00000 n 
+0001146068 00000 n 
+0000006723 00000 n 
+0000006771 00000 n 
+0000518138 00000 n 
+0001145935 00000 n 
+0000006818 00000 n 
+0000006886 00000 n 
+0000521232 00000 n 
+0001145817 00000 n 
+0000006935 00000 n 
+0000006986 00000 n 
+0000521292 00000 n 
+0001145738 00000 n 
+0000007040 00000 n 
+0000007071 00000 n 
+0000537145 00000 n 
+0001145645 00000 n 
+0000007125 00000 n 
+0000007180 00000 n 
+0000537205 00000 n 
+0001145552 00000 n 
+0000007234 00000 n 
+0000007283 00000 n 
+0000547205 00000 n 
+0001145473 00000 n 
+0000007337 00000 n 
+0000007385 00000 n 
+0000550458 00000 n 
+0001145341 00000 n 
+0000007434 00000 n 
+0000007468 00000 n 
+0000553753 00000 n 
+0001145262 00000 n 
+0000007522 00000 n 
+0000007553 00000 n 
+0000570868 00000 n 
+0001145169 00000 n 
+0000007607 00000 n 
+0000007654 00000 n 
+0000577245 00000 n 
+0001145076 00000 n 
+0000007708 00000 n 
+0000007742 00000 n 
+0000577305 00000 n 
+0001144997 00000 n 
+0000007796 00000 n 
+0000007836 00000 n 
+0000577365 00000 n 
+0001144879 00000 n 
+0000007885 00000 n 
+0000007957 00000 n 
+0000577424 00000 n 
+0001144800 00000 n 
+0000008011 00000 n 
+0000008047 00000 n 
+0000581128 00000 n 
+0001144707 00000 n 
+0000008101 00000 n 
+0000008138 00000 n 
+0000583173 00000 n 
+0001144614 00000 n 
+0000008192 00000 n 
+0000008228 00000 n 
+0000583233 00000 n 
+0001144535 00000 n 
+0000008282 00000 n 
+0000008320 00000 n 
+0000586504 00000 n 
+0001144402 00000 n 
+0000008368 00000 n 
+0000008427 00000 n 
+0000590408 00000 n 
+0001144284 00000 n 
+0000008476 00000 n 
+0000008520 00000 n 
+0000590468 00000 n 
+0001144205 00000 n 
+0000008574 00000 n 
+0000008652 00000 n 
+0000805245 00000 n 
+0001144112 00000 n 
+0000008706 00000 n 
+0000008762 00000 n 
+0000812789 00000 n 
+0001144019 00000 n 
+0000008816 00000 n 
+0000008858 00000 n 
+0000817028 00000 n 
+0001143940 00000 n 
+0000008912 00000 n 
+0000008963 00000 n 
+0000820948 00000 n 
+0001143847 00000 n 
+0000009012 00000 n 
+0000009061 00000 n 
+0000821008 00000 n 
+0001143754 00000 n 
+0000009110 00000 n 
+0000009178 00000 n 
+0000824264 00000 n 
+0001143675 00000 n 
+0000009227 00000 n 
+0000009292 00000 n 
+0000832570 00000 n 
+0001143542 00000 n 
+0000009340 00000 n 
+0000009376 00000 n 
+0000832630 00000 n 
+0001143463 00000 n 
+0000009425 00000 n 
+0000009467 00000 n 
+0000832690 00000 n 
+0001143384 00000 n 
+0000009516 00000 n 
+0000009559 00000 n 
+0000843256 00000 n 
+0001143290 00000 n 
+0000009609 00000 n 
+0000009641 00000 n 
+0000862896 00000 n 
+0001143210 00000 n 
+0000009691 00000 n 
+0000009716 00000 n 
+0000010338 00000 n 
+0000010450 00000 n 
+0000014024 00000 n 
+0000009768 00000 n 
+0000013906 00000 n 
+0000013965 00000 n 
+0001137387 00000 n 
+0001136370 00000 n 
+0001137242 00000 n 
+0001138833 00000 n 
+0001139270 00000 n 
+0000013684 00000 n 
+0000013837 00000 n 
+0000013884 00000 n 
+0000015581 00000 n 
+0000015410 00000 n 
+0000014163 00000 n 
+0000015522 00000 n 
+0001135929 00000 n 
+0001137098 00000 n 
+0000017610 00000 n 
+0000017763 00000 n 
+0000017916 00000 n 
+0000018068 00000 n 
+0000018222 00000 n 
+0000018375 00000 n 
+0000018529 00000 n 
+0000018682 00000 n 
+0000018841 00000 n 
+0000019005 00000 n 
+0000019169 00000 n 
+0000019327 00000 n 
+0000019479 00000 n 
+0000019631 00000 n 
+0000019784 00000 n 
+0000019938 00000 n 
+0000020090 00000 n 
+0000020244 00000 n 
+0000020398 00000 n 
+0000020552 00000 n 
+0000020705 00000 n 
+0000020859 00000 n 
+0000021018 00000 n 
+0000021177 00000 n 
+0000021335 00000 n 
+0000021494 00000 n 
+0000021657 00000 n 
+0000021821 00000 n 
+0000021985 00000 n 
+0000022149 00000 n 
+0000022307 00000 n 
+0000022471 00000 n 
+0000022635 00000 n 
+0000022799 00000 n 
+0000022963 00000 n 
+0000023115 00000 n 
+0000023272 00000 n 
+0000023427 00000 n 
+0000026479 00000 n 
+0000023702 00000 n 
+0000017182 00000 n 
+0000015665 00000 n 
+0000023584 00000 n 
+0001136075 00000 n 
+0000023643 00000 n 
+0000026638 00000 n 
+0000026797 00000 n 
+0000026956 00000 n 
+0000027115 00000 n 
+0000027274 00000 n 
+0000027433 00000 n 
+0000027587 00000 n 
+0000027739 00000 n 
+0000027893 00000 n 
+0000028047 00000 n 
+0000028201 00000 n 
+0000028354 00000 n 
+0000028508 00000 n 
+0000028661 00000 n 
+0000028813 00000 n 
+0000028967 00000 n 
+0000029120 00000 n 
+0000029274 00000 n 
+0000029427 00000 n 
+0000029581 00000 n 
+0000029735 00000 n 
+0000029889 00000 n 
+0000030043 00000 n 
+0000030195 00000 n 
+0000030348 00000 n 
+0000030501 00000 n 
+0000030654 00000 n 
+0000030806 00000 n 
+0000030958 00000 n 
+0000031111 00000 n 
+0000031269 00000 n 
+0000031427 00000 n 
+0000031584 00000 n 
+0000031742 00000 n 
+0000031894 00000 n 
+0000032052 00000 n 
+0000032210 00000 n 
+0000032368 00000 n 
+0000032526 00000 n 
+0000032678 00000 n 
+0000032836 00000 n 
+0000032993 00000 n 
+0000033151 00000 n 
+0000033309 00000 n 
+0000033462 00000 n 
+0000033615 00000 n 
+0000033771 00000 n 
+0000033927 00000 n 
+0000034083 00000 n 
+0000035114 00000 n 
+0000034298 00000 n 
+0000025955 00000 n 
+0000023799 00000 n 
+0000034239 00000 n 
+0000035267 00000 n 
+0000035420 00000 n 
+0000035573 00000 n 
+0000035726 00000 n 
+0000035879 00000 n 
+0000036032 00000 n 
+0000036187 00000 n 
+0000036401 00000 n 
+0000034926 00000 n 
+0000034382 00000 n 
+0000036342 00000 n 
+0000036756 00000 n 
+0000036585 00000 n 
+0000036485 00000 n 
+0000036697 00000 n 
+0000037988 00000 n 
+0000038139 00000 n 
+0000038291 00000 n 
+0000038443 00000 n 
+0000038595 00000 n 
+0000038747 00000 n 
+0000038899 00000 n 
+0000039051 00000 n 
+0000039203 00000 n 
+0000039354 00000 n 
+0000039680 00000 n 
+0000037784 00000 n 
+0000036797 00000 n 
+0000039505 00000 n 
+0000039564 00000 n 
+0001138979 00000 n 
+0001139388 00000 n 
+0000220442 00000 n 
+0000252804 00000 n 
+0000303102 00000 n 
+0000408838 00000 n 
+0000411345 00000 n 
+0000428240 00000 n 
+0000424771 00000 n 
+0000499959 00000 n 
+0000827976 00000 n 
+0000830348 00000 n 
+0000040061 00000 n 
+0000039890 00000 n 
+0000039790 00000 n 
+0000040002 00000 n 
+0000040926 00000 n 
+0000041078 00000 n 
+0000041231 00000 n 
+0000041382 00000 n 
+0000041534 00000 n 
+0000041686 00000 n 
+0000042014 00000 n 
+0000040754 00000 n 
+0000040102 00000 n 
+0000041838 00000 n 
+0000041897 00000 n 
+0001138687 00000 n 
+0000181758 00000 n 
+0000193863 00000 n 
+0000532954 00000 n 
+0000567655 00000 n 
+0000697685 00000 n 
+0000805121 00000 n 
+0000042395 00000 n 
+0000042224 00000 n 
+0000042124 00000 n 
+0000042336 00000 n 
+0000045802 00000 n 
+0000045959 00000 n 
+0000046112 00000 n 
+0000046265 00000 n 
+0000046418 00000 n 
+0000046572 00000 n 
+0000046726 00000 n 
+0000046879 00000 n 
+0000047033 00000 n 
+0000047184 00000 n 
+0000047336 00000 n 
+0000047671 00000 n 
+0000045590 00000 n 
+0000042436 00000 n 
+0000047496 00000 n 
+0000844093 00000 n 
+0000843554 00000 n 
+0000846574 00000 n 
+0000846514 00000 n 
+0000846634 00000 n 
+0000844033 00000 n 
+0000843674 00000 n 
+0000843316 00000 n 
+0000846273 00000 n 
+0000843794 00000 n 
+0000843376 00000 n 
+0000051890 00000 n 
+0000052275 00000 n 
+0000051758 00000 n 
+0000047768 00000 n 
+0000052040 00000 n 
+0001137532 00000 n 
+0000052157 00000 n 
+0000052216 00000 n 
+0000061352 00000 n 
+0000057262 00000 n 
+0000056973 00000 n 
+0000052410 00000 n 
+0000057085 00000 n 
+0000057144 00000 n 
+0000057203 00000 n 
+0001139506 00000 n 
+0000061506 00000 n 
+0000061656 00000 n 
+0000061808 00000 n 
+0000062311 00000 n 
+0000061196 00000 n 
+0000057398 00000 n 
+0000061958 00000 n 
+0000062017 00000 n 
+0001138399 00000 n 
+0001136662 00000 n 
+0000062076 00000 n 
+0000062134 00000 n 
+0000062193 00000 n 
+0000062252 00000 n 
+0000067795 00000 n 
+0000067947 00000 n 
+0000068099 00000 n 
+0000068258 00000 n 
+0000068415 00000 n 
+0000068569 00000 n 
+0000068722 00000 n 
+0000068874 00000 n 
+0000069028 00000 n 
+0000069179 00000 n 
+0000069331 00000 n 
+0000069485 00000 n 
+0000069638 00000 n 
+0000069788 00000 n 
+0000069940 00000 n 
+0000070092 00000 n 
+0000070246 00000 n 
+0000070400 00000 n 
+0000070553 00000 n 
+0000070707 00000 n 
+0000070859 00000 n 
+0000071011 00000 n 
+0000071164 00000 n 
+0000066206 00000 n 
+0000071492 00000 n 
+0000065898 00000 n 
+0000062473 00000 n 
+0000071317 00000 n 
+0000071434 00000 n 
+0000066661 00000 n 
+0000066896 00000 n 
+0000066943 00000 n 
+0000067118 00000 n 
+0000067139 00000 n 
+0000067376 00000 n 
+0000843614 00000 n 
+0000075025 00000 n 
+0000074564 00000 n 
+0000071669 00000 n 
+0000074676 00000 n 
+0001138106 00000 n 
+0000076983 00000 n 
+0000076636 00000 n 
+0000075176 00000 n 
+0000076748 00000 n 
+0000076807 00000 n 
+0000076865 00000 n 
+0000076924 00000 n 
+0000077338 00000 n 
+0000077167 00000 n 
+0000077067 00000 n 
+0000077279 00000 n 
+0000079988 00000 n 
+0000080141 00000 n 
+0000080296 00000 n 
+0000080450 00000 n 
+0000080605 00000 n 
+0000084684 00000 n 
+0000084839 00000 n 
+0000084995 00000 n 
+0000085147 00000 n 
+0000085300 00000 n 
+0000081231 00000 n 
+0000079824 00000 n 
+0000077379 00000 n 
+0000080757 00000 n 
+0000080874 00000 n 
+0001136953 00000 n 
+0001137818 00000 n 
+0000080935 00000 n 
+0000080996 00000 n 
+0000081054 00000 n 
+0000081113 00000 n 
+0001138544 00000 n 
+0000081172 00000 n 
+0001139624 00000 n 
+0000843494 00000 n 
+0000843734 00000 n 
+0000843853 00000 n 
+0000846213 00000 n 
+0000085461 00000 n 
+0000085794 00000 n 
+0000084512 00000 n 
+0000081418 00000 n 
+0000085615 00000 n 
+0000085674 00000 n 
+0001136808 00000 n 
+0001137675 00000 n 
+0000085733 00000 n 
+0001137962 00000 n 
+0000090657 00000 n 
+0000090812 00000 n 
+0000090967 00000 n 
+0000091122 00000 n 
+0000091575 00000 n 
+0000090501 00000 n 
+0000086006 00000 n 
+0000091277 00000 n 
+0000091336 00000 n 
+0000091395 00000 n 
+0000091457 00000 n 
+0000091516 00000 n 
+0000101062 00000 n 
+0000101186 00000 n 
+0000095522 00000 n 
+0000095676 00000 n 
+0000096189 00000 n 
+0000095382 00000 n 
+0000091748 00000 n 
+0000095829 00000 n 
+0000095888 00000 n 
+0000095947 00000 n 
+0000096006 00000 n 
+0001136517 00000 n 
+0000096068 00000 n 
+0000096130 00000 n 
+0000843913 00000 n 
+0000100419 00000 n 
+0000100573 00000 n 
+0000100728 00000 n 
+0000105263 00000 n 
+0000101542 00000 n 
+0000100271 00000 n 
+0000096387 00000 n 
+0000100882 00000 n 
+0000100941 00000 n 
+0000101000 00000 n 
+0000101124 00000 n 
+0000101248 00000 n 
+0000101307 00000 n 
+0000101365 00000 n 
+0000101424 00000 n 
+0000101483 00000 n 
+0000105428 00000 n 
+0000105586 00000 n 
+0000105745 00000 n 
+0000105902 00000 n 
+0000106585 00000 n 
+0000105099 00000 n 
+0000101741 00000 n 
+0000106055 00000 n 
+0000106114 00000 n 
+0000106173 00000 n 
+0000106232 00000 n 
+0000106291 00000 n 
+0000106349 00000 n 
+0000106408 00000 n 
+0000106467 00000 n 
+0000106526 00000 n 
+0000846393 00000 n 
+0000843435 00000 n 
+0000846694 00000 n 
+0000843973 00000 n 
+0000846333 00000 n 
+0000107811 00000 n 
+0000107581 00000 n 
+0000106770 00000 n 
+0000107693 00000 n 
+0000107752 00000 n 
+0001139742 00000 n 
+0000108255 00000 n 
+0000108084 00000 n 
+0000107984 00000 n 
+0000108196 00000 n 
+0000111162 00000 n 
+0000112593 00000 n 
+0000138889 00000 n 
+0000111314 00000 n 
+0000184623 00000 n 
+0000193024 00000 n 
+0000193179 00000 n 
+0000111700 00000 n 
+0000111022 00000 n 
+0000108296 00000 n 
+0000111467 00000 n 
+0000181818 00000 n 
+0000112481 00000 n 
+0000111849 00000 n 
+0000181582 00000 n 
+0000181641 00000 n 
+0000181700 00000 n 
+0000112967 00000 n 
+0000113187 00000 n 
+0000113234 00000 n 
+0000138869 00000 n 
+0000139263 00000 n 
+0000139483 00000 n 
+0000139530 00000 n 
+0000181562 00000 n 
+0000193335 00000 n 
+0000193488 00000 n 
+0000193642 00000 n 
+0000193925 00000 n 
+0000184459 00000 n 
+0000181969 00000 n 
+0000193804 00000 n 
+0000187238 00000 n 
+0000187472 00000 n 
+0000187519 00000 n 
+0000187837 00000 n 
+0000188090 00000 n 
+0000188112 00000 n 
+0000188384 00000 n 
+0000188655 00000 n 
+0000190772 00000 n 
+0000196731 00000 n 
+0000196943 00000 n 
+0000196599 00000 n 
+0000194076 00000 n 
+0000196884 00000 n 
+0000200188 00000 n 
+0000200345 00000 n 
+0000200497 00000 n 
+0000200650 00000 n 
+0000200801 00000 n 
+0000205341 00000 n 
+0000201127 00000 n 
+0000200024 00000 n 
+0000197053 00000 n 
+0000200952 00000 n 
+0001139860 00000 n 
+0000205500 00000 n 
+0000205657 00000 n 
+0000205983 00000 n 
+0000205193 00000 n 
+0000201263 00000 n 
+0000205808 00000 n 
+0000210445 00000 n 
+0000210602 00000 n 
+0000210754 00000 n 
+0000210908 00000 n 
+0000211062 00000 n 
+0000211215 00000 n 
+0000211368 00000 n 
+0000211877 00000 n 
+0000210265 00000 n 
+0000206132 00000 n 
+0000211525 00000 n 
+0000211642 00000 n 
+0000211701 00000 n 
+0000211760 00000 n 
+0000211819 00000 n 
+0000214249 00000 n 
+0000214406 00000 n 
+0000214565 00000 n 
+0000214724 00000 n 
+0000214882 00000 n 
+0000215039 00000 n 
+0000219768 00000 n 
+0000219920 00000 n 
+0000215786 00000 n 
+0000214077 00000 n 
+0000212039 00000 n 
+0000215197 00000 n 
+0000215256 00000 n 
+0000215315 00000 n 
+0000215374 00000 n 
+0000215433 00000 n 
+0000215492 00000 n 
+0000215551 00000 n 
+0000215610 00000 n 
+0000215669 00000 n 
+0000215728 00000 n 
+0000220070 00000 n 
+0000220229 00000 n 
+0000220678 00000 n 
+0000219612 00000 n 
+0000215922 00000 n 
+0000220383 00000 n 
+0001139125 00000 n 
+0000220619 00000 n 
+0000225087 00000 n 
+0000225246 00000 n 
+0000225403 00000 n 
+0000225790 00000 n 
+0000224939 00000 n 
+0000220853 00000 n 
+0000225555 00000 n 
+0000225614 00000 n 
+0000225673 00000 n 
+0000229566 00000 n 
+0000229954 00000 n 
+0000229434 00000 n 
+0000225939 00000 n 
+0000229718 00000 n 
+0000229777 00000 n 
+0000229836 00000 n 
+0000229895 00000 n 
+0001139978 00000 n 
+0000233573 00000 n 
+0000233284 00000 n 
+0000230064 00000 n 
+0000233396 00000 n 
+0000233455 00000 n 
+0000233514 00000 n 
+0000237530 00000 n 
+0000237241 00000 n 
+0000233709 00000 n 
+0000237353 00000 n 
+0000237412 00000 n 
+0000237471 00000 n 
+0000240230 00000 n 
+0000239826 00000 n 
+0000237668 00000 n 
+0000239938 00000 n 
+0000239997 00000 n 
+0000240056 00000 n 
+0000240115 00000 n 
+0000244482 00000 n 
+0000244759 00000 n 
+0000244350 00000 n 
+0000240353 00000 n 
+0000244641 00000 n 
+0000244700 00000 n 
+0000248556 00000 n 
+0000248708 00000 n 
+0000249095 00000 n 
+0000248416 00000 n 
+0000244920 00000 n 
+0000248862 00000 n 
+0000249037 00000 n 
+0000252865 00000 n 
+0000252633 00000 n 
+0000249269 00000 n 
+0000252745 00000 n 
+0001140096 00000 n 
+0000255880 00000 n 
+0000256039 00000 n 
+0000256432 00000 n 
+0000255740 00000 n 
+0000253039 00000 n 
+0000256196 00000 n 
+0000256255 00000 n 
+0000256314 00000 n 
+0000256373 00000 n 
+0000260012 00000 n 
+0000259723 00000 n 
+0000256583 00000 n 
+0000259835 00000 n 
+0000259894 00000 n 
+0000259953 00000 n 
+0000263279 00000 n 
+0000262932 00000 n 
+0000260239 00000 n 
+0000263044 00000 n 
+0000263103 00000 n 
+0000263162 00000 n 
+0000263221 00000 n 
+0000266324 00000 n 
+0000266712 00000 n 
+0000266192 00000 n 
+0000263417 00000 n 
+0000266476 00000 n 
+0000266535 00000 n 
+0000266594 00000 n 
+0000266653 00000 n 
+0000269728 00000 n 
+0000269883 00000 n 
+0000270331 00000 n 
+0000269588 00000 n 
+0000266863 00000 n 
+0000270036 00000 n 
+0000270095 00000 n 
+0000270154 00000 n 
+0000270213 00000 n 
+0000270272 00000 n 
+0000273825 00000 n 
+0000273466 00000 n 
+0000270480 00000 n 
+0000273581 00000 n 
+0000273642 00000 n 
+0000273703 00000 n 
+0000273764 00000 n 
+0001140214 00000 n 
+0000276790 00000 n 
+0000276946 00000 n 
+0000277406 00000 n 
+0000276644 00000 n 
+0000273998 00000 n 
+0000277101 00000 n 
+0000277162 00000 n 
+0000277223 00000 n 
+0000277284 00000 n 
+0000277345 00000 n 
+0000280614 00000 n 
+0000280315 00000 n 
+0000277568 00000 n 
+0000280431 00000 n 
+0000280492 00000 n 
+0000280553 00000 n 
+0000284357 00000 n 
+0000284760 00000 n 
+0000284220 00000 n 
+0000280764 00000 n 
+0000284517 00000 n 
+0000284638 00000 n 
+0000284699 00000 n 
+0000288542 00000 n 
+0000288701 00000 n 
+0000289104 00000 n 
+0000288396 00000 n 
+0000284897 00000 n 
+0000288861 00000 n 
+0000288982 00000 n 
+0000289043 00000 n 
+0000296080 00000 n 
+0000292444 00000 n 
+0000292145 00000 n 
+0000289241 00000 n 
+0000292261 00000 n 
+0000292322 00000 n 
+0000292383 00000 n 
+0000296235 00000 n 
+0000296395 00000 n 
+0000296554 00000 n 
+0000296713 00000 n 
+0000297112 00000 n 
+0000295907 00000 n 
+0000292581 00000 n 
+0000296870 00000 n 
+0000296991 00000 n 
+0000297051 00000 n 
+0001140339 00000 n 
+0000300464 00000 n 
+0000300919 00000 n 
+0000300327 00000 n 
+0000297249 00000 n 
+0000300616 00000 n 
+0000300677 00000 n 
+0000300858 00000 n 
+0000303165 00000 n 
+0000302925 00000 n 
+0000301110 00000 n 
+0000303041 00000 n 
+0000306018 00000 n 
+0000305538 00000 n 
+0000303289 00000 n 
+0000305654 00000 n 
+0000305715 00000 n 
+0000305776 00000 n 
+0000305837 00000 n 
+0000305897 00000 n 
+0000305958 00000 n 
+0000309458 00000 n 
+0000309039 00000 n 
+0000306154 00000 n 
+0000309155 00000 n 
+0000309216 00000 n 
+0000309336 00000 n 
+0000309397 00000 n 
+0000312655 00000 n 
+0000312235 00000 n 
+0000309594 00000 n 
+0000312351 00000 n 
+0000312412 00000 n 
+0000312473 00000 n 
+0000312594 00000 n 
+0000316029 00000 n 
+0000315609 00000 n 
+0000312766 00000 n 
+0000315725 00000 n 
+0000315786 00000 n 
+0000315847 00000 n 
+0000315968 00000 n 
+0001140464 00000 n 
+0000318750 00000 n 
+0000318330 00000 n 
+0000316166 00000 n 
+0000318446 00000 n 
+0000318507 00000 n 
+0000318568 00000 n 
+0000318629 00000 n 
+0000318689 00000 n 
+0000322427 00000 n 
+0000322067 00000 n 
+0000318887 00000 n 
+0000322183 00000 n 
+0000322244 00000 n 
+0000322305 00000 n 
+0000322366 00000 n 
+0000326661 00000 n 
+0000326244 00000 n 
+0000322538 00000 n 
+0000326360 00000 n 
+0000326540 00000 n 
+0000329832 00000 n 
+0000329983 00000 n 
+0000330499 00000 n 
+0000329686 00000 n 
+0000326811 00000 n 
+0000330138 00000 n 
+0000330199 00000 n 
+0000330320 00000 n 
+0000330440 00000 n 
+0000335058 00000 n 
+0000335217 00000 n 
+0000335367 00000 n 
+0000335703 00000 n 
+0000334903 00000 n 
+0000330649 00000 n 
+0000335521 00000 n 
+0000335642 00000 n 
+0000340703 00000 n 
+0000340862 00000 n 
+0000341013 00000 n 
+0000341350 00000 n 
+0000340548 00000 n 
+0000335853 00000 n 
+0000341168 00000 n 
+0000341289 00000 n 
+0001140589 00000 n 
+0000345782 00000 n 
+0000345937 00000 n 
+0000346087 00000 n 
+0000346421 00000 n 
+0000345627 00000 n 
+0000341500 00000 n 
+0000346240 00000 n 
+0000346360 00000 n 
+0000350304 00000 n 
+0000349885 00000 n 
+0000346571 00000 n 
+0000350001 00000 n 
+0000350122 00000 n 
+0000350243 00000 n 
+0000354729 00000 n 
+0000355005 00000 n 
+0000354592 00000 n 
+0000350441 00000 n 
+0000354884 00000 n 
+0000359048 00000 n 
+0000359203 00000 n 
+0000359538 00000 n 
+0000358902 00000 n 
+0000355193 00000 n 
+0000359355 00000 n 
+0000359416 00000 n 
+0000359477 00000 n 
+0000362104 00000 n 
+0000363228 00000 n 
+0000361967 00000 n 
+0000359675 00000 n 
+0000362254 00000 n 
+0000362315 00000 n 
+0000362376 00000 n 
+0000362437 00000 n 
+0000362497 00000 n 
+0000362558 00000 n 
+0000362619 00000 n 
+0000362680 00000 n 
+0000362741 00000 n 
+0000362802 00000 n 
+0000362863 00000 n 
+0000362923 00000 n 
+0000362984 00000 n 
+0000363045 00000 n 
+0000363106 00000 n 
+0000363167 00000 n 
+0000367242 00000 n 
+0000367005 00000 n 
+0000363339 00000 n 
+0000367121 00000 n 
+0000367182 00000 n 
+0001140714 00000 n 
+0000369251 00000 n 
+0000369533 00000 n 
+0000369114 00000 n 
+0000367392 00000 n 
+0000369411 00000 n 
+0000369472 00000 n 
+0000372615 00000 n 
+0000372769 00000 n 
+0000375820 00000 n 
+0000373162 00000 n 
+0000372469 00000 n 
+0000369657 00000 n 
+0000372922 00000 n 
+0000376092 00000 n 
+0000375683 00000 n 
+0000373312 00000 n 
+0000375971 00000 n 
+0000379234 00000 n 
+0000379689 00000 n 
+0000379097 00000 n 
+0000376229 00000 n 
+0000379386 00000 n 
+0000379507 00000 n 
+0000379568 00000 n 
+0000379629 00000 n 
+0000382449 00000 n 
+0000382604 00000 n 
+0000383123 00000 n 
+0000382303 00000 n 
+0000379826 00000 n 
+0000382757 00000 n 
+0000382818 00000 n 
+0000382879 00000 n 
+0000382940 00000 n 
+0000383001 00000 n 
+0000383062 00000 n 
+0000386498 00000 n 
+0000386711 00000 n 
+0000386361 00000 n 
+0000383247 00000 n 
+0000386650 00000 n 
+0001140839 00000 n 
+0000390606 00000 n 
+0000390820 00000 n 
+0000390469 00000 n 
+0000386848 00000 n 
+0000390759 00000 n 
+0000394076 00000 n 
+0000394229 00000 n 
+0000394381 00000 n 
+0000394595 00000 n 
+0000393921 00000 n 
+0000390970 00000 n 
+0000394534 00000 n 
+0000398161 00000 n 
+0000398314 00000 n 
+0000398535 00000 n 
+0000398015 00000 n 
+0000394732 00000 n 
+0000398474 00000 n 
+0000402525 00000 n 
+0000402685 00000 n 
+0000402840 00000 n 
+0000402992 00000 n 
+0000408153 00000 n 
+0000403387 00000 n 
+0000402361 00000 n 
+0000398672 00000 n 
+0000403144 00000 n 
+0000403205 00000 n 
+0000403266 00000 n 
+0000408305 00000 n 
+0000408464 00000 n 
+0000408623 00000 n 
+0000414654 00000 n 
+0000408961 00000 n 
+0000407989 00000 n 
+0000403565 00000 n 
+0000408777 00000 n 
+0000411408 00000 n 
+0000411168 00000 n 
+0000409136 00000 n 
+0000411284 00000 n 
+0001140964 00000 n 
+0000414808 00000 n 
+0000414962 00000 n 
+0000415113 00000 n 
+0000415268 00000 n 
+0000416028 00000 n 
+0000414481 00000 n 
+0000411519 00000 n 
+0000415421 00000 n 
+0000415482 00000 n 
+0000415543 00000 n 
+0000415604 00000 n 
+0000415664 00000 n 
+0000415725 00000 n 
+0000415786 00000 n 
+0000415847 00000 n 
+0000415907 00000 n 
+0000415968 00000 n 
+0000418292 00000 n 
+0000418442 00000 n 
+0000418719 00000 n 
+0000418146 00000 n 
+0000416165 00000 n 
+0000418597 00000 n 
+0000418658 00000 n 
+0000419162 00000 n 
+0000418985 00000 n 
+0000418884 00000 n 
+0000419101 00000 n 
+0000421070 00000 n 
+0000420833 00000 n 
+0000419204 00000 n 
+0000420949 00000 n 
+0000424406 00000 n 
+0000424559 00000 n 
+0000424830 00000 n 
+0000424260 00000 n 
+0000421194 00000 n 
+0000424710 00000 n 
+0000428026 00000 n 
+0000428303 00000 n 
+0000427889 00000 n 
+0000424967 00000 n 
+0000428179 00000 n 
+0001138253 00000 n 
+0001141089 00000 n 
+0000432051 00000 n 
+0000431874 00000 n 
+0000428454 00000 n 
+0000431990 00000 n 
+0000435920 00000 n 
+0000435743 00000 n 
+0000432215 00000 n 
+0000435859 00000 n 
+0000440521 00000 n 
+0000440284 00000 n 
+0000436108 00000 n 
+0000440400 00000 n 
+0000443841 00000 n 
+0000443994 00000 n 
+0000444208 00000 n 
+0000443695 00000 n 
+0000440711 00000 n 
+0000444147 00000 n 
+0000448602 00000 n 
+0000448304 00000 n 
+0000444358 00000 n 
+0000448420 00000 n 
+0000448481 00000 n 
+0000452164 00000 n 
+0000452317 00000 n 
+0000452531 00000 n 
+0000452018 00000 n 
+0000448780 00000 n 
+0000452470 00000 n 
+0001141214 00000 n 
+0000455900 00000 n 
+0000455662 00000 n 
+0000452668 00000 n 
+0000455778 00000 n 
+0000455839 00000 n 
+0000461045 00000 n 
+0000460808 00000 n 
+0000456065 00000 n 
+0000460924 00000 n 
+0000464251 00000 n 
+0000464403 00000 n 
+0000464616 00000 n 
+0000464105 00000 n 
+0000461236 00000 n 
+0000464555 00000 n 
+0000469576 00000 n 
+0000469278 00000 n 
+0000464766 00000 n 
+0000469394 00000 n 
+0000469455 00000 n 
+0000473324 00000 n 
+0000473477 00000 n 
+0000473691 00000 n 
+0000473178 00000 n 
+0000469767 00000 n 
+0000473630 00000 n 
+0000478222 00000 n 
+0000481488 00000 n 
+0000481645 00000 n 
+0000478554 00000 n 
+0000478085 00000 n 
+0000473841 00000 n 
+0000478372 00000 n 
+0000478433 00000 n 
+0001141339 00000 n 
+0000481803 00000 n 
+0000482016 00000 n 
+0000481333 00000 n 
+0000478745 00000 n 
+0000481955 00000 n 
+0000844153 00000 n 
+0000846453 00000 n 
+0000486394 00000 n 
+0000486547 00000 n 
+0000486701 00000 n 
+0000487036 00000 n 
+0000486239 00000 n 
+0000482166 00000 n 
+0000486854 00000 n 
+0000486915 00000 n 
+0000844214 00000 n 
+0000490823 00000 n 
+0000490525 00000 n 
+0000487227 00000 n 
+0000490641 00000 n 
+0000490702 00000 n 
+0000493078 00000 n 
+0000492901 00000 n 
+0000491001 00000 n 
+0000493017 00000 n 
+0000496862 00000 n 
+0000497015 00000 n 
+0000497289 00000 n 
+0000496716 00000 n 
+0000493189 00000 n 
+0000497168 00000 n 
+0000500022 00000 n 
+0000499782 00000 n 
+0000497439 00000 n 
+0000499898 00000 n 
+0001141464 00000 n 
+0000500424 00000 n 
+0000500247 00000 n 
+0000500146 00000 n 
+0000500363 00000 n 
+0000503823 00000 n 
+0000504104 00000 n 
+0000503686 00000 n 
+0000500466 00000 n 
+0000503983 00000 n 
+0000508208 00000 n 
+0000507789 00000 n 
+0000504254 00000 n 
+0000507905 00000 n 
+0000508026 00000 n 
+0000508147 00000 n 
+0000512652 00000 n 
+0000512354 00000 n 
+0000508345 00000 n 
+0000512470 00000 n 
+0000512591 00000 n 
+0000514556 00000 n 
+0000514258 00000 n 
+0000512827 00000 n 
+0000514374 00000 n 
+0000514495 00000 n 
+0000517293 00000 n 
+0000517450 00000 n 
+0000517606 00000 n 
+0000517769 00000 n 
+0000517922 00000 n 
+0000518198 00000 n 
+0000517120 00000 n 
+0000514680 00000 n 
+0000518077 00000 n 
+0001141589 00000 n 
+0000521352 00000 n 
+0000521055 00000 n 
+0000518335 00000 n 
+0000521171 00000 n 
+0000524823 00000 n 
+0000526204 00000 n 
+0000525037 00000 n 
+0000524686 00000 n 
+0000521502 00000 n 
+0000524976 00000 n 
+0000533017 00000 n 
+0000526088 00000 n 
+0000525174 00000 n 
+0000532893 00000 n 
+0000528847 00000 n 
+0000529083 00000 n 
+0000529131 00000 n 
+0000529536 00000 n 
+0000529559 00000 n 
+0000529907 00000 n 
+0000530003 00000 n 
+0000537265 00000 n 
+0000536968 00000 n 
+0000533170 00000 n 
+0000537084 00000 n 
+0000540411 00000 n 
+0000540234 00000 n 
+0000537415 00000 n 
+0000540350 00000 n 
+0000544161 00000 n 
+0000543862 00000 n 
+0000540548 00000 n 
+0000543978 00000 n 
+0000544039 00000 n 
+0000544100 00000 n 
+0001141714 00000 n 
+0000547265 00000 n 
+0000547028 00000 n 
+0000544311 00000 n 
+0000547144 00000 n 
+0000550518 00000 n 
+0000550281 00000 n 
+0000547415 00000 n 
+0000550397 00000 n 
+0000553539 00000 n 
+0000553813 00000 n 
+0000553402 00000 n 
+0000550681 00000 n 
+0000553692 00000 n 
+0000558240 00000 n 
+0000556611 00000 n 
+0000556434 00000 n 
+0000553976 00000 n 
+0000556550 00000 n 
+0000567718 00000 n 
+0000558124 00000 n 
+0000556734 00000 n 
+0000567594 00000 n 
+0000561752 00000 n 
+0000561987 00000 n 
+0000562035 00000 n 
+0000562472 00000 n 
+0000562495 00000 n 
+0000562892 00000 n 
+0000562988 00000 n 
+0000575169 00000 n 
+0000575325 00000 n 
+0000570928 00000 n 
+0000570691 00000 n 
+0000567871 00000 n 
+0000570807 00000 n 
+0001141839 00000 n 
+0000575480 00000 n 
+0000575634 00000 n 
+0000575788 00000 n 
+0000575943 00000 n 
+0000576098 00000 n 
+0000576259 00000 n 
+0000576411 00000 n 
+0000576566 00000 n 
+0000576719 00000 n 
+0000576874 00000 n 
+0000577029 00000 n 
+0000577484 00000 n 
+0000574924 00000 n 
+0000571078 00000 n 
+0000577184 00000 n 
+0000581188 00000 n 
+0000580951 00000 n 
+0000577634 00000 n 
+0000581067 00000 n 
+0000583292 00000 n 
+0000582996 00000 n 
+0000581351 00000 n 
+0000583112 00000 n 
+0000586564 00000 n 
+0000586327 00000 n 
+0000583442 00000 n 
+0000586443 00000 n 
+0001136221 00000 n 
+0000590589 00000 n 
+0000590231 00000 n 
+0000586756 00000 n 
+0000590347 00000 n 
+0000590528 00000 n 
+0000697316 00000 n 
+0000592627 00000 n 
+0000697470 00000 n 
+0000699281 00000 n 
+0000697747 00000 n 
+0000592481 00000 n 
+0000590739 00000 n 
+0000697624 00000 n 
+0001141964 00000 n 
+0000805305 00000 n 
+0000699165 00000 n 
+0000697921 00000 n 
+0000805060 00000 n 
+0000805184 00000 n 
+0000807696 00000 n 
+0000807519 00000 n 
+0000805479 00000 n 
+0000807635 00000 n 
+0000810728 00000 n 
+0000810551 00000 n 
+0000807807 00000 n 
+0000810667 00000 n 
+0000812849 00000 n 
+0000812612 00000 n 
+0000810839 00000 n 
+0000812728 00000 n 
+0000817392 00000 n 
+0000816851 00000 n 
+0000812973 00000 n 
+0000816967 00000 n 
+0000817088 00000 n 
+0000817149 00000 n 
+0000817210 00000 n 
+0000817271 00000 n 
+0000817332 00000 n 
+0000821799 00000 n 
+0000820771 00000 n 
+0000817557 00000 n 
+0000820887 00000 n 
+0000821068 00000 n 
+0000821129 00000 n 
+0000821190 00000 n 
+0000821251 00000 n 
+0000821312 00000 n 
+0000821372 00000 n 
+0000821433 00000 n 
+0000821494 00000 n 
+0000821555 00000 n 
+0000821616 00000 n 
+0000821677 00000 n 
+0000821738 00000 n 
+0001142089 00000 n 
+0000823899 00000 n 
+0000824051 00000 n 
+0000824324 00000 n 
+0000823753 00000 n 
+0000821964 00000 n 
+0000824203 00000 n 
+0000828039 00000 n 
+0000827799 00000 n 
+0000824461 00000 n 
+0000827915 00000 n 
+0000830409 00000 n 
+0000830171 00000 n 
+0000828150 00000 n 
+0000830287 00000 n 
+0000832750 00000 n 
+0000832393 00000 n 
+0000830520 00000 n 
+0000832509 00000 n 
+0000835792 00000 n 
+0000835615 00000 n 
+0000832887 00000 n 
+0000835731 00000 n 
+0000838665 00000 n 
+0000838488 00000 n 
+0000835916 00000 n 
+0000838604 00000 n 
+0001142214 00000 n 
+0000840487 00000 n 
+0000840310 00000 n 
+0000838789 00000 n 
+0000840426 00000 n 
+0000844274 00000 n 
+0000843018 00000 n 
+0000840598 00000 n 
+0000843134 00000 n 
+0000843195 00000 n 
+0000846754 00000 n 
+0000846036 00000 n 
+0000844372 00000 n 
+0000846152 00000 n 
+0000849554 00000 n 
+0000849703 00000 n 
+0000849852 00000 n 
+0000850004 00000 n 
+0000850156 00000 n 
+0000850308 00000 n 
+0000850460 00000 n 
+0000850612 00000 n 
+0000850763 00000 n 
+0000850913 00000 n 
+0000851065 00000 n 
+0000851216 00000 n 
+0000851368 00000 n 
+0000851517 00000 n 
+0000851669 00000 n 
+0000851821 00000 n 
+0000851973 00000 n 
+0000852125 00000 n 
+0000852277 00000 n 
+0000852429 00000 n 
+0000852581 00000 n 
+0000852733 00000 n 
+0000852883 00000 n 
+0000853034 00000 n 
+0000853181 00000 n 
+0000853332 00000 n 
+0000853484 00000 n 
+0000853636 00000 n 
+0000853788 00000 n 
+0000853940 00000 n 
+0000854092 00000 n 
+0000854244 00000 n 
+0000854395 00000 n 
+0000854544 00000 n 
+0000854696 00000 n 
+0000854847 00000 n 
+0000854999 00000 n 
+0000855151 00000 n 
+0000855303 00000 n 
+0000855455 00000 n 
+0000855607 00000 n 
+0000855759 00000 n 
+0000855910 00000 n 
+0000856060 00000 n 
+0000856210 00000 n 
+0000856360 00000 n 
+0000856510 00000 n 
+0000856661 00000 n 
+0000856811 00000 n 
+0000856963 00000 n 
+0000857115 00000 n 
+0000857266 00000 n 
+0000857417 00000 n 
+0000857569 00000 n 
+0000857720 00000 n 
+0000857871 00000 n 
+0000858022 00000 n 
+0000858173 00000 n 
+0000858324 00000 n 
+0000858475 00000 n 
+0000858626 00000 n 
+0000858777 00000 n 
+0000858929 00000 n 
+0000859080 00000 n 
+0000859228 00000 n 
+0000859378 00000 n 
+0000859529 00000 n 
+0000859680 00000 n 
+0000859830 00000 n 
+0000859981 00000 n 
+0000860132 00000 n 
+0000860282 00000 n 
+0000860433 00000 n 
+0000860584 00000 n 
+0000860735 00000 n 
+0000860886 00000 n 
+0000861037 00000 n 
+0000861188 00000 n 
+0000861339 00000 n 
+0000861488 00000 n 
+0000861637 00000 n 
+0000861786 00000 n 
+0000861937 00000 n 
+0000862088 00000 n 
+0000862239 00000 n 
+0000862389 00000 n 
+0000862538 00000 n 
+0000862686 00000 n 
+0000867136 00000 n 
+0000867287 00000 n 
+0000862956 00000 n 
+0000848634 00000 n 
+0000846852 00000 n 
+0000862835 00000 n 
+0000867438 00000 n 
+0000867589 00000 n 
+0000867740 00000 n 
+0000867891 00000 n 
+0000868042 00000 n 
+0000868192 00000 n 
+0000868342 00000 n 
+0000868492 00000 n 
+0000868641 00000 n 
+0000868790 00000 n 
+0000868941 00000 n 
+0000869091 00000 n 
+0000869242 00000 n 
+0000869393 00000 n 
+0000869544 00000 n 
+0000869695 00000 n 
+0000869846 00000 n 
+0000869993 00000 n 
+0000870145 00000 n 
+0000870296 00000 n 
+0000870442 00000 n 
+0000870594 00000 n 
+0000870746 00000 n 
+0000870898 00000 n 
+0000871049 00000 n 
+0000871201 00000 n 
+0000871352 00000 n 
+0000871503 00000 n 
+0000871653 00000 n 
+0000871804 00000 n 
+0000871955 00000 n 
+0000872106 00000 n 
+0000872257 00000 n 
+0000872408 00000 n 
+0000872559 00000 n 
+0000872709 00000 n 
+0000872859 00000 n 
+0000873009 00000 n 
+0000873159 00000 n 
+0000873310 00000 n 
+0000873461 00000 n 
+0000873612 00000 n 
+0000873763 00000 n 
+0000873912 00000 n 
+0000874063 00000 n 
+0000874214 00000 n 
+0000874365 00000 n 
+0000874514 00000 n 
+0000874663 00000 n 
+0000874812 00000 n 
+0000874961 00000 n 
+0000875110 00000 n 
+0000875259 00000 n 
+0000875410 00000 n 
+0000875561 00000 n 
+0000875712 00000 n 
+0000875863 00000 n 
+0000876014 00000 n 
+0000876165 00000 n 
+0000876316 00000 n 
+0000876467 00000 n 
+0000876618 00000 n 
+0000876769 00000 n 
+0000876920 00000 n 
+0000877071 00000 n 
+0000877222 00000 n 
+0000877372 00000 n 
+0000877523 00000 n 
+0000877673 00000 n 
+0000877822 00000 n 
+0000877973 00000 n 
+0000878124 00000 n 
+0000878275 00000 n 
+0000878426 00000 n 
+0000878577 00000 n 
+0000878728 00000 n 
+0000878879 00000 n 
+0000879030 00000 n 
+0000879181 00000 n 
+0000879332 00000 n 
+0000879483 00000 n 
+0000879633 00000 n 
+0000879784 00000 n 
+0000879934 00000 n 
+0000880085 00000 n 
+0000880236 00000 n 
+0000880387 00000 n 
+0000880538 00000 n 
+0000880687 00000 n 
+0000880838 00000 n 
+0000880989 00000 n 
+0000881140 00000 n 
+0000881291 00000 n 
+0000881442 00000 n 
+0000881591 00000 n 
+0000881742 00000 n 
+0000881893 00000 n 
+0000882043 00000 n 
+0000882194 00000 n 
+0000882344 00000 n 
+0000882495 00000 n 
+0000882646 00000 n 
+0000882797 00000 n 
+0000882948 00000 n 
+0000883099 00000 n 
+0000883250 00000 n 
+0000883401 00000 n 
+0000883552 00000 n 
+0000883702 00000 n 
+0000883852 00000 n 
+0000884003 00000 n 
+0000884154 00000 n 
+0000884305 00000 n 
+0000884456 00000 n 
+0000884607 00000 n 
+0000884758 00000 n 
+0000884909 00000 n 
+0000885060 00000 n 
+0000885211 00000 n 
+0000885362 00000 n 
+0000885513 00000 n 
+0000885664 00000 n 
+0000885815 00000 n 
+0000885966 00000 n 
+0000886116 00000 n 
+0000886264 00000 n 
+0000886413 00000 n 
+0000890835 00000 n 
+0000890985 00000 n 
+0000886623 00000 n 
+0000865847 00000 n 
+0000863067 00000 n 
+0000886562 00000 n 
+0000891135 00000 n 
+0000891285 00000 n 
+0000891436 00000 n 
+0000891587 00000 n 
+0000891737 00000 n 
+0000891887 00000 n 
+0000892038 00000 n 
+0000892189 00000 n 
+0000892337 00000 n 
+0000892485 00000 n 
+0000892636 00000 n 
+0000892787 00000 n 
+0000892937 00000 n 
+0000893088 00000 n 
+0000893239 00000 n 
+0000893390 00000 n 
+0000893541 00000 n 
+0000893692 00000 n 
+0000893842 00000 n 
+0000893993 00000 n 
+0000894144 00000 n 
+0000894295 00000 n 
+0000894446 00000 n 
+0000894597 00000 n 
+0000894748 00000 n 
+0000894898 00000 n 
+0000895049 00000 n 
+0000895200 00000 n 
+0000895351 00000 n 
+0000895502 00000 n 
+0000895653 00000 n 
+0000895804 00000 n 
+0000895955 00000 n 
+0000896106 00000 n 
+0000896257 00000 n 
+0000896408 00000 n 
+0000896556 00000 n 
+0000896707 00000 n 
+0000896858 00000 n 
+0000897009 00000 n 
+0000897160 00000 n 
+0000897310 00000 n 
+0000897460 00000 n 
+0000897611 00000 n 
+0000897762 00000 n 
+0000897913 00000 n 
+0000898063 00000 n 
+0000898214 00000 n 
+0000898364 00000 n 
+0000898515 00000 n 
+0000898666 00000 n 
+0000898817 00000 n 
+0000898966 00000 n 
+0000899116 00000 n 
+0000899267 00000 n 
+0000899418 00000 n 
+0000899568 00000 n 
+0000899719 00000 n 
+0000899870 00000 n 
+0000900021 00000 n 
+0000900170 00000 n 
+0000900321 00000 n 
+0000900472 00000 n 
+0000900623 00000 n 
+0000900774 00000 n 
+0000900925 00000 n 
+0000901076 00000 n 
+0000901227 00000 n 
+0000901378 00000 n 
+0000901529 00000 n 
+0000901680 00000 n 
+0000901831 00000 n 
+0000901982 00000 n 
+0000902133 00000 n 
+0000902284 00000 n 
+0000902434 00000 n 
+0000902580 00000 n 
+0000902729 00000 n 
+0000902878 00000 n 
+0000903027 00000 n 
+0000903178 00000 n 
+0000903329 00000 n 
+0000903480 00000 n 
+0000903631 00000 n 
+0000903782 00000 n 
+0000903930 00000 n 
+0000904081 00000 n 
+0000904232 00000 n 
+0000904383 00000 n 
+0000904533 00000 n 
+0000904684 00000 n 
+0000904835 00000 n 
+0000904985 00000 n 
+0000905136 00000 n 
+0000905287 00000 n 
+0000905437 00000 n 
+0000905588 00000 n 
+0000905739 00000 n 
+0000905890 00000 n 
+0000906040 00000 n 
+0000906191 00000 n 
+0000906341 00000 n 
+0000906492 00000 n 
+0000906643 00000 n 
+0000906794 00000 n 
+0000906945 00000 n 
+0000907096 00000 n 
+0000907246 00000 n 
+0000907397 00000 n 
+0000907548 00000 n 
+0000907699 00000 n 
+0000907848 00000 n 
+0000907998 00000 n 
+0000908149 00000 n 
+0000908299 00000 n 
+0000908449 00000 n 
+0000908598 00000 n 
+0000908748 00000 n 
+0000908898 00000 n 
+0000909047 00000 n 
+0000909196 00000 n 
+0000909347 00000 n 
+0000909497 00000 n 
+0000909648 00000 n 
+0000909799 00000 n 
+0000909950 00000 n 
+0000910101 00000 n 
+0000910252 00000 n 
+0000910400 00000 n 
+0000910551 00000 n 
+0000910702 00000 n 
+0000910853 00000 n 
+0000911004 00000 n 
+0000911155 00000 n 
+0000911306 00000 n 
+0000911457 00000 n 
+0000911608 00000 n 
+0000911759 00000 n 
+0000911910 00000 n 
+0000912061 00000 n 
+0000912212 00000 n 
+0000912362 00000 n 
+0000912512 00000 n 
+0000912660 00000 n 
+0000912809 00000 n 
+0000912958 00000 n 
+0000913167 00000 n 
+0000889375 00000 n 
+0000886734 00000 n 
+0000913106 00000 n 
+0001142339 00000 n 
+0000917229 00000 n 
+0000917379 00000 n 
+0000917529 00000 n 
+0000917679 00000 n 
+0000917830 00000 n 
+0000917981 00000 n 
+0000918132 00000 n 
+0000918282 00000 n 
+0000918433 00000 n 
+0000918584 00000 n 
+0000918734 00000 n 
+0000918883 00000 n 
+0000919034 00000 n 
+0000919185 00000 n 
+0000919336 00000 n 
+0000919486 00000 n 
+0000919637 00000 n 
+0000919788 00000 n 
+0000919939 00000 n 
+0000920089 00000 n 
+0000920240 00000 n 
+0000920391 00000 n 
+0000920540 00000 n 
+0000920690 00000 n 
+0000920840 00000 n 
+0000920989 00000 n 
+0000921138 00000 n 
+0000921289 00000 n 
+0000921440 00000 n 
+0000921590 00000 n 
+0000921740 00000 n 
+0000921891 00000 n 
+0000922042 00000 n 
+0000922193 00000 n 
+0000922344 00000 n 
+0000922495 00000 n 
+0000922646 00000 n 
+0000922796 00000 n 
+0000922947 00000 n 
+0000923098 00000 n 
+0000923248 00000 n 
+0000923397 00000 n 
+0000923548 00000 n 
+0000923698 00000 n 
+0000923849 00000 n 
+0000923999 00000 n 
+0000924150 00000 n 
+0000924301 00000 n 
+0000924452 00000 n 
+0000924602 00000 n 
+0000924753 00000 n 
+0000924904 00000 n 
+0000925055 00000 n 
+0000925205 00000 n 
+0000925356 00000 n 
+0000925506 00000 n 
+0000925657 00000 n 
+0000925808 00000 n 
+0000925959 00000 n 
+0000926109 00000 n 
+0000926258 00000 n 
+0000926407 00000 n 
+0000926555 00000 n 
+0000926704 00000 n 
+0000926853 00000 n 
+0000927002 00000 n 
+0000927153 00000 n 
+0000927303 00000 n 
+0000927454 00000 n 
+0000927605 00000 n 
+0000927755 00000 n 
+0000927906 00000 n 
+0000928057 00000 n 
+0000928208 00000 n 
+0000928359 00000 n 
+0000928509 00000 n 
+0000928659 00000 n 
+0000928809 00000 n 
+0000928960 00000 n 
+0000929110 00000 n 
+0000929260 00000 n 
+0000929411 00000 n 
+0000929561 00000 n 
+0000929711 00000 n 
+0000929859 00000 n 
+0000930008 00000 n 
+0000930157 00000 n 
+0000930305 00000 n 
+0000930455 00000 n 
+0000930605 00000 n 
+0000930755 00000 n 
+0000930905 00000 n 
+0000931055 00000 n 
+0000931206 00000 n 
+0000931357 00000 n 
+0000931507 00000 n 
+0000931658 00000 n 
+0000931809 00000 n 
+0000931960 00000 n 
+0000932111 00000 n 
+0000932261 00000 n 
+0000932412 00000 n 
+0000932563 00000 n 
+0000932714 00000 n 
+0000932864 00000 n 
+0000933015 00000 n 
+0000933165 00000 n 
+0000933316 00000 n 
+0000933467 00000 n 
+0000933618 00000 n 
+0000933769 00000 n 
+0000933920 00000 n 
+0000934071 00000 n 
+0000934222 00000 n 
+0000934373 00000 n 
+0000934524 00000 n 
+0000934675 00000 n 
+0000934826 00000 n 
+0000934978 00000 n 
+0000935130 00000 n 
+0000935280 00000 n 
+0000935429 00000 n 
+0000935580 00000 n 
+0000935729 00000 n 
+0000935880 00000 n 
+0000936031 00000 n 
+0000936182 00000 n 
+0000936332 00000 n 
+0000936483 00000 n 
+0000936634 00000 n 
+0000936785 00000 n 
+0000936934 00000 n 
+0000937084 00000 n 
+0000937233 00000 n 
+0000937384 00000 n 
+0000937534 00000 n 
+0000937685 00000 n 
+0000937836 00000 n 
+0000937987 00000 n 
+0000938138 00000 n 
+0000938289 00000 n 
+0000938438 00000 n 
+0000938586 00000 n 
+0000938734 00000 n 
+0000938881 00000 n 
+0000943586 00000 n 
+0000939091 00000 n 
+0000915796 00000 n 
+0000913278 00000 n 
+0000939030 00000 n 
+0000943737 00000 n 
+0000943887 00000 n 
+0000944038 00000 n 
+0000944188 00000 n 
+0000944339 00000 n 
+0000944488 00000 n 
+0000944639 00000 n 
+0000944790 00000 n 
+0000944940 00000 n 
+0000945091 00000 n 
+0000945242 00000 n 
+0000945391 00000 n 
+0000945540 00000 n 
+0000945691 00000 n 
+0000945842 00000 n 
+0000945993 00000 n 
+0000946144 00000 n 
+0000946294 00000 n 
+0000946445 00000 n 
+0000946594 00000 n 
+0000946745 00000 n 
+0000946896 00000 n 
+0000947047 00000 n 
+0000947197 00000 n 
+0000947348 00000 n 
+0000947497 00000 n 
+0000947648 00000 n 
+0000947799 00000 n 
+0000947949 00000 n 
+0000948100 00000 n 
+0000948251 00000 n 
+0000948401 00000 n 
+0000948552 00000 n 
+0000948703 00000 n 
+0000948854 00000 n 
+0000949005 00000 n 
+0000949156 00000 n 
+0000949307 00000 n 
+0000949456 00000 n 
+0000949608 00000 n 
+0000949760 00000 n 
+0000949912 00000 n 
+0000950064 00000 n 
+0000950216 00000 n 
+0000950368 00000 n 
+0000950520 00000 n 
+0000950672 00000 n 
+0000950823 00000 n 
+0000950974 00000 n 
+0000951125 00000 n 
+0000951275 00000 n 
+0000951426 00000 n 
+0000951576 00000 n 
+0000951723 00000 n 
+0000951872 00000 n 
+0000952021 00000 n 
+0000952170 00000 n 
+0000952321 00000 n 
+0000952472 00000 n 
+0000952623 00000 n 
+0000952774 00000 n 
+0000952925 00000 n 
+0000953076 00000 n 
+0000953227 00000 n 
+0000953376 00000 n 
+0000953527 00000 n 
+0000953678 00000 n 
+0000953829 00000 n 
+0000953980 00000 n 
+0000954131 00000 n 
+0000954282 00000 n 
+0000954432 00000 n 
+0000954581 00000 n 
+0000954731 00000 n 
+0000954882 00000 n 
+0000955033 00000 n 
+0000955179 00000 n 
+0000955330 00000 n 
+0000955481 00000 n 
+0000955632 00000 n 
+0000955782 00000 n 
+0000955932 00000 n 
+0000956083 00000 n 
+0000956234 00000 n 
+0000956385 00000 n 
+0000956536 00000 n 
+0000956686 00000 n 
+0000956836 00000 n 
+0000956986 00000 n 
+0000957135 00000 n 
+0000957286 00000 n 
+0000957436 00000 n 
+0000957585 00000 n 
+0000957735 00000 n 
+0000957886 00000 n 
+0000958037 00000 n 
+0000958188 00000 n 
+0000958339 00000 n 
+0000958489 00000 n 
+0000958640 00000 n 
+0000958791 00000 n 
+0000958942 00000 n 
+0000959092 00000 n 
+0000959241 00000 n 
+0000959390 00000 n 
+0000959541 00000 n 
+0000959691 00000 n 
+0000959841 00000 n 
+0000959992 00000 n 
+0000960143 00000 n 
+0000960294 00000 n 
+0000960445 00000 n 
+0000960595 00000 n 
+0000960743 00000 n 
+0000962682 00000 n 
+0000962833 00000 n 
+0000960953 00000 n 
+0000942423 00000 n 
+0000939202 00000 n 
+0000960892 00000 n 
+0000962984 00000 n 
+0000963135 00000 n 
+0000963285 00000 n 
+0000963437 00000 n 
+0000963588 00000 n 
+0000963740 00000 n 
+0000963892 00000 n 
+0000964044 00000 n 
+0000964196 00000 n 
+0000964348 00000 n 
+0000964500 00000 n 
+0000964651 00000 n 
+0000964801 00000 n 
+0000964951 00000 n 
+0000965103 00000 n 
+0000965255 00000 n 
+0000965407 00000 n 
+0000965559 00000 n 
+0000965711 00000 n 
+0000965863 00000 n 
+0000966015 00000 n 
+0000966167 00000 n 
+0000966319 00000 n 
+0000966468 00000 n 
+0000966619 00000 n 
+0000966769 00000 n 
+0000966921 00000 n 
+0000967073 00000 n 
+0000967224 00000 n 
+0000967375 00000 n 
+0000967526 00000 n 
+0000967676 00000 n 
+0000967827 00000 n 
+0000967974 00000 n 
+0000968184 00000 n 
+0000962230 00000 n 
+0000961064 00000 n 
+0000968123 00000 n 
+0000968295 00000 n 
+0000968429 00000 n 
+0000968575 00000 n 
+0000968601 00000 n 
+0000969260 00000 n 
+0000969771 00000 n 
+0000969797 00000 n 
+0000970106 00000 n 
+0000970440 00000 n 
+0000970922 00000 n 
+0000971605 00000 n 
+0000971747 00000 n 
+0000972389 00000 n 
+0000973084 00000 n 
+0000973111 00000 n 
+0000973581 00000 n 
+0000973965 00000 n 
+0000974607 00000 n 
+0000975298 00000 n 
+0000975942 00000 n 
+0000976454 00000 n 
+0000976873 00000 n 
+0000977350 00000 n 
+0000977840 00000 n 
+0000992327 00000 n 
+0000992780 00000 n 
+0001004739 00000 n 
+0001005173 00000 n 
+0001008617 00000 n 
+0001008862 00000 n 
+0001015225 00000 n 
+0001015505 00000 n 
+0001019084 00000 n 
+0001019509 00000 n 
+0001031833 00000 n 
+0001032238 00000 n 
+0001034659 00000 n 
+0001034885 00000 n 
+0001041299 00000 n 
+0001041584 00000 n 
+0001058594 00000 n 
+0001059172 00000 n 
+0001066212 00000 n 
+0001066523 00000 n 
+0001071459 00000 n 
+0001071755 00000 n 
+0001073455 00000 n 
+0001073679 00000 n 
+0001075369 00000 n 
+0001075591 00000 n 
+0001079123 00000 n 
+0001079403 00000 n 
+0001086445 00000 n 
+0001086765 00000 n 
+0001089271 00000 n 
+0001089502 00000 n 
+0001094278 00000 n 
+0001094532 00000 n 
+0001098354 00000 n 
+0001098748 00000 n 
+0001100492 00000 n 
+0001100747 00000 n 
+0001111180 00000 n 
+0001111495 00000 n 
+0001117996 00000 n 
+0001118269 00000 n 
+0001133391 00000 n 
+0001133955 00000 n 
+0001135707 00000 n 
+0001142446 00000 n 
+0001142566 00000 n 
+0001142690 00000 n 
+0001142816 00000 n 
+0001142942 00000 n 
+0001143032 00000 n 
+0001143133 00000 n 
+0001152188 00000 n 
+0001152366 00000 n 
+0001152537 00000 n 
+0001152707 00000 n 
+0001152879 00000 n 
+0001153053 00000 n 
+0001153227 00000 n 
+0001153404 00000 n 
+0001153579 00000 n 
+0001153756 00000 n 
+0001153931 00000 n 
+0001154108 00000 n 
+0001154283 00000 n 
+0001154467 00000 n 
+0001154657 00000 n 
+0001154842 00000 n 
+0001155056 00000 n 
+0001155275 00000 n 
+0001155490 00000 n 
+0001155722 00000 n 
+0001155937 00000 n 
+0001156142 00000 n 
+0001156327 00000 n 
+0001156512 00000 n 
+0001156695 00000 n 
+0001156880 00000 n 
+0001157063 00000 n 
+0001157248 00000 n 
+0001157431 00000 n 
+0001157616 00000 n 
+0001157799 00000 n 
+0001157973 00000 n 
+0001158142 00000 n 
+0001158311 00000 n 
+0001158482 00000 n 
+0001158654 00000 n 
+0001158831 00000 n 
+0001159006 00000 n 
+0001159183 00000 n 
+0001159358 00000 n 
+0001159535 00000 n 
+0001159710 00000 n 
+0001159887 00000 n 
+0001160061 00000 n 
+0001160235 00000 n 
+0001160412 00000 n 
+0001160586 00000 n 
+0001160760 00000 n 
+0001160961 00000 n 
+0001161178 00000 n 
+0001161393 00000 n 
+0001161610 00000 n 
+0001161824 00000 n 
+0001162038 00000 n 
+0001162250 00000 n 
+0001162453 00000 n 
+0001162656 00000 n 
+0001162856 00000 n 
+0001163059 00000 n 
+0001163262 00000 n 
+0001163465 00000 n 
+0001163665 00000 n 
+0001163866 00000 n 
+0001164075 00000 n 
+0001164282 00000 n 
+0001164491 00000 n 
+0001164698 00000 n 
+0001164907 00000 n 
+0001165114 00000 n 
+0001165323 00000 n 
+0001165522 00000 n 
+0001165719 00000 n 
+0001165922 00000 n 
+0001166125 00000 n 
+0001166328 00000 n 
+0001166531 00000 n 
+0001166742 00000 n 
+0001166978 00000 n 
+0001167221 00000 n 
+0001167464 00000 n 
+0001167707 00000 n 
+0001167950 00000 n 
+0001168211 00000 n 
+0001168494 00000 n 
+0001168705 00000 n 
+0001168872 00000 n 
+0001168989 00000 n 
+0001169105 00000 n 
+0001169225 00000 n 
+0001169354 00000 n 
+0001169472 00000 n 
+0001169589 00000 n 
+0001169705 00000 n 
+0001169825 00000 n 
+0001169950 00000 n 
+0001170074 00000 n 
+0001170197 00000 n 
+0001170321 00000 n 
+0001170450 00000 n 
+0001170577 00000 n 
+0001170652 00000 n 
+0001170770 00000 n 
+0001170890 00000 n 
+0001170985 00000 n 
+0001171078 00000 n 
+0001171118 00000 n 
+0001171305 00000 n 
+trailer
+<< /Size 2528
+/Root 2526 0 R
+/Info 2527 0 R
+/ID [<4F64F0972A15C22760FB37EB54DC2CC3> <4F64F0972A15C22760FB37EB54DC2CC3>] >>
+startxref
+1171637
+%%EOF
diff --git a/examples/arkode/CXX_parallel/CMakeLists.txt b/examples/arkode/CXX_parallel/CMakeLists.txt
new file mode 100644
index 0000000..8f51139
--- /dev/null
+++ b/examples/arkode/CXX_parallel/CMakeLists.txt
@@ -0,0 +1,141 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for ARKODE C++ parallel examples
+
+
+# Add variable ARKODE_examples with the names of the parallel ARKODE examples
+
+SET(ARKODE_examples
+  ark_heat2D
+  )
+
+# Add variable ARKODE_extras with the names of auxiliary files to install
+
+SET(ARKODE_extras
+  plot_heat2D.py
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the C compiler to the MPICC script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPICXX)
+  # use MPI_MPICXX as the compiler
+  SET(CMAKE_CXX_COMPILER ${MPI_MPICXX})
+  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX -DLAM_BUILDING")
+ELSE(MPI_MPICXX)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICXX)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${ARKODE_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each ARKODE example
+
+FOREACH(example ${ARKODE_examples})
+  ADD_EXECUTABLE(${example} ${example}.cpp)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPICXX)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPICXX)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.cpp ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${ARKODE_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_parallel)
+
+  # Install the extra files
+  FOREACH(extrafile ${ARKODE_extras})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_parallel)
+  ENDFOREACH(extrafile ${ARKODE_extras})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "ARKODE")
+  SET(SOLVER_LIB "sundials_arkode")
+  LIST2STRING(ARKODE_examples EXAMPLES)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_CXX_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/CXX_parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/arkode/CXX_parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_CXX_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/CXX_parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/arkode/CXX_parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_parallel
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/arkode/CXX_parallel/README b/examples/arkode/CXX_parallel/README
new file mode 100644
index 0000000..5c2f8b4
--- /dev/null
+++ b/examples/arkode/CXX_parallel/README
@@ -0,0 +1,55 @@
+List of parallel ARKODE C++ examples
+
+  ark_heat2D : 2-D diffusion (PCG with Jacobi preconditioner)
+
+Sample results:
+
+  The example output was produced by running with 4 MPI processes:
+  
+      mpiexec -n 4 ./ark_heat2D
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/arkode/CXX_parallel/ark_heat2D.cpp b/examples/arkode/CXX_parallel/ark_heat2D.cpp
new file mode 100644
index 0000000..3d9528b
--- /dev/null
+++ b/examples/arkode/CXX_parallel/ark_heat2D.cpp
@@ -0,0 +1,813 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates a simple anisotropic 2D heat 
+ * equation,
+ *    u_t = kx*u_xx + ky*u_yy + h,
+ * for t in [0, 10], (x,y) in [0, 1]^2, with initial conditions
+ *    u(0,x,y) =  0,
+ * stationary boundary conditions, i.e. 
+ *    u_t(t,0,y) = u_t(t,1,y) = u_t(t,x,0) = u_t(t,x,1) = 0,
+ * and a heat source of the form
+ *    h(x,y) = sin(pi*x)*sin(2*pi*y).
+ *
+ * Under this setup, the problem has an analytical solution:
+ *    u(t,x,y) = a(t)*sin(pi*x)*sin(2*pi*y), where
+ *    a(t) = (1 - exp(-(kx+4*ky)*pi^2*t)) / ((kx+4*ky)*pi^2).
+ * 
+ * The spatial derivatives are computed using second-order 
+ * centered differences, with the data distributed over nx*ny
+ * points on a uniform spatial grid.
+ *
+ * This program solves the problem with a DIRK method.  This 
+ * employs a Newton iteration with the PCG iterative linear solver, 
+ * which itself uses a Jacobi preconditioner.  The example uses the 
+ * built-in finite-difference Jacobian-vector product routine, but 
+ * supplies both the RHS and preconditioner setup/solve functions.
+ *
+ * 20 outputs are printed at equal intervals, and run statistics 
+ * are printed at the end.
+ *---------------------------------------------------------------*/
+
+// Header files 
+#include <stdio.h>
+#include <iostream>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include "arkode/arkode.h"            // prototypes for ARKode fcts., consts. 
+#include "nvector/nvector_parallel.h" // parallel N_Vector types, fcts., macros 
+#include "arkode/arkode_pcg.h"        // prototype for ARKPcg solver 
+#include "sundials/sundials_types.h"  // def. of type 'realtype' 
+#include "mpi.h"                      // MPI header file
+
+using namespace std;
+
+// accessor macros between (x,y) location and 1D NVector array
+#define IDX(x,y,n) ((n)*(y)+(x))
+#define PI RCONST(3.1415926535897932)
+#define ONE RCONST(1.0)
+#define TWO RCONST(2.0)
+
+// user data structure 
+typedef struct {
+  long int nx;          // global number of x grid points 
+  long int ny;          // global number of y grid points
+  long int is;          // global x indices of this subdomain
+  long int ie;
+  long int js;          // global y indices of this subdomain
+  long int je;
+  long int nxl;         // local number of x grid points 
+  long int nyl;         // local number of y grid points 
+  realtype dx;          // x-directional mesh spacing 
+  realtype dy;          // y-directional mesh spacing 
+  realtype kx;          // x-directional diffusion coefficient 
+  realtype ky;          // y-directional diffusion coefficient 
+  N_Vector h;           // heat source vector
+  N_Vector d;           // inverse of Jacobian diagonal
+  MPI_Comm comm;        // communicator object
+  int myid;             // MPI process ID
+  int nprocs;           // total number of MPI processes
+  bool HaveBdry[2][2];  // flags denoting if on physical boundary
+  realtype *Erecv;      // receive buffers for neighbor exchange
+  realtype *Wrecv;
+  realtype *Nrecv;
+  realtype *Srecv;
+  realtype *Esend;      // send buffers for neighbor exchange
+  realtype *Wsend;
+  realtype *Nsend;
+  realtype *Ssend;
+} UserData;
+
+// User-supplied Functions Called by the Solver 
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int PSet(realtype t, N_Vector y, N_Vector fy, booleantype jok, 
+		booleantype *jcurPtr, realtype gamma, void *user_data,
+		N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int PSol(realtype t, N_Vector y, N_Vector fy, N_Vector r, 
+		N_Vector z, realtype gamma, realtype delta, int lr, 
+		void *user_data, N_Vector tmp);
+
+// Private functions 
+//    checks function return values 
+static int check_flag(void *flagvalue, const string funcname, int opt);
+//    sets default values into UserData structure
+static int InitUserData(UserData *udata);
+//    sets up parallel decomposition
+static int SetupDecomp(UserData *udata);
+//    performs neighbor exchange
+static int Exchange(N_Vector y, UserData *udata);
+//    frees memory allocated within UserData
+static int FreeUserData(UserData *udata);
+
+// Main Program 
+int main(int argc, char* argv[]) {
+
+  // general problem parameters 
+  realtype T0 = RCONST(0.0);   // initial time 
+  realtype Tf = RCONST(0.3);   // final time 
+  int Nt = 20;                 // total number of output times 
+  long int nx = 60;            // spatial mesh size
+  long int ny = 120;
+  realtype kx = 0.5;           // heat conductivity coefficients
+  realtype ky = 0.75;
+  realtype rtol = 1.e-5;       // relative and absolute tolerances
+  realtype atol = 1.e-10;
+  UserData *udata = NULL;
+  realtype *data;
+  long int N, Ntot, i, j;
+
+  // general problem variables 
+  int flag;                      // reusable error-checking flag 
+  int myid;                      // MPI process ID
+  N_Vector y = NULL;             // empty vector for storing solution 
+  void *arkode_mem = NULL;       // empty ARKode memory structure 
+
+  // initialize MPI
+  flag = MPI_Init(&argc, &argv);
+  if (check_flag(&flag, "MPI_Init", 1)) return 1;
+  flag = MPI_Comm_rank(MPI_COMM_WORLD, &myid);
+  if (check_flag(&flag, "MPI_Comm_rank", 1)) return 1;
+
+  // allocate and fill udata structure 
+  udata = new UserData;
+  flag = InitUserData(udata);
+  if (check_flag(&flag, "InitUserData", 1)) return 1;
+  udata->nx = nx;
+  udata->ny = ny;
+  udata->kx = kx;
+  udata->ky = ky;
+  udata->dx = RCONST(1.0)/(1.0*nx-1.0);   // x mesh spacing 
+  udata->dy = RCONST(1.0)/(1.0*ny-1.0);   // y mesh spacing 
+
+  // Set up parallel decomposition
+  flag = SetupDecomp(udata);
+  if (check_flag(&flag, "SetupDecomp", 1)) return 1;
+
+  // Initial problem output 
+  bool outproc = (udata->myid == 0);
+  if (outproc) {
+    cout << "\n2D Heat PDE test problem:\n";
+    cout << "   nprocs = " << udata->nprocs << "\n";
+    cout << "   nx = " << udata->nx << "\n";
+    cout << "   ny = " << udata->ny << "\n";
+    cout << "   kx = " << udata->kx << "\n";
+    cout << "   ky = " << udata->ky << "\n";
+    cout << "   rtol = " << rtol << "\n";
+    cout << "   atol = " << atol << "\n";
+    cout << "   nxl (proc 0) = " << udata->nxl << "\n";
+    cout << "   nyl (proc 0) = " << udata->nyl << "\n\n";
+  }
+
+  // Initialize data structures 
+  N = (udata->nxl)*(udata->nyl);
+  Ntot = nx*ny;
+  y = N_VNew_Parallel(udata->comm, N, Ntot);         // Create parallel vector for solution 
+  if (check_flag((void *) y, "N_VNew_Parallel", 0)) return 1;
+  N_VConst(0.0, y);                                  // Set initial conditions 
+  udata->h = N_VNew_Parallel(udata->comm, N, Ntot);  // Create vector for heat source
+  if (check_flag((void *) udata->h, "N_VNew_Parallel", 0)) return 1;
+  udata->d = N_VNew_Parallel(udata->comm, N, Ntot);  // Create vector for Jacobian diagonal
+  if (check_flag((void *) udata->d, "N_VNew_Parallel", 0)) return 1;
+  arkode_mem = ARKodeCreate();                       // Create the solver memory 
+  if (check_flag((void *) arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  // fill in the heat source array
+  data = N_VGetArrayPointer(udata->h);
+  for (j=0; j<udata->nyl; j++)
+    for (i=0; i<udata->nxl; i++)
+      data[IDX(i,j,udata->nxl)] = sin(PI*(udata->is+i)*udata->dx) 
+                                * sin(TWO*PI*(udata->js+j)*udata->dy);
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  // Set routines 
+  flag = ARKodeSetUserData(arkode_mem, (void *) udata);   // Pass udata to user functions 
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSetNonlinConvCoef(arkode_mem, 1.e-7);      // Update solver convergence coeff.
+  if (check_flag(&flag, "ARKodeSetNonlinConvCoef", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, rtol, atol);      // Specify tolerances 
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  // Linear solver specification 
+  flag = ARKPcg(arkode_mem, 1, 20);                           // Specify the PCG solver 
+  if (check_flag(&flag, "ARKPcg", 1)) return 1;
+  flag = ARKSpilsSetPreconditioner(arkode_mem, PSet, PSol);   // Specify the Preconditoner
+  if (check_flag(&flag, "ARKSpilsSetPreconditioner", 1)) return 1;
+
+  // Specify linearly implicit RHS, with non-time-dependent preconditioner
+  flag = ARKodeSetLinear(arkode_mem, 0);
+  if (check_flag(&flag, "ARKodeSetLinear", 1)) return 1;
+
+  // Each processor outputs subdomain information
+  char outname[100];
+  sprintf(outname, "heat2d_subdomain.%03i.txt", udata->myid);
+  FILE *UFID = fopen(outname,"w");
+  fprintf(UFID, "%li  %li  %li  %li  %li  %li\n", 
+	  udata->nx, udata->ny, udata->is, udata->ie, udata->js, udata->je);
+  fclose(UFID);
+
+  // Open output streams for results, access data array 
+  sprintf(outname, "heat2d.%03i.txt", udata->myid);
+  UFID = fopen(outname,"w");
+  data = N_VGetArrayPointer(y);
+
+  // output initial condition to disk 
+  for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[i]);
+  fprintf(UFID,"\n");
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  realtype t = T0;
+  realtype dTout = (Tf-T0)/Nt;
+  realtype tout = T0+dTout;
+  realtype urms = sqrt(N_VDotProd(y,y)/nx/ny);
+  if (outproc) {
+    cout << "        t      ||u||_rms\n";
+    cout << "   ----------------------\n";
+    printf("  %10.6f  %10.6f\n", t, urms);
+  }
+  int iout;
+  for (iout=0; iout<Nt; iout++) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);         // call integrator 
+    if (check_flag(&flag, "ARKode", 1)) break;
+    urms = sqrt(N_VDotProd(y,y)/nx/ny);
+    if (outproc)  printf("  %10.6f  %10.6f\n", t, urms);        // print solution stats 
+    if (flag >= 0) {                                            // successful solve: update output time
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                                    // unsuccessful solve: break 
+      if (outproc)  
+	cerr << "Solver failure, stopping integration\n";
+      break;
+    }
+
+    // output results to disk 
+    for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[i]);
+    fprintf(UFID,"\n");
+  }
+  if (outproc)  cout << "   ----------------------\n";
+  fclose(UFID);
+
+  // Print some final statistics 
+  long int nst, nst_a, nfe, nfi, nsetups, nli, nJv, nlcf, nni, ncfn, netf, npe, nps;
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  if (check_flag(&flag, "ARKodeGetNumSteps", 1)) return 1;
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) return 1;
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) return 1;
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  if (check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1)) return 1;
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) return 1;
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) return 1;
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  if (check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1)) return 1;
+  flag = ARKSpilsGetNumLinIters(arkode_mem, &nli);
+  if (check_flag(&flag, "ARKSpilsGetNumLinIters", 1)) return 1;
+  flag = ARKSpilsGetNumJtimesEvals(arkode_mem, &nJv);
+  if (check_flag(&flag, "ARKSpilsGetNumJtimesEvals", 1)) return 1;
+  flag = ARKSpilsGetNumConvFails(arkode_mem, &nlcf);
+  if (check_flag(&flag, "ARKSpilsGetNumConvFails", 1)) return 1;
+  flag = ARKSpilsGetNumPrecEvals(arkode_mem, &npe);
+  if (check_flag(&flag, "ARKSpilsGetNumPrecEvals", 1)) return 1;
+  flag = ARKSpilsGetNumPrecSolves(arkode_mem, &nps);
+
+  if (outproc) {
+    cout << "\nFinal Solver Statistics:\n";
+    cout << "   Internal solver steps = " << nst << " (attempted = " << nst_a << ")\n";
+    cout << "   Total RHS evals:  Fe = " << nfe << ",  Fi = " << nfi << "\n";
+    cout << "   Total linear solver setups = " << nsetups << "\n";
+    cout << "   Total linear iterations = " << nli << "\n";
+    cout << "   Total number of Jacobian-vector products = " << nJv << "\n";
+    cout << "   Total number of Preconditioner setups = " << npe << "\n";
+    cout << "   Total number of Preconditioner solves = " << nps << "\n";
+    cout << "   Total number of linear solver convergence failures = " << nlcf << "\n";
+    cout << "   Total number of Newton iterations = " << nni << "\n";
+    cout << "   Total number of nonlinear solver convergence failures = " << ncfn << "\n";
+    cout << "   Total number of error test failures = " << netf << "\n";
+  }
+
+  // Clean up and return with successful completion 
+  N_VDestroy_Parallel(y);        // Free vectors 
+  N_VDestroy_Parallel(udata->h);
+  N_VDestroy_Parallel(udata->d);
+  FreeUserData(udata);         // Free user data 
+  delete udata;       
+  ARKodeFree(&arkode_mem);     // Free integrator memory 
+  flag = MPI_Finalize();       // Finalize MPI
+  return 0;
+}
+
+/*--------------------------------
+ * Functions called by the solver
+ *--------------------------------*/
+
+// f routine to compute the ODE RHS function f(t,y). 
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  N_VConst(0.0, ydot);                           // Initialize ydot to zero 
+  UserData *udata = (UserData *) user_data;      // access problem data 
+  long int nxl = udata->nxl;                     // set variable shortcuts 
+  long int nyl = udata->nyl;
+  realtype kx = udata->kx;
+  realtype ky = udata->ky;
+  realtype dx = udata->dx;
+  realtype dy = udata->dy;
+  realtype *Y = N_VGetArrayPointer(y);           // access data arrays 
+  if (check_flag((void *) Y, "N_VGetArrayPointer", 0)) return -1;
+  realtype *Ydot = N_VGetArrayPointer(ydot);
+  if (check_flag((void *) Ydot, "N_VGetArrayPointer", 0)) return -1;
+
+  // Exchange boundary data with neighbors
+  int ierr = Exchange(y, udata);
+  if (check_flag(&ierr, "Exchange", 1)) return -1;
+
+  // iterate over subdomain interior, computing approximation to RHS
+  realtype c1 = kx/dx/dx;
+  realtype c2 = ky/dy/dy;
+  realtype c3 = -TWO*(c1 + c2);
+  long int i, j;
+  for (j=1; j<nyl-1; j++)                        // diffusive terms
+    for (i=1; i<nxl-1; i++)
+      Ydot[IDX(i,j,nxl)] = c1*(Y[IDX(i-1,j,nxl)] + Y[IDX(i+1,j,nxl)])
+                         + c2*(Y[IDX(i,j-1,nxl)] + Y[IDX(i,j+1,nxl)])
+                         + c3*Y[IDX(i,j,nxl)];
+  
+  // iterate over subdomain boundaries (if not at overall domain boundary)
+  if (!udata->HaveBdry[0][0]) {    // West face
+    i=0;
+    for (j=1; j<nyl-1; j++)  
+      Ydot[IDX(i,j,nxl)] = c1*(udata->Wrecv[j]   + Y[IDX(i+1,j,nxl)])
+                         + c2*(Y[IDX(i,j-1,nxl)] + Y[IDX(i,j+1,nxl)])
+                         + c3*Y[IDX(i,j,nxl)];
+  }
+  if (!udata->HaveBdry[0][1]) {    // East face
+    i=nxl-1;
+    for (j=1; j<nyl-1; j++)  
+      Ydot[IDX(i,j,nxl)] = c1*(Y[IDX(i-1,j,nxl)] + udata->Erecv[j])
+                         + c2*(Y[IDX(i,j-1,nxl)] + Y[IDX(i,j+1,nxl)])
+                         + c3*Y[IDX(i,j,nxl)];
+  }
+  if (!udata->HaveBdry[1][0]) {    // South face
+    j=0;
+    for (i=1; i<nxl-1; i++)  
+      Ydot[IDX(i,j,nxl)] = c1*(Y[IDX(i-1,j,nxl)] + Y[IDX(i+1,j,nxl)])
+                         + c2*(udata->Srecv[i]   + Y[IDX(i,j+1,nxl)])
+                         + c3*Y[IDX(i,j,nxl)];
+  }
+  if (!udata->HaveBdry[1][1]) {    // West face
+    j=nyl-1;
+    for (i=1; i<nxl-1; i++)  
+      Ydot[IDX(i,j,nxl)] = c1*(Y[IDX(i-1,j,nxl)] + Y[IDX(i+1,j,nxl)])
+                         + c2*(Y[IDX(i,j-1,nxl)] + udata->Nrecv[i])
+                         + c3*Y[IDX(i,j,nxl)];
+  }
+  if (!udata->HaveBdry[0][0] && !udata->HaveBdry[1][0]) {  // South-West corner
+    i = 0; 
+    j = 0;
+    Ydot[IDX(i,j,nxl)] = c1*(udata->Wrecv[j] + Y[IDX(i+1,j,nxl)])
+                       + c2*(udata->Srecv[i] + Y[IDX(i,j+1,nxl)])
+                       + c3*Y[IDX(i,j,nxl)];
+  }
+  if (!udata->HaveBdry[0][0] && !udata->HaveBdry[1][1]) {  // North-West corner
+    i = 0; 
+    j = nyl-1;
+    Ydot[IDX(i,j,nxl)] = c1*(udata->Wrecv[j]   + Y[IDX(i+1,j,nxl)])
+                       + c2*(Y[IDX(i,j-1,nxl)] + udata->Nrecv[i])
+                       + c3*Y[IDX(i,j,nxl)];
+  }
+  if (!udata->HaveBdry[0][1] && !udata->HaveBdry[1][0]) {  // South-East corner
+    i = nxl-1; 
+    j = 0;
+    Ydot[IDX(i,j,nxl)] = c1*(Y[IDX(i-1,j,nxl)] + udata->Erecv[j])
+                       + c2*(udata->Srecv[i]   + Y[IDX(i,j+1,nxl)])
+                       + c3*Y[IDX(i,j,nxl)];
+  }
+  if (!udata->HaveBdry[0][1] && !udata->HaveBdry[1][1]) {  // North-East corner
+    i = nxl-1; 
+    j = nyl-1;
+    Ydot[IDX(i,j,nxl)] = c1*(Y[IDX(i-1,j,nxl)] + udata->Erecv[j])
+                       + c2*(Y[IDX(i,j-1,nxl)] + udata->Nrecv[i])
+                       + c3*Y[IDX(i,j,nxl)];
+  }
+
+  // add in heat source
+  N_VLinearSum(1.0, ydot, 1.0, udata->h, ydot);
+  return 0;                                      // Return with success 
+}
+
+// Preconditioner setup routine (fills inverse of Jacobian diagonal)
+static int PSet(realtype t, N_Vector y, N_Vector fy, booleantype jok, 
+		booleantype *jcurPtr, realtype gamma, void *user_data,
+		N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  UserData *udata = (UserData *) user_data;      // variable shortcuts 
+  realtype kx = udata->kx;
+  realtype ky = udata->ky;
+  realtype dx = udata->dx;
+  realtype dy = udata->dy;
+  realtype *diag = N_VGetArrayPointer(tmp1);  // access data arrays 
+  if (check_flag((void *) diag, "N_VGetArrayPointer", 0)) return -1;
+
+  // set all entries of tmp1 to the diagonal values of interior
+  // (since boundary RHS is 0, set boundary diagonals to the same)
+  realtype c = ONE + gamma*TWO*(kx/dx/dx + ky/dy/dy);
+  N_VConst(c, tmp1);
+  N_VInv(tmp1, udata->d);      // set d to inverse of diagonal
+  return 0;                    // Return with success 
+}
+
+// Preconditioner solve routine
+static int PSol(realtype t, N_Vector y, N_Vector fy, N_Vector r, 
+		N_Vector z, realtype gamma, realtype delta, int lr, 
+		void *user_data, N_Vector tmp)
+{
+  UserData *udata = (UserData *) user_data;  // access user_data structure
+  N_VProd(r, udata->d, z);                   // perform Jacobi iteration
+  return 0;                                  // Return with success 
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const string funcname, int opt)
+{
+  int *errflag;
+
+  // Check if SUNDIALS function returned NULL pointer - no memory allocated
+  if (opt == 0 && flagvalue == NULL) {
+    cerr << "\nSUNDIALS_ERROR: " << funcname << " failed - returned NULL pointer\n\n";
+    return 1; }
+
+  // Check if flag < 0
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      cerr << "\nSUNDIALS_ERROR: " << funcname << " failed with flag = " << *errflag << "\n\n";
+      return 1; 
+    }
+  }
+  
+  // Check if function returned NULL pointer - no memory allocated
+  else if (opt == 2 && flagvalue == NULL) {
+    cerr << "\nMEMORY_ERROR: " << funcname << " failed - returned NULL pointer\n\n";
+    return 1; }
+
+  return 0;
+}
+
+// Set up parallel decomposition
+static int SetupDecomp(UserData *udata)
+{
+  // check that this has not been called before
+  if (udata->Erecv != NULL || udata->Wrecv != NULL || 
+      udata->Srecv != NULL || udata->Nrecv != NULL) {
+    cerr << "SetupDecomp warning: parallel decomposition already set up\n";
+    return 1;
+  }
+
+  // get suggested parallel decomposition
+  int ierr, dims[] = {0, 0};
+  ierr = MPI_Comm_size(MPI_COMM_WORLD, &(udata->nprocs));
+  if (ierr != MPI_SUCCESS) {
+    cerr << "Error in MPI_Comm_size = " << ierr << "\n";
+    return -1;
+  }
+  ierr = MPI_Dims_create(udata->nprocs, 2, dims);
+  if (ierr != MPI_SUCCESS) {
+    cerr << "Error in MPI_Dims_create = " << ierr << "\n";
+    return -1;
+  }
+
+  // set up 2D Cartesian communicator
+  int periods[] = {0, 0};
+  ierr = MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, 0, &(udata->comm));
+  if (ierr != MPI_SUCCESS) {
+    cerr << "Error in MPI_Cart_create = " << ierr << "\n";
+    return -1;
+  }
+  ierr = MPI_Comm_rank(udata->comm, &(udata->myid));
+  if (ierr != MPI_SUCCESS) {
+    cerr << "Error in MPI_Comm_rank = " << ierr << "\n";
+    return -1;
+  }
+
+  // determine local extents
+  int coords[2];
+  ierr = MPI_Cart_get(udata->comm, 2, dims, periods, coords);
+  if (ierr != MPI_SUCCESS) {
+    cerr << "Error in MPI_Cart_get = " << ierr << "\n";
+    return -1;
+  }
+  udata->is = (udata->nx)*(coords[0])/(dims[0]);
+  udata->ie = (udata->nx)*(coords[0]+1)/(dims[0])-1;
+  udata->js = (udata->ny)*(coords[1])/(dims[1]);
+  udata->je = (udata->ny)*(coords[1]+1)/(dims[1])-1;
+  udata->nxl = (udata->ie)-(udata->is)+1;
+  udata->nyl = (udata->je)-(udata->js)+1;
+
+  // determine if I have neighbors, and allocate exchange buffers
+  udata->HaveBdry[0][0] = (udata->is == 0);
+  udata->HaveBdry[0][1] = (udata->ie == udata->nx-1);
+  udata->HaveBdry[1][0] = (udata->js == 0);
+  udata->HaveBdry[1][1] = (udata->je == udata->ny-1);
+  if (!udata->HaveBdry[0][0]) {
+    udata->Wrecv = new realtype[udata->nyl];
+    udata->Wsend = new realtype[udata->nyl];
+  }
+  if (!udata->HaveBdry[0][1]) {
+    udata->Erecv = new realtype[udata->nyl];
+    udata->Esend = new realtype[udata->nyl];
+  }
+  if (!udata->HaveBdry[1][0]) {
+    udata->Srecv = new realtype[udata->nxl];
+    udata->Ssend = new realtype[udata->nxl];
+  }
+  if (!udata->HaveBdry[1][1]) {
+    udata->Nrecv = new realtype[udata->nxl];
+    udata->Nsend = new realtype[udata->nxl];
+  }
+
+  return 0;     // return with success flag
+}
+
+// Perform neighbor exchange
+static int Exchange(N_Vector y, UserData *udata)
+{
+  // local variables
+  MPI_Request reqSW, reqSE, reqSS, reqSN, reqRW, reqRE, reqRS, reqRN;
+  MPI_Status stat;
+  int ierr, i, ipW=-1, ipE=-1, ipS=-1, ipN=-1;
+  int coords[2], dims[2], periods[2], nbcoords[2];
+  int nyl = udata->nyl;
+  int nxl = udata->nxl;
+
+  // access data array
+  realtype *Y = N_VGetArrayPointer(y);
+  if (check_flag((void *) Y, "N_VGetArrayPointer", 0)) return -1;
+
+  // MPI equivalent of realtype type
+  #if defined(SUNDIALS_SINGLE_PRECISION)
+  #define REALTYPE_MPI_TYPE MPI_FLOAT
+  #elif defined(SUNDIALS_DOUBLE_PRECISION)
+  #define REALTYPE_MPI_TYPE MPI_DOUBLE
+  #elif defined(SUNDIALS_EXTENDED_PRECISION)
+  #define REALTYPE_MPI_TYPE MPI_LONG_DOUBLE
+  #endif
+
+  // MPI neighborhood information
+  ierr = MPI_Cart_get(udata->comm, 2, dims, periods, coords);
+  if (ierr != MPI_SUCCESS) {
+    cerr << "Error in MPI_Cart_get = " << ierr << "\n";
+    return -1;
+  }
+  if (!udata->HaveBdry[0][0]) {
+    nbcoords[0] = coords[0]-1; 
+    nbcoords[1] = coords[1];
+    ierr = MPI_Cart_rank(udata->comm, nbcoords, &ipW);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Cart_rank = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[0][1]) {
+    nbcoords[0] = coords[0]+1; 
+    nbcoords[1] = coords[1];
+    ierr = MPI_Cart_rank(udata->comm, nbcoords, &ipE);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Cart_rank = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[1][0]) {
+    nbcoords[0] = coords[0]; 
+    nbcoords[1] = coords[1]-1;
+    ierr = MPI_Cart_rank(udata->comm, nbcoords, &ipS);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Cart_rank = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[1][1]) {
+    nbcoords[0] = coords[0]; 
+    nbcoords[1] = coords[1]+1;
+    ierr = MPI_Cart_rank(udata->comm, nbcoords, &ipN);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Cart_rank = " << ierr << "\n";
+      return -1;
+    }
+  }
+  
+  // open Irecv buffers
+  if (!udata->HaveBdry[0][0]) {
+    ierr = MPI_Irecv(udata->Wrecv, udata->nyl, REALTYPE_MPI_TYPE, ipW,
+                   MPI_ANY_TAG, udata->comm, &reqRW);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Irecv = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[0][1]) {
+    ierr = MPI_Irecv(udata->Erecv, udata->nyl, REALTYPE_MPI_TYPE, ipE,
+                   MPI_ANY_TAG, udata->comm, &reqRE);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Irecv = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[1][0]) {
+    ierr = MPI_Irecv(udata->Srecv, udata->nxl, REALTYPE_MPI_TYPE, ipS,
+                   MPI_ANY_TAG, udata->comm, &reqRS);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Irecv = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[1][1]) {
+    ierr = MPI_Irecv(udata->Nrecv, udata->nxl, REALTYPE_MPI_TYPE, ipN,
+                   MPI_ANY_TAG, udata->comm, &reqRN);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Irecv = " << ierr << "\n";
+      return -1;
+    }
+  }
+
+  // send data
+  if (!udata->HaveBdry[0][0]) {
+    for (i=0; i<nyl; i++)  udata->Wsend[i] = Y[IDX(0,i,nxl)];
+    ierr = MPI_Isend(udata->Wsend, udata->nyl, REALTYPE_MPI_TYPE, ipW, 0,
+              udata->comm, &reqSW);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Isend = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[0][1]) {
+    for (i=0; i<nyl; i++)  udata->Esend[i] = Y[IDX(nxl-1,i,nxl)];
+    ierr = MPI_Isend(udata->Esend, udata->nyl, REALTYPE_MPI_TYPE, ipE, 1,
+              udata->comm, &reqSE);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Isend = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[1][0]) {
+    for (i=0; i<nxl; i++)  udata->Ssend[i] = Y[IDX(i,0,nxl)];
+    ierr = MPI_Isend(udata->Ssend, udata->nxl, REALTYPE_MPI_TYPE, ipS, 2,
+              udata->comm, &reqSS);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Isend = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[1][1]) {
+    for (i=0; i<nxl; i++)  udata->Nsend[i] = Y[IDX(i,nyl-1,nxl)];
+    ierr = MPI_Isend(udata->Nsend, udata->nxl, REALTYPE_MPI_TYPE, ipN, 3,
+              udata->comm, &reqSN);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Isend = " << ierr << "\n";
+      return -1;
+    }
+  }
+
+  // wait for messages to finish
+  if (!udata->HaveBdry[0][0]) {
+    ierr = MPI_Wait(&reqRW, &stat);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Wait = " << ierr << "\n";
+      return -1;
+    }
+    ierr = MPI_Wait(&reqSW, &stat);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Wait = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[0][1]) {
+    ierr = MPI_Wait(&reqRE, &stat);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Wait = " << ierr << "\n";
+      return -1;
+    }
+    ierr = MPI_Wait(&reqSE, &stat);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Wait = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[1][0]) {
+    ierr = MPI_Wait(&reqRS, &stat);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Wait = " << ierr << "\n";
+      return -1;
+    }
+    ierr = MPI_Wait(&reqSS, &stat);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Wait = " << ierr << "\n";
+      return -1;
+    }
+  }
+  if (!udata->HaveBdry[1][1]) {
+    ierr = MPI_Wait(&reqRN, &stat);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Wait = " << ierr << "\n";
+      return -1;
+    }
+    ierr = MPI_Wait(&reqSN, &stat);
+    if (ierr != MPI_SUCCESS) {
+      cerr << "Error in MPI_Wait = " << ierr << "\n";
+      return -1;
+    }
+  }
+
+  return 0;     // return with success flag
+}
+
+// Initialize memory allocated within Userdata
+static int InitUserData(UserData *udata)
+{
+  udata->nx = 0;
+  udata->ny = 0;
+  udata->is = 0;
+  udata->ie = 0;  
+  udata->js = 0;
+  udata->je = 0;  
+  udata->nxl = 0;
+  udata->nyl = 0;
+  udata->dx = 0.0;
+  udata->dy = 0.0;
+  udata->kx = 0.0;
+  udata->ky = 0.0;
+  udata->h = NULL;
+  udata->d = NULL;
+  udata->comm = MPI_COMM_WORLD;
+  udata->myid = 0;
+  udata->nprocs = 0;
+  udata->HaveBdry[0][0] = 1;
+  udata->HaveBdry[0][1] = 1;
+  udata->HaveBdry[1][0] = 1;
+  udata->HaveBdry[1][1] = 1;
+  udata->Erecv = NULL;
+  udata->Wrecv = NULL;
+  udata->Nrecv = NULL;
+  udata->Srecv = NULL;
+  udata->Esend = NULL;
+  udata->Wsend = NULL;
+  udata->Nsend = NULL;
+  udata->Ssend = NULL;
+
+  return 0;     // return with success flag
+}
+
+// Free memory allocated within Userdata
+static int FreeUserData(UserData *udata)
+{
+  // free exchange buffers
+  if (udata->Wrecv != NULL)  delete[] udata->Wrecv;
+  if (udata->Wsend != NULL)  delete[] udata->Wsend;
+  if (udata->Erecv != NULL)  delete[] udata->Erecv;
+  if (udata->Esend != NULL)  delete[] udata->Esend;
+  if (udata->Srecv != NULL)  delete[] udata->Srecv;
+  if (udata->Ssend != NULL)  delete[] udata->Ssend;
+  if (udata->Nrecv != NULL)  delete[] udata->Nrecv;
+  if (udata->Nsend != NULL)  delete[] udata->Nsend;
+
+  return 0;     // return with success flag
+}
+
+
+//---- end of file ----
diff --git a/examples/arkode/CXX_parallel/ark_heat2D.out b/examples/arkode/CXX_parallel/ark_heat2D.out
new file mode 100644
index 0000000..dc415b3
--- /dev/null
+++ b/examples/arkode/CXX_parallel/ark_heat2D.out
@@ -0,0 +1,49 @@
+
+2D Heat PDE test problem:
+   nprocs = 1
+   nx = 60
+   ny = 120
+   kx = 0.5
+   ky = 0.75
+   rtol = 1e-05
+   atol = 1e-10
+   nxl (proc 0) = 60
+   nyl (proc 0) = 120
+
+        t      ||u||_rms
+   ----------------------
+    0.000000    0.000000
+    0.015000    0.005780
+    0.030000    0.009224
+    0.045000    0.011275
+    0.060000    0.012497
+    0.075000    0.013224
+    0.090000    0.013658
+    0.105000    0.013916
+    0.120000    0.014070
+    0.135000    0.014162
+    0.150000    0.014216
+    0.165000    0.014249
+    0.180000    0.014268
+    0.195000    0.014280
+    0.210000    0.014287
+    0.225000    0.014291
+    0.240000    0.014293
+    0.255000    0.014295
+    0.270000    0.014295
+    0.285000    0.014296
+    0.300000    0.014296
+   ----------------------
+
+Final Solver Statistics:
+   Internal solver steps = 51 (attempted = 51)
+   Total RHS evals:  Fe = 0,  Fi = 514
+   Total linear solver setups = 18
+   Total linear iterations = 4094
+   Total number of Jacobian-vector products = 4094
+   Total number of Preconditioner setups = 1
+   Total number of Preconditioner solves = 4237
+   Total number of linear solver convergence failures = 143
+   Total number of Newton iterations = 255
+   Total number of nonlinear solver convergence failures = 0
+   Total number of error test failures = 0
diff --git a/examples/arkode/CXX_parallel/plot_heat2D.py b/examples/arkode/CXX_parallel/plot_heat2D.py
new file mode 100755
index 0000000..f6a41b9
--- /dev/null
+++ b/examples/arkode/CXX_parallel/plot_heat2D.py
@@ -0,0 +1,142 @@
+#!/usr/bin/env python
+# ----------------------------------------------------------------
+# Programmer(s):  Daniel R. Reynolds @ SMU
+# ----------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ----------------------------------------------------------------
+# matplotlib-based plotting script for heat2D.cpp example
+# ----------------------------------------------------------------
+
+# imports
+import sys
+import numpy as np
+from pylab import *
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+import matplotlib.pyplot as plt
+
+# determine the number of MPI processes used
+nprocs=1
+for i in range(1000):
+    sname = 'heat2d_subdomain.' + repr(i).zfill(3) + '.txt'
+    try:
+        f = open(sname,'r')
+        f.close()
+    except IOError:
+        nprocs = i
+        break
+
+# load subdomain information, store in table
+subdomains = np.zeros((nprocs,4), dtype=np.int)
+for i in range(nprocs):
+    sname = 'heat2d_subdomain.' + repr(i).zfill(3) + '.txt'
+    subd = np.loadtxt(sname, dtype=np.int)
+    if (i == 0):
+        nx = subd[0]
+        ny = subd[1]
+    else:
+        if ((subd[0] != nx) or (subd[1] != ny)):
+            sys.exit("error: subdomain files incompatible (clean up and re-run test)")
+    subdomains[i,:] = subd[2:6]
+    
+# load first processor's data, and determine total number of time steps
+data = np.loadtxt('heat2d.000.txt', dtype=np.double)
+nt = np.shape(data)[0]
+
+# create empty array for all solution data
+results = np.zeros((nt,ny,nx))
+
+# insert first processor's data into results array
+istart = subdomains[0,0]
+iend = subdomains[0,1]
+jstart = subdomains[0,2]
+jend = subdomains[0,3]
+nxl = iend-istart+1
+nyl = jend-jstart+1
+for i in range(nt):
+    results[i,jstart:jend+1,istart:iend+1] = np.reshape(data[i,:], (nyl,nxl))
+    
+# iterate over remaining data files, inserting into output
+if (nprocs > 1):
+    for isub in range(1,nprocs):
+        data = np.loadtxt('heat2d.' + repr(isub).zfill(3) + '.txt', dtype=np.double)
+        # check that subdomain has correct number of time steps
+        if (np.shape(data)[0] != nt):
+            sys.exit('error: subdomain ' + isub + ' has an incorrect number of time steps')
+        istart = subdomains[isub,0]
+        iend = subdomains[isub,1]
+        jstart = subdomains[isub,2]
+        jend = subdomains[isub,3]
+        nxl = iend-istart+1
+        nyl = jend-jstart+1
+        for i in range(nt):
+            results[i,jstart:jend+1,istart:iend+1] = np.reshape(data[i,:], (nyl,nxl))
+
+# determine extents of plots
+maxtemp = 1.1*results.max()
+mintemp = 0.9*results.min()
+
+# generate plots of results
+kx = 0.5
+ky = 0.75
+kprod = (kx+4.0*ky)*np.pi**2
+dt = 0.015
+for tstep in range(nt):
+
+    # set string constants for output plots, current time, mesh size
+    pname = 'heat2d_surf.' + repr(tstep).zfill(3) + '.png'
+    cname = 'heat2d_err.' + repr(tstep).zfill(3) + '.png'
+    tstr  = repr(tstep)
+    nxstr = repr(nx)
+    nystr = repr(ny)
+
+    # set x and y meshgrid objects
+    xspan = np.linspace(0.0, 1.0, nx)
+    yspan = np.linspace(0.0, 1.0, ny)
+    X,Y = np.meshgrid(xspan,yspan)
+
+    # plot current solution as a surface, and save to disk
+    fig = plt.figure(1)
+    ax = fig.add_subplot(111, projection='3d')
+    ax.plot_surface(X, Y, results[tstep,:,:], rstride=1, cstride=1, 
+                    cmap=cm.jet, linewidth=0, antialiased=True, shade=True)
+    ax.set_xlabel('x')
+    ax.set_ylabel('y')
+    ax.set_zlim((mintemp, maxtemp))
+    ax.view_init(20,45)
+    title('u(x,y) at output ' + tstr + ', mesh = ' + nxstr + 'x' + nystr)
+    savefig(pname)
+    plt.close()
+
+    # plot error in current solution (as a contour, and save to disk)
+    t = tstep*dt;
+    at = (1.0 - np.exp(-t*kprod))/kprod
+    utrue = at*np.sin(np.pi*X)*np.sin(2.0*np.pi*Y);
+    uerr = np.abs(utrue - results[tstep,:,:])
+    plt.contourf(xspan,yspan,uerr,15, cmap=plt.cm.jet)
+    plt.colorbar()
+    plt.xlabel('x')
+    plt.ylabel('y')
+    plt.title('Error at output ' + tstr + ', mesh = ' + nxstr + 'x' + nystr)
+    plt.savefig(cname)
+    plt.close()
+
+
+
+
+##### end of script #####
diff --git a/examples/arkode/CXX_serial/CMakeLists.txt b/examples/arkode/CXX_serial/CMakeLists.txt
new file mode 100644
index 0000000..8ebc0f3
--- /dev/null
+++ b/examples/arkode/CXX_serial/CMakeLists.txt
@@ -0,0 +1,149 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for ARKODE serial examples
+
+# Add variable ARKODE_examples with the names of the serial ARKODE examples
+
+SET(ARKODE_examples
+  ark_analytic_sys
+  )
+
+# Add variable ARKODE_examples_BL with the names of the serial ARKODE examples
+# that use Lapack
+
+SET(ARKODE_examples_BL
+  )
+
+# Add variable ARKODE_extras with the names of auxiliary files to install
+
+SET(ARKODE_extras
+  plot_sol.py
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${ARKODE_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each ARKODE example
+
+FOREACH(example ${ARKODE_examples})
+  ADD_EXECUTABLE(${example} ${example}.cpp)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.cpp ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${ARKODE_examples})
+
+# Add the build and install targets for each Lapack ARKODE example (if needed)
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${ARKODE_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.cpp)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.cpp ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${ARKODE_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_serial)
+
+  # Install the extra files
+  FOREACH(extrafile ${ARKODE_extras})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_serial)
+  ENDFOREACH(extrafile ${ARKODE_extras})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "ARKODE")
+  SET(SOLVER_LIB "sundials_arkode")
+  LIST2STRING(ARKODE_examples EXAMPLES)
+  IF(LAPACK_FOUND)
+    LIST2STRING(ARKODE_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_CXX_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/CXX_serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/arkode/CXX_serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_CXX_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/CXX_serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/arkode/CXX_serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/CXX_serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/arkode/CXX_serial/README b/examples/arkode/CXX_serial/README
new file mode 100644
index 0000000..7f114b2
--- /dev/null
+++ b/examples/arkode/CXX_serial/README
@@ -0,0 +1,49 @@
+List of serial ARKODE C++ examples
+
+  ark_analytic_sys : simple stiff, linear, ODE system example
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/arkode/CXX_serial/ark_analytic_sys.cpp b/examples/arkode/CXX_serial/ark_analytic_sys.cpp
new file mode 100644
index 0000000..f9779e0
--- /dev/null
+++ b/examples/arkode/CXX_serial/ark_analytic_sys.cpp
@@ -0,0 +1,352 @@
+/*-----------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem with analytical 
+ * solution,
+ *    dy/dt = A*y
+ * where A = V*D*Vi, 
+ *      V = [1 -1 1; -1 2 1; 0 -1 2];
+ *      Vi = 0.25*[5 1 -3; 2 2 -2; 1 1 1];
+ *      D = [-0.5 0 0; 0 -0.1 0; 0 0 lam];
+ * where lam is a large negative number. The analytical solution to
+ * this problem is 
+ *   Y(t) = V*exp(D*t)*Vi*Y0
+ * for t in the interval [0.0, 0.05], with initial condition: 
+ * y(0) = [1,1,1]'.
+ * 
+ * The stiffness of the problem is directly proportional to the 
+ * value of "lamda".  The value of lamda should be negative to 
+ * result in a well-posed ODE; for values with magnitude larger than
+ * 100 the problem becomes quite stiff.
+ * 
+ * In this example, we choose lamda = -100.
+ * 
+ * This program solves the problem with the DIRK method,
+ * Newton iteration with the ARKDENSE dense linear solver, and a
+ * user-supplied Jacobian routine.
+ * Output is printed every 1.0 units of time (10 total).
+ * Run statistics (optional outputs) are printed at the end.
+ *-----------------------------------------------------------------*/
+
+// Header files
+#include <stdio.h>
+#include <iostream>
+#include <string.h>
+#include <math.h>
+#include <arkode/arkode.h>            // prototypes for ARKode fcts., consts.
+#include <nvector/nvector_serial.h>   // serial N_Vector types, fcts., macros
+#include <arkode/arkode_dense.h>      // prototype for ARKDense solver
+#include <sundials/sundials_dense.h>  // defs. of DlsMat and DENSE_ELEM
+#include <sundials/sundials_types.h>  // def. of type 'realtype'
+
+using namespace std;
+
+// User-supplied Functions Called by the Solver
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+// Private function to perform matrix-matrix product
+static int dense_MM(DlsMat A, DlsMat B, DlsMat C);
+
+// Private function to check function return values
+static int check_flag(void *flagvalue, const string funcname, int opt);
+
+// Main Program
+int main()
+{
+  // general problem parameters
+  realtype T0 = RCONST(0.0);       // initial time
+  realtype Tf = RCONST(0.05);      // final time
+  realtype dTout = RCONST(0.005);  // time between outputs
+  long int NEQ = 3;                // number of dependent vars.
+  realtype reltol = 1.0e-6;        // tolerances
+  realtype abstol = 1.0e-10;
+  realtype lamda  = -100.0;        // stiffness parameter
+
+  // general problem variables
+  int flag;                      // reusable error-checking flag
+  N_Vector y = NULL;             // empty vector for storing solution
+  void *arkode_mem = NULL;       // empty ARKode memory structure
+
+  // Initial problem output
+  cout << "\nAnalytical ODE test problem:\n";
+  cout << "    lamda = " << lamda << "\n";
+  cout << "   reltol = " << reltol << "\n";
+  cout << "   abstol = " << abstol << "\n\n";
+
+  // Initialize data structures
+  y = N_VNew_Serial(NEQ);         // Create serial vector solution
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return 1;
+  NV_Ith_S(y,0) = 1.0;            // Specify initial condition
+  NV_Ith_S(y,1) = 1.0;
+  NV_Ith_S(y,2) = 1.0;
+  arkode_mem = ARKodeCreate();    // Create the solver memory
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  // Set routines
+  flag = ARKodeSetUserData(arkode_mem, (void *) &lamda);   // Pass lamda to user functions
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);   // Specify tolerances
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  // Linear solver specification
+  flag = ARKDense(arkode_mem, NEQ);              // Specify dense linear solver
+  if (check_flag(&flag, "ARKDense", 1)) return 1;
+  flag = ARKDlsSetDenseJacFn(arkode_mem, Jac);   // Set Jacobian routine
+  if (check_flag(&flag, "ARKDlsSetDenseJacFn", 1)) return 1;
+
+  // Specify linearly implicit RHS, with non-time-dependent Jacobian
+  flag = ARKodeSetLinear(arkode_mem, 0);
+  if (check_flag(&flag, "ARKodeSetLinear", 1)) return 1;
+
+  // Open output stream for results, output comment line
+  FILE *UFID = fopen("solution.txt","w");
+  fprintf(UFID,"# t y1 y2 y3\n");
+
+  // output initial condition to disk 
+  fprintf(UFID," %.16e %.16e %.16e %.16e\n", 
+	  T0, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));  
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  realtype t = T0;
+  realtype tout = T0+dTout;
+  cout << "      t        y0        y1        y2\n";
+  cout << "   --------------------------------------\n";
+  while (Tf - t > 1.0e-15) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);       // call integrator
+    if (check_flag(&flag, "ARKode", 1)) break;
+    printf("  %8.4f  %8.5f  %8.5f  %8.5f\n",                  // access/print solution
+           t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));
+    fprintf(UFID," %.16e %.16e %.16e %.16e\n", 
+	    t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));  
+    if (flag >= 0) {                                          // successful solve: update time
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                                  // unsuccessful solve: break
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+  }
+  cout << "   --------------------------------------\n";
+  fclose(UFID);
+
+  // Print some final statistics
+  long int nst, nst_a, nfe, nfi, nsetups, nje, nfeLS, nni, ncfn, netf;
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+  flag = ARKDlsGetNumJacEvals(arkode_mem, &nje);
+  check_flag(&flag, "ARKDlsGetNumJacEvals", 1);
+  flag = ARKDlsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKDlsGetNumRhsEvals", 1);
+
+  cout << "\nFinal Solver Statistics:\n";
+  cout << "   Internal solver steps = " << nst << " (attempted = " << nst_a << ")\n";
+  cout << "   Total RHS evals:  Fe = " << nfe << ",  Fi = " << nfi << "\n";
+  cout << "   Total linear solver setups = " << nsetups << "\n";
+  cout << "   Total RHS evals for setting up the linear system = " << nfeLS << "\n";
+  cout << "   Total number of Jacobian evaluations = " << nje << "\n";
+  cout << "   Total number of Newton iterations = " << nni << "\n";
+  cout << "   Total number of linear solver convergence failures = " << ncfn << "\n";
+  cout << "   Total number of error test failures = " << netf << "\n\n";
+
+  // Clean up and return with successful completion
+  N_VDestroy_Serial(y);        // Free y vector
+  ARKodeFree(&arkode_mem);     // Free integrator memory
+  return 0;
+}
+
+/*-------------------------------
+ * Functions called by the solver
+ *-------------------------------*/
+
+// f routine to compute the ODE RHS function f(t,y).
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype *rdata = (realtype *) user_data;   // cast user_data to realtype
+  realtype lam = rdata[0];                    // set shortcut for stiffness parameter
+  realtype y0 = NV_Ith_S(y,0);                // access current solution values
+  realtype y1 = NV_Ith_S(y,1);
+  realtype y2 = NV_Ith_S(y,2);
+  realtype yd0, yd1, yd2;
+
+  // fill in the RHS function: f(t,y) = V*D*Vi*y
+  yd0 = 0.25*(5.0*y0 + 1.0*y1 - 3.0*y2);     // yd = Vi*y
+  yd1 = 0.25*(2.0*y0 + 2.0*y1 - 2.0*y2);
+  yd2 = 0.25*(1.0*y0 + 1.0*y1 + 1.0*y2);
+  y0  = -0.5*yd0;                            //  y = D*yd
+  y1  = -0.1*yd1;
+  y2  =  lam*yd2;
+  yd0 =  1.0*y0 - 1.0*y1 + 1.0*y2;           // yd = V*y
+  yd1 = -1.0*y0 + 2.0*y1 + 1.0*y2;
+  yd2 =  0.0*y0 - 1.0*y1 + 2.0*y2;
+  NV_Ith_S(ydot,0) = yd0;
+  NV_Ith_S(ydot,1) = yd1;
+  NV_Ith_S(ydot,2) = yd2;
+
+  return 0;                                  // Return with success
+}
+
+// Jacobian routine to compute J(t,y) = df/dy.
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *rdata = (realtype *) user_data;   // cast user_data to realtype
+  realtype lam = rdata[0];                    // set shortcut for stiffness parameter
+  DlsMat V  = NewDenseMat(3,3);               // create temporary DlsMat objects
+  DlsMat D  = NewDenseMat(3,3);
+  DlsMat Vi = NewDenseMat(3,3);
+
+  DenseScale(0.0, V);     // initialize temporary matrices to zero
+  DenseScale(0.0, D);
+  DenseScale(0.0, Vi);
+
+  // Fill in temporary matrices:
+  //    V = [1 -1 1; -1 2 1; 0 -1 2]
+  DENSE_ELEM(V,0,0) =  1.0;
+  DENSE_ELEM(V,0,1) = -1.0;
+  DENSE_ELEM(V,0,2) =  1.0;
+  DENSE_ELEM(V,1,0) = -1.0;
+  DENSE_ELEM(V,1,1) =  2.0;
+  DENSE_ELEM(V,1,2) =  1.0;
+  DENSE_ELEM(V,2,0) =  0.0;
+  DENSE_ELEM(V,2,1) = -1.0;
+  DENSE_ELEM(V,2,2) =  2.0;
+
+  //    Vi = 0.25*[5 1 -3; 2 2 -2; 1 1 1]
+  DENSE_ELEM(Vi,0,0) =  0.25*5.0;
+  DENSE_ELEM(Vi,0,1) =  0.25*1.0;
+  DENSE_ELEM(Vi,0,2) = -0.25*3.0;
+  DENSE_ELEM(Vi,1,0) =  0.25*2.0;
+  DENSE_ELEM(Vi,1,1) =  0.25*2.0;
+  DENSE_ELEM(Vi,1,2) = -0.25*2.0;
+  DENSE_ELEM(Vi,2,0) =  0.25*1.0;
+  DENSE_ELEM(Vi,2,1) =  0.25*1.0;
+  DENSE_ELEM(Vi,2,2) =  0.25*1.0;
+
+  //    D = [-0.5 0 0; 0 -0.1 0; 0 0 lam]
+  DENSE_ELEM(D,0,0) = -0.5;
+  DENSE_ELEM(D,1,1) = -0.1;
+  DENSE_ELEM(D,2,2) = lam;
+
+  // Compute J = V*D*Vi
+  if (dense_MM(D,Vi,J) != 0) {     // J = D*Vi
+    cerr << "matmul error\n";
+    return 1;
+  }
+  if (dense_MM(V,J,D) != 0) {      // D = V*J [= V*D*Vi]
+    cerr << "matmul error\n";
+    return 1;
+  }
+  DenseCopy(D, J);                 // J = D [= V*D*Vi]
+
+  return 0;                        // Return with success
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+// DlsMat matrix-multiply utility routine: C = A*B.
+static int dense_MM(DlsMat A, DlsMat B, DlsMat C)
+{
+  // check for legal dimensions
+  if ((A->N != B->M) || (C->M != A->M) || (C->N != B->N)) {
+    cerr << "\n matmul error: dimension mismatch\n\n";
+    return 1;
+  }
+
+  realtype **adata = A->cols;     // access data and extents
+  realtype **bdata = B->cols;
+  realtype **cdata = C->cols;
+  long int m = C->M;
+  long int n = C->N;
+  long int l = A->N;
+  int i, j, k;
+  DenseScale(0.0, C);             // initialize output
+
+  // perform multiply (not optimal, but fine for 3x3 matrices)
+  for (i=0; i<m; i++)
+    for (j=0; j<n; j++)
+      for (k=0; k<l; k++)
+     cdata[i][j] += adata[i][k] * bdata[k][j];
+
+  return 0;                       // Return with success
+}
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const string funcname, int opt)
+{
+  int *errflag;
+
+  // Check if SUNDIALS function returned NULL pointer - no memory allocated
+  if (opt == 0 && flagvalue == NULL) {
+    cerr << "\nSUNDIALS_ERROR: " << funcname << " failed - returned NULL pointer\n\n";
+    return 1; }
+
+  // Check if flag < 0
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      cerr << "\nSUNDIALS_ERROR: " << funcname << " failed with flag = " << *errflag << "\n\n";
+      return 1; 
+    }
+  }
+  
+  // Check if function returned NULL pointer - no memory allocated
+  else if (opt == 2 && flagvalue == NULL) {
+    cerr << "\nMEMORY_ERROR: " << funcname << " failed - returned NULL pointer\n\n";
+    return 1; }
+
+  return 0;
+}
+
+
+
+//---- end of file ----
diff --git a/examples/arkode/CXX_serial/ark_analytic_sys.out b/examples/arkode/CXX_serial/ark_analytic_sys.out
new file mode 100644
index 0000000..858d646
--- /dev/null
+++ b/examples/arkode/CXX_serial/ark_analytic_sys.out
@@ -0,0 +1,30 @@
+
+Analytical ODE test problem:
+    lamda = -100
+   reltol = 1e-06
+   abstol = 1e-10
+
+      t        y0        y1        y2
+   --------------------------------------
+    0.0050   0.70327   0.70627   0.41004
+    0.0100   0.52267   0.52865   0.05231
+    0.0150   0.41249   0.42145  -0.16456
+    0.0200   0.34504   0.35696  -0.29600
+    0.0250   0.30349   0.31838  -0.37563
+    0.0300   0.27767   0.29551  -0.42383
+    0.0350   0.26138   0.28216  -0.45296
+    0.0400   0.25088   0.27459  -0.47053
+    0.0450   0.24389   0.27053  -0.48109
+    0.0500   0.23903   0.26858  -0.48740
+   --------------------------------------
+
+Final Solver Statistics:
+   Internal solver steps = 91 (attempted = 93)
+   Total RHS evals:  Fe = 0,  Fi = 934
+   Total linear solver setups = 12
+   Total RHS evals for setting up the linear system = 0
+   Total number of Jacobian evaluations = 4
+   Total number of Newton iterations = 465
+   Total number of linear solver convergence failures = 0
+   Total number of error test failures = 2
+
diff --git a/examples/arkode/CXX_serial/plot_sol.py b/examples/arkode/CXX_serial/plot_sol.py
new file mode 100755
index 0000000..9a61de9
--- /dev/null
+++ b/examples/arkode/CXX_serial/plot_sol.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+# ----------------------------------------------------------------
+# Programmer(s):  Daniel R. Reynolds @ SMU
+# ----------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ----------------------------------------------------------------
+# matplotlib-based plotting script for ODE examples
+
+# imports
+import sys
+import pylab as plt
+import numpy as np
+
+# load solution data file
+data = np.loadtxt('solution.txt', dtype=np.double)
+
+# determine number of time steps, number of fields
+nt,nv = np.shape(data)
+
+# extract time array
+times = data[:,0]
+
+# parse comment line to determine solution names
+f = open('solution.txt', 'r')
+commentline = f.readline()
+commentsplit = commentline.split()
+names = commentsplit[2:]
+
+# create plot
+plt.figure()
+
+# add curves to figure
+for i in range(nv-1):
+    plt.plot(times,data[:,i+1],label=names[i])
+plt.xlabel('t')
+if (nv > 2):
+    plt.ylabel('solutions')
+else:
+    plt.ylabel('solution')
+plt.legend(loc='upper right', shadow=True)
+plt.grid()
+plt.savefig('solution.png')
+
+
+
+
+##### end of script #####
diff --git a/examples/arkode/C_openmp/CMakeLists.txt b/examples/arkode/C_openmp/CMakeLists.txt
new file mode 100644
index 0000000..788f249
--- /dev/null
+++ b/examples/arkode/C_openmp/CMakeLists.txt
@@ -0,0 +1,133 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for ARKODE OpenMP examples
+
+# Only include tests if OpenMP is enabled
+IF(OPENMP_FOUND)
+
+# Add variable ARKode_examples_OMP with the names of the openmp ARKode examples
+SET(ARKODE_examples_OMP
+  ark_brusselator1D_omp
+  )
+
+# Add variable ARKODE_extras_OMP with the names of auxiliary files to install
+SET(ARKODE_extras_OMP
+  plot_brusselator1D.py
+  )
+
+ENDIF(OPENMP_FOUND)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_static)
+  SET(NVECOMP_LIB sundials_nvecopenmp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_shared)
+  SET(NVECOMP_LIB sundials_nvecopenmp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+SET(SUNDIALS_LIBS ${ARKODE_LIB} ${NVECOMP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# update the compilation flags to include OpenMP support
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+
+# Add the build and install targets for each ARKODE example
+FOREACH(example ${ARKODE_examples_OMP})
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} TEST_ARGS 4)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_openmp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${ARKODE_examples_OMP})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_openmp)
+
+  # Install the extra files
+  FOREACH(extrafile ${ARKODE_extras_OMP})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_openmp)
+  ENDFOREACH(extrafile ${ARKODE_extras_OMP})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "ARKODE")
+  SET(SOLVER_LIB "sundials_arkode")
+  LIST2STRING(ARKODE_examples_OMP EXAMPLES)
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/C_openmp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/arkode/C_openmp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_openmp 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/C_openmp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/arkode/C_openmp/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_openmp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/arkode/C_openmp/README b/examples/arkode/C_openmp/README
new file mode 100644
index 0000000..4b4d911
--- /dev/null
+++ b/examples/arkode/C_openmp/README
@@ -0,0 +1,55 @@
+List of OpenMP ARKODE C examples
+
+  ark_brusselator1D_omp : stiff chemical kinetics PDE system example (DIRK/BAND)
+
+Sample results:
+
+  SUNDIALS was built with OpenMP enabled, and the example output was run using 4 OpenMP threads:
+ 
+  BASH/SH:   export OMP_NUM_THREADS=4
+  TCSH/CSH:  setenv OMP_NUM_THREADS 4
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/arkode/C_openmp/ark_brusselator1D_omp.c b/examples/arkode/C_openmp/ark_brusselator1D_omp.c
new file mode 100644
index 0000000..cac3dea
--- /dev/null
+++ b/examples/arkode/C_openmp/ark_brusselator1D_omp.c
@@ -0,0 +1,514 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates a brusselator problem from chemical 
+ * kinetics.  This is n PDE system with 3 components, Y = [u,v,w], 
+ * satisfying the equations,
+ *    u_t = du*u_xx + a - (w+1)*u + v*u^2
+ *    v_t = dv*v_xx + w*u - v*u^2
+ *    w_t = dw*w_xx + (b-w)/ep - w*u
+ * for t in [0, 80], x in [0, 1], with initial conditions
+ *    u(0,x) =  a  + 0.1*sin(pi*x)
+ *    v(0,x) = b/a + 0.1*sin(pi*x)
+ *    w(0,x) =  b  + 0.1*sin(pi*x),
+ * and with stationary boundary conditions, i.e. 
+ *    u_t(t,0) = u_t(t,1) = 0,
+ *    v_t(t,0) = v_t(t,1) = 0,
+ *    w_t(t,0) = w_t(t,1) = 0.
+ * Note: these can also be implemented as Dirichlet boundary 
+ * conditions with values identical to the initial conditions.
+ * 
+ * The spatial derivatives are computed using second-order 
+ * centered differences, with the data distributed over N points 
+ * on a uniform spatial grid.
+ *
+ * This program solves the problem with the DIRK method, using a
+ * Newton iteration with the ARKBAND band linear solver, and a
+ * user-supplied Jacobian routine.  This example uses the OpenMP 
+ * vector kernel, and employs OpenMP threading within the 
+ * right-hand side and Jacobian construction functions.
+ *
+ * 100 outputs are printed at equal intervals, and run statistics 
+ * are printed at the end.
+ *---------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKode fcts., consts. */
+#include <nvector/nvector_openmp.h>   /* OpenMP N_Vector types, fcts., macros */
+#include <arkode/arkode_band.h>       /* prototype for ARKBand solver */
+#include <sundials/sundials_types.h>  /* def. of type 'realtype' */
+#include <sundials/sundials_math.h>   /* def. of SUNRsqrt, etc. */
+#ifdef _OPENMP
+#include <omp.h>                      /* OpenMP functions */
+#endif
+
+/* accessor macros between (x,v) location and 1D NVector array */
+#define IDX(x,v) (3*(x)+v)
+
+/* user data structure */
+typedef struct {  
+  long int N;    /* number of intervals      */
+  int nthreads;  /* number of OpenMP threads */
+  realtype dx;   /* mesh spacing             */
+  realtype a;    /* constant forcing on u    */
+  realtype b;    /* steady-state value of w  */
+  realtype du;   /* diffusion coeff for u    */
+  realtype dv;   /* diffusion coeff for v    */
+  realtype dw;   /* diffusion coeff for w    */
+  realtype ep;   /* stiffness parameter      */
+} *UserData;
+
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private helper functions  */
+static int LaplaceMatrix(realtype c, DlsMat Jac, UserData udata);
+static int ReactionJac(realtype c, N_Vector y, DlsMat Jac, UserData udata);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main Program */
+int main(int argc, char *argv[])
+{
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);    /* initial time */
+  realtype Tf = RCONST(10.0);   /* final time */
+  int Nt = 100;                 /* total number of output times */
+  int Nvar = 3;                 /* number of solution fields */
+  UserData udata = NULL;
+  realtype *data;
+  long int N = 201;             /* spatial mesh size */
+  realtype a = 0.6;             /* problem parameters */
+  realtype b = 2.0;
+  realtype du = 0.025;
+  realtype dv = 0.025;
+  realtype dw = 0.025;
+  realtype ep = 1.0e-5;         /* stiffness parameter */
+  realtype reltol = 1.0e-6;     /* tolerances */
+  realtype abstol = 1.0e-10;
+  long int NEQ, i;
+
+  /* general problem variables */
+  int flag;                     /* reusable error-checking flag */
+  N_Vector y = NULL;            /* empty vector for storing solution */
+  N_Vector umask = NULL;        /* empty mask vectors for viewing solution components */
+  N_Vector vmask = NULL;
+  N_Vector wmask = NULL;
+  void *arkode_mem = NULL;      /* empty ARKode memory structure */
+  realtype pi, t, dTout, tout, u, v, w;
+  FILE *FID, *UFID, *VFID, *WFID;
+  int iout, num_threads;
+  long int nst, nst_a, nfe, nfi, nsetups, nje, nfeLS, nni, ncfn, netf;
+
+  /* allocate udata structure */
+  udata = (UserData) malloc(sizeof(*udata));
+  if (check_flag((void *) udata, "malloc", 2)) return 1;
+
+  /* set the number of threads to use */
+  num_threads = 1; /* default value */
+#ifdef _OPENMP
+  num_threads = omp_get_max_threads();   /* overwrite with OMP_NUM_THREADS environment variable */
+#endif
+  if (argc > 1)   /* overwrite with command line value, if supplied */
+    num_threads = strtol(argv[1], NULL, 0);
+
+  /* store the inputs in the UserData structure */
+  udata->N  = N;
+  udata->a  = a;
+  udata->b  = b;
+  udata->du = du;
+  udata->dv = dv;
+  udata->dw = dw;
+  udata->ep = ep;
+  udata->nthreads = num_threads;
+
+  /* set total allocated vector length */
+  NEQ = Nvar*udata->N;
+
+  /* Initial problem output */
+  printf("\n1D Brusselator PDE test problem:\n");
+  printf("    N = %li,  NEQ = %li\n", udata->N, NEQ);
+  printf("    num_threads = %i\n", num_threads);
+  printf("    problem parameters:  a = %g,  b = %g,  ep = %g\n",
+	 udata->a, udata->b, udata->ep);
+  printf("    diffusion coefficients:  du = %g,  dv = %g,  dw = %g\n", 
+	 udata->du, udata->dv, udata->dw);
+  printf("    reltol = %.1e,  abstol = %.1e\n\n", reltol, abstol);
+
+  /* Initialize data structures */
+  y = N_VNew_OpenMP(NEQ, num_threads);      /* Create vector for solution */
+  if (check_flag((void *)y, "N_VNew_OpenMP", 0)) return 1;
+  udata->dx = RCONST(1.0)/(N-1);            /* set spatial mesh spacing */
+  data = N_VGetArrayPointer(y);             /* Access data array for new NVector y */
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  umask = N_VNew_OpenMP(NEQ, num_threads);  /* Create vector masks */
+  if (check_flag((void *)umask, "N_VNew_OpenMP", 0)) return 1;
+  vmask = N_VNew_OpenMP(NEQ, num_threads);
+  if (check_flag((void *)vmask, "N_VNew_OpenMP", 0)) return 1;
+  wmask = N_VNew_OpenMP(NEQ, num_threads);
+  if (check_flag((void *)wmask, "N_VNew_OpenMP", 0)) return 1;
+
+  /* Set initial conditions into y */
+  pi = RCONST(4.0)*atan(RCONST(1.0));
+  for (i=0; i<N; i++) {
+    data[IDX(i,0)] =  a  + RCONST(0.1)*sin(pi*i*udata->dx);  /* u */
+    data[IDX(i,1)] = b/a + RCONST(0.1)*sin(pi*i*udata->dx);  /* v */
+    data[IDX(i,2)] =  b  + RCONST(0.1)*sin(pi*i*udata->dx);  /* w */
+  }
+
+  /* Set mask array values for each solution component */
+  N_VConst(0.0, umask);
+  data = N_VGetArrayPointer(umask);
+  if (check_flag((void *) data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,0)] = RCONST(1.0);
+
+  N_VConst(0.0, vmask);
+  data = N_VGetArrayPointer(vmask);
+  if (check_flag((void *) data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,1)] = RCONST(1.0);
+
+  N_VConst(0.0, wmask);
+  data = N_VGetArrayPointer(wmask);
+  if (check_flag((void *) data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,2)] = RCONST(1.0);
+
+  /* Create the solver memory */
+  arkode_mem = ARKodeCreate();
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set routines */
+  flag = ARKodeSetUserData(arkode_mem, (void *) udata);     /* Pass udata to user functions */
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);    /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  /* Linear solver specification */
+  flag = ARKBand(arkode_mem, NEQ, 4, 4);          /* Specify the band linear solver */
+  if (check_flag(&flag, "ARKBand", 1)) return 1;
+  flag = ARKDlsSetBandJacFn(arkode_mem, Jac);     /* Set the Jacobian routine */
+  if (check_flag(&flag, "ARKDlsSetBandJacFn", 1)) return 1;
+
+  /* output spatial mesh to disk */
+  FID=fopen("bruss_mesh.txt","w");
+  for (i=0; i<N; i++)  fprintf(FID,"  %.16e\n", udata->dx*i);
+  fclose(FID);
+  
+  /* Open output stream for results, access data arrays */
+  UFID=fopen("bruss_u.txt","w");
+  VFID=fopen("bruss_v.txt","w");
+  WFID=fopen("bruss_w.txt","w");
+
+  /* output initial condition to disk */
+  data = N_VGetArrayPointer(y);
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[IDX(i,0)]);
+  for (i=0; i<N; i++)  fprintf(VFID," %.16e", data[IDX(i,1)]);
+  for (i=0; i<N; i++)  fprintf(WFID," %.16e", data[IDX(i,2)]);
+  fprintf(UFID,"\n");
+  fprintf(VFID,"\n");
+  fprintf(WFID,"\n");
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t = T0;
+  dTout = (Tf-T0)/Nt;
+  tout = T0+dTout;
+  printf("        t      ||u||_rms   ||v||_rms   ||w||_rms\n");
+  printf("   ----------------------------------------------\n");
+  for (iout=0; iout<Nt; iout++) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);    /* call integrator */
+    if (check_flag(&flag, "ARKode", 1)) break;
+    u = N_VWL2Norm(y,umask);                               /* access/print solution statistics */
+    u = SUNRsqrt(u*u/N);
+    v = N_VWL2Norm(y,vmask);
+    v = SUNRsqrt(v*v/N);
+    w = N_VWL2Norm(y,wmask);
+    w = SUNRsqrt(w*w/N);
+    printf("  %10.6f  %10.6f  %10.6f  %10.6f\n", t, u, v, w);
+    if (flag >= 0) {                                       /* successful solve: update output time */
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                               /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+
+    /* output results to disk */
+    for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[IDX(i,0)]);
+    for (i=0; i<N; i++)  fprintf(VFID," %.16e", data[IDX(i,1)]);
+    for (i=0; i<N; i++)  fprintf(WFID," %.16e", data[IDX(i,2)]);
+    fprintf(UFID,"\n");
+    fprintf(VFID,"\n");
+    fprintf(WFID,"\n");
+  }
+  printf("   ----------------------------------------------\n");
+  fclose(UFID);
+  fclose(VFID);
+  fclose(WFID);
+    
+  /* Print some final statistics */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+  flag = ARKDlsGetNumJacEvals(arkode_mem, &nje);
+  check_flag(&flag, "ARKDlsGetNumJacEvals", 1);
+  flag = ARKDlsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total linear solver setups = %li\n", nsetups);
+  printf("   Total RHS evals for setting up the linear system = %li\n", nfeLS);
+  printf("   Total number of Jacobian evaluations = %li\n", nje);
+  printf("   Total number of Newton iterations = %li\n", nni);
+  printf("   Total number of nonlinear solver convergence failures = %li\n", ncfn);
+  printf("   Total number of error test failures = %li\n\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy_OpenMP(y);         /* Free vectors */
+  N_VDestroy_OpenMP(umask);
+  N_VDestroy_OpenMP(vmask);
+  N_VDestroy_OpenMP(wmask);
+  free(udata);                  /* Free user data */
+  ARKodeFree(&arkode_mem);      /* Free integrator memory */
+  return 0;
+}
+
+/*-------------------------------
+ * Functions called by the solver
+ *-------------------------------*/
+
+/* f routine to compute the ODE RHS function f(t,y). */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  UserData udata = (UserData) user_data;      /* access problem data */
+  long int N  = udata->N;                     /* set variable shortcuts */
+  realtype a  = udata->a;
+  realtype b  = udata->b;
+  realtype ep = udata->ep;
+  realtype du = udata->du;
+  realtype dv = udata->dv;
+  realtype dw = udata->dw;
+  realtype dx = udata->dx;
+  realtype *Ydata=NULL, *dYdata=NULL;
+  realtype uconst, vconst, wconst, u, ul, ur, v, vl, vr, w, wl, wr;
+  long int i;
+
+  /* clear out ydot (to be careful) */
+  N_VConst(0.0, ydot);
+
+  Ydata = N_VGetArrayPointer(y);     /* access data arrays */
+  if (check_flag((void *)Ydata, "N_VGetArrayPointer", 0)) return 1;
+  dYdata = N_VGetArrayPointer(ydot);
+  if (check_flag((void *)dYdata, "N_VGetArrayPointer", 0)) return 1;
+  N_VConst(0.0, ydot);                        /* initialize ydot to zero */
+
+  /* iterate over domain, computing all equations */
+  uconst = du/dx/dx;
+  vconst = dv/dx/dx;
+  wconst = dw/dx/dx;
+#pragma omp parallel for default(shared) private(i,u,ul,ur,v,vl,vr,w,wl,wr) schedule(static) num_threads(udata->nthreads)
+  for (i=1; i<N-1; i++) {
+
+    /* set shortcuts */
+    u = Ydata[IDX(i,0)];  ul = Ydata[IDX(i-1,0)];  ur = Ydata[IDX(i+1,0)];
+    v = Ydata[IDX(i,1)];  vl = Ydata[IDX(i-1,1)];  vr = Ydata[IDX(i+1,1)];
+    w = Ydata[IDX(i,2)];  wl = Ydata[IDX(i-1,2)];  wr = Ydata[IDX(i+1,2)];
+
+    /* u_t = du*u_xx + a - (w+1)*u + v*u^2 */
+    dYdata[IDX(i,0)] = (ul - RCONST(2.0)*u + ur)*uconst + a - (w+RCONST(1.0))*u + v*u*u;
+
+    /* v_t = dv*v_xx + w*u - v*u^2 */
+    dYdata[IDX(i,1)] = (vl - RCONST(2.0)*v + vr)*vconst + w*u - v*u*u;
+
+    /* w_t = dw*w_xx + (b-w)/ep - w*u */
+    dYdata[IDX(i,2)] = (wl - RCONST(2.0)*w + wr)*wconst + (b-w)/ep - w*u;
+
+  }
+
+  /* enforce stationary boundaries */
+  dYdata[IDX(0,0)]   = dYdata[IDX(0,1)]   = dYdata[IDX(0,2)]   = 0.0;
+  dYdata[IDX(N-1,0)] = dYdata[IDX(N-1,1)] = dYdata[IDX(N-1,2)] = 0.0;
+
+  return 0;
+}
+
+
+/* Jacobian routine to compute J(t,y) = df/dy. */
+static int Jac(long int M, long int mu, long int ml,
+               realtype t, N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  UserData udata = (UserData) user_data;     /* access problem data */
+  SetToZero(J);                              /* Initialize Jacobian to zero */
+
+  /* Fill in the Laplace matrix */
+  if (LaplaceMatrix(RCONST(1.0), J, udata)) {
+    printf("Jacobian calculation error in calling LaplaceMatrix!\n");
+    return 1;
+  }
+
+  /* Add in the Jacobian of the reaction terms matrix */
+  if (ReactionJac(RCONST(1.0), y, J, udata)) {
+    printf("Jacobian calculation error in calling ReactionJac!\n");
+    return 1;
+  }
+
+  return 0;
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Routine to compute the stiffness matrix from (L*y), scaled by the factor c.
+   We add the result into Jac and do not erase what was already there */
+static int LaplaceMatrix(realtype c, DlsMat Jac, UserData udata)
+{
+  long int i;                /* set shortcuts */
+  long int N = udata->N;
+  realtype dx = udata->dx;
+  
+  /* iterate over intervals, filling in Jacobian entries */
+#pragma omp parallel for default(shared) private(i) schedule(static) num_threads(udata->nthreads)
+  for (i=1; i<N-1; i++) {
+
+    /* Jacobian of (L*y) at this node */
+    BAND_ELEM(Jac,IDX(i,0),IDX(i-1,0)) += c*udata->du/dx/dx;
+    BAND_ELEM(Jac,IDX(i,1),IDX(i-1,1)) += c*udata->dv/dx/dx;
+    BAND_ELEM(Jac,IDX(i,2),IDX(i-1,2)) += c*udata->dw/dx/dx;
+    BAND_ELEM(Jac,IDX(i,0),IDX(i,0)) += -c*RCONST(2.0)*udata->du/dx/dx;
+    BAND_ELEM(Jac,IDX(i,1),IDX(i,1)) += -c*RCONST(2.0)*udata->dv/dx/dx;
+    BAND_ELEM(Jac,IDX(i,2),IDX(i,2)) += -c*RCONST(2.0)*udata->dw/dx/dx;
+    BAND_ELEM(Jac,IDX(i,0),IDX(i+1,0)) += c*udata->du/dx/dx;
+    BAND_ELEM(Jac,IDX(i,1),IDX(i+1,1)) += c*udata->dv/dx/dx;
+    BAND_ELEM(Jac,IDX(i,2),IDX(i+1,2)) += c*udata->dw/dx/dx;
+  }
+
+  return 0;
+}
+
+
+
+/* Routine to compute the Jacobian matrix from R(y), scaled by the factor c.
+   We add the result into Jac and do not erase what was already there */
+static int ReactionJac(realtype c, N_Vector y, DlsMat Jac, UserData udata)
+{
+  long int N  = udata->N;                      /* set shortcuts */
+  long int i;
+  realtype u, v, w;
+  realtype ep = udata->ep;
+  realtype *Ydata = N_VGetArrayPointer(y);     /* access solution array */
+  if (check_flag((void *)Ydata, "N_VGetArrayPointer", 0)) return 1;
+  
+  /* iterate over nodes, filling in Jacobian entries */
+#pragma omp parallel for default(shared) private(i,u,v,w) schedule(static) num_threads(udata->nthreads)
+  for (i=1; i<N-1; i++) {
+
+    /* set nodal value shortcuts (shifted index due to start at first interior node) */
+    u = Ydata[IDX(i,0)];
+    v = Ydata[IDX(i,1)];
+    w = Ydata[IDX(i,2)];
+
+    /* all vars wrt u */
+    BAND_ELEM(Jac,IDX(i,0),IDX(i,0)) += c*(RCONST(2.0)*u*v-(w+RCONST(1.0)));
+    BAND_ELEM(Jac,IDX(i,1),IDX(i,0)) += c*(w - RCONST(2.0)*u*v);
+    BAND_ELEM(Jac,IDX(i,2),IDX(i,0)) += c*(-w);
+
+    /* all vars wrt v */
+    BAND_ELEM(Jac,IDX(i,0),IDX(i,1)) += c*(u*u);
+    BAND_ELEM(Jac,IDX(i,1),IDX(i,1)) += c*(-u*u);
+
+    /* all vars wrt w */
+    BAND_ELEM(Jac,IDX(i,0),IDX(i,2)) += c*(-u);
+    BAND_ELEM(Jac,IDX(i,1),IDX(i,2)) += c*(u);
+    BAND_ELEM(Jac,IDX(i,2),IDX(i,2)) += c*(-RCONST(1.0)/ep - u);
+
+  }
+
+  return 0;
+}
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_openmp/ark_brusselator1D_omp.out b/examples/arkode/C_openmp/ark_brusselator1D_omp.out
new file mode 100644
index 0000000..1213d4d
--- /dev/null
+++ b/examples/arkode/C_openmp/ark_brusselator1D_omp.out
@@ -0,0 +1,122 @@
+
+1D Brusselator PDE test problem:
+    N = 201,  NEQ = 603
+    num_threads = 4
+    problem parameters:  a = 0.6,  b = 2,  ep = 1e-05
+    diffusion coefficients:  du = 0.025,  dv = 0.025,  dw = 0.025
+    reltol = 1.0e-06,  abstol = 1.0e-10
+
+        t      ||u||_rms   ||v||_rms   ||w||_rms
+   ----------------------------------------------
+    0.100000    0.673914    3.377329    1.999987
+    0.200000    0.684316    3.356619    1.999987
+    0.300000    0.695306    3.334633    1.999986
+    0.400000    0.706918    3.311313    1.999986
+    0.500000    0.719185    3.286601    1.999986
+    0.600000    0.732137    3.260442    1.999986
+    0.700000    0.745798    3.232787    1.999985
+    0.800000    0.760185    3.203596    1.999985
+    0.900000    0.775303    3.172839    1.999985
+    1.000000    0.791135    3.140510    1.999984
+    1.100000    0.807648    3.106624    1.999984
+    1.200000    0.824771    3.071233    1.999984
+    1.300000    0.842402    3.034426    1.999983
+    1.400000    0.860384    2.996350    1.999983
+    1.500000    0.878514    2.957206    1.999983
+    1.600000    0.896525    2.917266    1.999982
+    1.700000    0.914089    2.876873    1.999982
+    1.800000    0.930823    2.836438    1.999982
+    1.900000    0.946292    2.796446    1.999982
+    2.000000    0.960033    2.757430    1.999981
+    2.100000    0.971576    2.719962    1.999981
+    2.200000    0.980475    2.684623    1.999981
+    2.300000    0.986338    2.651980    1.999981
+    2.400000    0.988852    2.622560    1.999981
+    2.500000    0.987815    2.596818    1.999981
+    2.600000    0.983141    2.575128    1.999981
+    2.700000    0.974858    2.557766    1.999981
+    2.800000    0.963114    2.544903    1.999981
+    2.900000    0.948154    2.536611    1.999981
+    3.000000    0.930299    2.532868    1.999982
+    3.100000    0.909930    2.533567    1.999982
+    3.200000    0.887464    2.538529    1.999983
+    3.300000    0.863335    2.547515    1.999983
+    3.400000    0.837978    2.560241    1.999983
+    3.500000    0.811818    2.576391    1.999984
+    3.600000    0.785255    2.595624    1.999984
+    3.700000    0.758659    2.617587    1.999985
+    3.800000    0.732363    2.641922    1.999986
+    3.900000    0.706662    2.668274    1.999986
+    4.000000    0.681809    2.696300    1.999986
+    4.100000    0.658012    2.725670    1.999987
+    4.200000    0.635435    2.756075    1.999987
+    4.300000    0.614205    2.787228    1.999988
+    4.400000    0.594404    2.818869    1.999988
+    4.500000    0.576082    2.850764    1.999989
+    4.600000    0.559255    2.882710    1.999989
+    4.700000    0.543909    2.914529    1.999989
+    4.800000    0.530011    2.946071    1.999990
+    4.900000    0.517506    2.977209    1.999990
+    5.000000    0.506326    3.007843    1.999990
+    5.100000    0.496394    3.037889    1.999990
+    5.200000    0.487626    3.067283    1.999990
+    5.300000    0.479935    3.095976    1.999991
+    5.400000    0.473237    3.123932    1.999991
+    5.500000    0.467445    3.151125    1.999991
+    5.600000    0.462480    3.177540    1.999991
+    5.700000    0.458264    3.203165    1.999991
+    5.800000    0.454726    3.227997    1.999991
+    5.900000    0.451800    3.252035    1.999991
+    6.000000    0.449425    3.275283    1.999991
+    6.100000    0.447546    3.297744    1.999991
+    6.200000    0.446115    3.319428    1.999991
+    6.300000    0.445086    3.340340    1.999991
+    6.400000    0.444419    3.360491    1.999991
+    6.500000    0.444079    3.379890    1.999991
+    6.600000    0.444034    3.398547    1.999991
+    6.700000    0.444257    3.416470    1.999991
+    6.800000    0.444722    3.433669    1.999991
+    6.900000    0.445409    3.450154    1.999991
+    7.000000    0.446297    3.465934    1.999991
+    7.100000    0.447370    3.481018    1.999991
+    7.200000    0.448614    3.495414    1.999991
+    7.300000    0.450016    3.509131    1.999991
+    7.400000    0.451564    3.522176    1.999991
+    7.500000    0.453249    3.534557    1.999991
+    7.600000    0.455064    3.546280    1.999991
+    7.700000    0.457000    3.557353    1.999991
+    7.800000    0.459052    3.567781    1.999991
+    7.900000    0.461216    3.577571    1.999991
+    8.000000    0.463486    3.586728    1.999991
+    8.100000    0.465860    3.595257    1.999991
+    8.200000    0.468335    3.603162    1.999991
+    8.300000    0.470909    3.610447    1.999991
+    8.400000    0.473582    3.617116    1.999991
+    8.500000    0.476352    3.623171    1.999991
+    8.600000    0.479220    3.628616    1.999991
+    8.700000    0.482186    3.633451    1.999991
+    8.800000    0.485250    3.637679    1.999990
+    8.900000    0.488416    3.641299    1.999990
+    9.000000    0.491684    3.644311    1.999990
+    9.100000    0.495058    3.646715    1.999990
+    9.200000    0.498540    3.648509    1.999990
+    9.300000    0.502134    3.649691    1.999990
+    9.400000    0.505844    3.650257    1.999990
+    9.500000    0.509675    3.650202    1.999990
+    9.600000    0.513632    3.649521    1.999990
+    9.700000    0.517722    3.648209    1.999990
+    9.800000    0.521951    3.646257    1.999990
+    9.900000    0.526326    3.643656    1.999990
+   10.000000    0.530857    3.640396    1.999990
+   ----------------------------------------------
+
+Final Solver Statistics:
+   Internal solver steps = 99 (attempted = 99)
+   Total RHS evals:  Fe = 0,  Fi = 1695
+   Total linear solver setups = 35
+   Total RHS evals for setting up the linear system = 0
+   Total number of Jacobian evaluations = 14
+   Total number of Newton iterations = 1196
+   Total number of nonlinear solver convergence failures = 0
+   Total number of error test failures = 0
+
diff --git a/examples/arkode/C_openmp/plot_brusselator1D.py b/examples/arkode/C_openmp/plot_brusselator1D.py
new file mode 100755
index 0000000..bf65e8e
--- /dev/null
+++ b/examples/arkode/C_openmp/plot_brusselator1D.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+# ----------------------------------------------------------------
+# Programmer(s): Daniel R. Reynolds @ SMU
+# ----------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ----------------------------------------------------------------
+# matplotlib-based plotting script for brusselator1D.c example
+
+# imports
+import sys
+import pylab as plt
+import numpy as np
+
+# load mesh data file
+mesh = np.loadtxt('bruss_mesh.txt', dtype=np.double)
+
+# load solution data files
+udata = np.loadtxt('bruss_u.txt', dtype=np.double)
+vdata = np.loadtxt('bruss_v.txt', dtype=np.double)
+wdata = np.loadtxt('bruss_w.txt', dtype=np.double)
+
+# determine number of time steps, mesh size
+nt,nx = np.shape(udata)
+
+# determine min/max values
+umin = 0.9*udata.min()
+umax = 1.1*udata.max()
+vmin = 0.9*vdata.min()
+vmax = 1.1*vdata.max()
+wmin = 0.9*wdata.min()
+wmax = 1.1*wdata.max()
+minval = np.array([umin, vmin, wmin]).min()
+maxval = np.array([umax, vmax, wmax]).max()
+
+# generate plots of results
+for tstep in range(nt):
+
+    # set string constants for output plots, current time, mesh size
+    pname = 'brusselator1D.' + repr(tstep).zfill(3) + '.png'
+    tstr  = repr(tstep)
+    nxstr = repr(nx)
+
+    # plot current solution and save to disk
+    plt.figure(1)
+    plt.plot(mesh,udata[tstep,:],label="u")
+    plt.plot(mesh,vdata[tstep,:],label="v")
+    plt.plot(mesh,wdata[tstep,:],label="w")
+    plt.xlabel('x')
+    plt.ylabel('solution')
+    plt.title('Solutions at output ' + tstr + ', mesh = ' + nxstr)
+    plt.axis((0.0, 1.0, minval, maxval))
+    plt.grid()
+    plt.legend(loc='upper right', shadow=True)
+    plt.savefig(pname)
+    plt.close()
+
+
+##### end of script #####
diff --git a/examples/arkode/C_parallel/CMakeLists.txt b/examples/arkode/C_parallel/CMakeLists.txt
new file mode 100644
index 0000000..6d866f4
--- /dev/null
+++ b/examples/arkode/C_parallel/CMakeLists.txt
@@ -0,0 +1,144 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for ARKODE parallel C examples
+
+
+# Add variable ARKODE_examples with the names of the parallel ARKODE examples
+# "name\;nodes\;tasks"
+SET(ARKODE_examples
+  "ark_diurnal_kry_p\;1\;4"
+  "ark_diurnal_kry_bbd_p\;1\;4"
+  )
+
+# Add variable ARKODE_extras with the names of auxiliary files to install
+SET(ARKODE_extras
+  # none yet
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the C compiler to the MPICC script.
+# If not, then add the MPI include directory for MPI headers.
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+SET(SUNDIALS_LIBS ${ARKODE_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each ARKODE example
+FOREACH(example_tuple ${ARKODE_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPICC)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPICC)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${ARKODE_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_parallel)
+
+  # Install the extra files
+  FOREACH(extrafile ${ARKODE_extras})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_parallel)
+  ENDFOREACH(extrafile ${ARKODE_extras})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "ARKODE")
+  SET(SOLVER_LIB "sundials_arkode")
+  FOREACH(example_tuple ${ARKODE_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${ARKODE_examples})
+
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/C_parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/arkode/C_parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/C_parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/arkode/C_parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_parallel
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/arkode/C_parallel/README b/examples/arkode/C_parallel/README
new file mode 100644
index 0000000..ea16e11
--- /dev/null
+++ b/examples/arkode/C_parallel/README
@@ -0,0 +1,52 @@
+List of parallel ARKODE C examples
+
+  ark_diurnal_kry_bbd_p : 2-D 2-species diurnal advection-diffusion with BBD preconditioner
+  ark_diurnal_kry_p     : 2-D 2-species diurnal advection-diffusion
+
+Sample results:
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.c b/examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.c
new file mode 100644
index 0000000..04f22db
--- /dev/null
+++ b/examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.c
@@ -0,0 +1,843 @@
+/*-----------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * mesh, with simple polynomial initial profiles.
+ *
+ * The problem is solved by ARKODE on NPE processors, treated
+ * as a rectangular process grid of size NPEX by NPEY, with
+ * NPE = NPEX*NPEY. Each processor contains a subgrid of size MXSUB
+ * by MYSUB of the (x,y) mesh. Thus the actual mesh sizes are
+ * MX = MXSUB*NPEX and MY = MYSUB*NPEY, and the ODE system size is
+ * neq = 2*MX*MY.
+ *
+ * The solution is done with the DIRK/GMRES method (i.e. using the
+ * ARKSPGMR linear solver) and a block-diagonal matrix with banded
+ * blocks as a preconditioner, using the ARKBBDPRE module.
+ * Each block is generated using difference quotients, with
+ * half-bandwidths mudq = mldq = 2*MXSUB, but the retained banded
+ * blocks have half-bandwidths mukeep = mlkeep = 2.
+ * A copy of the approximate Jacobian is saved and conditionally
+ * reused within the preconditioner routine.
+ *
+ * The problem is solved twice -- with left and right preconditioning.
+ *
+ * Performance data and sampled solution values are printed at
+ * selected output times, and all performance counters are printed
+ * on completion.
+ *
+ * This version uses MPI for user routines.
+ * Execute with number of processors = NPEX*NPEY (see constants below).
+ *------------------------------------------------------------------*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKODE fcts. */
+#include <arkode/arkode_spgmr.h>      /* prototypes and constants for ARKSPGMR */
+#include <arkode/arkode_bbdpre.h>     /* prototypes for ARKBBDPRE module */
+#include <nvector/nvector_parallel.h> /* def. of N_Vector, macro NV_DATA_P */
+#include <sundials/sundials_types.h>  /* definitions of realtype, booleantype */
+#include <sundials/sundials_math.h>   /* definition of macros SUNSQR and EXP */
+#include <mpi.h>                      /* MPI constants and types */
+
+
+/* Problem Constants */
+#define ZERO         RCONST(0.0)
+#define NVARS        2                 /* number of species         */
+#define KH           RCONST(4.0e-6)    /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)     /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)    /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)  /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           ZERO                /* initial time */
+#define NOUT         12                  /* number of output times */
+#define TWOHR        RCONST(7200.0)      /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)      /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898) /* pi */ 
+
+#define XMIN         ZERO                /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)
+#define YMIN         RCONST(30.0)        /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+
+#define NPEX         2              /* no. PEs in x direction of PE array */
+#define NPEY         2              /* no. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* no. x points per subgrid */
+#define MYSUB        5              /* no. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+/* ARKodeInit Constants */
+#define RTOL    RCONST(1.0e-5)    /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)     /* value of C1 or C2 at which tolerances */
+                                  /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)      /* scalar absolute tolerance */
+
+/* Type : UserData 
+   contains problem constants, extended dependent variable array,
+   grid constants, processor indices, MPI communicator */
+typedef struct {
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+  realtype uext[NVARS*(MXSUB+2)*(MYSUB+2)];
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmxsub2, Nlocal;
+  MPI_Comm comm;
+} *UserData;
+
+/* Prototypes of private helper functions */
+static void InitUserData(int my_pe, long int local_N, MPI_Comm comm,
+                         UserData data);
+static void SetInitialProfiles(N_Vector u, UserData data);
+static void PrintIntro(int npes, long int mudq, long int mldq,
+		       long int mukeep, long int mlkeep);
+static void PrintOutput(void *arkode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t);
+static void PrintFinalStats(void *arkode_mem);
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype uarray[]);
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[]);
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[]);
+static void fucomm(realtype t, N_Vector u, void *user_data);
+
+/* Prototype of function called by the solver */
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/* Prototype of functions called by the ARKBBDPRE module */
+static int flocal(long int Nlocal, realtype t, N_Vector u,
+                  N_Vector udot, void *user_data);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+
+/***************************** Main Program ******************************/
+int main(int argc, char *argv[])
+{
+  UserData data;
+  void *arkode_mem;
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  int iout, my_pe, npes, flag, jpre;
+  long int neq, local_N, mudq, mldq, mukeep, mlkeep;
+  MPI_Comm comm;
+
+  data = NULL;
+  arkode_mem = NULL;
+  u = NULL;
+
+  /* Set problem size neq */
+  neq = NVARS*MX*MY;
+
+  /* Get processor number and total number of pe's */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  if (npes != NPEX*NPEY) {
+    if (my_pe == 0)
+      fprintf(stderr, "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n\n",
+              npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+
+  /* Set local length */
+  local_N = NVARS*MXSUB*MYSUB;
+
+  /* Allocate and load user data block */
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  InitUserData(my_pe, local_N, comm, data);
+
+  /* Allocate and initialize u, and set tolerances */ 
+  u = N_VNew_Parallel(comm, local_N, neq);
+  if(check_flag((void *)u, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  SetInitialProfiles(u, data);
+  abstol = ATOL;
+  reltol = RTOL;
+
+  /* Call ARKodeCreate to create the solver memory */
+  arkode_mem = ARKodeCreate();
+  if(check_flag((void *)arkode_mem, "ARKodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set the pointer to user-defined data */
+  flag = ARKodeSetUserData(arkode_mem, data);
+  if(check_flag(&flag, "ARKodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     user's right hand side functions in u'=fe(t,u)+fi(t,u) [here fe is NULL], 
+     the inital time T0, and the initial dependent variable vector u. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, u);
+  if(check_flag(&flag, "ARKodeInit", 1, my_pe)) return(1);
+
+  /* Call ARKodeSetMaxNumSteps to increase default */
+  flag = ARKodeSetMaxNumSteps(arkode_mem, 10000);
+  if (check_flag(&flag, "ARKodeSetMaxNumSteps", 1, my_pe)) return(1);
+
+  /* Call ARKodeSStolerances to specify the scalar relative tolerance
+     and scalar absolute tolerances */
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);
+  if (check_flag(&flag, "ARKodeSStolerances", 1, my_pe)) return(1);
+
+  /* Call ARKSpgmr to specify the linear solver ARKSPGMR with left
+     preconditioning and the default Krylov dimension maxl */
+  flag = ARKSpgmr(arkode_mem, PREC_LEFT, 0);
+  if(check_flag(&flag, "ARKBBDSpgmr", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Initialize BBD preconditioner */
+  mudq = mldq = NVARS*MXSUB;
+  mukeep = mlkeep = NVARS;
+  flag = ARKBBDPrecInit(arkode_mem, local_N, mudq, mldq, 
+			mukeep, mlkeep, ZERO, flocal, NULL);
+  if(check_flag(&flag, "ARKBBDPrecAlloc", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Print heading */
+  if (my_pe == 0) PrintIntro(npes, mudq, mldq, mukeep, mlkeep);
+
+  /* Loop over jpre (= PREC_LEFT, PREC_RIGHT), and solve the problem */
+  for (jpre=PREC_LEFT; jpre<=PREC_RIGHT; jpre++) {
+
+    /* On second run, re-initialize u, the integrator, ARKBBDPRE, and ARKSPGMR */
+    if (jpre == PREC_RIGHT) {
+
+      SetInitialProfiles(u, data);
+
+      flag = ARKodeReInit(arkode_mem, NULL, f, T0, u);
+      if(check_flag(&flag, "ARKodeReInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+      flag = ARKBBDPrecReInit(arkode_mem, mudq, mldq, ZERO);
+      if(check_flag(&flag, "ARKBBDPrecReInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+      flag = ARKSpilsSetPrecType(arkode_mem, PREC_RIGHT);
+      check_flag(&flag, "ARKSpilsSetPrecType", 1, my_pe);
+
+      if (my_pe == 0) {
+	printf("\n\n-------------------------------------------------------");
+	printf("------------\n");
+      }
+
+    }
+
+    if (my_pe == 0) {
+      printf("\n\nPreconditioner type is:  jpre = %s\n\n",
+	     (jpre == PREC_LEFT) ? "PREC_LEFT" : "PREC_RIGHT");
+    }
+
+    /* In loop over output points, call ARKode, print results, test for error */
+    for (iout=1, tout=TWOHR; iout<=NOUT; iout++, tout+=TWOHR) {
+      flag = ARKode(arkode_mem, tout, u, &t, ARK_NORMAL);
+      if(check_flag(&flag, "ARKode", 1, my_pe)) break;
+      PrintOutput(arkode_mem, my_pe, comm, u, t);
+    }
+    
+    /* Print final statistics */
+    if (my_pe == 0) PrintFinalStats(arkode_mem);
+    
+  } /* End of jpre loop */
+
+  /* Free memory */
+  N_VDestroy_Parallel(u);
+  free(data);
+  ARKodeFree(&arkode_mem);
+  MPI_Finalize();
+  return(0);
+}
+
+/*********************** Private Helper Functions ************************/
+
+/* Load constants in data */
+static void InitUserData(int my_pe, long int local_N, MPI_Comm comm,
+                         UserData data)
+{
+  int isubx, isuby;
+
+  /* Set problem constants */
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/((realtype)(MX-1));
+  data->dy = (YMAX-YMIN)/((realtype)(MY-1));
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(RCONST(2.0)*data->dx);
+  data->vdco = (RCONST(1.0)/SUNSQR(data->dy))*KV0;
+
+  /* Set machine-related constants */
+  data->comm = comm;
+  data->my_pe = my_pe;
+  data->Nlocal = local_N;
+  /* isubx and isuby are the PE grid indices corresponding to my_pe */
+  isuby = my_pe/NPEX;
+  isubx = my_pe - isuby*NPEX;
+  data->isubx = isubx;
+  data->isuby = isuby;
+  /* Set the sizes of a boundary x-line in u and uext */
+  data->nvmxsub = NVARS*MXSUB;
+  data->nvmxsub2 = NVARS*(MXSUB+2);
+}
+
+/* Set initial conditions in u */
+static void SetInitialProfiles(N_Vector u, UserData data)
+{
+  int isubx, isuby;
+  int lx, ly, jx, jy;
+  long int offset;
+  realtype dx, dy, x, y, cx, cy, xmid, ymid;
+  realtype *uarray;
+
+  /* Set pointer to data array in vector u */
+  uarray = N_VGetArrayPointer(u);
+
+  /* Get mesh spacings, and subgrid indices for this PE */
+  dx = data->dx;         dy = data->dy;
+  isubx = data->isubx;   isuby = data->isuby;
+
+  /* Load initial profiles of c1 and c2 into local u vector.
+  Here lx and ly are local mesh point indices on the local subgrid,
+  and jx and jy are the global mesh point indices. */
+  offset = 0;
+  xmid = RCONST(0.5)*(XMIN + XMAX);
+  ymid = RCONST(0.5)*(YMIN + YMAX);
+  for (ly = 0; ly < MYSUB; ly++) {
+    jy = ly + isuby*MYSUB;
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - ymid));
+    cy = RCONST(1.0) - cy + RCONST(0.5)*SUNSQR(cy);
+    for (lx = 0; lx < MXSUB; lx++) {
+      jx = lx + isubx*MXSUB;
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - xmid));
+      cx = RCONST(1.0) - cx + RCONST(0.5)*SUNSQR(cx);
+      uarray[offset  ] = C1_SCALE*cx*cy; 
+      uarray[offset+1] = C2_SCALE*cx*cy;
+      offset = offset + 2;
+    }
+  }
+}
+
+/* Print problem introduction */
+static void PrintIntro(int npes, long int mudq, long int mldq,
+		       long int mukeep, long int mlkeep)
+{
+  printf("\n2-species diurnal advection-diffusion problem\n");
+  printf("  %d by %d mesh on %d processors\n", MX, MY, npes);
+  printf("  Using ARKBBDPRE preconditioner module\n");
+  printf("    Difference-quotient half-bandwidths are");
+  printf(" mudq = %ld,  mldq = %ld\n", mudq, mldq);
+  printf("    Retained band block half-bandwidths are");
+  printf(" mukeep = %ld,  mlkeep = %ld", mukeep, mlkeep);
+  return;
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+static void PrintOutput(void *arkode_mem, int my_pe, MPI_Comm comm, 
+                        N_Vector u, realtype t)
+{
+  int flag, npelast;
+  long int i0, i1, nst;
+  realtype hu, *uarray, tempu[2];
+  MPI_Status status;
+
+  npelast = NPEX*NPEY - 1;
+  uarray = N_VGetArrayPointer(u);
+
+  /* Send c1,c2 at top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NVARS*MXSUB*MYSUB - 2;
+    i1 = i0 + 1;
+    if (npelast != 0)
+      MPI_Send(&uarray[i0], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else {
+      tempu[0] = uarray[i0];
+      tempu[1] = uarray[i1];
+    }
+  }
+
+  /* On PE 0, receive c1,c2 at top right, then print performance data
+     and sampled solution values */ 
+  if (my_pe == 0) {
+    if (npelast != 0)
+      MPI_Recv(&tempu[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    flag = ARKodeGetNumSteps(arkode_mem, &nst);
+    check_flag(&flag, "ARKodeGetNumSteps", 1, my_pe);
+    flag = ARKodeGetLastStep(arkode_mem, &hu);
+    check_flag(&flag, "ARKodeGetLastStep", 1, my_pe);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("t = %.2Le   no. steps = %ld   stepsize = %.2Le\n",
+           t, nst, hu);
+    printf("At bottom left:  c1, c2 = %12.3Le %12.3Le \n", uarray[0], uarray[1]);
+    printf("At top right:    c1, c2 = %12.3Le %12.3Le \n\n", tempu[0], tempu[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("t = %.2e   no. steps = %ld   stepsize = %.2e\n",
+           t, nst, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", uarray[0], uarray[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#else
+    printf("t = %.2e   no. steps = %ld   stepsize = %.2e\n",
+           t, nst, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", uarray[0], uarray[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#endif
+  }
+}
+
+/* Print final statistics contained in iopt */
+static void PrintFinalStats(void *arkode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int lenrwBBDP, leniwBBDP, ngevalsBBDP;
+  long int nst, nfe, nfi, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = ARKodeGetWorkSpace(arkode_mem, &lenrw, &leniw);
+  check_flag(&flag, "ARKodeGetWorkSpace", 1, 0);
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1, 0);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1, 0);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1, 0);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1, 0);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1, 0);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1, 0);
+
+  flag = ARKSpilsGetWorkSpace(arkode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "ARKSpilsGetWorkSpace", 1, 0);
+  flag = ARKSpilsGetNumLinIters(arkode_mem, &nli);
+  check_flag(&flag, "ARKSpilsGetNumLinIters", 1, 0);
+  flag = ARKSpilsGetNumPrecEvals(arkode_mem, &npe);
+  check_flag(&flag, "ARKSpilsGetNumPrecEvals", 1, 0);
+  flag = ARKSpilsGetNumPrecSolves(arkode_mem, &nps);
+  check_flag(&flag, "ARKSpilsGetNumPrecSolves", 1, 0);
+  flag = ARKSpilsGetNumConvFails(arkode_mem, &ncfl);
+  check_flag(&flag, "ARKSpilsGetNumConvFails", 1, 0);
+  flag = ARKSpilsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKSpilsGetNumRhsEvals", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwls = %5ld     leniwls = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld     nfe     = %5ld\n", nst, nfe);
+  printf("nfe     = %5ld     nfels   = %5ld\n", nfi, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n", nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n", nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n", npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl);
+
+  flag = ARKBBDPrecGetWorkSpace(arkode_mem, &lenrwBBDP, &leniwBBDP);
+  check_flag(&flag, "ARKBBDPrecGetWorkSpace", 1, 0);
+  flag = ARKBBDPrecGetNumGfnEvals(arkode_mem, &ngevalsBBDP);
+  check_flag(&flag, "ARKBBDPrecGetNumGfnEvals", 1, 0);
+  printf("In ARKBBDPRE: real/integer local work space sizes = %ld, %ld\n",
+	 lenrwBBDP, leniwBBDP);  
+  printf("             no. flocal evals. = %ld\n",ngevalsBBDP);
+}
+ 
+/* Routine to send boundary data to neighboring PEs */
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype uarray[])
+{
+  int i, ly;
+  long int offsetu, offsetbuf;
+  realtype bufleft[NVARS*MYSUB], bufright[NVARS*MYSUB];
+
+  /* If isuby > 0, send data from bottom x-line of u */
+  if (isuby != 0)
+    MPI_Send(&uarray[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If isuby < NPEY-1, send data from top x-line of u */
+  if (isuby != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&uarray[offsetu], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If isubx > 0, send data from left y-line of u (via bufleft) */
+  if (isubx != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = ly*dsizex;
+      for (i = 0; i < NVARS; i++)
+        bufleft[offsetbuf+i] = uarray[offsetu+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If isubx < NPEX-1, send data from right y-line of u (via bufright) */
+  if (isubx != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = offsetbuf*MXSUB + (MXSUB-1)*NVARS;
+      for (i = 0; i < NVARS; i++)
+        bufright[offsetbuf+i] = uarray[offsetu+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* Routine to start receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[])
+{
+  long int offsetue;
+  /* Have bufleft and bufright use the same buffer */
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Irecv(&uext[NVARS], dsizex, PVEC_REAL_MPI_TYPE,
+    					 my_pe-NPEX, 0, comm, &request[0]);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1) {
+    offsetue = NVARS*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+                                         my_pe+NPEX, 0, comm, &request[1]);
+  }
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe-1, 0, comm, &request[2]);
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe+1, 0, comm, &request[3]);
+  }
+}
+
+/* Routine to finish receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[])
+{
+  int i, ly;
+  long int dsizex2, offsetue, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+  MPI_Status status;
+
+  dsizex2 = dsizex + 2*NVARS;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Wait(&request[0],&status);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+1)*dsizex2;
+      for (i = 0; i < NVARS; i++)
+        uext[offsetue+i] = bufleft[offsetbuf+i];
+    }
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+2)*dsizex2 - NVARS;
+      for (i = 0; i < NVARS; i++)
+	uext[offsetue+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/* fucomm routine.  This routine performs all inter-processor
+   communication of data in u needed to calculate f.         */
+static void fucomm(realtype t, N_Vector u, void *user_data)
+{
+  UserData data;
+  realtype *uarray, *uext, buffer[2*NVARS*MYSUB];
+  MPI_Comm comm;
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmysub;
+  MPI_Request request[4];
+
+  data = (UserData) user_data;
+  uarray = N_VGetArrayPointer(u);
+
+  /* Get comm, my_pe, subgrid indices, data sizes, extended array uext */
+  comm = data->comm;  my_pe = data->my_pe;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+  nvmysub = NVARS*MYSUB;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs */
+  BRecvPost(comm, request, my_pe, isubx, isuby, nvmxsub, nvmysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs */
+  BSend(comm, my_pe, isubx, isuby, nvmxsub, nvmysub, uarray);
+
+  /* Finish receiving boundary data from neighboring PEs */
+  BRecvWait(request, isubx, isuby, nvmxsub, uext, buffer);
+}
+
+/***************** Function called by the solver **************************/
+
+/* f routine.  Evaluate f(t,y).  First call fucomm to do communication of 
+   subgrid boundary data into uext.  Then calculate f by a call to flocal. */
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  UserData data;
+
+  data = (UserData) user_data;
+
+  /* Call fucomm to do inter-processor communication */
+  fucomm (t, u, user_data);
+
+  /* Call flocal to calculate all right-hand sides */
+  flocal (data->Nlocal, t, u, udot, user_data);
+
+  return(0);
+}
+
+/***************** Functions called by the ARKBBDPRE module ****************/
+
+/* flocal routine.  Compute f(t,y).  This routine assumes that all
+   inter-processor communication of data needed to calculate f has already
+   been done, and this data is in the work array uext.                    */
+static int flocal(long int Nlocal, realtype t, N_Vector u,
+                  N_Vector udot, void *user_data)
+{
+  realtype *uext;
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  int i, lx, ly, jy;
+  int isubx, isuby;
+  long int nvmxsub, nvmxsub2, offsetu, offsetue;
+  UserData data;
+  realtype *uarray, *duarray;
+
+  uarray = N_VGetArrayPointer(u);
+  duarray = N_VGetArrayPointer(udot);
+
+  /* Get subgrid indices, array sizes, extended work array uext */
+  data = (UserData) user_data;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub; nvmxsub2 = data->nvmxsub2;
+  uext = data->uext;
+
+  /* Copy local segment of u vector into the working extended array uext */
+  offsetu = 0;
+  offsetue = nvmxsub2 + NVARS;
+  for (ly = 0; ly < MYSUB; ly++) {
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = uarray[offsetu+i];
+    offsetu = offsetu + nvmxsub;
+    offsetue = offsetue + nvmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+  a boundary PE, copy data from the first interior mesh line of u to uext */
+
+  /* If isuby = 0, copy x-line 2 of u to uext */
+  if (isuby == 0) {
+    for (i = 0; i < nvmxsub; i++) uext[NVARS+i] = uarray[nvmxsub+i];
+  }
+
+  /* If isuby = NPEY-1, copy x-line MYSUB-1 of u to uext */
+  if (isuby == NPEY-1) {
+    offsetu = (MYSUB-2)*nvmxsub;
+    offsetue = (MYSUB+1)*nvmxsub2 + NVARS;
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = uarray[offsetu+i];
+  }
+
+  /* If isubx = 0, copy y-line 2 of u to uext */
+  if (isubx == 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*nvmxsub + NVARS;
+      offsetue = (ly+1)*nvmxsub2;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = uarray[offsetu+i];
+    }
+  }
+
+  /* If isubx = NPEX-1, copy y-line MXSUB-1 of u to uext */
+  if (isubx == NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = (ly+1)*nvmxsub - 2*NVARS;
+      offsetue = (ly+2)*nvmxsub2 - NVARS;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = uarray[offsetu+i];
+    }
+  }
+
+  /* Make local copies of problem variables, for efficiency */
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco = data->hdco;
+  horaco = data->haco;
+
+  /* Set diurnal rate coefficients as functions of t, and save q4 in 
+  data block for use by preconditioner evaluation routine            */
+
+  s = sin((data->om)*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    q4coef = SUNRexp(-A4/s);
+  } else {
+    q3 = ZERO;
+    q4coef = ZERO;
+  }
+  data->q4 = q4coef;
+
+
+  /* Loop over all grid points in local subgrid */
+  for (ly = 0; ly < MYSUB; ly++) {
+
+    jy = ly + isuby*MYSUB;
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    for (lx = 0; lx < MXSUB; lx++) {
+
+      /* Extract c1 and c2, and set kinetic rate terms */
+      offsetue = (lx+1)*NVARS + (ly+1)*nvmxsub2;
+      c1 = uext[offsetue];
+      c2 = uext[offsetue+1];
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + 2.0*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms */
+      c1dn = uext[offsetue-nvmxsub2];
+      c2dn = uext[offsetue-nvmxsub2+1];
+      c1up = uext[offsetue+nvmxsub2];
+      c2up = uext[offsetue+nvmxsub2+1];
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms */
+      c1lt = uext[offsetue-2];
+      c2lt = uext[offsetue-1];
+      c1rt = uext[offsetue+2];
+      c2rt = uext[offsetue+3];
+      hord1 = hordco*(c1rt - RCONST(2.0)*c1 + c1lt);
+      hord2 = hordco*(c2rt - RCONST(2.0)*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into duarray */
+      offsetu = lx*NVARS + ly*nvmxsub;
+      duarray[offsetu]   = vertd1 + hord1 + horad1 + rkin1; 
+      duarray[offsetu+1] = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+  return(0);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+              id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.out b/examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.out
new file mode 100644
index 0000000..400b519
--- /dev/null
+++ b/examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.out
@@ -0,0 +1,140 @@
+
+2-species diurnal advection-diffusion problem
+  10 by 10 mesh on 4 processors
+  Using ARKBBDPRE preconditioner module
+    Difference-quotient half-bandwidths are mudq = 10,  mldq = 10
+    Retained band block half-bandwidths are mukeep = 2,  mlkeep = 2
+
+Preconditioner type is:  jpre = PREC_LEFT
+
+t = 7.20e+03   no. steps = 979   stepsize = 3.07e+00
+At bottom left:  c1, c2 =    1.047e+04    2.527e+11 
+At top right:    c1, c2 =    1.119e+04    2.700e+11 
+
+t = 1.44e+04   no. steps = 2737   stepsize = 6.94e+00
+At bottom left:  c1, c2 =    6.659e+06    2.582e+11 
+At top right:    c1, c2 =    7.301e+06    2.833e+11 
+
+t = 2.16e+04   no. steps = 3536   stepsize = 1.04e+01
+At bottom left:  c1, c2 =    2.665e+07    2.993e+11 
+At top right:    c1, c2 =    2.931e+07    3.313e+11 
+
+t = 2.88e+04   no. steps = 4696   stepsize = 3.57e+00
+At bottom left:  c1, c2 =    8.702e+06    3.380e+11 
+At top right:    c1, c2 =    9.650e+06    3.751e+11 
+
+t = 3.60e+04   no. steps = 6153   stepsize = 2.55e+00
+At bottom left:  c1, c2 =    1.404e+04    3.387e+11 
+At top right:    c1, c2 =    1.561e+04    3.765e+11 
+
+t = 4.32e+04   no. steps = 7347   stepsize = 2.70e+02
+At bottom left:  c1, c2 =   -3.646e-07    3.382e+11 
+At top right:    c1, c2 =    1.550e-06    3.804e+11 
+
+t = 5.04e+04   no. steps = 7367   stepsize = 4.18e+02
+At bottom left:  c1, c2 =    7.306e-08    3.358e+11 
+At top right:    c1, c2 =   -9.873e-07    3.864e+11 
+
+t = 5.76e+04   no. steps = 7384   stepsize = 3.72e+02
+At bottom left:  c1, c2 =    1.527e-09    3.320e+11 
+At top right:    c1, c2 =    4.335e-08    3.909e+11 
+
+t = 6.48e+04   no. steps = 7399   stepsize = 6.63e+02
+At bottom left:  c1, c2 =    1.013e-07    3.313e+11 
+At top right:    c1, c2 =    5.434e-07    3.963e+11 
+
+t = 7.20e+04   no. steps = 7410   stepsize = 6.63e+02
+At bottom left:  c1, c2 =    1.955e-07    3.330e+11 
+At top right:    c1, c2 =    1.942e-06    4.039e+11 
+
+t = 7.92e+04   no. steps = 7421   stepsize = 6.63e+02
+At bottom left:  c1, c2 =   -9.651e-08    3.334e+11 
+At top right:    c1, c2 =   -4.421e-07    4.120e+11 
+
+t = 8.64e+04   no. steps = 7432   stepsize = 6.63e+02
+At bottom left:  c1, c2 =    2.720e-08    3.352e+11 
+At top right:    c1, c2 =    3.334e-07    4.163e+11 
+
+
+Final Statistics: 
+
+lenrw   =  3058     leniw   =   160
+lenrwls =  2046     leniwls =    80
+nst     =  7432     nfe     =     0
+nfe     = 78033     nfels   = 83813
+nni     = 40719     nli     = 83813
+nsetups =   450     netf    =    30
+npe     =   125     nps     = 122360
+ncfn    =     0     ncfl    =     0
+
+In ARKBBDPRE: real/integer local work space sizes = 600, 50
+             no. flocal evals. = 2750
+
+
+-------------------------------------------------------------------
+
+
+Preconditioner type is:  jpre = PREC_RIGHT
+
+t = 7.20e+03   no. steps = 981   stepsize = 3.06e+00
+At bottom left:  c1, c2 =    1.047e+04    2.527e+11 
+At top right:    c1, c2 =    1.119e+04    2.700e+11 
+
+t = 1.44e+04   no. steps = 2731   stepsize = 6.90e+00
+At bottom left:  c1, c2 =    6.659e+06    2.582e+11 
+At top right:    c1, c2 =    7.301e+06    2.833e+11 
+
+t = 2.16e+04   no. steps = 3534   stepsize = 1.04e+01
+At bottom left:  c1, c2 =    2.665e+07    2.993e+11 
+At top right:    c1, c2 =    2.931e+07    3.313e+11 
+
+t = 2.88e+04   no. steps = 4682   stepsize = 3.53e+00
+At bottom left:  c1, c2 =    8.702e+06    3.380e+11 
+At top right:    c1, c2 =    9.650e+06    3.751e+11 
+
+t = 3.60e+04   no. steps = 6149   stepsize = 2.55e+00
+At bottom left:  c1, c2 =    1.404e+04    3.387e+11 
+At top right:    c1, c2 =    1.561e+04    3.765e+11 
+
+t = 4.32e+04   no. steps = 7339   stepsize = 4.35e+02
+At bottom left:  c1, c2 =    8.121e-08    3.382e+11 
+At top right:    c1, c2 =   -2.045e-14    3.804e+11 
+
+t = 5.04e+04   no. steps = 7357   stepsize = 3.70e+02
+At bottom left:  c1, c2 =    1.123e-07    3.358e+11 
+At top right:    c1, c2 =   -2.964e-15    3.864e+11 
+
+t = 5.76e+04   no. steps = 7373   stepsize = 1.86e+02
+At bottom left:  c1, c2 =   -1.175e-07    3.320e+11 
+At top right:    c1, c2 =   -1.860e-11    3.909e+11 
+
+t = 6.48e+04   no. steps = 7389   stepsize = 5.22e+02
+At bottom left:  c1, c2 =   -2.231e-08    3.313e+11 
+At top right:    c1, c2 =   -1.392e-13    3.963e+11 
+
+t = 7.20e+04   no. steps = 7402   stepsize = 5.22e+02
+At bottom left:  c1, c2 =   -6.583e-19    3.330e+11 
+At top right:    c1, c2 =    1.864e-24    4.039e+11 
+
+t = 7.92e+04   no. steps = 7416   stepsize = 5.22e+02
+At bottom left:  c1, c2 =   -2.240e-19    3.334e+11 
+At top right:    c1, c2 =    4.536e-24    4.120e+11 
+
+t = 8.64e+04   no. steps = 7430   stepsize = 5.22e+02
+At bottom left:  c1, c2 =   -7.473e-19    3.352e+11 
+At top right:    c1, c2 =    1.656e-25    4.163e+11 
+
+
+Final Statistics: 
+
+lenrw   =  3058     leniw   =   160
+lenrwls =  2046     leniwls =    80
+nst     =  7430     nfe     =     0
+nfe     = 78034     nfels   = 101865
+nni     = 40725     nli     = 101865
+nsetups =   451     netf    =    31
+npe     =   125     nps     = 139198
+ncfn    =     0     ncfl    =     0
+
+In ARKBBDPRE: real/integer local work space sizes = 600, 50
+             no. flocal evals. = 2750
diff --git a/examples/arkode/C_parallel/ark_diurnal_kry_p.c b/examples/arkode/C_parallel/ark_diurnal_kry_p.c
new file mode 100644
index 0000000..d7439e3
--- /dev/null
+++ b/examples/arkode/C_parallel/ark_diurnal_kry_p.c
@@ -0,0 +1,956 @@
+/*-----------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * mesh, with simple polynomial initial profiles.
+ *
+ * The problem is solved by ARKODE on NPE processors, treated
+ * as a rectangular process grid of size NPEX by NPEY, with
+ * NPE = NPEX*NPEY. Each processor contains a subgrid of size MXSUB
+ * by MYSUB of the (x,y) mesh.  Thus the actual mesh sizes are
+ * MX = MXSUB*NPEX and MY = MYSUB*NPEY, and the ODE system size is
+ * neq = 2*MX*MY.
+ *
+ * The solution is done with the DIRK/GMRES method (i.e. using the
+ * ARKSPGMR linear solver) and the block-diagonal part of the
+ * Newton matrix as a left preconditioner. A copy of the
+ * block-diagonal part of the Jacobian is saved and conditionally
+ * reused within the preconditioner routine.
+ *
+ * Performance data and sampled solution values are printed at
+ * selected output times, and all performance counters are printed
+ * on completion.
+ *
+ * This version uses MPI for user routines.
+ * 
+ * Execution: mpiexec -n N ark_diurnal_kry_p   with N = NPEX*NPEY
+ * (see constants below).
+ *---------------------------------------------------------------*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <arkode/arkode.h>             /* prototypes for ARKODE fcts. */
+#include <arkode/arkode_spgmr.h>       /* prototypes & constants for ARKSPGMR  */
+#include <nvector/nvector_parallel.h>  /* def. of N_Vector, macro NV_DATA_P  */
+#include <sundials/sundials_dense.h>   /* prototypes for small dense fcts. */
+#include <sundials/sundials_types.h>   /* definitions of realtype, booleantype */
+#include <sundials/sundials_math.h>    /* definition of macros SUNSQR and EXP */
+#include <mpi.h>                       /* MPI constants and types */
+
+/* Problem Constants */
+#define NVARS        2                    /* number of species         */
+#define KH           RCONST(4.0e-6)       /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)        /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)       /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)     /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)        /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)        /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)        /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           RCONST(0.0)          /* initial time */
+#define NOUT         12                   /* number of output times */
+#define TWOHR        RCONST(7200.0)       /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)       /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898)  /* pi */ 
+
+#define XMIN         RCONST(0.0)          /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define YMIN         RCONST(30.0)         /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+
+#define NPEX         2                    /* no. PEs in x direction of PE array */
+#define NPEY         2                    /* no. PEs in y direction of PE array */
+                                          /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5                    /* no. x points per subgrid */
+#define MYSUB        5                    /* no. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)         /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)         /* MY = number of y mesh points */
+                                          /* Spatial mesh is MX by MY */
+
+/* ARKodeInit Constants */
+#define RTOL    RCONST(1.0e-5)            /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)             /* value of C1 or C2 at which tolerances */
+                                          /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)              /* scalar absolute tolerance */
+
+
+/* User-defined matrix accessor macro: IJth 
+
+   IJth is defined in order to write code which indexes into dense
+   matrices with a (row,column) pair, where 1 <= row,column <= NVARS.   
+
+   IJth(a,i,j) references the (i,j)th entry of the small matrix realtype **a,
+   where 1 <= i,j <= NVARS. The small matrix routines in sundials_dense.h
+   work with matrices stored by column in a 2-dimensional array. In C,
+   arrays are indexed starting at 0, not 1. */
+#define IJth(a,i,j) (a[j-1][i-1])
+
+/* Type : UserData 
+   contains problem constants, preconditioner blocks, pivot arrays, 
+   grid constants, and processor indices, as well as data needed
+   for the preconditiner */
+typedef struct {
+
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+  realtype uext[NVARS*(MXSUB+2)*(MYSUB+2)];
+  int my_pe, isubx, isuby;
+  int nvmxsub, nvmxsub2;
+  MPI_Comm comm;
+
+  /* For preconditioner */
+  realtype **P[MXSUB][MYSUB], **Jbd[MXSUB][MYSUB];
+  long int *pivot[MXSUB][MYSUB];
+
+} *UserData;
+
+/* Private Helper Functions */
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector u, UserData data);
+static void PrintOutput(void *arkode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t);
+static void PrintFinalStats(void *arkode_mem);
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype udata[]);
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[]);
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[]);
+static void ucomm(realtype t, N_Vector u, UserData data);
+static void fcalc(realtype t, realtype udata[], realtype dudata[],
+                  UserData data);
+
+
+/* Functions Called by the Solver */
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data, 
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+static int PSolve(realtype tn, N_Vector u, N_Vector fu, 
+                  N_Vector r, N_Vector z, 
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+
+/***************************** Main Program ******************************/
+int main(int argc, char *argv[])
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *arkode_mem;
+  int iout, flag, my_pe, npes;
+  long int neq, local_N;
+  MPI_Comm comm;
+
+  u = NULL;
+  data = NULL;
+  arkode_mem = NULL;
+
+  /* Set problem size neq */
+  neq = NVARS*MX*MY;
+
+  /* Get processor number and total number of pe's */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  if (npes != NPEX*NPEY) {
+    if (my_pe == 0)
+      fprintf(stderr, "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n\n",
+	      npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+
+  /* Set local length */
+  local_N = NVARS*MXSUB*MYSUB;
+
+  /* Allocate and load user data block; allocate preconditioner block */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  InitUserData(my_pe, comm, data);
+
+  /* Allocate u, and set initial values and tolerances */ 
+  u = N_VNew_Parallel(comm, local_N, neq);
+  if (check_flag((void *)u, "N_VNew", 0, my_pe)) MPI_Abort(comm, 1);
+  SetInitialProfiles(u, data);
+  abstol = ATOL; reltol = RTOL;
+
+  /* Call ARKodeCreate to create the solver memory */
+  arkode_mem = ARKodeCreate();
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set the pointer to user-defined data */
+  flag = ARKodeSetUserData(arkode_mem, data);
+  if (check_flag(&flag, "ARKodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     user's right hand side functions in u'=fe(t,u)+fi(t,u) [here fe is NULL], 
+     the inital time T0, and the initial dependent variable vector u. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, u);
+  if(check_flag(&flag, "ARKodeInit", 1, my_pe)) return(1);
+
+  /* Call ARKodeSetMaxNumSteps to increase default */
+  flag = ARKodeSetMaxNumSteps(arkode_mem, 10000);
+  if (check_flag(&flag, "ARKodeSetMaxNumSteps", 1, my_pe)) return(1);
+
+  /* Call ARKodeSStolerances to specify the scalar relative tolerance
+     and scalar absolute tolerances */
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);
+  if (check_flag(&flag, "ARKodeSStolerances", 1, my_pe)) return(1);
+
+  /* Call ARKSpgmr to specify the linear solver ARKSPGMR 
+     with left preconditioning and the default Krylov dimension maxl */
+  flag = ARKSpgmr(arkode_mem, PREC_LEFT, 0);
+  if (check_flag(&flag, "ARKSpgmr", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set preconditioner setup and solve routines Precond and PSolve, 
+     and the pointer to the user-defined block data */
+  flag = ARKSpilsSetPreconditioner(arkode_mem, Precond, PSolve);
+  if (check_flag(&flag, "ARKSpilsSetPreconditioner", 1, my_pe)) MPI_Abort(comm, 1);
+
+  if (my_pe == 0)
+    printf("\n2-species diurnal advection-diffusion problem\n\n");
+
+  /* In loop over output points, call ARKode, print results, test for error */
+  for (iout=1, tout=TWOHR; iout<=NOUT; iout++, tout+=TWOHR) {
+    flag = ARKode(arkode_mem, tout, u, &t, ARK_NORMAL);
+    if (check_flag(&flag, "ARKode", 1, my_pe)) break;
+    PrintOutput(arkode_mem, my_pe, comm, u, t);
+  }
+
+  /* Print final statistics */  
+  if (my_pe == 0) PrintFinalStats(arkode_mem);
+
+  /* Free memory */
+  N_VDestroy_Parallel(u);
+  FreeUserData(data);
+  ARKodeFree(&arkode_mem);
+  MPI_Finalize();
+  return(0);
+}
+
+/*********************** Private Helper Functions ************************/
+
+/* Load constants in data */
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data)
+{
+  int isubx, isuby;
+  int lx, ly;
+
+  /* Set problem constants */
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/((realtype)(MX-1));
+  data->dy = (YMAX-YMIN)/((realtype)(MY-1));
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(RCONST(2.0)*data->dx);
+  data->vdco = (RCONST(1.0)/SUNSQR(data->dy))*KV0;
+
+  /* Set machine-related constants */
+  data->comm = comm;
+  data->my_pe = my_pe;
+
+  /* isubx and isuby are the PE grid indices corresponding to my_pe */
+  isuby = my_pe/NPEX;
+  isubx = my_pe - isuby*NPEX;
+  data->isubx = isubx;
+  data->isuby = isuby;
+
+  /* Set the sizes of a boundary x-line in u and uext */
+  data->nvmxsub = NVARS*MXSUB;
+  data->nvmxsub2 = NVARS*(MXSUB+2);
+
+  /* Preconditioner-related fields */
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      (data->P)[lx][ly] = newDenseMat(NVARS, NVARS);
+      (data->Jbd)[lx][ly] = newDenseMat(NVARS, NVARS);
+      (data->pivot)[lx][ly] = newLintArray(NVARS);
+    }
+  }
+}
+
+/* Free user data memory */
+static void FreeUserData(UserData data)
+{
+  int lx, ly;
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      destroyMat((data->P)[lx][ly]);
+      destroyMat((data->Jbd)[lx][ly]);
+      destroyArray((data->pivot)[lx][ly]);
+    }
+  }
+  free(data);
+}
+
+/* Set initial conditions in u */
+static void SetInitialProfiles(N_Vector u, UserData data)
+{
+  int isubx, isuby, lx, ly, jx, jy;
+  long int offset;
+  realtype dx, dy, x, y, cx, cy, xmid, ymid;
+  realtype *udata;
+
+  /* Set pointer to data array in vector u */
+  udata = N_VGetArrayPointer(u);
+
+  /* Get mesh spacings, and subgrid indices for this PE */
+  dx = data->dx;         dy = data->dy;
+  isubx = data->isubx;   isuby = data->isuby;
+
+  /* Load initial profiles of c1 and c2 into local u vector.
+  Here lx and ly are local mesh point indices on the local subgrid,
+  and jx and jy are the global mesh point indices. */
+  offset = 0;
+  xmid = RCONST(0.5)*(XMIN + XMAX);
+  ymid = RCONST(0.5)*(YMIN + YMAX);
+  for (ly = 0; ly < MYSUB; ly++) {
+    jy = ly + isuby*MYSUB;
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - ymid));
+    cy = RCONST(1.0) - cy + RCONST(0.5)*SUNSQR(cy);
+    for (lx = 0; lx < MXSUB; lx++) {
+      jx = lx + isubx*MXSUB;
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - xmid));
+      cx = RCONST(1.0) - cx + RCONST(0.5)*SUNSQR(cx);
+      udata[offset  ] = C1_SCALE*cx*cy; 
+      udata[offset+1] = C2_SCALE*cx*cy;
+      offset = offset + 2;
+    }
+  }
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+static void PrintOutput(void *arkode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t)
+{
+  int flag;
+  realtype hu, *udata, tempu[2];
+  int npelast;
+  long int i0, i1, nst;
+  MPI_Status status;
+
+  npelast = NPEX*NPEY - 1;
+  udata = N_VGetArrayPointer(u);
+
+  /* Send c1,c2 at top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NVARS*MXSUB*MYSUB - 2;
+    i1 = i0 + 1;
+    if (npelast != 0)
+      MPI_Send(&udata[i0], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else {
+      tempu[0] = udata[i0];
+      tempu[1] = udata[i1];
+    }
+  }
+
+  /* On PE 0, receive c1,c2 at top right, then print performance data
+     and sampled solution values */ 
+  if (my_pe == 0) {
+    if (npelast != 0)
+      MPI_Recv(&tempu[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    flag = ARKodeGetNumSteps(arkode_mem, &nst);
+    check_flag(&flag, "ARKodeGetNumSteps", 1, my_pe);
+    flag = ARKodeGetLastStep(arkode_mem, &hu);
+    check_flag(&flag, "ARKodeGetLastStep", 1, my_pe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("t = %.2Le   no. steps = %ld   stepsize = %.2Le\n",
+           t, nst, hu);
+    printf("At bottom left:  c1, c2 = %12.3Le %12.3Le \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3Le %12.3Le \n\n", tempu[0], tempu[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("t = %.2e   no. steps = %ld   stepsize = %.2e\n",
+           t, nst, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#else
+    printf("t = %.2e   no. steps = %ld   stepsize = %.2e\n",
+           t, nst, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#endif
+  }
+}
+
+/* Print final statistics contained in iopt */
+static void PrintFinalStats(void *arkode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nfi, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = ARKodeGetWorkSpace(arkode_mem, &lenrw, &leniw);
+  check_flag(&flag, "ARKodeGetWorkSpace", 1, 0);
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1, 0);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1, 0);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1, 0);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1, 0);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1, 0);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1, 0);
+
+  flag = ARKSpilsGetWorkSpace(arkode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "ARKSpilsGetWorkSpace", 1, 0);
+  flag = ARKSpilsGetNumLinIters(arkode_mem, &nli);
+  check_flag(&flag, "ARKSpilsGetNumLinIters", 1, 0);
+  flag = ARKSpilsGetNumPrecEvals(arkode_mem, &npe);
+  check_flag(&flag, "ARKSpilsGetNumPrecEvals", 1, 0);
+  flag = ARKSpilsGetNumPrecSolves(arkode_mem, &nps);
+  check_flag(&flag, "ARKSpilsGetNumPrecSolves", 1, 0);
+  flag = ARKSpilsGetNumConvFails(arkode_mem, &ncfl);
+  check_flag(&flag, "ARKSpilsGetNumConvFails", 1, 0);
+  flag = ARKSpilsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKSpilsGetNumRhsEvals", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwls = %5ld     leniwls = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld     nfe     = %5ld\n", nst, nfe);
+  printf("nfi     = %5ld     nfels   = %5ld\n", nfi, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n", nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n", nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n", npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl); 
+}
+ 
+/* Routine to send boundary data to neighboring PEs */
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype udata[])
+{
+  int i, ly;
+  long int offsetu, offsetbuf;
+  realtype bufleft[NVARS*MYSUB], bufright[NVARS*MYSUB];
+
+  /* If isuby > 0, send data from bottom x-line of u */
+  if (isuby != 0)
+    MPI_Send(&udata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If isuby < NPEY-1, send data from top x-line of u */
+  if (isuby != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&udata[offsetu], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If isubx > 0, send data from left y-line of u (via bufleft) */
+  if (isubx != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = ly*dsizex;
+      for (i = 0; i < NVARS; i++)
+        bufleft[offsetbuf+i] = udata[offsetu+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If isubx < NPEX-1, send data from right y-line of u (via bufright) */
+  if (isubx != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = offsetbuf*MXSUB + (MXSUB-1)*NVARS;
+      for (i = 0; i < NVARS; i++)
+        bufright[offsetbuf+i] = udata[offsetu+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* Routine to start receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[])
+{
+  long int offsetue;
+  /* Have bufleft and bufright use the same buffer */
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Irecv(&uext[NVARS], dsizex, PVEC_REAL_MPI_TYPE,
+    					 my_pe-NPEX, 0, comm, &request[0]);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1) {
+    offsetue = NVARS*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+                                         my_pe+NPEX, 0, comm, &request[1]);
+  }
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe-1, 0, comm, &request[2]);
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe+1, 0, comm, &request[3]);
+  }
+}
+
+/* Routine to finish receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[])
+{
+  int i, ly;
+  long int dsizex2, offsetue, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+  MPI_Status status;
+
+  dsizex2 = dsizex + 2*NVARS;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Wait(&request[0],&status);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+1)*dsizex2;
+      for (i = 0; i < NVARS; i++)
+        uext[offsetue+i] = bufleft[offsetbuf+i];
+    }
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+2)*dsizex2 - NVARS;
+      for (i = 0; i < NVARS; i++)
+	uext[offsetue+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/* ucomm routine.  This routine performs all communication 
+   between processors of data needed to calculate f. */
+
+static void ucomm(realtype t, N_Vector u, UserData data)
+{
+
+  realtype *udata, *uext, buffer[2*NVARS*MYSUB];
+  MPI_Comm comm;
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmysub;
+  MPI_Request request[4];
+
+  udata = N_VGetArrayPointer(u);
+
+  /* Get comm, my_pe, subgrid indices, data sizes, extended array uext */
+  comm = data->comm;  my_pe = data->my_pe;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+  nvmysub = NVARS*MYSUB;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs */
+  BRecvPost(comm, request, my_pe, isubx, isuby, nvmxsub, nvmysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs */
+  BSend(comm, my_pe, isubx, isuby, nvmxsub, nvmysub, udata);
+
+  /* Finish receiving boundary data from neighboring PEs */
+  BRecvWait(request, isubx, isuby, nvmxsub, uext, buffer);
+}
+
+/* fcalc routine. Compute f(t,y).  This routine assumes that communication 
+   between processors of data needed to calculate f has already been done,
+   and this data is in the work array uext. */
+
+static void fcalc(realtype t, realtype udata[],
+                  realtype dudata[], UserData data)
+{
+  realtype *uext;
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  int i, lx, ly, jy;
+  int isubx, isuby;
+  long int nvmxsub, nvmxsub2, offsetu, offsetue;
+
+  /* Get subgrid indices, data sizes, extended work array uext */
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub; nvmxsub2 = data->nvmxsub2;
+  uext = data->uext;
+
+  /* Copy local segment of u vector into the working extended array uext */
+  offsetu = 0;
+  offsetue = nvmxsub2 + NVARS;
+  for (ly = 0; ly < MYSUB; ly++) {
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = udata[offsetu+i];
+    offsetu = offsetu + nvmxsub;
+    offsetue = offsetue + nvmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+  a boundary PE, copy data from the first interior mesh line of u to uext */
+
+  /* If isuby = 0, copy x-line 2 of u to uext */
+  if (isuby == 0) {
+    for (i = 0; i < nvmxsub; i++) uext[NVARS+i] = udata[nvmxsub+i];
+  }
+
+  /* If isuby = NPEY-1, copy x-line MYSUB-1 of u to uext */
+  if (isuby == NPEY-1) {
+    offsetu = (MYSUB-2)*nvmxsub;
+    offsetue = (MYSUB+1)*nvmxsub2 + NVARS;
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = udata[offsetu+i];
+  }
+
+  /* If isubx = 0, copy y-line 2 of u to uext */
+  if (isubx == 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*nvmxsub + NVARS;
+      offsetue = (ly+1)*nvmxsub2;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = udata[offsetu+i];
+    }
+  }
+
+  /* If isubx = NPEX-1, copy y-line MXSUB-1 of u to uext */
+  if (isubx == NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = (ly+1)*nvmxsub - 2*NVARS;
+      offsetue = (ly+2)*nvmxsub2 - NVARS;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = udata[offsetu+i];
+    }
+  }
+
+  /* Make local copies of problem variables, for efficiency */
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Set diurnal rate coefficients as functions of t, and save q4 in 
+  data block for use by preconditioner evaluation routine */
+  s = sin((data->om)*t);
+  if (s > RCONST(0.0)) {
+    q3 = SUNRexp(-A3/s);
+    q4coef = SUNRexp(-A4/s);
+  } else {
+    q3 = RCONST(0.0);
+    q4coef = RCONST(0.0);
+  }
+  data->q4 = q4coef;
+
+  /* Loop over all grid points in local subgrid */
+  for (ly = 0; ly < MYSUB; ly++) {
+
+    jy = ly + isuby*MYSUB;
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    for (lx = 0; lx < MXSUB; lx++) {
+
+      /* Extract c1 and c2, and set kinetic rate terms */
+      offsetue = (lx+1)*NVARS + (ly+1)*nvmxsub2;
+      c1 = uext[offsetue];
+      c2 = uext[offsetue+1];
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + RCONST(2.0)*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms */
+      c1dn = uext[offsetue-nvmxsub2];
+      c2dn = uext[offsetue-nvmxsub2+1];
+      c1up = uext[offsetue+nvmxsub2];
+      c2up = uext[offsetue+nvmxsub2+1];
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms */
+      c1lt = uext[offsetue-2];
+      c2lt = uext[offsetue-1];
+      c1rt = uext[offsetue+2];
+      c2rt = uext[offsetue+3];
+      hord1 = hordco*(c1rt - RCONST(2.0)*c1 + c1lt);
+      hord2 = hordco*(c2rt - RCONST(2.0)*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into dudata */
+      offsetu = lx*NVARS + ly*nvmxsub;
+      dudata[offsetu]   = vertd1 + hord1 + horad1 + rkin1; 
+      dudata[offsetu+1] = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+}
+
+
+/***************** Functions Called by the Solver *************************/
+
+/* f routine.  Evaluate f(t,y).  First call ucomm to do communication of 
+   subgrid boundary data into uext.  Then calculate f by a call to fcalc. */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype *udata, *dudata;
+  UserData data;
+
+  udata = N_VGetArrayPointer(u);
+  dudata = N_VGetArrayPointer(udot);
+  data = (UserData) user_data;
+
+  /* Call ucomm to do inter-processor communication */
+  ucomm(t, u, data);
+
+  /* Call fcalc to calculate all right-hand sides */
+  fcalc(t, udata, dudata, data);
+
+  return(0);
+}
+
+/* Preconditioner setup routine. Generate and preprocess P. */
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data, 
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype c1, c2, cydn, cyup, diag, ydn, yup, q4coef, dely, verdco, hordco;
+  realtype **(*P)[MYSUB], **(*Jbd)[MYSUB];
+  int nvmxsub, ier, offset;
+  long int *(*pivot)[MYSUB];
+  int lx, ly, jy, isuby;
+  realtype *udata, **a, **j;
+  UserData data;
+
+  /* Make local copies of pointers in user_data, pointer to u's data,
+     and PE index pair */
+  data = (UserData) user_data;
+  P = data->P;
+  Jbd = data->Jbd;
+  pivot = data->pivot;
+  udata = N_VGetArrayPointer(u);
+  isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+
+  if (jok) {
+
+  /* jok = TRUE: Copy Jbd to P */
+    for (ly = 0; ly < MYSUB; ly++)
+      for (lx = 0; lx < MXSUB; lx++)
+        denseCopy(Jbd[lx][ly], P[lx][ly], NVARS, NVARS);
+
+  *jcurPtr = FALSE;
+
+  }
+
+  else {
+
+  /* jok = FALSE: Generate Jbd from scratch and copy to P */
+
+  /* Make local copies of problem variables, for efficiency */
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+
+  /* Compute 2x2 diagonal Jacobian blocks (using q4 values 
+     computed on the last f call).  Load into P. */
+    for (ly = 0; ly < MYSUB; ly++) {
+      jy = ly + isuby*MYSUB;
+      ydn = YMIN + (jy - RCONST(0.5))*dely;
+      yup = ydn + dely;
+      cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+      cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+      diag = -(cydn + cyup + RCONST(2.0)*hordco);
+      for (lx = 0; lx < MXSUB; lx++) {
+        offset = lx*NVARS + ly*nvmxsub;
+        c1 = udata[offset];
+        c2 = udata[offset+1];
+        j = Jbd[lx][ly];
+        a = P[lx][ly];
+        IJth(j,1,1) = (-Q1*C3 - Q2*c2) + diag;
+        IJth(j,1,2) = -Q2*c1 + q4coef;
+        IJth(j,2,1) = Q1*C3 - Q2*c2;
+        IJth(j,2,2) = (-Q2*c1 - q4coef) + diag;
+        denseCopy(j, a, NVARS, NVARS);
+      }
+    }
+
+  *jcurPtr = TRUE;
+
+  }
+
+  /* Scale by -gamma */
+    for (ly = 0; ly < MYSUB; ly++)
+      for (lx = 0; lx < MXSUB; lx++)
+        denseScale(-gamma, P[lx][ly], NVARS, NVARS);
+
+  /* Add identity matrix and do LU decompositions on blocks in place */
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      denseAddIdentity(P[lx][ly], NVARS);
+      ier = denseGETRF(P[lx][ly], NVARS, NVARS, pivot[lx][ly]);
+      if (ier != 0) return(1);
+    }
+  }
+
+  return(0);
+}
+
+/* Preconditioner solve routine */
+static int PSolve(realtype tn, N_Vector u, N_Vector fu, 
+                  N_Vector r, N_Vector z, 
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype **(*P)[MYSUB];
+  int nvmxsub;
+  long int *(*pivot)[MYSUB];
+  int lx, ly;
+  realtype *zdata, *v;
+  UserData data;
+
+  /* Extract the P and pivot arrays from user_data */
+  data = (UserData) user_data;
+  P = data->P;
+  pivot = data->pivot;
+
+  /* Solve the block-diagonal system Px = r using LU factors stored
+     in P and pivot data in pivot, and return the solution in z.
+     First copy vector r to z. */
+  N_VScale(RCONST(1.0), r, z);
+
+  nvmxsub = data->nvmxsub;
+  zdata = N_VGetArrayPointer(z);
+
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      v = &(zdata[lx*NVARS + ly*nvmxsub]);
+      denseGETRS(P[lx][ly], NVARS, pivot[lx][ly], v);
+    }
+  }
+
+  return(0);
+}
+
+
+/*********************** Private Helper Function ************************/
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+	      id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/arkode/C_parallel/ark_diurnal_kry_p.out b/examples/arkode/C_parallel/ark_diurnal_kry_p.out
new file mode 100644
index 0000000..de34bc8
--- /dev/null
+++ b/examples/arkode/C_parallel/ark_diurnal_kry_p.out
@@ -0,0 +1,63 @@
+
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 979   stepsize = 3.07e+00
+At bottom left:  c1, c2 =    1.047e+04    2.527e+11 
+At top right:    c1, c2 =    1.119e+04    2.700e+11 
+
+t = 1.44e+04   no. steps = 2735   stepsize = 6.93e+00
+At bottom left:  c1, c2 =    6.659e+06    2.582e+11 
+At top right:    c1, c2 =    7.301e+06    2.833e+11 
+
+t = 2.16e+04   no. steps = 3533   stepsize = 1.05e+01
+At bottom left:  c1, c2 =    2.665e+07    2.993e+11 
+At top right:    c1, c2 =    2.931e+07    3.313e+11 
+
+t = 2.88e+04   no. steps = 4593   stepsize = 3.95e+00
+At bottom left:  c1, c2 =    8.702e+06    3.380e+11 
+At top right:    c1, c2 =    9.650e+06    3.751e+11 
+
+t = 3.60e+04   no. steps = 5950   stepsize = 2.56e+00
+At bottom left:  c1, c2 =    1.404e+04    3.387e+11 
+At top right:    c1, c2 =    1.561e+04    3.765e+11 
+
+t = 4.32e+04   no. steps = 7138   stepsize = 4.42e+02
+At bottom left:  c1, c2 =   -1.581e-07    3.382e+11 
+At top right:    c1, c2 =    1.503e-07    3.804e+11 
+
+t = 5.04e+04   no. steps = 7155   stepsize = 5.12e+02
+At bottom left:  c1, c2 =   -2.237e-17    3.358e+11 
+At top right:    c1, c2 =    9.286e-17    3.864e+11 
+
+t = 5.76e+04   no. steps = 7170   stepsize = 3.90e+02
+At bottom left:  c1, c2 =    4.963e-18    3.320e+11 
+At top right:    c1, c2 =   -1.508e-17    3.909e+11 
+
+t = 6.48e+04   no. steps = 7184   stepsize = 5.91e+02
+At bottom left:  c1, c2 =   -3.047e-20    3.313e+11 
+At top right:    c1, c2 =   -1.306e-18    3.963e+11 
+
+t = 7.20e+04   no. steps = 7196   stepsize = 5.91e+02
+At bottom left:  c1, c2 =    2.184e-19    3.330e+11 
+At top right:    c1, c2 =   -6.748e-18    4.039e+11 
+
+t = 7.92e+04   no. steps = 7208   stepsize = 5.91e+02
+At bottom left:  c1, c2 =    6.659e-19    3.334e+11 
+At top right:    c1, c2 =   -6.289e-18    4.120e+11 
+
+t = 8.64e+04   no. steps = 7220   stepsize = 5.91e+02
+At bottom left:  c1, c2 =   -2.252e-28    3.352e+11 
+At top right:    c1, c2 =   -1.129e-28    4.163e+11 
+
+
+Final Statistics: 
+
+lenrw   =  3058     leniw   =   160
+lenrwls =  2046     leniwls =    80
+nst     =  7220     nfe     =     0
+nfi     = 75855     nfels   = 88509
+nni     = 39606     nli     = 88509
+nsetups =   442     netf    =    29
+npe     =   122     nps     = 125772
+ncfn    =     0     ncfl    =     0
+
diff --git a/examples/arkode/C_parhyp/CMakeLists.txt b/examples/arkode/C_parhyp/CMakeLists.txt
new file mode 100644
index 0000000..b34b640
--- /dev/null
+++ b/examples/arkode/C_parhyp/CMakeLists.txt
@@ -0,0 +1,146 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for ARKODE parhyp C examples
+
+
+# Add variable ARKODE_examples with the names of the parhyp ARKODE examples
+# "name\;nodes\;tasks"
+SET(ARKODE_examples
+  "ark_diurnal_kry_ph\;1\;4"
+#  "ark_diurnal_kry_bbd_ph\;1\;4"
+  )
+
+# Add variable ARKODE_extras with the names of auxiliary files to install
+SET(ARKODE_extras
+  # none yet
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the C compiler to the MPICC script.
+# If not, then add the MPI include directory for MPI headers.
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_static)
+  SET(NVECP_LIB sundials_nvecparhyp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_shared)
+  SET(NVECP_LIB sundials_nvecparhyp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+SET(SUNDIALS_LIBS ${ARKODE_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+SET(HYPRE_LIBS ${HYPRE_LIBRARIES})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each ARKODE example
+FOREACH(example_tuple ${ARKODE_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  TARGET_LINK_LIBRARIES(${example} ${HYPRE_LIBS})
+  IF(NOT MPI_MPICC)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPICC)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_parhyp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${ARKODE_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_parhyp)
+
+  # Install the extra files
+  FOREACH(extrafile ${ARKODE_extras})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_parhyp)
+  ENDFOREACH(extrafile ${ARKODE_extras})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "ARKODE")
+  SET(SOLVER_LIB "sundials_arkode")
+  FOREACH(example_tuple ${ARKODE_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${ARKODE_examples})
+
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parhyp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/C_parhyp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/arkode/C_parhyp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_parhyp 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parhyp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/C_parhyp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/arkode/C_parhyp/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_parhyp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/arkode/C_parhyp/README b/examples/arkode/C_parhyp/README
new file mode 100644
index 0000000..20608f4
--- /dev/null
+++ b/examples/arkode/C_parhyp/README
@@ -0,0 +1,50 @@
+List of parallel ARKODE C examples
+
+  ark_diurnal_kry_ph     : 2-D 2-species diurnal advection-diffusion
+
+Sample results:
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/arkode/C_parhyp/ark_diurnal_kry_ph.c b/examples/arkode/C_parhyp/ark_diurnal_kry_ph.c
new file mode 100644
index 0000000..f8df6a2
--- /dev/null
+++ b/examples/arkode/C_parhyp/ark_diurnal_kry_ph.c
@@ -0,0 +1,1009 @@
+/*-----------------------------------------------------------------
+ * $Revision$
+ * $Date$
+ * -----------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds, Jean Sexton @ SMU
+ *                Slaven Peles @ LLNL
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * mesh, with simple polynomial initial profiles.
+ *
+ * The problem is solved by ARKODE on NPE processors, treated
+ * as a rectangular process grid of size NPEX by NPEY, with
+ * NPE = NPEX*NPEY. Each processor contains a subgrid of size MXSUB
+ * by MYSUB of the (x,y) mesh.  Thus the actual mesh sizes are
+ * MX = MXSUB*NPEX and MY = MYSUB*NPEY, and the ODE system size is
+ * neq = 2*MX*MY.
+ *
+ * The solution is done with the DIRK/GMRES method (i.e. using the
+ * ARKSPGMR linear solver) and the block-diagonal part of the
+ * Newton matrix as a left preconditioner. A copy of the
+ * block-diagonal part of the Jacobian is saved and conditionally
+ * reused within the preconditioner routine.
+ *
+ * Performance data and sampled solution values are printed at
+ * selected output times, and all performance counters are printed
+ * on completion.
+ *
+ * This example uses Hypre vector and MPI parallelization. User is 
+ * expected to be familiar with the Hypre library. 
+ * 
+ * Execution: mpiexec -n N ark_diurnal_kry_p   with N = NPEX*NPEY
+ * (see constants below).
+ *---------------------------------------------------------------*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <arkode/arkode.h>             /* prototypes for ARKODE fcts. */
+#include <arkode/arkode_spgmr.h>       /* prototypes & constants for ARKSPGMR  */
+#include <nvector/nvector_parhyp.h>    /* declaration of N_Vector  */
+#include <sundials/sundials_dense.h>   /* prototypes for small dense fcts. */
+#include <sundials/sundials_types.h>   /* definitions of realtype, booleantype */
+#include <sundials/sundials_math.h>    /* definition of macros SUNSQR and EXP */
+#include <mpi.h>                       /* MPI constants and types */
+
+#include <HYPRE.h>
+#include <HYPRE_IJ_mv.h>
+
+/* Problem Constants */
+#define NVARS        2                    /* number of species         */
+#define KH           RCONST(4.0e-6)       /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)        /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)       /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)     /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)        /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)        /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)        /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           RCONST(0.0)          /* initial time */
+#define NOUT         12                   /* number of output times */
+#define TWOHR        RCONST(7200.0)       /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)       /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898)  /* pi */ 
+
+#define XMIN         RCONST(0.0)          /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define YMIN         RCONST(30.0)         /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+
+#define NPEX         2                    /* no. PEs in x direction of PE array */
+#define NPEY         2                    /* no. PEs in y direction of PE array */
+                                          /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5                    /* no. x points per subgrid */
+#define MYSUB        5                    /* no. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)         /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)         /* MY = number of y mesh points */
+                                          /* Spatial mesh is MX by MY */
+
+/* ARKodeInit Constants */
+#define RTOL    RCONST(1.0e-5)            /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)             /* value of C1 or C2 at which tolerances */
+                                          /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)              /* scalar absolute tolerance */
+
+
+/* User-defined matrix accessor macro: IJth 
+
+   IJth is defined in order to write code which indexes into dense
+   matrices with a (row,column) pair, where 1 <= row,column <= NVARS.   
+
+   IJth(a,i,j) references the (i,j)th entry of the small matrix realtype **a,
+   where 1 <= i,j <= NVARS. The small matrix routines in sundials_dense.h
+   work with matrices stored by column in a 2-dimensional array. In C,
+   arrays are indexed starting at 0, not 1. */
+#define IJth(a,i,j) (a[j-1][i-1])
+
+/* Type : UserData 
+   contains problem constants, preconditioner blocks, pivot arrays, 
+   grid constants, and processor indices, as well as data needed
+   for the preconditiner */
+typedef struct {
+
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+  realtype uext[NVARS*(MXSUB+2)*(MYSUB+2)];
+  int my_pe, isubx, isuby;
+  int nvmxsub, nvmxsub2;
+  MPI_Comm comm;
+
+  /* For preconditioner */
+  realtype **P[MXSUB][MYSUB], **Jbd[MXSUB][MYSUB];
+  long int *pivot[MXSUB][MYSUB];
+
+} *UserData;
+
+/* Private Helper Functions */
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(HYPRE_IJVector Uij, UserData data, long int local_length, 
+                               long int my_base);
+static void PrintOutput(void *arkode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t);
+static void PrintFinalStats(void *arkode_mem);
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype udata[]);
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+                      long int dsizex, long int dsizey,
+                      realtype uext[], realtype buffer[]);
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[]);
+static void ucomm(realtype t, N_Vector u, UserData data);
+static void fcalc(realtype t, realtype udata[], realtype dudata[],
+                  UserData data);
+
+
+/* Functions Called by the Solver */
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data, 
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+static int PSolve(realtype tn, N_Vector u, N_Vector fu, 
+                  N_Vector r, N_Vector z, 
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+
+/***************************** Main Program ******************************/
+int main(int argc, char *argv[])
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *arkode_mem;
+  int iout, flag;
+  MPI_Comm comm;
+  
+  HYPRE_Int local_N, npes, my_pe;
+  HYPRE_ParVector Upar; /* Declare HYPRE parallel vector */
+  HYPRE_IJVector  Uij;  /* Declare "IJ" interface to HYPRE vector */
+
+  u = NULL;
+  data = NULL;
+  arkode_mem = NULL;
+
+  /* Set problem size neq */
+  /* neq = NVARS*MX*MY;   */
+
+  /* Get processor number and total number of pe's */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  if (npes != NPEX*NPEY) {
+    if (my_pe == 0)
+      fprintf(stderr, "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n\n",
+              npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+
+  /* Set local length */
+  local_N = NVARS*MXSUB*MYSUB;
+
+  /* Allocate hypre vector */
+  HYPRE_IJVectorCreate(comm, my_pe*local_N, (my_pe + 1)*local_N - 1, &Uij);
+  HYPRE_IJVectorSetObjectType(Uij, HYPRE_PARCSR);
+  HYPRE_IJVectorInitialize(Uij);
+
+  /* Allocate and load user data block; allocate preconditioner block */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  InitUserData(my_pe, comm, data);
+
+  /* Set initial values and allocate u */ 
+  SetInitialProfiles(Uij, data, local_N, my_pe*local_N);
+  HYPRE_IJVectorAssemble(Uij);
+  HYPRE_IJVectorGetObject(Uij, (void**) &Upar);
+
+  u = N_VMake_ParHyp(Upar);  /* Create wrapper u around hypre vector */
+  if (check_flag((void *)u, "N_VNew", 0, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set tolerances */
+  abstol = ATOL; reltol = RTOL;
+
+  /* Call ARKodeCreate to create the solver memory */
+  arkode_mem = ARKodeCreate();
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set the pointer to user-defined data */
+  flag = ARKodeSetUserData(arkode_mem, data);
+  if (check_flag(&flag, "ARKodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     user's right hand side functions in u'=fe(t,u)+fi(t,u) [here fe is NULL], 
+     the inital time T0, and the initial dependent variable vector u. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, u);
+  if(check_flag(&flag, "ARKodeInit", 1, my_pe)) return(1);
+
+  /* Call ARKodeSetMaxNumSteps to increase default */
+  flag = ARKodeSetMaxNumSteps(arkode_mem, 1000000);
+  if (check_flag(&flag, "ARKodeSetMaxNumSteps", 1, my_pe)) return(1);
+
+  /* Call ARKodeSStolerances to specify the scalar relative tolerance
+     and scalar absolute tolerances */
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);
+  if (check_flag(&flag, "ARKodeSStolerances", 1, my_pe)) return(1);
+
+  /* Call ARKSpgmr to specify the linear solver ARKSPGMR 
+     with left preconditioning and the default Krylov dimension maxl */
+  flag = ARKSpgmr(arkode_mem, PREC_LEFT, 0);
+  if (check_flag(&flag, "ARKSpgmr", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set preconditioner setup and solve routines Precond and PSolve, 
+     and the pointer to the user-defined block data */
+  flag = ARKSpilsSetPreconditioner(arkode_mem, Precond, PSolve);
+  if (check_flag(&flag, "ARKSpilsSetPreconditioner", 1, my_pe)) MPI_Abort(comm, 1);
+
+  if (my_pe == 0)
+    printf("\n2-species diurnal advection-diffusion problem\n\n");
+
+  /* In loop over output points, call ARKode, print results, test for error */
+  for (iout=1, tout=TWOHR; iout<=NOUT; iout++, tout+=TWOHR) {
+    flag = ARKode(arkode_mem, tout, u, &t, ARK_NORMAL);
+    if (check_flag(&flag, "ARKode", 1, my_pe)) break;
+    PrintOutput(arkode_mem, my_pe, comm, u, t);
+  }
+
+  /* Print final statistics */  
+  if (my_pe == 0) PrintFinalStats(arkode_mem);
+
+  /* Free memory */
+  N_VDestroy(u);              /* Free hypre vector wrapper */
+  HYPRE_IJVectorDestroy(Uij); /* Free the underlying hypre vector */
+  FreeUserData(data);
+  ARKodeFree(&arkode_mem);
+  MPI_Finalize();
+  return(0);
+}
+
+/*********************** Private Helper Functions ************************/
+
+/* Load constants in data */
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data)
+{
+  int isubx, isuby;
+  int lx, ly;
+
+  /* Set problem constants */
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/((realtype)(MX-1));
+  data->dy = (YMAX-YMIN)/((realtype)(MY-1));
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(RCONST(2.0)*data->dx);
+  data->vdco = (RCONST(1.0)/SUNSQR(data->dy))*KV0;
+
+  /* Set machine-related constants */
+  data->comm = comm;
+  data->my_pe = my_pe;
+
+  /* isubx and isuby are the PE grid indices corresponding to my_pe */
+  isuby = my_pe/NPEX;
+  isubx = my_pe - isuby*NPEX;
+  data->isubx = isubx;
+  data->isuby = isuby;
+
+  /* Set the sizes of a boundary x-line in u and uext */
+  data->nvmxsub = NVARS*MXSUB;
+  data->nvmxsub2 = NVARS*(MXSUB+2);
+
+  /* Preconditioner-related fields */
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      (data->P)[lx][ly] = newDenseMat(NVARS, NVARS);
+      (data->Jbd)[lx][ly] = newDenseMat(NVARS, NVARS);
+      (data->pivot)[lx][ly] = newLintArray(NVARS);
+    }
+  }
+}
+
+/* Free user data memory */
+static void FreeUserData(UserData data)
+{
+  int lx, ly;
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      destroyMat((data->P)[lx][ly]);
+      destroyMat((data->Jbd)[lx][ly]);
+      destroyArray((data->pivot)[lx][ly]);
+    }
+  }
+  free(data);
+}
+
+/* Set initial conditions in u */
+static void SetInitialProfiles(HYPRE_IJVector Uij, UserData data, long int local_length, 
+                               long int my_base)
+{
+  int isubx, isuby, lx, ly, jx, jy;
+  long int offset;
+  realtype dx, dy, x, y, cx, cy, xmid, ymid;
+  realtype *udata;
+  HYPRE_Int *iglobal;
+
+  /* Set pointer to data array in vector u */
+  udata   = (realtype*) malloc(local_length*sizeof(realtype));
+  iglobal = (HYPRE_Int*) malloc(local_length*sizeof(HYPRE_Int));
+  
+
+  /* Get mesh spacings, and subgrid indices for this PE */
+  dx = data->dx;         dy = data->dy;
+  isubx = data->isubx;   isuby = data->isuby;
+
+  /* Load initial profiles of c1 and c2 into local u vector.
+  Here lx and ly are local mesh point indices on the local subgrid,
+  and jx and jy are the global mesh point indices. */
+  offset = 0;
+  xmid = RCONST(0.5)*(XMIN + XMAX);
+  ymid = RCONST(0.5)*(YMIN + YMAX);
+  for (ly = 0; ly < MYSUB; ly++) {
+    jy = ly + isuby*MYSUB;
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - ymid));
+    cy = RCONST(1.0) - cy + RCONST(0.5)*SUNSQR(cy);
+    for (lx = 0; lx < MXSUB; lx++) {
+      jx = lx + isubx*MXSUB;
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - xmid));
+      cx = RCONST(1.0) - cx + RCONST(0.5)*SUNSQR(cx);
+      iglobal[offset] = my_base + offset;
+      udata[offset++] = C1_SCALE*cx*cy; 
+      iglobal[offset] = my_base + offset;
+      udata[offset++] = C2_SCALE*cx*cy;
+    }
+  }
+  HYPRE_IJVectorSetValues(Uij, local_length, iglobal, udata);
+  free(iglobal);
+  free(udata);
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+static void PrintOutput(void *arkode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t)
+{
+  int flag;
+  realtype hu, *udata, tempu[2];
+  int npelast;
+  long int i0, i1, nst;
+  MPI_Status status;
+  HYPRE_ParVector uhyp;
+  
+  npelast = NPEX*NPEY - 1;
+
+  uhyp  = N_VGetVector_ParHyp(u);
+  udata = hypre_VectorData(hypre_ParVectorLocalVector(uhyp));
+
+  /* Send c1,c2 at top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NVARS*MXSUB*MYSUB - 2;
+    i1 = i0 + 1;
+    if (npelast != 0)
+      MPI_Send(&udata[i0], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else {
+      tempu[0] = udata[i0];
+      tempu[1] = udata[i1];
+    }
+  }
+
+  /* On PE 0, receive c1,c2 at top right, then print performance data
+     and sampled solution values */ 
+  if (my_pe == 0) {
+    if (npelast != 0)
+      MPI_Recv(&tempu[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    flag = ARKodeGetNumSteps(arkode_mem, &nst);
+    check_flag(&flag, "ARKodeGetNumSteps", 1, my_pe);
+    flag = ARKodeGetLastStep(arkode_mem, &hu);
+    check_flag(&flag, "ARKodeGetLastStep", 1, my_pe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("t = %.2Le   no. steps = %ld   stepsize = %.2Le\n",
+           t, nst, hu);
+    printf("At bottom left:  c1, c2 = %12.3Le %12.3Le \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3Le %12.3Le \n\n", tempu[0], tempu[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("t = %.2e   no. steps = %ld   stepsize = %.2e\n",
+           t, nst, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#else
+    printf("t = %.2e   no. steps = %ld   stepsize = %.2e\n",
+           t, nst, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#endif
+  }
+}
+
+/* Print final statistics contained in iopt */
+static void PrintFinalStats(void *arkode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nfi, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = ARKodeGetWorkSpace(arkode_mem, &lenrw, &leniw);
+  check_flag(&flag, "ARKodeGetWorkSpace", 1, 0);
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1, 0);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1, 0);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1, 0);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1, 0);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1, 0);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1, 0);
+
+  flag = ARKSpilsGetWorkSpace(arkode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "ARKSpilsGetWorkSpace", 1, 0);
+  flag = ARKSpilsGetNumLinIters(arkode_mem, &nli);
+  check_flag(&flag, "ARKSpilsGetNumLinIters", 1, 0);
+  flag = ARKSpilsGetNumPrecEvals(arkode_mem, &npe);
+  check_flag(&flag, "ARKSpilsGetNumPrecEvals", 1, 0);
+  flag = ARKSpilsGetNumPrecSolves(arkode_mem, &nps);
+  check_flag(&flag, "ARKSpilsGetNumPrecSolves", 1, 0);
+  flag = ARKSpilsGetNumConvFails(arkode_mem, &ncfl);
+  check_flag(&flag, "ARKSpilsGetNumConvFails", 1, 0);
+  flag = ARKSpilsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKSpilsGetNumRhsEvals", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwls = %5ld     leniwls = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld     nfe     = %5ld\n", nst, nfe);
+  printf("nfi     = %5ld     nfels   = %5ld\n", nfi, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n", nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n", nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n", npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl); 
+}
+ 
+/* Routine to send boundary data to neighboring PEs */
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype udata[])
+{
+  int i, ly;
+  long int offsetu, offsetbuf;
+  realtype bufleft[NVARS*MYSUB], bufright[NVARS*MYSUB];
+
+  /* If isuby > 0, send data from bottom x-line of u */
+  if (isuby != 0)
+    MPI_Send(&udata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If isuby < NPEY-1, send data from top x-line of u */
+  if (isuby != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&udata[offsetu], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If isubx > 0, send data from left y-line of u (via bufleft) */
+  if (isubx != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = ly*dsizex;
+      for (i = 0; i < NVARS; i++)
+        bufleft[offsetbuf+i] = udata[offsetu+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If isubx < NPEX-1, send data from right y-line of u (via bufright) */
+  if (isubx != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = offsetbuf*MXSUB + (MXSUB-1)*NVARS;
+      for (i = 0; i < NVARS; i++)
+        bufright[offsetbuf+i] = udata[offsetu+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* Routine to start receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+                      long int dsizex, long int dsizey,
+                      realtype uext[], realtype buffer[])
+{
+  long int offsetue;
+  /* Have bufleft and bufright use the same buffer */
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Irecv(&uext[NVARS], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1) {
+    offsetue = NVARS*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+                                         my_pe+NPEX, 0, comm, &request[1]);
+  }
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe-1, 0, comm, &request[2]);
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe+1, 0, comm, &request[3]);
+  }
+}
+
+/* Routine to finish receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[])
+{
+  int i, ly;
+  long int dsizex2, offsetue, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+  MPI_Status status;
+
+  dsizex2 = dsizex + 2*NVARS;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Wait(&request[0],&status);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+1)*dsizex2;
+      for (i = 0; i < NVARS; i++)
+        uext[offsetue+i] = bufleft[offsetbuf+i];
+    }
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+2)*dsizex2 - NVARS;
+      for (i = 0; i < NVARS; i++)
+        uext[offsetue+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+
+/* ucomm routine.  This routine performs all communication 
+   between processors of data needed to calculate f. */
+
+static void ucomm(realtype t, N_Vector u, UserData data)
+{
+
+  realtype *udata, *uext, buffer[2*NVARS*MYSUB];
+  MPI_Comm comm;
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmysub;
+  MPI_Request request[4];
+  HYPRE_ParVector uhyp;
+  
+  uhyp  = N_VGetVector_ParHyp(u);
+  udata = hypre_VectorData(hypre_ParVectorLocalVector(uhyp));
+
+  /* Get comm, my_pe, subgrid indices, data sizes, extended array uext */
+  comm = data->comm;  my_pe = data->my_pe;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+  nvmysub = NVARS*MYSUB;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs */
+  BRecvPost(comm, request, my_pe, isubx, isuby, nvmxsub, nvmysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs */
+  BSend(comm, my_pe, isubx, isuby, nvmxsub, nvmysub, udata);
+
+  /* Finish receiving boundary data from neighboring PEs */
+  BRecvWait(request, isubx, isuby, nvmxsub, uext, buffer);
+}
+
+
+/* fcalc routine. Compute f(t,y).  This routine assumes that communication 
+   between processors of data needed to calculate f has already been done,
+   and this data is in the work array uext. */
+
+static void fcalc(realtype t, realtype udata[],
+                  realtype dudata[], UserData data)
+{
+  realtype *uext;
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  int i, lx, ly, jy;
+  int isubx, isuby;
+  long int nvmxsub, nvmxsub2, offsetu, offsetue;
+
+  /* Get subgrid indices, data sizes, extended work array uext */
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub; nvmxsub2 = data->nvmxsub2;
+  uext = data->uext;
+
+  /* Copy local segment of u vector into the working extended array uext */
+  offsetu = 0;
+  offsetue = nvmxsub2 + NVARS;
+  for (ly = 0; ly < MYSUB; ly++) {
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = udata[offsetu+i];
+    offsetu = offsetu + nvmxsub;
+    offsetue = offsetue + nvmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+  a boundary PE, copy data from the first interior mesh line of u to uext */
+
+  /* If isuby = 0, copy x-line 2 of u to uext */
+  if (isuby == 0) {
+    for (i = 0; i < nvmxsub; i++) uext[NVARS+i] = udata[nvmxsub+i];
+  }
+
+  /* If isuby = NPEY-1, copy x-line MYSUB-1 of u to uext */
+  if (isuby == NPEY-1) {
+    offsetu = (MYSUB-2)*nvmxsub;
+    offsetue = (MYSUB+1)*nvmxsub2 + NVARS;
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = udata[offsetu+i];
+  }
+
+  /* If isubx = 0, copy y-line 2 of u to uext */
+  if (isubx == 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*nvmxsub + NVARS;
+      offsetue = (ly+1)*nvmxsub2;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = udata[offsetu+i];
+    }
+  }
+
+  /* If isubx = NPEX-1, copy y-line MXSUB-1 of u to uext */
+  if (isubx == NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = (ly+1)*nvmxsub - 2*NVARS;
+      offsetue = (ly+2)*nvmxsub2 - NVARS;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = udata[offsetu+i];
+    }
+  }
+
+  /* Make local copies of problem variables, for efficiency */
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Set diurnal rate coefficients as functions of t, and save q4 in 
+  data block for use by preconditioner evaluation routine */
+  s = sin((data->om)*t);
+  if (s > RCONST(0.0)) {
+    q3 = SUNRexp(-A3/s);
+    q4coef = SUNRexp(-A4/s);
+  } else {
+    q3 = RCONST(0.0);
+    q4coef = RCONST(0.0);
+  }
+  data->q4 = q4coef;
+
+  /* Loop over all grid points in local subgrid */
+  for (ly = 0; ly < MYSUB; ly++) {
+
+    jy = ly + isuby*MYSUB;
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    for (lx = 0; lx < MXSUB; lx++) {
+
+      /* Extract c1 and c2, and set kinetic rate terms */
+      offsetue = (lx+1)*NVARS + (ly+1)*nvmxsub2;
+      c1 = uext[offsetue];
+      c2 = uext[offsetue+1];
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + RCONST(2.0)*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms */
+      c1dn = uext[offsetue-nvmxsub2];
+      c2dn = uext[offsetue-nvmxsub2+1];
+      c1up = uext[offsetue+nvmxsub2];
+      c2up = uext[offsetue+nvmxsub2+1];
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms */
+      c1lt = uext[offsetue-2];
+      c2lt = uext[offsetue-1];
+      c1rt = uext[offsetue+2];
+      c2rt = uext[offsetue+3];
+      hord1 = hordco*(c1rt - RCONST(2.0)*c1 + c1lt);
+      hord2 = hordco*(c2rt - RCONST(2.0)*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into dudata */
+      offsetu = lx*NVARS + ly*nvmxsub;
+      dudata[offsetu]   = vertd1 + hord1 + horad1 + rkin1; 
+      dudata[offsetu+1] = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+}
+
+
+/***************** Functions Called by the Solver *************************/
+
+/* f routine.  Evaluate f(t,y).  First call ucomm to do communication of 
+   subgrid boundary data into uext.  Then calculate f by a call to fcalc. */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype *udata, *udotdata;
+  UserData data;
+  HYPRE_ParVector uhyp;
+  HYPRE_ParVector udothyp;
+  
+  /* Extract hypre vectors */  
+  uhyp  = N_VGetVector_ParHyp(u);
+  udothyp  = N_VGetVector_ParHyp(udot);
+  
+  /* Access hypre vectors local data */
+  udata = hypre_VectorData(hypre_ParVectorLocalVector(uhyp));
+  udotdata = hypre_VectorData(hypre_ParVectorLocalVector(udothyp));
+
+  data = (UserData) user_data;
+
+  /* Call ucomm to do inter-processor communication */
+  ucomm(t, u, data);
+
+  /* Call fcalc to calculate all right-hand sides */
+  fcalc(t, udata, udotdata, data);
+
+  return(0);
+}
+
+
+/* Preconditioner setup routine. Generate and preprocess P. */
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data, 
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype c1, c2, cydn, cyup, diag, ydn, yup, q4coef, dely, verdco, hordco;
+  realtype **(*P)[MYSUB], **(*Jbd)[MYSUB];
+  int nvmxsub, ier, offset;
+  long int *(*pivot)[MYSUB];
+  int lx, ly, jy, isuby;
+  realtype *udata, **a, **j;
+  HYPRE_ParVector uhyp;
+  UserData data;
+  
+  /* Make local copies of pointers in user_data, pointer to u's data,
+     and PE index pair */
+  data = (UserData) user_data;
+  P = data->P;
+  Jbd = data->Jbd;
+  pivot = data->pivot;
+  isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+
+  uhyp  = N_VGetVector_ParHyp(u);
+  udata = hypre_VectorData(hypre_ParVectorLocalVector(uhyp));
+
+  if (jok) {
+
+    /* jok = TRUE: Copy Jbd to P */
+    for (ly = 0; ly < MYSUB; ly++)
+      for (lx = 0; lx < MXSUB; lx++)
+        denseCopy(Jbd[lx][ly], P[lx][ly], NVARS, NVARS);
+
+  *jcurPtr = FALSE;
+
+  }
+
+  else {
+
+    /* jok = FALSE: Generate Jbd from scratch and copy to P */
+
+    /* Make local copies of problem variables, for efficiency */
+    q4coef = data->q4;
+    dely = data->dy;
+    verdco = data->vdco;
+    hordco  = data->hdco;
+    
+    /* Compute 2x2 diagonal Jacobian blocks (using q4 values 
+     c*omputed on the last f call).  Load into P. */
+    for (ly = 0; ly < MYSUB; ly++) {
+      jy = ly + isuby*MYSUB;
+      ydn = YMIN + (jy - RCONST(0.5))*dely;
+      yup = ydn + dely;
+      cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+      cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+      diag = -(cydn + cyup + RCONST(2.0)*hordco);
+      for (lx = 0; lx < MXSUB; lx++) {
+        offset = lx*NVARS + ly*nvmxsub;
+        c1 = udata[offset];
+        c2 = udata[offset+1];
+        j = Jbd[lx][ly];
+        a = P[lx][ly];
+        IJth(j,1,1) = (-Q1*C3 - Q2*c2) + diag;
+        IJth(j,1,2) = -Q2*c1 + q4coef;
+        IJth(j,2,1) = Q1*C3 - Q2*c2;
+        IJth(j,2,2) = (-Q2*c1 - q4coef) + diag;
+        denseCopy(j, a, NVARS, NVARS);
+      }
+    }
+
+    *jcurPtr = TRUE;
+
+  }
+
+  /* Scale by -gamma */
+  for (ly = 0; ly < MYSUB; ly++)
+    for (lx = 0; lx < MXSUB; lx++)
+      denseScale(-gamma, P[lx][ly], NVARS, NVARS);
+
+  /* Add identity matrix and do LU decompositions on blocks in place */
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      denseAddIdentity(P[lx][ly], NVARS);
+      ier = denseGETRF(P[lx][ly], NVARS, NVARS, pivot[lx][ly]);
+      if (ier != 0) return(1);
+    }
+  }
+
+  return(0);
+}
+
+
+/* Preconditioner solve routine */
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu, 
+                  N_Vector r, N_Vector z, 
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype **(*P)[MYSUB];
+  int nvmxsub;
+  long int *(*pivot)[MYSUB];
+  int lx, ly;
+  realtype *zdata, *v;
+  HYPRE_ParVector zhyp;
+  UserData data;
+  
+  /* Extract the P and pivot arrays from user_data */
+  data = (UserData) user_data;
+  P = data->P;
+  pivot = data->pivot;
+
+  /* Solve the block-diagonal system Px = r using LU factors stored
+     in P and pivot data in pivot, and return the solution in z.
+     First copy vector r to z. */
+  N_VScale(RCONST(1.0), r, z);
+
+  nvmxsub = data->nvmxsub;
+  zhyp  = N_VGetVector_ParHyp(z); /* extract hypre vector */
+  zdata = hypre_VectorData(hypre_ParVectorLocalVector(zhyp));
+
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      v = &(zdata[lx*NVARS + ly*nvmxsub]);
+      denseGETRS(P[lx][ly], NVARS, pivot[lx][ly], v);
+    }
+  }
+
+  return(0);
+}
+
+
+/*********************** Private Helper Function ************************/
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) { /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) { /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/arkode/C_parhyp/ark_diurnal_kry_ph.out b/examples/arkode/C_parhyp/ark_diurnal_kry_ph.out
new file mode 100644
index 0000000..de34bc8
--- /dev/null
+++ b/examples/arkode/C_parhyp/ark_diurnal_kry_ph.out
@@ -0,0 +1,63 @@
+
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 979   stepsize = 3.07e+00
+At bottom left:  c1, c2 =    1.047e+04    2.527e+11 
+At top right:    c1, c2 =    1.119e+04    2.700e+11 
+
+t = 1.44e+04   no. steps = 2735   stepsize = 6.93e+00
+At bottom left:  c1, c2 =    6.659e+06    2.582e+11 
+At top right:    c1, c2 =    7.301e+06    2.833e+11 
+
+t = 2.16e+04   no. steps = 3533   stepsize = 1.05e+01
+At bottom left:  c1, c2 =    2.665e+07    2.993e+11 
+At top right:    c1, c2 =    2.931e+07    3.313e+11 
+
+t = 2.88e+04   no. steps = 4593   stepsize = 3.95e+00
+At bottom left:  c1, c2 =    8.702e+06    3.380e+11 
+At top right:    c1, c2 =    9.650e+06    3.751e+11 
+
+t = 3.60e+04   no. steps = 5950   stepsize = 2.56e+00
+At bottom left:  c1, c2 =    1.404e+04    3.387e+11 
+At top right:    c1, c2 =    1.561e+04    3.765e+11 
+
+t = 4.32e+04   no. steps = 7138   stepsize = 4.42e+02
+At bottom left:  c1, c2 =   -1.581e-07    3.382e+11 
+At top right:    c1, c2 =    1.503e-07    3.804e+11 
+
+t = 5.04e+04   no. steps = 7155   stepsize = 5.12e+02
+At bottom left:  c1, c2 =   -2.237e-17    3.358e+11 
+At top right:    c1, c2 =    9.286e-17    3.864e+11 
+
+t = 5.76e+04   no. steps = 7170   stepsize = 3.90e+02
+At bottom left:  c1, c2 =    4.963e-18    3.320e+11 
+At top right:    c1, c2 =   -1.508e-17    3.909e+11 
+
+t = 6.48e+04   no. steps = 7184   stepsize = 5.91e+02
+At bottom left:  c1, c2 =   -3.047e-20    3.313e+11 
+At top right:    c1, c2 =   -1.306e-18    3.963e+11 
+
+t = 7.20e+04   no. steps = 7196   stepsize = 5.91e+02
+At bottom left:  c1, c2 =    2.184e-19    3.330e+11 
+At top right:    c1, c2 =   -6.748e-18    4.039e+11 
+
+t = 7.92e+04   no. steps = 7208   stepsize = 5.91e+02
+At bottom left:  c1, c2 =    6.659e-19    3.334e+11 
+At top right:    c1, c2 =   -6.289e-18    4.120e+11 
+
+t = 8.64e+04   no. steps = 7220   stepsize = 5.91e+02
+At bottom left:  c1, c2 =   -2.252e-28    3.352e+11 
+At top right:    c1, c2 =   -1.129e-28    4.163e+11 
+
+
+Final Statistics: 
+
+lenrw   =  3058     leniw   =   160
+lenrwls =  2046     leniwls =    80
+nst     =  7220     nfe     =     0
+nfi     = 75855     nfels   = 88509
+nni     = 39606     nli     = 88509
+nsetups =   442     netf    =    29
+npe     =   122     nps     = 125772
+ncfn    =     0     ncfl    =     0
+
diff --git a/examples/arkode/C_serial/CMakeLists.txt b/examples/arkode/C_serial/CMakeLists.txt
new file mode 100644
index 0000000..97c3027
--- /dev/null
+++ b/examples/arkode/C_serial/CMakeLists.txt
@@ -0,0 +1,218 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for ARKODE serial examples
+
+# Add variable ARKODE_examples with the names of the serial ARKODE examples
+
+SET(ARKODE_examples
+  ark_analytic
+  ark_analytic_nonlin
+  ark_brusselator
+  ark_brusselator_fp
+  ark_brusselator1D
+  ark_heat1D
+  ark_heat1D_adapt
+  ark_KrylovDemo_prec
+  ark_robertson
+  ark_robertson_root
+  )
+
+# Add variable ARKODE_examples_BL with the names of the serial ARKODE examples
+# that use Lapack
+
+SET(ARKODE_examples_BL
+  )
+
+# Add variable ARKODE_examples_KLU with the names of the serial ARKODE examples
+# that use KLU
+
+SET(ARKODE_examples_KLU
+  ark_brusselator1D_klu
+  )
+
+# Add variable ARKODE_examples_SUPERLUMT with the names of the serial ARKODE examples
+# that use SUPERLUMT
+
+SET(ARKODE_examples_SUPERLUMT
+  ark_brusselator1D_FEM_slu
+  )
+
+# Add variable ARKODE_extras with the names of auxiliary files to install
+
+SET(ARKODE_extras
+  plot_brusselator1D.py
+  plot_brusselator1D_FEM.py
+  plot_heat1D.py
+  plot_heat1D_adapt.py
+  plot_sol.py
+  plot_sol_log.py
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${ARKODE_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each ARKODE example
+
+FOREACH(example ${ARKODE_examples})
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${ARKODE_examples})
+
+# Add the build and install targets for each Lapack ARKODE example (if needed)
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${ARKODE_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${ARKODE_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+# If KLU support is enabled, add the build and install targets for 
+# the examples using KLU
+IF(KLU_FOUND)
+  FOREACH(example ${ARKODE_examples_KLU})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${ARKODE_examples_KLU})
+ENDIF(KLU_FOUND)
+
+# If SuperLUMT support is enabled, add the build and install targets for 
+# the examples using SuperLUMT
+IF(SUPERLUMT_FOUND)
+  FOREACH(example ${ARKODE_examples_SUPERLUMT})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${ARKODE_examples_SUPERLUMT})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_serial)
+
+  # Install the extra files
+  FOREACH(extrafile ${ARKODE_extras})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_serial)
+  ENDFOREACH(extrafile ${ARKODE_extras})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "ARKODE")
+  SET(SOLVER_LIB "sundials_arkode")
+  LIST2STRING(ARKODE_examples EXAMPLES)
+
+  IF(LAPACK_FOUND)
+    LIST2STRING(ARKODE_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  IF(KLU_FOUND)
+    LIST2STRING(ARKODE_examples_KLU EXAMPLES)
+  ENDIF(KLU_FOUND)
+
+  IF(SUPERLUMT_FOUND)
+    LIST2STRING(ARKODE_examples_SUPERLUMT EXAMPLES)
+  ENDIF(SUPERLUMT_FOUND)
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/C_serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/arkode/C_serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/C_serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/arkode/C_serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/C_serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/arkode/C_serial/README b/examples/arkode/C_serial/README
new file mode 100644
index 0000000..91c6135
--- /dev/null
+++ b/examples/arkode/C_serial/README
@@ -0,0 +1,62 @@
+List of serial ARKODE C examples
+
+  ark_analytic              : simple stiff, linear, ODE           (DIRK/DENSE)
+  ark_analytic_nonlin       : simple nonstiff, nonlinear ODE      (ERK)
+  ark_brusselator           : stiff chemical kinetics ODE system  (DIRK/DENSE)
+  ark_brusselator_fp        : stiff chemical kinetics ODE system  (ARK/Fixed point) 
+  ark_brusselator1D         : stiff chemical kinetics PDE system  (DIRK/BAND)
+  ark_brusselator1D_FEM_slu : stiff chemical kinetics PDE, with 
+                              FEM spatial discretization          (DIRK/SuperLU)
+  ark_brusselator1D_klu     : stiff chemical kinetics PDE system  (DIRK/KLU)
+  ark_heat1D                : stiff 1D heat PDE example           (DIRK/PCG)
+  ark_heat1D_adapt          : stiff 1D heat PDE, adaptive mesh    (DIRK/PCG/ARKodeResize)
+  ark_KrylovDemo_prec       : Krylov method demonstration program (SPGMR)
+  ark_robertson             : stiff chemical kinetics ODE system  (DIRK/DENSE)
+  ark_robertson_root        : stiff chemical kinetics ODE system 
+                              with root-finding                   (DIRK/DENSE)
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/arkode/C_serial/ark_KrylovDemo_prec.c b/examples/arkode/C_serial/ark_KrylovDemo_prec.c
new file mode 100644
index 0000000..27c0062
--- /dev/null
+++ b/examples/arkode/C_serial/ark_KrylovDemo_prec.c
@@ -0,0 +1,1155 @@
+/*-----------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Demonstration program for ARKODE - Krylov linear solver.
+ * ODE system from ns-species interaction PDE in 2 dimensions.
+ * 
+ * This program solves a stiff ODE system that arises from a system
+ * of partial differential equations. The PDE system is a food web
+ * population model, with predator-prey interaction and diffusion on
+ * the unit square in two dimensions. The dependent variable vector is:
+ *
+ *        1   2        ns
+ *  c = (c , c , ..., c  )
+ *
+ * and the PDEs are as follows:
+ *
+ *    i               i      i
+ *  dc /dt  =  d(i)*(c    + c   )  +  f (x,y,c)  (i=1,...,ns)
+ *                    xx     yy        i   
+ *
+ * where
+ *
+ *                 i          ns         j
+ *  f (x,y,c)  =  c *(b(i) + sum a(i,j)*c )
+ *   i                       j=1                                         
+ *                                                                       
+ * The number of species is ns = 2*np, with the first np being prey
+ * and the last np being predators. The coefficients a(i,j), b(i),
+ * d(i) are:
+ *
+ *  a(i,i) = -a  (all i)
+ *  a(i,j) = -g  (i <= np, j > np)
+ *  a(i,j) =  e  (i > np, j <= np)
+ *  b(i) =  b*(1 + alpha*x*y)  (i <= np)
+ *  b(i) = -b*(1 + alpha*x*y)  (i > np)
+ *  d(i) = Dprey  (i <= np)
+ *  d(i) = Dpred  (i > np)
+ *
+ * The spatial domain is the unit square. The final time is 10.
+ * The boundary conditions are: normal derivative = 0.
+ * A polynomial in x and y is used to set the initial conditions.
+ *
+ * The PDEs are discretized by central differencing on an MX by MY mesh.
+ *
+ * The resulting ODE system is stiff.
+ *
+ * The ODE system is solved using Newton iteration and the ARKSPGMR
+ * linear solver (scaled preconditioned GMRES).
+ *
+ * The preconditioner matrix used is the product of two matrices:
+ * (1) A matrix, only defined implicitly, based on a fixed number
+ * of Gauss-Seidel iterations using the diffusion terms only.
+ * (2) A block-diagonal matrix based on the partial derivatives
+ * of the interaction terms f only, using block-grouping (computing
+ * only a subset of the ns by ns blocks).
+ *
+ * Four different runs are made for this problem.
+ * The product preconditoner is applied on the left and on the
+ * right. In each case, both the modified and classical Gram-Schmidt
+ * options are tested.
+ * In the series of runs, ARKodeInit and ARKSpgmr are called only
+ * for the first run, whereas ARKodeReInit, ARKSpilsSetPrecType and
+ * ARKSpilsSetGSType are called for each of the remaining three runs.
+ *
+ * A problem description, performance statistics at selected output
+ * times, and final statistics are written to standard output.
+ * On the first run, solution values are also printed at output
+ * times. Error and warning messages are written to standard error,
+ * but there should be no such messages.
+ *
+ * Note: This program requires the dense linear solver functions
+ * newDenseMat, newLintArray, denseAddIdentity, denseGETRF, denseGETRS, 
+ * destroyMat and destroyArray.
+ *
+ * Note: This program assumes the sequential implementation for the
+ * type N_Vector and uses the N_VGetArrayPointer_Serial to gain access 
+ * to the contiguous array of components of an N_Vector.
+ *-------------------------------------------------------------------
+ * Reference: Peter N. Brown and Alan C. Hindmarsh, Reduced Storage
+ * Matrix Methods in Stiff ODE Systems, J. Appl. Math. & Comp., 31
+ * (1989), pp. 40-91.  Also available as Lawrence Livermore National
+ * Laboratory Report UCRL-95088, Rev. 1, June 1987.
+ *-----------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <arkode/arkode.h>           /* main integrator header file */
+#include <arkode/arkode_spgmr.h>     /* prototypes & constants for ARKSPGMR solver */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fct. and macros */
+#include <sundials/sundials_dense.h> /* use generic DENSE solver in preconditioning */
+#include <sundials/sundials_types.h> /* definition of realtype */
+#include <sundials/sundials_math.h>  /* contains the macros ABS and SUNSQR */
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Problem Specification Constants */
+
+#define AA    ONE               /* AA = a */
+#define EE    RCONST(1.0e4)     /* EE = e */
+#define GG    RCONST(0.5e-6)    /* GG = g */
+#define BB    ONE               /* BB = b */
+#define DPREY ONE
+#define DPRED RCONST(0.5)
+#define ALPH  ONE
+#define NP    3
+#define NS    (2*NP)
+
+/* Method Constants */
+
+#define MX    6
+#define MY    6
+#define MXNS  (MX*NS)
+#define AX    ONE
+#define AY    ONE
+#define DX    (AX/(realtype)(MX-1))
+#define DY    (AY/(realtype)(MY-1))
+#define MP    NS
+#define MQ    (MX*MY)
+#define MXMP  (MX*MP)
+#define NGX   2
+#define NGY   2
+#define NGRP  (NGX*NGY)
+#define ITMAX 5
+
+/* CVodeInit Constants */
+
+#define NEQ  (NS*MX*MY)
+#define T0   ZERO
+#define RTOL RCONST(1.0e-5)
+#define ATOL RCONST(1.0e-5)
+
+/* CVSpgmr Constants */
+
+#define MAXL 0     /* => use default = MIN(NEQ, 5)            */
+#define DELT ZERO  /* => use default = 0.05                   */
+
+/* Output Constants */
+
+#define T1        RCONST(1.0e-8)
+#define TOUT_MULT RCONST(10.0)
+#define DTOUT     ONE
+#define NOUT      18
+
+/* Note: The value for species i at mesh point (j,k) is stored in */
+/* component number (i-1) + j*NS + k*NS*MX of an N_Vector,        */
+/* where 1 <= i <= NS, 0 <= j < MX, 0 <= k < MY.                  */
+
+/* Structure for user data */
+
+typedef struct {
+  realtype **P[NGRP];
+  long int *pivot[NGRP];
+  int ns, mxns;
+  int mp, mq, mx, my, ngrp, ngx, ngy, mxmp;
+  int jgx[NGX+1], jgy[NGY+1], jigx[MX], jigy[MY];
+  int jxr[NGX], jyr[NGY];
+  realtype acoef[NS][NS], bcoef[NS], diff[NS];
+  realtype cox[NS], coy[NS], dx, dy, srur;
+  realtype fsave[NEQ];
+  N_Vector rewt;
+  void *arkode_mem;
+} *WebData;
+
+/* Private Helper Functions */
+
+static WebData AllocUserData(void);
+static void InitUserData(WebData wdata);
+static void SetGroups(int m, int ng, int jg[], int jig[], int jr[]);
+static void CInit(N_Vector c, WebData wdata);
+static void PrintIntro(void);
+static void PrintHeader(int jpre, int gstype);
+static void PrintAllSpecies(N_Vector c, int ns, int mxns, realtype t);
+static void PrintOutput(void *arkode_mem, realtype t);
+static void PrintFinalStats(void *arkode_mem);
+static void FreeUserData(WebData wdata);
+static void WebRates(realtype x, realtype y, realtype t, realtype c[],
+		     realtype rate[], WebData wdata);
+static void fblock (realtype t, realtype cdata[], int jx, int jy,
+		    realtype cdotdata[], WebData wdata);
+static void GSIter(realtype gamma, N_Vector z, N_Vector x,WebData wdata);
+
+/* Small Vector Kernels */
+
+static void v_inc_by_prod(realtype u[], realtype v[], realtype w[], int n);
+static void v_sum_prods(realtype u[], realtype p[], realtype q[], realtype v[],
+                        realtype w[], int n);
+static void v_prod(realtype u[], realtype v[], realtype w[], int n);
+static void v_zero(realtype u[], int n);
+
+/* Functions Called By The Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int Precond(realtype tn, N_Vector c, N_Vector fc,
+		   booleantype jok, booleantype *jcurPtr, realtype gamma,
+		   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector c, N_Vector fc,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Implementation */
+
+int main()
+{
+  realtype abstol=ATOL, reltol=RTOL, t, tout;
+  N_Vector c;
+  WebData wdata;
+  void *arkode_mem;
+  booleantype firstrun;
+  int jpre, gstype, flag;
+  int ns, mxns, iout;
+
+  c = NULL;
+  wdata = NULL;
+  arkode_mem = NULL;
+
+  /* Initializations */
+  c = N_VNew_Serial(NEQ);
+  if(check_flag((void *)c, "N_VNew_Serial", 0)) return(1);
+  wdata = AllocUserData();
+  if(check_flag((void *)wdata, "AllocUserData", 2)) return(1);
+  InitUserData(wdata);
+  ns = wdata->ns;
+  mxns = wdata->mxns;
+
+  /* Print problem description */
+  PrintIntro();
+
+  /* Loop over jpre and gstype (four cases) */
+  for (jpre = PREC_LEFT; jpre <= PREC_RIGHT; jpre++) {
+    for (gstype = MODIFIED_GS; gstype <= CLASSICAL_GS; gstype++) {
+      
+      /* Initialize c and print heading */
+      CInit(c, wdata);
+      PrintHeader(jpre, gstype);
+
+      /* Call ARKodeInit or ARKodeReInit, then ARKSpgmr to set up problem */
+      
+      firstrun = (jpre == PREC_LEFT) && (gstype == MODIFIED_GS);
+      if (firstrun) {
+        arkode_mem = ARKodeCreate();
+        if(check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return(1);
+
+        wdata->arkode_mem = arkode_mem;
+
+        flag = ARKodeSetUserData(arkode_mem, wdata);
+        if(check_flag(&flag, "ARKodeSetUserData", 1)) return(1);
+
+        flag = ARKodeInit(arkode_mem, NULL, f, T0, c);
+        if(check_flag(&flag, "ARKodeInit", 1)) return(1);
+
+        flag = ARKodeSStolerances(arkode_mem, reltol, abstol);
+        if (check_flag(&flag, "ARKodeSStolerances", 1)) return(1);
+
+	flag = ARKodeSetMaxNumSteps(arkode_mem, 1000);
+	if (check_flag(&flag, "ARKodeSetMaxNumSteps", 1)) return(1);
+
+	flag = ARKodeSetNonlinConvCoef(arkode_mem, 1.e-3);
+	if (check_flag(&flag, "ARKodeSetNonlinConvCoef", 1)) return(1);
+
+        flag = ARKSpgmr(arkode_mem, jpre, MAXL);
+        if(check_flag(&flag, "ARKSpgmr", 1)) return(1);
+
+        flag = ARKSpilsSetGSType(arkode_mem, gstype);
+        if(check_flag(&flag, "ARKSpilsSetGSType", 1)) return(1);
+
+        flag = ARKSpilsSetEpsLin(arkode_mem, DELT);
+        if(check_flag(&flag, "ARKSpilsSetEpsLin", 1)) return(1);
+
+        flag = ARKSpilsSetPreconditioner(arkode_mem, Precond, PSolve);
+        if(check_flag(&flag, "ARKSpilsSetPreconditioner", 1)) return(1);
+
+      } else {
+
+        flag = ARKodeReInit(arkode_mem, NULL, f, T0, c);
+        if(check_flag(&flag, "ARKodeReInit", 1)) return(1);
+
+        flag = ARKSpilsSetPrecType(arkode_mem, jpre);
+        check_flag(&flag, "ARKSpilsSetPrecType", 1);
+        flag = ARKSpilsSetGSType(arkode_mem, gstype);
+        if(check_flag(&flag, "ARKSpilsSetGSType", 1)) return(1);
+
+      }
+      
+      /* Print initial values */
+      if (firstrun) PrintAllSpecies(c, ns, mxns, T0);
+      
+      /* Loop over output points, call ARKode, print sample solution values. */
+      tout = T1;
+      for (iout = 1; iout <= NOUT; iout++) {
+        flag = ARKode(arkode_mem, tout, c, &t, ARK_NORMAL);
+        PrintOutput(arkode_mem, t);
+        if (firstrun && (iout % 3 == 0)) PrintAllSpecies(c, ns, mxns, t);
+        if(check_flag(&flag, "ARKode", 1)) break;
+        if (tout > RCONST(0.9)) tout += DTOUT; else tout *= TOUT_MULT; 
+      }
+      
+      /* Print final statistics, and loop for next case */
+      PrintFinalStats(arkode_mem);
+      
+    }
+  }
+
+  /* Free all memory */
+  ARKodeFree(&arkode_mem);
+  N_VDestroy_Serial(c);
+  FreeUserData(wdata);
+
+  return(0);
+}
+
+static WebData AllocUserData(void)
+{
+  int i, ngrp = NGRP;
+  long int ns = NS;
+  WebData wdata;
+  
+  wdata = (WebData) malloc(sizeof *wdata);
+  for(i=0; i < ngrp; i++) {
+    (wdata->P)[i] = newDenseMat(ns, ns);
+    (wdata->pivot)[i] = newLintArray(ns);
+  }
+  wdata->rewt = N_VNew_Serial(NEQ);
+  return(wdata);
+}
+
+static void InitUserData(WebData wdata)
+{
+  int i, j, ns;
+  realtype *bcoef, *diff, *cox, *coy, dx, dy;
+  realtype (*acoef)[NS];
+  
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+  diff = wdata->diff;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  ns = wdata->ns = NS;
+  
+  for (j = 0; j < NS; j++) { for (i = 0; i < NS; i++) acoef[i][j] = 0.; }
+  for (j = 0; j < NP; j++) {
+    for (i = 0; i < NP; i++) {
+      acoef[NP+i][j] = EE;
+      acoef[i][NP+j] = -GG;
+    }
+    acoef[j][j] = -AA;
+    acoef[NP+j][NP+j] = -AA;
+    bcoef[j] = BB;
+    bcoef[NP+j] = -BB;
+    diff[j] = DPREY;
+    diff[NP+j] = DPRED;
+  }
+
+  /* Set remaining problem parameters */
+
+  wdata->mxns = MXNS;
+  dx = wdata->dx = DX;
+  dy = wdata->dy = DY;
+  for (i = 0; i < ns; i++) {
+    cox[i] = diff[i]/SUNSQR(dx);
+    coy[i] = diff[i]/SUNSQR(dy);
+  }
+
+  /* Set remaining method parameters */
+
+  wdata->mp = MP;
+  wdata->mq = MQ;
+  wdata->mx = MX;
+  wdata->my = MY;
+  wdata->srur = SUNRsqrt(UNIT_ROUNDOFF);
+  wdata->mxmp = MXMP;
+  wdata->ngrp = NGRP;
+  wdata->ngx = NGX;
+  wdata->ngy = NGY;
+  SetGroups(MX, NGX, wdata->jgx, wdata->jigx, wdata->jxr);
+  SetGroups(MY, NGY, wdata->jgy, wdata->jigy, wdata->jyr);
+}
+
+/*
+ This routine sets arrays jg, jig, and jr describing
+ a uniform partition of (0,1,2,...,m-1) into ng groups.
+ The arrays set are:
+   jg    = length ng+1 array of group boundaries.
+           Group ig has indices j = jg[ig],...,jg[ig+1]-1.
+   jig   = length m array of group indices vs node index.
+           Node index j is in group jig[j].
+   jr    = length ng array of indices representing the groups.
+           The index for group ig is j = jr[ig].
+*/
+static void SetGroups(int m, int ng, int jg[], int jig[], int jr[])
+{
+  int ig, j, len1, mper, ngm1;
+
+  mper = m/ng; /* does integer division */
+  for (ig=0; ig < ng; ig++) jg[ig] = ig*mper;
+  jg[ng] = m;
+  
+  ngm1 = ng - 1;
+  len1 = ngm1*mper;
+  for (j = 0; j < len1; j++) jig[j] = j/mper;
+  for (j = len1; j < m; j++) jig[j] = ngm1;
+
+  for (ig = 0; ig < ngm1; ig++) jr[ig] = ((2*ig+1)*mper-1)/2;
+  jr[ngm1] = (ngm1*mper+m-1)/2;
+}
+
+/* This routine computes and loads the vector of initial values. */
+static void CInit(N_Vector c, WebData wdata)
+{
+  int jx, jy, ns, mxns, ioff, iyoff, i, ici;
+  realtype argx, argy, x, y, dx, dy, x_factor, y_factor, *cdata;
+  
+  cdata = N_VGetArrayPointer(c);
+  ns = wdata->ns;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+
+  x_factor = RCONST(4.0)/SUNSQR(AX);
+  y_factor = RCONST(4.0)/SUNSQR(AY);
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    argy = SUNSQR(y_factor*y*(AY-y));
+    iyoff = mxns*jy;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      argx = SUNSQR(x_factor*x*(AX-x));
+      ioff = iyoff + ns*jx;
+      for (i = 1; i <= ns; i++) {
+        ici = ioff + i-1;
+        cdata[ici] = RCONST(10.0) + i*argx*argy;
+      }
+    }
+  }
+}
+
+static void PrintIntro(void)
+{
+  printf("\n\nDemonstration program for ARKODE - ARKSPGMR linear solver\n\n");
+  printf("Food web problem with ns species, ns = %d\n", NS);
+  printf("Predator-prey interaction and diffusion on a 2-D square\n\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Matrix parameters: a = %.2Lg   e = %.2Lg   g = %.2Lg\n",
+         AA, EE, GG);
+  printf("b parameter = %.2Lg\n", BB);
+  printf("Diffusion coefficients: Dprey = %.2Lg   Dpred = %.2Lg\n",
+         DPREY, DPRED);
+  printf("Rate parameter alpha = %.2Lg\n\n", ALPH);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Matrix parameters: a = %.2g   e = %.2g   g = %.2g\n",
+         AA, EE, GG);
+  printf("b parameter = %.2g\n", BB);
+  printf("Diffusion coefficients: Dprey = %.2g   Dpred = %.2g\n",
+         DPREY, DPRED);
+  printf("Rate parameter alpha = %.2g\n\n", ALPH);
+#else
+  printf("Matrix parameters: a = %.2g   e = %.2g   g = %.2g\n",
+         AA, EE, GG);
+  printf("b parameter = %.2g\n", BB);
+  printf("Diffusion coefficients: Dprey = %.2g   Dpred = %.2g\n",
+         DPREY, DPRED);
+  printf("Rate parameter alpha = %.2g\n\n", ALPH);
+#endif
+  printf("Mesh dimensions (mx,my) are %d, %d.  ", MX, MY);
+  printf("Total system size is neq = %d \n\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerances: reltol = %.2Lg, abstol = %.2Lg \n\n",
+         RTOL, ATOL);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerances: reltol = %.2g, abstol = %.2g \n\n",
+         RTOL, ATOL);
+#else
+  printf("Tolerances: reltol = %.2g, abstol = %.2g \n\n",
+         RTOL, ATOL);
+#endif
+  printf("Preconditioning uses a product of:\n");
+  printf("  (1) Gauss-Seidel iterations with ");
+  printf("itmax = %d iterations, and\n", ITMAX);
+  printf("  (2) interaction-only block-diagonal matrix ");
+  printf("with block-grouping\n");
+  printf("  Number of diagonal block groups = ngrp = %d", NGRP);
+  printf("  (ngx by ngy, ngx = %d, ngy = %d)\n", NGX, NGY);
+  printf("\n\n--------------------------------------------------------------");
+  printf("--------------\n");
+}
+
+static void PrintHeader(int jpre, int gstype)
+{
+  if(jpre == PREC_LEFT)
+    printf("\n\nPreconditioner type is           jpre = %s\n", "PREC_LEFT");
+  else
+    printf("\n\nPreconditioner type is           jpre = %s\n", "PREC_RIGHT");
+
+  if(gstype == MODIFIED_GS)
+    printf("\nGram-Schmidt method type is    gstype = %s\n\n\n", "MODIFIED_GS");
+  else
+    printf("\nGram-Schmidt method type is    gstype = %s\n\n\n", "CLASSICAL_GS");
+}
+
+static void PrintAllSpecies(N_Vector c, int ns, int mxns, realtype t)
+{
+  int i, jx ,jy;
+  realtype *cdata;
+  
+  cdata = N_VGetArrayPointer(c);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("c values at t = %Lg:\n\n", t);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("c values at t = %g:\n\n", t);
+#else
+  printf("c values at t = %g:\n\n", t);
+#endif
+  for (i=1; i <= ns; i++) {
+    printf("Species %d\n", i);
+    for (jy=MY-1; jy >= 0; jy--) {
+      for (jx=0; jx < MX; jx++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+        printf("%-10.6Lg", cdata[(i-1) + jx*ns + jy*mxns]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+        printf("%-10.6g", cdata[(i-1) + jx*ns + jy*mxns]);
+#else
+        printf("%-10.6g", cdata[(i-1) + jx*ns + jy*mxns]);
+#endif
+      }
+      printf("\n");
+    }
+    printf("\n");
+  }
+}
+
+static void PrintOutput(void *arkode_mem, realtype t)
+{
+  long int nst, nfe, nfi, nni;
+  int flag;
+  realtype hu;
+
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetLastStep(arkode_mem, &hu);
+  check_flag(&flag, "ARKodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("t = %10.2Le  nst = %ld  nfe = %ld  nfi = %ld  nni = %ld", t, nst, nfe, nfi, nni);
+  printf("  hu = %11.2Le\n\n", hu);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("t = %10.2e  nst = %ld  nfe = %ld  nfi = %ld  nni = %ld", t, nst, nfe, nfi, nni);
+  printf("  hu = %11.2e\n\n", hu);
+#else
+  printf("t = %10.2e  nst = %ld  nfe = %ld  nfi = %ld  nni = %ld", t, nst, nfe, nfi, nni);
+  printf("  hu = %11.2e\n\n", hu);
+#endif
+}
+
+static void PrintFinalStats(void *arkode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nfi, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+  realtype avdim;
+  
+  flag = ARKodeGetWorkSpace(arkode_mem, &lenrw, &leniw);
+  check_flag(&flag, "ARKodeGetWorkSpace", 1);
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+
+  flag = ARKSpilsGetWorkSpace(arkode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "ARKSpilsGetWorkSpace", 1);
+  flag = ARKSpilsGetNumLinIters(arkode_mem, &nli);
+  check_flag(&flag, "ARKSpilsGetNumLinIters", 1);
+  flag = ARKSpilsGetNumPrecEvals(arkode_mem, &npe);
+  check_flag(&flag, "ARKSpilsGetNumPrecEvals", 1);
+  flag = ARKSpilsGetNumPrecSolves(arkode_mem, &nps);
+  check_flag(&flag, "ARKSpilsGetNumPrecSolves", 1);
+  flag = ARKSpilsGetNumConvFails(arkode_mem, &ncfl);
+  check_flag(&flag, "ARKSpilsGetNumConvFails", 1);
+  flag = ARKSpilsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKSpilsGetNumRhsEvals", 1);
+
+  printf("\n\n Final statistics for this run:\n\n");
+  printf(" ARKode real workspace length           = %4ld \n", lenrw);
+  printf(" ARKode integer workspace length        = %4ld \n", leniw);
+  printf(" ARKSPGMR real workspace length         = %4ld \n", lenrwLS);
+  printf(" ARKSPGMR integer workspace length      = %4ld \n", leniwLS);
+  printf(" Number of steps                       = %4ld \n", nst);
+  printf(" Number of f-s (explicit)              = %4ld \n", nfe);
+  printf(" Number of f-s (implicit)              = %4ld \n", nfi);
+  printf(" Number of f-s (SPGMR)                 = %4ld \n", nfeLS);
+  printf(" Number of f-s (TOTAL)                 = %4ld \n", nfe + nfeLS);
+  printf(" Number of setups                      = %4ld \n", nsetups);
+  printf(" Number of nonlinear iterations        = %4ld \n", nni);
+  printf(" Number of linear iterations           = %4ld \n", nli);
+  printf(" Number of preconditioner evaluations  = %4ld \n", npe);
+  printf(" Number of preconditioner solves       = %4ld \n", nps);
+  printf(" Number of error test failures         = %4ld \n", netf);
+  printf(" Number of nonlinear conv. failures    = %4ld \n", ncfn);
+  printf(" Number of linear convergence failures = %4ld \n", ncfl);
+  avdim = (nni > 0) ? ((realtype)nli)/((realtype)nni) : ZERO;
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf(" Average Krylov subspace dimension     = %.3Lf \n", avdim);
+#else
+  printf(" Average Krylov subspace dimension     = %.3f \n", avdim);
+#endif
+  printf("\n\n--------------------------------------------------------------");
+  printf("--------------\n");
+  printf(    "--------------------------------------------------------------");
+  printf("--------------\n");
+}
+
+static void FreeUserData(WebData wdata)
+{
+  int i, ngrp;
+
+  ngrp = wdata->ngrp;
+  for(i=0; i < ngrp; i++) {
+    destroyMat((wdata->P)[i]);
+    destroyArray((wdata->pivot)[i]);
+  }
+  N_VDestroy_Serial(wdata->rewt);
+  free(wdata);
+}
+
+/*
+ This routine computes the right-hand side of the ODE system and
+ returns it in cdot. The interaction rates are computed by calls to WebRates,
+ and these are saved in fsave for use in preconditioning.
+*/
+static int f(realtype t, N_Vector c, N_Vector cdot,void *user_data)
+{
+  int i, ic, ici, idxl, idxu, jx, ns, mxns, iyoff, jy, idyu, idyl;
+  realtype dcxli, dcxui, dcyli, dcyui, x, y, *cox, *coy, *fsave, dx, dy;
+  realtype *cdata, *cdotdata;
+  WebData wdata;
+  
+  wdata = (WebData) user_data;
+  cdata = N_VGetArrayPointer(c);
+  cdotdata = N_VGetArrayPointer(cdot);
+  
+  mxns = wdata->mxns;
+  ns = wdata->ns;
+  fsave = wdata->fsave;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+  
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    iyoff = mxns*jy;
+    idyu = (jy == MY-1) ? -mxns : mxns;
+    idyl = (jy == 0) ? -mxns : mxns;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      ic = iyoff + ns*jx;
+      /* Get interaction rates at one point (x,y). */
+      WebRates(x, y, t, cdata+ic, fsave+ic, wdata);
+      idxu = (jx == MX-1) ? -ns : ns;
+      idxl = (jx == 0) ? -ns : ns;
+      for (i = 1; i <= ns; i++) {
+        ici = ic + i-1;
+        /* Do differencing in y. */
+        dcyli = cdata[ici] - cdata[ici-idyl];
+        dcyui = cdata[ici+idyu] - cdata[ici];
+        /* Do differencing in x. */
+        dcxli = cdata[ici] - cdata[ici-idxl];
+        dcxui = cdata[ici+idxu] - cdata[ici];
+        /* Collect terms and load cdot elements. */
+        cdotdata[ici] = coy[i-1]*(dcyui - dcyli) + cox[i-1]*(dcxui - dcxli) +
+          fsave[ici];
+      }
+    }
+  }
+
+  return(0);
+}
+
+/*
+  This routine computes the interaction rates for the species
+  c_1, ... ,c_ns (stored in c[0],...,c[ns-1]), at one spatial point 
+  and at time t.
+*/
+static void WebRates(realtype x, realtype y, realtype t, realtype c[],
+                     realtype rate[], WebData wdata)
+{
+  int i, j, ns;
+  realtype fac, *bcoef;
+  realtype (*acoef)[NS];
+  
+  ns = wdata->ns;
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+  
+  for (i = 0; i < ns; i++)
+    rate[i] = ZERO;
+  
+  for (j = 0; j < ns; j++) 
+    for (i = 0; i < ns; i++) 
+      rate[i] += c[j] * acoef[i][j];
+  
+  fac = ONE + ALPH*x*y;
+  for (i = 0; i < ns; i++) 
+    rate[i] = c[i]*(bcoef[i]*fac + rate[i]);
+}
+
+/*
+ This routine generates the block-diagonal part of the Jacobian
+ corresponding to the interaction rates, multiplies by -gamma, adds
+ the identity matrix, and calls denseGETRF to do the LU decomposition of
+ each diagonal block. The computation of the diagonal blocks uses
+ the preset block and grouping information. One block per group is
+ computed. The Jacobian elements are generated by difference
+ quotients using calls to the routine fblock.
+
+ This routine can be regarded as a prototype for the general case
+ of a block-diagonal preconditioner. The blocks are of size mp, and
+ there are ngrp=ngx*ngy blocks computed in the block-grouping scheme.
+*/ 
+static int Precond(realtype t, N_Vector c, N_Vector fc,
+		   booleantype jok, booleantype *jcurPtr, realtype gamma,
+		   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3)
+{
+  realtype ***P;
+  int ier;
+  long int **pivot;
+  int i, if0, if00, ig, igx, igy, j, jj, jx, jy;
+  int *jxr, *jyr, ngrp, ngx, ngy, mxmp, flag;
+  long int mp;
+  realtype uround, fac, r, r0, save, srur;
+  realtype *f1, *fsave, *cdata, *rewtdata;
+  WebData wdata;
+  void *arkode_mem;
+  N_Vector rewt;
+  
+  wdata = (WebData) user_data;
+  arkode_mem = wdata->arkode_mem;
+  cdata = N_VGetArrayPointer(c);
+  rewt = wdata->rewt;
+  flag = ARKodeGetErrWeights(arkode_mem, rewt);
+  if(check_flag(&flag, "ARKodeGetErrWeights", 1)) return(1);
+  rewtdata = N_VGetArrayPointer(rewt);
+
+  uround = UNIT_ROUNDOFF;
+
+  P = wdata->P;
+  pivot = wdata->pivot;
+  jxr = wdata->jxr;
+  jyr = wdata->jyr;
+  mp = wdata->mp;
+  srur = wdata->srur;
+  ngrp = wdata->ngrp;
+  ngx = wdata->ngx;
+  ngy = wdata->ngy;
+  mxmp = wdata->mxmp;
+  fsave = wdata->fsave;
+  
+  /* Make mp calls to fblock to approximate each diagonal block of Jacobian.
+     Here, fsave contains the base value of the rate vector and 
+     r0 is a minimum increment factor for the difference quotient. */
+  
+  f1 = N_VGetArrayPointer(vtemp1);
+  
+  fac = N_VWrmsNorm (fc, rewt);
+  r0 = RCONST(1000.0)*SUNRabs(gamma)*uround*NEQ*fac;
+  if (r0 == ZERO) r0 = ONE;
+  
+  for (igy = 0; igy < ngy; igy++) {
+    jy = jyr[igy];
+    if00 = jy*mxmp;
+    for (igx = 0; igx < ngx; igx++) { 
+      jx = jxr[igx];
+      if0 = if00 + jx*mp;
+      ig = igx + igy*ngx; 
+      /* Generate ig-th diagonal block */
+      for (j = 0; j < mp; j++) {
+        /* Generate the jth column as a difference quotient */
+        jj = if0 + j; 
+        save = cdata[jj];
+        r = SUNMAX(srur*SUNRabs(save),r0/rewtdata[jj]);
+        cdata[jj] += r;
+        fac = -gamma/r;
+        fblock (t, cdata, jx, jy, f1, wdata);
+        for (i = 0; i < mp; i++) {
+          P[ig][j][i] = (f1[i] - fsave[if0+i])*fac;
+        }
+        cdata[jj] = save;
+      }
+    }
+  }
+  
+  /* Add identity matrix and do LU decompositions on blocks. */
+  
+  for (ig = 0; ig < ngrp; ig++) {
+    denseAddIdentity(P[ig], mp);
+    ier = denseGETRF(P[ig], mp, mp, pivot[ig]);
+    if (ier != 0) return(1);
+  }
+  
+  *jcurPtr = TRUE;
+  return(0);
+}
+
+/*
+  This routine computes one block of the interaction terms of the
+  system, namely block (jx,jy), for use in preconditioning.
+  Here jx and jy count from 0.
+*/
+static void fblock(realtype t, realtype cdata[], int jx, int jy,
+                   realtype cdotdata[], WebData wdata)
+{
+  int iblok, ic;
+  realtype x, y;
+  
+  iblok = jx + jy*(wdata->mx);
+  y = jy*(wdata->dy);
+  x = jx*(wdata->dx);
+  ic = (wdata->ns)*(iblok);
+  WebRates(x, y, t, cdata+ic, cdotdata, wdata);
+}
+
+/*
+  This routine applies two inverse preconditioner matrices
+  to the vector r, using the interaction-only block-diagonal Jacobian
+  with block-grouping, denoted Jr, and Gauss-Seidel applied to the
+  diffusion contribution to the Jacobian, denoted Jd.
+  It first calls GSIter for a Gauss-Seidel approximation to
+  ((I - gamma*Jd)-inverse)*r, and stores the result in z.
+  Then it computes ((I - gamma*Jr)-inverse)*z, using LU factors of the
+  blocks in P, and pivot information in pivot, and returns the result in z.
+*/
+static int PSolve(realtype tn, N_Vector c, N_Vector fc,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype   ***P;
+  long int **pivot;
+  int jx, jy, igx, igy, iv, ig, *jigx, *jigy, mx, my, ngx;
+  long int mp;
+  WebData wdata;
+  
+  wdata = (WebData) user_data;
+  
+  N_VScale(ONE, r, z);
+  
+  /* call GSIter for Gauss-Seidel iterations */
+  
+  GSIter(gamma, z, vtemp, wdata);
+  
+  /* Do backsolves for inverse of block-diagonal preconditioner factor */
+  
+  P = wdata->P;
+  pivot = wdata->pivot;
+  mx = wdata->mx;
+  my = wdata->my;
+  ngx = wdata->ngx;
+  mp = wdata->mp;
+  jigx = wdata->jigx;
+  jigy = wdata->jigy;
+  
+  iv = 0;
+  for (jy = 0; jy < my; jy++) {
+    igy = jigy[jy];
+    for (jx = 0; jx < mx; jx++) {
+      igx = jigx[jx];
+      ig = igx + igy*ngx;
+      denseGETRS(P[ig], mp, pivot[ig], &(N_VGetArrayPointer(z)[iv]));
+      iv += mp;
+    }
+  }
+  
+  return(0);
+}
+
+/*
+  This routine performs ITMAX=5 Gauss-Seidel iterations to compute an
+  approximation to (P-inverse)*z, where P = I - gamma*Jd, and
+  Jd represents the diffusion contributions to the Jacobian.
+  The answer is stored in z on return, and x is a temporary vector.
+  The dimensions below assume a global constant NS >= ns.
+  Some inner loops of length ns are implemented with the small
+  vector kernels v_sum_prods, v_prod, v_inc_by_prod.
+*/
+static void GSIter(realtype gamma, N_Vector z, N_Vector x, WebData wdata)
+{
+  int jx, jy, mx, my, x_loc, y_loc;
+  int ns, mxns, i, iyoff, ic, iter;
+  realtype beta[NS], beta2[NS], cof1[NS], gam[NS], gam2[NS];
+  realtype temp, *cox, *coy, *xd, *zd;
+  
+  xd = N_VGetArrayPointer(x);
+  zd = N_VGetArrayPointer(z);
+  ns = wdata->ns;
+  mx = wdata->mx;
+  my = wdata->my;
+  mxns = wdata->mxns;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  
+  /* Write matrix as P = D - L - U.
+     Load local arrays beta, beta2, gam, gam2, and cof1. */
+  
+  for (i = 0; i < ns; i++) {
+    temp = ONE/(ONE + RCONST(2.0)*gamma*(cox[i] + coy[i]));
+    beta[i] = gamma*cox[i]*temp;
+    beta2[i] = RCONST(2.0)*beta[i];
+    gam[i] = gamma*coy[i]*temp;
+    gam2[i] = RCONST(2.0)*gam[i];
+    cof1[i] = temp;
+  }
+  
+  /* Begin iteration loop.
+     Load vector x with (D-inverse)*z for first iteration. */
+  
+  for (jy = 0; jy < my; jy++) {
+    iyoff = mxns*jy;
+    for (jx = 0; jx < mx; jx++) {
+      ic = iyoff + ns*jx;
+      v_prod(xd+ic, cof1, zd+ic, ns); /* x[ic+i] = cof1[i]z[ic+i] */
+    }
+  }
+  N_VConst(ZERO, z);
+  
+  /* Looping point for iterations. */
+  
+  for (iter=1; iter <= ITMAX; iter++) {
+    
+    /* Calculate (D-inverse)*U*x if not the first iteration. */
+    
+    if (iter > 1) {
+      for (jy=0; jy < my; jy++) {
+        iyoff = mxns*jy;
+        for (jx=0; jx < mx; jx++) { /* order of loops matters */
+          ic = iyoff + ns*jx;
+          x_loc = (jx == 0) ? 0 : ((jx == mx-1) ? 2 : 1);
+          y_loc = (jy == 0) ? 0 : ((jy == my-1) ? 2 : 1);
+          switch (3*y_loc+x_loc) {
+          case 0 : 
+            /* jx == 0, jy == 0 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] + gam2[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta2, xd+ic+ns, gam2, xd+ic+mxns, ns);
+            break;
+          case 1 : 
+            /* 1 <= jx <= mx-2, jy == 0 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] + gam2[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta, xd+ic+ns, gam2, xd+ic+mxns, ns);
+            break;
+          case 2 : 
+            /* jx == mx-1, jy == 0 */
+            /* x[ic+i] = gam2[i]x[ic+mxns+i] */
+            v_prod(xd+ic, gam2, xd+ic+mxns, ns);
+            break;
+          case 3 : 
+            /* jx == 0, 1 <= jy <= my-2 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] + gam[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta2, xd+ic+ns, gam, xd+ic+mxns, ns);
+            break;
+          case 4 : 
+            /* 1 <= jx <= mx-2, 1 <= jy <= my-2 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] + gam[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta, xd+ic+ns, gam, xd+ic+mxns, ns);
+            break;
+          case 5 : 
+            /* jx == mx-1, 1 <= jy <= my-2 */
+            /* x[ic+i] = gam[i]x[ic+mxns+i] */
+            v_prod(xd+ic, gam, xd+ic+mxns, ns);
+            break;
+          case 6 : 
+            /* jx == 0, jy == my-1 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] */
+            v_prod(xd+ic, beta2, xd+ic+ns, ns);
+            break;
+          case 7 : 
+            /* 1 <= jx <= mx-2, jy == my-1 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] */
+            v_prod(xd+ic, beta, xd+ic+ns, ns);
+            break;
+          case 8 : 
+            /* jx == mx-1, jy == my-1 */
+            /* x[ic+i] = 0.0 */
+            v_zero(xd+ic, ns);
+            break;
+          }
+        }
+      }
+    }  /* end if (iter > 1) */
+    
+    /* Overwrite x with [(I - (D-inverse)*L)-inverse]*x. */
+    
+    for (jy=0; jy < my; jy++) {
+      iyoff = mxns*jy;
+      for (jx=0; jx < mx; jx++) { /* order of loops matters */
+        ic = iyoff + ns*jx;
+        x_loc = (jx == 0) ? 0 : ((jx == mx-1) ? 2 : 1);
+        y_loc = (jy == 0) ? 0 : ((jy == my-1) ? 2 : 1);
+        switch (3*y_loc+x_loc) {
+        case 0 : 
+          /* jx == 0, jy == 0 */
+          break;
+        case 1 : 
+          /* 1 <= jx <= mx-2, jy == 0 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          break;
+        case 2 : 
+          /* jx == mx-1, jy == 0 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          break;
+        case 3 : 
+          /* jx == 0, 1 <= jy <= my-2 */
+          /* x[ic+i] += gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 4 : 
+          /* 1 <= jx <= mx-2, 1 <= jy <= my-2 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] + gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 5 : 
+          /* jx == mx-1, 1 <= jy <= my-2 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] + gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 6 : 
+          /* jx == 0, jy == my-1 */
+          /* x[ic+i] += gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        case 7 : 
+          /* 1 <= jx <= mx-2, jy == my-1 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] + gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        case 8 : 
+          /* jx == mx-1, jy == my-1 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] + gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        }
+      }
+    }
+    
+    /* Add increment x to z : z <- z+x */
+    
+    N_VLinearSum(ONE, z, ONE, x, z);
+    
+  }
+}
+
+static void v_inc_by_prod(realtype u[], realtype v[], realtype w[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] += v[i]*w[i];
+}
+
+static void v_sum_prods(realtype u[], realtype p[], realtype q[],
+                        realtype v[], realtype w[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] = p[i]*q[i] + v[i]*w[i];
+}
+
+static void v_prod(realtype u[], realtype v[], realtype w[], int n)
+{ 
+  int i;
+  for (i=0; i < n; i++) u[i] = v[i]*w[i];
+}
+
+static void v_zero(realtype u[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] = ZERO;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/arkode/C_serial/ark_KrylovDemo_prec.out b/examples/arkode/C_serial/ark_KrylovDemo_prec.out
new file mode 100644
index 0000000..d8a9257
--- /dev/null
+++ b/examples/arkode/C_serial/ark_KrylovDemo_prec.out
@@ -0,0 +1,649 @@
+
+
+Demonstration program for ARKODE - ARKSPGMR linear solver
+
+Food web problem with ns species, ns = 6
+Predator-prey interaction and diffusion on a 2-D square
+
+Matrix parameters: a = 1   e = 1e+04   g = 5e-07
+b parameter = 1
+Diffusion coefficients: Dprey = 1   Dpred = 0.5
+Rate parameter alpha = 1
+
+Mesh dimensions (mx,my) are 6, 6.  Total system size is neq = 216 
+
+Tolerances: reltol = 1e-05, abstol = 1e-05 
+
+Preconditioning uses a product of:
+  (1) Gauss-Seidel iterations with itmax = 5 iterations, and
+  (2) interaction-only block-diagonal matrix with block-grouping
+  Number of diagonal block groups = ngrp = 4  (ngx by ngy, ngx = 2, ngy = 2)
+
+
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_LEFT
+
+Gram-Schmidt method type is    gstype = MODIFIED_GS
+
+
+c values at t = 0:
+
+Species 1
+10        10        10        10        10        10        
+10        10.1678   10.3775   10.3775   10.1678   10        
+10        10.3775   10.8493   10.8493   10.3775   10        
+10        10.3775   10.8493   10.8493   10.3775   10        
+10        10.1678   10.3775   10.3775   10.1678   10        
+10        10        10        10        10        10        
+
+Species 2
+10        10        10        10        10        10        
+10        10.3355   10.755    10.755    10.3355   10        
+10        10.755    11.6987   11.6987   10.755    10        
+10        10.755    11.6987   11.6987   10.755    10        
+10        10.3355   10.755    10.755    10.3355   10        
+10        10        10        10        10        10        
+
+Species 3
+10        10        10        10        10        10        
+10        10.5033   11.1325   11.1325   10.5033   10        
+10        11.1325   12.548    12.548    11.1325   10        
+10        11.1325   12.548    12.548    11.1325   10        
+10        10.5033   11.1325   11.1325   10.5033   10        
+10        10        10        10        10        10        
+
+Species 4
+10        10        10        10        10        10        
+10        10.6711   11.5099   11.5099   10.6711   10        
+10        11.5099   13.3974   13.3974   11.5099   10        
+10        11.5099   13.3974   13.3974   11.5099   10        
+10        10.6711   11.5099   11.5099   10.6711   10        
+10        10        10        10        10        10        
+
+Species 5
+10        10        10        10        10        10        
+10        10.8389   11.8874   11.8874   10.8389   10        
+10        11.8874   14.2467   14.2467   11.8874   10        
+10        11.8874   14.2467   14.2467   11.8874   10        
+10        10.8389   11.8874   11.8874   10.8389   10        
+10        10        10        10        10        10        
+
+Species 6
+10        10        10        10        10        10        
+10        11.0066   12.2649   12.2649   11.0066   10        
+10        12.2649   15.0961   15.0961   12.2649   10        
+10        12.2649   15.0961   15.0961   12.2649   10        
+10        11.0066   12.2649   12.2649   11.0066   10        
+10        10        10        10        10        10        
+
+t =   1.00e-08  nst = 5  nfe = 0  nfi = 76  nni = 47  hu =    9.89e-08
+
+t =   1.00e-07  nst = 5  nfe = 0  nfi = 76  nni = 47  hu =    9.89e-08
+
+t =   1.00e-06  nst = 8  nfe = 0  nfi = 121  nni = 77  hu =    4.79e-07
+
+c values at t = 1e-06:
+
+Species 1
+9.99991   9.99992   9.99993   9.99993   9.99993   9.99992   
+9.99992   10.1677   10.3774   10.3774   10.1677   9.99993   
+9.99993   10.3774   10.8492   10.8492   10.3774   9.99993   
+9.99993   10.3774   10.8492   10.8492   10.3774   9.99993   
+9.99992   10.1677   10.3774   10.3774   10.1677   9.99992   
+9.99991   9.99992   9.99993   9.99993   9.99992   9.99991   
+
+Species 2
+9.99991   9.99993   9.99995   9.99995   9.99993   9.99992   
+9.99993   10.3355   10.7549   10.7549   10.3355   9.99993   
+9.99995   10.7549   11.6985   11.6985   10.7549   9.99995   
+9.99995   10.7549   11.6985   11.6985   10.7549   9.99995   
+9.99993   10.3355   10.7549   10.7549   10.3355   9.99993   
+9.99991   9.99993   9.99995   9.99995   9.99993   9.99991   
+
+Species 3
+9.99991   9.99994   9.99997   9.99997   9.99994   9.99992   
+9.99994   10.5032   11.1323   11.1323   10.5032   9.99994   
+9.99997   11.1323   12.5478   12.5478   11.1323   9.99997   
+9.99997   11.1323   12.5478   12.5478   11.1323   9.99997   
+9.99994   10.5032   11.1323   11.1323   10.5032   9.99994   
+9.99991   9.99994   9.99997   9.99997   9.99994   9.99991   
+
+Species 4
+13.4984   13.4984   13.4984   13.4984   13.4984   13.4984   
+13.4984   14.55     15.8924   15.8924   14.55     13.4984   
+13.4984   15.8924   19.0296   19.0296   15.8924   13.4984   
+13.4984   15.8924   19.0296   19.0296   15.8924   13.4984   
+13.4984   14.55     15.8924   15.8924   14.55     13.4984   
+13.4984   13.4984   13.4984   13.4984   13.4984   13.4984   
+
+Species 5
+13.4984   13.4984   13.4985   13.4985   13.4984   13.4984   
+13.4984   14.7787   16.4136   16.4136   14.7787   13.4984   
+13.4985   16.4136   20.236    20.236    16.4136   13.4985   
+13.4985   16.4136   20.236    20.236    16.4136   13.4985   
+13.4984   14.7787   16.4136   16.4136   14.7787   13.4984   
+13.4984   13.4984   13.4985   13.4985   13.4984   13.4984   
+
+Species 6
+13.4984   13.4984   13.4985   13.4985   13.4984   13.4984   
+13.4984   15.0075   16.9348   16.9348   15.0075   13.4984   
+13.4985   16.9348   21.4423   21.4423   16.9348   13.4985   
+13.4985   16.9348   21.4423   21.4423   16.9348   13.4985   
+13.4984   15.0075   16.9348   16.9348   15.0075   13.4984   
+13.4984   13.4984   13.4985   13.4985   13.4984   13.4984   
+
+t =   1.00e-05  nst = 27  nfe = 0  nfi = 408  nni = 269  hu =    4.79e-07
+
+t =   1.00e-04  nst = 106  nfe = 0  nfi = 1689  nni = 1155  hu =    1.70e-05
+
+t =   1.00e-03  nst = 110  nfe = 0  nfi = 1751  nni = 1197  hu =    1.51e-03
+
+c values at t = 0.001:
+
+Species 1
+9.90702   9.91664   9.92836   9.93033   9.92253   9.91674   
+9.91472   10.0747   10.2769   10.2785   10.0795   9.92253   
+9.92446   10.2748   10.7181   10.7194   10.2785   9.93033   
+9.92445   10.2744   10.7173   10.7181   10.2769   9.92836   
+9.91469   10.0734   10.2744   10.2748   10.0747   9.91664   
+9.90698   9.91469   9.92445   9.92446   9.91472   9.90702   
+
+Species 2
+9.90742   9.92474   9.94622   9.94819   9.93064   9.91713   
+9.92282   10.2412   10.644    10.6457   10.2461   9.93064   
+9.94232   10.6419   11.5267   11.5281   10.6457   9.94819   
+9.94231   10.6415   11.5258   11.5267   10.644    9.94622   
+9.92279   10.24     10.6415   10.6419   10.2412   9.92474   
+9.90737   9.92279   9.94231   9.94232   9.92282   9.90742   
+
+Species 3
+9.90781   9.93284   9.96408   9.96605   9.93874   9.91753   
+9.93092   10.4078   11.0109   11.0127   10.4127   9.93874   
+9.96017   11.0088   12.3339   12.3354   11.0127   9.96605   
+9.96016   11.0083   12.333    12.3339   11.0109   9.96408   
+9.93088   10.4065   11.0083   11.0088   10.4078   9.93284   
+9.90776   9.93088   9.96016   9.96017   9.93092   9.90781   
+
+Species 4
+297231    297749    298392    298451    297925    297520    
+297692    307245    319327    319378    307390    297925    
+298276    319264    345799    345840    319378    298451    
+298276    319252    345772    345799    319327    298392    
+297691    307208    319252    319264    307245    297749    
+297229    297691    298276    298276    297692    297231    
+
+Species 5
+297231    297749    298392    298451    297925    297520    
+297692    307245    319327    319378    307390    297925    
+298276    319264    345799    345840    319378    298451    
+298276    319252    345772    345799    319327    298392    
+297691    307208    319252    319264    307245    297749    
+297229    297691    298276    298276    297692    297231    
+
+Species 6
+297231    297749    298392    298451    297925    297520    
+297692    307245    319327    319378    307390    297925    
+298276    319264    345799    345840    319378    298451    
+298276    319252    345772    345799    319327    298392    
+297691    307208    319252    319264    307245    297749    
+297229    297691    298276    298276    297692    297231    
+
+t =   1.00e-02  nst = 113  nfe = 0  nfi = 1798  nni = 1229  hu =    3.46e-03
+
+t =   1.00e-01  nst = 127  nfe = 0  nfi = 2025  nni = 1386  hu =    1.28e-02
+
+t =   1.00e+00  nst = 154  nfe = 0  nfi = 2490  nni = 1716  hu =    6.84e-02
+
+c values at t = 1:
+
+Species 1
+1.58851   1.59924   1.62152   1.64764   1.67036   1.68149   
+1.58533   1.59503   1.61548   1.63952   1.66033   1.67036   
+1.57757   1.58547   1.60239   1.62235   1.63952   1.64764   
+1.5682    1.57412   1.58706   1.60239   1.61548   1.62152   
+1.56048   1.56463   1.57412   1.58547   1.59503   1.59924   
+1.55733   1.56048   1.5682    1.57757   1.58533   1.58851   
+
+Species 2
+1.59067   1.60141   1.62371   1.64987   1.67261   1.68375   
+1.58748   1.5972    1.61766   1.64173   1.66257   1.67261   
+1.57971   1.58763   1.60457   1.62454   1.64173   1.64987   
+1.57034   1.57626   1.58921   1.60457   1.61766   1.62371   
+1.56261   1.56676   1.57626   1.58763   1.5972    1.60141   
+1.55945   1.56261   1.57034   1.57971   1.58748   1.59067   
+
+Species 3
+1.5927    1.60346   1.62578   1.65197   1.67474   1.68589   
+1.58951   1.59924   1.61973   1.64383   1.66468   1.67474   
+1.58174   1.58966   1.60662   1.62662   1.64383   1.65197   
+1.57236   1.57828   1.59125   1.60662   1.61973   1.62578   
+1.56462   1.56878   1.57828   1.58966   1.59924   1.60346   
+1.56146   1.56462   1.57236   1.58174   1.58951   1.5927    
+
+Species 4
+47718.3   48040.3   48709     49493.5   50175.5   50509.4   
+47622.8   47914     48527.8   49249.6   49874.4   50175.5   
+47389.7   47627     48134.9   48734.2   49249.6   49493.5   
+47108.5   47286     47674.6   48134.9   48527.8   48709     
+46876.6   47001.2   47286     47627     47914     48040.3   
+46781.9   46876.6   47108.5   47389.7   47622.8   47718.3   
+
+Species 5
+47718.3   48040.3   48709     49493.5   50175.5   50509.4   
+47622.8   47914     48527.8   49249.6   49874.4   50175.5   
+47389.7   47627     48134.9   48734.2   49249.6   49493.5   
+47108.5   47286     47674.6   48134.9   48527.8   48709     
+46876.6   47001.2   47286     47627     47914     48040.3   
+46781.9   46876.6   47108.5   47389.7   47622.8   47718.3   
+
+Species 6
+47718.3   48040.3   48709     49493.5   50175.5   50509.4   
+47622.8   47914     48527.8   49249.6   49874.4   50175.5   
+47389.7   47627     48134.9   48734.2   49249.6   49493.5   
+47108.5   47286     47674.6   48134.9   48527.8   48709     
+46876.6   47001.2   47286     47627     47914     48040.3   
+46781.9   46876.6   47108.5   47389.7   47622.8   47718.3   
+
+t =   2.00e+00  nst = 165  nfe = 0  nfi = 2662  nni = 1833  hu =    4.14e-02
+
+t =   3.00e+00  nst = 177  nfe = 0  nfi = 2849  nni = 1960  hu =    1.08e-01
+
+t =   4.00e+00  nst = 187  nfe = 0  nfi = 3014  nni = 2073  hu =    1.23e-01
+
+c values at t = 4:
+
+Species 1
+1.19535   1.20368   1.2211    1.24157   1.25935   1.268     
+1.1928    1.20035   1.21636   1.23523   1.25154   1.25935   
+1.18657   1.19274   1.20602   1.22173   1.23523   1.24157   
+1.17904   1.18368   1.19389   1.20602   1.21636   1.2211    
+1.17284   1.17613   1.18368   1.19274   1.20035   1.20368   
+1.17032   1.17284   1.17904   1.18657   1.1928    1.19535   
+
+Species 2
+1.19538   1.20371   1.22113   1.24161   1.25938   1.26804   
+1.19284   1.20038   1.21639   1.23526   1.25157   1.25938   
+1.1866    1.19277   1.20606   1.22177   1.23526   1.24161   
+1.17908   1.18371   1.19393   1.20606   1.21639   1.22113   
+1.17288   1.17616   1.18371   1.19277   1.20038   1.20371   
+1.17035   1.17288   1.17908   1.1866    1.19284   1.19538   
+
+Species 3
+1.19542   1.20374   1.22116   1.24164   1.25942   1.26807   
+1.19287   1.20042   1.21642   1.2353    1.2516    1.25942   
+1.18663   1.1928    1.20609   1.2218    1.2353    1.24164   
+1.17911   1.18374   1.19396   1.20609   1.21642   1.22116   
+1.17291   1.17619   1.18374   1.1928    1.20042   1.20374   
+1.17039   1.17291   1.17911   1.18663   1.19287   1.19542   
+
+Species 4
+35860.6   36110.2   36632.4   37246.4   37779.5   38038.7   
+35784.2   36010.4   36490.4   37056.3   37545.3   37779.5   
+35597.2   35782     36180.5   36651.6   37056.3   37246.4   
+35371.4   35510.4   35816.7   36180.5   36490.4   36632.4   
+35185.4   35283.8   35510.4   35782     36010.4   36110.2   
+35109.7   35185.4   35371.4   35597.2   35784.2   35860.6   
+
+Species 5
+35860.6   36110.2   36632.4   37246.4   37779.5   38038.7   
+35784.2   36010.4   36490.4   37056.3   37545.3   37779.5   
+35597.2   35782     36180.5   36651.6   37056.3   37246.4   
+35371.4   35510.4   35816.7   36180.5   36490.4   36632.4   
+35185.4   35283.8   35510.4   35782     36010.4   36110.2   
+35109.7   35185.4   35371.4   35597.2   35784.2   35860.6   
+
+Species 6
+35860.6   36110.2   36632.4   37246.4   37779.5   38038.7   
+35784.2   36010.4   36490.4   37056.3   37545.3   37779.5   
+35597.2   35782     36180.5   36651.6   37056.3   37246.4   
+35371.4   35510.4   35816.7   36180.5   36490.4   36632.4   
+35185.4   35283.8   35510.4   35782     36010.4   36110.2   
+35109.7   35185.4   35371.4   35597.2   35784.2   35860.6   
+
+t =   5.00e+00  nst = 198  nfe = 0  nfi = 3180  nni = 2182  hu =    9.99e-02
+
+t =   6.00e+00  nst = 207  nfe = 0  nfi = 3337  nni = 2284  hu =    9.66e-02
+
+t =   7.00e+00  nst = 216  nfe = 0  nfi = 3478  nni = 2375  hu =    1.51e-01
+
+c values at t = 7:
+
+Species 1
+1.18854   1.19682   1.21415   1.23453   1.25221   1.26082   
+1.186     1.19351   1.20944   1.22822   1.24444   1.25221   
+1.1798    1.18593   1.19916   1.21479   1.22822   1.23453   
+1.17231   1.17692   1.18708   1.19916   1.20944   1.21415   
+1.16614   1.1694    1.17692   1.18593   1.19351   1.19682   
+1.16363   1.16614   1.17231   1.1798    1.186     1.18854   
+
+Species 2
+1.18854   1.19683   1.21415   1.23453   1.25222   1.26082   
+1.186     1.19351   1.20944   1.22822   1.24444   1.25222   
+1.1798    1.18594   1.19916   1.21479   1.22822   1.23453   
+1.17231   1.17692   1.18709   1.19916   1.20944   1.21415   
+1.16614   1.1694    1.17692   1.18594   1.19351   1.19683   
+1.16363   1.16614   1.17231   1.1798    1.186     1.18854   
+
+Species 3
+1.18854   1.19683   1.21416   1.23453   1.25222   1.26082   
+1.18601   1.19351   1.20944   1.22822   1.24444   1.25222   
+1.1798    1.18594   1.19916   1.21479   1.22822   1.23453   
+1.17231   1.17692   1.18709   1.19916   1.20944   1.21416   
+1.16614   1.1694    1.17692   1.18594   1.19351   1.19683   
+1.16363   1.16614   1.17231   1.1798    1.18601   1.18854   
+
+Species 4
+35656.3   35903.1   36424.2   37033.8   37564.6   37822.3   
+35578.4   35804.9   36281.3   36845.5   37330.9   37564.6   
+35393.9   35575.9   35974.4   36441.4   36845.5   37033.8   
+35167.5   35307.4   35610.6   35974.4   36281.3   36424.2   
+34984.3   35080.2   35307.4   35575.9   35804.9   35903.1   
+34907.5   34984.3   35167.5   35393.9   35578.4   35656.3   
+
+Species 5
+35656.3   35903.1   36424.2   37033.8   37564.6   37822.3   
+35578.4   35804.9   36281.3   36845.5   37330.9   37564.6   
+35393.9   35575.9   35974.4   36441.4   36845.5   37033.8   
+35167.5   35307.4   35610.6   35974.4   36281.3   36424.2   
+34984.3   35080.2   35307.4   35575.9   35804.9   35903.1   
+34907.5   34984.3   35167.5   35393.9   35578.4   35656.3   
+
+Species 6
+35656.3   35903.1   36424.2   37033.8   37564.6   37822.3   
+35578.4   35804.9   36281.3   36845.5   37330.9   37564.6   
+35393.9   35575.9   35974.4   36441.4   36845.5   37033.8   
+35167.5   35307.4   35610.6   35974.4   36281.3   36424.2   
+34984.3   35080.2   35307.4   35575.9   35804.9   35903.1   
+34907.5   34984.3   35167.5   35393.9   35578.4   35656.3   
+
+t =   8.00e+00  nst = 232  nfe = 0  nfi = 3781  nni = 2567  hu =    1.06e-01
+
+t =   9.00e+00  nst = 242  nfe = 0  nfi = 3931  nni = 2652  hu =    8.10e-02
+
+t =   1.00e+01  nst = 258  nfe = 0  nfi = 4238  nni = 2839  hu =    1.04e-01
+
+c values at t = 10:
+
+Species 1
+1.18838   1.19667   1.21399   1.23437   1.25205   1.26066   
+1.18585   1.19335   1.20928   1.22805   1.24428   1.25205   
+1.17964   1.18578   1.199     1.21463   1.22805   1.23437   
+1.17215   1.17676   1.18693   1.199     1.20928   1.21399   
+1.16598   1.16925   1.17676   1.18578   1.19335   1.19667   
+1.16347   1.16598   1.17215   1.17964   1.18585   1.18838   
+
+Species 2
+1.18838   1.19667   1.21399   1.23437   1.25205   1.26066   
+1.18585   1.19335   1.20928   1.22805   1.24428   1.25205   
+1.17964   1.18578   1.199     1.21463   1.22805   1.23437   
+1.17215   1.17676   1.18693   1.199     1.20928   1.21399   
+1.16598   1.16925   1.17676   1.18578   1.19335   1.19667   
+1.16347   1.16598   1.17215   1.17964   1.18585   1.18838   
+
+Species 3
+1.18838   1.19667   1.21399   1.23437   1.25205   1.26066   
+1.18585   1.19335   1.20928   1.22805   1.24428   1.25205   
+1.17964   1.18578   1.199     1.21463   1.22805   1.23437   
+1.17215   1.17676   1.18693   1.199     1.20928   1.21399   
+1.16598   1.16925   1.17676   1.18578   1.19335   1.19667   
+1.16347   1.16598   1.17215   1.17964   1.18585   1.18838   
+
+Species 4
+35650.7   35898.7   36418.4   37029.1   37559.5   37817.2   
+35574.6   35799.6   36277     36840.1   37326.5   37559.5   
+35388.4   35572.2   35968.8   36437.6   36840.1   37029.1   
+35163.6   35302     35606.7   35968.8   36277     36418.4   
+34978.7   35076.4   35302     35572.2   35799.6   35898.7   
+34903.4   34978.7   35163.6   35388.4   35574.6   35650.7   
+
+Species 5
+35650.7   35898.7   36418.4   37029.1   37559.5   37817.2   
+35574.6   35799.6   36277     36840.1   37326.5   37559.5   
+35388.4   35572.2   35968.8   36437.6   36840.1   37029.1   
+35163.6   35302     35606.7   35968.8   36277     36418.4   
+34978.7   35076.4   35302     35572.2   35799.6   35898.7   
+34903.4   34978.7   35163.6   35388.4   35574.6   35650.7   
+
+Species 6
+35650.7   35898.7   36418.4   37029.1   37559.5   37817.2   
+35574.6   35799.6   36277     36840.1   37326.5   37559.5   
+35388.4   35572.2   35968.8   36437.6   36840.1   37029.1   
+35163.6   35302     35606.7   35968.8   36277     36418.4   
+34978.7   35076.4   35302     35572.2   35799.6   35898.7   
+34903.4   34978.7   35163.6   35388.4   35574.6   35650.7   
+
+
+
+ Final statistics for this run:
+
+ ARKode real workspace length           = 3298 
+ ARKode integer workspace length        =   55 
+ ARKSPGMR real workspace length         = 2206 
+ ARKSPGMR integer workspace length      =   10 
+ Number of steps                       =  258 
+ Number of f-s (explicit)              =    0 
+ Number of f-s (implicit)              = 4238 
+ Number of f-s (SPGMR)                 = 8818 
+ Number of f-s (TOTAL)                 = 8818 
+ Number of setups                      =  109 
+ Number of nonlinear iterations        = 2839 
+ Number of linear iterations           = 8818 
+ Number of preconditioner evaluations  =  109 
+ Number of preconditioner solves       = 11560 
+ Number of error test failures         =   20 
+ Number of nonlinear conv. failures    =    9 
+ Number of linear convergence failures =  508 
+ Average Krylov subspace dimension     = 3.106 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_LEFT
+
+Gram-Schmidt method type is    gstype = CLASSICAL_GS
+
+
+t =   1.00e-08  nst = 5  nfe = 0  nfi = 76  nni = 47  hu =    9.89e-08
+
+t =   1.00e-07  nst = 5  nfe = 0  nfi = 76  nni = 47  hu =    9.89e-08
+
+t =   1.00e-06  nst = 8  nfe = 0  nfi = 121  nni = 77  hu =    4.79e-07
+
+t =   1.00e-05  nst = 27  nfe = 0  nfi = 408  nni = 269  hu =    4.79e-07
+
+t =   1.00e-04  nst = 106  nfe = 0  nfi = 1689  nni = 1155  hu =    1.70e-05
+
+t =   1.00e-03  nst = 110  nfe = 0  nfi = 1751  nni = 1197  hu =    1.51e-03
+
+t =   1.00e-02  nst = 113  nfe = 0  nfi = 1798  nni = 1229  hu =    3.46e-03
+
+t =   1.00e-01  nst = 127  nfe = 0  nfi = 2025  nni = 1386  hu =    1.28e-02
+
+t =   1.00e+00  nst = 154  nfe = 0  nfi = 2492  nni = 1718  hu =    7.60e-02
+
+t =   2.00e+00  nst = 169  nfe = 0  nfi = 2747  nni = 1896  hu =    8.04e-02
+
+t =   3.00e+00  nst = 181  nfe = 0  nfi = 2951  nni = 2036  hu =    1.01e-01
+
+t =   4.00e+00  nst = 189  nfe = 0  nfi = 3074  nni = 2119  hu =    1.33e-01
+
+t =   5.00e+00  nst = 199  nfe = 0  nfi = 3243  nni = 2227  hu =    9.38e-02
+
+t =   6.00e+00  nst = 211  nfe = 0  nfi = 3443  nni = 2352  hu =    1.13e-01
+
+t =   7.00e+00  nst = 220  nfe = 0  nfi = 3613  nni = 2457  hu =    1.11e-01
+
+t =   8.00e+00  nst = 230  nfe = 0  nfi = 3752  nni = 2536  hu =    1.01e-01
+
+t =   9.00e+00  nst = 247  nfe = 0  nfi = 4060  nni = 2725  hu =    9.38e-02
+
+t =   1.00e+01  nst = 264  nfe = 0  nfi = 4356  nni = 2901  hu =    9.24e-02
+
+
+
+ Final statistics for this run:
+
+ ARKode real workspace length           = 3298 
+ ARKode integer workspace length        =   55 
+ ARKSPGMR real workspace length         = 2206 
+ ARKSPGMR integer workspace length      =   10 
+ Number of steps                       =  264 
+ Number of f-s (explicit)              =    0 
+ Number of f-s (implicit)              = 4356 
+ Number of f-s (SPGMR)                 = 9113 
+ Number of f-s (TOTAL)                 = 9113 
+ Number of setups                      =  106 
+ Number of nonlinear iterations        = 2901 
+ Number of linear iterations           = 9113 
+ Number of preconditioner evaluations  =  106 
+ Number of preconditioner solves       = 11919 
+ Number of error test failures         =   24 
+ Number of nonlinear conv. failures    =    8 
+ Number of linear convergence failures =  577 
+ Average Krylov subspace dimension     = 3.141 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_RIGHT
+
+Gram-Schmidt method type is    gstype = MODIFIED_GS
+
+
+t =   1.00e-08  nst = 5  nfe = 0  nfi = 76  nni = 47  hu =    9.89e-08
+
+t =   1.00e-07  nst = 5  nfe = 0  nfi = 76  nni = 47  hu =    9.89e-08
+
+t =   1.00e-06  nst = 8  nfe = 0  nfi = 121  nni = 77  hu =    4.79e-07
+
+t =   1.00e-05  nst = 27  nfe = 0  nfi = 408  nni = 269  hu =    4.79e-07
+
+t =   1.00e-04  nst = 106  nfe = 0  nfi = 1689  nni = 1155  hu =    1.70e-05
+
+t =   1.00e-03  nst = 110  nfe = 0  nfi = 1751  nni = 1197  hu =    1.50e-03
+
+t =   1.00e-02  nst = 113  nfe = 0  nfi = 1798  nni = 1229  hu =    3.42e-03
+
+t =   1.00e-01  nst = 127  nfe = 0  nfi = 2024  nni = 1385  hu =    1.23e-02
+
+t =   1.00e+00  nst = 166  nfe = 0  nfi = 2715  nni = 1875  hu =    2.40e-02
+
+t =   2.00e+00  nst = 214  nfe = 0  nfi = 3551  nni = 2460  hu =    2.34e-02
+
+t =   3.00e+00  nst = 249  nfe = 0  nfi = 4112  nni = 2846  hu =    3.57e-02
+
+t =   4.00e+00  nst = 272  nfe = 0  nfi = 4473  nni = 3092  hu =    5.08e-02
+
+t =   5.00e+00  nst = 297  nfe = 0  nfi = 4852  nni = 3346  hu =    5.14e-02
+
+t =   6.00e+00  nst = 315  nfe = 0  nfi = 5118  nni = 3522  hu =    6.88e-02
+
+t =   7.00e+00  nst = 328  nfe = 0  nfi = 5303  nni = 3642  hu =    8.22e-02
+
+t =   8.00e+00  nst = 338  nfe = 0  nfi = 5442  nni = 3731  hu =    8.52e-02
+
+t =   9.00e+00  nst = 349  nfe = 0  nfi = 5593  nni = 3827  hu =    1.11e-01
+
+t =   1.00e+01  nst = 359  nfe = 0  nfi = 5723  nni = 3907  hu =    1.35e-01
+
+
+
+ Final statistics for this run:
+
+ ARKode real workspace length           = 3298 
+ ARKode integer workspace length        =   55 
+ ARKSPGMR real workspace length         = 2206 
+ ARKSPGMR integer workspace length      =   10 
+ Number of steps                       =  359 
+ Number of f-s (explicit)              =    0 
+ Number of f-s (implicit)              = 5723 
+ Number of f-s (SPGMR)                 = 12904 
+ Number of f-s (TOTAL)                 = 12904 
+ Number of setups                      =  253 
+ Number of nonlinear iterations        = 3907 
+ Number of linear iterations           = 12904 
+ Number of preconditioner evaluations  =  253 
+ Number of preconditioner solves       = 16594 
+ Number of error test failures         =    0 
+ Number of nonlinear conv. failures    =  103 
+ Number of linear convergence failures = 1072 
+ Average Krylov subspace dimension     = 3.303 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_RIGHT
+
+Gram-Schmidt method type is    gstype = CLASSICAL_GS
+
+
+t =   1.00e-08  nst = 5  nfe = 0  nfi = 76  nni = 47  hu =    9.89e-08
+
+t =   1.00e-07  nst = 5  nfe = 0  nfi = 76  nni = 47  hu =    9.89e-08
+
+t =   1.00e-06  nst = 8  nfe = 0  nfi = 121  nni = 77  hu =    4.79e-07
+
+t =   1.00e-05  nst = 27  nfe = 0  nfi = 408  nni = 269  hu =    4.79e-07
+
+t =   1.00e-04  nst = 106  nfe = 0  nfi = 1689  nni = 1155  hu =    1.70e-05
+
+t =   1.00e-03  nst = 110  nfe = 0  nfi = 1751  nni = 1197  hu =    1.50e-03
+
+t =   1.00e-02  nst = 113  nfe = 0  nfi = 1798  nni = 1229  hu =    3.42e-03
+
+t =   1.00e-01  nst = 127  nfe = 0  nfi = 2024  nni = 1385  hu =    1.23e-02
+
+t =   1.00e+00  nst = 166  nfe = 0  nfi = 2715  nni = 1875  hu =    2.40e-02
+
+t =   2.00e+00  nst = 214  nfe = 0  nfi = 3557  nni = 2465  hu =    2.34e-02
+
+t =   3.00e+00  nst = 249  nfe = 0  nfi = 4118  nni = 2851  hu =    3.57e-02
+
+t =   4.00e+00  nst = 272  nfe = 0  nfi = 4479  nni = 3097  hu =    5.08e-02
+
+t =   5.00e+00  nst = 297  nfe = 0  nfi = 4858  nni = 3351  hu =    5.14e-02
+
+t =   6.00e+00  nst = 315  nfe = 0  nfi = 5124  nni = 3527  hu =    6.89e-02
+
+t =   7.00e+00  nst = 328  nfe = 0  nfi = 5309  nni = 3647  hu =    9.31e-02
+
+t =   8.00e+00  nst = 339  nfe = 0  nfi = 5465  nni = 3748  hu =    9.70e-02
+
+t =   9.00e+00  nst = 349  nfe = 0  nfi = 5599  nni = 3832  hu =    1.12e-01
+
+t =   1.00e+01  nst = 359  nfe = 0  nfi = 5729  nni = 3912  hu =    1.31e-01
+
+
+
+ Final statistics for this run:
+
+ ARKode real workspace length           = 3298 
+ ARKode integer workspace length        =   55 
+ ARKSPGMR real workspace length         = 2206 
+ ARKSPGMR integer workspace length      =   10 
+ Number of steps                       =  359 
+ Number of f-s (explicit)              =    0 
+ Number of f-s (implicit)              = 5729 
+ Number of f-s (SPGMR)                 = 12934 
+ Number of f-s (TOTAL)                 = 12934 
+ Number of setups                      =  254 
+ Number of nonlinear iterations        = 3912 
+ Number of linear iterations           = 12934 
+ Number of preconditioner evaluations  =  254 
+ Number of preconditioner solves       = 16627 
+ Number of error test failures         =    0 
+ Number of nonlinear conv. failures    =  103 
+ Number of linear convergence failures = 1076 
+ Average Krylov subspace dimension     = 3.306 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
diff --git a/examples/arkode/C_serial/ark_analytic.c b/examples/arkode/C_serial/ark_analytic.c
new file mode 100644
index 0000000..beadb5e
--- /dev/null
+++ b/examples/arkode/C_serial/ark_analytic.c
@@ -0,0 +1,249 @@
+/*-----------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem with analytical 
+ * solution,
+ *    dy/dt = lamda*y + 1/(1+t^2) - lamda*atan(t)
+ * for t in the interval [0.0, 10.0], with initial condition: y=0. 
+ * 
+ * The stiffness of the problem is directly proportional to the 
+ * value of "lamda".  The value of lamda should be negative to
+ * result in a well-posed ODE; for values with magnitude larger 
+ * than 100 the problem becomes quite stiff.
+ * 
+ * This program solves the problem with the DIRK method,
+ * Newton iteration with the ARKDENSE dense linear solver, and a
+ * user-supplied Jacobian routine.
+ * Output is printed every 1.0 units of time (10 total).
+ * Run statistics (optional outputs) are printed at the end.
+ *-----------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <math.h>
+#include <arkode/arkode.h>           /* prototypes for ARKODE fcts., consts. */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., macros */
+#include <arkode/arkode_dense.h>     /* prototype for ARKDense */
+#include <sundials/sundials_dense.h> /* definitions DlsMat DENSE_ELEM */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/* Main Program */
+int main()
+{
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);      /* initial time */
+  realtype Tf = RCONST(10.0);     /* final time */
+  realtype dTout = RCONST(1.0);   /* time between outputs */
+  long int NEQ = 1;               /* number of dependent vars. */
+  realtype reltol = 1.0e-6;       /* tolerances */
+  realtype abstol = 1.0e-10;
+  realtype lamda  = -100.0;       /* stiffness parameter */
+
+  /* general problem variables */
+  int flag;                       /* reusable error-checking flag */
+  N_Vector y = NULL;              /* empty vector for storing solution */
+  void *arkode_mem = NULL;        /* empty ARKode memory structure */
+  FILE *UFID;
+  realtype t, tout;
+  long int nst, nst_a, nfe, nfi, nsetups, nje, nfeLS, nni, ncfn, netf;
+
+  /* Initial diagnostics output */
+  printf("\nAnalytical ODE test problem:\n");
+  printf("    lamda = %g\n",    lamda);
+  printf("   reltol = %.1e\n",  reltol);
+  printf("   abstol = %.1e\n\n",abstol);
+
+  /* Initialize data structures */
+  y = N_VNew_Serial(NEQ);          /* Create serial vector for solution */
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return 1;
+  N_VConst(0.0, y);             /* Specify initial condition */
+  arkode_mem = ARKodeCreate();     /* Create the solver memory */
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set routines */
+  flag = ARKodeSetUserData(arkode_mem, (void *) &lamda);  /* Pass lamda to user functions */
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);  /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  /* Linear solver specification */
+  flag = ARKDense(arkode_mem, NEQ);                       /* Specify dense linear solver */
+  if (check_flag(&flag, "ARKDense", 1)) return 1;
+  flag = ARKDlsSetDenseJacFn(arkode_mem, Jac);            /* Set Jacobian routine */
+  if (check_flag(&flag, "ARKDlsSetDenseJacFn", 1)) return 1;
+
+  /* Specify linearly implicit RHS, with non-time-dependent Jacobian */
+  flag = ARKodeSetLinear(arkode_mem, 0);
+  if (check_flag(&flag, "ARKodeSetLinear", 1)) return 1;
+
+  /* Open output stream for results, output comment line */
+  UFID = fopen("solution.txt","w");
+  fprintf(UFID,"# t u\n");
+
+  /* output initial condition to disk */
+  fprintf(UFID," %.16e %.16e\n", T0, NV_Ith_S(y,0));  
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t = T0;
+  tout = T0+dTout;
+  printf("        t           u\n");
+  printf("   ---------------------\n");
+  while (Tf - t > 1.0e-15) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);      /* call integrator */
+    if (check_flag(&flag, "ARKode", 1)) break;
+    printf("  %10.6f  %10.6f\n", t, NV_Ith_S(y,0));          /* access/print solution */
+    fprintf(UFID," %.16e %.16e\n", t, NV_Ith_S(y,0));  
+    if (flag >= 0) {                                         /* successful solve: update time */
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                                 /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+  }
+  printf("   ---------------------\n");
+  fclose(UFID);
+
+  /* Get/print some final statistics on how the solve progressed */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+  flag = ARKDlsGetNumJacEvals(arkode_mem, &nje);
+  check_flag(&flag, "ARKDlsGetNumJacEvals", 1);
+  flag = ARKDlsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total linear solver setups = %li\n", nsetups);
+  printf("   Total RHS evals for setting up the linear system = %li\n", nfeLS);
+  printf("   Total number of Jacobian evaluations = %li\n", nje);
+  printf("   Total number of Newton iterations = %li\n", nni);
+  printf("   Total number of linear solver convergence failures = %li\n", ncfn);
+  printf("   Total number of error test failures = %li\n\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy(y);            /* Free y vector */
+  ARKodeFree(&arkode_mem);  /* Free integrator memory */
+  return 0;
+}
+
+/*-------------------------------
+ * Functions called by the solver
+ *-------------------------------*/
+
+/* f routine to compute the ODE RHS function f(t,y). */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype *rdata = (realtype *) user_data;   /* cast user_data to realtype */
+  realtype lamda = rdata[0];                  /* set shortcut for stiffness parameter */
+  realtype u = NV_Ith_S(y,0);                 /* access current solution value */
+
+  /* fill in the RHS function: "NV_Ith_S" accesses the 0th entry of ydot */
+  NV_Ith_S(ydot,0) = lamda*u + 1.0/(1.0+t*t) - lamda*atan(t);
+
+  return 0;                                   /* return with success */
+}
+
+/* Jacobian routine to compute J(t,y) = df/dy. */
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *rdata = (realtype *) user_data;   /* cast user_data to realtype */
+  realtype lamda = rdata[0];                  /* set shortcut for stiffness parameter */
+
+  /* Fill in Jacobian of f: "DENSE_ELEM" accesses the (0,0) entry of J */
+  DENSE_ELEM(J,0,0) = lamda;
+
+  return 0;                                   /* return with success */
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_analytic.out b/examples/arkode/C_serial/ark_analytic.out
new file mode 100644
index 0000000..f3e2fc1
--- /dev/null
+++ b/examples/arkode/C_serial/ark_analytic.out
@@ -0,0 +1,30 @@
+
+Analytical ODE test problem:
+    lamda = -100
+   reltol = 1.0e-06
+   abstol = 1.0e-10
+
+        t           u
+   ---------------------
+    1.000000    0.785398
+    2.000000    1.107149
+    3.000000    1.249046
+    4.000000    1.325818
+    5.000000    1.373401
+    6.000000    1.405648
+    7.000000    1.428899
+    8.000000    1.446441
+    9.000000    1.460139
+   10.000000    1.471128
+   ---------------------
+
+Final Solver Statistics:
+   Internal solver steps = 559 (attempted = 559)
+   Total RHS evals:  Fe = 0,  Fi = 5594
+   Total linear solver setups = 25
+   Total RHS evals for setting up the linear system = 0
+   Total number of Jacobian evaluations = 5
+   Total number of Newton iterations = 2795
+   Total number of linear solver convergence failures = 0
+   Total number of error test failures = 0
+
diff --git a/examples/arkode/C_serial/ark_analytic_nonlin.c b/examples/arkode/C_serial/ark_analytic_nonlin.c
new file mode 100644
index 0000000..4b35bcd
--- /dev/null
+++ b/examples/arkode/C_serial/ark_analytic_nonlin.c
@@ -0,0 +1,190 @@
+/*-----------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem with analytical 
+ * solution,
+ *     dy/dt = (t+1)*exp(-y)
+ * for t in the interval [0.0, 10.0], with initial condition: y=0. 
+ * This has analytical solution 
+ *      y(t) = log(0.5*t^2 + t + 1)
+ * 
+ * This program solves the problem with the ERK method.
+ * Output is printed every 1.0 units of time (10 total).
+ * Run statistics (optional outputs) are printed at the end.
+ *-----------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKode fcts., consts. */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fcts., macros */
+#include <sundials/sundials_types.h>  /* def. of type 'realtype' */
+#include <sundials/sundials_math.h>   /* def. of SUNRsqrt, etc. */
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main Program */
+int main()
+{
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);     /* initial time */
+  realtype Tf = RCONST(10.0);    /* final time */
+  realtype dTout = RCONST(1.0);  /* time between outputs */
+  long int NEQ = 1;              /* number of dependent vars. */
+  realtype reltol = 1.0e-6;      /* tolerances */
+  realtype abstol = 1.0e-10;
+
+  /* general problem variables */
+  int flag;                      /* reusable error-checking flag */
+  N_Vector y = NULL;             /* empty vector for storing solution */
+  void *arkode_mem = NULL;       /* empty ARKode memory structure */
+  FILE *UFID;
+  realtype t, tout;
+  long int nst, nst_a, nfe, nfi, netf;
+
+  /* Initial problem output */
+  printf("\nAnalytical ODE test problem:\n");
+  printf("   reltol = %.1e\n",  reltol);
+  printf("   abstol = %.1e\n\n",abstol);
+
+  /* Initialize data structures */
+  y = N_VNew_Serial(NEQ);          /* Create serial vector for solution */
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return 1;
+  NV_Ith_S(y,0) = 0.0;             /* Specify initial condition */
+  arkode_mem = ARKodeCreate();     /* Create the solver memory */
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully explicit, we set f_U to NULL and f_E to f. */
+  flag = ARKodeInit(arkode_mem, f, NULL, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Specify tolerances */
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  /* Open output stream for results, output comment line */
+  UFID = fopen("solution.txt","w");
+  fprintf(UFID,"# t u\n");
+
+  /* output initial condition to disk */
+  fprintf(UFID," %.16e %.16e\n", T0, NV_Ith_S(y,0));  
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t = T0;
+  tout = T0+dTout;
+  printf("        t           u\n");
+  printf("   ---------------------\n");
+  while (Tf - t > 1.0e-15) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);       /* call integrator */
+    if (check_flag(&flag, "ARKode", 1)) break;
+    printf("  %10.6f  %10.6f\n", t, NV_Ith_S(y,0));           /* access/print solution */
+    fprintf(UFID," %.16e %.16e\n", t, NV_Ith_S(y,0));  
+    if (flag >= 0) {                                          /* successful solve: update time */
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                                  /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+  }
+  printf("   ---------------------\n");
+  fclose(UFID);
+
+  /* Print some final statistics */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total number of error test failures = %li\n\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy_Serial(y);        /* Free y vector */
+  ARKodeFree(&arkode_mem);     /* Free integrator memory */
+  return 0;
+}
+
+/*-------------------------------
+ * Functions called by the solver
+ *-------------------------------*/
+
+/* f routine to compute the ODE RHS function f(t,y). */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  NV_Ith_S(ydot,0) = (t+1.0)*SUNRexp(-NV_Ith_S(y,0));
+  return 0;
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_analytic_nonlin.out b/examples/arkode/C_serial/ark_analytic_nonlin.out
new file mode 100644
index 0000000..fab6545
--- /dev/null
+++ b/examples/arkode/C_serial/ark_analytic_nonlin.out
@@ -0,0 +1,24 @@
+
+Analytical ODE test problem:
+   reltol = 1.0e-06
+   abstol = 1.0e-10
+
+        t           u
+   ---------------------
+    1.000000    0.916291
+    2.000000    1.609438
+    3.000000    2.140066
+    4.000000    2.564949
+    5.000000    2.917771
+    6.000000    3.218876
+    7.000000    3.481240
+    8.000000    3.713572
+    9.000000    3.921973
+   10.000000    4.110874
+   ---------------------
+
+Final Solver Statistics:
+   Internal solver steps = 97 (attempted = 97)
+   Total RHS evals:  Fe = 586,  Fi = 0
+   Total number of error test failures = 0
+
diff --git a/examples/arkode/C_serial/ark_brusselator.c b/examples/arkode/C_serial/ark_brusselator.c
new file mode 100644
index 0000000..9869114
--- /dev/null
+++ b/examples/arkode/C_serial/ark_brusselator.c
@@ -0,0 +1,322 @@
+/*-----------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates a brusselator problem from chemical 
+ * kinetics.  This is an ODE system with 3 components, Y = [u,v,w], 
+ * satisfying the equations,
+ *    du/dt = a - (w+1)*u + v*u^2
+ *    dv/dt = w*u - v*u^2
+ *    dw/dt = (b-w)/ep - w*u
+ * for t in the interval [0.0, 10.0], with initial conditions 
+ * Y0 = [u0,v0,w0]. 
+ * 
+ * We have 3 different testing scenarios:
+ *
+ * Test 1:  u0=3.9,  v0=1.1,  w0=2.8,  a=1.2,  b=2.5,  ep=1.0e-5
+ *    Here, all three components exhibit a rapid transient change 
+ *    during the first 0.2 time units, followed by a slow and 
+ *    smooth evolution.
+ *
+ * Test 2:  u0=1.2,  v0=3.1,  w0=3,  a=1,  b=3.5,  ep=5.0e-6
+ *    Here, w experiences a fast initial transient, jumping 0.5 
+ *    within a few steps.  All values proceed smoothly until 
+ *    around t=6.5, when both u and v undergo a sharp transition, 
+ *    with u increaseing from around 0.5 to 5 and v decreasing 
+ *    from around 6 to 1 in less than 0.5 time units.  After this
+ *    transition, both u and v continue to evolve somewhat 
+ *    rapidly for another 1.4 time units, and finish off smoothly.
+ *
+ * Test 3:  u0=3,  v0=3,  w0=3.5,  a=0.5,  b=3,  ep=5.0e-4
+ *    Here, all components undergo very rapid initial transients 
+ *    during the first 0.3 time units, and all then proceed very 
+ *    smoothly for the remainder of the simulation.
+ *
+ * This file is hard-coded to use test 2.
+ * 
+ * This program solves the problem with the DIRK method, using a
+ * Newton iteration with the ARKDENSE dense linear solver, and a
+ * user-supplied Jacobian routine.
+ *
+ * 100 outputs are printed at equal intervals, and run statistics 
+ * are printed at the end.
+ *-----------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKode fcts., consts. */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fcts., macros */
+#include <arkode/arkode_dense.h>      /* prototype for ARKDense solver */
+#include <sundials/sundials_dense.h>  /* defs. of DlsMat and DENSE_ELEM */
+#include <sundials/sundials_types.h>  /* def. of type 'realtype' */
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main Program */
+int main()
+{
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);     /* initial time */
+  realtype Tf = RCONST(10.0);    /* final time */
+  realtype dTout = RCONST(1.0);  /* time between outputs */
+  long int NEQ = 3;              /* number of dependent vars. */
+  int Nt = ceil(Tf/dTout);       /* number of output times */
+  int test = 2;                  /* test problem to run */
+  realtype reltol = 1.0e-6;      /* tolerances */
+  realtype abstol = 1.0e-10;
+  realtype a, b, ep, u0, v0, w0;
+
+  /* general problem variables */
+  int flag;                      /* reusable error-checking flag */
+  N_Vector y = NULL;             /* empty vector for storing solution */
+  void *arkode_mem = NULL;       /* empty ARKode memory structure */
+  realtype rdata[3];
+  FILE *UFID;
+  realtype t, tout;
+  int iout;
+  long int nst, nst_a, nfe, nfi, nsetups, nje, nfeLS, nni, ncfn, netf;
+
+  /* set up the test problem according to the desired test */
+  if (test == 1) {
+    u0 = RCONST(3.9);
+    v0 = RCONST(1.1);
+    w0 = RCONST(2.8);
+    a  = RCONST(1.2);
+    b  = RCONST(2.5);
+    ep = RCONST(1.0e-5);
+  } else if (test == 3) {
+    u0 = RCONST(3.0);
+    v0 = RCONST(3.0);
+    w0 = RCONST(3.5);
+    a  = RCONST(0.5);
+    b  = RCONST(3.0);
+    ep = RCONST(5.0e-4);
+  } else {
+    u0 = RCONST(1.2);
+    v0 = RCONST(3.1);
+    w0 = RCONST(3.0);
+    a  = RCONST(1.0);
+    b  = RCONST(3.5);
+    ep = RCONST(5.0e-6);
+  }
+
+  /* Initial problem output */
+  printf("\nBrusselator ODE test problem:\n");
+  printf("    initial conditions:  u0 = %g,  v0 = %g,  w0 = %g\n",u0,v0,w0);
+  printf("    problem parameters:  a = %g,  b = %g,  ep = %g\n",a,b,ep);
+  printf("    reltol = %.1e,  abstol = %.1e\n\n",reltol,abstol);
+
+  /* Initialize data structures */
+  rdata[0] = a;     /* set user data  */
+  rdata[1] = b;
+  rdata[2] = ep;
+  y = N_VNew_Serial(NEQ);           /* Create serial vector for solution */
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return 1;
+  NV_Ith_S(y,0) = u0;               /* Set initial conditions */
+  NV_Ith_S(y,1) = v0;
+  NV_Ith_S(y,2) = w0;
+  arkode_mem = ARKodeCreate();      /* Create the solver memory */
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set routines */
+  flag = ARKodeSetUserData(arkode_mem, (void *) rdata);     /* Pass rdata to user functions */
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);    /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  /* Linear solver specification */
+  flag = ARKDense(arkode_mem, NEQ);                         /* Specify dense linear solver */
+  if (check_flag(&flag, "ARKDense", 1)) return 1;
+  flag = ARKDlsSetDenseJacFn(arkode_mem, Jac);              /* Set Jacobian routine */
+  if (check_flag(&flag, "ARKDlsSetDenseJacFn", 1)) return 1;
+
+  /* Open output stream for results, output comment line */
+  UFID = fopen("solution.txt","w");
+  fprintf(UFID,"# t u v w\n");
+
+  /* output initial condition to disk */
+  fprintf(UFID," %.16e %.16e %.16e %.16e\n", 
+	  T0, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));  
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t = T0;
+  tout = T0+dTout;
+  printf("        t           u           v           w\n");
+  printf("   -------------------------------------------\n");
+  for (iout=0; iout<Nt; iout++) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);      /* call integrator */
+    if (check_flag(&flag, "ARKode", 1)) break;
+    printf("  %10.6f  %10.6f  %10.6f  %10.6f\n",             /* access/print solution */
+           t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));
+    fprintf(UFID," %.16e %.16e %.16e %.16e\n", 
+	    t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));  
+    if (flag >= 0) {                                         /* successful solve: update time */
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                                 /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+  }
+  printf("   -------------------------------------------\n");
+  fclose(UFID);
+
+  /* Print some final statistics */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+  flag = ARKDlsGetNumJacEvals(arkode_mem, &nje);
+  check_flag(&flag, "ARKDlsGetNumJacEvals", 1);
+  flag = ARKDlsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total linear solver setups = %li\n", nsetups);
+  printf("   Total RHS evals for setting up the linear system = %li\n", nfeLS);
+  printf("   Total number of Jacobian evaluations = %li\n", nje);
+  printf("   Total number of Newton iterations = %li\n", nni);
+  printf("   Total number of linear solver convergence failures = %li\n", ncfn);
+  printf("   Total number of error test failures = %li\n\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy_Serial(y);        /* Free y vector */
+  ARKodeFree(&arkode_mem);     /* Free integrator memory */
+  return 0;
+}
+
+/*-------------------------------
+ * Functions called by the solver
+ *-------------------------------*/
+
+/* f routine to compute the ODE RHS function f(t,y). */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype *rdata = (realtype *) user_data;   /* cast user_data to realtype */
+  realtype a  = rdata[0];                     /* access data entries */
+  realtype b  = rdata[1];
+  realtype ep = rdata[2];
+  realtype u = NV_Ith_S(y,0);                 /* access solution values */
+  realtype v = NV_Ith_S(y,1);
+  realtype w = NV_Ith_S(y,2);
+
+  /* fill in the RHS function */
+  NV_Ith_S(ydot,0) = a - (w+1.0)*u + v*u*u;
+  NV_Ith_S(ydot,1) = w*u - v*u*u;
+  NV_Ith_S(ydot,2) = (b-w)/ep - w*u;
+
+  return 0;                                  /* Return with success */
+}
+
+/* Jacobian routine to compute J(t,y) = df/dy. */
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *rdata = (realtype *) user_data;   /* cast user_data to realtype */
+  realtype ep = rdata[2];                     /* access data entries */
+  realtype u = NV_Ith_S(y,0);                 /* access solution values */
+  realtype v = NV_Ith_S(y,1);
+  realtype w = NV_Ith_S(y,2);
+
+  /* fill in the Jacobian */
+  DENSE_ELEM(J,0,0) = -(w+1.0) + 2.0*u*v;
+  DENSE_ELEM(J,0,1) = u*u;
+  DENSE_ELEM(J,0,2) = -u;
+
+  DENSE_ELEM(J,1,0) = w - 2.0*u*v;
+  DENSE_ELEM(J,1,1) = -u*u;
+  DENSE_ELEM(J,1,2) = u;
+
+  DENSE_ELEM(J,2,0) = -w;
+  DENSE_ELEM(J,2,1) = 0.0;
+  DENSE_ELEM(J,2,2) = -1.0/ep - u;
+
+  return 0;                                  /* Return with success */
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_brusselator.out b/examples/arkode/C_serial/ark_brusselator.out
new file mode 100644
index 0000000..e27309a
--- /dev/null
+++ b/examples/arkode/C_serial/ark_brusselator.out
@@ -0,0 +1,30 @@
+
+Brusselator ODE test problem:
+    initial conditions:  u0 = 1.2,  v0 = 3.1,  w0 = 3
+    problem parameters:  a = 1,  b = 3.5,  ep = 5e-06
+    reltol = 1.0e-06,  abstol = 1.0e-10
+
+        t           u           v           w
+   -------------------------------------------
+    1.000000    1.103849    3.013163    3.499981
+    2.000000    0.688000    3.521381    3.499988
+    3.000000    0.409466    4.277885    3.499993
+    4.000000    0.367886    4.942005    3.499994
+    5.000000    0.413854    5.510624    3.499993
+    6.000000    0.589233    5.855678    3.499990
+    7.000000    4.756553    0.735408    3.499917
+    8.000000    1.813439    1.575779    3.499968
+    9.000000    0.527897    2.807368    3.499991
+   10.000000    0.305599    3.657381    3.499995
+   -------------------------------------------
+
+Final Solver Statistics:
+   Internal solver steps = 254 (attempted = 258)
+   Total RHS evals:  Fe = 0,  Fi = 4714
+   Total linear solver setups = 99
+   Total RHS evals for setting up the linear system = 0
+   Total number of Jacobian evaluations = 66
+   Total number of Newton iterations = 3428
+   Total number of linear solver convergence failures = 2
+   Total number of error test failures = 2
+
diff --git a/examples/arkode/C_serial/ark_brusselator1D.c b/examples/arkode/C_serial/ark_brusselator1D.c
new file mode 100644
index 0000000..e704619
--- /dev/null
+++ b/examples/arkode/C_serial/ark_brusselator1D.c
@@ -0,0 +1,478 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates a brusselator problem from chemical 
+ * kinetics.  This is n PDE system with 3 components, Y = [u,v,w], 
+ * satisfying the equations,
+ *    u_t = du*u_xx + a - (w+1)*u + v*u^2
+ *    v_t = dv*v_xx + w*u - v*u^2
+ *    w_t = dw*w_xx + (b-w)/ep - w*u
+ * for t in [0, 80], x in [0, 1], with initial conditions
+ *    u(0,x) =  a  + 0.1*sin(pi*x)
+ *    v(0,x) = b/a + 0.1*sin(pi*x)
+ *    w(0,x) =  b  + 0.1*sin(pi*x),
+ * and with stationary boundary conditions, i.e. 
+ *    u_t(t,0) = u_t(t,1) = 0,
+ *    v_t(t,0) = v_t(t,1) = 0,
+ *    w_t(t,0) = w_t(t,1) = 0.
+ * Note: these can also be implemented as Dirichlet boundary 
+ * conditions with values identical to the initial conditions.
+ * 
+ * The spatial derivatives are computed using second-order 
+ * centered differences, with the data distributed over N points 
+ * on a uniform spatial grid.
+ *
+ * This program solves the problem with the DIRK method, using a
+ * Newton iteration with the ARKBAND band linear solver, and a
+ * user-supplied Jacobian routine.
+ *
+ * 100 outputs are printed at equal intervals, and run statistics 
+ * are printed at the end.
+ *---------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKode fcts., consts. */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fcts., macros */
+#include <arkode/arkode_band.h>       /* prototype for ARKBand solver */
+#include <sundials/sundials_band.h>   /* defs. of DlsMat and BAND_ELEM */
+#include <sundials/sundials_types.h>  /* def. of type 'realtype' */
+#include <sundials/sundials_math.h>   /* def. of SUNRsqrt, etc. */
+
+/* accessor macros between (x,v) location and 1D NVector array */
+#define IDX(x,v) (3*(x)+v)
+
+/* user data structure */
+typedef struct {
+  long int N;    /* number of intervals     */
+  realtype dx;   /* mesh spacing            */
+  realtype a;    /* constant forcing on u   */
+  realtype b;    /* steady-state value of w */
+  realtype du;   /* diffusion coeff for u   */
+  realtype dv;   /* diffusion coeff for v   */
+  realtype dw;   /* diffusion coeff for w   */
+  realtype ep;   /* stiffness parameter     */
+} *UserData;
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector y, N_Vector fy,
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private helper functions  */
+static int LaplaceMatrix(realtype c, DlsMat Jac, UserData udata);
+static int ReactionJac(realtype c, N_Vector y, DlsMat Jac, UserData udata);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main Program */
+int main()
+{
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);    /* initial time */
+  realtype Tf = RCONST(10.0);   /* final time */
+  int Nt = 100;                 /* total number of output times */
+  int Nvar = 3;                 /* number of solution fields */
+  UserData udata = NULL;
+  realtype *data;
+  long int N = 201;             /* spatial mesh size */
+  realtype a = 0.6;             /* problem parameters */
+  realtype b = 2.0;
+  realtype du = 0.025;
+  realtype dv = 0.025;
+  realtype dw = 0.025;
+  realtype ep = 1.0e-5;         /* stiffness parameter */
+  realtype reltol = 1.0e-6;     /* tolerances */
+  realtype abstol = 1.0e-10;
+  long int NEQ, i;
+
+  /* general problem variables */
+  int flag;                     /* reusable error-checking flag */
+  N_Vector y = NULL;            /* empty vector for storing solution */
+  N_Vector umask = NULL;        /* empty mask vectors for viewing solution components */
+  N_Vector vmask = NULL;
+  N_Vector wmask = NULL;
+  void *arkode_mem = NULL;      /* empty ARKode memory structure */
+  realtype pi, t, dTout, tout, u, v, w;
+  FILE *FID, *UFID, *VFID, *WFID;
+  int iout;
+  long int nst, nst_a, nfe, nfi, nsetups, nje, nfeLS, nni, ncfn, netf;
+
+  /* allocate udata structure */
+  udata = (UserData) malloc(sizeof(*udata));
+  if (check_flag((void *) udata, "malloc", 2)) return 1;
+
+  /* store the inputs in the UserData structure */
+  udata->N  = N;
+  udata->a  = a;
+  udata->b  = b;
+  udata->du = du;
+  udata->dv = dv;
+  udata->dw = dw;
+  udata->ep = ep;
+
+  /* set total allocated vector length */
+  NEQ = Nvar*udata->N;
+
+  /* Initial problem output */
+  printf("\n1D Brusselator PDE test problem:\n");
+  printf("    N = %li,  NEQ = %li\n", udata->N, NEQ);
+  printf("    problem parameters:  a = %g,  b = %g,  ep = %g\n",
+      udata->a, udata->b, udata->ep);
+  printf("    diffusion coefficients:  du = %g,  dv = %g,  dw = %g\n",
+      udata->du, udata->dv, udata->dw);
+  printf("    reltol = %.1e,  abstol = %.1e\n\n", reltol, abstol);
+
+  /* Initialize data structures */
+  y = N_VNew_Serial(NEQ);           /* Create serial vector for solution */
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return 1;
+  udata->dx = RCONST(1.0)/(N-1);    /* set spatial mesh spacing */
+  data = N_VGetArrayPointer(y);     /* Access data array for new NVector y */
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  umask = N_VNew_Serial(NEQ);       /* Create serial vector masks */
+  if (check_flag((void *)umask, "N_VNew_Serial", 0)) return 1;
+  vmask = N_VNew_Serial(NEQ);
+  if (check_flag((void *)vmask, "N_VNew_Serial", 0)) return 1;
+  wmask = N_VNew_Serial(NEQ);
+  if (check_flag((void *)wmask, "N_VNew_Serial", 0)) return 1;
+
+  /* Set initial conditions into y */
+  pi = RCONST(4.0)*atan(RCONST(1.0));
+  for (i=0; i<N; i++) {
+    data[IDX(i,0)] =  a  + RCONST(0.1)*sin(pi*i*udata->dx);  /* u */
+    data[IDX(i,1)] = b/a + RCONST(0.1)*sin(pi*i*udata->dx);  /* v */
+    data[IDX(i,2)] =  b  + RCONST(0.1)*sin(pi*i*udata->dx);  /* w */
+  }
+
+  /* Set mask array values for each solution component */
+  N_VConst(0.0, umask);
+  data = N_VGetArrayPointer(umask);
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,0)] = RCONST(1.0);
+
+  N_VConst(0.0, vmask);
+  data = N_VGetArrayPointer(vmask);
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,1)] = RCONST(1.0);
+
+  N_VConst(0.0, wmask);
+  data = N_VGetArrayPointer(wmask);
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,2)] = RCONST(1.0);
+
+  /* Create the solver memory */
+  arkode_mem = ARKodeCreate();
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set routines */
+  flag = ARKodeSetUserData(arkode_mem, (void *) udata);     /* Pass udata to user functions */
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);    /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  /* Linear solver specification */
+  flag = ARKBand(arkode_mem, NEQ, 4, 4);          /* Specify the band linear solver */
+  if (check_flag(&flag, "ARKBand", 1)) return 1;
+  flag = ARKDlsSetBandJacFn(arkode_mem, Jac);     /* Set the Jacobian routine */
+  if (check_flag(&flag, "ARKDlsSetBandJacFn", 1)) return 1;
+
+  /* output spatial mesh to disk */
+  FID = fopen("bruss_mesh.txt","w");
+  for (i=0; i<N; i++)  fprintf(FID,"  %.16e\n", udata->dx*i);
+  fclose(FID);
+
+  /* Open output streams for results, access data array */
+  UFID=fopen("bruss_u.txt","w");
+  VFID=fopen("bruss_v.txt","w");
+  WFID=fopen("bruss_w.txt","w");
+
+  /* output initial condition to disk */
+  data = N_VGetArrayPointer(y);
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[IDX(i,0)]);
+  for (i=0; i<N; i++)  fprintf(VFID," %.16e", data[IDX(i,1)]);
+  for (i=0; i<N; i++)  fprintf(WFID," %.16e", data[IDX(i,2)]);
+  fprintf(UFID,"\n");
+  fprintf(VFID,"\n");
+  fprintf(WFID,"\n");
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t = T0;
+  dTout = (Tf-T0)/Nt;
+  tout = T0+dTout;
+  printf("        t      ||u||_rms   ||v||_rms   ||w||_rms\n");
+  printf("   ----------------------------------------------\n");
+  for (iout=0; iout<Nt; iout++) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);    /* call integrator */
+    if (check_flag(&flag, "ARKode", 1)) break;
+    u = N_VWL2Norm(y,umask);                               /* access/print solution statistics */
+    u = SUNRsqrt(u*u/N);
+    v = N_VWL2Norm(y,vmask);
+    v = SUNRsqrt(v*v/N);
+    w = N_VWL2Norm(y,wmask);
+    w = SUNRsqrt(w*w/N);
+    printf("  %10.6f  %10.6f  %10.6f  %10.6f\n", t, u, v, w);
+    if (flag >= 0) {                                       /* successful solve: update output time */
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                               /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+
+    /* output results to disk */
+    for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[IDX(i,0)]);
+    for (i=0; i<N; i++)  fprintf(VFID," %.16e", data[IDX(i,1)]);
+    for (i=0; i<N; i++)  fprintf(WFID," %.16e", data[IDX(i,2)]);
+    fprintf(UFID,"\n");
+    fprintf(VFID,"\n");
+    fprintf(WFID,"\n");
+  }
+  printf("   ----------------------------------------------\n");
+  fclose(UFID);
+  fclose(VFID);
+  fclose(WFID);
+
+  /* Print some final statistics */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+  flag = ARKDlsGetNumJacEvals(arkode_mem, &nje);
+  check_flag(&flag, "ARKDlsGetNumJacEvals", 1);
+  flag = ARKDlsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total linear solver setups = %li\n", nsetups);
+  printf("   Total RHS evals for setting up the linear system = %li\n", nfeLS);
+  printf("   Total number of Jacobian evaluations = %li\n", nje);
+  printf("   Total number of Newton iterations = %li\n", nni);
+  printf("   Total number of nonlinear solver convergence failures = %li\n", ncfn);
+  printf("   Total number of error test failures = %li\n\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy_Serial(y);         /* Free vectors */
+  N_VDestroy_Serial(umask);
+  N_VDestroy_Serial(vmask);
+  N_VDestroy_Serial(wmask);
+  free(udata);                  /* Free user data */
+  ARKodeFree(&arkode_mem);      /* Free integrator memory */
+  return 0;
+}
+
+/*-------------------------------
+ * Functions called by the solver
+ *-------------------------------*/
+
+/* f routine to compute the ODE RHS function f(t,y). */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  UserData udata = (UserData) user_data;      /* access problem data */
+  long int N  = udata->N;                     /* set variable shortcuts */
+  realtype a  = udata->a;
+  realtype b  = udata->b;
+  realtype ep = udata->ep;
+  realtype du = udata->du;
+  realtype dv = udata->dv;
+  realtype dw = udata->dw;
+  realtype dx = udata->dx;
+  realtype *Ydata=NULL, *dYdata=NULL;
+  realtype uconst, vconst, wconst, u, ul, ur, v, vl, vr, w, wl, wr;
+  long int i;
+
+  Ydata = N_VGetArrayPointer(y);     /* access data arrays */
+  if (check_flag((void *)Ydata, "N_VGetArrayPointer", 0)) return 1;
+  dYdata = N_VGetArrayPointer(ydot);
+  if (check_flag((void *)dYdata, "N_VGetArrayPointer", 0)) return 1;
+  N_VConst(0.0, ydot);                        /* initialize ydot to zero */
+
+  /* iterate over domain, computing all equations */
+  uconst = du/dx/dx;
+  vconst = dv/dx/dx;
+  wconst = dw/dx/dx;
+  for (i=1; i<N-1; i++) {
+    /* set shortcuts */
+    u = Ydata[IDX(i,0)];  ul = Ydata[IDX(i-1,0)];  ur = Ydata[IDX(i+1,0)];
+    v = Ydata[IDX(i,1)];  vl = Ydata[IDX(i-1,1)];  vr = Ydata[IDX(i+1,1)];
+    w = Ydata[IDX(i,2)];  wl = Ydata[IDX(i-1,2)];  wr = Ydata[IDX(i+1,2)];
+
+    /* Fill in ODE RHS for u */
+    dYdata[IDX(i,0)] = (ul - RCONST(2.0)*u + ur)*uconst + a - (w+RCONST(1.0))*u + v*u*u;
+
+    /* Fill in ODE RHS for v */
+    dYdata[IDX(i,1)] = (vl - RCONST(2.0)*v + vr)*vconst + w*u - v*u*u;
+
+    /* Fill in ODE RHS for w */
+    dYdata[IDX(i,2)] = (wl - RCONST(2.0)*w + wr)*wconst + (b-w)/ep - w*u;
+  }
+
+  /* enforce stationary boundaries */
+  dYdata[IDX(0,0)]   = dYdata[IDX(0,1)]   = dYdata[IDX(0,2)]   = 0.0;
+  dYdata[IDX(N-1,0)] = dYdata[IDX(N-1,1)] = dYdata[IDX(N-1,2)] = 0.0;
+
+  return 0;     /* Return with success */
+}
+
+/* Jacobian routine to compute J(t,y) = df/dy. */
+static int Jac(long int M, long int mu, long int ml,
+               realtype t, N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  UserData udata = (UserData) user_data;     /* access problem data */
+  SetToZero(J);                              /* Initialize Jacobian to zero */
+
+  /* Fill in the Laplace matrix */
+  LaplaceMatrix(RCONST(1.0), J, udata);
+
+  /* Add in the Jacobian of the reaction terms matrix */
+  ReactionJac(RCONST(1.0), y, J, udata);
+
+  return 0;                                  /* Return with success */
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Routine to compute the stiffness matrix from (L*y), scaled by the factor c.
+   We add the result into Jac and do not erase what was already there */
+static int LaplaceMatrix(realtype c, DlsMat Jac, UserData udata)
+{
+  long int i;                /* set shortcuts */
+  long int N = udata->N;
+  realtype dx = udata->dx;
+
+  /* iterate over intervals, filling in Jacobian of (L*y) */
+  for (i=1; i<N-1; i++) {
+    BAND_ELEM(Jac,IDX(i,0),IDX(i-1,0)) += c*udata->du/dx/dx;
+    BAND_ELEM(Jac,IDX(i,1),IDX(i-1,1)) += c*udata->dv/dx/dx;
+    BAND_ELEM(Jac,IDX(i,2),IDX(i-1,2)) += c*udata->dw/dx/dx;
+    BAND_ELEM(Jac,IDX(i,0),IDX(i,0)) += -c*RCONST(2.0)*udata->du/dx/dx;
+    BAND_ELEM(Jac,IDX(i,1),IDX(i,1)) += -c*RCONST(2.0)*udata->dv/dx/dx;
+    BAND_ELEM(Jac,IDX(i,2),IDX(i,2)) += -c*RCONST(2.0)*udata->dw/dx/dx;
+    BAND_ELEM(Jac,IDX(i,0),IDX(i+1,0)) += c*udata->du/dx/dx;
+    BAND_ELEM(Jac,IDX(i,1),IDX(i+1,1)) += c*udata->dv/dx/dx;
+    BAND_ELEM(Jac,IDX(i,2),IDX(i+1,2)) += c*udata->dw/dx/dx;
+  }
+
+  return 0;                  /* Return with success */
+}
+
+/* Routine to compute the Jacobian matrix from R(y), scaled by the factor c.
+   We add the result into Jac and do not erase what was already there */
+static int ReactionJac(realtype c, N_Vector y, DlsMat Jac, UserData udata)
+{
+  long int N  = udata->N;                      /* set shortcuts */
+  long int i;
+  realtype u, v, w;
+  realtype ep = udata->ep;
+  realtype *Ydata = N_VGetArrayPointer(y);     /* access solution array */
+  if (check_flag((void *)Ydata, "N_VGetArrayPointer", 0)) return 1;
+
+  /* iterate over nodes, filling in Jacobian of reaction terms */
+  for (i=1; i<N-1; i++) {
+
+    u = Ydata[IDX(i,0)];                       /* set nodal value shortcuts */
+    v = Ydata[IDX(i,1)];
+    w = Ydata[IDX(i,2)];
+
+    /* all vars wrt u */
+    BAND_ELEM(Jac,IDX(i,0),IDX(i,0)) += c*(RCONST(2.0)*u*v-(w+RCONST(1.0)));
+    BAND_ELEM(Jac,IDX(i,1),IDX(i,0)) += c*(w - RCONST(2.0)*u*v);
+    BAND_ELEM(Jac,IDX(i,2),IDX(i,0)) += c*(-w);
+
+    /* all vars wrt v */
+    BAND_ELEM(Jac,IDX(i,0),IDX(i,1)) += c*(u*u);
+    BAND_ELEM(Jac,IDX(i,1),IDX(i,1)) += c*(-u*u);
+
+    /* all vars wrt w */
+    BAND_ELEM(Jac,IDX(i,0),IDX(i,2)) += c*(-u);
+    BAND_ELEM(Jac,IDX(i,1),IDX(i,2)) += c*(u);
+    BAND_ELEM(Jac,IDX(i,2),IDX(i,2)) += c*(-RCONST(1.0)/ep - u);
+
+  }
+
+  return 0;                                   /* Return with success */
+}
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_brusselator1D.out b/examples/arkode/C_serial/ark_brusselator1D.out
new file mode 100644
index 0000000..f572e99
--- /dev/null
+++ b/examples/arkode/C_serial/ark_brusselator1D.out
@@ -0,0 +1,121 @@
+
+1D Brusselator PDE test problem:
+    N = 201,  NEQ = 603
+    problem parameters:  a = 0.6,  b = 2,  ep = 1e-05
+    diffusion coefficients:  du = 0.025,  dv = 0.025,  dw = 0.025
+    reltol = 1.0e-06,  abstol = 1.0e-10
+
+        t      ||u||_rms   ||v||_rms   ||w||_rms
+   ----------------------------------------------
+    0.100000    0.673914    3.377329    1.999987
+    0.200000    0.684316    3.356619    1.999987
+    0.300000    0.695306    3.334633    1.999986
+    0.400000    0.706918    3.311313    1.999986
+    0.500000    0.719185    3.286601    1.999986
+    0.600000    0.732137    3.260442    1.999986
+    0.700000    0.745798    3.232787    1.999985
+    0.800000    0.760185    3.203596    1.999985
+    0.900000    0.775303    3.172839    1.999985
+    1.000000    0.791135    3.140510    1.999984
+    1.100000    0.807648    3.106624    1.999984
+    1.200000    0.824771    3.071233    1.999984
+    1.300000    0.842402    3.034426    1.999983
+    1.400000    0.860384    2.996350    1.999983
+    1.500000    0.878514    2.957206    1.999983
+    1.600000    0.896525    2.917266    1.999982
+    1.700000    0.914089    2.876873    1.999982
+    1.800000    0.930823    2.836438    1.999982
+    1.900000    0.946292    2.796446    1.999982
+    2.000000    0.960033    2.757430    1.999981
+    2.100000    0.971576    2.719962    1.999981
+    2.200000    0.980475    2.684623    1.999981
+    2.300000    0.986338    2.651980    1.999981
+    2.400000    0.988852    2.622560    1.999981
+    2.500000    0.987815    2.596818    1.999981
+    2.600000    0.983141    2.575128    1.999981
+    2.700000    0.974858    2.557766    1.999981
+    2.800000    0.963114    2.544903    1.999981
+    2.900000    0.948154    2.536611    1.999981
+    3.000000    0.930299    2.532868    1.999982
+    3.100000    0.909930    2.533567    1.999982
+    3.200000    0.887464    2.538529    1.999983
+    3.300000    0.863335    2.547515    1.999983
+    3.400000    0.837978    2.560241    1.999983
+    3.500000    0.811818    2.576391    1.999984
+    3.600000    0.785255    2.595624    1.999984
+    3.700000    0.758659    2.617587    1.999985
+    3.800000    0.732363    2.641922    1.999986
+    3.900000    0.706662    2.668274    1.999986
+    4.000000    0.681809    2.696300    1.999986
+    4.100000    0.658012    2.725670    1.999987
+    4.200000    0.635435    2.756075    1.999987
+    4.300000    0.614205    2.787228    1.999988
+    4.400000    0.594404    2.818869    1.999988
+    4.500000    0.576082    2.850764    1.999989
+    4.600000    0.559255    2.882710    1.999989
+    4.700000    0.543909    2.914529    1.999989
+    4.800000    0.530011    2.946071    1.999990
+    4.900000    0.517506    2.977209    1.999990
+    5.000000    0.506326    3.007843    1.999990
+    5.100000    0.496394    3.037889    1.999990
+    5.200000    0.487626    3.067283    1.999990
+    5.300000    0.479935    3.095976    1.999991
+    5.400000    0.473237    3.123932    1.999991
+    5.500000    0.467445    3.151125    1.999991
+    5.600000    0.462480    3.177540    1.999991
+    5.700000    0.458264    3.203165    1.999991
+    5.800000    0.454726    3.227997    1.999991
+    5.900000    0.451800    3.252035    1.999991
+    6.000000    0.449425    3.275283    1.999991
+    6.100000    0.447546    3.297744    1.999991
+    6.200000    0.446115    3.319428    1.999991
+    6.300000    0.445086    3.340340    1.999991
+    6.400000    0.444419    3.360491    1.999991
+    6.500000    0.444079    3.379890    1.999991
+    6.600000    0.444034    3.398547    1.999991
+    6.700000    0.444257    3.416470    1.999991
+    6.800000    0.444722    3.433669    1.999991
+    6.900000    0.445409    3.450154    1.999991
+    7.000000    0.446297    3.465934    1.999991
+    7.100000    0.447370    3.481018    1.999991
+    7.200000    0.448614    3.495414    1.999991
+    7.300000    0.450016    3.509131    1.999991
+    7.400000    0.451564    3.522176    1.999991
+    7.500000    0.453249    3.534557    1.999991
+    7.600000    0.455064    3.546280    1.999991
+    7.700000    0.457000    3.557353    1.999991
+    7.800000    0.459052    3.567781    1.999991
+    7.900000    0.461216    3.577571    1.999991
+    8.000000    0.463486    3.586728    1.999991
+    8.100000    0.465860    3.595257    1.999991
+    8.200000    0.468335    3.603162    1.999991
+    8.300000    0.470909    3.610447    1.999991
+    8.400000    0.473582    3.617116    1.999991
+    8.500000    0.476352    3.623171    1.999991
+    8.600000    0.479220    3.628616    1.999991
+    8.700000    0.482186    3.633451    1.999991
+    8.800000    0.485250    3.637679    1.999990
+    8.900000    0.488416    3.641299    1.999990
+    9.000000    0.491684    3.644311    1.999990
+    9.100000    0.495058    3.646715    1.999990
+    9.200000    0.498540    3.648509    1.999990
+    9.300000    0.502134    3.649691    1.999990
+    9.400000    0.505844    3.650257    1.999990
+    9.500000    0.509675    3.650202    1.999990
+    9.600000    0.513632    3.649521    1.999990
+    9.700000    0.517722    3.648209    1.999990
+    9.800000    0.521951    3.646257    1.999990
+    9.900000    0.526326    3.643656    1.999990
+   10.000000    0.530857    3.640396    1.999990
+   ----------------------------------------------
+
+Final Solver Statistics:
+   Internal solver steps = 99 (attempted = 99)
+   Total RHS evals:  Fe = 0,  Fi = 1695
+   Total linear solver setups = 35
+   Total RHS evals for setting up the linear system = 0
+   Total number of Jacobian evaluations = 14
+   Total number of Newton iterations = 1196
+   Total number of nonlinear solver convergence failures = 0
+   Total number of error test failures = 0
+
diff --git a/examples/arkode/C_serial/ark_brusselator1D_FEM_slu.c b/examples/arkode/C_serial/ark_brusselator1D_FEM_slu.c
new file mode 100644
index 0000000..0546ddc
--- /dev/null
+++ b/examples/arkode/C_serial/ark_brusselator1D_FEM_slu.c
@@ -0,0 +1,1352 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates a brusselator problem from chemical 
+ * kinetics.  This is a PDE system with 3 components, Y = [u,v,w], 
+ * satisfying the equations,
+ *    u_t = du*u_xx + a - (w+1)*u + v*u^2
+ *    v_t = dv*v_xx + w*u - v*u^2
+ *    w_t = dw*w_xx + (b-w)/ep - w*u
+ * for t in [0, 80], x in [0, 1], with initial conditions
+ *    u(0,x) =  a  + 0.1*sin(pi*x)
+ *    v(0,x) = b/a + 0.1*sin(pi*x)
+ *    w(0,x) =  b  + 0.1*sin(pi*x),
+ * and with stationary boundary conditions, i.e. 
+ *    u_t(t,0) = u_t(t,1) = 0
+ *    v_t(t,0) = v_t(t,1) = 0
+ *    w_t(t,0) = w_t(t,1) = 0.
+ * 
+ * Here, we use a piecewise linear Galerkin finite element 
+ * discretization in space, where all element-wise integrals are 
+ * computed using 3-node Gaussian quadrature (since we will have 
+ * quartic polynomials in the reaction terms for the u_t and v_t 
+ * equations, including the test function).  The time derivative 
+ * terms for this system will include a mass matrix, giving rise 
+ * to an ODE system of the form
+ *      M y_t = L y + R(y),
+ * where M is the block mass matrix for each component, L is 
+ * the block Laplace operator for each component, and R(y) is 
+ * a 3x3 block comprised of the nonlinear reaction terms for 
+ * each component.  Since it it highly inefficient to rewrite 
+ * this system as
+ *      y_t = M^{-1}(L y + R(y)),
+ * we solve this system using ARKode, with a user-supplied mass
+ * matrix.  We therefore provide functions to evaluate the ODE RHS 
+ *    f(t,y) = L y + R(y),
+ * its Jacobian
+ *    J(t,y) = L + dR/dy,
+ * and the mass matrix, M.
+ *
+ * This program solves the problem with the DIRK method, using a
+ * Newton iteration with the ARKSUPERLUMT sparse linear solver.
+ *
+ * 100 outputs are printed at equal time intervals, and run 
+ * statistics are printed at the end.
+ *---------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <arkode/arkode.h>             /* prototypes for ARKode fcts., consts. */
+#include <nvector/nvector_serial.h>    /* serial N_Vector types, fcts., macros */
+#include <arkode/arkode_superlumt.h>   /* prototype for ARKSuperLUMT solver */
+#include <sundials/sundials_types.h>   /* def. of type 'realtype' */
+#include <sundials/sundials_math.h>    /* def. of SUNRsqrt, etc. */
+#include <sundials/sundials_sparse.h>  /* defs. of SlsMat and SlsMat routines */
+
+
+/* accessor macros between (x,v) location and 1D NVector array */
+/* [variables are grouped according to spatial location] */
+#define IDX(x,v) (3*(x)+v)
+
+/* constants */
+#define ZERO (RCONST(0.0))
+#define ONE  (RCONST(1.0))
+#define TWO  (RCONST(2.0))
+#define HALF (RCONST(0.5))
+
+/* Gaussian quadrature nodes, weights and formula (3 node, 7th-order accurate) */
+#define X1(xl,xr)   (HALF*(xl+xr) - HALF*(xr-xl)*RCONST(0.774596669241483377035853079956))
+#define X2(xl,xr)   (HALF*(xl+xr))
+#define X3(xl,xr)   (HALF*(xl+xr) + HALF*(xr-xl)*RCONST(0.774596669241483377035853079956))
+#define W1          (RCONST(0.55555555555555555555555555555556))
+#define W2          (RCONST(0.88888888888888888888888888888889))
+#define W3          (RCONST(0.55555555555555555555555555555556))
+#define Quad(f1,f2,f3,xl,xr) (HALF*(xr-xl)*(W1*f1 + W2*f2 + W3*f3))
+
+/* evaluation macros for variables, basis functions and basis derivatives */
+#define ChiL(xl,xr,x) ((xr-x)/(xr-xl))
+#define ChiR(xl,xr,x) ((x-xl)/(xr-xl))
+#define ChiL_x(xl,xr) (ONE/(xl-xr))
+#define ChiR_x(xl,xr) (ONE/(xr-xl))
+#define Eval(ul,ur,xl,xr,x) (ul*ChiL(xl,xr,x) + ur*ChiR(xl,xr,x))
+#define Eval_x(ul,ur,xl,xr) (ul*ChiL_x(xl,xr) + ur*ChiR_x(xl,xr))
+
+
+/* user data structure */
+typedef struct {  
+  int N;         /* number of intervals     */
+  realtype *x;   /* mesh node locations     */
+  realtype a;    /* constant forcing on u   */
+  realtype b;    /* steady-state value of w */
+  realtype du;   /* diffusion coeff for u   */
+  realtype dv;   /* diffusion coeff for v   */
+  realtype dw;   /* diffusion coeff for w   */
+  realtype ep;   /* stiffness parameter     */
+  N_Vector tmp;  /* temporary vector        */
+  SlsMat R;      /* temporary storage       */
+} *UserData;
+
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int f_diff(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int f_rx(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int MassMatrix(realtype t, SlsMat M, void *user_data, 
+		      N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int Jac(realtype t, N_Vector y, N_Vector fy, 
+               SlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private helper functions  */
+static int LaplaceMatrix(SlsMat Jac, UserData udata);
+static int ReactionJac(N_Vector y, SlsMat Jac, UserData udata);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main Program */
+int main(int argc, char *argv[]) {
+
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);    /* initial time */
+  realtype Tf = RCONST(10.0);   /* final time */
+  int Nt = 100;                 /* total number of output times */
+  int Nvar = 3;                 /* number of solution fields */
+  UserData udata = NULL;
+  realtype *data;
+  int N = 201;                  /* spatial mesh size */
+  realtype a = 0.6;             /* problem parameters */
+  realtype b = 2.0;
+  realtype du = 0.025;
+  realtype dv = 0.025;
+  realtype dw = 0.025;
+  realtype ep = 1.0e-5;         /* stiffness parameter */
+  realtype reltol = 1.0e-6;     /* tolerances */
+  realtype abstol = 1.0e-10;
+  int i, NEQ, NNZ, num_threads;
+
+  /* general problem variables */
+  int flag;                     /* reusable error-checking flag */
+  N_Vector y = NULL;
+  N_Vector umask = NULL;
+  N_Vector vmask = NULL;
+  N_Vector wmask = NULL;
+  void *arkode_mem = NULL;
+  FILE *FID, *UFID, *VFID, *WFID;
+  realtype h, z, t, dTout, tout, u, v, w, pi;
+  int iout;
+  long int nst, nst_a, nfe, nfi, nsetups, nje, nni, ncfn;
+  long int netf, nms, nMv;
+
+  /* if a command-line argument was supplied, set num_threads */
+  num_threads = 1;
+  if (argc > 1)
+    num_threads = strtol(argv[1], NULL, 0);
+
+  /* allocate udata structure */
+  udata = (UserData) malloc(sizeof(*udata));
+  udata->x = NULL;
+  udata->tmp = NULL;
+  udata->R = NULL;
+  if (check_flag((void *)udata, "malloc", 2)) return 1;
+
+  /* store the inputs in the UserData structure */
+  udata->N  = N;
+  udata->a  = a;
+  udata->b  = b;
+  udata->du = du;
+  udata->dv = dv;
+  udata->dw = dw;
+  udata->ep = ep;
+
+  /* set total allocated vector length (N-1 intervals, Dirichlet end points) */
+  NEQ = Nvar*udata->N;
+
+  /* Initial problem output */
+  printf("\n1D FEM Brusselator PDE test problem:\n");
+  printf("    N = %i,  NEQ = %i\n", udata->N, NEQ);
+  printf("    num_threads = %i\n", num_threads);
+  printf("    problem parameters:  a = %g,  b = %g,  ep = %g\n",
+	 udata->a, udata->b, udata->ep);
+  printf("    diffusion coefficients:  du = %g,  dv = %g,  dw = %g\n", 
+	 udata->du, udata->dv, udata->dw);
+  printf("    reltol = %.1e,  abstol = %.1e\n\n", reltol, abstol);
+
+  /* Initialize data structures */
+  y = N_VNew_Serial(NEQ);           /* Create serial vector for solution */
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return 1;
+  data = N_VGetArrayPointer(y);     /* Access data array for new NVector y */
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  umask = N_VNew_Serial(NEQ);       /* Create serial vector masks */
+  if (check_flag((void *)umask, "N_VNew_Serial", 0)) return 1;
+  vmask = N_VNew_Serial(NEQ);
+  if (check_flag((void *)vmask, "N_VNew_Serial", 0)) return 1;
+  wmask = N_VNew_Serial(NEQ);
+  if (check_flag((void *)wmask, "N_VNew_Serial", 0)) return 1;
+  udata->tmp = N_VNew_Serial(NEQ);  /* temporary N_Vector inside udata */
+  if (check_flag((void *) udata->tmp, "N_VNew_Serial", 0)) return 1;
+
+  /* allocate and set up spatial mesh; this [arbitrarily] clusters 
+     more intervals near the end points of the interval */
+  udata->x = (realtype *) malloc(N*sizeof(realtype));
+  if (check_flag((void *)udata->x, "malloc", 2)) return 1;
+  h = 10.0/(N-1);
+  for (i=0; i<N; i++) {
+    z = -5.0 + h*i;
+    udata->x[i] = 0.5/atan(5.0)*atan(z) + 0.5;
+  }
+
+  /* Set initial conditions into y */
+  pi = RCONST(4.0)*atan(RCONST(1.0));
+  for (i=0; i<N; i++) {
+    data[IDX(i,0)] =  a  + RCONST(0.1)*sin(pi*udata->x[i]);  /* u */
+    data[IDX(i,1)] = b/a + RCONST(0.1)*sin(pi*udata->x[i]);  /* v */
+    data[IDX(i,2)] =  b  + RCONST(0.1)*sin(pi*udata->x[i]);  /* w */
+  }
+
+  /* Set mask array values for each solution component */
+  N_VConst(0.0, umask);
+  data = N_VGetArrayPointer(umask);
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,0)] = ONE;
+
+  N_VConst(0.0, vmask);
+  data = N_VGetArrayPointer(vmask);
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,1)] = ONE;
+
+  N_VConst(0.0, wmask);
+  data = N_VGetArrayPointer(wmask);
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,2)] = ONE;
+
+  
+  /* Create the solver memory */
+  arkode_mem = ARKodeCreate();
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set routines */
+  flag = ARKodeSetUserData(arkode_mem, (void *) udata);     /* Pass udata to user functions */
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);    /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+  flag = ARKodeResStolerance(arkode_mem, abstol);           /* Specify residual tolerance */
+  if (check_flag(&flag, "ARKodeResStolerance", 1)) return 1;
+
+  /* Linear solver specification */
+  NNZ = 15*NEQ;
+  flag = ARKSuperLUMT(arkode_mem, num_threads, NEQ, NNZ);   /* SuperLUMT sparse solver */
+  if (check_flag(&flag, "ARKSuperLUMT", 1)) return 1;
+  flag = ARKSlsSetSparseJacFn(arkode_mem, Jac);             /* Set the Jacobian routine */
+  if (check_flag(&flag, "ARKSlsSetSparseJacFn", 1)) return 1;
+  flag = ARKMassSuperLUMT(arkode_mem, num_threads,          /* Mass matrix linear solver */
+			  NEQ, NNZ, MassMatrix);
+  if (check_flag(&flag, "ARKMassSuperLUMT", 1)) return 1;
+
+  /* output mesh to disk */
+  FID=fopen("bruss_FEM_mesh.txt","w");
+  for (i=0; i<N; i++)  fprintf(FID,"  %.16e\n", udata->x[i]);
+  fclose(FID);
+
+  /* Open output stream for results, access data arrays */
+  UFID = fopen("bruss_FEM_u.txt","w");
+  VFID = fopen("bruss_FEM_v.txt","w");
+  WFID = fopen("bruss_FEM_w.txt","w");
+  data = N_VGetArrayPointer(y);
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+
+  /* output initial condition to disk */
+  for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[IDX(i,0)]);
+  for (i=0; i<N; i++)  fprintf(VFID," %.16e", data[IDX(i,1)]);
+  for (i=0; i<N; i++)  fprintf(WFID," %.16e", data[IDX(i,2)]);
+  fprintf(UFID,"\n");
+  fprintf(VFID,"\n");
+  fprintf(WFID,"\n");
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t  = T0;
+  dTout = Tf/Nt;
+  tout = T0+dTout;
+  printf("        t      ||u||_rms   ||v||_rms   ||w||_rms\n");
+  printf("   ----------------------------------------------\n");
+  for (iout=0; iout<Nt; iout++) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);    /* call integrator */
+    if (check_flag(&flag, "ARKode", 1)) break;
+    u = N_VWL2Norm(y,umask);                               /* access/print solution statistics */
+    u = SUNRsqrt(u*u/N);
+    v = N_VWL2Norm(y,vmask);
+    v = SUNRsqrt(v*v/N);
+    w = N_VWL2Norm(y,wmask);
+    w = SUNRsqrt(w*w/N);
+    printf("  %10.6f  %10.6f  %10.6f  %10.6f\n", t, u, v, w);
+    if (flag >= 0) {                                       /* successful solve: update output time */
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                               /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+
+    /* output results to disk */
+    for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[IDX(i,0)]);
+    for (i=0; i<N; i++)  fprintf(VFID," %.16e", data[IDX(i,1)]);
+    for (i=0; i<N; i++)  fprintf(WFID," %.16e", data[IDX(i,2)]);
+    fprintf(UFID,"\n");
+    fprintf(VFID,"\n");
+    fprintf(WFID,"\n");
+  }
+  printf("   ----------------------------------------------\n");
+  fclose(UFID);
+  fclose(VFID);
+  fclose(WFID);
+
+  /* Print some final statistics */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+  flag = ARKodeGetNumMassSolves(arkode_mem, &nms);
+  check_flag(&flag, "ARKodeGetNumMassSolves", 1);
+  flag = ARKodeGetNumMassMultiplies(arkode_mem, &nMv);
+  check_flag(&flag, "ARKodeGetNumMassMultiplies", 1);
+  flag = ARKSlsGetNumJacEvals(arkode_mem, &nje);
+  check_flag(&flag, "ARKSlsGetNumJacEvals", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total mass matrix solves = %li\n", nms);
+  printf("   Total linear solver setups = %li\n", nsetups);
+  printf("   Total number of Jacobian evaluations = %li\n", nje);
+  printf("   Total number of Newton iterations = %li\n", nni);
+  printf("   Total number of nonlinear solver convergence failures = %li\n", ncfn);
+  printf("   Total number of error test failures = %li\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy_Serial(y);            /* Free vectors */
+  N_VDestroy_Serial(umask);
+  N_VDestroy_Serial(vmask);
+  N_VDestroy_Serial(wmask);
+  SparseDestroyMat(udata->R);      /* Free user data */
+  N_VDestroy_Serial(udata->tmp);
+  free(udata->x);
+  free(udata);
+  ARKodeFree(&arkode_mem);         /* Free integrator memory */
+  return 0;
+}
+
+
+/*------------------------------
+  Functions called by the solver
+ *------------------------------*/
+
+
+/* Routine to compute the ODE RHS function f(t,y), where system is of the form
+        M y_t = f(t,y) := Ly + R(y) 
+   This routine only computes the f(t,y), leaving (M y_t) alone. */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data) {
+
+  /* local data */
+  int ier;
+
+  /* clear out RHS (to be careful) */
+  N_VConst(0.0, ydot);
+
+  /* add reaction terms to RHS */
+  ier = f_rx(t, y, ydot, user_data);
+  if (ier != 0)  return ier;
+  
+  /* add diffusion terms to RHS */
+  ier = f_diff(t, y, ydot, user_data);
+  if (ier != 0)  return ier;
+  
+  return 0;
+}
+
+
+/* Routine to compute the diffusion portion of the ODE RHS function f(t,y). */
+static int f_diff(realtype t, N_Vector y, N_Vector ydot, void *user_data) {
+
+  /* problem data */
+  UserData udata = (UserData) user_data;
+
+  /* shortcuts to number of intervals, background values */
+  int N = udata->N;
+  realtype du = udata->du;
+  realtype dv = udata->dv;
+  realtype dw = udata->dw;
+
+  /* local variables */
+  long int i;
+  realtype ul, ur, vl, vr, wl, wr;
+  realtype xl, xr, f1;
+  booleantype left, right;
+  realtype *Ydata, *RHSdata;
+  
+  /* access data arrays */
+  Ydata = N_VGetArrayPointer(y);
+  if (check_flag((void *)Ydata, "N_VGetArrayPointer", 0)) return 1;
+  RHSdata = N_VGetArrayPointer(ydot);
+  if (check_flag((void *)RHSdata, "N_VGetArrayPointer", 0)) return 1;
+
+  /* iterate over intervals, filling in residual function */
+  for (i=0; i<N-1; i++) {
+
+    /* set booleans to determine whether equations exist on the left/right */
+    left  = (i==0)     ? FALSE : TRUE;
+    right = (i==(N-2)) ? FALSE : TRUE;
+
+    /* set nodal value shortcuts (interval index aligns with left node) */
+    ul = Ydata[IDX(i,0)];
+    vl = Ydata[IDX(i,1)];
+    wl = Ydata[IDX(i,2)];
+    ur = Ydata[IDX(i+1,0)];
+    vr = Ydata[IDX(i+1,1)];
+    wr = Ydata[IDX(i+1,2)];
+
+    /* set mesh shortcuts */
+    xl = udata->x[i];
+    xr = udata->x[i+1];
+
+    /* evaluate L*y on this subinterval
+       NOTE: all f values are the same since constant on interval */
+    /*    left test function */
+    if (left) {
+      /*  u */
+      f1 = -du * Eval_x(ul,ur,xl,xr) * ChiL_x(xl,xr);
+      RHSdata[IDX(i,0)] += Quad(f1,f1,f1,xl,xr);
+
+      /*  v */
+      f1 = -dv * Eval_x(vl,vr,xl,xr) * ChiL_x(xl,xr);
+      RHSdata[IDX(i,1)] += Quad(f1,f1,f1,xl,xr);
+      
+      /*  w */
+      f1 = -dw * Eval_x(wl,wr,xl,xr) * ChiL_x(xl,xr);
+      RHSdata[IDX(i,2)] += Quad(f1,f1,f1,xl,xr);
+    }
+    /*    right test function */
+    if (right) {
+      /*  u */
+      f1 = -du * Eval_x(ul,ur,xl,xr) * ChiR_x(xl,xr);
+      RHSdata[IDX(i+1,0)] += Quad(f1,f1,f1,xl,xr);
+
+      /*  v */
+      f1 = -dv * Eval_x(vl,vr,xl,xr) * ChiR_x(xl,xr);
+      RHSdata[IDX(i+1,1)] += Quad(f1,f1,f1,xl,xr);
+
+      /*  w */
+      f1 = -dw * Eval_x(wl,wr,xl,xr) * ChiR_x(xl,xr);
+      RHSdata[IDX(i+1,2)] += Quad(f1,f1,f1,xl,xr);
+    }
+  }
+
+  return 0;
+}
+
+
+
+/* Routine to compute the reaction portion of the ODE RHS function f(t,y). */
+static int f_rx(realtype t, N_Vector y, N_Vector ydot, void *user_data) {
+
+  /* problem data */
+  UserData udata = (UserData) user_data;
+
+  /* shortcuts to number of intervals, background values */
+  int N = udata->N;
+  realtype a  = udata->a;
+  realtype b  = udata->b;
+  realtype ep = udata->ep;
+
+  /* local variables */
+  long int i;
+  realtype ul, ur, vl, vr, wl, wr;
+  realtype u, v, w, xl, xr, f1, f2, f3;
+  booleantype left, right;
+  realtype *Ydata, *RHSdata;
+
+  /* access data arrays */
+  Ydata = N_VGetArrayPointer(y);
+  if (check_flag((void *)Ydata, "N_VGetArrayPointer", 0)) return 1;
+  RHSdata = N_VGetArrayPointer(ydot);
+  if (check_flag((void *)RHSdata, "N_VGetArrayPointer", 0)) return 1;
+
+  /* iterate over intervals, filling in residual function */
+  for (i=0; i<N-1; i++) {
+
+    /* set booleans to determine whether equations exist on the left/right */
+    left  = (i==0)     ? FALSE : TRUE;
+    right = (i==(N-2)) ? FALSE : TRUE;
+
+    /* set nodal value shortcuts (interval index aligns with left node) */
+    ul = Ydata[IDX(i,0)];
+    vl = Ydata[IDX(i,1)];
+    wl = Ydata[IDX(i,2)];
+    ur = Ydata[IDX(i+1,0)];
+    vr = Ydata[IDX(i+1,1)];
+    wr = Ydata[IDX(i+1,2)];
+
+    /* set mesh shortcuts */
+    xl = udata->x[i];
+    xr = udata->x[i+1];
+
+    /* evaluate R(y) on this subinterval */
+    /*    left test function */
+    if (left) {
+      /*  u */
+      u = Eval(ul,ur,xl,xr,X1(xl,xr));
+      v = Eval(vl,vr,xl,xr,X1(xl,xr));
+      w = Eval(wl,wr,xl,xr,X1(xl,xr));
+      f1 = (a - (w+ONE)*u + v*u*u) * ChiL(xl,xr,X1(xl,xr));
+      u = Eval(ul,ur,xl,xr,X2(xl,xr));
+      v = Eval(vl,vr,xl,xr,X2(xl,xr));
+      w = Eval(wl,wr,xl,xr,X2(xl,xr));
+      f2 = (a - (w+ONE)*u + v*u*u) * ChiL(xl,xr,X2(xl,xr));
+      u = Eval(ul,ur,xl,xr,X3(xl,xr));
+      v = Eval(vl,vr,xl,xr,X3(xl,xr));
+      w = Eval(wl,wr,xl,xr,X3(xl,xr));
+      f3 = (a - (w+ONE)*u + v*u*u) * ChiL(xl,xr,X3(xl,xr));
+      RHSdata[IDX(i,0)] += Quad(f1,f2,f3,xl,xr);
+    
+      /*  v */
+      u = Eval(ul,ur,xl,xr,X1(xl,xr));
+      v = Eval(vl,vr,xl,xr,X1(xl,xr));
+      w = Eval(wl,wr,xl,xr,X1(xl,xr));
+      f1 = (w*u - v*u*u) * ChiL(xl,xr,X1(xl,xr));
+      u = Eval(ul,ur,xl,xr,X2(xl,xr));
+      v = Eval(vl,vr,xl,xr,X2(xl,xr));
+      w = Eval(wl,wr,xl,xr,X2(xl,xr));
+      f2 = (w*u - v*u*u) * ChiL(xl,xr,X2(xl,xr));
+      u = Eval(ul,ur,xl,xr,X3(xl,xr));
+      v = Eval(vl,vr,xl,xr,X3(xl,xr));
+      w = Eval(wl,wr,xl,xr,X3(xl,xr));
+      f3 = (w*u - v*u*u) * ChiL(xl,xr,X3(xl,xr));
+      RHSdata[IDX(i,1)] += Quad(f1,f2,f3,xl,xr);
+    
+      /*  w */
+      u = Eval(ul,ur,xl,xr,X1(xl,xr));
+      v = Eval(vl,vr,xl,xr,X1(xl,xr));
+      w = Eval(wl,wr,xl,xr,X1(xl,xr));
+      f1 = ((b-w)/ep - w*u) * ChiL(xl,xr,X1(xl,xr));
+      u = Eval(ul,ur,xl,xr,X2(xl,xr));
+      v = Eval(vl,vr,xl,xr,X2(xl,xr));
+      w = Eval(wl,wr,xl,xr,X2(xl,xr));
+      f2 = ((b-w)/ep - w*u) * ChiL(xl,xr,X2(xl,xr));
+      u = Eval(ul,ur,xl,xr,X3(xl,xr));
+      v = Eval(vl,vr,xl,xr,X3(xl,xr));
+      w = Eval(wl,wr,xl,xr,X3(xl,xr));
+      f3 = ((b-w)/ep - w*u) * ChiL(xl,xr,X3(xl,xr));
+      RHSdata[IDX(i,2)] += Quad(f1,f2,f3,xl,xr);
+    }
+    /*    right test function */
+    if (right) {
+      /*  u */
+      u = Eval(ul,ur,xl,xr,X1(xl,xr));
+      v = Eval(vl,vr,xl,xr,X1(xl,xr));
+      w = Eval(wl,wr,xl,xr,X1(xl,xr));
+      f1 = (a - (w+ONE)*u + v*u*u) * ChiR(xl,xr,X1(xl,xr));
+      u = Eval(ul,ur,xl,xr,X2(xl,xr));
+      v = Eval(vl,vr,xl,xr,X2(xl,xr));
+      w = Eval(wl,wr,xl,xr,X2(xl,xr));
+      f2 = (a - (w+ONE)*u + v*u*u) * ChiR(xl,xr,X2(xl,xr));
+      u = Eval(ul,ur,xl,xr,X3(xl,xr));
+      v = Eval(vl,vr,xl,xr,X3(xl,xr));
+      w = Eval(wl,wr,xl,xr,X3(xl,xr));
+      f3 = (a - (w+ONE)*u + v*u*u) * ChiR(xl,xr,X3(xl,xr));
+      RHSdata[IDX(i+1,0)] += Quad(f1,f2,f3,xl,xr);
+    
+      /*  v */
+      u = Eval(ul,ur,xl,xr,X1(xl,xr));
+      v = Eval(vl,vr,xl,xr,X1(xl,xr));
+      w = Eval(wl,wr,xl,xr,X1(xl,xr));
+      f1 = (w*u - v*u*u) * ChiR(xl,xr,X1(xl,xr));
+      u = Eval(ul,ur,xl,xr,X2(xl,xr));
+      v = Eval(vl,vr,xl,xr,X2(xl,xr));
+      w = Eval(wl,wr,xl,xr,X2(xl,xr));
+      f2 = (w*u - v*u*u) * ChiR(xl,xr,X2(xl,xr));
+      u = Eval(ul,ur,xl,xr,X3(xl,xr));
+      v = Eval(vl,vr,xl,xr,X3(xl,xr));
+      w = Eval(wl,wr,xl,xr,X3(xl,xr));
+      f3 = (w*u - v*u*u) * ChiR(xl,xr,X3(xl,xr));
+      RHSdata[IDX(i+1,1)] += Quad(f1,f2,f3,xl,xr);
+    
+      /*  w */
+      u = Eval(ul,ur,xl,xr,X1(xl,xr));
+      v = Eval(vl,vr,xl,xr,X1(xl,xr));
+      w = Eval(wl,wr,xl,xr,X1(xl,xr));
+      f1 = ((b-w)/ep - w*u) * ChiR(xl,xr,X1(xl,xr));
+      u = Eval(ul,ur,xl,xr,X2(xl,xr));
+      v = Eval(vl,vr,xl,xr,X2(xl,xr));
+      w = Eval(wl,wr,xl,xr,X2(xl,xr));
+      f2 = ((b-w)/ep - w*u) * ChiR(xl,xr,X2(xl,xr));
+      u = Eval(ul,ur,xl,xr,X3(xl,xr));
+      v = Eval(vl,vr,xl,xr,X3(xl,xr));
+      w = Eval(wl,wr,xl,xr,X3(xl,xr));
+      f3 = ((b-w)/ep - w*u) * ChiR(xl,xr,X3(xl,xr));
+      RHSdata[IDX(i+1,2)] += Quad(f1,f2,f3,xl,xr);
+    }
+  }
+
+  return 0;
+}
+
+
+
+/* Interface routine to compute the Jacobian of the full RHS function, f(y) */
+static int Jac(realtype t, N_Vector y, N_Vector fy, 
+               SlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3) {
+
+  /* temporary variables */
+  int ier;
+  UserData udata = (UserData) user_data;
+  int N = udata->N;
+
+  /* ensure that Jac is the correct size */
+  if ((J->M != N*3) || (J->N != N*3)) {
+    printf("Jacobian calculation error: matrix is the wrong size!\n");
+    return 1;
+  }
+  
+  /* Fill in the Laplace matrix */
+  ier = LaplaceMatrix(J, udata);
+  if (ier != 0) {
+    fprintf(stderr,"Jac: error in filling Laplace matrix = %i\n",ier);
+    return 1;
+  }
+
+  /* Create empty reaction Jacobian matrix (if not done already) */
+  if (udata->R == NULL) {
+    udata->R = SparseNewMat(J->M, J->N, J->NNZ, CSC_MAT);
+    if (udata->R == NULL) {
+      printf("Jac: error in allocating R matrix!\n");
+      return 1;
+    }
+  }
+      
+  /* Add in the Jacobian of the reaction terms matrix */
+  ier = ReactionJac(y, udata->R, udata);
+  if (ier != 0) {
+    fprintf(stderr,"Jac: error in filling reaction Jacobian = %i\n",ier);
+    return 1;
+  }
+
+  /* Add R to J */
+  ier = SparseAddMat(J,udata->R);
+  if (ier != 0) {
+    printf("Jac: error in adding sparse matrices = %i!\n",ier);
+    return 1;
+  }
+
+  return 0;
+}
+
+
+
+/* Routine to compute the mass matrix multiplying y_t. */
+static int MassMatrix(realtype t, SlsMat M, void *user_data, 
+		      N_Vector tmp1, N_Vector tmp2, N_Vector tmp3) {
+
+  /* user data structure */
+  UserData udata = (UserData) user_data;
+
+  /* set shortcuts */
+  int N = udata->N;
+  int i, nz=0;
+  int *colptrs = *M->colptrs;
+  int *rowvals = *M->rowvals;
+
+  /* local data */
+  realtype xl, xr, f1, f2, f3, dtmp;
+
+  /* clear out mass matrix */
+  SparseSetMatToZero(M);
+
+  /* iterate over columns, filling in matrix entries */
+  for (i=0; i<N; i++) {
+
+    /* dependence on u at this node */
+    colptrs[IDX(i,0)] = nz;
+
+    /*    left u trial function */
+    if (i>0) {
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      f1 = ChiL(xl,xr,X1(xl,xr)) * ChiR(xl,xr,X1(xl,xr));
+      f2 = ChiL(xl,xr,X2(xl,xr)) * ChiR(xl,xr,X2(xl,xr));
+      f3 = ChiL(xl,xr,X3(xl,xr)) * ChiR(xl,xr,X3(xl,xr));
+      M->data[nz] = Quad(f1,f2,f3,xl,xr);
+      rowvals[nz++] = IDX(i-1,0);
+    }
+    /*    this u trial function */
+    dtmp = ZERO;
+    if (i<N-1) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      f1 = ChiL(xl,xr,X1(xl,xr)) * ChiL(xl,xr,X1(xl,xr));
+      f2 = ChiL(xl,xr,X2(xl,xr)) * ChiL(xl,xr,X2(xl,xr));
+      f3 = ChiL(xl,xr,X3(xl,xr)) * ChiL(xl,xr,X3(xl,xr));
+      dtmp += Quad(f1,f2,f3,xl,xr);
+    }
+    if (i>0) {
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      f1 = ChiR(xl,xr,X1(xl,xr)) * ChiR(xl,xr,X1(xl,xr));
+      f2 = ChiR(xl,xr,X2(xl,xr)) * ChiR(xl,xr,X2(xl,xr));
+      f3 = ChiR(xl,xr,X3(xl,xr)) * ChiR(xl,xr,X3(xl,xr));
+      dtmp += Quad(f1,f2,f3,xl,xr);
+    }
+    M->data[nz] = dtmp;
+    rowvals[nz++] = IDX(i,0);
+    /*    right u trial function */
+    if (i<N-1) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      f1 = ChiL(xl,xr,X1(xl,xr)) * ChiR(xl,xr,X1(xl,xr));
+      f2 = ChiL(xl,xr,X2(xl,xr)) * ChiR(xl,xr,X2(xl,xr));
+      f3 = ChiL(xl,xr,X3(xl,xr)) * ChiR(xl,xr,X3(xl,xr));
+      M->data[nz] = Quad(f1,f2,f3,xl,xr);
+      rowvals[nz++] = IDX(i+1,0);
+    }
+
+
+    /* dependence on v at this node */
+    colptrs[IDX(i,1)] = nz;
+
+    /*    left v trial function */
+    if (i>0) {
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      f1 = ChiL(xl,xr,X1(xl,xr)) * ChiR(xl,xr,X1(xl,xr));
+      f2 = ChiL(xl,xr,X2(xl,xr)) * ChiR(xl,xr,X2(xl,xr));
+      f3 = ChiL(xl,xr,X3(xl,xr)) * ChiR(xl,xr,X3(xl,xr));
+      M->data[nz] = Quad(f1,f2,f3,xl,xr);
+      rowvals[nz++] = IDX(i-1,1);
+    }
+    /*    this v trial function */
+    dtmp = ZERO;
+    if (i<N-1) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      f1 = ChiL(xl,xr,X1(xl,xr)) * ChiL(xl,xr,X1(xl,xr));
+      f2 = ChiL(xl,xr,X2(xl,xr)) * ChiL(xl,xr,X2(xl,xr));
+      f3 = ChiL(xl,xr,X3(xl,xr)) * ChiL(xl,xr,X3(xl,xr));
+      dtmp += Quad(f1,f2,f3,xl,xr);
+    }
+    if (i>0) {
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      f1 = ChiR(xl,xr,X1(xl,xr)) * ChiR(xl,xr,X1(xl,xr));
+      f2 = ChiR(xl,xr,X2(xl,xr)) * ChiR(xl,xr,X2(xl,xr));
+      f3 = ChiR(xl,xr,X3(xl,xr)) * ChiR(xl,xr,X3(xl,xr));
+      dtmp += Quad(f1,f2,f3,xl,xr);
+    }
+    M->data[nz] = dtmp;
+    rowvals[nz++] = IDX(i,1);
+    /*    right v trial function */
+    if (i<N-1) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      f1 = ChiL(xl,xr,X1(xl,xr)) * ChiR(xl,xr,X1(xl,xr));
+      f2 = ChiL(xl,xr,X2(xl,xr)) * ChiR(xl,xr,X2(xl,xr));
+      f3 = ChiL(xl,xr,X3(xl,xr)) * ChiR(xl,xr,X3(xl,xr));
+      M->data[nz] = Quad(f1,f2,f3,xl,xr);
+      rowvals[nz++] = IDX(i+1,1);
+    }
+
+
+    /* dependence on w at this node */
+    colptrs[IDX(i,2)] = nz;
+
+    /*    left w trial function */
+    if (i>0) {
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      f1 = ChiL(xl,xr,X1(xl,xr)) * ChiR(xl,xr,X1(xl,xr));
+      f2 = ChiL(xl,xr,X2(xl,xr)) * ChiR(xl,xr,X2(xl,xr));
+      f3 = ChiL(xl,xr,X3(xl,xr)) * ChiR(xl,xr,X3(xl,xr));
+      M->data[nz] = Quad(f1,f2,f3,xl,xr);
+      rowvals[nz++] = IDX(i-1,2);
+    }
+    /*    this w trial function */
+    dtmp = ZERO;
+    if (i<N-1) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      f1 = ChiL(xl,xr,X1(xl,xr)) * ChiL(xl,xr,X1(xl,xr));
+      f2 = ChiL(xl,xr,X2(xl,xr)) * ChiL(xl,xr,X2(xl,xr));
+      f3 = ChiL(xl,xr,X3(xl,xr)) * ChiL(xl,xr,X3(xl,xr));
+      dtmp += Quad(f1,f2,f3,xl,xr);
+    }
+    if (i>0) {
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      f1 = ChiR(xl,xr,X1(xl,xr)) * ChiR(xl,xr,X1(xl,xr));
+      f2 = ChiR(xl,xr,X2(xl,xr)) * ChiR(xl,xr,X2(xl,xr));
+      f3 = ChiR(xl,xr,X3(xl,xr)) * ChiR(xl,xr,X3(xl,xr));
+      dtmp += Quad(f1,f2,f3,xl,xr);
+    }
+    M->data[nz] = dtmp;
+    rowvals[nz++] = IDX(i,2);
+    /*    right w trial function */
+    if (i<N-1) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      f1 = ChiL(xl,xr,X1(xl,xr)) * ChiR(xl,xr,X1(xl,xr));
+      f2 = ChiL(xl,xr,X2(xl,xr)) * ChiR(xl,xr,X2(xl,xr));
+      f3 = ChiL(xl,xr,X3(xl,xr)) * ChiR(xl,xr,X3(xl,xr));
+      M->data[nz] = Quad(f1,f2,f3,xl,xr);
+      rowvals[nz++] = IDX(i+1,2);
+    }
+
+  }
+
+  /* signal end of data */
+  colptrs[IDX(N-1,2)+1] = nz;
+
+  return 0;
+}
+
+
+
+
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+
+
+/* Routine to compute the Laplace matrix */
+static int LaplaceMatrix(SlsMat L, UserData udata)
+{
+
+  /* set shortcuts, local variables */
+  int N = udata->N;
+  realtype du = udata->du;
+  realtype dv = udata->dv;
+  realtype dw = udata->dw;
+  int i, nz=0;
+  realtype xl, xr;
+  int *colptrs = *L->colptrs;
+  int *rowvals = *L->rowvals;
+  
+  /* clear out matrix */
+  SparseSetMatToZero(L);
+
+  /* iterate over columns, filling in Laplace matrix entries */
+  for (i=0; i<N; i++) {
+
+    /* dependence on u at this node */
+    colptrs[IDX(i,0)] = nz;
+
+    if (i>1) {
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      L->data[nz] = (-du) * Quad(ONE,ONE,ONE,xl,xr) * ChiL_x(xl,xr) * ChiR_x(xl,xr);
+      rowvals[nz++] = IDX(i-1,0);
+    }
+    if (i<N-1 && i>0) {
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      L->data[nz] = (-du) * Quad(ONE,ONE,ONE,xl,xr) * ChiR_x(xl,xr) * ChiR_x(xl,xr);
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      L->data[nz] += (-du) * Quad(ONE,ONE,ONE,xl,xr) * ChiL_x(xl,xr) * ChiL_x(xl,xr);
+      rowvals[nz++] = IDX(i,0);
+    }
+    if (i<N-2) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      L->data[nz] = (-du) * Quad(ONE,ONE,ONE,xl,xr) * ChiL_x(xl,xr) * ChiR_x(xl,xr);
+      rowvals[nz++] = IDX(i+1,0);
+    }
+
+    /* dependence on v at this node */
+    colptrs[IDX(i,1)] = nz;
+
+    if (i>1) {
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      L->data[nz] = (-dv) * Quad(ONE,ONE,ONE,xl,xr) * ChiL_x(xl,xr) * ChiR_x(xl,xr);
+      rowvals[nz++] = IDX(i-1,1);
+    }
+    if (i>0 && i<N-1) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      L->data[nz] = (-dv) * Quad(ONE,ONE,ONE,xl,xr) * ChiL_x(xl,xr) * ChiL_x(xl,xr);
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      L->data[nz] += (-dv) * Quad(ONE,ONE,ONE,xl,xr) * ChiR_x(xl,xr) * ChiR_x(xl,xr);
+      rowvals[nz++] = IDX(i,1);
+    }
+    if (i<N-2) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      L->data[nz] = (-dv) * Quad(ONE,ONE,ONE,xl,xr) * ChiL_x(xl,xr) * ChiR_x(xl,xr);
+      rowvals[nz++] = IDX(i+1,1);
+    }
+
+    /* dependence on w at this node */
+    colptrs[IDX(i,2)] = nz;
+
+    if (i>1) {
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      L->data[nz] = (-dw) * Quad(ONE,ONE,ONE,xl,xr) * ChiL_x(xl,xr) * ChiR_x(xl,xr);
+      rowvals[nz++] = IDX(i-1,2);
+    }
+    if (i>0 && i<N-1) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      L->data[nz] = (-dw) * Quad(ONE,ONE,ONE,xl,xr) * ChiL_x(xl,xr) * ChiL_x(xl,xr);
+      xl = udata->x[i-1];
+      xr = udata->x[i];
+      L->data[nz] += (-dw) * Quad(ONE,ONE,ONE,xl,xr) * ChiR_x(xl,xr) * ChiR_x(xl,xr);
+      rowvals[nz++] = IDX(i,2);
+    }
+    if (i<N-2) {
+      xl = udata->x[i];
+      xr = udata->x[i+1];
+      L->data[nz] = (-dw) * Quad(ONE,ONE,ONE,xl,xr) * ChiL_x(xl,xr) * ChiR_x(xl,xr);
+      rowvals[nz++] = IDX(i+1,2);
+    }
+
+  }
+
+  /* signal end of data */
+  colptrs[IDX(N-1,2)+1] = nz;
+
+  return 0;
+}
+
+
+
+/* Routine to compute the Jacobian matrix from R(y) */
+static int ReactionJac(N_Vector y, SlsMat Jac, UserData udata)
+{
+  /* set shortcuts, local variables */
+  int N = udata->N;
+  int i, nz=0;
+  int *colptrs = *Jac->colptrs;
+  int *rowvals = *Jac->rowvals;
+  realtype ep = udata->ep;
+  realtype ul, uc, ur, vl, vc, vr, wl, wc, wr;
+  realtype u1l, u2l, u3l, v1l, v2l, v3l, w1l, w2l, w3l;
+  realtype u1r, u2r, u3r, v1r, v2r, v3r, w1r, w2r, w3r;
+  realtype xl, xc, xr, df1, df2, df3;
+  realtype dQdf1l, dQdf2l, dQdf3l, ChiL1l, ChiL2l, ChiL3l, ChiR1l, ChiR2l, ChiR3l;
+  realtype dQdf1r, dQdf2r, dQdf3r, ChiL1r, ChiL2r, ChiL3r, ChiR1r, ChiR2r, ChiR3r;
+
+  /* access data arrays */
+  realtype *Ydata = N_VGetArrayPointer(y);
+  if (check_flag((void *) Ydata, "N_VGetArrayPointer", 0)) return 1;
+
+  /* initialize all local variables to zero (to avoid uninitialized variable warnings) */
+  ul = uc = ur = vl = vc = vr = wl = wc = wr = 0.0;
+  u1l = u2l = u3l = v1l = v2l = v3l = w1l = w2l = w3l = 0.0;
+  u1r = u2r = u3r = v1r = v2r = v3r = w1r = w2r = w3r = 0.0;
+  xl = xc = xr = df1 = df2 = df3 = 0.0;
+  dQdf1l = dQdf2l = dQdf3l = ChiL1l = ChiL2l = ChiL3l = ChiR1l = ChiR2l = ChiR3l = 0.0;
+  dQdf1r = dQdf2r = dQdf3r = ChiL1r = ChiL2r = ChiL3r = ChiR1r = ChiR2r = ChiR3r = 0.0;
+
+  /* clear out matrix */
+  SparseSetMatToZero(Jac);
+
+  /* iterate over columns, filling in reaction Jacobian */
+  for (i=0; i<N; i++) {
+
+    /* set mesh shortcuts */
+    if (i>0)
+      xl = udata->x[i-1];
+    xc = udata->x[i];
+    if (i<N-1)
+      xr = udata->x[i+1];
+
+    /* set nodal value shortcuts */
+    if (i>0) {
+      ul = Ydata[IDX(i-1,0)];
+      vl = Ydata[IDX(i-1,1)];
+      wl = Ydata[IDX(i-1,2)];
+    }
+    uc = Ydata[IDX(i,0)];
+    vc = Ydata[IDX(i,1)];
+    wc = Ydata[IDX(i,2)];
+    if (i<N-1) {
+      ur = Ydata[IDX(i+1,0)];
+      vr = Ydata[IDX(i+1,1)];
+      wr = Ydata[IDX(i+1,2)];
+    }
+    if (i>0) {
+      u1l = Eval(ul,uc,xl,xc,X1(xl,xc));
+      v1l = Eval(vl,vc,xl,xc,X1(xl,xc));
+      w1l = Eval(wl,wc,xl,xc,X1(xl,xc));
+      u2l = Eval(ul,uc,xl,xc,X2(xl,xc));
+      v2l = Eval(vl,vc,xl,xc,X2(xl,xc));
+      w2l = Eval(wl,wc,xl,xc,X2(xl,xc));
+      u3l = Eval(ul,uc,xl,xc,X3(xl,xc));
+      v3l = Eval(vl,vc,xl,xc,X3(xl,xc));
+      w3l = Eval(wl,wc,xl,xc,X3(xl,xc));
+    }
+    if (i<N-1) {
+      u1r = Eval(uc,ur,xc,xr,X1(xc,xr));
+      v1r = Eval(vc,vr,xc,xr,X1(xc,xr));
+      w1r = Eval(wc,wr,xc,xr,X1(xc,xr));
+      u2r = Eval(uc,ur,xc,xr,X2(xc,xr));
+      v2r = Eval(vc,vr,xc,xr,X2(xc,xr));
+      w2r = Eval(wc,wr,xc,xr,X2(xc,xr));
+      u3r = Eval(uc,ur,xc,xr,X3(xc,xr));
+      v3r = Eval(vc,vr,xc,xr,X3(xc,xr));
+      w3r = Eval(wc,wr,xc,xr,X3(xc,xr));
+    }
+
+    /* set partial derivative shortcuts */
+    if (i>0) {
+      dQdf1l = Quad(ONE, ZERO, ZERO, xl, xc);
+      dQdf2l = Quad(ZERO, ONE, ZERO, xl, xc);
+      dQdf3l = Quad(ZERO, ZERO, ONE, xl, xc);
+      ChiL1l = ChiL(xl,xc,X1(xl,xc));
+      ChiL2l = ChiL(xl,xc,X2(xl,xc));
+      ChiL3l = ChiL(xl,xc,X3(xl,xc));
+      ChiR1l = ChiR(xl,xc,X1(xl,xc));
+      ChiR2l = ChiR(xl,xc,X2(xl,xc));
+      ChiR3l = ChiR(xl,xc,X3(xl,xc));
+    }
+    if (i<N-1) {
+      dQdf1r = Quad(ONE, ZERO, ZERO, xc, xr);
+      dQdf2r = Quad(ZERO, ONE, ZERO, xc, xr);
+      dQdf3r = Quad(ZERO, ZERO, ONE, xc, xr);
+      ChiL1r = ChiL(xc,xr,X1(xc,xr));
+      ChiL2r = ChiL(xc,xr,X2(xc,xr));
+      ChiL3r = ChiL(xc,xr,X3(xc,xr));
+      ChiR1r = ChiR(xc,xr,X1(xc,xr));
+      ChiR2r = ChiR(xc,xr,X2(xc,xr));
+      ChiR3r = ChiR(xc,xr,X3(xc,xr));
+    }
+
+
+    /*** evaluate dR/dy at this node ***/
+
+
+    /* dependence on u at this node */
+    colptrs[IDX(i,0)] = nz;
+
+    if (i>1) {
+      /*  dR_ul/duc */
+      df1 = (-(w1l+ONE) + TWO*v1l*u1l) * ChiL1l * ChiR1l;
+      df2 = (-(w2l+ONE) + TWO*v2l*u2l) * ChiL2l * ChiR2l;
+      df3 = (-(w3l+ONE) + TWO*v3l*u3l) * ChiL3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+      rowvals[nz++] = IDX(i-1,0);
+
+      /*  dR_vl/duc */
+      df1 = (w1l - TWO*v1l*u1l) * ChiL1l * ChiR1l;
+      df2 = (w2l - TWO*v2l*u2l) * ChiL2l * ChiR2l;
+      df3 = (w3l - TWO*v3l*u3l) * ChiL3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+      rowvals[nz++] = IDX(i-1,1);
+
+      /*  dR_wl/duc */
+      df1 = (-w1l) * ChiL1l * ChiR1l;
+      df2 = (-w2l) * ChiL2l * ChiR2l;
+      df3 = (-w3l) * ChiL3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+      rowvals[nz++] = IDX(i-1,2);
+    }
+    if (i>0 && i<N-1) {
+      /*  dR_uc/duc */
+      df1 = (-(w1r+ONE) + TWO*v1r*u1r) * ChiL1r * ChiL1r;
+      df2 = (-(w2r+ONE) + TWO*v2r*u2r) * ChiL2r * ChiL2r;
+      df3 = (-(w3r+ONE) + TWO*v3r*u3r) * ChiL3r * ChiL3r;
+      Jac->data[nz] = dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+
+      df1 = (-(w1l+ONE) + TWO*v1l*u1l) * ChiR1l * ChiR1l;
+      df2 = (-(w2l+ONE) + TWO*v2l*u2l) * ChiR2l * ChiR2l;
+      df3 = (-(w3l+ONE) + TWO*v3l*u3l) * ChiR3l * ChiR3l;
+      Jac->data[nz] += dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+      rowvals[nz++] = IDX(i,0);
+
+      /*  dR_vc/duc */
+      df1 = (w1l - TWO*v1l*u1l) * ChiR1l * ChiR1l;
+      df2 = (w2l - TWO*v2l*u2l) * ChiR2l * ChiR2l;
+      df3 = (w3l - TWO*v3l*u3l) * ChiR3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+
+      df1 = (w1r - TWO*v1r*u1r) * ChiL1r * ChiL1r;
+      df2 = (w2r - TWO*v2r*u2r) * ChiL2r * ChiL2r;
+      df3 = (w3r - TWO*v3r*u3r) * ChiL3r * ChiL3r;
+      Jac->data[nz] += dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i,1);
+
+      /*  dR_wc/duc */
+      df1 = (-w1r) * ChiL1r * ChiL1r;
+      df2 = (-w2r) * ChiL2r * ChiL2r;
+      df3 = (-w3r) * ChiL3r * ChiL3r;
+      Jac->data[nz] = dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+
+      df1 = (-w1l) * ChiR1l * ChiR1l;
+      df2 = (-w2l) * ChiR2l * ChiR2l;
+      df3 = (-w3l) * ChiR3l * ChiR3l;
+      Jac->data[nz] += dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+      rowvals[nz++] = IDX(i,2);
+    }
+    if (i<N-2) {
+      /*  dR_ur/duc */
+      df1 = (-(w1r+ONE) + TWO*v1r*u1r) * ChiL1r * ChiR1r;
+      df2 = (-(w2r+ONE) + TWO*v2r*u2r) * ChiL2r * ChiR2r;
+      df3 = (-(w3r+ONE) + TWO*v3r*u3r) * ChiL3r * ChiR3r;
+      Jac->data[nz] = dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i+1,0);
+
+      /*  dR_vr/duc */
+      df1 = (w1r - TWO*v1r*u1r) * ChiL1r * ChiR1r;
+      df2 = (w2r - TWO*v2r*u2r) * ChiL2r * ChiR2r;
+      df3 = (w3r - TWO*v3r*u3r) * ChiL3r * ChiR3r;
+      Jac->data[nz] = dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i+1,1);
+
+      /*  dR_wr/duc */
+      df1 = (-w1r) * ChiL1r * ChiR1r;
+      df2 = (-w2r) * ChiL2r * ChiR2r;
+      df3 = (-w3r) * ChiL3r * ChiR3r;
+      Jac->data[nz] = dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i+1,2);
+    }
+
+
+    /* dependence on v at this node */
+    colptrs[IDX(i,1)] = nz;
+
+    if (i>1) {
+      /*  dR_ul/dvc */
+      df1 = (u1l*u1l) * ChiL1l * ChiR1l;
+      df2 = (u2l*u2l) * ChiL2l * ChiR2l;
+      df3 = (u3l*u3l) * ChiL3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+      rowvals[nz++] = IDX(i-1,0);
+
+      /*  dR_vl/dvc */
+      df1 = (-u1l*u1l) * ChiL1l * ChiR1l;
+      df2 = (-u2l*u2l) * ChiL2l * ChiR2l;
+      df3 = (-u3l*u3l) * ChiL3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+      rowvals[nz++] = IDX(i-1,1);
+    }
+    if (i>0 && i<N-1) {
+      /*  dR_uc/dvc */
+      df1 = (u1l*u1l) * ChiR1l * ChiR1l;
+      df2 = (u2l*u2l) * ChiR2l * ChiR2l;
+      df3 = (u3l*u3l) * ChiR3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+
+      df1 = (u1r*u1r) * ChiL1r * ChiL1r;
+      df2 = (u2r*u2r) * ChiL2r * ChiL2r;
+      df3 = (u3r*u3r) * ChiL3r * ChiL3r;
+      Jac->data[nz] += dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i,0);
+
+      /*  dR_vc/dvc */
+      df1 = (-u1l*u1l) * ChiR1l * ChiR1l;
+      df2 = (-u2l*u2l) * ChiR2l * ChiR2l;
+      df3 = (-u3l*u3l) * ChiR3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+
+      df1 = (-u1r*u1r) * ChiL1r * ChiL1r;
+      df2 = (-u2r*u2r) * ChiL2r * ChiL2r;
+      df3 = (-u3r*u3r) * ChiL3r * ChiL3r;
+      Jac->data[nz] += dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i,1);
+    }
+    if (i<N-2) {
+      /*  dR_ur/dvc */
+      df1 = (u1r*u1r) * ChiL1r * ChiR1r;
+      df2 = (u2r*u2r) * ChiL2r * ChiR2r;
+      df3 = (u3r*u3r) * ChiL3r * ChiR3r;
+      Jac->data[nz] = dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i+1,0);
+
+      /*  dR_vr/dvc */
+      df1 = (-u1r*u1r) * ChiL1r * ChiR1r;
+      df2 = (-u2r*u2r) * ChiL2r * ChiR2r;
+      df3 = (-u3r*u3r) * ChiL3r * ChiR3r;
+      Jac->data[nz] = dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i+1,1);
+    }
+
+
+    /* dependence on w at this node */
+    colptrs[IDX(i,2)] = nz;
+
+    if (i>1) {
+      /*  dR_ul/dwc */
+      df1 = (-u1l) * ChiL1l * ChiR1l;
+      df2 = (-u2l) * ChiL2l * ChiR2l;
+      df3 = (-u3l) * ChiL3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+      rowvals[nz++] = IDX(i-1,0);
+
+      /*  dR_vl/dwc */
+      df1 = (u1l) * ChiL1l * ChiR1l;
+      df2 = (u2l) * ChiL2l * ChiR2l;
+      df3 = (u3l) * ChiL3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+      rowvals[nz++] = IDX(i-1,1);
+
+      /*  dR_wl/dwc */
+      df1 = (-ONE/ep - u1l) * ChiL1l * ChiR1l;
+      df2 = (-ONE/ep - u2l) * ChiL2l * ChiR2l;
+      df3 = (-ONE/ep - u3l) * ChiL3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+      rowvals[nz++] = IDX(i-1,2);
+    }
+    if (i>0 && i<N-1) {
+      /*  dR_uc/dwc */
+      df1 = (-u1l) * ChiR1l * ChiR1l;
+      df2 = (-u2l) * ChiR2l * ChiR2l;
+      df3 = (-u3l) * ChiR3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+
+      df1 = (-u1r) * ChiL1r * ChiL1r;
+      df2 = (-u2r) * ChiL2r * ChiL2r;
+      df3 = (-u3r) * ChiL3r * ChiL3r;
+      Jac->data[nz] += dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i,0);
+
+      /*  dR_vc/dwc */
+      df1 = (u1l) * ChiR1l * ChiR1l;
+      df2 = (u2l) * ChiR2l * ChiR2l;
+      df3 = (u3l) * ChiR3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+
+      df1 = (u1r) * ChiL1r * ChiL1r;
+      df2 = (u2r) * ChiL2r * ChiL2r;
+      df3 = (u3r) * ChiL3r * ChiL3r;
+      Jac->data[nz] += dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i,1);
+
+      /*  dR_wc/dwc */
+      df1 = (-ONE/ep - u1l) * ChiR1l * ChiR1l;
+      df2 = (-ONE/ep - u2l) * ChiR2l * ChiR2l;
+      df3 = (-ONE/ep - u3l) * ChiR3l * ChiR3l;
+      Jac->data[nz] = dQdf1l*df1 + dQdf2l*df2 + dQdf3l*df3;
+
+      df1 = (-ONE/ep - u1r) * ChiL1r * ChiL1r;
+      df2 = (-ONE/ep - u2r) * ChiL2r * ChiL2r;
+      df3 = (-ONE/ep - u3r) * ChiL3r * ChiL3r;
+      Jac->data[nz] += dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i,2);
+    }
+    if (i<N-2) {
+      /*  dR_ur/dwc */
+      df1 = (-u1r) * ChiL1r * ChiR1r;
+      df2 = (-u2r) * ChiL2r * ChiR2r;
+      df3 = (-u3r) * ChiL3r * ChiR3r;
+      Jac->data[nz] = dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i+1,0);
+
+      /*  dR_vr/dwc */
+      df1 = (u1r) * ChiL1r * ChiR1r;
+      df2 = (u2r) * ChiL2r * ChiR2r;
+      df3 = (u3r) * ChiL3r * ChiR3r;
+      Jac->data[nz] = dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i+1,1);
+
+      /*  dR_wr/dwc */
+      df1 = (-ONE/ep - u1r) * ChiL1r * ChiR1r;
+      df2 = (-ONE/ep - u2r) * ChiL2r * ChiR2r;
+      df3 = (-ONE/ep - u3r) * ChiL3r * ChiR3r;
+      Jac->data[nz] = dQdf1r*df1 + dQdf2r*df2 + dQdf3r*df3;
+      rowvals[nz++] = IDX(i+1,2);
+    }
+
+  }
+
+  /* signal end of data */
+  colptrs[IDX(N-1,2)+1] = nz;
+
+  return 0;
+}
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_brusselator1D_FEM_slu.out b/examples/arkode/C_serial/ark_brusselator1D_FEM_slu.out
new file mode 100644
index 0000000..b7dc944
--- /dev/null
+++ b/examples/arkode/C_serial/ark_brusselator1D_FEM_slu.out
@@ -0,0 +1,121 @@
+
+1D FEM Brusselator PDE test problem:
+    N = 201,  NEQ = 603
+    num_threads = 1
+    problem parameters:  a = 0.6,  b = 2,  ep = 1e-05
+    diffusion coefficients:  du = 0.025,  dv = 0.025,  dw = 0.025
+    reltol = 1.0e-06,  abstol = 1.0e-10
+
+        t      ||u||_rms   ||v||_rms   ||w||_rms
+   ----------------------------------------------
+    0.100000    0.637854    3.356025    1.999989
+    0.200000    0.643035    3.345751    1.999989
+    0.300000    0.648532    3.334867    1.999989
+    0.400000    0.654362    3.323350    1.999989
+    0.500000    0.660542    3.311172    1.999988
+    0.600000    0.667093    3.298310    1.999988
+    0.700000    0.674031    3.284739    1.999988
+    0.800000    0.681370    3.270442    1.999988
+    0.900000    0.689121    3.255404    1.999988
+    1.000000    0.697285    3.239620    1.999988
+    1.100000    0.705854    3.223093    1.999987
+    1.200000    0.714805    3.205842    1.999987
+    1.300000    0.724099    3.187903    1.999987
+    1.400000    0.733671    3.169332    1.999987
+    1.500000    0.743429    3.150211    1.999987
+    1.600000    0.753249    3.130653    1.999987
+    1.700000    0.762974    3.110800    1.999986
+    1.800000    0.772412    3.090827    1.999986
+    1.900000    0.781337    3.070944    1.999986
+    2.000000    0.789500    3.051388    1.999986
+    2.100000    0.796639    3.032420    1.999986
+    2.200000    0.802490    3.014317    1.999986
+    2.300000    0.806810    2.997358    1.999986
+    2.400000    0.809386    2.981818    1.999986
+    2.500000    0.810060    2.967949    1.999986
+    2.600000    0.808729    2.955977    1.999986
+    2.700000    0.805360    2.946085    1.999986
+    2.800000    0.799989    2.938410    1.999986
+    2.900000    0.792711    2.933039    1.999986
+    3.000000    0.783680    2.930010    1.999986
+    3.100000    0.773095    2.929307    1.999986
+    3.200000    0.761187    2.930873    1.999986
+    3.300000    0.748207    2.934612    1.999987
+    3.400000    0.734416    2.940394    1.999987
+    3.500000    0.720073    2.948062    1.999987
+    3.600000    0.705429    2.957444    1.999987
+    3.700000    0.690714    2.968354    1.999988
+    3.800000    0.676141    2.980600    1.999988
+    3.900000    0.661891    2.993989    1.999988
+    4.000000    0.648122    3.008331    1.999989
+    4.100000    0.634961    3.023445    1.999989
+    4.200000    0.622506    3.039157    1.999989
+    4.300000    0.610828    3.055308    1.999989
+    4.400000    0.599972    3.071752    1.999989
+    4.500000    0.589962    3.088356    1.999990
+    4.600000    0.580801    3.105007    1.999990
+    4.700000    0.572477    3.121603    1.999990
+    4.800000    0.564964    3.138059    1.999990
+    4.900000    0.558227    3.154303    1.999990
+    5.000000    0.552224    3.170278    1.999990
+    5.100000    0.546907    3.185935    1.999991
+    5.200000    0.542228    3.201239    1.999991
+    5.300000    0.538137    3.216162    1.999991
+    5.400000    0.534585    3.230683    1.999991
+    5.500000    0.531525    3.244788    1.999991
+    5.600000    0.528910    3.258469    1.999991
+    5.700000    0.526699    3.271719    1.999991
+    5.800000    0.524852    3.284539    1.999991
+    5.900000    0.523334    3.296928    1.999991
+    6.000000    0.522111    3.308889    1.999991
+    6.100000    0.521154    3.320427    1.999991
+    6.200000    0.520436    3.331545    1.999991
+    6.300000    0.519932    3.342251    1.999991
+    6.400000    0.519621    3.352549    1.999991
+    6.500000    0.519484    3.362447    1.999991
+    6.600000    0.519503    3.371950    1.999991
+    6.700000    0.519664    3.381065    1.999991
+    6.800000    0.519953    3.389797    1.999991
+    6.900000    0.520358    3.398153    1.999991
+    7.000000    0.520869    3.406139    1.999991
+    7.100000    0.521477    3.413759    1.999991
+    7.200000    0.522174    3.421020    1.999991
+    7.300000    0.522953    3.427926    1.999991
+    7.400000    0.523807    3.434482    1.999991
+    7.500000    0.524732    3.440692    1.999991
+    7.600000    0.525722    3.446560    1.999991
+    7.700000    0.526775    3.452091    1.999991
+    7.800000    0.527887    3.457288    1.999991
+    7.900000    0.529055    3.462154    1.999991
+    8.000000    0.530276    3.466693    1.999991
+    8.100000    0.531549    3.470907    1.999991
+    8.200000    0.532872    3.474799    1.999991
+    8.300000    0.534244    3.478371    1.999991
+    8.400000    0.535665    3.481625    1.999991
+    8.500000    0.537133    3.484564    1.999991
+    8.600000    0.538649    3.487188    1.999991
+    8.700000    0.540213    3.489499    1.999991
+    8.800000    0.541825    3.491498    1.999991
+    8.900000    0.543486    3.493184    1.999991
+    9.000000    0.545196    3.494560    1.999991
+    9.100000    0.546958    3.495624    1.999991
+    9.200000    0.548771    3.496375    1.999991
+    9.300000    0.550638    3.496814    1.999990
+    9.400000    0.552562    3.496938    1.999990
+    9.500000    0.554543    3.496746    1.999990
+    9.600000    0.556585    3.496235    1.999990
+    9.700000    0.558691    3.495404    1.999990
+    9.800000    0.560864    3.494248    1.999990
+    9.900000    0.563108    3.492763    1.999990
+   10.000000    0.565426    3.490944    1.999990
+   ----------------------------------------------
+
+Final Solver Statistics:
+   Internal solver steps = 95 (attempted = 95)
+   Total RHS evals:  Fe = 0,  Fi = 1615
+   Total mass matrix solves = 289
+   Total linear solver setups = 32
+   Total number of Jacobian evaluations = 12
+   Total number of Newton iterations = 1136
+   Total number of nonlinear solver convergence failures = 0
+   Total number of error test failures = 0
diff --git a/examples/arkode/C_serial/ark_brusselator1D_klu.c b/examples/arkode/C_serial/ark_brusselator1D_klu.c
new file mode 100644
index 0000000..7a473c6
--- /dev/null
+++ b/examples/arkode/C_serial/ark_brusselator1D_klu.c
@@ -0,0 +1,630 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates a brusselator problem from chemical 
+ * kinetics.  This is n PDE system with 3 components, Y = [u,v,w], 
+ * satisfying the equations,
+ *    u_t = du*u_xx + a - (w+1)*u + v*u^2
+ *    v_t = dv*v_xx + w*u - v*u^2
+ *    w_t = dw*w_xx + (b-w)/ep - w*u
+ * for t in [0, 80], x in [0, 1], with initial conditions
+ *    u(0,x) =  a  + 0.1*sin(pi*x)
+ *    v(0,x) = b/a + 0.1*sin(pi*x)
+ *    w(0,x) =  b  + 0.1*sin(pi*x),
+ * and with stationary boundary conditions, i.e. 
+ *    u_t(t,0) = u_t(t,1) = 0,
+ *    v_t(t,0) = v_t(t,1) = 0,
+ *    w_t(t,0) = w_t(t,1) = 0.
+ * Note: these can also be implemented as Dirichlet boundary 
+ * conditions with values identical to the initial conditions.
+ * 
+ * The spatial derivatives are computed using second-order 
+ * centered differences, with the data distributed over N points 
+ * on a uniform spatial grid.
+ *
+ * The number of spatial points N, the parameters a, b, du, dv, 
+ * dw and ep, as well as the desired relative and absolute solver 
+ * tolerances, are provided in the input file 
+ * input_brusselator1D.txt.
+ * 
+ * This program solves the problem with the DIRK method, using a
+ * Newton iteration.  The inner linear systems are solved using 
+ * the ARKKLU linear solver.
+ *
+ * 100 outputs are printed at equal intervals, and run statistics 
+ * are printed at the end.
+ *---------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKode fcts., consts. */
+#include <arkode/arkode_klu.h>        /* prototype for ARKKLU solver */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fcts., macros */
+#include <sundials/sundials_types.h>  /* def. of type 'realtype' */
+#include <sundials/sundials_math.h>   /* def. of SUNRsqrt, etc. */
+
+/* accessor macros between (x,v) location and 1D NVector array */
+#define IDX(x,v) (3*(x)+v)
+
+/* constants */
+#define ONE (RCONST(1.0))
+#define TWO (RCONST(2.0))
+
+/* user data structure */
+typedef struct {  
+  int N;         /* number of intervals     */
+  realtype dx;   /* mesh spacing            */
+  realtype a;    /* constant forcing on u   */
+  realtype b;    /* steady-state value of w */
+  realtype du;   /* diffusion coeff for u   */
+  realtype dv;   /* diffusion coeff for v   */
+  realtype dw;   /* diffusion coeff for w   */
+  realtype ep;   /* stiffness parameter     */
+  SlsMat R;      /* temporary storage       */
+} *UserData;
+
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(realtype t, N_Vector y, N_Vector fy, 
+	       SlsMat J, void *user_data, 
+	       N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private function to check function return values */
+static int LaplaceMatrix(SlsMat Jac, UserData udata);
+static int ReactionJac(N_Vector y, SlsMat Jac, UserData udata);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/* Main Program */
+int main()
+{
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);    /* initial time */
+  realtype Tf = RCONST(10.0);   /* final time */
+  int Nt = 10;                  /* total number of output times */
+  int Nvar = 3;
+  UserData udata = NULL;
+  realtype *data;
+  int N = 201;                  /* spatial mesh size */
+  realtype a = 0.6;             /* problem parameters */
+  realtype b = 2.0;
+  realtype du = 0.025;
+  realtype dv = 0.025;
+  realtype dw = 0.025;
+  realtype ep = 1.0e-5;         /* stiffness parameter */
+  realtype reltol = 1.0e-6;     /* tolerances */
+  realtype abstol = 1.0e-10;
+  int i;
+  long int NEQ, NNZ;
+
+  /* general problem variables */
+  int flag;                     /* reusable error-checking flag */
+  N_Vector y = NULL;
+  N_Vector umask = NULL;
+  N_Vector vmask = NULL;
+  N_Vector wmask = NULL;
+  void *arkode_mem = NULL;
+  realtype pi;
+  FILE *FID, *UFID, *VFID, *WFID;
+  realtype t = T0;
+  realtype dTout = (Tf-T0)/Nt;
+  realtype tout = T0+dTout;
+  realtype u, v, w;
+  int iout;
+  long int nst, nst_a, nfe, nfi, nsetups, nje, nni, ncfn, netf;
+
+  /* allocate udata structure */
+  udata = (UserData) malloc(sizeof(*udata));
+  if (check_flag((void *) udata, "malloc", 2)) return 1;
+
+  /* store the inputs in the UserData structure */
+  udata->N  = N;
+  udata->a  = a;
+  udata->b  = b;
+  udata->du = du;
+  udata->dv = dv;
+  udata->dw = dw;
+  udata->ep = ep;
+  udata->R  = NULL;
+
+  /* set total allocated vector length */
+  NEQ = Nvar*udata->N;
+
+  /* Initial problem output */
+  printf("\n1D Brusselator PDE test problem (KLU solver):\n");
+  printf("    N = %i,  NEQ = %li\n", udata->N, NEQ);
+  printf("    problem parameters:  a = %g,  b = %g,  ep = %g\n",
+	 udata->a, udata->b, udata->ep);
+  printf("    diffusion coefficients:  du = %g,  dv = %g,  dw = %g\n", 
+	 udata->du, udata->dv, udata->dw);
+  printf("    reltol = %.1e,  abstol = %.1e\n\n", reltol, abstol);
+
+  /* Initialize data structures */
+  y = N_VNew_Serial(NEQ);           /* Create serial vector for solution */
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return 1;
+  udata->dx = RCONST(1.0)/(N-1);    /* set spatial mesh spacing */
+  data = N_VGetArrayPointer(y);     /* Access data array for new NVector y */
+  if (check_flag((void *)data, "N_VGetArrayPointer", 0)) return 1;
+  umask = N_VNew_Serial(NEQ);       /* Create serial vector masks */
+  if (check_flag((void *)umask, "N_VNew_Serial", 0)) return 1;
+  vmask = N_VNew_Serial(NEQ);
+  if (check_flag((void *)vmask, "N_VNew_Serial", 0)) return 1;
+  wmask = N_VNew_Serial(NEQ);
+  if (check_flag((void *)wmask, "N_VNew_Serial", 0)) return 1;
+
+  /* Set initial conditions into y */
+  pi = RCONST(4.0)*atan(ONE);
+  for (i=0; i<N; i++) {
+    data[IDX(i,0)] =  a  + RCONST(0.1)*sin(pi*i*udata->dx);  /* u */
+    data[IDX(i,1)] = b/a + RCONST(0.1)*sin(pi*i*udata->dx);  /* v */
+    data[IDX(i,2)] =  b  + RCONST(0.1)*sin(pi*i*udata->dx);  /* w */
+  }
+
+  /* Set mask array values for each solution component */
+  N_VConst(0.0, umask);
+  data = N_VGetArrayPointer(umask);
+  if (check_flag((void *) data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,0)] = ONE;
+
+  N_VConst(0.0, vmask);
+  data = N_VGetArrayPointer(vmask);
+  if (check_flag((void *) data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,1)] = ONE;
+
+  N_VConst(0.0, wmask);
+  data = N_VGetArrayPointer(wmask);
+  if (check_flag((void *) data, "N_VGetArrayPointer", 0)) return 1;
+  for (i=0; i<N; i++)  data[IDX(i,2)] = ONE;
+
+
+  /* Create the solver memory */
+  arkode_mem = ARKodeCreate();
+  if (check_flag((void *) arkode_mem, "ARKodeCreate", 0)) return 1;
+  
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set routines */
+  flag = ARKodeSetUserData(arkode_mem, (void *) udata);     /* Pass udata to user functions */
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);    /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  /* Specify the KLU sparse linear solver and Jacobian function */
+  NNZ = 5*NEQ;
+  flag = ARKKLU(arkode_mem, NEQ, NNZ, CSC_MAT);
+  if (check_flag(&flag, "ARKKLU", 1)) return 1;
+  flag = ARKSlsSetSparseJacFn(arkode_mem, Jac);
+  if (check_flag(&flag, "ARKSlsSetSparseJacFn", 1)) return 1;
+ 
+   /* output spatial mesh to disk */
+  FID = fopen("bruss_mesh.txt","w");
+  for (i=0; i<N; i++)  fprintf(FID,"  %.16e\n", udata->dx*i);
+  fclose(FID);
+
+  /* Open output stream for results, access data arrays */
+  UFID=fopen("bruss_u.txt","w");
+  VFID=fopen("bruss_v.txt","w");
+  WFID=fopen("bruss_w.txt","w");
+  data = N_VGetArrayPointer(y);
+  if (check_flag((void *) data, "N_VGetArrayPointer", 0)) return 1;
+
+  /* output initial condition to disk */
+  for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[IDX(i,0)]);
+  for (i=0; i<N; i++)  fprintf(VFID," %.16e", data[IDX(i,1)]);
+  for (i=0; i<N; i++)  fprintf(WFID," %.16e", data[IDX(i,2)]);
+  fprintf(UFID,"\n");
+  fprintf(VFID,"\n");
+  fprintf(WFID,"\n");
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t  = T0;
+  dTout = Tf/Nt;
+  tout = T0+dTout;
+  printf("        t      ||u||_rms   ||v||_rms   ||w||_rms\n");
+  printf("   ----------------------------------------------\n");
+  for (iout=0; iout<Nt; iout++) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);    /* call integrator */
+    u = N_VWL2Norm(y,umask);
+    u = SUNRsqrt(u*u/N);
+    v = N_VWL2Norm(y,vmask);
+    v = SUNRsqrt(v*v/N);
+    w = N_VWL2Norm(y,wmask);
+    w = SUNRsqrt(w*w/N);
+    printf("  %10.6f  %10.6f  %10.6f  %10.6f\n", t, u, v, w);
+    if (flag >= 0) {                                       /* successful solve: update output time */
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                               /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+
+    /* output results to disk */
+    for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[IDX(i,0)]);
+    for (i=0; i<N; i++)  fprintf(VFID," %.16e", data[IDX(i,1)]);
+    for (i=0; i<N; i++)  fprintf(WFID," %.16e", data[IDX(i,2)]);
+    fprintf(UFID,"\n");
+    fprintf(VFID,"\n");
+    fprintf(WFID,"\n");
+  }
+  printf("   ----------------------------------------------\n");
+  fclose(UFID);
+  fclose(VFID);
+  fclose(WFID);
+    
+
+  /* Print some final statistics */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+  flag = ARKSlsGetNumJacEvals(arkode_mem, &nje);
+  check_flag(&flag, "ARKSlsGetNumJacEvals", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total linear solver setups = %li\n", nsetups);
+  printf("   Total number of Jacobian evaluations = %li\n", nje);
+  printf("   Total number of nonlinear iterations = %li\n", nni);
+  printf("   Total number of nonlinear solver convergence failures = %li\n", ncfn);
+  printf("   Total number of error test failures = %li\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy_Serial(y);         /* Free vectors */
+  N_VDestroy_Serial(umask);
+  N_VDestroy_Serial(vmask);
+  N_VDestroy_Serial(wmask);
+  SparseDestroyMat(udata->R);   /* Free user data */
+  free(udata);
+  ARKodeFree(&arkode_mem);
+  return 0;
+}
+
+/*-------------------------------
+ * Functions called by the solver
+ *-------------------------------*/
+
+/* f routine to compute the ODE RHS function f(t,y). */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  UserData udata = (UserData) user_data;      /* access problem data */
+  int N       = udata->N;                     /* set variable shortcuts */
+  realtype a  = udata->a;
+  realtype b  = udata->b;
+  realtype ep = udata->ep;
+  realtype du = udata->du;
+  realtype dv = udata->dv;
+  realtype dw = udata->dw;
+  realtype dx = udata->dx;
+  realtype *Ydata=NULL, *dYdata=NULL;
+  realtype uconst, vconst, wconst, u, ul, ur, v, vl, vr, w, wl, wr;
+  int i;
+
+  Ydata = N_VGetArrayPointer(y);     /* access data arrays */
+  if (check_flag((void *) Ydata, "N_VGetArrayPointer", 0)) return 1;
+  dYdata = N_VGetArrayPointer(ydot);
+  if (check_flag((void *) dYdata, "N_VGetArrayPointer", 0)) return 1;
+  N_VConst(0.0, ydot);                        /* initialize ydot to zero */
+
+  /* iterate over domain, computing all equations */
+  uconst = du/dx/dx;
+  vconst = dv/dx/dx;
+  wconst = dw/dx/dx;
+  for (i=1; i<N-1; i++) {
+
+    /* set shortcuts */
+    u = Ydata[IDX(i,0)];  ul = Ydata[IDX(i-1,0)];  ur = Ydata[IDX(i+1,0)];
+    v = Ydata[IDX(i,1)];  vl = Ydata[IDX(i-1,1)];  vr = Ydata[IDX(i+1,1)];
+    w = Ydata[IDX(i,2)];  wl = Ydata[IDX(i-1,2)];  wr = Ydata[IDX(i+1,2)];
+
+    /* u_t = du*u_xx + a - (w+1)*u + v*u^2 */
+    dYdata[IDX(i,0)] = (ul - TWO*u + ur)*uconst + a - (w+ONE)*u + v*u*u;
+
+    /* v_t = dv*v_xx + w*u - v*u^2 */
+    dYdata[IDX(i,1)] = (vl - TWO*v + vr)*vconst + w*u - v*u*u;
+
+    /* w_t = dw*w_xx + (b-w)/ep - w*u */
+    dYdata[IDX(i,2)] = (wl - TWO*w + wr)*wconst + (b-w)/ep - w*u;
+
+  }
+
+  /* enforce stationary boundaries */
+  dYdata[IDX(0,0)]   = dYdata[IDX(0,1)]   = dYdata[IDX(0,2)]   = 0.0;
+  dYdata[IDX(N-1,0)] = dYdata[IDX(N-1,1)] = dYdata[IDX(N-1,2)] = 0.0;
+
+  return 0;
+}
+
+
+/* Jacobian routine to compute J(t,y) = df/dy. */
+static int Jac(realtype t, N_Vector y, N_Vector fy, 
+	       SlsMat J, void *user_data, 
+	       N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  /* problem data */
+  UserData udata = (UserData) user_data;
+  int N = udata->N;
+
+  /* ensure that Jac is the correct size */
+  if ((J->M != N*3) || (J->N != N*3)) {
+    printf("Jacobian calculation error: matrix is the wrong size!\n");
+    return 1;
+  }
+  
+  /* Fill in the Laplace matrix */
+  if (LaplaceMatrix(J, udata)) {
+    printf("Jacobian calculation error in calling LaplaceMatrix!\n");
+    return 1;
+  }
+
+  /* Add in the Jacobian of the reaction terms matrix */
+  if (udata->R == NULL) {
+    udata->R = SparseNewMat(J->M, J->N, J->NNZ, CSC_MAT);
+    if (udata->R == NULL) {
+      printf("Jacobian calculation error in allocating R matrix!\n");
+      return 1;
+    }
+  }
+      
+  /* Add in the Jacobian of the reaction terms matrix */
+  if (ReactionJac(y, udata->R, udata)) {
+    printf("Jacobian calculation error in calling ReactionJac!\n");
+    return 1;
+  }
+
+  /* Add R to J */
+  if (SparseAddMat(J,udata->R) != 0) {
+    printf("Jacobian calculation error in adding sparse matrices!\n");
+    return 1;
+  }
+
+  return 0;
+}
+
+
+
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Routine to compute the stiffness matrix from (L*y) */
+static int LaplaceMatrix(SlsMat Lap, UserData udata)
+{
+  int N = udata->N;  /* set shortcuts */
+  int i, nz=0;
+  realtype uconst, uconst2, vconst, vconst2, wconst, wconst2;
+  int *colptrs = *Lap->colptrs;
+  int *rowvals = *Lap->rowvals;
+  realtype *data = Lap->data;
+  
+  /* clear out matrix */
+  SparseSetMatToZero(Lap);
+
+  /* set first column to zero */
+  colptrs[IDX(0,0)] = nz;
+  colptrs[IDX(0,1)] = nz;
+  colptrs[IDX(0,2)] = nz;
+  
+  /* iterate over nodes, filling in Laplacian entries depending on these */
+  uconst  = (udata->du)/(udata->dx)/(udata->dx);
+  uconst2 = -TWO*uconst;
+  vconst  = (udata->dv)/(udata->dx)/(udata->dx);
+  vconst2 = -TWO*vconst;
+  wconst  = (udata->dw)/(udata->dx)/(udata->dx);
+  wconst2 = -TWO*wconst;
+  for (i=1; i<N-1; i++) {
+
+    /* dependence on u at this node */
+    colptrs[IDX(i,0)] = nz;
+    if (i>1) {                /* node to left */
+      data[nz] = uconst;
+      rowvals[nz++] = IDX(i-1,0);
+    }
+
+    data[nz] = uconst2;  /* self */
+    rowvals[nz++] = IDX(i,0);
+
+    if (i<N-2) {              /* node to right */
+      data[nz] = uconst;
+      rowvals[nz++] = IDX(i+1,0);
+    }
+
+    /* dependence on v at this node */
+    colptrs[IDX(i,1)] = nz;
+    if (i>1) {                /* node to left */
+      data[nz] = vconst;
+      rowvals[nz++] = IDX(i-1,1);
+    }
+
+    data[nz] = vconst2;  /* self */
+    rowvals[nz++] = IDX(i,1);
+
+    if (i<N-2) {              /* node to right */
+      data[nz] = vconst;
+      rowvals[nz++] = IDX(i+1,1);
+    }
+
+    /* dependence on w at this node */
+    colptrs[IDX(i,2)] = nz;
+    if (i>1) {                /* node to left */
+      data[nz] = wconst;
+      rowvals[nz++] = IDX(i-1,2);
+    }
+
+    data[nz] = wconst2;  /* self */
+    rowvals[nz++] = IDX(i,2);
+
+    if (i<N-2) {              /* node to right */
+      data[nz] = wconst;
+      rowvals[nz++] = IDX(i+1,2);
+    }
+
+  }
+
+  /* set last column to zero */
+  colptrs[IDX(N-1,0)] = nz;
+  colptrs[IDX(N-1,1)] = nz;
+  colptrs[IDX(N-1,2)] = nz;
+  
+  /* end of data */
+  colptrs[IDX(N-1,2)+1] = nz;
+
+  return 0;
+}
+
+
+
+/* Routine to compute the Jacobian matrix from R(y) */
+static int ReactionJac(N_Vector y, SlsMat Jac, UserData udata)
+{
+  int N = udata->N;                            /* set shortcuts */
+  int i, nz=0;
+  realtype u, v, w;
+  realtype ep = udata->ep;
+  int *colptrs = *Jac->colptrs;
+  int *rowvals = *Jac->rowvals;
+  realtype *data = Jac->data;
+  realtype *Ydata = N_VGetArrayPointer(y);     /* access solution array */
+  if (check_flag((void *) Ydata, "N_VGetArrayPointer", 0)) return 1;
+
+  /* clear out matrix */
+  SparseSetMatToZero(Jac);
+
+  /* set first matrix column to zero */
+  colptrs[IDX(0,0)] = 0;
+  colptrs[IDX(0,1)] = 0;
+  colptrs[IDX(0,2)] = 0;
+  
+  /* iterate over interior nodes, filling in Jacobian entries */
+  for (i=1; i<N-1; i++) {
+
+    /* set nodal value shortcuts */
+    u = Ydata[IDX(i,0)];
+    v = Ydata[IDX(i,1)];
+    w = Ydata[IDX(i,2)];
+
+    /* dependence on u at this node */
+    colptrs[IDX(i,0)] = nz;
+
+    rowvals[nz] = IDX(i,0);        /* fu wrt u */
+    data[nz++] = TWO*u*v - w - ONE;
+
+    rowvals[nz] = IDX(i,1);        /* fv wrt u */
+    data[nz++] = w - TWO*u*v;
+
+    rowvals[nz] = IDX(i,2);        /* fw wrt u */
+    data[nz++] = -w;
+
+    /* dependence on v at this node */
+    colptrs[IDX(i,1)] = nz;
+
+    rowvals[nz] = IDX(i,0);        /* fu wrt v */
+    data[nz++] = u*u;
+
+    rowvals[nz] = IDX(i,1);        /* fv wrt v */
+    data[nz++] = -u*u;
+
+    /* dependence on w at this node */
+    colptrs[IDX(i,2)] = nz;
+
+    rowvals[nz] = IDX(i,0);        /* fu wrt w */
+    data[nz++] = -u;
+
+    rowvals[nz] = IDX(i,1);        /* fv wrt w */
+    data[nz++] = u;
+
+    rowvals[nz] = IDX(i,2);        /* fw wrt w */
+    data[nz++] = -ONE/ep - u;
+
+  }
+
+  /* set last matrix column to zero */
+  colptrs[IDX(N-1,0)] = nz;
+  colptrs[IDX(N-1,1)] = nz;
+  colptrs[IDX(N-1,2)] = nz;
+
+  /* end of data */
+  colptrs[IDX(N-1,2)+1] = nz;
+
+  return 0;
+}
+
+
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_brusselator1D_klu.out b/examples/arkode/C_serial/ark_brusselator1D_klu.out
new file mode 100644
index 0000000..ed2d8ed
--- /dev/null
+++ b/examples/arkode/C_serial/ark_brusselator1D_klu.out
@@ -0,0 +1,29 @@
+
+1D Brusselator PDE test problem (KLU solver):
+    N = 201,  NEQ = 603
+    problem parameters:  a = 0.6,  b = 2,  ep = 1e-05
+    diffusion coefficients:  du = 0.025,  dv = 0.025,  dw = 0.025
+    reltol = 1.0e-06,  abstol = 1.0e-10
+
+        t      ||u||_rms   ||v||_rms   ||w||_rms
+   ----------------------------------------------
+    1.000000    0.791135    3.140510    1.999984
+    2.000000    0.960033    2.757430    1.999981
+    3.000000    0.930299    2.532868    1.999982
+    4.000000    0.681809    2.696300    1.999986
+    5.000000    0.506326    3.007843    1.999990
+    6.000000    0.449425    3.275283    1.999991
+    7.000000    0.446297    3.465934    1.999991
+    8.000000    0.463486    3.586728    1.999991
+    9.000000    0.491684    3.644311    1.999990
+   10.000000    0.530857    3.640396    1.999990
+   ----------------------------------------------
+
+Final Solver Statistics:
+   Internal solver steps = 99 (attempted = 99)
+   Total RHS evals:  Fe = 0,  Fi = 1695
+   Total linear solver setups = 35
+   Total number of Jacobian evaluations = 14
+   Total number of nonlinear iterations = 1196
+   Total number of nonlinear solver convergence failures = 0
+   Total number of error test failures = 0
diff --git a/examples/arkode/C_serial/ark_brusselator_fp.c b/examples/arkode/C_serial/ark_brusselator_fp.c
new file mode 100644
index 0000000..540ded2
--- /dev/null
+++ b/examples/arkode/C_serial/ark_brusselator_fp.c
@@ -0,0 +1,294 @@
+/*-----------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates a brusselator problem from chemical 
+ * kinetics.  This is an ODE system with 3 components, Y = [u,v,w], 
+ * satisfying the equations,
+ *    du/dt = a - (w+1)*u + v*u^2
+ *    dv/dt = w*u - v*u^2
+ *    dw/dt = (b-w)/ep - w*u
+ * for t in the interval [0.0, 10.0], with initial conditions 
+ * Y0 = [u0,v0,w0]. 
+ * 
+ * We have 3 different testing scenarios:
+ *
+ * Test 1:  u0=3.9,  v0=1.1,  w0=2.8,  a=1.2,  b=2.5,  ep=1.0e-5
+ *    Here, all three components exhibit a rapid transient change 
+ *    during the first 0.2 time units, followed by a slow and 
+ *    smooth evolution.
+ *
+ * Test 2:  u0=1.2,  v0=3.1,  w0=3,  a=1,  b=3.5,  ep=5.0e-6
+ *    Here, w experiences a fast initial transient, jumping 0.5 
+ *    within a few steps.  All values proceed smoothly until 
+ *    around t=6.5, when both u and v undergo a sharp transition, 
+ *    with u increaseing from around 0.5 to 5 and v decreasing 
+ *    from around 6 to 1 in less than 0.5 time units.  After this
+ *    transition, both u and v continue to evolve somewhat 
+ *    rapidly for another 1.4 time units, and finish off smoothly.
+ *
+ * Test 3:  u0=3,  v0=3,  w0=3.5,  a=0.5,  b=3,  ep=5.0e-4
+ *    Here, all components undergo very rapid initial transients 
+ *    during the first 0.3 time units, and all then proceed very 
+ *    smoothly for the remainder of the simulation.
+ *
+ * This file is hard-coded to use test 3.
+ * 
+ * This program solves the problem with the ARK method, using an
+ * accelerated fixed-point iteration for the nonlinear solver.
+ *
+ * 100 outputs are printed at equal intervals, and run statistics 
+ * are printed at the end.
+ *-----------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKode fcts., consts. */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fcts., macros */
+#include <sundials/sundials_types.h>  /* def. of type 'realtype' */
+
+/* User-supplied Functions Called by the Solver */
+static int fe(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int fi(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main Program */
+int main()
+{
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);     /* initial time */
+  realtype Tf = RCONST(10.0);    /* final time */
+  realtype dTout = RCONST(1.0);  /* time between outputs */
+  long int NEQ = 3;              /* number of dependent vars. */
+  int Nt = ceil(Tf/dTout);       /* number of output times */
+  int test = 3;                  /* test problem to run */
+  realtype reltol = 1.0e-6;      /* tolerances */
+  realtype abstol = 1.0e-10;
+  int fp_m = 3;                  /* dimension of acceleration subspace */
+  int maxcor = 10;               /* maximum # of nonlinear iterations/step */
+  realtype a, b, ep, u0, v0, w0;
+  realtype rdata[3];
+
+  /* general problem variables */
+  int flag;                      /* reusable error-checking flag */
+  N_Vector y = NULL;             /* empty vector for storing solution */
+  void *arkode_mem = NULL;       /* empty ARKode memory structure */
+  FILE *UFID;
+  realtype t, tout;
+  int iout;
+  long int nst, nst_a, nfe, nfi, nni, ncfn, netf;
+
+  /* set up the test problem according to the desired test */
+  if (test == 1) {
+    u0 = RCONST(3.9);
+    v0 = RCONST(1.1);
+    w0 = RCONST(2.8);
+    a  = RCONST(1.2);
+    b  = RCONST(2.5);
+    ep = RCONST(1.0e-5);
+  } else if (test == 3) {
+    u0 = RCONST(3.0);
+    v0 = RCONST(3.0);
+    w0 = RCONST(3.5);
+    a  = RCONST(0.5);
+    b  = RCONST(3.0);
+    ep = RCONST(5.0e-4);
+  } else {
+    u0 = RCONST(1.2);
+    v0 = RCONST(3.1);
+    w0 = RCONST(3.0);
+    a  = RCONST(1.0);
+    b  = RCONST(3.5);
+    ep = RCONST(5.0e-6);
+  }
+
+  /* Initial problem output */
+  printf("\nBrusselator ODE test problem, fixed-point solver:\n");
+  printf("    initial conditions:  u0 = %g,  v0 = %g,  w0 = %g\n",u0,v0,w0);
+  printf("    problem parameters:  a = %g,  b = %g,  ep = %g\n",a,b,ep);
+  printf("    reltol = %.1e,  abstol = %.1e\n\n",reltol,abstol);
+
+  /* Initialize data structures */
+  rdata[0] = a;    /* set user data  */
+  rdata[1] = b;
+  rdata[2] = ep;
+  y = N_VNew_Serial(NEQ);           /* Create serial vector for solution */
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return 1;
+  NV_Ith_S(y,0) = u0;               /* Set initial conditions */
+  NV_Ith_S(y,1) = v0;
+  NV_Ith_S(y,2) = w0;
+  arkode_mem = ARKodeCreate();      /* Create the solver memory */
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side functions in y'=fe(t,y)+fi(t,y), the inital time T0, 
+     and the initial dependent variable vector y. */
+  flag = ARKodeInit(arkode_mem, fe, fi, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set routines */
+  flag = ARKodeSetUserData(arkode_mem, (void *) rdata);     /* Pass rdata to user functions */
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);    /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+  flag = ARKodeSetFixedPoint(arkode_mem, fp_m);             /* Specify fixed-point solver */
+  if (check_flag(&flag, "ARKodeSetFixedPoint", 1)) return 1;
+  flag = ARKodeSetMaxNonlinIters(arkode_mem, maxcor);       /* Increase default iterations */
+  if (check_flag(&flag, "ARKodeSetMaxNonlinIters", 1)) return 1;
+
+  /* Open output stream for results, output comment line */
+  UFID = fopen("solution.txt","w");
+  fprintf(UFID,"# t u v w\n");
+
+  /* output initial condition to disk */
+  fprintf(UFID," %.16e %.16e %.16e %.16e\n", 
+	  T0, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));  
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t = T0;
+  tout = T0+dTout;
+  printf("        t           u           v           w\n");
+  printf("   ----------------------------------------------\n");
+  for (iout=0; iout<Nt; iout++) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);      /* call integrator */
+    if (check_flag(&flag, "ARKode", 1)) break;
+    printf("  %10.6f  %10.6f  %10.6f  %10.6f\n",             /* access/print solution */
+           t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));
+    fprintf(UFID," %.16e %.16e %.16e %.16e\n", 
+	    t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));  
+    if (flag >= 0) {                                         /* successful solve: update time */
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                                 /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+  }
+  printf("   ----------------------------------------------\n");
+  fclose(UFID);
+
+  /* Print some final statistics */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total number of fixed-point iterations = %li\n", nni);
+  printf("   Total number of nonlinear solver convergence failures = %li\n", ncfn);
+  printf("   Total number of error test failures = %li\n\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy_Serial(y);        /* Free y vector */
+  ARKodeFree(&arkode_mem);     /* Free integrator memory */
+  return 0;
+}
+
+/*-------------------------------
+ * Functions called by the solver
+ *-------------------------------*/
+
+/* fi routine to compute the implicit portion of the ODE RHS. */
+static int fi(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype *rdata = (realtype *) user_data;   /* cast user_data to realtype */
+  realtype b  = rdata[1];                     /* access data entries */
+  realtype ep = rdata[2];
+  realtype w = NV_Ith_S(y,2);                 /* access solution values */
+
+  /* fill in the RHS function */
+  NV_Ith_S(ydot,0) = 0.0;
+  NV_Ith_S(ydot,1) = 0.0;
+  NV_Ith_S(ydot,2) = (b-w)/ep;
+
+  return 0;                                  /* Return with success */
+}
+
+/* fe routine to compute the explicit portion of the ODE RHS. */
+static int fe(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype *rdata = (realtype *) user_data;   /* cast user_data to realtype */
+  realtype a  = rdata[0];                     /* access data entries */
+  realtype u = NV_Ith_S(y,0);                 /* access solution values */
+  realtype v = NV_Ith_S(y,1);
+  realtype w = NV_Ith_S(y,2);
+
+  /* fill in the RHS function */
+  NV_Ith_S(ydot,0) = a - (w+1.0)*u + v*u*u;
+  NV_Ith_S(ydot,1) = w*u - v*u*u;
+  NV_Ith_S(ydot,2) = -w*u;
+
+  return 0;                                  /* Return with success */
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_brusselator_fp.out b/examples/arkode/C_serial/ark_brusselator_fp.out
new file mode 100644
index 0000000..ed3b6a4
--- /dev/null
+++ b/examples/arkode/C_serial/ark_brusselator_fp.out
@@ -0,0 +1,27 @@
+
+Brusselator ODE test problem, fixed-point solver:
+    initial conditions:  u0 = 3,  v0 = 3,  w0 = 3.5
+    problem parameters:  a = 0.5,  b = 3,  ep = 0.0005
+    reltol = 1.0e-06,  abstol = 1.0e-10
+
+        t           u           v           w
+   ----------------------------------------------
+    1.000000    1.897255    1.274939    2.997155
+    2.000000    0.346125    2.366448    2.999481
+    3.000000    0.147442    2.862061    2.999783
+    4.000000    0.140733    3.226731    2.999788
+    5.000000    0.142659    3.583206    2.999785
+    6.000000    0.145095    3.936910    2.999784
+    7.000000    0.147720    4.287893    2.999777
+    8.000000    0.150542    4.635957    2.999776
+    9.000000    0.153590    4.980863    2.999768
+   10.000000    0.156901    5.322330    2.999765
+   ----------------------------------------------
+
+Final Solver Statistics:
+   Internal solver steps = 730 (attempted = 730)
+   Total RHS evals:  Fe = 4384,  Fi = 18798
+   Total number of fixed-point iterations = 14414
+   Total number of nonlinear solver convergence failures = 0
+   Total number of error test failures = 0
+
diff --git a/examples/arkode/C_serial/ark_heat1D.c b/examples/arkode/C_serial/ark_heat1D.c
new file mode 100644
index 0000000..77c4daa
--- /dev/null
+++ b/examples/arkode/C_serial/ark_heat1D.c
@@ -0,0 +1,320 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates a simple 1D heat equation,
+ *    u_t = k*u_xx + f
+ * for t in [0, 10], x in [0, 1], with initial conditions
+ *    u(0,x) =  0
+ * Dirichlet boundary conditions, i.e. 
+ *    u_t(t,0) = u_t(t,1) = 0,
+ * and a point-source heating term,
+ *    f = 1 for x=0.5.
+ * 
+ * The spatial derivatives are computed using second-order 
+ * centered differences, with the data distributed over N points 
+ * on a uniform spatial grid.
+ *
+ * This program solves the problem with either an ERK or DIRK
+ * method.  For the DIRK method, we use a Newton iteration with 
+ * the PCG linear solver, and a user-supplied Jacobian-vector 
+ * product routine.
+ *
+ * 100 outputs are printed at equal intervals, and run statistics 
+ * are printed at the end.
+ *---------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKode fcts., consts. */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fcts., macros */
+#include <arkode/arkode_pcg.h>        /* prototype for ARKPcg solver */
+#include <sundials/sundials_types.h>  /* def. of type 'realtype' */
+#include <sundials/sundials_math.h>   /* def. of SUNRsqrt, etc. */
+
+/* user data structure */
+typedef struct {
+  long int N;    /* number of intervals   */
+  realtype dx;   /* mesh spacing          */
+  realtype k;    /* diffusion coefficient */
+} *UserData;
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(N_Vector v, N_Vector Jv, realtype t, N_Vector y,
+            N_Vector fy, void *user_data, N_Vector tmp);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main Program */
+int main() {
+
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);   /* initial time */
+  realtype Tf = RCONST(1.0);   /* final time */
+  int Nt = 10;                 /* total number of output times */
+  realtype rtol = 1.e-6;       /* relative tolerance */
+  realtype atol = 1.e-10;      /* absolute tolerance */
+  UserData udata = NULL;
+  realtype *data;
+  long int N = 201;            /* spatial mesh size */
+  realtype k = 0.5;            /* heat conductivity */
+  long int i;
+
+  /* general problem variables */
+  int flag;                 /* reusable error-checking flag */
+  N_Vector y = NULL;             /* empty vector for storing solution */
+  void *arkode_mem = NULL;        /* empty ARKode memory structure */
+  FILE *FID, *UFID;
+  realtype t, dTout, tout;
+  int iout;
+  long int nst, nst_a, nfe, nfi, nsetups, nli, nJv, nlcf, nni, ncfn, netf;
+
+  /* allocate and fill udata structure */
+  udata = (UserData) malloc(sizeof(*udata));
+  udata->N = N;
+  udata->k = k;
+  udata->dx = RCONST(1.0)/(1.0*N-1.0);     /* mesh spacing */
+
+  /* Initial problem output */
+  printf("\n1D Heat PDE test problem:\n");
+  printf("  N = %li\n", udata->N);
+  printf("  diffusion coefficient:  k = %g\n", udata->k);
+
+  /* Initialize data structures */
+  y = N_VNew_Serial(N);            /* Create serial vector for solution */
+  if (check_flag((void *) y, "N_VNew_Serial", 0)) return 1;
+  N_VConst(0.0, y);                /* Set initial conditions */
+  arkode_mem = ARKodeCreate();     /* Create the solver memory */
+  if (check_flag((void *) arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set routines */
+  flag = ARKodeSetUserData(arkode_mem, (void *) udata);   /* Pass udata to user functions */
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSetMaxNumSteps(arkode_mem, 10000);         /* Increase max num steps  */
+  if (check_flag(&flag, "ARKodeSetMaxNumSteps", 1)) return 1;
+  flag = ARKodeSetPredictorMethod(arkode_mem, 1);         /* Specify maximum-order predictor */
+  if (check_flag(&flag, "ARKodeSetPredictorMethod", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, rtol, atol);      /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  /* Linear solver specification */
+  flag = ARKPcg(arkode_mem, 0, N);                        /* Specify the PCG solver */
+  if (check_flag(&flag, "ARKPcg", 1)) return 1;
+  flag = ARKSpilsSetJacTimesVecFn(arkode_mem, Jac);       /* Set the Jacobian routine */
+  if (check_flag(&flag, "ARKSpilsSetJacTimesVecFn", 1)) return 1;
+
+  /* Specify linearly implicit RHS, with non-time-dependent Jacobian */
+  flag = ARKodeSetLinear(arkode_mem, 0);
+  if (check_flag(&flag, "ARKodeSetLinear", 1)) return 1;
+
+  /* output mesh to disk */
+  FID=fopen("heat_mesh.txt","w");
+  for (i=0; i<N; i++)  fprintf(FID,"  %.16e\n", udata->dx*i);
+  fclose(FID);
+
+  /* Open output stream for results, access data array */
+  UFID=fopen("heat1D.txt","w");
+  data = N_VGetArrayPointer(y);
+
+  /* output initial condition to disk */
+  for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[i]);
+  fprintf(UFID,"\n");
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t = T0;
+  dTout = (Tf-T0)/Nt;
+  tout = T0+dTout;
+  printf("        t      ||u||_rms\n");
+  printf("   -------------------------\n");
+  printf("  %10.6f  %10.6f\n", t, SUNRsqrt(N_VDotProd(y,y)/N));
+  for (iout=0; iout<Nt; iout++) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);         /* call integrator */
+    if (check_flag(&flag, "ARKode", 1)) break;
+    printf("  %10.6f  %10.6f\n", t, SUNRsqrt(N_VDotProd(y,y)/N));   /* print solution stats */
+    if (flag >= 0) {                                            /* successful solve: update output time */
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                                    /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+
+    /* output results to disk */
+    for (i=0; i<N; i++)  fprintf(UFID," %.16e", data[i]);
+    fprintf(UFID,"\n");
+  }
+  printf("   -------------------------\n");
+  fclose(UFID);
+
+  /* Print some final statistics */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+  flag = ARKSpilsGetNumLinIters(arkode_mem, &nli);
+  check_flag(&flag, "ARKSpilsGetNumLinIters", 1);
+  flag = ARKSpilsGetNumJtimesEvals(arkode_mem, &nJv);
+  check_flag(&flag, "ARKSpilsGetNumJtimesEvals", 1);
+  flag = ARKSpilsGetNumConvFails(arkode_mem, &nlcf);
+  check_flag(&flag, "ARKSpilsGetNumConvFails", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total linear solver setups = %li\n", nsetups);
+  printf("   Total linear iterations = %li\n", nli);
+  printf("   Total number of Jacobian-vector products = %li\n", nJv);
+  printf("   Total number of linear solver convergence failures = %li\n", nlcf);
+  printf("   Total number of Newton iterations = %li\n", nni);
+  printf("   Total number of nonlinear solver convergence failures = %li\n", ncfn);
+  printf("   Total number of error test failures = %li\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy_Serial(y);        /* Free vectors */
+  free(udata);                 /* Free user data */
+  ARKodeFree(&arkode_mem);     /* Free integrator memory */
+  return 0;
+}
+
+/*--------------------------------
+ * Functions called by the solver
+ *--------------------------------*/
+
+/* f routine to compute the ODE RHS function f(t,y). */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  UserData udata = (UserData) user_data;    /* access problem data */
+  long int N  = udata->N;                   /* set variable shortcuts */
+  realtype k  = udata->k;
+  realtype dx = udata->dx;
+  realtype *Y=NULL, *Ydot=NULL;
+  realtype c1, c2;
+  long int i, isource;
+
+  Y = N_VGetArrayPointer(y);      /* access data arrays */
+  if (check_flag((void *) Y, "N_VGetArrayPointer", 0)) return 1;
+  Ydot = N_VGetArrayPointer(ydot);
+  if (check_flag((void *) Ydot, "N_VGetArrayPointer", 0)) return 1;
+  N_VConst(0.0, ydot);                      /* Initialize ydot to zero */
+
+  /* iterate over domain, computing all equations */
+  c1 = k/dx/dx;
+  c2 = -RCONST(2.0)*k/dx/dx;
+  isource = N/2;
+  Ydot[0] = 0.0;                 /* left boundary condition */
+  for (i=1; i<N-1; i++)
+    Ydot[i] = c1*Y[i-1] + c2*Y[i] + c1*Y[i+1];
+  Ydot[N-1] = 0.0;               /* right boundary condition */
+  Ydot[isource] += 0.01/dx;      /* source term */
+
+  return 0;                      /* Return with success */
+}
+
+/* Jacobian routine to compute J(t,y) = df/dy. */
+static int Jac(N_Vector v, N_Vector Jv, realtype t, N_Vector y, 
+	       N_Vector fy, void *user_data, N_Vector tmp)
+{
+  UserData udata = (UserData) user_data;     /* variable shortcuts */
+  long int N  = udata->N;
+  realtype k  = udata->k;
+  realtype dx = udata->dx;
+  realtype *V=NULL, *JV=NULL;
+  realtype c1, c2;
+  long int i;
+
+  V = N_VGetArrayPointer(v);       /* access data arrays */
+  if (check_flag((void *) V, "N_VGetArrayPointer", 0)) return 1;
+  JV = N_VGetArrayPointer(Jv);
+  if (check_flag((void *) JV, "N_VGetArrayPointer", 0)) return 1;
+  N_VConst(0.0, Jv);                         /* initialize Jv product to zero */
+
+  /* iterate over domain, computing all Jacobian-vector products */
+  c1 = k/dx/dx;
+  c2 = -RCONST(2.0)*k/dx/dx;
+  JV[0] = 0.0;
+  for (i=1; i<N-1; i++)
+    JV[i] = c1*V[i-1] + c2*V[i] + c1*V[i+1];
+  JV[N-1] = 0.0;
+
+  return 0;                                  /* Return with success */
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_heat1D.out b/examples/arkode/C_serial/ark_heat1D.out
new file mode 100644
index 0000000..dd54665
--- /dev/null
+++ b/examples/arkode/C_serial/ark_heat1D.out
@@ -0,0 +1,29 @@
+
+1D Heat PDE test problem:
+  N = 201
+  diffusion coefficient:  k = 0.5
+        t      ||u||_rms
+   -------------------------
+    0.000000    0.000000
+    0.100000    0.001165
+    0.200000    0.001826
+    0.300000    0.002235
+    0.400000    0.002486
+    0.500000    0.002639
+    0.600000    0.002733
+    0.700000    0.002790
+    0.800000    0.002825
+    0.900000    0.002846
+    1.000000    0.002859
+   -------------------------
+
+Final Solver Statistics:
+   Internal solver steps = 197 (attempted = 197)
+   Total RHS evals:  Fe = 0,  Fi = 1974
+   Total linear solver setups = 0
+   Total linear iterations = 17309
+   Total number of Jacobian-vector products = 17309
+   Total number of linear solver convergence failures = 0
+   Total number of Newton iterations = 985
+   Total number of nonlinear solver convergence failures = 0
+   Total number of error test failures = 0
diff --git a/examples/arkode/C_serial/ark_heat1D_adapt.c b/examples/arkode/C_serial/ark_heat1D_adapt.c
new file mode 100644
index 0000000..2833111
--- /dev/null
+++ b/examples/arkode/C_serial/ark_heat1D_adapt.c
@@ -0,0 +1,514 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates a simple 1D heat equation,
+ *    u_t = k*u_xx + f
+ * for t in [0, 10], x in [0, 1], with initial conditions
+ *    u(0,x) =  0
+ * Dirichlet boundary conditions, i.e. 
+ *    u_t(t,0) = u_t(t,1) = 0,
+ * and a heating term of the form
+ *    f = 2*exp(-200*(x-0.25)*(x-0.25))
+ *        - exp(-400*(x-0.7)*(x-0.7))
+ *        + exp(-500*(x-0.4)*(x-0.4))
+ *        - 2*exp(-600*(x-0.55)*(x-0.55));
+ * 
+ * The spatial derivatives are computed using a three-point 
+ * centered stencil (second order for a uniform mesh).  The data
+ * is initially uniformly distributed over N points in the interval
+ * [0, 1], but as the simulation proceeds the mesh is adapted.
+ *
+ * This program solves the problem with a DIRK method, solved with 
+ * a Newton iteration and PCG linear solver, with a user-supplied 
+ * Jacobian-vector product routine.
+ *---------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKode fcts., consts. */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fcts., macros */
+#include <arkode/arkode_pcg.h>        /* prototype for ARKPcg solver */
+#include <sundials/sundials_types.h>  /* def. of type 'realtype' */
+#include <sundials/sundials_math.h>   /* def. of SUNRsqrt, etc. */
+
+/* user data structure */
+typedef struct {
+  long int N;           /* current number of intervals */
+  realtype *x;          /* current mesh */
+  realtype k;           /* diffusion coefficient */
+  realtype refine_tol;  /* adaptivity tolerance */
+} *UserData;
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(N_Vector v, N_Vector Jv, realtype t, N_Vector y,
+            N_Vector fy, void *user_data, N_Vector tmp);
+
+/* Private function to check function return values */
+realtype * adapt_mesh(N_Vector y, long int *Nnew, UserData udata);
+static int project(long int Nold, realtype *xold, N_Vector yold, 
+		   long int Nnew, realtype *xnew, N_Vector ynew);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main Program */
+int main() {
+
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);   /* initial time */
+  realtype Tf = RCONST(1.0);   /* final time */
+  realtype rtol = 1.e-3;       /* relative tolerance */
+  realtype atol = 1.e-10;      /* absolute tolerance */
+  realtype hscale = 1.0;       /* time step change factor on resizes */
+  UserData udata = NULL;
+  realtype *data;
+  long int N = 21;             /* initial spatial mesh size */
+  realtype refine = 3.e-3;     /* adaptivity refinement tolerance */
+  realtype k = 0.5;            /* heat conductivity */
+  long int i, nni, nni_cur=0, nni_tot=0, nli, nli_tot=0;
+  int iout=0;
+
+  /* general problem variables */
+  int flag;                    /* reusable error-checking flag */
+  N_Vector y  = NULL;          /* empty vector for storing solution */
+  N_Vector y2 = NULL;          /* empty vector for storing solution */
+  N_Vector yt = NULL;          /* empty vector for swapping */
+  void *arkode_mem = NULL;     /* empty ARKode memory structure */
+  FILE *XFID, *UFID;
+  realtype t, olddt, newdt;
+  realtype *xnew = NULL;
+  long int Nnew;
+
+  /* allocate and fill initial udata structure */
+  udata = (UserData) malloc(sizeof(*udata));
+  udata->N = N;
+  udata->k = k;
+  udata->refine_tol = refine;
+  udata->x = malloc(N * sizeof(realtype));
+  for (i=0; i<N; i++)  udata->x[i] = 1.0*i/(N-1);
+
+  /* Initial problem output */
+  printf("\n1D adaptive Heat PDE test problem:\n");
+  printf("  diffusion coefficient:  k = %g\n", udata->k);
+  printf("  initial N = %li\n", udata->N);
+
+  /* Initialize data structures */
+  y = N_VNew_Serial(N);       /* Create initial serial vector for solution */
+  if (check_flag((void *) y, "N_VNew_Serial", 0)) return 1;
+  N_VConst(0.0, y);           /* Set initial conditions */
+
+  /* output mesh to disk */
+  XFID=fopen("heat_mesh.txt","w");
+
+  /* output initial mesh to disk */
+  for (i=0; i<udata->N; i++)  fprintf(XFID," %.16e", udata->x[i]);
+  fprintf(XFID,"\n");
+
+  /* Open output stream for results, access data array */
+  UFID=fopen("heat1D.txt","w");
+
+  /* output initial condition to disk */
+  data = N_VGetArrayPointer(y);
+  for (i=0; i<udata->N; i++)  fprintf(UFID," %.16e", data[i]);
+  fprintf(UFID,"\n");
+
+
+  /* Create the solver memory */
+  arkode_mem = ARKodeCreate();
+  if (check_flag((void *) arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Initialize the integrator memory */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set routines */
+  flag = ARKodeSetUserData(arkode_mem, (void *) udata);   /* Pass udata to user functions */
+  if (check_flag(&flag, "ARKodeSetUserData", 1)) return 1;
+  flag = ARKodeSetMaxNumSteps(arkode_mem, 10000);         /* Increase max num steps  */
+  if (check_flag(&flag, "ARKodeSetMaxNumSteps", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, rtol, atol);      /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+  flag = ARKodeSetAdaptivityMethod(arkode_mem, 2, 1, 0, NULL);  /* Set adaptivity method */
+  if (check_flag(&flag, "ARKodeSetAdaptivityMethod", 1)) return 1;
+  flag = ARKodeSetPredictorMethod(arkode_mem, 0);     /* Set predictor method */
+  if (check_flag(&flag, "ARKodeSetPredictorMethod", 1)) return 1;
+
+  /* Linear solver specification */
+  flag = ARKPcg(arkode_mem, 0, N);
+  if (check_flag(&flag, "ARKPcg", 1)) return 1;
+  flag = ARKSpilsSetJacTimesVecFn(arkode_mem, Jac);
+  if (check_flag(&flag, "ARKSpilsSetJacTimesVecFn", 1)) return 1;
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t = T0;
+  olddt = 0.0;
+  newdt = 0.0;
+  printf("  iout          dt_old                 dt_new               ||u||_rms       N   NNI  NLI\n");
+  printf(" ----------------------------------------------------------------------------------------\n");
+  printf(" %4i  %19.15e  %19.15e  %19.15e  %li   %2i  %3i\n", 
+	 iout, olddt, newdt, SUNRsqrt(N_VDotProd(y,y)/udata->N), udata->N, 0, 0);
+  while (t < Tf) {
+
+    /* "set" routines */
+    flag = ARKodeSetStopTime(arkode_mem, Tf);
+    if (check_flag(&flag, "ARKodeSetStopTime", 1)) return 1;
+    flag = ARKodeSetInitStep(arkode_mem, newdt);
+    if (check_flag(&flag, "ARKodeSetInitStep", 1)) return 1;
+
+    /* call integrator */
+    flag = ARKode(arkode_mem, Tf, y, &t, ARK_ONE_STEP);
+    if (check_flag(&flag, "ARKode", 1)) return 1;
+
+    /* "get" routines */
+    flag = ARKodeGetLastStep(arkode_mem, &olddt);
+    if (check_flag(&flag, "ARKodeGetLastStep", 1)) return 1;
+    flag = ARKodeGetCurrentStep(arkode_mem, &newdt);
+    if (check_flag(&flag, "ARKodeGetCurrentStep", 1)) return 1;
+    flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+    if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) return 1;
+    flag = ARKSpilsGetNumLinIters(arkode_mem, &nli);
+    if (check_flag(&flag, "ARKSpilsGetNumLinIters", 1)) return 1;
+
+    /* print current solution stats */
+    iout++;
+    printf(" %4i  %19.15e  %19.15e  %19.15e  %li   %2li  %3li\n", 
+	   iout, olddt, newdt, SUNRsqrt(N_VDotProd(y,y)/udata->N), udata->N, nni-nni_cur, nli);
+    nni_cur = nni;
+    nni_tot = nni;
+    nli_tot += nli;
+
+    /* output results and current mesh to disk */
+    data = N_VGetArrayPointer(y);
+    for (i=0; i<udata->N; i++)  fprintf(UFID," %.16e", data[i]);
+    fprintf(UFID,"\n");
+    for (i=0; i<udata->N; i++)  fprintf(XFID," %.16e", udata->x[i]);
+    fprintf(XFID,"\n");
+
+    /* adapt the spatial mesh */
+    xnew = adapt_mesh(y, &Nnew, udata);
+    if (check_flag(xnew, "ark_adapt", 0)) return 1;
+
+    /* create N_Vector of new length */
+    y2 = N_VNew_Serial(Nnew);
+    if (check_flag((void *) y2, "N_VNew_Serial", 0)) return 1;
+    
+    /* project solution onto new mesh */
+    flag = project(udata->N, udata->x, y, Nnew, xnew, y2);
+    if (check_flag(&flag, "project", 1)) return 1;
+
+    /* delete old vector, old mesh */
+    N_VDestroy_Serial(y);
+    free(udata->x);
+    
+    /* swap x and xnew so that new mesh is stored in udata structure */
+    udata->x = xnew;
+    xnew = NULL;
+    udata->N = Nnew;   /* store size of new mesh */
+    
+    /* swap y and y2 so that y holds new solution */
+    yt = y;
+    y  = y2;
+    y2 = yt;
+
+    /* call ARKodeResize to notify integrator of change in mesh */
+    flag = ARKodeResize(arkode_mem, y, hscale, t, NULL, NULL);
+    if (check_flag(&flag, "ARKodeResize", 1)) return 1;
+
+    /* destroy and re-allocate linear solver memory */
+    flag = ARKPcg(arkode_mem, 0, udata->N);
+    if (check_flag(&flag, "ARKPcg", 1)) return 1;
+    flag = ARKSpilsSetJacTimesVecFn(arkode_mem, Jac);
+    if (check_flag(&flag, "ARKSpilsSetJacTimesVecFn", 1)) return 1;
+
+  }
+  printf(" ----------------------------------------------------------------------------------------\n");
+
+  /* Free integrator memory */
+  ARKodeFree(&arkode_mem);
+
+  /* print some final statistics */
+  printf(" Final solver statistics:\n");
+  printf("   Total number of time steps = %i\n", iout);
+  printf("   Total nonlinear iterations = %li\n", nni_tot);
+  printf("   Total linear iterations    = %li\n\n", nli_tot);
+
+  /* Clean up and return with successful completion */
+  fclose(UFID);
+  fclose(XFID);
+  N_VDestroy_Serial(y);        /* Free vectors */
+  free(udata->x);              /* Free user data */
+  free(udata);   
+
+  return 0;
+}
+
+/*--------------------------------
+ * Functions called by the solver
+ *--------------------------------*/
+
+/* f routine to compute the ODE RHS function f(t,y). */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  UserData udata = (UserData) user_data;    /* access problem data */
+  long int N  = udata->N;                   /* set variable shortcuts */
+  realtype k  = udata->k;
+  realtype *x = udata->x;
+  realtype *Y=NULL, *Ydot=NULL;
+  realtype dxL, dxR;
+  long int i;
+  Y = N_VGetArrayPointer(y);      /* access data arrays */
+  if (check_flag((void *) Y, "N_VGetArrayPointer", 0)) return 1;
+  Ydot = N_VGetArrayPointer(ydot);
+  if (check_flag((void *) Ydot, "N_VGetArrayPointer", 0)) return 1;
+  N_VConst(0.0, ydot);                      /* Initialize ydot to zero */
+
+  /* iterate over domain, computing all equations */
+  Ydot[0] = 0.0;                 /* left boundary condition */
+  for (i=1; i<N-1; i++) {        /* interior */
+    dxL = x[i]-x[i-1];
+    dxR = x[i+1]-x[i];
+    Ydot[i] = Y[i-1]*k*2.0/(dxL*(dxL+dxR)) 
+            - Y[i]*k*2.0/(dxL*dxR)
+            + Y[i+1]*k*2.0/(dxR*(dxL+dxR));
+  }
+  Ydot[N-1] = 0.0;               /* right boundary condition */
+
+  /* source term */
+  for (i=0; i<N-1; i++) {
+    Ydot[i] += 2.0*SUNRexp(-200.0*(x[i]-0.25)*(x[i]-0.25))
+                 - SUNRexp(-400.0*(x[i]-0.7)*(x[i]-0.7))
+                 + SUNRexp(-500.0*(x[i]-0.4)*(x[i]-0.4))
+             - 2.0*SUNRexp(-600.0*(x[i]-0.55)*(x[i]-0.55));
+  }
+
+  return 0;                      /* Return with success */
+}
+
+/* Jacobian routine to compute J(t,y) = df/dy. */
+static int Jac(N_Vector v, N_Vector Jv, realtype t, N_Vector y, 
+	       N_Vector fy, void *user_data, N_Vector tmp)
+{
+  UserData udata = (UserData) user_data;     /* variable shortcuts */
+  long int N  = udata->N;
+  realtype k  = udata->k;
+  realtype *x = udata->x;
+  realtype *V=NULL, *JV=NULL;
+  realtype dxL, dxR;
+  long int i;
+  V = N_VGetArrayPointer(v);       /* access data arrays */
+  if (check_flag((void *) V, "N_VGetArrayPointer", 0)) return 1;
+  JV = N_VGetArrayPointer(Jv);
+  if (check_flag((void *) JV, "N_VGetArrayPointer", 0)) return 1;
+  N_VConst(0.0, Jv);               /* initialize Jv product to zero */
+
+  /* iterate over domain, computing all Jacobian-vector products */
+  JV[0] = 0.0;
+  for (i=1; i<N-1; i++) {
+    dxL = x[i]-x[i-1];
+    dxR = x[i+1]-x[i];
+    JV[i] = V[i-1]*k*2.0/(dxL*(dxL+dxR)) 
+          - V[i]*k*2.0/(dxL*dxR)
+          + V[i+1]*k*2.0/(dxR*(dxL+dxR));
+  }
+  JV[N-1] = 0.0;
+
+  return 0;                                  /* Return with success */
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Adapts the current mesh, using a simple adaptivity strategy of 
+   refining when an approximation of the scaled second-derivative is 
+   too large.  We only do this in one sweep, so no attempt is made to 
+   ensure the resulting mesh meets these same criteria after adaptivity:
+      y [input] -- the current solution vector
+      Nnew [output] -- the size of the new mesh
+      udata [input] -- the current system information 
+   The return for this function is a pointer to the new mesh. */
+realtype * adapt_mesh(N_Vector y, long int *Nnew, UserData udata)
+{
+  int i, j;
+  int *marks=NULL;
+  realtype ydd, *xold=NULL, *Y=NULL, *xnew=NULL;
+  long int num_refine, N_new;
+
+  /* Access current solution and mesh arrays */
+  xold = udata->x;
+  Y = N_VGetArrayPointer(y);
+  if (check_flag((void *) Y, "N_VGetArrayPointer", 0)) return NULL;
+
+  /* create marking array */
+  marks = calloc(udata->N-1, sizeof(int));
+
+  /* /\* perform marking:  */
+  /*     0 -> leave alone */
+  /*     1 -> refine */
+  /* realtype ymax, ymin; */
+  /* for (i=0; i<(udata->N-1); i++) { */
+
+  /*   /\* check for refinement *\/ */
+  /*   if (fabs(Y[i+1] - Y[i]) > udata->refine_tol) { */
+  /*     marks[i] = 1; */
+  /*     continue; */
+  /*   } */
+  /* } */
+
+  /* perform marking: 
+      0 -> leave alone
+      1 -> refine */
+  for (i=1; i<udata->N-1; i++) {
+
+    /* approximate scaled second-derivative */
+    ydd = Y[i-1] - 2.0*Y[i] + Y[i+1];
+
+    /* check for refinement */
+    if (fabs(ydd) > udata->refine_tol) {
+      marks[i-1] = 1;
+      marks[i] = 1;
+    }
+    
+  }
+
+  /* allocate new mesh */
+  num_refine = 0;
+  for (i=0; i<udata->N-1; i++) 
+    if (marks[i] == 1)   num_refine++;
+  N_new = udata->N + num_refine;
+  *Nnew = N_new;            /* Store new array length */
+  xnew = malloc((N_new) * sizeof(realtype));
+  
+
+  /* fill new mesh */
+  xnew[0] = udata->x[0];    /* store endpoints */
+  xnew[N_new-1] = udata->x[udata->N-1];
+  j=1;
+  /* iterate over old intervals */
+  for (i=0; i<udata->N-1; i++) {
+    /* if mark is 0, reuse old interval */ 
+    if (marks[i] == 0) {
+      xnew[j++] = xold[i+1];
+      continue;
+    }
+    
+    /* if mark is 1, refine old interval */
+    if (marks[i] == 1) {
+      xnew[j++] = 0.5*(xold[i]+xold[i+1]);
+      xnew[j++] = xold[i+1];
+      continue;
+    }
+  }
+
+  /* verify that new mesh is legal */
+  for (i=0; i<N_new-1; i++) {
+    if (xnew[i+1] <= xnew[i]) {
+      fprintf(stderr,"adapt_mesh error: illegal mesh created\n");
+      free(xnew);
+      return NULL;
+    }
+  }
+
+  free(marks);              /* Delete marking array */
+  return xnew;              /* Return with success */
+}
+
+
+/* Projects one vector onto another:
+      Nold [input] -- the size of the old mesh
+      xold [input] -- the old mesh
+      yold [input] -- the vector defined over the old mesh
+      Nnew [input] -- the size of the new mesh
+      xnew [input] -- the new mesh
+      ynew [output] -- the vector defined over the new mesh
+                       (allocated prior to calling project) */
+static int project(long int Nold, realtype *xold, N_Vector yold, 
+		   long int Nnew, realtype *xnew, N_Vector ynew)
+{
+  int iv, i, j;
+  realtype *Yold=NULL, *Ynew=NULL;
+
+  /* Access data arrays */
+  Yold = N_VGetArrayPointer(yold);    /* access data arrays */
+  if (check_flag((void *) Yold, "N_VGetArrayPointer", 0)) return 1;
+  Ynew = N_VGetArrayPointer(ynew);
+  if (check_flag((void *) Ynew, "N_VGetArrayPointer", 0)) return 1;
+
+  /* loop over new mesh, finding corresponding interval within old mesh, 
+     and perform piecewise linear interpolation from yold to ynew */
+  iv=0;
+  for (i=0; i<Nnew; i++) {
+    
+    /* find old interval, start with previous value since sorted */
+    for (j=iv; j<Nold-1; j++) {
+      if (xnew[i] >= xold[j] && xnew[i] <= xold[j+1]) {
+	iv = j;
+	break;
+      }
+      iv = Nold-1;     /* just in case it wasn't found above */
+    }
+
+    /* perform interpolation */ 
+    Ynew[i] = Yold[iv]*(xnew[i]-xold[iv+1])/(xold[iv]-xold[iv+1]) 
+            + Yold[iv+1]*(xnew[i]-xold[iv])/(xold[iv+1]-xold[iv]);
+  }
+
+  return 0;            /* Return with success */
+}
+
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_heat1D_adapt.out b/examples/arkode/C_serial/ark_heat1D_adapt.out
new file mode 100644
index 0000000..5deda13
--- /dev/null
+++ b/examples/arkode/C_serial/ark_heat1D_adapt.out
@@ -0,0 +1,107 @@
+
+1D adaptive Heat PDE test problem:
+  diffusion coefficient:  k = 0.5
+  initial N = 21
+  iout          dt_old                 dt_new               ||u||_rms       N   NNI  NLI
+ ----------------------------------------------------------------------------------------
+    0  0.000000000000000e+00  0.000000000000000e+00  0.000000000000000e+00  21    0    0
+    1  3.629021901461023e-12  7.505751048377368e-09  2.979166031186306e-12  21    5    5
+    2  7.505751048377368e-09  1.501150209675474e-07  6.164657920203414e-09  21   10    5
+    3  1.501150209675474e-07  3.002300419350948e-06  1.293969127876394e-07  21   10    9
+    4  3.002300419350948e-06  6.004600838701896e-05  2.593514282989167e-06  21   10   10
+    5  6.004600838701896e-05  2.854024143748609e-04  5.166758334585204e-05  21   10   19
+    6  2.854024143748609e-04  2.575205831761056e-04  2.798713300800731e-04  21   10   25
+    7  2.575205831761056e-04  4.094402057669300e-04  4.794364798148849e-04  21   10   24
+    8  4.094402057669300e-04  4.094402057669300e-04  7.863867077537864e-04  21   10   25
+    9  4.094402057669300e-04  6.523109871323949e-04  1.082800057988263e-03  21   10   25
+   10  6.523109871323949e-04  5.699145720577265e-04  1.606864160614628e-03  23   10   38
+   11  5.699145720577265e-04  1.008085270318922e-03  2.005677987304881e-03  23   10   32
+   12  1.008085270318922e-03  1.008085270318922e-03  2.683212443767887e-03  23   10   37
+   13  1.008085270318922e-03  8.454396857243886e-04  3.678750660517184e-03  25   10   37
+   14  8.454396857243886e-04  1.990629597547611e-03  4.265439688800132e-03  25   10   30
+   15  1.990629597547611e-03  1.990629597547611e-03  5.575407085415051e-03  25   10   39
+   16  1.990629597547611e-03  3.607197488602903e-03  6.798927523968801e-03  25   10   30
+   17  4.981039682699363e-04  4.981039682699363e-04  6.927552935378208e-03  27   30  156
+   18  4.981039682699363e-04  4.981039682699363e-04  7.442138500375902e-03  29   10   25
+   19  4.981039682699363e-04  1.668573980211983e-03  7.723152304280749e-03  29   10   24
+   20  1.668573980211983e-03  3.654706558768539e-03  8.637924517668507e-03  29   10   37
+   21  3.654706558768539e-03  7.224979051078588e-03  1.050599896879328e-02  29   10   49
+   22  2.276551141355698e-04  2.276551141355698e-04  1.033397994768772e-02  32   40  256
+   23  2.276551141355698e-04  4.413353554788115e-04  1.092338188288813e-02  34   10   20
+   24  4.413353554788115e-04  1.019444046442095e-03  1.113522375604393e-02  34   10   24
+   25  1.019444046442095e-03  1.019444046442095e-03  1.161555502336150e-02  34   10   35
+   26  1.019444046442095e-03  3.726408116521474e-03  1.208389269353381e-02  34   10   29
+   27  3.726408116521474e-03  3.726408116521474e-03  1.369916870976818e-02  34   10   59
+   28  3.726408116521474e-03  1.017517861007844e-02  1.517662504289777e-02  34   10   55
+   29  1.350491936829535e-03  1.350491936829535e-03  1.559233522680444e-02  36   30  212
+   30  1.350491936829535e-03  3.706502672803281e-03  1.608657213958387e-02  36   10   25
+   31  2.814808489615957e-03  2.814808489615957e-03  1.706503329381448e-02  38   20  119
+   32  6.183994739341915e-04  6.183994739341915e-04  1.691544997123700e-02  40   30  223
+   33  6.183994739341915e-04  1.092896364473831e-03  1.711576767264562e-02  40   10   34
+   34  1.092896364473831e-03  3.025071844878339e-03  1.746342433106013e-02  40   10   43
+   35  3.025071844878339e-03  7.404939993948745e-03  1.838448885341201e-02  40   10   79
+   36  7.404939993948745e-03  1.389603706836776e-02  2.040556371949357e-02  40   10  139
+   37  6.710477939748602e-04  6.710477939748602e-04  1.988129068907885e-02  44   40  647
+   38  6.710477939748602e-04  1.028024256319047e-03  1.965202427908446e-02  46   10   36
+   39  1.028024256319047e-03  2.833952015856033e-03  1.989188365758057e-02  46   10   37
+   40  2.833952015856033e-03  4.952800324532025e-03  2.052762374827459e-02  46   10   66
+   41  4.952800324532025e-03  8.714201527775771e-03  2.155483443164250e-02  46   10  105
+   42  8.714201527775771e-03  1.720615368906233e-02  2.313292126778931e-02  46   10  167
+   43  3.805803440168311e-03  3.805803440168311e-03  2.360451299933607e-02  48   30  689
+   44  8.023837169729728e-04  8.023837169729728e-04  2.346209634272231e-02  50   30  314
+   45  8.023837169729728e-04  1.503536834976284e-03  2.358170211412561e-02  50   10   55
+   46  1.503536834976284e-03  4.513095256928524e-03  2.380061610322121e-02  50   10   59
+   47  3.495461232776950e-03  3.495461232776950e-03  2.428544643707820e-02  50   20  227
+   48  3.495461232776950e-03  1.098574695245117e-02  2.473894746889214e-02  50   10   75
+   49  1.098574695245117e-02  1.818917139221294e-02  2.598434629024265e-02  50   10  172
+   50  1.818917139221294e-02  2.767038680802522e-02  2.756281122436279e-02  50   10  283
+   51  6.917596702006305e-03  6.917596702006305e-03  2.913159038624379e-02  54   15  479
+   52  6.917596702006305e-03  1.065864858639081e-02  2.956607928921659e-02  54   10  134
+   53  1.065864858639081e-02  1.729721723319153e-02  2.981861064666339e-02  56   10  230
+   54  1.729721723319153e-02  2.878451485340029e-02  3.010100614649229e-02  58   10  278
+   55  2.878451485340029e-02  2.878451485340029e-02  3.043378148315333e-02  60   10  334
+   56  7.196128713350072e-03  7.196128713350072e-03  3.058796042164046e-02  60   15  351
+   57  7.196128713350072e-03  1.269773298304222e-02  3.072680212128632e-02  60   10  103
+   58  1.269773298304222e-02  3.569678515456698e-02  3.093999932706822e-02  60   10  165
+   59  3.569678515456698e-02  5.811742143859773e-02  3.138094315135925e-02  60   10  330
+   60  1.452935535964943e-02  1.452935535964943e-02  3.151366976890378e-02  60   18  596
+   61  1.452935535964943e-02  3.911347912422928e-02  3.162764839842241e-02  60   10  145
+   62  3.911347912422928e-02  6.256393965526523e-02  3.186787605580501e-02  60   10  380
+   63  1.564098491381631e-02  1.564098491381631e-02  3.194430211081341e-02  60   12  335
+   64  1.564098491381631e-02  3.474495618112731e-02  3.201248645476758e-02  60   10  135
+   65  8.686239045281827e-03  8.686239045281827e-03  3.204730735551981e-02  60   11  424
+   66  8.686239045281827e-03  1.579835682746987e-02  3.208019059681224e-02  60   10  330
+   67  1.579835682746987e-02  2.864626865176246e-02  3.213558185506317e-02  60   10  224
+   68  2.864626865176246e-02  4.778509342320859e-02  3.222364307660728e-02  60   10  316
+   69  1.194627335580215e-02  1.194627335580215e-02  3.225635676188716e-02  60   21  750
+   70  1.194627335580215e-02  3.465947907026466e-02  3.228701697329782e-02  60   10  162
+   71  3.465947907026466e-02  7.907534915954270e-02  3.236578972146440e-02  60   10  296
+   72  1.976883728988568e-02  1.976883728988568e-02  3.240484236283207e-02  60   12  424
+   73  1.976883728988568e-02  4.238773098868815e-02  3.244021773389890e-02  60   10  267
+   74  4.238773098868815e-02  4.238773098868815e-02  3.250539064364061e-02  60   10  374
+   75  4.238773098868815e-02  4.238773098868815e-02  3.255839583346429e-02  60   10  365
+   76  1.059693274717204e-02  1.059693274717204e-02  3.257003190199415e-02  60   23  675
+   77  1.059693274717204e-02  3.374224101621920e-02  3.258108845266754e-02  60   10  119
+   78  3.374224101621920e-02  7.028500459469654e-02  3.261274207384274e-02  60   14  539
+   79  1.757125114867414e-02  1.757125114867414e-02  3.262729018183993e-02  60   12  317
+   80  1.757125114867414e-02  3.430166354319600e-02  3.264065556631886e-02  60   10  186
+   81  3.430166354319600e-02  5.964635069535813e-02  3.266369564112172e-02  60   10  300
+   82  1.491158767383953e-02  1.491158767383953e-02  3.267257507399515e-02  60   12  303
+   83  1.491158767383953e-02  4.151059356915939e-02  3.268083759515131e-02  60   10  134
+   84  1.037764839228985e-02  1.037764839228985e-02  3.268624676047530e-02  60   23  767
+   85  1.037764839228985e-02  2.337923819490379e-02  3.269138828929134e-02  60   10  214
+   86  2.337923819490379e-02  5.584751455212315e-02  3.270207501116806e-02  60   10  224
+   87  1.396187863803079e-02  1.396187863803079e-02  3.270790060704231e-02  60   12  243
+   88  1.396187863803079e-02  4.841828824573841e-02  3.271334794042778e-02  60   10  155
+   89  4.841828824573841e-02  7.963760672802837e-02  3.272963100640804e-02  60   10  324
+   90  1.990940168200709e-02  1.990940168200709e-02  3.273528876716780e-02  60   12  441
+   91  1.990940168200709e-02  3.127117602453464e-02  3.274045071854639e-02  60   10  212
+   92  3.127117602453464e-02  5.250130431989954e-02  3.274757629125738e-02  60   10  408
+   93  5.250130431989954e-02  1.730734444761127e-02  3.275738955577872e-02  60   10  401
+   94  1.730734444761127e-02  1.730734444761127e-02  3.276011960220934e-02  60   10  134
+ ----------------------------------------------------------------------------------------
+ Final solver statistics:
+   Total number of time steps = 94
+   Total nonlinear iterations = 1187
+   Total linear iterations    = 18988
+
diff --git a/examples/arkode/C_serial/ark_robertson.c b/examples/arkode/C_serial/ark_robertson.c
new file mode 100644
index 0000000..f6b9bfd
--- /dev/null
+++ b/examples/arkode/C_serial/ark_robertson.c
@@ -0,0 +1,280 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates the Robertson problem, 
+ * corresponding to the kinetics of an autocatalytic reaction.  
+ * This is an ODE system with 3 components, Y = [u,v,w], satisfying
+ * the equations,
+ *    du/dt = -0.04*u + 1e4*v*w
+ *    dv/dt = 0.04*u - 1e4*v*w - 3e7*v^2
+ *    dw/dt = 3e7*v^2
+ * for t in the interval [0.0, 1e11], with initial conditions 
+ * Y0 = [1,0,0]. 
+ * 
+ * This program solves the problem with one of the solvers, ERK, 
+ * DIRK or ARK.  For DIRK and ARK, implicit subsystems are solved 
+ * using a Newton iteration with the ARKDENSE dense linear solver, 
+ * and a user-supplied Jacobian routine.
+ *
+ * 100 outputs are printed at equal intervals, and run statistics 
+ * are printed at the end.
+ *---------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKode fcts., consts. */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fcts., macros */
+#include <arkode/arkode_dense.h>      /* prototype for ARKDense solver */
+#include <sundials/sundials_dense.h>  /* defs. of DlsMat and DENSE_ELEM */
+#include <sundials/sundials_types.h>  /* def. of type 'realtype' */
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main Program */
+int main()
+{
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);     /* initial time */
+  realtype Tf = RCONST(1.e11);   /* final time */
+  realtype dTout = (Tf-T0)/100;  /* time between outputs */
+  int Nt = ceil(Tf/dTout);       /* number of output times */
+  long int NEQ = 3;              /* number of dependent vars. */
+
+  /* general problem variables */
+  int flag;                      /* reusable error-checking flag */
+  N_Vector y = NULL;             /* empty vector for storing solution */
+  void *arkode_mem = NULL;       /* empty ARKode memory structure */
+  FILE *UFID;
+  realtype t, tout;
+  int iout;
+  long int nst, nst_a, nfe, nfi, nsetups, nje, nfeLS, nni, ncfn, netf;
+
+  /* set up the initial conditions, tolerances, initial time step size */
+  realtype u0 = RCONST(1.0);
+  realtype v0 = RCONST(0.0);
+  realtype w0 = RCONST(0.0);
+  realtype reltol = 1.e-4;
+  realtype abstol = 1.e-11;
+  realtype h0 = 1.e-4 * reltol;
+
+  /* Initial problem output */
+  printf("\nRobertson ODE test problem:\n");
+  printf("    initial conditions:  u0 = %g,  v0 = %g,  w0 = %g\n",u0,v0,w0);
+
+  /* Initialize data structures */
+  y = N_VNew_Serial(NEQ);         /* Create serial vector for solution */
+  if (check_flag((void *) y, "N_VNew_Serial", 0)) return 1;
+  NV_Ith_S(y,0) = u0;             /* Set initial conditions into y */
+  NV_Ith_S(y,1) = v0;
+  NV_Ith_S(y,2) = w0;
+  arkode_mem = ARKodeCreate();    /* Create the solver memory */
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set routines */
+  flag = ARKodeSetInitStep(arkode_mem, h0);                /* Set custom initial step */
+  if (check_flag(&flag, "ARKodeSetInitStep", 1)) return 1;
+  flag = ARKodeSetMaxErrTestFails(arkode_mem, 20);         /* Increase max error test fails */
+  if (check_flag(&flag, "ARKodeSetMaxErrTestFails", 1)) return 1;
+  flag = ARKodeSetMaxNonlinIters(arkode_mem, 8);           /* Increase max nonlin iters  */
+  if (check_flag(&flag, "ARKodeSetMaxNonlinIters", 1)) return 1;
+  flag = ARKodeSetNonlinConvCoef(arkode_mem, 1.e-7);       /* set nonlinear convergence coeff. */
+  if (check_flag(&flag, "ARKodeSetNonlinConvCoef", 1)) return 1;
+  flag = ARKodeSetMaxNumSteps(arkode_mem, 100000);         /* Increase max num steps */
+  if (check_flag(&flag, "ARKodeSetMaxNumSteps", 1)) return 1;
+  flag = ARKodeSetPredictorMethod(arkode_mem, 1);         /* Specify maximum-order predictor */
+  if (check_flag(&flag, "ARKodeSetPredictorMethod", 1)) return 1;
+  flag = ARKodeSStolerances(arkode_mem, reltol, abstol);   /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  /* Linear solver specification */
+  flag = ARKDense(arkode_mem, NEQ);                        /* Specify dense linear solver */
+  if (check_flag(&flag, "ARKDense", 1)) return 1;
+  flag = ARKDlsSetDenseJacFn(arkode_mem, Jac);             /* Set the Jacobian routine */
+  if (check_flag(&flag, "ARKDlsSetDenseJacFn", 1)) return 1;
+
+  /* Open output stream for results, output comment line */
+  UFID = fopen("solution.txt","w");
+  fprintf(UFID,"# t u v w\n");
+
+  /* output initial condition to disk */
+  fprintf(UFID," %.16e %.16e %.16e %.16e\n", 
+	  T0, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));  
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t = T0;
+  tout = T0+dTout;
+  printf("        t           u           v           w\n");
+  printf("   --------------------------------------------------\n");
+  printf("  %10.3e  %12.5e  %12.5e  %12.5e\n",
+      t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));
+  for (iout=0; iout<Nt; iout++) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);       /* call integrator */
+    if (check_flag(&flag, "ARKode", 1)) break;
+    printf("  %10.3e  %12.5e  %12.5e  %12.5e\n",              /* access/print solution */
+        t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));
+    fprintf(UFID," %.16e %.16e %.16e %.16e\n", 
+	    t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));  
+    if (flag >= 0) {                                          /* successful solve: update time */
+      tout += dTout;
+      tout = (tout > Tf) ? Tf : tout;
+    } else {                                                  /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+  }
+  printf("   --------------------------------------------------\n");
+  fclose(UFID);
+
+  /* Print some final statistics */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+  flag = ARKDlsGetNumJacEvals(arkode_mem, &nje);
+  check_flag(&flag, "ARKDlsGetNumJacEvals", 1);
+  flag = ARKDlsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", 
+	 nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total linear solver setups = %li\n", nsetups);
+  printf("   Total RHS evals for setting up the linear system = %li\n", nfeLS);
+  printf("   Total number of Jacobian evaluations = %li\n", nje);
+  printf("   Total number of Newton iterations = %li\n", nni);
+  printf("   Total number of nonlinear solver convergence failures = %li\n", ncfn);
+  printf("   Total number of error test failures = %li\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy_Serial(y);        /* Free y vector */
+  ARKodeFree(&arkode_mem);     /* Free integrator memory */
+  return 0;
+}
+
+/*-------------------------------
+ * Functions called by the solver
+ *-------------------------------*/
+
+/* f routine to compute the ODE RHS function f(t,y). */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype u = NV_Ith_S(y,0);   /* access current solution */
+  realtype v = NV_Ith_S(y,1);
+  realtype w = NV_Ith_S(y,2);
+
+  /* Fill in ODE RHS function */
+  NV_Ith_S(ydot,0) = -0.04*u + 1.e4*v*w;
+  NV_Ith_S(ydot,1) = 0.04*u - 1.e4*v*w - 3.e7*v*v;
+  NV_Ith_S(ydot,2) = 3.e7*v*v;
+
+  return 0;                     /* Return with success */
+}
+
+/* Jacobian routine to compute J(t,y) = df/dy. */
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype v = NV_Ith_S(y,1);   /* access current solution */
+  realtype w = NV_Ith_S(y,2);
+  SetToZero(J);                 /* initialize Jacobian to zero */
+
+  /* Fill in the Jacobian of the ODE RHS function */
+  DENSE_ELEM(J,0,0) = -0.04;
+  DENSE_ELEM(J,0,1) = 1.e4*w;
+  DENSE_ELEM(J,0,2) = 1.e4*v;
+
+  DENSE_ELEM(J,1,0) = 0.04;
+  DENSE_ELEM(J,1,1) = -1.e4*w - 6.e7*v;
+  DENSE_ELEM(J,1,2) = -1.e4*v;
+
+  DENSE_ELEM(J,2,1) = 6.e7*v;
+
+  return 0;                     /* Return with success */
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_robertson.out b/examples/arkode/C_serial/ark_robertson.out
new file mode 100644
index 0000000..d692a76
--- /dev/null
+++ b/examples/arkode/C_serial/ark_robertson.out
@@ -0,0 +1,117 @@
+
+Robertson ODE test problem:
+    initial conditions:  u0 = 1,  v0 = 0,  w0 = 0
+        t           u           v           w
+   --------------------------------------------------
+   0.000e+00   1.00000e+00   0.00000e+00   0.00000e+00
+   1.000e+09   2.08323e-06   8.32676e-12   9.99998e-01
+   2.000e+09   1.04164e-06   4.15999e-12   9.99999e-01
+   3.000e+09   6.94429e-07   2.79925e-12   9.99999e-01
+   4.000e+09   5.20819e-07   2.04568e-12   9.99999e-01
+   5.000e+09   4.16663e-07   1.67589e-12   1.00000e+00
+   6.000e+09   3.47216e-07   1.38088e-12   1.00000e+00
+   7.000e+09   2.97619e-07   1.18461e-12   1.00000e+00
+   8.000e+09   2.60418e-07   1.04042e-12   1.00000e+00
+   9.000e+09   2.31479e-07   9.43288e-13   1.00000e+00
+   1.000e+10   2.08331e-07   8.24029e-13   1.00000e+00
+   1.100e+10   1.89394e-07   7.46758e-13   1.00000e+00
+   1.200e+10   1.73612e-07   6.94891e-13   1.00000e+00
+   1.300e+10   1.60252e-07   6.49283e-13   1.00000e+00
+   1.400e+10   1.48811e-07   5.94089e-13   1.00000e+00
+   1.500e+10   1.38887e-07   5.70262e-13   1.00000e+00
+   1.600e+10   1.30210e-07   5.16806e-13   1.00000e+00
+   1.700e+10   1.22545e-07   4.58568e-13   1.00000e+00
+   1.800e+10   1.15737e-07   4.57110e-13   1.00000e+00
+   1.900e+10   1.09651e-07   4.40546e-13   1.00000e+00
+   2.000e+10   1.04166e-07   4.14493e-13   1.00000e+00
+   2.100e+10   9.92052e-08   4.09664e-13   1.00000e+00
+   2.200e+10   9.46983e-08   3.82358e-13   1.00000e+00
+   2.300e+10   9.05799e-08   3.43987e-13   1.00000e+00
+   2.400e+10   8.68055e-08   3.36094e-13   1.00000e+00
+   2.500e+10   8.33345e-08   3.33250e-13   1.00000e+00
+   2.600e+10   8.01278e-08   3.24553e-13   1.00000e+00
+   2.700e+10   7.71580e-08   3.20079e-13   1.00000e+00
+   2.800e+10   7.44026e-08   3.13812e-13   1.00000e+00
+   2.900e+10   7.18392e-08   2.99428e-13   1.00000e+00
+   3.000e+10   6.94455e-08   2.71839e-13   1.00000e+00
+   3.100e+10   6.72043e-08   2.51612e-13   1.00000e+00
+   3.200e+10   6.51035e-08   2.43819e-13   1.00000e+00
+   3.300e+10   6.31312e-08   2.42722e-13   1.00000e+00
+   3.400e+10   6.12754e-08   2.42584e-13   1.00000e+00
+   3.500e+10   5.95243e-08   2.38297e-13   1.00000e+00
+   3.600e+10   5.78691e-08   2.29877e-13   1.00000e+00
+   3.700e+10   5.63035e-08   2.19436e-13   1.00000e+00
+   3.800e+10   5.48213e-08   2.09053e-13   1.00000e+00
+   3.900e+10   5.34164e-08   2.00809e-13   1.00000e+00
+   4.000e+10   5.20827e-08   1.96786e-13   1.00000e+00
+   4.100e+10   5.08138e-08   1.99063e-13   1.00000e+00
+   4.200e+10   4.96040e-08   2.07948e-13   1.00000e+00
+   4.300e+10   4.84497e-08   2.15392e-13   1.00000e+00
+   4.400e+10   4.73479e-08   2.19410e-13   1.00000e+00
+   4.500e+10   4.62954e-08   2.19156e-13   1.00000e+00
+   4.600e+10   4.52893e-08   2.13788e-13   1.00000e+00
+   4.700e+10   4.43263e-08   2.02463e-13   1.00000e+00
+   4.800e+10   4.34035e-08   1.84338e-13   1.00000e+00
+   4.900e+10   4.25178e-08   1.60111e-13   1.00000e+00
+   5.000e+10   4.16666e-08   1.40398e-13   1.00000e+00
+   5.100e+10   4.08485e-08   1.26720e-13   1.00000e+00
+   5.200e+10   4.00619e-08   1.18280e-13   1.00000e+00
+   5.300e+10   3.93053e-08   1.14277e-13   1.00000e+00
+   5.400e+10   3.85773e-08   1.13913e-13   1.00000e+00
+   5.500e+10   3.78762e-08   1.16387e-13   1.00000e+00
+   5.600e+10   3.72006e-08   1.20901e-13   1.00000e+00
+   5.700e+10   3.65490e-08   1.26656e-13   1.00000e+00
+   5.800e+10   3.59198e-08   1.32851e-13   1.00000e+00
+   5.900e+10   3.53116e-08   1.38688e-13   1.00000e+00
+   6.000e+10   3.47230e-08   1.43341e-13   1.00000e+00
+   6.100e+10   3.41534e-08   1.46349e-13   1.00000e+00
+   6.200e+10   3.36021e-08   1.47818e-13   1.00000e+00
+   6.300e+10   3.30683e-08   1.47881e-13   1.00000e+00
+   6.400e+10   3.25514e-08   1.46671e-13   1.00000e+00
+   6.500e+10   3.20506e-08   1.44318e-13   1.00000e+00
+   6.600e+10   3.15651e-08   1.40956e-13   1.00000e+00
+   6.700e+10   3.10943e-08   1.36717e-13   1.00000e+00
+   6.800e+10   3.06375e-08   1.31732e-13   1.00000e+00
+   6.900e+10   3.01938e-08   1.26134e-13   1.00000e+00
+   7.000e+10   2.97627e-08   1.20055e-13   1.00000e+00
+   7.100e+10   2.93434e-08   1.14310e-13   1.00000e+00
+   7.200e+10   2.89354e-08   1.09946e-13   1.00000e+00
+   7.300e+10   2.85384e-08   1.06807e-13   1.00000e+00
+   7.400e+10   2.81521e-08   1.04720e-13   1.00000e+00
+   7.500e+10   2.77761e-08   1.03511e-13   1.00000e+00
+   7.600e+10   2.74102e-08   1.03008e-13   1.00000e+00
+   7.700e+10   2.70539e-08   1.03038e-13   1.00000e+00
+   7.800e+10   2.67069e-08   1.03427e-13   1.00000e+00
+   7.900e+10   2.63689e-08   1.04003e-13   1.00000e+00
+   8.000e+10   2.60395e-08   1.04594e-13   1.00000e+00
+   8.100e+10   2.57184e-08   1.05025e-13   1.00000e+00
+   8.200e+10   2.54053e-08   1.05125e-13   1.00000e+00
+   8.300e+10   2.50998e-08   1.04721e-13   1.00000e+00
+   8.400e+10   2.48016e-08   1.03638e-13   1.00000e+00
+   8.500e+10   2.45103e-08   1.01705e-13   1.00000e+00
+   8.600e+10   2.42256e-08   9.87493e-14   1.00000e+00
+   8.700e+10   2.39471e-08   9.48747e-14   1.00000e+00
+   8.800e+10   2.36749e-08   9.21258e-14   1.00000e+00
+   8.900e+10   2.34087e-08   9.07554e-14   1.00000e+00
+   9.000e+10   2.31483e-08   9.05235e-14   1.00000e+00
+   9.100e+10   2.28937e-08   9.11904e-14   1.00000e+00
+   9.200e+10   2.26446e-08   9.25164e-14   1.00000e+00
+   9.300e+10   2.24010e-08   9.42617e-14   1.00000e+00
+   9.400e+10   2.21626e-08   9.61864e-14   1.00000e+00
+   9.500e+10   2.19293e-08   9.80510e-14   1.00000e+00
+   9.600e+10   2.17009e-08   9.96155e-14   1.00000e+00
+   9.700e+10   2.14773e-08   1.00640e-13   1.00000e+00
+   9.800e+10   2.12583e-08   1.00885e-13   1.00000e+00
+   9.900e+10   2.10438e-08   1.00111e-13   1.00000e+00
+   1.000e+11   2.08336e-08   9.80782e-14   1.00000e+00
+   --------------------------------------------------
+
+Final Solver Statistics:
+   Internal solver steps = 873 (attempted = 980)
+   Total RHS evals:  Fe = 0,  Fi = 28843
+   Total linear solver setups = 338
+   Total RHS evals for setting up the linear system = 0
+   Total number of Jacobian evaluations = 43
+   Total number of Newton iterations = 23942
+   Total number of nonlinear solver convergence failures = 0
+   Total number of error test failures = 107
diff --git a/examples/arkode/C_serial/ark_robertson_root.c b/examples/arkode/C_serial/ark_robertson_root.c
new file mode 100644
index 0000000..d3bce8a
--- /dev/null
+++ b/examples/arkode/C_serial/ark_robertson_root.c
@@ -0,0 +1,319 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following test simulates the Robertson problem, 
+ * corresponding to the kinetics of an autocatalytic reaction.  
+ * This is an ODE system with 3 components, Y = [u,v,w], satisfying
+ * the equations,
+ *    du/dt = -0.04*u + 1e4*v*w
+ *    dv/dt = 0.04*u - 1e4*v*w - 3e7*v^2
+ *    dw/dt = 3e7*v^2
+ * for t in the interval [0.0, 1e11], with initial conditions 
+ * Y0 = [1,0,0].
+ *
+ * While integrating the system, we use the rootfinding feature 
+ * to find the times at which either u=1e-4 or w=1e-2.
+ * 
+ * This program solves the problem with one of the solvers, ERK, 
+ * DIRK or ARK.  For DIRK and ARK, implicit subsystems are solved 
+ * using a Newton iteration with the ARKDENSE dense linear solver, 
+ * and a user-supplied Jacobian routine.
+ *
+ * 100 outputs are printed at equal intervals, and run statistics 
+ * are printed at the end.
+ *---------------------------------------------------------------*/
+
+/* Header files */
+#include <stdio.h>
+#include <math.h>
+#include <arkode/arkode.h>            /* prototypes for ARKode fcts., consts. */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fcts., macros */
+#include <arkode/arkode_dense.h>      /* prototype for ARKDense solver */
+#include <sundials/sundials_dense.h>  /* defs. of DlsMat and DENSE_ELEM */
+#include <sundials/sundials_types.h>  /* def. of type 'realtype' */
+
+/* User-supplied Functions Called by the Solver */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int g(realtype t, N_Vector y,
+          realtype *gout, void *user_data);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main Program */
+int main()
+{
+  /* general problem parameters */
+  realtype T0 = RCONST(0.0);     /* initial time */
+  realtype T1 = RCONST(0.4);     /* first output time */
+  realtype TMult = RCONST(10.0); /* output time multiplication factor */
+  int Nt = 12;                   /* total number of output times */
+  long int NEQ = 3;              /* number of dependent vars. */
+  realtype reltol;
+  int rootsfound[2];
+  long int nst, nst_a, nfe, nfi, nsetups;
+  long int nje, nfeLS, nni, ncfn, netf, nge;
+  int flag, rtflag;              /* reusable error-checking flags */
+  FILE *UFID;
+  realtype t, tout;
+  int iout;
+
+  /* general problem variables */
+  N_Vector y = NULL;             /* empty vector for storing solution */
+  N_Vector atols = NULL;         /* empty vector for absolute tolerances */
+  void *arkode_mem = NULL;       /* empty ARKode memory structure */
+
+  /* set up the initial conditions */
+  realtype u0 = RCONST(1.0);
+  realtype v0 = RCONST(0.0);
+  realtype w0 = RCONST(0.0);
+
+  /* Initial problem output */
+  printf("\nRobertson ODE test problem (with rootfinding):\n");
+  printf("    initial conditions:  u0 = %g,  v0 = %g,  w0 = %g\n",u0,v0,w0);
+
+  /* Initialize data structures */
+  y = N_VNew_Serial(NEQ);        /* Create serial vector for solution */
+  if (check_flag((void *) y, "N_VNew_Serial", 0)) return 1;
+  atols = N_VNew_Serial(NEQ);    /* Create serial vector absolute tolerances */
+  if (check_flag((void *) atols, "N_VNew_Serial", 0)) return 1;
+  NV_Ith_S(y,0) = u0;            /* Set initial conditions into y */
+  NV_Ith_S(y,1) = v0;
+  NV_Ith_S(y,2) = w0;
+  arkode_mem = ARKodeCreate();   /* Create the solver memory */
+  if (check_flag((void *)arkode_mem, "ARKodeCreate", 0)) return 1;
+
+  /* Call ARKodeInit to initialize the integrator memory and specify the
+     right-hand side function in y'=f(t,y), the inital time T0, and
+     the initial dependent variable vector y.  Note: since this
+     problem is fully implicit, we set f_E to NULL and f_I to f. */
+  flag = ARKodeInit(arkode_mem, NULL, f, T0, y);
+  if (check_flag(&flag, "ARKodeInit", 1)) return 1;
+
+  /* Set tolerances */
+  reltol = RCONST(1.0e-4);
+  NV_Ith_S(atols,0) = RCONST(1.0e-8);
+  NV_Ith_S(atols,1) = RCONST(1.0e-11);
+  NV_Ith_S(atols,2) = RCONST(1.0e-8);
+
+  /* Set routines */
+  flag = ARKodeSetMaxErrTestFails(arkode_mem, 20);        /* Increase max error test fails */
+  if (check_flag(&flag, "ARKodeSetMaxErrTestFails", 1)) return 1;
+  flag = ARKodeSetMaxNonlinIters(arkode_mem, 8);          /* Increase max nonlinear iterations  */
+  if (check_flag(&flag, "ARKodeSetMaxNonlinIters", 1)) return 1;
+  flag = ARKodeSetNonlinConvCoef(arkode_mem, 1.e-7);      /* Update nonlinear solver convergence coeff. */
+  if (check_flag(&flag, "ARKodeSetNonlinConvCoef", 1)) return 1;
+  flag = ARKodeSetMaxNumSteps(arkode_mem, 100000);        /* Increase max number of steps */
+  if (check_flag(&flag, "ARKodeSetMaxNumSteps", 1)) return 1;
+  flag = ARKodeSetPredictorMethod(arkode_mem, 1);         /* Specify maximum-order predictor */
+  if (check_flag(&flag, "ARKodeSetPredictorMethod", 1)) return 1;
+  flag = ARKodeSVtolerances(arkode_mem, reltol, atols);   /* Specify tolerances */
+  if (check_flag(&flag, "ARKodeSStolerances", 1)) return 1;
+
+  /* Specify the root-finding function, having 2 equations */
+  flag = ARKodeRootInit(arkode_mem, 2, g);
+  if (check_flag(&flag, "ARKodeRootInit", 1)) return 1;
+
+  /* Linear solver specification */
+  flag = ARKDense(arkode_mem, NEQ);                /* Specify dense linear solver */
+  if (check_flag(&flag, "ARKDense", 1)) return 1;
+  flag = ARKDlsSetDenseJacFn(arkode_mem, Jac);     /* Set the Jacobian routine */
+  if (check_flag(&flag, "ARKDlsSetDenseJacFn", 1)) return 1;
+
+  /* Open output stream for results, output comment line */
+  UFID = fopen("solution.txt","w");
+  fprintf(UFID,"# t u v w\n");
+
+  /* output initial condition to disk */
+  fprintf(UFID," %.16e %.16e %.16e %.16e\n", 
+	  T0, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));  
+
+  /* Main time-stepping loop: calls ARKode to perform the integration, then
+     prints results.  Stops when the final time has been reached */
+  t = T0;
+  printf("        t             u             v             w\n");
+  printf("   -----------------------------------------------------\n");
+  printf("  %12.5e  %12.5e  %12.5e  %12.5e\n",
+      t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));
+  tout = T1;
+  iout = 0;
+  while(1) {
+
+    flag = ARKode(arkode_mem, tout, y, &t, ARK_NORMAL);     /* call integrator */
+    if (check_flag(&flag, "ARKode", 1)) break;
+    printf("  %12.5e  %12.5e  %12.5e  %12.5e\n",  t,        /* access/print solution */
+        NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));
+    fprintf(UFID," %.16e %.16e %.16e %.16e\n", 
+	    t, NV_Ith_S(y,0), NV_Ith_S(y,1), NV_Ith_S(y,2));  
+    if (flag == ARK_ROOT_RETURN) {                          /* check if a root was found */
+      rtflag = ARKodeGetRootInfo(arkode_mem, rootsfound);
+      if (check_flag(&rtflag, "ARKodeGetRootInfo", 1)) return 1;
+      printf("      rootsfound[] = %3d %3d\n",
+          rootsfound[0], rootsfound[1]);
+    }
+    if (flag >= 0) {                                        /* successful solve: update output time */
+      iout++;
+      tout *= TMult;
+    } else {                                                /* unsuccessful solve: break */
+      fprintf(stderr,"Solver failure, stopping integration\n");
+      break;
+    }
+    if (iout == Nt) break;                                  /* stop after enough outputs */
+  }
+  printf("   -----------------------------------------------------\n");
+  fclose(UFID);
+
+  /* Print some final statistics */
+  flag = ARKodeGetNumSteps(arkode_mem, &nst);
+  check_flag(&flag, "ARKodeGetNumSteps", 1);
+  flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a);
+  check_flag(&flag, "ARKodeGetNumStepAttempts", 1);
+  flag = ARKodeGetNumRhsEvals(arkode_mem, &nfe, &nfi);
+  check_flag(&flag, "ARKodeGetNumRhsEvals", 1);
+  flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups);
+  check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1);
+  flag = ARKodeGetNumErrTestFails(arkode_mem, &netf);
+  check_flag(&flag, "ARKodeGetNumErrTestFails", 1);
+  flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1);
+  flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn);
+  check_flag(&flag, "ARKodeGetNumNonlinSolvConvFails", 1);
+  flag = ARKDlsGetNumJacEvals(arkode_mem, &nje);
+  check_flag(&flag, "ARKDlsGetNumJacEvals", 1);
+  flag = ARKDlsGetNumRhsEvals(arkode_mem, &nfeLS);
+  check_flag(&flag, "ARKDlsGetNumRhsEvals", 1);
+  flag = ARKodeGetNumGEvals(arkode_mem, &nge);
+  check_flag(&flag, "ARKodeGetNumGEvals", 1);
+
+  printf("\nFinal Solver Statistics:\n");
+  printf("   Internal solver steps = %li (attempted = %li)\n", 
+	 nst, nst_a);
+  printf("   Total RHS evals:  Fe = %li,  Fi = %li\n", nfe, nfi);
+  printf("   Total linear solver setups = %li\n", nsetups);
+  printf("   Total RHS evals for setting up the linear system = %li\n", nfeLS);
+  printf("   Total number of Jacobian evaluations = %li\n", nje);
+  printf("   Total number of Newton iterations = %li\n", nni);
+  printf("   Total root-function g evals = %li\n", nge);
+  printf("   Total number of nonlinear solver convergence failures = %li\n", ncfn);
+  printf("   Total number of error test failures = %li\n", netf);
+
+  /* Clean up and return with successful completion */
+  N_VDestroy_Serial(y);        /* Free y vector */
+  ARKodeFree(&arkode_mem);     /* Free integrator memory */
+  return 0;
+}
+
+/*-------------------------------
+ * Functions called by the solver
+ *-------------------------------*/
+
+/* f routine to compute the ODE RHS function f(t,y). */
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype u = NV_Ith_S(y,0);     /* access current solution */
+  realtype v = NV_Ith_S(y,1);
+  realtype w = NV_Ith_S(y,2);
+
+  /* Fill in the ODE RHS function */
+  NV_Ith_S(ydot,0) = -0.04*u + 1.e4*v*w;
+  NV_Ith_S(ydot,1) = 0.04*u - 1.e4*v*w - 3.e7*v*v;
+  NV_Ith_S(ydot,2) = 3.e7*v*v;
+
+  return 0;                      /* Return with success */
+}
+
+/* Jacobian routine to compute J(t,y) = df/dy. */
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype v = NV_Ith_S(y,1);    /* access current solution */
+  realtype w = NV_Ith_S(y,2);
+  SetToZero(J);                  /* initialize Jacobian to zero */
+
+  /* Fill in the Jacobian of the ODE RHS function */
+  DENSE_ELEM(J,0,0) = -0.04;
+  DENSE_ELEM(J,0,1) = 1.e4*w;
+  DENSE_ELEM(J,0,2) = 1.e4*v;
+
+  DENSE_ELEM(J,1,0) = 0.04;
+  DENSE_ELEM(J,1,1) = -1.e4*w - 6.e7*v;
+  DENSE_ELEM(J,1,2) = -1.e4*v;
+
+  DENSE_ELEM(J,2,1) = 6.e7*v;
+
+  return 0;                      /* Return with success */
+}
+
+/* g routine to compute the root-finding function g(t,y). */
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype u = NV_Ith_S(y,0);    /* access current solution */
+  realtype w = NV_Ith_S(y,2);
+
+  gout[0] = u - RCONST(0.0001);  /* check for u == 1e-4 */
+  gout[1] = w - RCONST(0.01);    /* check for w == 1e-2 */
+
+  return 0;                      /* Return with success */
+}
+
+/*-------------------------------
+ * Private helper functions
+ *-------------------------------*/
+
+/* Check function return value...
+    opt == 0 means SUNDIALS function allocates memory so check if
+             returned NULL pointer
+    opt == 1 means SUNDIALS function returns a flag so check if
+             flag >= 0
+    opt == 2 means function allocates memory so check if returned
+             NULL pointer  
+*/
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return 1; }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return 1; }
+
+  return 0;
+}
+
+
+/*---- end of file ----*/
diff --git a/examples/arkode/C_serial/ark_robertson_root.out b/examples/arkode/C_serial/ark_robertson_root.out
new file mode 100644
index 0000000..81c4333
--- /dev/null
+++ b/examples/arkode/C_serial/ark_robertson_root.out
@@ -0,0 +1,32 @@
+
+Robertson ODE test problem (with rootfinding):
+    initial conditions:  u0 = 1,  v0 = 0,  w0 = 0
+        t             u             v             w
+   -----------------------------------------------------
+   0.00000e+00   1.00000e+00   0.00000e+00   0.00000e+00
+   2.64019e-01   9.89965e-01   3.47058e-05   1.00000e-02
+      rootsfound[] =   0   1
+   4.00000e+00   9.05519e-01   2.24048e-05   9.44589e-02
+   4.00000e+01   7.15827e-01   9.18557e-06   2.84164e-01
+   4.00000e+02   4.50519e-01   3.22289e-06   5.49478e-01
+   4.00000e+03   1.83202e-01   8.94239e-07   8.16797e-01
+   4.00000e+04   3.89834e-02   1.62177e-07   9.61016e-01
+   4.00000e+05   4.93828e-03   1.98557e-08   9.95062e-01
+   4.00000e+06   5.16807e-04   2.07133e-09   9.99483e-01
+   2.07957e+07   1.00000e-04   3.99831e-10   9.99900e-01
+      rootsfound[] =  -1   0
+   4.00000e+08   5.20791e-06   2.05800e-11   9.99995e-01
+   4.00000e+09   5.20859e-07   2.07683e-12   9.99999e-01
+   4.00000e+10   5.20842e-08   3.85950e-13   1.00000e+00
+   -----------------------------------------------------
+
+Final Solver Statistics:
+   Internal solver steps = 955 (attempted = 1157)
+   Total RHS evals:  Fe = 0,  Fi = 32555
+   Total linear solver setups = 534
+   Total RHS evals for setting up the linear system = 0
+   Total number of Jacobian evaluations = 68
+   Total number of Newton iterations = 26813
+   Total root-function g evals = 981
+   Total number of nonlinear solver convergence failures = 15
+   Total number of error test failures = 187
diff --git a/examples/arkode/C_serial/bruss_plots.m b/examples/arkode/C_serial/bruss_plots.m
new file mode 100644
index 0000000..66f235c
--- /dev/null
+++ b/examples/arkode/C_serial/bruss_plots.m
@@ -0,0 +1,75 @@
+% ----------------------------------------------------------------
+% Programmer(s): Daniel R. Reynolds @ SMU
+% ----------------------------------------------------------------
+% LLNS/SMU Copyright Start
+% Copyright (c) 2015, Southern Methodist University and 
+% Lawrence Livermore National Security
+%
+% This work was performed under the auspices of the U.S. Department 
+% of Energy by Southern Methodist University and Lawrence Livermore 
+% National Laboratory under Contract DE-AC52-07NA27344.
+% Produced at Southern Methodist University and the Lawrence 
+% Livermore National Laboratory.
+%
+% All rights reserved.
+% For details, see the LICENSE file.
+% LLNS/SMU Copyright End
+% Copyright (c) 2013, Southern Methodist University.
+% All rights reserved.
+% For details, see the LICENSE file.
+% ----------------------------------------------------------------
+% Matlab script to load/plot 1D brusselator results
+
+clear
+
+% load output files
+x = load('bruss_mesh.txt');
+u = load('bruss_u.txt');
+v = load('bruss_v.txt');
+w = load('bruss_w.txt');
+
+% check for compatible sizes
+Nx = length(x);
+[Nt_u,Nx_u] = size(u);
+[Nt_v,Nx_v] = size(v);
+[Nt_w,Nx_w] = size(w);
+if ((Nx ~= Nx_u) | (Nx ~= Nx_v) | (Nx ~= Nx_w))
+   fprintf('Error: incompatible spatial dimensions!\n');
+   fprintf('  Nx = %i,  Nx_u = %i,  Nx_v = %i,  Nx_w = %i\n',Nx,Nx_u,Nx_v,Nx_w);
+   error('Result files are incompatible, re-run simulation')
+end
+Nt = Nt_u;
+if ((Nt ~= Nt_v) | (Nt ~= Nt_w))
+   fprintf('Error: incompatible temporal dimensions!\n');
+   fprintf('  Nt_u = %i,  Nt_v = %i,  Nt_w = %i\n',Nt_u,Nt_v,Nt_w);
+   error('Result files are incompatible, re-run simulation')
+end
+
+% get bounding box size
+ymax = 1.1*max([max(max(u)), max(max(v)), max(max(w))]);
+ymin = 0.9*min([min(min(u)), min(min(v)), min(min(w))]);
+xmax = max(x);
+xmin = min(x);
+
+% plot time series for center of spatial domain
+figure()
+t = linspace(1,Nt,Nt);
+ix = floor(Nx/2);
+plot(t,u(:,ix),'b-',t,v(:,ix),'r--',t,w(:,ix),'k-.','LineWidth',1)
+legend('u','v','w')
+axis([1, Nt, ymin, ymax]);
+title('Time series of solutions at domain center')
+
+
+% loop over output times, plotting results and pausing between each
+figure()
+for it = 1:Nt
+   uvec = u(it,:)';
+   vvec = v(it,:)';
+   wvec = w(it,:)';
+   plot(x,uvec,'b-',x,vvec,'r--',x,wvec,'k-.','LineWidth',1)
+   legend('u','v','w')
+   axis([xmin, xmax, ymin, ymax]);
+   title(sprintf('Solutions, time step %i',it-1))
+   pause
+end
diff --git a/examples/arkode/C_serial/plot_brusselator1D.py b/examples/arkode/C_serial/plot_brusselator1D.py
new file mode 100755
index 0000000..bf65e8e
--- /dev/null
+++ b/examples/arkode/C_serial/plot_brusselator1D.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+# ----------------------------------------------------------------
+# Programmer(s): Daniel R. Reynolds @ SMU
+# ----------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ----------------------------------------------------------------
+# matplotlib-based plotting script for brusselator1D.c example
+
+# imports
+import sys
+import pylab as plt
+import numpy as np
+
+# load mesh data file
+mesh = np.loadtxt('bruss_mesh.txt', dtype=np.double)
+
+# load solution data files
+udata = np.loadtxt('bruss_u.txt', dtype=np.double)
+vdata = np.loadtxt('bruss_v.txt', dtype=np.double)
+wdata = np.loadtxt('bruss_w.txt', dtype=np.double)
+
+# determine number of time steps, mesh size
+nt,nx = np.shape(udata)
+
+# determine min/max values
+umin = 0.9*udata.min()
+umax = 1.1*udata.max()
+vmin = 0.9*vdata.min()
+vmax = 1.1*vdata.max()
+wmin = 0.9*wdata.min()
+wmax = 1.1*wdata.max()
+minval = np.array([umin, vmin, wmin]).min()
+maxval = np.array([umax, vmax, wmax]).max()
+
+# generate plots of results
+for tstep in range(nt):
+
+    # set string constants for output plots, current time, mesh size
+    pname = 'brusselator1D.' + repr(tstep).zfill(3) + '.png'
+    tstr  = repr(tstep)
+    nxstr = repr(nx)
+
+    # plot current solution and save to disk
+    plt.figure(1)
+    plt.plot(mesh,udata[tstep,:],label="u")
+    plt.plot(mesh,vdata[tstep,:],label="v")
+    plt.plot(mesh,wdata[tstep,:],label="w")
+    plt.xlabel('x')
+    plt.ylabel('solution')
+    plt.title('Solutions at output ' + tstr + ', mesh = ' + nxstr)
+    plt.axis((0.0, 1.0, minval, maxval))
+    plt.grid()
+    plt.legend(loc='upper right', shadow=True)
+    plt.savefig(pname)
+    plt.close()
+
+
+##### end of script #####
diff --git a/examples/arkode/C_serial/plot_brusselator1D_FEM.py b/examples/arkode/C_serial/plot_brusselator1D_FEM.py
new file mode 100755
index 0000000..47ad96e
--- /dev/null
+++ b/examples/arkode/C_serial/plot_brusselator1D_FEM.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+# ------------------------------------------------------------
+# Programmer(s):  Daniel R. Reynolds @ SMU
+# ------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ------------------------------------------------------------
+# matplotlib-based plotting script for brusselator1D.c example
+
+# imports
+import sys
+import pylab as plt
+import numpy as np
+
+# load mesh data file
+mesh = np.loadtxt('bruss_FEM_mesh.txt', dtype=np.double)
+
+# load solution data files
+udata = np.loadtxt('bruss_FEM_u.txt', dtype=np.double)
+vdata = np.loadtxt('bruss_FEM_v.txt', dtype=np.double)
+wdata = np.loadtxt('bruss_FEM_w.txt', dtype=np.double)
+
+# determine number of time steps, mesh size
+nt,nx = np.shape(udata)
+
+# determine min/max values
+umin = 0.9*udata.min()
+umax = 1.1*udata.max()
+vmin = 0.9*vdata.min()
+vmax = 1.1*vdata.max()
+wmin = 0.9*wdata.min()
+wmax = 1.1*wdata.max()
+minval = np.array([umin, vmin, wmin]).min()
+maxval = np.array([umax, vmax, wmax]).max()
+
+# plot the mesh
+plt.figure(1)
+plt.plot(mesh,0.0*mesh,'o')
+plt.xlabel('x')
+plt.title('FEM mesh')
+plt.savefig('brusselator1D_FEM_mesh.png')
+
+# generate plots of results
+for tstep in range(nt):
+
+    # set string constants for output plots, current time, mesh size
+    pname = 'brusselator1D_FEM.' + repr(tstep).zfill(3) + '.png'
+    tstr  = repr(tstep)
+    nxstr = repr(nx)
+
+    # plot current solution and save to disk
+    plt.figure(1)
+    plt.plot(mesh,udata[tstep,:],label="u")
+    plt.plot(mesh,vdata[tstep,:],label="v")
+    plt.plot(mesh,wdata[tstep,:],label="w")
+    plt.xlabel('x')
+    plt.ylabel('solution')
+    plt.title('Solutions at output ' + tstr + ', mesh = ' + nxstr)
+    plt.axis((0.0, 1.0, minval, maxval))
+    plt.grid()
+    plt.legend(loc='upper right', shadow=True)
+    plt.savefig(pname)
+    plt.close()
+
+
+##### end of script #####
diff --git a/examples/arkode/C_serial/plot_heat1D.py b/examples/arkode/C_serial/plot_heat1D.py
new file mode 100755
index 0000000..8fdba6c
--- /dev/null
+++ b/examples/arkode/C_serial/plot_heat1D.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+# ----------------------------------------------------------------
+# Programmer(s): Daniel R. Reynolds @ SMU
+# ----------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ----------------------------------------------------------------
+# matplotlib-based plotting script for heat1D.c example
+
+# imports
+import sys
+import pylab as plt
+import numpy as np
+
+# load mesh data file
+mesh = np.loadtxt('heat_mesh.txt', dtype=np.double)
+
+# load solution data file
+data = np.loadtxt('heat1D.txt', dtype=np.double)
+
+# determine number of time steps, mesh size
+nt,nx = np.shape(data)
+
+# determine maximum temperature
+maxtemp = 1.1*data.max()
+
+# generate plots of results
+for tstep in range(nt):
+
+    # set string constants for output plots, current time, mesh size
+    pname = 'heat1d.' + repr(tstep).zfill(3) + '.png'
+    tstr  = repr(tstep)
+    nxstr = repr(nx)
+
+    # plot current solution and save to disk
+    plt.figure(1)
+    plt.plot(mesh,data[tstep,:])
+    plt.xlabel('x')
+    plt.ylabel('solution')
+    plt.title('u(x) at output ' + tstr + ', mesh = ' + nxstr)
+    plt.axis((0.0, 1.0, 0.0, maxtemp))
+    plt.grid()
+    plt.savefig(pname)
+    plt.close()
+
+
+##### end of script #####
diff --git a/examples/arkode/C_serial/plot_heat1D_adapt.py b/examples/arkode/C_serial/plot_heat1D_adapt.py
new file mode 100755
index 0000000..f217ac2
--- /dev/null
+++ b/examples/arkode/C_serial/plot_heat1D_adapt.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+# ----------------------------------------------------------------
+# Programmer(s): Daniel R. Reynolds @ SMU
+# ----------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ----------------------------------------------------------------
+# matplotlib-based plotting script for heat1D.c example
+
+# imports
+import sys
+import pylab as plt
+import numpy as np
+
+# load mesh data file as list of NumPy arrays
+inp = open('heat_mesh.txt').readlines()
+mesh = []
+for line in inp:
+    mesh.append(np.array(str.split(line), dtype=np.double))
+
+
+# load solution data file as list of NumPy arrays
+inp = open('heat1D.txt').readlines()
+data = []
+for line in inp:
+    data.append(np.array(str.split(line), dtype=np.double))
+
+# determine number of time steps
+nt  = len(mesh)
+nt2 = len(data)
+if (nt != nt2):
+    sys.exit('plot_heat1D_adapt.py error: data and mesh files have different numbers of time steps')
+
+# determine minimum/maximum temperature
+mintemp = 0.0
+maxtemp = 0.0
+for tstep in range(nt):
+    mx = data[tstep].max()
+    if (mx > maxtemp):
+        maxtemp = mx
+    mn = data[tstep].min()
+    if (mn < mintemp):
+        mintemp = mn
+if (maxtemp > 0.0):
+    maxtemp *= 1.1
+else:
+    maxtemp *= 0.9
+if (mintemp > 0.0):
+    mintemp *= 0.9
+else:
+    mintemp *= 1.1
+
+
+# generate plots of results
+for tstep in range(nt):
+
+    # set string constants for output plots, current time, mesh size
+    pname = 'heat1d.' + repr(tstep).zfill(3) + '.png'
+    tstr  = repr(tstep)
+    nxstr = repr(len(data[tstep]))
+
+    # plot current solution and save to disk
+    plt.figure(1)
+    plt.plot(mesh[tstep],data[tstep],'-o')
+    plt.xlabel('x')
+    plt.ylabel('solution')
+    plt.title('u(x) at output ' + tstr + ', mesh = ' + nxstr)
+    plt.axis((0.0, 1.0, mintemp, maxtemp))
+    plt.grid()
+    plt.savefig(pname)
+    plt.close()
+
+
+##### end of script #####
diff --git a/examples/arkode/C_serial/plot_sol.py b/examples/arkode/C_serial/plot_sol.py
new file mode 100755
index 0000000..554881c
--- /dev/null
+++ b/examples/arkode/C_serial/plot_sol.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+# ----------------------------------------------------------------
+# Programmer(s): Daniel R. Reynolds @ SMU
+# ----------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ----------------------------------------------------------------
+# matplotlib-based plotting script for ODE examples
+
+# imports
+import sys
+import pylab as plt
+import numpy as np
+
+# load solution data file
+data = np.loadtxt('solution.txt', dtype=np.double)
+
+# determine number of time steps, number of fields
+nt,nv = np.shape(data)
+
+# extract time array
+times = data[:,0]
+
+# parse comment line to determine solution names
+f = open('solution.txt', 'r')
+commentline = f.readline()
+commentsplit = commentline.split()
+names = commentsplit[2:]
+
+# create plot
+plt.figure()
+
+# add curves to figure
+for i in range(nv-1):
+    plt.plot(times,data[:,i+1],label=names[i])
+plt.xlabel('t')
+if (nv > 2):
+    plt.ylabel('solutions')
+else:
+    plt.ylabel('solution')
+plt.legend(loc='upper right', shadow=True)
+plt.grid()
+plt.savefig('solution.png')
+
+
+
+
+##### end of script #####
diff --git a/examples/arkode/C_serial/plot_sol_log.py b/examples/arkode/C_serial/plot_sol_log.py
new file mode 100755
index 0000000..1fa4ad9
--- /dev/null
+++ b/examples/arkode/C_serial/plot_sol_log.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+# ----------------------------------------------------------------
+# Programmer(s): Daniel R. Reynolds @ SMU
+# ----------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ----------------------------------------------------------------
+# matplotlib-based plotting script for heat2D.cpp example
+
+# imports
+import sys
+import pylab as plt
+import numpy as np
+
+# load solution data file
+data = np.loadtxt('solution.txt', dtype=np.double)
+
+# determine number of time steps, number of fields
+nt,nv = np.shape(data)
+
+# extract time array
+times = data[:,0]
+
+# parse comment line to determine solution names
+f = open('solution.txt', 'r')
+commentline = f.readline()
+commentsplit = commentline.split()
+names = commentsplit[2:]
+
+# create plot
+plt.figure()
+
+# add curves to figure
+for i in range(nv-1):
+    plt.loglog(times,data[:,i+1],label=names[i])
+plt.xlabel('t')
+if (nv > 2):
+    plt.ylabel('solutions')
+else:
+    plt.ylabel('solution')
+plt.legend(loc='upper right', shadow=True)
+plt.grid()
+plt.savefig('solution.png')
+
+
+
+
+##### end of script #####
diff --git a/examples/arkode/F77_parallel/CMakeLists.txt b/examples/arkode/F77_parallel/CMakeLists.txt
new file mode 100644
index 0000000..5454a4f
--- /dev/null
+++ b/examples/arkode/F77_parallel/CMakeLists.txt
@@ -0,0 +1,154 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for the FARKODE parallel examples
+
+
+# Add variable FARKODE_examples with the names of the parallel ARKODE examples
+
+SET(FARKODE_examples
+  "fark_diag_non_p\;1\;4"
+  "fark_diag_kry_bbd_p\;1\;4"
+  )
+
+# Add variable ARKODE_extras with the names of auxiliary files to install
+
+SET(ARKODE_extras
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the Fortran compiler to the MPIF77 script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPIF77 )
+  # use MPI_MPIF77 as the compiler
+  SET(CMAKE_Fortran_COMPILER ${MPI_MPIF77})
+ELSE(MPI_MPIF77)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPIF77)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+  SET(FNVECP_LIB sundials_fnvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+  SET(FNVECP_LIB sundials_fnvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FARKODE_LIB sundials_farkode_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FARKODE_LIB} ${ARKODE_LIB} ${FNVECP_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each ARKODE example
+
+FOREACH(example_tuple ${FARKODE_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.f)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPIF77)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPIF77)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${FARKODE_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_parallel)
+
+  # Install the extra files
+  FOREACH(extrafile ${ARKODE_extras})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_parallel)
+  ENDFOREACH(extrafile ${ARKODE_extras})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "ARKODE")
+  SET(SOLVER_LIB "sundials_arkode")
+  SET(SOLVER_FLIB "sundials_farkode")
+  FOREACH(example_tuple ${FARKODE_examples})
+    list(GET example_tuple 0 example)
+    LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${FARKODE_examples})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/F77_parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/arkode/F77_parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/F77_parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/arkode/F77_parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_parallel 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/arkode/F77_parallel/README b/examples/arkode/F77_parallel/README
new file mode 100644
index 0000000..cfea683
--- /dev/null
+++ b/examples/arkode/F77_parallel/README
@@ -0,0 +1,50 @@
+List of parallel ARKode F77 examples
+
+  fark_diag_non_p     : diagonal ODE example - non-stiff case (ERK)
+  fark_diag_kry_bbd_p : diagonal ODE example - stiff case (DIRK/SPGMR/FARKBBD)
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/arkode/F77_parallel/fark_diag_kry_bbd_p.f b/examples/arkode/F77_parallel/fark_diag_kry_bbd_p.f
new file mode 100644
index 0000000..24c7a26
--- /dev/null
+++ b/examples/arkode/F77_parallel/fark_diag_kry_bbd_p.f
@@ -0,0 +1,358 @@
+C     ----------------------------------------------------------------
+C     Programmer(s): Daniel R. Reynolds @ SMU
+C     ----------------------------------------------------------------
+C     LLNS/SMU Copyright Start
+C     Copyright (c) 2015, Southern Methodist University and 
+C     Lawrence Livermore National Security
+C
+C     This work was performed under the auspices of the U.S. Department 
+C     of Energy by Southern Methodist University and Lawrence Livermore 
+C     National Laboratory under Contract DE-AC52-07NA27344.
+C     Produced at Southern Methodist University and the Lawrence 
+C     Livermore National Laboratory.
+C
+C     All rights reserved.
+C     For details, see the LICENSE file.
+C     LLNS/SMU Copyright End
+C     Copyright (c) 2013, Southern Methodist University.
+C     All rights reserved.
+C     For details, see the LICENSE file.
+C     ----------------------------------------------------------------
+C     Diagonal ODE example.  Stiff case, with diagonal preconditioner.
+C     Uses FARKODE interfaces and FARKBBD interfaces.
+C     Solves problem twice -- with left and right preconditioning.
+C     ----------------------------------------------------------------
+C     
+C     Include MPI-Fortran header file for MPI_COMM_WORLD, MPI types.
+      
+      IMPLICIT NONE
+C
+      INCLUDE "mpif.h"
+C
+      INTEGER*8 NLOCAL
+      PARAMETER (NLOCAL=10)   
+C
+      INTEGER*4 NOUT, MYPE, IER, NPES, METH, IATOL, ITASK, IPRE, IGS
+      INTEGER*4 LLENRW, LLENIW, LNST, LNST_ATT, LNFE, LNFI, LNSETUP
+      INTEGER*4 LNETF, LNNI, LNCF, LLENRWLS, LLENIWLS, LNPE, LNPS, LNLI
+      INTEGER*4 LNCFL, JOUT
+      INTEGER*8 NEQ, I, IPAR(3), IOUT(22), MUDQ, MLDQ, MU, ML, NST
+      INTEGER*8 NST_ATT, NFE, NFI, NPSET, NPE, NPS, NNI, NLI, NCFN, NCFL
+      INTEGER*8 NETF, LENRW, LENIW, LENRWLS, LENIWLS, LENRWBBD, LENIWBBD
+      INTEGER*8 NGEBBD
+      DOUBLE PRECISION Y(1024), ROUT(6), RPAR(1)
+      DOUBLE PRECISION ALPHA, TOUT, ERMAX, AVDIM
+      DOUBLE PRECISION ATOL, ERRI, RTOL, GERMAX, DTOUT, T
+C     
+      DATA ATOL/1.0D-10/, RTOL/1.0D-5/, DTOUT/0.1D0/, NOUT/10/
+      DATA LLENRW/1/, LLENIW/2/, LNST/3/, LNST_ATT/6/, LNFE/7/, LNFI/8/, 
+     1     LNSETUP/9/, LNETF/10/, LNNI/11/, LNCF/12/, LLENRWLS/14/, 
+     1     LLENIWLS/15/, LNPE/19/, LNPS/20/, LNLI/21/, LNCFL/22/
+C
+C     Get NPES and MYPE.  Requires initialization of MPI.
+      CALL MPI_INIT(IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,5) IER
+ 5       FORMAT(///' MPI_ERROR: MPI_INIT returned IER = ', I5)
+         STOP
+      ENDIF
+      CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NPES, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,6) IER
+ 6       FORMAT(///' MPI_ERROR: MPI_COMM_SIZE returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+      CALL MPI_COMM_RANK(MPI_COMM_WORLD, MYPE, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,7) IER
+ 7       FORMAT(///' MPI_ERROR: MPI_COMM_RANK returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF      
+C     
+C     Set input arguments.
+      NEQ = NPES * NLOCAL
+      T = 0.0D0
+      METH = 0
+      IATOL = 1
+      ITASK = 1
+      IPRE = 1
+      IGS = 1
+C     Set parameter alpha
+      ALPHA  = 10.0D0
+C
+C     Load IPAR and RPAR
+      IPAR(1) = NLOCAL
+      IPAR(2) = MYPE
+      IPAR(3) = NEQ
+      RPAR(1) = ALPHA
+C     
+      DO I = 1, NLOCAL
+         Y(I) = 1.0D0
+      ENDDO
+C     
+      IF (MYPE .EQ. 0) THEN
+         WRITE(6,15) NEQ, NLOCAL, ALPHA, RTOL, ATOL, NPES
+ 15      FORMAT('Diagonal test problem:'//
+     &        ' NEQ = ', I3, /
+     &        ' NLOCAL = ', I3, /
+     &        ' parameter alpha = ', F8.3/
+     &        ' ydot_i = -alpha*i * y_i (i = 1,...,NEQ)'/
+     &        ' RTOL, ATOL = ', 2E10.1/
+     &        ' Method is DIRK/NEWTON/SPGMR'/
+     &        ' Precond is band-block-diagonal, using ARKBBDPRE'
+     &        /' Number of processors = ', I3/)
+      ENDIF
+C     
+      CALL FNVINITP(MPI_COMM_WORLD, 4, NLOCAL, NEQ, IER)
+C     
+      IF (IER .NE. 0) THEN
+         WRITE(6,20) IER
+ 20      FORMAT(///' SUNDIALS_ERROR: FNVINITP returned IER = ', I5)
+         CALL MPI_FINALIZE(IER)
+         STOP
+      ENDIF
+C     
+      CALL FARKMALLOC(T, Y, METH, IATOL, RTOL, ATOL,
+     &                IOUT, ROUT, IPAR, RPAR, IER)
+C     
+      IF (IER .NE. 0) THEN
+         WRITE(6,30) IER
+ 30      FORMAT(///' SUNDIALS_ERROR: FARKMALLOC returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+      CALL FARKSPGMR(IPRE, IGS, 0, 0.0D0, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,36) IER
+ 36      FORMAT(///' SUNDIALS_ERROR: FARKSPGMR returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C     
+      MUDQ = 0
+      MLDQ = 0
+      MU = 0
+      ML = 0
+      CALL FARKBBDINIT(NLOCAL, MUDQ, MLDQ, MU, ML, 0.0D0, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,35) IER
+ 35      FORMAT(///' SUNDIALS_ERROR: FARKBBDINIT returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+      IF (MYPE .EQ. 0) WRITE(6,38)
+ 38   FORMAT(/'Preconditioning on left'/)
+C     
+C     Looping point for cases IPRE = 1 and 2.
+C     
+ 40   CONTINUE
+C     
+C     Loop through tout values, call solver, print output, test for failure.
+      TOUT = DTOUT
+      DO 60 JOUT = 1, NOUT
+C     
+         CALL FARKODE(TOUT, T, Y, ITASK, IER)
+C     
+         IF (MYPE .EQ. 0) WRITE(6,45) T, IOUT(LNST), IOUT(LNST_ATT), 
+     &        IOUT(LNFE), IOUT(LNFI)
+ 45      FORMAT(' t = ', E10.2, 5X, 'no. steps = ', I5, 
+     &        '   no. attempts = ', I5,'   no. fe-s = ', I5,
+     &        '   no. fi-s = ', I5)
+C     
+         IF (IER .NE. 0) THEN
+            WRITE(6,50) IER, IOUT(16)
+ 50         FORMAT(///' SUNDIALS_ERROR: FARKODE returned IER = ', I5, /,
+     &             '                 Linear Solver returned IER = ', I5)
+            CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+            STOP
+         ENDIF
+C     
+         TOUT = TOUT + DTOUT
+ 60   CONTINUE
+C     
+C     Get max. absolute error in the local vector.
+      ERMAX = 0.0D0
+      DO 65 I = 1, NLOCAL
+         ERRI  = Y(I) - EXP(-ALPHA * (MYPE * NLOCAL + I) * T)
+         ERMAX = MAX(ERMAX, ABS(ERRI))
+ 65   CONTINUE
+C     Get global max. error from MPI_REDUCE call.
+      CALL MPI_REDUCE(ERMAX, GERMAX, 1, MPI_DOUBLE_PRECISION, MPI_MAX,
+     &                0, MPI_COMM_WORLD, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,70) IER
+ 70      FORMAT(///' MPI_ERROR: MPI_REDUCE returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+      IF (MYPE .EQ. 0) WRITE(6,75) GERMAX
+ 75   FORMAT(/'Max. absolute error is', E10.2/)
+C     
+C     Print final statistics.
+      IF (MYPE .EQ. 0) THEN
+         NST = IOUT(LNST)
+         NST_ATT = IOUT(LNST_ATT)
+         NFE = IOUT(LNFE)
+         NFI = IOUT(LNFI)
+         NPSET = IOUT(LNSETUP)
+         NPE = IOUT(LNPE)
+         NPS = IOUT(LNPS)
+         NNI = IOUT(LNNI)
+         NLI = IOUT(LNLI)
+         AVDIM = DBLE(NLI) / DBLE(NNI)
+         NCFN = IOUT(LNCF)
+         NCFL = IOUT(LNCFL)
+         NETF = IOUT(LNETF)
+         LENRW = IOUT(LLENRW)
+         LENIW = IOUT(LLENIW)
+         LENRWLS = IOUT(LLENRWLS)
+         LENIWLS = IOUT(LLENIWLS)
+         WRITE(6,80) NST, NST_ATT, NFE, NFI, NPSET, NPE, NPS, NNI, NLI,
+     &        AVDIM, NCFN, NCFL, NETF, LENRW, LENIW, LENRWLS, LENIWLS
+ 80      FORMAT(/'Final statistics:'//
+     &          ' number of steps        = ', I5/
+     &          ' number of steps att.   = ', I5/
+     &          ' number of fe evals.    = ', I5/
+     &          ' number of fi evals.    = ', I5/
+     &          ' number of prec. setups = ', I5/
+     &          ' number of prec. evals. = ', I5/
+     &          ' number of prec. solves = ', I5/
+     &          ' number of nonl. iters. = ', I5/
+     &          ' number of lin. iters.  = ', I5/
+     &          ' average Krylov subspace dimension (NLI/NNI) = ',F8.4/
+     &          ' number of conv. failures.. nonlinear = ', I3,
+     &          '  linear = ', I3/
+     &          ' number of error test failures = ', I3/
+     &          ' main solver real/int workspace sizes   = ',2I5/
+     &          ' linear solver real/int workspace sizes = ',2I5)
+         CALL FARKBBDOPT(LENRWBBD, LENIWBBD, NGEBBD)
+         WRITE(6,82) LENRWBBD, LENIWBBD, NGEBBD
+ 82      FORMAT('In ARKBBDPRE:'/
+     &          ' real/int local workspace = ', 2I5/
+     &          ' number of g evals. = ', I5)
+      ENDIF
+C     
+C     If IPRE = 1, re-initialize T, Y, and the solver, and loop for
+C     case IPRE = 2.  Otherwise jump to final block.
+      IF (IPRE .EQ. 2) GO TO 99
+C
+      T = 0.0D0
+      DO I = 1, NLOCAL
+         Y(I) = 1.0D0
+      ENDDO         
+C
+      CALL FARKREINIT(T, Y, METH, IATOL, RTOL, ATOL, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,91) IER
+ 91      FORMAT(///' SUNDIALS_ERROR: FARKREINIT returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+      IPRE = 2
+C
+      CALL FARKBBDREINIT(NLOCAL, MUDQ, MLDQ, 0.0D0, IER) 
+      IF (IER .NE. 0) THEN
+         WRITE(6,92) IER
+ 92      FORMAT(///' SUNDIALS_ERROR: FARKBBDREINIT returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+      CALL FARKSPGMRREINIT(IPRE, IGS, 0.0D0, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,93) IER
+ 93      FORMAT(///' SUNDIALS_ERROR: FARKSPGMRREINIT returned IER =',I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+      IF (MYPE .EQ. 0) WRITE(6,95)
+ 95   FORMAT(//60('-')///'Preconditioning on right'/)
+      GO TO 40
+C     
+C     Free the memory and finalize MPI.
+ 99   CALL FARKFREE
+      CALL MPI_FINALIZE(IER)
+C     
+      STOP
+      END
+C
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FARKIFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function fi
+      IMPLICIT NONE
+C
+      INTEGER*8 IPAR(*)
+      INTEGER*4 IER
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+C
+      INTEGER*8 MYPE, I, NLOCAL
+      DOUBLE PRECISION ALPHA
+C     
+      NLOCAL = IPAR(1)
+      MYPE = IPAR(2)
+      ALPHA = RPAR(1)
+C
+      DO I = 1, NLOCAL
+         YDOT(I) = -ALPHA * (MYPE * NLOCAL + I) * Y(I)
+      ENDDO
+C     
+      IER = 0
+C
+      RETURN
+      END
+C
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FARKEFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function fe
+      IMPLICIT NONE
+C
+      INTEGER*8 IPAR(*)
+      INTEGER*4 IER
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+C
+      INTEGER*8 I, NLOCAL
+C     
+      NLOCAL = IPAR(1)
+C
+      DO I = 1, NLOCAL
+         YDOT(I) = 0.D0
+      ENDDO
+C     
+      IER = 0
+C
+      RETURN
+      END
+C
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FARKGLOCFN(NLOC, T, YLOC, GLOC, IPAR, RPAR, IER)
+C     Routine to define local approximate function g, here the same as fi. 
+      IMPLICIT NONE
+C
+      INTEGER*8 NLOC, IPAR(*)
+      INTEGER*4 IER
+      DOUBLE PRECISION T, YLOC(*), GLOC(*), RPAR(*)
+C     
+      CALL FARKIFUN(T, YLOC, GLOC, IPAR, RPAR, IER)
+C
+      RETURN
+      END
+C
+C     ------------------------------------------------------------------------
+C      
+      SUBROUTINE FARKCOMMFN(NLOC, T, YLOC, IPAR, RPAR, IER)
+C     Routine to perform communication required for evaluation of g.
+      INTEGER*8 NLOC, IPAR(*)
+      INTEGER*4 IER
+      DOUBLE PRECISION T, YLOC(*), RPAR(*)
+      IER = 0
+      RETURN
+      END
diff --git a/examples/arkode/F77_parallel/fark_diag_kry_bbd_p.out b/examples/arkode/F77_parallel/fark_diag_kry_bbd_p.out
new file mode 100644
index 0000000..6b777a1
--- /dev/null
+++ b/examples/arkode/F77_parallel/fark_diag_kry_bbd_p.out
@@ -0,0 +1,87 @@
+Diagonal test problem:
+
+ NEQ =  40
+ NLOCAL =  10
+ parameter alpha =   10.000
+ ydot_i = -alpha*i * y_i (i = 1,...,NEQ)
+ RTOL, ATOL =    0.1E-04   0.1E-09
+ Method is DIRK/NEWTON/SPGMR
+ Precond is band-block-diagonal, using ARKBBDPRE
+ Number of processors =   4
+
+
+Preconditioning on left
+
+ t =   0.10E+00     no. steps =   173   no. attempts =   173   no. fe-s =     0   no. fi-s =  1847
+ t =   0.20E+00     no. steps =   221   no. attempts =   221   no. fe-s =     0   no. fi-s =  2363
+ t =   0.30E+00     no. steps =   248   no. attempts =   248   no. fe-s =     0   no. fi-s =  2651
+ t =   0.40E+00     no. steps =   266   no. attempts =   266   no. fe-s =     0   no. fi-s =  2849
+ t =   0.50E+00     no. steps =   281   no. attempts =   281   no. fe-s =     0   no. fi-s =  3008
+ t =   0.60E+00     no. steps =   291   no. attempts =   291   no. fe-s =     0   no. fi-s =  3117
+ t =   0.70E+00     no. steps =   300   no. attempts =   300   no. fe-s =     0   no. fi-s =  3216
+ t =   0.80E+00     no. steps =   306   no. attempts =   306   no. fe-s =     0   no. fi-s =  3276
+ t =   0.90E+00     no. steps =   312   no. attempts =   312   no. fe-s =     0   no. fi-s =  3336
+ t =   0.10E+01     no. steps =   319   no. attempts =   319   no. fe-s =     0   no. fi-s =  3411
+
+Max. absolute error is  0.76E-10
+
+
+Final statistics:
+
+ number of steps        =   319
+ number of steps att.   =   319
+ number of fe evals.    =     0
+ number of fi evals.    =  3411
+ number of prec. setups =    25
+ number of prec. evals. =     6
+ number of prec. solves =  3380
+ number of nonl. iters. =  1812
+ number of lin. iters.  =  1785
+ average Krylov subspace dimension (NLI/NNI) =   0.9851
+ number of conv. failures.. nonlinear =   0  linear =   0
+ number of error test failures =   0
+ main solver real/int workspace sizes   =   658  160
+ linear solver real/int workspace sizes =   446   80
+In ARKBBDPRE:
+ real/int local workspace =    20   10
+ number of g evals. =    12
+
+
+------------------------------------------------------------
+
+
+Preconditioning on right
+
+ t =   0.10E+00     no. steps =   173   no. attempts =   173   no. fe-s =     0   no. fi-s =  1847
+ t =   0.20E+00     no. steps =   221   no. attempts =   221   no. fe-s =     0   no. fi-s =  2363
+ t =   0.30E+00     no. steps =   248   no. attempts =   248   no. fe-s =     0   no. fi-s =  2651
+ t =   0.40E+00     no. steps =   266   no. attempts =   266   no. fe-s =     0   no. fi-s =  2849
+ t =   0.50E+00     no. steps =   281   no. attempts =   281   no. fe-s =     0   no. fi-s =  3008
+ t =   0.60E+00     no. steps =   291   no. attempts =   291   no. fe-s =     0   no. fi-s =  3117
+ t =   0.70E+00     no. steps =   300   no. attempts =   300   no. fe-s =     0   no. fi-s =  3216
+ t =   0.80E+00     no. steps =   306   no. attempts =   306   no. fe-s =     0   no. fi-s =  3276
+ t =   0.90E+00     no. steps =   312   no. attempts =   312   no. fe-s =     0   no. fi-s =  3336
+ t =   0.10E+01     no. steps =   319   no. attempts =   319   no. fe-s =     0   no. fi-s =  3411
+
+Max. absolute error is  0.76E-10
+
+
+Final statistics:
+
+ number of steps        =   319
+ number of steps att.   =   319
+ number of fe evals.    =     0
+ number of fi evals.    =  3411
+ number of prec. setups =    25
+ number of prec. evals. =     6
+ number of prec. solves =  3380
+ number of nonl. iters. =  1812
+ number of lin. iters.  =  1785
+ average Krylov subspace dimension (NLI/NNI) =   0.9851
+ number of conv. failures.. nonlinear =   0  linear =   0
+ number of error test failures =   0
+ main solver real/int workspace sizes   =   658  160
+ linear solver real/int workspace sizes =   446   80
+In ARKBBDPRE:
+ real/int local workspace =    20   10
+ number of g evals. =    12
diff --git a/examples/arkode/F77_parallel/fark_diag_non_p.f b/examples/arkode/F77_parallel/fark_diag_non_p.f
new file mode 100644
index 0000000..ee37235
--- /dev/null
+++ b/examples/arkode/F77_parallel/fark_diag_non_p.f
@@ -0,0 +1,238 @@
+C     ----------------------------------------------------------------
+C     Programmer(s): Daniel R. Reynolds @ SMU
+C     ----------------------------------------------------------------
+C     LLNS/SMU Copyright Start
+C     Copyright (c) 2015, Southern Methodist University and 
+C     Lawrence Livermore National Security
+C
+C     This work was performed under the auspices of the U.S. Department 
+C     of Energy by Southern Methodist University and Lawrence Livermore 
+C     National Laboratory under Contract DE-AC52-07NA27344.
+C     Produced at Southern Methodist University and the Lawrence 
+C     Livermore National Laboratory.
+C
+C     All rights reserved.
+C     For details, see the LICENSE file.
+C     LLNS/SMU Copyright End
+C     Copyright (c) 2013, Southern Methodist University.
+C     All rights reserved.
+C     For details, see the LICENSE file.
+C     ----------------------------------------------------------------
+C     Diagonal ODE example. Nonstiff case: alpha = 10/NEQ.
+C     ----------------------------------------------------------------
+C
+C     Include MPI-Fortran header file for MPI_COMM_WORLD, MPI types.
+C
+      IMPLICIT NONE
+C
+      INCLUDE "mpif.h"
+      INTEGER*8 NLOCAL
+      PARAMETER (NLOCAL=2)
+C
+      INTEGER*4 IER, MYPE, NPES, NOUT, LNST, LNST_ATT, LNFE, LNFI, LNNI
+      INTEGER*4 LNCF, LNETF, METH, IATOL, ITASK, JOUT
+      INTEGER*8 NEQ, I, NST, NST_ATT, NFE, NFI, NNI, NCFN, NETF
+      INTEGER*8 IOUT(22), IPAR(2)
+      DOUBLE PRECISION Y(128), ROUT(6), RPAR(1)
+      DOUBLE PRECISION ATOL, RTOL, DTOUT, T, ALPHA, TOUT
+      DOUBLE PRECISION ERMAX, ERRI, GERMAX
+C
+      DATA ATOL/1.0D-10/, RTOL/1.0D-5/, DTOUT/0.1D0/, NOUT/10/
+      DATA LNST/3/, LNST_ATT/6/, LNFE/7/, LNFI/8/, LNNI/11/, LNCF/12/, 
+     1     LNETF/10/
+C
+C     Get NPES and MYPE.  Requires initialization of MPI.
+      CALL MPI_INIT(IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,5) IER
+ 5      FORMAT(///' MPI_ERROR: MPI_INIT returned IER = ', I5)
+        STOP
+        ENDIF
+      CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NPES, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,6) IER
+ 6      FORMAT(///' MPI_ERROR: MPI_COMM_SIZE returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+      CALL MPI_COMM_RANK(MPI_COMM_WORLD, MYPE, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,7) IER
+ 7      FORMAT(///' MPI_ERROR: MPI_COMM_RANK returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+C
+C     Set input arguments.
+      NEQ = NPES * NLOCAL
+      T = 0.0D0
+      METH = 1
+      IATOL = 1
+      ITASK = 1
+c     Set parameter ALPHA
+      ALPHA  = 10.0D0 / NEQ
+C
+C     Load IPAR and RPAR
+      IPAR(1) = NLOCAL
+      IPAR(2) = MYPE
+      RPAR(1) = ALPHA
+C
+      DO 10 I = 1, NLOCAL
+  10    Y(I) = 1.0D0
+C
+      IF (MYPE .EQ. 0) THEN
+        WRITE(6,11) NEQ, NLOCAL, ALPHA
+  11    FORMAT('Diagonal test problem:'//' NEQ = ', I3, /
+     1       ' NLOCAL = ', I3, /
+     2       ' parameter alpha = ', F8.3)
+        WRITE(6,12)
+  12    FORMAT(' ydot_i = -alpha*i * y_i (i = 1,...,NEQ)')
+        WRITE(6,13) RTOL, ATOL
+  13    FORMAT(' RTOL, ATOL = ', 2E10.1)
+        WRITE(6,14)
+  14    FORMAT(' Method is ERK')
+        WRITE(6,15) NPES
+  15    FORMAT(' Number of processors = ', I3//)
+        ENDIF
+C
+      CALL FNVINITP(MPI_COMM_WORLD, 4, NLOCAL, NEQ, IER)
+C
+      IF (IER .NE. 0) THEN
+        WRITE(6,20) IER
+  20    FORMAT(///' SUNDIALS_ERROR: FNVINITP returned IER = ', I5)
+        CALL MPI_FINALIZE(IER)
+        STOP
+        ENDIF
+C
+      CALL FARKMALLOC(T, Y, METH, IATOL, RTOL, ATOL,
+     1               IOUT, ROUT, IPAR, RPAR, IER)
+C
+      IF (IER .NE. 0) THEN
+        WRITE(6,30) IER
+  30    FORMAT(///' SUNDIALS_ERROR: FARKMALLOC returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+C
+C     Loop through tout values, call solver, print output, test for failure.
+      TOUT = DTOUT
+      DO 70 JOUT = 1, NOUT
+C
+        CALL FARKODE(TOUT, T, Y, ITASK, IER)
+C
+        IF (MYPE .EQ. 0) WRITE(6,40) T, IOUT(LNST), IOUT(LNST_ATT), 
+     &       IOUT(LNFE), IOUT(LNFI)
+  40    FORMAT(' t = ', D10.2, 5X, 'steps = ', I5, 
+     &         '  (attempted = ', I5, '),  fe = ', I5, 
+     &         '  fi = ', I5)
+C
+        IF (IER .NE. 0) THEN
+          WRITE(6,60) IER, IOUT(16)
+  60      FORMAT(///' SUNDIALS_ERROR: FARKODE returned IER = ', I5, /,
+     &           '                 Linear Solver returned IER = ', I5)
+          CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+          STOP
+          ENDIF
+C
+        TOUT = TOUT + DTOUT
+  70    CONTINUE
+C
+C     Get max. absolute error in the local vector.
+      ERMAX = 0.0D0
+      DO 75 I = 1, NLOCAL
+        ERRI  = Y(I) - EXP(-ALPHA * (MYPE * NLOCAL + I) * T)
+        ERMAX = MAX(ERMAX, ABS(ERRI))
+  75    CONTINUE
+C     Get global max. error from MPI_REDUCE call.
+      CALL MPI_REDUCE(ERMAX, GERMAX, 1, MPI_DOUBLE_PRECISION, MPI_MAX,
+     1                0, MPI_COMM_WORLD, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,80) IER
+  80    FORMAT(///' MPI_ERROR: MPI_REDUCE returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+      IF (MYPE .EQ. 0) WRITE(6,85) GERMAX
+  85  FORMAT(/'Max. absolute error is ', E10.2/)
+C
+C     Print final statistics.
+      NST = IOUT(LNST)
+      NST_ATT = IOUT(LNST_ATT)
+      NFE = IOUT(LNFE)
+      NFI = IOUT(LNFI)
+      NNI = IOUT(LNNI)
+      NCFN = IOUT(LNCF)
+      NETF = IOUT(LNETF)
+      IF (MYPE .EQ. 0) WRITE (6,90) NST, NST_ATT, NFE, NFI, NNI, NCFN, 
+     &     NETF
+  90  FORMAT(/'Final statistics:'//
+     &       ' number of steps = ', I5/
+     &       ' number of step attempts = ', I5/
+     &       ' number of fe evals. = ', I5/
+     &       ' number of fi evals. = ', I5/
+     &       ' number of nonlinear iters. = ', I5/
+     &       ' number of nonlinear conv. failures = ', I3/
+     &       ' number of error test failures = ', I3)
+C
+C     Free the memory and finalize MPI.
+      CALL FARKFREE
+      CALL MPI_FINALIZE(IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,95) IER
+ 95     FORMAT(///' MPI_ERROR: MPI_FINALIZE returned IER = ', I5)
+        STOP
+        ENDIF
+C
+      STOP
+      END
+C
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FARKIFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function fi
+C
+      IMPLICIT NONE
+C
+      INTEGER*4 IER
+      INTEGER*8 IPAR(*)
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+C
+      INTEGER*8 NLOCAL, I
+C
+      NLOCAL = IPAR(1)
+C
+      DO I = 1, NLOCAL
+         YDOT(I) = 0.D0
+      ENDDO
+C
+      IER = 0
+C
+      RETURN
+      END
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FARKEFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function fe
+C
+      IMPLICIT NONE
+C
+      INTEGER*4 IER
+      INTEGER*8 IPAR(*)
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+C
+      INTEGER*8 MYPE
+      INTEGER*8 NLOCAL, I
+      DOUBLE PRECISION ALPHA
+C
+      NLOCAL = IPAR(1)
+      MYPE = IPAR(2)
+      ALPHA = RPAR(1)
+C
+      DO I = 1, NLOCAL
+         YDOT(I) = -ALPHA * (MYPE * NLOCAL + I) * Y(I)
+      ENDDO
+C
+      IER = 0
+C
+      RETURN
+      END
diff --git a/examples/arkode/F77_parallel/fark_diag_non_p.out b/examples/arkode/F77_parallel/fark_diag_non_p.out
new file mode 100644
index 0000000..0ccf375
--- /dev/null
+++ b/examples/arkode/F77_parallel/fark_diag_non_p.out
@@ -0,0 +1,34 @@
+Diagonal test problem:
+
+ NEQ =   8
+ NLOCAL =   2
+ parameter alpha =    1.250
+ ydot_i = -alpha*i * y_i (i = 1,...,NEQ)
+ RTOL, ATOL =    0.1E-04   0.1E-09
+ Method is ERK
+ Number of processors =   4
+
+
+ t =   0.10D+00     steps =    12  (attempted =    12),  fe =    76  fi =     0
+ t =   0.20D+00     steps =    21  (attempted =    21),  fe =   130  fi =     0
+ t =   0.30D+00     steps =    31  (attempted =    31),  fe =   190  fi =     0
+ t =   0.40D+00     steps =    40  (attempted =    40),  fe =   244  fi =     0
+ t =   0.50D+00     steps =    50  (attempted =    50),  fe =   304  fi =     0
+ t =   0.60D+00     steps =    59  (attempted =    59),  fe =   358  fi =     0
+ t =   0.70D+00     steps =    69  (attempted =    69),  fe =   418  fi =     0
+ t =   0.80D+00     steps =    78  (attempted =    78),  fe =   472  fi =     0
+ t =   0.90D+00     steps =    88  (attempted =    88),  fe =   532  fi =     0
+ t =   0.10D+01     steps =    97  (attempted =    97),  fe =   586  fi =     0
+
+Max. absolute error is   0.54E-05
+
+
+Final statistics:
+
+ number of steps =    97
+ number of step attempts =    97
+ number of fe evals. =   586
+ number of fi evals. =     0
+ number of nonlinear iters. =     0
+ number of nonlinear conv. failures =   0
+ number of error test failures =   0
diff --git a/examples/arkode/F77_serial/CMakeLists.txt b/examples/arkode/F77_serial/CMakeLists.txt
new file mode 100644
index 0000000..7a9c40e
--- /dev/null
+++ b/examples/arkode/F77_serial/CMakeLists.txt
@@ -0,0 +1,157 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for the FARKODE F77 serial examples
+
+
+# Add variable FARKODE_examples with the names of the serial FARKODE examples
+
+SET(FARKODE_examples
+  fark_diurnal_kry_bp
+  )
+
+# Add variable FARKODE_bl_examples with the names of the serial FARKODE examples
+# that use Lapack
+
+SET(FARKODE_examples_BL
+  fark_roberts_dnsL
+  )
+
+# Add variable ARKODE_extras with the names of auxiliary files to install
+
+SET(ARKODE_extras
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+  SET(FNVECS_LIB sundials_fnvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+  SET(FNVECS_LIB sundials_fnvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FARKODE_LIB sundials_farkode_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FARKODE_LIB} ${ARKODE_LIB} ${FNVECS_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each FARKODE example
+
+FOREACH(example ${FARKODE_examples})
+  ADD_EXECUTABLE(${example} ${example}.f)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${FARKODE_examples})
+
+# Add the build and install targets for each Lapack FARKODE example (if needed)
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${FARKODE_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.f)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${FARKODE_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_serial)
+
+  # Install the extra files
+  FOREACH(extrafile ${ARKODE_extras})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_serial)
+  ENDFOREACH(extrafile ${ARKODE_extras})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "ARKODE")
+  SET(SOLVER_LIB "sundials_arkode")
+  SET(SOLVER_FLIB "sundials_farkode")
+  LIST2STRING(FARKODE_examples EXAMPLES)
+  IF(LAPACK_FOUND)
+    LIST2STRING(FARKODE_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/F77_serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/arkode/F77_serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/F77_serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/arkode/F77_serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F77_serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/arkode/F77_serial/README b/examples/arkode/F77_serial/README
new file mode 100644
index 0000000..c728e89
--- /dev/null
+++ b/examples/arkode/F77_serial/README
@@ -0,0 +1,50 @@
+List of serial ARKODE F77 examples
+
+  fark_diurnal_kry_bp : kinetics-transport example (DIRK/SPGMR/FARKBP)
+  fark_roberts_dnsL   : chemical kinetics example (DIRK/DENSE lapack)
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/arkode/F77_serial/fark_diurnal_kry_bp.f b/examples/arkode/F77_serial/fark_diurnal_kry_bp.f
new file mode 100644
index 0000000..62dda2c
--- /dev/null
+++ b/examples/arkode/F77_serial/fark_diurnal_kry_bp.f
@@ -0,0 +1,403 @@
+C     ----------------------------------------------------------------
+C     Programmer(s): Daniel R. Reynolds @ SMU
+C     ----------------------------------------------------------------
+C     LLNS/SMU Copyright Start
+C     Copyright (c) 2015, Southern Methodist University and 
+C     Lawrence Livermore National Security
+C
+C     This work was performed under the auspices of the U.S. Department 
+C     of Energy by Southern Methodist University and Lawrence Livermore 
+C     National Laboratory under Contract DE-AC52-07NA27344.
+C     Produced at Southern Methodist University and the Lawrence 
+C     Livermore National Laboratory.
+C
+C     All rights reserved.
+C     For details, see the LICENSE file.
+C     LLNS/SMU Copyright End
+C     Copyright (c) 2013, Southern Methodist University.
+C     All rights reserved.
+C     For details, see the LICENSE file.
+C     ----------------------------------------------------------------
+C     FARKODE Example Problem: 2D kinetics-transport, 
+C     precond. Krylov solver. 
+C     
+C     An ODE system is generated from the following 2-species diurnal
+C     kinetics advection-diffusion PDE system in 2 space dimensions:
+C     
+C     dc(i)/dt = Kh*(d/dx)**2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+C                           + Ri(c1,c2,t)      for i = 1,2,   where
+C     R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+C     R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+C     Kv(y) = Kv0*exp(y/5) ,
+C     Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+C     vary diurnally.
+C
+C     The problem is posed on the square
+C     0 .le. x .le. 20,    30 .le. y .le. 50   (all in km),
+C     with homogeneous Neumann boundary conditions, and for time t in
+C     0 .le. t .le. 86400 sec (1 day).
+C
+C     The PDE system is treated by central differences on a uniform
+C     10 x 10 mesh, with simple polynomial initial profiles.
+C     The problem is solved with ARKODE, with the DIRK/GMRES method and
+C     using the FARKBP banded preconditioner
+C     
+C     The second and third dimensions of U here must match the values of
+C     MX and MY, for consistency with the output statements below.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+      INTEGER*4 MX, MY
+      PARAMETER (MX=10, MY=10)
+      INTEGER*8 NEQ
+      PARAMETER (NEQ=2*MX*MY)
+C
+      INTEGER*4 LNST, LNST_ATT, LNFE, LNFI, LNSETUP, LNNI, LNCF, LNPE
+      INTEGER*4 LNLI, LNPS, LNCFL, LH, LNETF, LLENRW, LLENIW, LLENRWLS
+      INTEGER*4 LLENIWLS, METH, IATOL, ITASK, IER, MAXL, JPRETYPE
+      INTEGER*4 IGSTYPE, JOUT
+      INTEGER*8 IOUT(22), IPAR(4), NST, NST_ATT, NFE, NFI, NPSET, NPE
+      INTEGER*8 NPS, NNI, NLI, NCFN, NCFL, NETF, MU, ML, LENRW, LENIW
+      INTEGER*8 LENRWLS, LENIWLS, LENRWBP, LENIWBP, NFEBP, MXSTEPS
+      DOUBLE PRECISION ATOL, AVDIM, DELT, FLOOR, RTOL, T, TOUT, TWOHR
+      DOUBLE PRECISION ROUT(6), U(2,MX,MY), RPAR(12)
+C
+      DATA TWOHR/7200.0D0/, RTOL/1.0D-5/, FLOOR/100.0D0/,
+     1     JPRETYPE/1/, IGSTYPE/1/, MAXL/0/, DELT/0.0D0/, MXSTEPS/10000/
+      DATA LLENRW/1/, LLENIW/2/, LNST/3/, LNST_ATT/6/, LNFE/7/, LNFI/8/, 
+     1     LNETF/10/, LNCF/12/, LNNI/11/, LNSETUP/9/, LLENRWLS/14/, 
+     1     LLENIWLS/15/, LNPE/19/, LNLI/21/, LNPS/20/, LNCFL/22/
+      DATA LH/2/
+C
+C Load IPAR, RPAR, and initial values
+      CALL INITKX(MX, MY, U, IPAR, RPAR)
+C
+C     Set other input arguments.
+      T = 0.0D0
+      METH = 0
+      IATOL = 1
+      ATOL = RTOL * FLOOR
+      ITASK = 1
+C
+      WRITE(6,10) NEQ
+ 10   FORMAT('Krylov example problem:'//
+     1       ' Kinetics-transport, NEQ = ', I4/)
+C     
+C     Initialize vector specification
+      CALL FNVINITS(4, NEQ, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,20) IER
+ 20      FORMAT(///' SUNDIALS_ERROR: FNVINITS returned IER = ', I5)
+         STOP
+      ENDIF
+C     
+C     Initialize ARKODE
+      CALL FARKMALLOC(T, U, METH, IATOL, RTOL, ATOL,
+     1               IOUT, ROUT, IPAR, RPAR, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,30) IER
+ 30      FORMAT(///' SUNDIALS_ERROR: FARKMALLOC returned IER = ', I5)
+         STOP
+      ENDIF
+C
+      CALL FARKSETIIN('MAX_NSTEPS', MXSTEPS, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,35) IER
+ 35     FORMAT(///' SUNDIALS_ERROR: FARKSETIIN returned IER = ', I5)
+        STOP
+      ENDIF
+C     
+C     Initialize SPGMR solver
+      CALL FARKSPGMR(JPRETYPE, IGSTYPE, MAXL, DELT, IER) 
+      IF (IER .NE. 0) THEN
+         WRITE(6,45) IER
+ 45      FORMAT(///' SUNDIALS_ERROR: FARKSPGMR returned IER = ', I5)
+         CALL FARKFREE
+         STOP
+      ENDIF
+C     
+C     Initialize band preconditioner
+      MU = 2
+      ML = 2
+      CALL FARKBPINIT(NEQ, MU, ML, IER) 
+      IF (IER .NE. 0) THEN
+         WRITE(6,40) IER
+ 40      FORMAT(///' SUNDIALS_ERROR: FARKBPINIT returned IER = ', I5)
+         CALL FARKFREE
+         STOP
+      ENDIF
+C     
+C     Loop over output points, call FARKODE, print sample solution values.
+      TOUT = TWOHR
+      DO 70 JOUT = 1, 12
+C
+         CALL FARKODE(TOUT, T, U, ITASK, IER)
+C     
+         WRITE(6,50) T, IOUT(LNST), IOUT(LNST_ATT), ROUT(LH)
+ 50      FORMAT(/' t = ', E14.6, 5X, 'no. steps = ', I5, 
+     1        '  no. att. steps = ', I5, '   stepsize = ', E14.6)
+         WRITE(6,55) U(1,1,1), U(1,5,5), U(1,10,10),
+     1               U(2,1,1), U(2,5,5), U(2,10,10)
+ 55      FORMAT('  c1 (bot.left/middle/top rt.) = ', 3E14.6/
+     1        '  c2 (bot.left/middle/top rt.) = ', 3E14.6)
+C     
+         IF (IER .NE. 0) THEN
+            WRITE(6,60) IER, IOUT(16)
+ 60         FORMAT(///' SUNDIALS_ERROR: FARKODE returned IER = ', I5, /,
+     1             '                 Linear Solver returned IER = ', I5)
+            CALL FARKFREE
+            STOP
+         ENDIF
+C     
+         TOUT = TOUT + TWOHR
+ 70   CONTINUE
+      
+C     Print final statistics.
+      NST = IOUT(LNST)
+      NST_ATT = IOUT(LNST_ATT)
+      NFE = IOUT(LNFE)
+      NFI = IOUT(LNFI)
+      NPSET = IOUT(LNSETUP)
+      NPE = IOUT(LNPE)
+      NPS = IOUT(LNPS)
+      NNI = IOUT(LNNI)
+      NLI = IOUT(LNLI)
+      AVDIM = DBLE(NLI) / DBLE(NNI)
+      NCFN = IOUT(LNCF)
+      NCFL = IOUT(LNCFL)
+      NETF = IOUT(LNETF)
+      LENRW = IOUT(LLENRW)
+      LENIW = IOUT(LLENIW)
+      LENRWLS = IOUT(LLENRWLS)
+      LENIWLS = IOUT(LLENIWLS)
+      WRITE(6,80) NST, NST_ATT, NFE, NFI, NPSET, NPE, NPS, NNI, NLI, 
+     1     AVDIM, NCFN, NCFL, NETF, LENRW, LENIW, LENRWLS, LENIWLS
+ 80   FORMAT(//'Final statistics:'//
+     &   ' number of steps        = ', I6/
+     &   ' number of step att.    = ', I6/
+     &   ' number of fe evals.    = ', I6/
+     &   ' number of fi evals.    = ', I6/
+     &   ' number of prec. setups = ', I6/
+     &   ' number of prec. evals. = ', I6/
+     &   ' number of prec. solves = ', I6/
+     &   ' number of nonl. iters. = ', I6/
+     &   ' number of lin. iters.  = ', I6/
+     &   ' average Krylov subspace dimension (NLI/NNI) = ', E14.6/
+     &   ' number of conv. failures.. nonlinear =', I3,
+     &   ' linear = ', I3/
+     &   ' number of error test failures = ', I3/
+     &   ' main solver real/int workspace sizes   = ',2I5/
+     &   ' linear solver real/int workspace sizes = ',2I5)
+      CALL FARKBPOPT(LENRWBP, LENIWBP, NFEBP)
+      WRITE(6,82) LENRWBP, LENIWBP, NFEBP
+ 82   FORMAT('In ARKBANDPRE:'/
+     &        ' real/int workspace sizes = ', 2I5/
+     &        ' number of f evaluations  = ', I5)
+C     
+      CALL FARKFREE
+C     
+      STOP
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE INITKX(MX, MY, U0, IPAR, RPAR)
+C Routine to set problem constants and initial values
+C
+      IMPLICIT NONE
+C
+      INTEGER*4 MX, MY
+      INTEGER*8 IPAR(*), NEQ
+      DOUBLE PRECISION RPAR(*)
+C
+      INTEGER*8 MM, JY, JX
+      DOUBLE PRECISION U0
+      DIMENSION U0(2,MX,MY)
+      DOUBLE PRECISION Q1, Q2, Q3, Q4, A3, A4, OM, C3, DY, HDCO
+      DOUBLE PRECISION VDCO, HACO, X, Y
+      DOUBLE PRECISION CX, CY, DKH, DKV0, DX, HALFDA, PI, VEL
+C
+      DATA DKH/4.0D-6/, VEL/0.001D0/, DKV0/1.0D-8/, HALFDA/4.32D4/,
+     1     PI/3.1415926535898D0/
+C
+C Problem constants
+      MM = MX * MY
+      NEQ = 2 * MM
+      Q1 = 1.63D-16
+      Q2 = 4.66D-16
+      Q3 = 0.D0
+      Q4 = 0.D0
+      A3 = 22.62D0
+      A4 = 7.601D0
+      OM = PI / HALFDA
+      C3 = 3.7D16
+      DX = 20.0D0 / (MX - 1.0D0)
+      DY = 20.0D0 / (MY - 1.0D0)
+      HDCO = DKH / DX**2
+      HACO = VEL / (2.0D0 * DX)
+      VDCO = (1.0D0 / DY**2) * DKV0
+C Load constants in IPAR and RPAR
+      IPAR(1) = MX
+      IPAR(2) = MY
+      IPAR(3) = MM
+      IPAR(4) = NEQ
+C
+      RPAR(1)  = Q1
+      RPAR(2)  = Q2
+      RPAR(3)  = Q3
+      RPAR(4)  = Q4
+      RPAR(5)  = A3
+      RPAR(6)  = A4
+      RPAR(7)  = OM
+      RPAR(8)  = C3
+      RPAR(9)  = DY
+      RPAR(10) = HDCO
+      RPAR(11) = VDCO
+      RPAR(12) = HACO
+C
+C Set initial profiles.
+      DO 20 JY = 1, MY
+        Y = 30.0D0 + (JY - 1.0D0) * DY
+        CY = (0.1D0 * (Y - 40.0D0))**2
+        CY = 1.0D0 - CY + 0.5D0 * CY**2
+        DO 10 JX = 1, MX
+          X = (JX - 1.0D0) * DX
+          CX = (0.1D0 * (X - 10.0D0))**2
+          CX = 1.0D0 - CX + 0.5D0 * CX**2
+          U0(1,JX,JY) = 1.0D6 * CX * CY
+          U0(2,JX,JY) = 1.0D12 * CX * CY
+ 10       CONTINUE
+ 20     CONTINUE
+C
+      RETURN
+      END
+      
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FARKIFUN(T, U, UDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function fi
+      IMPLICIT NONE
+C
+      INTEGER*4 IER
+      INTEGER*8 IPAR(*)
+      DOUBLE PRECISION T, U(2,*), UDOT(2,*), RPAR(*)
+C
+      INTEGER*4 ILEFT, IRIGHT
+      INTEGER*8 MX, MY, MM, JY, JX, IBLOK0, IDN, IUP, IBLOK
+      DOUBLE PRECISION Q1,Q2,Q3,Q4, A3, A4, OM, C3, DY, HDCO, VDCO, HACO
+      DOUBLE PRECISION C1, C2, C1DN, C2DN, C1UP, C2UP, C1LT, C2LT
+      DOUBLE PRECISION C1RT, C2RT, CYDN, CYUP, HORD1, HORD2, HORAD1
+      DOUBLE PRECISION HORAD2, QQ1, QQ2, QQ3, QQ4, RKIN1, RKIN2, S
+      DOUBLE PRECISION VERTD1, VERTD2, YDN, YUP
+C
+C     Extract constants from IPAR and RPAR
+      MX = IPAR(1)
+      MY = IPAR(2)
+      MM = IPAR(3)
+C
+      Q1 = RPAR(1)
+      Q2 = RPAR(2)
+      Q3 = RPAR(3)
+      Q4 = RPAR(4)
+      A3 = RPAR(5)
+      A4 = RPAR(6)
+      OM = RPAR(7)
+      C3 = RPAR(8)
+      DY = RPAR(9)
+      HDCO = RPAR(10)
+      VDCO = RPAR(11)
+      HACO = RPAR(12)
+C     
+C     Set diurnal rate coefficients.
+      S = SIN(OM * T)
+      IF (S .GT. 0.0D0) THEN
+         Q3 = EXP(-A3 / S)
+         Q4 = EXP(-A4 / S)
+      ELSE
+         Q3 = 0.0D0
+         Q4 = 0.0D0
+      ENDIF
+C     
+C     Loop over all grid points.
+      DO 20 JY = 1, MY
+         YDN = 30.0D0 + (JY - 1.5D0) * DY
+         YUP = YDN + DY
+         CYDN = VDCO * EXP(0.2D0 * YDN)
+         CYUP = VDCO * EXP(0.2D0 * YUP)
+         IBLOK0 = (JY - 1) * MX
+         IDN = -MX
+         IF (JY .EQ. 1) IDN = MX
+         IUP = MX
+         IF (JY .EQ. MY) IUP = -MX
+         DO 10 JX = 1, MX
+            IBLOK = IBLOK0 + JX
+            C1 = U(1,IBLOK)
+            C2 = U(2,IBLOK)
+C     Set kinetic rate terms.
+            QQ1 = Q1 * C1 * C3
+            QQ2 = Q2 * C1 * C2
+            QQ3 = Q3 * C3
+            QQ4 = Q4 * C2
+            RKIN1 = -QQ1 - QQ2 + 2.0D0 * QQ3 + QQ4
+            RKIN2 = QQ1 - QQ2 - QQ4
+C     Set vertical diffusion terms.
+            C1DN = U(1,IBLOK + IDN)
+            C2DN = U(2,IBLOK + IDN)
+            C1UP = U(1,IBLOK + IUP)
+            C2UP = U(2,IBLOK + IUP)
+            VERTD1 = CYUP * (C1UP - C1) - CYDN * (C1 - C1DN)
+            VERTD2 = CYUP * (C2UP - C2) - CYDN * (C2 - C2DN)
+C     Set horizontal diffusion and advection terms.
+            ILEFT = -1
+            IF (JX .EQ. 1) ILEFT = 1
+            IRIGHT = 1
+            IF (JX .EQ. MX) IRIGHT = -1
+            C1LT = U(1,IBLOK + ILEFT)
+            C2LT = U(2,IBLOK + ILEFT)
+            C1RT = U(1,IBLOK + IRIGHT)
+            C2RT = U(2,IBLOK + IRIGHT)
+            HORD1 = HDCO * (C1RT - 2.0D0 * C1 + C1LT)
+            HORD2 = HDCO * (C2RT - 2.0D0 * C2 + C2LT)
+            HORAD1 = HACO * (C1RT - C1LT)
+            HORAD2 = HACO * (C2RT - C2LT)
+C     Load all terms into UDOT.
+            UDOT(1,IBLOK) = VERTD1 + HORD1 + HORAD1 + RKIN1
+            UDOT(2,IBLOK) = VERTD2 + HORD2 + HORAD2 + RKIN2
+ 10      CONTINUE
+ 20   CONTINUE
+C
+      IER = 0
+C
+      RETURN
+      END
+      
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FARKEFUN(T, U, UDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function fe
+      IMPLICIT NONE
+C
+      INTEGER*4 IER
+      INTEGER*8 IPAR(*)
+      DOUBLE PRECISION T, U(2,*), UDOT(2,*), RPAR(*)
+C
+      INTEGER*8 MX, MY, JY, JX, IBLOK0, IBLOK
+C
+C     Extract constants from IPAR
+      MX = IPAR(1)
+      MY = IPAR(2)
+C     
+C     Loop over all grid points, setting UDOT to zero
+      DO 20 JY = 1, MY
+         IBLOK0 = (JY - 1) * MX
+         DO 10 JX = 1, MX
+            IBLOK = IBLOK0 + JX
+            UDOT(1,IBLOK) = 0.D0
+            UDOT(2,IBLOK) = 0.D0
+ 10      CONTINUE
+ 20   CONTINUE
+C
+      IER = 0
+C
+      RETURN
+      END
diff --git a/examples/arkode/F77_serial/fark_diurnal_kry_bp.out b/examples/arkode/F77_serial/fark_diurnal_kry_bp.out
new file mode 100644
index 0000000..0d8370b
--- /dev/null
+++ b/examples/arkode/F77_serial/fark_diurnal_kry_bp.out
@@ -0,0 +1,73 @@
+Krylov example problem:
+
+ Kinetics-transport, NEQ =  200
+
+
+ t =   0.720000E+04     no. steps =   987  no. att. steps =   989   stepsize =   0.306506E+01
+  c1 (bot.left/middle/top rt.) =   0.104683E+05  0.296369E+05  0.111853E+05
+  c2 (bot.left/middle/top rt.) =   0.252673E+12  0.715366E+12  0.269977E+12
+
+ t =   0.144000E+05     no. steps =  2737  no. att. steps =  2739   stepsize =   0.689853E+01
+  c1 (bot.left/middle/top rt.) =   0.665902E+07  0.531590E+07  0.730081E+07
+  c2 (bot.left/middle/top rt.) =   0.258191E+12  0.205675E+12  0.283286E+12
+
+ t =   0.216000E+05     no. steps =  3539  no. att. steps =  3541   stepsize =   0.104022E+02
+  c1 (bot.left/middle/top rt.) =   0.266497E+08  0.103652E+08  0.293077E+08
+  c2 (bot.left/middle/top rt.) =   0.299279E+12  0.102829E+12  0.331344E+12
+
+ t =   0.288000E+05     no. steps =  4687  no. att. steps =  4710   stepsize =   0.491311E+01
+  c1 (bot.left/middle/top rt.) =   0.870214E+07  0.129200E+08  0.965006E+07
+  c2 (bot.left/middle/top rt.) =   0.338037E+12  0.502942E+12  0.375097E+12
+
+ t =   0.360000E+05     no. steps =  5918  no. att. steps =  5941   stepsize =   0.254793E+01
+  c1 (bot.left/middle/top rt.) =   0.140404E+05  0.202886E+05  0.156091E+05
+  c2 (bot.left/middle/top rt.) =   0.338679E+12  0.489399E+12  0.376518E+12
+
+ t =   0.432000E+05     no. steps =  7110  no. att. steps =  7133   stepsize =   0.293957E+03
+  c1 (bot.left/middle/top rt.) =   0.502136E-06  0.363249E-04  0.622560E-05
+  c2 (bot.left/middle/top rt.) =   0.338234E+12  0.135516E+12  0.380354E+12
+
+ t =   0.504000E+05     no. steps =  7134  no. att. steps =  7157   stepsize =   0.458474E+03
+  c1 (bot.left/middle/top rt.) =  -0.637359E-06  0.200437E-04 -0.556164E-05
+  c2 (bot.left/middle/top rt.) =   0.335818E+12  0.493035E+12  0.386446E+12
+
+ t =   0.576000E+05     no. steps =  7150  no. att. steps =  7174   stepsize =   0.351495E+03
+  c1 (bot.left/middle/top rt.) =  -0.385214E-08  0.287090E-06 -0.280114E-07
+  c2 (bot.left/middle/top rt.) =   0.332033E+12  0.964976E+12  0.390901E+12
+
+ t =   0.648000E+05     no. steps =  7165  no. att. steps =  7189   stepsize =   0.558311E+03
+  c1 (bot.left/middle/top rt.) =   0.186359E-13  0.263111E-09  0.373337E-12
+  c2 (bot.left/middle/top rt.) =   0.331304E+12  0.892178E+12  0.396344E+12
+
+ t =   0.720000E+05     no. steps =  7178  no. att. steps =  7202   stepsize =   0.558311E+03
+  c1 (bot.left/middle/top rt.) =  -0.420742E-14 -0.420137E-10 -0.127766E-12
+  c2 (bot.left/middle/top rt.) =   0.332974E+12  0.618628E+12  0.403886E+12
+
+ t =   0.792000E+05     no. steps =  7190  no. att. steps =  7214   stepsize =   0.558311E+03
+  c1 (bot.left/middle/top rt.) =   0.246890E-14 -0.103870E-09  0.242802E-12
+  c2 (bot.left/middle/top rt.) =   0.333443E+12  0.666905E+12  0.412027E+12
+
+ t =   0.864000E+05     no. steps =  7203  no. att. steps =  7227   stepsize =   0.558311E+03
+  c1 (bot.left/middle/top rt.) =   0.153924E-13 -0.146365E-10 -0.136898E-13
+  c2 (bot.left/middle/top rt.) =   0.335180E+12  0.910621E+12  0.416253E+12
+
+
+Final statistics:
+
+ number of steps        =   7203
+ number of step att.    =   7227
+ number of fe evals.    =      0
+ number of fi evals.    =  75508
+ number of prec. setups =    426
+ number of prec. evals. =    120
+ number of prec. solves = 109665
+ number of nonl. iters. =  39369
+ number of lin. iters.  =  73165
+ average Krylov subspace dimension (NLI/NNI) =   0.185844E+01
+ number of conv. failures.. nonlinear =  0 linear =   0
+ number of error test failures =  24
+ main solver real/int workspace sizes   =  3058   55
+ linear solver real/int workspace sizes =  2046   10
+In ARKBANDPRE:
+ real/int workspace sizes =  2400  200
+ number of f evaluations  =   600
diff --git a/examples/arkode/F77_serial/fark_roberts_dnsL.f b/examples/arkode/F77_serial/fark_roberts_dnsL.f
new file mode 100644
index 0000000..5397a9f
--- /dev/null
+++ b/examples/arkode/F77_serial/fark_roberts_dnsL.f
@@ -0,0 +1,307 @@
+C     ----------------------------------------------------------------
+C     Programmer(s): Daniel R. Reynolds @ SMU
+C     ----------------------------------------------------------------
+C     LLNS/SMU Copyright Start
+C     Copyright (c) 2015, Southern Methodist University and 
+C     Lawrence Livermore National Security
+C
+C     This work was performed under the auspices of the U.S. Department 
+C     of Energy by Southern Methodist University and Lawrence Livermore 
+C     National Laboratory under Contract DE-AC52-07NA27344.
+C     Produced at Southern Methodist University and the Lawrence 
+C     Livermore National Laboratory.
+C
+C     All rights reserved.
+C     For details, see the LICENSE file.
+C     LLNS/SMU Copyright End
+C     Copyright (c) 2013, Southern Methodist University.
+C     All rights reserved.
+C     For details, see the LICENSE file.
+C     ----------------------------------------------------------------
+C     FARKODE Example Problem: Robertson kinetics, Lapack linear solver
+C                             with dense user Jacobian.
+C
+C     The following is a simple example problem, with the coding
+C     needed for its solution by ARKODE. The problem is from chemical
+C     kinetics, and consists of the following three rate equations:
+C
+C     dy1/dt = -.04*y1 + 1.e4*y2*y3
+C     dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+C     dy3/dt = 3.e7*y2**2
+C
+C     on the interval from t = 0.0 to t = 4.e10, with initial
+C     conditions:
+C
+C     y1 = 1.0, y2 = y3 = 0.
+C
+C     The problem is stiff. While integrating the system, we also
+C     employ the root finding feature to find the points at which
+C     y1 = 1.e-4 or at which y3 = 0.01. The following coding solves
+C     this problem with ARKODE, using the Fortran/C interface routine
+C     package. This solution uses the DIRK method and a user-supplied
+C     Jacobian routine, and prints results at t = .4, 4., ..., 4.e10.
+C     It uses ITOL = 2 and ATOL much smaller for y2 than y1 or y3
+C     because y2 has much smaller values. At the end of the run,
+C     various counters of interest are printed.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+      INTEGER*4 IER, LNST, LNST_ATT, LNFE, LNFI, LNSETUP, LNNI, LNCF
+      INTEGER*4 LNETF, LNJE, LNGE, METH, ITOL, ITASK, JOUT, NOUT
+      INTEGER*4 IERROOT, INFO(2)
+      INTEGER*8 I, IOUT(22), IPAR, NEQ, MXSTEPS, MXNLI, PRED, MXETF
+      DOUBLE PRECISION RTOL, T, T0, TOUT, H0, NLCONV
+      DOUBLE PRECISION Y(3), ATOL(3), ROUT(6), RPAR
+C
+      DATA LNST/3/, LNST_ATT/6/, LNFE/7/, LNFI/8/, LNETF/10/, LNCF/12/, 
+     1     LNNI/11/, LNSETUP/9/, LNGE/13/, LNJE/18/
+C
+      NEQ = 3
+      MXSTEPS = 10000
+      MXNLI = 8
+      PRED = 1
+      MXETF = 20
+      T0 = 0.0D0
+      Y(1) = 1.0D0
+      Y(2) = 0.0D0
+      Y(3) = 0.0D0
+      METH = 0
+      ITOL = 2
+      RTOL = 1.0D-4
+      ATOL(1) = 1.0D-8
+      ATOL(2) = 1.0D-11
+      ATOL(3) = 1.0D-8
+      H0 = 1.0D-4 * RTOL
+      NLCONV = 1.0D-7
+      TOUT = 0.4D0
+      ITASK = 1
+      JOUT = 0
+      NOUT = 12
+C
+      WRITE(6,10) NEQ
+ 10   FORMAT('Dense example problem:'//
+     1       ' Robertson kinetics, NEQ = ', I2//)
+C
+      CALL FNVINITS(4, NEQ, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,20) IER
+ 20     FORMAT(///' SUNDIALS_ERROR: FNVINITS returned IER = ', I5)
+        STOP
+      ENDIF
+C
+
+      CALL FARKMALLOC(T0, Y, METH, ITOL, RTOL, ATOL,
+     1                IOUT, ROUT, IPAR, RPAR, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,30) IER
+ 30     FORMAT(///' SUNDIALS_ERROR: FARKMALLOC returned IER = ', I5)
+        STOP
+      ENDIF
+C
+      CALL FARKSETRIN('INIT_STEP', H0, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,32) IER
+ 32     FORMAT(///' SUNDIALS_ERROR: FARKSETRIN returned IER = ', I5)
+        STOP
+      ENDIF
+C
+      CALL FARKSETRIN('NLCONV_COEF', NLCONV, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,32) IER
+        STOP
+      ENDIF
+C
+      CALL FARKSETIIN('MAX_NSTEPS', MXSTEPS, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,35) IER
+ 35     FORMAT(///' SUNDIALS_ERROR: FARKSETIIN returned IER = ', I5)
+        STOP
+      ENDIF
+C
+      CALL FARKSETIIN('MAX_NITERS', MXNLI, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,35) IER
+        STOP
+      ENDIF
+C
+      CALL FARKSETIIN('PREDICT_METHOD', PRED, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,35) IER
+        STOP
+      ENDIF
+C
+      CALL FARKSETIIN('MAX_ERRFAIL', MXETF, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,35) IER
+        STOP
+      ENDIF
+c
+      CALL FARKROOTINIT(2, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,45) IER
+ 45      FORMAT(///' SUNDIALS_ERROR: FARKROOTINIT returned IER = ', I5)
+         CALL FARKFREE
+         STOP
+      ENDIF
+C
+      CALL FARKLAPACKDENSE(NEQ, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,40) IER
+ 40     FORMAT(///' SUNDIALS_ERROR: FARKLAPACKDENSE returned IER = ',I5)
+        CALL FARKFREE
+        STOP
+      ENDIF
+C
+      CALL FARKLAPACKDENSESETJAC(1, IER)
+C
+      DO WHILE(JOUT .LT. NOUT)
+C
+        CALL FARKODE(TOUT, T, Y, ITASK, IER)
+C
+        WRITE(6,50) T, Y(1), Y(2), Y(3)
+ 50     FORMAT('At t = ', E12.4, '   y = ', 3E14.6)
+C
+        IF (IER .LT. 0) THEN
+           WRITE(6,60) IER, IOUT(16)
+ 60        FORMAT(///' SUNDIALS_ERROR: FARKODE returned IER = ', I5, /,
+     1            '                 Linear Solver returned IER = ', I5)
+           CALL FARKROOTFREE
+           CALL FARKFREE
+           STOP
+        ENDIF
+C
+        IF (IER .EQ. 2) THEN
+           CALL FARKROOTINFO(2, INFO, IERROOT)
+           IF (IERROOT .LT. 0) THEN
+              WRITE(6,65) IERROOT
+ 65           FORMAT(///' SUNDIALS_ERROR: FARKROOTINFO returned IER = ',
+     1              I5)
+              CALL FARKROOTFREE
+              CALL FARKFREE
+              STOP
+           ENDIF
+           WRITE(6,70) (INFO(I), I = 1, 2)
+ 70        FORMAT(5X, 'Above is a root, INFO() = ', 2I3)
+        ENDIF                   
+C
+        IF (IER .EQ. 0) THEN
+           TOUT = TOUT * 10.0D0
+           JOUT = JOUT + 1
+        ENDIF
+C
+      ENDDO
+C
+      CALL FARKDKY(T, 1, Y, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,80) IER
+ 80      FORMAT(///' SUNDIALS_ERROR: FARKDKY returned IER = ', I4)
+         CALL FARKROOTFREE
+         CALL FARKFREE
+         STOP
+      ENDIF
+      WRITE(6,85) Y(1), Y(2), Y(3)
+ 85   FORMAT(/'Final value of ydot = ', 3E14.6)
+C
+      WRITE(6,90) IOUT(LNST), IOUT(LNST_ATT), IOUT(LNFE), IOUT(LNFI), 
+     1            IOUT(LNJE), IOUT(LNSETUP), IOUT(LNNI), IOUT(LNCF), 
+     2            IOUT(LNETF), IOUT(LNGE)
+ 90   FORMAT(//'Final statistics:'//
+     1       ' No. steps = ', I4, ', attempted = ', I4/
+     2       ' No. fe-s = ', I4, ', No. fi-s = ',I5/
+     3       ' No. J-s = ', I4, ',  No. LU-s = ', I4/
+     4       ' No. nonlinear iterations = ', I5/
+     5       ' No. nonlinear convergence failures = ', I4/
+     6       ' No. error test failures = ', I4/
+     7       ' No. root function evals = ', I4)
+C
+      CALL FARKROOTFREE
+      CALL FARKFREE
+C
+      STOP
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FARKIFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C Fortran routine for right-hand side function, fi
+      IMPLICIT NONE
+C
+      INTEGER*4 IPAR(*), IER
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+C
+      YDOT(1) = -0.04D0 * Y(1) + 1.0D4 * Y(2) * Y(3)
+      YDOT(3) = 3.0D7 * Y(2) * Y(2)
+      YDOT(2) = -YDOT(1) - YDOT(3)
+C
+      IER = 0
+C
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FARKEFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C Fortran routine for right-hand side function, fe
+      IMPLICIT NONE
+C
+      INTEGER*4 IPAR(*), IER
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+C
+      YDOT(1) = 0.D0
+      YDOT(3) = 0.D0
+      YDOT(2) = 0.D0
+C
+      IER = 0
+C
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FARKROOTFN(T, Y, G, IPAR, RPAR, IER)
+C Fortran routine for root finding
+      IMPLICIT NONE
+C
+      DOUBLE PRECISION T, Y(*), G(*), RPAR(*)
+      INTEGER*4 IPAR(*), IER
+C
+      G(1) = Y(1) - 1.0D-4
+      G(2) = Y(3) - 1.0D-2
+C
+      IER = 0
+
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FARKDJAC(N, T, Y, FY, JAC, H, IPAR, RPAR, 
+     1                    V1, V2, V3, IER)
+C Fortran routine for dense user-supplied Jacobian.
+      IMPLICIT NONE
+C
+      INTEGER*4 IER
+      INTEGER*8 N, IPAR(*)
+      DOUBLE PRECISION T, Y(*), FY(*), JAC(N,*), H, RPAR(*)
+      DOUBLE PRECISION V1(*), V2(*), V3(*)
+C
+      DOUBLE PRECISION  Y1, Y2, Y3
+C
+      Y1 = Y(1)
+      Y2 = Y(2)
+      Y3 = Y(3)
+      JAC(1,1) = -0.04D0
+      JAC(1,2) = 1.0D4 * Y3
+      JAC(1,3) = 1.0D4 * Y2
+      JAC(2,1) =  0.04D0
+      JAC(2,2) = -1.0D4 * Y3 - 6.0D7 * Y2
+      JAC(2,3) = -1.0D4 * Y2
+      JAC(3,3) = 0.0D0
+      JAC(3,2) = 6.0D7 * Y2
+      JAC(3,3) = 0.0D0
+C
+      IER = 0
+C
+      RETURN
+      END
diff --git a/examples/arkode/F77_serial/fark_roberts_dnsL.out b/examples/arkode/F77_serial/fark_roberts_dnsL.out
new file mode 100644
index 0000000..92a44f8
--- /dev/null
+++ b/examples/arkode/F77_serial/fark_roberts_dnsL.out
@@ -0,0 +1,34 @@
+Dense example problem:
+
+ Robertson kinetics, NEQ =  3
+
+
+At t =   0.2640E+00   y =   0.989965E+00  0.347057E-04  0.100000E-01
+     Above is a root, INFO() =   0  1
+At t =   0.4000E+00   y =   0.985172E+00  0.338640E-04  0.147940E-01
+At t =   0.4000E+01   y =   0.905519E+00  0.224048E-04  0.944589E-01
+At t =   0.4000E+02   y =   0.715827E+00  0.918557E-05  0.284164E+00
+At t =   0.4000E+03   y =   0.450519E+00  0.322290E-05  0.549478E+00
+At t =   0.4000E+04   y =   0.183202E+00  0.894249E-06  0.816797E+00
+At t =   0.4000E+05   y =   0.389834E-01  0.162189E-06  0.961016E+00
+At t =   0.4000E+06   y =   0.493828E-02  0.198408E-07  0.995062E+00
+At t =   0.4000E+07   y =   0.516810E-03  0.206913E-08  0.999483E+00
+At t =   0.2080E+08   y =   0.100000E-03  0.399524E-09  0.999900E+00
+     Above is a root, INFO() =  -1  0
+At t =   0.4000E+08   y =   0.520280E-04  0.206294E-09  0.999948E+00
+At t =   0.4000E+09   y =   0.520789E-05  0.208381E-10  0.999995E+00
+At t =   0.4000E+10   y =   0.520846E-06  0.221245E-11  0.999999E+00
+At t =   0.4000E+11   y =   0.520840E-07  0.317921E-12  0.100000E+01
+
+Final value of ydot =  -0.130212E-17  0.285435E-22  0.130209E-17
+
+
+Final statistics:
+
+ No. steps =  839, attempted =  983
+ No. fe-s =    0, No. fi-s = 29154
+ No. J-s =   70,  No. LU-s =  422
+ No. nonlinear iterations = 24278
+ No. nonlinear convergence failures =   15
+ No. error test failures =  129
+ No. root function evals =  870
diff --git a/examples/arkode/F90_parallel/CMakeLists.txt b/examples/arkode/F90_parallel/CMakeLists.txt
new file mode 100644
index 0000000..fca2903
--- /dev/null
+++ b/examples/arkode/F90_parallel/CMakeLists.txt
@@ -0,0 +1,149 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for the ARKODE parallel F90 examples
+
+
+# Add variable FARKODE_examples with the names of the parallel ARKODE examples
+
+SET(FARKODE_examples
+  "fark_heat2D\;1\;2"
+  )
+
+# Add variable FARKODE_extras with the names of auxiliary files to install
+# "name\;nodes\;tasks"
+SET(FARKODE_extras
+  plot_heat2D.py
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the Fortran compiler to the MPIF90 script.
+# If not, then add the MPI include directory for MPI headers.
+IF(MPI_MPIF90)
+  # use MPI_MPIF90 as the compiler
+  SET(CMAKE_Fortran_COMPILER ${MPI_MPIF90})
+ELSE(MPI_MPIF90)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPIF90)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+  SET(FNVECP_LIB sundials_fnvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+  SET(FNVECP_LIB sundials_fnvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+SET(FARKODE_LIB sundials_farkode_static)
+
+# Set-up linker flags and link libraries
+SET(SUNDIALS_LIBS ${FARKODE_LIB} ${ARKODE_LIB} ${FNVECP_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each ARKODE example
+FOREACH(example_tuple ${FARKODE_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.f90)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPIF90)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPIF90)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f90 ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${FARKODE_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_parallel)
+
+  # Install the extra files
+  FOREACH(extrafile ${FARKODE_extras})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_parallel)
+  ENDFOREACH(extrafile ${FARKODE_extras})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "ARKODE")
+  SET(SOLVER_LIB "sundials_arkode")
+  SET(SOLVER_FLIB "sundials_farkode")
+  FOREACH(example_tuple ${FARKODE_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${FARKODE_examples})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_F90_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/F90_parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/arkode/F90_parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_F90_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/F90_parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/arkode/F90_parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_parallel 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/arkode/F90_parallel/README b/examples/arkode/F90_parallel/README
new file mode 100644
index 0000000..013d9bb
--- /dev/null
+++ b/examples/arkode/F90_parallel/README
@@ -0,0 +1,55 @@
+List of parallel ARKODE F90 examples
+
+  fark_heat2D : 2-D diffusion (PCG with Jacobi preconditioner)
+
+Sample results:
+
+  The example output was produced by running with 2 MPI processes:
+  
+      mpiexec -n 2 ./fark_heat2D
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/arkode/F90_parallel/fark_heat2D.f90 b/examples/arkode/F90_parallel/fark_heat2D.f90
new file mode 100644
index 0000000..0daeeed
--- /dev/null
+++ b/examples/arkode/F90_parallel/fark_heat2D.f90
@@ -0,0 +1,879 @@
+!-----------------------------------------------------------------
+! Programmer(s): Daniel R. Reynolds @ SMU
+!-----------------------------------------------------------------
+! LLNS/SMU Copyright Start
+! Copyright (c) 2015, Southern Methodist University and 
+! Lawrence Livermore National Security
+!
+! This work was performed under the auspices of the U.S. Department 
+! of Energy by Southern Methodist University and Lawrence Livermore 
+! National Laboratory under Contract DE-AC52-07NA27344.
+! Produced at Southern Methodist University and the Lawrence 
+! Livermore National Laboratory.
+!
+! All rights reserved.
+! For details, see the LICENSE file.
+! LLNS/SMU Copyright End
+! Copyright (c) 2013, Southern Methodist University.
+! All rights reserved.
+! For details, see the LICENSE file.
+!-----------------------------------------------------------------
+! Example problem:
+! 
+! The following test simulates a simple anisotropic 2D heat 
+! equation,
+!    u_t = kx*u_xx + ky*u_yy + h,
+! for t in [0, 10], (x,y) in [0, 1]^2, with initial conditions
+!    u(0,x,y) =  0,
+! stationary boundary conditions, i.e. 
+!    u_t(t,0,y) = u_t(t,1,y) = u_t(t,x,0) = u_t(t,x,1) = 0,
+! and a heat source of the form
+!    h(x,y) = sin(pi*x)*sin(2*pi*y).
+!
+! Under this setup, the problem has an analytical solution:
+!    u(t,x,y) = a(t)*sin(pi*x)*sin(2*pi*y), where
+!    a(t) = (1 - exp(-(kx+4*ky)*pi^2*t)) / ((kx+4*ky)*pi^2).
+! 
+! The spatial derivatives are computed using second-order 
+! centered differences, with the data distributed over nx*ny
+! points on a uniform spatial grid.
+!
+! The spatial grid parameters nx and ny, the parameters kx and ky, 
+! as well as the desired relative and absolute solver tolerances, 
+! are provided in the input file input_heat2D.txt.
+! 
+! This program solves the problem with a DIRK method.  This 
+! employs a Newton iteration with the PCG iterative linear solver, 
+! which itself uses a Jacobi preconditioner.  The example uses the 
+! built-in finite-difference Jacobian-vector product routine, but 
+! supplies both the RHS and preconditioner setup/solve functions.
+!
+! 20 outputs are printed at equal intervals, and run statistics 
+! are printed at the end.
+!-----------------------------------------------------------------
+
+!-----------------------------------------------------------------
+! Main driver program
+!-----------------------------------------------------------------
+module UserData
+  !---------------------------------------------------------------
+  ! Description: 
+  !    Module containing problem-defining parameters, as well as
+  !    data buffers for MPI exchanges with neighboring processes.
+  !    Also contains routines to:
+  !      (a) initialize the module
+  !      (b) perform exchanges
+  !      (c) free module data.
+  !---------------------------------------------------------------
+  implicit none
+  save
+
+  integer*8 :: nx          ! global number of x grid points 
+  integer*8 :: ny          ! global number of y grid points 
+  integer*8 :: is          ! global x indices of this subdomain
+  integer*8 :: ie
+  integer*8 :: js          ! global y indices of this subdomain
+  integer*8 :: je
+  integer*8 :: nxl         ! local number of x grid points 
+  integer*8 :: nyl         ! local number of y grid points 
+  real*8    :: dx          ! x-directional mesh spacing 
+  real*8    :: dy          ! y-directional mesh spacing 
+  real*8    :: kx          ! x-directional diffusion coefficient 
+  real*8    :: ky          ! y-directional diffusion coefficient 
+  real*8, dimension(:,:), allocatable :: h    ! heat source vector
+  real*8, dimension(:,:), allocatable :: d    ! inverse of Jacobian diagonal
+  integer :: comm                             ! communicator object
+  integer :: myid                             ! MPI process ID
+  integer :: nprocs                           ! total number of MPI processes
+  logical :: HaveBdry(2,2)                    ! flags denoting if on physical boundary
+  real*8, dimension(:), allocatable :: Erecv  ! receive buffers for neighbor exchange
+  real*8, dimension(:), allocatable :: Wrecv
+  real*8, dimension(:), allocatable :: Nrecv
+  real*8, dimension(:), allocatable :: Srecv
+  real*8, dimension(:), allocatable :: Esend  ! send buffers for neighbor exchange
+  real*8, dimension(:), allocatable :: Wsend
+  real*8, dimension(:), allocatable :: Nsend
+  real*8, dimension(:), allocatable :: Ssend
+
+contains
+
+  !---------------------------------------------------------------
+  ! Initialize memory allocated within Userdata (set to defaults)
+  !---------------------------------------------------------------
+  subroutine InitUserData()
+    implicit none
+    include "mpif.h"
+    nx = 0
+    ny = 0
+    is = 0
+    ie = 0
+    js = 0
+    je = 0
+    nxl = 0
+    nyl = 0
+    dx = 0.d0
+    dy = 0.d0
+    kx = 0.d0
+    ky = 0.d0
+    if (allocated(h))  deallocate(h)
+    if (allocated(d))  deallocate(d)
+    comm = MPI_COMM_WORLD
+    myid = 0
+    nprocs = 0
+    HaveBdry = .true.
+    if (allocated(Erecv))  deallocate(Erecv)
+    if (allocated(Wrecv))  deallocate(Wrecv)
+    if (allocated(Nrecv))  deallocate(Nrecv)
+    if (allocated(Srecv))  deallocate(Srecv)
+    if (allocated(Esend))  deallocate(Esend)
+    if (allocated(Wsend))  deallocate(Wsend)
+    if (allocated(Nsend))  deallocate(Nsend)
+    if (allocated(Ssend))  deallocate(Ssend)
+  end subroutine InitUserData
+  !---------------------------------------------------------------
+
+
+  !---------------------------------------------------------------
+  ! Set up parallel decomposition
+  !---------------------------------------------------------------
+  subroutine SetupDecomp(ierr)
+    ! declarations
+    implicit none
+    include "mpif.h"
+    integer, intent(out) :: ierr
+    integer :: dims(2), periods(2), coords(2)
+    
+    ! internals
+
+    ! check that this has not been called before
+    if (allocated(h) .or. allocated(d)) then
+       write(0,*) "SetupDecomp warning: parallel decomposition already set up"
+       ierr = 1
+       return
+    end if
+
+    ! get suggested parallel decomposition
+    dims = (/0, 0/)
+    call MPI_Comm_size(MPI_COMM_WORLD, nprocs, ierr)
+    if (ierr /= MPI_SUCCESS) then
+       write(0,*) "Error in MPI_Comm_size = " , ierr
+       return
+    end if
+    call MPI_Dims_create(nprocs, 2, dims, ierr)
+    if (ierr /= MPI_SUCCESS) then
+       write(0,*) "Error in MPI_Dims_create = " , ierr
+       return
+    end if
+
+    ! set up 2D Cartesian communicator
+    periods = (/0, 0/)
+    call MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, 0, comm, ierr)
+    if (ierr /= MPI_SUCCESS) then
+       write(0,*) "Error in MPI_Cart_create = " , ierr
+       return
+    end if
+    call MPI_Comm_rank(comm, myid, ierr)
+    if (ierr /= MPI_SUCCESS) then
+       write(0,*) "Error in MPI_Comm_rank = " , ierr
+       return
+    end if
+
+    ! determine local extents
+    call MPI_Cart_get(comm, 2, dims, periods, coords, ierr)
+    if (ierr /= MPI_SUCCESS) then
+       write(0,*) "Error in MPI_Cart_get = " , ierr
+       return
+    end if
+    is = nx*coords(1)/dims(1) + 1
+    ie = nx*(coords(1)+1)/dims(1)
+    js = ny*coords(2)/dims(2) + 1
+    je = ny*(coords(2)+1)/dims(2)
+    nxl = ie-is+1
+    nyl = je-js+1
+
+    ! determine if I have neighbors, and allocate exchange buffers
+    HaveBdry(1,1) = (is == 1)
+    HaveBdry(1,2) = (ie == nx)
+    HaveBdry(2,1) = (js == 1)
+    HaveBdry(2,2) = (je == ny)
+    if (.not. HaveBdry(1,1)) then
+       allocate(Wrecv(nyl))
+       allocate(Wsend(nyl))
+    endif
+    if (.not. HaveBdry(1,2)) then
+       allocate(Erecv(nyl))
+       allocate(Esend(nyl))
+    endif
+    if (.not. HaveBdry(2,1)) then
+       allocate(Srecv(nxl))
+       allocate(Ssend(nxl))
+    endif
+    if (.not. HaveBdry(2,2)) then
+       allocate(Nrecv(nxl))
+       allocate(Nsend(nxl))
+    endif
+
+    ! allocate temporary vectors
+    allocate(h(nxl,nyl))    ! Create vector for heat source
+    allocate(d(nxl,nyl))    ! Create vector for Jacobian diagonal
+    
+    ierr = 0     ! return with success flag
+    return
+  end subroutine SetupDecomp
+  !---------------------------------------------------------------
+
+
+  !---------------------------------------------------------------
+  ! Perform neighbor exchange
+  !---------------------------------------------------------------
+  subroutine Exchange(y, ierr)
+    ! declarations
+    implicit none
+    include "mpif.h"
+    real*8,  intent(in)  :: y(nxl,nyl)
+    integer, intent(out) :: ierr
+    integer :: reqSW, reqSE, reqSS, reqSN, reqRW, reqRE, reqRS, reqRN;
+    integer :: stat(MPI_STATUS_SIZE)
+    integer*8 :: i
+    integer :: ipW, ipE, ipS, ipN
+    integer :: coords(2), dims(2), periods(2), nbcoords(2)
+    
+    ! internals
+
+    ! MPI neighborhood information
+    call MPI_Cart_get(comm, 2, dims, periods, coords, ierr)
+    if (ierr /= MPI_SUCCESS) then
+       write(0,*) "Error in MPI_Cart_get = ", ierr
+       return
+    endif
+    if (.not. HaveBdry(1,1)) then
+       nbcoords = (/ coords(1)-1, coords(2) /)
+       call MPI_Cart_rank(comm, nbcoords, ipW, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Cart_rank = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(1,2)) then
+       nbcoords = (/ coords(1)+1, coords(2) /)
+       call MPI_Cart_rank(comm, nbcoords, ipE, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Cart_rank = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(2,1)) then
+       nbcoords = (/ coords(1), coords(2)-1 /)
+       call MPI_Cart_rank(comm, nbcoords, ipS, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Cart_rank = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(2,2)) then
+       nbcoords = (/ coords(1), coords(2)+1 /)
+       call MPI_Cart_rank(comm, nbcoords, ipN, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Cart_rank = ", ierr
+          return
+       endif
+    endif
+
+    ! open Irecv buffers
+    if (.not. HaveBdry(1,1)) then
+       call MPI_Irecv(Wrecv, nyl, MPI_DOUBLE_PRECISION, ipW, &
+                      MPI_ANY_TAG, comm, reqRW, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Irecv = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(1,2)) then
+       call MPI_Irecv(Erecv, nyl, MPI_DOUBLE_PRECISION, ipE, &
+                      MPI_ANY_TAG, comm, reqRE, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Irecv = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(2,1)) then
+       call MPI_Irecv(Srecv, nxl, MPI_DOUBLE_PRECISION, ipS, &
+                      MPI_ANY_TAG, comm, reqRS, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Irecv = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(2,2)) then
+       call MPI_Irecv(Nrecv, nxl, MPI_DOUBLE_PRECISION, ipN, &
+                      MPI_ANY_TAG, comm, reqRN, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Irecv = ", ierr
+          return
+       endif
+    endif
+
+    ! send data
+    if (.not. HaveBdry(1,1)) then
+       do i=1,nyl
+          Wsend(i) = y(1,i)
+       enddo
+       call MPI_Isend(Wsend, nyl, MPI_DOUBLE_PRECISION, ipW, 0, &
+                      comm, reqSW, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Isend = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(1,2)) then
+       do i=1,nyl
+          Esend(i) = y(nxl,i)
+       enddo
+       call MPI_Isend(Esend, nyl, MPI_DOUBLE_PRECISION, ipE, 1, &
+                      comm, reqSE, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Isend = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(2,1)) then
+       do i=0,nxl
+          Ssend(i) = y(i,1)
+       enddo
+       call MPI_Isend(Ssend, nxl, MPI_DOUBLE_PRECISION, ipS, 2, &
+                      comm, reqSS, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Isend = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(2,2)) then
+       do i=0,nxl
+          Nsend(i) = y(i,nyl)
+       enddo
+       call MPI_Isend(Nsend, nxl, MPI_DOUBLE_PRECISION, ipN, 3, &
+                      comm, reqSN, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Isend = ", ierr
+          return
+       endif
+    endif
+
+    ! wait for messages to finish
+    if (.not. HaveBdry(1,1)) then
+       call MPI_Wait(reqRW, stat, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Wait = ", ierr
+          return
+       endif
+       call MPI_Wait(reqSW, stat, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Wait = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(1,2)) then
+       call MPI_Wait(reqRE, stat, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Wait = ", ierr
+          return
+       endif
+       call MPI_Wait(reqSE, stat, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Wait = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(2,1)) then
+       call MPI_Wait(reqRS, stat, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Wait = ", ierr
+          return
+       endif
+       call MPI_Wait(reqSS, stat, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Wait = ", ierr
+          return
+       endif
+    endif
+    if (.not. HaveBdry(2,2)) then
+       call MPI_Wait(reqRN, stat, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Wait = ", ierr
+          return
+       endif
+       call MPI_Wait(reqSN, stat, ierr)
+       if (ierr /= MPI_SUCCESS) then 
+          write(0,*) "Error in MPI_Wait = ", ierr
+          return
+       endif
+    endif
+
+    ierr = 0     ! return with success flag
+    return
+  end subroutine Exchange
+  !---------------------------------------------------------------
+
+
+  !---------------------------------------------------------------
+  ! Free memory allocated within Userdata
+  !---------------------------------------------------------------
+  subroutine FreeUserData(ierr)
+    implicit none
+    integer, intent(out) :: ierr
+    if (.not. HaveBdry(1,1)) then
+       deallocate(Wrecv)
+       deallocate(Wsend)
+    endif
+    if (.not. HaveBdry(1,2)) then
+       deallocate(Erecv)
+       deallocate(Esend)
+    endif
+    if (.not. HaveBdry(2,1)) then
+       deallocate(Srecv)
+       deallocate(Ssend)
+    endif
+    if (.not. HaveBdry(2,2)) then
+       deallocate(Nrecv)
+       deallocate(Nsend)
+    endif
+    ierr = 0     ! return with success flag
+    return
+  end subroutine FreeUserData
+  !---------------------------------------------------------------
+
+
+  !---------------------------------------------------------------
+  ! RMS norm function for parallel array data
+  !---------------------------------------------------------------
+  subroutine PRMS(y,yrms,ierr)
+    ! declarations
+    implicit none
+    include "mpif.h"
+    integer, intent(out) :: ierr
+    real*8,  intent(in)  :: y(nxl,nyl)
+    real*8,  intent(out) :: yrms
+    real*8 :: lsum, gsum
+
+    ! internals
+    lsum = sum(y**2)
+    call MPI_Allreduce(lsum, gsum, 1, MPI_DOUBLE_PRECISION, &
+                       MPI_SUM, comm, ierr)
+    if (ierr /= MPI_SUCCESS) then
+       write(0,*) "Error in MPI_Allreduce = ", ierr
+       call MPI_Finalize(ierr)
+    endif
+    yrms = sqrt(gsum/nx/ny)
+
+    ierr = 0     ! return with success flag
+    return
+  end subroutine PRMS
+  !---------------------------------------------------------------
+
+end module UserData
+!-----------------------------------------------------------------
+
+
+!-----------------------------------------------------------------
+! Main driver program
+!-----------------------------------------------------------------
+program driver
+
+  ! inclusions
+  use UserData
+  implicit none
+  include "mpif.h"
+
+  ! Declarations
+  ! general problem parameters
+  real*8,    parameter :: pi = 3.1415926535897932d0
+  real*8,    parameter :: T0 = 0.d0     ! initial time 
+  real*8,    parameter :: Tf = 0.3d0    ! final time 
+  integer,   parameter :: Nt = 20       ! total number of output times 
+  real*8,    parameter :: rtol = 1.d-5  ! relative and absolute tolerances
+  real*8,    parameter :: atol = 1.d-10
+  integer*8, parameter :: nx_ = 60      ! spatial mesh size
+  integer*8, parameter :: ny_ = 120
+  real*8,    parameter :: kx_ = 0.5d0   ! heat conductivity coefficients
+  real*8,    parameter :: ky_ = 0.75d0
+  real*8,    parameter :: nlscoef = 1.d-7   ! nonlinear solver tolerance factor
+  integer,   parameter :: PCGpretype = 1    ! enable preconditioner
+  integer,   parameter :: PCGmaxl = 20      ! max num. PCG iterations
+  real*8,    parameter :: PCGdelt = 0.d0    ! use default solver tolerance factor
+
+  ! solution vector and other local variables
+  real*8, allocatable :: y(:,:)
+  real*8    :: rout(6), rpar, t, dTout, tout, urms
+  integer*8 :: N, Ntot, i, j, iout(22), ipar
+  integer   :: flag, ioutput
+  logical   :: outproc
+  character*100 :: outname
+
+  ! initialize MPI
+  call MPI_Init(flag)
+  if (flag /= MPI_SUCCESS) then
+     write(0,*) "Error in MPI_Init = ", flag
+     stop
+  end if
+  call MPI_Comm_rank(MPI_COMM_WORLD, myid, flag)
+  if (flag /= MPI_SUCCESS) then
+     write(0,*) "Error in MPI_Comm_rank = ", flag
+     call MPI_Finalize(flag)
+  end if
+
+  ! Initialize UserData module
+  call InitUserData()
+  nx = nx_
+  ny = ny_
+  kx = kx_
+  ky = ky_
+  dx = 1.d0/(nx-1)   ! x mesh spacing 
+  dy = 1.d0/(ny-1)   ! x mesh spacing 
+
+  ! Set up parallel decomposition (computes local mesh sizes)
+  call SetupDecomp(flag)
+  if (flag /= MPI_SUCCESS) then
+     write(0,*) "Error in SetupDecomp = ", flag
+     call MPI_Finalize(flag)
+  end if
+
+  ! Initial problem output 
+  outproc = (myid == 0)
+  if (outproc) then
+     write(6,*) "  "
+     write(6,*) "2D Heat PDE test problem:";
+     write(6,'(A,i4)') "   nprocs = " , nprocs
+     write(6,'(A,i4)') "   nx = ", nx
+     write(6,'(A,i4)') "   ny = ", ny
+     write(6,'(A,f5.2)') "   kx = ", kx
+     write(6,'(A,f5.2)') "   ky = ", ky
+     write(6,'(A,es9.2)') "   rtol = ", rtol
+     write(6,'(A,es9.2)') "   atol = ", atol
+     write(6,'(A,i4)') "   nxl (proc 0) = ", nxl
+     write(6,'(A,i4)') "   nyl (proc 0) = ", nyl
+     write(6,*) "  "
+  endif
+
+  ! Initialize data structures 
+  N = nxl*nyl
+  Ntot = nx*ny
+  call FNVInitP(comm, 4, N, Ntot, flag)
+  if (flag /= MPI_SUCCESS) then
+     write(0,*) "Error in FNVInitP = ", flag
+     call MPI_Finalize(flag)
+  end if
+  allocate(y(nxl,nyl))         ! Create parallel vector for solution 
+  y = 0.d0                     ! Set initial conditions 
+
+  ! Create the solver memory to use DIRK integrator, scalar tolerances
+  call FARKMalloc(T0, y, 0, 1, rtol, atol, iout, rout, ipar, rpar, flag)
+  if (flag /= MPI_SUCCESS) then
+     write(0,*) "Error in FARKMalloc = ", flag
+     call MPI_Finalize(flag)
+  end if
+
+  ! fill in the heat source array
+  do j=1,nyl
+     do i=1,nxl
+        h(i,j) = sin(pi*(is+i-2)*dx) * sin(2.d0*pi*(js+j-2)*dy)
+     enddo
+  enddo
+
+  ! set integrator options
+  call FARKSetRin("NLCONV_COEF", nlscoef, flag)
+  if (flag < 0) then
+     write(0,*) "Error in FARKSetRin = ", flag
+     call MPI_Finalize(flag)
+  end if
+  call FARKSetIin("PREDICT_METHOD", 1_8, flag)
+  if (flag < 0) then
+     write(0,*) "Error in FARKSetIin = ", flag
+     call MPI_Finalize(flag)
+  end if
+
+
+  ! Linear solver specification 
+  call FARKPCG(PCGpretype, PCGmaxl, PCGdelt, flag)  ! Specify the PCG solver 
+  if (flag < 0) then
+     write(0,*) "Error in FARKPCG = ", flag
+     call MPI_Finalize(flag)
+  end if
+  call FARKSpilsSetPrec(1, flag)                     ! Enable preconditioning
+  if (flag < 0) then
+     write(0,*) "Error in FARKSpilsSetPrec = ", flag
+     call MPI_Finalize(flag)
+  end if
+
+  ! specify that the problem is linearly implicit, but that Jacobian does not depend on time
+  call FARKSetIin("LINEAR", 0_8, flag)
+  if (flag < 0) then
+     write(0,*) "Error in FARKSetIin = ", flag
+     call MPI_Finalize(flag)
+  end if
+
+  ! Each processor outputs subdomain information
+  write(outname,'(16Hheat2d_subdomain,f4.3,4H.txt)') myid/1000.0
+  open(100, file=outname)
+  write(100,'(6(i9,1x))') nx, ny, is, ie, js, je
+  close(100)
+
+  ! Open output streams for results, access data array 
+  write(outname,'(6Hheat2d,f4.3,4H.txt)') myid/1000.0
+  open(101, file=outname)
+
+  ! Output initial condition to disk
+  do j=1,nyl
+     do i=1,nxl
+        write(101,'(es25.16)',advance='no') y(i,j)
+     enddo
+  enddo
+  write(101,*) "  "
+
+  ! Main time-stepping loop: calls ARKode to perform the integration, then
+  ! prints results.  Stops when the final time has been reached
+  t = T0
+  dTout = (Tf-T0)/Nt
+  tout = T0+dTout
+  call PRMS(y, urms, flag)
+  if (outproc) then
+    write(6,*) "        t      ||u||_rms"
+    write(6,*) "   ----------------------"
+    write(6,'(2(2x,f10.6))') t, urms
+  endif
+  do ioutput=1,Nt
+
+     call FARKode(tout, t, y, 1, flag)         ! call integrator 
+     if (flag < 0) then
+        write(0,*) "Error in FARKode = ", flag
+        exit
+     end if
+     
+     call PRMS(y, urms, flag)
+     if (outproc) &
+          write(6,'(2(2x,f10.6))') t, urms     ! print solution stats 
+     if (flag >= 0) then                       ! successful solve: update output time
+        tout = min(tout + dTout, Tf)
+     else                                      ! unsuccessful solve: break 
+        if (outproc) &
+             write(0,*) "Solver failure, stopping integration"
+        exit
+     endif
+
+     ! output results to disk 
+     do j=1,nyl
+        do i=1,nxl
+           write(101,'(es25.16)',advance='no') y(i,j)
+        enddo
+     enddo
+     write(101,*) "  "
+     
+  enddo
+  if (outproc) then
+     write(6,*) "   ----------------------"
+  endif
+  close(101)
+
+  ! Print some final statistics 
+  if (outproc) then
+     write(6,*) "  "
+     write(6,*) "Final Solver Statistics:"
+     write(6,'(2(A,i6),A)') "   Internal solver steps = ", iout(3), &
+          " (attempted = ", iout(6), ")"
+     write(6,'(A,i6,A,i6)') "   Total RHS evals:  Fe = ", iout(7), ",  Fi = ", iout(8)
+     write(6,'(A,i6)') "   Total linear solver setups = ", iout(9)
+     write(6,'(A,i6)') "   Total linear iterations = ", iout(21)
+     write(6,'(A,i6)') "   Total number of Jacobian-vector products = ", iout(18)
+     write(6,'(A,i6)') "   Total number of Preconditioner setups = ", iout(19)
+     write(6,'(A,i6)') "   Total number of Preconditioner solves = ", iout(20)
+     write(6,'(A,i6)') "   Total number of linear solver convergence failures = ", &
+          iout(22)
+     write(6,'(A,i6)') "   Total number of Newton iterations = ", iout(11)
+     write(6,'(A,i6)') "   Total number of nonlinear solver convergence failures = ", &
+          iout(12)
+     write(6,'(A,i6)') "   Total number of error test failures = ", iout(10)
+ endif
+
+ ! Clean up and return with successful completion 
+ deallocate(y)              ! free vectors
+ deallocate(h)
+ deallocate(d)
+ call FreeUserData(flag)    ! free user data 
+ call FARKFree()            ! free integrator memory 
+ call MPI_Barrier(comm, flag)
+ call MPI_Finalize(flag)    ! Finalize MPI
+
+end program driver
+!-----------------------------------------------------------------
+
+
+
+!-----------------------------------------------------------------
+! Functions called by the solver
+!-----------------------------------------------------------------
+
+
+subroutine farkifun(t, y, ydot, ipar, rpar, ierr)
+!-----------------------------------------------------------------
+! f routine to compute the ODE RHS function f(t,y). 
+!-----------------------------------------------------------------
+  ! declarations
+  use UserData
+  implicit none
+  include "mpif.h"
+  real*8,  intent(in)  :: t, rpar
+  integer, intent(in)  :: ipar
+  integer, intent(out) :: ierr
+  real*8,  intent(in)  :: y(nxl,nyl)
+  real*8,  intent(out) :: ydot(nxl,nyl)
+  real*8    :: c1, c2, c3
+  integer*8 :: i, j
+  
+  ! internals
+
+  ! Initialize ydot to zero 
+  ydot = 0.d0
+
+  ! Exchange boundary data with neighbors
+  call Exchange(y, ierr)
+  if (ierr /= MPI_SUCCESS) then
+     write(0,*) "Error in Exchange = " , ierr
+     return
+  end if
+
+  ! iterate over subdomain interior, computing approximation to RHS
+  c1 = kx/dx/dx
+  c2 = ky/dy/dy
+  c3 = -2.d0*(c1 + c2)
+  do j=2,nyl-1
+     do i=2,nxl-1
+        ydot(i,j) = c1*(y(i-1,j)+y(i+1,j)) + c2*(y(i,j-1)+y(i,j+1)) + c3*y(i,j)
+     enddo
+  enddo
+  
+  ! iterate over subdomain boundaries (if not at overall domain boundary)
+  if (.not. HaveBdry(1,1)) then    ! West face
+     i=1
+     do j=2,nyl-1
+        ydot(i,j) = c1*(Wrecv(j)+y(i+1,j)) + c2*(y(i,j-1)+y(i,j+1)) + c3*y(i,j)
+     enddo
+  endif
+  if (.not. HaveBdry(1,2)) then    ! East face
+     i=nxl
+     do j=2,nyl-1
+        ydot(i,j) = c1*(y(i-1,j)+Erecv(j)) + c2*(y(i,j-1)+y(i,j+1)) + c3*y(i,j)
+     enddo
+  endif
+  if (.not. HaveBdry(2,1)) then    ! South face
+     j=1
+     do i=2,nxl-1
+        ydot(i,j) = c1*(y(i-1,j)+y(i+1,j)) + c2*(Srecv(i)+y(i,j+1)) + c3*y(i,j)
+     enddo
+  endif
+  if (.not. HaveBdry(2,2)) then    ! West face
+     j=nyl
+     do i=2,nxl-1
+        ydot(i,j) = c1*(y(i-1,j)+y(i+1,j)) + c2*(y(i,j-1)+Nrecv(i)) + c3*y(i,j)
+     enddo
+  endif
+  if (.not. HaveBdry(1,1) .and. .not. HaveBdry(2,1)) then  ! South-West corner
+     i=1
+     j=1
+     ydot(i,j) = c1*(Wrecv(j)+y(i+1,j)) + c2*(Srecv(i)+y(i,j+1)) + c3*y(i,j)
+  endif
+  if (.not. HaveBdry(1,1) .and. .not. HaveBdry(2,2)) then  ! North-West corner
+     i=1
+     j=nyl
+     ydot(i,j) = c1*(Wrecv(j)+y(i+1,j)) + c2*(y(i,j-1)+Nrecv(i)) + c3*y(i,j)
+  endif
+  if (.not. HaveBdry(1,2) .and. .not. HaveBdry(2,1)) then  ! South-East corner
+     i=nxl 
+     j=1
+     ydot(i,j) = c1*(y(i-1,j)+Erecv(j)) + c2*(Srecv(i)+y(i,j+1)) + c3*y(i,j)
+  endif
+  if (.not. HaveBdry(1,2) .and. .not. HaveBdry(2,2)) then  ! North-East corner
+     i=nxl
+     j=nyl
+     ydot(i,j) = c1*(y(i-1,j)+Erecv(j)) + c2*(y(i,j-1)+Nrecv(i)) + c3*y(i,j)
+  endif
+
+  ydot = ydot + h         ! add in heat source
+
+  ierr = 0                ! Return with success 
+  return
+end subroutine farkifun
+!-----------------------------------------------------------------
+
+
+subroutine farkefun(t, y, ydot, ipar, rpar, ierr)
+!-----------------------------------------------------------------
+! Explicit portion of f routine (empty)
+!-----------------------------------------------------------------
+  ! declarations
+  use UserData
+  implicit none
+  real*8,  intent(in)  :: t, rpar
+  integer, intent(in)  :: ipar
+  integer, intent(out) :: ierr
+  real*8,  intent(in)  :: y(nxl,nyl)
+  real*8,  intent(out) :: ydot(nxl,nyl)
+  
+  ! internals
+
+  ! Initialize ydot to zero and return with success
+  ydot = 0.d0
+  ierr = 0
+  return
+end subroutine farkefun
+!-----------------------------------------------------------------
+
+
+subroutine farkpset(t, y, fy, jok, jcur, gamma, hcur, ipar, &
+                    rpar, v1, v2, v3, ierr)
+!-----------------------------------------------------------------
+! Preconditioner setup routine (fills inverse of Jacobian diagonal)
+!-----------------------------------------------------------------
+  ! declarations
+  use UserData
+  implicit none
+  real*8,  intent(in)  :: t, gamma, hcur, rpar
+  integer, intent(in)  :: ipar, jok
+  integer, intent(out) :: jcur, ierr
+  real*8,  intent(in)  :: y(nxl,nyl), fy(nxl,nyl)
+  real*8               :: v1(nxl,nyl), v2(nxl,nyl), v3(nxl,nyl)
+  real*8 :: c
+
+  ! internals
+  c = 1.d0 + gamma*2.d0*(kx/dx/dx + ky/dy/dy)
+
+  ! set all entries of d to the inverse of the diagonal values in interior
+  ! (since boundary RHS is 0, set boundary diagonals to the same)
+  d = 1.d0/c
+
+  jcur = 1     ! update jcur flag
+  ierr = 0     ! Return with success 
+  return
+end subroutine farkpset
+
+
+subroutine farkpsol(t, y, fy, r, z, gamma, delta, lr, &
+                    ipar, rpar, vt, ierr)
+!-----------------------------------------------------------------
+! Preconditioner solve routine
+!-----------------------------------------------------------------
+  ! declarations
+  use UserData
+  implicit none
+  real*8,  intent(in)  :: t, gamma, delta, rpar
+  integer, intent(in)  :: lr, ipar
+  integer, intent(out) :: ierr
+  real*8,  intent(in)  :: y(nxl,nyl), fy(nxl,nyl), r(nxl,nyl)
+  real*8,  intent(out) :: z(nxl,nyl)
+  real*8               :: vt(nxl,nyl)
+
+  ! internals
+  z = r*d      ! perform Jacobi iteration (whole array operation)
+  ierr = 0     ! Return with success 
+  return
+end subroutine farkpsol
+!-----------------------------------------------------------------
+
diff --git a/examples/arkode/F90_parallel/fark_heat2D.out b/examples/arkode/F90_parallel/fark_heat2D.out
new file mode 100644
index 0000000..3160697
--- /dev/null
+++ b/examples/arkode/F90_parallel/fark_heat2D.out
@@ -0,0 +1,49 @@
+   
+ 2D Heat PDE test problem:
+   nprocs =    2
+   nx =   60
+   ny =  120
+   kx =  0.50
+   ky =  0.75
+   rtol =  1.00E-05
+   atol =  1.00E-10
+   nxl (proc 0) =   30
+   nyl (proc 0) =  120
+   
+         t      ||u||_rms
+    ----------------------
+    0.000000    0.000000
+    0.015000    0.005780
+    0.030000    0.009224
+    0.045000    0.011275
+    0.060000    0.012497
+    0.075000    0.013224
+    0.090000    0.013658
+    0.105000    0.013916
+    0.120000    0.014070
+    0.135000    0.014162
+    0.150000    0.014216
+    0.165000    0.014249
+    0.180000    0.014268
+    0.195000    0.014280
+    0.210000    0.014287
+    0.225000    0.014291
+    0.240000    0.014293
+    0.255000    0.014295
+    0.270000    0.014295
+    0.285000    0.014296
+    0.300000    0.014296
+    ----------------------
+   
+ Final Solver Statistics:
+   Internal solver steps =     58 (attempted =     60)
+   Total RHS evals:  Fe =      0,  Fi =    604
+   Total linear solver setups =     20
+   Total linear iterations =   4963
+   Total number of Jacobian-vector products =   4963
+   Total number of Preconditioner setups =     20
+   Total number of Preconditioner solves =   5142
+   Total number of linear solver convergence failures =    179
+   Total number of Newton iterations =    300
+   Total number of nonlinear solver convergence failures =      0
+   Total number of error test failures =      2
diff --git a/examples/arkode/F90_parallel/plot_heat2D.py b/examples/arkode/F90_parallel/plot_heat2D.py
new file mode 100755
index 0000000..01158eb
--- /dev/null
+++ b/examples/arkode/F90_parallel/plot_heat2D.py
@@ -0,0 +1,141 @@
+#!/usr/bin/env python
+# ----------------------------------------------------------------
+# Programmer(s): Daniel R. Reynolds @ SMU
+# ----------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ----------------------------------------------------------------
+# matplotlib-based plotting script for heat2D.cpp example
+
+# imports
+import sys
+import numpy as np
+from pylab import *
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+import matplotlib.pyplot as plt
+
+# determine the number of MPI processes used
+nprocs=1
+for i in range(1000):
+    sname = 'heat2d_subdomain.' + repr(i).zfill(3) + '.txt'
+    try:
+        f = open(sname,'r')
+        f.close()
+    except IOError:
+        nprocs = i
+        break
+
+# load subdomain information, store in table
+subdomains = np.zeros((nprocs,4), dtype=np.int)
+for i in range(nprocs):
+    sname = 'heat2d_subdomain.' + repr(i).zfill(3) + '.txt'
+    subd = np.loadtxt(sname, dtype=np.int)
+    if (i == 0):
+        nx = subd[0]
+        ny = subd[1]
+    else:
+        if ((subd[0] != nx) or (subd[1] != ny)):
+            sys.exit("error: subdomain files incompatible (clean up and re-run test)")
+    subdomains[i,:] = subd[2:6]
+    
+# load first processor's data, and determine total number of time steps
+data = np.loadtxt('heat2d.000.txt', dtype=np.double)
+nt = np.shape(data)[0]
+
+# create empty array for all solution data
+results = np.zeros((nt,ny,nx))
+
+# insert first processor's data into results array
+istart = subdomains[0,0]-1
+iend = subdomains[0,1]-1
+jstart = subdomains[0,2]-1
+jend = subdomains[0,3]-1
+nxl = iend-istart+1
+nyl = jend-jstart+1
+for i in range(nt):
+    results[i,jstart:jend+1,istart:iend+1] = np.reshape(data[i,:], (nyl,nxl))
+    
+# iterate over remaining data files, inserting into output
+if (nprocs > 1):
+    for isub in range(1,nprocs):
+        data = np.loadtxt('heat2d.' + repr(isub).zfill(3) + '.txt', dtype=np.double)
+        # check that subdomain has correct number of time steps
+        if (np.shape(data)[0] != nt):
+            sys.exit('error: subdomain ' + isub + ' has an incorrect number of time steps')
+        istart = subdomains[isub,0]-1
+        iend = subdomains[isub,1]-1
+        jstart = subdomains[isub,2]-1
+        jend = subdomains[isub,3]-1
+        nxl = iend-istart+1
+        nyl = jend-jstart+1
+        for i in range(nt):
+            results[i,jstart:jend+1,istart:iend+1] = np.reshape(data[i,:], (nyl,nxl))
+
+# determine extents of plots
+maxtemp = 1.1*results.max()
+mintemp = 0.9*results.min()
+
+# generate plots of results
+kx = 0.5
+ky = 0.75
+kprod = (kx+4.0*ky)*np.pi**2
+dt = 0.015
+for tstep in range(nt):
+
+    # set string constants for output plots, current time, mesh size
+    pname = 'heat2d_surf.' + repr(tstep).zfill(3) + '.png'
+    cname = 'heat2d_err.' + repr(tstep).zfill(3) + '.png'
+    tstr  = repr(tstep)
+    nxstr = repr(nx)
+    nystr = repr(ny)
+
+    # set x and y meshgrid objects
+    xspan = np.linspace(0.0, 1.0, nx)
+    yspan = np.linspace(0.0, 1.0, ny)
+    X,Y = np.meshgrid(xspan,yspan)
+
+    # plot current solution as a surface, and save to disk
+    fig = plt.figure(1)
+    ax = fig.add_subplot(111, projection='3d')
+    ax.plot_surface(X, Y, results[tstep,:,:], rstride=1, cstride=1, 
+                    cmap=cm.jet, linewidth=0, antialiased=True, shade=True)
+    ax.set_xlabel('x')
+    ax.set_ylabel('y')
+    ax.set_zlim((mintemp, maxtemp))
+    ax.view_init(20,45)
+    title('u(x,y) at output ' + tstr + ', mesh = ' + nxstr + 'x' + nystr)
+    savefig(pname)
+    plt.close()
+
+    # plot error in current solution (as a contour, and save to disk)
+    t = tstep*dt;
+    at = (1.0 - np.exp(-t*kprod))/kprod
+    utrue = at*np.sin(np.pi*X)*np.sin(2.0*np.pi*Y);
+    uerr = np.abs(utrue - results[tstep,:,:])
+    plt.contourf(xspan,yspan,uerr,15, cmap=plt.cm.jet)
+    plt.colorbar()
+    plt.xlabel('x')
+    plt.ylabel('y')
+    plt.title('Error at output ' + tstr + ', mesh = ' + nxstr + 'x' + nystr)
+    plt.savefig(cname)
+    plt.close()
+
+
+
+
+##### end of script #####
diff --git a/examples/arkode/F90_serial/CMakeLists.txt b/examples/arkode/F90_serial/CMakeLists.txt
new file mode 100644
index 0000000..62e01db
--- /dev/null
+++ b/examples/arkode/F90_serial/CMakeLists.txt
@@ -0,0 +1,185 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for the FARKODE serial examples
+
+
+# Add variable FARKODE_examples with the names of the serial FARKODE examples
+
+SET(FARKODE_examples
+  ark_bruss
+  )
+
+# Add variable FARKODE_examples_BL with the names of the serial FARKODE examples
+# that use Lapack
+
+SET(FARKODE_examples_BL
+  )
+
+# Add variable FARKODE_examples_KLU with the names of the serial FARKODE examples
+# that use KLU
+
+SET(FARKODE_examples_KLU
+  ark_bruss1D_FEM_klu
+  )
+
+# Add variable ARKODE_extras with the names of auxiliary files to install
+
+SET(ARKODE_extras
+  plot_sol.py
+  plot_brusselator1D_FEM.py
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+  SET(FNVECS_LIB sundials_fnvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(ARKODE_LIB sundials_arkode_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+  SET(FNVECS_LIB sundials_fnvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FARKODE_LIB sundials_farkode_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FARKODE_LIB} ${ARKODE_LIB} ${FNVECS_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each FARKODE example
+
+FOREACH(example ${FARKODE_examples})
+  ADD_EXECUTABLE(${example} ${example}.f90)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f90 ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${FARKODE_examples})
+
+# Add the build and install targets for each Lapack FARKODE example (if needed)
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${FARKODE_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.f90)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.f90 ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${FARKODE_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+# If KLU support is enabled, add the build and install targets for 
+# the examples using KLU
+IF(KLU_FOUND)
+  FOREACH(example ${FARKODE_examples_KLU})
+    ADD_EXECUTABLE(${example} ${example}.f90)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.f90 ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${FARKODE_examples_KLU})
+ENDIF(KLU_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_serial)
+
+  # Install the extra files
+  FOREACH(extrafile ${ARKODE_extras})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_serial)
+  ENDFOREACH(extrafile ${ARKODE_extras})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "ARKODE")
+  SET(SOLVER_LIB "sundials_arkode")
+  SET(SOLVER_FLIB "sundials_farkode")
+  LIST2STRING(FARKODE_examples EXAMPLES)
+
+  IF(LAPACK_FOUND)
+    LIST2STRING(FARKODE_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  IF(KLU_FOUND)
+    LIST2STRING(FARKODE_examples_KLU EXAMPLES)
+  ENDIF(KLU_FOUND)
+
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_F90_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/F90_serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/arkode/F90_serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_F90_ex.in
+      ${PROJECT_BINARY_DIR}/examples/arkode/F90_serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/arkode/F90_serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/arkode/F90_serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/arkode/F90_serial/README b/examples/arkode/F90_serial/README
new file mode 100644
index 0000000..5bd2743
--- /dev/null
+++ b/examples/arkode/F90_serial/README
@@ -0,0 +1,51 @@
+List of serial ARKODE F90 examples
+
+  ark_bruss : chemical kinetics example (DIRK/DENSE)
+  ark_bruss1D_FEM_klu : stiff chemical kinetics PDE, with FEM
+                        spatial discretization and CSR Jacobian (DIRK/KLU)
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/arkode/F90_serial/ark_bruss.f90 b/examples/arkode/F90_serial/ark_bruss.f90
new file mode 100644
index 0000000..ca57b8f
--- /dev/null
+++ b/examples/arkode/F90_serial/ark_bruss.f90
@@ -0,0 +1,299 @@
+!-----------------------------------------------------------------
+! Programmer(s): Daniel R. Reynolds @ SMU
+!-----------------------------------------------------------------
+! LLNS/SMU Copyright Start
+! Copyright (c) 2015, Southern Methodist University and 
+! Lawrence Livermore National Security
+!
+! This work was performed under the auspices of the U.S. Department 
+! of Energy by Southern Methodist University and Lawrence Livermore 
+! National Laboratory under Contract DE-AC52-07NA27344.
+! Produced at Southern Methodist University and the Lawrence 
+! Livermore National Laboratory.
+!
+! All rights reserved.
+! For details, see the LICENSE file.
+! LLNS/SMU Copyright End
+! Copyright (c) 2013, Southern Methodist University.
+! All rights reserved.
+! For details, see the LICENSE file.
+!-----------------------------------------------------------------
+! Example problem:
+! 
+! The following test simulates a brusselator problem from chemical 
+! kinetics.  This is an ODE system with 3 components, Y = [u,v,w], 
+! satisfying the equations,
+!    du/dt = a - (w+1)*u + v*u^2
+!    dv/dt = w*u - v*u^2
+!    dw/dt = (b-w)/ep - w*u
+! for t in the interval [0.0, 10.0], with initial conditions 
+! Y0 = [u0,v0,w0].  We use the initial conditions and parameters 
+!    u0=3.9,  v0=1.1,  w0=2.8,  a=1.2,  b=2.5,  ep=1.0e-5
+! Here, all three solution components exhibit a rapid transient 
+! change during the first 0.2 time units, followed by a slow and 
+! smooth evolution.
+! 
+! This program solves a the Fortran ODE test problem using the 
+! FARKODE interface for the ARKode ODE solver module.
+! 
+! This program uses the IMEX ARK solver; here the 
+! implicit systems are solved with a modified Newton iteration
+! with the ARKDENSE dense linear solver.  The Jacobian routine 
+! and right-hand side routines come from the file user-supplied 
+! Jacobian routine.
+!
+! Output is printed 10 times throughout the defined time interval.
+! Run statistics (optional outputs) are printed at the end.
+!-----------------------------------------------------------------
+
+!-----------------------------------------------------------------
+! Main driver program
+!-----------------------------------------------------------------
+program driver
+  ! Declarations
+  implicit none
+
+  ! general problem variables
+  integer*8, parameter :: NEQ=3
+  real*8,    parameter :: T0=0.d0, Tf=10.d0
+  real*8    :: dTout, Tout, Tcur, rtol, atol, rout(6)
+  integer   :: it, Nt, ier
+  integer*8 :: iout(22)
+  real*8, dimension(NEQ) :: y
+
+  ! real/integer parameters to pass through to supplied functions
+  !    ipar(1) -> unused
+  !    rpar(1) -> "a" parameter
+  !    rpar(2) -> "b" parameter 
+  !    rpar(3) -> "ep" parameter
+  integer*8 :: ipar
+  real*8    :: rpar(3)
+
+  ! solver parameters
+  integer*8 :: order, adapt_method
+  real*8    :: nlscoef
+
+  !-----------------------
+  ! set some solver parameters
+  order = 3          ! 4th order method
+  adapt_method = 0   ! PID-controller
+  nlscoef = 1.d-2    ! Newton solver tolerance coefficient
+
+  ! time-stepping information
+  dTout = (Tf-T0)/10.d0    ! output time interval
+  Nt = Tf/dTout + 0.5      ! number of outputs
+
+  ! set initial conditions, problem parameters
+  y(1) = 3.9d0     ! u0
+  y(2) = 1.1d0     ! v0
+  y(3) = 2.8d0     ! w0
+  rpar(1) = 1.2d0  ! a
+  rpar(2) = 2.5d0  ! b
+  rpar(3) = 1.d-5  ! ep
+
+  ! set tolerances according to problem specifications
+  atol = 1.d-10
+  rtol = 1.d-6
+  
+  ! initialize vector module
+  call FNVInitS(4, NEQ, ier)
+  if (ier < 0) then
+     write(0,*) 'Error in FNVInitS = ',ier
+     stop
+  endif
+
+  ! initialize ARKode solver to use IMEX integrator, scalar tolerances
+  call FARKMalloc(T0, y, 2, 1, rtol, atol, &
+                  iout, rout, ipar, rpar, ier)
+  if (ier < 0) then
+     write(0,*) 'Error in FARKMalloc = ',ier
+     stop
+  endif
+
+  ! set integrator options
+  call FARKSetIin('ORDER', order, ier)
+  if (ier < 0) then
+     write(0,*) 'Error in FARKSetIin = ',ier
+     stop
+  endif
+  call FARKSetRin('NLCONV_COEF', nlscoef, ier)
+  if (ier < 0) then
+     write(0,*) 'Error in FARKSetIin = ',ier
+     stop
+  endif
+  call FARKSetAdaptivityMethod(adapt_method, 1, 0, 0, ier)
+  if (ier < 0) then
+     write(0,*) 'Error in FARKSetAdaptMethod = ',ier
+     stop
+  endif
+
+  ! specify use of dense linear solver
+  call FARKDense(NEQ, ier)
+  if (ier < 0) then
+     write(0,*) 'Error in FARKDense = ',ier
+     stop
+  endif
+  call FARKDenseSetJac(1, ier)
+  if (ier < 0) then
+     write(0,*) 'Error in FARKDenseSetJac = ',ier
+     stop
+  endif
+
+  ! Open output stream for results, output comment line
+  open(100, file='solution.txt')
+  write(100,*) '# t u v w'
+
+  ! output initial condition to disk 
+  write(100,'(3x,4(es23.16,1x))') T0, y
+
+  ! loop over time outputs
+  Tout = T0
+  Tcur = T0
+  print *, '        t           u           v           w'
+  print *, '  ----------------------------------------------------'
+  print '(3x,4(es12.5,1x))', Tcur, y
+  do it = 1,Nt
+
+     Tout = min(Tout + dTout, Tf)           ! set next output time
+     call FARKode(Tout, Tcur, y, 1, ier)    ! call solver
+     if (ier < 0) then
+        print *, 'Error at step ',it,', FARKode return flag =',ier
+        exit
+     end if
+
+     ! output current solution
+     print '(3x,4(es12.5,1x))', Tcur, y
+     write(100,'(3x,4(es23.16,1x))') Tcur, y
+
+  end do
+  print *, '  ----------------------------------------------------'
+  close(100)
+
+  ! output solver statistics
+  print *, '  '
+  print *, 'Final Solver Statistics:'
+  print '(2(A,i7),A)', '   Internal solver steps =', iout(3), &
+       ' (attempted =', iout(6), ')'
+  print '(2(A,i7))', '   Total RHS evals:  Fe =', iout(7), &
+       ',  Fi =', iout(8)
+  print '(A,i7)', '   Total linear solver setups =', iout(9)
+  print '(A,i7)', '   Total RHS evals for setting up the linear system =', iout(17)
+  print '(A,i7)', '   Total number of Jacobian evaluations =', iout(18)
+  print '(A,i7)', '   Total number of Newton iterations =', iout(11)
+  print '(A,i7)', '   Total number of nonlinear solver convergence failures =', iout(12)
+  print '(A,i7)', '   Total number of error test failures =', iout(10)
+  print *, '  '
+
+  ! clean up
+  call FARKFree()
+
+end program driver
+!-----------------------------------------------------------------
+
+!-----------------------------------------------------------------
+! Required subroutines for FARKODE interface
+!-----------------------------------------------------------------
+
+subroutine farkifun(t, y, ydot, ipar, rpar, ier)
+!-----------------------------------------------------------------
+! Implicit portion of the right-hand side of the ODE system
+!-----------------------------------------------------------------
+
+  ! Declarations
+  implicit none
+
+  ! Arguments
+  real*8,    intent(in)  :: t, rpar(3)
+  integer*8, intent(in)  :: ipar(1)
+  integer,   intent(out) :: ier
+  real*8,    intent(in)  :: y(3)
+  real*8,    intent(out) :: ydot(3)
+
+  ! temporary variables
+  real*8 :: u, v, w, a, b, ep
+
+  ! set temporary values
+  a  = rpar(1)
+  b  = rpar(2)
+  ep = rpar(3)
+  u  = y(1)
+  v  = y(2)
+  w  = y(3)
+
+  ! fill implicit RHS, set success flag
+  ydot(1) = 0.d0
+  ydot(2) = 0.d0
+  ydot(3) = (b-w)/ep
+  ier = 0
+  
+end subroutine farkifun
+!-----------------------------------------------------------------
+
+subroutine farkefun(t, y, ydot, ipar, rpar, ier)
+!-----------------------------------------------------------------
+! Explicit portion of the right-hand side of the ODE system
+!-----------------------------------------------------------------
+
+  ! Declarations
+  implicit none
+
+  ! Arguments
+  real*8,    intent(in)  :: t, rpar(3)
+  integer*8, intent(in)  :: ipar(1)
+  integer,   intent(out) :: ier
+  real*8,    intent(in)  :: y(3)
+  real*8,    intent(out) :: ydot(3)
+
+  ! temporary variables
+  real*8 :: u, v, w, a, b, ep
+
+  ! set temporary values
+  a  = rpar(1)
+  b  = rpar(2)
+  ep = rpar(3)
+  u  = y(1)
+  v  = y(2)
+  w  = y(3)
+
+  ! fill explicit RHS, set success flag
+  ydot(1) = a - (w+1.d0)*u + v*u*u
+  ydot(2) = w*u - v*u*u
+  ydot(3) = -w*u
+  ier = 0
+  
+end subroutine farkefun
+!-----------------------------------------------------------------
+
+subroutine farkdjac(neq,t,y,fy,DJac,h,ipar,rpar,wk1,wk2,wk3,ier)
+!-----------------------------------------------------------------
+! Jacobian computation routine
+!-----------------------------------------------------------------
+
+  ! Declarations
+  implicit none
+
+  ! Arguments
+  real*8,    intent(in)  :: t, h, rpar(3)
+  integer*8, intent(in)  :: neq, ipar(1)
+  integer,   intent(out) :: ier
+  real*8,    intent(in), dimension(neq) :: y, fy, wk1, wk2, wk3
+  real*8,    intent(out) :: DJac(neq,neq)
+
+  ! temporary variables
+  real*8 :: u, v, w, a, b, ep
+
+  ! set temporary values
+  a  = rpar(1)
+  b  = rpar(2)
+  ep = rpar(3)
+  u  = y(1)
+  v  = y(2)
+  w  = y(3)
+
+  ! fill implicit Jacobian, set success flag
+  DJac = 0.d0
+  DJac(3,3) = -1.d0/ep
+  ier = 0
+    
+end subroutine farkdjac
+!-----------------------------------------------------------------
diff --git a/examples/arkode/F90_serial/ark_bruss.out b/examples/arkode/F90_serial/ark_bruss.out
new file mode 100644
index 0000000..cc8b664
--- /dev/null
+++ b/examples/arkode/F90_serial/ark_bruss.out
@@ -0,0 +1,25 @@
+         t           u           v           w
+   ----------------------------------------------------
+    0.00000E+00  3.90000E+00  1.10000E+00  2.80000E+00
+    1.00000E+00  2.07527E+00  1.05960E+00  2.49998E+00
+    2.00000E+00  1.10046E+00  1.72361E+00  2.49999E+00
+    3.00000E+00  7.89620E-01  2.32667E+00  2.50000E+00
+    4.00000E+00  8.11773E-01  2.72558E+00  2.49991E+00
+    5.00000E+00  1.18700E+00  2.59554E+00  2.49990E+00
+    6.00000E+00  1.88731E+00  1.49410E+00  2.49997E+00
+    7.00000E+00  1.32327E+00  1.61902E+00  2.50004E+00
+    8.00000E+00  9.21787E-01  2.13022E+00  2.49999E+00
+    9.00000E+00  8.49543E-01  2.53947E+00  2.49994E+00
+    1.00000E+01  1.06497E+00  2.59595E+00  2.49990E+00
+   ----------------------------------------------------
+   
+ Final Solver Statistics:
+   Internal solver steps =    907 (attempted =    936)
+   Total RHS evals:  Fe =   3748,  Fi =   7536
+   Total linear solver setups =    157
+   Total RHS evals for setting up the linear system =      0
+   Total number of Jacobian evaluations =     28
+   Total number of Newton iterations =   3788
+   Total number of nonlinear solver convergence failures =      0
+   Total number of error test failures =     29
+   
diff --git a/examples/arkode/F90_serial/ark_bruss1D_FEM_klu.f90 b/examples/arkode/F90_serial/ark_bruss1D_FEM_klu.f90
new file mode 100644
index 0000000..5694c29
--- /dev/null
+++ b/examples/arkode/F90_serial/ark_bruss1D_FEM_klu.f90
@@ -0,0 +1,1134 @@
+!-----------------------------------------------------------------
+! Programmer(s): Daniel R. Reynolds @ SMU
+!-----------------------------------------------------------------
+! Copyright (c) 2016, Southern Methodist University.
+! All rights reserved.
+! For details, see the LICENSE file.
+!-----------------------------------------------------------------
+! Example problem:
+! 
+! The following test simulates a brusselator problem from chemical 
+! kinetics.  This is a PDE system with 3 components, Y = [u,v,w], 
+! satisfying the equations,
+!    du/dt = du*u_xx + a - (w+1)*u + v*u^2
+!    dv/dt = dv*v_xx + w*u - v*u^2
+!    dw/dt = dw*w_xx + (b-w)/ep - w*u
+! for t in the interval [0, 10], x in [0, 10], with initial 
+! conditions 
+!    u(0,x) =  a  + 0.1*sin(pi*x),
+!    v(0,x) = b/a + 0.1*sin(pi*x),
+!    w(0,x) =  b  + 0.1*sin(pi*x),
+! and with stationary boundary conditions, i.e.
+!    u_t(t,0) = u_t(t,1) = 0,
+!    v_t(t,0) = v_t(t,1) = 0,
+!    w_t(t,0) = w_t(t,1) = 0.
+!
+! Here, we use a piecewise linear Galerkin finite element 
+! discretization in space, where all element-wise integrals are 
+! computed using 3-node Gaussian quadrature (since we will have 
+! quartic polynomials in the reaction terms for the u_t and v_t 
+! equations (including the test function)).  The time derivative 
+! terms in this system will include a mass matrix, giving rise to 
+! an ODE system of the form
+!      M y_t = L y + R(y),
+! where M is the 3x3 block mass matrix for each component, L is 
+! the 3x3 block Laplace operator for each component, and R(y) is 
+! comprised of the nonlinear reaction terms for each component.  
+! Since it it highly inefficient to rewrite this system as
+!      y_t = M^{-1}(L y + R(y)),
+! we solve this system using FARKODE, with a user-supplied mass
+! matrix.  We therefore provide functions to evaluate the ODE RHS 
+!    f(t,y) = L y + R(y),
+! its Jacobian
+!    J(t,y) = L + dR/dy,
+! and the mass matrix, M.
+!
+! We use N=201 spatial nodes, with parameters 
+!    a=0.6,  b=2.0,  du=0.025,  dv=0.025,  dw=0.025,  ep=1.d-5
+!
+! This program solves the problem with the DIRK method, using a 
+! Newton iteration with the ARKKLU and ARKMASSKLU sparse linear 
+! solvers, where we store the Jacobian and mass matrices in 
+! compressed-sparse-row format.
+!
+! Output is printed 10 times throughout the defined time interval.
+! Run statistics (optional outputs) are printed at the end.
+!-----------------------------------------------------------------
+
+
+! user data structure
+module UserData
+  implicit none
+  save
+  
+  integer :: N                     ! number of intervals
+  real*8, allocatable :: x(:)      ! mesh node locations
+  real*8 :: a                      ! constant forcing on u
+  real*8 :: b                      ! steady-state value of w
+  real*8 :: du                     ! diffusion coeff for u
+  real*8 :: dv                     ! diffusion coeff for v
+  real*8 :: dw                     ! diffusion coeff for w
+  real*8 :: ep                     ! stiffness parameter
+
+contains
+
+  ! function that maps 2D data into 1D address space
+  ! (0-based since CSR matrix will be sent to C solver)
+  integer(kind=8) function idx(ix,ivar)
+    integer :: ivar, ix
+    idx = 3*(ix-1) + ivar - 1
+  end function idx
+
+end module UserData
+
+
+! finite element basis functions
+module FEM
+  
+contains
+  
+  ! left/right basis functions
+  double precision function ChiL(xl,xr,x)
+    double precision :: xl, xr, x
+    ChiL = (xr-x)/(xr-xl)
+  end function ChiL
+
+  double precision function ChiR(xl,xr,x)
+    double precision :: xl, xr, x
+    ChiR = (x-xl)/(xr-xl)
+  end function ChiR
+
+  ! derivatives of left/right basis functions
+  double precision function ChiL_x(xl,xr)
+    double precision :: xl, xr
+    ChiL_x = 1.d0/(xl-xr)
+  end function ChiL_X
+
+  double precision function ChiR_x(xl,xr)
+    double precision :: xl, xr
+    ChiR_x = 1.d0/(xr-xl)
+  end function ChiR_x
+
+  ! FEM output evaluation routines: value and derivative
+  double precision function Eval(ul,ur,xl,xr,x)
+    double precision :: ul, ur, xl, xr, x
+    Eval = ul*ChiL(xl,xr,x) + ur*ChiR(xl,xr,x)
+  end function Eval
+
+  double precision function Eval_x(ul,ur,xl,xr)
+    double precision :: ul, ur, xl, xr
+    Eval_x = ul*ChiL_x(xl,xr) + ur*ChiR_x(xl,xr)
+  end function Eval_x
+
+end module FEM
+
+
+! quadrature data
+module Quadrature
+  
+contains
+
+  ! nodes
+  double precision function X1(xl,xr)
+    double precision :: xl, xr
+    X1 = 0.5d0*(xl+xr) - 0.5d0*(xr-xl)*0.774596669241483377035853079956d0
+  end function X1
+
+  double precision function X2(xl,xr)
+    double precision :: xl, xr
+    X2 = 0.5d0*(xl+xr)
+  end function X2
+
+  double precision function X3(xl,xr)
+    double precision :: xl, xr
+    X3 = 0.5d0*(xl+xr) + 0.5d0*(xr-xl)*0.774596669241483377035853079956d0
+  end function X3
+
+  ! quadrature 
+  double precision function Quad(f1,f2,f3,xl,xr)
+    real*8 :: f1, f2, f3, xl, xr
+    real*8, parameter :: wt1=0.55555555555555555555555555555556d0
+    real*8, parameter :: wt2=0.88888888888888888888888888888889d0
+    real*8, parameter :: wt3=0.55555555555555555555555555555556d0
+    Quad = 0.5d0*(xr-xl)*(wt1*f1 + wt2*f2 + wt3*f3)
+  end function Quad
+
+end module Quadrature
+!-----------------------------------------------------------------
+
+
+
+
+!-----------------------------------------------------------------
+! Main driver program
+!-----------------------------------------------------------------
+program driver
+  use UserData
+
+  ! Declarations
+  implicit none
+
+  ! general problem variables
+  real*8, parameter :: T0=0.d0, Tf=10.d0
+  real*8    :: dTout, Tout, Tcur, rtol, atol, pi, h, z, rout(6)
+  integer   :: i, it, Nt, ier, idef, ineq, nnz, ordering, sparsetype
+  integer*8 :: NEQ, iout(29)
+  real*8, allocatable :: y(:,:), umask(:,:), vmask(:,:), wmask(:,:)
+
+  ! dummy real/integer parameters to pass through to supplied functions
+  integer*8 :: ipar
+  real*8    :: rpar
+
+  !-----------------------
+
+  ! set problem parameters (in UserData structure)
+  N = 201                 ! number of intervals
+  a = 0.6d0               ! constant forcing on u
+  b = 2.d0                ! steady-state value of w
+  du = 2.5d-2             ! diffusion coeff for u
+  dv = 2.5d-2             ! diffusion coeff for v
+  dw = 2.5d-2             ! diffusion coeff for w
+  ep = 1.d-5              ! stiffness parameter
+
+  ! set overall problem size, allocate solution/mask/temporary arrays
+  NEQ = 3*N
+  allocate(y(3,N), umask(3,N), vmask(3,N), wmask(3,N))
+
+  ! allocate and set up spatial mesh; this [arbitrarily] clusters 
+  ! more intervals near the end points of the interval
+  allocate(x(N))          ! mesh node locations
+  pi = 4.d0*atan(1.d0)
+  h = 10.d0/(N-1)
+  do i=1,N
+     z = -5.d0 + h*(i-1)
+     x(i) = 0.5d0/atan(5.d0)*atan(z) + 0.5d0
+  enddo
+
+  ! output mesh to disk
+  open(200, file='bruss_FEM_mesh.txt')
+  do i=1,N
+     write(200,*) x(i)
+  enddo
+  close(200)
+
+  ! time-stepping information
+  dTout = (Tf-T0)/10.d0
+  Nt = Tf/dTout + 0.5
+
+  ! set initial conditions
+  do i=1,N
+     y(1,i) =  a  + 0.1d0*sin(pi*x(i))   ! u0
+     y(2,i) = b/a + 0.1d0*sin(pi*x(i))   ! v0
+     y(3,i) =  b  + 0.1d0*sin(pi*x(i))   ! w0
+  enddo
+
+  ! set mask values for each solution component
+  umask = 0.d0
+  vmask = 0.d0
+  wmask = 0.d0
+  do i=1,N
+     umask(1,i) = 1.d0
+     vmask(2,i) = 1.d0
+     wmask(3,i) = 1.d0
+  enddo
+
+  ! set tolerances according to problem specifications
+  atol = 1.d-11
+  rtol = 1.d-6
+  
+  ! initialize vector module
+  call FNVInitS(4, NEQ, ier)
+
+  ! initialize ARKode solver
+  ipar = 0
+  rpar = 0.0
+  iout = 0
+  rout = 0.0
+  call FARKMalloc(T0, y, 0, 1, rtol, atol, &
+                  iout, rout, ipar, rpar, ier)
+
+  ! set optional inputs
+  call FARKSetIin('IMPLICIT', 1, ier)
+  call FARKSetIin('MAX_NSTEPS', 1000, ier)
+  call FARKSetResTolerance(1, atol, ier)
+
+  ! specify use of KLU linear solvers
+  ineq = NEQ       ! convert to 'normal' integer type
+  nnz = 15*NEQ     ! integer number of nonzeros           
+  ordering = 0     ! AMD
+  sparsetype = 1   ! CSR
+  call FARKKLU(ineq, nnz, sparsetype, ordering, ier)
+  call FARKSparseSetJac(ier)
+  call FARKMassKLU(ineq, nnz, sparsetype, ordering, ier)
+  call FARKSparseSetMass(ier)
+
+  ! Open output stream for results
+  open(501, file='bruss_FEM_u.txt')
+  open(502, file='bruss_FEM_v.txt')
+  open(503, file='bruss_FEM_w.txt')
+
+  ! output initial condition to disk
+  write(501,*) ( y(1,i), i=1,N )
+  write(502,*) ( y(2,i), i=1,N )
+  write(503,*) ( y(3,i), i=1,N )
+ 
+  ! output solver parameters to screen
+  call FARKWriteParameters(ier)
+
+  ! loop over time outputs
+  Tout = T0
+  Tcur = T0
+  print *, '        t         ||u||_rms    ||v||_rms    ||w||_rms'
+  print *, '  ----------------------------------------------------'
+  print '(3x,4(es12.5,1x))', Tcur, sqrt(sum(y*y*umask)/N), &
+       sqrt(sum(y*y*vmask)/N), sqrt(sum(y*y*wmask)/N)
+  do it = 1,Nt
+
+     ! set next output time
+     Tout = min(Tout + dTout, Tf)
+
+     ! set next output time
+     call FARKSetRin('STOP_TIME', Tout, ier)
+
+     ! call solver
+     call FARKode(Tout, Tcur, y, 1, ier)
+     if (ier < 0) then
+        write(0,*) 'Solver failure, stopping integration'
+        stop
+     end if
+
+     ! output current solution information
+     print '(3x,4(es12.5,1x))', Tcur, sqrt(sum(y*y*umask)/N), &
+          sqrt(sum(y*y*vmask)/N), sqrt(sum(y*y*wmask)/N)
+
+     ! output current results to disk
+     write(501,*) ( y(1,i), i=1,N )
+     write(502,*) ( y(2,i), i=1,N )
+     write(503,*) ( y(3,i), i=1,N )
+ 
+  end do
+  print *, '  ----------------------------------------------------'
+
+  ! close solution output files
+  close(501)
+  close(502)
+  close(503)
+
+  ! output solver statistics
+  print *, '  '
+  print *, 'Final Solver Statistics:'
+  print *, '   Internal solver steps = ', iout(3),' (attempted =', iout(6), ')'
+  print *, '   Total RHS evals:  Fe = ', iout(7),'  Fi = ', iout(8)
+  print *, '   Total linear solver setups = ', iout(9)
+  print *, '   Total RHS evals for setting up the linear system = ', iout(17)
+  print *, '   Total number of Jacobian evaluations = ', iout(18)
+  print *, '   Total number of nonlinear iterations = ', iout(11)
+  print *, '   Total number of nonlinear solver convergence failures = ',iout(12)
+  print *, '   Total number of error test failures = ', iout(10)
+  print *, '   Total number of mass matrix evaluations = ', iout(26)
+  print *, '  '
+
+  ! clean up
+  deallocate(y, umask, vmask, wmask, x)
+  call FARKFree()
+
+end program driver
+!-----------------------------------------------------------------
+
+
+
+
+!-----------------------------------------------------------------
+! User-supplied subroutines for FARKODE interface
+!-----------------------------------------------------------------
+
+
+subroutine FARKIFun(t, y, ydot, ipar, rpar, ier)
+!-----------------------------------------------------------------
+! Right-hand side of the ODE system
+!-----------------------------------------------------------------
+  use UserData
+  use FEM
+  use Quadrature
+
+  ! Declarations
+  implicit none
+
+  ! Arguments
+  real*8,  intent(in)   :: t, rpar(1)
+  integer*8, intent(in) :: ipar(1)
+  integer, intent(out)  :: ier
+  real*8,  intent(in)   :: y(3,N)
+  real*8,  intent(out)  :: ydot(3,N)
+
+  ! Local data
+  integer :: ix
+  logical :: left, right
+  real*8  :: ul, ur, vl, vr, wl, wr, xl, xr, u, v, w, f1, f2, f3
+
+  ! clear out rhs
+  ydot = 0.d0
+
+  ! iterate over intervals, filling in rhs function
+  do ix=1,N-1
+
+     ! set booleans to determine whether equations exist on the left/right */
+     left  = .true.
+     right = .true.
+     if (ix==1)      left  = .false.
+     if (ix==(N-1))  right = .false.
+
+     ! set nodal value shortcuts (interval index aligns with left node)
+     ul = y(1,ix)
+     vl = y(2,ix)
+     wl = y(3,ix)
+     ur = y(1,ix+1)
+     vr = y(2,ix+1)
+     wr = y(3,ix+1)
+
+     ! set mesh shortcuts
+     xl = x(ix)
+     xr = x(ix+1)
+
+     !    left test function
+     if (left) then
+
+        ! u -- reaction
+        u = Eval(ul, ur, xl, xr, X1(xl,xr))
+        v = Eval(vl, vr, xl, xr, X1(xl,xr))
+        w = Eval(wl, wr, xl, xr, X1(xl,xr))
+        f1 = (a - (w+1.d0)*u + v*u*u) * ChiL(xl,xr,X1(xl,xr))
+        u = Eval(ul, ur, xl, xr, X2(xl,xr))
+        v = Eval(vl, vr, xl, xr, X2(xl,xr))
+        w = Eval(wl, wr, xl, xr, X2(xl,xr))
+        f2 = (a - (w+1.d0)*u + v*u*u) * ChiL(xl,xr,X2(xl,xr))
+        u = Eval(ul, ur, xl, xr, X3(xl,xr))
+        v = Eval(vl, vr, xl, xr, X3(xl,xr))
+        w = Eval(wl, wr, xl, xr, X3(xl,xr))
+        f3 = (a - (w+1.d0)*u + v*u*u) * ChiL(xl,xr,X3(xl,xr))
+        ydot(1,ix) = ydot(1,ix) + Quad(f1,f2,f3,xl,xr)
+
+        ! u -- diffusion
+        f1 = -du * Eval_x(ul,ur,xl,xr) * ChiL_x(xl,xr)
+        ydot(1,ix) = ydot(1,ix) + Quad(f1,f1,f1,xl,xr)
+
+        ! v -- reaction
+        u = Eval(ul, ur, xl, xr, X1(xl,xr))
+        v = Eval(vl, vr, xl, xr, X1(xl,xr))
+        w = Eval(wl, wr, xl, xr, X1(xl,xr))
+        f1 = (w*u - v*u*u) * ChiL(xl,xr,X1(xl,xr))
+        u = Eval(ul, ur, xl, xr, X2(xl,xr))
+        v = Eval(vl, vr, xl, xr, X2(xl,xr))
+        w = Eval(wl, wr, xl, xr, X2(xl,xr))
+        f2 = (w*u - v*u*u) * ChiL(xl,xr,X2(xl,xr))
+        u = Eval(ul, ur, xl, xr, X3(xl,xr))
+        v = Eval(vl, vr, xl, xr, X3(xl,xr))
+        w = Eval(wl, wr, xl, xr, X3(xl,xr))
+        f3 = (w*u - v*u*u) * ChiL(xl,xr,X3(xl,xr))
+        ydot(2,ix) = ydot(2,ix) + Quad(f1,f2,f3,xl,xr)
+      
+        ! v -- diffusion
+        f1 = -dv * Eval_x(vl,vr,xl,xr) * ChiL_x(xl,xr)
+        ydot(2,ix) = ydot(2,ix) + Quad(f1,f1,f1,xl,xr)
+      
+        ! w -- reaction
+        u = Eval(ul, ur, xl, xr, X1(xl,xr))
+        v = Eval(vl, vr, xl, xr, X1(xl,xr))
+        w = Eval(wl, wr, xl, xr, X1(xl,xr))
+        f1 = ((b-w)/ep - w*u) * ChiL(xl,xr,X1(xl,xr))
+        u = Eval(ul, ur, xl, xr, X2(xl,xr))
+        v = Eval(vl, vr, xl, xr, X2(xl,xr))
+        w = Eval(wl, wr, xl, xr, X2(xl,xr))
+        f2 = ((b-w)/ep - w*u) * ChiL(xl,xr,X2(xl,xr))
+        u = Eval(ul, ur, xl, xr, X3(xl,xr))
+        v = Eval(vl, vr, xl, xr, X3(xl,xr))
+        w = Eval(wl, wr, xl, xr, X3(xl,xr))
+        f3 = ((b-w)/ep - w*u) * ChiL(xl,xr,X3(xl,xr))
+        ydot(3,ix) = ydot(3,ix) + Quad(f1,f2,f3,xl,xr)
+
+        ! w -- diffusion
+        f1 = -dw * Eval_x(wl,wr,xl,xr) * ChiL_x(xl,xr)
+        ydot(3,ix) = ydot(3,ix) + Quad(f1,f1,f1,xl,xr)
+
+     end if
+
+     !    right test function 
+     if (right) then
+
+        ! u -- reaction
+        u = Eval(ul, ur, xl, xr, X1(xl,xr))
+        v = Eval(vl, vr, xl, xr, X1(xl,xr))
+        w = Eval(wl, wr, xl, xr, X1(xl,xr))
+        f1 = (a - (w+1.d0)*u + v*u*u) * ChiR(xl,xr,X1(xl,xr))
+        u = Eval(ul, ur, xl, xr, X2(xl,xr))
+        v = Eval(vl, vr, xl, xr, X2(xl,xr))
+        w = Eval(wl, wr, xl, xr, X2(xl,xr))
+        f2 = (a - (w+1.d0)*u + v*u*u) * ChiR(xl,xr,X2(xl,xr))
+        u = Eval(ul, ur, xl, xr, X3(xl,xr))
+        v = Eval(vl, vr, xl, xr, X3(xl,xr))
+        w = Eval(wl, wr, xl, xr, X3(xl,xr))
+        f3 = (a - (w+1.d0)*u + v*u*u) * ChiR(xl,xr,X3(xl,xr))
+        ydot(1,ix+1) = ydot(1,ix+1) + Quad(f1,f2,f3,xl,xr)
+
+        ! u -- diffusion
+        f1 = -du * Eval_x(ul,ur,xl,xr) * ChiR_x(xl,xr)
+        ydot(1,ix+1) = ydot(1,ix+1) + Quad(f1,f1,f1,xl,xr)
+
+        ! v -- reaction
+        u = Eval(ul, ur, xl, xr, X1(xl,xr))
+        v = Eval(vl, vr, xl, xr, X1(xl,xr))
+        w = Eval(wl, wr, xl, xr, X1(xl,xr))
+        f1 = (w*u - v*u*u) * ChiR(xl,xr,X1(xl,xr))
+        u = Eval(ul, ur, xl, xr, X2(xl,xr))
+        v = Eval(vl, vr, xl, xr, X2(xl,xr))
+        w = Eval(wl, wr, xl, xr, X2(xl,xr))
+        f2 = (w*u - v*u*u) * ChiR(xl,xr,X2(xl,xr))
+        u = Eval(ul, ur, xl, xr, X3(xl,xr))
+        v = Eval(vl, vr, xl, xr, X3(xl,xr))
+        w = Eval(wl, wr, xl, xr, X3(xl,xr))
+        f3 = (w*u - v*u*u) * ChiR(xl,xr,X3(xl,xr))
+        ydot(2,ix+1) = ydot(2,ix+1) + Quad(f1,f2,f3,xl,xr)
+
+        ! v -- diffusion
+        f1 = -dv * Eval_x(vl,vr,xl,xr) * ChiR_x(xl,xr)
+        ydot(2,ix+1) = ydot(2,ix+1) + Quad(f1,f1,f1,xl,xr)
+
+        ! w -- reaction
+        u = Eval(ul, ur, xl, xr, X1(xl,xr))
+        v = Eval(vl, vr, xl, xr, X1(xl,xr))
+        w = Eval(wl, wr, xl, xr, X1(xl,xr))
+        f1 = ((b-w)/ep - w*u) * ChiR(xl,xr,X1(xl,xr))
+        u = Eval(ul, ur, xl, xr, X2(xl,xr))
+        v = Eval(vl, vr, xl, xr, X2(xl,xr))
+        w = Eval(wl, wr, xl, xr, X2(xl,xr))
+        f2 = ((b-w)/ep - w*u) * ChiR(xl,xr,X2(xl,xr))
+        u = Eval(ul, ur, xl, xr, X3(xl,xr))
+        v = Eval(vl, vr, xl, xr, X3(xl,xr))
+        w = Eval(wl, wr, xl, xr, X3(xl,xr))
+        f3 = ((b-w)/ep - w*u) * ChiR(xl,xr,X3(xl,xr))
+        ydot(3,ix+1) = ydot(3,ix+1) + Quad(f1,f2,f3,xl,xr)
+
+        ! w -- diffusion
+        f1 = -dw * Eval_x(wl,wr,xl,xr) * ChiR_x(xl,xr)
+        ydot(3,ix+1) = ydot(3,ix+1) + Quad(f1,f1,f1,xl,xr)
+
+     endif
+
+  enddo
+  ier = 0
+
+  return
+
+end subroutine farkifun
+!-----------------------------------------------------------------
+
+
+
+subroutine farkefun(t, y, ydot, ipar, rpar, ier)
+!-----------------------------------------------------------------
+! (unused) Explicit portion of the ODE right-hand function
+!-----------------------------------------------------------------
+  use UserData
+
+  ! Declarations
+  implicit none
+
+  ! Arguments
+  real*8,  intent(in)   :: t, rpar(1)
+  integer*8, intent(in) :: ipar(1)
+  integer, intent(out)  :: ier
+  real*8,  intent(in)   :: y(3,N)
+  real*8,  intent(out)  :: ydot(3,N)
+
+  ! return with success (since fully implicit)
+  ydot = 0.d0
+  ier = 0
+  
+end subroutine farkefun
+!-----------------------------------------------------------------
+
+
+
+subroutine farkspjac(t, y, fy, neq, nnz, Jdata, Jcolvals, &
+                     Jrowptrs, h, ipar, rpar, wk1, wk2, wk3, ier)
+!-----------------------------------------------------------------
+! Jacobian computation routine -- CSR format
+!-----------------------------------------------------------------
+  use UserData
+  use Quadrature
+  use FEM
+
+  ! Declarations
+  implicit none
+
+  ! Arguments
+  real*8,    intent(in)  :: t, h, rpar(1)
+  real*8,    intent(in), dimension(3,N) :: y, fy, wk1, wk2, wk3
+  integer,   intent(in)  :: neq, nnz
+  integer*8, intent(in)  :: ipar(1)
+  real*8,    intent(out) :: Jdata(nnz)
+  integer,   intent(out) :: Jcolvals(nnz), Jrowptrs(neq+1), ier
+
+  ! Local data
+  integer :: ix, nz
+  real*8  :: ul, uc, ur, vl, vc, vr, wl, wc, wr, xl, xc, xr
+  real*8  :: u1, u2, u3, v1, v2, v3, w1, w2, w3
+  real*8  :: f1, f2, f3, df1, df2, df3, dQdf1, dQdf2, dQdf3
+  real*8  :: ChiL1, ChiL2, ChiL3, ChiR1, ChiR2, ChiR3
+  real*8, dimension(3,-1:1) :: Ju, Jv, Jw
+
+  ! check that vector/matrix dimensions match up
+  if ((3*N /= neq) .or. (nnz < 27*(N-2))) then
+     ier = 1
+     return
+  endif
+
+  ! clear out Jacobian matrix data
+  Jdata = 0.d0
+  nz = 0
+
+  ! Dirichlet boundary at left
+  Jrowptrs(idx(1,1)+1) = nz
+  Jrowptrs(idx(1,2)+1) = nz
+  Jrowptrs(idx(1,3)+1) = nz
+ 
+  ! iterate through nodes, filling in matrix by rows
+  do ix=2,N-1
+
+     ! set nodal value shortcuts (interval index aligns with left node)
+     xl = x(ix-1)
+     ul = y(1,ix-1)
+     vl = y(2,ix-1)
+     wl = y(3,ix-1)
+     xc = x(ix)
+     uc = y(1,ix)
+     vc = y(2,ix)
+     wc = y(3,ix)
+     xr = x(ix+1)
+     ur = y(1,ix+1)
+     vr = y(2,ix+1)
+     wr = y(3,ix+1)
+
+     ! compute entries of all Jacobian rows at node ix
+     Ju = 0.d0
+     Jv = 0.d0
+     Jw = 0.d0
+
+     ! first compute dependence on values to left and center
+     
+     !    evaluate relevant variables in left subinterval
+     u1 = Eval(ul, uc, xl, xc, X1(xl,xc))
+     v1 = Eval(vl, vc, xl, xc, X1(xl,xc))
+     w1 = Eval(wl, wc, xl, xc, X1(xl,xc))
+     u2 = Eval(ul, uc, xl, xc, X2(xl,xc))
+     v2 = Eval(vl, vc, xl, xc, X2(xl,xc))
+     w2 = Eval(wl, wc, xl, xc, X2(xl,xc))
+     u3 = Eval(ul, uc, xl, xc, X3(xl,xc))
+     v3 = Eval(vl, vc, xl, xc, X3(xl,xc))
+     w3 = Eval(wl, wc, xl, xc, X3(xl,xc))
+
+     dQdf1 = Quad(1.d0, 0.d0, 0.d0, xl, xc)
+     dQdf2 = Quad(0.d0, 1.d0, 0.d0, xl, xc)
+     dQdf3 = Quad(0.d0, 0.d0, 1.d0, xl, xc)
+
+     ChiL1 = ChiL(xl, xc, X1(xl,xc))
+     ChiL2 = ChiL(xl, xc, X2(xl,xc))
+     ChiL3 = ChiL(xl, xc, X3(xl,xc))
+     ChiR1 = ChiR(xl, xc, X1(xl,xc))
+     ChiR2 = ChiR(xl, xc, X2(xl,xc))
+     ChiR3 = ChiR(xl, xc, X3(xl,xc))
+
+
+     !    compute diffusion Jacobian components
+
+     !    L_u = -du * u_x * ChiR_x
+     !     dL_u/dul
+     Ju(1,-1) = (-du) * Quad(1.d0,1.d0,1.d0,xl,xc) * ChiL_x(xl,xc) * ChiR_x(xl,xc)
+     !     dL_u/duc
+     Ju(1,0)  = (-du) * Quad(1.d0,1.d0,1.d0,xl,xc) * ChiR_x(xl,xc) * ChiR_x(xl,xc)
+
+     !    L_v = -dv * v_x * ChiR_x
+     !     dL_v/dvl
+     Jv(2,-1) = (-dv) * Quad(1.d0,1.d0,1.d0,xl,xc) * ChiL_x(xl,xc) * ChiR_x(xl,xc)
+     !     dL_v/dvc
+     Jv(2,0)  = (-dv) * Quad(1.d0,1.d0,1.d0,xl,xc) * ChiR_x(xl,xc) * ChiR_x(xl,xc)
+
+     !    L_w =  -dw * w_x * ChiR_x
+     !     dL_w/dwl
+     Jw(3,-1) = (-dw) * Quad(1.d0,1.d0,1.d0,xl,xc) * ChiL_x(xl,xc) * ChiR_x(xl,xc)
+     !     dL_w/dwc
+     Jw(3,0)  = (-dw) * Quad(1.d0,1.d0,1.d0,xl,xc) * ChiR_x(xl,xc) * ChiR_x(xl,xc)
+
+
+     !    compute reaction Jacobian components
+
+     !    R_u = (a - (w+1.d0)*u + v*u*u) 
+     !     dR_u/dul 
+     df1 = (-(w1+1.d0) + 2.d0*v1*u1) * ChiL1 * ChiR1
+     df2 = (-(w2+1.d0) + 2.d0*v2*u2) * ChiL2 * ChiR2
+     df3 = (-(w3+1.d0) + 2.d0*v3*u3) * ChiL3 * ChiR3
+     Ju(1,-1) = Ju(1,-1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_u/duc
+     df1 = (-(w1+1.d0) + 2.d0*v1*u1) * ChiR1 * ChiR1
+     df2 = (-(w2+1.d0) + 2.d0*v2*u2) * ChiR2 * ChiR2
+     df3 = (-(w3+1.d0) + 2.d0*v3*u3) * ChiR3 * ChiR3
+     Ju(1,0) = Ju(1,0)+ dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_u/dvl 
+     df1 = (u1*u1) * ChiL1 * ChiR1
+     df2 = (u2*u2) * ChiL2 * ChiR2
+     df3 = (u3*u3) * ChiL3 * ChiR3
+     Ju(2,-1) = Ju(2,-1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_u/dvc
+     df1 = (u1*u1) * ChiR1 * ChiR1
+     df2 = (u2*u2) * ChiR2 * ChiR2
+     df3 = (u3*u3) * ChiR3 * ChiR3
+     Ju(2,0) = Ju(2,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_u/dwl 
+     df1 = (-u1) * ChiL1 * ChiR1
+     df2 = (-u2) * ChiL2 * ChiR2
+     df3 = (-u3) * ChiL3 * ChiR3
+     Ju(3,-1) = Ju(3,-1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_u/dwc
+     df1 = (-u1) * ChiR1 * ChiR1
+     df2 = (-u2) * ChiR2 * ChiR2
+     df3 = (-u3) * ChiR3 * ChiR3
+     Ju(3,0) = Ju(3,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+
+     !    R_v = (w*u - v*u*u) 
+     !     dR_v/dul 
+     df1 = (w1 - 2.d0*v1*u1) * ChiL1 * ChiR1
+     df2 = (w2 - 2.d0*v2*u2) * ChiL2 * ChiR2
+     df3 = (w3 - 2.d0*v3*u3) * ChiL3 * ChiR3
+     Jv(1,-1) = Jv(1,-1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_v/duc
+     df1 = (w1 - 2.d0*v1*u1) * ChiR1 * ChiR1
+     df2 = (w2 - 2.d0*v2*u2) * ChiR2 * ChiR2
+     df3 = (w3 - 2.d0*v3*u3) * ChiR3 * ChiR3
+     Jv(1,0) = Jv(1,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_v/dvl 
+     df1 = (-u1*u1) * ChiL1 * ChiR1
+     df2 = (-u2*u2) * ChiL2 * ChiR2
+     df3 = (-u3*u3) * ChiL3 * ChiR3
+     Jv(2,-1) = Jv(2,-1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_v/dvc
+     df1 = (-u1*u1) * ChiR1 * ChiR1
+     df2 = (-u2*u2) * ChiR2 * ChiR2
+     df3 = (-u3*u3) * ChiR3 * ChiR3
+     Jv(2,0) = Jv(2,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_v/dwl 
+     df1 = (u1) * ChiL1 * ChiR1
+     df2 = (u2) * ChiL2 * ChiR2
+     df3 = (u3) * ChiL3 * ChiR3
+     Jv(3,-1) = Jv(3,-1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_v/dwc 
+     df1 = (u1) * ChiR1 * ChiR1
+     df2 = (u2) * ChiR2 * ChiR2
+     df3 = (u3) * ChiR3 * ChiR3
+     Jv(3,0) = Jv(3,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+
+     !    R_w = ((b-w)/ep - w*u) 
+     !     dR_w/dul 
+     df1 = (-w1) * ChiL1 * ChiR1
+     df2 = (-w2) * ChiL2 * ChiR2
+     df3 = (-w3) * ChiL3 * ChiR3
+     Jw(1,-1) = Jw(1,-1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_w/duc
+     df1 = (-w1) * ChiR1 * ChiR1
+     df2 = (-w2) * ChiR2 * ChiR2
+     df3 = (-w3) * ChiR3 * ChiR3
+     Jw(1,0) = Jw(1,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_w/dwl 
+     df1 = (-1.d0/ep - u1) * ChiL1 * ChiR1
+     df2 = (-1.d0/ep - u2) * ChiL2 * ChiR2
+     df3 = (-1.d0/ep - u3) * ChiL3 * ChiR3
+     Jw(3,-1) = Jw(3,-1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_w/dwc
+     df1 = (-1.d0/ep - u1) * ChiR1 * ChiR1
+     df2 = (-1.d0/ep - u2) * ChiR2 * ChiR2
+     df3 = (-1.d0/ep - u3) * ChiR3 * ChiR3
+     Jw(3,0) = Jw(3,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+
+     ! second compute dependence on values to center and right
+
+     !    evaluate relevant variables in right subinterval
+     u1 = Eval(uc, ur, xc, xr, X1(xc,xr))
+     v1 = Eval(vc, vr, xc, xr, X1(xc,xr))
+     w1 = Eval(wc, wr, xc, xr, X1(xc,xr))
+     u2 = Eval(uc, ur, xc, xr, X2(xc,xr))
+     v2 = Eval(vc, vr, xc, xr, X2(xc,xr))
+     w2 = Eval(wc, wr, xc, xr, X2(xc,xr))
+     u3 = Eval(uc, ur, xc, xr, X3(xc,xr))
+     v3 = Eval(vc, vr, xc, xr, X3(xc,xr))
+     w3 = Eval(wc, wr, xc, xr, X3(xc,xr))
+
+     dQdf1 = Quad(1.d0, 0.d0, 0.d0, xc, xr)
+     dQdf2 = Quad(0.d0, 1.d0, 0.d0, xc, xr)
+     dQdf3 = Quad(0.d0, 0.d0, 1.d0, xc, xr)
+
+     ChiL1 = ChiL(xc, xr, X1(xc,xr))
+     ChiL2 = ChiL(xc, xr, X2(xc,xr))
+     ChiL3 = ChiL(xc, xr, X3(xc,xr))
+     ChiR1 = ChiR(xc, xr, X1(xc,xr))
+     ChiR2 = ChiR(xc, xr, X2(xc,xr))
+     ChiR3 = ChiR(xc, xr, X3(xc,xr))
+
+
+     !    compute diffusion Jacobian components
+
+     !    L_u = -du * u_x * ChiL_x
+     !     dL_u/duc
+     Ju(1,0) = Ju(1,0) + (-du) * Quad(1.d0,1.d0,1.d0,xc,xr) * ChiL_x(xc,xr) * ChiL_x(xc,xr)
+
+     !     dL_u/dur
+     Ju(1,1) = Ju(1,1) + (-du) * Quad(1.d0,1.d0,1.d0,xc,xr) * ChiL_x(xc,xr) * ChiR_x(xc,xr)
+
+     !    L_v = -dv * v_x * ChiL_x
+     !     dL_v/dvc
+     Jv(2,0) = Jv(2,0) + (-dv) * Quad(1.d0,1.d0,1.d0,xc,xr) * ChiL_x(xc,xr) * ChiL_x(xc,xr)
+
+     !     dL_v/dvr
+     Jv(2,1) = Jv(2,1) + (-dv) * Quad(1.d0,1.d0,1.d0,xc,xr) * ChiL_x(xc,xr) * ChiR_x(xc,xr)
+
+     !    L_w =  -dw * w_x * ChiL_x
+     !     dL_w/dwc
+     Jw(3,0) = Jw(3,0) + (-dw) * Quad(1.d0,1.d0,1.d0,xc,xr) * ChiL_x(xc,xr) * ChiL_x(xc,xr)
+
+     !     dL_w/dwr
+     Jw(3,1) = Jw(3,1) + (-dw) * Quad(1.d0,1.d0,1.d0,xc,xr) * ChiL_x(xc,xr) * ChiR_x(xc,xr)
+
+
+     !    compute reaction Jacobian components
+
+     !    R_u = (a - (w+1.d0)*u + v*u*u) 
+     !     dR_u/duc
+     df1 = (-(w1+1.d0) + 2.d0*v1*u1) * ChiL1 * ChiL1
+     df2 = (-(w2+1.d0) + 2.d0*v2*u2) * ChiL2 * ChiL2
+     df3 = (-(w3+1.d0) + 2.d0*v3*u3) * ChiL3 * ChiL3
+     Ju(1,0) = Ju(1,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_u/dur 
+     df1 = (-(w1+1.d0) + 2.d0*v1*u1) * ChiL1 * ChiR1
+     df2 = (-(w2+1.d0) + 2.d0*v2*u2) * ChiL2 * ChiR2
+     df3 = (-(w3+1.d0) + 2.d0*v3*u3) * ChiL3 * ChiR3
+     Ju(1,1) = Ju(1,1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_u/dvc
+     df1 = (u1*u1) * ChiL1 * ChiL1
+     df2 = (u2*u2) * ChiL2 * ChiL2
+     df3 = (u3*u3) * ChiL3 * ChiL3
+     Ju(2,0) = Ju(2,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_u/dvr 
+     df1 = (u1*u1) * ChiL1 * ChiR1
+     df2 = (u2*u2) * ChiL2 * ChiR2
+     df3 = (u3*u3) * ChiL3 * ChiR3
+     Ju(2,1) = Ju(2,1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_u/dwc
+     df1 = (-u1) * ChiL1 * ChiL1
+     df2 = (-u2) * ChiL2 * ChiL2
+     df3 = (-u3) * ChiL3 * ChiL3
+     Ju(3,0) = Ju(3,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_u/dwr 
+     df1 = (-u1) * ChiL1 * ChiR1
+     df2 = (-u2) * ChiL2 * ChiR2
+     df3 = (-u3) * ChiL3 * ChiR3
+     Ju(3,1) = Ju(3,1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+
+     !    R_v = (w*u - v*u*u) 
+     !     dR_v/duc
+     df1 = (w1 - 2.d0*v1*u1) * ChiL1 * ChiL1
+     df2 = (w2 - 2.d0*v2*u2) * ChiL2 * ChiL2
+     df3 = (w3 - 2.d0*v3*u3) * ChiL3 * ChiL3
+     Jv(1,0) = Jv(1,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_v/dur 
+     df1 = (w1 - 2.d0*v1*u1) * ChiL1 * ChiR1
+     df2 = (w2 - 2.d0*v2*u2) * ChiL2 * ChiR2
+     df3 = (w3 - 2.d0*v3*u3) * ChiL3 * ChiR3
+     Jv(1,1) = Jv(1,1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_v/dvc
+     df1 = (-u1*u1) * ChiL1 * ChiL1
+     df2 = (-u2*u2) * ChiL2 * ChiL2
+     df3 = (-u3*u3) * ChiL3 * ChiL3
+     Jv(2,0) = Jv(2,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_v/dvr 
+     df1 = (-u1*u1) * ChiL1 * ChiR1
+     df2 = (-u2*u2) * ChiL2 * ChiR2
+     df3 = (-u3*u3) * ChiL3 * ChiR3
+     Jv(2,1) = Jv(2,1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_v/dwc
+     df1 = (u1) * ChiL1 * ChiL1
+     df2 = (u2) * ChiL2 * ChiL2
+     df3 = (u3) * ChiL3 * ChiL3
+     Jv(3,0) = Jv(3,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_v/dwr 
+     df1 = (u1) * ChiL1 * ChiR1
+     df2 = (u2) * ChiL2 * ChiR2
+     df3 = (u3) * ChiL3 * ChiR3
+     Jv(3,1) = Jv(3,1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+
+     !    R_w = ((b-w)/ep - w*u) 
+     !     dR_w/duc
+     df1 = (-w1) * ChiL1 * ChiL1
+     df2 = (-w2) * ChiL2 * ChiL2
+     df3 = (-w3) * ChiL3 * ChiL3
+     Jw(1,0) = Jw(1,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_w/dur 
+     df1 = (-w1) * ChiL1 * ChiR1
+     df2 = (-w2) * ChiL2 * ChiR2
+     df3 = (-w3) * ChiL3 * ChiR3
+     Jw(1,1) = Jw(1,1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_w/dwc
+     df1 = (-1.d0/ep - u1) * ChiL1 * ChiL1
+     df2 = (-1.d0/ep - u2) * ChiL2 * ChiL2
+     df3 = (-1.d0/ep - u3) * ChiL3 * ChiL3
+     Jw(3,0) = Jw(3,0) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+     !     dR_w/dwr 
+     df1 = (-1.d0/ep - u1) * ChiL1 * ChiR1
+     df2 = (-1.d0/ep - u2) * ChiL2 * ChiR2
+     df3 = (-1.d0/ep - u3) * ChiL3 * ChiR3
+     Jw(3,1) = Jw(3,1) + dQdf1*df1 + dQdf2*df2 + dQdf3*df3
+
+
+     ! insert Jacobian entries into CSR matrix structure
+
+     !   Ju row
+     Jrowptrs(idx(ix,1)+1) = nz
+
+     Jdata(nz+1:nz+3) = (/ Ju(1,-1), Ju(2,-1), Ju(3,-1) /)
+     Jcolvals(nz+1:nz+3) = (/ idx(ix-1,1), idx(ix-1,2), idx(ix-1,3) /)
+     nz = nz+3
+
+     Jdata(nz+1:nz+3) = (/ Ju(1,0), Ju(2,0), Ju(3,0) /)
+     Jcolvals(nz+1:nz+3) = (/ idx(ix,1), idx(ix,2), idx(ix,3) /)
+     nz = nz+3
+
+     Jdata(nz+1:nz+3) = (/ Ju(1,1), Ju(2,1), Ju(3,1) /)
+     Jcolvals(nz+1:nz+3) = (/ idx(ix+1,1), idx(ix+1,2), idx(ix+1,3) /)
+     nz = nz+3
+
+     !   Jv row
+     Jrowptrs(idx(ix,2)+1) = nz
+
+     Jdata(nz+1:nz+3) = (/ Jv(1,-1), Jv(2,-1), Jv(3,-1) /)
+     Jcolvals(nz+1:nz+3) = (/ idx(ix-1,1), idx(ix-1,2), idx(ix-1,3) /)
+     nz = nz+3
+
+     Jdata(nz+1:nz+3) = (/ Jv(1,0), Jv(2,0), Jv(3,0) /)
+     Jcolvals(nz+1:nz+3) = (/ idx(ix,1), idx(ix,2), idx(ix,3) /)
+     nz = nz+3
+
+     Jdata(nz+1:nz+3) = (/ Jv(1,1), Jv(2,1), Jv(3,1) /)
+     Jcolvals(nz+1:nz+3) = (/ idx(ix+1,1), idx(ix+1,2), idx(ix+1,3) /)
+     nz = nz+3
+
+     !   Jw row
+     Jrowptrs(idx(ix,3)+1) = nz
+
+     Jdata(nz+1:nz+3) = (/ Jw(1,-1), Jw(2,-1), Jw(3,-1) /)
+     Jcolvals(nz+1:nz+3) = (/ idx(ix-1,1), idx(ix-1,2), idx(ix-1,3) /)
+     nz = nz+3
+
+     Jdata(nz+1:nz+3) = (/ Jw(1,0), Jw(2,0), Jw(3,0) /)
+     Jcolvals(nz+1:nz+3) = (/ idx(ix,1), idx(ix,2), idx(ix,3) /)
+     nz = nz+3
+
+     Jdata(nz+1:nz+3) = (/ Jw(1,1), Jw(2,1), Jw(3,1) /)
+     Jcolvals(nz+1:nz+3) = (/ idx(ix+1,1), idx(ix+1,2), idx(ix+1,3) /)
+     nz = nz+3
+
+
+  enddo
+
+  ! Dirichlet boundary at right
+  Jrowptrs(idx(N,1)+1) = nz
+  Jrowptrs(idx(N,2)+1) = nz
+  Jrowptrs(idx(N,3)+1) = nz
+ 
+  ! signal end of data in CSR matrix
+  Jrowptrs(idx(N,3)+2) = nz
+
+  ier = 0
+  return
+
+end subroutine farkspjac
+!-----------------------------------------------------------------
+
+
+
+subroutine farkspmass(t, neq, nnz, Mdata, Mcolvals, Mrowptrs, &
+                      ipar, rpar, wk1, wk2, wk3, ier)
+!-----------------------------------------------------------------
+! Mass matrix computation routine
+!-----------------------------------------------------------------
+  use UserData
+  use Quadrature
+  use FEM
+
+  ! Declarations
+  implicit none
+
+  ! Arguments
+  real*8,    intent(in)  :: t, rpar(1)
+  real*8,    intent(in), dimension(3,N) :: wk1, wk2, wk3
+  integer,   intent(in)  :: neq, nnz
+  integer*8, intent(in)  :: ipar(1)
+  real*8,    intent(out) :: Mdata(nnz)
+  integer,   intent(out) :: Mcolvals(nnz), Mrowptrs(neq+1), ier
+
+  ! Local data
+  integer :: ix, nz
+  real*8  :: xl, xc, xr, Ml, Mc, Mr, ChiL1, ChiL2, ChiL3, ChiR1, ChiR2, ChiR3
+  logical :: left, right
+
+  ! check that vector/matrix dimensions match up
+  if ((3*N /= neq) .or. (nnz /= 15*neq)) then
+     ier = 1
+     return
+  endif
+
+  ! clear out Jacobian matrix data
+  Mdata = 0.d0
+
+  ! iterate through nodes, filling in matrix by rows
+  nz = 0
+  do ix=1,N
+
+     ! set booleans to determine whether intervals exist on the left/right */
+     left  = .true.
+     right = .true.
+     if (ix==1)  left  = .false.
+     if (ix==N)  right = .false.
+
+     ! set nodal value shortcuts (interval index aligns with left node)
+     if (left) then
+        xl = x(ix-1)
+     endif
+     xc = x(ix)
+     if (right) then
+        xr = x(ix+1)
+     endif
+
+     ! compute entries of all mass matrix rows at node ix
+     Ml = 0.d0
+     Mc = 0.d0
+     Mr = 0.d0
+
+     ! first compute dependence on values to left and center
+     if (left) then
+
+        ChiL1 = ChiL(xl, xc, X1(xl,xc))
+        ChiL2 = ChiL(xl, xc, X2(xl,xc))
+        ChiL3 = ChiL(xl, xc, X3(xl,xc))
+        ChiR1 = ChiR(xl, xc, X1(xl,xc))
+        ChiR2 = ChiR(xl, xc, X2(xl,xc))
+        ChiR3 = ChiR(xl, xc, X3(xl,xc))
+
+        Ml = Ml + Quad(ChiL1*ChiR1, ChiL2*ChiR2, ChiL3*ChiR3, xl, xc)
+        Mc = Mc + Quad(ChiR1*ChiR1, ChiR2*ChiR2, ChiR3*ChiR3, xl, xc)
+
+     endif
+
+     ! second compute dependence on values to center and right
+     if (right) then
+
+        ChiL1 = ChiL(xc, xr, X1(xc,xr))
+        ChiL2 = ChiL(xc, xr, X2(xc,xr))
+        ChiL3 = ChiL(xc, xr, X3(xc,xr))
+        ChiR1 = ChiR(xc, xr, X1(xc,xr))
+        ChiR2 = ChiR(xc, xr, X2(xc,xr))
+        ChiR3 = ChiR(xc, xr, X3(xc,xr))
+
+        Mc = Mc + Quad(ChiL1*ChiL1, ChiL2*ChiL2, ChiL3*ChiL3, xc, xr)
+        Mr = Mr + Quad(ChiL1*ChiR1, ChiL2*ChiR2, ChiL3*ChiR3, xc, xr)
+
+     endif
+
+
+     ! insert mass matrix entries into CSR matrix structure
+
+     !   u row
+     Mrowptrs(idx(ix,1)+1) = nz
+     if (left) then
+        nz = nz+1
+        Mdata(nz) = Ml
+        Mcolvals(nz) = idx(ix-1,1)
+     endif
+     nz = nz+1
+     Mdata(nz) = Mc
+     Mcolvals(nz) = idx(ix,1)
+     if (right) then
+        nz = nz+1
+        Mdata(nz) = Mr
+        Mcolvals(nz) = idx(ix+1,1)
+     endif
+
+     !   v row
+     Mrowptrs(idx(ix,2)+1) = nz
+     if (left) then
+        nz = nz+1
+        Mdata(nz) = Ml
+        Mcolvals(nz) = idx(ix-1,2)
+     endif
+     nz = nz+1
+     Mdata(nz) = Mc
+     Mcolvals(nz) = idx(ix,2)
+     if (right) then
+        nz = nz+1
+        Mdata(nz) = Mr
+        Mcolvals(nz) = idx(ix+1,2)
+     endif
+
+     !   w row
+     Mrowptrs(idx(ix,3)+1) = nz
+     if (left) then
+        nz = nz+1
+        Mdata(nz) = Ml
+        Mcolvals(nz) = idx(ix-1,3)
+     endif
+     nz = nz+1
+     Mdata(nz) = Mc
+     Mcolvals(nz) = idx(ix,3)
+     if (right) then
+        nz = nz+1
+        Mdata(nz) = Mr
+        Mcolvals(nz) = idx(ix+1,3)
+     endif
+
+  enddo
+
+  ! signal end of data in CSR matrix
+  Mrowptrs(idx(N,3)+2) = nz
+
+  ier = 0
+  return
+
+end subroutine farkspmass
+!-----------------------------------------------------------------
diff --git a/examples/arkode/F90_serial/ark_bruss1D_FEM_klu.out b/examples/arkode/F90_serial/ark_bruss1D_FEM_klu.out
new file mode 100644
index 0000000..bfa0ac3
--- /dev/null
+++ b/examples/arkode/F90_serial/ark_bruss1D_FEM_klu.out
@@ -0,0 +1,56 @@
+ARKode solver parameters:
+  Method order 4
+  Dense output order 3
+  Implicit integrator
+  Time step adaptivity method 0
+     Safety factor = 0.96
+     Bias factor = 1.5
+     Growth factor = 20
+     Step growth lower bound = 1
+     Step growth upper bound = 1.5
+     k1 = 0.58
+     k2 = 0.21
+     k3 = 0.1
+  Solver relative tolerance = 1e-06
+  Solver absolute tolerance = 1e-11
+  Absolute residual tolerance = 1e-11
+  Maximum number of error test failures = 7
+  Maximum number of convergence test failures = 10
+  Maximum step increase (first step) = 10000
+  Step reduction factor on multiple error fails = 0.3
+  Minimum error fails before above factor is used = 2
+  Step reduction factor on nonlinear convergence failure = 0.25
+  Implicit predictor method = 0
+  Implicit solver tolerance coefficient = 0.1
+  Maximum number of nonlinear corrections = 3
+  Nonlinear convergence rate constant = 0.3
+  Nonlinear divergence tolerance = 2.3
+  Gamma factor LSetup tolerance = 0.2
+  Number of steps between LSetup calls = 20
+
+         t         ||u||_rms    ||v||_rms    ||w||_rms
+   ----------------------------------------------------
+    0.00000E+00  6.32978E-01  3.36571E+00  2.03247E+00
+    1.00000E+00  6.97285E-01  3.23962E+00  1.99999E+00
+    2.00000E+00  7.89501E-01  3.05139E+00  1.99999E+00
+    3.00000E+00  7.83681E-01  2.93001E+00  1.99999E+00
+    4.00000E+00  6.48122E-01  3.00833E+00  1.99999E+00
+    5.00000E+00  5.52223E-01  3.17028E+00  1.99999E+00
+    6.00000E+00  5.22111E-01  3.30889E+00  1.99999E+00
+    7.00000E+00  5.20869E-01  3.40614E+00  1.99999E+00
+    8.00000E+00  5.30276E-01  3.46669E+00  1.99999E+00
+    9.00000E+00  5.45196E-01  3.49456E+00  1.99999E+00
+    1.00000E+01  5.65426E-01  3.49094E+00  1.99999E+00
+   ----------------------------------------------------
+   
+ Final Solver Statistics:
+    Internal solver steps =                   104  (attempted =                  104 )
+    Total RHS evals:  Fe =                     0   Fi =                  1733
+    Total linear solver setups =                    48
+    Total RHS evals for setting up the linear system =                     0
+    Total number of Jacobian evaluations =                    11
+    Total number of nonlinear iterations =                  1209
+    Total number of nonlinear solver convergence failures =                     0
+    Total number of error test failures =                     0
+    Total number of mass matrix evaluations =                   157
+   
diff --git a/examples/arkode/F90_serial/plot_brusselator1D_FEM.py b/examples/arkode/F90_serial/plot_brusselator1D_FEM.py
new file mode 100755
index 0000000..47ad96e
--- /dev/null
+++ b/examples/arkode/F90_serial/plot_brusselator1D_FEM.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+# ------------------------------------------------------------
+# Programmer(s):  Daniel R. Reynolds @ SMU
+# ------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ------------------------------------------------------------
+# matplotlib-based plotting script for brusselator1D.c example
+
+# imports
+import sys
+import pylab as plt
+import numpy as np
+
+# load mesh data file
+mesh = np.loadtxt('bruss_FEM_mesh.txt', dtype=np.double)
+
+# load solution data files
+udata = np.loadtxt('bruss_FEM_u.txt', dtype=np.double)
+vdata = np.loadtxt('bruss_FEM_v.txt', dtype=np.double)
+wdata = np.loadtxt('bruss_FEM_w.txt', dtype=np.double)
+
+# determine number of time steps, mesh size
+nt,nx = np.shape(udata)
+
+# determine min/max values
+umin = 0.9*udata.min()
+umax = 1.1*udata.max()
+vmin = 0.9*vdata.min()
+vmax = 1.1*vdata.max()
+wmin = 0.9*wdata.min()
+wmax = 1.1*wdata.max()
+minval = np.array([umin, vmin, wmin]).min()
+maxval = np.array([umax, vmax, wmax]).max()
+
+# plot the mesh
+plt.figure(1)
+plt.plot(mesh,0.0*mesh,'o')
+plt.xlabel('x')
+plt.title('FEM mesh')
+plt.savefig('brusselator1D_FEM_mesh.png')
+
+# generate plots of results
+for tstep in range(nt):
+
+    # set string constants for output plots, current time, mesh size
+    pname = 'brusselator1D_FEM.' + repr(tstep).zfill(3) + '.png'
+    tstr  = repr(tstep)
+    nxstr = repr(nx)
+
+    # plot current solution and save to disk
+    plt.figure(1)
+    plt.plot(mesh,udata[tstep,:],label="u")
+    plt.plot(mesh,vdata[tstep,:],label="v")
+    plt.plot(mesh,wdata[tstep,:],label="w")
+    plt.xlabel('x')
+    plt.ylabel('solution')
+    plt.title('Solutions at output ' + tstr + ', mesh = ' + nxstr)
+    plt.axis((0.0, 1.0, minval, maxval))
+    plt.grid()
+    plt.legend(loc='upper right', shadow=True)
+    plt.savefig(pname)
+    plt.close()
+
+
+##### end of script #####
diff --git a/examples/arkode/F90_serial/plot_sol.py b/examples/arkode/F90_serial/plot_sol.py
new file mode 100755
index 0000000..554881c
--- /dev/null
+++ b/examples/arkode/F90_serial/plot_sol.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+# ----------------------------------------------------------------
+# Programmer(s): Daniel R. Reynolds @ SMU
+# ----------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ----------------------------------------------------------------
+# matplotlib-based plotting script for ODE examples
+
+# imports
+import sys
+import pylab as plt
+import numpy as np
+
+# load solution data file
+data = np.loadtxt('solution.txt', dtype=np.double)
+
+# determine number of time steps, number of fields
+nt,nv = np.shape(data)
+
+# extract time array
+times = data[:,0]
+
+# parse comment line to determine solution names
+f = open('solution.txt', 'r')
+commentline = f.readline()
+commentsplit = commentline.split()
+names = commentsplit[2:]
+
+# create plot
+plt.figure()
+
+# add curves to figure
+for i in range(nv-1):
+    plt.plot(times,data[:,i+1],label=names[i])
+plt.xlabel('t')
+if (nv > 2):
+    plt.ylabel('solutions')
+else:
+    plt.ylabel('solution')
+plt.legend(loc='upper right', shadow=True)
+plt.grid()
+plt.savefig('solution.png')
+
+
+
+
+##### end of script #####
diff --git a/examples/cvode/C_openmp/CMakeLists.txt b/examples/cvode/C_openmp/CMakeLists.txt
new file mode 100644
index 0000000..ba4e164
--- /dev/null
+++ b/examples/cvode/C_openmp/CMakeLists.txt
@@ -0,0 +1,128 @@
+# ---------------------------------------------------------------
+# Programmer: Ting Yan @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for CVODE OpenMP examples
+
+# Only include tests if OpenMP is enabled
+IF(OPENMP_FOUND)
+
+# Add variable CVODE_examples_OMP with the names of the openmp CVODE examples
+SET(CVODE_examples_OMP
+  cvAdvDiff_bnd_omp
+  )
+
+ENDIF(OPENMP_FOUND)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_static)
+  SET(NVECOMP_LIB sundials_nvecopenmp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_shared)
+  SET(NVECOMP_LIB sundials_nvecopenmp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+SET(SUNDIALS_LIBS ${CVODE_LIB} ${NVECOMP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# update the compilation flags to include OpenMP support
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+
+# Add the build and install targets for each CVODE example
+FOREACH(example ${CVODE_examples_OMP})
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} TEST_ARGS 4)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/C_openmp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${CVODE_examples_OMP})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/C_openmp)
+
+  # Install the extra files
+  FOREACH(extrafile ${CVODE_extras_OMP})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/C_openmp)
+  ENDFOREACH(extrafile ${CVODE_extras_OMP})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "CVODE")
+  SET(SOLVER_LIB "sundials_cvode")
+  LIST2STRING(CVODE_examples_OMP EXAMPLES)
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/C_openmp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/cvode/C_openmp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/C_openmp 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/C_openmp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/cvode/C_openmp/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/C_openmp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/cvode/C_openmp/README b/examples/cvode/C_openmp/README
new file mode 100644
index 0000000..d372835
--- /dev/null
+++ b/examples/cvode/C_openmp/README
@@ -0,0 +1,49 @@
+List of C_openmp CVODE examples
+
+  cvAdvDiff_bnd_omp: banded example using OpenMP
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/cvode/C_openmp/cvAdvDiff_bnd_omp.c b/examples/cvode/C_openmp/cvAdvDiff_bnd_omp.c
new file mode 100644
index 0000000..8e90c57
--- /dev/null
+++ b/examples/cvode/C_openmp/cvAdvDiff_bnd_omp.c
@@ -0,0 +1,458 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ *     Based on cvAdvDiff_bnd.c and parallelized with OpenMP
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem with a banded Jacobian,
+ * with the program for its solution by CVODE.
+ * The problem is the semi-discrete form of the advection-diffusion
+ * equation in 2-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx + d^2 u / dy^2
+ * on the rectangle 0 <= x <= 2, 0 <= y <= 1, and the time
+ * interval 0 <= t <= 1. Homogeneous Dirichlet boundary conditions
+ * are posed, and the initial condition is
+ *   u(x,y,t=0) = x(2-x)y(1-y)exp(5xy).
+ * The PDE is discretized on a uniform MX+2 by MY+2 grid with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX*MY.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVBAND band linear solver, and a user-supplied
+ * Jacobian routine.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .1, .2, ..., 1.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * Optionally, we can set the number of threads from environment 
+ * variable or command line. To check the current value for number
+ * of threads from environment:
+ *      % echo $OMP_NUM_THREADS
+ *
+ * Execution:
+ *
+ * If the user want to use the default value or the number of threads 
+ * from environment value:
+ *      % ./cvAdvDiff_bnd_omp 
+ * If the user want to specify the number of threads to use
+ *      % ./cvAdvDiff_bnd_omp num_threads
+ * where num_threads is the number of threads the user want to use 
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+/* Header files with a description of contents used in cvbanx.c */
+
+#include <cvode/cvode.h>             /* prototypes for CVODE fcts., consts. */
+#include <cvode/cvode_band.h>        /* prototype for CVBand */
+#include <nvector/nvector_openmp.h>  /* serial N_Vector types, fcts., macros */
+#include <sundials/sundials_band.h>  /* definitions of type DlsMat and macros */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+#include <sundials/sundials_math.h>  /* definition of ABS and EXP */
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+/* Problem Constants */
+
+#define XMAX  RCONST(2.0)    /* domain boundaries         */
+#define YMAX  RCONST(1.0)
+#define MX    10             /* mesh dimensions           */
+#define MY    5
+#define NEQ   MX*MY          /* number of equations       */
+#define ATOL  RCONST(1.0e-5) /* scalar absolute tolerance */
+#define T0    RCONST(0.0)    /* initial time              */
+#define T1    RCONST(0.1)    /* first output time         */
+#define DTOUT RCONST(0.1)    /* output time increment     */
+#define NOUT  10             /* number of output times    */
+
+#define ZERO RCONST(0.0)
+#define HALF RCONST(0.5)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+#define FIVE RCONST(5.0)
+
+/* User-defined vector access macro IJth */
+
+/* IJth is defined in order to isolate the translation from the
+   mathematical 2-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. 
+   IJth(vdata,i,j) references the element in the vdata array for
+   u at mesh point (i,j), where 1 <= i <= MX, 1 <= j <= MY.
+   The vdata array is obtained via the macro call vdata = NV_DATA_S(v),
+   where v is an N_Vector. 
+   The variables are ordered by the y index j, then by the x index i. */
+
+#define IJth(vdata,i,j) (vdata[(j-1) + (i-1)*MY])
+
+/* Type : UserData (contains grid constants) */
+
+typedef struct {
+  realtype dx, dy, hdcoef, hacoef, vdcoef;
+  int nthreads;
+} *UserData;
+
+/* Private Helper Functions */
+
+static void SetIC(N_Vector u, UserData data);
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax);
+static void PrintOutput(realtype t, realtype umax, long int nst);
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, char *funcname, int opt);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  realtype dx, dy, reltol, abstol, t, tout, umax;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag;
+  long int nst;
+  int num_threads;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Set the number of threads to use */
+  num_threads = 1;     /* default value */
+#ifdef _OPENMP
+  num_threads = omp_get_max_threads();  /* Overwrite with OMP_NUM_THREADS environment variable */
+#endif
+  if (argc > 1)        /* overwrithe with command line value, if supplied */
+    num_threads = strtol(argv[1], NULL, 0);
+
+  /* Create a serial vector */
+
+  u = N_VNew_OpenMP(NEQ, num_threads);  /* Allocate u vector */
+  if(check_flag((void*)u, "N_VNew_OpenMP", 0)) return(1);
+
+  reltol = ZERO;  /* Set the tolerances */
+  abstol = ATOL;
+
+  data = (UserData) malloc(sizeof *data);  /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  dx = data->dx = XMAX/(MX+1);  /* Set grid coefficients in data */
+  dy = data->dy = YMAX/(MY+1);
+  data->hdcoef = ONE/(dx*dx);
+  data->hacoef = HALF/(TWO*dx);
+  data->vdcoef = ONE/(dy*dy);
+  data->nthreads = num_threads;
+
+  SetIC(u, data);  /* Initialize u vector */
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerance */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVBand to specify the CVBAND band linear solver */
+  flag = CVBand(cvode_mem, NEQ, MY, MY);
+  if(check_flag(&flag, "CVBand", 1)) return(1);
+
+  /* Set the user-supplied Jacobian routine Jac */
+  flag = CVDlsSetBandJacFn(cvode_mem, Jac);
+  if(check_flag(&flag, "CVDlsSetBandJacFn", 1)) return(1);
+
+  /* In loop over output points: call CVode, print results, test for errors */
+
+  umax = N_VMaxNorm(u);
+  PrintHeader(reltol, abstol, umax);
+  for(iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1)) break;
+    umax = N_VMaxNorm(u);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1);
+    PrintOutput(t, umax, nst);
+  }
+ 
+  PrintFinalStats(cvode_mem);  /* Print some final statistics   */
+  printf("num_threads = %i\n\n", num_threads);
+   
+
+  N_VDestroy_OpenMP(u);   /* Free the u vector */
+  CVodeFree(&cvode_mem);  /* Free the integrator memory */
+  free(data);             /* Free the user data */
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u,N_Vector udot, void *user_data)
+{
+  realtype uij, udn, uup, ult, urt, hordc, horac, verdc, hdiff, hadv, vdiff;
+  realtype *udata, *dudata;
+  int i, j;
+  UserData data;
+
+  udata = NV_DATA_OMP(u);
+  dudata = NV_DATA_OMP(udot);
+
+  /* Extract needed constants from data */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  /* Loop over all grid points. */
+#pragma omp parallel for default(shared) private(j, i, uij, udn, uup, ult, urt, hdiff, hadv, vdiff) num_threads(data->nthreads)
+  for (j=1; j <= MY; j++) {
+
+    for (i=1; i <= MX; i++) {
+
+      /* Extract u at x_i, y_j and four neighboring points */
+
+      uij = IJth(udata, i, j);
+      udn = (j == 1)  ? ZERO : IJth(udata, i, j-1);
+      uup = (j == MY) ? ZERO : IJth(udata, i, j+1);
+      ult = (i == 1)  ? ZERO : IJth(udata, i-1, j);
+      urt = (i == MX) ? ZERO : IJth(udata, i+1, j);
+
+      /* Set diffusion and advection terms and load into udot */
+
+      hdiff = hordc*(ult - TWO*uij + urt);
+      hadv = horac*(urt - ult);
+      vdiff = verdc*(uup - TWO*uij + udn);
+      IJth(dudata, i, j) = hdiff + hadv + vdiff;
+    }
+  }
+
+  return(0);
+}
+
+/* Jacobian routine. Compute J(t,u). */
+
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  long int i, j, k;
+  realtype *kthCol, hordc, horac, verdc;
+  UserData data;
+  
+  /*
+    The components of f = udot that depend on u(i,j) are
+    f(i,j), f(i-1,j), f(i+1,j), f(i,j-1), f(i,j+1), with
+      df(i,j)/du(i,j) = -2 (1/dx^2 + 1/dy^2)
+      df(i-1,j)/du(i,j) = 1/dx^2 + .25/dx  (if i > 1)
+      df(i+1,j)/du(i,j) = 1/dx^2 - .25/dx  (if i < MX)
+      df(i,j-1)/du(i,j) = 1/dy^2           (if j > 1)
+      df(i,j+1)/du(i,j) = 1/dy^2           (if j < MY)
+  */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+#pragma omp parallel for collapse(2) default(shared) private(j, u, k, kthCol) num_threads(data->nthreads) 
+  for (j=1; j <= MY; j++) {
+    for (i=1; i <= MX; i++) {
+      k = j-1 + (i-1)*MY;
+      kthCol = BAND_COL(J,k);
+
+      /* set the kth column of J */
+
+      BAND_COL_ELEM(kthCol,k,k) = -TWO*(verdc+hordc);
+      if (i != 1)  BAND_COL_ELEM(kthCol,k-MY,k) = hordc + horac;
+      if (i != MX) BAND_COL_ELEM(kthCol,k+MY,k) = hordc - horac;
+      if (j != 1)  BAND_COL_ELEM(kthCol,k-1,k)  = verdc;
+      if (j != MY) BAND_COL_ELEM(kthCol,k+1,k)  = verdc;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Set initial conditions in u vector */
+
+static void SetIC(N_Vector u, UserData data)
+{
+  int i, j;
+  realtype x, y, dx, dy;
+  realtype *udata;
+
+  /* Extract needed constants from data */
+
+  dx = data->dx;
+  dy = data->dy;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = NV_DATA_OMP(u);
+
+  /* Load initial profile into u vector */
+#pragma omp parallel for default(shared) private(j, i, y, x)  
+  for (j=1; j <= MY; j++) {
+    y = j*dy;
+    for (i=1; i <= MX; i++) {
+      x = i*dx;
+      IJth(udata,i,j) = x*(XMAX - x)*y*(YMAX - y)*SUNRexp(FIVE*x*y);
+    }
+  }  
+}
+
+/* Print first lines of output (problem description) */
+
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax)
+{
+  printf("\n2-D Advection-Diffusion Equation\n");
+  printf("Mesh dimensions = %d X %d\n", MX, MY);
+  printf("Total system size = %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters: reltol = %Lg   abstol = %Lg\n\n",
+         reltol, abstol);
+  printf("At t = %Lg      max.norm(u) =%14.6Le \n", T0, umax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters: reltol = %g   abstol = %g\n\n",
+         reltol, abstol);
+  printf("At t = %g      max.norm(u) =%14.6e \n", T0, umax);
+#else
+  printf("Tolerance parameters: reltol = %g   abstol = %g\n\n", reltol, abstol);
+  printf("At t = %g      max.norm(u) =%14.6e \n", T0, umax);
+#endif
+
+  return;
+}
+
+/* Print current value */
+
+static void PrintOutput(realtype t, realtype umax, long int nst)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %4.2Lf   max.norm(u) =%14.6Le   nst = %4ld\n", t, umax, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %4.2f   max.norm(u) =%14.6e   nst = %4ld\n", t, umax, nst);
+#else
+  printf("At t = %4.2f   max.norm(u) =%14.6e   nst = %4ld\n", t, umax, nst);
+#endif
+
+  return;
+}
+
+/* Get and print some final statistics */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  int flag;
+  long int nst, nfe, nsetups, netf, nni, ncfn, nje, nfeLS;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %ld\n",
+	 nni, ncfn, netf);
+
+  return;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/C_openmp/cvAdvDiff_bnd_omp.out b/examples/cvode/C_openmp/cvAdvDiff_bnd_omp.out
new file mode 100644
index 0000000..9ae3816
--- /dev/null
+++ b/examples/cvode/C_openmp/cvAdvDiff_bnd_omp.out
@@ -0,0 +1,23 @@
+
+2-D Advection-Diffusion Equation
+Mesh dimensions = 10 X 5
+Total system size = 50
+Tolerance parameters: reltol = 0   abstol = 1e-05
+
+At t = 0      max.norm(u) =  8.954716e+01 
+At t = 0.10   max.norm(u) =  4.132889e+00   nst =   85
+At t = 0.20   max.norm(u) =  1.039294e+00   nst =  103
+At t = 0.30   max.norm(u) =  2.979829e-01   nst =  113
+At t = 0.40   max.norm(u) =  8.765774e-02   nst =  120
+At t = 0.50   max.norm(u) =  2.625637e-02   nst =  126
+At t = 0.60   max.norm(u) =  7.830425e-03   nst =  130
+At t = 0.70   max.norm(u) =  2.329387e-03   nst =  134
+At t = 0.80   max.norm(u) =  6.953434e-04   nst =  137
+At t = 0.90   max.norm(u) =  2.115983e-04   nst =  140
+At t = 1.00   max.norm(u) =  6.556853e-05   nst =  142
+
+Final Statistics:
+nst = 142    nfe  = 174    nsetups = 23     nfeLS = 0      nje = 3
+nni = 170    ncfn = 0      netf = 3
+num_threads = 4
+
diff --git a/examples/cvode/fcmix_parallel/CMakeLists.txt b/examples/cvode/fcmix_parallel/CMakeLists.txt
new file mode 100644
index 0000000..a7f83d6
--- /dev/null
+++ b/examples/cvode/fcmix_parallel/CMakeLists.txt
@@ -0,0 +1,145 @@
+# ---------------------------------------------------------------
+# $Revision: 4957 $
+# $Date: 2016-09-23 12:21:47 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the FCVODE parallel examples
+
+
+# Add variable FCVODE_examples with the names of the parallel CVODE examples
+
+SET(FCVODE_examples
+  "fcvDiag_non_p\;1\;2"
+  "fcvDiag_kry_bbd_p\;1\;2"
+  "fcvDiag_kry_p\;1\;2"
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the Fortran compiler to the MPIF77 script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPIF77 )
+  # use MPI_MPIF77 as the compiler
+  SET(CMAKE_Fortran_COMPILER ${MPI_MPIF77})
+ELSE(MPI_MPIF77)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPIF77)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+  SET(FNVECP_LIB sundials_fnvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+  SET(FNVECP_LIB sundials_fnvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FCVODE_LIB sundials_fcvode_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FCVODE_LIB} ${CVODE_LIB} ${FNVECP_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(HYPRE_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${HYPRE_LIBRARIES})
+ENDIF(HYPRE_FOUND)
+
+# Add the build and install targets for each CVODE example
+
+FOREACH(example_tuple ${FCVODE_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.f)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPIF77)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPIF77)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${FCVODE_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_parallel)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "CVODE")
+  SET(SOLVER_LIB "sundials_cvode")
+  SET(SOLVER_FLIB "sundials_fcvode")
+  FOREACH(example_tuple ${FCVODE_examples})
+    list(GET example_tuple 0 example)
+    LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${FCVODE_examples})
+  
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/fcmix_parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/cvode/fcmix_parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/fcmix_parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/cvode/fcmix_parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_parallel 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/cvode/fcmix_parallel/README b/examples/cvode/fcmix_parallel/README
new file mode 100644
index 0000000..91a3525
--- /dev/null
+++ b/examples/cvode/fcmix_parallel/README
@@ -0,0 +1,51 @@
+List of parallel CVODE FCMIX examples
+
+  fcvDiag_non_p     : diagonal ODE example - non-stiff case (ADAMS/FUNCTIONAL)
+  fcvDiag_kry_bbd_p : diagonal ODE example - stiff case (BDF/SPGMR/FCVBBD)
+  fcvDiag_kry_p     : diagonal ODE example - stiff case (BDF/SPGMR)
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/cvode/fcmix_parallel/fcvDiag_kry_bbd_p.f b/examples/cvode/fcmix_parallel/fcvDiag_kry_bbd_p.f
new file mode 100644
index 0000000..59a6168
--- /dev/null
+++ b/examples/cvode/fcmix_parallel/fcvDiag_kry_bbd_p.f
@@ -0,0 +1,310 @@
+C     ----------------------------------------------------------------
+C     $Revision: 4074 $
+C     $Date: 2014-04-23 14:13:52 -0700 (Wed, 23 Apr 2014) $
+C     ----------------------------------------------------------------
+C     Diagonal ODE example.  Stiff case, with diagonal preconditioner.
+C     Uses FCVODE interfaces and FCVBBD interfaces.
+C     Solves problem twice -- with left and right preconditioning.
+C     ----------------------------------------------------------------
+C     
+C     Include MPI-Fortran header file for MPI_COMM_WORLD, MPI types.
+      
+      IMPLICIT NONE
+C
+      INCLUDE "mpif.h"
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 NLOCAL, NEQ, IOUT(25), IPAR(2), MUDQ, MLDQ, MU, ML
+      PARAMETER (NLOCAL=10)   
+C
+      INTEGER NOUT, LNST, LNFE, LNSETUP, LNNI, LNCF, LNETF, LNPE
+      INTEGER LNLI, LNPS, LNCFL, MYPE, IER, NPES, METH, ITMETH
+      INTEGER LLENRW, LLENIW, LLENRWLS, LLENIWLS
+      INTEGER IATOL, ITASK, IPRE, IGS, JOUT
+      INTEGER I, NETF
+C The following declaration specification should match C type long int.
+      INTEGER*8 LENRWBBD, LENIWBBD, NGEBBD
+      INTEGER NST, NFE, NPSET, NPE, NPS, NNI, NLI, NCFN, NCFL
+      INTEGER LENRW, LENIW, LENRWLS, LENIWLS
+      DOUBLE PRECISION Y(1024), ROUT(10), RPAR(1)
+      DOUBLE PRECISION ALPHA, TOUT, ERMAX, AVDIM
+      DOUBLE PRECISION ATOL, ERRI, RTOL, GERMAX, DTOUT, T
+C     
+      DATA ATOL/1.0D-10/, RTOL/1.0D-5/, DTOUT/0.1D0/, NOUT/10/
+      DATA LLENRW/1/, LLENIW/2/, LNST/3/, LNFE/4/, LNETF/5/,  LNCF/6/,
+     1     LNNI/7/, LNSETUP/8/, LLENRWLS/13/, LLENIWLS/14/,
+     1     LNPE/18/, LNLI/20/, LNPS/19/, LNCFL/21/
+C
+C     Get NPES and MYPE.  Requires initialization of MPI.
+      CALL MPI_INIT(IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,5) IER
+ 5       FORMAT(///' MPI_ERROR: MPI_INIT returned IER = ', I5)
+         STOP
+      ENDIF
+      CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NPES, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,6) IER
+ 6       FORMAT(///' MPI_ERROR: MPI_COMM_SIZE returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+      CALL MPI_COMM_RANK(MPI_COMM_WORLD, MYPE, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,7) IER
+ 7       FORMAT(///' MPI_ERROR: MPI_COMM_RANK returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF      
+C     
+C     Set input arguments.
+      NEQ = NPES * NLOCAL
+      T = 0.0D0
+      METH = 2
+      ITMETH = 2
+      IATOL = 1
+      ITASK = 1
+      IPRE = 1
+      IGS = 1
+C     Set parameter alpha
+      ALPHA  = 10.0D0
+C
+C     Load IPAR and RPAR
+      IPAR(1) = NLOCAL
+      IPAR(2) = MYPE
+      RPAR(1) = ALPHA
+C     
+      DO I = 1, NLOCAL
+         Y(I) = 1.0D0
+      ENDDO
+C     
+      IF (MYPE .EQ. 0) THEN
+         WRITE(6,15) NEQ, ALPHA, RTOL, ATOL, NPES
+ 15      FORMAT('Diagonal test problem:'//' NEQ = ', I3, /
+     &          ' parameter alpha = ', F8.3/
+     &          ' ydot_i = -alpha*i * y_i (i = 1,...,NEQ)'/
+     &          ' RTOL, ATOL = ', 2E10.1/
+     &          ' Method is BDF/NEWTON/SPGMR'/
+     &          ' Preconditioner is band-block-diagonal, using CVBBDPRE'
+     &          /' Number of processors = ', I3/)
+      ENDIF
+C     
+      CALL FNVINITP(MPI_COMM_WORLD, 1, NLOCAL, NEQ, IER)
+C     
+      IF (IER .NE. 0) THEN
+         WRITE(6,20) IER
+ 20      FORMAT(///' SUNDIALS_ERROR: FNVINITP returned IER = ', I5)
+         CALL MPI_FINALIZE(IER)
+         STOP
+      ENDIF
+C     
+      CALL FCVMALLOC(T, Y, METH, ITMETH, IATOL, RTOL, ATOL,
+     &               IOUT, ROUT, IPAR, RPAR, IER)
+C     
+      IF (IER .NE. 0) THEN
+         WRITE(6,30) IER
+ 30      FORMAT(///' SUNDIALS_ERROR: FCVMALLOC returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+      CALL FCVSPGMR(IPRE, IGS, 0, 0.0D0, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,36) IER
+ 36      FORMAT(///' SUNDIALS_ERROR: FCVSPGMR returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C     
+      MUDQ = 0
+      MLDQ = 0
+      MU = 0
+      ML = 0
+      CALL FCVBBDINIT(NLOCAL, MUDQ, MLDQ, MU, ML, 0.0D0, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,35) IER
+ 35      FORMAT(///' SUNDIALS_ERROR: FCVBBDINIT returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+      IF (MYPE .EQ. 0) WRITE(6,38)
+ 38   FORMAT(/'Preconditioning on left'/)
+C     
+C     Looping point for cases IPRE = 1 and 2.
+C     
+ 40   CONTINUE
+C     
+C     Loop through tout values, call solver, print output, test for failure.
+      TOUT = DTOUT
+      DO 60 JOUT = 1, NOUT
+C     
+         CALL FCVODE(TOUT, T, Y, ITASK, IER)
+C     
+         IF (MYPE .EQ. 0) WRITE(6,45) T, IOUT(LNST), IOUT(LNFE)
+ 45      FORMAT(' t = ', E10.2, 5X, 'no. steps = ', I5,
+     &          '   no. f-s = ', I5)
+C     
+         IF (IER .NE. 0) THEN
+            WRITE(6,50) IER, IOUT(15)
+ 50         FORMAT(///' SUNDIALS_ERROR: FCVODE returned IER = ', I5, /,
+     &             '                 Linear Solver returned IER = ', I5)
+            CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+            STOP
+         ENDIF
+C     
+         TOUT = TOUT + DTOUT
+ 60   CONTINUE
+C     
+C     Get max. absolute error in the local vector.
+      ERMAX = 0.0D0
+      DO 65 I = 1, NLOCAL
+         ERRI  = Y(I) - EXP(-ALPHA * (MYPE * NLOCAL + I) * T)
+         ERMAX = MAX(ERMAX, ABS(ERRI))
+ 65   CONTINUE
+C     Get global max. error from MPI_REDUCE call.
+      CALL MPI_REDUCE(ERMAX, GERMAX, 1, MPI_DOUBLE_PRECISION, MPI_MAX,
+     &                0, MPI_COMM_WORLD, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,70) IER
+ 70      FORMAT(///' MPI_ERROR: MPI_REDUCE returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+      IF (MYPE .EQ. 0) WRITE(6,75) GERMAX
+ 75   FORMAT(/'Max. absolute error is', E10.2/)
+C     
+C     Print final statistics.
+      IF (MYPE .EQ. 0) THEN
+         NST = IOUT(LNST)
+         NFE = IOUT(LNFE)
+         NPSET = IOUT(LNSETUP)
+         NPE = IOUT(LNPE)
+         NPS = IOUT(LNPS)
+         NNI = IOUT(LNNI)
+         NLI = IOUT(LNLI)
+         AVDIM = DBLE(NLI) / DBLE(NNI)
+         NCFN = IOUT(LNCF)
+         NCFL = IOUT(LNCFL)
+         NETF = IOUT(LNETF)
+         LENRW = IOUT(LLENRW)
+         LENIW = IOUT(LLENIW)
+         LENRWLS = IOUT(LLENRWLS)
+         LENIWLS = IOUT(LLENIWLS)
+         WRITE(6,80) NST, NFE, NPSET, NPE, NPS, NNI, NLI, AVDIM, NCFN,
+     &               NCFL, NETF, LENRW, LENIW, LENRWLS, LENIWLS
+ 80      FORMAT(/'Final statistics:'//
+     &          ' number of steps        = ', I5, 4X,
+     &          ' number of f evals.     = ', I5/
+     &          ' number of prec. setups = ', I5/
+     &          ' number of prec. evals. = ', I5, 4X,
+     &          ' number of prec. solves = ', I5/
+     &          ' number of nonl. iters. = ', I5, 4X,
+     &          ' number of lin. iters.  = ', I5/
+     &          ' average Krylov subspace dimension (NLI/NNI) = ',F8.4/
+     &          ' number of conv. failures.. nonlinear = ', I3,
+     &          '  linear = ', I3/
+     &          ' number of error test failures = ', I3/
+     &          ' main solver real/int workspace sizes   = ',2I5/
+     &          ' linear solver real/int workspace sizes = ',2I5)
+         CALL FCVBBDOPT(LENRWBBD, LENIWBBD, NGEBBD)
+         WRITE(6,82) LENRWBBD, LENIWBBD, NGEBBD
+ 82      FORMAT('In CVBBDPRE:'/
+     &          ' real/int local workspace = ', 2I5/
+     &          ' number of g evals. = ', I5)
+      ENDIF
+C     
+C     If IPRE = 1, re-initialize T, Y, and the solver, and loop for
+C     case IPRE = 2.  Otherwise jump to final block.
+      IF (IPRE .EQ. 2) GO TO 99
+C
+      T = 0.0D0
+      DO I = 1, NLOCAL
+         Y(I) = 1.0D0
+      ENDDO         
+C
+      CALL FCVREINIT(T, Y, IATOL, RTOL, ATOL, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,91) IER
+ 91      FORMAT(///' SUNDIALS_ERROR: FCVREINIT returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+      IPRE = 2
+C
+      CALL FCVBBDREINIT(NLOCAL, MUDQ, MLDQ, 0.0D0, IER) 
+      IF (IER .NE. 0) THEN
+         WRITE(6,92) IER
+ 92      FORMAT(///' SUNDIALS_ERROR: FCVBBDREINIT returned IER = ', I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+      CALL FCVSPGMRREINIT(IPRE, IGS, 0.0D0, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,93) IER
+ 93      FORMAT(///' SUNDIALS_ERROR: FCVSPGMRREINIT returned IER = ',I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+      IF (MYPE .EQ. 0) WRITE(6,95)
+ 95   FORMAT(//60('-')///'Preconditioning on right'/)
+      GO TO 40
+C     
+C     Free the memory and finalize MPI.
+ 99   CALL FCVFREE
+      CALL MPI_FINALIZE(IER)
+C     
+      STOP
+      END
+C
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FCVFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function f
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER, MYPE, I, NLOCAL
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+      DOUBLE PRECISION ALPHA
+C     
+      NLOCAL = IPAR(1)
+      MYPE = IPAR(2)
+      ALPHA = RPAR(1)
+C
+      DO I = 1, NLOCAL
+         YDOT(I) = -ALPHA * (MYPE * NLOCAL + I) * Y(I)
+      ENDDO
+C     
+      IER = 0
+C
+      RETURN
+      END
+C
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FCVGLOCFN(NLOC, T, YLOC, GLOC, IPAR, RPAR, IER)
+C     Routine to define local approximate function g, here the same as f. 
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 NLOC, IPAR(*)
+      INTEGER IER
+      DOUBLE PRECISION T, YLOC(*), GLOC(*), RPAR(*)
+C     
+      CALL FCVFUN(T, YLOC, GLOC, IPAR, RPAR, IER)
+C
+      RETURN
+      END
+C
+C     ------------------------------------------------------------------------
+C      
+      SUBROUTINE FCVCOMMFN(NLOC, T, YLOC, IPAR, RPAR, IER)
+C     Routine to perform communication required for evaluation of g.
+      IER = 0
+      RETURN
+      END
diff --git a/examples/cvode/fcmix_parallel/fcvDiag_kry_bbd_p.out b/examples/cvode/fcmix_parallel/fcvDiag_kry_bbd_p.out
new file mode 100644
index 0000000..71026bd
--- /dev/null
+++ b/examples/cvode/fcmix_parallel/fcvDiag_kry_bbd_p.out
@@ -0,0 +1,76 @@
+Diagonal test problem:
+
+ NEQ =  40
+ parameter alpha =   10.000
+ ydot_i = -alpha*i * y_i (i = 1,...,NEQ)
+ RTOL, ATOL =    0.1E-04   0.1E-09
+ Method is BDF/NEWTON/SPGMR
+ Preconditioner is band-block-diagonal, using CVBBDPRE
+ Number of processors =   4
+
+
+Preconditioning on left
+
+ t =   0.10E+00     no. steps =   221   no. f-s =   262
+ t =   0.20E+00     no. steps =   265   no. f-s =   308
+ t =   0.30E+00     no. steps =   290   no. f-s =   334
+ t =   0.40E+00     no. steps =   306   no. f-s =   351
+ t =   0.50E+00     no. steps =   319   no. f-s =   365
+ t =   0.60E+00     no. steps =   329   no. f-s =   375
+ t =   0.70E+00     no. steps =   339   no. f-s =   386
+ t =   0.80E+00     no. steps =   345   no. f-s =   392
+ t =   0.90E+00     no. steps =   352   no. f-s =   399
+ t =   0.10E+01     no. steps =   359   no. f-s =   406
+
+Max. absolute error is  0.28E-08
+
+
+Final statistics:
+
+ number of steps        =   359     number of f evals.     =   406
+ number of prec. setups =    38
+ number of prec. evals. =     7     number of prec. solves =   728
+ number of nonl. iters. =   402     number of lin. iters.  =   364
+ average Krylov subspace dimension (NLI/NNI) =   0.9055
+ number of conv. failures.. nonlinear =   0  linear =   0
+ number of error test failures =   5
+ main solver real/int workspace sizes   =   489  120
+ linear solver real/int workspace sizes =   446   80
+In CVBBDPRE:
+ real/int local workspace =    20   10
+ number of g evals. =    14
+
+
+------------------------------------------------------------
+
+
+Preconditioning on right
+
+ t =   0.10E+00     no. steps =   221   no. f-s =   262
+ t =   0.20E+00     no. steps =   265   no. f-s =   308
+ t =   0.30E+00     no. steps =   290   no. f-s =   334
+ t =   0.40E+00     no. steps =   306   no. f-s =   351
+ t =   0.50E+00     no. steps =   319   no. f-s =   365
+ t =   0.60E+00     no. steps =   329   no. f-s =   375
+ t =   0.70E+00     no. steps =   339   no. f-s =   386
+ t =   0.80E+00     no. steps =   345   no. f-s =   392
+ t =   0.90E+00     no. steps =   352   no. f-s =   399
+ t =   0.10E+01     no. steps =   359   no. f-s =   406
+
+Max. absolute error is  0.28E-08
+
+
+Final statistics:
+
+ number of steps        =   359     number of f evals.     =   406
+ number of prec. setups =    38
+ number of prec. evals. =     7     number of prec. solves =   728
+ number of nonl. iters. =   402     number of lin. iters.  =   364
+ average Krylov subspace dimension (NLI/NNI) =   0.9055
+ number of conv. failures.. nonlinear =   0  linear =   0
+ number of error test failures =   5
+ main solver real/int workspace sizes   =   489  120
+ linear solver real/int workspace sizes =   446   80
+In CVBBDPRE:
+ real/int local workspace =    20   10
+ number of g evals. =    14
diff --git a/examples/cvode/fcmix_parallel/fcvDiag_kry_p.f b/examples/cvode/fcmix_parallel/fcvDiag_kry_p.f
new file mode 100644
index 0000000..7decedc
--- /dev/null
+++ b/examples/cvode/fcmix_parallel/fcvDiag_kry_p.f
@@ -0,0 +1,345 @@
+C     ----------------------------------------------------------------
+C     $Revision: 4074 $
+C     $Date: 2014-04-23 14:13:52 -0700 (Wed, 23 Apr 2014) $
+C     ----------------------------------------------------------------
+C     Diagonal ODE example. Stiff case, with BDF/SPGMR, diagonal
+C     preconditioner. Solved with preconditioning on left, then with
+C     preconditioning on right.
+C     ----------------------------------------------------------------
+C
+C     Include MPI-Fortran header file for MPI_COMM_WORLD, MPI types.
+C
+      IMPLICIT NONE
+C
+      INCLUDE "mpif.h"
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 NLOCAL, NEQ, IOUT(25), IPAR(2)
+      PARAMETER (NLOCAL=10)
+C
+      INTEGER LNST, LNFE, LNSETUP, LNNI, LNCF, LNETF, LNPE, LNLI, LNPS
+      INTEGER LNCFL, NOUT, MYPE, NPES, IER, METH, ITMETH, IATOL
+      INTEGER ITASK, IPRE, IGS, JOUT
+      INTEGER I, NST, NFE, NPSET, NPE, NPS, NNI, NLI
+      INTEGER NCFL, NETF, NCFN
+      DOUBLE PRECISION Y(1024), ROUT(10), RPAR(1)
+      DOUBLE PRECISION ATOL, DTOUT, T, ALPHA, RTOL, TOUT, ERMAX, ERRI
+      DOUBLE PRECISION GERMAX, AVDIM
+C
+      DATA ATOL/1.0D-10/, RTOL/1.0D-5/, DTOUT/0.1D0/, NOUT/10/
+      DATA LNST/3/, LNFE/4/, LNETF/5/,  LNCF/6/, LNNI/7/, LNSETUP/8/, 
+     1     LNPE/18/, LNLI/20/, LNPS/19/, LNCFL/21/
+C
+C     Get NPES and MYPE.  Requires initialization of MPI.
+      CALL MPI_INIT(IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,5) IER
+ 5      FORMAT(///' MPI_ERROR: MPI_INIT returned IER = ', I5)
+        STOP
+        ENDIF
+      CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NPES, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,6) IER
+ 6      FORMAT(///' MPI_ERROR: MPI_COMM_SIZE returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+      CALL MPI_COMM_RANK(MPI_COMM_WORLD, MYPE, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,7) IER
+ 7      FORMAT(///' MPI_ERROR: MPI_COMM_RANK returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+C
+C     Set input arguments.
+      NEQ = NPES * NLOCAL
+      T = 0.0D0
+      METH = 2
+      ITMETH = 2
+      IATOL = 1
+      ITASK = 1
+      IPRE = 1
+      IGS = 1
+C     Set parameter alpha.
+      ALPHA  = 10.0D0
+C
+C     Load IPAR and RPAR
+      IPAR(1) = NLOCAL
+      IPAR(2) = MYPE
+      RPAR(1) = ALPHA
+C
+C     Do remaining initializations for first case: IPRE = 1 (prec. on left).
+C
+      DO 10 I = 1, NLOCAL
+  10    Y(I) = 1.0D0
+C
+      IF (MYPE .EQ. 0) THEN
+        WRITE(6,11) NEQ, ALPHA
+  11    FORMAT('Diagonal test problem:'//' NEQ = ', I3,
+     1         ' parameter alpha = ', F8.3)
+        WRITE(6,12)
+  12    FORMAT(' ydot_i = -alpha*i * y_i (i = 1,...,NEQ)')
+        WRITE(6,13) RTOL, ATOL
+  13    FORMAT(' RTOL, ATOL = ', 2E10.1)
+        WRITE(6,14)
+  14    FORMAT(' Method is BDF/NEWTON/SPGMR'/
+     1         ' Diagonal preconditioner uses approximate Jacobian')
+        WRITE(6,15) NPES
+  15    FORMAT(' Number of processors = ', I3)
+        WRITE(6,16)
+  16    FORMAT(//'Preconditioning on left'/)
+        ENDIF
+C
+      CALL FNVINITP(MPI_COMM_WORLD, 1, NLOCAL, NEQ, IER)
+C
+      IF (IER .NE. 0) THEN
+        WRITE(6,20) IER
+  20    FORMAT(///' SUNDIALS_ERROR: FNVINITP returned IER = ', I5)
+        CALL MPI_FINALIZE(IER)
+        STOP
+        ENDIF
+C
+      CALL FCVMALLOC(T, Y, METH, ITMETH, IATOL, RTOL, ATOL,
+     1               IOUT, ROUT, IPAR, RPAR, IER)
+C
+      IF (IER .NE. 0) THEN
+        WRITE(6,30) IER
+  30    FORMAT(///' SUNDIALS_ERROR: FCVMALLOC returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+C
+      CALL FCVSPGMR (IPRE, IGS, 0, 0.0D0, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,35) IER
+  35    FORMAT(///' SUNDIALS_ERROR: FCVSPGMR returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+C
+        CALL FCVSPILSSETPREC(1, IER)
+C
+C     Loop through tout values, call solver, print output, test for failure.
+      TOUT = DTOUT
+      DO 70 JOUT = 1, NOUT
+C
+        CALL FCVODE(TOUT, T, Y, ITASK, IER)
+C
+        IF (MYPE .EQ. 0) WRITE(6,40) T, IOUT(LNST), IOUT(LNFE)
+  40    FORMAT(' t = ', E10.2, 5X, 'no. steps = ', I5,
+     &         '   no. f-s = ', I5)
+C
+        IF (IER .NE. 0) THEN
+          WRITE(6,60) IER, IOUT(15)
+  60      FORMAT(///' SUNDIALS_ERROR: FCVODE returned IER = ', I5, /,
+     &           '                 Linear Solver returned IER = ', I5)
+          CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+          STOP
+          ENDIF
+C
+        TOUT = TOUT + DTOUT
+  70    CONTINUE
+C
+C     Get max. absolute error in the local vector.
+      ERMAX = 0.0D0
+      DO 75 I = 1, NLOCAL
+        ERRI  = Y(I) - EXP(-ALPHA * (MYPE * NLOCAL + I) * T)
+  75    ERMAX = MAX(ERMAX, ABS(ERRI))
+C     Get global max. error from MPI_REDUCE call.
+      CALL MPI_REDUCE(ERMAX, GERMAX, 1, MPI_DOUBLE_PRECISION, MPI_MAX,
+     1                0, MPI_COMM_WORLD, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,80) IER
+  80    FORMAT(///' MPI_ERROR: MPI_REDUCE returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+      IF (MYPE .EQ. 0) WRITE(6,85) GERMAX
+  85  FORMAT(/'Max. absolute error is ', E10.2/)
+C
+C     Print final statistics.
+      NST = IOUT(LNST)
+      NFE = IOUT(LNFE)
+      NPSET = IOUT(LNSETUP)
+      NPE = IOUT(LNPE)
+      NPS = IOUT(LNPS)
+      NNI = IOUT(LNNI)
+      NLI = IOUT(LNLI)
+      AVDIM = DBLE(NLI) / DBLE(NNI)
+      NCFN = IOUT(LNCF)
+      NCFL = IOUT(LNCFL)
+      NETF = IOUT(LNETF)
+      IF (MYPE .EQ. 0)
+     1  WRITE (6,90) NST, NFE, NPSET, NPE, NPS, NNI, NLI, AVDIM, NCFN,
+     &               NCFL, NETF
+  90  FORMAT(/'Final statistics:'//
+     &       ' number of steps        = ', I5, 5X,
+     &       'number of f evals.     =', I5/
+     &       ' number of prec. setups = ', I5/
+     &       ' number of prec. evals. = ', I5, 5X,
+     &       'number of prec. solves = ', I5/
+     &       ' number of nonl. iters. = ', I5, 5X,
+     &       'number of lin. iters.  = ', I5/
+     &       ' average Krylov subspace dimension (NLI/NNI)  = ', F8.4/
+     &       ' number of conv. failures.. nonlinear = ', I3,
+     &       '  linear = ', I3/
+     &       ' number of error test failures = ', I3)
+C
+C     Re-initialize to run second case: IPRE = 2 (prec. on right).
+      IPRE = 2
+      T = 0.0D0
+      DO 110 I = 1, NLOCAL
+ 110    Y(I) = 1.0D0
+C
+      IF (MYPE .EQ. 0)  WRITE(6,111) 
+ 111  FORMAT(//60('-')///'Preconditioning on right'/)
+C
+      CALL FCVREINIT(T, Y, IATOL, RTOL, ATOL, IER)
+C
+      IF (IER .NE. 0) THEN
+        WRITE(6,130) IER
+ 130    FORMAT(///' SUNDIALS_ERROR: FCVREINIT returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+      ENDIF
+C
+      CALL FCVSPGMRREINIT (IPRE, IGS, 0.0D0, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,140) IER
+ 140     FORMAT(///' SUNDIALS_ERROR: FCVSPGMRREINIT returned IER = ',I5)
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+         STOP
+      ENDIF
+C
+C     Loop through tout values, call solver, print output, test for failure.
+      TOUT = DTOUT
+      DO 170 JOUT = 1, NOUT
+C
+        CALL FCVODE(TOUT, T, Y, ITASK, IER)
+C
+        IF (MYPE .EQ. 0) WRITE(6,40) T, IOUT(LNST), IOUT(LNFE)
+C
+        IF (IER .NE. 0) THEN
+          WRITE(6,60) IER
+          CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+          STOP
+          ENDIF
+C
+        TOUT = TOUT + DTOUT
+ 170    CONTINUE
+C
+C     Get max. absolute error in the local vector.
+      ERMAX = 0.0D0
+      DO 175 I = 1, NLOCAL
+        ERRI  = Y(I) - EXP(-ALPHA * (MYPE * NLOCAL + I) * T)
+ 175    ERMAX = MAX(ERMAX, ABS(ERRI))
+C     Get global max. error from MPI_REDUCE call.
+      CALL MPI_REDUCE(ERMAX, GERMAX, 1, MPI_DOUBLE_PRECISION, MPI_MAX,
+     1                0, MPI_COMM_WORLD, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,80) IER
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+      ENDIF
+      IF (MYPE .EQ. 0) WRITE(6,85) GERMAX
+C     
+C     Print final statistics.
+      NST = IOUT(LNST)
+      NFE = IOUT(LNFE)
+      NPSET = IOUT(LNSETUP)
+      NPE = IOUT(LNPE)
+      NPS = IOUT(LNPS)
+      NNI = IOUT(LNNI)
+      NLI = IOUT(LNLI)
+      AVDIM = DBLE(NLI) / DBLE(NNI)
+      NCFN = IOUT(LNCF)
+      NCFL = IOUT(LNCFL)
+      NETF = IOUT(LNETF)
+      IF (MYPE .EQ. 0)
+     1  WRITE (6,90) NST, NFE, NPSET, NPE, NPS, NNI, NLI, AVDIM, NCFN,
+     &               NCFL, NETF
+C
+C     Free the memory and finalize MPI.
+      CALL FCVFREE
+      CALL MPI_FINALIZE(IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,195) IER
+ 195    FORMAT(///' MPI_ERROR: MPI_FINALIZE returned IER = ', I5)
+        STOP
+        ENDIF
+C
+      STOP
+      END
+C
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FCVFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function f
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER, I, MYPE, NLOCAL
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+      DOUBLE PRECISION ALPHA
+C
+      NLOCAL = IPAR(1)
+      MYPE = IPAR(2)
+      ALPHA = RPAR(1)
+C
+      DO I = 1, NLOCAL
+         YDOT(I) = -ALPHA * (MYPE * NLOCAL + I) * Y(I)
+      ENDDO
+C
+      IER = 0
+C
+      RETURN
+      END
+C
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FCVPSOL(T, Y, FY, R, Z, GAMMA, DELTA, LR,
+     &                   IPAR, RPAR, VTEMP, IER)
+C     Routine to solve preconditioner linear system
+C     This routine uses a diagonal preconditioner P = I - gamma*J,
+C     where J is a diagonal approximation to the true Jacobian, given by:
+C     J = diag(0, 0, 0, -4*alpha, ..., -N*alpha).
+C     The vector r is copied to z, and the inverse of P (restricted to the
+C     local vector segment) is applied to the vector z.
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER, LR, I, MYPE, NLOCAL, ISTART, IBASE 
+      DOUBLE PRECISION T, Y(*), FY(*), R(*), Z(*)
+      DOUBLE PRECISION GAMMA, DELTA, RPAR(*)
+      DOUBLE PRECISION VTEMP(*)
+      DOUBLE PRECISION PSUBI, ALPHA
+C
+      NLOCAL = IPAR(1)
+      MYPE = IPAR(2)
+      ALPHA = RPAR(1)
+C
+      DO I = 1, NLOCAL
+         Z(I) = R(I)
+      ENDDO
+C
+      IBASE = MYPE * NLOCAL
+      ISTART = MAX(1, 4 - IBASE)
+      DO I = ISTART, NLOCAL
+        PSUBI = 1.0D0 + GAMMA * ALPHA * (IBASE + I)
+        Z(I) = Z(I) / PSUBI
+      ENDDO
+C
+      RETURN
+      END
+C
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FCVPSET(T, Y, FY, JOK, JCUR, GAMMA, H,
+     &                   IPAR, RPAR, V1, V2, V3, IER)
+C     Empty subroutine. Not needed for the preconditioner, but required
+C     by the FCVODE module.
+      RETURN
+      END
diff --git a/examples/cvode/fcmix_parallel/fcvDiag_kry_p.out b/examples/cvode/fcmix_parallel/fcvDiag_kry_p.out
new file mode 100644
index 0000000..6d37524
--- /dev/null
+++ b/examples/cvode/fcmix_parallel/fcvDiag_kry_p.out
@@ -0,0 +1,65 @@
+Diagonal test problem:
+
+ NEQ =  40 parameter alpha =   10.000
+ ydot_i = -alpha*i * y_i (i = 1,...,NEQ)
+ RTOL, ATOL =    0.1E-04   0.1E-09
+ Method is BDF/NEWTON/SPGMR
+ Diagonal preconditioner uses approximate Jacobian
+ Number of processors =   4
+
+
+Preconditioning on left
+
+ t =   0.10E+00     no. steps =   221   no. f-s =   262
+ t =   0.20E+00     no. steps =   265   no. f-s =   308
+ t =   0.30E+00     no. steps =   290   no. f-s =   334
+ t =   0.40E+00     no. steps =   306   no. f-s =   351
+ t =   0.50E+00     no. steps =   319   no. f-s =   365
+ t =   0.60E+00     no. steps =   329   no. f-s =   375
+ t =   0.70E+00     no. steps =   339   no. f-s =   385
+ t =   0.80E+00     no. steps =   346   no. f-s =   393
+ t =   0.90E+00     no. steps =   351   no. f-s =   400
+ t =   0.10E+01     no. steps =   355   no. f-s =   404
+
+Max. absolute error is   0.15E-07
+
+
+Final statistics:
+
+ number of steps        =   355     number of f evals.     =  404
+ number of prec. setups =    37
+ number of prec. evals. =     7     number of prec. solves =   727
+ number of nonl. iters. =   400     number of lin. iters.  =   367
+ average Krylov subspace dimension (NLI/NNI)  =   0.9175
+ number of conv. failures.. nonlinear =   0  linear =   0
+ number of error test failures =   5
+
+
+------------------------------------------------------------
+
+
+Preconditioning on right
+
+ t =   0.10E+00     no. steps =   221   no. f-s =   262
+ t =   0.20E+00     no. steps =   265   no. f-s =   308
+ t =   0.30E+00     no. steps =   290   no. f-s =   334
+ t =   0.40E+00     no. steps =   306   no. f-s =   351
+ t =   0.50E+00     no. steps =   319   no. f-s =   365
+ t =   0.60E+00     no. steps =   329   no. f-s =   375
+ t =   0.70E+00     no. steps =   339   no. f-s =   385
+ t =   0.80E+00     no. steps =   345   no. f-s =   392
+ t =   0.90E+00     no. steps =   352   no. f-s =   399
+ t =   0.10E+01     no. steps =   358   no. f-s =   405
+
+Max. absolute error is   0.21E-08
+
+
+Final statistics:
+
+ number of steps        =   358     number of f evals.     =  405
+ number of prec. setups =    36
+ number of prec. evals. =     6     number of prec. solves =   730
+ number of nonl. iters. =   401     number of lin. iters.  =   367
+ average Krylov subspace dimension (NLI/NNI)  =   0.9152
+ number of conv. failures.. nonlinear =   0  linear =   0
+ number of error test failures =   5
diff --git a/examples/cvode/fcmix_parallel/fcvDiag_non_p.f b/examples/cvode/fcmix_parallel/fcvDiag_non_p.f
new file mode 100644
index 0000000..59fdf85
--- /dev/null
+++ b/examples/cvode/fcmix_parallel/fcvDiag_non_p.f
@@ -0,0 +1,190 @@
+C     ----------------------------------------------------------------
+C     $Revision: 4074 $
+C     $Date: 2014-04-23 14:13:52 -0700 (Wed, 23 Apr 2014) $
+C     ----------------------------------------------------------------
+C     Diagonal ODE example. Nonstiff case: alpha = 10/NEQ.
+C     ----------------------------------------------------------------
+C
+C     Include MPI-Fortran header file for MPI_COMM_WORLD, MPI types.
+C
+      IMPLICIT NONE
+C
+      INCLUDE "mpif.h"
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 NLOCAL, NEQ, IOUT(25), IPAR(2)
+      PARAMETER (NLOCAL=2)
+C
+      INTEGER IER, MYPE, NPES, NOUT, LNST, LNFE, LNNI, LNCF, LNETF
+      INTEGER METH, ITMETH, IATOL, ITASK, JOUT
+      INTEGER I, NST, NFE, NNI, NCFN, NETF
+      DOUBLE PRECISION Y(128), ROUT(10), RPAR(1)
+      DOUBLE PRECISION ATOL, RTOL, DTOUT, T, ALPHA, TOUT
+      DOUBLE PRECISION ERMAX, ERRI, GERMAX
+C
+      DATA ATOL/1.0D-10/, RTOL/1.0D-5/, DTOUT/0.1D0/, NOUT/10/
+      DATA LNST/3/, LNFE/4/, LNNI/7/, LNCF/6/, LNETF/5/
+C
+C     Get NPES and MYPE.  Requires initialization of MPI.
+      CALL MPI_INIT(IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,5) IER
+ 5      FORMAT(///' MPI_ERROR: MPI_INIT returned IER = ', I5)
+        STOP
+        ENDIF
+      CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NPES, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,6) IER
+ 6      FORMAT(///' MPI_ERROR: MPI_COMM_SIZE returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+      CALL MPI_COMM_RANK(MPI_COMM_WORLD, MYPE, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,7) IER
+ 7      FORMAT(///' MPI_ERROR: MPI_COMM_RANK returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+C
+C     Set input arguments.
+      NEQ = NPES * NLOCAL
+      T = 0.0D0
+      METH = 1
+      ITMETH = 1
+      IATOL = 1
+      ITASK = 1
+c     Set parameter ALPHA
+      ALPHA  = 10.0D0 / NEQ
+C
+C     Load IPAR and RPAR
+      IPAR(1) = NLOCAL
+      IPAR(2) = MYPE
+      RPAR(1) = ALPHA
+C
+      DO 10 I = 1, NLOCAL
+  10    Y(I) = 1.0D0
+C
+      IF (MYPE .EQ. 0) THEN
+        WRITE(6,11) NEQ, ALPHA
+  11    FORMAT('Diagonal test problem:'//' NEQ = ', I3, /
+     1         ' parameter alpha = ', F8.3)
+        WRITE(6,12)
+  12    FORMAT(' ydot_i = -alpha*i * y_i (i = 1,...,NEQ)')
+        WRITE(6,13) RTOL, ATOL
+  13    FORMAT(' RTOL, ATOL = ', 2E10.1)
+        WRITE(6,14)
+  14    FORMAT(' Method is ADAMS/FUNCTIONAL')
+        WRITE(6,15) NPES
+  15    FORMAT(' Number of processors = ', I3//)
+        ENDIF
+C
+      CALL FNVINITP(MPI_COMM_WORLD, 1, NLOCAL, NEQ, IER)
+C
+      IF (IER .NE. 0) THEN
+        WRITE(6,20) IER
+  20    FORMAT(///' SUNDIALS_ERROR: FNVINITP returned IER = ', I5)
+        CALL MPI_FINALIZE(IER)
+        STOP
+        ENDIF
+C
+      CALL FCVMALLOC(T, Y, METH, ITMETH, IATOL, RTOL, ATOL,
+     1               IOUT, ROUT, IPAR, RPAR, IER)
+C
+      IF (IER .NE. 0) THEN
+        WRITE(6,30) IER
+  30    FORMAT(///' SUNDIALS_ERROR: FCVMALLOC returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+C
+C     Loop through tout values, call solver, print output, test for failure.
+      TOUT = DTOUT
+      DO 70 JOUT = 1, NOUT
+C
+        CALL FCVODE(TOUT, T, Y, ITASK, IER)
+C
+        IF (MYPE .EQ. 0) WRITE(6,40) T, IOUT(LNST), IOUT(LNFE)
+  40    FORMAT(' t = ', D10.2, 5X, 'no. steps = ', I5,
+     &         '   no. f-s = ', I5)
+C
+        IF (IER .NE. 0) THEN
+          WRITE(6,60) IER, IOUT(15)
+  60      FORMAT(///' SUNDIALS_ERROR: FCVODE returned IER = ', I5, /,
+     &           '                 Linear Solver returned IER = ', I5)
+          CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+          STOP
+          ENDIF
+C
+        TOUT = TOUT + DTOUT
+  70    CONTINUE
+C
+C     Get max. absolute error in the local vector.
+      ERMAX = 0.0D0
+      DO 75 I = 1, NLOCAL
+        ERRI  = Y(I) - EXP(-ALPHA * (MYPE * NLOCAL + I) * T)
+        ERMAX = MAX(ERMAX, ABS(ERRI))
+  75    CONTINUE
+C     Get global max. error from MPI_REDUCE call.
+      CALL MPI_REDUCE(ERMAX, GERMAX, 1, MPI_DOUBLE_PRECISION, MPI_MAX,
+     1                0, MPI_COMM_WORLD, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,80) IER
+  80    FORMAT(///' MPI_ERROR: MPI_REDUCE returned IER = ', I5)
+        CALL MPI_ABORT(MPI_COMM_WORLD, 1, IER)
+        STOP
+        ENDIF
+      IF (MYPE .EQ. 0) WRITE(6,85) GERMAX
+  85  FORMAT(/'Max. absolute error is ', E10.2/)
+C
+C     Print final statistics.
+      NST = IOUT(LNST)
+      NFE = IOUT(LNFE)
+      NNI = IOUT(LNNI)
+      NCFN = IOUT(LNCF)
+      NETF = IOUT(LNETF)
+      IF (MYPE .EQ. 0) WRITE (6,90) NST, NFE, NNI, NCFN, NETF
+  90  FORMAT(/'Final statistics:'//
+     &       ' number of steps = ', I5, 5X, /,
+     &       ' number of f evals. = ', I5/
+     &       ' number of nonlinear iters. = ', I5/
+     &       ' number of nonlinear conv. failures = ', I3/
+     &       ' number of error test failures = ', I3)
+C
+C     Free the memory and finalize MPI.
+      CALL FCVFREE
+      CALL MPI_FINALIZE(IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,95) IER
+ 95     FORMAT(///' MPI_ERROR: MPI_FINALIZE returned IER = ', I5)
+        STOP
+        ENDIF
+C
+      STOP
+      END
+C
+C     ------------------------------------------------------------------------
+C
+      SUBROUTINE FCVFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function f
+C
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER, MYPE, NLOCAL, I
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+      DOUBLE PRECISION ALPHA
+C
+      NLOCAL = IPAR(1)
+      MYPE = IPAR(2)
+      ALPHA = RPAR(1)
+C
+      DO I = 1, NLOCAL
+         YDOT(I) = -ALPHA * (MYPE * NLOCAL + I) * Y(I)
+      ENDDO
+C
+      IER = 0
+C
+      RETURN
+      END
diff --git a/examples/cvode/fcmix_parallel/fcvDiag_non_p.out b/examples/cvode/fcmix_parallel/fcvDiag_non_p.out
new file mode 100644
index 0000000..461a677
--- /dev/null
+++ b/examples/cvode/fcmix_parallel/fcvDiag_non_p.out
@@ -0,0 +1,31 @@
+Diagonal test problem:
+
+ NEQ =   8
+ parameter alpha =    1.250
+ ydot_i = -alpha*i * y_i (i = 1,...,NEQ)
+ RTOL, ATOL =    0.1E-04   0.1E-09
+ Method is ADAMS/FUNCTIONAL
+ Number of processors =   4
+
+
+ t =   0.10D+00     no. steps =    14   no. f-s =    32
+ t =   0.20D+00     no. steps =    22   no. f-s =    40
+ t =   0.30D+00     no. steps =    29   no. f-s =    47
+ t =   0.40D+00     no. steps =    37   no. f-s =    55
+ t =   0.50D+00     no. steps =    44   no. f-s =    62
+ t =   0.60D+00     no. steps =    51   no. f-s =    69
+ t =   0.70D+00     no. steps =    59   no. f-s =    78
+ t =   0.80D+00     no. steps =    66   no. f-s =    85
+ t =   0.90D+00     no. steps =    74   no. f-s =    93
+ t =   0.10D+01     no. steps =    81   no. f-s =   100
+
+Max. absolute error is   0.41E-07
+
+
+Final statistics:
+
+ number of steps =    81
+ number of f evals. =   100
+ number of nonlinear iters. =    96
+ number of nonlinear conv. failures =   0
+ number of error test failures =   3
diff --git a/examples/cvode/fcmix_serial/CMakeLists.txt b/examples/cvode/fcmix_serial/CMakeLists.txt
new file mode 100644
index 0000000..cde8e0a
--- /dev/null
+++ b/examples/cvode/fcmix_serial/CMakeLists.txt
@@ -0,0 +1,194 @@
+# ---------------------------------------------------------------
+# $Revision: 4957 $
+# $Date: 2016-09-23 12:21:47 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the FCVODE serial examples
+
+
+# Add variable FCVODE_examples with the names of the serial FCVODE examples
+
+SET(FCVODE_examples
+  fcvAdvDiff_bnd
+  fcvDiurnal_kry_bp
+  fcvDiurnal_kry
+  fcvRoberts_dns
+  )
+
+SET(FCVODE_examples_KLU
+  fcvRoberts_klu
+  )
+
+SET(FCVODE_examples_SUPERLUMT
+  fcvRoberts_sps
+  )
+
+# Add variable fcvode_bl_examples with the names of the serial FCVODE examples
+# that use Lapack
+
+SET(FCVODE_examples_BL
+  fcvRoberts_dnsL
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+  SET(FNVECS_LIB sundials_fnvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+  SET(FNVECS_LIB sundials_fnvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FCVODE_LIB sundials_fcvode_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FCVODE_LIB} ${CVODE_LIB} ${FNVECS_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(HYPRE_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${HYPRE_LIBRARIES})
+ENDIF(HYPRE_FOUND)
+
+# Add the build and install targets for each FCVODE example
+
+FOREACH(example ${FCVODE_examples})
+  ADD_EXECUTABLE(${example} ${example}.f)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${FCVODE_examples})
+
+# Add the build and install targets for each Lapack FCVODE example (if needed)
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${FCVODE_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.f)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${FCVODE_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+# If KLU support is enabled, add the build and install targets for
+# the examples using KLU
+IF(KLU_FOUND)
+  FOREACH(example ${FCVODE_examples_KLU})
+    ADD_EXECUTABLE(${example} ${example}.f)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${FCVODE_examples_KLU})
+ENDIF(KLU_FOUND)
+
+# If SUPERLUMT support is enabled, add the build and install targets for
+# the examples using SUPERLUMT
+IF(SUPERLUMT_FOUND)
+  FOREACH(example ${FCVODE_examples_SUPERLUMT})
+    ADD_EXECUTABLE(${example} ${example}.f)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${FCVODE_examples_SUPERLUMT})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_serial)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "CVODE")
+  SET(SOLVER_LIB "sundials_cvode")
+  SET(SOLVER_FLIB "sundials_fcvode")
+  LIST2STRING(FCVODE_examples EXAMPLES)
+  IF(LAPACK_FOUND)
+    LIST2STRING(FCVODE_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+  
+  IF(KLU_FOUND)
+    LIST2STRING(FCVODE_examples_KLU EXAMPLES)
+  ENDIF(KLU_FOUND)
+  
+  IF(SUPERLUMT_FOUND)
+    LIST2STRING(FCVODE_examples_SUPERLUMT EXAMPLES)
+  ENDIF(SUPERLUMT_FOUND)
+  
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/fcmix_serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/cvode/fcmix_serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/fcmix_serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/cvode/fcmix_serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/fcmix_serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/cvode/fcmix_serial/README b/examples/cvode/fcmix_serial/README
new file mode 100644
index 0000000..26be76c
--- /dev/null
+++ b/examples/cvode/fcmix_serial/README
@@ -0,0 +1,53 @@
+List of serial CVODE FCMIX examples
+
+  fcvAdvDiff_bnd     : advection-diffusion example (BDF/BAND)
+  fcvDiurnal_kry_bp  : kinetics-transport example (BDF/SPGMR/FCVBP)
+  fcvDiurnal_kry     : kinetics-transport example (BDF/SPGMR/User Prec)
+  fcvRoberts_dns     : chemical kinetics example (BDF/DENSE)
+  fcvRoberts_dnsL    : chemical kinetics example (BDF/DENSE lapack)
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/cvode/fcmix_serial/fcvAdvDiff_bnd.f b/examples/cvode/fcmix_serial/fcvAdvDiff_bnd.f
new file mode 100644
index 0000000..dd4ac45
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvAdvDiff_bnd.f
@@ -0,0 +1,287 @@
+C     ----------------------------------------------------------------
+C     $Revision: 4294 $
+C     $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+C     ----------------------------------------------------------------
+C     FCVODE Example Problem: Advection-diffusion, banded user
+C     Jacobian.
+C
+C     The following is a simple example problem with a banded
+C     Jacobian. The problem is the semi-discrete form of the
+C     advection-diffusion equation in 2D:
+C     du/dt = d^2 u / dx^2 + .5 du/dx + d^2 u / dy^2
+C     on the rectangle 0 <= x <= 2, 0 <= y <= 1, and the time
+C     interval 0 <= t <= 1. Homogeneous Dirichlet boundary conditions
+C     are posed, and the initial condition is the following:
+C     u(x,y,t=0) = x(2-x)y(1-y)exp(5xy) .
+C     The PDE is discretized on a uniform MX+2 by MY+2 grid with
+C     central differencing, and with boundary values eliminated,
+C     leaving an ODE system of size NEQ = MX*MY.
+C     This program solves this problem with CVODE, using the Fortran/C 
+C     interface routine package. This solution uses the BDF method,
+C     a user-supplied banded Jacobian routine, and scalar relative and
+C     absolute tolerances. It prints results at t = .1, .2, ..., 1.0.
+C     At the end of the run, various counters of interest are printed.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+      INTEGER MX, MY, MXMY
+      PARAMETER (MX=10, MY=5)
+      PARAMETER (MXMY=MX*MY)
+C     
+      DOUBLE PRECISION XMAX, YMAX
+      DATA XMAX/2.0D0/, YMAX/1.0D0/
+C
+      INTEGER LNST, LNFE, LNSETUP, LNNI, LNCF, LNETF, LNJE
+      INTEGER IER, METH, ITMETH, IATOL, ITASK, JOUT
+C The following declaration specification should match C type long int.
+      INTEGER*8 NEQ, IOUT(25), IPAR(2), MU, ML
+      DOUBLE PRECISION RTOL, ATOL, T0, T, TOUT, DTOUT, UNORM 
+      DOUBLE PRECISION U(MXMY), ROUT(10), RPAR(5)
+C
+      DATA LNST/3/, LNFE/4/, LNETF/5/,  LNCF/6/, LNNI/7/, LNSETUP/8/, 
+     1     LNJE/17/
+C
+      CALL INITBX(XMAX, YMAX, MX, MY, U, IPAR, RPAR)
+C
+      NEQ = MX*MY
+      T0 = 0.0D0
+      METH = 2
+      ITMETH = 2
+      IATOL = 1
+      RTOL = 0.0D0
+      ATOL = 1.0D-5
+      MU = MY
+      ML = MY
+      DTOUT = 0.1D0
+      ITASK = 1
+C
+      WRITE(6,10) NEQ
+ 10   FORMAT('Band example problem:'//
+     1       ' Advection-diffusion, NEQ = ', I2//)
+C
+      CALL FNVINITS(1, NEQ, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,20) IER
+ 20     FORMAT(///' SUNDIALS_ERROR: FNVINITS returned IER = ', I5)
+        STOP
+      ENDIF
+C
+      CALL FCVMALLOC(T0, U, METH, ITMETH, IATOL, RTOL, ATOL,
+     1               IOUT, ROUT, IPAR, RPAR, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,30) IER
+ 30     FORMAT(///' SUNDIALS_ERROR: FCVMALLOC returned IER = ', I5)
+        STOP
+        ENDIF
+C
+      CALL FCVBAND(NEQ, MU, ML, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,40) IER
+ 40     FORMAT(///' SUNDIALS_ERROR: FCVBAND returned IER = ', I5)
+        CALL FCVFREE
+        STOP
+      ENDIF
+C
+      CALL FCVBANDSETJAC(1, IER)
+C
+      CALL MAXNORM(NEQ, U, UNORM)
+      WRITE(6,45) T0, UNORM
+ 45   FORMAT(' At t = ', F6.2, '  max.norm(u) = ', E14.6)
+C
+      TOUT = DTOUT
+      DO 70 JOUT = 1, 10
+C
+        CALL FCVODE(TOUT, T, U, ITASK, IER)
+C
+        CALL MAXNORM(NEQ, U, UNORM)
+        WRITE(6,50) T, UNORM, IOUT(LNST)
+ 50     FORMAT(' At t = ', F6.2, '  max.norm(u) = ', E14.6,
+     1         '  NST = ', I4)
+C
+        IF (IER .NE. 0) THEN
+          WRITE(6,60) IER, IOUT(15)
+ 60       FORMAT(///' SUNDIALS_ERROR: FCVODE returned IER = ', I5, /,
+     1           '                 Linear Solver returned IER = ', I5)
+          CALL FCVFREE
+          STOP
+          ENDIF
+C
+          TOUT = TOUT + DTOUT
+ 70    CONTINUE
+C
+      WRITE(6,80) IOUT(LNST), IOUT(LNFE), IOUT(LNJE), IOUT(LNSETUP),
+     1            IOUT(LNNI), IOUT(LNCF), IOUT(LNETF)
+ 80   FORMAT(//'Final statistics:'//
+     1       ' No. steps = ', I4, '  No. f-s = ', I4,
+     2       '  No. J-s = ', I4, '   No. LU-s = ', I4/
+     3       ' No. nonlinear iterations = ', I4/
+     4       ' No. nonlinear convergence failures = ', I4/
+     5       ' No. error test failures = ', I4)
+C
+      CALL FCVFREE
+C
+      STOP
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE INITBX(XMAX, YMAX, MX, MY, U0, IPAR, RPAR)
+C Load IPAR and RPAR with problem constants and U0 with initial values
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER MX, MY
+      DOUBLE PRECISION XMAX, YMAX, U0(MY,MX), RPAR(*)
+C
+      INTEGER I, J
+      DOUBLE PRECISION DX, DY, X, Y, HDCOEF, HACOEF, VDCOEF
+C
+C Problem constants
+      DX = XMAX / (MX + 1)
+      DY = YMAX / (MY + 1)
+      HDCOEF = 1.0D0 / (DX * DX)
+      HACOEF = 0.5D0 / (2.0D0 * DX)
+      VDCOEF = 1.0D0 / (DY * DY)
+C Load constants in IPAR and RPAR
+      IPAR(1) = MX
+      IPAR(2) = MY
+      RPAR(1) = DX
+      RPAR(2) = DY
+      RPAR(3) = HDCOEF
+      RPAR(4) = HACOEF
+      RPAR(5) = VDCOEF
+C
+C Loop over grid and load initial values.
+      DO 20 I = 1, MX
+        X = I * DX
+        DO 10 J = 1, MY
+          Y = J * DY
+          U0(J,I) = X * (XMAX - X) * Y * (YMAX - Y) *
+     *              EXP(5.0D0 * X * Y)
+ 10       CONTINUE
+ 20     CONTINUE
+C
+      RETURN
+      END
+
+      SUBROUTINE MAXNORM(N, U, UNORM)
+C Compute max-norm of array U
+      IMPLICIT NONE
+C
+      INTEGER*8 I, N
+      DOUBLE PRECISION U(*), UNORM, TEMP
+C
+      TEMP = 0.0D0
+      DO 10 I = 1, N
+         TEMP = MAX(ABS(U(I)), TEMP)
+ 10   CONTINUE
+      UNORM = TEMP
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVFUN(T, U, UDOT, IPAR, RPAR, IER)
+C Right-hand side routine
+      IMPLICIT NONE
+C
+      DOUBLE PRECISION T, U(*), UDOT(*), RPAR(*)
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER
+C
+      INTEGER I, MX, IOFF, MY, J, IJ
+      DOUBLE PRECISION UIJ, UDN, UUP, ULT, URT, HDIFF, HADV, VDIFF
+      DOUBLE PRECISION DX, DY, HDCOEF, HACOEF, VDCOEF
+C
+C Extract constants from IPAR and RPAR
+      MX     = IPAR(1)
+      MY     = IPAR(2)
+      DX     = RPAR(1)
+      DY     = RPAR(2)
+      HDCOEF = RPAR(3)
+      HACOEF = RPAR(4)
+      VDCOEF = RPAR(5)
+C
+C Loop over all grid points.
+      DO 20 I = 1, MX
+        IOFF = (I - 1) * MY
+        DO 10 J = 1, MY
+C
+C Extract u at x_i, y_j and four neighboring points.
+          IJ = J + IOFF
+          UIJ = U(IJ)
+          UDN = 0.0D0
+          IF (J .NE. 1)  UDN = U(IJ - 1)
+          UUP = 0.0D0
+          IF (J .NE. MY) UUP = U(IJ + 1)
+          ULT = 0.0D0
+          IF (I .NE. 1)  ULT = U(IJ - MY)
+          URT = 0.0D0
+          IF (I .NE. MX) URT = U(IJ + MY)
+C
+C Set diffusion and advection terms and load into UDOT.
+          HDIFF = HDCOEF * (ULT - 2.0D0 * UIJ + URT)
+          HADV = HACOEF * (URT - ULT)
+          VDIFF = VDCOEF * (UUP - 2.0D0 * UIJ + UDN)
+          UDOT(IJ) = HDIFF + HADV + VDIFF
+ 10       CONTINUE
+ 20     CONTINUE
+C
+        IER = 0
+C
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVBJAC(N, MU, ML, MDIM, T, U, FU,
+     1                   BJAC, H, IPAR, RPAR, V1, V2, V3, IER)
+C Load banded Jacobian
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 N, MU, ML, MDIM, IPAR(*)
+      INTEGER IER
+      DOUBLE PRECISION T, U(*), FU(*), BJAC(MDIM,*), H, RPAR(*)
+      DOUBLE PRECISION V1(*), V2(*), V3(*)
+C
+      INTEGER MBAND, MX, MY
+      INTEGER I, J, K, IOFF, MU1, MU2
+      DOUBLE PRECISION DX, DY, HDCOEF, HACOEF, VDCOEF
+C
+C Extract constants from IPAR and RPAR
+      MX     = IPAR(1)
+      MY     = IPAR(2)
+      DX     = RPAR(1)
+      DY     = RPAR(2)
+      HDCOEF = RPAR(3)
+      HACOEF = RPAR(4)
+      VDCOEF = RPAR(5)
+C
+      MU1 = MU + 1
+      MU2 = MU + 2
+      MBAND = MU + 1 + ML
+C
+C Loop over all grid points.
+      DO 20 I = 1, MX
+        IOFF = (I - 1) * MY
+        DO 10 J = 1, MY
+          K = J + IOFF
+C
+C Set Jacobian elements in column k of Jb.
+          BJAC(MU1,K) = -2.0D0 * (VDCOEF + HDCOEF)
+          IF (I .NE. 1)  BJAC(1,K) = HDCOEF + HACOEF
+          IF (I .NE. MX) BJAC(MBAND,K) = HDCOEF - HACOEF
+          IF (J .NE. 1)  BJAC(MU,K) = VDCOEF
+          IF (J .NE. MY) BJAC(MU2,K) = VDCOEF
+C
+ 10       CONTINUE
+ 20     CONTINUE
+C
+        IER = 0
+C     
+      RETURN
+      END
diff --git a/examples/cvode/fcmix_serial/fcvAdvDiff_bnd.out b/examples/cvode/fcmix_serial/fcvAdvDiff_bnd.out
new file mode 100644
index 0000000..7f03c51
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvAdvDiff_bnd.out
@@ -0,0 +1,24 @@
+Band example problem:
+
+ Advection-diffusion, NEQ = 50
+
+
+ At t =   0.00  max.norm(u) =   0.895472E+02
+ At t =   0.10  max.norm(u) =   0.413289E+01  NST =   85
+ At t =   0.20  max.norm(u) =   0.103929E+01  NST =  103
+ At t =   0.30  max.norm(u) =   0.297983E+00  NST =  113
+ At t =   0.40  max.norm(u) =   0.876577E-01  NST =  120
+ At t =   0.50  max.norm(u) =   0.262564E-01  NST =  126
+ At t =   0.60  max.norm(u) =   0.783042E-02  NST =  130
+ At t =   0.70  max.norm(u) =   0.232939E-02  NST =  134
+ At t =   0.80  max.norm(u) =   0.695343E-03  NST =  137
+ At t =   0.90  max.norm(u) =   0.211598E-03  NST =  140
+ At t =   1.00  max.norm(u) =   0.655685E-04  NST =  142
+
+
+Final statistics:
+
+ No. steps =  142  No. f-s =  174  No. J-s =    3   No. LU-s =   23
+ No. nonlinear iterations =  170
+ No. nonlinear convergence failures =    0
+ No. error test failures =    3
diff --git a/examples/cvode/fcmix_serial/fcvDiurnal_kry.f b/examples/cvode/fcmix_serial/fcvDiurnal_kry.f
new file mode 100644
index 0000000..e823741
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvDiurnal_kry.f
@@ -0,0 +1,1006 @@
+C     ----------------------------------------------------------------
+C     $Revision: 4838 $
+C     $Date: 2016-08-03 10:10:51 -0700 (Wed, 03 Aug 2016) $
+C     ----------------------------------------------------------------
+C     FCVODE Example Problem: 2D kinetics-transport, precond. Krylov
+C     solver. 
+C     
+C     An ODE system is generated from the following 2-species diurnal
+C     kinetics advection-diffusion PDE system in 2 space dimensions:
+C     
+C     dc(i)/dt = Kh*(d/dx)**2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+C                           + Ri(c1,c2,t)      for i = 1,2,   where
+C     R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+C     R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+C     Kv(y) = Kv0*exp(y/5) ,
+C     Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+C     vary diurnally.
+C
+C     The problem is posed on the square
+C     0 .le. x .le. 20,    30 .le. y .le. 50   (all in km),
+C     with homogeneous Neumann boundary conditions, and for time t
+C     in 0 .le. t .le. 86400 sec (1 day).
+C     The PDE system is treated by central differences on a uniform
+C     10 x 10 mesh, with simple polynomial initial profiles.
+C     The problem is solved with CVODE, with the BDF/GMRES method and
+C     the block-diagonal part of the Jacobian as a left
+C     preconditioner.
+C     
+C     Note: this program includes modified (64-bit integer) versions 
+C     of the dense linear solver routines DGEFA and DGESL from LINPACK, 
+C     and BLAS routines DCOPY and DSCAL.
+C     
+C     The second and third dimensions of U here must match the values
+C     of MX and MY, for consistency with the output statements
+C     below.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+      INTEGER MX, MY
+      PARAMETER (MX=10, MY=10)
+      INTEGER LENIPAR, LENRPAR
+      PARAMETER (LENIPAR=6+2*MX*MY, LENRPAR=12+8*MX*MY)
+C
+      INTEGER METH,ITMETH,IATOL,ITASK,IER,LNCFL,LNPS
+      INTEGER LNST,LNFE,LNSETUP,LNNI,LNCF,LQ,LH,LNPE,LNLI,LNETF
+      INTEGER JOUT,JPRETYPE,IGSTYPE,MAXL
+C The following declaration specification should match C type long int.
+      INTEGER*8 NEQ, IOUT(25), IPAR(LENIPAR)
+      INTEGER NST,NFE,NPSET,NPE,NPS,NNI,NETF
+      INTEGER NLI,NCFN,NCFL
+      DOUBLE PRECISION ATOL,AVDIM,T,TOUT,TWOHR,RTOL,FLOOR,DELT
+      DOUBLE PRECISION U(2,MX,MY),ROUT(10),RPAR(LENRPAR)
+C
+      DATA TWOHR/7200.0D0/, RTOL/1.0D-5/, FLOOR/100.0D0/,
+     &     JPRETYPE/1/, IGSTYPE/1/, MAXL/0/, DELT/0.0D0/
+      DATA LNST/3/, LNFE/4/, LNETF/5/,  LNCF/6/, LNNI/7/, LNSETUP/8/, 
+     &     LQ/9/, LNPE/18/, LNLI/20/, LNPS/19/, LNCFL/21/
+      DATA LH/2/
+C
+C     Load problem constants into IPAR, RPAR, and set initial values
+      CALL INITKX(MX, MY, U, IPAR, RPAR)
+C
+C     Set other input arguments.
+      NEQ = 2*MX*MY
+      T = 0.0D0
+      METH = 2
+      ITMETH = 2
+      IATOL = 1
+      ATOL = RTOL * FLOOR
+      ITASK = 1
+C
+      WRITE(6,10) NEQ
+ 10   FORMAT('Krylov example problem:'//
+     &       ' Kinetics-transport, NEQ = ', I4/)
+C
+      CALL FNVINITS(1, NEQ, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,20) IER
+ 20     FORMAT(///' SUNDIALS_ERROR: FNVINITS returned IER = ', I5)
+        STOP
+      ENDIF
+C
+C     Initialize CVODE
+      CALL FCVMALLOC(T, U, METH, ITMETH, IATOL, RTOL, ATOL,
+     &     IOUT, ROUT, IPAR, RPAR, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,30) IER
+ 30     FORMAT(///' SUNDIALS_ERROR: FCVMALLOC returned IER = ', I5)
+        STOP
+        ENDIF
+C
+      CALL FCVSPGMR(JPRETYPE, IGSTYPE, MAXL, DELT, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,40) IER
+ 40     FORMAT(///' SUNDIALS_ERROR: FCVSPGMR returned IER = ', I5)
+        CALL FCVFREE
+        STOP
+      ENDIF
+C
+      CALL FCVSPILSSETPREC(1, IER)
+C
+C Loop over output points, call FCVODE, print sample solution values.
+      TOUT = TWOHR
+      DO JOUT = 1, 12
+C
+         CALL FCVODE(TOUT, T, U, ITASK, IER)
+C
+         WRITE(6,50) T, IOUT(LNST), IOUT(LQ), ROUT(LH)
+ 50      FORMAT(/' t = ', E11.3, 3X, 'nst = ', I5,
+     &           '  q = ', I2, '  h = ', E14.6)
+         WRITE(6,55) U(1,1,1), U(1,5,5), U(1,10,10),
+     &               U(2,1,1), U(2,5,5), U(2,10,10)
+ 55      FORMAT('  c1 (bot.left/middle/top rt.) = ', 3E14.6/
+     &          '  c2 (bot.left/middle/top rt.) = ', 3E14.6)
+C
+         IF (IER .NE. 0) THEN
+            WRITE(6,60) IER, IOUT(15)
+ 60         FORMAT(///' SUNDIALS_ERROR: FCVODE returned IER = ', I5, /,
+     &           '                 Linear Solver returned IER = ', I5)
+            CALL FCVFREE
+            STOP
+         ENDIF
+C     
+         TOUT = TOUT + TWOHR
+C
+      ENDDO
+
+C     Print final statistics.
+      NST = IOUT(LNST)
+      NFE = IOUT(LNFE)
+      NPSET = IOUT(LNSETUP)
+      NPE = IOUT(LNPE)
+      NPS = IOUT(LNPS)
+      NNI = IOUT(LNNI)
+      NLI = IOUT(LNLI)
+      AVDIM = DBLE(NLI) / DBLE(NNI)
+      NCFN = IOUT(LNCF)
+      NCFL = IOUT(LNCFL)
+      NETF = IOUT(LNETF)
+      WRITE(6,80) NST, NFE, NPSET, NPE, NPS, NNI, NLI, AVDIM, NCFN,
+     &     NCFL, NETF
+  80  FORMAT(//'Final statistics:'//
+     &     ' number of steps        = ', I5, 5X,
+     &     ' number of f evals.     =', I5/
+     &     ' number of prec. setups = ', I5/
+     &     ' number of prec. evals. = ', I5, 5X,
+     &     ' number of prec. solves = ', I5/
+     &     ' number of nonl. iters. = ', I5, 5X,
+     &     ' number of lin. iters.  = ', I5/
+     &     ' average Krylov subspace dimension (NLI/NNI)  = ', E14.6/
+     &     ' number of conv. failures.. nonlinear = ', I3,
+     &     ' linear = ', I3/
+     &     ' number of error test failures = ', I3)
+C     
+      CALL FCVFREE
+C
+      STOP
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE INITKX(MX, MY, U0, IPAR, RPAR)
+C     Routine to set problem constants and initial values
+C
+      IMPLICIT NONE
+C
+      INTEGER MX, MY
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      DOUBLE PRECISION RPAR(*)
+C
+      INTEGER MM, JY, JX, P_IPP, P_BD, P_P
+      DOUBLE PRECISION U0
+      DIMENSION U0(2,MX,MY)
+      DOUBLE PRECISION Q1, Q2, Q3, Q4, A3, A4, OM, C3, DY, HDCO
+      DOUBLE PRECISION VDCO, HACO, X, Y
+      DOUBLE PRECISION CX, CY, DKH, DKV0, DX, HALFDA, PI, VEL
+C
+      DATA DKH/4.0D-6/, VEL/0.001D0/, DKV0/1.0D-8/, HALFDA/4.32D4/,
+     1     PI/3.1415926535898D0/
+C
+C     Problem constants
+      MM = MX * MY
+      Q1 = 1.63D-16
+      Q2 = 4.66D-16
+      Q3 = 0.0D0
+      Q4 = 0.0D0
+      A3 = 22.62D0
+      A4 = 7.601D0
+      OM = PI / HALFDA
+      C3 = 3.7D16
+      DX = 20.0D0 / (MX - 1.0D0)
+      DY = 20.0D0 / (MY - 1.0D0)
+      HDCO = DKH / DX**2
+      HACO = VEL / (2.0D0 * DX)
+      VDCO = (1.0D0 / DY**2) * DKV0
+C
+C     Load constants in IPAR and RPAR
+      IPAR(1) = MX
+      IPAR(2) = MY
+      IPAR(3) = MM
+C
+      RPAR(1)  = Q1
+      RPAR(2)  = Q2
+      RPAR(3)  = Q3
+      RPAR(4)  = Q4
+      RPAR(5)  = A3
+      RPAR(6)  = A4
+      RPAR(7)  = OM
+      RPAR(8)  = C3
+      RPAR(9)  = DY
+      RPAR(10) = HDCO
+      RPAR(11) = VDCO
+      RPAR(12) = HACO
+C
+C     Pointers into IPAR and RPAR
+      P_IPP = 7
+      P_BD  = 13
+      P_P   = P_BD + 4*MM
+C     
+      IPAR(4) = P_IPP
+      IPAR(5) = P_BD
+      IPAR(6) = P_P
+C
+C     Set initial profiles.
+      DO JY = 1, MY
+         Y = 30.0D0 + (JY - 1.0D0) * DY
+         CY = (0.1D0 * (Y - 40.0D0))**2
+         CY = 1.0D0 - CY + 0.5D0 * CY**2
+         DO JX = 1, MX
+            X = (JX - 1.0D0) * DX
+            CX = (0.1D0 * (X - 10.0D0))**2
+            CX = 1.0D0 - CX + 0.5D0 * CX**2
+            U0(1,JX,JY) = 1.0D6 * CX * CY
+            U0(2,JX,JY) = 1.0D12 * CX * CY
+         ENDDO
+      ENDDO
+C     
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVFUN(T, U, UDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function f
+C
+      IMPLICIT NONE
+C
+      DOUBLE PRECISION T, U(2,*), UDOT(2,*), RPAR(*)
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER
+C
+      INTEGER ILEFT, IRIGHT
+      INTEGER JX, JY, MX, MY, MM, IBLOK0, IBLOK, IDN, IUP
+      DOUBLE PRECISION Q1, Q2, Q3, Q4, A3, A4, OM, C3, DY, HDCO
+      DOUBLE PRECISION VDCO, HACO
+      DOUBLE PRECISION C1, C2, C1DN, C2DN, C1UP, C2UP, C1LT, C2LT
+      DOUBLE PRECISION C1RT, C2RT, CYDN, CYUP, HORD1, HORD2, HORAD1
+      DOUBLE PRECISION HORAD2, QQ1, QQ2, QQ3, QQ4, RKIN1, RKIN2, S
+      DOUBLE PRECISION VERTD1, VERTD2, YDN, YUP
+C
+C     Extract constants from IPAR and RPAR
+      MX = IPAR(1)
+      MY = IPAR(2)
+      MM = IPAR(3)
+C
+      Q1 = RPAR(1)
+      Q2 = RPAR(2)
+      Q3 = RPAR(3)
+      Q4 = RPAR(4)
+      A3 = RPAR(5)
+      A4 = RPAR(6)
+      OM = RPAR(7)
+      C3 = RPAR(8)
+      DY = RPAR(9)
+      HDCO = RPAR(10)
+      VDCO = RPAR(11)
+      HACO = RPAR(12)
+C
+C     Set diurnal rate coefficients.
+      S = SIN(OM * T)
+      IF (S .GT. 0.0D0) THEN
+         Q3 = EXP(-A3 / S)
+         Q4 = EXP(-A4 / S)
+      ELSE
+         Q3 = 0.0D0
+         Q4 = 0.0D0
+      ENDIF
+      RPAR(3) = Q3
+      RPAR(4) = Q4
+C
+C     Loop over all grid points.
+      DO JY = 1, MY
+         YDN = 30.0D0 + (JY - 1.5D0) * DY
+         YUP = YDN + DY
+         CYDN = VDCO * EXP(0.2D0 * YDN)
+         CYUP = VDCO * EXP(0.2D0 * YUP)
+         IBLOK0 = (JY - 1) * MX
+         IDN = -MX
+         IF (JY .EQ. 1) IDN = MX
+         IUP = MX
+         IF (JY .EQ. MY) IUP = -MX
+         DO JX = 1, MX
+            IBLOK = IBLOK0 + JX
+            C1 = U(1,IBLOK)
+            C2 = U(2,IBLOK)
+C     Set kinetic rate terms.
+            QQ1 = Q1 * C1 * C3
+            QQ2 = Q2 * C1 * C2
+            QQ3 = Q3 * C3
+            QQ4 = Q4 * C2
+            RKIN1 = -QQ1 - QQ2 + 2.0D0 * QQ3 + QQ4
+            RKIN2 = QQ1 - QQ2 - QQ4
+C     Set vertical diffusion terms.
+            C1DN = U(1,IBLOK + IDN)
+            C2DN = U(2,IBLOK + IDN)
+            C1UP = U(1,IBLOK + IUP)
+            C2UP = U(2,IBLOK + IUP)
+            VERTD1 = CYUP * (C1UP - C1) - CYDN * (C1 - C1DN)
+            VERTD2 = CYUP * (C2UP - C2) - CYDN * (C2 - C2DN)
+C     Set horizontal diffusion and advection terms.
+            ILEFT = -1
+            IF (JX .EQ. 1) ILEFT = 1
+            IRIGHT = 1
+            IF (JX .EQ. MX) IRIGHT = -1
+            C1LT = U(1,IBLOK + ILEFT)
+            C2LT = U(2,IBLOK + ILEFT)
+            C1RT = U(1,IBLOK + IRIGHT)
+            C2RT = U(2,IBLOK + IRIGHT)
+            HORD1 = HDCO * (C1RT - 2.0D0 * C1 + C1LT)
+            HORD2 = HDCO * (C2RT - 2.0D0 * C2 + C2LT)
+            HORAD1 = HACO * (C1RT - C1LT)
+            HORAD2 = HACO * (C2RT - C2LT)
+C     Load all terms into UDOT.
+            UDOT(1,IBLOK) = VERTD1 + HORD1 + HORAD1 + RKIN1
+            UDOT(2,IBLOK) = VERTD2 + HORD2 + HORAD2 + RKIN2
+         ENDDO
+      ENDDO
+C
+      IER = 0
+C
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVPSET(T, U, FU, JOK, JCUR, GAMMA, H,
+     &                   IPAR, RPAR, V1, V2, V3, IER)
+C     Routine to set and preprocess block-diagonal preconditioner.
+C     Note: The dimensions in /BDJ/ below assume at most 100 mesh points.
+C
+      IMPLICIT NONE
+C
+      INTEGER IER, JOK, JCUR
+      DOUBLE PRECISION T, U(2,*), FU(*), GAMMA, H
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      DOUBLE PRECISION RPAR(*), V1(*), V2(*), V3(*)
+C
+      INTEGER MX, MY, MM, P_IPP, P_BD, P_P
+      DOUBLE PRECISION Q1, Q2, Q3, Q4, C3, DY, HDCO, VDCO
+C
+      IER = 0
+C
+C     Extract constants from IPAR and RPAR
+      MX = IPAR(1)
+      MY = IPAR(2)
+      MM = IPAR(3)
+C
+      Q1 = RPAR(1)
+      Q2 = RPAR(2)
+      Q3 = RPAR(3)
+      Q4 = RPAR(4)
+      C3 = RPAR(8)
+      DY = RPAR(9)
+      HDCO = RPAR(10)
+      VDCO = RPAR(11)
+C
+C     Extract pointers into IPAR and RPAR
+      P_IPP = IPAR(4)
+      P_BD  = IPAR(5)
+      P_P   = IPAR(6)
+C
+C     If needed, recompute BD
+C
+      IF (JOK .EQ. 1) THEN
+C     JOK = 1. Reuse saved BD
+        JCUR = 0
+      ELSE    
+C     JOK = 0. Compute diagonal Jacobian blocks.
+C     (using q4 value computed on last FCVFUN call).
+         CALL PREC_JAC(MX, MY, MM, U, RPAR(P_BD),
+     &        Q1, Q2, Q3, Q4, C3, DY, HDCO, VDCO)
+         JCUR = 1
+      ENDIF
+C
+C     Copy BD to P
+      CALL DCOPY(4*MM, RPAR(P_BD), 1, RPAR(P_P), 1)
+C
+C     Scale P by -GAMMA
+      CALL DSCAL(4*MM, -GAMMA, RPAR(P_P), 1)
+C
+C     Perform LU decomposition
+      CALL PREC_LU(MM, RPAR(P_P), IPAR(P_IPP), IER)
+C
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+      
+      SUBROUTINE FCVPSOL(T, U, FU, R, Z, GAMMA, DELTA, LR,
+     &                   IPAR, RPAR, VTEMP, IER)
+C     Routine to solve preconditioner linear system.
+C
+      IMPLICIT NONE
+C
+      INTEGER IER, LR
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      DOUBLE PRECISION T, U(*), FU(*), R(*), Z(2,*)
+      DOUBLE PRECISION GAMMA, DELTA, RPAR(*)
+      DOUBLE PRECISION VTEMP(*)
+C
+      INTEGER MM, P_IPP, P_P
+C
+      IER = 0
+C
+C     Extract constants from IPAR and RPAR
+      MM  = IPAR(3)
+C
+C     Extract pointers into IPAR and RPAR
+      P_IPP = IPAR(4)
+      P_P   = IPAR(6)
+C
+C     Copy RHS into Z
+      CALL DCOPY(2*MM, R, 1, Z, 1)
+C
+C     Solve the block-diagonal system Px = r using LU factors stored in P
+C     and pivot data in IPP, and return the solution in Z.
+      CALL PREC_SOL(MM, RPAR(P_P), IPAR(P_IPP), Z)
+
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE PREC_JAC(MX, MY, MM, U, BD,
+     &     Q1, Q2, Q3, Q4, C3, DY, HDCO, VDCO)
+C     Routine to compute diagonal Jacobian blocks
+C
+      IMPLICIT NONE
+C
+      INTEGER MX, MY, MM
+      DOUBLE PRECISION U(2,*), BD(2,2,MM)
+      DOUBLE PRECISION Q1, Q2, Q3, Q4, C3, DY, HDCO, VDCO
+C
+      INTEGER JY, JX, IBLOK, IBLOK0
+      DOUBLE PRECISION C1, C2, CYDN, CYUP, DIAG, YDN, YUP
+C
+      DO JY = 1, MY
+         YDN = 30.0D0 + (JY - 1.5D0) * DY
+         YUP = YDN + DY
+         CYDN = VDCO * EXP(0.2D0 * YDN)
+         CYUP = VDCO * EXP(0.2D0 * YUP)
+         DIAG = -(CYDN + CYUP + 2.0D0 * HDCO)
+         IBLOK0 = (JY - 1) * MX
+         DO JX = 1, MX
+            IBLOK = IBLOK0 + JX
+            C1 = U(1,IBLOK)
+            C2 = U(2,IBLOK)
+            BD(1,1,IBLOK) = (-Q1 * C3 - Q2 * C2) + DIAG
+            BD(1,2,IBLOK) = -Q2 * C1 + Q4
+            BD(2,1,IBLOK) =  Q1 * C3 - Q2 * C2
+            BD(2,2,IBLOK) = (-Q2 * C1 - Q4) + DIAG
+         ENDDO
+      ENDDO
+
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE PREC_LU(MM, P, IPP, IER)
+C     Routine to perform LU decomposition on (P+I)
+C
+      IMPLICIT NONE
+C
+      INTEGER IER
+      INTEGER MM
+      INTEGER*8 IPP(2,MM)
+      DOUBLE PRECISION P(2,2,MM)
+C
+      INTEGER I
+C
+C     Add identity matrix and do LU decompositions on blocks, in place.
+      DO I = 1, MM
+         P(1,1,I) = P(1,1,I) + 1.0D0
+         P(2,2,I) = P(2,2,I) + 1.0D0
+         CALL DGEFA(P(1,1,I), 2, 2, IPP(1,I), IER)
+         IF (IER .NE. 0) RETURN
+      ENDDO
+C     
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE PREC_SOL(MM, P, IPP, Z)
+C     Routine for backsolve
+C
+      IMPLICIT NONE
+C
+      INTEGER MM
+      INTEGER*8 IPP(2,MM)
+      DOUBLE PRECISION P(2,2,MM), Z(2,MM)
+C      
+      INTEGER I
+C
+      DO I = 1, MM
+         CALL DGESL(P(1,1,I), 2, 2, IPP(1,I), Z(1,I), 0)
+      ENDDO
+
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      subroutine dgefa(a, lda, n, ipvt, info)
+c
+      implicit none
+c
+      integer info, idamax, j, k, kp1, l, nm1, n
+      integer*4 lda
+      integer*8 ipvt(1)
+      double precision a(lda,1), t
+c
+c     dgefa factors a double precision matrix by gaussian elimination.
+c
+c     dgefa is usually called by dgeco, but it can be called
+c     directly with a saving in time if  rcond  is not needed.
+c     (time for dgeco) = (1 + 9/n)*(time for dgefa) .
+c
+c     on entry
+c
+c        a       double precision(lda, n)
+c                the matrix to be factored.
+c
+c        lda     integer
+c                the leading dimension of the array  a .
+c
+c        n       integer
+c                the order of the matrix  a .
+c
+c     on return
+c
+c        a       an upper triangular matrix and the multipliers
+c                which were used to obtain it.
+c                the factorization can be written  a = l*u  where
+c                l  is a product of permutation and unit lower
+c                triangular matrices and  u  is upper triangular.
+c
+c        ipvt    integer(n)
+c                an integer vector of pivot indices.
+c
+c        info    integer
+c                = 0  normal value.
+c                = k  if  u(k,k) .eq. 0.0 .  this is not an error
+c                     condition for this subroutine, but it does
+c                     indicate that dgesl or dgedi will divide by zero
+c                     if called.  employ  rcond  in dgeco for a reliable
+c                     indication of singularity.
+c
+c     linpack. this version dated 08/14/78 .
+c     cleve moler, university of new mexico, argonne national lab.
+c
+c     subroutines and functions
+c
+c     blas daxpy,dscal,idamax
+c
+c     internal variables
+c
+c     gaussian elimination with partial pivoting
+c
+      info = 0
+      nm1 = n - 1
+      if (nm1 .lt. 1) go to 70
+      do 60 k = 1, nm1
+         kp1 = k + 1
+c
+c        find l = pivot index
+c
+         l = idamax(n - k + 1, a(k,k), 1) + k - 1
+         ipvt(k) = l
+c
+c        zero pivot implies this column already triangularized
+c
+         if (a(l,k) .eq. 0.0d0) go to 40
+c
+c           interchange if necessary
+c
+            if (l .eq. k) go to 10
+               t = a(l,k)
+               a(l,k) = a(k,k)
+               a(k,k) = t
+   10       continue
+c
+c           compute multipliers
+c
+            t = -1.0d0 / a(k,k)
+            call dscal(n - k, t, a(k + 1,k), 1)
+c
+c           row elimination with column indexing
+c
+            do 30 j = kp1, n
+               t = a(l,j)
+               if (l .eq. k) go to 20
+                  a(l,j) = a(k,j)
+                  a(k,j) = t
+   20          continue
+               call daxpy(n - k, t, a(k + 1,k), 1, a(k + 1,j), 1)
+   30       continue
+         go to 50
+   40    continue
+            info = k
+   50    continue
+   60 continue
+   70 continue
+      ipvt(n) = n
+      if (a(n,n) .eq. 0.0d0) info = n
+      return
+      end
+
+C     ----------------------------------------------------------------
+
+      subroutine dgesl(a, lda, n, ipvt, b, job)
+c
+      implicit none
+c
+      integer lda, n, job, k, kb, l, nm1
+      integer*8 ipvt(1)
+      double precision a(lda,1), b(1), ddot, t
+c
+c     dgesl solves the double precision system
+c     a * x = b  or  trans(a) * x = b
+c     using the factors computed by dgeco or dgefa.
+c
+c     on entry
+c
+c        a       double precision(lda, n)
+c                the output from dgeco or dgefa.
+c
+c        lda     integer
+c                the leading dimension of the array  a .
+c
+c        n       integer
+c                the order of the matrix  a .
+c
+c        ipvt    integer(n)
+c                the pivot vector from dgeco or dgefa.
+c
+c        b       double precision(n)
+c                the right hand side vector.
+c
+c        job     integer
+c                = 0         to solve  a*x = b ,
+c                = nonzero   to solve  trans(a)*x = b  where
+c                            trans(a)  is the transpose.
+c
+c     on return
+c
+c        b       the solution vector  x .
+c
+c     error condition
+c
+c        a division by zero will occur if the input factor contains a
+c        zero on the diagonal.  technically this indicates singularity
+c        but it is often caused by improper arguments or improper
+c        setting of lda .  it will not occur if the subroutines are
+c        called correctly and if dgeco has set rcond .gt. 0.0
+c        or dgefa has set info .eq. 0 .
+c
+c     to compute  inverse(a) * c  where  c  is a matrix
+c     with  p  columns
+c           call dgeco(a,lda,n,ipvt,rcond,z)
+c           if (rcond is too small) go to ...
+c           do 10 j = 1, p
+c              call dgesl(a,lda,n,ipvt,c(1,j),0)
+c        10 continue
+c
+c     linpack. this version dated 08/14/78 .
+c     cleve moler, university of new mexico, argonne national lab.
+c
+c     subroutines and functions
+c
+c     blas daxpy,ddot
+c
+c     internal variables
+c
+      nm1 = n - 1
+      if (job .ne. 0) go to 50
+c
+c        job = 0 , solve  a * x = b
+c        first solve  l*y = b
+c
+         if (nm1 .lt. 1) go to 30
+         do 20 k = 1, nm1
+            l = ipvt(k)
+            t = b(l)
+            if (l .eq. k) go to 10
+               b(l) = b(k)
+               b(k) = t
+   10       continue
+            call daxpy(n - k, t, a(k + 1,k), 1, b(k + 1), 1)
+   20    continue
+   30    continue
+c
+c        now solve  u*x = y
+c
+         do 40 kb = 1, n
+            k = n + 1 - kb
+            b(k) = b(k) / a(k,k)
+            t = -b(k)
+            call daxpy(k - 1, t, a(1,k), 1, b(1), 1)
+   40    continue
+      go to 100
+   50 continue
+c
+c        job = nonzero, solve  trans(a) * x = b
+c        first solve  trans(u)*y = b
+c
+         do 60 k = 1, n
+            t = ddot(k - 1, a(1,k), 1, b(1), 1)
+            b(k) = (b(k) - t) / a(k,k)
+   60    continue
+c
+c        now solve trans(l)*x = y
+c
+         if (nm1 .lt. 1) go to 90
+         do 80 kb = 1, nm1
+            k = n - kb
+            b(k) = b(k) + ddot(n - k, a(k + 1,k), 1, b(k + 1), 1)
+            l = ipvt(k)
+            if (l .eq. k) go to 70
+               t = b(l)
+               b(l) = b(k)
+               b(k) = t
+   70       continue
+   80    continue
+   90    continue
+  100 continue
+      return
+      end
+
+C     ----------------------------------------------------------------
+
+      subroutine daxpy(n, da, dx, incx, dy, incy)
+c
+c     constant times a vector plus a vector.
+c     uses unrolled loops for increments equal to one.
+c     jack dongarra, linpack, 3/11/78.
+c
+      implicit none
+c
+      integer i, incx, incy, ix, iy, m, mp1
+      integer*4 n
+      double precision dx(1), dy(1), da
+c
+      if (n .le. 0) return
+      if (da .eq. 0.0d0) return
+      if (incx .eq. 1 .and. incy .eq. 1) go to 20
+c
+c        code for unequal increments or equal increments
+c        not equal to 1
+c
+      ix = 1
+      iy = 1
+      if (incx .lt. 0) ix = (-n + 1) * incx + 1
+      if (incy .lt. 0) iy = (-n + 1) * incy + 1
+      do 10 i = 1, n
+        dy(iy) = dy(iy) + da * dx(ix)
+        ix = ix + incx
+        iy = iy + incy
+   10 continue
+      return
+c
+c        code for both increments equal to 1
+c
+c
+c        clean-up loop
+c
+   20 m = mod(n, 4)
+      if ( m .eq. 0 ) go to 40
+      do 30 i = 1, m
+        dy(i) = dy(i) + da * dx(i)
+   30 continue
+      if ( n .lt. 4 ) return
+   40 mp1 = m + 1
+      do 50 i = mp1, n, 4
+        dy(i) = dy(i) + da * dx(i)
+        dy(i + 1) = dy(i + 1) + da * dx(i + 1)
+        dy(i + 2) = dy(i + 2) + da * dx(i + 2)
+        dy(i + 3) = dy(i + 3) + da * dx(i + 3)
+   50 continue
+      return
+      end
+C     ----------------------------------------------------------------
+
+      subroutine dscal(n, da, dx, incx)
+c
+c     scales a vector by a constant.
+c     uses unrolled loops for increment equal to one.
+c     jack dongarra, linpack, 3/11/78.
+c
+      implicit none
+c
+      integer i, incx, m, mp1, nincx
+      integer*4 n
+      double precision da, dx(1)
+c
+      if (n.le.0) return
+      if (incx .eq. 1) go to 20
+c
+c        code for increment not equal to 1
+c
+      nincx = n * incx
+      do 10 i = 1, nincx, incx
+        dx(i) = da * dx(i)
+   10 continue
+      return
+c
+c        code for increment equal to 1
+c
+c
+c        clean-up loop
+c
+   20 m = mod(n, 5)
+      if ( m .eq. 0 ) go to 40
+      do 30 i = 1, m
+        dx(i) = da * dx(i)
+   30 continue
+      if ( n .lt. 5 ) return
+   40 mp1 = m + 1
+      do 50 i = mp1, n, 5
+        dx(i) = da * dx(i)
+        dx(i + 1) = da * dx(i + 1)
+        dx(i + 2) = da * dx(i + 2)
+        dx(i + 3) = da * dx(i + 3)
+        dx(i + 4) = da * dx(i + 4)
+   50 continue
+      return
+      end
+
+C     ----------------------------------------------------------------
+
+      double precision function ddot(n, dx, incx, dy, incy)
+c
+c     forms the dot product of two vectors.
+c     uses unrolled loops for increments equal to one.
+c     jack dongarra, linpack, 3/11/78.
+c
+      implicit none
+c
+      integer i, incx, incy, ix, iy, m, mp1
+      integer*4 n
+      double precision dx(1), dy(1), dtemp
+c
+      ddot = 0.0d0
+      dtemp = 0.0d0
+      if (n .le. 0) return
+      if (incx .eq. 1 .and. incy .eq. 1) go to 20
+c
+c        code for unequal increments or equal increments
+c          not equal to 1
+c
+      ix = 1
+      iy = 1
+      if (incx .lt. 0) ix = (-n + 1) * incx + 1
+      if (incy .lt. 0) iy = (-n + 1) * incy + 1
+      do 10 i = 1, n
+        dtemp = dtemp + dx(ix) * dy(iy)
+        ix = ix + incx
+        iy = iy + incy
+   10 continue
+      ddot = dtemp
+      return
+c
+c        code for both increments equal to 1
+c
+c
+c        clean-up loop
+c
+   20 m = mod(n, 5)
+      if ( m .eq. 0 ) go to 40
+      do 30 i = 1,m
+        dtemp = dtemp + dx(i) * dy(i)
+   30 continue
+      if ( n .lt. 5 ) go to 60
+   40 mp1 = m + 1
+      do 50 i = mp1, n, 5
+        dtemp = dtemp + dx(i) * dy(i) + dx(i + 1) * dy(i + 1) +
+     *          dx(i + 2) * dy(i + 2) + dx(i + 3) * dy(i + 3) +
+     *          dx(i + 4) * dy(i + 4)
+   50 continue
+   60 ddot = dtemp
+      return
+      end
+
+C     ----------------------------------------------------------------
+
+      integer function idamax(n, dx, incx)
+c
+c     finds the index of element having max. absolute value.
+c     jack dongarra, linpack, 3/11/78.
+c
+      implicit none
+c
+      integer i, incx, ix
+      integer*4 n
+      double precision dx(1), dmax
+c
+      idamax = 0
+      if (n .lt. 1) return
+      idamax = 1
+      if (n .eq. 1) return
+      if (incx .eq. 1) go to 20
+c
+c        code for increment not equal to 1
+c
+      ix = 1
+      dmax = abs(dx(1))
+      ix = ix + incx
+      do 10 i = 2, n
+         if (abs(dx(ix)) .le. dmax) go to 5
+         idamax = i
+         dmax = abs(dx(ix))
+    5    ix = ix + incx
+   10 continue
+      return
+c
+c        code for increment equal to 1
+c
+   20 dmax = abs(dx(1))
+      do 30 i = 2, n
+         if (abs(dx(i)) .le. dmax) go to 30
+         idamax = i
+         dmax = abs(dx(i))
+   30 continue
+      return
+      end
+
+C     ----------------------------------------------------------------
+
+      subroutine  dcopy(n, dx, incx, dy, incy)
+c
+c     copies a vector, x, to a vector, y.
+c     uses unrolled loops for increments equal to one.
+c     jack dongarra, linpack, 3/11/78.
+c
+      implicit none
+c
+      integer i, incx, incy, ix, iy, m, mp1
+      integer*4 n
+      double precision dx(1), dy(1)
+c
+      if (n .le. 0) return
+      if (incx .eq. 1 .and. incy .eq. 1) go to 20
+c
+c        code for unequal increments or equal increments
+c          not equal to 1
+c
+      ix = 1
+      iy = 1
+      if (incx .lt. 0) ix = (-n + 1) * incx + 1
+      if (incy .lt. 0) iy = (-n + 1) * incy + 1
+      do 10 i = 1, n
+        dy(iy) = dx(ix)
+        ix = ix + incx
+        iy = iy + incy
+   10 continue
+      return
+c
+c        code for both increments equal to 1
+c
+c
+c        clean-up loop
+c
+   20 m = mod(n, 7)
+      if ( m .eq. 0 ) go to 40
+      do 30 i = 1, m
+        dy(i) = dx(i)
+   30 continue
+      if ( n .lt. 7 ) return
+   40 mp1 = m + 1
+      do 50 i = mp1, n, 7
+        dy(i) = dx(i)
+        dy(i + 1) = dx(i + 1)
+        dy(i + 2) = dx(i + 2)
+        dy(i + 3) = dx(i + 3)
+        dy(i + 4) = dx(i + 4)
+        dy(i + 5) = dx(i + 5)
+        dy(i + 6) = dx(i + 6)
+   50 continue
+      return
+      end
diff --git a/examples/cvode/fcmix_serial/fcvDiurnal_kry.out b/examples/cvode/fcmix_serial/fcvDiurnal_kry.out
new file mode 100644
index 0000000..499269a
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvDiurnal_kry.out
@@ -0,0 +1,63 @@
+Krylov example problem:
+
+ Kinetics-transport, NEQ =  200
+
+
+ t =   0.720E+04   nst =   219  q =  5  h =   0.158696E+03
+  c1 (bot.left/middle/top rt.) =   0.104683E+05  0.296373E+05  0.111853E+05
+  c2 (bot.left/middle/top rt.) =   0.252672E+12  0.715376E+12  0.269977E+12
+
+ t =   0.144E+05   nst =   251  q =  5  h =   0.377205E+03
+  c1 (bot.left/middle/top rt.) =   0.665902E+07  0.531602E+07  0.730081E+07
+  c2 (bot.left/middle/top rt.) =   0.258192E+12  0.205680E+12  0.283286E+12
+
+ t =   0.216E+05   nst =   277  q =  5  h =   0.274587E+03
+  c1 (bot.left/middle/top rt.) =   0.266498E+08  0.103636E+08  0.293077E+08
+  c2 (bot.left/middle/top rt.) =   0.299279E+12  0.102810E+12  0.331344E+12
+
+ t =   0.288E+05   nst =   312  q =  4  h =   0.367517E+03
+  c1 (bot.left/middle/top rt.) =   0.870209E+07  0.129197E+08  0.965002E+07
+  c2 (bot.left/middle/top rt.) =   0.338035E+12  0.502929E+12  0.375096E+12
+
+ t =   0.360E+05   nst =   350  q =  4  h =   0.683836E+02
+  c1 (bot.left/middle/top rt.) =   0.140404E+05  0.202903E+05  0.156090E+05
+  c2 (bot.left/middle/top rt.) =   0.338677E+12  0.489443E+12  0.376517E+12
+
+ t =   0.432E+05   nst =   407  q =  4  h =   0.383863E+03
+  c1 (bot.left/middle/top rt.) =   0.803367E-06  0.363858E-06  0.889797E-06
+  c2 (bot.left/middle/top rt.) =   0.338233E+12  0.135487E+12  0.380352E+12
+
+ t =   0.504E+05   nst =   436  q =  3  h =   0.215343E+03
+  c1 (bot.left/middle/top rt.) =   0.375001E-05  0.665499E-06  0.454113E-05
+  c2 (bot.left/middle/top rt.) =   0.335816E+12  0.493028E+12  0.386445E+12
+
+ t =   0.576E+05   nst =   454  q =  5  h =   0.428080E+03
+  c1 (bot.left/middle/top rt.) =   0.112301E-08  0.194567E-09  0.136087E-08
+  c2 (bot.left/middle/top rt.) =   0.332031E+12  0.964985E+12  0.390900E+12
+
+ t =   0.648E+05   nst =   466  q =  5  h =   0.690422E+03
+  c1 (bot.left/middle/top rt.) =   0.353041E-08  0.590752E-09  0.428410E-08
+  c2 (bot.left/middle/top rt.) =   0.331303E+12  0.892184E+12  0.396342E+12
+
+ t =   0.720E+05   nst =   476  q =  5  h =   0.690422E+03
+  c1 (bot.left/middle/top rt.) =  -0.121418E-09 -0.206756E-10 -0.147240E-09
+  c2 (bot.left/middle/top rt.) =   0.332972E+12  0.618620E+12  0.403885E+12
+
+ t =   0.792E+05   nst =   487  q =  5  h =   0.690422E+03
+  c1 (bot.left/middle/top rt.) =  -0.341376E-11 -0.568210E-12 -0.414339E-11
+  c2 (bot.left/middle/top rt.) =   0.333441E+12  0.666893E+12  0.412026E+12
+
+ t =   0.864E+05   nst =   497  q =  5  h =   0.690422E+03
+  c1 (bot.left/middle/top rt.) =   0.309841E-12  0.526192E-13  0.375773E-12
+  c2 (bot.left/middle/top rt.) =   0.335178E+12  0.910652E+12  0.416251E+12
+
+
+Final statistics:
+
+ number of steps        =   497      number of f evals.     =  651
+ number of prec. setups =    91
+ number of prec. evals. =     9      number of prec. solves =  1233
+ number of nonl. iters. =   647      number of lin. iters.  =   652
+ average Krylov subspace dimension (NLI/NNI)  =   0.100773E+01
+ number of conv. failures.. nonlinear =   0 linear =   0
+ number of error test failures =  34
diff --git a/examples/cvode/fcmix_serial/fcvDiurnal_kry_bp.f b/examples/cvode/fcmix_serial/fcvDiurnal_kry_bp.f
new file mode 100644
index 0000000..dd5b57b
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvDiurnal_kry_bp.f
@@ -0,0 +1,352 @@
+C     ----------------------------------------------------------------
+C     $Revision: 4294 $
+C     $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+C     ----------------------------------------------------------------
+C     FCVODE Example Problem: 2D kinetics-transport, 
+C     precond. Krylov solver. 
+C     
+C     An ODE system is generated from the following 2-species diurnal
+C     kinetics advection-diffusion PDE system in 2 space dimensions:
+C     
+C     dc(i)/dt = Kh*(d/dx)**2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+C                           + Ri(c1,c2,t)      for i = 1,2,   where
+C     R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+C     R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+C     Kv(y) = Kv0*exp(y/5) ,
+C     Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+C     vary diurnally.
+C
+C     The problem is posed on the square
+C     0 .le. x .le. 20,    30 .le. y .le. 50   (all in km),
+C     with homogeneous Neumann boundary conditions, and for time t in
+C     0 .le. t .le. 86400 sec (1 day).
+C
+C     The PDE system is treated by central differences on a uniform
+C     10 x 10 mesh, with simple polynomial initial profiles.
+C     The problem is solved with CVODE, with the BDF/GMRES method and
+C     using the FCVBP banded preconditioner
+C     
+C     The second and third dimensions of U here must match the values of
+C     MX and MY, for consistency with the output statements below.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+      INTEGER MX, MY
+      PARAMETER (MX=10, MY=10)
+C
+      INTEGER LNST, LNFE, LNSETUP, LNNI, LNCF, LNPE, LNLI, LNPS
+      INTEGER LNCFL, LH, LQ, METH, ITMETH, IATOL, ITASK
+      INTEGER LNETF, IER, MAXL, JPRETYPE, IGSTYPE, JOUT
+      INTEGER LLENRW, LLENIW, LLENRWLS, LLENIWLS
+C The following declaration specification should match C type long int.
+      INTEGER*8 NEQ, IOUT(25), IPAR(4)
+      INTEGER NST, NFE, NPSET, NPE, NPS, NNI
+      INTEGER NLI, NCFN, NCFL, NETF
+      INTEGER LENRW, LENIW, LENRWLS, LENIWLS
+C The following declaration specification should match C type long int.
+      INTEGER*8 MU, ML, LENRWBP, LENIWBP, NFEBP
+      DOUBLE PRECISION ATOL, AVDIM, DELT, FLOOR, RTOL, T, TOUT, TWOHR
+      DOUBLE PRECISION ROUT(10), U(2,MX,MY), RPAR(12)
+C
+      DATA TWOHR/7200.0D0/, RTOL/1.0D-5/, FLOOR/100.0D0/,
+     1     JPRETYPE/1/, IGSTYPE/1/, MAXL/0/, DELT/0.0D0/
+      DATA LLENRW/1/, LLENIW/2/, LNST/3/, LNFE/4/, LNETF/5/,  LNCF/6/,
+     1     LNNI/7/, LNSETUP/8/, LQ/9/, LLENRWLS/13/, LLENIWLS/14/,
+     1     LNPE/18/, LNLI/20/, LNPS/19/, LNCFL/21/
+      DATA LH/2/
+C
+C Load IPAR, RPAR, and initial values
+      CALL INITKX(MX, MY, U, IPAR, RPAR)
+C
+C     Set other input arguments.
+      NEQ = 2*MX*MY
+      T = 0.0D0
+      METH = 2
+      ITMETH = 2
+      IATOL = 1
+      ATOL = RTOL * FLOOR
+      ITASK = 1
+C
+      WRITE(6,10) NEQ
+ 10   FORMAT('Krylov example problem:'//
+     1       ' Kinetics-transport, NEQ = ', I4/)
+C     
+C     Initialize vector specification
+      CALL FNVINITS(1, NEQ, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,20) IER
+ 20      FORMAT(///' SUNDIALS_ERROR: FNVINITS returned IER = ', I5)
+         STOP
+      ENDIF
+C     
+C     Initialize CVODE
+      CALL FCVMALLOC(T, U, METH, ITMETH, IATOL, RTOL, ATOL,
+     1               IOUT, ROUT, IPAR, RPAR, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,30) IER
+ 30      FORMAT(///' SUNDIALS_ERROR: FCVMALLOC returned IER = ', I5)
+         STOP
+      ENDIF
+C     
+C     Initialize SPGMR solver
+      CALL FCVSPGMR(JPRETYPE, IGSTYPE, MAXL, DELT, IER) 
+      IF (IER .NE. 0) THEN
+         WRITE(6,45) IER
+ 45      FORMAT(///' SUNDIALS_ERROR: FCVSPGMR returned IER = ', I5)
+         CALL FCVFREE
+         STOP
+      ENDIF
+C     
+C     Initialize band preconditioner
+      MU = 2
+      ML = 2
+      CALL FCVBPINIT(NEQ, MU, ML, IER) 
+      IF (IER .NE. 0) THEN
+         WRITE(6,40) IER
+ 40      FORMAT(///' SUNDIALS_ERROR: FCVBPINIT returned IER = ', I5)
+         CALL FCVFREE
+         STOP
+      ENDIF
+C     
+C     Loop over output points, call FCVODE, print sample solution values.
+      TOUT = TWOHR
+      DO 70 JOUT = 1, 12
+C
+         CALL FCVODE(TOUT, T, U, ITASK, IER)
+C     
+         WRITE(6,50) T, IOUT(LNST), IOUT(LQ), ROUT(LH)
+ 50      FORMAT(/' t = ', E14.6, 5X, 'no. steps = ', I5,
+     1        '   order = ', I3, '   stepsize = ', E14.6)
+         WRITE(6,55) U(1,1,1), U(1,5,5), U(1,10,10),
+     1               U(2,1,1), U(2,5,5), U(2,10,10)
+ 55      FORMAT('  c1 (bot.left/middle/top rt.) = ', 3E14.6/
+     1        '  c2 (bot.left/middle/top rt.) = ', 3E14.6)
+C     
+         IF (IER .NE. 0) THEN
+            WRITE(6,60) IER, IOUT(15)
+ 60         FORMAT(///' SUNDIALS_ERROR: FCVODE returned IER = ', I5, /,
+     1             '                 Linear Solver returned IER = ', I5)
+            CALL FCVFREE
+            STOP
+         ENDIF
+C     
+         TOUT = TOUT + TWOHR
+ 70   CONTINUE
+      
+C     Print final statistics.
+      NST = IOUT(LNST)
+      NFE = IOUT(LNFE)
+      NPSET = IOUT(LNSETUP)
+      NPE = IOUT(LNPE)
+      NPS = IOUT(LNPS)
+      NNI = IOUT(LNNI)
+      NLI = IOUT(LNLI)
+      AVDIM = DBLE(NLI) / DBLE(NNI)
+      NCFN = IOUT(LNCF)
+      NCFL = IOUT(LNCFL)
+      NETF = IOUT(LNETF)
+      LENRW = IOUT(LLENRW)
+      LENIW = IOUT(LLENIW)
+      LENRWLS = IOUT(LLENRWLS)
+      LENIWLS = IOUT(LLENIWLS)
+      WRITE(6,80) NST, NFE, NPSET, NPE, NPS, NNI, NLI, AVDIM, NCFN,
+     1     NCFL, NETF, LENRW, LENIW, LENRWLS, LENIWLS
+ 80   FORMAT(//'Final statistics:'//
+     &   ' number of steps        = ', I5, 4X,
+     &   ' number of f evals.     = ', I5/
+     &   ' number of prec. setups = ', I5/
+     &   ' number of prec. evals. = ', I5, 4X,
+     &   ' number of prec. solves = ', I5/
+     &   ' number of nonl. iters. = ', I5, 4X,
+     &   ' number of lin. iters.  = ', I5/
+     &   ' average Krylov subspace dimension (NLI/NNI) = ', E14.6/
+     &   ' number of conv. failures.. nonlinear =', I3,
+     &   ' linear = ', I3/
+     &   ' number of error test failures = ', I3/
+     &   ' main solver real/int workspace sizes   = ',2I7/
+     &   ' linear solver real/int workspace sizes = ',2I5)
+      CALL FCVBPOPT(LENRWBP, LENIWBP, NFEBP)
+      WRITE(6,82) LENRWBP, LENIWBP, NFEBP
+ 82   FORMAT('In CVBANDPRE:'/
+     &        ' real/int workspace sizes = ', 2I7/
+     &        ' number of f evaluations  = ', I5)
+C     
+      CALL FCVFREE
+C     
+      STOP
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE INITKX(MX, MY, U0, IPAR, RPAR)
+C Routine to set problem constants and initial values
+C
+      IMPLICIT NONE
+C
+      INTEGER MX, MY
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      DOUBLE PRECISION RPAR(*)
+C
+      INTEGER MM, JY, JX, NEQ
+      DOUBLE PRECISION U0
+      DIMENSION U0(2,MX,MY)
+      DOUBLE PRECISION Q1, Q2, Q3, Q4, A3, A4, OM, C3, DY, HDCO
+      DOUBLE PRECISION VDCO, HACO, X, Y
+      DOUBLE PRECISION CX, CY, DKH, DKV0, DX, HALFDA, PI, VEL
+C
+      DATA DKH/4.0D-6/, VEL/0.001D0/, DKV0/1.0D-8/, HALFDA/4.32D4/,
+     1     PI/3.1415926535898D0/
+C
+C Problem constants
+      MM = MX * MY
+      NEQ = 2 * MM
+      Q1 = 1.63D-16
+      Q2 = 4.66D-16
+      Q3 = 0.D0
+      Q4 = 0.D0
+      A3 = 22.62D0
+      A4 = 7.601D0
+      OM = PI / HALFDA
+      C3 = 3.7D16
+      DX = 20.0D0 / (MX - 1.0D0)
+      DY = 20.0D0 / (MY - 1.0D0)
+      HDCO = DKH / DX**2
+      HACO = VEL / (2.0D0 * DX)
+      VDCO = (1.0D0 / DY**2) * DKV0
+C Load constants in IPAR and RPAR
+      IPAR(1) = MX
+      IPAR(2) = MY
+      IPAR(3) = MM
+      IPAR(4) = NEQ
+C
+      RPAR(1)  = Q1
+      RPAR(2)  = Q2
+      RPAR(3)  = Q3
+      RPAR(4)  = Q4
+      RPAR(5)  = A3
+      RPAR(6)  = A4
+      RPAR(7)  = OM
+      RPAR(8)  = C3
+      RPAR(9)  = DY
+      RPAR(10) = HDCO
+      RPAR(11) = VDCO
+      RPAR(12) = HACO
+C
+C Set initial profiles.
+      DO 20 JY = 1, MY
+        Y = 30.0D0 + (JY - 1.0D0) * DY
+        CY = (0.1D0 * (Y - 40.0D0))**2
+        CY = 1.0D0 - CY + 0.5D0 * CY**2
+        DO 10 JX = 1, MX
+          X = (JX - 1.0D0) * DX
+          CX = (0.1D0 * (X - 10.0D0))**2
+          CX = 1.0D0 - CX + 0.5D0 * CX**2
+          U0(1,JX,JY) = 1.0D6 * CX * CY
+          U0(2,JX,JY) = 1.0D12 * CX * CY
+ 10       CONTINUE
+ 20     CONTINUE
+C
+      RETURN
+      END
+      
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVFUN(T, U, UDOT, IPAR, RPAR, IER)
+C     Routine for right-hand side function f
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER
+      DOUBLE PRECISION T, U(2,*), UDOT(2,*), RPAR(*)
+C
+      INTEGER ILEFT, IRIGHT
+      INTEGER MX, MY, MM, JY, JX, IBLOK0, IDN, IUP, IBLOK
+      DOUBLE PRECISION Q1,Q2,Q3,Q4, A3, A4, OM, C3, DY, HDCO, VDCO, HACO
+      DOUBLE PRECISION C1, C2, C1DN, C2DN, C1UP, C2UP, C1LT, C2LT
+      DOUBLE PRECISION C1RT, C2RT, CYDN, CYUP, HORD1, HORD2, HORAD1
+      DOUBLE PRECISION HORAD2, QQ1, QQ2, QQ3, QQ4, RKIN1, RKIN2, S
+      DOUBLE PRECISION VERTD1, VERTD2, YDN, YUP
+C
+C     Extract constants from IPAR and RPAR
+      MX = IPAR(1)
+      MY = IPAR(2)
+      MM = IPAR(3)
+C
+      Q1 = RPAR(1)
+      Q2 = RPAR(2)
+      Q3 = RPAR(3)
+      Q4 = RPAR(4)
+      A3 = RPAR(5)
+      A4 = RPAR(6)
+      OM = RPAR(7)
+      C3 = RPAR(8)
+      DY = RPAR(9)
+      HDCO = RPAR(10)
+      VDCO = RPAR(11)
+      HACO = RPAR(12)
+C     
+C     Set diurnal rate coefficients.
+      S = SIN(OM * T)
+      IF (S .GT. 0.0D0) THEN
+         Q3 = EXP(-A3 / S)
+         Q4 = EXP(-A4 / S)
+      ELSE
+         Q3 = 0.0D0
+         Q4 = 0.0D0
+      ENDIF
+C     
+C     Loop over all grid points.
+      DO 20 JY = 1, MY
+         YDN = 30.0D0 + (JY - 1.5D0) * DY
+         YUP = YDN + DY
+         CYDN = VDCO * EXP(0.2D0 * YDN)
+         CYUP = VDCO * EXP(0.2D0 * YUP)
+         IBLOK0 = (JY - 1) * MX
+         IDN = -MX
+         IF (JY .EQ. 1) IDN = MX
+         IUP = MX
+         IF (JY .EQ. MY) IUP = -MX
+         DO 10 JX = 1, MX
+            IBLOK = IBLOK0 + JX
+            C1 = U(1,IBLOK)
+            C2 = U(2,IBLOK)
+C     Set kinetic rate terms.
+            QQ1 = Q1 * C1 * C3
+            QQ2 = Q2 * C1 * C2
+            QQ3 = Q3 * C3
+            QQ4 = Q4 * C2
+            RKIN1 = -QQ1 - QQ2 + 2.0D0 * QQ3 + QQ4
+            RKIN2 = QQ1 - QQ2 - QQ4
+C     Set vertical diffusion terms.
+            C1DN = U(1,IBLOK + IDN)
+            C2DN = U(2,IBLOK + IDN)
+            C1UP = U(1,IBLOK + IUP)
+            C2UP = U(2,IBLOK + IUP)
+            VERTD1 = CYUP * (C1UP - C1) - CYDN * (C1 - C1DN)
+            VERTD2 = CYUP * (C2UP - C2) - CYDN * (C2 - C2DN)
+C     Set horizontal diffusion and advection terms.
+            ILEFT = -1
+            IF (JX .EQ. 1) ILEFT = 1
+            IRIGHT = 1
+            IF (JX .EQ. MX) IRIGHT = -1
+            C1LT = U(1,IBLOK + ILEFT)
+            C2LT = U(2,IBLOK + ILEFT)
+            C1RT = U(1,IBLOK + IRIGHT)
+            C2RT = U(2,IBLOK + IRIGHT)
+            HORD1 = HDCO * (C1RT - 2.0D0 * C1 + C1LT)
+            HORD2 = HDCO * (C2RT - 2.0D0 * C2 + C2LT)
+            HORAD1 = HACO * (C1RT - C1LT)
+            HORAD2 = HACO * (C2RT - C2LT)
+C     Load all terms into UDOT.
+            UDOT(1,IBLOK) = VERTD1 + HORD1 + HORAD1 + RKIN1
+            UDOT(2,IBLOK) = VERTD2 + HORD2 + HORAD2 + RKIN2
+ 10      CONTINUE
+ 20   CONTINUE
+C
+      IER = 0
+C
+      RETURN
+      END
diff --git a/examples/cvode/fcmix_serial/fcvDiurnal_kry_bp.out b/examples/cvode/fcmix_serial/fcvDiurnal_kry_bp.out
new file mode 100644
index 0000000..63aa199
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvDiurnal_kry_bp.out
@@ -0,0 +1,68 @@
+Krylov example problem:
+
+ Kinetics-transport, NEQ =  200
+
+
+ t =   0.720000E+04     no. steps =   190   order =   5   stepsize =   0.160965E+03
+  c1 (bot.left/middle/top rt.) =   0.104683E+05  0.296373E+05  0.111853E+05
+  c2 (bot.left/middle/top rt.) =   0.252672E+12  0.715377E+12  0.269977E+12
+
+ t =   0.144000E+05     no. steps =   221   order =   5   stepsize =   0.382687E+03
+  c1 (bot.left/middle/top rt.) =   0.665902E+07  0.531602E+07  0.730081E+07
+  c2 (bot.left/middle/top rt.) =   0.258192E+12  0.205680E+12  0.283286E+12
+
+ t =   0.216000E+05     no. steps =   246   order =   5   stepsize =   0.278111E+03
+  c1 (bot.left/middle/top rt.) =   0.266497E+08  0.103640E+08  0.293077E+08
+  c2 (bot.left/middle/top rt.) =   0.299279E+12  0.102815E+12  0.331344E+12
+
+ t =   0.288000E+05     no. steps =   298   order =   3   stepsize =   0.132506E+03
+  c1 (bot.left/middle/top rt.) =   0.870208E+07  0.129196E+08  0.965000E+07
+  c2 (bot.left/middle/top rt.) =   0.338035E+12  0.502926E+12  0.375095E+12
+
+ t =   0.360000E+05     no. steps =   341   order =   4   stepsize =   0.631280E+02
+  c1 (bot.left/middle/top rt.) =   0.140403E+05  0.202899E+05  0.156090E+05
+  c2 (bot.left/middle/top rt.) =   0.338677E+12  0.489433E+12  0.376516E+12
+
+ t =   0.432000E+05     no. steps =   402   order =   4   stepsize =   0.448032E+03
+  c1 (bot.left/middle/top rt.) =   0.191468E-06 -0.613018E-05  0.439513E-06
+  c2 (bot.left/middle/top rt.) =   0.338232E+12  0.135498E+12  0.380352E+12
+
+ t =   0.504000E+05     no. steps =   422   order =   4   stepsize =   0.317295E+03
+  c1 (bot.left/middle/top rt.) =  -0.774603E-10 -0.307315E-07 -0.351244E-10
+  c2 (bot.left/middle/top rt.) =   0.335816E+12  0.493029E+12  0.386444E+12
+
+ t =   0.576000E+05     no. steps =   436   order =   5   stepsize =   0.358251E+03
+  c1 (bot.left/middle/top rt.) =   0.180088E-10  0.717698E-08  0.858836E-11
+  c2 (bot.left/middle/top rt.) =   0.332031E+12  0.964978E+12  0.390899E+12
+
+ t =   0.648000E+05     no. steps =   449   order =   5   stepsize =   0.594794E+03
+  c1 (bot.left/middle/top rt.) =  -0.284457E-13 -0.106311E-10 -0.138218E-13
+  c2 (bot.left/middle/top rt.) =   0.331302E+12  0.892183E+12  0.396341E+12
+
+ t =   0.720000E+05     no. steps =   461   order =   5   stepsize =   0.594794E+03
+  c1 (bot.left/middle/top rt.) =   0.271046E-15  0.101114E-12  0.130660E-15
+  c2 (bot.left/middle/top rt.) =   0.332972E+12  0.618623E+12  0.403884E+12
+
+ t =   0.792000E+05     no. steps =   473   order =   5   stepsize =   0.594794E+03
+  c1 (bot.left/middle/top rt.) =   0.569757E-15  0.205829E-12  0.268970E-15
+  c2 (bot.left/middle/top rt.) =   0.333441E+12  0.666892E+12  0.412025E+12
+
+ t =   0.864000E+05     no. steps =   485   order =   5   stepsize =   0.594794E+03
+  c1 (bot.left/middle/top rt.) =   0.270665E-15  0.189895E-16  0.215568E-14
+  c2 (bot.left/middle/top rt.) =   0.335178E+12  0.910637E+12  0.416250E+12
+
+
+Final statistics:
+
+ number of steps        =   485     number of f evals.     =   617
+ number of prec. setups =    85
+ number of prec. evals. =     9     number of prec. solves =  1134
+ number of nonl. iters. =   613     number of lin. iters.  =   597
+ average Krylov subspace dimension (NLI/NNI) =   0.973899E+00
+ number of conv. failures.. nonlinear =  0 linear =   0
+ number of error test failures =  28
+ main solver real/int workspace sizes   =    2089     50
+ linear solver real/int workspace sizes =  2046   10
+In CVBANDPRE:
+ real/int workspace sizes =    2400    200
+ number of f evaluations  =    45
diff --git a/examples/cvode/fcmix_serial/fcvRoberts_dns.f b/examples/cvode/fcmix_serial/fcvRoberts_dns.f
new file mode 100644
index 0000000..e8d8baa
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvRoberts_dns.f
@@ -0,0 +1,233 @@
+C     ----------------------------------------------------------------
+C     $Revision: 4885 $
+C     $Date: 2016-09-02 08:29:03 -0700 (Fri, 02 Sep 2016) $
+C     ----------------------------------------------------------------
+C     FCVODE Example Problem: Robertson kinetics, dense user Jacobian.
+C
+C     The following is a simple example problem, with the coding
+C     needed for its solution by CVODE. The problem is from chemical
+C     kinetics, and consists of the following three rate equations:
+C
+C     dy1/dt = -.04*y1 + 1.e4*y2*y3
+C     dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+C     dy3/dt = 3.e7*y2**2
+C
+C     on the interval from t = 0.0 to t = 4.e10, with initial
+C     conditions:
+C
+C     y1 = 1.0, y2 = y3 = 0.
+C
+C     The problem is stiff. While integrating the system, we also
+C     enable the root finding feature to find the points at which
+C     y1 = 1.e-4 or at which y3 = 0.01. The following coding solves
+C     this problem with CVODE, using the Fortran/C interface routine
+C     package. This solution uses the BDF method and a user-supplied
+C     Jacobian routine, and prints results at t = .4, 4., ..., 4.e10.
+C     It uses ITOL = 2 and ATOL much smaller for y2 than y1 or y3
+C     because y2 has much smaller values. At the end of the run,
+C     various counters of interest are printed.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+      INTEGER IER, I 
+      INTEGER LNST, LNFE, LNSETUP, LNNI, LNCF, LNETF, LNJE, LNGE
+      INTEGER METH, ITMETH, ITOL, ITASK, JOUT, NOUT, IERROOT
+      INTEGER INFO(2)
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR, NEQ, IOUT(25)
+      DOUBLE PRECISION RTOL, T, T0, TOUT
+      DOUBLE PRECISION Y(3), ATOL(3), ROUT(10), RPAR
+C
+      DATA LNST/3/, LNFE/4/, LNETF/5/,  LNCF/6/, LNNI/7/, LNSETUP/8/, 
+     1     LNGE/12/, LNJE/17/
+C
+      NEQ = 3
+      T0 = 0.0D0
+      Y(1) = 1.0D0
+      Y(2) = 0.0D0
+      Y(3) = 0.0D0
+      METH = 2
+      ITMETH = 2
+      ITOL = 2
+      RTOL = 1.0D-4
+      ATOL(1) = 1.0D-8
+      ATOL(2) = 1.0D-14
+      ATOL(3) = 1.0D-6
+      TOUT = 0.4D0
+      ITASK = 1
+      JOUT = 0
+      NOUT = 12
+C
+      WRITE(6,10) NEQ
+ 10   FORMAT('Dense example problem:'//
+     1       ' Robertson kinetics, NEQ = ', I2//)
+C
+      CALL FNVINITS(1, NEQ, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,20) IER
+ 20     FORMAT(///' SUNDIALS_ERROR: FNVINITS returned IER = ', I5)
+        STOP
+      ENDIF
+C
+
+      CALL FCVMALLOC(T0, Y, METH, ITMETH, ITOL, RTOL, ATOL,
+     1               IOUT, ROUT, IPAR, RPAR, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,30) IER
+ 30     FORMAT(///' SUNDIALS_ERROR: FCVMALLOC returned IER = ', I5)
+        STOP
+      ENDIF
+C
+
+      CALL FCVROOTINIT(2, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,45) IER
+ 45      FORMAT(///' SUNDIALS_ERROR: FCVROOTINIT returned IER = ', I5)
+         CALL FCVFREE
+         STOP
+      ENDIF
+C
+      CALL FCVDENSE(NEQ, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,40) IER
+ 40     FORMAT(///' SUNDIALS_ERROR: FCVDENSE returned IER = ', I5)
+        CALL FCVFREE
+        STOP
+      ENDIF
+C
+      CALL FCVDENSESETJAC(1, IER)
+C
+      DO WHILE(JOUT .LT. NOUT)
+C
+        CALL FCVODE(TOUT, T, Y, ITASK, IER)
+C
+        WRITE(6,50) T, Y(1), Y(2), Y(3)
+ 50     FORMAT('At t = ', E12.4, '   y = ', 3E14.6)
+C
+        IF (IER .LT. 0) THEN
+           WRITE(6,60) IER, IOUT(15)
+ 60        FORMAT(///' SUNDIALS_ERROR: FCVODE returned IER = ', I5, /,
+     1            '                 Linear Solver returned IER = ', I5)
+           CALL FCVROOTFREE
+           CALL FCVFREE
+           STOP
+        ENDIF
+C
+        IF (IER .EQ. 2) THEN
+           CALL FCVROOTINFO(2, INFO, IERROOT)
+           IF (IERROOT .LT. 0) THEN
+              WRITE(6,65) IERROOT
+ 65           FORMAT(///' SUNDIALS_ERROR: FCVROOTINFO returned IER = ',
+     1              I5)
+              CALL FCVROOTFREE
+              CALL FCVFREE
+              STOP
+           ENDIF
+           WRITE(6,70) (INFO(I), I = 1, 2)
+ 70        FORMAT(5X, 'Above is a root, INFO() = ', 2I3)
+        ENDIF                   
+C
+        IF (IER .EQ. 0) THEN
+           TOUT = TOUT * 10.0D0
+           JOUT = JOUT + 1
+        ENDIF
+C
+      ENDDO
+C
+      CALL FCVDKY(T, 1, Y, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,80) IER
+ 80      FORMAT(///' SUNDIALS_ERROR: FCVDKY returned IER = ', I4)
+         CALL FCVROOTFREE
+         CALL FCVFREE
+         STOP
+      ENDIF
+      WRITE(6,85) Y(1), Y(2), Y(3)
+ 85   FORMAT(/'Final value of ydot = ', 3E14.6)
+C
+      WRITE(6,90) IOUT(LNST), IOUT(LNFE), IOUT(LNJE), IOUT(LNSETUP),
+     1            IOUT(LNNI), IOUT(LNCF), IOUT(LNETF), IOUT(LNGE)
+ 90   FORMAT(//'Final statistics:'//
+     1       ' No. steps = ', I4, '   No. f-s = ', I4,
+     2       '   No. J-s = ', I4, '   No. LU-s = ', I4/
+     3       ' No. nonlinear iterations = ', I4/
+     4       ' No. nonlinear convergence failures = ', I4/
+     5       ' No. error test failures = ', I4/
+     6       ' No. root function evals = ', I4)
+C
+      CALL FCVROOTFREE
+      CALL FCVFREE
+C
+      STOP
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C Fortran routine for right-hand side function.
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+C
+      YDOT(1) = -0.04D0 * Y(1) + 1.0D4 * Y(2) * Y(3)
+      YDOT(3) = 3.0D7 * Y(2) * Y(2)
+      YDOT(2) = -YDOT(1) - YDOT(3)
+C
+      IER = 0
+C
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVROOTFN(T, Y, G, IPAR, RPAR, IER)
+C Fortran routine for root finding
+      IMPLICIT NONE
+C
+      DOUBLE PRECISION T, Y(*), G(*), RPAR(*)
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER
+C
+      G(1) = Y(1) - 1.0D-4
+      G(2) = Y(3) - 1.0D-2
+C
+      IER = 0
+
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVDJAC(N, T, Y, FY, JAC, H, IPAR, RPAR, 
+     1                   V1, V2, V3, IER)
+C Fortran routine for dense user-supplied Jacobian.
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 N, IPAR(*)
+      INTEGER IER
+      DOUBLE PRECISION T, Y(*), FY(*), JAC(N,*), H, RPAR(*)
+      DOUBLE PRECISION V1(*), V2(*), V3(*)
+C
+      DOUBLE PRECISION  Y1, Y2, Y3
+C
+      Y1 = Y(1)
+      Y2 = Y(2)
+      Y3 = Y(3)
+      JAC(1,1) = -0.04D0
+      JAC(1,2) = 1.0D4 * Y3
+      JAC(1,3) = 1.0D4 * Y2
+      JAC(2,1) =  0.04D0
+      JAC(2,2) = -1.0D4 * Y3 - 6.0D7 * Y2
+      JAC(2,3) = -1.0D4 * Y2
+      JAC(3,2) = 6.0D7 * Y2
+C
+      IER = 0
+C
+      RETURN
+      END
diff --git a/examples/cvode/fcmix_serial/fcvRoberts_dns.out b/examples/cvode/fcmix_serial/fcvRoberts_dns.out
new file mode 100644
index 0000000..e17fe74
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvRoberts_dns.out
@@ -0,0 +1,32 @@
+Dense example problem:
+
+ Robertson kinetics, NEQ =  3
+
+
+At t =   0.2639E+00   y =   0.989965E+00  0.347056E-04  0.100000E-01
+     Above is a root, INFO() =   0  1
+At t =   0.4000E+00   y =   0.985164E+00  0.338624E-04  0.148020E-01
+At t =   0.4000E+01   y =   0.905510E+00  0.224034E-04  0.944679E-01
+At t =   0.4000E+02   y =   0.715801E+00  0.918510E-05  0.284190E+00
+At t =   0.4000E+03   y =   0.450544E+00  0.322322E-05  0.549453E+00
+At t =   0.4000E+04   y =   0.183196E+00  0.894205E-06  0.816803E+00
+At t =   0.4000E+05   y =   0.389810E-01  0.162166E-06  0.961019E+00
+At t =   0.4000E+06   y =   0.493867E-02  0.198517E-07  0.995061E+00
+At t =   0.4000E+07   y =   0.516609E-03  0.206750E-08  0.999483E+00
+At t =   0.2080E+08   y =   0.100000E-03  0.400039E-09  0.999900E+00
+     Above is a root, INFO() =  -1  0
+At t =   0.4000E+08   y =   0.520641E-04  0.208267E-09  0.999948E+00
+At t =   0.4000E+09   y =   0.521124E-05  0.208451E-10  0.999995E+00
+At t =   0.4000E+10   y =   0.520052E-06  0.208021E-11  0.999999E+00
+At t =   0.4000E+11   y =   0.569949E-07  0.227979E-12  0.100000E+01
+
+Final value of ydot =  -0.304816E-17 -0.121927E-22  0.304818E-17
+
+
+Final statistics:
+
+ No. steps =  579   No. f-s =  817   No. J-s =   12   No. LU-s =  118
+ No. nonlinear iterations =  813
+ No. nonlinear convergence failures =    0
+ No. error test failures =   31
+ No. root function evals =  615
diff --git a/examples/cvode/fcmix_serial/fcvRoberts_dnsL.f b/examples/cvode/fcmix_serial/fcvRoberts_dnsL.f
new file mode 100644
index 0000000..d7f665d
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvRoberts_dnsL.f
@@ -0,0 +1,239 @@
+C     ----------------------------------------------------------------
+C     $Revision: 4885 $
+C     $Date: 2016-09-02 08:29:03 -0700 (Fri, 02 Sep 2016) $
+C     ----------------------------------------------------------------
+C     FCVODE Example Problem: Robertson kinetics, Lapack linear solver
+C                             with dense user Jacobian.
+C
+C     The following is a simple example problem, with the coding
+C     needed for its solution by CVODE. The problem is from chemical
+C     kinetics, and consists of the following three rate equations:
+C
+C     dy1/dt = -.04*y1 + 1.e4*y2*y3
+C     dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+C     dy3/dt = 3.e7*y2**2
+C
+C     on the interval from t = 0.0 to t = 4.e10, with initial
+C     conditions:
+C
+C     y1 = 1.0, y2 = y3 = 0.
+C
+C     The problem is stiff. While integrating the system, we also
+C     employ the root finding feature to find the points at which
+C     y1 = 1.e-4 or at which y3 = 0.01. The following coding solves
+C     this problem with CVODE, using the Fortran/C interface routine
+C     package. This solution uses the BDF method and a user-supplied
+C     Jacobian routine, and prints results at t = .4, 4., ..., 4.e10.
+C     It uses ITOL = 2 and ATOL much smaller for y2 than y1 or y3
+C     because y2 has much smaller values. At the end of the run,
+C     various counters of interest are printed.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+      INTEGER IER, I 
+      INTEGER LNST, LNFE, LNSETUP, LNNI, LNCF, LNETF, LNJE, LNGE
+      INTEGER METH, ITMETH, ITOL, ITASK, JOUT, NOUT, IERROOT
+      INTEGER INFO(2)
+C The following declaration specification should match C type long int.
+      INTEGER*8 NEQ, IOUT(25), IPAR
+C The following declaration specification should match C type int.
+      INTEGER*4 NEQL
+      DOUBLE PRECISION RTOL, T, T0, TOUT
+      DOUBLE PRECISION Y(3), ATOL(3), ROUT(10), RPAR
+C
+      DATA LNST/3/, LNFE/4/, LNETF/5/,  LNCF/6/, LNNI/7/, LNSETUP/8/, 
+     1     LNGE/12/, LNJE/17/
+C
+      NEQ = 3
+      NEQL = NEQ
+      T0 = 0.0D0
+      Y(1) = 1.0D0
+      Y(2) = 0.0D0
+      Y(3) = 0.0D0
+      METH = 2
+      ITMETH = 2
+      ITOL = 2
+      RTOL = 1.0D-4
+      ATOL(1) = 1.0D-8
+      ATOL(2) = 1.0D-14
+      ATOL(3) = 1.0D-6
+      TOUT = 0.4D0
+      ITASK = 1
+      JOUT = 0
+      NOUT = 12
+C
+      WRITE(6,10) NEQ
+ 10   FORMAT('Dense example problem:'//
+     1       ' Robertson kinetics, NEQ = ', I2//)
+C
+      CALL FNVINITS(1, NEQ, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,20) IER
+ 20     FORMAT(///' SUNDIALS_ERROR: FNVINITS returned IER = ', I5)
+        STOP
+      ENDIF
+C
+
+      CALL FCVMALLOC(T0, Y, METH, ITMETH, ITOL, RTOL, ATOL,
+     1               IOUT, ROUT, IPAR, RPAR, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,30) IER
+ 30     FORMAT(///' SUNDIALS_ERROR: FCVMALLOC returned IER = ', I5)
+        STOP
+      ENDIF
+C
+
+      CALL FCVROOTINIT(2, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,45) IER
+ 45      FORMAT(///' SUNDIALS_ERROR: FCVROOTINIT returned IER = ', I5)
+         CALL FCVFREE
+         STOP
+      ENDIF
+C
+      CALL FCVLAPACKDENSE(NEQL, IER)
+      IF (IER .NE. 0) THEN
+        WRITE(6,40) IER
+ 40     FORMAT(///' SUNDIALS_ERROR: FCVLAPACKDENSE returned IER = ', I5)
+        CALL FCVFREE
+        STOP
+      ENDIF
+C
+      CALL FCVLAPACKDENSESETJAC(1, IER)
+C
+      DO WHILE(JOUT .LT. NOUT)
+C
+        CALL FCVODE(TOUT, T, Y, ITASK, IER)
+C
+        WRITE(6,50) T, Y(1), Y(2), Y(3)
+ 50     FORMAT('At t = ', E12.4, '   y = ', 3E14.6)
+C
+        IF (IER .LT. 0) THEN
+           WRITE(6,60) IER, IOUT(15)
+ 60        FORMAT(///' SUNDIALS_ERROR: FCVODE returned IER = ', I5, /,
+     1            '                 Linear Solver returned IER = ', I5)
+           CALL FCVROOTFREE
+           CALL FCVFREE
+           STOP
+        ENDIF
+C
+        IF (IER .EQ. 2) THEN
+           CALL FCVROOTINFO(2, INFO, IERROOT)
+           IF (IERROOT .LT. 0) THEN
+              WRITE(6,65) IERROOT
+ 65           FORMAT(///' SUNDIALS_ERROR: FCVROOTINFO returned IER = ',
+     1              I5)
+              CALL FCVROOTFREE
+              CALL FCVFREE
+              STOP
+           ENDIF
+           WRITE(6,70) (INFO(I), I = 1, 2)
+ 70        FORMAT(5X, 'Above is a root, INFO() = ', 2I3)
+        ENDIF                   
+C
+        IF (IER .EQ. 0) THEN
+           TOUT = TOUT * 10.0D0
+           JOUT = JOUT + 1
+        ENDIF
+C
+      ENDDO
+C
+      CALL FCVDKY(T, 1, Y, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6,80) IER
+ 80      FORMAT(///' SUNDIALS_ERROR: FCVDKY returned IER = ', I4)
+         CALL FCVROOTFREE
+         CALL FCVFREE
+         STOP
+      ENDIF
+      WRITE(6,85) Y(1), Y(2), Y(3)
+ 85   FORMAT(/'Final value of ydot = ', 3E14.6)
+C
+      WRITE(6,90) IOUT(LNST), IOUT(LNFE), IOUT(LNJE), IOUT(LNSETUP),
+     1            IOUT(LNNI), IOUT(LNCF), IOUT(LNETF), IOUT(LNGE)
+ 90   FORMAT(//'Final statistics:'//
+     1       ' No. steps = ', I4, '   No. f-s = ', I4,
+     2       '   No. J-s = ', I4, '   No. LU-s = ', I4/
+     3       ' No. nonlinear iterations = ', I4/
+     4       ' No. nonlinear convergence failures = ', I4/
+     5       ' No. error test failures = ', I4/
+     6       ' No. root function evals = ', I4)
+C
+      CALL FCVROOTFREE
+      CALL FCVFREE
+C
+      STOP
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVFUN(T, Y, YDOT, IPAR, RPAR, IER)
+C Fortran routine for right-hand side function.
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+C
+      YDOT(1) = -0.04D0 * Y(1) + 1.0D4 * Y(2) * Y(3)
+      YDOT(3) = 3.0D7 * Y(2) * Y(2)
+      YDOT(2) = -YDOT(1) - YDOT(3)
+C
+      IER = 0
+C
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVROOTFN(T, Y, G, IPAR, RPAR, IER)
+C Fortran routine for root finding
+      IMPLICIT NONE
+C
+      DOUBLE PRECISION T, Y(*), G(*), RPAR(*)
+C The following declaration specification should match C type long int.
+      INTEGER*8 IPAR(*)
+      INTEGER IER
+C
+      G(1) = Y(1) - 1.0D-4
+      G(2) = Y(3) - 1.0D-2
+C
+      IER = 0
+
+      RETURN
+      END
+
+C     ----------------------------------------------------------------
+
+      SUBROUTINE FCVDJAC(N, T, Y, FY, JAC, H, IPAR, RPAR, 
+     1                   V1, V2, V3, IER)
+C Fortran routine for dense user-supplied Jacobian.
+      IMPLICIT NONE
+C
+C The following declaration specification should match C type long int.
+      INTEGER*8 N, IPAR(*)
+      INTEGER IER
+      DOUBLE PRECISION T, Y(*), FY(*), JAC(N,*), H, RPAR(*)
+      DOUBLE PRECISION V1(*), V2(*), V3(*)
+C
+      DOUBLE PRECISION  Y1, Y2, Y3
+C
+      Y1 = Y(1)
+      Y2 = Y(2)
+      Y3 = Y(3)
+      JAC(1,1) = -0.04D0
+      JAC(1,2) = 1.0D4 * Y3
+      JAC(1,3) = 1.0D4 * Y2
+      JAC(2,1) =  0.04D0
+      JAC(2,2) = -1.0D4 * Y3 - 6.0D7 * Y2
+      JAC(2,3) = -1.0D4 * Y2
+      JAC(3,3) = 0.0D0
+      JAC(3,2) = 6.0D7 * Y2
+      JAC(3,3) = 0.0D0
+C
+      IER = 0
+C
+      RETURN
+      END
diff --git a/examples/cvode/fcmix_serial/fcvRoberts_dnsL.out b/examples/cvode/fcmix_serial/fcvRoberts_dnsL.out
new file mode 100644
index 0000000..b4cd08a
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvRoberts_dnsL.out
@@ -0,0 +1,32 @@
+Dense example problem:
+
+ Robertson kinetics, NEQ =  3
+
+
+At t =   0.2639E+00   y =   0.989965E+00  0.347056E-04  0.100000E-01
+     Above is a root, INFO() =   0  1
+At t =   0.4000E+00   y =   0.985164E+00  0.338624E-04  0.148020E-01
+At t =   0.4000E+01   y =   0.905510E+00  0.224034E-04  0.944679E-01
+At t =   0.4000E+02   y =   0.715801E+00  0.918510E-05  0.284190E+00
+At t =   0.4000E+03   y =   0.450544E+00  0.322322E-05  0.549453E+00
+At t =   0.4000E+04   y =   0.183196E+00  0.894205E-06  0.816803E+00
+At t =   0.4000E+05   y =   0.389810E-01  0.162166E-06  0.961019E+00
+At t =   0.4000E+06   y =   0.493868E-02  0.198517E-07  0.995061E+00
+At t =   0.4000E+07   y =   0.517050E-03  0.206925E-08  0.999483E+00
+At t =   0.2081E+08   y =   0.100000E-03  0.400040E-09  0.999900E+00
+     Above is a root, INFO() =  -1  0
+At t =   0.4000E+08   y =   0.520556E-04  0.208233E-09  0.999948E+00
+At t =   0.4000E+09   y =   0.520743E-05  0.208298E-10  0.999995E+00
+At t =   0.4000E+10   y =   0.523126E-06  0.209251E-11  0.999999E+00
+At t =   0.4000E+11   y =   0.500915E-07  0.200366E-12  0.100000E+01
+
+Final value of ydot =  -0.227814E-17 -0.911257E-23  0.227815E-17
+
+
+Final statistics:
+
+ No. steps =  577   No. f-s =  838   No. J-s =   12   No. LU-s =  125
+ No. nonlinear iterations =  834
+ No. nonlinear convergence failures =    0
+ No. error test failures =   33
+ No. root function evals =  612
diff --git a/examples/cvode/fcmix_serial/fcvRoberts_klu.f b/examples/cvode/fcmix_serial/fcvRoberts_klu.f
new file mode 100644
index 0000000..51a0961
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvRoberts_klu.f
@@ -0,0 +1,324 @@
+!     ----------------------------------------------------------------
+!     Programmer(s): Ting Yan @ SMU
+!          Based on cvRoberts_klu.c and modified to Fortran 77
+!     ----------------------------------------------------------------
+!     Copyright (c) 2016, Southern Methodist University.
+!     All rights reserved.
+!     For details, see the LICENSE file.
+!     ----------------------------------------------------------------
+!     $Revision: $
+!     $Date: $
+!     ----------------------------------------------------------------
+!     FCVODE Example Problem: Robertson kinetics
+!
+!     The following is a simple example problem, with the coding
+!     needed for its solution by CVODE. The problem is from chemical
+!     kinetics, and consists of the following three rate equations:
+!
+!     dy1/dt = -.04*y1 + 1.e4*y2*y3
+!     dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+!     dy3/dt = 3.e7*y2**2
+!
+!     on the interval from t = 0.0 to t = 4.e10, with initial
+!     conditions:
+!
+!     y1 = 1.0, y2 = y3 = 0.
+!
+!     The problem is stiff. While integrating the system, we also
+!     use the root finding feature to find the points at which
+!     y1 = 1.e-4 or at which y3 = 0.01. The following coding solves
+!     this problem with CVODE, using the Fortran/C interface routine
+!     package. This solution uses the BDF method, Newton iteration with
+!     the the FCVKLU sparse direct linear solver,and a user-supplied
+!     Jacobian routine.
+!     It uses a scalar relative tolerance and a vector absolute
+!     tolerance. Output is printed in decades from t = .4 to t = 4.e10.
+!     Run statistics (optional outputs) are printed at the end.
+!     ----------------------------------------------------------------
+!
+      IMPLICIT NONE
+!
+      INTEGER IER, I, IERROOT
+      INTEGER LNST, LNFE, LNSETUP, LNNI, LNCF, LNETF, LNJE, LNGE
+      INTEGER METH, ITMETH, ITOL, ITASK, JOUT, NOUT
+      INTEGER INFO(2)
+!     The following declaration specification should match C type
+      INTEGER*8 IPAR, NEQ, IOUT(22), IVAL, MXNLI, MXETF
+      INTEGER INEQ, NNZ, SPARSETYPE, ORDERING
+      DOUBLE PRECISION RTOL, T, T0, TOUT, H0, NLCONV
+      DOUBLE PRECISION Y(3), ATOL(3), ROUT(6), RPAR
+!
+      DATA LNST/3/, LNFE/4/, LNETF/5/, LNCF/6/, LNNI/7/, LNSETUP/8/
+      DATA LNGE/12/, LNJE/17/
+
+!     Problem constant
+      NEQ = 3                   ! number of equations
+      Y(1) = 1.0D0              ! initial y components
+      Y(2) = 0.0D0
+      Y(3) = 0.0D0
+      METH = 2                  ! basic integration method, 2 for BDF
+      ITMETH = 2                ! nonlinear iteration method, 2 for Newton iteration
+      ITOL = 2                  ! type for absolute tolerance, 2 for array
+      RTOL = 1.0D-4             ! scalar relative tolerance
+      ATOL(1) = 1.0D-6          ! vector absolute tolerance components
+      ATOL(2) = 1.0D-12
+      ATOL(3) = 1.0D-4
+      T0 = 0.0D0                ! initial time
+      TOUT = 0.4D0              ! first output time
+      ITASK = 1                 ! Using in call FCVODE, 1 for normal mode
+      JOUT = 0
+      NOUT = 12                 ! number of output times
+!     
+      WRITE(6, 10) NEQ
+ 10   FORMAT('Klu example problem:'//
+     1     'Robertson kinetics, NEQ = ', I2//)
+
+!
+      
+!     Create serial vector of length NEQ for I.C.
+      CALL FNVINITS(1, NEQ, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 20) IER
+ 20      FORMAT(///' SUNDIALS_ERROR: FNVINITS returned IER = ', I5)
+         STOP
+      ENDIF
+!     
+
+!     Call FCVMALLOC to create the solver memory and specify the 
+!     Backward Differentiation Formula and the use of a Newton iteration
+      CALL FCVMALLOC(T0, Y, METH, ITMETH, ITOL, RTOL, ATOL,
+     1               IOUT, ROUT, IPAR, RPAR, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 30) IER
+ 30      FORMAT(///' SUNDIALS_ERROR: FCVMALLOC returned IER = ', I5)
+         STOP
+      ENDIF
+!
+!     Set the FCVODE input
+      IVAL = 1000         ! max no. of internal steps before t_out
+      CALL FCVSETIIN('MAX_NSTEPS', IVAL, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 31) IER
+ 31      FORMAT(///' SUNDIALS_ERROR: FCVSETIIN returned IER = ', I5)
+         STOP
+      ENDIF
+
+      MXETF = 20          ! max no. of error test failures
+      CALL FCVSETIIN('MAX_ERRFAIL', MXETF, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 31) IER
+         STOP
+      ENDIF
+      
+      H0 = 1.0D-4 * RTOL  ! initial step size
+      CALL FCVSETRIN('INIT_STEP', H0, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 32) IER
+ 32      FORMAT(///' SUNDIALS_ERROR: FCVSETRIN returned IER = ', I5)
+         STOP
+      ENDIF
+      
+      NLCONV = 1.0D-4     ! coefficient in the nonlinear convergence test
+      CALL FCVSETRIN('NLCONV_COEF', NLCONV, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 32) IER
+         STOP
+      ENDIF
+!
+
+!     Call FCVROOTINIT to specify the root function g with 2 components
+      CALL FCVROOTINIT(2, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 45) IER
+ 45      FORMAT(///' SUNDIALS_ERROR: FCVROOTINIT returned IER = ' I5)
+         CALL FCVFREE
+         STOP
+      ENDIF
+!
+      
+!     Call FCVKLU to specify the FCVKLU sparse direct linear solver
+      INEQ = NEQ              ! convert to 'normal' integer type
+      NNZ = INEQ * INEQ       ! maximum number of nonzeros in the Jac matrix
+      SPARSETYPE = 0          ! CSC 
+      ORDERING = 1            ! matrix ordering desired, 1=COLAMD
+      CALL FCVKLU(INEQ, NNZ, SPARSETYPE, ORDERING, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 40) IER
+ 40      FORMAT(///' SUNDIALS_ERROR: FCVKLU returned IER = ', I5)
+         CALL FCVFREE
+         STOP
+      ENDIF
+
+      CALL FCVSPARSESETJAC(IER)
+!     
+
+!     In loop, call FCVODE, print results, and test for error.
+      DO WHILE(JOUT .LT. NOUT)
+!
+         CALL FCVODE(TOUT, T, Y, ITASK, IER)
+!     
+         WRITE(6, 50) T, Y(1), Y(2), Y(3)
+ 50      FORMAT('At t = ', E12.4, '   y = ', 3E14.6)
+!     
+         IF(IER .LT. 0) THEN
+            WRITE(6, 60) IER, IOUT(15)
+ 60         FORMAT(///' SUNDIALS_ERROR: FCVODE returned IER =  ', I5, /,
+     1             '                 Linear Solver returned IER = ', I5)
+            CALL FCVROOTFREE
+            CALL FCVFREE
+            STOP
+         ENDIF
+!
+         IF(IER .EQ. 2) THEN
+            CALL FCVROOTINFO(2, INFO, IERROOT)
+            IF (IERROOT .LT. 0) THEN
+               WRITE(6, 65) IERROOT
+ 65            FORMAT(///' SUNDIALS_ERROR: FCVROOTINFO returned IER = ',
+     1                I5)
+               CALL FCVROOTFREE
+               CALL FCVFREE
+               STOP
+            ENDIF
+            WRITE(6, 70) (INFO(I), I = 1, 2)
+ 70         FORMAT(5X, 'rootfound = ', 2I3)
+         ENDIF
+!
+         IF (IER .EQ. 0) THEN
+            TOUT = TOUT * 10.0D0
+            JOUT = JOUT + 1
+         ENDIF
+!
+      ENDDO
+
+!     Obtain a derivative of the solution
+      CAlL FCVDKY(T, 1, Y, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 80) IER
+ 80      FORMAT(///' SUNDIALS_ERROR: FCVDKY returned IER = ' I4)
+         CALL FCVROOTFREE
+         CALL FCVFREE
+         STOP
+      ENDIF
+      WRITE(6, 85) Y(1), Y(2), Y(3)
+ 85   FORMAT(/'Final value of ydot = ', 3E14.6)
+
+!     Print out the statistic information
+      WRITE(6, 90) IOUT(LNST), IOUT(LNFE), IOUT(LNJE), IOUT(LNSETUP),
+     1             IOUT(LNNI), IOUT(LNCF), IOUT(LNETF), IOUT(LNGE)
+ 90   FORMAT(//'Final statistics:'//
+     1       ' No. steps = ', I4, '    No. f-s = ', I4
+     2       '   No. J-s = ', I4, '    No. LU-s = ', I4/ 
+     3       ' No. nonlinear iterations = ', I4/
+     4       ' No. nonlinear convergence failures = ', I4/
+     5       ' No. error test failures = ', I4/
+     6       ' No. root function evals = ', I4)
+!
+      CALL FCVROOTFREE
+      CALL FCVFREE
+!
+      STOP
+      END
+
+!     ----------------------------------------------------------------
+      
+      SUBROUTINE FCVFUN(T, Y, YDOT, IPAR, RPAR, IER)
+!     Fortran routine for right-hand side function      
+      IMPLICIT NONE
+      
+!     The following declaration specification should match C type long int
+      INTEGER*8 IPAR(*)
+      INTEGER IER
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(*)
+      DOUBLE PRECISION Y1, Y2, Y3
+
+      Y1 = Y(1)
+      Y2 = Y(2)
+      Y3 = Y(3)
+      
+      YDOT(1) = -0.04D0 * Y1 + 1.0D4 * Y2 * Y3
+      YDOT(3) = 3.0D7 * Y2 * Y2
+      YDOT(2) = -YDOT(1) - YDOT(3)
+!
+      IER = 0
+!
+      RETURN
+      END
+
+!     ----------------------------------------------------------------
+      
+      SUBROUTINE FCVROOTFN(T, Y, G, IPAR, RPAR, IER)
+! Fortran routine for root finding
+      IMPLICIT NONE
+
+!     The following declaration specification should match C type long int
+      INTEGER*8 IPAR(*)
+      INTEGER IER
+      DOUBLE PRECISION T, Y(*), G(*), RPAR(*)
+      DOUBLE PRECISION Y1, Y3
+      
+      Y1 = Y(1)
+      Y3 = Y(3)
+
+      G(1) = Y1 - 1.0D-4
+      G(2) = Y3 - 1.0D-2
+!
+      IER = 0
+!
+      RETURN
+      END
+
+!     ----------------------------------------------------------------
+      
+      SUBROUTINE FCVSPJAC(T, Y, FY, N, NNZ, JDATA, JRVALS,
+     1     JCPTRS, H, IPAR, RPAR, WK1, WK2, WK3, IER)
+!     Fortran routine for user-supplied CSC format KLU Jacobian
+      IMPLICIT NONE
+
+!     The following declaration specification should match C type long int
+      INTEGER*8  IPAR(*)
+      INTEGER N, NNZ, IER
+      INTEGER JRVALS(NNZ), JCPTRS(N+1)
+      DOUBLE PRECISION T, Y(*), FY(*), H, RPAR(*)
+      DOUBLE PRECISION JDATA(NNZ)
+      DOUBLE PRECISION WK1(*), WK2(*), WK3(*)
+      
+      ! Local data     
+      DOUBLE PRECISION Y1, Y2, Y3
+
+      Y1 = Y(1)
+      Y2 = Y(2)
+      Y3 = Y(3)
+
+      JCPTRS(1) = 0
+      JCPTRS(2) = 3
+      JCPTRS(3) = 6
+      JCPTRS(4) = 9
+
+      JDATA(1) = -0.04D0
+      JRVALS(1) = 0
+      JDATA(2) = 0.04D0
+      JRVALS(2) = 1
+      JDATA(3) = 0.0D0
+      JRVALS(3) = 2
+
+      JDATA(4) = 1.0D4 * Y3
+      JRVALS(4) = 0
+      JDATA(5) = -1.0D4 * Y3 - 6.0D7 * Y2
+      JRVALS(5) = 1
+      JDATA(6) = 6.0D7 * Y2
+      JRVALS(6) = 2
+      
+      JDATA(7) = 1.0D4 * Y2
+      JRVALS(7) = 0
+      JDATA(8) = -1.0D4 * Y2
+      JRVALS(8) = 1
+      JDATA(9) = 0.0D0
+      JRVALS(9) = 2
+
+      IER = 0
+!
+      RETURN
+      END
+
+
+!     ------End file------------------
diff --git a/examples/cvode/fcmix_serial/fcvRoberts_klu.out b/examples/cvode/fcmix_serial/fcvRoberts_klu.out
new file mode 100644
index 0000000..d894e0e
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvRoberts_klu.out
@@ -0,0 +1,32 @@
+Klu example problem:
+
+Robertson kinetics, NEQ =  3
+
+
+At t =   0.2636E+00   y =   0.989965E+00  0.347052E-04  0.100000E-01
+     rootfound =   0  1
+At t =   0.4000E+00   y =   0.985144E+00  0.338588E-04  0.148222E-01
+At t =   0.4000E+01   y =   0.905426E+00  0.223942E-04  0.945515E-01
+At t =   0.4000E+02   y =   0.715830E+00  0.918572E-05  0.284160E+00
+At t =   0.4000E+03   y =   0.450560E+00  0.322342E-05  0.549437E+00
+At t =   0.4000E+04   y =   0.183240E+00  0.894461E-06  0.816759E+00
+At t =   0.4000E+05   y =   0.389806E-01  0.162165E-06  0.961019E+00
+At t =   0.4000E+06   y =   0.493776E-02  0.198479E-07  0.995062E+00
+At t =   0.4000E+07   y =   0.515949E-03  0.206485E-08  0.999484E+00
+At t =   0.2082E+08   y =   0.100000E-03  0.400040E-09  0.999900E+00
+     rootfound =  -1  0
+At t =   0.4000E+08   y =   0.514789E-04  0.205926E-09  0.999949E+00
+At t =   0.4000E+09   y =   0.542638E-05  0.217056E-10  0.999995E+00
+At t =   0.4000E+10   y =   0.464797E-06  0.185919E-11  0.100000E+01
+At t =   0.4000E+11   y =   0.486207E-07  0.194483E-12  0.100000E+01
+
+Final value of ydot =  -0.876832E-18 -0.350733E-23  0.876835E-18
+
+
+Final statistics:
+
+ No. steps =  317    No. f-s =  941   No. J-s =   40    No. LU-s =  117
+ No. nonlinear iterations =  940
+ No. nonlinear convergence failures =    2
+ No. error test failures =   11
+ No. root function evals =  356
diff --git a/examples/cvode/fcmix_serial/fcvRoberts_sps.f b/examples/cvode/fcmix_serial/fcvRoberts_sps.f
new file mode 100644
index 0000000..31623dd
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvRoberts_sps.f
@@ -0,0 +1,306 @@
+!     ----------------------------------------------------------------
+!     Programmer(s): Ting Yan @ SMU
+!          Based on cvRoberts_sps.c and modified to Fortran 77
+!     ----------------------------------------------------------------
+!     Copyright (c) 2016, Southern Methodist University.
+!     All rights reserved.
+!     For details, see the LICENSE file.
+!     ----------------------------------------------------------------
+!     $Revision: $
+!     $Date: $
+!     ----------------------------------------------------------------
+!     FCVODE Example Problem: Robertson kinetics
+!
+!     The following is a simple example problem, with the coding
+!     needed for its solution by CVODE. The problem is from chemical
+!     kinetics, and consists of the following three rate equations:
+!
+!     dy1/dt = -.04*y1 + 1.e4*y2*y3
+!     dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+!     dy3/dt = 3.e7*y2**2
+!
+!     on the interval from t = 0.0 to t = 4.e10, with initial
+!     conditions:
+!
+!     y1 = 1.0, y2 = y3 = 0.
+!
+!     The problem is stiff. While integrating the system, we also
+!     use the root finding feature to find the points at which
+!     y1 = 1.e-4 or at which y3 = 0.01. The following coding solves
+!     this problem with CVODE, using the Fortran/C interface routine
+!     package. This solution uses the BDF method, Newton iteration with
+!     the the FCVSUPERLUMT sparse direct linear solver,and a user-supplied
+!     Jacobian routine.
+!     It uses a scalar relative tolerance and a vector absolute
+!     tolerance. Output is printed in decades from t = .4 to t = 4.e10.
+!     Run statistics (optional outputs) are printed at the end.
+!     ----------------------------------------------------------------
+!
+      IMPLICIT NONE
+!
+      INTEGER IER, I, IERROOT
+      INTEGER LNST, LNFE, LNSETUP, LNNI, LNCF, LNETF, LNJE, LNGE
+      INTEGER METH, ITMETH, ITOL, ITASK, JOUT, NOUT
+      INTEGER INFO(2)
+!     The following declaration specification should match C type
+      INTEGER*8 IPAR, NEQ, IOUT(25), IVAL, MXNLI, MXETF
+      INTEGER INEQ, NNZ, NTHREADS, ORDERING
+      DOUBLE PRECISION RTOL, T, T0, TOUT, H0, NLCONV
+      DOUBLE PRECISION Y(3), ATOL(3), ROUT(10), RPAR
+!
+      DATA LNST/3/, LNFE/4/, LNETF/5/, LNCF/6/, LNNI/7/, LNSETUP/8/
+      DATA LNGE/12/, LNJE/17/
+
+!     Problem constant
+      NEQ = 3                  ! number of equations
+      Y(1) = 1.0D0             ! initial y components
+      Y(2) = 0.0D0
+      Y(3) = 0.0D0
+      METH = 2                 ! basic integration method, 2 for BDF
+      ITMETH =2                ! nonlinear iteration method, 2 for Newton iteration
+      ITOL = 2                 ! type for absolute tolerance, 2 for array
+      RTOL = 1.0D-4            ! scalar relative tolerance
+      ATOL(1) = 1.0D-8         ! vector absolute tolerance components
+      ATOL(2) = 1.0D-14
+      ATOL(3) = 1.0D-6
+      T0 = 0.0D0               ! initial time
+      TOUT = 0.4D0             ! first output time
+      ITASK = 1                ! Using in call FCVODE, 1 for normal mode
+      JOUT = 0
+      NOUT = 12                ! number of output times 
+!
+      WRITE(6, 10) NEQ
+ 10   FORMAT('Superlu_mt example problem:'//
+     1       'Robertson kinetics, NEQ = ', I2//)
+
+!
+!     Create serial vector of length NEQ for I.C.
+      CALL FNVINITS(1, NEQ, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 20) IER
+ 20      FORMAT(///' SUNDIALS_ERROR: FNVINITS returned IER = ', I5)
+         STOP
+      ENDIF
+!
+
+!     Call FCVMALLOC to create the solver memory and specify the 
+!     Backward Differentiation Formula and the use of a Newton iteration
+      CALL FCVMALLOC(T0, Y, METH, ITMETH, ITOL, RTOL, ATOL,
+     1               IOUT, ROUT, IPAR, RPAR, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 30) IER
+ 30      FORMAT(///' SUNDIALS_ERROR: FCVMALLOC returned IER = ', I5)
+         STOP
+      ENDIF
+!
+!     Set the FCVODE input
+      IVAL = 900000           ! max no. of internal steps before t_out
+      CALL FCVSETIIN('MAX_NSTEPS', IVAL, IER)
+
+      MXNLI = 8
+      CALL FCVSETIIN('MAX_NITERS', MXNLI, IER)
+
+      MXETF = 20
+      CALL FCVSETIIN('MAX_ERRFAIL', MXETF, IER)
+      
+      H0 = 1.0D-4 * RTOL
+      CALL FCVSETRIN('INIT_STEP', H0, IER)
+
+      NLCONV = 1.0D-7
+      CALL FCVSETRIN('NLCONV_COEF', NLCONV, IER)
+
+
+!     Call FCVROOTINIT to specify the root function g with 2 components
+      CALL FCVROOTINIT(2, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 45) IER
+ 45      FORMAT(///' SUNDIALS_ERROR: FCVROOTINIT returned IER = ' I5)
+         CALL FCVROOTFREE
+         STOP
+      ENDIF
+!
+
+!     Call FCVSUPERLUMT to specify the FCVKLU sparse direct linear solver
+      NTHREADS = 1        ! number of threads to use in factorization
+      INEQ = NEQ          ! covert to 'normal' integer type
+      NNZ = INEQ * INEQ   ! maximum number of nonzeros in the sparse Jac
+      ORDERING = 3        ! matrix ordering desired, 3=COLAMD 
+      CALL FCVSUPERLUMT(NTHREADS, INEQ, NNZ, ORDERING, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 40) IER
+ 40      FORMAT(///' SUNDIALS_ERROR: FCVKLU returned IER = ', I5)
+         CALL FCVFREE
+         STOP
+      ENDIF
+
+      CALL FCVSPARSESETJAC(IER)
+!
+
+!     In loop, call FCVODE, print results, and test for error.
+      DO WHILE(JOUT .LT. NOUT)
+!
+         CALL FCVODE(TOUT, T, Y, ITASK, IER)
+!     
+         WRITE(6, 50) T, Y(1), Y(2), Y(3)
+ 50      FORMAT('At t = ', E12.4, '   y = ', 3E14.6)
+!
+         IF(IER .LT. 0) THEN
+            WRITE(6, 60) IER, IOUT(15)
+ 60         FORMAT(///' SUNDIALS_ERROR: FCVODE returned IER = ', I5, /,
+     1             '                 Linear Solver returned IER = ', I5)
+            CALL FCVROOTFREE
+            CALL FCVFREE
+            STOP
+         ENDIF
+!
+         IF(IER .EQ. 2) THEN
+            CALL FCVROOTINFO(2, INFO, IERROOT)
+            IF (IERROOT .LT. 0) THEN
+               WRITE(6, 65) IERROOT
+ 65            FORMAT(///' SUNDIALS_ERROR: FCVROOTINFO returned IER = ',
+     1                I5)
+               CALL FCVROOTFREE
+               CALL FCVFREE
+               STOP
+            ENDIF
+            WRITE(6, 70) (INFO(I), I = 1, 2)
+ 70         FORMAT(5X, 'Above is a root, INFO() = ', 2I3)
+         ENDIF
+!
+         IF (IER .EQ. 0) THEN
+            TOUT = TOUT * 10.0D0
+            JOUT = JOUT + 1
+         ENDIF
+!
+      ENDDO
+
+!     Print out the derivatives at point the last step taken
+      CALL FCVDKY(T, 1, Y, IER)
+      IF (IER .NE. 0) THEN
+         WRITE(6, 80) IER
+ 80      FORMAT(///' SUNDIALS_ERROR: FCVDKY returned IER = ' I4)
+         CALL FCVROOTFREE
+         CALL FCVFREE
+         STOP
+      ENDIF
+      WRITE(6, 85) Y(1), Y(2), Y(3)
+ 85   FORMAT(/'Final value of ydot = ', 3E14.6)
+!
+
+!     Print out statistic information
+      WRITE(6, 90) IOUT(LNST), IOUT(LNFE), IOUT(LNJE), IOUT(LNSETUP),
+     1             IOUT(LNNI), IOUT(LNCF), IOUT(LNETF), IOUT(LNGE)
+ 90   FORMAT(//'Final statistics:'//
+     1       ' No. steps = ', I4, '    No. f-s = ', I4
+     2       '   No. J-s = ', I4, '    No. LU-s = ', I4/ 
+     3       ' No. nonlinear iterations = ', I4/
+     4       ' No. nonlinear convergence failures = ', I4/
+     5       ' No. error test failures = ', I4/
+     6       ' No. root function evals = ', I4)
+!
+      CALL FCVROOTFREE
+      CALL FCVFREE
+!
+      STOP
+      END
+
+!     ----------------------------------------------------------------
+      
+      SUBROUTINE FCVFUN(T, Y, YDOT, IPAR, RPAR, IER)
+! Fortran routine for right-hand side function       
+      IMPLICIT NONE
+!
+!     The following declaration specification should match C type long int
+      INTEGER*8 IPAR(1)
+      INTEGER IER
+      DOUBLE PRECISION T, Y(*), YDOT(*), RPAR(1)
+      DOUBLE PRECISION Y1, Y2, Y3
+
+      Y1 = Y(1)
+      Y2 = Y(2)
+      Y3 = Y(3)
+      
+      YDOT(1) = -0.04D0 * Y1 + 1.0D4 * Y2 * Y3
+      YDOT(3) = 3.0D7 * Y2 * Y2
+      YDOT(2) = -YDOT(1) - YDOT(3)
+!
+      IER = 0
+!
+      RETURN
+      END
+
+!     ----------------------------------------------------------------
+      
+      SUBROUTINE FCVROOTFN(T, Y, G, IPAR, RPAR, IER)
+! Fortran routine for root finding
+      IMPLICIT NONE
+
+!     The following declaration specification should match C type long int
+      INTEGER*8 IPAR(*)
+      INTEGER IER
+      DOUBLE PRECISION T, Y(*), G(*), RPAR(*)
+      DOUBLE PRECISION Y1, Y3
+      
+      Y1 = Y(1)
+      Y3 = Y(3)
+
+      G(1) = Y1 - 1.0D-4
+      G(2) = Y3 - 1.0D-2
+!
+      IER = 0
+!
+      RETURN
+      END
+
+!     ----------------------------------------------------------------
+      
+      SUBROUTINE FCVSPJAC(T, Y, FY, N, NNZ, JDATA, JRVALS,
+     1                    JCPTRS, H, IPAR, RPAR, WK1, WK2, WK3, IER)
+! Fortran routine for user-supplied CSC format KLU Jacobian 
+      IMPLICIT NONE
+
+!     The following declaration specification should match C type
+      INTEGER*8 IPAR(*)
+      INTEGER N, NNZ, IER
+      INTEGER JRVALS(NNZ), JCPTRS(N+1)
+      DOUBLE PRECISION T, Y(*), FY(*), H, RPAR(*)
+      DOUBLE PRECISION JDATA(NNZ)
+      DOUBLE PRECISION WK1(*), WK2(*), WK3(*)
+      
+      ! Local data     
+      DOUBLE PRECISION Y1, Y2, Y3
+
+      Y1 = Y(1)
+      Y2 = Y(2)
+      Y3 = Y(3)
+
+      JCPTRS(1) = 0
+      JCPTRS(2) = 3
+      JCPTRS(3) = 6
+      JCPTRS(4) = 9
+
+      JDATA(1) = -0.04D0
+      JRVALS(1) = 0
+      JDATA(2) = 0.04D0
+      JRVALS(2) = 1
+      JDATA(3) = 0.0D0
+      JRVALS(3) = 2
+
+      JDATA(4) = 1.0D4 * Y3
+      JRVALS(4) = 0
+      JDATA(5) = -1.0D4 * Y3 - 6.0D7 * Y2
+      JRVALS(5) = 1
+      JDATA(6) = 6.0D7 * Y2
+      JRVALS(6) = 2
+      
+      JDATA(7) = 1.0D4 * Y2
+      JRVALS(7) = 0
+      JDATA(8) = -1.0D4 * Y2
+      JRVALS(8) = 1
+      JDATA(9) = 0.0D0
+      JRVALS(9) = 2
+!
+      IER = 0
+!
+      RETURN
+      END
diff --git a/examples/cvode/fcmix_serial/fcvRoberts_sps.out b/examples/cvode/fcmix_serial/fcvRoberts_sps.out
new file mode 100644
index 0000000..0b88034
--- /dev/null
+++ b/examples/cvode/fcmix_serial/fcvRoberts_sps.out
@@ -0,0 +1,32 @@
+Superlu_mt example problem:
+
+Robertson kinetics, NEQ =  3
+
+
+At t =   0.2640E+00   y =   0.989965E+00  0.347056E-04  0.100000E-01
+     Above is a root, INFO() =   0  1
+At t =   0.4000E+00   y =   0.985172E+00  0.338640E-04  0.147938E-01
+At t =   0.4000E+01   y =   0.905507E+00  0.224034E-04  0.944710E-01
+At t =   0.4000E+02   y =   0.715840E+00  0.918606E-05  0.284150E+00
+At t =   0.4000E+03   y =   0.450575E+00  0.322362E-05  0.549422E+00
+At t =   0.4000E+04   y =   0.183242E+00  0.894472E-06  0.816757E+00
+At t =   0.4000E+05   y =   0.389931E-01  0.162219E-06  0.961007E+00
+At t =   0.4000E+06   y =   0.493709E-02  0.198451E-07  0.995063E+00
+At t =   0.4000E+07   y =   0.516765E-03  0.206812E-08  0.999483E+00
+At t =   0.2078E+08   y =   0.100000E-03  0.400040E-09  0.999900E+00
+     Above is a root, INFO() =  -1  0
+At t =   0.4000E+08   y =   0.519865E-04  0.207957E-09  0.999948E+00
+At t =   0.4000E+09   y =   0.519161E-05  0.207666E-10  0.999995E+00
+At t =   0.4000E+10   y =   0.520292E-06  0.208117E-11  0.999999E+00
+At t =   0.4000E+11   y =   0.590048E-07  0.236019E-12  0.100000E+01
+
+Final value of ydot =  -0.166627E-17 -0.666508E-23  0.166628E-17
+
+
+Final statistics:
+
+ No. steps =  364    No. f-s = 2056   No. J-s =   18    No. LU-s =   98
+ No. nonlinear iterations = 2055
+ No. nonlinear convergence failures =    0
+ No. error test failures =   13
+ No. root function evals =  394
diff --git a/examples/cvode/parallel/CMakeLists.txt b/examples/cvode/parallel/CMakeLists.txt
new file mode 100644
index 0000000..b44b707
--- /dev/null
+++ b/examples/cvode/parallel/CMakeLists.txt
@@ -0,0 +1,139 @@
+# ---------------------------------------------------------------
+# $Revision: 4957 $
+# $Date: 2016-09-23 12:21:47 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for CVODE parallel examples
+
+
+# Add variable CVODE_examples with the names of the parallel CVODE examples
+# "name\;nodes\;tasks"
+SET(CVODE_examples
+  "cvAdvDiff_diag_p\;2\;4"
+  "cvAdvDiff_non_p\;2\;2"
+  "cvDiurnal_kry_bbd_p\;2\;4"
+  "cvDiurnal_kry_p\;2\;4"
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the C compiler to the MPICC script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${CVODE_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(HYPRE_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${HYPRE_LIBRARIES})
+ENDIF(HYPRE_FOUND)
+
+# Add the build and install targets for each CVODE example
+
+FOREACH(example_tuple ${CVODE_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPICC)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPICC)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${CVODE_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/parallel)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "CVODE")
+  SET(SOLVER_LIB "sundials_cvode")
+  FOREACH(example_tuple ${CVODE_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${CVODE_examples})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/cvode/parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/cvode/parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/parallel
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/cvode/parallel/README b/examples/cvode/parallel/README
new file mode 100644
index 0000000..0f42964
--- /dev/null
+++ b/examples/cvode/parallel/README
@@ -0,0 +1,52 @@
+List of parallel CVODE examples
+
+  cvAdvDiff_non_p       : 1-D advection-diffusion (nonstiff)
+  cvAdvDiff_diag_p      : 1-D advection-diffusion with Adams and diagonal linear solver
+  cvDiurnal_kry_bbd_p   : 2-D 2-species diurnal advection-diffusion with BBD preconditioner
+  cvDiurnal_kry_p       : 2-D 2-species diurnal advection-diffusion
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/cvode/parallel/cvAdvDiff_diag_p.c b/examples/cvode/parallel/cvAdvDiff_diag_p.c
new file mode 100644
index 0000000..b431d9a
--- /dev/null
+++ b/examples/cvode/parallel/cvAdvDiff_diag_p.c
@@ -0,0 +1,367 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4868 $
+ * $Date: 2016-08-19 10:16:31 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, George Byrne,
+ *                and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem, with the program for
+ * its solution by CVODE. The problem is the semi-discrete
+ * form of the advection-diffusion equation in 1-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx
+ * on the interval 0 <= x <= 2, and the time interval 0 <= t <= 5.
+ * Homogeneous Dirichlet boundary conditions are posed, and the
+ * initial condition is the following:
+ *   u(x,t=0) = x(2-x)exp(2x) .
+ * The PDE is discretized on a uniform grid of size MX+2 with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX.
+ * This program solves the problem with the ADAMS integration method, 
+ * and with Newton iteration using diagonal approximate Jacobians.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .5, 1.0, ..., 5.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * This version uses MPI for user routines.
+ * Execute with Number of Processors = N,  with 1 <= N <= MX.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvode/cvode.h>              /* prototypes for CVODE fcts. */
+#include <cvode/cvode_diag.h>         /* prototypes for CVODE diagonal solver */
+#include <nvector/nvector_parallel.h> /* definition of N_Vector and macros */
+#include <sundials/sundials_types.h>  /* definition of realtype */
+#include <sundials/sundials_math.h>   /* definition of EXP */
+
+#include <mpi.h>                      /* MPI constants and types */
+
+/* Problem Constants */
+
+#define ZERO  RCONST(0.0)
+
+#define XMAX  RCONST(2.0)    /* domain boundary           */
+#define MX    10             /* mesh dimension            */
+#define NEQ   MX             /* number of equations       */
+#define ATOL  RCONST(1.0e-5) /* scalar absolute tolerance */
+#define T0    ZERO           /* initial time              */
+#define T1    RCONST(0.5)    /* first output time         */
+#define DTOUT RCONST(0.5)    /* output time increment     */
+#define NOUT  10             /* number of output times    */
+
+/* Type : UserData 
+   contains grid constants, parallel machine parameters, work array. */
+
+typedef struct {
+  realtype dx, hdcoef, hacoef;
+  int npes, my_pe;
+  MPI_Comm comm;
+  realtype z[100];
+} *UserData;
+
+/* Private Helper Functions */
+
+static void SetIC(N_Vector u, realtype dx, long int my_length,
+                  long int my_base);
+
+static void PrintIntro(int npes);
+
+static void PrintData(realtype t, realtype umax, long int nst);
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/***************************** Main Program ******************************/
+
+int main(int argc, char *argv[])
+{
+  realtype dx, reltol, abstol, t, tout, umax;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag, my_pe, npes;
+  long int local_N, nperpe, nrem, my_base, nst;
+
+  MPI_Comm comm;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Get processor number, total number of pe's, and my_pe. */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  /* Set local vector length. */
+  nperpe = NEQ/npes;
+  nrem = NEQ - npes*nperpe;
+  local_N = (my_pe < nrem) ? nperpe+1 : nperpe;
+  my_base = (my_pe < nrem) ? my_pe*local_N : my_pe*nperpe + nrem;
+
+  data = (UserData) malloc(sizeof *data);  /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+
+  data->comm = comm;
+  data->npes = npes;
+  data->my_pe = my_pe;
+
+  u = N_VNew_Parallel(comm, local_N, NEQ);  /* Allocate u vector */
+  if(check_flag((void *)u, "N_VNew", 0, my_pe)) MPI_Abort(comm, 1);
+
+  reltol = ZERO;  /* Set the tolerances */
+  abstol = ATOL;
+
+  dx = data->dx = XMAX/((realtype)(MX+1));  /* Set grid coefficients in data */
+  data->hdcoef = RCONST(1.0)/(dx*dx);
+  data->hacoef = RCONST(0.5)/(RCONST(2.0)*dx);
+
+  SetIC(u, dx, local_N, my_base);  /* Initialize u vector */
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Adams-Moulton LMM and the use of a functional iteration */
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1, my_pe)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1, my_pe)) return(1);
+
+  flag = CVDiag(cvode_mem);
+  if (check_flag(&flag, "CVDiag", 1, my_pe)) return(1);
+
+  if (my_pe == 0) PrintIntro(npes);
+
+  umax = N_VMaxNorm(u);
+
+  if (my_pe == 0) {
+    t = T0;
+    PrintData(t, umax, 0);
+  }
+
+  /* In loop over output points, call CVode, print results, test for error */
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1, my_pe)) break;
+    umax = N_VMaxNorm(u);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1, my_pe);
+    if (my_pe == 0) PrintData(t, umax, nst);
+  }
+
+  if (my_pe == 0) 
+    PrintFinalStats(cvode_mem);  /* Print some final statistics */
+
+  N_VDestroy_Parallel(u);        /* Free the u vector */
+  CVodeFree(&cvode_mem);         /* Free the integrator memory */
+  free(data);                    /* Free user data */
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/************************ Private Helper Functions ***********************/
+
+/* Set initial conditions in u vector */
+
+static void SetIC(N_Vector u, realtype dx, long int my_length,
+                  long int my_base)
+{
+  int i;
+  long int iglobal;
+  realtype x;
+  realtype *udata;
+
+  /* Set pointer to data array and get local length of u. */
+  udata = N_VGetArrayPointer_Parallel(u);
+  my_length = N_VGetLocalLength_Parallel(u);
+
+  /* Load initial profile into u vector */
+  for (i=1; i<=my_length; i++) {
+    iglobal = my_base + i;
+    x = iglobal*dx;
+    udata[i-1] = x*(XMAX - x)*SUNRexp(RCONST(2.0)*x);
+  }  
+}
+
+/* Print problem introduction */
+
+static void PrintIntro(int npes)
+{
+  printf("\n 1-D advection-diffusion equation, mesh size =%3d \n", MX);
+  printf("\n Number of PEs = %3d \n", npes);
+  printf("\n Diagonal linear solver CVDiag \n\n");
+
+  return;
+}
+
+/* Print data */
+
+static void PrintData(realtype t, realtype umax, long int nst)
+{
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %4.2Lf  max.norm(u) =%14.6Le  nst =%4ld \n", t, umax, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %4.2f  max.norm(u) =%14.6e  nst =%4ld \n", t, umax, nst);
+#else
+  printf("At t = %4.2f  max.norm(u) =%14.6e  nst =%4ld \n", t, umax, nst);
+#endif
+
+  return;
+}
+
+/* Print some final statistics located in the iopt array */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nni, ncfn, netf;
+  int flag;
+  
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, 0);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1, 0);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1, 0);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1, 0);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("nst = %-6ld  nfe  = %-6ld  ", nst, nfe);
+  printf("nni = %-6ld  ncfn = %-6ld  netf = %ld\n \n", nni, ncfn, netf);
+}
+
+/***************** Function Called by the Solver ***********************/
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype ui, ult, urt, hordc, horac, hdiff, hadv;
+  realtype *udata, *dudata, *z;
+  int i;
+  int npes, my_pe, my_length, my_pe_m1, my_pe_p1, last_pe, my_last;
+  UserData data;
+  MPI_Status status;
+  MPI_Comm comm;
+
+  udata = N_VGetArrayPointer_Parallel(u);
+  dudata = N_VGetArrayPointer_Parallel(udot);
+
+  /* Extract needed problem constants from data */
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+
+  /* Extract parameters for parallel computation. */
+  comm = data->comm;
+  npes = data->npes;           /* Number of processes. */ 
+  my_pe = data->my_pe;         /* Current process number. */
+  my_length = N_VGetLocalLength_Parallel(u); /* Number of local elements of u. */ 
+  z = data->z;
+
+  /* Compute related parameters. */
+  my_pe_m1 = my_pe - 1;
+  my_pe_p1 = my_pe + 1;
+  last_pe = npes - 1;
+  my_last = my_length - 1;
+
+  /* Store local segment of u in the working array z. */
+   for (i = 1; i <= my_length; i++)
+     z[i] = udata[i - 1];
+
+  /* Pass needed data to processes before and after current process. */
+   if (my_pe != 0)
+     MPI_Send(&z[1], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm);
+   if (my_pe != last_pe)
+     MPI_Send(&z[my_length], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm);   
+
+  /* Receive needed data from processes before and after current process. */
+   if (my_pe != 0)
+     MPI_Recv(&z[0], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm, &status);
+   else z[0] = ZERO;
+   if (my_pe != last_pe)
+     MPI_Recv(&z[my_length+1], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm,
+              &status);   
+   else z[my_length + 1] = ZERO;
+
+  /* Loop over all grid points in current process. */
+  for (i=1; i<=my_length; i++) {
+
+    /* Extract u at x_i and two neighboring points */
+    ui = z[i];
+    ult = z[i-1];
+    urt = z[i+1];
+
+    /* Set diffusion and advection terms and load into udot */
+    hdiff = hordc*(ult - RCONST(2.0)*ui + urt);
+    hadv = horac*(urt - ult);
+    dudata[i-1] = hdiff + hadv;
+  }
+
+  return(0);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+              id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/parallel/cvAdvDiff_diag_p.out b/examples/cvode/parallel/cvAdvDiff_diag_p.out
new file mode 100644
index 0000000..ba98e12
--- /dev/null
+++ b/examples/cvode/parallel/cvAdvDiff_diag_p.out
@@ -0,0 +1,23 @@
+
+ 1-D advection-diffusion equation, mesh size = 10 
+
+ Number of PEs =   4 
+
+ Diagonal linear solver CVDiag 
+
+At t = 0.00  max.norm(u) =  1.569909e+01  nst =   0 
+At t = 0.50  max.norm(u) =  3.052962e+00  nst = 143 
+At t = 1.00  max.norm(u) =  8.747271e-01  nst = 202 
+At t = 1.50  max.norm(u) =  2.494167e-01  nst = 282 
+At t = 2.00  max.norm(u) =  7.082911e-02  nst = 327 
+At t = 2.50  max.norm(u) =  2.042025e-02  nst = 377 
+At t = 3.00  max.norm(u) =  5.964897e-03  nst = 418 
+At t = 3.50  max.norm(u) =  1.962584e-03  nst = 445 
+At t = 4.00  max.norm(u) =  5.827188e-04  nst = 464 
+At t = 4.50  max.norm(u) =  1.501144e-04  nst = 480 
+At t = 5.00  max.norm(u) =  4.800542e-05  nst = 497 
+
+Final Statistics: 
+
+nst = 497     nfe  = 967     nni = 963     ncfn = 26      netf = 24
+ 
diff --git a/examples/cvode/parallel/cvAdvDiff_non_p.c b/examples/cvode/parallel/cvAdvDiff_non_p.c
new file mode 100644
index 0000000..647db70
--- /dev/null
+++ b/examples/cvode/parallel/cvAdvDiff_non_p.c
@@ -0,0 +1,362 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4868 $
+ * $Date: 2016-08-19 10:16:31 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, George Byrne,
+ *                and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem, with the program for
+ * its solution by CVODE. The problem is the semi-discrete
+ * form of the advection-diffusion equation in 1-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx
+ * on the interval 0 <= x <= 2, and the time interval 0 <= t <= 5.
+ * Homogeneous Dirichlet boundary conditions are posed, and the
+ * initial condition is the following:
+ *   u(x,t=0) = x(2-x)exp(2x) .
+ * The PDE is discretized on a uniform grid of size MX+2 with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX.
+ * This program solves the problem with the option for nonstiff
+ * systems: ADAMS method and functional iteration.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .5, 1.0, ..., 5.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * This version uses MPI for user routines.
+ * Execute with Number of Processors = N,  with 1 <= N <= MX.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvode/cvode.h>              /* prototypes for CVODE fcts. */
+#include <nvector/nvector_parallel.h> /* definition of N_Vector and macros */
+#include <sundials/sundials_types.h>  /* definition of realtype */
+#include <sundials/sundials_math.h>   /* definition of EXP */
+
+#include <mpi.h>                      /* MPI constants and types */
+
+/* Problem Constants */
+
+#define ZERO  RCONST(0.0)
+
+#define XMAX  RCONST(2.0)    /* domain boundary           */
+#define MX    10             /* mesh dimension            */
+#define NEQ   MX             /* number of equations       */
+#define ATOL  RCONST(1.0e-5) /* scalar absolute tolerance */
+#define T0    ZERO           /* initial time              */
+#define T1    RCONST(0.5)    /* first output time         */
+#define DTOUT RCONST(0.5)    /* output time increment     */
+#define NOUT  10             /* number of output times    */
+
+/* Type : UserData 
+   contains grid constants, parallel machine parameters, work array. */
+
+typedef struct {
+  realtype dx, hdcoef, hacoef;
+  int npes, my_pe;
+  MPI_Comm comm;
+  realtype z[100];
+} *UserData;
+
+/* Private Helper Functions */
+
+static void SetIC(N_Vector u, realtype dx, long int my_length,
+                  long int my_base);
+
+static void PrintIntro(int npes);
+
+static void PrintData(realtype t, realtype umax, long int nst);
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/***************************** Main Program ******************************/
+
+int main(int argc, char *argv[])
+{
+  realtype dx, reltol, abstol, t, tout, umax;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag, my_pe, npes;
+  long int local_N, nperpe, nrem, my_base, nst;
+
+  MPI_Comm comm;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Get processor number, total number of pe's, and my_pe. */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  /* Set local vector length. */
+  nperpe = NEQ/npes;
+  nrem = NEQ - npes*nperpe;
+  local_N = (my_pe < nrem) ? nperpe+1 : nperpe;
+  my_base = (my_pe < nrem) ? my_pe*local_N : my_pe*nperpe + nrem;
+
+  data = (UserData) malloc(sizeof *data);  /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+
+  data->comm = comm;
+  data->npes = npes;
+  data->my_pe = my_pe;
+
+  u = N_VNew_Parallel(comm, local_N, NEQ);  /* Allocate u vector */
+  if(check_flag((void *)u, "N_VNew", 0, my_pe)) MPI_Abort(comm, 1);
+
+  reltol = ZERO;  /* Set the tolerances */
+  abstol = ATOL;
+
+  dx = data->dx = XMAX/((realtype)(MX+1));  /* Set grid coefficients in data */
+  data->hdcoef = RCONST(1.0)/(dx*dx);
+  data->hacoef = RCONST(0.5)/(RCONST(2.0)*dx);
+
+  SetIC(u, dx, local_N, my_base);  /* Initialize u vector */
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Adams-Moulton LMM and the use of a functional iteration */
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1, my_pe)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1, my_pe)) return(1);
+
+  if (my_pe == 0) PrintIntro(npes);
+
+  umax = N_VMaxNorm(u);
+
+  if (my_pe == 0) {
+    t = T0;
+    PrintData(t, umax, 0);
+  }
+
+  /* In loop over output points, call CVode, print results, test for error */
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1, my_pe)) break;
+    umax = N_VMaxNorm(u);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1, my_pe);
+    if (my_pe == 0) PrintData(t, umax, nst);
+  }
+
+  if (my_pe == 0) 
+    PrintFinalStats(cvode_mem);  /* Print some final statistics */
+
+  N_VDestroy_Parallel(u);        /* Free the u vector */
+  CVodeFree(&cvode_mem);         /* Free the integrator memory */
+  free(data);                    /* Free user data */
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/************************ Private Helper Functions ***********************/
+
+/* Set initial conditions in u vector */
+
+static void SetIC(N_Vector u, realtype dx, long int my_length,
+                  long int my_base)
+{
+  int i;
+  long int iglobal;
+  realtype x;
+  realtype *udata;
+
+  /* Set pointer to data array and get local length of u. */
+  udata = N_VGetArrayPointer_Parallel(u);
+  my_length = N_VGetLocalLength_Parallel(u);
+
+  /* Load initial profile into u vector */
+  for (i=1; i<=my_length; i++) {
+    iglobal = my_base + i;
+    x = iglobal*dx;
+    udata[i-1] = x*(XMAX - x)*SUNRexp(RCONST(2.0)*x);
+  }  
+}
+
+/* Print problem introduction */
+
+static void PrintIntro(int npes)
+{
+  printf("\n 1-D advection-diffusion equation, mesh size =%3d \n", MX);
+  printf("\n Number of PEs = %3d \n\n", npes);
+
+  return;
+}
+
+/* Print data */
+
+static void PrintData(realtype t, realtype umax, long int nst)
+{
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %4.2Lf  max.norm(u) =%14.6Le  nst =%4ld \n", t, umax, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %4.2f  max.norm(u) =%14.6e  nst =%4ld \n", t, umax, nst);
+#else
+  printf("At t = %4.2f  max.norm(u) =%14.6e  nst =%4ld \n", t, umax, nst);
+#endif
+
+  return;
+}
+
+/* Print some final statistics located in the iopt array */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nni, ncfn, netf;
+  int flag;
+  
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, 0);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1, 0);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1, 0);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1, 0);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("nst = %-6ld  nfe  = %-6ld  ", nst, nfe);
+  printf("nni = %-6ld  ncfn = %-6ld  netf = %ld\n \n", nni, ncfn, netf);
+}
+
+/***************** Function Called by the Solver ***********************/
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype ui, ult, urt, hordc, horac, hdiff, hadv;
+  realtype *udata, *dudata, *z;
+  int i;
+  int npes, my_pe, my_length, my_pe_m1, my_pe_p1, last_pe, my_last;
+  UserData data;
+  MPI_Status status;
+  MPI_Comm comm;
+
+  udata = N_VGetArrayPointer_Parallel(u);
+  dudata = N_VGetArrayPointer_Parallel(udot);
+
+  /* Extract needed problem constants from data */
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+
+  /* Extract parameters for parallel computation. */
+  comm = data->comm;
+  npes = data->npes;           /* Number of processes. */ 
+  my_pe = data->my_pe;         /* Current process number. */
+  my_length = N_VGetLocalLength_Parallel(u); /* Number of local elements of u. */ 
+  z = data->z;
+
+  /* Compute related parameters. */
+  my_pe_m1 = my_pe - 1;
+  my_pe_p1 = my_pe + 1;
+  last_pe = npes - 1;
+  my_last = my_length - 1;
+
+  /* Store local segment of u in the working array z. */
+   for (i = 1; i <= my_length; i++)
+     z[i] = udata[i - 1];
+
+  /* Pass needed data to processes before and after current process. */
+   if (my_pe != 0)
+     MPI_Send(&z[1], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm);
+   if (my_pe != last_pe)
+     MPI_Send(&z[my_length], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm);   
+
+  /* Receive needed data from processes before and after current process. */
+   if (my_pe != 0)
+     MPI_Recv(&z[0], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm, &status);
+   else z[0] = ZERO;
+   if (my_pe != last_pe)
+     MPI_Recv(&z[my_length+1], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm,
+              &status);   
+   else z[my_length + 1] = ZERO;
+
+  /* Loop over all grid points in current process. */
+  for (i=1; i<=my_length; i++) {
+
+    /* Extract u at x_i and two neighboring points */
+    ui = z[i];
+    ult = z[i-1];
+    urt = z[i+1];
+
+    /* Set diffusion and advection terms and load into udot */
+    hdiff = hordc*(ult - RCONST(2.0)*ui + urt);
+    hadv = horac*(urt - ult);
+    dudata[i-1] = hdiff + hadv;
+  }
+
+  return(0);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+              id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/parallel/cvAdvDiff_non_p.out b/examples/cvode/parallel/cvAdvDiff_non_p.out
new file mode 100644
index 0000000..be50625
--- /dev/null
+++ b/examples/cvode/parallel/cvAdvDiff_non_p.out
@@ -0,0 +1,21 @@
+
+ 1-D advection-diffusion equation, mesh size = 10 
+
+ Number of PEs =   4 
+
+At t = 0.00  max.norm(u) =  1.569909e+01  nst =   0 
+At t = 0.50  max.norm(u) =  3.052881e+00  nst = 113 
+At t = 1.00  max.norm(u) =  8.753188e-01  nst = 191 
+At t = 1.50  max.norm(u) =  2.494926e-01  nst = 265 
+At t = 2.00  max.norm(u) =  7.109707e-02  nst = 339 
+At t = 2.50  max.norm(u) =  2.026223e-02  nst = 418 
+At t = 3.00  max.norm(u) =  5.777332e-03  nst = 486 
+At t = 3.50  max.norm(u) =  1.650483e-03  nst = 563 
+At t = 4.00  max.norm(u) =  4.754357e-04  nst = 646 
+At t = 4.50  max.norm(u) =  1.374222e-04  nst = 715 
+At t = 5.00  max.norm(u) =  3.937469e-05  nst = 795 
+
+Final Statistics: 
+
+nst = 795     nfe  = 1465    nni = 1461    ncfn = 146     netf = 5
+ 
diff --git a/examples/cvode/parallel/cvDiurnal_kry_bbd_p.c b/examples/cvode/parallel/cvDiurnal_kry_bbd_p.c
new file mode 100644
index 0000000..e5a00b6
--- /dev/null
+++ b/examples/cvode/parallel/cvDiurnal_kry_bbd_p.c
@@ -0,0 +1,891 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): S. D. Cohen, A. C. Hindmarsh, M. R. Wittman, and
+ *                Radu Serban  @ LLNL
+ * --------------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * mesh, with simple polynomial initial profiles.
+ *
+ * The problem is solved by CVODE on NPE processors, treated
+ * as a rectangular process grid of size NPEX by NPEY, with
+ * NPE = NPEX*NPEY. Each processor contains a subgrid of size MXSUB
+ * by MYSUB of the (x,y) mesh. Thus the actual mesh sizes are
+ * MX = MXSUB*NPEX and MY = MYSUB*NPEY, and the ODE system size is
+ * neq = 2*MX*MY.
+ *
+ * The solution is done with the BDF/GMRES method (i.e. using the
+ * CVSPGMR linear solver) and a block-diagonal matrix with banded
+ * blocks as a preconditioner, using the CVBBDPRE module.
+ * Each block is generated using difference quotients, with
+ * half-bandwidths mudq = mldq = 2*MXSUB, but the retained banded
+ * blocks have half-bandwidths mukeep = mlkeep = 2.
+ * A copy of the approximate Jacobian is saved and conditionally
+ * reused within the preconditioner routine.
+ *
+ * The problem is solved twice -- with left and right preconditioning.
+ *
+ * Performance data and sampled solution values are printed at
+ * selected output times, and all performance counters are printed
+ * on completion.
+ *
+ * This version uses MPI for user routines.
+ * Execute with number of processors = NPEX*NPEY (see constants below).
+ * --------------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvode/cvode.h>              /* prototypes for CVODE fcts. */
+#include <cvode/cvode_spgmr.h>        /* prototypes and constants for CVSPGMR */
+#include <cvode/cvode_bbdpre.h>       /* prototypes for CVBBDPRE module */
+#include <nvector/nvector_parallel.h> /* def. of N_Vector, macro NV_DATA_P */
+#include <sundials/sundials_types.h>  /* definitions of realtype, booleantype */
+#include <sundials/sundials_math.h>   /* definition of macros SUNSQR and EXP */
+
+#include <mpi.h>                      /* MPI constants and types */
+
+
+/* Problem Constants */
+
+#define ZERO         RCONST(0.0)
+
+#define NVARS        2                 /* number of species         */
+#define KH           RCONST(4.0e-6)    /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)     /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)    /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)  /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           ZERO                /* initial time */
+#define NOUT         12                  /* number of output times */
+#define TWOHR        RCONST(7200.0)      /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)      /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898) /* pi */ 
+
+#define XMIN         ZERO                /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)
+#define YMIN         RCONST(30.0)        /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+
+#define NPEX         2              /* no. PEs in x direction of PE array */
+#define NPEY         2              /* no. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* no. x points per subgrid */
+#define MYSUB        5              /* no. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+/* CVodeInit Constants */
+
+#define RTOL    RCONST(1.0e-5)    /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)     /* value of C1 or C2 at which tolerances */
+                                  /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)      /* scalar absolute tolerance */
+
+/* Type : UserData 
+   contains problem constants, extended dependent variable array,
+   grid constants, processor indices, MPI communicator */
+
+typedef struct {
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+  realtype uext[NVARS*(MXSUB+2)*(MYSUB+2)];
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmxsub2, Nlocal;
+  MPI_Comm comm;
+} *UserData;
+
+/* Prototypes of private helper functions */
+
+static void InitUserData(int my_pe, long int local_N, MPI_Comm comm,
+                         UserData data);
+static void SetInitialProfiles(N_Vector u, UserData data);
+static void PrintIntro(int npes, long int mudq, long int mldq,
+		       long int mukeep, long int mlkeep);
+static void PrintOutput(void *cvode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t);
+static void PrintFinalStats(void *cvode_mem);
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype uarray[]);
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[]);
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[]);
+
+static void fucomm(realtype t, N_Vector u, void *user_data);
+
+/* Prototype of function called by the solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/* Prototype of functions called by the CVBBDPRE module */
+
+static int flocal(long int Nlocal, realtype t, N_Vector u,
+                  N_Vector udot, void *user_data);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/***************************** Main Program ******************************/
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+  void *cvode_mem;
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  int iout, my_pe, npes, flag, jpre;
+  long int neq, local_N, mudq, mldq, mukeep, mlkeep;
+  MPI_Comm comm;
+
+  data = NULL;
+  cvode_mem = NULL;
+  u = NULL;
+
+  /* Set problem size neq */
+  neq = NVARS*MX*MY;
+
+  /* Get processor number and total number of pe's */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  if (npes != NPEX*NPEY) {
+    if (my_pe == 0)
+      fprintf(stderr, "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n\n",
+              npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+
+  /* Set local length */
+  local_N = NVARS*MXSUB*MYSUB;
+
+  /* Allocate and load user data block */
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  InitUserData(my_pe, local_N, comm, data);
+
+  /* Allocate and initialize u, and set tolerances */ 
+  u = N_VNew_Parallel(comm, local_N, neq);
+  if(check_flag((void *)u, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  SetInitialProfiles(u, data);
+  abstol = ATOL;
+  reltol = RTOL;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1, my_pe)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1, my_pe)) return(1);
+
+  /* Call CVSpgmr to specify the linear solver CVSPGMR with left
+     preconditioning and the default maximum Krylov dimension maxl  */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVBBDSpgmr", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Initialize BBD preconditioner */
+  mudq = mldq = NVARS*MXSUB;
+  mukeep = mlkeep = NVARS;
+  flag = CVBBDPrecInit(cvode_mem, local_N, mudq, mldq, 
+                       mukeep, mlkeep, ZERO, flocal, NULL);
+  if(check_flag(&flag, "CVBBDPrecAlloc", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Print heading */
+  if (my_pe == 0) PrintIntro(npes, mudq, mldq, mukeep, mlkeep);
+
+  /* Loop over jpre (= PREC_LEFT, PREC_RIGHT), and solve the problem */
+  for (jpre = PREC_LEFT; jpre <= PREC_RIGHT; jpre++) {
+
+  /* On second run, re-initialize u, the integrator, CVBBDPRE, and CVSPGMR */
+
+  if (jpre == PREC_RIGHT) {
+
+    SetInitialProfiles(u, data);
+
+    flag = CVodeReInit(cvode_mem, T0, u);
+    if(check_flag(&flag, "CVodeReInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVBBDPrecReInit(cvode_mem, mudq, mldq, ZERO);
+    if(check_flag(&flag, "CVBBDPrecReInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVSpilsSetPrecType(cvode_mem, PREC_RIGHT);
+    check_flag(&flag, "CVSpilsSetPrecType", 1, my_pe);
+
+    if (my_pe == 0) {
+      printf("\n\n-------------------------------------------------------");
+      printf("------------\n");
+    }
+
+  }
+
+
+  if (my_pe == 0) {
+    printf("\n\nPreconditioner type is:  jpre = %s\n\n",
+	   (jpre == PREC_LEFT) ? "PREC_LEFT" : "PREC_RIGHT");
+  }
+
+  /* In loop over output points, call CVode, print results, test for error */
+
+  for (iout = 1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1, my_pe)) break;
+    PrintOutput(cvode_mem, my_pe, comm, u, t);
+  }
+
+  /* Print final statistics */
+
+  if (my_pe == 0) PrintFinalStats(cvode_mem);
+
+  } /* End of jpre loop */
+
+  /* Free memory */
+  N_VDestroy_Parallel(u);
+  free(data);
+  CVodeFree(&cvode_mem);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*********************** Private Helper Functions ************************/
+
+/* Load constants in data */
+
+static void InitUserData(int my_pe, long int local_N, MPI_Comm comm,
+                         UserData data)
+{
+  int isubx, isuby;
+
+  /* Set problem constants */
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/((realtype)(MX-1));
+  data->dy = (YMAX-YMIN)/((realtype)(MY-1));
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(RCONST(2.0)*data->dx);
+  data->vdco = (RCONST(1.0)/SUNSQR(data->dy))*KV0;
+
+  /* Set machine-related constants */
+  data->comm = comm;
+  data->my_pe = my_pe;
+  data->Nlocal = local_N;
+  /* isubx and isuby are the PE grid indices corresponding to my_pe */
+  isuby = my_pe/NPEX;
+  isubx = my_pe - isuby*NPEX;
+  data->isubx = isubx;
+  data->isuby = isuby;
+  /* Set the sizes of a boundary x-line in u and uext */
+  data->nvmxsub = NVARS*MXSUB;
+  data->nvmxsub2 = NVARS*(MXSUB+2);
+}
+
+/* Set initial conditions in u */
+
+static void SetInitialProfiles(N_Vector u, UserData data)
+{
+  int isubx, isuby;
+  int lx, ly, jx, jy;
+  long int offset;
+  realtype dx, dy, x, y, cx, cy, xmid, ymid;
+  realtype *uarray;
+
+  /* Set pointer to data array in vector u */
+
+  uarray = N_VGetArrayPointer_Parallel(u);
+
+  /* Get mesh spacings, and subgrid indices for this PE */
+
+  dx = data->dx;         dy = data->dy;
+  isubx = data->isubx;   isuby = data->isuby;
+
+  /* Load initial profiles of c1 and c2 into local u vector.
+  Here lx and ly are local mesh point indices on the local subgrid,
+  and jx and jy are the global mesh point indices. */
+
+  offset = 0;
+  xmid = RCONST(0.5)*(XMIN + XMAX);
+  ymid = RCONST(0.5)*(YMIN + YMAX);
+  for (ly = 0; ly < MYSUB; ly++) {
+    jy = ly + isuby*MYSUB;
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - ymid));
+    cy = RCONST(1.0) - cy + RCONST(0.5)*SUNSQR(cy);
+    for (lx = 0; lx < MXSUB; lx++) {
+      jx = lx + isubx*MXSUB;
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - xmid));
+      cx = RCONST(1.0) - cx + RCONST(0.5)*SUNSQR(cx);
+      uarray[offset  ] = C1_SCALE*cx*cy; 
+      uarray[offset+1] = C2_SCALE*cx*cy;
+      offset = offset + 2;
+    }
+  }
+}
+
+/* Print problem introduction */
+
+static void PrintIntro(int npes, long int mudq, long int mldq,
+		       long int mukeep, long int mlkeep)
+{
+  printf("\n2-species diurnal advection-diffusion problem\n");
+  printf("  %d by %d mesh on %d processors\n", MX, MY, npes);
+  printf("  Using CVBBDPRE preconditioner module\n");
+  printf("    Difference-quotient half-bandwidths are");
+  printf(" mudq = %ld,  mldq = %ld\n", mudq, mldq);
+  printf("    Retained band block half-bandwidths are");
+  printf(" mukeep = %ld,  mlkeep = %ld", mukeep, mlkeep);
+
+  return;
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+
+static void PrintOutput(void *cvode_mem, int my_pe, MPI_Comm comm, 
+                        N_Vector u, realtype t)
+{
+  int qu, flag, npelast;
+  long int i0, i1, nst;
+  realtype hu, *uarray, tempu[2];
+  MPI_Status status;
+
+  npelast = NPEX*NPEY - 1;
+  uarray = N_VGetArrayPointer_Parallel(u);
+
+  /* Send c1,c2 at top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NVARS*MXSUB*MYSUB - 2;
+    i1 = i0 + 1;
+    if (npelast != 0)
+      MPI_Send(&uarray[i0], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else {
+      tempu[0] = uarray[i0];
+      tempu[1] = uarray[i1];
+    }
+  }
+
+  /* On PE 0, receive c1,c2 at top right, then print performance data
+     and sampled solution values */ 
+  if (my_pe == 0) {
+    if (npelast != 0)
+      MPI_Recv(&tempu[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1, my_pe);
+    flag = CVodeGetLastOrder(cvode_mem, &qu);
+    check_flag(&flag, "CVodeGetLastOrder", 1, my_pe);
+    flag = CVodeGetLastStep(cvode_mem, &hu);
+    check_flag(&flag, "CVodeGetLastStep", 1, my_pe);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("t = %.2Le   no. steps = %ld   order = %d   stepsize = %.2Le\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3Le %12.3Le \n", uarray[0], uarray[1]);
+    printf("At top right:    c1, c2 = %12.3Le %12.3Le \n\n", tempu[0], tempu[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", uarray[0], uarray[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#else
+    printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", uarray[0], uarray[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#endif
+  }
+}
+
+/* Print final statistics contained in iopt */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int lenrwBBDP, leniwBBDP, ngevalsBBDP;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1, 0);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, 0);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1, 0);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1, 0);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1, 0);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1, 0);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1, 0);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1, 0);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1, 0);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1, 0);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1, 0);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1, 0);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwls = %5ld     leniwls = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld\n"                  , nst);
+  printf("nfe     = %5ld     nfels   = %5ld\n"  , nfe, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n"  , nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n"  , nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n"  , npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl);
+
+  flag = CVBBDPrecGetWorkSpace(cvode_mem, &lenrwBBDP, &leniwBBDP);
+  check_flag(&flag, "CVBBDPrecGetWorkSpace", 1, 0);
+  flag = CVBBDPrecGetNumGfnEvals(cvode_mem, &ngevalsBBDP);
+  check_flag(&flag, "CVBBDPrecGetNumGfnEvals", 1, 0);
+  printf("In CVBBDPRE: real/integer local work space sizes = %ld, %ld\n",
+	 lenrwBBDP, leniwBBDP);  
+  printf("             no. flocal evals. = %ld\n",ngevalsBBDP);
+}
+ 
+/* Routine to send boundary data to neighboring PEs */
+
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype uarray[])
+{
+  int i, ly;
+  long int offsetu, offsetbuf;
+  realtype bufleft[NVARS*MYSUB], bufright[NVARS*MYSUB];
+
+  /* If isuby > 0, send data from bottom x-line of u */
+
+  if (isuby != 0)
+    MPI_Send(&uarray[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If isuby < NPEY-1, send data from top x-line of u */
+
+  if (isuby != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&uarray[offsetu], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If isubx > 0, send data from left y-line of u (via bufleft) */
+
+  if (isubx != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = ly*dsizex;
+      for (i = 0; i < NVARS; i++)
+        bufleft[offsetbuf+i] = uarray[offsetu+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If isubx < NPEX-1, send data from right y-line of u (via bufright) */
+
+  if (isubx != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = offsetbuf*MXSUB + (MXSUB-1)*NVARS;
+      for (i = 0; i < NVARS; i++)
+        bufright[offsetbuf+i] = uarray[offsetu+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+
+}
+ 
+/* Routine to start receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[])
+{
+  long int offsetue;
+  /* Have bufleft and bufright use the same buffer */
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Irecv(&uext[NVARS], dsizex, PVEC_REAL_MPI_TYPE,
+    					 my_pe-NPEX, 0, comm, &request[0]);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1) {
+    offsetue = NVARS*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+                                         my_pe+NPEX, 0, comm, &request[1]);
+  }
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe-1, 0, comm, &request[2]);
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe+1, 0, comm, &request[3]);
+  }
+
+}
+
+/* Routine to finish receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[])
+{
+  int i, ly;
+  long int dsizex2, offsetue, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+  MPI_Status status;
+
+  dsizex2 = dsizex + 2*NVARS;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Wait(&request[0],&status);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+1)*dsizex2;
+      for (i = 0; i < NVARS; i++)
+        uext[offsetue+i] = bufleft[offsetbuf+i];
+    }
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+2)*dsizex2 - NVARS;
+      for (i = 0; i < NVARS; i++)
+	uext[offsetue+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/* fucomm routine.  This routine performs all inter-processor
+   communication of data in u needed to calculate f.         */
+
+static void fucomm(realtype t, N_Vector u, void *user_data)
+{
+  UserData data;
+  realtype *uarray, *uext, buffer[2*NVARS*MYSUB];
+  MPI_Comm comm;
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmysub;
+  MPI_Request request[4];
+
+  data = (UserData) user_data;
+  uarray = N_VGetArrayPointer_Parallel(u);
+
+  /* Get comm, my_pe, subgrid indices, data sizes, extended array uext */
+
+  comm = data->comm;  my_pe = data->my_pe;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+  nvmysub = NVARS*MYSUB;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs */
+
+  BRecvPost(comm, request, my_pe, isubx, isuby, nvmxsub, nvmysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs */
+
+  BSend(comm, my_pe, isubx, isuby, nvmxsub, nvmysub, uarray);
+
+  /* Finish receiving boundary data from neighboring PEs */
+
+  BRecvWait(request, isubx, isuby, nvmxsub, uext, buffer);
+}
+
+/***************** Function called by the solver **************************/
+
+/* f routine.  Evaluate f(t,y).  First call fucomm to do communication of 
+   subgrid boundary data into uext.  Then calculate f by a call to flocal. */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  UserData data;
+
+  data = (UserData) user_data;
+
+  /* Call fucomm to do inter-processor communication */
+
+  fucomm (t, u, user_data);
+
+  /* Call flocal to calculate all right-hand sides */
+
+  flocal (data->Nlocal, t, u, udot, user_data);
+
+  return(0);
+}
+
+/***************** Functions called by the CVBBDPRE module ****************/
+
+/* flocal routine.  Compute f(t,y).  This routine assumes that all
+   inter-processor communication of data needed to calculate f has already
+   been done, and this data is in the work array uext.                    */
+
+static int flocal(long int Nlocal, realtype t, N_Vector u,
+                  N_Vector udot, void *user_data)
+{
+  realtype *uext;
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  int i, lx, ly, jx, jy;
+  int isubx, isuby;
+  long int nvmxsub, nvmxsub2, offsetu, offsetue;
+  UserData data;
+  realtype *uarray, *duarray;
+
+  uarray = N_VGetArrayPointer_Parallel(u);
+  duarray = N_VGetArrayPointer_Parallel(udot);
+
+  /* Get subgrid indices, array sizes, extended work array uext */
+
+  data = (UserData) user_data;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub; nvmxsub2 = data->nvmxsub2;
+  uext = data->uext;
+
+  /* Copy local segment of u vector into the working extended array uext */
+
+  offsetu = 0;
+  offsetue = nvmxsub2 + NVARS;
+  for (ly = 0; ly < MYSUB; ly++) {
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = uarray[offsetu+i];
+    offsetu = offsetu + nvmxsub;
+    offsetue = offsetue + nvmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+  a boundary PE, copy data from the first interior mesh line of u to uext */
+
+  /* If isuby = 0, copy x-line 2 of u to uext */
+  if (isuby == 0) {
+    for (i = 0; i < nvmxsub; i++) uext[NVARS+i] = uarray[nvmxsub+i];
+  }
+
+  /* If isuby = NPEY-1, copy x-line MYSUB-1 of u to uext */
+  if (isuby == NPEY-1) {
+    offsetu = (MYSUB-2)*nvmxsub;
+    offsetue = (MYSUB+1)*nvmxsub2 + NVARS;
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = uarray[offsetu+i];
+  }
+
+  /* If isubx = 0, copy y-line 2 of u to uext */
+  if (isubx == 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*nvmxsub + NVARS;
+      offsetue = (ly+1)*nvmxsub2;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = uarray[offsetu+i];
+    }
+  }
+
+  /* If isubx = NPEX-1, copy y-line MXSUB-1 of u to uext */
+  if (isubx == NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = (ly+1)*nvmxsub - 2*NVARS;
+      offsetue = (ly+2)*nvmxsub2 - NVARS;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = uarray[offsetu+i];
+    }
+  }
+
+  /* Make local copies of problem variables, for efficiency */
+
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco = data->hdco;
+  horaco = data->haco;
+
+  /* Set diurnal rate coefficients as functions of t, and save q4 in 
+  data block for use by preconditioner evaluation routine            */
+
+  s = sin((data->om)*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    q4coef = SUNRexp(-A4/s);
+  } else {
+    q3 = ZERO;
+    q4coef = ZERO;
+  }
+  data->q4 = q4coef;
+
+
+  /* Loop over all grid points in local subgrid */
+
+  for (ly = 0; ly < MYSUB; ly++) {
+
+    jy = ly + isuby*MYSUB;
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    for (lx = 0; lx < MXSUB; lx++) {
+
+      jx = lx + isubx*MXSUB;
+
+      /* Extract c1 and c2, and set kinetic rate terms */
+
+      offsetue = (lx+1)*NVARS + (ly+1)*nvmxsub2;
+      c1 = uext[offsetue];
+      c2 = uext[offsetue+1];
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + 2.0*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms */
+
+      c1dn = uext[offsetue-nvmxsub2];
+      c2dn = uext[offsetue-nvmxsub2+1];
+      c1up = uext[offsetue+nvmxsub2];
+      c2up = uext[offsetue+nvmxsub2+1];
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms */
+
+      c1lt = uext[offsetue-2];
+      c2lt = uext[offsetue-1];
+      c1rt = uext[offsetue+2];
+      c2rt = uext[offsetue+3];
+      hord1 = hordco*(c1rt - RCONST(2.0)*c1 + c1lt);
+      hord2 = hordco*(c2rt - RCONST(2.0)*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into duarray */
+
+      offsetu = lx*NVARS + ly*nvmxsub;
+      duarray[offsetu]   = vertd1 + hord1 + horad1 + rkin1; 
+      duarray[offsetu+1] = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+  return(0);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+              id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/parallel/cvDiurnal_kry_bbd_p.out b/examples/cvode/parallel/cvDiurnal_kry_bbd_p.out
new file mode 100644
index 0000000..9a72bbb
--- /dev/null
+++ b/examples/cvode/parallel/cvDiurnal_kry_bbd_p.out
@@ -0,0 +1,140 @@
+
+2-species diurnal advection-diffusion problem
+  10 by 10 mesh on 4 processors
+  Using CVBBDPRE preconditioner module
+    Difference-quotient half-bandwidths are mudq = 10,  mldq = 10
+    Retained band block half-bandwidths are mukeep = 2,  mlkeep = 2
+
+Preconditioner type is:  jpre = PREC_LEFT
+
+t = 7.20e+03   no. steps = 190   order = 5   stepsize = 1.61e+02
+At bottom left:  c1, c2 =    1.047e+04    2.527e+11 
+At top right:    c1, c2 =    1.119e+04    2.700e+11 
+
+t = 1.44e+04   no. steps = 221   order = 5   stepsize = 3.85e+02
+At bottom left:  c1, c2 =    6.659e+06    2.582e+11 
+At top right:    c1, c2 =    7.301e+06    2.833e+11 
+
+t = 2.16e+04   no. steps = 247   order = 5   stepsize = 3.00e+02
+At bottom left:  c1, c2 =    2.665e+07    2.993e+11 
+At top right:    c1, c2 =    2.931e+07    3.313e+11 
+
+t = 2.88e+04   no. steps = 272   order = 4   stepsize = 4.05e+02
+At bottom left:  c1, c2 =    8.702e+06    3.380e+11 
+At top right:    c1, c2 =    9.650e+06    3.751e+11 
+
+t = 3.60e+04   no. steps = 309   order = 4   stepsize = 7.53e+01
+At bottom left:  c1, c2 =    1.404e+04    3.387e+11 
+At top right:    c1, c2 =    1.561e+04    3.765e+11 
+
+t = 4.32e+04   no. steps = 377   order = 4   stepsize = 4.02e+02
+At bottom left:  c1, c2 =    1.908e-07    3.382e+11 
+At top right:    c1, c2 =    2.345e-07    3.804e+11 
+
+t = 5.04e+04   no. steps = 392   order = 5   stepsize = 3.67e+02
+At bottom left:  c1, c2 =   -6.408e-10    3.358e+11 
+At top right:    c1, c2 =   -6.654e-10    3.864e+11 
+
+t = 5.76e+04   no. steps = 403   order = 5   stepsize = 4.72e+02
+At bottom left:  c1, c2 =    2.017e-08    3.320e+11 
+At top right:    c1, c2 =    3.353e-08    3.909e+11 
+
+t = 6.48e+04   no. steps = 415   order = 5   stepsize = 7.47e+02
+At bottom left:  c1, c2 =   -2.502e-10    3.313e+11 
+At top right:    c1, c2 =    2.005e-10    3.963e+11 
+
+t = 7.20e+04   no. steps = 424   order = 5   stepsize = 7.47e+02
+At bottom left:  c1, c2 =    4.217e-12    3.330e+11 
+At top right:    c1, c2 =   -2.693e-12    4.039e+11 
+
+t = 7.92e+04   no. steps = 434   order = 5   stepsize = 7.47e+02
+At bottom left:  c1, c2 =    2.779e-12    3.334e+11 
+At top right:    c1, c2 =   -1.865e-12    4.120e+11 
+
+t = 8.64e+04   no. steps = 444   order = 5   stepsize = 7.47e+02
+At bottom left:  c1, c2 =    2.331e-13    3.352e+11 
+At top right:    c1, c2 =   -1.599e-13    4.163e+11 
+
+
+Final Statistics: 
+
+lenrw   =  2089     leniw   =   120
+lenrwls =  2046     leniwls =    80
+nst     =   444
+nfe     =   581     nfels   =   526
+nni     =   577     nli     =   526
+nsetups =    75     netf    =    28
+npe     =     8     nps     =  1057
+ncfn    =     0     ncfl    =     0
+
+In CVBBDPRE: real/integer local work space sizes = 600, 50
+             no. flocal evals. = 176
+
+
+-------------------------------------------------------------------
+
+
+Preconditioner type is:  jpre = PREC_RIGHT
+
+t = 7.20e+03   no. steps = 191   order = 5   stepsize = 1.22e+02
+At bottom left:  c1, c2 =    1.047e+04    2.527e+11 
+At top right:    c1, c2 =    1.119e+04    2.700e+11 
+
+t = 1.44e+04   no. steps = 223   order = 5   stepsize = 2.79e+02
+At bottom left:  c1, c2 =    6.659e+06    2.582e+11 
+At top right:    c1, c2 =    7.301e+06    2.833e+11 
+
+t = 2.16e+04   no. steps = 249   order = 5   stepsize = 4.31e+02
+At bottom left:  c1, c2 =    2.665e+07    2.993e+11 
+At top right:    c1, c2 =    2.931e+07    3.313e+11 
+
+t = 2.88e+04   no. steps = 314   order = 3   stepsize = 9.38e+01
+At bottom left:  c1, c2 =    8.702e+06    3.380e+11 
+At top right:    c1, c2 =    9.650e+06    3.751e+11 
+
+t = 3.60e+04   no. steps = 350   order = 5   stepsize = 9.78e+01
+At bottom left:  c1, c2 =    1.404e+04    3.387e+11 
+At top right:    c1, c2 =    1.561e+04    3.765e+11 
+
+t = 4.32e+04   no. steps = 403   order = 4   stepsize = 3.87e+02
+At bottom left:  c1, c2 =    1.504e-09    3.382e+11 
+At top right:    c1, c2 =    1.683e-09    3.804e+11 
+
+t = 5.04e+04   no. steps = 416   order = 5   stepsize = 5.91e+02
+At bottom left:  c1, c2 =   -1.137e-11    3.358e+11 
+At top right:    c1, c2 =   -1.439e-11    3.864e+11 
+
+t = 5.76e+04   no. steps = 432   order = 5   stepsize = 1.73e+02
+At bottom left:  c1, c2 =    1.293e-09    3.320e+11 
+At top right:    c1, c2 =    2.448e-10    3.909e+11 
+
+t = 6.48e+04   no. steps = 447   order = 5   stepsize = 6.38e+02
+At bottom left:  c1, c2 =    7.963e-13    3.313e+11 
+At top right:    c1, c2 =   -2.943e-13    3.963e+11 
+
+t = 7.20e+04   no. steps = 459   order = 5   stepsize = 6.38e+02
+At bottom left:  c1, c2 =   -2.414e-12    3.330e+11 
+At top right:    c1, c2 =    2.797e-13    4.039e+11 
+
+t = 7.92e+04   no. steps = 470   order = 5   stepsize = 6.38e+02
+At bottom left:  c1, c2 =   -1.059e-13    3.334e+11 
+At top right:    c1, c2 =    3.557e-14    4.120e+11 
+
+t = 8.64e+04   no. steps = 481   order = 5   stepsize = 6.38e+02
+At bottom left:  c1, c2 =    6.045e-15    3.352e+11 
+At top right:    c1, c2 =   -2.016e-15    4.163e+11 
+
+
+Final Statistics: 
+
+lenrw   =  2089     leniw   =   120
+lenrwls =  2046     leniwls =    80
+nst     =   481
+nfe     =   622     nfels   =   769
+nni     =   618     nli     =   769
+nsetups =   104     netf    =    33
+npe     =     9     nps     =  1281
+ncfn    =     0     ncfl    =     0
+
+In CVBBDPRE: real/integer local work space sizes = 600, 50
+             no. flocal evals. = 198
diff --git a/examples/cvode/parallel/cvDiurnal_kry_p.c b/examples/cvode/parallel/cvDiurnal_kry_p.c
new file mode 100644
index 0000000..0211ac8
--- /dev/null
+++ b/examples/cvode/parallel/cvDiurnal_kry_p.c
@@ -0,0 +1,975 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): S. D. Cohen, A. C. Hindmarsh, M. R. Wittman, and
+ *                Radu Serban  @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * mesh, with simple polynomial initial profiles.
+ *
+ * The problem is solved by CVODE on NPE processors, treated
+ * as a rectangular process grid of size NPEX by NPEY, with
+ * NPE = NPEX*NPEY. Each processor contains a subgrid of size MXSUB
+ * by MYSUB of the (x,y) mesh.  Thus the actual mesh sizes are
+ * MX = MXSUB*NPEX and MY = MYSUB*NPEY, and the ODE system size is
+ * neq = 2*MX*MY.
+ *
+ * The solution is done with the BDF/GMRES method (i.e. using the
+ * CVSPGMR linear solver) and the block-diagonal part of the
+ * Newton matrix as a left preconditioner. A copy of the
+ * block-diagonal part of the Jacobian is saved and conditionally
+ * reused within the preconditioner routine.
+ *
+ * Performance data and sampled solution values are printed at
+ * selected output times, and all performance counters are printed
+ * on completion.
+ *
+ * This version uses MPI for user routines.
+ * 
+ * Execution: mpirun -np N cvDiurnal_kry_p   with N = NPEX*NPEY
+ * (see constants below).
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvode/cvode.h>               /* prototypes for CVODE fcts. */
+#include <cvode/cvode_spgmr.h>         /* prototypes & constants for CVSPGMR  */
+#include <nvector/nvector_parallel.h>  /* def. of N_Vector, macro NV_DATA_P  */
+#include <sundials/sundials_dense.h>   /* prototypes for small dense fcts. */
+#include <sundials/sundials_types.h>   /* definitions of realtype, booleantype */
+#include <sundials/sundials_math.h>    /* definition of macros SUNSQR and EXP */
+
+#include <mpi.h>                       /* MPI constants and types */
+
+/* Problem Constants */
+
+#define NVARS        2                    /* number of species         */
+#define KH           RCONST(4.0e-6)       /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)        /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)       /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)     /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           RCONST(0.0)          /* initial time */
+#define NOUT         12                   /* number of output times */
+#define TWOHR        RCONST(7200.0)       /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)       /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898)  /* pi */ 
+
+#define XMIN         RCONST(0.0)          /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define YMIN         RCONST(30.0)         /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+
+#define NPEX         2              /* no. PEs in x direction of PE array */
+#define NPEY         2              /* no. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* no. x points per subgrid */
+#define MYSUB        5              /* no. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+/* CVodeInit Constants */
+
+#define RTOL    RCONST(1.0e-5)    /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)     /* value of C1 or C2 at which tolerances */
+                                  /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)      /* scalar absolute tolerance */
+
+
+/* User-defined matrix accessor macro: IJth */
+
+/* IJth is defined in order to write code which indexes into dense
+   matrices with a (row,column) pair, where 1 <= row,column <= NVARS.   
+
+   IJth(a,i,j) references the (i,j)th entry of the small matrix realtype **a,
+   where 1 <= i,j <= NVARS. The small matrix routines in sundials_dense.h
+   work with matrices stored by column in a 2-dimensional array. In C,
+   arrays are indexed starting at 0, not 1. */
+
+#define IJth(a,i,j) (a[j-1][i-1])
+
+/* Type : UserData 
+   contains problem constants, preconditioner blocks, pivot arrays, 
+   grid constants, and processor indices, as well as data needed
+   for the preconditiner */
+
+typedef struct {
+
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+  realtype uext[NVARS*(MXSUB+2)*(MYSUB+2)];
+  int my_pe, isubx, isuby;
+  int nvmxsub, nvmxsub2;
+  MPI_Comm comm;
+
+  /* For preconditioner */
+  realtype **P[MXSUB][MYSUB], **Jbd[MXSUB][MYSUB];
+  long int *pivot[MXSUB][MYSUB];
+
+} *UserData;
+
+/* Private Helper Functions */
+
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector u, UserData data);
+static void PrintOutput(void *cvode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t);
+static void PrintFinalStats(void *cvode_mem);
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype udata[]);
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[]);
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[]);
+static void ucomm(realtype t, N_Vector u, UserData data);
+static void fcalc(realtype t, realtype udata[], realtype dudata[],
+                  UserData data);
+
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data, 
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu, 
+                  N_Vector r, N_Vector z, 
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+
+/***************************** Main Program ******************************/
+
+int main(int argc, char *argv[])
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag, my_pe, npes;
+  long int neq, local_N;
+  MPI_Comm comm;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Set problem size neq */
+  neq = NVARS*MX*MY;
+
+  /* Get processor number and total number of pe's */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  if (npes != NPEX*NPEY) {
+    if (my_pe == 0)
+      fprintf(stderr, "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n\n",
+	      npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+
+  /* Set local length */
+  local_N = NVARS*MXSUB*MYSUB;
+
+  /* Allocate and load user data block; allocate preconditioner block */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  InitUserData(my_pe, comm, data);
+
+  /* Allocate u, and set initial values and tolerances */ 
+  u = N_VNew_Parallel(comm, local_N, neq);
+  if (check_flag((void *)u, "N_VNew", 0, my_pe)) MPI_Abort(comm, 1);
+  SetInitialProfiles(u, data);
+  abstol = ATOL; reltol = RTOL;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if (check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1, my_pe)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1, my_pe)) return(1);
+
+  /* Call CVSpgmr to specify the linear solver CVSPGMR 
+     with left preconditioning and the maximum Krylov dimension maxl */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if (check_flag(&flag, "CVSpgmr", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set preconditioner setup and solve routines Precond and PSolve, 
+     and the pointer to the user-defined block data */
+  flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+  if (check_flag(&flag, "CVSpilsSetPreconditioner", 1, my_pe)) MPI_Abort(comm, 1);
+
+  if (my_pe == 0)
+    printf("\n2-species diurnal advection-diffusion problem\n\n");
+
+  /* In loop over output points, call CVode, print results, test for error */
+  for (iout=1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if (check_flag(&flag, "CVode", 1, my_pe)) break;
+    PrintOutput(cvode_mem, my_pe, comm, u, t);
+  }
+
+  /* Print final statistics */  
+  if (my_pe == 0) PrintFinalStats(cvode_mem);
+
+  /* Free memory */
+  N_VDestroy_Parallel(u);
+  FreeUserData(data);
+  CVodeFree(&cvode_mem);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+
+/*********************** Private Helper Functions ************************/
+
+
+/* Load constants in data */
+
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data)
+{
+  int isubx, isuby;
+  int lx, ly;
+
+  /* Set problem constants */
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/((realtype)(MX-1));
+  data->dy = (YMAX-YMIN)/((realtype)(MY-1));
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(RCONST(2.0)*data->dx);
+  data->vdco = (RCONST(1.0)/SUNSQR(data->dy))*KV0;
+
+  /* Set machine-related constants */
+  data->comm = comm;
+  data->my_pe = my_pe;
+
+  /* isubx and isuby are the PE grid indices corresponding to my_pe */
+  isuby = my_pe/NPEX;
+  isubx = my_pe - isuby*NPEX;
+  data->isubx = isubx;
+  data->isuby = isuby;
+
+  /* Set the sizes of a boundary x-line in u and uext */
+  data->nvmxsub = NVARS*MXSUB;
+  data->nvmxsub2 = NVARS*(MXSUB+2);
+
+  /* Preconditioner-related fields */
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      (data->P)[lx][ly] = newDenseMat(NVARS, NVARS);
+      (data->Jbd)[lx][ly] = newDenseMat(NVARS, NVARS);
+      (data->pivot)[lx][ly] = newLintArray(NVARS);
+    }
+  }
+}
+
+/* Free user data memory */
+
+static void FreeUserData(UserData data)
+{
+  int lx, ly;
+
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      destroyMat((data->P)[lx][ly]);
+      destroyMat((data->Jbd)[lx][ly]);
+      destroyArray((data->pivot)[lx][ly]);
+    }
+  }
+
+  free(data);
+}
+
+/* Set initial conditions in u */
+
+static void SetInitialProfiles(N_Vector u, UserData data)
+{
+  int isubx, isuby, lx, ly, jx, jy;
+  long int offset;
+  realtype dx, dy, x, y, cx, cy, xmid, ymid;
+  realtype *udata;
+
+  /* Set pointer to data array in vector u */
+  udata = N_VGetArrayPointer_Parallel(u);
+
+  /* Get mesh spacings, and subgrid indices for this PE */
+  dx = data->dx;         dy = data->dy;
+  isubx = data->isubx;   isuby = data->isuby;
+
+  /* Load initial profiles of c1 and c2 into local u vector.
+  Here lx and ly are local mesh point indices on the local subgrid,
+  and jx and jy are the global mesh point indices. */
+  offset = 0;
+  xmid = RCONST(0.5)*(XMIN + XMAX);
+  ymid = RCONST(0.5)*(YMIN + YMAX);
+  for (ly = 0; ly < MYSUB; ly++) {
+    jy = ly + isuby*MYSUB;
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - ymid));
+    cy = RCONST(1.0) - cy + RCONST(0.5)*SUNSQR(cy);
+    for (lx = 0; lx < MXSUB; lx++) {
+      jx = lx + isubx*MXSUB;
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - xmid));
+      cx = RCONST(1.0) - cx + RCONST(0.5)*SUNSQR(cx);
+      udata[offset  ] = C1_SCALE*cx*cy; 
+      udata[offset+1] = C2_SCALE*cx*cy;
+      offset = offset + 2;
+    }
+  }
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+
+static void PrintOutput(void *cvode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t)
+{
+  int qu, flag;
+  realtype hu, *udata, tempu[2];
+  int npelast;
+  long int i0, i1, nst;
+  MPI_Status status;
+
+  npelast = NPEX*NPEY - 1;
+  udata = N_VGetArrayPointer_Parallel(u);
+
+  /* Send c1,c2 at top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NVARS*MXSUB*MYSUB - 2;
+    i1 = i0 + 1;
+    if (npelast != 0)
+      MPI_Send(&udata[i0], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else {
+      tempu[0] = udata[i0];
+      tempu[1] = udata[i1];
+    }
+  }
+
+  /* On PE 0, receive c1,c2 at top right, then print performance data
+     and sampled solution values */ 
+  if (my_pe == 0) {
+    if (npelast != 0)
+      MPI_Recv(&tempu[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1, my_pe);
+    flag = CVodeGetLastOrder(cvode_mem, &qu);
+    check_flag(&flag, "CVodeGetLastOrder", 1, my_pe);
+    flag = CVodeGetLastStep(cvode_mem, &hu);
+    check_flag(&flag, "CVodeGetLastStep", 1, my_pe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("t = %.2Le   no. steps = %ld   order = %d   stepsize = %.2Le\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3Le %12.3Le \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3Le %12.3Le \n\n", tempu[0], tempu[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#else
+    printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#endif
+  }
+}
+
+/* Print final statistics contained in iopt */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1, 0);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, 0);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1, 0);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1, 0);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1, 0);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1, 0);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1, 0);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1, 0);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1, 0);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1, 0);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1, 0);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1, 0);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwls = %5ld     leniwls = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld\n"                  , nst);
+  printf("nfe     = %5ld     nfels   = %5ld\n"  , nfe, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n"  , nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n"  , nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n"  , npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl); 
+}
+ 
+/* Routine to send boundary data to neighboring PEs */
+
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype udata[])
+{
+  int i, ly;
+  long int offsetu, offsetbuf;
+  realtype bufleft[NVARS*MYSUB], bufright[NVARS*MYSUB];
+
+  /* If isuby > 0, send data from bottom x-line of u */
+  if (isuby != 0)
+    MPI_Send(&udata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If isuby < NPEY-1, send data from top x-line of u */
+  if (isuby != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&udata[offsetu], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If isubx > 0, send data from left y-line of u (via bufleft) */
+  if (isubx != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = ly*dsizex;
+      for (i = 0; i < NVARS; i++)
+        bufleft[offsetbuf+i] = udata[offsetu+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If isubx < NPEX-1, send data from right y-line of u (via bufright) */
+  if (isubx != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = offsetbuf*MXSUB + (MXSUB-1)*NVARS;
+      for (i = 0; i < NVARS; i++)
+        bufright[offsetbuf+i] = udata[offsetu+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* Routine to start receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[])
+{
+  long int offsetue;
+  /* Have bufleft and bufright use the same buffer */
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Irecv(&uext[NVARS], dsizex, PVEC_REAL_MPI_TYPE,
+    					 my_pe-NPEX, 0, comm, &request[0]);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1) {
+    offsetue = NVARS*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+                                         my_pe+NPEX, 0, comm, &request[1]);
+  }
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe-1, 0, comm, &request[2]);
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe+1, 0, comm, &request[3]);
+  }
+}
+
+/* Routine to finish receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[])
+{
+  int i, ly;
+  long int dsizex2, offsetue, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+  MPI_Status status;
+
+  dsizex2 = dsizex + 2*NVARS;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Wait(&request[0],&status);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+1)*dsizex2;
+      for (i = 0; i < NVARS; i++)
+        uext[offsetue+i] = bufleft[offsetbuf+i];
+    }
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+2)*dsizex2 - NVARS;
+      for (i = 0; i < NVARS; i++)
+	uext[offsetue+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/* ucomm routine.  This routine performs all communication 
+   between processors of data needed to calculate f. */
+
+static void ucomm(realtype t, N_Vector u, UserData data)
+{
+
+  realtype *udata, *uext, buffer[2*NVARS*MYSUB];
+  MPI_Comm comm;
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmysub;
+  MPI_Request request[4];
+
+  udata = N_VGetArrayPointer_Parallel(u);
+
+  /* Get comm, my_pe, subgrid indices, data sizes, extended array uext */
+  comm = data->comm;  my_pe = data->my_pe;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+  nvmysub = NVARS*MYSUB;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs */
+  BRecvPost(comm, request, my_pe, isubx, isuby, nvmxsub, nvmysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs */
+  BSend(comm, my_pe, isubx, isuby, nvmxsub, nvmysub, udata);
+
+  /* Finish receiving boundary data from neighboring PEs */
+  BRecvWait(request, isubx, isuby, nvmxsub, uext, buffer);
+}
+
+/* fcalc routine. Compute f(t,y).  This routine assumes that communication 
+   between processors of data needed to calculate f has already been done,
+   and this data is in the work array uext. */
+
+static void fcalc(realtype t, realtype udata[],
+                  realtype dudata[], UserData data)
+{
+  realtype *uext;
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  int i, lx, ly, jx, jy;
+  int isubx, isuby;
+  long int nvmxsub, nvmxsub2, offsetu, offsetue;
+
+  /* Get subgrid indices, data sizes, extended work array uext */
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub; nvmxsub2 = data->nvmxsub2;
+  uext = data->uext;
+
+  /* Copy local segment of u vector into the working extended array uext */
+  offsetu = 0;
+  offsetue = nvmxsub2 + NVARS;
+  for (ly = 0; ly < MYSUB; ly++) {
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = udata[offsetu+i];
+    offsetu = offsetu + nvmxsub;
+    offsetue = offsetue + nvmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+  a boundary PE, copy data from the first interior mesh line of u to uext */
+
+  /* If isuby = 0, copy x-line 2 of u to uext */
+  if (isuby == 0) {
+    for (i = 0; i < nvmxsub; i++) uext[NVARS+i] = udata[nvmxsub+i];
+  }
+
+  /* If isuby = NPEY-1, copy x-line MYSUB-1 of u to uext */
+  if (isuby == NPEY-1) {
+    offsetu = (MYSUB-2)*nvmxsub;
+    offsetue = (MYSUB+1)*nvmxsub2 + NVARS;
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = udata[offsetu+i];
+  }
+
+  /* If isubx = 0, copy y-line 2 of u to uext */
+  if (isubx == 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*nvmxsub + NVARS;
+      offsetue = (ly+1)*nvmxsub2;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = udata[offsetu+i];
+    }
+  }
+
+  /* If isubx = NPEX-1, copy y-line MXSUB-1 of u to uext */
+  if (isubx == NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = (ly+1)*nvmxsub - 2*NVARS;
+      offsetue = (ly+2)*nvmxsub2 - NVARS;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = udata[offsetu+i];
+    }
+  }
+
+  /* Make local copies of problem variables, for efficiency */
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Set diurnal rate coefficients as functions of t, and save q4 in 
+  data block for use by preconditioner evaluation routine */
+  s = sin((data->om)*t);
+  if (s > RCONST(0.0)) {
+    q3 = SUNRexp(-A3/s);
+    q4coef = SUNRexp(-A4/s);
+  } else {
+    q3 = RCONST(0.0);
+    q4coef = RCONST(0.0);
+  }
+  data->q4 = q4coef;
+
+  /* Loop over all grid points in local subgrid */
+  for (ly = 0; ly < MYSUB; ly++) {
+
+    jy = ly + isuby*MYSUB;
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    for (lx = 0; lx < MXSUB; lx++) {
+
+      jx = lx + isubx*MXSUB;
+
+      /* Extract c1 and c2, and set kinetic rate terms */
+      offsetue = (lx+1)*NVARS + (ly+1)*nvmxsub2;
+      c1 = uext[offsetue];
+      c2 = uext[offsetue+1];
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + RCONST(2.0)*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms */
+      c1dn = uext[offsetue-nvmxsub2];
+      c2dn = uext[offsetue-nvmxsub2+1];
+      c1up = uext[offsetue+nvmxsub2];
+      c2up = uext[offsetue+nvmxsub2+1];
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms */
+      c1lt = uext[offsetue-2];
+      c2lt = uext[offsetue-1];
+      c1rt = uext[offsetue+2];
+      c2rt = uext[offsetue+3];
+      hord1 = hordco*(c1rt - RCONST(2.0)*c1 + c1lt);
+      hord2 = hordco*(c2rt - RCONST(2.0)*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into dudata */
+      offsetu = lx*NVARS + ly*nvmxsub;
+      dudata[offsetu]   = vertd1 + hord1 + horad1 + rkin1; 
+      dudata[offsetu+1] = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+}
+
+
+/***************** Functions Called by the Solver *************************/
+
+/* f routine.  Evaluate f(t,y).  First call ucomm to do communication of 
+   subgrid boundary data into uext.  Then calculate f by a call to fcalc. */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype *udata, *dudata;
+  UserData data;
+
+  udata = N_VGetArrayPointer_Parallel(u);
+  dudata = N_VGetArrayPointer_Parallel(udot);
+  data = (UserData) user_data;
+
+  /* Call ucomm to do inter-processor communication */
+  ucomm(t, u, data);
+
+  /* Call fcalc to calculate all right-hand sides */
+  fcalc(t, udata, dudata, data);
+
+  return(0);
+}
+
+/* Preconditioner setup routine. Generate and preprocess P. */
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data, 
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype c1, c2, cydn, cyup, diag, ydn, yup, q4coef, dely, verdco, hordco;
+  realtype **(*P)[MYSUB], **(*Jbd)[MYSUB];
+  int nvmxsub, ier, offset;
+  long int *(*pivot)[MYSUB];
+  int lx, ly, jx, jy, isubx, isuby;
+  realtype *udata, **a, **j;
+  UserData data;
+
+  /* Make local copies of pointers in user_data, pointer to u's data,
+     and PE index pair */
+  data = (UserData) user_data;
+  P = data->P;
+  Jbd = data->Jbd;
+  pivot = data->pivot;
+  udata = N_VGetArrayPointer_Parallel(u);
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+
+  if (jok) {
+
+  /* jok = TRUE: Copy Jbd to P */
+    for (ly = 0; ly < MYSUB; ly++)
+      for (lx = 0; lx < MXSUB; lx++)
+        denseCopy(Jbd[lx][ly], P[lx][ly], NVARS, NVARS);
+
+  *jcurPtr = FALSE;
+
+  }
+
+  else {
+
+  /* jok = FALSE: Generate Jbd from scratch and copy to P */
+
+  /* Make local copies of problem variables, for efficiency */
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+
+  /* Compute 2x2 diagonal Jacobian blocks (using q4 values 
+     computed on the last f call).  Load into P. */
+    for (ly = 0; ly < MYSUB; ly++) {
+      jy = ly + isuby*MYSUB;
+      ydn = YMIN + (jy - RCONST(0.5))*dely;
+      yup = ydn + dely;
+      cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+      cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+      diag = -(cydn + cyup + RCONST(2.0)*hordco);
+      for (lx = 0; lx < MXSUB; lx++) {
+        jx = lx + isubx*MXSUB;
+        offset = lx*NVARS + ly*nvmxsub;
+        c1 = udata[offset];
+        c2 = udata[offset+1];
+        j = Jbd[lx][ly];
+        a = P[lx][ly];
+        IJth(j,1,1) = (-Q1*C3 - Q2*c2) + diag;
+        IJth(j,1,2) = -Q2*c1 + q4coef;
+        IJth(j,2,1) = Q1*C3 - Q2*c2;
+        IJth(j,2,2) = (-Q2*c1 - q4coef) + diag;
+        denseCopy(j, a, NVARS, NVARS);
+      }
+    }
+
+  *jcurPtr = TRUE;
+
+  }
+
+  /* Scale by -gamma */
+    for (ly = 0; ly < MYSUB; ly++)
+      for (lx = 0; lx < MXSUB; lx++)
+        denseScale(-gamma, P[lx][ly], NVARS, NVARS);
+
+  /* Add identity matrix and do LU decompositions on blocks in place */
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      denseAddIdentity(P[lx][ly], NVARS);
+      ier = denseGETRF(P[lx][ly], NVARS, NVARS, pivot[lx][ly]);
+      if (ier != 0) return(1);
+    }
+  }
+
+  return(0);
+}
+
+/* Preconditioner solve routine */
+static int PSolve(realtype tn, N_Vector u, N_Vector fu, 
+                  N_Vector r, N_Vector z, 
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype **(*P)[MYSUB];
+  int nvmxsub;
+  long int *(*pivot)[MYSUB];
+  int lx, ly;
+  realtype *zdata, *v;
+  UserData data;
+
+  /* Extract the P and pivot arrays from user_data */
+  data = (UserData) user_data;
+  P = data->P;
+  pivot = data->pivot;
+
+  /* Solve the block-diagonal system Px = r using LU factors stored
+     in P and pivot data in pivot, and return the solution in z.
+     First copy vector r to z. */
+  N_VScale(RCONST(1.0), r, z);
+
+  nvmxsub = data->nvmxsub;
+  zdata = N_VGetArrayPointer_Parallel(z);
+
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      v = &(zdata[lx*NVARS + ly*nvmxsub]);
+      denseGETRS(P[lx][ly], NVARS, pivot[lx][ly], v);
+    }
+  }
+
+  return(0);
+}
+
+
+/*********************** Private Helper Function ************************/
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+	      id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/parallel/cvDiurnal_kry_p.out b/examples/cvode/parallel/cvDiurnal_kry_p.out
new file mode 100644
index 0000000..6705776
--- /dev/null
+++ b/examples/cvode/parallel/cvDiurnal_kry_p.out
@@ -0,0 +1,63 @@
+
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 219   order = 5   stepsize = 1.59e+02
+At bottom left:  c1, c2 =    1.047e+04    2.527e+11 
+At top right:    c1, c2 =    1.119e+04    2.700e+11 
+
+t = 1.44e+04   no. steps = 251   order = 5   stepsize = 3.77e+02
+At bottom left:  c1, c2 =    6.659e+06    2.582e+11 
+At top right:    c1, c2 =    7.301e+06    2.833e+11 
+
+t = 2.16e+04   no. steps = 277   order = 5   stepsize = 2.75e+02
+At bottom left:  c1, c2 =    2.665e+07    2.993e+11 
+At top right:    c1, c2 =    2.931e+07    3.313e+11 
+
+t = 2.88e+04   no. steps = 307   order = 4   stepsize = 1.98e+02
+At bottom left:  c1, c2 =    8.702e+06    3.380e+11 
+At top right:    c1, c2 =    9.650e+06    3.751e+11 
+
+t = 3.60e+04   no. steps = 335   order = 5   stepsize = 1.17e+02
+At bottom left:  c1, c2 =    1.404e+04    3.387e+11 
+At top right:    c1, c2 =    1.561e+04    3.765e+11 
+
+t = 4.32e+04   no. steps = 388   order = 4   stepsize = 4.48e+02
+At bottom left:  c1, c2 =   -5.732e-07    3.382e+11 
+At top right:    c1, c2 =   -6.367e-07    3.804e+11 
+
+t = 5.04e+04   no. steps = 406   order = 5   stepsize = 3.97e+02
+At bottom left:  c1, c2 =   -4.317e-09    3.358e+11 
+At top right:    c1, c2 =   -8.233e-09    3.864e+11 
+
+t = 5.76e+04   no. steps = 418   order = 5   stepsize = 4.74e+02
+At bottom left:  c1, c2 =   -2.576e-09    3.320e+11 
+At top right:    c1, c2 =   -1.259e-09    3.909e+11 
+
+t = 6.48e+04   no. steps = 428   order = 5   stepsize = 7.70e+02
+At bottom left:  c1, c2 =    3.451e-09    3.313e+11 
+At top right:    c1, c2 =    2.081e-09    3.963e+11 
+
+t = 7.20e+04   no. steps = 437   order = 5   stepsize = 7.70e+02
+At bottom left:  c1, c2 =    1.630e-11    3.330e+11 
+At top right:    c1, c2 =    1.843e-11    4.039e+11 
+
+t = 7.92e+04   no. steps = 447   order = 5   stepsize = 7.70e+02
+At bottom left:  c1, c2 =   -1.704e-11    3.334e+11 
+At top right:    c1, c2 =   -1.131e-11    4.120e+11 
+
+t = 8.64e+04   no. steps = 456   order = 5   stepsize = 7.70e+02
+At bottom left:  c1, c2 =    1.496e-12    3.352e+11 
+At top right:    c1, c2 =    8.085e-13    4.163e+11 
+
+
+Final Statistics: 
+
+lenrw   =  2089     leniw   =   120
+lenrwls =  2046     leniwls =    80
+nst     =   456
+nfe     =   586     nfels   =   619
+nni     =   582     nli     =   619
+nsetups =    73     netf    =    25
+npe     =     8     nps     =  1149
+ncfn    =     0     ncfl    =     0
+
diff --git a/examples/cvode/parhyp/CMakeLists.txt b/examples/cvode/parhyp/CMakeLists.txt
new file mode 100644
index 0000000..a07c51c
--- /dev/null
+++ b/examples/cvode/parhyp/CMakeLists.txt
@@ -0,0 +1,140 @@
+# ---------------------------------------------------------------
+# $Revision: 4341 $
+# $Date: 2015-02-03 10:53:47 -0800 (Tue, 03 Feb 2015) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for CVODE parhyp examples
+
+
+# Add variable CVODE_examples with the names of the parhyp CVODE examples
+# "name\;nodes\;tasks"
+SET(CVODE_examples
+  "cvAdvDiff_non_ph\;2\;2"
+#  "cvDiurnal_kry_bbd_ph\;2\;4"
+#  "cvHeat2D_ph\;2\;2"
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the C compiler to the MPICC script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_static)
+  SET(NVECP_LIB sundials_nvecparhyp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_shared)
+  SET(NVECP_LIB sundials_nvecparhyp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${CVODE_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+SET(HYPRE_LIBS ${HYPRE_LIBRARIES})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(HYPRE_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${HYPRE_LIBRARIES})
+ENDIF(HYPRE_FOUND)
+
+# Add the build and install targets for each CVODE example
+
+FOREACH(example_tuple ${CVODE_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPICC)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPICC)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/parhyp)
+    #INSTALL(FILES vis.c DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/parhyp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${CVODE_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/parhyp)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "CVODE")
+  SET(SOLVER_LIB "sundials_cvode")
+  FOREACH(example_tuple ${CVODE_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${CVODE_examples})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parhyp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/parhyp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/cvode/parhyp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/parhyp 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parhyp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/parhyp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/cvode/parhyp/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/parhyp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/cvode/parhyp/README b/examples/cvode/parhyp/README
new file mode 100644
index 0000000..0f42964
--- /dev/null
+++ b/examples/cvode/parhyp/README
@@ -0,0 +1,52 @@
+List of parallel CVODE examples
+
+  cvAdvDiff_non_p       : 1-D advection-diffusion (nonstiff)
+  cvAdvDiff_diag_p      : 1-D advection-diffusion with Adams and diagonal linear solver
+  cvDiurnal_kry_bbd_p   : 2-D 2-species diurnal advection-diffusion with BBD preconditioner
+  cvDiurnal_kry_p       : 2-D 2-species diurnal advection-diffusion
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/cvode/parhyp/cvAdvDiff_non_ph.c b/examples/cvode/parhyp/cvAdvDiff_non_ph.c
new file mode 100644
index 0000000..ab72743
--- /dev/null
+++ b/examples/cvode/parhyp/cvAdvDiff_non_ph.c
@@ -0,0 +1,396 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision$
+ * $Date$
+ * -----------------------------------------------------------------
+ * Programmer(s): Jean M. Sexton @ SMU
+ *                Slaven Peles @ LLNL
+ * -----------------------------------------------------------------
+ * Based on work by Scott D. Cohen, Alan C. Hindmarsh, George Byrne,
+ *                  and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem, with the program for
+ * its solution by CVODE. The problem is the semi-discrete
+ * form of the advection-diffusion equation in 1-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx
+ * on the interval 0 <= x <= 2, and the time interval 0 <= t <= 5.
+ * Homogeneous Dirichlet boundary conditions are posed, and the
+ * initial condition is the following:
+ *   u(x,t=0) = x(2-x)exp(2x) .
+ * The PDE is discretized on a uniform grid of size MX+2 with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX.
+ * This program solves the problem with the option for nonstiff
+ * systems: ADAMS method and functional iteration.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .5, 1.0, ..., 5.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * This example uses Hypre vector with "IJ" interface and MPI 
+ * parallelization. User is expected to be familiar with the Hypre 
+ * library. 
+ * 
+ * Execute with Number of Processors = N,  with 1 <= N <= MX.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvode/cvode.h>              /* prototypes for CVODE fcts. */
+#include <sundials/sundials_types.h>  /* definition of realtype */
+#include <sundials/sundials_math.h>   /* definition of EXP */
+#include <nvector/nvector_parhyp.h>   /* nvector implementation */
+
+#include <HYPRE.h>
+#include <HYPRE_IJ_mv.h>
+
+#include <mpi.h>                      /* MPI constants and types */
+
+/* Problem Constants */
+
+#define ZERO  RCONST(0.0)
+
+#define XMAX  RCONST(2.0)    /* domain boundary           */
+#define MX    10             /* mesh dimension            */
+#define NEQ   MX             /* number of equations       */
+#define ATOL  RCONST(1.0e-5) /* scalar absolute tolerance */
+#define T0    ZERO           /* initial time              */
+#define T1    RCONST(0.5)    /* first output time         */
+#define DTOUT RCONST(0.5)    /* output time increment     */
+#define NOUT  10             /* number of output times    */
+
+/* Type : UserData 
+   contains grid constants, parhyp machine parameters, work array. */
+
+typedef struct {
+  realtype dx, hdcoef, hacoef;
+  int npes, my_pe;
+  MPI_Comm comm;
+  realtype z[100];
+} *UserData;
+
+/* Private Helper Functions */
+
+static void SetIC(HYPRE_IJVector Uij, realtype dx, long int my_length,
+                  long int my_base);
+
+static void PrintIntro(int npes);
+
+static void PrintData(realtype t, realtype umax, long int nst);
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/***************************** Main Program ******************************/
+
+int main(int argc, char *argv[])
+{
+  realtype dx, reltol, abstol, t, tout, umax;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag, my_pe, npes;
+  long int nst;
+  HYPRE_Int local_N, nperpe, nrem, my_base;
+  HYPRE_ParVector Upar; /* Declare HYPRE parallel vector */
+  HYPRE_IJVector  Uij;  /* Declare "IJ" interface to HYPRE vector */
+
+  MPI_Comm comm;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Get processor number, total number of pe's, and my_pe. */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  /* Set partitioning. */
+  nperpe = NEQ/npes;
+  nrem = NEQ - npes*nperpe;
+  local_N = (my_pe < nrem) ? nperpe+1 : nperpe;
+  my_base = (my_pe < nrem) ? my_pe*local_N : my_pe*nperpe + nrem;
+  
+  /* Allocate hypre vector */
+  HYPRE_IJVectorCreate(comm, my_base, my_base + local_N - 1, &Uij);
+  HYPRE_IJVectorSetObjectType(Uij, HYPRE_PARCSR);
+  HYPRE_IJVectorInitialize(Uij);
+
+  /* Allocate user defined data */
+  data = (UserData) malloc(sizeof *data);  /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+
+  data->comm = comm;
+  data->npes = npes;
+  data->my_pe = my_pe;
+
+  reltol = ZERO;  /* Set the tolerances */
+  abstol = ATOL;
+
+  dx = data->dx = XMAX/((realtype)(MX+1));  /* Set grid coefficients in data */
+  data->hdcoef = RCONST(1.0)/(dx*dx);
+  data->hacoef = RCONST(0.5)/(RCONST(2.0)*dx);
+
+  /* Initialize solutin vector. */
+  SetIC(Uij, dx, local_N, my_base);
+  HYPRE_IJVectorAssemble(Uij);
+  HYPRE_IJVectorGetObject(Uij, (void**) &Upar);
+
+  u = N_VMake_ParHyp(Upar);  /* Create wrapper u around hypre vector */
+  if(check_flag((void *)u, "N_VNew", 0, my_pe)) MPI_Abort(comm, 1);
+  
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Adams-Moulton LMM and the use of a functional iteration */
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1, my_pe)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1, my_pe)) return(1);
+
+  if (my_pe == 0) PrintIntro(npes);
+
+  umax = N_VMaxNorm(u);
+
+  if (my_pe == 0) {
+    t = T0;
+    PrintData(t, umax, 0);
+  }
+
+  /* In loop over output points, call CVode, print results, test for error */
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1, my_pe)) break;
+    umax = N_VMaxNorm(u);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1, my_pe);
+    if (my_pe == 0) PrintData(t, umax, nst);
+  }
+
+  if (my_pe == 0) 
+    PrintFinalStats(cvode_mem);  /* Print some final statistics */
+
+  N_VDestroy(u);              /* Free hypre vector wrapper */
+  HYPRE_IJVectorDestroy(Uij); /* Free the underlying hypre vector */
+  CVodeFree(&cvode_mem);      /* Free the integrator memory */
+  free(data);                 /* Free user data */
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/************************ Private Helper Functions ***********************/
+
+/* Set initial conditions in u vector */
+
+static void SetIC(HYPRE_IJVector Uij, realtype dx, long int my_length,
+                  long int my_base)
+{
+  int i;
+  HYPRE_Int *iglobal;
+  realtype x;
+  realtype *udata;
+
+  /* Set pointer to data array and get local length of u. */
+  udata   = (realtype*) malloc(my_length*sizeof(realtype));
+  iglobal = (HYPRE_Int*) malloc(my_length*sizeof(HYPRE_Int));
+
+  /* Load initial profile into u vector */
+  for (i = 0; i < my_length; i++) {
+    iglobal[i] = my_base + i;
+    x = (iglobal[i] + 1)*dx;
+    udata[i] = x*(XMAX - x)*SUNRexp(RCONST(2.0)*x);
+  }
+  HYPRE_IJVectorSetValues(Uij, my_length, iglobal, udata);
+  free(iglobal);
+  free(udata);
+}
+
+/* Print problem introduction */
+
+static void PrintIntro(int npes)
+{
+  printf("\n 1-D advection-diffusion equation, mesh size =%3d \n", MX);
+  printf("\n Number of PEs = %3d \n\n", npes);
+
+  return;
+}
+
+/* Print data */
+
+static void PrintData(realtype t, realtype umax, long int nst)
+{
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %4.2Lf  max.norm(u) =%14.6Le  nst =%4ld \n", t, umax, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %4.2f  max.norm(u) =%14.6e  nst =%4ld \n", t, umax, nst);
+#else
+  printf("At t = %4.2f  max.norm(u) =%14.6e  nst =%4ld \n", t, umax, nst);
+#endif
+
+  return;
+}
+
+/* Print some final statistics located in the iopt array */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nni, ncfn, netf;
+  int flag;
+  
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, 0);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1, 0);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1, 0);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1, 0);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("nst = %-6ld  nfe  = %-6ld  ", nst, nfe);
+  printf("nni = %-6ld  ncfn = %-6ld  netf = %ld\n \n", nni, ncfn, netf);
+}
+
+/***************** Function Called by the Solver ***********************/
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype ui, ult, urt, hordc, horac, hdiff, hadv;
+  realtype *udata, *udotdata, *z;
+  int i;
+  int npes, my_pe, my_length, my_pe_m1, my_pe_p1, last_pe;
+  UserData data;
+  MPI_Status status;
+  MPI_Comm comm;
+  HYPRE_ParVector uhyp;
+  HYPRE_ParVector udothyp;
+
+  /* Extract hypre vectors */  
+  uhyp  = N_VGetVector_ParHyp(u);
+  udothyp  = N_VGetVector_ParHyp(udot);
+  
+  /* Access hypre vectors local data */
+  udata = hypre_VectorData(hypre_ParVectorLocalVector(uhyp));
+  udotdata = hypre_VectorData(hypre_ParVectorLocalVector(udothyp));
+
+  /* Extract needed problem constants from data */
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+
+  /* Extract parameters for parhyp computation. */
+  comm = data->comm;
+  npes = data->npes;                           /* Number of processes    */ 
+  my_pe = data->my_pe;                         /* Current process number */
+  my_length =  hypre_ParVectorLastIndex(uhyp)  /* Local length of uhyp   */
+             - hypre_ParVectorFirstIndex(uhyp) + 1;  
+  z = data->z;
+
+  /* Compute related parameters. */
+  my_pe_m1 = my_pe - 1;
+  my_pe_p1 = my_pe + 1;
+  last_pe = npes - 1;
+
+  /* Store local segment of u in the working array z. */
+  for (i = 1; i <= my_length; i++)
+    z[i] = udata[i - 1];
+
+  /* Pass needed data to processes before and after current process. */
+  if (my_pe != 0)
+    MPI_Send(&z[1], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm);
+  if (my_pe != last_pe)
+    MPI_Send(&z[my_length], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm);   
+
+  /* Receive needed data from processes before and after current process. */
+  if (my_pe != 0)
+    MPI_Recv(&z[0], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm, &status);
+  else 
+    z[0] = ZERO;
+  if (my_pe != last_pe)
+    MPI_Recv(&z[my_length+1], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm,
+             &status);   
+  else 
+    z[my_length + 1] = ZERO;
+
+  /* Loop over all grid points in current process. */
+  for (i=1; i<=my_length; i++) {
+
+    /* Extract u at x_i and two neighboring points */
+    ui = z[i];
+    ult = z[i-1];
+    urt = z[i+1];
+
+    /* Set diffusion and advection terms and load into udot */
+    hdiff = hordc*(ult - RCONST(2.0)*ui + urt);
+    hadv = horac*(urt - ult);
+    udotdata[i-1] = hdiff + hadv;
+  }
+
+  return(0);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+              id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/parhyp/cvAdvDiff_non_ph.out b/examples/cvode/parhyp/cvAdvDiff_non_ph.out
new file mode 100644
index 0000000..58432f6
--- /dev/null
+++ b/examples/cvode/parhyp/cvAdvDiff_non_ph.out
@@ -0,0 +1,21 @@
+
+ 1-D advection-diffusion equation, mesh size = 10 
+
+ Number of PEs =   2 
+
+At t = 0.00  max.norm(u) =  1.569909e+01  nst =   0 
+At t = 0.50  max.norm(u) =  3.052881e+00  nst = 113 
+At t = 1.00  max.norm(u) =  8.753188e-01  nst = 191 
+At t = 1.50  max.norm(u) =  2.494926e-01  nst = 265 
+At t = 2.00  max.norm(u) =  7.109437e-02  nst = 332 
+At t = 2.50  max.norm(u) =  2.026176e-02  nst = 405 
+At t = 3.00  max.norm(u) =  5.769193e-03  nst = 468 
+At t = 3.50  max.norm(u) =  1.651582e-03  nst = 541 
+At t = 4.00  max.norm(u) =  4.764197e-04  nst = 623 
+At t = 4.50  max.norm(u) =  1.370219e-04  nst = 704 
+At t = 5.00  max.norm(u) =  3.990405e-05  nst = 785 
+
+Final Statistics: 
+
+nst = 785     nfe  = 1442    nni = 1438    ncfn = 140     netf = 5
+ 
diff --git a/examples/cvode/serial/CMakeLists.txt b/examples/cvode/serial/CMakeLists.txt
new file mode 100644
index 0000000..1e04c45
--- /dev/null
+++ b/examples/cvode/serial/CMakeLists.txt
@@ -0,0 +1,194 @@
+# ---------------------------------------------------------------
+# $Revision: 4957 $
+# $Date: 2016-09-23 12:21:47 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for CVODE serial examples
+
+# Add variable CVODE_examples with the names of the serial CVODE examples
+
+SET(CVODE_examples
+  cvAdvDiff_bnd
+  cvDirectDemo_ls
+  cvDiurnal_kry_bp
+  cvDiurnal_kry
+  cvKrylovDemo_ls
+  cvKrylovDemo_prec
+  cvRoberts_dns
+  cvRoberts_dns_uw
+  )
+
+SET(CVODE_examples_KLU
+  cvRoberts_klu
+  )
+
+SET(CVODE_examples_SUPERLUMT
+  cvRoberts_sps
+  )
+
+# Add variable CVODE_examples_BL with the names of the serial CVODE examples
+# that use Lapack
+
+SET(CVODE_examples_BL
+  cvAdvDiff_bndL
+  cvRoberts_dnsL
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODE_LIB sundials_cvode_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${CVODE_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(HYPRE_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${HYPRE_LIBRARIES})
+ENDIF(HYPRE_FOUND)
+
+# Add the build and install targets for each CVODE example
+
+FOREACH(example ${CVODE_examples})
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${CVODE_examples})
+
+# Add the build and install targets for each Lapack CVODE example (if needed)
+IF(LAPACK_FOUND)
+  FOREACH(example ${CVODE_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${CVODE_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+# If KLU support is enabled, add the build and install targets for
+# the examples using KLU
+IF(KLU_FOUND)
+  FOREACH(example ${CVODE_examples_KLU})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${CVODE_examples_KLU})
+ENDIF(KLU_FOUND)
+
+# If SUPERLUMT support is enabled, add the build and install targets for
+# the examples using SUPERLUMT
+IF(SUPERLUMT_FOUND)
+  FOREACH(example ${CVODE_examples_SUPERLUMT})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${CVODE_examples_SUPERLUMT})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/serial)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "CVODE")
+  SET(SOLVER_LIB "sundials_cvode")
+  LIST2STRING(CVODE_examples EXAMPLES)
+
+  IF(LAPACK_FOUND)
+    LIST2STRING(CVODE_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  IF(KLU_FOUND)
+    LIST2STRING(CVODE_examples_KLU EXAMPLES)
+  ENDIF(KLU_FOUND)
+
+  IF(SUPERLUMT_FOUND)
+    LIST2STRING(CVODE_examples_SUPERLUMT EXAMPLES)
+  ENDIF(SUPERLUMT_FOUND)
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/cvode/serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvode/serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/cvode/serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/cvode/serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/cvode/serial/README b/examples/cvode/serial/README
new file mode 100644
index 0000000..c5a0ee2
--- /dev/null
+++ b/examples/cvode/serial/README
@@ -0,0 +1,61 @@
+List of serial CVODE examples
+
+  cvAdvDiff_bnd      : banded example
+  cvAdvDiff_bndL     : banded example (Lapack)
+  cvDirectDemo_ls    : demonstration program for direct methods
+  cvDiurnal_kry_bp   : Krylov example with banded preconditioner
+  cvDiurnal_kry      : Krylov example
+  cvKrylovDemo_ls    : demonstration program with 3 Krylov solvers
+  cvKrylovDemo_prec  : demonstration program for Krylov methods
+  cvRoberts_dns      : dense example
+  cvRoberts_dnsL     : dense example (Lapack)
+  cvRoberts_dns_uw   : dense example with user ewt function
+  cvRoberts_klu      : dense example with KLU sparse linear solver
+  cvRoberts_sps      : dense example with SuperLUMT sparse linear solver
+
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/cvode/serial/cvAdvDiff_bnd.c b/examples/cvode/serial/cvAdvDiff_bnd.c
new file mode 100644
index 0000000..eec9cdb
--- /dev/null
+++ b/examples/cvode/serial/cvAdvDiff_bnd.c
@@ -0,0 +1,426 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem with a banded Jacobian,
+ * with the program for its solution by CVODE.
+ * The problem is the semi-discrete form of the advection-diffusion
+ * equation in 2-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx + d^2 u / dy^2
+ * on the rectangle 0 <= x <= 2, 0 <= y <= 1, and the time
+ * interval 0 <= t <= 1. Homogeneous Dirichlet boundary conditions
+ * are posed, and the initial condition is
+ *   u(x,y,t=0) = x(2-x)y(1-y)exp(5xy).
+ * The PDE is discretized on a uniform MX+2 by MY+2 grid with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX*MY.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVBAND band linear solver, and a user-supplied
+ * Jacobian routine.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .1, .2, ..., 1.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+/* Header files with a description of contents used in cvbanx.c */
+
+#include <cvode/cvode.h>             /* prototypes for CVODE fcts., consts. */
+#include <cvode/cvode_band.h>        /* prototype for CVBand */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., macros */
+#include <sundials/sundials_band.h>  /* definitions of type DlsMat and macros */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+#include <sundials/sundials_math.h>  /* definition of ABS and EXP */
+
+/* Problem Constants */
+
+#define XMAX  RCONST(2.0)    /* domain boundaries         */
+#define YMAX  RCONST(1.0)
+#define MX    10             /* mesh dimensions           */
+#define MY    5
+#define NEQ   MX*MY          /* number of equations       */
+#define ATOL  RCONST(1.0e-5) /* scalar absolute tolerance */
+#define T0    RCONST(0.0)    /* initial time              */
+#define T1    RCONST(0.1)    /* first output time         */
+#define DTOUT RCONST(0.1)    /* output time increment     */
+#define NOUT  10             /* number of output times    */
+
+#define ZERO RCONST(0.0)
+#define HALF RCONST(0.5)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+#define FIVE RCONST(5.0)
+
+/* User-defined vector access macro IJth */
+
+/* IJth is defined in order to isolate the translation from the
+   mathematical 2-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. 
+   IJth(vdata,i,j) references the element in the vdata array for
+   u at mesh point (i,j), where 1 <= i <= MX, 1 <= j <= MY.
+   The vdata array is obtained via the macro call vdata = N_VGetArrayPointer_Serial(v),
+   where v is an N_Vector. 
+   The variables are ordered by the y index j, then by the x index i. */
+
+#define IJth(vdata,i,j) (vdata[(j-1) + (i-1)*MY])
+
+/* Type : UserData (contains grid constants) */
+
+typedef struct {
+  realtype dx, dy, hdcoef, hacoef, vdcoef;
+} *UserData;
+
+/* Private Helper Functions */
+
+static void SetIC(N_Vector u, UserData data);
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax);
+static void PrintOutput(realtype t, realtype umax, long int nst);
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main(void)
+{
+  realtype dx, dy, reltol, abstol, t, tout, umax;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag;
+  long int nst;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Create a serial vector */
+
+  u = N_VNew_Serial(NEQ);  /* Allocate u vector */
+  if(check_flag((void*)u, "N_VNew_Serial", 0)) return(1);
+
+  reltol = ZERO;  /* Set the tolerances */
+  abstol = ATOL;
+
+  data = (UserData) malloc(sizeof *data);  /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  dx = data->dx = XMAX/(MX+1);  /* Set grid coefficients in data */
+  dy = data->dy = YMAX/(MY+1);
+  data->hdcoef = ONE/(dx*dx);
+  data->hacoef = HALF/(TWO*dx);
+  data->vdcoef = ONE/(dy*dy);
+
+  SetIC(u, data);  /* Initialize u vector */
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerance */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVBand to specify the CVBAND band linear solver */
+  flag = CVBand(cvode_mem, NEQ, MY, MY);
+  if(check_flag(&flag, "CVBand", 1)) return(1);
+
+  /* Set the user-supplied Jacobian routine Jac */
+  flag = CVDlsSetBandJacFn(cvode_mem, Jac);
+  if(check_flag(&flag, "CVDlsSetBandJacFn", 1)) return(1);
+
+  /* In loop over output points: call CVode, print results, test for errors */
+
+  umax = N_VMaxNorm(u);
+  PrintHeader(reltol, abstol, umax);
+  for(iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1)) break;
+    umax = N_VMaxNorm(u);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1);
+    PrintOutput(t, umax, nst);
+  }
+
+  PrintFinalStats(cvode_mem);  /* Print some final statistics   */
+
+  N_VDestroy_Serial(u);   /* Free the u vector */
+  CVodeFree(&cvode_mem);  /* Free the integrator memory */
+  free(data);             /* Free the user data */
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u,N_Vector udot, void *user_data)
+{
+  realtype uij, udn, uup, ult, urt, hordc, horac, verdc, hdiff, hadv, vdiff;
+  realtype *udata, *dudata;
+  int i, j;
+  UserData data;
+
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Extract needed constants from data */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  /* Loop over all grid points. */
+
+  for (j=1; j <= MY; j++) {
+
+    for (i=1; i <= MX; i++) {
+
+      /* Extract u at x_i, y_j and four neighboring points */
+
+      uij = IJth(udata, i, j);
+      udn = (j == 1)  ? ZERO : IJth(udata, i, j-1);
+      uup = (j == MY) ? ZERO : IJth(udata, i, j+1);
+      ult = (i == 1)  ? ZERO : IJth(udata, i-1, j);
+      urt = (i == MX) ? ZERO : IJth(udata, i+1, j);
+
+      /* Set diffusion and advection terms and load into udot */
+
+      hdiff = hordc*(ult - TWO*uij + urt);
+      hadv = horac*(urt - ult);
+      vdiff = verdc*(uup - TWO*uij + udn);
+      IJth(dudata, i, j) = hdiff + hadv + vdiff;
+    }
+  }
+
+  return(0);
+}
+
+/* Jacobian routine. Compute J(t,u). */
+
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  long int i, j, k;
+  realtype *kthCol, hordc, horac, verdc;
+  UserData data;
+  
+  /*
+    The components of f = udot that depend on u(i,j) are
+    f(i,j), f(i-1,j), f(i+1,j), f(i,j-1), f(i,j+1), with
+      df(i,j)/du(i,j) = -2 (1/dx^2 + 1/dy^2)
+      df(i-1,j)/du(i,j) = 1/dx^2 + .25/dx  (if i > 1)
+      df(i+1,j)/du(i,j) = 1/dx^2 - .25/dx  (if i < MX)
+      df(i,j-1)/du(i,j) = 1/dy^2           (if j > 1)
+      df(i,j+1)/du(i,j) = 1/dy^2           (if j < MY)
+  */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+  
+  for (j=1; j <= MY; j++) {
+    for (i=1; i <= MX; i++) {
+      k = j-1 + (i-1)*MY;
+      kthCol = BAND_COL(J,k);
+
+      /* set the kth column of J */
+
+      BAND_COL_ELEM(kthCol,k,k) = -TWO*(verdc+hordc);
+      if (i != 1)  BAND_COL_ELEM(kthCol,k-MY,k) = hordc + horac;
+      if (i != MX) BAND_COL_ELEM(kthCol,k+MY,k) = hordc - horac;
+      if (j != 1)  BAND_COL_ELEM(kthCol,k-1,k)  = verdc;
+      if (j != MY) BAND_COL_ELEM(kthCol,k+1,k)  = verdc;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Set initial conditions in u vector */
+
+static void SetIC(N_Vector u, UserData data)
+{
+  int i, j;
+  realtype x, y, dx, dy;
+  realtype *udata;
+
+  /* Extract needed constants from data */
+
+  dx = data->dx;
+  dy = data->dy;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profile into u vector */
+  
+  for (j=1; j <= MY; j++) {
+    y = j*dy;
+    for (i=1; i <= MX; i++) {
+      x = i*dx;
+      IJth(udata,i,j) = x*(XMAX - x)*y*(YMAX - y)*SUNRexp(FIVE*x*y);
+    }
+  }  
+}
+
+/* Print first lines of output (problem description) */
+
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax)
+{
+  printf("\n2-D Advection-Diffusion Equation\n");
+  printf("Mesh dimensions = %d X %d\n", MX, MY);
+  printf("Total system size = %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters: reltol = %Lg   abstol = %Lg\n\n",
+         reltol, abstol);
+  printf("At t = %Lg      max.norm(u) =%14.6Le \n", T0, umax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters: reltol = %g   abstol = %g\n\n",
+         reltol, abstol);
+  printf("At t = %g      max.norm(u) =%14.6e \n", T0, umax);
+#else
+  printf("Tolerance parameters: reltol = %g   abstol = %g\n\n", reltol, abstol);
+  printf("At t = %g      max.norm(u) =%14.6e \n", T0, umax);
+#endif
+
+  return;
+}
+
+/* Print current value */
+
+static void PrintOutput(realtype t, realtype umax, long int nst)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %4.2Lf   max.norm(u) =%14.6Le   nst = %4ld\n", t, umax, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %4.2f   max.norm(u) =%14.6e   nst = %4ld\n", t, umax, nst);
+#else
+  printf("At t = %4.2f   max.norm(u) =%14.6e   nst = %4ld\n", t, umax, nst);
+#endif
+
+  return;
+}
+
+/* Get and print some final statistics */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  int flag;
+  long int nst, nfe, nsetups, netf, nni, ncfn, nje, nfeLS;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %ld\n \n",
+	 nni, ncfn, netf);
+
+  return;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvAdvDiff_bnd.out b/examples/cvode/serial/cvAdvDiff_bnd.out
new file mode 100644
index 0000000..c48de03
--- /dev/null
+++ b/examples/cvode/serial/cvAdvDiff_bnd.out
@@ -0,0 +1,22 @@
+
+2-D Advection-Diffusion Equation
+Mesh dimensions = 10 X 5
+Total system size = 50
+Tolerance parameters: reltol = 0   abstol = 1e-05
+
+At t = 0      max.norm(u) =  8.954716e+01 
+At t = 0.10   max.norm(u) =  4.132889e+00   nst =   85
+At t = 0.20   max.norm(u) =  1.039294e+00   nst =  103
+At t = 0.30   max.norm(u) =  2.979829e-01   nst =  113
+At t = 0.40   max.norm(u) =  8.765774e-02   nst =  120
+At t = 0.50   max.norm(u) =  2.625637e-02   nst =  126
+At t = 0.60   max.norm(u) =  7.830425e-03   nst =  130
+At t = 0.70   max.norm(u) =  2.329387e-03   nst =  134
+At t = 0.80   max.norm(u) =  6.953434e-04   nst =  137
+At t = 0.90   max.norm(u) =  2.115983e-04   nst =  140
+At t = 1.00   max.norm(u) =  6.556853e-05   nst =  142
+
+Final Statistics:
+nst = 142    nfe  = 174    nsetups = 23     nfeLS = 0      nje = 3
+nni = 170    ncfn = 0      netf = 3
+ 
diff --git a/examples/cvode/serial/cvAdvDiff_bndL.c b/examples/cvode/serial/cvAdvDiff_bndL.c
new file mode 100644
index 0000000..c9c0625
--- /dev/null
+++ b/examples/cvode/serial/cvAdvDiff_bndL.c
@@ -0,0 +1,421 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem with a banded Jacobian,
+ * with the program for its solution by CVODE.
+ * The problem is the semi-discrete form of the advection-diffusion
+ * equation in 2-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx + d^2 u / dy^2
+ * on the rectangle 0 <= x <= 2, 0 <= y <= 1, and the time
+ * interval 0 <= t <= 1. Homogeneous Dirichlet boundary conditions
+ * are posed, and the initial condition is
+ *   u(x,y,t=0) = x(2-x)y(1-y)exp(5xy).
+ * The PDE is discretized on a uniform MX+2 by MY+2 grid with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX*MY.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the LAPACK band linear solver, and a user-supplied
+ * Jacobian routine.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .1, .2, ..., 1.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+/* Header files with a description of contents used in cvbanx.c */
+
+#include <cvode/cvode.h>             /* prototypes for CVODE fcts. and consts. */
+#include <cvode/cvode_lapack.h>      /* prototype for CVLapackBand */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., and macros */
+#include <sundials/sundials_math.h>  /* definition of ABS and EXP */
+
+/* Problem Constants */
+
+#define XMAX  RCONST(2.0)    /* domain boundaries         */
+#define YMAX  RCONST(1.0)
+#define MX    10             /* mesh dimensions           */
+#define MY    5
+#define NEQ   MX*MY          /* number of equations       */
+#define ATOL  RCONST(1.0e-5) /* scalar absolute tolerance */
+#define T0    RCONST(0.0)    /* initial time              */
+#define T1    RCONST(0.1)    /* first output time         */
+#define DTOUT RCONST(0.1)    /* output time increment     */
+#define NOUT  10             /* number of output times    */
+
+#define ZERO RCONST(0.0)
+#define HALF RCONST(0.5)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+#define FIVE RCONST(5.0)
+
+/* User-defined vector access macro IJth */
+
+/* IJth is defined in order to isolate the translation from the
+   mathematical 2-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. 
+   IJth(vdata,i,j) references the element in the vdata array for
+   u at mesh point (i,j), where 1 <= i <= MX, 1 <= j <= MY.
+   The vdata array is obtained via the macro call vdata = N_VGetArrayPointer_Serial(v),
+   where v is an N_Vector. 
+   The variables are ordered by the y index j, then by the x index i. */
+
+#define IJth(vdata,i,j) (vdata[(j-1) + (i-1)*MY])
+
+/* Type : UserData (contains grid constants) */
+
+typedef struct {
+  realtype dx, dy, hdcoef, hacoef, vdcoef;
+} *UserData;
+
+/* Private Helper Functions */
+
+static void SetIC(N_Vector u, UserData data);
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax);
+static void PrintOutput(realtype t, realtype umax, long int nst);
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main(void)
+{
+  realtype dx, dy, reltol, abstol, t, tout, umax;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag;
+  long int nst;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Create a serial vector */
+
+  u = N_VNew_Serial(NEQ);  /* Allocate u vector */
+  if(check_flag((void*)u, "N_VNew_Serial", 0)) return(1);
+
+  reltol = ZERO;  /* Set the tolerances */
+  abstol = ATOL;
+
+  data = (UserData) malloc(sizeof *data);  /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  dx = data->dx = XMAX/(MX+1);  /* Set grid coefficients in data */
+  dy = data->dy = YMAX/(MY+1);
+  data->hdcoef = ONE/(dx*dx);
+  data->hacoef = HALF/(TWO*dx);
+  data->vdcoef = ONE/(dy*dy);
+
+  SetIC(u, data);  /* Initialize u vector */
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerance */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVLapackBand to specify the CVBAND band linear solver */
+  flag = CVLapackBand(cvode_mem, NEQ, MY, MY);
+  if(check_flag(&flag, "CVLapackBand", 1)) return(1);
+
+  /* Set the user-supplied Jacobian routine Jac */
+  flag = CVDlsSetBandJacFn(cvode_mem, Jac);
+  if(check_flag(&flag, "CVDlsSetBandJacFn", 1)) return(1);
+
+  /* In loop over output points: call CVode, print results, test for errors */
+  umax = N_VMaxNorm(u);
+  PrintHeader(reltol, abstol, umax);
+  for(iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1)) break;
+    umax = N_VMaxNorm(u);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1);
+    PrintOutput(t, umax, nst);
+  }
+
+  PrintFinalStats(cvode_mem);  /* Print some final statistics   */
+
+  N_VDestroy_Serial(u);   /* Free the u vector */
+  CVodeFree(&cvode_mem);  /* Free the integrator memory */
+  free(data);             /* Free the user data */
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u,N_Vector udot, void *user_data)
+{
+  realtype uij, udn, uup, ult, urt, hordc, horac, verdc, hdiff, hadv, vdiff;
+  realtype *udata, *dudata;
+  int i, j;
+  UserData data;
+
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Extract needed constants from data */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  /* Loop over all grid points. */
+
+  for (j=1; j <= MY; j++) {
+
+    for (i=1; i <= MX; i++) {
+
+      /* Extract u at x_i, y_j and four neighboring points */
+
+      uij = IJth(udata, i, j);
+      udn = (j == 1)  ? ZERO : IJth(udata, i, j-1);
+      uup = (j == MY) ? ZERO : IJth(udata, i, j+1);
+      ult = (i == 1)  ? ZERO : IJth(udata, i-1, j);
+      urt = (i == MX) ? ZERO : IJth(udata, i+1, j);
+
+      /* Set diffusion and advection terms and load into udot */
+
+      hdiff = hordc*(ult - TWO*uij + urt);
+      hadv = horac*(urt - ult);
+      vdiff = verdc*(uup - TWO*uij + udn);
+      IJth(dudata, i, j) = hdiff + hadv + vdiff;
+    }
+  }
+
+  return(0);
+}
+
+/* Jacobian routine. Compute J(t,u). */
+
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int i, j, k;
+  realtype *kthCol, hordc, horac, verdc;
+  UserData data;
+  
+  /*
+   * The components of f = udot that depend on u(i,j) are
+   * f(i,j), f(i-1,j), f(i+1,j), f(i,j-1), f(i,j+1), with
+   *   df(i,j)/du(i,j) = -2 (1/dx^2 + 1/dy^2)
+   *   df(i-1,j)/du(i,j) = 1/dx^2 + .25/dx  (if i > 1)
+   *   df(i+1,j)/du(i,j) = 1/dx^2 - .25/dx  (if i < MX)
+   *   df(i,j-1)/du(i,j) = 1/dy^2           (if j > 1)
+   *   df(i,j+1)/du(i,j) = 1/dy^2           (if j < MY)
+   */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  /* set non-zero Jacobian entries */
+  for (j=1; j <= MY; j++) {
+    for (i=1; i <= MX; i++) {
+      k = j-1 + (i-1)*MY;
+      kthCol = BAND_COL(J,k);
+
+      /* set the kth column of J */
+
+      BAND_COL_ELEM(kthCol,k,k) = -TWO*(verdc+hordc);
+      if (i != 1)  BAND_COL_ELEM(kthCol,k-MY,k) = hordc + horac;
+      if (i != MX) BAND_COL_ELEM(kthCol,k+MY,k) = hordc - horac;
+      if (j != 1)  BAND_COL_ELEM(kthCol,k-1,k)  = verdc;
+      if (j != MY) BAND_COL_ELEM(kthCol,k+1,k)  = verdc;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Set initial conditions in u vector */
+
+static void SetIC(N_Vector u, UserData data)
+{
+  int i, j;
+  realtype x, y, dx, dy;
+  realtype *udata;
+
+  /* Extract needed constants from data */
+
+  dx = data->dx;
+  dy = data->dy;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profile into u vector */
+  
+  for (j=1; j <= MY; j++) {
+    y = j*dy;
+    for (i=1; i <= MX; i++) {
+      x = i*dx;
+      IJth(udata,i,j) = x*(XMAX - x)*y*(YMAX - y)*SUNRexp(FIVE*x*y);
+    }
+  }  
+}
+
+/* Print first lines of output (problem description) */
+
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax)
+{
+  printf("\n2-D Advection-Diffusion Equation\n");
+  printf("Mesh dimensions = %d X %d\n", MX, MY);
+  printf("Total system size = %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters: reltol = %Lg   abstol = %Lg\n\n", reltol, abstol);
+  printf("At t = %Lg      max.norm(u) =%14.6Le \n", T0, umax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters: reltol = %lg   abstol = %lg\n\n", reltol, abstol);
+  printf("At t = %lg      max.norm(u) =%14.6le \n", T0, umax);
+#else
+  printf("Tolerance parameters: reltol = %g   abstol = %g\n\n", reltol, abstol);
+  printf("At t = %g      max.norm(u) =%14.6e \n", T0, umax);
+#endif
+
+  return;
+}
+
+/* Print current value */
+
+static void PrintOutput(realtype t, realtype umax, long int nst)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %4.2Lf   max.norm(u) =%14.6Le   nst = %4ld\n", t, umax, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %4.2f   max.norm(u) =%14.6le   nst = %4ld\n", t, umax, nst);
+#else
+  printf("At t = %4.2f   max.norm(u) =%14.6e   nst = %4ld\n", t, umax, nst);
+#endif
+
+  return;
+}
+
+/* Get and print some final statistics */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  int flag;
+  long int nst, nfe, nsetups, netf, nni, ncfn, nje, nfeLS;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %ld\n \n",
+	 nni, ncfn, netf);
+
+  return;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvAdvDiff_bndL.out b/examples/cvode/serial/cvAdvDiff_bndL.out
new file mode 100644
index 0000000..c48de03
--- /dev/null
+++ b/examples/cvode/serial/cvAdvDiff_bndL.out
@@ -0,0 +1,22 @@
+
+2-D Advection-Diffusion Equation
+Mesh dimensions = 10 X 5
+Total system size = 50
+Tolerance parameters: reltol = 0   abstol = 1e-05
+
+At t = 0      max.norm(u) =  8.954716e+01 
+At t = 0.10   max.norm(u) =  4.132889e+00   nst =   85
+At t = 0.20   max.norm(u) =  1.039294e+00   nst =  103
+At t = 0.30   max.norm(u) =  2.979829e-01   nst =  113
+At t = 0.40   max.norm(u) =  8.765774e-02   nst =  120
+At t = 0.50   max.norm(u) =  2.625637e-02   nst =  126
+At t = 0.60   max.norm(u) =  7.830425e-03   nst =  130
+At t = 0.70   max.norm(u) =  2.329387e-03   nst =  134
+At t = 0.80   max.norm(u) =  6.953434e-04   nst =  137
+At t = 0.90   max.norm(u) =  2.115983e-04   nst =  140
+At t = 1.00   max.norm(u) =  6.556853e-05   nst =  142
+
+Final Statistics:
+nst = 142    nfe  = 174    nsetups = 23     nfeLS = 0      nje = 3
+nni = 170    ncfn = 0      netf = 3
+ 
diff --git a/examples/cvode/serial/cvDirectDemo_ls.c b/examples/cvode/serial/cvDirectDemo_ls.c
new file mode 100644
index 0000000..f64e1ee
--- /dev/null
+++ b/examples/cvode/serial/cvDirectDemo_ls.c
@@ -0,0 +1,789 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4868 $
+ * $Date: 2016-08-19 10:16:31 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Demonstration program for CVODE - direct linear solvers.
+ * Two separate problems are solved using both the CV_ADAMS and CV_BDF
+ * linear multistep methods in combination with CV_FUNCTIONAL and
+ * CV_NEWTON iterations:
+ *
+ * Problem 1: Van der Pol oscillator
+ *   xdotdot - 3*(1 - x^2)*xdot + x = 0, x(0) = 2, xdot(0) = 0.
+ * This second-order ODE is converted to a first-order system by
+ * defining y0 = x and y1 = xdot.
+ * The NEWTON iteration cases use the following types of Jacobian
+ * approximation: (1) dense, user-supplied, (2) dense, difference
+ * quotient approximation, (3) diagonal approximation.
+ *
+ * Problem 2: ydot = A * y, where A is a banded lower triangular
+ * matrix derived from 2-D advection PDE.
+ * The NEWTON iteration cases use the following types of Jacobian
+ * approximation: (1) band, user-supplied, (2) band, difference
+ * quotient approximation, (3) diagonal approximation.
+ *
+ * For each problem, in the series of eight runs, CVodeInit is
+ * called only once, for the first run, whereas CVodeReInit is
+ * called for each of the remaining seven runs.
+ *
+ * Notes: This program demonstrates the usage of the sequential
+ * macros NV_Ith_S, DENSE_ELEM, BAND_COL, and
+ * BAND_COL_ELEM. The NV_Ith_S macro is used to reference the
+ * components of an N_Vector. It works for any size N=NEQ, but
+ * due to efficiency concerns it should only by used when the
+ * problem size is small. The Problem 1 right hand side and
+ * Jacobian functions f1 and Jac1 both use NV_Ith_S. The 
+ * N_VGetArrayPointer_Serial function gives the user access to the 
+ * memory used for the component storage of an N_Vector. In the 
+ * sequential case, the user may assume that this is one contiguous 
+ * array of reals. The N_VGetArrayPointer_Serial function
+ * gives a more efficient means (than the NV_Ith_S macro) to
+ * access the components of an N_Vector and should be used when the
+ * problem size is large. The Problem 2 right hand side function f2
+ * uses the N_VGetArrayPointer_Serial function. The DENSE_ELEM macro 
+ * used in Jac1 gives access to an element of a dense matrix of type 
+ * DlsMat. It should be used only when the problem size is small (the 
+ * size of a DlsMat is NEQ x NEQ) due to efficiency concerns. For
+ * larger problem sizes, the macro DENSE_COL can be used in order
+ * to work directly with a column of a DlsMat. The BAND_COL and
+ * BAND_COL_ELEM allow efficient columnwise access to the elements
+ * of a band matrix of type DlsMat. These macros are used in the
+ * Jac2 function.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvode/cvode.h>             /* main integrator header file */
+#include <cvode/cvode_dense.h>       /* use CVDENSE linear solver */
+#include <cvode/cvode_band.h>        /* use CVBAND linear solver */
+#include <cvode/cvode_diag.h>        /* use CVDIAG linear solver */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fct. and macros */
+#include <sundials/sundials_types.h> /* definition of realtype */
+#include <sundials/sundials_math.h>  /* contains the macros ABS, SUNSQR, and EXP*/
+
+/* Shared Problem Constants */
+
+#define ATOL RCONST(1.0e-6)
+#define RTOL RCONST(0.0)
+
+#define ZERO   RCONST(0.0)
+#define ONE    RCONST(1.0)
+#define TWO    RCONST(2.0)
+#define THIRTY RCONST(30.0)
+
+/* Problem #1 Constants */
+
+#define P1_NEQ        2
+#define P1_ETA        RCONST(3.0)
+#define P1_NOUT       4
+#define P1_T0         RCONST(0.0)
+#define P1_T1         RCONST(1.39283880203)
+#define P1_DTOUT      RCONST(2.214773875)
+#define P1_TOL_FACTOR RCONST(1.0e4)
+
+/* Problem #2 Constants */
+
+#define P2_MESHX      5
+#define P2_MESHY      5
+#define P2_NEQ        P2_MESHX*P2_MESHY
+#define P2_ALPH1      RCONST(1.0)
+#define P2_ALPH2      RCONST(1.0)
+#define P2_NOUT       5
+#define P2_ML         5
+#define P2_MU         0
+#define P2_T0         RCONST(0.0)
+#define P2_T1         RCONST(0.01)
+#define P2_TOUT_MULT  RCONST(10.0)
+#define P2_TOL_FACTOR RCONST(1.0e3)
+
+/* Linear Solver Options */
+
+enum {FUNC, DENSE_USER, DENSE_DQ, DIAG, BAND_USER, BAND_DQ};
+
+/* Private Helper Functions */
+
+static int  Problem1(void);
+static void PrintIntro1(void);
+static void PrintHeader1(void);
+static void PrintOutput1(realtype t, realtype y0, realtype y1, int qu, realtype hu);
+static int  Problem2(void);
+static void PrintIntro2(void);
+static void PrintHeader2(void);
+static void PrintOutput2(realtype t, realtype erm, int qu, realtype hu);
+static realtype MaxError(N_Vector y, realtype t);
+static int PrepareNextRun(void *cvode_mem, int lmm, int miter, long int mu,
+                          long int ml);
+static void PrintErrOutput(realtype tol_factor);
+static void PrintFinalStats(void *cvode_mem, int miter, realtype ero);
+static void PrintErrInfo(int nerr);
+
+/* Functions Called by the Solver */
+
+static int f1(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac1(long int N, realtype tn,
+                N_Vector y, N_Vector fy, 
+                DlsMat J, void *user_data,
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int f2(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac2(long int N, long int mu, long int ml, 
+                realtype tn, N_Vector y, N_Vector fy, 
+                DlsMat J, void *user_data,
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Implementation */
+
+int main(void)
+{
+  int nerr;
+
+  nerr = Problem1();
+  nerr += Problem2();
+  PrintErrInfo(nerr);
+
+  return(0);
+}
+
+static int Problem1(void)
+{
+  realtype reltol=RTOL, abstol=ATOL, t, tout, ero, er;
+  int miter, flag, temp_flag, iout, nerr=0;
+  N_Vector y;
+  void *cvode_mem;
+  booleantype firstrun;
+  int qu;
+  realtype hu;
+
+  y = NULL;
+  cvode_mem = NULL;
+
+  y = N_VNew_Serial(P1_NEQ);
+  if(check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  PrintIntro1();
+
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  for (miter=FUNC; miter <= DIAG; miter++) {
+    ero = ZERO;
+    NV_Ith_S(y,0) = TWO;
+    NV_Ith_S(y,1) = ZERO;
+
+    firstrun = (miter==FUNC);
+    if (firstrun) {
+      flag = CVodeInit(cvode_mem, f1, P1_T0, y);
+      if(check_flag(&flag, "CVodeInit", 1)) return(1);
+      flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+      if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+    } else {
+      flag = CVodeSetIterType(cvode_mem, CV_NEWTON);
+      if(check_flag(&flag, "CVodeSetIterType", 1)) ++nerr;
+      flag = CVodeReInit(cvode_mem, P1_T0, y);
+      if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+    }
+      
+    flag = PrepareNextRun(cvode_mem, CV_ADAMS, miter, 0, 0);
+    if(check_flag(&flag, "PrepareNextRun", 1)) return(1);
+
+    PrintHeader1();
+
+    for(iout=1, tout=P1_T1; iout <= P1_NOUT; iout++, tout += P1_DTOUT) {
+      flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+      check_flag(&flag, "CVode", 1);
+      temp_flag = CVodeGetLastOrder(cvode_mem, &qu);
+      if(check_flag(&temp_flag, "CVodeGetLastOrder", 1)) ++nerr;
+      temp_flag = CVodeGetLastStep(cvode_mem, &hu);
+      if(check_flag(&temp_flag, "CVodeGetLastStep", 1)) ++nerr;
+      PrintOutput1(t, NV_Ith_S(y,0), NV_Ith_S(y,1), qu, hu);
+      if (flag != CV_SUCCESS) {
+        nerr++;
+        break;
+      }
+      if (iout%2 == 0) {
+        er = SUNRabs(NV_Ith_S(y,0)) / abstol;
+        if (er > ero) ero = er;
+        if (er > P1_TOL_FACTOR) {
+          nerr++;
+	  PrintErrOutput(P1_TOL_FACTOR);
+        }
+      }
+    }
+    
+    PrintFinalStats(cvode_mem, miter, ero);
+  }
+
+  CVodeFree(&cvode_mem);
+
+  cvode_mem = CVodeCreate(CV_BDF, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  for (miter=FUNC; miter <= DIAG; miter++) {
+    ero = ZERO;
+    NV_Ith_S(y,0) = TWO;
+    NV_Ith_S(y,1) = ZERO;
+      
+    firstrun = (miter==FUNC);
+    if (firstrun) {
+      flag = CVodeInit(cvode_mem, f1, P1_T0, y);
+      if(check_flag(&flag, "CVodeInit", 1)) return(1);
+      flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+      if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+    } else {
+      flag = CVodeSetIterType(cvode_mem, CV_NEWTON);
+      if(check_flag(&flag, "CVodeSetIterType", 1)) ++nerr;
+      flag = CVodeReInit(cvode_mem, P1_T0, y);
+      if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+    }
+      
+    flag = PrepareNextRun(cvode_mem, CV_BDF, miter, 0, 0);     
+    if(check_flag(&flag, "PrepareNextRun", 1)) return(1);
+
+    PrintHeader1();
+      
+    for(iout=1, tout=P1_T1; iout <= P1_NOUT; iout++, tout += P1_DTOUT) {
+      flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+      check_flag(&flag, "CVode", 1);
+      temp_flag = CVodeGetLastOrder(cvode_mem, &qu);
+      if(check_flag(&temp_flag, "CVodeGetLastOrder", 1)) ++nerr;
+      temp_flag = CVodeGetLastStep(cvode_mem, &hu);
+      if(check_flag(&temp_flag, "CVodeGetLastStep", 1)) ++nerr;
+      PrintOutput1(t, NV_Ith_S(y,0), NV_Ith_S(y,1), qu, hu);
+      if (flag != CV_SUCCESS) {
+        nerr++;
+        break;
+      }
+      if (iout%2 == 0) {
+        er = SUNRabs(NV_Ith_S(y,0)) / abstol;
+        if (er > ero) ero = er;
+        if (er > P1_TOL_FACTOR) {
+          nerr++;
+          PrintErrOutput(P1_TOL_FACTOR);
+        }
+      }
+    }
+    
+    PrintFinalStats(cvode_mem, miter, ero);
+  }
+
+  CVodeFree(&cvode_mem);
+  N_VDestroy_Serial(y);
+
+  return(nerr);
+}
+
+static void PrintIntro1(void)
+{
+  printf("Demonstration program for CVODE package - direct linear solvers\n");
+  printf("\n\n");
+  printf("Problem 1: Van der Pol oscillator\n");
+  printf(" xdotdot - 3*(1 - x^2)*xdot + x = 0, x(0) = 2, xdot(0) = 0\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf(" neq = %d,  reltol = %.2Lg,  abstol = %.2Lg",
+	 P1_NEQ, RTOL, ATOL);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf(" neq = %d,  reltol = %.2g,  abstol = %.2g",
+	 P1_NEQ, RTOL, ATOL);
+#else
+  printf(" neq = %d,  reltol = %.2g,  abstol = %.2g",
+	 P1_NEQ, RTOL, ATOL);
+#endif
+}
+
+static void PrintHeader1(void)
+{
+  printf("\n     t           x              xdot         qu     hu \n");
+
+  return;
+}
+
+static void PrintOutput1(realtype t, realtype y0, realtype y1, int qu, realtype hu)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%10.5Lf    %12.5Le   %12.5Le   %2d    %6.4Le\n", t, y0, y1, qu, hu);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%10.5f    %12.5e   %12.5e   %2d    %6.4e\n", t, y0, y1, qu, hu);
+#else
+  printf("%10.5f    %12.5e   %12.5e   %2d    %6.4e\n", t, y0, y1, qu, hu);
+#endif
+
+  return;
+}
+
+static int f1(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y0, y1;
+  
+  y0 = NV_Ith_S(y,0);
+  y1 = NV_Ith_S(y,1);
+
+  NV_Ith_S(ydot,0) = y1;
+  NV_Ith_S(ydot,1) = (ONE - SUNSQR(y0))* P1_ETA * y1 - y0;
+
+  return(0);
+} 
+
+static int Jac1(long int N, realtype tn,
+                N_Vector y, N_Vector fy, 
+                DlsMat J, void *user_data,
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y0, y1;
+
+  y0 = NV_Ith_S(y,0);
+  y1 = NV_Ith_S(y,1);
+
+  DENSE_ELEM(J,0,1) = ONE;
+  DENSE_ELEM(J,1,0) = -TWO * P1_ETA * y0 * y1 - ONE;
+  DENSE_ELEM(J,1,1) = P1_ETA * (ONE - SUNSQR(y0));
+
+  return(0);
+}
+
+static int Problem2(void)
+{
+  realtype reltol=RTOL, abstol=ATOL, t, tout, er, erm, ero;
+  int miter, flag, temp_flag, nerr=0;
+  N_Vector y;
+  void *cvode_mem;
+  booleantype firstrun;
+  int qu, iout;
+  realtype hu;
+
+  y = NULL;
+  cvode_mem = NULL;
+
+  y = N_VNew_Serial(P2_NEQ);
+  if(check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  PrintIntro2();
+
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  for (miter=FUNC; miter <= BAND_DQ; miter++) {
+    if ((miter==DENSE_USER) || (miter==DENSE_DQ)) continue;
+    ero = ZERO;
+    N_VConst(ZERO, y);
+    NV_Ith_S(y,0) = ONE;
+      
+    firstrun = (miter==FUNC);
+    if (firstrun) {
+      flag = CVodeInit(cvode_mem, f2, P2_T0, y);
+      if(check_flag(&flag, "CVodeInit", 1)) return(1);
+      flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+      if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+    } else {
+      flag = CVodeSetIterType(cvode_mem, CV_NEWTON);
+      if(check_flag(&flag, "CVodeSetIterType", 1)) ++nerr;
+      flag = CVodeReInit(cvode_mem, P2_T0, y);
+      if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+    }
+      
+    flag = PrepareNextRun(cvode_mem, CV_ADAMS, miter, P2_MU, P2_ML);
+    if(check_flag(&flag, "PrepareNextRun", 1)) return(1);
+
+    PrintHeader2();
+
+    for(iout=1, tout=P2_T1; iout <= P2_NOUT; iout++, tout*=P2_TOUT_MULT) {
+      flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+      check_flag(&flag, "CVode", 1);
+      erm = MaxError(y, t);
+      temp_flag = CVodeGetLastOrder(cvode_mem, &qu);
+      if(check_flag(&temp_flag, "CVodeGetLastOrder", 1)) ++nerr;
+      temp_flag = CVodeGetLastStep(cvode_mem, &hu);
+      if(check_flag(&temp_flag, "CVodeGetLastStep", 1)) ++nerr;
+      PrintOutput2(t, erm, qu, hu);
+      if (flag != CV_SUCCESS) {
+        nerr++;
+        break;
+      }
+      er = erm / abstol;
+        if (er > ero) ero = er;
+        if (er > P2_TOL_FACTOR) {
+          nerr++;
+          PrintErrOutput(P2_TOL_FACTOR);
+        }
+    }
+    
+    PrintFinalStats(cvode_mem, miter, ero);
+  }
+
+  CVodeFree(&cvode_mem);
+
+  cvode_mem = CVodeCreate(CV_BDF, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  for (miter=FUNC; miter <= BAND_DQ; miter++) {
+    if ((miter==DENSE_USER) || (miter==DENSE_DQ)) continue;
+    ero = ZERO;
+    N_VConst(ZERO, y);
+    NV_Ith_S(y,0) = ONE;
+      
+    firstrun = (miter==FUNC);
+    if (firstrun) {
+      flag = CVodeInit(cvode_mem, f2, P2_T0, y);
+      if(check_flag(&flag, "CVodeInit", 1)) return(1);
+      flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+      if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+    } else {
+      flag = CVodeSetIterType(cvode_mem, CV_NEWTON);
+      if(check_flag(&flag, "CVodeSetIterType", 1)) ++nerr;
+      flag = CVodeReInit(cvode_mem, P2_T0, y);
+      if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+    }
+
+    flag = PrepareNextRun(cvode_mem, CV_BDF, miter, P2_MU, P2_ML);
+    if(check_flag(&flag, "PrepareNextRun", 1)) return(1);
+
+    PrintHeader2();
+      
+    for(iout=1, tout=P2_T1; iout <= P2_NOUT; iout++, tout*=P2_TOUT_MULT) {
+      flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+      check_flag(&flag, "CVode", 1);
+      erm = MaxError(y, t);
+      temp_flag = CVodeGetLastOrder(cvode_mem, &qu);
+      if(check_flag(&temp_flag, "CVodeGetLastOrder", 1)) ++nerr;
+      temp_flag = CVodeGetLastStep(cvode_mem, &hu);
+      if(check_flag(&temp_flag, "CVodeGetLastStep", 1)) ++nerr;
+      PrintOutput2(t, erm, qu, hu);
+      if (flag != CV_SUCCESS) {
+        nerr++;
+        break;
+      }
+      er = erm / abstol;
+        if (er > ero) ero = er;
+        if (er > P2_TOL_FACTOR) {
+          nerr++;
+          PrintErrOutput(P2_TOL_FACTOR);
+        }
+    }
+    
+    PrintFinalStats(cvode_mem, miter, ero);
+  }
+
+  CVodeFree(&cvode_mem);
+  N_VDestroy_Serial(y);
+
+  return(nerr);
+}
+
+static void PrintIntro2(void)
+{
+  printf("\n\n-------------------------------------------------------------");
+  printf("\n-------------------------------------------------------------");
+  printf("\n\nProblem 2: ydot = A * y, where A is a banded lower\n");
+  printf("triangular matrix derived from 2-D advection PDE\n\n");
+  printf(" neq = %d, ml = %d, mu = %d\n", P2_NEQ, P2_ML, P2_MU);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf(" itol = %s, reltol = %.2Lg, abstol = %.2Lg", "CV_SS", RTOL, ATOL);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf(" itol = %s, reltol = %.2g, abstol = %.2g", "CV_SS", RTOL, ATOL);
+#else
+  printf(" itol = %s, reltol = %.2g, abstol = %.2g", "CV_SS", RTOL, ATOL);
+#endif
+}
+
+static void PrintHeader2(void)
+{
+  printf("\n      t        max.err      qu     hu \n");
+
+  return;
+}
+
+static void PrintOutput2(realtype t, realtype erm, int qu, realtype hu)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%10.3Lf  %12.4Le   %2d   %12.4Le\n", t, erm, qu, hu);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%10.3f  %12.4e   %2d   %12.4e\n", t, erm, qu, hu);
+#else
+  printf("%10.3f  %12.4e   %2d   %12.4e\n", t, erm, qu, hu);
+#endif
+
+  return;
+}
+
+static int f2(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  long int i, j, k;
+  realtype d, *ydata, *dydata;
+  
+  ydata = N_VGetArrayPointer_Serial(y);
+  dydata = N_VGetArrayPointer_Serial(ydot);
+
+  /*
+     Excluding boundaries, 
+
+     ydot    = f    = -2 y    + alpha1 * y      + alpha2 * y
+         i,j    i,j       i,j             i-1,j             i,j-1
+  */
+
+  for (j=0; j < P2_MESHY; j++) {
+    for (i=0; i < P2_MESHX; i++) {
+      k = i + j * P2_MESHX;
+      d = -TWO*ydata[k];
+      if (i != 0) d += P2_ALPH1 * ydata[k-1];
+      if (j != 0) d += P2_ALPH2 * ydata[k-P2_MESHX];
+      dydata[k] = d;
+    }
+  }
+
+  return(0);
+}
+
+static int Jac2(long int N, long int mu, long int ml, 
+                realtype tn, N_Vector y, N_Vector fy, 
+                DlsMat J, void *user_data,
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int i, j, k;
+  realtype *kthCol;
+
+  /*
+     The components of f(t,y) which depend on y    are
+                                               i,j
+     f    , f      , and f      : 
+      i,j    i+1,j        i,j+1
+
+     f    = -2 y    + alpha1 * y      + alpha2 * y
+      i,j       i,j             i-1,j             i,j-1
+
+     f      = -2 y      + alpha1 * y    + alpha2 * y
+      i+1,j       i+1,j             i,j             i+1,j-1
+
+     f      = -2 y      + alpha1 * y        + alpha2 * y
+      i,j+1       i,j+1             i-1,j+1             i,j
+  */
+
+  for (j=0; j < P2_MESHY; j++) {
+    for (i=0; i < P2_MESHX; i++) {
+      k = i + j * P2_MESHX;
+      kthCol = BAND_COL(J,k);
+      BAND_COL_ELEM(kthCol,k,k) = -TWO;
+      if (i != P2_MESHX-1) BAND_COL_ELEM(kthCol,k+1,k) = P2_ALPH1;
+      if (j != P2_MESHY-1) BAND_COL_ELEM(kthCol,k+P2_MESHX,k) = P2_ALPH2;
+    }
+  }
+
+  return(0);
+}
+
+static realtype MaxError(N_Vector y, realtype t)
+{
+  long int i, j, k;
+  realtype *ydata, er, ex=ZERO, yt, maxError=ZERO, ifact_inv, jfact_inv=ONE;
+  
+  if (t == ZERO) return(ZERO);
+
+  ydata = N_VGetArrayPointer_Serial(y);
+  if (t <= THIRTY) ex = SUNRexp(-TWO*t);
+  
+  for (j = 0; j < P2_MESHY; j++) {
+    ifact_inv = ONE;
+    for (i = 0; i < P2_MESHX; i++) {
+      k = i + j * P2_MESHX;
+      yt = SUNRpowerI(t,i+j) * ex * ifact_inv * jfact_inv;
+      er = SUNRabs(ydata[k] - yt);
+      if (er > maxError) maxError = er;
+      ifact_inv /= (i+1);
+    }
+    jfact_inv /= (j+1);
+  }
+  return(maxError);
+}
+
+static int PrepareNextRun(void *cvode_mem, int lmm, int miter, 
+                          long int mu, long int ml)
+{
+  int flag = CV_SUCCESS;
+  
+  printf("\n\n-------------------------------------------------------------");
+  
+  printf("\n\nLinear Multistep Method : ");
+  if (lmm == CV_ADAMS) {
+    printf("ADAMS\n");
+  } else {
+    printf("BDF\n");
+  }
+  
+  printf("Iteration               : ");
+  if (miter == FUNC) {
+    printf("FUNCTIONAL\n");
+  } else {
+    printf("NEWTON\n");
+    printf("Linear Solver           : ");
+    switch(miter) {
+    case DENSE_USER : 
+      printf("Dense, User-Supplied Jacobian\n");
+      flag = CVDense(cvode_mem, P1_NEQ);
+      check_flag(&flag, "CVDense", 1);
+      if(flag != CV_SUCCESS) break;
+      flag = CVDlsSetDenseJacFn(cvode_mem, Jac1);
+      check_flag(&flag, "CVDlsSetDenseJacFn", 1);
+      break;
+    case DENSE_DQ   : 
+      printf("Dense, Difference Quotient Jacobian\n");
+      flag = CVDlsSetDenseJacFn(cvode_mem, NULL);
+      check_flag(&flag, "CVDlsSetDenseJacFn", 1);
+      break;
+    case DIAG       : 
+      printf("Diagonal Jacobian\n");
+      flag = CVDiag(cvode_mem);
+      check_flag(&flag, "CVDiag", 1);
+      break;
+    case BAND_USER  : 
+      printf("Band, User-Supplied Jacobian\n");
+      flag = CVBand(cvode_mem, P2_NEQ, mu, ml);
+      check_flag(&flag, "CVBand", 1);
+      if(flag != CV_SUCCESS) break;
+      flag = CVDlsSetBandJacFn(cvode_mem, Jac2);
+      check_flag(&flag, "CVDlsSetBandJacFn", 1);
+      break;
+    case BAND_DQ  :   
+      printf("Band, Difference Quotient Jacobian\n");
+      flag = CVDlsSetBandJacFn(cvode_mem, NULL);
+      check_flag(&flag, "CVDlsSetBandJacFn", 1);
+      break;    
+    }
+  }
+
+  return(flag);
+}
+
+static void PrintErrOutput(realtype tol_factor)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("\n\n Error exceeds %Lg * tolerance \n\n", tol_factor);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("\n\n Error exceeds %g * tolerance \n\n", tol_factor);
+#else
+  printf("\n\n Error exceeds %g * tolerance \n\n", tol_factor);
+#endif
+
+  return;
+}
+
+static void PrintFinalStats(void *cvode_mem, int miter, realtype ero)
+{
+  long int lenrw, leniw, nst, nfe, nsetups, nni, ncfn, netf;
+  long int lenrwLS, leniwLS, nje, nfeLS;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  printf("\n Final statistics for this run:\n\n");
+  printf(" CVode real workspace length              = %4ld \n", lenrw);
+  printf(" CVode integer workspace length           = %4ld \n", leniw);
+  printf(" Number of steps                          = %4ld \n",  nst);
+  printf(" Number of f-s                            = %4ld \n",  nfe);
+  printf(" Number of setups                         = %4ld \n",  nsetups);
+  printf(" Number of nonlinear iterations           = %4ld \n",  nni);
+  printf(" Number of nonlinear convergence failures = %4ld \n",  ncfn);
+  printf(" Number of error test failures            = %4ld \n\n",netf);
+  
+  if (miter != FUNC) {
+    switch(miter) {
+    case DENSE_USER :
+    case DENSE_DQ   :
+      flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+      check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+      flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+      check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+      flag = CVDlsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+      check_flag(&flag, "CVDlsGetWorkSpace", 1);
+      break;
+    case BAND_USER  :
+    case BAND_DQ    :
+      flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+      check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+      flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+      check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+      flag = CVDlsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+      check_flag(&flag, "CVDlsGetWorkSpace", 1);
+      break;  
+    case DIAG       :
+      nje = nsetups;
+      flag = CVDiagGetNumRhsEvals(cvode_mem, &nfeLS);
+      check_flag(&flag, "CVDiagGetNumRhsEvals", 1);
+      flag = CVDiagGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+      check_flag(&flag, "CVDiagGetWorkSpace", 1);
+      break;
+    }
+    printf(" Linear solver real workspace length      = %4ld \n", lenrwLS);
+    printf(" Linear solver integer workspace length   = %4ld \n", leniwLS);
+    printf(" Number of Jacobian evaluations           = %4ld  \n", nje);
+    printf(" Number of f evals. in linear solver      = %4ld \n\n", nfeLS);
+  }
+  
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf(" Error overrun = %.3Lf \n", ero);
+#else
+  printf(" Error overrun = %.3f \n", ero);
+#endif
+}
+
+static void PrintErrInfo(int nerr)
+{
+  printf("\n\n-------------------------------------------------------------");
+  printf("\n-------------------------------------------------------------");
+  printf("\n\n Number of errors encountered = %d \n", nerr);
+
+  return;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvDirectDemo_ls.out b/examples/cvode/serial/cvDirectDemo_ls.out
new file mode 100644
index 0000000..7c8b837
--- /dev/null
+++ b/examples/cvode/serial/cvDirectDemo_ls.out
@@ -0,0 +1,500 @@
+Demonstration program for CVODE package - direct linear solvers
+
+
+Problem 1: Van der Pol oscillator
+ xdotdot - 3*(1 - x^2)*xdot + x = 0, x(0) = 2, xdot(0) = 0
+ neq = 2,  reltol = 0,  abstol = 1e-06
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : FUNCTIONAL
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    5    9.8626e-02
+   3.60761    -2.12392e-05   -3.16877e+00    5    2.2756e-02
+   5.82239    -1.68010e+00    2.91060e-01    4    1.4079e-01
+   8.03716     9.57611e-05    3.16900e+00    5    2.0348e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  123 
+ CVode integer workspace length           =   57 
+ Number of steps                          =  196 
+ Number of f-s                            =  391 
+ Number of setups                         =    0 
+ Number of nonlinear iterations           =  387 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   15 
+
+ Error overrun = 95.761 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Dense, User-Supplied Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    7    6.5178e-02
+   3.60761     2.42943e-06   -3.16870e+00    7    2.0626e-02
+   5.82239    -1.68010e+00    2.91062e-01    7    1.3038e-01
+   8.03716     1.99078e-05    3.16879e+00    7    2.3923e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  123 
+ CVode integer workspace length           =   57 
+ Number of steps                          =  266 
+ Number of f-s                            =  366 
+ Number of setups                         =   46 
+ Number of nonlinear iterations           =  362 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   23 
+
+ Linear solver real workspace length      =    8 
+ Linear solver integer workspace length   =    2 
+ Number of Jacobian evaluations           =    5  
+ Number of f evals. in linear solver      =    0 
+
+ Error overrun = 19.908 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Dense, Difference Quotient Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    5    6.5835e-02
+   3.60761    -2.28046e-05   -3.16879e+00    6    3.1773e-02
+   5.82239    -1.68010e+00    2.91059e-01    6    9.3514e-02
+   8.03716    -9.84768e-06    3.16869e+00    6    2.8096e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  123 
+ CVode integer workspace length           =   57 
+ Number of steps                          =  195 
+ Number of f-s                            =  268 
+ Number of setups                         =   34 
+ Number of nonlinear iterations           =  264 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   15 
+
+ Linear solver real workspace length      =    8 
+ Linear solver integer workspace length   =    2 
+ Number of Jacobian evaluations           =    4  
+ Number of f evals. in linear solver      =    8 
+
+ Error overrun = 22.805 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Diagonal Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91054e-01    6    5.9553e-02
+   3.60761     6.36071e-05   -3.16853e+00    6    2.8912e-02
+   5.82239    -1.68011e+00    2.91057e-01    5    9.8123e-02
+   8.03716    -8.21358e-05    3.16848e+00    6    2.2328e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  123 
+ CVode integer workspace length           =   57 
+ Number of steps                          =  241 
+ Number of f-s                            =  340 
+ Number of setups                         =   42 
+ Number of nonlinear iterations           =  336 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   20 
+
+ Linear solver real workspace length      =    6 
+ Linear solver integer workspace length   =    3 
+ Number of Jacobian evaluations           =   42  
+ Number of f evals. in linear solver      =   42 
+
+ Error overrun = 82.136 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : FUNCTIONAL
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    4    9.6100e-02
+   3.60761    -1.35636e-04   -3.16912e+00    5    1.5675e-02
+   5.82239    -1.68009e+00    2.91063e-01    5    1.1210e-01
+   8.03716     2.20969e-04    3.16937e+00    5    1.4732e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  109 
+ CVode integer workspace length           =   50 
+ Number of steps                          =  262 
+ Number of f-s                            =  498 
+ Number of setups                         =    0 
+ Number of nonlinear iterations           =  494 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   22 
+
+ Error overrun = 220.969 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Dense, User-Supplied Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    5    1.1991e-01
+   3.60761    -5.46907e-05   -3.16886e+00    5    1.6403e-02
+   5.82239    -1.68010e+00    2.91061e-01    4    1.0146e-01
+   8.03716     1.54312e-04    3.16917e+00    4    9.5378e-03
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  109 
+ CVode integer workspace length           =   50 
+ Number of steps                          =  265 
+ Number of f-s                            =  358 
+ Number of setups                         =   40 
+ Number of nonlinear iterations           =  354 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   18 
+
+ Linear solver real workspace length      =    8 
+ Linear solver integer workspace length   =    2 
+ Number of Jacobian evaluations           =    5  
+ Number of f evals. in linear solver      =    0 
+
+ Error overrun = 154.312 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Dense, Difference Quotient Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91058e-01    4    8.1067e-02
+   3.60761    -5.84200e-05   -3.16886e+00    4    1.1360e-02
+   5.82239    -1.68010e+00    2.91062e-01    5    6.4941e-02
+   8.03716     9.61737e-05    3.16899e+00    5    1.5216e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  109 
+ CVode integer workspace length           =   50 
+ Number of steps                          =  276 
+ Number of f-s                            =  367 
+ Number of setups                         =   40 
+ Number of nonlinear iterations           =  363 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   17 
+
+ Linear solver real workspace length      =    8 
+ Linear solver integer workspace length   =    2 
+ Number of Jacobian evaluations           =    6  
+ Number of f evals. in linear solver      =   12 
+
+ Error overrun = 96.174 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Diagonal Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    5    1.1430e-01
+   3.60761    -9.83501e-05   -3.16900e+00    5    1.6712e-02
+   5.82239    -1.68009e+00    2.91063e-01    4    8.1261e-02
+   8.03716     1.66644e-04    3.16920e+00    4    1.0547e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  109 
+ CVode integer workspace length           =   50 
+ Number of steps                          =  266 
+ Number of f-s                            =  360 
+ Number of setups                         =   39 
+ Number of nonlinear iterations           =  356 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   17 
+
+ Linear solver real workspace length      =    6 
+ Linear solver integer workspace length   =    3 
+ Number of Jacobian evaluations           =   39  
+ Number of f evals. in linear solver      =   39 
+
+ Error overrun = 166.644 
+
+
+-------------------------------------------------------------
+-------------------------------------------------------------
+
+Problem 2: ydot = A * y, where A is a banded lower
+triangular matrix derived from 2-D advection PDE
+
+ neq = 25, ml = 5, mu = 0
+ itol = CV_SS, reltol = 0, abstol = 1e-06
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : FUNCTIONAL
+
+      t        max.err      qu     hu 
+     0.010    1.4690e-07    3     1.1459e-02
+     0.100    5.2543e-07    4     4.1413e-02
+     1.000    1.2207e-06    5     6.8243e-02
+    10.000    9.7711e-07    3     2.8481e-01
+   100.000    1.5230e-07    1     6.0816e-01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  514 
+ CVode integer workspace length           =   57 
+ Number of steps                          =  341 
+ Number of f-s                            =  601 
+ Number of setups                         =    0 
+ Number of nonlinear iterations           =  597 
+ Number of nonlinear convergence failures =   79 
+ Number of error test failures            =    0 
+
+ Error overrun = 1.221 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Diagonal Jacobian
+
+      t        max.err      qu     hu 
+     0.010    1.3734e-07    3     1.0327e-02
+     0.100    2.4956e-06    3     2.3048e-02
+     1.000    4.2328e-06    4     4.3778e-02
+    10.000    9.7335e-07    4     3.1286e-01
+   100.000    8.2265e-10    1     3.9630e+02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  514 
+ CVode integer workspace length           =   57 
+ Number of steps                          =  154 
+ Number of f-s                            =  219 
+ Number of setups                         =   33 
+ Number of nonlinear iterations           =  215 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =    5 
+
+ Linear solver real workspace length      =   75 
+ Linear solver integer workspace length   =    3 
+ Number of Jacobian evaluations           =   33  
+ Number of f evals. in linear solver      =   33 
+
+ Error overrun = 4.233 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Band, User-Supplied Jacobian
+
+      t        max.err      qu     hu 
+     0.010    1.3670e-07    3     1.2164e-02
+     0.100    4.7920e-07    4     4.2115e-02
+     1.000    2.5077e-07    6     1.0365e-01
+    10.000    6.0790e-07    4     4.7206e-01
+   100.000    5.7390e-08    2     1.0750e+01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  514 
+ CVode integer workspace length           =   57 
+ Number of steps                          =  149 
+ Number of f-s                            =  184 
+ Number of setups                         =   32 
+ Number of nonlinear iterations           =  180 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =    6 
+
+ Linear solver real workspace length      =  425 
+ Linear solver integer workspace length   =   25 
+ Number of Jacobian evaluations           =    3  
+ Number of f evals. in linear solver      =    0 
+
+ Error overrun = 0.608 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Band, Difference Quotient Jacobian
+
+      t        max.err      qu     hu 
+     0.010    1.4285e-07    3     1.3840e-02
+     0.100    5.7337e-07    4     4.2111e-02
+     1.000    7.3281e-07    5     6.3684e-02
+    10.000    3.8507e-07    5     2.6026e-01
+   100.000    4.1035e-12    1     6.2591e+01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  514 
+ CVode integer workspace length           =   57 
+ Number of steps                          =  124 
+ Number of f-s                            =  142 
+ Number of setups                         =   24 
+ Number of nonlinear iterations           =  138 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =    1 
+
+ Linear solver real workspace length      =  425 
+ Linear solver integer workspace length   =   25 
+ Number of Jacobian evaluations           =    3  
+ Number of f evals. in linear solver      =   18 
+
+ Error overrun = 0.733 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : FUNCTIONAL
+
+      t        max.err      qu     hu 
+     0.010    5.5931e-07    2     8.1257e-03
+     0.100    5.2896e-06    3     1.7769e-02
+     1.000    2.3209e-06    5     7.5291e-02
+    10.000    1.2861e-06    5     2.7791e-01
+   100.000    1.6770e-08    1     8.7560e-01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  339 
+ CVode integer workspace length           =   50 
+ Number of steps                          =  377 
+ Number of f-s                            =  698 
+ Number of setups                         =    0 
+ Number of nonlinear iterations           =  694 
+ Number of nonlinear convergence failures =   56 
+ Number of error test failures            =    1 
+
+ Error overrun = 5.290 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Diagonal Jacobian
+
+      t        max.err      qu     hu 
+     0.010    5.6365e-07    2     8.1241e-03
+     0.100    7.9753e-07    4     1.8910e-02
+     1.000    5.9100e-06    5     5.1976e-02
+    10.000    1.1253e-05    4     9.7523e-02
+   100.000    1.1182e-09    1     8.7300e+01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  339 
+ CVode integer workspace length           =   50 
+ Number of steps                          =  202 
+ Number of f-s                            =  315 
+ Number of setups                         =   63 
+ Number of nonlinear iterations           =  311 
+ Number of nonlinear convergence failures =    5 
+ Number of error test failures            =    7 
+
+ Linear solver real workspace length      =   75 
+ Linear solver integer workspace length   =    3 
+ Number of Jacobian evaluations           =   63  
+ Number of f evals. in linear solver      =   63 
+
+ Error overrun = 11.253 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Band, User-Supplied Jacobian
+
+      t        max.err      qu     hu 
+     0.010    5.6372e-07    2     8.1246e-03
+     0.100    5.2784e-06    3     1.7819e-02
+     1.000    1.8169e-06    5     6.0110e-02
+    10.000    5.4997e-07    5     4.1661e-01
+   100.000    1.7764e-09    2     2.9748e+01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  339 
+ CVode integer workspace length           =   50 
+ Number of steps                          =  119 
+ Number of f-s                            =  144 
+ Number of setups                         =   25 
+ Number of nonlinear iterations           =  140 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =    2 
+
+ Linear solver real workspace length      =  425 
+ Linear solver integer workspace length   =   25 
+ Number of Jacobian evaluations           =    3  
+ Number of f evals. in linear solver      =    0 
+
+ Error overrun = 5.278 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Band, Difference Quotient Jacobian
+
+      t        max.err      qu     hu 
+     0.010    5.6492e-07    2     8.1361e-03
+     0.100    5.9968e-06    3     1.7105e-02
+     1.000    1.6902e-06    5     8.7628e-02
+    10.000    5.2314e-07    5     3.1091e-01
+   100.000    1.4380e-09    2     2.1635e+01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  339 
+ CVode integer workspace length           =   50 
+ Number of steps                          =  121 
+ Number of f-s                            =  145 
+ Number of setups                         =   24 
+ Number of nonlinear iterations           =  141 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =    1 
+
+ Linear solver real workspace length      =  425 
+ Linear solver integer workspace length   =   25 
+ Number of Jacobian evaluations           =    3  
+ Number of f evals. in linear solver      =   18 
+
+ Error overrun = 5.997 
+
+
+-------------------------------------------------------------
+-------------------------------------------------------------
+
+ Number of errors encountered = 0 
diff --git a/examples/cvode/serial/cvDiurnal_kry.c b/examples/cvode/serial/cvDiurnal_kry.c
new file mode 100644
index 0000000..4dd127a
--- /dev/null
+++ b/examples/cvode/serial/cvDiurnal_kry.c
@@ -0,0 +1,807 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4848 $
+ * $Date: 2016-08-03 15:51:16 -0700 (Wed, 03 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * 10 x 10 mesh, with simple polynomial initial profiles.
+ * The problem is solved with CVODE, with the BDF/GMRES
+ * method (i.e. using the CVSPGMR linear solver) and the
+ * block-diagonal part of the Newton matrix as a left
+ * preconditioner. A copy of the block-diagonal part of the
+ * Jacobian is saved and conditionally reused within the Precond
+ * routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvode/cvode.h>              /* main integrator header file */
+#include <cvode/cvode_spgmr.h>        /* prototypes & constants for CVSPGMR */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fct., macros */
+#include <sundials/sundials_dense.h>  /* use generic dense solver in precond. */
+#include <sundials/sundials_types.h>  /* definition of realtype */
+#include <sundials/sundials_math.h>   /* contains the macros ABS, SUNSQR, EXP */
+
+/* Problem Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+#define NUM_SPECIES  2                 /* number of species         */
+#define KH           RCONST(4.0e-6)    /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)     /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)    /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)  /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           ZERO                 /* initial time */
+#define NOUT         12                   /* number of output times */
+#define TWOHR        RCONST(7200.0)       /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)       /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898)  /* pi */ 
+
+#define XMIN         ZERO                 /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define YMIN         RCONST(30.0)         /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+#define XMID         RCONST(10.0)         /* grid midpoints in x,y */          
+#define YMID         RCONST(40.0)
+
+#define MX           10             /* MX = number of x mesh points */
+#define MY           10             /* MY = number of y mesh points */
+#define NSMX         20             /* NSMX = NUM_SPECIES*MX */
+#define MM           (MX*MY)        /* MM = MX*MY */
+
+/* CVodeInit Constants */
+
+#define RTOL    RCONST(1.0e-5)    /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)     /* value of C1 or C2 at which tolerances */
+                                  /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)      /* scalar absolute tolerance */
+#define NEQ     (NUM_SPECIES*MM)  /* NEQ = number of equations */
+
+/* User-defined vector and matrix accessor macros: IJKth, IJth */
+
+/* IJKth is defined in order to isolate the translation from the
+   mathematical 3-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. IJth is defined in order to
+   write code which indexes into small dense matrices with a (row,column)
+   pair, where 1 <= row, column <= NUM_SPECIES.   
+   
+   IJKth(vdata,i,j,k) references the element in the vdata array for
+   species i at mesh point (j,k), where 1 <= i <= NUM_SPECIES,
+   0 <= j <= MX-1, 0 <= k <= MY-1. The vdata array is obtained via
+   the macro call vdata = N_VGetArrayPointer_Serial(v), where v is an N_Vector. 
+   For each mesh point (j,k), the elements for species i and i+1 are
+   contiguous within vdata.
+
+   IJth(a,i,j) references the (i,j)th entry of the small matrix realtype **a,
+   where 1 <= i,j <= NUM_SPECIES. The small matrix routines in sundials_dense.h
+   work with matrices stored by column in a 2-dimensional array. In C,
+   arrays are indexed starting at 0, not 1. */
+
+#define IJKth(vdata,i,j,k) (vdata[i-1 + (j)*NUM_SPECIES + (k)*NSMX])
+#define IJth(a,i,j)        (a[j-1][i-1])
+
+/* Type : UserData 
+   contains preconditioner blocks, pivot arrays, and problem constants */
+
+typedef struct {
+  realtype **P[MX][MY], **Jbd[MX][MY];
+  long int *pivot[MX][MY];
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+} *UserData;
+
+/* Private Helper Functions */
+
+static UserData AllocUserData(void);
+static void InitUserData(UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy);
+static void PrintOutput(void *cvode_mem, N_Vector u, realtype t);
+static void PrintFinalStats(void *cvode_mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+static int jtv(N_Vector v, N_Vector Jv, realtype t,
+               N_Vector y, N_Vector fy,
+               void *user_data, N_Vector tmp);
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, realtype gamma,
+                   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Allocate memory, and set problem data, initial values, tolerances */ 
+  u = N_VNew_Serial(NEQ);
+  if(check_flag((void *)u, "N_VNew_Serial", 0)) return(1);
+  data = AllocUserData();
+  if(check_flag((void *)data, "AllocUserData", 2)) return(1);
+  InitUserData(data);
+  SetInitialProfiles(u, data->dx, data->dy);
+  abstol=ATOL; 
+  reltol=RTOL;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Call CVSpgmr to specify the linear solver CVSPGMR 
+   * with left preconditioning and the maximum Krylov dimension maxl */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+
+  /* set the JAcobian-times-vector function */
+  flag = CVSpilsSetJacTimesVecFn(cvode_mem, jtv);
+  if(check_flag(&flag, "CVSpilsSetJacTimesVecFn", 1)) return(1);
+
+  /* Set the preconditioner solve and setup functions */
+  flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+  if(check_flag(&flag, "CVSpilsSetPreconditioner", 1)) return(1);
+
+  /* In loop over output points, call CVode, print results, test for error */
+  printf(" \n2-species diurnal advection-diffusion problem\n\n");
+  for (iout=1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    PrintOutput(cvode_mem, u, t);
+    if(check_flag(&flag, "CVode", 1)) break;
+  }
+
+  PrintFinalStats(cvode_mem);
+
+  /* Free memory */
+  N_VDestroy_Serial(u);
+  FreeUserData(data);
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Allocate memory for data structure of type UserData */
+
+static UserData AllocUserData(void)
+{
+  int jx, jy;
+  UserData data;
+
+  data = (UserData) malloc(sizeof *data);
+
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      (data->P)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->Jbd)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+    }
+  }
+
+  return(data);
+}
+
+/* Load problem constants in data */
+
+static void InitUserData(UserData data)
+{
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/(MX-1);
+  data->dy = (YMAX-YMIN)/(MY-1);
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(TWO*data->dx);
+  data->vdco = (ONE/SUNSQR(data->dy))*KV0;
+}
+
+/* Free data memory */
+
+static void FreeUserData(UserData data)
+{
+  int jx, jy;
+
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      destroyMat((data->P)[jx][jy]);
+      destroyMat((data->Jbd)[jx][jy]);
+      destroyArray((data->pivot)[jx][jy]);
+    }
+  }
+
+  free(data);
+}
+
+/* Set initial conditions in u */
+
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy)
+{
+  int jx, jy;
+  realtype x, y, cx, cy;
+  realtype *udata;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profiles of c1 and c2 into u vector */
+
+  for (jy=0; jy < MY; jy++) {
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - YMID));
+    cy = ONE - cy + RCONST(0.5)*SUNSQR(cy);
+    for (jx=0; jx < MX; jx++) {
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - XMID));
+      cx = ONE - cx + RCONST(0.5)*SUNSQR(cx);
+      IJKth(udata,1,jx,jy) = C1_SCALE*cx*cy; 
+      IJKth(udata,2,jx,jy) = C2_SCALE*cx*cy;
+    }
+  }
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+
+static void PrintOutput(void *cvode_mem, N_Vector u, realtype t)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  int mxh = MX/2 - 1, myh = MY/2 - 1, mx1 = MX - 1, my1 = MY - 1;
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("t = %.2Le   no. steps = %ld   order = %d   stepsize = %.2Le\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#else
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#endif
+}
+
+/* Get and print final statistics */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics.. \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwLS = %5ld     leniwLS = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld\n"                  , nst);
+  printf("nfe     = %5ld     nfeLS   = %5ld\n"  , nfe, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n"  , nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n"  , nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n"  , npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute RHS function f(t,u). */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  realtype *udata, *dudata;
+  int jx, jy, idn, iup, ileft, iright;
+  UserData data;
+
+  data = (UserData) user_data;
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Set diurnal rate coefficients. */
+
+  s = sin(data->om*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    data->q4 = SUNRexp(-A4/s);
+  } else {
+      q3 = ZERO;
+      data->q4 = ZERO;
+  }
+
+  /* Make local copies of problem variables, for efficiency. */
+
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Loop over all grid points. */
+
+  for (jy=0; jy < MY; jy++) {
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    idn = (jy == 0) ? 1 : -1;
+    iup = (jy == MY-1) ? -1 : 1;
+    for (jx=0; jx < MX; jx++) {
+
+      /* Extract c1 and c2, and set kinetic rate terms. */
+
+      c1 = IJKth(udata,1,jx,jy); 
+      c2 = IJKth(udata,2,jx,jy);
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + TWO*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms. */
+
+      c1dn = IJKth(udata,1,jx,jy+idn);
+      c2dn = IJKth(udata,2,jx,jy+idn);
+      c1up = IJKth(udata,1,jx,jy+iup);
+      c2up = IJKth(udata,2,jx,jy+iup);
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms. */
+
+      ileft = (jx == 0) ? 1 : -1;
+      iright =(jx == MX-1) ? -1 : 1;
+      c1lt = IJKth(udata,1,jx+ileft,jy); 
+      c2lt = IJKth(udata,2,jx+ileft,jy);
+      c1rt = IJKth(udata,1,jx+iright,jy);
+      c2rt = IJKth(udata,2,jx+iright,jy);
+      hord1 = hordco*(c1rt - TWO*c1 + c1lt);
+      hord2 = hordco*(c2rt - TWO*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into udot. */
+
+      IJKth(dudata, 1, jx, jy) = vertd1 + hord1 + horad1 + rkin1; 
+      IJKth(dudata, 2, jx, jy) = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+  return(0);
+}
+
+
+/* Jacobian-times-vector routine. */
+
+static int jtv(N_Vector v, N_Vector Jv, realtype t,
+               N_Vector u, N_Vector fu,
+               void *user_data, N_Vector tmp)
+{
+  realtype c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt, c1rt, c2rt;
+  realtype v1, v2, v1dn, v2dn, v1up, v2up, v1lt, v2lt, v1rt, v2rt;
+  realtype Jv1, Jv2;
+  realtype cydn, cyup;
+  realtype s, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  int jx, jy, idn, iup, ileft, iright;
+  realtype *udata, *vdata, *Jvdata;
+  UserData data;
+
+  data = (UserData) user_data;
+
+  udata = N_VGetArrayPointer_Serial(u);
+  vdata = N_VGetArrayPointer_Serial(v);
+  Jvdata = N_VGetArrayPointer_Serial(Jv);
+
+  /* Set diurnal rate coefficients. */
+
+  s = sin(data->om*t);
+  if (s > ZERO) {
+    data->q4 = SUNRexp(-A4/s);
+  } else {
+    data->q4 = ZERO;
+  }
+
+  /* Make local copies of problem variables, for efficiency. */
+
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Loop over all grid points. */
+
+  for (jy=0; jy < MY; jy++) {
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+
+    idn = (jy == 0) ? 1 : -1;
+    iup = (jy == MY-1) ? -1 : 1;
+
+    for (jx=0; jx < MX; jx++) {
+
+      Jv1 = ZERO;
+      Jv2 = ZERO;
+
+      /* Extract c1 and c2 at the current location and at neighbors */
+
+      c1 = IJKth(udata,1,jx,jy); 
+      c2 = IJKth(udata,2,jx,jy);
+
+      v1 = IJKth(vdata,1,jx,jy); 
+      v2 = IJKth(vdata,2,jx,jy);
+
+      c1dn = IJKth(udata,1,jx,jy+idn);
+      c2dn = IJKth(udata,2,jx,jy+idn);
+      c1up = IJKth(udata,1,jx,jy+iup);
+      c2up = IJKth(udata,2,jx,jy+iup);
+
+      v1dn = IJKth(vdata,1,jx,jy+idn);
+      v2dn = IJKth(vdata,2,jx,jy+idn);
+      v1up = IJKth(vdata,1,jx,jy+iup);
+      v2up = IJKth(vdata,2,jx,jy+iup);
+
+      ileft = (jx == 0) ? 1 : -1;
+      iright =(jx == MX-1) ? -1 : 1;
+
+      c1lt = IJKth(udata,1,jx+ileft,jy); 
+      c2lt = IJKth(udata,2,jx+ileft,jy);
+      c1rt = IJKth(udata,1,jx+iright,jy);
+      c2rt = IJKth(udata,2,jx+iright,jy);
+
+      v1lt = IJKth(vdata,1,jx+ileft,jy); 
+      v2lt = IJKth(vdata,2,jx+ileft,jy);
+      v1rt = IJKth(vdata,1,jx+iright,jy);
+      v2rt = IJKth(vdata,2,jx+iright,jy);
+
+      /* Set kinetic rate terms. */
+
+      /* 
+	 rkin1 = -Q1*C3 * c1 - Q2 * c1*c2 + q4coef * c2  + TWO*C3*q3;
+         rkin2 =  Q1*C3 * c1 - Q2 * c1*c2 - q4coef * c2; 
+      */
+
+      Jv1 += -(Q1*C3 + Q2*c2) * v1  +  (q4coef - Q2*c1) * v2;
+      Jv2 +=  (Q1*C3 - Q2*c2) * v1  -  (q4coef + Q2*c1) * v2;
+
+      /* Set vertical diffusion terms. */
+
+      /* 
+	 vertd1 = -(cyup+cydn) * c1 + cyup * c1up + cydn * c1dn;
+	 vertd2 = -(cyup+cydn) * c2 + cyup * c2up + cydn * c2dn;
+      */
+
+      Jv1 += -(cyup+cydn) * v1  +  cyup * v1up  +  cydn * v1dn;
+      Jv2 += -(cyup+cydn) * v2  +  cyup * v2up  +  cydn * v2dn;
+
+      /* Set horizontal diffusion and advection terms. */
+
+      /* 
+	 hord1 = hordco*(c1rt - TWO*c1 + c1lt);
+	 hord2 = hordco*(c2rt - TWO*c2 + c2lt);
+      */
+
+      Jv1 += hordco*(v1rt - TWO*v1 + v1lt);
+      Jv2 += hordco*(v2rt - TWO*v2 + v2lt);
+
+      /* 
+	 horad1 = horaco*(c1rt - c1lt);
+	 horad2 = horaco*(c2rt - c2lt);
+      */
+
+      Jv1 += horaco*(v1rt - v1lt);
+      Jv2 += horaco*(v2rt - v2lt);
+
+      /* Load two components of J*v */
+
+      /* 
+	 IJKth(dudata, 1, jx, jy) = vertd1 + hord1 + horad1 + rkin1; 
+	 IJKth(dudata, 2, jx, jy) = vertd2 + hord2 + horad2 + rkin2;
+      */
+
+      IJKth(Jvdata, 1, jx, jy) = Jv1;
+      IJKth(Jvdata, 2, jx, jy) = Jv2;
+
+    }
+
+  }
+
+  return(0);
+
+}
+
+
+/* Preconditioner setup routine. Generate and preprocess P. */
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, realtype gamma,
+                   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3)
+{
+  realtype c1, c2, cydn, cyup, diag, ydn, yup, q4coef, dely, verdco, hordco;
+  realtype **(*P)[MY], **(*Jbd)[MY];
+  long int *(*pivot)[MY], ier;
+  int jx, jy;
+  realtype *udata, **a, **j;
+  UserData data;
+  
+  /* Make local copies of pointers in user_data, and of pointer to u's data */
+  
+  data = (UserData) user_data;
+  P = data->P;
+  Jbd = data->Jbd;
+  pivot = data->pivot;
+  udata = N_VGetArrayPointer_Serial(u);
+  
+  if (jok) {
+    
+    /* jok = TRUE: Copy Jbd to P */
+    
+    for (jy=0; jy < MY; jy++)
+      for (jx=0; jx < MX; jx++)
+        denseCopy(Jbd[jx][jy], P[jx][jy], NUM_SPECIES, NUM_SPECIES);
+    
+    *jcurPtr = FALSE;
+    
+  }
+  
+  else {
+    /* jok = FALSE: Generate Jbd from scratch and copy to P */
+    
+    /* Make local copies of problem variables, for efficiency. */
+    
+    q4coef = data->q4;
+    dely = data->dy;
+    verdco = data->vdco;
+    hordco  = data->hdco;
+    
+    /* Compute 2x2 diagonal Jacobian blocks (using q4 values 
+       computed on the last f call).  Load into P. */
+    
+    for (jy=0; jy < MY; jy++) {
+      ydn = YMIN + (jy - RCONST(0.5))*dely;
+      yup = ydn + dely;
+      cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+      cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+      diag = -(cydn + cyup + TWO*hordco);
+      for (jx=0; jx < MX; jx++) {
+        c1 = IJKth(udata,1,jx,jy);
+        c2 = IJKth(udata,2,jx,jy);
+        j = Jbd[jx][jy];
+        a = P[jx][jy];
+        IJth(j,1,1) = (-Q1*C3 - Q2*c2) + diag;
+        IJth(j,1,2) = -Q2*c1 + q4coef;
+        IJth(j,2,1) = Q1*C3 - Q2*c2;
+        IJth(j,2,2) = (-Q2*c1 - q4coef) + diag;
+        denseCopy(j, a, NUM_SPECIES, NUM_SPECIES);
+      }
+    }
+    
+    *jcurPtr = TRUE;
+    
+  }
+  
+  /* Scale by -gamma */
+  
+  for (jy=0; jy < MY; jy++)
+    for (jx=0; jx < MX; jx++)
+      denseScale(-gamma, P[jx][jy], NUM_SPECIES, NUM_SPECIES);
+  
+  /* Add identity matrix and do LU decompositions on blocks in place. */
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      denseAddIdentity(P[jx][jy], NUM_SPECIES);
+      ier = denseGETRF(P[jx][jy], NUM_SPECIES, NUM_SPECIES, pivot[jx][jy]);
+      if (ier != 0) return(1);
+    }
+  }
+  
+  return(0);
+}
+
+/* Preconditioner solve routine */
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype **(*P)[MY];
+  long int *(*pivot)[MY];
+  int jx, jy;
+  realtype *zdata, *v;
+  UserData data;
+
+  /* Extract the P and pivot arrays from user_data. */
+
+  data = (UserData) user_data;
+  P = data->P;
+  pivot = data->pivot;
+  zdata = N_VGetArrayPointer_Serial(z);
+  
+  N_VScale(ONE, r, z);
+  
+  /* Solve the block-diagonal system Px = r using LU factors stored
+     in P and pivot data in pivot, and return the solution in z. */
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      v = &(IJKth(zdata, 1, jx, jy));
+      denseGETRS(P[jx][jy], NUM_SPECIES, pivot[jx][jy], v);
+    }
+  }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvDiurnal_kry.out b/examples/cvode/serial/cvDiurnal_kry.out
new file mode 100644
index 0000000..8b02132
--- /dev/null
+++ b/examples/cvode/serial/cvDiurnal_kry.out
@@ -0,0 +1,63 @@
+ 
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 219   order = 5   stepsize = 1.59e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 251   order = 5   stepsize = 3.77e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 277   order = 5   stepsize = 2.75e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 301   order = 5   stepsize = 3.87e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 343   order = 3   stepsize = 2.34e+01
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 421   order = 4   stepsize = 5.26e+02
+c1 (bot.left/middle/top rt.) =   -4.385e-06    -1.528e-06    -4.905e-06
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 445   order = 3   stepsize = 1.98e+02
+c1 (bot.left/middle/top rt.) =    4.461e-07     1.869e-07     4.842e-07
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 462   order = 5   stepsize = 2.35e+02
+c1 (bot.left/middle/top rt.) =    3.204e-09     1.203e-09     3.555e-09
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 474   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =   -1.066e-09    -3.409e-10    -1.206e-09
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 486   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =    2.614e-09     9.722e-10     2.904e-09
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 498   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =    4.649e-11     1.729e-11     5.161e-11
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 510   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =   -8.856e-14    -3.348e-14    -9.785e-14
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.107e+11     4.163e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2089     leniw   =    50
+lenrwLS =  2046     leniwLS =    10
+nst     =   510
+nfe     =   675     nfeLS   =   641
+nni     =   671     nli     =   641
+nsetups =    94     netf    =    36
+npe     =     9     nps     =  1243
+ncfn    =     0     ncfl    =     0
+
diff --git a/examples/cvode/serial/cvDiurnal_kry_bp.c b/examples/cvode/serial/cvDiurnal_kry_bp.c
new file mode 100644
index 0000000..25643dd
--- /dev/null
+++ b/examples/cvode/serial/cvDiurnal_kry_bp.c
@@ -0,0 +1,533 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * 10 x 10 mesh, with simple polynomial initial profiles.
+ * The problem is solved with CVODE, with the BDF/GMRES
+ * method (i.e. using the CVSPGMR linear solver) and a banded
+ * preconditioner, generated by difference quotients, using the
+ * module CVBANDPRE. The problem is solved with left and right
+ * preconditioning.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvode/cvode.h>             /* main integrator header file */
+#include <cvode/cvode_spgmr.h>       /* prototypes & constants for CVSPGMR solver */
+#include <cvode/cvode_bandpre.h>     /* prototypes & constants for CVBANDPRE module */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fct. and macros */
+#include <sundials/sundials_types.h> /* definition of realtype */
+#include <sundials/sundials_math.h>  /* contains the macros ABS, SUNSQR, and EXP */
+
+/* Problem Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+#define NUM_SPECIES  2                 /* number of species         */
+#define KH           RCONST(4.0e-6)    /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)     /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)    /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)  /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           ZERO                /* initial time */
+#define NOUT         12                  /* number of output times */
+#define TWOHR        RCONST(7200.0)      /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)      /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898) /* pi */ 
+
+#define XMIN         ZERO                /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define YMIN         RCONST(30.0)        /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+#define XMID         RCONST(10.0)        /* grid midpoints in x,y */          
+#define YMID         RCONST(40.0)
+
+#define MX           10             /* MX = number of x mesh points */
+#define MY           10             /* MY = number of y mesh points */
+#define NSMX         20             /* NSMX = NUM_SPECIES*MX */
+#define MM           (MX*MY)        /* MM = MX*MY */
+
+/* CVodeInit Constants */
+
+#define RTOL    RCONST(1.0e-5)   /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)    /* value of C1 or C2 at which tolerances */
+                                 /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)     /* scalar absolute tolerance */
+#define NEQ     (NUM_SPECIES*MM) /* NEQ = number of equations */
+
+/* User-defined vector and matrix accessor macros: IJKth, IJth */
+
+/* IJKth is defined in order to isolate the translation from the
+   mathematical 3-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. IJth is defined in order to
+   write code which indexes into small dense matrices with a (row,column)
+   pair, where 1 <= row, column <= NUM_SPECIES.   
+   
+   IJKth(vdata,i,j,k) references the element in the vdata array for
+   species i at mesh point (j,k), where 1 <= i <= NUM_SPECIES,
+   0 <= j <= MX-1, 0 <= k <= MY-1. The vdata array is obtained via
+   the macro call vdata = N_VGetArrayPointer_Serial(v), where v is an N_Vector. 
+   For each mesh point (j,k), the elements for species i and i+1 are
+   contiguous within vdata.
+
+   IJth(a,i,j) references the (i,j)th entry of the small matrix realtype **a,
+   where 1 <= i,j <= NUM_SPECIES. The small matrix routines in dense.h
+   work with matrices stored by column in a 2-dimensional array. In C,
+   arrays are indexed starting at 0, not 1. */
+
+#define IJKth(vdata,i,j,k) (vdata[i-1 + (j)*NUM_SPECIES + (k)*NSMX])
+#define IJth(a,i,j)        (a[j-1][i-1])
+
+/* Type : UserData 
+   contains preconditioner blocks, pivot arrays, and problem constants */
+
+typedef struct {
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+} *UserData;
+
+/* Private Helper Functions */
+
+static void InitUserData(UserData data);
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy);
+static void PrintIntro(long int mu, long int ml);
+static void PrintOutput(void *cvode_mem, N_Vector u, realtype t);
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Function Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int flag, iout, jpre;
+  long int ml, mu;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Allocate and initialize u, and set problem data and tolerances */ 
+  u = N_VNew_Serial(NEQ);
+  if(check_flag((void *)u, "N_VNew_Serial", 0)) return(1);
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  InitUserData(data);
+  SetInitialProfiles(u, data->dx, data->dy);
+  abstol = ATOL; 
+  reltol = RTOL;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Call CVSpgmr to specify the linear solver CVSPGMR 
+     with left preconditioning and the maximum Krylov dimension maxl */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+
+  /* Call CVBandPreInit to initialize band preconditioner */
+  ml = mu = 2;
+  flag = CVBandPrecInit(cvode_mem, NEQ, mu, ml);
+  if(check_flag(&flag, "CVBandPrecInit", 0)) return(1);
+
+  PrintIntro(mu, ml);
+
+  /* Loop over jpre (= PREC_LEFT, PREC_RIGHT), and solve the problem */
+
+  for (jpre = PREC_LEFT; jpre <= PREC_RIGHT; jpre++) {
+    
+    /* On second run, re-initialize u, the solver, and CVSPGMR */
+    
+    if (jpre == PREC_RIGHT) {
+      
+      SetInitialProfiles(u, data->dx, data->dy);
+      
+      flag = CVodeReInit(cvode_mem, T0, u);
+      if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+
+      flag = CVSpilsSetPrecType(cvode_mem, PREC_RIGHT);
+      if(check_flag(&flag, "CVSpilsSetPrecType", 1)) return(1);
+
+      flag = CVBandPrecInit(cvode_mem, NEQ, mu, ml);
+      if(check_flag(&flag, "CVBandPrecInit", 0)) return(1);
+
+      printf("\n\n-------------------------------------------------------");
+      printf("------------\n");
+    }
+    
+    printf("\n\nPreconditioner type is:  jpre = %s\n\n",
+           (jpre == PREC_LEFT) ? "PREC_LEFT" : "PREC_RIGHT");
+    
+    /* In loop over output points, call CVode, print results, test for error */
+    
+    for (iout = 1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+      flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+      check_flag(&flag, "CVode", 1);
+      PrintOutput(cvode_mem, u, t);
+      if (flag != CV_SUCCESS) {
+        break;
+      }
+    }
+    
+    /* Print final statistics */
+    
+    PrintFinalStats(cvode_mem);
+    
+  } /* End of jpre loop */
+
+  /* Free memory */
+  N_VDestroy_Serial(u);
+  free(data);
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Load problem constants in data */
+
+static void InitUserData(UserData data)
+{
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/(MX-1);
+  data->dy = (YMAX-YMIN)/(MY-1);
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(TWO*data->dx);
+  data->vdco = (ONE/SUNSQR(data->dy))*KV0;
+}
+
+/* Set initial conditions in u */
+
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy)
+{
+  int jx, jy;
+  realtype x, y, cx, cy;
+  realtype *udata;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profiles of c1 and c2 into u vector */
+
+  for (jy = 0; jy < MY; jy++) {
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - YMID));
+    cy = ONE - cy + RCONST(0.5)*SUNSQR(cy);
+    for (jx = 0; jx < MX; jx++) {
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - XMID));
+      cx = ONE - cx + RCONST(0.5)*SUNSQR(cx);
+      IJKth(udata,1,jx,jy) = C1_SCALE*cx*cy; 
+      IJKth(udata,2,jx,jy) = C2_SCALE*cx*cy;
+    }
+  }
+}
+
+static void PrintIntro(long int mu, long int ml)
+{
+  printf("2-species diurnal advection-diffusion problem, %d by %d mesh\n",
+         MX, MY);
+  printf("SPGMR solver; band preconditioner; mu = %ld, ml = %ld\n\n",
+         mu, ml);
+
+  return;
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+
+static void PrintOutput(void *cvode_mem, N_Vector u,realtype t)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  int mxh = MX/2 - 1, myh = MY/2 - 1, mx1 = MX - 1, my1 = MY - 1;
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("t = %.2Le   no. steps = %ld   order = %d   stepsize = %.2Le\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#else
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#endif
+}
+
+/* Get and print final statistics */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int lenrwBP, leniwBP;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  long int nfeBP;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1);
+
+  flag = CVBandPrecGetWorkSpace(cvode_mem, &lenrwBP, &leniwBP);
+  check_flag(&flag, "CVBandPrecGetWorkSpace", 1);
+  flag = CVBandPrecGetNumRhsEvals(cvode_mem, &nfeBP);
+  check_flag(&flag, "CVBandPrecGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics.. \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwls = %5ld     leniwls = %5ld\n", lenrwLS, leniwLS);
+  printf("lenrwbp = %5ld     leniwbp = %5ld\n", lenrwBP, leniwBP);
+  printf("nst     = %5ld\n"                  , nst);
+  printf("nfe     = %5ld     nfetot  = %5ld\n"  , nfe, nfe+nfeLS+nfeBP);
+  printf("nfeLS   = %5ld     nfeBP   = %5ld\n"  , nfeLS, nfeBP);
+  printf("nni     = %5ld     nli     = %5ld\n"  , nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n"  , nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n"  , npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Function called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u, N_Vector udot,void *user_data)
+{
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  realtype *udata, *dudata;
+  int idn, iup, ileft, iright, jx, jy;
+  UserData data;
+
+  data = (UserData) user_data;
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Set diurnal rate coefficients. */
+
+  s = sin(data->om*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    data->q4 = SUNRexp(-A4/s);
+  } else {
+    q3 = ZERO;
+    data->q4 = ZERO;
+  }
+
+  /* Make local copies of problem variables, for efficiency. */
+
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Loop over all grid points. */
+
+  for (jy = 0; jy < MY; jy++) {
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    idn = (jy == 0) ? 1 : -1;
+    iup = (jy == MY-1) ? -1 : 1;
+    for (jx = 0; jx < MX; jx++) {
+
+      /* Extract c1 and c2, and set kinetic rate terms. */
+
+      c1 = IJKth(udata,1,jx,jy); 
+      c2 = IJKth(udata,2,jx,jy);
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + TWO*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms. */
+
+      c1dn = IJKth(udata,1,jx,jy+idn);
+      c2dn = IJKth(udata,2,jx,jy+idn);
+      c1up = IJKth(udata,1,jx,jy+iup);
+      c2up = IJKth(udata,2,jx,jy+iup);
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms. */
+
+      ileft = (jx == 0) ? 1 : -1;
+      iright =(jx == MX-1) ? -1 : 1;
+      c1lt = IJKth(udata,1,jx+ileft,jy); 
+      c2lt = IJKth(udata,2,jx+ileft,jy);
+      c1rt = IJKth(udata,1,jx+iright,jy);
+      c2rt = IJKth(udata,2,jx+iright,jy);
+      hord1 = hordco*(c1rt - TWO*c1 + c1lt);
+      hord2 = hordco*(c2rt - TWO*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into udot. */
+
+      IJKth(dudata, 1, jx, jy) = vertd1 + hord1 + horad1 + rkin1; 
+      IJKth(dudata, 2, jx, jy) = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvDiurnal_kry_bp.out b/examples/cvode/serial/cvDiurnal_kry_bp.out
new file mode 100644
index 0000000..2cb79d3
--- /dev/null
+++ b/examples/cvode/serial/cvDiurnal_kry_bp.out
@@ -0,0 +1,138 @@
+2-species diurnal advection-diffusion problem, 10 by 10 mesh
+SPGMR solver; band preconditioner; mu = 2, ml = 2
+
+
+
+Preconditioner type is:  jpre = PREC_LEFT
+
+t = 7.20e+03   no. steps = 190   order = 5   stepsize = 1.61e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 221   order = 5   stepsize = 3.83e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 246   order = 5   stepsize = 2.78e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 288   order = 4   stepsize = 1.14e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 329   order = 4   stepsize = 9.61e+01
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 401   order = 4   stepsize = 3.13e+02
+c1 (bot.left/middle/top rt.) =   -9.450e-09     3.907e-09    -1.083e-08
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 416   order = 4   stepsize = 3.68e+02
+c1 (bot.left/middle/top rt.) =    1.195e-10     4.155e-08     2.046e-10
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 430   order = 5   stepsize = 3.78e+02
+c1 (bot.left/middle/top rt.) =   -5.093e-11    -2.114e-08     2.070e-10
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 438   order = 5   stepsize = 8.51e+02
+c1 (bot.left/middle/top rt.) =   -4.172e-14    -6.618e-11     6.513e-13
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 447   order = 5   stepsize = 8.51e+02
+c1 (bot.left/middle/top rt.) =   -7.090e-20     2.812e-17     1.620e-21
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 455   order = 5   stepsize = 8.51e+02
+c1 (bot.left/middle/top rt.) =   -7.186e-20    -1.098e-16    -7.199e-22
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.670e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 464   order = 5   stepsize = 8.51e+02
+c1 (bot.left/middle/top rt.) =   -5.534e-20     1.005e-16     1.567e-21
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.106e+11     4.162e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2089     leniw   =    50
+lenrwls =  2046     leniwls =    10
+lenrwbp =  2400     leniwbp =   200
+nst     =   464
+nfe     =   618     nfetot  =  1197
+nfeLS   =   539     nfeBP   =    40
+nni     =   614     nli     =   539
+nsetups =    90     netf    =    34
+npe     =     8     nps     =  1077
+ncfn    =     0     ncfl    =     0
+
+
+
+-------------------------------------------------------------------
+
+
+Preconditioner type is:  jpre = PREC_RIGHT
+
+t = 7.20e+03   no. steps = 219   order = 5   stepsize = 1.55e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 251   order = 5   stepsize = 3.59e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 279   order = 5   stepsize = 3.58e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 301   order = 5   stepsize = 2.33e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 330   order = 5   stepsize = 9.92e+01
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 382   order = 4   stepsize = 4.44e+02
+c1 (bot.left/middle/top rt.) =   -8.802e-11    -3.760e-09    -4.964e-11
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 403   order = 5   stepsize = 2.59e+02
+c1 (bot.left/middle/top rt.) =    7.139e-09    -2.417e-05     1.332e-07
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 418   order = 5   stepsize = 4.03e+02
+c1 (bot.left/middle/top rt.) =    2.831e-11     9.701e-10     2.116e-11
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 430   order = 5   stepsize = 6.39e+02
+c1 (bot.left/middle/top rt.) =   -2.128e-19    -7.024e-17     3.263e-16
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 442   order = 5   stepsize = 6.39e+02
+c1 (bot.left/middle/top rt.) =    1.300e-20    -4.501e-19    -8.828e-17
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 453   order = 5   stepsize = 6.39e+02
+c1 (bot.left/middle/top rt.) =   -6.029e-20    -4.677e-18     3.192e-16
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 464   order = 5   stepsize = 6.39e+02
+c1 (bot.left/middle/top rt.) =    4.164e-20     4.512e-18     7.737e-16
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.107e+11     4.163e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2089     leniw   =    50
+lenrwls =  2046     leniwls =    10
+lenrwbp =  2400     leniwbp =   200
+nst     =   464
+nfe     =   582     nfetot  =  1277
+nfeLS   =   655     nfeBP   =    40
+nni     =   578     nli     =   655
+nsetups =    78     netf    =    23
+npe     =     8     nps     =  1140
+ncfn    =     0     ncfl    =     0
+
diff --git a/examples/cvode/serial/cvKrylovDemo_ls.c b/examples/cvode/serial/cvKrylovDemo_ls.c
new file mode 100644
index 0000000..c1a99ed
--- /dev/null
+++ b/examples/cvode/serial/cvKrylovDemo_ls.c
@@ -0,0 +1,730 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4848 $
+ * $Date: 2016-08-03 15:51:16 -0700 (Wed, 03 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ *
+ * This example loops through the available iterative linear solvers:
+ * SPGMR, SPBCG and SPTFQMR.
+ *
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * 10 x 10 mesh, with simple polynomial initial profiles.
+ * The problem is solved with CVODE, with the BDF/GMRES,
+ * BDF/Bi-CGStab, and BDF/TFQMR methods (i.e. using the CVSPGMR,
+ * CVSPBCG and CVSPTFQMR linear solvers) and the block-diagonal
+ * part of the Newton matrix as a left preconditioner. A copy of
+ * the block-diagonal part of the Jacobian is saved and
+ * conditionally reused within the Precond routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvode/cvode.h>             /* main integrator header file */
+#include <cvode/cvode_spgmr.h>       /* prototypes & constants for CVSPGMR solver */
+#include <cvode/cvode_spbcgs.h>      /* prototypes & constants for CVSPBCG solver */
+#include <cvode/cvode_sptfqmr.h>     /* prototypes & constants for CVSPTFQMR solver */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fct. and macros */
+#include <sundials/sundials_dense.h> /* use generic DENSE solver in preconditioning */
+#include <sundials/sundials_types.h> /* definition of realtype */
+#include <sundials/sundials_math.h>  /* contains the macros ABS, SUNSQR, and EXP */
+
+/* Problem Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+#define NUM_SPECIES  2                 /* number of species         */
+#define KH           RCONST(4.0e-6)    /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)     /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)    /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)  /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           ZERO                 /* initial time */
+#define NOUT         12                   /* number of output times */
+#define TWOHR        RCONST(7200.0)       /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)       /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898)  /* pi */ 
+
+#define XMIN         ZERO                 /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define YMIN         RCONST(30.0)         /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+#define XMID         RCONST(10.0)         /* grid midpoints in x,y */          
+#define YMID         RCONST(40.0)
+
+#define MX           10             /* MX = number of x mesh points */
+#define MY           10             /* MY = number of y mesh points */
+#define NSMX         20             /* NSMX = NUM_SPECIES*MX */
+#define MM           (MX*MY)        /* MM = MX*MY */
+
+/* CVodeInit Constants */
+
+#define RTOL    RCONST(1.0e-5)    /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)     /* value of C1 or C2 at which tolerances */
+                                  /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)      /* scalar absolute tolerance */
+#define NEQ     (NUM_SPECIES*MM)  /* NEQ = number of equations */
+
+/* Linear Solver Loop Constants */
+
+#define USE_SPGMR   0
+#define USE_SPBCG   1
+#define USE_SPTFQMR 2
+
+/* User-defined vector and matrix accessor macros: IJKth, IJth */
+
+/* IJKth is defined in order to isolate the translation from the
+   mathematical 3-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. IJth is defined in order to
+   write code which indexes into dense matrices with a (row,column)
+   pair, where 1 <= row, column <= NUM_SPECIES.   
+   
+   IJKth(vdata,i,j,k) references the element in the vdata array for
+   species i at mesh point (j,k), where 1 <= i <= NUM_SPECIES,
+   0 <= j <= MX-1, 0 <= k <= MY-1. The vdata array is obtained via
+   the macro call vdata = N_VGetArrayPointer_Serial(v), where v is an N_Vector. 
+   For each mesh point (j,k), the elements for species i and i+1 are
+   contiguous within vdata.
+
+   IJth(a,i,j) references the (i,j)th entry of the matrix realtype **a,
+   where 1 <= i,j <= NUM_SPECIES. The small matrix routines in 
+   sundials_dense.h work with matrices stored by column in a 2-dimensional 
+   array. In C, arrays are indexed starting at 0, not 1. */
+
+#define IJKth(vdata,i,j,k) (vdata[i-1 + (j)*NUM_SPECIES + (k)*NSMX])
+#define IJth(a,i,j)        (a[j-1][i-1])
+
+/* Type : UserData 
+   contains preconditioner blocks, pivot arrays, and problem constants */
+
+typedef struct {
+  realtype **P[MX][MY], **Jbd[MX][MY];
+  long int *pivot[MX][MY];
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+} *UserData;
+
+/* Private Helper Functions */
+
+static UserData AllocUserData(void);
+static void InitUserData(UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy);
+static void PrintOutput(void *cvode_mem, N_Vector u, realtype t);
+static void PrintFinalStats(void *cvode_mem, int linsolver);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, realtype gamma,
+                   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main(void)
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int linsolver, iout, flag;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Allocate memory, and set problem data, initial values, tolerances */ 
+  u = N_VNew_Serial(NEQ);
+  if(check_flag((void *)u, "N_VNew_Serial", 0)) return(1);
+  data = AllocUserData();
+  if(check_flag((void *)data, "AllocUserData", 2)) return(1);
+  InitUserData(data);
+  SetInitialProfiles(u, data->dx, data->dy);
+  abstol=ATOL; 
+  reltol=RTOL;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* START: Loop through SPGMR, SPBCG and SPTFQMR linear solver modules */
+  for (linsolver = 0; linsolver < 3; ++linsolver) {
+
+    if (linsolver != 0) {
+
+      /* Re-initialize user data */
+      InitUserData(data);
+      SetInitialProfiles(u, data->dx, data->dy);
+
+    /* Re-initialize CVode for the solution of the same problem, but
+       using a different linear solver module */
+      flag = CVodeReInit(cvode_mem, T0, u);
+      if (check_flag(&flag, "CVodeReInit", 1)) return(1);
+
+    }
+
+    /* Attach a linear solver module */
+    switch(linsolver) {
+
+    /* (a) SPGMR */
+    case(USE_SPGMR):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPGMR |\n");
+      printf(" -------\n");
+
+      /* Call CVSpgmr to specify the linear solver CVSPGMR 
+	 with left preconditioning and the maximum Krylov dimension maxl */
+      flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+      if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+
+      break;
+
+    /* (b) SPBCG */
+    case(USE_SPBCG):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPBCG |\n");
+      printf(" -------\n");
+
+      /* Call CVSpbcg to specify the linear solver CVSPBCG 
+	 with left preconditioning and the maximum Krylov dimension maxl */
+      flag = CVSpbcg(cvode_mem, PREC_LEFT, 0);
+      if(check_flag(&flag, "CVSpbcg", 1)) return(1);
+
+      break;
+
+    /* (c) SPTFQMR */
+    case(USE_SPTFQMR):
+
+      /* Print header */
+      printf(" ---------");
+      printf(" \n| SPTFQMR |\n");
+      printf(" ---------\n");
+
+      /* Call CVSptfqmr to specify the linear solver CVSPTFQMR 
+	 with left preconditioning and the maximum Krylov dimension maxl */
+      flag = CVSptfqmr(cvode_mem, PREC_LEFT, 0);
+      if(check_flag(&flag, "CVSptfqmr", 1)) return(1);
+
+      break;
+
+    }
+
+
+    /* Set preconditioner setup and solve routines Precond and PSolve,
+       and the pointer to the user-defined block data */
+    flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+    if(check_flag(&flag, "CVSpilsSetPreconditioner", 1)) return(1);
+
+    /* In loop over output points, call CVode, print results, test for error */
+    printf(" \n2-species diurnal advection-diffusion problem\n\n");
+    for (iout=1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+      flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+      PrintOutput(cvode_mem, u, t);
+      if(check_flag(&flag, "CVode", 1)) break;
+    }
+
+    PrintFinalStats(cvode_mem, linsolver);
+
+  }  /* END: Loop through SPGMR, SPBCG and SPTFQMR linear solver modules */
+
+  /* Free memory */
+  N_VDestroy_Serial(u);
+  FreeUserData(data);
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Allocate memory for data structure of type UserData */
+
+static UserData AllocUserData(void)
+{
+  int jx, jy;
+  UserData data;
+
+  data = (UserData) malloc(sizeof *data);
+
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      (data->P)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->Jbd)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+    }
+  }
+
+  return(data);
+}
+
+/* Load problem constants in data */
+
+static void InitUserData(UserData data)
+{
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/(MX-1);
+  data->dy = (YMAX-YMIN)/(MY-1);
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(TWO*data->dx);
+  data->vdco = (ONE/SUNSQR(data->dy))*KV0;
+}
+
+/* Free data memory */
+
+static void FreeUserData(UserData data)
+{
+  int jx, jy;
+
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      destroyMat((data->P)[jx][jy]);
+      destroyMat((data->Jbd)[jx][jy]);
+      destroyArray((data->pivot)[jx][jy]);
+    }
+  }
+
+  free(data);
+}
+
+/* Set initial conditions in u */
+
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy)
+{
+  int jx, jy;
+  realtype x, y, cx, cy;
+  realtype *udata;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profiles of c1 and c2 into u vector */
+
+  for (jy=0; jy < MY; jy++) {
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - YMID));
+    cy = ONE - cy + RCONST(0.5)*SUNSQR(cy);
+    for (jx=0; jx < MX; jx++) {
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - XMID));
+      cx = ONE - cx + RCONST(0.5)*SUNSQR(cx);
+      IJKth(udata,1,jx,jy) = C1_SCALE*cx*cy; 
+      IJKth(udata,2,jx,jy) = C2_SCALE*cx*cy;
+    }
+  }
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+
+static void PrintOutput(void *cvode_mem, N_Vector u, realtype t)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  int mxh = MX/2 - 1, myh = MY/2 - 1, mx1 = MX - 1, my1 = MY - 1;
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("t = %.2Le   no. steps = %ld   order = %d   stepsize = %.2Le\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#else
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#endif
+}
+
+/* Get and print final statistics */
+
+static void PrintFinalStats(void *cvode_mem, int linsolver)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics.. \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwLS = %5ld     leniwLS = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld\n"                  , nst);
+  printf("nfe     = %5ld     nfeLS   = %5ld\n"  , nfe, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n"  , nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n"  , nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n"  , npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl);
+
+  if (linsolver < 2)
+    printf("======================================================================\n\n");
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute RHS function f(t,u). */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  realtype *udata, *dudata;
+  int jx, jy, idn, iup, ileft, iright;
+  UserData data;
+
+  data = (UserData) user_data;
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Set diurnal rate coefficients. */
+
+  s = sin(data->om*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    data->q4 = SUNRexp(-A4/s);
+  } else {
+      q3 = ZERO;
+      data->q4 = ZERO;
+  }
+
+  /* Make local copies of problem variables, for efficiency. */
+
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Loop over all grid points. */
+
+  for (jy=0; jy < MY; jy++) {
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    idn = (jy == 0) ? 1 : -1;
+    iup = (jy == MY-1) ? -1 : 1;
+    for (jx=0; jx < MX; jx++) {
+
+      /* Extract c1 and c2, and set kinetic rate terms. */
+
+      c1 = IJKth(udata,1,jx,jy); 
+      c2 = IJKth(udata,2,jx,jy);
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + TWO*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms. */
+
+      c1dn = IJKth(udata,1,jx,jy+idn);
+      c2dn = IJKth(udata,2,jx,jy+idn);
+      c1up = IJKth(udata,1,jx,jy+iup);
+      c2up = IJKth(udata,2,jx,jy+iup);
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms. */
+
+      ileft = (jx == 0) ? 1 : -1;
+      iright =(jx == MX-1) ? -1 : 1;
+      c1lt = IJKth(udata,1,jx+ileft,jy); 
+      c2lt = IJKth(udata,2,jx+ileft,jy);
+      c1rt = IJKth(udata,1,jx+iright,jy);
+      c2rt = IJKth(udata,2,jx+iright,jy);
+      hord1 = hordco*(c1rt - TWO*c1 + c1lt);
+      hord2 = hordco*(c2rt - TWO*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into udot. */
+
+      IJKth(dudata, 1, jx, jy) = vertd1 + hord1 + horad1 + rkin1; 
+      IJKth(dudata, 2, jx, jy) = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+  return(0);
+}
+
+/* Preconditioner setup routine. Generate and preprocess P. */
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, realtype gamma,
+                   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3)
+{
+  realtype c1, c2, cydn, cyup, diag, ydn, yup, q4coef, dely, verdco, hordco;
+  realtype **(*P)[MY], **(*Jbd)[MY];
+  long int *(*pivot)[MY], ier;
+  int jx, jy;
+  realtype *udata, **a, **j;
+  UserData data;
+  
+  /* Make local copies of pointers in user_data, and of pointer to u's data */
+  
+  data = (UserData) user_data;
+  P = data->P;
+  Jbd = data->Jbd;
+  pivot = data->pivot;
+  udata = N_VGetArrayPointer_Serial(u);
+  
+  if (jok) {
+    
+    /* jok = TRUE: Copy Jbd to P */
+    
+    for (jy=0; jy < MY; jy++)
+      for (jx=0; jx < MX; jx++)
+        denseCopy(Jbd[jx][jy], P[jx][jy], NUM_SPECIES, NUM_SPECIES);
+    
+    *jcurPtr = FALSE;
+    
+  }
+  
+  else {
+    /* jok = FALSE: Generate Jbd from scratch and copy to P */
+    
+    /* Make local copies of problem variables, for efficiency. */
+    
+    q4coef = data->q4;
+    dely = data->dy;
+    verdco = data->vdco;
+    hordco  = data->hdco;
+    
+    /* Compute 2x2 diagonal Jacobian blocks (using q4 values 
+       computed on the last f call).  Load into P. */
+    
+    for (jy=0; jy < MY; jy++) {
+      ydn = YMIN + (jy - RCONST(0.5))*dely;
+      yup = ydn + dely;
+      cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+      cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+      diag = -(cydn + cyup + TWO*hordco);
+      for (jx=0; jx < MX; jx++) {
+        c1 = IJKth(udata,1,jx,jy);
+        c2 = IJKth(udata,2,jx,jy);
+        j = Jbd[jx][jy];
+        a = P[jx][jy];
+        IJth(j,1,1) = (-Q1*C3 - Q2*c2) + diag;
+        IJth(j,1,2) = -Q2*c1 + q4coef;
+        IJth(j,2,1) = Q1*C3 - Q2*c2;
+        IJth(j,2,2) = (-Q2*c1 - q4coef) + diag;
+        denseCopy(j, a, NUM_SPECIES, NUM_SPECIES);
+      }
+    }
+    
+    *jcurPtr = TRUE;
+    
+  }
+  
+  /* Scale by -gamma */
+  
+  for (jy=0; jy < MY; jy++)
+    for (jx=0; jx < MX; jx++)
+      denseScale(-gamma, P[jx][jy], NUM_SPECIES, NUM_SPECIES);
+  
+  /* Add identity matrix and do LU decompositions on blocks in place. */
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      denseAddIdentity(P[jx][jy], NUM_SPECIES);
+      ier =denseGETRF(P[jx][jy], NUM_SPECIES, NUM_SPECIES, pivot[jx][jy]);
+      if (ier != 0) return(1);
+    }
+  }
+  
+  return(0);
+}
+
+/* Preconditioner solve routine */
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype **(*P)[MY];
+  long int *(*pivot)[MY];
+  int jx, jy;
+  realtype *zdata, *v;
+  UserData data;
+
+  /* Extract the P and pivot arrays from user_data. */
+
+  data = (UserData) user_data;
+  P = data->P;
+  pivot = data->pivot;
+  zdata = N_VGetArrayPointer_Serial(z);
+  
+  N_VScale(ONE, r, z);
+  
+  /* Solve the block-diagonal system Px = r using LU factors stored
+     in P and pivot data in pivot, and return the solution in z. */
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      v = &(IJKth(zdata, 1, jx, jy));
+      denseGETRS(P[jx][jy], NUM_SPECIES, pivot[jx][jy], v);
+    }
+  }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvKrylovDemo_ls.out b/examples/cvode/serial/cvKrylovDemo_ls.out
new file mode 100644
index 0000000..54b2bf2
--- /dev/null
+++ b/examples/cvode/serial/cvKrylovDemo_ls.out
@@ -0,0 +1,202 @@
+ ------- 
+| SPGMR |
+ -------
+ 
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 219   order = 5   stepsize = 1.59e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 251   order = 5   stepsize = 3.77e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 277   order = 5   stepsize = 2.75e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 301   order = 5   stepsize = 3.87e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 343   order = 3   stepsize = 2.34e+01
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 421   order = 4   stepsize = 5.26e+02
+c1 (bot.left/middle/top rt.) =   -4.385e-06    -1.528e-06    -4.905e-06
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 445   order = 3   stepsize = 1.98e+02
+c1 (bot.left/middle/top rt.) =    4.461e-07     1.869e-07     4.842e-07
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 462   order = 5   stepsize = 2.35e+02
+c1 (bot.left/middle/top rt.) =    3.204e-09     1.203e-09     3.555e-09
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 474   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =   -1.066e-09    -3.409e-10    -1.206e-09
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 486   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =    2.614e-09     9.722e-10     2.904e-09
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 498   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =    4.649e-11     1.729e-11     5.161e-11
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 510   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =   -8.856e-14    -3.348e-14    -9.785e-14
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.107e+11     4.163e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2089     leniw   =    50
+lenrwLS =  2046     leniwLS =    10
+nst     =   510
+nfe     =   675     nfeLS   =   641
+nni     =   671     nli     =   641
+nsetups =    94     netf    =    36
+npe     =     9     nps     =  1243
+ncfn    =     0     ncfl    =     0
+
+======================================================================
+
+ ------- 
+| SPBCG |
+ -------
+ 
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 190   order = 5   stepsize = 1.58e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 222   order = 5   stepsize = 3.81e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 246   order = 5   stepsize = 4.34e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 282   order = 4   stepsize = 1.71e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 317   order = 5   stepsize = 9.48e+01
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 369   order = 4   stepsize = 5.46e+02
+c1 (bot.left/middle/top rt.) =   -1.286e-09    -1.138e-09    -1.297e-09
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 385   order = 4   stepsize = 3.54e+02
+c1 (bot.left/middle/top rt.) =    3.396e-14     2.448e-11    -2.220e-14
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 399   order = 5   stepsize = 3.72e+02
+c1 (bot.left/middle/top rt.) =    1.607e-14    -1.589e-11     2.156e-13
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 410   order = 5   stepsize = 6.46e+02
+c1 (bot.left/middle/top rt.) =   -3.759e-13    -7.684e-12    -3.258e-13
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 421   order = 5   stepsize = 6.46e+02
+c1 (bot.left/middle/top rt.) =   -9.205e-14    -1.287e-11     2.328e-13
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 433   order = 5   stepsize = 6.46e+02
+c1 (bot.left/middle/top rt.) =   -3.952e-21     9.479e-19    -3.924e-20
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 444   order = 5   stepsize = 6.46e+02
+c1 (bot.left/middle/top rt.) =    1.131e-26    -2.041e-22    -7.893e-29
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.107e+11     4.163e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2089     leniw   =    50
+lenrwLS =  1800     leniwLS =     9
+nst     =   444
+nfe     =   573     nfeLS   =   968
+nni     =   569     nli     =   484
+nsetups =    76     netf    =    27
+npe     =     8     nps     =  1457
+ncfn    =     0     ncfl    =     0
+
+======================================================================
+
+ --------- 
+| SPTFQMR |
+ ---------
+ 
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 218   order = 5   stepsize = 1.44e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 250   order = 5   stepsize = 3.27e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 275   order = 5   stepsize = 3.49e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 309   order = 4   stepsize = 1.92e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 337   order = 5   stepsize = 1.24e+02
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 388   order = 4   stepsize = 5.10e+02
+c1 (bot.left/middle/top rt.) =    9.865e-08     1.252e-05     1.407e-07
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 405   order = 4   stepsize = 2.84e+02
+c1 (bot.left/middle/top rt.) =   -1.668e-09     5.311e-07    -6.632e-09
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 419   order = 5   stepsize = 5.07e+02
+c1 (bot.left/middle/top rt.) =   -1.792e-09     6.186e-07    -7.318e-09
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 431   order = 5   stepsize = 7.73e+02
+c1 (bot.left/middle/top rt.) =    1.682e-11    -9.299e-09     8.107e-11
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 441   order = 5   stepsize = 7.73e+02
+c1 (bot.left/middle/top rt.) =    1.919e-15    -3.196e-13     6.625e-15
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 450   order = 5   stepsize = 7.73e+02
+c1 (bot.left/middle/top rt.) =    2.380e-19    -4.543e-16     1.071e-18
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 459   order = 5   stepsize = 7.73e+02
+c1 (bot.left/middle/top rt.) =   -8.763e-21     5.632e-16    -4.431e-21
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.107e+11     4.163e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2089     leniw   =    50
+lenrwLS =  2200     leniwLS =    11
+nst     =   459
+nfe     =   582     nfeLS   =  1248
+nni     =   578     nli     =   520
+nsetups =    71     netf    =    23
+npe     =     8     nps     =  1910
+ncfn    =     0     ncfl    =     0
+
diff --git a/examples/cvode/serial/cvKrylovDemo_prec.c b/examples/cvode/serial/cvKrylovDemo_prec.c
new file mode 100644
index 0000000..aaa7976
--- /dev/null
+++ b/examples/cvode/serial/cvKrylovDemo_prec.c
@@ -0,0 +1,1142 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4868 $
+ * $Date: 2016-08-19 10:16:31 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * --------------------------------------------------------------------
+ * Demonstration program for CVODE - Krylov linear solver.
+ * ODE system from ns-species interaction PDE in 2 dimensions.
+ * 
+ * This program solves a stiff ODE system that arises from a system
+ * of partial differential equations. The PDE system is a food web
+ * population model, with predator-prey interaction and diffusion on
+ * the unit square in two dimensions. The dependent variable vector is:
+ *
+ *        1   2        ns
+ *  c = (c , c , ..., c  )
+ *
+ * and the PDEs are as follows:
+ *
+ *    i               i      i
+ *  dc /dt  =  d(i)*(c    + c   )  +  f (x,y,c)  (i=1,...,ns)
+ *                    xx     yy        i   
+ *
+ * where
+ *
+ *                 i          ns         j
+ *  f (x,y,c)  =  c *(b(i) + sum a(i,j)*c )
+ *   i                       j=1                                         
+ *                                                                       
+ * The number of species is ns = 2*np, with the first np being prey
+ * and the last np being predators. The coefficients a(i,j), b(i),
+ * d(i) are:
+ *
+ *  a(i,i) = -a  (all i)
+ *  a(i,j) = -g  (i <= np, j > np)
+ *  a(i,j) =  e  (i > np, j <= np)
+ *  b(i) =  b*(1 + alpha*x*y)  (i <= np)
+ *  b(i) = -b*(1 + alpha*x*y)  (i > np)
+ *  d(i) = Dprey  (i <= np)
+ *  d(i) = Dpred  (i > np)
+ *
+ * The spatial domain is the unit square. The final time is 10.
+ * The boundary conditions are: normal derivative = 0.
+ * A polynomial in x and y is used to set the initial conditions.
+ *
+ * The PDEs are discretized by central differencing on an MX by MY mesh.
+ *
+ * The resulting ODE system is stiff.
+ *
+ * The ODE system is solved using Newton iteration and the CVSPGMR
+ * linear solver (scaled preconditioned GMRES).
+ *
+ * The preconditioner matrix used is the product of two matrices:
+ * (1) A matrix, only defined implicitly, based on a fixed number
+ * of Gauss-Seidel iterations using the diffusion terms only.
+ * (2) A block-diagonal matrix based on the partial derivatives
+ * of the interaction terms f only, using block-grouping (computing
+ * only a subset of the ns by ns blocks).
+ *
+ * Four different runs are made for this problem.
+ * The product preconditoner is applied on the left and on the
+ * right. In each case, both the modified and classical Gram-Schmidt
+ * options are tested.
+ * In the series of runs, CVodeInit and CVSpgmr are called only
+ * for the first run, whereas CVodeReInit and CVReInitSpgmr are
+ * called for each of the remaining three runs.
+ *
+ * A problem description, performance statistics at selected output
+ * times, and final statistics are written to standard output.
+ * On the first run, solution values are also printed at output
+ * times. Error and warning messages are written to standard error,
+ * but there should be no such messages.
+ *
+ * Note: This program requires the dense linear solver functions
+ * newDenseMat, newLintArray, denseAddIdentity, denseGETRF, denseGETRS, 
+ * destroyMat and destroyArray.
+ *
+ * Note: This program assumes the sequential implementation for the
+ * type N_Vector and uses the N_VGetArrayPointer_Serial function to 
+ * gain access to the contiguous array of components of an N_Vector.
+ * --------------------------------------------------------------------
+ * Reference: Peter N. Brown and Alan C. Hindmarsh, Reduced Storage
+ * Matrix Methods in Stiff ODE Systems, J. Appl. Math. & Comp., 31
+ * (1989), pp. 40-91.  Also available as Lawrence Livermore National
+ * Laboratory Report UCRL-95088, Rev. 1, June 1987.
+ * --------------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvode/cvode.h>             /* main integrator header file */
+#include <cvode/cvode_spgmr.h>       /* prototypes & constants for CVSPGMR solver */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fct. and macros */
+#include <sundials/sundials_dense.h> /* use generic DENSE solver in preconditioning */
+#include <sundials/sundials_types.h> /* definition of realtype */
+#include <sundials/sundials_math.h>  /* contains the macros ABS and SUNSQR */
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Problem Specification Constants */
+
+#define AA    ONE               /* AA = a */
+#define EE    RCONST(1.0e4)     /* EE = e */
+#define GG    RCONST(0.5e-6)    /* GG = g */
+#define BB    ONE               /* BB = b */
+#define DPREY ONE
+#define DPRED RCONST(0.5)
+#define ALPH  ONE
+#define NP    3
+#define NS    (2*NP)
+
+/* Method Constants */
+
+#define MX    6
+#define MY    6
+#define MXNS  (MX*NS)
+#define AX    ONE
+#define AY    ONE
+#define DX    (AX/(realtype)(MX-1))
+#define DY    (AY/(realtype)(MY-1))
+#define MP    NS
+#define MQ    (MX*MY)
+#define MXMP  (MX*MP)
+#define NGX   2
+#define NGY   2
+#define NGRP  (NGX*NGY)
+#define ITMAX 5
+
+/* CVodeInit Constants */
+
+#define NEQ  (NS*MX*MY)
+#define T0   ZERO
+#define RTOL RCONST(1.0e-5)
+#define ATOL RCONST(1.0e-5)
+
+/* CVSpgmr Constants */
+
+#define MAXL 0     /* => use default = MIN(NEQ, 5)            */
+#define DELT ZERO  /* => use default = 0.05                   */
+
+/* Output Constants */
+
+#define T1        RCONST(1.0e-8)
+#define TOUT_MULT RCONST(10.0)
+#define DTOUT     ONE
+#define NOUT      18
+
+/* Note: The value for species i at mesh point (j,k) is stored in */
+/* component number (i-1) + j*NS + k*NS*MX of an N_Vector,        */
+/* where 1 <= i <= NS, 0 <= j < MX, 0 <= k < MY.                  */
+
+/* Structure for user data */
+
+typedef struct {
+  realtype **P[NGRP];
+  long int *pivot[NGRP];
+  int ns, mxns;
+  int mp, mq, mx, my, ngrp, ngx, ngy, mxmp;
+  int jgx[NGX+1], jgy[NGY+1], jigx[MX], jigy[MY];
+  int jxr[NGX], jyr[NGY];
+  realtype acoef[NS][NS], bcoef[NS], diff[NS];
+  realtype cox[NS], coy[NS], dx, dy, srur;
+  realtype fsave[NEQ];
+  N_Vector rewt;
+  void *cvode_mem;
+} *WebData;
+
+/* Private Helper Functions */
+
+static WebData AllocUserData(void);
+static void InitUserData(WebData wdata);
+static void SetGroups(int m, int ng, int jg[], int jig[], int jr[]);
+static void CInit(N_Vector c, WebData wdata);
+static void PrintIntro(void);
+static void PrintHeader(int jpre, int gstype);
+static void PrintAllSpecies(N_Vector c, int ns, int mxns, realtype t);
+static void PrintOutput(void *cvode_mem, realtype t);
+static void PrintFinalStats(void *cvode_mem);
+static void FreeUserData(WebData wdata);
+static void WebRates(realtype x, realtype y, realtype t, realtype c[],
+		     realtype rate[], WebData wdata);
+static void fblock (realtype t, realtype cdata[], int jx, int jy,
+		    realtype cdotdata[], WebData wdata);
+static void GSIter(realtype gamma, N_Vector z, N_Vector x,WebData wdata);
+
+/* Small Vector Kernels */
+
+static void v_inc_by_prod(realtype u[], realtype v[], realtype w[], int n);
+static void v_sum_prods(realtype u[], realtype p[], realtype q[], realtype v[],
+                        realtype w[], int n);
+static void v_prod(realtype u[], realtype v[], realtype w[], int n);
+static void v_zero(realtype u[], int n);
+
+/* Functions Called By The Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int Precond(realtype tn, N_Vector c, N_Vector fc,
+		   booleantype jok, booleantype *jcurPtr, realtype gamma,
+		   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector c, N_Vector fc,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Implementation */
+
+int main()
+{
+  realtype abstol=ATOL, reltol=RTOL, t, tout;
+  N_Vector c;
+  WebData wdata;
+  void *cvode_mem;
+  booleantype firstrun;
+  int jpre, gstype, flag;
+  int ns, mxns, iout;
+
+  c = NULL;
+  wdata = NULL;
+  cvode_mem = NULL;
+
+  /* Initializations */
+  c = N_VNew_Serial(NEQ);
+  if(check_flag((void *)c, "N_VNew_Serial", 0)) return(1);
+  wdata = AllocUserData();
+  if(check_flag((void *)wdata, "AllocUserData", 2)) return(1);
+  InitUserData(wdata);
+  ns = wdata->ns;
+  mxns = wdata->mxns;
+
+  /* Print problem description */
+  PrintIntro();
+
+  /* Loop over jpre and gstype (four cases) */
+  for (jpre = PREC_LEFT; jpre <= PREC_RIGHT; jpre++) {
+    for (gstype = MODIFIED_GS; gstype <= CLASSICAL_GS; gstype++) {
+      
+      /* Initialize c and print heading */
+      CInit(c, wdata);
+      PrintHeader(jpre, gstype);
+
+      /* Call CVodeInit or CVodeReInit, then CVSpgmr to set up problem */
+      
+      firstrun = (jpre == PREC_LEFT) && (gstype == MODIFIED_GS);
+      if (firstrun) {
+        cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+        if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+        wdata->cvode_mem = cvode_mem;
+
+        flag = CVodeSetUserData(cvode_mem, wdata);
+        if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+        flag = CVodeInit(cvode_mem, f, T0, c);
+        if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+        flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+        if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+        flag = CVSpgmr(cvode_mem, jpre, MAXL);
+        if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+
+        flag = CVSpilsSetGSType(cvode_mem, gstype);
+        if(check_flag(&flag, "CVSpilsSetGSType", 1)) return(1);
+
+        flag = CVSpilsSetEpsLin(cvode_mem, DELT);
+        if(check_flag(&flag, "CVSpilsSetEpsLin", 1)) return(1);
+
+        flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+        if(check_flag(&flag, "CVSpilsSetPreconditioner", 1)) return(1);
+
+      } else {
+
+        flag = CVodeReInit(cvode_mem, T0, c);
+        if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+
+        flag = CVSpilsSetPrecType(cvode_mem, jpre);
+        check_flag(&flag, "CVSpilsSetPrecType", 1);
+        flag = CVSpilsSetGSType(cvode_mem, gstype);
+        if(check_flag(&flag, "CVSpilsSetGSType", 1)) return(1);
+
+      }
+      
+      /* Print initial values */
+      if (firstrun) PrintAllSpecies(c, ns, mxns, T0);
+      
+      /* Loop over output points, call CVode, print sample solution values. */
+      tout = T1;
+      for (iout = 1; iout <= NOUT; iout++) {
+        flag = CVode(cvode_mem, tout, c, &t, CV_NORMAL);
+        PrintOutput(cvode_mem, t);
+        if (firstrun && (iout % 3 == 0)) PrintAllSpecies(c, ns, mxns, t);
+        if(check_flag(&flag, "CVode", 1)) break;
+        if (tout > RCONST(0.9)) tout += DTOUT; else tout *= TOUT_MULT; 
+      }
+      
+      /* Print final statistics, and loop for next case */
+      PrintFinalStats(cvode_mem);
+      
+    }
+  }
+
+  /* Free all memory */
+  CVodeFree(&cvode_mem);
+  N_VDestroy_Serial(c);
+  FreeUserData(wdata);
+
+  return(0);
+}
+
+static WebData AllocUserData(void)
+{
+  int i, ngrp = NGRP;
+  long int ns = NS;
+  WebData wdata;
+  
+  wdata = (WebData) malloc(sizeof *wdata);
+  for(i=0; i < ngrp; i++) {
+    (wdata->P)[i] = newDenseMat(ns, ns);
+    (wdata->pivot)[i] = newLintArray(ns);
+  }
+  wdata->rewt = N_VNew_Serial(NEQ);
+  return(wdata);
+}
+
+static void InitUserData(WebData wdata)
+{
+  int i, j, ns;
+  realtype *bcoef, *diff, *cox, *coy, dx, dy;
+  realtype (*acoef)[NS];
+  
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+  diff = wdata->diff;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  ns = wdata->ns = NS;
+  
+  for (j = 0; j < NS; j++) { for (i = 0; i < NS; i++) acoef[i][j] = 0.; }
+  for (j = 0; j < NP; j++) {
+    for (i = 0; i < NP; i++) {
+      acoef[NP+i][j] = EE;
+      acoef[i][NP+j] = -GG;
+    }
+    acoef[j][j] = -AA;
+    acoef[NP+j][NP+j] = -AA;
+    bcoef[j] = BB;
+    bcoef[NP+j] = -BB;
+    diff[j] = DPREY;
+    diff[NP+j] = DPRED;
+  }
+
+  /* Set remaining problem parameters */
+
+  wdata->mxns = MXNS;
+  dx = wdata->dx = DX;
+  dy = wdata->dy = DY;
+  for (i = 0; i < ns; i++) {
+    cox[i] = diff[i]/SUNSQR(dx);
+    coy[i] = diff[i]/SUNSQR(dy);
+  }
+
+  /* Set remaining method parameters */
+
+  wdata->mp = MP;
+  wdata->mq = MQ;
+  wdata->mx = MX;
+  wdata->my = MY;
+  wdata->srur = SUNRsqrt(UNIT_ROUNDOFF);
+  wdata->mxmp = MXMP;
+  wdata->ngrp = NGRP;
+  wdata->ngx = NGX;
+  wdata->ngy = NGY;
+  SetGroups(MX, NGX, wdata->jgx, wdata->jigx, wdata->jxr);
+  SetGroups(MY, NGY, wdata->jgy, wdata->jigy, wdata->jyr);
+}
+
+/*
+ This routine sets arrays jg, jig, and jr describing
+ a uniform partition of (0,1,2,...,m-1) into ng groups.
+ The arrays set are:
+   jg    = length ng+1 array of group boundaries.
+           Group ig has indices j = jg[ig],...,jg[ig+1]-1.
+   jig   = length m array of group indices vs node index.
+           Node index j is in group jig[j].
+   jr    = length ng array of indices representing the groups.
+           The index for group ig is j = jr[ig].
+*/
+static void SetGroups(int m, int ng, int jg[], int jig[], int jr[])
+{
+  int ig, j, len1, mper, ngm1;
+
+  mper = m/ng; /* does integer division */
+  for (ig=0; ig < ng; ig++) jg[ig] = ig*mper;
+  jg[ng] = m;
+  
+  ngm1 = ng - 1;
+  len1 = ngm1*mper;
+  for (j = 0; j < len1; j++) jig[j] = j/mper;
+  for (j = len1; j < m; j++) jig[j] = ngm1;
+
+  for (ig = 0; ig < ngm1; ig++) jr[ig] = ((2*ig+1)*mper-1)/2;
+  jr[ngm1] = (ngm1*mper+m-1)/2;
+}
+
+/* This routine computes and loads the vector of initial values. */
+static void CInit(N_Vector c, WebData wdata)
+{
+  int jx, jy, ns, mxns, ioff, iyoff, i, ici;
+  realtype argx, argy, x, y, dx, dy, x_factor, y_factor, *cdata;
+  
+  cdata = N_VGetArrayPointer_Serial(c);
+  ns = wdata->ns;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+
+  x_factor = RCONST(4.0)/SUNSQR(AX);
+  y_factor = RCONST(4.0)/SUNSQR(AY);
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    argy = SUNSQR(y_factor*y*(AY-y));
+    iyoff = mxns*jy;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      argx = SUNSQR(x_factor*x*(AX-x));
+      ioff = iyoff + ns*jx;
+      for (i = 1; i <= ns; i++) {
+        ici = ioff + i-1;
+        cdata[ici] = RCONST(10.0) + i*argx*argy;
+      }
+    }
+  }
+}
+
+static void PrintIntro(void)
+{
+  printf("\n\nDemonstration program for CVODE - CVSPGMR linear solver\n\n");
+  printf("Food web problem with ns species, ns = %d\n", NS);
+  printf("Predator-prey interaction and diffusion on a 2-D square\n\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Matrix parameters: a = %.2Lg   e = %.2Lg   g = %.2Lg\n",
+         AA, EE, GG);
+  printf("b parameter = %.2Lg\n", BB);
+  printf("Diffusion coefficients: Dprey = %.2Lg   Dpred = %.2Lg\n",
+         DPREY, DPRED);
+  printf("Rate parameter alpha = %.2Lg\n\n", ALPH);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Matrix parameters: a = %.2g   e = %.2g   g = %.2g\n",
+         AA, EE, GG);
+  printf("b parameter = %.2g\n", BB);
+  printf("Diffusion coefficients: Dprey = %.2g   Dpred = %.2g\n",
+         DPREY, DPRED);
+  printf("Rate parameter alpha = %.2g\n\n", ALPH);
+#else
+  printf("Matrix parameters: a = %.2g   e = %.2g   g = %.2g\n",
+         AA, EE, GG);
+  printf("b parameter = %.2g\n", BB);
+  printf("Diffusion coefficients: Dprey = %.2g   Dpred = %.2g\n",
+         DPREY, DPRED);
+  printf("Rate parameter alpha = %.2g\n\n", ALPH);
+#endif
+  printf("Mesh dimensions (mx,my) are %d, %d.  ", MX, MY);
+  printf("Total system size is neq = %d \n\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerances: reltol = %.2Lg, abstol = %.2Lg \n\n",
+         RTOL, ATOL);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerances: reltol = %.2g, abstol = %.2g \n\n",
+         RTOL, ATOL);
+#else
+  printf("Tolerances: reltol = %.2g, abstol = %.2g \n\n",
+         RTOL, ATOL);
+#endif
+  printf("Preconditioning uses a product of:\n");
+  printf("  (1) Gauss-Seidel iterations with ");
+  printf("itmax = %d iterations, and\n", ITMAX);
+  printf("  (2) interaction-only block-diagonal matrix ");
+  printf("with block-grouping\n");
+  printf("  Number of diagonal block groups = ngrp = %d", NGRP);
+  printf("  (ngx by ngy, ngx = %d, ngy = %d)\n", NGX, NGY);
+  printf("\n\n--------------------------------------------------------------");
+  printf("--------------\n");
+}
+
+static void PrintHeader(int jpre, int gstype)
+{
+  if(jpre == PREC_LEFT)
+    printf("\n\nPreconditioner type is           jpre = %s\n", "PREC_LEFT");
+  else
+    printf("\n\nPreconditioner type is           jpre = %s\n", "PREC_RIGHT");
+
+  if(gstype == MODIFIED_GS)
+    printf("\nGram-Schmidt method type is    gstype = %s\n\n\n", "MODIFIED_GS");
+  else
+    printf("\nGram-Schmidt method type is    gstype = %s\n\n\n", "CLASSICAL_GS");
+}
+
+static void PrintAllSpecies(N_Vector c, int ns, int mxns, realtype t)
+{
+  int i, jx ,jy;
+  realtype *cdata;
+  
+  cdata = N_VGetArrayPointer_Serial(c);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("c values at t = %Lg:\n\n", t);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("c values at t = %g:\n\n", t);
+#else
+  printf("c values at t = %g:\n\n", t);
+#endif
+  for (i=1; i <= ns; i++) {
+    printf("Species %d\n", i);
+    for (jy=MY-1; jy >= 0; jy--) {
+      for (jx=0; jx < MX; jx++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+        printf("%-10.6Lg", cdata[(i-1) + jx*ns + jy*mxns]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+        printf("%-10.6g", cdata[(i-1) + jx*ns + jy*mxns]);
+#else
+        printf("%-10.6g", cdata[(i-1) + jx*ns + jy*mxns]);
+#endif
+      }
+      printf("\n");
+    }
+    printf("\n");
+  }
+}
+
+static void PrintOutput(void *cvode_mem, realtype t)
+{
+  long int nst, nfe, nni;
+  int qu, flag;
+  realtype hu;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("t = %10.2Le  nst = %ld  nfe = %ld  nni = %ld", t, nst, nfe, nni);
+  printf("  qu = %d  hu = %11.2Le\n\n", qu, hu);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("t = %10.2e  nst = %ld  nfe = %ld  nni = %ld", t, nst, nfe, nni);
+  printf("  qu = %d  hu = %11.2e\n\n", qu, hu);
+#else
+  printf("t = %10.2e  nst = %ld  nfe = %ld  nni = %ld", t, nst, nfe, nni);
+  printf("  qu = %d  hu = %11.2e\n\n", qu, hu);
+#endif
+}
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+  realtype avdim;
+  
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1);
+
+  printf("\n\n Final statistics for this run:\n\n");
+  printf(" CVode real workspace length           = %4ld \n", lenrw);
+  printf(" CVode integer workspace length        = %4ld \n", leniw);
+  printf(" CVSPGMR real workspace length         = %4ld \n", lenrwLS);
+  printf(" CVSPGMR integer workspace length      = %4ld \n", leniwLS);
+  printf(" Number of steps                       = %4ld \n", nst);
+  printf(" Number of f-s                         = %4ld \n", nfe);
+  printf(" Number of f-s (SPGMR)                 = %4ld \n", nfeLS);
+  printf(" Number of f-s (TOTAL)                 = %4ld \n", nfe + nfeLS);
+  printf(" Number of setups                      = %4ld \n", nsetups);
+  printf(" Number of nonlinear iterations        = %4ld \n", nni);
+  printf(" Number of linear iterations           = %4ld \n", nli);
+  printf(" Number of preconditioner evaluations  = %4ld \n", npe);
+  printf(" Number of preconditioner solves       = %4ld \n", nps);
+  printf(" Number of error test failures         = %4ld \n", netf);
+  printf(" Number of nonlinear conv. failures    = %4ld \n", ncfn);
+  printf(" Number of linear convergence failures = %4ld \n", ncfl);
+  avdim = (nni > 0) ? ((realtype)nli)/((realtype)nni) : ZERO;
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf(" Average Krylov subspace dimension     = %.3Lf \n", avdim);
+#else
+  printf(" Average Krylov subspace dimension     = %.3f \n", avdim);
+#endif
+  printf("\n\n--------------------------------------------------------------");
+  printf("--------------\n");
+  printf(    "--------------------------------------------------------------");
+  printf("--------------\n");
+}
+
+static void FreeUserData(WebData wdata)
+{
+  int i, ngrp;
+
+  ngrp = wdata->ngrp;
+  for(i=0; i < ngrp; i++) {
+    destroyMat((wdata->P)[i]);
+    destroyArray((wdata->pivot)[i]);
+  }
+  N_VDestroy_Serial(wdata->rewt);
+  free(wdata);
+}
+
+/*
+ This routine computes the right-hand side of the ODE system and
+ returns it in cdot. The interaction rates are computed by calls to WebRates,
+ and these are saved in fsave for use in preconditioning.
+*/
+static int f(realtype t, N_Vector c, N_Vector cdot,void *user_data)
+{
+  int i, ic, ici, idxl, idxu, jx, ns, mxns, iyoff, jy, idyu, idyl;
+  realtype dcxli, dcxui, dcyli, dcyui, x, y, *cox, *coy, *fsave, dx, dy;
+  realtype *cdata, *cdotdata;
+  WebData wdata;
+  
+  wdata = (WebData) user_data;
+  cdata = N_VGetArrayPointer_Serial(c);
+  cdotdata = N_VGetArrayPointer_Serial(cdot);
+  
+  mxns = wdata->mxns;
+  ns = wdata->ns;
+  fsave = wdata->fsave;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+  
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    iyoff = mxns*jy;
+    idyu = (jy == MY-1) ? -mxns : mxns;
+    idyl = (jy == 0) ? -mxns : mxns;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      ic = iyoff + ns*jx;
+      /* Get interaction rates at one point (x,y). */
+      WebRates(x, y, t, cdata+ic, fsave+ic, wdata);
+      idxu = (jx == MX-1) ? -ns : ns;
+      idxl = (jx == 0) ? -ns : ns;
+      for (i = 1; i <= ns; i++) {
+        ici = ic + i-1;
+        /* Do differencing in y. */
+        dcyli = cdata[ici] - cdata[ici-idyl];
+        dcyui = cdata[ici+idyu] - cdata[ici];
+        /* Do differencing in x. */
+        dcxli = cdata[ici] - cdata[ici-idxl];
+        dcxui = cdata[ici+idxu] - cdata[ici];
+        /* Collect terms and load cdot elements. */
+        cdotdata[ici] = coy[i-1]*(dcyui - dcyli) + cox[i-1]*(dcxui - dcxli) +
+          fsave[ici];
+      }
+    }
+  }
+
+  return(0);
+}
+
+/*
+  This routine computes the interaction rates for the species
+  c_1, ... ,c_ns (stored in c[0],...,c[ns-1]), at one spatial point 
+  and at time t.
+*/
+static void WebRates(realtype x, realtype y, realtype t, realtype c[],
+                     realtype rate[], WebData wdata)
+{
+  int i, j, ns;
+  realtype fac, *bcoef;
+  realtype (*acoef)[NS];
+  
+  ns = wdata->ns;
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+  
+  for (i = 0; i < ns; i++)
+    rate[i] = ZERO;
+  
+  for (j = 0; j < ns; j++) 
+    for (i = 0; i < ns; i++) 
+      rate[i] += c[j] * acoef[i][j];
+  
+  fac = ONE + ALPH*x*y;
+  for (i = 0; i < ns; i++) 
+    rate[i] = c[i]*(bcoef[i]*fac + rate[i]);
+}
+
+/*
+ This routine generates the block-diagonal part of the Jacobian
+ corresponding to the interaction rates, multiplies by -gamma, adds
+ the identity matrix, and calls denseGETRF to do the LU decomposition of
+ each diagonal block. The computation of the diagonal blocks uses
+ the preset block and grouping information. One block per group is
+ computed. The Jacobian elements are generated by difference
+ quotients using calls to the routine fblock.
+
+ This routine can be regarded as a prototype for the general case
+ of a block-diagonal preconditioner. The blocks are of size mp, and
+ there are ngrp=ngx*ngy blocks computed in the block-grouping scheme.
+*/ 
+static int Precond(realtype t, N_Vector c, N_Vector fc,
+		   booleantype jok, booleantype *jcurPtr, realtype gamma,
+		   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3)
+{
+  realtype ***P;
+  int ier;
+  long int **pivot;
+  int i, if0, if00, ig, igx, igy, j, jj, jx, jy;
+  int *jxr, *jyr, ngrp, ngx, ngy, mxmp, flag;
+  long int mp;
+  realtype uround, fac, r, r0, save, srur;
+  realtype *f1, *fsave, *cdata, *rewtdata;
+  WebData wdata;
+  void *cvode_mem;
+  N_Vector rewt;
+  
+  wdata = (WebData) user_data;
+  cvode_mem = wdata->cvode_mem;
+  cdata = N_VGetArrayPointer_Serial(c);
+  rewt = wdata->rewt;
+  flag = CVodeGetErrWeights(cvode_mem, rewt);
+  if(check_flag(&flag, "CVodeGetErrWeights", 1)) return(1);
+  rewtdata = N_VGetArrayPointer_Serial(rewt);
+
+  uround = UNIT_ROUNDOFF;
+
+  P = wdata->P;
+  pivot = wdata->pivot;
+  jxr = wdata->jxr;
+  jyr = wdata->jyr;
+  mp = wdata->mp;
+  srur = wdata->srur;
+  ngrp = wdata->ngrp;
+  ngx = wdata->ngx;
+  ngy = wdata->ngy;
+  mxmp = wdata->mxmp;
+  fsave = wdata->fsave;
+  
+  /* Make mp calls to fblock to approximate each diagonal block of Jacobian.
+     Here, fsave contains the base value of the rate vector and 
+     r0 is a minimum increment factor for the difference quotient. */
+  
+  f1 = N_VGetArrayPointer_Serial(vtemp1);
+  
+  fac = N_VWrmsNorm (fc, rewt);
+  r0 = RCONST(1000.0)*SUNRabs(gamma)*uround*NEQ*fac;
+  if (r0 == ZERO) r0 = ONE;
+  
+  for (igy = 0; igy < ngy; igy++) {
+    jy = jyr[igy];
+    if00 = jy*mxmp;
+    for (igx = 0; igx < ngx; igx++) { 
+      jx = jxr[igx];
+      if0 = if00 + jx*mp;
+      ig = igx + igy*ngx; 
+      /* Generate ig-th diagonal block */
+      for (j = 0; j < mp; j++) {
+        /* Generate the jth column as a difference quotient */
+        jj = if0 + j; 
+        save = cdata[jj];
+        r = SUNMAX(srur*SUNRabs(save),r0/rewtdata[jj]);
+        cdata[jj] += r;
+        fac = -gamma/r;
+        fblock (t, cdata, jx, jy, f1, wdata);
+        for (i = 0; i < mp; i++) {
+          P[ig][j][i] = (f1[i] - fsave[if0+i])*fac;
+        }
+        cdata[jj] = save;
+      }
+    }
+  }
+  
+  /* Add identity matrix and do LU decompositions on blocks. */
+  
+  for (ig = 0; ig < ngrp; ig++) {
+    denseAddIdentity(P[ig], mp);
+    ier = denseGETRF(P[ig], mp, mp, pivot[ig]);
+    if (ier != 0) return(1);
+  }
+  
+  *jcurPtr = TRUE;
+  return(0);
+}
+
+/*
+  This routine computes one block of the interaction terms of the
+  system, namely block (jx,jy), for use in preconditioning.
+  Here jx and jy count from 0.
+*/
+static void fblock(realtype t, realtype cdata[], int jx, int jy,
+                   realtype cdotdata[], WebData wdata)
+{
+  int iblok, ic;
+  realtype x, y;
+  
+  iblok = jx + jy*(wdata->mx);
+  y = jy*(wdata->dy);
+  x = jx*(wdata->dx);
+  ic = (wdata->ns)*(iblok);
+  WebRates(x, y, t, cdata+ic, cdotdata, wdata);
+}
+
+/*
+  This routine applies two inverse preconditioner matrices
+  to the vector r, using the interaction-only block-diagonal Jacobian
+  with block-grouping, denoted Jr, and Gauss-Seidel applied to the
+  diffusion contribution to the Jacobian, denoted Jd.
+  It first calls GSIter for a Gauss-Seidel approximation to
+  ((I - gamma*Jd)-inverse)*r, and stores the result in z.
+  Then it computes ((I - gamma*Jr)-inverse)*z, using LU factors of the
+  blocks in P, and pivot information in pivot, and returns the result in z.
+*/
+static int PSolve(realtype tn, N_Vector c, N_Vector fc,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype   ***P;
+  long int **pivot;
+  int jx, jy, igx, igy, iv, ig, *jigx, *jigy, mx, my, ngx;
+  long int mp;
+  WebData wdata;
+  
+  wdata = (WebData) user_data;
+  
+  N_VScale(ONE, r, z);
+  
+  /* call GSIter for Gauss-Seidel iterations */
+  
+  GSIter(gamma, z, vtemp, wdata);
+  
+  /* Do backsolves for inverse of block-diagonal preconditioner factor */
+  
+  P = wdata->P;
+  pivot = wdata->pivot;
+  mx = wdata->mx;
+  my = wdata->my;
+  ngx = wdata->ngx;
+  mp = wdata->mp;
+  jigx = wdata->jigx;
+  jigy = wdata->jigy;
+  
+  iv = 0;
+  for (jy = 0; jy < my; jy++) {
+    igy = jigy[jy];
+    for (jx = 0; jx < mx; jx++) {
+      igx = jigx[jx];
+      ig = igx + igy*ngx;
+      denseGETRS(P[ig], mp, pivot[ig], &(N_VGetArrayPointer_Serial(z)[iv]));
+      iv += mp;
+    }
+  }
+  
+  return(0);
+}
+
+/*
+  This routine performs ITMAX=5 Gauss-Seidel iterations to compute an
+  approximation to (P-inverse)*z, where P = I - gamma*Jd, and
+  Jd represents the diffusion contributions to the Jacobian.
+  The answer is stored in z on return, and x is a temporary vector.
+  The dimensions below assume a global constant NS >= ns.
+  Some inner loops of length ns are implemented with the small
+  vector kernels v_sum_prods, v_prod, v_inc_by_prod.
+*/
+static void GSIter(realtype gamma, N_Vector z, N_Vector x, WebData wdata)
+{
+  int jx, jy, mx, my, x_loc, y_loc;
+  int ns, mxns, i, iyoff, ic, iter;
+  realtype beta[NS], beta2[NS], cof1[NS], gam[NS], gam2[NS];
+  realtype temp, *cox, *coy, *xd, *zd;
+  
+  xd = N_VGetArrayPointer_Serial(x);
+  zd = N_VGetArrayPointer_Serial(z);
+  ns = wdata->ns;
+  mx = wdata->mx;
+  my = wdata->my;
+  mxns = wdata->mxns;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  
+  /* Write matrix as P = D - L - U.
+     Load local arrays beta, beta2, gam, gam2, and cof1. */
+  
+  for (i = 0; i < ns; i++) {
+    temp = ONE/(ONE + RCONST(2.0)*gamma*(cox[i] + coy[i]));
+    beta[i] = gamma*cox[i]*temp;
+    beta2[i] = RCONST(2.0)*beta[i];
+    gam[i] = gamma*coy[i]*temp;
+    gam2[i] = RCONST(2.0)*gam[i];
+    cof1[i] = temp;
+  }
+  
+  /* Begin iteration loop.
+     Load vector x with (D-inverse)*z for first iteration. */
+  
+  for (jy = 0; jy < my; jy++) {
+    iyoff = mxns*jy;
+    for (jx = 0; jx < mx; jx++) {
+      ic = iyoff + ns*jx;
+      v_prod(xd+ic, cof1, zd+ic, ns); /* x[ic+i] = cof1[i]z[ic+i] */
+    }
+  }
+  N_VConst(ZERO, z);
+  
+  /* Looping point for iterations. */
+  
+  for (iter=1; iter <= ITMAX; iter++) {
+    
+    /* Calculate (D-inverse)*U*x if not the first iteration. */
+    
+    if (iter > 1) {
+      for (jy=0; jy < my; jy++) {
+        iyoff = mxns*jy;
+        for (jx=0; jx < mx; jx++) { /* order of loops matters */
+          ic = iyoff + ns*jx;
+          x_loc = (jx == 0) ? 0 : ((jx == mx-1) ? 2 : 1);
+          y_loc = (jy == 0) ? 0 : ((jy == my-1) ? 2 : 1);
+          switch (3*y_loc+x_loc) {
+          case 0 : 
+            /* jx == 0, jy == 0 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] + gam2[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta2, xd+ic+ns, gam2, xd+ic+mxns, ns);
+            break;
+          case 1 : 
+            /* 1 <= jx <= mx-2, jy == 0 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] + gam2[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta, xd+ic+ns, gam2, xd+ic+mxns, ns);
+            break;
+          case 2 : 
+            /* jx == mx-1, jy == 0 */
+            /* x[ic+i] = gam2[i]x[ic+mxns+i] */
+            v_prod(xd+ic, gam2, xd+ic+mxns, ns);
+            break;
+          case 3 : 
+            /* jx == 0, 1 <= jy <= my-2 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] + gam[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta2, xd+ic+ns, gam, xd+ic+mxns, ns);
+            break;
+          case 4 : 
+            /* 1 <= jx <= mx-2, 1 <= jy <= my-2 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] + gam[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta, xd+ic+ns, gam, xd+ic+mxns, ns);
+            break;
+          case 5 : 
+            /* jx == mx-1, 1 <= jy <= my-2 */
+            /* x[ic+i] = gam[i]x[ic+mxns+i] */
+            v_prod(xd+ic, gam, xd+ic+mxns, ns);
+            break;
+          case 6 : 
+            /* jx == 0, jy == my-1 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] */
+            v_prod(xd+ic, beta2, xd+ic+ns, ns);
+            break;
+          case 7 : 
+            /* 1 <= jx <= mx-2, jy == my-1 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] */
+            v_prod(xd+ic, beta, xd+ic+ns, ns);
+            break;
+          case 8 : 
+            /* jx == mx-1, jy == my-1 */
+            /* x[ic+i] = 0.0 */
+            v_zero(xd+ic, ns);
+            break;
+          }
+        }
+      }
+    }  /* end if (iter > 1) */
+    
+    /* Overwrite x with [(I - (D-inverse)*L)-inverse]*x. */
+    
+    for (jy=0; jy < my; jy++) {
+      iyoff = mxns*jy;
+      for (jx=0; jx < mx; jx++) { /* order of loops matters */
+        ic = iyoff + ns*jx;
+        x_loc = (jx == 0) ? 0 : ((jx == mx-1) ? 2 : 1);
+        y_loc = (jy == 0) ? 0 : ((jy == my-1) ? 2 : 1);
+        switch (3*y_loc+x_loc) {
+        case 0 : 
+          /* jx == 0, jy == 0 */
+          break;
+        case 1 : 
+          /* 1 <= jx <= mx-2, jy == 0 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          break;
+        case 2 : 
+          /* jx == mx-1, jy == 0 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          break;
+        case 3 : 
+          /* jx == 0, 1 <= jy <= my-2 */
+          /* x[ic+i] += gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 4 : 
+          /* 1 <= jx <= mx-2, 1 <= jy <= my-2 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] + gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 5 : 
+          /* jx == mx-1, 1 <= jy <= my-2 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] + gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 6 : 
+          /* jx == 0, jy == my-1 */
+          /* x[ic+i] += gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        case 7 : 
+          /* 1 <= jx <= mx-2, jy == my-1 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] + gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        case 8 : 
+          /* jx == mx-1, jy == my-1 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] + gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        }
+      }
+    }
+    
+    /* Add increment x to z : z <- z+x */
+    
+    N_VLinearSum(ONE, z, ONE, x, z);
+    
+  }
+}
+
+static void v_inc_by_prod(realtype u[], realtype v[], realtype w[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] += v[i]*w[i];
+}
+
+static void v_sum_prods(realtype u[], realtype p[], realtype q[],
+                        realtype v[], realtype w[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] = p[i]*q[i] + v[i]*w[i];
+}
+
+static void v_prod(realtype u[], realtype v[], realtype w[], int n)
+{ 
+  int i;
+  for (i=0; i < n; i++) u[i] = v[i]*w[i];
+}
+
+static void v_zero(realtype u[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] = ZERO;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvKrylovDemo_prec.out b/examples/cvode/serial/cvKrylovDemo_prec.out
new file mode 100644
index 0000000..66c5396
--- /dev/null
+++ b/examples/cvode/serial/cvKrylovDemo_prec.out
@@ -0,0 +1,645 @@
+
+
+Demonstration program for CVODE - CVSPGMR linear solver
+
+Food web problem with ns species, ns = 6
+Predator-prey interaction and diffusion on a 2-D square
+
+Matrix parameters: a = 1   e = 1e+04   g = 5e-07
+b parameter = 1
+Diffusion coefficients: Dprey = 1   Dpred = 0.5
+Rate parameter alpha = 1
+
+Mesh dimensions (mx,my) are 6, 6.  Total system size is neq = 216 
+
+Tolerances: itol = CV_SS,  reltol = 1e-05, abstol = 1e-05 
+
+Preconditioning uses a product of:
+  (1) Gauss-Seidel iterations with itmax = 5 iterations, and
+  (2) interaction-only block-diagonal matrix with block-grouping
+  Number of diagonal block groups = ngrp = 4  (ngx by ngy, ngx = 2, ngy = 2)
+
+
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_LEFT
+
+Gram-Schmidt method type is    gstype = MODIFIED_GS
+
+
+c values at t = 0:
+
+Species 1
+10        10        10        10        10        10        
+10        10.1678   10.3775   10.3775   10.1678   10        
+10        10.3775   10.8493   10.8493   10.3775   10        
+10        10.3775   10.8493   10.8493   10.3775   10        
+10        10.1678   10.3775   10.3775   10.1678   10        
+10        10        10        10        10        10        
+
+Species 2
+10        10        10        10        10        10        
+10        10.3355   10.755    10.755    10.3355   10        
+10        10.755    11.6987   11.6987   10.755    10        
+10        10.755    11.6987   11.6987   10.755    10        
+10        10.3355   10.755    10.755    10.3355   10        
+10        10        10        10        10        10        
+
+Species 3
+10        10        10        10        10        10        
+10        10.5033   11.1325   11.1325   10.5033   10        
+10        11.1325   12.548    12.548    11.1325   10        
+10        11.1325   12.548    12.548    11.1325   10        
+10        10.5033   11.1325   11.1325   10.5033   10        
+10        10        10        10        10        10        
+
+Species 4
+10        10        10        10        10        10        
+10        10.6711   11.5099   11.5099   10.6711   10        
+10        11.5099   13.3974   13.3974   11.5099   10        
+10        11.5099   13.3974   13.3974   11.5099   10        
+10        10.6711   11.5099   11.5099   10.6711   10        
+10        10        10        10        10        10        
+
+Species 5
+10        10        10        10        10        10        
+10        10.8389   11.8874   11.8874   10.8389   10        
+10        11.8874   14.2467   14.2467   11.8874   10        
+10        11.8874   14.2467   14.2467   11.8874   10        
+10        10.8389   11.8874   11.8874   10.8389   10        
+10        10        10        10        10        10        
+
+Species 6
+10        10        10        10        10        10        
+10        11.0066   12.2649   12.2649   11.0066   10        
+10        12.2649   15.0961   15.0961   12.2649   10        
+10        12.2649   15.0961   15.0961   12.2649   10        
+10        11.0066   12.2649   12.2649   11.0066   10        
+10        10        10        10        10        10        
+
+t =   1.00e-08  nst = 3  nfe = 10  nni = 6  qu = 2  hu =    1.76e-08
+
+t =   1.00e-07  nst = 7  nfe = 14  nni = 10  qu = 2  hu =    4.78e-08
+
+t =   1.00e-06  nst = 15  nfe = 24  nni = 20  qu = 3  hu =    1.50e-07
+
+c values at t = 1e-06:
+
+Species 1
+9.99991   9.99992   9.99993   9.99993   9.99993   9.99992   
+9.99992   10.1677   10.3774   10.3774   10.1677   9.99993   
+9.99993   10.3774   10.8492   10.8492   10.3774   9.99993   
+9.99993   10.3774   10.8492   10.8492   10.3774   9.99993   
+9.99992   10.1677   10.3774   10.3774   10.1677   9.99992   
+9.99991   9.99992   9.99993   9.99993   9.99992   9.99991   
+
+Species 2
+9.99991   9.99993   9.99995   9.99995   9.99993   9.99992   
+9.99993   10.3355   10.7549   10.7549   10.3355   9.99993   
+9.99995   10.7549   11.6985   11.6985   10.7549   9.99995   
+9.99995   10.7549   11.6985   11.6985   10.7549   9.99995   
+9.99993   10.3355   10.7549   10.7549   10.3355   9.99993   
+9.99991   9.99993   9.99995   9.99995   9.99993   9.99991   
+
+Species 3
+9.99991   9.99994   9.99997   9.99997   9.99994   9.99992   
+9.99994   10.5032   11.1323   11.1323   10.5032   9.99994   
+9.99997   11.1323   12.5478   12.5478   11.1323   9.99997   
+9.99997   11.1323   12.5478   12.5478   11.1323   9.99997   
+9.99994   10.5032   11.1323   11.1323   10.5032   9.99994   
+9.99991   9.99994   9.99997   9.99997   9.99994   9.99991   
+
+Species 4
+13.499    13.499    13.499    13.499    13.499    13.4989   
+13.499    14.5506   15.8932   15.8932   14.5506   13.499    
+13.499    15.8932   19.0308   19.0308   15.8932   13.499    
+13.499    15.8932   19.0308   19.0308   15.8932   13.499    
+13.499    14.5506   15.8932   15.8932   14.5506   13.499    
+13.499    13.499    13.499    13.499    13.499    13.499    
+
+Species 5
+13.499    13.499    13.499    13.499    13.499    13.4989   
+13.499    14.7794   16.4145   16.4145   14.7794   13.499    
+13.499    16.4145   20.2373   20.2373   16.4145   13.499    
+13.499    16.4145   20.2373   20.2373   16.4145   13.499    
+13.499    14.7794   16.4145   16.4145   14.7794   13.499    
+13.499    13.499    13.499    13.499    13.499    13.499    
+
+Species 6
+13.499    13.499    13.499    13.499    13.499    13.4989   
+13.499    15.0082   16.9357   16.9357   15.0082   13.499    
+13.499    16.9357   21.4437   21.4437   16.9357   13.499    
+13.499    16.9357   21.4437   21.4437   16.9357   13.499    
+13.499    15.0082   16.9357   16.9357   15.0082   13.499    
+13.499    13.499    13.499    13.499    13.499    13.499    
+
+t =   1.00e-05  nst = 34  nfe = 47  nni = 43  qu = 5  hu =    6.11e-07
+
+t =   1.00e-04  nst = 116  nfe = 137  nni = 133  qu = 5  hu =    5.51e-06
+
+t =   1.00e-03  nst = 135  nfe = 156  nni = 152  qu = 2  hu =    3.53e-04
+
+c values at t = 0.001:
+
+Species 1
+9.90702   9.91664   9.92836   9.93033   9.92253   9.91674   
+9.91472   10.0746   10.2769   10.2785   10.0795   9.92253   
+9.92446   10.2748   10.7181   10.7194   10.2785   9.93033   
+9.92445   10.2744   10.7173   10.7181   10.2769   9.92836   
+9.91469   10.0734   10.2744   10.2748   10.0746   9.91664   
+9.90697   9.91469   9.92445   9.92446   9.91472   9.90702   
+
+Species 2
+9.90741   9.92474   9.94623   9.9482    9.93064   9.91713   
+9.92282   10.2412   10.644    10.6457   10.2461   9.93064   
+9.94232   10.6419   11.5267   11.5281   10.6457   9.9482    
+9.94231   10.6415   11.5258   11.5267   10.644    9.94623   
+9.92279   10.24     10.6415   10.6419   10.2412   9.92474   
+9.90737   9.92279   9.94231   9.94232   9.92282   9.90741   
+
+Species 3
+9.90781   9.93284   9.96408   9.96606   9.93874   9.91752   
+9.93092   10.4078   11.0109   11.0127   10.4127   9.93874   
+9.96017   11.0088   12.3339   12.3354   11.0127   9.96606   
+9.96016   11.0083   12.3329   12.3339   11.0109   9.96408   
+9.93089   10.4065   11.0083   11.0088   10.4078   9.93284   
+9.90776   9.93089   9.96016   9.96017   9.93092   9.90781   
+
+Species 4
+297231    297749    298393    298451    297925    297520    
+297692    307244    319327    319378    307390    297925    
+298276    319264    345799    345840    319378    298451    
+298276    319252    345771    345799    319327    298393    
+297691    307208    319252    319264    307244    297749    
+297229    297691    298276    298276    297692    297231    
+
+Species 5
+297231    297749    298393    298451    297925    297520    
+297692    307244    319327    319378    307390    297925    
+298276    319264    345799    345840    319378    298451    
+298276    319252    345771    345799    319327    298393    
+297691    307208    319252    319264    307244    297749    
+297229    297691    298276    298276    297692    297231    
+
+Species 6
+297231    297749    298393    298451    297925    297520    
+297692    307244    319327    319378    307390    297925    
+298276    319264    345799    345840    319378    298451    
+298276    319252    345771    345799    319327    298393    
+297691    307208    319252    319264    307244    297749    
+297229    297691    298276    298276    297692    297231    
+
+t =   1.00e-02  nst = 143  nfe = 166  nni = 162  qu = 3  hu =    1.37e-03
+
+t =   1.00e-01  nst = 165  nfe = 191  nni = 187  qu = 5  hu =    6.02e-03
+
+t =   1.00e+00  nst = 235  nfe = 265  nni = 261  qu = 4  hu =    2.49e-02
+
+c values at t = 1:
+
+Species 1
+1.58853   1.59926   1.62153   1.64766   1.67038   1.68151   
+1.58535   1.59505   1.61549   1.63954   1.66035   1.67038   
+1.57758   1.58549   1.60241   1.62237   1.63954   1.64766   
+1.56822   1.57414   1.58708   1.60241   1.61549   1.62153   
+1.5605    1.56465   1.57414   1.58549   1.59505   1.59926   
+1.55734   1.5605    1.56822   1.57758   1.58535   1.58853   
+
+Species 2
+1.59068   1.60143   1.62373   1.64989   1.67263   1.68377   
+1.5875    1.59721   1.61768   1.64175   1.66259   1.67263   
+1.57973   1.58764   1.60458   1.62456   1.64175   1.64989   
+1.57036   1.57628   1.58923   1.60458   1.61768   1.62373   
+1.56263   1.56678   1.57628   1.58764   1.59721   1.60143   
+1.55947   1.56263   1.57036   1.57973   1.5875    1.59068   
+
+Species 3
+1.59272   1.60347   1.6258    1.65199   1.67476   1.68591   
+1.58953   1.59926   1.61975   1.64384   1.6647    1.67476   
+1.58175   1.58968   1.60664   1.62664   1.64384   1.65199   
+1.57237   1.5783    1.59127   1.60664   1.61975   1.6258    
+1.56464   1.56879   1.5783    1.58968   1.59926   1.60347   
+1.56147   1.56464   1.57237   1.58175   1.58953   1.59272   
+
+Species 4
+47718.9   48040.8   48709.6   49494     50176.1   50509.9   
+47623.3   47914.5   48528.3   49250.2   49874.9   50176.1   
+47390.2   47627.5   48135.5   48734.6   49250.2   49494     
+47109     47286.6   47675.1   48135.5   48528.3   48709.6   
+46877.1   47001.6   47286.6   47627.5   47914.5   48040.8   
+46782.3   46877.1   47109     47390.2   47623.3   47718.9   
+
+Species 5
+47718.9   48040.8   48709.6   49494     50176.1   50509.9   
+47623.3   47914.5   48528.3   49250.2   49874.9   50176.1   
+47390.2   47627.5   48135.5   48734.6   49250.2   49494     
+47109     47286.6   47675.1   48135.5   48528.3   48709.6   
+46877.1   47001.6   47286.6   47627.5   47914.5   48040.8   
+46782.3   46877.1   47109     47390.2   47623.3   47718.9   
+
+Species 6
+47718.9   48040.8   48709.6   49494     50176.1   50509.9   
+47623.3   47914.5   48528.3   49250.2   49874.9   50176.1   
+47390.2   47627.5   48135.5   48734.6   49250.2   49494     
+47109     47286.6   47675.1   48135.5   48528.3   48709.6   
+46877.1   47001.6   47286.6   47627.5   47914.5   48040.8   
+46782.3   46877.1   47109     47390.2   47623.3   47718.9   
+
+t =   2.00e+00  nst = 272  nfe = 305  nni = 301  qu = 3  hu =    3.81e-02
+
+t =   3.00e+00  nst = 288  nfe = 322  nni = 318  qu = 3  hu =    6.58e-02
+
+t =   4.00e+00  nst = 303  nfe = 338  nni = 334  qu = 3  hu =    6.58e-02
+
+c values at t = 4:
+
+Species 1
+1.19535   1.20368   1.2211    1.24158   1.25935   1.268     
+1.19281   1.20035   1.21636   1.23523   1.25154   1.25935   
+1.18657   1.19274   1.20603   1.22174   1.23523   1.24158   
+1.17905   1.18368   1.1939    1.20603   1.21636   1.2211    
+1.17285   1.17613   1.18368   1.19274   1.20035   1.20368   
+1.17033   1.17285   1.17905   1.18657   1.19281   1.19535   
+
+Species 2
+1.19539   1.20372   1.22113   1.24161   1.25939   1.26804   
+1.19284   1.20039   1.2164    1.23527   1.25158   1.25939   
+1.18661   1.19277   1.20606   1.22177   1.23527   1.24161   
+1.17908   1.18372   1.19393   1.20606   1.2164    1.22113   
+1.17288   1.17616   1.18372   1.19277   1.20039   1.20372   
+1.17036   1.17288   1.17908   1.18661   1.19284   1.19539   
+
+Species 3
+1.19542   1.20375   1.22117   1.24164   1.25942   1.26807   
+1.19287   1.20042   1.21643   1.2353    1.25161   1.25942   
+1.18664   1.1928    1.20609   1.2218    1.2353    1.24164   
+1.17911   1.18375   1.19396   1.20609   1.21643   1.22117   
+1.17291   1.17619   1.18375   1.1928    1.20042   1.20375   
+1.17039   1.17291   1.17911   1.18664   1.19287   1.19542   
+
+Species 4
+35860.6   36110.4   36632.5   37246.5   37779.6   38038.7   
+35784.4   36010.4   36490.5   37056.4   37545.4   37779.6   
+35597.3   35782.1   36180.7   36651.7   37056.4   37246.5   
+35371.5   35510.5   35816.7   36180.7   36490.5   36632.5   
+35185.6   35283.8   35510.5   35782.1   36010.4   36110.4   
+35109.8   35185.6   35371.5   35597.3   35784.4   35860.6   
+
+Species 5
+35860.7   36110.3   36632.5   37246.5   37779.6   38038.7   
+35784.4   36010.5   36490.5   37056.5   37545.4   37779.6   
+35597.3   35782.1   36180.7   36651.7   37056.5   37246.5   
+35371.5   35510.5   35816.7   36180.7   36490.5   36632.5   
+35185.6   35283.8   35510.5   35782.1   36010.5   36110.3   
+35109.8   35185.6   35371.5   35597.3   35784.4   35860.7   
+
+Species 6
+35860.7   36110.3   36632.6   37246.5   37779.6   38038.7   
+35784.3   36010.5   36490.5   37056.5   37545.4   37779.6   
+35597.4   35782.1   36180.7   36651.6   37056.5   37246.5   
+35371.4   35510.5   35816.7   36180.7   36490.5   36632.6   
+35185.6   35283.8   35510.5   35782.1   36010.5   36110.3   
+35109.8   35185.6   35371.4   35597.4   35784.3   35860.7   
+
+t =   5.00e+00  nst = 316  nfe = 351  nni = 347  qu = 3  hu =    1.10e-01
+
+t =   6.00e+00  nst = 325  nfe = 361  nni = 357  qu = 3  hu =    1.10e-01
+
+t =   7.00e+00  nst = 334  nfe = 371  nni = 367  qu = 3  hu =    1.10e-01
+
+c values at t = 7:
+
+Species 1
+1.18854   1.19682   1.21415   1.23453   1.25221   1.26082   
+1.186     1.19351   1.20944   1.22822   1.24444   1.25221   
+1.1798    1.18593   1.19916   1.21479   1.22822   1.23453   
+1.17231   1.17692   1.18708   1.19916   1.20944   1.21415   
+1.16614   1.1694    1.17692   1.18593   1.19351   1.19682   
+1.16363   1.16614   1.17231   1.1798    1.186     1.18854   
+
+Species 2
+1.18854   1.19683   1.21415   1.23453   1.25222   1.26082   
+1.186     1.19351   1.20944   1.22822   1.24444   1.25222   
+1.1798    1.18594   1.19916   1.21479   1.22822   1.23453   
+1.17231   1.17692   1.18709   1.19916   1.20944   1.21415   
+1.16614   1.1694    1.17692   1.18594   1.19351   1.19683   
+1.16363   1.16614   1.17231   1.1798    1.186     1.18854   
+
+Species 3
+1.18854   1.19683   1.21416   1.23453   1.25222   1.26082   
+1.18601   1.19351   1.20944   1.22822   1.24444   1.25222   
+1.1798    1.18594   1.19916   1.21479   1.22822   1.23453   
+1.17231   1.17692   1.18709   1.19916   1.20944   1.21416   
+1.16614   1.1694    1.17692   1.18594   1.19351   1.19683   
+1.16363   1.16614   1.17231   1.1798    1.18601   1.18854   
+
+Species 4
+35655.3   35903.6   36423.2   37034.1   37564.4   37822.3   
+35579.3   35804.2   36281.9   36844.9   37331.5   37564.4   
+35393.1   35577     35973.5   36442.3   36844.9   37034.1   
+35168.4   35306.6   35611.4   35973.5   36281.9   36423.2   
+34983.3   35081.2   35306.6   35577     35804.2   35903.6   
+34907.9   34983.3   35168.4   35393.1   35579.3   35655.3   
+
+Species 5
+35655.3   35903.6   36423.2   37034.1   37564.4   37822.3   
+35579.3   35804.3   36281.9   36844.9   37331.5   37564.4   
+35393.1   35577     35973.5   36442.2   36844.9   37034.1   
+35168.4   35306.7   35611.4   35973.5   36281.9   36423.2   
+34983.3   35081.1   35306.7   35577     35804.3   35903.6   
+34907.9   34983.3   35168.4   35393.1   35579.3   35655.3   
+
+Species 6
+35655.4   35903.6   36423.2   37034.1   37564.5   37822.3   
+35579.2   35804.3   36281.9   36845     37331.5   37564.5   
+35393.2   35576.9   35973.5   36442.2   36845     37034.1   
+35168.3   35306.7   35611.4   35973.5   36281.9   36423.2   
+34983.3   35081.1   35306.7   35576.9   35804.3   35903.6   
+34907.9   34983.3   35168.3   35393.2   35579.2   35655.4   
+
+t =   8.00e+00  nst = 342  nfe = 381  nni = 377  qu = 2  hu =    3.67e-01
+
+t =   9.00e+00  nst = 344  nfe = 383  nni = 379  qu = 2  hu =    3.67e-01
+
+t =   1.00e+01  nst = 346  nfe = 385  nni = 381  qu = 2  hu =    5.82e-01
+
+c values at t = 10:
+
+Species 1
+1.18838   1.19667   1.21399   1.23436   1.25205   1.26065   
+1.18585   1.19335   1.20928   1.22805   1.24428   1.25205   
+1.17964   1.18578   1.199     1.21463   1.22805   1.23436   
+1.17215   1.17676   1.18693   1.199     1.20928   1.21399   
+1.16598   1.16925   1.17676   1.18578   1.19335   1.19667   
+1.16347   1.16598   1.17215   1.17964   1.18585   1.18838   
+
+Species 2
+1.18838   1.19667   1.21399   1.23436   1.25205   1.26065   
+1.18585   1.19335   1.20928   1.22805   1.24428   1.25205   
+1.17964   1.18578   1.199     1.21463   1.22805   1.23436   
+1.17215   1.17676   1.18693   1.199     1.20928   1.21399   
+1.16598   1.16925   1.17676   1.18578   1.19335   1.19667   
+1.16347   1.16598   1.17215   1.17964   1.18585   1.18838   
+
+Species 3
+1.18838   1.19667   1.21399   1.23436   1.25205   1.26065   
+1.18585   1.19335   1.20928   1.22805   1.24428   1.25205   
+1.17964   1.18578   1.199     1.21463   1.22805   1.23436   
+1.17215   1.17676   1.18693   1.199     1.20928   1.21399   
+1.16598   1.16925   1.17676   1.18578   1.19335   1.19667   
+1.16347   1.16598   1.17215   1.17964   1.18585   1.18838   
+
+Species 4
+35651.1   35898.4   36418.5   37029     37559.3   37817.3   
+35574.1   35799.8   36276.8   36840.1   37326.6   37559.3   
+35388.6   35571.9   35968.9   36437.2   36840.1   37029     
+35163.6   35302     35606.4   35968.9   36276.8   36418.5   
+34978.4   35076.6   35302     35571.9   35799.8   35898.4   
+34903.2   34978.4   35163.6   35388.6   35574.1   35651.1   
+
+Species 5
+35650.8   35898.7   36418.2   37029.3   37559     37817.7   
+35574.5   35799.4   36277.2   36839.8   37326.9   37559     
+35388.3   35572.3   35968.6   36437.6   36839.8   37029.3   
+35163.9   35301.7   35606.8   35968.6   36277.2   36418.2   
+34978     35077     35301.7   35572.3   35799.4   35898.7   
+34903.6   34978     35163.9   35388.3   35574.5   35650.8   
+
+Species 6
+35650.4   35899     36417.9   37029.6   37558.7   37818     
+35574.8   35799.1   36277.5   36839.5   37327.3   37558.7   
+35388     35572.6   35968.2   36437.9   36839.5   37029.6   
+35164.2   35301.3   35607.1   35968.2   36277.5   36417.9   
+34977.7   35077.3   35301.3   35572.6   35799.1   35899     
+34903.9   34977.7   35164.2   35388     35574.8   35650.4   
+
+
+
+ Final statistics for this run:
+
+ CVode real workspace length           = 2249 
+ CVode integer workspace length        =   50 
+ CVSPGMR real workspace length         = 2206 
+ CVSPGMR integer workspace length      =   10 
+ Number of steps                       =  346 
+ Number of f-s                         =  385 
+ Number of f-s (SPGMR)                 =  550 
+ Number of f-s (TOTAL)                 =  935 
+ Number of setups                      =   46 
+ Number of nonlinear iterations        =  381 
+ Number of linear iterations           =  550 
+ Number of preconditioner evaluations  =   46 
+ Number of preconditioner solves       =  915 
+ Number of error test failures         =    1 
+ Number of nonlinear conv. failures    =    0 
+ Number of linear convergence failures =    0 
+ Average Krylov subspace dimension     = 1.444 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_LEFT
+
+Gram-Schmidt method type is    gstype = CLASSICAL_GS
+
+
+t =   1.00e-08  nst = 3  nfe = 10  nni = 6  qu = 2  hu =    1.76e-08
+
+t =   1.00e-07  nst = 7  nfe = 14  nni = 10  qu = 2  hu =    4.78e-08
+
+t =   1.00e-06  nst = 15  nfe = 24  nni = 20  qu = 3  hu =    1.50e-07
+
+t =   1.00e-05  nst = 34  nfe = 47  nni = 43  qu = 5  hu =    6.11e-07
+
+t =   1.00e-04  nst = 116  nfe = 137  nni = 133  qu = 5  hu =    5.51e-06
+
+t =   1.00e-03  nst = 135  nfe = 156  nni = 152  qu = 2  hu =    3.53e-04
+
+t =   1.00e-02  nst = 143  nfe = 166  nni = 162  qu = 3  hu =    1.37e-03
+
+t =   1.00e-01  nst = 165  nfe = 191  nni = 187  qu = 5  hu =    6.02e-03
+
+t =   1.00e+00  nst = 235  nfe = 265  nni = 261  qu = 4  hu =    2.49e-02
+
+t =   2.00e+00  nst = 272  nfe = 305  nni = 301  qu = 3  hu =    3.80e-02
+
+t =   3.00e+00  nst = 288  nfe = 322  nni = 318  qu = 3  hu =    6.59e-02
+
+t =   4.00e+00  nst = 303  nfe = 337  nni = 333  qu = 3  hu =    6.59e-02
+
+t =   5.00e+00  nst = 313  nfe = 349  nni = 345  qu = 3  hu =    1.26e-01
+
+t =   6.00e+00  nst = 321  nfe = 357  nni = 353  qu = 3  hu =    1.26e-01
+
+t =   7.00e+00  nst = 329  nfe = 366  nni = 362  qu = 3  hu =    1.26e-01
+
+t =   8.00e+00  nst = 337  nfe = 374  nni = 370  qu = 3  hu =    1.26e-01
+
+t =   9.00e+00  nst = 345  nfe = 382  nni = 378  qu = 3  hu =    1.26e-01
+
+t =   1.00e+01  nst = 353  nfe = 391  nni = 387  qu = 3  hu =    1.26e-01
+
+
+
+ Final statistics for this run:
+
+ CVode real workspace length           = 2249 
+ CVode integer workspace length        =   50 
+ CVSPGMR real workspace length         = 2206 
+ CVSPGMR integer workspace length      =   10 
+ Number of steps                       =  353 
+ Number of f-s                         =  391 
+ Number of f-s (SPGMR)                 =  581 
+ Number of f-s (TOTAL)                 =  972 
+ Number of setups                      =   43 
+ Number of nonlinear iterations        =  387 
+ Number of linear iterations           =  581 
+ Number of preconditioner evaluations  =   43 
+ Number of preconditioner solves       =  952 
+ Number of error test failures         =    1 
+ Number of nonlinear conv. failures    =    0 
+ Number of linear convergence failures =    0 
+ Average Krylov subspace dimension     = 1.501 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_RIGHT
+
+Gram-Schmidt method type is    gstype = MODIFIED_GS
+
+
+t =   1.00e-08  nst = 3  nfe = 10  nni = 6  qu = 2  hu =    1.76e-08
+
+t =   1.00e-07  nst = 7  nfe = 14  nni = 10  qu = 2  hu =    4.78e-08
+
+t =   1.00e-06  nst = 15  nfe = 24  nni = 20  qu = 3  hu =    1.50e-07
+
+t =   1.00e-05  nst = 34  nfe = 47  nni = 43  qu = 5  hu =    6.11e-07
+
+t =   1.00e-04  nst = 118  nfe = 138  nni = 134  qu = 5  hu =    6.64e-06
+
+t =   1.00e-03  nst = 138  nfe = 163  nni = 159  qu = 2  hu =    4.17e-04
+
+t =   1.00e-02  nst = 146  nfe = 174  nni = 170  qu = 3  hu =    1.64e-03
+
+t =   1.00e-01  nst = 169  nfe = 200  nni = 196  qu = 5  hu =    9.35e-03
+
+t =   1.00e+00  nst = 207  nfe = 247  nni = 243  qu = 5  hu =    5.17e-02
+
+t =   2.00e+00  nst = 220  nfe = 262  nni = 258  qu = 5  hu =    7.91e-02
+
+t =   3.00e+00  nst = 228  nfe = 271  nni = 267  qu = 5  hu =    1.32e-01
+
+t =   4.00e+00  nst = 235  nfe = 278  nni = 274  qu = 5  hu =    1.32e-01
+
+t =   5.00e+00  nst = 240  nfe = 284  nni = 280  qu = 4  hu =    2.06e-01
+
+t =   6.00e+00  nst = 246  nfe = 294  nni = 290  qu = 4  hu =    8.61e-02
+
+t =   7.00e+00  nst = 254  nfe = 306  nni = 302  qu = 2  hu =    2.67e-01
+
+t =   8.00e+00  nst = 257  nfe = 310  nni = 306  qu = 3  hu =    4.13e-01
+
+t =   9.00e+00  nst = 260  nfe = 315  nni = 311  qu = 3  hu =    4.61e-01
+
+t =   1.00e+01  nst = 262  nfe = 321  nni = 317  qu = 3  hu =    2.25e-01
+
+
+
+ Final statistics for this run:
+
+ CVode real workspace length           = 2249 
+ CVode integer workspace length        =   50 
+ CVSPGMR real workspace length         = 2206 
+ CVSPGMR integer workspace length      =   10 
+ Number of steps                       =  262 
+ Number of f-s                         =  321 
+ Number of f-s (SPGMR)                 =  637 
+ Number of f-s (TOTAL)                 =  958 
+ Number of setups                      =   55 
+ Number of nonlinear iterations        =  317 
+ Number of linear iterations           =  637 
+ Number of preconditioner evaluations  =   55 
+ Number of preconditioner solves       =  918 
+ Number of error test failures         =    3 
+ Number of nonlinear conv. failures    =    4 
+ Number of linear convergence failures =   48 
+ Average Krylov subspace dimension     = 2.009 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_RIGHT
+
+Gram-Schmidt method type is    gstype = CLASSICAL_GS
+
+
+t =   1.00e-08  nst = 3  nfe = 10  nni = 6  qu = 2  hu =    1.76e-08
+
+t =   1.00e-07  nst = 7  nfe = 14  nni = 10  qu = 2  hu =    4.78e-08
+
+t =   1.00e-06  nst = 15  nfe = 24  nni = 20  qu = 3  hu =    1.50e-07
+
+t =   1.00e-05  nst = 34  nfe = 47  nni = 43  qu = 5  hu =    6.11e-07
+
+t =   1.00e-04  nst = 118  nfe = 138  nni = 134  qu = 5  hu =    6.64e-06
+
+t =   1.00e-03  nst = 138  nfe = 163  nni = 159  qu = 2  hu =    4.17e-04
+
+t =   1.00e-02  nst = 146  nfe = 174  nni = 170  qu = 3  hu =    1.64e-03
+
+t =   1.00e-01  nst = 169  nfe = 200  nni = 196  qu = 5  hu =    9.35e-03
+
+t =   1.00e+00  nst = 207  nfe = 247  nni = 243  qu = 5  hu =    5.18e-02
+
+t =   2.00e+00  nst = 219  nfe = 263  nni = 259  qu = 5  hu =    1.23e-01
+
+t =   3.00e+00  nst = 227  nfe = 271  nni = 267  qu = 5  hu =    1.23e-01
+
+t =   4.00e+00  nst = 234  nfe = 279  nni = 275  qu = 5  hu =    1.90e-01
+
+t =   5.00e+00  nst = 239  nfe = 284  nni = 280  qu = 5  hu =    1.90e-01
+
+t =   6.00e+00  nst = 244  nfe = 289  nni = 285  qu = 5  hu =    1.90e-01
+
+t =   7.00e+00  nst = 259  nfe = 311  nni = 307  qu = 4  hu =    1.53e-01
+
+t =   8.00e+00  nst = 265  nfe = 319  nni = 315  qu = 3  hu =    2.48e-01
+
+t =   9.00e+00  nst = 268  nfe = 322  nni = 318  qu = 3  hu =    3.76e-01
+
+t =   1.00e+01  nst = 270  nfe = 324  nni = 320  qu = 2  hu =    5.81e-01
+
+
+
+ Final statistics for this run:
+
+ CVode real workspace length           = 2249 
+ CVode integer workspace length        =   50 
+ CVSPGMR real workspace length         = 2206 
+ CVSPGMR integer workspace length      =   10 
+ Number of steps                       =  270 
+ Number of f-s                         =  324 
+ Number of f-s (SPGMR)                 =  626 
+ Number of f-s (TOTAL)                 =  950 
+ Number of setups                      =   50 
+ Number of nonlinear iterations        =  320 
+ Number of linear iterations           =  626 
+ Number of preconditioner evaluations  =   50 
+ Number of preconditioner solves       =  908 
+ Number of error test failures         =    3 
+ Number of nonlinear conv. failures    =    2 
+ Number of linear convergence failures =   43 
+ Average Krylov subspace dimension     = 1.956 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
diff --git a/examples/cvode/serial/cvRoberts_dns.c b/examples/cvode/serial/cvRoberts_dns.c
new file mode 100644
index 0000000..c63433b
--- /dev/null
+++ b/examples/cvode/serial/cvRoberts_dns.c
@@ -0,0 +1,360 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODE. The problem is from
+ * chemical kinetics, and consists of the following three rate
+ * equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*(y2)^2
+ *    dy3/dt = 3.e7*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01. This program solves the problem with the BDF method,
+ * Newton iteration with the CVDENSE dense linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance. Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+/* Header files with a description of contents used */
+
+#include <cvode/cvode.h>             /* prototypes for CVODE fcts., consts. */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., macros */
+#include <cvode/cvode_dense.h>       /* prototype for CVDense */
+#include <sundials/sundials_dense.h> /* definitions DlsMat DENSE_ELEM */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+
+/* User-defined vector and matrix accessor macros: Ith, IJth */
+
+/* These macros are defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined below. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+
+   IJth(A,i,j) references the (i,j)th element of the dense matrix A, where
+   i and j are in the range [1..NEQ]. The IJth macro is defined using the
+   DENSE_ELEM macro in dense.h. DENSE_ELEM numbers rows and columns of a
+   dense matrix starting from 0. */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* Ith numbers components 1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* IJth numbers rows,cols 1..NEQ */
+
+
+/* Problem Constants */
+
+#define NEQ   3                /* number of equations  */
+#define Y1    RCONST(1.0)      /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1.0e-4)   /* scalar relative tolerance            */
+#define ATOL1 RCONST(1.0e-8)   /* vector absolute tolerance components */
+#define ATOL2 RCONST(1.0e-14)
+#define ATOL3 RCONST(1.0e-6)
+#define T0    RCONST(0.0)      /* initial time           */
+#define T1    RCONST(0.4)      /* first output time      */
+#define TMULT RCONST(10.0)     /* output time factor     */
+#define NOUT  12               /* number of output times */
+
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private functions to output results */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3);
+static void PrintRootInfo(int root_f1, int root_f2);
+
+/* Private function to print final statistics */
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype reltol, t, tout;
+  N_Vector y, abstol;
+  void *cvode_mem;
+  int flag, flagr, iout;
+  int rootsfound[2];
+
+  y = abstol = NULL;
+  cvode_mem = NULL;
+
+  /* Create serial vector of length NEQ for I.C. and abstol */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  abstol = N_VNew_Serial(NEQ); 
+  if (check_flag((void *)abstol, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize y */
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Set the scalar relative tolerance */
+  reltol = RTOL;
+  /* Set the vector absolute tolerance */
+  Ith(abstol,1) = ATOL1;
+  Ith(abstol,2) = ATOL2;
+  Ith(abstol,3) = ATOL3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in y'=f(t,y), the inital time T0, and
+   * the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSVtolerances to specify the scalar relative tolerance
+   * and vector absolute tolerances */
+  flag = CVodeSVtolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSVtolerances", 1)) return(1);
+
+  /* Call CVodeRootInit to specify the root function g with 2 components */
+  flag = CVodeRootInit(cvode_mem, 2, g);
+  if (check_flag(&flag, "CVodeRootInit", 1)) return(1);
+
+  /* Call CVDense to specify the CVDENSE dense linear solver */
+  flag = CVDense(cvode_mem, NEQ);
+  if (check_flag(&flag, "CVDense", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVDlsSetDenseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVDlsSetDenseJacFn", 1)) return(1);
+
+  /* In loop, call CVode, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached.  */
+  printf(" \n3-species kinetics problem\n\n");
+
+  iout = 0;  tout = T1;
+  while(1) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    PrintOutput(t, Ith(y,1), Ith(y,2), Ith(y,3));
+
+    if (flag == CV_ROOT_RETURN) {
+      flagr = CVodeGetRootInfo(cvode_mem, rootsfound);
+      if (check_flag(&flagr, "CVodeGetRootInfo", 1)) return(1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (check_flag(&flag, "CVode", 1)) break;
+    if (flag == CV_SUCCESS) {
+      iout++;
+      tout *= TMULT;
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  /* Print some final statistics */
+  PrintFinalStats(cvode_mem);
+
+  /* Free y and abstol vectors */
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(abstol);
+
+  /* Free integrator memory */
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/*
+ * f routine. Compute function f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  yd1 = Ith(ydot,1) = RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3;
+  yd3 = Ith(ydot,3) = RCONST(3.0e7)*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/*
+ * g routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype y1, y3;
+
+  y1 = Ith(y,1); y3 = Ith(y,3);
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Jacobian routine. Compute J(t,y) = df/dy. *
+ */
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y1, y2, y3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  IJth(J,1,1) = RCONST(-0.04);
+  IJth(J,1,2) = RCONST(1.0e4)*y3;
+  IJth(J,1,3) = RCONST(1.0e4)*y2;
+  IJth(J,2,1) = RCONST(0.04); 
+  IJth(J,2,2) = RCONST(-1.0e4)*y3-RCONST(6.0e7)*y2;
+  IJth(J,2,3) = RCONST(-1.0e4)*y2;
+  IJth(J,3,2) = RCONST(6.0e7)*y2;
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %0.4Le      y =%14.6Le  %14.6Le  %14.6Le\n", t, y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#else
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#endif
+
+  return;
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+
+  return;
+}
+
+/* 
+ * Get and print some final statistics
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nje, nfeLS, nni, ncfn, netf, nge;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  flag = CVodeGetNumGEvals(cvode_mem, &nge);
+  check_flag(&flag, "CVodeGetNumGEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %-6ld nge = %ld\n \n",
+	 nni, ncfn, netf, nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvRoberts_dns.out b/examples/cvode/serial/cvRoberts_dns.out
new file mode 100644
index 0000000..c21cc40
--- /dev/null
+++ b/examples/cvode/serial/cvRoberts_dns.out
@@ -0,0 +1,24 @@
+ 
+3-species kinetics problem
+
+At t = 2.6391e-01      y =  9.899653e-01    3.470564e-05    1.000000e-02
+    rootsfound[] =   0   1
+At t = 4.0000e-01      y =  9.851641e-01    3.386242e-05    1.480205e-02
+At t = 4.0000e+00      y =  9.055097e-01    2.240338e-05    9.446793e-02
+At t = 4.0000e+01      y =  7.158009e-01    9.185098e-06    2.841900e-01
+At t = 4.0000e+02      y =  4.505440e-01    3.223217e-06    5.494528e-01
+At t = 4.0000e+03      y =  1.831964e-01    8.942051e-07    8.168027e-01
+At t = 4.0000e+04      y =  3.898104e-02    1.621656e-07    9.610188e-01
+At t = 4.0000e+05      y =  4.938672e-03    1.985172e-08    9.950613e-01
+At t = 4.0000e+06      y =  5.166093e-04    2.067499e-09    9.994834e-01
+At t = 2.0800e+07      y =  1.000000e-04    4.000395e-10    9.999000e-01
+    rootsfound[] =  -1   0
+At t = 4.0000e+07      y =  5.206409e-05    2.082671e-10    9.999479e-01
+At t = 4.0000e+08      y =  5.211241e-06    2.084507e-11    9.999948e-01
+At t = 4.0000e+09      y =  5.200520e-07    2.080209e-12    9.999995e-01
+At t = 4.0000e+10      y =  5.699485e-08    2.279794e-13    9.999999e-01
+
+Final Statistics:
+nst = 579    nfe  = 817    nsetups = 118    nfeLS = 0      nje = 12
+nni = 813    ncfn = 0      netf = 31     nge = 615
+ 
diff --git a/examples/cvode/serial/cvRoberts_dnsL.c b/examples/cvode/serial/cvRoberts_dnsL.c
new file mode 100644
index 0000000..c378baf
--- /dev/null
+++ b/examples/cvode/serial/cvRoberts_dnsL.c
@@ -0,0 +1,364 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4878 $
+ * $Date: 2016-08-31 15:17:31 -0700 (Wed, 31 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODE. The problem is from
+ * chemical kinetics, and consists of the following three rate
+ * equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*(y2)^2
+ *    dy3/dt = 3.e7*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01. This program solves the problem with the BDF method,
+ * Newton iteration with the LAPACK dense linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance. Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+/* Header files with a description of contents used */
+
+#include <cvode/cvode.h>             /* prototypes for CVODE fcts. and consts. */
+#include <cvode/cvode_lapack.h>      /* prototype for CVLapackDense */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., and macros */
+
+/* User-defined vector and matrix accessor macros: Ith, IJth */
+
+/* These macros are defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined below. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+
+   IJth(A,i,j) references the (i,j)th element of the dense matrix A, where
+   i and j are in the range [1..NEQ]. The IJth macro is defined using the
+   DENSE_ELEM macro in dense.h. DENSE_ELEM numbers rows and columns of a
+   dense matrix starting from 0. */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)              /* Ith numbers components 1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* IJth numbers rows,cols 1..NEQ */
+
+
+/* Problem Constants */
+
+#define NEQ   3                /* number of equations  */
+#define Y1    RCONST(1.0)      /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1.0e-4)   /* scalar relative tolerance            */
+#define ATOL1 RCONST(1.0e-8)   /* vector absolute tolerance components */
+#define ATOL2 RCONST(1.0e-14)
+#define ATOL3 RCONST(1.0e-6)
+#define T0    RCONST(0.0)      /* initial time           */
+#define T1    RCONST(0.4)      /* first output time      */
+#define TMULT RCONST(10.0)     /* output time factor     */
+#define NOUT  12               /* number of output times */
+
+#define ZERO  RCONST(0.0)
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private functions to output results */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3);
+static void PrintRootInfo(int root_f1, int root_f2);
+
+/* Private function to print final statistics */
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype reltol, t, tout;
+  N_Vector y, abstol;
+  void *cvode_mem;
+  int flag, flagr, iout;
+  int rootsfound[2];
+
+  y = abstol = NULL;
+  cvode_mem = NULL;
+
+  /* Create serial vector of length NEQ for I.C. and abstol */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  abstol = N_VNew_Serial(NEQ); 
+  if (check_flag((void *)abstol, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize y */
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Set the scalar relative tolerance */
+  reltol = RTOL;
+  /* Set the vector absolute tolerance */
+  Ith(abstol,1) = ATOL1;
+  Ith(abstol,2) = ATOL2;
+  Ith(abstol,3) = ATOL3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in y'=f(t,y), the inital time T0, and
+   * the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSVtolerances to specify the scalar relative tolerance
+   * and vector absolute tolerances */
+  flag = CVodeSVtolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSVtolerances", 1)) return(1);
+
+  /* Call CVodeRootInit to specify the root function g with 2 components */
+  flag = CVodeRootInit(cvode_mem, 2, g);
+  if (check_flag(&flag, "CVodeRootInit", 1)) return(1);
+
+  /* Call CVLapackDense to specify the LAPACK dense linear solver */
+  flag = CVLapackDense(cvode_mem, NEQ);
+  if (check_flag(&flag, "CVLapackDense", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVDlsSetDenseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVDlsSetDenseJacFn", 1)) return(1);
+
+  /* In loop, call CVode, print results, and test for error.
+   * Break out of loop when NOUT preset output times have been reached.  */
+  printf(" \n3-species kinetics problem\n\n");
+
+  iout = 0;  tout = T1;
+  while(1) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    PrintOutput(t, Ith(y,1), Ith(y,2), Ith(y,3));
+
+    if (flag == CV_ROOT_RETURN) {
+      flagr = CVodeGetRootInfo(cvode_mem, rootsfound);
+      if (check_flag(&flagr, "CVodeGetRootInfo", 1)) return(1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (check_flag(&flag, "CVode", 1)) break;
+    if (flag == CV_SUCCESS) {
+      iout++;
+      tout *= TMULT;
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  /* Print some final statistics */
+  PrintFinalStats(cvode_mem);
+
+  /* Free y vector and abstol vectors */
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(abstol);
+
+  /* Free integrator memory */
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/*
+ * f routine. Compute function f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  yd1 = Ith(ydot,1) = RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3;
+  yd3 = Ith(ydot,3) = RCONST(3.0e7)*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/*
+ * g routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype y1, y3;
+
+  y1 = Ith(y,1); y3 = Ith(y,3);
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Jacobian routine. Compute J(t,y) = df/dy. *
+ */
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y1, y2, y3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  IJth(J,1,1) = RCONST(-0.04);
+  IJth(J,1,2) = RCONST(1.0e4)*y3;
+  IJth(J,1,3) = RCONST(1.0e4)*y2;
+
+  IJth(J,2,1) = RCONST(0.04); 
+  IJth(J,2,2) = RCONST(-1.0e4)*y3-RCONST(6.0e7)*y2;
+  IJth(J,2,3) = RCONST(-1.0e4)*y2;
+
+  IJth(J,3,1) = ZERO;
+  IJth(J,3,2) = RCONST(6.0e7)*y2;
+  IJth(J,3,3) = ZERO;
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %0.4Le      y =%14.6Le  %14.6Le  %14.6Le\n", t, y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %0.4le      y =%14.6le  %14.6le  %14.6le\n", t, y1, y2, y3);
+#else
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#endif
+
+  return;
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+
+  return;
+}
+
+/* 
+ * Get and print some final statistics
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nje, nfeLS, nni, ncfn, netf, nge;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  flag = CVodeGetNumGEvals(cvode_mem, &nge);
+  check_flag(&flag, "CVodeGetNumGEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %-6ld nge = %ld\n \n",
+	 nni, ncfn, netf, nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvRoberts_dnsL.out b/examples/cvode/serial/cvRoberts_dnsL.out
new file mode 100644
index 0000000..747ed23
--- /dev/null
+++ b/examples/cvode/serial/cvRoberts_dnsL.out
@@ -0,0 +1,24 @@
+ 
+3-species kinetics problem
+
+At t = 2.6391e-01      y =  9.899653e-01    3.470564e-05    1.000000e-02
+    rootsfound[] =   0   1
+At t = 4.0000e-01      y =  9.851641e-01    3.386242e-05    1.480205e-02
+At t = 4.0000e+00      y =  9.055097e-01    2.240338e-05    9.446793e-02
+At t = 4.0000e+01      y =  7.158009e-01    9.185098e-06    2.841900e-01
+At t = 4.0000e+02      y =  4.505440e-01    3.223217e-06    5.494528e-01
+At t = 4.0000e+03      y =  1.831964e-01    8.942051e-07    8.168027e-01
+At t = 4.0000e+04      y =  3.898104e-02    1.621656e-07    9.610188e-01
+At t = 4.0000e+05      y =  4.938681e-03    1.985174e-08    9.950613e-01
+At t = 4.0000e+06      y =  5.170501e-04    2.069253e-09    9.994829e-01
+At t = 2.0809e+07      y =  1.000000e-04    4.000397e-10    9.999000e-01
+    rootsfound[] =  -1   0
+At t = 4.0000e+07      y =  5.205557e-05    2.082332e-10    9.999479e-01
+At t = 4.0000e+08      y =  5.207434e-06    2.082985e-11    9.999948e-01
+At t = 4.0000e+09      y =  5.231265e-07    2.092507e-12    9.999995e-01
+At t = 4.0000e+10      y =  5.009148e-08    2.003659e-13    9.999999e-01
+
+Final Statistics:
+nst = 577    nfe  = 838    nsetups = 125    nfeLS = 0      nje = 12
+nni = 834    ncfn = 0      netf = 33     nge = 612
+ 
diff --git a/examples/cvode/serial/cvRoberts_dns_uw.c b/examples/cvode/serial/cvRoberts_dns_uw.c
new file mode 100644
index 0000000..71921e5
--- /dev/null
+++ b/examples/cvode/serial/cvRoberts_dns_uw.c
@@ -0,0 +1,377 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODE. The problem is from
+ * chemical kinetics, and consists of the following three rate
+ * equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*(y2)^2
+ *    dy3/dt = 3.e7*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01. This program solves the problem with the BDF method,
+ * Newton iteration with the CVDENSE dense linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a user-supplied function to compute the error weights
+ * required for the WRMS norm calculations.
+ * Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+/* Header files with a description of contents used here */
+
+#include <cvode/cvode.h>             /* prototypes for CVODE fcts. and consts. */
+#include <cvode/cvode_dense.h>       /* prototype for CVDense */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, functions, and macros */
+#include <sundials/sundials_dense.h> /* definitions DlsMat and DENSE_ELEM */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+#include <sundials/sundials_math.h>  /* definition of ABS */
+
+/* User-defined vector and matrix accessor macros: Ith, IJth */
+
+/* These macros are defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined below. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+
+   IJth(A,i,j) references the (i,j)th element of the dense matrix A, where
+   i and j are in the range [1..NEQ]. The IJth macro is defined using the
+   DENSE_ELEM macro in dense.h. DENSE_ELEM numbers rows and columns of a
+   dense matrix starting from 0. */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* Ith numbers components 1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* IJth numbers rows,cols 1..NEQ */
+
+
+/* Problem Constants */
+
+#define NEQ   3                /* number of equations  */
+#define Y1    RCONST(1.0)      /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1.0e-4)   /* scalar relative tolerance            */
+#define ATOL1 RCONST(1.0e-8)   /* vector absolute tolerance components */
+#define ATOL2 RCONST(1.0e-14)
+#define ATOL3 RCONST(1.0e-6)
+#define T0    RCONST(0.0)      /* initial time           */
+#define T1    RCONST(0.4)      /* first output time      */
+#define TMULT RCONST(10.0)     /* output time factor     */
+#define NOUT  12               /* number of output times */
+
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+/* Private functions to output results */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3);
+static void PrintRootInfo(int root_f1, int root_f2);
+
+/* Private function to print final statistics */
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype t, tout;
+  N_Vector y;
+  void *cvode_mem;
+  int flag, flagr, iout;
+  int rootsfound[2];
+
+  y = NULL;
+  cvode_mem = NULL;
+
+  /* Create serial vector of length NEQ for I.C. */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize y */
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in y'=f(t,y), the inital time T0, and
+   * the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Use private function to compute error weights */
+  flag = CVodeWFtolerances(cvode_mem, ewt);
+  if (check_flag(&flag, "CVodeSetEwtFn", 1)) return(1);
+
+  /* Call CVodeRootInit to specify the root function g with 2 components */
+  flag = CVodeRootInit(cvode_mem, 2, g);
+  if (check_flag(&flag, "CVodeRootInit", 1)) return(1);
+
+  /* Call CVDense to specify the CVDENSE dense linear solver */
+  flag = CVDense(cvode_mem, NEQ);
+  if (check_flag(&flag, "CVDense", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVDlsSetDenseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVDlsSetDenseJacFn", 1)) return(1);
+
+  /* In loop, call CVode, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached.  */
+  printf(" \n3-species kinetics problem\n\n");
+
+  iout = 0;  tout = T1;
+  while(1) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    PrintOutput(t, Ith(y,1), Ith(y,2), Ith(y,3));
+
+    if (flag == CV_ROOT_RETURN) {
+      flagr = CVodeGetRootInfo(cvode_mem, rootsfound);
+      check_flag(&flagr, "CVodeGetRootInfo", 1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (check_flag(&flag, "CVode", 1)) break;
+    if (flag == CV_SUCCESS) {
+      iout++;
+      tout *= TMULT;
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  /* Print some final statistics */
+  PrintFinalStats(cvode_mem);
+
+  /* Free y vector */
+  N_VDestroy_Serial(y);
+
+  /* Free integrator memory */
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/*
+ * f routine. Compute function f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  yd1 = Ith(ydot,1) = RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3;
+  yd3 = Ith(ydot,3) = RCONST(3.0e7)*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);      
+}
+
+/*
+ * g routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype y1, y3;
+
+  y1 = Ith(y,1); y3 = Ith(y,3);
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Jacobian routine. Compute J(t,y) = df/dy. *
+ */
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y1, y2, y3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  IJth(J,1,1) = RCONST(-0.04);
+  IJth(J,1,2) = RCONST(1.0e4)*y3;
+  IJth(J,1,3) = RCONST(1.0e4)*y2;
+  IJth(J,2,1) = RCONST(0.04); 
+  IJth(J,2,2) = RCONST(-1.0e4)*y3-RCONST(6.0e7)*y2;
+  IJth(J,2,3) = RCONST(-1.0e4)*y2;
+  IJth(J,3,2) = RCONST(6.0e7)*y2;
+
+  return(0);
+}
+
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %0.4Le      y =%14.6Le  %14.6Le  %14.6Le\n", t, y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#else
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#endif
+
+  return;
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+
+  return;
+}
+
+/* 
+ * Get and print some final statistics
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nje, nfeLS, nni, ncfn, netf, nge;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  flag = CVodeGetNumGEvals(cvode_mem, &nge);
+  check_flag(&flag, "CVodeGetNumGEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %-6ld nge = %ld\n \n",
+	 nni, ncfn, netf, nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvRoberts_dns_uw.out b/examples/cvode/serial/cvRoberts_dns_uw.out
new file mode 100644
index 0000000..ce633e3
--- /dev/null
+++ b/examples/cvode/serial/cvRoberts_dns_uw.out
@@ -0,0 +1,24 @@
+ 
+3-species kinetics problem
+
+At t = 2.6391e-01      y =  9.899653e-01    3.470564e-05    1.000000e-02
+    rootsfound[] =   0   1
+At t = 4.0000e-01      y =  9.851641e-01    3.386242e-05    1.480205e-02
+At t = 4.0000e+00      y =  9.055097e-01    2.240338e-05    9.446793e-02
+At t = 4.0000e+01      y =  7.158010e-01    9.185084e-06    2.841898e-01
+At t = 4.0000e+02      y =  4.504693e-01    3.222618e-06    5.495275e-01
+At t = 4.0000e+03      y =  1.832127e-01    8.943456e-07    8.167865e-01
+At t = 4.0000e+04      y =  3.899386e-02    1.622228e-07    9.610060e-01
+At t = 4.0000e+05      y =  4.937166e-03    1.984537e-08    9.950628e-01
+At t = 4.0000e+06      y =  5.167725e-04    2.068146e-09    9.994832e-01
+At t = 2.0792e+07      y =  1.000000e-04    4.000399e-10    9.999000e-01
+    rootsfound[] =  -1   0
+At t = 4.0000e+07      y =  5.201944e-05    2.080885e-10    9.999480e-01
+At t = 4.0000e+08      y =  5.222674e-06    2.089080e-11    9.999948e-01
+At t = 4.0000e+09      y =  5.206257e-07    2.082504e-12    9.999995e-01
+At t = 4.0000e+10      y =  4.244776e-08    1.697910e-13    1.000000e-00
+
+Final Statistics:
+nst = 545    nfe  = 773    nsetups = 117    nfeLS = 0      nje = 12
+nni = 769    ncfn = 0      netf = 30     nge = 573
+ 
diff --git a/examples/cvode/serial/cvRoberts_klu.c b/examples/cvode/serial/cvRoberts_klu.c
new file mode 100644
index 0000000..3292397
--- /dev/null
+++ b/examples/cvode/serial/cvRoberts_klu.c
@@ -0,0 +1,382 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward.
+ *      Based on cvRoberts_dns.c and modified to use KLU.
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODE. The problem is from
+ * chemical kinetics, and consists of the following three rate
+ * equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*(y2)^2
+ *    dy3/dt = 3.e7*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01. This program solves the problem with the BDF method,
+ * Newton iteration with the CVKLU sparse direct linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance. Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+/* Header files with a description of contents used */
+
+#include <cvode/cvode.h>             /* prototypes for CVODE fcts., consts. */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., macros */
+#include <cvode/cvode_klu.h>         /* prototype for CVKLU */
+#include <sundials/sundials_sparse.h> /* definitions SlsMat */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+
+/* User-defined vector and matrix accessor macro: Ith */
+
+/* These macros are defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined below. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+*/
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* Ith numbers components 1..NEQ */
+
+
+/* Problem Constants */
+
+#define ZERO  RCONST(0.0)
+
+#define NEQ   3                /* number of equations  */
+#define Y1    RCONST(1.0)      /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1.0e-4)   /* scalar relative tolerance            */
+#define ATOL1 RCONST(1.0e-8)   /* vector absolute tolerance components */
+#define ATOL2 RCONST(1.0e-14)
+#define ATOL3 RCONST(1.0e-6)
+#define T0    RCONST(0.0)      /* initial time           */
+#define T1    RCONST(0.4)      /* first output time      */
+#define TMULT RCONST(10.0)     /* output time factor     */
+#define NOUT  12               /* number of output times */
+
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private functions to output results */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3);
+static void PrintRootInfo(int root_f1, int root_f2);
+
+/* Private function to print final statistics */
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype reltol, t, tout;
+  N_Vector y, abstol;
+  void *cvode_mem;
+  int flag, flagr, iout, nnz;
+  int rootsfound[2];
+
+  y = abstol = NULL;
+  cvode_mem = NULL;
+
+  /* Create serial vector of length NEQ for I.C. and abstol */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  abstol = N_VNew_Serial(NEQ); 
+  if (check_flag((void *)abstol, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize y */
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Set the scalar relative tolerance */
+  reltol = RTOL;
+  /* Set the vector absolute tolerance */
+  Ith(abstol,1) = ATOL1;
+  Ith(abstol,2) = ATOL2;
+  Ith(abstol,3) = ATOL3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in y'=f(t,y), the inital time T0, and
+   * the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSVtolerances to specify the scalar relative tolerance
+   * and vector absolute tolerances */
+  flag = CVodeSVtolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSVtolerances", 1)) return(1);
+
+  /* Call CVodeRootInit to specify the root function g with 2 components */
+  flag = CVodeRootInit(cvode_mem, 2, g);
+  if (check_flag(&flag, "CVodeRootInit", 1)) return(1);
+
+  /* Call CVKLU to specify the CVKLU sparse direct linear solver */
+  nnz = NEQ * NEQ;
+  flag = CVKLU(cvode_mem, NEQ, nnz, CSC_MAT);
+  if (check_flag(&flag, "CVKLU", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVSlsSetSparseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVSlsSetSparseJacFn", 1)) return(1);
+
+  /* In loop, call CVode, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached.  */
+  printf(" \n3-species kinetics problem\n\n");
+
+  iout = 0;  tout = T1;
+  while(1) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    PrintOutput(t, Ith(y,1), Ith(y,2), Ith(y,3));
+
+    if (flag == CV_ROOT_RETURN) {
+      flagr = CVodeGetRootInfo(cvode_mem, rootsfound);
+      if (check_flag(&flagr, "CVodeGetRootInfo", 1)) return(1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (check_flag(&flag, "CVode", 1)) break;
+    if (flag == CV_SUCCESS) {
+      iout++;
+      tout *= TMULT;
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  /* Print some final statistics */
+  PrintFinalStats(cvode_mem);
+
+  /* Free y and abstol vectors */
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(abstol);
+
+  /* Free integrator memory */
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/*
+ * f routine. Compute function f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  yd1 = Ith(ydot,1) = RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3;
+  yd3 = Ith(ydot,3) = RCONST(3.0e7)*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/*
+ * g routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype y1, y3;
+
+  y1 = Ith(y,1); y3 = Ith(y,3);
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Jacobian routine. Compute J(t,y) = df/dy. *
+ */
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int* colptrs;
+  int* rowvals;
+  realtype* data;
+  
+  yval = N_VGetArrayPointer_Serial(y);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data    = JacMat->data;
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = RCONST(-0.04);
+  rowvals[0] = 0;
+  data[1] = RCONST(0.04);
+  rowvals[1] = 1;
+  data[2] = ZERO;
+  rowvals[2] = 2;
+
+  data[3] = RCONST(1.0e4)*yval[2];
+  rowvals[3] = 0;
+  data[4] = (RCONST(-1.0e4)*yval[2]) - (RCONST(6.0e7)*yval[1]);
+  rowvals[4] = 1;
+  data[5] = RCONST(6.0e7)*yval[1];
+  rowvals[5] = 2;
+
+  data[6] = RCONST(1.0e4)*yval[1];
+  rowvals[6] = 0;
+  data[7] = RCONST(-1.0e4)*yval[1];
+  rowvals[7] = 1;
+  data[8] = ZERO;
+  rowvals[8] = 2;
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %0.4Le      y =%14.6Le  %14.6Le  %14.6Le\n", t, y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#else
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#endif
+
+  return;
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+
+  return;
+}
+
+/* 
+ * Get and print some final statistics
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nje, nni, ncfn, netf, nge;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVSlsGetNumJacEvals", 1);
+
+  flag = CVodeGetNumGEvals(cvode_mem, &nge);
+  check_flag(&flag, "CVodeGetNumGEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %-6ld    nge = %ld\n \n",
+	 nni, ncfn, netf, nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvRoberts_klu.out b/examples/cvode/serial/cvRoberts_klu.out
new file mode 100644
index 0000000..776406f
--- /dev/null
+++ b/examples/cvode/serial/cvRoberts_klu.out
@@ -0,0 +1,24 @@
+ 
+3-species kinetics problem
+
+At t = 2.6391e-01      y =  9.899653e-01    3.470564e-05    1.000000e-02
+    rootsfound[] =   0   1
+At t = 4.0000e-01      y =  9.851640e-01    3.386245e-05    1.480209e-02
+At t = 4.0000e+00      y =  9.055156e-01    2.240441e-05    9.446197e-02
+At t = 4.0000e+01      y =  7.158508e-01    9.186546e-06    2.841400e-01
+At t = 4.0000e+02      y =  4.505784e-01    3.223707e-06    5.494184e-01
+At t = 4.0000e+03      y =  1.832290e-01    8.944054e-07    8.167701e-01
+At t = 4.0000e+04      y =  3.898012e-02    1.621625e-07    9.610197e-01
+At t = 4.0000e+05      y =  4.936714e-03    1.984363e-08    9.950633e-01
+At t = 4.0000e+06      y =  5.164962e-04    2.067039e-09    9.994835e-01
+At t = 2.0784e+07      y =  1.000000e-04    4.000395e-10    9.999000e-01
+    rootsfound[] =  -1   0
+At t = 4.0000e+07      y =  5.202874e-05    2.081257e-10    9.999480e-01
+At t = 4.0000e+08      y =  5.206719e-06    2.082698e-11    9.999948e-01
+At t = 4.0000e+09      y =  5.208794e-07    2.083519e-12    9.999995e-01
+At t = 4.0000e+10      y =  5.244455e-08    2.097782e-13    9.999999e-01
+
+Final Statistics:
+nst = 430    nfe  = 574    nsetups = 98     nje = 78
+nni = 570    ncfn = 0      netf = 23        nge = 466
+ 
diff --git a/examples/cvode/serial/cvRoberts_sps.c b/examples/cvode/serial/cvRoberts_sps.c
new file mode 100644
index 0000000..d26954c
--- /dev/null
+++ b/examples/cvode/serial/cvRoberts_sps.c
@@ -0,0 +1,378 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward.
+ *      Based on cvRoberts_dns.c and modified to use SUPERLU_MT.
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODE. The problem is from
+ * chemical kinetics, and consists of the following three rate
+ * equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*(y2)^2
+ *    dy3/dt = 3.e7*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01. This program solves the problem with the BDF method,
+ * Newton iteration with the CVSUPERLUMT sparse direct linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance. Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+/* Header files with a description of contents used */
+
+#include <cvode/cvode.h>             /* prototypes for CVODE fcts., consts. */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., macros */
+#include <cvode/cvode_superlumt.h>   /* prototype for CVSUPERLUMT */
+#include <sundials/sundials_sparse.h> /* definitions SlsMat */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+
+/* User-defined vector and matrix accessor macro: Ith */
+
+/* These macros are defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined below. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+*/
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* Ith numbers components 1..NEQ */
+
+
+/* Problem Constants */
+
+#define ZERO  RCONST(0.0)
+
+#define NEQ   3                /* number of equations  */
+#define Y1    RCONST(1.0)      /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1.0e-4)   /* scalar relative tolerance            */
+#define ATOL1 RCONST(1.0e-8)   /* vector absolute tolerance components */
+#define ATOL2 RCONST(1.0e-14)
+#define ATOL3 RCONST(1.0e-6)
+#define T0    RCONST(0.0)      /* initial time           */
+#define T1    RCONST(0.4)      /* first output time      */
+#define TMULT RCONST(10.0)     /* output time factor     */
+#define NOUT  12               /* number of output times */
+
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private functions to output results */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3);
+static void PrintRootInfo(int root_f1, int root_f2);
+
+/* Private function to print final statistics */
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype reltol, t, tout;
+  N_Vector y, abstol;
+  void *cvode_mem;
+  int flag, flagr, iout, nnz;
+  int rootsfound[2];
+
+  y = abstol = NULL;
+  cvode_mem = NULL;
+
+  /* Create serial vector of length NEQ for I.C. and abstol */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  abstol = N_VNew_Serial(NEQ); 
+  if (check_flag((void *)abstol, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize y */
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Set the scalar relative tolerance */
+  reltol = RTOL;
+  /* Set the vector absolute tolerance */
+  Ith(abstol,1) = ATOL1;
+  Ith(abstol,2) = ATOL2;
+  Ith(abstol,3) = ATOL3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in y'=f(t,y), the inital time T0, and
+   * the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSVtolerances to specify the scalar relative tolerance
+   * and vector absolute tolerances */
+  flag = CVodeSVtolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSVtolerances", 1)) return(1);
+
+  /* Call CVodeRootInit to specify the root function g with 2 components */
+  flag = CVodeRootInit(cvode_mem, 2, g);
+  if (check_flag(&flag, "CVodeRootInit", 1)) return(1);
+
+  /* Call CVSuperLUMT to specify the CVSuperLUMT sparse direct linear solver */
+  nnz = NEQ * NEQ;
+  flag = CVSuperLUMT(cvode_mem, 1, NEQ, nnz);
+  if (check_flag(&flag, "CVSuperLUMT", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVSlsSetSparseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVSlsSetSparseJacFn", 1)) return(1);
+
+  /* In loop, call CVode, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached.  */
+  printf(" \n3-species kinetics problem\n\n");
+
+  iout = 0;  tout = T1;
+  while(1) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    PrintOutput(t, Ith(y,1), Ith(y,2), Ith(y,3));
+
+    if (flag == CV_ROOT_RETURN) {
+      flagr = CVodeGetRootInfo(cvode_mem, rootsfound);
+      if (check_flag(&flagr, "CVodeGetRootInfo", 1)) return(1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (check_flag(&flag, "CVode", 1)) break;
+    if (flag == CV_SUCCESS) {
+      iout++;
+      tout *= TMULT;
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  /* Print some final statistics */
+  PrintFinalStats(cvode_mem);
+
+  /* Free y and abstol vectors */
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(abstol);
+
+  /* Free integrator memory */
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/*
+ * f routine. Compute function f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  yd1 = Ith(ydot,1) = RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3;
+  yd3 = Ith(ydot,3) = RCONST(3.0e7)*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/*
+ * g routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype y1, y3;
+
+  y1 = Ith(y,1); y3 = Ith(y,3);
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Jacobian routine. Compute J(t,y) = df/dy. *
+ */
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int *colptrs = *JacMat->colptrs;
+  int *rowvals = *JacMat->rowvals;
+
+  yval = N_VGetArrayPointer_Serial(y);
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  JacMat->data[0] = RCONST(-0.04);
+  rowvals[0] = 0;
+  JacMat->data[1] = RCONST(0.04);
+  rowvals[1] = 1;
+  JacMat->data[2] = ZERO;
+  rowvals[2] = 2;
+
+  JacMat->data[3] = RCONST(1.0e4)*yval[2];
+  rowvals[3] = 0;
+  JacMat->data[4] = (RCONST(-1.0e4)*yval[2]) - (RCONST(6.0e7)*yval[1]);
+  rowvals[4] = 1;
+  JacMat->data[5] = RCONST(6.0e7)*yval[1];
+  rowvals[5] = 2;
+
+  JacMat->data[6] = RCONST(1.0e4)*yval[1];
+  rowvals[6] = 0;
+  JacMat->data[7] = RCONST(-1.0e4)*yval[1];
+  rowvals[7] = 1;
+  JacMat->data[8] = ZERO;
+  rowvals[8] = 2;
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %0.4Le      y =%14.6Le  %14.6Le  %14.6Le\n", t, y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#else
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#endif
+
+  return;
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+
+  return;
+}
+
+/* 
+ * Get and print some final statistics
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nje, nni, ncfn, netf, nge;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVSlsGetNumJacEvals", 1);
+
+  flag = CVodeGetNumGEvals(cvode_mem, &nge);
+  check_flag(&flag, "CVodeGetNumGEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %-6ld    nge = %ld\n \n",
+	 nni, ncfn, netf, nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvode/serial/cvRoberts_sps.out b/examples/cvode/serial/cvRoberts_sps.out
new file mode 100644
index 0000000..b92bc8e
--- /dev/null
+++ b/examples/cvode/serial/cvRoberts_sps.out
@@ -0,0 +1,24 @@
+ 
+3-species kinetics problem
+
+At t = 2.6391e-01      y =  9.899653e-01    3.470564e-05    1.000000e-02
+    rootsfound[] =   0   1
+At t = 4.0000e-01      y =  9.851641e-01    3.386242e-05    1.480205e-02
+At t = 4.0000e+00      y =  9.055097e-01    2.240338e-05    9.446793e-02
+At t = 4.0000e+01      y =  7.158017e-01    9.185037e-06    2.841892e-01
+At t = 4.0000e+02      y =  4.505360e-01    3.223271e-06    5.494608e-01
+At t = 4.0000e+03      y =  1.832299e-01    8.944378e-07    8.167692e-01
+At t = 4.0000e+04      y =  3.898902e-02    1.622006e-07    9.610108e-01
+At t = 4.0000e+05      y =  4.936383e-03    1.984224e-08    9.950636e-01
+At t = 4.0000e+06      y =  5.168093e-04    2.068293e-09    9.994832e-01
+At t = 2.0790e+07      y =  1.000000e-04    4.000397e-10    9.999000e-01
+    rootsfound[] =  -1   0
+At t = 4.0000e+07      y =  5.202440e-05    2.081083e-10    9.999480e-01
+At t = 4.0000e+08      y =  5.201061e-06    2.080435e-11    9.999948e-01
+At t = 4.0000e+09      y =  5.258603e-07    2.103442e-12    9.999995e-01
+At t = 4.0000e+10      y =  6.934511e-08    2.773804e-13    9.999999e-01
+
+Final Statistics:
+nst = 542    nfe  = 755    nsetups = 107    nje = 11
+nni = 751    ncfn = 0      netf = 22        nge = 570
+ 
diff --git a/examples/cvodes/C_openmp/CMakeLists.txt b/examples/cvodes/C_openmp/CMakeLists.txt
new file mode 100644
index 0000000..6c0c90e
--- /dev/null
+++ b/examples/cvodes/C_openmp/CMakeLists.txt
@@ -0,0 +1,128 @@
+# ---------------------------------------------------------------
+# Programmer:  Ting Yan @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for CVODES OpenMP examples
+
+# Only include tests if OpenMP is enabled
+IF(OPENMP_FOUND)
+
+# Add variable CVODES_examples_OMP with the names of the openmp CVODES examples
+SET(CVODES_examples_OMP
+  cvsAdvDiff_bnd_omp
+  )
+
+ENDIF(OPENMP_FOUND)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODES_LIB sundials_cvodes_static)
+  SET(NVECOMP_LIB sundials_nvecopenmp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODES_LIB sundials_cvodes_shared)
+  SET(NVECOMP_LIB sundials_nvecopenmp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+SET(SUNDIALS_LIBS ${CVODES_LIB} ${NVECOMP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# update the compilation flags to include OpenMP support
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+
+# Add the build and install targets for each CVODES example
+FOREACH(example ${CVODES_examples_OMP})
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} TEST_ARGS 4)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/C_openmp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${CVODES_examples_OMP})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/C_openmp)
+
+  # Install the extra files
+  FOREACH(extrafile ${CVODES_extras_OMP})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/C_openmp)
+  ENDFOREACH(extrafile ${CVODES_extras_OMP})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "CVODES")
+  SET(SOLVER_LIB "sundials_cvodes")
+  LIST2STRING(CVODES_examples_OMP EXAMPLES)
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvodes/C_openmp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/cvodes/C_openmp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/C_openmp 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvodes/C_openmp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/cvodes/C_openmp/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/C_openmp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/cvodes/C_openmp/README b/examples/cvodes/C_openmp/README
new file mode 100644
index 0000000..884a0bf
--- /dev/null
+++ b/examples/cvodes/C_openmp/README
@@ -0,0 +1,49 @@
+List of C_openmp CVODES examples
+
+  cvsAdvDiff_bnd_omp: banded example using OpenMP
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/cvodes/C_openmp/cvsAdvDiff_bnd_omp.c b/examples/cvodes/C_openmp/cvsAdvDiff_bnd_omp.c
new file mode 100644
index 0000000..8f4f1fa
--- /dev/null
+++ b/examples/cvodes/C_openmp/cvsAdvDiff_bnd_omp.c
@@ -0,0 +1,458 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ *     Based on cvsAdvDiff_bnd.c and parallelized with OpenMP
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem with a banded Jacobian,
+ * with the program for its solution by CVODES.
+ * The problem is the semi-discrete form of the advection-diffusion
+ * equation in 2-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx + d^2 u / dy^2
+ * on the rectangle 0 <= x <= 2, 0 <= y <= 1, and the time
+ * interval 0 <= t <= 1. Homogeneous Dirichlet boundary conditions
+ * are posed, and the initial condition is
+ *   u(x,y,t=0) = x(2-x)y(1-y)exp(5xy).
+ * The PDE is discretized on a uniform MX+2 by MY+2 grid with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX*MY.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVBAND band linear solver, and a user-supplied
+ * Jacobian routine.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .1, .2, ..., 1.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * Optionally, we can set the number of threads from environment 
+ * variable or command line. To check the current value for number
+ * of threads from environment:
+ *      % echo $OMP_NUM_THREADS
+ *
+ * Execution:
+ *
+ * If the user want to use the default value or the number of threads 
+ * from environment value:
+ *      % ./cvsAdvDiff_bnd_omp 
+ * If the user want to specify the number of threads to use
+ *      % ./cvsAdvDiff_bnd_omp num_threads
+ * where num_threads is the number of threads the user want to use 
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+/* Header files with a description of contents used in cvbanx.c */
+
+#include <cvodes/cvodes.h>             /* prototypes for CVODE fcts., consts. */
+#include <cvodes/cvodes_band.h>        /* prototype for CVBand */
+#include <nvector/nvector_openmp.h>  /* serial N_Vector types, fcts., macros */
+#include <sundials/sundials_band.h>  /* definitions of type DlsMat and macros */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+#include <sundials/sundials_math.h>  /* definition of ABS and EXP */
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+/* Problem Constants */
+
+#define XMAX  RCONST(2.0)    /* domain boundaries         */
+#define YMAX  RCONST(1.0)
+#define MX    10             /* mesh dimensions           */
+#define MY    5
+#define NEQ   MX*MY          /* number of equations       */
+#define ATOL  RCONST(1.0e-5) /* scalar absolute tolerance */
+#define T0    RCONST(0.0)    /* initial time              */
+#define T1    RCONST(0.1)    /* first output time         */
+#define DTOUT RCONST(0.1)    /* output time increment     */
+#define NOUT  10             /* number of output times    */
+
+#define ZERO RCONST(0.0)
+#define HALF RCONST(0.5)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+#define FIVE RCONST(5.0)
+
+/* User-defined vector access macro IJth */
+
+/* IJth is defined in order to isolate the translation from the
+   mathematical 2-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. 
+   IJth(vdata,i,j) references the element in the vdata array for
+   u at mesh point (i,j), where 1 <= i <= MX, 1 <= j <= MY.
+   The vdata array is obtained via the macro call vdata = NV_DATA_S(v),
+   where v is an N_Vector. 
+   The variables are ordered by the y index j, then by the x index i. */
+
+#define IJth(vdata,i,j) (vdata[(j-1) + (i-1)*MY])
+
+/* Type : UserData (contains grid constants) */
+
+typedef struct {
+  realtype dx, dy, hdcoef, hacoef, vdcoef;
+  int nthreads;
+} *UserData;
+
+/* Private Helper Functions */
+
+static void SetIC(N_Vector u, UserData data);
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax);
+static void PrintOutput(realtype t, realtype umax, long int nst);
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, char *funcname, int opt);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  realtype dx, dy, reltol, abstol, t, tout, umax;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag;
+  long int nst;
+  int num_threads;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Set the number of threads to use */
+  num_threads = 1;     /* default value */
+#ifdef _OPENMP
+  num_threads = omp_get_max_threads();  /* Overwrite with OMP_NUM_THREADS environment variable */
+#endif
+  if (argc > 1)        /* overwrithe with command line value, if supplied */
+    num_threads = strtol(argv[1], NULL, 0);
+
+  /* Create a serial vector */
+
+  u = N_VNew_OpenMP(NEQ, num_threads);  /* Allocate u vector */
+  if(check_flag((void*)u, "N_VNew_OpenMP", 0)) return(1);
+
+  reltol = ZERO;  /* Set the tolerances */
+  abstol = ATOL;
+
+  data = (UserData) malloc(sizeof *data);  /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  dx = data->dx = XMAX/(MX+1);  /* Set grid coefficients in data */
+  dy = data->dy = YMAX/(MY+1);
+  data->hdcoef = ONE/(dx*dx);
+  data->hacoef = HALF/(TWO*dx);
+  data->vdcoef = ONE/(dy*dy);
+  data->nthreads = num_threads;
+
+  SetIC(u, data);  /* Initialize u vector */
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerance */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVBand to specify the CVBAND band linear solver */
+  flag = CVBand(cvode_mem, NEQ, MY, MY);
+  if(check_flag(&flag, "CVBand", 1)) return(1);
+
+  /* Set the user-supplied Jacobian routine Jac */
+  flag = CVDlsSetBandJacFn(cvode_mem, Jac);
+  if(check_flag(&flag, "CVDlsSetBandJacFn", 1)) return(1);
+
+  /* In loop over output points: call CVode, print results, test for errors */
+
+  umax = N_VMaxNorm(u);
+  PrintHeader(reltol, abstol, umax);
+  for(iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1)) break;
+    umax = N_VMaxNorm(u);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1);
+    PrintOutput(t, umax, nst);
+  }
+ 
+  PrintFinalStats(cvode_mem);  /* Print some final statistics   */
+  printf("num_threads = %i\n\n", num_threads);
+   
+
+  N_VDestroy_OpenMP(u);   /* Free the u vector */
+  CVodeFree(&cvode_mem);  /* Free the integrator memory */
+  free(data);             /* Free the user data */
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u,N_Vector udot, void *user_data)
+{
+  realtype uij, udn, uup, ult, urt, hordc, horac, verdc, hdiff, hadv, vdiff;
+  realtype *udata, *dudata;
+  int i, j;
+  UserData data;
+
+  udata = NV_DATA_OMP(u);
+  dudata = NV_DATA_OMP(udot);
+
+  /* Extract needed constants from data */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  /* Loop over all grid points. */
+#pragma omp parallel for default(shared) private(j, i, uij, udn, uup, ult, urt, hdiff, hadv, vdiff) num_threads(data->nthreads)
+  for (j=1; j <= MY; j++) {
+
+    for (i=1; i <= MX; i++) {
+
+      /* Extract u at x_i, y_j and four neighboring points */
+
+      uij = IJth(udata, i, j);
+      udn = (j == 1)  ? ZERO : IJth(udata, i, j-1);
+      uup = (j == MY) ? ZERO : IJth(udata, i, j+1);
+      ult = (i == 1)  ? ZERO : IJth(udata, i-1, j);
+      urt = (i == MX) ? ZERO : IJth(udata, i+1, j);
+
+      /* Set diffusion and advection terms and load into udot */
+
+      hdiff = hordc*(ult - TWO*uij + urt);
+      hadv = horac*(urt - ult);
+      vdiff = verdc*(uup - TWO*uij + udn);
+      IJth(dudata, i, j) = hdiff + hadv + vdiff;
+    }
+  }
+
+  return(0);
+}
+
+/* Jacobian routine. Compute J(t,u). */
+
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  long int i, j, k;
+  realtype *kthCol, hordc, horac, verdc;
+  UserData data;
+  
+  /*
+    The components of f = udot that depend on u(i,j) are
+    f(i,j), f(i-1,j), f(i+1,j), f(i,j-1), f(i,j+1), with
+      df(i,j)/du(i,j) = -2 (1/dx^2 + 1/dy^2)
+      df(i-1,j)/du(i,j) = 1/dx^2 + .25/dx  (if i > 1)
+      df(i+1,j)/du(i,j) = 1/dx^2 - .25/dx  (if i < MX)
+      df(i,j-1)/du(i,j) = 1/dy^2           (if j > 1)
+      df(i,j+1)/du(i,j) = 1/dy^2           (if j < MY)
+  */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+#pragma omp parallel for collapse(2) default(shared) private(j, u, k, kthCol) num_threads(data->nthreads) 
+  for (j=1; j <= MY; j++) {
+    for (i=1; i <= MX; i++) {
+      k = j-1 + (i-1)*MY;
+      kthCol = BAND_COL(J,k);
+
+      /* set the kth column of J */
+
+      BAND_COL_ELEM(kthCol,k,k) = -TWO*(verdc+hordc);
+      if (i != 1)  BAND_COL_ELEM(kthCol,k-MY,k) = hordc + horac;
+      if (i != MX) BAND_COL_ELEM(kthCol,k+MY,k) = hordc - horac;
+      if (j != 1)  BAND_COL_ELEM(kthCol,k-1,k)  = verdc;
+      if (j != MY) BAND_COL_ELEM(kthCol,k+1,k)  = verdc;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Set initial conditions in u vector */
+
+static void SetIC(N_Vector u, UserData data)
+{
+  int i, j;
+  realtype x, y, dx, dy;
+  realtype *udata;
+
+  /* Extract needed constants from data */
+
+  dx = data->dx;
+  dy = data->dy;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = NV_DATA_OMP(u);
+
+  /* Load initial profile into u vector */
+#pragma omp parallel for default(shared) private(j, i, y, x)  
+  for (j=1; j <= MY; j++) {
+    y = j*dy;
+    for (i=1; i <= MX; i++) {
+      x = i*dx;
+      IJth(udata,i,j) = x*(XMAX - x)*y*(YMAX - y)*SUNRexp(FIVE*x*y);
+    }
+  }  
+}
+
+/* Print first lines of output (problem description) */
+
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax)
+{
+  printf("\n2-D Advection-Diffusion Equation\n");
+  printf("Mesh dimensions = %d X %d\n", MX, MY);
+  printf("Total system size = %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters: reltol = %Lg   abstol = %Lg\n\n",
+         reltol, abstol);
+  printf("At t = %Lg      max.norm(u) =%14.6Le \n", T0, umax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters: reltol = %g   abstol = %g\n\n",
+         reltol, abstol);
+  printf("At t = %g      max.norm(u) =%14.6e \n", T0, umax);
+#else
+  printf("Tolerance parameters: reltol = %g   abstol = %g\n\n", reltol, abstol);
+  printf("At t = %g      max.norm(u) =%14.6e \n", T0, umax);
+#endif
+
+  return;
+}
+
+/* Print current value */
+
+static void PrintOutput(realtype t, realtype umax, long int nst)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %4.2Lf   max.norm(u) =%14.6Le   nst = %4ld\n", t, umax, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %4.2f   max.norm(u) =%14.6e   nst = %4ld\n", t, umax, nst);
+#else
+  printf("At t = %4.2f   max.norm(u) =%14.6e   nst = %4ld\n", t, umax, nst);
+#endif
+
+  return;
+}
+
+/* Get and print some final statistics */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  int flag;
+  long int nst, nfe, nsetups, netf, nni, ncfn, nje, nfeLS;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %ld\n",
+	 nni, ncfn, netf);
+
+  return;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/C_openmp/cvsAdvDiff_bnd_omp.out b/examples/cvodes/C_openmp/cvsAdvDiff_bnd_omp.out
new file mode 100644
index 0000000..9ae3816
--- /dev/null
+++ b/examples/cvodes/C_openmp/cvsAdvDiff_bnd_omp.out
@@ -0,0 +1,23 @@
+
+2-D Advection-Diffusion Equation
+Mesh dimensions = 10 X 5
+Total system size = 50
+Tolerance parameters: reltol = 0   abstol = 1e-05
+
+At t = 0      max.norm(u) =  8.954716e+01 
+At t = 0.10   max.norm(u) =  4.132889e+00   nst =   85
+At t = 0.20   max.norm(u) =  1.039294e+00   nst =  103
+At t = 0.30   max.norm(u) =  2.979829e-01   nst =  113
+At t = 0.40   max.norm(u) =  8.765774e-02   nst =  120
+At t = 0.50   max.norm(u) =  2.625637e-02   nst =  126
+At t = 0.60   max.norm(u) =  7.830425e-03   nst =  130
+At t = 0.70   max.norm(u) =  2.329387e-03   nst =  134
+At t = 0.80   max.norm(u) =  6.953434e-04   nst =  137
+At t = 0.90   max.norm(u) =  2.115983e-04   nst =  140
+At t = 1.00   max.norm(u) =  6.556853e-05   nst =  142
+
+Final Statistics:
+nst = 142    nfe  = 174    nsetups = 23     nfeLS = 0      nje = 3
+nni = 170    ncfn = 0      netf = 3
+num_threads = 4
+
diff --git a/examples/cvodes/parallel/CMakeLists.txt b/examples/cvodes/parallel/CMakeLists.txt
new file mode 100644
index 0000000..78ea644
--- /dev/null
+++ b/examples/cvodes/parallel/CMakeLists.txt
@@ -0,0 +1,164 @@
+# ---------------------------------------------------------------
+# $Revision: 4942 $
+# $Date: 2016-09-21 17:50:22 -0700 (Wed, 21 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the CVODES parallel examples
+
+
+# Add variable CVODES_examples with the names of the parallel CVODES examples
+# "name\;nodes\;tasks"
+SET(CVODES_examples
+  "cvsAdvDiff_ASAp_non_p\;2\;2"
+  "cvsAdvDiff_FSA_non_p\;2\;2\;-sensi stg t"
+  "cvsAdvDiff_FSA_non_p\;2\;2\;-sensi sim t"
+  "cvsAdvDiff_non_p\;2\;2"
+  "cvsAtmDisp_ASAi_kry_bbd_p\;2\;8"
+  "cvsDiurnal_FSA_kry_p\;2\;4\;-sensi stg t"
+  "cvsDiurnal_FSA_kry_p\;2\;4\;-sensi sim t"
+  "cvsDiurnal_kry_bbd_p\;2\;4"
+  "cvsDiurnal_kry_p\;2\;4"
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the C compiler to the MPICC script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODES_LIB sundials_cvodes_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODES_LIB sundials_cvodes_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${CVODES_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each CVODES example
+
+# SGS is there a way to query CMAKE variable to get added executables 
+# rather than keeping our own list?
+SET(ADDED_EXECUTABLES "")
+FOREACH(example_tuple ${CVODES_examples})
+  # first item is example
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+
+  # Only need to add the executable once
+  LIST(FIND ADDED_EXECUTABLES ${example} index)
+  IF(index EQUAL -1)
+    LIST(APPEND ADDED_EXECUTABLES ${example})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  ENDIF(index EQUAL -1)
+
+  # Optional 4th element is test arguments
+  LIST(LENGTH example_tuple n)
+  IF(n EQUAL 4)
+    LIST(GET example_tuple 3 test_args)
+    STRING(REGEX REPLACE " " "_" test_name ${example}_${test_args})
+    SUNDIALS_ADD_TEST(${test_name} ${example} MPI_NPROCS ${number_of_tasks} TEST_ARGS ${test_args})
+  ELSE()
+    SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  ENDIF()
+
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPICC)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPICC)
+  FILE(GLOB example_out ${example}.out*)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example_out} DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${CVODES_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/parallel)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "CVODES")
+  SET(SOLVER_LIB "sundials_cvodes")
+  FOREACH(example_tuple ${CVODES_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${CVODES_examples})
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+  list(REMOVE_DUPLICATES EXAMPLES)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvodes/parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/cvodes/parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvodes/parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/cvodes/parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/parallel
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/cvodes/parallel/README b/examples/cvodes/parallel/README
new file mode 100644
index 0000000..3d032b5
--- /dev/null
+++ b/examples/cvodes/parallel/README
@@ -0,0 +1,68 @@
+List of parallel CVODES examples
+
+(1) Simulation
+
+  cvsAdvDiff_non_p           : 1-D advection-diffusion (nonstiff)
+  cvsDiurnal_kry_bbd_p       : 2-D 2-species diurnal advection-diffusion
+                               BBD preconditioner
+  cvsDiurnal_kry_p           : 2-D 2-species diurnal advection-diffusion
+
+
+(2) Forward sensitivity
+
+  cvsAdvDiff_FSA_non_p       : 1-D advection difusion PDE -
+                               Adams with Functional iteration
+  cvsDiurnal_FSA_kry_p       : 2-D 2-species diurnal advection-diffusion PDE -
+                               BDF with Newton GMRES
+
+(3) Adjoint sensitivity
+
+  cvsAdvDiff_ASAp_non_p      : 1-D advection-diffusion (nonstiff)
+  cvsAtmDisp_ASAi_kry_bbd_p  : 2-D (or 3-D) advection-diffusion-reaction PDE
+                               BDF/SPGMR/BBD
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/cvodes/parallel/cvsAdvDiff_ASAp_non_p.c b/examples/cvodes/parallel/cvsAdvDiff_ASAp_non_p.c
new file mode 100644
index 0000000..314f883
--- /dev/null
+++ b/examples/cvodes/parallel/cvsAdvDiff_ASAp_non_p.c
@@ -0,0 +1,696 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4868 $
+ * $Date: 2016-08-19 10:16:31 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem, with the program for
+ * its solution by CVODE. The problem is the semi-discrete form of
+ * the advection-diffusion equation in 1-D:
+ *   du/dt = p1 * d^2u / dx^2 + p2 * du / dx
+ * on the interval 0 <= x <= 2, and the time interval 0 <= t <= 5.
+ * Homogeneous Dirichlet boundary conditions are posed, and the
+ * initial condition is:
+ *   u(x,t=0) = x(2-x)exp(2x).
+ * The nominal values of the two parameters are: p1=1.0, p2=0.5
+ * The PDE is discretized on a uniform grid of size MX+2 with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX.
+ * This program solves the problem with the option for nonstiff
+ * systems: ADAMS method and functional iteration.
+ * It uses scalar relative and absolute tolerances.
+ *
+ * In addition to the solution, sensitivities with respect to p1
+ * and p2 as well as with respect to initial conditions are
+ * computed for the quantity:
+ *    g(t, u, p) = int_x u(x,t) at t = 5
+ * These sensitivities are obtained by solving the adjoint system:
+ *    dv/dt = -p1 * d^2 v / dx^2 + p2 * dv / dx
+ * with homogeneous Ditrichlet boundary conditions and the final
+ * condition:
+ *    v(x,t=5) = 1.0
+ * Then, v(x, t=0) represents the sensitivity of g(5) with respect
+ * to u(x, t=0) and the gradient of g(5) with respect to p1, p2 is
+ *    (dg/dp)^T = [  int_t int_x (v * d^2u / dx^2) dx dt ]
+ *                [  int_t int_x (v * du / dx) dx dt     ]
+ *
+ * This version uses MPI for user routines.
+ * Execute with Number of Processors = N,  with 1 <= N <= MX.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+#include <mpi.h>
+
+/* Problem Constants */
+
+#define XMAX  RCONST(2.0)   /* domain boundary            */
+#define MX    20            /* mesh dimension             */
+#define NEQ   MX            /* number of equations        */
+#define ATOL  RCONST(1.e-5) /* scalar absolute tolerance  */
+#define T0    RCONST(0.0)   /* initial time               */
+#define TOUT  RCONST(2.5)   /* output time increment      */
+
+/* Adjoint Problem Constants */
+
+#define NP    2            /* number of parameters       */
+#define STEPS 200          /* steps between check points */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[2];            /* model parameters                         */
+  realtype dx;              /* spatial discretization grid              */
+  realtype hdcoef, hacoef;  /* diffusion and advection coefficients     */
+  long int local_N;
+  long int npes, my_pe;     /* total number of processes and current ID */
+  long int nperpe, nrem;
+  MPI_Comm comm;            /* MPI communicator                         */
+  realtype *z1, *z2;        /* work space                               */
+} *UserData;
+
+/* Prototypes of user-supplied funcitons */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+static int fB(realtype t, N_Vector u, 
+              N_Vector uB, N_Vector uBdot, void *user_dataB);
+
+/* Prototypes of private functions */
+
+static void SetIC(N_Vector u, realtype dx, long int my_length, long int my_base);
+static void SetICback(N_Vector uB, long int my_base);
+static realtype Xintgr(realtype *z, long int l, realtype dx);
+static realtype Compute_g(N_Vector u, UserData data);
+static void PrintOutput(realtype g_val, N_Vector uB, UserData data);
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+
+  void *cvode_mem;
+  
+  N_Vector u;
+  realtype reltol, abstol;
+
+  int indexB;
+  N_Vector uB;
+
+  realtype dx, t, g_val;
+  int flag, my_pe, nprocs, npes, ncheck;
+  long int local_N=0, nperpe, nrem, my_base=-1;
+
+  MPI_Comm comm;
+
+  data = NULL;
+  cvode_mem = NULL;
+  u = uB = NULL;
+
+  /*------------------------------------------------------
+    Initialize MPI and get total number of pe's, and my_pe
+    ------------------------------------------------------*/
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &nprocs);
+  MPI_Comm_rank(comm, &my_pe);
+
+  npes = nprocs - 1; /* pe's dedicated to PDE integration */
+
+  if ( npes <= 0 ) {
+    if (my_pe == npes)
+      fprintf(stderr, "\nMPI_ERROR(%d): number of processes must be >= 2\n\n",
+	      my_pe);
+    MPI_Finalize();
+    return(1);
+  }
+
+  /*-----------------------
+    Set local vector length
+    -----------------------*/
+  nperpe = NEQ/npes;
+  nrem = NEQ - npes*nperpe;
+  if (my_pe < npes) {
+
+    /* PDE vars. distributed to this proccess */
+    local_N = (my_pe < nrem) ? nperpe+1 : nperpe;
+    my_base = (my_pe < nrem) ? my_pe*local_N : my_pe*nperpe + nrem;
+
+  } else {
+
+    /* Make last process inactive for forward phase */
+    local_N = 0;
+
+  }
+
+  /*-------------------------------------
+    Allocate and load user data structure
+    -------------------------------------*/
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data , "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  data->p[0] = ONE;
+  data->p[1] = RCONST(0.5);
+  dx = data->dx = XMAX/((realtype)(MX+1));
+  data->hdcoef = data->p[0]/(dx*dx);
+  data->hacoef = data->p[1]/(TWO*dx);
+  data->comm = comm;
+  data->npes = npes;
+  data->my_pe = my_pe;
+  data->nperpe = nperpe;
+  data->nrem = nrem;
+  data->local_N = local_N;
+
+  /*------------------------- 
+    Forward integration phase
+    -------------------------*/
+  
+  /* Set relative and absolute tolerances for forward phase */
+  reltol = ZERO;
+  abstol = ATOL;
+
+  /* Allocate and initialize forward variables */
+  u = N_VNew_Parallel(comm, local_N, NEQ);
+  if (check_flag((void *)u, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  SetIC(u, dx, local_N, my_base);
+
+  /* Allocate CVODES memory for forward integration */
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_FUNCTIONAL);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if (check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if (check_flag(&flag, "CVodeInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Allocate combined forward/backward memory */
+  flag = CVodeAdjInit(cvode_mem, STEPS, CV_HERMITE);
+  if (check_flag(&flag, "CVadjInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Integrate to TOUT and collect check point information */
+  flag = CVodeF(cvode_mem, TOUT, u, &t, CV_NORMAL, &ncheck);
+  if (check_flag(&flag, "CVodeF", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /*---------------------------
+    Compute and value of g(t_f)
+    ---------------------------*/
+  g_val = Compute_g(u, data);
+
+  /*-------------------------- 
+    Backward integration phase
+    --------------------------*/
+
+  if (my_pe == npes) {
+
+    /* Activate last process for integration of the quadrature equations */
+    local_N = NP;
+
+  } else {
+
+    /* Allocate work space */
+    data->z1 = (realtype *)malloc(local_N*sizeof(realtype));
+    if (check_flag((void *)data->z1, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+    data->z2 = (realtype *)malloc(local_N*sizeof(realtype));
+    if (check_flag((void *)data->z2, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+
+  }
+
+  /* Allocate and initialize backward variables */
+  uB = N_VNew_Parallel(comm, local_N, NEQ+NP);
+  if (check_flag((void *)uB, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  SetICback(uB, my_base);
+
+  /* Allocate CVODES memory for the backward integration */
+  flag = CVodeCreateB(cvode_mem, CV_ADAMS, CV_FUNCTIONAL, &indexB);
+  if (check_flag(&flag, "CVodeCreateB", 1, my_pe)) MPI_Abort(comm, 1);
+  flag = CVodeSetUserDataB(cvode_mem, indexB, data);
+  if (check_flag(&flag, "CVodeSetUserDataB", 1, my_pe)) MPI_Abort(comm, 1);
+  flag = CVodeInitB(cvode_mem, indexB, fB, TOUT, uB);
+  if (check_flag(&flag, "CVodeInitB", 1, my_pe)) MPI_Abort(comm, 1);
+  flag = CVodeSStolerancesB(cvode_mem, indexB, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerancesB", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Integrate to T0 */
+  flag = CVodeB(cvode_mem, T0, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeGetB(cvode_mem, indexB, &t, uB);
+  if (check_flag(&flag, "CVodeGetB", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Print results (adjoint states and quadrature variables) */
+  PrintOutput(g_val, uB, data);
+
+
+  /* Free memory */
+  N_VDestroy_Parallel(u);
+  N_VDestroy_Parallel(uB);
+  CVodeFree(&cvode_mem);  
+
+  if (my_pe != npes) {
+    free(data->z1);
+    free(data->z2);
+  }
+  free(data);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,u) for forward phase. 
+ */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype uLeft, uRight, ui, ult, urt;
+  realtype hordc, horac, hdiff, hadv;
+  realtype *udata, *dudata;
+  long int i, my_length;
+  int npes, my_pe, my_pe_m1, my_pe_p1, last_pe, my_last;
+  UserData data;
+  MPI_Status status;
+  MPI_Comm comm;
+
+  /* Extract MPI info. from data */
+  data = (UserData) user_data;
+  comm = data->comm;
+  npes = data->npes;
+  my_pe = data->my_pe;
+  
+  /* If this process is inactive, return now */
+  if (my_pe == npes) return(0);
+
+  /* Extract problem constants from data */
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+
+  /* Find related processes */
+  my_pe_m1 = my_pe - 1;
+  my_pe_p1 = my_pe + 1;
+  last_pe = npes - 1;
+
+  /* Obtain local arrays */
+  udata = N_VGetArrayPointer_Parallel(u);
+  dudata = N_VGetArrayPointer_Parallel(udot);
+  my_length = N_VGetLocalLength_Parallel(u);
+  my_last = my_length - 1;
+
+  /* Pass needed data to processes before and after current process. */
+   if (my_pe != 0)
+     MPI_Send(&udata[0], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm);
+   if (my_pe != last_pe)
+     MPI_Send(&udata[my_length-1], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm);   
+
+  /* Receive needed data from processes before and after current process. */
+   if (my_pe != 0)
+     MPI_Recv(&uLeft, 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm, &status);
+   else uLeft = ZERO;
+   if (my_pe != last_pe)
+     MPI_Recv(&uRight, 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm,
+              &status);   
+   else uRight = ZERO;
+
+  /* Loop over all grid points in current process. */
+  for (i=0; i<my_length; i++) {
+
+    /* Extract u at x_i and two neighboring points */
+    ui = udata[i];
+    ult = (i==0) ? uLeft: udata[i-1];
+    urt = (i==my_length-1) ? uRight : udata[i+1];
+
+    /* Set diffusion and advection terms and load into udot */
+    hdiff = hordc*(ult - TWO*ui + urt);
+    hadv = horac*(urt - ult);
+    dudata[i] = hdiff + hadv;
+  }
+
+  return(0);
+}
+
+/*
+ * fB routine. Compute right hand side of backward problem 
+ */
+
+static int fB(realtype t, N_Vector u, 
+              N_Vector uB, N_Vector uBdot, void *user_dataB)
+{
+  realtype *uBdata, *duBdata, *udata;
+  realtype uBLeft, uBRight, uBi, uBlt, uBrt;
+  realtype uLeft, uRight, ui, ult, urt;
+  realtype dx, hordc, horac, hdiff, hadv;
+  realtype *z1, *z2, intgr1, intgr2;
+  long int i, my_length;
+  int npes, my_pe, my_pe_m1, my_pe_p1, last_pe, my_last;
+  UserData data;
+  realtype data_in[2], data_out[2];
+  MPI_Status status;
+  MPI_Comm comm;
+
+  /* Extract MPI info. from data */
+  data = (UserData) user_dataB;
+  comm = data->comm;
+  npes = data->npes;
+  my_pe = data->my_pe;
+
+  if (my_pe == npes) { /* This process performs the quadratures */
+
+    /* Obtain local arrays */
+    duBdata = N_VGetArrayPointer_Parallel(uBdot);
+    my_length = N_VGetLocalLength_Parallel(uB);
+
+    /* Loop over all other processes and load right hand side of quadrature eqs. */
+    duBdata[0] = ZERO;
+    duBdata[1] = ZERO;
+    for (i=0; i<npes; i++) {
+      MPI_Recv(&intgr1, 1, PVEC_REAL_MPI_TYPE, i, 0, comm, &status); 
+      duBdata[0] += intgr1;
+      MPI_Recv(&intgr2, 1, PVEC_REAL_MPI_TYPE, i, 0, comm, &status); 
+      duBdata[1] += intgr2;
+    }
+
+  } else { /* This process integrates part of the PDE */
+
+    /* Extract problem constants and work arrays from data */
+    dx    = data->dx;
+    hordc = data->hdcoef;
+    horac = data->hacoef;
+    z1    = data->z1;
+    z2    = data->z2;
+
+    /* Obtain local arrays */
+    uBdata = N_VGetArrayPointer_Parallel(uB);
+    duBdata = N_VGetArrayPointer_Parallel(uBdot);
+    udata = N_VGetArrayPointer_Parallel(u);
+    my_length = N_VGetLocalLength_Parallel(uB);
+
+    /* Compute related parameters. */
+    my_pe_m1 = my_pe - 1;
+    my_pe_p1 = my_pe + 1;
+    last_pe  = npes - 1;
+    my_last  = my_length - 1;
+
+    /* Pass needed data to processes before and after current process. */
+    if (my_pe != 0) {
+      data_out[0] = udata[0];
+      data_out[1] = uBdata[0];
+    
+      MPI_Send(data_out, 2, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm);
+    }
+    if (my_pe != last_pe) {
+      data_out[0] = udata[my_length-1];
+      data_out[1] = uBdata[my_length-1];
+
+      MPI_Send(data_out, 2, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm);
+    }
+    
+    /* Receive needed data from processes before and after current process. */
+    if (my_pe != 0) {
+      MPI_Recv(data_in, 2, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm, &status);
+      
+      uLeft = data_in[0];
+      uBLeft = data_in[1];
+    } else {
+      uLeft = ZERO;
+      uBLeft = ZERO;
+    }
+    if (my_pe != last_pe) {
+      MPI_Recv(data_in, 2, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm, &status);
+
+      uRight = data_in[0];
+      uBRight = data_in[1];
+    } else {
+      uRight = ZERO;
+      uBRight = ZERO;
+    }
+
+    /* Loop over all grid points in current process. */
+    for (i=0; i<my_length; i++) {
+      
+      /* Extract uB at x_i and two neighboring points */
+      uBi = uBdata[i];
+      uBlt = (i==0) ? uBLeft: uBdata[i-1];
+      uBrt = (i==my_length-1) ? uBRight : uBdata[i+1];
+      
+      /* Set diffusion and advection terms and load into udot */
+      hdiff = hordc*(uBlt - TWO*uBi + uBrt);
+      hadv = horac*(uBrt - uBlt);
+      duBdata[i] = - hdiff + hadv;
+
+      /* Extract u at x_i and two neighboring points */
+      ui = udata[i];
+      ult = (i==0) ? uLeft: udata[i-1];
+      urt = (i==my_length-1) ? uRight : udata[i+1];
+
+      /* Load integrands of the two space integrals */
+      z1[i] = uBdata[i]*(ult - TWO*ui + urt)/(dx*dx);
+      z2[i] = uBdata[i]*(urt - ult)/(TWO*dx);
+    }
+
+    /* Compute local integrals */
+    intgr1 = Xintgr(z1, my_length, dx);
+    intgr2 = Xintgr(z2, my_length, dx);
+
+    /* Send local integrals to 'quadrature' process */
+    MPI_Send(&intgr1, 1, PVEC_REAL_MPI_TYPE, npes, 0, comm);
+    MPI_Send(&intgr2, 1, PVEC_REAL_MPI_TYPE, npes, 0, comm);
+
+  }
+
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Set initial conditions in u vector 
+ */
+
+static void SetIC(N_Vector u, realtype dx, long int my_length, long int my_base)
+{
+  int i;
+  long int iglobal;
+  realtype x;
+  realtype *udata;
+
+  /* Set pointer to data array and get local length of u */
+  udata = N_VGetArrayPointer_Parallel(u);
+  my_length = N_VGetLocalLength_Parallel(u);
+
+  /* Load initial profile into u vector */
+  for (i=1; i<=my_length; i++) {
+    iglobal = my_base + i;
+    x = iglobal*dx;
+    udata[i-1] = x*(XMAX - x)*SUNRexp(TWO*x);
+  }  
+}
+
+/* 
+ * Set final conditions in uB vector 
+ */
+
+static void SetICback(N_Vector uB, long int my_base)
+{
+  int i;
+  realtype *uBdata;
+  long int my_length;
+
+  /* Set pointer to data array and get local length of uB */
+  uBdata = N_VGetArrayPointer_Parallel(uB);
+  my_length = N_VGetLocalLength_Parallel(uB);
+
+  /* Set adjoint states to 1.0 and quadrature variables to 0.0 */
+  if (my_base == -1) for (i=0; i<my_length; i++) uBdata[i] = ZERO;
+  else               for (i=0; i<my_length; i++) uBdata[i] = ONE;
+}
+
+/*
+ * Compute local value of the space integral int_x z(x) dx 
+ */
+
+static realtype Xintgr(realtype *z, long int l, realtype dx)
+{
+  realtype my_intgr;
+  long int i;
+
+  my_intgr = RCONST(0.5)*(z[0] + z[l-1]);
+  for (i = 1; i < l-1; i++)
+    my_intgr += z[i]; 
+  my_intgr *= dx;
+
+  return(my_intgr);
+}
+
+/*
+ * Compute value of g(u) 
+ */
+
+static realtype Compute_g(N_Vector u, UserData data)
+{
+  realtype intgr, my_intgr, dx, *udata;
+  long int my_length;
+  int npes, my_pe, i;
+  MPI_Status status;
+  MPI_Comm comm;
+
+  /* Extract MPI info. from data */
+  comm = data->comm;
+  npes = data->npes;
+  my_pe = data->my_pe;
+
+  dx = data->dx;
+
+  if (my_pe == npes) {  /* Loop over all other processes and sum */
+    intgr = ZERO;
+    for (i=0; i<npes; i++) {
+      MPI_Recv(&my_intgr, 1, PVEC_REAL_MPI_TYPE, i, 0, comm, &status); 
+      intgr += my_intgr;
+    }
+    return(intgr);
+  } else {              /* Compute local portion of the integral */
+    udata = N_VGetArrayPointer_Parallel(u);
+    my_length = N_VGetLocalLength_Parallel(u);
+    my_intgr = Xintgr(udata, my_length, dx);
+    MPI_Send(&my_intgr, 1, PVEC_REAL_MPI_TYPE, npes, 0, comm);
+    return(my_intgr);
+  }
+}
+
+/* 
+ * Print output after backward integration
+ */
+
+static void PrintOutput(realtype g_val, N_Vector uB, UserData data)
+{
+  MPI_Comm comm;
+  MPI_Status status;
+  int npes, my_pe;
+  long int i, Ni, indx, local_N, nperpe, nrem;
+  realtype *uBdata;
+  realtype *mu;
+
+  comm = data->comm;
+  npes = data->npes;
+  my_pe = data->my_pe;
+  local_N = data->local_N;
+  nperpe = data->nperpe;
+  nrem = data->nrem;
+
+  uBdata = N_VGetArrayPointer_Parallel(uB);
+
+  if (my_pe == npes) {
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("\ng(tf) = %8Le\n\n", g_val);
+    printf("dgdp(tf)\n  [ 1]: %8Le\n  [ 2]: %8Le\n\n", -uBdata[0], -uBdata[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("\ng(tf) = %8e\n\n", g_val);
+    printf("dgdp(tf)\n  [ 1]: %8e\n  [ 2]: %8e\n\n", -uBdata[0], -uBdata[1]);
+#else
+    printf("\ng(tf) = %8e\n\n", g_val);
+    printf("dgdp(tf)\n  [ 1]: %8e\n  [ 2]: %8e\n\n", -uBdata[0], -uBdata[1]);
+#endif
+
+    mu = (realtype *)malloc(NEQ*sizeof(realtype));
+    if (check_flag((void *)mu, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+
+    indx = 0;
+    for ( i = 0; i < npes; i++) {
+      Ni = ( i < nrem ) ? nperpe+1 : nperpe;
+      MPI_Recv(&mu[indx], Ni, PVEC_REAL_MPI_TYPE, i, 0, comm, &status);
+      indx += Ni;
+    }
+
+    printf("mu(t0)\n");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    for (i=0; i<NEQ; i++)
+      printf("  [%2ld]: %8Le\n", i+1, mu[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    for (i=0; i<NEQ; i++)
+      printf("  [%2ld]: %8e\n", i+1, mu[i]);
+#else
+    for (i=0; i<NEQ; i++)
+      printf("  [%2ld]: %8e\n", i+1, mu[i]);
+#endif
+
+    free(mu);
+
+  } else {
+
+    MPI_Send(uBdata, local_N, PVEC_REAL_MPI_TYPE, npes, 0, comm);
+
+  }
+
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+	      id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/parallel/cvsAdvDiff_ASAp_non_p.out b/examples/cvodes/parallel/cvsAdvDiff_ASAp_non_p.out
new file mode 100644
index 0000000..63bdf03
--- /dev/null
+++ b/examples/cvodes/parallel/cvsAdvDiff_ASAp_non_p.out
@@ -0,0 +1,27 @@
+g(tf) = 2.446335e-02
+ 
+dgdp(tf)
+  [ 1]: -1.502544e-01
+  [ 2]: -1.098456e-02
+ 
+mu(t0)
+  [ 1]: 2.775571e-04
+  [ 2]: 5.625276e-04
+  [ 3]: 8.474242e-04
+  [ 4]: 1.127515e-03
+  [ 5]: 1.393257e-03
+  [ 6]: 1.641212e-03
+  [ 7]: 1.860490e-03
+  [ 8]: 2.049401e-03
+  [ 9]: 2.196614e-03
+  [10]: 2.302527e-03
+  [11]: 2.356404e-03
+  [12]: 2.360902e-03
+  [13]: 2.306966e-03
+  [14]: 2.199483e-03
+  [15]: 2.032115e-03
+  [16]: 1.811731e-03
+  [17]: 1.535589e-03
+  [18]: 1.212084e-03
+  [19]: 8.426858e-04
+  [20]: 4.366699e-04
diff --git a/examples/cvodes/parallel/cvsAdvDiff_FSA_non_p.c b/examples/cvodes/parallel/cvsAdvDiff_FSA_non_p.c
new file mode 100644
index 0000000..9026bad
--- /dev/null
+++ b/examples/cvodes/parallel/cvsAdvDiff_FSA_non_p.c
@@ -0,0 +1,612 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4868 $
+ * $Date: 2016-08-19 10:16:31 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, George D. Byrne,
+ *                and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem, with the program for
+ * its solution by CVODES. The problem is the semi-discrete form of
+ * the advection-diffusion equation in 1-D:
+ *   du/dt = q1 * d^2 u / dx^2 + q2 * du/dx
+ * on the interval 0 <= x <= 2, and the time interval 0 <= t <= 5.
+ * Homogeneous Dirichlet boundary conditions are posed, and the
+ * initial condition is:
+ *   u(x,y,t=0) = x(2-x)exp(2x).
+ * The PDE is discretized on a uniform grid of size MX+2 with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX.
+ * This program solves the problem with the option for nonstiff
+ * systems: ADAMS method and functional iteration.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .5, 1.0, ..., 5.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * Optionally, CVODES can compute sensitivities with respect to the
+ * problem parameters q1 and q2.
+ * Any of three sensitivity methods (SIMULTANEOUS, STAGGERED, and
+ * STAGGERED1) can be used and sensitivities may be included in the
+ * error test or not (error control set on FULL or PARTIAL,
+ * respectively).
+ *
+ * Execution:
+ *
+ * Note: This version uses MPI for user routines, and the CVODES
+ *       solver. In what follows, N is the number of processors,
+ *       N = NPEX*NPEY (see constants below) and it is assumed that
+ *       the MPI script mpirun is used to run a parallel
+ *       application.
+ * If no sensitivities are desired:
+ *    % mpirun -np N cvsAdvDiff_FSA_non_p -nosensi
+ * If sensitivities are to be computed:
+ *    % mpirun -np N cvsAdvDiff_FSA_non_p -sensi sensi_meth err_con
+ * where sensi_meth is one of {sim, stg, stg1} and err_con is one of
+ * {t, f}.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include <cvodes/cvodes.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+/* Problem Constants */
+#define XMAX  RCONST(2.0)   /* domain boundary           */
+#define MX    10            /* mesh dimension            */
+#define NEQ   MX            /* number of equations       */
+#define ATOL  RCONST(1.e-5) /* scalar absolute tolerance */
+#define T0    RCONST(0.0)   /* initial time              */
+#define T1    RCONST(0.5)   /* first output time         */
+#define DTOUT RCONST(0.5)   /* output time increment     */
+#define NOUT  10            /* number of output times    */
+
+#define NP    2
+#define NS    2
+
+#define ZERO  RCONST(0.0)
+
+/* Type : UserData 
+   contains problem parameters, grid constants, work array. */
+
+typedef struct {
+  realtype *p;
+  realtype dx;
+  int npes, my_pe;
+  MPI_Comm comm;
+  realtype z[100];
+} *UserData;
+
+
+/* Prototypes of user-supplied functins */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/* Prototypes of private functions */
+
+static void ProcessArgs(int argc, char *argv[], int my_pe,
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con);
+static void WrongArgs(int my_pe, char *name);
+static void SetIC(N_Vector u, realtype dx, long int my_length, long int my_base);
+static void PrintOutput(void *cvode_mem, int my_pe, realtype t, N_Vector u);
+static void PrintOutputS(int my_pe, N_Vector *uS);
+static void PrintFinalStats(void *cvode_mem, booleantype sensi); 
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  realtype dx, reltol, abstol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag, my_pe, npes;
+  long int local_N, nperpe, nrem, my_base;
+
+  realtype *pbar;
+  int is, *plist;
+  N_Vector *uS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  MPI_Comm comm;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+  pbar = NULL;
+  plist = NULL;
+  uS = NULL;
+
+  /* Get processor number, total number of pe's, and my_pe. */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  /* Process arguments */
+  ProcessArgs(argc, argv, my_pe, &sensi, &sensi_meth, &err_con);
+
+  /* Set local vector length. */
+  nperpe = NEQ/npes;
+  nrem = NEQ - npes*nperpe;
+  local_N = (my_pe < nrem) ? nperpe+1 : nperpe;
+  my_base = (my_pe < nrem) ? my_pe*local_N : my_pe*nperpe + nrem;
+
+  /* USER DATA STRUCTURE */
+  data = (UserData) malloc(sizeof *data); /* Allocate data memory */
+  data->p = NULL;
+  if(check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  data->comm = comm;
+  data->npes = npes;
+  data->my_pe = my_pe;
+  data->p = (realtype *) malloc(NP * sizeof(realtype));
+  if(check_flag((void *)data->p, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  dx = data->dx = XMAX/((realtype)(MX+1));
+  data->p[0] = RCONST(1.0);
+  data->p[1] = RCONST(0.5);
+
+  /* INITIAL STATES */
+  u = N_VNew_Parallel(comm, local_N, NEQ);    /* Allocate u vector */
+  if(check_flag((void *)u, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  SetIC(u, dx, local_N, my_base);    /* Initialize u vector */
+
+  /* TOLERANCES */
+  reltol = ZERO;                /* Set the tolerances */
+  abstol = ATOL;
+
+  /* CVODE_CREATE & CVODE_MALLOC */
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1, my_pe)) MPI_Abort(comm, 1);
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if(check_flag(&flag, "CVodeSStolerances", 1, my_pe)) MPI_Abort(comm, 1);
+
+ 
+  if (my_pe == 0) {
+    printf("\n1-D advection-diffusion equation, mesh size =%3d \n", MX);
+    printf("\nNumber of PEs = %3d \n",npes);
+  }
+
+  if(sensi) {
+
+    plist = (int *) malloc(NS * sizeof(int));
+    if(check_flag((void *)plist, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+    for(is=0; is<NS; is++)
+      plist[is] = is; /* sensitivity w.r.t. i-th parameter */
+
+    pbar  = (realtype *) malloc(NS * sizeof(realtype));
+    if(check_flag((void *)pbar, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+    for(is=0; is<NS; is++) pbar[is] = data->p[plist[is]];
+
+    uS = N_VCloneVectorArray_Parallel(NS, u);
+    if(check_flag((void *)uS, "N_VCloneVectorArray_Parallel", 0, my_pe)) 
+      MPI_Abort(comm, 1);
+    for(is=0;is<NS;is++)
+      N_VConst(ZERO,uS[is]);
+
+    flag = CVodeSensInit1(cvode_mem, NS, sensi_meth, NULL, uS);
+    if(check_flag(&flag, "CVodeSensInit1", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVodeSensEEtolerances(cvode_mem);
+    if(check_flag(&flag, "CVodeSensEEtolerances", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVodeSetSensErrCon(cvode_mem, err_con);
+    if(check_flag(&flag, "CVodeSetSensErrCon", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVodeSetSensDQMethod(cvode_mem, CV_CENTERED, ZERO);
+    if(check_flag(&flag, "CVodeSetSensDQMethod", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVodeSetSensParams(cvode_mem, data->p, pbar, plist);
+    if(check_flag(&flag, "CVodeSetSensParams", 1, my_pe)) MPI_Abort(comm, 1);
+
+    if(my_pe == 0) {
+      printf("Sensitivity: YES ");
+      if(sensi_meth == CV_SIMULTANEOUS)   
+        printf("( SIMULTANEOUS +");
+      else 
+        if(sensi_meth == CV_STAGGERED) printf("( STAGGERED +");
+        else                           printf("( STAGGERED1 +");   
+      if(err_con) printf(" FULL ERROR CONTROL )");
+      else        printf(" PARTIAL ERROR CONTROL )");
+    }
+
+  } else {
+
+    if(my_pe == 0) printf("Sensitivity: NO ");
+
+  }
+
+  /* In loop over output points, call CVode, print results, test for error */
+
+  if(my_pe == 0) {
+    printf("\n\n");
+    printf("============================================================\n");
+    printf("     T     Q       H      NST                    Max norm   \n");
+    printf("============================================================\n");
+  }
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1, my_pe)) break;
+    PrintOutput(cvode_mem, my_pe, t, u);
+    if (sensi) {
+      flag = CVodeGetSens(cvode_mem, &t, uS);
+      if(check_flag(&flag, "CVodeGetSens", 1, my_pe)) break;
+      PrintOutputS(my_pe, uS);
+    }
+    if (my_pe == 0)
+      printf("------------------------------------------------------------\n");
+
+  }
+
+  /* Print final statistics */
+  if (my_pe == 0) 
+    PrintFinalStats(cvode_mem, sensi);
+
+  /* Free memory */
+  N_VDestroy(u);                   /* Free the u vector              */
+  if (sensi) 
+    N_VDestroyVectorArray(uS, NS); /* Free the uS vectors            */
+  free(data->p);                   /* Free the p vector              */
+  free(data);                      /* Free block of UserData         */
+  CVodeFree(&cvode_mem);           /* Free the CVODES problem memory */
+  free(pbar);
+  if(sensi) free(plist);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,u). 
+ */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype ui, ult, urt, hordc, horac, hdiff, hadv;
+  realtype *udata, *dudata, *z;
+  realtype dx;
+  int i;
+  int npes, my_pe, my_length, my_pe_m1, my_pe_p1, last_pe, my_last;
+  UserData data;
+  MPI_Status status;
+  MPI_Comm comm;
+
+  udata = N_VGetArrayPointer_Parallel(u);
+  dudata = N_VGetArrayPointer_Parallel(udot);
+
+  /* Extract needed problem constants from data */
+  data  = (UserData) user_data;
+  dx    = data->dx; 
+  hordc = data->p[0]/(dx*dx);
+  horac = data->p[1]/(RCONST(2.0)*dx);
+
+  /* Extract parameters for parallel computation. */
+  comm = data->comm;
+  npes = data->npes;           /* Number of processes. */ 
+  my_pe = data->my_pe;         /* Current process number. */
+  my_length = N_VGetLocalLength_Parallel(u); /* Number of local elements of u. */ 
+  z = data->z;
+
+  /* Compute related parameters. */
+  my_pe_m1 = my_pe - 1;
+  my_pe_p1 = my_pe + 1;
+  last_pe = npes - 1;
+  my_last = my_length - 1;
+
+  /* Store local segment of u in the working array z. */
+   for (i = 1; i <= my_length; i++)
+     z[i] = udata[i - 1];
+
+  /* Pass needed data to processes before and after current process. */
+   if (my_pe != 0)
+     MPI_Send(&z[1], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm);
+   if (my_pe != last_pe)
+     MPI_Send(&z[my_length], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm);   
+
+  /* Receive needed data from processes before and after current process. */
+   if (my_pe != 0)
+     MPI_Recv(&z[0], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm, &status);
+   else z[0] = ZERO;
+   if (my_pe != last_pe)
+     MPI_Recv(&z[my_length+1], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm,
+              &status);   
+   else z[my_length + 1] = ZERO;
+
+  /* Loop over all grid points in current process. */
+  for (i=1; i<=my_length; i++) {
+
+    /* Extract u at x_i and two neighboring points */
+    ui = z[i];
+    ult = z[i-1];
+    urt = z[i+1];
+
+    /* Set diffusion and advection terms and load into udot */
+    hdiff = hordc*(ult - RCONST(2.0)*ui + urt);
+    hadv = horac*(urt - ult);
+    dudata[i-1] = hdiff + hadv;
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Process and verify arguments to cvsfwdnonx_p.
+ */
+
+static void ProcessArgs(int argc, char *argv[], int my_pe,
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(my_pe, argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(my_pe, argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(my_pe, argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = CV_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = CV_STAGGERED;
+    else if (strcmp(argv[2],"stg1") == 0)
+      *sensi_meth = CV_STAGGERED1;
+    else 
+      WrongArgs(my_pe, argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(my_pe, argv[0]);
+  }
+
+}
+
+static void WrongArgs(int my_pe, char *name)
+{
+  if (my_pe == 0) {
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim, stg, or stg1\n");
+    printf("         err_con    = t or f\n");
+  }  
+  MPI_Finalize();
+  exit(0);
+}
+
+/*
+ * Set initial conditions in u vector 
+ */
+
+static void SetIC(N_Vector u, realtype dx, long int my_length, 
+                  long int my_base)
+{
+  int i;
+  long int iglobal;
+  realtype x;
+  realtype *udata;
+
+  /* Set pointer to data array and get local length of u. */
+  udata = N_VGetArrayPointer_Parallel(u);
+  my_length = N_VGetLocalLength_Parallel(u);
+
+  /* Load initial profile into u vector */
+  for (i=1; i<=my_length; i++) {
+    iglobal = my_base + i;
+    x = iglobal*dx;
+    udata[i-1] = x*(XMAX - x)*SUNRexp(2.0*x);
+  }  
+}
+
+/*
+ * Print current t, step count, order, stepsize, and max norm of solution  
+ */
+
+static void PrintOutput(void *cvode_mem, int my_pe, realtype t, N_Vector u)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, umax;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, my_pe);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1, my_pe);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1, my_pe);
+
+  umax = N_VMaxNorm(u);
+
+  if (my_pe == 0) {
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%8.3Le %2d  %8.3Le %5ld\n", t,qu,hu,nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%8.3e %2d  %8.3e %5ld\n", t,qu,hu,nst);
+#else
+    printf("%8.3e %2d  %8.3e %5ld\n", t,qu,hu,nst);
+#endif
+
+    printf("                                Solution       ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%12.4Le \n", umax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%12.4e \n", umax);
+#else
+    printf("%12.4e \n", umax);
+#endif
+
+  }  
+
+}
+
+/*
+ * Print max norm of sensitivities 
+ */
+
+static void PrintOutputS(int my_pe, N_Vector *uS)
+{
+  realtype smax;
+
+  smax = N_VMaxNorm(uS[0]);
+  if (my_pe == 0) {
+    printf("                                Sensitivity 1  ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%12.4Le \n", smax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%12.4e \n", smax);
+#else
+    printf("%12.4e \n", smax);
+#endif
+  }
+
+  smax = N_VMaxNorm(uS[1]);
+  if (my_pe == 0) {
+    printf("                                Sensitivity 2  ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%12.4Le \n", smax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%12.4e \n", smax);
+#else
+    printf("%12.4e \n", smax);
+#endif
+  }
+
+}
+
+/*
+ * Print some final statistics located in the iopt array 
+ */
+
+static void PrintFinalStats(void *cvode_mem, booleantype sensi) 
+{
+  long int nst;
+  long int nfe, nsetups, nni, ncfn, netf;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, 0);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1, 0);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1, 0);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1, 0);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1, 0);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1, 0);
+
+  if (sensi) {
+    flag = CVodeGetSensNumRhsEvals(cvode_mem, &nfSe);
+    check_flag(&flag, "CVodeGetSensNumRhsEvals", 1, 0);
+    flag = CVodeGetNumRhsEvalsSens(cvode_mem, &nfeS);
+    check_flag(&flag, "CVodeGetNumRhsEvalsSens", 1, 0);
+    flag = CVodeGetSensNumLinSolvSetups(cvode_mem, &nsetupsS);
+    check_flag(&flag, "CVodeGetSensNumLinSolvSetups", 1, 0);
+    flag = CVodeGetSensNumErrTestFails(cvode_mem, &netfS);
+    check_flag(&flag, "CVodeGetSensNumErrTestFails", 1, 0);
+    flag = CVodeGetSensNumNonlinSolvIters(cvode_mem, &nniS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvIters", 1, 0);
+    flag = CVodeGetSensNumNonlinSolvConvFails(cvode_mem, &ncfnS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvConvFails", 1, 0);
+  }
+
+  printf("\nFinal Statistics\n\n");
+  printf("nst     = %5ld\n\n", nst);
+  printf("nfe     = %5ld\n",   nfe);
+  printf("netf    = %5ld    nsetups  = %5ld\n", netf, nsetups);
+  printf("nni     = %5ld    ncfn     = %5ld\n", nni, ncfn);
+
+  if(sensi) {
+    printf("\n");
+    printf("nfSe    = %5ld    nfeS     = %5ld\n", nfSe, nfeS);
+    printf("netfs   = %5ld    nsetupsS = %5ld\n", netfS, nsetupsS);
+    printf("nniS    = %5ld    ncfnS    = %5ld\n", nniS, ncfnS);
+  }
+
+}
+
+/* 
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+	      id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/parallel/cvsAdvDiff_FSA_non_p.out b/examples/cvodes/parallel/cvsAdvDiff_FSA_non_p.out
new file mode 100644
index 0000000..38f7830
--- /dev/null
+++ b/examples/cvodes/parallel/cvsAdvDiff_FSA_non_p.out
@@ -0,0 +1,71 @@
+
+1-D advection-diffusion equation, mesh size = 10 
+
+Number of PEs =   4 
+Sensitivity: YES ( SIMULTANEOUS + FULL ERROR CONTROL )
+
+============================================================
+     T     Q       H      NST                    Max norm   
+============================================================
+5.000e-01  4  7.656e-03   115
+                                Solution         3.0529e+00 
+                                Sensitivity 1    3.8668e+00 
+                                Sensitivity 2    6.2020e-01 
+------------------------------------------------------------
+1.000e+00  4  9.504e-03   182
+                                Solution         8.7533e-01 
+                                Sensitivity 1    2.1743e+00 
+                                Sensitivity 2    1.8909e-01 
+------------------------------------------------------------
+1.500e+00  3  4.221e-03   290
+                                Solution         2.4949e-01 
+                                Sensitivity 1    9.1826e-01 
+                                Sensitivity 2    7.3922e-02 
+------------------------------------------------------------
+2.000e+00  2  8.301e-03   375
+                                Solution         7.1098e-02 
+                                Sensitivity 1    3.4667e-01 
+                                Sensitivity 2    2.8228e-02 
+------------------------------------------------------------
+2.500e+00  2  5.100e-03   450
+                                Solution         2.0260e-02 
+                                Sensitivity 1    1.2301e-01 
+                                Sensitivity 2    1.0085e-02 
+------------------------------------------------------------
+3.000e+00  2  7.134e-03   514
+                                Solution         5.7728e-03 
+                                Sensitivity 1    4.1956e-02 
+                                Sensitivity 2    3.4555e-03 
+------------------------------------------------------------
+3.500e+00  2  1.657e-02   586
+                                Solution         1.6450e-03 
+                                Sensitivity 1    1.3921e-02 
+                                Sensitivity 2    1.1669e-03 
+------------------------------------------------------------
+4.000e+00  2  1.959e-02   656
+                                Solution         4.6877e-04 
+                                Sensitivity 1    4.5290e-03 
+                                Sensitivity 2    3.8631e-04 
+------------------------------------------------------------
+4.500e+00  1  5.326e-03   732
+                                Solution         1.3417e-04 
+                                Sensitivity 1    1.4551e-03 
+                                Sensitivity 2    1.2585e-04 
+------------------------------------------------------------
+5.000e+00  2  9.973e-03   814
+                                Solution         3.8672e-05 
+                                Sensitivity 1    4.6549e-04 
+                                Sensitivity 2    4.0632e-05 
+------------------------------------------------------------
+
+Final Statistics
+
+nst     =   814
+
+nfe     =  1462
+netf    =     2    nsetups  =     0
+nni     =  1458    ncfn     =   134
+
+nfSe    =  2924    nfeS     =  5848
+netfs   =     0    nsetupsS =     0
+nniS    =     0    ncfnS    =     0
diff --git a/examples/cvodes/parallel/cvsAdvDiff_non_p.c b/examples/cvodes/parallel/cvsAdvDiff_non_p.c
new file mode 100644
index 0000000..6ae6042
--- /dev/null
+++ b/examples/cvodes/parallel/cvsAdvDiff_non_p.c
@@ -0,0 +1,362 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4868 $
+ * $Date: 2016-08-19 10:16:31 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, George Byrne,
+ *                and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem, with the program for
+ * its solution by CVODES. The problem is the semi-discrete
+ * form of the advection-diffusion equation in 1-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx
+ * on the interval 0 <= x <= 2, and the time interval 0 <= t <= 5.
+ * Homogeneous Dirichlet boundary conditions are posed, and the
+ * initial condition is the following:
+ *   u(x,t=0) = x(2-x)exp(2x) .
+ * The PDE is discretized on a uniform grid of size MX+2 with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX.
+ * This program solves the problem with the option for nonstiff
+ * systems: ADAMS method and functional iteration.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .5, 1.0, ..., 5.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * This version uses MPI for user routines.
+ * Execute with Number of Processors = N,  with 1 <= N <= MX.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>            /* prototypes for CVODE fcts. */
+#include <nvector/nvector_parallel.h> /* definition of N_Vector and macros */
+#include <sundials/sundials_types.h>  /* definition of realtype */
+#include <sundials/sundials_math.h>   /* definition of EXP */
+
+#include <mpi.h>                      /* MPI constants and types */
+
+/* Problem Constants */
+
+#define ZERO  RCONST(0.0)
+
+#define XMAX  RCONST(2.0)    /* domain boundary           */
+#define MX    10             /* mesh dimension            */
+#define NEQ   MX             /* number of equations       */
+#define ATOL  RCONST(1.0e-5) /* scalar absolute tolerance */
+#define T0    ZERO           /* initial time              */
+#define T1    RCONST(0.5)    /* first output time         */
+#define DTOUT RCONST(0.5)    /* output time increment     */
+#define NOUT  10             /* number of output times    */
+
+/* Type : UserData 
+   contains grid constants, parallel machine parameters, work array. */
+
+typedef struct {
+  realtype dx, hdcoef, hacoef;
+  int npes, my_pe;
+  MPI_Comm comm;
+  realtype z[100];
+} *UserData;
+
+/* Private Helper Functions */
+
+static void SetIC(N_Vector u, realtype dx, long int my_length,
+                  long int my_base);
+
+static void PrintIntro(int npes);
+
+static void PrintData(realtype t, realtype umax, long int nst);
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/***************************** Main Program ******************************/
+
+int main(int argc, char *argv[])
+{
+  realtype dx, reltol, abstol, t, tout, umax;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag, my_pe, npes;
+  long int local_N, nperpe, nrem, my_base, nst;
+
+  MPI_Comm comm;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Get processor number, total number of pe's, and my_pe. */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  /* Set local vector length. */
+  nperpe = NEQ/npes;
+  nrem = NEQ - npes*nperpe;
+  local_N = (my_pe < nrem) ? nperpe+1 : nperpe;
+  my_base = (my_pe < nrem) ? my_pe*local_N : my_pe*nperpe + nrem;
+
+  data = (UserData) malloc(sizeof *data);  /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+
+  data->comm = comm;
+  data->npes = npes;
+  data->my_pe = my_pe;
+
+  u = N_VNew_Parallel(comm, local_N, NEQ);  /* Allocate u vector */
+  if(check_flag((void *)u, "N_VNew", 0, my_pe)) MPI_Abort(comm, 1);
+
+  reltol = ZERO;  /* Set the tolerances */
+  abstol = ATOL;
+
+  dx = data->dx = XMAX/((realtype)(MX+1));  /* Set grid coefficients in data */
+  data->hdcoef = RCONST(1.0)/(dx*dx);
+  data->hacoef = RCONST(0.5)/(RCONST(2.0)*dx);
+
+  SetIC(u, dx, local_N, my_base);  /* Initialize u vector */
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Adams-Moulton LMM and the use of a functional iteration */
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1, my_pe)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1, my_pe)) return(1);
+
+  if (my_pe == 0) PrintIntro(npes);
+
+  umax = N_VMaxNorm(u);
+
+  if (my_pe == 0) {
+    t = T0;
+    PrintData(t, umax, 0);
+  }
+
+  /* In loop over output points, call CVode, print results, test for error */
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1, my_pe)) break;
+    umax = N_VMaxNorm(u);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1, my_pe);
+    if (my_pe == 0) PrintData(t, umax, nst);
+  }
+
+  if (my_pe == 0) 
+    PrintFinalStats(cvode_mem);  /* Print some final statistics */
+
+  N_VDestroy_Parallel(u);        /* Free the u vector */
+  CVodeFree(&cvode_mem);         /* Free the integrator memory */
+  free(data);                    /* Free user data */
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/************************ Private Helper Functions ***********************/
+
+/* Set initial conditions in u vector */
+
+static void SetIC(N_Vector u, realtype dx, long int my_length,
+                  long int my_base)
+{
+  int i;
+  long int iglobal;
+  realtype x;
+  realtype *udata;
+
+  /* Set pointer to data array and get local length of u. */
+  udata = N_VGetArrayPointer_Parallel(u);
+  my_length = N_VGetLocalLength_Parallel(u);
+
+  /* Load initial profile into u vector */
+  for (i=1; i<=my_length; i++) {
+    iglobal = my_base + i;
+    x = iglobal*dx;
+    udata[i-1] = x*(XMAX - x)*SUNRexp(RCONST(2.0)*x);
+  }  
+}
+
+/* Print problem introduction */
+
+static void PrintIntro(int npes)
+{
+  printf("\n 1-D advection-diffusion equation, mesh size =%3d \n", MX);
+  printf("\n Number of PEs = %3d \n\n", npes);
+
+  return;
+}
+
+/* Print data */
+
+static void PrintData(realtype t, realtype umax, long int nst)
+{
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %4.2Lf  max.norm(u) =%14.6Le  nst =%4ld \n", t, umax, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %4.2f  max.norm(u) =%14.6e  nst =%4ld \n", t, umax, nst);
+#else
+  printf("At t = %4.2f  max.norm(u) =%14.6e  nst =%4ld \n", t, umax, nst);
+#endif
+
+  return;
+}
+
+/* Print some final statistics located in the iopt array */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nni, ncfn, netf;
+  int flag;
+  
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, 0);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1, 0);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1, 0);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1, 0);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("nst = %-6ld  nfe  = %-6ld  ", nst, nfe);
+  printf("nni = %-6ld  ncfn = %-6ld  netf = %ld\n \n", nni, ncfn, netf);
+}
+
+/***************** Function Called by the Solver ***********************/
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype ui, ult, urt, hordc, horac, hdiff, hadv;
+  realtype *udata, *dudata, *z;
+  int i;
+  int npes, my_pe, my_length, my_pe_m1, my_pe_p1, last_pe, my_last;
+  UserData data;
+  MPI_Status status;
+  MPI_Comm comm;
+
+  udata = N_VGetArrayPointer_Parallel(u);
+  dudata = N_VGetArrayPointer_Parallel(udot);
+
+  /* Extract needed problem constants from data */
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+
+  /* Extract parameters for parallel computation. */
+  comm = data->comm;
+  npes = data->npes;           /* Number of processes. */ 
+  my_pe = data->my_pe;         /* Current process number. */
+  my_length = N_VGetLocalLength_Parallel(u); /* Number of local elements of u. */ 
+  z = data->z;
+
+  /* Compute related parameters. */
+  my_pe_m1 = my_pe - 1;
+  my_pe_p1 = my_pe + 1;
+  last_pe = npes - 1;
+  my_last = my_length - 1;
+
+  /* Store local segment of u in the working array z. */
+   for (i = 1; i <= my_length; i++)
+     z[i] = udata[i - 1];
+
+  /* Pass needed data to processes before and after current process. */
+   if (my_pe != 0)
+     MPI_Send(&z[1], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm);
+   if (my_pe != last_pe)
+     MPI_Send(&z[my_length], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm);   
+
+  /* Receive needed data from processes before and after current process. */
+   if (my_pe != 0)
+     MPI_Recv(&z[0], 1, PVEC_REAL_MPI_TYPE, my_pe_m1, 0, comm, &status);
+   else z[0] = ZERO;
+   if (my_pe != last_pe)
+     MPI_Recv(&z[my_length+1], 1, PVEC_REAL_MPI_TYPE, my_pe_p1, 0, comm,
+              &status);   
+   else z[my_length + 1] = ZERO;
+
+  /* Loop over all grid points in current process. */
+  for (i=1; i<=my_length; i++) {
+
+    /* Extract u at x_i and two neighboring points */
+    ui = z[i];
+    ult = z[i-1];
+    urt = z[i+1];
+
+    /* Set diffusion and advection terms and load into udot */
+    hdiff = hordc*(ult - RCONST(2.0)*ui + urt);
+    hadv = horac*(urt - ult);
+    dudata[i-1] = hdiff + hadv;
+  }
+
+  return(0);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+              id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/parallel/cvsAdvDiff_non_p.out b/examples/cvodes/parallel/cvsAdvDiff_non_p.out
new file mode 100644
index 0000000..be50625
--- /dev/null
+++ b/examples/cvodes/parallel/cvsAdvDiff_non_p.out
@@ -0,0 +1,21 @@
+
+ 1-D advection-diffusion equation, mesh size = 10 
+
+ Number of PEs =   4 
+
+At t = 0.00  max.norm(u) =  1.569909e+01  nst =   0 
+At t = 0.50  max.norm(u) =  3.052881e+00  nst = 113 
+At t = 1.00  max.norm(u) =  8.753188e-01  nst = 191 
+At t = 1.50  max.norm(u) =  2.494926e-01  nst = 265 
+At t = 2.00  max.norm(u) =  7.109707e-02  nst = 339 
+At t = 2.50  max.norm(u) =  2.026223e-02  nst = 418 
+At t = 3.00  max.norm(u) =  5.777332e-03  nst = 486 
+At t = 3.50  max.norm(u) =  1.650483e-03  nst = 563 
+At t = 4.00  max.norm(u) =  4.754357e-04  nst = 646 
+At t = 4.50  max.norm(u) =  1.374222e-04  nst = 715 
+At t = 5.00  max.norm(u) =  3.937469e-05  nst = 795 
+
+Final Statistics: 
+
+nst = 795     nfe  = 1465    nni = 1461    ncfn = 146     netf = 5
+ 
diff --git a/examples/cvodes/parallel/cvsAtmDisp_ASAi_kry_bbd_p.c b/examples/cvodes/parallel/cvsAtmDisp_ASAi_kry_bbd_p.c
new file mode 100644
index 0000000..58cbf00
--- /dev/null
+++ b/examples/cvodes/parallel/cvsAtmDisp_ASAi_kry_bbd_p.c
@@ -0,0 +1,1292 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4809 $
+ * $Date: 2016-07-18 11:16:25 -0700 (Mon, 18 Jul 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Lukas Jager and Radu Serban @ LLNL
+ *                Updated by Daniel R. Reynolds @ SMU
+ * -----------------------------------------------------------------
+ * Parallel Krylov adjoint sensitivity example problem.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+
+#include <cvodes/cvodes.h>
+#include <cvodes/cvodes_spgmr.h> 
+#include <cvodes/cvodes_bbdpre.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+/*
+ *------------------------------------------------------------------
+ * Constants
+ *------------------------------------------------------------------
+ */
+
+#ifdef USE3D
+#define DIM 3
+#else
+#define DIM 2
+#endif
+
+/* Domain definition */
+
+#define XMIN RCONST(0.0)
+#define XMAX RCONST(20.0)
+#define MX   80    /* no. of divisions in x dir. */
+#define NPX  2     /* no. of procs. in x dir.    */
+
+#define YMIN RCONST(0.0)
+#define YMAX RCONST(20.0)
+#define MY   80    /* no. of divisions in y dir. */
+#define NPY  4     /* no. of procs. in y dir.    */
+
+#ifdef USE3D
+#define ZMIN RCONST(0.0)
+#define ZMAX RCONST(20.0)
+#define MZ   40    /* no. of divisions in z dir. */
+#define NPZ  2     /* no. of procs. in z dir.    */
+#endif
+
+/* Parameters for source Gaussians */
+
+#define G1_AMPL   RCONST(1.0)
+#define G1_SIGMA  RCONST(1.7) 
+#define G1_X      RCONST(4.0)
+#define G1_Y      RCONST(8.0)
+#ifdef USE3D
+#define G1_Z      RCONST(8.0)
+#endif
+
+#define G2_AMPL   RCONST(0.8)
+#define G2_SIGMA  RCONST(3.0)
+#define G2_X      RCONST(16.0)
+#define G2_Y      RCONST(12.0)
+#ifdef USE3D
+#define G2_Z      RCONST(12.0)
+#endif
+
+#define G_MIN     RCONST(1.0e-5)
+
+/* Diffusion coeff., max. velocity, domain width in y dir. */
+
+#define DIFF_COEF RCONST(1.0)
+#define V_MAX     RCONST(1.0)
+#define L         ((YMAX-YMIN)/RCONST(2.0))
+#define V_COEFF   V_MAX/L/L
+
+/* Initial and final times */
+
+#define ti    RCONST(0.0)
+#define tf    RCONST(10.0)
+
+/* Integration tolerances */
+
+#define RTOL    RCONST(1.0e-8) /* states */
+#define ATOL    RCONST(1.0e-6)
+
+#define RTOL_Q  RCONST(1.0e-8) /* forward quadrature */
+#define ATOL_Q  RCONST(1.0e-6)
+
+#define RTOL_B  RCONST(1.0e-8) /* adjoint variables */
+#define ATOL_B  RCONST(1.0e-6)
+
+#define RTOL_QB RCONST(1.0e-8) /* backward quadratures */
+#define ATOL_QB RCONST(1.0e-6)
+
+/* Steps between check points */
+
+#define STEPS 200
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+/*
+ *------------------------------------------------------------------
+ * Macros
+ *------------------------------------------------------------------
+ */
+
+#define FOR_DIM for(dim=0; dim<DIM; dim++)
+
+/* IJth:     (i[0],i[1],i[2])-th vector component                       */
+/* IJth_ext: (i[0],i[1],i[2])-th vector component in the extended array */
+
+#ifdef USE3D
+#define IJth(y,i)     ( y[(i[0])+(l_m[0]*((i[1])+(i[2])*l_m[1]))] )
+#define IJth_ext(y,i) ( y[(i[0]+1)+((l_m[0]+2)*((i[1]+1)+(i[2]+1)*(l_m[1]+2)))] )
+#else
+#define IJth(y,i)     (y[i[0]+(i[1])*l_m[0]])
+#define IJth_ext(y,i) (y[ (i[0]+1) + (i[1]+1) * (l_m[0]+2)])
+#endif
+
+/*
+ *------------------------------------------------------------------
+ * Type definition: ProblemData 
+ *------------------------------------------------------------------
+ */
+
+typedef struct {
+  /* Domain */
+  realtype xmin[DIM];  /* "left" boundaries */  
+  realtype xmax[DIM];  /* "right" boundaries */
+  int m[DIM];          /* number of grid points */
+  realtype dx[DIM];    /* grid spacing */
+  realtype dOmega;     /* differential volume */
+
+  /* Parallel stuff */
+  MPI_Comm comm;       /* MPI communicator */
+  int myId;            /* process id */ 
+  int npes;            /* total number of processes */
+  int num_procs[DIM];  /* number of processes in each direction */
+  int nbr_left[DIM];   /* MPI ID of "left" neighbor */
+  int nbr_right[DIM];  /* MPI ID of "right" neighbor */
+  int m_start[DIM];    /* "left" index in the global domain */
+  int l_m[DIM];        /* number of local grid points */ 
+  realtype *y_ext;     /* extended data array */
+  realtype *buf_send;  /* Send buffer */
+  realtype *buf_recv;  /* Receive buffer */
+  int buf_size;        /* Buffer size */
+
+  /* Source */
+  N_Vector p;          /* Source parameters */ 
+
+} *ProblemData;
+
+/*
+ *------------------------------------------------------------------
+ * Interface functions to CVODES
+ *------------------------------------------------------------------
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int f_local(long int Nlocal, realtype t, N_Vector y, 
+                   N_Vector ydot, void *user_data);
+
+static int fQ(realtype t, N_Vector y, N_Vector qdot, void *user_data);
+
+
+static int fB(realtype t, N_Vector y, N_Vector yB, N_Vector yBdot, 
+              void *user_dataB);
+static int fB_local(long int NlocalB, realtype t, 
+                    N_Vector y, N_Vector yB, N_Vector yBdot, 
+                    void *user_dataB);
+
+static int fQB(realtype t, N_Vector y, N_Vector yB, 
+               N_Vector qBdot, void *user_dataB);
+
+/*
+ *------------------------------------------------------------------
+ * Private functions
+ *------------------------------------------------------------------
+ */
+
+static void SetData(ProblemData d, MPI_Comm comm, int npes, int myId,
+                    long int *neq, long int *l_neq);
+static void SetSource(ProblemData d);
+static void f_comm(long int Nlocal, realtype t, N_Vector y, void *user_data);
+static void Load_yext(realtype *src, ProblemData d);
+static void PrintHeader();
+static void PrintFinalStats(void *cvode_mem);
+static void OutputGradient(int myId, N_Vector qB, ProblemData d);
+
+/*
+ *------------------------------------------------------------------
+ * Main program
+ *------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  ProblemData d;
+
+  MPI_Comm comm;
+  int npes, npes_needed;
+  int myId;
+ 
+  long int neq, l_neq;
+
+  void *cvode_mem;
+  N_Vector y, q;
+  realtype abstol, reltol, abstolQ, reltolQ;
+  long int mudq, mldq, mukeep, mlkeep;
+
+  int indexB;
+  N_Vector yB, qB;
+  realtype abstolB, reltolB, abstolQB, reltolQB;
+  long int mudqB, mldqB, mukeepB, mlkeepB;
+
+  realtype tret, *qdata, G;
+
+  int ncheckpnt, flag;
+
+  booleantype output;
+
+  /* Initialize MPI and set Ids */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_rank(comm, &myId);
+
+  /* Check number of processes */
+  npes_needed = NPX * NPY;
+#ifdef USE3D
+  npes_needed *= NPZ;
+#endif
+  MPI_Comm_size(comm, &npes);
+  if (npes_needed != npes) {
+    if (myId == 0)
+      fprintf(stderr,"I need %d processes but I only got %d\n",
+              npes_needed, npes);
+    MPI_Abort(comm, EXIT_FAILURE);
+  }
+
+  /* Test if matlab output is requested */
+  if (argc > 1) output = TRUE;
+  else          output = FALSE;
+
+  /* Allocate and set problem data structure */
+  d = (ProblemData) malloc(sizeof *d);
+  SetData(d, comm, npes, myId, &neq, &l_neq);
+  
+  if (myId == 0) PrintHeader();
+
+  /*-------------------------- 
+    Forward integration phase
+    --------------------------*/
+
+  /* Allocate space for y and set it with the I.C. */
+  y = N_VNew_Parallel(comm, l_neq, neq);
+  N_VConst(ZERO, y);
+  
+  /* Allocate and initialize qB (local contribution to cost) */
+  q = N_VNew_Parallel(comm, 1, npes); 
+  N_VConst(ZERO, q);
+
+  /* Create CVODES object, attach user data, and allocate space */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  flag = CVodeSetUserData(cvode_mem, d);
+  flag = CVodeInit(cvode_mem, f, ti, y);
+  abstol = ATOL;  
+  reltol = RTOL;   
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+
+  /* attach linear solver */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  
+  /* Attach preconditioner and linear solver modules */
+  mudq = mldq = d->l_m[0]+1;
+  mukeep = mlkeep = 2;  
+  flag = CVBBDPrecInit(cvode_mem, l_neq, mudq, mldq, 
+                       mukeep, mlkeep, ZERO,
+                       f_local, NULL);
+  
+  /* Initialize quadrature calculations */
+  abstolQ = ATOL_Q;
+  reltolQ = RTOL_Q;
+  flag = CVodeQuadInit(cvode_mem, fQ, q);
+  flag = CVodeQuadSStolerances(cvode_mem, reltolQ, abstolQ);
+  flag = CVodeSetQuadErrCon(cvode_mem, TRUE);
+
+  /* Allocate space for the adjoint calculation */
+  flag = CVodeAdjInit(cvode_mem, STEPS, CV_HERMITE);
+
+  /* Integrate forward in time while storing check points */
+  if (myId == 0) printf("Begin forward integration... ");
+  flag = CVodeF(cvode_mem, tf, y, &tret, CV_NORMAL, &ncheckpnt);
+  if (myId == 0) printf("done. ");
+
+   /* Extract quadratures */
+  flag = CVodeGetQuad(cvode_mem, &tret, q);
+  qdata = N_VGetArrayPointer_Parallel(q);
+  MPI_Allreduce(&qdata[0], &G, 1, PVEC_REAL_MPI_TYPE, MPI_SUM, comm);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  if (myId == 0) printf("  G = %Le\n",G);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  if (myId == 0) printf("  G = %e\n",G);
+#else
+  if (myId == 0) printf("  G = %e\n",G);
+#endif
+
+  /* Print statistics for forward run */
+  if (myId == 0) PrintFinalStats(cvode_mem);
+
+  /*-------------------------- 
+    Backward integration phase
+    --------------------------*/
+ 
+  /* Allocate and initialize yB */
+  yB = N_VNew_Parallel(comm, l_neq, neq); 
+  N_VConst(ZERO, yB);
+
+  /* Allocate and initialize qB (gradient) */
+  qB = N_VNew_Parallel(comm, l_neq, neq); 
+  N_VConst(ZERO, qB);
+
+  /* Create and allocate backward CVODE memory */
+  flag = CVodeCreateB(cvode_mem, CV_BDF, CV_NEWTON, &indexB);
+  flag = CVodeSetUserDataB(cvode_mem, indexB, d);
+  flag = CVodeInitB(cvode_mem, indexB, fB, tf, yB);
+  abstolB = ATOL_B;  
+  reltolB = RTOL_B; 
+  flag = CVodeSStolerancesB(cvode_mem, indexB, reltolB, abstolB);
+
+  /* Attach preconditioner and linear solver modules */
+  flag = CVSpgmrB(cvode_mem, indexB, PREC_LEFT, 0); 
+  mudqB = mldqB = d->l_m[0]+1;
+  mukeepB = mlkeepB = 2;  
+  flag = CVBBDPrecInitB(cvode_mem, indexB, l_neq, mudqB, mldqB, 
+                        mukeepB, mlkeepB, ZERO, fB_local, NULL);
+
+  /* Initialize quadrature calculations */
+  abstolQB = ATOL_QB;
+  reltolQB = RTOL_QB;
+  flag = CVodeQuadInitB(cvode_mem, indexB, fQB, qB);
+  flag = CVodeQuadSStolerancesB(cvode_mem, indexB, reltolQB, abstolQB);
+  flag = CVodeSetQuadErrConB(cvode_mem, indexB, TRUE);
+
+  /* Integrate backwards */
+  if (myId == 0) printf("Begin backward integration... ");
+  flag = CVodeB(cvode_mem, ti, CV_NORMAL);
+  if (myId == 0) printf("done.\n");
+  
+  /* Extract solution */
+  flag = CVodeGetB(cvode_mem, indexB, &tret, yB);
+
+  /* Extract quadratures */
+  flag = CVodeGetQuadB(cvode_mem, indexB, &tret, qB);
+
+  /* Print statistics for backward run */
+  if (myId == 0) {
+    PrintFinalStats(CVodeGetAdjCVodeBmem(cvode_mem, indexB));
+  }
+
+  /* Process 0 collects the gradient components and prints them */
+  if (output) {
+    OutputGradient(myId, qB, d);
+    if (myId == 0) printf("Wrote matlab file 'grad.m'.\n");
+  }
+
+  /* Free memory */
+
+  N_VDestroy_Parallel(y);
+  N_VDestroy_Parallel(q);
+  N_VDestroy_Parallel(qB);
+  N_VDestroy_Parallel(yB);
+
+  CVodeFree(&cvode_mem);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*
+ *------------------------------------------------------------------
+ * SetData:
+ * Allocate space for the ProblemData structure.
+ * Set fields in the ProblemData structure.
+ * Return local and global problem dimensions.
+ *
+ * SetSource:
+ * Instantiates the source parameters for a combination of two
+ * Gaussian sources.
+ *------------------------------------------------------------------
+ */
+
+static void SetData(ProblemData d, MPI_Comm comm, int npes, int myId,
+                    long int *neq, long int *l_neq)
+{
+  int n[DIM], nd[DIM];
+  int dim, size;
+
+  /* Set MPI communicator, id, and total number of processes */
+
+  d->comm = comm;
+  d->myId = myId;
+  d->npes = npes;
+
+  /* Set domain boundaries */
+
+  d->xmin[0] = XMIN;
+  d->xmax[0] = XMAX;
+  d->m[0]    = MX;
+
+  d->xmin[1] = YMIN;
+  d->xmax[1] = YMAX;
+  d->m[1]    = MY;
+
+#ifdef USE3D
+  d->xmin[2] = ZMIN;
+  d->xmax[2] = ZMAX;
+  d->m[2]    = MZ;
+#endif
+
+  /* Calculate grid spacing and differential volume */
+
+  d->dOmega = ONE;
+  FOR_DIM {
+    d->dx[dim] = (d->xmax[dim] - d->xmin[dim]) / d->m[dim];
+    d->m[dim] +=1;
+    d->dOmega *= d->dx[dim];
+  }
+
+  /* Set partitioning */
+
+  d->num_procs[0] = NPX;
+  n[0] = NPX; 
+  nd[0] = d->m[0] / NPX;
+
+  d->num_procs[1] = NPY;
+  n[1] = NPY; 
+  nd[1] = d->m[1] / NPY;
+
+#ifdef USE3D
+  d->num_procs[2] = NPZ;
+  n[2] = NPZ; 
+  nd[2] = d->m[2] / NPZ;
+#endif
+  
+  /* Compute the neighbors */
+
+  d->nbr_left[0]  = (myId%n[0]) == 0                ? myId : myId-1;
+  d->nbr_right[0] = (myId%n[0]) == n[0]-1           ? myId : myId+1;
+
+  d->nbr_left[1]  = (myId/n[0])%n[1] == 0           ? myId : myId-n[0];
+  d->nbr_right[1] = (myId/n[0])%n[1] == n[1]-1      ? myId : myId+n[0];
+
+#ifdef USE3D
+  d->nbr_left[2]  = (myId/n[0]/n[1])%n[2] == 0      ? myId : myId-n[0]*n[1];
+  d->nbr_right[2] = (myId/n[0]/n[1])%n[2] == n[2]-1 ? myId : myId+n[0]*n[1];
+#endif
+ 
+  /* Compute the local subdomains 
+     m_start: left border in global index space 
+     l_m:     length of the subdomain */
+  
+  d->m_start[0] = (myId%n[0])*nd[0];
+  d->l_m[0]     = d->nbr_right[0] == myId ? d->m[0] - d->m_start[0] : nd[0];
+
+  d->m_start[1] = ((myId/n[0])%n[1])*nd[1];
+  d->l_m[1]     = d->nbr_right[1] == myId ? d->m[1] - d->m_start[1] : nd[1];
+
+#ifdef USE3D
+  d->m_start[2] = (myId/n[0]/n[1])*nd[2];
+  d->l_m[2]     = d->nbr_right[2] == myId ? d->m[2] - d->m_start[2] : nd[2];
+#endif
+
+  /* Allocate memory for the y_ext array 
+     (local solution + data from neighbors) */
+
+  size = 1;
+  FOR_DIM size *= d->l_m[dim]+2;
+  d->y_ext = (realtype *) malloc( size*sizeof(realtype));
+
+  /* Initialize Buffer field.
+     Size of buffer is checked when needed */
+
+  d->buf_send = NULL;
+  d->buf_recv = NULL;
+  d->buf_size = 0;   
+
+  /* Allocate space for the source parameters */
+
+  *neq = 1; *l_neq = 1;
+  FOR_DIM {*neq *= d->m[dim];  *l_neq *= d->l_m[dim];}
+  d->p = N_VNew_Parallel(comm, *l_neq, *neq);
+
+  /* Initialize the parameters for a source with Gaussian profile */
+
+  SetSource(d);
+
+}
+
+static void SetSource(ProblemData d)
+{
+  int *l_m, *m_start;
+  realtype *xmin, *xmax, *dx;
+  realtype x[DIM], g, *pdata;
+  int i[DIM];
+
+  l_m  = d->l_m;
+  m_start = d->m_start;
+  xmin = d->xmin;
+  xmax = d->xmax;
+  dx = d->dx;
+
+
+  pdata = N_VGetArrayPointer_Parallel(d->p);
+
+  for(i[0]=0; i[0]<l_m[0]; i[0]++) {
+    x[0] = xmin[0] + (m_start[0]+i[0]) * dx[0];
+    for(i[1]=0; i[1]<l_m[1]; i[1]++) {
+      x[1] = xmin[1] + (m_start[1]+i[1]) * dx[1];
+#ifdef USE3D
+      for(i[2]=0; i[2]<l_m[2]; i[2]++) {
+        x[2] = xmin[2] + (m_start[2]+i[2]) * dx[2];
+        
+        g = G1_AMPL 
+          * SUNRexp( -SUNSQR(G1_X-x[0])/SUNSQR(G1_SIGMA) )
+          * SUNRexp( -SUNSQR(G1_Y-x[1])/SUNSQR(G1_SIGMA) )
+          * SUNRexp( -SUNSQR(G1_Z-x[2])/SUNSQR(G1_SIGMA) );
+        
+        g += G2_AMPL 
+          * SUNRexp( -SUNSQR(G2_X-x[0])/SUNSQR(G2_SIGMA) )
+          * SUNRexp( -SUNSQR(G2_Y-x[1])/SUNSQR(G2_SIGMA) )
+          * SUNRexp( -SUNSQR(G2_Z-x[2])/SUNSQR(G2_SIGMA) );
+        
+        if( g < G_MIN ) g = ZERO;
+
+        IJth(pdata, i) = g;
+      }
+#else
+      g = G1_AMPL 
+        * SUNRexp( -SUNSQR(G1_X-x[0])/SUNSQR(G1_SIGMA) )
+        * SUNRexp( -SUNSQR(G1_Y-x[1])/SUNSQR(G1_SIGMA) );
+
+      g += G2_AMPL 
+        * SUNRexp( -SUNSQR(G2_X-x[0])/SUNSQR(G2_SIGMA) )
+        * SUNRexp( -SUNSQR(G2_Y-x[1])/SUNSQR(G2_SIGMA) );
+      
+      if( g < G_MIN ) g = ZERO;
+
+      IJth(pdata, i) = g;
+#endif 
+    }
+  }
+}
+
+/*
+ *------------------------------------------------------------------
+ * f_comm: 
+ * Function for inter-process communication
+ * Used both for the forward and backward phase.
+ *------------------------------------------------------------------
+ */
+
+static void f_comm(long int N_local, realtype t, N_Vector y, void *user_data)
+{
+  int id, n[DIM], proc_cond[DIM], nbr[DIM][2];
+  ProblemData d;
+  realtype *yextdata, *ydata;
+  int l_m[DIM], dim;
+  int c, i[DIM], l[DIM-1];
+  realtype *buf_send, *buf_recv;
+  MPI_Status stat;
+  MPI_Comm comm;
+  int dir, size = 1, small = INT_MAX;
+
+  d  = (ProblemData) user_data;
+  comm = d->comm;
+  id = d->myId;
+  
+  /* extract data from domain*/
+  FOR_DIM {
+    n[dim] = d->num_procs[dim];
+    l_m[dim] = d->l_m[dim];
+  }
+  yextdata = d->y_ext;
+  ydata    = N_VGetArrayPointer_Parallel(y);
+  
+  /* Calculate required buffer size */
+  FOR_DIM {
+    size *= l_m[dim];
+    if( l_m[dim] < small) small = l_m[dim];
+  }
+  size /= small;
+  
+  /* Adjust buffer size if necessary */
+  if( d->buf_size < size ) {
+    d->buf_send = (realtype*) realloc( d->buf_send, size * sizeof(realtype));
+    d->buf_recv = (realtype*) realloc( d->buf_recv, size * sizeof(realtype));
+    d->buf_size = size;
+  }
+
+  buf_send = d->buf_send;
+  buf_recv = d->buf_recv;
+  
+  /* Compute the communication pattern; who sends first? */
+  /* if proc_cond==1 , process sends first in this dimension */
+  proc_cond[0] = (id%n[0])%2;
+  proc_cond[1] = ((id/n[0])%n[1])%2;
+#ifdef USE3D
+  proc_cond[2] = (id/n[0]/n[1])%2;
+#endif
+
+  /* Compute the actual communication pattern */
+  /* nbr[dim][0] is first proc to communicate with in dimension dim */
+  /* nbr[dim][1] the second one */
+  FOR_DIM {
+    nbr[dim][proc_cond[dim]]  = d->nbr_left[dim];
+    nbr[dim][!proc_cond[dim]] = d->nbr_right[dim];
+  }
+  
+  /* Communication: loop over dimension and direction (left/right) */
+  FOR_DIM {
+
+    for (dir=0; dir<=1; dir++) {
+
+      /* If subdomain at boundary, no communication in this direction */
+
+      if (id != nbr[dim][dir]) {
+        c=0;
+        /* Compute the index of the boundary (right or left) */
+        i[dim] = (dir ^ proc_cond[dim]) ? (l_m[dim]-1) : 0;
+        /* Loop over all other dimensions and copy data into buf_send */
+        l[0]=(dim+1)%DIM;
+#ifdef USE3D
+        l[1]=(dim+2)%DIM;
+        for(i[l[1]]=0; i[l[1]]<l_m[l[1]]; i[l[1]]++) 
+#endif
+          for(i[l[0]]=0; i[l[0]]<l_m[l[0]]; i[l[0]]++) 
+            buf_send[c++] = IJth(ydata, i);
+	  
+        if ( proc_cond[dim] ) {
+          /* Send buf_send and receive into buf_recv */
+          MPI_Send(buf_send, c, PVEC_REAL_MPI_TYPE, nbr[dim][dir], 0, comm);
+          MPI_Recv(buf_recv, c, PVEC_REAL_MPI_TYPE, nbr[dim][dir], 0, comm, &stat);
+        } else {
+          /* Receive into buf_recv and send buf_send*/
+          MPI_Recv(buf_recv, c, PVEC_REAL_MPI_TYPE, nbr[dim][dir], 0, comm, &stat);
+          MPI_Send(buf_send, c, PVEC_REAL_MPI_TYPE, nbr[dim][dir], 0, comm);
+        }
+
+        c=0;
+
+        /* Compute the index of the boundary (right or left) in yextdata */
+        i[dim] = (dir ^ proc_cond[dim]) ? l_m[dim] : -1;
+
+        /* Loop over all other dimensions and copy data into yextdata */
+#ifdef USE3D
+        for(i[l[1]]=0; i[l[1]]<l_m[l[1]]; i[l[1]]++)
+#endif
+          for(i[l[0]]=0; i[l[0]]<l_m[l[0]]; i[l[0]]++)
+            IJth_ext(yextdata, i) = buf_recv[c++];
+      }
+    } /* end loop over direction */
+  } /* end loop over dimension */ 
+}
+
+/*
+ *------------------------------------------------------------------
+ * f and f_local:
+ * Forward phase ODE right-hand side
+ *------------------------------------------------------------------
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  ProblemData d;
+  long int l_neq=1;
+  int dim;
+
+  d = (ProblemData) user_data;
+  FOR_DIM l_neq *= d->l_m[dim];
+  
+  /* Do all inter-processor communication */
+  f_comm(l_neq, t, y, user_data);
+
+  /* Compute right-hand side locally */
+  f_local(l_neq, t, y, ydot, user_data);
+
+  return(0);
+}
+
+static int f_local(long int Nlocal, realtype t, N_Vector y, 
+                   N_Vector ydot, void *user_data)
+{
+  realtype *Ydata, *dydata, *pdata;
+  realtype dx[DIM], c, v[DIM], cl[DIM], cr[DIM];
+  realtype adv[DIM], diff[DIM];
+  realtype xmin[DIM], xmax[DIM], x[DIM], x1;
+  int i[DIM], l_m[DIM], m_start[DIM], nbr_left[DIM], nbr_right[DIM], id;
+  ProblemData d;
+  int dim;
+
+  d = (ProblemData) user_data;
+
+  /* Extract stuff from data structure */
+  id = d->myId;
+  FOR_DIM {
+    xmin[dim]      = d->xmin[dim];
+    xmax[dim]      = d->xmax[dim];
+    l_m[dim]       = d->l_m[dim];
+    m_start[dim]   = d->m_start[dim];
+    dx[dim]        = d->dx[dim];
+    nbr_left[dim]  = d->nbr_left[dim];
+    nbr_right[dim] = d->nbr_right[dim];
+  } 
+
+  /* Get pointers to vector data */
+  dydata = N_VGetArrayPointer_Parallel(ydot);
+  pdata  = N_VGetArrayPointer_Parallel(d->p);
+
+  /* Copy local segment of y to y_ext */
+  Load_yext(N_VGetArrayPointer_Parallel(y), d);
+  Ydata = d->y_ext;
+
+  /* Velocity components in x1 and x2 directions (Poiseuille profile) */
+  v[1] = ZERO;
+#ifdef USE3D
+  v[2] = ZERO;
+#endif
+
+  /* Local domain is [xmin+(m_start+1)*dx, xmin+(m_start+1+l_m-1)*dx] */
+#ifdef USE3D
+  for(i[2]=0; i[2]<l_m[2]; i[2]++) {
+
+    x[2] = xmin[2] + (m_start[2]+i[2])*dx[2];
+#endif    
+    for(i[1]=0; i[1]<l_m[1]; i[1]++) {
+
+      x[1] = xmin[1] + (m_start[1]+i[1])*dx[1];
+
+      /* Velocity component in x0 direction (Poiseuille profile) */
+      x1 = x[1] - xmin[1] - L;
+      v[0] = V_COEFF * (L + x1) * (L - x1);
+
+      for(i[0]=0; i[0]<l_m[0]; i[0]++) {
+
+        x[0] = xmin[0] + (m_start[0]+i[0])*dx[0];
+
+        c  = IJth_ext(Ydata, i);	       
+
+        /* Source term*/
+        IJth(dydata, i) = IJth(pdata, i);
+
+        FOR_DIM {
+          i[dim]+=1;
+          cr[dim] = IJth_ext(Ydata, i);
+          i[dim]-=2;
+          cl[dim] = IJth_ext(Ydata, i);
+          i[dim]+=1;
+
+          /* Boundary conditions for the state variables */
+          if( i[dim]==l_m[dim]-1 && nbr_right[dim]==id)
+            cr[dim] = cl[dim];
+          else if( i[dim]==0 && nbr_left[dim]==id )
+            cl[dim] = cr[dim];
+
+          adv[dim]  = v[dim] * (cr[dim]-cl[dim]) / (TWO*dx[dim]);
+          diff[dim] = DIFF_COEF * (cr[dim]-TWO*c+cl[dim]) / SUNSQR(dx[dim]);
+
+          IJth(dydata, i) += (diff[dim] - adv[dim]);
+        } 
+      }
+    }
+#ifdef USE3D
+  }
+#endif
+
+  return(0);
+}
+
+/*
+ *------------------------------------------------------------------
+ * fQ:
+ * Right-hand side of quadrature equations on forward integration.
+ * The only quadrature on this phase computes the local contribution
+ * to the function G.
+ *------------------------------------------------------------------
+ */
+
+static int fQ(realtype t, N_Vector y, N_Vector qdot, void *user_data)
+{
+  ProblemData d;
+  realtype *dqdata;
+
+  d = (ProblemData) user_data;
+
+  dqdata = N_VGetArrayPointer_Parallel(qdot);
+
+  dqdata[0] = N_VDotProd_Parallel(y,y);
+  dqdata[0] *= RCONST(0.5) * (d->dOmega);
+
+  return(0);
+}
+
+/*
+ *------------------------------------------------------------------
+ * fB and fB_local:
+ * Backward phase ODE right-hand side (the discretized adjoint PDE)
+ *------------------------------------------------------------------
+ */
+
+static int fB(realtype t, N_Vector y, N_Vector yB, N_Vector yBdot, 
+              void *user_dataB)
+{
+  ProblemData d;
+  long int l_neq=1;
+  int dim;
+
+  d = (ProblemData) user_dataB;
+  FOR_DIM l_neq *= d->l_m[dim];
+  
+  /* Do all inter-processor communication */
+  f_comm(l_neq, t, yB, user_dataB);
+
+  /* Compute right-hand side locally */
+  fB_local(l_neq, t, y, yB, yBdot, user_dataB);
+
+  return(0);
+}
+
+static int fB_local(long int NlocalB, realtype t, 
+                    N_Vector y, N_Vector yB, N_Vector dyB, 
+                    void *user_dataB)
+{
+  realtype *YBdata, *dyBdata, *ydata;
+  realtype dx[DIM], c, v[DIM], cl[DIM], cr[DIM];
+  realtype adv[DIM], diff[DIM];
+  realtype xmin[DIM], xmax[DIM], x[DIM], x1;
+  int i[DIM], l_m[DIM], m_start[DIM], nbr_left[DIM], nbr_right[DIM], id;
+  ProblemData d;
+  int dim;
+  
+  d = (ProblemData) user_dataB;
+
+  /* Extract stuff from data structure */
+  id = d->myId;
+  FOR_DIM {
+    xmin[dim]      = d->xmin[dim];
+    xmax[dim]      = d->xmax[dim];
+    l_m[dim]       = d->l_m[dim];
+    m_start[dim]   = d->m_start[dim];
+    dx[dim]        = d->dx[dim];
+    nbr_left[dim]  = d->nbr_left[dim];
+    nbr_right[dim] = d->nbr_right[dim];
+  }
+ 
+  dyBdata = N_VGetArrayPointer_Parallel(dyB);
+  ydata   = N_VGetArrayPointer_Parallel(y);
+
+  /* Copy local segment of yB to y_ext */
+  Load_yext(N_VGetArrayPointer_Parallel(yB), d);
+  YBdata = d->y_ext;
+
+  /* Velocity components in x1 and x2 directions (Poiseuille profile) */
+  v[1] = ZERO;
+#ifdef USE3D
+  v[2] = ZERO;
+#endif
+ 
+  /* local domain is [xmin+(m_start)*dx, xmin+(m_start+l_m-1)*dx] */
+#ifdef USE3D
+  for(i[2]=0; i[2]<l_m[2]; i[2]++) {
+
+    x[2] = xmin[2] + (m_start[2]+i[2])*dx[2];
+#endif
+    
+    for(i[1]=0; i[1]<l_m[1]; i[1]++) {
+      
+      x[1] = xmin[1] + (m_start[1]+i[1])*dx[1];
+	  
+      /* Velocity component in x0 direction (Poiseuille profile) */
+      x1 = x[1] - xmin[1] - L;
+      v[0] = V_COEFF * (L + x1) * (L - x1);
+
+      for(i[0]=0; i[0]<l_m[0]; i[0]++) {
+
+        x[0] = xmin[0] + (m_start[0]+i[0])*dx[0];
+        
+        c  = IJth_ext(YBdata, i);	       
+        
+        /* Source term for adjoint PDE */
+        IJth(dyBdata, i) = -IJth(ydata, i);
+        
+        FOR_DIM {
+          
+          i[dim]+=1;
+          cr[dim] = IJth_ext(YBdata, i);
+          i[dim]-=2;
+          cl[dim] = IJth_ext(YBdata, i);
+          i[dim]+=1;
+
+          /* Boundary conditions for the adjoint variables */
+          if( i[dim]==l_m[dim]-1 && nbr_right[dim]==id)
+	    cr[dim] = cl[dim]-(TWO*dx[dim]*v[dim]/DIFF_COEF)*c;
+          else if( i[dim]==0 && nbr_left[dim]==id )
+	      cl[dim] = cr[dim]+(TWO*dx[dim]*v[dim]/DIFF_COEF)*c;
+		  
+          adv[dim]  = v[dim] * (cr[dim]-cl[dim]) / (TWO*dx[dim]);
+          diff[dim] = DIFF_COEF * (cr[dim]-TWO*c+cl[dim]) / SUNSQR(dx[dim]);
+          
+          IJth(dyBdata, i) -= (diff[dim] + adv[dim]);
+        } 
+      }
+    }
+#ifdef USE3D
+  }
+#endif
+
+  return(0);
+}
+
+/*
+ *------------------------------------------------------------------
+ * fQB:
+ * Right-hand side of quadrature equations on backward integration
+ * The i-th component of the gradient is nothing but int_t yB_i dt
+ *------------------------------------------------------------------
+ */
+
+static int fQB(realtype t, N_Vector y, N_Vector yB, N_Vector qBdot, 
+               void *user_dataB)
+{
+  ProblemData d;
+
+  d = (ProblemData) user_dataB;
+
+  N_VScale_Parallel(-(d->dOmega), yB, qBdot);
+
+  return(0);
+}
+
+/*
+ *------------------------------------------------------------------
+ * Load_yext: 
+ * copies data from src (y or yB) into y_ext, which already contains
+ * data from neighboring processes.
+ *------------------------------------------------------------------
+ */
+
+static void Load_yext(realtype *src, ProblemData d)
+{
+  int i[DIM], l_m[DIM], dim;
+
+  FOR_DIM l_m[dim] = d->l_m[dim];
+     
+  /* copy local segment */
+#ifdef USE3D
+  for  (i[2]=0; i[2]<l_m[2]; i[2]++)
+#endif
+    for(i[1]=0; i[1]<l_m[1]; i[1]++)
+      for(i[0]=0; i[0]<l_m[0]; i[0]++)
+	IJth_ext(d->y_ext, i) = IJth(src, i);
+}
+
+/*
+ *------------------------------------------------------------------
+ * PrintHeader:
+ * Print first lins of output (problem description)
+ *------------------------------------------------------------------
+ */
+
+static void PrintHeader()
+{
+    printf("\nParallel Krylov adjoint sensitivity analysis example\n");
+    printf("%1dD Advection diffusion PDE with homogeneous Neumann B.C.\n",DIM);
+    printf("Computes gradient of G = int_t_Omega ( c_i^2 ) dt dOmega\n");
+    printf("with respect to the source values at each grid point.\n\n");
+
+    printf("Domain:\n");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("   %Lf < x < %Lf   mx = %d  npe_x = %d \n",XMIN,XMAX,MX,NPX);
+    printf("   %Lf < y < %Lf   my = %d  npe_y = %d \n",YMIN,YMAX,MY,NPY);
+#else
+    printf("   %f < x < %f   mx = %d  npe_x = %d \n",XMIN,XMAX,MX,NPX);
+    printf("   %f < y < %f   my = %d  npe_y = %d \n",YMIN,YMAX,MY,NPY);
+#endif
+
+#ifdef USE3D
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("   %Lf < z < %Lf   mz = %d  npe_z = %d \n",ZMIN,ZMAX,MZ,NPZ);
+#else
+    printf("   %f < z < %f   mz = %d  npe_z = %d \n",ZMIN,ZMAX,MZ,NPZ);
+#endif
+#endif
+
+    printf("\n");
+  }
+
+/*
+ *------------------------------------------------------------------
+ * PrintFinalStats:
+ * Print final statistics contained in cvode_mem
+ *------------------------------------------------------------------
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwSPGMR, leniwSPGMR;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeSPGMR;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwSPGMR, &leniwSPGMR);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeSPGMR);
+
+  printf("\nFinal Statistics.. \n\n");
+  printf("lenrw   = %6ld     leniw = %6ld\n", lenrw, leniw);
+  printf("llrw    = %6ld     lliw  = %6ld\n", lenrwSPGMR, leniwSPGMR);
+  printf("nst     = %6ld\n"                  , nst);
+  printf("nfe     = %6ld     nfel  = %6ld\n"  , nfe, nfeSPGMR);
+  printf("nni     = %6ld     nli   = %6ld\n"  , nni, nli);
+  printf("nsetups = %6ld     netf  = %6ld\n"  , nsetups, netf);
+  printf("npe     = %6ld     nps   = %6ld\n"  , npe, nps);
+  printf("ncfn    = %6ld     ncfl  = %6ld\n\n", ncfn, ncfl); 
+}
+
+/*
+ *------------------------------------------------------------------
+ * OutputGradient:
+ * Generate matlab m files for visualization
+ * One file gradXXXX.m from each process + a driver grad.m
+ *------------------------------------------------------------------
+ */
+
+static void OutputGradient(int myId, N_Vector qB, ProblemData d)
+{
+  FILE *fid;
+  char filename[20];
+  int *l_m, *m_start, i[DIM],ip;
+  realtype *xmin, *xmax, *dx;
+  realtype x[DIM], *pdata, p, *qBdata, g;
+
+  sprintf(filename,"grad%03d.m",myId);
+  fid = fopen(filename,"w");
+
+  l_m  = d->l_m;
+  m_start = d->m_start;
+  xmin = d->xmin;
+  xmax = d->xmax;
+  dx = d->dx;
+
+  qBdata = N_VGetArrayPointer_Parallel(qB);
+  pdata  = N_VGetArrayPointer_Parallel(d->p);
+
+  /* Write matlab files with solutions from each process */
+
+  /*   Allocate Matlab storage for data */
+
+  fprintf(fid,"x%d = zeros(%d,1); \n",  myId, l_m[0]);
+  fprintf(fid,"y%d = zeros(%d,1); \n",  myId, l_m[1]);
+#ifdef USE3D
+  fprintf(fid,"z%d = zeros(%d,1); \n",  myId, l_m[2]);
+  fprintf(fid,"p%d = zeros(%d,%d,%d); \n", myId, l_m[1], l_m[0], l_m[2]);
+  fprintf(fid,"g%d = zeros(%d,%d,%d); \n", myId, l_m[1], l_m[0], l_m[2]);
+#else
+  fprintf(fid,"p%d = zeros(%d,%d); \n", myId, l_m[1], l_m[0]);
+  fprintf(fid,"g%d = zeros(%d,%d); \n", myId, l_m[1], l_m[0]);
+#endif
+
+  /*   Write mesh information */
+
+  for(i[0]=0; i[0]<l_m[0]; i[0]++) {
+    x[0] = xmin[0] + (m_start[0]+i[0]) * dx[0];
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    fprintf(fid,"x%d(%d,1) = %Le; \n",  myId, i[0]+1, x[0]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    fprintf(fid,"x%d(%d,1) = %le; \n",  myId, i[0]+1, x[0]);
+#else
+    fprintf(fid,"x%d(%d,1) = %e; \n",  myId, i[0]+1, x[0]);
+#endif
+  }
+
+  for(i[1]=0; i[1]<l_m[1]; i[1]++) {
+    x[1] = xmin[1] + (m_start[1]+i[1]) * dx[1];
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    fprintf(fid,"y%d(%d,1) = %Le; \n",  myId, i[1]+1, x[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    fprintf(fid,"y%d(%d,1) = %le; \n",  myId, i[1]+1, x[1]);
+#else
+    fprintf(fid,"y%d(%d,1) = %e; \n",  myId, i[1]+1, x[1]);
+#endif
+  }
+
+#ifdef USE3D
+  for(i[2]=0; i[2]<l_m[2]; i[2]++) {
+    x[2] = xmin[2] + (m_start[2]+i[2]) * dx[2];
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    fprintf(fid,"z%d(%d,1) = %Le; \n",  myId, i[2]+1, x[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    fprintf(fid,"z%d(%d,1) = %le; \n",  myId, i[2]+1, x[2]);
+#else
+    fprintf(fid,"z%d(%d,1) = %e; \n",  myId, i[2]+1, x[2]);
+#endif
+  }
+#endif
+
+  /*   Write solution data */
+
+  for(i[0]=0; i[0]<l_m[0]; i[0]++) {
+    x[0] = xmin[0] + (m_start[0]+i[0]) * dx[0];
+    for(i[1]=0; i[1]<l_m[1]; i[1]++) {
+      x[1] = xmin[1] + (m_start[1]+i[1]) * dx[1];
+#ifdef USE3D
+      for(i[2]=0; i[2]<l_m[2]; i[2]++) {
+        x[2] = xmin[2] + (m_start[2]+i[2]) * dx[2];
+        g = IJth(qBdata, i);
+        p = IJth(pdata, i);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+        fprintf(fid,"p%d(%d,%d,%d) = %Le; \n", myId, i[1]+1, i[0]+1, i[2]+1, p);
+        fprintf(fid,"g%d(%d,%d,%d) = %Le; \n", myId, i[1]+1, i[0]+1, i[2]+1, g);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+        fprintf(fid,"p%d(%d,%d,%d) = %le; \n", myId, i[1]+1, i[0]+1, i[2]+1, p);
+        fprintf(fid,"g%d(%d,%d,%d) = %le; \n", myId, i[1]+1, i[0]+1, i[2]+1, g);
+#else
+        fprintf(fid,"p%d(%d,%d,%d) = %e; \n", myId, i[1]+1, i[0]+1, i[2]+1, p);
+        fprintf(fid,"g%d(%d,%d,%d) = %e; \n", myId, i[1]+1, i[0]+1, i[2]+1, g);
+#endif
+      }
+#else
+      g = IJth(qBdata, i);
+      p = IJth(pdata, i);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+      fprintf(fid,"p%d(%d,%d) = %Le; \n", myId, i[1]+1, i[0]+1, p);
+      fprintf(fid,"g%d(%d,%d) = %Le; \n", myId, i[1]+1, i[0]+1, g);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      fprintf(fid,"p%d(%d,%d) = %e; \n", myId, i[1]+1, i[0]+1, p);
+      fprintf(fid,"g%d(%d,%d) = %e; \n", myId, i[1]+1, i[0]+1, g);
+#else
+      fprintf(fid,"p%d(%d,%d) = %e; \n", myId, i[1]+1, i[0]+1, p);
+      fprintf(fid,"g%d(%d,%d) = %e; \n", myId, i[1]+1, i[0]+1, g);
+#endif
+#endif 
+    }
+  }
+  fclose(fid);
+
+
+  /* Write matlab driver */
+
+  if (myId == 0) {
+
+    fid = fopen("grad.m","w");
+
+#ifdef USE3D
+    fprintf(fid,"clear;\n");
+    fprintf(fid,"figure(1);\nhold on\n");
+    fprintf(fid,"figure(2);\nhold on\n");
+    fprintf(fid,"trans = 0.7;\n");
+    fprintf(fid,"ecol  = 'none';\n");
+    fprintf(fid,"glev1 = 0.4;\n");
+    fprintf(fid,"glev2 = 0.25;\n");
+    fprintf(fid,"gcol1 = 'blue';\n");
+    fprintf(fid,"gcol2 = 'green';\n");
+    fprintf(fid,"gtrans = 0.5;\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    fprintf(fid,"xp=[%Lf %Lf];\n",G1_X,G2_X);
+    fprintf(fid,"yp=[%Lf];\n",G2_Y);
+    fprintf(fid,"zp=[%Lf];\n",G1_Z);
+#else
+    fprintf(fid,"xp=[%f %f];\n",G1_X,G2_X);
+    fprintf(fid,"yp=[%f];\n",G2_Y);
+    fprintf(fid,"zp=[];\n");
+#endif
+    for (ip=0; ip<d->npes; ip++) {
+      fprintf(fid,"\ngrad%03d;\n",ip);
+      fprintf(fid,"figure(1)\n");
+      fprintf(fid,"[X,Y,Z]=meshgrid(x%d,y%d,z%d);\n",ip,ip,ip);
+      fprintf(fid,"s%d=slice(X,Y,Z,p%d,xp,yp,zp);\n",ip,ip);
+      fprintf(fid,"for i = 1:length(s%d)\n",ip);
+      fprintf(fid,"  set(s%d(i),'FaceAlpha',trans);\n",ip);
+      fprintf(fid,"  set(s%d(i),'EdgeColor',ecol);\n",ip);
+      fprintf(fid,"end\n");
+
+      fprintf(fid,"\nfigure(2)\n");
+      fprintf(fid,"p=patch(isosurface(X,Y,Z,g%d,glev1));\n",ip);
+      fprintf(fid,"p.FaceColor = gcol1;\n");
+      fprintf(fid,"p.EdgeColor = ecol;\n");
+      fprintf(fid,"p=patch(isosurface(X,Y,Z,g%d,glev2));\n",ip);
+      fprintf(fid,"p.FaceColor = gcol2;\n");
+      fprintf(fid,"p.EdgeColor = ecol;\n");
+      fprintf(fid,"p.FaceAlpha = gtrans;\n");
+      fprintf(fid,"clear x%d y%d z%d p%d g%d;\n",ip,ip,ip,ip,ip);
+    }
+    
+    fprintf(fid,"\nfigure(1)\n");
+    fprintf(fid,"view(3)\n");
+    fprintf(fid,"shading interp\naxis equal\n");
+    fprintf(fid,"hold off\n");
+    fprintf(fid,"xlabel('x')\n");
+    fprintf(fid,"ylabel('y')\n");
+    fprintf(fid,"zlabel('z')\n");
+    fprintf(fid,"axis([%f, %f, %f, %f, %f, %f])\n",XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX);
+    fprintf(fid,"print('cvsadjkryx_p3Dcf','-depsc')\n");
+    fprintf(fid,"savefig('cvsadjkryx_p3Dcf.fig')\n");
+
+    fprintf(fid,"\nfigure(2)\n");
+    fprintf(fid,"view(3)\n");
+    fprintf(fid,"axis equal\n");
+    fprintf(fid,"hold off\n");
+    fprintf(fid,"xlabel('x')\n");
+    fprintf(fid,"ylabel('y')\n");
+    fprintf(fid,"zlabel('z')\n");
+    fprintf(fid,"axis([%f, %f, %f, %f, %f, %f])\n",XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX);
+    fprintf(fid,"camlight\n");
+    fprintf(fid,"lighting gouraud\n");
+    fprintf(fid,"print('cvsadjkryx_p3Dgrad','-depsc')\n");
+    fprintf(fid,"savefig('cvsadjkryx_p3Dgrad.fig')\n");
+#else
+    fprintf(fid,"clear;\n");
+    fprintf(fid,"figure('units','normalized','position',[.1 .1 .6 .4])\n");
+    fprintf(fid,"trans = 0.7;\n");
+    fprintf(fid,"ecol  = 'none';\n");
+
+    for (ip=0; ip<d->npes; ip++) {
+
+      fprintf(fid,"\ngrad%03d;\n",ip);
+
+      fprintf(fid,"\nax(1) = subplot(1,2,1);\n");
+      fprintf(fid,"s = surf(x%d,y%d,g%d);\n",ip,ip,ip);
+      fprintf(fid,"set(s, 'FaceAlpha', trans);\n");
+      fprintf(fid,"set(s, 'EdgeColor', ecol);\n");
+      fprintf(fid,"hold on\n");
+      fprintf(fid,"axis tight\n");
+      fprintf(fid,"box on\n");
+      fprintf(fid,"colorbar('Position', [0.5 0.1 0.025 0.8])\n");
+      
+      fprintf(fid,"\nax(2) = subplot(1,2,2);\n");
+      fprintf(fid,"s = surf(x%d,y%d,p%d);\n",ip,ip,ip);
+      fprintf(fid,"set(s, 'CData', g%d);\n",ip);
+      fprintf(fid,"set(s, 'FaceAlpha', trans);\n");
+      fprintf(fid,"set(s, 'EdgeColor', ecol);\n");
+      fprintf(fid,"hold on\n");
+      fprintf(fid,"axis tight\n");
+      fprintf(fid,"box on\n");
+
+      fprintf(fid,"clear x%d y%d p%d g%d;\n",ip,ip,ip,ip);
+    }
+
+    fprintf(fid,"\nax(1) = subplot(1,2,1);\n");
+    fprintf(fid,"pos = get(ax(1), 'Position');\n");
+    fprintf(fid,"set(ax(1), 'Position', [pos(1)-0.02 pos(2) pos(3) pos(4)]);\n");
+    fprintf(fid,"xlabel('x'), ylabel('y')\n");
+    fprintf(fid,"hold off\n");
+
+    fprintf(fid,"\nax(2) = subplot(1,2,2);\n");
+    fprintf(fid,"pos = get(ax(2), 'Position');\n");
+    fprintf(fid,"set(ax(2), 'Position', [pos(1)+0.02 pos(2) pos(3) pos(4)]);\n");
+    fprintf(fid,"xlabel('x'), ylabel('y')\n");
+    fprintf(fid,"hold off\n");
+
+    fprintf(fid,"\nfig = gcf;\n");
+    fprintf(fid,"fig.PaperPositionMode = 'auto';\n");
+    fprintf(fid,"print('cvsadjkryx_p2D','-depsc','-r0')\n");
+    fprintf(fid,"savefig('cvsadjkryx_p2D.fig')\n");
+#endif
+    fclose(fid);
+  }
+}
diff --git a/examples/cvodes/parallel/cvsAtmDisp_ASAi_kry_bbd_p.out b/examples/cvodes/parallel/cvsAtmDisp_ASAi_kry_bbd_p.out
new file mode 100644
index 0000000..cdcb067
--- /dev/null
+++ b/examples/cvodes/parallel/cvsAtmDisp_ASAi_kry_bbd_p.out
@@ -0,0 +1,36 @@
+
+Parallel Krylov adjoint sensitivity analysis example
+2D Advection diffusion PDE with homogeneous Neumann B.C.
+Computes gradient of G = int_t_Omega ( c_i^2 ) dt dOmega
+with respect to the source values at each grid point.
+
+Domain:
+   0.000000 < x < 20.000000   mx = 80  npe_x = 2 
+   0.000000 < y < 20.000000   my = 80  npe_y = 4 
+
+Begin forward integration... done.   G = 4.791513e+03
+
+Final Statistics.. 
+
+lenrw   =  65786     leniw =    372
+llrw    =  65656     lliw  =    160
+nst     =    174
+nfe     =    179     nfel  =    310
+nni     =    175     nli   =    310
+nsetups =     18     netf  =      0
+npe     =      4     nps   =    482
+ncfn    =      0     ncfl  =      0
+
+Begin backward integration... done.
+
+Final Statistics.. 
+
+lenrw   = 131316     leniw =    372
+llrw    =  65656     lliw  =    160
+nst     =    118
+nfe     =    135     nfel  =    277
+nni     =    131     nli   =    277
+nsetups =     16     netf  =      0
+npe     =      3     nps   =    399
+ncfn    =      0     ncfl  =      0
+
diff --git a/examples/cvodes/parallel/cvsDiurnal_FSA_kry_p.c b/examples/cvodes/parallel/cvsDiurnal_FSA_kry_p.c
new file mode 100644
index 0000000..fcb6787
--- /dev/null
+++ b/examples/cvodes/parallel/cvsDiurnal_FSA_kry_p.c
@@ -0,0 +1,1286 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): S. D. Cohen, A. C. Hindmarsh, Radu Serban,
+ *                and M. R. Wittman @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * mesh, with simple polynomial initial profiles.
+ *
+ * The problem is solved by CVODES on NPE processors, treated
+ * as a rectangular process grid of size NPEX by NPEY, with
+ * NPE = NPEX*NPEY. Each processor contains a subgrid of size
+ * MXSUB by MYSUB of the (x,y) mesh. Thus the actual mesh sizes
+ * are MX = MXSUB*NPEX and MY = MYSUB*NPEY, and the ODE system size
+ * is neq = 2*MX*MY.
+ *
+ * The solution with CVODES is done with the BDF/GMRES method (i.e.
+ * using the CVSPGMR linear solver) and the block-diagonal part of
+ * the Newton matrix as a left preconditioner. A copy of the
+ * block-diagonal part of the Jacobian is saved and conditionally
+ * reused within the Precond routine.
+ *
+ * Performance data and sampled solution values are printed at
+ * selected output times, and all performance counters are printed
+ * on completion.
+ *
+ * Optionally, CVODES can compute sensitivities with respect to the
+ * problem parameters q1 and q2.
+ * Any of three sensitivity methods (SIMULTANEOUS, STAGGERED, and
+ * STAGGERED1) can be used and sensitivities may be included in the
+ * error test or not (error control set on FULL or PARTIAL,
+ * respectively).
+ *
+ * Execution:
+ *
+ * Note: This version uses MPI for user routines, and the CVODES
+ *       solver. In what follows, N is the number of processors,
+ *       N = NPEX*NPEY (see constants below) and it is assumed that
+ *       the MPI script mpirun is used to run a paralles
+ *       application.
+ * If no sensitivities are desired:
+ *    % mpirun -np N cvsDiurnal_FSA_kry_p -nosensi
+ * If sensitivities are to be computed:
+ *    % mpirun -np N cvsDiurnal_FSA_kry_p -sensi sensi_meth err_con
+ * where sensi_meth is one of {sim, stg, stg1} and err_con is one of
+ * {t, f}.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include <cvodes/cvodes.h>            /* main CVODES header file */
+#include <cvodes/cvodes_spgmr.h>      /* defs. for CVSPGMR fcts. and constants */
+#include <nvector/nvector_parallel.h> /* defs of par. NVECTOR fcts. and macros */
+#include <sundials/sundials_dense.h>  /* generic DENSE solver used in prec. */
+#include <sundials/sundials_math.h>   /* contains macros SQR and EXP */
+#include <sundials/sundials_types.h>  /* def. of realtype */
+
+#include <mpi.h>
+
+
+/* Problem Constants */
+
+#define NVARS     2              /* number of species                    */
+#define C1_SCALE  RCONST(1.0e6)  /* coefficients in initial profiles     */
+#define C2_SCALE  RCONST(1.0e12)
+
+#define T0        RCONST(0.0)    /* initial time                         */
+#define NOUT      12             /* number of output times               */
+#define TWOHR     RCONST(7200.0) /* number of seconds in two hours       */
+#define HALFDAY   RCONST(4.32e4) /* number of seconds in a half day      */
+#define PI        RCONST(3.1415926535898)   /* pi                        */ 
+
+#define XMIN      RCONST(0.0)    /* grid boundaries in x                 */
+#define XMAX      RCONST(20.0)          
+#define YMIN      RCONST(30.0)   /* grid boundaries in y                 */
+#define YMAX      RCONST(50.0)
+
+#define NPEX      2              /* no. PEs in x direction of PE array   */
+#define NPEY      2              /* no. PEs in y direction of PE array   */
+                                 /* Total no. PEs = NPEX*NPEY            */
+#define MXSUB     5              /* no. x points per subgrid             */
+#define MYSUB     5              /* no. y points per subgrid             */
+
+#define MX        (NPEX*MXSUB)   /* MX = number of x mesh points         */
+#define MY        (NPEY*MYSUB)   /* MY = number of y mesh points         */
+                                 /* Spatial mesh is MX by MY             */
+
+/* CVodeInit Constants */
+
+#define RTOL      RCONST(1.0e-5) /* scalar relative tolerance             */
+#define FLOOR     RCONST(100.0)  /* value of C1 or C2 at which tols.      */
+                                 /* change from relative to absolute      */
+#define ATOL      (RTOL*FLOOR)   /* scalar absolute tolerance             */
+
+/* Sensitivity constants */
+#define NP        8              /* number of problem parameters          */
+#define NS        2              /* number of sensitivities               */
+
+#define ZERO      RCONST(0.0)
+
+
+/* User-defined matrix accessor macro: IJth */
+
+/* IJth is defined in order to write code which indexes into small dense
+   matrices with a (row,column) pair, where 1 <= row,column <= NVARS.   
+
+   IJth(a,i,j) references the (i,j)th entry of the small matrix realtype **a,
+   where 1 <= i,j <= NVARS. The small matrix routines in sundials_dense.h
+   work with matrices stored by column in a 2-dimensional array. In C,
+   arrays are indexed starting at 0, not 1. */
+
+#define IJth(a,i,j)        (a[j-1][i-1])
+
+/* Types : UserData and PreconData 
+   contain problem parameters, problem constants, preconditioner blocks, 
+   pivot arrays, grid constants, and processor indices, as
+   well as data needed for preconditioning */
+
+typedef struct {
+
+  realtype *p;
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+  realtype uext[NVARS*(MXSUB+2)*(MYSUB+2)];
+  long int my_pe, isubx, isuby, nvmxsub, nvmxsub2;
+  MPI_Comm comm;
+
+  /* For preconditioner */
+  realtype **P[MXSUB][MYSUB], **Jbd[MXSUB][MYSUB];
+  long int *pivot[MXSUB][MYSUB];
+
+} *UserData;
+
+/* Functions Called by the CVODES Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data, 
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu, 
+                  N_Vector r, N_Vector z, 
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+/* Private Helper Functions */
+
+static void ProcessArgs(int argc, char *argv[], int my_pe,
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con);
+static void WrongArgs(int my_pe, char *name);
+
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector u, UserData data);
+
+static void BSend(MPI_Comm comm, int my_pe, long int isubx, 
+                  long int isuby, long int dsizex, 
+                  long int dsizey, realtype udata[]);
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      long int isubx, long int isuby,
+                      long int dsizex, long int dsizey,
+                      realtype uext[], realtype buffer[]);
+static void BRecvWait(MPI_Request request[], long int isubx, long int isuby,
+                      long int dsizex, realtype uext[], realtype buffer[]);
+static void ucomm(realtype t, N_Vector u, UserData data);
+static void fcalc(realtype t, realtype udata[], realtype dudata[], UserData data);
+
+static void PrintOutput(void *cvode_mem, int my_pe, MPI_Comm comm,
+                        realtype t, N_Vector u);
+static void PrintOutputS(int my_pe, MPI_Comm comm, N_Vector *uS);
+static void PrintFinalStats(void *cvode_mem, booleantype sensi); 
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag, my_pe, npes;
+  long int neq, local_N;
+  MPI_Comm comm;
+
+  realtype *pbar;
+  int is, *plist;
+  N_Vector *uS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+  pbar = NULL;
+  plist = NULL;
+  uS = NULL;
+
+  /* Set problem size neq */
+  neq = NVARS*MX*MY;
+
+  /* Get processor number and total number of pe's */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  if (npes != NPEX*NPEY) {
+    if (my_pe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n\n",
+	      npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+
+  /* Process arguments */
+  ProcessArgs(argc, argv, my_pe, &sensi, &sensi_meth, &err_con);
+
+  /* Set local length */
+  local_N = NVARS*MXSUB*MYSUB;
+
+  /* Allocate and load user data block; allocate preconditioner block */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  data->p = NULL;
+  data->p = (realtype *) malloc(NP*sizeof(realtype));
+  if (check_flag((void *)data->p, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  InitUserData(my_pe, comm, data);
+
+  /* Allocate u, and set initial values and tolerances */ 
+  u = N_VNew_Parallel(comm, local_N, neq);
+  if (check_flag((void *)u, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  SetInitialProfiles(u, data);
+  abstol = ATOL; reltol = RTOL;
+
+  /* Create CVODES object, set optional input, allocate memory */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if (check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeSetMaxNumSteps(cvode_mem, 2000);
+  if (check_flag(&flag, "CVodeSetMaxNumSteps", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if (check_flag(&flag, "CVodeInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Attach linear solver CVSPGMR */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if (check_flag(&flag, "CVSpgmr", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+  if (check_flag(&flag, "CVSpilsSetPreconditioner", 1, my_pe)) MPI_Abort(comm, 1);
+
+  if(my_pe == 0)
+    printf("\n2-species diurnal advection-diffusion problem\n");
+
+  /* Sensitivity-related settings */
+  if( sensi) {
+
+    plist = (int *) malloc(NS * sizeof(int));
+    if (check_flag((void *)plist, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+    for (is=0; is<NS; is++) plist[is] = is;
+
+    pbar = (realtype *) malloc(NS*sizeof(realtype));
+    if (check_flag((void *)pbar, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+    for (is=0; is<NS; is++) pbar[is] = data->p[plist[is]]; 
+
+    uS = N_VCloneVectorArray_Parallel(NS, u);
+    if (check_flag((void *)uS, "N_VCloneVectorArray_Parallel", 0, my_pe))
+                                                          MPI_Abort(comm, 1);
+    for (is = 0; is < NS; is++)
+      N_VConst(ZERO,uS[is]);
+
+    flag = CVodeSensInit1(cvode_mem, NS, sensi_meth, NULL, uS);
+    if (check_flag(&flag, "CVodeSensInit1", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVodeSensEEtolerances(cvode_mem);
+    if (check_flag(&flag, "CVodeSensEEtolerances", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVodeSetSensErrCon(cvode_mem, err_con);
+    if (check_flag(&flag, "CVodeSetSensErrCon", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVodeSetSensDQMethod(cvode_mem, CV_CENTERED, ZERO);
+    if (check_flag(&flag, "CVodeSetSensDQMethod", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVodeSetSensParams(cvode_mem, data->p, pbar, plist);
+    if (check_flag(&flag, "CVodeSetSensParams", 1, my_pe)) MPI_Abort(comm, 1);
+
+    if(my_pe == 0) {
+      printf("Sensitivity: YES ");
+      if(sensi_meth == CV_SIMULTANEOUS)   
+        printf("( SIMULTANEOUS +");
+      else 
+        if(sensi_meth == CV_STAGGERED) printf("( STAGGERED +");
+        else                           printf("( STAGGERED1 +");   
+      if(err_con) printf(" FULL ERROR CONTROL )");
+      else        printf(" PARTIAL ERROR CONTROL )");
+    }
+
+  } else {
+
+    if(my_pe == 0) printf("Sensitivity: NO ");
+
+  }
+
+  if (my_pe == 0) {
+    printf("\n\n");
+    printf("========================================================================\n");
+    printf("     T     Q       H      NST                    Bottom left  Top right \n");
+    printf("========================================================================\n");
+  }
+
+  /* In loop over output points, call CVode, print results, test for error */
+  for (iout=1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if (check_flag(&flag, "CVode", 1, my_pe)) break;
+    PrintOutput(cvode_mem, my_pe, comm, t, u);
+    if (sensi) {
+      flag = CVodeGetSens(cvode_mem, &t, uS);
+      if (check_flag(&flag, "CVodeGetSens", 1, my_pe)) break;
+      PrintOutputS(my_pe, comm, uS);
+    }
+    if (my_pe == 0)
+      printf("------------------------------------------------------------------------\n");
+  }
+
+  /* Print final statistics */  
+  if (my_pe == 0) PrintFinalStats(cvode_mem, sensi);
+
+  /* Free memory */
+  N_VDestroy_Parallel(u);
+  if (sensi) {
+    N_VDestroyVectorArray_Parallel(uS, NS);
+    free(plist);
+    free(pbar);
+  }
+  FreeUserData(data);
+  CVodeFree(&cvode_mem);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * f routine.  Evaluate f(t,y).  First call ucomm to do communication of 
+ * subgrid boundary data into uext.  Then calculate f by a call to fcalc. 
+ */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype *udata, *dudata;
+  UserData data;
+
+  udata = N_VGetArrayPointer_Parallel(u);
+  dudata = N_VGetArrayPointer_Parallel(udot);
+  data = (UserData) user_data;
+
+  /* Call ucomm to do inter-processor communicaiton */
+  ucomm (t, u, data);
+
+  /* Call fcalc to calculate all right-hand sides */
+  fcalc (t, udata, dudata, data);
+
+  return(0);
+}
+
+/* 
+ * Preconditioner setup routine. Generate and preprocess P. 
+ */
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data, 
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype c1, c2, cydn, cyup, diag, ydn, yup, q4coef, dely, verdco, hordco;
+  realtype **(*P)[MYSUB], **(*Jbd)[MYSUB];
+  long int *(*pivot)[MYSUB], ier, nvmxsub, offset;
+  int lx, ly, jx, jy, isubx, isuby;
+  realtype *udata, **a, **j;
+  UserData data;
+  realtype Q1, Q2, C3, A3, A4, KH, VEL, KV0;
+
+  /* Make local copies of pointers in user_data, pointer to u's data,
+     and PE index pair */
+  data = (UserData) user_data;
+  P = data->P;
+  Jbd = data->Jbd;
+  pivot = data->pivot;
+  udata = N_VGetArrayPointer_Parallel(u);
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+
+  /* Load problem coefficients and parameters */
+  Q1 = data->p[0];
+  Q2 = data->p[1];
+  C3 = data->p[2];
+  A3 = data->p[3];
+  A4 = data->p[4];
+  KH = data->p[5];
+  VEL = data->p[6];
+  KV0 = data->p[7];
+
+  if (jok) {  /* jok = TRUE: Copy Jbd to P */
+
+    for (ly = 0; ly < MYSUB; ly++)
+      for (lx = 0; lx < MXSUB; lx++)
+        denseCopy(Jbd[lx][ly], P[lx][ly], NVARS, NVARS);
+    *jcurPtr = FALSE;
+
+  } else {    /* jok = FALSE: Generate Jbd from scratch and copy to P */
+
+    /* Make local copies of problem variables, for efficiency */
+    q4coef = data->q4;
+    dely = data->dy;
+    verdco = data->vdco;
+    hordco  = data->hdco;
+    
+    /* Compute 2x2 diagonal Jacobian blocks (using q4 values 
+       computed on the last f call).  Load into P. */
+    for (ly = 0; ly < MYSUB; ly++) {
+      jy = ly + isuby*MYSUB;
+      ydn = YMIN + (jy - RCONST(0.5))*dely;
+      yup = ydn + dely;
+      cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+      cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+      diag = -(cydn + cyup + RCONST(2.0)*hordco);
+      for (lx = 0; lx < MXSUB; lx++) {
+        jx = lx + isubx*MXSUB;
+        offset = lx*NVARS + ly*nvmxsub;
+        c1 = udata[offset];
+        c2 = udata[offset+1];
+        j = Jbd[lx][ly];
+        a = P[lx][ly];
+        IJth(j,1,1) = (-Q1*C3 - Q2*c2) + diag;
+        IJth(j,1,2) = -Q2*c1 + q4coef;
+        IJth(j,2,1) = Q1*C3 - Q2*c2;
+        IJth(j,2,2) = (-Q2*c1 - q4coef) + diag;
+        denseCopy(j, a, NVARS, NVARS);
+      }
+    }
+    
+    *jcurPtr = TRUE;
+
+  }
+
+  /* Scale by -gamma */
+  for (ly = 0; ly < MYSUB; ly++)
+    for (lx = 0; lx < MXSUB; lx++)
+      denseScale(-gamma, P[lx][ly], NVARS, NVARS);
+  
+  /* Add identity matrix and do LU decompositions on blocks in place */
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      denseAddIdentity(P[lx][ly], NVARS);
+      ier = denseGETRF(P[lx][ly], NVARS, NVARS, pivot[lx][ly]);
+      if (ier != 0) return(1);
+    }
+  }
+  
+  return(0);
+}
+
+/* 
+ * Preconditioner solve routine 
+ */
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu, 
+                  N_Vector r, N_Vector z, 
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype **(*P)[MYSUB];
+  long int *(*pivot)[MYSUB], nvmxsub;
+  int lx, ly;
+  realtype *zdata, *v;
+  UserData data;
+
+  /* Extract the P and pivot arrays from user_data */
+  data = (UserData) user_data;
+  P = data->P;
+  pivot = data->pivot;
+
+  /* Solve the block-diagonal system Px = r using LU factors stored
+     in P and pivot data in pivot, and return the solution in z.
+     First copy vector r to z. */
+  N_VScale(RCONST(1.0), r, z);
+
+  nvmxsub = data->nvmxsub;
+  zdata = N_VGetArrayPointer_Parallel(z);
+
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      v = &(zdata[lx*NVARS + ly*nvmxsub]);
+      denseGETRS(P[lx][ly], NVARS, pivot[lx][ly], v);
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Process and verify arguments to cvsfwdkryx_p.
+ */
+
+static void ProcessArgs(int argc, char *argv[], int my_pe,
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(my_pe, argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(my_pe, argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(my_pe, argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = CV_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = CV_STAGGERED;
+    else if (strcmp(argv[2],"stg1") == 0)
+      *sensi_meth = CV_STAGGERED1;
+    else 
+      WrongArgs(my_pe, argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(my_pe, argv[0]);
+  }
+
+}
+
+static void WrongArgs(int my_pe, char *name)
+{
+  if (my_pe == 0) {
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim, stg, or stg1\n");
+    printf("         err_con    = t or f\n");
+  }  
+  MPI_Finalize();
+  exit(0);
+}
+
+
+/* 
+ * Set user data. 
+ */
+
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data)
+{
+  long int isubx, isuby;
+  int  lx, ly;
+  realtype KH, VEL, KV0;
+
+  /* Set problem parameters */
+  data->p[0]  = RCONST(1.63e-16);      /* Q1  coeffs. q1, q2, c3             */
+  data->p[1]  = RCONST(4.66e-16);      /* Q2                                 */
+  data->p[2]  = RCONST(3.7e16);        /* C3                                 */
+  data->p[3]  = RCONST(22.62);         /* A3  coeff. in expression for q3(t) */
+  data->p[4]  = RCONST(7.601);         /* A4  coeff. in expression for q4(t) */
+  KH  = data->p[5]  = RCONST(4.0e-6);  /* KH  horizontal diffusivity Kh      */ 
+  VEL = data->p[6]  = RCONST(0.001);   /* VEL advection velocity V           */
+  KV0 = data->p[7]  = RCONST(1.0e-8);  /* KV0 coeff. in Kv(z)                */ 
+
+  /* Set problem constants */
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/((realtype)(MX-1));
+  data->dy = (YMAX-YMIN)/((realtype)(MY-1));
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(RCONST(2.0)*data->dx);
+  data->vdco = (RCONST(1.0)/SUNSQR(data->dy))*KV0;
+
+  /* Set machine-related constants */
+  data->comm = comm;
+  data->my_pe = my_pe;
+
+  /* isubx and isuby are the PE grid indices corresponding to my_pe */
+  isuby = my_pe/NPEX;
+  isubx = my_pe - isuby*NPEX;
+  data->isubx = isubx;
+  data->isuby = isuby;
+
+  /* Set the sizes of a boundary x-line in u and uext */
+  data->nvmxsub = NVARS*MXSUB;
+  data->nvmxsub2 = NVARS*(MXSUB+2);
+
+  /* Preconditioner-related fields */
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      (data->P)[lx][ly] = newDenseMat(NVARS, NVARS);
+      (data->Jbd)[lx][ly] = newDenseMat(NVARS, NVARS);
+      (data->pivot)[lx][ly] = newLintArray(NVARS);
+    }
+  }
+}
+
+/* 
+ * Free user data memory.
+ */
+
+static void FreeUserData(UserData data)
+{
+  int lx, ly;
+
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      destroyMat((data->P)[lx][ly]);
+      destroyMat((data->Jbd)[lx][ly]);
+      destroyArray((data->pivot)[lx][ly]);
+    }
+  }
+
+  free(data->p);
+
+  free(data);
+}
+
+/* 
+ * Set initial conditions in u.
+ */
+
+static void SetInitialProfiles(N_Vector u, UserData data)
+{
+  long int isubx, isuby, lx, ly, jx, jy, offset;
+  realtype dx, dy, x, y, cx, cy, xmid, ymid;
+  realtype *udata;
+
+  /* Set pointer to data array in vector u */
+  udata = N_VGetArrayPointer_Parallel(u);
+
+  /* Get mesh spacings, and subgrid indices for this PE */
+  dx = data->dx;         dy = data->dy;
+  isubx = data->isubx;   isuby = data->isuby;
+
+  /* Load initial profiles of c1 and c2 into local u vector.
+  Here lx and ly are local mesh point indices on the local subgrid,
+  and jx and jy are the global mesh point indices. */
+  offset = 0;
+  xmid = RCONST(0.5)*(XMIN + XMAX);
+  ymid = RCONST(0.5)*(YMIN + YMAX);
+  for (ly = 0; ly < MYSUB; ly++) {
+    jy = ly + isuby*MYSUB;
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - ymid));
+    cy = RCONST(1.0) - cy + RCONST(0.5)*SUNSQR(cy);
+    for (lx = 0; lx < MXSUB; lx++) {
+      jx = lx + isubx*MXSUB;
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - xmid));
+      cx = RCONST(1.0) - cx + RCONST(0.5)*SUNSQR(cx);
+      udata[offset  ] = C1_SCALE*cx*cy; 
+      udata[offset+1] = C2_SCALE*cx*cy;
+      offset = offset + 2;
+    }
+  }
+}
+
+/* 
+ * Routine to send boundary data to neighboring PEs.
+ */
+
+static void BSend(MPI_Comm comm, int my_pe, long int isubx, 
+                  long int isuby, long int dsizex, long int dsizey, 
+                  realtype udata[])
+{
+  int i, ly;
+  long int offsetu, offsetbuf;
+  realtype bufleft[NVARS*MYSUB], bufright[NVARS*MYSUB];
+
+  /* If isuby > 0, send data from bottom x-line of u */
+  if (isuby != 0)
+    MPI_Send(&udata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If isuby < NPEY-1, send data from top x-line of u */
+  if (isuby != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&udata[offsetu], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If isubx > 0, send data from left y-line of u (via bufleft) */
+  if (isubx != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = ly*dsizex;
+      for (i = 0; i < NVARS; i++)
+        bufleft[offsetbuf+i] = udata[offsetu+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If isubx < NPEX-1, send data from right y-line of u (via bufright) */
+  if (isubx != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = offsetbuf*MXSUB + (MXSUB-1)*NVARS;
+      for (i = 0; i < NVARS; i++)
+        bufright[offsetbuf+i] = udata[offsetu+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* 
+ * Routine to start receiving boundary data from neighboring PEs.
+ * Notes:
+ *  1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+ *     passed to both the BRecvPost and BRecvWait functions, and should not
+ *     be manipulated between the two calls.
+ *  2) request should have 4 entries, and should be passed in both calls also. 
+ */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      long int isubx, long int isuby,
+                      long int dsizex, long int dsizey,
+                      realtype uext[], realtype buffer[])
+{
+  long int offsetue;
+
+  /* Have bufleft and bufright use the same buffer */
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Irecv(&uext[NVARS], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1) {
+    offsetue = NVARS*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe-1, 0, comm, &request[2]);
+  }
+  
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe+1, 0, comm, &request[3]);
+  }
+}
+
+/* 
+ * Routine to finish receiving boundary data from neighboring PEs.
+ * Notes:
+ *  1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+ *     passed to both the BRecvPost and BRecvWait functions, and should not
+ *     be manipulated between the two calls.
+ *  2) request should have 4 entries, and should be passed in both calls also. 
+ */
+
+static void BRecvWait(MPI_Request request[], long int isubx, long int isuby,
+                      long int dsizex, realtype uext[], realtype buffer[])
+{
+  int i, ly;
+  long int dsizex2, offsetue, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2*NVARS;
+  
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+1)*dsizex2;
+      for (i = 0; i < NVARS; i++)
+        uext[offsetue+i] = bufleft[offsetbuf+i];
+    }
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+2)*dsizex2 - NVARS;
+      for (i = 0; i < NVARS; i++)
+        uext[offsetue+i] = bufright[offsetbuf+i];
+    }
+  }
+
+}
+
+/*
+ * ucomm routine.  This routine performs all communication 
+ * between processors of data needed to calculate f. 
+ */
+
+static void ucomm(realtype t, N_Vector u, UserData data)
+{
+  realtype *udata, *uext, buffer[2*NVARS*MYSUB];
+  MPI_Comm comm;
+  int my_pe;
+  long int isubx, isuby, nvmxsub, nvmysub;
+  MPI_Request request[4];
+
+  udata = N_VGetArrayPointer_Parallel(u);
+
+  /* Get comm, my_pe, subgrid indices, data sizes, extended array uext */
+  comm = data->comm;  my_pe = data->my_pe;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+  nvmysub = NVARS*MYSUB;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs */
+  BRecvPost(comm, request, my_pe, isubx, isuby, nvmxsub, nvmysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs */
+  BSend(comm, my_pe, isubx, isuby, nvmxsub, nvmysub, udata);
+
+  /* Finish receiving boundary data from neighboring PEs */
+  BRecvWait(request, isubx, isuby, nvmxsub, uext, buffer);
+}
+
+/* 
+ * fcalc routine. Compute f(t,y).  This routine assumes that communication 
+ * between processors of data needed to calculate f has already been done,
+ * and this data is in the work array uext. 
+ */
+
+static void fcalc(realtype t, realtype udata[], realtype dudata[], UserData data)
+{
+  realtype *uext;
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  int i, lx, ly, jx, jy;
+  long int isubx, isuby, nvmxsub, nvmxsub2, offsetu, offsetue;
+  realtype Q1, Q2, C3, A3, A4, KH, VEL, KV0;
+
+  /* Get subgrid indices, data sizes, extended work array uext */
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub; nvmxsub2 = data->nvmxsub2;
+  uext = data->uext;
+
+  /* Load problem coefficients and parameters */
+  Q1  = data->p[0];
+  Q2  = data->p[1];
+  C3  = data->p[2];
+  A3  = data->p[3];
+  A4  = data->p[4];
+  KH  = data->p[5];
+  VEL = data->p[6];
+  KV0 = data->p[7];
+
+  /* Copy local segment of u vector into the working extended array uext */
+  offsetu = 0;
+  offsetue = nvmxsub2 + NVARS;
+  for (ly = 0; ly < MYSUB; ly++) {
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = udata[offsetu+i];
+    offsetu = offsetu + nvmxsub;
+    offsetue = offsetue + nvmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+  a boundary PE, copy data from the first interior mesh line of u to uext */
+
+  /* If isuby = 0, copy x-line 2 of u to uext */
+  if (isuby == 0) {
+    for (i = 0; i < nvmxsub; i++) uext[NVARS+i] = udata[nvmxsub+i];
+  }
+
+  /* If isuby = NPEY-1, copy x-line MYSUB-1 of u to uext */
+  if (isuby == NPEY-1) {
+    offsetu = (MYSUB-2)*nvmxsub;
+    offsetue = (MYSUB+1)*nvmxsub2 + NVARS;
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = udata[offsetu+i];
+  }
+
+  /* If isubx = 0, copy y-line 2 of u to uext */
+  if (isubx == 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*nvmxsub + NVARS;
+      offsetue = (ly+1)*nvmxsub2;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = udata[offsetu+i];
+    }
+  }
+
+  /* If isubx = NPEX-1, copy y-line MXSUB-1 of u to uext */
+  if (isubx == NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = (ly+1)*nvmxsub - 2*NVARS;
+      offsetue = (ly+2)*nvmxsub2 - NVARS;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = udata[offsetu+i];
+    }
+  }
+
+  /* Make local copies of problem variables, for efficiency */
+  dely   = data->dy;
+  verdco = data->vdco;
+  hordco = data->hdco;
+  horaco = data->haco;
+
+  /* Set diurnal rate coefficients as functions of t, and save q4 in 
+  data block for use by preconditioner evaluation routine */
+  s = sin((data->om)*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    q4coef = SUNRexp(-A4/s);
+  } else {
+    q3 = ZERO;
+    q4coef = ZERO;
+  }
+  data->q4 = q4coef;
+
+  /* Loop over all grid points in local subgrid */
+  for (ly = 0; ly < MYSUB; ly++) {
+    jy = ly + isuby*MYSUB;
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+    ydn = YMIN + (jy - .5)*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    for (lx = 0; lx < MXSUB; lx++) {
+      jx = lx + isubx*MXSUB;
+
+      /* Extract c1 and c2, and set kinetic rate terms */
+      offsetue = (lx+1)*NVARS + (ly+1)*nvmxsub2;
+      c1 = uext[offsetue];
+      c2 = uext[offsetue+1];
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + RCONST(2.0)*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms */
+      c1dn = uext[offsetue-nvmxsub2];
+      c2dn = uext[offsetue-nvmxsub2+1];
+      c1up = uext[offsetue+nvmxsub2];
+      c2up = uext[offsetue+nvmxsub2+1];
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms */
+      c1lt = uext[offsetue-2];
+      c2lt = uext[offsetue-1];
+      c1rt = uext[offsetue+2];
+      c2rt = uext[offsetue+3];
+      hord1 = hordco*(c1rt - 2.0*c1 + c1lt);
+      hord2 = hordco*(c2rt - 2.0*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into dudata */
+      offsetu = lx*NVARS + ly*nvmxsub;
+      dudata[offsetu]   = vertd1 + hord1 + horad1 + rkin1; 
+      dudata[offsetu+1] = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+}
+
+/* 
+ * Print current t, step count, order, stepsize, and sampled c1,c2 values.
+ */
+
+static void PrintOutput(void *cvode_mem, int my_pe, MPI_Comm comm,
+                        realtype t, N_Vector u)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata, tempu[2];
+  long int npelast, i0, i1;
+  MPI_Status status;
+
+  npelast = NPEX*NPEY - 1;
+  udata = N_VGetArrayPointer_Parallel(u);
+
+  /* Send c at top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NVARS*MXSUB*MYSUB - 2;
+    i1 = i0 + 1;
+    if (npelast != 0)
+      MPI_Send(&udata[i0], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else {
+      tempu[0] = udata[i0];
+      tempu[1] = udata[i1];
+    }
+  }
+
+  /* On PE 0, receive c at top right, then print performance data
+     and sampled solution values */ 
+  if (my_pe == 0) {
+
+    if (npelast != 0)
+      MPI_Recv(&tempu[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1, my_pe);
+    flag = CVodeGetLastOrder(cvode_mem, &qu);
+    check_flag(&flag, "CVodeGetLastOrder", 1, my_pe);
+    flag = CVodeGetLastStep(cvode_mem, &hu);
+    check_flag(&flag, "CVodeGetLastStep", 1, my_pe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%8.3Le %2d  %8.3Le %5ld\n", t,qu,hu,nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%8.3e %2d  %8.3e %5ld\n", t,qu,hu,nst);
+#else
+    printf("%8.3e %2d  %8.3e %5ld\n", t,qu,hu,nst);
+#endif
+
+    printf("                                Solution       ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%12.4Le %12.4Le \n", udata[0], tempu[0]); 
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%12.4e %12.4e \n", udata[0], tempu[0]); 
+#else
+    printf("%12.4e %12.4e \n", udata[0], tempu[0]); 
+#endif
+
+    printf("                                               ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%12.4Le %12.4Le \n", udata[1], tempu[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%12.4e %12.4e \n", udata[1], tempu[1]);
+#else
+    printf("%12.4e %12.4e \n", udata[1], tempu[1]);
+#endif
+
+  }
+
+}
+
+/*
+ * Print sampled sensitivity values.
+ */
+
+static void PrintOutputS(int my_pe, MPI_Comm comm, N_Vector *uS)
+{
+  realtype *sdata, temps[2];
+  long int npelast, i0, i1;
+  MPI_Status status;
+
+  npelast = NPEX*NPEY - 1;
+
+  sdata = N_VGetArrayPointer_Parallel(uS[0]);
+
+  /* Send s1 at top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NVARS*MXSUB*MYSUB - 2;
+    i1 = i0 + 1;
+    if (npelast != 0)
+      MPI_Send(&sdata[i0], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else {
+      temps[0] = sdata[i0];
+      temps[1] = sdata[i1];
+    }
+  }
+
+  /* On PE 0, receive s1 at top right, then print sampled sensitivity values */ 
+  if (my_pe == 0) {
+    if (npelast != 0)
+      MPI_Recv(&temps[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    printf("                                ----------------------------------------\n");
+    printf("                                Sensitivity 1  ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%12.4Le %12.4Le \n", sdata[0], temps[0]); 
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%12.4e %12.4e \n", sdata[0], temps[0]); 
+#else
+    printf("%12.4e %12.4e \n", sdata[0], temps[0]); 
+#endif
+    printf("                                               ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%12.4Le %12.4Le \n", sdata[1], temps[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%12.4e %12.4e \n", sdata[1], temps[1]);
+#else
+    printf("%12.4e %12.4e \n", sdata[1], temps[1]);
+#endif
+  }
+
+  sdata = N_VGetArrayPointer_Parallel(uS[1]);
+
+  /* Send s2 at top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NVARS*MXSUB*MYSUB - 2;
+    i1 = i0 + 1;
+    if (npelast != 0)
+      MPI_Send(&sdata[i0], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else {
+      temps[0] = sdata[i0];
+      temps[1] = sdata[i1];
+    }
+  }
+
+  /* On PE 0, receive s2 at top right, then print sampled sensitivity values */ 
+  if (my_pe == 0) {
+    if (npelast != 0)
+      MPI_Recv(&temps[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    printf("                                ----------------------------------------\n");
+    printf("                                Sensitivity 2  ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%12.4Le %12.4Le \n", sdata[0], temps[0]); 
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%12.4e %12.4e \n", sdata[0], temps[0]); 
+#else
+    printf("%12.4e %12.4e \n", sdata[0], temps[0]); 
+#endif
+    printf("                                               ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%12.4Le %12.4Le \n", sdata[1], temps[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%12.4e %12.4e \n", sdata[1], temps[1]);
+#else
+    printf("%12.4e %12.4e \n", sdata[1], temps[1]);
+#endif
+  }
+}
+
+/* 
+ * Print final statistics from the CVODES memory.
+ */
+
+static void PrintFinalStats(void *cvode_mem, booleantype sensi) 
+{
+  long int nst;
+  long int nfe, nsetups, nni, ncfn, netf;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, 0);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1, 0);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1, 0);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1, 0);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1, 0);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1, 0);
+
+  if (sensi) {
+    flag = CVodeGetSensNumRhsEvals(cvode_mem, &nfSe);
+    check_flag(&flag, "CVodeGetSensNumRhsEvals", 1, 0);
+    flag = CVodeGetNumRhsEvalsSens(cvode_mem, &nfeS);
+    check_flag(&flag, "CVodeGetNumRhsEvalsSens", 1, 0);
+    flag = CVodeGetSensNumLinSolvSetups(cvode_mem, &nsetupsS);
+    check_flag(&flag, "CVodeGetSensNumLinSolvSetups", 1, 0);
+    flag = CVodeGetSensNumErrTestFails(cvode_mem, &netfS);
+    check_flag(&flag, "CVodeGetSensNumErrTestFails", 1, 0);
+    flag = CVodeGetSensNumNonlinSolvIters(cvode_mem, &nniS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvIters", 1, 0);
+    flag = CVodeGetSensNumNonlinSolvConvFails(cvode_mem, &ncfnS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvConvFails", 1, 0);
+  }
+
+  printf("\nFinal Statistics\n\n");
+  printf("nst     = %5ld\n\n", nst);
+  printf("nfe     = %5ld\n",   nfe);
+  printf("netf    = %5ld    nsetups  = %5ld\n", netf, nsetups);
+  printf("nni     = %5ld    ncfn     = %5ld\n", nni, ncfn);
+
+  if(sensi) {
+    printf("\n");
+    printf("nfSe    = %5ld    nfeS     = %5ld\n", nfSe, nfeS);
+    printf("netfs   = %5ld    nsetupsS = %5ld\n", netfS, nsetupsS);
+    printf("nniS    = %5ld    ncfnS    = %5ld\n", nniS, ncfnS);
+  }
+
+}
+
+/* 
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+	      id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/parallel/cvsDiurnal_FSA_kry_p.out b/examples/cvodes/parallel/cvsDiurnal_FSA_kry_p.out
new file mode 100644
index 0000000..6febb99
--- /dev/null
+++ b/examples/cvodes/parallel/cvsDiurnal_FSA_kry_p.out
@@ -0,0 +1,139 @@
+
+2-species diurnal advection-diffusion problem
+Sensitivity: YES ( SIMULTANEOUS + FULL ERROR CONTROL )
+
+========================================================================
+     T     Q       H      NST                    Bottom left  Top right 
+========================================================================
+7.200e+03  3  3.544e+01   415
+                                Solution         1.0468e+04   1.1185e+04 
+                                                 2.5267e+11   2.6998e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -6.4201e+19  -6.8598e+19 
+                                                 7.1177e+19   7.6556e+19 
+                                ----------------------------------------
+                                Sensitivity 2   -4.3853e+14  -5.0065e+14 
+                                                -2.4407e+18  -2.7842e+18 
+------------------------------------------------------------------------
+1.440e+04  3  4.903e+01   640
+                                Solution         6.6590e+06   7.3008e+06 
+                                                 2.5819e+11   2.8329e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -4.0848e+22  -4.4785e+22 
+                                                 5.9550e+22   6.7173e+22 
+                                ----------------------------------------
+                                Sensitivity 2   -4.5235e+17  -5.4318e+17 
+                                                -6.5419e+21  -7.8316e+21 
+------------------------------------------------------------------------
+2.160e+04  2  2.948e+01  1198
+                                Solution         2.6650e+07   2.9308e+07 
+                                                 2.9928e+11   3.3134e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -1.6346e+23  -1.7976e+23 
+                                                 3.8203e+23   4.4991e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -7.6601e+18  -9.4433e+18 
+                                                -7.6459e+22  -9.4502e+22 
+------------------------------------------------------------------------
+2.880e+04  3  4.499e+01  1542
+                                Solution         8.7021e+06   9.6501e+06 
+                                                 3.3804e+11   3.7510e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -5.3375e+22  -5.9188e+22 
+                                                 5.4487e+23   6.7430e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -4.8855e+18  -6.1040e+18 
+                                                -1.7194e+23  -2.1518e+23 
+------------------------------------------------------------------------
+3.600e+04  3  1.107e+01  1675
+                                Solution         1.4040e+04   1.5609e+04 
+                                                 3.3868e+11   3.7652e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -8.6141e+19  -9.5761e+19 
+                                                 5.2718e+23   6.6030e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -8.4328e+15  -1.0549e+16 
+                                                -1.8439e+23  -2.3096e+23 
+------------------------------------------------------------------------
+4.320e+04  4  8.016e+01  3146
+                                Solution        -2.5802e-07  -2.3679e-07 
+                                                 3.3823e+11   3.8035e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -3.4238e+08  -3.8876e+08 
+                                                 5.2753e+23   6.7448e+23 
+                                ----------------------------------------
+                                Sensitivity 2    5.4404e+03   6.6262e+03 
+                                                -1.8454e+23  -2.3595e+23 
+------------------------------------------------------------------------
+5.040e+04  4  2.431e+02  3194
+                                Solution         8.0708e-08   7.0502e-08 
+                                                 3.3582e+11   3.8645e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -4.5550e+10  -3.9697e+10 
+                                                 5.2067e+23   6.9664e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -5.5727e+08  -5.5845e+08 
+                                                -1.8214e+23  -2.4371e+23 
+------------------------------------------------------------------------
+5.760e+04  4  2.523e+02  3216
+                                Solution        -1.8957e-11  -1.6762e-11 
+                                                 3.3203e+11   3.9090e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -1.5940e+06  -1.4035e+06 
+                                                 5.0825e+23   7.1205e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -2.2867e+02  -2.2722e+02 
+                                                -1.7780e+23  -2.4910e+23 
+------------------------------------------------------------------------
+6.480e+04  4  2.820e+02  3254
+                                Solution        -7.8717e-10  -6.7017e-10 
+                                                 3.3130e+11   3.9634e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -3.4373e+07  -2.1671e+07 
+                                                 5.0442e+23   7.3274e+23 
+                                ----------------------------------------
+                                Sensitivity 2    1.3198e+08   1.3575e+08 
+                                                -1.7646e+23  -2.5633e+23 
+------------------------------------------------------------------------
+7.200e+04  4  3.810e+02  3276
+                                Solution        -4.4006e-09  -3.7463e-09 
+                                                 3.3297e+11   4.0389e+11 
+                                ----------------------------------------
+                                Sensitivity 1    4.5106e+09   3.8200e+09 
+                                                 5.0783e+23   7.6382e+23 
+                                ----------------------------------------
+                                Sensitivity 2    2.0264e+05   2.0791e+05 
+                                                -1.7765e+23  -2.6721e+23 
+------------------------------------------------------------------------
+7.920e+04  5  6.406e+02  3291
+                                Solution        -1.8328e-11  -1.5666e-11 
+                                                 3.3344e+11   4.1203e+11 
+                                ----------------------------------------
+                                Sensitivity 1    1.3650e+07   1.1729e+07 
+                                                 5.0730e+23   7.9960e+23 
+                                ----------------------------------------
+                                Sensitivity 2    6.1764e+01   6.8476e+01 
+                                                -1.7747e+23  -2.7972e+23 
+------------------------------------------------------------------------
+8.640e+04  5  6.406e+02  3302
+                                Solution        -2.0206e-13  -1.7557e-13 
+                                                 3.3518e+11   4.1625e+11 
+                                ----------------------------------------
+                                Sensitivity 1    1.1323e+06   9.7319e+05 
+                                                 5.1171e+23   8.2142e+23 
+                                ----------------------------------------
+                                Sensitivity 2    7.6632e+00   8.2818e+00 
+                                                -1.7901e+23  -2.8736e+23 
+------------------------------------------------------------------------
+
+Final Statistics
+
+nst     =  3302
+
+nfe     =  4387
+netf    =   165    nsetups  =   508
+nni     =  4383    ncfn     =     7
+
+nfSe    =  8774    nfeS     = 17548
+netfs   =     0    nsetupsS =     0
+nniS    =     0    ncfnS    =     0
diff --git a/examples/cvodes/parallel/cvsDiurnal_kry_bbd_p.c b/examples/cvodes/parallel/cvsDiurnal_kry_bbd_p.c
new file mode 100644
index 0000000..c167b8c
--- /dev/null
+++ b/examples/cvodes/parallel/cvsDiurnal_kry_bbd_p.c
@@ -0,0 +1,891 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): S. D. Cohen, A. C. Hindmarsh, M. R. Wittman, and
+ *                Radu Serban  @ LLNL
+ * --------------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * mesh, with simple polynomial initial profiles.
+ *
+ * The problem is solved by CVODES on NPE processors, treated
+ * as a rectangular process grid of size NPEX by NPEY, with
+ * NPE = NPEX*NPEY. Each processor contains a subgrid of size MXSUB
+ * by MYSUB of the (x,y) mesh. Thus the actual mesh sizes are
+ * MX = MXSUB*NPEX and MY = MYSUB*NPEY, and the ODE system size is
+ * neq = 2*MX*MY.
+ *
+ * The solution is done with the BDF/GMRES method (i.e. using the
+ * CVSPGMR linear solver) and a block-diagonal matrix with banded
+ * blocks as a preconditioner, using the CVBBDPRE module.
+ * Each block is generated using difference quotients, with
+ * half-bandwidths mudq = mldq = 2*MXSUB, but the retained banded
+ * blocks have half-bandwidths mukeep = mlkeep = 2.
+ * A copy of the approximate Jacobian is saved and conditionally
+ * reused within the preconditioner routine.
+ *
+ * The problem is solved twice -- with left and right preconditioning.
+ *
+ * Performance data and sampled solution values are printed at
+ * selected output times, and all performance counters are printed
+ * on completion.
+ *
+ * This version uses MPI for user routines.
+ * Execute with number of processors = NPEX*NPEY (see constants below).
+ * --------------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>            /* prototypes for CVODE fcts. */
+#include <cvodes/cvodes_spgmr.h>      /* prototypes and constants for CVSPGMR solver */
+#include <cvodes/cvodes_bbdpre.h>     /* prototypes for CVBBDPRE module */
+#include <nvector/nvector_parallel.h> /* definition N_Vector and macro NV_DATA_P */
+#include <sundials/sundials_types.h>  /* definitions of realtype, booleantype */
+#include <sundials/sundials_math.h>   /* definition of macros SUNSQR and EXP */
+
+#include <mpi.h>                      /* MPI constants and types */
+
+
+/* Problem Constants */
+
+#define ZERO         RCONST(0.0)
+
+#define NVARS        2                 /* number of species         */
+#define KH           RCONST(4.0e-6)    /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)     /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)    /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)  /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           ZERO                /* initial time */
+#define NOUT         12                  /* number of output times */
+#define TWOHR        RCONST(7200.0)      /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)      /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898) /* pi */ 
+
+#define XMIN         ZERO                /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)
+#define YMIN         RCONST(30.0)        /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+
+#define NPEX         2              /* no. PEs in x direction of PE array */
+#define NPEY         2              /* no. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* no. x points per subgrid */
+#define MYSUB        5              /* no. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+/* CVodeInit Constants */
+
+#define RTOL    RCONST(1.0e-5)    /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)     /* value of C1 or C2 at which tolerances */
+                                  /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)      /* scalar absolute tolerance */
+
+/* Type : UserData 
+   contains problem constants, extended dependent variable array,
+   grid constants, processor indices, MPI communicator */
+
+typedef struct {
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+  realtype uext[NVARS*(MXSUB+2)*(MYSUB+2)];
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmxsub2, Nlocal;
+  MPI_Comm comm;
+} *UserData;
+
+/* Prototypes of private helper functions */
+
+static void InitUserData(int my_pe, long int local_N, MPI_Comm comm,
+                         UserData data);
+static void SetInitialProfiles(N_Vector u, UserData data);
+static void PrintIntro(int npes, long int mudq, long int mldq,
+		       long int mukeep, long int mlkeep);
+static void PrintOutput(void *cvode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t);
+static void PrintFinalStats(void *cvode_mem);
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype uarray[]);
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[]);
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[]);
+
+static void fucomm(realtype t, N_Vector u, void *user_data);
+
+/* Prototype of function called by the solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/* Prototype of functions called by the CVBBDPRE module */
+
+static int flocal(long int Nlocal, realtype t, N_Vector u,
+                  N_Vector udot, void *user_data);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/***************************** Main Program ******************************/
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+  void *cvode_mem;
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  int iout, my_pe, npes, flag, jpre;
+  long int neq, local_N, mudq, mldq, mukeep, mlkeep;
+  MPI_Comm comm;
+
+  data = NULL;
+  cvode_mem = NULL;
+  u = NULL;
+
+  /* Set problem size neq */
+  neq = NVARS*MX*MY;
+
+  /* Get processor number and total number of pe's */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  if (npes != NPEX*NPEY) {
+    if (my_pe == 0)
+      fprintf(stderr, "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n\n",
+              npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+
+  /* Set local length */
+  local_N = NVARS*MXSUB*MYSUB;
+
+  /* Allocate and load user data block */
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  InitUserData(my_pe, local_N, comm, data);
+
+  /* Allocate and initialize u, and set tolerances */ 
+  u = N_VNew_Parallel(comm, local_N, neq);
+  if(check_flag((void *)u, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  SetInitialProfiles(u, data);
+  abstol = ATOL;
+  reltol = RTOL;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1, my_pe)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1, my_pe)) return(1);
+
+  /* Call CVSpgmr to specify the linear solver CVSPGMR with left
+     preconditioning and the default maximum Krylov dimension maxl  */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVBBDSpgmr", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Initialize BBD preconditioner */
+  mudq = mldq = NVARS*MXSUB;
+  mukeep = mlkeep = NVARS;
+  flag = CVBBDPrecInit(cvode_mem, local_N, mudq, mldq, 
+                       mukeep, mlkeep, ZERO, flocal, NULL);
+  if(check_flag(&flag, "CVBBDPrecAlloc", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Print heading */
+  if (my_pe == 0) PrintIntro(npes, mudq, mldq, mukeep, mlkeep);
+
+  /* Loop over jpre (= PREC_LEFT, PREC_RIGHT), and solve the problem */
+  for (jpre = PREC_LEFT; jpre <= PREC_RIGHT; jpre++) {
+
+  /* On second run, re-initialize u, the integrator, CVBBDPRE, and CVSPGMR */
+
+  if (jpre == PREC_RIGHT) {
+
+    SetInitialProfiles(u, data);
+
+    flag = CVodeReInit(cvode_mem, T0, u);
+    if(check_flag(&flag, "CVodeReInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVBBDPrecReInit(cvode_mem, mudq, mldq, ZERO);
+    if(check_flag(&flag, "CVBBDPrecReInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+    flag = CVSpilsSetPrecType(cvode_mem, PREC_RIGHT);
+    check_flag(&flag, "CVSpilsSetPrecType", 1, my_pe);
+
+    if (my_pe == 0) {
+      printf("\n\n-------------------------------------------------------");
+      printf("------------\n");
+    }
+
+  }
+
+
+  if (my_pe == 0) {
+    printf("\n\nPreconditioner type is:  jpre = %s\n\n",
+	   (jpre == PREC_LEFT) ? "PREC_LEFT" : "PREC_RIGHT");
+  }
+
+  /* In loop over output points, call CVode, print results, test for error */
+
+  for (iout = 1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1, my_pe)) break;
+    PrintOutput(cvode_mem, my_pe, comm, u, t);
+  }
+
+  /* Print final statistics */
+
+  if (my_pe == 0) PrintFinalStats(cvode_mem);
+
+  } /* End of jpre loop */
+
+  /* Free memory */
+  N_VDestroy_Parallel(u);
+  free(data);
+  CVodeFree(&cvode_mem);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*********************** Private Helper Functions ************************/
+
+/* Load constants in data */
+
+static void InitUserData(int my_pe, long int local_N, MPI_Comm comm,
+                         UserData data)
+{
+  int isubx, isuby;
+
+  /* Set problem constants */
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/((realtype)(MX-1));
+  data->dy = (YMAX-YMIN)/((realtype)(MY-1));
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(RCONST(2.0)*data->dx);
+  data->vdco = (RCONST(1.0)/SUNSQR(data->dy))*KV0;
+
+  /* Set machine-related constants */
+  data->comm = comm;
+  data->my_pe = my_pe;
+  data->Nlocal = local_N;
+  /* isubx and isuby are the PE grid indices corresponding to my_pe */
+  isuby = my_pe/NPEX;
+  isubx = my_pe - isuby*NPEX;
+  data->isubx = isubx;
+  data->isuby = isuby;
+  /* Set the sizes of a boundary x-line in u and uext */
+  data->nvmxsub = NVARS*MXSUB;
+  data->nvmxsub2 = NVARS*(MXSUB+2);
+}
+
+/* Set initial conditions in u */
+
+static void SetInitialProfiles(N_Vector u, UserData data)
+{
+  int isubx, isuby;
+  int lx, ly, jx, jy;
+  long int offset;
+  realtype dx, dy, x, y, cx, cy, xmid, ymid;
+  realtype *uarray;
+
+  /* Set pointer to data array in vector u */
+
+  uarray = N_VGetArrayPointer_Parallel(u);
+
+  /* Get mesh spacings, and subgrid indices for this PE */
+
+  dx = data->dx;         dy = data->dy;
+  isubx = data->isubx;   isuby = data->isuby;
+
+  /* Load initial profiles of c1 and c2 into local u vector.
+  Here lx and ly are local mesh point indices on the local subgrid,
+  and jx and jy are the global mesh point indices. */
+
+  offset = 0;
+  xmid = RCONST(0.5)*(XMIN + XMAX);
+  ymid = RCONST(0.5)*(YMIN + YMAX);
+  for (ly = 0; ly < MYSUB; ly++) {
+    jy = ly + isuby*MYSUB;
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - ymid));
+    cy = RCONST(1.0) - cy + RCONST(0.5)*SUNSQR(cy);
+    for (lx = 0; lx < MXSUB; lx++) {
+      jx = lx + isubx*MXSUB;
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - xmid));
+      cx = RCONST(1.0) - cx + RCONST(0.5)*SUNSQR(cx);
+      uarray[offset  ] = C1_SCALE*cx*cy; 
+      uarray[offset+1] = C2_SCALE*cx*cy;
+      offset = offset + 2;
+    }
+  }
+}
+
+/* Print problem introduction */
+
+static void PrintIntro(int npes, long int mudq, long int mldq,
+		       long int mukeep, long int mlkeep)
+{
+  printf("\n2-species diurnal advection-diffusion problem\n");
+  printf("  %d by %d mesh on %d processors\n", MX, MY, npes);
+  printf("  Using CVBBDPRE preconditioner module\n");
+  printf("    Difference-quotient half-bandwidths are");
+  printf(" mudq = %ld,  mldq = %ld\n", mudq, mldq);
+  printf("    Retained band block half-bandwidths are");
+  printf(" mukeep = %ld,  mlkeep = %ld", mukeep, mlkeep);
+
+  return;
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+
+static void PrintOutput(void *cvode_mem, int my_pe, MPI_Comm comm, 
+                        N_Vector u, realtype t)
+{
+  int qu, flag, npelast;
+  long int i0, i1, nst;
+  realtype hu, *uarray, tempu[2];
+  MPI_Status status;
+
+  npelast = NPEX*NPEY - 1;
+  uarray = N_VGetArrayPointer_Parallel(u);
+
+  /* Send c1,c2 at top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NVARS*MXSUB*MYSUB - 2;
+    i1 = i0 + 1;
+    if (npelast != 0)
+      MPI_Send(&uarray[i0], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else {
+      tempu[0] = uarray[i0];
+      tempu[1] = uarray[i1];
+    }
+  }
+
+  /* On PE 0, receive c1,c2 at top right, then print performance data
+     and sampled solution values */ 
+  if (my_pe == 0) {
+    if (npelast != 0)
+      MPI_Recv(&tempu[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1, my_pe);
+    flag = CVodeGetLastOrder(cvode_mem, &qu);
+    check_flag(&flag, "CVodeGetLastOrder", 1, my_pe);
+    flag = CVodeGetLastStep(cvode_mem, &hu);
+    check_flag(&flag, "CVodeGetLastStep", 1, my_pe);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("t = %.2Le   no. steps = %ld   order = %d   stepsize = %.2Le\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3Le %12.3Le \n", uarray[0], uarray[1]);
+    printf("At top right:    c1, c2 = %12.3Le %12.3Le \n\n", tempu[0], tempu[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", uarray[0], uarray[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#else
+    printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", uarray[0], uarray[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#endif
+  }
+}
+
+/* Print final statistics contained in iopt */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int lenrwBBDP, leniwBBDP, ngevalsBBDP;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1, 0);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, 0);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1, 0);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1, 0);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1, 0);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1, 0);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1, 0);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1, 0);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1, 0);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1, 0);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1, 0);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1, 0);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwls = %5ld     leniwls = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld\n"                  , nst);
+  printf("nfe     = %5ld     nfels   = %5ld\n"  , nfe, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n"  , nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n"  , nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n"  , npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl);
+
+  flag = CVBBDPrecGetWorkSpace(cvode_mem, &lenrwBBDP, &leniwBBDP);
+  check_flag(&flag, "CVBBDPrecGetWorkSpace", 1, 0);
+  flag = CVBBDPrecGetNumGfnEvals(cvode_mem, &ngevalsBBDP);
+  check_flag(&flag, "CVBBDPrecGetNumGfnEvals", 1, 0);
+  printf("In CVBBDPRE: real/integer local work space sizes = %ld, %ld\n",
+	 lenrwBBDP, leniwBBDP);  
+  printf("             no. flocal evals. = %ld\n",ngevalsBBDP);
+}
+ 
+/* Routine to send boundary data to neighboring PEs */
+
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype uarray[])
+{
+  int i, ly;
+  long int offsetu, offsetbuf;
+  realtype bufleft[NVARS*MYSUB], bufright[NVARS*MYSUB];
+
+  /* If isuby > 0, send data from bottom x-line of u */
+
+  if (isuby != 0)
+    MPI_Send(&uarray[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If isuby < NPEY-1, send data from top x-line of u */
+
+  if (isuby != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&uarray[offsetu], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If isubx > 0, send data from left y-line of u (via bufleft) */
+
+  if (isubx != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = ly*dsizex;
+      for (i = 0; i < NVARS; i++)
+        bufleft[offsetbuf+i] = uarray[offsetu+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If isubx < NPEX-1, send data from right y-line of u (via bufright) */
+
+  if (isubx != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = offsetbuf*MXSUB + (MXSUB-1)*NVARS;
+      for (i = 0; i < NVARS; i++)
+        bufright[offsetbuf+i] = uarray[offsetu+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+
+}
+ 
+/* Routine to start receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[])
+{
+  long int offsetue;
+  /* Have bufleft and bufright use the same buffer */
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Irecv(&uext[NVARS], dsizex, PVEC_REAL_MPI_TYPE,
+    					 my_pe-NPEX, 0, comm, &request[0]);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1) {
+    offsetue = NVARS*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+                                         my_pe+NPEX, 0, comm, &request[1]);
+  }
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe-1, 0, comm, &request[2]);
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe+1, 0, comm, &request[3]);
+  }
+
+}
+
+/* Routine to finish receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[])
+{
+  int i, ly;
+  long int dsizex2, offsetue, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+  MPI_Status status;
+
+  dsizex2 = dsizex + 2*NVARS;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Wait(&request[0],&status);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+1)*dsizex2;
+      for (i = 0; i < NVARS; i++)
+        uext[offsetue+i] = bufleft[offsetbuf+i];
+    }
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+2)*dsizex2 - NVARS;
+      for (i = 0; i < NVARS; i++)
+	uext[offsetue+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/* fucomm routine.  This routine performs all inter-processor
+   communication of data in u needed to calculate f.         */
+
+static void fucomm(realtype t, N_Vector u, void *user_data)
+{
+  UserData data;
+  realtype *uarray, *uext, buffer[2*NVARS*MYSUB];
+  MPI_Comm comm;
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmysub;
+  MPI_Request request[4];
+
+  data = (UserData) user_data;
+  uarray = N_VGetArrayPointer_Parallel(u);
+
+  /* Get comm, my_pe, subgrid indices, data sizes, extended array uext */
+
+  comm = data->comm;  my_pe = data->my_pe;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+  nvmysub = NVARS*MYSUB;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs */
+
+  BRecvPost(comm, request, my_pe, isubx, isuby, nvmxsub, nvmysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs */
+
+  BSend(comm, my_pe, isubx, isuby, nvmxsub, nvmysub, uarray);
+
+  /* Finish receiving boundary data from neighboring PEs */
+
+  BRecvWait(request, isubx, isuby, nvmxsub, uext, buffer);
+}
+
+/***************** Function called by the solver **************************/
+
+/* f routine.  Evaluate f(t,y).  First call fucomm to do communication of 
+   subgrid boundary data into uext.  Then calculate f by a call to flocal. */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  UserData data;
+
+  data = (UserData) user_data;
+
+  /* Call fucomm to do inter-processor communication */
+
+  fucomm (t, u, user_data);
+
+  /* Call flocal to calculate all right-hand sides */
+
+  flocal (data->Nlocal, t, u, udot, user_data);
+
+  return(0);
+}
+
+/***************** Functions called by the CVBBDPRE module ****************/
+
+/* flocal routine.  Compute f(t,y).  This routine assumes that all
+   inter-processor communication of data needed to calculate f has already
+   been done, and this data is in the work array uext.                    */
+
+static int flocal(long int Nlocal, realtype t, N_Vector u,
+                  N_Vector udot, void *user_data)
+{
+  realtype *uext;
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  int i, lx, ly, jx, jy;
+  int isubx, isuby;
+  long int nvmxsub, nvmxsub2, offsetu, offsetue;
+  UserData data;
+  realtype *uarray, *duarray;
+
+  uarray = N_VGetArrayPointer_Parallel(u);
+  duarray = N_VGetArrayPointer_Parallel(udot);
+
+  /* Get subgrid indices, array sizes, extended work array uext */
+
+  data = (UserData) user_data;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub; nvmxsub2 = data->nvmxsub2;
+  uext = data->uext;
+
+  /* Copy local segment of u vector into the working extended array uext */
+
+  offsetu = 0;
+  offsetue = nvmxsub2 + NVARS;
+  for (ly = 0; ly < MYSUB; ly++) {
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = uarray[offsetu+i];
+    offsetu = offsetu + nvmxsub;
+    offsetue = offsetue + nvmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+  a boundary PE, copy data from the first interior mesh line of u to uext */
+
+  /* If isuby = 0, copy x-line 2 of u to uext */
+  if (isuby == 0) {
+    for (i = 0; i < nvmxsub; i++) uext[NVARS+i] = uarray[nvmxsub+i];
+  }
+
+  /* If isuby = NPEY-1, copy x-line MYSUB-1 of u to uext */
+  if (isuby == NPEY-1) {
+    offsetu = (MYSUB-2)*nvmxsub;
+    offsetue = (MYSUB+1)*nvmxsub2 + NVARS;
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = uarray[offsetu+i];
+  }
+
+  /* If isubx = 0, copy y-line 2 of u to uext */
+  if (isubx == 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*nvmxsub + NVARS;
+      offsetue = (ly+1)*nvmxsub2;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = uarray[offsetu+i];
+    }
+  }
+
+  /* If isubx = NPEX-1, copy y-line MXSUB-1 of u to uext */
+  if (isubx == NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = (ly+1)*nvmxsub - 2*NVARS;
+      offsetue = (ly+2)*nvmxsub2 - NVARS;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = uarray[offsetu+i];
+    }
+  }
+
+  /* Make local copies of problem variables, for efficiency */
+
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco = data->hdco;
+  horaco = data->haco;
+
+  /* Set diurnal rate coefficients as functions of t, and save q4 in 
+  data block for use by preconditioner evaluation routine            */
+
+  s = sin((data->om)*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    q4coef = SUNRexp(-A4/s);
+  } else {
+    q3 = ZERO;
+    q4coef = ZERO;
+  }
+  data->q4 = q4coef;
+
+
+  /* Loop over all grid points in local subgrid */
+
+  for (ly = 0; ly < MYSUB; ly++) {
+
+    jy = ly + isuby*MYSUB;
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    for (lx = 0; lx < MXSUB; lx++) {
+
+      jx = lx + isubx*MXSUB;
+
+      /* Extract c1 and c2, and set kinetic rate terms */
+
+      offsetue = (lx+1)*NVARS + (ly+1)*nvmxsub2;
+      c1 = uext[offsetue];
+      c2 = uext[offsetue+1];
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + 2.0*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms */
+
+      c1dn = uext[offsetue-nvmxsub2];
+      c2dn = uext[offsetue-nvmxsub2+1];
+      c1up = uext[offsetue+nvmxsub2];
+      c2up = uext[offsetue+nvmxsub2+1];
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms */
+
+      c1lt = uext[offsetue-2];
+      c2lt = uext[offsetue-1];
+      c1rt = uext[offsetue+2];
+      c2rt = uext[offsetue+3];
+      hord1 = hordco*(c1rt - RCONST(2.0)*c1 + c1lt);
+      hord2 = hordco*(c2rt - RCONST(2.0)*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into duarray */
+
+      offsetu = lx*NVARS + ly*nvmxsub;
+      duarray[offsetu]   = vertd1 + hord1 + horad1 + rkin1; 
+      duarray[offsetu+1] = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+  return(0);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+              id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+            id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/parallel/cvsDiurnal_kry_bbd_p.out b/examples/cvodes/parallel/cvsDiurnal_kry_bbd_p.out
new file mode 100644
index 0000000..9388508
--- /dev/null
+++ b/examples/cvodes/parallel/cvsDiurnal_kry_bbd_p.out
@@ -0,0 +1,140 @@
+
+2-species diurnal advection-diffusion problem
+  10 by 10 mesh on 4 processors
+  Using CVBBDPRE preconditioner module
+    Difference-quotient half-bandwidths are mudq = 10,  mldq = 10
+    Retained band block half-bandwidths are mukeep = 2,  mlkeep = 2
+
+Preconditioner type is:  jpre = PREC_LEFT
+
+t = 7.20e+03   no. steps = 190   order = 5   stepsize = 1.61e+02
+At bottom left:  c1, c2 =    1.047e+04    2.527e+11 
+At top right:    c1, c2 =    1.119e+04    2.700e+11 
+
+t = 1.44e+04   no. steps = 221   order = 5   stepsize = 3.85e+02
+At bottom left:  c1, c2 =    6.659e+06    2.582e+11 
+At top right:    c1, c2 =    7.301e+06    2.833e+11 
+
+t = 2.16e+04   no. steps = 247   order = 5   stepsize = 3.00e+02
+At bottom left:  c1, c2 =    2.665e+07    2.993e+11 
+At top right:    c1, c2 =    2.931e+07    3.313e+11 
+
+t = 2.88e+04   no. steps = 272   order = 4   stepsize = 4.05e+02
+At bottom left:  c1, c2 =    8.702e+06    3.380e+11 
+At top right:    c1, c2 =    9.650e+06    3.751e+11 
+
+t = 3.60e+04   no. steps = 309   order = 4   stepsize = 7.53e+01
+At bottom left:  c1, c2 =    1.404e+04    3.387e+11 
+At top right:    c1, c2 =    1.561e+04    3.765e+11 
+
+t = 4.32e+04   no. steps = 377   order = 4   stepsize = 4.02e+02
+At bottom left:  c1, c2 =    1.908e-07    3.382e+11 
+At top right:    c1, c2 =    2.345e-07    3.804e+11 
+
+t = 5.04e+04   no. steps = 392   order = 5   stepsize = 3.67e+02
+At bottom left:  c1, c2 =   -6.408e-10    3.358e+11 
+At top right:    c1, c2 =   -6.654e-10    3.864e+11 
+
+t = 5.76e+04   no. steps = 403   order = 5   stepsize = 4.72e+02
+At bottom left:  c1, c2 =    2.017e-08    3.320e+11 
+At top right:    c1, c2 =    3.353e-08    3.909e+11 
+
+t = 6.48e+04   no. steps = 415   order = 5   stepsize = 7.47e+02
+At bottom left:  c1, c2 =   -2.502e-10    3.313e+11 
+At top right:    c1, c2 =    2.005e-10    3.963e+11 
+
+t = 7.20e+04   no. steps = 424   order = 5   stepsize = 7.47e+02
+At bottom left:  c1, c2 =    4.217e-12    3.330e+11 
+At top right:    c1, c2 =   -2.693e-12    4.039e+11 
+
+t = 7.92e+04   no. steps = 434   order = 5   stepsize = 7.47e+02
+At bottom left:  c1, c2 =    2.779e-12    3.334e+11 
+At top right:    c1, c2 =   -1.865e-12    4.120e+11 
+
+t = 8.64e+04   no. steps = 444   order = 5   stepsize = 7.47e+02
+At bottom left:  c1, c2 =    2.331e-13    3.352e+11 
+At top right:    c1, c2 =   -1.599e-13    4.163e+11 
+
+
+Final Statistics: 
+
+lenrw   =  2096     leniw   =   132
+lenrwls =  2046     leniwls =    80
+nst     =   444
+nfe     =   581     nfels   =   526
+nni     =   577     nli     =   526
+nsetups =    75     netf    =    28
+npe     =     8     nps     =  1057
+ncfn    =     0     ncfl    =     0
+
+In CVBBDPRE: real/integer local work space sizes = 600, 50
+             no. flocal evals. = 176
+
+
+-------------------------------------------------------------------
+
+
+Preconditioner type is:  jpre = PREC_RIGHT
+
+t = 7.20e+03   no. steps = 191   order = 5   stepsize = 1.22e+02
+At bottom left:  c1, c2 =    1.047e+04    2.527e+11 
+At top right:    c1, c2 =    1.119e+04    2.700e+11 
+
+t = 1.44e+04   no. steps = 223   order = 5   stepsize = 2.79e+02
+At bottom left:  c1, c2 =    6.659e+06    2.582e+11 
+At top right:    c1, c2 =    7.301e+06    2.833e+11 
+
+t = 2.16e+04   no. steps = 249   order = 5   stepsize = 4.31e+02
+At bottom left:  c1, c2 =    2.665e+07    2.993e+11 
+At top right:    c1, c2 =    2.931e+07    3.313e+11 
+
+t = 2.88e+04   no. steps = 314   order = 3   stepsize = 9.38e+01
+At bottom left:  c1, c2 =    8.702e+06    3.380e+11 
+At top right:    c1, c2 =    9.650e+06    3.751e+11 
+
+t = 3.60e+04   no. steps = 350   order = 5   stepsize = 9.78e+01
+At bottom left:  c1, c2 =    1.404e+04    3.387e+11 
+At top right:    c1, c2 =    1.561e+04    3.765e+11 
+
+t = 4.32e+04   no. steps = 403   order = 4   stepsize = 3.87e+02
+At bottom left:  c1, c2 =    1.504e-09    3.382e+11 
+At top right:    c1, c2 =    1.683e-09    3.804e+11 
+
+t = 5.04e+04   no. steps = 416   order = 5   stepsize = 5.91e+02
+At bottom left:  c1, c2 =   -1.137e-11    3.358e+11 
+At top right:    c1, c2 =   -1.439e-11    3.864e+11 
+
+t = 5.76e+04   no. steps = 432   order = 5   stepsize = 1.73e+02
+At bottom left:  c1, c2 =    1.293e-09    3.320e+11 
+At top right:    c1, c2 =    2.448e-10    3.909e+11 
+
+t = 6.48e+04   no. steps = 447   order = 5   stepsize = 6.38e+02
+At bottom left:  c1, c2 =    7.963e-13    3.313e+11 
+At top right:    c1, c2 =   -2.943e-13    3.963e+11 
+
+t = 7.20e+04   no. steps = 459   order = 5   stepsize = 6.38e+02
+At bottom left:  c1, c2 =   -2.414e-12    3.330e+11 
+At top right:    c1, c2 =    2.797e-13    4.039e+11 
+
+t = 7.92e+04   no. steps = 470   order = 5   stepsize = 6.38e+02
+At bottom left:  c1, c2 =   -1.059e-13    3.334e+11 
+At top right:    c1, c2 =    3.557e-14    4.120e+11 
+
+t = 8.64e+04   no. steps = 481   order = 5   stepsize = 6.38e+02
+At bottom left:  c1, c2 =    6.045e-15    3.352e+11 
+At top right:    c1, c2 =   -2.016e-15    4.163e+11 
+
+
+Final Statistics: 
+
+lenrw   =  2096     leniw   =   132
+lenrwls =  2046     leniwls =    80
+nst     =   481
+nfe     =   622     nfels   =   769
+nni     =   618     nli     =   769
+nsetups =   104     netf    =    33
+npe     =     9     nps     =  1281
+ncfn    =     0     ncfl    =     0
+
+In CVBBDPRE: real/integer local work space sizes = 600, 50
+             no. flocal evals. = 198
diff --git a/examples/cvodes/parallel/cvsDiurnal_kry_p.c b/examples/cvodes/parallel/cvsDiurnal_kry_p.c
new file mode 100644
index 0000000..d2a9ac1
--- /dev/null
+++ b/examples/cvodes/parallel/cvsDiurnal_kry_p.c
@@ -0,0 +1,975 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): S. D. Cohen, A. C. Hindmarsh, M. R. Wittman, and
+ *                Radu Serban  @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * mesh, with simple polynomial initial profiles.
+ *
+ * The problem is solved by CVODES on NPE processors, treated
+ * as a rectangular process grid of size NPEX by NPEY, with
+ * NPE = NPEX*NPEY. Each processor contains a subgrid of size MXSUB
+ * by MYSUB of the (x,y) mesh.  Thus the actual mesh sizes are
+ * MX = MXSUB*NPEX and MY = MYSUB*NPEY, and the ODE system size is
+ * neq = 2*MX*MY.
+ *
+ * The solution is done with the BDF/GMRES method (i.e. using the
+ * CVSPGMR linear solver) and the block-diagonal part of the
+ * Newton matrix as a left preconditioner. A copy of the
+ * block-diagonal part of the Jacobian is saved and conditionally
+ * reused within the preconditioner routine.
+ *
+ * Performance data and sampled solution values are printed at
+ * selected output times, and all performance counters are printed
+ * on completion.
+ *
+ * This version uses MPI for user routines.
+ * 
+ * Execution: mpirun -np N cvsDiurnal_kry_p   with N = NPEX*NPEY
+ * (see constants below).
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>             /* prototypes for CVODE fcts. */
+#include <cvodes/cvodes_spgmr.h>       /* prototypes and constants for CVSPGMR solver */
+#include <nvector/nvector_parallel.h>  /* definition N_Vector and macro NV_DATA_P  */
+#include <sundials/sundials_dense.h>   /* prototypes for small dense matrix fcts. */
+#include <sundials/sundials_types.h>   /* definitions of realtype, booleantype */
+#include <sundials/sundials_math.h>    /* definition of macros SUNSQR and EXP */
+
+#include <mpi.h>                       /* MPI constants and types */
+
+/* Problem Constants */
+
+#define NVARS        2                    /* number of species         */
+#define KH           RCONST(4.0e-6)       /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)        /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)       /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)     /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           RCONST(0.0)          /* initial time */
+#define NOUT         12                   /* number of output times */
+#define TWOHR        RCONST(7200.0)       /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)       /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898)  /* pi */ 
+
+#define XMIN         RCONST(0.0)          /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define YMIN         RCONST(30.0)         /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+
+#define NPEX         2              /* no. PEs in x direction of PE array */
+#define NPEY         2              /* no. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* no. x points per subgrid */
+#define MYSUB        5              /* no. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+/* CVodeInit Constants */
+
+#define RTOL    RCONST(1.0e-5)    /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)     /* value of C1 or C2 at which tolerances */
+                                  /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)      /* scalar absolute tolerance */
+
+
+/* User-defined matrix accessor macro: IJth */
+
+/* IJth is defined in order to write code which indexes into dense
+   matrices with a (row,column) pair, where 1 <= row,column <= NVARS.   
+
+   IJth(a,i,j) references the (i,j)th entry of the small matrix realtype **a,
+   where 1 <= i,j <= NVARS. The small matrix routines in sundials_dense.h
+   work with matrices stored by column in a 2-dimensional array. In C,
+   arrays are indexed starting at 0, not 1. */
+
+#define IJth(a,i,j) (a[j-1][i-1])
+
+/* Type : UserData 
+   contains problem constants, preconditioner blocks, pivot arrays, 
+   grid constants, and processor indices, as well as data needed
+   for the preconditiner */
+
+typedef struct {
+
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+  realtype uext[NVARS*(MXSUB+2)*(MYSUB+2)];
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmxsub2;
+  MPI_Comm comm;
+
+  /* For preconditioner */
+  realtype **P[MXSUB][MYSUB], **Jbd[MXSUB][MYSUB];
+  long int *pivot[MXSUB][MYSUB];
+
+} *UserData;
+
+/* Private Helper Functions */
+
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector u, UserData data);
+static void PrintOutput(void *cvode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t);
+static void PrintFinalStats(void *cvode_mem);
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype udata[]);
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[]);
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[]);
+static void ucomm(realtype t, N_Vector u, UserData data);
+static void fcalc(realtype t, realtype udata[], realtype dudata[],
+                  UserData data);
+
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data, 
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu, 
+                  N_Vector r, N_Vector z, 
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+
+/***************************** Main Program ******************************/
+
+int main(int argc, char *argv[])
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag, my_pe, npes;
+  long int neq, local_N;
+  MPI_Comm comm;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Set problem size neq */
+  neq = NVARS*MX*MY;
+
+  /* Get processor number and total number of pe's */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  if (npes != NPEX*NPEY) {
+    if (my_pe == 0)
+      fprintf(stderr, "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n\n",
+	      npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+
+  /* Set local length */
+  local_N = NVARS*MXSUB*MYSUB;
+
+  /* Allocate and load user data block; allocate preconditioner block */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2, my_pe)) MPI_Abort(comm, 1);
+  InitUserData(my_pe, comm, data);
+
+  /* Allocate u, and set initial values and tolerances */ 
+  u = N_VNew_Parallel(comm, local_N, neq);
+  if (check_flag((void *)u, "N_VNew", 0, my_pe)) MPI_Abort(comm, 1);
+  SetInitialProfiles(u, data);
+  abstol = ATOL; reltol = RTOL;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if (check_flag(&flag, "CVodeSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1, my_pe)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1, my_pe)) return(1);
+
+  /* Call CVSpgmr to specify the linear solver CVSPGMR 
+     with left preconditioning and the maximum Krylov dimension maxl */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if (check_flag(&flag, "CVSpgmr", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Set preconditioner setup and solve routines Precond and PSolve, 
+     and the pointer to the user-defined block data */
+  flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+  if (check_flag(&flag, "CVSpilsSetPreconditioner", 1, my_pe)) MPI_Abort(comm, 1);
+
+  if (my_pe == 0)
+    printf("\n2-species diurnal advection-diffusion problem\n\n");
+
+  /* In loop over output points, call CVode, print results, test for error */
+  for (iout=1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if (check_flag(&flag, "CVode", 1, my_pe)) break;
+    PrintOutput(cvode_mem, my_pe, comm, u, t);
+  }
+
+  /* Print final statistics */  
+  if (my_pe == 0) PrintFinalStats(cvode_mem);
+
+  /* Free memory */
+  N_VDestroy_Parallel(u);
+  FreeUserData(data);
+  CVodeFree(&cvode_mem);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+
+/*********************** Private Helper Functions ************************/
+
+
+/* Load constants in data */
+
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data)
+{
+  int isubx, isuby;
+  int lx, ly;
+
+  /* Set problem constants */
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/((realtype)(MX-1));
+  data->dy = (YMAX-YMIN)/((realtype)(MY-1));
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(RCONST(2.0)*data->dx);
+  data->vdco = (RCONST(1.0)/SUNSQR(data->dy))*KV0;
+
+  /* Set machine-related constants */
+  data->comm = comm;
+  data->my_pe = my_pe;
+
+  /* isubx and isuby are the PE grid indices corresponding to my_pe */
+  isuby = my_pe/NPEX;
+  isubx = my_pe - isuby*NPEX;
+  data->isubx = isubx;
+  data->isuby = isuby;
+
+  /* Set the sizes of a boundary x-line in u and uext */
+  data->nvmxsub = NVARS*MXSUB;
+  data->nvmxsub2 = NVARS*(MXSUB+2);
+
+  /* Preconditioner-related fields */
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      (data->P)[lx][ly] = newDenseMat(NVARS, NVARS);
+      (data->Jbd)[lx][ly] = newDenseMat(NVARS, NVARS);
+      (data->pivot)[lx][ly] = newLintArray(NVARS);
+    }
+  }
+}
+
+/* Free user data memory */
+
+static void FreeUserData(UserData data)
+{
+  int lx, ly;
+
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      destroyMat((data->P)[lx][ly]);
+      destroyMat((data->Jbd)[lx][ly]);
+      destroyArray((data->pivot)[lx][ly]);
+    }
+  }
+
+  free(data);
+}
+
+/* Set initial conditions in u */
+
+static void SetInitialProfiles(N_Vector u, UserData data)
+{
+  int isubx, isuby, lx, ly, jx, jy;
+  long int offset;
+  realtype dx, dy, x, y, cx, cy, xmid, ymid;
+  realtype *udata;
+
+  /* Set pointer to data array in vector u */
+  udata = N_VGetArrayPointer_Parallel(u);
+
+  /* Get mesh spacings, and subgrid indices for this PE */
+  dx = data->dx;         dy = data->dy;
+  isubx = data->isubx;   isuby = data->isuby;
+
+  /* Load initial profiles of c1 and c2 into local u vector.
+  Here lx and ly are local mesh point indices on the local subgrid,
+  and jx and jy are the global mesh point indices. */
+  offset = 0;
+  xmid = RCONST(0.5)*(XMIN + XMAX);
+  ymid = RCONST(0.5)*(YMIN + YMAX);
+  for (ly = 0; ly < MYSUB; ly++) {
+    jy = ly + isuby*MYSUB;
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - ymid));
+    cy = RCONST(1.0) - cy + RCONST(0.5)*SUNSQR(cy);
+    for (lx = 0; lx < MXSUB; lx++) {
+      jx = lx + isubx*MXSUB;
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - xmid));
+      cx = RCONST(1.0) - cx + RCONST(0.5)*SUNSQR(cx);
+      udata[offset  ] = C1_SCALE*cx*cy; 
+      udata[offset+1] = C2_SCALE*cx*cy;
+      offset = offset + 2;
+    }
+  }
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+
+static void PrintOutput(void *cvode_mem, int my_pe, MPI_Comm comm,
+                        N_Vector u, realtype t)
+{
+  int qu, flag;
+  realtype hu, *udata, tempu[2];
+  int npelast;
+  long int i0, i1, nst;
+  MPI_Status status;
+
+  npelast = NPEX*NPEY - 1;
+  udata = N_VGetArrayPointer_Parallel(u);
+
+  /* Send c1,c2 at top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NVARS*MXSUB*MYSUB - 2;
+    i1 = i0 + 1;
+    if (npelast != 0)
+      MPI_Send(&udata[i0], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else {
+      tempu[0] = udata[i0];
+      tempu[1] = udata[i1];
+    }
+  }
+
+  /* On PE 0, receive c1,c2 at top right, then print performance data
+     and sampled solution values */ 
+  if (my_pe == 0) {
+    if (npelast != 0)
+      MPI_Recv(&tempu[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1, my_pe);
+    flag = CVodeGetLastOrder(cvode_mem, &qu);
+    check_flag(&flag, "CVodeGetLastOrder", 1, my_pe);
+    flag = CVodeGetLastStep(cvode_mem, &hu);
+    check_flag(&flag, "CVodeGetLastStep", 1, my_pe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("t = %.2Le   no. steps = %ld   order = %d   stepsize = %.2Le\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3Le %12.3Le \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3Le %12.3Le \n\n", tempu[0], tempu[1]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#else
+    printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+           t, nst, qu, hu);
+    printf("At bottom left:  c1, c2 = %12.3e %12.3e \n", udata[0], udata[1]);
+    printf("At top right:    c1, c2 = %12.3e %12.3e \n\n", tempu[0], tempu[1]);
+#endif
+  }
+}
+
+/* Print final statistics contained in iopt */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1, 0);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1, 0);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1, 0);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1, 0);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1, 0);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1, 0);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1, 0);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1, 0);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1, 0);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1, 0);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1, 0);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1, 0);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1, 0);
+
+  printf("\nFinal Statistics: \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwls = %5ld     leniwls = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld\n"                  , nst);
+  printf("nfe     = %5ld     nfels   = %5ld\n"  , nfe, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n"  , nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n"  , nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n"  , npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl); 
+}
+ 
+/* Routine to send boundary data to neighboring PEs */
+
+static void BSend(MPI_Comm comm, 
+                  int my_pe, int isubx, int isuby, 
+                  long int dsizex, long int dsizey,
+                  realtype udata[])
+{
+  int i, ly;
+  long int offsetu, offsetbuf;
+  realtype bufleft[NVARS*MYSUB], bufright[NVARS*MYSUB];
+
+  /* If isuby > 0, send data from bottom x-line of u */
+  if (isuby != 0)
+    MPI_Send(&udata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If isuby < NPEY-1, send data from top x-line of u */
+  if (isuby != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&udata[offsetu], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If isubx > 0, send data from left y-line of u (via bufleft) */
+  if (isubx != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = ly*dsizex;
+      for (i = 0; i < NVARS; i++)
+        bufleft[offsetbuf+i] = udata[offsetu+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If isubx < NPEX-1, send data from right y-line of u (via bufright) */
+  if (isubx != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetu = offsetbuf*MXSUB + (MXSUB-1)*NVARS;
+      for (i = 0; i < NVARS; i++)
+        bufright[offsetbuf+i] = udata[offsetu+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* Routine to start receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], 
+                      int my_pe, int isubx, int isuby,
+		      long int dsizex, long int dsizey,
+		      realtype uext[], realtype buffer[])
+{
+  long int offsetue;
+  /* Have bufleft and bufright use the same buffer */
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Irecv(&uext[NVARS], dsizex, PVEC_REAL_MPI_TYPE,
+    					 my_pe-NPEX, 0, comm, &request[0]);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1) {
+    offsetue = NVARS*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+                                         my_pe+NPEX, 0, comm, &request[1]);
+  }
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe-1, 0, comm, &request[2]);
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+                                         my_pe+1, 0, comm, &request[3]);
+  }
+}
+
+/* Routine to finish receiving boundary data from neighboring PEs.
+   Notes:
+   1) buffer should be able to hold 2*NVARS*MYSUB realtype entries, should be
+   passed to both the BRecvPost and BRecvWait functions, and should not
+   be manipulated between the two calls.
+   2) request should have 4 entries, and should be passed in both calls also. */
+
+static void BRecvWait(MPI_Request request[], 
+                      int isubx, int isuby, 
+                      long int dsizex, realtype uext[],
+                      realtype buffer[])
+{
+  int i, ly;
+  long int dsizex2, offsetue, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NVARS*MYSUB;
+  MPI_Status status;
+
+  dsizex2 = dsizex + 2*NVARS;
+
+  /* If isuby > 0, receive data for bottom x-line of uext */
+  if (isuby != 0)
+    MPI_Wait(&request[0],&status);
+
+  /* If isuby < NPEY-1, receive data for top x-line of uext */
+  if (isuby != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If isubx > 0, receive data for left y-line of uext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+1)*dsizex2;
+      for (i = 0; i < NVARS; i++)
+        uext[offsetue+i] = bufleft[offsetbuf+i];
+    }
+  }
+
+  /* If isubx < NPEX-1, receive data for right y-line of uext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NVARS;
+      offsetue = (ly+2)*dsizex2 - NVARS;
+      for (i = 0; i < NVARS; i++)
+	uext[offsetue+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/* ucomm routine.  This routine performs all communication 
+   between processors of data needed to calculate f. */
+
+static void ucomm(realtype t, N_Vector u, UserData data)
+{
+
+  realtype *udata, *uext, buffer[2*NVARS*MYSUB];
+  MPI_Comm comm;
+  int my_pe, isubx, isuby;
+  long int nvmxsub, nvmysub;
+  MPI_Request request[4];
+
+  udata = N_VGetArrayPointer_Parallel(u);
+
+  /* Get comm, my_pe, subgrid indices, data sizes, extended array uext */
+  comm = data->comm;  my_pe = data->my_pe;
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+  nvmysub = NVARS*MYSUB;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs */
+  BRecvPost(comm, request, my_pe, isubx, isuby, nvmxsub, nvmysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs */
+  BSend(comm, my_pe, isubx, isuby, nvmxsub, nvmysub, udata);
+
+  /* Finish receiving boundary data from neighboring PEs */
+  BRecvWait(request, isubx, isuby, nvmxsub, uext, buffer);
+}
+
+/* fcalc routine. Compute f(t,y).  This routine assumes that communication 
+   between processors of data needed to calculate f has already been done,
+   and this data is in the work array uext. */
+
+static void fcalc(realtype t, realtype udata[],
+                  realtype dudata[], UserData data)
+{
+  realtype *uext;
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  int i, lx, ly, jx, jy;
+  int isubx, isuby;
+  long int nvmxsub, nvmxsub2, offsetu, offsetue;
+
+  /* Get subgrid indices, data sizes, extended work array uext */
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub; nvmxsub2 = data->nvmxsub2;
+  uext = data->uext;
+
+  /* Copy local segment of u vector into the working extended array uext */
+  offsetu = 0;
+  offsetue = nvmxsub2 + NVARS;
+  for (ly = 0; ly < MYSUB; ly++) {
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = udata[offsetu+i];
+    offsetu = offsetu + nvmxsub;
+    offsetue = offsetue + nvmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+  a boundary PE, copy data from the first interior mesh line of u to uext */
+
+  /* If isuby = 0, copy x-line 2 of u to uext */
+  if (isuby == 0) {
+    for (i = 0; i < nvmxsub; i++) uext[NVARS+i] = udata[nvmxsub+i];
+  }
+
+  /* If isuby = NPEY-1, copy x-line MYSUB-1 of u to uext */
+  if (isuby == NPEY-1) {
+    offsetu = (MYSUB-2)*nvmxsub;
+    offsetue = (MYSUB+1)*nvmxsub2 + NVARS;
+    for (i = 0; i < nvmxsub; i++) uext[offsetue+i] = udata[offsetu+i];
+  }
+
+  /* If isubx = 0, copy y-line 2 of u to uext */
+  if (isubx == 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*nvmxsub + NVARS;
+      offsetue = (ly+1)*nvmxsub2;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = udata[offsetu+i];
+    }
+  }
+
+  /* If isubx = NPEX-1, copy y-line MXSUB-1 of u to uext */
+  if (isubx == NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = (ly+1)*nvmxsub - 2*NVARS;
+      offsetue = (ly+2)*nvmxsub2 - NVARS;
+      for (i = 0; i < NVARS; i++) uext[offsetue+i] = udata[offsetu+i];
+    }
+  }
+
+  /* Make local copies of problem variables, for efficiency */
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Set diurnal rate coefficients as functions of t, and save q4 in 
+  data block for use by preconditioner evaluation routine */
+  s = sin((data->om)*t);
+  if (s > RCONST(0.0)) {
+    q3 = SUNRexp(-A3/s);
+    q4coef = SUNRexp(-A4/s);
+  } else {
+    q3 = RCONST(0.0);
+    q4coef = RCONST(0.0);
+  }
+  data->q4 = q4coef;
+
+  /* Loop over all grid points in local subgrid */
+  for (ly = 0; ly < MYSUB; ly++) {
+
+    jy = ly + isuby*MYSUB;
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    for (lx = 0; lx < MXSUB; lx++) {
+
+      jx = lx + isubx*MXSUB;
+
+      /* Extract c1 and c2, and set kinetic rate terms */
+      offsetue = (lx+1)*NVARS + (ly+1)*nvmxsub2;
+      c1 = uext[offsetue];
+      c2 = uext[offsetue+1];
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + RCONST(2.0)*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms */
+      c1dn = uext[offsetue-nvmxsub2];
+      c2dn = uext[offsetue-nvmxsub2+1];
+      c1up = uext[offsetue+nvmxsub2];
+      c2up = uext[offsetue+nvmxsub2+1];
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms */
+      c1lt = uext[offsetue-2];
+      c2lt = uext[offsetue-1];
+      c1rt = uext[offsetue+2];
+      c2rt = uext[offsetue+3];
+      hord1 = hordco*(c1rt - RCONST(2.0)*c1 + c1lt);
+      hord2 = hordco*(c2rt - RCONST(2.0)*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into dudata */
+      offsetu = lx*NVARS + ly*nvmxsub;
+      dudata[offsetu]   = vertd1 + hord1 + horad1 + rkin1; 
+      dudata[offsetu+1] = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+}
+
+
+/***************** Functions Called by the Solver *************************/
+
+/* f routine.  Evaluate f(t,y).  First call ucomm to do communication of 
+   subgrid boundary data into uext.  Then calculate f by a call to fcalc. */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype *udata, *dudata;
+  UserData data;
+
+  udata = N_VGetArrayPointer_Parallel(u);
+  dudata = N_VGetArrayPointer_Parallel(udot);
+  data = (UserData) user_data;
+
+  /* Call ucomm to do inter-processor communication */
+  ucomm(t, u, data);
+
+  /* Call fcalc to calculate all right-hand sides */
+  fcalc(t, udata, dudata, data);
+
+  return(0);
+}
+
+/* Preconditioner setup routine. Generate and preprocess P. */
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data, 
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype c1, c2, cydn, cyup, diag, ydn, yup, q4coef, dely, verdco, hordco;
+  realtype **(*P)[MYSUB], **(*Jbd)[MYSUB];
+  long int nvmxsub, offset;
+  long int *(*pivot)[MYSUB], ier;
+  int lx, ly, jx, jy, isubx, isuby;
+  realtype *udata, **a, **j;
+  UserData data;
+
+  /* Make local copies of pointers in user_data, pointer to u's data,
+     and PE index pair */
+  data = (UserData) user_data;
+  P = data->P;
+  Jbd = data->Jbd;
+  pivot = data->pivot;
+  udata = N_VGetArrayPointer_Parallel(u);
+  isubx = data->isubx;   isuby = data->isuby;
+  nvmxsub = data->nvmxsub;
+
+  if (jok) {
+
+  /* jok = TRUE: Copy Jbd to P */
+    for (ly = 0; ly < MYSUB; ly++)
+      for (lx = 0; lx < MXSUB; lx++)
+        denseCopy(Jbd[lx][ly], P[lx][ly], NVARS, NVARS);
+
+  *jcurPtr = FALSE;
+
+  }
+
+  else {
+
+  /* jok = FALSE: Generate Jbd from scratch and copy to P */
+
+  /* Make local copies of problem variables, for efficiency */
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+
+  /* Compute 2x2 diagonal Jacobian blocks (using q4 values 
+     computed on the last f call).  Load into P. */
+    for (ly = 0; ly < MYSUB; ly++) {
+      jy = ly + isuby*MYSUB;
+      ydn = YMIN + (jy - RCONST(0.5))*dely;
+      yup = ydn + dely;
+      cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+      cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+      diag = -(cydn + cyup + RCONST(2.0)*hordco);
+      for (lx = 0; lx < MXSUB; lx++) {
+        jx = lx + isubx*MXSUB;
+        offset = lx*NVARS + ly*nvmxsub;
+        c1 = udata[offset];
+        c2 = udata[offset+1];
+        j = Jbd[lx][ly];
+        a = P[lx][ly];
+        IJth(j,1,1) = (-Q1*C3 - Q2*c2) + diag;
+        IJth(j,1,2) = -Q2*c1 + q4coef;
+        IJth(j,2,1) = Q1*C3 - Q2*c2;
+        IJth(j,2,2) = (-Q2*c1 - q4coef) + diag;
+        denseCopy(j, a, NVARS, NVARS);
+      }
+    }
+
+  *jcurPtr = TRUE;
+
+  }
+
+  /* Scale by -gamma */
+    for (ly = 0; ly < MYSUB; ly++)
+      for (lx = 0; lx < MXSUB; lx++)
+        denseScale(-gamma, P[lx][ly], NVARS, NVARS);
+
+  /* Add identity matrix and do LU decompositions on blocks in place */
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      denseAddIdentity(P[lx][ly], NVARS);
+      ier = denseGETRF(P[lx][ly], NVARS, NVARS, pivot[lx][ly]);
+      if (ier != 0) return(1);
+    }
+  }
+
+  return(0);
+}
+
+/* Preconditioner solve routine */
+static int PSolve(realtype tn, N_Vector u, N_Vector fu, 
+                  N_Vector r, N_Vector z, 
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype **(*P)[MYSUB];
+  long int nvmxsub;
+  long int *(*pivot)[MYSUB];
+  int lx, ly;
+  realtype *zdata, *v;
+  UserData data;
+
+  /* Extract the P and pivot arrays from user_data */
+  data = (UserData) user_data;
+  P = data->P;
+  pivot = data->pivot;
+
+  /* Solve the block-diagonal system Px = r using LU factors stored
+     in P and pivot data in pivot, and return the solution in z.
+     First copy vector r to z. */
+  N_VScale(RCONST(1.0), r, z);
+
+  nvmxsub = data->nvmxsub;
+  zdata = N_VGetArrayPointer_Parallel(z);
+
+  for (lx = 0; lx < MXSUB; lx++) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      v = &(zdata[lx*NVARS + ly*nvmxsub]);
+      denseGETRS(P[lx][ly], NVARS, pivot[lx][ly], v);
+    }
+  }
+
+  return(0);
+}
+
+
+/*********************** Private Helper Function ************************/
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+	      id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/parallel/cvsDiurnal_kry_p.out b/examples/cvodes/parallel/cvsDiurnal_kry_p.out
new file mode 100644
index 0000000..484e635
--- /dev/null
+++ b/examples/cvodes/parallel/cvsDiurnal_kry_p.out
@@ -0,0 +1,63 @@
+
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 219   order = 5   stepsize = 1.59e+02
+At bottom left:  c1, c2 =    1.047e+04    2.527e+11 
+At top right:    c1, c2 =    1.119e+04    2.700e+11 
+
+t = 1.44e+04   no. steps = 251   order = 5   stepsize = 3.77e+02
+At bottom left:  c1, c2 =    6.659e+06    2.582e+11 
+At top right:    c1, c2 =    7.301e+06    2.833e+11 
+
+t = 2.16e+04   no. steps = 277   order = 5   stepsize = 2.75e+02
+At bottom left:  c1, c2 =    2.665e+07    2.993e+11 
+At top right:    c1, c2 =    2.931e+07    3.313e+11 
+
+t = 2.88e+04   no. steps = 307   order = 4   stepsize = 1.98e+02
+At bottom left:  c1, c2 =    8.702e+06    3.380e+11 
+At top right:    c1, c2 =    9.650e+06    3.751e+11 
+
+t = 3.60e+04   no. steps = 335   order = 5   stepsize = 1.17e+02
+At bottom left:  c1, c2 =    1.404e+04    3.387e+11 
+At top right:    c1, c2 =    1.561e+04    3.765e+11 
+
+t = 4.32e+04   no. steps = 388   order = 4   stepsize = 4.48e+02
+At bottom left:  c1, c2 =   -5.732e-07    3.382e+11 
+At top right:    c1, c2 =   -6.367e-07    3.804e+11 
+
+t = 5.04e+04   no. steps = 406   order = 5   stepsize = 3.97e+02
+At bottom left:  c1, c2 =   -4.317e-09    3.358e+11 
+At top right:    c1, c2 =   -8.233e-09    3.864e+11 
+
+t = 5.76e+04   no. steps = 418   order = 5   stepsize = 4.74e+02
+At bottom left:  c1, c2 =   -2.576e-09    3.320e+11 
+At top right:    c1, c2 =   -1.259e-09    3.909e+11 
+
+t = 6.48e+04   no. steps = 428   order = 5   stepsize = 7.70e+02
+At bottom left:  c1, c2 =    3.451e-09    3.313e+11 
+At top right:    c1, c2 =    2.081e-09    3.963e+11 
+
+t = 7.20e+04   no. steps = 437   order = 5   stepsize = 7.70e+02
+At bottom left:  c1, c2 =    1.630e-11    3.330e+11 
+At top right:    c1, c2 =    1.843e-11    4.039e+11 
+
+t = 7.92e+04   no. steps = 447   order = 5   stepsize = 7.70e+02
+At bottom left:  c1, c2 =   -1.704e-11    3.334e+11 
+At top right:    c1, c2 =   -1.131e-11    4.120e+11 
+
+t = 8.64e+04   no. steps = 456   order = 5   stepsize = 7.70e+02
+At bottom left:  c1, c2 =    1.496e-12    3.352e+11 
+At top right:    c1, c2 =    8.085e-13    4.163e+11 
+
+
+Final Statistics: 
+
+lenrw   =  2096     leniw   =   132
+lenrwls =  2046     leniwls =    80
+nst     =   456
+nfe     =   586     nfels   =   619
+nni     =   582     nli     =   619
+nsetups =    73     netf    =    25
+npe     =     8     nps     =  1149
+ncfn    =     0     ncfl    =     0
+
diff --git a/examples/cvodes/serial/CMakeLists.txt b/examples/cvodes/serial/CMakeLists.txt
new file mode 100644
index 0000000..ea409c7
--- /dev/null
+++ b/examples/cvodes/serial/CMakeLists.txt
@@ -0,0 +1,273 @@
+# ---------------------------------------------------------------
+# $Revision: 4824 $
+# $Date: 2016-07-24 16:39:04 -0700 (Sun, 24 Jul 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for CVODES serial examples
+
+# Add variable CVODES_examples with the names of the serial CVODES examples
+# This is a list of tuples, first element is example name.
+# Optional second argument is test arguments
+SET(CVODES_examples 
+   cvsAdvDiff_ASAi_bnd
+   cvsAdvDiff_bnd
+  "cvsAdvDiff_FSA_non\;-sensi stg t"
+  "cvsAdvDiff_FSA_non\;-sensi sim t"
+   cvsDirectDemo_ls
+  "cvsDiurnal_FSA_kry\;-sensi stg t"
+  "cvsDiurnal_FSA_kry\;-sensi sim t"
+   cvsDiurnal_kry_bp
+   cvsDiurnal_kry
+   cvsFoodWeb_ASAi_kry
+   cvsFoodWeb_ASAp_kry
+   cvsHessian_ASA_FSA
+   cvsKrylovDemo_ls
+   cvsKrylovDemo_prec
+   cvsRoberts_ASAi_dns
+   cvsRoberts_dns
+   cvsRoberts_dns_uw
+   "cvsRoberts_FSA_dns\;-sensi stg1 t"
+  )
+
+# Add variable CVODES_examples_BL with the names of the serial CVODES examples
+# that use Lapack
+SET(CVODES_examples_BL
+  cvsAdvDiff_bndL
+  cvsRoberts_dnsL
+  )
+
+SET(CVODES_examples_KLU
+  cvsRoberts_klu
+  cvsRoberts_ASAi_klu
+  "cvsRoberts_FSA_klu\;-sensi stg1 t"
+  )
+ 
+SET(CVODES_examples_SUPERLUMT
+  cvsRoberts_sps
+  cvsRoberts_ASAi_sps
+  "cvsRoberts_FSA_sps\;-sensi stg1 t"
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODES_LIB sundials_cvodes_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(CVODES_LIB sundials_cvodes_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${CVODES_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each CVODES example
+
+# SGS is there a way to query CMAKE variable to get added executables 
+# rather than keeping our own list?
+SET(ADDED_EXECUTABLES "")
+FOREACH(example_tuple ${CVODES_examples})
+  LIST(GET example_tuple 0 example)
+
+  # Only need to add the executable once
+  LIST(FIND ADDED_EXECUTABLES ${example} index)
+  IF(index EQUAL -1)
+    LIST(APPEND ADDED_EXECUTABLES ${example})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  ENDIF(index EQUAL -1)
+
+  LIST(LENGTH example_tuple n)
+  IF(n EQUAL 2)
+    LIST(GET example_tuple 1 test_args)
+    STRING(REGEX REPLACE " " "_" test_name ${example}_${test_args})
+    SUNDIALS_ADD_TEST(${test_name} ${example} TEST_ARGS ${test_args})
+  ELSE()
+    SUNDIALS_ADD_TEST(${example} ${example})
+  ENDIF()
+
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  FILE(GLOB example_out ${example}.out*)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example_out} DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${CVODES_examples})
+
+# If Lapack support is enabled, add the build and install targets for
+# the examples using Lapack
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${CVODES_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    FILE(GLOB example_out ${example}.out*)
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example_out} DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${CVODES_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+# If KLU support is enabled, add the build and install targets for
+# the examples using KLU
+IF(KLU_FOUND)
+  SET(ADDED_EXECUTABLES "")
+  FOREACH(example_tuple ${CVODES_examples_KLU})
+    LIST(GET example_tuple 0 example)
+  
+    # Only need to add the executable once
+    LIST(FIND ADDED_EXECUTABLES ${example} index)
+    IF(index EQUAL -1)
+      LIST(APPEND ADDED_EXECUTABLES ${example})
+      ADD_EXECUTABLE(${example} ${example}.c)
+      SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    ENDIF(index EQUAL -1)
+  
+    LIST(LENGTH example_tuple n)
+    IF(n EQUAL 2)
+      LIST(GET example_tuple 1 test_args)
+      STRING(REGEX REPLACE " " "_" test_name ${example}_${test_args})
+      SUNDIALS_ADD_TEST(${test_name} ${example} TEST_ARGS ${test_args})
+    ELSE()
+      SUNDIALS_ADD_TEST(${example} ${example})
+    ENDIF()
+  
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    FILE(GLOB example_out ${example}.out*)
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example_out} DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example_tuple ${CVODES_examples_KLU})
+ENDIF(KLU_FOUND)
+
+# If SUPERLUMT support is enabled, add the build and install targets for
+# the examples using SUPERLUMT
+IF(SUPERLUMT_FOUND)
+  SET(ADDED_EXECUTABLES "")
+  FOREACH(example_tuple ${CVODES_examples_SUPERLUMT})
+    LIST(GET example_tuple 0 example)
+  
+    # Only need to add the executable once
+    LIST(FIND ADDED_EXECUTABLES ${example} index)
+    IF(index EQUAL -1)
+      LIST(APPEND ADDED_EXECUTABLES ${example})
+      ADD_EXECUTABLE(${example} ${example}.c)
+      SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    ENDIF(index EQUAL -1)
+  
+    LIST(LENGTH example_tuple n)
+    IF(n EQUAL 2)
+      LIST(GET example_tuple 1 test_args)
+      STRING(REGEX REPLACE " " "_" test_name ${example}_${test_args})
+      SUNDIALS_ADD_TEST(${test_name} ${example} TEST_ARGS ${test_args})
+    ELSE()
+      SUNDIALS_ADD_TEST(${example} ${example})
+    ENDIF()
+  
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    FILE(GLOB example_out ${example}.out*)
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example_out} DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example_tuple ${CVODES_examples_SUPERLUMT})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/serial)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "CVODES")
+  SET(SOLVER_LIB "sundials_cvodes")
+  FOREACH(example_tuple ${CVODES_examples})
+    list(GET example_tuple 0 example)
+    LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${CVODES_examples})
+
+  IF(LAPACK_FOUND)
+    LIST2STRING(CVODES_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  IF(KLU_FOUND)
+    FOREACH(example_tuple ${CVODES_examples_KLU})
+      list(GET example_tuple 0 example)
+      LIST2STRING(example EXAMPLES)
+    ENDFOREACH(example_tuple ${CVODES_examples_KLU})
+  ENDIF(KLU_FOUND)
+
+  IF(SUPERLUMT_FOUND)
+    FOREACH(example_tuple ${CVODES_examples_SUPERLUMT})
+      list(GET example_tuple 0 example)
+      LIST2STRING(example EXAMPLES)
+    ENDFOREACH(example_tuple ${CVODES_examples_SUPERLUMT})
+  ENDIF(SUPERLUMT_FOUND)
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+  list(REMOVE_DUPLICATES EXAMPLES)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvodes/serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/cvodes/serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/cvodes/serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/cvodes/serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/cvodes/serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/cvodes/serial/README b/examples/cvodes/serial/README
new file mode 100644
index 0000000..92bdb82
--- /dev/null
+++ b/examples/cvodes/serial/README
@@ -0,0 +1,79 @@
+List of serial CVODES examples
+
+(1) Simulation
+
+  cvsAdvDiff_bnd        : banded example
+  cvsAdvDiff_bndL       : banded example (Lapack)
+  cvsDirectDemo_ls      : demonstration program for direct methods
+  cvsDiurnal_kry_bp     : Krylov example with banded preconditioner
+  cvsDiurnal_kry        : Krylov example
+  cvsKrylovDemo_ls      : demonstration program with 3 Krylov solvers
+  cvsKrylovDemo_prec    : demonstration program for Krylov methods
+  cvsRoberts_dns        : dense example
+  cvsRoberts_dnsL       : dense example (Lapack)
+  cvsRoberts_dns_uw     : dense example with user ewt function
+  cvsRoberts_klu        : dense example with KLU sparse linear solver
+  cvsRoberts_sps        : dense example with SuperLUMT sparse linear solver
+
+(2) Forward sensitivity
+
+  cvsAdvDiff_FSA_non    : 1-D advection difusion PDE -
+                          Adams with Functional iteration
+  cvsDiurnal_FSA_kry    : 2-D 2-species diurnal advection-diffusion PDE -
+                          BDF with Newton GMRES
+  cvsRoberts_FSA_dns    : chemical kinetics ODEs -
+                          BDF with Newton Dense
+
+(3) Adjoint sensitivity
+
+  cvsAdvDiff_ASAi_bnd   : advection-diffusion - adjoint sensitivity
+  cvsFoodWeb_ASAi_kry   : food web - adjoint sensitivity for G
+  cvsFoodWeb_ASAp_kry   : food web - adjoint sensitivity for g
+  cvsHessian_ASA_FSA    : ASA example for computing Hessian
+  cvsRoberts_ASAi_dns   : chemical kinetics - adjoint sensitivity
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/cvodes/serial/cvsAdvDiff_ASAi_bnd.c b/examples/cvodes/serial/cvsAdvDiff_ASAi_bnd.c
new file mode 100644
index 0000000..b35e6d3
--- /dev/null
+++ b/examples/cvodes/serial/cvsAdvDiff_ASAi_bnd.c
@@ -0,0 +1,559 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Adjoint sensitivity example problem:
+ *
+ * The following is a simple example problem with a banded Jacobian,
+ * with the program for its solution by CVODES.
+ * The problem is the semi-discrete form of the advection-diffusion
+ * equation in 2-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx + d^2 u / dy^2
+ * on the rectangle 0 <= x <= 2, 0 <= y <= 1, and the time
+ * interval 0 <= t <= 1. Homogeneous Dirichlet boundary conditions
+ * are posed, and the initial condition is the following:
+ *   u(x,y,t=0) = x(2-x)y(1-y)exp(5xy).
+ * The PDE is discretized on a uniform MX+2 by MY+2 grid with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX*MY.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVODE band linear solver, and a user-supplied
+ * Jacobian routine.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .1, .2, ..., 1.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * Additionally, CVODES integrates backwards in time the
+ * the semi-discrete form of the adjoint PDE:
+ *   d(lambda)/dt = - d^2(lambda) / dx^2 + 0.5 d(lambda) / dx
+ *                  - d^2(lambda) / dy^2 - 1.0
+ * with homogeneous Dirichlet boundary conditions and final
+ * conditions:
+ *   lambda(x,y,t=t_final) = 0.0
+ * whose solution at t = 0 represents the sensitivity of
+ *   G = int_0^t_final int_x int _y u(t,x,y) dx dy dt
+ * with respect to the initial conditions of the original problem.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>
+#include <cvodes/cvodes_band.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define XMAX  RCONST(2.0)   /* domain boundaries             */
+#define YMAX  RCONST(1.0)
+#define MX    40            /* mesh dimensions               */
+#define MY    20
+#define NEQ   MX*MY         /* number of equations           */
+#define ATOL  RCONST(1.e-5)        
+#define RTOLB RCONST(1.e-6)        
+#define T0    RCONST(0.0)   /* initial time                  */
+#define T1    RCONST(0.1)   /* first output time             */
+#define DTOUT RCONST(0.1)   /* output time increment         */
+#define NOUT  10            /* number of output times        */
+#define TOUT  RCONST(1.0)   /* final time                    */
+#define NSTEP 50            /* check point saved every NSTEP */
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+/* User-defined vector access macro IJth */
+
+/* IJth is defined in order to isolate the translation from the
+   mathematical 2-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. 
+   IJth(vdata,i,j) references the element in the vdata array for
+   u at mesh point (i,j), where 1 <= i <= MX, 1 <= j <= MY.
+   The vdata array is obtained via the macro call vdata = N_VDATA(v),
+   where v is an N_Vector. 
+   The variables are ordered by the y index j, then by the x index i. */
+
+#define IJth(vdata,i,j) (vdata[(j-1) + (i-1)*MY])
+
+/* Type : UserData 
+   contains grid constants */
+
+typedef struct {
+  realtype dx, dy, hdcoef, hacoef, vdcoef;
+} *UserData;
+
+/* Prototypes of user-supplied functions */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3); 
+
+static int fB(realtype tB, N_Vector u, N_Vector uB, N_Vector uBdot, void *user_dataB);
+
+static int JacB(long int NB, long int muB, long int mlB,
+                realtype tB, N_Vector u, 
+                N_Vector uB, N_Vector fuB,
+                DlsMat JB, void *user_dataB,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B); 
+
+/* Prototypes of private functions */
+
+static void SetIC(N_Vector u, UserData data);
+static void PrintOutput(N_Vector uB, UserData data);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+
+  void *cvode_mem;
+
+  realtype dx, dy, reltol, abstol, t;
+  N_Vector u;
+
+  int indexB;
+
+  realtype reltolB, abstolB;
+  N_Vector uB;
+  
+  int flag, ncheck;
+
+  data = NULL;
+  cvode_mem = NULL;
+  u = uB = NULL;
+
+  /* Allocate and initialize user data memory */
+
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+
+  dx = data->dx = XMAX/(MX+1);
+  dy = data->dy = YMAX/(MY+1);
+  data->hdcoef = ONE/(dx*dx);
+  data->hacoef = RCONST(1.5)/(TWO*dx);
+  data->vdcoef = ONE/(dy*dy);
+
+  /* Set the tolerances for the forward integration */
+  reltol = ZERO;
+  abstol = ATOL;
+
+  /* Allocate u vector */
+  u = N_VNew_Serial(NEQ);
+  if(check_flag((void *)u, "N_VNew", 0)) return(1);
+
+  /* Initialize u vector */
+  SetIC(u, data);
+
+  /* Create and allocate CVODES memory for forward run */
+
+  printf("\nCreate and allocate CVODES memory for forward runs\n");
+
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Call CVBand with  bandwidths ml = mu = MY, */
+
+  flag = CVBand(cvode_mem, NEQ, MY, MY);
+  if(check_flag(&flag, "CVBand", 1)) return(1);
+
+  flag = CVDlsSetBandJacFn(cvode_mem, Jac);
+  if(check_flag(&flag, "CVDlsSetBandJacFn", 1)) return(1);
+
+  /* Allocate global memory */
+
+  printf("\nAllocate global memory\n");
+
+  flag = CVodeAdjInit(cvode_mem, NSTEP, CV_HERMITE);
+  if(check_flag(&flag, "CVodeAdjInit", 1)) return(1);
+
+  /* Perform forward run */
+  printf("\nForward integration\n");
+  flag = CVodeF(cvode_mem, TOUT, u, &t, CV_NORMAL, &ncheck);
+  if(check_flag(&flag, "CVodeF", 1)) return(1);
+
+  printf("\nncheck = %d\n", ncheck);
+
+  /* Set the tolerances for the backward integration */
+  reltolB = RTOLB;
+  abstolB = ATOL;
+
+  /* Allocate uB */
+  uB = N_VNew_Serial(NEQ);
+  if(check_flag((void *)uB, "N_VNew", 0)) return(1);
+  /* Initialize uB = 0 */
+  N_VConst(ZERO, uB);
+
+  /* Create and allocate CVODES memory for backward run */
+
+  printf("\nCreate and allocate CVODES memory for backward run\n");
+
+  flag = CVodeCreateB(cvode_mem, CV_BDF, CV_NEWTON, &indexB);
+  if(check_flag(&flag, "CVodeCreateB", 1)) return(1);
+
+  flag = CVodeSetUserDataB(cvode_mem, indexB, data);
+  if(check_flag(&flag, "CVodeSetUserDataB", 1)) return(1);
+
+  flag = CVodeInitB(cvode_mem, indexB, fB, TOUT, uB);
+  if(check_flag(&flag, "CVodeInitB", 1)) return(1);
+
+  flag = CVodeSStolerancesB(cvode_mem, indexB, reltolB, abstolB);
+  if(check_flag(&flag, "CVodeSStolerancesB", 1)) return(1);
+
+  flag = CVBandB(cvode_mem, indexB, NEQ, MY, MY);
+  if(check_flag(&flag, "CVBandB", 1)) return(1);
+  
+  flag = CVDlsSetBandJacFnB(cvode_mem, indexB, JacB);
+  if(check_flag(&flag, "CVDlsSetBandJacFnB", 1)) return(1);
+
+  /* Perform backward integration */
+  printf("\nBackward integration\n");
+  flag = CVodeB(cvode_mem, T0, CV_NORMAL);
+  if(check_flag(&flag, "CVodeB", 1)) return(1);
+
+  flag = CVodeGetB(cvode_mem, indexB, &t, uB);
+  if(check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  PrintOutput(uB, data);
+
+  N_VDestroy_Serial(u);   /* Free the u vector */
+  N_VDestroy_Serial(uB);  /* Free the uB vector */
+  CVodeFree(&cvode_mem);  /* Free the CVODE problem memory */
+
+  free(data);             /* Free the user data */
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. right-hand side of forward ODE.
+ */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype uij, udn, uup, ult, urt, hordc, horac, verdc, hdiff, hadv, vdiff;
+  realtype *udata, *dudata;
+  int i, j;
+  UserData data;
+
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Extract needed constants from data */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  /* Loop over all grid points. */
+
+  for (j=1; j <= MY; j++) {
+
+    for (i=1; i <= MX; i++) {
+
+      /* Extract u at x_i, y_j and four neighboring points */
+
+      uij = IJth(udata, i, j);
+      udn = (j == 1)  ? ZERO : IJth(udata, i, j-1);
+      uup = (j == MY) ? ZERO : IJth(udata, i, j+1);
+      ult = (i == 1)  ? ZERO : IJth(udata, i-1, j);
+      urt = (i == MX) ? ZERO : IJth(udata, i+1, j);
+
+      /* Set diffusion and advection terms and load into udot */
+
+      hdiff = hordc*(ult - TWO*uij + urt);
+      hadv = horac*(urt - ult);
+      vdiff = verdc*(uup - TWO*uij + udn);
+      IJth(dudata, i, j) = hdiff + hadv + vdiff;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * Jac function. Jacobian of forward ODE.
+ */
+
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int i, j, k;
+  realtype *kthCol, hordc, horac, verdc;
+  UserData data;
+
+  /*
+    The components of f = udot that depend on u(i,j) are
+    f(i,j), f(i-1,j), f(i+1,j), f(i,j-1), f(i,j+1), with
+      df(i,j)/du(i,j) = -2 (1/dx^2 + 1/dy^2)
+      df(i-1,j)/du(i,j) = 1/dx^2 + .25/dx  (if i > 1)
+      df(i+1,j)/du(i,j) = 1/dx^2 - .25/dx  (if i < MX)
+      df(i,j-1)/du(i,j) = 1/dy^2           (if j > 1)
+      df(i,j+1)/du(i,j) = 1/dy^2           (if j < MY)
+  */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  for (j=1; j <= MY; j++) {
+    for (i=1; i <= MX; i++) {
+      k = j-1 + (i-1)*MY;
+      kthCol = BAND_COL(J,k);
+
+      /* set the kth column of J */
+
+      BAND_COL_ELEM(kthCol,k,k) = -TWO*(verdc+hordc);
+      if (i != 1)  BAND_COL_ELEM(kthCol,k-MY,k) = hordc + horac;
+      if (i != MX) BAND_COL_ELEM(kthCol,k+MY,k) = hordc - horac;
+      if (j != 1)  BAND_COL_ELEM(kthCol,k-1,k)  = verdc;
+      if (j != MY) BAND_COL_ELEM(kthCol,k+1,k)  = verdc;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * fB function. Right-hand side of backward ODE.
+ */
+
+static int fB(realtype tB, N_Vector u, N_Vector uB, N_Vector uBdot, 
+              void *user_dataB)
+{
+  UserData data;
+  realtype *uBdata, *duBdata;
+  realtype hordc, horac, verdc;
+  realtype uBij, uBdn, uBup, uBlt, uBrt;
+  realtype hdiffB, hadvB, vdiffB;
+  int i, j;
+
+  uBdata = N_VGetArrayPointer_Serial(uB);
+  duBdata = N_VGetArrayPointer_Serial(uBdot);
+
+  /* Extract needed constants from data */
+
+  data = (UserData) user_dataB;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  /* Loop over all grid points. */
+
+  for (j=1; j <= MY; j++) {
+
+    for (i=1; i <= MX; i++) {
+
+      /* Extract u at x_i, y_j and four neighboring points */
+
+      uBij = IJth(uBdata, i, j);
+      uBdn = (j == 1)  ? ZERO : IJth(uBdata, i, j-1);
+      uBup = (j == MY) ? ZERO : IJth(uBdata, i, j+1);
+      uBlt = (i == 1)  ? ZERO : IJth(uBdata, i-1, j);
+      uBrt = (i == MX) ? ZERO : IJth(uBdata, i+1, j);
+
+      /* Set diffusion and advection terms and load into udot */
+
+      hdiffB = hordc*(- uBlt + TWO*uBij - uBrt);
+      hadvB  = horac*(uBrt - uBlt);
+      vdiffB = verdc*(- uBup + TWO*uBij - uBdn);
+      IJth(duBdata, i, j) = hdiffB + hadvB + vdiffB - ONE;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * JacB function. Jacobian of backward ODE
+ */
+
+static int JacB(long int NB, long int muB, long int mlB,
+                realtype tB, N_Vector u, 
+                N_Vector uB, N_Vector fuB,
+                DlsMat JB, void *user_dataB,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  int i, j, k;
+  realtype *kthCol, hordc, horac, verdc;
+  UserData data;
+
+  /* The Jacobian of the adjoint system is: JB = -J^T */
+
+  data = (UserData) user_dataB;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  for (j=1; j <= MY; j++) {
+    for (i=1; i <= MX; i++) {
+      k = j-1 + (i-1)*MY;
+      kthCol = BAND_COL(JB,k);
+
+      /* set the kth column of J */
+
+      BAND_COL_ELEM(kthCol,k,k) = TWO*(verdc+hordc);
+      if (i != 1)  BAND_COL_ELEM(kthCol,k-MY,k) = - hordc + horac;
+      if (i != MX) BAND_COL_ELEM(kthCol,k+MY,k) = - hordc - horac;
+      if (j != 1)  BAND_COL_ELEM(kthCol,k-1,k)  = - verdc;
+      if (j != MY) BAND_COL_ELEM(kthCol,k+1,k)  = - verdc;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Set initial conditions in u vector 
+ */
+
+static void SetIC(N_Vector u, UserData data)
+{
+  int i, j;
+  realtype x, y, dx, dy;
+  realtype *udata;
+
+  /* Extract needed constants from data */
+
+  dx = data->dx;
+  dy = data->dy;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profile into u vector */
+
+  for (j=1; j <= MY; j++) {
+    y = j*dy;
+    for (i=1; i <= MX; i++) {
+      x = i*dx;
+      IJth(udata,i,j) = x*(XMAX - x)*y*(YMAX - y)*SUNRexp(RCONST(5.0)*x*y);
+    }
+  }  
+
+}
+
+/*
+ * Print results after backward integration 
+ */
+
+static void PrintOutput(N_Vector uB, UserData data)
+{
+  realtype *uBdata, uBij, uBmax, x, y, dx, dy;
+  int i, j;
+
+  x = y = ZERO;
+
+  dx = data->dx;
+  dy = data->dy;
+
+  uBdata = N_VGetArrayPointer_Serial(uB);
+
+  uBmax = ZERO;
+  for(j=1; j<= MY; j++) {
+    for(i=1; i<=MX; i++) {
+      uBij = IJth(uBdata, i, j);
+      if (SUNRabs(uBij) > uBmax) {
+        uBmax = uBij;
+        x = i*dx;
+        y = j*dy;
+      }
+    }
+  }
+
+  printf("\nMaximum sensitivity\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("  lambda max = %Le\n", uBmax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("  lambda max = %e\n", uBmax);
+#else
+  printf("  lambda max = %e\n", uBmax);
+#endif
+  printf("at\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("  x = %Le\n  y = %Le\n", x, y);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("  x = %e\n  y = %e\n", x, y);
+#else
+  printf("  x = %e\n  y = %e\n", x, y);
+#endif
+
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsAdvDiff_ASAi_bnd.out b/examples/cvodes/serial/cvsAdvDiff_ASAi_bnd.out
new file mode 100644
index 0000000..64b15df
--- /dev/null
+++ b/examples/cvodes/serial/cvsAdvDiff_ASAi_bnd.out
@@ -0,0 +1,18 @@
+
+Create and allocate CVODES memory for forward runs
+
+Allocate global memory
+
+Forward integration
+
+ncheck = 3
+
+Create and allocate CVODES memory for backward run
+
+Backward integration
+
+Maximum sensitivity
+  lambda max = 1.128855e-01
+at
+  x = 1.170732e+00
+  y = 4.761905e-01
diff --git a/examples/cvodes/serial/cvsAdvDiff_FSA_non.c b/examples/cvodes/serial/cvsAdvDiff_FSA_non.c
new file mode 100644
index 0000000..1667246
--- /dev/null
+++ b/examples/cvodes/serial/cvsAdvDiff_FSA_non.c
@@ -0,0 +1,524 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4956 $
+ * $Date: 2016-09-23 11:15:59 -0700 (Fri, 23 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, George D. Byrne,
+ *              and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem, with the program for
+ * its solution by CVODES. The problem is the semi-discrete form of
+ * the advection-diffusion equation in 1-D:
+ *   du/dt = q1 * d^2 u / dx^2 + q2 * du/dx
+ * on the interval 0 <= x <= 2, and the time interval 0 <= t <= 5.
+ * Homogeneous Dirichlet boundary conditions are posed, and the
+ * initial condition is:
+ *   u(x,y,t=0) = x(2-x)exp(2x).
+ * The PDE is discretized on a uniform grid of size MX+2 with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX.
+ * This program solves the problem with the option for nonstiff
+ * systems: ADAMS method and functional iteration.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .5, 1.0, ..., 5.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * Optionally, CVODES can compute sensitivities with respect to the
+ * problem parameters q1 and q2.
+ * Any of three sensitivity methods (SIMULTANEOUS, STAGGERED, and
+ * STAGGERED1) can be used and sensitivities may be included in the
+ * error test or not (error control set on FULL or PARTIAL,
+ * respectively).
+ *
+ * Execution:
+ *
+ * If no sensitivities are desired:
+ *    % cvsAdvDiff_FSA_non -nosensi
+ * If sensitivities are to be computed:
+ *    % cvsAdvDiff_FSA_non -sensi sensi_meth err_con
+ * where sensi_meth is one of {sim, stg, stg1} and err_con is one of
+ * {t, f}.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+#define XMAX  RCONST(2.0)   /* domain boundary           */
+#define MX    10            /* mesh dimension            */
+#define NEQ   MX            /* number of equations       */
+#define ATOL  RCONST(1.e-5) /* scalar absolute tolerance */
+#define T0    RCONST(0.0)   /* initial time              */
+#define T1    RCONST(0.5)   /* first output time         */
+#define DTOUT RCONST(0.5)   /* output time increment     */
+#define NOUT  10            /* number of output times    */
+
+#define NP    2
+#define NS    2
+
+#define ZERO  RCONST(0.0)
+
+/* Type : UserData 
+   contains problem parameters, grid constants, work array. */
+
+typedef struct {
+  realtype *p;
+  realtype dx;
+} *UserData;
+
+/* Functions Called by the CVODES Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/* Private Helper Functions */
+
+static void ProcessArgs(int argc, char *argv[],
+                        booleantype *sensi, int *sensi_meth,
+			booleantype *err_con);
+static void WrongArgs(char *name);
+static void SetIC(N_Vector u, realtype dx);
+static void PrintOutput(void *cvode_mem, realtype t, N_Vector u);
+static void PrintOutputS(N_Vector *uS);
+static void PrintFinalStats(void *cvode_mem, booleantype sensi);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  void *cvode_mem;
+  UserData data;
+  realtype dx, reltol, abstol, t, tout;
+  N_Vector u;
+  int iout, flag;
+
+  realtype *pbar;
+  int is, *plist;
+  N_Vector *uS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  cvode_mem = NULL;
+  data = NULL;
+  u = NULL;
+  pbar = NULL;
+  plist = NULL;
+  uS = NULL;
+
+  /* Process arguments */
+  ProcessArgs(argc, argv, &sensi, &sensi_meth, &err_con);
+
+  /* Set user data */
+  data = (UserData) malloc(sizeof *data); /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  data->p = (realtype *) malloc(NP * sizeof(realtype));
+  dx = data->dx = XMAX/((realtype)(MX+1));
+  data->p[0] = RCONST(1.0);
+  data->p[1] = RCONST(0.5);
+
+  /* Allocate and set initial states */
+  u = N_VNew_Serial(NEQ);
+  if(check_flag((void *)u, "N_VNew_Serial", 0)) return(1);
+  SetIC(u, dx);
+
+  /* Set integration tolerances */
+  reltol = ZERO;
+  abstol = ATOL;
+
+  /* Create CVODES object */
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Allocate CVODES memory */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  printf("\n1-D advection-diffusion equation, mesh size =%3d\n", MX);
+
+  /* Sensitivity-related settings */
+  if(sensi) {
+
+    plist = (int *) malloc(NS * sizeof(int));
+    if(check_flag((void *)plist, "malloc", 2)) return(1);
+    for(is=0; is<NS; is++) plist[is] = is;
+
+    pbar  = (realtype *) malloc(NS * sizeof(realtype));
+    if(check_flag((void *)pbar, "malloc", 2)) return(1);
+    for(is=0; is<NS; is++) pbar[is] = data->p[plist[is]];
+
+    uS = N_VCloneVectorArray_Serial(NS, u);
+    if(check_flag((void *)uS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for(is=0;is<NS;is++)
+      N_VConst(ZERO, uS[is]);
+
+    flag = CVodeSensInit1(cvode_mem, NS, sensi_meth, NULL, uS);
+    if(check_flag(&flag, "CVodeSensInit1", 1)) return(1);
+
+    flag = CVodeSensEEtolerances(cvode_mem);
+    if(check_flag(&flag, "CVodeSensEEtolerances", 1)) return(1);
+
+    flag = CVodeSetSensErrCon(cvode_mem, err_con);
+    if(check_flag(&flag, "CVodeSetSensErrCon", 1)) return(1);
+
+    flag = CVodeSetSensDQMethod(cvode_mem, CV_CENTERED, ZERO);
+    if(check_flag(&flag, "CVodeSetSensDQMethod", 1)) return(1);
+
+    flag = CVodeSetSensParams(cvode_mem, data->p, pbar, plist);
+    if(check_flag(&flag, "CVodeSetSensParams", 1)) return(1);
+
+    printf("Sensitivity: YES ");
+    if(sensi_meth == CV_SIMULTANEOUS)   
+      printf("( SIMULTANEOUS +");
+    else 
+      if(sensi_meth == CV_STAGGERED) printf("( STAGGERED +");
+      else                           printf("( STAGGERED1 +");   
+    if(err_con) printf(" FULL ERROR CONTROL )");
+    else        printf(" PARTIAL ERROR CONTROL )");
+
+  } else {
+
+    printf("Sensitivity: NO ");
+
+  }
+
+  /* In loop over output points, call CVode, print results, test for error */
+
+  printf("\n\n");
+  printf("============================================================\n");
+  printf("     T     Q       H      NST                    Max norm   \n");
+  printf("============================================================\n");
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1)) break;
+    PrintOutput(cvode_mem, t, u);
+    if (sensi) {
+      flag = CVodeGetSens(cvode_mem, &t, uS);
+      if(check_flag(&flag, "CVodeGetSens", 1)) break;
+      PrintOutputS(uS);
+    } 
+    printf("------------------------------------------------------------\n");
+  }
+
+  /* Print final statistics */
+  PrintFinalStats(cvode_mem, sensi);
+
+  /* Free memory */
+  N_VDestroy_Serial(u);
+  if (sensi) {
+    N_VDestroyVectorArray_Serial(uS, NS);
+    free(plist);
+    free(pbar);
+  }
+  free(data->p);
+  free(data);
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * f routine. Compute f(t,u). 
+ */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype ui, ult, urt, hordc, horac, hdiff, hadv;
+  realtype dx;
+  realtype *udata, *dudata;
+  int i;
+  UserData data;
+
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Extract needed problem constants from data */
+  data = (UserData) user_data;
+  dx    = data->dx;
+  hordc = data->p[0]/(dx*dx);
+  horac = data->p[1]/(RCONST(2.0)*dx);
+
+  /* Loop over all grid points. */
+  for (i=0; i<NEQ; i++) {
+
+    /* Extract u at x_i and two neighboring points */
+    ui = udata[i];
+    if(i!=0) 
+      ult = udata[i-1];
+    else
+      ult = ZERO;
+    if(i!=NEQ-1)
+      urt = udata[i+1];
+    else
+      urt = ZERO;
+
+    /* Set diffusion and advection terms and load into udot */
+    hdiff = hordc*(ult - RCONST(2.0)*ui + urt);
+    hadv = horac*(urt - ult);
+    dudata[i] = hdiff + hadv;
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Process and verify arguments.
+ */
+
+static void ProcessArgs(int argc, char *argv[], 
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = CV_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = CV_STAGGERED;
+    else if (strcmp(argv[2],"stg1") == 0)
+      *sensi_meth = CV_STAGGERED1;
+    else 
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(argv[0]);
+  }
+
+}
+
+static void WrongArgs(char *name)
+{
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim, stg, or stg1\n");
+    printf("         err_con    = t or f\n");
+    
+    exit(0);
+}
+
+/* 
+ * Set initial conditions in u vector.
+ */
+
+static void SetIC(N_Vector u, realtype dx)
+{
+  int i;
+  realtype x;
+  realtype *udata;
+
+  /* Set pointer to data array and get local length of u. */
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profile into u vector */
+  for (i=0; i<NEQ; i++) {
+    x = (i+1)*dx;
+    udata[i] = x*(XMAX - x)*SUNRexp(RCONST(2.0)*x);
+  }  
+}
+
+/*
+ * Print current t, step count, order, stepsize, and max norm of solution  
+ */
+
+static void PrintOutput(void *cvode_mem, realtype t, N_Vector u)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%8.3Le %2d  %8.3Le %5ld\n", t, qu, hu ,nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu ,nst);
+#else
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu ,nst);
+#endif
+
+  printf("                                Solution       ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le \n", N_VMaxNorm(u));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e \n", N_VMaxNorm(u));
+#else
+  printf("%12.4e \n", N_VMaxNorm(u));
+#endif
+}
+
+/*
+ * Print max norm of sensitivities 
+ */
+
+static void PrintOutputS(N_Vector *uS)
+{
+  printf("                                Sensitivity 1  ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le \n", N_VMaxNorm(uS[0]));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e \n", N_VMaxNorm(uS[0]));
+#else
+  printf("%12.4e \n", N_VMaxNorm(uS[0]));
+#endif
+
+  printf("                                Sensitivity 2  ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le \n", N_VMaxNorm(uS[1]));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e \n", N_VMaxNorm(uS[1]));
+#else
+  printf("%12.4e \n", N_VMaxNorm(uS[1]));
+#endif
+}
+
+
+/*
+ * Print some final statistics located in the CVODES memory
+ */
+
+static void PrintFinalStats(void *cvode_mem, booleantype sensi)
+{
+  long int nst;
+  long int nfe, nsetups, nni, ncfn, netf;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  if (sensi) {
+    flag = CVodeGetSensNumRhsEvals(cvode_mem, &nfSe);
+    check_flag(&flag, "CVodeGetSensNumRhsEvals", 1);
+    flag = CVodeGetNumRhsEvalsSens(cvode_mem, &nfeS);
+    check_flag(&flag, "CVodeGetNumRhsEvalsSens", 1);
+    flag = CVodeGetSensNumLinSolvSetups(cvode_mem, &nsetupsS);
+    check_flag(&flag, "CVodeGetSensNumLinSolvSetups", 1);
+    flag = CVodeGetSensNumErrTestFails(cvode_mem, &netfS);
+    check_flag(&flag, "CVodeGetSensNumErrTestFails", 1);
+    flag = CVodeGetSensNumNonlinSolvIters(cvode_mem, &nniS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvIters", 1);
+    flag = CVodeGetSensNumNonlinSolvConvFails(cvode_mem, &ncfnS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvConvFails", 1);
+  }
+
+  printf("\nFinal Statistics\n\n");
+  printf("nst     = %5ld\n\n", nst);
+  printf("nfe     = %5ld\n",   nfe);
+  printf("netf    = %5ld    nsetups  = %5ld\n", netf, nsetups);
+  printf("nni     = %5ld    ncfn     = %5ld\n", nni, ncfn);
+
+  if(sensi) {
+    printf("\n");
+    printf("nfSe    = %5ld    nfeS     = %5ld\n", nfSe, nfeS);
+    printf("netfs   = %5ld    nsetupsS = %5ld\n", netfS, nsetupsS);
+    printf("nniS    = %5ld    ncfnS    = %5ld\n", nniS, ncfnS);
+  }
+
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsAdvDiff_FSA_non.out b/examples/cvodes/serial/cvsAdvDiff_FSA_non.out
new file mode 100644
index 0000000..4cb83ad
--- /dev/null
+++ b/examples/cvodes/serial/cvsAdvDiff_FSA_non.out
@@ -0,0 +1,69 @@
+
+1-D advection-diffusion equation, mesh size = 10
+Sensitivity: YES ( SIMULTANEOUS + FULL ERROR CONTROL )
+
+============================================================
+     T     Q       H      NST                    Max norm   
+============================================================
+5.000e-01  4  7.656e-03   115
+                                Solution         3.0529e+00 
+                                Sensitivity 1    3.8668e+00 
+                                Sensitivity 2    6.2020e-01 
+------------------------------------------------------------
+1.000e+00  4  9.525e-03   182
+                                Solution         8.7533e-01 
+                                Sensitivity 1    2.1743e+00 
+                                Sensitivity 2    1.8909e-01 
+------------------------------------------------------------
+1.500e+00  3  1.040e-02   255
+                                Solution         2.4949e-01 
+                                Sensitivity 1    9.1825e-01 
+                                Sensitivity 2    7.3922e-02 
+------------------------------------------------------------
+2.000e+00  2  1.271e-02   330
+                                Solution         7.1097e-02 
+                                Sensitivity 1    3.4667e-01 
+                                Sensitivity 2    2.8228e-02 
+------------------------------------------------------------
+2.500e+00  2  1.629e-02   402
+                                Solution         2.0260e-02 
+                                Sensitivity 1    1.2301e-01 
+                                Sensitivity 2    1.0085e-02 
+------------------------------------------------------------
+3.000e+00  2  3.820e-03   473
+                                Solution         5.7734e-03 
+                                Sensitivity 1    4.1956e-02 
+                                Sensitivity 2    3.4556e-03 
+------------------------------------------------------------
+3.500e+00  2  8.988e-03   540
+                                Solution         1.6451e-03 
+                                Sensitivity 1    1.3922e-02 
+                                Sensitivity 2    1.1669e-03 
+------------------------------------------------------------
+4.000e+00  2  1.199e-02   617
+                                Solution         4.6945e-04 
+                                Sensitivity 1    4.5300e-03 
+                                Sensitivity 2    3.8674e-04 
+------------------------------------------------------------
+4.500e+00  3  4.744e-03   680
+                                Solution         1.3422e-04 
+                                Sensitivity 1    1.4548e-03 
+                                Sensitivity 2    1.2589e-04 
+------------------------------------------------------------
+5.000e+00  1  4.010e-03   757
+                                Solution         3.8656e-05 
+                                Sensitivity 1    4.6451e-04 
+                                Sensitivity 2    4.0616e-05 
+------------------------------------------------------------
+
+Final Statistics
+
+nst     =   757
+
+nfe     =  1373
+netf    =     1    nsetups  =     0
+nni     =  1369    ncfn     =   117
+
+nfSe    =  2746    nfeS     =  5492
+netfs   =     0    nsetupsS =     0
+nniS    =     0    ncfnS    =     0
diff --git a/examples/cvodes/serial/cvsAdvDiff_bnd.c b/examples/cvodes/serial/cvsAdvDiff_bnd.c
new file mode 100644
index 0000000..22c3a1f
--- /dev/null
+++ b/examples/cvodes/serial/cvsAdvDiff_bnd.c
@@ -0,0 +1,424 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem with a banded Jacobian,
+ * with the program for its solution by CVODE.
+ * The problem is the semi-discrete form of the advection-diffusion
+ * equation in 2-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx + d^2 u / dy^2
+ * on the rectangle 0 <= x <= 2, 0 <= y <= 1, and the time
+ * interval 0 <= t <= 1. Homogeneous Dirichlet boundary conditions
+ * are posed, and the initial condition is
+ *   u(x,y,t=0) = x(2-x)y(1-y)exp(5xy).
+ * The PDE is discretized on a uniform MX+2 by MY+2 grid with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX*MY.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVBAND band linear solver, and a user-supplied
+ * Jacobian routine.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .1, .2, ..., 1.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+/* Header files with a description of contents used */
+
+#include <cvodes/cvodes.h>           /* prototypes for CVODE fcts. and consts. */
+#include <cvodes/cvodes_band.h>      /* prototype for CVBand */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., and macros */
+#include <sundials/sundials_band.h>  /* definitions of type DlsMat and macros */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+#include <sundials/sundials_math.h>  /* definition of ABS and EXP */
+
+/* Problem Constants */
+
+#define XMAX  RCONST(2.0)    /* domain boundaries         */
+#define YMAX  RCONST(1.0)
+#define MX    10             /* mesh dimensions           */
+#define MY    5
+#define NEQ   MX*MY          /* number of equations       */
+#define ATOL  RCONST(1.0e-5) /* scalar absolute tolerance */
+#define T0    RCONST(0.0)    /* initial time              */
+#define T1    RCONST(0.1)    /* first output time         */
+#define DTOUT RCONST(0.1)    /* output time increment     */
+#define NOUT  10             /* number of output times    */
+
+#define ZERO RCONST(0.0)
+#define HALF RCONST(0.5)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+#define FIVE RCONST(5.0)
+
+/* User-defined vector access macro IJth */
+
+/* IJth is defined in order to isolate the translation from the
+   mathematical 2-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. 
+   IJth(vdata,i,j) references the element in the vdata array for
+   u at mesh point (i,j), where 1 <= i <= MX, 1 <= j <= MY.
+   The vdata array is obtained via the macro call vdata = N_VGetArrayPointer_Serial(v),
+   where v is an N_Vector. 
+   The variables are ordered by the y index j, then by the x index i. */
+
+#define IJth(vdata,i,j) (vdata[(j-1) + (i-1)*MY])
+
+/* Type : UserData (contains grid constants) */
+
+typedef struct {
+  realtype dx, dy, hdcoef, hacoef, vdcoef;
+} *UserData;
+
+/* Private Helper Functions */
+
+static void SetIC(N_Vector u, UserData data);
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax);
+static void PrintOutput(realtype t, realtype umax, long int nst);
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main(void)
+{
+  realtype dx, dy, reltol, abstol, t, tout, umax;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag;
+  long int nst;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Create a serial vector */
+
+  u = N_VNew_Serial(NEQ);  /* Allocate u vector */
+  if(check_flag((void*)u, "N_VNew_Serial", 0)) return(1);
+
+  reltol = ZERO;  /* Set the tolerances */
+  abstol = ATOL;
+
+  data = (UserData) malloc(sizeof *data);  /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  dx = data->dx = XMAX/(MX+1);  /* Set grid coefficients in data */
+  dy = data->dy = YMAX/(MY+1);
+  data->hdcoef = ONE/(dx*dx);
+  data->hacoef = HALF/(TWO*dx);
+  data->vdcoef = ONE/(dy*dy);
+
+  SetIC(u, data);  /* Initialize u vector */
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerance */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVBand to specify the CVBAND band linear solver */
+  flag = CVBand(cvode_mem, NEQ, MY, MY);
+  if(check_flag(&flag, "CVBand", 1)) return(1);
+
+  /* Set the user-supplied Jacobian routine Jac */
+  flag = CVDlsSetBandJacFn(cvode_mem, Jac);
+  if(check_flag(&flag, "CVDlsSetBandJacFn", 1)) return(1);
+
+  /* In loop over output points: call CVode, print results, test for errors */
+
+  umax = N_VMaxNorm(u);
+  PrintHeader(reltol, abstol, umax);
+  for(iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1)) break;
+    umax = N_VMaxNorm(u);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1);
+    PrintOutput(t, umax, nst);
+  }
+
+  PrintFinalStats(cvode_mem);  /* Print some final statistics   */
+
+  N_VDestroy_Serial(u);   /* Free the u vector */
+  CVodeFree(&cvode_mem);  /* Free the integrator memory */
+  free(data);             /* Free the user data */
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u,N_Vector udot, void *user_data)
+{
+  realtype uij, udn, uup, ult, urt, hordc, horac, verdc, hdiff, hadv, vdiff;
+  realtype *udata, *dudata;
+  int i, j;
+  UserData data;
+
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Extract needed constants from data */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  /* Loop over all grid points. */
+
+  for (j=1; j <= MY; j++) {
+
+    for (i=1; i <= MX; i++) {
+
+      /* Extract u at x_i, y_j and four neighboring points */
+
+      uij = IJth(udata, i, j);
+      udn = (j == 1)  ? ZERO : IJth(udata, i, j-1);
+      uup = (j == MY) ? ZERO : IJth(udata, i, j+1);
+      ult = (i == 1)  ? ZERO : IJth(udata, i-1, j);
+      urt = (i == MX) ? ZERO : IJth(udata, i+1, j);
+
+      /* Set diffusion and advection terms and load into udot */
+
+      hdiff = hordc*(ult - TWO*uij + urt);
+      hadv = horac*(urt - ult);
+      vdiff = verdc*(uup - TWO*uij + udn);
+      IJth(dudata, i, j) = hdiff + hadv + vdiff;
+    }
+  }
+
+  return(0);
+}
+
+/* Jacobian routine. Compute J(t,u). */
+
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  long int i, j, k;
+  realtype *kthCol, hordc, horac, verdc;
+  UserData data;
+  
+  /*
+    The components of f = udot that depend on u(i,j) are
+    f(i,j), f(i-1,j), f(i+1,j), f(i,j-1), f(i,j+1), with
+      df(i,j)/du(i,j) = -2 (1/dx^2 + 1/dy^2)
+      df(i-1,j)/du(i,j) = 1/dx^2 + .25/dx  (if i > 1)
+      df(i+1,j)/du(i,j) = 1/dx^2 - .25/dx  (if i < MX)
+      df(i,j-1)/du(i,j) = 1/dy^2           (if j > 1)
+      df(i,j+1)/du(i,j) = 1/dy^2           (if j < MY)
+  */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+  
+  for (j=1; j <= MY; j++) {
+    for (i=1; i <= MX; i++) {
+      k = j-1 + (i-1)*MY;
+      kthCol = BAND_COL(J,k);
+
+      /* set the kth column of J */
+
+      BAND_COL_ELEM(kthCol,k,k) = -TWO*(verdc+hordc);
+      if (i != 1)  BAND_COL_ELEM(kthCol,k-MY,k) = hordc + horac;
+      if (i != MX) BAND_COL_ELEM(kthCol,k+MY,k) = hordc - horac;
+      if (j != 1)  BAND_COL_ELEM(kthCol,k-1,k)  = verdc;
+      if (j != MY) BAND_COL_ELEM(kthCol,k+1,k)  = verdc;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Set initial conditions in u vector */
+
+static void SetIC(N_Vector u, UserData data)
+{
+  int i, j;
+  realtype x, y, dx, dy;
+  realtype *udata;
+
+  /* Extract needed constants from data */
+
+  dx = data->dx;
+  dy = data->dy;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profile into u vector */
+  
+  for (j=1; j <= MY; j++) {
+    y = j*dy;
+    for (i=1; i <= MX; i++) {
+      x = i*dx;
+      IJth(udata,i,j) = x*(XMAX - x)*y*(YMAX - y)*SUNRexp(FIVE*x*y);
+    }
+  }  
+}
+
+/* Print first lines of output (problem description) */
+
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax)
+{
+  printf("\n2-D Advection-Diffusion Equation\n");
+  printf("Mesh dimensions = %d X %d\n", MX, MY);
+  printf("Total system size = %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters: reltol = %Lg   abstol = %Lg\n\n", reltol, abstol);
+  printf("At t = %Lg      max.norm(u) =%14.6Le \n", T0, umax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters: reltol = %g   abstol = %g\n\n", reltol, abstol);
+  printf("At t = %g      max.norm(u) =%14.6e \n", T0, umax);
+#else
+  printf("Tolerance parameters: reltol = %g   abstol = %g\n\n", reltol, abstol);
+  printf("At t = %g      max.norm(u) =%14.6e \n", T0, umax);
+#endif
+
+  return;
+}
+
+/* Print current value */
+
+static void PrintOutput(realtype t, realtype umax, long int nst)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %4.2Lf   max.norm(u) =%14.6Le   nst = %4ld\n", t, umax, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %4.2f   max.norm(u) =%14.6e   nst = %4ld\n", t, umax, nst);
+#else
+  printf("At t = %4.2f   max.norm(u) =%14.6e   nst = %4ld\n", t, umax, nst);
+#endif
+
+  return;
+}
+
+/* Get and print some final statistics */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  int flag;
+  long int nst, nfe, nsetups, netf, nni, ncfn, nje, nfeLS;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %ld\n \n",
+	 nni, ncfn, netf);
+
+  return;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsAdvDiff_bnd.out b/examples/cvodes/serial/cvsAdvDiff_bnd.out
new file mode 100644
index 0000000..c48de03
--- /dev/null
+++ b/examples/cvodes/serial/cvsAdvDiff_bnd.out
@@ -0,0 +1,22 @@
+
+2-D Advection-Diffusion Equation
+Mesh dimensions = 10 X 5
+Total system size = 50
+Tolerance parameters: reltol = 0   abstol = 1e-05
+
+At t = 0      max.norm(u) =  8.954716e+01 
+At t = 0.10   max.norm(u) =  4.132889e+00   nst =   85
+At t = 0.20   max.norm(u) =  1.039294e+00   nst =  103
+At t = 0.30   max.norm(u) =  2.979829e-01   nst =  113
+At t = 0.40   max.norm(u) =  8.765774e-02   nst =  120
+At t = 0.50   max.norm(u) =  2.625637e-02   nst =  126
+At t = 0.60   max.norm(u) =  7.830425e-03   nst =  130
+At t = 0.70   max.norm(u) =  2.329387e-03   nst =  134
+At t = 0.80   max.norm(u) =  6.953434e-04   nst =  137
+At t = 0.90   max.norm(u) =  2.115983e-04   nst =  140
+At t = 1.00   max.norm(u) =  6.556853e-05   nst =  142
+
+Final Statistics:
+nst = 142    nfe  = 174    nsetups = 23     nfeLS = 0      nje = 3
+nni = 170    ncfn = 0      netf = 3
+ 
diff --git a/examples/cvodes/serial/cvsAdvDiff_bndL.c b/examples/cvodes/serial/cvsAdvDiff_bndL.c
new file mode 100644
index 0000000..c61c643
--- /dev/null
+++ b/examples/cvodes/serial/cvsAdvDiff_bndL.c
@@ -0,0 +1,421 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem with a banded Jacobian,
+ * with the program for its solution by CVODE.
+ * The problem is the semi-discrete form of the advection-diffusion
+ * equation in 2-D:
+ *   du/dt = d^2 u / dx^2 + .5 du/dx + d^2 u / dy^2
+ * on the rectangle 0 <= x <= 2, 0 <= y <= 1, and the time
+ * interval 0 <= t <= 1. Homogeneous Dirichlet boundary conditions
+ * are posed, and the initial condition is
+ *   u(x,y,t=0) = x(2-x)y(1-y)exp(5xy).
+ * The PDE is discretized on a uniform MX+2 by MY+2 grid with
+ * central differencing, and with boundary values eliminated,
+ * leaving an ODE system of size NEQ = MX*MY.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the LAPACK band linear solver, and a user-supplied
+ * Jacobian routine.
+ * It uses scalar relative and absolute tolerances.
+ * Output is printed at t = .1, .2, ..., 1.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+/* Header files with a description of contents used */
+
+#include <cvodes/cvodes.h>           /* prototypes for CVODE fcts. and consts. */
+#include <cvodes/cvodes_lapack.h>    /* prototype for CVLapackBand */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., and macros */
+#include <sundials/sundials_math.h>  /* definition of ABS and EXP */
+
+/* Problem Constants */
+
+#define XMAX  RCONST(2.0)    /* domain boundaries         */
+#define YMAX  RCONST(1.0)
+#define MX    10             /* mesh dimensions           */
+#define MY    5
+#define NEQ   MX*MY          /* number of equations       */
+#define ATOL  RCONST(1.0e-5) /* scalar absolute tolerance */
+#define T0    RCONST(0.0)    /* initial time              */
+#define T1    RCONST(0.1)    /* first output time         */
+#define DTOUT RCONST(0.1)    /* output time increment     */
+#define NOUT  10             /* number of output times    */
+
+#define ZERO RCONST(0.0)
+#define HALF RCONST(0.5)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+#define FIVE RCONST(5.0)
+
+/* User-defined vector access macro IJth */
+
+/* IJth is defined in order to isolate the translation from the
+   mathematical 2-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. 
+   IJth(vdata,i,j) references the element in the vdata array for
+   u at mesh point (i,j), where 1 <= i <= MX, 1 <= j <= MY.
+   The vdata array is obtained via the macro call vdata = N_VGetArrayPointer_Serial(v),
+   where v is an N_Vector. 
+   The variables are ordered by the y index j, then by the x index i. */
+
+#define IJth(vdata,i,j) (vdata[(j-1) + (i-1)*MY])
+
+/* Type : UserData (contains grid constants) */
+
+typedef struct {
+  realtype dx, dy, hdcoef, hacoef, vdcoef;
+} *UserData;
+
+/* Private Helper Functions */
+
+static void SetIC(N_Vector u, UserData data);
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax);
+static void PrintOutput(realtype t, realtype umax, long int nst);
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main(void)
+{
+  realtype dx, dy, reltol, abstol, t, tout, umax;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag;
+  long int nst;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Create a serial vector */
+
+  u = N_VNew_Serial(NEQ);  /* Allocate u vector */
+  if(check_flag((void*)u, "N_VNew_Serial", 0)) return(1);
+
+  reltol = ZERO;  /* Set the tolerances */
+  abstol = ATOL;
+
+  data = (UserData) malloc(sizeof *data);  /* Allocate data memory */
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  dx = data->dx = XMAX/(MX+1);  /* Set grid coefficients in data */
+  dy = data->dy = YMAX/(MY+1);
+  data->hdcoef = ONE/(dx*dx);
+  data->hacoef = HALF/(TWO*dx);
+  data->vdcoef = ONE/(dy*dy);
+
+  SetIC(u, data);  /* Initialize u vector */
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerance */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVLapackBand to specify the CVBAND band linear solver */
+  flag = CVLapackBand(cvode_mem, NEQ, MY, MY);
+  if(check_flag(&flag, "CVLapackBand", 1)) return(1);
+
+  /* Set the user-supplied Jacobian routine Jac */
+  flag = CVDlsSetBandJacFn(cvode_mem, Jac);
+  if(check_flag(&flag, "CVDlsSetBandJacFn", 1)) return(1);
+
+  /* In loop over output points: call CVode, print results, test for errors */
+  umax = N_VMaxNorm(u);
+  PrintHeader(reltol, abstol, umax);
+  for(iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1)) break;
+    umax = N_VMaxNorm(u);
+    flag = CVodeGetNumSteps(cvode_mem, &nst);
+    check_flag(&flag, "CVodeGetNumSteps", 1);
+    PrintOutput(t, umax, nst);
+  }
+
+  PrintFinalStats(cvode_mem);  /* Print some final statistics   */
+
+  N_VDestroy_Serial(u);   /* Free the u vector */
+  CVodeFree(&cvode_mem);  /* Free the integrator memory */
+  free(data);             /* Free the user data */
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u,N_Vector udot, void *user_data)
+{
+  realtype uij, udn, uup, ult, urt, hordc, horac, verdc, hdiff, hadv, vdiff;
+  realtype *udata, *dudata;
+  int i, j;
+  UserData data;
+
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Extract needed constants from data */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  /* Loop over all grid points. */
+
+  for (j=1; j <= MY; j++) {
+
+    for (i=1; i <= MX; i++) {
+
+      /* Extract u at x_i, y_j and four neighboring points */
+
+      uij = IJth(udata, i, j);
+      udn = (j == 1)  ? ZERO : IJth(udata, i, j-1);
+      uup = (j == MY) ? ZERO : IJth(udata, i, j+1);
+      ult = (i == 1)  ? ZERO : IJth(udata, i-1, j);
+      urt = (i == MX) ? ZERO : IJth(udata, i+1, j);
+
+      /* Set diffusion and advection terms and load into udot */
+
+      hdiff = hordc*(ult - TWO*uij + urt);
+      hadv = horac*(urt - ult);
+      vdiff = verdc*(uup - TWO*uij + udn);
+      IJth(dudata, i, j) = hdiff + hadv + vdiff;
+    }
+  }
+
+  return(0);
+}
+
+/* Jacobian routine. Compute J(t,u). */
+
+static int Jac(long int N, long int mu, long int ml,
+               realtype t, N_Vector u, N_Vector fu, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int i, j, k;
+  realtype *kthCol, hordc, horac, verdc;
+  UserData data;
+  
+  /*
+   * The components of f = udot that depend on u(i,j) are
+   * f(i,j), f(i-1,j), f(i+1,j), f(i,j-1), f(i,j+1), with
+   *   df(i,j)/du(i,j) = -2 (1/dx^2 + 1/dy^2)
+   *   df(i-1,j)/du(i,j) = 1/dx^2 + .25/dx  (if i > 1)
+   *   df(i+1,j)/du(i,j) = 1/dx^2 - .25/dx  (if i < MX)
+   *   df(i,j-1)/du(i,j) = 1/dy^2           (if j > 1)
+   *   df(i,j+1)/du(i,j) = 1/dy^2           (if j < MY)
+   */
+
+  data = (UserData) user_data;
+  hordc = data->hdcoef;
+  horac = data->hacoef;
+  verdc = data->vdcoef;
+
+  /* set non-zero Jacobian entries */
+  for (j=1; j <= MY; j++) {
+    for (i=1; i <= MX; i++) {
+      k = j-1 + (i-1)*MY;
+      kthCol = BAND_COL(J,k);
+
+      /* set the kth column of J */
+
+      BAND_COL_ELEM(kthCol,k,k) = -TWO*(verdc+hordc);
+      if (i != 1)  BAND_COL_ELEM(kthCol,k-MY,k) = hordc + horac;
+      if (i != MX) BAND_COL_ELEM(kthCol,k+MY,k) = hordc - horac;
+      if (j != 1)  BAND_COL_ELEM(kthCol,k-1,k)  = verdc;
+      if (j != MY) BAND_COL_ELEM(kthCol,k+1,k)  = verdc;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Set initial conditions in u vector */
+
+static void SetIC(N_Vector u, UserData data)
+{
+  int i, j;
+  realtype x, y, dx, dy;
+  realtype *udata;
+
+  /* Extract needed constants from data */
+
+  dx = data->dx;
+  dy = data->dy;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profile into u vector */
+  
+  for (j=1; j <= MY; j++) {
+    y = j*dy;
+    for (i=1; i <= MX; i++) {
+      x = i*dx;
+      IJth(udata,i,j) = x*(XMAX - x)*y*(YMAX - y)*SUNRexp(FIVE*x*y);
+    }
+  }  
+}
+
+/* Print first lines of output (problem description) */
+
+static void PrintHeader(realtype reltol, realtype abstol, realtype umax)
+{
+  printf("\n2-D Advection-Diffusion Equation\n");
+  printf("Mesh dimensions = %d X %d\n", MX, MY);
+  printf("Total system size = %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters: reltol = %Lg   abstol = %Lg\n\n", reltol, abstol);
+  printf("At t = %Lg      max.norm(u) =%14.6Le \n", T0, umax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters: reltol = %lg   abstol = %lg\n\n", reltol, abstol);
+  printf("At t = %lg      max.norm(u) =%14.6le \n", T0, umax);
+#else
+  printf("Tolerance parameters: reltol = %g   abstol = %g\n\n", reltol, abstol);
+  printf("At t = %g      max.norm(u) =%14.6e \n", T0, umax);
+#endif
+
+  return;
+}
+
+/* Print current value */
+
+static void PrintOutput(realtype t, realtype umax, long int nst)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %4.2Lf   max.norm(u) =%14.6Le   nst = %4ld\n", t, umax, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %4.2f   max.norm(u) =%14.6le   nst = %4ld\n", t, umax, nst);
+#else
+  printf("At t = %4.2f   max.norm(u) =%14.6e   nst = %4ld\n", t, umax, nst);
+#endif
+
+  return;
+}
+
+/* Get and print some final statistics */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  int flag;
+  long int nst, nfe, nsetups, netf, nni, ncfn, nje, nfeLS;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %ld\n \n",
+	 nni, ncfn, netf);
+
+  return;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsAdvDiff_bndL.out b/examples/cvodes/serial/cvsAdvDiff_bndL.out
new file mode 100644
index 0000000..c48de03
--- /dev/null
+++ b/examples/cvodes/serial/cvsAdvDiff_bndL.out
@@ -0,0 +1,22 @@
+
+2-D Advection-Diffusion Equation
+Mesh dimensions = 10 X 5
+Total system size = 50
+Tolerance parameters: reltol = 0   abstol = 1e-05
+
+At t = 0      max.norm(u) =  8.954716e+01 
+At t = 0.10   max.norm(u) =  4.132889e+00   nst =   85
+At t = 0.20   max.norm(u) =  1.039294e+00   nst =  103
+At t = 0.30   max.norm(u) =  2.979829e-01   nst =  113
+At t = 0.40   max.norm(u) =  8.765774e-02   nst =  120
+At t = 0.50   max.norm(u) =  2.625637e-02   nst =  126
+At t = 0.60   max.norm(u) =  7.830425e-03   nst =  130
+At t = 0.70   max.norm(u) =  2.329387e-03   nst =  134
+At t = 0.80   max.norm(u) =  6.953434e-04   nst =  137
+At t = 0.90   max.norm(u) =  2.115983e-04   nst =  140
+At t = 1.00   max.norm(u) =  6.556853e-05   nst =  142
+
+Final Statistics:
+nst = 142    nfe  = 174    nsetups = 23     nfeLS = 0      nje = 3
+nni = 170    ncfn = 0      netf = 3
+ 
diff --git a/examples/cvodes/serial/cvsDirectDemo_ls.c b/examples/cvodes/serial/cvsDirectDemo_ls.c
new file mode 100644
index 0000000..923e032
--- /dev/null
+++ b/examples/cvodes/serial/cvsDirectDemo_ls.c
@@ -0,0 +1,790 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4868 $
+ * $Date: 2016-08-19 10:16:31 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Demonstration program for CVODE - direct linear solvers.
+ * Two separate problems are solved using both the CV_ADAMS and CV_BDF
+ * linear multistep methods in combination with CV_FUNCTIONAL and
+ * CV_NEWTON iterations:
+ *
+ * Problem 1: Van der Pol oscillator
+ *   xdotdot - 3*(1 - x^2)*xdot + x = 0, x(0) = 2, xdot(0) = 0.
+ * This second-order ODE is converted to a first-order system by
+ * defining y0 = x and y1 = xdot.
+ * The NEWTON iteration cases use the following types of Jacobian
+ * approximation: (1) dense, user-supplied, (2) dense, difference
+ * quotient approximation, (3) diagonal approximation.
+ *
+ * Problem 2: ydot = A * y, where A is a banded lower triangular
+ * matrix derived from 2-D advection PDE.
+ * The NEWTON iteration cases use the following types of Jacobian
+ * approximation: (1) band, user-supplied, (2) band, difference
+ * quotient approximation, (3) diagonal approximation.
+ *
+ * For each problem, in the series of eight runs, CVodeInit is
+ * called only once, for the first run, whereas CVodeReInit is
+ * called for each of the remaining seven runs.
+ *
+ * Notes: This program demonstrates the usage of the sequential
+ * macros NV_Ith_S, DENSE_ELEM, BAND_COL, and
+ * BAND_COL_ELEM. The NV_Ith_S macro is used to reference the
+ * components of an N_Vector. It works for any size N=NEQ, but
+ * due to efficiency concerns it should only by used when the
+ * problem size is small. The Problem 1 right hand side and
+ * Jacobian functions f1 and Jac1 both use NV_Ith_S. The 
+ * N_VGetArrayPointer_Serial function gives the user access to the 
+ * memory used for the component storage of an N_Vector. In the 
+ * sequential case, the user may assume that this is one contiguous 
+ * array of reals. The N_VGetArrayPointer_Serial function
+ * gives a more efficient means (than the NV_Ith_S macro) to
+ * access the components of an N_Vector and should be used when the
+ * problem size is large. The Problem 2 right hand side function f2
+ * uses the N_VGetArrayPointer_Serial function. The DENSE_ELEM macro 
+ * used in Jac1 gives access to an element of a dense matrix of type 
+ * DlsMat. It should be used only when the problem size is small (the 
+ * size of a DlsMat is NEQ x NEQ) due to efficiency concerns. For
+ * larger problem sizes, the macro DENSE_COL can be used in order
+ * to work directly with a column of a DlsMat. The BAND_COL and
+ * BAND_COL_ELEM allow efficient columnwise access to the elements
+ * of a band matrix of type DlsMat. These macros are used in the
+ * Jac2 function.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>             /* main integrator header file */
+#include <cvodes/cvodes_dense.h>       /* use CVDENSE linear solver */
+#include <cvodes/cvodes_band.h>        /* use CVBAND linear solver */
+#include <cvodes/cvodes_diag.h>        /* use CVDIAG linear solver */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fct. and macros */
+#include <sundials/sundials_types.h> /* definition of realtype */
+#include <sundials/sundials_math.h>  /* contains the macros ABS, SUNSQR, and EXP*/
+
+/* Shared Problem Constants */
+
+#define ATOL RCONST(1.0e-6)
+#define RTOL RCONST(0.0)
+
+#define ZERO   RCONST(0.0)
+#define ONE    RCONST(1.0)
+#define TWO    RCONST(2.0)
+#define THIRTY RCONST(30.0)
+
+/* Problem #1 Constants */
+
+#define P1_NEQ        2
+#define P1_ETA        RCONST(3.0)
+#define P1_NOUT       4
+#define P1_T0         RCONST(0.0)
+#define P1_T1         RCONST(1.39283880203)
+#define P1_DTOUT      RCONST(2.214773875)
+#define P1_TOL_FACTOR RCONST(1.0e4)
+
+/* Problem #2 Constants */
+
+#define P2_MESHX      5
+#define P2_MESHY      5
+#define P2_NEQ        P2_MESHX*P2_MESHY
+#define P2_ALPH1      RCONST(1.0)
+#define P2_ALPH2      RCONST(1.0)
+#define P2_NOUT       5
+#define P2_ML         5
+#define P2_MU         0
+#define P2_T0         RCONST(0.0)
+#define P2_T1         RCONST(0.01)
+#define P2_TOUT_MULT  RCONST(10.0)
+#define P2_TOL_FACTOR RCONST(1.0e3)
+
+/* Linear Solver Options */
+
+enum {FUNC, DENSE_USER, DENSE_DQ, DIAG, BAND_USER, BAND_DQ};
+
+/* Private Helper Functions */
+
+static int  Problem1(void);
+static void PrintIntro1(void);
+static void PrintHeader1(void);
+static void PrintOutput1(realtype t, realtype y0, realtype y1, int qu, realtype hu);
+static int  Problem2(void);
+static void PrintIntro2(void);
+static void PrintHeader2(void);
+static void PrintOutput2(realtype t, realtype erm, int qu, realtype hu);
+static realtype MaxError(N_Vector y, realtype t);
+static int PrepareNextRun(void *cvode_mem, int lmm, int miter, long int mu,
+                          long int ml);
+static void PrintErrOutput(realtype tol_factor);
+static void PrintFinalStats(void *cvode_mem, int miter, realtype ero);
+static void PrintErrInfo(int nerr);
+
+/* Functions Called by the Solver */
+
+static int f1(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac1(long int N, realtype tn,
+                N_Vector y, N_Vector fy, 
+                DlsMat J, void *user_data,
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int f2(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac2(long int N, long int mu, long int ml, 
+                realtype tn, N_Vector y, N_Vector fy, 
+                DlsMat J, void *user_data,
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Implementation */
+
+int main(void)
+{
+  int nerr;
+
+  nerr = Problem1();
+  nerr += Problem2();
+  PrintErrInfo(nerr);
+
+  return(0);
+}
+
+static int Problem1(void)
+{
+  realtype reltol=RTOL, abstol=ATOL, t, tout, ero, er;
+  int miter, flag, temp_flag, iout, nerr=0;
+  N_Vector y;
+  void *cvode_mem;
+  booleantype firstrun;
+  int qu;
+  realtype hu;
+
+  y = NULL;
+  cvode_mem = NULL;
+
+  y = N_VNew_Serial(P1_NEQ);
+  if(check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  PrintIntro1();
+
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  for (miter=FUNC; miter <= DIAG; miter++) {
+    ero = ZERO;
+    NV_Ith_S(y,0) = TWO;
+    NV_Ith_S(y,1) = ZERO;
+
+    firstrun = (miter==FUNC);
+    if (firstrun) {
+      flag = CVodeInit(cvode_mem, f1, P1_T0, y);
+      if(check_flag(&flag, "CVodeInit", 1)) return(1);
+      flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+      if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+    } else {
+      flag = CVodeSetIterType(cvode_mem, CV_NEWTON);
+      if(check_flag(&flag, "CVodeSetIterType", 1)) ++nerr;
+      flag = CVodeReInit(cvode_mem, P1_T0, y);
+      if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+    }
+      
+    flag = PrepareNextRun(cvode_mem, CV_ADAMS, miter, 0, 0);
+    if(check_flag(&flag, "PrepareNextRun", 1)) return(1);
+
+    PrintHeader1();
+
+    for(iout=1, tout=P1_T1; iout <= P1_NOUT; iout++, tout += P1_DTOUT) {
+      flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+      check_flag(&flag, "CVode", 1);
+      temp_flag = CVodeGetLastOrder(cvode_mem, &qu);
+      if(check_flag(&temp_flag, "CVodeGetLastOrder", 1)) ++nerr;
+      temp_flag = CVodeGetLastStep(cvode_mem, &hu);
+      if(check_flag(&temp_flag, "CVodeGetLastStep", 1)) ++nerr;
+      PrintOutput1(t, NV_Ith_S(y,0), NV_Ith_S(y,1), qu, hu);
+      if (flag != CV_SUCCESS) {
+        nerr++;
+        break;
+      }
+      if (iout%2 == 0) {
+        er = SUNRabs(NV_Ith_S(y,0)) / abstol;
+        if (er > ero) ero = er;
+        if (er > P1_TOL_FACTOR) {
+          nerr++;
+	  PrintErrOutput(P1_TOL_FACTOR);
+        }
+      }
+    }
+    
+    PrintFinalStats(cvode_mem, miter, ero);
+  }
+
+  CVodeFree(&cvode_mem);
+
+  cvode_mem = CVodeCreate(CV_BDF, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  for (miter=FUNC; miter <= DIAG; miter++) {
+    ero = ZERO;
+    NV_Ith_S(y,0) = TWO;
+    NV_Ith_S(y,1) = ZERO;
+      
+    firstrun = (miter==FUNC);
+    if (firstrun) {
+      flag = CVodeInit(cvode_mem, f1, P1_T0, y);
+      if(check_flag(&flag, "CVodeInit", 1)) return(1);
+      flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+      if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+    } else {
+      flag = CVodeSetIterType(cvode_mem, CV_NEWTON);
+      if(check_flag(&flag, "CVodeSetIterType", 1)) ++nerr;
+      flag = CVodeReInit(cvode_mem, P1_T0, y);
+      if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+    }
+      
+    flag = PrepareNextRun(cvode_mem, CV_BDF, miter, 0, 0);     
+    if(check_flag(&flag, "PrepareNextRun", 1)) return(1);
+
+    PrintHeader1();
+      
+    for(iout=1, tout=P1_T1; iout <= P1_NOUT; iout++, tout += P1_DTOUT) {
+      flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+      check_flag(&flag, "CVode", 1);
+      temp_flag = CVodeGetLastOrder(cvode_mem, &qu);
+      if(check_flag(&temp_flag, "CVodeGetLastOrder", 1)) ++nerr;
+      temp_flag = CVodeGetLastStep(cvode_mem, &hu);
+      if(check_flag(&temp_flag, "CVodeGetLastStep", 1)) ++nerr;
+      PrintOutput1(t, NV_Ith_S(y,0), NV_Ith_S(y,1), qu, hu);
+      if (flag != CV_SUCCESS) {
+        nerr++;
+        break;
+      }
+      if (iout%2 == 0) {
+        er = SUNRabs(NV_Ith_S(y,0)) / abstol;
+        if (er > ero) ero = er;
+        if (er > P1_TOL_FACTOR) {
+          nerr++;
+          PrintErrOutput(P1_TOL_FACTOR);
+        }
+      }
+    }
+    
+    PrintFinalStats(cvode_mem, miter, ero);
+  }
+
+  CVodeFree(&cvode_mem);
+  N_VDestroy_Serial(y);
+
+  return(nerr);
+}
+
+static void PrintIntro1(void)
+{
+  printf("Demonstration program for CVODE package - direct linear solvers\n");
+  printf("\n\n");
+  printf("Problem 1: Van der Pol oscillator\n");
+  printf(" xdotdot - 3*(1 - x^2)*xdot + x = 0, x(0) = 2, xdot(0) = 0\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf(" neq = %d,  reltol = %.2Lg,  abstol = %.2Lg",
+	 P1_NEQ, RTOL, ATOL);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf(" neq = %d,  reltol = %.2g,  abstol = %.2g",
+	 P1_NEQ, RTOL, ATOL);
+#else
+  printf(" neq = %d,  reltol = %.2g,  abstol = %.2g",
+	 P1_NEQ, RTOL, ATOL);
+#endif
+}
+
+static void PrintHeader1(void)
+{
+  printf("\n     t           x              xdot         qu     hu \n");
+
+  return;
+}
+
+static void PrintOutput1(realtype t, realtype y0, realtype y1, int qu, realtype hu)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%10.5Lf    %12.5Le   %12.5Le   %2d    %6.4Le\n", t, y0, y1, qu, hu);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%10.5f    %12.5e   %12.5e   %2d    %6.4e\n", t, y0, y1, qu, hu);
+#else
+  printf("%10.5f    %12.5e   %12.5e   %2d    %6.4e\n", t, y0, y1, qu, hu);
+#endif
+
+  return;
+}
+
+static int f1(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y0, y1;
+  
+  y0 = NV_Ith_S(y,0);
+  y1 = NV_Ith_S(y,1);
+
+  NV_Ith_S(ydot,0) = y1;
+  NV_Ith_S(ydot,1) = (ONE - SUNSQR(y0))* P1_ETA * y1 - y0;
+
+  return(0);
+} 
+
+static int Jac1(long int N, realtype tn,
+                N_Vector y, N_Vector fy, 
+                DlsMat J, void *user_data,
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y0, y1;
+
+  y0 = NV_Ith_S(y,0);
+  y1 = NV_Ith_S(y,1);
+
+  DENSE_ELEM(J,0,1) = ONE;
+  DENSE_ELEM(J,1,0) = -TWO * P1_ETA * y0 * y1 - ONE;
+  DENSE_ELEM(J,1,1) = P1_ETA * (ONE - SUNSQR(y0));
+
+  return(0);
+}
+
+static int Problem2(void)
+{
+  realtype reltol=RTOL, abstol=ATOL, t, tout, er, erm, ero;
+  int miter, flag, temp_flag, nerr=0;
+  N_Vector y;
+  void *cvode_mem;
+  booleantype firstrun;
+  int qu, iout;
+  realtype hu;
+
+  y = NULL;
+  cvode_mem = NULL;
+
+  y = N_VNew_Serial(P2_NEQ);
+  if(check_flag((void *)y, "N_VNew", 0)) return(1);
+
+  PrintIntro2();
+
+  cvode_mem = CVodeCreate(CV_ADAMS, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  for (miter=FUNC; miter <= BAND_DQ; miter++) {
+    if ((miter==DENSE_USER) || (miter==DENSE_DQ)) continue;
+    ero = ZERO;
+    N_VConst(ZERO, y);
+    NV_Ith_S(y,0) = ONE;
+      
+    firstrun = (miter==FUNC);
+    if (firstrun) {
+      flag = CVodeInit(cvode_mem, f2, P2_T0, y);
+      if(check_flag(&flag, "CVodeInit", 1)) return(1);
+      flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+      if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+    } else {
+      flag = CVodeSetIterType(cvode_mem, CV_NEWTON);
+      if(check_flag(&flag, "CVodeSetIterType", 1)) ++nerr;
+      flag = CVodeReInit(cvode_mem, P2_T0, y);
+      if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+    }
+      
+    flag = PrepareNextRun(cvode_mem, CV_ADAMS, miter, P2_MU, P2_ML);
+    if(check_flag(&flag, "PrepareNextRun", 1)) return(1);
+
+    PrintHeader2();
+
+    for(iout=1, tout=P2_T1; iout <= P2_NOUT; iout++, tout*=P2_TOUT_MULT) {
+      flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+      check_flag(&flag, "CVode", 1);
+      erm = MaxError(y, t);
+      temp_flag = CVodeGetLastOrder(cvode_mem, &qu);
+      if(check_flag(&temp_flag, "CVodeGetLastOrder", 1)) ++nerr;
+      temp_flag = CVodeGetLastStep(cvode_mem, &hu);
+      if(check_flag(&temp_flag, "CVodeGetLastStep", 1)) ++nerr;
+      PrintOutput2(t, erm, qu, hu);
+      if (flag != CV_SUCCESS) {
+        nerr++;
+        break;
+      }
+      er = erm / abstol;
+        if (er > ero) ero = er;
+        if (er > P2_TOL_FACTOR) {
+          nerr++;
+          PrintErrOutput(P2_TOL_FACTOR);
+        }
+    }
+    
+    PrintFinalStats(cvode_mem, miter, ero);
+  }
+
+  CVodeFree(&cvode_mem);
+
+  cvode_mem = CVodeCreate(CV_BDF, CV_FUNCTIONAL);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  for (miter=FUNC; miter <= BAND_DQ; miter++) {
+    if ((miter==DENSE_USER) || (miter==DENSE_DQ)) continue;
+    ero = ZERO;
+    N_VConst(ZERO, y);
+    NV_Ith_S(y,0) = ONE;
+      
+    firstrun = (miter==FUNC);
+    if (firstrun) {
+      flag = CVodeInit(cvode_mem, f2, P2_T0, y);
+      if(check_flag(&flag, "CVodeInit", 1)) return(1);
+      flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+      if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+    } else {
+      flag = CVodeSetIterType(cvode_mem, CV_NEWTON);
+      if(check_flag(&flag, "CVodeSetIterType", 1)) ++nerr;
+      flag = CVodeReInit(cvode_mem, P2_T0, y);
+      if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+    }
+
+    flag = PrepareNextRun(cvode_mem, CV_BDF, miter, P2_MU, P2_ML);
+    if(check_flag(&flag, "PrepareNextRun", 1)) return(1);
+
+    PrintHeader2();
+      
+    for(iout=1, tout=P2_T1; iout <= P2_NOUT; iout++, tout*=P2_TOUT_MULT) {
+      flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+      check_flag(&flag, "CVode", 1);
+      erm = MaxError(y, t);
+      temp_flag = CVodeGetLastOrder(cvode_mem, &qu);
+      if(check_flag(&temp_flag, "CVodeGetLastOrder", 1)) ++nerr;
+      temp_flag = CVodeGetLastStep(cvode_mem, &hu);
+      if(check_flag(&temp_flag, "CVodeGetLastStep", 1)) ++nerr;
+      PrintOutput2(t, erm, qu, hu);
+      if (flag != CV_SUCCESS) {
+        nerr++;
+        break;
+      }
+      er = erm / abstol;
+        if (er > ero) ero = er;
+        if (er > P2_TOL_FACTOR) {
+          nerr++;
+          PrintErrOutput(P2_TOL_FACTOR);
+        }
+    }
+    
+    PrintFinalStats(cvode_mem, miter, ero);
+  }
+
+  CVodeFree(&cvode_mem);
+  N_VDestroy_Serial(y);
+
+  return(nerr);
+}
+
+static void PrintIntro2(void)
+{
+  printf("\n\n-------------------------------------------------------------");
+  printf("\n-------------------------------------------------------------");
+  printf("\n\nProblem 2: ydot = A * y, where A is a banded lower\n");
+  printf("triangular matrix derived from 2-D advection PDE\n\n");
+  printf(" neq = %d, ml = %d, mu = %d\n", P2_NEQ, P2_ML, P2_MU);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf(" itol = %s, reltol = %.2Lg, abstol = %.2Lg", "CV_SS", RTOL, ATOL);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf(" itol = %s, reltol = %.2g, abstol = %.2g", "CV_SS", RTOL, ATOL);
+#else
+  printf(" itol = %s, reltol = %.2g, abstol = %.2g", "CV_SS", RTOL, ATOL);
+#endif
+  printf("\n      t        max.err      qu     hu \n");
+}
+
+static void PrintHeader2(void)
+{
+  printf("\n      t        max.err      qu     hu \n");
+
+  return;
+}
+
+static void PrintOutput2(realtype t, realtype erm, int qu, realtype hu)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%10.3Lf  %12.4Le   %2d   %12.4Le\n", t, erm, qu, hu);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%10.3f  %12.4e   %2d   %12.4e\n", t, erm, qu, hu);
+#else
+  printf("%10.3f  %12.4e   %2d   %12.4e\n", t, erm, qu, hu);
+#endif
+
+  return;
+}
+
+static int f2(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  long int i, j, k;
+  realtype d, *ydata, *dydata;
+  
+  ydata = N_VGetArrayPointer_Serial(y);
+  dydata = N_VGetArrayPointer_Serial(ydot);
+
+  /*
+     Excluding boundaries, 
+
+     ydot    = f    = -2 y    + alpha1 * y      + alpha2 * y
+         i,j    i,j       i,j             i-1,j             i,j-1
+  */
+
+  for (j=0; j < P2_MESHY; j++) {
+    for (i=0; i < P2_MESHX; i++) {
+      k = i + j * P2_MESHX;
+      d = -TWO*ydata[k];
+      if (i != 0) d += P2_ALPH1 * ydata[k-1];
+      if (j != 0) d += P2_ALPH2 * ydata[k-P2_MESHX];
+      dydata[k] = d;
+    }
+  }
+
+  return(0);
+}
+
+static int Jac2(long int N, long int mu, long int ml, 
+                realtype tn, N_Vector y, N_Vector fy, 
+                DlsMat J, void *user_data,
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int i, j, k;
+  realtype *kthCol;
+
+  /*
+     The components of f(t,y) which depend on y    are
+                                               i,j
+     f    , f      , and f      : 
+      i,j    i+1,j        i,j+1
+
+     f    = -2 y    + alpha1 * y      + alpha2 * y
+      i,j       i,j             i-1,j             i,j-1
+
+     f      = -2 y      + alpha1 * y    + alpha2 * y
+      i+1,j       i+1,j             i,j             i+1,j-1
+
+     f      = -2 y      + alpha1 * y        + alpha2 * y
+      i,j+1       i,j+1             i-1,j+1             i,j
+  */
+
+  for (j=0; j < P2_MESHY; j++) {
+    for (i=0; i < P2_MESHX; i++) {
+      k = i + j * P2_MESHX;
+      kthCol = BAND_COL(J,k);
+      BAND_COL_ELEM(kthCol,k,k) = -TWO;
+      if (i != P2_MESHX-1) BAND_COL_ELEM(kthCol,k+1,k) = P2_ALPH1;
+      if (j != P2_MESHY-1) BAND_COL_ELEM(kthCol,k+P2_MESHX,k) = P2_ALPH2;
+    }
+  }
+
+  return(0);
+}
+
+static realtype MaxError(N_Vector y, realtype t)
+{
+  long int i, j, k;
+  realtype *ydata, er, ex=ZERO, yt, maxError=ZERO, ifact_inv, jfact_inv=ONE;
+  
+  if (t == ZERO) return(ZERO);
+
+  ydata = N_VGetArrayPointer_Serial(y);
+  if (t <= THIRTY) ex = SUNRexp(-TWO*t);
+  
+  for (j = 0; j < P2_MESHY; j++) {
+    ifact_inv = ONE;
+    for (i = 0; i < P2_MESHX; i++) {
+      k = i + j * P2_MESHX;
+      yt = SUNRpowerI(t,i+j) * ex * ifact_inv * jfact_inv;
+      er = SUNRabs(ydata[k] - yt);
+      if (er > maxError) maxError = er;
+      ifact_inv /= (i+1);
+    }
+    jfact_inv /= (j+1);
+  }
+  return(maxError);
+}
+
+static int PrepareNextRun(void *cvode_mem, int lmm, int miter, 
+                          long int mu, long int ml)
+{
+  int flag = CV_SUCCESS;
+  
+  printf("\n\n-------------------------------------------------------------");
+  
+  printf("\n\nLinear Multistep Method : ");
+  if (lmm == CV_ADAMS) {
+    printf("ADAMS\n");
+  } else {
+    printf("BDF\n");
+  }
+  
+  printf("Iteration               : ");
+  if (miter == FUNC) {
+    printf("FUNCTIONAL\n");
+  } else {
+    printf("NEWTON\n");
+    printf("Linear Solver           : ");
+    switch(miter) {
+    case DENSE_USER : 
+      printf("Dense, User-Supplied Jacobian\n");
+      flag = CVDense(cvode_mem, P1_NEQ);
+      check_flag(&flag, "CVDense", 1);
+      if(flag != CV_SUCCESS) break;
+      flag = CVDlsSetDenseJacFn(cvode_mem, Jac1);
+      check_flag(&flag, "CVDlsSetDenseJacFn", 1);
+      break;
+    case DENSE_DQ   : 
+      printf("Dense, Difference Quotient Jacobian\n");
+      flag = CVDlsSetDenseJacFn(cvode_mem, NULL);
+      check_flag(&flag, "CVDlsSetDenseJacFn", 1);
+      break;
+    case DIAG       : 
+      printf("Diagonal Jacobian\n");
+      flag = CVDiag(cvode_mem);
+      check_flag(&flag, "CVDiag", 1);
+      break;
+    case BAND_USER  : 
+      printf("Band, User-Supplied Jacobian\n");
+      flag = CVBand(cvode_mem, P2_NEQ, mu, ml);
+      check_flag(&flag, "CVBand", 1);
+      if(flag != CV_SUCCESS) break;
+      flag = CVDlsSetBandJacFn(cvode_mem, Jac2);
+      check_flag(&flag, "CVDlsSetBandJacFn", 1);
+      break;
+    case BAND_DQ  :   
+      printf("Band, Difference Quotient Jacobian\n");
+      flag = CVDlsSetBandJacFn(cvode_mem, NULL);
+      check_flag(&flag, "CVDlsSetBandJacFn", 1);
+      break;    
+    }
+  }
+
+  return(flag);
+}
+
+static void PrintErrOutput(realtype tol_factor)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("\n\n Error exceeds %Lg * tolerance \n\n", tol_factor);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("\n\n Error exceeds %g * tolerance \n\n", tol_factor);
+#else
+  printf("\n\n Error exceeds %g * tolerance \n\n", tol_factor);
+#endif
+
+  return;
+}
+
+static void PrintFinalStats(void *cvode_mem, int miter, realtype ero)
+{
+  long int lenrw, leniw, nst, nfe, nsetups, nni, ncfn, netf;
+  long int lenrwLS, leniwLS, nje, nfeLS;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  printf("\n Final statistics for this run:\n\n");
+  printf(" CVode real workspace length              = %4ld \n", lenrw);
+  printf(" CVode integer workspace length           = %4ld \n", leniw);
+  printf(" Number of steps                          = %4ld \n",  nst);
+  printf(" Number of f-s                            = %4ld \n",  nfe);
+  printf(" Number of setups                         = %4ld \n",  nsetups);
+  printf(" Number of nonlinear iterations           = %4ld \n",  nni);
+  printf(" Number of nonlinear convergence failures = %4ld \n",  ncfn);
+  printf(" Number of error test failures            = %4ld \n\n",netf);
+  
+  if (miter != FUNC) {
+    switch(miter) {
+    case DENSE_USER :
+    case DENSE_DQ   :
+      flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+      check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+      flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+      check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+      flag = CVDlsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+      check_flag(&flag, "CVDlsGetWorkSpace", 1);
+      break;
+    case BAND_USER  :
+    case BAND_DQ    :
+      flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+      check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+      flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+      check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+      flag = CVDlsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+      check_flag(&flag, "CVDlsGetWorkSpace", 1);
+      break;  
+    case DIAG       :
+      nje = nsetups;
+      flag = CVDiagGetNumRhsEvals(cvode_mem, &nfeLS);
+      check_flag(&flag, "CVDiagGetNumRhsEvals", 1);
+      flag = CVDiagGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+      check_flag(&flag, "CVDiagGetWorkSpace", 1);
+      break;
+    }
+    printf(" Linear solver real workspace length      = %4ld \n", lenrwLS);
+    printf(" Linear solver integer workspace length   = %4ld \n", leniwLS);
+    printf(" Number of Jacobian evaluations           = %4ld  \n", nje);
+    printf(" Number of f evals. in linear solver      = %4ld \n\n", nfeLS);
+  }
+  
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf(" Error overrun = %.3Lf \n", ero);
+#else
+  printf(" Error overrun = %.3f \n", ero);
+#endif
+}
+
+static void PrintErrInfo(int nerr)
+{
+  printf("\n\n-------------------------------------------------------------");
+  printf("\n-------------------------------------------------------------");
+  printf("\n\n Number of errors encountered = %d \n", nerr);
+
+  return;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsDirectDemo_ls.out b/examples/cvodes/serial/cvsDirectDemo_ls.out
new file mode 100644
index 0000000..9aa156f
--- /dev/null
+++ b/examples/cvodes/serial/cvsDirectDemo_ls.out
@@ -0,0 +1,502 @@
+Demonstration program for CVODE package - direct linear solvers
+
+
+Problem 1: Van der Pol oscillator
+ xdotdot - 3*(1 - x^2)*xdot + x = 0, x(0) = 2, xdot(0) = 0
+ neq = 2,  reltol = 0,  abstol = 1e-06
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : FUNCTIONAL
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    5    9.8626e-02
+   3.60761    -2.12392e-05   -3.16877e+00    5    2.2756e-02
+   5.82239    -1.68010e+00    2.91060e-01    4    1.4079e-01
+   8.03716     9.57612e-05    3.16900e+00    5    2.0348e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  130 
+ CVode integer workspace length           =   69 
+ Number of steps                          =  196 
+ Number of f-s                            =  391 
+ Number of setups                         =    0 
+ Number of nonlinear iterations           =  387 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   15 
+
+ Error overrun = 95.761 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Dense, User-Supplied Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    7    6.5178e-02
+   3.60761     2.42943e-06   -3.16870e+00    7    2.0626e-02
+   5.82239    -1.68010e+00    2.91062e-01    7    1.3038e-01
+   8.03716     1.99078e-05    3.16879e+00    7    2.3923e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  130 
+ CVode integer workspace length           =   69 
+ Number of steps                          =  266 
+ Number of f-s                            =  366 
+ Number of setups                         =   46 
+ Number of nonlinear iterations           =  362 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   23 
+
+ Linear solver real workspace length      =    8 
+ Linear solver integer workspace length   =    2 
+ Number of Jacobian evaluations           =    5  
+ Number of f evals. in linear solver      =    0 
+
+ Error overrun = 19.908 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Dense, Difference Quotient Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    5    6.5835e-02
+   3.60761    -2.28046e-05   -3.16879e+00    6    3.1773e-02
+   5.82239    -1.68010e+00    2.91059e-01    6    9.3514e-02
+   8.03716    -9.84882e-06    3.16869e+00    6    2.8095e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  130 
+ CVode integer workspace length           =   69 
+ Number of steps                          =  195 
+ Number of f-s                            =  268 
+ Number of setups                         =   34 
+ Number of nonlinear iterations           =  264 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   15 
+
+ Linear solver real workspace length      =    8 
+ Linear solver integer workspace length   =    2 
+ Number of Jacobian evaluations           =    4  
+ Number of f evals. in linear solver      =    8 
+
+ Error overrun = 22.805 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Diagonal Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91054e-01    6    5.9553e-02
+   3.60761     6.36071e-05   -3.16853e+00    6    2.8912e-02
+   5.82239    -1.68011e+00    2.91057e-01    5    9.8199e-02
+   8.03716    -3.15637e-05    3.16849e+00    6    1.5418e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  130 
+ CVode integer workspace length           =   69 
+ Number of steps                          =  241 
+ Number of f-s                            =  340 
+ Number of setups                         =   42 
+ Number of nonlinear iterations           =  336 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   21 
+
+ Linear solver real workspace length      =    6 
+ Linear solver integer workspace length   =    3 
+ Number of Jacobian evaluations           =   42  
+ Number of f evals. in linear solver      =   42 
+
+ Error overrun = 63.607 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : FUNCTIONAL
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    4    9.6100e-02
+   3.60761    -1.35636e-04   -3.16912e+00    5    1.5675e-02
+   5.82239    -1.68009e+00    2.91063e-01    5    1.1210e-01
+   8.03716     2.20969e-04    3.16937e+00    5    1.4732e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  116 
+ CVode integer workspace length           =   62 
+ Number of steps                          =  262 
+ Number of f-s                            =  498 
+ Number of setups                         =    0 
+ Number of nonlinear iterations           =  494 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   22 
+
+ Error overrun = 220.969 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Dense, User-Supplied Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    5    1.1991e-01
+   3.60761    -5.46907e-05   -3.16886e+00    5    1.6403e-02
+   5.82239    -1.68010e+00    2.91061e-01    4    1.0146e-01
+   8.03716     1.54312e-04    3.16917e+00    4    9.5378e-03
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  116 
+ CVode integer workspace length           =   62 
+ Number of steps                          =  265 
+ Number of f-s                            =  358 
+ Number of setups                         =   40 
+ Number of nonlinear iterations           =  354 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   18 
+
+ Linear solver real workspace length      =    8 
+ Linear solver integer workspace length   =    2 
+ Number of Jacobian evaluations           =    5  
+ Number of f evals. in linear solver      =    0 
+
+ Error overrun = 154.312 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Dense, Difference Quotient Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91058e-01    4    8.1067e-02
+   3.60761    -5.84200e-05   -3.16886e+00    4    1.1360e-02
+   5.82239    -1.68010e+00    2.91062e-01    5    6.4941e-02
+   8.03716     9.61737e-05    3.16899e+00    5    1.5216e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  116 
+ CVode integer workspace length           =   62 
+ Number of steps                          =  276 
+ Number of f-s                            =  367 
+ Number of setups                         =   40 
+ Number of nonlinear iterations           =  363 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   17 
+
+ Linear solver real workspace length      =    8 
+ Linear solver integer workspace length   =    2 
+ Number of Jacobian evaluations           =    6  
+ Number of f evals. in linear solver      =   12 
+
+ Error overrun = 96.174 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Diagonal Jacobian
+
+     t           x              xdot         qu     hu 
+   1.39284     1.68010e+00   -2.91056e-01    5    1.1430e-01
+   3.60761    -9.83501e-05   -3.16900e+00    5    1.6712e-02
+   5.82239    -1.68009e+00    2.91063e-01    4    8.1261e-02
+   8.03716     1.66641e-04    3.16920e+00    4    1.0547e-02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  116 
+ CVode integer workspace length           =   62 
+ Number of steps                          =  266 
+ Number of f-s                            =  360 
+ Number of setups                         =   39 
+ Number of nonlinear iterations           =  356 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =   17 
+
+ Linear solver real workspace length      =    6 
+ Linear solver integer workspace length   =    3 
+ Number of Jacobian evaluations           =   39  
+ Number of f evals. in linear solver      =   39 
+
+ Error overrun = 166.641 
+
+
+-------------------------------------------------------------
+-------------------------------------------------------------
+
+Problem 2: ydot = A * y, where A is a banded lower
+triangular matrix derived from 2-D advection PDE
+
+ neq = 25, ml = 5, mu = 0
+ itol = CV_SS, reltol = 0, abstol = 1e-06
+      t        max.err      qu     hu 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : FUNCTIONAL
+
+      t        max.err      qu     hu 
+     0.010    1.4690e-07    3     1.1459e-02
+     0.100    5.2543e-07    4     4.1413e-02
+     1.000    1.2207e-06    5     6.8243e-02
+    10.000    9.7711e-07    3     2.8481e-01
+   100.000    2.1231e-07    1     1.3200e-01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  521 
+ CVode integer workspace length           =   69 
+ Number of steps                          =  339 
+ Number of f-s                            =  602 
+ Number of setups                         =    0 
+ Number of nonlinear iterations           =  598 
+ Number of nonlinear convergence failures =   80 
+ Number of error test failures            =    0 
+
+ Error overrun = 1.221 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Diagonal Jacobian
+
+      t        max.err      qu     hu 
+     0.010    1.3734e-07    3     1.0327e-02
+     0.100    2.4956e-06    3     2.3048e-02
+     1.000    4.2328e-06    4     4.3778e-02
+    10.000    9.7310e-07    4     3.1286e-01
+   100.000    1.0443e-09    1     3.7883e+02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  521 
+ CVode integer workspace length           =   69 
+ Number of steps                          =  154 
+ Number of f-s                            =  219 
+ Number of setups                         =   33 
+ Number of nonlinear iterations           =  215 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =    5 
+
+ Linear solver real workspace length      =   75 
+ Linear solver integer workspace length   =    3 
+ Number of Jacobian evaluations           =   33  
+ Number of f evals. in linear solver      =   33 
+
+ Error overrun = 4.233 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Band, User-Supplied Jacobian
+
+      t        max.err      qu     hu 
+     0.010    1.3670e-07    3     1.2164e-02
+     0.100    4.7920e-07    4     4.2115e-02
+     1.000    2.5077e-07    6     1.0365e-01
+    10.000    6.0790e-07    4     4.7206e-01
+   100.000    5.7390e-08    2     1.0750e+01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  521 
+ CVode integer workspace length           =   69 
+ Number of steps                          =  149 
+ Number of f-s                            =  184 
+ Number of setups                         =   32 
+ Number of nonlinear iterations           =  180 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =    6 
+
+ Linear solver real workspace length      =  425 
+ Linear solver integer workspace length   =   25 
+ Number of Jacobian evaluations           =    3  
+ Number of f evals. in linear solver      =    0 
+
+ Error overrun = 0.608 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : ADAMS
+Iteration               : NEWTON
+Linear Solver           : Band, Difference Quotient Jacobian
+
+      t        max.err      qu     hu 
+     0.010    1.4285e-07    3     1.3840e-02
+     0.100    5.7337e-07    4     4.2111e-02
+     1.000    7.3281e-07    5     6.3684e-02
+    10.000    3.8507e-07    5     2.6026e-01
+   100.000    4.1035e-12    1     6.2591e+01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  521 
+ CVode integer workspace length           =   69 
+ Number of steps                          =  124 
+ Number of f-s                            =  142 
+ Number of setups                         =   24 
+ Number of nonlinear iterations           =  138 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =    1 
+
+ Linear solver real workspace length      =  425 
+ Linear solver integer workspace length   =   25 
+ Number of Jacobian evaluations           =    3  
+ Number of f evals. in linear solver      =   18 
+
+ Error overrun = 0.733 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : FUNCTIONAL
+
+      t        max.err      qu     hu 
+     0.010    5.5931e-07    2     8.1257e-03
+     0.100    5.2896e-06    3     1.7769e-02
+     1.000    2.3209e-06    5     7.5291e-02
+    10.000    1.2861e-06    5     2.7791e-01
+   100.000    2.0520e-07    1     8.3614e-01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  346 
+ CVode integer workspace length           =   62 
+ Number of steps                          =  373 
+ Number of f-s                            =  690 
+ Number of setups                         =    0 
+ Number of nonlinear iterations           =  686 
+ Number of nonlinear convergence failures =   55 
+ Number of error test failures            =    1 
+
+ Error overrun = 5.290 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Diagonal Jacobian
+
+      t        max.err      qu     hu 
+     0.010    5.6365e-07    2     8.1241e-03
+     0.100    7.9753e-07    4     1.8910e-02
+     1.000    5.9100e-06    5     5.1976e-02
+    10.000    2.1569e-06    4     3.1156e-01
+   100.000    6.3727e-10    1     1.6301e+02
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  346 
+ CVode integer workspace length           =   62 
+ Number of steps                          =  177 
+ Number of f-s                            =  259 
+ Number of setups                         =   46 
+ Number of nonlinear iterations           =  255 
+ Number of nonlinear convergence failures =    2 
+ Number of error test failures            =    5 
+
+ Linear solver real workspace length      =   75 
+ Linear solver integer workspace length   =    3 
+ Number of Jacobian evaluations           =   46  
+ Number of f evals. in linear solver      =   46 
+
+ Error overrun = 5.910 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Band, User-Supplied Jacobian
+
+      t        max.err      qu     hu 
+     0.010    5.6372e-07    2     8.1246e-03
+     0.100    5.2784e-06    3     1.7819e-02
+     1.000    1.8169e-06    5     6.0110e-02
+    10.000    5.4997e-07    5     4.1661e-01
+   100.000    1.7764e-09    2     2.9748e+01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  346 
+ CVode integer workspace length           =   62 
+ Number of steps                          =  119 
+ Number of f-s                            =  144 
+ Number of setups                         =   25 
+ Number of nonlinear iterations           =  140 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =    2 
+
+ Linear solver real workspace length      =  425 
+ Linear solver integer workspace length   =   25 
+ Number of Jacobian evaluations           =    3  
+ Number of f evals. in linear solver      =    0 
+
+ Error overrun = 5.278 
+
+
+-------------------------------------------------------------
+
+Linear Multistep Method : BDF
+Iteration               : NEWTON
+Linear Solver           : Band, Difference Quotient Jacobian
+
+      t        max.err      qu     hu 
+     0.010    5.6492e-07    2     8.1361e-03
+     0.100    5.9968e-06    3     1.7105e-02
+     1.000    1.6902e-06    5     8.7628e-02
+    10.000    5.2314e-07    5     3.1091e-01
+   100.000    1.4380e-09    2     2.1635e+01
+
+ Final statistics for this run:
+
+ CVode real workspace length              =  346 
+ CVode integer workspace length           =   62 
+ Number of steps                          =  121 
+ Number of f-s                            =  145 
+ Number of setups                         =   24 
+ Number of nonlinear iterations           =  141 
+ Number of nonlinear convergence failures =    0 
+ Number of error test failures            =    1 
+
+ Linear solver real workspace length      =  425 
+ Linear solver integer workspace length   =   25 
+ Number of Jacobian evaluations           =    3  
+ Number of f evals. in linear solver      =   18 
+
+ Error overrun = 5.997 
+
+
+-------------------------------------------------------------
+-------------------------------------------------------------
+
+ Number of errors encountered = 0 
diff --git a/examples/cvodes/serial/cvsDiurnal_FSA_kry.c b/examples/cvodes/serial/cvsDiurnal_FSA_kry.c
new file mode 100644
index 0000000..c6b620c
--- /dev/null
+++ b/examples/cvodes/serial/cvsDiurnal_FSA_kry.c
@@ -0,0 +1,928 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4868 $
+ * $Date: 2016-08-19 10:16:31 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen and Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dz)(Kv(z)*dc(i)/dz)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(z) = Kv0*exp(z/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= z <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * 10 x 10 mesh, with simple polynomial initial profiles.
+ * The problem is solved with CVODES, with the BDF/GMRES method
+ * (i.e. using the CVSPGMR linear solver) and the block-diagonal
+ * part of the Newton matrix as a left preconditioner. A copy of
+ * the block-diagonal part of the Jacobian is saved and
+ * conditionally reused within the Precond routine.
+ *
+ * Optionally, CVODES can compute sensitivities with respect to the
+ * problem parameters q1 and q2.
+ * Any of three sensitivity methods (SIMULTANEOUS, STAGGERED, and
+ * STAGGERED1) can be used and sensitivities may be included in the
+ * error test or not (error control set on FULL or PARTIAL,
+ * respectively).
+ *
+ * Execution:
+ *
+ * If no sensitivities are desired:
+ *    % cvsDiurnal_FSA_kry -nosensi
+ * If sensitivities are to be computed:
+ *    % cvsDiurnal_FSA_kry -sensi sensi_meth err_con
+ * where sensi_meth is one of {sim, stg, stg1} and err_con is one of
+ * {t, f}.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>            /* main CVODES header file */
+#include <cvodes/cvodes_spgmr.h>      /* use CVSPGMR linear */
+#include <nvector/nvector_serial.h>   /* definitions N_Vector */
+#include <sundials/sundials_dense.h>  /* use generic DENSE solver for prec. */
+#include <sundials/sundials_types.h>  /* definition of realtype */
+#include <sundials/sundials_math.h>   /* contains macros SUNSQR and EXP */
+
+/* Problem Constants */
+
+#define NUM_SPECIES  2                /* number of species */
+#define C1_SCALE     RCONST(1.0e6)    /* coefficients in initial profiles */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           RCONST(0.0)      /* initial time */
+#define NOUT         12               /* number of output times */
+#define TWOHR        RCONST(7200.0)   /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)   /* number of seconds in a half day */
+#define PI           RCONST(3.1415926535898)   /* pi */ 
+
+#define XMIN         RCONST(0.0)      /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define ZMIN         RCONST(30.0)     /* grid boundaries in z  */
+#define ZMAX         RCONST(50.0)
+#define XMID         RCONST(10.0)     /* grid midpoints in x,z */          
+#define ZMID         RCONST(40.0)
+
+#define MX           15               /* MX = number of x mesh points */
+#define MZ           15               /* MZ = number of z mesh points */
+#define NSMX         NUM_SPECIES*MX   /* NSMX = NUM_SPECIES*MX */
+#define MM           (MX*MZ)          /* MM = MX*MZ */
+
+/* CVodeInit Constants */
+#define RTOL         RCONST(1.0e-5)   /* scalar relative tolerance */
+#define FLOOR        RCONST(100.0)    /* value of C1 or C2 at which tolerances */
+                                      /* change from relative to absolute      */
+#define ATOL         (RTOL*FLOOR)     /* scalar absolute tolerance */
+#define NEQ          (NUM_SPECIES*MM) /* NEQ = number of equations */
+
+/* Sensitivity Constants */
+#define NP           8
+#define NS           2
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+
+/* User-defined vector and matrix accessor macros: IJKth, IJth */
+
+/* IJKth is defined in order to isolate the translation from the
+   mathematical 3-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. IJth is defined in order to
+   write code which indexes into small dense matrices with a (row,column)
+   pair, where 1 <= row, column <= NUM_SPECIES.   
+   
+   IJKth(vdata,i,j,k) references the element in the vdata array for
+   species i at mesh point (j,k), where 1 <= i <= NUM_SPECIES,
+   0 <= j <= MX-1, 0 <= k <= MZ-1. The vdata array is obtained via
+   the macro call vdata = N_VGetArrayPointer_Serial(v), where v is an N_Vector. 
+   For each mesh point (j,k), the elements for species i and i+1 are
+   contiguous within vdata.
+
+   IJth(a,i,j) references the (i,j)th entry of the small matrix realtype **a,
+   where 1 <= i,j <= NUM_SPECIES. The small matrix routines in dense.h
+   work with matrices stored by column in a 2-dimensional array. In C,
+   arrays are indexed starting at 0, not 1. */
+
+#define IJKth(vdata,i,j,k) (vdata[i-1 + (j)*NUM_SPECIES + (k)*NSMX])
+#define IJth(a,i,j)        (a[j-1][i-1])
+
+/* Type : UserData 
+   contains preconditioner blocks, pivot arrays, 
+   problem parameters, and problem constants     */
+
+typedef struct {
+  realtype *p;
+  realtype **P[MX][MZ], **Jbd[MX][MZ];
+  long int *pivot[MX][MZ];
+  realtype q4, om, dx, dz, hdco, haco, vdco;
+} *UserData;
+
+
+/* Prototypes of user-supplied functions */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int Precond(realtype tn, N_Vector y, N_Vector fy, booleantype jok,
+                   booleantype *jcurPtr, realtype gamma, void *user_data,
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector y, N_Vector fy,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+/* Prototypes of private functions */
+
+static void ProcessArgs(int argc, char *argv[],
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con);
+static void WrongArgs(char *name);
+static UserData AllocUserData(void);
+static void InitUserData(UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector y, realtype dx, realtype dz);
+static void PrintOutput(void *cvode_mem, realtype t, N_Vector y);
+static void PrintOutputS(N_Vector *uS);
+static void PrintFinalStats(void *cvode_mem, booleantype sensi);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  void *cvode_mem;
+  UserData data;
+  realtype abstol, reltol, t, tout;
+  N_Vector y;
+  int iout, flag;
+
+  realtype *pbar;
+  int is, *plist;
+  N_Vector *uS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  pbar = NULL;
+  plist = NULL;
+  uS = NULL;
+  y = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Process arguments */
+  ProcessArgs(argc, argv, &sensi, &sensi_meth, &err_con);
+
+  /* Problem parameters */
+  data = AllocUserData();
+  if(check_flag((void *)data, "AllocUserData", 2)) return(1);
+  InitUserData(data);
+
+  /* Initial states */
+  y = N_VNew_Serial(NEQ);
+  if(check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  SetInitialProfiles(y, data->dx, data->dz);
+  
+  /* Tolerances */
+  abstol=ATOL; 
+  reltol=RTOL;
+
+  /* Create CVODES object */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  flag = CVodeSetMaxNumSteps(cvode_mem, 2000);
+  if(check_flag(&flag, "CVodeSetMaxNumSteps", 1)) return(1);
+
+  /* Allocate CVODES memory */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Attach CVSPGMR linear solver */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+
+  flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+  if(check_flag(&flag, "CVSpilsSetPreconditioner", 1)) return(1);
+
+  printf("\n2-species diurnal advection-diffusion problem\n");
+
+  /* Forward sensitivity analysis */
+  if(sensi) {
+
+    plist = (int *) malloc(NS * sizeof(int));
+    if(check_flag((void *)plist, "malloc", 2)) return(1);
+    for(is=0; is<NS; is++) plist[is] = is;
+
+    pbar = (realtype *) malloc(NS * sizeof(realtype));
+    if(check_flag((void *)pbar, "malloc", 2)) return(1);
+    for(is=0; is<NS; is++) pbar[is] = data->p[plist[is]];
+
+    uS = N_VCloneVectorArray_Serial(NS, y);
+    if(check_flag((void *)uS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for(is=0;is<NS;is++)
+      N_VConst(ZERO,uS[is]);
+
+    flag = CVodeSensInit1(cvode_mem, NS, sensi_meth, NULL, uS);
+    if(check_flag(&flag, "CVodeSensInit", 1)) return(1);
+
+    flag = CVodeSensEEtolerances(cvode_mem);
+    if(check_flag(&flag, "CVodeSensEEtolerances", 1)) return(1);
+
+    flag = CVodeSetSensErrCon(cvode_mem, err_con);
+    if(check_flag(&flag, "CVodeSetSensErrCon", 1)) return(1);
+
+    flag = CVodeSetSensDQMethod(cvode_mem, CV_CENTERED, ZERO);
+    if(check_flag(&flag, "CVodeSetSensDQMethod", 1)) return(1);
+
+    flag = CVodeSetSensParams(cvode_mem, data->p, pbar, plist);
+    if(check_flag(&flag, "CVodeSetSensParams", 1)) return(1);
+
+    printf("Sensitivity: YES ");
+    if(sensi_meth == CV_SIMULTANEOUS)   
+      printf("( SIMULTANEOUS +");
+    else 
+      if(sensi_meth == CV_STAGGERED) printf("( STAGGERED +");
+      else                           printf("( STAGGERED1 +");   
+    if(err_con) printf(" FULL ERROR CONTROL )");
+    else        printf(" PARTIAL ERROR CONTROL )");
+    
+  } else {
+
+    printf("Sensitivity: NO ");
+
+  }
+
+  /* In loop over output points, call CVode, print results, test for error */
+
+  printf("\n\n");
+  printf("========================================================================\n");
+  printf("     T     Q       H      NST                    Bottom left  Top right \n");
+  printf("========================================================================\n");
+
+  for (iout=1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    if(check_flag(&flag, "CVode", 1)) break;
+    PrintOutput(cvode_mem, t, y);
+    if (sensi) {
+      flag = CVodeGetSens(cvode_mem, &t, uS);
+      if(check_flag(&flag, "CVodeGetSens", 1)) break;
+      PrintOutputS(uS);
+    }
+    
+    printf("------------------------------------------------------------------------\n");
+
+  }
+
+  /* Print final statistics */
+  PrintFinalStats(cvode_mem, sensi);
+
+  /* Free memory */
+  N_VDestroy_Serial(y);
+  if (sensi) {
+    N_VDestroyVectorArray_Serial(uS, NS);
+    free(pbar);
+    free(plist);
+  }
+  FreeUserData(data);
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, czdn, czup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, zdn, zup;
+  realtype q4coef, delz, verdco, hordco, horaco;
+  realtype *ydata, *dydata;
+  int jx, jz, idn, iup, ileft, iright;
+  UserData data;
+  realtype Q1, Q2, C3, A3, A4, KH, VEL, KV0;
+
+  data = (UserData) user_data;
+  ydata = N_VGetArrayPointer_Serial(y);
+  dydata = N_VGetArrayPointer_Serial(ydot);
+
+  /* Load problem coefficients and parameters */
+
+  Q1 = data->p[0];
+  Q2 = data->p[1];
+  C3 = data->p[2];
+  A3 = data->p[3];
+  A4 = data->p[4];
+  KH = data->p[5];
+  VEL = data->p[6];
+  KV0 = data->p[7];
+
+  /* Set diurnal rate coefficients. */
+
+  s = sin(data->om*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    data->q4 = SUNRexp(-A4/s);
+  } else {
+    q3 = ZERO;
+    data->q4 = ZERO;
+  }
+
+  /* Make local copies of problem variables, for efficiency. */
+
+  q4coef = data->q4;
+  delz = data->dz;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Loop over all grid points. */
+
+  for (jz=0; jz < MZ; jz++) {
+
+    /* Set vertical diffusion coefficients at jz +- 1/2 */
+
+    zdn = ZMIN + (jz - RCONST(0.5))*delz;
+    zup = zdn + delz;
+    czdn = verdco*SUNRexp(RCONST(0.2)*zdn);
+    czup = verdco*SUNRexp(RCONST(0.2)*zup);
+    idn = (jz == 0) ? 1 : -1;
+    iup = (jz == MZ-1) ? -1 : 1;
+    for (jx=0; jx < MX; jx++) {
+
+      /* Extract c1 and c2, and set kinetic rate terms. */
+
+      c1 = IJKth(ydata,1,jx,jz); 
+      c2 = IJKth(ydata,2,jx,jz);
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + RCONST(2.0)*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms. */
+
+      c1dn = IJKth(ydata,1,jx,jz+idn);
+      c2dn = IJKth(ydata,2,jx,jz+idn);
+      c1up = IJKth(ydata,1,jx,jz+iup);
+      c2up = IJKth(ydata,2,jx,jz+iup);
+      vertd1 = czup*(c1up - c1) - czdn*(c1 - c1dn);
+      vertd2 = czup*(c2up - c2) - czdn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms. */
+
+      ileft = (jx == 0) ? 1 : -1;
+      iright =(jx == MX-1) ? -1 : 1;
+      c1lt = IJKth(ydata,1,jx+ileft,jz); 
+      c2lt = IJKth(ydata,2,jx+ileft,jz);
+      c1rt = IJKth(ydata,1,jx+iright,jz);
+      c2rt = IJKth(ydata,2,jx+iright,jz);
+      hord1 = hordco*(c1rt - RCONST(2.0)*c1 + c1lt);
+      hord2 = hordco*(c2rt - RCONST(2.0)*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into ydot. */
+
+      IJKth(dydata, 1, jx, jz) = vertd1 + hord1 + horad1 + rkin1; 
+      IJKth(dydata, 2, jx, jz) = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * Preconditioner setup routine. Generate and preprocess P. 
+ */
+
+static int Precond(realtype tn, N_Vector y, N_Vector fy, booleantype jok,
+                   booleantype *jcurPtr, realtype gamma, void *user_data,
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype c1, c2, czdn, czup, diag, zdn, zup, q4coef, delz, verdco, hordco;
+  realtype **(*P)[MZ], **(*Jbd)[MZ];
+  long int *(*pivot)[MZ];
+  int ier, jx, jz;
+  realtype *ydata, **a, **j;
+  UserData data;
+  realtype Q1, Q2, C3, A3, A4, KH, VEL, KV0;
+
+  /* Make local copies of pointers in user_data, and of pointer to y's data */
+  data = (UserData) user_data;
+  P = data->P;
+  Jbd = data->Jbd;
+  pivot = data->pivot;
+  ydata = N_VGetArrayPointer_Serial(y);
+
+  /* Load problem coefficients and parameters */
+  Q1 = data->p[0];
+  Q2 = data->p[1];
+  C3 = data->p[2];
+  A3 = data->p[3];
+  A4 = data->p[4];
+  KH = data->p[5];
+  VEL = data->p[6];
+  KV0 = data->p[7];
+
+  if (jok) {
+
+  /* jok = TRUE: Copy Jbd to P */
+
+    for (jz=0; jz < MZ; jz++)
+      for (jx=0; jx < MX; jx++)
+        denseCopy(Jbd[jx][jz], P[jx][jz], NUM_SPECIES, NUM_SPECIES);
+
+  *jcurPtr = FALSE;
+
+  }
+
+  else {
+  /* jok = FALSE: Generate Jbd from scratch and copy to P */
+
+  /* Make local copies of problem variables, for efficiency. */
+
+  q4coef = data->q4;
+  delz = data->dz;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+
+  /* Compute 2x2 diagonal Jacobian blocks (using q4 values 
+     computed on the last f call).  Load into P. */
+
+    for (jz=0; jz < MZ; jz++) {
+      zdn = ZMIN + (jz - RCONST(0.5))*delz;
+      zup = zdn + delz;
+      czdn = verdco*SUNRexp(RCONST(0.2)*zdn);
+      czup = verdco*SUNRexp(RCONST(0.2)*zup);
+      diag = -(czdn + czup + RCONST(2.0)*hordco);
+      for (jx=0; jx < MX; jx++) {
+        c1 = IJKth(ydata,1,jx,jz);
+        c2 = IJKth(ydata,2,jx,jz);
+        j = Jbd[jx][jz];
+        a = P[jx][jz];
+        IJth(j,1,1) = (-Q1*C3 - Q2*c2) + diag;
+        IJth(j,1,2) = -Q2*c1 + q4coef;
+        IJth(j,2,1) = Q1*C3 - Q2*c2;
+        IJth(j,2,2) = (-Q2*c1 - q4coef) + diag;
+        denseCopy(j, a, NUM_SPECIES, NUM_SPECIES);
+      }
+    }
+
+  *jcurPtr = TRUE;
+
+  }
+
+  /* Scale by -gamma */
+
+    for (jz=0; jz < MZ; jz++)
+      for (jx=0; jx < MX; jx++)
+        denseScale(-gamma, P[jx][jz], NUM_SPECIES, NUM_SPECIES);
+
+  /* Add identity matrix and do LU decompositions on blocks in place. */
+
+  for (jx=0; jx < MX; jx++) {
+    for (jz=0; jz < MZ; jz++) {
+      denseAddIdentity(P[jx][jz], NUM_SPECIES);
+      ier = denseGETRF(P[jx][jz], NUM_SPECIES, NUM_SPECIES, pivot[jx][jz]);
+      if (ier != 0) return(1);
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * Preconditioner solve routine 
+ */
+
+static int PSolve(realtype tn, N_Vector y, N_Vector fy,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype **(*P)[MZ];
+  long int *(*pivot)[MZ];
+  int jx, jz;
+  realtype *zdata, *v;
+  UserData data;
+
+  /* Extract the P and pivot arrays from user_data. */
+
+  data = (UserData) user_data;
+  P = data->P;
+  pivot = data->pivot;
+  zdata = N_VGetArrayPointer_Serial(z);
+
+  N_VScale(ONE, r, z);
+
+  /* Solve the block-diagonal system Px = r using LU factors stored
+     in P and pivot data in pivot, and return the solution in z. */
+
+  for (jx=0; jx < MX; jx++) {
+    for (jz=0; jz < MZ; jz++) {
+      v = &(IJKth(zdata, 1, jx, jz));
+      denseGETRS(P[jx][jz], NUM_SPECIES, pivot[jx][jz], v);
+    }
+  }
+
+  return(0);
+}
+ 
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Process and verify arguments to cvsfwdkryx.
+ */
+
+static void ProcessArgs(int argc, char *argv[], 
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = CV_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = CV_STAGGERED;
+    else if (strcmp(argv[2],"stg1") == 0)
+      *sensi_meth = CV_STAGGERED1;
+    else 
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(argv[0]);
+  }
+
+}
+
+static void WrongArgs(char *name)
+{
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim, stg, or stg1\n");
+    printf("         err_con    = t or f\n");
+    
+    exit(0);
+}
+
+/*
+ * Allocate memory for data structure of type UserData 
+ */
+
+static UserData AllocUserData(void)
+{
+  int jx, jz;
+  UserData data;
+
+  data = (UserData) malloc(sizeof *data);
+
+  for (jx=0; jx < MX; jx++) {
+    for (jz=0; jz < MZ; jz++) {
+      (data->P)[jx][jz] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->Jbd)[jx][jz] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->pivot)[jx][jz] = newLintArray(NUM_SPECIES);
+    }
+  }
+
+  data->p = (realtype *) malloc(NP*sizeof(realtype));
+
+  return(data);
+}
+
+/*
+ * Load problem constants in data 
+ */
+
+static void InitUserData(UserData data)
+{
+  realtype Q1, Q2, C3, A3, A4, KH, VEL, KV0;
+
+  /* Set problem parameters */
+  Q1 = RCONST(1.63e-16); /* Q1  coefficients q1, q2, c3             */
+  Q2 = RCONST(4.66e-16); /* Q2                                      */
+  C3 = RCONST(3.7e16);   /* C3                                      */
+  A3 = RCONST(22.62);    /* A3  coefficient in expression for q3(t) */
+  A4 = RCONST(7.601);    /* A4  coefficient in expression for q4(t) */
+  KH = RCONST(4.0e-6);   /* KH  horizontal diffusivity Kh           */ 
+  VEL = RCONST(0.001);   /* VEL advection velocity V                */
+  KV0 = RCONST(1.0e-8);  /* KV0 coefficient in Kv(z)                */  
+
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/(MX-1);
+  data->dz = (ZMAX-ZMIN)/(MZ-1);
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(RCONST(2.0)*data->dx);
+  data->vdco = (ONE/SUNSQR(data->dz))*KV0;
+
+  data->p[0] = Q1;
+  data->p[1] = Q2;
+  data->p[2] = C3;
+  data->p[3] = A3;
+  data->p[4] = A4;
+  data->p[5] = KH;
+  data->p[6] = VEL;
+  data->p[7] = KV0;
+}
+
+/*
+ * Free user data memory 
+ */
+
+static void FreeUserData(UserData data)
+{
+  int jx, jz;
+
+  for (jx=0; jx < MX; jx++) {
+    for (jz=0; jz < MZ; jz++) {
+      destroyMat((data->P)[jx][jz]);
+      destroyMat((data->Jbd)[jx][jz]);
+      destroyArray((data->pivot)[jx][jz]);
+    }
+  }
+
+  free(data->p);
+
+  free(data);
+}
+
+/*
+ * Set initial conditions in y 
+ */
+
+static void SetInitialProfiles(N_Vector y, realtype dx, realtype dz)
+{
+  int jx, jz;
+  realtype x, z, cx, cz;
+  realtype *ydata;
+
+  /* Set pointer to data array in vector y. */
+
+  ydata = N_VGetArrayPointer_Serial(y);
+
+  /* Load initial profiles of c1 and c2 into y vector */
+
+  for (jz=0; jz < MZ; jz++) {
+    z = ZMIN + jz*dz;
+    cz = SUNSQR(RCONST(0.1)*(z - ZMID));
+    cz = ONE - cz + RCONST(0.5)*SUNSQR(cz);
+    for (jx=0; jx < MX; jx++) {
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - XMID));
+      cx = ONE - cx + RCONST(0.5)*SUNSQR(cx);
+      IJKth(ydata,1,jx,jz) = C1_SCALE*cx*cz; 
+      IJKth(ydata,2,jx,jz) = C2_SCALE*cx*cz;
+    }
+  }
+}
+
+/*
+ * Print current t, step count, order, stepsize, and sampled c1,c2 values 
+ */
+
+static void PrintOutput(void *cvode_mem, realtype t, N_Vector y)
+{  
+  long int nst;
+  int qu, flag;
+  realtype hu;
+  realtype *ydata;
+
+  ydata = N_VGetArrayPointer_Serial(y);
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%8.3Le %2d  %8.3Le %5ld\n", t,qu,hu,nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%8.3e %2d  %8.3e %5ld\n", t,qu,hu,nst);
+#else
+  printf("%8.3e %2d  %8.3e %5ld\n", t,qu,hu,nst);
+#endif
+
+  printf("                                Solution       ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le \n", IJKth(ydata,1,0,0), IJKth(ydata,1,MX-1,MZ-1)); 
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e \n", IJKth(ydata,1,0,0), IJKth(ydata,1,MX-1,MZ-1)); 
+#else
+  printf("%12.4e %12.4e \n", IJKth(ydata,1,0,0), IJKth(ydata,1,MX-1,MZ-1)); 
+#endif
+  printf("                                               ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le \n", IJKth(ydata,2,0,0), IJKth(ydata,2,MX-1,MZ-1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e \n", IJKth(ydata,2,0,0), IJKth(ydata,2,MX-1,MZ-1));
+#else
+  printf("%12.4e %12.4e \n", IJKth(ydata,2,0,0), IJKth(ydata,2,MX-1,MZ-1));
+#endif
+}
+
+/*
+ * Print sampled sensitivities 
+ */
+
+static void PrintOutputS(N_Vector *uS)
+{
+  realtype *sdata;
+
+  sdata = N_VGetArrayPointer_Serial(uS[0]);
+
+  printf("                                ----------------------------------------\n"); 
+  printf("                                Sensitivity 1  ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le \n", IJKth(sdata,1,0,0), IJKth(sdata,1,MX-1,MZ-1)); 
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e \n", IJKth(sdata,1,0,0), IJKth(sdata,1,MX-1,MZ-1)); 
+#else
+  printf("%12.4e %12.4e \n", IJKth(sdata,1,0,0), IJKth(sdata,1,MX-1,MZ-1)); 
+#endif
+  printf("                                               ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le \n", IJKth(sdata,2,0,0), IJKth(sdata,2,MX-1,MZ-1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e \n", IJKth(sdata,2,0,0), IJKth(sdata,2,MX-1,MZ-1));
+#else
+  printf("%12.4e %12.4e \n", IJKth(sdata,2,0,0), IJKth(sdata,2,MX-1,MZ-1));
+#endif
+
+  sdata = N_VGetArrayPointer_Serial(uS[1]);
+
+  printf("                                ----------------------------------------\n"); 
+  printf("                                Sensitivity 2  ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le \n", IJKth(sdata,1,0,0), IJKth(sdata,1,MX-1,MZ-1)); 
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e \n", IJKth(sdata,1,0,0), IJKth(sdata,1,MX-1,MZ-1)); 
+#else
+  printf("%12.4e %12.4e \n", IJKth(sdata,1,0,0), IJKth(sdata,1,MX-1,MZ-1)); 
+#endif
+  printf("                                               ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le \n", IJKth(sdata,2,0,0), IJKth(sdata,2,MX-1,MZ-1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e \n", IJKth(sdata,2,0,0), IJKth(sdata,2,MX-1,MZ-1));
+#else
+  printf("%12.4e %12.4e \n", IJKth(sdata,2,0,0), IJKth(sdata,2,MX-1,MZ-1));
+#endif
+}
+
+/*
+ * Print final statistics contained in iopt 
+ */
+
+static void PrintFinalStats(void *cvode_mem, booleantype sensi)
+{
+  long int nst;
+  long int nfe, nsetups, nni, ncfn, netf;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  long int nli, ncfl, npe, nps;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  if (sensi) {
+    flag = CVodeGetSensNumRhsEvals(cvode_mem, &nfSe);
+    check_flag(&flag, "CVodeGetSensNumRhsEvals", 1);
+    flag = CVodeGetNumRhsEvalsSens(cvode_mem, &nfeS);
+    check_flag(&flag, "CVodeGetNumRhsEvalsSens", 1);
+    flag = CVodeGetSensNumLinSolvSetups(cvode_mem, &nsetupsS);
+    check_flag(&flag, "CVodeGetSensNumLinSolvSetups", 1);
+    flag = CVodeGetSensNumErrTestFails(cvode_mem, &netfS);
+    check_flag(&flag, "CVodeGetSensNumErrTestFails", 1);
+    flag = CVodeGetSensNumNonlinSolvIters(cvode_mem, &nniS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvIters", 1);
+    flag = CVodeGetSensNumNonlinSolvConvFails(cvode_mem, &ncfnS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvConvFails", 1);
+  }
+
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1);
+
+  printf("\nFinal Statistics\n\n");
+  printf("nst     = %5ld\n\n", nst);
+  printf("nfe     = %5ld\n",   nfe);
+  printf("netf    = %5ld    nsetups  = %5ld\n", netf, nsetups);
+  printf("nni     = %5ld    ncfn     = %5ld\n", nni, ncfn);
+
+  if(sensi) {
+    printf("\n");
+    printf("nfSe    = %5ld    nfeS     = %5ld\n", nfSe, nfeS);
+    printf("netfs   = %5ld    nsetupsS = %5ld\n", netfS, nsetupsS);
+    printf("nniS    = %5ld    ncfnS    = %5ld\n", nniS, ncfnS);
+  }
+
+  printf("\n");
+  printf("nli     = %5ld    ncfl     = %5ld\n", nli, ncfl);
+  printf("npe     = %5ld    nps      = %5ld\n", npe, nps);
+
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsDiurnal_FSA_kry.out b/examples/cvodes/serial/cvsDiurnal_FSA_kry.out
new file mode 100644
index 0000000..ac1d121
--- /dev/null
+++ b/examples/cvodes/serial/cvsDiurnal_FSA_kry.out
@@ -0,0 +1,142 @@
+
+2-species diurnal advection-diffusion problem
+Sensitivity: YES ( SIMULTANEOUS + FULL ERROR CONTROL )
+
+========================================================================
+     T     Q       H      NST                    Bottom left  Top right 
+========================================================================
+7.200e+03  3  3.039e+01   552
+                                Solution         1.0593e+04   1.1152e+04 
+                                                 2.5567e+11   2.6917e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -6.4963e+19  -6.8394e+19 
+                                                 7.2120e+19   7.6304e+19 
+                                ----------------------------------------
+                                Sensitivity 2   -4.4900e+14  -4.9768e+14 
+                                                -2.5039e+18  -2.7672e+18 
+------------------------------------------------------------------------
+1.440e+04  3  2.312e+01  1032
+                                Solution         6.9172e+06   7.2517e+06 
+                                                 2.6829e+11   2.8137e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -4.2432e+22  -4.4483e+22 
+                                                 6.2762e+22   6.6563e+22 
+                                ----------------------------------------
+                                Sensitivity 2   -4.8955e+17  -5.3580e+17 
+                                                -7.1116e+21  -7.7236e+21 
+------------------------------------------------------------------------
+2.160e+04  3  4.952e+01  1884
+                                Solution         2.7558e+07   2.9196e+07 
+                                                 3.1024e+11   3.3000e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -1.6903e+23  -1.7907e+23 
+                                                 4.0588e+23   4.4683e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -8.2851e+18  -9.3611e+18 
+                                                -8.2851e+22  -9.3662e+22 
+------------------------------------------------------------------------
+2.880e+04  3  7.302e+01  2213
+                                Solution         8.9631e+06   9.8602e+06 
+                                                 3.4824e+11   3.8331e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -5.4975e+22  -6.0476e+22 
+                                                 5.8239e+23   7.0579e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -5.2367e+18  -6.4007e+18 
+                                                -1.8450e+23  -2.2574e+23 
+------------------------------------------------------------------------
+3.600e+04  4  3.366e+01  2302
+                                Solution         1.4433e+04   1.6660e+04 
+                                                 3.4814e+11   4.0186e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -8.8547e+19  -1.0220e+20 
+                                                 5.6473e+23   7.6273e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -9.0220e+15  -1.2170e+16 
+                                                -1.9753e+23  -2.6679e+23 
+------------------------------------------------------------------------
+4.320e+04  4  4.497e+02  2522
+                                Solution        -6.3095e-09  -6.9919e-09 
+                                                 3.4900e+11   4.0867e+11 
+                                ----------------------------------------
+                                Sensitivity 1    1.1669e+08  -1.4148e+08 
+                                                 5.7083e+23   7.9553e+23 
+                                ----------------------------------------
+                                Sensitivity 2    1.0171e+05   1.1062e+05 
+                                                -1.9969e+23  -2.7830e+23 
+------------------------------------------------------------------------
+5.040e+04  4  4.497e+02  2538
+                                Solution         2.7652e-09   2.9811e-09 
+                                                 3.5570e+11   4.1225e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -1.7614e+07  -1.8570e+07 
+                                                 5.9553e+23   8.1823e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -3.9136e+03  -4.6763e+03 
+                                                -2.0833e+23  -2.8624e+23 
+------------------------------------------------------------------------
+5.760e+04  3  3.862e+01  2580
+                                Solution         4.0865e-09   1.2653e-08 
+                                                 3.6425e+11   4.1628e+11 
+                                ----------------------------------------
+                                Sensitivity 1    9.5471e+08   2.9501e+09 
+                                                 6.2592e+23   8.4334e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -1.2170e+04  -2.7099e+04 
+                                                -2.1896e+23  -2.9502e+23 
+------------------------------------------------------------------------
+6.480e+04  4  1.536e+02  2636
+                                Solution         3.6356e-08   1.1341e-07 
+                                                 3.6334e+11   4.2182e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -2.9344e+09  -9.1186e+09 
+                                                 6.2461e+23   8.7310e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -8.4752e+03  -3.0885e+04 
+                                                -2.1850e+23  -3.0543e+23 
+------------------------------------------------------------------------
+7.200e+04  4  1.536e+02  2683
+                                Solution         4.3358e-09   1.5100e-08 
+                                                 3.6192e+11   4.3354e+11 
+                                ----------------------------------------
+                                Sensitivity 1   -2.7350e+08  -9.6001e+08 
+                                                 6.2310e+23   9.2797e+23 
+                                ----------------------------------------
+                                Sensitivity 2    3.7283e+07   1.2247e+08 
+                                                -2.1798e+23  -3.2463e+23 
+------------------------------------------------------------------------
+7.920e+04  4  4.008e+02  2711
+                                Solution        -2.1912e-15  -7.8117e-15 
+                                                 3.6148e+11   4.4474e+11 
+                                ----------------------------------------
+                                Sensitivity 1    1.0220e+04   3.6486e+04 
+                                                 6.2481e+23   9.8067e+23 
+                                ----------------------------------------
+                                Sensitivity 2    1.2136e+00   4.0255e+00 
+                                                -2.1858e+23  -3.4307e+23 
+------------------------------------------------------------------------
+8.640e+04  4  4.008e+02  2729
+                                Solution         1.3608e-20   4.5805e-20 
+                                                 3.6318e+11   4.4524e+11 
+                                ----------------------------------------
+                                Sensitivity 1    1.2856e-02   5.0845e-02 
+                                                 6.3248e+23   9.8819e+23 
+                                ----------------------------------------
+                                Sensitivity 2   -3.1311e-05  -9.6668e-05 
+                                                -2.2126e+23  -3.4570e+23 
+------------------------------------------------------------------------
+
+Final Statistics
+
+nst     =  2729
+
+nfe     =  4101
+netf    =   203    nsetups  =   542
+nni     =  4097    ncfn     =     9
+
+nfSe    =  8202    nfeS     = 16404
+netfs   =     0    nsetupsS =     0
+nniS    =     0    ncfnS    =     0
+
+nli     =  8349    ncfl     =     0
+npe     =    63    nps      = 17946
diff --git a/examples/cvodes/serial/cvsDiurnal_kry.c b/examples/cvodes/serial/cvsDiurnal_kry.c
new file mode 100644
index 0000000..353f44d
--- /dev/null
+++ b/examples/cvodes/serial/cvsDiurnal_kry.c
@@ -0,0 +1,807 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4849 $
+ * $Date: 2016-08-03 16:00:06 -0700 (Wed, 03 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * 10 x 10 mesh, with simple polynomial initial profiles.
+ * The problem is solved with CVODES, with the BDF/GMRES
+ * method (i.e. using the CVSPGMR linear solver) and the
+ * block-diagonal part of the Newton matrix as a left
+ * preconditioner. A copy of the block-diagonal part of the
+ * Jacobian is saved and conditionally reused within the Precond
+ * routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>            /* main integrator header file */
+#include <cvodes/cvodes_spgmr.h>      /* prototypes & constants for CVSPGMR solver */
+#include <nvector/nvector_serial.h>   /* serial N_Vector types, fct. and macros */
+#include <sundials/sundials_dense.h>  /* use generic DENSE solver in preconditioning */
+#include <sundials/sundials_types.h>  /* definition of realtype */
+#include <sundials/sundials_math.h>   /* contains the macros ABS, SUNSQR, and EXP */
+
+/* Problem Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+#define NUM_SPECIES  2                 /* number of species         */
+#define KH           RCONST(4.0e-6)    /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)     /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)    /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)  /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           ZERO                 /* initial time */
+#define NOUT         12                   /* number of output times */
+#define TWOHR        RCONST(7200.0)       /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)       /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898)  /* pi */ 
+
+#define XMIN         ZERO                 /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define YMIN         RCONST(30.0)         /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+#define XMID         RCONST(10.0)         /* grid midpoints in x,y */          
+#define YMID         RCONST(40.0)
+
+#define MX           10             /* MX = number of x mesh points */
+#define MY           10             /* MY = number of y mesh points */
+#define NSMX         20             /* NSMX = NUM_SPECIES*MX */
+#define MM           (MX*MY)        /* MM = MX*MY */
+
+/* CVodeInit Constants */
+
+#define RTOL    RCONST(1.0e-5)    /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)     /* value of C1 or C2 at which tolerances */
+                                  /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)      /* scalar absolute tolerance */
+#define NEQ     (NUM_SPECIES*MM)  /* NEQ = number of equations */
+
+/* User-defined vector and matrix accessor macros: IJKth, IJth */
+
+/* IJKth is defined in order to isolate the translation from the
+   mathematical 3-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. IJth is defined in order to
+   write code which indexes into small dense matrices with a (row,column)
+   pair, where 1 <= row, column <= NUM_SPECIES.   
+   
+   IJKth(vdata,i,j,k) references the element in the vdata array for
+   species i at mesh point (j,k), where 1 <= i <= NUM_SPECIES,
+   0 <= j <= MX-1, 0 <= k <= MY-1. The vdata array is obtained via
+   the macro call vdata = N_VGetArrayPointer_Serial(v), where v is an N_Vector. 
+   For each mesh point (j,k), the elements for species i and i+1 are
+   contiguous within vdata.
+
+   IJth(a,i,j) references the (i,j)th entry of the small matrix realtype **a,
+   where 1 <= i,j <= NUM_SPECIES. The small matrix routines in sundials_dense.h
+   work with matrices stored by column in a 2-dimensional array. In C,
+   arrays are indexed starting at 0, not 1. */
+
+#define IJKth(vdata,i,j,k) (vdata[i-1 + (j)*NUM_SPECIES + (k)*NSMX])
+#define IJth(a,i,j)        (a[j-1][i-1])
+
+/* Type : UserData 
+   contains preconditioner blocks, pivot arrays, and problem constants */
+
+typedef struct {
+  realtype **P[MX][MY], **Jbd[MX][MY];
+  long int *pivot[MX][MY];
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+} *UserData;
+
+/* Private Helper Functions */
+
+static UserData AllocUserData(void);
+static void InitUserData(UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy);
+static void PrintOutput(void *cvode_mem, N_Vector u, realtype t);
+static void PrintFinalStats(void *cvode_mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+static int jtv(N_Vector v, N_Vector Jv, realtype t,
+               N_Vector y, N_Vector fy,
+               void *user_data, N_Vector tmp);
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, realtype gamma,
+                   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int iout, flag;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Allocate memory, and set problem data, initial values, tolerances */ 
+  u = N_VNew_Serial(NEQ);
+  if(check_flag((void *)u, "N_VNew_Serial", 0)) return(1);
+  data = AllocUserData();
+  if(check_flag((void *)data, "AllocUserData", 2)) return(1);
+  InitUserData(data);
+  SetInitialProfiles(u, data->dx, data->dy);
+  abstol=ATOL; 
+  reltol=RTOL;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Call CVSpgmr to specify the linear solver CVSPGMR 
+   * with left preconditioning and the maximum Krylov dimension maxl */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+
+  /* set the JAcobian-times-vector function */
+  flag = CVSpilsSetJacTimesVecFn(cvode_mem, jtv);
+  if(check_flag(&flag, "CVSpilsSetJacTimesVecFn", 1)) return(1);
+
+  /* Set the preconditioner solve and setup functions */
+  flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+  if(check_flag(&flag, "CVSpilsSetPreconditioner", 1)) return(1);
+
+  /* In loop over output points, call CVode, print results, test for error */
+  printf(" \n2-species diurnal advection-diffusion problem\n\n");
+  for (iout=1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+    flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+    PrintOutput(cvode_mem, u, t);
+    if(check_flag(&flag, "CVode", 1)) break;
+  }
+
+  PrintFinalStats(cvode_mem);
+
+  /* Free memory */
+  N_VDestroy_Serial(u);
+  FreeUserData(data);
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Allocate memory for data structure of type UserData */
+
+static UserData AllocUserData(void)
+{
+  int jx, jy;
+  UserData data;
+
+  data = (UserData) malloc(sizeof *data);
+
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      (data->P)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->Jbd)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+    }
+  }
+
+  return(data);
+}
+
+/* Load problem constants in data */
+
+static void InitUserData(UserData data)
+{
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/(MX-1);
+  data->dy = (YMAX-YMIN)/(MY-1);
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(TWO*data->dx);
+  data->vdco = (ONE/SUNSQR(data->dy))*KV0;
+}
+
+/* Free data memory */
+
+static void FreeUserData(UserData data)
+{
+  int jx, jy;
+
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      destroyMat((data->P)[jx][jy]);
+      destroyMat((data->Jbd)[jx][jy]);
+      destroyArray((data->pivot)[jx][jy]);
+    }
+  }
+
+  free(data);
+}
+
+/* Set initial conditions in u */
+
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy)
+{
+  int jx, jy;
+  realtype x, y, cx, cy;
+  realtype *udata;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profiles of c1 and c2 into u vector */
+
+  for (jy=0; jy < MY; jy++) {
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - YMID));
+    cy = ONE - cy + RCONST(0.5)*SUNSQR(cy);
+    for (jx=0; jx < MX; jx++) {
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - XMID));
+      cx = ONE - cx + RCONST(0.5)*SUNSQR(cx);
+      IJKth(udata,1,jx,jy) = C1_SCALE*cx*cy; 
+      IJKth(udata,2,jx,jy) = C2_SCALE*cx*cy;
+    }
+  }
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+
+static void PrintOutput(void *cvode_mem, N_Vector u, realtype t)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  int mxh = MX/2 - 1, myh = MY/2 - 1, mx1 = MX - 1, my1 = MY - 1;
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("t = %.2Le   no. steps = %ld   order = %d   stepsize = %.2Le\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#else
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#endif
+}
+
+/* Get and print final statistics */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics.. \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwLS = %5ld     leniwLS = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld\n"                  , nst);
+  printf("nfe     = %5ld     nfeLS   = %5ld\n"  , nfe, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n"  , nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n"  , nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n"  , npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute RHS function f(t,u). */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  realtype *udata, *dudata;
+  int jx, jy, idn, iup, ileft, iright;
+  UserData data;
+
+  data = (UserData) user_data;
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Set diurnal rate coefficients. */
+
+  s = sin(data->om*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    data->q4 = SUNRexp(-A4/s);
+  } else {
+      q3 = ZERO;
+      data->q4 = ZERO;
+  }
+
+  /* Make local copies of problem variables, for efficiency. */
+
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Loop over all grid points. */
+
+  for (jy=0; jy < MY; jy++) {
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    idn = (jy == 0) ? 1 : -1;
+    iup = (jy == MY-1) ? -1 : 1;
+    for (jx=0; jx < MX; jx++) {
+
+      /* Extract c1 and c2, and set kinetic rate terms. */
+
+      c1 = IJKth(udata,1,jx,jy); 
+      c2 = IJKth(udata,2,jx,jy);
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + TWO*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms. */
+
+      c1dn = IJKth(udata,1,jx,jy+idn);
+      c2dn = IJKth(udata,2,jx,jy+idn);
+      c1up = IJKth(udata,1,jx,jy+iup);
+      c2up = IJKth(udata,2,jx,jy+iup);
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms. */
+
+      ileft = (jx == 0) ? 1 : -1;
+      iright =(jx == MX-1) ? -1 : 1;
+      c1lt = IJKth(udata,1,jx+ileft,jy); 
+      c2lt = IJKth(udata,2,jx+ileft,jy);
+      c1rt = IJKth(udata,1,jx+iright,jy);
+      c2rt = IJKth(udata,2,jx+iright,jy);
+      hord1 = hordco*(c1rt - TWO*c1 + c1lt);
+      hord2 = hordco*(c2rt - TWO*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into udot. */
+
+      IJKth(dudata, 1, jx, jy) = vertd1 + hord1 + horad1 + rkin1; 
+      IJKth(dudata, 2, jx, jy) = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+  return(0);
+}
+
+
+/* Jacobian-times-vector routine. */
+
+static int jtv(N_Vector v, N_Vector Jv, realtype t,
+               N_Vector u, N_Vector fu,
+               void *user_data, N_Vector tmp)
+{
+  realtype c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt, c1rt, c2rt;
+  realtype v1, v2, v1dn, v2dn, v1up, v2up, v1lt, v2lt, v1rt, v2rt;
+  realtype Jv1, Jv2;
+  realtype cydn, cyup;
+  realtype s, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  int jx, jy, idn, iup, ileft, iright;
+  realtype *udata, *vdata, *Jvdata;
+  UserData data;
+
+  data = (UserData) user_data;
+
+  udata = N_VGetArrayPointer_Serial(u);
+  vdata = N_VGetArrayPointer_Serial(v);
+  Jvdata = N_VGetArrayPointer_Serial(Jv);
+
+  /* Set diurnal rate coefficients. */
+
+  s = sin(data->om*t);
+  if (s > ZERO) {
+    data->q4 = SUNRexp(-A4/s);
+  } else {
+    data->q4 = ZERO;
+  }
+
+  /* Make local copies of problem variables, for efficiency. */
+
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Loop over all grid points. */
+
+  for (jy=0; jy < MY; jy++) {
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+
+    idn = (jy == 0) ? 1 : -1;
+    iup = (jy == MY-1) ? -1 : 1;
+
+    for (jx=0; jx < MX; jx++) {
+
+      Jv1 = ZERO;
+      Jv2 = ZERO;
+
+      /* Extract c1 and c2 at the current location and at neighbors */
+
+      c1 = IJKth(udata,1,jx,jy); 
+      c2 = IJKth(udata,2,jx,jy);
+
+      v1 = IJKth(vdata,1,jx,jy); 
+      v2 = IJKth(vdata,2,jx,jy);
+
+      c1dn = IJKth(udata,1,jx,jy+idn);
+      c2dn = IJKth(udata,2,jx,jy+idn);
+      c1up = IJKth(udata,1,jx,jy+iup);
+      c2up = IJKth(udata,2,jx,jy+iup);
+
+      v1dn = IJKth(vdata,1,jx,jy+idn);
+      v2dn = IJKth(vdata,2,jx,jy+idn);
+      v1up = IJKth(vdata,1,jx,jy+iup);
+      v2up = IJKth(vdata,2,jx,jy+iup);
+
+      ileft = (jx == 0) ? 1 : -1;
+      iright =(jx == MX-1) ? -1 : 1;
+
+      c1lt = IJKth(udata,1,jx+ileft,jy); 
+      c2lt = IJKth(udata,2,jx+ileft,jy);
+      c1rt = IJKth(udata,1,jx+iright,jy);
+      c2rt = IJKth(udata,2,jx+iright,jy);
+
+      v1lt = IJKth(vdata,1,jx+ileft,jy); 
+      v2lt = IJKth(vdata,2,jx+ileft,jy);
+      v1rt = IJKth(vdata,1,jx+iright,jy);
+      v2rt = IJKth(vdata,2,jx+iright,jy);
+
+      /* Set kinetic rate terms. */
+
+      /* 
+	 rkin1 = -Q1*C3 * c1 - Q2 * c1*c2 + q4coef * c2  + TWO*C3*q3;
+	 rkin2 =  Q1*C3 * c1 - Q2 * c1*c2 - q4coef * c2;
+      */
+
+      Jv1 += -(Q1*C3 + Q2*c2) * v1  +  (q4coef - Q2*c1) * v2;
+      Jv2 +=  (Q1*C3 - Q2*c2) * v1  -  (q4coef + Q2*c1) * v2;
+
+      /* Set vertical diffusion terms. */
+
+      /* 
+	 vertd1 = -(cyup+cydn) * c1 + cyup * c1up + cydn * c1dn;
+	 vertd2 = -(cyup+cydn) * c2 + cyup * c2up + cydn * c2dn;
+      */
+
+      Jv1 += -(cyup+cydn) * v1  +  cyup * v1up  +  cydn * v1dn;
+      Jv2 += -(cyup+cydn) * v2  +  cyup * v2up  +  cydn * v2dn;
+
+      /* Set horizontal diffusion and advection terms. */
+
+      /* 
+	 hord1 = hordco*(c1rt - TWO*c1 + c1lt);
+	 hord2 = hordco*(c2rt - TWO*c2 + c2lt);
+      */
+
+      Jv1 += hordco*(v1rt - TWO*v1 + v1lt);
+      Jv2 += hordco*(v2rt - TWO*v2 + v2lt);
+
+      /* 
+	 horad1 = horaco*(c1rt - c1lt);
+	 horad2 = horaco*(c2rt - c2lt);
+      */
+
+      Jv1 += horaco*(v1rt - v1lt);
+      Jv2 += horaco*(v2rt - v2lt);
+
+      /* Load two components of J*v */
+
+      /* 
+	 IJKth(dudata, 1, jx, jy) = vertd1 + hord1 + horad1 + rkin1; 
+	 IJKth(dudata, 2, jx, jy) = vertd2 + hord2 + horad2 + rkin2;
+      */
+
+      IJKth(Jvdata, 1, jx, jy) = Jv1;
+      IJKth(Jvdata, 2, jx, jy) = Jv2;
+
+    }
+
+  }
+
+  return(0);
+
+}
+
+
+/* Preconditioner setup routine. Generate and preprocess P. */
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, realtype gamma,
+                   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3)
+{
+  realtype c1, c2, cydn, cyup, diag, ydn, yup, q4coef, dely, verdco, hordco;
+  realtype **(*P)[MY], **(*Jbd)[MY];
+  long int *(*pivot)[MY], ier;
+  int jx, jy;
+  realtype *udata, **a, **j;
+  UserData data;
+  
+  /* Make local copies of pointers in user_data, and of pointer to u's data */
+  
+  data = (UserData) user_data;
+  P = data->P;
+  Jbd = data->Jbd;
+  pivot = data->pivot;
+  udata = N_VGetArrayPointer_Serial(u);
+  
+  if (jok) {
+    
+    /* jok = TRUE: Copy Jbd to P */
+    
+    for (jy=0; jy < MY; jy++)
+      for (jx=0; jx < MX; jx++)
+        denseCopy(Jbd[jx][jy], P[jx][jy], NUM_SPECIES, NUM_SPECIES);
+    
+    *jcurPtr = FALSE;
+    
+  }
+  
+  else {
+    /* jok = FALSE: Generate Jbd from scratch and copy to P */
+    
+    /* Make local copies of problem variables, for efficiency. */
+    
+    q4coef = data->q4;
+    dely = data->dy;
+    verdco = data->vdco;
+    hordco  = data->hdco;
+    
+    /* Compute 2x2 diagonal Jacobian blocks (using q4 values 
+       computed on the last f call).  Load into P. */
+    
+    for (jy=0; jy < MY; jy++) {
+      ydn = YMIN + (jy - RCONST(0.5))*dely;
+      yup = ydn + dely;
+      cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+      cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+      diag = -(cydn + cyup + TWO*hordco);
+      for (jx=0; jx < MX; jx++) {
+        c1 = IJKth(udata,1,jx,jy);
+        c2 = IJKth(udata,2,jx,jy);
+        j = Jbd[jx][jy];
+        a = P[jx][jy];
+        IJth(j,1,1) = (-Q1*C3 - Q2*c2) + diag;
+        IJth(j,1,2) = -Q2*c1 + q4coef;
+        IJth(j,2,1) = Q1*C3 - Q2*c2;
+        IJth(j,2,2) = (-Q2*c1 - q4coef) + diag;
+        denseCopy(j, a, NUM_SPECIES, NUM_SPECIES);
+      }
+    }
+    
+    *jcurPtr = TRUE;
+    
+  }
+  
+  /* Scale by -gamma */
+  
+  for (jy=0; jy < MY; jy++)
+    for (jx=0; jx < MX; jx++)
+      denseScale(-gamma, P[jx][jy], NUM_SPECIES, NUM_SPECIES);
+  
+  /* Add identity matrix and do LU decompositions on blocks in place. */
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      denseAddIdentity(P[jx][jy], NUM_SPECIES);
+      ier = denseGETRF(P[jx][jy], NUM_SPECIES, NUM_SPECIES, pivot[jx][jy]);
+      if (ier != 0) return(1);
+    }
+  }
+  
+  return(0);
+}
+
+/* Preconditioner solve routine */
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype **(*P)[MY];
+  long int *(*pivot)[MY];
+  int jx, jy;
+  realtype *zdata, *v;
+  UserData data;
+
+  /* Extract the P and pivot arrays from user_data. */
+
+  data = (UserData) user_data;
+  P = data->P;
+  pivot = data->pivot;
+  zdata = N_VGetArrayPointer_Serial(z);
+  
+  N_VScale(ONE, r, z);
+  
+  /* Solve the block-diagonal system Px = r using LU factors stored
+     in P and pivot data in pivot, and return the solution in z. */
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      v = &(IJKth(zdata, 1, jx, jy));
+      denseGETRS(P[jx][jy], NUM_SPECIES, pivot[jx][jy], v);
+    }
+  }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsDiurnal_kry.out b/examples/cvodes/serial/cvsDiurnal_kry.out
new file mode 100644
index 0000000..7edac66
--- /dev/null
+++ b/examples/cvodes/serial/cvsDiurnal_kry.out
@@ -0,0 +1,63 @@
+ 
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 219   order = 5   stepsize = 1.59e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 251   order = 5   stepsize = 3.77e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 277   order = 5   stepsize = 2.75e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 301   order = 5   stepsize = 3.87e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 343   order = 3   stepsize = 2.34e+01
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 421   order = 4   stepsize = 5.26e+02
+c1 (bot.left/middle/top rt.) =   -4.385e-06    -1.528e-06    -4.905e-06
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 445   order = 3   stepsize = 1.98e+02
+c1 (bot.left/middle/top rt.) =    4.461e-07     1.869e-07     4.842e-07
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 462   order = 5   stepsize = 2.35e+02
+c1 (bot.left/middle/top rt.) =    3.204e-09     1.203e-09     3.555e-09
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 474   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =   -1.066e-09    -3.409e-10    -1.206e-09
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 486   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =    2.614e-09     9.722e-10     2.904e-09
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 498   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =    4.649e-11     1.729e-11     5.161e-11
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 510   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =   -8.856e-14    -3.348e-14    -9.785e-14
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.107e+11     4.163e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2096     leniw   =    62
+lenrwLS =  2046     leniwLS =    10
+nst     =   510
+nfe     =   675     nfeLS   =   641
+nni     =   671     nli     =   641
+nsetups =    94     netf    =    36
+npe     =     9     nps     =  1243
+ncfn    =     0     ncfl    =     0
+
diff --git a/examples/cvodes/serial/cvsDiurnal_kry_bp.c b/examples/cvodes/serial/cvsDiurnal_kry_bp.c
new file mode 100644
index 0000000..f7058f3
--- /dev/null
+++ b/examples/cvodes/serial/cvsDiurnal_kry_bp.c
@@ -0,0 +1,530 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * 10 x 10 mesh, with simple polynomial initial profiles.
+ * The problem is solved with CVODES, with the BDF/GMRES
+ * method (i.e. using the CVSPGMR linear solver) and a banded
+ * preconditioner, generated by difference quotients, using the
+ * module CVBANDPRE. The problem is solved with left and right
+ * preconditioning.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>           /* main integrator header file */
+#include <cvodes/cvodes_spgmr.h>     /* prototypes & constants for CVSPGMR solver */
+#include <cvodes/cvodes_bandpre.h>   /* prototypes & constants for CVBANDPRE module */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fct. and macros */
+#include <sundials/sundials_types.h> /* definition of realtype */
+#include <sundials/sundials_math.h>  /* contains the macros ABS, SUNSQR, and EXP */
+
+/* Problem Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+#define NUM_SPECIES  2                 /* number of species         */
+#define KH           RCONST(4.0e-6)    /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)     /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)    /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)  /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           ZERO                /* initial time */
+#define NOUT         12                  /* number of output times */
+#define TWOHR        RCONST(7200.0)      /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)      /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898) /* pi */ 
+
+#define XMIN         ZERO                /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define YMIN         RCONST(30.0)        /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+#define XMID         RCONST(10.0)        /* grid midpoints in x,y */          
+#define YMID         RCONST(40.0)
+
+#define MX           10             /* MX = number of x mesh points */
+#define MY           10             /* MY = number of y mesh points */
+#define NSMX         20             /* NSMX = NUM_SPECIES*MX */
+#define MM           (MX*MY)        /* MM = MX*MY */
+
+/* CVodeInit Constants */
+
+#define RTOL    RCONST(1.0e-5)   /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)    /* value of C1 or C2 at which tolerances */
+                                 /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)     /* scalar absolute tolerance */
+#define NEQ     (NUM_SPECIES*MM) /* NEQ = number of equations */
+
+/* User-defined vector and matrix accessor macros: IJKth, IJth */
+
+/* IJKth is defined in order to isolate the translation from the
+   mathematical 3-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. IJth is defined in order to
+   write code which indexes into small dense matrices with a (row,column)
+   pair, where 1 <= row, column <= NUM_SPECIES.   
+   
+   IJKth(vdata,i,j,k) references the element in the vdata array for
+   species i at mesh point (j,k), where 1 <= i <= NUM_SPECIES,
+   0 <= j <= MX-1, 0 <= k <= MY-1. The vdata array is obtained via
+   the macro call vdata = N_VGetArrayPointer_Serial(v), where v is an N_Vector. 
+   For each mesh point (j,k), the elements for species i and i+1 are
+   contiguous within vdata.
+
+   IJth(a,i,j) references the (i,j)th entry of the small matrix realtype **a,
+   where 1 <= i,j <= NUM_SPECIES. The small matrix routines in dense.h
+   work with matrices stored by column in a 2-dimensional array. In C,
+   arrays are indexed starting at 0, not 1. */
+
+#define IJKth(vdata,i,j,k) (vdata[i-1 + (j)*NUM_SPECIES + (k)*NSMX])
+#define IJth(a,i,j)        (a[j-1][i-1])
+
+/* Type : UserData 
+   contains problem constants */
+
+typedef struct {
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+} *UserData;
+
+/* Private Helper Functions */
+
+static void InitUserData(UserData data);
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy);
+static void PrintIntro(long int mu, long int ml);
+static void PrintOutput(void *cvode_mem, N_Vector u, realtype t);
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Function Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int flag, iout, jpre;
+  long int ml, mu;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Allocate and initialize u, and set problem data and tolerances */ 
+  u = N_VNew_Serial(NEQ);
+  if(check_flag((void *)u, "N_VNew_Serial", 0)) return(1);
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  InitUserData(data);
+  SetInitialProfiles(u, data->dx, data->dy);
+  abstol = ATOL; 
+  reltol = RTOL;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Call CVSpgmr to specify the linear solver CVSPGMR 
+     with left preconditioning and the maximum Krylov dimension maxl */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+
+  /* Call CVBandPreInit to initialize band preconditioner */
+  ml = mu = 2;
+  flag = CVBandPrecInit(cvode_mem, NEQ, mu, ml);
+  if(check_flag(&flag, "CVBandPrecInit", 0)) return(1);
+
+  PrintIntro(mu, ml);
+
+  /* Loop over jpre (= PREC_LEFT, PREC_RIGHT), and solve the problem */
+
+  for (jpre = PREC_LEFT; jpre <= PREC_RIGHT; jpre++) {
+    
+    /* On second run, re-initialize u, the solver, and CVSPGMR */
+    
+    if (jpre == PREC_RIGHT) {
+      
+      SetInitialProfiles(u, data->dx, data->dy);
+      
+      flag = CVodeReInit(cvode_mem, T0, u);
+      if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+
+      flag = CVSpilsSetPrecType(cvode_mem, PREC_RIGHT);
+      check_flag(&flag, "CVSpilsSetPrecType", 1);
+      
+      printf("\n\n-------------------------------------------------------");
+      printf("------------\n");
+    }
+    
+    printf("\n\nPreconditioner type is:  jpre = %s\n\n",
+           (jpre == PREC_LEFT) ? "PREC_LEFT" : "PREC_RIGHT");
+    
+    /* In loop over output points, call CVode, print results, test for error */
+    
+    for (iout = 1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+      flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+      check_flag(&flag, "CVode", 1);
+      PrintOutput(cvode_mem, u, t);
+      if (flag != CV_SUCCESS) {
+        break;
+      }
+    }
+    
+    /* Print final statistics */
+    
+    PrintFinalStats(cvode_mem);
+    
+  } /* End of jpre loop */
+
+  /* Free memory */
+  N_VDestroy_Serial(u);
+  free(data);
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Load problem constants in data */
+
+static void InitUserData(UserData data)
+{
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/(MX-1);
+  data->dy = (YMAX-YMIN)/(MY-1);
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(TWO*data->dx);
+  data->vdco = (ONE/SUNSQR(data->dy))*KV0;
+}
+
+/* Set initial conditions in u */
+
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy)
+{
+  int jx, jy;
+  realtype x, y, cx, cy;
+  realtype *udata;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profiles of c1 and c2 into u vector */
+
+  for (jy = 0; jy < MY; jy++) {
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - YMID));
+    cy = ONE - cy + RCONST(0.5)*SUNSQR(cy);
+    for (jx = 0; jx < MX; jx++) {
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - XMID));
+      cx = ONE - cx + RCONST(0.5)*SUNSQR(cx);
+      IJKth(udata,1,jx,jy) = C1_SCALE*cx*cy; 
+      IJKth(udata,2,jx,jy) = C2_SCALE*cx*cy;
+    }
+  }
+}
+
+static void PrintIntro(long int mu, long int ml)
+{
+  printf("2-species diurnal advection-diffusion problem, %d by %d mesh\n",
+         MX, MY);
+  printf("SPGMR solver; band preconditioner; mu = %ld, ml = %ld\n\n",
+         mu, ml);
+
+  return;
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+
+static void PrintOutput(void *cvode_mem, N_Vector u,realtype t)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  int mxh = MX/2 - 1, myh = MY/2 - 1, mx1 = MX - 1, my1 = MY - 1;
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("t = %.2Le   no. steps = %ld   order = %d   stepsize = %.2Le\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#else
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#endif
+}
+
+/* Get and print final statistics */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int lenrwBP, leniwBP;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  long int nfeBP;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1);
+
+  flag = CVBandPrecGetWorkSpace(cvode_mem, &lenrwBP, &leniwBP);
+  check_flag(&flag, "CVBandPrecGetWorkSpace", 1);
+  flag = CVBandPrecGetNumRhsEvals(cvode_mem, &nfeBP);
+  check_flag(&flag, "CVBandPrecGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics.. \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwls = %5ld     leniwls = %5ld\n", lenrwLS, leniwLS);
+  printf("lenrwbp = %5ld     leniwbp = %5ld\n", lenrwBP, leniwBP);
+  printf("nst     = %5ld\n"                  , nst);
+  printf("nfe     = %5ld     nfetot  = %5ld\n"  , nfe, nfe+nfeLS+nfeBP);
+  printf("nfeLS   = %5ld     nfeBP   = %5ld\n"  , nfeLS, nfeBP);
+  printf("nni     = %5ld     nli     = %5ld\n"  , nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n"  , nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n"  , npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl);
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Function called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute f(t,u). */
+
+static int f(realtype t, N_Vector u, N_Vector udot,void *user_data)
+{
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  realtype *udata, *dudata;
+  int idn, iup, ileft, iright, jx, jy;
+  UserData data;
+
+  data = (UserData) user_data;
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Set diurnal rate coefficients. */
+
+  s = sin(data->om*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    data->q4 = SUNRexp(-A4/s);
+  } else {
+    q3 = ZERO;
+    data->q4 = ZERO;
+  }
+
+  /* Make local copies of problem variables, for efficiency. */
+
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Loop over all grid points. */
+
+  for (jy = 0; jy < MY; jy++) {
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    idn = (jy == 0) ? 1 : -1;
+    iup = (jy == MY-1) ? -1 : 1;
+    for (jx = 0; jx < MX; jx++) {
+
+      /* Extract c1 and c2, and set kinetic rate terms. */
+
+      c1 = IJKth(udata,1,jx,jy); 
+      c2 = IJKth(udata,2,jx,jy);
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + TWO*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms. */
+
+      c1dn = IJKth(udata,1,jx,jy+idn);
+      c2dn = IJKth(udata,2,jx,jy+idn);
+      c1up = IJKth(udata,1,jx,jy+iup);
+      c2up = IJKth(udata,2,jx,jy+iup);
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms. */
+
+      ileft = (jx == 0) ? 1 : -1;
+      iright =(jx == MX-1) ? -1 : 1;
+      c1lt = IJKth(udata,1,jx+ileft,jy); 
+      c2lt = IJKth(udata,2,jx+ileft,jy);
+      c1rt = IJKth(udata,1,jx+iright,jy);
+      c2rt = IJKth(udata,2,jx+iright,jy);
+      hord1 = hordco*(c1rt - TWO*c1 + c1lt);
+      hord2 = hordco*(c2rt - TWO*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into udot. */
+
+      IJKth(dudata, 1, jx, jy) = vertd1 + hord1 + horad1 + rkin1; 
+      IJKth(dudata, 2, jx, jy) = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsDiurnal_kry_bp.out b/examples/cvodes/serial/cvsDiurnal_kry_bp.out
new file mode 100644
index 0000000..6a49f52
--- /dev/null
+++ b/examples/cvodes/serial/cvsDiurnal_kry_bp.out
@@ -0,0 +1,138 @@
+2-species diurnal advection-diffusion problem, 10 by 10 mesh
+SPGMR solver; band preconditioner; mu = 2, ml = 2
+
+
+
+Preconditioner type is:  jpre = PREC_LEFT
+
+t = 7.20e+03   no. steps = 190   order = 5   stepsize = 1.61e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 221   order = 5   stepsize = 3.83e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 246   order = 5   stepsize = 2.78e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 291   order = 4   stepsize = 1.14e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 331   order = 4   stepsize = 8.86e+01
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 402   order = 4   stepsize = 4.15e+02
+c1 (bot.left/middle/top rt.) =   -5.769e-09     3.421e-09    -3.866e-09
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 415   order = 5   stepsize = 4.58e+02
+c1 (bot.left/middle/top rt.) =   -4.979e-18    -7.193e-15    -2.653e-15
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 430   order = 4   stepsize = 2.19e+02
+c1 (bot.left/middle/top rt.) =    1.611e-17     4.587e-16    -4.704e-18
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 444   order = 4   stepsize = 5.79e+02
+c1 (bot.left/middle/top rt.) =    9.505e-16     1.154e-14    -2.316e-16
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 457   order = 4   stepsize = 5.79e+02
+c1 (bot.left/middle/top rt.) =    3.910e-16    -4.848e-14     2.545e-15
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 469   order = 4   stepsize = 5.79e+02
+c1 (bot.left/middle/top rt.) =   -2.903e-15     2.152e-13     3.551e-16
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 481   order = 4   stepsize = 5.79e+02
+c1 (bot.left/middle/top rt.) =    2.358e-23     2.316e-18    -6.007e-16
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.108e+11     4.162e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2096     leniw   =    62
+lenrwls =  2046     leniwls =    10
+lenrwbp =  2400     leniwbp =   200
+nst     =   481
+nfe     =   620     nfetot  =  1226
+nfeLS   =   561     nfeBP   =    45
+nni     =   616     nli     =   561
+nsetups =    88     netf    =    28
+npe     =     9     nps     =  1096
+ncfn    =     0     ncfl    =     0
+
+
+
+-------------------------------------------------------------------
+
+
+Preconditioner type is:  jpre = PREC_RIGHT
+
+t = 7.20e+03   no. steps = 219   order = 5   stepsize = 1.55e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 251   order = 5   stepsize = 3.59e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 279   order = 5   stepsize = 3.58e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 301   order = 5   stepsize = 2.40e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 330   order = 5   stepsize = 1.31e+02
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 381   order = 4   stepsize = 3.91e+02
+c1 (bot.left/middle/top rt.) =    3.125e-10     2.750e-10     3.496e-10
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 395   order = 5   stepsize = 4.06e+02
+c1 (bot.left/middle/top rt.) =   -3.259e-14    -1.715e-12    -6.477e-14
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 408   order = 5   stepsize = 4.57e+02
+c1 (bot.left/middle/top rt.) =    2.382e-14     5.871e-12     6.950e-14
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 420   order = 5   stepsize = 7.04e+02
+c1 (bot.left/middle/top rt.) =    1.493e-18     1.862e-17    -7.080e-16
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 430   order = 5   stepsize = 7.04e+02
+c1 (bot.left/middle/top rt.) =   -1.345e-20     1.847e-18    -6.157e-16
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 440   order = 5   stepsize = 7.04e+02
+c1 (bot.left/middle/top rt.) =    3.617e-20    -3.355e-18    -7.407e-16
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 450   order = 5   stepsize = 7.04e+02
+c1 (bot.left/middle/top rt.) =   -5.505e-20     3.704e-18    -2.929e-15
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.106e+11     4.163e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2096     leniw   =    62
+lenrwls =  2046     leniwls =    10
+lenrwbp =  2400     leniwbp =   200
+nst     =   450
+nfe     =   564     nfetot  =  1319
+nfeLS   =   670     nfeBP   =    85
+nni     =   560     nli     =   670
+nsetups =    71     netf    =    21
+npe     =     8     nps     =  1140
+ncfn    =     0     ncfl    =     0
+
diff --git a/examples/cvodes/serial/cvsFoodWeb_ASAi_kry.c b/examples/cvodes/serial/cvsFoodWeb_ASAi_kry.c
new file mode 100644
index 0000000..b371559
--- /dev/null
+++ b/examples/cvodes/serial/cvsFoodWeb_ASAi_kry.c
@@ -0,0 +1,1363 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * This program solves a stiff ODE system that arises from a system
+ * of partial differential equations. The PDE system is a food web
+ * population model, with predator-prey interaction and diffusion on
+ * the unit square in two dimensions. The dependent variable vector
+ * is the following:
+ *
+ *        1   2        ns
+ *  c = (c , c , ..., c  )
+ *
+ * and the PDEs are as follows:
+ *
+ *    i               i      i
+ *  dc /dt  =  d(i)*(c    + c   )  +  f (x,y,c)  (i=1,...,ns)
+ *                    xx     yy        i
+ *
+ * where
+ *
+ *                 i          ns         j
+ *  f (x,y,c)  =  c *(b(i) + sum a(i,j)*c ).
+ *   i                       j=1
+ *
+ * The number of species is ns = 2*np, with the first np being prey
+ * and the last np being predators. The coefficients a(i,j), b(i),
+ * d(i) are:
+ *
+ *  a(i,i) = -a  (all i)
+ *  a(i,j) = -g  (i <= np, j > np)
+ *  a(i,j) =  e  (i > np, j <= np)
+ *  b(i) =  b*(1 + alpha*x*y)  (i <= np)
+ *  b(i) = -b*(1 + alpha*x*y)  (i > np)
+ *  d(i) = Dprey  (i <= np)
+ *  d(i) = Dpred  (i > np)
+ *
+ * The spatial domain is the unit square. The final time is 10.
+ * The boundary conditions are: normal derivative = 0.
+ * A polynomial in x and y is used to set the initial conditions.
+ *
+ * The PDEs are discretized by central differencing on an MX by MY
+ * mesh. The resulting ODE system is stiff.
+ *
+ * The ODE system is solved by CVODES using Newton iteration and
+ * the CVSPGMR linear solver (scaled preconditioned GMRES).
+ *
+ * The preconditioner matrix used is the product of two matrices:
+ * (1) A matrix, only defined implicitly, based on a fixed number
+ * of Gauss-Seidel iterations using the diffusion terms only.
+ * (2) A block-diagonal matrix based on the partial derivatives of
+ * the interaction terms f only, using block-grouping (computing
+ * only a subset of the ns by ns blocks).
+ *
+ * Additionally, CVODES integrates backwards in time the
+ * the semi-discrete form of the adjoint PDE:
+ *   d(lambda)/dt = - D^T ( lambda_xx + lambda_yy )
+ *                  - F_c^T lambda - g_c^T
+ * with homogeneous Neumann boundary conditions and final
+ * conditions are the following:
+ *   lambda(x,y,t=t_final) = 0.0
+ * whose solution at t = 0 represents the sensitivity of
+ *   G = int_0^t_final int_x int _y g(t,c) dx dy dt
+ * with respect to the initial conditions of the original problem.
+ *
+ * In this example,
+ *   g(t,c) = c(ISPEC), with ISPEC defined below.
+ *
+ * During the forward run, CVODES also computes G as
+ *   G = phi(t_final)
+ * where
+ *   d(phi)/dt = int_x int _y g(t,c) dx dy
+ * and the 2-D integral is evaluated with Simpson's rule.
+ * -----------------------------------------------------------------
+ * Reference:  Peter N. Brown and Alan C. Hindmarsh, Reduced Storage
+ * Matrix Methods in Stiff ODE Systems, J. Appl. Math. & Comp., 31
+ * (1989), pp. 40-91.  Also available as Lawrence Livermore National
+ * Laboratory Report UCRL-95088, Rev. 1, June 1987.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>
+#include <cvodes/cvodes_spgmr.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Problem Specification Constants */
+
+#define AA ONE               /* AA = a */
+#define EE RCONST(1e4)       /* EE = e */
+#define GG RCONST(0.5e-6)    /* GG = g */
+#define BB ONE               /* BB = b */
+#define DPREY ONE    
+#define DPRED RCONST(0.5)
+#define ALPH ONE
+#define NP 3
+#define NS (2*NP)
+
+/* Method Constants */
+
+#define MX   20
+#define MY   20
+#define MXNS (MX*NS)
+#define AX   ONE
+#define AY   ONE
+#define DX   (AX/(realtype)(MX-1))
+#define DY   (AY/(realtype)(MY-1))
+#define MP   NS
+#define MQ   (MX*MY)
+#define MXMP  (MX*MP)
+#define NGX   2
+#define NGY   2
+#define NGRP  (NGX*NGY)
+#define ITMAX 5
+
+/* CVodeInit Constants */
+
+#define NEQ   (NS*MX*MY)
+#define T0    RCONST(0.0)
+#define RTOL  RCONST(1e-5)
+#define ATOL  RCONST(1e-5)
+
+/* Output Constants */
+
+#define TOUT RCONST(10.0)
+
+/* Note: The value for species i at mesh point (j,k) is stored in */
+/* component number (i-1) + j*NS + k*NS*MX of an N_Vector,        */
+/* where 1 <= i <= NS, 0 <= j < MX, 0 <= k < MY.                  */
+
+/* Structure for user data */
+
+typedef struct {
+  realtype **P[NGRP];
+  long int *pivot[NGRP];
+  int ns,  mxns, mp, mq, mx, my, ngrp, ngx, ngy, mxmp;
+  int jgx[NGX+1], jgy[NGY+1], jigx[MX], jigy[MY];
+  int jxr[NGX], jyr[NGY];
+  realtype acoef[NS][NS], bcoef[NS], diff[NS];
+  realtype cox[NS], coy[NS], dx, dy, srur;
+  realtype fsave[NEQ];
+  realtype fBsave[NEQ];
+  N_Vector rewt;
+  void *cvode_mem;
+  int indexB;
+} *WebData;
+
+/* Adjoint calculation constants */
+/* G = int_t int_x int_y c(ISPEC) dy dx dt */
+
+#define NSTEPS 300 /* check points every NSTEPS steps */
+#define ISPEC  6   /* species # in objective */
+
+/* Prototypes for user-supplied functions */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int Precond(realtype t, N_Vector c, N_Vector fc,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data,
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+static int PSolve(realtype t, N_Vector c, N_Vector fc,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+static int fB(realtype t, N_Vector c, N_Vector cB, 
+               N_Vector cBdot, void *user_data);
+
+static int PrecondB(realtype t, N_Vector c, 
+                    N_Vector cB, N_Vector fcB, booleantype jok, 
+                    booleantype *jcurPtr, realtype gamma,
+                    void *user_data,
+                    N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+static int PSolveB(realtype t, N_Vector c, 
+                   N_Vector cB, N_Vector fcB, 
+                   N_Vector r, N_Vector z,
+                   realtype gamma, realtype delta, 
+                   int lr, void *user_data, N_Vector vtemp);
+
+/* Prototypes for private functions */
+
+static WebData AllocUserData(void);
+static void InitUserData(WebData wdata);
+static void SetGroups(int m, int ng, int jg[], int jig[], int jr[]);
+static void CInit(N_Vector c, WebData wdata);
+static void PrintOutput(N_Vector c, int ns, int mxns, WebData wdata);
+static void FreeUserData(WebData wdata);
+static void WebRates(realtype x, realtype y, realtype t, realtype c[], realtype rate[],
+                     WebData wdata);
+static void WebRatesB(realtype x, realtype y, realtype t, realtype c[], realtype cB[], 
+                      realtype rate[], realtype rateB[], WebData wdata);
+static void fblock (realtype t, realtype cdata[], int jx, int jy, realtype cdotdata[],
+                    WebData wdata);
+static void GSIter(realtype gamma, N_Vector z, N_Vector x, WebData wdata);
+static realtype doubleIntgr(N_Vector c, int i, WebData wdata);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Small Vector Kernels */
+
+static void v_inc_by_prod(realtype u[], realtype v[], realtype w[], int n);
+static void v_sum_prods(realtype u[], realtype p[], realtype q[], realtype v[], realtype w[],
+                        int n);
+static void v_prod(realtype u[], realtype v[], realtype w[], int n);
+static void v_zero(realtype u[], int n);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  realtype abstol=ATOL, reltol=RTOL, t;
+  N_Vector c;
+  WebData wdata;
+  void *cvode_mem;
+
+  int flag, ncheck;
+  
+  int indexB;
+
+  realtype reltolB=RTOL, abstolB=ATOL;
+  N_Vector cB;
+
+  c = NULL;
+  cB = NULL;
+  wdata = NULL;
+  cvode_mem = NULL;
+
+  /* Allocate and initialize user data */
+
+  wdata = AllocUserData();
+  if(check_flag((void *)wdata, "AllocUserData", 2)) return(1);
+  InitUserData(wdata);
+
+  /* Set-up forward problem */
+
+  /* Initializations */
+  c = N_VNew_Serial(NEQ+1);
+  if(check_flag((void *)c, "N_VNew_Serial", 0)) return(1);
+  CInit(c, wdata);
+
+  /* Call CVodeCreate/CVodeInit for forward run */
+  printf("\nCreate and allocate CVODES memory for forward run\n");
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  wdata->cvode_mem = cvode_mem; /* Used in Precond */
+  flag = CVodeSetUserData(cvode_mem, wdata);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+  flag = CVodeInit(cvode_mem, f, T0, c);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Call CVSpgmr for forward run */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+  flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+  if(check_flag(&flag, "CVSpilsSetPreconditioner", 1)) return(1);
+
+  /* Set-up adjoint calculations */
+
+  printf("\nAllocate global memory\n");
+  flag = CVodeAdjInit(cvode_mem, NSTEPS, CV_HERMITE);
+  if(check_flag(&flag, "CVadjInit", 1)) return(1);
+
+  /* Perform forward run */
+
+  printf("\nForward integration\n");
+  flag = CVodeF(cvode_mem, TOUT, c, &t, CV_NORMAL, &ncheck);
+  if(check_flag(&flag, "CVodeF", 1)) return(1);
+
+  printf("\nncheck = %d\n", ncheck);
+
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("\n   G = int_t int_x int_y c%d(t,x,y) dx dy dt = %Lf \n\n", 
+         ISPEC, N_VGetArrayPointer_Serial(c)[NEQ]);
+#else
+  printf("\n   G = int_t int_x int_y c%d(t,x,y) dx dy dt = %f \n\n", 
+         ISPEC, N_VGetArrayPointer_Serial(c)[NEQ]);
+#endif
+
+  /* Set-up backward problem */
+
+  /* Allocate cB */
+  cB = N_VNew_Serial(NEQ);
+  if(check_flag((void *)cB, "N_VNew_Serial", 0)) return(1);
+  /* Initialize cB = 0 */
+  N_VConst(ZERO, cB);
+
+  /* Create and allocate CVODES memory for backward run */
+  printf("\nCreate and allocate CVODES memory for backward run\n");
+  flag = CVodeCreateB(cvode_mem, CV_BDF, CV_NEWTON, &indexB);
+  if(check_flag(&flag, "CVodeCreateB", 1)) return(1);
+  flag = CVodeSetUserDataB(cvode_mem, indexB, wdata);
+  if(check_flag(&flag, "CVodeSetUserDataB", 1)) return(1);
+  flag = CVodeSetMaxNumStepsB(cvode_mem, indexB, 1000);
+  if(check_flag(&flag, "CVodeSetMaxNumStepsB", 1)) return(1);
+  flag = CVodeInitB(cvode_mem, indexB, fB, TOUT, cB);
+  if(check_flag(&flag, "CVodeInitB", 1)) return(1);
+  flag = CVodeSStolerancesB(cvode_mem, indexB, reltolB, abstolB);
+  if(check_flag(&flag, "CVodeSStolerancesB", 1)) return(1);
+
+  wdata->indexB = indexB;
+
+  /* Call CVSpgmr */
+  flag = CVSpgmrB(cvode_mem, indexB, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVSpgmrB", 1)) return(1);
+  flag = CVSpilsSetPreconditionerB(cvode_mem, indexB, PrecondB, PSolveB);
+  if(check_flag(&flag, "CVSpilsSetPreconditionerB", 1)) return(1);
+
+  /* Perform backward integration */
+
+  printf("\nBackward integration\n");
+  flag = CVodeB(cvode_mem, T0, CV_NORMAL);
+  if(check_flag(&flag, "CVodeB", 1)) return(1);
+
+  flag = CVodeGetB(cvode_mem, indexB, &t, cB);
+  if(check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  PrintOutput(cB, NS, MXNS, wdata);
+
+  /* Free all memory */
+  CVodeFree(&cvode_mem);
+
+  N_VDestroy_Serial(c);
+  N_VDestroy_Serial(cB);
+
+  FreeUserData(wdata);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * This routine computes the right-hand side of the ODE system and
+ * returns it in cdot. The interaction rates are computed by calls to WebRates,
+ * and these are saved in fsave for use in preconditioning.
+ */
+
+static int f(realtype t, N_Vector c, N_Vector cdot, void *user_data)
+{
+  int i, ic, ici, idxl, idxu, idyl, idyu, iyoff, jx, jy, ns, mxns;
+  realtype dcxli, dcxui, dcyli, dcyui, x, y, *cox, *coy, *fsave, dx, dy;
+  realtype *cdata, *cdotdata;
+  WebData wdata;
+  
+  wdata = (WebData) user_data;
+  cdata = N_VGetArrayPointer_Serial(c);
+  cdotdata = N_VGetArrayPointer_Serial(cdot);
+  
+  mxns = wdata->mxns;
+  ns = wdata->ns;
+  fsave = wdata->fsave;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+  
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    iyoff = mxns*jy;
+    idyu = (jy == MY-1) ? -mxns : mxns;
+    idyl = (jy == 0) ? -mxns : mxns;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      ic = iyoff + ns*jx;
+      /* Get interaction rates at one point (x,y). */
+      WebRates(x, y, t, cdata+ic, fsave+ic, wdata);
+      idxu = (jx == MX-1) ? -ns : ns;
+      idxl = (jx == 0) ? -ns : ns;
+      for (i = 1; i <= ns; i++) {
+        ici = ic + i-1;
+        /* Do differencing in y. */
+        dcyli = cdata[ici] - cdata[ici-idyl];
+        dcyui = cdata[ici+idyu] - cdata[ici];
+        /* Do differencing in x. */
+        dcxli = cdata[ici] - cdata[ici-idxl];
+        dcxui = cdata[ici+idxu] - cdata[ici];
+        /* Collect terms and load cdot elements. */
+        cdotdata[ici] = coy[i-1]*(dcyui - dcyli) + 
+                        cox[i-1]*(dcxui - dcxli) +
+                        fsave[ici];
+      }
+    }
+  }
+
+  /* Quadrature equation (species 1) */
+  cdotdata[NEQ] = doubleIntgr(c,ISPEC,wdata);
+
+  return(0);
+}
+
+/*
+ * This routine generates the block-diagonal part of the Jacobian
+ * corresponding to the interaction rates, multiplies by -gamma, adds
+ * the identity matrix, and calls denseGETRF to do the LU decomposition of
+ * each diagonal block. The computation of the diagonal blocks uses
+ * the preset block and grouping information. One block per group is
+ * computed. The Jacobian elements are generated by difference
+ * quotients using calls to the routine fblock.
+ *
+ * This routine can be regarded as a prototype for the general case
+ * of a block-diagonal preconditioner. The blocks are of size mp, and
+ * there are ngrp=ngx*ngy blocks computed in the block-grouping scheme.
+ */
+ 
+static int Precond(realtype t, N_Vector c, N_Vector fc,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data,
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int N;
+  realtype ***P;
+  long int **pivot, ier;
+  int i, if0, if00, ig, igx, igy, j, jj, jx, jy;
+  int *jxr, *jyr, ngrp, ngx, ngy, mxmp, flag;
+  long int mp;
+  realtype uround, fac, r, r0, save, srur;
+  realtype *f1, *fsave, *cdata, *rewtdata;
+  void *cvode_mem;
+  WebData wdata;
+  N_Vector rewt;
+
+  wdata = (WebData) user_data;
+  cvode_mem = wdata->cvode_mem;
+  rewt = wdata->rewt;
+  flag = CVodeGetErrWeights(cvode_mem, rewt);
+  if(check_flag(&flag, "CVodeGetErrWeights", 1)) return(1);
+
+  cdata = N_VGetArrayPointer_Serial(c);
+  rewtdata = N_VGetArrayPointer_Serial(rewt);
+
+  uround = UNIT_ROUNDOFF;
+
+  P = wdata->P;
+  pivot = wdata->pivot;
+  jxr = wdata->jxr;
+  jyr = wdata->jyr;
+  mp = wdata->mp;
+  srur = wdata->srur;
+  ngrp = wdata->ngrp;
+  ngx = wdata->ngx;
+  ngy = wdata->ngy;
+  mxmp = wdata->mxmp;
+  fsave = wdata->fsave;
+
+  /* Make mp calls to fblock to approximate each diagonal block of Jacobian.
+     Here, fsave contains the base value of the rate vector and 
+     r0 is a minimum increment factor for the difference quotient. */
+
+  f1 = N_VGetArrayPointer_Serial(vtemp1);
+
+  fac = N_VWrmsNorm (fc, rewt);
+  N = NEQ+1;
+  r0 = RCONST(1000.0)*SUNRabs(gamma)*uround*N*fac;
+  if (r0 == ZERO) r0 = ONE;
+
+  for (igy = 0; igy < ngy; igy++) {
+    jy = jyr[igy];
+    if00 = jy*mxmp;
+    for (igx = 0; igx < ngx; igx++) { 
+      jx = jxr[igx];
+      if0 = if00 + jx*mp;
+      ig = igx + igy*ngx; 
+      /* Generate ig-th diagonal block */
+      for (j = 0; j < mp; j++) {
+        /* Generate the jth column as a difference quotient */
+        jj = if0 + j; 
+        save = cdata[jj];
+        r = SUNMAX(srur*SUNRabs(save),r0/rewtdata[jj]);
+        cdata[jj] += r;
+        fac = -gamma/r;
+        fblock (t, cdata, jx, jy, f1, wdata);
+        for (i = 0; i < mp; i++) {
+          P[ig][j][i] = (f1[i] - fsave[if0+i])*fac;
+        }
+        cdata[jj] = save;
+      }
+    }
+  }
+  
+  /* Add identity matrix and do LU decompositions on blocks. */
+
+   for (ig = 0; ig < ngrp; ig++) {
+     denseAddIdentity(P[ig], mp);
+     ier = denseGETRF(P[ig], mp, mp, pivot[ig]);
+     if (ier != 0) return(1);
+   }
+
+  *jcurPtr = TRUE;
+  return(0);
+}
+
+/*
+ * This routine applies two inverse preconditioner matrices
+ * to the vector r, using the interaction-only block-diagonal Jacobian
+ * with block-grouping, denoted Jr, and Gauss-Seidel applied to the
+ * diffusion contribution to the Jacobian, denoted Jd.
+ * It first calls GSIter for a Gauss-Seidel approximation to
+ * ((I - gamma*Jd)-inverse)*r, and stores the result in z.
+ * Then it computes ((I - gamma*Jr)-inverse)*z, using LU factors of the
+ * blocks in P, and pivot information in pivot, and returns the result in z.
+ */
+
+static int PSolve(realtype t, N_Vector c, N_Vector fc,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype ***P;
+  long int **pivot;
+  int jx, jy, igx, igy, iv, ig, *jigx, *jigy, mx, my, ngx;
+  long int mp;
+  WebData wdata;
+
+  wdata = (WebData) user_data;
+
+  N_VScale(ONE, r, z);
+
+  /* call GSIter for Gauss-Seidel iterations */
+
+  GSIter(gamma, z, vtemp, wdata);
+
+  /* Do backsolves for inverse of block-diagonal preconditioner factor */
+ 
+  P = wdata->P;
+  pivot = wdata->pivot;
+  mx = wdata->mx;
+  my = wdata->my;
+  ngx = wdata->ngx;
+  mp = wdata->mp;
+  jigx = wdata->jigx;
+  jigy = wdata->jigy;
+
+  iv = 0;
+  for (jy = 0; jy < my; jy++) {
+    igy = jigy[jy];
+    for (jx = 0; jx < mx; jx++) {
+      igx = jigx[jx];
+      ig = igx + igy*ngx;
+      denseGETRS(P[ig], mp, pivot[ig], &(N_VGetArrayPointer_Serial(z)[iv]));
+      iv += mp;
+    }
+  }
+
+  /* Solve for the quadrature variable */
+  N_VGetArrayPointer_Serial(z)[NEQ] = N_VGetArrayPointer_Serial(r)[NEQ] + gamma*doubleIntgr(z,ISPEC,wdata);
+
+  return(0);
+}
+
+/*
+ * This routine computes the right-hand side of the adjoint ODE system and
+ * returns it in cBdot. The interaction rates are computed by calls to WebRates,
+ * and these are saved in fsave for use in preconditioning. The adjoint 
+ * interaction rates are computed by calls to WebRatesB.
+ */
+
+static int fB(realtype t, N_Vector c, N_Vector cB, 
+               N_Vector cBdot, void *user_data)
+{
+  int i, ic, ici, idxl, idxu, idyl, idyu, iyoff, jx, jy, ns, mxns;
+  realtype dcxli, dcxui, dcyli, dcyui, x, y, *cox, *coy, *fsave, *fBsave, dx, dy;
+  realtype *cdata, *cBdata, *cBdotdata;
+  WebData wdata;
+
+  realtype gu[NS];
+
+  wdata = (WebData) user_data;
+  cdata = N_VGetArrayPointer_Serial(c);
+  cBdata = N_VGetArrayPointer_Serial(cB);
+  cBdotdata = N_VGetArrayPointer_Serial(cBdot);
+
+  mxns = wdata->mxns;
+  ns = wdata->ns;
+  fsave = wdata->fsave;
+  fBsave = wdata->fBsave;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+
+  for ( i = 0; i < ns; i++ ) gu[i] = ZERO; 
+  gu[ISPEC-1] = ONE;
+
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    iyoff = mxns*jy;
+    idyu = (jy == MY-1) ? -mxns : mxns;
+    idyl = (jy == 0) ? -mxns : mxns;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      ic = iyoff + ns*jx;
+      /* Get interaction rates at one point (x,y). */
+      WebRatesB(x, y, t, cdata+ic, cBdata+ic, fsave+ic, fBsave+ic, wdata);
+      idxu = (jx == MX-1) ? -ns : ns;
+      idxl = (jx == 0) ? -ns : ns;
+      for (i = 1; i <= ns; i++) {
+        ici = ic + i-1;
+        /* Do differencing in y. */
+        dcyli = cBdata[ici] - cBdata[ici-idyl];
+        dcyui = cBdata[ici+idyu] - cBdata[ici];
+        /* Do differencing in x. */
+        dcxli = cBdata[ici] - cBdata[ici-idxl];
+        dcxui = cBdata[ici+idxu] - cBdata[ici];
+        /* Collect terms and load cdot elements. */
+        cBdotdata[ici] = - coy[i-1]*(dcyui - dcyli) 
+                         - cox[i-1]*(dcxui - dcxli)
+                         - fBsave[ici]
+                         - gu[i-1];
+      }
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * Preconditioner setup function for the backward problem
+ */
+
+static int PrecondB(realtype t, N_Vector c, 
+                    N_Vector cB, N_Vector fcB, booleantype jok, 
+                    booleantype *jcurPtr, realtype gamma,
+                    void *user_data,
+                    N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int N;
+  realtype ***P;
+  long int **pivot, ier;
+  int i, if0, if00, ig, igx, igy, j, jj, jx, jy;
+  int *jxr, *jyr, ngrp, ngx, ngy, mxmp, flag;
+  long int mp;
+  realtype uround, fac, r, r0, save, srur;
+  realtype *f1, *fsave, *cdata, *rewtdata;
+  void *cvode_mem;
+  WebData wdata;
+  N_Vector rewt;
+
+  wdata = (WebData) user_data;
+  cvode_mem = CVodeGetAdjCVodeBmem(wdata->cvode_mem, wdata->indexB);
+  if(check_flag((void *)cvode_mem, "CVadjGetCVodeBmem", 0)) return(1);
+  rewt = wdata->rewt;
+  flag = CVodeGetErrWeights(cvode_mem, rewt);
+  if(check_flag(&flag, "CVodeGetErrWeights", 1)) return(1);
+
+  cdata = N_VGetArrayPointer_Serial(c);
+  rewtdata = N_VGetArrayPointer_Serial(rewt);
+
+  uround = UNIT_ROUNDOFF;
+
+  P = wdata->P;
+  pivot = wdata->pivot;
+  jxr = wdata->jxr;
+  jyr = wdata->jyr;
+  mp = wdata->mp;
+  srur = wdata->srur;
+  ngrp = wdata->ngrp;
+  ngx = wdata->ngx;
+  ngy = wdata->ngy;
+  mxmp = wdata->mxmp;
+  fsave = wdata->fsave;
+
+  /* Make mp calls to fblock to approximate each diagonal block of Jacobian.
+     Here, fsave contains the base value of the rate vector and 
+     r0 is a minimum increment factor for the difference quotient. */
+
+  f1 = N_VGetArrayPointer_Serial(vtemp1);
+  fac = N_VWrmsNorm (fcB, rewt);
+  N = NEQ;
+  r0 = RCONST(1000.0)*SUNRabs(gamma)*uround*N*fac;
+  if (r0 == ZERO) r0 = ONE;
+
+  for (igy = 0; igy < ngy; igy++) {
+    jy = jyr[igy];
+    if00 = jy*mxmp;
+    for (igx = 0; igx < ngx; igx++) { 
+      jx = jxr[igx];
+      if0 = if00 + jx*mp;
+      ig = igx + igy*ngx; 
+      /* Generate ig-th diagonal block */
+      for (j = 0; j < mp; j++) {
+        /* Generate the jth column as a difference quotient */
+        jj = if0 + j; 
+        save = cdata[jj];
+        r = SUNMAX(srur*SUNRabs(save),r0/rewtdata[jj]);
+        cdata[jj] += r;
+        fac = gamma/r;
+        fblock (t, cdata, jx, jy, f1, wdata);
+        for (i = 0; i < mp; i++) {
+          P[ig][i][j] = (f1[i] - fsave[if0+i])*fac;
+        }
+        cdata[jj] = save;
+      }
+    }
+  }
+
+  /* Add identity matrix and do LU decompositions on blocks. */
+
+   for (ig = 0; ig < ngrp; ig++) {
+     denseAddIdentity(P[ig], mp);
+     ier = denseGETRF(P[ig], mp, mp, pivot[ig]);
+     if (ier != 0) return(1);
+   }
+
+  *jcurPtr = TRUE;
+  return(0);
+}
+
+/*
+ * Preconditioner solve function for the backward problem
+ */
+
+static int PSolveB(realtype t, N_Vector c, 
+                   N_Vector cB, N_Vector fcB, 
+                   N_Vector r, N_Vector z,
+                   realtype gamma, realtype delta, 
+                   int lr, void *user_data, N_Vector vtemp)
+{
+  realtype ***P;
+  long int **pivot;
+  int jx, jy, igx, igy, iv, ig, *jigx, *jigy, mx, my, ngx;
+  long int mp;
+  WebData wdata;
+
+  wdata = (WebData) user_data;
+
+  N_VScale(ONE, r, z);
+
+  /* call GSIter for Gauss-Seidel iterations (same routine but with gamma=-gamma) */
+
+  GSIter(-gamma, z, vtemp, wdata);
+
+  /* Do backsolves for inverse of block-diagonal preconditioner factor */
+ 
+  P = wdata->P;
+  pivot = wdata->pivot;
+  mx = wdata->mx;
+  my = wdata->my;
+  ngx = wdata->ngx;
+  mp = wdata->mp;
+  jigx = wdata->jigx;
+  jigy = wdata->jigy;
+
+  iv = 0;
+  for (jy = 0; jy < my; jy++) {
+    igy = jigy[jy];
+    for (jx = 0; jx < mx; jx++) {
+      igx = jigx[jx];
+      ig = igx + igy*ngx;
+      denseGETRS(P[ig], mp, pivot[ig], &(N_VGetArrayPointer_Serial(z)[iv]));
+      iv += mp;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Allocate space for user data structure
+ */
+
+static WebData AllocUserData(void)
+{
+  int i, ngrp = NGRP, ns = NS;
+  WebData wdata;
+
+  wdata = (WebData) malloc(sizeof *wdata);
+  for(i=0; i < ngrp; i++) {
+    (wdata->P)[i] = newDenseMat(ns, ns);
+    (wdata->pivot)[i] = newLintArray(ns);
+  }
+  wdata->rewt = N_VNew_Serial(NEQ+1);
+  return(wdata);
+}
+
+/*
+ * Initialize user data structure
+ */
+
+static void InitUserData(WebData wdata)
+{
+  int i, j, ns;
+  realtype *bcoef, *diff, *cox, *coy, dx, dy;
+  realtype (*acoef)[NS];
+
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+  diff = wdata->diff;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  ns = wdata->ns = NS;
+
+  for (j = 0; j < NS; j++) { for (i = 0; i < NS; i++) acoef[i][j] = ZERO; }
+  for (j = 0; j < NP; j++) {
+    for (i = 0; i < NP; i++) {
+      acoef[NP+i][j] = EE;
+      acoef[i][NP+j] = -GG;
+    }
+    acoef[j][j] = -AA;
+    acoef[NP+j][NP+j] = -AA;
+    bcoef[j] = BB;
+    bcoef[NP+j] = -BB;
+    diff[j] = DPREY;
+    diff[NP+j] = DPRED;
+  }
+
+  /* Set remaining problem parameters */
+
+  wdata->mxns = MXNS;
+  dx = wdata->dx = DX;
+  dy = wdata->dy = DY;
+  for (i = 0; i < ns; i++) {
+    cox[i] = diff[i]/SUNSQR(dx);
+    coy[i] = diff[i]/SUNSQR(dy);
+  }
+
+  /* Set remaining method parameters */
+
+  wdata->mp = MP;
+  wdata->mq = MQ;
+  wdata->mx = MX;
+  wdata->my = MY;
+  wdata->srur = SUNRsqrt(UNIT_ROUNDOFF);
+  wdata->mxmp = MXMP;
+  wdata->ngrp = NGRP;
+  wdata->ngx = NGX;
+  wdata->ngy = NGY;
+  SetGroups(MX, NGX, wdata->jgx, wdata->jigx, wdata->jxr);
+  SetGroups(MY, NGY, wdata->jgy, wdata->jigy, wdata->jyr);
+}
+
+/*
+ * This routine sets arrays jg, jig, and jr describing
+ * a uniform partition of (0,1,2,...,m-1) into ng groups.
+ * The arrays set are:
+ *   jg    = length ng+1 array of group boundaries.
+ *           Group ig has indices j = jg[ig],...,jg[ig+1]-1.
+ *   jig   = length m array of group indices vs node index.
+ *           Node index j is in group jig[j].
+ *   jr    = length ng array of indices representing the groups.
+ *           The index for group ig is j = jr[ig].
+ */
+
+static void SetGroups(int m, int ng, int jg[], int jig[], int jr[])
+{
+  int ig, j, len1, mper, ngm1;
+  
+  mper = m/ng; /* does integer division */
+  for (ig=0; ig < ng; ig++) jg[ig] = ig*mper;
+  jg[ng] = m;
+  
+  ngm1 = ng - 1;
+  len1 = ngm1*mper;
+  for (j = 0; j < len1; j++) jig[j] = j/mper;
+  for (j = len1; j < m; j++) jig[j] = ngm1;
+
+  for (ig = 0; ig < ngm1; ig++) jr[ig] = ((2*ig+1)*mper-1)/2;
+  jr[ngm1] = (ngm1*mper+m-1)/2;
+}
+
+/*
+ * This routine computes and loads the vector of initial values. 
+ */
+
+static void CInit(N_Vector c, WebData wdata)
+{
+  int i, ici, ioff, iyoff, jx, jy, ns, mxns;
+  realtype argx, argy, x, y, dx, dy, x_factor, y_factor, *cdata;
+  
+  cdata = N_VGetArrayPointer_Serial(c);
+  ns = wdata->ns;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+  
+  x_factor = RCONST(4.0)/SUNSQR(AX);
+  y_factor = RCONST(4.0)/SUNSQR(AY);
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    argy = SUNSQR(y_factor*y*(AY-y));
+    iyoff = mxns*jy;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      argx = SUNSQR(x_factor*x*(AX-x));
+      ioff = iyoff + ns*jx;
+      for (i = 1; i <= ns; i++) {
+        ici = ioff + i-1;
+        cdata[ici] = RCONST(10.0) + i*argx*argy;
+
+        /*if(i==1) cdata[ici] += ONE;*/
+
+      }
+    }
+  }
+
+  /* Initialize quadrature variable to zero */
+  cdata[NEQ] = ZERO;
+}
+
+/*
+ * This routine computes the interaction rates for the species
+ * c_1, ... ,c_ns (stored in c[0],...,c[ns-1]), at one spatial point 
+ * and at time t.
+ */
+
+static void WebRates(realtype x, realtype y, realtype t, realtype c[], 
+                     realtype rate[], WebData wdata)
+{
+  int i, j, ns;
+  realtype fac, *bcoef;
+  realtype (*acoef)[NS];
+
+  ns = wdata->ns;
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+
+  for (i = 0; i < ns; i++)
+    rate[i] = ZERO;
+  
+  for (j = 0; j < ns; j++) 
+    for (i = 0; i < ns; i++) 
+      rate[i] += c[j] * acoef[i][j];
+  
+  fac = ONE + ALPH*x*y;
+  for (i = 0; i < ns; i++) 
+    rate[i] = c[i]*(bcoef[i]*fac + rate[i]);
+}
+
+/*
+ * This routine computes the interaction rates for the backward problem
+ */
+
+static void WebRatesB(realtype x, realtype y, realtype t, realtype c[], realtype cB[], 
+                      realtype rate[], realtype rateB[], WebData wdata)
+{
+  int i, j, ns;
+  realtype fac, *bcoef;
+  realtype (*acoef)[NS];
+
+  ns = wdata->ns;
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+
+  fac = ONE + ALPH*x*y;
+
+  for (i = 0; i < ns; i++)
+    rate[i] = bcoef[i]*fac;
+  
+  for (j = 0; j < ns; j++) 
+    for (i = 0; i < ns; i++)
+      rate[i] += acoef[i][j]*c[j];
+
+  for (i = 0; i < ns; i++) {
+    rateB[i] = cB[i]*rate[i];
+    rate[i] = c[i]*rate[i];
+  }
+
+  for (j = 0; j < ns; j++) 
+    for (i = 0; i < ns; i++)
+      rateB[i] += acoef[j][i]*c[j]*cB[j];
+}
+
+/*
+ * This routine computes one block of the interaction terms of the
+ * system, namely block (jx,jy), for use in preconditioning.
+ * Here jx and jy count from 0.
+ */
+
+static void fblock(realtype t, realtype cdata[], int jx, int jy, 
+                   realtype cdotdata[], WebData wdata)
+{
+  int iblok, ic;
+  realtype x, y;
+
+  iblok = jx + jy*(wdata->mx);
+  y = jy*(wdata->dy);
+  x = jx*(wdata->dx);
+  ic = (wdata->ns)*(iblok);
+  WebRates(x, y, t, cdata+ic, cdotdata, wdata);
+}
+
+
+/*
+ * This routine performs ITMAX=5 Gauss-Seidel iterations to compute an
+ * approximation to (P-inverse)*z, where P = I - gamma*Jd, and
+ * Jd represents the diffusion contributions to the Jacobian.
+ * The answer is stored in z on return, and x is a temporary vector.
+ * The dimensions below assume a global constant NS >= ns.
+ * Some inner loops of length ns are implemented with the small
+ * vector kernels v_sum_prods, v_prod, v_inc_by_prod.
+ */
+
+static void GSIter(realtype gamma, N_Vector z, N_Vector x, 
+                   WebData wdata)
+{
+  int i, ic, iter, iyoff, jx, jy, ns, mxns, mx, my, x_loc, y_loc;
+  realtype beta[NS], beta2[NS], cof1[NS], gam[NS], gam2[NS];
+  realtype temp, *cox, *coy, *xd, *zd;
+
+  xd = N_VGetArrayPointer_Serial(x);
+  zd = N_VGetArrayPointer_Serial(z);
+  ns = wdata->ns;
+  mx = wdata->mx;
+  my = wdata->my;
+  mxns = wdata->mxns;
+  cox = wdata->cox;
+  coy = wdata->coy;
+
+  /* Write matrix as P = D - L - U.
+     Load local arrays beta, beta2, gam, gam2, and cof1. */
+ 
+  for (i = 0; i < ns; i++) {
+    temp = ONE/(ONE + RCONST(2.0)*gamma*(cox[i] + coy[i]));
+    beta[i] = gamma*cox[i]*temp;
+    beta2[i] = RCONST(2.0)*beta[i];
+    gam[i] = gamma*coy[i]*temp;
+    gam2[i] = RCONST(2.0)*gam[i];
+    cof1[i] = temp;
+  }
+
+  /* Begin iteration loop.
+  Load vector x with (D-inverse)*z for first iteration. */
+
+  for (jy = 0; jy < my; jy++) {
+    iyoff = mxns*jy;
+    for (jx = 0; jx < mx; jx++) {
+      ic = iyoff + ns*jx;
+      v_prod(xd+ic, cof1, zd+ic, ns); /* x[ic+i] = cof1[i]z[ic+i] */
+    }
+  }
+  N_VConst(ZERO, z);
+
+  /* Looping point for iterations. */
+
+  for (iter=1; iter <= ITMAX; iter++) {
+
+    /* Calculate (D-inverse)*U*x if not the first iteration. */
+
+    if (iter > 1) {
+      for (jy=0; jy < my; jy++) {
+        iyoff = mxns*jy;
+        for (jx=0; jx < mx; jx++) { /* order of loops matters */
+          ic = iyoff + ns*jx;
+          x_loc = (jx == 0) ? 0 : ((jx == mx-1) ? 2 : 1);
+          y_loc = (jy == 0) ? 0 : ((jy == my-1) ? 2 : 1);
+          switch (3*y_loc+x_loc) {
+          case 0 : /* jx == 0, jy == 0 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] + gam2[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta2, xd+ic+ns, gam2, xd+ic+mxns, ns);
+            break;
+          case 1 : /* 1 <= jx <= mx-2, jy == 0 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] + gam2[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta, xd+ic+ns, gam2, xd+ic+mxns, ns);
+            break;
+          case 2 : /* jx == mx-1, jy == 0 */
+            /* x[ic+i] = gam2[i]x[ic+mxns+i] */
+            v_prod(xd+ic, gam2, xd+ic+mxns, ns);
+            break;
+          case 3 : /* jx == 0, 1 <= jy <= my-2 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] + gam[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta2, xd+ic+ns, gam, xd+ic+mxns, ns);
+            break;
+          case 4 : /* 1 <= jx <= mx-2, 1 <= jy <= my-2 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] + gam[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta, xd+ic+ns, gam, xd+ic+mxns, ns);
+            break;
+          case 5 : /* jx == mx-1, 1 <= jy <= my-2 */
+            /* x[ic+i] = gam[i]x[ic+mxns+i] */
+            v_prod(xd+ic, gam, xd+ic+mxns, ns);
+            break;
+          case 6 : /* jx == 0, jy == my-1 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] */
+            v_prod(xd+ic, beta2, xd+ic+ns, ns);
+            break;
+          case 7 : /* 1 <= jx <= mx-2, jy == my-1 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] */
+            v_prod(xd+ic, beta, xd+ic+ns, ns);
+            break;
+          case 8 : /* jx == mx-1, jy == my-1 */
+            /* x[ic+i] = ZERO */
+            v_zero(xd+ic, ns);
+            break;
+          }
+        }
+      }
+    }  /* end if (iter > 1) */
+    
+    /* Overwrite x with [(I - (D-inverse)*L)-inverse]*x. */
+    
+    for (jy=0; jy < my; jy++) {
+      iyoff = mxns*jy;
+      for (jx=0; jx < mx; jx++) { /* order of loops matters */
+        ic = iyoff + ns*jx;
+        x_loc = (jx == 0) ? 0 : ((jx == mx-1) ? 2 : 1);
+        y_loc = (jy == 0) ? 0 : ((jy == my-1) ? 2 : 1);
+        switch (3*y_loc+x_loc) {
+        case 0 : /* jx == 0, jy == 0 */
+          break;
+        case 1 : /* 1 <= jx <= mx-2, jy == 0 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          break;
+        case 2 : /* jx == mx-1, jy == 0 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          break;
+        case 3 : /* jx == 0, 1 <= jy <= my-2 */
+          /* x[ic+i] += gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 4 : /* 1 <= jx <= mx-2, 1 <= jy <= my-2 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] + gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 5 : /* jx == mx-1, 1 <= jy <= my-2 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] + gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 6 : /* jx == 0, jy == my-1 */
+          /* x[ic+i] += gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        case 7 : /* 1 <= jx <= mx-2, jy == my-1 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] + gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        case 8 : /* jx == mx-1, jy == my-1 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] + gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        }
+      }
+    }
+    
+    /* Add increment x to z : z <- z+x */
+    
+    N_VLinearSum(ONE, z, ONE, x, z);
+    
+  }
+}
+
+static void v_inc_by_prod(realtype u[], realtype v[], realtype w[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] += v[i]*w[i];
+}
+
+static void v_sum_prods(realtype u[], realtype p[], realtype q[], 
+                        realtype v[], realtype w[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] = p[i]*q[i] + v[i]*w[i];
+}
+
+static void v_prod(realtype u[], realtype v[], realtype w[], int n)
+{ 
+  int i;
+  for (i=0; i < n; i++) u[i] = v[i]*w[i];
+}
+
+static void v_zero(realtype u[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] = ZERO;
+}
+
+/*
+ * Print maximum sensitivity of G for each species
+ */
+
+static void PrintOutput(N_Vector cB, int ns, int mxns, WebData wdata)
+{
+  int i, jx, jy;
+  realtype *cdata, cij, cmax, x, y;
+
+  x = y = ZERO;
+
+  cdata = N_VGetArrayPointer_Serial(cB);
+
+  for (i=1; i <= ns; i++) {
+
+    cmax = ZERO;
+
+    for (jy=MY-1; jy >= 0; jy--) {
+      for (jx=0; jx < MX; jx++) {
+        cij = cdata[(i-1) + jx*ns + jy*mxns];
+        if (SUNRabs(cij) > cmax) {
+          cmax = cij;
+          x = jx * wdata->dx;
+          y = jy * wdata->dy;
+        }
+      }
+    }
+
+    printf("\nMaximum sensitivity with respect to I.C. of species %d\n", i);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("  lambda max = %Le\n",cmax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("  lambda max = %e\n",cmax);
+#else
+    printf("  lambda max = %e\n",cmax);
+#endif
+    printf("at\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("  x = %Le\n  y = %Le\n", x, y);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("  x = %e\n  y = %e\n", x, y);
+#else
+    printf("  x = %e\n  y = %e\n", x, y);
+#endif
+
+  }
+
+}
+
+/*
+ * Compute double space integral
+ */
+
+static realtype doubleIntgr(N_Vector c, int i, WebData wdata)
+{
+  realtype *cdata;
+  int ns, mx, my, mxns;
+  realtype dx, dy;
+  realtype intgr_xy, intgr_x;
+  int jx, jy;
+
+  cdata = N_VGetArrayPointer_Serial(c);
+
+  ns   = wdata->ns;
+  mx   = wdata->mx;
+  my   = wdata->my;
+  mxns = wdata->mxns;
+  dx   = wdata->dx;
+  dy   = wdata->dy;
+
+  jy = 0;
+  intgr_x = cdata[(i-1)+jy*mxns];
+  for (jx = 1; jx < mx-1; jx++) {
+    intgr_x += RCONST(2.0)*cdata[(i-1) + jx*ns + jy*mxns]; 
+  }
+  intgr_x += cdata[(i-1)+(mx-1)*ns+jy*mxns];
+  intgr_x *= RCONST(0.5)*dx;
+  
+  intgr_xy = intgr_x;
+  
+  for (jy = 1; jy < my-1; jy++) {
+    
+    intgr_x = cdata[(i-1)+jy*mxns];
+    for (jx = 1; jx < mx-1; jx++) {
+      intgr_x += RCONST(2.0)*cdata[(i-1) + jx*ns + jy*mxns]; 
+    }
+    intgr_x += cdata[(i-1)+(mx-1)*ns+jy*mxns];
+    intgr_x *= RCONST(0.5)*dx;
+    
+    intgr_xy += RCONST(2.0)*intgr_x;
+
+  }
+  
+  jy = my-1;
+  intgr_x = cdata[(i-1)+jy*mxns];
+  for (jx = 1; jx < mx-1; jx++) {
+    intgr_x += RCONST(2.0)*cdata[(i-1) + jx*ns + jy*mxns]; 
+  }
+  intgr_x += cdata[(i-1)+(mx-1)*ns+jy*mxns];
+  intgr_x *= RCONST(0.5)*dx;
+  
+  intgr_xy += intgr_x;
+  
+  intgr_xy *= RCONST(0.5)*dy;
+
+  return(intgr_xy);
+}
+
+/*
+ * Free space allocated for the user data structure
+ */
+
+static void FreeUserData(WebData wdata)
+{
+  int i, ngrp;
+
+  ngrp = wdata->ngrp;
+  for(i=0; i < ngrp; i++) {
+    destroyMat((wdata->P)[i]);
+    destroyArray((wdata->pivot)[i]);
+  }
+  N_VDestroy_Serial(wdata->rewt);
+  free(wdata);
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsFoodWeb_ASAi_kry.out b/examples/cvodes/serial/cvsFoodWeb_ASAi_kry.out
new file mode 100644
index 0000000..9d51c3e
--- /dev/null
+++ b/examples/cvodes/serial/cvsFoodWeb_ASAi_kry.out
@@ -0,0 +1,51 @@
+
+Create and allocate CVODES memory for forward run
+
+Allocate global memory
+
+Forward integration
+
+ncheck = 2
+
+   G = int_t int_x int_y c6(t,x,y) dx dy dt = 422295.963896 
+
+
+Create and allocate CVODES memory for backward run
+
+Backward integration
+
+Maximum sensitivity with respect to I.C. of species 1
+  lambda max = 9.569148e+02
+at
+  x = 1.000000e+00
+  y = 1.000000e+00
+
+Maximum sensitivity with respect to I.C. of species 2
+  lambda max = 9.379464e+02
+at
+  x = 1.000000e+00
+  y = 1.000000e+00
+
+Maximum sensitivity with respect to I.C. of species 3
+  lambda max = 9.200243e+02
+at
+  x = 1.000000e+00
+  y = 1.000000e+00
+
+Maximum sensitivity with respect to I.C. of species 4
+  lambda max = -4.942530e-03
+at
+  x = 1.000000e+00
+  y = 0.000000e+00
+
+Maximum sensitivity with respect to I.C. of species 5
+  lambda max = -4.939374e-03
+at
+  x = 1.000000e+00
+  y = 0.000000e+00
+
+Maximum sensitivity with respect to I.C. of species 6
+  lambda max = 3.566293e-01
+at
+  x = 0.000000e+00
+  y = 0.000000e+00
diff --git a/examples/cvodes/serial/cvsFoodWeb_ASAp_kry.c b/examples/cvodes/serial/cvsFoodWeb_ASAp_kry.c
new file mode 100644
index 0000000..6d86f65
--- /dev/null
+++ b/examples/cvodes/serial/cvsFoodWeb_ASAp_kry.c
@@ -0,0 +1,1359 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * This program solves a stiff ODE system that arises from a system
+ * of partial differential equations. The PDE system is a food web
+ * population model, with predator-prey interaction and diffusion on
+ * the unit square in two dimensions. The dependent variable vector
+ * is the following:
+ *
+ *        1   2        ns
+ *  c = (c , c , ..., c  )
+ *
+ * and the PDEs are as follows:
+ *
+ *    i               i      i
+ *  dc /dt  =  d(i)*(c    + c   )  +  f (x,y,c)  (i=1,...,ns)
+ *                    xx     yy        i
+ *
+ * where
+ *
+ *                 i          ns         j
+ *  f (x,y,c)  =  c *(b(i) + sum a(i,j)*c )
+ *   i                       j=1
+ *
+ * The number of species is ns = 2*np, with the first np being prey
+ * and the last np being predators. The coefficients a(i,j), b(i),
+ * d(i) are:
+ *
+ *  a(i,i) = -a  (all i)
+ *  a(i,j) = -g  (i <= np, j > np)
+ *  a(i,j) =  e  (i > np, j <= np)
+ *  b(i) =  b*(1 + alpha*x*y)  (i <= np)
+ *  b(i) = -b*(1 + alpha*x*y)  (i > np)
+ *  d(i) = Dprey  (i <= np)
+ *  d(i) = Dpred  (i > np)
+ *
+ * The spatial domain is the unit square. The final time is 10.
+ * The boundary conditions are: normal derivative = 0.
+ * A polynomial in x and y is used to set the initial conditions.
+ *
+ * The PDEs are discretized by central differencing on an MX by
+ * MY mesh. The resulting ODE system is stiff.
+ *
+ * The ODE system is solved by CVODES using Newton iteration and
+ * the CVSPGMR linear solver (scaled preconditioned GMRES).
+ *
+ * The preconditioner matrix used is the product of two matrices:
+ * (1) A matrix, only defined implicitly, based on a fixed number
+ * of Gauss-Seidel iterations using the diffusion terms only.
+ * (2) A block-diagonal matrix based on the partial derivatives
+ * of the interaction terms f only, using block-grouping (computing
+ * only a subset of the ns by ns blocks).
+ *
+ * Additionally, CVODES can integrate backwards in time the
+ * the semi-discrete form of the adjoint PDE:
+ *   d(lambda)/dt = - D^T ( lambda_xx + lambda_yy )
+ *                  - F_c^T lambda
+ * with homogeneous Neumann boundary conditions and final conditions
+ *   lambda(x,y,t=t_final) = - g_c^T(t_final)
+ * whose solution at t = 0 represents the sensitivity of
+ *   int_x int _y g(t_final,c) dx dy dt
+ * with respect to the initial conditions of the original problem.
+ *
+ * In this example,
+ *   g(t,c) = c(ISPEC), with ISPEC defined below.
+ * -----------------------------------------------------------------
+ * Reference:  Peter N. Brown and Alan C. Hindmarsh, Reduced Storage
+ * Matrix Methods in Stiff ODE Systems, J. Appl. Math. & Comp., 31
+ * (1989), pp. 40-91.  Also available as Lawrence Livermore National
+ * Laboratory Report UCRL-95088, Rev. 1, June 1987.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>
+#include <cvodes/cvodes_spgmr.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+/* Problem Specification Constants */
+
+#define AA    ONE               /* AA = a */
+#define EE    RCONST(1.0e4)     /* EE = e */
+#define GG    RCONST(0.5e-6)    /* GG = g */
+#define BB    ONE               /* BB = b */
+#define DPREY ONE    
+#define DPRED RCONST(0.5)
+#define ALPH  ONE
+#define NP    3
+#define NS    (2*NP)
+
+/* Method Constants */
+
+#define MX    20
+#define MY    20
+#define MXNS  (MX*NS)
+#define AX    ONE
+#define AY    ONE
+#define DX    (AX/(realtype)(MX-1))
+#define DY    (AY/(realtype)(MY-1))
+#define MP    NS
+#define MQ    (MX*MY)
+#define MXMP  (MX*MP)
+#define NGX   2
+#define NGY   2
+#define NGRP  (NGX*NGY)
+#define ITMAX 5
+
+/* CVodeInit Constants */
+
+#define NEQ   (NS*MX*MY)
+#define T0    ZERO
+#define RTOL  RCONST(1.0e-5)
+#define ATOL  RCONST(1.0e-5)
+
+/* Output Constants */
+
+#define TOUT RCONST(10.0)
+
+/* Note: The value for species i at mesh point (j,k) is stored in */
+/* component number (i-1) + j*NS + k*NS*MX of an N_Vector,        */
+/* where 1 <= i <= NS, 0 <= j < MX, 0 <= k < MY.                  */
+
+/* Structure for user data */
+
+typedef struct {
+  realtype **P[NGRP];
+  long int *pivot[NGRP];
+  int ns, mxns, mp, mq, mx, my, ngrp, ngx, ngy, mxmp;
+  int jgx[NGX+1], jgy[NGY+1], jigx[MX], jigy[MY];
+  int jxr[NGX], jyr[NGY];
+  realtype acoef[NS][NS], bcoef[NS], diff[NS];
+  realtype cox[NS], coy[NS], dx, dy, srur;
+  realtype fsave[NEQ];
+  realtype fBsave[NEQ];
+  N_Vector rewt;
+  void *cvode_mem;
+  int indexB;
+} *WebData;
+
+/* Adjoint calculation constants */
+/* g = int_x int_y c(ISPEC) dy dx at t = Tfinal */
+#define NSTEPS 80  /* check points every NSTEPS steps */
+#define ISPEC  6   /* species # in objective */
+
+/* Prototypes for user-supplied functions */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int Precond(realtype t, N_Vector c, N_Vector fc,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data,
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+static int PSolve(realtype t, N_Vector c, N_Vector fc,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+static int fB(realtype t, N_Vector c, N_Vector cB, 
+               N_Vector cBdot, void *user_data);
+
+static int PrecondB(realtype t, N_Vector c, 
+                    N_Vector cB, N_Vector fcB, booleantype jok, 
+                    booleantype *jcurPtr, realtype gamma,
+                    void *user_data,
+                    N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+static int PSolveB(realtype t, N_Vector c, 
+                   N_Vector cB, N_Vector fcB, 
+                   N_Vector r, N_Vector z,
+                   realtype gamma, realtype delta, 
+                   int lr, void *user_data, N_Vector vtemp);
+
+/* Prototypes for private functions */
+
+static WebData AllocUserData(void);
+static void InitUserData(WebData wdata);
+static void SetGroups(int m, int ng, int jg[], int jig[], int jr[]);
+static void CInit(N_Vector c, WebData wdata);
+static void CbInit(N_Vector c, int is, WebData wdata);
+static void PrintOutput(N_Vector c, int ns, int mxns, WebData wdata);
+static void FreeUserData(WebData wdata);
+static void WebRates(realtype x, realtype y, realtype t, realtype c[], realtype rate[],
+                     WebData wdata);
+static void WebRatesB(realtype x, realtype y, realtype t, realtype c[], realtype cB[], 
+                      realtype rate[], realtype rateB[], WebData wdata);
+static void fblock (realtype t, realtype cdata[], int jx, int jy, realtype cdotdata[],
+                    WebData wdata);
+static void GSIter(realtype gamma, N_Vector z, N_Vector x, WebData wdata);
+static realtype doubleIntgr(N_Vector c, int i, WebData wdata);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Small Vector Kernels */
+
+static void v_inc_by_prod(realtype u[], realtype v[], realtype w[], int n);
+static void v_sum_prods(realtype u[], realtype p[], realtype q[], realtype v[], 
+                        realtype w[], int n);
+static void v_prod(realtype u[], realtype v[], realtype w[], int n);
+static void v_zero(realtype u[], int n);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  realtype abstol=ATOL, reltol=RTOL, t;
+  N_Vector c;
+  WebData wdata;
+  void *cvode_mem;
+
+  int flag, ncheck;
+
+  int indexB;
+  
+  realtype reltolB=RTOL, abstolB=ATOL;
+  N_Vector cB;
+
+  c = cB = NULL;
+  wdata = NULL;
+  cvode_mem = NULL;
+
+  /* Allocate and initialize user data */
+
+  wdata = AllocUserData();
+  if(check_flag((void *)wdata, "AllocUserData", 2)) return(1);
+  InitUserData(wdata);
+
+  /* Set-up forward problem */
+
+  /* Initializations */
+  c = N_VNew_Serial(NEQ);
+  if(check_flag((void *)c, "N_VNew_Serial", 0)) return(1);
+  CInit(c, wdata);
+
+  /* Call CVodeCreate/CVodeInit for forward run */
+  printf("\nCreate and allocate CVODES memory for forward run\n");
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  wdata->cvode_mem = cvode_mem; /* Used in Precond */
+  flag = CVodeSetUserData(cvode_mem, wdata);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+  flag = CVodeInit(cvode_mem, f, T0, c);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if(check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* Call CVSpgmr for forward run */
+  flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+  flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+  if(check_flag(&flag, "CVSpilsSetPreconditioner", 1)) return(1);
+
+  /* Set-up adjoint calculations */
+
+  printf("\nAllocate global memory\n");
+  flag = CVodeAdjInit(cvode_mem, NSTEPS, CV_HERMITE);
+  if(check_flag(&flag, "CVodeAdjInit", 1)) return(1);
+
+  /* Perform forward run */
+
+  printf("\nForward integration\n");
+  flag = CVodeF(cvode_mem, TOUT, c, &t, CV_NORMAL, &ncheck);
+  if(check_flag(&flag, "CVodeF", 1)) return(1);
+
+  printf("\nncheck = %d\n", ncheck);
+
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("\n   g = int_x int_y c%d(Tfinal,x,y) dx dy = %Lf \n\n", 
+         ISPEC, doubleIntgr(c,ISPEC,wdata));
+#else
+  printf("\n   g = int_x int_y c%d(Tfinal,x,y) dx dy = %f \n\n", 
+         ISPEC, doubleIntgr(c,ISPEC,wdata));
+#endif
+
+  /* Set-up backward problem */
+
+  /* Allocate cB */
+  cB = N_VNew_Serial(NEQ);
+  if(check_flag((void *)cB, "N_VNew_Serial", 0)) return(1);
+  /* Initialize cB = 0 */
+  CbInit(cB, ISPEC, wdata);
+
+  /* Create and allocate CVODES memory for backward run */
+  printf("\nCreate and allocate CVODES memory for backward run\n");
+  flag = CVodeCreateB(cvode_mem, CV_BDF, CV_NEWTON, &indexB);
+  if(check_flag(&flag, "CVodeCreateB", 1)) return(1);
+  flag = CVodeSetUserDataB(cvode_mem, indexB, wdata);
+  if(check_flag(&flag, "CVodeSetUserDataB", 1)) return(1);
+  flag = CVodeInitB(cvode_mem, indexB, fB, TOUT, cB);
+  if(check_flag(&flag, "CVodeInitB", 1)) return(1);
+  flag = CVodeSStolerancesB(cvode_mem, indexB, reltolB, abstolB);
+  if(check_flag(&flag, "CVodeSStolerancesB", 1)) return(1);
+
+  wdata->indexB = indexB;
+
+  /* Call CVSpgmr */
+  flag = CVSpgmrB(cvode_mem, indexB, PREC_LEFT, 0);
+  if(check_flag(&flag, "CVSpgmrB", 1)) return(1);
+  flag = CVSpilsSetPreconditionerB(cvode_mem, indexB, PrecondB, PSolveB);
+  if(check_flag(&flag, "CVSpilsSetPreconditionerB", 1)) return(1);
+
+  /* Perform backward integration */
+
+  printf("\nBackward integration\n");
+  flag = CVodeB(cvode_mem, T0, CV_NORMAL);
+  if(check_flag(&flag, "CVodeB", 1)) return(1);
+
+  flag = CVodeGetB(cvode_mem, indexB, &t, cB);
+  if(check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  PrintOutput(cB, NS, MXNS, wdata);
+
+  /* Free all memory */
+  CVodeFree(&cvode_mem);
+
+  N_VDestroy_Serial(c);
+  N_VDestroy_Serial(cB);
+
+  FreeUserData(wdata);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * This routine computes the right-hand side of the ODE system and
+ * returns it in cdot. The interaction rates are computed by calls to WebRates,
+ * and these are saved in fsave for use in preconditioning.
+ */
+
+static int f(realtype t, N_Vector c, N_Vector cdot, void *user_data)
+{
+  int i, ic, ici, idxl, idxu, idyl, idyu, iyoff, jx, jy, ns, mxns;
+  realtype dcxli, dcxui, dcyli, dcyui, x, y, *cox, *coy, *fsave, dx, dy;
+  realtype *cdata, *cdotdata;
+  WebData wdata;
+  
+  wdata = (WebData) user_data;
+  cdata = N_VGetArrayPointer_Serial(c);
+  cdotdata = N_VGetArrayPointer_Serial(cdot);
+  
+  mxns = wdata->mxns;
+  ns = wdata->ns;
+  fsave = wdata->fsave;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+  
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    iyoff = mxns*jy;
+    idyu = (jy == MY-1) ? -mxns : mxns;
+    idyl = (jy == 0) ? -mxns : mxns;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      ic = iyoff + ns*jx;
+      /* Get interaction rates at one point (x,y). */
+      WebRates(x, y, t, cdata+ic, fsave+ic, wdata);
+      idxu = (jx == MX-1) ? -ns : ns;
+      idxl = (jx == 0) ? -ns : ns;
+      for (i = 1; i <= ns; i++) {
+        ici = ic + i-1;
+        /* Do differencing in y. */
+        dcyli = cdata[ici] - cdata[ici-idyl];
+        dcyui = cdata[ici+idyu] - cdata[ici];
+        /* Do differencing in x. */
+        dcxli = cdata[ici] - cdata[ici-idxl];
+        dcxui = cdata[ici+idxu] - cdata[ici];
+        /* Collect terms and load cdot elements. */
+        cdotdata[ici] = coy[i-1]*(dcyui - dcyli) + 
+                        cox[i-1]*(dcxui - dcxli) +
+                        fsave[ici];
+      }
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * This routine generates the block-diagonal part of the Jacobian
+ * corresponding to the interaction rates, multiplies by -gamma, adds
+ * the identity matrix, and calls denseGETRF to do the LU decomposition of
+ * each diagonal block. The computation of the diagonal blocks uses
+ * the preset block and grouping information. One block per group is
+ * computed. The Jacobian elements are generated by difference
+ * quotients using calls to the routine fblock.
+ *
+ * This routine can be regarded as a prototype for the general case
+ * of a block-diagonal preconditioner. The blocks are of size mp, and
+ * there are ngrp=ngx*ngy blocks computed in the block-grouping scheme.
+ */
+ 
+static int Precond(realtype t, N_Vector c, N_Vector fc,
+                   booleantype jok, booleantype *jcurPtr, 
+                   realtype gamma, void *user_data,
+                   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype ***P;
+  long int **pivot, ier;
+  int i, if0, if00, ig, igx, igy, j, jj, jx, jy;
+  int *jxr, *jyr, ngrp, ngx, ngy, mxmp, flag;
+  long int mp;
+  realtype uround, fac, r, r0, save, srur;
+  realtype *f1, *fsave, *cdata, *rewtdata;
+  WebData wdata;
+  N_Vector rewt;
+
+  wdata = (WebData) user_data;
+  rewt = wdata->rewt;
+  flag = CVodeGetErrWeights(wdata->cvode_mem, rewt);
+  if(check_flag(&flag, "CVodeGetErrWeights", 1)) return(1);
+
+  cdata = N_VGetArrayPointer_Serial(c);
+  rewtdata = N_VGetArrayPointer_Serial(rewt);
+
+  uround = UNIT_ROUNDOFF;
+
+  P = wdata->P;
+  pivot = wdata->pivot;
+  jxr = wdata->jxr;
+  jyr = wdata->jyr;
+  mp = wdata->mp;
+  srur = wdata->srur;
+  ngrp = wdata->ngrp;
+  ngx = wdata->ngx;
+  ngy = wdata->ngy;
+  mxmp = wdata->mxmp;
+  fsave = wdata->fsave;
+
+  /* Make mp calls to fblock to approximate each diagonal block of Jacobian.
+     Here, fsave contains the base value of the rate vector and 
+     r0 is a minimum increment factor for the difference quotient. */
+
+  f1 = N_VGetArrayPointer_Serial(vtemp1);
+
+  fac = N_VWrmsNorm (fc, rewt);
+  r0 = RCONST(1000.0)*SUNRabs(gamma)*uround*NEQ*fac;
+  if (r0 == ZERO) r0 = ONE;
+
+  for (igy = 0; igy < ngy; igy++) {
+    jy = jyr[igy];
+    if00 = jy*mxmp;
+    for (igx = 0; igx < ngx; igx++) { 
+      jx = jxr[igx];
+      if0 = if00 + jx*mp;
+      ig = igx + igy*ngx; 
+      /* Generate ig-th diagonal block */
+      for (j = 0; j < mp; j++) {
+        /* Generate the jth column as a difference quotient */
+        jj = if0 + j; 
+        save = cdata[jj];
+        r = SUNMAX(srur*SUNRabs(save),r0/rewtdata[jj]);
+        cdata[jj] += r;
+        fac = -gamma/r;
+        fblock (t, cdata, jx, jy, f1, wdata);
+        for (i = 0; i < mp; i++) {
+          P[ig][j][i] = (f1[i] - fsave[if0+i])*fac;
+        }
+        cdata[jj] = save;
+      }
+    }
+  }
+  
+  /* Add identity matrix and do LU decompositions on blocks. */
+
+   for (ig = 0; ig < ngrp; ig++) {
+     denseAddIdentity(P[ig], mp);
+     ier = denseGETRF(P[ig], mp, mp, pivot[ig]);
+     if (ier != 0) return(1);
+   }
+
+  *jcurPtr = TRUE;
+  return(0);
+}
+
+/*
+ * This routine applies two inverse preconditioner matrices
+ * to the vector r, using the interaction-only block-diagonal Jacobian
+ * with block-grouping, denoted Jr, and Gauss-Seidel applied to the
+ * diffusion contribution to the Jacobian, denoted Jd.
+ * It first calls GSIter for a Gauss-Seidel approximation to
+ * ((I - gamma*Jd)-inverse)*r, and stores the result in z.
+ * Then it computes ((I - gamma*Jr)-inverse)*z, using LU factors of the
+ * blocks in P, and pivot information in pivot, and returns the result in z.
+ */
+
+static int PSolve(realtype t, N_Vector c, N_Vector fc,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype   ***P;
+  long int **pivot;
+  int jx, jy, igx, igy, iv, ig, *jigx, *jigy, mx, my, ngx, mp;
+  WebData wdata;
+
+  wdata = (WebData) user_data;
+
+  N_VScale(ONE, r, z);
+
+  /* call GSIter for Gauss-Seidel iterations */
+
+  GSIter(gamma, z, vtemp, wdata);
+
+  /* Do backsolves for inverse of block-diagonal preconditioner factor */
+ 
+  P = wdata->P;
+  pivot = wdata->pivot;
+  mx = wdata->mx;
+  my = wdata->my;
+  ngx = wdata->ngx;
+  mp = wdata->mp;
+  jigx = wdata->jigx;
+  jigy = wdata->jigy;
+
+  iv = 0;
+  for (jy = 0; jy < my; jy++) {
+    igy = jigy[jy];
+    for (jx = 0; jx < mx; jx++) {
+      igx = jigx[jx];
+      ig = igx + igy*ngx;
+      denseGETRS(P[ig], mp, pivot[ig], &(N_VGetArrayPointer_Serial(z)[iv]));
+      iv += mp;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * This routine computes the right-hand side of the adjoint ODE system and
+ * returns it in cBdot. The interaction rates are computed by calls to WebRates,
+ * and these are saved in fsave for use in preconditioning. The adjoint 
+ * interaction rates are computed by calls to WebRatesB.
+ */
+
+static int fB(realtype t, N_Vector c, N_Vector cB, 
+              N_Vector cBdot, void *user_data)
+{
+  int i, ic, ici, idxl, idxu, idyl, idyu, iyoff, jx, jy, ns, mxns;
+  realtype dcxli, dcxui, dcyli, dcyui, x, y, *cox, *coy, *fsave, *fBsave, dx, dy;
+  realtype *cdata, *cBdata, *cBdotdata;
+  WebData wdata;
+
+  wdata = (WebData) user_data;
+  cdata = N_VGetArrayPointer_Serial(c);
+  cBdata = N_VGetArrayPointer_Serial(cB);
+  cBdotdata = N_VGetArrayPointer_Serial(cBdot);
+
+  mxns = wdata->mxns;
+  ns = wdata->ns;
+  fsave = wdata->fsave;
+  fBsave = wdata->fBsave;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    iyoff = mxns*jy;
+    idyu = (jy == MY-1) ? -mxns : mxns;
+    idyl = (jy == 0) ? -mxns : mxns;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      ic = iyoff + ns*jx;
+      /* Get interaction rates at one point (x,y). */
+      WebRatesB(x, y, t, cdata+ic, cBdata+ic, fsave+ic, fBsave+ic, wdata);
+      idxu = (jx == MX-1) ? -ns : ns;
+      idxl = (jx == 0) ? -ns : ns;
+      for (i = 1; i <= ns; i++) {
+        ici = ic + i-1;
+        /* Do differencing in y. */
+        dcyli = cBdata[ici] - cBdata[ici-idyl];
+        dcyui = cBdata[ici+idyu] - cBdata[ici];
+        /* Do differencing in x. */
+        dcxli = cBdata[ici] - cBdata[ici-idxl];
+        dcxui = cBdata[ici+idxu] - cBdata[ici];
+        /* Collect terms and load cdot elements. */
+        cBdotdata[ici] = - coy[i-1]*(dcyui - dcyli) 
+                         - cox[i-1]*(dcxui - dcxli)
+	                 - fBsave[ici];
+      }
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * Preconditioner setup function for the backward problem
+ */
+
+static int PrecondB(realtype t, N_Vector c, 
+                    N_Vector cB, N_Vector fcB, booleantype jok, 
+                    booleantype *jcurPtr, realtype gamma,
+                    void *user_data,
+                    N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype ***P;
+  long int **pivot, ier;
+  int i, if0, if00, ig, igx, igy, j, jj, jx, jy;
+  int *jxr, *jyr, mp, ngrp, ngx, ngy, mxmp, flag;
+  realtype uround, fac, r, r0, save, srur;
+  realtype *f1, *fsave, *cdata, *rewtdata;
+  void *cvode_mem;
+  WebData wdata;
+  N_Vector rewt;
+
+  wdata = (WebData) user_data;
+  cvode_mem = CVodeGetAdjCVodeBmem(wdata->cvode_mem, wdata->indexB);
+  if(check_flag((void *)cvode_mem, "CVadjGetCVodeBmem", 0)) return(1);
+  rewt = wdata->rewt;
+  flag = CVodeGetErrWeights(cvode_mem, rewt);
+  if(check_flag(&flag, "CVodeGetErrWeights", 1)) return(1);
+
+  cdata = N_VGetArrayPointer_Serial(c);
+  rewtdata = N_VGetArrayPointer_Serial(rewt);
+
+  uround = UNIT_ROUNDOFF;
+
+  P = wdata->P;
+  pivot = wdata->pivot;
+  jxr = wdata->jxr;
+  jyr = wdata->jyr;
+  mp = wdata->mp;
+  srur = wdata->srur;
+  ngrp = wdata->ngrp;
+  ngx = wdata->ngx;
+  ngy = wdata->ngy;
+  mxmp = wdata->mxmp;
+  fsave = wdata->fsave;
+
+  /* Make mp calls to fblock to approximate each diagonal block of Jacobian.
+     Here, fsave contains the base value of the rate vector and 
+     r0 is a minimum increment factor for the difference quotient. */
+
+  f1 = N_VGetArrayPointer_Serial(vtemp1);
+
+  fac = N_VWrmsNorm (fcB, rewt);
+  r0 = RCONST(1000.0)*SUNRabs(gamma)*uround*NEQ*fac;
+  if (r0 == ZERO) r0 = ONE;
+
+  for (igy = 0; igy < ngy; igy++) {
+    jy = jyr[igy];
+    if00 = jy*mxmp;
+    for (igx = 0; igx < ngx; igx++) { 
+      jx = jxr[igx];
+      if0 = if00 + jx*mp;
+      ig = igx + igy*ngx; 
+      /* Generate ig-th diagonal block */
+      for (j = 0; j < mp; j++) {
+        /* Generate the jth column as a difference quotient */
+        jj = if0 + j; 
+        save = cdata[jj];
+        r = SUNMAX(srur*SUNRabs(save),r0/rewtdata[jj]);
+        cdata[jj] += r;
+        fac = gamma/r;
+        fblock (t, cdata, jx, jy, f1, wdata);
+        for (i = 0; i < mp; i++) {
+          P[ig][i][j] = (f1[i] - fsave[if0+i])*fac;
+        }
+        cdata[jj] = save;
+      }
+    }
+  }
+  
+  /* Add identity matrix and do LU decompositions on blocks. */
+
+   for (ig = 0; ig < ngrp; ig++) {
+     denseAddIdentity(P[ig], mp);
+     ier = denseGETRF(P[ig], mp, mp, pivot[ig]);
+     if (ier != 0) return(1);
+   }
+
+  *jcurPtr = TRUE;
+  return(0);
+}
+
+/*
+ * Preconditioner solve function for the backward problem
+ */
+
+static int PSolveB(realtype t, N_Vector c, 
+                   N_Vector cB, N_Vector fcB, 
+                   N_Vector r, N_Vector z,
+                   realtype gamma, realtype delta, 
+                   int lr, void *user_data, N_Vector vtemp)
+{
+  realtype ***P;
+  long int **pivot;
+  int jx, jy, igx, igy, iv, ig, *jigx, *jigy, mx, my, ngx;
+  long int mp;
+  WebData wdata;
+
+  wdata = (WebData) user_data;
+
+  N_VScale(ONE, r, z);
+
+  /* call GSIter for Gauss-Seidel iterations (same routine but with gamma=-gamma) */
+
+  GSIter(-gamma, z, vtemp, wdata);
+
+  /* Do backsolves for inverse of block-diagonal preconditioner factor */
+ 
+  P = wdata->P;
+  pivot = wdata->pivot;
+  mx = wdata->mx;
+  my = wdata->my;
+  ngx = wdata->ngx;
+  mp = wdata->mp;
+  jigx = wdata->jigx;
+  jigy = wdata->jigy;
+
+  iv = 0;
+  for (jy = 0; jy < my; jy++) {
+    igy = jigy[jy];
+    for (jx = 0; jx < mx; jx++) {
+      igx = jigx[jx];
+      ig = igx + igy*ngx;
+      denseGETRS(P[ig], mp, pivot[ig], &(N_VGetArrayPointer_Serial(z)[iv]));
+      iv += mp;
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Allocate space for user data structure
+ */
+
+static WebData AllocUserData(void)
+{
+  int i, ngrp = NGRP;
+  long int ns = NS;
+  WebData wdata;
+
+  wdata = (WebData) malloc(sizeof *wdata);
+  for(i=0; i < ngrp; i++) {
+    (wdata->P)[i] = newDenseMat(ns, ns);
+    (wdata->pivot)[i] = newLintArray(ns);
+  }
+  wdata->rewt = N_VNew_Serial(NEQ);
+  return(wdata);
+}
+
+/*
+ * Initialize user data structure
+ */
+
+static void InitUserData(WebData wdata)
+{
+  int i, j, ns;
+  realtype *bcoef, *diff, *cox, *coy, dx, dy;
+  realtype (*acoef)[NS];
+
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+  diff = wdata->diff;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  ns = wdata->ns = NS;
+
+  for (j = 0; j < NS; j++) { for (i = 0; i < NS; i++) acoef[i][j] = ZERO; }
+  for (j = 0; j < NP; j++) {
+    for (i = 0; i < NP; i++) {
+      acoef[NP+i][j] = EE;
+      acoef[i][NP+j] = -GG;
+    }
+    acoef[j][j] = -AA;
+    acoef[NP+j][NP+j] = -AA;
+    bcoef[j] = BB;
+    bcoef[NP+j] = -BB;
+    diff[j] = DPREY;
+    diff[NP+j] = DPRED;
+  }
+
+  /* Set remaining problem parameters */
+
+  wdata->mxns = MXNS;
+  dx = wdata->dx = DX;
+  dy = wdata->dy = DY;
+  for (i = 0; i < ns; i++) {
+    cox[i] = diff[i]/SUNSQR(dx);
+    coy[i] = diff[i]/SUNSQR(dy);
+  }
+
+  /* Set remaining method parameters */
+
+  wdata->mp = MP;
+  wdata->mq = MQ;
+  wdata->mx = MX;
+  wdata->my = MY;
+  wdata->srur = SUNRsqrt(UNIT_ROUNDOFF);
+  wdata->mxmp = MXMP;
+  wdata->ngrp = NGRP;
+  wdata->ngx = NGX;
+  wdata->ngy = NGY;
+  SetGroups(MX, NGX, wdata->jgx, wdata->jigx, wdata->jxr);
+  SetGroups(MY, NGY, wdata->jgy, wdata->jigy, wdata->jyr);
+}
+
+/*
+ * This routine sets arrays jg, jig, and jr describing
+ * a uniform partition of (0,1,2,...,m-1) into ng groups.
+ * The arrays set are:
+ *   jg    = length ng+1 array of group boundaries.
+ *           Group ig has indices j = jg[ig],...,jg[ig+1]-1.
+ *   jig   = length m array of group indices vs node index.
+ *           Node index j is in group jig[j].
+ *   jr    = length ng array of indices representing the groups.
+ *           The index for group ig is j = jr[ig].
+ */
+
+static void SetGroups(int m, int ng, int jg[], int jig[], int jr[])
+{
+  int ig, j, len1, mper, ngm1;
+  
+  mper = m/ng; /* does integer division */
+  for (ig=0; ig < ng; ig++) jg[ig] = ig*mper;
+  jg[ng] = m;
+  
+  ngm1 = ng - 1;
+  len1 = ngm1*mper;
+  for (j = 0; j < len1; j++) jig[j] = j/mper;
+  for (j = len1; j < m; j++) jig[j] = ngm1;
+
+  for (ig = 0; ig < ngm1; ig++) jr[ig] = ((2*ig+1)*mper-1)/2;
+  jr[ngm1] = (ngm1*mper+m-1)/2;
+}
+
+/*
+ * This routine computes and loads the vector of initial values. 
+ */
+
+static void CInit(N_Vector c, WebData wdata)
+{
+  int i, ici, ioff, iyoff, jx, jy, ns, mxns;
+  realtype argx, argy, x, y, dx, dy, x_factor, y_factor, *cdata;
+  
+  cdata = N_VGetArrayPointer_Serial(c);
+  ns = wdata->ns;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+  
+  x_factor = RCONST(4.0)/SUNSQR(AX);
+  y_factor = RCONST(4.0)/SUNSQR(AY);
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    argy = SUNSQR(y_factor*y*(AY-y));
+    iyoff = mxns*jy;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      argx = SUNSQR(x_factor*x*(AX-x));
+      ioff = iyoff + ns*jx;
+      for (i = 1; i <= ns; i++) {
+        ici = ioff + i-1;
+        cdata[ici] = RCONST(10.0) + i*argx*argy;
+      }
+    }
+  }
+}
+
+/*
+ * This function computes and loads the final values for the adjoint variables
+ */
+
+static void CbInit(N_Vector c, int is, WebData wdata)
+{
+  int i, ici, ioff, iyoff, jx, jy, ns, mxns;
+  realtype *cdata;
+
+  realtype gu[NS];
+
+  cdata = N_VGetArrayPointer_Serial(c);
+  ns = wdata->ns;
+  mxns = wdata->mxns;
+
+  for ( i = 1; i <= ns; i++ ) gu[i-1] = ZERO; 
+  gu[ISPEC-1] = ONE;
+
+  for (jy = 0; jy < MY; jy++) {
+    iyoff = mxns*jy;
+    for (jx = 0; jx < MX; jx++) {
+      ioff = iyoff + ns*jx;
+      for (i = 1; i <= ns; i++) {
+        ici = ioff + i-1;
+        cdata[ici] = gu[i-1];
+      }
+    }
+  }
+}
+
+/*
+ * This routine computes the interaction rates for the species
+ * c_1, ... ,c_ns (stored in c[0],...,c[ns-1]), at one spatial point 
+ * and at time t.
+ */
+
+static void WebRates(realtype x, realtype y, realtype t, realtype c[], 
+                     realtype rate[], WebData wdata)
+{
+  int i, j, ns;
+  realtype fac, *bcoef;
+  realtype (*acoef)[NS];
+
+  ns = wdata->ns;
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+
+  for (i = 0; i < ns; i++)
+    rate[i] = ZERO;
+  
+  for (j = 0; j < ns; j++) 
+    for (i = 0; i < ns; i++) 
+      rate[i] += c[j] * acoef[i][j];
+  
+  fac = ONE + ALPH*x*y;
+  for (i = 0; i < ns; i++) 
+    rate[i] = c[i]*(bcoef[i]*fac + rate[i]);
+}
+
+/*
+ * This routine computes the interaction rates for the backward problem
+ */
+
+static void WebRatesB(realtype x, realtype y, realtype t, realtype c[], realtype cB[], 
+                      realtype rate[], realtype rateB[], WebData wdata)
+{
+  int i, j, ns;
+  realtype fac, *bcoef;
+  realtype (*acoef)[NS];
+
+  ns = wdata->ns;
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+
+  fac = ONE + ALPH*x*y;
+
+  for (i = 0; i < ns; i++)
+    rate[i] = bcoef[i]*fac;
+  
+  for (j = 0; j < ns; j++) 
+    for (i = 0; i < ns; i++)
+      rate[i] += acoef[i][j]*c[j];
+
+  for (i = 0; i < ns; i++) {
+    rateB[i] = cB[i]*rate[i];
+    rate[i] = c[i]*rate[i];
+  }
+
+  for (j = 0; j < ns; j++) 
+    for (i = 0; i < ns; i++)
+      rateB[i] += acoef[j][i]*c[j]*cB[j];
+
+}
+
+/*
+ * This routine computes one block of the interaction terms of the
+ * system, namely block (jx,jy), for use in preconditioning.
+ * Here jx and jy count from 0.
+ */
+
+static void fblock(realtype t, realtype cdata[], int jx, int jy, 
+                   realtype cdotdata[], WebData wdata)
+{
+  int iblok, ic;
+  realtype x, y;
+
+  iblok = jx + jy*(wdata->mx);
+  y = jy*(wdata->dy);
+  x = jx*(wdata->dx);
+  ic = (wdata->ns)*(iblok);
+  WebRates(x, y, t, cdata+ic, cdotdata, wdata);
+}
+
+/*
+ * This routine performs ITMAX=5 Gauss-Seidel iterations to compute an
+ * approximation to (P-inverse)*z, where P = I - gamma*Jd, and
+ * Jd represents the diffusion contributions to the Jacobian.
+ * The answer is stored in z on return, and x is a temporary vector.
+ * The dimensions below assume a global constant NS >= ns.
+ * Some inner loops of length ns are implemented with the small
+ * vector kernels v_sum_prods, v_prod, v_inc_by_prod.
+ */
+
+static void GSIter(realtype gamma, N_Vector z, N_Vector x, WebData wdata)
+{
+  int i, ic, iter, iyoff, jx, jy, ns, mxns, mx, my, x_loc, y_loc;
+  realtype beta[NS], beta2[NS], cof1[NS], gam[NS], gam2[NS];
+  realtype temp, *cox, *coy, *xd, *zd;
+
+  xd = N_VGetArrayPointer_Serial(x);
+  zd = N_VGetArrayPointer_Serial(z);
+  ns = wdata->ns;
+  mx = wdata->mx;
+  my = wdata->my;
+  mxns = wdata->mxns;
+  cox = wdata->cox;
+  coy = wdata->coy;
+
+  /* Write matrix as P = D - L - U.
+     Load local arrays beta, beta2, gam, gam2, and cof1. */
+ 
+  for (i = 0; i < ns; i++) {
+    temp = ONE/(ONE + TWO*gamma*(cox[i] + coy[i]));
+    beta[i] = gamma*cox[i]*temp;
+    beta2[i] = TWO*beta[i];
+    gam[i] = gamma*coy[i]*temp;
+    gam2[i] = TWO*gam[i];
+    cof1[i] = temp;
+  }
+
+  /* Begin iteration loop.
+  Load vector x with (D-inverse)*z for first iteration. */
+
+  for (jy = 0; jy < my; jy++) {
+    iyoff = mxns*jy;
+    for (jx = 0; jx < mx; jx++) {
+      ic = iyoff + ns*jx;
+      v_prod(xd+ic, cof1, zd+ic, ns); /* x[ic+i] = cof1[i]z[ic+i] */
+    }
+  }
+  N_VConst(ZERO, z);
+
+  /* Looping point for iterations. */
+
+  for (iter=1; iter <= ITMAX; iter++) {
+
+    /* Calculate (D-inverse)*U*x if not the first iteration. */
+
+    if (iter > 1) {
+      for (jy=0; jy < my; jy++) {
+        iyoff = mxns*jy;
+        for (jx=0; jx < mx; jx++) { /* order of loops matters */
+          ic = iyoff + ns*jx;
+          x_loc = (jx == 0) ? 0 : ((jx == mx-1) ? 2 : 1);
+          y_loc = (jy == 0) ? 0 : ((jy == my-1) ? 2 : 1);
+          switch (3*y_loc+x_loc) {
+          case 0 : /* jx == 0, jy == 0 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] + gam2[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta2, xd+ic+ns, gam2, xd+ic+mxns, ns);
+            break;
+          case 1 : /* 1 <= jx <= mx-2, jy == 0 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] + gam2[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta, xd+ic+ns, gam2, xd+ic+mxns, ns);
+            break;
+          case 2 : /* jx == mx-1, jy == 0 */
+            /* x[ic+i] = gam2[i]x[ic+mxns+i] */
+            v_prod(xd+ic, gam2, xd+ic+mxns, ns);
+            break;
+          case 3 : /* jx == 0, 1 <= jy <= my-2 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] + gam[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta2, xd+ic+ns, gam, xd+ic+mxns, ns);
+            break;
+          case 4 : /* 1 <= jx <= mx-2, 1 <= jy <= my-2 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] + gam[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta, xd+ic+ns, gam, xd+ic+mxns, ns);
+            break;
+          case 5 : /* jx == mx-1, 1 <= jy <= my-2 */
+            /* x[ic+i] = gam[i]x[ic+mxns+i] */
+            v_prod(xd+ic, gam, xd+ic+mxns, ns);
+            break;
+          case 6 : /* jx == 0, jy == my-1 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] */
+            v_prod(xd+ic, beta2, xd+ic+ns, ns);
+            break;
+          case 7 : /* 1 <= jx <= mx-2, jy == my-1 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] */
+            v_prod(xd+ic, beta, xd+ic+ns, ns);
+            break;
+          case 8 : /* jx == mx-1, jy == my-1 */
+            /* x[ic+i] = ZERO */
+            v_zero(xd+ic, ns);
+            break;
+          }
+        }
+      }
+    }  /* end if (iter > 1) */
+    
+    /* Overwrite x with [(I - (D-inverse)*L)-inverse]*x. */
+    
+    for (jy=0; jy < my; jy++) {
+      iyoff = mxns*jy;
+      for (jx=0; jx < mx; jx++) { /* order of loops matters */
+        ic = iyoff + ns*jx;
+        x_loc = (jx == 0) ? 0 : ((jx == mx-1) ? 2 : 1);
+        y_loc = (jy == 0) ? 0 : ((jy == my-1) ? 2 : 1);
+        switch (3*y_loc+x_loc) {
+        case 0 : /* jx == 0, jy == 0 */
+          break;
+        case 1 : /* 1 <= jx <= mx-2, jy == 0 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          break;
+        case 2 : /* jx == mx-1, jy == 0 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          break;
+        case 3 : /* jx == 0, 1 <= jy <= my-2 */
+          /* x[ic+i] += gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 4 : /* 1 <= jx <= mx-2, 1 <= jy <= my-2 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] + gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 5 : /* jx == mx-1, 1 <= jy <= my-2 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] + gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 6 : /* jx == 0, jy == my-1 */
+          /* x[ic+i] += gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        case 7 : /* 1 <= jx <= mx-2, jy == my-1 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] + gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        case 8 : /* jx == mx-1, jy == my-1 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] + gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        }
+      }
+    }
+    
+    /* Add increment x to z : z <- z+x */
+    
+    N_VLinearSum(ONE, z, ONE, x, z);
+    
+  }
+}
+
+static void v_inc_by_prod(realtype u[], realtype v[], realtype w[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] += v[i]*w[i];
+}
+
+static void v_sum_prods(realtype u[], realtype p[], realtype q[], 
+                        realtype v[], realtype w[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] = p[i]*q[i] + v[i]*w[i];
+}
+
+static void v_prod(realtype u[], realtype v[], realtype w[], int n)
+{ 
+  int i;
+  for (i=0; i < n; i++) u[i] = v[i]*w[i];
+}
+
+static void v_zero(realtype u[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] = ZERO;
+}
+
+/*
+ * Print maximum sensitivity of G for each species
+ */
+
+static void PrintOutput(N_Vector cB, int ns, int mxns, WebData wdata)
+{
+  int i, jx, jy;
+  realtype *cdata, cij, cmax, x, y;
+
+  x = y = ZERO;
+
+  cdata = N_VGetArrayPointer_Serial(cB);
+
+  for (i=1; i <= ns; i++) {
+
+    cmax = ZERO;
+
+    for (jy=MY-1; jy >= 0; jy--) {
+      for (jx=0; jx < MX; jx++) {
+        cij = cdata[(i-1) + jx*ns + jy*mxns];
+        if (SUNRabs(cij) > cmax) {
+          cmax = cij;
+          x = jx * wdata->dx;
+          y = jy * wdata->dy;
+        }
+      }
+    }
+
+    printf("\nMaximum sensitivity with respect to I.C. of species %d\n", i);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("  mu max = %Le\n",cmax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("  mu max = %e\n",cmax);
+#else
+    printf("  mu max = %e\n",cmax);
+#endif
+    printf("at\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("  x = %Le\n  y = %Le\n", x, y);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("  x = %e\n  y = %e\n", x, y);
+#else
+    printf("  x = %e\n  y = %e\n", x, y);
+#endif
+
+  }
+
+}
+
+/*
+ * Compute double space integral
+ */
+
+static realtype doubleIntgr(N_Vector c, int i, WebData wdata)
+{
+  realtype *cdata;
+  int ns, mx, my, mxns;
+  realtype dx, dy;
+  realtype intgr_xy, intgr_x;
+  int jx, jy;
+
+  cdata = N_VGetArrayPointer_Serial(c);
+
+  ns   = wdata->ns;
+  mx   = wdata->mx;
+  my   = wdata->my;
+  mxns = wdata->mxns;
+  dx   = wdata->dx;
+  dy   = wdata->dy;
+
+  jy = 0;
+  intgr_x = cdata[(i-1)+jy*mxns];
+  for (jx = 1; jx < mx-1; jx++) {
+    intgr_x += TWO*cdata[(i-1) + jx*ns + jy*mxns]; 
+  }
+  intgr_x += cdata[(i-1)+(mx-1)*ns+jy*mxns];
+  intgr_x *= RCONST(0.5)*dx;
+  
+  intgr_xy = intgr_x;
+  
+  for (jy = 1; jy < my-1; jy++) {
+    
+    intgr_x = cdata[(i-1)+jy*mxns];
+    for (jx = 1; jx < mx-1; jx++) {
+      intgr_x += TWO*cdata[(i-1) + jx*ns + jy*mxns]; 
+    }
+    intgr_x += cdata[(i-1)+(mx-1)*ns+jy*mxns];
+    intgr_x *= RCONST(0.5)*dx;
+    
+    intgr_xy += TWO*intgr_x;
+
+  }
+  
+  jy = my-1;
+  intgr_x = cdata[(i-1)+jy*mxns];
+  for (jx = 1; jx < mx-1; jx++) {
+    intgr_x += TWO*cdata[(i-1) + jx*ns + jy*mxns]; 
+  }
+  intgr_x += cdata[(i-1)+(mx-1)*ns+jy*mxns];
+  intgr_x *= RCONST(0.5)*dx;
+  
+  intgr_xy += intgr_x;
+  
+  intgr_xy *= RCONST(0.5)*dy;
+
+  return(intgr_xy);
+}
+
+/*
+ * Free space allocated for the user data structure
+ */
+
+static void FreeUserData(WebData wdata)
+{
+  int i, ngrp;
+
+  ngrp = wdata->ngrp;
+  for(i=0; i < ngrp; i++) {
+    destroyMat((wdata->P)[i]);
+    destroyArray((wdata->pivot)[i]);
+  }
+  N_VDestroy_Serial(wdata->rewt);
+  free(wdata);
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsFoodWeb_ASAp_kry.out b/examples/cvodes/serial/cvsFoodWeb_ASAp_kry.out
new file mode 100644
index 0000000..f822e64
--- /dev/null
+++ b/examples/cvodes/serial/cvsFoodWeb_ASAp_kry.out
@@ -0,0 +1,51 @@
+
+Create and allocate CVODES memory for forward run
+
+Allocate global memory
+
+Forward integration
+
+ncheck = 11
+
+   g = int_x int_y c6(Tfinal,x,y) dx dy = 35988.914996 
+
+
+Create and allocate CVODES memory for backward run
+
+Backward integration
+
+Maximum sensitivity with respect to I.C. of species 1
+  mu max = 5.105006e-04
+at
+  x = 1.000000e+00
+  y = 1.000000e+00
+
+Maximum sensitivity with respect to I.C. of species 2
+  mu max = 4.865450e-04
+at
+  x = 1.000000e+00
+  y = 1.000000e+00
+
+Maximum sensitivity with respect to I.C. of species 3
+  mu max = 4.644767e-04
+at
+  x = 1.000000e+00
+  y = 1.000000e+00
+
+Maximum sensitivity with respect to I.C. of species 4
+  mu max = 3.447561e-12
+at
+  x = 1.000000e+00
+  y = 8.421053e-01
+
+Maximum sensitivity with respect to I.C. of species 5
+  mu max = 3.434214e-12
+at
+  x = 1.000000e+00
+  y = 8.421053e-01
+
+Maximum sensitivity with respect to I.C. of species 6
+  mu max = 6.326559e-12
+at
+  x = 1.000000e+00
+  y = 0.000000e+00
diff --git a/examples/cvodes/serial/cvsHessian_ASA_FSA.c b/examples/cvodes/serial/cvsHessian_ASA_FSA.c
new file mode 100644
index 0000000..1372a2f
--- /dev/null
+++ b/examples/cvodes/serial/cvsHessian_ASA_FSA.c
@@ -0,0 +1,784 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4956 $
+ * $Date: 2016-09-23 11:15:59 -0700 (Fri, 23 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ *
+ * Hessian through adjoint sensitivity example problem.
+ *
+ *        [ - p1 * y1^2 - y3 ]           [ 1 ]
+ *   y' = [    - y2          ]    y(0) = [ 1 ]
+ *        [ -p2^2 * y2 * y3  ]           [ 1 ]
+ *
+ *   p1 = 1.0
+ *   p2 = 2.0
+ *
+ *           2
+ *          /
+ *   G(p) = |  0.5 * ( y1^2 + y2^2 + y3^2 ) dt
+ *          /
+ *          0
+ *
+ * Compute the gradient (ASA) and Hessian (FSA over ASA) of G(p).
+ *
+ * See D.B. Ozyurt and P.I. Barton, SISC 26(5) 1725-1743, 2005.
+ *
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvodes/cvodes.h>
+#include <cvodes/cvodes_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+typedef struct {
+  realtype p1, p2;
+} *UserData;
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int fQ(realtype t, N_Vector y, N_Vector qdot, void *user_data);
+static int fS(int Ns, realtype t,
+              N_Vector y, N_Vector ydot,
+              N_Vector *yS, N_Vector *ySdot,
+              void *user_data,
+              N_Vector tmp1, N_Vector tmp2);
+static int fQS(int Ns, realtype t,
+               N_Vector y, N_Vector *yS, 
+               N_Vector yQdot, N_Vector *yQSdot,
+               void *user_data,
+               N_Vector tmp, N_Vector tmpQ);
+
+static int fB1(realtype t, N_Vector y, N_Vector *yS, 
+               N_Vector yB, N_Vector yBdot, void *user_dataB);
+static int fQB1(realtype t, N_Vector y, N_Vector *yS, 
+                N_Vector yB, N_Vector qBdot, void *user_dataB);
+
+
+static int fB2(realtype t, N_Vector y, N_Vector *yS, 
+               N_Vector yB, N_Vector yBdot, void *user_dataB);
+static int fQB2(realtype t, N_Vector y, N_Vector *yS,
+                N_Vector yB, N_Vector qBdot, void *user_dataB);
+
+void PrintFwdStats(void *cvode_mem);
+void PrintBckStats(void *cvode_mem, int idx);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+
+  void *cvode_mem;
+
+  long int Neq, Np2;
+  int Np;
+
+  realtype t0, tf;
+
+  realtype reltol;
+  realtype abstol, abstolQ, abstolB, abstolQB;
+
+  N_Vector y, yQ;
+  N_Vector *yS, *yQS;
+  N_Vector yB1, yB2;
+  N_Vector yQB1, yQB2;
+
+  int steps, ncheck;
+  int indexB1, indexB2;
+
+  int flag;
+  realtype time;
+
+  realtype dp;
+  realtype G, Gp, Gm;
+  realtype grdG_fwd[2], grdG_bck[2], grdG_cntr[2];
+  realtype H11, H22;
+
+  /* User data structure */
+
+  data = (UserData) malloc(sizeof *data);
+  data->p1 = RCONST(1.0);
+  data->p2 = RCONST(2.0);
+
+  /* Problem size, integration interval, and tolerances */
+
+  Neq = 3;
+  Np  = 2;
+  Np2 = 2*Np;
+
+  t0 = 0.0;
+  tf = 2.0;
+
+  reltol = 1.0e-8;
+
+  abstol = 1.0e-8;
+  abstolQ = 1.0e-8;
+
+  abstolB = 1.0e-8;
+  abstolQB = 1.0e-8;
+
+  /* Initializations for forward problem */
+
+  y = N_VNew_Serial(Neq);
+  N_VConst(ONE, y);
+
+  yQ = N_VNew_Serial(1);
+  N_VConst(ZERO, yQ);
+
+  yS = N_VCloneVectorArray_Serial(Np, y);
+  N_VConst(ZERO, yS[0]);
+  N_VConst(ZERO, yS[1]);
+
+  yQS = N_VCloneVectorArray_Serial(Np, yQ);
+  N_VConst(ZERO, yQS[0]);
+  N_VConst(ZERO, yQS[1]);
+
+  /* Create and initialize forward problem */
+
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+
+  flag = CVodeInit(cvode_mem, f, t0, y);
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  flag = CVodeSetUserData(cvode_mem, data);
+
+  flag = CVDense(cvode_mem, Neq);
+
+  flag = CVodeQuadInit(cvode_mem, fQ, yQ);
+  flag = CVodeQuadSStolerances(cvode_mem, reltol, abstolQ);
+  flag = CVodeSetQuadErrCon(cvode_mem, TRUE);
+
+  flag = CVodeSensInit(cvode_mem, Np, CV_SIMULTANEOUS, fS, yS);
+  flag = CVodeSensEEtolerances(cvode_mem);
+  flag = CVodeSetSensErrCon(cvode_mem, TRUE);
+
+  flag = CVodeQuadSensInit(cvode_mem, fQS, yQS);
+
+  flag = CVodeQuadSensEEtolerances(cvode_mem);
+  flag = CVodeSetQuadSensErrCon(cvode_mem, TRUE);
+
+  /* Initialize ASA */
+
+  steps = 100;
+  flag = CVodeAdjInit(cvode_mem, steps, CV_POLYNOMIAL);
+
+  /* Forward integration */
+
+  printf("-------------------\n");
+  printf("Forward integration\n");
+  printf("-------------------\n\n");
+
+  flag = CVodeF(cvode_mem, tf, y, &time, CV_NORMAL, &ncheck);
+
+  flag = CVodeGetQuad(cvode_mem, &time, yQ);
+  G = Ith(yQ,1);
+
+  flag = CVodeGetSens(cvode_mem, &time, yS);
+
+  flag = CVodeGetQuadSens(cvode_mem, &time, yQS);
+
+  printf("ncheck = %d\n", ncheck);
+  printf("\n");
+  printf("     y:    %12.4e %12.4e %12.4e", Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("     G:    %12.4e\n", Ith(yQ,1));
+  printf("\n");
+  printf("     yS1:  %12.4e %12.4e %12.4e\n", Ith(yS[0],1), Ith(yS[0],2), Ith(yS[0],3));
+  printf("     yS2:  %12.4e %12.4e %12.4e\n", Ith(yS[1],1), Ith(yS[1],2), Ith(yS[1],3));
+  printf("\n");
+  printf("   dG/dp:  %12.4e %12.4e\n", Ith(yQS[0],1), Ith(yQS[1],1));
+  printf("\n");
+
+  printf("Final Statistics for forward pb.\n");
+  printf("--------------------------------\n");
+  PrintFwdStats(cvode_mem);
+
+
+  /* Initializations for backward problems */
+
+  yB1 = N_VNew_Serial(2*Neq);
+  N_VConst(ZERO, yB1);
+
+  yQB1 = N_VNew_Serial(Np2);
+  N_VConst(ZERO, yQB1);
+
+  yB2 = N_VNew_Serial(2*Neq);
+  N_VConst(ZERO, yB2);
+
+  yQB2 = N_VNew_Serial(Np2);
+  N_VConst(ZERO, yQB2);
+
+  /* Create and initialize backward problems (one for each column of the Hessian) */
+
+  flag = CVodeCreateB(cvode_mem, CV_BDF, CV_NEWTON, &indexB1);
+  flag = CVodeInitBS(cvode_mem, indexB1, fB1, tf, yB1);
+  flag = CVodeSStolerancesB(cvode_mem, indexB1, reltol, abstolB);
+  flag = CVodeSetUserDataB(cvode_mem, indexB1, data);
+  flag = CVodeQuadInitBS(cvode_mem, indexB1, fQB1, yQB1);
+  flag = CVodeQuadSStolerancesB(cvode_mem, indexB1, reltol, abstolQB);
+  flag = CVodeSetQuadErrConB(cvode_mem, indexB1, TRUE);
+  flag = CVDenseB(cvode_mem, indexB1, 2*Neq);
+
+  flag = CVodeCreateB(cvode_mem, CV_BDF, CV_NEWTON, &indexB2);
+  flag = CVodeInitBS(cvode_mem, indexB2, fB2, tf, yB2);
+  flag = CVodeSStolerancesB(cvode_mem, indexB2, reltol, abstolB);
+  flag = CVodeSetUserDataB(cvode_mem, indexB2, data);
+  flag = CVodeQuadInitBS(cvode_mem, indexB2, fQB2, yQB2);
+  flag = CVodeQuadSStolerancesB(cvode_mem, indexB2, reltol, abstolQB);
+  flag = CVodeSetQuadErrConB(cvode_mem, indexB2, TRUE);
+  flag = CVDenseB(cvode_mem, indexB2, 2*Neq);
+
+  /* Backward integration */
+
+  printf("---------------------------------------------\n");
+  printf("Backward integration ... (2 adjoint problems)\n");
+  printf("---------------------------------------------\n\n");
+
+  flag = CVodeB(cvode_mem, t0, CV_NORMAL);
+
+  flag = CVodeGetB(cvode_mem, indexB1, &time, yB1);
+  flag = CVodeGetQuadB(cvode_mem, indexB1, &time, yQB1);
+
+  flag = CVodeGetB(cvode_mem, indexB2, &time, yB2);
+  flag = CVodeGetQuadB(cvode_mem, indexB2, &time, yQB2);
+
+  printf("   dG/dp:  %12.4e %12.4e   (from backward pb. 1)\n", -Ith(yQB1,1), -Ith(yQB1,2));
+  printf("           %12.4e %12.4e   (from backward pb. 2)\n", -Ith(yQB2,1), -Ith(yQB2,2));
+  printf("\n");
+  printf("   H = d2G/dp2:\n");
+  printf("        (1)            (2)\n");
+  printf("  %12.4e   %12.4e\n", -Ith(yQB1,3) , -Ith(yQB2,3));
+  printf("  %12.4e   %12.4e\n", -Ith(yQB1,4) , -Ith(yQB2,4));
+  printf("\n");
+
+  printf("Final Statistics for backward pb. 1\n");
+  printf("-----------------------------------\n");
+  PrintBckStats(cvode_mem, indexB1);
+
+  printf("Final Statistics for backward pb. 2\n");
+  printf("-----------------------------------\n");
+  PrintBckStats(cvode_mem, indexB2);
+
+  /* Free CVODES memory */
+
+  CVodeFree(&cvode_mem);
+
+  /* Finite difference tests */
+
+  dp = RCONST(1.0e-2);
+
+  printf("-----------------------\n");
+  printf("Finite Difference tests\n");
+  printf("-----------------------\n\n");
+
+  printf("del_p = %g\n\n",dp);
+
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+
+  N_VConst(ONE, y);
+  N_VConst(ZERO, yQ);
+  flag = CVodeInit(cvode_mem, f, t0, y);
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  flag = CVodeSetUserData(cvode_mem, data);
+  flag = CVDense(cvode_mem, Neq);
+  flag = CVodeQuadInit(cvode_mem, fQ, yQ);
+  flag = CVodeQuadSStolerances(cvode_mem, reltol, abstolQ);
+  flag = CVodeSetQuadErrCon(cvode_mem, TRUE);
+
+  data->p1 += dp;
+
+  flag = CVode(cvode_mem, tf, y, &time, CV_NORMAL);
+  flag = CVodeGetQuad(cvode_mem, &time, yQ);
+  Gp = Ith(yQ,1);
+  printf("p1+  y:   %12.4e %12.4e %12.4e", Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("     G:   %12.4e\n",Ith(yQ,1));
+
+  data->p1 -= 2.0*dp;
+
+  N_VConst(ONE, y);
+  N_VConst(ZERO, yQ);
+  CVodeReInit(cvode_mem, t0, y);
+  CVodeQuadReInit(cvode_mem, yQ);
+  flag = CVode(cvode_mem, tf, y, &time, CV_NORMAL);
+  flag = CVodeGetQuad(cvode_mem, &time, yQ);
+  Gm = Ith(yQ,1);
+  printf("p1-  y:   %12.4e %12.4e %12.4e", Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("     G:   %12.4e\n",Ith(yQ,1));
+ 
+  data->p1 += dp;
+
+  grdG_fwd[0] = (Gp-G)/dp;
+  grdG_bck[0] = (G-Gm)/dp;
+  grdG_cntr[0] = (Gp-Gm)/(2.0*dp);
+  H11 = (Gp - 2.0*G + Gm) / (dp*dp);
+
+  data->p2 += dp;
+
+  N_VConst(ONE, y);
+  N_VConst(ZERO, yQ);
+  CVodeReInit(cvode_mem, t0, y);
+  CVodeQuadReInit(cvode_mem, yQ);
+  flag = CVode(cvode_mem, tf, y, &time, CV_NORMAL);
+  flag = CVodeGetQuad(cvode_mem, &time, yQ);
+  Gp = Ith(yQ,1);
+  printf("p2+  y:   %12.4e %12.4e %12.4e", Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("     G:   %12.4e\n",Ith(yQ,1));
+ 
+  data->p2 -= 2.0*dp;
+
+  N_VConst(ONE, y);
+  N_VConst(ZERO, yQ);
+  CVodeReInit(cvode_mem, t0, y);
+  CVodeQuadReInit(cvode_mem, yQ);
+  flag = CVode(cvode_mem, tf, y, &time, CV_NORMAL);
+  flag = CVodeGetQuad(cvode_mem, &time, yQ);
+  Gm = Ith(yQ,1);
+  printf("p2-  y:   %12.4e %12.4e %12.4e", Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("     G:   %12.4e\n",Ith(yQ,1));
+
+  data->p2 += dp;
+
+  grdG_fwd[1] = (Gp-G)/dp;
+  grdG_bck[1] = (G-Gm)/dp;
+  grdG_cntr[1] = (Gp-Gm)/(2.0*dp);
+  H22 = (Gp - 2.0*G + Gm) / (dp*dp);
+
+  printf("\n");
+
+  printf("   dG/dp:  %12.4e %12.4e   (fwd FD)\n", grdG_fwd[0], grdG_fwd[1]);
+  printf("           %12.4e %12.4e   (bck FD)\n", grdG_bck[0], grdG_bck[1]);
+  printf("           %12.4e %12.4e   (cntr FD)\n", grdG_cntr[0], grdG_cntr[1]);
+  printf("\n");
+  printf("  H(1,1):  %12.4e\n", H11);
+  printf("  H(2,2):  %12.4e\n", H22);
+
+
+  /* Free memory */
+
+  CVodeFree(&cvode_mem);
+
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(yQ);
+
+  N_VDestroyVectorArray_Serial(yS, Np);
+  N_VDestroyVectorArray_Serial(yQS, Np);
+
+  N_VDestroy_Serial(yB1);
+  N_VDestroy_Serial(yQB1);
+  N_VDestroy_Serial(yB2);
+  N_VDestroy_Serial(yQB2);
+
+  free(data);
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3;
+  UserData data;
+  realtype p1, p2;
+
+  data = (UserData) user_data;
+  p1 = data->p1; 
+  p2 = data->p2; 
+
+  y1 = Ith(y,1); 
+  y2 = Ith(y,2); 
+  y3 = Ith(y,3);
+
+  Ith(ydot,1) = -p1*y1*y1 - y3;
+  Ith(ydot,2) = -y2;
+  Ith(ydot,3) = -p2*p2*y2*y3;
+
+  return(0);
+}
+
+static int fQ(realtype t, N_Vector y, N_Vector qdot, void *user_data)
+{
+  realtype y1, y2, y3;
+
+  y1 = Ith(y,1); 
+  y2 = Ith(y,2); 
+  y3 = Ith(y,3);
+
+  Ith(qdot,1) = 0.5 * ( y1*y1 + y2*y2 + y3*y3 );
+
+  return(0);
+}
+
+static int fS(int Ns, realtype t,
+              N_Vector y, N_Vector ydot,
+              N_Vector *yS, N_Vector *ySdot,
+              void *user_data,
+              N_Vector tmp1, N_Vector tmp2)
+{
+  UserData data;
+  realtype y1, y2, y3;
+  realtype s1, s2, s3;
+  realtype fys1, fys2, fys3;
+  realtype p1, p2;
+
+  data = (UserData) user_data;
+  p1 = data->p1; 
+  p2 = data->p2; 
+
+  y1 = Ith(y,1); 
+  y2 = Ith(y,2); 
+  y3 = Ith(y,3);
+
+  /* 1st sensitivity RHS */
+
+  s1 = Ith(yS[0],1);
+  s2 = Ith(yS[0],2);
+  s3 = Ith(yS[0],3);
+
+  fys1 = - 2.0*p1*y1 * s1 - s3;
+  fys2 = - s2;
+  fys3 = - p2*p2*y3 * s2 - p2*p2*y2 * s3;
+
+  Ith(ySdot[0],1) = fys1 - y1*y1;
+  Ith(ySdot[0],2) = fys2;
+  Ith(ySdot[0],3) = fys3;
+
+  /* 2nd sensitivity RHS */
+
+  s1 = Ith(yS[1],1);
+  s2 = Ith(yS[1],2);
+  s3 = Ith(yS[1],3);
+
+  fys1 = - 2.0*p1*y1 * s1 - s3;
+  fys2 = - s2;
+  fys3 = - p2*p2*y3 * s2 - p2*p2*y2 * s3;
+
+  Ith(ySdot[1],1) = fys1;
+  Ith(ySdot[1],2) = fys2;
+  Ith(ySdot[1],3) = fys3 - 2.0*p2*y2*y3;
+
+  return(0);
+}
+
+static int fQS(int Ns, realtype t,
+               N_Vector y, N_Vector *yS, 
+               N_Vector yQdot, N_Vector *yQSdot,
+               void *user_data,
+               N_Vector tmp, N_Vector tmpQ)
+{
+  realtype y1, y2, y3;
+  realtype s1, s2, s3;
+
+  y1 = Ith(y,1); 
+  y2 = Ith(y,2); 
+  y3 = Ith(y,3);
+
+
+  /* 1st sensitivity RHS */
+
+  s1 = Ith(yS[0],1);
+  s2 = Ith(yS[0],2);
+  s3 = Ith(yS[0],3);
+
+  Ith(yQSdot[0],1) = y1*s1 + y2*s2 + y3*s3;
+
+
+  /* 1st sensitivity RHS */
+
+  s1 = Ith(yS[1],1);
+  s2 = Ith(yS[1],2);
+  s3 = Ith(yS[1],3);
+
+  Ith(yQSdot[1],1) = y1*s1 + y2*s2 + y3*s3;
+
+  return(0);
+}
+
+static int fB1(realtype t, N_Vector y, N_Vector *yS, 
+               N_Vector yB, N_Vector yBdot, void *user_dataB)
+{
+  UserData data;
+  realtype p1, p2;
+  realtype y1, y2, y3;  /* solution */
+  realtype s1, s2, s3;  /* sensitivity 1 */
+  realtype l1, l2, l3;  /* lambda */
+  realtype m1, m2, m3;  /* mu */
+  
+  data = (UserData) user_dataB;
+  p1 = data->p1; 
+  p2 = data->p2; 
+
+  y1 = Ith(y,1); 
+  y2 = Ith(y,2); 
+  y3 = Ith(y,3);
+  
+  s1 = Ith(yS[0],1); 
+  s2 = Ith(yS[0],2); 
+  s3 = Ith(yS[0],3);
+
+  l1 = Ith(yB,1); 
+  l2 = Ith(yB,2); 
+  l3 = Ith(yB,3);
+
+  m1 = Ith(yB,4); 
+  m2 = Ith(yB,5); 
+  m3 = Ith(yB,6);
+
+  
+  Ith(yBdot,1) = 2.0*p1*y1 * l1     - y1;
+  Ith(yBdot,2) = l2 + p2*p2*y3 * l3 - y2;
+  Ith(yBdot,3) = l1 + p2*p2*y2 * l3 - y3;
+
+  Ith(yBdot,4) = 2.0*p1*y1 * m1     + l1 * 2.0*(y1 + p1*s1) - s1;
+  Ith(yBdot,5) = m2 + p2*p2*y3 * m3 + l3 * p2*p2*s3         - s2;
+  Ith(yBdot,6) = m1 + p2*p2*y2 * m3 + l3 * p2*p2*s2         - s3;
+
+  return(0);
+}
+
+static int fQB1(realtype t, N_Vector y, N_Vector *yS,
+                N_Vector yB, N_Vector qBdot, void *user_dataB)
+{
+  UserData data;
+  realtype p1, p2;
+  realtype y1, y2, y3;  /* solution */
+  realtype s1, s2, s3;  /* sensitivity 1 */
+  realtype l1, l2, l3;  /* lambda */
+  realtype m1, m2, m3;  /* mu */
+  
+  data = (UserData) user_dataB;
+  p1 = data->p1; 
+  p2 = data->p2; 
+
+  y1 = Ith(y,1); 
+  y2 = Ith(y,2); 
+  y3 = Ith(y,3);
+  
+  s1 = Ith(yS[0],1); 
+  s2 = Ith(yS[0],2); 
+  s3 = Ith(yS[0],3);
+  
+  l1 = Ith(yB,1); 
+  l2 = Ith(yB,2); 
+  l3 = Ith(yB,3);
+
+  m1 = Ith(yB,4); 
+  m2 = Ith(yB,5); 
+  m3 = Ith(yB,6);
+
+  Ith(qBdot,1) = -y1*y1 * l1;
+  Ith(qBdot,2) = -2.0*p2*y2*y3 * l3;
+
+  Ith(qBdot,3) = -y1*y1 * m1        - l1 * 2.0*y1*s1;
+  Ith(qBdot,4) = -2.0*p2*y2*y3 * m3 - l3 * 2.0*(p2*y3*s2 + p2*y2*s3);
+
+  return(0);
+}
+
+
+
+
+static int fB2(realtype t, N_Vector y, N_Vector *yS, 
+               N_Vector yB, N_Vector yBdot, void *user_dataB)
+{
+  UserData data;
+  realtype p1, p2;
+  realtype y1, y2, y3;  /* solution */
+  realtype s1, s2, s3;  /* sensitivity 2 */
+  realtype l1, l2, l3;  /* lambda */
+  realtype m1, m2, m3;  /* mu */
+
+  data = (UserData) user_dataB;
+  p1 = data->p1; 
+  p2 = data->p2; 
+
+  y1 = Ith(y,1); 
+  y2 = Ith(y,2); 
+  y3 = Ith(y,3);
+  
+  s1 = Ith(yS[1],1); 
+  s2 = Ith(yS[1],2); 
+  s3 = Ith(yS[1],3);
+  
+  l1 = Ith(yB,1); 
+  l2 = Ith(yB,2); 
+  l3 = Ith(yB,3);
+
+  m1 = Ith(yB,4); 
+  m2 = Ith(yB,5); 
+  m3 = Ith(yB,6);
+
+  Ith(yBdot,1) = 2.0*p1*y1 * l1     - y1;
+  Ith(yBdot,2) = l2 + p2*p2*y3 * l3 - y2;
+  Ith(yBdot,3) = l1 + p2*p2*y2 * l3 - y3;
+
+  Ith(yBdot,4) = 2.0*p1*y1 * m1     + l1 * 2.0*p1*s1              - s1;
+  Ith(yBdot,5) = m2 + p2*p2*y3 * m3 + l3 * (2.0*p2*y3 + p2*p2*s3) - s2;
+  Ith(yBdot,6) = m1 + p2*p2*y2 * m3 + l3 * (2.0*p2*y2 + p2*p2*s2) - s3;
+
+
+  return(0);
+}
+
+
+static int fQB2(realtype t, N_Vector y, N_Vector *yS,
+                N_Vector yB, N_Vector qBdot, void *user_dataB)
+{
+  UserData data;
+  realtype p1, p2;
+  realtype y1, y2, y3;  /* solution */
+  realtype s1, s2, s3;  /* sensitivity 2 */
+  realtype l1, l2, l3;  /* lambda */
+  realtype m1, m2, m3;  /* mu */
+  
+  data = (UserData) user_dataB;
+  p1 = data->p1; 
+  p2 = data->p2; 
+
+  y1 = Ith(y,1); 
+  y2 = Ith(y,2); 
+  y3 = Ith(y,3);
+
+  s1 = Ith(yS[1],1); 
+  s2 = Ith(yS[1],2); 
+  s3 = Ith(yS[1],3);
+
+  l1 = Ith(yB,1); 
+  l2 = Ith(yB,2); 
+  l3 = Ith(yB,3);
+
+  m1 = Ith(yB,4); 
+  m2 = Ith(yB,5); 
+  m3 = Ith(yB,6);
+
+  Ith(qBdot,1) = -y1*y1 * l1;
+  Ith(qBdot,2) = -2.0*p2*y2*y3 * l3;
+
+  Ith(qBdot,3) = -y1*y1 * m1        - l1 * 2.0*y1*s1;
+  Ith(qBdot,4) = -2.0*p2*y2*y3 * m3 - l3 * 2.0*(p2*y3*s2 + p2*y2*s3 + y2*y3);
+
+  return(0);
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+void PrintFwdStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nfQe, netfQ;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  long int nfQSe, netfQS;
+
+  int qlast, qcur;
+  realtype h0u, hlast, hcur, tcur;
+
+  int flag;
+
+
+  flag = CVodeGetIntegratorStats(cvode_mem, &nst, &nfe, &nsetups, &netf, 
+                                 &qlast, &qcur,
+                                 &h0u, &hlast, &hcur,
+                                 &tcur);
+
+  flag = CVodeGetNonlinSolvStats(cvode_mem, &nni, &ncfn);
+
+  flag = CVodeGetQuadStats(cvode_mem, &nfQe, &netfQ);
+
+  flag = CVodeGetSensStats(cvode_mem, &nfSe, &nfeS, &netfS, &nsetupsS);
+
+  flag = CVodeGetSensNonlinSolvStats(cvode_mem, &nniS, &ncfnS);
+
+  flag = CVodeGetQuadSensStats(cvode_mem, &nfQSe, &netfQS);
+
+
+  printf(" Number steps: %5ld\n\n", nst);
+  printf(" Function evaluations:\n");
+  printf("  f:        %5ld\n  fQ:       %5ld\n  fS:       %5ld\n  fQS:      %5ld\n",
+         nfe, nfQe, nfSe, nfQSe);
+  printf(" Error test failures:\n");
+  printf("  netf:     %5ld\n  netfQ:    %5ld\n  netfS:    %5ld\n  netfQS:   %5ld\n",
+         netf, netfQ, netfS, netfQS);
+  printf(" Linear solver setups:\n");
+  printf("  nsetups:  %5ld\n  nsetupsS: %5ld\n", nsetups, nsetupsS);
+  printf(" Nonlinear iterations:\n");
+  printf("  nni:      %5ld\n  nniS:     %5ld\n", nni, nniS);
+  printf(" Convergence failures:\n");
+  printf("  ncfn:     %5ld\n  ncfnS:    %5ld\n", ncfn, ncfnS);
+
+  printf("\n");
+
+}
+
+
+void PrintBckStats(void *cvode_mem, int idx)
+{
+  void *cvode_mem_bck;
+
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nfQe, netfQ;
+
+  int qlast, qcur;
+  realtype h0u, hlast, hcur, tcur;
+
+  int flag;
+
+  cvode_mem_bck = CVodeGetAdjCVodeBmem(cvode_mem, idx);
+
+  flag = CVodeGetIntegratorStats(cvode_mem_bck, &nst, &nfe, &nsetups, &netf, 
+                                 &qlast, &qcur,
+                                 &h0u, &hlast, &hcur,
+                                 &tcur);
+
+  flag = CVodeGetNonlinSolvStats(cvode_mem_bck, &nni, &ncfn);
+
+  flag = CVodeGetQuadStats(cvode_mem_bck, &nfQe, &netfQ);
+
+  printf(" Number steps: %5ld\n\n", nst);
+  printf(" Function evaluations:\n");
+  printf("  f:        %5ld\n  fQ:       %5ld\n", nfe, nfQe);
+  printf(" Error test failures:\n");
+  printf("  netf:     %5ld\n  netfQ:    %5ld\n", netf, netfQ);
+  printf(" Linear solver setups:\n");
+  printf("  nsetups:  %5ld\n", nsetups);
+  printf(" Nonlinear iterations:\n");
+  printf("  nni:      %5ld\n", nni);
+  printf(" Convergence failures:\n");
+  printf("  ncfn:     %5ld\n", ncfn);
+
+  printf("\n");
+
+
+}
diff --git a/examples/cvodes/serial/cvsHessian_ASA_FSA.out b/examples/cvodes/serial/cvsHessian_ASA_FSA.out
new file mode 100644
index 0000000..2c4f4e6
--- /dev/null
+++ b/examples/cvodes/serial/cvsHessian_ASA_FSA.out
@@ -0,0 +1,100 @@
+-------------------
+Forward integration
+-------------------
+
+ncheck = 1
+
+     y:      2.2732e-01   1.3534e-01   3.1472e-02     G:      5.3088e-01
+
+     yS1:   -1.6714e-01   0.0000e+00   0.0000e+00
+     yS2:    2.1339e-01   0.0000e+00  -1.0885e-01
+
+   dG/dp:   -1.2838e-01   1.8037e-02
+
+Final Statistics for forward pb.
+--------------------------------
+ Number steps:   143
+
+ Function evaluations:
+  f:          167
+  fQ:         149
+  fS:         167
+  fQS:        149
+ Error test failures:
+  netf:         1
+  netfQ:        0
+  netfS:        0
+  netfQS:       2
+ Linear solver setups:
+  nsetups:     27
+  nsetupsS:     0
+ Nonlinear iterations:
+  nni:        163
+  nniS:         0
+ Convergence failures:
+  ncfn:         0
+  ncfnS:        0
+
+---------------------------------------------
+Backward integration ... (2 adjoint problems)
+---------------------------------------------
+
+   dG/dp:   -1.2838e-01   1.8036e-02   (from backward pb. 1)
+            -1.2838e-01   1.8036e-02   (from backward pb. 2)
+
+   H = d2G/dp2:
+        (1)            (2)
+    1.5628e-01    -7.8678e-02
+   -7.8678e-02     8.9814e-02
+
+Final Statistics for backward pb. 1
+-----------------------------------
+ Number steps:   102
+
+ Function evaluations:
+  f:          132
+  fQ:         112
+ Error test failures:
+  netf:         1
+  netfQ:        6
+ Linear solver setups:
+  nsetups:     25
+ Nonlinear iterations:
+  nni:        128
+ Convergence failures:
+  ncfn:         0
+
+Final Statistics for backward pb. 2
+-----------------------------------
+ Number steps:   115
+
+ Function evaluations:
+  f:          154
+  fQ:         122
+ Error test failures:
+  netf:         3
+  netfQ:        3
+ Linear solver setups:
+  nsetups:     23
+ Nonlinear iterations:
+  nni:        150
+ Convergence failures:
+  ncfn:         0
+
+-----------------------
+Finite Difference tests
+-----------------------
+
+del_p = 0.01
+
+p1+  y:     2.2566e-01   1.3534e-01   3.1472e-02     G:     5.2960e-01
+p1-  y:     2.2900e-01   1.3534e-01   3.1472e-02     G:     5.3217e-01
+p2+  y:     2.2943e-01   1.3534e-01   3.0399e-02     G:     5.3106e-01
+p2-  y:     2.2516e-01   1.3534e-01   3.2577e-02     G:     5.3070e-01
+
+   dG/dp:   -1.2760e-01   1.8476e-02   (fwd FD)
+            -1.2916e-01   1.7581e-02   (bck FD)
+            -1.2838e-01   1.8028e-02   (cntr FD)
+
+  H(1,1):    1.5594e-01
+  H(2,2):    8.9483e-02
diff --git a/examples/cvodes/serial/cvsKrylovDemo_ls.c b/examples/cvodes/serial/cvsKrylovDemo_ls.c
new file mode 100644
index 0000000..ec6f764
--- /dev/null
+++ b/examples/cvodes/serial/cvsKrylovDemo_ls.c
@@ -0,0 +1,729 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4849 $
+ * $Date: 2016-08-03 16:00:06 -0700 (Wed, 03 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ *
+ * This example loops through the available iterative linear solvers:
+ * SPGMR, SPBCG and SPTFQMR.
+ *
+ * Example problem:
+ *
+ * An ODE system is generated from the following 2-species diurnal
+ * kinetics advection-diffusion PDE system in 2 space dimensions:
+ *
+ * dc(i)/dt = Kh*(d/dx)^2 c(i) + V*dc(i)/dx + (d/dy)(Kv(y)*dc(i)/dy)
+ *                 + Ri(c1,c2,t)      for i = 1,2,   where
+ *   R1(c1,c2,t) = -q1*c1*c3 - q2*c1*c2 + 2*q3(t)*c3 + q4(t)*c2 ,
+ *   R2(c1,c2,t) =  q1*c1*c3 - q2*c1*c2 - q4(t)*c2 ,
+ *   Kv(y) = Kv0*exp(y/5) ,
+ * Kh, V, Kv0, q1, q2, and c3 are constants, and q3(t) and q4(t)
+ * vary diurnally. The problem is posed on the square
+ *   0 <= x <= 20,    30 <= y <= 50   (all in km),
+ * with homogeneous Neumann boundary conditions, and for time t in
+ *   0 <= t <= 86400 sec (1 day).
+ * The PDE system is treated by central differences on a uniform
+ * 10 x 10 mesh, with simple polynomial initial profiles.
+ * The problem is solved with CVODES, with the BDF/GMRES,
+ * BDF/Bi-CGStab, and BDF/TFQMR methods (i.e. using the CVSPGMR,
+ * CVSPBCG and CVSPTFQMR linear solvers) and the block-diagonal
+ * part of the Newton matrix as a left preconditioner. A copy of
+ * the block-diagonal part of the Jacobian is saved and
+ * conditionally reused within the Precond routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>           /* main integrator header file */
+#include <cvodes/cvodes_spgmr.h>     /* prototypes & constants for CVSPGMR solver */
+#include <cvodes/cvodes_spbcgs.h>    /* prototypes & constants for CVSPBCG solver */
+#include <cvodes/cvodes_sptfqmr.h>   /* prototypes & constants for CVSPTFQMR solver */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fct. and macros */
+#include <sundials/sundials_dense.h> /* use generic DENSE solver in preconditioning */
+#include <sundials/sundials_types.h> /* definition of realtype */
+#include <sundials/sundials_math.h>  /* contains the macros ABS, SUNSQR, and EXP */
+
+/* Problem Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+#define NUM_SPECIES  2                 /* number of species         */
+#define KH           RCONST(4.0e-6)    /* horizontal diffusivity Kh */
+#define VEL          RCONST(0.001)     /* advection velocity V      */
+#define KV0          RCONST(1.0e-8)    /* coefficient in Kv(y)      */
+#define Q1           RCONST(1.63e-16)  /* coefficients q1, q2, c3   */ 
+#define Q2           RCONST(4.66e-16)
+#define C3           RCONST(3.7e16)
+#define A3           RCONST(22.62)     /* coefficient in expression for q3(t) */
+#define A4           RCONST(7.601)     /* coefficient in expression for q4(t) */
+#define C1_SCALE     RCONST(1.0e6)     /* coefficients in initial profiles    */
+#define C2_SCALE     RCONST(1.0e12)
+
+#define T0           ZERO                 /* initial time */
+#define NOUT         12                   /* number of output times */
+#define TWOHR        RCONST(7200.0)       /* number of seconds in two hours  */
+#define HALFDAY      RCONST(4.32e4)       /* number of seconds in a half day */
+#define PI       RCONST(3.1415926535898)  /* pi */ 
+
+#define XMIN         ZERO                 /* grid boundaries in x  */
+#define XMAX         RCONST(20.0)           
+#define YMIN         RCONST(30.0)         /* grid boundaries in y  */
+#define YMAX         RCONST(50.0)
+#define XMID         RCONST(10.0)         /* grid midpoints in x,y */          
+#define YMID         RCONST(40.0)
+
+#define MX           10             /* MX = number of x mesh points */
+#define MY           10             /* MY = number of y mesh points */
+#define NSMX         20             /* NSMX = NUM_SPECIES*MX */
+#define MM           (MX*MY)        /* MM = MX*MY */
+
+/* CVodeInit Constants */
+
+#define RTOL    RCONST(1.0e-5)    /* scalar relative tolerance */
+#define FLOOR   RCONST(100.0)     /* value of C1 or C2 at which tolerances */
+                                  /* change from relative to absolute      */
+#define ATOL    (RTOL*FLOOR)      /* scalar absolute tolerance */
+#define NEQ     (NUM_SPECIES*MM)  /* NEQ = number of equations */
+
+/* Linear Solver Loop Constants */
+
+#define USE_SPGMR   0
+#define USE_SPBCG   1
+#define USE_SPTFQMR 2
+
+/* User-defined vector and matrix accessor macros: IJKth, IJth */
+
+/* IJKth is defined in order to isolate the translation from the
+   mathematical 3-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. IJth is defined in order to
+   write code which indexes into dense matrices with a (row,column)
+   pair, where 1 <= row, column <= NUM_SPECIES.   
+   
+   IJKth(vdata,i,j,k) references the element in the vdata array for
+   species i at mesh point (j,k), where 1 <= i <= NUM_SPECIES,
+   0 <= j <= MX-1, 0 <= k <= MY-1. The vdata array is obtained via
+   the macro call vdata = N_VGetArrayPointer_Serial(v), where v is an N_Vector. 
+   For each mesh point (j,k), the elements for species i and i+1 are
+   contiguous within vdata.
+
+   IJth(a,i,j) references the (i,j)th entry of the matrix realtype **a,
+   where 1 <= i,j <= NUM_SPECIES. The small matrix routines in 
+   sundials_dense.h work with matrices stored by column in a 2-dimensional 
+   array. In C, arrays are indexed starting at 0, not 1. */
+
+#define IJKth(vdata,i,j,k) (vdata[i-1 + (j)*NUM_SPECIES + (k)*NSMX])
+#define IJth(a,i,j)        (a[j-1][i-1])
+
+/* Type : UserData 
+   contains preconditioner blocks, pivot arrays, and problem constants */
+
+typedef struct {
+  realtype **P[MX][MY], **Jbd[MX][MY];
+  long int *pivot[MX][MY];
+  realtype q4, om, dx, dy, hdco, haco, vdco;
+} *UserData;
+
+/* Private Helper Functions */
+
+static UserData AllocUserData(void);
+static void InitUserData(UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy);
+static void PrintOutput(void *cvode_mem, N_Vector u, realtype t);
+static void PrintFinalStats(void *cvode_mem, int linsolver);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data);
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, realtype gamma,
+                   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main(void)
+{
+  realtype abstol, reltol, t, tout;
+  N_Vector u;
+  UserData data;
+  void *cvode_mem;
+  int linsolver, iout, flag;
+
+  u = NULL;
+  data = NULL;
+  cvode_mem = NULL;
+
+  /* Allocate memory, and set problem data, initial values, tolerances */ 
+  u = N_VNew_Serial(NEQ);
+  if(check_flag((void *)u, "N_VNew_Serial", 0)) return(1);
+  data = AllocUserData();
+  if(check_flag((void *)data, "AllocUserData", 2)) return(1);
+  InitUserData(data);
+  SetInitialProfiles(u, data->dx, data->dy);
+  abstol=ATOL; 
+  reltol=RTOL;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Set the pointer to user-defined data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in u'=f(t,u), the inital time T0, and
+   * the initial dependent variable vector u. */
+  flag = CVodeInit(cvode_mem, f, T0, u);
+  if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSStolerances to specify the scalar relative tolerance
+   * and scalar absolute tolerances */
+  flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+  /* START: Loop through SPGMR, SPBCG and SPTFQMR linear solver modules */
+  for (linsolver = 0; linsolver < 3; ++linsolver) {
+
+    if (linsolver != 0) {
+
+      /* Re-initialize user data */
+      InitUserData(data);
+      SetInitialProfiles(u, data->dx, data->dy);
+
+    /* Re-initialize CVode for the solution of the same problem, but
+       using a different linear solver module */
+      flag = CVodeReInit(cvode_mem, T0, u);
+      if (check_flag(&flag, "CVodeReInit", 1)) return(1);
+
+    }
+
+    /* Attach a linear solver module */
+    switch(linsolver) {
+
+    /* (a) SPGMR */
+    case(USE_SPGMR):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPGMR |\n");
+      printf(" -------\n");
+
+      /* Call CVSpgmr to specify the linear solver CVSPGMR 
+	 with left preconditioning and the maximum Krylov dimension maxl */
+      flag = CVSpgmr(cvode_mem, PREC_LEFT, 0);
+      if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+
+      break;
+
+    /* (b) SPBCG */
+    case(USE_SPBCG):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPBCG |\n");
+      printf(" -------\n");
+
+      /* Call CVSpbcg to specify the linear solver CVSPBCG 
+	 with left preconditioning and the maximum Krylov dimension maxl */
+      flag = CVSpbcg(cvode_mem, PREC_LEFT, 0);
+      if(check_flag(&flag, "CVSpbcg", 1)) return(1);
+
+      break;
+
+    /* (c) SPTFQMR */
+    case(USE_SPTFQMR):
+
+      /* Print header */
+      printf(" ---------");
+      printf(" \n| SPTFQMR |\n");
+      printf(" ---------\n");
+
+      /* Call CVSptfqmr to specify the linear solver CVSPTFQMR 
+	 with left preconditioning and the maximum Krylov dimension maxl */
+      flag = CVSptfqmr(cvode_mem, PREC_LEFT, 0);
+      if(check_flag(&flag, "CVSptfqmr", 1)) return(1);
+
+      break;
+
+    }
+
+
+    /* Set preconditioner setup and solve routines Precond and PSolve. */
+    flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+    if(check_flag(&flag, "CVSpilsSetPreconditioner", 1)) return(1);
+
+    /* In loop over output points, call CVode, print results, test for error */
+    printf(" \n2-species diurnal advection-diffusion problem\n\n");
+    for (iout=1, tout = TWOHR; iout <= NOUT; iout++, tout += TWOHR) {
+      flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL);
+      PrintOutput(cvode_mem, u, t);
+      if(check_flag(&flag, "CVode", 1)) break;
+    }
+
+    PrintFinalStats(cvode_mem, linsolver);
+
+  }  /* END: Loop through SPGMR, SPBCG and SPTFQMR linear solver modules */
+
+  /* Free memory */
+  N_VDestroy_Serial(u);
+  FreeUserData(data);
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+/* Allocate memory for data structure of type UserData */
+
+static UserData AllocUserData(void)
+{
+  int jx, jy;
+  UserData data;
+
+  data = (UserData) malloc(sizeof *data);
+
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      (data->P)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->Jbd)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+    }
+  }
+
+  return(data);
+}
+
+/* Load problem constants in data */
+
+static void InitUserData(UserData data)
+{
+  data->om = PI/HALFDAY;
+  data->dx = (XMAX-XMIN)/(MX-1);
+  data->dy = (YMAX-YMIN)/(MY-1);
+  data->hdco = KH/SUNSQR(data->dx);
+  data->haco = VEL/(TWO*data->dx);
+  data->vdco = (ONE/SUNSQR(data->dy))*KV0;
+}
+
+/* Free data memory */
+
+static void FreeUserData(UserData data)
+{
+  int jx, jy;
+
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      destroyMat((data->P)[jx][jy]);
+      destroyMat((data->Jbd)[jx][jy]);
+      destroyArray((data->pivot)[jx][jy]);
+    }
+  }
+
+  free(data);
+}
+
+/* Set initial conditions in u */
+
+static void SetInitialProfiles(N_Vector u, realtype dx, realtype dy)
+{
+  int jx, jy;
+  realtype x, y, cx, cy;
+  realtype *udata;
+
+  /* Set pointer to data array in vector u. */
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  /* Load initial profiles of c1 and c2 into u vector */
+
+  for (jy=0; jy < MY; jy++) {
+    y = YMIN + jy*dy;
+    cy = SUNSQR(RCONST(0.1)*(y - YMID));
+    cy = ONE - cy + RCONST(0.5)*SUNSQR(cy);
+    for (jx=0; jx < MX; jx++) {
+      x = XMIN + jx*dx;
+      cx = SUNSQR(RCONST(0.1)*(x - XMID));
+      cx = ONE - cx + RCONST(0.5)*SUNSQR(cx);
+      IJKth(udata,1,jx,jy) = C1_SCALE*cx*cy; 
+      IJKth(udata,2,jx,jy) = C2_SCALE*cx*cy;
+    }
+  }
+}
+
+/* Print current t, step count, order, stepsize, and sampled c1,c2 values */
+
+static void PrintOutput(void *cvode_mem, N_Vector u, realtype t)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  int mxh = MX/2 - 1, myh = MY/2 - 1, mx1 = MX - 1, my1 = MY - 1;
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("t = %.2Le   no. steps = %ld   order = %d   stepsize = %.2Le\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3Le  %12.3Le  %12.3Le\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#else
+  printf("t = %.2e   no. steps = %ld   order = %d   stepsize = %.2e\n",
+         t, nst, qu, hu);
+  printf("c1 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n",
+         IJKth(udata,1,0,0), IJKth(udata,1,mxh,myh), IJKth(udata,1,mx1,my1));
+  printf("c2 (bot.left/middle/top rt.) = %12.3e  %12.3e  %12.3e\n\n",
+         IJKth(udata,2,0,0), IJKth(udata,2,mxh,myh), IJKth(udata,2,mx1,my1));
+#endif
+}
+
+/* Get and print final statistics */
+
+static void PrintFinalStats(void *cvode_mem, int linsolver)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics.. \n\n");
+  printf("lenrw   = %5ld     leniw   = %5ld\n", lenrw, leniw);
+  printf("lenrwLS = %5ld     leniwLS = %5ld\n", lenrwLS, leniwLS);
+  printf("nst     = %5ld\n"                  , nst);
+  printf("nfe     = %5ld     nfeLS   = %5ld\n"  , nfe, nfeLS);
+  printf("nni     = %5ld     nli     = %5ld\n"  , nni, nli);
+  printf("nsetups = %5ld     netf    = %5ld\n"  , nsetups, netf);
+  printf("npe     = %5ld     nps     = %5ld\n"  , npe, nps);
+  printf("ncfn    = %5ld     ncfl    = %5ld\n\n", ncfn, ncfl);
+
+  if (linsolver < 2)
+    printf("======================================================================\n\n");
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/* f routine. Compute RHS function f(t,u). */
+
+static int f(realtype t, N_Vector u, N_Vector udot, void *user_data)
+{
+  realtype q3, c1, c2, c1dn, c2dn, c1up, c2up, c1lt, c2lt;
+  realtype c1rt, c2rt, cydn, cyup, hord1, hord2, horad1, horad2;
+  realtype qq1, qq2, qq3, qq4, rkin1, rkin2, s, vertd1, vertd2, ydn, yup;
+  realtype q4coef, dely, verdco, hordco, horaco;
+  realtype *udata, *dudata;
+  int jx, jy, idn, iup, ileft, iright;
+  UserData data;
+
+  data = (UserData) user_data;
+  udata = N_VGetArrayPointer_Serial(u);
+  dudata = N_VGetArrayPointer_Serial(udot);
+
+  /* Set diurnal rate coefficients. */
+
+  s = sin(data->om*t);
+  if (s > ZERO) {
+    q3 = SUNRexp(-A3/s);
+    data->q4 = SUNRexp(-A4/s);
+  } else {
+      q3 = ZERO;
+      data->q4 = ZERO;
+  }
+
+  /* Make local copies of problem variables, for efficiency. */
+
+  q4coef = data->q4;
+  dely = data->dy;
+  verdco = data->vdco;
+  hordco  = data->hdco;
+  horaco  = data->haco;
+
+  /* Loop over all grid points. */
+
+  for (jy=0; jy < MY; jy++) {
+
+    /* Set vertical diffusion coefficients at jy +- 1/2 */
+
+    ydn = YMIN + (jy - RCONST(0.5))*dely;
+    yup = ydn + dely;
+    cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+    cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+    idn = (jy == 0) ? 1 : -1;
+    iup = (jy == MY-1) ? -1 : 1;
+    for (jx=0; jx < MX; jx++) {
+
+      /* Extract c1 and c2, and set kinetic rate terms. */
+
+      c1 = IJKth(udata,1,jx,jy); 
+      c2 = IJKth(udata,2,jx,jy);
+      qq1 = Q1*c1*C3;
+      qq2 = Q2*c1*c2;
+      qq3 = q3*C3;
+      qq4 = q4coef*c2;
+      rkin1 = -qq1 - qq2 + TWO*qq3 + qq4;
+      rkin2 = qq1 - qq2 - qq4;
+
+      /* Set vertical diffusion terms. */
+
+      c1dn = IJKth(udata,1,jx,jy+idn);
+      c2dn = IJKth(udata,2,jx,jy+idn);
+      c1up = IJKth(udata,1,jx,jy+iup);
+      c2up = IJKth(udata,2,jx,jy+iup);
+      vertd1 = cyup*(c1up - c1) - cydn*(c1 - c1dn);
+      vertd2 = cyup*(c2up - c2) - cydn*(c2 - c2dn);
+
+      /* Set horizontal diffusion and advection terms. */
+
+      ileft = (jx == 0) ? 1 : -1;
+      iright =(jx == MX-1) ? -1 : 1;
+      c1lt = IJKth(udata,1,jx+ileft,jy); 
+      c2lt = IJKth(udata,2,jx+ileft,jy);
+      c1rt = IJKth(udata,1,jx+iright,jy);
+      c2rt = IJKth(udata,2,jx+iright,jy);
+      hord1 = hordco*(c1rt - TWO*c1 + c1lt);
+      hord2 = hordco*(c2rt - TWO*c2 + c2lt);
+      horad1 = horaco*(c1rt - c1lt);
+      horad2 = horaco*(c2rt - c2lt);
+
+      /* Load all terms into udot. */
+
+      IJKth(dudata, 1, jx, jy) = vertd1 + hord1 + horad1 + rkin1; 
+      IJKth(dudata, 2, jx, jy) = vertd2 + hord2 + horad2 + rkin2;
+    }
+  }
+
+  return(0);
+}
+
+/* Preconditioner setup routine. Generate and preprocess P. */
+
+static int Precond(realtype tn, N_Vector u, N_Vector fu,
+                   booleantype jok, booleantype *jcurPtr, realtype gamma,
+                   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3)
+{
+  realtype c1, c2, cydn, cyup, diag, ydn, yup, q4coef, dely, verdco, hordco;
+  realtype **(*P)[MY], **(*Jbd)[MY];
+  long int *(*pivot)[MY], ier;
+  int jx, jy;
+  realtype *udata, **a, **j;
+  UserData data;
+  
+  /* Make local copies of pointers in user_data, and of pointer to u's data */
+  
+  data = (UserData) user_data;
+  P = data->P;
+  Jbd = data->Jbd;
+  pivot = data->pivot;
+  udata = N_VGetArrayPointer_Serial(u);
+  
+  if (jok) {
+    
+    /* jok = TRUE: Copy Jbd to P */
+    
+    for (jy=0; jy < MY; jy++)
+      for (jx=0; jx < MX; jx++)
+        denseCopy(Jbd[jx][jy], P[jx][jy], NUM_SPECIES, NUM_SPECIES);
+    
+    *jcurPtr = FALSE;
+    
+  }
+  
+  else {
+    /* jok = FALSE: Generate Jbd from scratch and copy to P */
+    
+    /* Make local copies of problem variables, for efficiency. */
+    
+    q4coef = data->q4;
+    dely = data->dy;
+    verdco = data->vdco;
+    hordco  = data->hdco;
+    
+    /* Compute 2x2 diagonal Jacobian blocks (using q4 values 
+       computed on the last f call).  Load into P. */
+    
+    for (jy=0; jy < MY; jy++) {
+      ydn = YMIN + (jy - RCONST(0.5))*dely;
+      yup = ydn + dely;
+      cydn = verdco*SUNRexp(RCONST(0.2)*ydn);
+      cyup = verdco*SUNRexp(RCONST(0.2)*yup);
+      diag = -(cydn + cyup + TWO*hordco);
+      for (jx=0; jx < MX; jx++) {
+        c1 = IJKth(udata,1,jx,jy);
+        c2 = IJKth(udata,2,jx,jy);
+        j = Jbd[jx][jy];
+        a = P[jx][jy];
+        IJth(j,1,1) = (-Q1*C3 - Q2*c2) + diag;
+        IJth(j,1,2) = -Q2*c1 + q4coef;
+        IJth(j,2,1) = Q1*C3 - Q2*c2;
+        IJth(j,2,2) = (-Q2*c1 - q4coef) + diag;
+        denseCopy(j, a, NUM_SPECIES, NUM_SPECIES);
+      }
+    }
+    
+    *jcurPtr = TRUE;
+    
+  }
+  
+  /* Scale by -gamma */
+  
+  for (jy=0; jy < MY; jy++)
+    for (jx=0; jx < MX; jx++)
+      denseScale(-gamma, P[jx][jy], NUM_SPECIES, NUM_SPECIES);
+  
+  /* Add identity matrix and do LU decompositions on blocks in place. */
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      denseAddIdentity(P[jx][jy], NUM_SPECIES);
+      ier =denseGETRF(P[jx][jy], NUM_SPECIES, NUM_SPECIES, pivot[jx][jy]);
+      if (ier != 0) return(1);
+    }
+  }
+  
+  return(0);
+}
+
+/* Preconditioner solve routine */
+
+static int PSolve(realtype tn, N_Vector u, N_Vector fu,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype **(*P)[MY];
+  long int *(*pivot)[MY];
+  int jx, jy;
+  realtype *zdata, *v;
+  UserData data;
+
+  /* Extract the P and pivot arrays from user_data. */
+
+  data = (UserData) user_data;
+  P = data->P;
+  pivot = data->pivot;
+  zdata = N_VGetArrayPointer_Serial(z);
+  
+  N_VScale(ONE, r, z);
+  
+  /* Solve the block-diagonal system Px = r using LU factors stored
+     in P and pivot data in pivot, and return the solution in z. */
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      v = &(IJKth(zdata, 1, jx, jy));
+      denseGETRS(P[jx][jy], NUM_SPECIES, pivot[jx][jy], v);
+    }
+  }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsKrylovDemo_ls.out b/examples/cvodes/serial/cvsKrylovDemo_ls.out
new file mode 100644
index 0000000..5e386da
--- /dev/null
+++ b/examples/cvodes/serial/cvsKrylovDemo_ls.out
@@ -0,0 +1,202 @@
+ ------- 
+| SPGMR |
+ -------
+ 
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 219   order = 5   stepsize = 1.59e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 251   order = 5   stepsize = 3.77e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 277   order = 5   stepsize = 2.75e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 301   order = 5   stepsize = 3.87e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 343   order = 3   stepsize = 2.34e+01
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 421   order = 4   stepsize = 5.26e+02
+c1 (bot.left/middle/top rt.) =   -4.385e-06    -1.528e-06    -4.905e-06
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 445   order = 3   stepsize = 1.98e+02
+c1 (bot.left/middle/top rt.) =    4.461e-07     1.869e-07     4.842e-07
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 462   order = 5   stepsize = 2.35e+02
+c1 (bot.left/middle/top rt.) =    3.204e-09     1.203e-09     3.555e-09
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 474   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =   -1.066e-09    -3.409e-10    -1.206e-09
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 486   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =    2.614e-09     9.722e-10     2.904e-09
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 498   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =    4.649e-11     1.729e-11     5.161e-11
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 510   order = 5   stepsize = 6.02e+02
+c1 (bot.left/middle/top rt.) =   -8.856e-14    -3.348e-14    -9.785e-14
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.107e+11     4.163e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2096     leniw   =    62
+lenrwLS =  2046     leniwLS =    10
+nst     =   510
+nfe     =   675     nfeLS   =   641
+nni     =   671     nli     =   641
+nsetups =    94     netf    =    36
+npe     =     9     nps     =  1243
+ncfn    =     0     ncfl    =     0
+
+======================================================================
+
+ ------- 
+| SPBCG |
+ -------
+ 
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 190   order = 5   stepsize = 1.58e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 222   order = 5   stepsize = 3.81e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 246   order = 5   stepsize = 4.34e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 282   order = 4   stepsize = 1.71e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 317   order = 5   stepsize = 9.48e+01
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 369   order = 4   stepsize = 5.46e+02
+c1 (bot.left/middle/top rt.) =   -1.286e-09    -1.138e-09    -1.297e-09
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 385   order = 4   stepsize = 3.54e+02
+c1 (bot.left/middle/top rt.) =    3.396e-14     2.448e-11    -2.220e-14
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 399   order = 5   stepsize = 3.72e+02
+c1 (bot.left/middle/top rt.) =    1.607e-14    -1.589e-11     2.156e-13
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 410   order = 5   stepsize = 6.46e+02
+c1 (bot.left/middle/top rt.) =   -3.759e-13    -7.684e-12    -3.258e-13
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 421   order = 5   stepsize = 6.46e+02
+c1 (bot.left/middle/top rt.) =   -9.205e-14    -1.287e-11     2.328e-13
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 433   order = 5   stepsize = 6.46e+02
+c1 (bot.left/middle/top rt.) =   -3.952e-21     9.479e-19    -3.924e-20
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 444   order = 5   stepsize = 6.46e+02
+c1 (bot.left/middle/top rt.) =    1.131e-26    -2.041e-22    -7.893e-29
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.107e+11     4.163e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2096     leniw   =    62
+lenrwLS =  1800     leniwLS =     9
+nst     =   444
+nfe     =   573     nfeLS   =   968
+nni     =   569     nli     =   484
+nsetups =    76     netf    =    27
+npe     =     8     nps     =  1457
+ncfn    =     0     ncfl    =     0
+
+======================================================================
+
+ --------- 
+| SPTFQMR |
+ ---------
+ 
+2-species diurnal advection-diffusion problem
+
+t = 7.20e+03   no. steps = 218   order = 5   stepsize = 1.44e+02
+c1 (bot.left/middle/top rt.) =    1.047e+04     2.964e+04     1.119e+04
+c2 (bot.left/middle/top rt.) =    2.527e+11     7.154e+11     2.700e+11
+
+t = 1.44e+04   no. steps = 250   order = 5   stepsize = 3.27e+02
+c1 (bot.left/middle/top rt.) =    6.659e+06     5.316e+06     7.301e+06
+c2 (bot.left/middle/top rt.) =    2.582e+11     2.057e+11     2.833e+11
+
+t = 2.16e+04   no. steps = 275   order = 5   stepsize = 3.49e+02
+c1 (bot.left/middle/top rt.) =    2.665e+07     1.036e+07     2.931e+07
+c2 (bot.left/middle/top rt.) =    2.993e+11     1.028e+11     3.313e+11
+
+t = 2.88e+04   no. steps = 309   order = 4   stepsize = 1.92e+02
+c1 (bot.left/middle/top rt.) =    8.702e+06     1.292e+07     9.650e+06
+c2 (bot.left/middle/top rt.) =    3.380e+11     5.029e+11     3.751e+11
+
+t = 3.60e+04   no. steps = 337   order = 5   stepsize = 1.24e+02
+c1 (bot.left/middle/top rt.) =    1.404e+04     2.029e+04     1.561e+04
+c2 (bot.left/middle/top rt.) =    3.387e+11     4.894e+11     3.765e+11
+
+t = 4.32e+04   no. steps = 388   order = 4   stepsize = 5.10e+02
+c1 (bot.left/middle/top rt.) =    9.865e-08     1.252e-05     1.407e-07
+c2 (bot.left/middle/top rt.) =    3.382e+11     1.355e+11     3.804e+11
+
+t = 5.04e+04   no. steps = 405   order = 4   stepsize = 2.84e+02
+c1 (bot.left/middle/top rt.) =   -1.668e-09     5.311e-07    -6.632e-09
+c2 (bot.left/middle/top rt.) =    3.358e+11     4.930e+11     3.864e+11
+
+t = 5.76e+04   no. steps = 419   order = 5   stepsize = 5.07e+02
+c1 (bot.left/middle/top rt.) =   -1.792e-09     6.186e-07    -7.318e-09
+c2 (bot.left/middle/top rt.) =    3.320e+11     9.650e+11     3.909e+11
+
+t = 6.48e+04   no. steps = 431   order = 5   stepsize = 7.73e+02
+c1 (bot.left/middle/top rt.) =    1.682e-11    -9.299e-09     8.107e-11
+c2 (bot.left/middle/top rt.) =    3.313e+11     8.922e+11     3.963e+11
+
+t = 7.20e+04   no. steps = 441   order = 5   stepsize = 7.73e+02
+c1 (bot.left/middle/top rt.) =    1.919e-15    -3.196e-13     6.625e-15
+c2 (bot.left/middle/top rt.) =    3.330e+11     6.186e+11     4.039e+11
+
+t = 7.92e+04   no. steps = 450   order = 5   stepsize = 7.73e+02
+c1 (bot.left/middle/top rt.) =    2.380e-19    -4.543e-16     1.071e-18
+c2 (bot.left/middle/top rt.) =    3.334e+11     6.669e+11     4.120e+11
+
+t = 8.64e+04   no. steps = 459   order = 5   stepsize = 7.73e+02
+c1 (bot.left/middle/top rt.) =   -8.763e-21     5.632e-16    -4.431e-21
+c2 (bot.left/middle/top rt.) =    3.352e+11     9.107e+11     4.163e+11
+
+
+Final Statistics.. 
+
+lenrw   =  2096     leniw   =    62
+lenrwLS =  2200     leniwLS =    11
+nst     =   459
+nfe     =   582     nfeLS   =  1248
+nni     =   578     nli     =   520
+nsetups =    71     netf    =    23
+npe     =     8     nps     =  1910
+ncfn    =     0     ncfl    =     0
+
diff --git a/examples/cvodes/serial/cvsKrylovDemo_prec.c b/examples/cvodes/serial/cvsKrylovDemo_prec.c
new file mode 100644
index 0000000..a640118
--- /dev/null
+++ b/examples/cvodes/serial/cvsKrylovDemo_prec.c
@@ -0,0 +1,1141 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4868 $
+ * $Date: 2016-08-19 10:16:31 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * --------------------------------------------------------------------
+ * Demonstration program for CVODES - Krylov linear solver.
+ * ODE system from ns-species interaction PDE in 2 dimensions.
+ * 
+ * This program solves a stiff ODE system that arises from a system
+ * of partial differential equations. The PDE system is a food web
+ * population model, with predator-prey interaction and diffusion on
+ * the unit square in two dimensions. The dependent variable vector is:
+ *
+ *        1   2        ns
+ *  c = (c , c , ..., c  )
+ *
+ * and the PDEs are as follows:
+ *
+ *    i               i      i
+ *  dc /dt  =  d(i)*(c    + c   )  +  f (x,y,c)  (i=1,...,ns)
+ *                    xx     yy        i   
+ *
+ * where
+ *
+ *                 i          ns         j
+ *  f (x,y,c)  =  c *(b(i) + sum a(i,j)*c )
+ *   i                       j=1                                         
+ *                                                                       
+ * The number of species is ns = 2*np, with the first np being prey
+ * and the last np being predators. The coefficients a(i,j), b(i),
+ * d(i) are:
+ *
+ *  a(i,i) = -a  (all i)
+ *  a(i,j) = -g  (i <= np, j > np)
+ *  a(i,j) =  e  (i > np, j <= np)
+ *  b(i) =  b*(1 + alpha*x*y)  (i <= np)
+ *  b(i) = -b*(1 + alpha*x*y)  (i > np)
+ *  d(i) = Dprey  (i <= np)
+ *  d(i) = Dpred  (i > np)
+ *
+ * The spatial domain is the unit square. The final time is 10.
+ * The boundary conditions are: normal derivative = 0.
+ * A polynomial in x and y is used to set the initial conditions.
+ *
+ * The PDEs are discretized by central differencing on an MX by MY mesh.
+ *
+ * The resulting ODE system is stiff.
+ *
+ * The ODE system is solved using Newton iteration and the CVSPGMR
+ * linear solver (scaled preconditioned GMRES).
+ *
+ * The preconditioner matrix used is the product of two matrices:
+ * (1) A matrix, only defined implicitly, based on a fixed number
+ * of Gauss-Seidel iterations using the diffusion terms only.
+ * (2) A block-diagonal matrix based on the partial derivatives
+ * of the interaction terms f only, using block-grouping (computing
+ * only a subset of the ns by ns blocks).
+ *
+ * Four different runs are made for this problem.
+ * The product preconditoner is applied on the left and on the
+ * right. In each case, both the modified and classical Gram-Schmidt
+ * options are tested.
+ * In the series of runs, CVodeInit and CVSpgmr are called only
+ * for the first run, whereas CVodeReInit and CVReInitSpgmr are
+ * called for each of the remaining three runs.
+ *
+ * A problem description, performance statistics at selected output
+ * times, and final statistics are written to standard output.
+ * On the first run, solution values are also printed at output
+ * times. Error and warning messages are written to standard error,
+ * but there should be no such messages.
+ *
+ * Note: This program requires the dense linear solver functions
+ * newDenseMat, newLintArray, denseAddIdentity, denseGETRF, denseGETRS, 
+ * destroyMat and destroyArray.
+ *
+ * Note: This program assumes the sequential implementation for the
+ * type N_Vector and uses the N_VGetArrayPointer_Serial function to 
+ * gain access to the contiguous array of components of an N_Vector.
+ * --------------------------------------------------------------------
+ * Reference: Peter N. Brown and Alan C. Hindmarsh, Reduced Storage
+ * Matrix Methods in Stiff ODE Systems, J. Appl. Math. & Comp., 31
+ * (1989), pp. 40-91.  Also available as Lawrence Livermore National
+ * Laboratory Report UCRL-95088, Rev. 1, June 1987.
+ * --------------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <cvodes/cvodes.h>           /* main integrator header file */
+#include <cvodes/cvodes_spgmr.h>     /* prototypes & constants for CVSPGMR solver */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fct. and macros */
+#include <sundials/sundials_dense.h> /* use generic DENSE solver in preconditioning */
+#include <sundials/sundials_types.h> /* definition of realtype */
+#include <sundials/sundials_math.h>  /* contains the macros ABS and SUNSQR */
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Problem Specification Constants */
+
+#define AA    ONE               /* AA = a */
+#define EE    RCONST(1.0e4)     /* EE = e */
+#define GG    RCONST(0.5e-6)    /* GG = g */
+#define BB    ONE               /* BB = b */
+#define DPREY ONE
+#define DPRED RCONST(0.5)
+#define ALPH  ONE
+#define NP    3
+#define NS    (2*NP)
+
+/* Method Constants */
+
+#define MX    6
+#define MY    6
+#define MXNS  (MX*NS)
+#define AX    ONE
+#define AY    ONE
+#define DX    (AX/(realtype)(MX-1))
+#define DY    (AY/(realtype)(MY-1))
+#define MP    NS
+#define MQ    (MX*MY)
+#define MXMP  (MX*MP)
+#define NGX   2
+#define NGY   2
+#define NGRP  (NGX*NGY)
+#define ITMAX 5
+
+/* CVodeInit Constants */
+
+#define NEQ  (NS*MX*MY)
+#define T0   ZERO
+#define RTOL RCONST(1.0e-5)
+#define ATOL RCONST(1.0e-5)
+
+/* CVSpgmr Constants */
+
+#define MAXL 0     /* => use default = MIN(NEQ, 5)            */
+#define DELT ZERO  /* => use default = 0.05                   */
+
+/* Output Constants */
+
+#define T1        RCONST(1.0e-8)
+#define TOUT_MULT RCONST(10.0)
+#define DTOUT     ONE
+#define NOUT      18
+
+/* Note: The value for species i at mesh point (j,k) is stored in */
+/* component number (i-1) + j*NS + k*NS*MX of an N_Vector,        */
+/* where 1 <= i <= NS, 0 <= j < MX, 0 <= k < MY.                  */
+
+/* Structure for user data */
+
+typedef struct {
+  realtype **P[NGRP];
+  long int *pivot[NGRP];
+  int ns, mxns;
+  int mp, mq, mx, my, ngrp, ngx, ngy, mxmp;
+  int jgx[NGX+1], jgy[NGY+1], jigx[MX], jigy[MY];
+  int jxr[NGX], jyr[NGY];
+  realtype acoef[NS][NS], bcoef[NS], diff[NS];
+  realtype cox[NS], coy[NS], dx, dy, srur;
+  realtype fsave[NEQ];
+  N_Vector rewt;
+  void *cvode_mem;
+} *WebData;
+
+/* Private Helper Functions */
+
+static WebData AllocUserData(void);
+static void InitUserData(WebData wdata);
+static void SetGroups(int m, int ng, int jg[], int jig[], int jr[]);
+static void CInit(N_Vector c, WebData wdata);
+static void PrintIntro(void);
+static void PrintHeader(int jpre, int gstype);
+static void PrintAllSpecies(N_Vector c, int ns, int mxns, realtype t);
+static void PrintOutput(void *cvode_mem, realtype t);
+static void PrintFinalStats(void *cvode_mem);
+static void FreeUserData(WebData wdata);
+static void WebRates(realtype x, realtype y, realtype t, realtype c[],
+		     realtype rate[], WebData wdata);
+static void fblock (realtype t, realtype cdata[], int jx, int jy,
+		    realtype cdotdata[], WebData wdata);
+static void GSIter(realtype gamma, N_Vector z, N_Vector x,WebData wdata);
+
+/* Small Vector Kernels */
+
+static void v_inc_by_prod(realtype u[], realtype v[], realtype w[], int n);
+static void v_sum_prods(realtype u[], realtype p[], realtype q[], realtype v[],
+                        realtype w[], int n);
+static void v_prod(realtype u[], realtype v[], realtype w[], int n);
+static void v_zero(realtype u[], int n);
+
+/* Functions Called By The Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int Precond(realtype tn, N_Vector c, N_Vector fc,
+		   booleantype jok, booleantype *jcurPtr, realtype gamma,
+		   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3);
+
+static int PSolve(realtype tn, N_Vector c, N_Vector fc,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Implementation */
+
+int main()
+{
+  realtype abstol=ATOL, reltol=RTOL, t, tout;
+  N_Vector c;
+  WebData wdata;
+  void *cvode_mem;
+  booleantype firstrun;
+  int jpre, gstype, flag;
+  int ns, mxns, iout;
+
+  c = NULL;
+  wdata = NULL;
+  cvode_mem = NULL;
+
+  /* Initializations */
+  c = N_VNew_Serial(NEQ);
+  if(check_flag((void *)c, "N_VNew_Serial", 0)) return(1);
+  wdata = AllocUserData();
+  if(check_flag((void *)wdata, "AllocUserData", 2)) return(1);
+  InitUserData(wdata);
+  ns = wdata->ns;
+  mxns = wdata->mxns;
+
+  /* Print problem description */
+  PrintIntro();
+
+  /* Loop over jpre and gstype (four cases) */
+  for (jpre = PREC_LEFT; jpre <= PREC_RIGHT; jpre++) {
+    for (gstype = MODIFIED_GS; gstype <= CLASSICAL_GS; gstype++) {
+      
+      /* Initialize c and print heading */
+      CInit(c, wdata);
+      PrintHeader(jpre, gstype);
+
+      /* Call CVodeInit or CVodeReInit, then CVSpgmr to set up problem */
+      
+      firstrun = (jpre == PREC_LEFT) && (gstype == MODIFIED_GS);
+      if (firstrun) {
+        cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+        if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+        wdata->cvode_mem = cvode_mem;
+
+        flag = CVodeSetUserData(cvode_mem, wdata);
+        if(check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+        flag = CVodeInit(cvode_mem, f, T0, c);
+        if(check_flag(&flag, "CVodeInit", 1)) return(1);
+
+        flag = CVodeSStolerances(cvode_mem, reltol, abstol);
+        if (check_flag(&flag, "CVodeSStolerances", 1)) return(1);
+
+        flag = CVSpgmr(cvode_mem, jpre, MAXL);
+        if(check_flag(&flag, "CVSpgmr", 1)) return(1);
+
+        flag = CVSpilsSetGSType(cvode_mem, gstype);
+        if(check_flag(&flag, "CVSpilsSetGSType", 1)) return(1);
+
+        flag = CVSpilsSetEpsLin(cvode_mem, DELT);
+        if(check_flag(&flag, "CVSpilsSetEpsLin", 1)) return(1);
+
+        flag = CVSpilsSetPreconditioner(cvode_mem, Precond, PSolve);
+        if(check_flag(&flag, "CVSpilsSetPreconditioner", 1)) return(1);
+
+      } else {
+
+        flag = CVodeReInit(cvode_mem, T0, c);
+        if(check_flag(&flag, "CVodeReInit", 1)) return(1);
+
+        flag = CVSpilsSetPrecType(cvode_mem, jpre);
+        check_flag(&flag, "CVSpilsSetPrecType", 1);
+        flag = CVSpilsSetGSType(cvode_mem, gstype);
+        if(check_flag(&flag, "CVSpilsSetGSType", 1)) return(1);
+
+      }
+      
+      /* Print initial values */
+      if (firstrun) PrintAllSpecies(c, ns, mxns, T0);
+      
+      /* Loop over output points, call CVode, print sample solution values. */
+      tout = T1;
+      for (iout = 1; iout <= NOUT; iout++) {
+        flag = CVode(cvode_mem, tout, c, &t, CV_NORMAL);
+        PrintOutput(cvode_mem, t);
+        if (firstrun && (iout % 3 == 0)) PrintAllSpecies(c, ns, mxns, t);
+        if(check_flag(&flag, "CVode", 1)) break;
+        if (tout > RCONST(0.9)) tout += DTOUT; else tout *= TOUT_MULT; 
+      }
+      
+      /* Print final statistics, and loop for next case */
+      PrintFinalStats(cvode_mem);
+      
+    }
+  }
+
+  /* Free all memory */
+  CVodeFree(&cvode_mem);
+  N_VDestroy_Serial(c);
+  FreeUserData(wdata);
+
+  return(0);
+}
+
+static WebData AllocUserData(void)
+{
+  int i, ngrp = NGRP;
+  long int ns = NS;
+  WebData wdata;
+  
+  wdata = (WebData) malloc(sizeof *wdata);
+  for(i=0; i < ngrp; i++) {
+    (wdata->P)[i] = newDenseMat(ns, ns);
+    (wdata->pivot)[i] = newLintArray(ns);
+  }
+  wdata->rewt = N_VNew_Serial(NEQ);
+  return(wdata);
+}
+
+static void InitUserData(WebData wdata)
+{
+  int i, j, ns;
+  realtype *bcoef, *diff, *cox, *coy, dx, dy;
+  realtype (*acoef)[NS];
+  
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+  diff = wdata->diff;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  ns = wdata->ns = NS;
+  
+  for (j = 0; j < NS; j++) { for (i = 0; i < NS; i++) acoef[i][j] = 0.; }
+  for (j = 0; j < NP; j++) {
+    for (i = 0; i < NP; i++) {
+      acoef[NP+i][j] = EE;
+      acoef[i][NP+j] = -GG;
+    }
+    acoef[j][j] = -AA;
+    acoef[NP+j][NP+j] = -AA;
+    bcoef[j] = BB;
+    bcoef[NP+j] = -BB;
+    diff[j] = DPREY;
+    diff[NP+j] = DPRED;
+  }
+
+  /* Set remaining problem parameters */
+
+  wdata->mxns = MXNS;
+  dx = wdata->dx = DX;
+  dy = wdata->dy = DY;
+  for (i = 0; i < ns; i++) {
+    cox[i] = diff[i]/SUNSQR(dx);
+    coy[i] = diff[i]/SUNSQR(dy);
+  }
+
+  /* Set remaining method parameters */
+
+  wdata->mp = MP;
+  wdata->mq = MQ;
+  wdata->mx = MX;
+  wdata->my = MY;
+  wdata->srur = SUNRsqrt(UNIT_ROUNDOFF);
+  wdata->mxmp = MXMP;
+  wdata->ngrp = NGRP;
+  wdata->ngx = NGX;
+  wdata->ngy = NGY;
+  SetGroups(MX, NGX, wdata->jgx, wdata->jigx, wdata->jxr);
+  SetGroups(MY, NGY, wdata->jgy, wdata->jigy, wdata->jyr);
+}
+
+/*
+ This routine sets arrays jg, jig, and jr describing
+ a uniform partition of (0,1,2,...,m-1) into ng groups.
+ The arrays set are:
+   jg    = length ng+1 array of group boundaries.
+           Group ig has indices j = jg[ig],...,jg[ig+1]-1.
+   jig   = length m array of group indices vs node index.
+           Node index j is in group jig[j].
+   jr    = length ng array of indices representing the groups.
+           The index for group ig is j = jr[ig].
+*/
+static void SetGroups(int m, int ng, int jg[], int jig[], int jr[])
+{
+  int ig, j, len1, mper, ngm1;
+
+  mper = m/ng; /* does integer division */
+  for (ig=0; ig < ng; ig++) jg[ig] = ig*mper;
+  jg[ng] = m;
+  
+  ngm1 = ng - 1;
+  len1 = ngm1*mper;
+  for (j = 0; j < len1; j++) jig[j] = j/mper;
+  for (j = len1; j < m; j++) jig[j] = ngm1;
+
+  for (ig = 0; ig < ngm1; ig++) jr[ig] = ((2*ig+1)*mper-1)/2;
+  jr[ngm1] = (ngm1*mper+m-1)/2;
+}
+
+/* This routine computes and loads the vector of initial values. */
+static void CInit(N_Vector c, WebData wdata)
+{
+  int jx, jy, ns, mxns, ioff, iyoff, i, ici;
+  realtype argx, argy, x, y, dx, dy, x_factor, y_factor, *cdata;
+  
+  cdata = N_VGetArrayPointer_Serial(c);
+  ns = wdata->ns;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+
+  x_factor = RCONST(4.0)/SUNSQR(AX);
+  y_factor = RCONST(4.0)/SUNSQR(AY);
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    argy = SUNSQR(y_factor*y*(AY-y));
+    iyoff = mxns*jy;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      argx = SUNSQR(x_factor*x*(AX-x));
+      ioff = iyoff + ns*jx;
+      for (i = 1; i <= ns; i++) {
+        ici = ioff + i-1;
+        cdata[ici] = RCONST(10.0) + i*argx*argy;
+      }
+    }
+  }
+}
+
+static void PrintIntro(void)
+{
+  printf("\n\nDemonstration program for CVODES - CVSPGMR linear solver\n\n");
+  printf("Food web problem with ns species, ns = %d\n", NS);
+  printf("Predator-prey interaction and diffusion on a 2-D square\n\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Matrix parameters: a = %.2Lg   e = %.2Lg   g = %.2Lg\n",
+         AA, EE, GG);
+  printf("b parameter = %.2Lg\n", BB);
+  printf("Diffusion coefficients: Dprey = %.2Lg   Dpred = %.2Lg\n",
+         DPREY, DPRED);
+  printf("Rate parameter alpha = %.2Lg\n\n", ALPH);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Matrix parameters: a = %.2g   e = %.2g   g = %.2g\n",
+         AA, EE, GG);
+  printf("b parameter = %.2g\n", BB);
+  printf("Diffusion coefficients: Dprey = %.2g   Dpred = %.2g\n",
+         DPREY, DPRED);
+  printf("Rate parameter alpha = %.2g\n\n", ALPH);
+#else
+  printf("Matrix parameters: a = %.2g   e = %.2g   g = %.2g\n",
+         AA, EE, GG);
+  printf("b parameter = %.2g\n", BB);
+  printf("Diffusion coefficients: Dprey = %.2g   Dpred = %.2g\n",
+         DPREY, DPRED);
+  printf("Rate parameter alpha = %.2g\n\n", ALPH);
+#endif
+  printf("Mesh dimensions (mx,my) are %d, %d.  ", MX, MY);
+  printf("Total system size is neq = %d \n\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerances: reltol = %.2Lg, abstol = %.2Lg \n\n",
+         RTOL, ATOL);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerances: reltol = %.2g, abstol = %.2g \n\n",
+         RTOL, ATOL);
+#else
+  printf("Tolerances: reltol = %.2g, abstol = %.2g \n\n",
+         RTOL, ATOL);
+#endif
+  printf("Preconditioning uses a product of:\n");
+  printf("  (1) Gauss-Seidel iterations with ");
+  printf("itmax = %d iterations, and\n", ITMAX);
+  printf("  (2) interaction-only block-diagonal matrix ");
+  printf("with block-grouping\n");
+  printf("  Number of diagonal block groups = ngrp = %d", NGRP);
+  printf("  (ngx by ngy, ngx = %d, ngy = %d)\n", NGX, NGY);
+  printf("\n\n--------------------------------------------------------------");
+  printf("--------------\n");
+}
+
+static void PrintHeader(int jpre, int gstype)
+{
+  if(jpre == PREC_LEFT)
+    printf("\n\nPreconditioner type is           jpre = %s\n", "PREC_LEFT");
+  else
+    printf("\n\nPreconditioner type is           jpre = %s\n", "PREC_RIGHT");
+
+  if(gstype == MODIFIED_GS)
+    printf("\nGram-Schmidt method type is    gstype = %s\n\n\n", "MODIFIED_GS");
+  else
+    printf("\nGram-Schmidt method type is    gstype = %s\n\n\n", "CLASSICAL_GS");
+}
+
+static void PrintAllSpecies(N_Vector c, int ns, int mxns, realtype t)
+{
+  int i, jx ,jy;
+  realtype *cdata;
+  
+  cdata = N_VGetArrayPointer_Serial(c);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("c values at t = %Lg:\n\n", t);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("c values at t = %g:\n\n", t);
+#else
+  printf("c values at t = %g:\n\n", t);
+#endif
+  for (i=1; i <= ns; i++) {
+    printf("Species %d\n", i);
+    for (jy=MY-1; jy >= 0; jy--) {
+      for (jx=0; jx < MX; jx++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+        printf("%-10.6Lg", cdata[(i-1) + jx*ns + jy*mxns]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+        printf("%-10.6g", cdata[(i-1) + jx*ns + jy*mxns]);
+#else
+        printf("%-10.6g", cdata[(i-1) + jx*ns + jy*mxns]);
+#endif
+      }
+      printf("\n");
+    }
+    printf("\n");
+  }
+}
+
+static void PrintOutput(void *cvode_mem, realtype t)
+{
+  long int nst, nfe, nni;
+  int qu, flag;
+  realtype hu;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("t = %10.2Le  nst = %ld  nfe = %ld  nni = %ld", t, nst, nfe, nni);
+  printf("  qu = %d  hu = %11.2Le\n\n", qu, hu);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("t = %10.2e  nst = %ld  nfe = %ld  nni = %ld", t, nst, nfe, nni);
+  printf("  qu = %d  hu = %11.2e\n\n", qu, hu);
+#else
+  printf("t = %10.2e  nst = %ld  nfe = %ld  nni = %ld", t, nst, nfe, nni);
+  printf("  qu = %d  hu = %11.2e\n\n", qu, hu);
+#endif
+}
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int lenrw, leniw ;
+  long int lenrwLS, leniwLS;
+  long int nst, nfe, nsetups, nni, ncfn, netf;
+  long int nli, npe, nps, ncfl, nfeLS;
+  int flag;
+  realtype avdim;
+  
+  flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw);
+  check_flag(&flag, "CVodeGetWorkSpace", 1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSpilsGetWorkSpace(cvode_mem, &lenrwLS, &leniwLS);
+  check_flag(&flag, "CVSpilsGetWorkSpace", 1);
+  flag = CVSpilsGetNumLinIters(cvode_mem, &nli);
+  check_flag(&flag, "CVSpilsGetNumLinIters", 1);
+  flag = CVSpilsGetNumPrecEvals(cvode_mem, &npe);
+  check_flag(&flag, "CVSpilsGetNumPrecEvals", 1);
+  flag = CVSpilsGetNumPrecSolves(cvode_mem, &nps);
+  check_flag(&flag, "CVSpilsGetNumPrecSolves", 1);
+  flag = CVSpilsGetNumConvFails(cvode_mem, &ncfl);
+  check_flag(&flag, "CVSpilsGetNumConvFails", 1);
+  flag = CVSpilsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVSpilsGetNumRhsEvals", 1);
+
+  printf("\n\n Final statistics for this run:\n\n");
+  printf(" CVode real workspace length           = %4ld \n", lenrw);
+  printf(" CVode integer workspace length        = %4ld \n", leniw);
+  printf(" CVSPGMR real workspace length         = %4ld \n", lenrwLS);
+  printf(" CVSPGMR integer workspace length      = %4ld \n", leniwLS);
+  printf(" Number of steps                       = %4ld \n", nst);
+  printf(" Number of f-s                         = %4ld \n", nfe);
+  printf(" Number of f-s (SPGMR)                 = %4ld \n", nfeLS);
+  printf(" Number of f-s (TOTAL)                 = %4ld \n", nfe + nfeLS);
+  printf(" Number of setups                      = %4ld \n", nsetups);
+  printf(" Number of nonlinear iterations        = %4ld \n", nni);
+  printf(" Number of linear iterations           = %4ld \n", nli);
+  printf(" Number of preconditioner evaluations  = %4ld \n", npe);
+  printf(" Number of preconditioner solves       = %4ld \n", nps);
+  printf(" Number of error test failures         = %4ld \n", netf);
+  printf(" Number of nonlinear conv. failures    = %4ld \n", ncfn);
+  printf(" Number of linear convergence failures = %4ld \n", ncfl);
+  avdim = (nni > 0) ? ((realtype)nli)/((realtype)nni) : ZERO;
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf(" Average Krylov subspace dimension     = %.3Lf \n", avdim);
+#else
+  printf(" Average Krylov subspace dimension     = %.3f \n", avdim);
+#endif
+  printf("\n\n--------------------------------------------------------------");
+  printf("--------------\n");
+  printf(    "--------------------------------------------------------------");
+  printf("--------------\n");
+}
+
+static void FreeUserData(WebData wdata)
+{
+  int i, ngrp;
+
+  ngrp = wdata->ngrp;
+  for(i=0; i < ngrp; i++) {
+    destroyMat((wdata->P)[i]);
+    destroyArray((wdata->pivot)[i]);
+  }
+  N_VDestroy_Serial(wdata->rewt);
+  free(wdata);
+}
+
+/*
+ This routine computes the right-hand side of the ODE system and
+ returns it in cdot. The interaction rates are computed by calls to WebRates,
+ and these are saved in fsave for use in preconditioning.
+*/
+static int f(realtype t, N_Vector c, N_Vector cdot,void *user_data)
+{
+  int i, ic, ici, idxl, idxu, jx, ns, mxns, iyoff, jy, idyu, idyl;
+  realtype dcxli, dcxui, dcyli, dcyui, x, y, *cox, *coy, *fsave, dx, dy;
+  realtype *cdata, *cdotdata;
+  WebData wdata;
+  
+  wdata = (WebData) user_data;
+  cdata = N_VGetArrayPointer_Serial(c);
+  cdotdata = N_VGetArrayPointer_Serial(cdot);
+  
+  mxns = wdata->mxns;
+  ns = wdata->ns;
+  fsave = wdata->fsave;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  mxns = wdata->mxns;
+  dx = wdata->dx;
+  dy = wdata->dy;
+  
+  for (jy = 0; jy < MY; jy++) {
+    y = jy*dy;
+    iyoff = mxns*jy;
+    idyu = (jy == MY-1) ? -mxns : mxns;
+    idyl = (jy == 0) ? -mxns : mxns;
+    for (jx = 0; jx < MX; jx++) {
+      x = jx*dx;
+      ic = iyoff + ns*jx;
+      /* Get interaction rates at one point (x,y). */
+      WebRates(x, y, t, cdata+ic, fsave+ic, wdata);
+      idxu = (jx == MX-1) ? -ns : ns;
+      idxl = (jx == 0) ? -ns : ns;
+      for (i = 1; i <= ns; i++) {
+        ici = ic + i-1;
+        /* Do differencing in y. */
+        dcyli = cdata[ici] - cdata[ici-idyl];
+        dcyui = cdata[ici+idyu] - cdata[ici];
+        /* Do differencing in x. */
+        dcxli = cdata[ici] - cdata[ici-idxl];
+        dcxui = cdata[ici+idxu] - cdata[ici];
+        /* Collect terms and load cdot elements. */
+        cdotdata[ici] = coy[i-1]*(dcyui - dcyli) + cox[i-1]*(dcxui - dcxli) +
+          fsave[ici];
+      }
+    }
+  }
+
+  return(0);
+}
+
+/*
+  This routine computes the interaction rates for the species
+  c_1, ... ,c_ns (stored in c[0],...,c[ns-1]), at one spatial point 
+  and at time t.
+*/
+static void WebRates(realtype x, realtype y, realtype t, realtype c[],
+                     realtype rate[], WebData wdata)
+{
+  int i, j, ns;
+  realtype fac, *bcoef;
+  realtype (*acoef)[NS];
+  
+  ns = wdata->ns;
+  acoef = wdata->acoef;
+  bcoef = wdata->bcoef;
+  
+  for (i = 0; i < ns; i++)
+    rate[i] = ZERO;
+  
+  for (j = 0; j < ns; j++) 
+    for (i = 0; i < ns; i++) 
+      rate[i] += c[j] * acoef[i][j];
+  
+  fac = ONE + ALPH*x*y;
+  for (i = 0; i < ns; i++) 
+    rate[i] = c[i]*(bcoef[i]*fac + rate[i]);
+}
+
+/*
+ This routine generates the block-diagonal part of the Jacobian
+ corresponding to the interaction rates, multiplies by -gamma, adds
+ the identity matrix, and calls denseGETRF to do the LU decomposition of
+ each diagonal block. The computation of the diagonal blocks uses
+ the preset block and grouping information. One block per group is
+ computed. The Jacobian elements are generated by difference
+ quotients using calls to the routine fblock.
+
+ This routine can be regarded as a prototype for the general case
+ of a block-diagonal preconditioner. The blocks are of size mp, and
+ there are ngrp=ngx*ngy blocks computed in the block-grouping scheme.
+*/ 
+static int Precond(realtype t, N_Vector c, N_Vector fc,
+		   booleantype jok, booleantype *jcurPtr, realtype gamma,
+		   void *user_data, N_Vector vtemp1, N_Vector vtemp2,
+                   N_Vector vtemp3)
+{
+  realtype ***P;
+  long int **pivot, ier;
+  int i, if0, if00, ig, igx, igy, j, jj, jx, jy;
+  int *jxr, *jyr, ngrp, ngx, ngy, mxmp, flag;
+  long int mp;
+  realtype uround, fac, r, r0, save, srur;
+  realtype *f1, *fsave, *cdata, *rewtdata;
+  WebData wdata;
+  void *cvode_mem;
+  N_Vector rewt;
+  
+  wdata = (WebData) user_data;
+  cvode_mem = wdata->cvode_mem;
+  cdata = N_VGetArrayPointer_Serial(c);
+  rewt = wdata->rewt;
+  flag = CVodeGetErrWeights(cvode_mem, rewt);
+  if(check_flag(&flag, "CVodeGetErrWeights", 1)) return(1);
+  rewtdata = N_VGetArrayPointer_Serial(rewt);
+
+  uround = UNIT_ROUNDOFF;
+
+  P = wdata->P;
+  pivot = wdata->pivot;
+  jxr = wdata->jxr;
+  jyr = wdata->jyr;
+  mp = wdata->mp;
+  srur = wdata->srur;
+  ngrp = wdata->ngrp;
+  ngx = wdata->ngx;
+  ngy = wdata->ngy;
+  mxmp = wdata->mxmp;
+  fsave = wdata->fsave;
+  
+  /* Make mp calls to fblock to approximate each diagonal block of Jacobian.
+     Here, fsave contains the base value of the rate vector and 
+     r0 is a minimum increment factor for the difference quotient. */
+  
+  f1 = N_VGetArrayPointer_Serial(vtemp1);
+  
+  fac = N_VWrmsNorm (fc, rewt);
+  r0 = RCONST(1000.0)*SUNRabs(gamma)*uround*NEQ*fac;
+  if (r0 == ZERO) r0 = ONE;
+  
+  for (igy = 0; igy < ngy; igy++) {
+    jy = jyr[igy];
+    if00 = jy*mxmp;
+    for (igx = 0; igx < ngx; igx++) { 
+      jx = jxr[igx];
+      if0 = if00 + jx*mp;
+      ig = igx + igy*ngx; 
+      /* Generate ig-th diagonal block */
+      for (j = 0; j < mp; j++) {
+        /* Generate the jth column as a difference quotient */
+        jj = if0 + j; 
+        save = cdata[jj];
+        r = SUNMAX(srur*SUNRabs(save),r0/rewtdata[jj]);
+        cdata[jj] += r;
+        fac = -gamma/r;
+        fblock (t, cdata, jx, jy, f1, wdata);
+        for (i = 0; i < mp; i++) {
+          P[ig][j][i] = (f1[i] - fsave[if0+i])*fac;
+        }
+        cdata[jj] = save;
+      }
+    }
+  }
+  
+  /* Add identity matrix and do LU decompositions on blocks. */
+  
+  for (ig = 0; ig < ngrp; ig++) {
+    denseAddIdentity(P[ig], mp);
+    ier = denseGETRF(P[ig], mp, mp, pivot[ig]);
+    if (ier != 0) return(1);
+  }
+  
+  *jcurPtr = TRUE;
+  return(0);
+}
+
+/*
+  This routine computes one block of the interaction terms of the
+  system, namely block (jx,jy), for use in preconditioning.
+  Here jx and jy count from 0.
+*/
+static void fblock(realtype t, realtype cdata[], int jx, int jy,
+                   realtype cdotdata[], WebData wdata)
+{
+  int iblok, ic;
+  realtype x, y;
+  
+  iblok = jx + jy*(wdata->mx);
+  y = jy*(wdata->dy);
+  x = jx*(wdata->dx);
+  ic = (wdata->ns)*(iblok);
+  WebRates(x, y, t, cdata+ic, cdotdata, wdata);
+}
+
+/*
+  This routine applies two inverse preconditioner matrices
+  to the vector r, using the interaction-only block-diagonal Jacobian
+  with block-grouping, denoted Jr, and Gauss-Seidel applied to the
+  diffusion contribution to the Jacobian, denoted Jd.
+  It first calls GSIter for a Gauss-Seidel approximation to
+  ((I - gamma*Jd)-inverse)*r, and stores the result in z.
+  Then it computes ((I - gamma*Jr)-inverse)*z, using LU factors of the
+  blocks in P, and pivot information in pivot, and returns the result in z.
+*/
+static int PSolve(realtype tn, N_Vector c, N_Vector fc,
+                  N_Vector r, N_Vector z,
+                  realtype gamma, realtype delta,
+                  int lr, void *user_data, N_Vector vtemp)
+{
+  realtype   ***P;
+  long int **pivot;
+  int jx, jy, igx, igy, iv, ig, *jigx, *jigy, mx, my, ngx;
+  long int mp;
+  WebData wdata;
+  
+  wdata = (WebData) user_data;
+  
+  N_VScale(ONE, r, z);
+  
+  /* call GSIter for Gauss-Seidel iterations */
+  
+  GSIter(gamma, z, vtemp, wdata);
+  
+  /* Do backsolves for inverse of block-diagonal preconditioner factor */
+  
+  P = wdata->P;
+  pivot = wdata->pivot;
+  mx = wdata->mx;
+  my = wdata->my;
+  ngx = wdata->ngx;
+  mp = wdata->mp;
+  jigx = wdata->jigx;
+  jigy = wdata->jigy;
+  
+  iv = 0;
+  for (jy = 0; jy < my; jy++) {
+    igy = jigy[jy];
+    for (jx = 0; jx < mx; jx++) {
+      igx = jigx[jx];
+      ig = igx + igy*ngx;
+      denseGETRS(P[ig], mp, pivot[ig], &(N_VGetArrayPointer_Serial(z)[iv]));
+      iv += mp;
+    }
+  }
+  
+  return(0);
+}
+
+/*
+  This routine performs ITMAX=5 Gauss-Seidel iterations to compute an
+  approximation to (P-inverse)*z, where P = I - gamma*Jd, and
+  Jd represents the diffusion contributions to the Jacobian.
+  The answer is stored in z on return, and x is a temporary vector.
+  The dimensions below assume a global constant NS >= ns.
+  Some inner loops of length ns are implemented with the small
+  vector kernels v_sum_prods, v_prod, v_inc_by_prod.
+*/
+static void GSIter(realtype gamma, N_Vector z, N_Vector x, WebData wdata)
+{
+  int jx, jy, mx, my, x_loc, y_loc;
+  int ns, mxns, i, iyoff, ic, iter;
+  realtype beta[NS], beta2[NS], cof1[NS], gam[NS], gam2[NS];
+  realtype temp, *cox, *coy, *xd, *zd;
+  
+  xd = N_VGetArrayPointer_Serial(x);
+  zd = N_VGetArrayPointer_Serial(z);
+  ns = wdata->ns;
+  mx = wdata->mx;
+  my = wdata->my;
+  mxns = wdata->mxns;
+  cox = wdata->cox;
+  coy = wdata->coy;
+  
+  /* Write matrix as P = D - L - U.
+     Load local arrays beta, beta2, gam, gam2, and cof1. */
+  
+  for (i = 0; i < ns; i++) {
+    temp = ONE/(ONE + RCONST(2.0)*gamma*(cox[i] + coy[i]));
+    beta[i] = gamma*cox[i]*temp;
+    beta2[i] = RCONST(2.0)*beta[i];
+    gam[i] = gamma*coy[i]*temp;
+    gam2[i] = RCONST(2.0)*gam[i];
+    cof1[i] = temp;
+  }
+  
+  /* Begin iteration loop.
+     Load vector x with (D-inverse)*z for first iteration. */
+  
+  for (jy = 0; jy < my; jy++) {
+    iyoff = mxns*jy;
+    for (jx = 0; jx < mx; jx++) {
+      ic = iyoff + ns*jx;
+      v_prod(xd+ic, cof1, zd+ic, ns); /* x[ic+i] = cof1[i]z[ic+i] */
+    }
+  }
+  N_VConst(ZERO, z);
+  
+  /* Looping point for iterations. */
+  
+  for (iter=1; iter <= ITMAX; iter++) {
+    
+    /* Calculate (D-inverse)*U*x if not the first iteration. */
+    
+    if (iter > 1) {
+      for (jy=0; jy < my; jy++) {
+        iyoff = mxns*jy;
+        for (jx=0; jx < mx; jx++) { /* order of loops matters */
+          ic = iyoff + ns*jx;
+          x_loc = (jx == 0) ? 0 : ((jx == mx-1) ? 2 : 1);
+          y_loc = (jy == 0) ? 0 : ((jy == my-1) ? 2 : 1);
+          switch (3*y_loc+x_loc) {
+          case 0 : 
+            /* jx == 0, jy == 0 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] + gam2[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta2, xd+ic+ns, gam2, xd+ic+mxns, ns);
+            break;
+          case 1 : 
+            /* 1 <= jx <= mx-2, jy == 0 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] + gam2[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta, xd+ic+ns, gam2, xd+ic+mxns, ns);
+            break;
+          case 2 : 
+            /* jx == mx-1, jy == 0 */
+            /* x[ic+i] = gam2[i]x[ic+mxns+i] */
+            v_prod(xd+ic, gam2, xd+ic+mxns, ns);
+            break;
+          case 3 : 
+            /* jx == 0, 1 <= jy <= my-2 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] + gam[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta2, xd+ic+ns, gam, xd+ic+mxns, ns);
+            break;
+          case 4 : 
+            /* 1 <= jx <= mx-2, 1 <= jy <= my-2 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] + gam[i]x[ic+mxns+i] */
+            v_sum_prods(xd+ic, beta, xd+ic+ns, gam, xd+ic+mxns, ns);
+            break;
+          case 5 : 
+            /* jx == mx-1, 1 <= jy <= my-2 */
+            /* x[ic+i] = gam[i]x[ic+mxns+i] */
+            v_prod(xd+ic, gam, xd+ic+mxns, ns);
+            break;
+          case 6 : 
+            /* jx == 0, jy == my-1 */
+            /* x[ic+i] = beta2[i]x[ic+ns+i] */
+            v_prod(xd+ic, beta2, xd+ic+ns, ns);
+            break;
+          case 7 : 
+            /* 1 <= jx <= mx-2, jy == my-1 */
+            /* x[ic+i] = beta[i]x[ic+ns+i] */
+            v_prod(xd+ic, beta, xd+ic+ns, ns);
+            break;
+          case 8 : 
+            /* jx == mx-1, jy == my-1 */
+            /* x[ic+i] = 0.0 */
+            v_zero(xd+ic, ns);
+            break;
+          }
+        }
+      }
+    }  /* end if (iter > 1) */
+    
+    /* Overwrite x with [(I - (D-inverse)*L)-inverse]*x. */
+    
+    for (jy=0; jy < my; jy++) {
+      iyoff = mxns*jy;
+      for (jx=0; jx < mx; jx++) { /* order of loops matters */
+        ic = iyoff + ns*jx;
+        x_loc = (jx == 0) ? 0 : ((jx == mx-1) ? 2 : 1);
+        y_loc = (jy == 0) ? 0 : ((jy == my-1) ? 2 : 1);
+        switch (3*y_loc+x_loc) {
+        case 0 : 
+          /* jx == 0, jy == 0 */
+          break;
+        case 1 : 
+          /* 1 <= jx <= mx-2, jy == 0 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          break;
+        case 2 : 
+          /* jx == mx-1, jy == 0 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          break;
+        case 3 : 
+          /* jx == 0, 1 <= jy <= my-2 */
+          /* x[ic+i] += gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 4 : 
+          /* 1 <= jx <= mx-2, 1 <= jy <= my-2 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] + gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 5 : 
+          /* jx == mx-1, 1 <= jy <= my-2 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] + gam[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam, xd+ic-mxns, ns);
+          break;
+        case 6 : 
+          /* jx == 0, jy == my-1 */
+          /* x[ic+i] += gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        case 7 : 
+          /* 1 <= jx <= mx-2, jy == my-1 */
+          /* x[ic+i] += beta[i]x[ic-ns+i] + gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        case 8 : 
+          /* jx == mx-1, jy == my-1 */
+          /* x[ic+i] += beta2[i]x[ic-ns+i] + gam2[i]x[ic-mxns+i] */
+          v_inc_by_prod(xd+ic, beta2, xd+ic-ns, ns);
+          v_inc_by_prod(xd+ic, gam2, xd+ic-mxns, ns);
+          break;
+        }
+      }
+    }
+    
+    /* Add increment x to z : z <- z+x */
+    
+    N_VLinearSum(ONE, z, ONE, x, z);
+    
+  }
+}
+
+static void v_inc_by_prod(realtype u[], realtype v[], realtype w[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] += v[i]*w[i];
+}
+
+static void v_sum_prods(realtype u[], realtype p[], realtype q[],
+                        realtype v[], realtype w[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] = p[i]*q[i] + v[i]*w[i];
+}
+
+static void v_prod(realtype u[], realtype v[], realtype w[], int n)
+{ 
+  int i;
+  for (i=0; i < n; i++) u[i] = v[i]*w[i];
+}
+
+static void v_zero(realtype u[], int n)
+{
+  int i;  
+  for (i=0; i < n; i++) u[i] = ZERO;
+}
+
+/* Check function return value...
+     opt == 0 means SUNDIALS function allocates memory so check if
+              returned NULL pointer
+     opt == 1 means SUNDIALS function returns a flag so check if
+              flag >= 0
+     opt == 2 means function allocates memory so check if returned
+              NULL pointer */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsKrylovDemo_prec.out b/examples/cvodes/serial/cvsKrylovDemo_prec.out
new file mode 100644
index 0000000..eee5b2b
--- /dev/null
+++ b/examples/cvodes/serial/cvsKrylovDemo_prec.out
@@ -0,0 +1,645 @@
+
+
+Demonstration program for CVODES - CVSPGMR linear solver
+
+Food web problem with ns species, ns = 6
+Predator-prey interaction and diffusion on a 2-D square
+
+Matrix parameters: a = 1   e = 1e+04   g = 5e-07
+b parameter = 1
+Diffusion coefficients: Dprey = 1   Dpred = 0.5
+Rate parameter alpha = 1
+
+Mesh dimensions (mx,my) are 6, 6.  Total system size is neq = 216 
+
+Tolerances: reltol = 1e-05, abstol = 1e-05 
+
+Preconditioning uses a product of:
+  (1) Gauss-Seidel iterations with itmax = 5 iterations, and
+  (2) interaction-only block-diagonal matrix with block-grouping
+  Number of diagonal block groups = ngrp = 4  (ngx by ngy, ngx = 2, ngy = 2)
+
+
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_LEFT
+
+Gram-Schmidt method type is    gstype = MODIFIED_GS
+
+
+c values at t = 0:
+
+Species 1
+10        10        10        10        10        10        
+10        10.1678   10.3775   10.3775   10.1678   10        
+10        10.3775   10.8493   10.8493   10.3775   10        
+10        10.3775   10.8493   10.8493   10.3775   10        
+10        10.1678   10.3775   10.3775   10.1678   10        
+10        10        10        10        10        10        
+
+Species 2
+10        10        10        10        10        10        
+10        10.3355   10.755    10.755    10.3355   10        
+10        10.755    11.6987   11.6987   10.755    10        
+10        10.755    11.6987   11.6987   10.755    10        
+10        10.3355   10.755    10.755    10.3355   10        
+10        10        10        10        10        10        
+
+Species 3
+10        10        10        10        10        10        
+10        10.5033   11.1325   11.1325   10.5033   10        
+10        11.1325   12.548    12.548    11.1325   10        
+10        11.1325   12.548    12.548    11.1325   10        
+10        10.5033   11.1325   11.1325   10.5033   10        
+10        10        10        10        10        10        
+
+Species 4
+10        10        10        10        10        10        
+10        10.6711   11.5099   11.5099   10.6711   10        
+10        11.5099   13.3974   13.3974   11.5099   10        
+10        11.5099   13.3974   13.3974   11.5099   10        
+10        10.6711   11.5099   11.5099   10.6711   10        
+10        10        10        10        10        10        
+
+Species 5
+10        10        10        10        10        10        
+10        10.8389   11.8874   11.8874   10.8389   10        
+10        11.8874   14.2467   14.2467   11.8874   10        
+10        11.8874   14.2467   14.2467   11.8874   10        
+10        10.8389   11.8874   11.8874   10.8389   10        
+10        10        10        10        10        10        
+
+Species 6
+10        10        10        10        10        10        
+10        11.0066   12.2649   12.2649   11.0066   10        
+10        12.2649   15.0961   15.0961   12.2649   10        
+10        12.2649   15.0961   15.0961   12.2649   10        
+10        11.0066   12.2649   12.2649   11.0066   10        
+10        10        10        10        10        10        
+
+t =   1.00e-08  nst = 3  nfe = 10  nni = 6  qu = 2  hu =    1.76e-08
+
+t =   1.00e-07  nst = 7  nfe = 14  nni = 10  qu = 2  hu =    4.78e-08
+
+t =   1.00e-06  nst = 15  nfe = 24  nni = 20  qu = 3  hu =    1.50e-07
+
+c values at t = 1e-06:
+
+Species 1
+9.99991   9.99992   9.99993   9.99993   9.99993   9.99992   
+9.99992   10.1677   10.3774   10.3774   10.1677   9.99993   
+9.99993   10.3774   10.8492   10.8492   10.3774   9.99993   
+9.99993   10.3774   10.8492   10.8492   10.3774   9.99993   
+9.99992   10.1677   10.3774   10.3774   10.1677   9.99992   
+9.99991   9.99992   9.99993   9.99993   9.99992   9.99991   
+
+Species 2
+9.99991   9.99993   9.99995   9.99995   9.99993   9.99992   
+9.99993   10.3355   10.7549   10.7549   10.3355   9.99993   
+9.99995   10.7549   11.6985   11.6985   10.7549   9.99995   
+9.99995   10.7549   11.6985   11.6985   10.7549   9.99995   
+9.99993   10.3355   10.7549   10.7549   10.3355   9.99993   
+9.99991   9.99993   9.99995   9.99995   9.99993   9.99991   
+
+Species 3
+9.99991   9.99994   9.99997   9.99997   9.99994   9.99992   
+9.99994   10.5032   11.1323   11.1323   10.5032   9.99994   
+9.99997   11.1323   12.5478   12.5478   11.1323   9.99997   
+9.99997   11.1323   12.5478   12.5478   11.1323   9.99997   
+9.99994   10.5032   11.1323   11.1323   10.5032   9.99994   
+9.99991   9.99994   9.99997   9.99997   9.99994   9.99991   
+
+Species 4
+13.499    13.499    13.499    13.499    13.499    13.4989   
+13.499    14.5506   15.8932   15.8932   14.5506   13.499    
+13.499    15.8932   19.0308   19.0308   15.8932   13.499    
+13.499    15.8932   19.0308   19.0308   15.8932   13.499    
+13.499    14.5506   15.8932   15.8932   14.5506   13.499    
+13.499    13.499    13.499    13.499    13.499    13.499    
+
+Species 5
+13.499    13.499    13.499    13.499    13.499    13.4989   
+13.499    14.7794   16.4145   16.4145   14.7794   13.499    
+13.499    16.4145   20.2373   20.2373   16.4145   13.499    
+13.499    16.4145   20.2373   20.2373   16.4145   13.499    
+13.499    14.7794   16.4145   16.4145   14.7794   13.499    
+13.499    13.499    13.499    13.499    13.499    13.499    
+
+Species 6
+13.499    13.499    13.499    13.499    13.499    13.4989   
+13.499    15.0082   16.9357   16.9357   15.0082   13.499    
+13.499    16.9357   21.4437   21.4437   16.9357   13.499    
+13.499    16.9357   21.4437   21.4437   16.9357   13.499    
+13.499    15.0082   16.9357   16.9357   15.0082   13.499    
+13.499    13.499    13.499    13.499    13.499    13.499    
+
+t =   1.00e-05  nst = 34  nfe = 47  nni = 43  qu = 5  hu =    6.11e-07
+
+t =   1.00e-04  nst = 116  nfe = 137  nni = 133  qu = 5  hu =    5.51e-06
+
+t =   1.00e-03  nst = 135  nfe = 156  nni = 152  qu = 2  hu =    3.53e-04
+
+c values at t = 0.001:
+
+Species 1
+9.90702   9.91664   9.92836   9.93033   9.92253   9.91674   
+9.91472   10.0746   10.2769   10.2785   10.0795   9.92253   
+9.92446   10.2748   10.7181   10.7194   10.2785   9.93033   
+9.92445   10.2744   10.7173   10.7181   10.2769   9.92836   
+9.91469   10.0734   10.2744   10.2748   10.0746   9.91664   
+9.90697   9.91469   9.92445   9.92446   9.91472   9.90702   
+
+Species 2
+9.90741   9.92474   9.94623   9.9482    9.93064   9.91713   
+9.92282   10.2412   10.644    10.6457   10.2461   9.93064   
+9.94232   10.6419   11.5267   11.5281   10.6457   9.9482    
+9.94231   10.6415   11.5258   11.5267   10.644    9.94623   
+9.92279   10.24     10.6415   10.6419   10.2412   9.92474   
+9.90737   9.92279   9.94231   9.94232   9.92282   9.90741   
+
+Species 3
+9.90781   9.93284   9.96408   9.96606   9.93874   9.91752   
+9.93092   10.4078   11.0109   11.0127   10.4127   9.93874   
+9.96017   11.0088   12.3339   12.3354   11.0127   9.96606   
+9.96016   11.0083   12.3329   12.3339   11.0109   9.96408   
+9.93089   10.4065   11.0083   11.0088   10.4078   9.93284   
+9.90776   9.93089   9.96016   9.96017   9.93092   9.90781   
+
+Species 4
+297231    297749    298393    298451    297925    297520    
+297692    307244    319327    319378    307390    297925    
+298276    319264    345799    345840    319378    298451    
+298276    319252    345771    345799    319327    298393    
+297691    307208    319252    319264    307244    297749    
+297229    297691    298276    298276    297692    297231    
+
+Species 5
+297231    297749    298393    298451    297925    297520    
+297692    307244    319327    319378    307390    297925    
+298276    319264    345799    345840    319378    298451    
+298276    319252    345771    345799    319327    298393    
+297691    307208    319252    319264    307244    297749    
+297229    297691    298276    298276    297692    297231    
+
+Species 6
+297231    297749    298393    298451    297925    297520    
+297692    307244    319327    319378    307390    297925    
+298276    319264    345799    345840    319378    298451    
+298276    319252    345771    345799    319327    298393    
+297691    307208    319252    319264    307244    297749    
+297229    297691    298276    298276    297692    297231    
+
+t =   1.00e-02  nst = 143  nfe = 166  nni = 162  qu = 3  hu =    1.37e-03
+
+t =   1.00e-01  nst = 165  nfe = 191  nni = 187  qu = 5  hu =    6.02e-03
+
+t =   1.00e+00  nst = 235  nfe = 265  nni = 261  qu = 4  hu =    2.49e-02
+
+c values at t = 1:
+
+Species 1
+1.58853   1.59926   1.62153   1.64766   1.67038   1.68151   
+1.58535   1.59505   1.61549   1.63954   1.66035   1.67038   
+1.57758   1.58549   1.60241   1.62237   1.63954   1.64766   
+1.56822   1.57414   1.58708   1.60241   1.61549   1.62153   
+1.5605    1.56465   1.57414   1.58549   1.59505   1.59926   
+1.55734   1.5605    1.56822   1.57758   1.58535   1.58853   
+
+Species 2
+1.59068   1.60143   1.62373   1.64989   1.67263   1.68377   
+1.5875    1.59721   1.61768   1.64175   1.66259   1.67263   
+1.57973   1.58764   1.60458   1.62456   1.64175   1.64989   
+1.57036   1.57628   1.58923   1.60458   1.61768   1.62373   
+1.56263   1.56678   1.57628   1.58764   1.59721   1.60143   
+1.55947   1.56263   1.57036   1.57973   1.5875    1.59068   
+
+Species 3
+1.59272   1.60347   1.6258    1.65199   1.67476   1.68591   
+1.58953   1.59926   1.61975   1.64384   1.6647    1.67476   
+1.58175   1.58968   1.60664   1.62664   1.64384   1.65199   
+1.57237   1.5783    1.59127   1.60664   1.61975   1.6258    
+1.56464   1.56879   1.5783    1.58968   1.59926   1.60347   
+1.56147   1.56464   1.57237   1.58175   1.58953   1.59272   
+
+Species 4
+47718.9   48040.8   48709.6   49494     50176.1   50509.9   
+47623.3   47914.5   48528.3   49250.2   49874.9   50176.1   
+47390.2   47627.5   48135.5   48734.6   49250.2   49494     
+47109     47286.6   47675.1   48135.5   48528.3   48709.6   
+46877.1   47001.6   47286.6   47627.5   47914.5   48040.8   
+46782.3   46877.1   47109     47390.2   47623.3   47718.9   
+
+Species 5
+47718.9   48040.8   48709.6   49494     50176.1   50509.9   
+47623.3   47914.5   48528.3   49250.2   49874.9   50176.1   
+47390.2   47627.5   48135.5   48734.6   49250.2   49494     
+47109     47286.6   47675.1   48135.5   48528.3   48709.6   
+46877.1   47001.6   47286.6   47627.5   47914.5   48040.8   
+46782.3   46877.1   47109     47390.2   47623.3   47718.9   
+
+Species 6
+47718.9   48040.8   48709.6   49494     50176.1   50509.9   
+47623.3   47914.5   48528.3   49250.2   49874.9   50176.1   
+47390.2   47627.5   48135.5   48734.6   49250.2   49494     
+47109     47286.6   47675.1   48135.5   48528.3   48709.6   
+46877.1   47001.6   47286.6   47627.5   47914.5   48040.8   
+46782.3   46877.1   47109     47390.2   47623.3   47718.9   
+
+t =   2.00e+00  nst = 272  nfe = 305  nni = 301  qu = 3  hu =    3.80e-02
+
+t =   3.00e+00  nst = 288  nfe = 322  nni = 318  qu = 3  hu =    6.59e-02
+
+t =   4.00e+00  nst = 303  nfe = 337  nni = 333  qu = 3  hu =    6.59e-02
+
+c values at t = 4:
+
+Species 1
+1.19535   1.20368   1.2211    1.24158   1.25935   1.268     
+1.19281   1.20035   1.21636   1.23523   1.25154   1.25935   
+1.18657   1.19274   1.20603   1.22174   1.23523   1.24158   
+1.17905   1.18368   1.1939    1.20603   1.21636   1.2211    
+1.17285   1.17613   1.18368   1.19274   1.20035   1.20368   
+1.17032   1.17285   1.17905   1.18657   1.19281   1.19535   
+
+Species 2
+1.19539   1.20372   1.22113   1.24161   1.25939   1.26804   
+1.19284   1.20039   1.2164    1.23527   1.25158   1.25939   
+1.18661   1.19277   1.20606   1.22177   1.23527   1.24161   
+1.17908   1.18372   1.19393   1.20606   1.2164    1.22113   
+1.17288   1.17616   1.18372   1.19277   1.20039   1.20372   
+1.17036   1.17288   1.17908   1.18661   1.19284   1.19539   
+
+Species 3
+1.19542   1.20375   1.22117   1.24164   1.25942   1.26807   
+1.19287   1.20042   1.21643   1.2353    1.25161   1.25942   
+1.18664   1.1928    1.20609   1.2218    1.2353    1.24164   
+1.17911   1.18375   1.19396   1.20609   1.21643   1.22117   
+1.17291   1.17619   1.18375   1.1928    1.20042   1.20375   
+1.17039   1.17291   1.17911   1.18664   1.19287   1.19542   
+
+Species 4
+35860.8   36110.3   36632.5   37246.5   37779.6   38038.8   
+35784.3   36010.5   36490.5   37056.4   37545.4   37779.6   
+35597.3   35782.1   36180.6   36651.7   37056.4   37246.5   
+35371.5   35510.5   35816.8   36180.6   36490.5   36632.5   
+35185.5   35283.9   35510.5   35782.1   36010.5   36110.3   
+35109.8   35185.5   35371.5   35597.3   35784.3   35860.8   
+
+Species 5
+35860.8   36110.2   36632.5   37246.5   37779.6   38038.8   
+35784.3   36010.5   36490.5   37056.4   37545.4   37779.6   
+35597.4   35782.1   36180.6   36651.7   37056.4   37246.5   
+35371.5   35510.5   35816.8   36180.6   36490.5   36632.5   
+35185.5   35283.9   35510.5   35782.1   36010.5   36110.2   
+35109.8   35185.5   35371.5   35597.4   35784.3   35860.8   
+
+Species 6
+35860.8   36110.2   36632.5   37246.5   37779.6   38038.8   
+35784.3   36010.5   36490.5   37056.4   37545.4   37779.6   
+35597.4   35782.1   36180.7   36651.6   37056.4   37246.5   
+35371.5   35510.5   35816.8   36180.7   36490.5   36632.5   
+35185.6   35283.8   35510.5   35782.1   36010.5   36110.2   
+35109.8   35185.6   35371.5   35597.4   35784.3   35860.8   
+
+t =   5.00e+00  nst = 313  nfe = 349  nni = 345  qu = 3  hu =    1.26e-01
+
+t =   6.00e+00  nst = 321  nfe = 357  nni = 353  qu = 3  hu =    1.26e-01
+
+t =   7.00e+00  nst = 329  nfe = 366  nni = 362  qu = 3  hu =    1.26e-01
+
+c values at t = 7:
+
+Species 1
+1.18854   1.19682   1.21415   1.23453   1.25221   1.26082   
+1.186     1.19351   1.20944   1.22821   1.24444   1.25221   
+1.1798    1.18593   1.19916   1.21479   1.22821   1.23453   
+1.17231   1.17692   1.18708   1.19916   1.20944   1.21415   
+1.16614   1.1694    1.17692   1.18593   1.19351   1.19682   
+1.16363   1.16614   1.17231   1.1798    1.186     1.18854   
+
+Species 2
+1.18854   1.19682   1.21415   1.23453   1.25221   1.26082   
+1.186     1.19351   1.20944   1.22822   1.24444   1.25221   
+1.1798    1.18593   1.19916   1.21479   1.22822   1.23453   
+1.17231   1.17692   1.18708   1.19916   1.20944   1.21415   
+1.16614   1.1694    1.17692   1.18593   1.19351   1.19682   
+1.16363   1.16614   1.17231   1.1798    1.186     1.18854   
+
+Species 3
+1.18854   1.19683   1.21415   1.23453   1.25222   1.26082   
+1.186     1.19351   1.20944   1.22822   1.24444   1.25222   
+1.1798    1.18593   1.19916   1.21479   1.22822   1.23453   
+1.17231   1.17692   1.18709   1.19916   1.20944   1.21415   
+1.16614   1.1694    1.17692   1.18593   1.19351   1.19683   
+1.16363   1.16614   1.17231   1.1798    1.186     1.18854   
+
+Species 4
+35655.3   35903.5   36423.2   37034.1   37564.5   37822.3   
+35579.2   35804.3   36281.8   36844.9   37331.4   37564.5   
+35393.1   35577     35973.5   36442.2   36844.9   37034.1   
+35168.3   35306.6   35611.4   35973.5   36281.8   36423.2   
+34983.2   35081.1   35306.6   35577     35804.3   35903.5   
+34907.9   34983.2   35168.3   35393.1   35579.2   35655.3   
+
+Species 5
+35655.3   35903.5   36423.3   37034     37564.5   37822.3   
+35579.1   35804.3   36281.8   36845     37331.4   37564.5   
+35393.2   35576.9   35973.5   36442.1   36845     37034     
+35168.3   35306.7   35611.3   35973.5   36281.8   36423.3   
+34983.2   35081.1   35306.7   35576.9   35804.3   35903.5   
+34907.8   34983.2   35168.3   35393.2   35579.1   35655.3   
+
+Species 6
+35655.3   35903.5   36423.3   37034     37564.5   37822.2   
+35579.1   35804.3   36281.8   36845     37331.3   37564.5   
+35393.2   35576.9   35973.6   36442.1   36845     37034     
+35168.3   35306.7   35611.3   35973.6   36281.8   36423.3   
+34983.3   35081     35306.7   35576.9   35804.3   35903.5   
+34907.8   34983.3   35168.3   35393.2   35579.1   35655.3   
+
+t =   8.00e+00  nst = 337  nfe = 374  nni = 370  qu = 3  hu =    1.26e-01
+
+t =   9.00e+00  nst = 345  nfe = 382  nni = 378  qu = 3  hu =    1.26e-01
+
+t =   1.00e+01  nst = 353  nfe = 391  nni = 387  qu = 3  hu =    1.26e-01
+
+c values at t = 10:
+
+Species 1
+1.18838   1.19667   1.21399   1.23437   1.25205   1.26066   
+1.18585   1.19335   1.20928   1.22805   1.24428   1.25205   
+1.17964   1.18578   1.199     1.21463   1.22805   1.23437   
+1.17215   1.17676   1.18693   1.199     1.20928   1.21399   
+1.16598   1.16925   1.17676   1.18578   1.19335   1.19667   
+1.16347   1.16598   1.17215   1.17964   1.18585   1.18838   
+
+Species 2
+1.18838   1.19667   1.21399   1.23437   1.25205   1.26066   
+1.18585   1.19335   1.20928   1.22805   1.24428   1.25205   
+1.17964   1.18578   1.199     1.21463   1.22805   1.23437   
+1.17215   1.17676   1.18693   1.199     1.20928   1.21399   
+1.16598   1.16925   1.17676   1.18578   1.19335   1.19667   
+1.16347   1.16598   1.17215   1.17964   1.18585   1.18838   
+
+Species 3
+1.18838   1.19667   1.21399   1.23437   1.25205   1.26066   
+1.18585   1.19335   1.20928   1.22805   1.24428   1.25205   
+1.17964   1.18578   1.199     1.21463   1.22805   1.23437   
+1.17215   1.17676   1.18693   1.199     1.20928   1.21399   
+1.16598   1.16925   1.17676   1.18578   1.19335   1.19667   
+1.16347   1.16598   1.17215   1.17964   1.18585   1.18838   
+
+Species 4
+35650.5   35898.8   36418.4   37029.3   37559.4   37817.4   
+35574.5   35799.5   36277.1   36840     37326.6   37559.4   
+35388.5   35572.3   35968.7   36437.4   36840     37029.3   
+35163.7   35302     35606.7   35968.7   36277.1   36418.4   
+34978.5   35076.5   35302     35572.3   35799.5   35898.8   
+34903.3   34978.5   35163.7   35388.5   35574.5   35650.5   
+
+Species 5
+35650.5   35898.8   36418.4   37029.3   37559.4   37817.4   
+35574.5   35799.5   36277.1   36840     37326.6   37559.4   
+35388.5   35572.3   35968.7   36437.4   36840     37029.3   
+35163.7   35302     35606.7   35968.7   36277.1   36418.4   
+34978.5   35076.5   35302     35572.3   35799.5   35898.8   
+34903.3   34978.5   35163.7   35388.5   35574.5   35650.5   
+
+Species 6
+35650.5   35898.8   36418.4   37029.3   37559.4   37817.4   
+35574.5   35799.5   36277.1   36840     37326.6   37559.4   
+35388.5   35572.3   35968.7   36437.4   36840     37029.3   
+35163.7   35302     35606.7   35968.7   36277.1   36418.4   
+34978.5   35076.5   35302     35572.3   35799.5   35898.8   
+34903.3   34978.5   35163.7   35388.5   35574.5   35650.5   
+
+
+
+ Final statistics for this run:
+
+ CVode real workspace length           = 2256 
+ CVode integer workspace length        =   62 
+ CVSPGMR real workspace length         = 2206 
+ CVSPGMR integer workspace length      =   10 
+ Number of steps                       =  353 
+ Number of f-s                         =  391 
+ Number of f-s (SPGMR)                 =  585 
+ Number of f-s (TOTAL)                 =  976 
+ Number of setups                      =   43 
+ Number of nonlinear iterations        =  387 
+ Number of linear iterations           =  585 
+ Number of preconditioner evaluations  =   43 
+ Number of preconditioner solves       =  956 
+ Number of error test failures         =    1 
+ Number of nonlinear conv. failures    =    0 
+ Number of linear convergence failures =    0 
+ Average Krylov subspace dimension     = 1.512 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_LEFT
+
+Gram-Schmidt method type is    gstype = CLASSICAL_GS
+
+
+t =   1.00e-08  nst = 3  nfe = 10  nni = 6  qu = 2  hu =    1.76e-08
+
+t =   1.00e-07  nst = 7  nfe = 14  nni = 10  qu = 2  hu =    4.78e-08
+
+t =   1.00e-06  nst = 15  nfe = 24  nni = 20  qu = 3  hu =    1.50e-07
+
+t =   1.00e-05  nst = 34  nfe = 47  nni = 43  qu = 5  hu =    6.11e-07
+
+t =   1.00e-04  nst = 116  nfe = 137  nni = 133  qu = 5  hu =    5.51e-06
+
+t =   1.00e-03  nst = 135  nfe = 156  nni = 152  qu = 2  hu =    3.53e-04
+
+t =   1.00e-02  nst = 143  nfe = 166  nni = 162  qu = 3  hu =    1.37e-03
+
+t =   1.00e-01  nst = 165  nfe = 191  nni = 187  qu = 5  hu =    6.02e-03
+
+t =   1.00e+00  nst = 235  nfe = 265  nni = 261  qu = 4  hu =    2.49e-02
+
+t =   2.00e+00  nst = 272  nfe = 305  nni = 301  qu = 3  hu =    3.80e-02
+
+t =   3.00e+00  nst = 288  nfe = 322  nni = 318  qu = 3  hu =    6.58e-02
+
+t =   4.00e+00  nst = 303  nfe = 338  nni = 334  qu = 3  hu =    6.58e-02
+
+t =   5.00e+00  nst = 316  nfe = 352  nni = 348  qu = 2  hu =    1.06e-01
+
+t =   6.00e+00  nst = 323  nfe = 359  nni = 355  qu = 3  hu =    1.94e-01
+
+t =   7.00e+00  nst = 326  nfe = 364  nni = 360  qu = 3  hu =    4.05e-01
+
+t =   8.00e+00  nst = 328  nfe = 366  nni = 362  qu = 3  hu =    4.05e-01
+
+t =   9.00e+00  nst = 331  nfe = 369  nni = 365  qu = 3  hu =    4.05e-01
+
+t =   1.00e+01  nst = 333  nfe = 371  nni = 367  qu = 3  hu =    4.05e-01
+
+
+
+ Final statistics for this run:
+
+ CVode real workspace length           = 2256 
+ CVode integer workspace length        =   62 
+ CVSPGMR real workspace length         = 2206 
+ CVSPGMR integer workspace length      =   10 
+ Number of steps                       =  333 
+ Number of f-s                         =  371 
+ Number of f-s (SPGMR)                 =  534 
+ Number of f-s (TOTAL)                 =  905 
+ Number of setups                      =   44 
+ Number of nonlinear iterations        =  367 
+ Number of linear iterations           =  534 
+ Number of preconditioner evaluations  =   44 
+ Number of preconditioner solves       =  885 
+ Number of error test failures         =    1 
+ Number of nonlinear conv. failures    =    0 
+ Number of linear convergence failures =    4 
+ Average Krylov subspace dimension     = 1.455 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_RIGHT
+
+Gram-Schmidt method type is    gstype = MODIFIED_GS
+
+
+t =   1.00e-08  nst = 3  nfe = 10  nni = 6  qu = 2  hu =    1.76e-08
+
+t =   1.00e-07  nst = 7  nfe = 14  nni = 10  qu = 2  hu =    4.78e-08
+
+t =   1.00e-06  nst = 15  nfe = 24  nni = 20  qu = 3  hu =    1.50e-07
+
+t =   1.00e-05  nst = 34  nfe = 47  nni = 43  qu = 5  hu =    6.11e-07
+
+t =   1.00e-04  nst = 118  nfe = 138  nni = 134  qu = 5  hu =    6.64e-06
+
+t =   1.00e-03  nst = 138  nfe = 163  nni = 159  qu = 2  hu =    4.17e-04
+
+t =   1.00e-02  nst = 146  nfe = 174  nni = 170  qu = 3  hu =    1.64e-03
+
+t =   1.00e-01  nst = 169  nfe = 200  nni = 196  qu = 5  hu =    9.35e-03
+
+t =   1.00e+00  nst = 207  nfe = 247  nni = 243  qu = 5  hu =    5.17e-02
+
+t =   2.00e+00  nst = 218  nfe = 262  nni = 258  qu = 5  hu =    1.36e-01
+
+t =   3.00e+00  nst = 226  nfe = 270  nni = 266  qu = 5  hu =    1.36e-01
+
+t =   4.00e+00  nst = 233  nfe = 277  nni = 273  qu = 5  hu =    1.36e-01
+
+t =   5.00e+00  nst = 241  nfe = 285  nni = 281  qu = 5  hu =    1.36e-01
+
+t =   6.00e+00  nst = 248  nfe = 292  nni = 288  qu = 5  hu =    1.36e-01
+
+t =   7.00e+00  nst = 255  nfe = 299  nni = 295  qu = 5  hu =    1.36e-01
+
+t =   8.00e+00  nst = 260  nfe = 305  nni = 301  qu = 5  hu =    2.06e-01
+
+t =   9.00e+00  nst = 270  nfe = 319  nni = 315  qu = 5  hu =    5.14e-02
+
+t =   1.00e+01  nst = 278  nfe = 328  nni = 324  qu = 3  hu =    3.01e-01
+
+
+
+ Final statistics for this run:
+
+ CVode real workspace length           = 2256 
+ CVode integer workspace length        =   62 
+ CVSPGMR real workspace length         = 2206 
+ CVSPGMR integer workspace length      =   10 
+ Number of steps                       =  278 
+ Number of f-s                         =  328 
+ Number of f-s (SPGMR)                 =  666 
+ Number of f-s (TOTAL)                 =  994 
+ Number of setups                      =   46 
+ Number of nonlinear iterations        =  324 
+ Number of linear iterations           =  666 
+ Number of preconditioner evaluations  =   46 
+ Number of preconditioner solves       =  954 
+ Number of error test failures         =    3 
+ Number of nonlinear conv. failures    =    1 
+ Number of linear convergence failures =   55 
+ Average Krylov subspace dimension     = 2.056 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+
+Preconditioner type is           jpre = PREC_RIGHT
+
+Gram-Schmidt method type is    gstype = CLASSICAL_GS
+
+
+t =   1.00e-08  nst = 3  nfe = 10  nni = 6  qu = 2  hu =    1.76e-08
+
+t =   1.00e-07  nst = 7  nfe = 14  nni = 10  qu = 2  hu =    4.78e-08
+
+t =   1.00e-06  nst = 15  nfe = 24  nni = 20  qu = 3  hu =    1.50e-07
+
+t =   1.00e-05  nst = 34  nfe = 47  nni = 43  qu = 5  hu =    6.11e-07
+
+t =   1.00e-04  nst = 118  nfe = 138  nni = 134  qu = 5  hu =    6.64e-06
+
+t =   1.00e-03  nst = 138  nfe = 163  nni = 159  qu = 2  hu =    4.17e-04
+
+t =   1.00e-02  nst = 146  nfe = 174  nni = 170  qu = 3  hu =    1.64e-03
+
+t =   1.00e-01  nst = 169  nfe = 200  nni = 196  qu = 5  hu =    9.35e-03
+
+t =   1.00e+00  nst = 207  nfe = 247  nni = 243  qu = 5  hu =    5.18e-02
+
+t =   2.00e+00  nst = 219  nfe = 263  nni = 259  qu = 5  hu =    1.21e-01
+
+t =   3.00e+00  nst = 227  nfe = 271  nni = 267  qu = 5  hu =    1.21e-01
+
+t =   4.00e+00  nst = 233  nfe = 278  nni = 274  qu = 5  hu =    1.85e-01
+
+t =   5.00e+00  nst = 238  nfe = 283  nni = 279  qu = 5  hu =    1.85e-01
+
+t =   6.00e+00  nst = 248  nfe = 298  nni = 294  qu = 5  hu =    7.06e-02
+
+t =   7.00e+00  nst = 255  nfe = 305  nni = 301  qu = 4  hu =    2.07e-01
+
+t =   8.00e+00  nst = 258  nfe = 308  nni = 304  qu = 3  hu =    3.42e-01
+
+t =   9.00e+00  nst = 261  nfe = 311  nni = 307  qu = 3  hu =    3.42e-01
+
+t =   1.00e+01  nst = 263  nfe = 313  nni = 309  qu = 3  hu =    5.33e-01
+
+
+
+ Final statistics for this run:
+
+ CVode real workspace length           = 2256 
+ CVode integer workspace length        =   62 
+ CVSPGMR real workspace length         = 2206 
+ CVSPGMR integer workspace length      =   10 
+ Number of steps                       =  263 
+ Number of f-s                         =  313 
+ Number of f-s (SPGMR)                 =  594 
+ Number of f-s (TOTAL)                 =  907 
+ Number of setups                      =   47 
+ Number of nonlinear iterations        =  309 
+ Number of linear iterations           =  594 
+ Number of preconditioner evaluations  =   47 
+ Number of preconditioner solves       =  867 
+ Number of error test failures         =    3 
+ Number of nonlinear conv. failures    =    1 
+ Number of linear convergence failures =   42 
+ Average Krylov subspace dimension     = 1.922 
+
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
diff --git a/examples/cvodes/serial/cvsRoberts_ASAi_dns.c b/examples/cvodes/serial/cvsRoberts_ASAi_dns.c
new file mode 100644
index 0000000..79a1896
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_ASAi_dns.c
@@ -0,0 +1,753 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Adjoint sensitivity example problem.
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODES. The problem is from chemical
+ * kinetics, and consists of the following three rate equations.
+ *    dy1/dt = -p1*y1 + p2*y2*y3
+ *    dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2
+ *    dy3/dt =  p3*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The reaction rates are:
+ * p1=0.04, p2=1e4, and p3=3e7. The problem is stiff.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVODE dense linear solver, and a user-supplied
+ * Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance.
+ * Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * 
+ * Optionally, CVODES can compute sensitivities with respect to
+ * the problem parameters p1, p2, and p3 of the following quantity:
+ *   G = int_t0^t1 g(t,p,y) dt
+ * where
+ *   g(t,p,y) = y3
+ *        
+ * The gradient dG/dp is obtained as:
+ *   dG/dp = int_t0^t1 (g_p - lambda^T f_p ) dt - lambda^T(t0)*y0_p
+ *         = - xi^T(t0) - lambda^T(t0)*y0_p
+ * where lambda and xi are solutions of:
+ *   d(lambda)/dt = - (f_y)^T * lambda - (g_y)^T
+ *   lambda(t1) = 0
+ * and
+ *   d(xi)/dt = - (f_p)^T * lambda + (g_p)^T
+ *   xi(t1) = 0
+ * 
+ * During the backward integration, CVODES also evaluates G as
+ *   G = - phi(t0)
+ * where
+ *   d(phi)/dt = g(t,y,p)
+ *   phi(t1) = 0
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvodes/cvodes.h>
+#include <cvodes/cvodes_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Accessor macros */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component, i=1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* (i,j)-th matrix el., i,j=1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ      3             /* number of equations                  */
+
+#define RTOL     RCONST(1e-6)  /* scalar relative tolerance            */
+
+#define ATOL1    RCONST(1e-8)  /* vector absolute tolerance components */
+#define ATOL2    RCONST(1e-14)
+#define ATOL3    RCONST(1e-6)
+
+#define ATOLl    RCONST(1e-8)  /* absolute tolerance for adjoint vars. */
+#define ATOLq    RCONST(1e-6)  /* absolute tolerance for quadratures   */
+
+#define T0       RCONST(0.0)   /* initial time                         */
+#define TOUT     RCONST(4e7)   /* final time                           */
+
+#define TB1      RCONST(4e7)   /* starting point for adjoint problem   */
+#define TB2      RCONST(50.0)  /* starting point for adjoint problem   */
+#define TBout1   RCONST(40.0)  /* intermediate t for adjoint problem   */
+
+#define STEPS    150           /* number of steps between check points */
+
+#define NP       3             /* number of problem parameters         */
+
+#define ZERO     RCONST(0.0)
+
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];
+} *UserData;
+
+/* Prototypes of user-supplied functions */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int fQ(realtype t, N_Vector y, N_Vector qdot, void *user_data);
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+static int fB(realtype t, N_Vector y, 
+              N_Vector yB, N_Vector yBdot, void *user_dataB);
+static int JacB(long int NB, realtype t,
+                N_Vector y, N_Vector yB, N_Vector fyB,
+                DlsMat JB, void *user_dataB,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+static int fQB(realtype t, N_Vector y, N_Vector yB, 
+               N_Vector qBdot, void *user_dataB);
+
+
+/* Prototypes of private functions */
+
+static void PrintHead(realtype tB0);
+static void PrintOutput(realtype tfinal, N_Vector y, N_Vector yB, N_Vector qB);
+static void PrintOutput1(realtype time, realtype t, N_Vector y, N_Vector yB);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+
+  void *cvode_mem;
+
+  realtype reltolQ, abstolQ;
+  N_Vector y, q;
+
+  int steps;
+
+  int indexB;
+
+  realtype reltolB, abstolB, abstolQB;
+  N_Vector yB, qB;
+
+  realtype time;
+  int flag, ncheck;
+
+  long int nst, nstB;
+
+  CVadjCheckPointRec *ckpnt;
+
+  data = NULL;
+  cvode_mem = NULL;
+  ckpnt = NULL;
+  y = yB = qB = NULL;
+
+  /* Print problem description */
+  printf("\nAdjoint Sensitivity Example for Chemical Kinetics\n");
+  printf("-------------------------------------------------\n\n");
+  printf("ODE: dy1/dt = -p1*y1 + p2*y2*y3\n");
+  printf("     dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2\n");
+  printf("     dy3/dt =  p3*(y2)^2\n\n");
+  printf("Find dG/dp for\n");
+  printf("     G = int_t0^tB0 g(t,p,y) dt\n");
+  printf("     g(t,p,y) = y3\n\n\n");
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.04);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+
+  /* Initialize y */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  Ith(y,1) = RCONST(1.0);
+  Ith(y,2) = ZERO;
+  Ith(y,3) = ZERO;
+
+  /* Initialize q */
+  q = N_VNew_Serial(1);
+  if (check_flag((void *)q, "N_VNew_Serial", 0)) return(1);
+  Ith(q,1) = ZERO;
+
+  /* Set the scalar realtive and absolute tolerances reltolQ and abstolQ */
+  reltolQ = RTOL;
+  abstolQ = ATOLq;
+
+  /* Create and allocate CVODES memory for forward run */
+  printf("Create and allocate CVODES memory for forward runs\n");
+
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  flag = CVodeWFtolerances(cvode_mem, ewt);
+  if (check_flag(&flag, "CVodeWFtolerances", 1)) return(1);
+
+  flag = CVodeSetUserData(cvode_mem, data);
+  if (check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  flag = CVDense(cvode_mem, NEQ);
+  if (check_flag(&flag, "CVDense", 1)) return(1);
+
+  flag = CVDlsSetDenseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVDlsSetDenseJacFn", 1)) return(1);
+
+  flag = CVodeQuadInit(cvode_mem, fQ, q);
+  if (check_flag(&flag, "CVodeQuadInit", 1)) return(1);
+
+  flag = CVodeQuadSStolerances(cvode_mem, reltolQ, abstolQ);
+  if (check_flag(&flag, "CVodeQuadSStolerances", 1)) return(1);
+
+  flag = CVodeSetQuadErrCon(cvode_mem, TRUE);
+  if (check_flag(&flag, "CVodeSetQuadErrCon", 1)) return(1);
+
+  /* Allocate global memory */
+
+  steps = STEPS;
+  flag = CVodeAdjInit(cvode_mem, steps, CV_HERMITE);
+  /*
+  flag = CVodeAdjInit(cvode_mem, steps, CV_POLYNOMIAL);
+  */
+  if (check_flag(&flag, "CVodeAdjInit", 1)) return(1);
+
+  /* Perform forward run */
+  printf("Forward integration ... ");
+  
+  flag = CVodeF(cvode_mem, TOUT, y, &time, CV_NORMAL, &ncheck);
+  if (check_flag(&flag, "CVodeF", 1)) return(1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  if (check_flag(&flag, "CVodeGetNumSteps", 1)) return(1);
+
+  printf("done ( nst = %ld )\n",nst);
+  printf("\nncheck = %d\n\n", ncheck);
+
+  flag = CVodeGetQuad(cvode_mem, &time, q);
+  if (check_flag(&flag, "CVodeGetQuad", 1)) return(1);
+
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("G:          %12.4Le \n",Ith(q,1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("G:          %12.4e \n",Ith(q,1));
+#else
+  printf("G:          %12.4e \n",Ith(q,1));
+#endif
+  printf("--------------------------------------------------------\n\n");
+
+  /* Test check point linked list 
+     (uncomment next block to print check point information) */
+  
+  /*
+  {
+    int i;
+    
+    printf("\nList of Check Points (ncheck = %d)\n\n", ncheck);
+    ckpnt = (CVadjCheckPointRec *) malloc ( (ncheck+1)*sizeof(CVadjCheckPointRec));
+    CVodeGetAdjCheckPointsInfo(cvode_mem, ckpnt);
+    for (i=0;i<=ncheck;i++) {
+      printf("Address:       %p\n",ckpnt[i].my_addr);
+      printf("Next:          %p\n",ckpnt[i].next_addr);
+      printf("Time interval: %le  %le\n",ckpnt[i].t0, ckpnt[i].t1);
+      printf("Step number:   %ld\n",ckpnt[i].nstep);
+      printf("Order:         %d\n",ckpnt[i].order);
+      printf("Step size:     %le\n",ckpnt[i].step);
+      printf("\n");
+    }
+    
+  }
+  */
+  
+  /* Initialize yB */
+  yB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yB, "N_VNew_Serial", 0)) return(1);
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = ZERO;
+
+  /* Initialize qB */
+  qB = N_VNew_Serial(NP);
+  if (check_flag((void *)qB, "N_VNew", 0)) return(1);
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  /* Set the scalar relative tolerance reltolB */
+  reltolB = RTOL;               
+
+  /* Set the scalar absolute tolerance abstolB */
+  abstolB = ATOLl;
+
+  /* Set the scalar absolute tolerance abstolQB */
+  abstolQB = ATOLq;
+
+  /* Create and allocate CVODES memory for backward run */
+  printf("Create and allocate CVODES memory for backward run\n");
+
+  flag = CVodeCreateB(cvode_mem, CV_BDF, CV_NEWTON, &indexB);
+  if (check_flag(&flag, "CVodeCreateB", 1)) return(1);
+
+  flag = CVodeInitB(cvode_mem, indexB, fB, TB1, yB);
+  if (check_flag(&flag, "CVodeInitB", 1)) return(1);
+
+  flag = CVodeSStolerancesB(cvode_mem, indexB, reltolB, abstolB);
+  if (check_flag(&flag, "CVodeSStolerancesB", 1)) return(1);
+
+  flag = CVodeSetUserDataB(cvode_mem, indexB, data);
+  if (check_flag(&flag, "CVodeSetUserDataB", 1)) return(1);
+
+  flag = CVDenseB(cvode_mem, indexB, NEQ);
+  if (check_flag(&flag, "CVDenseB", 1)) return(1);
+
+  flag = CVDlsSetDenseJacFnB(cvode_mem, indexB, JacB);
+  if (check_flag(&flag, "CVDlsSetDenseJacFnB", 1)) return(1);
+
+  flag = CVodeQuadInitB(cvode_mem, indexB, fQB, qB);
+  if (check_flag(&flag, "CVodeQuadInitB", 1)) return(1);
+
+  flag = CVodeQuadSStolerancesB(cvode_mem, indexB, reltolB, abstolQB);
+  if (check_flag(&flag, "CVodeQuadSStolerancesB", 1)) return(1);
+
+  flag = CVodeSetQuadErrConB(cvode_mem, indexB, TRUE);
+  if (check_flag(&flag, "CVodeSetQuadErrConB", 1)) return(1);
+
+  /* Backward Integration */
+
+  PrintHead(TB1);
+
+  /* First get results at t = TBout1 */
+
+  flag = CVodeB(cvode_mem, TBout1, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  flag = CVodeGetAdjY(cvode_mem, TBout1, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput1(time, TBout1, y, yB);
+
+  /* Then at t = T0 */
+
+  flag = CVodeB(cvode_mem, T0, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+  CVodeGetNumSteps(CVodeGetAdjCVodeBmem(cvode_mem, indexB), &nstB);
+  printf("Done ( nst = %ld )\n", nstB);
+
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  flag = CVodeGetQuadB(cvode_mem, indexB, &time, qB);
+  if (check_flag(&flag, "CVodeGetQuadB", 1)) return(1);
+
+  flag = CVodeGetAdjY(cvode_mem, T0, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput(time, y, yB, qB);
+
+  /* Reinitialize backward phase (new tB0) */
+
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = ZERO;
+
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  printf("Re-initialize CVODES memory for backward run\n");
+
+  flag = CVodeReInitB(cvode_mem, indexB, TB2, yB);
+  if (check_flag(&flag, "CVodeReInitB", 1)) return(1);
+
+  flag = CVodeQuadReInitB(cvode_mem, indexB, qB); 
+  if (check_flag(&flag, "CVodeQuadReInitB", 1)) return(1);
+
+  PrintHead(TB2);
+
+  /* First get results at t = TBout1 */
+
+  flag = CVodeB(cvode_mem, TBout1, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  flag = CVodeGetAdjY(cvode_mem, TBout1, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput1(time, TBout1, y, yB);
+
+  /* Then at t = T0 */
+
+  flag = CVodeB(cvode_mem, T0, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+  CVodeGetNumSteps(CVodeGetAdjCVodeBmem(cvode_mem, indexB), &nstB);
+  printf("Done ( nst = %ld )\n", nstB);
+
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  flag = CVodeGetQuadB(cvode_mem, indexB, &time, qB);
+  if (check_flag(&flag, "CVodeGetQuadB", 1)) return(1);
+
+  flag = CVodeGetAdjY(cvode_mem, T0, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput(time, y, yB, qB);
+
+  /* Free memory */
+  printf("Free memory\n\n");
+
+  CVodeFree(&cvode_mem);
+  N_VDestroy_Serial(y); 
+  N_VDestroy_Serial(q);
+  N_VDestroy_Serial(yB);
+  N_VDestroy_Serial(qB);
+
+  if (ckpnt != NULL) free(ckpnt);
+  free(data);
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,y). 
+*/
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+  UserData data;
+  realtype p1, p2, p3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  yd1 = Ith(ydot,1) = -p1*y1 + p2*y2*y3;
+  yd3 = Ith(ydot,3) = p3*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+*/
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y1, y2, y3;
+  UserData data;
+  realtype p1, p2, p3;
+ 
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+ 
+  IJth(J,1,1) = -p1;  IJth(J,1,2) = p2*y3;          IJth(J,1,3) = p2*y2;
+  IJth(J,2,1) =  p1;  IJth(J,2,2) = -p2*y3-2*p3*y2; IJth(J,2,3) = -p2*y2;
+                      IJth(J,3,2) = 2*p3*y2;
+
+  return(0);
+}
+
+/* 
+ * fQ routine. Compute fQ(t,y). 
+*/
+
+static int fQ(realtype t, N_Vector y, N_Vector qdot, void *user_data)
+{
+  Ith(qdot,1) = Ith(y,3);  
+
+  return(0);
+}
+ 
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+/* 
+ * fB routine. Compute fB(t,y,yB). 
+*/
+
+static int fB(realtype t, N_Vector y, N_Vector yB, N_Vector yBdot, void *user_dataB)
+{
+  UserData data;
+  realtype y1, y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3;
+  realtype l21, l32, y23;
+  
+  data = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y vector */
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yB,1); l2 = Ith(yB,2); l3 = Ith(yB,3);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+  l32 = l3-l2;
+  y23 = y2*y3;
+
+  /* Load yBdot */
+  Ith(yBdot,1) = - p1*l21;
+  Ith(yBdot,2) = p2*y3*l21 - RCONST(2.0)*p3*y2*l32;
+  Ith(yBdot,3) = p2*y2*l21 - RCONST(1.0);
+
+  return(0);
+}
+
+/* 
+ * JacB routine. Compute JB(t,y,yB). 
+ */
+
+static int JacB(long int NB, realtype t,
+                N_Vector y, N_Vector yB, N_Vector fyB,
+                DlsMat JB, void *user_dataB,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  UserData data;
+  realtype y1, y2, y3;
+  realtype p1, p2, p3;
+  
+  data = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y vector */
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  /* Load JB */
+  IJth(JB,1,1) = p1;     IJth(JB,1,2) = -p1; 
+  IJth(JB,2,1) = -p2*y3; IJth(JB,2,2) = p2*y3+2.0*p3*y2;
+                         IJth(JB,2,3) = RCONST(-2.0)*p3*y2;
+  IJth(JB,3,1) = -p2*y2; IJth(JB,3,2) = p2*y2;
+
+  return(0);
+}
+
+/*
+ * fQB routine. Compute integrand for quadratures 
+*/
+
+static int fQB(realtype t, N_Vector y, N_Vector yB, 
+               N_Vector qBdot, void *user_dataB)
+{
+  UserData data;
+  realtype y1, y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3;
+  realtype l21, l32, y23;
+
+  data = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y vector */
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yB,1); l2 = Ith(yB,2); l3 = Ith(yB,3);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+  l32 = l3-l2;
+  y23 = y2*y3;
+
+  Ith(qBdot,1) = y1*l21;
+  Ith(qBdot,2) = - y23*l21;
+  Ith(qBdot,3) = y2*y2*l32;
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Print heading for backward integration
+ */
+
+static void PrintHead(realtype tB0)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Backward integration from tB0 = %12.4Le\n\n",tB0);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Backward integration from tB0 = %12.4e\n\n",tB0);
+#else
+  printf("Backward integration from tB0 = %12.4e\n\n",tB0);
+#endif
+}
+
+/*
+ * Print intermediate results during backward integration
+ */
+
+static void PrintOutput1(realtype time, realtype t, N_Vector y, N_Vector yB)
+{
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("returned t: %12.4Le\n",time);
+  printf("tout:       %12.4Le\n",t);
+  printf("lambda(t):  %12.4Le %12.4Le %12.4Le\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t):       %12.4Le %12.4Le %12.4Le\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("returned t: %12.4e\n",time);
+  printf("tout:       %12.4e\n",t);
+  printf("lambda(t):  %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t):       %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+#else
+  printf("returned t: %12.4e\n",time);
+  printf("tout:       %12.4e\n",t);
+  printf("lambda(t):  %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t)      : %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+#endif
+  printf("--------------------------------------------------------\n\n");
+}
+
+/*
+ * Print final results of backward integration
+ */
+
+static void PrintOutput(realtype tfinal, N_Vector y, N_Vector yB, N_Vector qB)
+{
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("returned t: %12.4Le\n",tfinal);
+  printf("lambda(t0): %12.4Le %12.4Le %12.4Le\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t0):      %12.4Le %12.4Le %12.4Le\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("dG/dp:      %12.4Le %12.4Le %12.4Le\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("returned t: %12.4e\n",tfinal);
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t0):      %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+#else
+  printf("returned t: %12.4e\n",tfinal);
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t0)     : %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+#endif
+  printf("--------------------------------------------------------\n\n");
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_ASAi_dns.out b/examples/cvodes/serial/cvsRoberts_ASAi_dns.out
new file mode 100644
index 0000000..dfe6540
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_ASAi_dns.out
@@ -0,0 +1,60 @@
+
+Adjoint Sensitivity Example for Chemical Kinetics
+-------------------------------------------------
+
+ODE: dy1/dt = -p1*y1 + p2*y2*y3
+     dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2
+     dy3/dt =  p3*(y2)^2
+
+Find dG/dp for
+     G = int_t0^tB0 g(t,p,y) dt
+     g(t,p,y) = y3
+
+
+Create and allocate CVODES memory for forward runs
+Forward integration ... done ( nst = 830 )
+
+ncheck = 5
+
+--------------------------------------------------------
+G:            3.9983e+07 
+--------------------------------------------------------
+
+Create and allocate CVODES memory for backward run
+Backward integration from tB0 =   4.0000e+07
+
+--------------------------------------------------------
+returned t:   4.0000e+01
+tout:         4.0000e+01
+lambda(t):    3.9967e+07   3.9967e+07   3.9967e+07
+y(t):         7.1583e-01   9.1856e-06   2.8416e-01
+--------------------------------------------------------
+
+Done ( nst = 267 )
+--------------------------------------------------------
+returned t:   0.0000e+00
+lambda(t0):   3.9967e+07   3.9967e+07   3.9967e+07
+y(t0):        1.0000e+00   0.0000e+00   0.0000e+00
+dG/dp:        7.6836e+05  -3.0688e+00   5.1143e-04
+--------------------------------------------------------
+
+Re-initialize CVODES memory for backward run
+Backward integration from tB0 =   5.0000e+01
+
+--------------------------------------------------------
+returned t:   4.0000e+01
+tout:         4.0000e+01
+lambda(t):    2.8959e-01   1.7624e+00   9.3567e+00
+y(t):         7.1583e-01   9.1856e-06   2.8416e-01
+--------------------------------------------------------
+
+Done ( nst = 158 )
+--------------------------------------------------------
+returned t:   0.0000e+00
+lambda(t0):   8.4191e+00   1.6097e+01   1.6097e+01
+y(t0):        1.0000e+00   0.0000e+00   0.0000e+00
+dG/dp:        1.7341e+02  -5.0591e-04   8.4323e-08
+--------------------------------------------------------
+
+Free memory
+
diff --git a/examples/cvodes/serial/cvsRoberts_ASAi_klu.c b/examples/cvodes/serial/cvsRoberts_ASAi_klu.c
new file mode 100644
index 0000000..6ab9cf3
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_ASAi_klu.c
@@ -0,0 +1,825 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on cvsRoberts_ASAi_dns.c and modified to use KLU
+ * -----------------------------------------------------------------
+ * Adjoint sensitivity example problem:
+ *
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODES. The problem is from chemical
+ * kinetics, and consists of the following three rate equations.
+ *    dy1/dt = -p1*y1 + p2*y2*y3
+ *    dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2
+ *    dy3/dt =  p3*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The reaction rates are:
+ * p1=0.04, p2=1e4, and p3=3e7. The problem is stiff.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVODE KLU linear solver, and a user-supplied
+ * Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance.
+ * Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * 
+ * Optionally, CVODES can compute sensitivities with respect to
+ * the problem parameters p1, p2, and p3 of the following quantity:
+ *   G = int_t0^t1 g(t,p,y) dt
+ * where
+ *   g(t,p,y) = y3
+ *        
+ * The gradient dG/dp is obtained as:
+ *   dG/dp = int_t0^t1 (g_p - lambda^T f_p ) dt - lambda^T(t0)*y0_p
+ *         = - xi^T(t0) - lambda^T(t0)*y0_p
+ * where lambda and xi are solutions of:
+ *   d(lambda)/dt = - (f_y)^T * lambda - (g_y)^T
+ *   lambda(t1) = 0
+ * and
+ *   d(xi)/dt = - (f_p)^T * lambda + (g_p)^T
+ *   xi(t1) = 0
+ * 
+ * During the backward integration, CVODES also evaluates G as
+ *   G = - phi(t0)
+ * where
+ *   d(phi)/dt = g(t,y,p)
+ *   phi(t1) = 0
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* Header files with a description of contents used */
+#include <cvodes/cvodes.h>              /* prototypes for CVODES fcts. and consts. */
+#include <cvodes/cvodes_klu.h>          /* prototypes for CVKLU fcts. and constants */
+#include <sundials/sundials_sparse.h>   /* definitions SlsMat */
+#include <nvector/nvector_serial.h>     /* defs. of serial NVECTOR fcts. and macros */
+#include <sundials/sundials_types.h>    /* def. of type realtype */
+#include <sundials/sundials_math.h>     /* definition of ABS */
+
+/* Accessor macros */
+/* These macros are defined in order to write code with which exactly matched
+   the mathematical problem description given above.
+*/
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component, i=1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ      3             /* number of equations                  */
+
+#define RTOL     RCONST(1e-6)  /* scalar relative tolerance            */
+
+#define ATOL1    RCONST(1e-8)  /* vector absolute tolerance components */
+#define ATOL2    RCONST(1e-14)
+#define ATOL3    RCONST(1e-6)
+
+#define ATOLl    RCONST(1e-8)  /* absolute tolerance for adjoint vars. */
+#define ATOLq    RCONST(1e-6)  /* absolute tolerance for quadratures   */
+
+#define T0       RCONST(0.0)   /* initial time                         */
+#define TOUT     RCONST(4e7)   /* final time                           */
+
+#define TB1      RCONST(4e7)   /* starting point for adjoint problem   */
+#define TB2      RCONST(50.0)  /* starting point for adjoint problem   */
+#define TBout1   RCONST(40.0)  /* intermediate t for adjoint problem   */
+
+#define STEPS    150           /* number of steps between check points */
+
+#define NP       3             /* number of problem parameters         */
+
+#define ZERO     RCONST(0.0)
+
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];
+} *UserData;
+
+/* Prototypes of user-supplied functions */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int fQ(realtype t, N_Vector y, N_Vector qdot, void *user_data);
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+static int fB(realtype t, N_Vector y, 
+              N_Vector yB, N_Vector yBdot, void *user_dataB);
+static int JacB(realtype t,
+                N_Vector y, N_Vector yB, N_Vector fyB,
+                SlsMat JacMatB, void *user_dataB,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+static int fQB(realtype t, N_Vector y, N_Vector yB, 
+               N_Vector qBdot, void *user_dataB);
+
+
+/* Prototypes of private functions */
+
+static void PrintHead(realtype tB0);
+static void PrintOutput(realtype tfinal, N_Vector y, N_Vector yB, N_Vector qB);
+static void PrintOutput1(realtype time, realtype t, N_Vector y, N_Vector yB);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+
+  void *cvode_mem;
+
+  realtype reltolQ, abstolQ;
+  N_Vector y, q;
+
+  int steps;
+
+  int indexB;
+
+  realtype reltolB, abstolB, abstolQB;
+  N_Vector yB, qB;
+
+  realtype time;
+  int flag, nnz, ncheck;
+
+  long int nst, nstB;
+
+  CVadjCheckPointRec *ckpnt;
+
+  data = NULL;
+  cvode_mem = NULL;
+  ckpnt = NULL;
+  y = yB = qB = NULL;
+
+  /* Print problem description */
+  printf("\nAdjoint Sensitivity Example for Chemical Kinetics\n");
+  printf("-------------------------------------------------\n\n");
+  printf("ODE: dy1/dt = -p1*y1 + p2*y2*y3\n");
+  printf("     dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2\n");
+  printf("     dy3/dt =  p3*(y2)^2\n\n");
+  printf("Find dG/dp for\n");
+  printf("     G = int_t0^tB0 g(t,p,y) dt\n");
+  printf("     g(t,p,y) = y3\n\n\n");
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.04);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+
+  /* Initialize y */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  Ith(y,1) = RCONST(1.0);
+  Ith(y,2) = ZERO;
+  Ith(y,3) = ZERO;
+
+  /* Initialize q */
+  q = N_VNew_Serial(1);
+  if (check_flag((void *)q, "N_VNew_Serial", 0)) return(1);
+  Ith(q,1) = ZERO;
+
+  /* Set the scalar realtive and absolute tolerances reltolQ and abstolQ */
+  reltolQ = RTOL;
+  abstolQ = ATOLq;
+
+  /* Create and allocate CVODES memory for forward run */
+  printf("Create and allocate CVODES memory for forward runs\n");
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+     Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+     user's right hand side function in y'=f(t,y), the initial time T0, and
+     the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeWFtolerances to specify a user-supplied function ewt that sets
+     the multiplicative error weights W_i for use in the weighted RMS norm */
+  flag = CVodeWFtolerances(cvode_mem, ewt);
+  if (check_flag(&flag, "CVodeWFtolerances", 1)) return(1);
+
+  /* Attach user data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if (check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVKLU to specify the CVKLU sparse direct linear solver */
+  nnz = NEQ * NEQ;              /* max no. of nonzeros entries in the Jac */
+  flag = CVKLU(cvode_mem, NEQ, nnz, CSC_MAT);
+  if (check_flag(&flag, "CVKLU", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVSlsSetSparseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVSlsSetSparseJacFn", 1)) return(1);
+
+  /* Call CVodeQuadInit to allocate initernal memory and initialize
+     quadrature integration*/
+  flag = CVodeQuadInit(cvode_mem, fQ, q);
+  if (check_flag(&flag, "CVodeQuadInit", 1)) return(1);
+
+  /* Call CVodeSetQuadErrCon to specify whether or not the quadrature variables
+     are to be used in the step size control mechanism within CVODES. Call
+     CVodeQuadSStolerances or CVodeQuadSVtolerances to specify the integration
+     tolerances for the quadrature variables. */
+  flag = CVodeSetQuadErrCon(cvode_mem, TRUE);
+  if (check_flag(&flag, "CVodeSetQuadErrCon", 1)) return(1);
+
+  /* Call CVodeQuadSStolerances to specify scalar relative and absolute
+     tolerances. */
+  flag = CVodeQuadSStolerances(cvode_mem, reltolQ, abstolQ);
+  if (check_flag(&flag, "CVodeQuadSStolerances", 1)) return(1);
+
+  /* Allocate global memory */
+
+  /* Call CVodeAdjInit to update CVODES memory block by allocting the internal 
+     memory needed for backward integration.*/
+  steps = STEPS;             /* no. of integration steps between two
+                               consecutive ckeckpoints*/
+  flag = CVodeAdjInit(cvode_mem, steps, CV_HERMITE);
+  /*
+  flag = CVodeAdjInit(cvode_mem, steps, CV_POLYNOMIAL);
+  */
+  if (check_flag(&flag, "CVodeAdjInit", 1)) return(1);
+
+  /* Perform forward run */
+  printf("Forward integration ... ");
+
+  /* Call CVodeF to integrate the forward problem over an interval in time and
+     saves checkpointing data */
+  flag = CVodeF(cvode_mem, TOUT, y, &time, CV_NORMAL, &ncheck);
+  if (check_flag(&flag, "CVodeF", 1)) return(1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  if (check_flag(&flag, "CVodeGetNumSteps", 1)) return(1);
+
+  printf("done ( nst = %ld )\n",nst);
+  printf("\nncheck = %d\n\n", ncheck);
+
+  flag = CVodeGetQuad(cvode_mem, &time, q);
+  if (check_flag(&flag, "CVodeGetQuad", 1)) return(1);
+
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("G:          %12.4Le \n",Ith(q,1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("G:          %12.4e \n",Ith(q,1));
+#else
+  printf("G:          %12.4e \n",Ith(q,1));
+#endif
+  printf("--------------------------------------------------------\n\n");
+
+  /* Test check point linked list 
+     (uncomment next block to print check point information) */
+  
+  /*
+  {
+    int i;
+    
+    printf("\nList of Check Points (ncheck = %d)\n\n", ncheck);
+    ckpnt = (CVadjCheckPointRec *) malloc ( (ncheck+1)*sizeof(CVadjCheckPointRec));
+    CVodeGetAdjCheckPointsInfo(cvode_mem, ckpnt);
+    for (i=0;i<=ncheck;i++) {
+      printf("Address:       %p\n",ckpnt[i].my_addr);
+      printf("Next:          %p\n",ckpnt[i].next_addr);
+      printf("Time interval: %le  %le\n",ckpnt[i].t0, ckpnt[i].t1);
+      printf("Step number:   %ld\n",ckpnt[i].nstep);
+      printf("Order:         %d\n",ckpnt[i].order);
+      printf("Step size:     %le\n",ckpnt[i].step);
+      printf("\n");
+    }
+    
+  }
+  */
+  
+  /* Initialize yB */
+  yB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yB, "N_VNew_Serial", 0)) return(1);
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = ZERO;
+
+  /* Initialize qB */
+  qB = N_VNew_Serial(NP);
+  if (check_flag((void *)qB, "N_VNew", 0)) return(1);
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  /* Set the scalar relative tolerance reltolB */
+  reltolB = RTOL;               
+
+  /* Set the scalar absolute tolerance abstolB */
+  abstolB = ATOLl;
+
+  /* Set the scalar absolute tolerance abstolQB */
+  abstolQB = ATOLq;
+
+  /* Create and allocate CVODES memory for backward run */
+  printf("Create and allocate CVODES memory for backward run\n");
+
+  /* Call CVodeCreateB to specify the solution method for the backward 
+     problem. */
+  flag = CVodeCreateB(cvode_mem, CV_BDF, CV_NEWTON, &indexB);
+  if (check_flag(&flag, "CVodeCreateB", 1)) return(1);
+
+  /* Call CVodeInitB to allocate internal memory and initialize the 
+     backward problem. */
+  flag = CVodeInitB(cvode_mem, indexB, fB, TB1, yB);
+  if (check_flag(&flag, "CVodeInitB", 1)) return(1);
+
+  /* Set the scalar relative and absolute tolerances. */
+  flag = CVodeSStolerancesB(cvode_mem, indexB, reltolB, abstolB);
+  if (check_flag(&flag, "CVodeSStolerancesB", 1)) return(1);
+
+  /* Attach the user data for backward problem. */
+  flag = CVodeSetUserDataB(cvode_mem, indexB, data);
+  if (check_flag(&flag, "CVodeSetUserDataB", 1)) return(1);
+
+  /* Call CVKLUB to initialize the CVKLU sparse linear solver for the backward 
+     problem. */
+  flag = CVKLUB(cvode_mem, indexB, NEQ, nnz, CSC_MAT);
+  if (check_flag(&flag, "CVKLUB", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) for the backward problem */
+  flag = CVSlsSetSparseJacFnB(cvode_mem, indexB, JacB);
+  if (check_flag(&flag, "CVSlsSetSparseJacFnB", 1)) return(1);
+
+  /* Call CVodeQuadInitB to allocate internal memory and initialize backward
+     quadrature integration. */
+  flag = CVodeQuadInitB(cvode_mem, indexB, fQB, qB);
+  if (check_flag(&flag, "CVodeQuadInitB", 1)) return(1);
+
+  /* Call CVodeSetQuadErrCon to specify whether or not the quadrature variables
+     are to be used in the step size control mechanism within CVODES. Call
+     CVodeQuadSStolerances or CVodeQuadSVtolerances to specify the integration
+     tolerances for the quadrature variables. */
+  flag = CVodeSetQuadErrConB(cvode_mem, indexB, TRUE);
+  if (check_flag(&flag, "CVodeSetQuadErrConB", 1)) return(1);
+
+  /* Call CVodeQuadSStolerancesB to specify the scalar relative and absolute tolerances
+     for the backward problem. */
+  flag = CVodeQuadSStolerancesB(cvode_mem, indexB, reltolB, abstolQB);
+  if (check_flag(&flag, "CVodeQuadSStolerancesB", 1)) return(1);
+
+  /* Backward Integration */
+
+  PrintHead(TB1);
+
+  /* First get results at t = TBout1 */
+
+  /* Call CVodeB to integrate the backward ODE problem. */
+  flag = CVodeB(cvode_mem, TBout1, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+
+  /* Call CVodeGetB to get yB of the backward ODE problem. */
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  /* Call CVodeGetAdjY to get the interpolated value of the forward solution
+     y during a backward integration. */
+  flag = CVodeGetAdjY(cvode_mem, TBout1, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput1(time, TBout1, y, yB);
+
+  /* Then at t = T0 */
+
+  flag = CVodeB(cvode_mem, T0, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+  CVodeGetNumSteps(CVodeGetAdjCVodeBmem(cvode_mem, indexB), &nstB);
+  printf("Done ( nst = %ld )\n", nstB);
+
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  /* Call CVodeGetQuadB to get the quadrature solution vector after a 
+     successful return from CVodeB. */
+  flag = CVodeGetQuadB(cvode_mem, indexB, &time, qB);
+  if (check_flag(&flag, "CVodeGetQuadB", 1)) return(1);
+
+  flag = CVodeGetAdjY(cvode_mem, T0, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput(time, y, yB, qB);
+
+  /* Reinitialize backward phase (new tB0) */
+
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = ZERO;
+
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  printf("Re-initialize CVODES memory for backward run\n");
+
+  flag = CVodeReInitB(cvode_mem, indexB, TB2, yB);
+  if (check_flag(&flag, "CVodeReInitB", 1)) return(1);
+
+  flag = CVodeQuadReInitB(cvode_mem, indexB, qB); 
+  if (check_flag(&flag, "CVodeQuadReInitB", 1)) return(1);
+
+  PrintHead(TB2);
+
+  /* First get results at t = TBout1 */
+
+  flag = CVodeB(cvode_mem, TBout1, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  flag = CVodeGetAdjY(cvode_mem, TBout1, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput1(time, TBout1, y, yB);
+
+  /* Then at t = T0 */
+
+  flag = CVodeB(cvode_mem, T0, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+  CVodeGetNumSteps(CVodeGetAdjCVodeBmem(cvode_mem, indexB), &nstB);
+  printf("Done ( nst = %ld )\n", nstB);
+
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  flag = CVodeGetQuadB(cvode_mem, indexB, &time, qB);
+  if (check_flag(&flag, "CVodeGetQuadB", 1)) return(1);
+
+  flag = CVodeGetAdjY(cvode_mem, T0, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput(time, y, yB, qB);
+
+  /* Free memory */
+  printf("Free memory\n\n");
+
+  CVodeFree(&cvode_mem);
+  N_VDestroy_Serial(y); 
+  N_VDestroy_Serial(q);
+  N_VDestroy_Serial(yB);
+  N_VDestroy_Serial(qB);
+
+  if (ckpnt != NULL) free(ckpnt);
+  free(data);
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,y). 
+*/
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+  UserData data;
+  realtype p1, p2, p3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  yd1 = Ith(ydot,1) = -p1*y1 + p2*y2*y3;
+  yd3 = Ith(ydot,3) = p3*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+*/
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int* colptrs;
+  int* rowvals;
+  realtype* data;
+  UserData userdata;
+  realtype p1, p2, p3;
+ 
+  yval = N_VGetArrayPointer_Serial(y);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data = JacMat->data;
+  userdata = (UserData) user_data;
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMat);
+  
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = -p1;                          rowvals[0] = 0;
+  data[1] = p1;                           rowvals[1] = 1;
+  data[2] = ZERO;                         rowvals[2] = 2;
+
+  data[3] = p2*yval[2];                   rowvals[3] = 0;
+  data[4] = -p2*yval[2]-2*p3*yval[1];     rowvals[4] = 1;
+  data[5] = 2*yval[1];                    rowvals[5] = 2;
+  
+  data[6] = p2*yval[1];                   rowvals[6] = 0;
+  data[7] = -p2*yval[1];                  rowvals[7] = 1;
+  data[8] = ZERO;                         rowvals[8] = 2;
+
+  return(0);
+}
+
+/* 
+ * fQ routine. Compute fQ(t,y). 
+*/
+
+static int fQ(realtype t, N_Vector y, N_Vector qdot, void *user_data)
+{
+  Ith(qdot,1) = Ith(y,3);  
+
+  return(0);
+}
+ 
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+/* 
+ * fB routine. Compute fB(t,y,yB). 
+*/
+
+static int fB(realtype t, N_Vector y, N_Vector yB, N_Vector yBdot, void *user_dataB)
+{
+  UserData data;
+  realtype y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3;
+  realtype l21, l32;
+  
+  data = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y vector */ 
+  y2 = Ith(y,2); y3 = Ith(y,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yB,1); l2 = Ith(yB,2); l3 = Ith(yB,3);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+  l32 = l3-l2;
+
+  /* Load yBdot */
+  Ith(yBdot,1) = - p1*l21;
+  Ith(yBdot,2) = p2*y3*l21 - RCONST(2.0)*p3*y2*l32;
+  Ith(yBdot,3) = p2*y2*l21 - RCONST(1.0);
+
+  return(0);
+}
+
+/* 
+ * JacB routine. Compute JB(t,y,yB). 
+ */
+
+static int JacB(realtype t,
+                N_Vector y, N_Vector yB, N_Vector fyB,
+                SlsMat JacMatB, void *user_dataB,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  realtype *yvalB;
+  int* colptrsB;
+  int* rowvalsB;
+  realtype* dataB;
+  UserData userdata;
+  realtype p1, p2, p3;
+
+  yvalB = N_VGetArrayPointer_Serial(y);
+  colptrsB = (*JacMatB->colptrs);
+  rowvalsB = (*JacMatB->rowvals);
+  dataB = JacMatB->data;
+  userdata = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMatB);
+  
+  /* Load JB */
+  colptrsB[0] = 0;
+  colptrsB[1] = 3;
+  colptrsB[2] = 6;
+  colptrsB[3] = 9;
+
+  dataB[0] = p1;                           rowvalsB[0] = 0;
+  dataB[1] = -p2*yvalB[2];                 rowvalsB[1] = 1;
+  dataB[2] = -p2*yvalB[1];                 rowvalsB[2] = 2;
+
+  dataB[3] =-p1;                           rowvalsB[3] = 0;
+  dataB[4] = p2*yvalB[2]+2*p3*yvalB[1];    rowvalsB[4] = 1;
+  dataB[5] = p2*yvalB[1];                  rowvalsB[5] = 2;
+  
+  dataB[6] = ZERO;                         rowvalsB[6] = 0;
+  dataB[7] = RCONST(-2.0)*p3*yvalB[1];     rowvalsB[7] = 1;
+  dataB[8] = ZERO;                         rowvalsB[8] = 2;
+
+  return(0);
+}
+
+/*
+ * fQB routine. Compute integrand for quadratures 
+*/
+
+static int fQB(realtype t, N_Vector y, N_Vector yB, 
+               N_Vector qBdot, void *user_dataB)
+{
+  realtype y1, y2, y3;
+  realtype l1, l2, l3;
+  realtype l21, l32, y23;
+
+  /* The y vector */
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yB,1); l2 = Ith(yB,2); l3 = Ith(yB,3);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+  l32 = l3-l2;
+  y23 = y2*y3;
+
+  Ith(qBdot,1) = y1*l21;
+  Ith(qBdot,2) = - y23*l21;
+  Ith(qBdot,3) = y2*y2*l32;
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Print heading for backward integration
+ */
+
+static void PrintHead(realtype tB0)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Backward integration from tB0 = %12.4Le\n\n",tB0);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Backward integration from tB0 = %12.4e\n\n",tB0);
+#else
+  printf("Backward integration from tB0 = %12.4e\n\n",tB0);
+#endif
+}
+
+/*
+ * Print intermediate results during backward integration
+ */
+
+static void PrintOutput1(realtype time, realtype t, N_Vector y, N_Vector yB)
+{
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("returned t: %12.4Le\n",time);
+  printf("tout:       %12.4Le\n",t);
+  printf("lambda(t):  %12.4Le %12.4Le %12.4Le\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t):       %12.4Le %12.4Le %12.4Le\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("returned t: %12.4e\n",time);
+  printf("tout:       %12.4e\n",t);
+  printf("lambda(t):  %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t):       %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+#else
+  printf("returned t: %12.4e\n",time);
+  printf("tout:       %12.4e\n",t);
+  printf("lambda(t):  %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t)      : %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+#endif
+  printf("--------------------------------------------------------\n\n");
+}
+
+/*
+ * Print final results of backward integration
+ */
+
+static void PrintOutput(realtype tfinal, N_Vector y, N_Vector yB, N_Vector qB)
+{
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("returned t: %12.4Le\n",tfinal);
+  printf("lambda(t0): %12.4Le %12.4Le %12.4Le\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t0):      %12.4Le %12.4Le %12.4Le\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("dG/dp:      %12.4Le %12.4Le %12.4Le\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("returned t: %12.4e\n",tfinal);
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t0):      %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+#else
+  printf("returned t: %12.4e\n",tfinal);
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t0)     : %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+#endif
+  printf("--------------------------------------------------------\n\n");
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_ASAi_klu.out b/examples/cvodes/serial/cvsRoberts_ASAi_klu.out
new file mode 100644
index 0000000..fd7052d
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_ASAi_klu.out
@@ -0,0 +1,60 @@
+
+Adjoint Sensitivity Example for Chemical Kinetics
+-------------------------------------------------
+
+ODE: dy1/dt = -p1*y1 + p2*y2*y3
+     dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2
+     dy3/dt =  p3*(y2)^2
+
+Find dG/dp for
+     G = int_t0^tB0 g(t,p,y) dt
+     g(t,p,y) = y3
+
+
+Create and allocate CVODES memory for forward runs
+Forward integration ... done ( nst = 847 )
+
+ncheck = 5
+
+--------------------------------------------------------
+G:            3.9982e+07 
+--------------------------------------------------------
+
+Create and allocate CVODES memory for backward run
+Backward integration from tB0 =   4.0000e+07
+
+--------------------------------------------------------
+returned t:   4.0000e+01
+tout:         4.0000e+01
+lambda(t):    3.9967e+07   3.9967e+07   3.9967e+07
+y(t):         7.1583e-01   9.1856e-06   2.8416e-01
+--------------------------------------------------------
+
+Done ( nst = 265 )
+--------------------------------------------------------
+returned t:   0.0000e+00
+lambda(t0):   3.9967e+07   3.9967e+07   3.9967e+07
+y(t0):        1.0000e+00   0.0000e+00   0.0000e+00
+dG/dp:        7.6837e+05  -3.0689e+00   5.1142e-04
+--------------------------------------------------------
+
+Re-initialize CVODES memory for backward run
+Backward integration from tB0 =   5.0000e+01
+
+--------------------------------------------------------
+returned t:   4.0000e+01
+tout:         4.0000e+01
+lambda(t):    2.8959e-01   1.7624e+00   9.3567e+00
+y(t):         7.1583e-01   9.1856e-06   2.8416e-01
+--------------------------------------------------------
+
+Done ( nst = 186 )
+--------------------------------------------------------
+returned t:   0.0000e+00
+lambda(t0):   8.4191e+00   1.6097e+01   1.6097e+01
+y(t0):        1.0000e+00   0.0000e+00   0.0000e+00
+dG/dp:        1.7341e+02  -5.0591e-04   8.4321e-08
+--------------------------------------------------------
+
+Free memory
+
diff --git a/examples/cvodes/serial/cvsRoberts_ASAi_sps.c b/examples/cvodes/serial/cvsRoberts_ASAi_sps.c
new file mode 100644
index 0000000..8dce1df
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_ASAi_sps.c
@@ -0,0 +1,826 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on cvsRoberts_ASAi_dns.c and modified to use SuperLUMT
+ * -----------------------------------------------------------------
+ * Adjoint sensitivity example problem:
+ *
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODES. The problem is from chemical
+ * kinetics, and consists of the following three rate equations.
+ *    dy1/dt = -p1*y1 + p2*y2*y3
+ *    dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2
+ *    dy3/dt =  p3*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The reaction rates are:
+ * p1=0.04, p2=1e4, and p3=3e7. The problem is stiff.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVODE SuperLU_MT linear solver, and a 
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance.
+ * Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * 
+ * Optionally, CVODES can compute sensitivities with respect to
+ * the problem parameters p1, p2, and p3 of the following quantity:
+ *   G = int_t0^t1 g(t,p,y) dt
+ * where
+ *   g(t,p,y) = y3
+ *        
+ * The gradient dG/dp is obtained as:
+ *   dG/dp = int_t0^t1 (g_p - lambda^T f_p ) dt - lambda^T(t0)*y0_p
+ *         = - xi^T(t0) - lambda^T(t0)*y0_p
+ * where lambda and xi are solutions of:
+ *   d(lambda)/dt = - (f_y)^T * lambda - (g_y)^T
+ *   lambda(t1) = 0
+ * and
+ *   d(xi)/dt = - (f_p)^T * lambda + (g_p)^T
+ *   xi(t1) = 0
+ * 
+ * During the backward integration, CVODES also evaluates G as
+ *   G = - phi(t0)
+ * where
+ *   d(phi)/dt = g(t,y,p)
+ *   phi(t1) = 0
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* Header files with a description of contents used */
+#include <cvodes/cvodes.h>              /* prototypes for CVODES fcts. and consts. */
+#include <cvodes/cvodes_superlumt.h>    /* prototypes for CVSUPERLUMT fcts. and constants */
+#include <sundials/sundials_sparse.h>   /* definitions SlsMat */
+#include <nvector/nvector_serial.h>     /* defs. of serial NVECTOR fcts. and macros */
+#include <sundials/sundials_types.h>    /* def. of type realtype */
+#include <sundials/sundials_math.h>     /* definition of ABS */
+
+/* Accessor macros */
+/* These macros are defined in order to write code with which exactly matched
+   the mathematical problem description given above.
+*/
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component, i=1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ      3             /* number of equations                  */
+
+#define RTOL     RCONST(1e-6)  /* scalar relative tolerance            */
+
+#define ATOL1    RCONST(1e-8)  /* vector absolute tolerance components */
+#define ATOL2    RCONST(1e-14)
+#define ATOL3    RCONST(1e-6)
+
+#define ATOLl    RCONST(1e-8)  /* absolute tolerance for adjoint vars. */
+#define ATOLq    RCONST(1e-6)  /* absolute tolerance for quadratures   */
+
+#define T0       RCONST(0.0)   /* initial time                         */
+#define TOUT     RCONST(4e7)   /* final time                           */
+
+#define TB1      RCONST(4e7)   /* starting point for adjoint problem   */
+#define TB2      RCONST(50.0)  /* starting point for adjoint problem   */
+#define TBout1   RCONST(40.0)  /* intermediate t for adjoint problem   */
+
+#define STEPS    150           /* number of steps between check points */
+
+#define NP       3             /* number of problem parameters         */
+
+#define ZERO     RCONST(0.0)
+
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];
+} *UserData;
+
+/* Prototypes of user-supplied functions */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int fQ(realtype t, N_Vector y, N_Vector qdot, void *user_data);
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+static int fB(realtype t, N_Vector y, 
+              N_Vector yB, N_Vector yBdot, void *user_dataB);
+static int JacB(realtype t,
+                N_Vector y, N_Vector yB, N_Vector fyB,
+                SlsMat JacMatB, void *user_dataB,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+static int fQB(realtype t, N_Vector y, N_Vector yB, 
+               N_Vector qBdot, void *user_dataB);
+
+
+/* Prototypes of private functions */
+
+static void PrintHead(realtype tB0);
+static void PrintOutput(realtype tfinal, N_Vector y, N_Vector yB, N_Vector qB);
+static void PrintOutput1(realtype time, realtype t, N_Vector y, N_Vector yB);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+
+  void *cvode_mem;
+
+  realtype reltolQ, abstolQ;
+  N_Vector y, q;
+
+  int steps;
+
+  int indexB;
+
+  realtype reltolB, abstolB, abstolQB;
+  N_Vector yB, qB;
+
+  realtype time;
+  int flag, nthreads, nnz, ncheck;
+
+  long int nst, nstB;
+
+  CVadjCheckPointRec *ckpnt;
+
+  data = NULL;
+  cvode_mem = NULL;
+  ckpnt = NULL;
+  y = yB = qB = NULL;
+
+  /* Print problem description */
+  printf("\nAdjoint Sensitivity Example for Chemical Kinetics\n");
+  printf("-------------------------------------------------\n\n");
+  printf("ODE: dy1/dt = -p1*y1 + p2*y2*y3\n");
+  printf("     dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2\n");
+  printf("     dy3/dt =  p3*(y2)^2\n\n");
+  printf("Find dG/dp for\n");
+  printf("     G = int_t0^tB0 g(t,p,y) dt\n");
+  printf("     g(t,p,y) = y3\n\n\n");
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.04);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+
+  /* Initialize y */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  Ith(y,1) = RCONST(1.0);
+  Ith(y,2) = ZERO;
+  Ith(y,3) = ZERO;
+
+  /* Initialize q */
+  q = N_VNew_Serial(1);
+  if (check_flag((void *)q, "N_VNew_Serial", 0)) return(1);
+  Ith(q,1) = ZERO;
+
+  /* Set the scalar realtive and absolute tolerances reltolQ and abstolQ */
+  reltolQ = RTOL;
+  abstolQ = ATOLq;
+
+  /* Create and allocate CVODES memory for forward run */
+  printf("Create and allocate CVODES memory for forward runs\n");
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+     Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+     user's right hand side function in y'=f(t,y), the initial time T0, and
+     the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeWFtolerances to specify a user-supplied function ewt that sets
+     the multiplicative error weights W_i for use in the weighted RMS norm */
+  flag = CVodeWFtolerances(cvode_mem, ewt);
+  if (check_flag(&flag, "CVodeWFtolerances", 1)) return(1);
+
+  /* Attach user data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if (check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVKLU to specify the CVKLU sparse direct linear solver */
+  nthreads = 1;                 /* no. of threads use when factoring the system */
+  nnz = NEQ * NEQ;              /* max no. of nonzeros entries in the Jac */
+  flag = CVSuperLUMT(cvode_mem, nthreads, NEQ, nnz);
+  if (check_flag(&flag, "CVSuperLUMT", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVSlsSetSparseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVSlsSetSparseJacFn", 1)) return(1);
+
+  /* Call CVodeQuadInit to allocate initernal memory and initialize
+     quadrature integration*/
+  flag = CVodeQuadInit(cvode_mem, fQ, q);
+  if (check_flag(&flag, "CVodeQuadInit", 1)) return(1);
+
+  /* Call CVodeSetQuadErrCon to specify whether or not the quadrature variables
+     are to be used in the step size control mechanism within CVODES. Call
+     CVodeQuadSStolerances or CVodeQuadSVtolerances to specify the integration
+     tolerances for the quadrature variables. */
+  flag = CVodeSetQuadErrCon(cvode_mem, TRUE);
+  if (check_flag(&flag, "CVodeSetQuadErrCon", 1)) return(1);
+
+  /* Call CVodeQuadSStolerances to specify scalar relative and absolute
+     tolerances. */
+  flag = CVodeQuadSStolerances(cvode_mem, reltolQ, abstolQ);
+  if (check_flag(&flag, "CVodeQuadSStolerances", 1)) return(1);
+
+  /* Allocate global memory */
+
+  /* Call CVodeAdjInit to update CVODES memory block by allocting the internal 
+     memory needed for backward integration.*/
+  steps = STEPS;             /* no. of integration steps between two
+                               consecutive ckeckpoints*/
+  flag = CVodeAdjInit(cvode_mem, steps, CV_HERMITE);
+  /*
+  flag = CVodeAdjInit(cvode_mem, steps, CV_POLYNOMIAL);
+  */
+  if (check_flag(&flag, "CVodeAdjInit", 1)) return(1);
+
+  /* Perform forward run */
+  printf("Forward integration ... ");
+
+  /* Call CVodeF to integrate the forward problem over an interval in time and
+     saves checkpointing data */
+  flag = CVodeF(cvode_mem, TOUT, y, &time, CV_NORMAL, &ncheck);
+  if (check_flag(&flag, "CVodeF", 1)) return(1);
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  if (check_flag(&flag, "CVodeGetNumSteps", 1)) return(1);
+
+  printf("done ( nst = %ld )\n",nst);
+  printf("\nncheck = %d\n\n", ncheck);
+
+  flag = CVodeGetQuad(cvode_mem, &time, q);
+  if (check_flag(&flag, "CVodeGetQuad", 1)) return(1);
+
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("G:          %12.4Le \n",Ith(q,1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("G:          %12.4e \n",Ith(q,1));
+#else
+  printf("G:          %12.4e \n",Ith(q,1));
+#endif
+  printf("--------------------------------------------------------\n\n");
+
+  /* Test check point linked list 
+     (uncomment next block to print check point information) */
+  
+  /*
+  {
+    int i;
+    
+    printf("\nList of Check Points (ncheck = %d)\n\n", ncheck);
+    ckpnt = (CVadjCheckPointRec *) malloc ( (ncheck+1)*sizeof(CVadjCheckPointRec));
+    CVodeGetAdjCheckPointsInfo(cvode_mem, ckpnt);
+    for (i=0;i<=ncheck;i++) {
+      printf("Address:       %p\n",ckpnt[i].my_addr);
+      printf("Next:          %p\n",ckpnt[i].next_addr);
+      printf("Time interval: %le  %le\n",ckpnt[i].t0, ckpnt[i].t1);
+      printf("Step number:   %ld\n",ckpnt[i].nstep);
+      printf("Order:         %d\n",ckpnt[i].order);
+      printf("Step size:     %le\n",ckpnt[i].step);
+      printf("\n");
+    }
+    
+  }
+  */
+  
+  /* Initialize yB */
+  yB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yB, "N_VNew_Serial", 0)) return(1);
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = ZERO;
+
+  /* Initialize qB */
+  qB = N_VNew_Serial(NP);
+  if (check_flag((void *)qB, "N_VNew", 0)) return(1);
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  /* Set the scalar relative tolerance reltolB */
+  reltolB = RTOL;               
+
+  /* Set the scalar absolute tolerance abstolB */
+  abstolB = ATOLl;
+
+  /* Set the scalar absolute tolerance abstolQB */
+  abstolQB = ATOLq;
+
+  /* Create and allocate CVODES memory for backward run */
+  printf("Create and allocate CVODES memory for backward run\n");
+
+  /* Call CVodeCreateB to specify the solution method for the backward 
+     problem. */
+  flag = CVodeCreateB(cvode_mem, CV_BDF, CV_NEWTON, &indexB);
+  if (check_flag(&flag, "CVodeCreateB", 1)) return(1);
+
+  /* Call CVodeInitB to allocate internal memory and initialize the 
+     backward problem. */
+  flag = CVodeInitB(cvode_mem, indexB, fB, TB1, yB);
+  if (check_flag(&flag, "CVodeInitB", 1)) return(1);
+
+  /* Set the scalar relative and absolute tolerances. */
+  flag = CVodeSStolerancesB(cvode_mem, indexB, reltolB, abstolB);
+  if (check_flag(&flag, "CVodeSStolerancesB", 1)) return(1);
+
+  /* Attach the user data for backward problem. */
+  flag = CVodeSetUserDataB(cvode_mem, indexB, data);
+  if (check_flag(&flag, "CVodeSetUserDataB", 1)) return(1);
+
+  /* Call CVKLUB to initialize the CVKLU sparse linear solver for the backward 
+     problem. */
+  flag = CVSuperLUMTB(cvode_mem, indexB, nthreads, NEQ, nnz);
+  if (check_flag(&flag, "CVSuperLUMTb", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) for the backward problem */
+  flag = CVSlsSetSparseJacFnB(cvode_mem, indexB, JacB);
+  if (check_flag(&flag, "CVSlsSetSparseJacFnB", 1)) return(1);
+
+  /* Call CVodeQuadInitB to allocate internal memory and initialize backward
+     quadrature integration. */
+  flag = CVodeQuadInitB(cvode_mem, indexB, fQB, qB);
+  if (check_flag(&flag, "CVodeQuadInitB", 1)) return(1);
+
+  /* Call CVodeSetQuadErrCon to specify whether or not the quadrature variables
+     are to be used in the step size control mechanism within CVODES. Call
+     CVodeQuadSStolerances or CVodeQuadSVtolerances to specify the integration
+     tolerances for the quadrature variables. */
+  flag = CVodeSetQuadErrConB(cvode_mem, indexB, TRUE);
+  if (check_flag(&flag, "CVodeSetQuadErrConB", 1)) return(1);
+
+  /* Call CVodeQuadSStolerancesB to specify the scalar relative and absolute tolerances
+     for the backward problem. */
+  flag = CVodeQuadSStolerancesB(cvode_mem, indexB, reltolB, abstolQB);
+  if (check_flag(&flag, "CVodeQuadSStolerancesB", 1)) return(1);
+
+  /* Backward Integration */
+
+  PrintHead(TB1);
+
+  /* First get results at t = TBout1 */
+
+  /* Call CVodeB to integrate the backward ODE problem. */
+  flag = CVodeB(cvode_mem, TBout1, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+
+  /* Call CVodeGetB to get yB of the backward ODE problem. */
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  /* Call CVodeGetAdjY to get the interpolated value of the forward solution
+     y during a backward integration. */
+  flag = CVodeGetAdjY(cvode_mem, TBout1, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput1(time, TBout1, y, yB);
+
+  /* Then at t = T0 */
+
+  flag = CVodeB(cvode_mem, T0, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+  CVodeGetNumSteps(CVodeGetAdjCVodeBmem(cvode_mem, indexB), &nstB);
+  printf("Done ( nst = %ld )\n", nstB);
+
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  /* Call CVodeGetQuadB to get the quadrature solution vector after a 
+     successful return from CVodeB. */
+  flag = CVodeGetQuadB(cvode_mem, indexB, &time, qB);
+  if (check_flag(&flag, "CVodeGetQuadB", 1)) return(1);
+
+  flag = CVodeGetAdjY(cvode_mem, T0, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput(time, y, yB, qB);
+
+  /* Reinitialize backward phase (new tB0) */
+
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = ZERO;
+
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  printf("Re-initialize CVODES memory for backward run\n");
+
+  flag = CVodeReInitB(cvode_mem, indexB, TB2, yB);
+  if (check_flag(&flag, "CVodeReInitB", 1)) return(1);
+
+  flag = CVodeQuadReInitB(cvode_mem, indexB, qB); 
+  if (check_flag(&flag, "CVodeQuadReInitB", 1)) return(1);
+
+  PrintHead(TB2);
+
+  /* First get results at t = TBout1 */
+
+  flag = CVodeB(cvode_mem, TBout1, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  flag = CVodeGetAdjY(cvode_mem, TBout1, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput1(time, TBout1, y, yB);
+
+  /* Then at t = T0 */
+
+  flag = CVodeB(cvode_mem, T0, CV_NORMAL);
+  if (check_flag(&flag, "CVodeB", 1)) return(1);
+  CVodeGetNumSteps(CVodeGetAdjCVodeBmem(cvode_mem, indexB), &nstB);
+  printf("Done ( nst = %ld )\n", nstB);
+
+  flag = CVodeGetB(cvode_mem, indexB, &time, yB);
+  if (check_flag(&flag, "CVodeGetB", 1)) return(1);
+
+  flag = CVodeGetQuadB(cvode_mem, indexB, &time, qB);
+  if (check_flag(&flag, "CVodeGetQuadB", 1)) return(1);
+
+  flag = CVodeGetAdjY(cvode_mem, T0, y);
+  if (check_flag(&flag, "CVodeGetAdjY", 1)) return(1);
+
+  PrintOutput(time, y, yB, qB);
+
+  /* Free memory */
+  printf("Free memory\n\n");
+
+  CVodeFree(&cvode_mem);
+  N_VDestroy_Serial(y); 
+  N_VDestroy_Serial(q);
+  N_VDestroy_Serial(yB);
+  N_VDestroy_Serial(qB);
+
+  if (ckpnt != NULL) free(ckpnt);
+  free(data);
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,y). 
+*/
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+  UserData data;
+  realtype p1, p2, p3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  yd1 = Ith(ydot,1) = -p1*y1 + p2*y2*y3;
+  yd3 = Ith(ydot,3) = p3*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+*/
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int* colptrs;
+  int* rowvals;
+  realtype* data;
+  UserData userdata;
+  realtype p1, p2, p3;
+ 
+  yval = N_VGetArrayPointer_Serial(y);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data = JacMat->data;
+  userdata = (UserData) user_data;
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMat);
+  
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = -p1;                          rowvals[0] = 0;
+  data[1] = p1;                           rowvals[1] = 1;
+  data[2] = ZERO;                         rowvals[2] = 2;
+
+  data[3] = p2*yval[2];                   rowvals[3] = 0;
+  data[4] = -p2*yval[2]-2*p3*yval[1];     rowvals[4] = 1;
+  data[5] = 2*yval[1];                    rowvals[5] = 2;
+  
+  data[6] = p2*yval[1];                   rowvals[6] = 0;
+  data[7] = -p2*yval[1];                  rowvals[7] = 1;
+  data[8] = ZERO;                         rowvals[8] = 2;
+
+  return(0);
+}
+
+/* 
+ * fQ routine. Compute fQ(t,y). 
+*/
+
+static int fQ(realtype t, N_Vector y, N_Vector qdot, void *user_data)
+{
+  Ith(qdot,1) = Ith(y,3);  
+
+  return(0);
+}
+ 
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+/* 
+ * fB routine. Compute fB(t,y,yB). 
+*/
+
+static int fB(realtype t, N_Vector y, N_Vector yB, N_Vector yBdot, void *user_dataB)
+{
+  UserData data;
+  realtype y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3;
+  realtype l21, l32;
+  
+  data = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y vector */ 
+  y2 = Ith(y,2); y3 = Ith(y,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yB,1); l2 = Ith(yB,2); l3 = Ith(yB,3);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+  l32 = l3-l2;
+
+  /* Load yBdot */
+  Ith(yBdot,1) = - p1*l21;
+  Ith(yBdot,2) = p2*y3*l21 - RCONST(2.0)*p3*y2*l32;
+  Ith(yBdot,3) = p2*y2*l21 - RCONST(1.0);
+
+  return(0);
+}
+
+/* 
+ * JacB routine. Compute JB(t,y,yB). 
+ */
+
+static int JacB(realtype t,
+                N_Vector y, N_Vector yB, N_Vector fyB,
+                SlsMat JacMatB, void *user_dataB,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  realtype *yvalB;
+  int* colptrsB;
+  int* rowvalsB;
+  realtype* dataB;
+  UserData userdata;
+  realtype p1, p2, p3;
+
+  yvalB = N_VGetArrayPointer_Serial(y);
+  colptrsB = (*JacMatB->colptrs);
+  rowvalsB = (*JacMatB->rowvals);
+  dataB = JacMatB->data;
+  userdata = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMatB);
+  
+  /* Load JB */
+  colptrsB[0] = 0;
+  colptrsB[1] = 3;
+  colptrsB[2] = 6;
+  colptrsB[3] = 9;
+
+  dataB[0] = p1;                           rowvalsB[0] = 0;
+  dataB[1] = -p2*yvalB[2];                 rowvalsB[1] = 1;
+  dataB[2] = -p2*yvalB[1];                 rowvalsB[2] = 2;
+
+  dataB[3] =-p1;                           rowvalsB[3] = 0;
+  dataB[4] = p2*yvalB[2]+2*p3*yvalB[1];    rowvalsB[4] = 1;
+  dataB[5] = p2*yvalB[1];                  rowvalsB[5] = 2;
+  
+  dataB[6] = ZERO;                         rowvalsB[6] = 0;
+  dataB[7] = RCONST(-2.0)*p3*yvalB[1];     rowvalsB[7] = 1;
+  dataB[8] = ZERO;                         rowvalsB[8] = 2;
+
+  return(0);
+}
+
+/*
+ * fQB routine. Compute integrand for quadratures 
+*/
+
+static int fQB(realtype t, N_Vector y, N_Vector yB, 
+               N_Vector qBdot, void *user_dataB)
+{
+  realtype y1, y2, y3;
+  realtype l1, l2, l3;
+  realtype l21, l32, y23;
+
+  /* The y vector */
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yB,1); l2 = Ith(yB,2); l3 = Ith(yB,3);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+  l32 = l3-l2;
+  y23 = y2*y3;
+
+  Ith(qBdot,1) = y1*l21;
+  Ith(qBdot,2) = - y23*l21;
+  Ith(qBdot,3) = y2*y2*l32;
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Print heading for backward integration
+ */
+
+static void PrintHead(realtype tB0)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Backward integration from tB0 = %12.4Le\n\n",tB0);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Backward integration from tB0 = %12.4e\n\n",tB0);
+#else
+  printf("Backward integration from tB0 = %12.4e\n\n",tB0);
+#endif
+}
+
+/*
+ * Print intermediate results during backward integration
+ */
+
+static void PrintOutput1(realtype time, realtype t, N_Vector y, N_Vector yB)
+{
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("returned t: %12.4Le\n",time);
+  printf("tout:       %12.4Le\n",t);
+  printf("lambda(t):  %12.4Le %12.4Le %12.4Le\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t):       %12.4Le %12.4Le %12.4Le\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("returned t: %12.4e\n",time);
+  printf("tout:       %12.4e\n",t);
+  printf("lambda(t):  %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t):       %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+#else
+  printf("returned t: %12.4e\n",time);
+  printf("tout:       %12.4e\n",t);
+  printf("lambda(t):  %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t)      : %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+#endif
+  printf("--------------------------------------------------------\n\n");
+}
+
+/*
+ * Print final results of backward integration
+ */
+
+static void PrintOutput(realtype tfinal, N_Vector y, N_Vector yB, N_Vector qB)
+{
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("returned t: %12.4Le\n",tfinal);
+  printf("lambda(t0): %12.4Le %12.4Le %12.4Le\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t0):      %12.4Le %12.4Le %12.4Le\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("dG/dp:      %12.4Le %12.4Le %12.4Le\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("returned t: %12.4e\n",tfinal);
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t0):      %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+#else
+  printf("returned t: %12.4e\n",tfinal);
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+  printf("y(t0)     : %12.4e %12.4e %12.4e\n", 
+         Ith(y,1), Ith(y,2), Ith(y,3));
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+#endif
+  printf("--------------------------------------------------------\n\n");
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_ASAi_sps.out b/examples/cvodes/serial/cvsRoberts_ASAi_sps.out
new file mode 100644
index 0000000..18fee9d
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_ASAi_sps.out
@@ -0,0 +1,60 @@
+
+Adjoint Sensitivity Example for Chemical Kinetics
+-------------------------------------------------
+
+ODE: dy1/dt = -p1*y1 + p2*y2*y3
+     dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2
+     dy3/dt =  p3*(y2)^2
+
+Find dG/dp for
+     G = int_t0^tB0 g(t,p,y) dt
+     g(t,p,y) = y3
+
+
+Create and allocate CVODES memory for forward runs
+Forward integration ... done ( nst = 829 )
+
+ncheck = 5
+
+--------------------------------------------------------
+G:            3.9983e+07 
+--------------------------------------------------------
+
+Create and allocate CVODES memory for backward run
+Backward integration from tB0 =   4.0000e+07
+
+--------------------------------------------------------
+returned t:   4.0000e+01
+tout:         4.0000e+01
+lambda(t):    3.9967e+07   3.9967e+07   3.9967e+07
+y(t):         7.1583e-01   9.1856e-06   2.8416e-01
+--------------------------------------------------------
+
+Done ( nst = 214 )
+--------------------------------------------------------
+returned t:   0.0000e+00
+lambda(t0):   3.9967e+07   3.9967e+07   3.9967e+07
+y(t0):        1.0000e+00   0.0000e+00   0.0000e+00
+dG/dp:        7.6843e+05  -3.0691e+00   5.1149e-04
+--------------------------------------------------------
+
+Re-initialize CVODES memory for backward run
+Backward integration from tB0 =   5.0000e+01
+
+--------------------------------------------------------
+returned t:   4.0000e+01
+tout:         4.0000e+01
+lambda(t):    2.8959e-01   1.7624e+00   9.3567e+00
+y(t):         7.1583e-01   9.1856e-06   2.8416e-01
+--------------------------------------------------------
+
+Done ( nst = 202 )
+--------------------------------------------------------
+returned t:   0.0000e+00
+lambda(t0):   8.4190e+00   1.6097e+01   1.6097e+01
+y(t0):        1.0000e+00   0.0000e+00   0.0000e+00
+dG/dp:        1.7341e+02  -5.0590e-04   8.4320e-08
+--------------------------------------------------------
+
+Free memory
+
diff --git a/examples/cvodes/serial/cvsRoberts_FSA_dns.c b/examples/cvodes/serial/cvsRoberts_FSA_dns.c
new file mode 100644
index 0000000..7d6aa08
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_FSA_dns.c
@@ -0,0 +1,626 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODES. The problem is from chemical
+ * kinetics, and consists of the following three rate equations:
+ *    dy1/dt = -p1*y1 + p2*y2*y3
+ *    dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2
+ *    dy3/dt =  p3*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions y1 = 1.0, y2 = y3 = 0. The reaction rates are: p1=0.04,
+ * p2=1e4, and p3=3e7. The problem is stiff.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVODES dense linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance.
+ * Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * Optionally, CVODES can compute sensitivities with respect to the
+ * problem parameters p1, p2, and p3.
+ * The sensitivity right hand side is given analytically through the
+ * user routine fS (of type SensRhs1Fn).
+ * Any of three sensitivity methods (SIMULTANEOUS, STAGGERED, and
+ * STAGGERED1) can be used and sensitivities may be included in the
+ * error test or not (error control set on TRUE or FALSE,
+ * respectively).
+ *
+ * Execution:
+ *
+ * If no sensitivities are desired:
+ *    % cvsRoberts_FSA_dns -nosensi
+ * If sensitivities are to be computed:
+ *    % cvsRoberts_FSA_dns -sensi sensi_meth err_con
+ * where sensi_meth is one of {sim, stg, stg1} and err_con is one of
+ * {t, f}.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <cvodes/cvodes.h>           /* prototypes for CVODES fcts. and consts. */
+#include <cvodes/cvodes_dense.h>     /* prototype for CVDENSE fcts. and constants */
+#include <nvector/nvector_serial.h>  /* defs. of serial NVECTOR fcts. and macros  */
+#include <sundials/sundials_types.h> /* def. of type realtype */
+#include <sundials/sundials_math.h>  /* definition of ABS */
+
+/* Accessor macros */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i=1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* (i,j)-th matrix component i,j=1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ   3             /* number of equations  */
+#define Y1    RCONST(1.0)   /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1e-4)  /* scalar relative tolerance */
+#define ATOL1 RCONST(1e-8)  /* vector absolute tolerance components */
+#define ATOL2 RCONST(1e-14)
+#define ATOL3 RCONST(1e-6)
+#define T0    RCONST(0.0)   /* initial time */
+#define T1    RCONST(0.4)   /* first output time */
+#define TMULT RCONST(10.0)  /* output time factor */
+#define NOUT  12            /* number of output times */
+
+#define NP    3             /* number of problem parameters */
+#define NS    3             /* number of sensitivities computed */
+
+#define ZERO  RCONST(0.0)
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];           /* problem parameters */
+} *UserData;
+
+/* Prototypes of functions by CVODES */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int fS(int Ns, realtype t, N_Vector y, N_Vector ydot, 
+              int iS, N_Vector yS, N_Vector ySdot, 
+              void *user_data, N_Vector tmp1, N_Vector tmp2);
+
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+/* Prototypes of private functions */
+
+static void ProcessArgs(int argc, char *argv[],
+                        booleantype *sensi, int *sensi_meth, 
+                        booleantype *err_con);
+static void WrongArgs(char *name);
+static void PrintOutput(void *cvode_mem, realtype t, N_Vector u);
+static void PrintOutputS(N_Vector *uS);
+static void PrintFinalStats(void *cvode_mem, booleantype sensi);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  void *cvode_mem;
+  UserData data;
+  realtype t, tout;
+  N_Vector y;
+  int iout, flag;
+
+  realtype pbar[NS];
+  int is; 
+  N_Vector *yS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  cvode_mem = NULL;
+  data      = NULL;
+  y         =  NULL;
+  yS        = NULL;
+
+  /* Process arguments */
+  ProcessArgs(argc, argv, &sensi, &sensi_meth, &err_con);
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.04);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+
+  /* Initial conditions */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Create CVODES object */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Allocate space for CVODES */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Use private function to compute error weights */
+  flag = CVodeWFtolerances(cvode_mem, ewt);
+  if (check_flag(&flag, "CVodeSetEwtFn", 1)) return(1);
+
+  /* Attach user data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if (check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Attach linear solver */
+  flag = CVDense(cvode_mem, NEQ);
+  if (check_flag(&flag, "CVDense", 1)) return(1);
+
+  flag = CVDlsSetDenseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVDlsSetDenseJacFn", 1)) return(1);
+
+  printf("\n3-species chemical kinetics problem\n");
+
+  /* Sensitivity-related settings */
+  if (sensi) {
+
+    pbar[0] = data->p[0];
+    pbar[1] = data->p[1];
+    pbar[2] = data->p[2];
+
+    yS = N_VCloneVectorArray_Serial(NS, y);
+    if (check_flag((void *)yS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for (is=0;is<NS;is++) N_VConst(ZERO, yS[is]);
+
+    flag = CVodeSensInit1(cvode_mem, NS, sensi_meth, fS, yS);
+    if(check_flag(&flag, "CVodeSensInit", 1)) return(1);
+
+    flag = CVodeSensEEtolerances(cvode_mem);
+    if(check_flag(&flag, "CVodeSensEEtolerances", 1)) return(1);
+
+    flag = CVodeSetSensErrCon(cvode_mem, err_con);
+    if (check_flag(&flag, "CVodeSetSensErrCon", 1)) return(1);
+
+    flag = CVodeSetSensParams(cvode_mem, NULL, pbar, NULL);
+    if (check_flag(&flag, "CVodeSetSensParams", 1)) return(1);
+
+    printf("Sensitivity: YES ");
+    if(sensi_meth == CV_SIMULTANEOUS)   
+      printf("( SIMULTANEOUS +");
+    else 
+      if(sensi_meth == CV_STAGGERED) printf("( STAGGERED +");
+      else                           printf("( STAGGERED1 +");   
+    if(err_con) printf(" FULL ERROR CONTROL )");
+    else        printf(" PARTIAL ERROR CONTROL )");
+
+  } else {
+
+    printf("Sensitivity: NO ");
+
+  }
+  
+  /* In loop over output points, call CVode, print results, test for error */
+  
+  printf("\n\n");
+  printf("===========================================");
+  printf("============================\n");
+  printf("     T     Q       H      NST           y1");
+  printf("           y2           y3    \n");
+  printf("===========================================");
+  printf("============================\n");
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout *= TMULT) {
+
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    if (check_flag(&flag, "CVode", 1)) break;
+
+    PrintOutput(cvode_mem, t, y);
+
+    if (sensi) {
+      flag = CVodeGetSens(cvode_mem, &t, yS);
+      if (check_flag(&flag, "CVodeGetSens", 1)) break;
+      PrintOutputS(yS);
+    } 
+    printf("-----------------------------------------");
+    printf("------------------------------\n");
+
+  }
+
+  /* Print final statistics */
+  PrintFinalStats(cvode_mem, sensi);
+
+  /* Free memory */
+
+  N_VDestroy_Serial(y);                    /* Free y vector */
+  if (sensi) {
+    N_VDestroyVectorArray_Serial(yS, NS);  /* Free yS vector */
+  }
+  free(data);                              /* Free user data */
+  CVodeFree(&cvode_mem);                   /* Free CVODES memory */
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+  UserData data;
+  realtype p1, p2, p3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  yd1 = Ith(ydot,1) = -p1*y1 + p2*y2*y3;
+  yd3 = Ith(ydot,3) = p3*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+ */
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y1, y2, y3;
+  UserData data;
+  realtype p1, p2, p3;
+ 
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+ 
+  IJth(J,1,1) = -p1;  IJth(J,1,2) = p2*y3;          IJth(J,1,3) = p2*y2;
+  IJth(J,2,1) =  p1;  IJth(J,2,2) = -p2*y3-2*p3*y2; IJth(J,2,3) = -p2*y2;
+                      IJth(J,3,2) = 2*p3*y2;
+
+  return(0);
+}
+ 
+/* 
+ * fS routine. Compute sensitivity r.h.s. 
+ */
+
+static int fS(int Ns, realtype t, N_Vector y, N_Vector ydot, 
+              int iS, N_Vector yS, N_Vector ySdot, 
+              void *user_data, N_Vector tmp1, N_Vector tmp2)
+{
+  UserData data;
+  realtype p1, p2, p3;
+  realtype y1, y2, y3;
+  realtype s1, s2, s3;
+  realtype sd1, sd2, sd3;
+
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  y1 = Ith(y,1);  y2 = Ith(y,2);  y3 = Ith(y,3);
+  s1 = Ith(yS,1); s2 = Ith(yS,2); s3 = Ith(yS,3);
+
+  sd1 = -p1*s1 + p2*y3*s2 + p2*y2*s3;
+  sd3 = 2*p3*y2*s2;
+  sd2 = -sd1-sd3;
+
+  switch (iS) {
+  case 0:
+    sd1 += -y1;
+    sd2 +=  y1;
+    break;
+  case 1:
+    sd1 +=  y2*y3;
+    sd2 += -y2*y3;
+    break;
+  case 2:
+    sd2 += -y2*y2;
+    sd3 +=  y2*y2;
+    break;
+  }
+  
+  Ith(ySdot,1) = sd1;
+  Ith(ySdot,2) = sd2;
+  Ith(ySdot,3) = sd3;
+
+  return(0);
+}
+
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Process and verify arguments to cvsfwddenx.
+ */
+
+static void ProcessArgs(int argc, char *argv[], 
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = CV_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = CV_STAGGERED;
+    else if (strcmp(argv[2],"stg1") == 0)
+      *sensi_meth = CV_STAGGERED1;
+    else 
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(argv[0]);
+  }
+
+}
+
+static void WrongArgs(char *name)
+{
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim, stg, or stg1\n");
+    printf("         err_con    = t or f\n");
+    
+    exit(0);
+}
+
+/*
+ * Print current t, step count, order, stepsize, and solution.
+ */
+
+static void PrintOutput(void *cvode_mem, realtype t, N_Vector u)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%8.3Le %2d  %8.3Le %5ld\n", t, qu, hu, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#else
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#endif
+
+  printf("                  Solution       ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", udata[0], udata[1], udata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#endif
+
+}
+
+/* 
+ * Print sensitivities.
+*/
+
+static void PrintOutputS(N_Vector *uS)
+{
+  realtype *sdata;
+
+  sdata = N_VGetArrayPointer_Serial(uS[0]);
+  printf("                  Sensitivity 1  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  
+  sdata = N_VGetArrayPointer_Serial(uS[1]);
+  printf("                  Sensitivity 2  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+  sdata = N_VGetArrayPointer_Serial(uS[2]);
+  printf("                  Sensitivity 3  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+}
+
+/* 
+ * Print some final statistics from the CVODES memory.
+ */
+
+static void PrintFinalStats(void *cvode_mem, booleantype sensi)
+{
+  long int nst;
+  long int nfe, nsetups, nni, ncfn, netf;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  long int nje, nfeLS;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  if (sensi) {
+    flag = CVodeGetSensNumRhsEvals(cvode_mem, &nfSe);
+    check_flag(&flag, "CVodeGetSensNumRhsEvals", 1);
+    flag = CVodeGetNumRhsEvalsSens(cvode_mem, &nfeS);
+    check_flag(&flag, "CVodeGetNumRhsEvalsSens", 1);
+    flag = CVodeGetSensNumLinSolvSetups(cvode_mem, &nsetupsS);
+    check_flag(&flag, "CVodeGetSensNumLinSolvSetups", 1);
+    flag = CVodeGetSensNumErrTestFails(cvode_mem, &netfS);
+    check_flag(&flag, "CVodeGetSensNumErrTestFails", 1);
+    flag = CVodeGetSensNumNonlinSolvIters(cvode_mem, &nniS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvIters", 1);
+    flag = CVodeGetSensNumNonlinSolvConvFails(cvode_mem, &ncfnS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvConvFails", 1);
+  }
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  printf("\nFinal Statistics\n\n");
+  printf("nst     = %5ld\n\n", nst);
+  printf("nfe     = %5ld\n",   nfe);
+  printf("netf    = %5ld    nsetups  = %5ld\n", netf, nsetups);
+  printf("nni     = %5ld    ncfn     = %5ld\n", nni, ncfn);
+
+  if(sensi) {
+    printf("\n");
+    printf("nfSe    = %5ld    nfeS     = %5ld\n", nfSe, nfeS);
+    printf("netfs   = %5ld    nsetupsS = %5ld\n", netfS, nsetupsS);
+    printf("nniS    = %5ld    ncfnS    = %5ld\n", nniS, ncfnS);
+  }
+
+  printf("\n");
+  printf("nje    = %5ld    nfeLS     = %5ld\n", nje, nfeLS);
+
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_FSA_dns.out b/examples/cvodes/serial/cvsRoberts_FSA_dns.out
new file mode 100644
index 0000000..74a4952
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_FSA_dns.out
@@ -0,0 +1,93 @@
+
+3-species chemical kinetics problem
+Sensitivity: YES ( SIMULTANEOUS + FULL ERROR CONTROL )
+
+=======================================================================
+     T     Q       H      NST           y1           y2           y3    
+=======================================================================
+4.000e-01  3  4.881e-02   115
+                  Solution         9.8517e-01   3.3864e-05   1.4794e-02 
+                  Sensitivity 1   -3.5595e-01   3.9025e-04   3.5556e-01 
+                  Sensitivity 2    9.5431e-08  -2.1309e-10  -9.5218e-08 
+                  Sensitivity 3   -1.5833e-11  -5.2900e-13   1.6362e-11 
+-----------------------------------------------------------------------
+4.000e+00  5  2.363e-01   138
+                  Solution         9.0552e-01   2.2405e-05   9.4459e-02 
+                  Sensitivity 1   -1.8761e+00   1.7922e-04   1.8759e+00 
+                  Sensitivity 2    2.9614e-06  -5.8305e-10  -2.9608e-06 
+                  Sensitivity 3   -4.9334e-10  -2.7626e-13   4.9362e-10 
+-----------------------------------------------------------------------
+4.000e+01  3  1.485e+00   219
+                  Solution         7.1583e-01   9.1856e-06   2.8416e-01 
+                  Sensitivity 1   -4.2475e+00   4.5913e-05   4.2475e+00 
+                  Sensitivity 2    1.3731e-05  -2.3573e-10  -1.3730e-05 
+                  Sensitivity 3   -2.2883e-09  -1.1380e-13   2.2884e-09 
+-----------------------------------------------------------------------
+4.000e+02  3  8.882e+00   331
+                  Solution         4.5052e-01   3.2229e-06   5.4947e-01 
+                  Sensitivity 1   -5.9584e+00   3.5431e-06   5.9584e+00 
+                  Sensitivity 2    2.2738e-05  -2.2605e-11  -2.2738e-05 
+                  Sensitivity 3   -3.7896e-09  -4.9948e-14   3.7897e-09 
+-----------------------------------------------------------------------
+4.000e+03  2  1.090e+02   486
+                  Solution         1.8317e-01   8.9403e-07   8.1683e-01 
+                  Sensitivity 1   -4.7500e+00  -5.9957e-06   4.7500e+00 
+                  Sensitivity 2    1.8809e-05   2.3136e-11  -1.8809e-05 
+                  Sensitivity 3   -3.1348e-09  -1.8757e-14   3.1348e-09 
+-----------------------------------------------------------------------
+4.000e+04  3  1.178e+03   588
+                  Solution         3.8977e-02   1.6215e-07   9.6102e-01 
+                  Sensitivity 1   -1.5748e+00  -2.7620e-06   1.5748e+00 
+                  Sensitivity 2    6.2869e-06   1.1002e-11  -6.2869e-06 
+                  Sensitivity 3   -1.0478e-09  -4.5362e-15   1.0478e-09 
+-----------------------------------------------------------------------
+4.000e+05  3  1.514e+04   645
+                  Solution         4.9387e-03   1.9852e-08   9.9506e-01 
+                  Sensitivity 1   -2.3639e-01  -4.5861e-07   2.3639e-01 
+                  Sensitivity 2    9.4525e-07   1.8334e-12  -9.4525e-07 
+                  Sensitivity 3   -1.5751e-10  -6.3629e-16   1.5751e-10 
+-----------------------------------------------------------------------
+4.000e+06  4  2.323e+05   696
+                  Solution         5.1684e-04   2.0684e-09   9.9948e-01 
+                  Sensitivity 1   -2.5667e-02  -5.1064e-08   2.5667e-02 
+                  Sensitivity 2    1.0266e-07   2.0424e-13  -1.0266e-07 
+                  Sensitivity 3   -1.7111e-11  -6.8513e-17   1.7111e-11 
+-----------------------------------------------------------------------
+4.000e+07  4  1.776e+06   753
+                  Solution         5.2039e-05   2.0817e-10   9.9995e-01 
+                  Sensitivity 1   -2.5991e-03  -5.1931e-09   2.5991e-03 
+                  Sensitivity 2    1.0396e-08   2.0772e-14  -1.0397e-08 
+                  Sensitivity 3   -1.7330e-12  -6.9328e-18   1.7330e-12 
+-----------------------------------------------------------------------
+4.000e+08  4  2.766e+07   802
+                  Solution         5.2106e-06   2.0842e-11   9.9999e-01 
+                  Sensitivity 1   -2.6063e-04  -5.2149e-10   2.6063e-04 
+                  Sensitivity 2    1.0425e-09   2.0859e-15  -1.0425e-09 
+                  Sensitivity 3   -1.7366e-13  -6.9467e-19   1.7367e-13 
+-----------------------------------------------------------------------
+4.000e+09  2  4.183e+08   836
+                  Solution         5.1881e-07   2.0752e-12   1.0000e-00 
+                  Sensitivity 1   -2.5907e-05  -5.1717e-11   2.5907e-05 
+                  Sensitivity 2    1.0363e-10   2.0687e-16  -1.0363e-10 
+                  Sensitivity 3   -1.7293e-14  -6.9174e-20   1.7293e-14 
+-----------------------------------------------------------------------
+4.000e+10  2  3.799e+09   859
+                  Solution         6.5181e-08   2.6072e-13   1.0000e-00 
+                  Sensitivity 1   -2.4884e-06  -3.3032e-12   2.4884e-06 
+                  Sensitivity 2    9.9534e-12   1.3213e-17  -9.9534e-12 
+                  Sensitivity 3   -2.1727e-15  -8.6908e-21   2.1727e-15 
+-----------------------------------------------------------------------
+
+Final Statistics
+
+nst     =   859
+
+nfe     =  1222
+netf    =    29    nsetups  =   142
+nni     =  1218    ncfn     =     4
+
+nfSe    =  3666    nfeS     =     0
+netfs   =     0    nsetupsS =     0
+nniS    =     0    ncfnS    =     0
+
+nje    =    24    nfeLS     =     0
diff --git a/examples/cvodes/serial/cvsRoberts_FSA_klu.c b/examples/cvodes/serial/cvsRoberts_FSA_klu.c
new file mode 100644
index 0000000..cac5025
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_FSA_klu.c
@@ -0,0 +1,672 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date: $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on cvsRoberts_FSA_dns.c and modified to use KLU
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODES for Forward Sensitivity 
+ * Analysis. The problem is from chemical kinetics, and consists
+ * of the following three rate equations:
+ *    dy1/dt = -p1*y1 + p2*y2*y3
+ *    dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2
+ *    dy3/dt =  p3*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions y1 = 1.0, y2 = y3 = 0. The reaction rates are: p1=0.04,
+ * p2=1e4, and p3=3e7. The problem is stiff.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVODES KLU linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance.
+ * Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * Optionally, CVODES can compute sensitivities with respect to the
+ * problem parameters p1, p2, and p3.
+ * The sensitivity right hand side is given analytically through the
+ * user routine fS (of type SensRhs1Fn).
+ * Any of three sensitivity methods (SIMULTANEOUS, STAGGERED, and
+ * STAGGERED1) can be used and sensitivities may be included in the
+ * error test or not (error control set on TRUE or FALSE,
+ * respectively).
+ *
+ * Execution:
+ *
+ * If no sensitivities are desired:
+ *    % cvsRoberts_FSA_klu -nosensi
+ * If sensitivities are to be computed:
+ *    % cvsRoberts_FSA_klu -sensi sensi_meth err_con
+ * where sensi_meth is one of {sim, stg, stg1} and err_con is one of
+ * {t, f}.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Header files with a description of contents used */
+
+#include <cvodes/cvodes.h>             /* prototypes for CVODES fcts. and consts. */
+#include <cvodes/cvodes_klu.h>         /* prototypes for CVKLU fcts. and constants */
+#include <sundials/sundials_sparse.h>  /* definitions SlsMat */
+#include <nvector/nvector_serial.h>    /* defs. of serial NVECTOR fcts. and macros */
+#include <sundials/sundials_types.h>   /* def. of type realtype */
+#include <sundials/sundials_math.h>    /* definition of ABS */
+
+/* Accessor macros */
+/* These macros are defined in order to write code with which exactly matched
+   the mathematical problem description given above.
+*/
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i=1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ   3             /* number of equations  */
+#define Y1    RCONST(1.0)   /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1e-4)  /* scalar relative tolerance */
+#define ATOL1 RCONST(1e-8)  /* vector absolute tolerance components */
+#define ATOL2 RCONST(1e-14)
+#define ATOL3 RCONST(1e-6)
+#define T0    RCONST(0.0)   /* initial time */
+#define T1    RCONST(0.4)   /* first output time */
+#define TMULT RCONST(10.0)  /* output time factor */
+#define NOUT  12            /* number of output times */
+
+#define NP    3             /* number of problem parameters */
+#define NS    3             /* number of sensitivities computed */
+
+#define ZERO  RCONST(0.0)
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];           /* problem parameters */
+} *UserData;
+
+/* Prototypes of functions by CVODES */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int fS(int Ns, realtype t, N_Vector y, N_Vector ydot, 
+              int iS, N_Vector yS, N_Vector ySdot, 
+              void *user_data, N_Vector tmp1, N_Vector tmp2);
+
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+/* Prototypes of private functions */
+
+static void ProcessArgs(int argc, char *argv[],
+                        booleantype *sensi, int *sensi_meth, 
+                        booleantype *err_con);
+static void WrongArgs(char *name);
+static void PrintOutput(void *cvode_mem, realtype t, N_Vector u);
+static void PrintOutputS(N_Vector *uS);
+static void PrintFinalStats(void *cvode_mem, booleantype sensi);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  void *cvode_mem;
+  UserData data;
+  realtype t, tout;
+  N_Vector y;
+  int iout, flag, nnz;
+
+  realtype pbar[NS];
+  int is; 
+  N_Vector *yS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  cvode_mem = NULL;
+  data      = NULL;
+  y         = NULL;
+  yS        = NULL;
+
+  /* Process arguments */
+  ProcessArgs(argc, argv, &sensi, &sensi_meth, &err_con);
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.04);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+
+  /* Initial conditions */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+     Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+     user's right hand side function in y'=f(t,y), the initial time T0, and
+     the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeWFtolerances to specify a user-supplied function ewt that sets
+     the multiplicative error weights W_i for use in the weighted RMS norm */
+  flag = CVodeWFtolerances(cvode_mem, ewt);
+  if (check_flag(&flag, "CVodeSetEwtFn", 1)) return(1);
+
+  /* Attach user data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if (check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVKLU to specify the CVKLU sparse direct linear solver */
+  nnz = NEQ * NEQ;              /* max no. of nonzeros entries in the Jac */
+  flag = CVKLU(cvode_mem, NEQ, nnz, CSC_MAT);
+  if (check_flag(&flag, "CVKLU", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVSlsSetSparseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVSlsSetSparseJacFn", 1)) return(1);
+
+  printf("\n3-species chemical kinetics problem\n");
+
+  /* Sensitivity-related settings */
+  if (sensi) {
+
+    /* Set parameter scaling factor */
+    pbar[0] = data->p[0];
+    pbar[1] = data->p[1];
+    pbar[2] = data->p[2];
+
+    /* Set sensitivity initial conditions */
+    yS = N_VCloneVectorArray_Serial(NS, y);
+    if (check_flag((void *)yS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for (is=0;is<NS;is++) N_VConst(ZERO, yS[is]);
+
+    /* Call CVodeSensInit1 to activate forward sensitivity computations
+       and allocate internal memory for COVEDS related to sensitivity
+       calculations. Computes the right-hand sides of the sensitivity
+       ODE, one at a time */
+    flag = CVodeSensInit1(cvode_mem, NS, sensi_meth, fS, yS);
+    if(check_flag(&flag, "CVodeSensInit", 1)) return(1);
+
+    /* Call CVodeSensEEtolerances to estimate tolerances for sensitivity 
+       variables based on the rolerances supplied for states variables and 
+       the scaling factor pbar */
+    flag = CVodeSensEEtolerances(cvode_mem);
+    if(check_flag(&flag, "CVodeSensEEtolerances", 1)) return(1);
+
+    /* Set sensitivity analysis optional inputs */
+    /* Call CVodeSetSensErrCon to specify the error control strategy for 
+       sensitivity variables */
+    flag = CVodeSetSensErrCon(cvode_mem, err_con);
+    if (check_flag(&flag, "CVodeSetSensErrCon", 1)) return(1);
+
+    /* Call CVodeSetSensParams to specify problem parameter information for 
+       sensitivity calculations */
+    flag = CVodeSetSensParams(cvode_mem, NULL, pbar, NULL);
+    if (check_flag(&flag, "CVodeSetSensParams", 1)) return(1);
+
+    printf("Sensitivity: YES ");
+    if(sensi_meth == CV_SIMULTANEOUS)   
+      printf("( SIMULTANEOUS +");
+    else 
+      if(sensi_meth == CV_STAGGERED) printf("( STAGGERED +");
+      else                           printf("( STAGGERED1 +");   
+    if(err_con) printf(" FULL ERROR CONTROL )");
+    else        printf(" PARTIAL ERROR CONTROL )");
+
+  } else {
+
+    printf("Sensitivity: NO ");
+
+  }
+  
+  /* In loop over output points, call CVode, print results, test for error */
+  
+  printf("\n\n");
+  printf("===========================================");
+  printf("============================\n");
+  printf("     T     Q       H      NST           y1");
+  printf("           y2           y3    \n");
+  printf("===========================================");
+  printf("============================\n");
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout *= TMULT) {
+
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    if (check_flag(&flag, "CVode", 1)) break;
+
+    PrintOutput(cvode_mem, t, y);
+
+    /* Call CVodeGetSens to get the sensitivity solution vector after a
+       successful return from CVode */
+    if (sensi) {
+      flag = CVodeGetSens(cvode_mem, &t, yS);
+      if (check_flag(&flag, "CVodeGetSens", 1)) break;
+      PrintOutputS(yS);
+    } 
+    printf("-----------------------------------------");
+    printf("------------------------------\n");
+
+  }
+
+  /* Print final statistics */
+  PrintFinalStats(cvode_mem, sensi);
+
+  /* Free memory */
+
+  N_VDestroy_Serial(y);                    /* Free y vector */
+  if (sensi) {
+    N_VDestroyVectorArray_Serial(yS, NS);  /* Free yS vector */
+  }
+  free(data);                              /* Free user data */
+  CVodeFree(&cvode_mem);                   /* Free CVODES memory */
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+  UserData data;
+  realtype p1, p2, p3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  yd1 = Ith(ydot,1) = -p1*y1 + p2*y2*y3;
+  yd3 = Ith(ydot,3) = p3*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+ */
+
+static int Jac(realtype t,
+	       N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int* colptrs;
+  int* rowvals;
+  realtype* data;
+  UserData userdata;
+  realtype p1, p2, p3;
+ 
+  yval = N_VGetArrayPointer_Serial(y);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data = JacMat->data;
+  userdata = (UserData) user_data;
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMat);
+  
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = -p1;                          rowvals[0] = 0;
+  data[1] = p1;                           rowvals[1] = 1;
+  data[2] = ZERO;                         rowvals[2] = 2;
+
+  data[3] = p2*yval[2];                   rowvals[3] = 0;
+  data[4] = -p2*yval[2]-2*p3*yval[1];     rowvals[4] = 1;
+  data[5] = 2*yval[1];                    rowvals[5] = 2;
+  
+  data[6] = p2*yval[1];                   rowvals[6] = 0;
+  data[7] = -p2*yval[1];                  rowvals[7] = 1;
+  data[8] = ZERO;                         rowvals[8] = 2;
+ 
+  return(0);
+}
+ 
+/* 
+ * fS routine. Compute sensitivity r.h.s. CVSensRhs1Fn is compatible with any
+ * valid value of the argument ism to CVodeSensInit and CVodeSensInit1
+ */
+
+static int fS(int Ns, realtype t, N_Vector y, N_Vector ydot, 
+              int iS, N_Vector yS, N_Vector ySdot, 
+              void *user_data, N_Vector tmp1, N_Vector tmp2)
+{
+  UserData data;
+  realtype p1, p2, p3;
+  realtype y1, y2, y3;
+  realtype s1, s2, s3;
+  realtype sd1, sd2, sd3;
+
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  y1 = Ith(y,1);  y2 = Ith(y,2);  y3 = Ith(y,3);
+  s1 = Ith(yS,1); s2 = Ith(yS,2); s3 = Ith(yS,3);
+
+  sd1 = -p1*s1 + p2*y3*s2 + p2*y2*s3;
+  sd3 = 2*p3*y2*s2;
+  sd2 = -sd1-sd3;
+
+  switch (iS) {
+  case 0:
+    sd1 += -y1;
+    sd2 +=  y1;
+    break;
+  case 1:
+    sd1 +=  y2*y3;
+    sd2 += -y2*y3;
+    break;
+  case 2:
+    sd2 += -y2*y2;
+    sd3 +=  y2*y2;
+    break;
+  }
+  
+  Ith(ySdot,1) = sd1;
+  Ith(ySdot,2) = sd2;
+  Ith(ySdot,3) = sd3;
+
+  return(0);
+}
+
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Process and verify arguments to cvsfwddenx.
+ */
+
+static void ProcessArgs(int argc, char *argv[], 
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = CV_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = CV_STAGGERED;
+    else if (strcmp(argv[2],"stg1") == 0)
+      *sensi_meth = CV_STAGGERED1;
+    else 
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(argv[0]);
+  }
+
+}
+
+static void WrongArgs(char *name)
+{
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim, stg, or stg1\n");
+    printf("         err_con    = t or f\n");
+    
+    exit(0);
+}
+
+/*
+ * Print current t, step count, order, stepsize, and solution.
+ */
+
+static void PrintOutput(void *cvode_mem, realtype t, N_Vector u)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%8.3Le %2d  %8.3Le %5ld\n", t, qu, hu, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#else
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#endif
+
+  printf("                  Solution       ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", udata[0], udata[1], udata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#endif
+
+}
+
+/* 
+ * Print sensitivities.
+*/
+
+static void PrintOutputS(N_Vector *uS)
+{
+  realtype *sdata;
+
+  sdata = N_VGetArrayPointer_Serial(uS[0]);
+  printf("                  Sensitivity 1  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  
+  sdata = N_VGetArrayPointer_Serial(uS[1]);
+  printf("                  Sensitivity 2  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+  sdata = N_VGetArrayPointer_Serial(uS[2]);
+  printf("                  Sensitivity 3  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+}
+
+/* 
+ * Print some final statistics from the CVODES memory.
+ */
+
+static void PrintFinalStats(void *cvode_mem, booleantype sensi)
+{
+  long int nst;
+  long int nfe, nsetups, nni, ncfn, netf;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  long int nje;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  if (sensi) {
+    flag = CVodeGetSensNumRhsEvals(cvode_mem, &nfSe);
+    check_flag(&flag, "CVodeGetSensNumRhsEvals", 1);
+    flag = CVodeGetNumRhsEvalsSens(cvode_mem, &nfeS);
+    check_flag(&flag, "CVodeGetNumRhsEvalsSens", 1);
+    flag = CVodeGetSensNumLinSolvSetups(cvode_mem, &nsetupsS);
+    check_flag(&flag, "CVodeGetSensNumLinSolvSetups", 1);
+    flag = CVodeGetSensNumErrTestFails(cvode_mem, &netfS);
+    check_flag(&flag, "CVodeGetSensNumErrTestFails", 1);
+    flag = CVodeGetSensNumNonlinSolvIters(cvode_mem, &nniS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvIters", 1);
+    flag = CVodeGetSensNumNonlinSolvConvFails(cvode_mem, &ncfnS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvConvFails", 1);
+  }
+
+  flag = CVSlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+
+  printf("\nFinal Statistics\n\n");
+  printf("nst     = %5ld\n\n", nst);
+  printf("nfe     = %5ld\n",   nfe);
+  printf("netf    = %5ld    nsetups  = %5ld\n", netf, nsetups);
+  printf("nni     = %5ld    ncfn     = %5ld\n", nni, ncfn);
+
+  if(sensi) {
+    printf("\n");
+    printf("nfSe    = %5ld    nfeS     = %5ld\n", nfSe, nfeS);
+    printf("netfs   = %5ld    nsetupsS = %5ld\n", netfS, nsetupsS);
+    printf("nniS    = %5ld    ncfnS    = %5ld\n", nniS, ncfnS);
+  }
+
+  printf("\n");
+  printf("nje    = %5ld\n", nje);
+
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_FSA_klu.out b/examples/cvodes/serial/cvsRoberts_FSA_klu.out
new file mode 100644
index 0000000..d14b7c5
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_FSA_klu.out
@@ -0,0 +1,93 @@
+
+3-species chemical kinetics problem
+Sensitivity: YES ( STAGGERED1 + FULL ERROR CONTROL )
+
+=======================================================================
+     T     Q       H      NST           y1           y2           y3    
+=======================================================================
+4.000e-01  3  5.292e-02   105
+                  Solution         9.8517e-01   3.3864e-05   1.4794e-02 
+                  Sensitivity 1   -3.5595e-01   3.9025e-04   3.5556e-01 
+                  Sensitivity 2    9.5428e-08  -2.1309e-10  -9.5216e-08 
+                  Sensitivity 3   -1.5833e-11  -5.2900e-13   1.6360e-11 
+-----------------------------------------------------------------------
+4.000e+00  4  2.108e-01   140
+                  Solution         9.0552e-01   2.2405e-05   9.4458e-02 
+                  Sensitivity 1   -1.8761e+00   1.7922e-04   1.8759e+00 
+                  Sensitivity 2    2.9614e-06  -5.8304e-10  -2.9609e-06 
+                  Sensitivity 3   -4.9334e-10  -2.7627e-13   4.9366e-10 
+-----------------------------------------------------------------------
+4.000e+01  3  1.956e+00   301
+                  Solution         7.1581e-01   9.1847e-06   2.8419e-01 
+                  Sensitivity 1   -4.2478e+00   4.5905e-05   4.2478e+00 
+                  Sensitivity 2    1.3732e-05  -2.3568e-10  -1.3732e-05 
+                  Sensitivity 3   -2.2887e-09  -1.1379e-13   2.2885e-09 
+-----------------------------------------------------------------------
+4.000e+02  3  1.291e+01   477
+                  Solution         4.5052e-01   3.2228e-06   5.4950e-01 
+                  Sensitivity 1   -5.9585e+00   3.5421e-06   5.9586e+00 
+                  Sensitivity 2    2.2738e-05  -2.2602e-11  -2.2739e-05 
+                  Sensitivity 3   -3.7899e-09  -4.9948e-14   3.7896e-09 
+-----------------------------------------------------------------------
+4.000e+03  2  1.534e+02   684
+                  Solution         1.8317e-01   8.9399e-07   8.1688e-01 
+                  Sensitivity 1   -4.7501e+00  -5.9960e-06   4.7503e+00 
+                  Sensitivity 2    1.8809e-05   2.3136e-11  -1.8811e-05 
+                  Sensitivity 3   -3.1351e-09  -1.8756e-14   3.1343e-09 
+-----------------------------------------------------------------------
+4.000e+04  3  1.457e+03   768
+                  Solution         3.8988e-02   1.6219e-07   9.6106e-01 
+                  Sensitivity 1   -1.5751e+00  -2.7622e-06   1.5752e+00 
+                  Sensitivity 2    6.2881e-06   1.1003e-11  -6.2904e-06 
+                  Sensitivity 3   -1.0481e-09  -4.5370e-15   1.0472e-09 
+-----------------------------------------------------------------------
+4.000e+05  5  2.201e+04   818
+                  Solution         4.9386e-03   1.9850e-08   9.9512e-01 
+                  Sensitivity 1   -2.3636e-01  -4.5845e-07   2.3630e-01 
+                  Sensitivity 2    9.4511e-07   1.8326e-12  -9.4684e-07 
+                  Sensitivity 3   -1.5757e-10  -6.3647e-16   1.5641e-10 
+-----------------------------------------------------------------------
+4.000e+06  4  1.656e+05   881
+                  Solution         5.1683e-04   2.0683e-09   9.9954e-01 
+                  Sensitivity 1   -2.5666e-02  -5.1058e-08   2.5621e-02 
+                  Sensitivity 2    1.0266e-07   2.0423e-13  -1.0447e-07 
+                  Sensitivity 3   -1.7114e-11  -6.8519e-17   1.5882e-11 
+-----------------------------------------------------------------------
+4.000e+07  4  1.537e+06   926
+                  Solution         5.2040e-05   2.0816e-10   1.0000e+00 
+                  Sensitivity 1   -2.5995e-03  -5.1947e-09   2.5517e-03 
+                  Sensitivity 2    1.0397e-08   2.0777e-14  -1.2198e-08 
+                  Sensitivity 3   -1.7333e-12  -6.9332e-18   4.9916e-13 
+-----------------------------------------------------------------------
+4.000e+08  4  2.510e+07   974
+                  Solution         5.2097e-06   2.0838e-11   1.0001e+00 
+                  Sensitivity 1   -2.6038e-04  -5.2053e-10   2.1191e-04 
+                  Sensitivity 2    1.0415e-09   2.0822e-15  -2.8384e-09 
+                  Sensitivity 3   -1.7365e-13  -6.9455e-19  -1.0608e-12 
+-----------------------------------------------------------------------
+4.000e+09  3  3.386e+08  1031
+                  Solution         5.2245e-07   2.0897e-12   1.0001e+00 
+                  Sensitivity 1   -2.5985e-05  -5.1694e-11  -2.2327e-05 
+                  Sensitivity 2    1.0386e-10   2.0645e-16  -1.8998e-09 
+                  Sensitivity 3   -1.7391e-14  -6.9557e-20  -1.2177e-12 
+-----------------------------------------------------------------------
+4.000e+10  4  1.149e+09  1059
+                  Solution         5.8778e-08   2.3510e-13   1.0001e+00 
+                  Sensitivity 1   -2.4981e-06  -4.1144e-12  -4.6026e-05 
+                  Sensitivity 2    1.1746e-11   2.3472e-17  -1.8018e-09 
+                  Sensitivity 3   -2.2674e-15  -9.0689e-21  -1.2348e-12 
+-----------------------------------------------------------------------
+
+Final Statistics
+
+nst     =  1059
+
+nfe     =  2521
+netf    =     0    nsetups  =   260
+nni     =  1335    ncfn     =     0
+
+nfSe    =  4365    nfeS     =     0
+netfs   =   123    nsetupsS =     0
+nniS    =  4353    ncfnS    =     0
+
+nje    =    19
diff --git a/examples/cvodes/serial/cvsRoberts_FSA_sps.c b/examples/cvodes/serial/cvsRoberts_FSA_sps.c
new file mode 100644
index 0000000..9644ead
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_FSA_sps.c
@@ -0,0 +1,673 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date: $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on cvsRoberts_FSA_dns.c and modified to use SUPERLU_MT
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODES for Forward Sensitivity 
+ * Analysis. The problem is from chemical kinetics, and consists
+ * of the following three rate equations:
+ *    dy1/dt = -p1*y1 + p2*y2*y3
+ *    dy2/dt =  p1*y1 - p2*y2*y3 - p3*(y2)^2
+ *    dy3/dt =  p3*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions y1 = 1.0, y2 = y3 = 0. The reaction rates are: p1=0.04,
+ * p2=1e4, and p3=3e7. The problem is stiff.
+ * This program solves the problem with the BDF method, Newton
+ * iteration with the CVODES SUPERLU_MT linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance.
+ * Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ *
+ * Optionally, CVODES can compute sensitivities with respect to the
+ * problem parameters p1, p2, and p3.
+ * The sensitivity right hand side is given analytically through the
+ * user routine fS (of type SensRhs1Fn).
+ * Any of three sensitivity methods (SIMULTANEOUS, STAGGERED, and
+ * STAGGERED1) can be used and sensitivities may be included in the
+ * error test or not (error control set on TRUE or FALSE,
+ * respectively).
+ *
+ * Execution:
+ *
+ * If no sensitivities are desired:
+ *    % cvsRoberts_FSA_sps -nosensi
+ * If sensitivities are to be computed:
+ *    % cvsRoberts_FSA_sps -sensi sensi_meth err_con
+ * where sensi_meth is one of {sim, stg, stg1} and err_con is one of
+ * {t, f}.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Header files with a description of contents used */
+
+#include <cvodes/cvodes.h>             /* prototypes for CVODES fcts. and consts. */
+#include <cvodes/cvodes_superlumt.h>   /* prototypes for CVSUPERLUMT fcts. and constants */
+#include <sundials/sundials_sparse.h>  /* definitions SlsMat */
+#include <nvector/nvector_serial.h>    /* defs. of serial NVECTOR fcts. and macros */
+#include <sundials/sundials_types.h>   /* def. of type realtype */
+#include <sundials/sundials_math.h>    /* definition of ABS */
+
+/* Accessor macros */
+/* These macros are defined in order to write code with which exactly matched
+   the mathematical problem description given above.
+*/
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i=1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ   3             /* number of equations  */
+#define Y1    RCONST(1.0)   /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1e-4)  /* scalar relative tolerance */
+#define ATOL1 RCONST(1e-8)  /* vector absolute tolerance components */
+#define ATOL2 RCONST(1e-14)
+#define ATOL3 RCONST(1e-6)
+#define T0    RCONST(0.0)   /* initial time */
+#define T1    RCONST(0.4)   /* first output time */
+#define TMULT RCONST(10.0)  /* output time factor */
+#define NOUT  12            /* number of output times */
+
+#define NP    3             /* number of problem parameters */
+#define NS    3             /* number of sensitivities computed */
+
+#define ZERO  RCONST(0.0)
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];           /* problem parameters */
+} *UserData;
+
+/* Prototypes of functions by CVODES */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int fS(int Ns, realtype t, N_Vector y, N_Vector ydot, 
+              int iS, N_Vector yS, N_Vector ySdot, 
+              void *user_data, N_Vector tmp1, N_Vector tmp2);
+
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+/* Prototypes of private functions */
+
+static void ProcessArgs(int argc, char *argv[],
+                        booleantype *sensi, int *sensi_meth, 
+                        booleantype *err_con);
+static void WrongArgs(char *name);
+static void PrintOutput(void *cvode_mem, realtype t, N_Vector u);
+static void PrintOutputS(N_Vector *uS);
+static void PrintFinalStats(void *cvode_mem, booleantype sensi);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  void *cvode_mem;
+  UserData data;
+  realtype t, tout;
+  N_Vector y;
+  int iout, flag, nthreads, nnz;
+
+  realtype pbar[NS];
+  int is; 
+  N_Vector *yS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  cvode_mem = NULL;
+  data      = NULL;
+  y         =  NULL;
+  yS        = NULL;
+
+  /* Process arguments */
+  ProcessArgs(argc, argv, &sensi, &sensi_meth, &err_con);
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.04);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+
+  /* Initial conditions */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+     Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+
+  /* Call CVodeInit to initialize the integrator memory and specify the
+     user's right hand side function in y'=f(t,y), the initial time T0, and
+     the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeWFtolerances to specify a user-supplied function ewt that sets
+     the multiplicative error weights W_i for use in the weighted RMS norm */
+  flag = CVodeWFtolerances(cvode_mem, ewt);
+  if (check_flag(&flag, "CVodeSetEwtFn", 1)) return(1);
+
+  /* Attach user data */
+  flag = CVodeSetUserData(cvode_mem, data);
+  if (check_flag(&flag, "CVodeSetUserData", 1)) return(1);
+
+  /* Call CVKLU to specify the CVKLU sparse direct linear solver */
+  nthreads = 1;                 /* no. of threads to use when factoring the system*/
+  nnz = NEQ * NEQ;              /* max no. of nonzeros entries in the Jac */
+  flag = CVSuperLUMT(cvode_mem, nthreads, NEQ, nnz);
+  if (check_flag(&flag, "CVSuperLUMT", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVSlsSetSparseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVSlsSetSparseJacFn", 1)) return(1);
+
+  printf("\n3-species chemical kinetics problem\n");
+
+  /* Sensitivity-related settings */
+  if (sensi) {
+
+    /* Set parameter scaling factor */
+    pbar[0] = data->p[0];
+    pbar[1] = data->p[1];
+    pbar[2] = data->p[2];
+
+    /* Set sensitivity initial conditions */
+    yS = N_VCloneVectorArray_Serial(NS, y);
+    if (check_flag((void *)yS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for (is=0;is<NS;is++) N_VConst(ZERO, yS[is]);
+
+    /* Call CVodeSensInit1 to activate forward sensitivity computations
+       and allocate internal memory for COVEDS related to sensitivity
+       calculations. Computes the right-hand sides of the sensitivity
+       ODE, one at a time */
+    flag = CVodeSensInit1(cvode_mem, NS, sensi_meth, fS, yS);
+    if(check_flag(&flag, "CVodeSensInit", 1)) return(1);
+
+    /* Call CVodeSensEEtolerances to estimate tolerances for sensitivity 
+       variables based on the rolerances supplied for states variables and 
+       the scaling factor pbar */
+    flag = CVodeSensEEtolerances(cvode_mem);
+    if(check_flag(&flag, "CVodeSensEEtolerances", 1)) return(1);
+
+    /* Set sensitivity analysis optional inputs */
+    /* Call CVodeSetSensErrCon to specify the error control strategy for 
+       sensitivity variables */
+    flag = CVodeSetSensErrCon(cvode_mem, err_con);
+    if (check_flag(&flag, "CVodeSetSensErrCon", 1)) return(1);
+
+    /* Call CVodeSetSensParams to specify problem parameter information for 
+       sensitivity calculations */
+    flag = CVodeSetSensParams(cvode_mem, NULL, pbar, NULL);
+    if (check_flag(&flag, "CVodeSetSensParams", 1)) return(1);
+
+    printf("Sensitivity: YES ");
+    if(sensi_meth == CV_SIMULTANEOUS)   
+      printf("( SIMULTANEOUS +");
+    else 
+      if(sensi_meth == CV_STAGGERED) printf("( STAGGERED +");
+      else                           printf("( STAGGERED1 +");   
+    if(err_con) printf(" FULL ERROR CONTROL )");
+    else        printf(" PARTIAL ERROR CONTROL )");
+
+  } else {
+
+    printf("Sensitivity: NO ");
+
+  }
+  
+  /* In loop over output points, call CVode, print results, test for error */
+  
+  printf("\n\n");
+  printf("===========================================");
+  printf("============================\n");
+  printf("     T     Q       H      NST           y1");
+  printf("           y2           y3    \n");
+  printf("===========================================");
+  printf("============================\n");
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout *= TMULT) {
+
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    if (check_flag(&flag, "CVode", 1)) break;
+
+    PrintOutput(cvode_mem, t, y);
+
+    /* Call CVodeGetSens to get the sensitivity solution vector after a
+       successful return from CVode */
+    if (sensi) {
+      flag = CVodeGetSens(cvode_mem, &t, yS);
+      if (check_flag(&flag, "CVodeGetSens", 1)) break;
+      PrintOutputS(yS);
+    } 
+    printf("-----------------------------------------");
+    printf("------------------------------\n");
+
+  }
+
+  /* Print final statistics */
+  PrintFinalStats(cvode_mem, sensi);
+
+  /* Free memory */
+
+  N_VDestroy_Serial(y);                    /* Free y vector */
+  if (sensi) {
+    N_VDestroyVectorArray_Serial(yS, NS);  /* Free yS vector */
+  }
+  free(data);                              /* Free user data */
+  CVodeFree(&cvode_mem);                   /* Free CVODES memory */
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY CVODES
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+  UserData data;
+  realtype p1, p2, p3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  yd1 = Ith(ydot,1) = -p1*y1 + p2*y2*y3;
+  yd3 = Ith(ydot,3) = p3*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+ */
+
+static int Jac(realtype t,
+	       N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int* colptrs;
+  int* rowvals;
+  realtype* data;
+  UserData userdata;
+  realtype p1, p2, p3;
+ 
+  yval = N_VGetArrayPointer_Serial(y);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data = JacMat->data;
+  userdata = (UserData) user_data;
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMat);
+  
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = -p1;                          rowvals[0] = 0;
+  data[1] = p1;                           rowvals[1] = 1;
+  data[2] = ZERO;                         rowvals[2] = 2;
+
+  data[3] = p2*yval[2];                   rowvals[3] = 0;
+  data[4] = -p2*yval[2]-2*p3*yval[1];     rowvals[4] = 1;
+  data[5] = 2*yval[1];                    rowvals[5] = 2;
+  
+  data[6] = p2*yval[1];                   rowvals[6] = 0;
+  data[7] = -p2*yval[1];                  rowvals[7] = 1;
+  data[8] = ZERO;                         rowvals[8] = 2;
+ 
+  return(0);
+}
+ 
+/* 
+ * fS routine. Compute sensitivity r.h.s. CVSensRhs1Fn is compatible with any
+ * valid value of the argument ism to CVodeSensInit and CVodeSensInit1
+ */
+
+static int fS(int Ns, realtype t, N_Vector y, N_Vector ydot, 
+              int iS, N_Vector yS, N_Vector ySdot, 
+              void *user_data, N_Vector tmp1, N_Vector tmp2)
+{
+  UserData data;
+  realtype p1, p2, p3;
+  realtype y1, y2, y3;
+  realtype s1, s2, s3;
+  realtype sd1, sd2, sd3;
+
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  y1 = Ith(y,1);  y2 = Ith(y,2);  y3 = Ith(y,3);
+  s1 = Ith(yS,1); s2 = Ith(yS,2); s3 = Ith(yS,3);
+
+  sd1 = -p1*s1 + p2*y3*s2 + p2*y2*s3;
+  sd3 = 2*p3*y2*s2;
+  sd2 = -sd1-sd3;
+
+  switch (iS) {
+  case 0:
+    sd1 += -y1;
+    sd2 +=  y1;
+    break;
+  case 1:
+    sd1 +=  y2*y3;
+    sd2 += -y2*y3;
+    break;
+  case 2:
+    sd2 += -y2*y2;
+    sd3 +=  y2*y2;
+    break;
+  }
+  
+  Ith(ySdot,1) = sd1;
+  Ith(ySdot,2) = sd2;
+  Ith(ySdot,3) = sd3;
+
+  return(0);
+}
+
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Process and verify arguments to cvsfwddenx.
+ */
+
+static void ProcessArgs(int argc, char *argv[], 
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = CV_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = CV_STAGGERED;
+    else if (strcmp(argv[2],"stg1") == 0)
+      *sensi_meth = CV_STAGGERED1;
+    else 
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(argv[0]);
+  }
+
+}
+
+static void WrongArgs(char *name)
+{
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim, stg, or stg1\n");
+    printf("         err_con    = t or f\n");
+    
+    exit(0);
+}
+
+/*
+ * Print current t, step count, order, stepsize, and solution.
+ */
+
+static void PrintOutput(void *cvode_mem, realtype t, N_Vector u)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetLastOrder(cvode_mem, &qu);
+  check_flag(&flag, "CVodeGetLastOrder", 1);
+  flag = CVodeGetLastStep(cvode_mem, &hu);
+  check_flag(&flag, "CVodeGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%8.3Le %2d  %8.3Le %5ld\n", t, qu, hu, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#else
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#endif
+
+  printf("                  Solution       ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", udata[0], udata[1], udata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#endif
+
+}
+
+/* 
+ * Print sensitivities.
+*/
+
+static void PrintOutputS(N_Vector *uS)
+{
+  realtype *sdata;
+
+  sdata = N_VGetArrayPointer_Serial(uS[0]);
+  printf("                  Sensitivity 1  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  
+  sdata = N_VGetArrayPointer_Serial(uS[1]);
+  printf("                  Sensitivity 2  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+  sdata = N_VGetArrayPointer_Serial(uS[2]);
+  printf("                  Sensitivity 3  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+}
+
+/* 
+ * Print some final statistics from the CVODES memory.
+ */
+
+static void PrintFinalStats(void *cvode_mem, booleantype sensi)
+{
+  long int nst;
+  long int nfe, nsetups, nni, ncfn, netf;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  long int nje;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  if (sensi) {
+    flag = CVodeGetSensNumRhsEvals(cvode_mem, &nfSe);
+    check_flag(&flag, "CVodeGetSensNumRhsEvals", 1);
+    flag = CVodeGetNumRhsEvalsSens(cvode_mem, &nfeS);
+    check_flag(&flag, "CVodeGetNumRhsEvalsSens", 1);
+    flag = CVodeGetSensNumLinSolvSetups(cvode_mem, &nsetupsS);
+    check_flag(&flag, "CVodeGetSensNumLinSolvSetups", 1);
+    flag = CVodeGetSensNumErrTestFails(cvode_mem, &netfS);
+    check_flag(&flag, "CVodeGetSensNumErrTestFails", 1);
+    flag = CVodeGetSensNumNonlinSolvIters(cvode_mem, &nniS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvIters", 1);
+    flag = CVodeGetSensNumNonlinSolvConvFails(cvode_mem, &ncfnS);
+    check_flag(&flag, "CVodeGetSensNumNonlinSolvConvFails", 1);
+  }
+
+  flag = CVSlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+
+  printf("\nFinal Statistics\n\n");
+  printf("nst     = %5ld\n\n", nst);
+  printf("nfe     = %5ld\n",   nfe);
+  printf("netf    = %5ld    nsetups  = %5ld\n", netf, nsetups);
+  printf("nni     = %5ld    ncfn     = %5ld\n", nni, ncfn);
+
+  if(sensi) {
+    printf("\n");
+    printf("nfSe    = %5ld    nfeS     = %5ld\n", nfSe, nfeS);
+    printf("netfs   = %5ld    nsetupsS = %5ld\n", netfS, nsetupsS);
+    printf("nniS    = %5ld    ncfnS    = %5ld\n", nniS, ncfnS);
+  }
+
+  printf("\n");
+  printf("nje    = %5ld\n", nje);
+
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_FSA_sps.out b/examples/cvodes/serial/cvsRoberts_FSA_sps.out
new file mode 100644
index 0000000..7dcd3b6
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_FSA_sps.out
@@ -0,0 +1,93 @@
+
+3-species chemical kinetics problem
+Sensitivity: YES ( STAGGERED1 + FULL ERROR CONTROL )
+
+=======================================================================
+     T     Q       H      NST           y1           y2           y3    
+=======================================================================
+4.000e-01  3  5.292e-02   105
+                  Solution         9.8517e-01   3.3864e-05   1.4794e-02 
+                  Sensitivity 1   -3.5595e-01   3.9025e-04   3.5556e-01 
+                  Sensitivity 2    9.5428e-08  -2.1309e-10  -9.5216e-08 
+                  Sensitivity 3   -1.5833e-11  -5.2900e-13   1.6360e-11 
+-----------------------------------------------------------------------
+4.000e+00  4  2.108e-01   140
+                  Solution         9.0552e-01   2.2405e-05   9.4458e-02 
+                  Sensitivity 1   -1.8761e+00   1.7922e-04   1.8759e+00 
+                  Sensitivity 2    2.9614e-06  -5.8304e-10  -2.9609e-06 
+                  Sensitivity 3   -4.9334e-10  -2.7627e-13   4.9366e-10 
+-----------------------------------------------------------------------
+4.000e+01  3  1.956e+00   301
+                  Solution         7.1581e-01   9.1847e-06   2.8419e-01 
+                  Sensitivity 1   -4.2478e+00   4.5905e-05   4.2478e+00 
+                  Sensitivity 2    1.3732e-05  -2.3568e-10  -1.3732e-05 
+                  Sensitivity 3   -2.2887e-09  -1.1379e-13   2.2885e-09 
+-----------------------------------------------------------------------
+4.000e+02  3  1.291e+01   477
+                  Solution         4.5052e-01   3.2228e-06   5.4950e-01 
+                  Sensitivity 1   -5.9585e+00   3.5421e-06   5.9586e+00 
+                  Sensitivity 2    2.2738e-05  -2.2602e-11  -2.2739e-05 
+                  Sensitivity 3   -3.7899e-09  -4.9948e-14   3.7896e-09 
+-----------------------------------------------------------------------
+4.000e+03  2  1.532e+02   684
+                  Solution         1.8317e-01   8.9399e-07   8.1688e-01 
+                  Sensitivity 1   -4.7501e+00  -5.9960e-06   4.7503e+00 
+                  Sensitivity 2    1.8809e-05   2.3136e-11  -1.8811e-05 
+                  Sensitivity 3   -3.1351e-09  -1.8756e-14   3.1343e-09 
+-----------------------------------------------------------------------
+4.000e+04  3  8.774e+02   776
+                  Solution         3.8987e-02   1.6218e-07   9.6106e-01 
+                  Sensitivity 1   -1.5751e+00  -2.7620e-06   1.5752e+00 
+                  Sensitivity 2    6.2880e-06   1.1004e-11  -6.2898e-06 
+                  Sensitivity 3   -1.0481e-09  -4.5369e-15   1.0472e-09 
+-----------------------------------------------------------------------
+4.000e+05  4  1.932e+04   832
+                  Solution         4.9390e-03   1.9852e-08   9.9512e-01 
+                  Sensitivity 1   -2.3635e-01  -4.5837e-07   2.3639e-01 
+                  Sensitivity 2    9.4501e-07   1.8321e-12  -9.4670e-07 
+                  Sensitivity 3   -1.5754e-10  -6.3632e-16   1.5652e-10 
+-----------------------------------------------------------------------
+4.000e+06  4  1.931e+05   876
+                  Solution         5.1691e-04   2.0686e-09   9.9954e-01 
+                  Sensitivity 1   -2.5669e-02  -5.1060e-08   2.5672e-02 
+                  Sensitivity 2    1.0267e-07   2.0423e-13  -1.0421e-07 
+                  Sensitivity 3   -1.7120e-11  -6.8545e-17   1.6048e-11 
+-----------------------------------------------------------------------
+4.000e+07  4  1.985e+06   927
+                  Solution         5.2046e-05   2.0818e-10   1.0000e+00 
+                  Sensitivity 1   -2.5993e-03  -5.1933e-09   2.5989e-03 
+                  Sensitivity 2    1.0397e-08   2.0773e-14  -1.1920e-08 
+                  Sensitivity 3   -1.7335e-12  -6.9340e-18   6.5497e-13 
+-----------------------------------------------------------------------
+4.000e+08  4  2.940e+07   973
+                  Solution         5.2089e-06   2.0835e-11   1.0001e+00 
+                  Sensitivity 1   -2.6037e-04  -5.2057e-10   2.5848e-04 
+                  Sensitivity 2    1.0413e-09   2.0816e-15  -2.5560e-09 
+                  Sensitivity 3   -1.7367e-13  -6.9463e-19  -9.0772e-13 
+-----------------------------------------------------------------------
+4.000e+09  4  2.960e+08  1028
+                  Solution         5.2133e-07   2.0852e-12   1.0001e+00 
+                  Sensitivity 1   -2.6097e-05  -5.2250e-11   2.3802e-05 
+                  Sensitivity 2    1.0436e-10   2.0890e-16  -1.6179e-09 
+                  Sensitivity 3   -1.7397e-14  -6.9582e-20  -1.0647e-12 
+-----------------------------------------------------------------------
+4.000e+10  2  3.390e+09  1051
+                  Solution         5.4134e-08   2.1652e-13   1.0001e+00 
+                  Sensitivity 1   -2.7033e-06  -5.3996e-12   6.0356e-07 
+                  Sensitivity 2    1.0723e-11   2.1239e-17  -1.5257e-09 
+                  Sensitivity 3   -1.8272e-15  -7.3081e-21  -1.0798e-12 
+-----------------------------------------------------------------------
+
+Final Statistics
+
+nst     =  1051
+
+nfe     =  2493
+netf    =     0    nsetups  =   261
+nni     =  1317    ncfn     =     0
+
+nfSe    =  4314    nfeS     =     0
+netfs   =   121    nsetupsS =     0
+nniS    =  4302    ncfnS    =     0
+
+nje    =    19
diff --git a/examples/cvodes/serial/cvsRoberts_dns.c b/examples/cvodes/serial/cvsRoberts_dns.c
new file mode 100644
index 0000000..c5293bb
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_dns.c
@@ -0,0 +1,359 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODE. The problem is from
+ * chemical kinetics, and consists of the following three rate
+ * equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*(y2)^2
+ *    dy3/dt = 3.e7*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01. This program solves the problem with the BDF method,
+ * Newton iteration with the CVDENSE dense linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance. Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+/* Header files with a description of contents used */
+
+#include <cvodes/cvodes.h>           /* prototypes for CVODE fcts. and consts. */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., and macros */
+#include <cvodes/cvodes_dense.h>     /* prototype for CVDense */
+#include <sundials/sundials_dense.h> /* definitions DlsMat DENSE_ELEM */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+
+/* User-defined vector and matrix accessor macros: Ith, IJth */
+
+/* These macros are defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined below. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+
+   IJth(A,i,j) references the (i,j)th element of the dense matrix A, where
+   i and j are in the range [1..NEQ]. The IJth macro is defined using the
+   DENSE_ELEM macro in dense.h. DENSE_ELEM numbers rows and columns of a
+   dense matrix starting from 0. */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* Ith numbers components 1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* IJth numbers rows,cols 1..NEQ */
+
+
+/* Problem Constants */
+
+#define NEQ   3                /* number of equations  */
+#define Y1    RCONST(1.0)      /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1.0e-4)   /* scalar relative tolerance            */
+#define ATOL1 RCONST(1.0e-8)   /* vector absolute tolerance components */
+#define ATOL2 RCONST(1.0e-14)
+#define ATOL3 RCONST(1.0e-6)
+#define T0    RCONST(0.0)      /* initial time           */
+#define T1    RCONST(0.4)      /* first output time      */
+#define TMULT RCONST(10.0)     /* output time factor     */
+#define NOUT  12               /* number of output times */
+
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private functions to output results */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3);
+static void PrintRootInfo(int root_f1, int root_f2);
+
+/* Private function to print final statistics */
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype reltol, t, tout;
+  N_Vector y, abstol;
+  void *cvode_mem;
+  int flag, flagr, iout;
+  int rootsfound[2];
+
+  y = abstol = NULL;
+  cvode_mem = NULL;
+
+  /* Create serial vector of length NEQ for I.C. and abstol */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  abstol = N_VNew_Serial(NEQ); 
+  if (check_flag((void *)abstol, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize y */
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Set the scalar relative tolerance */
+  reltol = RTOL;
+  /* Set the vector absolute tolerance */
+  Ith(abstol,1) = ATOL1;
+  Ith(abstol,2) = ATOL2;
+  Ith(abstol,3) = ATOL3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in y'=f(t,y), the inital time T0, and
+   * the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSVtolerances to specify the scalar relative tolerance
+   * and vector absolute tolerances */
+  flag = CVodeSVtolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSVtolerances", 1)) return(1);
+
+  /* Call CVodeRootInit to specify the root function g with 2 components */
+  flag = CVodeRootInit(cvode_mem, 2, g);
+  if (check_flag(&flag, "CVodeRootInit", 1)) return(1);
+
+  /* Call CVDense to specify the CVDENSE dense linear solver */
+  flag = CVDense(cvode_mem, NEQ);
+  if (check_flag(&flag, "CVDense", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVDlsSetDenseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVDlsSetDenseJacFn", 1)) return(1);
+
+  /* In loop, call CVode, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached.  */
+  printf(" \n3-species kinetics problem\n\n");
+
+  iout = 0;  tout = T1;
+  while(1) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    PrintOutput(t, Ith(y,1), Ith(y,2), Ith(y,3));
+
+    if (flag == CV_ROOT_RETURN) {
+      flagr = CVodeGetRootInfo(cvode_mem, rootsfound);
+      if (check_flag(&flagr, "CVodeGetRootInfo", 1)) return(1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (check_flag(&flag, "CVode", 1)) break;
+    if (flag == CV_SUCCESS) {
+      iout++;
+      tout *= TMULT;
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  /* Print some final statistics */
+  PrintFinalStats(cvode_mem);
+
+  /* Free y vector */
+  N_VDestroy_Serial(y);
+
+  /* Free integrator memory */
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/*
+ * f routine. Compute function f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  yd1 = Ith(ydot,1) = RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3;
+  yd3 = Ith(ydot,3) = RCONST(3.0e7)*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/*
+ * g routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype y1, y3;
+
+  y1 = Ith(y,1); y3 = Ith(y,3);
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Jacobian routine. Compute J(t,y) = df/dy. *
+ */
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y1, y2, y3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  IJth(J,1,1) = RCONST(-0.04);
+  IJth(J,1,2) = RCONST(1.0e4)*y3;
+  IJth(J,1,3) = RCONST(1.0e4)*y2;
+  IJth(J,2,1) = RCONST(0.04); 
+  IJth(J,2,2) = RCONST(-1.0e4)*y3-RCONST(6.0e7)*y2;
+  IJth(J,2,3) = RCONST(-1.0e4)*y2;
+  IJth(J,3,2) = RCONST(6.0e7)*y2;
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %0.4Le      y =%14.6Le  %14.6Le  %14.6Le\n", t, y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#else
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#endif
+
+  return;
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+
+  return;
+}
+
+/* 
+ * Get and print some final statistics
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nje, nfeLS, nni, ncfn, netf, nge;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  flag = CVodeGetNumGEvals(cvode_mem, &nge);
+  check_flag(&flag, "CVodeGetNumGEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %-6ld nge = %ld\n \n",
+	 nni, ncfn, netf, nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_dns.out b/examples/cvodes/serial/cvsRoberts_dns.out
new file mode 100644
index 0000000..8ef3495
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_dns.out
@@ -0,0 +1,24 @@
+ 
+3-species kinetics problem
+
+At t = 2.6391e-01      y =  9.899653e-01    3.470564e-05    1.000000e-02
+    rootsfound[] =   0   1
+At t = 4.0000e-01      y =  9.851641e-01    3.386242e-05    1.480205e-02
+At t = 4.0000e+00      y =  9.055097e-01    2.240338e-05    9.446793e-02
+At t = 4.0000e+01      y =  7.158010e-01    9.185084e-06    2.841898e-01
+At t = 4.0000e+02      y =  4.504693e-01    3.222627e-06    5.495274e-01
+At t = 4.0000e+03      y =  1.832126e-01    8.943459e-07    8.167865e-01
+At t = 4.0000e+04      y =  3.897839e-02    1.621552e-07    9.610214e-01
+At t = 4.0000e+05      y =  4.940533e-03    1.985905e-08    9.950594e-01
+At t = 4.0000e+06      y =  5.170046e-04    2.069075e-09    9.994830e-01
+At t = 2.0803e+07      y =  1.000000e-04    4.000395e-10    9.999000e-01
+    rootsfound[] =  -1   0
+At t = 4.0000e+07      y =  5.199610e-05    2.079951e-10    9.999480e-01
+At t = 4.0000e+08      y =  5.200133e-06    2.080064e-11    9.999948e-01
+At t = 4.0000e+09      y =  5.131179e-07    2.052473e-12    9.999995e-01
+At t = 4.0000e+10      y =  5.470287e-08    2.188115e-13    9.999999e-01
+
+Final Statistics:
+nst = 566    nfe  = 817    nsetups = 119    nfeLS = 0      nje = 12
+nni = 813    ncfn = 0      netf = 32     nge = 600
+ 
diff --git a/examples/cvodes/serial/cvsRoberts_dnsL.c b/examples/cvodes/serial/cvsRoberts_dnsL.c
new file mode 100644
index 0000000..d369f1b
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_dnsL.c
@@ -0,0 +1,363 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODE. The problem is from
+ * chemical kinetics, and consists of the following three rate
+ * equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*(y2)^2
+ *    dy3/dt = 3.e7*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01. This program solves the problem with the BDF method,
+ * Newton iteration with the LAPACK dense linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance. Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+/* Header files with a description of contents used */
+
+#include <cvodes/cvodes.h>           /* prototypes for CVODE fcts. and consts. */
+#include <cvodes/cvodes_lapack.h>    /* prototype for CVLapackDense */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., and macros */
+
+/* User-defined vector and matrix accessor macros: Ith, IJth */
+
+/* These macros are defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined below. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+
+   IJth(A,i,j) references the (i,j)th element of the dense matrix A, where
+   i and j are in the range [1..NEQ]. The IJth macro is defined using the
+   DENSE_ELEM macro in dense.h. DENSE_ELEM numbers rows and columns of a
+   dense matrix starting from 0. */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)              /* Ith numbers components 1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* IJth numbers rows,cols 1..NEQ */
+
+
+/* Problem Constants */
+
+#define NEQ   3                /* number of equations  */
+#define Y1    RCONST(1.0)      /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1.0e-4)   /* scalar relative tolerance            */
+#define ATOL1 RCONST(1.0e-8)   /* vector absolute tolerance components */
+#define ATOL2 RCONST(1.0e-14)
+#define ATOL3 RCONST(1.0e-6)
+#define T0    RCONST(0.0)      /* initial time           */
+#define T1    RCONST(0.4)      /* first output time      */
+#define TMULT RCONST(10.0)     /* output time factor     */
+#define NOUT  12               /* number of output times */
+
+#define ZERO  RCONST(0.0)
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private functions to output results */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3);
+static void PrintRootInfo(int root_f1, int root_f2);
+
+/* Private function to print final statistics */
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype reltol, t, tout;
+  N_Vector y, abstol;
+  void *cvode_mem;
+  int flag, flagr, iout;
+  int rootsfound[2];
+
+  y = abstol = NULL;
+  cvode_mem = NULL;
+
+  /* Create serial vector of length NEQ for I.C. and abstol */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  abstol = N_VNew_Serial(NEQ); 
+  if (check_flag((void *)abstol, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize y */
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Set the scalar relative tolerance */
+  reltol = RTOL;
+  /* Set the vector absolute tolerance */
+  Ith(abstol,1) = ATOL1;
+  Ith(abstol,2) = ATOL2;
+  Ith(abstol,3) = ATOL3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in y'=f(t,y), the inital time T0, and
+   * the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSVtolerances to specify the scalar relative tolerance
+   * and vector absolute tolerances */
+  flag = CVodeSVtolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSVtolerances", 1)) return(1);
+
+  /* Call CVodeRootInit to specify the root function g with 2 components */
+  flag = CVodeRootInit(cvode_mem, 2, g);
+  if (check_flag(&flag, "CVodeRootInit", 1)) return(1);
+
+  /* Call CVLapackDense to specify the LAPACK dense linear solver */
+  flag = CVLapackDense(cvode_mem, NEQ);
+  if (check_flag(&flag, "CVLapackDense", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVDlsSetDenseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVDlsSetDenseJacFn", 1)) return(1);
+
+  /* In loop, call CVode, print results, and test for error.
+   * Break out of loop when NOUT preset output times have been reached.  */
+  printf(" \n3-species kinetics problem\n\n");
+
+  iout = 0;  tout = T1;
+  while(1) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    PrintOutput(t, Ith(y,1), Ith(y,2), Ith(y,3));
+
+    if (flag == CV_ROOT_RETURN) {
+      flagr = CVodeGetRootInfo(cvode_mem, rootsfound);
+      if (check_flag(&flagr, "CVodeGetRootInfo", 1)) return(1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (check_flag(&flag, "CVode", 1)) break;
+    if (flag == CV_SUCCESS) {
+      iout++;
+      tout *= TMULT;
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  /* Print some final statistics */
+  PrintFinalStats(cvode_mem);
+
+  /* Free y vector */
+  N_VDestroy_Serial(y);
+
+  /* Free integrator memory */
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/*
+ * f routine. Compute function f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  yd1 = Ith(ydot,1) = RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3;
+  yd3 = Ith(ydot,3) = RCONST(3.0e7)*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/*
+ * g routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype y1, y3;
+
+  y1 = Ith(y,1); y3 = Ith(y,3);
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Jacobian routine. Compute J(t,y) = df/dy. *
+ */
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y1, y2, y3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  IJth(J,1,1) = RCONST(-0.04);
+  IJth(J,1,2) = RCONST(1.0e4)*y3;
+  IJth(J,1,3) = RCONST(1.0e4)*y2;
+
+  IJth(J,2,1) = RCONST(0.04); 
+  IJth(J,2,2) = RCONST(-1.0e4)*y3-RCONST(6.0e7)*y2;
+  IJth(J,2,3) = RCONST(-1.0e4)*y2;
+
+  IJth(J,3,1) = ZERO;
+  IJth(J,3,2) = RCONST(6.0e7)*y2;
+  IJth(J,3,3) = ZERO;
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %0.4Le      y =%14.6Le  %14.6Le  %14.6Le\n", t, y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %0.4le      y =%14.6le  %14.6le  %14.6le\n", t, y1, y2, y3);
+#else
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#endif
+
+  return;
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+
+  return;
+}
+
+/* 
+ * Get and print some final statistics
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nje, nfeLS, nni, ncfn, netf, nge;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  flag = CVodeGetNumGEvals(cvode_mem, &nge);
+  check_flag(&flag, "CVodeGetNumGEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %-6ld nge = %ld\n \n",
+	 nni, ncfn, netf, nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_dnsL.out b/examples/cvodes/serial/cvsRoberts_dnsL.out
new file mode 100644
index 0000000..0e27ff1
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_dnsL.out
@@ -0,0 +1,24 @@
+ 
+3-species kinetics problem
+
+At t = 2.6391e-01      y =  9.899653e-01    3.470564e-05    1.000000e-02
+    rootsfound[] =   0   1
+At t = 4.0000e-01      y =  9.851641e-01    3.386242e-05    1.480205e-02
+At t = 4.0000e+00      y =  9.055097e-01    2.240338e-05    9.446793e-02
+At t = 4.0000e+01      y =  7.158010e-01    9.185084e-06    2.841898e-01
+At t = 4.0000e+02      y =  4.504693e-01    3.222627e-06    5.495274e-01
+At t = 4.0000e+03      y =  1.832126e-01    8.943459e-07    8.167865e-01
+At t = 4.0000e+04      y =  3.897839e-02    1.621552e-07    9.610214e-01
+At t = 4.0000e+05      y =  4.940533e-03    1.985905e-08    9.950594e-01
+At t = 4.0000e+06      y =  5.170046e-04    2.069075e-09    9.994830e-01
+At t = 2.0803e+07      y =  1.000000e-04    4.000395e-10    9.999000e-01
+    rootsfound[] =  -1   0
+At t = 4.0000e+07      y =  5.199601e-05    2.079947e-10    9.999480e-01
+At t = 4.0000e+08      y =  5.221400e-06    2.088571e-11    9.999948e-01
+At t = 4.0000e+09      y =  5.217838e-07    2.087137e-12    9.999995e-01
+At t = 4.0000e+10      y =  5.466519e-08    2.186608e-13    9.999999e-01
+
+Final Statistics:
+nst = 595    nfe  = 857    nsetups = 125    nfeLS = 0      nje = 12
+nni = 853    ncfn = 0      netf = 34     nge = 629
+ 
diff --git a/examples/cvodes/serial/cvsRoberts_dns_uw.c b/examples/cvodes/serial/cvsRoberts_dns_uw.c
new file mode 100644
index 0000000..c90efd5
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_dns_uw.c
@@ -0,0 +1,377 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODE. The problem is from
+ * chemical kinetics, and consists of the following three rate
+ * equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*(y2)^2
+ *    dy3/dt = 3.e7*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01. This program solves the problem with the BDF method,
+ * Newton iteration with the CVDENSE dense linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a user-supplied function to compute the error weights
+ * required for the WRMS norm calculations.
+ * Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+/* Header files with a description of contents used here */
+
+#include <cvodes/cvodes.h>           /* prototypes for CVODE fcts. and consts. */
+#include <cvodes/cvodes_dense.h>     /* prototype for CVDense */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, functions, and macros */
+#include <sundials/sundials_dense.h> /* definitions DlsMat and DENSE_ELEM */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+#include <sundials/sundials_math.h>  /* definition of ABS */
+
+/* User-defined vector and matrix accessor macros: Ith, IJth */
+
+/* These macros are defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined below. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+
+   IJth(A,i,j) references the (i,j)th element of the dense matrix A, where
+   i and j are in the range [1..NEQ]. The IJth macro is defined using the
+   DENSE_ELEM macro in dense.h. DENSE_ELEM numbers rows and columns of a
+   dense matrix starting from 0. */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* Ith numbers components 1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* IJth numbers rows,cols 1..NEQ */
+
+
+/* Problem Constants */
+
+#define NEQ   3                /* number of equations  */
+#define Y1    RCONST(1.0)      /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1.0e-4)   /* scalar relative tolerance            */
+#define ATOL1 RCONST(1.0e-8)   /* vector absolute tolerance components */
+#define ATOL2 RCONST(1.0e-14)
+#define ATOL3 RCONST(1.0e-6)
+#define T0    RCONST(0.0)      /* initial time           */
+#define T1    RCONST(0.4)      /* first output time      */
+#define TMULT RCONST(10.0)     /* output time factor     */
+#define NOUT  12               /* number of output times */
+
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+/* Private functions to output results */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3);
+static void PrintRootInfo(int root_f1, int root_f2);
+
+/* Private function to print final statistics */
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype t, tout;
+  N_Vector y;
+  void *cvode_mem;
+  int flag, flagr, iout;
+  int rootsfound[2];
+
+  y = NULL;
+  cvode_mem = NULL;
+
+  /* Create serial vector of length NEQ for I.C. */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize y */
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in y'=f(t,y), the inital time T0, and
+   * the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Use private function to compute error weights */
+  flag = CVodeWFtolerances(cvode_mem, ewt);
+  if (check_flag(&flag, "CVodeSetEwtFn", 1)) return(1);
+
+  /* Call CVodeRootInit to specify the root function g with 2 components */
+  flag = CVodeRootInit(cvode_mem, 2, g);
+  if (check_flag(&flag, "CVodeRootInit", 1)) return(1);
+
+  /* Call CVDense to specify the CVDENSE dense linear solver */
+  flag = CVDense(cvode_mem, NEQ);
+  if (check_flag(&flag, "CVDense", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVDlsSetDenseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVDlsSetDenseJacFn", 1)) return(1);
+
+  /* In loop, call CVode, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached.  */
+  printf(" \n3-species kinetics problem\n\n");
+
+  iout = 0;  tout = T1;
+  while(1) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    PrintOutput(t, Ith(y,1), Ith(y,2), Ith(y,3));
+
+    if (flag == CV_ROOT_RETURN) {
+      flagr = CVodeGetRootInfo(cvode_mem, rootsfound);
+      check_flag(&flagr, "CVodeGetRootInfo", 1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (check_flag(&flag, "CVode", 1)) break;
+    if (flag == CV_SUCCESS) {
+      iout++;
+      tout *= TMULT;
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  /* Print some final statistics */
+  PrintFinalStats(cvode_mem);
+
+  /* Free y vector */
+  N_VDestroy_Serial(y);
+
+  /* Free integrator memory */
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/*
+ * f routine. Compute function f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  yd1 = Ith(ydot,1) = RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3;
+  yd3 = Ith(ydot,3) = RCONST(3.0e7)*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);      
+}
+
+/*
+ * g routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype y1, y3;
+
+  y1 = Ith(y,1); y3 = Ith(y,3);
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Jacobian routine. Compute J(t,y) = df/dy. *
+ */
+
+static int Jac(long int N, realtype t,
+               N_Vector y, N_Vector fy, DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y1, y2, y3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  IJth(J,1,1) = RCONST(-0.04);
+  IJth(J,1,2) = RCONST(1.0e4)*y3;
+  IJth(J,1,3) = RCONST(1.0e4)*y2;
+  IJth(J,2,1) = RCONST(0.04); 
+  IJth(J,2,2) = RCONST(-1.0e4)*y3-RCONST(6.0e7)*y2;
+  IJth(J,2,3) = RCONST(-1.0e4)*y2;
+  IJth(J,3,2) = RCONST(6.0e7)*y2;
+
+  return(0);
+}
+
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %0.4Le      y =%14.6Le  %14.6Le  %14.6Le\n", t, y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#else
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#endif
+
+  return;
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+
+  return;
+}
+
+/* 
+ * Get and print some final statistics
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nje, nfeLS, nni, ncfn, netf, nge;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVDlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVDlsGetNumJacEvals", 1);
+  flag = CVDlsGetNumRhsEvals(cvode_mem, &nfeLS);
+  check_flag(&flag, "CVDlsGetNumRhsEvals", 1);
+
+  flag = CVodeGetNumGEvals(cvode_mem, &nge);
+  check_flag(&flag, "CVodeGetNumGEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nfeLS = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nfeLS, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %-6ld nge = %ld\n \n",
+	 nni, ncfn, netf, nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_dns_uw.out b/examples/cvodes/serial/cvsRoberts_dns_uw.out
new file mode 100644
index 0000000..14add0b
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_dns_uw.out
@@ -0,0 +1,24 @@
+ 
+3-species kinetics problem
+
+At t = 2.6391e-01      y =  9.899653e-01    3.470564e-05    1.000000e-02
+    rootsfound[] =   0   1
+At t = 4.0000e-01      y =  9.851641e-01    3.386242e-05    1.480205e-02
+At t = 4.0000e+00      y =  9.055097e-01    2.240338e-05    9.446793e-02
+At t = 4.0000e+01      y =  7.158010e-01    9.185084e-06    2.841898e-01
+At t = 4.0000e+02      y =  4.504693e-01    3.222627e-06    5.495274e-01
+At t = 4.0000e+03      y =  1.832126e-01    8.943459e-07    8.167865e-01
+At t = 4.0000e+04      y =  3.897840e-02    1.621553e-07    9.610214e-01
+At t = 4.0000e+05      y =  4.941626e-03    1.986351e-08    9.950584e-01
+At t = 4.0000e+06      y =  5.162295e-04    2.065971e-09    9.994838e-01
+At t = 2.0789e+07      y =  1.000000e-04    4.000395e-10    9.999000e-01
+    rootsfound[] =  -1   0
+At t = 4.0000e+07      y =  5.201354e-05    2.080648e-10    9.999480e-01
+At t = 4.0000e+08      y =  5.215272e-06    2.086119e-11    9.999948e-01
+At t = 4.0000e+09      y =  5.213021e-07    2.085210e-12    9.999995e-01
+At t = 4.0000e+10      y =  4.958738e-08    1.983495e-13    1.000000e-00
+
+Final Statistics:
+nst = 534    nfe  = 796    nsetups = 127    nfeLS = 0      nje = 12
+nni = 792    ncfn = 0      netf = 35     nge = 564
+ 
diff --git a/examples/cvodes/serial/cvsRoberts_klu.c b/examples/cvodes/serial/cvsRoberts_klu.c
new file mode 100644
index 0000000..0d1106c
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_klu.c
@@ -0,0 +1,382 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward.
+ *      Based on cvRoberts_dns.c and modified to use KLU.
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODE. The problem is from
+ * chemical kinetics, and consists of the following three rate
+ * equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*(y2)^2
+ *    dy3/dt = 3.e7*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01. This program solves the problem with the BDF method,
+ * Newton iteration with the CVKLU sparse direct linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance. Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+/* Header files with a description of contents used */
+
+#include <cvodes/cvodes.h>             /* prototypes for CVODE fcts., consts. */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., macros */
+#include <cvodes/cvodes_klu.h>         /* prototype for CVKLU */
+#include <sundials/sundials_sparse.h> /* definitions SlsMat */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+
+/* User-defined vector and matrix accessor macro: Ith */
+
+/* These macros are defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined below. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+*/
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* Ith numbers components 1..NEQ */
+
+
+/* Problem Constants */
+
+#define ZERO  RCONST(0.0)
+
+#define NEQ   3                /* number of equations  */
+#define Y1    RCONST(1.0)      /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1.0e-4)   /* scalar relative tolerance            */
+#define ATOL1 RCONST(1.0e-8)   /* vector absolute tolerance components */
+#define ATOL2 RCONST(1.0e-14)
+#define ATOL3 RCONST(1.0e-6)
+#define T0    RCONST(0.0)      /* initial time           */
+#define T1    RCONST(0.4)      /* first output time      */
+#define TMULT RCONST(10.0)     /* output time factor     */
+#define NOUT  12               /* number of output times */
+
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private functions to output results */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3);
+static void PrintRootInfo(int root_f1, int root_f2);
+
+/* Private function to print final statistics */
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype reltol, t, tout;
+  N_Vector y, abstol;
+  void *cvode_mem;
+  int flag, flagr, iout, nnz;
+  int rootsfound[2];
+
+  y = abstol = NULL;
+  cvode_mem = NULL;
+
+  /* Create serial vector of length NEQ for I.C. and abstol */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  abstol = N_VNew_Serial(NEQ); 
+  if (check_flag((void *)abstol, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize y */
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Set the scalar relative tolerance */
+  reltol = RTOL;
+  /* Set the vector absolute tolerance */
+  Ith(abstol,1) = ATOL1;
+  Ith(abstol,2) = ATOL2;
+  Ith(abstol,3) = ATOL3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in y'=f(t,y), the inital time T0, and
+   * the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSVtolerances to specify the scalar relative tolerance
+   * and vector absolute tolerances */
+  flag = CVodeSVtolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSVtolerances", 1)) return(1);
+
+  /* Call CVodeRootInit to specify the root function g with 2 components */
+  flag = CVodeRootInit(cvode_mem, 2, g);
+  if (check_flag(&flag, "CVodeRootInit", 1)) return(1);
+
+  /* Call CVKLU to specify the CVKLU sparse direct linear solver */
+  nnz = NEQ * NEQ;
+  flag = CVKLU(cvode_mem, NEQ, nnz, CSC_MAT);
+  if (check_flag(&flag, "CVKLU", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVSlsSetSparseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVSlsSetSparseJacFn", 1)) return(1);
+
+  /* In loop, call CVode, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached.  */
+  printf(" \n3-species kinetics problem\n\n");
+
+  iout = 0;  tout = T1;
+  while(1) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    PrintOutput(t, Ith(y,1), Ith(y,2), Ith(y,3));
+
+    if (flag == CV_ROOT_RETURN) {
+      flagr = CVodeGetRootInfo(cvode_mem, rootsfound);
+      if (check_flag(&flagr, "CVodeGetRootInfo", 1)) return(1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (check_flag(&flag, "CVode", 1)) break;
+    if (flag == CV_SUCCESS) {
+      iout++;
+      tout *= TMULT;
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  /* Print some final statistics */
+  PrintFinalStats(cvode_mem);
+
+  /* Free y and abstol vectors */
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(abstol);
+
+  /* Free integrator memory */
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/*
+ * f routine. Compute function f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  yd1 = Ith(ydot,1) = RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3;
+  yd3 = Ith(ydot,3) = RCONST(3.0e7)*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/*
+ * g routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype y1, y3;
+
+  y1 = Ith(y,1); y3 = Ith(y,3);
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Jacobian routine. Compute J(t,y) = df/dy. *
+ */
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int* colptrs;
+  int* rowvals;
+  realtype* data;
+  
+  yval = N_VGetArrayPointer_Serial(y);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data    = JacMat->data;
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = RCONST(-0.04);
+  rowvals[0] = 0;
+  data[1] = RCONST(0.04);
+  rowvals[1] = 1;
+  data[2] = ZERO;
+  rowvals[2] = 2;
+
+  data[3] = RCONST(1.0e4)*yval[2];
+  rowvals[3] = 0;
+  data[4] = (RCONST(-1.0e4)*yval[2]) - (RCONST(6.0e7)*yval[1]);
+  rowvals[4] = 1;
+  data[5] = RCONST(6.0e7)*yval[1];
+  rowvals[5] = 2;
+
+  data[6] = RCONST(1.0e4)*yval[1];
+  rowvals[6] = 0;
+  data[7] = RCONST(-1.0e4)*yval[1];
+  rowvals[7] = 1;
+  data[8] = ZERO;
+  rowvals[8] = 2;
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %0.4Le      y =%14.6Le  %14.6Le  %14.6Le\n", t, y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#else
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#endif
+
+  return;
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+
+  return;
+}
+
+/* 
+ * Get and print some final statistics
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nje, nni, ncfn, netf, nge;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVSlsGetNumJacEvals", 1);
+
+  flag = CVodeGetNumGEvals(cvode_mem, &nge);
+  check_flag(&flag, "CVodeGetNumGEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %-6ld    nge = %ld\n \n",
+	 nni, ncfn, netf, nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_klu.out b/examples/cvodes/serial/cvsRoberts_klu.out
new file mode 100644
index 0000000..776406f
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_klu.out
@@ -0,0 +1,24 @@
+ 
+3-species kinetics problem
+
+At t = 2.6391e-01      y =  9.899653e-01    3.470564e-05    1.000000e-02
+    rootsfound[] =   0   1
+At t = 4.0000e-01      y =  9.851640e-01    3.386245e-05    1.480209e-02
+At t = 4.0000e+00      y =  9.055156e-01    2.240441e-05    9.446197e-02
+At t = 4.0000e+01      y =  7.158508e-01    9.186546e-06    2.841400e-01
+At t = 4.0000e+02      y =  4.505784e-01    3.223707e-06    5.494184e-01
+At t = 4.0000e+03      y =  1.832290e-01    8.944054e-07    8.167701e-01
+At t = 4.0000e+04      y =  3.898012e-02    1.621625e-07    9.610197e-01
+At t = 4.0000e+05      y =  4.936714e-03    1.984363e-08    9.950633e-01
+At t = 4.0000e+06      y =  5.164962e-04    2.067039e-09    9.994835e-01
+At t = 2.0784e+07      y =  1.000000e-04    4.000395e-10    9.999000e-01
+    rootsfound[] =  -1   0
+At t = 4.0000e+07      y =  5.202874e-05    2.081257e-10    9.999480e-01
+At t = 4.0000e+08      y =  5.206719e-06    2.082698e-11    9.999948e-01
+At t = 4.0000e+09      y =  5.208794e-07    2.083519e-12    9.999995e-01
+At t = 4.0000e+10      y =  5.244455e-08    2.097782e-13    9.999999e-01
+
+Final Statistics:
+nst = 430    nfe  = 574    nsetups = 98     nje = 78
+nni = 570    ncfn = 0      netf = 23        nge = 466
+ 
diff --git a/examples/cvodes/serial/cvsRoberts_sps.c b/examples/cvodes/serial/cvsRoberts_sps.c
new file mode 100644
index 0000000..46ef255
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_sps.c
@@ -0,0 +1,378 @@
+/*
+ * -----------------------------------------------------------------
+ * $Rev $
+ * $Date $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward.
+ *      Based on cvRoberts_dns.c and modified to use SUPERLU_MT.
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by CVODE. The problem is from
+ * chemical kinetics, and consists of the following three rate
+ * equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*(y2)^2
+ *    dy3/dt = 3.e7*(y2)^2
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01. This program solves the problem with the BDF method,
+ * Newton iteration with the CVSUPERLUMT sparse direct linear solver, and a
+ * user-supplied Jacobian routine.
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance. Output is printed in decades from t = .4 to t = 4.e10.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+/* Header files with a description of contents used */
+
+#include <cvodes/cvodes.h>             /* prototypes for CVODE fcts., consts. */
+#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., macros */
+#include <cvodes/cvodes_superlumt.h>   /* prototype for CVSUPERLUMT */
+#include <sundials/sundials_sparse.h> /* definitions SlsMat */
+#include <sundials/sundials_types.h> /* definition of type realtype */
+
+/* User-defined vector and matrix accessor macro: Ith */
+
+/* These macros are defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined below. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+*/
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* Ith numbers components 1..NEQ */
+
+
+/* Problem Constants */
+
+#define ZERO  RCONST(0.0)
+
+#define NEQ   3                /* number of equations  */
+#define Y1    RCONST(1.0)      /* initial y components */
+#define Y2    RCONST(0.0)
+#define Y3    RCONST(0.0)
+#define RTOL  RCONST(1.0e-4)   /* scalar relative tolerance            */
+#define ATOL1 RCONST(1.0e-8)   /* vector absolute tolerance components */
+#define ATOL2 RCONST(1.0e-14)
+#define ATOL3 RCONST(1.0e-6)
+#define T0    RCONST(0.0)      /* initial time           */
+#define T1    RCONST(0.4)      /* first output time      */
+#define TMULT RCONST(10.0)     /* output time factor     */
+#define NOUT  12               /* number of output times */
+
+
+/* Functions Called by the Solver */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private functions to output results */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3);
+static void PrintRootInfo(int root_f1, int root_f2);
+
+/* Private function to print final statistics */
+
+static void PrintFinalStats(void *cvode_mem);
+
+/* Private function to check function return values */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/*
+ *-------------------------------
+ * Main Program
+ *-------------------------------
+ */
+
+int main()
+{
+  realtype reltol, t, tout;
+  N_Vector y, abstol;
+  void *cvode_mem;
+  int flag, flagr, iout, nnz;
+  int rootsfound[2];
+
+  y = abstol = NULL;
+  cvode_mem = NULL;
+
+  /* Create serial vector of length NEQ for I.C. and abstol */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+  abstol = N_VNew_Serial(NEQ); 
+  if (check_flag((void *)abstol, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize y */
+  Ith(y,1) = Y1;
+  Ith(y,2) = Y2;
+  Ith(y,3) = Y3;
+
+  /* Set the scalar relative tolerance */
+  reltol = RTOL;
+  /* Set the vector absolute tolerance */
+  Ith(abstol,1) = ATOL1;
+  Ith(abstol,2) = ATOL2;
+  Ith(abstol,3) = ATOL3;
+
+  /* Call CVodeCreate to create the solver memory and specify the 
+   * Backward Differentiation Formula and the use of a Newton iteration */
+  cvode_mem = CVodeCreate(CV_BDF, CV_NEWTON);
+  if (check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(1);
+  
+  /* Call CVodeInit to initialize the integrator memory and specify the
+   * user's right hand side function in y'=f(t,y), the inital time T0, and
+   * the initial dependent variable vector y. */
+  flag = CVodeInit(cvode_mem, f, T0, y);
+  if (check_flag(&flag, "CVodeInit", 1)) return(1);
+
+  /* Call CVodeSVtolerances to specify the scalar relative tolerance
+   * and vector absolute tolerances */
+  flag = CVodeSVtolerances(cvode_mem, reltol, abstol);
+  if (check_flag(&flag, "CVodeSVtolerances", 1)) return(1);
+
+  /* Call CVodeRootInit to specify the root function g with 2 components */
+  flag = CVodeRootInit(cvode_mem, 2, g);
+  if (check_flag(&flag, "CVodeRootInit", 1)) return(1);
+
+  /* Call CVSuperLUMT to specify the CVSuperLUMT sparse direct linear solver */
+  nnz = NEQ * NEQ;
+  flag = CVSuperLUMT(cvode_mem, 1, NEQ, nnz);
+  if (check_flag(&flag, "CVSuperLUMT", 1)) return(1);
+
+  /* Set the Jacobian routine to Jac (user-supplied) */
+  flag = CVSlsSetSparseJacFn(cvode_mem, Jac);
+  if (check_flag(&flag, "CVSlsSetSparseJacFn", 1)) return(1);
+
+  /* In loop, call CVode, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached.  */
+  printf(" \n3-species kinetics problem\n\n");
+
+  iout = 0;  tout = T1;
+  while(1) {
+    flag = CVode(cvode_mem, tout, y, &t, CV_NORMAL);
+    PrintOutput(t, Ith(y,1), Ith(y,2), Ith(y,3));
+
+    if (flag == CV_ROOT_RETURN) {
+      flagr = CVodeGetRootInfo(cvode_mem, rootsfound);
+      if (check_flag(&flagr, "CVodeGetRootInfo", 1)) return(1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (check_flag(&flag, "CVode", 1)) break;
+    if (flag == CV_SUCCESS) {
+      iout++;
+      tout *= TMULT;
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  /* Print some final statistics */
+  PrintFinalStats(cvode_mem);
+
+  /* Free y and abstol vectors */
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(abstol);
+
+  /* Free integrator memory */
+  CVodeFree(&cvode_mem);
+
+  return(0);
+}
+
+
+/*
+ *-------------------------------
+ * Functions called by the solver
+ *-------------------------------
+ */
+
+/*
+ * f routine. Compute function f(t,y). 
+ */
+
+static int f(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  realtype y1, y2, y3, yd1, yd3;
+
+  y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
+
+  yd1 = Ith(ydot,1) = RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3;
+  yd3 = Ith(ydot,3) = RCONST(3.0e7)*y2*y2;
+        Ith(ydot,2) = -yd1 - yd3;
+
+  return(0);
+}
+
+/*
+ * g routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int g(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  realtype y1, y3;
+
+  y1 = Ith(y,1); y3 = Ith(y,3);
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Jacobian routine. Compute J(t,y) = df/dy. *
+ */
+
+static int Jac(realtype t,
+               N_Vector y, N_Vector fy, SlsMat JacMat, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int *colptrs = *JacMat->colptrs;
+  int *rowvals = *JacMat->rowvals;
+
+  yval = N_VGetArrayPointer_Serial(y);
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  JacMat->data[0] = RCONST(-0.04);
+  rowvals[0] = 0;
+  JacMat->data[1] = RCONST(0.04);
+  rowvals[1] = 1;
+  JacMat->data[2] = ZERO;
+  rowvals[2] = 2;
+
+  JacMat->data[3] = RCONST(1.0e4)*yval[2];
+  rowvals[3] = 0;
+  JacMat->data[4] = (RCONST(-1.0e4)*yval[2]) - (RCONST(6.0e7)*yval[1]);
+  rowvals[4] = 1;
+  JacMat->data[5] = RCONST(6.0e7)*yval[1];
+  rowvals[5] = 2;
+
+  JacMat->data[6] = RCONST(1.0e4)*yval[1];
+  rowvals[6] = 0;
+  JacMat->data[7] = RCONST(-1.0e4)*yval[1];
+  rowvals[7] = 1;
+  JacMat->data[8] = ZERO;
+  rowvals[8] = 2;
+
+  return(0);
+}
+
+/*
+ *-------------------------------
+ * Private helper functions
+ *-------------------------------
+ */
+
+static void PrintOutput(realtype t, realtype y1, realtype y2, realtype y3)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("At t = %0.4Le      y =%14.6Le  %14.6Le  %14.6Le\n", t, y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#else
+  printf("At t = %0.4e      y =%14.6e  %14.6e  %14.6e\n", t, y1, y2, y3);
+#endif
+
+  return;
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+
+  return;
+}
+
+/* 
+ * Get and print some final statistics
+ */
+
+static void PrintFinalStats(void *cvode_mem)
+{
+  long int nst, nfe, nsetups, nje, nni, ncfn, netf, nge;
+  int flag;
+
+  flag = CVodeGetNumSteps(cvode_mem, &nst);
+  check_flag(&flag, "CVodeGetNumSteps", 1);
+  flag = CVodeGetNumRhsEvals(cvode_mem, &nfe);
+  check_flag(&flag, "CVodeGetNumRhsEvals", 1);
+  flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups);
+  check_flag(&flag, "CVodeGetNumLinSolvSetups", 1);
+  flag = CVodeGetNumErrTestFails(cvode_mem, &netf);
+  check_flag(&flag, "CVodeGetNumErrTestFails", 1);
+  flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni);
+  check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1);
+  flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn);
+  check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1);
+
+  flag = CVSlsGetNumJacEvals(cvode_mem, &nje);
+  check_flag(&flag, "CVSlsGetNumJacEvals", 1);
+
+  flag = CVodeGetNumGEvals(cvode_mem, &nge);
+  check_flag(&flag, "CVodeGetNumGEvals", 1);
+
+  printf("\nFinal Statistics:\n");
+  printf("nst = %-6ld nfe  = %-6ld nsetups = %-6ld nje = %ld\n",
+	 nst, nfe, nsetups, nje);
+  printf("nni = %-6ld ncfn = %-6ld netf = %-6ld    nge = %ld\n \n",
+	 nni, ncfn, netf, nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/cvodes/serial/cvsRoberts_sps.out b/examples/cvodes/serial/cvsRoberts_sps.out
new file mode 100644
index 0000000..b92bc8e
--- /dev/null
+++ b/examples/cvodes/serial/cvsRoberts_sps.out
@@ -0,0 +1,24 @@
+ 
+3-species kinetics problem
+
+At t = 2.6391e-01      y =  9.899653e-01    3.470564e-05    1.000000e-02
+    rootsfound[] =   0   1
+At t = 4.0000e-01      y =  9.851641e-01    3.386242e-05    1.480205e-02
+At t = 4.0000e+00      y =  9.055097e-01    2.240338e-05    9.446793e-02
+At t = 4.0000e+01      y =  7.158017e-01    9.185037e-06    2.841892e-01
+At t = 4.0000e+02      y =  4.505360e-01    3.223271e-06    5.494608e-01
+At t = 4.0000e+03      y =  1.832299e-01    8.944378e-07    8.167692e-01
+At t = 4.0000e+04      y =  3.898902e-02    1.622006e-07    9.610108e-01
+At t = 4.0000e+05      y =  4.936383e-03    1.984224e-08    9.950636e-01
+At t = 4.0000e+06      y =  5.168093e-04    2.068293e-09    9.994832e-01
+At t = 2.0790e+07      y =  1.000000e-04    4.000397e-10    9.999000e-01
+    rootsfound[] =  -1   0
+At t = 4.0000e+07      y =  5.202440e-05    2.081083e-10    9.999480e-01
+At t = 4.0000e+08      y =  5.201061e-06    2.080435e-11    9.999948e-01
+At t = 4.0000e+09      y =  5.258603e-07    2.103442e-12    9.999995e-01
+At t = 4.0000e+10      y =  6.934511e-08    2.773804e-13    9.999999e-01
+
+Final Statistics:
+nst = 542    nfe  = 755    nsetups = 107    nje = 11
+nni = 751    ncfn = 0      netf = 22        nge = 570
+ 
diff --git a/examples/ida/C_openmp/CMakeLists.txt b/examples/ida/C_openmp/CMakeLists.txt
new file mode 100644
index 0000000..2ed6996
--- /dev/null
+++ b/examples/ida/C_openmp/CMakeLists.txt
@@ -0,0 +1,143 @@
+# ---------------------------------------------------------------
+# $Revision:  $
+# $Date:  $
+# ---------------------------------------------------------------
+# Programmer: Ting Yan @ SMU
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the IDA OpenMP examples
+
+
+# Only include tests if OpenMP is enabled
+IF(OPENMP_FOUND)
+  # Add variable ida_examples with the names of the openmp IDA examples
+  SET(IDA_examples
+    idaFoodWeb_bnd_omp
+    idaFoodWeb_kry_omp
+    )
+
+  SET(IDA_examples_BL
+  )
+ENDIF(OPENMP_FOUND)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_static)
+  SET(NVECS_LIB sundials_nvecopenmp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_shared)
+  SET(NVECS_LIB sundials_nvecopenmp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+
+# Set-up linker flags and link libraries
+SET(SUNDIALS_LIBS ${IDA_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(PETSC_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_FOUND)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+
+# Add the build and install targets for each IDA example
+
+FOREACH(example ${IDA_examples})
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} TEST_ARGS 4)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/C_openmp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${IDA_examples})
+
+# If Lapack support is enabled, add the build and install targets for
+# the examples using Lapack
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${IDA_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example} TEST_ARGS 4)
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/C_openmp)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${IDA_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/C_openmp)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDA")
+  SET(SOLVER_LIB "sundials_ida")
+  LIST2STRING(IDA_examples EXAMPLES)
+  IF(LAPACK_FOUND)
+    LIST2STRING(IDA_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+  
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+  
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/C_openmp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/ida/C_openmp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/C_openmp 
+    )
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/C_openmp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/ida/C_openmp/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/C_openmp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/ida/C_openmp/README b/examples/ida/C_openmp/README
new file mode 100644
index 0000000..e2b5f94
--- /dev/null
+++ b/examples/ida/C_openmp/README
@@ -0,0 +1,50 @@
+List of C_openmp examples for IDAS
+
+  idaFoodWeb_bnd_omp   : 2-D food web system, banded Jacobian
+  idaFoodWeb_kry_omp   : 2-D food web system using Krylov solver
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/ida/C_openmp/idaFoodWeb_bnd_omp.c b/examples/ida/C_openmp/idaFoodWeb_bnd_omp.c
new file mode 100644
index 0000000..5250a6d
--- /dev/null
+++ b/examples/ida/C_openmp/idaFoodWeb_bnd_omp.c
@@ -0,0 +1,705 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on idaFoodWeb_bnd.c and parallelized with OpenMP
+ * -----------------------------------------------------------------
+ * Example program for IDA: Food web problem.
+ *
+ * This example program (OpenMP version) uses the IDABAND linear 
+ * solver, and IDACalcIC for initial condition calculation.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c    + c  )  +  R (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *  a(i,i) = -AA   (all i)
+ *  a(i,j) = -GG   (i <= np , j >  np)
+ *  a(i,j) =  EE   (i >  np, j <= np)
+ *  all other a(i,j) = 0
+ *  b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i <= np)
+ *  b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i  > np)
+ *  d(i) = DPREY   (i <= np)
+ *  d(i) = DPRED   (i > np)
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative = 0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh.
+ *
+ * The DAE system is solved by IDA using the IDABAND linear solver.
+ * Output is printed at t = 0, .001, .01, .1, .4, .7, 1.
+ *
+ * Optionally, we can set the number of threads from environment 
+ * variable or command line. To check the current value for number
+ * of threads from environment:
+ *      % echo $OMP_NUM_THREADS
+ *
+ * Execution:
+ *
+ * If the user want to use the default value or the number of threads 
+ * from environment value:
+ *      % ./idaFoodWeb_bnd_omp 
+ * If the user want to specify the number of threads to use
+ *      % ./idaFoodWeb_bnd_omp num_threads
+ * where num_threads is the number of threads the user want to use 
+ *
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems, Journal
+ *     of Applied Mathematics and Computation, Vol. 31 (May 1989),
+ *     pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_band.h>
+#include <nvector/nvector_openmp.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+/* Problem Constants. */
+
+#define NPREY       1              /* No. of prey (= no. of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898)
+#define FOURPI      (RCONST(4.0)*PI)
+
+#define MX          20             /* MX = number of x mesh points      */
+#define MY          20             /* MY = number of y mesh points      */
+#define NSMX        (NUM_SPECIES * MX)
+#define NEQ         (NUM_SPECIES*MX*MY)
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a  */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a  */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a  */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b  */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d  */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d  */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns.  */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns.   */
+#define AX          RCONST(1.0)    /* Total range of x variable         */
+#define AY          RCONST(1.0)    /* Total range of y variable         */
+#define RTOL        RCONST(1.e-5)  /* Relative tolerance                */
+#define ATOL        RCONST(1.e-5)  /* Absolute tolerance                */
+#define NOUT        6              /* Number of output times            */
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values        */
+#define TADD        RCONST(0.3)    /* Increment for tout values         */
+#define ZERO        RCONST(0.)     
+#define ONE         RCONST(1.0)    
+
+/* 
+ * User-defined vector and accessor macro: IJ_Vptr.
+ * IJ_Vptr is defined in order to express the underlying 3-D structure of 
+ * the dependent variable vector from its underlying 1-D storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_OMP(vv, (i)*NUM_SPECIES + (j)*NSMX))
+
+/* Type: UserData.  Contains problem constants, etc. */
+
+typedef struct {
+  long int Neq, ns, np, mx, my;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES];
+  N_Vector rates;
+  int nthreads;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+
+static int resweb(realtype time, N_Vector cc, N_Vector cp, N_Vector resval, 
+                  void *user_data);
+
+/* Prototypes for private Helper Functions. */
+
+static void InitUserData(UserData webdata);
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata);
+static void PrintHeader(long int mu, long int ml, realtype rtol, realtype atol);
+static void PrintOutput(void *mem, N_Vector c, realtype t);
+static void PrintFinalStats(void *mem);
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate, UserData webdata);
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+static realtype dotprod(long int size, realtype *x1, realtype *x2);
+static int check_flag(void *flagvalue, char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{ 
+  void *mem;
+  UserData webdata;
+  N_Vector cc, cp, id;
+  int iout, retval;
+  long int mu, ml;
+  realtype rtol, atol, t0, tout, tret;
+  int num_threads;
+
+  mem = NULL;
+  webdata = NULL;
+  cc = cp = id = NULL;
+
+  /* Set the number of threads to use */
+  num_threads = 1;       /* default value */
+#ifdef _OPENMP
+  num_threads = omp_get_max_threads();  /* overwrite with OMP_NUM_THREADS enviroment variable */
+#endif
+  if (argc > 1)      /* overwrite with command line value, if supplied */
+    num_threads = strtol(argv[1], NULL, 0);
+
+  /* Allocate and initialize user data block webdata. */
+
+  webdata = (UserData) malloc(sizeof *webdata);
+  webdata->rates = N_VNew_OpenMP(NEQ, num_threads);
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  webdata->nthreads = num_threads;
+
+  InitUserData(webdata);
+
+  /* Allocate N-vectors and initialize cc, cp, and id. */
+
+  cc  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)cc, "N_VNew_OpenMP", 0)) return(1);
+
+  cp  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)cp, "N_VNew_OpenMP", 0)) return(1);
+
+  id  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)id, "N_VNew_OpenMP", 0)) return(1);
+  
+  SetInitialProfiles(cc, cp, id, webdata);
+  
+  /* Set remaining inputs to IDAMalloc. */
+  
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+
+  /* Call IDACreate and IDAMalloc to initialize IDA. */
+  
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  retval = IDASetUserData(mem, webdata);
+  if(check_flag(&retval, "IDASetUserData", 1)) return(1);
+
+  retval = IDASetId(mem, id);
+  if(check_flag(&retval, "IDASetId", 1)) return(1);
+
+  retval = IDAInit(mem, resweb, t0, cc, cp);
+  if(check_flag(&retval, "IDAInit", 1)) return(1);
+
+  retval = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&retval, "IDASStolerances", 1)) return(1);
+
+  /* Call IDABand to specify the IDA linear solver. */
+
+  mu = ml = NSMX;
+  retval = IDABand(mem, NEQ, mu, ml);
+  if(check_flag(&retval, "IDABand", 1)) return(1);
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+
+  tout = RCONST(0.001);
+  retval = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&retval, "IDACalcIC", 1)) return(1);
+  
+  /* Print heading, basic parameters, and initial values. */
+
+  PrintHeader(mu, ml, rtol, atol);
+  PrintOutput(mem, cc, ZERO);
+  
+  /* Loop over iout, call IDASolve (normal mode), print selected output. */
+  
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    retval = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if(check_flag(&retval, "IDASolve", 1)) return(retval);
+    
+    PrintOutput(mem, cc, tret);
+    
+    if (iout < 3) tout *= TMULT; else tout += TADD;
+    
+  }
+  
+  /* Print final statistics and free memory. */  
+  
+  PrintFinalStats(mem);
+  printf("num_threads = %i\n\n", num_threads);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_OpenMP(cc);
+  N_VDestroy_OpenMP(cp);
+  N_VDestroy_OpenMP(id);
+
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_OpenMP(webdata->rates);
+  free(webdata);
+
+  return(0);
+}
+
+/* Define lines for readability in later routines */ 
+
+#define acoef  (webdata->acoef)
+#define bcoef  (webdata->bcoef)
+#define cox    (webdata->cox)
+#define coy    (webdata->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * resweb: System residual function for predator-prey system.
+ * This routine calls Fweb to get all the right-hand sides of the
+ * equations, then loads the residual vector accordingly,
+ * using cp in the case of prey species.                 
+ */
+
+static int resweb(realtype tt, N_Vector cc, N_Vector cp, 
+                  N_Vector res,  void *user_data)
+{
+  long int jx, jy, is, yloc, loc, np;
+  realtype *resv, *cpv;
+  UserData webdata;
+  
+  webdata = (UserData)user_data;
+  
+  cpv = NV_DATA_OMP(cp);
+  resv = NV_DATA_OMP(res);
+  np = webdata->np;
+  
+  /* Call Fweb to set res to vector of right-hand sides. */
+  Fweb(tt, cc, res, webdata);
+  
+  /* Loop over all grid points, setting residual values appropriately
+     for differential or algebraic components.                        */
+#pragma omp parallel for default(shared) private(jy, yloc, jx, loc, is) schedule(static) 
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np)
+          resv[loc+is] = cpv[loc+is] - resv[loc+is];
+        else
+          resv[loc+is] = -resv[loc+is];
+      }
+    }
+  }
+  
+  return(0);
+  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  webdata->mx = MX;
+  webdata->my = MY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->Neq= NEQ;
+  
+  /* Set up the coefficients a and b, and others found in the equations. */
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); dy2 = (webdata->dy)*(webdata->dy);
+  
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+    
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+    
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+  
+}
+
+/* 
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata)
+{
+  long int loc, yloc, is, jx, jy, np;
+  realtype xx, yy, xyfactor;
+  realtype *ccv, *cpv, *idv;
+  
+  ccv = NV_DATA_OMP(cc);
+  cpv = NV_DATA_OMP(cp);
+  idv = NV_DATA_OMP(id);
+  np = webdata->np;
+  
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy * webdata->dy;
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx * webdata->dx;
+      xyfactor = RCONST(16.0)*xx*(ONE-xx)*yy*(ONE-yy);
+      xyfactor *= xyfactor;
+      loc = yloc + NUM_SPECIES*jx;
+       
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np) {
+          ccv[loc+is] = RCONST(10.0) + (realtype)(is+1) * xyfactor;
+          idv[loc+is] = ONE;
+        }
+        else {
+	  ccv[loc+is] = RCONST(1.0e5);
+          idv[loc+is] = ZERO;
+        }
+      }
+    }
+  }
+  
+  /* Set c' for the prey by calling the function Fweb. */
+  Fweb(ZERO, cc, cp, webdata);
+  
+  /* Set c' for predators to 0. */
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = np; is < NUM_SPECIES; is++) {
+        cpv[loc+is] = ZERO;
+      }
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(long int mu, long int ml, realtype rtol, realtype atol)
+{
+  printf("\nidaFoodWeb_bnd_omp: Predator-prey DAE OpenMP example problem for IDA \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     System size: %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDABAND,  Band parameters mu = %ld, ml = %ld\n",mu,ml);
+  printf("CalcIC called to correct initial predator concentrations.\n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+  
+}
+
+/* 
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of the concentrations
+ * are printed for the bottom left and top right grid points only.  
+ */
+
+static void PrintOutput(void *mem, N_Vector c, realtype t)
+{
+  int i, kused, flag;
+  long int nst;
+  realtype *c_bl, *c_tr, hused;
+
+  flag = IDAGetLastOrder(mem, &kused);
+  check_flag(&flag, "IDAGetLastOrder", 1);
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetLastStep(mem, &hused);
+  check_flag(&flag, "IDAGetLastStep", 1);
+  
+  c_bl = IJ_Vptr(c,0,0);
+  c_tr = IJ_Vptr(c,MX-1,MY-1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4Le %12.4Le   |\n",c_bl[i],c_tr[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#else
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#endif
+
+  printf("\n");
+}
+
+/* 
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{ 
+  long int nst, nre, nreLS, nni, nje, netf, ncfn;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1);
+  flag = IDADlsGetNumJacEvals(mem, &nje);
+  check_flag(&flag, "IDADlsGetNumJacEvals", 1);
+  flag = IDADlsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDADlsGetNumResEvals", 1);
+
+  printf("-----------------------------------------------------------\n");
+  printf("Final run statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+
+}
+
+/* 
+ * Fweb: Rate function for the food-web problem.                        
+ * This routine computes the right-hand sides of the system equations,   
+ * consisting of the diffusion term and interaction term.                
+ * The interaction term is computed by the function WebRates.            
+ */
+
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate,  
+                 UserData webdata)
+{ 
+  long int jx, jy, is, idyu, idyl, idxu, idxl;
+  realtype xx, yy, *cxy, *ratesxy, *cratexy, dcyli, dcyui, dcxli, dcxui;
+  
+  /* Loop over grid points, evaluate interaction vector (length ns),
+     form diffusion difference terms, and load crate.                    */
+  
+  for (jy = 0; jy < MY; jy++) {
+    yy = (webdata->dy) * jy ;
+    idyu = (jy!=MY-1) ? NSMX : -NSMX;
+    idyl = (jy!= 0  ) ? NSMX : -NSMX;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = (webdata->dx) * jx;
+      idxu = (jx!= MX-1) ?  NUM_SPECIES : -NUM_SPECIES;
+      idxl = (jx!=  0  ) ?  NUM_SPECIES : -NUM_SPECIES;
+      cxy = IJ_Vptr(cc,jx,jy);
+      ratesxy = IJ_Vptr(webdata->rates,jx,jy);
+      cratexy = IJ_Vptr(crate,jx,jy);
+      
+      /* Get interaction vector at this grid point. */
+      WebRates(xx, yy, cxy, ratesxy, webdata);
+      
+      /* Loop over species, do differencing, load crate segment. */
+#pragma omp parallel for default(shared) private(is, dcyli, dcyui, dcxli, dcxui) schedule(static)
+      for (is = 0; is < NUM_SPECIES; is++) {
+        
+        /* Differencing in y. */
+        dcyli = *(cxy+is) - *(cxy - idyl + is) ;
+        dcyui = *(cxy + idyu + is) - *(cxy+is);
+        
+        /* Differencing in x. */
+        dcxli = *(cxy+is) - *(cxy - idxl + is);
+        dcxui = *(cxy + idxu +is) - *(cxy+is);
+        
+        /* Compute the crate values at (xx,yy). */
+        cratexy[is] = coy[is] * (dcyui - dcyli) +
+          cox[is] * (dcxui - dcxli) + ratesxy[is];
+        
+      } /* End is loop */
+    } /* End of jx loop */
+  } /* End of jy loop */
+  
+}
+
+/* 
+ * WebRates: Evaluate reaction rates at a given spatial point.
+ * At a given (x,y), evaluate the array of ns reaction terms R.
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+  
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+   
+  for (is = 0; is < NUM_SPECIES; is++)  
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+  
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(long int size, realtype *x1, realtype *x2)
+{
+  long int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+  return(temp);
+  
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/ida/C_openmp/idaFoodWeb_bnd_omp.out b/examples/ida/C_openmp/idaFoodWeb_bnd_omp.out
new file mode 100644
index 0000000..b7f432d
--- /dev/null
+++ b/examples/ida/C_openmp/idaFoodWeb_bnd_omp.out
@@ -0,0 +1,44 @@
+
+idaFoodWeb_bnd_omp: Predator-prey DAE OpenMP example problem for IDA 
+
+Number of species ns: 2     Mesh dimensions: 20 x 20     System size: 800
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDABAND,  Band parameters mu = 40, ml = 40
+CalcIC called to correct initial predator concentrations.
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  32  4   1.0823e-04
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6188e+02   1.9735e+02   | 127  4   1.4203e-04
+           1.6189e+06   1.9734e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 235  1   3.9160e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 238  1   3.1328e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 239  1   6.2656e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 239  1   6.2656e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+Final run statistics: 
+
+Number of steps                    = 239
+Number of residual evaluations     = 3339
+Number of Jacobian evaluations     = 36
+Number of nonlinear iterations     = 421
+Number of error test failures      = 3
+Number of nonlinear conv. failures = 0
+num_threads = 4
+
diff --git a/examples/ida/C_openmp/idaFoodWeb_kry_omp.c b/examples/ida/C_openmp/idaFoodWeb_kry_omp.c
new file mode 100644
index 0000000..dfc4c27
--- /dev/null
+++ b/examples/ida/C_openmp/idaFoodWeb_kry_omp.c
@@ -0,0 +1,841 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ * -----------------------------------------------------------------
+ * Example program for IDA: Food web problem, OpenMP, GMRES, 
+ * user-supplied preconditioner
+ *
+ * This example program uses the IDASPGMR as the linear 
+ * solver, and IDACalcIC for initial condition calculation.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c    + c  )  +  R (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *  a(i,i) = -AA   (all i)
+ *  a(i,j) = -GG   (i <= np , j >  np)
+ *  a(i,j) =  EE   (i >  np, j <= np)
+ *  all other a(i,j) = 0
+ *  b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i <= np)
+ *  b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i  > np)
+ *  d(i) = DPREY   (i <= np)
+ *  d(i) = DPRED   (i > np)
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative = 0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh.
+ *
+ * The DAE system is solved by IDA using the IDABAND linear solver.
+ * Output is printed at t = 0, .001, .01, .1, .4, .7, 1.
+ *
+ * Optionally, we can set the number of threads from environment 
+ * variable or command line. To check the current value for number
+ * of threads from environment:
+ *      % echo $OMP_NUM_THREADS
+ *
+ * Execution:
+ *
+ * If the user want to use the default value or the number of threads 
+ * from environment value:
+ *      % ./idaFoodWeb_kry_omp 
+ * If the user want to specify the number of threads to use
+ *      % ./idaFoodWeb_kry_omp num_threads
+ * where num_threads is the number of threads the user want to use 
+ *
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems, Journal
+ *     of Applied Mathematics and Computation, Vol. 31 (May 1989),
+ *     pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_spgmr.h>
+#include <nvector/nvector_openmp.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+/* Problem Constants. */
+
+#define NPREY       1              /* No. of prey (= no. of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898)
+#define FOURPI      (RCONST(4.0)*PI)
+
+#define MX          20             /* MX = number of x mesh points      */
+#define MY          20             /* MY = number of y mesh points      */
+#define NSMX        (NUM_SPECIES * MX)
+#define NEQ         (NUM_SPECIES*MX*MY)
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a  */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a  */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a  */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b  */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d  */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d  */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns.  */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns.   */
+#define AX          RCONST(1.0)    /* Total range of x variable         */
+#define AY          RCONST(1.0)    /* Total range of y variable         */
+#define RTOL        RCONST(1.e-5)  /* Relative tolerance                */
+#define ATOL        RCONST(1.e-5)  /* Absolute tolerance                */
+#define NOUT        6              /* Number of output times            */
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values        */
+#define TADD        RCONST(0.3)    /* Increment for tout values         */
+#define ZERO        RCONST(0.)     
+#define ONE         RCONST(1.0)    
+
+/* 
+ * User-defined vector and accessor macro: IJ_Vptr.
+ * IJ_Vptr is defined in order to express the underlying 3-D structure of 
+ * the dependent variable vector from its underlying 1-D storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_OMP(vv, (i)*NUM_SPECIES + (j)*NSMX))
+
+/* Type: UserData.  Contains problem constants, etc. */
+
+typedef struct {
+  long int Neq, ns, np, mx, my;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES];
+  realtype **PP[MX][MY];
+  long int *pivot[MX][MY];
+  N_Vector rates;
+  N_Vector ewt;
+  void *ida_mem;
+  int nthreads;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+
+static int resweb(realtype time, N_Vector cc, N_Vector cp, N_Vector resval, 
+                  void *user_data);
+
+static int Precond(realtype tt,
+		   N_Vector cc, N_Vector cp, N_Vector rr, 
+		   realtype cj, void *user_data,
+		   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int PSolve(realtype tt, 
+		  N_Vector cc, N_Vector cp, N_Vector rr,
+		  N_Vector rvec, N_Vector zvec,
+		  realtype cj, realtype delta, void *user_data,
+		  N_Vector tmp);
+
+/* Prototypes for private Helper Functions. */
+
+static void InitUserData(UserData webdata);
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata);
+static void PrintHeader(long int maxl, realtype rtol, realtype atol);
+static void PrintOutput(void *mem, N_Vector c, realtype t);
+static void PrintFinalStats(void *mem);
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate, UserData webdata);
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+static realtype dotprod(long int size, realtype *x1, realtype *x2);
+static int check_flag(void *flagvalue, char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{ 
+  void *mem;
+  UserData webdata;
+  N_Vector cc, cp, id;
+  int iout, jx, jy, flag;
+  long int maxl;
+  realtype rtol, atol, t0, tout, tret;
+  int num_threads;
+
+  mem = NULL;
+  webdata = NULL;
+  cc = cp = id = NULL;
+
+  /* Set the number of threads to use */
+  num_threads = 1;   /* default value */
+#ifdef _OPENMP
+  num_threads = omp_get_max_threads();    /* overwrite with OMP_NUM_THREADS */
+#endif
+  if (argc > 1)      /* overwrithe with command line value, if supplied */
+    num_threads = strtol(argv[1], NULL, 0);
+
+  /* Allocate and initialize user data block webdata. */
+
+  webdata = (UserData) malloc(sizeof *webdata);
+  webdata->rates = N_VNew_OpenMP(NEQ, num_threads);
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  webdata->ewt = N_VNew_OpenMP(NEQ, num_threads);
+  for (jx = 0; jx < MX; jx++) {
+    for (jy = 0; jy < MY; jy++) {
+      (webdata->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+      (webdata->PP)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+    }
+  }
+  webdata->nthreads = num_threads;
+
+  InitUserData(webdata);
+
+  /* Allocate N-vectors and initialize cc, cp, and id. */
+
+  cc  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)cc, "N_VNew_OpenMP", 0)) return(1);
+
+  cp  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)cp, "N_VNew_OpenMP", 0)) return(1);
+
+  id  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)id, "N_VNew_OpenMP", 0)) return(1);
+  
+  SetInitialProfiles(cc, cp, id, webdata);
+  
+  /* Set remaining inputs to IDAMalloc. */
+  
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+
+  /* Call IDACreate and IDAMalloc to initialize IDA. */
+  
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  flag = IDASetUserData(mem, webdata);
+  if(check_flag(&flag, "IDASetUserData", 1)) return(1);
+
+  flag = IDASetId(mem, id);
+  if(check_flag(&flag, "IDASetId", 1)) return(1);
+
+  flag = IDAInit(mem, resweb, t0, cc, cp);
+  if(check_flag(&flag, "IDAInit", 1)) return(1);
+
+  flag = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&flag, "IDASStolerances", 1)) return(1);
+
+  webdata->ida_mem = mem;
+
+  /* Call IDASpgmr to specify the IDA linear solver. */
+
+  maxl = 16;                    /* max dimension of the Krylov subspace */
+  flag = IDASpgmr(mem, maxl);
+  if(check_flag(&flag, "IDASpgmr", 1)) return(1);
+
+  flag = IDASpilsSetPreconditioner(mem, Precond, PSolve);
+  if(check_flag(&flag, "IDASpilsSetPreconditioner", 1)) return(1);
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+
+  tout = RCONST(0.001);
+  flag = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&flag, "IDACalcIC", 1)) return(1);
+  
+  /* Print heading, basic parameters, and initial values. */
+
+  PrintHeader(maxl, rtol, atol);
+  PrintOutput(mem, cc, ZERO);
+  
+  /* Loop over iout, call IDASolve (normal mode), print selected output. */
+  
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    flag = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if(check_flag(&flag, "IDASolve", 1)) return(flag);
+    
+    PrintOutput(mem, cc, tret);
+    
+    if (iout < 3) tout *= TMULT; else tout += TADD;
+    
+  }
+  
+  /* Print final statistics and free memory. */  
+  
+  PrintFinalStats(mem);
+  printf("num_threads = %i\n\n", num_threads);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_OpenMP(cc);
+  N_VDestroy_OpenMP(cp);
+  N_VDestroy_OpenMP(id);
+
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_OpenMP(webdata->rates);
+  N_VDestroy_OpenMP(webdata->ewt);
+  for (jx = 0; jx < MX; jx++) {
+    for (jy = 0; jy < MY; jy ++) {
+      destroyArray((webdata->pivot)[jx][jy]);
+      destroyMat((webdata->PP)[jx][jy]);
+    }
+  }
+  free(webdata);
+
+  return(0);
+}
+
+/* Define lines for readability in later routines */ 
+
+#define acoef  (webdata->acoef)
+#define bcoef  (webdata->bcoef)
+#define cox    (webdata->cox)
+#define coy    (webdata->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * resweb: System residual function for predator-prey system.
+ * This routine calls Fweb to get all the right-hand sides of the
+ * equations, then loads the residual vector accordingly,
+ * using cp in the case of prey species.                 
+ */
+
+static int resweb(realtype tt, N_Vector cc, N_Vector cp, 
+                  N_Vector res,  void *user_data)
+{
+  long int jx, jy, is, yloc, loc, np;
+  realtype *resv, *cpv;
+  UserData webdata;
+  
+  webdata = (UserData)user_data;
+  
+  cpv = NV_DATA_OMP(cp);
+  resv = NV_DATA_OMP(res);
+  np = webdata->np;
+  
+  /* Call Fweb to set res to vector of right-hand sides. */
+  Fweb(tt, cc, res, webdata);
+  
+  /* Loop over all grid points, setting residual values appropriately
+     for differential or algebraic components.                        */
+#pragma omp parallel for default(shared) private(jy, jx, is, yloc, loc) schedule(static) num_threads(webdata->nthreads)  
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np)
+          resv[loc+is] = cpv[loc+is] - resv[loc+is];
+        else
+          resv[loc+is] = -resv[loc+is];
+      }
+    }
+  }
+  
+  return(0);
+  
+}
+
+
+static int Precond(realtype tt, 
+		   N_Vector cc, N_Vector cp, N_Vector rr, 
+		   realtype cj, void *user_data,
+		   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int flag;
+  realtype uround, xx, yy, del_x, del_y;
+  realtype **Pxy, *ratesxy, *Pxycol, *cxy, *cpxy, *ewtxy, cctmp;
+  realtype inc, fac, sqru, perturb_rates[NUM_SPECIES];
+  int is, js, jx, jy, ret;
+  void *mem;
+  N_Vector ewt;
+  realtype hh;
+  UserData webdata;
+
+  webdata = (UserData) user_data;
+  del_x = webdata->dx;
+  del_y = webdata->dy;
+
+  uround = UNIT_ROUNDOFF;
+  sqru = SUNRsqrt(uround);
+
+  mem = webdata->ida_mem;
+  ewt = webdata->ewt;
+  flag = IDAGetErrWeights(mem, ewt);
+  if(check_flag(&flag, "IDAGetErrWeights", 1)) return(1);
+  flag = IDAGetCurrentStep(mem, &hh);
+  if(check_flag(&flag, "IDAGetCurrentStep", 1)) return(1);
+
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy * del_y;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx * del_x;
+      Pxy = (webdata->PP)[jx][jy];
+      cxy = IJ_Vptr(cc, jx, jy);
+      cpxy = IJ_Vptr(cp, jx, jy);
+      ewtxy = IJ_Vptr(ewt, jx, jy);
+      ratesxy = IJ_Vptr((webdata->rates), jx, jy);
+
+      for (js = 0; js < NUM_SPECIES; js++) {
+	inc = sqru*(SUNMAX(SUNRabs(cxy[js]), SUNMAX(hh*SUNRabs(cpxy[js]), ONE/ewtxy[js])));
+	cctmp = cxy[js];
+	cxy[js] += inc;
+	fac = -ONE/inc;
+
+	WebRates(xx, yy, cxy, perturb_rates, webdata);
+
+	Pxycol = Pxy[js];
+	
+	for (is = 0; is < NUM_SPECIES; is++)
+	  Pxycol[is] = (perturb_rates[is] - ratesxy[is])*fac;
+
+	if (js < 1) Pxycol[js] += cj;
+	
+	cxy[js] = cctmp;
+      }
+
+      ret = denseGETRF(Pxy, NUM_SPECIES, NUM_SPECIES, (webdata->pivot)[jx][jy]);
+
+      if (ret != 0) return(1);
+    }
+  }
+
+  return(0);
+
+}
+
+
+static int PSolve(realtype tt, 
+		  N_Vector cc, N_Vector cp, N_Vector rr, 
+		  N_Vector rvec, N_Vector zvec,
+		  realtype cj, realtype dalta, 
+		  void *user_data, N_Vector tmp) 
+{
+  realtype **Pxy, *zxy;
+  long int *pivot;
+  int jx, jy;
+  UserData webdata;
+  
+  webdata = (UserData) user_data;
+
+  N_VScale(ONE, rvec, zvec);
+
+#pragma omp parallel for collapse(2) default(shared) private(jx, jy, zxy, Pxy, pivot) schedule(static) num_threads(webdata->nthreads)
+  for (jx = 0; jx < MX; jx++) {
+    for (jy = 0; jy <MY; jy++) {
+      
+      zxy = IJ_Vptr(zvec, jx, jy);
+      Pxy = (webdata->PP)[jx][jy];
+      pivot = (webdata->pivot)[jx][jy];
+      denseGETRS(Pxy, NUM_SPECIES, pivot, zxy);
+    }
+  }
+  
+  return(0);
+
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  webdata->mx = MX;
+  webdata->my = MY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->Neq= NEQ;
+  
+  /* Set up the coefficients a and b, and others found in the equations. */
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); dy2 = (webdata->dy)*(webdata->dy);
+  
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+    
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+    
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+  
+}
+
+/* 
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata)
+{
+  long int loc, yloc, is, jx, jy, np;
+  realtype xx, yy, xyfactor;
+  realtype *ccv, *cpv, *idv;
+  
+  ccv = NV_DATA_OMP(cc);
+  cpv = NV_DATA_OMP(cp);
+  idv = NV_DATA_OMP(id);
+  np = webdata->np;
+  
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy * webdata->dy;
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx * webdata->dx;
+      xyfactor = RCONST(16.0)*xx*(ONE-xx)*yy*(ONE-yy);
+      xyfactor *= xyfactor;
+      loc = yloc + NUM_SPECIES*jx;
+       
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np) {
+          ccv[loc+is] = RCONST(10.0) + (realtype)(is+1) * xyfactor;
+          idv[loc+is] = ONE;
+        }
+        else {
+	  ccv[loc+is] = RCONST(1.0e5);
+          idv[loc+is] = ZERO;
+        }
+      }
+    }
+  }
+  
+  /* Set c' for the prey by calling the function Fweb. */
+  Fweb(ZERO, cc, cp, webdata);
+  
+  /* Set c' for predators to 0. */
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = np; is < NUM_SPECIES; is++) {
+        cpv[loc+is] = ZERO;
+      }
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(long int maxl, realtype rtol, realtype atol)
+{
+  printf("\nidaFoodWeb_kry_omp: Predator-prey DAE OpenMP example problem using Krylov solver for IDA \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     System size: %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDASpgmr,  Spgmr parameters maxl = %ld\n",maxl);
+  printf("CalcIC called to correct initial predator concentrations.\n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+  
+}
+
+/* 
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of the concentrations
+ * are printed for the bottom left and top right grid points only.  
+ */
+
+static void PrintOutput(void *mem, N_Vector c, realtype t)
+{
+  int i, kused, flag;
+  long int nst;
+  realtype *c_bl, *c_tr, hused;
+
+  flag = IDAGetLastOrder(mem, &kused);
+  check_flag(&flag, "IDAGetLastOrder", 1);
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetLastStep(mem, &hused);
+  check_flag(&flag, "IDAGetLastStep", 1);
+  
+  c_bl = IJ_Vptr(c,0,0);
+  c_tr = IJ_Vptr(c,MX-1,MY-1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4Le %12.4Le   |\n",c_bl[i],c_tr[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#else
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#endif
+
+  printf("\n");
+}
+
+/* 
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{ 
+  long int nst, nre, sli, netf, nps, npevals, nrevalsLS;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDASpilsGetNumLinIters(mem, &sli);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1);
+  flag = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1);
+  flag = IDASpilsGetNumPrecEvals(mem, &npevals);
+  check_flag(&flag, "IDADlsGetNumJacEvals", 1);
+  flag = IDASpilsGetNumResEvals(mem, &nrevalsLS);
+  check_flag(&flag, "IDADlsGetNumResEvals", 1);
+
+  printf("-----------------------------------------------------------\n");
+  printf("Final run statistics: \n\n");
+  printf("Number of steps                       = %ld\n", nst);
+  printf("Number of residual evaluations        = %ld\n", nre);
+  printf("Number of Preconditioner evaluations  = %ld\n", npevals);
+  printf("Number of linear iterations           = %ld\n", sli);
+  printf("Number of error test failures         = %ld\n", netf);
+  printf("Number of precond solve fun called    = %ld\n", nps);
+
+}
+
+/* 
+ * Fweb: Rate function for the food-web problem.                        
+ * This routine computes the right-hand sides of the system equations,   
+ * consisting of the diffusion term and interaction term.                
+ * The interaction term is computed by the function WebRates.            
+ */
+
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate,  
+                 UserData webdata)
+{ 
+  long int jx, jy, is, idyu, idyl, idxu, idxl;
+  realtype xx, yy, *cxy, *ratesxy, *cratexy, dcyli, dcyui, dcxli, dcxui;
+  
+  /* Loop over grid points, evaluate interaction vector (length ns),
+     form diffusion difference terms, and load crate.                    */
+  
+  for (jy = 0; jy < MY; jy++) {
+    yy = (webdata->dy) * jy ;
+    idyu = (jy!=MY-1) ? NSMX : -NSMX;
+    idyl = (jy!= 0  ) ? NSMX : -NSMX;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = (webdata->dx) * jx;
+      idxu = (jx!= MX-1) ?  NUM_SPECIES : -NUM_SPECIES;
+      idxl = (jx!=  0  ) ?  NUM_SPECIES : -NUM_SPECIES;
+      cxy = IJ_Vptr(cc,jx,jy);
+      ratesxy = IJ_Vptr(webdata->rates,jx,jy);
+      cratexy = IJ_Vptr(crate,jx,jy);
+      
+      /* Get interaction vector at this grid point. */
+      WebRates(xx, yy, cxy, ratesxy, webdata);
+      
+      /* Loop over species, do differencing, load crate segment. */
+#pragma omp parallel for default(shared) private(is, dcyli, dcyui, dcxli, dcxui) schedule(static) num_threads(webdata->nthreads)
+      for (is = 0; is < NUM_SPECIES; is++) {
+        
+        /* Differencing in y. */
+        dcyli = *(cxy+is) - *(cxy - idyl + is) ;
+        dcyui = *(cxy + idyu + is) - *(cxy+is);
+        
+        /* Differencing in x. */
+        dcxli = *(cxy+is) - *(cxy - idxl + is);
+        dcxui = *(cxy + idxu +is) - *(cxy+is);
+        
+        /* Compute the crate values at (xx,yy). */
+        cratexy[is] = coy[is] * (dcyui - dcyli) +
+          cox[is] * (dcxui - dcxli) + ratesxy[is];
+        
+      } /* End is loop */
+    } /* End of jx loop */
+  } /* End of jy loop */
+  
+}
+
+/* 
+ * WebRates: Evaluate reaction rates at a given spatial point.
+ * At a given (x,y), evaluate the array of ns reaction terms R.
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+  
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+  
+  for (is = 0; is < NUM_SPECIES; is++)  
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+  
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(long int size, realtype *x1, realtype *x2)
+{
+  long int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+  return(temp);
+  
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/ida/C_openmp/idaFoodWeb_kry_omp.out b/examples/ida/C_openmp/idaFoodWeb_kry_omp.out
new file mode 100644
index 0000000..3d02611
--- /dev/null
+++ b/examples/ida/C_openmp/idaFoodWeb_kry_omp.out
@@ -0,0 +1,44 @@
+
+idaFoodWeb_kry_omp: Predator-prey DAE OpenMP example problem using Krylov solver for IDA 
+
+Number of species ns: 2     Mesh dimensions: 20 x 20     System size: 800
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDASpgmr,  Spgmr parameters maxl = 16
+CalcIC called to correct initial predator concentrations.
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  33  4   9.7404e-05
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6189e+02   1.9735e+02   |  86  4   1.7533e-04
+           1.6189e+06   1.9735e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 163  1   4.0396e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 166  1   3.2316e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 167  1   6.4633e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 167  1   6.4633e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+Final run statistics: 
+
+Number of steps                       = 167
+Number of residual evaluations        = 208
+Number of Preconditioner evaluations  = 25
+Number of linear iterations           = 1040
+Number of error test failures         = 0
+Number of precond solve fun called    = 1248
+num_threads = 4
+
diff --git a/examples/ida/fcmix_openmp/CMakeLists.txt b/examples/ida/fcmix_openmp/CMakeLists.txt
new file mode 100644
index 0000000..92c4829
--- /dev/null
+++ b/examples/ida/fcmix_openmp/CMakeLists.txt
@@ -0,0 +1,150 @@
+# ---------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the FIDA opemp examples
+
+
+# Only include tests if OpenMP is enabled
+IF(OPENMP_FOUND)
+
+# Add variable ida_examples with the names of the openmp FIDA examples
+SET(FIDA_examples
+  fidaRoberts_dns_openmp
+  )
+
+# Add variable FIDA_examples_BL with the names of the openmp FIDA examples
+# that use Lapack
+
+SET(FIDA_examples_BL
+  )
+ENDIF(OPENMP_FOUND)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_static)
+  SET(NVECS_LIB sundials_nvecopenmp_static)
+  SET(FNVECS_LIB sundials_fnvecopenmp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_shared)
+  SET(NVECS_LIB sundials_nvecopenmp_shared)
+  SET(FNVECS_LIB sundials_fnvecopenmp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FIDA_LIB sundials_fida_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FIDA_LIB} ${IDA_LIB} ${FNVECS_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(PETSC_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_FOUND)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+
+# Add the build and install targets for each FIDA example
+
+FOREACH(example ${FIDA_examples})
+  ADD_EXECUTABLE(${example} ${example}.f)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_openmp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${FIDA_examples})
+
+# If Lapack support is enabled, add the build and install targets for
+# the examples using Lapack
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${FIDA_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.f)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_openmp)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${FIDA_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_openmp)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDA")
+  SET(SOLVER_LIB "sundials_ida")
+  SET(SOLVER_FLIB "sundials_fida")
+  LIST2STRING(FIDA_examples EXAMPLES)
+  IF(LAPACK_FOUND)
+    LIST2STRING(FIDA_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_openmp_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/fcmix_openmp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/ida/fcmix_openmp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_openmp 
+    )
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_openmp_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/fcmix_openmp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/ida/fcmix_openmp/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_openmp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/ida/fcmix_openmp/README b/examples/ida/fcmix_openmp/README
new file mode 100644
index 0000000..dbbf3af
--- /dev/null
+++ b/examples/ida/fcmix_openmp/README
@@ -0,0 +1,49 @@
+List of OpenMP IDA FCMIX examples
+
+  fidaRoberts_dns_openmp : 3-species Robertson kinetics system with OpenMP
+  
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/ida/fcmix_openmp/fidaRoberts_dns_openmp.f b/examples/ida/fcmix_openmp/fidaRoberts_dns_openmp.f
new file mode 100644
index 0000000..834309f
--- /dev/null
+++ b/examples/ida/fcmix_openmp/fidaRoberts_dns_openmp.f
@@ -0,0 +1,271 @@
+c     ----------------------------------------------------------------
+c     $Revision: 4392 $
+c     $Date: 2015-02-25 17:22:27 -0800 (Wed, 25 Feb 2015) $
+c     ----------------------------------------------------------------
+c     This simple example problem for FIDA, due to Robertson, is from 
+c     chemical kinetics, and consists of the following three equations:
+c
+c          dy1/dt = -.04*y1 + 1.e4*y2*y3
+c          dy2/dt =  .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+c             0   = y1 + y2 + y3 - 1
+c
+c     on the interval from t = 0.0 to t = 4.e10, with initial
+c     conditions: y1 = 1, y2 = y3 = 0.
+c
+c     While integrating the system, we also employ the rootfinding feature
+c     to find the points at which y1 = 1.e-4 or at which y3 = 0.01.
+c
+c     The problem is solved using a dense linear solver, with a
+c     user-supplied Jacobian. Output is printed at
+c     t = .4, 4, 40, ..., 4e10.
+c     ----------------------------------------------------------------
+c
+      program fidaRoberts_dns
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*8 neq
+      integer*8 iout(25), ipar
+      integer ier, ierroot, info(2)
+      double precision rout(10), rpar
+      integer iatol, nout, jout, itask
+      integer nst, kused, hused, i
+      double precision t0, t1, rtol, tout, tret
+      double precision y(3), yp(3), atol(3)
+c
+      data nst/3/, kused/9/, hused/2/
+
+      integer nthreads
+      nthreads = 4
+c
+c Initialize variables
+c
+      neq = 3
+      nout = 12
+      rtol = 1.0d-4
+      t0 = 0.0d0
+      t1 = 0.4d0
+      iatol = 2
+      itask = 1
+c
+      y(1) = 1.0d0
+      y(2) = 0.0d0
+      y(3) = 0.0d0
+c
+      yp(1) = -0.04d0
+      yp(2) = 0.04d0
+      yp(3) = 0.0d0
+c
+      atol(1) = 1.0d-6
+      atol(2) = 1.0d-10
+      atol(3) = 1.0d-6
+c
+c Initialize IDA vector environment
+c
+      call fnvinitomp(2, neq, nthreads, ier)
+      if (ier .ne. 0) then
+         write(6,10) ier
+ 10      format(///' SUNDIALS_ERROR: FNVINITS returned IER = ', i5)
+         stop
+      endif
+c
+      call fidamalloc(t0, y, yp, iatol, rtol, atol, 
+     &                iout, rout, ipar, rpar, ier)
+      if (ier .ne. 0) then
+         write(6,20) ier
+ 20      format(///' SUNDIALS_ERROR: FIDAMALLOC returned IER = ', i5)
+         stop
+      endif
+c
+c Initialize rootfinding problem
+
+      call fidarootinit(2, ier)
+      if (ier .ne. 0) then
+         write(6,25) ier
+ 25      format(///' SUNDIALS_ERROR: FIDAROOTINIT returned IER = ', i5)
+         call fidafree
+         stop
+      endif
+c
+c Attach dense linear solver
+c
+      call fidadense(neq, ier)
+      call fidadensesetjac(1, ier)
+c
+c Print header
+c
+      call prntintro(rtol, atol, y)
+c
+      tout = t1
+c
+c
+      jout = 1
+      do while(jout .le. nout)
+c
+        call fidasolve(tout, tret, y, yp, itask, ier)
+c
+        write(6,40) tret, (y(i), i = 1,3), iout(nst), iout(kused),
+     &              rout(hused)
+ 40     format(e10.4, 3(1x,e12.4), i5, i3, e12.4)
+c
+        if (ier .lt. 0) then
+           write(6,50) ier, iout(15)
+ 50        format(///' SUNDIALS_ERROR: FIDASOLVE returned IER = ',i5,/,
+     1            '                 Linear Solver returned IER = ',i5)
+           call fidarootfree
+           call fidafree
+           stop
+        endif
+c
+        if (ier .eq. 2) then
+          call fidarootinfo(2, info, ierroot)
+          if (ierroot .lt. 0) then
+            write(6,55) ier
+ 55         format(///' SUNDIALS_ERROR: FIDAROOTINFO returned IER = ',
+     1             i5)
+            call fidarootfree
+            call fidafree
+            stop
+          endif
+          write(6,60) (info(i), i = 1,2)
+ 60       format(5x, 'Above is a root, INFO() = ', 2i3)
+        endif                   
+c
+        if (ier .eq. 0) then
+           tout = tout * 10.0d0
+           jout = jout + 1
+        endif
+c
+      ENDDO
+c
+c Print final statistics
+c
+      call prntstats(iout)
+c
+c Free IDA memory
+c
+      call fidarootfree
+      call fidafree
+c
+      stop
+      end
+c
+c ==========
+c
+      subroutine fidaresfun(tres, y, yp, res, ipar, rpar, reserr)
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*4 ipar(*)
+      integer reserr
+      double precision tres, rpar(*)
+      double precision y(*), yp(*), res(*)
+c
+      res(1) = -0.04d0*y(1)+1.0d4*y(2)*y(3)
+      res(2) = -res(1)-3.0d7*y(2)*y(2)-yp(2)
+      res(1) = res(1)-yp(1)
+      res(3) = y(1)+y(2)+y(3)-1.0d0
+c
+      reserr = 0
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine fidadjac(neq, t, y, yp, r, jac, cj, ewt, h,
+     1                    ipar, rpar, wk1, wk2, wk3, djacerr)
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*4 neq, ipar(*)
+      integer djacerr
+      double precision t, h, cj, rpar(*)
+      double precision y(*), yp(*), r(*), ewt(*), jac(neq,neq)
+      double precision wk1(*), wk2(*), wk3(*)
+c
+      jac(1,1) = -0.04d0-cj
+      jac(2,1) = 0.04d0
+      jac(3,1) = 1.0d0
+      jac(1,2) = 1.0d4*y(3)
+      jac(2,2) = -1.0d4*y(3)-6.0d7*y(2)-cj
+      jac(3,2) = 1.0d0
+      jac(1,3) = 1.0d4*y(2)
+      jac(2,3) = -1.0d4*y(2)
+      jac(3,3) = 1.0d0
+c
+      djacerr = 0
+
+      return
+      end
+c
+c ==========
+c
+      subroutine fidarootfn(t, y, yp, g, ipar, rpar, ier)
+c Fortran routine for rootfinding
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*4 ipar(*)
+      integer ier
+      double precision t, y(*), yp(*), g(*), rpar(*)
+c
+      g(1) = y(1) - 1.0d-4
+      g(2) = y(3) - 1.0d-2
+
+      ier = 0
+
+      return
+      end
+c
+c ==========
+c
+      subroutine prntintro(rtol, atol, y)
+c
+      implicit none
+c
+      integer i
+      double precision rtol, atol(*), y(*)
+c
+      write(6,60) rtol, (atol(i), i = 1,3), (y(i), i = 1,3)
+ 60   format(/'fidaRoberts_dns: Robertson kinetics DAE serial example',
+     &       'problem for IDA', /,'          Three equation chemical',
+     &       'kinetics problem.', //,
+     &       'Tolerance parameters:  rtol = ', e8.2,
+     &       '   atol = ', 3(1x,e8.2), /,
+     &       'Initial conditions y0 = (', 3(1x,e8.2), ')', //,
+     &       '  t            y1           y2           y3        nst',
+     &       '  k    h')
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine prntstats(iout)
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*8 iout(25)
+      integer nst, reseval, jaceval, nni, ncf, netf, nge
+c
+      data nst/3/, reseval/4/, jaceval/17/, nni/7/, netf/5/,
+     &     ncf/6/, nge/12/
+c
+      write(6,70) iout(nst), iout(reseval), iout(jaceval),
+     &             iout(nni), iout(netf), iout(ncf), iout(nge)
+ 70   format(/'Final Run Statistics:', //,
+     &         'Number of steps                    = ', i3, /,
+     &         'Number of residual evaluations     = ', i3, /,
+     &         'Number of Jacobian evaluations     = ', i3, /,
+     &         'Number of nonlinear iterations     = ', i3, /,
+     &         'Number of error test failures      = ', i3, /,
+     &         'Number of nonlinear conv. failures = ', i3, /,
+     &         'Number of root function evals.     = ', i3)
+c
+      return
+      end
diff --git a/examples/ida/fcmix_openmp/fidaRoberts_dns_openmp.out b/examples/ida/fcmix_openmp/fidaRoberts_dns_openmp.out
new file mode 100644
index 0000000..7809e8a
--- /dev/null
+++ b/examples/ida/fcmix_openmp/fidaRoberts_dns_openmp.out
@@ -0,0 +1,34 @@
+
+fidaRoberts_dns: Robertson kinetics DAE serial exampleproblem for IDA
+          Three equation chemicalkinetics problem.
+
+Tolerance parameters:  rtol = 0.10E-03   atol =  0.10E-05 0.10E-09 0.10E-05
+Initial conditions y0 = ( 0.10E+01 0.00E+00 0.00E+00)
+
+  t            y1           y2           y3        nst  k    h
+0.2640E+00   0.9900E+00   0.3471E-04   0.1000E-01   75  2  0.5716E-01
+     Above is a root, INFO() =   0  1
+0.4000E+00   0.9852E+00   0.3386E-04   0.1480E-01   77  3  0.1143E+00
+0.4000E+01   0.9055E+00   0.2240E-04   0.9447E-01   91  4  0.3704E+00
+0.4000E+02   0.7158E+00   0.9185E-05   0.2842E+00  127  4  0.2963E+01
+0.4000E+03   0.4505E+00   0.3223E-05   0.5495E+00  177  3  0.1241E+02
+0.4000E+04   0.1832E+00   0.8940E-06   0.8168E+00  228  3  0.2765E+03
+0.4000E+05   0.3899E-01   0.1622E-06   0.9610E+00  278  5  0.2614E+04
+0.4000E+06   0.4939E-02   0.1985E-07   0.9951E+00  324  5  0.2770E+05
+0.4000E+07   0.5176E-03   0.2072E-08   0.9995E+00  355  4  0.3979E+06
+0.2075E+08   0.1000E-03   0.4000E-09   0.9999E+00  374  4  0.1592E+07
+     Above is a root, INFO() =  -1  0
+0.4000E+08   0.5191E-04   0.2076E-09   0.9999E+00  380  3  0.6366E+07
+0.4000E+09   0.5882E-05   0.2353E-10   0.1000E+01  394  1  0.9167E+08
+0.4000E+10   0.7054E-06   0.2822E-11   0.1000E+01  402  1  0.1467E+10
+0.4000E+11  -0.7300E-06  -0.2920E-11   0.1000E+01  407  1  0.2347E+11
+
+Final Run Statistics:
+
+Number of steps                    = 407
+Number of residual evaluations     = 557
+Number of Jacobian evaluations     =  65
+Number of nonlinear iterations     = 557
+Number of error test failures      =   6
+Number of nonlinear conv. failures =   0
+Number of root function evals.     = 445
diff --git a/examples/ida/fcmix_parallel/CMakeLists.txt b/examples/ida/fcmix_parallel/CMakeLists.txt
new file mode 100644
index 0000000..e3104a8
--- /dev/null
+++ b/examples/ida/fcmix_parallel/CMakeLists.txt
@@ -0,0 +1,143 @@
+# ---------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the FIDA parallel examples
+
+
+# Add variable ida_examples with the names of the parallel IDA examples
+
+SET(FIDA_examples
+  "fidaHeat2D_kry_bbd_p\;1\;4"
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the Fortran compiler to the MPIF77 script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPIF77 )
+  # use MPI_MPIF77 as the compiler
+  SET(CMAKE_Fortran_COMPILER ${MPI_MPIF77})
+ELSE(MPI_MPIF77)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPIF77)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+  SET(FNVECP_LIB sundials_fnvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+  SET(FNVECP_LIB sundials_fnvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FIDA_LIB sundials_fida_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FIDA_LIB} ${IDA_LIB} ${FNVECP_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(PETSC_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_FOUND)
+
+# Add the build and install targets for each IDA example
+
+FOREACH(example_tuple ${FIDA_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.f)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPIF77)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPIF77)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${FIDA_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_parallel)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDA")
+  SET(SOLVER_LIB "sundials_ida")
+  SET(SOLVER_FLIB "sundials_fida")
+  FOREACH(example_tuple ${FIDA_examples})
+    list(GET example_tuple 0 example)
+    LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${FIDA_examples})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/fcmix_parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/ida/fcmix_parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/fcmix_parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/ida/fcmix_parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_parallel 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/ida/fcmix_parallel/README b/examples/ida/fcmix_parallel/README
new file mode 100644
index 0000000..1c065c8
--- /dev/null
+++ b/examples/ida/fcmix_parallel/README
@@ -0,0 +1,49 @@
+List of parallel IDA FCMIX examples
+
+  fidaHeat2D_kry_bbd_p : 2D heat equation (SPGMR w/FIDABBD preconditioner)
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/ida/fcmix_parallel/fidaHeat2D_kry_bbd_p.f b/examples/ida/fcmix_parallel/fidaHeat2D_kry_bbd_p.f
new file mode 100644
index 0000000..00083ea
--- /dev/null
+++ b/examples/ida/fcmix_parallel/fidaHeat2D_kry_bbd_p.f
@@ -0,0 +1,827 @@
+c     ----------------------------------------------------------------
+c     $Revision: 4830 $
+c     $Date: 2016-07-27 17:50:35 -0700 (Wed, 27 Jul 2016) $
+c     ----------------------------------------------------------------
+c     Example problem for FIDA: 2D heat equation, parallel, GMRES,
+c     IDABBDPRE.
+c
+c     This example solves a discretized 2D heat equation problem.
+c     This version uses the Krylov solver IDASPGMR and BBD
+c     preconditioning.
+c
+c     The DAE system solved is a spatial discretization of the PDE
+c              du/dt = d^2u/dx^2 + d^2u/dy^2
+c     on the unit square. The boundary condition is u = 0 on all edges.
+c     Initial conditions are given by u = 16 x (1 - x) y (1 - y). The
+c     PDE is treated with central differences on a uniform MX x MY
+c     grid. The values of u at the interior points satisfy ODEs, and
+c     equations u = 0 at the boundaries are appended, to form a DAE
+c     system of size N = MX * MY. Here MX = MY = 10.
+c
+c     The system is actually implemented on submeshes, processor by
+c     processor, with an MXSUB by MYSUB mesh on each of NPEX * NPEY
+c     processors.
+c
+c     The system is solved with FIDA using the Krylov linear solver
+c     IDASPGMR in conjunction with the preconditioner module IDABBDPRE.
+c     The preconditioner uses a tridiagonal approximation
+c     (half-bandwidths = 1). The constraints u >= 0 are posed for all
+c     components. Local error testing on the boundary values is
+c     suppressed. Output is taken at t = 0, .01, .02, .04, ..., 10.24.
+c     ----------------------------------------------------------------
+c
+      program fidaHeat2D_kry_bbd_p
+c
+      include "mpif.h"
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c local variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 mudq, mldq, mukeep, mlkeep, iout(25), ipar(1)
+      double precision rout(10), rpar(1)
+      integer nout, ier
+      parameter (nout = 11)
+      integer npes, inopt, maxl, gstype, maxrs, itask, iatol
+      integer nlocalg
+      parameter (nlocalg = mxsubg*mysubg)
+      double precision t0, t1, tout, tret, dqrely, eplifac, dqincfac
+      double precision atol, rtol
+      double precision constr(nlocalg), uu(nlocalg), up(nlocalg)
+      double precision res(nlocalg), id(nlocalg)
+c
+      data atol/1.0d-3/, rtol/0.0d0/
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+c Initialize variables
+c
+      npex = 2
+      npey = 2
+      mxsub = 5
+      mysub = 5
+      mx = npex*mxsub
+      my = npey*mysub
+      neq = mx*my
+      nlocal = mxsub*mysub
+      inopt = 1
+      t0 = 0.0d0
+      t1 = 0.01d0
+      mudq = mxsub
+      mldq = mxsub
+      mukeep = 1
+      mlkeep = 1
+      dqrely = 0.0d0
+      maxl = 0
+      gstype = 0
+      maxrs = 0
+      eplifac = 0.0d0
+      dqincfac = 0.0d0
+      itask = 1
+      iatol = 1
+c
+c Initialize MPI environment
+c
+      call mpi_init(ier)
+      if (ier .ne. 0) then
+         write(*,2) ier
+ 2       format(///' MPI_ERROR: MPI_INIT returned IER = ', i5)
+         stop
+      endif
+c
+      call mpi_comm_size(mpi_comm_world, npes, ier)
+      if (ier .ne. 0) then
+         write(*,3) ier
+ 3       format(///' MPI_ERROR: MPI_COMM_SIZE returned IER = ', i5)
+         call mpi_abort(mpi_comm_world, 1, ier)
+         stop
+      endif
+c
+      call mpi_comm_rank(mpi_comm_world, thispe, ier)
+      if (ier .ne. 0) then
+         write(*,4) ier
+ 4       format(///' MPI_ERROR: MPI_COMM_RANK returned IER = ', i5)
+         call mpi_abort(mpi_comm_world, 1, ier)
+         stop
+      endif
+c
+      if (npes .ne. npex*npey) then
+         if (thispe .eq. 0) then
+            write(*,5) npes, npex*npey
+ 5          format(///' MPI_ERROR: npes = ', i5, ' is not equal to ',
+     &                'NPEX*NPEY = ', i5)
+            call mpi_finalize(ier)
+            stop
+         endif
+      endif
+c
+      call fnvinitp(mpi_comm_world, 2, nlocal, neq, ier)
+      if (ier .ne. 0) then
+         write(*,6) ier
+ 6       format(///' SUNDIALS_ERROR: FNVINITP returned IER = ', i5)
+         call mpi_finalize(ier)
+         stop
+      endif
+c
+      jysub = int(thispe/npex)
+      ixsub = thispe-jysub*npex
+c
+c Initialize problem data
+c
+      call setinitprofile(uu, up, id, res, constr, ipar, rpar)
+c
+c Initialize IDA environment
+c
+      call fidamalloc(t0, uu, up, iatol, rtol, atol, 
+     &     iout, rout, ipar, rpar, ier)
+      if (ier .ne. 0) then
+         write(*,7) ier
+ 7       format(///' SUNDIALS_ERROR: FIDAMALLOC returned IER = ', i5)
+         call mpi_abort(mpi_comm_world, 1, ier)
+         stop
+      endif
+c
+c     Set optional inputs
+c
+      call fidasetiin('SUPPRESS_ALG', 1, ier)
+      call fidasetvin('ID_VEC', id, ier)
+      call fidasetvin('CONSTR_VEC', constr, ier)
+
+c
+c Initialize and attach BBDSPGMR module
+c
+      call fidaspgmr(maxl, gstype, maxrs, eplifac, dqincfac, ier)
+      if (ier .ne. 0) then
+         write(*,9) ier
+ 9       format(///' SUNDIALS_ERROR: FIDABBDSPGMR returned IER = ', i5)
+         call mpi_abort(mpi_comm_world, 1, ier)
+         stop
+      endif
+c
+      call fidabbdinit(nlocal, mudq, mldq, mukeep, mlkeep, dqrely, ier)
+      if (ier .ne. 0) then
+         write(*,8) ier
+ 8       format(///' SUNDIALS_ERROR: FIDABBDINIT returned IER = ', i5)
+         call mpi_abort(mpi_comm_world, 1, ier)
+         stop
+      endif
+c
+c Print header
+c
+      if (thispe .eq. 0) then
+         call prntintro(rtol, atol)
+         call prntcase(1, mudq, mukeep)
+      endif
+c
+      tout = t1
+      do 10 jout = 1, nout
+c
+         call fidasolve(tout, tret, uu, up, itask, ier)
+c
+         call prntoutput(tret, uu, iout, rout)
+c
+         if (ier .ne. 0) then
+            write(*,11) ier
+ 11         format(///' SUNDIALS_ERROR: FIDASOLVE returned IER = ', i5)
+            call fidafree
+            stop
+         endif
+c
+         tout = tout*2.0d0
+c
+ 10   continue
+c
+c Print statistics
+c
+      if (thispe .eq. 0) then
+         call prntfinalstats(iout)
+      endif
+c
+c Reinitialize variables and data for second problem
+c
+      mudq = 1
+      mldq = 1
+c
+      call setinitprofile(uu, up, id, res, constr, ipar, rpar)
+c
+      call fidareinit(t0, uu, up, iatol, rtol, atol, ier)
+      if (ier .ne. 0) then
+         write(*,33) ier
+ 33      format(///' SUNDIALS_ERROR: FIDAREINIT returned IER = ', i5)
+      endif
+c
+      call fidabbdreinit(nlocal, mudq, mldq, dqrely, ier)
+      if (ier .ne. 0) then
+         write(*,34) ier
+ 34      format(///' SUNDIALS_ERROR: FIDABBDREINIT returned IER = ', i5)
+         call fidafree
+         stop
+      endif
+c
+c Print header
+c
+      if (thispe .eq. 0) then
+         call prntcase(2, mudq, mukeep)
+      endif
+c
+      tout = t1
+      do 12 jout = 1, nout
+c
+         call fidasolve(tout, tret, uu, up, itask, ier)
+c
+         call prntoutput(tret, uu, iout, rout)
+c
+         if (ier .ne. 0) then
+            write(*,13) ier
+ 13         format(///' SUNDIALS_ERROR: FIDASOLVE returned IER = ', i5)
+            call fidafree
+            stop
+         endif
+c
+         tout = tout*2.0d0
+c
+ 12   continue
+c
+c Print statistics
+c
+      if (thispe .eq. 0) then
+         call prntfinalstats(iout)
+      endif
+c
+c Free memory
+c
+      call fidafree
+c
+      call mpi_finalize(ier)
+c
+      stop
+      end
+c
+c ==========
+c
+      subroutine setinitprofile(uu, up, id, res, constr, ipar, rpar)
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy, rpar(*)
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c local variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 ipar(*)
+      integer i, iloc, j, jloc, offset, loc
+      integer ixbegin, ixend, jybegin, jyend
+      integer reserr
+      double precision xfact, yfact
+      double precision uu(*), up(*), id(*), res(*), constr(*)
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+c Initialize variables
+c
+      dx = 1.0d0/dble(mx-1)
+      dy = 1.0d0/dble(my-1)
+      coeffx = 1.0d0/(dx*dx)
+      coeffy = 1.0d0/(dy*dy)
+      coeffxy = 2.0d0/(dx*dx)+2.0d0/(dy*dy)
+      ixbegin = mxsub*ixsub
+      ixend = mxsub*(ixsub+1)-1
+      jybegin = mysub*jysub
+      jyend = mysub*(jysub+1)-1
+c
+      do 14 i = 1, nlocal
+         id(i) = 1.0d0
+ 14   continue
+c
+      jloc = 0
+      do 15 j = jybegin, jyend
+         yfact = dy*dble(j)
+         offset = jloc*mxsub
+         iloc = 0
+         do 16 i = ixbegin, ixend
+            xfact = dx*dble(i)
+            loc = offset+iloc
+            uu(loc+1) = 16.0d0*xfact*(1.0d0-xfact)*yfact*(1.0d0-yfact)
+            if (i .eq. 0 .or. i .eq. mx-1) then
+               id(loc+1) = 0.0d0
+            endif
+            if (j .eq. 0 .or. j .eq. my-1) then
+               id(loc+1) = 0.0d0
+            endif
+            iloc = iloc+1
+ 16      continue
+         jloc = jloc+1
+ 15   continue
+c
+      do 17 i = 1, nlocal
+         up(i) = 0.0d0
+         constr(i) = 1.0d0
+ 17   continue
+c
+      call fidaresfun(0.0d0, uu, up, res, ipar, rpar, reserr)
+c
+      do 18 i = 1, nlocal
+         up(i) = -1.0d0*res(i)
+ 18   continue
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine fidaresfun(tres, u, up, res, ipar, rpar, reserr)
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy, rpar(*)
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c local variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 ipar(*)
+      integer reserr
+      double precision tres
+      double precision u(*), up(*), res(*)
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+      call fidacommfn(nlocal, tres, u, up, ipar, rpar, reserr)
+c
+      call fidaglocfn(nlocal, tres, u, up, res, ipar, rpar, reserr)
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine fidacommfn(nloc, tres, u, up, ipar, rpar, reserr)
+c
+      include "mpif.h"
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy, rpar(*)
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c local variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nloc, ipar(*)
+      integer reserr
+      double precision tres, u(*), up(*)
+c
+      integer request(mpi_status_size)
+      double precision buffer(2*mysub)
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+      call brecvpost(request, mxsub, mysub, buffer)
+c
+      call bsend(mxsub, mysub, u)
+c
+      call brecvwait(request, mxsub, buffer)
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine fidaglocfn(nloc, tres, u, up, res, ipar, rpar, reserr)
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy, rpar(*)
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c local variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nloc, ipar(*)
+      integer reserr
+      double precision tres, u(*), up(*), res(*)
+c
+      integer i, lx, ly, offsetu, offsetue, locu, locue
+      integer ixbegin, ixend, jybegin, jyend, mxsub2
+      double precision termx, termy, termctr
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+      mxsub2 = mxsub+2
+c
+      do 19 i = 1, nlocal
+         res(i) = u(i)
+ 19   continue
+c
+      offsetu = 0
+      offsetue = mxsub2+1
+      do 20 ly = 0, mysub-1
+         do 21 lx = 0, mxsub-1
+            uext(offsetue+lx+1) = u(offsetu+lx+1)
+ 21      continue
+         offsetu = offsetu+mxsub
+         offsetue = offsetue+mxsub2
+ 20   continue
+c
+      ixbegin = 0
+      ixend = mxsub-1
+      jybegin = 0
+      jyend = mysub-1
+      if (ixsub .eq. 0) then
+         ixbegin = ixbegin+1
+      endif
+      if (ixsub .eq. npex-1) then
+         ixend = ixend-1
+      endif
+      if (jysub .eq. 0) then
+         jybegin = jybegin+1
+      endif
+      if (jysub .eq. npey-1) then
+         jyend = jyend-1
+      endif
+c
+      do 22 ly = jybegin, jyend
+         do 23 lx = ixbegin, ixend
+            locu = lx+ly*mxsub
+            locue = (lx+1)+(ly+1)*mxsub2
+            termx = coeffx*(uext(locue)+uext(locue+2))
+            termy = coeffy*(uext(locue-mxsub2+1)+uext(locue+mxsub2+1))
+            termctr = coeffxy*uext(locue+1)
+            res(locu+1) = up(locu+1)-(termx+termy-termctr)
+ 23      continue
+ 22   continue
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine bsend(dsizex, dsizey, uarray)
+c
+      include "mpif.h"
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c local variables
+c
+      integer dsizex, dsizey
+      double precision uarray(*)
+c
+      integer ier, offsetu
+      double precision bufleft(mysub), bufright(mysub)
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+      if (jysub .ne. 0) then
+         call mpi_send(uarray(1), dsizex, mpi_double_precision,
+     &                 thispe-npex, 0, mpi_comm_world, ier)
+      endif
+c
+      if (jysub .ne. npey-1) then
+         offsetu = (mysub-1)*dsizex
+         call mpi_send(uarray(offsetu+1), dsizex, mpi_double_precision,
+     &                 thispe+npex, 0, mpi_comm_world, ier)
+      endif
+c
+      if (ixsub .ne. 0) then
+         do 24 ly = 0, mysub-1
+            offsetu = ly*dsizex
+            bufleft(ly+1) = uarray(offsetu+1)
+ 24      continue
+         call mpi_send(bufleft(1), dsizey, mpi_double_precision,
+     &                 thispe-1, 0, mpi_comm_world, ier)
+      endif
+c
+      if (ixsub .ne. npex-1) then
+         do 25 ly = 0, mysub-1
+            offsetu = ly*mxsub+(mxsub-1)
+            bufright(ly+1) = uarray(offsetu+1)
+ 25      continue
+         call mpi_send(bufright(1), dsizey, mpi_double_precision,
+     &                 thispe+1, 0, mpi_comm_world, ier)
+      endif
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine brecvpost(request, dsizex, dsizey, buffer)
+c
+      include "mpif.h"
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c local variables
+c
+      integer dsizex, dsizey
+      integer request(*)
+      double precision buffer(*)
+      integer ier
+      integer offsetue
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+      if (jysub .ne. 0) then
+         call mpi_irecv(uext(2), dsizex, mpi_double_precision,
+     &                  thispe-npex, 0, mpi_comm_world, request(1),
+     &                  ier)
+      endif
+c
+      if (jysub .ne. npey-1) then
+         offsetue = (1+(mysub+1)*(mxsub+2))
+         call mpi_irecv(uext(offsetue+1), dsizex, mpi_double_precision,
+     &                  thispe+npex, 0, mpi_comm_world, request(2),
+     &                  ier)
+      endif
+c
+      if (ixsub .ne. 0) then
+         call mpi_irecv(buffer(1), dsizey, mpi_double_precision,
+     &                  thispe-1, 0, mpi_comm_world, request(3),
+     &                  ier)
+      endif
+c
+      if (ixsub .ne. npex-1) then
+         call mpi_irecv(buffer(1+mysub), dsizey, mpi_double_precision,
+     &                  thispe+1, 0, mpi_comm_world, request(4),
+     &                  ier)
+      endif
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine brecvwait(request, dsizex, buffer)
+c
+      include "mpif.h"
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c local variables
+c
+      integer request(*)
+      integer dsizex
+      double precision buffer(*)
+      integer ly, dsizex2, offsetue
+      integer ier, status(mpi_status_size)
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+      dsizex2 = dsizex+2
+c
+      if (jysub .ne. 0) then
+         call mpi_wait(request(1), status, ier)
+      endif
+c
+      if (jysub .ne. npey-1) then
+         call mpi_wait(request(2), status, ier)
+      endif
+c
+      if (ixsub .ne. 0) then
+         call mpi_wait(request(3), status, ier)
+         do 26 ly = 0, mysub-1
+            offsetue = (ly+1)*dsizex2
+            uext(offsetue+1) = buffer(ly+1)
+ 26      continue
+      endif
+c
+      if (ixsub .ne. npex-1) then
+         call mpi_wait(request(4), status, ier)
+         do 27 ly = 0, mysub-1
+            offsetue = (ly+2)*dsizex2-1
+            uext(offsetue+1) = buffer(ly+mysub+1)
+ 27      continue
+      endif
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine prntoutput(tret, u, iout, rout)
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c  local variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 iout(*), lenrwbbd, leniwbbd, ngebbd
+      double precision tret, umax, u(*), rout(*)
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+      call maxnorm(u, umax)
+c
+      if (thispe .eq. 0) then
+         call fidabbdopt(lenrwbbd, leniwbbd, ngebbd)
+         write(*,28) tret, umax, iout(9), iout(3), iout(7),
+     &               iout(20), iout(4), iout(16), ngebbd, rout(2),
+     &               iout(18), iout(19)
+ 28      format(' ', e10.4, ' ', e13.5, '  ', i1, '  ', i2,
+     &          '  ', i3, '  ', i3, '  ', i2,'+',i2, '  ',
+     &          i3, '  ', e9.2, '  ', i2, '  ', i3)
+      endif
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine maxnorm(u, unorm)
+c
+      include "mpif.h"
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c local variables
+c
+      integer i, ier
+      double precision temp, unorm, u(*)
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+      temp = 0.0d0
+c
+      do 29 i = 1, nlocal
+         temp = max(abs(u(i)), temp)
+ 29   continue
+c
+      call mpi_allreduce(temp, unorm, 1, mpi_double_precision,
+     &                   mpi_max, mpi_comm_world, ier)
+c
+c      unorm = temp
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine prntintro(rtol, atol)
+c
+c global variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 nlocal, neq
+      integer npex, npey, mxsub, mysub, mx, my, ixsub, jysub
+      integer thispe, mxsubg, mysubg
+      parameter (mxsubg = 5, mysubg = 5)
+      double precision dx, dy, coeffx, coeffy, coeffxy
+      double precision uext((mxsubg+2)*(mysubg+2))
+c
+c local variables
+c
+      double precision rtol, atol
+c
+      common /pcom/ dx, dy, coeffx, coeffy, coeffxy, uext,
+     &              nlocal, neq, mx, my, mxsub, mysub, npex, npey,
+     &              ixsub, jysub, thispe
+c
+      write(*,30) mx, my, neq, mxsub, mysub, npex, npey, rtol, atol
+ 30   format(/'fidaHeat2D_kry_bbd_p: Heat equation, parallel example',
+     &     ' for FIDA', /, 16x,'Discretized heat equation',
+     &     ' on 2D unit square.', /, 16x,'Zero boundary',
+     &     ' conditions, polynomial conditions.', /,
+     &     16x,'Mesh dimensions: ', i2, ' x ', i2,
+     &     '         Total system size: ', i3, //,
+     &     'Subgrid dimensions: ', i2, ' x ', i2,
+     &     '           Processor array: ', i2, ' x ', i2, /,
+     &     'Tolerance parameters: rtol = ', e8.2, '   atol = ',
+     &     e8.2, /, 'Constraints set to force all solution',
+     &     ' components >= 0.', /, 'SUPPRESSALG = TRUE to remove',
+     &     ' boundary components from the error test.', /,
+     &     'Linear solver: SPGMR.    Preconditioner: BBDPRE - ',
+     &     'Banded-block-diagonal.')
+c     
+      return
+      end
+c
+c ==========
+c
+      subroutine prntcase(num, mudq, mukeep)
+c
+c local variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 mudq, mukeep
+      integer num
+c
+      write(*,31) num, mudq, mukeep
+ 31   format(//, 'Case ', i2, /, '  Difference quotient half-',
+     &     'bandwidths =', i2, /, '  Retained matrix half-bandwidths =',
+     &     i2, //, 'Output Summary',/,'  umax = max-norm of solution',
+     &     /,'  nre = nre + nreLS (total number of RES evals.)',
+     &     //, '   time         umax       k nst  nni  nli   nre',
+     &     '   nge      h     npe  nps', /,
+     &     '-------------------------------------------------------',
+     &     '-------------------')
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine prntfinalstats(iout)
+c
+c local variables
+c
+c The following declaration specification should match C type long int.
+      integer*8 iout(*)
+c
+      write(*,32) iout(5), iout(6), iout(21)
+ 32   format(/, 'Error test failures            =', i3, /,
+     &     'Nonlinear convergence failures =', i3, /,
+     &     'Linear convergence failures    =', i3)
+c
+      return
+      end
diff --git a/examples/ida/fcmix_parallel/fidaHeat2D_kry_bbd_p.out b/examples/ida/fcmix_parallel/fidaHeat2D_kry_bbd_p.out
new file mode 100644
index 0000000..45d222e
--- /dev/null
+++ b/examples/ida/fcmix_parallel/fidaHeat2D_kry_bbd_p.out
@@ -0,0 +1,65 @@
+
+fidaHeat2D_kry_bbd_p: Heat equation, parallel example problem for FIDA
+                Discretized heat equation on 2D unit square.
+                Zero boundary conditions, polynomial conditions.
+                Mesh dimensions: 10 x 10         Total system size: 100
+
+Subgrid dimensions:  5 x  5           Processor array:  2 x  2
+Tolerance parameters: rtol = 0.00E+00   atol = 0.10E-02
+Constraints set to force all solution components >= 0.
+SUPPRESSALG = TRUE to remove boundary components from the error test.
+Linear solver: SPGMR.    Preconditioner: BBDPRE - Banded-block-diagonal.
+
+
+Case  1
+  Difference quotient half-bandwidths = 5
+  Retained matrix half-bandwidths = 1
+
+Output Summary
+  umax = max-norm of solution
+  nre = nre + nreLS (total number of RES evals.)
+
+   time         umax       k nst  nni  nli   nre   nge      h     npe  nps
+--------------------------------------------------------------------------
+ 0.1000E-01   0.82411E+00  2  12   14    7  14+ 7   96   0.26E-02   8   21
+ 0.2000E-01   0.68812E+00  3  15   18   12  18+12   96   0.51E-02   8   30
+ 0.4000E-01   0.47075E+00  3  18   24   22  24+22  108   0.66E-02   9   46
+ 0.8000E-01   0.21660E+00  3  22   29   30  29+30  108   0.13E-01   9   59
+ 0.1600E+00   0.45659E-01  4  28   37   43  37+43  120   0.26E-01  10   80
+ 0.3200E+00   0.21096E-02  4  35   45   59  45+59  120   0.24E-01  10  104
+ 0.6400E+00   0.55368E-04  1  40   54   71  54+71  156   0.19E+00  13  125
+ 0.1280E+01   0.15597E-18  1  42   56   71  56+71  180   0.76E+00  15  127
+ 0.2560E+01   0.33865E-20  1  43   57   71  57+71  192   0.15E+01  16  128
+ 0.5120E+01   0.86074E-20  1  44   58   71  58+71  204   0.30E+01  17  129
+ 0.1024E+02   0.16630E-19  1  45   59   71  59+71  216   0.61E+01  18  130
+
+Error test failures            =  1
+Nonlinear convergence failures =  0
+Linear convergence failures    =  0
+
+
+Case  2
+  Difference quotient half-bandwidths = 1
+  Retained matrix half-bandwidths = 1
+
+Output Summary
+  umax = max-norm of solution
+  nre = nre + nreLS (total number of RES evals.)
+
+   time         umax       k nst  nni  nli   nre   nge      h     npe  nps
+--------------------------------------------------------------------------
+ 0.1000E-01   0.82411E+00  2  12   14    7  14+ 7   32   0.26E-02   8   21
+ 0.2000E-01   0.68812E+00  3  15   18   12  18+12   32   0.51E-02   8   30
+ 0.4000E-01   0.47093E+00  3  19   23   20  23+20   36   0.10E-01   9   43
+ 0.8000E-01   0.21655E+00  3  23   27   32  27+32   36   0.10E-01   9   59
+ 0.1600E+00   0.45225E-01  4  27   33   44  33+44   40   0.20E-01  10   77
+ 0.3200E+00   0.21868E-02  3  34   41   67  41+67   44   0.41E-01  11  108
+ 0.6400E+00   0.48847E-18  1  39   49   86  49+86   52   0.16E+00  13  135
+ 0.1280E+01   0.53982E-18  1  41   51   86  51+86   60   0.66E+00  15  137
+ 0.2560E+01   0.74194E-17  1  42   52   86  52+86   64   0.13E+01  16  138
+ 0.5120E+01   0.61081E-16  1  43   53   86  53+86   68   0.26E+01  17  139
+ 0.1024E+02   0.40536E-15  1  44   54   86  54+86   72   0.52E+01  18  140
+
+Error test failures            =  0
+Nonlinear convergence failures =  0
+Linear convergence failures    =  0
diff --git a/examples/ida/fcmix_pthreads/CMakeLists.txt b/examples/ida/fcmix_pthreads/CMakeLists.txt
new file mode 100644
index 0000000..93a5696
--- /dev/null
+++ b/examples/ida/fcmix_pthreads/CMakeLists.txt
@@ -0,0 +1,146 @@
+# ---------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the FIDA opemp examples
+
+
+# Only include tests if Pthreads is enabled
+IF(PTHREADS_FOUND)
+
+# Add variable ida_examples with the names of the pthreads FIDA examples
+SET(FIDA_examples
+  fidaRoberts_dns_pthreads
+  )
+
+# Add variable FIDA_examples_BL with the names of the pthreads FIDA examples
+# that use Lapack
+
+SET(FIDA_examples_BL
+  )
+ENDIF(PTHREADS_FOUND)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_static)
+  SET(NVECS_LIB sundials_nvecpthreads_static)
+  SET(FNVECS_LIB sundials_fnvecpthreads_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_shared)
+  SET(NVECS_LIB sundials_nvecpthreads_shared)
+  SET(FNVECS_LIB sundials_fnvecpthreads_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FIDA_LIB sundials_fida_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FIDA_LIB} ${IDA_LIB} ${FNVECS_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(PETSC_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_FOUND)
+
+# Add the build and install targets for each FIDA example
+
+FOREACH(example ${FIDA_examples})
+  ADD_EXECUTABLE(${example} ${example}.f)
+  SUNDIALS_ADD_TEST(${example} ${example})
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_pthreads)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${FIDA_examples})
+
+# If Lapack support is enabled, add the build and install targets for
+# the examples using Lapack
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${FIDA_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.f)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_pthreads)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${FIDA_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_pthreads)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDA")
+  SET(SOLVER_LIB "sundials_ida")
+  SET(SOLVER_FLIB "sundials_fida")
+  LIST2STRING(FIDA_examples EXAMPLES)
+  IF(LAPACK_FOUND)
+    LIST2STRING(FIDA_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_pthreads_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/fcmix_pthreads/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/ida/fcmix_pthreads/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_pthreads 
+    )
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_pthreads_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/fcmix_pthreads/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/ida/fcmix_pthreads/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_pthreads
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/ida/fcmix_pthreads/README b/examples/ida/fcmix_pthreads/README
new file mode 100644
index 0000000..8e3d451
--- /dev/null
+++ b/examples/ida/fcmix_pthreads/README
@@ -0,0 +1,50 @@
+List of Pthreads IDA FCMIX examples
+
+  fidaRoberts_dns_pthreads : 3-species Robertson kinetics system with Pthreads
+
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/ida/fcmix_pthreads/fidaRoberts_dns_pthreads.f b/examples/ida/fcmix_pthreads/fidaRoberts_dns_pthreads.f
new file mode 100644
index 0000000..2c7c092
--- /dev/null
+++ b/examples/ida/fcmix_pthreads/fidaRoberts_dns_pthreads.f
@@ -0,0 +1,271 @@
+c     ----------------------------------------------------------------
+c     $Revision: 4392 $
+c     $Date: 2015-02-25 17:22:27 -0800 (Wed, 25 Feb 2015) $
+c     ----------------------------------------------------------------
+c     This simple example problem for FIDA, due to Robertson, is from 
+c     chemical kinetics, and consists of the following three equations:
+c
+c          dy1/dt = -.04*y1 + 1.e4*y2*y3
+c          dy2/dt =  .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+c             0   = y1 + y2 + y3 - 1
+c
+c     on the interval from t = 0.0 to t = 4.e10, with initial
+c     conditions: y1 = 1, y2 = y3 = 0.
+c
+c     While integrating the system, we also employ the rootfinding feature
+c     to find the points at which y1 = 1.e-4 or at which y3 = 0.01.
+c
+c     The problem is solved using a dense linear solver, with a
+c     user-supplied Jacobian. Output is printed at
+c     t = .4, 4, 40, ..., 4e10.
+c     ----------------------------------------------------------------
+c
+      program fidaRoberts_dns
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*8 neq
+      integer*8 iout(25), ipar
+      integer ier, ierroot, info(2)
+      double precision rout(10), rpar
+      integer iatol, nout, jout, itask
+      integer nst, kused, hused, i
+      double precision t0, t1, rtol, tout, tret
+      double precision y(3), yp(3), atol(3)
+c
+      data nst/3/, kused/9/, hused/2/
+
+      integer nthreads
+      nthreads = 4
+c
+c Initialize variables
+c
+      neq = 3
+      nout = 12
+      rtol = 1.0d-4
+      t0 = 0.0d0
+      t1 = 0.4d0
+      iatol = 2
+      itask = 1
+c
+      y(1) = 1.0d0
+      y(2) = 0.0d0
+      y(3) = 0.0d0
+c
+      yp(1) = -0.04d0
+      yp(2) = 0.04d0
+      yp(3) = 0.0d0
+c
+      atol(1) = 1.0d-6
+      atol(2) = 1.0d-10
+      atol(3) = 1.0d-6
+c
+c Initialize IDA vector environment
+c
+      call fnvinitpts(2, neq, nthreads, ier)
+      if (ier .ne. 0) then
+         write(6,10) ier
+ 10      format(///' SUNDIALS_ERROR: FNVINITS returned IER = ', i5)
+         stop
+      endif
+c
+      call fidamalloc(t0, y, yp, iatol, rtol, atol, 
+     &                iout, rout, ipar, rpar, ier)
+      if (ier .ne. 0) then
+         write(6,20) ier
+ 20      format(///' SUNDIALS_ERROR: FIDAMALLOC returned IER = ', i5)
+         stop
+      endif
+c
+c Initialize rootfinding problem
+
+      call fidarootinit(2, ier)
+      if (ier .ne. 0) then
+         write(6,25) ier
+ 25      format(///' SUNDIALS_ERROR: FIDAROOTINIT returned IER = ', i5)
+         call fidafree
+         stop
+      endif
+c
+c Attach dense linear solver
+c
+      call fidadense(neq, ier)
+      call fidadensesetjac(1, ier)
+c
+c Print header
+c
+      call prntintro(rtol, atol, y)
+c
+      tout = t1
+c
+c
+      jout = 1
+      do while(jout .le. nout)
+c
+        call fidasolve(tout, tret, y, yp, itask, ier)
+c
+        write(6,40) tret, (y(i), i = 1,3), iout(nst), iout(kused),
+     &              rout(hused)
+ 40     format(e10.4, 3(1x,e12.4), i5, i3, e12.4)
+c
+        if (ier .lt. 0) then
+           write(6,50) ier, iout(15)
+ 50        format(///' SUNDIALS_ERROR: FIDASOLVE returned IER = ',i5,/,
+     1            '                 Linear Solver returned IER = ',i5)
+           call fidarootfree
+           call fidafree
+           stop
+        endif
+c
+        if (ier .eq. 2) then
+          call fidarootinfo(2, info, ierroot)
+          if (ierroot .lt. 0) then
+            write(6,55) ier
+ 55         format(///' SUNDIALS_ERROR: FIDAROOTINFO returned IER = ',
+     1             i5)
+            call fidarootfree
+            call fidafree
+            stop
+          endif
+          write(6,60) (info(i), i = 1,2)
+ 60       format(5x, 'Above is a root, INFO() = ', 2i3)
+        endif                   
+c
+        if (ier .eq. 0) then
+           tout = tout * 10.0d0
+           jout = jout + 1
+        endif
+c
+      ENDDO
+c
+c Print final statistics
+c
+      call prntstats(iout)
+c
+c Free IDA memory
+c
+      call fidarootfree
+      call fidafree
+c
+      stop
+      end
+c
+c ==========
+c
+      subroutine fidaresfun(tres, y, yp, res, ipar, rpar, reserr)
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*4 ipar(*)
+      integer reserr
+      double precision tres, rpar(*)
+      double precision y(*), yp(*), res(*)
+c
+      res(1) = -0.04d0*y(1)+1.0d4*y(2)*y(3)
+      res(2) = -res(1)-3.0d7*y(2)*y(2)-yp(2)
+      res(1) = res(1)-yp(1)
+      res(3) = y(1)+y(2)+y(3)-1.0d0
+c
+      reserr = 0
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine fidadjac(neq, t, y, yp, r, jac, cj, ewt, h,
+     1                    ipar, rpar, wk1, wk2, wk3, djacerr)
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*4 neq, ipar(*)
+      integer djacerr
+      double precision t, h, cj, rpar(*)
+      double precision y(*), yp(*), r(*), ewt(*), jac(neq,neq)
+      double precision wk1(*), wk2(*), wk3(*)
+c
+      jac(1,1) = -0.04d0-cj
+      jac(2,1) = 0.04d0
+      jac(3,1) = 1.0d0
+      jac(1,2) = 1.0d4*y(3)
+      jac(2,2) = -1.0d4*y(3)-6.0d7*y(2)-cj
+      jac(3,2) = 1.0d0
+      jac(1,3) = 1.0d4*y(2)
+      jac(2,3) = -1.0d4*y(2)
+      jac(3,3) = 1.0d0
+c
+      djacerr = 0
+
+      return
+      end
+c
+c ==========
+c
+      subroutine fidarootfn(t, y, yp, g, ipar, rpar, ier)
+c Fortran routine for rootfinding
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*4 ipar(*)
+      integer ier
+      double precision t, y(*), yp(*), g(*), rpar(*)
+c
+      g(1) = y(1) - 1.0d-4
+      g(2) = y(3) - 1.0d-2
+
+      ier = 0
+
+      return
+      end
+c
+c ==========
+c
+      subroutine prntintro(rtol, atol, y)
+c
+      implicit none
+c
+      integer i
+      double precision rtol, atol(*), y(*)
+c
+      write(6,60) rtol, (atol(i), i = 1,3), (y(i), i = 1,3)
+ 60   format(/'fidaRoberts_dns: Robertson kinetics DAE serial example',
+     &       'problem for IDA', /,'          Three equation chemical',
+     &       'kinetics problem.', //,
+     &       'Tolerance parameters:  rtol = ', e8.2,
+     &       '   atol = ', 3(1x,e8.2), /,
+     &       'Initial conditions y0 = (', 3(1x,e8.2), ')', //,
+     &       '  t            y1           y2           y3        nst',
+     &       '  k    h')
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine prntstats(iout)
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*8 iout(25)
+      integer nst, reseval, jaceval, nni, ncf, netf, nge
+c
+      data nst/3/, reseval/4/, jaceval/17/, nni/7/, netf/5/,
+     &     ncf/6/, nge/12/
+c
+      write(6,70) iout(nst), iout(reseval), iout(jaceval),
+     &             iout(nni), iout(netf), iout(ncf), iout(nge)
+ 70   format(/'Final Run Statistics:', //,
+     &         'Number of steps                    = ', i3, /,
+     &         'Number of residual evaluations     = ', i3, /,
+     &         'Number of Jacobian evaluations     = ', i3, /,
+     &         'Number of nonlinear iterations     = ', i3, /,
+     &         'Number of error test failures      = ', i3, /,
+     &         'Number of nonlinear conv. failures = ', i3, /,
+     &         'Number of root function evals.     = ', i3)
+c
+      return
+      end
diff --git a/examples/ida/fcmix_pthreads/fidaRoberts_dns_pthreads.out b/examples/ida/fcmix_pthreads/fidaRoberts_dns_pthreads.out
new file mode 100644
index 0000000..7809e8a
--- /dev/null
+++ b/examples/ida/fcmix_pthreads/fidaRoberts_dns_pthreads.out
@@ -0,0 +1,34 @@
+
+fidaRoberts_dns: Robertson kinetics DAE serial exampleproblem for IDA
+          Three equation chemicalkinetics problem.
+
+Tolerance parameters:  rtol = 0.10E-03   atol =  0.10E-05 0.10E-09 0.10E-05
+Initial conditions y0 = ( 0.10E+01 0.00E+00 0.00E+00)
+
+  t            y1           y2           y3        nst  k    h
+0.2640E+00   0.9900E+00   0.3471E-04   0.1000E-01   75  2  0.5716E-01
+     Above is a root, INFO() =   0  1
+0.4000E+00   0.9852E+00   0.3386E-04   0.1480E-01   77  3  0.1143E+00
+0.4000E+01   0.9055E+00   0.2240E-04   0.9447E-01   91  4  0.3704E+00
+0.4000E+02   0.7158E+00   0.9185E-05   0.2842E+00  127  4  0.2963E+01
+0.4000E+03   0.4505E+00   0.3223E-05   0.5495E+00  177  3  0.1241E+02
+0.4000E+04   0.1832E+00   0.8940E-06   0.8168E+00  228  3  0.2765E+03
+0.4000E+05   0.3899E-01   0.1622E-06   0.9610E+00  278  5  0.2614E+04
+0.4000E+06   0.4939E-02   0.1985E-07   0.9951E+00  324  5  0.2770E+05
+0.4000E+07   0.5176E-03   0.2072E-08   0.9995E+00  355  4  0.3979E+06
+0.2075E+08   0.1000E-03   0.4000E-09   0.9999E+00  374  4  0.1592E+07
+     Above is a root, INFO() =  -1  0
+0.4000E+08   0.5191E-04   0.2076E-09   0.9999E+00  380  3  0.6366E+07
+0.4000E+09   0.5882E-05   0.2353E-10   0.1000E+01  394  1  0.9167E+08
+0.4000E+10   0.7054E-06   0.2822E-11   0.1000E+01  402  1  0.1467E+10
+0.4000E+11  -0.7300E-06  -0.2920E-11   0.1000E+01  407  1  0.2347E+11
+
+Final Run Statistics:
+
+Number of steps                    = 407
+Number of residual evaluations     = 557
+Number of Jacobian evaluations     =  65
+Number of nonlinear iterations     = 557
+Number of error test failures      =   6
+Number of nonlinear conv. failures =   0
+Number of root function evals.     = 445
diff --git a/examples/ida/fcmix_serial/CMakeLists.txt b/examples/ida/fcmix_serial/CMakeLists.txt
new file mode 100644
index 0000000..69d381e
--- /dev/null
+++ b/examples/ida/fcmix_serial/CMakeLists.txt
@@ -0,0 +1,147 @@
+# ---------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the FIDA serial examples
+
+
+# Add variable ida_examples with the names of the serial FIDA examples
+
+SET(FIDA_examples
+  fidaRoberts_dns
+  )
+
+# Add variable FIDA_examples_BL with the names of the serial FIDA examples
+# that use Lapack
+
+SET(FIDA_examples_BL
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+  SET(FNVECS_LIB sundials_fnvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+  SET(FNVECS_LIB sundials_fnvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FIDA_LIB sundials_fida_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FIDA_LIB} ${IDA_LIB} ${FNVECS_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(PETSC_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_FOUND)
+
+# Add the build and install targets for each FIDA example
+
+FOREACH(example ${FIDA_examples})
+  ADD_EXECUTABLE(${example} ${example}.f)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${FIDA_examples})
+
+# If Lapack support is enabled, add the build and install targets for
+# the examples using Lapack
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${FIDA_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.f)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${FIDA_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_serial)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDA")
+  SET(SOLVER_LIB "sundials_ida")
+  SET(SOLVER_FLIB "sundials_fida")
+  LIST2STRING(FIDA_examples EXAMPLES)
+  IF(LAPACK_FOUND)
+    LIST2STRING(FIDA_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/fcmix_serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/ida/fcmix_serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/fcmix_serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/ida/fcmix_serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/fcmix_serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/ida/fcmix_serial/README b/examples/ida/fcmix_serial/README
new file mode 100644
index 0000000..44b9491
--- /dev/null
+++ b/examples/ida/fcmix_serial/README
@@ -0,0 +1,49 @@
+List of serial IDA FCMIX examples
+
+  fidaRoberts_dns : chemical kinetics example (DENSE)
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/ida/fcmix_serial/fidaRoberts_dns.f b/examples/ida/fcmix_serial/fidaRoberts_dns.f
new file mode 100644
index 0000000..8ded4b3
--- /dev/null
+++ b/examples/ida/fcmix_serial/fidaRoberts_dns.f
@@ -0,0 +1,267 @@
+c     ----------------------------------------------------------------
+c     $Revision: 4885 $
+c     $Date: 2016-09-02 08:29:03 -0700 (Fri, 02 Sep 2016) $
+c     ----------------------------------------------------------------
+c     This simple example problem for FIDA, due to Robertson, is from 
+c     chemical kinetics, and consists of the following three equations:
+c
+c          dy1/dt = -.04*y1 + 1.e4*y2*y3
+c          dy2/dt =  .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+c             0   = y1 + y2 + y3 - 1
+c
+c     on the interval from t = 0.0 to t = 4.e10, with initial
+c     conditions: y1 = 1, y2 = y3 = 0.
+c
+c     While integrating the system, we also employ the rootfinding feature
+c     to find the points at which y1 = 1.e-4 or at which y3 = 0.01.
+c
+c     The problem is solved using a dense linear solver, with a
+c     user-supplied Jacobian. Output is printed at
+c     t = .4, 4, 40, ..., 4e10.
+c     ----------------------------------------------------------------
+c
+      program fidaRoberts_dns
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*8 neq, iout(25), ipar
+      integer ier, ierroot, info(2)
+      double precision rout(10), rpar
+      integer iatol, nout, jout, itask
+      integer nst, kused, hused, i
+      double precision t0, t1, rtol, tout, tret
+      double precision y(3), yp(3), atol(3)
+c
+      data nst/3/, kused/9/, hused/2/
+c
+c Initialize variables
+c
+      neq = 3
+      nout = 12
+      rtol = 1.0d-4
+      t0 = 0.0d0
+      t1 = 0.4d0
+      iatol = 2
+      itask = 1
+c
+      y(1) = 1.0d0
+      y(2) = 0.0d0
+      y(3) = 0.0d0
+c
+      yp(1) = -0.04d0
+      yp(2) = 0.04d0
+      yp(3) = 0.0d0
+c
+      atol(1) = 1.0d-6
+      atol(2) = 1.0d-10
+      atol(3) = 1.0d-6
+c
+c Initialize IDA vector environment
+c
+      call fnvinits(2, neq, ier)
+      if (ier .ne. 0) then
+         write(6,10) ier
+ 10      format(///' SUNDIALS_ERROR: FNVINITS returned IER = ', i5)
+         stop
+      endif
+c
+      call fidamalloc(t0, y, yp, iatol, rtol, atol, 
+     &                iout, rout, ipar, rpar, ier)
+      if (ier .ne. 0) then
+         write(6,20) ier
+ 20      format(///' SUNDIALS_ERROR: FIDAMALLOC returned IER = ', i5)
+         stop
+      endif
+c
+c Initialize rootfinding problem
+
+      call fidarootinit(2, ier)
+      if (ier .ne. 0) then
+         write(6,25) ier
+ 25      format(///' SUNDIALS_ERROR: FIDAROOTINIT returned IER = ', i5)
+         call fidafree
+         stop
+      endif
+c
+c Attach dense linear solver
+c
+      call fidadense(neq, ier)
+      call fidadensesetjac(1, ier)
+c
+c Print header
+c
+      call prntintro(rtol, atol, y)
+c
+      tout = t1
+c
+c
+      jout = 1
+      do while(jout .le. nout)
+c
+        call fidasolve(tout, tret, y, yp, itask, ier)
+c
+        write(6,40) tret, (y(i), i = 1,3), iout(nst), iout(kused),
+     &              rout(hused)
+ 40     format(e10.4, 3(1x,e12.4), i5, i3, e12.4)
+c
+        if (ier .lt. 0) then
+           write(6,50) ier, iout(15)
+ 50        format(///' SUNDIALS_ERROR: FIDASOLVE returned IER = ',i5,/,
+     1            '                 Linear Solver returned IER = ',i5)
+           call fidarootfree
+           call fidafree
+           stop
+        endif
+c
+        if (ier .eq. 2) then
+          call fidarootinfo(2, info, ierroot)
+          if (ierroot .lt. 0) then
+            write(6,55) ierroot
+ 55         format(///' SUNDIALS_ERROR: FIDAROOTINFO returned IER = ',
+     1             i5)
+            call fidarootfree
+            call fidafree
+            stop
+          endif
+          write(6,60) (info(i), i = 1,2)
+ 60       format(5x, 'Above is a root, INFO() = ', 2i3)
+        endif                   
+c
+        if (ier .eq. 0) then
+           tout = tout * 10.0d0
+           jout = jout + 1
+        endif
+c
+      ENDDO
+c
+c Print final statistics
+c
+      call prntstats(iout)
+c
+c Free IDA memory
+c
+      call fidarootfree
+      call fidafree
+c
+      stop
+      end
+c
+c ==========
+c
+      subroutine fidaresfun(tres, y, yp, res, ipar, rpar, reserr)
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*8 ipar(*)
+      integer reserr
+      double precision tres, rpar(*)
+      double precision y(*), yp(*), res(*)
+c
+      res(1) = -0.04d0*y(1)+1.0d4*y(2)*y(3)
+      res(2) = -res(1)-3.0d7*y(2)*y(2)-yp(2)
+      res(1) = res(1)-yp(1)
+      res(3) = y(1)+y(2)+y(3)-1.0d0
+c
+      reserr = 0
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine fidadjac(neq, t, y, yp, r, jac, cj, ewt, h,
+     1                    ipar, rpar, wk1, wk2, wk3, djacerr)
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*8 neq, ipar(*)
+      integer djacerr
+      double precision t, h, cj, rpar(*)
+      double precision y(*), yp(*), r(*), ewt(*), jac(neq,neq)
+      double precision wk1(*), wk2(*), wk3(*)
+c
+      jac(1,1) = -0.04d0-cj
+      jac(2,1) = 0.04d0
+      jac(3,1) = 1.0d0
+      jac(1,2) = 1.0d4*y(3)
+      jac(2,2) = -1.0d4*y(3)-6.0d7*y(2)-cj
+      jac(3,2) = 1.0d0
+      jac(1,3) = 1.0d4*y(2)
+      jac(2,3) = -1.0d4*y(2)
+      jac(3,3) = 1.0d0
+c
+      djacerr = 0
+
+      return
+      end
+c
+c ==========
+c
+      subroutine fidarootfn(t, y, yp, g, ipar, rpar, ier)
+c Fortran routine for rootfinding
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*8 ipar(*)
+      integer ier
+      double precision t, y(*), yp(*), g(*), rpar(*)
+c
+      g(1) = y(1) - 1.0d-4
+      g(2) = y(3) - 1.0d-2
+
+      ier = 0
+
+      return
+      end
+c
+c ==========
+c
+      subroutine prntintro(rtol, atol, y)
+c
+      implicit none
+c
+      integer i
+      double precision rtol, atol(*), y(*)
+c
+      write(6,60) rtol, (atol(i), i = 1,3), (y(i), i = 1,3)
+ 60   format(/'fidaRoberts_dns: Robertson kinetics DAE serial example',
+     &       'problem for IDA', /,'          Three equation chemical',
+     &       'kinetics problem.', //,
+     &       'Tolerance parameters:  rtol = ', e8.2,
+     &       '   atol = ', 3(1x,e8.2), /,
+     &       'Initial conditions y0 = (', 3(1x,e8.2), ')', //,
+     &       '  t            y1           y2           y3        nst',
+     &       '  k    h')
+c
+      return
+      end
+c
+c ==========
+c
+      subroutine prntstats(iout)
+c
+      implicit none
+c
+c The following declaration specification should match C type long int.
+      integer*8 iout(25)
+      integer nst, reseval, jaceval, nni, ncf, netf, nge
+c
+      data nst/3/, reseval/4/, jaceval/17/, nni/7/, netf/5/,
+     &     ncf/6/, nge/12/
+c
+      write(6,70) iout(nst), iout(reseval), iout(jaceval),
+     &             iout(nni), iout(netf), iout(ncf), iout(nge)
+ 70   format(/'Final Run Statistics:', //,
+     &         'Number of steps                    = ', i3, /,
+     &         'Number of residual evaluations     = ', i3, /,
+     &         'Number of Jacobian evaluations     = ', i3, /,
+     &         'Number of nonlinear iterations     = ', i3, /,
+     &         'Number of error test failures      = ', i3, /,
+     &         'Number of nonlinear conv. failures = ', i3, /,
+     &         'Number of root function evals.     = ', i3)
+c
+      return
+      end
diff --git a/examples/ida/fcmix_serial/fidaRoberts_dns.out b/examples/ida/fcmix_serial/fidaRoberts_dns.out
new file mode 100644
index 0000000..549e24f
--- /dev/null
+++ b/examples/ida/fcmix_serial/fidaRoberts_dns.out
@@ -0,0 +1,34 @@
+
+fidaRoberts_dns: Robertson kinetics DAE serial exampleproblem for IDA
+          Three equation chemicalkinetics problem.
+
+Tolerance parameters:  rtol = 0.10E-03   atol =  0.10E-05 0.10E-09 0.10E-05
+Initial conditions y0 = ( 0.10E+01 0.00E+00 0.00E+00)
+
+  t            y1           y2           y3        nst  k    h
+0.2640E+00   0.9900E+00   0.3471E-04   0.1000E-01   75  2  0.5716E-01
+     Above is a root, INFO() =   0  1
+0.4000E+00   0.9852E+00   0.3386E-04   0.1480E-01   77  3  0.1143E+00
+0.4000E+01   0.9055E+00   0.2240E-04   0.9447E-01   91  4  0.3704E+00
+0.4000E+02   0.7158E+00   0.9185E-05   0.2842E+00  127  4  0.2963E+01
+0.4000E+03   0.4505E+00   0.3223E-05   0.5495E+00  177  3  0.1241E+02
+0.4000E+04   0.1832E+00   0.8940E-06   0.8168E+00  228  3  0.2765E+03
+0.4000E+05   0.3899E-01   0.1622E-06   0.9610E+00  278  5  0.2614E+04
+0.4000E+06   0.4939E-02   0.1985E-07   0.9951E+00  324  5  0.2770E+05
+0.4000E+07   0.5176E-03   0.2072E-08   0.9995E+00  355  4  0.3979E+06
+0.2075E+08   0.1000E-03   0.4000E-09   0.9999E+00  374  4  0.1592E+07
+     Above is a root, INFO() =  -1  0
+0.4000E+08   0.5191E-04   0.2076E-09   0.9999E+00  380  3  0.6366E+07
+0.4000E+09   0.5882E-05   0.2353E-10   0.1000E+01  394  1  0.9167E+08
+0.4000E+10   0.7054E-06   0.2822E-11   0.1000E+01  402  1  0.1467E+10
+0.4000E+11  -0.7300E-06  -0.2920E-11   0.1000E+01  407  1  0.2347E+11
+
+Final Run Statistics:
+
+Number of steps                    = 407
+Number of residual evaluations     = 557
+Number of Jacobian evaluations     =  65
+Number of nonlinear iterations     = 557
+Number of error test failures      =   6
+Number of nonlinear conv. failures =   0
+Number of root function evals.     = 437
diff --git a/examples/ida/parallel/CMakeLists.txt b/examples/ida/parallel/CMakeLists.txt
new file mode 100644
index 0000000..21b1e14
--- /dev/null
+++ b/examples/ida/parallel/CMakeLists.txt
@@ -0,0 +1,140 @@
+# ---------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for IDA parallel examples
+
+
+# Add variable IDA_examples with the names of the parallel IDA examples
+# "name\;nodes\;tasks"
+SET(IDA_examples
+  "idaFoodWeb_kry_bbd_p\;1\;4"
+  "idaFoodWeb_kry_p\;1\;4"
+  "idaHeat2D_kry_bbd_p\;1\;4"
+  "idaHeat2D_kry_p\;1\;4"
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the C compiler to the MPICC script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${IDA_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(PETSC_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_FOUND)
+
+# Add the build and install targets for each IDA example
+
+FOREACH(example_tuple ${IDA_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPICC)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPICC)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${IDA_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/parallel)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDA")
+  SET(SOLVER_LIB "sundials_ida")
+  FOREACH(example_tuple ${IDA_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${IDA_examples})
+  
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/ida/parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/ida/parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/parallel
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/ida/parallel/README b/examples/ida/parallel/README
new file mode 100644
index 0000000..08e1230
--- /dev/null
+++ b/examples/ida/parallel/README
@@ -0,0 +1,52 @@
+List of parallel IDA examples
+
+  idaFoodWeb_kry_bbd_p : 2-D food web, BBD preconditioner
+  idaFoodWeb_kry_p     : 2-D food web, block-diagonal preconditioner
+  idaHeat2D_kry_bbd_p  : 2-D heat equation, BBD preconditioner
+  idaHeat2D_kry_p      : 2-D heat equation, diagonal preconditioner
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/ida/parallel/idaFoodWeb_kry_bbd_p.c b/examples/ida/parallel/idaFoodWeb_kry_bbd_p.c
new file mode 100644
index 0000000..9daab3d
--- /dev/null
+++ b/examples/ida/parallel/idaFoodWeb_kry_bbd_p.c
@@ -0,0 +1,1091 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example program for IDA: Food web, parallel, GMRES, IDABBD
+ * preconditioner.
+ *
+ * This example program for IDA uses IDASPGMR as the linear solver.
+ * It is written for a parallel computer system and uses the
+ * IDABBDPRE band-block-diagonal preconditioner module for the
+ * IDASPGMR package. It was originally run on a Sun SPARC cluster
+ * and used MPICH.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c    + c  )  +  R  (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *   a(i,i) = -AA  (all i)
+ *   a(i,j) = -GG  (i <= np , j >  np)
+ *   a(i,j) =  EE  (i >  np,  j <= np)
+ *   all other a(i,j) = 0
+ *   b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y))  (i <= np)
+ *   b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y))  (i  > np)
+ *   d(i) = DPREY  (i <= np)
+ *   d(i) = DPRED  (i > np)
+ *
+ * Note: The above equations are written in 1-based indices,
+ * whereas the code has 0-based indices, being written in C.
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative  =  0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh, and so the system size Neq is the product
+ * MX * MY * NUM_SPECIES. The system is actually implemented on
+ * submeshes, processor by processor, with an MXSUB by MYSUB mesh
+ * on each of NPEX * NPEY processors.
+ *
+ * The DAE system is solved by IDA using the IDASPGMR linear solver,
+ * in conjunction with the preconditioner module IDABBDPRE. The
+ * preconditioner uses a 5-diagonal band-block-diagonal
+ * approximation (half-bandwidths = 2). Output is printed at
+ * t = 0, .001, .01, .1, .4, .7, 1.
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems,
+ *     Journal of Applied Mathematics and Computation, Vol. 31
+ *     (May 1989), pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_spgmr.h>
+#include <ida/ida_bbdpre.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+/* Problem Constants */
+
+#define NPREY       1        /* Number of prey (= number of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898) /* pi */ 
+#define FOURPI      (RCONST(4.0)*PI)        /* 4 pi */
+
+#define MXSUB       10    /* Number of x mesh points per processor subgrid */
+#define MYSUB       10    /* Number of y mesh points per processor subgrid */
+#define NPEX        2     /* Number of subgrids in the x direction */
+#define NPEY        2     /* Number of subgrids in the y direction */
+#define MX          (MXSUB*NPEX)      /* MX = number of x mesh points */
+#define MY          (MYSUB*NPEY)      /* MY = number of y mesh points */
+#define NSMXSUB     (NUM_SPECIES * MXSUB)
+#define NEQ         (NUM_SPECIES*MX*MY) /* Number of equations in system */
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns. */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns. */
+#define AX          RCONST(1.0)    /* Total range of x variable */
+#define AY          RCONST(1.0)    /* Total range of y variable */
+#define RTOL        RCONST(1.e-5)  /*  rtol tolerance */
+#define ATOL        RCONST(1.e-5)  /*  atol tolerance */
+#define ZERO        RCONST(0.)     /* 0. */
+#define ONE         RCONST(1.0)    /* 1. */
+#define NOUT        6  
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values */
+#define TADD        RCONST(0.3)    /* Increment for tout values */
+
+/* User-defined vector accessor macro IJ_Vptr. */
+
+/*
+ * IJ_Vptr is defined in order to express the underlying 3-d structure of the 
+ * dependent variable vector from its underlying 1-d storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_P(vv, (i)*NUM_SPECIES + (j)*NSMXSUB ))
+
+/* Type: UserData.  Contains problem constants, preconditioner data, etc. */
+
+typedef struct {
+  int ns, np, thispe, npes, ixsub, jysub, npex, npey;
+  int mxsub, mysub, nsmxsub, nsmxsub2;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES],
+    rhs[NUM_SPECIES], cext[(MXSUB+2)*(MYSUB+2)*NUM_SPECIES];
+  MPI_Comm comm;
+  N_Vector rates;
+  long int n_local;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+
+static int resweb(realtype tt, 
+                  N_Vector cc, N_Vector cp, N_Vector rr, 
+                  void *user_data);
+
+static int reslocal(long int Nlocal, realtype tt, 
+                    N_Vector cc, N_Vector cp, N_Vector res, 
+                    void *user_data);
+
+static int rescomm(long int Nlocal, realtype tt,
+                   N_Vector cc, N_Vector cp, 
+                   void *user_data);
+
+/* Prototypes for supporting functions */
+
+static void BSend(MPI_Comm comm, int thispe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype carray[]);
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[]);
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[]);
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+
+static realtype dotprod(int size, realtype *x1, realtype *x2);
+
+/* Prototypes for private functions */
+
+static void InitUserData(UserData webdata, int thispe, int npes, 
+                         MPI_Comm comm);
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               N_Vector scrtch, UserData webdata);
+
+static void PrintHeader(long int SystemSize, int maxl, 
+                        long int mudq, long int mldq, 
+                        long int mukeep, long int mlkeep,
+                        realtype rtol, realtype atol);
+
+static void PrintOutput(void *mem, N_Vector cc, realtype time,
+                        UserData webdata, MPI_Comm comm);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData webdata;
+  long int SystemSize, local_N, mudq, mldq, mukeep, mlkeep;
+  realtype rtol, atol, t0, tout, tret;
+  N_Vector cc, cp, res, id;
+  int thispe, npes, maxl, iout, retval;
+
+  cc = cp = res = id = NULL;
+  webdata = NULL;
+  mem = NULL;
+
+  /* Set communicator, and get processor number and total number of PE's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_rank(comm, &thispe);
+  MPI_Comm_size(comm, &npes);
+
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d not equal to NPEX*NPEY = %d\n", 
+              npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1); 
+  }
+  
+  /* Set local length (local_N) and global length (SystemSize). */
+
+  local_N = MXSUB*MYSUB*NUM_SPECIES;
+  SystemSize = NEQ;
+
+  /* Set up user data block webdata. */
+
+  webdata = (UserData) malloc(sizeof *webdata);
+  webdata->rates = N_VNew_Parallel(comm, local_N, SystemSize);
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+
+  InitUserData(webdata, thispe, npes, comm);
+  
+  /* Create needed vectors, and load initial values.
+     The vector res is used temporarily only.        */
+  
+  cc  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)cc, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  cp  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)cp, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  res = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)res, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  id  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+  
+  SetInitialProfiles(cc, cp, id, res, webdata);
+  
+  N_VDestroy_Parallel(res);
+  
+  /* Set remaining inputs to IDAMalloc. */
+  
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+  
+  /* Call IDACreate and IDAMalloc to initialize solution */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetUserData(mem, webdata);
+  if(check_flag(&retval, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetId(mem, id);
+  if(check_flag(&retval, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDAInit(mem, resweb, t0, cc, cp);
+  if(check_flag(&retval, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+  
+  retval = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&retval, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDASpgmr to specify the IDA linear solver IDASPGMR */
+
+  maxl = 16;
+  retval = IDASpgmr(mem, maxl);
+  if(check_flag(&retval, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDABBDPrecInit to initialize the band-block-diagonal preconditioner.
+     The half-bandwidths for the difference quotient evaluation are exact
+     for the system Jacobian, but only a 5-diagonal band matrix is retained. */
+  
+  mudq = mldq = NSMXSUB;
+  mukeep = mlkeep = 2;
+  retval = IDABBDPrecInit(mem, local_N, mudq, mldq, mukeep, mlkeep, 
+                          ZERO, reslocal, NULL);
+  if(check_flag(&retval, "IDABBDPrecInit", 1, thispe)) MPI_Abort(comm, 1);
+  
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+  
+  tout = RCONST(0.001);
+  retval = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&retval, "IDACalcIC", 1, thispe)) MPI_Abort(comm, 1);
+  
+  /* On PE 0, print heading, basic parameters, initial values. */
+ 
+  if (thispe == 0) PrintHeader(SystemSize, maxl, 
+                               mudq, mldq, mukeep, mlkeep,
+                               rtol, atol);
+  PrintOutput(mem, cc, t0, webdata, comm);
+
+  /* Call IDA in tout loop, normal mode, and print selected output. */
+  
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    retval = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if(check_flag(&retval, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+    
+    PrintOutput(mem, cc, tret, webdata, comm);
+    
+    if (iout < 3) tout *= TMULT; 
+    else          tout += TADD;
+
+  }
+  
+  /* On PE 0, print final set of statistics. */
+  
+  if (thispe == 0)  PrintFinalStats(mem);
+
+  /* Free memory. */
+
+  N_VDestroy_Parallel(cc);
+  N_VDestroy_Parallel(cp);
+  N_VDestroy_Parallel(id);
+
+  IDAFree(&mem);
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_Parallel(webdata->rates);
+  free(webdata);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata, int thispe, int npes, 
+                         MPI_Comm comm)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2, **acoef, *bcoef, *cox, *coy;
+
+  webdata->jysub = thispe / NPEX;
+  webdata->ixsub = thispe - (webdata->jysub)*NPEX;
+  webdata->mxsub = MXSUB;
+  webdata->mysub = MYSUB;
+  webdata->npex = NPEX;
+  webdata->npey = NPEY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->thispe = thispe;
+  webdata->npes   = npes;
+  webdata->nsmxsub = MXSUB * NUM_SPECIES;
+  webdata->nsmxsub2 = (MXSUB+2)*NUM_SPECIES;
+  webdata->comm = comm;
+  webdata->n_local = MXSUB*MYSUB*NUM_SPECIES;
+
+  /* Set up the coefficients a and b plus others found in the equations. */
+
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); 
+  dy2 = (webdata->dy)*(webdata->dy);
+
+  acoef = webdata->acoef;
+  bcoef = webdata->bcoef;
+  cox = webdata->cox;
+  coy = webdata->coy;
+
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+
+}
+
+/*
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               N_Vector res, UserData webdata)
+{
+  int ixsub, jysub, mxsub, mysub, nsmxsub, np, ix, jy, is;
+  realtype *cxy, *idxy, *cpxy, dx, dy, xx, yy, xyfactor;
+
+  ixsub = webdata->ixsub;
+  jysub = webdata->jysub;
+  mxsub = webdata->mxsub;
+  mysub = webdata->mxsub;
+  nsmxsub = webdata->nsmxsub;
+  dx = webdata->dx;
+  dy = webdata->dy;
+  np = webdata->np;
+
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < mysub; jy++) {
+    yy = (jy + jysub*mysub) * dy;
+    for (ix = 0; ix < mxsub; ix++) {
+      xx = (ix + ixsub*mxsub) * dx;
+      xyfactor = 16.*xx*(1. - xx)*yy*(1. - yy);
+      xyfactor *= xyfactor;
+
+      cxy = IJ_Vptr(cc,ix,jy); 
+      idxy = IJ_Vptr(id,ix,jy); 
+      for (is = 0; is < NUM_SPECIES; is++) {
+	if (is < np)
+           {cxy[is] = RCONST(10.0)+(realtype)(is+1)*xyfactor; idxy[is] = ONE;}
+        else { cxy[is] = 1.0e5; idxy[is] = ZERO; }
+      }
+    }
+  }
+
+  /* Set c' for the prey by calling the residual function with cp = 0. */
+  
+  N_VConst(ZERO, cp);
+  resweb(ZERO, cc, cp, res, webdata);
+  N_VScale(-ONE, res, cp);
+  
+  /* Set c' for predators to 0. */
+  
+  for (jy = 0; jy < mysub; jy++) {
+    for (ix = 0; ix < mxsub; ix++) {
+      cpxy = IJ_Vptr(cp,ix,jy); 
+      for (is = np; is < NUM_SPECIES; is++) cpxy[is] = ZERO;
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ * and table headerr
+ */
+
+static void PrintHeader(long int SystemSize, int maxl, 
+                        long int mudq, long int mldq, 
+                        long int mukeep, long int mlkeep,
+                        realtype rtol, realtype atol)
+{
+  printf("\nidaFoodWeb_kry_bbd_p: Predator-prey DAE parallel example problem for IDA \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     Total system size: %ld\n",SystemSize);
+  printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+  printf("     Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDASPGMR     Max. Krylov dimension maxl: %d\n", maxl);
+  printf("Preconditioner: band-block-diagonal (IDABBDPRE), with parameters\n");
+  printf("     mudq = %ld,  mldq = %ld,  mukeep = %ld,  mlkeep = %ld\n",
+         mudq, mldq, mukeep, mlkeep);
+  printf("CalcIC called to correct initial predator concentrations \n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+}
+
+
+/*
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of c1 and c2
+ * are printed for the bottom left and top right grid points only.
+ */
+
+static void PrintOutput(void *mem, N_Vector cc, realtype tt,
+                        UserData webdata, MPI_Comm comm)
+{
+  MPI_Status status;
+  realtype *cdata, clast[2], hused;
+  long int nst;
+  int i, kused, flag, thispe, npelast, ilast;;
+
+  thispe = webdata->thispe; 
+  npelast = webdata->npes - 1;
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Send conc. at top right mesh point from PE npes-1 to PE 0. */
+  if (thispe == npelast) {
+    ilast = NUM_SPECIES*MXSUB*MYSUB - 2;
+    if (npelast != 0)
+      MPI_Send(&cdata[ilast], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else { clast[0] = cdata[ilast]; clast[1] = cdata[ilast+1]; }
+  }
+  
+  /* On PE 0, receive conc. at top right from PE npes - 1.
+     Then print performance data and sampled solution values. */
+  
+  if (thispe == 0) {
+    
+    if (npelast != 0)
+      MPI_Recv(&clast[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    
+    flag = IDAGetLastOrder(mem, &kused);
+    check_flag(&flag, "IDAGetLastOrder", 1, thispe);
+    flag = IDAGetNumSteps(mem, &nst);
+    check_flag(&flag, "IDAGetNumSteps", 1, thispe);
+    flag = IDAGetLastStep(mem, &hused);
+    check_flag(&flag, "IDAGetLastStep", 1, thispe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4Le %12.4Le   |\n",cdata[i],clast[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#else
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#endif
+    printf("\n");
+
+  }
+
+}
+
+/*
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int nst, nre, nreLS, netf, ncfn, nni, ncfl, nli, npe, nps, nge;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1, 0);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1, 0);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1, 0);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1, 0);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1, 0);
+
+  flag = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&flag, "IDASpilsGetNumConvFails", 1, 0);
+  flag = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&flag, "IDASpilsGetNumLinIters", 1, 0);
+  flag = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&flag, "IDASpilsGetNumPrecEvals", 1, 0);
+  flag = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&flag, "IDASpilsGetNumPrecSolves", 1, 0);
+  flag = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDASpilsGetNumResEvals", 1, 0);
+
+  flag = IDABBDPrecGetNumGfnEvals(mem, &nge);
+  check_flag(&flag, "IDABBDPrecGetNumGfnEvals", 1, 0);
+
+  printf("-----------------------------------------------------------\n");
+  printf("\nFinal statistics: \n\n");
+
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n\n", ncfn);
+
+  printf("Number of linear iterations        = %ld\n", nli);
+  printf("Number of linear conv. failures    = %ld\n\n", ncfl);
+
+  printf("Number of preconditioner setups    = %ld\n", npe);
+  printf("Number of preconditioner solves    = %ld\n", nps);
+  printf("Number of local residual evals.    = %ld\n", nge);
+
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", 
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA & SUPPORTING FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resweb: System residual function for predator-prey system.
+ * To compute the residual function F, this routine calls:
+ * rescomm, for needed communication, and then
+ * reslocal, for computation of the residuals on this processor.      
+ */
+
+static int resweb(realtype tt, 
+                  N_Vector cc, N_Vector cp, N_Vector rr, 
+                  void *user_data)
+{
+  int retval;
+  UserData webdata;
+  long int Nlocal;
+  
+  webdata = (UserData) user_data;
+  
+  Nlocal = webdata->n_local;
+
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(Nlocal, tt, cc, cp, user_data);
+  
+  /* Call reslocal to calculate the local portion of residual vector. */
+  retval = reslocal(Nlocal, tt, cc, cp, rr, user_data);
+  
+  return(0);
+}
+
+/*
+ * rescomm: Communication routine in support of resweb.
+ * This routine performs all inter-processor communication of components
+ * of the cc vector needed to calculate F, namely the components at all
+ * interior subgrid boundaries (ghost cell data).  It loads this data
+ * into a work array cext (the local portion of c, extended).
+ * The message-passing uses blocking sends, non-blocking receives,
+ * and receive-waiting, in routines BRecvPost, BSend, BRecvWait.         
+ */
+
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector cc, N_Vector cp,
+                   void *user_data)
+{
+
+  UserData webdata;
+  realtype *cdata, *cext, buffer[2*NUM_SPECIES*MYSUB];
+  int thispe, ixsub, jysub, nsmxsub, nsmysub;
+  MPI_Comm comm;
+  MPI_Request request[4];
+  
+  webdata = (UserData) user_data;
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Get comm, thispe, subgrid indices, data sizes, extended array cext. */
+  
+  comm = webdata->comm;     
+  thispe = webdata->thispe;
+
+  ixsub = webdata->ixsub;   
+  jysub = webdata->jysub;
+  cext = webdata->cext;
+  nsmxsub = webdata->nsmxsub; 
+  nsmysub = (webdata->ns)*(webdata->mysub);
+  
+  /* Start receiving boundary data from neighboring PEs. */
+
+  BRecvPost(comm, request, thispe, ixsub, jysub, nsmxsub, nsmysub, 
+            cext, buffer);
+  
+  /* Send data from boundary of local grid to neighboring PEs. */
+  
+  BSend(comm, thispe, ixsub, jysub, nsmxsub, nsmysub, cdata);
+  
+  /* Finish receiving boundary data from neighboring PEs. */
+  
+  BRecvWait(request, ixsub, jysub, nsmxsub, cext, buffer);
+  
+  return(0);
+}
+
+/*
+ * BRecvPost: Start receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls. 
+ */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[])
+{
+  int offsetce;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Irecv(&cext[NUM_SPECIES], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1) {
+    offsetce = NUM_SPECIES*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&cext[offsetce], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe+1, 0, comm, &request[3]);
+  }
+  
+}
+
+/*
+ * BRecvWait: Finish receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls.  
+ */
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[])
+{
+  int i;
+  int ly, dsizex2, offsetce, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2*NUM_SPECIES;
+  
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+1)*dsizex2;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufleft[offsetbuf+i];
+    }
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+2)*dsizex2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/*
+ * BSend: Send boundary data to neighboring PEs.
+ * This routine sends components of cc from internal subgrid boundaries
+ * to the appropriate neighbor PEs.                                      
+ */
+ 
+static void BSend(MPI_Comm comm, int my_pe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype cdata[])
+{
+  int i;
+  int ly, offsetc, offsetbuf;
+  realtype bufleft[NUM_SPECIES*MYSUB], bufright[NUM_SPECIES*MYSUB];
+
+  /* If jysub > 0, send data from bottom x-line of cc. */
+
+  if (jysub != 0)
+    MPI_Send(&cdata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If jysub < NPEY-1, send data from top x-line of cc. */
+
+  if (jysub != NPEY-1) {
+    offsetc = (MYSUB-1)*dsizex;
+    MPI_Send(&cdata[offsetc], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If ixsub > 0, send data from left y-line of cc (via bufleft). */
+
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = ly*dsizex;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufleft[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+  
+  /* If ixsub < NPEX-1, send data from right y-line of cc (via bufright). */
+  
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = offsetbuf*MXSUB + (MXSUB-1)*NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufright[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* Define lines are for ease of readability in the following functions. */
+
+#define mxsub      (webdata->mxsub)
+#define mysub      (webdata->mysub)
+#define npex       (webdata->npex)
+#define npey       (webdata->npey)
+#define ixsub      (webdata->ixsub)
+#define jysub      (webdata->jysub)
+#define nsmxsub    (webdata->nsmxsub)
+#define nsmxsub2   (webdata->nsmxsub2)
+#define np         (webdata->np)
+#define dx         (webdata->dx)
+#define dy         (webdata->dy)
+#define cox        (webdata->cox)
+#define coy        (webdata->coy)
+#define rhs        (webdata->rhs)
+#define cext       (webdata->cext)
+#define rates      (webdata->rates)
+#define ns         (webdata->ns)
+#define acoef      (webdata->acoef)
+#define bcoef      (webdata->bcoef)
+
+/*
+ * reslocal: Compute res = F(t,cc,cp).
+ * This routine assumes that all inter-processor communication of data
+ * needed to calculate F has already been done.  Components at interior
+ * subgrid boundaries are assumed to be in the work array cext.
+ * The local portion of the cc vector is first copied into cext.
+ * The exterior Neumann boundary conditions are explicitly handled here
+ * by copying data from the first interior mesh line to the ghost cell
+ * locations in cext.  Then the reaction and diffusion terms are
+ * evaluated in terms of the cext array, and the residuals are formed.
+ * The reaction terms are saved separately in the vector webdata->rates
+ * for use by the preconditioner setup routine.                          
+ */
+
+static int reslocal(long int Nlocal, realtype tt, 
+                    N_Vector cc, N_Vector cp, N_Vector rr,
+                    void *user_data)
+{
+  realtype *cdata, *ratesxy, *cpxy, *resxy,
+    xx, yy, dcyli, dcyui, dcxli, dcxui;
+  int ix, jy, is, i, locc, ylocce, locce;
+  UserData webdata;
+  
+  webdata = (UserData) user_data;
+  
+  /* Get data pointers, subgrid data, array sizes, work array cext. */
+  
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Copy local segment of cc vector into the working extended array cext. */
+  
+  locc = 0;
+  locce = nsmxsub2 + NUM_SPECIES;
+  for (jy = 0; jy < mysub; jy++) {
+    for (i = 0; i < nsmxsub; i++) cext[locce+i] = cdata[locc+i];
+    locc = locc + nsmxsub;
+    locce = locce + nsmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+     a boundary PE, copy data from the first interior mesh line of cc to cext. */
+  
+  /* If jysub = 0, copy x-line 2 of cc to cext. */
+  if (jysub == 0)
+    { for (i = 0; i < nsmxsub; i++) cext[NUM_SPECIES+i] = cdata[nsmxsub+i]; }
+  
+  /* If jysub = npey-1, copy x-line mysub-1 of cc to cext. */
+  if (jysub == npey-1) {
+    locc = (mysub-2)*nsmxsub;
+    locce = (mysub+1)*nsmxsub2 + NUM_SPECIES;
+    for (i = 0; i < nsmxsub; i++) cext[locce+i] = cdata[locc+i];
+  }
+  
+  /* If ixsub = 0, copy y-line 2 of cc to cext. */
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc = jy*nsmxsub + NUM_SPECIES;
+      locce = (jy+1)*nsmxsub2;
+      for (i = 0; i < NUM_SPECIES; i++) cext[locce+i] = cdata[locc+i];
+    }
+  }
+  
+  /* If ixsub = npex-1, copy y-line mxsub-1 of cc to cext. */
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc  = (jy+1)*nsmxsub - 2*NUM_SPECIES;
+      locce = (jy+2)*nsmxsub2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++) cext[locce+i] = cdata[locc+i];
+    }
+  }
+
+  /* Loop over all grid points, setting local array rates to right-hand sides.
+     Then set rr values appropriately for prey/predator components of F. */
+
+  for (jy = 0; jy < mysub; jy++) {
+    ylocce = (jy+1)*nsmxsub2;
+    yy     = (jy+jysub*mysub)*dy;
+
+    for (ix = 0; ix < mxsub; ix++) {
+      locce = ylocce + (ix+1)*NUM_SPECIES;
+      xx = (ix + ixsub*mxsub)*dx;
+
+      ratesxy = IJ_Vptr(rates,ix,jy);
+      WebRates(xx, yy, &(cext[locce]), ratesxy, webdata);
+
+      resxy = IJ_Vptr(rr,ix,jy); 
+      cpxy = IJ_Vptr(cp,ix,jy); 
+      
+      for (is = 0; is < NUM_SPECIES; is++) {
+        dcyli = cext[locce+is]          - cext[locce+is-nsmxsub2];
+        dcyui = cext[locce+is+nsmxsub2] - cext[locce+is];
+
+        dcxli = cext[locce+is]             - cext[locce+is-NUM_SPECIES];
+        dcxui = cext[locce+is+NUM_SPECIES] - cext[locce+is];
+
+        rhs[is] = cox[is]*(dcxui-dcxli) + coy[is]*(dcyui-dcyli) + ratesxy[is];
+
+        if (is < np) resxy[is] = cpxy[is] - rhs[is];
+        else         resxy[is] =          - rhs[is];
+
+      }
+    }
+  }
+  
+  return(0);
+}
+
+/* 
+ * WebRates: Evaluate reaction rates at a given spatial point.   
+ * At a given (x,y), evaluate the array of ns reaction terms R.          
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+  
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+  
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(int size, realtype *x1, realtype *x2)
+{
+  int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; 
+  xx2 = x2;
+  for (i = 0; i < size; i++) 
+    temp += (*xx1++) * (*xx2++);
+
+  return(temp);
+}
+
diff --git a/examples/ida/parallel/idaFoodWeb_kry_bbd_p.out b/examples/ida/parallel/idaFoodWeb_kry_bbd_p.out
new file mode 100644
index 0000000..16b0f3c
--- /dev/null
+++ b/examples/ida/parallel/idaFoodWeb_kry_bbd_p.out
@@ -0,0 +1,58 @@
+
+idaFoodWeb_kry_bbd_p: Predator-prey DAE parallel example problem
+
+Number of species ns: 2
+Mesh dimensions:      20 x 20
+Total system size:    800
+Subgrid dimensions:   10 x 10
+Processor array:      2 x 2
+Tolerance parameters:
+ relative tolerance = 1e-05
+ absolute tolerance = 1e-05
+Linear solver: scaled preconditioned GMRES (IDASPGMR)
+ max. Krylov dimension: maxl = 16
+Preconditioner: band-block-diagonal (IDABBDPRE)
+ mudq = 20,  mldq = 20,  mukeep = 2,  mlkeep = 2
+CalcIC called to correct initial predator concentrations 
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  33  4   9.7404e-05
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6189e+02   1.9735e+02   | 123  3   1.9481e-04
+           1.6189e+06   1.9735e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 197  1   4.0396e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 200  1   3.2316e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 200  1   3.2316e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 201  1   6.4633e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+
+Final statistics: 
+
+Number of steps                    = 201
+Number of residual evaluations     = 1110
+Number of nonlinear iterations     = 245
+Number of error test failures      = 0
+Number of nonlinear conv. failures = 0
+
+Number of linear iterations        = 863
+Number of linear conv. failures    = 0
+
+Number of preconditioner setups    = 26
+Number of preconditioner solves    = 1110
+Number of local residual evals.    = 1092
diff --git a/examples/ida/parallel/idaFoodWeb_kry_p.c b/examples/ida/parallel/idaFoodWeb_kry_p.c
new file mode 100644
index 0000000..64a56f8
--- /dev/null
+++ b/examples/ida/parallel/idaFoodWeb_kry_p.c
@@ -0,0 +1,1231 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example program for IDA: Food web, parallel, GMRES, user
+ * preconditioner.
+ *
+ * This example program for IDA uses IDASPGMR as the linear solver.
+ * It is written for a parallel computer system and uses a
+ * block-diagonal preconditioner (setup and solve routines) for the
+ * IDASPGMR package. It was originally run on a Sun SPARC cluster
+ * and used MPICH.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c   +  c  )  +  R  (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *   a(i,i) = -AA  (all i)
+ *   a(i,j) = -GG  (i <= np , j >  np)
+ *   a(i,j) =  EE  (i >  np,  j <= np)
+ *   all other a(i,j) = 0
+ *   b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y))  (i <= np)
+ *   b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y))  (i  > np)
+ *   d(i) = DPREY  (i <= np)
+ *   d(i) = DPRED  (i > np)
+ *
+ * Note: The above equations are written in 1-based indices,
+ * whereas the code has 0-based indices, being written in C.
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative  =  0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh, and so the system size Neq is the product
+ * MX * MY * NUM_SPECIES. The system is actually implemented on
+ * submeshes, processor by processor, with an MXSUB by MYSUB mesh
+ * on each of NPEX * NPEY processors.
+ *
+ * The DAE system is solved by IDA using the IDASPGMR linear
+ * solver, which uses the preconditioned GMRES iterative method to
+ * solve linear systems. The precondtioner supplied to IDASPGMR is
+ * the block-diagonal part of the Jacobian with ns by ns blocks
+ * arising from the reaction terms only. Output is printed at
+ * t = 0, .001, .01, .1, .4, .7, 1.
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems,
+ *     Journal of Applied Mathematics and Computation, Vol. 31
+ *     (May 1989), pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_spgmr.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+/* Problem Constants. */
+
+#define NPREY       1        /* Number of prey (= number of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898)   /* pi */ 
+#define FOURPI      (RCONST(4.0)*PI)          /* 4 pi */
+
+#define MXSUB       10    /* Number of x mesh points per processor subgrid */
+#define MYSUB       10    /* Number of y mesh points per processor subgrid */
+#define NPEX        2     /* Number of subgrids in the x direction */
+#define NPEY        2     /* Number of subgrids in the y direction */
+#define MX          (MXSUB*NPEX)      /* MX = number of x mesh points */
+#define MY          (MYSUB*NPEY)      /* MY = number of y mesh points */
+#define NSMXSUB     (NUM_SPECIES * MXSUB)
+#define NEQ         (NUM_SPECIES*MX*MY) /* Number of equations in system */
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns. */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns. */
+#define AX          RCONST(1.0)    /* Total range of x variable */
+#define AY          RCONST(1.0)    /* Total range of y variable */
+#define RTOL        RCONST(1.e-5)  /*  rtol tolerance */
+#define ATOL        RCONST(1.e-5)  /*  atol tolerance */
+#define ZERO        RCONST(0.)     /* 0. */
+#define ONE         RCONST(1.0)    /* 1. */
+#define NOUT        6  
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values */
+#define TADD        RCONST(0.3)    /* Increment for tout values */
+
+
+/* User-defined vector accessor macro IJ_Vptr. */
+
+/* IJ_Vptr is defined in order to express the underlying 3-d structure of the 
+   dependent variable vector from its underlying 1-d storage (an N_Vector).
+   IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+   species index is = 0, x-index ix = i, and y-index jy = j.                */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_P(vv, (i)*NUM_SPECIES + (j)*NSMXSUB ))
+
+/* Type: UserData.  Contains problem constants, preconditioner data, etc. */
+
+typedef struct {
+  long int ns;
+  int np, thispe, npes, ixsub, jysub, npex, npey;
+  int mxsub, mysub, nsmxsub, nsmxsub2;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES],
+    rhs[NUM_SPECIES], cext[(MXSUB+2)*(MYSUB+2)*NUM_SPECIES];
+  MPI_Comm comm;
+  N_Vector rates;
+  realtype **PP[MXSUB][MYSUB];
+  long int *pivot[MXSUB][MYSUB];
+  N_Vector ewt;
+  void *ida_mem;
+} *UserData;
+
+
+/* Prototypes for user-supplied and supporting functions. */
+
+static int resweb(realtype time, 
+                  N_Vector cc, N_Vector cp, N_Vector resval, 
+                  void *user_data);
+
+static int Precondbd(realtype tt, 
+                     N_Vector cc, N_Vector cp, N_Vector rr, 
+                     realtype cj, void *user_data,
+                     N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+static int PSolvebd(realtype tt, 
+                    N_Vector cc, N_Vector cp, N_Vector rr, 
+                    N_Vector rvec, N_Vector zvec,
+                    realtype cj, realtype delta, void *user_data, 
+                    N_Vector tempv);
+
+static int rescomm(N_Vector cc, N_Vector cp, void *user_data);
+
+static void BSend(MPI_Comm comm, int thispe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype carray[]);
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[]);
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[]);
+
+static int reslocal(realtype tt, N_Vector cc, N_Vector cp, N_Vector res, 
+                    void *user_data);
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+
+static realtype dotprod(int size, realtype *x1, realtype *x2);
+
+/* Prototypes for private Helper Functions. */
+
+static UserData AllocUserData(MPI_Comm comm, long int local_N, 
+                              long int SystemSize);
+
+static void InitUserData(UserData webdata, int thispe, int npes, 
+                         MPI_Comm comm);
+
+static void FreeUserData(UserData webdata);
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               N_Vector scrtch, UserData webdata);
+
+static void PrintHeader(long int SystemSize, int maxl, 
+                        realtype rtol, realtype atol);
+
+static void PrintOutput(void *mem, N_Vector cc, realtype time,
+                        UserData webdata, MPI_Comm comm);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData webdata;
+  long int SystemSize, local_N;
+  realtype rtol, atol, t0, tout, tret;
+  N_Vector cc, cp, res, id;
+  int thispe, npes, maxl, iout, flag;
+
+  cc = cp = res = id = NULL;
+  webdata = NULL;
+  mem = NULL;
+
+  /* Set communicator, and get processor number and total number of PE's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_rank(comm, &thispe);
+  MPI_Comm_size(comm, &npes);
+
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d not equal to NPEX*NPEY = %d\n",
+	      npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1); 
+  }
+
+  /* Set local length (local_N) and global length (SystemSize). */
+
+  local_N = MXSUB*MYSUB*NUM_SPECIES;
+  SystemSize = NEQ;
+
+  /* Set up user data block webdata. */
+
+  webdata = AllocUserData(comm, local_N, SystemSize);
+  if (check_flag((void *)webdata, "AllocUserData", 0, thispe)) MPI_Abort(comm, 1);
+
+  InitUserData(webdata, thispe, npes, comm);
+  
+  /* Create needed vectors, and load initial values.
+     The vector res is used temporarily only.        */
+
+  cc  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if (check_flag((void *)cc, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  cp  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if (check_flag((void *)cp, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  res = N_VNew_Parallel(comm, local_N, SystemSize);
+  if (check_flag((void *)res, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  id  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if (check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+  
+  SetInitialProfiles(cc, cp, id, res, webdata);
+  
+  N_VDestroy(res);
+
+  /* Set remaining inputs to IDAMalloc. */
+
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+  
+  /* Call IDACreate and IDAMalloc to initialize IDA.
+     A pointer to IDA problem memory is returned and stored in idamem. */
+
+  mem = IDACreate();
+  if (check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  flag = IDASetUserData(mem, webdata);
+  if (check_flag(&flag, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  flag = IDASetId(mem, id);
+  if (check_flag(&flag, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  flag = IDAInit(mem, resweb, t0, cc, cp);
+  if (check_flag(&flag, "IDAinit", 1, thispe)) MPI_Abort(comm, 1);
+
+  flag = IDASStolerances(mem, rtol, atol);
+  if (check_flag(&flag, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  webdata->ida_mem = mem;
+
+  /* Call IDASpgmr to specify the IDA linear solver IDASPGMR and specify
+     the preconditioner routines supplied (Precondbd and PSolvebd).
+     maxl (max. Krylov subspace dim.) is set to 16. */
+
+  maxl = 16;
+  flag = IDASpgmr(mem, maxl);
+  if (check_flag(&flag, "IDASpgmr", 1, thispe)) 
+    MPI_Abort(comm, 1);
+
+  flag = IDASpilsSetPreconditioner(mem, Precondbd, PSolvebd);
+  if (check_flag(&flag, "IDASpilsSetPreconditioner", 1, thispe)) 
+    MPI_Abort(comm, 1);
+  
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+
+  tout = RCONST(0.001);
+  flag = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if (check_flag(&flag, "IDACalcIC", 1, thispe)) 
+    MPI_Abort(comm, 1);
+
+  /* On PE 0, print heading, basic parameters, initial values. */
+
+  if (thispe == 0) PrintHeader(SystemSize, maxl, rtol, atol);
+  PrintOutput(mem, cc, t0, webdata, comm);
+  
+  /* Loop over iout, call IDASolve (normal mode), print selected output. */
+
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    flag = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if (check_flag(&flag, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(mem, cc, tret, webdata, comm);
+    
+    if (iout < 3) tout *= TMULT; 
+    else          tout += TADD;
+    
+  }
+  
+  /* On PE 0, print final set of statistics. */
+  if (thispe == 0) PrintFinalStats(mem);
+
+  /* Free memory. */
+
+  N_VDestroy_Parallel(cc);
+  N_VDestroy_Parallel(cp);
+  N_VDestroy_Parallel(id);
+
+  IDAFree(&mem);
+
+  FreeUserData(webdata);
+
+  MPI_Finalize();
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * AllocUserData: Allocate memory for data structure of type UserData.   
+ */
+
+static UserData AllocUserData(MPI_Comm comm, long int local_N, long int SystemSize)
+{
+  int ix, jy;
+  UserData webdata;
+  
+  webdata = (UserData) malloc(sizeof *webdata);
+  
+  webdata->rates = N_VNew_Parallel(comm, local_N, SystemSize);
+  
+  for (ix = 0; ix < MXSUB; ix++) {
+    for (jy = 0; jy < MYSUB; jy++) {
+      (webdata->PP)[ix][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (webdata->pivot)[ix][jy] = newLintArray(NUM_SPECIES);
+    }
+  }
+  
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  webdata->ewt = N_VNew_Parallel(comm, local_N, SystemSize);
+  return(webdata);
+  
+}
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata, int thispe, int npes, 
+                         MPI_Comm comm)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2, **acoef, *bcoef, *cox, *coy;
+  
+  webdata->jysub = thispe / NPEX;
+  webdata->ixsub = thispe - (webdata->jysub)*NPEX;
+  webdata->mxsub = MXSUB;
+  webdata->mysub = MYSUB;
+  webdata->npex = NPEX;
+  webdata->npey = NPEY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->thispe = thispe;
+  webdata->npes   = npes;
+  webdata->nsmxsub = MXSUB * NUM_SPECIES;
+  webdata->nsmxsub2 = (MXSUB+2)*NUM_SPECIES;
+  webdata->comm = comm;
+
+  /* Set up the coefficients a and b plus others found in the equations. */
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); dy2 = (webdata->dy)*(webdata->dy);
+
+  acoef = webdata->acoef;
+  bcoef = webdata->bcoef;
+  cox = webdata->cox;
+  coy = webdata->coy;
+
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+
+}
+
+/*
+ * FreeUserData: Free webdata memory.                                    
+ */
+
+static void FreeUserData(UserData webdata)
+{
+  int ix, jy;
+
+  for (ix = 0; ix < MXSUB; ix++) {
+    for (jy = 0; jy < MYSUB; jy++) {
+      destroyMat((webdata->PP)[ix][jy]);
+      destroyArray((webdata->pivot)[ix][jy]);
+    }
+  }
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_Parallel(webdata->rates);
+  N_VDestroy_Parallel(webdata->ewt);
+  free(webdata);
+
+}
+
+/*
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               N_Vector res, UserData webdata)
+{
+  int ixsub, jysub, mxsub, mysub, nsmxsub, np, ix, jy, is;
+  realtype *cxy, *idxy, *cpxy, dx, dy, xx, yy, xyfactor;
+  
+  ixsub = webdata->ixsub;
+  jysub = webdata->jysub;
+  mxsub = webdata->mxsub;
+  mysub = webdata->mxsub;
+  nsmxsub = webdata->nsmxsub;
+  dx = webdata->dx;
+  dy = webdata->dy;
+  np = webdata->np;
+  
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < mysub; jy++) {
+    yy = (jy + jysub*mysub) * dy;
+    for (ix = 0; ix < mxsub; ix++) {
+      xx = (ix + ixsub*mxsub) * dx;
+      xyfactor = RCONST(16.0)*xx*(ONE - xx)*yy*(ONE - yy);
+      xyfactor *= xyfactor;
+      
+      cxy = IJ_Vptr(cc,ix,jy); 
+      idxy = IJ_Vptr(id,ix,jy); 
+      for (is = 0; is < NUM_SPECIES; is++) {
+	if (is < np) { cxy[is] = RCONST(10.0) + (realtype)(is+1)*xyfactor; idxy[is] = ONE; }
+        else { cxy[is] = 1.0e5; idxy[is] = ZERO; }
+      }
+    }
+  }
+  
+  /* Set c' for the prey by calling the residual function with cp = 0. */
+  N_VConst(ZERO, cp);
+  resweb(ZERO, cc, cp, res, webdata);
+  N_VScale(-ONE, res, cp);
+  
+  /* Set c' for predators to 0. */
+  for (jy = 0; jy < mysub; jy++) {
+    for (ix = 0; ix < mxsub; ix++) {
+      cpxy = IJ_Vptr(cp,ix,jy); 
+      for (is = np; is < NUM_SPECIES; is++) cpxy[is] = ZERO;
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(long int SystemSize, int maxl, 
+                        realtype rtol, realtype atol)
+{
+  printf("\nidaFoodWeb_kry_p: Predator-prey DAE parallel example problem for IDA \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     Total system size: %ld\n",SystemSize);
+  printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+  printf("     Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDASPGMR     Max. Krylov dimension maxl: %d\n", maxl);
+  printf("Preconditioner: block diagonal, block size ns,"); 
+  printf(" via difference quotients\n");
+  printf("CalcIC called to correct initial predator concentrations \n\n");
+
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");    
+}
+
+/*
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of c1 and c2
+ * are printed for the bottom left and top right grid points only.
+ * (NOTE: This routine is specific to the case NUM_SPECIES = 2.)         
+ */
+
+static void PrintOutput(void *mem, N_Vector cc, realtype tt,
+                        UserData webdata, MPI_Comm comm)
+{
+  MPI_Status status;
+  realtype *cdata, clast[2], hused;
+  long int nst;
+  int i, kused, flag, thispe, npelast, ilast;;
+
+  thispe = webdata->thispe; 
+  npelast = webdata->npes - 1;
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Send conc. at top right mesh point from PE npes-1 to PE 0. */
+  if (thispe == npelast) {
+    ilast = NUM_SPECIES*MXSUB*MYSUB - 2;
+    if (npelast != 0)
+      MPI_Send(&cdata[ilast], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else { clast[0] = cdata[ilast]; clast[1] = cdata[ilast+1]; }
+  }
+  
+  /* On PE 0, receive conc. at top right from PE npes - 1.
+     Then print performance data and sampled solution values. */
+  
+  if (thispe == 0) {
+    
+    if (npelast != 0)
+      MPI_Recv(&clast[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    
+    flag = IDAGetLastOrder(mem, &kused);
+    check_flag(&flag, "IDAGetLastOrder", 1, thispe);
+    flag = IDAGetNumSteps(mem, &nst);
+    check_flag(&flag, "IDAGetNumSteps", 1, thispe);
+    flag = IDAGetLastStep(mem, &hused);
+    check_flag(&flag, "IDAGetLastStep", 1, thispe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4Le %12.4Le   |\n",cdata[i],clast[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#else
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#endif
+    printf("\n");
+
+  }
+}
+
+/*
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int nst, nre, nreLS, netf, ncfn, nni, ncfl, nli, npe, nps;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1, 0);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1, 0);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1, 0);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1, 0);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1, 0);
+
+  flag = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&flag, "IDASpilsGetNumConvFails", 1, 0);
+  flag = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&flag, "IDASpilsGetNumLinIters", 1, 0);
+  flag = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&flag, "IDASpilsGetNumPrecEvals", 1, 0);
+  flag = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&flag, "IDASpilsGetNumPrecSolves", 1, 0);
+  flag = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDASpilsGetNumResEvals", 1, 0);
+
+  printf("-----------------------------------------------------------\n");
+  printf("\nFinal statistics: \n\n");
+
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n\n", ncfn);
+
+  printf("Number of linear iterations        = %ld\n", nli);
+  printf("Number of linear conv. failures    = %ld\n\n", ncfl);
+
+  printf("Number of preconditioner setups    = %ld\n", npe);
+  printf("Number of preconditioner solves    = %ld\n", nps);
+
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", 
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA & SUPPORTING FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resweb: System residual function for predator-prey system.
+ * To compute the residual function F, this routine calls:
+ *    rescomm, for needed communication, and then
+ *    reslocal, for computation of the residuals on this processor.      
+ */
+
+static int resweb(realtype tt, N_Vector cc, N_Vector cp, 
+                  N_Vector res,  void *user_data)
+{
+  int flag;
+  UserData webdata;
+  
+  webdata = (UserData)user_data;
+  
+  /* Call rescomm to do inter-processor communication. */
+  flag = rescomm(cc, cp, webdata);
+  
+  /* Call reslocal to calculate the local portion of residual vector. */
+  flag = reslocal(tt, cc, cp, res, webdata);
+
+  return(0);
+ 
+}
+
+/*
+ * rescomm: Communication routine in support of resweb.
+ * This routine performs all inter-processor communication of components
+ * of the cc vector needed to calculate F, namely the components at all
+ * interior subgrid boundaries (ghost cell data).  It loads this data
+ * into a work array cext (the local portion of c, extended).
+ * The message-passing uses blocking sends, non-blocking receives,
+ * and receive-waiting, in routines BRecvPost, BSend, BRecvWait.         
+ */
+
+static int rescomm(N_Vector cc, N_Vector cp, void *user_data)
+{
+
+  UserData webdata;
+  realtype *cdata, *cext, buffer[2*NUM_SPECIES*MYSUB];
+  int thispe, ixsub, jysub, nsmxsub, nsmysub;
+  MPI_Comm comm;
+  MPI_Request request[4];
+  
+  webdata = (UserData) user_data;
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Get comm, thispe, subgrid indices, data sizes, extended array cext. */
+  comm = webdata->comm;     thispe = webdata->thispe;
+  ixsub = webdata->ixsub;   jysub = webdata->jysub;
+  cext = webdata->cext;
+  nsmxsub = webdata->nsmxsub; nsmysub = (webdata->ns)*(webdata->mysub);
+  
+  /* Start receiving boundary data from neighboring PEs. */
+  BRecvPost(comm, request, thispe, ixsub, jysub, nsmxsub, nsmysub, 
+            cext, buffer);
+  
+  /* Send data from boundary of local grid to neighboring PEs. */
+  BSend(comm, thispe, ixsub, jysub, nsmxsub, nsmysub, cdata);
+  
+  /* Finish receiving boundary data from neighboring PEs. */
+  BRecvWait(request, ixsub, jysub, nsmxsub, cext, buffer);
+
+  return(0);
+
+}
+
+/*
+ * BSend: Send boundary data to neighboring PEs.
+ * This routine sends components of cc from internal subgrid boundaries
+ * to the appropriate neighbor PEs.                                      
+ */
+ 
+static void BSend(MPI_Comm comm, int my_pe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype cdata[])
+{
+  int i;
+  int ly, offsetc, offsetbuf;
+  realtype bufleft[NUM_SPECIES*MYSUB], bufright[NUM_SPECIES*MYSUB];
+  
+  /* If jysub > 0, send data from bottom x-line of cc. */
+  if (jysub != 0)
+    MPI_Send(&cdata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+  
+  /* If jysub < NPEY-1, send data from top x-line of cc. */
+  if (jysub != NPEY-1) {
+    offsetc = (MYSUB-1)*dsizex;
+    MPI_Send(&cdata[offsetc], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If ixsub > 0, send data from left y-line of cc (via bufleft). */
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = ly*dsizex;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufleft[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If ixsub < NPEX-1, send data from right y-line of cc (via bufright). */
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = offsetbuf*MXSUB + (MXSUB-1)*NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufright[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+
+}
+
+/*
+ * BRecvPost: Start receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls.  
+ */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[])
+{
+  int offsetce;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Irecv(&cext[NUM_SPECIES], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1) {
+    offsetce = NUM_SPECIES*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&cext[offsetce], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe+1, 0, comm, &request[3]);
+  }
+  
+}
+
+/*
+ * BRecvWait: Finish receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls.  
+ */
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[])
+{
+  int i;
+  int ly, dsizex2, offsetce, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  MPI_Status status;
+
+  dsizex2 = dsizex + 2*NUM_SPECIES;
+
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+1)*dsizex2;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufleft[offsetbuf+i];
+    }
+  }
+
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+    
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+2)*dsizex2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/* Define lines are for ease of readability in the following functions. */
+
+#define mxsub      (webdata->mxsub)
+#define mysub      (webdata->mysub)
+#define npex       (webdata->npex)
+#define npey       (webdata->npey)
+#define ixsub      (webdata->ixsub)
+#define jysub      (webdata->jysub)
+#define nsmxsub    (webdata->nsmxsub)
+#define nsmxsub2   (webdata->nsmxsub2)
+#define np         (webdata->np)
+#define dx         (webdata->dx)
+#define dy         (webdata->dy)
+#define cox        (webdata->cox)
+#define coy        (webdata->coy)
+#define rhs        (webdata->rhs)
+#define cext       (webdata->cext)
+#define rates      (webdata->rates)
+#define ns         (webdata->ns)
+#define acoef      (webdata->acoef)
+#define bcoef      (webdata->bcoef)
+
+/* 
+ * reslocal: Compute res = F(t,cc,cp).
+ * This routine assumes that all inter-processor communication of data
+ * needed to calculate F has already been done.  Components at interior
+ * subgrid boundaries are assumed to be in the work array cext.
+ * The local portion of the cc vector is first copied into cext.
+ * The exterior Neumann boundary conditions are explicitly handled here
+ * by copying data from the first interior mesh line to the ghost cell
+ * locations in cext.  Then the reaction and diffusion terms are
+ * evaluated in terms of the cext array, and the residuals are formed.
+ * The reaction terms are saved separately in the vector webdata->rates
+ * for use by the preconditioner setup routine.                          
+ */
+
+static int reslocal(realtype tt, N_Vector cc, N_Vector cp, N_Vector res,
+                    void *user_data)
+{
+  realtype *cdata, *ratesxy, *cpxy, *resxy,
+    xx, yy, dcyli, dcyui, dcxli, dcxui;
+  int ix, jy, is, i, locc, ylocce, locce;
+  UserData webdata;
+  
+  webdata = (UserData) user_data;
+  
+  /* Get data pointers, subgrid data, array sizes, work array cext. */
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Copy local segment of cc vector into the working extended array cext. */
+  locc = 0;
+  locce = nsmxsub2 + NUM_SPECIES;
+  for (jy = 0; jy < mysub; jy++) {
+    for (i = 0; i < nsmxsub; i++) cext[locce+i] = cdata[locc+i];
+    locc = locc + nsmxsub;
+    locce = locce + nsmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+  a boundary PE, copy data from the first interior mesh line of cc to cext. */
+
+  /* If jysub = 0, copy x-line 2 of cc to cext. */
+  if (jysub == 0)
+    { for (i = 0; i < nsmxsub; i++) cext[NUM_SPECIES+i] = cdata[nsmxsub+i]; }
+  
+  /* If jysub = npey-1, copy x-line mysub-1 of cc to cext. */
+  if (jysub == npey-1) {
+    locc = (mysub-2)*nsmxsub;
+    locce = (mysub+1)*nsmxsub2 + NUM_SPECIES;
+    for (i = 0; i < nsmxsub; i++) cext[locce+i] = cdata[locc+i];
+  }
+  
+  /* If ixsub = 0, copy y-line 2 of cc to cext. */
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc = jy*nsmxsub + NUM_SPECIES;
+      locce = (jy+1)*nsmxsub2;
+      for (i = 0; i < NUM_SPECIES; i++) cext[locce+i] = cdata[locc+i];
+    }
+  }
+  
+  /* If ixsub = npex-1, copy y-line mxsub-1 of cc to cext. */
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc  = (jy+1)*nsmxsub - 2*NUM_SPECIES;
+      locce = (jy+2)*nsmxsub2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++) cext[locce+i] = cdata[locc+i];
+    }
+  }
+
+  /* Loop over all grid points, setting local array rates to right-hand sides.
+     Then set res values appropriately for prey/predator components of F. */
+  for (jy = 0; jy < mysub; jy++) {
+    ylocce = (jy+1)*nsmxsub2;
+    yy     = (jy+jysub*mysub)*dy;
+
+    for (ix = 0; ix < mxsub; ix++) {
+      locce = ylocce + (ix+1)*NUM_SPECIES;
+      xx = (ix + ixsub*mxsub)*dx;
+      
+      ratesxy = IJ_Vptr(rates,ix,jy);
+      WebRates(xx, yy, &(cext[locce]), ratesxy, webdata);
+
+      resxy = IJ_Vptr(res,ix,jy); 
+      cpxy = IJ_Vptr(cp,ix,jy); 
+      
+      for (is = 0; is < NUM_SPECIES; is++) {
+        dcyli = cext[locce+is]          - cext[locce+is-nsmxsub2];
+        dcyui = cext[locce+is+nsmxsub2] - cext[locce+is];
+        
+        dcxli = cext[locce+is]             - cext[locce+is-NUM_SPECIES];
+        dcxui = cext[locce+is+NUM_SPECIES] - cext[locce+is];
+        
+        rhs[is] = cox[is]*(dcxui-dcxli) + coy[is]*(dcyui-dcyli) + ratesxy[is];
+
+        if (is < np) resxy[is] = cpxy[is] - rhs[is];
+        else         resxy[is] =          - rhs[is];
+        
+      } /* End of is (species) loop. */
+    } /* End of ix loop. */
+  } /* End of jy loop. */
+  
+  return(0);
+  
+}
+
+/*
+ * WebRates: Evaluate reaction rates at a given spatial point.
+ * At a given (x,y), evaluate the array of ns reaction terms R. 
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(int size, realtype *x1, realtype *x2)
+{
+  int i;
+  realtype *xx1, *xx2, temp = ZERO;
+
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+  return(temp);
+
+}
+
+/*
+ * Preconbd: Preconditioner setup routine.
+ * This routine generates and preprocesses the block-diagonal
+ * preconditoner PP.  At each spatial point, a block of PP is computed
+ * by way of difference quotients on the reaction rates R.
+ * The base value of R are taken from webdata->rates, as set by webres.
+ * Each block is LU-factored, for later solution of the linear systems.  
+ */
+
+static int Precondbd(realtype tt, N_Vector cc,
+                     N_Vector cp, N_Vector rr, 
+                     realtype cj, void *user_data,
+                     N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  int flag, thispe;
+  realtype uround;
+  realtype xx, yy, *cxy, *ewtxy, cctemp, **Pxy, *ratesxy, *Pxycol, *cpxy;
+  realtype inc, sqru, fac, perturb_rates[NUM_SPECIES];
+  int is, js, ix, jy, ret;
+  UserData webdata;
+  void *mem;
+  N_Vector ewt;
+  realtype hh;
+
+  webdata = (UserData)user_data;
+  uround = UNIT_ROUNDOFF;
+  sqru = SUNRsqrt(uround);
+  thispe = webdata->thispe;
+
+  mem = webdata->ida_mem;
+  ewt = webdata->ewt;
+  flag = IDAGetErrWeights(mem, ewt);
+  check_flag(&flag, "IDAGetErrWeights", 1, thispe);
+  flag = IDAGetCurrentStep(mem, &hh);
+  check_flag(&flag, "IDAGetCurrentStep", 1, thispe);
+
+  for (jy = 0; jy < mysub; jy++) {
+    yy = (jy + jysub*mysub)*dy;
+
+    for (ix = 0; ix < mxsub; ix++) {
+      xx = (ix+ ixsub*mxsub)*dx;
+      Pxy = (webdata->PP)[ix][jy];
+      cxy = IJ_Vptr(cc,ix,jy); 
+      cpxy = IJ_Vptr(cp,ix,jy); 
+      ewtxy= IJ_Vptr(ewt,ix,jy);
+      ratesxy = IJ_Vptr(rates,ix,jy);
+
+      for (js = 0; js < ns; js++) {
+        inc = sqru*(SUNMAX(SUNRabs(cxy[js]), SUNMAX(hh*SUNRabs(cpxy[js]), ONE/ewtxy[js])));
+        cctemp = cxy[js];  /* Save the (js,ix,jy) element of cc. */
+        cxy[js] += inc;    /* Perturb the (js,ix,jy) element of cc. */
+        fac = -ONE/inc;
+        
+        WebRates(xx, yy, cxy, perturb_rates, webdata);
+        
+        Pxycol = Pxy[js];
+
+        for (is = 0; is < ns; is++)
+          Pxycol[is] = (perturb_rates[is] - ratesxy[is])*fac;
+        
+        if (js < np) Pxycol[js] += cj; /* Add partial with respect to cp. */
+        
+        cxy[js] = cctemp; /* Restore (js,ix,jy) element of cc. */
+        
+      } /* End of js loop. */
+      
+      /* Do LU decomposition of matrix block for grid point (ix,jy). */
+      ret = denseGETRF(Pxy, ns, ns, (webdata->pivot)[ix][jy]);
+      
+      if (ret != 0) return(1);
+      
+    } /* End of ix loop. */
+  } /* End of jy loop. */
+  
+  return(0);
+
+}
+
+/*
+ * PSolvebd: Preconditioner solve routine.
+ * This routine applies the LU factorization of the blocks of the
+ * preconditioner PP, to compute the solution of PP * zvec = rvec.       
+ */
+
+static int PSolvebd(realtype tt, N_Vector cc,
+                 N_Vector cp, N_Vector rr, 
+                 N_Vector rvec, N_Vector zvec,
+                 realtype cj, realtype delta,
+                 void *user_data, N_Vector tempv)
+{
+  realtype **Pxy, *zxy;
+  long int *pivot, ix, jy;
+  UserData webdata;
+
+  webdata = (UserData)user_data;
+  
+  N_VScale(ONE, rvec, zvec);
+  
+  /* Loop through subgrid and apply preconditioner factors at each point. */
+  for (ix = 0; ix < mxsub; ix++) {
+    for (jy = 0; jy < mysub; jy++) {
+
+      /* For grid point (ix,jy), do backsolve on local vector. 
+         zxy is the address of the local portion of zvec, and
+         Pxy is the address of the corresponding block of PP.  */
+      zxy = IJ_Vptr(zvec,ix,jy);
+      Pxy = (webdata->PP)[ix][jy];
+      pivot = (webdata->pivot)[ix][jy];
+      denseGETRS(Pxy, ns, pivot, zxy);
+      
+    } /* End of jy loop. */
+  } /* End of ix loop. */
+  
+  return(0);
+  
+}
diff --git a/examples/ida/parallel/idaFoodWeb_kry_p.out b/examples/ida/parallel/idaFoodWeb_kry_p.out
new file mode 100644
index 0000000..ee07f6f
--- /dev/null
+++ b/examples/ida/parallel/idaFoodWeb_kry_p.out
@@ -0,0 +1,50 @@
+
+idaFoodWeb_kry_p: Predator-prey DAE parallel example problem for IDA 
+
+Number of species ns: 2     Mesh dimensions: 20 x 20     Total system size: 800
+Subgrid dimensions: 10 x 10     Processor array: 2 x 2
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDASPGMR     Max. Krylov dimension maxl: 16
+Preconditioner: block diagonal, block size ns, via difference quotients
+CalcIC called to correct initial predator concentrations 
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  33  4   9.7404e-05
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6189e+02   1.9735e+02   |  86  4   1.7533e-04
+           1.6189e+06   1.9735e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 162  1   4.0396e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 165  1   3.2316e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 166  1   6.4633e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 166  1   6.4633e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+
+Final statistics: 
+
+Number of steps                    = 166
+Number of residual evaluations     = 1257
+Number of nonlinear iterations     = 206
+Number of error test failures      = 0
+Number of nonlinear conv. failures = 0
+
+Number of linear iterations        = 1049
+Number of linear conv. failures    = 0
+
+Number of preconditioner setups    = 25
+Number of preconditioner solves    = 1257
diff --git a/examples/ida/parallel/idaHeat2D_kry_bbd_p.c b/examples/ida/parallel/idaHeat2D_kry_bbd_p.c
new file mode 100644
index 0000000..36402f3
--- /dev/null
+++ b/examples/ida/parallel/idaHeat2D_kry_bbd_p.c
@@ -0,0 +1,840 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for IDA: 2D heat equation, parallel, GMRES,
+ * IDABBDPRE.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version uses the Krylov solver IDASpgmr and BBD
+ * preconditioning.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y). The
+ * PDE is treated with central differences on a uniform MX x MY
+ * grid. The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = MX * MY. Here MX = MY = 10.
+ *
+ * The system is actually implemented on submeshes, processor by
+ * processor, with an MXSUB by MYSUB mesh on each of NPEX * NPEY
+ * processors.
+ *
+ * The system is solved with IDA using the Krylov linear solver
+ * IDASPGMR in conjunction with the preconditioner module IDABBDPRE.
+ * The preconditioner uses a tridiagonal approximation
+ * (half-bandwidths = 1). The constraints u >= 0 are posed for all
+ * components. Local error testing on the boundary values is
+ * suppressed. Output is taken at t = 0, .01, .02, .04, ..., 10.24.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_spgmr.h>
+#include <ida/ida_bbdpre.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+#define NOUT         11             /* Number of output times */
+
+#define NPEX         2              /* No. PEs in x direction of PE array */
+#define NPEY         2              /* No. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* No. x points per subgrid */
+#define MYSUB        5              /* No. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+
+typedef struct {  
+  int thispe, mx, my, ixsub, jysub, npex, npey, mxsub, mysub;
+  long int n_local;
+  realtype dx, dy, coeffx, coeffy, coeffxy;
+  realtype uext[(MXSUB+2)*(MYSUB+2)];
+  MPI_Comm comm;
+} *UserData;
+
+/* Prototypes of user-supplied and supporting functions */
+
+static int heatres(realtype tres, 
+                   N_Vector uu, N_Vector up, N_Vector res, 
+                   void *user_data);
+
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector uu, N_Vector up, 
+                   void *user_data);
+
+static int reslocal(long int Nlocal, realtype tres, 
+                    N_Vector uu, N_Vector up, N_Vector res,  
+                    void *user_data);
+
+static int BSend(MPI_Comm comm, int thispe, int ixsub,
+                 int jysub, int dsizex, int dsizey,
+                 realtype uarray[]);
+
+static int BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                     int ixsub, int jysub,
+                     int dsizex, int dsizey,
+                     realtype uext[], realtype buffer[]);
+
+static int BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                     int dsizex, realtype uext[], realtype buffer[]);
+
+/* Prototypes of private functions */
+
+static int InitUserData(int thispe, MPI_Comm comm, UserData data);
+
+static int SetInitialProfile(N_Vector uu, N_Vector up, N_Vector id,
+                             N_Vector res, UserData data);
+
+static void PrintHeader(long int Neq, realtype rtol, realtype atol);
+
+static void PrintCase(int case_number, int mudq, int mukeep);
+
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData data;
+  int thispe, iout, ier, npes;
+  long int Neq, local_N, mudq, mldq, mukeep, mlkeep;
+  realtype rtol, atol, t0, t1, tout, tret;
+  N_Vector uu, up, constraints, id, res;
+
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = id = res = NULL;
+
+  /* Get processor number and total number of pe's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &thispe);
+  
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n", 
+              npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+  
+  /* Set local length local_N and global length Neq. */
+
+  local_N = MXSUB*MYSUB;
+  Neq     = MX * MY;
+
+  /* Allocate N-vectors. */
+
+  uu = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)uu, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  up = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)up, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  res = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)res, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  constraints = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)constraints, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  id = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  /* Allocate and initialize the data structure. */
+
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2, thispe)) MPI_Abort(comm, 1);
+
+  InitUserData(thispe, comm, data);
+
+  /* Initialize the uu, up, id, and constraints profiles. */
+
+  SetInitialProfile(uu, up, id, res, data);
+  N_VConst(ONE, constraints);
+
+  t0 = ZERO; t1 = RCONST(0.01);
+
+  /* Scalar relative and absolute tolerance. */
+
+  rtol = ZERO;
+  atol = RCONST(1.0e-3);
+
+  /* Call IDACreate and IDAMalloc to initialize solution */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetSuppressAlg(mem, TRUE);
+  if(check_flag(&ier, "IDASetSuppressAlg", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetId(mem, id);
+  if(check_flag(&ier, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1, thispe)) MPI_Abort(comm, 1);
+  N_VDestroy_Parallel(constraints);
+
+  ier = IDAInit(mem, heatres, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  mudq = MXSUB;
+  mldq = MXSUB;
+  mukeep = 1;
+  mlkeep = 1;
+
+  /* Print problem description */
+
+  if (thispe == 0 ) PrintHeader(Neq, rtol, atol);
+  
+  /* 
+   * ----------------------------- 
+   * Case 1 -- mldq = mudq = MXSUB 
+   * ----------------------------- 
+   */
+
+  /* Call IDASpgmr to specify the linear solver. */
+  ier = IDASpgmr(mem, 0);
+  if(check_flag(&ier, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+  
+  /* Call IDABBDPrecInit to initialize BBD preconditioner. */
+  ier = IDABBDPrecInit(mem, local_N, mudq, mldq, mukeep, mlkeep, 
+                       ZERO, reslocal, NULL);
+  if(check_flag(&ier, "IDABBDPrecAlloc", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Print output heading (on processor 0 only) and initial solution. */
+  if (thispe == 0) PrintCase(1, mudq, mukeep);
+
+  /* Loop over tout, call IDASolve, print output. */
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) { 
+    
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(thispe, mem, tret, uu);
+    
+  }
+
+  /* Print final statistics */
+  if (thispe == 0) PrintFinalStats(mem);
+  
+  /*
+   * ----------------------------- 
+   * Case 2 -- mldq = mudq = 1
+   * ----------------------------- 
+   */
+  
+  mudq = 1;
+  mldq = 1;
+
+  /* Re-initialize the uu and up profiles. */
+  SetInitialProfile(uu, up, id, res, data);
+
+  /* Call IDAReInit to re-initialize IDA. */
+  ier = IDAReInit(mem, t0, uu, up);
+  if(check_flag(&ier, "IDAReInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDABBDPrecReInit to re-initialize BBD preconditioner. */
+  ier = IDABBDPrecReInit(mem, mudq, mldq, ZERO);
+  if(check_flag(&ier, "IDABBDPrecReInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Print output heading (on processor 0 only). */
+  if (thispe == 0) PrintCase(2, mudq, mukeep);
+
+  /* Loop over tout, call IDASolve, print output. */
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) { 
+    
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(thispe, mem, tret, uu);
+    
+  }
+  
+  /* Print final statistics */
+  if (thispe == 0) PrintFinalStats(mem);
+
+  /* Free Memory */
+  IDAFree(&mem);
+  free(data);
+  N_VDestroy_Parallel(id);
+  N_VDestroy_Parallel(res);
+  N_VDestroy_Parallel(up);
+  N_VDestroy_Parallel(uu);
+
+  MPI_Finalize();
+
+  return(0);
+
+}
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * heatres: heat equation system residual function                       
+ * This uses 5-point central differencing on the interior points, and    
+ * includes algebraic equations for the boundary values.                 
+ * So for each interior point, the residual component has the form       
+ *    res_i = u'_i - (central difference)_i                              
+ * while for each boundary point, it is res_i = u_i. 
+ *                    
+ * This parallel implementation uses several supporting routines. 
+ * First a call is made to rescomm to do communication of subgrid boundary
+ * data into array uext.  Then reslocal is called to compute the residual
+ * on individual processors and their corresponding domains.  The routines
+ * BSend, BRecvPost, and BREcvWait handle interprocessor communication
+ * of uu required to calculate the residual. 
+ */
+
+static int heatres(realtype tres, N_Vector uu, N_Vector up, 
+                   N_Vector res, void *user_data)
+{
+  int retval;
+  UserData data;
+  long int Nlocal;
+  
+  data = (UserData) user_data;
+  
+  Nlocal = data->n_local;
+
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(Nlocal, tres, uu, up, data);
+  
+  /* Call reslocal to calculate res. */
+  retval = reslocal(Nlocal, tres, uu, up, res, data);
+  
+  return(0);
+  
+}
+
+/* 
+ * rescomm routine.  This routine performs all inter-processor
+ * communication of data in u needed to calculate G.                 
+ */
+
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector uu, N_Vector up, void *user_data)
+{
+  UserData data;
+  realtype *uarray, *uext, buffer[2*MYSUB];
+  MPI_Comm comm;
+  int thispe, ixsub, jysub, mxsub, mysub;
+  MPI_Request request[4];
+
+  data = (UserData) user_data;
+  uarray = N_VGetArrayPointer_Parallel(uu);
+
+  /* Get comm, thispe, subgrid indices, data sizes, extended array uext. */
+  comm = data->comm;  thispe = data->thispe;
+  ixsub = data->ixsub;   jysub = data->jysub;
+  mxsub = data->mxsub;   mysub = data->mysub;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs. */
+  BRecvPost(comm, request, thispe, ixsub, jysub, mxsub, mysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs. */
+  BSend(comm, thispe, ixsub, jysub, mxsub, mysub, uarray);
+
+  /* Finish receiving boundary data from neighboring PEs. */
+  BRecvWait(request, ixsub, jysub, mxsub, uext, buffer);
+
+  return(0);
+
+}
+
+/*
+ * reslocal routine.  Compute res = F(t, uu, up).  This routine assumes
+ * that all inter-processor communication of data needed to calculate F
+ *  has already been done, and that this data is in the work array uext.  
+ */
+
+static int reslocal(long int Nlocal, realtype tres, 
+                    N_Vector uu, N_Vector up, N_Vector res,  
+                    void *user_data)
+{
+  realtype *uext, *uuv, *upv, *resv;
+  realtype termx, termy, termctr;
+  int lx, ly, offsetu, offsetue, locu, locue;
+  int ixsub, jysub, mxsub, mxsub2, mysub, npex, npey;
+  int ixbegin, ixend, jybegin, jyend;
+  UserData data;
+
+  /* Get subgrid indices, array sizes, extended work array uext. */
+
+  data = (UserData) user_data;
+  uext = data->uext;
+  uuv = N_VGetArrayPointer_Parallel(uu);
+  upv = N_VGetArrayPointer_Parallel(up);
+  resv = N_VGetArrayPointer_Parallel(res);
+  ixsub = data->ixsub; jysub = data->jysub;
+  mxsub = data->mxsub; mxsub2 = data->mxsub + 2;
+  mysub = data->mysub; npex = data->npex; npey = data->npey;
+  
+  /* Initialize all elements of res to uu. This sets the boundary
+     elements simply without indexing hassles. */
+  
+  N_VScale(ONE, uu, res);
+  
+  /* Copy local segment of u vector into the working extended array uext.
+     This completes uext prior to the computation of the res vector.     */
+
+  offsetu = 0;
+  offsetue = mxsub2 + 1;
+  for (ly = 0; ly < mysub; ly++) {
+    for (lx = 0; lx < mxsub; lx++) uext[offsetue+lx] = uuv[offsetu+lx];
+    offsetu = offsetu + mxsub;
+    offsetue = offsetue + mxsub2;
+  }
+  
+  /* Set loop limits for the interior of the local subgrid. */
+  
+  ixbegin = 0;
+  ixend   = mxsub-1;
+  jybegin = 0;
+  jyend   = mysub-1;
+  if (ixsub == 0) ixbegin++; if (ixsub == npex-1) ixend--;
+  if (jysub == 0) jybegin++; if (jysub == npey-1) jyend--;
+  
+  /* Loop over all grid points in local subgrid. */
+  
+  for (ly = jybegin; ly <=jyend; ly++) {
+    for (lx = ixbegin; lx <= ixend; lx++) {
+      locu  = lx + ly*mxsub;
+      locue = (lx+1) + (ly+1)*mxsub2;
+      termx = data->coeffx *(uext[locue-1]      + uext[locue+1]);
+      termy = data->coeffy *(uext[locue-mxsub2] + uext[locue+mxsub2]);
+      termctr = data->coeffxy*uext[locue];
+      resv[locu] = upv[locu] - (termx + termy - termctr);
+   }
+  }
+  return(0);
+
+}
+
+/*
+ * Routine to send boundary data to neighboring PEs.                     
+ */
+
+static int BSend(MPI_Comm comm, int thispe, int ixsub,
+                 int jysub, int dsizex, int dsizey,
+                 realtype uarray[])
+{
+  int ly, offsetu;
+  realtype bufleft[MYSUB], bufright[MYSUB];
+  
+  /* If jysub > 0, send data from bottom x-line of u. */
+  
+  if (jysub != 0)
+    MPI_Send(&uarray[0], dsizex, PVEC_REAL_MPI_TYPE, thispe-NPEX, 0, comm);
+
+  /* If jysub < NPEY-1, send data from top x-line of u. */
+  
+  if (jysub != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&uarray[offsetu], dsizex, PVEC_REAL_MPI_TYPE, 
+             thispe+NPEX, 0, comm);
+  }
+  
+  /* If ixsub > 0, send data from left y-line of u (via bufleft). */
+  
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*dsizex;
+      bufleft[ly] = uarray[offsetu];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, thispe-1, 0, comm);   
+  }
+
+  /* If ixsub < NPEX-1, send data from right y-line of u (via bufright). */
+  
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*MXSUB + (MXSUB-1);
+      bufright[ly] = uarray[offsetu];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, thispe+1, 0, comm);   
+  }
+
+  return(0);
+
+}
+
+/* 
+ * Routine to start receiving boundary data from neighboring PEs.
+ * Notes:
+ *   1) buffer should be able to hold 2*MYSUB realtype entries, should be
+ *      passed to both the BRecvPost and BRecvWait functions, and should not
+ *      be manipulated between the two calls.
+ *   2) request should have 4 entries, and should be passed in 
+ *      both calls also. 
+ */
+
+static int BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                     int ixsub, int jysub,
+                     int dsizex, int dsizey,
+                     realtype uext[], realtype buffer[])
+{
+  int offsetue;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+MYSUB;
+  
+  /* If jysub > 0, receive data for bottom x-line of uext. */
+  if (jysub != 0)
+    MPI_Irecv(&uext[1], dsizex, PVEC_REAL_MPI_TYPE,
+              thispe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of uext. */
+  if (jysub != NPEY-1) {
+    offsetue = (1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+              thispe+NPEX, 0, comm, &request[1]);
+  }
+
+  /* If ixsub > 0, receive data for left y-line of uext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              thispe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of uext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              thispe+1, 0, comm, &request[3]);
+  }
+  
+  return(0);
+
+}
+
+/*
+ * Routine to finish receiving boundary data from neighboring PEs.
+ * Notes:
+ *   1) buffer should be able to hold 2*MYSUB realtype entries, should be
+ *      passed to both the BRecvPost and BRecvWait functions, and should not
+ *      be manipulated between the two calls.
+ *   2) request should have four entries, and should be passed in both 
+ *      calls also. 
+ */
+
+static int BRecvWait(MPI_Request request[], int ixsub,
+                     int jysub, int dsizex, realtype uext[],
+                     realtype buffer[])
+{
+  int ly, dsizex2, offsetue;
+  realtype *bufleft = buffer, *bufright = buffer+MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2;
+  
+  /* If jysub > 0, receive data for bottom x-line of uext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of uext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If ixsub > 0, receive data for left y-line of uext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext. */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetue = (ly+1)*dsizex2;
+      uext[offsetue] = bufleft[ly];
+    }
+  }
+
+  /* If ixsub < NPEX-1, receive data for right y-line of uext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+    
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetue = (ly+2)*dsizex2 - 1;
+      uext[offsetue] = bufright[ly];
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData initializes the user's data block data. 
+ */
+
+static int InitUserData(int thispe, MPI_Comm comm, UserData data)
+{
+  data->thispe = thispe;
+  data->dx = ONE/(MX-ONE);       /* Assumes a [0,1] interval in x. */
+  data->dy = ONE/(MY-ONE);       /* Assumes a [0,1] interval in y. */
+  data->coeffx  = ONE/(data->dx * data->dx);
+  data->coeffy  = ONE/(data->dy * data->dy);
+  data->coeffxy = TWO/(data->dx * data->dx) + TWO/(data->dy * data->dy) ;
+  data->jysub   = thispe/NPEX;
+  data->ixsub   = thispe - data->jysub * NPEX;
+  data->npex    = NPEX;
+  data->npey    = NPEY;
+  data->mx      = MX;
+  data->my      = MY;
+  data->mxsub   = MXSUB;
+  data->mysub   = MYSUB;
+  data->comm    = comm;
+  data->n_local = MXSUB*MYSUB;
+  return(0);
+  
+}
+
+/* 
+ * SetInitialProfile sets the initial values for the problem. 
+ */
+
+static int SetInitialProfile(N_Vector uu, N_Vector up,  N_Vector id, 
+                             N_Vector res, UserData data)
+{
+  int i, iloc, j, jloc, offset, loc, ixsub, jysub;
+  int ixbegin, ixend, jybegin, jyend;
+  realtype xfact, yfact, *udata, *iddata, dx, dy;
+  
+  /* Initialize uu. */ 
+  
+  udata = N_VGetArrayPointer_Parallel(uu);
+  iddata = N_VGetArrayPointer_Parallel(id);
+  
+  /* Set mesh spacings and subgrid indices for this PE. */
+  dx = data->dx;
+  dy = data->dy;
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  
+  /* Set beginning and ending locations in the global array corresponding 
+     to the portion of that array assigned to this processor. */
+  ixbegin = MXSUB*ixsub;
+  ixend   = MXSUB*(ixsub+1) - 1;
+  jybegin = MYSUB*jysub;
+  jyend   = MYSUB*(jysub+1) - 1;
+  
+  /* Loop over the local array, computing the initial profile value.
+     The global indices are (i,j) and the local indices are (iloc,jloc).
+     Also set the id vector to zero for boundary points, one otherwise. */
+  
+  N_VConst(ONE,id);
+  for (j = jybegin, jloc = 0; j <= jyend; j++, jloc++) {
+    yfact = data->dy*j;
+    offset= jloc*MXSUB;
+    for (i = ixbegin, iloc = 0; i <= ixend; i++, iloc++) {
+      xfact = data->dx * i;
+      loc = offset + iloc;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+      if (i == 0 || i == MX-1 || j == 0 || j == MY-1) iddata[loc] = ZERO;
+    }
+  }
+  
+  /* Initialize up. */
+  
+  N_VConst(ZERO, up);    /* Initially set up = 0. */
+  
+  /* heatres sets res to negative of ODE RHS values at interior points. */
+  heatres(ZERO, uu, up, res, data);
+  
+  /* Copy -res into up to get correct initial up values. */
+  N_VScale(-ONE, res, up);
+  
+  return(0);
+  
+}
+
+/*
+ * Print first lines of output (problem description)
+ * and table heading
+ */
+
+static void PrintHeader(long int Neq, realtype rtol, realtype atol)
+{
+    printf("\nidaHeat2D_kry_bbd_p: Heat equation, parallel example problem for IDA\n");
+    printf("                Discretized heat equation on 2D unit square.\n");
+    printf("                Zero boundary conditions,");
+    printf(" polynomial initial conditions.\n");
+    printf("                Mesh dimensions: %d x %d", MX, MY);
+    printf("        Total system size: %ld\n\n", Neq);
+
+    printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+    printf("         Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+    printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+    printf("Constraints set to force all solution components >= 0. \n");
+    printf("SUPPRESSALG = TRUE to suppress local error testing on");
+    printf(" all boundary components. \n");
+    printf("Linear solver: IDASPGMR.    ");
+    printf("Preconditioner: IDABBDPRE - Banded-block-diagonal.\n"); 
+
+}
+
+/* 
+ * Print case and table header
+ */
+
+static void PrintCase(int case_number, int mudq, int mukeep)
+{
+  printf("\n\nCase %1d. \n", case_number);
+  printf("   Difference quotient half-bandwidths = %d",mudq);
+  printf("   Retained matrix half-bandwidths = %d \n",mukeep);
+  
+  /* Print output table heading and initial line of table. */
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time     umax       k  nst  nni  nli   nre nreLS nge     h      npe nps\n");
+  printf(" .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .\n");
+}
+
+/*
+ * Print integrator statistics and max-norm of solution
+ */
+
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu)
+{
+  realtype umax, hused;
+  int kused, ier;
+  long int nst, nni, nre, nli, npe, nps, nreLS, nge;
+
+  umax = N_VMaxNorm(uu);
+  
+  if (id == 0) {
+
+    ier = IDAGetLastOrder(mem, &kused);
+    check_flag(&ier, "IDAGetLastOrder", 1, id);
+    ier = IDAGetNumSteps(mem, &nst);
+    check_flag(&ier, "IDAGetNumSteps", 1, id);
+    ier = IDAGetNumNonlinSolvIters(mem, &nni);
+    check_flag(&ier, "IDAGetNumNonlinSolvIters", 1, id);
+    ier = IDAGetNumResEvals(mem, &nre);
+    check_flag(&ier, "IDAGetNumResEvals", 1, id);
+    ier = IDAGetLastStep(mem, &hused);
+    check_flag(&ier, "IDAGetLastStep", 1, id);
+    ier = IDASpilsGetNumLinIters(mem, &nli);
+    check_flag(&ier, "IDASpilsGetNumLinIters", 1, id);
+    ier = IDASpilsGetNumResEvals(mem, &nreLS);
+    check_flag(&ier, "IDASpilsGetNumResEvals", 1, id);
+    ier = IDABBDPrecGetNumGfnEvals(mem, &nge);
+    check_flag(&ier, "IDABBDPrecGetNumGfnEvals", 1, id);
+    ier = IDASpilsGetNumPrecEvals(mem, &npe);
+    check_flag(&ier, "IDASpilsGetPrecEvals", 1, id);
+    ier = IDASpilsGetNumPrecSolves(mem, &nps);
+    check_flag(&ier, "IDASpilsGetNumPrecSolves", 1, id);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld %4ld %4ld %9.2Le  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nli, nre, nreLS, nge, hused, npe, nps);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld %4ld %4ld %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nli, nre, nreLS, nge, hused, npe, nps);
+#else
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld %4ld %4ld %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nli, nre, nreLS, nge, hused, npe, nps);
+#endif
+
+  }
+}
+
+/*
+ * Print some final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int netf, ncfn, ncfl;
+
+  IDAGetNumErrTestFails(mem, &netf);
+  IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  IDASpilsGetNumConvFails(mem, &ncfl);
+
+  printf("\nError test failures            = %ld\n", netf);
+  printf("Nonlinear convergence failures = %ld\n", ncfn);
+  printf("Linear convergence failures    = %ld\n", ncfl);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/ida/parallel/idaHeat2D_kry_bbd_p.out b/examples/ida/parallel/idaHeat2D_kry_bbd_p.out
new file mode 100644
index 0000000..388faeb
--- /dev/null
+++ b/examples/ida/parallel/idaHeat2D_kry_bbd_p.out
@@ -0,0 +1,58 @@
+idaHeat2D_kry_bbd_p: Heat equation, parallel example problem for IDA
+                Discretized heat equation on 2D unit square.
+                Zero boundary conditions, polynomial initial conditions.
+                Mesh dimensions: 10 x 10        Total system size: 100
+
+Subgrid dimensions: 5 x 5         Processor array: 2 x 2
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+SUPPRESSALG = TRUE to suppress local error testing on all boundary components. 
+Linear solver: IDASPGMR.    Preconditioner: IDABBDPRE - Banded-block-diagonal.
+
+
+Case 1. 
+   Difference quotient half-bandwidths = 5   Retained matrix half-bandwidths = 1 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nli   nre nreLS nge   h      npe nps
+ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+  0.01   8.24107e-01  2   12   14    7    14    7   96  2.56e-03    8  21
+  0.02   6.88124e-01  3   15   18   12    18   12   96  5.12e-03    8  30
+  0.04   4.70754e-01  3   18   24   22    24   22  108  6.58e-03    9  46
+  0.08   2.16600e-01  3   22   29   30    29   30  108  1.32e-02    9  59
+  0.16   4.56595e-02  4   28   37   43    37   43  120  2.63e-02   10  80
+  0.32   2.10959e-03  4   35   45   59    45   59  120  2.37e-02   10 104
+  0.64   5.53681e-05  1   40   54   71    54   71  156  1.90e-01   13 125
+  1.28   1.55972e-19  1   42   56   71    56   71  180  7.58e-01   15 127
+  2.56   3.38647e-21  1   43   57   71    57   71  192  1.52e+00   16 128
+  5.12   8.60743e-21  1   44   58   71    58   71  204  3.03e+00   17 129
+ 10.24   1.66301e-20  1   45   59   71    59   71  216  6.06e+00   18 130
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
+
+
+Case 2. 
+   Difference quotient half-bandwidths = 1   Retained matrix half-bandwidths = 1 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nli   nre nreLS nge   h      npe nps
+ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+  0.01   8.24111e-01  2   12   14    7    14    7   32  2.56e-03    8  21
+  0.02   6.88118e-01  3   15   18   12    18   12   32  5.12e-03    8  30
+  0.04   4.70932e-01  3   19   23   20    23   20   36  1.02e-02    9  43
+  0.08   2.16547e-01  3   23   27   32    27   32   36  1.02e-02    9  59
+  0.16   4.52248e-02  4   27   33   44    33   44   40  2.05e-02   10  77
+  0.32   2.18677e-03  3   34   41   67    41   67   44  4.10e-02   11 108
+  0.64   4.88467e-19  1   39   49   86    49   86   52  1.64e-01   13 135
+  1.28   5.39822e-19  1   41   51   86    51   86   60  6.55e-01   15 137
+  2.56   7.41945e-18  1   42   52   86    52   86   64  1.31e+00   16 138
+  5.12   6.10808e-17  1   43   53   86    53   86   68  2.62e+00   17 139
+ 10.24   4.05358e-16  1   44   54   86    54   86   72  5.24e+00   18 140
+
+Error test failures            = 0
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
diff --git a/examples/ida/parallel/idaHeat2D_kry_p.c b/examples/ida/parallel/idaHeat2D_kry_p.c
new file mode 100644
index 0000000..ab1394e
--- /dev/null
+++ b/examples/ida/parallel/idaHeat2D_kry_p.c
@@ -0,0 +1,892 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for IDA: 2D heat equation, parallel, GMRES.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version uses the Krylov solver IDASpgmr.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y).
+ * The PDE is treated with central differences on a uniform MX x MY
+ * grid. The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = MX * MY. Here MX = MY = 10.
+ *
+ * The system is actually implemented on submeshes, processor by
+ * processor, with an MXSUB by MYSUB mesh on each of NPEX * NPEY
+ * processors.
+ *
+ * The system is solved with IDA using the Krylov linear solver
+ * IDASPGMR. The preconditioner uses the diagonal elements of the
+ * Jacobian only. Routines for preconditioning, required by
+ * IDASPGMR, are supplied here. The constraints u >= 0 are posed
+ * for all components. Local error testing on the boundary values
+ * is suppressed. Output is taken at t = 0, .01, .02, .04,
+ * ..., 10.24.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_spgmr.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+#define NOUT         11             /* Number of output times */
+
+#define NPEX         2              /* No. PEs in x direction of PE array */
+#define NPEY         2              /* No. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* No. x points per subgrid */
+#define MYSUB        5              /* No. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+
+typedef struct {  
+  long int thispe, mx, my, ixsub, jysub, npex, npey, mxsub, mysub;
+  realtype    dx, dy, coeffx, coeffy, coeffxy;
+  realtype    uext[(MXSUB+2)*(MYSUB+2)];
+  N_Vector    pp;    /* vector of diagonal preconditioner elements */
+  MPI_Comm    comm;
+} *UserData;
+
+/* User-supplied residual function and supporting routines */
+
+int resHeat(realtype tt, 
+            N_Vector uu, N_Vector up, N_Vector rr, 
+            void *user_data);
+
+static int rescomm(N_Vector uu, N_Vector up, void *user_data);
+
+static int reslocal(realtype tt, N_Vector uu, N_Vector up, 
+                    N_Vector res,  void *user_data);
+
+static int BSend(MPI_Comm comm, long int thispe, long int ixsub, long int jysub,
+                 long int dsizex, long int dsizey, realtype uarray[]);
+
+static int BRecvPost(MPI_Comm comm, MPI_Request request[], long int thispe,
+                     long int ixsub, long int jysub,
+                     long int dsizex, long int dsizey,
+                     realtype uext[], realtype buffer[]);
+
+static int BRecvWait(MPI_Request request[], long int ixsub, long int jysub,
+                     long int dsizex, realtype uext[], realtype buffer[]);
+
+/* User-supplied preconditioner routines */
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec,
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp);
+
+int PsetupHeat(realtype tt, 
+               N_Vector yy, N_Vector yp, N_Vector rr, 
+               realtype c_j, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private function to check function return values */
+
+static int InitUserData(int thispe, MPI_Comm comm, UserData data);
+
+static int SetInitialProfile(N_Vector uu, N_Vector up, N_Vector id,
+                             N_Vector res, UserData data);
+
+static void PrintHeader(long int Neq, realtype rtol, realtype atol);
+
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData data;
+  int iout, thispe, ier, npes;
+  long int Neq, local_N;
+  realtype rtol, atol, t0, t1, tout, tret;
+  N_Vector uu, up, constraints, id, res;
+
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = id = res = NULL;
+
+  /* Get processor number and total number of pe's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &thispe);
+  
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n", 
+              npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+  
+  /* Set local length local_N and global length Neq. */
+
+  local_N = MXSUB*MYSUB;
+  Neq     = MX * MY;
+  
+  /* Allocate and initialize the data structure and N-vectors. */
+
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2, thispe)) 
+    MPI_Abort(comm, 1);
+  data->pp = NULL;
+
+  uu = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)uu, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  up = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)up, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  res = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)res, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  constraints = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)constraints, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  id = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  /* An N-vector to hold preconditioner. */
+  data->pp = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)data->pp, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  InitUserData(thispe, comm, data);
+  
+  /* Initialize the uu, up, id, and res profiles. */
+
+  SetInitialProfile(uu, up, id, res, data);
+  
+  /* Set constraints to all 1's for nonnegative solution values. */
+
+  N_VConst(ONE, constraints);
+  
+  t0 = ZERO; t1 = RCONST(0.01);
+  
+  /* Scalar relative and absolute tolerance. */
+
+  rtol = ZERO;
+  atol = RCONST(1.0e-3);
+
+  /* Call IDACreate and IDAMalloc to initialize solution. */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetSuppressAlg(mem, TRUE);
+  if(check_flag(&ier, "IDASetSuppressAlg", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetId(mem, id);
+  if(check_flag(&ier, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1, thispe)) MPI_Abort(comm, 1);
+  N_VDestroy_Parallel(constraints);  
+
+  ier = IDAInit(mem, resHeat, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+  
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDASpgmr to specify the linear solver. */
+
+  ier = IDASpgmr(mem, 0);
+  if(check_flag(&ier, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASpilsSetPreconditioner(mem, PsetupHeat, PsolveHeat);
+  if(check_flag(&ier, "IDASpilsSetPreconditioner", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Print output heading (on processor 0 only) and intial solution  */
+  
+  if (thispe == 0) PrintHeader(Neq, rtol, atol);
+  PrintOutput(thispe, mem, t0, uu); 
+  
+  /* Loop over tout, call IDASolve, print output. */
+
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) {
+
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(thispe, mem, tret, uu);
+
+  }
+  
+  /* Print remaining counters. */
+
+  if (thispe == 0) PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_Parallel(id);
+  N_VDestroy_Parallel(res);
+  N_VDestroy_Parallel(up);
+  N_VDestroy_Parallel(uu);
+
+  N_VDestroy_Parallel(data->pp);
+  free(data);
+
+  MPI_Finalize();
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resHeat: heat equation system residual function                       
+ * This uses 5-point central differencing on the interior points, and    
+ * includes algebraic equations for the boundary values.                 
+ * So for each interior point, the residual component has the form       
+ *    res_i = u'_i - (central difference)_i                              
+ * while for each boundary point, it is res_i = u_i. 
+ *                    
+ * This parallel implementation uses several supporting routines. 
+ * First a call is made to rescomm to do communication of subgrid boundary
+ * data into array uext.  Then reslocal is called to compute the residual
+ * on individual processors and their corresponding domains.  The routines
+ * BSend, BRecvPost, and BREcvWait handle interprocessor communication
+ * of uu required to calculate the residual. 
+ */
+
+int resHeat(realtype tt, 
+            N_Vector uu, N_Vector up, N_Vector rr, 
+            void *user_data)
+{
+  int retval;
+  
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(uu, up, user_data);
+
+  /* Call reslocal to calculate res. */
+  retval = reslocal(tt, uu, up, rr, user_data);
+  
+  return(0);
+
+}
+
+/*
+ * PsetupHeat: setup for diagonal preconditioner for heatsk.    
+ *                                                                 
+ * The optional user-supplied functions PsetupHeat and          
+ * PsolveHeat together must define the left preconditoner        
+ * matrix P approximating the system Jacobian matrix               
+ *                   J = dF/du + cj*dF/du'                         
+ * (where the DAE system is F(t,u,u') = 0), and solve the linear   
+ * systems P z = r.   This is done in this case by keeping only    
+ * the diagonal elements of the J matrix above, storing them as    
+ * inverses in a vector pp, when computed in PsetupHeat, for    
+ * subsequent use in PsolveHeat.                                 
+ *                                                                 
+ * In this instance, only cj and data (user data structure, with    
+ * pp etc.) are used from the PsetupHeat argument list.         
+ *
+ */
+
+int PsetupHeat(realtype tt, 
+               N_Vector yy, N_Vector yp, N_Vector rr, 
+               realtype c_j, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *ppv, pelinv;
+  long int lx, ly, ixbegin, ixend, jybegin, jyend, locu, mxsub, mysub;
+  long int ixsub, jysub, npex, npey;
+  UserData data;
+
+  data = (UserData) user_data;
+
+  ppv = N_VGetArrayPointer_Parallel(data->pp);
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  mxsub = data->mxsub;
+  mysub = data->mysub;
+  npex  = data->npex;
+  npey  = data->npey;
+  
+  /* Initially set all pp elements to one. */
+  N_VConst(ONE, data->pp);
+  
+  /* Prepare to loop over subgrid. */
+  ixbegin = 0;
+  ixend   = mxsub-1;
+  jybegin = 0;
+  jyend   = mysub-1;
+  if (ixsub == 0) ixbegin++; if (ixsub == npex-1) ixend--;
+  if (jysub == 0) jybegin++; if (jysub == npey-1) jyend--;
+  pelinv = ONE/(c_j + data->coeffxy); 
+  
+  /* Load the inverse of the preconditioner diagonal elements
+     in loop over all the local subgrid. */
+  
+  for (ly = jybegin; ly <=jyend; ly++) {
+    for (lx = ixbegin; lx <= ixend; lx++) {
+      locu  = lx + ly*mxsub;
+      ppv[locu] = pelinv;
+    }
+  }
+
+  return(0);
+
+}
+
+/*
+ * PsolveHeat: solve preconditioner linear system.              
+ * This routine multiplies the input vector rvec by the vector pp 
+ * containing the inverse diagonal Jacobian elements (previously  
+ * computed in PsetupHeat), returning the result in zvec.      
+ */
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec,
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp)
+{
+  UserData data;
+
+  data = (UserData) user_data;
+  
+  N_VProd(data->pp, rvec, zvec);
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * SUPPORTING FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+
+/* 
+ * rescomm routine.  This routine performs all inter-processor
+ * communication of data in u needed to calculate G.                 
+ */
+
+static int rescomm(N_Vector uu, N_Vector up, void *user_data)
+{
+  UserData data;
+  realtype *uarray, *uext, buffer[2*MYSUB];
+  MPI_Comm comm;
+  long int thispe, ixsub, jysub, mxsub, mysub;
+  MPI_Request request[4];
+  
+  data = (UserData) user_data;
+  uarray = N_VGetArrayPointer_Parallel(uu);
+  
+  /* Get comm, thispe, subgrid indices, data sizes, extended array uext. */
+  comm = data->comm;  thispe = data->thispe;
+  ixsub = data->ixsub;   jysub = data->jysub;
+  mxsub = data->mxsub;   mysub = data->mysub;
+  uext = data->uext;
+  
+  /* Start receiving boundary data from neighboring PEs. */
+  BRecvPost(comm, request, thispe, ixsub, jysub, mxsub, mysub, uext, buffer);
+  
+  /* Send data from boundary of local grid to neighboring PEs. */
+  BSend(comm, thispe, ixsub, jysub, mxsub, mysub, uarray);
+  
+  /* Finish receiving boundary data from neighboring PEs. */
+  BRecvWait(request, ixsub, jysub, mxsub, uext, buffer);
+
+  return(0);
+  
+}
+
+/*
+ * reslocal routine.  Compute res = F(t, uu, up).  This routine assumes
+ * that all inter-processor communication of data needed to calculate F
+ * has already been done, and that this data is in the work array uext.  
+ */
+
+static int reslocal(realtype tt, 
+                    N_Vector uu, N_Vector up, N_Vector rr,
+                    void *user_data)
+{
+  realtype *uext, *uuv, *upv, *resv;
+  realtype termx, termy, termctr;
+  long int lx, ly, offsetu, offsetue, locu, locue;
+  long int ixsub, jysub, mxsub, mxsub2, mysub, npex, npey;
+  long int ixbegin, ixend, jybegin, jyend;
+  UserData data;
+  
+  /* Get subgrid indices, array sizes, extended work array uext. */
+  
+  data = (UserData) user_data;
+  uext = data->uext;
+  uuv = N_VGetArrayPointer_Parallel(uu);
+  upv = N_VGetArrayPointer_Parallel(up);
+  resv = N_VGetArrayPointer_Parallel(rr);
+  ixsub = data->ixsub; jysub = data->jysub;
+  mxsub = data->mxsub; mxsub2 = data->mxsub + 2;
+  mysub = data->mysub; npex = data->npex; npey = data->npey;
+  
+  /* Initialize all elements of rr to uu. This sets the boundary
+     elements simply without indexing hassles. */
+  
+  N_VScale(ONE, uu, rr);
+  
+  /* Copy local segment of u vector into the working extended array uext.
+     This completes uext prior to the computation of the rr vector.     */
+  
+  offsetu = 0;
+  offsetue = mxsub2 + 1;
+  for (ly = 0; ly < mysub; ly++) {
+    for (lx = 0; lx < mxsub; lx++) uext[offsetue+lx] = uuv[offsetu+lx];
+    offsetu = offsetu + mxsub;
+    offsetue = offsetue + mxsub2;
+  }
+  
+  /* Set loop limits for the interior of the local subgrid. */
+  
+  ixbegin = 0;
+  ixend   = mxsub-1;
+  jybegin = 0;
+  jyend   = mysub-1;
+  if (ixsub == 0) ixbegin++; if (ixsub == npex-1) ixend--;
+  if (jysub == 0) jybegin++; if (jysub == npey-1) jyend--;
+  
+  /* Loop over all grid points in local subgrid. */
+
+  for (ly = jybegin; ly <=jyend; ly++) {
+    for (lx = ixbegin; lx <= ixend; lx++) {
+      locu  = lx + ly*mxsub;
+      locue = (lx+1) + (ly+1)*mxsub2;
+      termx = data->coeffx *(uext[locue-1]      + uext[locue+1]);
+      termy = data->coeffy *(uext[locue-mxsub2] + uext[locue+mxsub2]);
+      termctr = data->coeffxy*uext[locue];
+      resv[locu] = upv[locu] - (termx + termy - termctr);
+   }
+  }
+  return(0);
+
+}
+
+/*
+ * Routine to send boundary data to neighboring PEs.                     
+ */
+
+static int BSend(MPI_Comm comm, long int thispe, long int ixsub, long int jysub,
+                 long int dsizex, long int dsizey, realtype uarray[])
+{
+  long int ly, offsetu;
+  realtype bufleft[MYSUB], bufright[MYSUB];
+
+  /* If jysub > 0, send data from bottom x-line of u. */
+  
+  if (jysub != 0)
+    MPI_Send(&uarray[0], dsizex, PVEC_REAL_MPI_TYPE, thispe-NPEX, 0, comm);
+  
+  /* If jysub < NPEY-1, send data from top x-line of u. */
+  
+  if (jysub != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&uarray[offsetu], dsizex, PVEC_REAL_MPI_TYPE, 
+             thispe+NPEX, 0, comm);
+  }
+  
+  /* If ixsub > 0, send data from left y-line of u (via bufleft). */
+  
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*dsizex;
+      bufleft[ly] = uarray[offsetu];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, thispe-1, 0, comm);   
+  }
+  
+  /* If ixsub < NPEX-1, send data from right y-line of u (via bufright). */
+  
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*MXSUB + (MXSUB-1);
+      bufright[ly] = uarray[offsetu];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, thispe+1, 0, comm);   
+  }
+
+  return(0);
+
+}
+
+/*
+ * Routine to start receiving boundary data from neighboring PEs.
+ * Notes:
+ *   1) buffer should be able to hold 2*MYSUB realtype entries, should be
+ *      passed to both the BRecvPost and BRecvWait functions, and should not
+ *      be manipulated between the two calls.
+ *   2) request should have 4 entries, and should be passed in 
+ *      both calls also. 
+ */
+
+static int BRecvPost(MPI_Comm comm, MPI_Request request[], long int thispe,
+                     long int ixsub, long int jysub,
+                     long int dsizex, long int dsizey,
+                     realtype uext[], realtype buffer[])
+{
+  long int offsetue;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+MYSUB;
+  
+  /* If jysub > 0, receive data for bottom x-line of uext. */
+  if (jysub != 0)
+    MPI_Irecv(&uext[1], dsizex, PVEC_REAL_MPI_TYPE,
+              thispe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of uext. */
+  if (jysub != NPEY-1) {
+    offsetue = (1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+              thispe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If ixsub > 0, receive data for left y-line of uext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              thispe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of uext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              thispe+1, 0, comm, &request[3]);
+  }
+
+  return(0);
+  
+}
+
+/*
+ * Routine to finish receiving boundary data from neighboring PEs.
+ * Notes:
+ *   1) buffer should be able to hold 2*MYSUB realtype entries, should be
+ *      passed to both the BRecvPost and BRecvWait functions, and should not
+ *      be manipulated between the two calls.
+ *   2) request should have four entries, and should be passed in both 
+ *      calls also. 
+ */
+
+static int BRecvWait(MPI_Request request[], long int ixsub, long int jysub,
+                     long int dsizex, realtype uext[], realtype buffer[])
+{
+  long int ly, dsizex2, offsetue;
+  realtype *bufleft = buffer, *bufright = buffer+MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2;
+  
+  /* If jysub > 0, receive data for bottom x-line of uext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of uext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+  
+  /* If ixsub > 0, receive data for left y-line of uext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+    
+    /* Copy the buffer to uext. */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetue = (ly+1)*dsizex2;
+      uext[offsetue] = bufleft[ly];
+    }
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of uext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+    
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetue = (ly+2)*dsizex2 - 1;
+      uext[offsetue] = bufright[ly];
+    }
+  }
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * InitUserData initializes the user's data block data. 
+ */
+
+static int InitUserData(int thispe, MPI_Comm comm, UserData data)
+{
+  data->thispe = thispe;
+  data->dx = ONE/(MX-ONE);       /* Assumes a [0,1] interval in x. */
+  data->dy = ONE/(MY-ONE);       /* Assumes a [0,1] interval in y. */
+  data->coeffx  = ONE/(data->dx * data->dx);
+  data->coeffy  = ONE/(data->dy * data->dy);
+  data->coeffxy = TWO/(data->dx * data->dx) + TWO/(data->dy * data->dy) ;
+  data->jysub   = thispe/NPEX;
+  data->ixsub   = thispe - data->jysub * NPEX;
+  data->npex    = NPEX;
+  data->npey    = NPEY;
+  data->mx      = MX;
+  data->my      = MY;
+  data->mxsub = MXSUB;
+  data->mysub = MYSUB;
+  data->comm    = comm;
+  return(0);
+
+}
+
+/*
+ * SetInitialProfile sets the initial values for the problem. 
+ */
+
+static int SetInitialProfile(N_Vector uu, N_Vector up,  N_Vector id, 
+                             N_Vector res, UserData data)
+{
+  long int i, iloc, j, jloc, offset, loc, ixsub, jysub;
+  long int ixbegin, ixend, jybegin, jyend;
+  realtype xfact, yfact, *udata, *iddata, dx, dy;
+  
+  /* Initialize uu. */ 
+
+  udata = N_VGetArrayPointer_Parallel(uu);
+  iddata = N_VGetArrayPointer_Parallel(id);
+  
+  /* Set mesh spacings and subgrid indices for this PE. */
+  dx = data->dx;
+  dy = data->dy;
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  
+  /* Set beginning and ending locations in the global array corresponding 
+     to the portion of that array assigned to this processor. */
+  ixbegin = MXSUB*ixsub;
+  ixend   = MXSUB*(ixsub+1) - 1;
+  jybegin = MYSUB*jysub;
+  jyend   = MYSUB*(jysub+1) - 1;
+  
+  /* Loop over the local array, computing the initial profile value.
+     The global indices are (i,j) and the local indices are (iloc,jloc).
+     Also set the id vector to zero for boundary points, one otherwise. */
+  
+  N_VConst(ONE,id);
+  for (j = jybegin, jloc = 0; j <= jyend; j++, jloc++) {
+    yfact = data->dy*j;
+    offset= jloc*MXSUB;
+    for (i = ixbegin, iloc = 0; i <= ixend; i++, iloc++) {
+      xfact = data->dx * i;
+      loc = offset + iloc;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+      if (i == 0 || i == MX-1 || j == 0 || j == MY-1) iddata[loc] = ZERO;
+    }
+  }
+  
+  /* Initialize up. */
+  
+  N_VConst(ZERO, up);    /* Initially set up = 0. */
+  
+  /* resHeat sets res to negative of ODE RHS values at interior points. */
+  resHeat(ZERO, uu, up, res, data);
+  
+  /* Copy -res into up to get correct initial up values. */
+  N_VScale(-ONE, res, up);
+  
+  return(0);
+}
+
+/*
+ * Print first lines of output and table heading
+ */
+
+static void PrintHeader(long int Neq, realtype rtol, realtype atol)
+{ 
+  printf("\nidaHeat2D_kry_p: Heat equation, parallel example problem for IDA\n");
+  printf("            Discretized heat equation on 2D unit square.\n");
+  printf("            Zero boundary conditions,");
+  printf(" polynomial initial conditions.\n");
+  printf("            Mesh dimensions: %d x %d", MX, MY);
+  printf("        Total system size: %ld\n\n", Neq);
+  printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+  printf("        Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Constraints set to force all solution components >= 0. \n");
+  printf("SUPPRESSALG = TRUE to suppress local error testing on ");
+  printf("all boundary components. \n");
+  printf("Linear solver: IDASPGMR  ");
+  printf("Preconditioner: diagonal elements only.\n"); 
+  
+  /* Print output table heading and initial line of table. */
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time     umax       k  nst  nni  nli   nre   nreLS    h      npe nps\n");
+  printf("----------------------------------------------------------------------\n");
+}
+
+/*
+ * PrintOutput: print max norm of solution and current solver statistics
+ */
+
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu)
+{
+  realtype hused, umax;
+  long int nst, nni, nje, nre, nreLS, nli, npe, nps;
+  int kused, ier;
+
+  umax = N_VMaxNorm(uu);
+
+  if (id == 0) {
+
+    ier = IDAGetLastOrder(mem, &kused);
+    check_flag(&ier, "IDAGetLastOrder", 1, id);
+    ier = IDAGetNumSteps(mem, &nst);
+    check_flag(&ier, "IDAGetNumSteps", 1, id);
+    ier = IDAGetNumNonlinSolvIters(mem, &nni);
+    check_flag(&ier, "IDAGetNumNonlinSolvIters", 1, id);
+    ier = IDAGetNumResEvals(mem, &nre);
+    check_flag(&ier, "IDAGetNumResEvals", 1, id);
+    ier = IDAGetLastStep(mem, &hused);
+    check_flag(&ier, "IDAGetLastStep", 1, id);
+    ier = IDASpilsGetNumJtimesEvals(mem, &nje);
+    check_flag(&ier, "IDASpilsGetNumJtimesEvals", 1, id);
+    ier = IDASpilsGetNumLinIters(mem, &nli);
+    check_flag(&ier, "IDASpilsGetNumLinIters", 1, id);
+    ier = IDASpilsGetNumResEvals(mem, &nreLS);
+    check_flag(&ier, "IDASpilsGetNumResEvals", 1, id);
+    ier = IDASpilsGetNumPrecEvals(mem, &npe);
+    check_flag(&ier, "IDASpilsGetPrecEvals", 1, id);
+    ier = IDASpilsGetNumPrecSolves(mem, &nps);
+    check_flag(&ier, "IDASpilsGetNumPrecSolves", 1, id);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)  
+    printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2Le  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)  
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#else
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#endif
+
+  }
+}
+
+/*
+ * Print some final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int netf, ncfn, ncfl;
+
+  IDAGetNumErrTestFails(mem, &netf);
+  IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  IDASpilsGetNumConvFails(mem, &ncfl);
+
+  printf("\nError test failures            = %ld\n", netf);
+  printf("Nonlinear convergence failures = %ld\n", ncfn);
+  printf("Linear convergence failures    = %ld\n", ncfl);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", 
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/ida/parallel/idaHeat2D_kry_p.out b/examples/ida/parallel/idaHeat2D_kry_p.out
new file mode 100644
index 0000000..12e1b95
--- /dev/null
+++ b/examples/ida/parallel/idaHeat2D_kry_p.out
@@ -0,0 +1,32 @@
+
+idaHeat2D_kry_p: Heat equation, parallel example problem for IDA
+            Discretized heat equation on 2D unit square.
+            Zero boundary conditions, polynomial initial conditions.
+            Mesh dimensions: 10 x 10        Total system size: 100
+
+Subgrid dimensions: 5 x 5        Processor array: 2 x 2
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+SUPPRESSALG = TRUE to suppress local error testing on all boundary components. 
+Linear solver: IDASPGMR  Preconditioner: diagonal elements only.
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nli   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.00   9.75461e-01  0    0    0    0     0     0   0.00e+00    0   0
+  0.01   8.24106e-01  2   12   14    7    14     7   2.56e-03    8  21
+  0.02   6.88134e-01  3   15   18   12    18    12   5.12e-03    8  30
+  0.04   4.70711e-01  3   18   24   21    24    21   6.58e-03    9  45
+  0.08   2.16509e-01  3   22   29   30    29    30   1.32e-02    9  59
+  0.16   4.57687e-02  4   28   36   44    36    44   1.32e-02    9  80
+  0.32   2.09938e-03  4   35   44   67    44    67   2.63e-02   10 111
+  0.64   5.54028e-21  1   39   51   77    51    77   1.05e-01   12 128
+  1.28   3.85107e-20  1   41   53   77    53    77   4.21e-01   14 130
+  2.56   5.00523e-20  1   43   55   77    55    77   1.69e+00   16 132
+  5.12   1.50906e-19  1   44   56   77    56    77   3.37e+00   17 133
+ 10.24   4.63224e-19  1   45   57   77    57    77   6.74e+00   18 134
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
diff --git a/examples/ida/petsc/CMakeLists.txt b/examples/ida/petsc/CMakeLists.txt
new file mode 100644
index 0000000..52e3a84
--- /dev/null
+++ b/examples/ida/petsc/CMakeLists.txt
@@ -0,0 +1,134 @@
+# ---------------------------------------------------------------
+# $Revision: 4137 $
+# $Date: 2014-06-15 12:26:15 -0700 (Sun, 15 Jun 2014) $
+# ---------------------------------------------------------------
+# Programmer:  Slaven Peles, Eddy Banks @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for IDA PETSc examples
+
+
+# Add variable IDA_examples with the names of the PETSc IDA examples
+# "name\;nodes\;tasks"
+SET(IDA_examples
+  #"idaHeat2D_jac_petsc\;1\;4"  # Not to be released in 2.7.0
+  "idaHeat2D_kry_petsc\;1\;4"
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the C compiler to the MPICC script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_static)
+  SET(NVECP_LIB sundials_nvecpetsc_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_shared)
+  SET(NVECP_LIB sundials_nvecpetsc_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${IDA_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS} ${PETSC_LIBRARIES})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each IDA example
+
+FOREACH(example_tuple ${IDA_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPICC)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPICC)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/petsc)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${IDA_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/petsc)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDA")
+  SET(SOLVER_LIB "sundials_ida")
+  FOREACH(example_tuple ${IDA_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${IDA_examples})
+  
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_petsc_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/petsc/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/ida/petsc/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/petsc 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_petsc_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/petsc/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/ida/petsc/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/petsc
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/ida/petsc/README b/examples/ida/petsc/README
new file mode 100644
index 0000000..a57edc0
--- /dev/null
+++ b/examples/ida/petsc/README
@@ -0,0 +1,50 @@
+List of PETSc IDA examples
+
+  idaHeat2D_kry_petsc  : 2-D heat equation, diagonal preconditioner
+  idaHeat2D_kry_bbd_petsc : Not supposed to work with PETSc vector
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/ida/petsc/idaHeat2D_kry_petsc.c b/examples/ida/petsc/idaHeat2D_kry_petsc.c
new file mode 100644
index 0000000..f681a0f
--- /dev/null
+++ b/examples/ida/petsc/idaHeat2D_kry_petsc.c
@@ -0,0 +1,730 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4882 $
+ * $Date: 2016-09-01 16:05:08 -0700 (Thu, 01 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Slaven Peles @ LLNL
+ * -----------------------------------------------------------------
+ * Based on PETSc TS example 15 and a SUNDIALS example by 
+ * Allan Taylor, Alan Hindmarsh and Radu Serban
+ * -----------------------------------------------------------------
+ * Example problem for IDA: 2D heat equation, PETSc vector, GMRES.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version uses the Krylov solver IDASpgmr.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y).
+ * The PDE is treated with central differences on a uniform MX x MY
+ * grid. The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = MX * MY. Here MX = MY = 10.
+ *
+ * The system is actually implemented on submeshes, processor by
+ * processor, with an MXSUB by MYSUB mesh on each of NPEX * NPEY
+ * processors.
+ *
+ * The system is solved with IDA using the Krylov linear solver
+ * IDASPGMR. The preconditioner uses the diagonal elements of the
+ * Jacobian only. Routines for preconditioning, required by
+ * IDASPGMR, are supplied here. The constraints u >= 0 are posed
+ * for all components. Local error testing on the boundary values
+ * is suppressed. Output is taken at t = 0, .01, .02, .04,
+ * ..., 10.24.
+ * 
+ * The example uses PETSc vector and data management functions to 
+ * generate mesh and handle MPI communication.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_spgmr.h>
+#include <nvector/nvector_petsc.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+#include <petscdm.h>
+#include <petscdmda.h>
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+#define NOUT         11             /* Number of output times */
+
+#define NPEX         2              /* No. PEs in x direction of PE array */
+#define NPEY         2              /* No. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* No. x points per subgrid */
+#define MYSUB        5              /* No. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+
+typedef struct {  
+  N_Vector pp;    /* vector of diagonal preconditioner elements */
+  DM       da;    /* PETSc data management object */
+} *UserData;
+
+/* User-supplied residual function */
+
+int resHeat(realtype tt, N_Vector uu, N_Vector up, N_Vector rr, void *user_data);
+
+/* User-supplied preconditioner routines */
+
+int PsetupHeat(realtype tt, 
+               N_Vector yy, N_Vector yp, N_Vector rr, 
+               realtype c_j, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec,
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp);
+
+/* Private function to check function return values */
+
+static int SetInitialProfile(N_Vector uu, N_Vector up, N_Vector id,
+                             N_Vector res, void *user_data);
+
+static void PrintHeader(long int Neq, realtype rtol, realtype atol);
+
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData data;
+  int iout, thispe, ier, npes;
+  long int Neq;
+  realtype rtol, atol, t0, t1, tout, tret;
+  N_Vector uu, up, constraints, id, res;
+  PetscErrorCode ierr;                  /* PETSc error code  */
+  Vec uvec;
+
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = id = res = NULL;
+
+  /* Get processor number and total number of pe's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &thispe);
+  
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n", 
+              npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+  
+  /* Set global vector length Neq. */
+  Neq = MX * MY;
+  
+  /* Initialize PETSc */
+  ierr = PetscInitializeNoArguments();
+  CHKERRQ(ierr);
+
+  /* Allocate and initialize the data structure and N-vectors. */
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2, thispe)) 
+    MPI_Abort(comm, 1);
+  data->pp = NULL;
+  data->da = NULL;
+  
+  /* Create the object that will manage the communication of 2D data */
+  ierr = DMDACreate2d(comm, 
+                      DM_BOUNDARY_NONE,  /* NONE, PERIODIC, GHOSTED */
+                      DM_BOUNDARY_NONE,
+                      DMDA_STENCIL_STAR, /* STAR, BOX */
+                      MX,                
+                      MY,                
+                      NPEX,              /* Set numbers or use PETSC_DECIDE */
+                      NPEY,              
+                      1,                 /* degrees of freedom per node */
+                      1,                 /* stencil width */
+                      NULL,              /* number of nodes per cell in x */
+                      NULL,              /* number of nodes per cell in y */
+                      &(data->da));
+  CHKERRQ(ierr);
+
+  /* Create PETSc vector */
+  ierr = DMCreateGlobalVector(data->da, &uvec);
+  CHKERRQ(ierr);
+
+  /* Make N_Vector wrapper for uvec */
+  uu = N_VMake_Petsc(&uvec);
+  if(check_flag((void *)uu, "N_VNew_Petsc", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  up = N_VClone(uu);
+  if(check_flag((void *)up, "N_VNew_Petsc", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  res = N_VClone(uu);
+  if(check_flag((void *)res, "N_VNew_Petsc", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  constraints = N_VClone(uu);
+  if(check_flag((void *)constraints, "N_VNew_Petsc", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  id = N_VClone(uu);
+  if(check_flag((void *)id, "N_VNew_Petsc", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  /* An N-vector to hold preconditioner. */
+  data->pp = N_VClone(uu); 
+  if(check_flag((void *)data->pp, "N_VNew_Petsc", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  /* Initialize the uu, up, id, and res profiles. */
+
+  SetInitialProfile(uu, up, id, res, data);
+  
+  /* Set constraints to all 1's for nonnegative solution values. */
+
+  N_VConst(ONE, constraints);
+  
+  t0 = ZERO; t1 = RCONST(0.01);
+  
+  /* Scalar relative and absolute tolerance. */
+
+  rtol = ZERO;
+  atol = RCONST(1.0e-3);
+
+  /* Call IDACreate and IDAMalloc to initialize solution. */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetSuppressAlg(mem, TRUE);
+  if(check_flag(&ier, "IDASetSuppressAlg", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetId(mem, id);
+  if(check_flag(&ier, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1, thispe)) MPI_Abort(comm, 1);
+  N_VDestroy_Petsc(constraints);  
+
+  ier = IDAInit(mem, resHeat, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+  
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDASpgmr to specify the linear solver. */
+
+  ier = IDASpgmr(mem, 0);
+  if(check_flag(&ier, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASpilsSetPreconditioner(mem, PsetupHeat, PsolveHeat);
+  if(check_flag(&ier, "IDASpilsSetPreconditioner", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Print output heading (on processor 0 only) and intial solution  */
+  
+  if (thispe == 0) PrintHeader(Neq, rtol, atol);
+  PrintOutput(thispe, mem, t0, uu); 
+  
+  /* Loop over tout, call IDASolve, print output. */
+
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) {
+
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(thispe, mem, tret, uu);
+
+  }
+  
+  /* Print remaining counters. */
+
+  if (thispe == 0) PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_Petsc(id);
+  N_VDestroy_Petsc(res);
+  N_VDestroy_Petsc(up);
+  N_VDestroy_Petsc(uu);
+
+  N_VDestroy_Petsc(data->pp);
+  ierr = DMDestroy(&data->da);
+  CHKERRQ(ierr);
+  free(data);
+  
+  ierr = VecDestroy(&uvec);
+  CHKERRQ(ierr);
+
+  ierr = PetscFinalize();
+  CHKERRQ(ierr);
+
+  MPI_Finalize();
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resHeat: heat equation system residual function                       
+ * This uses 5-point central differencing on the interior points, and    
+ * includes algebraic equations for the boundary values.                 
+ * So for each interior point, the residual component has the form       
+ *    res_i = u'_i - (central difference)_i                              
+ * while for each boundary point, it is res_i = u_i. 
+ *                    
+ */
+
+int resHeat(realtype tt, 
+            N_Vector uu, N_Vector up, N_Vector rr, 
+            void *user_data)
+{
+  PetscErrorCode ierr;
+  UserData       data = (UserData) user_data;
+  DM             da   = (DM) data->da;
+  PetscInt       i, j, Mx, My, xs, ys, xm, ym;
+  PetscReal      hx, hy, sx, sy;
+  PetscScalar    u, uxx, uyy, **uarray, **f, **udot;
+  Vec localU;
+  Vec *U    = N_VGetVector_Petsc(uu);
+  Vec *Udot = N_VGetVector_Petsc(up);
+  Vec *F    = N_VGetVector_Petsc(rr);
+
+  PetscFunctionBeginUser;
+  ierr = DMGetLocalVector(da, &localU);
+  CHKERRQ(ierr);
+  ierr = DMDAGetInfo(da,
+                     PETSC_IGNORE,
+                     &Mx,          /* Get global grid x size */
+                     &My,          /* Get global grid y size */
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE);
+
+  hx = 1.0/(PetscReal)(Mx-1); sx = 1.0/(hx*hx);
+  hy = 1.0/(PetscReal)(My-1); sy = 1.0/(hy*hy);
+
+  /*
+     Scatter ghost points to local vector,using the 2-step process
+        DMGlobalToLocalBegin(),DMGlobalToLocalEnd().
+     By placing code between these two statements, computations can be
+     done while messages are in transition.
+  */
+  ierr = DMGlobalToLocalBegin(da, *U, INSERT_VALUES, localU);
+  CHKERRQ(ierr);
+  ierr = DMGlobalToLocalEnd(da, *U, INSERT_VALUES, localU);
+  CHKERRQ(ierr);
+
+  /* Get pointers to vector data */
+  ierr = DMDAVecGetArrayRead(da, localU, &uarray);
+  CHKERRQ(ierr);
+  ierr = DMDAVecGetArray(da, *F, &f);
+  CHKERRQ(ierr);
+  ierr = DMDAVecGetArray(da, *Udot, &udot);
+  CHKERRQ(ierr);
+
+  /* Get local grid boundaries */
+  ierr = DMDAGetCorners(da, &xs, &ys, NULL, &xm, &ym, NULL);
+  CHKERRQ(ierr);
+
+  /* Compute function over the locally owned part of the grid */
+  for (j=ys; j<ys+ym; j++) {
+    for (i=xs; i<xs+xm; i++) {
+      /* Boundary conditions */
+      if (i == 0 || j == 0 || i == Mx-1 || j == My-1) {
+        f[j][i] = uarray[j][i]; /* F = U */
+      } else { /* Interior */
+        u = uarray[j][i];
+        /* 5-point stencil */
+        uxx = (-2.0*u + uarray[j][i-1] + uarray[j][i+1]);
+        uyy = (-2.0*u + uarray[j-1][i] + uarray[j+1][i]);
+        f[j][i] = udot[j][i] - (uxx*sx + uyy*sy);
+      }
+    }
+  }
+
+  /* Restore vectors */
+  ierr = DMDAVecRestoreArrayRead(da, localU, &uarray);
+  CHKERRQ(ierr);
+  ierr = DMDAVecRestoreArray(da, *F, &f);
+  CHKERRQ(ierr);
+  ierr = DMDAVecRestoreArray(da, *Udot, &udot);
+  CHKERRQ(ierr);
+  ierr = DMRestoreLocalVector(da, &localU);
+  CHKERRQ(ierr);
+  
+  PetscFunctionReturn(0);
+}
+
+
+/*
+ * PsetupHeat: setup for diagonal preconditioner for heatsk.    
+ *                                                                 
+ * The optional user-supplied functions PsetupHeat and          
+ * PsolveHeat together must define the left preconditoner        
+ * matrix P approximating the system Jacobian matrix               
+ *                   J = dF/du + cj*dF/du'                         
+ * (where the DAE system is F(t,u,u') = 0), and solve the linear   
+ * systems P z = r.   This is done in this case by keeping only    
+ * the diagonal elements of the J matrix above, storing them as    
+ * inverses in a vector pp, when computed in PsetupHeat, for    
+ * subsequent use in PsolveHeat.                                 
+ *                                                                 
+ * In this instance, only cj and data (user data structure, with    
+ * pp etc.) are used from the PsetupHeat argument list.         
+ *
+ */
+
+int PsetupHeat(realtype tt, 
+               N_Vector yy, N_Vector yp, N_Vector rr, 
+               realtype c_j, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  PetscErrorCode ierr;
+  PetscInt    i, j, Mx, My, xs, ys, xm, ym;
+  PetscReal   hx,hy,sx,sy;
+  PetscScalar pelinv;
+  PetscScalar **ppv;
+  UserData data = (UserData) user_data;
+  DM da = (DM) data->da;
+  Vec *ppvec = N_VGetVector_Petsc((data->pp));
+  
+  PetscFunctionBeginUser;
+  ierr = DMDAGetInfo(da,
+                     PETSC_IGNORE,
+                     &Mx,          /* Get global grid x size */
+                     &My,          /* Get global grid y size */
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE);
+  ierr = DMDAGetCorners(da, &xs, &ys, NULL, &xm, &ym, NULL);
+  CHKERRQ(ierr);
+
+  hx = 1.0/(PetscReal)(Mx-1); sx = 1.0/(hx*hx);
+  hy = 1.0/(PetscReal)(My-1); sy = 1.0/(hy*hy);
+  
+  pelinv = ONE/(2.0*(sx + sy) + c_j);
+
+  ierr = DMDAVecGetArray(da, *ppvec, &ppv);
+  CHKERRQ(ierr);
+
+  for (j=ys; j<ys+ym; j++) {
+    for (i=xs; i<xs+xm; i++) {
+      if (i == 0 || j == 0 || i == Mx-1 || j == My-1) {
+        ppv[j][i] = ONE;    /* Boundary */
+      } else {
+        ppv[j][i] = pelinv; /* Interior */
+      }
+    }
+  }
+
+  ierr = DMDAVecRestoreArray(da, *ppvec, &ppv);
+  CHKERRQ(ierr);
+  
+  PetscFunctionReturn(0);
+}
+
+
+/*
+ * PsolveHeat: solve preconditioner linear system.              
+ * This routine multiplies the input vector rvec by the vector pp 
+ * containing the inverse diagonal Jacobian elements (previously  
+ * computed in PsetupHeat), returning the result in zvec.      
+ */
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec,
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp)
+{
+  UserData data;
+
+  data = (UserData) user_data;
+  
+  N_VProd(data->pp, rvec, zvec);
+
+  return(0);
+
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+
+/*
+ * SetInitialProfile sets the initial values for the problem. 
+ */
+
+static int SetInitialProfile(N_Vector uu, N_Vector up, N_Vector id,
+                             N_Vector res, void *user_data)
+{
+  UserData       data = (UserData) user_data;
+  DM             da   = data->da;
+  PetscErrorCode ierr;
+  PetscInt       i, j, xs, ys, xm, ym, Mx, My;
+  PetscScalar    **u;
+  PetscScalar    **iddat;
+  PetscReal      hx, hy, x, y;
+  Vec *U     = N_VGetVector_Petsc(uu);
+  Vec *idvec = N_VGetVector_Petsc(id);
+
+  PetscFunctionBeginUser;
+  ierr = DMDAGetInfo(da,
+                     PETSC_IGNORE,
+                     &Mx,
+                     &My,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE,
+                     PETSC_IGNORE);
+
+  hx = 1.0/(PetscReal)(Mx-1);
+  hy = 1.0/(PetscReal)(My-1);
+
+  /* Get pointers to vector data */
+  ierr = DMDAVecGetArray(da, *U, &u);
+  CHKERRQ(ierr);
+
+  /* Get pointers to differentiable variable IDs */
+  ierr = DMDAVecGetArray(da, *idvec, &iddat);
+  CHKERRQ(ierr);
+
+  /* Get local grid boundaries */
+  ierr = DMDAGetCorners(da,&xs,&ys,NULL,&xm,&ym,NULL);
+  CHKERRQ(ierr);
+
+  /* Compute function over the locally owned part of the grid */
+  for (j=ys; j<ys+ym; j++) {
+    y = j*hy;
+    for (i=xs; i<xs+xm; i++) {
+      x = i*hx;
+      u[j][i] = 16.0 * x*(1.0 - x) * y*(1.0 - y);
+      if (i == 0 || j == 0 || i == Mx-1 || j == My-1) {
+        iddat[j][i] = 0.0; /* algebraic variables on the boundary */
+      } else { 
+        iddat[j][i] = 1.0; /* differential variables in the interior */
+      }
+    }
+  }
+
+  /* Restore vectors */
+  ierr = DMDAVecRestoreArray(da, *U, &u);
+  CHKERRQ(ierr);
+
+   /* Restore vectors */
+  ierr = DMDAVecRestoreArray(da, *idvec, &iddat);
+  CHKERRQ(ierr);
+
+  /* Initialize up. */
+  N_VConst(ZERO, up);    /* Initially set up = 0. */
+  
+  /* resHeat sets res to negative of ODE RHS values at interior points. */
+  resHeat(ZERO, uu, up, res, data);
+  
+  /* Copy -res into up to get correct initial up values. */
+  N_VScale(-ONE, res, up);
+  
+  PetscFunctionReturn(0);
+}
+
+
+/*
+ * Print first lines of output and table heading
+ */
+
+static void PrintHeader(long int Neq, realtype rtol, realtype atol)
+{ 
+  printf("\nidaHeat2D_kry_petsc: Heat equation, parallel example problem for IDA\n");
+  printf("            Discretized heat equation on 2D unit square.\n");
+  printf("            Zero boundary conditions,");
+  printf(" polynomial initial conditions.\n");
+  printf("            Mesh dimensions: %d x %d", MX, MY);
+  printf("        Total system size: %ld\n\n", Neq);
+  printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+  printf("        Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Constraints set to force all solution components >= 0. \n");
+  printf("SUPPRESSALG = TRUE to suppress local error testing on ");
+  printf("all boundary components. \n");
+  printf("Linear solver: IDASPGMR  ");
+  printf("Preconditioner: diagonal elements only.\n"); 
+  printf("This example uses PETSc vector.\n");
+  
+  /* Print output table heading and initial line of table. */
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time     umax       k  nst  nni  nli   nre   nreLS    h      npe nps\n");
+  printf("----------------------------------------------------------------------\n");
+}
+
+/*
+ * PrintOutput: print max norm of solution and current solver statistics
+ */
+
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu)
+{
+  realtype hused, umax;
+  long int nst, nni, nje, nre, nreLS, nli, npe, nps;
+  int kused, ier;
+
+  umax = N_VMaxNorm(uu);
+
+  if (id == 0) {
+
+    ier = IDAGetLastOrder(mem, &kused);
+    check_flag(&ier, "IDAGetLastOrder", 1, id);
+    ier = IDAGetNumSteps(mem, &nst);
+    check_flag(&ier, "IDAGetNumSteps", 1, id);
+    ier = IDAGetNumNonlinSolvIters(mem, &nni);
+    check_flag(&ier, "IDAGetNumNonlinSolvIters", 1, id);
+    ier = IDAGetNumResEvals(mem, &nre);
+    check_flag(&ier, "IDAGetNumResEvals", 1, id);
+    ier = IDAGetLastStep(mem, &hused);
+    check_flag(&ier, "IDAGetLastStep", 1, id);
+    ier = IDASpilsGetNumJtimesEvals(mem, &nje);
+    check_flag(&ier, "IDASpilsGetNumJtimesEvals", 1, id);
+    ier = IDASpilsGetNumLinIters(mem, &nli);
+    check_flag(&ier, "IDASpilsGetNumLinIters", 1, id);
+    ier = IDASpilsGetNumResEvals(mem, &nreLS);
+    check_flag(&ier, "IDASpilsGetNumResEvals", 1, id);
+    ier = IDASpilsGetNumPrecEvals(mem, &npe);
+    check_flag(&ier, "IDASpilsGetPrecEvals", 1, id);
+    ier = IDASpilsGetNumPrecSolves(mem, &nps);
+    check_flag(&ier, "IDASpilsGetNumPrecSolves", 1, id);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)  
+    printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2Le  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)  
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#else
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#endif
+
+  }
+}
+
+/*
+ * Print some final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int netf, ncfn, ncfl;
+
+  IDAGetNumErrTestFails(mem, &netf);
+  IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  IDASpilsGetNumConvFails(mem, &ncfl);
+
+  printf("\nError test failures            = %ld\n", netf);
+  printf("Nonlinear convergence failures = %ld\n", ncfn);
+  printf("Linear convergence failures    = %ld\n", ncfl);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", 
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/ida/petsc/idaHeat2D_kry_petsc.out b/examples/ida/petsc/idaHeat2D_kry_petsc.out
new file mode 100644
index 0000000..51bd511
--- /dev/null
+++ b/examples/ida/petsc/idaHeat2D_kry_petsc.out
@@ -0,0 +1,33 @@
+
+idaHeat2D_kry_petsc: Heat equation, parallel example problem for IDA
+            Discretized heat equation on 2D unit square.
+            Zero boundary conditions, polynomial initial conditions.
+            Mesh dimensions: 10 x 10        Total system size: 100
+
+Subgrid dimensions: 5 x 5        Processor array: 2 x 2
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+SUPPRESSALG = TRUE to suppress local error testing on all boundary components. 
+Linear solver: IDASPGMR  Preconditioner: diagonal elements only.
+This example uses PETSc vector.
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nli   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.00   9.75461e-01  0    0    0    0     0     0   0.00e+00    0   0
+  0.01   8.24106e-01  2   12   14    7    14     7   2.56e-03    8  21
+  0.02   6.88134e-01  3   15   18   12    18    12   5.12e-03    8  30
+  0.04   4.70711e-01  3   18   24   21    24    21   6.58e-03    9  45
+  0.08   2.16509e-01  3   22   29   30    29    30   1.32e-02    9  59
+  0.16   4.57687e-02  4   28   36   44    36    44   1.32e-02    9  80
+  0.32   2.09938e-03  4   35   44   67    44    67   2.63e-02   10 111
+  0.64   5.54028e-21  1   39   51   77    51    77   1.05e-01   12 128
+  1.28   0.00000e+00  1   41   53   77    53    77   4.21e-01   14 130
+  2.56   0.00000e+00  1   43   55   77    55    77   1.69e+00   16 132
+  5.12   0.00000e+00  1   44   56   77    56    77   3.37e+00   17 133
+ 10.24   0.00000e+00  1   45   57   77    57    77   6.74e+00   18 134
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
diff --git a/examples/ida/serial/CMakeLists.txt b/examples/ida/serial/CMakeLists.txt
new file mode 100644
index 0000000..c0b73ad
--- /dev/null
+++ b/examples/ida/serial/CMakeLists.txt
@@ -0,0 +1,199 @@
+# ---------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for IDA serial examples
+#
+# CSW 4/19/2014
+#    Added SUPERLUMT logic.
+
+
+# Add variable IDA_examples with the names of the serial IDA examples
+
+SET(IDA_examples
+  idaFoodWeb_bnd
+  idaHeat2D_bnd
+  idaHeat2D_kry
+  idaFoodWeb_kry
+  idaKrylovDemo_ls
+  idaRoberts_dns
+  idaSlCrank_dns
+  )
+
+SET(IDA_examples_SUPERLUMT
+  idaRoberts_sps
+  #idaHeat2D_sps ... not ready yet ... incorrect answer.
+  )
+
+SET(IDA_examples_KLU
+  idaRoberts_klu
+  idaHeat2D_klu
+  )
+
+# Add variable IDA_examples_BL with the names of the serial IDA examples
+# that use Lapack
+
+SET(IDA_examples_BL
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDA_LIB sundials_ida_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${IDA_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(PETSC_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_FOUND)
+
+# Add the build and install targets for each IDA example
+
+FOREACH(example ${IDA_examples})
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${IDA_examples})
+
+# If Lapack support is enabled, add the build and install targets for
+# the examples using Lapack
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${IDA_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${IDA_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+# If SUPERLUMT support is enabled, add the build and install targets for
+# the examples using SUPERLUMT
+IF(SUPERLUMT_FOUND)
+  FOREACH(example ${IDA_examples_SUPERLUMT})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${IDA_examples_SUPERLUMT})
+ENDIF(SUPERLUMT_FOUND)
+
+# If KLU support is enabled, add the build and install targets for
+# the examples using KLU
+IF(KLU_FOUND)
+  FOREACH(example ${IDA_examples_KLU})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${IDA_examples_KLU})
+ENDIF(KLU_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/serial)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDA")
+  SET(SOLVER_LIB "sundials_ida")
+  LIST2STRING(IDA_examples EXAMPLES)
+
+  IF(LAPACK_FOUND)
+    LIST2STRING(IDA_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  IF(KLU_FOUND)
+    LIST2STRING(IDA_examples_KLU EXAMPLES)
+  ENDIF(KLU_FOUND)
+
+  IF(SUPERLUMT_FOUND)
+    LIST2STRING(IDA_examples_SUPERLUMT EXAMPLES)
+  ENDIF(SUPERLUMT_FOUND)
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/ida/serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+  
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/ida/serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/ida/serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/ida/serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/ida/serial/README b/examples/ida/serial/README
new file mode 100644
index 0000000..98bca6c
--- /dev/null
+++ b/examples/ida/serial/README
@@ -0,0 +1,57 @@
+List of serial IDA examples
+
+  idaFoodWeb_bnd   : 2-D food web system, banded Jacobian
+  idaFoodWeb_kry   : 2-D food web system using Krylov solver
+  idaHeat2D_bnd    : 2-D heat equation, banded Jacobian
+  idaHeat2D_kry    : 2-D heat equation, diagonal preconditioner
+  idaKrylovDemo_ls : demonstration program with 3 Krylov solvers
+  idaRoberts_dns   : 3-species Robertson kinetics system
+  idaRoberts_klu   : Robertson system with KLU sparse linear solver
+  idaRoberts_sps   : Robertson system with SuperLUMT sparse linear solver
+  idaSlCrank_dns   : slider-crank example (stabilized index-2 DAE)
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/ida/serial/idaFoodWeb_bnd.c b/examples/ida/serial/idaFoodWeb_bnd.c
new file mode 100644
index 0000000..9c4c5aa
--- /dev/null
+++ b/examples/ida/serial/idaFoodWeb_bnd.c
@@ -0,0 +1,673 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4853 $
+ * $Date: 2016-08-03 16:27:46 -0700 (Wed, 03 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example program for IDA: Food web problem.
+ *
+ * This example program (serial version) uses the IDABAND linear 
+ * solver, and IDACalcIC for initial condition calculation.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c    + c  )  +  R (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *  a(i,i) = -AA   (all i)
+ *  a(i,j) = -GG   (i <= np , j >  np)
+ *  a(i,j) =  EE   (i >  np, j <= np)
+ *  all other a(i,j) = 0
+ *  b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i <= np)
+ *  b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i  > np)
+ *  d(i) = DPREY   (i <= np)
+ *  d(i) = DPRED   (i > np)
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative = 0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh.
+ *
+ * The DAE system is solved by IDA using the IDABAND linear solver.
+ * Output is printed at t = 0, .001, .01, .1, .4, .7, 1.
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems, Journal
+ *     of Applied Mathematics and Computation, Vol. 31 (May 1989),
+ *     pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_band.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+
+/* Problem Constants. */
+
+#define NPREY       1              /* No. of prey (= no. of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898)
+#define FOURPI      (RCONST(4.0)*PI)
+
+#define MX          20             /* MX = number of x mesh points      */
+#define MY          20             /* MY = number of y mesh points      */
+#define NSMX        (NUM_SPECIES * MX)
+#define NEQ         (NUM_SPECIES*MX*MY)
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a  */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a  */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a  */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b  */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d  */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d  */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns.  */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns.   */
+#define AX          RCONST(1.0)    /* Total range of x variable         */
+#define AY          RCONST(1.0)    /* Total range of y variable         */
+#define RTOL        RCONST(1.e-5)  /* Relative tolerance                */
+#define ATOL        RCONST(1.e-5)  /* Absolute tolerance                */
+#define NOUT        6              /* Number of output times            */
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values        */
+#define TADD        RCONST(0.3)    /* Increment for tout values         */
+#define ZERO        RCONST(0.)     
+#define ONE         RCONST(1.0)    
+
+/* 
+ * User-defined vector and accessor macro: IJ_Vptr.
+ * IJ_Vptr is defined in order to express the underlying 3-D structure of 
+ * the dependent variable vector from its underlying 1-D storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_S(vv, (i)*NUM_SPECIES + (j)*NSMX))
+
+/* Type: UserData.  Contains problem constants, etc. */
+
+typedef struct {
+  long int Neq, ns, np, mx, my;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES];
+  N_Vector rates;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+
+static int resweb(realtype time, N_Vector cc, N_Vector cp, N_Vector resval, 
+                  void *user_data);
+
+/* Prototypes for private Helper Functions. */
+
+static void InitUserData(UserData webdata);
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata);
+static void PrintHeader(long int mu, long int ml, realtype rtol, realtype atol);
+static void PrintOutput(void *mem, N_Vector c, realtype t);
+static void PrintFinalStats(void *mem);
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate, UserData webdata);
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+static realtype dotprod(long int size, realtype *x1, realtype *x2);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{ 
+  void *mem;
+  UserData webdata;
+  N_Vector cc, cp, id;
+  int iout, retval;
+  long int mu, ml;
+  realtype rtol, atol, t0, tout, tret;
+
+  mem = NULL;
+  webdata = NULL;
+  cc = cp = id = NULL;
+
+  /* Allocate and initialize user data block webdata. */
+
+  webdata = (UserData) malloc(sizeof *webdata);
+  webdata->rates = N_VNew_Serial(NEQ);
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+
+  InitUserData(webdata);
+
+  /* Allocate N-vectors and initialize cc, cp, and id. */
+
+  cc  = N_VNew_Serial(NEQ);
+  if(check_flag((void *)cc, "N_VNew_Serial", 0)) return(1);
+
+  cp  = N_VNew_Serial(NEQ);
+  if(check_flag((void *)cp, "N_VNew_Serial", 0)) return(1);
+
+  id  = N_VNew_Serial(NEQ);
+  if(check_flag((void *)id, "N_VNew_Serial", 0)) return(1);
+  
+  SetInitialProfiles(cc, cp, id, webdata);
+  
+  /* Set remaining inputs to IDAMalloc. */
+  
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+
+  /* Call IDACreate and IDAMalloc to initialize IDA. */
+  
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  retval = IDASetUserData(mem, webdata);
+  if(check_flag(&retval, "IDASetUserData", 1)) return(1);
+
+  retval = IDASetId(mem, id);
+  if(check_flag(&retval, "IDASetId", 1)) return(1);
+
+  retval = IDAInit(mem, resweb, t0, cc, cp);
+  if(check_flag(&retval, "IDAInit", 1)) return(1);
+
+  retval = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&retval, "IDASStolerances", 1)) return(1);
+
+  /* Call IDABand to specify the IDA linear solver. */
+
+  mu = ml = NSMX;
+  retval = IDABand(mem, NEQ, mu, ml);
+  if(check_flag(&retval, "IDABand", 1)) return(1);
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+
+  tout = RCONST(0.001);
+  retval = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&retval, "IDACalcIC", 1)) return(1);
+  
+  /* Print heading, basic parameters, and initial values. */
+
+  PrintHeader(mu, ml, rtol, atol);
+  PrintOutput(mem, cc, ZERO);
+  
+  /* Loop over iout, call IDASolve (normal mode), print selected output. */
+  
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    retval = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if(check_flag(&retval, "IDASolve", 1)) return(retval);
+    
+    PrintOutput(mem, cc, tret);
+    
+    if (iout < 3) tout *= TMULT; else tout += TADD;
+    
+  }
+  
+  /* Print final statistics and free memory. */  
+  
+  PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_Serial(cc);
+  N_VDestroy_Serial(cp);
+  N_VDestroy_Serial(id);
+
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_Serial(webdata->rates);
+  free(webdata);
+
+  return(0);
+}
+
+/* Define lines for readability in later routines */ 
+
+#define acoef  (webdata->acoef)
+#define bcoef  (webdata->bcoef)
+#define cox    (webdata->cox)
+#define coy    (webdata->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * resweb: System residual function for predator-prey system.
+ * This routine calls Fweb to get all the right-hand sides of the
+ * equations, then loads the residual vector accordingly,
+ * using cp in the case of prey species.                 
+ */
+
+static int resweb(realtype tt, N_Vector cc, N_Vector cp, 
+                  N_Vector res,  void *user_data)
+{
+  long int jx, jy, is, yloc, loc, np;
+  realtype *resv, *cpv;
+  UserData webdata;
+  
+  webdata = (UserData)user_data;
+  
+  cpv = N_VGetArrayPointer_Serial(cp);
+  resv = N_VGetArrayPointer_Serial(res);
+  np = webdata->np;
+  
+  /* Call Fweb to set res to vector of right-hand sides. */
+  Fweb(tt, cc, res, webdata);
+  
+  /* Loop over all grid points, setting residual values appropriately
+     for differential or algebraic components.                        */
+  
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np)
+          resv[loc+is] = cpv[loc+is] - resv[loc+is];
+        else
+          resv[loc+is] = -resv[loc+is];
+      }
+    }
+  }
+  
+  return(0);
+  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  webdata->mx = MX;
+  webdata->my = MY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->Neq= NEQ;
+  
+  /* Set up the coefficients a and b, and others found in the equations. */
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); dy2 = (webdata->dy)*(webdata->dy);
+  
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+    
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+    
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+  
+}
+
+/* 
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata)
+{
+  long int loc, yloc, is, jx, jy, np;
+  realtype xx, yy, xyfactor;
+  realtype *ccv, *cpv, *idv;
+  
+  ccv = N_VGetArrayPointer_Serial(cc);
+  cpv = N_VGetArrayPointer_Serial(cp);
+  idv = N_VGetArrayPointer_Serial(id);
+  np = webdata->np;
+  
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy * webdata->dy;
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx * webdata->dx;
+      xyfactor = RCONST(16.0)*xx*(ONE-xx)*yy*(ONE-yy);
+      xyfactor *= xyfactor;
+      loc = yloc + NUM_SPECIES*jx;
+       
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np) {
+          ccv[loc+is] = RCONST(10.0) + (realtype)(is+1) * xyfactor;
+          idv[loc+is] = ONE;
+        }
+        else {
+	  ccv[loc+is] = RCONST(1.0e5);
+          idv[loc+is] = ZERO;
+        }
+      }
+    }
+  }
+  
+  /* Set c' for the prey by calling the function Fweb. */
+  Fweb(ZERO, cc, cp, webdata);
+  
+  /* Set c' for predators to 0. */
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = np; is < NUM_SPECIES; is++) {
+        cpv[loc+is] = ZERO;
+      }
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(long int mu, long int ml, realtype rtol, realtype atol)
+{
+  printf("\nidaFoodWeb_bnd: Predator-prey DAE serial example problem for IDA \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     System size: %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDABAND,  Band parameters mu = %ld, ml = %ld\n",mu,ml);
+  printf("CalcIC called to correct initial predator concentrations.\n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+  
+}
+
+/* 
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of the concentrations
+ * are printed for the bottom left and top right grid points only.  
+ */
+
+static void PrintOutput(void *mem, N_Vector c, realtype t)
+{
+  int i, kused, flag;
+  long int nst;
+  realtype *c_bl, *c_tr, hused;
+
+  flag = IDAGetLastOrder(mem, &kused);
+  check_flag(&flag, "IDAGetLastOrder", 1);
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetLastStep(mem, &hused);
+  check_flag(&flag, "IDAGetLastStep", 1);
+  
+  c_bl = IJ_Vptr(c,0,0);
+  c_tr = IJ_Vptr(c,MX-1,MY-1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4Le %12.4Le   |\n",c_bl[i],c_tr[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#else
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#endif
+
+  printf("\n");
+}
+
+/* 
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{ 
+  long int nst, nre, nreLS, nni, nje, netf, ncfn;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1);
+  flag = IDADlsGetNumJacEvals(mem, &nje);
+  check_flag(&flag, "IDADlsGetNumJacEvals", 1);
+  flag = IDADlsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDADlsGetNumResEvals", 1);
+
+  printf("-----------------------------------------------------------\n");
+  printf("Final run statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+
+}
+
+/* 
+ * Fweb: Rate function for the food-web problem.                        
+ * This routine computes the right-hand sides of the system equations,   
+ * consisting of the diffusion term and interaction term.                
+ * The interaction term is computed by the function WebRates.            
+ */
+
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate,  
+                 UserData webdata)
+{ 
+  long int jx, jy, is, idyu, idyl, idxu, idxl;
+  realtype xx, yy, *cxy, *ratesxy, *cratexy, dcyli, dcyui, dcxli, dcxui;
+  
+  /* Loop over grid points, evaluate interaction vector (length ns),
+     form diffusion difference terms, and load crate.                    */
+  
+  for (jy = 0; jy < MY; jy++) {
+    yy = (webdata->dy) * jy ;
+    idyu = (jy!=MY-1) ? NSMX : -NSMX;
+    idyl = (jy!= 0  ) ? NSMX : -NSMX;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = (webdata->dx) * jx;
+      idxu = (jx!= MX-1) ?  NUM_SPECIES : -NUM_SPECIES;
+      idxl = (jx!=  0  ) ?  NUM_SPECIES : -NUM_SPECIES;
+      cxy = IJ_Vptr(cc,jx,jy);
+      ratesxy = IJ_Vptr(webdata->rates,jx,jy);
+      cratexy = IJ_Vptr(crate,jx,jy);
+      
+      /* Get interaction vector at this grid point. */
+      WebRates(xx, yy, cxy, ratesxy, webdata);
+      
+      /* Loop over species, do differencing, load crate segment. */
+      for (is = 0; is < NUM_SPECIES; is++) {
+        
+        /* Differencing in y. */
+        dcyli = *(cxy+is) - *(cxy - idyl + is) ;
+        dcyui = *(cxy + idyu + is) - *(cxy+is);
+        
+        /* Differencing in x. */
+        dcxli = *(cxy+is) - *(cxy - idxl + is);
+        dcxui = *(cxy + idxu +is) - *(cxy+is);
+        
+        /* Compute the crate values at (xx,yy). */
+        cratexy[is] = coy[is] * (dcyui - dcyli) +
+          cox[is] * (dcxui - dcxli) + ratesxy[is];
+        
+      } /* End is loop */
+    } /* End of jx loop */
+  } /* End of jy loop */
+  
+}
+
+/* 
+ * WebRates: Evaluate reaction rates at a given spatial point.
+ * At a given (x,y), evaluate the array of ns reaction terms R.
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+  
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+  
+  for (is = 0; is < NUM_SPECIES; is++)  
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+  
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(long int size, realtype *x1, realtype *x2)
+{
+  long int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+  return(temp);
+  
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/ida/serial/idaFoodWeb_bnd.out b/examples/ida/serial/idaFoodWeb_bnd.out
new file mode 100644
index 0000000..f188bd8
--- /dev/null
+++ b/examples/ida/serial/idaFoodWeb_bnd.out
@@ -0,0 +1,42 @@
+
+idaFoodWeb_bnd: Predator-prey DAE serial example problem for IDA 
+
+Number of species ns: 2     Mesh dimensions: 20 x 20     System size: 800
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDABAND,  Band parameters mu = 40, ml = 40
+CalcIC called to correct initial predator concentrations.
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  32  4   1.0823e-04
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6188e+02   1.9735e+02   | 127  4   1.4203e-04
+           1.6189e+06   1.9734e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 235  1   3.9160e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 238  1   3.1328e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 239  1   6.2656e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 239  1   6.2656e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+Final run statistics: 
+
+Number of steps                    = 239
+Number of residual evaluations     = 3339
+Number of Jacobian evaluations     = 36
+Number of nonlinear iterations     = 421
+Number of error test failures      = 3
+Number of nonlinear conv. failures = 0
diff --git a/examples/ida/serial/idaFoodWeb_kry.c b/examples/ida/serial/idaFoodWeb_kry.c
new file mode 100644
index 0000000..11be4a6
--- /dev/null
+++ b/examples/ida/serial/idaFoodWeb_kry.c
@@ -0,0 +1,808 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ * -----------------------------------------------------------------
+ * Example program for IDA: Food web problem, OpenMP, GMRES, 
+ * user-supplied preconditioner
+ *
+ * This example program uses the IDASPGMR as the linear 
+ * solver, and IDACalcIC for initial condition calculation.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c    + c  )  +  R (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *  a(i,i) = -AA   (all i)
+ *  a(i,j) = -GG   (i <= np , j >  np)
+ *  a(i,j) =  EE   (i >  np, j <= np)
+ *  all other a(i,j) = 0
+ *  b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i <= np)
+ *  b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i  > np)
+ *  d(i) = DPREY   (i <= np)
+ *  d(i) = DPRED   (i > np)
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative = 0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh.
+ *
+ * The DAE system is solved by IDA using the IDABAND linear solver.
+ * Output is printed at t = 0, .001, .01, .1, .4, .7, 1.
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems, Journal
+ *     of Applied Mathematics and Computation, Vol. 31 (May 1989),
+ *     pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_spgmr.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants. */
+
+#define NPREY       1              /* No. of prey (= no. of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898)
+#define FOURPI      (RCONST(4.0)*PI)
+
+#define MX          20             /* MX = number of x mesh points      */
+#define MY          20             /* MY = number of y mesh points      */
+#define NSMX        (NUM_SPECIES * MX)
+#define NEQ         (NUM_SPECIES*MX*MY)
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a  */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a  */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a  */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b  */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d  */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d  */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns.  */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns.   */
+#define AX          RCONST(1.0)    /* Total range of x variable         */
+#define AY          RCONST(1.0)    /* Total range of y variable         */
+#define RTOL        RCONST(1.e-5)  /* Relative tolerance                */
+#define ATOL        RCONST(1.e-5)  /* Absolute tolerance                */
+#define NOUT        6              /* Number of output times            */
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values        */
+#define TADD        RCONST(0.3)    /* Increment for tout values         */
+#define ZERO        RCONST(0.)     
+#define ONE         RCONST(1.0)    
+
+/* 
+ * User-defined vector and accessor macro: IJ_Vptr.
+ * IJ_Vptr is defined in order to express the underlying 3-D structure of 
+ * the dependent variable vector from its underlying 1-D storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_S(vv, (i)*NUM_SPECIES + (j)*NSMX))
+
+/* Type: UserData.  Contains problem constants, etc. */
+
+typedef struct {
+  long int Neq, ns, np, mx, my;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES];
+  realtype **PP[MX][MY];
+  long int *pivot[MX][MY];
+  N_Vector rates;
+  N_Vector ewt;
+  void *ida_mem;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+
+static int resweb(realtype time, N_Vector cc, N_Vector cp, N_Vector resval, 
+                  void *user_data);
+
+static int Precond(realtype tt,
+		   N_Vector cc, N_Vector cp, N_Vector rr, 
+		   realtype cj, void *user_data,
+		   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int PSolve(realtype tt, 
+		  N_Vector cc, N_Vector cp, N_Vector rr,
+		  N_Vector rvec, N_Vector zvec,
+		  realtype cj, realtype delta, void *user_data,
+		  N_Vector tmp);
+
+/* Prototypes for private Helper Functions. */
+
+static void InitUserData(UserData webdata);
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata);
+static void PrintHeader(long int maxl, realtype rtol, realtype atol);
+static void PrintOutput(void *mem, N_Vector c, realtype t);
+static void PrintFinalStats(void *mem);
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate, UserData webdata);
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+static realtype dotprod(long int size, realtype *x1, realtype *x2);
+static int check_flag(void *flagvalue, char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{ 
+  void *mem;
+  UserData webdata;
+  N_Vector cc, cp, id;
+  int iout, jx, jy, flag;
+  long int maxl;
+  realtype rtol, atol, t0, tout, tret;
+
+  mem = NULL;
+  webdata = NULL;
+  cc = cp = id = NULL;
+
+  /* Allocate and initialize user data block webdata. */
+
+  webdata = (UserData) malloc(sizeof *webdata);
+  webdata->rates = N_VNew_Serial(NEQ);
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  webdata->ewt = N_VNew_Serial(NEQ);
+  for (jx = 0; jx < MX; jx++) {
+    for (jy = 0; jy < MY; jy++) {
+      (webdata->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+      (webdata->PP)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+    }
+  }
+
+  InitUserData(webdata);
+
+  /* Allocate N-vectors and initialize cc, cp, and id. */
+
+  cc  = N_VNew_Serial(NEQ);
+  if(check_flag((void *)cc, "N_VNew_Serial", 0)) return(1);
+
+  cp  = N_VNew_Serial(NEQ);
+  if(check_flag((void *)cp, "N_VNew_Serial", 0)) return(1);
+
+  id  = N_VNew_Serial(NEQ);
+  if(check_flag((void *)id, "N_VNew_Serial", 0)) return(1);
+  
+  SetInitialProfiles(cc, cp, id, webdata);
+  
+  /* Set remaining inputs to IDAMalloc. */
+  
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+
+  /* Call IDACreate and IDAMalloc to initialize IDA. */
+  
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  flag = IDASetUserData(mem, webdata);
+  if(check_flag(&flag, "IDASetUserData", 1)) return(1);
+
+  flag = IDASetId(mem, id);
+  if(check_flag(&flag, "IDASetId", 1)) return(1);
+
+  flag = IDAInit(mem, resweb, t0, cc, cp);
+  if(check_flag(&flag, "IDAInit", 1)) return(1);
+
+  flag = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&flag, "IDASStolerances", 1)) return(1);
+
+  webdata->ida_mem = mem;
+
+  /* Call IDASpgmr to specify the IDA linear solver. */
+
+  maxl = 16;                    /* max dimension of the Krylov subspace */
+  flag = IDASpgmr(mem, maxl);
+  if(check_flag(&flag, "IDASpgmr", 1)) return(1);
+
+  flag = IDASpilsSetPreconditioner(mem, Precond, PSolve);
+  if(check_flag(&flag, "IDASpilsSetPreconditioner", 1)) return(1);
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+
+  tout = RCONST(0.001);
+  flag = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&flag, "IDACalcIC", 1)) return(1);
+  
+  /* Print heading, basic parameters, and initial values. */
+
+  PrintHeader(maxl, rtol, atol);
+  PrintOutput(mem, cc, ZERO);
+  
+  /* Loop over iout, call IDASolve (normal mode), print selected output. */
+  
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    flag = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if(check_flag(&flag, "IDASolve", 1)) return(flag);
+    
+    PrintOutput(mem, cc, tret);
+    
+    if (iout < 3) tout *= TMULT; else tout += TADD;
+    
+  }
+  
+  /* Print final statistics and free memory. */  
+  
+  PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_Serial(cc);
+  N_VDestroy_Serial(cp);
+  N_VDestroy_Serial(id);
+
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_Serial(webdata->rates);
+  N_VDestroy_Serial(webdata->ewt);
+  for (jx = 0; jx < MX; jx++) {
+    for (jy = 0; jy < MY; jy ++) {
+      destroyArray((webdata->pivot)[jx][jy]);
+      destroyMat((webdata->PP)[jx][jy]);
+    }
+  }
+  free(webdata);
+
+  return(0);
+}
+
+/* Define lines for readability in later routines */ 
+
+#define acoef  (webdata->acoef)
+#define bcoef  (webdata->bcoef)
+#define cox    (webdata->cox)
+#define coy    (webdata->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * resweb: System residual function for predator-prey system.
+ * This routine calls Fweb to get all the right-hand sides of the
+ * equations, then loads the residual vector accordingly,
+ * using cp in the case of prey species.                 
+ */
+
+static int resweb(realtype tt, N_Vector cc, N_Vector cp, 
+                  N_Vector res,  void *user_data)
+{
+  long int jx, jy, is, yloc, loc, np;
+  realtype *resv, *cpv;
+  UserData webdata;
+  
+  webdata = (UserData)user_data;
+  
+  cpv = NV_DATA_S(cp);
+  resv = NV_DATA_S(res);
+  np = webdata->np;
+  
+  /* Call Fweb to set res to vector of right-hand sides. */
+  Fweb(tt, cc, res, webdata);
+  
+  /* Loop over all grid points, setting residual values appropriately
+     for differential or algebraic components.                        */
+  
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np)
+          resv[loc+is] = cpv[loc+is] - resv[loc+is];
+        else
+          resv[loc+is] = -resv[loc+is];
+      }
+    }
+  }
+  
+  return(0);
+  
+}
+
+
+static int Precond(realtype tt, 
+		   N_Vector cc, N_Vector cp, N_Vector rr, 
+		   realtype cj, void *user_data,
+		   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int flag;
+  realtype uround, xx, yy, del_x, del_y;
+  realtype **Pxy, *ratesxy, *Pxycol, *cxy, *cpxy, *ewtxy, cctmp;
+  realtype inc, fac, sqru, perturb_rates[NUM_SPECIES];
+  int is, js, jx, jy, ret;
+  void *mem;
+  N_Vector ewt;
+  realtype hh;
+  UserData webdata;
+
+  webdata = (UserData) user_data;
+  del_x = webdata->dx;
+  del_y = webdata->dy;
+
+  uround = UNIT_ROUNDOFF;
+  sqru = SUNRsqrt(uround);
+
+  mem = webdata->ida_mem;
+  ewt = webdata->ewt;
+  flag = IDAGetErrWeights(mem, ewt);
+  if(check_flag(&flag, "IDAGetErrWeights", 1)) return(1);
+  flag = IDAGetCurrentStep(mem, &hh);
+  if(check_flag(&flag, "IDAGetCurrentStep", 1)) return(1);
+
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy * del_y;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx * del_x;
+      Pxy = (webdata->PP)[jx][jy];
+      cxy = IJ_Vptr(cc, jx, jy);
+      cpxy = IJ_Vptr(cp, jx, jy);
+      ewtxy = IJ_Vptr(ewt, jx, jy);
+      ratesxy = IJ_Vptr((webdata->rates), jx, jy);
+
+      for (js = 0; js < NUM_SPECIES; js++) {
+	inc = sqru*(SUNMAX(SUNRabs(cxy[js]), SUNMAX(hh*SUNRabs(cpxy[js]), ONE/ewtxy[js])));
+	cctmp = cxy[js];
+	cxy[js] += inc;
+	fac = -ONE/inc;
+
+	WebRates(xx, yy, cxy, perturb_rates, webdata);
+
+	Pxycol = Pxy[js];
+	
+	for (is = 0; is < NUM_SPECIES; is++)
+	  Pxycol[is] = (perturb_rates[is] - ratesxy[is])*fac;
+
+	if (js < 1) Pxycol[js] += cj;
+	
+	cxy[js] = cctmp;
+      }
+
+      ret = denseGETRF(Pxy, NUM_SPECIES, NUM_SPECIES, (webdata->pivot)[jx][jy]);
+
+      if (ret != 0) return(1);
+    }
+  }
+
+  return(0);
+
+}
+
+
+static int PSolve(realtype tt, 
+		  N_Vector cc, N_Vector cp, N_Vector rr, 
+		  N_Vector rvec, N_Vector zvec,
+		  realtype cj, realtype dalta, 
+		  void *user_data, N_Vector tmp) 
+{
+  realtype **Pxy, *zxy;
+  long int *pivot;
+  int jx, jy;
+  UserData webdata;
+  
+  webdata = (UserData) user_data;
+
+  N_VScale(ONE, rvec, zvec);
+
+  for (jx = 0; jx < MX; jx++) {
+    for (jy = 0; jy <MY; jy++) {
+      
+      zxy = IJ_Vptr(zvec, jx, jy);
+      Pxy = (webdata->PP)[jx][jy];
+      pivot = (webdata->pivot)[jx][jy];
+      denseGETRS(Pxy, NUM_SPECIES, pivot, zxy);
+    }
+  }
+  
+  return(0);
+
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  webdata->mx = MX;
+  webdata->my = MY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->Neq= NEQ;
+  
+  /* Set up the coefficients a and b, and others found in the equations. */
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); dy2 = (webdata->dy)*(webdata->dy);
+  
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+    
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+    
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+  
+}
+
+/* 
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata)
+{
+  long int loc, yloc, is, jx, jy, np;
+  realtype xx, yy, xyfactor;
+  realtype *ccv, *cpv, *idv;
+  
+  ccv = NV_DATA_S(cc);
+  cpv = NV_DATA_S(cp);
+  idv = NV_DATA_S(id);
+  np = webdata->np;
+  
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy * webdata->dy;
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx * webdata->dx;
+      xyfactor = RCONST(16.0)*xx*(ONE-xx)*yy*(ONE-yy);
+      xyfactor *= xyfactor;
+      loc = yloc + NUM_SPECIES*jx;
+       
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np) {
+          ccv[loc+is] = RCONST(10.0) + (realtype)(is+1) * xyfactor;
+          idv[loc+is] = ONE;
+        }
+        else {
+	  ccv[loc+is] = RCONST(1.0e5);
+          idv[loc+is] = ZERO;
+        }
+      }
+    }
+  }
+  
+  /* Set c' for the prey by calling the function Fweb. */
+  Fweb(ZERO, cc, cp, webdata);
+  
+  /* Set c' for predators to 0. */
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = np; is < NUM_SPECIES; is++) {
+        cpv[loc+is] = ZERO;
+      }
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(long int maxl, realtype rtol, realtype atol)
+{
+  printf("\nidaFoodWeb_kry: Predator-prey DAE serial example problem for IDA \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     System size: %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDASpgmr,  Spgmr parameters maxl = %ld\n",maxl);
+  printf("CalcIC called to correct initial predator concentrations.\n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+  
+}
+
+/* 
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of the concentrations
+ * are printed for the bottom left and top right grid points only.  
+ */
+
+static void PrintOutput(void *mem, N_Vector c, realtype t)
+{
+  int i, kused, flag;
+  long int nst;
+  realtype *c_bl, *c_tr, hused;
+
+  flag = IDAGetLastOrder(mem, &kused);
+  check_flag(&flag, "IDAGetLastOrder", 1);
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetLastStep(mem, &hused);
+  check_flag(&flag, "IDAGetLastStep", 1);
+  
+  c_bl = IJ_Vptr(c,0,0);
+  c_tr = IJ_Vptr(c,MX-1,MY-1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4Le %12.4Le   |\n",c_bl[i],c_tr[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#else
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#endif
+
+  printf("\n");
+}
+
+/* 
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{ 
+  long int nst, nre, sli, netf, nps, npevals, nrevalsLS;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDASpilsGetNumLinIters(mem, &sli);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1);
+  flag = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1);
+  flag = IDASpilsGetNumPrecEvals(mem, &npevals);
+  check_flag(&flag, "IDADlsGetNumJacEvals", 1);
+  flag = IDASpilsGetNumResEvals(mem, &nrevalsLS);
+  check_flag(&flag, "IDADlsGetNumResEvals", 1);
+
+  printf("-----------------------------------------------------------\n");
+  printf("Final run statistics: \n\n");
+  printf("Number of steps                       = %ld\n", nst);
+  printf("Number of residual evaluations        = %ld\n", nre);
+  printf("Number of Preconditioner evaluations  = %ld\n", npevals);
+  printf("Number of linear iterations           = %ld\n", sli);
+  printf("Number of error test failures         = %ld\n", netf);
+  printf("Number of precond solve fun called    = %ld\n", nps);
+
+}
+
+/* 
+ * Fweb: Rate function for the food-web problem.                        
+ * This routine computes the right-hand sides of the system equations,   
+ * consisting of the diffusion term and interaction term.                
+ * The interaction term is computed by the function WebRates.            
+ */
+
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate,  
+                 UserData webdata)
+{ 
+  long int jx, jy, is, idyu, idyl, idxu, idxl;
+  realtype xx, yy, *cxy, *ratesxy, *cratexy, dcyli, dcyui, dcxli, dcxui;
+  
+  /* Loop over grid points, evaluate interaction vector (length ns),
+     form diffusion difference terms, and load crate.                    */
+  
+  for (jy = 0; jy < MY; jy++) {
+    yy = (webdata->dy) * jy ;
+    idyu = (jy!=MY-1) ? NSMX : -NSMX;
+    idyl = (jy!= 0  ) ? NSMX : -NSMX;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = (webdata->dx) * jx;
+      idxu = (jx!= MX-1) ?  NUM_SPECIES : -NUM_SPECIES;
+      idxl = (jx!=  0  ) ?  NUM_SPECIES : -NUM_SPECIES;
+      cxy = IJ_Vptr(cc,jx,jy);
+      ratesxy = IJ_Vptr(webdata->rates,jx,jy);
+      cratexy = IJ_Vptr(crate,jx,jy);
+      
+      /* Get interaction vector at this grid point. */
+      WebRates(xx, yy, cxy, ratesxy, webdata);
+      
+      /* Loop over species, do differencing, load crate segment. */
+      for (is = 0; is < NUM_SPECIES; is++) {
+        
+        /* Differencing in y. */
+        dcyli = *(cxy+is) - *(cxy - idyl + is) ;
+        dcyui = *(cxy + idyu + is) - *(cxy+is);
+        
+        /* Differencing in x. */
+        dcxli = *(cxy+is) - *(cxy - idxl + is);
+        dcxui = *(cxy + idxu +is) - *(cxy+is);
+        
+        /* Compute the crate values at (xx,yy). */
+        cratexy[is] = coy[is] * (dcyui - dcyli) +
+          cox[is] * (dcxui - dcxli) + ratesxy[is];
+        
+      } /* End is loop */
+    } /* End of jx loop */
+  } /* End of jy loop */
+  
+}
+
+/* 
+ * WebRates: Evaluate reaction rates at a given spatial point.
+ * At a given (x,y), evaluate the array of ns reaction terms R.
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+  
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+  
+  for (is = 0; is < NUM_SPECIES; is++)  
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+  
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(long int size, realtype *x1, realtype *x2)
+{
+  long int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+  return(temp);
+  
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/ida/serial/idaFoodWeb_kry.out b/examples/ida/serial/idaFoodWeb_kry.out
new file mode 100644
index 0000000..09763cd
--- /dev/null
+++ b/examples/ida/serial/idaFoodWeb_kry.out
@@ -0,0 +1,42 @@
+
+idaFoodWeb_kry: Predator-prey DAE serial example problem for IDA 
+
+Number of species ns: 2     Mesh dimensions: 20 x 20     System size: 800
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDASpgmr,  Spgmr parameters maxl = 16
+CalcIC called to correct initial predator concentrations.
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  33  4   9.7404e-05
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6189e+02   1.9735e+02   |  86  4   1.7533e-04
+           1.6189e+06   1.9735e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 167  1   4.4884e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 169  1   1.7954e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 170  1   3.5907e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 171  1   7.1814e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+Final run statistics: 
+
+Number of steps                       = 171
+Number of residual evaluations        = 212
+Number of Preconditioner evaluations  = 26
+Number of linear iterations           = 998
+Number of error test failures         = 0
+Number of precond solve fun called    = 1210
diff --git a/examples/ida/serial/idaHeat2D_bnd.c b/examples/ida/serial/idaHeat2D_bnd.c
new file mode 100644
index 0000000..3828d2f
--- /dev/null
+++ b/examples/ida/serial/idaHeat2D_bnd.c
@@ -0,0 +1,407 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for IDA: 2D heat equation, serial, banded.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version uses the band solver IDABand, and IDACalcIC.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y).
+ * The PDE is treated with central differences on a uniform M x M
+ * grid. The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = M^2. Here M = 10.
+ *
+ * The system is solved with IDA using the banded linear system
+ * solver, half-bandwidths equal to M, and default
+ * difference-quotient Jacobian. For purposes of illustration,
+ * IDACalcIC is called to compute correct values at the boundary,
+ * given incorrect values as input initial guesses. The constraints
+ * u >= 0 are posed for all components. Output is taken at
+ * t = 0, .01, .02, .04, ..., 10.24. (Output at t = 0 is for
+ * IDACalcIC cost statistics only.)
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_band.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+
+/* Problem Constants */
+
+#define NOUT  11
+#define MGRID 10
+#define NEQ   MGRID*MGRID
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+#define BVAL  RCONST(0.1)
+
+/* Type: UserData */
+
+typedef struct {
+  long int mm;
+  realtype dx;
+  realtype coeff;
+} *UserData;
+
+/* Prototypes of functions called by IDA */
+
+int heatres(realtype tres, N_Vector uu, N_Vector up, N_Vector resval, void *user_data);
+
+/* Prototypes of private functions */
+
+static void PrintHeader(realtype rtol, realtype atol);
+static void PrintOutput(void *mem, realtype t, N_Vector u);
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector id, N_Vector res);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  UserData data;
+  N_Vector uu, up, constraints, id, res;
+  int ier, iout;
+  long int mu, ml, netf, ncfn;
+  realtype rtol, atol, t0, t1, tout, tret;
+  
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = id = res = NULL;
+
+  /* Create vectors uu, up, res, constraints, id. */
+  uu = N_VNew_Serial(NEQ);
+  if(check_flag((void *)uu, "N_VNew_Serial", 0)) return(1);
+  up = N_VNew_Serial(NEQ);
+  if(check_flag((void *)up, "N_VNew_Serial", 0)) return(1);
+  res = N_VNew_Serial(NEQ);
+  if(check_flag((void *)res, "N_VNew_Serial", 0)) return(1);
+  constraints = N_VNew_Serial(NEQ);
+  if(check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+  id = N_VNew_Serial(NEQ);
+  if(check_flag((void *)id, "N_VNew_Serial", 0)) return(1);
+
+  /* Create and load problem data block. */
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  data->mm = MGRID;
+  data->dx = ONE/(MGRID - ONE);
+  data->coeff = ONE/( (data->dx) * (data->dx) );
+
+  /* Initialize uu, up, id. */
+  SetInitialProfile(data, uu, up, id, res);
+
+  /* Set constraints to all 1's for nonnegative solution values. */
+  N_VConst(ONE, constraints);
+
+  /* Set remaining input parameters. */
+  t0   = ZERO;
+  t1   = RCONST(0.01);
+  rtol = ZERO;
+  atol = RCONST(1.0e-3);
+
+  /* Call IDACreate and IDAMalloc to initialize solution */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1)) return(1);
+
+  ier = IDASetId(mem, id);
+  if(check_flag(&ier, "IDASetId", 1)) return(1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1)) return(1);
+  N_VDestroy_Serial(constraints);
+
+  ier = IDAInit(mem, heatres, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1)) return(1);
+
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1)) return(1);
+
+  /* Call IDABand to specify the linear solver. */
+  mu = MGRID; ml = MGRID;
+  ier = IDABand(mem, NEQ, mu, ml);
+  if(check_flag(&ier, "IDABand", 1)) return(1);
+ 
+  /* Call IDACalcIC to correct the initial values. */
+  
+  ier = IDACalcIC(mem, IDA_YA_YDP_INIT, t1);
+  if(check_flag(&ier, "IDACalcIC", 1)) return(1);
+
+  /* Print output heading. */
+  PrintHeader(rtol, atol);
+  
+  PrintOutput(mem, t0, uu);
+
+
+  /* Loop over output times, call IDASolve, and print results. */
+  
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) {
+    
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1)) return(1);
+
+    PrintOutput(mem, tret, uu);
+  
+  }
+  
+  /* Print remaining counters and free memory. */
+  ier = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&ier, "IDAGetNumErrTestFails", 1);
+  ier = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&ier, "IDAGetNumNonlinSolvConvFails", 1);
+  printf("\n netf = %ld,   ncfn = %ld \n", netf, ncfn);
+
+  IDAFree(&mem);
+  N_VDestroy_Serial(uu);
+  N_VDestroy_Serial(up);
+  N_VDestroy_Serial(id);
+  N_VDestroy_Serial(res);
+  free(data);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY KINSOL
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * heatres: heat equation system residual function                       
+ * This uses 5-point central differencing on the interior points, and    
+ * includes algebraic equations for the boundary values.                 
+ * So for each interior point, the residual component has the form       
+ *    res_i = u'_i - (central difference)_i                              
+ * while for each boundary point, it is res_i = u_i.                     
+ */
+
+int heatres(realtype tres, N_Vector uu, N_Vector up, N_Vector resval, 
+            void *user_data)
+{
+  long int mm, i, j, offset, loc;
+  realtype *uv, *upv, *resv, coeff;
+  UserData data;
+  
+  uv = N_VGetArrayPointer_Serial(uu); upv = N_VGetArrayPointer_Serial(up); resv = N_VGetArrayPointer_Serial(resval);
+
+  data = (UserData)user_data;
+  mm = data->mm;
+  coeff = data->coeff;
+  
+  /* Initialize resval to uu, to take care of boundary equations. */
+  N_VScale(ONE, uu, resval);
+  
+  /* Loop over interior points; set res = up - (central difference). */
+  for (j = 1; j < mm-1; j++) {
+    offset = mm*j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      resv[loc] = upv[loc] - coeff * 
+	  (uv[loc-1] + uv[loc+1] + uv[loc-mm] + uv[loc+mm] - RCONST(4.0)*uv[loc]);
+    }
+  }
+  
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * SetInitialProfile: routine to initialize u, up, and id vectors.       
+ */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector id, N_Vector res)
+{
+  realtype xfact, yfact, *udata, *updata, *iddata;
+  long int mm, mm1, i, j, offset, loc;
+  
+  mm = data->mm;
+  mm1 = mm - 1;
+  
+  udata = N_VGetArrayPointer_Serial(uu);
+  updata = N_VGetArrayPointer_Serial(up);
+  iddata = N_VGetArrayPointer_Serial(id);
+
+  /* Initialize id to 1's. */
+  N_VConst(ONE, id);
+
+  /* Initialize uu on all grid points. */ 
+  for (j = 0; j < mm; j++) {
+    yfact = data->dx * j;
+    offset = mm*j;
+    for (i = 0;i < mm; i++) {
+      xfact = data->dx * i;
+      loc = offset + i;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+    }
+  }
+  
+  /* Initialize up vector to 0. */
+  N_VConst(ZERO, up);
+
+  /* heatres sets res to negative of ODE RHS values at interior points. */
+  heatres(ZERO, uu, up, res, data);
+  
+  /* Copy -res into up to get correct interior initial up values. */
+  N_VScale(-ONE, res, up);
+
+  /* Finally, set values of u, up, and id at boundary points. */
+  for (j = 0; j < mm; j++) {
+    offset = mm*j;
+    for (i = 0;i < mm; i++) {
+      loc = offset + i;
+      if (j == 0 || j == mm1 || i == 0 || i == mm1 ) {
+        udata[loc] = BVAL; updata[loc] = ZERO; iddata[loc] = ZERO; }
+    }
+  }
+  
+  return(0);
+
+}
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, realtype atol)
+{
+  printf("\nidaHeat2D_bnd: Heat equation, serial example problem for IDA\n");
+  printf("          Discretized heat equation on 2D unit square.\n");
+  printf("          Zero boundary conditions,");
+  printf(" polynomial initial conditions.\n");
+  printf("          Mesh dimensions: %d x %d", MGRID, MGRID);
+  printf("        Total system size: %d\n\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Constraints set to force all solution components >= 0. \n");
+  printf("Linear solver: IDABAND, banded direct solver \n");
+  printf("       difference quotient Jacobian, half-bandwidths = %d \n",MGRID);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("IDACalcIC called with input boundary values = %Lg \n",BVAL);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("IDACalcIC called with input boundary values = %g \n",BVAL);
+#else
+  printf("IDACalcIC called with input boundary values = %g \n",BVAL);
+#endif
+  /* Print output table heading and initial line of table. */
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time       umax     k  nst  nni  nje   nre   nreLS    h      \n" );
+  printf(" .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . \n");
+}
+
+/*
+ * Print Output
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector uu)
+{
+  int ier;
+  realtype umax, hused;
+  long int nst, nni, nje, nre, nreLS;
+  int kused;
+
+  umax = N_VMaxNorm(uu);
+  
+  ier = IDAGetLastOrder(mem, &kused);
+  check_flag(&ier, "IDAGetLastOrder", 1);
+  ier = IDAGetNumSteps(mem, &nst);
+  check_flag(&ier, "IDAGetNumSteps", 1);
+  ier = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&ier, "IDAGetNumNonlinSolvIters", 1);
+  ier = IDAGetNumResEvals(mem, &nre);
+  check_flag(&ier, "IDAGetNumResEvals", 1);
+  ier = IDAGetLastStep(mem, &hused);
+  check_flag(&ier, "IDAGetLastStep", 1);
+  ier = IDADlsGetNumJacEvals(mem, &nje);
+  check_flag(&ier, "IDADlsGetNumJacEvals", 1);
+  ier = IDADlsGetNumResEvals(mem, &nreLS);
+  check_flag(&ier, "IDADlsGetNumResEvals", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2Le \n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e \n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused);
+#else
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e \n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused);
+#endif
+
+}
+
+/* 
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/ida/serial/idaHeat2D_bnd.out b/examples/ida/serial/idaHeat2D_bnd.out
new file mode 100644
index 0000000..0d98fae
--- /dev/null
+++ b/examples/ida/serial/idaHeat2D_bnd.out
@@ -0,0 +1,30 @@
+
+idaHeat2D_bnd: Heat equation, serial example problem for IDA
+          Discretized heat equation on 2D unit square.
+          Zero boundary conditions, polynomial initial conditions.
+          Mesh dimensions: 10 x 10        Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+Linear solver: IDABAND, banded direct solver 
+       difference quotient Jacobian, half-bandwidths = 10 
+IDACalcIC called with input boundary values = 0.1 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time       umax     k  nst  nni  nje   nre   nreLS    h      
+ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . 
+  0.00   9.75461e-01  0    0    1    2     3    42   1.00e-05 
+  0.01   8.24113e-01  2   12   15   10    17   210   2.56e-03 
+  0.02   6.88124e-01  3   15   19   10    21   210   5.12e-03 
+  0.04   4.71054e-01  3   19   23   10    25   210   5.12e-03 
+  0.08   2.16451e-01  3   23   28   11    30   231   1.02e-02 
+  0.16   4.50382e-02  4   28   35   12    37   252   2.05e-02 
+  0.32   2.14520e-03  5   34   43   13    45   273   4.10e-02 
+  0.64   2.89374e-18  1   39   52   15    54   315   1.64e-01 
+  1.28   1.17136e-32  1   41   54   17    56   357   6.55e-01 
+  2.56   1.31711e-35  1   42   55   18    57   378   1.31e+00 
+  5.12   1.18294e-37  1   43   56   19    58   399   2.62e+00 
+ 10.24   1.26706e-39  1   44   57   20    59   420   5.24e+00 
+
+ netf = 0,   ncfn = 0 
diff --git a/examples/ida/serial/idaHeat2D_klu.c b/examples/ida/serial/idaHeat2D_klu.c
new file mode 100644
index 0000000..b63468b
--- /dev/null
+++ b/examples/ida/serial/idaHeat2D_klu.c
@@ -0,0 +1,747 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4853 $
+ * $Date: 2016-08-03 16:27:46 -0700 (Wed, 03 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Chris Nguyen @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for IDA: 2D heat equation, serial, sparse. 
+ * Based on idaHeat2D_bnd.c and idaRoberts_klu.c
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version uses the band solver IDABand, and IDACalcIC.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y).
+ * The PDE is treated with central differences on a uniform MGRID x MGRID
+ * grid. The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = MGRID^2. Here MGRID = 10.
+ *
+ * The system is solved with IDA using the banded linear system
+ * solver and default difference-quotient Jacobian. 
+ * For purposes of illustration,
+ * IDACalcIC is called to compute correct values at the boundary,
+ * given incorrect values as input initial guesses. The constraints
+ * u >= 0 are posed for all components. Output is taken at
+ * t = 0, .01, .02, .04, ..., 10.24. (Output at t = 0 is for
+ * IDACalcIC cost statistics only.)
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_klu.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+
+/* Problem Constants */
+#define NOUT  11
+#define MGRID 10
+#define NEQ   MGRID*MGRID
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+#define BVAL  RCONST(0.0)
+#define TOTAL 4*MGRID+8*(MGRID-2)+(MGRID-4)*(MGRID+4*(MGRID-2)) /* total num of nonzero elements */
+
+/* Type: UserData */
+
+typedef struct {
+  long int mm;
+  realtype dx;
+  realtype coeff;
+} *UserData;
+
+/* Prototypes of functions called by IDA */
+
+int heatres(realtype tres, N_Vector uu, N_Vector up, 
+	    N_Vector resval, void *user_data);
+
+int jacHeat(realtype tt,  realtype cj, 
+	    N_Vector yy, N_Vector yp, N_Vector resvec,
+	    SlsMat JacMat, void *user_data,
+	    N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+/* Exact same setup as jacHeat. Function needed for special case MGRID=3  */
+int jacHeat3(realtype tt,  realtype cj, 
+	    N_Vector yy, N_Vector yp, N_Vector resvec,
+	    SlsMat JacMat, void *user_data,
+	    N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+/* Prototypes of private functions */
+
+static void PrintHeader(realtype rtol, realtype atol);
+static void PrintOutput(void *mem, realtype t, N_Vector u);
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector id, N_Vector res);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  UserData data;
+  N_Vector uu, up, constraints, id, res;  /* uu is u, up is du/dt */
+  int ier, iout;
+  long int netf, ncfn;
+  realtype rtol, atol, t0, t1, tout, tret;
+
+  int nnz; /* number of non-zeroes  */
+  
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = id = res = NULL;
+
+  /* Create vectors uu, up, res, constraints, id. */
+  uu = N_VNew_Serial(NEQ);
+  if(check_flag((void *)uu, "N_VNew_Serial", 0)) return(1);
+  up = N_VNew_Serial(NEQ);
+  if(check_flag((void *)up, "N_VNew_Serial", 0)) return(1);
+  res = N_VNew_Serial(NEQ);
+  if(check_flag((void *)res, "N_VNew_Serial", 0)) return(1);
+  constraints = N_VNew_Serial(NEQ);
+  if(check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+  id = N_VNew_Serial(NEQ); /* differentiate between algebraic and differential */
+  if(check_flag((void *)id, "N_VNew_Serial", 0)) return(1);
+
+  /* Create and load problem data block. */
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  data->mm = MGRID;
+  data->dx = ONE/(MGRID - ONE);
+  data->coeff = ONE/( (data->dx) * (data->dx) );
+
+  /* Initialize uu, up, id. */
+  SetInitialProfile(data, uu, up, id, res);
+
+  /* Set constraints to all 1's for nonnegative solution values. */
+  N_VConst(ONE, constraints);
+
+  /* Set remaining input parameters. */
+  t0   = ZERO;
+  t1   = RCONST(0.01);
+  rtol = ZERO;
+  atol = RCONST(1.0e-8);
+
+  /* Call IDACreate and IDAMalloc to initialize solution */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1)) return(1);
+
+  /* Sets up which components are algebraic or differential */
+  ier = IDASetId(mem, id); 
+  if(check_flag(&ier, "IDASetId", 1)) return(1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1)) return(1);
+  N_VDestroy_Serial(constraints);
+
+  ier = IDAInit(mem, heatres, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1)) return(1);
+
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1)) return(1);
+
+  /* Call IDAKLU and set up the linear solver  */
+  nnz = NEQ*NEQ;
+  ier = IDAKLU(mem, NEQ, nnz, CSC_MAT);
+  if(check_flag(&ier, "IDAKLU", 1)) return(1);
+  /* check size of Jacobian matrix  */
+  if(MGRID >= 4){
+    ier = IDASlsSetSparseJacFn(mem, jacHeat);
+  }
+  /* special case MGRID=3  */
+  else if(MGRID==3){
+    ier = IDASlsSetSparseJacFn(mem, jacHeat3);
+  }
+  /* MGRID<=2 is pure boundary points, nothing to solve  */
+  else{
+    printf("MGRID size is too small to run.\n");
+    return(1);
+  }
+  if(check_flag(&ier, "IDASlsSetSparseJacFn", 1)) return(1);
+
+  /* Call IDACalcIC to correct the initial values. */
+  ier = IDACalcIC(mem, IDA_YA_YDP_INIT, t1);
+  if(check_flag(&ier, "IDACalcIC", 1)) return(1);
+
+  /* Print output heading. */
+  PrintHeader(rtol, atol);
+  
+  PrintOutput(mem, t0, uu);
+
+
+  /* Loop over output times, call IDASolve, and print results. */
+  
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) {
+    
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1)) return(1);
+
+    PrintOutput(mem, tret, uu);
+  
+  }
+  
+  /* Print remaining counters and free memory. */
+  ier = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&ier, "IDAGetNumErrTestFails", 1);
+  ier = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&ier, "IDAGetNumNonlinSolvConvFails", 1);
+  printf("\n netf = %ld,   ncfn = %ld \n", netf, ncfn);
+
+  IDAFree(&mem);
+  N_VDestroy_Serial(uu);
+  N_VDestroy_Serial(up);
+  N_VDestroy_Serial(id);
+  N_VDestroy_Serial(res);
+  free(data);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * heatres: heat equation system residual function                       
+ * This uses 5-point central differencing on the interior points, and    
+ * includes algebraic equations for the boundary values.                 
+ * So for each interior point, the residual component has the form       
+ *    res_i = u'_i - (central difference)_i                              
+ * while for each boundary point, it is res_i = u_i.                     
+ */
+
+int heatres(realtype tres, N_Vector uu, N_Vector up, N_Vector resval, 
+            void *user_data)
+{
+  long int mm, i, j, offset, loc;
+  realtype *uv, *upv, *resv, coeff;
+  UserData data;
+  
+  uv = N_VGetArrayPointer_Serial(uu); upv = N_VGetArrayPointer_Serial(up); resv = N_VGetArrayPointer_Serial(resval);
+
+  data = (UserData)user_data;
+  mm = data->mm;
+  coeff = data->coeff;
+  
+  /* Initialize resval to uu, to take care of boundary equations. */
+  N_VScale(ZERO, uu, resval);
+  
+  /* Loop over interior points; set res = up - (central difference). */
+  for (j = 1; j < mm-1; j++) {
+    offset = mm*j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      resv[loc] = upv[loc] - coeff * 
+	  (uv[loc-1] + uv[loc+1] + uv[loc-mm] + uv[loc+mm] - RCONST(4.0)*uv[loc]);
+    }
+  }
+  
+  return(0);
+
+}
+
+/* Jacobian matrix setup for MGRID=3  */
+int jacHeat3(realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec,
+	   SlsMat JacMat, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  realtype dx =  ONE/(MGRID - ONE);
+  realtype beta = RCONST(4.0)/(dx*dx) + cj;
+  
+  int *colptrs   = (*JacMat->colptrs);
+  int *rowvals   = (*JacMat->rowvals);
+  realtype *data = JacMat->data;
+
+  SparseSetMatToZero(JacMat); /* initialize Jacobian matrix */
+
+  /*
+   * set up number of elements in each column 
+   */
+  colptrs[0]  = 0;
+  colptrs[1]  = 1;
+  colptrs[2]  = 3;
+  colptrs[3]  = 4;
+  colptrs[4]  = 6;
+  colptrs[5]  = 7;
+  colptrs[6]  = 9;
+  colptrs[7]  = 10;
+  colptrs[8]  = 12;
+  colptrs[9]  = 13;
+  
+  /*
+   * set up data and row values stored 
+   */
+
+  data[0] = ONE;
+  rowvals[0] = 0;  
+  data[1] = ONE;
+  rowvals[1] = 1;
+  data[2] = -ONE/(dx*dx);
+  rowvals[2] = 4;  
+  data[3] = ONE;
+  rowvals[3] = 2;
+  data[4] = ONE;
+  rowvals[4] = 3;
+  data[5] = -ONE/(dx*dx);
+  rowvals[5] = 4;  
+  data[6] = beta;
+  rowvals[6] = 4;
+  data[7] = -ONE/(dx*dx);
+  rowvals[7] = 4;
+  data[8] = ONE;
+  rowvals[8] = 5;
+  data[9] = ONE;
+  rowvals[9] = 6; 
+  data[10] = -ONE/(dx*dx);
+  rowvals[10] = 4;
+  data[11] = ONE;
+  rowvals[11] = 7;
+  data[12] = ONE;
+  rowvals[12] = 8;
+
+  return(0);
+}
+
+/* Jacobian matrix setup for MGRID>=4  */
+int jacHeat(realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec,
+	   SlsMat JacMat, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  realtype *yval;
+  realtype dx =  ONE/(MGRID - ONE);
+  realtype beta = RCONST(4.0)/(dx*dx) + cj;
+  int i,j, repeat=0;
+
+  int *colptrs   = (*JacMat->colptrs);
+  int *rowvals   = (*JacMat->rowvals);
+  realtype *data = JacMat->data;
+
+  yval = N_VGetArrayPointer_Serial(yy);
+
+  SparseSetMatToZero(JacMat); /* initialize Jacobian matrix  */
+
+  /* 
+   *-----------------------------------------------
+   * set up number of elements in each column 
+   *-----------------------------------------------
+   */
+  
+  /**** first column block ****/
+  colptrs[0] = 0;
+  colptrs[1] = 1;
+  /* count by twos in the middle  */
+  for(i=2;i<MGRID;i++) colptrs[i] = (colptrs[i-1])+2;
+  colptrs[MGRID] = 2*MGRID-2;
+
+  /**** second column block ****/
+  colptrs[MGRID+1] = 2*MGRID;
+  colptrs[MGRID+2] = 2*MGRID+3;
+  /* count by fours in the middle */
+  for(i=0;i<MGRID-4;i++) colptrs[MGRID+3+i] = (colptrs[MGRID+3+i-1])+4;
+  colptrs[2*MGRID-1] = 2*MGRID+4*(MGRID-2)-2;
+  colptrs[2*MGRID] = 2*MGRID+4*(MGRID-2);
+  
+  /**** repeated (MGRID-4 times) middle column blocks ****/
+  for(i=0;i<MGRID-4;i++){
+    colptrs[2*MGRID+1+repeat]   = (colptrs[2*MGRID+1+repeat-1])+2;
+    colptrs[2*MGRID+1+repeat+1] = (colptrs[2*MGRID+1+repeat])+4;
+    
+    /* count by fives in the middle */
+    for(j=0;j<MGRID-4;j++) colptrs[2*MGRID+1+repeat+2+j] = 
+			  (colptrs[2*MGRID+1+repeat+1+j])+5;
+   
+    colptrs[2*MGRID+1+repeat+(MGRID-4)+2] = (colptrs[2*MGRID+1+repeat+(MGRID-4)+1])+4;
+    colptrs[2*MGRID+1+repeat+(MGRID-4)+3] = (colptrs[2*MGRID+1+repeat+(MGRID-4)+2])+2;  
+
+    repeat+=MGRID; /* shift that accounts for accumulated number of columns */
+  }
+  
+  /**** last-1 column block ****/
+  colptrs[MGRID*MGRID-2*MGRID+1] = TOTAL-2*MGRID-4*(MGRID-2)+2;
+  colptrs[MGRID*MGRID-2*MGRID+2] = TOTAL-2*MGRID-4*(MGRID-2)+5;
+  /* count by fours in the middle */
+  for(i=0;i<MGRID-4;i++) colptrs[MGRID*MGRID-2*MGRID+3+i] = 
+			(colptrs[MGRID*MGRID-2*MGRID+3+i-1])+4;
+  colptrs[MGRID*MGRID-MGRID-1] = TOTAL-2*MGRID;
+  colptrs[MGRID*MGRID-MGRID]   = TOTAL-2*MGRID+2;
+
+  /**** last column block ****/
+  colptrs[MGRID*MGRID-MGRID+1] = TOTAL-MGRID-(MGRID-2)+1;
+  /* count by twos in the middle */
+  for(i=0;i<MGRID-2;i++) colptrs[MGRID*MGRID-MGRID+2+i] = 
+			(colptrs[MGRID*MGRID-MGRID+2+i-1])+2;
+  colptrs[MGRID*MGRID-1] = TOTAL-1;
+  colptrs[MGRID*MGRID]   = TOTAL;
+  
+
+  /*
+   *-----------------------------------------------
+   * set up data stored
+   *-----------------------------------------------
+   */
+
+  /**** first column block ****/
+  data[0] = ONE;
+  /* alternating pattern in data, separate loop for each pattern  */
+  for(i=1;i<MGRID+(MGRID-2)  ;i+=2) data[i] = ONE;
+  for(i=2;i<MGRID+(MGRID-2)-1;i+=2) data[i] = -ONE/(dx*dx);
+
+  /**** second column block ****/
+  data[MGRID+MGRID-2] = ONE;
+  data[MGRID+MGRID-1] = -ONE/(dx*dx);
+  data[MGRID+MGRID]   = beta;
+  data[MGRID+MGRID+1] = -ONE/(dx*dx);
+  data[MGRID+MGRID+2] = -ONE/(dx*dx);
+  /* middle data elements */
+  for(i=0;i<(MGRID-4);i++) data[MGRID+MGRID+3+4*i] = -ONE/(dx*dx);
+  for(i=0;i<(MGRID-4);i++) data[MGRID+MGRID+4+4*i] = beta;
+  for(i=0;i<(MGRID-4);i++) data[MGRID+MGRID+5+4*i] = -ONE/(dx*dx);
+  for(i=0;i<(MGRID-4);i++) data[MGRID+MGRID+6+4*i] = -ONE/(dx*dx);
+  data[2*MGRID+4*(MGRID-2)-5] = -ONE/(dx*dx);
+  data[2*MGRID+4*(MGRID-2)-4] = beta;
+  data[2*MGRID+4*(MGRID-2)-3] = -ONE/(dx*dx);
+  data[2*MGRID+4*(MGRID-2)-2] = -ONE/(dx*dx);
+  data[2*MGRID+4*(MGRID-2)-1] = ONE;
+    
+  /**** repeated (MGRID-4 times) middle column blocks ****/
+  repeat=0;
+  for(i=0;i<MGRID-4;i++){
+    data[2*MGRID+4*(MGRID-2)+repeat]   = ONE;
+    data[2*MGRID+4*(MGRID-2)+repeat+1] = -ONE/(dx*dx);
+    
+    data[2*MGRID+4*(MGRID-2)+repeat+2] = -ONE/(dx*dx);
+    data[2*MGRID+4*(MGRID-2)+repeat+3] = beta;
+    data[2*MGRID+4*(MGRID-2)+repeat+4] = -ONE/(dx*dx);
+    data[2*MGRID+4*(MGRID-2)+repeat+5] = -ONE/(dx*dx);
+
+    /* 5 in 5*j chosen since there are 5 elements in each column */
+    /* this column loops MGRID-4 times within the outer loop */
+    for(j=0;j<MGRID-4;j++){
+      data[2*MGRID+4*(MGRID-2)+repeat+6+5*j]  = -ONE/(dx*dx);
+      data[2*MGRID+4*(MGRID-2)+repeat+7+5*j]  = -ONE/(dx*dx);
+      data[2*MGRID+4*(MGRID-2)+repeat+8+5*j]  = beta;
+      data[2*MGRID+4*(MGRID-2)+repeat+9+5*j]  = -ONE/(dx*dx);
+      data[2*MGRID+4*(MGRID-2)+repeat+10+5*j] = -ONE/(dx*dx);
+    }
+    
+    data[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+6] = -ONE/(dx*dx);
+    data[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+7] = -ONE/(dx*dx);
+    data[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+8] = beta;
+    data[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+9] = -ONE/(dx*dx);
+    
+    data[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+10] = -ONE/(dx*dx);
+    data[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+11] = ONE;
+    
+    repeat+=MGRID+4*(MGRID-2); /* shift that accounts for accumulated columns and elements */
+  }
+  
+  /**** last-1 column block ****/
+  data[TOTAL-6*(MGRID-2)-4] = ONE;
+  data[TOTAL-6*(MGRID-2)-3] = -ONE/(dx*dx);
+  data[TOTAL-6*(MGRID-2)-2] = -ONE/(dx*dx);
+  data[TOTAL-6*(MGRID-2)-1] = beta;
+  data[TOTAL-6*(MGRID-2)  ] = -ONE/(dx*dx);
+  /* middle data elements */
+  for(i=0;i<(MGRID-4);i++) data[TOTAL-6*(MGRID-2)+1+4*i] = -ONE/(dx*dx);
+  for(i=0;i<(MGRID-4);i++) data[TOTAL-6*(MGRID-2)+2+4*i] = -ONE/(dx*dx);
+  for(i=0;i<(MGRID-4);i++) data[TOTAL-6*(MGRID-2)+3+4*i] = beta;
+  for(i=0;i<(MGRID-4);i++) data[TOTAL-6*(MGRID-2)+4+4*i] = -ONE/(dx*dx);
+  data[TOTAL-2*(MGRID-2)-7] = -ONE/(dx*dx);
+  data[TOTAL-2*(MGRID-2)-6] = -ONE/(dx*dx);
+  data[TOTAL-2*(MGRID-2)-5] = beta;
+  data[TOTAL-2*(MGRID-2)-4] = -ONE/(dx*dx);
+  data[TOTAL-2*(MGRID-2)-3] = ONE;
+
+  /**** last column block ****/
+  data[TOTAL-2*(MGRID-2)-2] = ONE;
+  /* alternating pattern in data, separate loop for each pattern  */
+  for(i=TOTAL-2*(MGRID-2)-1;i<TOTAL-2;i+=2) data[i] = -ONE/(dx*dx);
+  for(i=TOTAL-2*(MGRID-2)  ;i<TOTAL-1;i+=2) data[i] = ONE;
+  data[TOTAL-1] = ONE;
+  
+  /*
+   *-----------------------------------------------
+   * row values 
+   *-----------------------------------------------
+   */
+
+  /**** first block ****/
+  rowvals[0] = 0;
+  /* alternating pattern in data, separate loop for each pattern */
+  for(i=1;i<MGRID+(MGRID-2)  ;i+=2) rowvals[i] = (i+1)/2;
+  for(i=2;i<MGRID+(MGRID-2)-1;i+=2) rowvals[i] = i/2+MGRID; /* i+1 unnecessary here */
+  
+  /**** second column block ****/
+  rowvals[MGRID+MGRID-2] = MGRID;
+  rowvals[MGRID+MGRID-1] = MGRID+1;
+  rowvals[MGRID+MGRID]   = MGRID+1;
+  rowvals[MGRID+MGRID+1] = MGRID+2;
+  rowvals[MGRID+MGRID+2] = 2*MGRID+1;
+  /* middle row values */
+  for(i=0;i<(MGRID-4);i++) rowvals[MGRID+MGRID+3+4*i] = MGRID+1+i;
+  for(i=0;i<(MGRID-4);i++) rowvals[MGRID+MGRID+4+4*i] = MGRID+2+i;
+  for(i=0;i<(MGRID-4);i++) rowvals[MGRID+MGRID+5+4*i] = MGRID+3+i;
+  for(i=0;i<(MGRID-4);i++) rowvals[MGRID+MGRID+6+4*i] = 2*MGRID+2+i;
+  rowvals[2*MGRID+4*(MGRID-2)-5] = MGRID+(MGRID-2)-1;
+  rowvals[2*MGRID+4*(MGRID-2)-4] = MGRID+(MGRID-2); /* starting from here, add two diag patterns */
+  rowvals[2*MGRID+4*(MGRID-2)-3] = 2*MGRID+(MGRID-2);
+  rowvals[2*MGRID+4*(MGRID-2)-2] = MGRID+(MGRID-2);
+  rowvals[2*MGRID+4*(MGRID-2)-1] = MGRID+(MGRID-2)+1;
+  
+  /**** repeated (MGRID-4 times) middle column blocks ****/
+  repeat=0;
+  for(i=0;i<MGRID-4;i++){
+    rowvals[2*MGRID+4*(MGRID-2)+repeat]   = MGRID+(MGRID-2)+2+MGRID*i;
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+1] = MGRID+(MGRID-2)+2+MGRID*i+1;
+    
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+2] = MGRID+(MGRID-2)+2+MGRID*i+1-MGRID;
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+3] = MGRID+(MGRID-2)+2+MGRID*i+1;
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+4] = MGRID+(MGRID-2)+2+MGRID*i+2; /* *this */
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+5] = MGRID+(MGRID-2)+2+MGRID*i+1+MGRID;
+    
+    /* 5 in 5*j chosen since there are 5 elements in each column */
+    /* column repeats MGRID-4 times within the outer loop */
+    for(j=0;j<MGRID-4;j++){
+      rowvals[2*MGRID+4*(MGRID-2)+repeat+6+5*j]  = MGRID+(MGRID-2)+2+MGRID*i+1-MGRID+1+j;
+      rowvals[2*MGRID+4*(MGRID-2)+repeat+7+5*j]  = MGRID+(MGRID-2)+2+MGRID*i+1+j;
+      rowvals[2*MGRID+4*(MGRID-2)+repeat+8+5*j]  = MGRID+(MGRID-2)+2+MGRID*i+2+j;
+      rowvals[2*MGRID+4*(MGRID-2)+repeat+9+5*j]  = MGRID+(MGRID-2)+2+MGRID*i+2+1+j;
+      rowvals[2*MGRID+4*(MGRID-2)+repeat+10+5*j] = MGRID+(MGRID-2)+2+MGRID*i+1+MGRID+1+j;
+    }
+    
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+6] = MGRID+(MGRID-2)+2+MGRID*i-2;
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+7] = MGRID+(MGRID-2)+2+MGRID*i-2+MGRID-1;
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+8] = MGRID+(MGRID-2)+2+MGRID*i-2+MGRID; /* *this+MGRID */
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+9] = MGRID+(MGRID-2)+2+MGRID*i-2+2*MGRID;
+
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+10] = MGRID+(MGRID-2)+2+MGRID*i-2+MGRID;
+    rowvals[2*MGRID+4*(MGRID-2)+repeat+(MGRID-4)*5+11] = MGRID+(MGRID-2)+2+MGRID*i-2+MGRID+1;
+    
+    repeat+=MGRID+4*(MGRID-2); /* shift that accounts for accumulated columns and elements */
+  }  
+
+  
+  /**** last-1 column block ****/
+  rowvals[TOTAL-6*(MGRID-2)-4] = MGRID*MGRID-1-2*(MGRID-1)-1;
+  rowvals[TOTAL-6*(MGRID-2)-3] = MGRID*MGRID-1-2*(MGRID-1); /* starting with this as base */
+  rowvals[TOTAL-6*(MGRID-2)-2] = MGRID*MGRID-1-2*(MGRID-1)-MGRID;
+  rowvals[TOTAL-6*(MGRID-2)-1] = MGRID*MGRID-1-2*(MGRID-1);
+  rowvals[TOTAL-6*(MGRID-2)  ] = MGRID*MGRID-1-2*(MGRID-1)+1;
+  /* middle row values */
+  for(i=0;i<(MGRID-4);i++) rowvals[TOTAL-6*(MGRID-2)+1+4*i] = MGRID*MGRID-1-2*(MGRID-1)-MGRID+1+i;
+  for(i=0;i<(MGRID-4);i++) rowvals[TOTAL-6*(MGRID-2)+2+4*i] = MGRID*MGRID-1-2*(MGRID-1)+i;
+  for(i=0;i<(MGRID-4);i++) rowvals[TOTAL-6*(MGRID-2)+3+4*i] = MGRID*MGRID-1-2*(MGRID-1)+1+i;/*copied above*/
+  for(i=0;i<(MGRID-4);i++) rowvals[TOTAL-6*(MGRID-2)+4+4*i] = MGRID*MGRID-1-2*(MGRID-1)+2+i;
+  rowvals[TOTAL-2*(MGRID-2)-7] = MGRID*MGRID-2*MGRID-2;
+  rowvals[TOTAL-2*(MGRID-2)-6] = MGRID*MGRID-MGRID-3;
+  rowvals[TOTAL-2*(MGRID-2)-5] = MGRID*MGRID-MGRID-2;
+  rowvals[TOTAL-2*(MGRID-2)-4] = MGRID*MGRID-MGRID-2;
+  rowvals[TOTAL-2*(MGRID-2)-3] = MGRID*MGRID-MGRID-1;
+
+  /* last column block */
+  rowvals[TOTAL-2*(MGRID-2)-2] = MGRID*MGRID-MGRID;
+  /* alternating pattern in data, separate loop for each pattern  */
+  for(i=0;i<(MGRID-2);i++) rowvals[TOTAL-2*(MGRID-2)-1+2*i] = MGRID*MGRID-2*MGRID+1+i;
+  for(i=0;i<(MGRID-2);i++) rowvals[TOTAL-2*(MGRID-2)  +2*i] = MGRID*MGRID-MGRID+1+i;  
+  rowvals[TOTAL-1] = MGRID*MGRID-1;
+
+  /*SparsePrintMat(JacMat);*/
+ 
+  return(0);
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * SetInitialProfile: routine to initialize u, up, and id vectors.       
+ */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector id, N_Vector res)
+{
+  realtype xfact, yfact, *udata, *updata, *iddata;
+  long int mm, mm1, i, j, offset, loc;
+  
+  mm = data->mm;
+  mm1 = mm - 1;
+  
+  udata = N_VGetArrayPointer_Serial(uu);
+  updata = N_VGetArrayPointer_Serial(up);
+  iddata = N_VGetArrayPointer_Serial(id);
+
+  /* Initialize id to 1's. */
+  N_VConst(ONE, id);
+
+  /* Initialize uu on all grid points. */ 
+  for (j = 0; j < mm; j++) {
+    yfact = data->dx * j;
+    offset = mm*j;
+    for (i = 0;i < mm; i++) {
+      xfact = data->dx * i;
+      loc = offset + i;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+    }
+  }
+  
+  /* Initialize up vector to 0. */
+  N_VConst(ZERO, up);
+
+  /* heatres sets res to negative of ODE RHS values at interior points. */
+  heatres(ZERO, uu, up, res, data);
+  
+  /* Copy -res into up to get correct interior initial up values. */
+  N_VScale(-ONE, res, up);
+
+  /* Finally, set values of u, up, and id at boundary points. */
+  for (j = 0; j < mm; j++) {
+    offset = mm*j;
+    for (i = 0;i < mm; i++) {
+      loc = offset + i;
+      if (j == 0 || j == mm1 || i == 0 || i == mm1 ) {
+        udata[loc] = BVAL; updata[loc] = ZERO; iddata[loc] = ZERO; }
+    }
+  }
+  
+  return(0);
+
+}
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, realtype atol)
+{
+  printf("\nidaHeat2D_klu: Heat equation, serial example problem for IDA\n");
+  printf("          Discretized heat equation on 2D unit square.\n");
+  printf("          Zero boundary conditions,");
+  printf(" polynomial initial conditions.\n");
+  printf("          Mesh dimensions: %d x %d", MGRID, MGRID);
+  printf("        Total system size: %d\n\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Constraints set to force all solution components >= 0. \n");
+  printf("Linear solver: IDAKLU, sparse direct solver \n");
+  printf("       difference quotient Jacobian\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("IDACalcIC called with input boundary values = %Lg \n",BVAL);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("IDACalcIC called with input boundary values = %g \n",BVAL);
+#else
+  printf("IDACalcIC called with input boundary values = %g \n",BVAL);
+#endif
+  /* Print output table heading and initial line of table. */
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time       umax     k  nst  nni  nje   nre     h       \n" );
+  printf(" .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . \n");
+}
+
+/*
+ * Print Output
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector uu)
+{
+  int ier;
+  realtype umax, hused;
+  long int nst, nni, nje, nre;
+  int kused;
+
+  umax = N_VMaxNorm(uu);
+  
+  ier = IDAGetLastOrder(mem, &kused);
+  check_flag(&ier, "IDAGetLastOrder", 1);
+  ier = IDAGetNumSteps(mem, &nst);
+  check_flag(&ier, "IDAGetNumSteps", 1);
+  ier = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&ier, "IDAGetNumNonlinSolvIters", 1);
+  ier = IDAGetNumResEvals(mem, &nre);
+  check_flag(&ier, "IDAGetNumResEvals", 1);
+  ier = IDAGetLastStep(mem, &hused);
+  check_flag(&ier, "IDAGetLastStep", 1);
+  ier = IDASlsGetNumJacEvals(mem, &nje);
+  check_flag(&ier, "IDASlsGetNumJacEvals", 1);
+
+ 
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld  %9.2Le \n",
+         t, umax, kused, nst, nni, nje, nre, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %9.2e \n",
+         t, umax, kused, nst, nni, nje, nre, hused);
+#else
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %9.2e \n",
+         t, umax, kused, nst, nni, nje, nre, hused);
+#endif
+
+}
+
+/* 
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/ida/serial/idaHeat2D_klu.out b/examples/ida/serial/idaHeat2D_klu.out
new file mode 100644
index 0000000..ced958a
--- /dev/null
+++ b/examples/ida/serial/idaHeat2D_klu.out
@@ -0,0 +1,30 @@
+
+idaHeat2D_klu: Heat equation, serial example problem for IDA
+          Discretized heat equation on 2D unit square.
+          Zero boundary conditions, polynomial initial conditions.
+          Mesh dimensions: 10 x 10        Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 1e-08
+Constraints set to force all solution components >= 0. 
+Linear solver: IDAKLU, sparse direct solver 
+       difference quotient Jacobian
+IDACalcIC called with input boundary values = 0 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time       umax     k  nst  nni  nje   nre     h       
+ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . 
+  0.00   9.75461e-01  0    0    0    2     2   5.15e-10 
+  0.01   8.24056e-01  5   53   63   23    65   5.55e-04 
+  0.02   6.88097e-01  5   69   81   24    83   9.99e-04 
+  0.04   4.70961e-01  5   90  106   27   108   1.91e-03 
+  0.08   2.16312e-01  5  113  130   27   132   1.72e-03 
+  0.16   4.53210e-02  5  137  155   28   157   3.43e-03 
+  0.32   1.98864e-03  5  173  193   29   195   6.18e-03 
+  0.64   3.83238e-06  5  210  233   31   235   2.22e-02 
+  1.28   0.00000e+00  1  227  255   34   257   1.78e-01 
+  2.56   0.00000e+00  1  230  258   37   260   1.42e+00 
+  5.12   0.00000e+00  1  231  259   38   261   2.85e+00 
+ 10.24   0.00000e+00  1  232  260   39   262   5.69e+00 
+
+ netf = 2,   ncfn = 0 
diff --git a/examples/ida/serial/idaHeat2D_kry.c b/examples/ida/serial/idaHeat2D_kry.c
new file mode 100644
index 0000000..2c765e7
--- /dev/null
+++ b/examples/ida/serial/idaHeat2D_kry.c
@@ -0,0 +1,550 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for IDA: 2D heat equation, serial, GMRES.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version uses the Krylov solver IDASpgmr.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y). The
+ * PDE is treated with central differences on a uniform M x M grid.
+ * The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = M^2. Here M = 10.
+ *
+ * The system is solved with IDA using the Krylov linear solver
+ * IDASPGMR. The preconditioner uses the diagonal elements of the
+ * Jacobian only. Routines for preconditioning, required by
+ * IDASPGMR, are supplied here. The constraints u >= 0 are posed
+ * for all components. Output is taken at t = 0, .01, .02, .04,
+ * ..., 10.24. Two cases are run -- with the Gram-Schmidt type
+ * being Modified in the first case, and Classical in the second.
+ * The second run uses IDAReInit and IDAReInitSpgmr.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_spgmr.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+
+/* Problem Constants */
+
+#define NOUT  11
+#define MGRID 10
+#define NEQ   MGRID*MGRID
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+#define FOUR  RCONST(4.0)
+
+/* User data type */
+
+typedef struct {  
+  long int mm;  /* number of grid points */
+  realtype dx;
+  realtype coeff;
+  N_Vector pp;  /* vector of prec. diag. elements */
+} *UserData;
+
+/* Prototypes for functions called by IDA */
+
+int resHeat(realtype tres, N_Vector uu, N_Vector up,
+            N_Vector resval, void *user_data);
+
+int PsetupHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               realtype c_j, void *prec_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec, 
+               realtype c_j, realtype delta, void *prec_data, 
+               N_Vector tmp);
+
+/* Prototypes for private functions */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector res);
+static void PrintHeader(realtype rtol, realtype atol);
+static void PrintOutput(void *mem, realtype t, N_Vector uu);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{
+  void *mem;
+  UserData data;
+  N_Vector uu, up, constraints, res;
+  int ier, iout;
+  realtype rtol, atol, t0, t1, tout, tret;
+  long int netf, ncfn, ncfl;
+
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = res = NULL;
+
+  /* Allocate N-vectors and the user data structure. */
+
+  uu = N_VNew_Serial(NEQ);
+  if(check_flag((void *)uu, "N_VNew_Serial", 0)) return(1);
+
+  up = N_VNew_Serial(NEQ);
+  if(check_flag((void *)up, "N_VNew_Serial", 0)) return(1);
+
+  res = N_VNew_Serial(NEQ);
+  if(check_flag((void *)res, "N_VNew_Serial", 0)) return(1);
+
+  constraints = N_VNew_Serial(NEQ);
+  if(check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+
+  data = (UserData) malloc(sizeof *data);
+  data->pp = NULL;
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+
+  /* Assign parameters in the user data structure. */
+
+  data->mm  = MGRID;
+  data->dx = ONE/(MGRID-ONE);
+  data->coeff = ONE/(data->dx * data->dx);
+  data->pp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)data->pp, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize uu, up. */
+
+  SetInitialProfile(data, uu, up, res);
+
+  /* Set constraints to all 1's for nonnegative solution values. */
+
+  N_VConst(ONE, constraints);
+
+  /* Assign various parameters. */
+
+  t0   = ZERO;
+  t1   = RCONST(0.01);
+  rtol = ZERO;
+  atol = RCONST(1.0e-3); 
+
+  /* Call IDACreate and IDAMalloc to initialize solution */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1)) return(1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1)) return(1);
+  N_VDestroy_Serial(constraints);
+
+  ier = IDAInit(mem, resHeat, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1)) return(1);
+
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1)) return(1);
+
+  /* Call IDASpgmr to specify the linear solver. */
+
+  ier = IDASpgmr(mem, 0);
+  if(check_flag(&ier, "IDASpgmr", 1)) return(1);
+
+  ier = IDASpilsSetPreconditioner(mem, PsetupHeat, PsolveHeat);
+  if(check_flag(&ier, "IDASpilsSetPreconditioner", 1)) return(1);
+
+  /* Print output heading. */
+  PrintHeader(rtol, atol);
+  
+  /* 
+   * -------------------------------------------------------------------------
+   * CASE I 
+   * -------------------------------------------------------------------------
+   */
+  
+  /* Print case number, output table heading, and initial line of table. */
+
+  printf("\n\nCase 1: gsytpe = MODIFIED_GS\n");
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps\n" );
+  printf("----------------------------------------------------------------------\n");
+
+  /* Loop over output times, call IDASolve, and print results. */
+
+  for (tout = t1,iout = 1; iout <= NOUT ; iout++, tout *= TWO) {
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1)) return(1);
+    PrintOutput(mem, tret, uu);
+  }
+
+  /* Print remaining counters. */
+
+  ier = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&ier, "IDAGetNumErrTestFails", 1);
+
+  ier = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&ier, "IDAGetNumNonlinSolvConvFails", 1);
+
+  ier = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&ier, "IDASpilsGetNumConvFails", 1);
+
+  printf("\nError test failures            = %ld\n", netf);
+  printf("Nonlinear convergence failures = %ld\n", ncfn);
+  printf("Linear convergence failures    = %ld\n", ncfl);
+
+  /* 
+   * -------------------------------------------------------------------------
+   * CASE II
+   * -------------------------------------------------------------------------
+   */
+  
+  /* Re-initialize uu, up. */
+
+  SetInitialProfile(data, uu, up, res);
+  
+  /* Re-initialize IDA and IDASPGMR */
+
+  ier = IDAReInit(mem, t0, uu, up);
+  if(check_flag(&ier, "IDAReInit", 1)) return(1);
+  
+  ier = IDASpilsSetGSType(mem, CLASSICAL_GS);
+  if(check_flag(&ier, "IDASpilsSetGSType",1)) return(1); 
+  
+  /* Print case number, output table heading, and initial line of table. */
+
+  printf("\n\nCase 2: gstype = CLASSICAL_GS\n");
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps\n" );
+  printf("----------------------------------------------------------------------\n");
+
+  /* Loop over output times, call IDASolve, and print results. */
+
+  for (tout = t1,iout = 1; iout <= NOUT ; iout++, tout *= TWO) {
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1)) return(1);
+    PrintOutput(mem, tret, uu);
+  }
+
+  /* Print remaining counters. */
+
+  ier = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&ier, "IDAGetNumErrTestFails", 1);
+
+  ier = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&ier, "IDAGetNumNonlinSolvConvFails", 1);
+
+  ier = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&ier, "IDASpilsGetNumConvFails", 1);
+
+  printf("\nError test failures            = %ld\n", netf);
+  printf("Nonlinear convergence failures = %ld\n", ncfn);
+  printf("Linear convergence failures    = %ld\n", ncfl);
+
+  /* Free Memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_Serial(uu);
+  N_VDestroy_Serial(up);
+  N_VDestroy_Serial(res);
+
+  N_VDestroy_Serial(data->pp);
+  free(data);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resHeat: heat equation system residual function (user-supplied)      
+ * This uses 5-point central differencing on the interior points, and   
+ * includes algebraic equations for the boundary values.                
+ * So for each interior point, the residual component has the form      
+ *    res_i = u'_i - (central difference)_i                             
+ * while for each boundary point, it is res_i = u_i.                     
+ */
+
+int resHeat(realtype tt, 
+            N_Vector uu, N_Vector up, N_Vector rr, 
+            void *user_data)
+{
+  long int i, j, offset, loc, mm;
+  realtype *uu_data, *up_data, *rr_data, coeff, dif1, dif2;
+  UserData data;
+  
+  uu_data = N_VGetArrayPointer_Serial(uu); 
+  up_data = N_VGetArrayPointer_Serial(up); 
+  rr_data = N_VGetArrayPointer_Serial(rr);
+
+  data = (UserData) user_data;
+  
+  coeff = data->coeff;
+  mm    = data->mm;
+  
+  /* Initialize rr to uu, to take care of boundary equations. */
+  N_VScale(ONE, uu, rr);
+  
+  /* Loop over interior points; set res = up - (central difference). */
+  for (j = 1; j < MGRID-1; j++) {
+    offset = mm*j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      dif1 = uu_data[loc-1]  + uu_data[loc+1]  - TWO * uu_data[loc];
+      dif2 = uu_data[loc-mm] + uu_data[loc+mm] - TWO * uu_data[loc];
+      rr_data[loc]= up_data[loc] - coeff * ( dif1 + dif2 );
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * PsetupHeat: setup for diagonal preconditioner for idaHeat2D_kry.   
+ *                                                                 
+ * The optional user-supplied functions PsetupHeat and          
+ * PsolveHeat together must define the left preconditoner        
+ * matrix P approximating the system Jacobian matrix               
+ *                   J = dF/du + cj*dF/du'                         
+ * (where the DAE system is F(t,u,u') = 0), and solve the linear   
+ * systems P z = r.   This is done in this case by keeping only    
+ * the diagonal elements of the J matrix above, storing them as    
+ * inverses in a vector pp, when computed in PsetupHeat, for    
+ * subsequent use in PsolveHeat.                                 
+ *                                                                 
+ * In this instance, only cj and data (user data structure, with    
+ * pp etc.) are used from the PsetupdHeat argument list.         
+ */
+  
+int PsetupHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               realtype c_j, void *prec_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  
+  long int i, j, offset, loc, mm;
+  realtype *ppv, pelinv;
+  UserData data;
+  
+  data = (UserData) prec_data;
+  ppv = N_VGetArrayPointer_Serial(data->pp);
+  mm = data->mm;
+
+  /* Initialize the entire vector to 1., then set the interior points to the
+     correct value for preconditioning. */
+  N_VConst(ONE,data->pp);
+  
+  /* Compute the inverse of the preconditioner diagonal elements. */
+  pelinv = ONE/(c_j + FOUR*data->coeff); 
+  
+  for (j = 1; j < mm-1; j++) {
+    offset = mm * j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      ppv[loc] = pelinv;
+    }
+  }
+  
+  return(0);  
+}
+
+/*
+ * PsolveHeat: solve preconditioner linear system.              
+ * This routine multiplies the input vector rvec by the vector pp 
+ * containing the inverse diagonal Jacobian elements (previously  
+ * computed in PrecondHeateq), returning the result in zvec.      
+ */
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec, 
+               realtype c_j, realtype delta, void *prec_data, 
+               N_Vector tmp)
+{
+  UserData data;
+  data = (UserData) prec_data;
+  N_VProd(data->pp, rvec, zvec);
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * SetInitialProfile: routine to initialize u and up vectors.
+ */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector res)
+{
+  long int mm, mm1, i, j, offset, loc;
+  realtype xfact, yfact, *udata, *updata;
+
+  mm = data->mm;
+
+  udata = N_VGetArrayPointer_Serial(uu);
+  updata = N_VGetArrayPointer_Serial(up);
+
+  /* Initialize uu on all grid points. */ 
+  mm1 = mm - 1;
+  for (j = 0; j < mm; j++) {
+    yfact = data->dx * j;
+    offset = mm*j;
+    for (i = 0;i < mm; i++) {
+      xfact = data->dx * i;
+      loc = offset + i;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+    }
+  }
+  
+  /* Initialize up vector to 0. */
+  N_VConst(ZERO, up);
+
+  /* resHeat sets res to negative of ODE RHS values at interior points. */
+  resHeat(ZERO, uu, up, res, data);
+
+  /* Copy -res into up to get correct interior initial up values. */
+  N_VScale(-ONE, res, up);
+
+  /* Set up at boundary points to zero. */
+  for (j = 0; j < mm; j++) {
+    offset = mm*j;
+    for (i = 0; i < mm; i++) {
+      loc = offset + i;
+      if (j == 0 || j == mm1 || i == 0 || i == mm1 ) updata[loc] = ZERO;
+    }
+  }
+  
+  return(0);
+  }
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, realtype atol)
+{
+  printf("\nidaHeat2D_kry: Heat equation, serial example problem for IDA \n");
+  printf("         Discretized heat equation on 2D unit square. \n");
+  printf("         Zero boundary conditions,");
+  printf(" polynomial initial conditions.\n");
+  printf("         Mesh dimensions: %d x %d", MGRID, MGRID);
+  printf("        Total system size: %d\n\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Constraints set to force all solution components >= 0. \n");
+  printf("Linear solver: IDASPGMR, preconditioner using diagonal elements. \n");
+}
+
+/*
+ * PrintOutput: print max norm of solution and current solver statistics
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector uu)
+{
+  realtype hused, umax;
+  long int nst, nni, nje, nre, nreLS, nli, npe, nps;
+  int kused, ier;
+  
+  umax = N_VMaxNorm(uu);
+
+  ier = IDAGetLastOrder(mem, &kused);
+  check_flag(&ier, "IDAGetLastOrder", 1);
+  ier = IDAGetNumSteps(mem, &nst);
+  check_flag(&ier, "IDAGetNumSteps", 1);
+  ier = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&ier, "IDAGetNumNonlinSolvIters", 1);
+  ier = IDAGetNumResEvals(mem, &nre);
+  check_flag(&ier, "IDAGetNumResEvals", 1);
+  ier = IDAGetLastStep(mem, &hused);
+  check_flag(&ier, "IDAGetLastStep", 1);
+  ier = IDASpilsGetNumJtimesEvals(mem, &nje);
+  check_flag(&ier, "IDASpilsGetNumJtimesEvals", 1);
+  ier = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&ier, "IDASpilsGetNumLinIters", 1);
+  ier = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&ier, "IDASpilsGetNumResEvals", 1);
+  ier = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&ier, "IDASpilsGetPrecEvals", 1);
+  ier = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&ier, "IDASpilsGetNumPrecSolves", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2Le  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#else
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#endif
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/ida/serial/idaHeat2D_kry.out b/examples/ida/serial/idaHeat2D_kry.out
new file mode 100644
index 0000000..fe7bde0
--- /dev/null
+++ b/examples/ida/serial/idaHeat2D_kry.out
@@ -0,0 +1,55 @@
+
+idaHeat2D_kry: Heat equation, serial example problem for IDA 
+         Discretized heat equation on 2D unit square. 
+         Zero boundary conditions, polynomial initial conditions.
+         Mesh dimensions: 10 x 10        Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+Linear solver: IDASPGMR, preconditioner using diagonal elements. 
+
+
+Case 1: gsytpe = MODIFIED_GS
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.01   8.24106e-01  2   12   14    7    14     7   2.56e-03    8  21
+  0.02   6.88134e-01  3   15   18   12    18    12   5.12e-03    8  30
+  0.04   4.70711e-01  3   18   24   21    24    21   6.58e-03    9  45
+  0.08   2.16509e-01  3   22   29   30    29    30   1.32e-02    9  59
+  0.16   4.57687e-02  4   28   36   44    36    44   1.32e-02    9  80
+  0.32   2.09938e-03  4   35   44   67    44    67   2.63e-02   10 111
+  0.64   0.00000e+00  1   39   51   77    51    77   1.05e-01   12 128
+  1.28   0.00000e+00  1   41   53   77    53    77   4.21e-01   14 130
+  2.56   0.00000e+00  1   43   55   77    55    77   1.69e+00   16 132
+  5.12   0.00000e+00  1   44   56   77    56    77   3.37e+00   17 133
+ 10.24   0.00000e+00  1   45   57   77    57    77   6.74e+00   18 134
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
+
+
+Case 2: gstype = CLASSICAL_GS
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.01   8.24106e-01  2   12   14    7    14     7   2.56e-03    8  21
+  0.02   6.88134e-01  3   15   18   12    18    12   5.12e-03    8  30
+  0.04   4.70711e-01  3   18   24   21    24    21   6.58e-03    9  45
+  0.08   2.16509e-01  3   22   29   30    29    30   1.32e-02    9  59
+  0.16   4.57687e-02  4   28   36   44    36    44   1.32e-02    9  80
+  0.32   2.09938e-03  4   35   44   67    44    67   2.63e-02   10 111
+  0.64   2.15648e-20  1   39   51   77    51    77   1.05e-01   12 128
+  1.28   1.30250e-20  1   41   53   77    53    77   4.21e-01   14 130
+  2.56   3.00951e-20  1   43   55   77    55    77   1.69e+00   16 132
+  5.12   7.38674e-20  1   44   56   77    56    77   3.37e+00   17 133
+ 10.24   1.79685e-19  1   45   57   77    57    77   6.74e+00   18 134
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
diff --git a/examples/ida/serial/idaKrylovDemo_ls.c b/examples/ida/serial/idaKrylovDemo_ls.c
new file mode 100644
index 0000000..b967969
--- /dev/null
+++ b/examples/ida/serial/idaKrylovDemo_ls.c
@@ -0,0 +1,582 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ *
+ * This example loops through the available iterative linear solvers:
+ * SPGMR, SPBCG and SPTFQMR.
+ *
+ * Example problem for IDA: 2D heat equation, serial, GMRES.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version loops through the Krylov solvers IDASpgmr, IDASpbcg
+ * and IDASptfqmr.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y). The
+ * PDE is treated with central differences on a uniform M x M grid.
+ * The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = M^2. Here M = 10.
+ *
+ * The system is solved with IDA using the following Krylov
+ * linear solvers: IDASPGMR, IDASPBCG and IDASPTFQMR. The
+ * preconditioner uses the diagonal elements of the Jacobian only.
+ * Routines for preconditioning, required by IDASP*, are supplied
+ * here. The constraints u >= 0 are posed for all components. Output
+ * is taken at t = 0, .01, .02, .04,..., 10.24.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_spgmr.h>
+#include <ida/ida_spbcgs.h>
+#include <ida/ida_sptfqmr.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+
+/* Problem Constants */
+
+#define NOUT  11
+#define MGRID 10
+#define NEQ   MGRID*MGRID
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+#define FOUR  RCONST(4.0)
+
+/* Linear Solver Loop Constants */
+
+#define USE_SPGMR   0
+#define USE_SPBCG   1
+#define USE_SPTFQMR 2
+
+/* User data type */
+
+typedef struct {  
+  long int mm;  /* number of grid points */
+  realtype dx;
+  realtype coeff;
+  N_Vector pp;  /* vector of prec. diag. elements */
+} *UserData;
+
+/* Prototypes for functions called by IDA */
+
+int resHeat(realtype tres, N_Vector uu, N_Vector up,
+            N_Vector resval, void *user_data);
+
+int PsetupHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               realtype c_j, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec, 
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp);
+
+/* Prototypes for private functions */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector res);
+static void PrintHeader(realtype rtol, realtype atol, int linsolver);
+static void PrintOutput(void *mem, realtype t, N_Vector uu, int linsolver);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  UserData data;
+  N_Vector uu, up, constraints, res;
+  int ier, iout, linsolver;
+  realtype rtol, atol, t0, t1, tout, tret;
+  long int netf, ncfn, ncfl;
+
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = res = NULL;
+
+  /* Allocate N-vectors and the user data structure. */
+
+  uu = N_VNew_Serial(NEQ);
+  if(check_flag((void *)uu, "N_VNew_Serial", 0)) return(1);
+
+  up = N_VNew_Serial(NEQ);
+  if(check_flag((void *)up, "N_VNew_Serial", 0)) return(1);
+
+  res = N_VNew_Serial(NEQ);
+  if(check_flag((void *)res, "N_VNew_Serial", 0)) return(1);
+
+  constraints = N_VNew_Serial(NEQ);
+  if(check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+
+  data = (UserData) malloc(sizeof *data);
+  data->pp = NULL;
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+
+  /* Assign parameters in the user data structure. */
+
+  data->mm  = MGRID;
+  data->dx = ONE/(MGRID-ONE);
+  data->coeff = ONE/(data->dx * data->dx);
+  data->pp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)data->pp, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize uu, up. */
+
+  SetInitialProfile(data, uu, up, res);
+
+  /* Set constraints to all 1's for nonnegative solution values. */
+
+  N_VConst(ONE, constraints);
+
+  /* Assign various parameters. */
+
+  t0   = ZERO;
+  t1   = RCONST(0.01);
+  rtol = ZERO;
+  atol = RCONST(1.0e-3); 
+
+  /* Call IDACreate and IDAMalloc to initialize solution */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1)) return(1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1)) return(1);
+  N_VDestroy_Serial(constraints);
+
+  ier = IDAInit(mem, resHeat, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1)) return(1);
+
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1)) return(1);
+
+  /* START: Loop through SPGMR, SPBCG and SPTFQMR linear solver modules */
+  for (linsolver = 0; linsolver < 3; ++linsolver) {
+
+    if (linsolver != 0) {
+
+      /* Re-initialize uu, up. */
+      SetInitialProfile(data, uu, up, res);
+
+      /* Re-initialize IDA */
+      ier = IDAReInit(mem, t0, uu, up);
+      if (check_flag(&ier, "IDAReInit", 1)) return(1);
+
+    }
+
+    /* Attach a linear solver module */
+    switch(linsolver) {
+
+    /* (a) SPGMR */
+    case(USE_SPGMR):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPGMR |\n");
+      printf(" -------\n");
+
+      /* Call IDASpgmr to specify the linear solver. */
+      ier = IDASpgmr(mem, 0);
+      if(check_flag(&ier, "IDASpgmr", 1)) return(1);
+
+      break;
+
+    /* (b) SPBCG */
+    case(USE_SPBCG):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPBCG |\n");
+      printf(" -------\n");
+
+      /* Call IDASpbcg to specify the linear solver. */
+      ier = IDASpbcg(mem, 0);
+      if(check_flag(&ier, "IDASpbcg", 1)) return(1);
+
+      break;
+
+    /* (c) SPTFQMR */
+    case(USE_SPTFQMR):
+
+      /* Print header */
+      printf(" ---------");
+      printf(" \n| SPTFQMR |\n");
+      printf(" ---------\n");
+
+      /* Call IDASptfqmr to specify the linear solver. */
+      ier = IDASptfqmr(mem, 0);
+      if(check_flag(&ier, "IDASptfqmr", 1)) return(1);
+
+      break;
+
+    }
+
+    /* Specify preconditioner */
+    ier = IDASpilsSetPreconditioner(mem, PsetupHeat, PsolveHeat);
+    if(check_flag(&ier, "IDASpilsSetPreconditioner", 1)) return(1);
+
+    /* Print output heading. */
+    PrintHeader(rtol, atol, linsolver);
+
+    /* Print output table heading, and initial line of table. */
+
+    printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+    printf("  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps\n" );
+    printf("----------------------------------------------------------------------\n");
+
+    /* Loop over output times, call IDASolve, and print results. */
+
+    for (tout = t1,iout = 1; iout <= NOUT ; iout++, tout *= TWO) {
+      ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+      if(check_flag(&ier, "IDASolve", 1)) return(1);
+      PrintOutput(mem, tret, uu, linsolver);
+    }
+
+    /* Print remaining counters. */
+    ier = IDAGetNumErrTestFails(mem, &netf);
+    check_flag(&ier, "IDAGetNumErrTestFails", 1);
+
+    ier = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+    check_flag(&ier, "IDAGetNumNonlinSolvConvFails", 1);
+
+    ier = IDASpilsGetNumConvFails(mem, &ncfl);
+    check_flag(&ier, "IDASpilsGetNumConvFails", 1);
+
+    printf("\nError test failures            = %ld\n", netf);
+    printf("Nonlinear convergence failures = %ld\n", ncfn);
+    printf("Linear convergence failures    = %ld\n", ncfl);
+
+    if (linsolver < 2)
+      printf("\n======================================================================\n\n");
+
+  } /* END: Loop through SPGMR, SPBCG and SPTFQMR linear solver modules */
+
+  /* Free Memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_Serial(uu);
+  N_VDestroy_Serial(up);
+  N_VDestroy_Serial(res);
+
+  N_VDestroy_Serial(data->pp);
+  free(data);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resHeat: heat equation system residual function (user-supplied)      
+ * This uses 5-point central differencing on the interior points, and   
+ * includes algebraic equations for the boundary values.                
+ * So for each interior point, the residual component has the form      
+ *    res_i = u'_i - (central difference)_i                             
+ * while for each boundary point, it is res_i = u_i.                     
+ */
+
+int resHeat(realtype tt, 
+            N_Vector uu, N_Vector up, N_Vector rr, 
+            void *user_data)
+{
+  long int i, j, offset, loc, mm;
+  realtype *uu_data, *up_data, *rr_data, coeff, dif1, dif2;
+  UserData data;
+  
+  uu_data = N_VGetArrayPointer_Serial(uu); 
+  up_data = N_VGetArrayPointer_Serial(up); 
+  rr_data = N_VGetArrayPointer_Serial(rr);
+
+  data = (UserData) user_data;
+  
+  coeff = data->coeff;
+  mm    = data->mm;
+  
+  /* Initialize rr to uu, to take care of boundary equations. */
+  N_VScale(ONE, uu, rr);
+  
+  /* Loop over interior points; set res = up - (central difference). */
+  for (j = 1; j < MGRID-1; j++) {
+    offset = mm*j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      dif1 = uu_data[loc-1]  + uu_data[loc+1]  - TWO * uu_data[loc];
+      dif2 = uu_data[loc-mm] + uu_data[loc+mm] - TWO * uu_data[loc];
+      rr_data[loc]= up_data[loc] - coeff * ( dif1 + dif2 );
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * PsetupHeat: setup for diagonal preconditioner.   
+ *                                                                 
+ * The optional user-supplied functions PsetupHeat and          
+ * PsolveHeat together must define the left preconditoner        
+ * matrix P approximating the system Jacobian matrix               
+ *                   J = dF/du + cj*dF/du'                         
+ * (where the DAE system is F(t,u,u') = 0), and solve the linear   
+ * systems P z = r.   This is done in this case by keeping only    
+ * the diagonal elements of the J matrix above, storing them as    
+ * inverses in a vector pp, when computed in PsetupHeat, for    
+ * subsequent use in PsolveHeat.                                 
+ *                                                                 
+ * In this instance, only cj and data (user data structure, with    
+ * pp etc.) are used from the PsetupdHeat argument list.         
+ */
+  
+int PsetupHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               realtype c_j, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  
+  long int i, j, offset, loc, mm;
+  realtype *ppv, pelinv;
+  UserData data;
+  
+  data = (UserData) user_data;
+  ppv = N_VGetArrayPointer_Serial(data->pp);
+  mm = data->mm;
+
+  /* Initialize the entire vector to 1., then set the interior points to the
+     correct value for preconditioning. */
+  N_VConst(ONE,data->pp);
+  
+  /* Compute the inverse of the preconditioner diagonal elements. */
+  pelinv = ONE/(c_j + FOUR*data->coeff); 
+  
+  for (j = 1; j < mm-1; j++) {
+    offset = mm * j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      ppv[loc] = pelinv;
+    }
+  }
+  
+  return(0);  
+}
+
+/*
+ * PsolveHeat: solve preconditioner linear system.              
+ * This routine multiplies the input vector rvec by the vector pp 
+ * containing the inverse diagonal Jacobian elements (previously  
+ * computed in PrecondHeateq), returning the result in zvec.      
+ */
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec, 
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp)
+{
+  UserData data;
+  data = (UserData) user_data;
+  N_VProd(data->pp, rvec, zvec);
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * SetInitialProfile: routine to initialize u and up vectors.
+ */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector res)
+{
+  long int mm, mm1, i, j, offset, loc;
+  realtype xfact, yfact, *udata, *updata;
+
+  mm = data->mm;
+
+  udata = N_VGetArrayPointer_Serial(uu);
+  updata = N_VGetArrayPointer_Serial(up);
+
+  /* Initialize uu on all grid points. */ 
+  mm1 = mm - 1;
+  for (j = 0; j < mm; j++) {
+    yfact = data->dx * j;
+    offset = mm*j;
+    for (i = 0;i < mm; i++) {
+      xfact = data->dx * i;
+      loc = offset + i;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+    }
+  }
+  
+  /* Initialize up vector to 0. */
+  N_VConst(ZERO, up);
+
+  /* resHeat sets res to negative of ODE RHS values at interior points. */
+  resHeat(ZERO, uu, up, res, data);
+
+  /* Copy -res into up to get correct interior initial up values. */
+  N_VScale(-ONE, res, up);
+
+  /* Set up at boundary points to zero. */
+  for (j = 0; j < mm; j++) {
+    offset = mm*j;
+    for (i = 0; i < mm; i++) {
+      loc = offset + i;
+      if (j == 0 || j == mm1 || i == 0 || i == mm1 ) updata[loc] = ZERO;
+    }
+  }
+  
+  return(0);
+  }
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, realtype atol, int linsolver)
+{
+  printf("\nidaKrylovDemo_ls: Heat equation, serial example problem for IDA\n");
+  printf("               Discretized heat equation on 2D unit square.\n");
+  printf("               Zero boundary conditions,");
+  printf(" polynomial initial conditions.\n");
+  printf("         Mesh dimensions: %d x %d", MGRID, MGRID);
+  printf("       Total system size: %d\n\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Constraints set to force all solution components >= 0. \n");
+
+  switch(linsolver) {
+
+  case(USE_SPGMR):
+    printf("Linear solver: IDASPGMR, preconditioner using diagonal elements. \n");
+    break;
+
+  case(USE_SPBCG):
+    printf("Linear solver: IDASPBCG, preconditioner using diagonal elements. \n");
+    break;
+
+  case(USE_SPTFQMR):
+    printf("Linear solver: IDASPTFQMR, preconditioner using diagonal elements. \n");
+    break;
+  }
+}
+
+/*
+ * PrintOutput: print max norm of solution and current solver statistics
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector uu, int linsolver)
+{
+  realtype hused, umax;
+  long int nst, nni, nje, nre, nreLS, nli, npe, nps;
+  int kused, ier;
+  
+  umax = N_VMaxNorm(uu);
+
+  ier = IDAGetLastOrder(mem, &kused);
+  check_flag(&ier, "IDAGetLastOrder", 1);
+  ier = IDAGetNumSteps(mem, &nst);
+  check_flag(&ier, "IDAGetNumSteps", 1);
+  ier = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&ier, "IDAGetNumNonlinSolvIters", 1);
+  ier = IDAGetNumResEvals(mem, &nre);
+  check_flag(&ier, "IDAGetNumResEvals", 1);
+  ier = IDAGetLastStep(mem, &hused);
+  check_flag(&ier, "IDAGetLastStep", 1);
+
+  ier = IDASpilsGetNumJtimesEvals(mem, &nje);
+  check_flag(&ier, "IDASpilsGetNumJtimesEvals", 1);
+  ier = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&ier, "IDASpilsGetNumLinIters", 1);
+  ier = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&ier, "IDASpilsGetNumResEvals", 1);
+  ier = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&ier, "IDASpilsGetPrecEvals", 1);
+  ier = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&ier, "IDASpilsGetNumPrecSolves", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2Le  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#else
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#endif
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/ida/serial/idaKrylovDemo_ls.out b/examples/ida/serial/idaKrylovDemo_ls.out
new file mode 100644
index 0000000..01ad81a
--- /dev/null
+++ b/examples/ida/serial/idaKrylovDemo_ls.out
@@ -0,0 +1,102 @@
+ ------- 
+| SPGMR |
+ -------
+
+idaKrylovDemo_ls: Heat equation, serial example problem for IDA
+               Discretized heat equation on 2D unit square.
+               Zero boundary conditions, polynomial initial conditions.
+         Mesh dimensions: 10 x 10       Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+Linear solver: IDASPGMR, preconditioner using diagonal elements. 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.01   8.24106e-01  2   12   14    7    14     7   2.56e-03    8  21
+  0.02   6.88134e-01  3   15   18   12    18    12   5.12e-03    8  30
+  0.04   4.70711e-01  3   18   24   21    24    21   6.58e-03    9  45
+  0.08   2.16509e-01  3   22   29   30    29    30   1.32e-02    9  59
+  0.16   4.57687e-02  4   28   36   44    36    44   1.32e-02    9  80
+  0.32   2.09938e-03  4   35   44   67    44    67   2.63e-02   10 111
+  0.64   0.00000e+00  1   39   51   77    51    77   1.05e-01   12 128
+  1.28   0.00000e+00  1   41   53   77    53    77   4.21e-01   14 130
+  2.56   0.00000e+00  1   43   55   77    55    77   1.69e+00   16 132
+  5.12   0.00000e+00  1   44   56   77    56    77   3.37e+00   17 133
+ 10.24   0.00000e+00  1   45   57   77    57    77   6.74e+00   18 134
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
+
+======================================================================
+
+ ------- 
+| SPBCG |
+ -------
+
+idaKrylovDemo_ls: Heat equation, serial example problem for IDA
+               Discretized heat equation on 2D unit square.
+               Zero boundary conditions, polynomial initial conditions.
+         Mesh dimensions: 10 x 10       Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+Linear solver: IDASPBCG, preconditioner using diagonal elements. 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.01   8.24105e-01  2   12   14    8    14     8   2.56e-03    8  22
+  0.02   6.88129e-01  3   15   18   14    18    14   5.12e-03    8  32
+  0.04   4.70820e-01  3   19   23   22    23    22   1.02e-02    9  45
+  0.08   2.16332e-01  3   23   27   32    27    32   1.02e-02    9  59
+  0.16   4.48774e-02  4   27   33   44    33    44   2.05e-02   10  77
+  0.32   1.75557e-03  3   33   41   70    41    70   4.10e-02   11 111
+  0.64   2.47770e-05  1   38   48   82    48    82   1.64e-01   13 130
+  1.28   2.57209e-22  1   40   50   82    50    82   6.55e-01   15 132
+  2.56   3.19445e-22  1   41   51   82    51    82   1.31e+00   16 133
+  5.12   7.19965e-22  1   42   52   82    52    82   2.62e+00   17 134
+ 10.24   1.87591e-21  1   43   53   82    53    82   5.24e+00   18 135
+
+Error test failures            = 0
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
+
+======================================================================
+
+ --------- 
+| SPTFQMR |
+ ---------
+
+idaKrylovDemo_ls: Heat equation, serial example problem for IDA
+               Discretized heat equation on 2D unit square.
+               Zero boundary conditions, polynomial initial conditions.
+         Mesh dimensions: 10 x 10       Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+Linear solver: IDASPTFQMR, preconditioner using diagonal elements. 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.01   8.24104e-01  2   12   14   11    14    11   2.56e-03    8  28
+  0.02   6.88133e-01  3   15   18   19    18    19   5.12e-03    8  42
+  0.04   4.70857e-01  3   19   23   33    23    33   1.02e-02    9  64
+  0.08   2.16481e-01  3   23   27   57    27    57   1.02e-02    9  96
+  0.16   4.51083e-02  4   27   33   84    33    84   2.05e-02   10 133
+  0.32   1.78483e-03  4   34   42  139    42   139   4.10e-02   11 204
+  0.64   4.07887e-04  1   39   51  183    51   183   1.47e-01   13 262
+  1.28   4.59662e-04  1   41   54  199    54   199   5.90e-01   15 282
+  2.56   2.03940e-05  1   43   56  202    56   202   1.18e+00   16 288
+  5.12   9.56073e-21  1   45   58  202    58   202   2.36e+00   17 290
+ 10.24   5.70363e-20  1   46   59  202    59   202   4.72e+00   18 291
+
+Error test failures            = 0
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
diff --git a/examples/ida/serial/idaRoberts_dns.c b/examples/ida/serial/idaRoberts_dns.c
new file mode 100644
index 0000000..d657e5e
--- /dev/null
+++ b/examples/ida/serial/idaRoberts_dns.c
@@ -0,0 +1,404 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * This simple example problem for IDA, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *      dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+ *         0   = y1 + y2 + y3 - 1
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.
+ *
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01.
+ *
+ * The problem is solved with IDA using IDADENSE for the linear
+ * solver, with a user-supplied Jacobian. Output is printed at
+ * t = .4, 4, 40, ..., 4e10.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+/* Problem Constants */
+
+#define NEQ   3
+#define NOUT  12
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Macro to define dense matrix elements, indexed from 1. */
+
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1)
+
+/* Prototypes of functions called by IDA */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, 
+           N_Vector resval, void *user_data);
+
+static int grob(realtype t, N_Vector yy, N_Vector yp,
+                realtype *gout, void *user_data);
+
+int jacrob(long int Neq, realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec,
+           DlsMat JJ, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+/* Prototypes of private functions */
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y);
+static void PrintOutput(void *mem, realtype t, N_Vector y);
+static void PrintRootInfo(int root_f1, int root_f2);
+static void PrintFinalStats(void *mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * Main Program
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  N_Vector yy, yp, avtol;
+  realtype rtol, *yval, *ypval, *atval;
+  realtype t0, tout1, tout, tret;
+  int iout, retval, retvalr;
+  int rootsfound[2];
+
+  mem = NULL;
+  yy = yp = avtol = NULL;
+  yval = ypval = atval = NULL;
+
+  /* Allocate N-vectors. */
+  yy = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  yp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+  avtol = N_VNew_Serial(NEQ);
+  if(check_flag((void *)avtol, "N_VNew_Serial", 0)) return(1);
+
+  /* Create and initialize  y, y', and absolute tolerance vectors. */
+  yval  = N_VGetArrayPointer_Serial(yy);
+  yval[0] = ONE;
+  yval[1] = ZERO;
+  yval[2] = ZERO;
+
+  ypval = N_VGetArrayPointer_Serial(yp);
+  ypval[0]  = RCONST(-0.04);
+  ypval[1]  = RCONST(0.04);
+  ypval[2]  = ZERO;  
+
+  rtol = RCONST(1.0e-4);
+
+  atval = N_VGetArrayPointer_Serial(avtol);
+  atval[0] = RCONST(1.0e-8);
+  atval[1] = RCONST(1.0e-14);
+  atval[2] = RCONST(1.0e-6);
+
+  /* Integration limits */
+  t0 = ZERO;
+  tout1 = RCONST(0.4);
+
+  PrintHeader(rtol, avtol, yy);
+
+  /* Call IDACreate and IDAInit to initialize IDA memory */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+  retval = IDAInit(mem, resrob, t0, yy, yp);
+  if(check_flag(&retval, "IDAInit", 1)) return(1);
+  /* Call IDASVtolerances to set tolerances */
+  retval = IDASVtolerances(mem, rtol, avtol);
+  if(check_flag(&retval, "IDASVtolerances", 1)) return(1);
+
+  /* Free avtol */
+  N_VDestroy_Serial(avtol);
+
+  /* Call IDARootInit to specify the root function grob with 2 components */
+  retval = IDARootInit(mem, 2, grob);
+  if (check_flag(&retval, "IDARootInit", 1)) return(1);
+
+  /* Call IDADense and set up the linear solver. */
+  retval = IDADense(mem, NEQ);
+  if(check_flag(&retval, "IDADense", 1)) return(1);
+  retval = IDADlsSetDenseJacFn(mem, jacrob);
+  if(check_flag(&retval, "IDADlsSetDenseJacFn", 1)) return(1);
+
+  /* In loop, call IDASolve, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached. */
+
+  iout = 0; tout = tout1;
+  while(1) {
+
+    retval = IDASolve(mem, tout, &tret, yy, yp, IDA_NORMAL);
+
+    PrintOutput(mem,tret,yy);
+
+    if(check_flag(&retval, "IDASolve", 1)) return(1);
+
+    if (retval == IDA_ROOT_RETURN) {
+      retvalr = IDAGetRootInfo(mem, rootsfound);
+      check_flag(&retvalr, "IDAGetRootInfo", 1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (retval == IDA_SUCCESS) {
+      iout++;
+      tout *= RCONST(10.0);
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+
+  return(0);
+  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Functions called by IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Define the system residual function. 
+ */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
+{
+  realtype *yval, *ypval, *rval;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  ypval = N_VGetArrayPointer_Serial(yp); 
+  rval = N_VGetArrayPointer_Serial(rr);
+
+  rval[0]  = RCONST(-0.04)*yval[0] + RCONST(1.0e4)*yval[1]*yval[2];
+  rval[1]  = -rval[0] - RCONST(3.0e7)*yval[1]*yval[1] - ypval[1];
+  rval[0] -=  ypval[0];
+  rval[2]  =  yval[0] + yval[1] + yval[2] - ONE;
+
+  return(0);
+}
+
+/*
+ * Root function routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int grob(realtype t, N_Vector yy, N_Vector yp, realtype *gout,
+                void *user_data)
+{
+  realtype *yval, y1, y3;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  y1 = yval[0]; y3 = yval[2];
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Define the Jacobian function. 
+ */
+
+int jacrob(long int Neq, realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec,
+           DlsMat JJ, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  realtype *yval;
+  
+  yval = N_VGetArrayPointer_Serial(yy);
+
+  IJth(JJ,1,1) = RCONST(-0.04) - cj;
+  IJth(JJ,2,1) = RCONST(0.04);
+  IJth(JJ,3,1) = ONE;
+  IJth(JJ,1,2) = RCONST(1.0e4)*yval[2];
+  IJth(JJ,2,2) = RCONST(-1.0e4)*yval[2] - RCONST(6.0e7)*yval[1] - cj;
+  IJth(JJ,3,2) = ONE;
+  IJth(JJ,1,3) = RCONST(1.0e4)*yval[1];
+  IJth(JJ,2,3) = RCONST(-1.0e4)*yval[1];
+  IJth(JJ,3,3) = ONE;
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Private functions
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y)
+{
+  realtype *atval, *yval;
+
+  atval  = N_VGetArrayPointer_Serial(avtol);
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  printf("\nidaRoberts_dns: Robertson kinetics DAE serial example problem for IDA\n");
+  printf("         Three equation chemical kinetics problem.\n\n");
+  printf("Linear solver: IDADENSE, with user-supplied Jacobian.\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg %Lg %Lg \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%Lg %Lg %Lg)\n",
+         yval[0], yval[1], yval[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#endif
+  printf("Constraints and id not used.\n\n");
+  printf("-----------------------------------------------------------------------\n");
+  printf("  t             y1           y2           y3");
+  printf("      | nst  k      h\n");
+  printf("-----------------------------------------------------------------------\n");
+}
+
+/*
+ * Print Output
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector y)
+{
+  realtype *yval;
+  int retval, kused;
+  long int nst;
+  realtype hused;
+
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  retval = IDAGetLastOrder(mem, &kused);
+  check_flag(&retval, "IDAGetLastOrder", 1);
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetLastStep(mem, &hused);
+  check_flag(&retval, "IDAGetLastStep", 1);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%10.4Le %12.4Le %12.4Le %12.4Le | %3ld  %1d %12.4Le\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#else
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#endif
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+  return;
+}
+
+/*
+ * Print final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  int retval;
+  long int nst, nni, nje, nre, nreLS, netf, ncfn, nge;
+
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetNumResEvals(mem, &nre);
+  check_flag(&retval, "IDAGetNumResEvals", 1);
+  retval = IDADlsGetNumJacEvals(mem, &nje);
+  check_flag(&retval, "IDADlsGetNumJacEvals", 1);
+  retval = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&retval, "IDAGetNumNonlinSolvIters", 1);
+  retval = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&retval, "IDAGetNumErrTestFails", 1);
+  retval = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&retval, "IDAGetNumNonlinSolvConvFails", 1);
+  retval = IDADlsGetNumResEvals(mem, &nreLS);
+  check_flag(&retval, "IDADlsGetNumResEvals", 1);
+  retval = IDAGetNumGEvals(mem, &nge);
+  check_flag(&retval, "IDAGetNumGEvals", 1);
+
+  printf("\nFinal Run Statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+  printf("Number of root fn. evaluations     = %ld\n", nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/ida/serial/idaRoberts_dns.out b/examples/ida/serial/idaRoberts_dns.out
new file mode 100644
index 0000000..04c1d91
--- /dev/null
+++ b/examples/ida/serial/idaRoberts_dns.out
@@ -0,0 +1,38 @@
+
+idaRoberts_dns: Robertson kinetics DAE serial example problem for IDA
+         Three equation chemical kinetics problem.
+
+Linear solver: IDADENSE, with user-supplied Jacobian.
+Tolerance parameters:  rtol = 0.0001   atol = 1e-08 1e-14 1e-06 
+Initial conditions y0 = (1 0 0)
+Constraints and id not used.
+
+-----------------------------------------------------------------------
+  t             y1           y2           y3      | nst  k      h
+-----------------------------------------------------------------------
+2.6403e-01   9.8997e-01   3.4706e-05   1.0000e-02 |  85  2   6.4537e-02
+    rootsfound[] =   0   1
+4.0000e-01   9.8517e-01   3.3864e-05   1.4796e-02 |  88  2   6.4537e-02
+4.0000e+00   9.0550e-01   2.2403e-05   9.4473e-02 | 102  4   4.1426e-01
+4.0000e+01   7.1582e-01   9.1851e-06   2.8417e-01 | 136  2   1.3422e+00
+4.0000e+02   4.5049e-01   3.2226e-06   5.4950e-01 | 190  4   3.3557e+01
+4.0000e+03   1.8321e-01   8.9429e-07   8.1679e-01 | 239  4   3.4533e+02
+4.0000e+04   3.8984e-02   1.6218e-07   9.6102e-01 | 287  5   2.0140e+03
+4.0000e+05   4.9389e-03   1.9852e-08   9.9506e-01 | 339  3   1.6788e+04
+4.0000e+06   5.1683e-04   2.0684e-09   9.9948e-01 | 444  4   2.1755e+05
+2.0793e+07   1.0000e-04   4.0004e-10   9.9990e-01 | 495  4   1.0146e+06
+    rootsfound[] =  -1   0
+4.0000e+07   5.2036e-05   2.0816e-10   9.9995e-01 | 506  5   2.5503e+06
+4.0000e+08   5.2103e-06   2.0841e-11   9.9999e-01 | 541  4   2.3847e+07
+4.0000e+09   5.2125e-07   2.0850e-12   1.0000e-00 | 569  4   3.9351e+08
+4.0000e+10   5.1091e-08   2.0437e-13   1.0000e-00 | 589  2   6.0246e+09
+
+Final Run Statistics: 
+
+Number of steps                    = 589
+Number of residual evaluations     = 832
+Number of Jacobian evaluations     = 79
+Number of nonlinear iterations     = 832
+Number of error test failures      = 14
+Number of nonlinear conv. failures = 0
+Number of root fn. evaluations     = 624
diff --git a/examples/ida/serial/idaRoberts_klu.c b/examples/ida/serial/idaRoberts_klu.c
new file mode 100644
index 0000000..46c304c
--- /dev/null
+++ b/examples/ida/serial/idaRoberts_klu.c
@@ -0,0 +1,488 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL  (based on idaRoberts_dns.c)
+ * -----------------------------------------------------------------
+ * This simple example problem for IDA, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *      dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+ *         0   = y1 + y2 + y3 - 1
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.
+ *
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01.
+ *
+ * The problem is solved with IDA using IDAKLU for the linear
+ * solver, with a user-supplied Jacobian. Output is printed at
+ * t = .4, 4, 40, ..., 4e10.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_klu.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NEQ   3
+#define NOUT  12
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Prototypes of functions called by IDA */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, 
+           N_Vector resval, void *user_data);
+
+static int grob(realtype t, N_Vector yy, N_Vector yp,
+                realtype *gout, void *user_data);
+
+int jacrobCSC(realtype tt,  realtype cj, 
+              N_Vector yy, N_Vector yp, N_Vector resvec, 
+              SlsMat JacMat, void *user_data,
+              N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+int jacrobCSR(realtype tt,  realtype cj, 
+              N_Vector yy, N_Vector yp, N_Vector resvec, 
+              SlsMat JacMat, void *user_data,
+              N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+/* Prototypes of private functions */
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y);
+static void PrintOutput(void *mem, realtype t, N_Vector y);
+static void PrintRootInfo(int root_f1, int root_f2);
+static void PrintFinalStats(void *mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * Main Program
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  N_Vector yy, yp, avtol;
+  realtype rtol, *yval, *ypval, *atval;
+  realtype t0, tout1, tout, tret;
+  int iout, retval, retvalr;
+  int rootsfound[2];
+
+  int nnz;
+
+  mem = NULL;
+  yy = yp = avtol = NULL;
+  yval = ypval = atval = NULL;
+
+  /* Allocate N-vectors. */
+  yy = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  yp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+  avtol = N_VNew_Serial(NEQ);
+  if(check_flag((void *)avtol, "N_VNew_Serial", 0)) return(1);
+
+  /* Create and initialize  y, y', and absolute tolerance vectors. */
+  yval  = N_VGetArrayPointer_Serial(yy);
+  yval[0] = ONE;
+  yval[1] = ZERO;
+  yval[2] = ZERO;
+
+  ypval = N_VGetArrayPointer_Serial(yp);
+  ypval[0]  = RCONST(-0.04);
+  ypval[1]  = RCONST(0.04);
+  ypval[2]  = ZERO;  
+
+  rtol = RCONST(1.0e-4);
+
+  atval = N_VGetArrayPointer_Serial(avtol);
+  atval[0] = RCONST(1.0e-8);
+  atval[1] = RCONST(1.0e-6);
+  atval[2] = RCONST(1.0e-6);
+
+  /* Integration limits */
+  t0 = ZERO;
+  tout1 = RCONST(0.4);
+
+  PrintHeader(rtol, avtol, yy);
+
+  /* Call IDACreate and IDAMalloc to initialize IDA memory */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+  retval = IDAInit(mem, resrob, t0, yy, yp);
+  if(check_flag(&retval, "IDAInit", 1)) return(1);
+  retval = IDASVtolerances(mem, rtol, avtol);
+  if(check_flag(&retval, "IDASVtolerances", 1)) return(1);
+
+  /* Free avtol */
+  N_VDestroy_Serial(avtol);
+
+  /* Call IDARootInit to specify the root function grob with 2 components */
+  retval = IDARootInit(mem, 2, grob);
+  if (check_flag(&retval, "IDARootInit", 1)) return(1);
+
+  /* Call IDAKLU and set up the linear solver. */
+  nnz = NEQ * NEQ;
+  retval = IDAKLU(mem, NEQ, nnz, CSR_MAT);
+  if(check_flag(&retval, "IDAKLU", 1)) return(1);
+  retval = IDASlsSetSparseJacFn(mem, jacrobCSR);
+  if(check_flag(&retval, "IDASlsSetSparseJacFn", 1)) return(1);
+
+  /* In loop, call IDASolve, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached. */
+  iout = 0; tout = tout1;
+  while(1) {
+
+    retval = IDASolve(mem, tout, &tret, yy, yp, IDA_NORMAL);
+
+    PrintOutput(mem,tret,yy);
+
+    if(check_flag(&retval, "IDASolve", 1)) return(1);
+
+    if (retval == IDA_ROOT_RETURN) {
+      retvalr = IDAGetRootInfo(mem, rootsfound);
+      check_flag(&retvalr, "IDAGetRootInfo", 1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (retval == IDA_SUCCESS) {
+      iout++;
+      tout *= RCONST(10.0);
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+
+  return(0);
+  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Functions called by IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Define the system residual function. 
+ */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
+{
+  realtype *yval, *ypval, *rval;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  ypval = N_VGetArrayPointer_Serial(yp); 
+  rval = N_VGetArrayPointer_Serial(rr);
+
+  rval[0]  = RCONST(-0.04)*yval[0] + RCONST(1.0e4)*yval[1]*yval[2];
+  rval[1]  = -rval[0] - RCONST(3.0e7)*yval[1]*yval[1] - ypval[1];
+  rval[0] -=  ypval[0];
+  rval[2]  =  yval[0] + yval[1] + yval[2] - ONE;
+
+  return(0);
+}
+
+/*
+ * Root function routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int grob(realtype t, N_Vector yy, N_Vector yp, realtype *gout,
+                void *user_data)
+{
+  realtype *yval, y1, y3;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  y1 = yval[0]; y3 = yval[2];
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Define the Jacobian function. 
+ */
+
+int jacrobCSC(realtype tt,  realtype cj, 
+              N_Vector yy, N_Vector yp, N_Vector resvec,
+              SlsMat JacMat, void *user_data,
+              N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  realtype *yval;
+  int* colptrs;
+  int* rowvals;
+  realtype* data;
+  
+  yval = N_VGetArrayPointer_Serial(yy);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data    = JacMat->data;
+  
+  
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  /* column 0 */
+  data[0] = RCONST(-0.04) - cj;
+  rowvals[0] = 0;
+  data[1] = RCONST(0.04);
+  rowvals[1] = 1;
+  data[2] = ONE;
+  rowvals[2] = 2;
+
+  /* column 1 */
+  data[3] = RCONST(1.0e4)*yval[2];
+  rowvals[3] = 0;
+  data[4] = (RCONST(-1.0e4)*yval[2]) - (RCONST(6.0e7)*yval[1]) - cj;
+  rowvals[4] = 1;
+  data[5] = ONE;
+  rowvals[5] = 2;
+
+  /* column 2 */
+  data[6] = RCONST(1.0e4)*yval[1];
+  rowvals[6] = 0;
+  data[7] = RCONST(-1.0e4)*yval[1];
+  rowvals[7] = 1;
+  data[8] = ONE;
+  rowvals[8] = 2;
+
+  return(0);
+}
+
+/*
+ * Define the Jacobian function, where Jacobian is CSR matrix. 
+ */
+int jacrobCSR(realtype tt,  realtype cj, 
+              N_Vector yy, N_Vector yp, N_Vector resvec,
+              SlsMat JacMat, void *user_data,
+              N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  realtype *yval;
+  int* rowptrs;
+  int* colvals;
+  realtype* data;
+  
+  yval = N_VGetArrayPointer_Serial(yy);
+  rowptrs = (*JacMat->rowptrs);
+  colvals = (*JacMat->colvals);
+  data    = JacMat->data;
+  
+  
+  SparseSetMatToZero(JacMat);
+
+  rowptrs[0] = 0;
+  rowptrs[1] = 3;
+  rowptrs[2] = 6;
+  rowptrs[3] = 9;
+
+  /* row 0 */
+  data[0] = RCONST(-0.04) - cj;
+  colvals[0] = 0;
+  data[1] = RCONST(1.0e4)*yval[2];
+  colvals[1] = 1;
+  data[2] = RCONST(1.0e4)*yval[1];
+  colvals[2] = 2;
+
+  /* row 1 */
+  data[3] = RCONST(0.04);
+  colvals[3] = 0;
+  data[4] = (RCONST(-1.0e4)*yval[2]) - (RCONST(6.0e7)*yval[1]) - cj;
+  colvals[4] = 1;
+  data[5] = RCONST(-1.0e4)*yval[1];
+  colvals[5] = 2;
+
+  /* row 2 */
+  data[6] = ONE;
+  colvals[6] = 0;
+  data[7] = ONE;
+  colvals[7] = 1;
+  data[8] = ONE;
+  colvals[8] = 2;
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Private functions
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y)
+{
+  realtype *atval, *yval;
+
+  atval  = N_VGetArrayPointer_Serial(avtol);
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  printf("\nidaRoberts_klu: Robertson kinetics DAE serial example problem for IDA.\n");
+  printf("               Three equation chemical kinetics problem.\n\n");
+  printf("Linear solver: IDAKLU, with user-supplied Jacobian.\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg %Lg %Lg \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%Lg %Lg %Lg)\n",
+         yval[0], yval[1], yval[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#endif
+  printf("Constraints and id not used.\n\n");
+  printf("-----------------------------------------------------------------------\n");
+  printf("  t             y1           y2           y3");
+  printf("      | nst  k      h\n");
+  printf("-----------------------------------------------------------------------\n");
+}
+
+/*
+ * Print Output
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector y)
+{
+  realtype *yval;
+  int retval, kused;
+  long int nst;
+  realtype hused;
+
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  retval = IDAGetLastOrder(mem, &kused);
+  check_flag(&retval, "IDAGetLastOrder", 1);
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetLastStep(mem, &hused);
+  check_flag(&retval, "IDAGetLastStep", 1);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%10.4Le %12.4Le %12.4Le %12.4Le | %3ld  %1d %12.4Le\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#else
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#endif
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+  return;
+}
+
+/*
+ * Print final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  int retval;
+  long int nst, nni, nje, nre, nreLS, netf, ncfn, nge;
+
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetNumResEvals(mem, &nre);
+  check_flag(&retval, "IDAGetNumResEvals", 1);
+  retval = IDASlsGetNumJacEvals(mem, &nje);
+  check_flag(&retval, "IDASlsGetNumJacEvals", 1);
+  retval = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&retval, "IDAGetNumNonlinSolvIters", 1);
+  retval = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&retval, "IDAGetNumErrTestFails", 1);
+  retval = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&retval, "IDAGetNumNonlinSolvConvFails", 1);
+  /*  
+      retval = IDASlsGetNumResEvals(mem, &nreLS);
+      check_flag(&retval, "IDASlsGetNumResEvals", 1);
+  */
+  nreLS = 0;
+  retval = IDAGetNumGEvals(mem, &nge);
+  check_flag(&retval, "IDAGetNumGEvals", 1);
+
+  printf("\nFinal Run Statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+  printf("Number of root fn. evaluations     = %ld\n", nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/ida/serial/idaRoberts_klu.out b/examples/ida/serial/idaRoberts_klu.out
new file mode 100644
index 0000000..7d56d20
--- /dev/null
+++ b/examples/ida/serial/idaRoberts_klu.out
@@ -0,0 +1,38 @@
+
+idaRoberts_klu: Robertson kinetics DAE serial example problem for IDA.
+               Three equation chemical kinetics problem.
+
+Linear solver: IDAKLU, with user-supplied Jacobian.
+Tolerance parameters:  rtol = 0.0001   atol = 1e-08 1e-06 1e-06 
+Initial conditions y0 = (1 0 0)
+Constraints and id not used.
+
+-----------------------------------------------------------------------
+  t             y1           y2           y3      | nst  k      h
+-----------------------------------------------------------------------
+2.6402e-01   9.8997e-01   3.4706e-05   1.0000e-02 |  27  2   4.4012e-02
+    rootsfound[] =   0   1
+4.0000e-01   9.8517e-01   3.3864e-05   1.4794e-02 |  29  3   8.8024e-02
+4.0000e+00   9.0553e-01   2.2406e-05   9.4452e-02 |  43  4   6.3377e-01
+4.0000e+01   7.1579e-01   9.1838e-06   2.8420e-01 |  68  4   3.1932e+00
+4.0000e+02   4.5044e-01   3.2218e-06   5.4956e-01 |  95  4   3.3201e+01
+4.0000e+03   1.8320e-01   8.9444e-07   8.1680e-01 | 126  3   3.1458e+02
+4.0000e+04   3.8992e-02   1.6221e-07   9.6101e-01 | 161  5   2.5058e+03
+4.0000e+05   4.9369e-03   1.9842e-08   9.9506e-01 | 202  3   2.6371e+04
+4.0000e+06   5.1693e-04   2.0688e-09   9.9948e-01 | 252  5   2.5583e+05
+2.0801e+07   1.0000e-04   4.0004e-10   9.9990e-01 | 291  4   1.1781e+06
+    rootsfound[] =  -1   0
+4.0000e+07   5.2043e-05   2.0818e-10   9.9995e-01 | 303  5   2.3562e+06
+4.0000e+08   5.2113e-06   2.0845e-11   9.9999e-01 | 336  4   3.7885e+07
+4.0000e+09   5.2515e-07   2.1006e-12   1.0000e+00 | 359  3   5.4083e+08
+4.0000e+10   5.1251e-08   2.0500e-13   1.0000e+00 | 375  3   8.6532e+09
+
+Final Run Statistics: 
+
+Number of steps                    = 375
+Number of residual evaluations     = 529
+Number of Jacobian evaluations     = 54
+Number of nonlinear iterations     = 529
+Number of error test failures      = 10
+Number of nonlinear conv. failures = 0
+Number of root fn. evaluations     = 417
diff --git a/examples/ida/serial/idaRoberts_sps.c b/examples/ida/serial/idaRoberts_sps.c
new file mode 100644
index 0000000..fc4579c
--- /dev/null
+++ b/examples/ida/serial/idaRoberts_sps.c
@@ -0,0 +1,421 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL  (based on idasRoberts_dns.c)
+ * -----------------------------------------------------------------
+ * This simple example problem for IDA, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *      dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+ *         0   = y1 + y2 + y3 - 1
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.
+ *
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01.
+ *
+ * The problem is solved with IDA using IDASUPERLUMT for the linear
+ * solver, with a user-supplied Jacobian. Output is printed at
+ * t = .4, 4, 40, ..., 4e10.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_superlumt.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NEQ   3
+#define NOUT  12
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Prototypes of functions called by IDA */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, 
+           N_Vector resval, void *user_data);
+
+static int grob(realtype t, N_Vector yy, N_Vector yp,
+                realtype *gout, void *user_data);
+
+int jacrob(realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec, 
+	   SlsMat JacMat, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+/* Prototypes of private functions */
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y);
+static void PrintOutput(void *mem, realtype t, N_Vector y);
+static void PrintRootInfo(int root_f1, int root_f2);
+static void PrintFinalStats(void *mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * Main Program
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  N_Vector yy, yp, avtol;
+  realtype rtol, *yval, *ypval, *atval;
+  realtype t0, tout1, tout, tret;
+  int iout, retval, retvalr;
+  int rootsfound[2];
+
+  int nnz;
+
+  mem = NULL;
+  yy = yp = avtol = NULL;
+  yval = ypval = atval = NULL;
+
+  /* Allocate N-vectors. */
+  yy = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  yp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+  avtol = N_VNew_Serial(NEQ);
+  if(check_flag((void *)avtol, "N_VNew_Serial", 0)) return(1);
+
+  /* Create and initialize  y, y', and absolute tolerance vectors. */
+  yval  = N_VGetArrayPointer_Serial(yy);
+  yval[0] = ONE;
+  yval[1] = ZERO;
+  yval[2] = ZERO;
+
+  ypval = N_VGetArrayPointer_Serial(yp);
+  ypval[0]  = RCONST(-0.04);
+  ypval[1]  = RCONST(0.04);
+  ypval[2]  = ZERO;  
+
+  rtol = RCONST(1.0e-4);
+
+  atval = N_VGetArrayPointer_Serial(avtol);
+  atval[0] = RCONST(1.0e-8);
+  atval[1] = RCONST(1.0e-6);
+  atval[2] = RCONST(1.0e-6);
+
+  /* Integration limits */
+  t0 = ZERO;
+  tout1 = RCONST(0.4);
+
+  PrintHeader(rtol, avtol, yy);
+
+  /* Call IDACreate and IDAMalloc to initialize IDA memory */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+  retval = IDAInit(mem, resrob, t0, yy, yp);
+  if(check_flag(&retval, "IDAInit", 1)) return(1);
+  retval = IDASVtolerances(mem, rtol, avtol);
+  if(check_flag(&retval, "IDASVtolerances", 1)) return(1);
+
+  /* Free avtol */
+  N_VDestroy_Serial(avtol);
+
+  /* Call IDARootInit to specify the root function grob with 2 components */
+  retval = IDARootInit(mem, 2, grob);
+  if (check_flag(&retval, "IDARootInit", 1)) return(1);
+
+  /* Call IDASuperLUMT and set up the linear solver. */
+  nnz = NEQ * NEQ;
+  retval = IDASuperLUMT(mem, 1, NEQ, nnz);
+  if(check_flag(&retval, "IDASuperLUMT", 1)) return(1);
+  retval = IDASlsSetSparseJacFn(mem, jacrob);
+  if(check_flag(&retval, "IDASlsSetSparseJacFn", 1)) return(1);
+
+  /* In loop, call IDASolve, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached. */
+
+  iout = 0; tout = tout1;
+  while(1) {
+
+    retval = IDASolve(mem, tout, &tret, yy, yp, IDA_NORMAL);
+
+    PrintOutput(mem,tret,yy);
+
+    if(check_flag(&retval, "IDASolve", 1)) return(1);
+
+    if (retval == IDA_ROOT_RETURN) {
+      retvalr = IDAGetRootInfo(mem, rootsfound);
+      check_flag(&retvalr, "IDAGetRootInfo", 1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (retval == IDA_SUCCESS) {
+      iout++;
+      tout *= RCONST(10.0);
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+
+  return(0);
+  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Functions called by IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Define the system residual function. 
+ */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
+{
+  realtype *yval, *ypval, *rval;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  ypval = N_VGetArrayPointer_Serial(yp); 
+  rval = N_VGetArrayPointer_Serial(rr);
+
+  rval[0]  = RCONST(-0.04)*yval[0] + RCONST(1.0e4)*yval[1]*yval[2];
+  rval[1]  = -rval[0] - RCONST(3.0e7)*yval[1]*yval[1] - ypval[1];
+  rval[0] -=  ypval[0];
+  rval[2]  =  yval[0] + yval[1] + yval[2] - ONE;
+
+  return(0);
+}
+
+/*
+ * Root function routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int grob(realtype t, N_Vector yy, N_Vector yp, realtype *gout,
+                void *user_data)
+{
+  realtype *yval, y1, y3;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  y1 = yval[0]; y3 = yval[2];
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Define the Jacobian function. 
+ */
+
+int jacrob(realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec,
+	   SlsMat JacMat, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  realtype *yval;
+  int *colptrs = *JacMat->colptrs;
+  int *rowvals = *JacMat->rowvals;
+  
+  yval = N_VGetArrayPointer_Serial(yy);
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  JacMat->data[0] = RCONST(-0.04) - cj;
+  rowvals[0] = 0;
+  JacMat->data[1] = RCONST(0.04);
+  rowvals[1] = 1;
+  JacMat->data[2] = ONE;
+  rowvals[2] = 2;
+
+  JacMat->data[3] = RCONST(1.0e4)*yval[2];
+  rowvals[3] = 0;
+  JacMat->data[4] = (RCONST(-1.0e4)*yval[2]) - (RCONST(6.0e7)*yval[1]) - cj;
+  rowvals[4] = 1;
+  JacMat->data[5] = ONE;
+  rowvals[5] = 2;
+
+  JacMat->data[6] = RCONST(1.0e4)*yval[1];
+  rowvals[6] = 0;
+  JacMat->data[7] = RCONST(-1.0e4)*yval[1];
+  rowvals[7] = 1;
+  JacMat->data[8] = ONE;
+  rowvals[8] = 2;
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Private functions
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y)
+{
+  realtype *atval, *yval;
+
+  atval  = N_VGetArrayPointer_Serial(avtol);
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  printf("\nidaRoberts_sps: Robertson kinetics DAE serial example problem for IDA.\n");
+  printf("               Three equation chemical kinetics problem.\n\n");
+  printf("Linear solver: IDASUPERLUMT, with user-supplied Jacobian.\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg %Lg %Lg \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%Lg %Lg %Lg)\n",
+         yval[0], yval[1], yval[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#endif
+  printf("Constraints and id not used.\n\n");
+  printf("-----------------------------------------------------------------------\n");
+  printf("  t             y1           y2           y3");
+  printf("      | nst  k      h\n");
+  printf("-----------------------------------------------------------------------\n");
+}
+
+/*
+ * Print Output
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector y)
+{
+  realtype *yval;
+  int retval, kused;
+  long int nst;
+  realtype hused;
+
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  retval = IDAGetLastOrder(mem, &kused);
+  check_flag(&retval, "IDAGetLastOrder", 1);
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetLastStep(mem, &hused);
+  check_flag(&retval, "IDAGetLastStep", 1);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%10.4Le %12.4Le %12.4Le %12.4Le | %3ld  %1d %12.4Le\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#else
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#endif
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+  return;
+}
+
+/*
+ * Print final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  int retval;
+  long int nst, nni, nje, nre, nreLS, netf, ncfn, nge;
+
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetNumResEvals(mem, &nre);
+  check_flag(&retval, "IDAGetNumResEvals", 1);
+  retval = IDASlsGetNumJacEvals(mem, &nje);
+  check_flag(&retval, "IDASlsGetNumJacEvals", 1);
+  retval = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&retval, "IDAGetNumNonlinSolvIters", 1);
+  retval = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&retval, "IDAGetNumErrTestFails", 1);
+  retval = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&retval, "IDAGetNumNonlinSolvConvFails", 1);
+  /*  retval = IDASlsGetNumResEvals(mem, &nreLS); */
+  /*  check_flag(&retval, "IDASlsGetNumResEvals", 1); */
+  nreLS = 0;
+  retval = IDAGetNumGEvals(mem, &nge);
+  check_flag(&retval, "IDAGetNumGEvals", 1);
+
+  printf("\nFinal Run Statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+  printf("Number of root fn. evaluations     = %ld\n", nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/ida/serial/idaRoberts_sps.out b/examples/ida/serial/idaRoberts_sps.out
new file mode 100644
index 0000000..86a24d9
--- /dev/null
+++ b/examples/ida/serial/idaRoberts_sps.out
@@ -0,0 +1,38 @@
+
+idaRoberts_sps: Robertson kinetics DAE serial example problem for IDA.
+               Three equation chemical kinetics problem.
+
+Linear solver: IDASUPERLUMT, with user-supplied Jacobian.
+Tolerance parameters:  rtol = 0.0001   atol = 1e-08 1e-06 1e-06 
+Initial conditions y0 = (1 0 0)
+Constraints and id not used.
+
+-----------------------------------------------------------------------
+  t             y1           y2           y3      | nst  k      h
+-----------------------------------------------------------------------
+2.6402e-01   9.8997e-01   3.4706e-05   1.0000e-02 |  27  2   4.4012e-02
+    rootsfound[] =   0   1
+4.0000e-01   9.8517e-01   3.3864e-05   1.4794e-02 |  29  3   8.8024e-02
+4.0000e+00   9.0553e-01   2.2406e-05   9.4452e-02 |  43  4   6.3377e-01
+4.0000e+01   7.1579e-01   9.1838e-06   2.8420e-01 |  68  4   3.1932e+00
+4.0000e+02   4.5044e-01   3.2218e-06   5.4956e-01 |  95  4   3.3201e+01
+4.0000e+03   1.8320e-01   8.9444e-07   8.1680e-01 | 126  3   3.1458e+02
+4.0000e+04   3.8992e-02   1.6221e-07   9.6101e-01 | 161  5   2.5058e+03
+4.0000e+05   4.9369e-03   1.9842e-08   9.9506e-01 | 202  3   2.6371e+04
+4.0000e+06   5.1693e-04   2.0688e-09   9.9948e-01 | 252  5   2.5583e+05
+2.0801e+07   1.0000e-04   4.0004e-10   9.9990e-01 | 291  4   1.1781e+06
+    rootsfound[] =  -1   0
+4.0000e+07   5.2043e-05   2.0818e-10   9.9995e-01 | 303  5   2.3562e+06
+4.0000e+08   5.2113e-06   2.0845e-11   9.9999e-01 | 336  4   3.7885e+07
+4.0000e+09   5.2515e-07   2.1006e-12   1.0000e+00 | 359  3   5.4083e+08
+4.0000e+10   5.1251e-08   2.0500e-13   1.0000e+00 | 375  3   8.6532e+09
+
+Final Run Statistics: 
+
+Number of steps                    = 375
+Number of residual evaluations     = 529
+Number of Jacobian evaluations     = 54
+Number of nonlinear iterations     = 529
+Number of error test failures      = 10
+Number of nonlinear conv. failures = 0
+Number of root fn. evaluations     = 417
diff --git a/examples/ida/serial/idaSlCrank_dns.c b/examples/ida/serial/idaSlCrank_dns.c
new file mode 100644
index 0000000..af3ad59
--- /dev/null
+++ b/examples/ida/serial/idaSlCrank_dns.c
@@ -0,0 +1,350 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4809 $
+ * $Date: 2016-07-18 11:16:25 -0700 (Mon, 18 Jul 2016) $
+ * -----------------------------------------------------------------
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Simulation of a slider-crank mechanism modelled with 3 generalized
+ * coordinates: crank angle, connecting bar angle, and slider location.
+ * The mechanism moves under the action of a constant horizontal force
+ * applied to the connecting rod and a spring-damper connecting the crank
+ * and connecting rod.
+ *
+ * The equations of motion are formulated as a system of stabilized
+ * index-2 DAEs (Gear-Gupta-Leimkuhler formulation).
+ *
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <ida/ida.h>
+#include <ida/ida_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NEQ   10
+
+#define TEND  RCONST(10.0)
+#define NOUT  41
+
+
+#define ZERO RCONST(0.0)
+#define HALF RCONST(0.5)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+#define FOUR RCONST(4.0)
+
+typedef struct {
+  realtype a;
+  realtype J1, J2, m2;
+  realtype k, c, l0;
+  realtype F;
+} *UserData;
+
+int ressc(realtype tres, N_Vector yy, N_Vector yp, 
+           N_Vector resval, void *user_data);
+
+void setIC(N_Vector yy, N_Vector yp, UserData data);
+void force(N_Vector yy, realtype *Q, UserData data);
+
+static void PrintHeader(realtype rtol, realtype atol, N_Vector y);
+static void PrintOutput(void *mem, realtype t, N_Vector y);
+static void PrintFinalStats(void *mem);
+
+/*
+ *--------------------------------------------------------------------
+ * Main Program
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  UserData data;
+
+  void *mem;
+  N_Vector yy, yp, id;
+  realtype rtol, atol;
+  realtype t0, tf, tout, dt, tret;
+  int flag, iout;
+
+  /* User data */
+
+  data = (UserData) malloc(sizeof *data);
+
+  data->a = 0.5;   /* half-length of crank */
+  data->J1 = 1.0;  /* crank moment of inertia */
+  data->m2 = 1.0;  /* mass of connecting rod */
+  data->J2 = 2.0;  /* moment of inertia of connecting rod */
+  data->k = 1.0;   /* spring constant */
+  data->c = 1.0;   /* damper constant */
+  data->l0 = 1.0;  /* spring free length */
+  data->F = 1.0;   /* external constant force */
+
+  /* Create N_Vectors */
+  yy = N_VNew_Serial(NEQ);
+  yp = N_VNew_Serial(NEQ);
+  id = N_VNew_Serial(NEQ);
+
+  /* Consistent IC */
+  setIC(yy, yp, data);
+
+  /* ID array */
+  N_VConst(ONE, id);
+  NV_Ith_S(id,6) = ZERO;
+  NV_Ith_S(id,7) = ZERO;
+  NV_Ith_S(id,8) = ZERO;
+  NV_Ith_S(id,9) = ZERO;
+
+  /* Tolerances */
+  rtol = RCONST(1.0e-6);
+  atol = RCONST(1.0e-6);
+
+  /* Integration limits */
+  t0 = ZERO;
+  tf = TEND;
+  dt = (tf-t0)/(NOUT-1);
+
+  /* IDA initialization */
+  mem = IDACreate();
+  flag = IDAInit(mem, ressc, t0, yy, yp);
+  flag = IDASStolerances(mem, rtol, atol);
+  flag = IDASetUserData(mem, data);
+  flag = IDASetId(mem, id);
+  flag = IDASetSuppressAlg(mem, TRUE);
+
+  /* Call IDADense and set up the linear solver. */
+  flag = IDADense(mem, NEQ);
+
+  PrintHeader(rtol, atol, yy);
+
+  /* In loop, call IDASolve, print results, and test for error. */
+
+  PrintOutput(mem,t0,yy);
+
+  tout = dt;
+  for (iout=1; iout<NOUT; iout++) {
+    tout = iout*dt;
+    flag = IDASolve(mem, tout, &tret, yy, yp, IDA_NORMAL);
+    if (flag < 0) break;
+
+    PrintOutput(mem,tret,yy);
+
+  }
+
+  PrintFinalStats(mem);
+
+  /* Free memory */
+
+  free(data);
+  IDAFree(&mem);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+  N_VDestroy_Serial(id);
+
+  return(0);
+  
+}
+
+void setIC(N_Vector yy, N_Vector yp, UserData data)
+{
+  realtype pi;
+  realtype a, J1, m2, J2;
+  realtype q, p, x;
+  realtype Q[3];
+
+  N_VConst(ZERO, yy);
+  N_VConst(ZERO, yp);
+
+  pi = FOUR*atan(ONE);
+
+  a = data->a;
+  J1 = data->J1;
+  m2 = data->m2;
+  J2 = data->J2;
+  
+  q = pi/TWO;
+  p = asin(-a);
+  x = cos(p);
+
+  NV_Ith_S(yy,0) = q;
+  NV_Ith_S(yy,1) = x;
+  NV_Ith_S(yy,2) = p;
+  
+  force(yy, Q, data);
+
+  NV_Ith_S(yp,3) = Q[0]/J1;
+  NV_Ith_S(yp,4) = Q[1]/m2;
+  NV_Ith_S(yp,5) = Q[2]/J2;
+
+}
+
+void force(N_Vector yy, realtype *Q, UserData data)
+{
+  realtype a, k, c, l0, F;
+  realtype q, x, p;
+  realtype qd, xd, pd;  
+  realtype s1, c1, s2, c2, s21, c21;
+  realtype l2, l, ld;
+  realtype f, fl;
+
+  a = data->a;
+  k = data->k;
+  c = data->c;
+  l0 = data->l0;
+  F = data->F;
+
+  q = NV_Ith_S(yy,0);
+  x = NV_Ith_S(yy,1);
+  p = NV_Ith_S(yy,2);
+
+  qd = NV_Ith_S(yy,3);
+  xd = NV_Ith_S(yy,4);
+  pd = NV_Ith_S(yy,5);
+
+  s1 = sin(q);
+  c1 = cos(q);
+  s2 = sin(p);
+  c2 = cos(p);
+  s21 = s2*c1 - c2*s1;
+  c21 = c2*c1 + s2*s1;
+
+  l2 = x*x - x*(c2+a*c1) + (ONE + a*a)/FOUR + a*c21/TWO;
+  l = SUNRsqrt(l2);
+  ld = TWO*x*xd - xd*(c2+a*c1) + x*(s2*pd+a*s1*qd) - a*s21*(pd-qd)/TWO;
+  ld /= TWO*l;
+
+  f = k*(l-l0) + c*ld;
+  fl = f/l;
+
+  Q[0] = - fl * a * (s21/TWO + x*s1) / TWO;
+  Q[1] = fl * (c2/TWO - x + a*c1/TWO) + F;
+  Q[2] = - fl * (x*s2 - a*s21/TWO) / TWO - F*s2;
+
+}
+
+int ressc(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
+{
+  UserData data;
+  realtype Q[3];
+  realtype a, J1, m2, J2;
+  realtype *yval, *ypval, *rval;
+  realtype q, x, p;
+  realtype qd, xd, pd;  
+  realtype lam1, lam2, mu1, mu2;
+  realtype s1, c1, s2, c2;
+
+  data = (UserData) user_data;
+
+  a  = data->a;
+  J1 = data->J1;
+  m2 = data->m2;
+  J2 = data->J2;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  ypval = N_VGetArrayPointer_Serial(yp); 
+  rval = N_VGetArrayPointer_Serial(rr);
+
+  q = yval[0];
+  x = yval[1];
+  p = yval[2];
+
+  qd = yval[3];
+  xd = yval[4];
+  pd = yval[5];
+
+  lam1 = yval[6];
+  lam2 = yval[7];
+
+  mu1 = yval[8];
+  mu2 = yval[9];
+
+  s1 = sin(q);
+  c1 = cos(q);
+  s2 = sin(p);
+  c2 = cos(p);
+
+  force(yy, Q, data);
+
+  rval[0] = ypval[0] - qd + a*s1*mu1 - a*c1*mu2;
+  rval[1] = ypval[1] - xd + mu1;
+  rval[2] = ypval[2] - pd + s2*mu1 - c2*mu2; 
+
+  rval[3] = J1*ypval[3] - Q[0] + a*s1*lam1 - a*c1*lam2;
+  rval[4] = m2*ypval[4] - Q[1] + lam1;
+  rval[5] = J2*ypval[5] - Q[2] + s2*lam1 - c2*lam2; 
+
+  rval[6] = x - c2 - a*c1;
+  rval[7] = -s2 - a*s1;
+
+  rval[8] = a*s1*qd + xd + s2*pd;
+  rval[9] = -a*c1*qd - c2*pd;
+
+  return(0);
+}
+
+static void PrintHeader(realtype rtol, realtype atol, N_Vector y)
+{
+  printf("\nidaSlCrank_dns: Slider-Crank DAE serial example problem for IDAS\n");
+  printf("Linear solver: IDADENSE, Jacobian is computed by IDAS.\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n",
+         rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n",
+         rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n",
+         rtol, atol);
+#endif
+  printf("-----------------------------------------------------------------------\n");
+  printf("  t            y1          y2           y3");
+  printf("      | nst  k      h\n");
+  printf("-----------------------------------------------------------------------\n");
+}
+
+static void PrintOutput(void *mem, realtype t, N_Vector y)
+{
+  realtype *yval;
+  int flag, kused;
+  long int nst;
+  realtype hused;
+
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  flag = IDAGetLastOrder(mem, &kused);
+  flag = IDAGetNumSteps(mem, &nst);
+  flag = IDAGetLastStep(mem, &hused);
+
+  printf("%10.4e %12.4e %12.4e %12.4e %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+}
+
+
+static void PrintFinalStats(void *mem)
+{
+  int flag;
+  long int nst, nni, nje, nre, nreLS, netf, ncfn;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  flag = IDAGetNumResEvals(mem, &nre);
+  flag = IDADlsGetNumJacEvals(mem, &nje);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  flag = IDADlsGetNumResEvals(mem, &nreLS);
+
+  printf("\nFinal Run Statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+}
+
diff --git a/examples/ida/serial/idaSlCrank_dns.out b/examples/ida/serial/idaSlCrank_dns.out
new file mode 100644
index 0000000..b79ec57
--- /dev/null
+++ b/examples/ida/serial/idaSlCrank_dns.out
@@ -0,0 +1,57 @@
+
+idaSlCrank_dns: Slider-Crank DAE serial example problem for IDAS
+Linear solver: IDADENSE, Jacobian is computed by IDAS.
+Tolerance parameters:  rtol = 1e-06   atol = 1e-06
+-----------------------------------------------------------------------
+  t            y1          y2           y3      | nst  k      h
+-----------------------------------------------------------------------
+0.0000e+00   1.5708e+00   8.6603e-01  -5.2360e-01   0  0   0.0000e+00
+2.5000e-01   1.5548e+00   8.7406e-01  -5.2352e-01  25  4   6.5436e-02
+5.0000e-01   1.5069e+00   8.9855e-01  -5.2242e-01  28  4   6.5436e-02
+7.5000e-01   1.4270e+00   9.4063e-01  -5.1765e-01  32  5   6.5436e-02
+1.0000e+00   1.3154e+00   1.0015e+00  -5.0497e-01  36  5   6.5436e-02
+1.2500e+00   1.1731e+00   1.0811e+00  -4.7909e-01  40  5   6.5436e-02
+1.5000e+00   1.0016e+00   1.1765e+00  -4.3472e-01  44  5   5.8893e-02
+1.7500e+00   8.0288e-01   1.2804e+00  -3.6792e-01  48  4   5.3003e-02
+2.0000e+00   5.7904e-01   1.3803e+00  -2.7715e-01  53  4   4.7703e-02
+2.2500e+00   3.3326e-01   1.4590e+00  -1.6430e-01  58  5   4.7703e-02
+2.5000e+00   7.2238e-02   1.4980e+00  -3.6096e-02  64  5   4.7703e-02
+2.7500e+00  -1.9245e-01   1.4862e+00   9.5777e-02  70  5   3.6885e-02
+3.0000e+00  -4.4711e-01   1.4272e+00   2.1790e-01  79  4   2.4398e-02
+3.2500e+00  -6.8090e-01   1.3377e+00   3.2019e-01  89  4   2.4398e-02
+3.5000e+00  -8.8750e-01   1.2374e+00   3.9819e-01  97  4   4.8796e-02
+3.7500e+00  -1.0634e+00   1.1424e+00   4.5228e-01 102  5   4.8796e-02
+4.0000e+00  -1.2064e+00   1.0623e+00   4.8609e-01 107  5   4.8796e-02
+4.2500e+00  -1.3150e+00   1.0017e+00   5.0491e-01 112  5   4.8796e-02
+4.5000e+00  -1.3883e+00   9.6149e-01   5.1404e-01 117  5   4.8796e-02
+4.7500e+00  -1.4265e+00   9.4088e-01   5.1761e-01 123  4   4.8796e-02
+5.0000e+00  -1.4300e+00   9.3903e-01   5.1790e-01 128  4   4.3916e-02
+5.2500e+00  -1.3992e+00   9.5560e-01   5.1514e-01 134  5   4.3916e-02
+5.5000e+00  -1.3346e+00   9.9087e-01   5.0765e-01 138  5   8.7832e-02
+5.7500e+00  -1.2371e+00   1.0451e+00   4.9204e-01 140  5   8.7832e-02
+6.0000e+00  -1.1080e+00   1.1176e+00   4.6386e-01 143  5   7.9049e-02
+6.2500e+00  -9.4916e-01   1.2048e+00   4.1858e-01 146  5   7.9049e-02
+6.5000e+00  -7.6277e-01   1.2999e+00   3.5273e-01 150  5   6.4030e-02
+6.7500e+00  -5.5125e-01   1.3910e+00   2.6497e-01 154  5   6.4030e-02
+7.0000e+00  -3.1828e-01   1.4626e+00   1.5711e-01 158  5   5.1864e-02
+7.2500e+00  -7.0713e-02   1.4981e+00   3.5334e-02 164  5   4.6678e-02
+7.5000e+00   1.8041e-01   1.4879e+00  -8.9839e-02 169  5   4.6678e-02
+7.7500e+00   4.2223e-01   1.4349e+00  -2.0636e-01 175  4   3.3481e-02
+8.0000e+00   6.4422e-01   1.3536e+00  -3.0500e-01 183  3   3.0133e-02
+8.2500e+00   8.3984e-01   1.2619e+00  -3.8145e-01 189  4   5.2811e-02
+8.5000e+00   1.0053e+00   1.1745e+00  -4.3582e-01 194  4   5.2811e-02
+8.7500e+00   1.1380e+00   1.1008e+00  -4.7113e-01 199  5   5.2811e-02
+9.0000e+00   1.2363e+00   1.0456e+00  -4.9189e-01 203  5   5.2811e-02
+9.2500e+00   1.2992e+00   1.0105e+00  -5.0257e-01 208  5   5.2811e-02
+9.5000e+00   1.3266e+00   9.9533e-01  -5.0655e-01 213  5   5.2811e-02
+9.7500e+00   1.3185e+00   9.9977e-01  -5.0542e-01 218  5   5.2811e-02
+1.0000e+01   1.2757e+00   1.0236e+00  -4.9881e-01 222  5   5.2811e-02
+
+Final Run Statistics: 
+
+Number of steps                    = 222
+Number of residual evaluations     = 874
+Number of Jacobian evaluations     = 32
+Number of nonlinear iterations     = 554
+Number of error test failures      = 3
+Number of nonlinear conv. failures = 0
diff --git a/examples/idas/C_openmp/CMakeLists.txt b/examples/idas/C_openmp/CMakeLists.txt
new file mode 100644
index 0000000..845504e
--- /dev/null
+++ b/examples/idas/C_openmp/CMakeLists.txt
@@ -0,0 +1,129 @@
+# ---------------------------------------------------------------
+# Programmer:  Ting Yan @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for IDAS OpenMP examples
+
+# Only include tests if OpenMP is enabled
+IF(OPENMP_FOUND)
+  # Add variable IDAS_examples_OMP with the names of the openmp IDAS examples
+  SET(IDAS_examples_OMP
+    idasFoodWeb_bnd_omp
+    idasFoodWeb_kry_omp
+    )
+ENDIF(OPENMP_FOUND)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDAS_LIB sundials_idas_static)
+  SET(NVECOMP_LIB sundials_nvecopenmp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDAS_LIB sundials_idas_shared)
+  SET(NVECOMP_LIB sundials_nvecopenmp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+SET(SUNDIALS_LIBS ${IDAS_LIB} ${NVECOMP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# update the compilation flags to include OpenMP support
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+
+# Add the build and install targets for each IDAS example
+FOREACH(example ${IDAS_examples_OMP})
+  IF(NOT ${example} MATCHES "idasFoodWeb_kry_omp") # LEB NOTE: This goes away with TestRunner fix for OpenMP
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example} TEST_ARGS 4)
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  ENDIF()
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/C_openmp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${IDAS_examples_OMP})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/C_openmp)
+
+  # Install the extra files
+  FOREACH(extrafile ${IDAS_extras_OMP})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/C_openmp)
+  ENDFOREACH(extrafile ${IDAS_extras_OMP})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDAS")
+  SET(SOLVER_LIB "sundials_idas")
+  LIST2STRING(IDAS_examples_OMP EXAMPLES)
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/idas/C_openmp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/idas/C_openmp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/C_openmp 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/idas/C_openmp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/idas/C_openmp/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/C_openmp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/idas/C_openmp/README b/examples/idas/C_openmp/README
new file mode 100644
index 0000000..5adf53f
--- /dev/null
+++ b/examples/idas/C_openmp/README
@@ -0,0 +1,50 @@
+List of C_openmp examples for IDAS
+
+  idasFoodWeb_bnd_omp   : 2-D food web system, banded Jacobian
+  idasFoodWeb_kry_omp   : 2-D food web system using Krylov solver
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/idas/C_openmp/idasFoodWeb_bnd_omp.c b/examples/idas/C_openmp/idasFoodWeb_bnd_omp.c
new file mode 100644
index 0000000..dd9facc
--- /dev/null
+++ b/examples/idas/C_openmp/idasFoodWeb_bnd_omp.c
@@ -0,0 +1,705 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on idasFoodWeb_bnd.c and parallelized with OpenMP
+ * -----------------------------------------------------------------
+ * Example program for IDAS: Food web problem.
+ *
+ * This example program (OpenMP version) uses the IDABAND linear 
+ * solver, and IDACalcIC for initial condition calculation.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c    + c  )  +  R (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *  a(i,i) = -AA   (all i)
+ *  a(i,j) = -GG   (i <= np , j >  np)
+ *  a(i,j) =  EE   (i >  np, j <= np)
+ *  all other a(i,j) = 0
+ *  b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i <= np)
+ *  b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i  > np)
+ *  d(i) = DPREY   (i <= np)
+ *  d(i) = DPRED   (i > np)
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative = 0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh.
+ *
+ * The DAE system is solved by IDAS using the IDABAND linear solver.
+ * Output is printed at t = 0, .001, .01, .1, .4, .7, 1.
+ *
+ * Optionally, we can set the number of threads from environment 
+ * variable or command line. To check the current value for number
+ * of threads from environment:
+ *      % echo $OMP_NUM_THREADS
+ *
+ * Execution:
+ *
+ * If the user want to use the default value or the number of threads 
+ * from environment value:
+ *      % ./idasFoodWeb_bnd_omp 
+ * If the user want to specify the number of threads to use
+ *      % ./idasFoodWeb_bnd_omp num_threads
+ * where num_threads is the number of threads the user want to use 
+ *
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems, Journal
+ *     of Applied Mathematics and Computation, Vol. 31 (May 1989),
+ *     pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_band.h>
+#include <nvector/nvector_openmp.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+/* Problem Constants. */
+
+#define NPREY       1              /* No. of prey (= no. of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898)
+#define FOURPI      (RCONST(4.0)*PI)
+
+#define MX          20             /* MX = number of x mesh points      */
+#define MY          20             /* MY = number of y mesh points      */
+#define NSMX        (NUM_SPECIES * MX)
+#define NEQ         (NUM_SPECIES*MX*MY)
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a  */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a  */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a  */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b  */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d  */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d  */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns.  */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns.   */
+#define AX          RCONST(1.0)    /* Total range of x variable         */
+#define AY          RCONST(1.0)    /* Total range of y variable         */
+#define RTOL        RCONST(1.e-5)  /* Relative tolerance                */
+#define ATOL        RCONST(1.e-5)  /* Absolute tolerance                */
+#define NOUT        6              /* Number of output times            */
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values        */
+#define TADD        RCONST(0.3)    /* Increment for tout values         */
+#define ZERO        RCONST(0.)     
+#define ONE         RCONST(1.0)    
+
+/* 
+ * User-defined vector and accessor macro: IJ_Vptr.
+ * IJ_Vptr is defined in order to express the underlying 3-D structure of 
+ * the dependent variable vector from its underlying 1-D storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_OMP(vv, (i)*NUM_SPECIES + (j)*NSMX))
+
+/* Type: UserData.  Contains problem constants, etc. */
+
+typedef struct {
+  long int Neq, ns, np, mx, my;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES];
+  N_Vector rates;
+  int nthreads;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+
+static int resweb(realtype time, N_Vector cc, N_Vector cp, N_Vector resval, 
+                  void *user_data);
+
+/* Prototypes for private Helper Functions. */
+
+static void InitUserData(UserData webdata);
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata);
+static void PrintHeader(long int mu, long int ml, realtype rtol, realtype atol);
+static void PrintOutput(void *mem, N_Vector c, realtype t);
+static void PrintFinalStats(void *mem);
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate, UserData webdata);
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+static realtype dotprod(long int size, realtype *x1, realtype *x2);
+static int check_flag(void *flagvalue, char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{ 
+  void *mem;
+  UserData webdata;
+  N_Vector cc, cp, id;
+  int iout, retval;
+  long int mu, ml;
+  realtype rtol, atol, t0, tout, tret;
+  int num_threads;
+
+  mem = NULL;
+  webdata = NULL;
+  cc = cp = id = NULL;
+
+  /* Set the number of threads to use */
+  num_threads = 1;       /* default value */
+#ifdef _OPENMP
+  num_threads = omp_get_max_threads();  /* overwrite with OMP_NUM_THREADS enviroment variable */
+#endif
+  if (argc > 1)      /* overwrite with command line value, if supplied */
+    num_threads = strtol(argv[1], NULL, 0);
+
+  /* Allocate and initialize user data block webdata. */
+
+  webdata = (UserData) malloc(sizeof *webdata);
+  webdata->rates = N_VNew_OpenMP(NEQ, num_threads);
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  webdata->nthreads = num_threads;
+
+  InitUserData(webdata);
+
+  /* Allocate N-vectors and initialize cc, cp, and id. */
+
+  cc  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)cc, "N_VNew_OpenMP", 0)) return(1);
+
+  cp  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)cp, "N_VNew_OpenMP", 0)) return(1);
+
+  id  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)id, "N_VNew_OpenMP", 0)) return(1);
+  
+  SetInitialProfiles(cc, cp, id, webdata);
+  
+  /* Set remaining inputs to IDAMalloc. */
+  
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+
+  /* Call IDACreate and IDAMalloc to initialize IDA. */
+  
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  retval = IDASetUserData(mem, webdata);
+  if(check_flag(&retval, "IDASetUserData", 1)) return(1);
+
+  retval = IDASetId(mem, id);
+  if(check_flag(&retval, "IDASetId", 1)) return(1);
+
+  retval = IDAInit(mem, resweb, t0, cc, cp);
+  if(check_flag(&retval, "IDAInit", 1)) return(1);
+
+  retval = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&retval, "IDASStolerances", 1)) return(1);
+
+  /* Call IDABand to specify the IDA linear solver. */
+
+  mu = ml = NSMX;
+  retval = IDABand(mem, NEQ, mu, ml);
+  if(check_flag(&retval, "IDABand", 1)) return(1);
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+
+  tout = RCONST(0.001);
+  retval = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&retval, "IDACalcIC", 1)) return(1);
+  
+  /* Print heading, basic parameters, and initial values. */
+
+  PrintHeader(mu, ml, rtol, atol);
+  PrintOutput(mem, cc, ZERO);
+  
+  /* Loop over iout, call IDASolve (normal mode), print selected output. */
+  
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    retval = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if(check_flag(&retval, "IDASolve", 1)) return(retval);
+    
+    PrintOutput(mem, cc, tret);
+    
+    if (iout < 3) tout *= TMULT; else tout += TADD;
+    
+  }
+  
+  /* Print final statistics and free memory. */  
+  
+  PrintFinalStats(mem);
+  printf("num_threads = %i\n\n", num_threads);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_OpenMP(cc);
+  N_VDestroy_OpenMP(cp);
+  N_VDestroy_OpenMP(id);
+
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_OpenMP(webdata->rates);
+  free(webdata);
+
+  return(0);
+}
+
+/* Define lines for readability in later routines */ 
+
+#define acoef  (webdata->acoef)
+#define bcoef  (webdata->bcoef)
+#define cox    (webdata->cox)
+#define coy    (webdata->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * resweb: System residual function for predator-prey system.
+ * This routine calls Fweb to get all the right-hand sides of the
+ * equations, then loads the residual vector accordingly,
+ * using cp in the case of prey species.                 
+ */
+
+static int resweb(realtype tt, N_Vector cc, N_Vector cp, 
+                  N_Vector res,  void *user_data)
+{
+  long int jx, jy, is, yloc, loc, np;
+  realtype *resv, *cpv;
+  UserData webdata;
+  
+  webdata = (UserData)user_data;
+  
+  cpv = NV_DATA_OMP(cp);
+  resv = NV_DATA_OMP(res);
+  np = webdata->np;
+  
+  /* Call Fweb to set res to vector of right-hand sides. */
+  Fweb(tt, cc, res, webdata);
+  
+  /* Loop over all grid points, setting residual values appropriately
+     for differential or algebraic components.                        */
+#pragma omp parallel for default(shared) private(jy, yloc, jx, loc, is) schedule(static) 
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np)
+          resv[loc+is] = cpv[loc+is] - resv[loc+is];
+        else
+          resv[loc+is] = -resv[loc+is];
+      }
+    }
+  }
+  
+  return(0);
+  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  webdata->mx = MX;
+  webdata->my = MY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->Neq= NEQ;
+  
+  /* Set up the coefficients a and b, and others found in the equations. */
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); dy2 = (webdata->dy)*(webdata->dy);
+  
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+    
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+    
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+  
+}
+
+/* 
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata)
+{
+  long int loc, yloc, is, jx, jy, np;
+  realtype xx, yy, xyfactor;
+  realtype *ccv, *cpv, *idv;
+  
+  ccv = NV_DATA_OMP(cc);
+  cpv = NV_DATA_OMP(cp);
+  idv = NV_DATA_OMP(id);
+  np = webdata->np;
+  
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy * webdata->dy;
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx * webdata->dx;
+      xyfactor = RCONST(16.0)*xx*(ONE-xx)*yy*(ONE-yy);
+      xyfactor *= xyfactor;
+      loc = yloc + NUM_SPECIES*jx;
+       
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np) {
+          ccv[loc+is] = RCONST(10.0) + (realtype)(is+1) * xyfactor;
+          idv[loc+is] = ONE;
+        }
+        else {
+	  ccv[loc+is] = RCONST(1.0e5);
+          idv[loc+is] = ZERO;
+        }
+      }
+    }
+  }
+  
+  /* Set c' for the prey by calling the function Fweb. */
+  Fweb(ZERO, cc, cp, webdata);
+  
+  /* Set c' for predators to 0. */
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = np; is < NUM_SPECIES; is++) {
+        cpv[loc+is] = ZERO;
+      }
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(long int mu, long int ml, realtype rtol, realtype atol)
+{
+  printf("\nidasFoodWeb_bnd_omp: Predator-prey DAE OpenMP example problem for IDAS \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     System size: %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDABAND,  Band parameters mu = %ld, ml = %ld\n",mu,ml);
+  printf("CalcIC called to correct initial predator concentrations.\n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+  
+}
+
+/* 
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of the concentrations
+ * are printed for the bottom left and top right grid points only.  
+ */
+
+static void PrintOutput(void *mem, N_Vector c, realtype t)
+{
+  int i, kused, flag;
+  long int nst;
+  realtype *c_bl, *c_tr, hused;
+
+  flag = IDAGetLastOrder(mem, &kused);
+  check_flag(&flag, "IDAGetLastOrder", 1);
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetLastStep(mem, &hused);
+  check_flag(&flag, "IDAGetLastStep", 1);
+  
+  c_bl = IJ_Vptr(c,0,0);
+  c_tr = IJ_Vptr(c,MX-1,MY-1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4Le %12.4Le   |\n",c_bl[i],c_tr[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#else
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#endif
+
+  printf("\n");
+}
+
+/* 
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{ 
+  long int nst, nre, nreLS, nni, nje, netf, ncfn;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1);
+  flag = IDADlsGetNumJacEvals(mem, &nje);
+  check_flag(&flag, "IDADlsGetNumJacEvals", 1);
+  flag = IDADlsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDADlsGetNumResEvals", 1);
+
+  printf("-----------------------------------------------------------\n");
+  printf("Final run statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+
+}
+
+/* 
+ * Fweb: Rate function for the food-web problem.                        
+ * This routine computes the right-hand sides of the system equations,   
+ * consisting of the diffusion term and interaction term.                
+ * The interaction term is computed by the function WebRates.            
+ */
+
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate,  
+                 UserData webdata)
+{ 
+  long int jx, jy, is, idyu, idyl, idxu, idxl;
+  realtype xx, yy, *cxy, *ratesxy, *cratexy, dcyli, dcyui, dcxli, dcxui;
+  
+  /* Loop over grid points, evaluate interaction vector (length ns),
+     form diffusion difference terms, and load crate.                    */
+  
+  for (jy = 0; jy < MY; jy++) {
+    yy = (webdata->dy) * jy ;
+    idyu = (jy!=MY-1) ? NSMX : -NSMX;
+    idyl = (jy!= 0  ) ? NSMX : -NSMX;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = (webdata->dx) * jx;
+      idxu = (jx!= MX-1) ?  NUM_SPECIES : -NUM_SPECIES;
+      idxl = (jx!=  0  ) ?  NUM_SPECIES : -NUM_SPECIES;
+      cxy = IJ_Vptr(cc,jx,jy);
+      ratesxy = IJ_Vptr(webdata->rates,jx,jy);
+      cratexy = IJ_Vptr(crate,jx,jy);
+      
+      /* Get interaction vector at this grid point. */
+      WebRates(xx, yy, cxy, ratesxy, webdata);
+      
+      /* Loop over species, do differencing, load crate segment. */
+#pragma omp parallel for default(shared) private(is, dcyli, dcyui, dcxli, dcxui) schedule(static)
+      for (is = 0; is < NUM_SPECIES; is++) {
+        
+        /* Differencing in y. */
+        dcyli = *(cxy+is) - *(cxy - idyl + is) ;
+        dcyui = *(cxy + idyu + is) - *(cxy+is);
+        
+        /* Differencing in x. */
+        dcxli = *(cxy+is) - *(cxy - idxl + is);
+        dcxui = *(cxy + idxu +is) - *(cxy+is);
+        
+        /* Compute the crate values at (xx,yy). */
+        cratexy[is] = coy[is] * (dcyui - dcyli) +
+          cox[is] * (dcxui - dcxli) + ratesxy[is];
+        
+      } /* End is loop */
+    } /* End of jx loop */
+  } /* End of jy loop */
+  
+}
+
+/* 
+ * WebRates: Evaluate reaction rates at a given spatial point.
+ * At a given (x,y), evaluate the array of ns reaction terms R.
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+  
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+   
+  for (is = 0; is < NUM_SPECIES; is++)  
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+  
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(long int size, realtype *x1, realtype *x2)
+{
+  long int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+  return(temp);
+  
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/idas/C_openmp/idasFoodWeb_bnd_omp.out b/examples/idas/C_openmp/idasFoodWeb_bnd_omp.out
new file mode 100644
index 0000000..2fe8ab1
--- /dev/null
+++ b/examples/idas/C_openmp/idasFoodWeb_bnd_omp.out
@@ -0,0 +1,44 @@
+
+idasFoodWeb_bnd_omp: Predator-prey DAE OpenMP example problem for IDAS 
+
+Number of species ns: 2     Mesh dimensions: 20 x 20     System size: 800
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDABAND,  Band parameters mu = 40, ml = 40
+CalcIC called to correct initial predator concentrations.
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  32  4   1.0823e-04
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6188e+02   1.9735e+02   | 127  4   1.4203e-04
+           1.6189e+06   1.9734e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 235  1   3.9160e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 238  1   3.1328e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 239  1   6.2656e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 239  1   6.2656e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+Final run statistics: 
+
+Number of steps                    = 239
+Number of residual evaluations     = 3339
+Number of Jacobian evaluations     = 36
+Number of nonlinear iterations     = 421
+Number of error test failures      = 3
+Number of nonlinear conv. failures = 0
+num_threads = 4
+
diff --git a/examples/idas/C_openmp/idasFoodWeb_kry_omp.c b/examples/idas/C_openmp/idasFoodWeb_kry_omp.c
new file mode 100644
index 0000000..2365ca9
--- /dev/null
+++ b/examples/idas/C_openmp/idasFoodWeb_kry_omp.c
@@ -0,0 +1,841 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ * -----------------------------------------------------------------
+ * Example program for IDAS: Food web problem, OpenMP, GMRES, 
+ * user-supplied preconditioner
+ *
+ * This example program uses the IDASPGMR as the linear 
+ * solver, and IDACalcIC for initial condition calculation.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c    + c  )  +  R (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *  a(i,i) = -AA   (all i)
+ *  a(i,j) = -GG   (i <= np , j >  np)
+ *  a(i,j) =  EE   (i >  np, j <= np)
+ *  all other a(i,j) = 0
+ *  b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i <= np)
+ *  b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i  > np)
+ *  d(i) = DPREY   (i <= np)
+ *  d(i) = DPRED   (i > np)
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative = 0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh.
+ *
+ * The DAE system is solved by IDAS using the IDABAND linear solver.
+ * Output is printed at t = 0, .001, .01, .1, .4, .7, 1.
+ *
+ * Optionally, we can set the number of threads from environment 
+ * variable or command line. To check the current value for number
+ * of threads from environment:
+ *      % echo $OMP_NUM_THREADS
+ *
+ * Execution:
+ *
+ * If the user want to use the default value or the number of threads 
+ * from environment value:
+ *      % ./idasFoodWeb_kry_omp 
+ * If the user want to specify the number of threads to use
+ *      % ./idasFoodWeb_kry_omp num_threads
+ * where num_threads is the number of threads the user want to use 
+ *
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems, Journal
+ *     of Applied Mathematics and Computation, Vol. 31 (May 1989),
+ *     pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <nvector/nvector_openmp.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+/* Problem Constants. */
+
+#define NPREY       1              /* No. of prey (= no. of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898)
+#define FOURPI      (RCONST(4.0)*PI)
+
+#define MX          20             /* MX = number of x mesh points      */
+#define MY          20             /* MY = number of y mesh points      */
+#define NSMX        (NUM_SPECIES * MX)
+#define NEQ         (NUM_SPECIES*MX*MY)
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a  */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a  */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a  */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b  */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d  */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d  */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns.  */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns.   */
+#define AX          RCONST(1.0)    /* Total range of x variable         */
+#define AY          RCONST(1.0)    /* Total range of y variable         */
+#define RTOL        RCONST(1.e-5)  /* Relative tolerance                */
+#define ATOL        RCONST(1.e-5)  /* Absolute tolerance                */
+#define NOUT        6              /* Number of output times            */
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values        */
+#define TADD        RCONST(0.3)    /* Increment for tout values         */
+#define ZERO        RCONST(0.)     
+#define ONE         RCONST(1.0)    
+
+/* 
+ * User-defined vector and accessor macro: IJ_Vptr.
+ * IJ_Vptr is defined in order to express the underlying 3-D structure of 
+ * the dependent variable vector from its underlying 1-D storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_OMP(vv, (i)*NUM_SPECIES + (j)*NSMX))
+
+/* Type: UserData.  Contains problem constants, etc. */
+
+typedef struct {
+  long int Neq, ns, np, mx, my;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES];
+  realtype **PP[MX][MY];
+  long int *pivot[MX][MY];
+  N_Vector rates;
+  N_Vector ewt;
+  void *ida_mem;
+  int nthreads;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+
+static int resweb(realtype time, N_Vector cc, N_Vector cp, N_Vector resval, 
+                  void *user_data);
+
+static int Precond(realtype tt,
+		   N_Vector cc, N_Vector cp, N_Vector rr, 
+		   realtype cj, void *user_data,
+		   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int PSolve(realtype tt, 
+		  N_Vector cc, N_Vector cp, N_Vector rr,
+		  N_Vector rvec, N_Vector zvec,
+		  realtype cj, realtype delta, void *user_data,
+		  N_Vector tmp);
+
+/* Prototypes for private Helper Functions. */
+
+static void InitUserData(UserData webdata);
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata);
+static void PrintHeader(long int maxl, realtype rtol, realtype atol);
+static void PrintOutput(void *mem, N_Vector c, realtype t);
+static void PrintFinalStats(void *mem);
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate, UserData webdata);
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+static realtype dotprod(long int size, realtype *x1, realtype *x2);
+static int check_flag(void *flagvalue, char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{ 
+  void *mem;
+  UserData webdata;
+  N_Vector cc, cp, id;
+  int iout, jx, jy, flag;
+  long int maxl;
+  realtype rtol, atol, t0, tout, tret;
+  int num_threads;
+
+  mem = NULL;
+  webdata = NULL;
+  cc = cp = id = NULL;
+
+  /* Set the number of threads to use */
+  num_threads = 1;   /* default value */
+#ifdef _OPENMP
+  num_threads = omp_get_max_threads();    /* overwrite with OMP_NUM_THREADS */
+#endif
+  if (argc > 1)
+    num_threads = strtol(argv[1], NULL, 0);
+
+  /* Allocate and initialize user data block webdata. */
+
+  webdata = (UserData) malloc(sizeof *webdata);
+  webdata->rates = N_VNew_OpenMP(NEQ, num_threads);
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  webdata->ewt = N_VNew_OpenMP(NEQ, num_threads);
+  for (jx = 0; jx < MX; jx++) {
+    for (jy = 0; jy < MY; jy++) {
+      (webdata->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+      (webdata->PP)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+    }
+  }
+  webdata->nthreads = num_threads;
+
+  InitUserData(webdata);
+
+  /* Allocate N-vectors and initialize cc, cp, and id. */
+
+  cc  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)cc, "N_VNew_OpenMP", 0)) return(1);
+
+  cp  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)cp, "N_VNew_OpenMP", 0)) return(1);
+
+  id  = N_VNew_OpenMP(NEQ, num_threads);
+  if(check_flag((void *)id, "N_VNew_OpenMP", 0)) return(1);
+  
+  SetInitialProfiles(cc, cp, id, webdata);
+  
+  /* Set remaining inputs to IDAMalloc. */
+  
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+
+  /* Call IDACreate and IDAMalloc to initialize IDA. */
+  
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  flag = IDASetUserData(mem, webdata);
+  if(check_flag(&flag, "IDASetUserData", 1)) return(1);
+
+  flag = IDASetId(mem, id);
+  if(check_flag(&flag, "IDASetId", 1)) return(1);
+
+  flag = IDAInit(mem, resweb, t0, cc, cp);
+  if(check_flag(&flag, "IDAInit", 1)) return(1);
+
+  flag = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&flag, "IDASStolerances", 1)) return(1);
+
+  webdata->ida_mem = mem;
+
+  /* Call IDASpgmr to specify the IDA linear solver. */
+
+  maxl = 16;                    /* max dimension of the Krylov subspace */
+  flag = IDASpgmr(mem, maxl);
+  if(check_flag(&flag, "IDASpgmr", 1)) return(1);
+
+  flag = IDASpilsSetPreconditioner(mem, Precond, PSolve);
+  if(check_flag(&flag, "IDASpilsSetPreconditioner", 1)) return(1);
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+
+  tout = RCONST(0.001);
+  flag = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&flag, "IDACalcIC", 1)) return(1);
+  
+  /* Print heading, basic parameters, and initial values. */
+
+  PrintHeader(maxl, rtol, atol);
+  PrintOutput(mem, cc, ZERO);
+  
+  /* Loop over iout, call IDASolve (normal mode), print selected output. */
+  
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    flag = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if(check_flag(&flag, "IDASolve", 1)) return(flag);
+    
+    PrintOutput(mem, cc, tret);
+    
+    if (iout < 3) tout *= TMULT; else tout += TADD;
+    
+  }
+  
+  /* Print final statistics and free memory. */  
+  
+  PrintFinalStats(mem);
+  printf("num_threads = %i\n\n", num_threads);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_OpenMP(cc);
+  N_VDestroy_OpenMP(cp);
+  N_VDestroy_OpenMP(id);
+
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_OpenMP(webdata->rates);
+  N_VDestroy_OpenMP(webdata->ewt);
+  for (jx = 0; jx < MX; jx++) {
+    for (jy = 0; jy < MY; jy ++) {
+      destroyArray((webdata->pivot)[jx][jy]);
+      destroyMat((webdata->PP)[jx][jy]);
+    }
+  }
+  free(webdata);
+
+  return(0);
+}
+
+/* Define lines for readability in later routines */ 
+
+#define acoef  (webdata->acoef)
+#define bcoef  (webdata->bcoef)
+#define cox    (webdata->cox)
+#define coy    (webdata->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * resweb: System residual function for predator-prey system.
+ * This routine calls Fweb to get all the right-hand sides of the
+ * equations, then loads the residual vector accordingly,
+ * using cp in the case of prey species.                 
+ */
+
+static int resweb(realtype tt, N_Vector cc, N_Vector cp, 
+                  N_Vector res,  void *user_data)
+{
+  long int jx, jy, is, yloc, loc, np;
+  realtype *resv, *cpv;
+  UserData webdata;
+  
+  webdata = (UserData)user_data;
+  
+  cpv = NV_DATA_OMP(cp);
+  resv = NV_DATA_OMP(res);
+  np = webdata->np;
+  
+  /* Call Fweb to set res to vector of right-hand sides. */
+  Fweb(tt, cc, res, webdata);
+  
+  /* Loop over all grid points, setting residual values appropriately
+     for differential or algebraic components.                        */
+#pragma omp parallel for default(shared) private(jy, jx, is, yloc, loc) schedule(static) num_threads(webdata->nthreads)  
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np)
+          resv[loc+is] = cpv[loc+is] - resv[loc+is];
+        else
+          resv[loc+is] = -resv[loc+is];
+      }
+    }
+  }
+  
+  return(0);
+  
+}
+
+
+static int Precond(realtype tt, 
+		   N_Vector cc, N_Vector cp, N_Vector rr, 
+		   realtype cj, void *user_data,
+		   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int flag;
+  realtype uround, xx, yy, del_x, del_y;
+  realtype **Pxy, *ratesxy, *Pxycol, *cxy, *cpxy, *ewtxy, cctmp;
+  realtype inc, fac, sqru, perturb_rates[NUM_SPECIES];
+  int is, js, jx, jy, ret;
+  void *mem;
+  N_Vector ewt;
+  realtype hh;
+  UserData webdata;
+
+  webdata = (UserData) user_data;
+  del_x = webdata->dx;
+  del_y = webdata->dy;
+
+  uround = UNIT_ROUNDOFF;
+  sqru = SUNRsqrt(uround);
+
+  mem = webdata->ida_mem;
+  ewt = webdata->ewt;
+  flag = IDAGetErrWeights(mem, ewt);
+  if(check_flag(&flag, "IDAGetErrWeights", 1)) return(1);
+  flag = IDAGetCurrentStep(mem, &hh);
+  if(check_flag(&flag, "IDAGetCurrentStep", 1)) return(1);
+
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy * del_y;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx * del_x;
+      Pxy = (webdata->PP)[jx][jy];
+      cxy = IJ_Vptr(cc, jx, jy);
+      cpxy = IJ_Vptr(cp, jx, jy);
+      ewtxy = IJ_Vptr(ewt, jx, jy);
+      ratesxy = IJ_Vptr((webdata->rates), jx, jy);
+
+      for (js = 0; js < NUM_SPECIES; js++) {
+	inc = sqru*(SUNMAX(SUNRabs(cxy[js]), SUNMAX(hh*SUNRabs(cpxy[js]), ONE/ewtxy[js])));
+	cctmp = cxy[js];
+	cxy[js] += inc;
+	fac = -ONE/inc;
+
+	WebRates(xx, yy, cxy, perturb_rates, webdata);
+
+	Pxycol = Pxy[js];
+	
+	for (is = 0; is < NUM_SPECIES; is++)
+	  Pxycol[is] = (perturb_rates[is] - ratesxy[is])*fac;
+
+	if (js < 1) Pxycol[js] += cj;
+	
+	cxy[js] = cctmp;
+      }
+
+      ret = denseGETRF(Pxy, NUM_SPECIES, NUM_SPECIES, (webdata->pivot)[jx][jy]);
+
+      if (ret != 0) return(1);
+    }
+  }
+
+  return(0);
+
+}
+
+
+static int PSolve(realtype tt, 
+		  N_Vector cc, N_Vector cp, N_Vector rr, 
+		  N_Vector rvec, N_Vector zvec,
+		  realtype cj, realtype dalta, 
+		  void *user_data, N_Vector tmp) 
+{
+  realtype **Pxy, *zxy;
+  long int *pivot;
+  int jx, jy;
+  UserData webdata;
+  
+  webdata = (UserData) user_data;
+
+  N_VScale(ONE, rvec, zvec);
+
+#pragma omp parallel for collapse(2) default(shared) private(jx, jy, zxy, Pxy, pivot) schedule(static) num_threads(webdata->nthreads)
+  for (jx = 0; jx < MX; jx++) {
+    for (jy = 0; jy <MY; jy++) {
+      
+      zxy = IJ_Vptr(zvec, jx, jy);
+      Pxy = (webdata->PP)[jx][jy];
+      pivot = (webdata->pivot)[jx][jy];
+      denseGETRS(Pxy, NUM_SPECIES, pivot, zxy);
+    }
+  }
+  
+  return(0);
+
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  webdata->mx = MX;
+  webdata->my = MY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->Neq= NEQ;
+  
+  /* Set up the coefficients a and b, and others found in the equations. */
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); dy2 = (webdata->dy)*(webdata->dy);
+  
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+    
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+    
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+  
+}
+
+/* 
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata)
+{
+  long int loc, yloc, is, jx, jy, np;
+  realtype xx, yy, xyfactor;
+  realtype *ccv, *cpv, *idv;
+  
+  ccv = NV_DATA_OMP(cc);
+  cpv = NV_DATA_OMP(cp);
+  idv = NV_DATA_OMP(id);
+  np = webdata->np;
+  
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy * webdata->dy;
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx * webdata->dx;
+      xyfactor = RCONST(16.0)*xx*(ONE-xx)*yy*(ONE-yy);
+      xyfactor *= xyfactor;
+      loc = yloc + NUM_SPECIES*jx;
+       
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np) {
+          ccv[loc+is] = RCONST(10.0) + (realtype)(is+1) * xyfactor;
+          idv[loc+is] = ONE;
+        }
+        else {
+	  ccv[loc+is] = RCONST(1.0e5);
+          idv[loc+is] = ZERO;
+        }
+      }
+    }
+  }
+  
+  /* Set c' for the prey by calling the function Fweb. */
+  Fweb(ZERO, cc, cp, webdata);
+  
+  /* Set c' for predators to 0. */
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = np; is < NUM_SPECIES; is++) {
+        cpv[loc+is] = ZERO;
+      }
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(long int maxl, realtype rtol, realtype atol)
+{
+  printf("\nidasFoodWeb_kry_omp: Predator-prey DAE OpenMP example problem for IDAS \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     System size: %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDASpgmr,  Spgmr parameters maxl = %ld\n",maxl);
+  printf("CalcIC called to correct initial predator concentrations.\n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+  
+}
+
+/* 
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of the concentrations
+ * are printed for the bottom left and top right grid points only.  
+ */
+
+static void PrintOutput(void *mem, N_Vector c, realtype t)
+{
+  int i, kused, flag;
+  long int nst;
+  realtype *c_bl, *c_tr, hused;
+
+  flag = IDAGetLastOrder(mem, &kused);
+  check_flag(&flag, "IDAGetLastOrder", 1);
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetLastStep(mem, &hused);
+  check_flag(&flag, "IDAGetLastStep", 1);
+  
+  c_bl = IJ_Vptr(c,0,0);
+  c_tr = IJ_Vptr(c,MX-1,MY-1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4Le %12.4Le   |\n",c_bl[i],c_tr[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#else
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#endif
+
+  printf("\n");
+}
+
+/* 
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{ 
+  long int nst, nre, sli, netf, nps, npevals, nrevalsLS;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDASpilsGetNumLinIters(mem, &sli);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1);
+  flag = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1);
+  flag = IDASpilsGetNumPrecEvals(mem, &npevals);
+  check_flag(&flag, "IDADlsGetNumJacEvals", 1);
+  flag = IDASpilsGetNumResEvals(mem, &nrevalsLS);
+  check_flag(&flag, "IDADlsGetNumResEvals", 1);
+
+  printf("-----------------------------------------------------------\n");
+  printf("Final run statistics: \n\n");
+  printf("Number of steps                       = %ld\n", nst);
+  printf("Number of residual evaluations        = %ld\n", nre);
+  printf("Number of Preconditioner evaluations  = %ld\n", npevals);
+  printf("Number of linear iterations           = %ld\n", sli);
+  printf("Number of error test failures         = %ld\n", netf);
+  printf("Number of precond solve fun called    = %ld\n", nps);
+
+}
+
+/* 
+ * Fweb: Rate function for the food-web problem.                        
+ * This routine computes the right-hand sides of the system equations,   
+ * consisting of the diffusion term and interaction term.                
+ * The interaction term is computed by the function WebRates.            
+ */
+
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate,  
+                 UserData webdata)
+{ 
+  long int jx, jy, is, idyu, idyl, idxu, idxl;
+  realtype xx, yy, *cxy, *ratesxy, *cratexy, dcyli, dcyui, dcxli, dcxui;
+  
+  /* Loop over grid points, evaluate interaction vector (length ns),
+     form diffusion difference terms, and load crate.                    */
+  
+  for (jy = 0; jy < MY; jy++) {
+    yy = (webdata->dy) * jy ;
+    idyu = (jy!=MY-1) ? NSMX : -NSMX;
+    idyl = (jy!= 0  ) ? NSMX : -NSMX;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = (webdata->dx) * jx;
+      idxu = (jx!= MX-1) ?  NUM_SPECIES : -NUM_SPECIES;
+      idxl = (jx!=  0  ) ?  NUM_SPECIES : -NUM_SPECIES;
+      cxy = IJ_Vptr(cc,jx,jy);
+      ratesxy = IJ_Vptr(webdata->rates,jx,jy);
+      cratexy = IJ_Vptr(crate,jx,jy);
+      
+      /* Get interaction vector at this grid point. */
+      WebRates(xx, yy, cxy, ratesxy, webdata);
+      
+      /* Loop over species, do differencing, load crate segment. */
+#pragma omp parallel for default(shared) private(is, dcyli, dcyui, dcxli, dcxui) schedule(static) num_threads(webdata->nthreads)
+      for (is = 0; is < NUM_SPECIES; is++) {
+        
+        /* Differencing in y. */
+        dcyli = *(cxy+is) - *(cxy - idyl + is) ;
+        dcyui = *(cxy + idyu + is) - *(cxy+is);
+        
+        /* Differencing in x. */
+        dcxli = *(cxy+is) - *(cxy - idxl + is);
+        dcxui = *(cxy + idxu +is) - *(cxy+is);
+        
+        /* Compute the crate values at (xx,yy). */
+        cratexy[is] = coy[is] * (dcyui - dcyli) +
+          cox[is] * (dcxui - dcxli) + ratesxy[is];
+        
+      } /* End is loop */
+    } /* End of jx loop */
+  } /* End of jy loop */
+  
+}
+
+/* 
+ * WebRates: Evaluate reaction rates at a given spatial point.
+ * At a given (x,y), evaluate the array of ns reaction terms R.
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+  
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+  
+  for (is = 0; is < NUM_SPECIES; is++)  
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+  
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(long int size, realtype *x1, realtype *x2)
+{
+  long int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+  return(temp);
+  
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/idas/C_openmp/idasFoodWeb_kry_omp.out b/examples/idas/C_openmp/idasFoodWeb_kry_omp.out
new file mode 100644
index 0000000..e99e4b5
--- /dev/null
+++ b/examples/idas/C_openmp/idasFoodWeb_kry_omp.out
@@ -0,0 +1,44 @@
+
+idasFoodWeb_kry_omp: Predator-prey DAE OpenMP example problem for IDAS 
+
+Number of species ns: 2     Mesh dimensions: 20 x 20     System size: 800
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDASpgmr,  Spgmr parameters maxl = 16
+CalcIC called to correct initial predator concentrations.
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  33  4   9.7404e-05
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6189e+02   1.9735e+02   |  86  4   1.7533e-04
+           1.6189e+06   1.9735e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 163  1   4.0396e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 166  1   3.2316e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 167  1   6.4633e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 167  1   6.4633e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+Final run statistics: 
+
+Number of steps                       = 167
+Number of residual evaluations        = 208
+Number of Preconditioner evaluations  = 25
+Number of linear iterations           = 1040
+Number of error test failures         = 0
+Number of precond solve fun called    = 1248
+num_threads = 4
+
diff --git a/examples/idas/parallel/CMakeLists.txt b/examples/idas/parallel/CMakeLists.txt
new file mode 100644
index 0000000..24978c8
--- /dev/null
+++ b/examples/idas/parallel/CMakeLists.txt
@@ -0,0 +1,157 @@
+# ---------------------------------------------------------------
+# $Revision: 4137 $
+# $Date: 2014-06-15 12:26:15 -0700 (Sun, 15 Jun 2014) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for IDAS parallel examples
+
+
+# Add variable IDAS_examples with the names of the parallel IDAS examples
+# "name\;nodes\;tasks"
+SET(IDAS_examples
+  "idasBruss_ASAp_kry_bbd_p\;1\;4"
+  "idasBruss_FSA_kry_bbd_p\;1\;4"
+  "idasBruss_kry_bbd_p\;1\;4"
+  "idasFoodWeb_kry_bbd_p\;1\;4"
+  "idasFoodWeb_kry_p\;1\;4"
+  "idasHeat2D_FSA_kry_bbd_p\;1\;4\;-sensi stg t"
+  "idasHeat2D_kry_bbd_p\;1\;4"
+  "idasHeat2D_kry_p\;1\;4"
+
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the C compiler to the MPICC script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDAS_LIB sundials_idas_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDAS_LIB sundials_idas_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${IDAS_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each IDAS example
+
+SET(ADDED_EXECUTABLES "")
+FOREACH(example_tuple ${IDAS_examples})
+  # first item is example
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+
+  # Only need to add the executable once
+  LIST(FIND ADDED_EXECUTABLES ${example} index)
+  IF(index EQUAL -1)
+    LIST(APPEND ADDED_EXECUTABLES ${example})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  ENDIF(index EQUAL -1)
+
+  # Optional 4th element is test arguments
+  LIST(LENGTH example_tuple n)
+  IF(n EQUAL 4)
+    LIST(GET example_tuple 3 test_args)
+    STRING(REGEX REPLACE " " "_" test_name ${example}_${test_args})
+    SUNDIALS_ADD_TEST(${test_name} ${example} MPI_NPROCS ${number_of_tasks} TEST_ARGS ${test_args})
+  ELSE()
+    SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  ENDIF()
+
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPICC)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPICC)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${IDAS_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/parallel)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDAS")
+  SET(SOLVER_LIB "sundials_idas")
+  FOREACH(example_tuple ${IDAS_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${IDAS_examples})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/idas/parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/idas/parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/idas/parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/idas/parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/parallel
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/idas/parallel/README b/examples/idas/parallel/README
new file mode 100644
index 0000000..661c144
--- /dev/null
+++ b/examples/idas/parallel/README
@@ -0,0 +1,56 @@
+List of parallel IDAS examples
+
+  idasBruss_ASAp_kry_bbd_p  : 2-D chemically reacting system, BBD preconditioner, ASA
+  idasBruss_FSA_kry_bbd_p   : 2-D chemically reacting system, BBD preconditioner, FSA
+  idasBruss_kry_bbd_p       : 2-D chemically reacting system, BBD preconditioner
+  idasFoodWeb_kry_bbd_p     : 2-D food web, BBD preconditioner
+  idasFoodWeb_kry_p         : 2-D food web, block-diagonal preconditioner
+  idasHeat2D_FSA_kry_bbd_p  : 2-D heat equation, BBD preconditioner, FSA
+  idasHeat2D_kry_bbd_p      : 2-D heat equation, BBD preconditioner
+  idasHeat2D_kry_p          : 2-D heat equation, diagonal preconditioner
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/idas/parallel/idasBruss_ASAp_kry_bbd_p.c b/examples/idas/parallel/idasBruss_ASAp_kry_bbd_p.c
new file mode 100644
index 0000000..fe570fe
--- /dev/null
+++ b/examples/idas/parallel/idasBruss_ASAp_kry_bbd_p.c
@@ -0,0 +1,1484 @@
+/* * -----------------------------------------------------------------
+ * $Revision:
+ * $Date:
+ * -----------------------------------------------------------------
+ * Programmer(s): Cosmin Petra and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example program for IDAS: Brusselator, parallel, GMRES, IDABBD
+ * preconditioner, ASA
+ *
+ * This example program for IDAS uses IDASPGMR as the linear solver.
+ * It is written for a parallel computer system and uses the
+ * IDABBDPRE band-block-diagonal preconditioner module for the
+ * IDASPGMR package.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization.
+ * 
+ * The PDE system is a two-species time-dependent PDE known as
+ * Brusselator PDE and models a chemically reacting system.
+ *
+ *                  
+ *  du/dt = eps(u  + u) + u^2 v -(B+1)u + A  
+ *               xx   yy
+ *                                          domain Omega = [0,L]X[0,L]
+ *  dv/dt = eps(v  + v) - u^2 v + Bu
+ *               xx   yy
+ *
+ *  B.C. : Neumann
+ *  I.C  : u(x,y,t0) = u0(x,y) =  1  - 0.5*cos(pi*y/L) 
+ *         v(x,y,t0) = v0(x,y) = 3.5 - 2.5*cos(pi*x/L) 
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh, and so the system size Neq is the product MX*MY*NUM_SPECIES. 
+ * The system is actually implemented on submeshes, processor by 
+ * processor, with an MXSUB by MYSUB mesh on each of NPEX * NPEY 
+ * processors.
+ *
+ * 
+ * The sensitivity of the output functional
+ *                            1    /
+ *                   g(t) = -----  | u(x,y,t) ,
+ *                          |L^2|  /
+ *                               Omega 
+ * with respect to initial conditions u0 and v0 is also computed.
+ * Given the perturbations du0 and dv0 in the IC, the sensitivity of
+ * of g at final time tf is
+ *             1    /
+ *  dg(tf) = -----  | ( lambda(0,x,y) du0(x,y) + mu(0,x,y) dv0(x,y) ),
+ *           |L^2|  /
+ *                Omega 
+ * where lambda and mu are the solutions of the adjoint PDEs:
+ *
+ *  dl/dt = - eps(l  + l) - (2uv - B - 1)l + (2uv - B)m  
+ *                 xx   yy
+ *                                          domain Omega = [0,L]X[0,L]
+ *  dm/dt = - eps(m  + m) - u^2 l + u^2 m
+ *                 xx   yy
+ * B.C. : Neumann
+ * I.C. : l(x,y,tf) = 1
+ *        m(x,y,tf) = 0
+ *
+ * The adjoint PDEs are discretized and solved in the same way as
+ * the Brusselator PDEs.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <idas/idas_bbdpre.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+/* Problem Constants */
+#define NUM_SPECIES 2 
+#define ctL         RCONST(1.0)    /* Domain =[0,L]^2 */
+#define ctA         RCONST(1.0)
+#define ctB         RCONST(3.4)
+#define ctEps       RCONST(2.0e-3)
+
+#define PI          RCONST(3.1415926535898) /* pi */ 
+
+#define MXSUB       21    /* Number of x mesh points per processor subgrid */
+#define MYSUB       21    /* Number of y mesh points per processor subgrid */
+#define NPEX        2     /* Number of subgrids in the x direction */
+#define NPEY        2     /* Number of subgrids in the y direction */
+#define MX          (MXSUB*NPEX)      /* MX = number of x mesh points */
+#define MY          (MYSUB*NPEY)      /* MY = number of y mesh points */
+#define NSMXSUB     (NUM_SPECIES * MXSUB)
+#define NEQ         (NUM_SPECIES*MX*MY) /* Number of equations in system */
+
+#define RTOL        RCONST(1.e-5)  /*  rtol tolerance */
+#define ATOL        RCONST(1.e-5)  /*  atol tolerance */
+
+#define TBEGIN      RCONST(0.0)   /* Multiplier for tout values */
+#define TEND        RCONST(1.0)    /* Increment for tout values */
+
+#define STEPS       50
+
+#define ZERO        RCONST(0.0)
+#define HALF        RCONST(0.5) 
+#define ONE         RCONST(1.0)
+#define TWO         RCONST(2.0)
+ 
+/* User-defined vector accessor macro IJ_Vptr. */
+
+/*
+ * IJ_Vptr is defined in order to express the underlying 3-d structure of the 
+ * dependent variable vector from its underlying 1-d storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_P(vv, (i)*NUM_SPECIES + (j)*NSMXSUB ))
+
+/* Type: UserData.  Contains problem constants, preconditioner data, etc. */
+typedef struct {
+  int ns, thispe, npes, ixsub, jysub, npex, npey;
+  int mxsub, mysub, nsmxsub, nsmxsub2;
+  realtype A, B, L, eps[NUM_SPECIES];
+  realtype dx, dy;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES];
+  realtype gridext[(MXSUB+2)*(MYSUB+2)*NUM_SPECIES];
+  realtype rhs[NUM_SPECIES];
+  MPI_Comm comm;
+  realtype rates[2];
+  long int n_local;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+static int res(realtype tt, 
+               N_Vector uv, N_Vector uvp, N_Vector rr, 
+               void *user_data);
+
+static int reslocal(long int Nlocal, realtype tt, 
+                    N_Vector uv, N_Vector uvp, N_Vector res, 
+                    void *user_data);
+
+static int rescomm(long int Nlocal, realtype tt,
+                   N_Vector uv, N_Vector uvp, 
+                   void *user_data);
+
+/* Prototypes for supporting functions */
+static void BSend(MPI_Comm comm, int thispe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype carray[]);
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[]);
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[]);
+
+static void ReactRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData data);
+
+/*                  ADJOINT                        */
+
+static int resB(realtype tt, 
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                void *user_dataB);
+
+static int resBlocal(long int Nlocal, realtype tt, 
+                     N_Vector uv, N_Vector uvp, 
+                     N_Vector yyB, N_Vector ypB, 
+                     N_Vector res, void *user_dataB);
+
+/* Prototypes for private functions */
+static void InitUserData(UserData data, int thispe, int npes, 
+                         MPI_Comm comm);
+
+static void SetInitialProfiles(N_Vector uv, N_Vector uvp, N_Vector id,
+                               N_Vector resid, UserData data);
+
+static void SetInitialProfilesB(N_Vector uv, N_Vector uvp,
+                               N_Vector uvB, N_Vector uvpB,
+                                N_Vector residB, UserData data);
+
+static void PrintHeader(int SystemSize, int maxl, 
+                        long int mudq, long int mldq, 
+                        long int mukeep, long int mlkeep,
+                        realtype rtol, realtype atol);
+
+static void PrintOutput(void *mem, N_Vector uv, realtype time,
+                        UserData data, MPI_Comm comm);
+
+static void PrintSol(void* mem, N_Vector uv, N_Vector uvp, UserData data,
+                     MPI_Comm comm);
+
+static void PrintAdjSol(N_Vector uvB, N_Vector uvpB, UserData data);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData data;
+  long int SystemSize, local_N, mudq, mldq, mukeep, mlkeep;
+  realtype rtol, atol, t0, tout, tret;
+  N_Vector uv, uvp, resid, id, uvB, uvpB, residB, qB;
+  int thispe, npes, maxl, retval;
+
+  int nckpnt, indexB;
+
+  uv = uvp = resid = id = NULL;
+  data = NULL;
+  mem = NULL;
+
+  /* Set communicator, and get processor number and total number of PE's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_rank(comm, &thispe);
+  MPI_Comm_size(comm, &npes);
+
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d not equal to NPEX*NPEY = %d\n", 
+              npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1); 
+  }
+  
+  /* Set local length (local_N) and global length (SystemSize). */
+  local_N = MXSUB*MYSUB*NUM_SPECIES;
+  SystemSize = NEQ;
+
+  /* Set up user data block data. */
+  data = (UserData) malloc(sizeof *data);
+
+  InitUserData(data, thispe, npes, comm);
+  
+  /* Create needed vectors, and load initial values.
+     The vector resid is used temporarily only.        */
+  uv  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)uv, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  uvp  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)uvp, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  resid = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)resid, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  id  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+  
+  SetInitialProfiles(uv, uvp, id, resid, data);
+
+  res(ZERO, uv, uvp, resid, data);
+  
+  /* Set remaining inputs to IDAS. */
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+  
+  /* Call IDACreate and IDAInit to initialize solution */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetUserData(mem, data);
+  if(check_flag(&retval, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetId(mem, id);
+  if(check_flag(&retval, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDAInit(mem, res, t0, uv, uvp);
+  if(check_flag(&retval, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+  
+  retval = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&retval, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDASpgmr to specify the IDAS LINEAR SOLVER IDASPGMR */
+  maxl = 16;
+  retval = IDASpgmr(mem, maxl);
+  if(check_flag(&retval, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+
+
+  /* Call IDABBDPrecInit to initialize the band-block-diagonal preconditioner.
+     The half-bandwidths for the difference quotient evaluation are exact
+     for the system Jacobian, but only a 5-diagonal band matrix is retained. */
+  mudq = mldq = NSMXSUB;
+  mukeep = mlkeep = 2;
+  retval = IDABBDPrecInit(mem, local_N, mudq, mldq, mukeep, mlkeep, 
+                          ZERO, reslocal, NULL);
+  if(check_flag(&retval, "IDABBDPrecInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Initialize adjoint module. */
+  retval = IDAAdjInit(mem, STEPS, IDA_POLYNOMIAL);
+  if(check_flag(&retval, "IDAAdjInit", 1, thispe)) MPI_Abort(comm, 1);
+
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+  tout = RCONST(0.001);
+  retval = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&retval, "IDACalcIC", 1, thispe)) MPI_Abort(comm, 1);
+
+  if (thispe == 0) printf("\nStarting integration of the FORWARD problem\n\n");  
+
+  /* On PE 0, print heading, basic parameters, initial values. */
+  if (thispe == 0) PrintHeader(SystemSize, maxl, 
+                               mudq, mldq, mukeep, mlkeep,
+                               rtol, atol);
+  /* Call IDAS in tout loop, normal mode, and print selected output. */
+  retval = IDASolveF(mem, TEND, &tret, uv, uvp, IDA_NORMAL, &nckpnt);
+  if(check_flag(&retval, "IDASolveF", 1, thispe)) MPI_Abort(comm, 1);
+
+
+  PrintOutput(mem, uv, tret, data, comm);
+
+  /* Print each PE's portion of the solution in a separate file. */
+  /* PrintSol(mem, uv, uvp, data, comm); */
+
+  /* On PE 0, print final set of statistics. */  
+  if (thispe == 0)  {
+    PrintFinalStats(mem);
+  }
+
+  /*******************************************************
+  *                 ADJOINT                              *
+  *******************************************************/
+  if (thispe == 0) printf("\n\t\t BACKWARD problem\n");
+
+  uvB    = N_VNew_Parallel(comm, local_N, SystemSize);
+  uvpB   = N_VNew_Parallel(comm, local_N, SystemSize);
+  residB = N_VNew_Parallel(comm, local_N, SystemSize);
+  qB = N_VNew_Parallel(comm, local_N, SystemSize);
+
+
+  retval = IDACreateB(mem, &indexB);
+
+  /*Get consistent IC */
+  SetInitialProfilesB(uv, uvp, uvB, uvpB, residB, data);
+
+  retval = IDAInitB(mem, indexB, resB, TEND, uvB, uvpB);
+  if(check_flag(&retval, "IDAInitB", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetUserDataB(mem, indexB, data);
+  if(check_flag(&retval, "IDASetUserDataB", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetIdB(mem, indexB, id);
+  if(check_flag(&retval, "IDASetIdBIDAInitB", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASStolerancesB(mem, indexB, rtol, atol);
+  if(check_flag(&retval, "IDASStolerancesB", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDASpgmr to specify the IDAS LINEAR SOLVER IDASPGMR */
+  maxl = 16;
+  retval = IDASpgmrB(mem, indexB, maxl);
+
+  mudq = mldq = NSMXSUB;
+  mukeep = mlkeep = 2;
+  retval = IDABBDPrecInitB(mem, indexB, local_N, mudq, mldq, mukeep, mlkeep, 
+                          ZERO, resBlocal, NULL);
+  if(check_flag(&retval, "IDABBDPrecInitB", 1, thispe)) MPI_Abort(comm, 1);
+  
+  retval = IDASolveB(mem, TBEGIN, IDA_NORMAL);
+  if(check_flag(&retval, "IDASolveB", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDAGetB(mem, indexB, &tret, uvB, uvpB);
+  if(check_flag(&retval, "IDAGetB", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Print each PE's portion of solution in a separate file. */
+  /* PrintAdjSol(uvB, uvpB, data); */
+
+  /* On PE 0, print final set of statistics. */  
+  if (thispe == 0)  {
+    PrintFinalStats(IDAGetAdjIDABmem(mem, indexB));
+  }
+
+
+  /* Free memory. */
+  N_VDestroy_Parallel(uv);
+  N_VDestroy_Parallel(uvp);
+  N_VDestroy_Parallel(id);
+  N_VDestroy_Parallel(resid);
+  N_VDestroy_Parallel(uvB);
+  N_VDestroy_Parallel(uvpB);
+  N_VDestroy_Parallel(residB);
+
+  IDAFree(&mem);
+
+  free(data);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in data (of type UserData).   
+ */
+
+static void InitUserData(UserData data, int thispe, int npes, 
+                         MPI_Comm comm)
+{
+  data->jysub = thispe / NPEX;
+  data->ixsub = thispe - (data->jysub)*NPEX;
+  data->mxsub = MXSUB;
+  data->mysub = MYSUB;
+  data->npex = NPEX;
+  data->npey = NPEY;
+  data->ns = NUM_SPECIES;
+  data->dx = ctL/(MX-1);
+  data->dy = ctL/(MY-1);
+  data->thispe = thispe;
+  data->npes   = npes;
+  data->nsmxsub = MXSUB * NUM_SPECIES;
+  data->nsmxsub2 = (MXSUB+2)*NUM_SPECIES;
+  data->comm = comm;
+  data->n_local = MXSUB*MYSUB*NUM_SPECIES;
+
+  data->A = ctA;
+  data->B = ctB;
+  data->L = ctL;
+  data->eps[0] = data->eps[1] = ctEps;
+}
+
+/*
+ * SetInitialProfiles: Set initial conditions in uv, uvp, and id.
+ */
+
+static void SetInitialProfiles(N_Vector uv, N_Vector uvp, N_Vector id,
+                               N_Vector resid, UserData data)
+{
+  int ixsub, jysub, mxsub, mysub, nsmxsub, ix, jy;
+  realtype *idxy, dx, dy, x, y, *uvxy, *uvxy1, L, npex, npey;
+
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  mxsub = data->mxsub;
+  mysub = data->mysub;
+  nsmxsub = data->nsmxsub;
+  npex = data->npex;
+  npey = data->npey;
+  dx = data->dx;
+  dy = data->dy;
+  L = data->L;
+
+  /* Loop over grid, load uv values and id values. */
+  for (jy = 0; jy < mysub; jy++) {
+    y = (jy + jysub*mysub) * dy;
+    for (ix = 0; ix < mxsub; ix++) {
+      x = (ix + ixsub*mxsub) * dx;
+      uvxy = IJ_Vptr(uv,ix,jy); 
+
+      uvxy[0] = RCONST(1.0) - HALF*cos(PI*y/L); 
+      uvxy[1] = RCONST(3.5) - RCONST(2.5)*cos(PI*x/L);
+    }
+  }
+
+  N_VConst(ONE, id);
+
+  if (jysub == 0) {
+    for (ix=0; ix<mxsub; ix++) {
+      idxy = IJ_Vptr(id,ix,0);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,ix,0);
+      uvxy1 = IJ_Vptr(uv,ix,1);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+    }
+  }
+
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      idxy = IJ_Vptr(id,mxsub-1,jy);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,mxsub-1,jy);
+      uvxy1 = IJ_Vptr(uv,mxsub-2,jy);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+    }
+  }
+
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      idxy = IJ_Vptr(id,0,jy);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,0,jy);
+      uvxy1 = IJ_Vptr(uv,1,jy);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+    }    
+  }
+
+  if (jysub == npey-1) {
+    for (ix=0; ix<mxsub; ix++) {
+      idxy = IJ_Vptr(id,ix,jysub);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,ix,mysub-1);
+      uvxy1 = IJ_Vptr(uv,ix,mysub-2);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+    }
+  }
+
+  /* Derivative found by calling the residual function with uvp = 0. */
+  N_VConst(ZERO, uvp);
+  res(ZERO, uv, uvp, resid, data);
+  N_VScale(-ONE, resid, uvp);
+}
+
+/*
+ * SetInitialProfilesB: Set initial conditions in uvB, uvpB
+ */
+
+static void SetInitialProfilesB(N_Vector uv, N_Vector uvp,
+                               N_Vector uvB, N_Vector uvpB,
+                               N_Vector residB, UserData data)
+{
+  int ixsub, jysub, mxsub, mysub, nsmxsub, ix, jy;
+  realtype dx, dy, *uvxy, *uvBxy, *uvpBxy, npex, npey;
+  realtype B;
+
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  mxsub = data->mxsub;
+  mysub = data->mxsub;
+  nsmxsub = data->nsmxsub;
+  npex = data->npex;
+  npey = data->npey;
+  dx = data->dx;
+  dy = data->dy;
+  B = data->B;
+
+  /* Loop over grid, load (lambda, mu) values. */
+  for (jy = 0; jy < mysub; jy++) {
+    for (ix = 0; ix < mxsub; ix++) {
+      uvBxy = IJ_Vptr(uvB,  ix,jy); 
+      uvpBxy = IJ_Vptr(uvpB,ix,jy); 
+
+      uvxy = IJ_Vptr(uv,ix,jy); 
+      
+      uvBxy[0] = ONE;
+      uvBxy[1] = ZERO;
+
+      uvpBxy[0] = -TWO*uvxy[0]*uvxy[1]+(B+1);
+      uvpBxy[1] = -uvxy[0]*uvxy[0];
+    }
+  }
+
+  if (jysub == 0) {
+    for (ix=0; ix<mxsub; ix++) {
+
+      uvBxy   = IJ_Vptr(uvB,ix,0);
+      uvpBxy  = IJ_Vptr(uvpB,ix,0);
+
+      uvpBxy[0] = uvpBxy[1] = ZERO;
+    }
+  }
+
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+
+      uvBxy   = IJ_Vptr(uvB,mxsub-1,jy);
+      uvpBxy  = IJ_Vptr(uvpB,mxsub-1,jy);
+
+      uvpBxy[0] = uvpBxy[1] = ZERO;
+    }
+  }
+
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+
+      uvBxy   = IJ_Vptr(uvB,0,jy);
+      uvpBxy  = IJ_Vptr(uvpB,0,jy);
+
+      uvpBxy[0] = uvpBxy[1] = ZERO;
+    }    
+  }
+
+  if (jysub == npey-1) {
+    for (ix=0; ix<mxsub; ix++) {
+
+      uvBxy   = IJ_Vptr(uvB,ix,mysub-1);
+      uvpBxy  = IJ_Vptr(uvpB,ix,mysub-1);
+
+      uvpBxy[0] = uvpBxy[1] = ZERO;
+    }
+  }
+}
+
+
+/*
+ * Print first lines of output (problem description)
+ * and table headerr
+ */
+
+static void PrintHeader(int SystemSize, int maxl, 
+                        long int mudq, long int mldq, 
+                        long int mukeep, long int mlkeep,
+                        realtype rtol, realtype atol)
+{
+  printf("\n BRUSSELATOR: chemically reacting system\n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d\n", MX, MY);
+  printf("Total system size: %d\n",SystemSize);
+  printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+  printf("     Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDASPGMR     Max. Krylov dimension maxl: %d\n", maxl);
+  printf("Preconditioner: band-block-diagonal (IDABBDPRE), with parameters\n");
+  printf("     mudq = %ld,  mldq = %ld,  mukeep = %ld,  mlkeep = %ld\n",
+         mudq, mldq, mukeep, mlkeep);
+
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+}
+
+
+/*
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of c1 and c2
+ * are printed for the bottom left and top right grid points only.
+ */
+
+static void PrintOutput(void *mem, N_Vector uv, realtype tt,
+                        UserData data, MPI_Comm comm)
+{
+  MPI_Status status;
+  realtype *cdata, clast[2], hused;
+  long int nst;
+  int i, kused, flag, thispe, npelast, ilast;;
+
+  thispe = data->thispe; 
+  npelast = data->npes - 1;
+  cdata = N_VGetArrayPointer_Parallel(uv);
+  
+  /* Send conc. at top right mesh point from PE npes-1 to PE 0. */
+  if (thispe == npelast) {
+    ilast = NUM_SPECIES*MXSUB*MYSUB - 2;
+    if (npelast != 0)
+      MPI_Send(&cdata[ilast], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else { clast[0] = cdata[ilast]; clast[1] = cdata[ilast+1]; }
+  }
+  
+  /* On PE 0, receive conc. at top right from PE npes - 1.
+     Then print performance data and sampled solution values. */
+  
+  if (thispe == 0) {
+    
+    if (npelast != 0)
+      MPI_Recv(&clast[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    
+    flag = IDAGetLastOrder(mem, &kused);
+    check_flag(&flag, "IDAGetLastOrder", 1, thispe);
+    flag = IDAGetNumSteps(mem, &nst);
+    check_flag(&flag, "IDAGetNumSteps", 1, thispe);
+    flag = IDAGetLastStep(mem, &hused);
+    check_flag(&flag, "IDAGetLastStep", 1, thispe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4Le %12.4Le   |\n",cdata[i],clast[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#else
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#endif
+    printf("\n");
+
+  }
+
+}
+
+static void PrintSol(void* mem, N_Vector uv, N_Vector uvp, 
+                     UserData data, MPI_Comm comm)
+{
+  FILE* fout;
+  realtype *uvxy;
+  int ix, jy, mxsub, mysub, npex, npey, ixsub, jysub, nsmxsub, thispe, i, j;
+  char szFilename[128];
+
+  thispe = data->thispe;
+
+  sprintf(szFilename, "ysol%da.txt", thispe);
+
+  fout = fopen(szFilename, "w+");
+  if (fout==NULL) {
+    printf("PE[% 2d] is unable to write solution to disk!\n", thispe);
+    return;
+  }
+
+  npex = data->npex;
+  npey = data->npey;
+
+  mxsub = data->mxsub;
+  mysub = data->mysub;
+
+  ixsub = data->ixsub;  
+  jysub = data->jysub;
+
+  nsmxsub = data->nsmxsub; 
+
+  for (jy=0; jy<mysub; jy++) {
+
+    j = jysub*mysub+jy;
+
+    for (ix=0; ix<mxsub; ix++) {
+
+      i = ix + mxsub*ixsub;
+      if(MXSUB<5 && MYSUB<5)
+        printf("PE 2D[% 2d][% 2d] -- 1D[% 2d]  subgrid[%d][%d]  uv[%d][%d] uv[[%d]]\n", 
+               ixsub, jysub, thispe, ix, jy, i, j,
+               (i)*NUM_SPECIES + (j)*NSMXSUB*npex);
+        
+      uvxy  = IJ_Vptr(uv, ix, jy);
+      /* uvxy = (&NV_Ith_P(uv, (i)*NUM_SPECIES + (j)*NSMXSUB*npex )); */
+      fprintf(fout, "%g\n%g\n", uvxy[0], uvxy[1]);
+    }
+  }    
+  fclose(fout);
+}
+
+static void PrintAdjSol(N_Vector uvB, N_Vector uvpB, UserData data)
+{
+  FILE* fout;
+  realtype *uvxy;
+  int ix, jy, mxsub, mysub, npex, npey, ixsub, jysub, nsmxsub, thispe;
+  char szFilename[128];
+
+  thispe = data->thispe;
+
+  sprintf(szFilename, "ysol%dadj.txt", thispe);
+
+  fout = fopen(szFilename, "w+");
+  if (fout==NULL) {
+    printf("PE[% 2d] is unable to write adj solution to disk!\n", thispe);
+    return;
+  }
+
+  npex = data->npex;
+  npey = data->npey;
+
+  mxsub = data->mxsub;
+  mysub = data->mysub;
+
+  ixsub = data->ixsub;  
+  jysub = data->jysub;
+
+  nsmxsub = data->nsmxsub; 
+
+  for (jy=0; jy<mysub; jy++) {
+    for (ix=0; ix<mxsub; ix++) {
+
+      uvxy  = IJ_Vptr(uvB, ix, jy);
+      fprintf(fout, "%g\n%g\n", uvxy[0], uvxy[1]);
+    }
+  }    
+  fclose(fout);
+}
+
+
+
+/*
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int nst, nre, nreLS, netf, ncfn, nni, ncfl, nli, npe, nps, nge;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1, 0);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1, 0);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1, 0);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1, 0);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1, 0);
+
+  flag = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&flag, "IDASpilsGetNumConvFails", 1, 0);
+  flag = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&flag, "IDASpilsGetNumLinIters", 1, 0);
+  flag = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&flag, "IDASpilsGetNumPrecEvals", 1, 0);
+  flag = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&flag, "IDASpilsGetNumPrecSolves", 1, 0);
+  flag = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDASpilsGetNumResEvals", 1, 0);
+
+  flag = IDABBDPrecGetNumGfnEvals(mem, &nge);
+  check_flag(&flag, "IDABBDPrecGetNumGfnEvals", 1, 0);
+
+  printf("-----------------------------------------------------------\n");
+  printf("\nFinal statistics: \n\n");
+
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n\n", ncfn);
+
+  printf("Number of linear iterations        = %ld\n", nli);
+  printf("Number of linear conv. failures    = %ld\n\n", ncfl);
+
+  printf("Number of preconditioner setups    = %ld\n", npe);
+  printf("Number of preconditioner solves    = %ld\n", nps);
+  printf("Number of local residual evals.    = %ld\n", nge);
+
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", 
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA & SUPPORTING FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * res: System residual function 
+ *
+ * To compute the residual function F, this routine calls:
+ * rescomm, for needed communication, and then
+ * reslocal, for computation of the residuals on this processor.      
+ */
+
+static int res(realtype tt, 
+               N_Vector uv, N_Vector uvp, N_Vector rr, 
+               void *user_data)
+{
+  int retval;
+  UserData data;
+  long int Nlocal;
+  
+  data = (UserData) user_data;
+  
+  Nlocal = data->n_local;
+
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(Nlocal, tt, uv, uvp, user_data);
+  
+  /* Call reslocal to calculate the local portion of residual vector. */
+  retval = reslocal(Nlocal, tt, uv, uvp, rr, user_data);
+  
+  return(0);
+}
+
+/*
+ * rescomm: Communication routine in support of resweb.
+ * This routine performs all inter-processor communication of components
+ * of the uv vector needed to calculate F, namely the components at all
+ * interior subgrid boundaries (ghost cell data).  It loads this data
+ * into a work array cext (the local portion of c, extended).
+ * The message-passing uses blocking sends, non-blocking receives,
+ * and receive-waiting, in routines BRecvPost, BSend, BRecvWait.         
+ */
+
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector uv, N_Vector uvp,
+                   void *user_data)
+{
+
+  UserData data;
+  realtype *cdata, *gridext, buffer[2*NUM_SPECIES*MYSUB];
+  int thispe, ixsub, jysub, nsmxsub, nsmysub;
+  MPI_Comm comm;
+  MPI_Request request[4];
+  
+  data = (UserData) user_data;
+  cdata = N_VGetArrayPointer_Parallel(uv);
+  
+  /* Get comm, thispe, subgrid indices, data sizes, extended array cext. */
+  
+  comm = data->comm;     
+  thispe = data->thispe;
+
+  ixsub = data->ixsub;   
+  jysub = data->jysub;
+  gridext = data->gridext;
+  nsmxsub = data->nsmxsub; 
+  nsmysub = (data->ns)*(data->mysub);
+  
+  /* Start receiving boundary data from neighboring PEs. */
+  BRecvPost(comm, request, thispe, ixsub, jysub, nsmxsub, nsmysub, 
+            gridext, buffer);
+  
+  /* Send data from boundary of local grid to neighboring PEs. */
+  BSend(comm, thispe, ixsub, jysub, nsmxsub, nsmysub, cdata);
+  
+  /* Finish receiving boundary data from neighboring PEs. */
+  BRecvWait(request, ixsub, jysub, nsmxsub, gridext, buffer);
+  
+  return(0);
+}
+
+/*
+ * BRecvPost: Start receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls. 
+ */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[])
+{
+  int offsetce;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Irecv(&cext[NUM_SPECIES], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1) {
+    offsetce = NUM_SPECIES*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&cext[offsetce], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe+1, 0, comm, &request[3]);
+  }
+  
+}
+
+/*
+ * BRecvWait: Finish receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls.  
+ */
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[])
+{
+  int i;
+  int ly, dsizex2, offsetce, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2*NUM_SPECIES;
+  
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+1)*dsizex2;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufleft[offsetbuf+i];
+    }
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+2)*dsizex2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/*
+ * BSend: Send boundary data to neighboring PEs.
+ * This routine sends components of uv from internal subgrid boundaries
+ * to the appropriate neighbor PEs.                                      
+ */
+ 
+static void BSend(MPI_Comm comm, int my_pe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype cdata[])
+{
+  int i;
+  int ly, offsetc, offsetbuf;
+  realtype bufleft[NUM_SPECIES*MYSUB], bufright[NUM_SPECIES*MYSUB];
+
+  /* If jysub > 0, send data from bottom x-line of uv. */
+
+  if (jysub != 0)
+    MPI_Send(&cdata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If jysub < NPEY-1, send data from top x-line of uv. */
+
+  if (jysub != NPEY-1) {
+    offsetc = (MYSUB-1)*dsizex;
+    MPI_Send(&cdata[offsetc], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If ixsub > 0, send data from left y-line of uv (via bufleft). */
+
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = ly*dsizex;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufleft[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+  
+  /* If ixsub < NPEX-1, send data from right y-line of uv (via bufright). */
+  
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = offsetbuf*MXSUB + (MXSUB-1)*NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufright[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* Define lines are for ease of readability in the following functions. */
+
+#define mxsub      (data->mxsub)
+#define mysub      (data->mysub)
+#define npex       (data->npex)
+#define npey       (data->npey)
+#define ixsub      (data->ixsub)
+#define jysub      (data->jysub)
+#define nsmxsub    (data->nsmxsub)
+#define nsmxsub2   (data->nsmxsub2)
+#define dx         (data->dx)
+#define dy         (data->dy)
+#define cox        (data->cox)
+#define coy        (data->coy)
+#define gridext    (data->gridext)
+#define eps        (data->eps)
+#define ns         (data->ns)
+
+/*
+ * reslocal: Compute res = F(t,uv,uvp).
+ * This routine assumes that all inter-processor communication of data
+ * needed to calculate F has already been done.  Components at interior
+ * subgrid boundaries are assumed to be in the work array cext.
+ * The local portion of the uv vector is first copied into cext.
+ * The exterior Neumann boundary conditions are explicitly handled here
+ * by copying data from the first interior mesh line to the ghost cell
+ * locations in cext.  Then the reaction and diffusion terms are
+ * evaluated in terms of the cext array, and the residuals are formed.
+ * The reaction terms are saved separately in the vector data->rates
+ * for use by the preconditioner setup routine.                          
+ */
+
+static int reslocal(long int Nlocal, realtype tt, 
+                    N_Vector uv, N_Vector uvp, N_Vector rr,
+                    void *user_data)
+{
+  realtype *uvdata, *uvpxy, *resxy, xx, yy, dcyli, dcyui, dcxli, dcxui, dx2, dy2;
+  realtype ixend, ixstart, jystart, jyend;
+  int ix, jy, is, i, locc, ylocce, locce;
+  realtype rates[2];
+  UserData data;
+  
+  data = (UserData) user_data;
+
+  /* Get data pointers, subgrid data, array sizes, work array cext. */
+  uvdata = N_VGetArrayPointer_Parallel(uv);
+
+  dx2 = dx * dx;
+  dy2 = dy * dy;
+
+  
+  /* Copy local segment of uv vector into the working extended array gridext. */
+  locc = 0;
+  locce = nsmxsub2 + NUM_SPECIES;
+  for (jy = 0; jy < mysub; jy++) {
+    for (i = 0; i < nsmxsub; i++) gridext[locce+i] = uvdata[locc+i];
+    locc = locc + nsmxsub;
+    locce = locce + nsmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+     a boundary PE, copy data from the first interior mesh line of uv to gridext. */
+  
+  /* If jysub = 0, copy x-line 2 of uv to gridext. */
+  if (jysub == 0)
+    { for (i = 0; i < nsmxsub; i++) gridext[NUM_SPECIES+i] = uvdata[nsmxsub+i]; }
+  
+
+  /* If jysub = npey-1, copy x-line mysub-1 of uv to gridext. */
+  if (jysub == npey-1) {
+    locc = (mysub-2)*nsmxsub;
+    locce = (mysub+1)*nsmxsub2 + NUM_SPECIES;
+    for (i = 0; i < nsmxsub; i++) gridext[locce+i] = uvdata[locc+i];
+  }
+  
+
+  /* If ixsub = 0, copy y-line 2 of uv to gridext. */
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc = jy*nsmxsub + NUM_SPECIES;
+      locce = (jy+1)*nsmxsub2;
+      for (i = 0; i < NUM_SPECIES; i++) gridext[locce+i] = uvdata[locc+i];
+    }
+  }
+  
+
+  /* If ixsub = npex-1, copy y-line mxsub-1 of uv to gridext. */
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc  = (jy+1)*nsmxsub - 2*NUM_SPECIES;
+      locce = (jy+2)*nsmxsub2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++) gridext[locce+i] = uvdata[locc+i];
+    }
+  }
+  
+  /* Loop over all grid points, setting local array rates to right-hand sides.
+     Then set rr values appropriately (ODE in the interior and DAE on the boundary)*/
+  ixend = ixstart = jystart = jyend = 0;  
+
+  if (jysub==0)      jystart = 1;
+  if (jysub==npey-1) jyend   = 1;
+  if (ixsub==0)      ixstart = 1;
+  if (ixsub==npex-1) ixend   = 1;
+
+  for (jy = jystart; jy < mysub-jyend; jy++) { 
+    ylocce = (jy+1)*nsmxsub2;
+    yy     = (jy+jysub*mysub)*dy;
+
+    for (ix = ixstart; ix < mxsub-ixend; ix++) {
+      locce = ylocce + (ix+1)*NUM_SPECIES;
+      xx = (ix + ixsub*mxsub)*dx;
+
+      ReactRates(xx, yy, &(gridext[locce]), rates, data);      
+      
+      resxy = IJ_Vptr(rr,ix,jy); 
+      uvpxy = IJ_Vptr(uvp,ix,jy); 
+      
+      for (is = 0; is < NUM_SPECIES; is++) {
+        dcyli = gridext[locce+is]          - gridext[locce+is-nsmxsub2];
+        dcyui = gridext[locce+is+nsmxsub2] - gridext[locce+is];
+        
+        dcxli = gridext[locce+is]             - gridext[locce+is-NUM_SPECIES];
+        dcxui = gridext[locce+is+NUM_SPECIES] - gridext[locce+is];
+        
+        resxy[is] = uvpxy[is]-eps[is]*((dcxui-dcxli)/dx2+(dcyui-dcyli)/dy2)-rates[is];
+      }
+    }
+  }
+
+  if (jysub==0) {
+    for (ix=0; ix<mxsub; ix++) {
+      
+      locce = nsmxsub2 + NUM_SPECIES * (ix+1);
+      resxy = IJ_Vptr(rr,ix,0); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is+nsmxsub2] - gridext[locce+is];
+    }
+  }
+
+  if (ixsub==npex-1) {
+    for(jy=0; jy<mysub; jy++) {
+      locce = (jy+1)*nsmxsub2 + nsmxsub2-NUM_SPECIES;
+      resxy = IJ_Vptr(rr,mxsub-1,jy); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is-NUM_SPECIES] - gridext[locce+is];
+    }
+  }
+  
+  if (ixsub==0) {
+    for (jy=0; jy<mysub; jy++) {
+      locce = (jy+1)*nsmxsub2 + NUM_SPECIES;
+      resxy = IJ_Vptr(rr,0,jy); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is-NUM_SPECIES] - gridext[locce+is];
+    }    
+  }
+
+  if (jysub==npey-1) {
+    for(ix=0; ix<mxsub; ix++) {
+      locce = nsmxsub2*mysub + (ix+1)*NUM_SPECIES;
+      resxy = IJ_Vptr(rr,ix, mysub-1);
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is-nsmxsub2] - gridext[locce+is];
+    }
+  }
+  return(0);
+}
+
+/* 
+ * ReactRates: Evaluate reaction rates at a given spatial point.   
+ * At a given (x,y), evaluate the array of ns reaction terms R.          
+ */
+
+static void ReactRates(realtype xx, realtype yy, realtype *uvval, realtype *rates,
+                       UserData data)
+{
+  realtype A, B;
+
+  A = data->A; B = data->B;
+
+  rates[0] = uvval[0]*uvval[0]*uvval[1];
+  rates[1] = - rates[0];
+
+  rates[0] += A-(B+1)*uvval[0];
+  rates[1] += B*uvval[0];
+}
+
+
+
+static int resB(realtype tt, N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                void *user_dataB)
+{
+  UserData data;
+  int retval;
+  long int Nlocal;
+  
+  data = (UserData) user_dataB;
+
+  Nlocal = data->n_local;
+
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(Nlocal, tt, yyB, ypB, data);
+
+  /* Call reslocal to calculate the local portion of residual vector. */
+  retval = resBlocal(Nlocal, tt,  yy, yp, yyB, ypB, rrB, user_dataB);
+
+  return(0);
+}
+
+
+
+static int resBlocal(long int Nlocal, realtype tt, 
+                     N_Vector uv, N_Vector uvp,
+                     N_Vector uvB, N_Vector uvpB, N_Vector rrB,
+                     void *user_dataB)
+{
+  realtype *uvBdata, *uvBxy, *uvpBxy, *uvxy, *rrBxy;
+  realtype dx2, dy2, xx, yy;
+  realtype dcxli, dcxui, dcyli, dcyui;
+  int locc, locce, ylocce;
+  int ix, jy, i, ixstart, ixend, jystart, jyend, is;
+  UserData data;
+  realtype A, B;
+
+  data = (UserData) user_dataB;
+
+  A = data->A; B = data->B;
+ 
+
+  /* Get data pointers, subgrid data, array sizes, work array cext. */
+  uvBdata = N_VGetArrayPointer_Parallel(uvB);
+
+  dx2 = dx * dx;
+  dy2 = dy * dy;
+
+  
+  /* Copy local segment of uv vector into the working extended array gridext. */
+  locc = 0;
+  locce = nsmxsub2 + NUM_SPECIES;
+  for (jy = 0; jy < mysub; jy++) {
+    for (i = 0; i < nsmxsub; i++) gridext[locce+i] = uvBdata[locc+i];
+    locc = locc + nsmxsub;
+    locce = locce + nsmxsub2;
+  }
+
+  /* If jysub = 0, copy x-line 2 of uv to gridext. */
+  if (jysub == 0)
+    { for (i = 0; i < nsmxsub; i++) gridext[NUM_SPECIES+i] = uvBdata[nsmxsub+i]; }
+  
+
+  /* If jysub = npey-1, copy x-line mysub-1 of uv to gridext. */
+  if (jysub == npey-1) {
+    locc = (mysub-2)*nsmxsub;
+    locce = (mysub+1)*nsmxsub2 + NUM_SPECIES;
+    for (i = 0; i < nsmxsub; i++) gridext[locce+i] = uvBdata[locc+i];
+  }
+  
+
+  /* If ixsub = 0, copy y-line 2 of uv to gridext. */
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc = jy*nsmxsub + NUM_SPECIES;
+      locce = (jy+1)*nsmxsub2;
+      for (i = 0; i < NUM_SPECIES; i++) gridext[locce+i] = uvBdata[locc+i];
+    }
+  }
+  
+
+  /* If ixsub = npex-1, copy y-line mxsub-1 of uv to gridext. */
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc  = (jy+1)*nsmxsub - 2*NUM_SPECIES;
+      locce = (jy+2)*nsmxsub2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++) gridext[locce+i] = uvBdata[locc+i];
+    }
+  }
+  
+  /* Loop over all grid points, setting local array rates to right-hand sides.
+     Then set rr values appropriately (ODE in the interior and DAE on the boundary)*/
+  ixend = ixstart = jystart = jyend = 0;  
+
+  if (jysub==0)      jystart = 1;
+  if (jysub==npey-1) jyend   = 1;
+  if (ixsub==0)      ixstart = 1;
+  if (ixsub==npex-1) ixend   = 1;
+
+  for (jy = jystart; jy < mysub-jyend; jy++) { 
+    ylocce = (jy+1)*nsmxsub2;
+    yy     = (jy+jysub*mysub)*dy;
+
+    for (ix = ixstart; ix < mxsub-ixend; ix++) {
+      locce = ylocce + (ix+1)*NUM_SPECIES;
+      xx = (ix + ixsub*mxsub)*dx;
+
+      
+      uvxy  = IJ_Vptr(uv  ,ix,jy);
+      uvBxy = IJ_Vptr(uvB ,ix,jy);
+      uvpBxy= IJ_Vptr(uvpB,ix,jy);
+      rrBxy = IJ_Vptr(rrB ,ix,jy);
+
+      for (is = 0; is < NUM_SPECIES; is++) {
+        dcyli = gridext[locce+is]          - gridext[locce+is-nsmxsub2];
+        dcyui = gridext[locce+is+nsmxsub2] - gridext[locce+is];
+        
+        dcxli = gridext[locce+is]             - gridext[locce+is-NUM_SPECIES];
+        dcxui = gridext[locce+is+NUM_SPECIES] - gridext[locce+is];
+
+        rrBxy[is] = uvpBxy[is] + eps[is]*( (dcxui-dcxli)/dx2 + (dcyui-dcyli)/dy2 );
+      }
+
+      /* now add rates */
+      rrBxy[0] += (uvBxy[0]-uvBxy[1])*(2*uvxy[0]*uvxy[1] - B) - uvBxy[0]; 
+      rrBxy[1] += uvxy[0]*uvxy[0]*(uvBxy[0]-uvBxy[1]);
+    }
+  }
+
+  if (jysub==0) {
+    for (ix=0; ix<mxsub; ix++) {
+      
+      locce = nsmxsub2 + NUM_SPECIES * (ix+1);
+      rrBxy = IJ_Vptr(rrB,ix,0); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        rrBxy[is] = gridext[locce+is+nsmxsub2] - gridext[locce+is];
+    }
+  }
+
+  if (ixsub==npex-1) {
+    for(jy=0; jy<mysub; jy++) {
+      locce = (jy+1)*nsmxsub2 + nsmxsub2-NUM_SPECIES;
+      rrBxy = IJ_Vptr(rrB,mxsub-1,jy); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        rrBxy[is] = gridext[locce+is-NUM_SPECIES] - gridext[locce+is];
+    }
+  }
+  
+  if (ixsub==0) {
+    for (jy=0; jy<mysub; jy++) {
+      locce = (jy+1)*nsmxsub2 + NUM_SPECIES;
+      rrBxy = IJ_Vptr(rrB,0,jy); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        rrBxy[is] = gridext[locce+is-NUM_SPECIES] - gridext[locce+is];
+    }    
+  }
+
+  if (jysub==npey-1) {
+    for(ix=0; ix<mxsub; ix++) {
+      locce = nsmxsub2*mysub + (ix+1)*NUM_SPECIES;
+      rrBxy = IJ_Vptr(rrB,ix, mysub-1);
+
+      for (is=0; is<NUM_SPECIES; is++)
+        rrBxy[is] = gridext[locce+is-nsmxsub2] - gridext[locce+is];
+    }
+  }
+
+  return(0);
+}
+
diff --git a/examples/idas/parallel/idasBruss_ASAp_kry_bbd_p.out b/examples/idas/parallel/idasBruss_ASAp_kry_bbd_p.out
new file mode 100644
index 0000000..15a5385
--- /dev/null
+++ b/examples/idas/parallel/idasBruss_ASAp_kry_bbd_p.out
@@ -0,0 +1,50 @@
+BRUSSELATOR: chemically reacting system
+
+Number of species ns: 2     Mesh dimensions: 42 x 42
+Total system size: 3528
+Subgrid dimensions: 21 x 21     Processor array: 2 x 2
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDASPGMR     Max. Krylov dimension maxl: 16
+Preconditioner: band-block-diagonal (IDABBDPRE), with parameters
+     mudq = 42,  mldq = 42,  mukeep = 2,  mlkeep = 2
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+1.00e+00   2.6132e-01   3.0982e+00   | 154  5   1.1112e-02
+           1.9993e+00   1.0125e+00   |
+
+-----------------------------------------------------------
+
+Final statistics: 
+
+Number of steps                    = 154
+Number of residual evaluations     = 392
+Number of nonlinear iterations     = 174
+Number of error test failures      = 2
+Number of nonlinear conv. failures = 0
+
+Number of linear iterations        = 216
+Number of linear conv. failures    = 0
+
+Number of preconditioner setups    = 17
+Number of preconditioner solves    = 392
+Number of local residual evals.    = 1462
+
+		 BACKWARD problem
+-----------------------------------------------------------
+
+Final statistics: 
+
+Number of steps                    = 99
+Number of residual evaluations     = 268
+Number of nonlinear iterations     = 118
+Number of error test failures      = 0
+Number of nonlinear conv. failures = 0
+
+Number of linear iterations        = 150
+Number of linear conv. failures    = 0
+
+Number of preconditioner setups    = 16
+Number of preconditioner solves    = 268
+Number of local residual evals.    = 1376
diff --git a/examples/idas/parallel/idasBruss_FSA_kry_bbd_p.c b/examples/idas/parallel/idasBruss_FSA_kry_bbd_p.c
new file mode 100644
index 0000000..a52294b
--- /dev/null
+++ b/examples/idas/parallel/idasBruss_FSA_kry_bbd_p.c
@@ -0,0 +1,1169 @@
+/* * -----------------------------------------------------------------
+ * $Revision:
+ * $Date:
+ * -----------------------------------------------------------------
+ * Programmer(s): Cosmin Petra and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example program for IDA: Brusselator, parallel, GMRES, IDABBD
+ * preconditioner, FSA.
+ *
+ * This example program for IDAS uses IDASPGMR as the linear solver.
+ * It is written for a parallel computer system and uses the
+ * IDABBDPRE band-block-diagonal preconditioner module for the
+ * IDASPGMR package.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization.
+ * 
+ * The PDE system is a two-species time-dependent PDE known as
+ * Brusselator PDE and models a chemically reacting system.
+ *
+ *                  
+ *  du/dt = eps1(u  + u  ) + u^2 v -(B+1)u + A  
+ *                xx   yy
+ *                                              domain [0,L]X[0,L]
+ *  dv/dt = eps2(v  + v  ) - u^2 v + Bu
+ *                xx   yy
+ *
+ *  B.C. Neumann
+ *  I.C  u(x,y,t0) = u0(x,y) =  1  - 0.5*cos(pi*y/L) 
+ *       v(x,y,t0) = v0(x,y) = 3.5 - 2.5*cos(pi*x/L) 
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh, and so the system size Neq is the product MX*MY*NUM_SPECIES. 
+ * The system is actually implemented on submeshes, processor by 
+ * processor, with an MXSUB by MYSUB mesh on each of NPEX * NPEY 
+ * processors.
+ *
+ * The average of the solution u at final time is also computed.
+ *            / /
+ *        g = | | u(x,y,tf) dx dy
+ *            / /
+ * Also the sensitivities of g with respect to parameters eps1 and 
+ * eps2 are computed.
+ *                  / /
+ *       dg/d eps = | | u  (x,y,tf)  dx dy  
+ *                  / /  eps
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <idas/idas_bbdpre.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+/* Problem Constants */
+#define NUM_SPECIES 2 
+#define ctL         RCONST(1.0)    /* Domain =[0,L]^2 */
+#define ctA         RCONST(1.0)
+#define ctB         RCONST(3.4)
+#define ctEps       RCONST(2.0e-3)
+
+#define NS          2
+
+#define PI          RCONST(3.1415926535898) /* pi */ 
+
+#define MXSUB       41    /* Number of x mesh points per processor subgrid */
+#define MYSUB       41    /* Number of y mesh points per processor subgrid */
+#define NPEX        2     /* Number of subgrids in the x direction */
+#define NPEY        2     /* Number of subgrids in the y direction */
+#define MX          (MXSUB*NPEX)      /* MX = number of x mesh points */
+#define MY          (MYSUB*NPEY)      /* MY = number of y mesh points */
+#define NSMXSUB     (NUM_SPECIES * MXSUB)
+#define NEQ         (NUM_SPECIES*MX*MY) /* Number of equations in system */
+
+
+#define RTOL        RCONST(1.e-5)  /*  rtol tolerance */
+#define ATOL        RCONST(1.e-5)  /*  atol tolerance */
+#define NOUT        6  
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values */
+#define TADD        RCONST(0.3)    /* Increment for tout values */
+
+#define ZERO        RCONST(0.0)
+#define HALF        RCONST(0.5)
+#define ONE         RCONST(1.0)
+
+
+/* User-defined vector accessor macro IJ_Vptr. */
+
+/*
+ * IJ_Vptr is defined in order to express the underlying 3-d structure of the 
+ * dependent variable vector from its underlying 1-d storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_P(vv, (i)*NUM_SPECIES + (j)*NSMXSUB ))
+
+/* Type: UserData.  Contains problem constants, preconditioner data, etc. */
+typedef struct {
+  int ns, thispe, npes, ixsub, jysub, npex, npey;
+  int mxsub, mysub, nsmxsub, nsmxsub2;
+  realtype A, B, L, eps[NUM_SPECIES];
+  realtype dx, dy;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES];
+  realtype gridext[(MXSUB+2)*(MYSUB+2)*NUM_SPECIES];
+  realtype rhs[NUM_SPECIES];
+  MPI_Comm comm;
+  realtype rates[2];
+  long int n_local;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+static int res(realtype tt, 
+               N_Vector uv, N_Vector uvp, N_Vector rr, 
+               void *user_data);
+
+static int reslocal(long int Nlocal, realtype tt, 
+                    N_Vector uv, N_Vector uvp, N_Vector res, 
+                    void *user_data);
+
+static int rescomm(long int Nlocal, realtype tt,
+                   N_Vector uv, N_Vector uvp, 
+                   void *user_data);
+
+/* Integrate over spatial domain. */
+static int integr(MPI_Comm comm, N_Vector uv, void *user_data, realtype *intval);
+
+/* Prototypes for supporting functions */
+static void BSend(MPI_Comm comm, int thispe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype carray[]);
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[]);
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[]);
+
+static void ReactRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData data);
+
+/* Prototypes for private functions */
+static void InitUserData(UserData data, int thispe, int npes, MPI_Comm comm);
+
+static void SetInitialProfiles(N_Vector uv, N_Vector uvp, N_Vector id,
+                               N_Vector resid, UserData data);
+
+static void PrintHeader(int SystemSize, int maxl, 
+                        long int mudq, long int mldq,
+                        long int mukeep, long int mlkeep,
+                        realtype rtol, realtype atol);
+
+static void PrintOutput(void *mem, N_Vector uv, realtype time,
+                        UserData data, MPI_Comm comm);
+
+static void PrintSol(void* mem, N_Vector uv, N_Vector uvp, UserData data,
+                     MPI_Comm comm);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData data;
+  long int SystemSize, local_N, mudq, mldq, mukeep, mlkeep;
+  realtype rtol, atol, t0, tout, tret;
+  N_Vector uv, uvp, resid, id, *uvS, *uvpS;
+  int thispe, npes, maxl, iout, retval;
+  realtype pbar[NS];
+  int is;
+  realtype intval;
+
+  uv = uvp = resid = id = NULL;
+  uvS = uvpS = NULL;
+  data = NULL;
+  mem = NULL;
+
+  /* Set communicator, and get processor number and total number of PE's. */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_rank(comm, &thispe);
+  MPI_Comm_size(comm, &npes);
+
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d not equal to NPEX*NPEY = %d\n", 
+              npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1); 
+  }
+  
+  /* Set local length (local_N) and global length (SystemSize). */
+  local_N = MXSUB*MYSUB*NUM_SPECIES;
+  SystemSize = NEQ;
+
+  /* Set up user data block data. */
+  data = (UserData) malloc(sizeof *data);
+
+  InitUserData(data, thispe, npes, comm);
+  
+  /* Create needed vectors, and load initial values.
+     The vector resid is used temporarily only.        */
+  
+  uv  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)uv, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  uvp  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)uvp, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  resid = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)resid, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  id  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  uvS = N_VCloneVectorArray_Parallel(NS, uv);
+  if (check_flag((void *)uvS, "N_VCloneVectorArray_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+  for (is=0;is<NS;is++) N_VConst(ZERO, uvS[is]);
+    
+  uvpS = N_VCloneVectorArray_Parallel(NS, uv);
+  if (check_flag((void *)uvpS, "N_VCloneVectorArray_Parallel", 0, thispe))  
+    MPI_Abort(comm, 1);
+  for (is=0;is<NS;is++) N_VConst(ZERO, uvpS[is]);
+
+  SetInitialProfiles(uv, uvp, id, resid, data);
+
+  /* Set remaining inputs to IDAS. */
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+  
+  /* Call IDACreate and IDAInit to initialize solution */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetUserData(mem, data);
+  if(check_flag(&retval, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetId(mem, id);
+  if(check_flag(&retval, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDAInit(mem, res, t0, uv, uvp);
+  if(check_flag(&retval, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+  
+  retval = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&retval, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+
+  /* Enable forward sensitivity analysis. */
+  retval = IDASensInit(mem, NS, IDA_SIMULTANEOUS, NULL, uvS, uvpS);
+  if(check_flag(&retval, "IDASensInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASensEEtolerances(mem);
+  if(check_flag(&retval, "IDASensEEtolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetSensErrCon(mem, TRUE);
+  if (check_flag(&retval, "IDASetSensErrCon", 1, thispe)) MPI_Abort(comm, 1);
+
+  pbar[0] = data->eps[0];
+  pbar[1] = data->eps[1];
+  retval = IDASetSensParams(mem, data->eps, pbar, NULL);
+  if (check_flag(&retval, "IDASetSensParams", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDASpgmr to specify the IDAS LINEAR SOLVER IDASPGMR */
+  maxl = 16;
+  retval = IDASpgmr(mem, maxl);
+  if(check_flag(&retval, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDABBDPrecInit to initialize the band-block-diagonal preconditioner.
+     The half-bandwidths for the difference quotient evaluation are exact
+     for the system Jacobian, but only a 5-diagonal band matrix is retained. */
+  mudq = mldq = NSMXSUB;
+  mukeep = mlkeep = 2;
+  retval = IDABBDPrecInit(mem, local_N, mudq, mldq, mukeep, mlkeep, 
+                          ZERO, reslocal, NULL);
+  if(check_flag(&retval, "IDABBDPrecInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+  tout = RCONST(0.001);
+  retval = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&retval, "IDACalcIC", 1, thispe)) MPI_Abort(comm, 1);
+  
+  /* On PE 0, print heading, basic parameters, initial values. */
+  if (thispe == 0) PrintHeader(SystemSize, maxl, 
+                               mudq, mldq, mukeep, mlkeep,
+                               rtol, atol);
+  PrintOutput(mem, uv, t0, data, comm);
+
+
+  /* Call IDAS in tout loop, normal mode, and print selected output. */
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    retval = IDASolve(mem, tout, &tret, uv, uvp, IDA_NORMAL);
+    if(check_flag(&retval, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(mem, uv, tret, data, comm);
+
+    if (iout < 3) tout *= TMULT;
+    else          tout += TADD;
+
+  }
+  /* Print each PE's portion of the solution in a separate file. */
+  /* PrintSol(mem, uv, uvp, data, comm); */
+
+
+  /* On PE 0, print final set of statistics. */  
+  if (thispe == 0) {
+    PrintFinalStats(mem);
+  }
+
+  /* calculate integral of u over domain. */
+  integr(comm, uv, data, &intval);
+  if (thispe == 0) {
+    printf("\n\nThe average of u on the domain:\ng = %g\n", intval);
+  }
+
+  /* integrate the sensitivities of u over domain. */
+  IDAGetSens(mem, &tret, uvS);
+  if (thispe == 0)
+    printf("\nSensitivities of g:\n");
+
+  for (is=0; is<NS; is++) {
+    integr(comm, uvS[is], data, &intval);
+    if (thispe == 0) {
+      printf("w.r.t. eps%d = %14.10f\n", is, intval);
+    }
+  }
+
+  /* Free memory. */
+  N_VDestroy_Parallel(uv);
+  N_VDestroy_Parallel(uvp);
+  N_VDestroy_Parallel(id);
+  N_VDestroy_Parallel(resid);
+  N_VDestroyVectorArray_Parallel(uvS, NS);
+  N_VDestroyVectorArray_Parallel(uvpS, NS);
+  IDAFree(&mem);
+
+  free(data);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in data (of type UserData).   
+ */
+
+static void InitUserData(UserData data, int thispe, int npes, 
+                         MPI_Comm comm)
+{
+  data->jysub = thispe / NPEX;
+  data->ixsub = thispe - (data->jysub)*NPEX;
+  data->mxsub = MXSUB;
+  data->mysub = MYSUB;
+  data->npex = NPEX;
+  data->npey = NPEY;
+  data->ns = NUM_SPECIES;
+  data->dx = ctL/(MX-1);
+  data->dy = ctL/(MY-1);
+  data->thispe = thispe;
+  data->npes   = npes;
+  data->nsmxsub = MXSUB * NUM_SPECIES;
+  data->nsmxsub2 = (MXSUB+2)*NUM_SPECIES;
+  data->comm = comm;
+  data->n_local = MXSUB*MYSUB*NUM_SPECIES;
+
+  data->A = ctA;
+  data->B = ctB;
+  data->L = ctL;
+  data->eps[0] = data->eps[1] = ctEps;
+}
+
+/*
+ * SetInitialProfiles: Set initial conditions in uv, uvp, and id.
+ */
+
+static void SetInitialProfiles(N_Vector uv, N_Vector uvp, N_Vector id,
+                               N_Vector resid, UserData data)
+{
+  int ixsub, jysub, mxsub, mysub, nsmxsub, ix, jy;
+  realtype *idxy, dx, dy, x, y, *uvxy, *uvxy1, L, npex, npey;
+
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  mxsub = data->mxsub;
+  mysub = data->mysub;
+  nsmxsub = data->nsmxsub;
+  npex = data->npex;
+  npey = data->npey;
+  dx = data->dx;
+  dy = data->dy;
+  L = data->L;
+
+  /* Loop over grid, load uv values and id values. */
+  for (jy = 0; jy < mysub; jy++) {
+    y = (jy + jysub*mysub) * dy;
+    for (ix = 0; ix < mxsub; ix++) {
+
+      x = (ix + ixsub*mxsub) * dx;
+      uvxy = IJ_Vptr(uv,ix,jy); 
+
+      uvxy[0] = RCONST(1.0) - HALF*cos(PI*y/L); 
+      uvxy[1] = RCONST(3.5) - RCONST(2.5)*cos(PI*x/L);
+    }
+  }
+ 
+  N_VConst(ONE, id);
+
+  if (jysub == 0) {
+    for (ix=0; ix<mxsub; ix++) {
+      idxy = IJ_Vptr(id,ix,0);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,ix,0);
+      uvxy1 = IJ_Vptr(uv,ix,1);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+    }
+  }
+
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      idxy = IJ_Vptr(id,mxsub-1,jy);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,mxsub-1,jy);
+      uvxy1 = IJ_Vptr(uv,mxsub-2,jy);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+
+    }
+  }
+
+
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      idxy = IJ_Vptr(id,0,jy);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,0,jy);
+      uvxy1 = IJ_Vptr(uv,1,jy);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+
+    }    
+  }
+
+  if (jysub == npey-1) {
+    for (ix=0; ix<mxsub; ix++) {
+      idxy = IJ_Vptr(id,ix,jysub);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,ix,mysub-1);
+      uvxy1 = IJ_Vptr(uv,ix,mysub-2);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+
+    }
+  }
+
+  /* Derivative found by calling the residual function with uvp = 0. */
+  N_VConst(ZERO, uvp);
+  res(ZERO, uv, uvp, resid, data);
+  N_VScale(-ONE, resid, uvp);
+
+
+}
+
+/*
+ * Print first lines of output (problem description)
+ * and table headerr
+ */
+
+static void PrintHeader(int SystemSize, int maxl, 
+                        long int mudq, long int mldq, 
+                        long int mukeep, long int mlkeep,
+                        realtype rtol, realtype atol)
+{
+  printf("\n Brusselator PDE -  DAE parallel example problem for IDA \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d\n", MX, MY);
+  printf("Total system size: %d\n",SystemSize);
+  printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+  printf("     Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDASPGMR     Max. Krylov dimension maxl: %d\n", maxl);
+  printf("Preconditioner: band-block-diagonal (IDABBDPRE), with parameters\n");
+  printf("     mudq = %ld,  mldq = %ld,  mukeep = %ld,  mlkeep = %ld\n",
+         mudq, mldq, mukeep, mlkeep);
+  printf("CalcIC called to correct initial concentrations \n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+}
+
+
+/*
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of c1 and c2
+ * are printed for the bottom left and top right grid points only.
+ */
+
+static void PrintOutput(void *mem, N_Vector uv, realtype tt,
+                        UserData data, MPI_Comm comm)
+{
+  MPI_Status status;
+  realtype *cdata, clast[2], hused;
+  long int nst;
+  int i, kused, flag, thispe, npelast, ilast;;
+
+  thispe = data->thispe; 
+  npelast = data->npes - 1;
+  cdata = N_VGetArrayPointer_Parallel(uv);
+  
+  /* Send conc. at top right mesh point from PE npes-1 to PE 0. */
+  if (thispe == npelast) {
+    ilast = NUM_SPECIES*MXSUB*MYSUB - 2;
+    if (npelast != 0)
+      MPI_Send(&cdata[ilast], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else { clast[0] = cdata[ilast]; clast[1] = cdata[ilast+1]; }
+  }
+  
+  /* On PE 0, receive conc. at top right from PE npes - 1.
+     Then print performance data and sampled solution values. */
+  if (thispe == 0) {
+    
+    if (npelast != 0)
+      MPI_Recv(&clast[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    
+    flag = IDAGetLastOrder(mem, &kused);
+    check_flag(&flag, "IDAGetLastOrder", 1, thispe);
+    flag = IDAGetNumSteps(mem, &nst);
+    check_flag(&flag, "IDAGetNumSteps", 1, thispe);
+    flag = IDAGetLastStep(mem, &hused);
+    check_flag(&flag, "IDAGetLastStep", 1, thispe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4Le %12.4Le   |\n",cdata[i],clast[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#else
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#endif
+    printf("\n");
+
+  }
+
+}
+
+/* 
+ * PrintSol the PE's portion of the solution to a file.
+ */
+static void PrintSol(void* mem, N_Vector uv, N_Vector uvp, 
+                     UserData data, MPI_Comm comm)
+{
+  FILE* fout;
+  realtype *uvxy;
+  int ix, jy, mxsub, mysub, thispe;
+  char szFilename[128];
+
+  thispe = data->thispe;
+  sprintf(szFilename, "ysol%d.txt", thispe);
+
+  fout = fopen(szFilename, "w+");
+  if (fout==NULL) {
+    printf("PE[% 2d] is unable to write solution to disk!\n", thispe);
+    return;
+  }
+
+  mxsub = data->mxsub;
+  mysub = data->mysub;
+
+  for (jy=0; jy<mysub; jy++) {
+    for (ix=0; ix<mxsub; ix++) {
+    
+      uvxy  = IJ_Vptr(uv, ix, jy);
+      fprintf(fout, "%g\n%g\n", uvxy[0], uvxy[1]);
+    }
+  }    
+  fclose(fout);
+}
+
+
+
+/*
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int nst, nre, nreLS, netf, ncfn, nni, ncfl, nli, npe, nps, nge;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1, 0);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1, 0);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1, 0);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1, 0);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1, 0);
+
+  flag = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&flag, "IDASpilsGetNumConvFails", 1, 0);
+  flag = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&flag, "IDASpilsGetNumLinIters", 1, 0);
+  flag = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&flag, "IDASpilsGetNumPrecEvals", 1, 0);
+  flag = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&flag, "IDASpilsGetNumPrecSolves", 1, 0);
+  flag = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDASpilsGetNumResEvals", 1, 0);
+
+  flag = IDABBDPrecGetNumGfnEvals(mem, &nge);
+  check_flag(&flag, "IDABBDPrecGetNumGfnEvals", 1, 0);
+
+  printf("-----------------------------------------------------------\n");
+  printf("\nFinal statistics: \n\n");
+
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n\n", ncfn);
+
+  printf("Number of linear iterations        = %ld\n", nli);
+  printf("Number of linear conv. failures    = %ld\n\n", ncfl);
+
+  printf("Number of preconditioner setups    = %ld\n", npe);
+  printf("Number of preconditioner solves    = %ld\n", nps);
+  printf("Number of local residual evals.    = %ld\n", nge);
+
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", 
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA & SUPPORTING FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * res: System residual function 
+ *
+ * To compute the residual function F, this routine calls:
+ * rescomm, for needed communication, and then
+ * reslocal, for computation of the residuals on this processor.      
+ */
+
+static int res(realtype tt, 
+               N_Vector uv, N_Vector uvp, N_Vector rr, 
+               void *user_data)
+{
+  int retval;
+  UserData data;
+  long int Nlocal;
+  
+  data = (UserData) user_data;
+  
+  Nlocal = data->n_local;
+
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(Nlocal, tt, uv, uvp, user_data);
+  
+  /* Call reslocal to calculate the local portion of residual vector. */
+  retval = reslocal(Nlocal, tt, uv, uvp, rr, user_data);
+  
+  return(0);
+}
+
+/*
+ * rescomm: Communication routine in support of resweb.
+ * This routine performs all inter-processor communication of components
+ * of the uv vector needed to calculate F, namely the components at all
+ * interior subgrid boundaries (ghost cell data).  It loads this data
+ * into a work array cext (the local portion of c, extended).
+ * The message-passing uses blocking sends, non-blocking receives,
+ * and receive-waiting, in routines BRecvPost, BSend, BRecvWait.         
+ */
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector uv, N_Vector uvp,
+                   void *user_data)
+{
+
+  UserData data;
+  realtype *cdata, *gridext, buffer[2*NUM_SPECIES*MYSUB];
+  int thispe, ixsub, jysub, nsmxsub, nsmysub;
+  MPI_Comm comm;
+  MPI_Request request[4];
+  
+  data = (UserData) user_data;
+  cdata = N_VGetArrayPointer_Parallel(uv);
+
+  /* Get comm, thispe, subgrid indices, data sizes, extended array cext. */  
+  comm = data->comm;     
+  thispe = data->thispe;
+
+  ixsub = data->ixsub;   
+  jysub = data->jysub;
+  gridext = data->gridext;
+  nsmxsub = data->nsmxsub; 
+  nsmysub = (data->ns)*(data->mysub);
+  
+  /* Start receiving boundary data from neighboring PEs. */
+  BRecvPost(comm, request, thispe, ixsub, jysub, nsmxsub, nsmysub, 
+            gridext, buffer);
+  
+  /* Send data from boundary of local grid to neighboring PEs. */
+  BSend(comm, thispe, ixsub, jysub, nsmxsub, nsmysub, cdata);
+  
+  /* Finish receiving boundary data from neighboring PEs. */
+  BRecvWait(request, ixsub, jysub, nsmxsub, gridext, buffer);
+  
+  return(0);
+}
+
+/*
+ * BRecvPost: Start receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls. 
+ */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[])
+{
+  int offsetce;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Irecv(&cext[NUM_SPECIES], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1) {
+    offsetce = NUM_SPECIES*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&cext[offsetce], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe+1, 0, comm, &request[3]);
+  }
+}
+
+/*
+ * BRecvWait: Finish receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls.  
+ */
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[])
+{
+  int i;
+  int ly, dsizex2, offsetce, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2*NUM_SPECIES;
+  
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+1)*dsizex2;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufleft[offsetbuf+i];
+    }
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+2)*dsizex2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/*
+ * BSend: Send boundary data to neighboring PEs.
+ * This routine sends components of uv from internal subgrid boundaries
+ * to the appropriate neighbor PEs.                                      
+ */
+ 
+static void BSend(MPI_Comm comm, int my_pe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype cdata[])
+{
+  int i;
+  int ly, offsetc, offsetbuf;
+  realtype bufleft[NUM_SPECIES*MYSUB], bufright[NUM_SPECIES*MYSUB];
+
+  /* If jysub > 0, send data from bottom x-line of uv. */
+
+  if (jysub != 0)
+    MPI_Send(&cdata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If jysub < NPEY-1, send data from top x-line of uv. */
+
+  if (jysub != NPEY-1) {
+    offsetc = (MYSUB-1)*dsizex;
+    MPI_Send(&cdata[offsetc], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If ixsub > 0, send data from left y-line of uv (via bufleft). */
+
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = ly*dsizex;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufleft[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+  
+  /* If ixsub < NPEX-1, send data from right y-line of uv (via bufright). */
+  
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = offsetbuf*MXSUB + (MXSUB-1)*NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufright[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* Define lines are for ease of readability in the following functions. */
+
+#define mxsub      (data->mxsub)
+#define mysub      (data->mysub)
+#define npex       (data->npex)
+#define npey       (data->npey)
+#define ixsub      (data->ixsub)
+#define jysub      (data->jysub)
+#define nsmxsub    (data->nsmxsub)
+#define nsmxsub2   (data->nsmxsub2)
+#define dx         (data->dx)
+#define dy         (data->dy)
+#define cox        (data->cox)
+#define coy        (data->coy)
+#define gridext    (data->gridext)
+#define eps        (data->eps)
+#define ns         (data->ns)
+
+/*
+ * reslocal: Compute res = F(t,uv,uvp).
+ * This routine assumes that all inter-processor communication of data
+ * needed to calculate F has already been done.  Components at interior
+ * subgrid boundaries are assumed to be in the work array cext.
+ * The local portion of the uv vector is first copied into cext.
+ * The exterior Neumann boundary conditions are explicitly handled here
+ * by copying data from the first interior mesh line to the ghost cell
+ * locations in cext.  Then the reaction and diffusion terms are
+ * evaluated in terms of the cext array, and the residuals are formed.
+ * The reaction terms are saved separately in the vector data->rates
+ * for use by the preconditioner setup routine.                          
+ */
+
+static int reslocal(long int Nlocal, realtype tt, 
+                    N_Vector uv, N_Vector uvp, N_Vector rr,
+                    void *user_data)
+{
+  realtype *uvdata, *uvpxy, *resxy, xx, yy, dcyli, dcyui, dcxli, dcxui, dx2, dy2;
+  realtype ixend, ixstart, jystart, jyend;
+  int ix, jy, is, i, locc, ylocce, locce;
+  realtype rates[2];
+  UserData data;
+  
+  data = (UserData) user_data;
+
+  /* Get data pointers, subgrid data, array sizes, work array cext. */
+  uvdata = N_VGetArrayPointer_Parallel(uv);
+
+  dx2 = dx * dx;
+  dy2 = dy * dy;
+
+  /* Copy local segment of uv vector into the working extended array gridext. */
+  locc = 0;
+  locce = nsmxsub2 + NUM_SPECIES;
+  for (jy = 0; jy < mysub; jy++) {
+    for (i = 0; i < nsmxsub; i++) gridext[locce+i] = uvdata[locc+i];
+    locc = locc + nsmxsub;
+    locce = locce + nsmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+     a boundary PE, copy data from the first interior mesh line of uv to gridext. */
+  
+  /* If jysub = 0, copy x-line 2 of uv to gridext. */
+  if (jysub == 0)
+    { for (i = 0; i < nsmxsub; i++) gridext[NUM_SPECIES+i] = uvdata[nsmxsub+i]; }
+  
+
+  /* If jysub = npey-1, copy x-line mysub-1 of uv to gridext. */
+  if (jysub == npey-1) {
+    locc = (mysub-2)*nsmxsub;
+    locce = (mysub+1)*nsmxsub2 + NUM_SPECIES;
+    for (i = 0; i < nsmxsub; i++) gridext[locce+i] = uvdata[locc+i];
+  }
+  
+
+  /* If ixsub = 0, copy y-line 2 of uv to gridext. */
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc = jy*nsmxsub + NUM_SPECIES;
+      locce = (jy+1)*nsmxsub2;
+      for (i = 0; i < NUM_SPECIES; i++) gridext[locce+i] = uvdata[locc+i];
+    }
+  }
+  
+
+  /* If ixsub = npex-1, copy y-line mxsub-1 of uv to gridext. */
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc  = (jy+1)*nsmxsub - 2*NUM_SPECIES;
+      locce = (jy+2)*nsmxsub2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++) gridext[locce+i] = uvdata[locc+i];
+    }
+  }
+  
+  /* Loop over all grid points, setting local array rates to right-hand sides.
+     Then set rr values appropriately (ODE in the interior and DAE on the boundary)*/
+  ixend = ixstart = jystart = jyend = 0;  
+
+  if (jysub==0)      jystart = 1;
+  if (jysub==npey-1) jyend   = 1;
+  if (ixsub==0)      ixstart = 1;
+  if (ixsub==npex-1) ixend   = 1;
+
+  for (jy = jystart; jy < mysub-jyend; jy++) { 
+    ylocce = (jy+1)*nsmxsub2;
+    yy     = (jy+jysub*mysub)*dy;
+
+    for (ix = ixstart; ix < mxsub-ixend; ix++) {
+      locce = ylocce + (ix+1)*NUM_SPECIES;
+      xx = (ix + ixsub*mxsub)*dx;
+
+      ReactRates(xx, yy, &(gridext[locce]), rates, data);      
+      
+      resxy = IJ_Vptr(rr,ix,jy); 
+      uvpxy = IJ_Vptr(uvp,ix,jy); 
+      
+      for (is = 0; is < NUM_SPECIES; is++) {
+        dcyli = gridext[locce+is]          - gridext[locce+is-nsmxsub2];
+        dcyui = gridext[locce+is+nsmxsub2] - gridext[locce+is];
+        
+        dcxli = gridext[locce+is]             - gridext[locce+is-NUM_SPECIES];
+        dcxui = gridext[locce+is+NUM_SPECIES] - gridext[locce+is];
+        
+        resxy[is] = uvpxy[is]-eps[is]*((dcxui-dcxli)/dx2+(dcyui-dcyli)/dy2)-rates[is];
+      }
+    }
+  }
+
+  /* Algebraic equation correspoding to boundary mesh point. */
+  if (jysub==0) {
+    for (ix=0; ix<mxsub; ix++) {
+      
+      locce = nsmxsub2 + NUM_SPECIES * (ix+1);
+      resxy = IJ_Vptr(rr,ix,0); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is+nsmxsub2] - gridext[locce+is];
+    }
+  }
+
+  if (ixsub==npex-1) {
+    for(jy=0; jy<mysub; jy++) {
+      locce = (jy+1)*nsmxsub2 + nsmxsub2-NUM_SPECIES;
+      resxy = IJ_Vptr(rr,mxsub-1,jy); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is-NUM_SPECIES] - gridext[locce+is];
+    }
+  }
+  
+  if (ixsub==0) {
+    for (jy=0; jy<mysub; jy++) {
+      locce = (jy+1)*nsmxsub2 + NUM_SPECIES;
+      resxy = IJ_Vptr(rr,0,jy); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is-NUM_SPECIES] - gridext[locce+is];
+    }    
+  }
+
+  if (jysub==npey-1) {
+    for(ix=0; ix<mxsub; ix++) {
+      locce = nsmxsub2*mysub + (ix+1)*NUM_SPECIES;
+      resxy = IJ_Vptr(rr,ix, mysub-1);
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is-nsmxsub2] - gridext[locce+is];
+    }
+  }
+  return(0);
+}
+
+/* 
+ * ReactRates: Evaluate reaction rates at a given spatial point.   
+ * At a given (x,y), evaluate the array of ns reaction terms R.          
+ */
+
+static void ReactRates(realtype xx, realtype yy, realtype *uvval, realtype *rates,
+                       UserData data)
+{
+  realtype A, B;
+
+  A = data->A; B = data->B;
+
+  rates[0] = uvval[0]*uvval[0]*uvval[1];
+  rates[1] = - rates[0];
+
+  rates[0] += A-(B+1)*uvval[0];
+  rates[1] += B*uvval[0];
+}
+
+/* Integrate over the spatial domain. Each process computes the integral on its
+   grid. Then processes call MPI_REDUCE to compute sum of the local values. */
+static int integr(MPI_Comm comm, N_Vector uv, void *user_data, realtype *intval)
+{
+  int ix, jy;
+  int retval;
+  realtype *uvdata;
+  UserData data;
+  
+  realtype buf[2];
+  
+  data = (UserData) user_data;
+
+  /* compute the integral on the (local) grid */
+  uvdata = N_VGetArrayPointer_Parallel(uv);
+
+  *intval = 0;
+
+  for (jy=1; jy<mysub; jy++)
+    for (ix=1; ix<mxsub; ix++) 
+       /* consider only u */
+      *intval += uvdata[ix*NUM_SPECIES + jy*NSMXSUB];
+  *intval *= (dx*dy);
+
+  buf[0] = *intval;
+
+  /* Sum local values and get the result on all processors. */
+  retval = MPI_Allreduce(buf, buf+1, 1, MPI_DOUBLE, MPI_SUM, comm);
+
+  *intval = buf[1];
+  return(0);
+}
diff --git a/examples/idas/parallel/idasBruss_FSA_kry_bbd_p.out b/examples/idas/parallel/idasBruss_FSA_kry_bbd_p.out
new file mode 100644
index 0000000..a3165f8
--- /dev/null
+++ b/examples/idas/parallel/idasBruss_FSA_kry_bbd_p.out
@@ -0,0 +1,60 @@
+Brusselator PDE -  DAE parallel example problem for IDA 
+
+Number of species ns: 2     Mesh dimensions: 82 x 82
+Total system size: 13448
+Subgrid dimensions: 41 x 41     Processor array: 2 x 2
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDASPGMR     Max. Krylov dimension maxl: 16
+Preconditioner: band-block-diagonal (IDABBDPRE), with parameters
+     mudq = 82,  mldq = 82,  mukeep = 2,  mlkeep = 2
+CalcIC called to correct initial concentrations 
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   5.0038e-01   1.4996e+00   |   0  0   1.0000e-07
+           1.0019e+00   5.9981e+00   |
+
+1.00e-03   4.9944e-01   1.5076e+00   |  11  1   5.1200e-04
+           1.0034e+00   5.9896e+00   |
+
+1.00e-02   4.9119e-01   1.5832e+00   |  17  2   2.0480e-03
+           1.0170e+00   5.9082e+00   |
+
+1.00e-01   4.2223e-01   3.0684e+00   |  31  4   7.4353e-03
+           1.1419e+00   4.3097e+00   |
+
+4.00e-01   3.0652e-01   5.4104e+00   |  72  5   7.4353e-03
+           1.4714e+00   6.1133e-01   |
+
+7.00e-01   2.7048e-01   4.1053e+00   | 112  5   7.4353e-03
+           1.7403e+00   7.8907e-01   |
+
+1.00e+00   2.6100e-01   3.1024e+00   | 152  5   7.4353e-03
+           1.9881e+00   1.0113e+00   |
+
+-----------------------------------------------------------
+
+Final statistics: 
+
+Number of steps                    = 152
+Number of residual evaluations     = 1243
+Number of nonlinear iterations     = 165
+Number of error test failures      = 1
+Number of nonlinear conv. failures = 1
+
+Number of linear iterations        = 1047
+Number of linear conv. failures    = 0
+
+Number of preconditioner setups    = 16
+Number of preconditioner solves    = 1635
+Number of local residual evals.    = 2656
+
+
+The average of u on the domain:
+g = 1.62453
+
+Sensitivities of g:
+w.r.t. eps0 =  16.1571399307
+w.r.t. eps1 =  -3.7188337016
diff --git a/examples/idas/parallel/idasBruss_kry_bbd_p.c b/examples/idas/parallel/idasBruss_kry_bbd_p.c
new file mode 100644
index 0000000..83ce142
--- /dev/null
+++ b/examples/idas/parallel/idasBruss_kry_bbd_p.c
@@ -0,0 +1,1081 @@
+/* * -----------------------------------------------------------------
+ * $Revision:
+ * $Date:
+ * -----------------------------------------------------------------
+ * Programmer(s): Cosmin Petra and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example program for IDAS: Brusselator, parallel, GMRES, IDABBD
+ * preconditioner.
+ *
+ * This example program for IDAS uses IDASPGMR as the linear solver.
+ * It is written for a parallel computer system and uses the
+ * IDABBDPRE band-block-diagonal preconditioner module for the
+ * IDASPGMR package.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization.
+ * 
+ * The PDE system is a two-species time-dependent PDE known as
+ * Brusselator PDE and models a chemically reacting system.
+ *
+ *                  
+ *  du/dt = eps(u  + u) + u^2 v -(B+1)u + A  
+ *               xx   yy
+ *                                              domain [0,L]X[0,L]
+ *  dv/dt = eps(v  + v) - u^2 v + Bu
+ *               xx   yy
+ *
+ *  B.C. : Neumann
+ *  I.C. : u(x,y,t0) = u0(x,y) =  1  - 0.5*cos(pi*y/L) 
+ *         v(x,y,t0) = v0(x,y) = 3.5 - 2.5*cos(pi*x/L) 
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh, and so the system size Neq is the product MX*MY*NUM_SPECIES. 
+ * The system is actually implemented on submeshes, processor by 
+ * processor, with an MXSUB by MYSUB mesh on each of NPEX * NPEY 
+ * processors.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <idas/idas_bbdpre.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+/* Problem Constants */
+#define NUM_SPECIES 2 
+#define ctL         RCONST(1.0)    /* Domain =[0,L]^2 */
+#define ctA         RCONST(1.0)
+#define ctB         RCONST(3.4)
+#define ctEps       RCONST(2.0e-3)
+
+
+#define PI          RCONST(3.1415926535898) /* pi */ 
+
+#define MXSUB       21    /* Number of x mesh points per processor subgrid */
+#define MYSUB       21    /* Number of y mesh points per processor subgrid */
+#define NPEX        2     /* Number of subgrids in the x direction */
+#define NPEY        2     /* Number of subgrids in the y direction */
+#define MX          (MXSUB*NPEX)      /* MX = number of x mesh points */
+#define MY          (MYSUB*NPEY)      /* MY = number of y mesh points */
+#define NSMXSUB     (NUM_SPECIES * MXSUB)
+#define NEQ         (NUM_SPECIES*MX*MY) /* Number of equations in system */
+
+
+#define RTOL        RCONST(1.e-5)  /*  rtol tolerance */
+#define ATOL        RCONST(1.e-5)  /*  atol tolerance */
+#define NOUT        6  
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values */
+#define TADD        RCONST(0.3)    /* Increment for tout values */
+
+#define ZERO        RCONST(0.0)
+#define HALF        RCONST(0.5)
+#define ONE         RCONST(1.0)
+
+
+/* User-defined vector accessor macro IJ_Vptr. */
+
+/*
+ * IJ_Vptr is defined in order to express the underlying 3-d structure of the 
+ * dependent variable vector from its underlying 1-d storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_P(vv, (i)*NUM_SPECIES + (j)*NSMXSUB ))
+
+/* Type: UserData.  Contains problem constants, preconditioner data, etc. */
+typedef struct {
+  int ns, thispe, npes, ixsub, jysub, npex, npey;
+  int mxsub, mysub, nsmxsub, nsmxsub2;
+  realtype A, B, L, eps[NUM_SPECIES];
+  realtype dx, dy;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES];
+  realtype gridext[(MXSUB+2)*(MYSUB+2)*NUM_SPECIES];
+  realtype rhs[NUM_SPECIES];
+  MPI_Comm comm;
+  realtype rates[2];
+  long int n_local;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+static int res(realtype tt, 
+               N_Vector uv, N_Vector uvp, N_Vector rr, 
+               void *user_data);
+
+static int reslocal(long int Nlocal, realtype tt, 
+                    N_Vector uv, N_Vector uvp, N_Vector res, 
+                    void *user_data);
+
+static int rescomm(long int Nlocal, realtype tt,
+                   N_Vector uv, N_Vector uvp, 
+                   void *user_data);
+
+/* Prototypes for supporting functions */
+static void BSend(MPI_Comm comm, int thispe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype carray[]);
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[]);
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[]);
+
+static void ReactRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData data);
+
+/* Prototypes for private functions */
+static void InitUserData(UserData data, int thispe, int npes, 
+                         MPI_Comm comm);
+
+static void SetInitialProfiles(N_Vector uv, N_Vector uvp, N_Vector id,
+                               N_Vector resid, UserData data);
+
+static void PrintHeader(int SystemSize, int maxl, 
+                        long int mudq, long int mldq, 
+                        long int mukeep, long int mlkeep,
+                        realtype rtol, realtype atol);
+
+static void PrintOutput(void *mem, N_Vector uv, realtype time,
+                        UserData data, MPI_Comm comm);
+
+static void PrintSol(void* mem, N_Vector uv, N_Vector uvp, UserData data,
+                     MPI_Comm comm);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData data;
+  long int SystemSize, local_N, mudq, mldq, mukeep, mlkeep;
+  realtype rtol, atol, t0, tout, tret;
+  N_Vector uv, uvp, resid, id;
+  int thispe, npes, maxl, iout, retval;
+
+  uv = uvp = resid = id = NULL;
+  data = NULL;
+  mem = NULL;
+
+  /* Set communicator, and get processor number and total number of PE's. */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_rank(comm, &thispe);
+  MPI_Comm_size(comm, &npes);
+
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d not equal to NPEX*NPEY = %d\n", 
+              npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1); 
+  }
+  
+  /* Set local length (local_N) and global length (SystemSize). */
+  local_N = MXSUB*MYSUB*NUM_SPECIES;
+  SystemSize = NEQ;
+
+  /* Set up user data block data. */
+  data = (UserData) malloc(sizeof *data);
+
+  InitUserData(data, thispe, npes, comm);
+  
+  /* Create needed vectors, and load initial values.
+     The vector resid is used temporarily only.        */
+  
+  uv  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)uv, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  uvp  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)uvp, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  resid = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)resid, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  id  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  SetInitialProfiles(uv, uvp, id, resid, data);
+
+  /* Set remaining inputs to IDAS. */
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+  
+  /* Call IDACreate and IDAInit to initialize solution */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetUserData(mem, data);
+  if(check_flag(&retval, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetId(mem, id);
+  if(check_flag(&retval, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDAInit(mem, res, t0, uv, uvp);
+  if(check_flag(&retval, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+  
+  retval = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&retval, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDASpgmr to specify the IDAS LINEAR SOLVER IDASPGMR */
+  maxl = 16;
+  retval = IDASpgmr(mem, maxl);
+  if(check_flag(&retval, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+
+
+  /* Call IDABBDPrecInit to initialize the band-block-diagonal preconditioner.
+     The half-bandwidths for the difference quotient evaluation are exact
+     for the system Jacobian, but only a 5-diagonal band matrix is retained. */
+  mudq = mldq = NSMXSUB;
+  mukeep = mlkeep = 2;
+  retval = IDABBDPrecInit(mem, local_N, mudq, mldq, mukeep, mlkeep, 
+                          ZERO, reslocal, NULL);
+  if(check_flag(&retval, "IDABBDPrecInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+  tout = RCONST(0.001);
+  retval = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&retval, "IDACalcIC", 1, thispe)) MPI_Abort(comm, 1);
+  
+  retval = IDAGetConsistentIC(mem, uv, uvp);
+  if(check_flag(&retval, "IDAGetConsistentIC", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* On PE 0, print heading, basic parameters, initial values. */
+  if (thispe == 0) PrintHeader(SystemSize, maxl, 
+                               mudq, mldq, mukeep, mlkeep,
+                               rtol, atol);
+
+  PrintOutput(mem, uv, t0, data, comm);
+
+
+  /* Call IDAS in tout loop, normal mode, and print selected output. */
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    retval = IDASolve(mem, tout, &tret, uv, uvp, IDA_NORMAL);
+    if(check_flag(&retval, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(mem, uv, tret, data, comm);
+
+    if (iout < 3) tout *= TMULT; 
+    else          tout += TADD;
+
+  }
+  /* Print each PE's portion of the solution in a separate file. */
+  /* PrintSol(mem, uv, uvp, data, comm); */
+
+
+  /* On PE 0, print final set of statistics. */  
+  if (thispe == 0)  {
+    PrintFinalStats(mem);
+  }
+
+  /* Free memory. */
+  N_VDestroy_Parallel(uv);
+  N_VDestroy_Parallel(uvp);
+  N_VDestroy_Parallel(id);
+  N_VDestroy_Parallel(resid);
+  IDAFree(&mem);
+
+  free(data);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in data (of type UserData).   
+ */
+
+static void InitUserData(UserData data, int thispe, int npes, 
+                         MPI_Comm comm)
+{
+  data->jysub = thispe / NPEX;
+  data->ixsub = thispe - (data->jysub)*NPEX;
+  data->mxsub = MXSUB;
+  data->mysub = MYSUB;
+  data->npex = NPEX;
+  data->npey = NPEY;
+  data->ns = NUM_SPECIES;
+  data->dx = ctL/(MX-1);
+  data->dy = ctL/(MY-1);
+  data->thispe = thispe;
+  data->npes   = npes;
+  data->nsmxsub = MXSUB * NUM_SPECIES;
+  data->nsmxsub2 = (MXSUB+2)*NUM_SPECIES;
+  data->comm = comm;
+  data->n_local = MXSUB*MYSUB*NUM_SPECIES;
+
+  data->A = ctA;
+  data->B = ctB;
+  data->L = ctL;
+  data->eps[0] = data->eps[1] = ctEps;
+
+  
+}
+
+/*
+ * SetInitialProfiles: Set initial conditions in uv, uvp, and id.
+ */
+
+static void SetInitialProfiles(N_Vector uv, N_Vector uvp, N_Vector id,
+                               N_Vector resid, UserData data)
+{
+  int ixsub, jysub, mxsub, mysub, nsmxsub, ix, jy;
+  realtype *idxy, dx, dy, x, y, *uvxy, *uvxy1, L, npex, npey;
+
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  mxsub = data->mxsub;
+  mysub = data->mysub;
+  nsmxsub = data->nsmxsub;
+  npex = data->npex;
+  npey = data->npey;
+  dx = data->dx;
+  dy = data->dy;
+  L = data->L;
+
+  /* Loop over grid, load uv values and id values. */
+  for (jy = 0; jy < mysub; jy++) {
+    y = (jy + jysub*mysub) * dy;
+    for (ix = 0; ix < mxsub; ix++) {
+
+      x = (ix + ixsub*mxsub) * dx;
+      uvxy = IJ_Vptr(uv,ix,jy); 
+
+      uvxy[0] = RCONST(1.0) - HALF*cos(PI*y/L); 
+      uvxy[1] = RCONST(3.5) - RCONST(2.5)*cos(PI*x/L);
+    }
+  }
+ 
+  N_VConst(ONE, id);
+
+  if (jysub == 0) {
+    for (ix=0; ix<mxsub; ix++) {
+      idxy = IJ_Vptr(id,ix,0);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,ix,0);
+      uvxy1 = IJ_Vptr(uv,ix,1);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+    }
+  }
+
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      idxy = IJ_Vptr(id,mxsub-1,jy);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,mxsub-1,jy);
+      uvxy1 = IJ_Vptr(uv,mxsub-2,jy);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+
+    }
+  }
+
+
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      idxy = IJ_Vptr(id,0,jy);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,0,jy);
+      uvxy1 = IJ_Vptr(uv,1,jy);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+
+    }    
+  }
+
+  if (jysub == npey-1) {
+    for (ix=0; ix<mxsub; ix++) {
+      idxy = IJ_Vptr(id,ix,jysub);
+      idxy[0] = idxy[1] = ZERO;
+
+      uvxy  = IJ_Vptr(uv,ix,mysub-1);
+      uvxy1 = IJ_Vptr(uv,ix,mysub-2);
+      uvxy[0] = uvxy1[0];
+      uvxy[1] = uvxy1[1];
+
+    }
+  }
+
+  /* Derivative found by calling the residual function with uvp = 0. */
+  N_VConst(ZERO, uvp);
+  res(ZERO, uv, uvp, resid, data);
+  N_VScale(-ONE, resid, uvp);
+
+
+}
+
+/*
+ * Print first lines of output (problem description)
+ * and table headerr
+ */
+
+static void PrintHeader(int SystemSize, int maxl, 
+                        long int mudq, long int mldq, 
+                        long int mukeep, long int mlkeep,
+                        realtype rtol, realtype atol)
+{
+  printf("\nidasBruss_kry_bbd_p: Brusselator DAE parallel example problem for IDAS \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     Total system size: %d\n",SystemSize);
+  printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+  printf("     Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDASPGMR     Max. Krylov dimension maxl: %d\n", maxl);
+  printf("Preconditioner: band-block-diagonal (IDABBDPRE), with parameters\n");
+  printf("     mudq = %ld,  mldq = %ld,  mukeep = %ld,  mlkeep = %ld\n",
+         mudq, mldq, mukeep, mlkeep);
+  printf("CalcIC called to correct initial guesses \n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+}
+
+
+/*
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of c1 and c2
+ * are printed for the bottom left and top right grid points only.
+ */
+
+static void PrintOutput(void *mem, N_Vector uv, realtype tt,
+                        UserData data, MPI_Comm comm)
+{
+  MPI_Status status;
+  realtype *cdata, clast[2], hused;
+  long int nst;
+  int i, kused, flag, thispe, npelast, ilast;;
+
+  thispe = data->thispe; 
+  npelast = data->npes - 1;
+  cdata = N_VGetArrayPointer_Parallel(uv);
+  
+  /* Send conc. at top right mesh point from PE npes-1 to PE 0. */
+  if (thispe == npelast) {
+    ilast = NUM_SPECIES*MXSUB*MYSUB - 2;
+    if (npelast != 0)
+      MPI_Send(&cdata[ilast], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else { clast[0] = cdata[ilast]; clast[1] = cdata[ilast+1]; }
+  }
+  
+  /* On PE 0, receive conc. at top right from PE npes - 1.
+     Then print performance data and sampled solution values. */
+  if (thispe == 0) {
+    
+    if (npelast != 0)
+      MPI_Recv(&clast[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    
+    flag = IDAGetLastOrder(mem, &kused);
+    check_flag(&flag, "IDAGetLastOrder", 1, thispe);
+    flag = IDAGetNumSteps(mem, &nst);
+    check_flag(&flag, "IDAGetNumSteps", 1, thispe);
+    flag = IDAGetLastStep(mem, &hused);
+    check_flag(&flag, "IDAGetLastStep", 1, thispe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4Le %12.4Le   |\n",cdata[i],clast[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#else
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#endif
+    printf("\n");
+
+  }
+
+}
+
+/* 
+ * PrintSol the PE's portion of the solution to a file.
+ */
+static void PrintSol(void* mem, N_Vector uv, N_Vector uvp, 
+                     UserData data, MPI_Comm comm)
+{
+  FILE* fout;
+  realtype *uvxy;
+  int ix, jy, mxsub, mysub, thispe;
+  char szFilename[128];
+
+  thispe = data->thispe;
+  sprintf(szFilename, "ysol%d.txt", thispe);
+
+  fout = fopen(szFilename, "w+");
+  if (fout==NULL) {
+    printf("PE[% 2d] is unable to write solution to disk!\n", thispe);
+    return;
+  }
+
+  mxsub = data->mxsub;
+  mysub = data->mysub;
+
+  for (jy=0; jy<mysub; jy++) {
+    for (ix=0; ix<mxsub; ix++) {
+    
+      uvxy  = IJ_Vptr(uv, ix, jy);
+      fprintf(fout, "%g\n%g\n", uvxy[0], uvxy[1]);
+    }
+  }    
+  fclose(fout);
+}
+
+
+
+/*
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int nst, nre, nreLS, netf, ncfn, nni, ncfl, nli, npe, nps, nge;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1, 0);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1, 0);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1, 0);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1, 0);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1, 0);
+
+  flag = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&flag, "IDASpilsGetNumConvFails", 1, 0);
+  flag = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&flag, "IDASpilsGetNumLinIters", 1, 0);
+  flag = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&flag, "IDASpilsGetNumPrecEvals", 1, 0);
+  flag = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&flag, "IDASpilsGetNumPrecSolves", 1, 0);
+  flag = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDASpilsGetNumResEvals", 1, 0);
+
+  flag = IDABBDPrecGetNumGfnEvals(mem, &nge);
+  check_flag(&flag, "IDABBDPrecGetNumGfnEvals", 1, 0);
+
+  printf("-----------------------------------------------------------\n");
+  printf("\nFinal statistics: \n\n");
+
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n\n", ncfn);
+
+  printf("Number of linear iterations        = %ld\n", nli);
+  printf("Number of linear conv. failures    = %ld\n\n", ncfl);
+
+  printf("Number of preconditioner setups    = %ld\n", npe);
+  printf("Number of preconditioner solves    = %ld\n", nps);
+  printf("Number of local residual evals.    = %ld\n", nge);
+
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", 
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA & SUPPORTING FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * res: System residual function 
+ *
+ * To compute the residual function F, this routine calls:
+ * rescomm, for needed communication, and then
+ * reslocal, for computation of the residuals on this processor.      
+ */
+
+static int res(realtype tt, 
+               N_Vector uv, N_Vector uvp, N_Vector rr, 
+               void *user_data)
+{
+  int retval;
+  UserData data;
+  long int Nlocal;
+  
+  data = (UserData) user_data;
+  
+  Nlocal = data->n_local;
+
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(Nlocal, tt, uv, uvp, user_data);
+  
+  /* Call reslocal to calculate the local portion of residual vector. */
+  retval = reslocal(Nlocal, tt, uv, uvp, rr, user_data);
+  
+  return(0);
+}
+
+/*
+ * rescomm: Communication routine in support of resweb.
+ * This routine performs all inter-processor communication of components
+ * of the uv vector needed to calculate F, namely the components at all
+ * interior subgrid boundaries (ghost cell data).  It loads this data
+ * into a work array cext (the local portion of c, extended).
+ * The message-passing uses blocking sends, non-blocking receives,
+ * and receive-waiting, in routines BRecvPost, BSend, BRecvWait.         
+ */
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector uv, N_Vector uvp,
+                   void *user_data)
+{
+
+  UserData data;
+  realtype *cdata, *gridext, buffer[2*NUM_SPECIES*MYSUB];
+  int thispe, ixsub, jysub, nsmxsub, nsmysub;
+  MPI_Comm comm;
+  MPI_Request request[4];
+  
+  data = (UserData) user_data;
+  cdata = N_VGetArrayPointer_Parallel(uv);
+
+  /* Get comm, thispe, subgrid indices, data sizes, extended array cext. */  
+  comm = data->comm;     
+  thispe = data->thispe;
+
+  ixsub = data->ixsub;   
+  jysub = data->jysub;
+  gridext = data->gridext;
+  nsmxsub = data->nsmxsub; 
+  nsmysub = (data->ns)*(data->mysub);
+  
+  /* Start receiving boundary data from neighboring PEs. */
+  BRecvPost(comm, request, thispe, ixsub, jysub, nsmxsub, nsmysub, 
+            gridext, buffer);
+  
+  /* Send data from boundary of local grid to neighboring PEs. */
+  BSend(comm, thispe, ixsub, jysub, nsmxsub, nsmysub, cdata);
+  
+  /* Finish receiving boundary data from neighboring PEs. */
+  BRecvWait(request, ixsub, jysub, nsmxsub, gridext, buffer);
+  
+  return(0);
+}
+
+/*
+ * BRecvPost: Start receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls. 
+ */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[])
+{
+  int offsetce;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Irecv(&cext[NUM_SPECIES], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1) {
+    offsetce = NUM_SPECIES*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&cext[offsetce], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe+1, 0, comm, &request[3]);
+  }
+}
+
+/*
+ * BRecvWait: Finish receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls.  
+ */
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[])
+{
+  int i;
+  int ly, dsizex2, offsetce, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2*NUM_SPECIES;
+  
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+1)*dsizex2;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufleft[offsetbuf+i];
+    }
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+2)*dsizex2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/*
+ * BSend: Send boundary data to neighboring PEs.
+ * This routine sends components of uv from internal subgrid boundaries
+ * to the appropriate neighbor PEs.                                      
+ */
+ 
+static void BSend(MPI_Comm comm, int my_pe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype cdata[])
+{
+  int i;
+  int ly, offsetc, offsetbuf;
+  realtype bufleft[NUM_SPECIES*MYSUB], bufright[NUM_SPECIES*MYSUB];
+
+  /* If jysub > 0, send data from bottom x-line of uv. */
+
+  if (jysub != 0)
+    MPI_Send(&cdata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If jysub < NPEY-1, send data from top x-line of uv. */
+
+  if (jysub != NPEY-1) {
+    offsetc = (MYSUB-1)*dsizex;
+    MPI_Send(&cdata[offsetc], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If ixsub > 0, send data from left y-line of uv (via bufleft). */
+
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = ly*dsizex;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufleft[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+  
+  /* If ixsub < NPEX-1, send data from right y-line of uv (via bufright). */
+  
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = offsetbuf*MXSUB + (MXSUB-1)*NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufright[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* Define lines are for ease of readability in the following functions. */
+
+#define mxsub      (data->mxsub)
+#define mysub      (data->mysub)
+#define npex       (data->npex)
+#define npey       (data->npey)
+#define ixsub      (data->ixsub)
+#define jysub      (data->jysub)
+#define nsmxsub    (data->nsmxsub)
+#define nsmxsub2   (data->nsmxsub2)
+#define dx         (data->dx)
+#define dy         (data->dy)
+#define cox        (data->cox)
+#define coy        (data->coy)
+#define gridext    (data->gridext)
+#define eps        (data->eps)
+#define ns         (data->ns)
+
+/*
+ * reslocal: Compute res = F(t,uv,uvp).
+ * This routine assumes that all inter-processor communication of data
+ * needed to calculate F has already been done.  Components at interior
+ * subgrid boundaries are assumed to be in the work array cext.
+ * The local portion of the uv vector is first copied into cext.
+ * The exterior Neumann boundary conditions are explicitly handled here
+ * by copying data from the first interior mesh line to the ghost cell
+ * locations in cext.  Then the reaction and diffusion terms are
+ * evaluated in terms of the cext array, and the residuals are formed.
+ * The reaction terms are saved separately in the vector data->rates
+ * for use by the preconditioner setup routine.                          
+ */
+
+static int reslocal(long int Nlocal, realtype tt, 
+                    N_Vector uv, N_Vector uvp, N_Vector rr,
+                    void *user_data)
+{
+  realtype *uvdata, *uvpxy, *resxy, xx, yy, dcyli, dcyui, dcxli, dcxui, dx2, dy2;
+  realtype ixend, ixstart, jystart, jyend;
+  int ix, jy, is, i, locc, ylocce, locce;
+  realtype rates[2];
+  UserData data;
+  
+  data = (UserData) user_data;
+
+  /* Get data pointers, subgrid data, array sizes, work array cext. */
+  uvdata = N_VGetArrayPointer_Parallel(uv);
+
+  dx2 = dx * dx;
+  dy2 = dy * dy;
+
+  /* Copy local segment of uv vector into the working extended array gridext. */
+  locc = 0;
+  locce = nsmxsub2 + NUM_SPECIES;
+  for (jy = 0; jy < mysub; jy++) {
+    for (i = 0; i < nsmxsub; i++) gridext[locce+i] = uvdata[locc+i];
+    locc = locc + nsmxsub;
+    locce = locce + nsmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+     a boundary PE, copy data from the first interior mesh line of uv to gridext. */
+  
+  /* If jysub = 0, copy x-line 2 of uv to gridext. */
+  if (jysub == 0)
+    { for (i = 0; i < nsmxsub; i++) gridext[NUM_SPECIES+i] = uvdata[nsmxsub+i]; }
+  
+
+  /* If jysub = npey-1, copy x-line mysub-1 of uv to gridext. */
+  if (jysub == npey-1) {
+    locc = (mysub-2)*nsmxsub;
+    locce = (mysub+1)*nsmxsub2 + NUM_SPECIES;
+    for (i = 0; i < nsmxsub; i++) gridext[locce+i] = uvdata[locc+i];
+  }
+  
+
+  /* If ixsub = 0, copy y-line 2 of uv to gridext. */
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc = jy*nsmxsub + NUM_SPECIES;
+      locce = (jy+1)*nsmxsub2;
+      for (i = 0; i < NUM_SPECIES; i++) gridext[locce+i] = uvdata[locc+i];
+    }
+  }
+  
+
+  /* If ixsub = npex-1, copy y-line mxsub-1 of uv to gridext. */
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc  = (jy+1)*nsmxsub - 2*NUM_SPECIES;
+      locce = (jy+2)*nsmxsub2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++) gridext[locce+i] = uvdata[locc+i];
+    }
+  }
+  
+  /* Loop over all grid points, setting local array rates to right-hand sides.
+     Then set rr values appropriately (ODE in the interior and DAE on the boundary)*/
+  ixend = ixstart = jystart = jyend = 0;  
+
+  if (jysub==0)      jystart = 1;
+  if (jysub==npey-1) jyend   = 1;
+  if (ixsub==0)      ixstart = 1;
+  if (ixsub==npex-1) ixend   = 1;
+
+  for (jy = jystart; jy < mysub-jyend; jy++) { 
+    ylocce = (jy+1)*nsmxsub2;
+    yy     = (jy+jysub*mysub)*dy;
+
+    for (ix = ixstart; ix < mxsub-ixend; ix++) {
+      locce = ylocce + (ix+1)*NUM_SPECIES;
+      xx = (ix + ixsub*mxsub)*dx;
+
+      ReactRates(xx, yy, &(gridext[locce]), rates, data);      
+      
+      resxy = IJ_Vptr(rr,ix,jy); 
+      uvpxy = IJ_Vptr(uvp,ix,jy); 
+      
+      for (is = 0; is < NUM_SPECIES; is++) {
+        dcyli = gridext[locce+is]          - gridext[locce+is-nsmxsub2];
+        dcyui = gridext[locce+is+nsmxsub2] - gridext[locce+is];
+        
+        dcxli = gridext[locce+is]             - gridext[locce+is-NUM_SPECIES];
+        dcxui = gridext[locce+is+NUM_SPECIES] - gridext[locce+is];
+        
+        resxy[is] = uvpxy[is]- eps[is]*( (dcxui-dcxli)/dx2 + (dcyui-dcyli)/dy2 ) - rates[is];
+      }
+    }
+  }
+
+  /* Algebraic equation correspoding to boundary mesh point. */
+  if (jysub==0) {
+    for (ix=0; ix<mxsub; ix++) {
+      
+      locce = nsmxsub2 + NUM_SPECIES * (ix+1);
+      resxy = IJ_Vptr(rr,ix,0); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is+nsmxsub2] - gridext[locce+is];
+    }
+  }
+
+  if (ixsub==npex-1) {
+    for(jy=0; jy<mysub; jy++) {
+      locce = (jy+1)*nsmxsub2 + nsmxsub2-NUM_SPECIES;
+      resxy = IJ_Vptr(rr,mxsub-1,jy); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is-NUM_SPECIES] - gridext[locce+is];
+    }
+  }
+  
+  if (ixsub==0) {
+    for (jy=0; jy<mysub; jy++) {
+      locce = (jy+1)*nsmxsub2 + NUM_SPECIES;
+      resxy = IJ_Vptr(rr,0,jy); 
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is-NUM_SPECIES] - gridext[locce+is];
+    }    
+  }
+
+  if (jysub==npey-1) {
+    for(ix=0; ix<mxsub; ix++) {
+      locce = nsmxsub2*mysub + (ix+1)*NUM_SPECIES;
+      resxy = IJ_Vptr(rr,ix, mysub-1);
+
+      for (is=0; is<NUM_SPECIES; is++)
+        resxy[is] = gridext[locce+is-nsmxsub2] - gridext[locce+is];
+    }
+  }
+  return(0);
+}
+
+/* 
+ * ReactRates: Evaluate reaction rates at a given spatial point.   
+ * At a given (x,y), evaluate the array of ns reaction terms R.          
+ */
+
+static void ReactRates(realtype xx, realtype yy, realtype *uvval, realtype *rates,
+                       UserData data)
+{
+  realtype A, B;
+
+  A = data->A; B = data->B;
+
+  rates[0] = uvval[0]*uvval[0]*uvval[1];
+  rates[1] = - rates[0];
+
+  rates[0] += A-(B+1)*uvval[0];
+  rates[1] += B*uvval[0];
+}
diff --git a/examples/idas/parallel/idasBruss_kry_bbd_p.out b/examples/idas/parallel/idasBruss_kry_bbd_p.out
new file mode 100644
index 0000000..3afac54
--- /dev/null
+++ b/examples/idas/parallel/idasBruss_kry_bbd_p.out
@@ -0,0 +1,51 @@
+idasBruss_kry_bbd_p: Brusselator DAE parallel example problem for IDAS 
+
+Number of species ns: 2     Mesh dimensions: 42 x 42     Total system size: 3528
+Subgrid dimensions: 21 x 21     Processor array: 2 x 2
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDASPGMR     Max. Krylov dimension maxl: 16
+Preconditioner: band-block-diagonal (IDABBDPRE), with parameters
+     mudq = 42,  mldq = 42,  mukeep = 2,  mlkeep = 2
+CalcIC called to correct initial guesses 
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   5.0147e-01   1.4985e+00   |   0  0   1.0000e-06
+           1.0073e+00   5.9927e+00   |
+
+1.00e-03   5.0053e-01   1.5064e+00   |  11  1   5.1200e-04
+           1.0089e+00   5.9842e+00   |
+
+1.00e-02   4.9226e-01   1.5818e+00   |  17  2   2.0480e-03
+           1.0225e+00   5.9031e+00   |
+
+1.00e-01   4.2319e-01   3.0579e+00   |  29  4   1.1822e-02
+           1.1480e+00   4.3135e+00   |
+
+4.00e-01   3.0714e-01   5.4048e+00   |  74  5   6.2824e-03
+           1.4797e+00   6.1197e-01   |
+
+7.00e-01   2.7089e-01   4.1003e+00   | 122  5   6.2824e-03
+           1.7503e+00   7.8994e-01   |
+
+1.00e+00   2.6132e-01   3.0981e+00   | 169  5   1.2565e-02
+           1.9993e+00   1.0125e+00   |
+
+-----------------------------------------------------------
+
+Final statistics: 
+
+Number of steps                    = 169
+Number of residual evaluations     = 423
+Number of nonlinear iterations     = 188
+Number of error test failures      = 1
+Number of nonlinear conv. failures = 0
+
+Number of linear iterations        = 233
+Number of linear conv. failures    = 0
+
+Number of preconditioner setups    = 17
+Number of preconditioner solves    = 423
+Number of local residual evals.    = 1462
diff --git a/examples/idas/parallel/idasFoodWeb_kry_bbd_p.c b/examples/idas/parallel/idasFoodWeb_kry_bbd_p.c
new file mode 100644
index 0000000..63473d4
--- /dev/null
+++ b/examples/idas/parallel/idasFoodWeb_kry_bbd_p.c
@@ -0,0 +1,1090 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example program for IDA: Food web, parallel, GMRES, IDABBD
+ * preconditioner.
+ *
+ * This example program for IDAS uses IDASPGMR as the linear solver.
+ * It is written for a parallel computer system and uses the
+ * IDABBDPRE band-block-diagonal preconditioner module for the
+ * IDASPGMR package. It was originally run on a Sun SPARC cluster
+ * and used MPICH.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c    + c  )  +  R  (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *   a(i,i) = -AA  (all i)
+ *   a(i,j) = -GG  (i <= np , j >  np)
+ *   a(i,j) =  EE  (i >  np,  j <= np)
+ *   all other a(i,j) = 0
+ *   b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y))  (i <= np)
+ *   b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y))  (i  > np)
+ *   d(i) = DPREY  (i <= np)
+ *   d(i) = DPRED  (i > np)
+ *
+ * Note: The above equations are written in 1-based indices,
+ * whereas the code has 0-based indices, being written in C.
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative  =  0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh, and so the system size Neq is the product
+ * MX * MY * NUM_SPECIES. The system is actually implemented on
+ * submeshes, processor by processor, with an MXSUB by MYSUB mesh
+ * on each of NPEX * NPEY processors.
+ *
+ * The DAE system is solved by IDAS using the IDASPGMR linear solver,
+ * in conjunction with the preconditioner module IDABBDPRE. The
+ * preconditioner uses a 5-diagonal band-block-diagonal
+ * approximation (half-bandwidths = 2). Output is printed at
+ * t = 0, .001, .01, .1, .4, .7, 1.
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems,
+ *     Journal of Applied Mathematics and Computation, Vol. 31
+ *     (May 1989), pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <idas/idas_bbdpre.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+/* Problem Constants */
+
+#define NPREY       1        /* Number of prey (= number of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898) /* pi */ 
+#define FOURPI      (RCONST(4.0)*PI)        /* 4 pi */
+
+#define MXSUB       10    /* Number of x mesh points per processor subgrid */
+#define MYSUB       10    /* Number of y mesh points per processor subgrid */
+#define NPEX        2     /* Number of subgrids in the x direction */
+#define NPEY        2     /* Number of subgrids in the y direction */
+#define MX          (MXSUB*NPEX)      /* MX = number of x mesh points */
+#define MY          (MYSUB*NPEY)      /* MY = number of y mesh points */
+#define NSMXSUB     (NUM_SPECIES * MXSUB)
+#define NEQ         (NUM_SPECIES*MX*MY) /* Number of equations in system */
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns. */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns. */
+#define AX          RCONST(1.0)    /* Total range of x variable */
+#define AY          RCONST(1.0)    /* Total range of y variable */
+#define RTOL        RCONST(1.e-5)  /*  rtol tolerance */
+#define ATOL        RCONST(1.e-5)  /*  atol tolerance */
+#define ZERO        RCONST(0.)     /* 0. */
+#define ONE         RCONST(1.0)    /* 1. */
+#define NOUT        6  
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values */
+#define TADD        RCONST(0.3)    /* Increment for tout values */
+
+/* User-defined vector accessor macro IJ_Vptr. */
+
+/*
+ * IJ_Vptr is defined in order to express the underlying 3-d structure of the 
+ * dependent variable vector from its underlying 1-d storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_P(vv, (i)*NUM_SPECIES + (j)*NSMXSUB ))
+
+/* Type: UserData.  Contains problem constants, preconditioner data, etc. */
+
+typedef struct {
+  int ns, np, thispe, npes, ixsub, jysub, npex, npey;
+  int mxsub, mysub, nsmxsub, nsmxsub2;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES],
+    rhs[NUM_SPECIES], cext[(MXSUB+2)*(MYSUB+2)*NUM_SPECIES];
+  MPI_Comm comm;
+  N_Vector rates;
+  long int n_local;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+
+static int resweb(realtype tt, 
+                  N_Vector cc, N_Vector cp, N_Vector rr, 
+                  void *user_data);
+
+static int reslocal(long int Nlocal, realtype tt, 
+                    N_Vector cc, N_Vector cp, N_Vector res, 
+                    void *user_data);
+
+static int rescomm(long int Nlocal, realtype tt,
+                   N_Vector cc, N_Vector cp, 
+                   void *user_data);
+
+/* Prototypes for supporting functions */
+
+static void BSend(MPI_Comm comm, int thispe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype carray[]);
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[]);
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[]);
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+
+static realtype dotprod(int size, realtype *x1, realtype *x2);
+
+/* Prototypes for private functions */
+
+static void InitUserData(UserData webdata, int thispe, int npes, 
+                         MPI_Comm comm);
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               N_Vector scrtch, UserData webdata);
+
+static void PrintHeader(int SystemSize, int maxl, 
+                        int mudq, int mldq, 
+                        int mukeep, int mlkeep,
+                        realtype rtol, realtype atol);
+
+static void PrintOutput(void *mem, N_Vector cc, realtype time,
+                        UserData webdata, MPI_Comm comm);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData webdata;
+  long int SystemSize, local_N, mudq, mldq, mukeep, mlkeep;
+  realtype rtol, atol, t0, tout, tret;
+  N_Vector cc, cp, res, id;
+  int thispe, npes, maxl, iout, retval;
+
+  cc = cp = res = id = NULL;
+  webdata = NULL;
+  mem = NULL;
+
+  /* Set communicator, and get processor number and total number of PE's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_rank(comm, &thispe);
+  MPI_Comm_size(comm, &npes);
+
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d not equal to NPEX*NPEY = %d\n", 
+              npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1); 
+  }
+  
+  /* Set local length (local_N) and global length (SystemSize). */
+
+  local_N = MXSUB*MYSUB*NUM_SPECIES;
+  SystemSize = NEQ;
+
+  /* Set up user data block webdata. */
+
+  webdata = (UserData) malloc(sizeof *webdata);
+  webdata->rates = N_VNew_Parallel(comm, local_N, SystemSize);
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+
+  InitUserData(webdata, thispe, npes, comm);
+  
+  /* Create needed vectors, and load initial values.
+     The vector res is used temporarily only.        */
+  
+  cc  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)cc, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  cp  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)cp, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  res = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)res, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  id  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if(check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+  
+  SetInitialProfiles(cc, cp, id, res, webdata);
+  
+  N_VDestroy_Parallel(res);
+  
+  /* Set remaining inputs to IDAMalloc. */
+  
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+  
+  /* Call IDACreate and IDAMalloc to initialize solution */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetUserData(mem, webdata);
+  if(check_flag(&retval, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDASetId(mem, id);
+  if(check_flag(&retval, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  retval = IDAInit(mem, resweb, t0, cc, cp);
+  if(check_flag(&retval, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+  
+  retval = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&retval, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDASpgmr to specify the IDA linear solver IDASPGMR */
+
+  maxl = 16;
+  retval = IDASpgmr(mem, maxl);
+  if(check_flag(&retval, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDABBDPrecInit to initialize the band-block-diagonal preconditioner.
+     The half-bandwidths for the difference quotient evaluation are exact
+     for the system Jacobian, but only a 5-diagonal band matrix is retained. */
+  
+  mudq = mldq = NSMXSUB;
+  mukeep = mlkeep = 2;
+  retval = IDABBDPrecInit(mem, local_N, mudq, mldq, mukeep, mlkeep, 
+                          ZERO, reslocal, NULL);
+  if(check_flag(&retval, "IDABBDPrecInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+  
+  tout = RCONST(0.001);
+  retval = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&retval, "IDACalcIC", 1, thispe)) MPI_Abort(comm, 1);
+  
+  /* On PE 0, print heading, basic parameters, initial values. */
+ 
+  if (thispe == 0) PrintHeader(SystemSize, maxl, 
+                               mudq, mldq, mukeep, mlkeep,
+                               rtol, atol);
+  PrintOutput(mem, cc, t0, webdata, comm);
+
+  /* Call IDA in tout loop, normal mode, and print selected output. */
+  
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    retval = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if(check_flag(&retval, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+    
+    PrintOutput(mem, cc, tret, webdata, comm);
+    
+    if (iout < 3) tout *= TMULT; 
+    else          tout += TADD;
+
+  }
+  
+  /* On PE 0, print final set of statistics. */
+  
+  if (thispe == 0)  PrintFinalStats(mem);
+
+  /* Free memory. */
+
+  N_VDestroy_Parallel(cc);
+  N_VDestroy_Parallel(cp);
+  N_VDestroy_Parallel(id);
+
+  IDAFree(&mem);
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_Parallel(webdata->rates);
+  free(webdata);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata, int thispe, int npes, 
+                         MPI_Comm comm)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2, **acoef, *bcoef, *cox, *coy;
+
+  webdata->jysub = thispe / NPEX;
+  webdata->ixsub = thispe - (webdata->jysub)*NPEX;
+  webdata->mxsub = MXSUB;
+  webdata->mysub = MYSUB;
+  webdata->npex = NPEX;
+  webdata->npey = NPEY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->thispe = thispe;
+  webdata->npes   = npes;
+  webdata->nsmxsub = MXSUB * NUM_SPECIES;
+  webdata->nsmxsub2 = (MXSUB+2)*NUM_SPECIES;
+  webdata->comm = comm;
+  webdata->n_local = MXSUB*MYSUB*NUM_SPECIES;
+
+  /* Set up the coefficients a and b plus others found in the equations. */
+
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); 
+  dy2 = (webdata->dy)*(webdata->dy);
+
+  acoef = webdata->acoef;
+  bcoef = webdata->bcoef;
+  cox = webdata->cox;
+  coy = webdata->coy;
+
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+
+}
+
+/*
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               N_Vector res, UserData webdata)
+{
+  int ixsub, jysub, mxsub, mysub, nsmxsub, np, ix, jy, is;
+  realtype *cxy, *idxy, *cpxy, dx, dy, xx, yy, xyfactor;
+
+  ixsub = webdata->ixsub;
+  jysub = webdata->jysub;
+  mxsub = webdata->mxsub;
+  mysub = webdata->mxsub;
+  nsmxsub = webdata->nsmxsub;
+  dx = webdata->dx;
+  dy = webdata->dy;
+  np = webdata->np;
+
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < mysub; jy++) {
+    yy = (jy + jysub*mysub) * dy;
+    for (ix = 0; ix < mxsub; ix++) {
+      xx = (ix + ixsub*mxsub) * dx;
+      xyfactor = 16.*xx*(1. - xx)*yy*(1. - yy);
+      xyfactor *= xyfactor;
+
+      cxy = IJ_Vptr(cc,ix,jy); 
+      idxy = IJ_Vptr(id,ix,jy); 
+      for (is = 0; is < NUM_SPECIES; is++) {
+	if (is < np) { cxy[is] = RCONST(10.0) + (realtype)(is+1)*xyfactor; idxy[is] = ONE; }
+        else { cxy[is] = 1.0e5; idxy[is] = ZERO; }
+      }
+    }
+  }
+
+  /* Set c' for the prey by calling the residual function with cp = 0. */
+  
+  N_VConst(ZERO, cp);
+  resweb(ZERO, cc, cp, res, webdata);
+  N_VScale(-ONE, res, cp);
+  
+  /* Set c' for predators to 0. */
+  
+  for (jy = 0; jy < mysub; jy++) {
+    for (ix = 0; ix < mxsub; ix++) {
+      cpxy = IJ_Vptr(cp,ix,jy); 
+      for (is = np; is < NUM_SPECIES; is++) cpxy[is] = ZERO;
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ * and table headerr
+ */
+
+static void PrintHeader(int SystemSize, int maxl, 
+                        int mudq, int mldq, 
+                        int mukeep, int mlkeep,
+                        realtype rtol, realtype atol)
+{
+  printf("\nidasFoodWeb_kry_bbd_p: Predator-prey DAE parallel example problem for IDA \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     Total system size: %d\n",SystemSize);
+  printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+  printf("     Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDASPGMR     Max. Krylov dimension maxl: %d\n", maxl);
+  printf("Preconditioner: band-block-diagonal (IDABBDPRE), with parameters\n");
+  printf("     mudq = %d,  mldq = %d,  mukeep = %d,  mlkeep = %d\n",
+         mudq, mldq, mukeep, mlkeep);
+  printf("CalcIC called to correct initial predator concentrations \n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+}
+
+
+/*
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of c1 and c2
+ * are printed for the bottom left and top right grid points only.
+ */
+
+static void PrintOutput(void *mem, N_Vector cc, realtype tt,
+                        UserData webdata, MPI_Comm comm)
+{
+  MPI_Status status;
+  realtype *cdata, clast[2], hused;
+  long int nst;
+  int i, kused, flag, thispe, npelast, ilast;;
+
+  thispe = webdata->thispe; 
+  npelast = webdata->npes - 1;
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Send conc. at top right mesh point from PE npes-1 to PE 0. */
+  if (thispe == npelast) {
+    ilast = NUM_SPECIES*MXSUB*MYSUB - 2;
+    if (npelast != 0)
+      MPI_Send(&cdata[ilast], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else { clast[0] = cdata[ilast]; clast[1] = cdata[ilast+1]; }
+  }
+  
+  /* On PE 0, receive conc. at top right from PE npes - 1.
+     Then print performance data and sampled solution values. */
+  
+  if (thispe == 0) {
+    
+    if (npelast != 0)
+      MPI_Recv(&clast[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    
+    flag = IDAGetLastOrder(mem, &kused);
+    check_flag(&flag, "IDAGetLastOrder", 1, thispe);
+    flag = IDAGetNumSteps(mem, &nst);
+    check_flag(&flag, "IDAGetNumSteps", 1, thispe);
+    flag = IDAGetLastStep(mem, &hused);
+    check_flag(&flag, "IDAGetLastStep", 1, thispe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4Le %12.4Le   |\n",cdata[i],clast[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#else
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#endif
+    printf("\n");
+
+  }
+
+}
+
+/*
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int nst, nre, nreLS, netf, ncfn, nni, ncfl, nli, npe, nps, nge;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1, 0);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1, 0);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1, 0);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1, 0);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1, 0);
+
+  flag = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&flag, "IDASpilsGetNumConvFails", 1, 0);
+  flag = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&flag, "IDASpilsGetNumLinIters", 1, 0);
+  flag = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&flag, "IDASpilsGetNumPrecEvals", 1, 0);
+  flag = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&flag, "IDASpilsGetNumPrecSolves", 1, 0);
+  flag = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDASpilsGetNumResEvals", 1, 0);
+
+  flag = IDABBDPrecGetNumGfnEvals(mem, &nge);
+  check_flag(&flag, "IDABBDPrecGetNumGfnEvals", 1, 0);
+
+  printf("-----------------------------------------------------------\n");
+  printf("\nFinal statistics: \n\n");
+
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n\n", ncfn);
+
+  printf("Number of linear iterations        = %ld\n", nli);
+  printf("Number of linear conv. failures    = %ld\n\n", ncfl);
+
+  printf("Number of preconditioner setups    = %ld\n", npe);
+  printf("Number of preconditioner solves    = %ld\n", nps);
+  printf("Number of local residual evals.    = %ld\n", nge);
+
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", 
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA & SUPPORTING FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resweb: System residual function for predator-prey system.
+ * To compute the residual function F, this routine calls:
+ * rescomm, for needed communication, and then
+ * reslocal, for computation of the residuals on this processor.      
+ */
+
+static int resweb(realtype tt, 
+                  N_Vector cc, N_Vector cp, N_Vector rr, 
+                  void *user_data)
+{
+  int retval;
+  UserData webdata;
+  long int Nlocal;
+  
+  webdata = (UserData) user_data;
+  
+  Nlocal = webdata->n_local;
+
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(Nlocal, tt, cc, cp, user_data);
+  
+  /* Call reslocal to calculate the local portion of residual vector. */
+  retval = reslocal(Nlocal, tt, cc, cp, rr, user_data);
+  
+  return(0);
+}
+
+/*
+ * rescomm: Communication routine in support of resweb.
+ * This routine performs all inter-processor communication of components
+ * of the cc vector needed to calculate F, namely the components at all
+ * interior subgrid boundaries (ghost cell data).  It loads this data
+ * into a work array cext (the local portion of c, extended).
+ * The message-passing uses blocking sends, non-blocking receives,
+ * and receive-waiting, in routines BRecvPost, BSend, BRecvWait.         
+ */
+
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector cc, N_Vector cp,
+                   void *user_data)
+{
+
+  UserData webdata;
+  realtype *cdata, *cext, buffer[2*NUM_SPECIES*MYSUB];
+  int thispe, ixsub, jysub, nsmxsub, nsmysub;
+  MPI_Comm comm;
+  MPI_Request request[4];
+  
+  webdata = (UserData) user_data;
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Get comm, thispe, subgrid indices, data sizes, extended array cext. */
+  
+  comm = webdata->comm;     
+  thispe = webdata->thispe;
+
+  ixsub = webdata->ixsub;   
+  jysub = webdata->jysub;
+  cext = webdata->cext;
+  nsmxsub = webdata->nsmxsub; 
+  nsmysub = (webdata->ns)*(webdata->mysub);
+  
+  /* Start receiving boundary data from neighboring PEs. */
+
+  BRecvPost(comm, request, thispe, ixsub, jysub, nsmxsub, nsmysub, 
+            cext, buffer);
+  
+  /* Send data from boundary of local grid to neighboring PEs. */
+  
+  BSend(comm, thispe, ixsub, jysub, nsmxsub, nsmysub, cdata);
+  
+  /* Finish receiving boundary data from neighboring PEs. */
+  
+  BRecvWait(request, ixsub, jysub, nsmxsub, cext, buffer);
+  
+  return(0);
+}
+
+/*
+ * BRecvPost: Start receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls. 
+ */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[])
+{
+  int offsetce;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Irecv(&cext[NUM_SPECIES], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1) {
+    offsetce = NUM_SPECIES*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&cext[offsetce], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe+1, 0, comm, &request[3]);
+  }
+  
+}
+
+/*
+ * BRecvWait: Finish receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls.  
+ */
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[])
+{
+  int i;
+  int ly, dsizex2, offsetce, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2*NUM_SPECIES;
+  
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+1)*dsizex2;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufleft[offsetbuf+i];
+    }
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+2)*dsizex2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/*
+ * BSend: Send boundary data to neighboring PEs.
+ * This routine sends components of cc from internal subgrid boundaries
+ * to the appropriate neighbor PEs.                                      
+ */
+ 
+static void BSend(MPI_Comm comm, int my_pe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype cdata[])
+{
+  int i;
+  int ly, offsetc, offsetbuf;
+  realtype bufleft[NUM_SPECIES*MYSUB], bufright[NUM_SPECIES*MYSUB];
+
+  /* If jysub > 0, send data from bottom x-line of cc. */
+
+  if (jysub != 0)
+    MPI_Send(&cdata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If jysub < NPEY-1, send data from top x-line of cc. */
+
+  if (jysub != NPEY-1) {
+    offsetc = (MYSUB-1)*dsizex;
+    MPI_Send(&cdata[offsetc], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If ixsub > 0, send data from left y-line of cc (via bufleft). */
+
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = ly*dsizex;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufleft[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+  
+  /* If ixsub < NPEX-1, send data from right y-line of cc (via bufright). */
+  
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = offsetbuf*MXSUB + (MXSUB-1)*NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufright[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+ 
+/* Define lines are for ease of readability in the following functions. */
+
+#define mxsub      (webdata->mxsub)
+#define mysub      (webdata->mysub)
+#define npex       (webdata->npex)
+#define npey       (webdata->npey)
+#define ixsub      (webdata->ixsub)
+#define jysub      (webdata->jysub)
+#define nsmxsub    (webdata->nsmxsub)
+#define nsmxsub2   (webdata->nsmxsub2)
+#define np         (webdata->np)
+#define dx         (webdata->dx)
+#define dy         (webdata->dy)
+#define cox        (webdata->cox)
+#define coy        (webdata->coy)
+#define rhs        (webdata->rhs)
+#define cext       (webdata->cext)
+#define rates      (webdata->rates)
+#define ns         (webdata->ns)
+#define acoef      (webdata->acoef)
+#define bcoef      (webdata->bcoef)
+
+/*
+ * reslocal: Compute res = F(t,cc,cp).
+ * This routine assumes that all inter-processor communication of data
+ * needed to calculate F has already been done.  Components at interior
+ * subgrid boundaries are assumed to be in the work array cext.
+ * The local portion of the cc vector is first copied into cext.
+ * The exterior Neumann boundary conditions are explicitly handled here
+ * by copying data from the first interior mesh line to the ghost cell
+ * locations in cext.  Then the reaction and diffusion terms are
+ * evaluated in terms of the cext array, and the residuals are formed.
+ * The reaction terms are saved separately in the vector webdata->rates
+ * for use by the preconditioner setup routine.                          
+ */
+
+static int reslocal(long int Nlocal, realtype tt, 
+                    N_Vector cc, N_Vector cp, N_Vector rr,
+                    void *user_data)
+{
+  realtype *cdata, *ratesxy, *cpxy, *resxy,
+    xx, yy, dcyli, dcyui, dcxli, dcxui;
+  int ix, jy, is, i, locc, ylocce, locce;
+  UserData webdata;
+  
+  webdata = (UserData) user_data;
+  
+  /* Get data pointers, subgrid data, array sizes, work array cext. */
+  
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Copy local segment of cc vector into the working extended array cext. */
+  
+  locc = 0;
+  locce = nsmxsub2 + NUM_SPECIES;
+  for (jy = 0; jy < mysub; jy++) {
+    for (i = 0; i < nsmxsub; i++) cext[locce+i] = cdata[locc+i];
+    locc = locc + nsmxsub;
+    locce = locce + nsmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+     a boundary PE, copy data from the first interior mesh line of cc to cext. */
+  
+  /* If jysub = 0, copy x-line 2 of cc to cext. */
+  if (jysub == 0)
+    { for (i = 0; i < nsmxsub; i++) cext[NUM_SPECIES+i] = cdata[nsmxsub+i]; }
+  
+  /* If jysub = npey-1, copy x-line mysub-1 of cc to cext. */
+  if (jysub == npey-1) {
+    locc = (mysub-2)*nsmxsub;
+    locce = (mysub+1)*nsmxsub2 + NUM_SPECIES;
+    for (i = 0; i < nsmxsub; i++) cext[locce+i] = cdata[locc+i];
+  }
+  
+  /* If ixsub = 0, copy y-line 2 of cc to cext. */
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc = jy*nsmxsub + NUM_SPECIES;
+      locce = (jy+1)*nsmxsub2;
+      for (i = 0; i < NUM_SPECIES; i++) cext[locce+i] = cdata[locc+i];
+    }
+  }
+  
+  /* If ixsub = npex-1, copy y-line mxsub-1 of cc to cext. */
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc  = (jy+1)*nsmxsub - 2*NUM_SPECIES;
+      locce = (jy+2)*nsmxsub2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++) cext[locce+i] = cdata[locc+i];
+    }
+  }
+
+  /* Loop over all grid points, setting local array rates to right-hand sides.
+     Then set rr values appropriately for prey/predator components of F. */
+
+  for (jy = 0; jy < mysub; jy++) {
+    ylocce = (jy+1)*nsmxsub2;
+    yy     = (jy+jysub*mysub)*dy;
+
+    for (ix = 0; ix < mxsub; ix++) {
+      locce = ylocce + (ix+1)*NUM_SPECIES;
+      xx = (ix + ixsub*mxsub)*dx;
+
+      ratesxy = IJ_Vptr(rates,ix,jy);
+      WebRates(xx, yy, &(cext[locce]), ratesxy, webdata);
+
+      resxy = IJ_Vptr(rr,ix,jy); 
+      cpxy = IJ_Vptr(cp,ix,jy); 
+      
+      for (is = 0; is < NUM_SPECIES; is++) {
+        dcyli = cext[locce+is]          - cext[locce+is-nsmxsub2];
+        dcyui = cext[locce+is+nsmxsub2] - cext[locce+is];
+
+        dcxli = cext[locce+is]             - cext[locce+is-NUM_SPECIES];
+        dcxui = cext[locce+is+NUM_SPECIES] - cext[locce+is];
+
+        rhs[is] = cox[is]*(dcxui-dcxli) + coy[is]*(dcyui-dcyli) + ratesxy[is];
+
+        if (is < np) resxy[is] = cpxy[is] - rhs[is];
+        else         resxy[is] =          - rhs[is];
+
+      }
+    }
+  }
+  
+  return(0);
+}
+
+/* 
+ * WebRates: Evaluate reaction rates at a given spatial point.   
+ * At a given (x,y), evaluate the array of ns reaction terms R.          
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+  
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+  
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(int size, realtype *x1, realtype *x2)
+{
+  int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; 
+  xx2 = x2;
+  for (i = 0; i < size; i++) 
+    temp += (*xx1++) * (*xx2++);
+
+  return(temp);
+}
+
diff --git a/examples/idas/parallel/idasFoodWeb_kry_bbd_p.out b/examples/idas/parallel/idasFoodWeb_kry_bbd_p.out
new file mode 100644
index 0000000..da6066b
--- /dev/null
+++ b/examples/idas/parallel/idasFoodWeb_kry_bbd_p.out
@@ -0,0 +1,51 @@
+idasFoodWeb_kry_bbd_p: Predator-prey DAE parallel example problem for IDA 
+
+Number of species ns: 2     Mesh dimensions: 20 x 20     Total system size: 800
+Subgrid dimensions: 10 x 10     Processor array: 2 x 2
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDASPGMR     Max. Krylov dimension maxl: 16
+Preconditioner: band-block-diagonal (IDABBDPRE), with parameters
+     mudq = 20,  mldq = 20,  mukeep = 2,  mlkeep = 2
+CalcIC called to correct initial predator concentrations 
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  33  4   9.7404e-05
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6189e+02   1.9735e+02   | 123  3   1.9481e-04
+           1.6189e+06   1.9735e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 197  1   4.0396e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 200  1   3.2316e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 200  1   3.2316e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 201  1   6.4633e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+
+Final statistics: 
+
+Number of steps                    = 201
+Number of residual evaluations     = 1110
+Number of nonlinear iterations     = 245
+Number of error test failures      = 0
+Number of nonlinear conv. failures = 0
+
+Number of linear iterations        = 863
+Number of linear conv. failures    = 0
+
+Number of preconditioner setups    = 26
+Number of preconditioner solves    = 1110
+Number of local residual evals.    = 1092
diff --git a/examples/idas/parallel/idasFoodWeb_kry_p.c b/examples/idas/parallel/idasFoodWeb_kry_p.c
new file mode 100644
index 0000000..b8a962e
--- /dev/null
+++ b/examples/idas/parallel/idasFoodWeb_kry_p.c
@@ -0,0 +1,1231 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example program for IDA: Food web, parallel, GMRES, user
+ * preconditioner.
+ *
+ * This example program for IDAS uses IDASPGMR as the linear solver.
+ * It is written for a parallel computer system and uses a
+ * block-diagonal preconditioner (setup and solve routines) for the
+ * IDASPGMR package. It was originally run on a Sun SPARC cluster
+ * and used MPICH.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c   +  c  )  +  R  (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *   a(i,i) = -AA  (all i)
+ *   a(i,j) = -GG  (i <= np , j >  np)
+ *   a(i,j) =  EE  (i >  np,  j <= np)
+ *   all other a(i,j) = 0
+ *   b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y))  (i <= np)
+ *   b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y))  (i  > np)
+ *   d(i) = DPREY  (i <= np)
+ *   d(i) = DPRED  (i > np)
+ *
+ * Note: The above equations are written in 1-based indices,
+ * whereas the code has 0-based indices, being written in C.
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative  =  0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh, and so the system size Neq is the product
+ * MX * MY * NUM_SPECIES. The system is actually implemented on
+ * submeshes, processor by processor, with an MXSUB by MYSUB mesh
+ * on each of NPEX * NPEY processors.
+ *
+ * The DAE system is solved by IDAS using the IDASPGMR linear
+ * solver, which uses the preconditioned GMRES iterative method to
+ * solve linear systems. The precondtioner supplied to IDASPGMR is
+ * the block-diagonal part of the Jacobian with ns by ns blocks
+ * arising from the reaction terms only. Output is printed at
+ * t = 0, .001, .01, .1, .4, .7, 1.
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems,
+ *     Journal of Applied Mathematics and Computation, Vol. 31
+ *     (May 1989), pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+/* Problem Constants. */
+
+#define NPREY       1        /* Number of prey (= number of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898)   /* pi */ 
+#define FOURPI      (RCONST(4.0)*PI)          /* 4 pi */
+
+#define MXSUB       10    /* Number of x mesh points per processor subgrid */
+#define MYSUB       10    /* Number of y mesh points per processor subgrid */
+#define NPEX        2     /* Number of subgrids in the x direction */
+#define NPEY        2     /* Number of subgrids in the y direction */
+#define MX          (MXSUB*NPEX)      /* MX = number of x mesh points */
+#define MY          (MYSUB*NPEY)      /* MY = number of y mesh points */
+#define NSMXSUB     (NUM_SPECIES * MXSUB)
+#define NEQ         (NUM_SPECIES*MX*MY) /* Number of equations in system */
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns. */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns. */
+#define AX          RCONST(1.0)    /* Total range of x variable */
+#define AY          RCONST(1.0)    /* Total range of y variable */
+#define RTOL        RCONST(1.e-5)  /*  rtol tolerance */
+#define ATOL        RCONST(1.e-5)  /*  atol tolerance */
+#define ZERO        RCONST(0.)     /* 0. */
+#define ONE         RCONST(1.0)    /* 1. */
+#define NOUT        6  
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values */
+#define TADD        RCONST(0.3)    /* Increment for tout values */
+
+
+/* User-defined vector accessor macro IJ_Vptr. */
+
+/* IJ_Vptr is defined in order to express the underlying 3-d structure of the 
+   dependent variable vector from its underlying 1-d storage (an N_Vector).
+   IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+   species index is = 0, x-index ix = i, and y-index jy = j.                */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_P(vv, (i)*NUM_SPECIES + (j)*NSMXSUB ))
+
+/* Type: UserData.  Contains problem constants, preconditioner data, etc. */
+
+typedef struct {
+  long int ns;
+  int np, thispe, npes, ixsub, jysub, npex, npey;
+  int mxsub, mysub, nsmxsub, nsmxsub2;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES],
+    rhs[NUM_SPECIES], cext[(MXSUB+2)*(MYSUB+2)*NUM_SPECIES];
+  MPI_Comm comm;
+  N_Vector rates;
+  realtype **PP[MXSUB][MYSUB];
+  long int *pivot[MXSUB][MYSUB];
+  N_Vector ewt;
+  void *ida_mem;
+} *UserData;
+
+
+/* Prototypes for user-supplied and supporting functions. */
+
+static int resweb(realtype time, 
+                  N_Vector cc, N_Vector cp, N_Vector resval, 
+                  void *user_data);
+
+static int Precondbd(realtype tt, 
+                     N_Vector cc, N_Vector cp, N_Vector rr, 
+                     realtype cj, void *user_data,
+                     N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+static int PSolvebd(realtype tt, 
+                    N_Vector cc, N_Vector cp, N_Vector rr, 
+                    N_Vector rvec, N_Vector zvec,
+                    realtype cj, realtype delta, void *user_data, 
+                    N_Vector tempv);
+
+static int rescomm(N_Vector cc, N_Vector cp, void *user_data);
+
+static void BSend(MPI_Comm comm, int thispe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype carray[]);
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[]);
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[]);
+
+static int reslocal(realtype tt, N_Vector cc, N_Vector cp, N_Vector res, 
+                    void *user_data);
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+
+static realtype dotprod(int size, realtype *x1, realtype *x2);
+
+/* Prototypes for private Helper Functions. */
+
+static UserData AllocUserData(MPI_Comm comm, long int local_N, 
+                              long int SystemSize);
+
+static void InitUserData(UserData webdata, int thispe, int npes, 
+                         MPI_Comm comm);
+
+static void FreeUserData(UserData webdata);
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               N_Vector scrtch, UserData webdata);
+
+static void PrintHeader(long int SystemSize, int maxl, 
+                        realtype rtol, realtype atol);
+
+static void PrintOutput(void *mem, N_Vector cc, realtype time,
+                        UserData webdata, MPI_Comm comm);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData webdata;
+  long int SystemSize, local_N;
+  realtype rtol, atol, t0, tout, tret;
+  N_Vector cc, cp, res, id;
+  int thispe, npes, maxl, iout, flag;
+
+  cc = cp = res = id = NULL;
+  webdata = NULL;
+  mem = NULL;
+
+  /* Set communicator, and get processor number and total number of PE's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_rank(comm, &thispe);
+  MPI_Comm_size(comm, &npes);
+
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d not equal to NPEX*NPEY = %d\n",
+	      npes, NPEX*NPEY);
+    MPI_Finalize();
+    return(1); 
+  }
+
+  /* Set local length (local_N) and global length (SystemSize). */
+
+  local_N = MXSUB*MYSUB*NUM_SPECIES;
+  SystemSize = NEQ;
+
+  /* Set up user data block webdata. */
+
+  webdata = AllocUserData(comm, local_N, SystemSize);
+  if (check_flag((void *)webdata, "AllocUserData", 0, thispe)) MPI_Abort(comm, 1);
+
+  InitUserData(webdata, thispe, npes, comm);
+  
+  /* Create needed vectors, and load initial values.
+     The vector res is used temporarily only.        */
+
+  cc  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if (check_flag((void *)cc, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  cp  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if (check_flag((void *)cp, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  res = N_VNew_Parallel(comm, local_N, SystemSize);
+  if (check_flag((void *)res, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  id  = N_VNew_Parallel(comm, local_N, SystemSize);
+  if (check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+  
+  SetInitialProfiles(cc, cp, id, res, webdata);
+  
+  N_VDestroy(res);
+
+  /* Set remaining inputs to IDAMalloc. */
+
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+  
+  /* Call IDACreate and IDAMalloc to initialize IDA.
+     A pointer to IDA problem memory is returned and stored in idamem. */
+
+  mem = IDACreate();
+  if (check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  flag = IDASetUserData(mem, webdata);
+  if (check_flag(&flag, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  flag = IDASetId(mem, id);
+  if (check_flag(&flag, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  flag = IDAInit(mem, resweb, t0, cc, cp);
+  if (check_flag(&flag, "IDAinit", 1, thispe)) MPI_Abort(comm, 1);
+
+  flag = IDASStolerances(mem, rtol, atol);
+  if (check_flag(&flag, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  webdata->ida_mem = mem;
+
+  /* Call IDASpgmr to specify the IDA linear solver IDASPGMR and specify
+     the preconditioner routines supplied (Precondbd and PSolvebd).
+     maxl (max. Krylov subspace dim.) is set to 16. */
+
+  maxl = 16;
+  flag = IDASpgmr(mem, maxl);
+  if (check_flag(&flag, "IDASpgmr", 1, thispe)) 
+    MPI_Abort(comm, 1);
+
+  flag = IDASpilsSetPreconditioner(mem, Precondbd, PSolvebd);
+  if (check_flag(&flag, "IDASpilsSetPreconditioner", 1, thispe)) 
+    MPI_Abort(comm, 1);
+  
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+
+  tout = RCONST(0.001);
+  flag = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if (check_flag(&flag, "IDACalcIC", 1, thispe)) 
+    MPI_Abort(comm, 1);
+
+  /* On PE 0, print heading, basic parameters, initial values. */
+
+  if (thispe == 0) PrintHeader(SystemSize, maxl, rtol, atol);
+  PrintOutput(mem, cc, t0, webdata, comm);
+  
+  /* Loop over iout, call IDASolve (normal mode), print selected output. */
+
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    flag = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if (check_flag(&flag, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(mem, cc, tret, webdata, comm);
+    
+    if (iout < 3) tout *= TMULT; 
+    else          tout += TADD;
+    
+  }
+  
+  /* On PE 0, print final set of statistics. */
+  if (thispe == 0) PrintFinalStats(mem);
+
+  /* Free memory. */
+
+  N_VDestroy_Parallel(cc);
+  N_VDestroy_Parallel(cp);
+  N_VDestroy_Parallel(id);
+
+  IDAFree(&mem);
+
+  FreeUserData(webdata);
+
+  MPI_Finalize();
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * AllocUserData: Allocate memory for data structure of type UserData.   
+ */
+
+static UserData AllocUserData(MPI_Comm comm, long int local_N, long int SystemSize)
+{
+  int ix, jy;
+  UserData webdata;
+  
+  webdata = (UserData) malloc(sizeof *webdata);
+  
+  webdata->rates = N_VNew_Parallel(comm, local_N, SystemSize);
+  
+  for (ix = 0; ix < MXSUB; ix++) {
+    for (jy = 0; jy < MYSUB; jy++) {
+      (webdata->PP)[ix][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (webdata->pivot)[ix][jy] = newLintArray(NUM_SPECIES);
+    }
+  }
+  
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  webdata->ewt = N_VNew_Parallel(comm, local_N, SystemSize);
+  return(webdata);
+  
+}
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata, int thispe, int npes, 
+                         MPI_Comm comm)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2, **acoef, *bcoef, *cox, *coy;
+  
+  webdata->jysub = thispe / NPEX;
+  webdata->ixsub = thispe - (webdata->jysub)*NPEX;
+  webdata->mxsub = MXSUB;
+  webdata->mysub = MYSUB;
+  webdata->npex = NPEX;
+  webdata->npey = NPEY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->thispe = thispe;
+  webdata->npes   = npes;
+  webdata->nsmxsub = MXSUB * NUM_SPECIES;
+  webdata->nsmxsub2 = (MXSUB+2)*NUM_SPECIES;
+  webdata->comm = comm;
+
+  /* Set up the coefficients a and b plus others found in the equations. */
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); dy2 = (webdata->dy)*(webdata->dy);
+
+  acoef = webdata->acoef;
+  bcoef = webdata->bcoef;
+  cox = webdata->cox;
+  coy = webdata->coy;
+
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+
+}
+
+/*
+ * FreeUserData: Free webdata memory.                                    
+ */
+
+static void FreeUserData(UserData webdata)
+{
+  int ix, jy;
+
+  for (ix = 0; ix < MXSUB; ix++) {
+    for (jy = 0; jy < MYSUB; jy++) {
+      destroyMat((webdata->PP)[ix][jy]);
+      destroyArray((webdata->pivot)[ix][jy]);
+    }
+  }
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_Parallel(webdata->rates);
+  N_VDestroy_Parallel(webdata->ewt);
+  free(webdata);
+
+}
+
+/*
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               N_Vector res, UserData webdata)
+{
+  int ixsub, jysub, mxsub, mysub, nsmxsub, np, ix, jy, is;
+  realtype *cxy, *idxy, *cpxy, dx, dy, xx, yy, xyfactor;
+  
+  ixsub = webdata->ixsub;
+  jysub = webdata->jysub;
+  mxsub = webdata->mxsub;
+  mysub = webdata->mxsub;
+  nsmxsub = webdata->nsmxsub;
+  dx = webdata->dx;
+  dy = webdata->dy;
+  np = webdata->np;
+  
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < mysub; jy++) {
+    yy = (jy + jysub*mysub) * dy;
+    for (ix = 0; ix < mxsub; ix++) {
+      xx = (ix + ixsub*mxsub) * dx;
+      xyfactor = RCONST(16.0)*xx*(ONE - xx)*yy*(ONE - yy);
+      xyfactor *= xyfactor;
+      
+      cxy = IJ_Vptr(cc,ix,jy); 
+      idxy = IJ_Vptr(id,ix,jy); 
+      for (is = 0; is < NUM_SPECIES; is++) {
+	if (is < np) { cxy[is] = RCONST(10.0) + (realtype)(is+1)*xyfactor; idxy[is] = ONE; }
+        else { cxy[is] = 1.0e5; idxy[is] = ZERO; }
+      }
+    }
+  }
+  
+  /* Set c' for the prey by calling the residual function with cp = 0. */
+  N_VConst(ZERO, cp);
+  resweb(ZERO, cc, cp, res, webdata);
+  N_VScale(-ONE, res, cp);
+  
+  /* Set c' for predators to 0. */
+  for (jy = 0; jy < mysub; jy++) {
+    for (ix = 0; ix < mxsub; ix++) {
+      cpxy = IJ_Vptr(cp,ix,jy); 
+      for (is = np; is < NUM_SPECIES; is++) cpxy[is] = ZERO;
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(long int SystemSize, int maxl, 
+                        realtype rtol, realtype atol)
+{
+  printf("\nidasFoodWeb_kry_p: Predator-prey DAE parallel example problem for IDA \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     Total system size: %ld\n",SystemSize);
+  printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+  printf("     Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDASPGMR     Max. Krylov dimension maxl: %d\n", maxl);
+  printf("Preconditioner: block diagonal, block size ns,"); 
+  printf(" via difference quotients\n");
+  printf("CalcIC called to correct initial predator concentrations \n\n");
+
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");    
+}
+
+/*
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of c1 and c2
+ * are printed for the bottom left and top right grid points only.
+ * (NOTE: This routine is specific to the case NUM_SPECIES = 2.)         
+ */
+
+static void PrintOutput(void *mem, N_Vector cc, realtype tt,
+                        UserData webdata, MPI_Comm comm)
+{
+  MPI_Status status;
+  realtype *cdata, clast[2], hused;
+  long int nst;
+  int i, kused, flag, thispe, npelast, ilast;;
+
+  thispe = webdata->thispe; 
+  npelast = webdata->npes - 1;
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Send conc. at top right mesh point from PE npes-1 to PE 0. */
+  if (thispe == npelast) {
+    ilast = NUM_SPECIES*MXSUB*MYSUB - 2;
+    if (npelast != 0)
+      MPI_Send(&cdata[ilast], 2, PVEC_REAL_MPI_TYPE, 0, 0, comm);
+    else { clast[0] = cdata[ilast]; clast[1] = cdata[ilast+1]; }
+  }
+  
+  /* On PE 0, receive conc. at top right from PE npes - 1.
+     Then print performance data and sampled solution values. */
+  
+  if (thispe == 0) {
+    
+    if (npelast != 0)
+      MPI_Recv(&clast[0], 2, PVEC_REAL_MPI_TYPE, npelast, 0, comm, &status);
+    
+    flag = IDAGetLastOrder(mem, &kused);
+    check_flag(&flag, "IDAGetLastOrder", 1, thispe);
+    flag = IDAGetNumSteps(mem, &nst);
+    check_flag(&flag, "IDAGetNumSteps", 1, thispe);
+    flag = IDAGetLastStep(mem, &hused);
+    check_flag(&flag, "IDAGetLastStep", 1, thispe);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4Le %12.4Le   |\n",cdata[i],clast[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#else
+    printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         tt, cdata[0], clast[0], nst, kused, hused);
+    for (i=1;i<NUM_SPECIES;i++)
+      printf("         %12.4e %12.4e   |\n",cdata[i],clast[i]);
+#endif
+    printf("\n");
+
+  }
+}
+
+/*
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int nst, nre, nreLS, netf, ncfn, nni, ncfl, nli, npe, nps;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1, 0);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1, 0);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1, 0);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1, 0);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1, 0);
+
+  flag = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&flag, "IDASpilsGetNumConvFails", 1, 0);
+  flag = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&flag, "IDASpilsGetNumLinIters", 1, 0);
+  flag = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&flag, "IDASpilsGetNumPrecEvals", 1, 0);
+  flag = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&flag, "IDASpilsGetNumPrecSolves", 1, 0);
+  flag = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDASpilsGetNumResEvals", 1, 0);
+
+  printf("-----------------------------------------------------------\n");
+  printf("\nFinal statistics: \n\n");
+
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n\n", ncfn);
+
+  printf("Number of linear iterations        = %ld\n", nli);
+  printf("Number of linear conv. failures    = %ld\n\n", ncfl);
+
+  printf("Number of preconditioner setups    = %ld\n", npe);
+  printf("Number of preconditioner solves    = %ld\n", nps);
+
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", 
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA & SUPPORTING FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resweb: System residual function for predator-prey system.
+ * To compute the residual function F, this routine calls:
+ *    rescomm, for needed communication, and then
+ *    reslocal, for computation of the residuals on this processor.      
+ */
+
+static int resweb(realtype tt, N_Vector cc, N_Vector cp, 
+                  N_Vector res,  void *user_data)
+{
+  int flag;
+  UserData webdata;
+  
+  webdata = (UserData)user_data;
+  
+  /* Call rescomm to do inter-processor communication. */
+  flag = rescomm(cc, cp, webdata);
+  
+  /* Call reslocal to calculate the local portion of residual vector. */
+  flag = reslocal(tt, cc, cp, res, webdata);
+
+  return(0);
+ 
+}
+
+/*
+ * rescomm: Communication routine in support of resweb.
+ * This routine performs all inter-processor communication of components
+ * of the cc vector needed to calculate F, namely the components at all
+ * interior subgrid boundaries (ghost cell data).  It loads this data
+ * into a work array cext (the local portion of c, extended).
+ * The message-passing uses blocking sends, non-blocking receives,
+ * and receive-waiting, in routines BRecvPost, BSend, BRecvWait.         
+ */
+
+static int rescomm(N_Vector cc, N_Vector cp, void *user_data)
+{
+
+  UserData webdata;
+  realtype *cdata, *cext, buffer[2*NUM_SPECIES*MYSUB];
+  int thispe, ixsub, jysub, nsmxsub, nsmysub;
+  MPI_Comm comm;
+  MPI_Request request[4];
+  
+  webdata = (UserData) user_data;
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Get comm, thispe, subgrid indices, data sizes, extended array cext. */
+  comm = webdata->comm;     thispe = webdata->thispe;
+  ixsub = webdata->ixsub;   jysub = webdata->jysub;
+  cext = webdata->cext;
+  nsmxsub = webdata->nsmxsub; nsmysub = (webdata->ns)*(webdata->mysub);
+  
+  /* Start receiving boundary data from neighboring PEs. */
+  BRecvPost(comm, request, thispe, ixsub, jysub, nsmxsub, nsmysub, 
+            cext, buffer);
+  
+  /* Send data from boundary of local grid to neighboring PEs. */
+  BSend(comm, thispe, ixsub, jysub, nsmxsub, nsmysub, cdata);
+  
+  /* Finish receiving boundary data from neighboring PEs. */
+  BRecvWait(request, ixsub, jysub, nsmxsub, cext, buffer);
+
+  return(0);
+
+}
+
+/*
+ * BSend: Send boundary data to neighboring PEs.
+ * This routine sends components of cc from internal subgrid boundaries
+ * to the appropriate neighbor PEs.                                      
+ */
+ 
+static void BSend(MPI_Comm comm, int my_pe, int ixsub, int jysub,
+                  int dsizex, int dsizey, realtype cdata[])
+{
+  int i;
+  int ly, offsetc, offsetbuf;
+  realtype bufleft[NUM_SPECIES*MYSUB], bufright[NUM_SPECIES*MYSUB];
+  
+  /* If jysub > 0, send data from bottom x-line of cc. */
+  if (jysub != 0)
+    MPI_Send(&cdata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+  
+  /* If jysub < NPEY-1, send data from top x-line of cc. */
+  if (jysub != NPEY-1) {
+    offsetc = (MYSUB-1)*dsizex;
+    MPI_Send(&cdata[offsetc], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If ixsub > 0, send data from left y-line of cc (via bufleft). */
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = ly*dsizex;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufleft[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If ixsub < NPEX-1, send data from right y-line of cc (via bufright). */
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = offsetbuf*MXSUB + (MXSUB-1)*NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufright[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+
+}
+
+/*
+ * BRecvPost: Start receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls.  
+ */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int ixsub, int jysub,
+                      int dsizex, int dsizey,
+                      realtype cext[], realtype buffer[])
+{
+  int offsetce;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Irecv(&cext[NUM_SPECIES], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1) {
+    offsetce = NUM_SPECIES*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&cext[offsetce], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe+1, 0, comm, &request[3]);
+  }
+  
+}
+
+/*
+ * BRecvWait: Finish receiving boundary data from neighboring PEs.
+ * (1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ * (2) request should have 4 entries, and is also passed in both calls.  
+ */
+
+static void BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                      int dsizex, realtype cext[], realtype buffer[])
+{
+  int i;
+  int ly, dsizex2, offsetce, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  MPI_Status status;
+
+  dsizex2 = dsizex + 2*NUM_SPECIES;
+
+  /* If jysub > 0, receive data for bottom x-line of cext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of cext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If ixsub > 0, receive data for left y-line of cext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+1)*dsizex2;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufleft[offsetbuf+i];
+    }
+  }
+
+  /* If ixsub < NPEX-1, receive data for right y-line of cext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+    
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+2)*dsizex2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufright[offsetbuf+i];
+    }
+  }
+}
+
+/* Define lines are for ease of readability in the following functions. */
+
+#define mxsub      (webdata->mxsub)
+#define mysub      (webdata->mysub)
+#define npex       (webdata->npex)
+#define npey       (webdata->npey)
+#define ixsub      (webdata->ixsub)
+#define jysub      (webdata->jysub)
+#define nsmxsub    (webdata->nsmxsub)
+#define nsmxsub2   (webdata->nsmxsub2)
+#define np         (webdata->np)
+#define dx         (webdata->dx)
+#define dy         (webdata->dy)
+#define cox        (webdata->cox)
+#define coy        (webdata->coy)
+#define rhs        (webdata->rhs)
+#define cext       (webdata->cext)
+#define rates      (webdata->rates)
+#define ns         (webdata->ns)
+#define acoef      (webdata->acoef)
+#define bcoef      (webdata->bcoef)
+
+/* 
+ * reslocal: Compute res = F(t,cc,cp).
+ * This routine assumes that all inter-processor communication of data
+ * needed to calculate F has already been done.  Components at interior
+ * subgrid boundaries are assumed to be in the work array cext.
+ * The local portion of the cc vector is first copied into cext.
+ * The exterior Neumann boundary conditions are explicitly handled here
+ * by copying data from the first interior mesh line to the ghost cell
+ * locations in cext.  Then the reaction and diffusion terms are
+ * evaluated in terms of the cext array, and the residuals are formed.
+ * The reaction terms are saved separately in the vector webdata->rates
+ * for use by the preconditioner setup routine.                          
+ */
+
+static int reslocal(realtype tt, N_Vector cc, N_Vector cp, N_Vector res,
+                    void *user_data)
+{
+  realtype *cdata, *ratesxy, *cpxy, *resxy,
+    xx, yy, dcyli, dcyui, dcxli, dcxui;
+  int ix, jy, is, i, locc, ylocce, locce;
+  UserData webdata;
+  
+  webdata = (UserData) user_data;
+  
+  /* Get data pointers, subgrid data, array sizes, work array cext. */
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Copy local segment of cc vector into the working extended array cext. */
+  locc = 0;
+  locce = nsmxsub2 + NUM_SPECIES;
+  for (jy = 0; jy < mysub; jy++) {
+    for (i = 0; i < nsmxsub; i++) cext[locce+i] = cdata[locc+i];
+    locc = locc + nsmxsub;
+    locce = locce + nsmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is
+  a boundary PE, copy data from the first interior mesh line of cc to cext. */
+
+  /* If jysub = 0, copy x-line 2 of cc to cext. */
+  if (jysub == 0)
+    { for (i = 0; i < nsmxsub; i++) cext[NUM_SPECIES+i] = cdata[nsmxsub+i]; }
+  
+  /* If jysub = npey-1, copy x-line mysub-1 of cc to cext. */
+  if (jysub == npey-1) {
+    locc = (mysub-2)*nsmxsub;
+    locce = (mysub+1)*nsmxsub2 + NUM_SPECIES;
+    for (i = 0; i < nsmxsub; i++) cext[locce+i] = cdata[locc+i];
+  }
+  
+  /* If ixsub = 0, copy y-line 2 of cc to cext. */
+  if (ixsub == 0) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc = jy*nsmxsub + NUM_SPECIES;
+      locce = (jy+1)*nsmxsub2;
+      for (i = 0; i < NUM_SPECIES; i++) cext[locce+i] = cdata[locc+i];
+    }
+  }
+  
+  /* If ixsub = npex-1, copy y-line mxsub-1 of cc to cext. */
+  if (ixsub == npex-1) {
+    for (jy = 0; jy < mysub; jy++) {
+      locc  = (jy+1)*nsmxsub - 2*NUM_SPECIES;
+      locce = (jy+2)*nsmxsub2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++) cext[locce+i] = cdata[locc+i];
+    }
+  }
+
+  /* Loop over all grid points, setting local array rates to right-hand sides.
+     Then set res values appropriately for prey/predator components of F. */
+  for (jy = 0; jy < mysub; jy++) {
+    ylocce = (jy+1)*nsmxsub2;
+    yy     = (jy+jysub*mysub)*dy;
+
+    for (ix = 0; ix < mxsub; ix++) {
+      locce = ylocce + (ix+1)*NUM_SPECIES;
+      xx = (ix + ixsub*mxsub)*dx;
+      
+      ratesxy = IJ_Vptr(rates,ix,jy);
+      WebRates(xx, yy, &(cext[locce]), ratesxy, webdata);
+
+      resxy = IJ_Vptr(res,ix,jy); 
+      cpxy = IJ_Vptr(cp,ix,jy); 
+      
+      for (is = 0; is < NUM_SPECIES; is++) {
+        dcyli = cext[locce+is]          - cext[locce+is-nsmxsub2];
+        dcyui = cext[locce+is+nsmxsub2] - cext[locce+is];
+        
+        dcxli = cext[locce+is]             - cext[locce+is-NUM_SPECIES];
+        dcxui = cext[locce+is+NUM_SPECIES] - cext[locce+is];
+        
+        rhs[is] = cox[is]*(dcxui-dcxli) + coy[is]*(dcyui-dcyli) + ratesxy[is];
+
+        if (is < np) resxy[is] = cpxy[is] - rhs[is];
+        else         resxy[is] =          - rhs[is];
+        
+      } /* End of is (species) loop. */
+    } /* End of ix loop. */
+  } /* End of jy loop. */
+  
+  return(0);
+  
+}
+
+/*
+ * WebRates: Evaluate reaction rates at a given spatial point.
+ * At a given (x,y), evaluate the array of ns reaction terms R. 
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(int size, realtype *x1, realtype *x2)
+{
+  int i;
+  realtype *xx1, *xx2, temp = ZERO;
+
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+  return(temp);
+
+}
+
+/*
+ * Preconbd: Preconditioner setup routine.
+ * This routine generates and preprocesses the block-diagonal
+ * preconditoner PP.  At each spatial point, a block of PP is computed
+ * by way of difference quotients on the reaction rates R.
+ * The base value of R are taken from webdata->rates, as set by webres.
+ * Each block is LU-factored, for later solution of the linear systems.  
+ */
+
+static int Precondbd(realtype tt, N_Vector cc,
+                     N_Vector cp, N_Vector rr, 
+                     realtype cj, void *user_data,
+                     N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  int flag, thispe;
+  realtype uround;
+  realtype xx, yy, *cxy, *ewtxy, cctemp, **Pxy, *ratesxy, *Pxycol, *cpxy;
+  realtype inc, sqru, fac, perturb_rates[NUM_SPECIES];
+  int is, js, ix, jy, ret;
+  UserData webdata;
+  void *mem;
+  N_Vector ewt;
+  realtype hh;
+
+  webdata = (UserData)user_data;
+  uround = UNIT_ROUNDOFF;
+  sqru = SUNRsqrt(uround);
+  thispe = webdata->thispe;
+
+  mem = webdata->ida_mem;
+  ewt = webdata->ewt;
+  flag = IDAGetErrWeights(mem, ewt);
+  check_flag(&flag, "IDAGetErrWeights", 1, thispe);
+  flag = IDAGetCurrentStep(mem, &hh);
+  check_flag(&flag, "IDAGetCurrentStep", 1, thispe);
+
+  for (jy = 0; jy < mysub; jy++) {
+    yy = (jy + jysub*mysub)*dy;
+
+    for (ix = 0; ix < mxsub; ix++) {
+      xx = (ix+ ixsub*mxsub)*dx;
+      Pxy = (webdata->PP)[ix][jy];
+      cxy = IJ_Vptr(cc,ix,jy); 
+      cpxy = IJ_Vptr(cp,ix,jy); 
+      ewtxy= IJ_Vptr(ewt,ix,jy);
+      ratesxy = IJ_Vptr(rates,ix,jy);
+
+      for (js = 0; js < ns; js++) {
+        inc = sqru*(SUNMAX(SUNRabs(cxy[js]), SUNMAX(hh*SUNRabs(cpxy[js]), ONE/ewtxy[js])));
+        cctemp = cxy[js];  /* Save the (js,ix,jy) element of cc. */
+        cxy[js] += inc;    /* Perturb the (js,ix,jy) element of cc. */
+        fac = -ONE/inc;
+        
+        WebRates(xx, yy, cxy, perturb_rates, webdata);
+        
+        Pxycol = Pxy[js];
+
+        for (is = 0; is < ns; is++)
+          Pxycol[is] = (perturb_rates[is] - ratesxy[is])*fac;
+        
+        if (js < np) Pxycol[js] += cj; /* Add partial with respect to cp. */
+        
+        cxy[js] = cctemp; /* Restore (js,ix,jy) element of cc. */
+        
+      } /* End of js loop. */
+      
+      /* Do LU decomposition of matrix block for grid point (ix,jy). */
+      ret = denseGETRF(Pxy, ns, ns, (webdata->pivot)[ix][jy]);
+      
+      if (ret != 0) return(1);
+      
+    } /* End of ix loop. */
+  } /* End of jy loop. */
+  
+  return(0);
+
+}
+
+/*
+ * PSolvebd: Preconditioner solve routine.
+ * This routine applies the LU factorization of the blocks of the
+ * preconditioner PP, to compute the solution of PP * zvec = rvec.       
+ */
+
+static int PSolvebd(realtype tt, N_Vector cc,
+                 N_Vector cp, N_Vector rr, 
+                 N_Vector rvec, N_Vector zvec,
+                 realtype cj, realtype delta,
+                 void *user_data, N_Vector tempv)
+{
+  realtype **Pxy, *zxy;
+  long int *pivot, ix, jy;
+  UserData webdata;
+
+  webdata = (UserData)user_data;
+  
+  N_VScale(ONE, rvec, zvec);
+  
+  /* Loop through subgrid and apply preconditioner factors at each point. */
+  for (ix = 0; ix < mxsub; ix++) {
+    for (jy = 0; jy < mysub; jy++) {
+
+      /* For grid point (ix,jy), do backsolve on local vector. 
+         zxy is the address of the local portion of zvec, and
+         Pxy is the address of the corresponding block of PP.  */
+      zxy = IJ_Vptr(zvec,ix,jy);
+      Pxy = (webdata->PP)[ix][jy];
+      pivot = (webdata->pivot)[ix][jy];
+      denseGETRS(Pxy, ns, pivot, zxy);
+      
+    } /* End of jy loop. */
+  } /* End of ix loop. */
+  
+  return(0);
+  
+}
diff --git a/examples/idas/parallel/idasFoodWeb_kry_p.out b/examples/idas/parallel/idasFoodWeb_kry_p.out
new file mode 100644
index 0000000..85cfd22
--- /dev/null
+++ b/examples/idas/parallel/idasFoodWeb_kry_p.out
@@ -0,0 +1,49 @@
+idasFoodWeb_kry_p: Predator-prey DAE parallel example problem for IDA 
+
+Number of species ns: 2     Mesh dimensions: 20 x 20     Total system size: 800
+Subgrid dimensions: 10 x 10     Processor array: 2 x 2
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDASPGMR     Max. Krylov dimension maxl: 16
+Preconditioner: block diagonal, block size ns, via difference quotients
+CalcIC called to correct initial predator concentrations 
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  33  4   9.7404e-05
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6189e+02   1.9735e+02   |  86  4   1.7533e-04
+           1.6189e+06   1.9735e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 162  1   4.0396e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 165  1   3.2316e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 166  1   6.4633e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 166  1   6.4633e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+
+Final statistics: 
+
+Number of steps                    = 166
+Number of residual evaluations     = 1257
+Number of nonlinear iterations     = 206
+Number of error test failures      = 0
+Number of nonlinear conv. failures = 0
+
+Number of linear iterations        = 1049
+Number of linear conv. failures    = 0
+
+Number of preconditioner setups    = 25
+Number of preconditioner solves    = 1257
diff --git a/examples/idas/parallel/idasHeat2D_FSA_kry_bbd_p.c b/examples/idas/parallel/idasHeat2D_FSA_kry_bbd_p.c
new file mode 100644
index 0000000..0ee8188
--- /dev/null
+++ b/examples/idas/parallel/idasHeat2D_FSA_kry_bbd_p.c
@@ -0,0 +1,969 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for IDAS: FSA for 2D heat equation, parallel,
+ * GMRES, IDABBDPRE.
+ *
+ * This example solves a discretized 2D heat equation problem and
+ * performs forward sensitivity analysis with respect to the 
+ * diffusion coefficients. This version uses the Krylov solver
+ * IDASpgmr and BBD preconditioning.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = p1 * d^2u/dx^2 + p2 * d^2u/dy^2
+ * on the unit square. The nominal values of the parameters are
+ * p1 = p2 = 1.0. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y).
+ * The PDE is treated with central differences on a uniform
+ * MX x MY grid. The values of u at the interior points satisfy
+ * ODEs, and equations u = 0 at the boundaries are appended,\
+ * to form a DAE system of size N = MX * MY. Here MX = MY = 10.
+ *
+ * The system is actually implemented on submeshes, processor by
+ * processor, with an MXSUB by MYSUB mesh on each of NPEX * NPEY
+ * processors.
+ *
+ * The system is solved with IDA using the Krylov linear solver
+ * IDASPGMR in conjunction with the preconditioner module IDABBDPRE.
+ * The preconditioner uses a tridiagonal approximation
+ * (half-bandwidths = 1). The constraints u >= 0 are posed for all
+ * components. Local error testing on the boundary values is
+ * suppressed. Output is taken at t = 0, .01, .02, .04, ..., 10.24.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <idas/idas_bbdpre.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+#define NOUT         11             /* Number of output times */
+
+#define NPEX         2              /* No. PEs in x direction of PE array */
+#define NPEY         2              /* No. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* No. x points per subgrid */
+#define MYSUB        5              /* No. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+
+#define NS           2              /* Number of sensitivities (NS<=2) */
+
+typedef struct {  
+  realtype p[2];
+  int thispe, mx, my, ixsub, jysub, npex, npey, mxsub, mysub;
+  long int n_local;
+  realtype dx, dy, coeffx, coeffy, coeffxy;
+  realtype uext[(MXSUB+2)*(MYSUB+2)];
+  MPI_Comm comm;
+} *UserData;
+
+/* Prototypes of user-supplied and supporting functions */
+
+static int heatres(realtype tres, 
+                   N_Vector uu, N_Vector up, N_Vector res, 
+                   void *user_data);
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector uu, N_Vector up, 
+                   void *user_data);
+static int reslocal(long int Nlocal, realtype tres, 
+                    N_Vector uu, N_Vector up, N_Vector res,  
+                    void *user_data);
+static int BSend(MPI_Comm comm, int thispe, int ixsub,
+                 int jysub, int dsizex, int dsizey,
+                 realtype uarray[]);
+static int BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                     int ixsub, int jysub,
+                     int dsizex, int dsizey,
+                     realtype uext[], realtype buffer[]);
+static int BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                     int dsizex, realtype uext[], realtype buffer[]);
+
+/* Prototypes of private functions */
+
+static int InitUserData(int thispe, MPI_Comm comm, UserData data);
+static int SetInitialProfile(N_Vector uu, N_Vector up, N_Vector id,
+                             N_Vector res, UserData data);
+
+static void PrintHeader(int Neq, realtype rtol, realtype atol,
+                        int mudq, int mukeep,
+                        booleantype sensi, int sensi_meth, int err_con);
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu, 
+                        booleantype sensi, N_Vector *uuS);
+static void PrintFinalStats(void *mem);
+
+static void ProcessArgs(int argc, char *argv[], int my_pe,
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con);
+static void WrongArgs(int my_pe, char *name);
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData data;
+  int thispe, iout, ier, npes;
+  long int Neq, local_N, mudq, mldq, mukeep, mlkeep;
+  realtype rtol, atol, t0, t1, tout, tret;
+  N_Vector uu, up, constraints, id, res;
+
+  realtype *pbar;
+  int is;
+  N_Vector *uuS, *upS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = id = res = NULL;
+  uuS = upS = NULL;
+
+  /* Get processor number and total number of pe's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &thispe);
+  
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n", 
+              npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+  
+  /* Process arguments */
+
+  ProcessArgs(argc, argv, thispe, &sensi, &sensi_meth, &err_con);
+
+  /* Set local length local_N and global length Neq. */
+
+  local_N = MXSUB*MYSUB;
+  Neq     = MX * MY;
+
+  /* Allocate N-vectors. */
+
+  uu = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)uu, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  up = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)up, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  res = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)res, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  constraints = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)constraints, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  id = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  /* Allocate and initialize the data structure. */
+
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2, thispe)) MPI_Abort(comm, 1);
+
+  InitUserData(thispe, comm, data);
+
+  /* Initialize the uu, up, id, and constraints profiles. */
+
+  SetInitialProfile(uu, up, id, res, data);
+  N_VConst(ONE, constraints);
+
+  t0 = ZERO; t1 = RCONST(0.01);
+
+  /* Scalar relative and absolute tolerance. */
+
+  rtol = ZERO;
+  atol = RCONST(1.0e-3);
+
+  /* Call IDACreate and IDAInit to initialize solution and various
+     IDASet*** functions to specify optional inputs:
+     - indicate which variables are differential and which are algebraic
+     - exclude algebraic variables from error test
+     - specify additional constraints on solution components */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetSuppressAlg(mem, TRUE);
+  if(check_flag(&ier, "IDASetSuppressAlg", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetId(mem, id);
+  if(check_flag(&ier, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1, thispe)) MPI_Abort(comm, 1);
+  N_VDestroy_Parallel(constraints);
+
+  ier = IDAInit(mem, heatres, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Specify state tolerances (scalar relative and absolute tolerances) */
+
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDASpgmr to specify the linear solver. */
+
+  ier = IDASpgmr(mem, 12);
+  if(check_flag(&ier, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+  
+  /* Call IDABBDPrecInit to initialize BBD preconditioner. */
+
+  mudq = MXSUB;
+  mldq = MXSUB;
+  mukeep = 1;
+  mlkeep = 1;
+  ier = IDABBDPrecInit(mem, local_N, mudq, mldq, mukeep, mlkeep, 
+                       ZERO, reslocal, NULL);
+  if(check_flag(&ier, "IDABBDPrecInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Sensitivity-related settings */
+
+  if( sensi) {
+
+    /* Allocate and set pbar, the vector with order of magnitude
+       information for the problem parameters. (Note: this is 
+       done here as an illustration only, as the default values
+       for pbar, if pbar is not supplied, are anyway 1.0) */
+
+    pbar = (realtype *) malloc(NS*sizeof(realtype));
+    if (check_flag((void *)pbar, "malloc", 2, thispe)) MPI_Abort(comm, 1);
+    for (is=0; is<NS; is++) pbar[is] = data->p[is]; 
+
+    /* Allocate sensitivity solution vectors uuS and upS and set them
+       to an initial guess for the sensitivity ICs (the IC for uuS are
+       0.0 since the state IC do not depend on the porblem parameters;
+       however, the derivatives upS may not and therefore we will have
+       to call IDACalcIC to find them) */
+
+    uuS = N_VCloneVectorArray_Parallel(NS, uu);
+    if (check_flag((void *)uuS, "N_VCloneVectorArray_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+    for (is = 0; is < NS; is++)  N_VConst(ZERO,uuS[is]);
+
+    upS = N_VCloneVectorArray_Parallel(NS, uu);
+    if (check_flag((void *)upS, "N_VCloneVectorArray_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+    for (is = 0; is < NS; is++)  N_VConst(ZERO,upS[is]);
+
+    /* Initialize FSA using the default internal sensitivity residual function
+       (Note that this requires specifying the problem parameters -- see below) */
+
+    ier = IDASensInit(mem, NS, sensi_meth, NULL, uuS, upS);
+    if(check_flag(&ier, "IDASensInit", 1, thispe)) MPI_Abort(comm, 1);
+
+    /* Indicate the use of internally estimated tolerances for the sensitivity
+       variables (based on the tolerances provided for the states and the 
+       pbar values) */
+
+    ier = IDASensEEtolerances(mem);
+    if(check_flag(&ier, "IDASensEEtolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+    /* Specify whether the sensitivity variables are included in the error
+       test or not */
+
+    ier = IDASetSensErrCon(mem, err_con);
+    if(check_flag(&ier, "IDASetSensErrCon", 1, thispe)) MPI_Abort(comm, 1);
+
+    /* Specify the problem parameters and their order of magnitude
+       (Note that we do not specify the index array plist and therefore
+       IDAS will compute sensitivities w.r.t. the first NS parameters) */
+
+    ier = IDASetSensParams(mem, data->p, pbar, NULL);
+    if(check_flag(&ier, "IDASetSensParams", 1, thispe)) MPI_Abort(comm, 1);
+
+    /* Compute consistent initial conditions (Note that this is required
+       only if performing SA since uu and up already contain consistent 
+       initial conditions for the states) */
+  
+    ier = IDACalcIC(mem, IDA_YA_YDP_INIT, t1);
+    if(check_flag(&ier, "IDACalcIC", 1, thispe)) MPI_Abort(comm, 1);
+
+  }
+
+  /* Print problem description */
+
+  if (thispe == 0 ) PrintHeader(Neq, rtol, atol, mudq, mukeep, 
+                                sensi, sensi_meth, err_con);
+
+  /* Loop over tout, call IDASolve, print output. */
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) { 
+    
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    if (sensi) {
+      ier = IDAGetSens(mem, &tret, uuS);
+      if(check_flag(&ier, "IDAGetSens", 1, thispe)) MPI_Abort(comm, 1);
+    }
+
+    PrintOutput(thispe, mem, tret, uu, sensi, uuS);
+    
+  }
+
+  /* Print final statistics */
+
+  if (thispe == 0) PrintFinalStats(mem);
+  
+  /* Free Memory */
+  IDAFree(&mem);
+  free(data);
+  N_VDestroy_Parallel(id);
+  N_VDestroy_Parallel(res);
+  N_VDestroy_Parallel(up);
+  N_VDestroy_Parallel(uu);
+
+  MPI_Finalize();
+
+  return(0);
+
+}
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * heatres: heat equation system residual function                       
+ * This uses 5-point central differencing on the interior points, and    
+ * includes algebraic equations for the boundary values.                 
+ * So for each interior point, the residual component has the form       
+ *    res_i = u'_i - (central difference)_i                              
+ * while for each boundary point, it is res_i = u_i. 
+ *                    
+ * This parallel implementation uses several supporting routines. 
+ * First a call is made to rescomm to do communication of subgrid boundary
+ * data into array uext.  Then reslocal is called to compute the residual
+ * on individual processors and their corresponding domains.  The routines
+ * BSend, BRecvPost, and BREcvWait handle interprocessor communication
+ * of uu required to calculate the residual. 
+ */
+
+static int heatres(realtype tres, N_Vector uu, N_Vector up, 
+                   N_Vector res, void *user_data)
+{
+  int retval;
+  UserData data;
+  long int Nlocal;
+  
+  data = (UserData) user_data;
+  
+  Nlocal = data->n_local;
+
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(Nlocal, tres, uu, up, data);
+  
+  /* Call reslocal to calculate res. */
+  retval = reslocal(Nlocal, tres, uu, up, res, data);
+  
+  return(0);
+  
+}
+
+/* 
+ * rescomm routine.  This routine performs all inter-processor
+ * communication of data in u needed to calculate G.                 
+ */
+
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector uu, N_Vector up, void *user_data)
+{
+  UserData data;
+  realtype *uarray, *uext, buffer[2*MYSUB];
+  MPI_Comm comm;
+  int thispe, ixsub, jysub, mxsub, mysub;
+  MPI_Request request[4];
+
+  data = (UserData) user_data;
+  uarray = N_VGetArrayPointer_Parallel(uu);
+
+  /* Get comm, thispe, subgrid indices, data sizes, extended array uext. */
+  comm = data->comm;  thispe = data->thispe;
+  ixsub = data->ixsub;   jysub = data->jysub;
+  mxsub = data->mxsub;   mysub = data->mysub;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs. */
+  BRecvPost(comm, request, thispe, ixsub, jysub, mxsub, mysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs. */
+  BSend(comm, thispe, ixsub, jysub, mxsub, mysub, uarray);
+
+  /* Finish receiving boundary data from neighboring PEs. */
+  BRecvWait(request, ixsub, jysub, mxsub, uext, buffer);
+
+  return(0);
+
+}
+
+/*
+ * reslocal routine.  Compute res = F(t, uu, up).  This routine assumes
+ * that all inter-processor communication of data needed to calculate F
+ *  has already been done, and that this data is in the work array uext.  
+ */
+
+static int reslocal(long int Nlocal, realtype tres, 
+                    N_Vector uu, N_Vector up, N_Vector res,  
+                    void *user_data)
+{
+  realtype *uext, *uuv, *upv, *resv;
+  realtype termx, termy;
+  int lx, ly, offsetu, offsetue, locu, locue;
+  int ixsub, jysub, mxsub, mxsub2, mysub, npex, npey;
+  int ixbegin, ixend, jybegin, jyend;
+  UserData data;
+  realtype p1, p2;
+
+  /* Get subgrid indices, array sizes, extended work array uext. */
+
+  data = (UserData) user_data;
+
+  uext = data->uext;
+  uuv = N_VGetArrayPointer_Parallel(uu);
+  upv = N_VGetArrayPointer_Parallel(up);
+  resv = N_VGetArrayPointer_Parallel(res);
+  ixsub = data->ixsub; jysub = data->jysub;
+  mxsub = data->mxsub; mxsub2 = data->mxsub + 2;
+  mysub = data->mysub; npex = data->npex; npey = data->npey;
+  
+  p1 = data->p[0];
+  p2 = data->p[1];
+
+  /* Initialize all elements of res to uu. This sets the boundary
+     elements simply without indexing hassles. */
+  
+  N_VScale(ONE, uu, res);
+  
+  /* Copy local segment of u vector into the working extended array uext.
+     This completes uext prior to the computation of the res vector.     */
+
+  offsetu = 0;
+  offsetue = mxsub2 + 1;
+  for (ly = 0; ly < mysub; ly++) {
+    for (lx = 0; lx < mxsub; lx++) uext[offsetue+lx] = uuv[offsetu+lx];
+    offsetu = offsetu + mxsub;
+    offsetue = offsetue + mxsub2;
+  }
+  
+  /* Set loop limits for the interior of the local subgrid. */
+  
+  ixbegin = 0;
+  ixend   = mxsub-1;
+  jybegin = 0;
+  jyend   = mysub-1;
+  if (ixsub == 0) ixbegin++; if (ixsub == npex-1) ixend--;
+  if (jysub == 0) jybegin++; if (jysub == npey-1) jyend--;
+  
+  /* Loop over all grid points in local subgrid. */
+  
+  for (ly = jybegin; ly <=jyend; ly++) {
+    for (lx = ixbegin; lx <= ixend; lx++) {
+      locu  = lx + ly*mxsub;
+      locue = (lx+1) + (ly+1)*mxsub2;
+      termx = p1 * data->coeffx *(uext[locue-1]      - TWO*uext[locue] + uext[locue+1]);
+      termy = p2 * data->coeffy *(uext[locue-mxsub2] - TWO*uext[locue] + uext[locue+mxsub2]);
+      resv[locu] = upv[locu] - (termx + termy);
+   }
+  }
+  return(0);
+
+}
+
+/*
+ * Routine to send boundary data to neighboring PEs.                     
+ */
+
+static int BSend(MPI_Comm comm, int thispe, int ixsub,
+                 int jysub, int dsizex, int dsizey,
+                 realtype uarray[])
+{
+  int ly, offsetu;
+  realtype bufleft[MYSUB], bufright[MYSUB];
+  
+  /* If jysub > 0, send data from bottom x-line of u. */
+  
+  if (jysub != 0)
+    MPI_Send(&uarray[0], dsizex, PVEC_REAL_MPI_TYPE, thispe-NPEX, 0, comm);
+
+  /* If jysub < NPEY-1, send data from top x-line of u. */
+  
+  if (jysub != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&uarray[offsetu], dsizex, PVEC_REAL_MPI_TYPE, 
+             thispe+NPEX, 0, comm);
+  }
+  
+  /* If ixsub > 0, send data from left y-line of u (via bufleft). */
+  
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*dsizex;
+      bufleft[ly] = uarray[offsetu];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, thispe-1, 0, comm);   
+  }
+
+  /* If ixsub < NPEX-1, send data from right y-line of u (via bufright). */
+  
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*MXSUB + (MXSUB-1);
+      bufright[ly] = uarray[offsetu];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, thispe+1, 0, comm);   
+  }
+
+  return(0);
+
+}
+
+/* 
+ * Routine to start receiving boundary data from neighboring PEs.
+ * Notes:
+ *   1) buffer should be able to hold 2*MYSUB realtype entries, should be
+ *      passed to both the BRecvPost and BRecvWait functions, and should not
+ *      be manipulated between the two calls.
+ *   2) request should have 4 entries, and should be passed in 
+ *      both calls also. 
+ */
+
+static int BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                     int ixsub, int jysub,
+                     int dsizex, int dsizey,
+                     realtype uext[], realtype buffer[])
+{
+  int offsetue;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+MYSUB;
+  
+  /* If jysub > 0, receive data for bottom x-line of uext. */
+  if (jysub != 0)
+    MPI_Irecv(&uext[1], dsizex, PVEC_REAL_MPI_TYPE,
+              thispe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of uext. */
+  if (jysub != NPEY-1) {
+    offsetue = (1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+              thispe+NPEX, 0, comm, &request[1]);
+  }
+
+  /* If ixsub > 0, receive data for left y-line of uext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              thispe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of uext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              thispe+1, 0, comm, &request[3]);
+  }
+  
+  return(0);
+
+}
+
+/*
+ * Routine to finish receiving boundary data from neighboring PEs.
+ * Notes:
+ *   1) buffer should be able to hold 2*MYSUB realtype entries, should be
+ *      passed to both the BRecvPost and BRecvWait functions, and should not
+ *      be manipulated between the two calls.
+ *   2) request should have four entries, and should be passed in both 
+ *      calls also. 
+ */
+
+static int BRecvWait(MPI_Request request[], int ixsub,
+                     int jysub, int dsizex, realtype uext[],
+                     realtype buffer[])
+{
+  int ly, dsizex2, offsetue;
+  realtype *bufleft = buffer, *bufright = buffer+MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2;
+  
+  /* If jysub > 0, receive data for bottom x-line of uext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of uext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If ixsub > 0, receive data for left y-line of uext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext. */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetue = (ly+1)*dsizex2;
+      uext[offsetue] = bufleft[ly];
+    }
+  }
+
+  /* If ixsub < NPEX-1, receive data for right y-line of uext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+    
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetue = (ly+2)*dsizex2 - 1;
+      uext[offsetue] = bufright[ly];
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData initializes the user's data block data. 
+ */
+
+static int InitUserData(int thispe, MPI_Comm comm, UserData data)
+{
+  data->thispe = thispe;
+  data->dx = ONE/(MX-ONE);       /* Assumes a [0,1] interval in x. */
+  data->dy = ONE/(MY-ONE);       /* Assumes a [0,1] interval in y. */
+  data->coeffx  = ONE/(data->dx * data->dx);
+  data->coeffy  = ONE/(data->dy * data->dy);
+  data->coeffxy = TWO/(data->dx * data->dx) + TWO/(data->dy * data->dy) ;
+  data->jysub   = thispe/NPEX;
+  data->ixsub   = thispe - data->jysub * NPEX;
+  data->npex    = NPEX;
+  data->npey    = NPEY;
+  data->mx      = MX;
+  data->my      = MY;
+  data->mxsub   = MXSUB;
+  data->mysub   = MYSUB;
+  data->comm    = comm;
+  data->n_local = MXSUB*MYSUB;
+
+  data->p[0] = ONE;
+  data->p[1] = ONE;
+
+  return(0);
+  
+}
+
+/* 
+ * SetInitialProfile sets the initial values for the problem. 
+ */
+
+static int SetInitialProfile(N_Vector uu, N_Vector up,  N_Vector id, 
+                             N_Vector res, UserData data)
+{
+  int i, iloc, j, jloc, offset, loc, ixsub, jysub;
+  int ixbegin, ixend, jybegin, jyend;
+  realtype xfact, yfact, *udata, *iddata, dx, dy;
+  
+  /* Initialize uu. */ 
+  
+  udata = N_VGetArrayPointer_Parallel(uu);
+  iddata = N_VGetArrayPointer_Parallel(id);
+  
+  /* Set mesh spacings and subgrid indices for this PE. */
+  dx = data->dx;
+  dy = data->dy;
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  
+  /* Set beginning and ending locations in the global array corresponding 
+     to the portion of that array assigned to this processor. */
+  ixbegin = MXSUB*ixsub;
+  ixend   = MXSUB*(ixsub+1) - 1;
+  jybegin = MYSUB*jysub;
+  jyend   = MYSUB*(jysub+1) - 1;
+  
+  /* Loop over the local array, computing the initial profile value.
+     The global indices are (i,j) and the local indices are (iloc,jloc).
+     Also set the id vector to zero for boundary points, one otherwise. */
+  
+  N_VConst(ONE,id);
+  for (j = jybegin, jloc = 0; j <= jyend; j++, jloc++) {
+    yfact = data->dy*j;
+    offset= jloc*MXSUB;
+    for (i = ixbegin, iloc = 0; i <= ixend; i++, iloc++) {
+      xfact = data->dx * i;
+      loc = offset + iloc;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+      if (i == 0 || i == MX-1 || j == 0 || j == MY-1) iddata[loc] = ZERO;
+    }
+  }
+  
+  /* Initialize up. */
+  
+  N_VConst(ZERO, up);    /* Initially set up = 0. */
+  
+  /* heatres sets res to negative of ODE RHS values at interior points. */
+  heatres(ZERO, uu, up, res, data);
+  
+  /* Copy -res into up to get correct initial up values. */
+  N_VScale(-ONE, res, up);
+  
+  return(0);
+  
+}
+
+/*
+ * Print first lines of output (problem description)
+ * and table heading
+ */
+
+static void PrintHeader(int Neq, realtype rtol, realtype atol,
+                        int mudq, int mukeep,
+                        booleantype sensi, int sensi_meth, int err_con)
+{
+    printf("\nidasHeat2D_FSA_kry_bbd_p: Heat equation, parallel example problem for IDA\n");
+    printf("                     Discretized heat equation on 2D unit square.\n");
+    printf("                     Zero boundary conditions, polynomial initial conditions.\n");
+    printf("                     Mesh dimensions: %d x %d ; ", MX, MY);
+    printf("    Total system size: %d\n\n", Neq);
+
+    printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+    printf("         Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+    printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+    printf("Constraints set to force all solution components >= 0. \n");
+    printf("SUPPRESSALG = TRUE to suppress local error testing on");
+    printf(" all boundary components. \n");
+    printf("Linear solver: IDASPGMR.    ");
+    printf("Preconditioner: IDABBDPRE - Banded-block-diagonal.\n"); 
+    printf("Difference quotient half-bandwidths = %d",mudq);
+    printf("Retained matrix half-bandwidths = %d \n\n",mukeep);
+
+    if (sensi) {
+      printf("Sensitivity: YES ");
+      if(sensi_meth == IDA_SIMULTANEOUS)   
+        printf("( SIMULTANEOUS +");
+      else 
+        printf("( STAGGERED +");   
+      if(err_con) printf(" FULL ERROR CONTROL )");
+      else        printf(" PARTIAL ERROR CONTROL )");
+      
+    } else {
+      
+      printf("Sensitivity: NO ");
+      
+    }
+    
+    printf("\n\nOutput Summary: umax = max-norm of solution\n");
+    printf("                       max-norm of sensitivity 1\n");
+    printf("                       max-norm of sensitivity 2\n\n");
+    printf("  time     umax       k  nst  nni  nli   nre nreLS nge     h      npe nps\n");
+    printf(" .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .\n");
+
+
+}
+
+/*
+ * Print integrator statistics and max-norm of solution
+ */
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu, 
+                        booleantype sensi, N_Vector *uuS)
+{
+  realtype umax, hused;
+  int kused, ier, is;
+  long int nst, nni, nre, nli, npe, nps, nreLS, nge;
+
+  umax = N_VMaxNorm(uu);
+
+  if (id == 0) {
+
+    ier = IDAGetLastOrder(mem, &kused);
+    check_flag(&ier, "IDAGetLastOrder", 1, id);
+    ier = IDAGetNumSteps(mem, &nst);
+    check_flag(&ier, "IDAGetNumSteps", 1, id);
+    ier = IDAGetNumNonlinSolvIters(mem, &nni);
+    check_flag(&ier, "IDAGetNumNonlinSolvIters", 1, id);
+    ier = IDAGetNumResEvals(mem, &nre);
+    check_flag(&ier, "IDAGetNumResEvals", 1, id);
+    ier = IDAGetLastStep(mem, &hused);
+    check_flag(&ier, "IDAGetLastStep", 1, id);
+    ier = IDASpilsGetNumLinIters(mem, &nli);
+    check_flag(&ier, "IDASpilsGetNumLinIters", 1, id);
+    ier = IDASpilsGetNumResEvals(mem, &nreLS);
+    check_flag(&ier, "IDASpilsGetNumResEvals", 1, id);
+    ier = IDABBDPrecGetNumGfnEvals(mem, &nge);
+    check_flag(&ier, "IDABBDPrecGetNumGfnEvals", 1, id);
+    ier = IDASpilsGetNumPrecEvals(mem, &npe);
+    check_flag(&ier, "IDASpilsGetPrecEvals", 1, id);
+    ier = IDASpilsGetNumPrecSolves(mem, &nps);
+    check_flag(&ier, "IDASpilsGetNumPrecSolves", 1, id);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld %4ld %4ld %9.2Le  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nli, nre, nreLS, nge, hused, npe, nps);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld %4ld %4ld %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nli, nre, nreLS, nge, hused, npe, nps);
+#else
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld %4ld %4ld %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nli, nre, nreLS, nge, hused, npe, nps);
+#endif
+
+  }
+
+  if (sensi) {
+    for (is=0; is<NS; is++) {
+      umax = N_VMaxNorm(uuS[is]);
+      if (id == 0) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+        printf("       %13.5Le\n", umax);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+        printf("       %13.5e\n", umax);
+#else
+        printf("       %13.5e\n", umax);
+#endif
+      }
+    }
+
+  }
+
+}
+
+/*
+ * Print some final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int netf, ncfn, ncfl;
+
+  IDAGetNumErrTestFails(mem, &netf);
+  IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  IDASpilsGetNumConvFails(mem, &ncfl);
+
+  printf("\nError test failures            = %ld\n", netf);
+  printf("Nonlinear convergence failures = %ld\n", ncfn);
+  printf("Linear convergence failures    = %ld\n", ncfl);
+}
+
+/* 
+ * Process and verify command line arguments
+ */
+
+static void ProcessArgs(int argc, char *argv[], int my_pe,
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(my_pe, argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(my_pe, argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(my_pe, argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = IDA_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = IDA_STAGGERED;
+    else 
+      WrongArgs(my_pe, argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(my_pe, argv[0]);
+  }
+
+}
+
+static void WrongArgs(int my_pe, char *name)
+{
+  if (my_pe == 0) {
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim, stg, or stg1\n");
+    printf("         err_con    = t or f\n");
+  }  
+  MPI_Finalize();
+  exit(0);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/parallel/idasHeat2D_FSA_kry_bbd_p.out b/examples/idas/parallel/idasHeat2D_FSA_kry_bbd_p.out
new file mode 100644
index 0000000..d2038ae
--- /dev/null
+++ b/examples/idas/parallel/idasHeat2D_FSA_kry_bbd_p.out
@@ -0,0 +1,57 @@
+idasHeat2D_FSA_kry_bbd_p: Heat equation, parallel example problem for IDA
+                     Discretized heat equation on 2D unit square.
+                     Zero boundary conditions, polynomial initial conditions.
+                     Mesh dimensions: 10 x 10 ;     Total system size: 100
+ 
+Subgrid dimensions: 5 x 5         Processor array: 2 x 2
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0.
+SUPPRESSALG = TRUE to suppress local error testing on all boundary components.
+Linear solver: IDASPGMR.    Preconditioner: IDABBDPRE - Banded-block-diagonal.
+Difference quotient half-bandwidths = 5Retained matrix half-bandwidths = 1
+ 
+Sensitivity: YES ( SIMULTANEOUS + FULL ERROR CONTROL )
+ 
+Output Summary: umax = max-norm of solution
+                       max-norm of sensitivity 1
+                       max-norm of sensitivity 2
+ 
+  time     umax       k  nst  nni  nli   nre nreLS nge     h      npe nps
+ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+  0.01   8.24107e-01  2   12   17   30    19   30  144  2.56e-03   12  87
+         7.20970e-02
+         7.20841e-02
+  0.02   6.88132e-01  3   15   22   43    24   43  144  5.12e-03   12 115
+         1.27103e-01
+         1.27071e-01
+  0.04   4.70895e-01  3   19   26   60    28   60  144  5.12e-03   12 144
+         1.81692e-01
+         1.81794e-01
+  0.08   2.16325e-01  3   23   31   95    33   95  156  1.02e-02   13 194
+         1.68436e-01
+         1.68462e-01
+  0.16   4.58960e-02  3   29   39  140    41  140  168  1.84e-02   14 263
+         7.02125e-02
+         7.03265e-02
+  0.32   2.29034e-03  3   36   47  200    49  200  180  3.69e-02   15 347
+         6.22596e-03
+         6.33303e-03
+  0.64   2.32389e-05  1   41   55  255    57  255  204  1.47e-01   17 426
+         7.82118e-05
+         8.20707e-05
+  1.28   5.39438e-19  1   43   59  269    61  269  228  5.90e-01   19 452
+         3.23841e-04
+         1.68342e-04
+  2.56   1.44292e-20  1   44   61  272    63  272  240  1.18e+00   20 461
+         7.70031e-05
+         1.35511e-04
+  5.12   3.10555e-20  1   46   64  277    66  277  264  4.72e+00   22 475
+         3.35209e-04
+         6.48901e-05
+ 10.24   4.32423e-20  1   47   66  279    68  279  276  9.44e+00   23 483
+         7.13723e-05
+         5.93381e-05
+ 
+Error test failures            = 0
+Nonlinear convergence failures = 2
+Linear convergence failures    = 0
diff --git a/examples/idas/parallel/idasHeat2D_kry_bbd_p.c b/examples/idas/parallel/idasHeat2D_kry_bbd_p.c
new file mode 100644
index 0000000..66cdb60
--- /dev/null
+++ b/examples/idas/parallel/idasHeat2D_kry_bbd_p.c
@@ -0,0 +1,840 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for IDA: 2D heat equation, parallel, GMRES,
+ * IDABBDPRE.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version uses the Krylov solver IDASpgmr and BBD
+ * preconditioning.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y). The
+ * PDE is treated with central differences on a uniform MX x MY
+ * grid. The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = MX * MY. Here MX = MY = 10.
+ *
+ * The system is actually implemented on submeshes, processor by
+ * processor, with an MXSUB by MYSUB mesh on each of NPEX * NPEY
+ * processors.
+ *
+ * The system is solved with IDA using the Krylov linear solver
+ * IDASPGMR in conjunction with the preconditioner module IDABBDPRE.
+ * The preconditioner uses a tridiagonal approximation
+ * (half-bandwidths = 1). The constraints u >= 0 are posed for all
+ * components. Local error testing on the boundary values is
+ * suppressed. Output is taken at t = 0, .01, .02, .04, ..., 10.24.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <idas/idas_bbdpre.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+#define NOUT         11             /* Number of output times */
+
+#define NPEX         2              /* No. PEs in x direction of PE array */
+#define NPEY         2              /* No. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* No. x points per subgrid */
+#define MYSUB        5              /* No. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+
+typedef struct {  
+  int thispe, mx, my, ixsub, jysub, npex, npey, mxsub, mysub;
+  int n_local;
+  realtype dx, dy, coeffx, coeffy, coeffxy;
+  realtype uext[(MXSUB+2)*(MYSUB+2)];
+  MPI_Comm comm;
+} *UserData;
+
+/* Prototypes of user-supplied and supporting functions */
+
+static int heatres(realtype tres, 
+                   N_Vector uu, N_Vector up, N_Vector res, 
+                   void *user_data);
+
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector uu, N_Vector up, 
+                   void *user_data);
+
+static int reslocal(long int Nlocal, realtype tres, 
+                    N_Vector uu, N_Vector up, N_Vector res,  
+                    void *user_data);
+
+static int BSend(MPI_Comm comm, int thispe, int ixsub,
+                 int jysub, int dsizex, int dsizey,
+                 realtype uarray[]);
+
+static int BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                     int ixsub, int jysub,
+                     int dsizex, int dsizey,
+                     realtype uext[], realtype buffer[]);
+
+static int BRecvWait(MPI_Request request[], int ixsub, int jysub,
+                     int dsizex, realtype uext[], realtype buffer[]);
+
+/* Prototypes of private functions */
+
+static int InitUserData(int thispe, MPI_Comm comm, UserData data);
+
+static int SetInitialProfile(N_Vector uu, N_Vector up, N_Vector id,
+                             N_Vector res, UserData data);
+
+static void PrintHeader(long int Neq, realtype rtol, realtype atol);
+
+static void PrintCase(int case_number, int mudq, int mukeep);
+
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData data;
+  int thispe, iout, ier, npes;
+  long int Neq, local_N, mudq, mldq, mukeep, mlkeep;
+  realtype rtol, atol, t0, t1, tout, tret;
+  N_Vector uu, up, constraints, id, res;
+
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = id = res = NULL;
+
+  /* Get processor number and total number of pe's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &thispe);
+  
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n", 
+              npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+  
+  /* Set local length local_N and global length Neq. */
+
+  local_N = MXSUB*MYSUB;
+  Neq     = MX * MY;
+
+  /* Allocate N-vectors. */
+
+  uu = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)uu, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  up = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)up, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  res = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)res, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  constraints = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)constraints, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  id = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) MPI_Abort(comm, 1);
+
+  /* Allocate and initialize the data structure. */
+
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2, thispe)) MPI_Abort(comm, 1);
+
+  InitUserData(thispe, comm, data);
+
+  /* Initialize the uu, up, id, and constraints profiles. */
+
+  SetInitialProfile(uu, up, id, res, data);
+  N_VConst(ONE, constraints);
+
+  t0 = ZERO; t1 = RCONST(0.01);
+
+  /* Scalar relative and absolute tolerance. */
+
+  rtol = ZERO;
+  atol = RCONST(1.0e-3);
+
+  /* Call IDACreate and IDAMalloc to initialize solution */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetSuppressAlg(mem, TRUE);
+  if(check_flag(&ier, "IDASetSuppressAlg", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetId(mem, id);
+  if(check_flag(&ier, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1, thispe)) MPI_Abort(comm, 1);
+  N_VDestroy_Parallel(constraints);
+
+  ier = IDAInit(mem, heatres, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  mudq = MXSUB;
+  mldq = MXSUB;
+  mukeep = 1;
+  mlkeep = 1;
+
+  /* Print problem description */
+
+  if (thispe == 0 ) PrintHeader(Neq, rtol, atol);
+  
+  /* 
+   * ----------------------------- 
+   * Case 1 -- mldq = mudq = MXSUB 
+   * ----------------------------- 
+   */
+
+  /* Call IDASpgmr to specify the linear solver. */
+  ier = IDASpgmr(mem, 0);
+  if(check_flag(&ier, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+  
+  /* Call IDABBDPrecInit to initialize BBD preconditioner. */
+  ier = IDABBDPrecInit(mem, local_N, mudq, mldq, mukeep, mlkeep, 
+                       ZERO, reslocal, NULL);
+  if(check_flag(&ier, "IDABBDPrecAlloc", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Print output heading (on processor 0 only) and initial solution. */
+  if (thispe == 0) PrintCase(1, mudq, mukeep);
+
+  /* Loop over tout, call IDASolve, print output. */
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) { 
+    
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(thispe, mem, tret, uu);
+    
+  }
+
+  /* Print final statistics */
+  if (thispe == 0) PrintFinalStats(mem);
+  
+  /*
+   * ----------------------------- 
+   * Case 2 -- mldq = mudq = 1
+   * ----------------------------- 
+   */
+  
+  mudq = 1;
+  mldq = 1;
+
+  /* Re-initialize the uu and up profiles. */
+  SetInitialProfile(uu, up, id, res, data);
+
+  /* Call IDAReInit to re-initialize IDA. */
+  ier = IDAReInit(mem, t0, uu, up);
+  if(check_flag(&ier, "IDAReInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDABBDPrecReInit to re-initialize BBD preconditioner. */
+  ier = IDABBDPrecReInit(mem, mudq, mldq, ZERO);
+  if(check_flag(&ier, "IDABBDPrecReInit", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Print output heading (on processor 0 only). */
+  if (thispe == 0) PrintCase(2, mudq, mukeep);
+
+  /* Loop over tout, call IDASolve, print output. */
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) { 
+    
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(thispe, mem, tret, uu);
+    
+  }
+  
+  /* Print final statistics */
+  if (thispe == 0) PrintFinalStats(mem);
+
+  /* Free Memory */
+  IDAFree(&mem);
+  free(data);
+  N_VDestroy_Parallel(id);
+  N_VDestroy_Parallel(res);
+  N_VDestroy_Parallel(up);
+  N_VDestroy_Parallel(uu);
+
+  MPI_Finalize();
+
+  return(0);
+
+}
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * heatres: heat equation system residual function                       
+ * This uses 5-point central differencing on the interior points, and    
+ * includes algebraic equations for the boundary values.                 
+ * So for each interior point, the residual component has the form       
+ *    res_i = u'_i - (central difference)_i                              
+ * while for each boundary point, it is res_i = u_i. 
+ *                    
+ * This parallel implementation uses several supporting routines. 
+ * First a call is made to rescomm to do communication of subgrid boundary
+ * data into array uext.  Then reslocal is called to compute the residual
+ * on individual processors and their corresponding domains.  The routines
+ * BSend, BRecvPost, and BREcvWait handle interprocessor communication
+ * of uu required to calculate the residual. 
+ */
+
+static int heatres(realtype tres, N_Vector uu, N_Vector up, 
+                   N_Vector res, void *user_data)
+{
+  int retval;
+  UserData data;
+  long int Nlocal;
+  
+  data = (UserData) user_data;
+  
+  Nlocal = data->n_local;
+
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(Nlocal, tres, uu, up, data);
+  
+  /* Call reslocal to calculate res. */
+  retval = reslocal(Nlocal, tres, uu, up, res, data);
+  
+  return(0);
+  
+}
+
+/* 
+ * rescomm routine.  This routine performs all inter-processor
+ * communication of data in u needed to calculate G.                 
+ */
+
+static int rescomm(long int Nlocal, realtype tt, 
+                   N_Vector uu, N_Vector up, void *user_data)
+{
+  UserData data;
+  realtype *uarray, *uext, buffer[2*MYSUB];
+  MPI_Comm comm;
+  int thispe, ixsub, jysub, mxsub, mysub;
+  MPI_Request request[4];
+
+  data = (UserData) user_data;
+  uarray = N_VGetArrayPointer_Parallel(uu);
+
+  /* Get comm, thispe, subgrid indices, data sizes, extended array uext. */
+  comm = data->comm;  thispe = data->thispe;
+  ixsub = data->ixsub;   jysub = data->jysub;
+  mxsub = data->mxsub;   mysub = data->mysub;
+  uext = data->uext;
+
+  /* Start receiving boundary data from neighboring PEs. */
+  BRecvPost(comm, request, thispe, ixsub, jysub, mxsub, mysub, uext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs. */
+  BSend(comm, thispe, ixsub, jysub, mxsub, mysub, uarray);
+
+  /* Finish receiving boundary data from neighboring PEs. */
+  BRecvWait(request, ixsub, jysub, mxsub, uext, buffer);
+
+  return(0);
+
+}
+
+/*
+ * reslocal routine.  Compute res = F(t, uu, up).  This routine assumes
+ * that all inter-processor communication of data needed to calculate F
+ *  has already been done, and that this data is in the work array uext.  
+ */
+
+static int reslocal(long int Nlocal, realtype tres, 
+                    N_Vector uu, N_Vector up, N_Vector res,  
+                    void *user_data)
+{
+  realtype *uext, *uuv, *upv, *resv;
+  realtype termx, termy, termctr;
+  int lx, ly, offsetu, offsetue, locu, locue;
+  int ixsub, jysub, mxsub, mxsub2, mysub, npex, npey;
+  int ixbegin, ixend, jybegin, jyend;
+  UserData data;
+
+  /* Get subgrid indices, array sizes, extended work array uext. */
+
+  data = (UserData) user_data;
+  uext = data->uext;
+  uuv = N_VGetArrayPointer_Parallel(uu);
+  upv = N_VGetArrayPointer_Parallel(up);
+  resv = N_VGetArrayPointer_Parallel(res);
+  ixsub = data->ixsub; jysub = data->jysub;
+  mxsub = data->mxsub; mxsub2 = data->mxsub + 2;
+  mysub = data->mysub; npex = data->npex; npey = data->npey;
+  
+  /* Initialize all elements of res to uu. This sets the boundary
+     elements simply without indexing hassles. */
+  
+  N_VScale(ONE, uu, res);
+  
+  /* Copy local segment of u vector into the working extended array uext.
+     This completes uext prior to the computation of the res vector.     */
+
+  offsetu = 0;
+  offsetue = mxsub2 + 1;
+  for (ly = 0; ly < mysub; ly++) {
+    for (lx = 0; lx < mxsub; lx++) uext[offsetue+lx] = uuv[offsetu+lx];
+    offsetu = offsetu + mxsub;
+    offsetue = offsetue + mxsub2;
+  }
+  
+  /* Set loop limits for the interior of the local subgrid. */
+  
+  ixbegin = 0;
+  ixend   = mxsub-1;
+  jybegin = 0;
+  jyend   = mysub-1;
+  if (ixsub == 0) ixbegin++; if (ixsub == npex-1) ixend--;
+  if (jysub == 0) jybegin++; if (jysub == npey-1) jyend--;
+  
+  /* Loop over all grid points in local subgrid. */
+  
+  for (ly = jybegin; ly <=jyend; ly++) {
+    for (lx = ixbegin; lx <= ixend; lx++) {
+      locu  = lx + ly*mxsub;
+      locue = (lx+1) + (ly+1)*mxsub2;
+      termx = data->coeffx *(uext[locue-1]      + uext[locue+1]);
+      termy = data->coeffy *(uext[locue-mxsub2] + uext[locue+mxsub2]);
+      termctr = data->coeffxy*uext[locue];
+      resv[locu] = upv[locu] - (termx + termy - termctr);
+   }
+  }
+  return(0);
+
+}
+
+/*
+ * Routine to send boundary data to neighboring PEs.                     
+ */
+
+static int BSend(MPI_Comm comm, int thispe, int ixsub,
+                 int jysub, int dsizex, int dsizey,
+                 realtype uarray[])
+{
+  int ly, offsetu;
+  realtype bufleft[MYSUB], bufright[MYSUB];
+  
+  /* If jysub > 0, send data from bottom x-line of u. */
+  
+  if (jysub != 0)
+    MPI_Send(&uarray[0], dsizex, PVEC_REAL_MPI_TYPE, thispe-NPEX, 0, comm);
+
+  /* If jysub < NPEY-1, send data from top x-line of u. */
+  
+  if (jysub != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&uarray[offsetu], dsizex, PVEC_REAL_MPI_TYPE, 
+             thispe+NPEX, 0, comm);
+  }
+  
+  /* If ixsub > 0, send data from left y-line of u (via bufleft). */
+  
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*dsizex;
+      bufleft[ly] = uarray[offsetu];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, thispe-1, 0, comm);   
+  }
+
+  /* If ixsub < NPEX-1, send data from right y-line of u (via bufright). */
+  
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*MXSUB + (MXSUB-1);
+      bufright[ly] = uarray[offsetu];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, thispe+1, 0, comm);   
+  }
+
+  return(0);
+
+}
+
+/* 
+ * Routine to start receiving boundary data from neighboring PEs.
+ * Notes:
+ *   1) buffer should be able to hold 2*MYSUB realtype entries, should be
+ *      passed to both the BRecvPost and BRecvWait functions, and should not
+ *      be manipulated between the two calls.
+ *   2) request should have 4 entries, and should be passed in 
+ *      both calls also. 
+ */
+
+static int BRecvPost(MPI_Comm comm, MPI_Request request[], int thispe,
+                     int ixsub, int jysub,
+                     int dsizex, int dsizey,
+                     realtype uext[], realtype buffer[])
+{
+  int offsetue;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+MYSUB;
+  
+  /* If jysub > 0, receive data for bottom x-line of uext. */
+  if (jysub != 0)
+    MPI_Irecv(&uext[1], dsizex, PVEC_REAL_MPI_TYPE,
+              thispe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of uext. */
+  if (jysub != NPEY-1) {
+    offsetue = (1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+              thispe+NPEX, 0, comm, &request[1]);
+  }
+
+  /* If ixsub > 0, receive data for left y-line of uext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              thispe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of uext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              thispe+1, 0, comm, &request[3]);
+  }
+  
+  return(0);
+
+}
+
+/*
+ * Routine to finish receiving boundary data from neighboring PEs.
+ * Notes:
+ *   1) buffer should be able to hold 2*MYSUB realtype entries, should be
+ *      passed to both the BRecvPost and BRecvWait functions, and should not
+ *      be manipulated between the two calls.
+ *   2) request should have four entries, and should be passed in both 
+ *      calls also. 
+ */
+
+static int BRecvWait(MPI_Request request[], int ixsub,
+                     int jysub, int dsizex, realtype uext[],
+                     realtype buffer[])
+{
+  int ly, dsizex2, offsetue;
+  realtype *bufleft = buffer, *bufright = buffer+MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2;
+  
+  /* If jysub > 0, receive data for bottom x-line of uext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of uext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If ixsub > 0, receive data for left y-line of uext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+
+    /* Copy the buffer to uext. */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetue = (ly+1)*dsizex2;
+      uext[offsetue] = bufleft[ly];
+    }
+  }
+
+  /* If ixsub < NPEX-1, receive data for right y-line of uext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+    
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetue = (ly+2)*dsizex2 - 1;
+      uext[offsetue] = bufright[ly];
+    }
+  }
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData initializes the user's data block data. 
+ */
+
+static int InitUserData(int thispe, MPI_Comm comm, UserData data)
+{
+  data->thispe = thispe;
+  data->dx = ONE/(MX-ONE);       /* Assumes a [0,1] interval in x. */
+  data->dy = ONE/(MY-ONE);       /* Assumes a [0,1] interval in y. */
+  data->coeffx  = ONE/(data->dx * data->dx);
+  data->coeffy  = ONE/(data->dy * data->dy);
+  data->coeffxy = TWO/(data->dx * data->dx) + TWO/(data->dy * data->dy) ;
+  data->jysub   = thispe/NPEX;
+  data->ixsub   = thispe - data->jysub * NPEX;
+  data->npex    = NPEX;
+  data->npey    = NPEY;
+  data->mx      = MX;
+  data->my      = MY;
+  data->mxsub   = MXSUB;
+  data->mysub   = MYSUB;
+  data->comm    = comm;
+  data->n_local = MXSUB*MYSUB;
+  return(0);
+  
+}
+
+/* 
+ * SetInitialProfile sets the initial values for the problem. 
+ */
+
+static int SetInitialProfile(N_Vector uu, N_Vector up,  N_Vector id, 
+                             N_Vector res, UserData data)
+{
+  int i, iloc, j, jloc, offset, loc, ixsub, jysub;
+  int ixbegin, ixend, jybegin, jyend;
+  realtype xfact, yfact, *udata, *iddata, dx, dy;
+  
+  /* Initialize uu. */ 
+  
+  udata = N_VGetArrayPointer_Parallel(uu);
+  iddata = N_VGetArrayPointer_Parallel(id);
+  
+  /* Set mesh spacings and subgrid indices for this PE. */
+  dx = data->dx;
+  dy = data->dy;
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  
+  /* Set beginning and ending locations in the global array corresponding 
+     to the portion of that array assigned to this processor. */
+  ixbegin = MXSUB*ixsub;
+  ixend   = MXSUB*(ixsub+1) - 1;
+  jybegin = MYSUB*jysub;
+  jyend   = MYSUB*(jysub+1) - 1;
+  
+  /* Loop over the local array, computing the initial profile value.
+     The global indices are (i,j) and the local indices are (iloc,jloc).
+     Also set the id vector to zero for boundary points, one otherwise. */
+  
+  N_VConst(ONE,id);
+  for (j = jybegin, jloc = 0; j <= jyend; j++, jloc++) {
+    yfact = data->dy*j;
+    offset= jloc*MXSUB;
+    for (i = ixbegin, iloc = 0; i <= ixend; i++, iloc++) {
+      xfact = data->dx * i;
+      loc = offset + iloc;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+      if (i == 0 || i == MX-1 || j == 0 || j == MY-1) iddata[loc] = ZERO;
+    }
+  }
+  
+  /* Initialize up. */
+  
+  N_VConst(ZERO, up);    /* Initially set up = 0. */
+  
+  /* heatres sets res to negative of ODE RHS values at interior points. */
+  heatres(ZERO, uu, up, res, data);
+  
+  /* Copy -res into up to get correct initial up values. */
+  N_VScale(-ONE, res, up);
+  
+  return(0);
+  
+}
+
+/*
+ * Print first lines of output (problem description)
+ * and table heading
+ */
+
+static void PrintHeader(long int Neq, realtype rtol, realtype atol)
+{
+    printf("idasHeat2D_kry_bbd_p: Heat equation, parallel example problem for IDA\n");
+    printf("                  Discretized heat equation on 2D unit square.\n");
+    printf("                  Zero boundary conditions,");
+    printf(" polynomial initial conditions.\n");
+    printf("                Mesh dimensions: %d x %d", MX, MY);
+    printf("        Total system size: %ld\n\n", Neq);
+
+    printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+    printf("         Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+    printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+    printf("Constraints set to force all solution components >= 0. \n");
+    printf("SUPPRESSALG = TRUE to suppress local error testing on");
+    printf(" all boundary components. \n");
+    printf("Linear solver: IDASPGMR.    ");
+    printf("Preconditioner: IDABBDPRE - Banded-block-diagonal.\n"); 
+
+}
+
+/* 
+ * Print case and table header
+ */
+
+static void PrintCase(int case_number, int mudq, int mukeep)
+{
+  printf("\n\nCase %1d. \n", case_number);
+  printf("   Difference quotient half-bandwidths = %d",mudq);
+  printf("   Retained matrix half-bandwidths = %d \n",mukeep);
+  
+  /* Print output table heading and initial line of table. */
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time     umax       k  nst  nni  nli   nre nreLS nge     h      npe nps\n");
+  printf(" .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .\n");
+}
+
+/*
+ * Print integrator statistics and max-norm of solution
+ */
+
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu)
+{
+  realtype umax, hused;
+  int kused, ier;
+  long int nst, nni, nre, nli, npe, nps, nreLS, nge;
+
+  umax = N_VMaxNorm(uu);
+  
+  if (id == 0) {
+
+    ier = IDAGetLastOrder(mem, &kused);
+    check_flag(&ier, "IDAGetLastOrder", 1, id);
+    ier = IDAGetNumSteps(mem, &nst);
+    check_flag(&ier, "IDAGetNumSteps", 1, id);
+    ier = IDAGetNumNonlinSolvIters(mem, &nni);
+    check_flag(&ier, "IDAGetNumNonlinSolvIters", 1, id);
+    ier = IDAGetNumResEvals(mem, &nre);
+    check_flag(&ier, "IDAGetNumResEvals", 1, id);
+    ier = IDAGetLastStep(mem, &hused);
+    check_flag(&ier, "IDAGetLastStep", 1, id);
+    ier = IDASpilsGetNumLinIters(mem, &nli);
+    check_flag(&ier, "IDASpilsGetNumLinIters", 1, id);
+    ier = IDASpilsGetNumResEvals(mem, &nreLS);
+    check_flag(&ier, "IDASpilsGetNumResEvals", 1, id);
+    ier = IDABBDPrecGetNumGfnEvals(mem, &nge);
+    check_flag(&ier, "IDABBDPrecGetNumGfnEvals", 1, id);
+    ier = IDASpilsGetNumPrecEvals(mem, &npe);
+    check_flag(&ier, "IDASpilsGetPrecEvals", 1, id);
+    ier = IDASpilsGetNumPrecSolves(mem, &nps);
+    check_flag(&ier, "IDASpilsGetNumPrecSolves", 1, id);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld %4ld %4ld %9.2Le  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nli, nre, nreLS, nge, hused, npe, nps);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld %4ld %4ld %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nli, nre, nreLS, nge, hused, npe, nps);
+#else
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld %4ld %4ld %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nli, nre, nreLS, nge, hused, npe, nps);
+#endif
+
+  }
+}
+
+/*
+ * Print some final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int netf, ncfn, ncfl;
+
+  IDAGetNumErrTestFails(mem, &netf);
+  IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  IDASpilsGetNumConvFails(mem, &ncfl);
+
+  printf("\nError test failures            = %ld\n", netf);
+  printf("Nonlinear convergence failures = %ld\n", ncfn);
+  printf("Linear convergence failures    = %ld\n", ncfl);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", id, funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", id, funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", id, funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/parallel/idasHeat2D_kry_bbd_p.out b/examples/idas/parallel/idasHeat2D_kry_bbd_p.out
new file mode 100644
index 0000000..8315b95
--- /dev/null
+++ b/examples/idas/parallel/idasHeat2D_kry_bbd_p.out
@@ -0,0 +1,58 @@
+idasHeat2D_kry_bbd_p: Heat equation, parallel example problem for IDA
+                  Discretized heat equation on 2D unit square.
+                  Zero boundary conditions, polynomial initial conditions.
+                  Mesh dimensions: 10 x 10        Total system size: 100
+
+Subgrid dimensions: 5 x 5         Processor array: 2 x 2
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+SUPPRESSALG = TRUE to suppress local error testing on all boundary components. 
+Linear solver: IDASPGMR.    Preconditioner: IDABBDPRE - Banded-block-diagonal.
+
+
+Case 1. 
+   Difference quotient half-bandwidths = 5   Retained matrix half-bandwidths = 1 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nli   nre nreLS nge   h      npe nps
+ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+  0.01   8.24107e-01  2   12   14    7    14    7   96  2.56e-03    8  21
+  0.02   6.88124e-01  3   15   18   12    18   12   96  5.12e-03    8  30
+  0.04   4.70754e-01  3   18   24   22    24   22  108  6.58e-03    9  46
+  0.08   2.16600e-01  3   22   29   30    29   30  108  1.32e-02    9  59
+  0.16   4.56595e-02  4   28   37   43    37   43  120  2.63e-02   10  80
+  0.32   2.10959e-03  4   35   45   59    45   59  120  2.37e-02   10 104
+  0.64   5.53681e-05  1   40   54   71    54   71  156  1.90e-01   13 125
+  1.28   1.55972e-19  1   42   56   71    56   71  180  7.58e-01   15 127
+  2.56   3.38647e-21  1   43   57   71    57   71  192  1.52e+00   16 128
+  5.12   8.60743e-21  1   44   58   71    58   71  204  3.03e+00   17 129
+ 10.24   1.66301e-20  1   45   59   71    59   71  216  6.06e+00   18 130
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
+
+
+Case 2. 
+   Difference quotient half-bandwidths = 1   Retained matrix half-bandwidths = 1 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nli   nre nreLS nge   h      npe nps
+ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+  0.01   8.24111e-01  2   12   14    7    14    7   32  2.56e-03    8  21
+  0.02   6.88118e-01  3   15   18   12    18   12   32  5.12e-03    8  30
+  0.04   4.70932e-01  3   19   23   20    23   20   36  1.02e-02    9  43
+  0.08   2.16547e-01  3   23   27   32    27   32   36  1.02e-02    9  59
+  0.16   4.52248e-02  4   27   33   44    33   44   40  2.05e-02   10  77
+  0.32   2.18677e-03  3   34   41   67    41   67   44  4.10e-02   11 108
+  0.64   4.88467e-19  1   39   49   86    49   86   52  1.64e-01   13 135
+  1.28   5.39822e-19  1   41   51   86    51   86   60  6.55e-01   15 137
+  2.56   7.41945e-18  1   42   52   86    52   86   64  1.31e+00   16 138
+  5.12   6.10808e-17  1   43   53   86    53   86   68  2.62e+00   17 139
+ 10.24   4.05358e-16  1   44   54   86    54   86   72  5.24e+00   18 140
+
+Error test failures            = 0
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
diff --git a/examples/idas/parallel/idasHeat2D_kry_p.c b/examples/idas/parallel/idasHeat2D_kry_p.c
new file mode 100644
index 0000000..68c9b3c
--- /dev/null
+++ b/examples/idas/parallel/idasHeat2D_kry_p.c
@@ -0,0 +1,892 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for IDA: 2D heat equation, parallel, GMRES.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version uses the Krylov solver IDASpgmr.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y).
+ * The PDE is treated with central differences on a uniform MX x MY
+ * grid. The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = MX * MY. Here MX = MY = 10.
+ *
+ * The system is actually implemented on submeshes, processor by
+ * processor, with an MXSUB by MYSUB mesh on each of NPEX * NPEY
+ * processors.
+ *
+ * The system is solved with IDA using the Krylov linear solver
+ * IDASPGMR. The preconditioner uses the diagonal elements of the
+ * Jacobian only. Routines for preconditioning, required by
+ * IDASPGMR, are supplied here. The constraints u >= 0 are posed
+ * for all components. Local error testing on the boundary values
+ * is suppressed. Output is taken at t = 0, .01, .02, .04,
+ * ..., 10.24.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+#define NOUT         11             /* Number of output times */
+
+#define NPEX         2              /* No. PEs in x direction of PE array */
+#define NPEY         2              /* No. PEs in y direction of PE array */
+                                    /* Total no. PEs = NPEX*NPEY */
+#define MXSUB        5              /* No. x points per subgrid */
+#define MYSUB        5              /* No. y points per subgrid */
+
+#define MX           (NPEX*MXSUB)   /* MX = number of x mesh points */
+#define MY           (NPEY*MYSUB)   /* MY = number of y mesh points */
+                                    /* Spatial mesh is MX by MY */
+
+typedef struct {  
+  long int thispe, mx, my, ixsub, jysub, npex, npey, mxsub, mysub;
+  realtype    dx, dy, coeffx, coeffy, coeffxy;
+  realtype    uext[(MXSUB+2)*(MYSUB+2)];
+  N_Vector    pp;    /* vector of diagonal preconditioner elements */
+  MPI_Comm    comm;
+} *UserData;
+
+/* User-supplied residual function and supporting routines */
+
+int resHeat(realtype tt, 
+            N_Vector uu, N_Vector up, N_Vector rr, 
+            void *user_data);
+
+static int rescomm(N_Vector uu, N_Vector up, void *user_data);
+
+static int reslocal(realtype tt, N_Vector uu, N_Vector up, 
+                    N_Vector res,  void *user_data);
+
+static int BSend(MPI_Comm comm, long int thispe, long int ixsub, long int jysub,
+                 long int dsizex, long int dsizey, realtype uarray[]);
+
+static int BRecvPost(MPI_Comm comm, MPI_Request request[], long int thispe,
+                     long int ixsub, long int jysub,
+                     long int dsizex, long int dsizey,
+                     realtype uext[], realtype buffer[]);
+
+static int BRecvWait(MPI_Request request[], long int ixsub, long int jysub,
+                     long int dsizex, realtype uext[], realtype buffer[]);
+
+/* User-supplied preconditioner routines */
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec,
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp);
+
+int PsetupHeat(realtype tt, 
+               N_Vector yy, N_Vector yp, N_Vector rr, 
+               realtype c_j, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Private function to check function return values */
+
+static int InitUserData(int thispe, MPI_Comm comm, UserData data);
+
+static int SetInitialProfile(N_Vector uu, N_Vector up, N_Vector id,
+                             N_Vector res, UserData data);
+
+static void PrintHeader(long int Neq, realtype rtol, realtype atol);
+
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu);
+
+static void PrintFinalStats(void *mem);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *mem;
+  UserData data;
+  int iout, thispe, ier, npes;
+  long int Neq, local_N;
+  realtype rtol, atol, t0, t1, tout, tret;
+  N_Vector uu, up, constraints, id, res;
+
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = id = res = NULL;
+
+  /* Get processor number and total number of pe's. */
+
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &thispe);
+  
+  if (npes != NPEX*NPEY) {
+    if (thispe == 0)
+      fprintf(stderr, 
+              "\nMPI_ERROR(0): npes = %d is not equal to NPEX*NPEY = %d\n", 
+              npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+  
+  /* Set local length local_N and global length Neq. */
+
+  local_N = MXSUB*MYSUB;
+  Neq     = MX * MY;
+  
+  /* Allocate and initialize the data structure and N-vectors. */
+
+  data = (UserData) malloc(sizeof *data);
+  data->pp = NULL;
+  if(check_flag((void *)data, "malloc", 2, thispe)) 
+    MPI_Abort(comm, 1);
+
+  uu = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)uu, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  up = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)up, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  res = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)res, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  constraints = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)constraints, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  id = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)id, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  /* An N-vector to hold preconditioner. */
+  data->pp = N_VNew_Parallel(comm, local_N, Neq);
+  if(check_flag((void *)data->pp, "N_VNew_Parallel", 0, thispe)) 
+    MPI_Abort(comm, 1);
+
+  InitUserData(thispe, comm, data);
+  
+  /* Initialize the uu, up, id, and res profiles. */
+
+  SetInitialProfile(uu, up, id, res, data);
+  
+  /* Set constraints to all 1's for nonnegative solution values. */
+
+  N_VConst(ONE, constraints);
+  
+  t0 = ZERO; t1 = RCONST(0.01);
+  
+  /* Scalar relative and absolute tolerance. */
+
+  rtol = ZERO;
+  atol = RCONST(1.0e-3);
+
+  /* Call IDACreate and IDAMalloc to initialize solution. */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetSuppressAlg(mem, TRUE);
+  if(check_flag(&ier, "IDASetSuppressAlg", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetId(mem, id);
+  if(check_flag(&ier, "IDASetId", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1, thispe)) MPI_Abort(comm, 1);
+  N_VDestroy_Parallel(constraints);  
+
+  ier = IDAInit(mem, resHeat, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1, thispe)) MPI_Abort(comm, 1);
+  
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Call IDASpgmr to specify the linear solver. */
+
+  ier = IDASpgmr(mem, 0);
+  if(check_flag(&ier, "IDASpgmr", 1, thispe)) MPI_Abort(comm, 1);
+
+  ier = IDASpilsSetPreconditioner(mem, PsetupHeat, PsolveHeat);
+  if(check_flag(&ier, "IDASpilsSetPreconditioner", 1, thispe)) MPI_Abort(comm, 1);
+
+  /* Print output heading (on processor 0 only) and intial solution  */
+  
+  if (thispe == 0) PrintHeader(Neq, rtol, atol);
+  PrintOutput(thispe, mem, t0, uu); 
+  
+  /* Loop over tout, call IDASolve, print output. */
+
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) {
+
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1, thispe)) MPI_Abort(comm, 1);
+
+    PrintOutput(thispe, mem, tret, uu);
+
+  }
+  
+  /* Print remaining counters. */
+
+  if (thispe == 0) PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_Parallel(id);
+  N_VDestroy_Parallel(res);
+  N_VDestroy_Parallel(up);
+  N_VDestroy_Parallel(uu);
+
+  N_VDestroy_Parallel(data->pp);
+  free(data);
+
+  MPI_Finalize();
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resHeat: heat equation system residual function                       
+ * This uses 5-point central differencing on the interior points, and    
+ * includes algebraic equations for the boundary values.                 
+ * So for each interior point, the residual component has the form       
+ *    res_i = u'_i - (central difference)_i                              
+ * while for each boundary point, it is res_i = u_i. 
+ *                    
+ * This parallel implementation uses several supporting routines. 
+ * First a call is made to rescomm to do communication of subgrid boundary
+ * data into array uext.  Then reslocal is called to compute the residual
+ * on individual processors and their corresponding domains.  The routines
+ * BSend, BRecvPost, and BREcvWait handle interprocessor communication
+ * of uu required to calculate the residual. 
+ */
+
+int resHeat(realtype tt, 
+            N_Vector uu, N_Vector up, N_Vector rr, 
+            void *user_data)
+{
+  int retval;
+  
+  /* Call rescomm to do inter-processor communication. */
+  retval = rescomm(uu, up, user_data);
+
+  /* Call reslocal to calculate res. */
+  retval = reslocal(tt, uu, up, rr, user_data);
+  
+  return(0);
+
+}
+
+/*
+ * PsetupHeat: setup for diagonal preconditioner for heatsk.    
+ *                                                                 
+ * The optional user-supplied functions PsetupHeat and          
+ * PsolveHeat together must define the left preconditoner        
+ * matrix P approximating the system Jacobian matrix               
+ *                   J = dF/du + cj*dF/du'                         
+ * (where the DAE system is F(t,u,u') = 0), and solve the linear   
+ * systems P z = r.   This is done in this case by keeping only    
+ * the diagonal elements of the J matrix above, storing them as    
+ * inverses in a vector pp, when computed in PsetupHeat, for    
+ * subsequent use in PsolveHeat.                                 
+ *                                                                 
+ * In this instance, only cj and data (user data structure, with    
+ * pp etc.) are used from the PsetupHeat argument list.         
+ *
+ */
+
+int PsetupHeat(realtype tt, 
+               N_Vector yy, N_Vector yp, N_Vector rr, 
+               realtype c_j, void *user_data,
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *ppv, pelinv;
+  long int lx, ly, ixbegin, ixend, jybegin, jyend, locu, mxsub, mysub;
+  long int ixsub, jysub, npex, npey;
+  UserData data;
+
+  data = (UserData) user_data;
+
+  ppv = N_VGetArrayPointer_Parallel(data->pp);
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  mxsub = data->mxsub;
+  mysub = data->mysub;
+  npex  = data->npex;
+  npey  = data->npey;
+  
+  /* Initially set all pp elements to one. */
+  N_VConst(ONE, data->pp);
+  
+  /* Prepare to loop over subgrid. */
+  ixbegin = 0;
+  ixend   = mxsub-1;
+  jybegin = 0;
+  jyend   = mysub-1;
+  if (ixsub == 0) ixbegin++; if (ixsub == npex-1) ixend--;
+  if (jysub == 0) jybegin++; if (jysub == npey-1) jyend--;
+  pelinv = ONE/(c_j + data->coeffxy); 
+  
+  /* Load the inverse of the preconditioner diagonal elements
+     in loop over all the local subgrid. */
+  
+  for (ly = jybegin; ly <=jyend; ly++) {
+    for (lx = ixbegin; lx <= ixend; lx++) {
+      locu  = lx + ly*mxsub;
+      ppv[locu] = pelinv;
+    }
+  }
+
+  return(0);
+
+}
+
+/*
+ * PsolveHeat: solve preconditioner linear system.              
+ * This routine multiplies the input vector rvec by the vector pp 
+ * containing the inverse diagonal Jacobian elements (previously  
+ * computed in PsetupHeat), returning the result in zvec.      
+ */
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec,
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp)
+{
+  UserData data;
+
+  data = (UserData) user_data;
+  
+  N_VProd(data->pp, rvec, zvec);
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * SUPPORTING FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+
+/* 
+ * rescomm routine.  This routine performs all inter-processor
+ * communication of data in u needed to calculate G.                 
+ */
+
+static int rescomm(N_Vector uu, N_Vector up, void *user_data)
+{
+  UserData data;
+  realtype *uarray, *uext, buffer[2*MYSUB];
+  MPI_Comm comm;
+  long int thispe, ixsub, jysub, mxsub, mysub;
+  MPI_Request request[4];
+  
+  data = (UserData) user_data;
+  uarray = N_VGetArrayPointer_Parallel(uu);
+  
+  /* Get comm, thispe, subgrid indices, data sizes, extended array uext. */
+  comm = data->comm;  thispe = data->thispe;
+  ixsub = data->ixsub;   jysub = data->jysub;
+  mxsub = data->mxsub;   mysub = data->mysub;
+  uext = data->uext;
+  
+  /* Start receiving boundary data from neighboring PEs. */
+  BRecvPost(comm, request, thispe, ixsub, jysub, mxsub, mysub, uext, buffer);
+  
+  /* Send data from boundary of local grid to neighboring PEs. */
+  BSend(comm, thispe, ixsub, jysub, mxsub, mysub, uarray);
+  
+  /* Finish receiving boundary data from neighboring PEs. */
+  BRecvWait(request, ixsub, jysub, mxsub, uext, buffer);
+
+  return(0);
+  
+}
+
+/*
+ * reslocal routine.  Compute res = F(t, uu, up).  This routine assumes
+ * that all inter-processor communication of data needed to calculate F
+ * has already been done, and that this data is in the work array uext.  
+ */
+
+static int reslocal(realtype tt, 
+                    N_Vector uu, N_Vector up, N_Vector rr,
+                    void *user_data)
+{
+  realtype *uext, *uuv, *upv, *resv;
+  realtype termx, termy, termctr;
+  long int lx, ly, offsetu, offsetue, locu, locue;
+  long int ixsub, jysub, mxsub, mxsub2, mysub, npex, npey;
+  long int ixbegin, ixend, jybegin, jyend;
+  UserData data;
+  
+  /* Get subgrid indices, array sizes, extended work array uext. */
+  
+  data = (UserData) user_data;
+  uext = data->uext;
+  uuv = N_VGetArrayPointer_Parallel(uu);
+  upv = N_VGetArrayPointer_Parallel(up);
+  resv = N_VGetArrayPointer_Parallel(rr);
+  ixsub = data->ixsub; jysub = data->jysub;
+  mxsub = data->mxsub; mxsub2 = data->mxsub + 2;
+  mysub = data->mysub; npex = data->npex; npey = data->npey;
+  
+  /* Initialize all elements of rr to uu. This sets the boundary
+     elements simply without indexing hassles. */
+  
+  N_VScale(ONE, uu, rr);
+  
+  /* Copy local segment of u vector into the working extended array uext.
+     This completes uext prior to the computation of the rr vector.     */
+  
+  offsetu = 0;
+  offsetue = mxsub2 + 1;
+  for (ly = 0; ly < mysub; ly++) {
+    for (lx = 0; lx < mxsub; lx++) uext[offsetue+lx] = uuv[offsetu+lx];
+    offsetu = offsetu + mxsub;
+    offsetue = offsetue + mxsub2;
+  }
+  
+  /* Set loop limits for the interior of the local subgrid. */
+  
+  ixbegin = 0;
+  ixend   = mxsub-1;
+  jybegin = 0;
+  jyend   = mysub-1;
+  if (ixsub == 0) ixbegin++; if (ixsub == npex-1) ixend--;
+  if (jysub == 0) jybegin++; if (jysub == npey-1) jyend--;
+  
+  /* Loop over all grid points in local subgrid. */
+
+  for (ly = jybegin; ly <=jyend; ly++) {
+    for (lx = ixbegin; lx <= ixend; lx++) {
+      locu  = lx + ly*mxsub;
+      locue = (lx+1) + (ly+1)*mxsub2;
+      termx = data->coeffx *(uext[locue-1]      + uext[locue+1]);
+      termy = data->coeffy *(uext[locue-mxsub2] + uext[locue+mxsub2]);
+      termctr = data->coeffxy*uext[locue];
+      resv[locu] = upv[locu] - (termx + termy - termctr);
+   }
+  }
+  return(0);
+
+}
+
+/*
+ * Routine to send boundary data to neighboring PEs.                     
+ */
+
+static int BSend(MPI_Comm comm, long int thispe, long int ixsub, long int jysub,
+                 long int dsizex, long int dsizey, realtype uarray[])
+{
+  long int ly, offsetu;
+  realtype bufleft[MYSUB], bufright[MYSUB];
+
+  /* If jysub > 0, send data from bottom x-line of u. */
+  
+  if (jysub != 0)
+    MPI_Send(&uarray[0], dsizex, PVEC_REAL_MPI_TYPE, thispe-NPEX, 0, comm);
+  
+  /* If jysub < NPEY-1, send data from top x-line of u. */
+  
+  if (jysub != NPEY-1) {
+    offsetu = (MYSUB-1)*dsizex;
+    MPI_Send(&uarray[offsetu], dsizex, PVEC_REAL_MPI_TYPE, 
+             thispe+NPEX, 0, comm);
+  }
+  
+  /* If ixsub > 0, send data from left y-line of u (via bufleft). */
+  
+  if (ixsub != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*dsizex;
+      bufleft[ly] = uarray[offsetu];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, thispe-1, 0, comm);   
+  }
+  
+  /* If ixsub < NPEX-1, send data from right y-line of u (via bufright). */
+  
+  if (ixsub != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetu = ly*MXSUB + (MXSUB-1);
+      bufright[ly] = uarray[offsetu];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, thispe+1, 0, comm);   
+  }
+
+  return(0);
+
+}
+
+/*
+ * Routine to start receiving boundary data from neighboring PEs.
+ * Notes:
+ *   1) buffer should be able to hold 2*MYSUB realtype entries, should be
+ *      passed to both the BRecvPost and BRecvWait functions, and should not
+ *      be manipulated between the two calls.
+ *   2) request should have 4 entries, and should be passed in 
+ *      both calls also. 
+ */
+
+static int BRecvPost(MPI_Comm comm, MPI_Request request[], long int thispe,
+                     long int ixsub, long int jysub,
+                     long int dsizex, long int dsizey,
+                     realtype uext[], realtype buffer[])
+{
+  long int offsetue;
+  /* Have bufleft and bufright use the same buffer. */
+  realtype *bufleft = buffer, *bufright = buffer+MYSUB;
+  
+  /* If jysub > 0, receive data for bottom x-line of uext. */
+  if (jysub != 0)
+    MPI_Irecv(&uext[1], dsizex, PVEC_REAL_MPI_TYPE,
+              thispe-NPEX, 0, comm, &request[0]);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of uext. */
+  if (jysub != NPEY-1) {
+    offsetue = (1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&uext[offsetue], dsizex, PVEC_REAL_MPI_TYPE,
+              thispe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If ixsub > 0, receive data for left y-line of uext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              thispe-1, 0, comm, &request[2]);
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of uext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              thispe+1, 0, comm, &request[3]);
+  }
+
+  return(0);
+  
+}
+
+/*
+ * Routine to finish receiving boundary data from neighboring PEs.
+ * Notes:
+ *   1) buffer should be able to hold 2*MYSUB realtype entries, should be
+ *      passed to both the BRecvPost and BRecvWait functions, and should not
+ *      be manipulated between the two calls.
+ *   2) request should have four entries, and should be passed in both 
+ *      calls also. 
+ */
+
+static int BRecvWait(MPI_Request request[], long int ixsub, long int jysub,
+                     long int dsizex, realtype uext[], realtype buffer[])
+{
+  long int ly, dsizex2, offsetue;
+  realtype *bufleft = buffer, *bufright = buffer+MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2;
+  
+  /* If jysub > 0, receive data for bottom x-line of uext. */
+  if (jysub != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If jysub < NPEY-1, receive data for top x-line of uext. */
+  if (jysub != NPEY-1)
+    MPI_Wait(&request[1],&status);
+  
+  /* If ixsub > 0, receive data for left y-line of uext (via bufleft). */
+  if (ixsub != 0) {
+    MPI_Wait(&request[2],&status);
+    
+    /* Copy the buffer to uext. */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetue = (ly+1)*dsizex2;
+      uext[offsetue] = bufleft[ly];
+    }
+  }
+  
+  /* If ixsub < NPEX-1, receive data for right y-line of uext (via bufright). */
+  if (ixsub != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+    
+    /* Copy the buffer to uext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetue = (ly+2)*dsizex2 - 1;
+      uext[offsetue] = bufright[ly];
+    }
+  }
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * InitUserData initializes the user's data block data. 
+ */
+
+static int InitUserData(int thispe, MPI_Comm comm, UserData data)
+{
+  data->thispe = thispe;
+  data->dx = ONE/(MX-ONE);       /* Assumes a [0,1] interval in x. */
+  data->dy = ONE/(MY-ONE);       /* Assumes a [0,1] interval in y. */
+  data->coeffx  = ONE/(data->dx * data->dx);
+  data->coeffy  = ONE/(data->dy * data->dy);
+  data->coeffxy = TWO/(data->dx * data->dx) + TWO/(data->dy * data->dy) ;
+  data->jysub   = thispe/NPEX;
+  data->ixsub   = thispe - data->jysub * NPEX;
+  data->npex    = NPEX;
+  data->npey    = NPEY;
+  data->mx      = MX;
+  data->my      = MY;
+  data->mxsub = MXSUB;
+  data->mysub = MYSUB;
+  data->comm    = comm;
+  return(0);
+
+}
+
+/*
+ * SetInitialProfile sets the initial values for the problem. 
+ */
+
+static int SetInitialProfile(N_Vector uu, N_Vector up,  N_Vector id, 
+                             N_Vector res, UserData data)
+{
+  long int i, iloc, j, jloc, offset, loc, ixsub, jysub;
+  long int ixbegin, ixend, jybegin, jyend;
+  realtype xfact, yfact, *udata, *iddata, dx, dy;
+  
+  /* Initialize uu. */ 
+
+  udata = N_VGetArrayPointer_Parallel(uu);
+  iddata = N_VGetArrayPointer_Parallel(id);
+  
+  /* Set mesh spacings and subgrid indices for this PE. */
+  dx = data->dx;
+  dy = data->dy;
+  ixsub = data->ixsub;
+  jysub = data->jysub;
+  
+  /* Set beginning and ending locations in the global array corresponding 
+     to the portion of that array assigned to this processor. */
+  ixbegin = MXSUB*ixsub;
+  ixend   = MXSUB*(ixsub+1) - 1;
+  jybegin = MYSUB*jysub;
+  jyend   = MYSUB*(jysub+1) - 1;
+  
+  /* Loop over the local array, computing the initial profile value.
+     The global indices are (i,j) and the local indices are (iloc,jloc).
+     Also set the id vector to zero for boundary points, one otherwise. */
+  
+  N_VConst(ONE,id);
+  for (j = jybegin, jloc = 0; j <= jyend; j++, jloc++) {
+    yfact = data->dy*j;
+    offset= jloc*MXSUB;
+    for (i = ixbegin, iloc = 0; i <= ixend; i++, iloc++) {
+      xfact = data->dx * i;
+      loc = offset + iloc;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+      if (i == 0 || i == MX-1 || j == 0 || j == MY-1) iddata[loc] = ZERO;
+    }
+  }
+  
+  /* Initialize up. */
+  
+  N_VConst(ZERO, up);    /* Initially set up = 0. */
+  
+  /* resHeat sets res to negative of ODE RHS values at interior points. */
+  resHeat(ZERO, uu, up, res, data);
+  
+  /* Copy -res into up to get correct initial up values. */
+  N_VScale(-ONE, res, up);
+  
+  return(0);
+}
+
+/*
+ * Print first lines of output and table heading
+ */
+
+static void PrintHeader(long int Neq, realtype rtol, realtype atol)
+{ 
+  printf("\nidasHeat2D_p: Heat equation, parallel example problem for IDA\n");
+  printf("                Discretized heat equation on 2D unit square.\n");
+  printf("                Zero boundary conditions,");
+  printf(" polynomial initial conditions.\n");
+  printf("                Mesh dimensions: %d x %d", MX, MY);
+  printf("        Total system size: %ld\n\n", Neq);
+  printf("Subgrid dimensions: %d x %d", MXSUB, MYSUB);
+  printf("        Processor array: %d x %d\n", NPEX, NPEY);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Constraints set to force all solution components >= 0. \n");
+  printf("SUPPRESSALG = TRUE to suppress local error testing on ");
+  printf("all boundary components. \n");
+  printf("Linear solver: IDASPGMR  ");
+  printf("Preconditioner: diagonal elements only.\n"); 
+  
+  /* Print output table heading and initial line of table. */
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time     umax       k  nst  nni  nli   nre   nreLS    h      npe nps\n");
+  printf("----------------------------------------------------------------------\n");
+}
+
+/*
+ * PrintOutput: print max norm of solution and current solver statistics
+ */
+
+static void PrintOutput(int id, void *mem, realtype t, N_Vector uu)
+{
+  realtype hused, umax;
+  long int nst, nni, nje, nre, nreLS, nli, npe, nps;
+  int kused, ier;
+
+  umax = N_VMaxNorm(uu);
+
+  if (id == 0) {
+
+    ier = IDAGetLastOrder(mem, &kused);
+    check_flag(&ier, "IDAGetLastOrder", 1, id);
+    ier = IDAGetNumSteps(mem, &nst);
+    check_flag(&ier, "IDAGetNumSteps", 1, id);
+    ier = IDAGetNumNonlinSolvIters(mem, &nni);
+    check_flag(&ier, "IDAGetNumNonlinSolvIters", 1, id);
+    ier = IDAGetNumResEvals(mem, &nre);
+    check_flag(&ier, "IDAGetNumResEvals", 1, id);
+    ier = IDAGetLastStep(mem, &hused);
+    check_flag(&ier, "IDAGetLastStep", 1, id);
+    ier = IDASpilsGetNumJtimesEvals(mem, &nje);
+    check_flag(&ier, "IDASpilsGetNumJtimesEvals", 1, id);
+    ier = IDASpilsGetNumLinIters(mem, &nli);
+    check_flag(&ier, "IDASpilsGetNumLinIters", 1, id);
+    ier = IDASpilsGetNumResEvals(mem, &nreLS);
+    check_flag(&ier, "IDASpilsGetNumResEvals", 1, id);
+    ier = IDASpilsGetNumPrecEvals(mem, &npe);
+    check_flag(&ier, "IDASpilsGetPrecEvals", 1, id);
+    ier = IDASpilsGetNumPrecSolves(mem, &nps);
+    check_flag(&ier, "IDASpilsGetNumPrecSolves", 1, id);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)  
+    printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2Le  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)  
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#else
+    printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+           t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#endif
+
+  }
+}
+
+/*
+ * Print some final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  long int netf, ncfn, ncfl;
+
+  IDAGetNumErrTestFails(mem, &netf);
+  IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  IDASpilsGetNumConvFails(mem, &ncfl);
+
+  printf("\nError test failures            = %ld\n", netf);
+  printf("Nonlinear convergence failures = %ld\n", ncfn);
+  printf("Linear convergence failures    = %ld\n", ncfl);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n", 
+              id, funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n", 
+            id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/idas/parallel/idasHeat2D_kry_p.out b/examples/idas/parallel/idasHeat2D_kry_p.out
new file mode 100644
index 0000000..b513617
--- /dev/null
+++ b/examples/idas/parallel/idasHeat2D_kry_p.out
@@ -0,0 +1,32 @@
+
+idasHeat2D_kry_p: Heat equation, parallel example problem for IDA
+              Discretized heat equation on 2D unit square.
+              Zero boundary conditions, polynomial initial conditions.
+              Mesh dimensions: 10 x 10        Total system size: 100
+
+Subgrid dimensions: 5 x 5        Processor array: 2 x 2
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+SUPPRESSALG = TRUE to suppress local error testing on all boundary components. 
+Linear solver: IDASPGMR  Preconditioner: diagonal elements only.
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nli   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.00   9.75461e-01  0    0    0    0     0     0   0.00e+00    0   0
+  0.01   8.24106e-01  2   12   14    7    14     7   2.56e-03    8  21
+  0.02   6.88134e-01  3   15   18   12    18    12   5.12e-03    8  30
+  0.04   4.70711e-01  3   18   24   21    24    21   6.58e-03    9  45
+  0.08   2.16509e-01  3   22   29   30    29    30   1.32e-02    9  59
+  0.16   4.57687e-02  4   28   36   44    36    44   1.32e-02    9  80
+  0.32   2.09938e-03  4   35   44   67    44    67   2.63e-02   10 111
+  0.64   5.54028e-21  1   39   51   77    51    77   1.05e-01   12 128
+  1.28   3.85107e-20  1   41   53   77    53    77   4.21e-01   14 130
+  2.56   5.00523e-20  1   43   55   77    55    77   1.69e+00   16 132
+  5.12   1.50906e-19  1   44   56   77    56    77   3.37e+00   17 133
+ 10.24   4.63224e-19  1   45   57   77    57    77   6.74e+00   18 134
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
diff --git a/examples/idas/serial/CMakeLists.txt b/examples/idas/serial/CMakeLists.txt
new file mode 100644
index 0000000..267bfd7
--- /dev/null
+++ b/examples/idas/serial/CMakeLists.txt
@@ -0,0 +1,226 @@
+# ---------------------------------------------------------------
+# $Revision: 4866 $
+# $Date: 2016-08-18 16:07:58 -0700 (Thu, 18 Aug 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for IDAS serial examples
+#
+# LEBanks 3/25/2013
+#    Added SUPERLUMT logic.
+
+
+# Add variable IDAS_examples with the names of the serial IDAS examples
+
+SET(IDAS_examples
+  idasAkzoNob_ASAi_dns
+  idasAkzoNob_dns
+  idasFoodWeb_bnd
+  idasHeat2D_bnd
+  idasHeat2D_kry
+  idasHessian_ASA_FSA
+  idasKrylovDemo_ls
+  idasRoberts_ASAi_dns
+  idasRoberts_dns
+  "idasRoberts_FSA_dns\;-sensi stg t"
+  idasSlCrank_dns
+  idasSlCrank_FSA_dns
+  )
+
+# Add variable IDAS_examples_BL with the names of the serial IDAS examples
+# that use Lapack
+
+SET(IDAS_examples_BL
+  )
+  
+SET(IDAS_examples_SUPERLUMT
+  idasRoberts_sps
+  idasRoberts_ASAi_sps
+  "idasRoberts_FSA_sps\;-sensi stg t"
+  )
+
+SET(IDAS_examples_KLU
+  idasRoberts_klu
+  idasRoberts_ASAi_klu
+  "idasRoberts_FSA_klu\;-sensi stg t"
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDAS_LIB sundials_idas_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(IDAS_LIB sundials_idas_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${IDAS_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  # quote list to retain integrity
+  LIST(APPEND IDAS_examples "${IDAS_examples_SUPERLUMT}")
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND IDAS_examples "${IDAS_examples_KLU}")
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+# Add the build and install targets for each IDAS example
+
+# SGS is there a way to query CMAKE variable to get added executables 
+# rather than keeping our own list?
+SET(ADDED_EXECUTABLES "")
+FOREACH(example_tuple ${IDAS_examples})
+  LIST(GET example_tuple 0 example)
+
+  # Only need to add the executable once
+  LIST(FIND ADDED_EXECUTABLES ${example} index)
+  IF(index EQUAL -1)
+    LIST(APPEND ADDED_EXECUTABLES ${example})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  ENDIF(index EQUAL -1)
+
+  LIST(LENGTH example_tuple n)
+  IF(n EQUAL 2)
+    LIST(GET example_tuple 1 test_args)
+    STRING(REGEX REPLACE " " "_" test_name ${example}_${test_args})
+    SUNDIALS_ADD_TEST(${test_name} ${example} TEST_ARGS ${test_args})
+  ELSE()
+    SUNDIALS_ADD_TEST(${example} ${example})
+  ENDIF()
+
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${IDAS_examples})
+
+# If Lapack support is enabled, add the build and install targets for
+# the examples using Lapack
+IF(LAPACK_FOUND)
+  FOREACH(example ${IDAS_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${IDAS_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+# If SUPERLUMT support is enabled, add the build and install targets for
+# the examples using SUPERLUMT
+#IF(SUPERLUMT_FOUND)
+#  FOREACH(example ${IDAS_examples_SUPERLUMT})
+#    ADD_EXECUTABLE(${example} ${example}.c)
+#    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+#    SUNDIALS_ADD_TEST(${example} ${example})
+#    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+#    IF(EXAMPLES_INSTALL)
+#      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/serial)
+#    ENDIF(EXAMPLES_INSTALL)
+#  ENDFOREACH(example ${IDAS_examples_SUPERLUMT})
+#ENDIF(SUPERLUMT_FOUND)
+
+# If KLU support is enabled, add the build and install targets for
+# the examples using KLU
+#IF(KLU_FOUND)
+#  FOREACH(example ${IDAS_examples_KLU})
+#    ADD_EXECUTABLE(${example} ${example}.c)
+#    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+#    SUNDIALS_ADD_TEST(${example} ${example})
+#    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+#    IF(EXAMPLES_INSTALL)
+#      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/serial)
+#    ENDIF(EXAMPLES_INSTALL)
+#  ENDFOREACH(example ${IDAS_examples_KLU})
+#ENDIF(KLU_FOUND)
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/serial)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "IDAS")
+  SET(SOLVER_LIB "sundials_idas")
+  FOREACH(example_tuple ${IDAS_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${IDAS_examples})
+
+  IF(LAPACK_FOUND)
+    LIST2STRING(IDAS_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  IF(KLU_FOUND)
+    #LIST2STRING(IDAS_examples_KLU EXAMPLES)
+  ENDIF(KLU_FOUND)
+
+  IF(SUPERLUMT_FOUND)
+    #LIST2STRING(IDAS_examples_SUPERLUMT EXAMPLES)
+  ENDIF(SUPERLUMT_FOUND)
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/idas/serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/idas/serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/idas/serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/idas/serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/idas/serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/idas/serial/README b/examples/idas/serial/README
new file mode 100644
index 0000000..b4a3169
--- /dev/null
+++ b/examples/idas/serial/README
@@ -0,0 +1,63 @@
+List of serial IDAS examples
+
+  idasAkzoNob_ASAi_dns  : adjoint sensitivity for the chemical Akzo-Nobel problem
+  idasAkzoNob_dns       : chemical Akzo-Nobel problem
+  idasFoodWeb_bnd       : 2-D food web system, banded Jacobian
+  idasHeat2D_bnd        : 2-D heat equation, banded Jacobian
+  idasHeat2D_kry        : 2-D heat equation, diagonal preconditioner
+  idasHessian_ASA_FSA   : computation of Hessian for Robertson kinetics system
+  idasKrylovDemo_ls     : demonstration program with 3 Krylov solvers
+  idasRoberts_ASAi_dns  : adjoint sensitivity for Robertson kinetics system
+  idasRoberts_dns       : 3-species Robertson kinetics system with user Jacobian
+  idasRoberts_klu       : Robertson system with KLU sparse linear solver
+  idasRoberts_sps       : Robertson system with SuperLUMT sparse linear solver
+  idasRoberts_FSA_dns   : forward sensitivity for Robertson kinetics system
+  idasSlCrank_dns       : slider-crank simulation
+  idasSlCrank_FSA_dns   : forward sensitivity for slider-crank
+
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/idas/serial/idasAkzoNob_ASAi_dns.c b/examples/idas/serial/idasAkzoNob_ASAi_dns.c
new file mode 100644
index 0000000..c05d1d6
--- /dev/null
+++ b/examples/idas/serial/idasAkzoNob_ASAi_dns.c
@@ -0,0 +1,446 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban and Cosmin Petra @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Adjoint sensitivity example problem
+ *
+ * This IVP is a stiff system of 6 non-linear DAEs of index 1. The 
+ * problem originates from Akzo Nobel Central research in Arnhern, 
+ * The Netherlands, and describes a chemical process in which 2 
+ * species are mixed, while carbon dioxide is continuously added.
+ * See http://pitagora.dm.uniba.it/~testset/report/chemakzo.pdf  
+ * 
+ * IDAS also computes the sensitivities with respect to initial
+ * conditions of the following quantity:
+ *   G = int_t0^t1 y1 dt
+ * The sensitivity of G is the solution of the adjoint system at t0. 
+ * -----------------------------------------------------------------
+ */
+ 
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+ 
+#include <idas/idas.h>
+#include <idas/idas_dense.h>
+#include <sundials/sundials_math.h>
+#include <nvector/nvector_serial.h>
+
+/* Accessor macros */
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component */
+
+/* Problem Constants */
+#define NEQ 6
+#define T0 RCONST(0.0)
+#define TF RCONST(180.0)
+
+#define RTOL  RCONST(1.0e-08)
+#define ATOL  RCONST(1.0e-10)
+#define RTOLB RCONST(1.0e-06)
+#define ATOLB RCONST(1.0e-08)
+#define RTOLQ RCONST(1.0e-10)
+#define ATOLQ RCONST(1.0e-12)
+
+
+#define ZERO  RCONST(0.0)
+#define HALF  RCONST(0.5)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+#define STEPS 150
+
+typedef struct {
+  realtype k1, k2, k3, k4;
+  realtype K, klA, Ks, pCO2, H;
+} *UserData;
+
+static int res(realtype t, N_Vector yy, N_Vector yd, N_Vector resval, void *userdata);
+
+static int resB(realtype tt, 
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                void *user_dataB);
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, 
+              N_Vector qdot, void *user_data);
+
+static void PrintOutput(realtype tfinal, N_Vector yB, N_Vector ypB);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+
+/* Main program */
+int main()
+{
+  UserData data;
+  void *mem;
+  N_Vector yy, yp, rr, q;
+  N_Vector yB, ypB;
+  int ncheck, flag;
+  realtype time;
+  long int nst, nstB;
+  int indexB;
+    
+
+  mem = NULL;
+  yy = yp = NULL;
+
+  printf("\nAdjoint Sensitivity Example for Akzo-Nobel Chemical Kinetics\n");
+  printf("-------------------------------------------------------------\n");
+  printf("Sensitivity of G = int_t0^tf (y1) dt with respect to IC.\n");
+  printf("-------------------------------------------------------------\n\n");
+  /* Allocate user data. */
+  data = (UserData) malloc(sizeof(*data));
+
+  /* Fill user's data with the appropriate values for coefficients. */
+  data->k1 = RCONST(18.7);
+  data->k2 = RCONST(0.58);
+  data->k3 = RCONST(0.09);
+  data->k4 = RCONST(0.42);
+  data->K = RCONST(34.4);
+  data->klA = RCONST(3.3);
+  data->Ks = RCONST(115.83);
+  data->pCO2 = RCONST(0.9);
+  data->H = RCONST(737.0);
+
+  /* Allocate N-vectors. */
+  yy = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  yp = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+
+  /* Consistent IC for  y, y'. */
+#define y01 0.444
+#define y02 0.00123
+#define y03 0.00
+#define y04 0.007
+#define y05 0.0
+  Ith(yy,1) = RCONST(y01);
+  Ith(yy,2) = RCONST(y02);
+  Ith(yy,3) = RCONST(y03);
+  Ith(yy,4) = RCONST(y04);
+  Ith(yy,5) = RCONST(y05);
+  Ith(yy,6) = data->Ks * RCONST(y01) * RCONST(y04);
+
+  /* Get y' = - res(t0, y, 0) */
+  N_VConst(ZERO, yp);
+
+  rr = N_VNew_Serial(NEQ);
+  res(T0, yy, yp, rr, data);
+  N_VScale(-ONE, rr, yp);
+  N_VDestroy_Serial(rr);
+  
+ /* Create and initialize q0 for quadratures. */
+  q = N_VNew_Serial(1);
+  if (check_flag((void *)q, "N_VNew_Serial", 0)) return(1);
+  Ith(q,1) = ZERO;
+
+  /* Call IDACreate and IDAInit to initialize IDA memory */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  flag = IDAInit(mem, res, T0, yy, yp);
+  if(check_flag(&flag, "IDAInit", 1)) return(1);
+
+
+  /* Set tolerances. */
+  flag = IDASStolerances(mem, RTOL, ATOL);
+  if(check_flag(&flag, "IDASStolerances", 1)) return(1);
+
+  /* Attach user data. */
+  flag = IDASetUserData(mem, data);
+  if(check_flag(&flag, "IDASetUser", 1)) return(1);
+  
+  /* Attach linear solver. */
+  flag = IDADense(mem, NEQ);
+
+  /* Initialize QUADRATURE(S). */
+  flag = IDAQuadInit(mem, rhsQ, q);
+  if (check_flag(&flag, "IDAQuadInit", 1)) return(1);
+
+  /* Set tolerances and error control for quadratures. */
+  flag = IDAQuadSStolerances(mem, RTOLQ, ATOLQ);
+  if (check_flag(&flag, "IDAQuadSStolerances", 1)) return(1);
+
+  flag = IDASetQuadErrCon(mem, TRUE);
+  if (check_flag(&flag, "IDASetQuadErrCon", 1)) return(1);
+ 
+  /* Prepare ADJOINT. */
+  flag = IDAAdjInit(mem, STEPS, IDA_HERMITE);
+  if (check_flag(&flag, "IDAAdjInit", 1)) return(1);
+
+  /* FORWARD run. */
+  printf("Forward integration ... ");
+  flag = IDASolveF(mem, TF, &time, yy, yp, IDA_NORMAL, &ncheck);
+  if (check_flag(&flag, "IDASolveF", 1)) return(1);
+
+  flag = IDAGetNumSteps(mem, &nst);
+  if (check_flag(&flag, "IDAGetNumSteps", 1)) return(1);
+
+  printf("done ( nst = %ld )\n",nst);
+
+  flag = IDAGetQuad(mem, &time, q);
+  if (check_flag(&flag, "IDAGetQuad", 1)) return(1);
+
+  printf("G:          %24.16f \n",Ith(q,1));
+  printf("--------------------------------------------------------\n\n");
+
+
+  /* BACKWARD run */
+
+  /* Initialize yB */
+  yB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yB, "N_VNew_Serial", 0)) return(1);
+  N_VConst(ZERO, yB);
+  
+  ypB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)ypB, "N_VNew_Serial", 0)) return(1);
+  N_VConst(ZERO, ypB);
+  Ith(ypB,1) = - ONE;
+
+  flag = IDACreateB(mem, &indexB);
+  if (check_flag(&flag, "IDACreateB", 1)) return(1);
+
+  flag = IDAInitB(mem, indexB, resB, TF, yB, ypB);
+  if (check_flag(&flag, "IDAInitB", 1)) return(1);
+
+  flag = IDASStolerancesB(mem, indexB, RTOLB, ATOLB);
+  if (check_flag(&flag, "IDASStolerancesB", 1)) return(1);
+
+  flag = IDASetUserDataB(mem, indexB, data);
+  if (check_flag(&flag, "IDASetUserDataB", 1)) return(1);
+
+  flag = IDASetMaxNumStepsB(mem, indexB, 1000);
+
+  flag = IDADenseB(mem, indexB, NEQ);
+  if (check_flag(&flag, "IDADenseB", 1)) return(1);
+
+  printf("Backward integration ... ");
+
+  flag = IDASolveB(mem, T0, IDA_NORMAL);
+  if (check_flag(&flag, "IDASolveB", 1)) return(1);
+
+  IDAGetNumSteps(IDAGetAdjIDABmem(mem, indexB), &nstB);
+  printf("done ( nst = %ld )\n", nstB);
+
+  flag = IDAGetB(mem, indexB, &time, yB, ypB);
+  if (check_flag(&flag, "IDAGetB", 1)) return(1);
+
+  PrintOutput(time, yB, ypB);
+
+  IDAFree(&mem);
+
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+  N_VDestroy_Serial(yB);
+  N_VDestroy_Serial(ypB);
+  N_VDestroy_Serial(q);
+
+  return(0);
+}
+
+
+static int res(realtype t, N_Vector yy, N_Vector yd, N_Vector resval, void *userdata)
+{
+  UserData data;
+  realtype k1, k2, k3, k4;
+  realtype K, klA, Ks, pCO2, H;
+
+  realtype y1, y2, y3, y4, y5, y6;
+  realtype yd1, yd2, yd3, yd4, yd5;
+
+  realtype r1, r2, r3, r4, r5, Fin;
+
+  data = (UserData) userdata;
+  k1 = data->k1;
+  k2 = data->k2;
+  k3 = data->k3;
+  k4 = data->k4;
+  K = data->K;
+  klA = data->klA;
+  Ks = data->Ks;
+  pCO2 = data->pCO2;
+  H = data->H;
+
+  y1 = Ith(yy,1);
+  y2 = Ith(yy,2);
+  y3 = Ith(yy,3);
+  y4 = Ith(yy,4);
+  y5 = Ith(yy,5);
+  y6 = Ith(yy,6);
+
+  yd1 = Ith(yd,1);
+  yd2 = Ith(yd,2);
+  yd3 = Ith(yd,3);
+  yd4 = Ith(yd,4);
+  yd5 = Ith(yd,5);
+
+  r1 = k1 * SUNRpowerI(y1,4) * SUNRsqrt(y2);
+  r2 = k2 * y3 * y4;
+  r3 = k2/K * y1 * y5;
+  r4 = k3 * y1 * y4 * y4;
+  r5 = k4 * y6 * y6 * SUNRsqrt(y2);
+  Fin = klA * ( pCO2/H - y2 );
+
+  Ith(resval,1) = yd1 + TWO*r1 - r2 + r3 + r4;
+  Ith(resval,2) = yd2 + HALF*r1 + r4 + HALF*r5 - Fin;
+  Ith(resval,3) = yd3 - r1 + r2 - r3;
+  Ith(resval,4) = yd4 + r2 - r3 + TWO*r4;
+  Ith(resval,5) = yd5 - r2 + r3 - r5;
+  Ith(resval,6) = Ks*y1*y4 - y6;
+
+  return(0);
+}
+
+/* 
+ * rhsQ routine. Computes quadrature(t,y). 
+ */
+ 
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data)
+{
+  Ith(qdot,1) = Ith(yy,1);  
+
+  return(0);
+}
+
+#define QUARTER   RCONST(0.25)
+#define FOUR      RCONST(4.0)
+#define EIGHT     RCONST(8.0)
+
+/* 
+ * resB routine. Residual for adjoint system. 
+ */
+static int resB(realtype tt, 
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                void *user_dataB)
+{
+  UserData data;
+
+  realtype y1, y2, y3, y4, y5, y6;
+
+  realtype yB1, yB2, yB3, yB4, yB5, yB6;
+  realtype ypB1, ypB2, ypB3, ypB4, ypB5;
+
+  realtype k1, k2, k3, k4;
+  realtype K, klA, Ks, pCO2, H;
+
+  realtype y2tohalf, y1to3, k2overK, tmp1, tmp2;
+
+  data = (UserData) user_dataB;
+  k1 = data->k1;
+  k2 = data->k2;
+  k3 = data->k3;
+  k4 = data->k4;
+  K = data->K;
+  klA = data->klA;
+  Ks = data->Ks;
+  pCO2 = data->pCO2;
+  H = data->H;
+
+  y1 = Ith(yy,1);
+  y2 = Ith(yy,2);
+  y3 = Ith(yy,3);
+  y4 = Ith(yy,4);
+  y5 = Ith(yy,5);
+  y6 = Ith(yy,6);
+
+  yB1 = Ith(yyB,1);
+  yB2 = Ith(yyB,2);
+  yB3 = Ith(yyB,3);
+  yB4 = Ith(yyB,4);
+  yB5 = Ith(yyB,5);
+  yB6 = Ith(yyB,6);
+  
+  ypB1 = Ith(ypB,1);
+  ypB2 = Ith(ypB,2);
+  ypB3 = Ith(ypB,3);
+  ypB4 = Ith(ypB,4);
+  ypB5 = Ith(ypB,5);
+
+  y2tohalf = sqrt(y2);
+  y1to3 = y1*y1*y1;
+  k2overK = k2/K;
+
+  tmp1 = k1* y1to3 * y2tohalf; tmp2 = k3*y4*y4;
+  Ith(rrB,1) = 1 +  ypB1 - (EIGHT*tmp1 + k2overK*y5 + tmp2)*yB1 
+    - (TWO*tmp1+tmp2)*yB2 + (FOUR*tmp1+k2overK*y5)*yB3 
+    + k2overK*y5*(yB4-yB5) - TWO*tmp2*yB4 + Ks*y4*yB6;
+
+  tmp1 = k1 * y1*y1to3 * (y2tohalf/y2); tmp2 = k4 * y6*y6 * (y2tohalf/y2);
+  Ith(rrB,2) = ypB2 - tmp1*yB1 - (QUARTER*tmp1 + QUARTER*tmp2 + klA)*yB2 
+    + HALF*tmp1*yB3 + HALF*tmp2*yB5;
+
+  Ith(rrB,3) = ypB3 + k2*y4*(yB1-yB3-yB4+yB5);
+
+  tmp1 = k3*y1*y4; tmp2 = k2*y3;
+  Ith(rrB,4) = ypB4 + (tmp2-TWO*tmp1)*yB1 - TWO*tmp1*yB2 - tmp2*yB3 
+    - (tmp2+FOUR*tmp1)*yB4 + tmp2*yB5 + Ks*y1*yB6;
+
+  Ith(rrB,5) = ypB5 - k2overK*y1*(yB1-yB3-yB4+yB5);
+
+  Ith(rrB,6) = k4*y6*y2tohalf*(2*yB5-yB2) - yB6;
+
+
+  return 0;
+}
+
+
+/*
+ * Print results after backward integration
+ */
+static void PrintOutput(realtype tfinal, N_Vector yB, N_Vector ypB)
+{
+  printf("dG/dy0: \t%12.4e\n\t\t%12.4e\n\t\t%12.4e\n\t\t%12.4e\n\t\t%12.4e\n\t\t%12.4e\n",
+         Ith(yB,1), Ith(yB,2), Ith(yB,3), Ith(yB,4), Ith(yB,5), Ith(yB,6));
+  printf("--------------------------------------------------------\n\n");
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasAkzoNob_ASAi_dns.out b/examples/idas/serial/idasAkzoNob_ASAi_dns.out
new file mode 100644
index 0000000..273d53d
--- /dev/null
+++ b/examples/idas/serial/idasAkzoNob_ASAi_dns.out
@@ -0,0 +1,19 @@
+
+Adjoint Sensitivity Example for Akzo-Nobel Chemical Kinetics
+-------------------------------------------------------------
+Sensitivity of G = int_t0^tf (y1) dt with respect to IC.
+-------------------------------------------------------------
+
+Forward integration ... done ( nst = 457 )
+G:               31.2642162580311549 
+--------------------------------------------------------
+
+Backward integration ... done ( nst = 274 )
+dG/dy0: 	  2.2207e+01
+		 -6.2695e+01
+		 -2.5115e+00
+		  9.1837e+01
+		  3.5176e+00
+		  3.6976e-01
+--------------------------------------------------------
+
diff --git a/examples/idas/serial/idasAkzoNob_dns.c b/examples/idas/serial/idasAkzoNob_dns.c
new file mode 100644
index 0000000..f3cd5ac
--- /dev/null
+++ b/examples/idas/serial/idasAkzoNob_dns.c
@@ -0,0 +1,376 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban and Cosmin Petra @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Adjoint sensitivity example problem
+ *
+ * This IVP is a stiff system of 6 non-linear DAEs of index 1. The 
+ * problem originates from Akzo Nobel Central research in Arnhern, 
+ * The Netherlands, and describes a chemical process in which 2 
+ * species are mixed, while carbon dioxide is continuously added.
+ * See http://pitagora.dm.uniba.it/~testset/report/chemakzo.pdf  
+ * 
+ * -----------------------------------------------------------------
+ */
+ 
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+ 
+#include <idas/idas.h>
+#include <idas/idas_dense.h>
+#include <sundials/sundials_math.h>
+#include <nvector/nvector_serial.h>
+
+/* Accessor macros */
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component */
+
+/* Problem Constants */
+#define NEQ  6
+
+#define T0      RCONST(0.0)
+
+#define T1      RCONST(1e-8)  /* first time for output */
+
+#define TF      RCONST(180.0) /* Final time. */
+#define NF      25            /* Total number of outputs. */ 
+
+#define RTOL  RCONST(1.0e-08)
+#define ATOL  RCONST(1.0e-10)
+#define RTOLQ RCONST(1.0e-10)
+#define ATOLQ RCONST(1.0e-12)
+
+#define ZERO  RCONST(0.0)
+#define HALF  RCONST(0.5)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+
+typedef struct {
+  realtype k1, k2, k3, k4;
+  realtype K, klA, Ks, pCO2, H;
+} *UserData;
+
+static int res(realtype t, N_Vector yy, N_Vector yd, N_Vector resval, void *userdata);
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, 
+              N_Vector qdot, void *user_data);
+
+static void PrintHeader(realtype rtol, realtype avtol, N_Vector y);
+static void PrintOutput(void *mem, realtype t, N_Vector y);
+static void PrintFinalStats(void *mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/* Main program */
+int main()
+{
+  UserData data;
+  void *mem;
+  N_Vector yy, yp, rr, q;
+  int flag;
+  realtype time, tout, incr;
+  int nout;
+
+  mem = NULL;
+  yy = yp = NULL;
+
+  /* Allocate user data. */
+  data = (UserData) malloc(sizeof(*data));
+
+  /* Fill user's data with the appropriate values for coefficients. */
+  data->k1 = RCONST(18.7);
+  data->k2 = RCONST(0.58);
+  data->k3 = RCONST(0.09);
+  data->k4 = RCONST(0.42);
+  data->K = RCONST(34.4);
+  data->klA = RCONST(3.3);
+  data->Ks = RCONST(115.83);
+  data->pCO2 = RCONST(0.9);
+  data->H = RCONST(737.0);
+
+  /* Allocate N-vectors. */
+  yy = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  yp = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+
+  /* Consistent IC for  y, y'. */
+#define y01 0.444
+#define y02 0.00123
+#define y03 0.00
+#define y04 0.007
+#define y05 0.0
+  Ith(yy,1) = RCONST(y01);
+  Ith(yy,2) = RCONST(y02);
+  Ith(yy,3) = RCONST(y03);
+  Ith(yy,4) = RCONST(y04);
+  Ith(yy,5) = RCONST(y05);
+  Ith(yy,6) = data->Ks * RCONST(y01) * RCONST(y04);
+
+  /* Get y' = - res(t0, y, 0) */
+  N_VConst(ZERO, yp);
+
+  rr = N_VNew_Serial(NEQ);
+  res(T0, yy, yp, rr, data);
+  N_VScale(-ONE, rr, yp);
+  N_VDestroy_Serial(rr);
+  
+ /* Create and initialize q0 for quadratures. */
+  q = N_VNew_Serial(1);
+  if (check_flag((void *)q, "N_VNew_Serial", 0)) return(1);
+  Ith(q,1) = ZERO;
+
+  /* Call IDACreate and IDAInit to initialize IDA memory */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  flag = IDAInit(mem, res, T0, yy, yp);
+  if(check_flag(&flag, "IDAInit", 1)) return(1);
+
+
+  /* Set tolerances. */
+  flag = IDASStolerances(mem, RTOL, ATOL);
+  if(check_flag(&flag, "IDASStolerances", 1)) return(1);
+
+  /* Attach user data. */
+  flag = IDASetUserData(mem, data);
+  if(check_flag(&flag, "IDASetUserData", 1)) return(1);
+  
+  /* Attach linear solver. */
+  flag = IDADense(mem, NEQ);
+
+  /* Initialize QUADRATURE(S). */
+  flag = IDAQuadInit(mem, rhsQ, q);
+  if (check_flag(&flag, "IDAQuadInit", 1)) return(1);
+
+  /* Set tolerances and error control for quadratures. */
+  flag = IDAQuadSStolerances(mem, RTOLQ, ATOLQ);
+  if (check_flag(&flag, "IDAQuadSStolerances", 1)) return(1);
+
+  flag = IDASetQuadErrCon(mem, TRUE);
+  if (check_flag(&flag, "IDASetQuadErrCon", 1)) return(1);
+
+  PrintHeader(RTOL, ATOL, yy);
+  /* Print initial states */
+  PrintOutput(mem,0.0,yy);
+
+  tout = T1; nout = 0;
+  incr = SUNRpowerR(TF/T1,ONE/NF);
+ 
+  /* FORWARD run. */
+  while (1) {
+
+    flag = IDASolve(mem, tout, &time, yy, yp, IDA_NORMAL);
+    if (check_flag(&flag, "IDASolve", 1)) return(1);
+
+    PrintOutput(mem, time, yy);
+
+    nout++;
+    tout *= incr;
+
+    if (nout>NF) break;
+  }
+
+  flag = IDAGetQuad(mem, &time, q);
+  if (check_flag(&flag, "IDAGetQuad", 1)) return(1);
+
+  printf("\n--------------------------------------------------------\n");
+  printf("G:          %24.16f \n",Ith(q,1));
+  printf("--------------------------------------------------------\n\n");
+
+  PrintFinalStats(mem);
+
+  IDAFree(&mem);
+
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+  N_VDestroy_Serial(q);
+
+  return(0);
+}
+
+
+static int res(realtype t, N_Vector yy, N_Vector yd, N_Vector resval, void *userdata)
+{
+  UserData data;
+  realtype k1, k2, k3, k4;
+  realtype K, klA, Ks, pCO2, H;
+
+  realtype y1, y2, y3, y4, y5, y6;
+  realtype yd1, yd2, yd3, yd4, yd5;
+
+  realtype r1, r2, r3, r4, r5, Fin;
+
+  data = (UserData) userdata;
+  k1 = data->k1;
+  k2 = data->k2;
+  k3 = data->k3;
+  k4 = data->k4;
+  K = data->K;
+  klA = data->klA;
+  Ks = data->Ks;
+  pCO2 = data->pCO2;
+  H = data->H;
+
+  y1 = Ith(yy,1);
+  y2 = Ith(yy,2);
+  y3 = Ith(yy,3);
+  y4 = Ith(yy,4);
+  y5 = Ith(yy,5);
+  y6 = Ith(yy,6);
+
+  yd1 = Ith(yd,1);
+  yd2 = Ith(yd,2);
+  yd3 = Ith(yd,3);
+  yd4 = Ith(yd,4);
+  yd5 = Ith(yd,5);
+
+  r1 = k1 * SUNRpowerI(y1,4) * SUNRsqrt(y2);
+  r2 = k2 * y3 * y4;
+  r3 = k2/K * y1 * y5;
+  r4 = k3 * y1 * y4 * y4;
+  r5 = k4 * y6 * y6 * SUNRsqrt(y2);
+  Fin = klA * ( pCO2/H - y2 );
+
+  Ith(resval,1) = yd1 + TWO*r1 - r2 + r3 + r4;
+  Ith(resval,2) = yd2 + HALF*r1 + r4 + HALF*r5 - Fin;
+  Ith(resval,3) = yd3 - r1 + r2 - r3;
+  Ith(resval,4) = yd4 + r2 - r3 + TWO*r4;
+  Ith(resval,5) = yd5 - r2 + r3 - r5;
+  Ith(resval,6) = Ks*y1*y4 - y6;
+
+  return(0);
+}
+
+/* 
+ * rhsQ routine. Computes quadrature(t,y). 
+ */
+ 
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data)
+{
+  Ith(qdot,1) = Ith(yy,1);  
+
+  return(0);
+}
+
+static void PrintHeader(realtype rtol, realtype avtol, N_Vector y)
+{
+  printf("\nidasAkzoNob_dns: Akzo Nobel chemical kinetics DAE serial example problem for IDAS\n");
+  printf("Linear solver: IDADENSE, Jacobian is computed by IDAS.\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n",
+         rtol, avtol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n",
+         rtol, avtol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n",
+         rtol, avtol);
+#endif
+  printf("---------------------------------------------------------------------------------\n");
+  printf("   t        y1        y2       y3       y4       y5");
+  printf("      y6    | nst  k      h\n");
+  printf("---------------------------------------------------------------------------------\n");
+}
+
+
+static void PrintOutput(void *mem, realtype t, N_Vector y)
+{
+  realtype *yval;
+  int retval, kused;
+  long int nst;
+  realtype hused;
+
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  retval = IDAGetLastOrder(mem, &kused);
+  check_flag(&retval, "IDAGetLastOrder", 1);
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetLastStep(mem, &hused);
+  check_flag(&retval, "IDAGetLastStep", 1);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%8.2Le %8.2Le %8.2Le %8.2Le %8.2Le %8.2Le %8.2Le | %3ld  %1d %8.2Le\n", 
+         t, yval[0], yval[1], yval[2], yval[3], yval[4], yval[5], nst, kused, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%8.2e %8.2e %8.2e %8.2e %8.2e %8.2e %8.2e | %3ld  %1d %8.2e\n", 
+         t, yval[0], yval[1], yval[2], yval[3], yval[4], yval[5], nst, kused, hused);
+#else
+  printf("%8.2e %8.2e %8.2e %8.2e %8.2e %8.2e %8.2e | %3ld  %1d %8.2e\n", 
+         t, yval[0], yval[1], yval[2], yval[3], yval[4], yval[5], nst, kused, hused);
+#endif
+}
+
+
+static void PrintFinalStats(void *mem)
+{
+  int flag;
+  long int nst, nni, nje, nre, nreLS, netf, ncfn;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  flag = IDAGetNumResEvals(mem, &nre);
+  flag = IDADlsGetNumJacEvals(mem, &nje);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  flag = IDADlsGetNumResEvals(mem, &nreLS);
+
+  printf("\nFinal Run Statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+}
+
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasAkzoNob_dns.out b/examples/idas/serial/idasAkzoNob_dns.out
new file mode 100644
index 0000000..f965973
--- /dev/null
+++ b/examples/idas/serial/idasAkzoNob_dns.out
@@ -0,0 +1,48 @@
+
+idasAkzoNob_dns: Akzo Nobel chemical kinetics DAE serial example problem for IDAS
+Linear solver: IDADENSE, Jacobian is computed by IDAS.
+Tolerance parameters:  rtol = 1e-08   atol = 1e-10
+---------------------------------------------------------------------------------
+   t        y1        y2       y3       y4       y5      y6    | nst  k      h
+---------------------------------------------------------------------------------
+0.00e+00 4.44e-01 1.23e-03 0.00e+00 7.00e-03 0.00e+00 3.60e-01 |   0  0 0.00e+00
+1.00e-08 4.44e-01 1.23e-03 2.55e-10 7.00e-03 1.91e-11 3.60e-01 |  15  1 9.23e-09
+2.57e-08 4.44e-01 1.23e-03 6.55e-10 7.00e-03 4.91e-11 3.60e-01 |  16  1 1.85e-08
+6.61e-08 4.44e-01 1.23e-03 1.69e-09 7.00e-03 1.26e-10 3.60e-01 |  17  1 3.69e-08
+1.70e-07 4.44e-01 1.23e-03 4.33e-09 7.00e-03 3.25e-10 3.60e-01 |  19  1 1.48e-07
+4.37e-07 4.44e-01 1.23e-03 1.11e-08 7.00e-03 8.35e-10 3.60e-01 |  20  1 2.95e-07
+1.12e-06 4.44e-01 1.23e-03 2.87e-08 7.00e-03 2.15e-09 3.60e-01 |  21  1 5.90e-07
+2.89e-06 4.44e-01 1.23e-03 7.37e-08 7.00e-03 5.52e-09 3.60e-01 |  23  1 2.36e-06
+7.44e-06 4.44e-01 1.23e-03 1.90e-07 7.00e-03 1.42e-08 3.60e-01 |  25  1 2.36e-06
+1.91e-05 4.44e-01 1.23e-03 4.88e-07 7.00e-03 3.65e-08 3.60e-01 |  28  2 4.72e-06
+4.92e-05 4.44e-01 1.23e-03 1.25e-06 7.00e-03 9.39e-08 3.60e-01 |  30  2 1.89e-05
+1.27e-04 4.44e-01 1.23e-03 3.22e-06 7.00e-03 2.41e-07 3.60e-01 |  32  2 7.56e-05
+3.25e-04 4.44e-01 1.23e-03 8.28e-06 7.00e-03 6.20e-07 3.60e-01 |  34  2 1.51e-04
+8.37e-04 4.44e-01 1.22e-03 2.13e-05 7.00e-03 1.59e-06 3.60e-01 |  37  3 3.02e-04
+2.15e-03 4.44e-01 1.20e-03 5.45e-05 7.00e-03 4.08e-06 3.60e-01 |  41  3 6.05e-04
+5.53e-03 4.44e-01 1.16e-03 1.39e-04 7.00e-03 1.04e-05 3.60e-01 |  45  3 8.45e-04
+1.42e-02 4.43e-01 1.05e-03 3.47e-04 7.00e-03 2.61e-05 3.59e-01 |  52  4 3.38e-03
+3.66e-02 4.42e-01 8.07e-04 8.35e-04 7.00e-03 6.29e-05 3.59e-01 |  58  5 3.38e-03
+9.41e-02 4.40e-01 4.01e-04 1.81e-03 7.00e-03 1.37e-04 3.57e-01 |  69  5 6.76e-03
+2.42e-01 4.37e-01 1.18e-04 3.26e-03 7.00e-03 2.50e-04 3.55e-01 |  91  5 6.76e-03
+6.22e-01 4.32e-01 1.08e-04 5.87e-03 6.99e-03 4.59e-04 3.50e-01 | 132  5 1.35e-02
+1.60e+00 4.19e-01 1.30e-04 1.24e-02 6.96e-03 1.02e-03 3.38e-01 | 150  4 1.08e-01
+4.12e+00 3.87e-01 2.07e-04 2.81e-02 6.77e-03 2.59e-03 3.04e-01 | 165  4 1.42e-01
+1.06e+01 3.21e-01 4.82e-04 6.10e-02 5.86e-03 6.80e-03 2.18e-01 | 194  5 2.84e-01
+2.72e+01 2.32e-01 9.50e-04 1.04e-01 3.07e-03 1.34e-02 8.27e-02 | 279  4 1.52e-01
+7.00e+01 1.62e-01 1.15e-03 1.38e-01 7.40e-04 1.66e-02 1.39e-02 | 375  4 3.60e-01
+1.80e+02 1.15e-01 1.20e-03 1.61e-01 3.66e-04 1.71e-02 4.87e-03 | 500  4 1.03e+00
+
+--------------------------------------------------------
+G:               31.2642162723035995 
+--------------------------------------------------------
+
+
+Final Run Statistics: 
+
+Number of steps                    = 500
+Number of residual evaluations     = 846
+Number of Jacobian evaluations     = 43
+Number of nonlinear iterations     = 588
+Number of error test failures      = 2
+Number of nonlinear conv. failures = 0
diff --git a/examples/idas/serial/idasFoodWeb_bnd.c b/examples/idas/serial/idasFoodWeb_bnd.c
new file mode 100644
index 0000000..329238c
--- /dev/null
+++ b/examples/idas/serial/idasFoodWeb_bnd.c
@@ -0,0 +1,674 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example program for IDA: Food web problem.
+ *
+ * This example program (serial version) uses the IDABAND linear 
+ * solver, and IDACalcIC for initial condition calculation.
+ *
+ * The mathematical problem solved in this example is a DAE system
+ * that arises from a system of partial differential equations after
+ * spatial discretization. The PDE system is a food web population
+ * model, with predator-prey interaction and diffusion on the unit
+ * square in two dimensions. The dependent variable vector is:
+ *
+ *         1   2         ns
+ *   c = (c , c ,  ..., c  ) , ns = 2 * np
+ *
+ * and the PDE's are as follows:
+ *
+ *     i             i      i
+ *   dc /dt = d(i)*(c    + c  )  +  R (x,y,c)   (i = 1,...,np)
+ *                   xx     yy       i
+ *
+ *              i      i
+ *   0 = d(i)*(c    + c  )  +  R (x,y,c)   (i = np+1,...,ns)
+ *              xx     yy       i
+ *
+ *   where the reaction terms R are:
+ *
+ *                   i             ns         j
+ *   R  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *  a(i,i) = -AA   (all i)
+ *  a(i,j) = -GG   (i <= np , j >  np)
+ *  a(i,j) =  EE   (i >  np, j <= np)
+ *  all other a(i,j) = 0
+ *  b(i) = BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i <= np)
+ *  b(i) =-BB*(1+ alpha * x*y + beta*sin(4 pi x)*sin(4 pi y)) (i  > np)
+ *  d(i) = DPREY   (i <= np)
+ *  d(i) = DPRED   (i > np)
+ *
+ * The various scalar parameters required are set using '#define'
+ * statements or directly in routine InitUserData. In this program,
+ * np = 1, ns = 2. The boundary conditions are homogeneous Neumann:
+ * normal derivative = 0.
+ *
+ * A polynomial in x and y is used to set the initial values of the
+ * first np variables (the prey variables) at each x,y location,
+ * while initial values for the remaining (predator) variables are
+ * set to a flat value, which is corrected by IDACalcIC.
+ *
+ * The PDEs are discretized by central differencing on a MX by MY
+ * mesh.
+ *
+ * The DAE system is solved by IDA using the IDABAND linear solver.
+ * Output is printed at t = 0, .001, .01, .1, .4, .7, 1.
+ * -----------------------------------------------------------------
+ * References:
+ * [1] Peter N. Brown and Alan C. Hindmarsh,
+ *     Reduced Storage Matrix Methods in Stiff ODE systems, Journal
+ *     of Applied Mathematics and Computation, Vol. 31 (May 1989),
+ *     pp. 40-91.
+ *
+ * [2] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Using Krylov Methods in the Solution of Large-Scale
+ *     Differential-Algebraic Systems, SIAM J. Sci. Comput., 15
+ *     (1994), pp. 1467-1488.
+ *
+ * [3] Peter N. Brown, Alan C. Hindmarsh, and Linda R. Petzold,
+ *     Consistent Initial Condition Calculation for Differential-
+ *     Algebraic Systems, SIAM J. Sci. Comput., 19 (1998),
+ *     pp. 1495-1512.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_band.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+
+/* Problem Constants. */
+
+#define NPREY       1              /* No. of prey (= no. of predators). */
+#define NUM_SPECIES 2*NPREY
+
+#define PI          RCONST(3.1415926535898)
+#define FOURPI      (RCONST(4.0)*PI)
+
+#define MX          20             /* MX = number of x mesh points      */
+#define MY          20             /* MY = number of y mesh points      */
+#define NSMX        (NUM_SPECIES * MX)
+#define NEQ         (NUM_SPECIES*MX*MY)
+#define AA          RCONST(1.0)    /* Coefficient in above eqns. for a  */
+#define EE          RCONST(10000.) /* Coefficient in above eqns. for a  */
+#define GG          RCONST(0.5e-6) /* Coefficient in above eqns. for a  */
+#define BB          RCONST(1.0)    /* Coefficient in above eqns. for b  */
+#define DPREY       RCONST(1.0)    /* Coefficient in above eqns. for d  */
+#define DPRED       RCONST(0.05)   /* Coefficient in above eqns. for d  */
+#define ALPHA       RCONST(50.)    /* Coefficient alpha in above eqns.  */
+#define BETA        RCONST(1000.)  /* Coefficient beta in above eqns.   */
+#define AX          RCONST(1.0)    /* Total range of x variable         */
+#define AY          RCONST(1.0)    /* Total range of y variable         */
+#define RTOL        RCONST(1.e-5)  /* Relative tolerance                */
+#define ATOL        RCONST(1.e-5)  /* Absolute tolerance                */
+#define NOUT        6              /* Number of output times            */
+#define TMULT       RCONST(10.0)   /* Multiplier for tout values        */
+#define TADD        RCONST(0.3)    /* Increment for tout values         */
+#define ZERO        RCONST(0.)     
+#define ONE         RCONST(1.0)    
+
+/* 
+ * User-defined vector and accessor macro: IJ_Vptr.
+ * IJ_Vptr is defined in order to express the underlying 3-D structure of 
+ * the dependent variable vector from its underlying 1-D storage (an N_Vector).
+ * IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+ * species index is = 0, x-index ix = i, and y-index jy = j.                
+ */
+
+#define IJ_Vptr(vv,i,j) (&NV_Ith_S(vv, (i)*NUM_SPECIES + (j)*NSMX))
+
+/* Type: UserData.  Contains problem constants, etc. */
+
+typedef struct {
+  long int Neq, ns, np, mx, my;
+  realtype dx, dy, **acoef;
+  realtype cox[NUM_SPECIES], coy[NUM_SPECIES], bcoef[NUM_SPECIES];
+  N_Vector rates;
+} *UserData;
+
+/* Prototypes for functions called by the IDA Solver. */
+
+static int resweb(realtype time, N_Vector cc, N_Vector cp, N_Vector resval, 
+                  void *user_data);
+
+/* Prototypes for private Helper Functions. */
+
+static void InitUserData(UserData webdata);
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata);
+static void PrintHeader(long int mu, long int ml, realtype rtol, realtype atol);
+static void PrintOutput(void *mem, N_Vector c, realtype t);
+static void PrintFinalStats(void *mem);
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate, UserData webdata);
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                     UserData webdata);
+static realtype dotprod(long int size, realtype *x1, realtype *x2);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{ 
+  void *mem;
+  UserData webdata;
+  N_Vector cc, cp, id;
+  int iout, retval;
+  long int mu, ml;
+  realtype rtol, atol, t0, tout, tret;
+
+  mem = NULL;
+  webdata = NULL;
+  cc = cp = id = NULL;
+
+  /* Allocate and initialize user data block webdata. */
+
+  webdata = (UserData) malloc(sizeof *webdata);
+  webdata->rates = N_VNew_Serial(NEQ);
+  webdata->acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+
+  InitUserData(webdata);
+
+  /* Allocate N-vectors and initialize cc, cp, and id. */
+
+  cc  = N_VNew_Serial(NEQ);
+  if(check_flag((void *)cc, "N_VNew_Serial", 0)) return(1);
+
+  cp  = N_VNew_Serial(NEQ);
+  if(check_flag((void *)cp, "N_VNew_Serial", 0)) return(1);
+
+  id  = N_VNew_Serial(NEQ);
+  if(check_flag((void *)id, "N_VNew_Serial", 0)) return(1);
+  
+  SetInitialProfiles(cc, cp, id, webdata);
+  
+  /* Set remaining inputs to IDAMalloc. */
+  
+  t0 = ZERO;
+  rtol = RTOL; 
+  atol = ATOL;
+
+  /* Call IDACreate and IDAMalloc to initialize IDA. */
+  
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  retval = IDASetUserData(mem, webdata);
+  if(check_flag(&retval, "IDASetUserData", 1)) return(1);
+
+  retval = IDASetId(mem, id);
+  if(check_flag(&retval, "IDASetId", 1)) return(1);
+
+  retval = IDAInit(mem, resweb, t0, cc, cp);
+  if(check_flag(&retval, "IDAInit", 1)) return(1);
+
+  retval = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&retval, "IDASStolerances", 1)) return(1);
+
+  /* Call IDABand to specify the IDA linear solver. */
+
+  mu = ml = NSMX;
+  retval = IDABand(mem, NEQ, mu, ml);
+  if(check_flag(&retval, "IDABand", 1)) return(1);
+
+  /* Call IDACalcIC (with default options) to correct the initial values. */
+
+  tout = RCONST(0.001);
+  retval = IDACalcIC(mem, IDA_YA_YDP_INIT, tout);
+  if(check_flag(&retval, "IDACalcIC", 1)) return(1);
+  
+  /* Print heading, basic parameters, and initial values. */
+
+  PrintHeader(mu, ml, rtol, atol);
+  PrintOutput(mem, cc, ZERO);
+  
+  /* Loop over iout, call IDASolve (normal mode), print selected output. */
+  
+  for (iout = 1; iout <= NOUT; iout++) {
+    
+    retval = IDASolve(mem, tout, &tret, cc, cp, IDA_NORMAL);
+    if(check_flag(&retval, "IDASolve", 1)) return(retval);
+    
+    PrintOutput(mem, cc, tret);
+    
+    if (iout < 3) tout *= TMULT; else tout += TADD;
+    
+  }
+  
+  /* Print final statistics and free memory. */  
+  
+  PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_Serial(cc);
+  N_VDestroy_Serial(cp);
+  N_VDestroy_Serial(id);
+
+
+  destroyMat(webdata->acoef);
+  N_VDestroy_Serial(webdata->rates);
+  free(webdata);
+
+  return(0);
+}
+
+/* Define lines for readability in later routines */ 
+
+#define acoef  (webdata->acoef)
+#define bcoef  (webdata->bcoef)
+#define cox    (webdata->cox)
+#define coy    (webdata->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * resweb: System residual function for predator-prey system.
+ * This routine calls Fweb to get all the right-hand sides of the
+ * equations, then loads the residual vector accordingly,
+ * using cp in the case of prey species.                 
+ */
+
+static int resweb(realtype tt, N_Vector cc, N_Vector cp, 
+                  N_Vector res,  void *user_data)
+{
+  long int jx, jy, is, yloc, loc, np;
+  realtype *resv, *cpv;
+  UserData webdata;
+  
+  webdata = (UserData)user_data;
+  
+  cpv = N_VGetArrayPointer_Serial(cp);
+  resv = N_VGetArrayPointer_Serial(res);
+  np = webdata->np;
+  
+  /* Call Fweb to set res to vector of right-hand sides. */
+  Fweb(tt, cc, res, webdata);
+  
+  /* Loop over all grid points, setting residual values appropriately
+     for differential or algebraic components.                        */
+  
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np)
+          resv[loc+is] = cpv[loc+is] - resv[loc+is];
+        else
+          resv[loc+is] = -resv[loc+is];
+      }
+    }
+  }
+  
+  return(0);
+  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * InitUserData: Load problem constants in webdata (of type UserData).   
+ */
+
+static void InitUserData(UserData webdata)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  webdata->mx = MX;
+  webdata->my = MY;
+  webdata->ns = NUM_SPECIES;
+  webdata->np = NPREY;
+  webdata->dx = AX/(MX-1);
+  webdata->dy = AY/(MY-1);
+  webdata->Neq= NEQ;
+  
+  /* Set up the coefficients a and b, and others found in the equations. */
+  np = webdata->np;
+  dx2 = (webdata->dx)*(webdata->dx); dy2 = (webdata->dy)*(webdata->dy);
+  
+  for (i = 0; i < np; i++) {
+    a1 = &(acoef[i][np]);
+    a2 = &(acoef[i+np][0]);
+    a3 = &(acoef[i][0]);
+    a4 = &(acoef[i+np][np]);
+    /*  Fill in the portion of acoef in the four quadrants, row by row. */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+    
+    /* Reset the diagonal elements of acoef to -AA. */
+    acoef[i][i] = -AA; acoef[i+np][i+np] = -AA;
+    
+    /* Set coefficients for b and diffusion terms. */
+    bcoef[i] = BB; bcoef[i+np] = -BB;
+    cox[i] = DPREY/dx2; cox[i+np] = DPRED/dx2;
+    coy[i] = DPREY/dy2; coy[i+np] = DPRED/dy2;
+  }
+  
+}
+
+/* 
+ * SetInitialProfiles: Set initial conditions in cc, cp, and id.
+ * A polynomial profile is used for the prey cc values, and a constant
+ * (1.0e5) is loaded as the initial guess for the predator cc values.
+ * The id values are set to 1 for the prey and 0 for the predators.
+ * The prey cp values are set according to the given system, and
+ * the predator cp values are set to zero.                               
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector cp, N_Vector id,
+                               UserData webdata)
+{
+  long int loc, yloc, is, jx, jy, np;
+  realtype xx, yy, xyfactor, fac;
+  realtype *ccv, *cpv, *idv;
+  
+  ccv = N_VGetArrayPointer_Serial(cc);
+  cpv = N_VGetArrayPointer_Serial(cp);
+  idv = N_VGetArrayPointer_Serial(id);
+  np = webdata->np;
+  
+  /* Loop over grid, load cc values and id values. */
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy * webdata->dy;
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx * webdata->dx;
+      xyfactor = RCONST(16.0)*xx*(ONE-xx)*yy*(ONE-yy);
+      xyfactor *= xyfactor;
+      loc = yloc + NUM_SPECIES*jx;
+      fac = ONE + ALPHA * xx * yy + BETA * sin(FOURPI*xx) * sin(FOURPI*yy);
+      
+      for (is = 0; is < NUM_SPECIES; is++) {
+        if (is < np) {
+	    ccv[loc+is] = RCONST(10.0) + (realtype)(is+1) * xyfactor;
+          idv[loc+is] = ONE;
+        }
+        else {
+	  ccv[loc+is] = RCONST(1.0e5);
+          idv[loc+is] = ZERO;
+        }
+      }
+    }
+  }
+  
+  /* Set c' for the prey by calling the function Fweb. */
+  Fweb(ZERO, cc, cp, webdata);
+  
+  /* Set c' for predators to 0. */
+  for (jy = 0; jy < MY; jy++) {
+    yloc = NSMX * jy;
+    for (jx = 0; jx < MX; jx++) {
+      loc = yloc + NUM_SPECIES * jx;
+      for (is = np; is < NUM_SPECIES; is++) {
+        cpv[loc+is] = ZERO;
+      }
+    }
+  }
+}
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(long int mu, long int ml, realtype rtol, realtype atol)
+{
+  printf("\nidasFoodWeb_bnd: Predator-prey DAE serial example problem for IDA \n\n");
+  printf("Number of species ns: %d", NUM_SPECIES);
+  printf("     Mesh dimensions: %d x %d", MX, MY);
+  printf("     System size: %d\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Linear solver: IDABAND,  Band parameters mu = %ld, ml = %ld\n",mu,ml);
+  printf("CalcIC called to correct initial predator concentrations.\n\n");
+  printf("-----------------------------------------------------------\n");
+  printf("  t        bottom-left  top-right");
+  printf("    | nst  k      h\n");
+  printf("-----------------------------------------------------------\n\n");
+  
+}
+
+/* 
+ * PrintOutput: Print output values at output time t = tt.
+ * Selected run statistics are printed.  Then values of the concentrations
+ * are printed for the bottom left and top right grid points only.  
+ */
+
+static void PrintOutput(void *mem, N_Vector c, realtype t)
+{
+  int i, kused, flag;
+  long int nst;
+  realtype *c_bl, *c_tr, hused;
+
+  flag = IDAGetLastOrder(mem, &kused);
+  check_flag(&flag, "IDAGetLastOrder", 1);
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetLastStep(mem, &hused);
+  check_flag(&flag, "IDAGetLastStep", 1);
+  
+  c_bl = IJ_Vptr(c,0,0);
+  c_tr = IJ_Vptr(c,MX-1,MY-1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("%8.2Le %12.4Le %12.4Le   | %3ld  %1d %12.4Le\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4Le %12.4Le   |\n",c_bl[i],c_tr[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#else
+  printf("%8.2e %12.4e %12.4e   | %3ld  %1d %12.4e\n", 
+         t, c_bl[0], c_tr[0], nst, kused, hused);
+  for (i=1;i<NUM_SPECIES;i++)
+    printf("         %12.4e %12.4e   |\n",c_bl[i],c_tr[i]);
+#endif
+
+  printf("\n");
+}
+
+/* 
+ * PrintFinalStats: Print final run data contained in iopt.              
+ */
+
+static void PrintFinalStats(void *mem)
+{ 
+  long int nst, nre, nreLS, nni, nje, netf, ncfn;
+  int flag;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1);
+  flag = IDAGetNumResEvals(mem, &nre);
+  check_flag(&flag, "IDAGetNumResEvals", 1);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1);
+  flag = IDADlsGetNumJacEvals(mem, &nje);
+  check_flag(&flag, "IDADlsGetNumJacEvals", 1);
+  flag = IDADlsGetNumResEvals(mem, &nreLS);
+  check_flag(&flag, "IDADlsGetNumResEvals", 1);
+
+  printf("-----------------------------------------------------------\n");
+  printf("Final run statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+
+}
+
+/* 
+ * Fweb: Rate function for the food-web problem.                        
+ * This routine computes the right-hand sides of the system equations,   
+ * consisting of the diffusion term and interaction term.                
+ * The interaction term is computed by the function WebRates.            
+ */
+
+static void Fweb(realtype tcalc, N_Vector cc, N_Vector crate,  
+                 UserData webdata)
+{ 
+  long int jx, jy, is, idyu, idyl, idxu, idxl;
+  realtype xx, yy, *cxy, *ratesxy, *cratexy, dcyli, dcyui, dcxli, dcxui;
+  
+  /* Loop over grid points, evaluate interaction vector (length ns),
+     form diffusion difference terms, and load crate.                    */
+  
+  for (jy = 0; jy < MY; jy++) {
+    yy = (webdata->dy) * jy ;
+    idyu = (jy!=MY-1) ? NSMX : -NSMX;
+    idyl = (jy!= 0  ) ? NSMX : -NSMX;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = (webdata->dx) * jx;
+      idxu = (jx!= MX-1) ?  NUM_SPECIES : -NUM_SPECIES;
+      idxl = (jx!=  0  ) ?  NUM_SPECIES : -NUM_SPECIES;
+      cxy = IJ_Vptr(cc,jx,jy);
+      ratesxy = IJ_Vptr(webdata->rates,jx,jy);
+      cratexy = IJ_Vptr(crate,jx,jy);
+      
+      /* Get interaction vector at this grid point. */
+      WebRates(xx, yy, cxy, ratesxy, webdata);
+      
+      /* Loop over species, do differencing, load crate segment. */
+      for (is = 0; is < NUM_SPECIES; is++) {
+        
+        /* Differencing in y. */
+        dcyli = *(cxy+is) - *(cxy - idyl + is) ;
+        dcyui = *(cxy + idyu + is) - *(cxy+is);
+        
+        /* Differencing in x. */
+        dcxli = *(cxy+is) - *(cxy - idxl + is);
+        dcxui = *(cxy + idxu +is) - *(cxy+is);
+        
+        /* Compute the crate values at (xx,yy). */
+        cratexy[is] = coy[is] * (dcyui - dcyli) +
+          cox[is] * (dcxui - dcxli) + ratesxy[is];
+        
+      } /* End is loop */
+    } /* End of jx loop */
+  } /* End of jy loop */
+  
+}
+
+/* 
+ * WebRates: Evaluate reaction rates at a given spatial point.
+ * At a given (x,y), evaluate the array of ns reaction terms R.
+ */
+
+static void WebRates(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                     UserData webdata)
+{
+  int is;
+  realtype fac;
+  
+  for (is = 0; is < NUM_SPECIES; is++)
+    ratesxy[is] = dotprod(NUM_SPECIES, cxy, acoef[is]);
+  
+  fac = ONE + ALPHA*xx*yy + BETA*sin(FOURPI*xx)*sin(FOURPI*yy);
+  
+  for (is = 0; is < NUM_SPECIES; is++)  
+    ratesxy[is] = cxy[is]*( bcoef[is]*fac + ratesxy[is] );
+  
+}
+
+/*
+ * dotprod: dot product routine for realtype arrays, for use by WebRates.    
+ */
+
+static realtype dotprod(long int size, realtype *x1, realtype *x2)
+{
+  long int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+  return(temp);
+  
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  if (opt == 0 && flagvalue == NULL) {
+    /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasFoodWeb_bnd.out b/examples/idas/serial/idasFoodWeb_bnd.out
new file mode 100644
index 0000000..b88210e
--- /dev/null
+++ b/examples/idas/serial/idasFoodWeb_bnd.out
@@ -0,0 +1,42 @@
+
+idasFoodWeb_bnd: Predator-prey DAE serial example problem for IDA 
+
+Number of species ns: 2     Mesh dimensions: 20 x 20     System size: 800
+Tolerance parameters:  rtol = 1e-05   atol = 1e-05
+Linear solver: IDABAND,  Band parameters mu = 40, ml = 40
+CalcIC called to correct initial predator concentrations.
+
+-----------------------------------------------------------
+  t        bottom-left  top-right    | nst  k      h
+-----------------------------------------------------------
+
+0.00e+00   1.0000e+01   1.0000e+01   |   0  0   1.6310e-08
+           1.0000e+05   1.0000e+05   |
+
+1.00e-03   1.0318e+01   1.0827e+01   |  32  4   1.0823e-04
+           1.0319e+05   1.0822e+05   |
+
+1.00e-02   1.6188e+02   1.9735e+02   | 127  4   1.4203e-04
+           1.6189e+06   1.9734e+06   |
+
+1.00e-01   2.4019e+02   2.7072e+02   | 235  1   3.9160e-02
+           2.4019e+06   2.7072e+06   |
+
+4.00e-01   2.4019e+02   2.7072e+02   | 238  1   3.1328e-01
+           2.4019e+06   2.7072e+06   |
+
+7.00e-01   2.4019e+02   2.7072e+02   | 239  1   6.2656e-01
+           2.4019e+06   2.7072e+06   |
+
+1.00e+00   2.4019e+02   2.7072e+02   | 239  1   6.2656e-01
+           2.4019e+06   2.7072e+06   |
+
+-----------------------------------------------------------
+Final run statistics: 
+
+Number of steps                    = 239
+Number of residual evaluations     = 3339
+Number of Jacobian evaluations     = 36
+Number of nonlinear iterations     = 421
+Number of error test failures      = 3
+Number of nonlinear conv. failures = 0
diff --git a/examples/idas/serial/idasHeat2D_bnd.c b/examples/idas/serial/idasHeat2D_bnd.c
new file mode 100644
index 0000000..1373319
--- /dev/null
+++ b/examples/idas/serial/idasHeat2D_bnd.c
@@ -0,0 +1,407 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for IDA: 2D heat equation, serial, banded.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version uses the band solver IDABand, and IDACalcIC.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y).
+ * The PDE is treated with central differences on a uniform M x M
+ * grid. The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = M^2. Here M = 10.
+ *
+ * The system is solved with IDA using the banded linear system
+ * solver, half-bandwidths equal to M, and default
+ * difference-quotient Jacobian. For purposes of illustration,
+ * IDACalcIC is called to compute correct values at the boundary,
+ * given incorrect values as input initial guesses. The constraints
+ * u >= 0 are posed for all components. Output is taken at
+ * t = 0, .01, .02, .04, ..., 10.24. (Output at t = 0 is for
+ * IDACalcIC cost statistics only.)
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_band.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+
+/* Problem Constants */
+
+#define NOUT  11
+#define MGRID 10
+#define NEQ   MGRID*MGRID
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+#define BVAL  RCONST(0.1)
+
+/* Type: UserData */
+
+typedef struct {
+  long int mm;
+  realtype dx;
+  realtype coeff;
+} *UserData;
+
+/* Prototypes of functions called by IDA */
+
+int heatres(realtype tres, N_Vector uu, N_Vector up, N_Vector resval, void *user_data);
+
+/* Prototypes of private functions */
+
+static void PrintHeader(realtype rtol, realtype atol);
+static void PrintOutput(void *mem, realtype t, N_Vector u);
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector id, N_Vector res);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  UserData data;
+  N_Vector uu, up, constraints, id, res;
+  int ier, iout;
+  long int mu, ml, netf, ncfn;
+  realtype rtol, atol, t0, t1, tout, tret;
+  
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = id = res = NULL;
+
+  /* Create vectors uu, up, res, constraints, id. */
+  uu = N_VNew_Serial(NEQ);
+  if(check_flag((void *)uu, "N_VNew_Serial", 0)) return(1);
+  up = N_VNew_Serial(NEQ);
+  if(check_flag((void *)up, "N_VNew_Serial", 0)) return(1);
+  res = N_VNew_Serial(NEQ);
+  if(check_flag((void *)res, "N_VNew_Serial", 0)) return(1);
+  constraints = N_VNew_Serial(NEQ);
+  if(check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+  id = N_VNew_Serial(NEQ);
+  if(check_flag((void *)id, "N_VNew_Serial", 0)) return(1);
+
+  /* Create and load problem data block. */
+  data = (UserData) malloc(sizeof *data);
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+  data->mm = MGRID;
+  data->dx = ONE/(MGRID - ONE);
+  data->coeff = ONE/( (data->dx) * (data->dx) );
+
+  /* Initialize uu, up, id. */
+  SetInitialProfile(data, uu, up, id, res);
+
+  /* Set constraints to all 1's for nonnegative solution values. */
+  N_VConst(ONE, constraints);
+
+  /* Set remaining input parameters. */
+  t0   = ZERO;
+  t1   = RCONST(0.01);
+  rtol = ZERO;
+  atol = RCONST(1.0e-3);
+
+  /* Call IDACreate and IDAMalloc to initialize solution */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1)) return(1);
+
+  ier = IDASetId(mem, id);
+  if(check_flag(&ier, "IDASetId", 1)) return(1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1)) return(1);
+  N_VDestroy_Serial(constraints);
+
+  ier = IDAInit(mem, heatres, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1)) return(1);
+
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1)) return(1);
+
+  /* Call IDABand to specify the linear solver. */
+  mu = MGRID; ml = MGRID;
+  ier = IDABand(mem, NEQ, mu, ml);
+  if(check_flag(&ier, "IDABand", 1)) return(1);
+ 
+  /* Call IDACalcIC to correct the initial values. */
+  
+  ier = IDACalcIC(mem, IDA_YA_YDP_INIT, t1);
+  if(check_flag(&ier, "IDACalcIC", 1)) return(1);
+
+  /* Print output heading. */
+  PrintHeader(rtol, atol);
+  
+  PrintOutput(mem, t0, uu);
+
+
+  /* Loop over output times, call IDASolve, and print results. */
+  
+  for (tout = t1, iout = 1; iout <= NOUT; iout++, tout *= TWO) {
+    
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1)) return(1);
+
+    PrintOutput(mem, tret, uu);
+  
+  }
+  
+  /* Print remaining counters and free memory. */
+  ier = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&ier, "IDAGetNumErrTestFails", 1);
+  ier = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&ier, "IDAGetNumNonlinSolvConvFails", 1);
+  printf("\n netf = %ld,   ncfn = %ld \n", netf, ncfn);
+
+  IDAFree(&mem);
+  N_VDestroy_Serial(uu);
+  N_VDestroy_Serial(up);
+  N_VDestroy_Serial(id);
+  N_VDestroy_Serial(res);
+  free(data);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY KINSOL
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * heatres: heat equation system residual function                       
+ * This uses 5-point central differencing on the interior points, and    
+ * includes algebraic equations for the boundary values.                 
+ * So for each interior point, the residual component has the form       
+ *    res_i = u'_i - (central difference)_i                              
+ * while for each boundary point, it is res_i = u_i.                     
+ */
+
+int heatres(realtype tres, N_Vector uu, N_Vector up, N_Vector resval, 
+            void *user_data)
+{
+  long int mm, i, j, offset, loc;
+  realtype *uv, *upv, *resv, coeff;
+  UserData data;
+  
+  uv = N_VGetArrayPointer_Serial(uu); upv = N_VGetArrayPointer_Serial(up); resv = N_VGetArrayPointer_Serial(resval);
+
+  data = (UserData)user_data;
+  mm = data->mm;
+  coeff = data->coeff;
+  
+  /* Initialize resval to uu, to take care of boundary equations. */
+  N_VScale(ONE, uu, resval);
+  
+  /* Loop over interior points; set res = up - (central difference). */
+  for (j = 1; j < mm-1; j++) {
+    offset = mm*j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      resv[loc] = upv[loc] - coeff * 
+	  (uv[loc-1] + uv[loc+1] + uv[loc-mm] + uv[loc+mm] - RCONST(4.0)*uv[loc]);
+    }
+  }
+  
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * SetInitialProfile: routine to initialize u, up, and id vectors.       
+ */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector id, N_Vector res)
+{
+  realtype xfact, yfact, *udata, *updata, *iddata;
+  long int mm, mm1, i, j, offset, loc;
+  
+  mm = data->mm;
+  mm1 = mm - 1;
+  
+  udata = N_VGetArrayPointer_Serial(uu);
+  updata = N_VGetArrayPointer_Serial(up);
+  iddata = N_VGetArrayPointer_Serial(id);
+
+  /* Initialize id to 1's. */
+  N_VConst(ONE, id);
+
+  /* Initialize uu on all grid points. */ 
+  for (j = 0; j < mm; j++) {
+    yfact = data->dx * j;
+    offset = mm*j;
+    for (i = 0;i < mm; i++) {
+      xfact = data->dx * i;
+      loc = offset + i;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+    }
+  }
+  
+  /* Initialize up vector to 0. */
+  N_VConst(ZERO, up);
+
+  /* heatres sets res to negative of ODE RHS values at interior points. */
+  heatres(ZERO, uu, up, res, data);
+  
+  /* Copy -res into up to get correct interior initial up values. */
+  N_VScale(-ONE, res, up);
+
+  /* Finally, set values of u, up, and id at boundary points. */
+  for (j = 0; j < mm; j++) {
+    offset = mm*j;
+    for (i = 0;i < mm; i++) {
+      loc = offset + i;
+      if (j == 0 || j == mm1 || i == 0 || i == mm1 ) {
+        udata[loc] = BVAL; updata[loc] = ZERO; iddata[loc] = ZERO; }
+    }
+  }
+  
+  return(0);
+
+}
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, realtype atol)
+{
+  printf("\nidasHeat2D_bnd: Heat equation, serial example problem for IDA\n");
+  printf("              Discretized heat equation on 2D unit square.\n");
+  printf("              Zero boundary conditions,");
+  printf(" polynomial initial conditions.\n");
+  printf("              Mesh dimensions: %d x %d", MGRID, MGRID);
+  printf("        Total system size: %d\n\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Constraints set to force all solution components >= 0. \n");
+  printf("Linear solver: IDABAND, banded direct solver \n");
+  printf("       difference quotient Jacobian, half-bandwidths = %d \n",MGRID);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("IDACalcIC called with input boundary values = %Lg \n",BVAL);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("IDACalcIC called with input boundary values = %g \n",BVAL);
+#else
+  printf("IDACalcIC called with input boundary values = %g \n",BVAL);
+#endif
+  /* Print output table heading and initial line of table. */
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time       umax     k  nst  nni  nje   nre   nreLS    h      \n" );
+  printf(" .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . \n");
+}
+
+/*
+ * Print Output
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector uu)
+{
+  int ier;
+  realtype umax, hused;
+  long int nst, nni, nje, nre, nreLS;
+  int kused;
+
+  umax = N_VMaxNorm(uu);
+  
+  ier = IDAGetLastOrder(mem, &kused);
+  check_flag(&ier, "IDAGetLastOrder", 1);
+  ier = IDAGetNumSteps(mem, &nst);
+  check_flag(&ier, "IDAGetNumSteps", 1);
+  ier = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&ier, "IDAGetNumNonlinSolvIters", 1);
+  ier = IDAGetNumResEvals(mem, &nre);
+  check_flag(&ier, "IDAGetNumResEvals", 1);
+  ier = IDAGetLastStep(mem, &hused);
+  check_flag(&ier, "IDAGetLastStep", 1);
+  ier = IDADlsGetNumJacEvals(mem, &nje);
+  check_flag(&ier, "IDADlsGetNumJacEvals", 1);
+  ier = IDADlsGetNumResEvals(mem, &nreLS);
+  check_flag(&ier, "IDADlsGetNumResEvals", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2Le \n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e \n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused);
+#else
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e \n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused);
+#endif
+
+}
+
+/* 
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasHeat2D_bnd.out b/examples/idas/serial/idasHeat2D_bnd.out
new file mode 100644
index 0000000..368673a
--- /dev/null
+++ b/examples/idas/serial/idasHeat2D_bnd.out
@@ -0,0 +1,30 @@
+
+idasHeat2D_bnd: Heat equation, serial example problem for IDA
+              Discretized heat equation on 2D unit square.
+              Zero boundary conditions, polynomial initial conditions.
+              Mesh dimensions: 10 x 10        Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+Linear solver: IDABAND, banded direct solver 
+       difference quotient Jacobian, half-bandwidths = 10 
+IDACalcIC called with input boundary values = 0.1 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time       umax     k  nst  nni  nje   nre   nreLS    h      
+ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . 
+  0.00   9.75461e-01  0    0    1    2     3    42   1.00e-05 
+  0.01   8.24113e-01  2   12   15   10    17   210   2.56e-03 
+  0.02   6.88124e-01  3   15   19   10    21   210   5.12e-03 
+  0.04   4.71054e-01  3   19   23   10    25   210   5.12e-03 
+  0.08   2.16451e-01  3   23   28   11    30   231   1.02e-02 
+  0.16   4.50382e-02  4   28   35   12    37   252   2.05e-02 
+  0.32   2.14520e-03  5   34   43   13    45   273   4.10e-02 
+  0.64   2.89374e-18  1   39   52   15    54   315   1.64e-01 
+  1.28   1.17136e-32  1   41   54   17    56   357   6.55e-01 
+  2.56   1.31711e-35  1   42   55   18    57   378   1.31e+00 
+  5.12   1.18294e-37  1   43   56   19    58   399   2.62e+00 
+ 10.24   1.26706e-39  1   44   57   20    59   420   5.24e+00 
+
+ netf = 0,   ncfn = 0 
diff --git a/examples/idas/serial/idasHeat2D_kry.c b/examples/idas/serial/idasHeat2D_kry.c
new file mode 100644
index 0000000..5e0af54
--- /dev/null
+++ b/examples/idas/serial/idasHeat2D_kry.c
@@ -0,0 +1,550 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for IDA: 2D heat equation, serial, GMRES.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version uses the Krylov solver IDASpgmr.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y). The
+ * PDE is treated with central differences on a uniform M x M grid.
+ * The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = M^2. Here M = 10.
+ *
+ * The system is solved with IDA using the Krylov linear solver
+ * IDASPGMR. The preconditioner uses the diagonal elements of the
+ * Jacobian only. Routines for preconditioning, required by
+ * IDASPGMR, are supplied here. The constraints u >= 0 are posed
+ * for all components. Output is taken at t = 0, .01, .02, .04,
+ * ..., 10.24. Two cases are run -- with the Gram-Schmidt type
+ * being Modified in the first case, and Classical in the second.
+ * The second run uses IDAReInit and IDAReInitSpgmr.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+
+/* Problem Constants */
+
+#define NOUT  11
+#define MGRID 10
+#define NEQ   MGRID*MGRID
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+#define FOUR  RCONST(4.0)
+
+/* User data type */
+
+typedef struct {  
+  long int mm;  /* number of grid points */
+  realtype dx;
+  realtype coeff;
+  N_Vector pp;  /* vector of prec. diag. elements */
+} *UserData;
+
+/* Prototypes for functions called by IDA */
+
+int resHeat(realtype tres, N_Vector uu, N_Vector up,
+            N_Vector resval, void *user_data);
+
+int PsetupHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               realtype c_j, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec, 
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp);
+
+/* Prototypes for private functions */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector res);
+static void PrintHeader(realtype rtol, realtype atol);
+static void PrintOutput(void *mem, realtype t, N_Vector uu);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{
+  void *mem;
+  UserData data;
+  N_Vector uu, up, constraints, res;
+  int ier, iout;
+  realtype rtol, atol, t0, t1, tout, tret;
+  long int netf, ncfn, ncfl;
+
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = res = NULL;
+
+  /* Allocate N-vectors and the user data structure. */
+
+  uu = N_VNew_Serial(NEQ);
+  if(check_flag((void *)uu, "N_VNew_Serial", 0)) return(1);
+
+  up = N_VNew_Serial(NEQ);
+  if(check_flag((void *)up, "N_VNew_Serial", 0)) return(1);
+
+  res = N_VNew_Serial(NEQ);
+  if(check_flag((void *)res, "N_VNew_Serial", 0)) return(1);
+
+  constraints = N_VNew_Serial(NEQ);
+  if(check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+
+  data = (UserData) malloc(sizeof *data);
+  data->pp = NULL;
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+
+  /* Assign parameters in the user data structure. */
+
+  data->mm  = MGRID;
+  data->dx = ONE/(MGRID-ONE);
+  data->coeff = ONE/(data->dx * data->dx);
+  data->pp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)data->pp, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize uu, up. */
+
+  SetInitialProfile(data, uu, up, res);
+
+  /* Set constraints to all 1's for nonnegative solution values. */
+
+  N_VConst(ONE, constraints);
+
+  /* Assign various parameters. */
+
+  t0   = ZERO;
+  t1   = RCONST(0.01);
+  rtol = ZERO;
+  atol = RCONST(1.0e-3); 
+
+  /* Call IDACreate and IDAMalloc to initialize solution */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1)) return(1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1)) return(1);
+  N_VDestroy_Serial(constraints);
+
+  ier = IDAInit(mem, resHeat, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1)) return(1);
+
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1)) return(1);
+
+  /* Call IDASpgmr to specify the linear solver. */
+
+  ier = IDASpgmr(mem, 0);
+  if(check_flag(&ier, "IDASpgmr", 1)) return(1);
+
+  ier = IDASpilsSetPreconditioner(mem, PsetupHeat, PsolveHeat);
+  if(check_flag(&ier, "IDASpilsSetPreconditioner", 1)) return(1);
+
+  /* Print output heading. */
+  PrintHeader(rtol, atol);
+  
+  /* 
+   * -------------------------------------------------------------------------
+   * CASE I 
+   * -------------------------------------------------------------------------
+   */
+  
+  /* Print case number, output table heading, and initial line of table. */
+
+  printf("\n\nCase 1: gsytpe = MODIFIED_GS\n");
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps\n" );
+  printf("----------------------------------------------------------------------\n");
+
+  /* Loop over output times, call IDASolve, and print results. */
+
+  for (tout = t1,iout = 1; iout <= NOUT ; iout++, tout *= TWO) {
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1)) return(1);
+    PrintOutput(mem, tret, uu);
+  }
+
+  /* Print remaining counters. */
+
+  ier = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&ier, "IDAGetNumErrTestFails", 1);
+
+  ier = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&ier, "IDAGetNumNonlinSolvConvFails", 1);
+
+  ier = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&ier, "IDASpilsGetNumConvFails", 1);
+
+  printf("\nError test failures            = %ld\n", netf);
+  printf("Nonlinear convergence failures = %ld\n", ncfn);
+  printf("Linear convergence failures    = %ld\n", ncfl);
+
+  /* 
+   * -------------------------------------------------------------------------
+   * CASE II
+   * -------------------------------------------------------------------------
+   */
+  
+  /* Re-initialize uu, up. */
+
+  SetInitialProfile(data, uu, up, res);
+  
+  /* Re-initialize IDA and IDASPGMR */
+
+  ier = IDAReInit(mem, t0, uu, up);
+  if(check_flag(&ier, "IDAReInit", 1)) return(1);
+  
+  ier = IDASpilsSetGSType(mem, CLASSICAL_GS);
+  if(check_flag(&ier, "IDASpilsSetGSType",1)) return(1); 
+  
+  /* Print case number, output table heading, and initial line of table. */
+
+  printf("\n\nCase 2: gstype = CLASSICAL_GS\n");
+  printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+  printf("  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps\n" );
+  printf("----------------------------------------------------------------------\n");
+
+  /* Loop over output times, call IDASolve, and print results. */
+
+  for (tout = t1,iout = 1; iout <= NOUT ; iout++, tout *= TWO) {
+    ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+    if(check_flag(&ier, "IDASolve", 1)) return(1);
+    PrintOutput(mem, tret, uu);
+  }
+
+  /* Print remaining counters. */
+
+  ier = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&ier, "IDAGetNumErrTestFails", 1);
+
+  ier = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&ier, "IDAGetNumNonlinSolvConvFails", 1);
+
+  ier = IDASpilsGetNumConvFails(mem, &ncfl);
+  check_flag(&ier, "IDASpilsGetNumConvFails", 1);
+
+  printf("\nError test failures            = %ld\n", netf);
+  printf("Nonlinear convergence failures = %ld\n", ncfn);
+  printf("Linear convergence failures    = %ld\n", ncfl);
+
+  /* Free Memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_Serial(uu);
+  N_VDestroy_Serial(up);
+  N_VDestroy_Serial(res);
+
+  N_VDestroy_Serial(data->pp);
+  free(data);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resHeat: heat equation system residual function (user-supplied)      
+ * This uses 5-point central differencing on the interior points, and   
+ * includes algebraic equations for the boundary values.                
+ * So for each interior point, the residual component has the form      
+ *    res_i = u'_i - (central difference)_i                             
+ * while for each boundary point, it is res_i = u_i.                     
+ */
+
+int resHeat(realtype tt, 
+            N_Vector uu, N_Vector up, N_Vector rr, 
+            void *user_data)
+{
+  long int i, j, offset, loc, mm;
+  realtype *uu_data, *up_data, *rr_data, coeff, dif1, dif2;
+  UserData data;
+  
+  uu_data = N_VGetArrayPointer_Serial(uu); 
+  up_data = N_VGetArrayPointer_Serial(up); 
+  rr_data = N_VGetArrayPointer_Serial(rr);
+
+  data = (UserData) user_data;
+  
+  coeff = data->coeff;
+  mm    = data->mm;
+  
+  /* Initialize rr to uu, to take care of boundary equations. */
+  N_VScale(ONE, uu, rr);
+  
+  /* Loop over interior points; set res = up - (central difference). */
+  for (j = 1; j < MGRID-1; j++) {
+    offset = mm*j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      dif1 = uu_data[loc-1]  + uu_data[loc+1]  - TWO * uu_data[loc];
+      dif2 = uu_data[loc-mm] + uu_data[loc+mm] - TWO * uu_data[loc];
+      rr_data[loc]= up_data[loc] - coeff * ( dif1 + dif2 );
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * PsetupHeat: setup for diagonal preconditioner.   
+ *                                                                 
+ * The optional user-supplied functions PsetupHeat and          
+ * PsolveHeat together must define the left preconditoner        
+ * matrix P approximating the system Jacobian matrix               
+ *                   J = dF/du + cj*dF/du'                         
+ * (where the DAE system is F(t,u,u') = 0), and solve the linear   
+ * systems P z = r.   This is done in this case by keeping only    
+ * the diagonal elements of the J matrix above, storing them as    
+ * inverses in a vector pp, when computed in PsetupHeat, for    
+ * subsequent use in PsolveHeat.                                 
+ *                                                                 
+ * In this instance, only cj and data (user data structure, with    
+ * pp etc.) are used from the PsetupdHeat argument list.         
+ */
+  
+int PsetupHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               realtype c_j, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  
+  long int i, j, offset, loc, mm;
+  realtype *ppv, pelinv;
+  UserData data;
+  
+  data = (UserData) user_data;
+  ppv = N_VGetArrayPointer_Serial(data->pp);
+  mm = data->mm;
+
+  /* Initialize the entire vector to 1., then set the interior points to the
+     correct value for preconditioning. */
+  N_VConst(ONE,data->pp);
+  
+  /* Compute the inverse of the preconditioner diagonal elements. */
+  pelinv = ONE/(c_j + FOUR*data->coeff); 
+  
+  for (j = 1; j < mm-1; j++) {
+    offset = mm * j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      ppv[loc] = pelinv;
+    }
+  }
+  
+  return(0);  
+}
+
+/*
+ * PsolveHeat: solve preconditioner linear system.              
+ * This routine multiplies the input vector rvec by the vector pp 
+ * containing the inverse diagonal Jacobian elements (previously  
+ * computed in PrecondHeateq), returning the result in zvec.      
+ */
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec, 
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp)
+{
+  UserData data;
+  data = (UserData) user_data;
+  N_VProd(data->pp, rvec, zvec);
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * SetInitialProfile: routine to initialize u and up vectors.
+ */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector res)
+{
+  long int mm, mm1, i, j, offset, loc;
+  realtype xfact, yfact, *udata, *updata;
+
+  mm = data->mm;
+
+  udata = N_VGetArrayPointer_Serial(uu);
+  updata = N_VGetArrayPointer_Serial(up);
+
+  /* Initialize uu on all grid points. */ 
+  mm1 = mm - 1;
+  for (j = 0; j < mm; j++) {
+    yfact = data->dx * j;
+    offset = mm*j;
+    for (i = 0;i < mm; i++) {
+      xfact = data->dx * i;
+      loc = offset + i;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+    }
+  }
+  
+  /* Initialize up vector to 0. */
+  N_VConst(ZERO, up);
+
+  /* resHeat sets res to negative of ODE RHS values at interior points. */
+  resHeat(ZERO, uu, up, res, data);
+
+  /* Copy -res into up to get correct interior initial up values. */
+  N_VScale(-ONE, res, up);
+
+  /* Set up at boundary points to zero. */
+  for (j = 0; j < mm; j++) {
+    offset = mm*j;
+    for (i = 0; i < mm; i++) {
+      loc = offset + i;
+      if (j == 0 || j == mm1 || i == 0 || i == mm1 ) updata[loc] = ZERO;
+    }
+  }
+  
+  return(0);
+  }
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, realtype atol)
+{
+  printf("\nidasHeat2D_kry: Heat equation, serial example problem for IDA \n");
+  printf("                Discretized heat equation on 2D unit square. \n");
+  printf("                Zero boundary conditions,");
+  printf(" polynomial initial conditions.\n");
+  printf("                Mesh dimensions: %d x %d", MGRID, MGRID);
+  printf("     Total system size: %d\n\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Constraints set to force all solution components >= 0. \n");
+  printf("Linear solver: IDASPGMR, preconditioner using diagonal elements. \n");
+}
+
+/*
+ * PrintOutput: print max norm of solution and current solver statistics
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector uu)
+{
+  realtype hused, umax;
+  long int nst, nni, nje, nre, nreLS, nli, npe, nps;
+  int kused, ier;
+  
+  umax = N_VMaxNorm(uu);
+
+  ier = IDAGetLastOrder(mem, &kused);
+  check_flag(&ier, "IDAGetLastOrder", 1);
+  ier = IDAGetNumSteps(mem, &nst);
+  check_flag(&ier, "IDAGetNumSteps", 1);
+  ier = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&ier, "IDAGetNumNonlinSolvIters", 1);
+  ier = IDAGetNumResEvals(mem, &nre);
+  check_flag(&ier, "IDAGetNumResEvals", 1);
+  ier = IDAGetLastStep(mem, &hused);
+  check_flag(&ier, "IDAGetLastStep", 1);
+  ier = IDASpilsGetNumJtimesEvals(mem, &nje);
+  check_flag(&ier, "IDASpilsGetNumJtimesEvals", 1);
+  ier = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&ier, "IDASpilsGetNumLinIters", 1);
+  ier = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&ier, "IDASpilsGetNumResEvals", 1);
+  ier = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&ier, "IDASpilsGetPrecEvals", 1);
+  ier = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&ier, "IDASpilsGetNumPrecSolves", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2Le  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#else
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#endif
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasHeat2D_kry.out b/examples/idas/serial/idasHeat2D_kry.out
new file mode 100644
index 0000000..74602d7
--- /dev/null
+++ b/examples/idas/serial/idasHeat2D_kry.out
@@ -0,0 +1,55 @@
+
+idasHeat2D_kry: Heat equation, serial example problem for IDA 
+                Discretized heat equation on 2D unit square. 
+                Zero boundary conditions, polynomial initial conditions.
+                Mesh dimensions: 10 x 10     Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+Linear solver: IDASPGMR, preconditioner using diagonal elements. 
+
+
+Case 1: gsytpe = MODIFIED_GS
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.01   8.24106e-01  2   12   14    7    14     7   2.56e-03    8  21
+  0.02   6.88134e-01  3   15   18   12    18    12   5.12e-03    8  30
+  0.04   4.70711e-01  3   18   24   21    24    21   6.58e-03    9  45
+  0.08   2.16509e-01  3   22   29   30    29    30   1.32e-02    9  59
+  0.16   4.57687e-02  4   28   36   44    36    44   1.32e-02    9  80
+  0.32   2.09938e-03  4   35   44   67    44    67   2.63e-02   10 111
+  0.64   0.00000e+00  1   39   51   77    51    77   1.05e-01   12 128
+  1.28   0.00000e+00  1   41   53   77    53    77   4.21e-01   14 130
+  2.56   0.00000e+00  1   43   55   77    55    77   1.69e+00   16 132
+  5.12   0.00000e+00  1   44   56   77    56    77   3.37e+00   17 133
+ 10.24   0.00000e+00  1   45   57   77    57    77   6.74e+00   18 134
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
+
+
+Case 2: gstype = CLASSICAL_GS
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.01   8.24106e-01  2   12   14    7    14     7   2.56e-03    8  21
+  0.02   6.88134e-01  3   15   18   12    18    12   5.12e-03    8  30
+  0.04   4.70711e-01  3   18   24   21    24    21   6.58e-03    9  45
+  0.08   2.16509e-01  3   22   29   30    29    30   1.32e-02    9  59
+  0.16   4.57687e-02  4   28   36   44    36    44   1.32e-02    9  80
+  0.32   2.09938e-03  4   35   44   67    44    67   2.63e-02   10 111
+  0.64   2.15648e-20  1   39   51   77    51    77   1.05e-01   12 128
+  1.28   1.30250e-20  1   41   53   77    53    77   4.21e-01   14 130
+  2.56   3.00951e-20  1   43   55   77    55    77   1.69e+00   16 132
+  5.12   7.38674e-20  1   44   56   77    56    77   3.37e+00   17 133
+ 10.24   1.79685e-19  1   45   57   77    57    77   6.74e+00   18 134
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
diff --git a/examples/idas/serial/idasHessian_ASA_FSA.c b/examples/idas/serial/idasHessian_ASA_FSA.c
new file mode 100644
index 0000000..40d9591
--- /dev/null
+++ b/examples/idas/serial/idasHessian_ASA_FSA.c
@@ -0,0 +1,741 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4809 $
+ * $Date: 2016-07-18 11:16:25 -0700 (Mon, 18 Jul 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Cosmin Petra @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ *
+ * Hessian using adjoint sensitivity example problem. 
+ * 
+ * This simple example problem for IDAS, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *   [ y1' + p1 * y1 - p2 * y2 * y3              = 0 
+ *   [ y2' - p1 * y1 + p2 * y2 * y3 + p3 * y2^2  = 0 
+ *   [ y1 + y2 + y3 -1                               = 0 
+ * 
+ *        [1]        [-p1]
+ *   y(0)=[0]  y'(0)=[ p1]   p1 = 0.04   p2 = 1e4   p3 = 1e07   
+ *        [0]        [ 0 ]
+ *
+ *       80
+ *      / 
+ *  G = | 0.5 * (y1^2 + y2^2 + y3^2) dt
+ *      /
+ *      0
+ * Compute the gradient (using FSA and ASA) and Hessian (FSA over ASA)
+ * of G with respect to parameters p1 and p2.
+ *
+ * Reference: D.B. Ozyurt and P.I. Barton, SISC 26(5) 1725-1743, 2005.
+ *
+ * Error handling was suppressed for code readibility reasons.
+*/
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+
+#include <idas/idas.h>
+#include <idas/idas_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+/* Accessor macros */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i= 1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* (i,j)-th matrix component i,j = 1..NEQ */
+
+/* Problem Constants */
+#define NEQ      3             /* number of equations                  */
+#define NP       2             /* number of sensitivities              */
+
+#define T0       RCONST(0.0)   /* Initial time. */
+#define TF       RCONST(80.0)  /* Final time. */
+
+/* Tolerances */
+#define RTOL     RCONST(1e-08) /* scalar relative tolerance            */
+#define ATOL     RCONST(1e-10) /* vector absolute tolerance components */
+#define RTOLA    RCONST(1e-08) /* for adjoint integration              */
+#define ATOLA    RCONST(1e-08) /* for adjoint integration              */
+
+/* Parameters */
+#define P1 RCONST(0.04)
+#define P2 RCONST(1.0e4)
+#define P3 RCONST(3.0e7)
+
+/* Predefined consts */
+#define HALF RCONST(0.5)
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+/* User defined struct */
+typedef struct { 
+  realtype p[3];
+} *UserData;
+
+/* residual for forward problem */
+static int res(realtype t, N_Vector yy, N_Vector yp, 
+               N_Vector resval, void *user_data);
+
+static int resS(int Ns, realtype t, 
+                N_Vector yy, N_Vector yp, N_Vector resval,
+                N_Vector *yyS, N_Vector *ypS, N_Vector *resvalS,
+                void *user_data, N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data);
+
+static int rhsQS(int Ns, realtype t, N_Vector yy, N_Vector yp, 
+                 N_Vector *yyS, N_Vector *ypS, N_Vector rrQ, N_Vector *rhsvalQS,
+                 void *user_data,  N_Vector yytmp, N_Vector yptmp, N_Vector tmpQS);
+
+static int resBS1(realtype tt, N_Vector yy, N_Vector yp, N_Vector *yyS, N_Vector *ypS,
+                  N_Vector yyB, N_Vector ypB, N_Vector resvalBQ, void *user_dataB);
+
+
+static int rhsQBS1(realtype tt, N_Vector yy, N_Vector yp,
+                   N_Vector *yyS, N_Vector *ypS, N_Vector yyB, N_Vector ypB,
+                   N_Vector rhsBQS, void *user_dataB);
+
+static int resBS2(realtype tt, N_Vector yy, N_Vector yp, N_Vector *yyS, N_Vector *ypS,
+                  N_Vector yyB, N_Vector ypB, N_Vector resvalBQ, void *user_dataB);
+
+
+static int rhsQBS2(realtype tt, N_Vector yy, N_Vector yp,
+                   N_Vector *yyS, N_Vector *ypS, N_Vector yyB, N_Vector ypB,
+                   N_Vector rhsBQS, void *user_dataB);
+
+
+int main(int argc, char *argv[])
+{
+  N_Vector yy, yp, q, *yyS, *ypS, *qS; 
+  N_Vector yyB1, ypB1, qB1, yyB2, ypB2, qB2;
+  void *ida_mem;
+  UserData data;
+  realtype time, ti, tf;
+  int flag, nckp, indexB1, indexB2;
+  realtype G, Gm, Gp, dp1, dp2, grdG_fwd[2], grdG_bck[2], grdG_cntr[2], H11, H22;
+  realtype rtolFD, atolFD;
+
+
+  /* Print problem description */
+  printf("\nAdjoint Sensitivity Example for Chemical Kinetics\n");
+  printf("---------------------------------------------------------\n");
+  printf("DAE: dy1/dt + p1*y1 - p2*y2*y3 = 0\n");
+  printf("     dy2/dt - p1*y1 + p2*y2*y3 + p3*(y2)^2 = 0\n");
+  printf("               y1  +  y2  +  y3 = 0\n\n");
+  printf("Find dG/dp and d^2G/dp^2, where p=[p1,p2] for\n");
+  printf("     G = int_t0^tB0 g(t,p,y) dt\n");
+  printf("     g(t,p,y) = y3\n\n\n");
+
+  /* Alocate and initialize user data. */
+  data = (UserData) malloc(sizeof(*data));
+  data->p[0] = P1; data->p[1] = P2; data->p[2] = P3;
+
+  /* Consistent IC */
+  yy = N_VNew_Serial(NEQ);
+  yp = N_VNew_Serial(NEQ);
+  Ith(yy,1) = ONE; Ith(yy,2) = ZERO; Ith(yy,3) = ZERO;
+  Ith(yp,1) = -P1; Ith(yp,2) = P1; Ith(yp,3) = 0;
+
+  q = N_VNew_Serial(1);
+  N_VConst(ZERO, q);
+
+  yyS = N_VCloneVectorArray_Serial(NP, yy);
+  ypS = N_VCloneVectorArray_Serial(NP, yp);
+  N_VConst(ZERO, yyS[0]); N_VConst(ZERO, yyS[1]);
+  N_VConst(ZERO, ypS[0]); N_VConst(ZERO, ypS[1]);
+
+  qS = N_VCloneVectorArray_Serial(NP, q);
+  N_VConst(ZERO, qS[0]);
+
+  ida_mem = IDACreate();
+
+  ti = T0;
+  flag = IDAInit(ida_mem, res, ti, yy, yp);
+
+  /* Forward problem's setup. */
+  flag = IDASStolerances(ida_mem, RTOL, ATOL);
+  flag = IDADense(ida_mem, NEQ);
+  flag = IDASetUserData(ida_mem, data);
+  flag = IDASetMaxNumSteps(ida_mem, 1500);
+
+  /* Quadrature's setup. */
+  flag = IDAQuadInit(ida_mem, rhsQ, q);
+  flag = IDAQuadSStolerances(ida_mem, RTOL, ATOL);
+  flag = IDASetQuadErrCon(ida_mem, TRUE);
+
+  /* Sensitivity's setup. */
+  flag = IDASensInit(ida_mem, NP, IDA_SIMULTANEOUS, resS, yyS, ypS);
+  flag = IDASensEEtolerances(ida_mem);
+  flag = IDASetSensErrCon(ida_mem, TRUE);
+
+  /* Setup of quadrature's sensitivities */
+  flag = IDAQuadSensInit(ida_mem, rhsQS, qS);
+  flag = IDAQuadSensEEtolerances(ida_mem);
+  flag = IDASetQuadSensErrCon(ida_mem, TRUE); 
+  
+  /* Initialize ASA. */
+  flag = IDAAdjInit(ida_mem, 100, IDA_HERMITE);
+
+  printf("---------------------------------------------------------\n");
+  printf("Forward integration\n");
+  printf("---------------------------------------------------------\n\n");
+
+  tf = TF;
+  flag = IDASolveF(ida_mem, tf, &time, yy, yp, IDA_NORMAL, &nckp);
+
+  IDAGetQuad(ida_mem, &time, q);
+  G = Ith(q,1);
+  printf("     G:    %12.4e\n", G);
+
+  /* Sensitivities are needed for IC of backward problems. */
+  IDAGetSensDky(ida_mem, tf, 0, yyS);
+  IDAGetSensDky(ida_mem, tf, 1, ypS);
+
+  IDAGetQuadSens(ida_mem, &time, qS);
+  printf("   dG/dp:  %12.4e %12.4e\n", Ith(qS[0],1), Ith(qS[1],1));
+  printf("\n");
+  /******************************
+  * BACKWARD PROBLEM #1
+  *******************************/
+
+  /* Consistent IC. */
+  yyB1 = N_VNew_Serial(2*NEQ);
+  ypB1 = N_VNew_Serial(2*NEQ);
+
+  N_VConst(ZERO, yyB1);
+  Ith(yyB1,3) = Ith(yy,3);
+  Ith(yyB1,6) = Ith(yyS[0], 3);
+
+  N_VConst(ZERO, ypB1);
+  Ith(ypB1,1) = Ith(yy,3)-Ith(yy,1);
+  Ith(ypB1,2) = Ith(yy,3)-Ith(yy,2);
+  Ith(ypB1,4) = Ith(yyS[0],3) - Ith(yyS[0],1);
+  Ith(ypB1,5) = Ith(yyS[0],3) - Ith(yyS[0],2);
+  
+  qB1 = N_VNew_Serial(2*NP);
+  N_VConst(ZERO, qB1);
+
+  flag = IDACreateB(ida_mem, &indexB1);
+  flag = IDAInitBS(ida_mem, indexB1, resBS1, tf, yyB1, ypB1);
+  flag = IDASStolerancesB(ida_mem, indexB1, RTOLA, ATOLA);   
+  flag = IDASetUserDataB(ida_mem, indexB1, data);
+  flag = IDASetMaxNumStepsB(ida_mem, indexB1, 5000);
+  flag = IDADenseB(ida_mem, indexB1, 2*NEQ);
+  flag = IDAQuadInitBS(ida_mem, indexB1, rhsQBS1, qB1);
+
+  /******************************
+  * BACKWARD PROBLEM #2  
+  *******************************/
+
+  /* Consistent IC. */
+  yyB2 = N_VNew_Serial(2*NEQ);
+  ypB2 = N_VNew_Serial(2*NEQ);
+
+  N_VConst(ZERO, yyB2);
+  Ith(yyB2,3) = Ith(yy,3);
+  Ith(yyB2,6) = Ith(yyS[1],3);
+
+  N_VConst(ZERO, ypB2);
+  Ith(ypB2,1) = Ith(yy,3)-Ith(yy,1);
+  Ith(ypB2,2) = Ith(yy,3)-Ith(yy,2);
+  Ith(ypB2,4) = Ith(yyS[1],3) - Ith(yyS[1],1);
+  Ith(ypB2,5) = Ith(yyS[1],3) - Ith(yyS[1],2);
+  
+  qB2 = N_VNew_Serial(2*NP);
+  N_VConst(ZERO, qB2);
+
+  flag = IDACreateB(ida_mem, &indexB2);
+  flag = IDAInitBS(ida_mem, indexB2, resBS2, tf, yyB2, ypB2);
+  flag = IDASStolerancesB(ida_mem, indexB2, RTOLA, ATOLA);   
+  flag = IDASetUserDataB(ida_mem, indexB2, data);
+  flag = IDASetMaxNumStepsB(ida_mem, indexB2, 2500);
+  flag = IDADenseB(ida_mem, indexB2, 2*NEQ);
+  flag = IDAQuadInitBS(ida_mem, indexB2, rhsQBS2, qB2);
+
+  /* Integrate backward problems. */
+  printf("---------------------------------------------------------\n");
+  printf("Backward integration \n");
+  printf("---------------------------------------------------------\n\n"); 
+
+  flag = IDASolveB(ida_mem, ti, IDA_NORMAL);
+
+  flag = IDAGetB(ida_mem, indexB1, &time, yyB1, ypB1);
+  /* 
+     flag = IDAGetNumSteps(IDAGetAdjIDABmem(ida_mem, indexB1), &nst);
+     printf("at time=%g \tpb 1 Num steps:%d\n", time, nst); 
+     flag = IDAGetNumSteps(IDAGetAdjIDABmem(ida_mem, indexB2), &nst);
+     printf("at time=%g \tpb 2 Num steps:%d\n\n", time, nst); 
+  */
+
+  flag = IDAGetQuadB(ida_mem, indexB1, &time, qB1);
+  flag = IDAGetQuadB(ida_mem, indexB2, &time, qB2);
+  printf("   dG/dp:  %12.4e %12.4e   (from backward pb. 1)\n", Ith(qB1,1), Ith(qB1,2));
+  printf("   dG/dp:  %12.4e %12.4e   (from backward pb. 2)\n", Ith(qB2,1), Ith(qB2,2));
+
+  printf("\n");
+  printf("   H = d2G/dp2:\n");
+  printf("        (1)            (2)\n");
+  printf("  %12.4e  %12.4e\n", Ith(qB1,3), Ith(qB2,3));
+  printf("  %12.4e  %12.4e\n", Ith(qB1,4), Ith(qB2,4));
+
+  IDAFree(&ida_mem);
+
+  /*********************************
+  * Use Finite Differences to verify
+  **********************************/
+
+  /* Perturbations are of different magnitudes as p1 and p2 are. */
+  dp1 = RCONST(1.0e-3);
+  dp2 = RCONST(2.5e+2);
+
+  printf("\n");
+  printf("---------------------------------------------------------\n");
+  printf("Finite Differences ( dp1=%6.1e and dp2 = %6.1e )\n", dp1, dp2);
+  printf("---------------------------------------------------------\n\n");
+
+  ida_mem = IDACreate();
+
+  /********************
+  * Forward FD for p1
+  ********************/
+  data->p[0] += dp1;
+
+  Ith(yy,1) = ONE; Ith(yy,2) = ZERO; Ith(yy,3) = ZERO;
+  Ith(yp,1) = -data->p[0]; Ith(yp,2) = -Ith(yp,1); Ith(yp,3) = 0;
+  N_VConst(ZERO, q);
+  ti = T0;
+  tf = TF;
+
+  flag = IDAInit(ida_mem, res, ti, yy, yp);
+
+  rtolFD = RCONST(1.0e-12);
+  atolFD = RCONST(1.0e-14);
+
+  flag = IDASStolerances(ida_mem, rtolFD, atolFD);
+  flag = IDADense(ida_mem, NEQ);
+  flag = IDASetUserData(ida_mem, data);
+  flag = IDASetMaxNumSteps(ida_mem, 10000);
+
+  flag = IDAQuadInit(ida_mem, rhsQ, q);
+  flag = IDAQuadSStolerances(ida_mem, rtolFD, atolFD);
+  flag = IDASetQuadErrCon(ida_mem, TRUE);
+
+  flag = IDASolve(ida_mem, tf, &time, yy, yp, IDA_NORMAL);
+  flag = IDAGetQuad(ida_mem, &time, q);
+  Gp = Ith(q,1);
+
+  /********************
+  * Backward FD for p1
+  ********************/
+  data->p[0] -= 2*dp1;
+
+  Ith(yy,1) = ONE; Ith(yy,2) = ZERO; Ith(yy,3) = ZERO;
+  Ith(yp,1) = -data->p[0]; Ith(yp,2) = -Ith(yp,1); Ith(yp,3) = 0;
+  N_VConst(ZERO, q);
+  
+  flag = IDAReInit(ida_mem, ti, yy, yp);
+  flag = IDAQuadReInit(ida_mem, q);
+
+  flag = IDASolve(ida_mem, tf, &time, yy, yp, IDA_NORMAL);
+  flag = IDAGetQuad(ida_mem, &time, q);
+  Gm = Ith(q,1);
+
+  /* Compute FD for p1. */
+  grdG_fwd[0] = (Gp-G)/dp1;
+  grdG_bck[0] = (G-Gm)/dp1;
+  grdG_cntr[0] = (Gp-Gm)/(2.0*dp1);
+  H11 = (Gp - 2.0*G + Gm) / (dp1*dp1);
+
+  /********************
+  * Forward FD for p2
+  ********************/
+  /*restore p1*/
+  data->p[0] += dp1; 
+  data->p[1] += dp2;
+
+  Ith(yy,1) = ONE; Ith(yy,2) = ZERO; Ith(yy,3) = ZERO;
+  Ith(yp,1) = -data->p[0]; Ith(yp,2) = -Ith(yp,1); Ith(yp,3) = 0;
+  N_VConst(ZERO, q);
+
+  flag = IDAReInit(ida_mem, ti, yy, yp);
+  flag = IDAQuadReInit(ida_mem, q);
+
+  flag = IDASolve(ida_mem, tf, &time, yy, yp, IDA_NORMAL);
+  flag = IDAGetQuad(ida_mem, &time, q);
+  Gp = Ith(q,1);
+
+  /********************
+  * Backward FD for p2
+  ********************/
+  data->p[1] -= 2*dp2;
+
+  Ith(yy,1) = ONE; Ith(yy,2) = ZERO; Ith(yy,3) = ZERO;
+  Ith(yp,1) = -data->p[0]; Ith(yp,2) = -Ith(yp,1); Ith(yp,3) = 0;
+  N_VConst(ZERO, q);
+  
+  flag = IDAReInit(ida_mem, ti, yy, yp);
+  flag = IDAQuadReInit(ida_mem, q);
+
+  flag = IDASolve(ida_mem, tf, &time, yy, yp, IDA_NORMAL);
+  flag = IDAGetQuad(ida_mem, &time, q);
+  Gm = Ith(q,1);
+
+  /* Compute FD for p2. */
+  grdG_fwd[1] = (Gp-G)/dp2;
+  grdG_bck[1] = (G-Gm)/dp2;
+  grdG_cntr[1] = (Gp-Gm)/(2.0*dp2);
+  H22 = (Gp - 2.0*G + Gm) / (dp2*dp2);
+
+
+  printf("\n");
+  printf("   dG/dp:  %12.4e  %12.4e   (fwd FD)\n",  grdG_fwd[0],  grdG_fwd[1]);
+  printf("           %12.4e  %12.4e   (bck FD)\n",  grdG_bck[0],  grdG_bck[1]);
+  printf("           %12.4e  %12.4e   (cntr FD)\n", grdG_cntr[0], grdG_cntr[1]);
+  printf("\n");
+  printf("  H(1,1):  %12.4e\n", H11);
+  printf("  H(2,2):  %12.4e\n", H22);
+
+  IDAFree(&ida_mem);
+
+  N_VDestroy_Serial(yyB1);
+  N_VDestroy_Serial(ypB1);
+  N_VDestroy_Serial(qB1);
+
+  N_VDestroy_Serial(yyB2);
+  N_VDestroy_Serial(ypB2);
+  N_VDestroy_Serial(qB2);
+
+
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+  N_VDestroy_Serial(q);
+  N_VDestroyVectorArray_Serial(yyS, NP);
+  N_VDestroyVectorArray_Serial(ypS, NP);
+  N_VDestroyVectorArray_Serial(qS, NP);
+
+  free(data);
+  return 0;
+}
+
+
+
+static int res(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
+{
+  realtype y1, y2, y3, yp1, yp2, yp3, *rval;
+  UserData data;
+  realtype p1, p2, p3;
+
+  y1  = Ith(yy,1); y2  = Ith(yy,2); y3  = Ith(yy,3); 
+  yp1 = Ith(yp,1); yp2 = Ith(yp,2); yp3 = Ith(yp,3);
+  rval = N_VGetArrayPointer_Serial(rr);
+
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  rval[0] = p1*y1-p2*y2*y3;
+  rval[1] = -rval[0] + p3*y2*y2 + yp2;
+  rval[0]+= yp1;
+  rval[2] = y1+y2+y3-1;
+
+  return(0);
+}
+
+static int resS(int Ns, realtype t, 
+                N_Vector yy, N_Vector yp, N_Vector resval,
+                N_Vector *yyS, N_Vector *ypS, N_Vector *resvalS,
+                void *user_data, 
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  UserData data;
+  realtype p1, p2, p3;
+  realtype y1, y2, y3;
+  realtype yp1, yp2, yp3;
+  realtype s1, s2, s3;
+  realtype sd1, sd2, sd3;
+  realtype rs1, rs2, rs3;
+  int is;
+
+  data = (UserData) user_data;
+  p1 = data->p[0];
+  p2 = data->p[1];
+  p3 = data->p[2];
+
+  y1 = Ith(yy,1);
+  y2 = Ith(yy,2);
+  y3 = Ith(yy,3);
+
+  yp1 = Ith(yp,1);
+  yp2 = Ith(yp,2);
+  yp3 = Ith(yp,3);
+
+  for (is=0; is<NP; is++) {
+
+    s1 = Ith(yyS[is],1);
+    s2 = Ith(yyS[is],2);
+    s3 = Ith(yyS[is],3);
+
+    sd1 = Ith(ypS[is],1);
+    sd2 = Ith(ypS[is],2);
+    sd3 = Ith(ypS[is],3);
+
+    rs1 = sd1 + p1*s1 - p2*y3*s2 - p2*y2*s3;
+    rs2 = sd2 - p1*s1 + p2*y3*s2 + p2*y2*s3 + TWO*p3*y2*s2;
+    rs3 = s1 + s2 + s3;
+
+    switch (is) {
+    case 0:
+      rs1 += y1;
+      rs2 -= y1;
+      break;
+    case 1:
+      rs1 -= y2*y3;
+      rs2 += y2*y3;
+      break;
+    }
+  
+    Ith(resvalS[is],1) = rs1;
+    Ith(resvalS[is],2) = rs2;
+    Ith(resvalS[is],3) = rs3;
+
+  }
+
+  return(0);
+}
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data)
+{
+
+  realtype y1, y2, y3;
+
+  y1 = Ith(yy,1); y2 = Ith(yy,2); y3 = Ith(yy,3); 
+  Ith(qdot,1) = HALF*(y1*y1+y2*y2+y3*y3);
+
+  return(0);
+}
+
+static int rhsQS(int Ns, realtype t,
+                 N_Vector yy, N_Vector yp, 
+                 N_Vector *yyS, N_Vector *ypS, 
+                 N_Vector rrQ, N_Vector *rhsvalQS,
+                 void *user_data,
+                 N_Vector yytmp, N_Vector yptmp, N_Vector tmpQS)
+{
+
+  realtype y1, y2, y3;
+  realtype s1, s2, s3;
+
+  y1 = Ith(yy,1); 
+  y2 = Ith(yy,2); 
+  y3 = Ith(yy,3);
+
+  /* 1st sensitivity RHS */
+  s1 = Ith(yyS[0],1);
+  s2 = Ith(yyS[0],2);
+  s3 = Ith(yyS[0],3);
+  Ith(rhsvalQS[0],1) = y1*s1 + y2*s2 + y3*s3;
+
+  /* 2nd sensitivity RHS */
+  s1 = Ith(yyS[1],1);
+  s2 = Ith(yyS[1],2);
+  s3 = Ith(yyS[1],3);
+  Ith(rhsvalQS[1],1) = y1*s1 + y2*s2 + y3*s3;
+
+  return(0);
+}
+
+/* Residuals for adjoint model. */
+static int resBS1(realtype tt, 
+                  N_Vector yy, N_Vector yp, 
+                  N_Vector *yyS, N_Vector *ypS,
+                  N_Vector yyB, N_Vector ypB,
+                  N_Vector rrBS, void *user_dataB)
+
+{
+  UserData data;
+  realtype y1, y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3, m1, m2, m3;
+  realtype lp1, lp2, mp1, mp2;
+  realtype s1, s2, s3;
+  realtype l21;
+  
+  data = (UserData) user_dataB;
+
+  /* The parameters. */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y vector. */
+  y1 = Ith(yy,1); y2 = Ith(yy,2); y3 = Ith(yy,3);
+
+  /* The lambda vector. */
+  l1 = Ith(yyB,1); l2 = Ith(yyB,2); l3 = Ith(yyB,3);
+  /* The mu vector. */
+  m1 = Ith(yyB,4); m2 = Ith(yyB,5); m3 = Ith(yyB,6);
+
+  /* The lambda dot vector. */
+  lp1 = Ith(ypB,1); lp2 = Ith(ypB,2);
+  /* The mu dot vector. */
+  mp1 = Ith(ypB,4); mp2 = Ith(ypB,5);
+
+  /* The sensitivity with respect to p1 */
+  s1 = Ith(yyS[0],1); s2 = Ith(yyS[0],2); s3 = Ith(yyS[0],3);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+
+  Ith(rrBS,1) = lp1 + p1*l21 - l3 + y1;
+  Ith(rrBS,2) = lp2 - p2*y3*l21 - TWO*p3*y2*l2 - l3 + y2;
+  Ith(rrBS,3) = -p2*y2*l21 - l3 + y3;
+
+  Ith(rrBS,4) = mp1 + p1*(-m1+m2) - m3 + l21 + s1;
+  Ith(rrBS,5) = mp2 + p2*y3*m1 - (p2*y3+TWO*p3*y2)*m2 - m3 + p2*s3*l1 - (TWO*p3*s2+p2*s3)*l2 + s2;
+  Ith(rrBS,6) = p2*y2*(m1-m2) - m3 - p2*s2*l21 + s3;
+
+  return(0);
+}
+
+static int rhsQBS1(realtype tt, 
+                 N_Vector yy, N_Vector yp,
+                 N_Vector *yyS, N_Vector *ypS,
+                 N_Vector yyB, N_Vector ypB,
+                 N_Vector rhsBQS, void *user_dataB)
+{
+  UserData data;
+  realtype y1, y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3, m1, m2, m3;
+  realtype s1, s2, s3;
+  realtype l21;
+  
+  data = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y vector */
+  y1 = Ith(yy,1); y2 = Ith(yy,2); y3 = Ith(yy,3);
+  
+  /* The lambda vector. */
+  l1 = Ith(yyB,1); l2 = Ith(yyB,2); l3 = Ith(yyB,3);
+  /* The mu vector. */
+  m1 = Ith(yyB,4); m2 = Ith(yyB,5); m3 = Ith(yyB,6);
+
+  /* The sensitivity with respect to p1 */
+  s1 = Ith(yyS[0],1); s2 = Ith(yyS[0],2); s3 = Ith(yyS[0],3);
+  
+  /* Temporary variables */
+  l21 = l2-l1;
+
+  Ith(rhsBQS,1) = -y1*l21;
+  Ith(rhsBQS,2) = y2*y3*l21;
+
+  Ith(rhsBQS,3) = y1*(m1-m2) - s1*l21; 
+  Ith(rhsBQS,4) = y2*y3*(m2-m1) + (y3*s2+y2*s3)*l21;
+
+  return(0);
+}
+
+static int resBS2(realtype tt, 
+                  N_Vector yy, N_Vector yp, 
+                  N_Vector *yyS, N_Vector *ypS,
+                  N_Vector yyB, N_Vector ypB,
+                  N_Vector rrBS, void *user_dataB)
+
+{
+  UserData data;
+  realtype y1, y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3, m1, m2, m3;
+  realtype lp1, lp2, mp1, mp2;
+  realtype s1, s2, s3;
+  realtype l21;
+  
+  data = (UserData) user_dataB;
+
+  /* The parameters. */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y vector. */
+  y1 = Ith(yy,1); y2 = Ith(yy,2); y3 = Ith(yy,3);
+
+  /* The lambda vector. */
+  l1 = Ith(yyB,1); l2 = Ith(yyB,2); l3 = Ith(yyB,3);
+  /* The mu vector. */
+  m1 = Ith(yyB,4); m2 = Ith(yyB,5); m3 = Ith(yyB,6);
+
+  /* The lambda dot vector. */
+  lp1 = Ith(ypB,1); lp2 = Ith(ypB,2);
+  /* The mu dot vector. */
+  mp1 = Ith(ypB,4); mp2 = Ith(ypB,5);
+
+  /* The sensitivity with respect to p2 */
+  s1 = Ith(yyS[1],1); s2 = Ith(yyS[1],2); s3 = Ith(yyS[1],3);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+
+  Ith(rrBS,1) = lp1 + p1*l21 - l3 + y1;
+  Ith(rrBS,2) = lp2 - p2*y3*l21 - TWO*p3*y2*l2 - l3 + y2;
+  Ith(rrBS,3) = -p2*y2*l21 - l3 + y3;
+
+  Ith(rrBS,4) = mp1 + p1*(-m1+m2) - m3 + s1;
+  Ith(rrBS,5) = mp2 + p2*y3*m1 - (p2*y3+TWO*p3*y2)*m2 - m3 + (y3+p2*s3)*l1 - (y3+TWO*p3*s2+p2*s3)*l2 + s2;
+  Ith(rrBS,6) = p2*y2*(m1-m2) - m3 - (y2+p2*s2)*l21 + s3;
+
+  return(0);
+}
+
+static int rhsQBS2(realtype tt, 
+                 N_Vector yy, N_Vector yp,
+                 N_Vector *yyS, N_Vector *ypS,
+                 N_Vector yyB, N_Vector ypB,
+                 N_Vector rhsBQS, void *user_dataB)
+{
+  UserData data;
+  realtype y1, y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3, m1, m2, m3;
+  realtype s1, s2, s3;
+  realtype l21;
+  
+  data = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y vector */
+  y1 = Ith(yy,1); y2 = Ith(yy,2); y3 = Ith(yy,3);
+  
+  /* The lambda vector. */
+  l1 = Ith(yyB,1); l2 = Ith(yyB,2); l3 = Ith(yyB,3);
+  /* The mu vector. */
+  m1 = Ith(yyB,4); m2 = Ith(yyB,5); m3 = Ith(yyB,6);
+
+  /* The sensitivity with respect to p2 */
+  s1 = Ith(yyS[1],1); s2 = Ith(yyS[1],2); s3 = Ith(yyS[1],3);
+  
+  /* Temporary variables */
+  l21 = l2-l1;
+
+  Ith(rhsBQS,1) = -y1*l21;
+  Ith(rhsBQS,2) =  y2*y3*l21;
+
+  Ith(rhsBQS,3) = y1*(m1-m2) - s1*l21; 
+  Ith(rhsBQS,4) = y2*y3*(m2-m1) + (y3*s2+y2*s3)*l21;
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasHessian_ASA_FSA.out b/examples/idas/serial/idasHessian_ASA_FSA.out
new file mode 100644
index 0000000..0bfa44a
--- /dev/null
+++ b/examples/idas/serial/idasHessian_ASA_FSA.out
@@ -0,0 +1,42 @@
+
+Adjoint Sensitivity Example for Chemical Kinetics
+---------------------------------------------------------
+DAE: dy1/dt + p1*y1 - p2*y2*y3 = 0
+     dy2/dt - p1*y1 + p2*y2*y3 + p3*(y2)^2 = 0
+               y1  +  y2  +  y3 = 0
+
+Find dG/dp and d^2G/dp^2, where p=[p1,p2] for
+     G = int_t0^tB0 g(t,p,y) dt
+     g(t,p,y) = y3
+
+
+---------------------------------------------------------
+Forward integration
+---------------------------------------------------------
+
+     G:      2.5042e+01
+   dG/dp:   -1.3753e+02   4.1552e-04
+
+---------------------------------------------------------
+Backward integration 
+---------------------------------------------------------
+
+   dG/dp:   -1.3753e+02   4.1552e-04   (from backward pb. 1)
+   dG/dp:   -1.3753e+02   4.1552e-04   (from backward pb. 2)
+
+   H = d2G/dp2:
+        (1)            (2)
+    4.4243e+03   -2.7779e-03
+   -2.7779e-03   -2.4173e-08
+
+---------------------------------------------------------
+Finite Differences ( dp1=1.0e-03 and dp2 = 2.5e+02 )
+---------------------------------------------------------
+
+
+   dG/dp:   -1.3534e+02    4.1250e-04   (fwd FD)
+            -1.3977e+02    4.1855e-04   (bck FD)
+            -1.3755e+02    4.1552e-04   (cntr FD)
+
+  H(1,1):    4.4247e+03
+  H(2,2):   -2.4174e-08
diff --git a/examples/idas/serial/idasKrylovDemo_ls.c b/examples/idas/serial/idasKrylovDemo_ls.c
new file mode 100644
index 0000000..42e819e
--- /dev/null
+++ b/examples/idas/serial/idasKrylovDemo_ls.c
@@ -0,0 +1,581 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ *
+ * This example loops through the available iterative linear solvers:
+ * SPGMR, SPBCG and SPTFQMR.
+ *
+ * Example problem for IDA: 2D heat equation, serial, GMRES.
+ *
+ * This example solves a discretized 2D heat equation problem.
+ * This version loops through the Krylov solvers IDASpgmr, IDASpbcg
+ * and IDASptfqmr.
+ *
+ * The DAE system solved is a spatial discretization of the PDE
+ *          du/dt = d^2u/dx^2 + d^2u/dy^2
+ * on the unit square. The boundary condition is u = 0 on all edges.
+ * Initial conditions are given by u = 16 x (1 - x) y (1 - y). The
+ * PDE is treated with central differences on a uniform M x M grid.
+ * The values of u at the interior points satisfy ODEs, and
+ * equations u = 0 at the boundaries are appended, to form a DAE
+ * system of size N = M^2. Here M = 10.
+ *
+ * The system is solved with IDA using the following Krylov
+ * linear solvers: IDASPGMR, IDASPBCG and IDASPTFQMR. The
+ * preconditioner uses the diagonal elements of the Jacobian only.
+ * Routines for preconditioning, required by IDASP*, are supplied
+ * here. The constraints u >= 0 are posed for all components. Output
+ * is taken at t = 0, .01, .02, .04,..., 10.24.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_spgmr.h>
+#include <idas/idas_spbcgs.h>
+#include <idas/idas_sptfqmr.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+
+/* Problem Constants */
+
+#define NOUT  11
+#define MGRID 10
+#define NEQ   MGRID*MGRID
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+#define FOUR  RCONST(4.0)
+
+/* Linear Solver Loop Constants */
+
+#define USE_SPGMR   0
+#define USE_SPBCG   1
+#define USE_SPTFQMR 2
+
+/* User data type */
+
+typedef struct {  
+  long int mm;  /* number of grid points */
+  realtype dx;
+  realtype coeff;
+  N_Vector pp;  /* vector of prec. diag. elements */
+} *UserData;
+
+/* Prototypes for functions called by IDA */
+
+int resHeat(realtype tres, N_Vector uu, N_Vector up,
+            N_Vector resval, void *user_data);
+
+int PsetupHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               realtype c_j, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec, 
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp);
+
+/* Prototypes for private functions */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector res);
+static void PrintHeader(realtype rtol, realtype atol, int linsolver);
+static void PrintOutput(void *mem, realtype t, N_Vector uu, int linsolver);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  UserData data;
+  N_Vector uu, up, constraints, res;
+  int ier, iout, linsolver;
+  realtype rtol, atol, t0, t1, tout, tret;
+  long int netf, ncfn, ncfl;
+
+  mem = NULL;
+  data = NULL;
+  uu = up = constraints = res = NULL;
+
+  /* Allocate N-vectors and the user data structure. */
+
+  uu = N_VNew_Serial(NEQ);
+  if(check_flag((void *)uu, "N_VNew_Serial", 0)) return(1);
+
+  up = N_VNew_Serial(NEQ);
+  if(check_flag((void *)up, "N_VNew_Serial", 0)) return(1);
+
+  res = N_VNew_Serial(NEQ);
+  if(check_flag((void *)res, "N_VNew_Serial", 0)) return(1);
+
+  constraints = N_VNew_Serial(NEQ);
+  if(check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+
+  data = (UserData) malloc(sizeof *data);
+  data->pp = NULL;
+  if(check_flag((void *)data, "malloc", 2)) return(1);
+
+  /* Assign parameters in the user data structure. */
+
+  data->mm  = MGRID;
+  data->dx = ONE/(MGRID-ONE);
+  data->coeff = ONE/(data->dx * data->dx);
+  data->pp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)data->pp, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize uu, up. */
+
+  SetInitialProfile(data, uu, up, res);
+
+  /* Set constraints to all 1's for nonnegative solution values. */
+
+  N_VConst(ONE, constraints);
+
+  /* Assign various parameters. */
+
+  t0   = ZERO;
+  t1   = RCONST(0.01);
+  rtol = ZERO;
+  atol = RCONST(1.0e-3); 
+
+  /* Call IDACreate and IDAMalloc to initialize solution */
+
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+
+  ier = IDASetUserData(mem, data);
+  if(check_flag(&ier, "IDASetUserData", 1)) return(1);
+
+  ier = IDASetConstraints(mem, constraints);
+  if(check_flag(&ier, "IDASetConstraints", 1)) return(1);
+  N_VDestroy_Serial(constraints);
+
+  ier = IDAInit(mem, resHeat, t0, uu, up);
+  if(check_flag(&ier, "IDAInit", 1)) return(1);
+
+  ier = IDASStolerances(mem, rtol, atol);
+  if(check_flag(&ier, "IDASStolerances", 1)) return(1);
+
+  /* START: Loop through SPGMR, SPBCG and SPTFQMR linear solver modules */
+  for (linsolver = 0; linsolver < 3; ++linsolver) {
+
+    if (linsolver != 0) {
+
+      /* Re-initialize uu, up. */
+      SetInitialProfile(data, uu, up, res);
+
+      /* Re-initialize IDA */
+      ier = IDAReInit(mem, t0, uu, up);
+      if (check_flag(&ier, "IDAReInit", 1)) return(1);
+
+    }
+
+    /* Attach a linear solver module */
+    switch(linsolver) {
+
+    /* (a) SPGMR */
+    case(USE_SPGMR):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPGMR |\n");
+      printf(" -------\n");
+
+      /* Call IDASpgmr to specify the linear solver. */
+      ier = IDASpgmr(mem, 0);
+      if(check_flag(&ier, "IDASpgmr", 1)) return(1);
+
+      break;
+
+    /* (b) SPBCG */
+    case(USE_SPBCG):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPBCG |\n");
+      printf(" -------\n");
+
+      /* Call IDASpbcg to specify the linear solver. */
+      ier = IDASpbcg(mem, 0);
+      if(check_flag(&ier, "IDASpbcg", 1)) return(1);
+
+      break;
+
+    /* (c) SPTFQMR */
+    case(USE_SPTFQMR):
+
+      /* Print header */
+      printf(" ---------");
+      printf(" \n| SPTFQMR |\n");
+      printf(" ---------\n");
+
+      /* Call IDASptfqmr to specify the linear solver. */
+      ier = IDASptfqmr(mem, 0);
+      if(check_flag(&ier, "IDASptfqmr", 1)) return(1);
+
+      break;
+
+    }
+
+    /* Specify preconditioner */
+    ier = IDASpilsSetPreconditioner(mem, PsetupHeat, PsolveHeat);
+    if(check_flag(&ier, "IDASpilsSetPreconditioner", 1)) return(1);
+
+    /* Print output heading. */
+    PrintHeader(rtol, atol, linsolver);
+
+    /* Print output table heading, and initial line of table. */
+
+    printf("\n   Output Summary (umax = max-norm of solution) \n\n");
+    printf("  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps\n" );
+    printf("----------------------------------------------------------------------\n");
+
+    /* Loop over output times, call IDASolve, and print results. */
+
+    for (tout = t1,iout = 1; iout <= NOUT ; iout++, tout *= TWO) {
+      ier = IDASolve(mem, tout, &tret, uu, up, IDA_NORMAL);
+      if(check_flag(&ier, "IDASolve", 1)) return(1);
+      PrintOutput(mem, tret, uu, linsolver);
+    }
+
+    /* Print remaining counters. */
+    ier = IDAGetNumErrTestFails(mem, &netf);
+    check_flag(&ier, "IDAGetNumErrTestFails", 1);
+
+    ier = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+    check_flag(&ier, "IDAGetNumNonlinSolvConvFails", 1);
+
+    ier = IDASpilsGetNumConvFails(mem, &ncfl);
+    check_flag(&ier, "IDASpilsGetNumConvFails", 1);
+
+    printf("\nError test failures            = %ld\n", netf);
+    printf("Nonlinear convergence failures = %ld\n", ncfn);
+    printf("Linear convergence failures    = %ld\n", ncfl);
+
+    if (linsolver < 2)
+      printf("\n======================================================================\n\n");
+
+  } /* END: Loop through SPGMR, SPBCG and SPTFQMR linear solver modules */
+
+  /* Free Memory */
+
+  IDAFree(&mem);
+
+  N_VDestroy_Serial(uu);
+  N_VDestroy_Serial(up);
+  N_VDestroy_Serial(res);
+
+  N_VDestroy_Serial(data->pp);
+  free(data);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * resHeat: heat equation system residual function (user-supplied)      
+ * This uses 5-point central differencing on the interior points, and   
+ * includes algebraic equations for the boundary values.                
+ * So for each interior point, the residual component has the form      
+ *    res_i = u'_i - (central difference)_i                             
+ * while for each boundary point, it is res_i = u_i.                     
+ */
+
+int resHeat(realtype tt, 
+            N_Vector uu, N_Vector up, N_Vector rr, 
+            void *user_data)
+{
+  long int i, j, offset, loc, mm;
+  realtype *uu_data, *up_data, *rr_data, coeff, dif1, dif2;
+  UserData data;
+  
+  uu_data = N_VGetArrayPointer_Serial(uu); 
+  up_data = N_VGetArrayPointer_Serial(up); 
+  rr_data = N_VGetArrayPointer_Serial(rr);
+
+  data = (UserData) user_data;
+  
+  coeff = data->coeff;
+  mm    = data->mm;
+  
+  /* Initialize rr to uu, to take care of boundary equations. */
+  N_VScale(ONE, uu, rr);
+  
+  /* Loop over interior points; set res = up - (central difference). */
+  for (j = 1; j < MGRID-1; j++) {
+    offset = mm*j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      dif1 = uu_data[loc-1]  + uu_data[loc+1]  - TWO * uu_data[loc];
+      dif2 = uu_data[loc-mm] + uu_data[loc+mm] - TWO * uu_data[loc];
+      rr_data[loc]= up_data[loc] - coeff * ( dif1 + dif2 );
+    }
+  }
+
+  return(0);
+}
+
+/*
+ * PsetupHeat: setup for diagonal preconditioner.   
+ *                                                                 
+ * The optional user-supplied functions PsetupHeat and          
+ * PsolveHeat together must define the left preconditoner        
+ * matrix P approximating the system Jacobian matrix               
+ *                   J = dF/du + cj*dF/du'                         
+ * (where the DAE system is F(t,u,u') = 0), and solve the linear   
+ * systems P z = r.   This is done in this case by keeping only    
+ * the diagonal elements of the J matrix above, storing them as    
+ * inverses in a vector pp, when computed in PsetupHeat, for    
+ * subsequent use in PsolveHeat.                                 
+ *                                                                 
+ * In this instance, only cj and data (user data structure, with    
+ * pp etc.) are used from the PsetupdHeat argument list.         
+ */
+  
+int PsetupHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               realtype c_j, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  
+  long int i, j, offset, loc, mm;
+  realtype *ppv, pelinv;
+  UserData data;
+  
+  data = (UserData) user_data;
+  ppv = N_VGetArrayPointer_Serial(data->pp);
+  mm = data->mm;
+
+  /* Initialize the entire vector to 1., then set the interior points to the
+     correct value for preconditioning. */
+  N_VConst(ONE,data->pp);
+  
+  /* Compute the inverse of the preconditioner diagonal elements. */
+  pelinv = ONE/(c_j + FOUR*data->coeff); 
+  
+  for (j = 1; j < mm-1; j++) {
+    offset = mm * j;
+    for (i = 1; i < mm-1; i++) {
+      loc = offset + i;
+      ppv[loc] = pelinv;
+    }
+  }
+  
+  return(0);  
+}
+
+/*
+ * PsolveHeat: solve preconditioner linear system.              
+ * This routine multiplies the input vector rvec by the vector pp 
+ * containing the inverse diagonal Jacobian elements (previously  
+ * computed in PrecondHeateq), returning the result in zvec.      
+ */
+
+int PsolveHeat(realtype tt, 
+               N_Vector uu, N_Vector up, N_Vector rr, 
+               N_Vector rvec, N_Vector zvec, 
+               realtype c_j, realtype delta, void *user_data, 
+               N_Vector tmp)
+{
+  UserData data;
+  data = (UserData) user_data;
+  N_VProd(data->pp, rvec, zvec);
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * SetInitialProfile: routine to initialize u and up vectors.
+ */
+
+static int SetInitialProfile(UserData data, N_Vector uu, N_Vector up, 
+                             N_Vector res)
+{
+  long int mm, mm1, i, j, offset, loc;
+  realtype xfact, yfact, *udata, *updata;
+
+  mm = data->mm;
+
+  udata = N_VGetArrayPointer_Serial(uu);
+  updata = N_VGetArrayPointer_Serial(up);
+
+  /* Initialize uu on all grid points. */ 
+  mm1 = mm - 1;
+  for (j = 0; j < mm; j++) {
+    yfact = data->dx * j;
+    offset = mm*j;
+    for (i = 0;i < mm; i++) {
+      xfact = data->dx * i;
+      loc = offset + i;
+      udata[loc] = RCONST(16.0) * xfact * (ONE - xfact) * yfact * (ONE - yfact);
+    }
+  }
+  
+  /* Initialize up vector to 0. */
+  N_VConst(ZERO, up);
+
+  /* resHeat sets res to negative of ODE RHS values at interior points. */
+  resHeat(ZERO, uu, up, res, data);
+
+  /* Copy -res into up to get correct interior initial up values. */
+  N_VScale(-ONE, res, up);
+
+  /* Set up at boundary points to zero. */
+  for (j = 0; j < mm; j++) {
+    offset = mm*j;
+    for (i = 0; i < mm; i++) {
+      loc = offset + i;
+      if (j == 0 || j == mm1 || i == 0 || i == mm1 ) updata[loc] = ZERO;
+    }
+  }
+  
+  return(0);
+  }
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, realtype atol, int linsolver)
+{
+  printf("\nidasKrylovDemo_ls: Heat equation, serial example problem for IDA\n");
+  printf("                   Discretized heat equation on 2D unit square.\n");
+  printf("                   Zero boundary conditions,");
+  printf(" polynomial initial conditions.\n");
+  printf("                   Mesh dimensions: %d x %d", MGRID, MGRID);
+  printf("       Total system size: %d\n\n", NEQ);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n", rtol, atol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n", rtol, atol);
+#endif
+  printf("Constraints set to force all solution components >= 0. \n");
+
+  switch(linsolver) {
+
+  case(USE_SPGMR):
+    printf("Linear solver: IDASPGMR, preconditioner using diagonal elements. \n");
+    break;
+
+  case(USE_SPBCG):
+    printf("Linear solver: IDASPBCG, preconditioner using diagonal elements. \n");
+    break;
+
+  case(USE_SPTFQMR):
+    printf("Linear solver: IDASPTFQMR, preconditioner using diagonal elements. \n");
+    break;
+  }
+}
+
+/*
+ * PrintOutput: print max norm of solution and current solver statistics
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector uu, int linsolver)
+{
+  realtype hused, umax;
+  long int nst, nni, nje, nre, nreLS, nli, npe, nps;
+  int kused, ier;
+  
+  umax = N_VMaxNorm(uu);
+
+  ier = IDAGetLastOrder(mem, &kused);
+  check_flag(&ier, "IDAGetLastOrder", 1);
+  ier = IDAGetNumSteps(mem, &nst);
+  check_flag(&ier, "IDAGetNumSteps", 1);
+  ier = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&ier, "IDAGetNumNonlinSolvIters", 1);
+  ier = IDAGetNumResEvals(mem, &nre);
+  check_flag(&ier, "IDAGetNumResEvals", 1);
+  ier = IDAGetLastStep(mem, &hused);
+  check_flag(&ier, "IDAGetLastStep", 1);
+
+  ier = IDASpilsGetNumJtimesEvals(mem, &nje);
+  check_flag(&ier, "IDASpilsGetNumJtimesEvals", 1);
+  ier = IDASpilsGetNumLinIters(mem, &nli);
+  check_flag(&ier, "IDASpilsGetNumLinIters", 1);
+  ier = IDASpilsGetNumResEvals(mem, &nreLS);
+  check_flag(&ier, "IDASpilsGetNumResEvals", 1);
+  ier = IDASpilsGetNumPrecEvals(mem, &npe);
+  check_flag(&ier, "IDASpilsGetPrecEvals", 1);
+  ier = IDASpilsGetNumPrecSolves(mem, &nps);
+  check_flag(&ier, "IDASpilsGetNumPrecSolves", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf(" %5.2Lf %13.5Le  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2Le  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#elif defined(SUNDIALS_DOUBLE_PRECISION) 
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#else
+  printf(" %5.2f %13.5e  %d  %3ld  %3ld  %3ld  %4ld  %4ld  %9.2e  %3ld %3ld\n",
+         t, umax, kused, nst, nni, nje, nre, nreLS, hused, npe, nps);
+#endif
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasKrylovDemo_ls.out b/examples/idas/serial/idasKrylovDemo_ls.out
new file mode 100644
index 0000000..ecdb3b8
--- /dev/null
+++ b/examples/idas/serial/idasKrylovDemo_ls.out
@@ -0,0 +1,102 @@
+ ------- 
+| SPGMR |
+ -------
+
+idasKrylovDemo_ls: Heat equation, serial example problem for IDA
+                   Discretized heat equation on 2D unit square.
+                   Zero boundary conditions, polynomial initial conditions.
+                   Mesh dimensions: 10 x 10       Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+Linear solver: IDASPGMR, preconditioner using diagonal elements. 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.01   8.24106e-01  2   12   14    7    14     7   2.56e-03    8  21
+  0.02   6.88134e-01  3   15   18   12    18    12   5.12e-03    8  30
+  0.04   4.70711e-01  3   18   24   21    24    21   6.58e-03    9  45
+  0.08   2.16509e-01  3   22   29   30    29    30   1.32e-02    9  59
+  0.16   4.57687e-02  4   28   36   44    36    44   1.32e-02    9  80
+  0.32   2.09938e-03  4   35   44   67    44    67   2.63e-02   10 111
+  0.64   0.00000e+00  1   39   51   77    51    77   1.05e-01   12 128
+  1.28   0.00000e+00  1   41   53   77    53    77   4.21e-01   14 130
+  2.56   0.00000e+00  1   43   55   77    55    77   1.69e+00   16 132
+  5.12   0.00000e+00  1   44   56   77    56    77   3.37e+00   17 133
+ 10.24   0.00000e+00  1   45   57   77    57    77   6.74e+00   18 134
+
+Error test failures            = 1
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
+
+======================================================================
+
+ ------- 
+| SPBCG |
+ -------
+
+idasKrylovDemo_ls: Heat equation, serial example problem for IDA
+                   Discretized heat equation on 2D unit square.
+                   Zero boundary conditions, polynomial initial conditions.
+                   Mesh dimensions: 10 x 10       Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+Linear solver: IDASPBCG, preconditioner using diagonal elements. 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.01   8.24105e-01  2   12   14    8    14     8   2.56e-03    8  22
+  0.02   6.88129e-01  3   15   18   14    18    14   5.12e-03    8  32
+  0.04   4.70820e-01  3   19   23   22    23    22   1.02e-02    9  45
+  0.08   2.16332e-01  3   23   27   32    27    32   1.02e-02    9  59
+  0.16   4.48774e-02  4   27   33   44    33    44   2.05e-02   10  77
+  0.32   1.75557e-03  3   33   41   70    41    70   4.10e-02   11 111
+  0.64   2.47770e-05  1   38   48   82    48    82   1.64e-01   13 130
+  1.28   2.57209e-22  1   40   50   82    50    82   6.55e-01   15 132
+  2.56   3.19445e-22  1   41   51   82    51    82   1.31e+00   16 133
+  5.12   7.19965e-22  1   42   52   82    52    82   2.62e+00   17 134
+ 10.24   1.87591e-21  1   43   53   82    53    82   5.24e+00   18 135
+
+Error test failures            = 0
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
+
+======================================================================
+
+ --------- 
+| SPTFQMR |
+ ---------
+
+idasKrylovDemo_ls: Heat equation, serial example problem for IDA
+                   Discretized heat equation on 2D unit square.
+                   Zero boundary conditions, polynomial initial conditions.
+                   Mesh dimensions: 10 x 10       Total system size: 100
+
+Tolerance parameters:  rtol = 0   atol = 0.001
+Constraints set to force all solution components >= 0. 
+Linear solver: IDASPTFQMR, preconditioner using diagonal elements. 
+
+   Output Summary (umax = max-norm of solution) 
+
+  time     umax       k  nst  nni  nje   nre   nreLS    h      npe nps
+----------------------------------------------------------------------
+  0.01   8.24104e-01  2   12   14   11    14    11   2.56e-03    8  28
+  0.02   6.88133e-01  3   15   18   19    18    19   5.12e-03    8  42
+  0.04   4.70857e-01  3   19   23   33    23    33   1.02e-02    9  64
+  0.08   2.16481e-01  3   23   27   57    27    57   1.02e-02    9  96
+  0.16   4.51083e-02  4   27   33   84    33    84   2.05e-02   10 133
+  0.32   1.78483e-03  4   34   42  139    42   139   4.10e-02   11 204
+  0.64   4.07887e-04  1   39   51  183    51   183   1.47e-01   13 262
+  1.28   4.59662e-04  1   41   54  199    54   199   5.90e-01   15 282
+  2.56   2.03940e-05  1   43   56  202    56   202   1.18e+00   16 288
+  5.12   9.56073e-21  1   45   58  202    58   202   2.36e+00   17 290
+ 10.24   5.70363e-20  1   46   59  202    59   202   4.72e+00   18 291
+
+Error test failures            = 0
+Nonlinear convergence failures = 0
+Linear convergence failures    = 0
diff --git a/examples/idas/serial/idasRoberts_ASAi_dns.c b/examples/idas/serial/idasRoberts_ASAi_dns.c
new file mode 100644
index 0000000..ad3dacd
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_ASAi_dns.c
@@ -0,0 +1,752 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Cosmin Petra @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Adjoint sensitivity example problem.
+ *
+ * This simple example problem for IDAS, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt + p1*y1 - p2*y2*y3            = 0
+ *      dy2/dt - p1*y1 + p2*y2*y3 + p3*y2**2 = 0
+ *                 y1  +  y2  +  y3  -  1    = 0
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.The reaction rates are: p1=0.04,
+ * p2=1e4, and p3=3e7
+ *
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance.
+ *
+ * IDAS can also compute sensitivities with respect to
+ * the problem parameters p1, p2, and p3 of the following quantity:
+ *   G = int_t0^t1 g(t,p,y) dt
+ * where
+ *   g(t,p,y) = y3
+ *
+ * The gradient dG/dp is obtained as:
+ *   dG/dp = int_t0^t1 (g_p - lambda^T F_p ) dt - 
+ *           lambda^T*F_y'*y_p | _t0^t1
+ *         = int_t0^t1 (lambda^T*F_p) dt
+ * where lambda and are solutions of the adjoint system:
+ *   d(lambda^T * F_y' )/dt -lambda^T F_y = -g_y
+ *
+ * During the backward integration, IDAS also evaluates G as
+ *   G = - phi(t0)
+ * where
+ *   d(phi)/dt = g(t,y,p)
+ *   phi(t1) = 0
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <idas/idas.h>
+#include <idas/idas_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Accessor macros */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i= 1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* (i,j)-th matrix component i,j = 1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ      3             /* number of equations                  */
+
+#define RTOL     RCONST(1e-06) /* scalar relative tolerance            */
+
+#define ATOL1    RCONST(1e-08) /* vector absolute tolerance components */
+#define ATOL2    RCONST(1e-12)
+#define ATOL3    RCONST(1e-08)
+
+#define ATOLA    RCONST(1e-08) /* absolute tolerance for adjoint vars. */
+#define ATOLQ    RCONST(1e-06) /* absolute tolerance for quadratures   */
+
+#define T0       RCONST(0.0)   /* initial time                         */
+#define TOUT     RCONST(4e10)  /* final time                           */
+
+#define TB1      RCONST(50.0)  /* starting point for adjoint problem   */
+#define TB2      TOUT          /* starting point for adjoint problem   */
+
+#define T1B      RCONST(49.0)  /* for IDACalcICB                       */
+
+#define STEPS    100           /* number of steps between check points */
+
+#define NP       3             /* number of problem parameters         */
+
+#define ONE     RCONST(1.0)
+#define ZERO    RCONST(0.0)
+
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];
+} *UserData;
+
+/* Prototypes of user-supplied functions */
+
+static int res(realtype t, N_Vector yy, N_Vector yp, 
+               N_Vector resval, void *user_data);
+static int Jac(long int Neq, realtype t, realtype cj, 
+               N_Vector yy, N_Vector yp, N_Vector resvec, 
+               DlsMat J, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data);
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+static int resB(realtype tt, 
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                void *user_dataB);
+
+static int JacB(long int NeqB, realtype tt, realtype cjB,
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                DlsMat JB, void *user_data,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+
+static int rhsQB(realtype tt, 
+                 N_Vector yy, N_Vector yp, 
+                 N_Vector yyB, N_Vector ypB, 
+                 N_Vector rrQB, void *user_dataB);
+
+/* Prototypes of private functions */
+static void PrintOutput(realtype tfinal, N_Vector yB, N_Vector ypB, N_Vector qB);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+
+  void *ida_mem;
+
+  realtype reltolQ, abstolQ;
+  N_Vector yy, yp, q;
+  N_Vector yyTB1, ypTB1;
+  N_Vector id;
+
+  int steps;
+
+  int indexB;
+
+  realtype reltolB, abstolB, abstolQB;
+  N_Vector yB, ypB, qB;
+  realtype time;
+  int flag, ncheck;
+
+  IDAadjCheckPointRec *ckpnt;
+
+  long int nst, nstB;
+
+  data = NULL;
+  ckpnt = NULL;
+  ida_mem = NULL;
+  yy = yp = yB = qB = NULL;
+
+  /* Print problem description */
+  printf("\nAdjoint Sensitivity Example for Chemical Kinetics\n");
+  printf("-------------------------------------------------\n\n");
+  printf("DAE: dy1/dt + p1*y1 - p2*y2*y3 = 0\n");
+  printf("     dy2/dt - p1*y1 + p2*y2*y3 + p3*(y2)^2 = 0\n");
+  printf("               y1  +  y2  +  y3 = 0\n\n");
+  printf("Find dG/dp for\n");
+  printf("     G = int_t0^tB0 g(t,p,y) dt\n");
+  printf("     g(t,p,y) = y3\n\n\n");
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.04);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+
+  /* Initialize y */
+  yy = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  Ith(yy,1) = ONE;
+  Ith(yy,2) = ZERO;
+  Ith(yy,3) = ZERO;
+
+  /* Initialize yprime */
+  yp = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+  Ith(yp,1) = RCONST(-0.04);
+  Ith(yp,2) = RCONST( 0.04);
+  Ith(yp,3) = ZERO;
+
+  /* Initialize q */
+  q = N_VNew_Serial(1);
+  if (check_flag((void *)q, "N_VNew_Serial", 0)) return(1);
+  Ith(q,1) = ZERO;
+
+  /* Set the scalar realtive and absolute tolerances reltolQ and abstolQ */
+  reltolQ = RTOL;
+  abstolQ = ATOLQ;
+
+  /* Create and allocate IDAS memory for forward run */
+  printf("Create and allocate IDAS memory for forward runs\n");
+
+  ida_mem = IDACreate();
+  if (check_flag((void *)ida_mem, "IDACreate", 0)) return(1);
+
+  flag = IDAInit(ida_mem, res, T0, yy, yp);
+  if (check_flag(&flag, "IDAInit", 1)) return(1);
+
+  flag = IDAWFtolerances(ida_mem, ewt);
+  if (check_flag(&flag, "IDAWFtolerances", 1)) return(1);
+
+  flag = IDASetUserData(ida_mem, data);
+  if (check_flag(&flag, "IDASetUserData", 1)) return(1);
+
+  flag = IDADense(ida_mem, NEQ);
+  if (check_flag(&flag, "IDADense", 1)) return(1);
+
+  flag = IDADlsSetDenseJacFn(ida_mem, Jac);
+  if (check_flag(&flag, "IDADlsSetDenseJacFn", 1)) return(1);
+
+  flag = IDAQuadInit(ida_mem, rhsQ, q);
+  if (check_flag(&flag, "IDAQuadInit", 1)) return(1);
+
+  flag = IDAQuadSStolerances(ida_mem, reltolQ, abstolQ);
+  if (check_flag(&flag, "IDAQuadSStolerances", 1)) return(1);
+
+  flag = IDASetQuadErrCon(ida_mem, TRUE);
+  if (check_flag(&flag, "IDASetQuadErrCon", 1)) return(1);
+
+  /* Allocate global memory */
+
+  steps = STEPS;
+  flag = IDAAdjInit(ida_mem, steps, IDA_HERMITE);
+  /*flag = IDAAdjInit(ida_mem, steps, IDA_POLYNOMIAL);*/
+  if (check_flag(&flag, "IDAAdjInit", 1)) return(1);
+
+  /* Perform forward run */
+  printf("Forward integration ... ");
+
+  /* Integrate till TB1 and get the solution (y, y') at that time. */
+  flag = IDASolveF(ida_mem, TB1, &time, yy, yp, IDA_NORMAL, &ncheck);
+  if (check_flag(&flag, "IDASolveF", 1)) return(1);
+
+  yyTB1 = N_VClone(yy);
+  ypTB1 = N_VClone(yp);
+  /* Save the states at t=TB1. */
+  N_VScale(ONE, yy, yyTB1);
+  N_VScale(ONE, yp, ypTB1);
+  
+  /* Continue integrating till TOUT is reached. */
+  flag = IDASolveF(ida_mem, TOUT, &time, yy, yp, IDA_NORMAL, &ncheck);
+  if (check_flag(&flag, "IDASolveF", 1)) return(1);
+
+  flag = IDAGetNumSteps(ida_mem, &nst);
+  if (check_flag(&flag, "IDAGetNumSteps", 1)) return(1);
+
+  printf("done ( nst = %ld )\n",nst);
+
+  flag = IDAGetQuad(ida_mem, &time, q);
+  if (check_flag(&flag, "IDAGetQuad", 1)) return(1);
+
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("G:          %12.4Le \n",Ith(q,1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("G:          %12.4e \n",Ith(q,1));
+#else
+  printf("G:          %12.4e \n",Ith(q,1));
+#endif
+  printf("--------------------------------------------------------\n\n");
+
+  /* Test check point linked list 
+     (uncomment next block to print check point information) */
+  
+  /*  
+  {
+    int i;
+    
+    printf("\nList of Check Points (ncheck = %d)\n\n", ncheck);
+    ckpnt = (IDAadjCheckPointRec *) malloc ( (ncheck+1)*sizeof(IDAadjCheckPointRec));
+    IDAGetAdjCheckPointsInfo(ida_mem, ckpnt);
+    for (i=0;i<=ncheck;i++) {
+      printf("Address:       %p\n",ckpnt[i].my_addr);
+      printf("Next:          %p\n",ckpnt[i].next_addr);
+      printf("Time interval: %le  %le\n",ckpnt[i].t0, ckpnt[i].t1);
+      printf("Step number:   %ld\n",ckpnt[i].nstep);
+      printf("Order:         %d\n",ckpnt[i].order);
+      printf("Step size:     %le\n",ckpnt[i].step);
+      printf("\n");
+    }
+    
+  }
+  */
+
+
+  /* Create BACKWARD problem. */
+
+  /* Allocate yB (i.e. lambda_0). */
+  yB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yB, "N_VNew_Serial", 0)) return(1);
+
+  /* Consistently initialize yB. */
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = ONE;
+
+    
+  /* Allocate ypB (i.e. lambda'_0). */
+  ypB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)ypB, "N_VNew_Serial", 0)) return(1);
+
+  /* Consistently initialize ypB. */
+  Ith(ypB,1) = ONE;
+  Ith(ypB,2) = ONE;
+  Ith(ypB,3) = ZERO;
+
+  
+  /* Set the scalar relative tolerance reltolB */
+  reltolB = RTOL;               
+
+  /* Set the scalar absolute tolerance abstolB */
+  abstolB = ATOLA;
+
+  /* Set the scalar absolute tolerance abstolQB */
+  abstolQB = ATOLQ;
+
+  /* Create and allocate IDAS memory for backward run */
+  printf("Create and allocate IDAS memory for backward run\n");
+
+  flag = IDACreateB(ida_mem, &indexB);
+  if (check_flag(&flag, "IDACreateB", 1)) return(1);
+
+  flag = IDAInitB(ida_mem, indexB, resB, TB2, yB, ypB);
+  if (check_flag(&flag, "IDAInitB", 1)) return(1);
+
+  flag = IDASStolerancesB(ida_mem, indexB, reltolB, abstolB);
+  if (check_flag(&flag, "IDASStolerancesB", 1)) return(1);
+
+  flag = IDASetUserDataB(ida_mem, indexB, data);
+  if (check_flag(&flag, "IDASetUserDataB", 1)) return(1);
+
+  flag = IDASetMaxNumStepsB(ida_mem, indexB, 1000);
+
+  flag = IDADenseB(ida_mem, indexB, NEQ);
+  if (check_flag(&flag, "IDADenseB", 1)) return(1);
+
+  flag = IDADlsSetDenseJacFnB(ida_mem, indexB, JacB);
+  if (check_flag(&flag, "IDASetDenseJacB", 1)) return(1);
+
+
+  /* Quadrature for backward problem. */
+ 
+  /* Initialize qB */
+  qB = N_VNew_Serial(NP);
+  if (check_flag((void *)qB, "N_VNew", 0)) return(1);
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  flag = IDAQuadInitB(ida_mem, indexB, rhsQB, qB);
+  if (check_flag(&flag, "IDAQuadInitB", 1)) return(1);
+
+  flag = IDAQuadSStolerancesB(ida_mem, indexB, reltolB, abstolQB);
+  if (check_flag(&flag, "IDAQuadSStolerancesB", 1)) return(1);
+
+  /* Include quadratures in error control. */
+  flag = IDASetQuadErrConB(ida_mem, indexB, TRUE);
+  if (check_flag(&flag, "IDASetQuadErrConB", 1)) return(1);
+
+
+  /* Backward Integration */
+  printf("Backward integration ... ");
+
+  flag = IDASolveB(ida_mem, T0, IDA_NORMAL);
+  if (check_flag(&flag, "IDASolveB", 1)) return(1);
+
+  IDAGetNumSteps(IDAGetAdjIDABmem(ida_mem, indexB), &nstB);
+  printf("done ( nst = %ld )\n", nstB);
+
+  flag = IDAGetB(ida_mem, indexB, &time, yB, ypB);
+  if (check_flag(&flag, "IDAGetB", 1)) return(1);
+
+  flag = IDAGetQuadB(ida_mem, indexB, &time, qB);
+  if (check_flag(&flag, "IDAGetB", 1)) return(1);
+
+  PrintOutput(TB2, yB, ypB, qB);
+
+
+  /* Reinitialize backward phase and start from a different time (TB1). */
+  printf("Re-initialize IDAS memory for backward run\n");
+
+  /* Both algebraic part from y and the entire y' are computed by IDACalcIC. */
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = RCONST(0.50); /* not consistent */
+
+  /* Rough guess for ypB. */
+  Ith(ypB,1) = RCONST(0.80);
+  Ith(ypB,2) = RCONST(0.75);
+  Ith(ypB,3) = ZERO;
+
+  /* Initialize qB */
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  flag = IDAReInitB(ida_mem, indexB, TB1, yB, ypB);
+  if (check_flag(&flag, "IDAReInitB", 1)) return(1);
+
+  /* Also reinitialize quadratures. */
+  flag = IDAQuadInitB(ida_mem, indexB, rhsQB, qB);
+  if (check_flag(&flag, "IDAQuadInitB", 1)) return(1);
+
+  /* Use IDACalcICB to compute consistent initial conditions 
+     for this backward problem. */
+
+  id = N_VNew_Serial(NEQ);
+  Ith(id,1) = 1.0;
+  Ith(id,2) = 1.0;
+  Ith(id,3) = 0.0;
+
+  /* Specify which variables are differential (1) and which algebraic (0).*/
+  flag = IDASetIdB(ida_mem, indexB, id);
+  if (check_flag(&flag, "IDASetId", 1)) return(1);
+
+  flag = IDACalcICB(ida_mem, indexB, T1B, yyTB1, ypTB1);
+  if (check_flag(&flag, "IDACalcICB", 1)) return(1);
+
+  /* Get the consistent IC found by IDAS. */
+  flag = IDAGetConsistentICB(ida_mem, indexB, yB, ypB);
+  if (check_flag(&flag, "IDAGetConsistentICB", 1)) return(1);
+
+  printf("Backward integration ... ");
+
+  flag = IDASolveB(ida_mem, T0, IDA_NORMAL);
+  if (check_flag(&flag, "IDASolveB", 1)) return(1);
+
+  IDAGetNumSteps(IDAGetAdjIDABmem(ida_mem, indexB), &nstB);
+  printf("done ( nst = %ld )\n", nstB);
+
+  flag = IDAGetB(ida_mem, indexB, &time, yB, ypB);
+  if (check_flag(&flag, "IDAGetB", 1)) return(1);
+
+  flag = IDAGetQuadB(ida_mem, indexB, &time, qB);
+  if (check_flag(&flag, "IDAGetQuadB", 1)) return(1);
+
+  PrintOutput(TB1, yB, ypB, qB);
+
+  /* Free any memory used.*/
+
+  printf("Free memory\n\n");
+
+  IDAFree(&ida_mem);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+  N_VDestroy_Serial(q);
+  N_VDestroy_Serial(yB);
+  N_VDestroy_Serial(ypB);
+  N_VDestroy_Serial(qB);
+  N_VDestroy_Serial(id);
+  N_VDestroy_Serial(yyTB1);
+  N_VDestroy_Serial(ypTB1);
+
+  if (ckpnt != NULL) free(ckpnt);
+  free(data);
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDAS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,y). 
+*/
+
+static int res(realtype t, N_Vector yy, N_Vector yp, N_Vector resval, void *user_data)
+{
+  realtype y1, y2, y3, yp1, yp2, *rval;
+  UserData data;
+  realtype p1, p2, p3;
+
+  y1  = Ith(yy,1); y2  = Ith(yy,2); y3  = Ith(yy,3); 
+  yp1 = Ith(yp,1); yp2 = Ith(yp,2);
+  rval = N_VGetArrayPointer_Serial(resval);
+
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  rval[0] = p1*y1-p2*y2*y3;
+  rval[1] = -rval[0] + p3*y2*y2 + yp2;
+  rval[0]+= yp1;
+  rval[2] = y1+y2+y3-1;
+
+  return(0);
+}
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+*/
+
+static int Jac(long int Neq, realtype t, realtype cj,
+               N_Vector yy, N_Vector yp, N_Vector resvec, 
+               DlsMat J, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype y2, y3;
+  UserData data;
+  realtype p1, p2, p3;
+ 
+  y2 = Ith(yy,2); y3 = Ith(yy,3);
+  
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  IJth(J,1,1) = p1+cj;
+  IJth(J,2,1) = -p1;
+  IJth(J,3,1) = ONE;     
+
+  IJth(J,1,2) = -p2*y3;
+  IJth(J,2,2) = p2*y3+2*p3*y2+cj; 
+  IJth(J,3,2) = ONE;
+                     
+  IJth(J,1,3) = -p2*y2;
+  IJth(J,2,3) = p2*y2;
+  IJth(J,3,3) = ONE;
+
+  return(0);
+}
+
+/* 
+ * rhsQ routine. Compute fQ(t,y). 
+*/
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data)
+{
+  Ith(qdot,1) = Ith(yy,3);  
+  return(0);
+}
+
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+ 
+/* 
+ * resB routine.
+*/
+
+static int resB(realtype tt, 
+                 N_Vector yy, N_Vector yp,
+                 N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                 void *user_dataB)
+{
+  UserData data;
+  realtype y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3;
+  realtype lp1, lp2;
+  realtype l21;
+  
+  data = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y  vector */
+  y2 = Ith(yy,2); y3 = Ith(yy,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yyB,1); l2 = Ith(yyB,2); l3 = Ith(yyB,3);
+
+  /* The lambda dot vector */
+  lp1 = Ith(ypB,1); lp2 = Ith(ypB,2);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+
+  /* Load residual. */
+  Ith(rrB,1) = lp1 + p1*l21 - l3;
+  Ith(rrB,2) = lp2 - p2*y3*l21 - RCONST(2.0)*p3*y2*l2-l3;
+  Ith(rrB,3) = - p2*y2*l21 -l3 + RCONST(1.0);
+
+  return(0);
+}
+
+/*Jacobian for backward problem. */
+static int JacB(long int NeqB, realtype tt, realtype cj,
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                DlsMat JB, void *user_data,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  realtype y2, y3;
+  UserData data;
+  realtype p1, p2, p3;
+ 
+  y2 = Ith(yy,2); y3 = Ith(yy,3);
+  
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  IJth(JB,1,1) = -p1+cj;
+  IJth(JB,1,2) = p1;
+  IJth(JB,1,3) = -ONE;     
+
+  IJth(JB,2,1) = p2*y3;
+  IJth(JB,2,2) = -(p2*y3+RCONST(2.0)*p3*y2)+cj; 
+  IJth(JB,2,3) = -ONE;
+                     
+  IJth(JB,3,1) = p2*y2;
+  IJth(JB,3,2) = -p2*y2;
+  IJth(JB,3,3) = -ONE;
+
+
+  return(0);
+}
+
+static int rhsQB(realtype tt, 
+                 N_Vector yy, N_Vector yp, 
+                 N_Vector yyB, N_Vector ypB, 
+                 N_Vector rrQB, void *user_dataB)
+{
+  realtype y1, y2, y3;
+  realtype l1, l2;
+  realtype l21;
+
+  /* The y vector */
+  y1 = Ith(yy,1); y2 = Ith(yy,2); y3 = Ith(yy,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yyB,1); l2 = Ith(yyB,2);
+  
+  /* Temporary variables */
+  l21 = l2-l1;
+
+  Ith(rrQB,1) = y1*l21;
+  Ith(rrQB,2) = -y3*y2*l21;
+  Ith(rrQB,3) = -y2*y2*l2;
+
+  return(0);
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Print results after backward integration
+ */
+
+static void PrintOutput(realtype tfinal, N_Vector yB, N_Vector ypB, N_Vector qB)
+{
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("tB0:        %12.4Le\n",tfinal);
+  printf("dG/dp:      %12.4Le %12.4Le %12.4Le\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+  printf("lambda(t0): %12.4Le %12.4Le %12.4Le\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("tB0:        %12.4e\n",tfinal);
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+#else
+  printf("tB0:        %12.4e\n",tfinal);
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+#endif
+  printf("--------------------------------------------------------\n\n");
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasRoberts_ASAi_dns.out b/examples/idas/serial/idasRoberts_ASAi_dns.out
new file mode 100644
index 0000000..3e2a801
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_ASAi_dns.out
@@ -0,0 +1,37 @@
+
+Adjoint Sensitivity Example for Chemical Kinetics
+-------------------------------------------------
+
+DAE: dy1/dt + p1*y1 - p2*y2*y3 = 0
+     dy2/dt - p1*y1 + p2*y2*y3 + p3*(y2)^2 = 0
+               y1  +  y2  +  y3 = 0
+
+Find dG/dp for
+     G = int_t0^tB0 g(t,p,y) dt
+     g(t,p,y) = y3
+
+
+Create and allocate IDAS memory for forward runs
+Forward integration ... done ( nst = 816 )
+--------------------------------------------------------
+G:            4.0000e+10 
+--------------------------------------------------------
+
+Create and allocate IDAS memory for backward run
+Backward integration ... done ( nst = 1272 )
+--------------------------------------------------------
+tB0:          4.0000e+10
+dG/dp:        1.4879e+06  -5.9470e+00   9.9117e-04
+lambda(t0):  -2.4998e+01   1.6442e-03   1.0000e+00
+--------------------------------------------------------
+
+Re-initialize IDAS memory for backward run
+Backward integration ... done ( nst = 399 )
+--------------------------------------------------------
+tB0:          5.0000e+01
+dG/dp:        1.7341e+02  -5.0592e-04   8.4323e-08
+lambda(t0):  -7.6780e+00  -1.2758e-04   1.0000e+00
+--------------------------------------------------------
+
+Free memory
+
diff --git a/examples/idas/serial/idasRoberts_ASAi_klu.c b/examples/idas/serial/idasRoberts_ASAi_klu.c
new file mode 100644
index 0000000..d845164
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_ASAi_klu.c
@@ -0,0 +1,768 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on idasRoberts_ASAi_dns.c and modified to use KLU
+ * -----------------------------------------------------------------
+ * Adjoint sensitivity example problem.
+ *
+ * This simple example problem for IDAS, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt + p1*y1 - p2*y2*y3            = 0
+ *      dy2/dt - p1*y1 + p2*y2*y3 + p3*y2**2 = 0
+ *                 y1  +  y2  +  y3  -  1    = 0
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.The reaction rates are: p1=0.04,
+ * p2=1e4, and p3=3e7
+ *
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance.
+ *
+ * IDAS can also compute sensitivities with respect to
+ * the problem parameters p1, p2, and p3 of the following quantity:
+ *   G = int_t0^t1 g(t,p,y) dt
+ * where
+ *   g(t,p,y) = y3
+ *
+ * The gradient dG/dp is obtained as:
+ *   dG/dp = int_t0^t1 (g_p - lambda^T F_p ) dt - 
+ *           lambda^T*F_y'*y_p | _t0^t1
+ *         = int_t0^t1 (lambda^T*F_p) dt
+ * where lambda and are solutions of the adjoint system:
+ *   d(lambda^T * F_y' )/dt -lambda^T F_y = -g_y
+ *
+ * During the backward integration, IDAS also evaluates G as
+ *   G = - phi(t0)
+ * where
+ *   d(phi)/dt = g(t,y,p)
+ *   phi(t1) = 0
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <idas/idas.h>
+#include <idas/idas_klu.h>
+#include <sundials/sundials_sparse.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Accessor macros */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i= 1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ      3             /* number of equations                  */
+
+#define RTOL     RCONST(1e-06) /* scalar relative tolerance            */
+
+#define ATOL1    RCONST(1e-08) /* vector absolute tolerance components */
+#define ATOL2    RCONST(1e-12)
+#define ATOL3    RCONST(1e-08)
+
+#define ATOLA    RCONST(1e-08) /* absolute tolerance for adjoint vars. */
+#define ATOLQ    RCONST(1e-06) /* absolute tolerance for quadratures   */
+
+#define T0       RCONST(0.0)   /* initial time                         */
+#define TOUT     RCONST(4e10)  /* final time                           */
+
+#define TB1      RCONST(50.0)  /* starting point for adjoint problem   */
+#define TB2      TOUT          /* starting point for adjoint problem   */
+
+#define T1B      RCONST(49.0)  /* for IDACalcICB                       */
+
+#define STEPS    100           /* number of steps between check points */
+
+#define NP       3             /* number of problem parameters         */
+
+#define ONE     RCONST(1.0)
+#define ZERO    RCONST(0.0)
+
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];
+} *UserData;
+
+/* Prototypes of user-supplied functions */
+
+static int res(realtype t, N_Vector yy, N_Vector yp, 
+               N_Vector resval, void *user_data);
+static int Jac(realtype t, realtype cj, 
+               N_Vector yy, N_Vector yp, N_Vector resvec, 
+               SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data);
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+static int resB(realtype tt, 
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                void *user_dataB);
+
+static int JacB(realtype tt, realtype cjB,
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                SlsMat JacMatB, void *user_data,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+
+static int rhsQB(realtype tt, 
+                 N_Vector yy, N_Vector yp, 
+                 N_Vector yyB, N_Vector ypB, 
+                 N_Vector rrQB, void *user_dataB);
+
+/* Prototypes of private functions */
+static void PrintOutput(realtype tfinal, N_Vector yB, N_Vector ypB, N_Vector qB);
+static int check_flag(void *flagvalue, char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+
+  void *ida_mem;
+
+  realtype reltolQ, abstolQ;
+  N_Vector yy, yp, q;
+  N_Vector yyTB1, ypTB1;
+  N_Vector id;
+
+  int steps;
+
+  int indexB;
+
+  realtype reltolB, abstolB, abstolQB;
+  N_Vector yB, ypB, qB;
+  realtype time;
+  int flag, nnz, ncheck;
+
+  IDAadjCheckPointRec *ckpnt;
+
+  long int nst, nstB;
+
+  data = NULL;
+  ckpnt = NULL;
+  ida_mem = NULL;
+  yy = yp = yB = qB = NULL;
+
+  /* Print problem description */
+  printf("\nAdjoint Sensitivity Example for Chemical Kinetics\n");
+  printf("-------------------------------------------------\n\n");
+  printf("DAE: dy1/dt + p1*y1 - p2*y2*y3 = 0\n");
+  printf("     dy2/dt - p1*y1 + p2*y2*y3 + p3*(y2)^2 = 0\n");
+  printf("               y1  +  y2  +  y3 = 0\n\n");
+  printf("Find dG/dp for\n");
+  printf("     G = int_t0^tB0 g(t,p,y) dt\n");
+  printf("     g(t,p,y) = y3\n\n\n");
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.04);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+
+  /* Initialize y */
+  yy = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  Ith(yy,1) = ONE;
+  Ith(yy,2) = ZERO;
+  Ith(yy,3) = ZERO;
+
+  /* Initialize yprime */
+  yp = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+  Ith(yp,1) = RCONST(-0.04);
+  Ith(yp,2) = RCONST( 0.04);
+  Ith(yp,3) = ZERO;
+
+  /* Initialize q */
+  q = N_VNew_Serial(1);
+  if (check_flag((void *)q, "N_VNew_Serial", 0)) return(1);
+  Ith(q,1) = ZERO;
+
+  /* Set the scalar realtive and absolute tolerances reltolQ and abstolQ */
+  reltolQ = RTOL;
+  abstolQ = ATOLQ;
+
+  /* Create and allocate IDAS memory for forward run */
+  printf("Create and allocate IDAS memory for forward runs\n");
+
+  ida_mem = IDACreate();
+  if (check_flag((void *)ida_mem, "IDACreate", 0)) return(1);
+
+  flag = IDAInit(ida_mem, res, T0, yy, yp);
+  if (check_flag(&flag, "IDAInit", 1)) return(1);
+
+  flag = IDAWFtolerances(ida_mem, ewt);
+  if (check_flag(&flag, "IDAWFtolerances", 1)) return(1);
+
+  flag = IDASetUserData(ida_mem, data);
+  if (check_flag(&flag, "IDASetUserData", 1)) return(1);
+
+  nnz = NEQ * NEQ;
+  flag = IDAKLU(ida_mem, NEQ, nnz, CSC_MAT);
+  if (check_flag(&flag, "IDAKLU", 1)) return(1);
+
+  flag = IDASlsSetSparseJacFn(ida_mem, Jac);
+  if (check_flag(&flag, "IDASlsSetSparseJacFn", 1)) return(1);
+
+  flag = IDAQuadInit(ida_mem, rhsQ, q);
+  if (check_flag(&flag, "IDAQuadInit", 1)) return(1);
+
+  flag = IDAQuadSStolerances(ida_mem, reltolQ, abstolQ);
+  if (check_flag(&flag, "IDAQuadSStolerances", 1)) return(1);
+
+  flag = IDASetQuadErrCon(ida_mem, TRUE);
+  if (check_flag(&flag, "IDASetQuadErrCon", 1)) return(1);
+
+  /* Allocate global memory */
+
+  steps = STEPS;
+  flag = IDAAdjInit(ida_mem, steps, IDA_HERMITE);
+  /*flag = IDAAdjInit(ida_mem, steps, IDA_POLYNOMIAL);*/
+  if (check_flag(&flag, "IDAAdjInit", 1)) return(1);
+
+  /* Perform forward run */
+  printf("Forward integration ... ");
+
+  /* Integrate till TB1 and get the solution (y, y') at that time. */
+  flag = IDASolveF(ida_mem, TB1, &time, yy, yp, IDA_NORMAL, &ncheck);
+  if (check_flag(&flag, "IDASolveF", 1)) return(1);
+
+  yyTB1 = N_VClone(yy);
+  ypTB1 = N_VClone(yp);
+  /* Save the states at t=TB1. */
+  N_VScale(ONE, yy, yyTB1);
+  N_VScale(ONE, yp, ypTB1);
+  
+  /* Continue integrating till TOUT is reached. */
+  flag = IDASolveF(ida_mem, TOUT, &time, yy, yp, IDA_NORMAL, &ncheck);
+  if (check_flag(&flag, "IDASolveF", 1)) return(1);
+
+  flag = IDAGetNumSteps(ida_mem, &nst);
+  if (check_flag(&flag, "IDAGetNumSteps", 1)) return(1);
+
+  printf("done ( nst = %ld )\n",nst);
+
+  flag = IDAGetQuad(ida_mem, &time, q);
+  if (check_flag(&flag, "IDAGetQuad", 1)) return(1);
+
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("G:          %12.4Le \n",Ith(q,1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("G:          %12.4e \n",Ith(q,1));
+#else
+  printf("G:          %12.4e \n",Ith(q,1));
+#endif
+  printf("--------------------------------------------------------\n\n");
+
+  /* Test check point linked list 
+     (uncomment next block to print check point information) */
+  
+  /*  
+  {
+    int i;
+    
+    printf("\nList of Check Points (ncheck = %d)\n\n", ncheck);
+    ckpnt = (IDAadjCheckPointRec *) malloc ( (ncheck+1)*sizeof(IDAadjCheckPointRec));
+    IDAGetAdjCheckPointsInfo(ida_mem, ckpnt);
+    for (i=0;i<=ncheck;i++) {
+      printf("Address:       %p\n",ckpnt[i].my_addr);
+      printf("Next:          %p\n",ckpnt[i].next_addr);
+      printf("Time interval: %le  %le\n",ckpnt[i].t0, ckpnt[i].t1);
+      printf("Step number:   %ld\n",ckpnt[i].nstep);
+      printf("Order:         %d\n",ckpnt[i].order);
+      printf("Step size:     %le\n",ckpnt[i].step);
+      printf("\n");
+    }
+    
+  }
+  */
+
+
+  /* Create BACKWARD problem. */
+
+  /* Allocate yB (i.e. lambda_0). */
+  yB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yB, "N_VNew_Serial", 0)) return(1);
+
+  /* Consistently initialize yB. */
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = ONE;
+
+    
+  /* Allocate ypB (i.e. lambda'_0). */
+  ypB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)ypB, "N_VNew_Serial", 0)) return(1);
+
+  /* Consistently initialize ypB. */
+  Ith(ypB,1) = ONE;
+  Ith(ypB,2) = ONE;
+  Ith(ypB,3) = ZERO;
+
+  
+  /* Set the scalar relative tolerance reltolB */
+  reltolB = RTOL;               
+
+  /* Set the scalar absolute tolerance abstolB */
+  abstolB = ATOLA;
+
+  /* Set the scalar absolute tolerance abstolQB */
+  abstolQB = ATOLQ;
+
+  /* Create and allocate IDAS memory for backward run */
+  printf("Create and allocate IDAS memory for backward run\n");
+
+  flag = IDACreateB(ida_mem, &indexB);
+  if (check_flag(&flag, "IDACreateB", 1)) return(1);
+
+  flag = IDAInitB(ida_mem, indexB, resB, TB2, yB, ypB);
+  if (check_flag(&flag, "IDAInitB", 1)) return(1);
+
+  flag = IDASStolerancesB(ida_mem, indexB, reltolB, abstolB);
+  if (check_flag(&flag, "IDASStolerancesB", 1)) return(1);
+
+  flag = IDASetUserDataB(ida_mem, indexB, data);
+  if (check_flag(&flag, "IDASetUserDataB", 1)) return(1);
+
+  flag = IDASetMaxNumStepsB(ida_mem, indexB, 1000);
+
+  flag = IDAKLUB(ida_mem, indexB, NEQ, nnz, CSC_MAT);
+  if (check_flag(&flag, "IDAKLUB", 1)) return(1);
+
+  flag = IDASlsSetSparseJacFnB(ida_mem, indexB, JacB);
+  if (check_flag(&flag, "IDASlsSetSparseJacB", 1)) return(1);
+
+
+  /* Quadrature for backward problem. */
+ 
+  /* Initialize qB */
+  qB = N_VNew_Serial(NP);
+  if (check_flag((void *)qB, "N_VNew", 0)) return(1);
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  flag = IDAQuadInitB(ida_mem, indexB, rhsQB, qB);
+  if (check_flag(&flag, "IDAQuadInitB", 1)) return(1);
+
+  flag = IDAQuadSStolerancesB(ida_mem, indexB, reltolB, abstolQB);
+  if (check_flag(&flag, "IDAQuadSStolerancesB", 1)) return(1);
+
+  /* Include quadratures in error control. */
+  flag = IDASetQuadErrConB(ida_mem, indexB, TRUE);
+  if (check_flag(&flag, "IDASetQuadErrConB", 1)) return(1);
+
+
+  /* Backward Integration */
+  printf("Backward integration ... ");
+
+  flag = IDASolveB(ida_mem, T0, IDA_NORMAL);
+  if (check_flag(&flag, "IDASolveB", 1)) return(1);
+
+  IDAGetNumSteps(IDAGetAdjIDABmem(ida_mem, indexB), &nstB);
+  printf("done ( nst = %ld )\n", nstB);
+
+  flag = IDAGetB(ida_mem, indexB, &time, yB, ypB);
+  if (check_flag(&flag, "IDAGetB", 1)) return(1);
+
+  flag = IDAGetQuadB(ida_mem, indexB, &time, qB);
+  if (check_flag(&flag, "IDAGetB", 1)) return(1);
+
+  PrintOutput(TB2, yB, ypB, qB);
+
+
+  /* Reinitialize backward phase and start from a different time (TB1). */
+  printf("Re-initialize IDAS memory for backward run\n");
+
+  /* Both algebraic part from y and the entire y' are computed by IDACalcIC. */
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = RCONST(0.50); /* not consistent */
+
+  /* Rough guess for ypB. */
+  Ith(ypB,1) = RCONST(0.80);
+  Ith(ypB,2) = RCONST(0.75);
+  Ith(ypB,3) = ZERO;
+
+  /* Initialize qB */
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  flag = IDAReInitB(ida_mem, indexB, TB1, yB, ypB);
+  if (check_flag(&flag, "IDAReInitB", 1)) return(1);
+
+  /* Also reinitialize quadratures. */
+  flag = IDAQuadInitB(ida_mem, indexB, rhsQB, qB);
+  if (check_flag(&flag, "IDAQuadInitB", 1)) return(1);
+
+  /* Use IDACalcICB to compute consistent initial conditions 
+     for this backward problem. */
+
+  id = N_VNew_Serial(NEQ);
+  Ith(id,1) = 1.0;
+  Ith(id,2) = 1.0;
+  Ith(id,3) = 0.0;
+
+  /* Specify which variables are differential (1) and which algebraic (0).*/
+  flag = IDASetIdB(ida_mem, indexB, id);
+  if (check_flag(&flag, "IDASetId", 1)) return(1);
+
+  flag = IDACalcICB(ida_mem, indexB, T1B, yyTB1, ypTB1);
+  if (check_flag(&flag, "IDACalcICB", 1)) return(1);
+
+  /* Get the consistent IC found by IDAS. */
+  flag = IDAGetConsistentICB(ida_mem, indexB, yB, ypB);
+  if (check_flag(&flag, "IDAGetConsistentICB", 1)) return(1);
+
+  printf("Backward integration ... ");
+
+  flag = IDASolveB(ida_mem, T0, IDA_NORMAL);
+  if (check_flag(&flag, "IDASolveB", 1)) return(1);
+
+  IDAGetNumSteps(IDAGetAdjIDABmem(ida_mem, indexB), &nstB);
+  printf("done ( nst = %ld )\n", nstB);
+
+  flag = IDAGetB(ida_mem, indexB, &time, yB, ypB);
+  if (check_flag(&flag, "IDAGetB", 1)) return(1);
+
+  flag = IDAGetQuadB(ida_mem, indexB, &time, qB);
+  if (check_flag(&flag, "IDAGetQuadB", 1)) return(1);
+
+  PrintOutput(TB1, yB, ypB, qB);
+
+  /* Free any memory used.*/
+
+  printf("Free memory\n\n");
+
+  IDAFree(&ida_mem);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+  N_VDestroy_Serial(q);
+  N_VDestroy_Serial(yB);
+  N_VDestroy_Serial(ypB);
+  N_VDestroy_Serial(qB);
+  N_VDestroy_Serial(id);
+  N_VDestroy_Serial(yyTB1);
+  N_VDestroy_Serial(ypTB1);
+
+  if (ckpnt != NULL) free(ckpnt);
+  free(data);
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDAS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,y). 
+*/
+
+static int res(realtype t, N_Vector yy, N_Vector yp, N_Vector resval, void *user_data)
+{
+  realtype y1, y2, y3,yp1, yp2, *rval;
+  UserData data;
+  realtype p1, p2, p3;
+
+  y1  = Ith(yy,1); y2  = Ith(yy,2); y3  = Ith(yy,3); 
+  yp1 = Ith(yp,1); yp2 = Ith(yp,2);
+  rval = N_VGetArrayPointer_Serial(resval);
+
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  rval[0] = p1*y1-p2*y2*y3;
+  rval[1] = -rval[0] + p3*y2*y2 + yp2;
+  rval[0]+= yp1;
+  rval[2] = y1+y2+y3-1;
+
+  return(0);
+}
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+*/
+
+static int Jac(realtype t, realtype cj,
+               N_Vector yy, N_Vector yp, N_Vector resvec, 
+               SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int *colptrs;
+  int *rowvals;
+  realtype* data;
+  UserData userdata;
+  realtype p1, p2, p3;
+ 
+  yval = N_VGetArrayPointer_Serial(yy);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data = JacMat->data;
+  userdata = (UserData) user_data;
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = p1+cj;                        rowvals[0] = 0;
+  data[1] = -p1;                          rowvals[1] = 1;
+  data[2] = ONE;                          rowvals[2] = 2;
+
+  data[3] = -p2*yval[2];                  rowvals[3] = 0;
+  data[4] = p2*yval[2]+2*p3*yval[1]+cj;   rowvals[4] = 1;
+  data[5] = ONE;                          rowvals[5] = 2;
+
+  data[6] = -p2*yval[1];                  rowvals[6] = 0;
+  data[7] = p2*yval[1];                   rowvals[7] = 1;
+  data[8] = ONE;                          rowvals[8] = 2;
+
+  return(0);
+}
+
+/* 
+ * rhsQ routine. Compute fQ(t,y). 
+*/
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data)
+{
+  Ith(qdot,1) = Ith(yy,3);  
+  return(0);
+}
+
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+ 
+/* 
+ * resB routine.
+*/
+
+static int resB(realtype tt, 
+                 N_Vector yy, N_Vector yp,
+                 N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                 void *user_dataB)
+{
+  UserData data;
+  realtype y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3;
+  realtype lp1, lp2;
+  realtype l21;
+  
+  data = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y  vector */
+  y2 = Ith(yy,2); y3 = Ith(yy,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yyB,1); l2 = Ith(yyB,2); l3 = Ith(yyB,3);
+
+  /* The lambda dot vector */
+  lp1 = Ith(ypB,1); lp2 = Ith(ypB,2);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+
+  /* Load residual. */
+  Ith(rrB,1) = lp1 + p1*l21 - l3;
+  Ith(rrB,2) = lp2 - p2*y3*l21 - RCONST(2.0)*p3*y2*l2-l3;
+  Ith(rrB,3) = - p2*y2*l21 -l3 + RCONST(1.0);
+
+  return(0);
+}
+
+/*Jacobian for backward problem. */
+static int JacB(realtype tt, realtype cjB,
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                SlsMat JacMatB, void *user_data,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  realtype *yvalB;
+  int* colptrsB;
+  int* rowvalsB;
+  realtype* dataB;
+  UserData userdata;
+  realtype p1, p2, p3;
+ 
+  yvalB = N_VGetArrayPointer_Serial(yy);
+  colptrsB = (*JacMatB->colptrs);
+  rowvalsB = (*JacMatB->rowvals);
+  dataB = JacMatB->data;
+  userdata = (UserData) user_data;
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMatB);
+
+  colptrsB[0] = 0;
+  colptrsB[1] = 3;
+  colptrsB[2] = 6;
+  colptrsB[3] = 9;
+
+  dataB[0] = -p1+cjB;                          rowvalsB[0] = 0;
+  dataB[1] = p2*yvalB[2];                      rowvalsB[1] = 1;
+  dataB[2] = p2*yvalB[1];                      rowvalsB[2] = 2;
+
+  dataB[3] = p1;;                              rowvalsB[3] = 0;
+  dataB[4] = -(p2*yvalB[2]+RCONST(2.0)*p3*yvalB[1])+cjB;
+  rowvalsB[4] = 1;
+  dataB[5] = -p2*yvalB[1];                     rowvalsB[5] = 2;
+     
+  dataB[6] = -ONE;                             rowvalsB[6] = 0;
+  dataB[7] = -ONE;                             rowvalsB[7] = 1;
+  dataB[8] = -ONE;                             rowvalsB[8] = 2;
+
+  return(0);
+}
+
+static int rhsQB(realtype tt, 
+                 N_Vector yy, N_Vector yp, 
+                 N_Vector yyB, N_Vector ypB, 
+                 N_Vector rrQB, void *user_dataB)
+{
+  realtype y1, y2, y3;
+  realtype l1, l2;
+  realtype l21;
+
+  /* The y vector */
+  y1 = Ith(yy,1); y2 = Ith(yy,2); y3 = Ith(yy,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yyB,1); l2 = Ith(yyB,2);
+  
+  /* Temporary variables */
+  l21 = l2-l1;
+
+  Ith(rrQB,1) = y1*l21;
+  Ith(rrQB,2) = -y3*y2*l21;
+  Ith(rrQB,3) = -y2*y2*l2;
+
+  return(0);
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Print results after backward integration
+ */
+
+static void PrintOutput(realtype tfinal, N_Vector yB, N_Vector ypB, N_Vector qB)
+{
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("tB0:        %12.4Le\n",tfinal);
+  printf("dG/dp:      %12.4Le %12.4Le %12.4Le\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+  printf("lambda(t0): %12.4Le %12.4Le %12.4Le\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("tB0:        %12.4e\n",tfinal);
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+#else
+  printf("tB0:        %12.4e\n",tfinal);
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+#endif
+  printf("--------------------------------------------------------\n\n");
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasRoberts_ASAi_klu.out b/examples/idas/serial/idasRoberts_ASAi_klu.out
new file mode 100644
index 0000000..35dde25
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_ASAi_klu.out
@@ -0,0 +1,37 @@
+
+Adjoint Sensitivity Example for Chemical Kinetics
+-------------------------------------------------
+
+DAE: dy1/dt + p1*y1 - p2*y2*y3 = 0
+     dy2/dt - p1*y1 + p2*y2*y3 + p3*(y2)^2 = 0
+               y1  +  y2  +  y3 = 0
+
+Find dG/dp for
+     G = int_t0^tB0 g(t,p,y) dt
+     g(t,p,y) = y3
+
+
+Create and allocate IDAS memory for forward runs
+Forward integration ... done ( nst = 774 )
+--------------------------------------------------------
+G:            4.0000e+10 
+--------------------------------------------------------
+
+Create and allocate IDAS memory for backward run
+Backward integration ... done ( nst = 1350 )
+--------------------------------------------------------
+tB0:          4.0000e+10
+dG/dp:        1.4878e+06  -5.9467e+00   9.9112e-04
+lambda(t0):  -2.4998e+01   1.6442e-03   1.0000e+00
+--------------------------------------------------------
+
+Re-initialize IDAS memory for backward run
+Backward integration ... done ( nst = 437 )
+--------------------------------------------------------
+tB0:          5.0000e+01
+dG/dp:        1.7341e+02  -5.0592e-04   8.4323e-08
+lambda(t0):  -7.6780e+00  -1.2758e-04   1.0000e+00
+--------------------------------------------------------
+
+Free memory
+
diff --git a/examples/idas/serial/idasRoberts_ASAi_sps.c b/examples/idas/serial/idasRoberts_ASAi_sps.c
new file mode 100644
index 0000000..fb58b32
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_ASAi_sps.c
@@ -0,0 +1,769 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on idasRoberts_ASAi_dns.c and modified to use SuperLUMT
+ * -----------------------------------------------------------------
+ * Adjoint sensitivity example problem.
+ *
+ * This simple example problem for IDAS, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt + p1*y1 - p2*y2*y3            = 0
+ *      dy2/dt - p1*y1 + p2*y2*y3 + p3*y2**2 = 0
+ *                 y1  +  y2  +  y3  -  1    = 0
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.The reaction rates are: p1=0.04,
+ * p2=1e4, and p3=3e7
+ *
+ * It uses a scalar relative tolerance and a vector absolute
+ * tolerance.
+ *
+ * IDAS can also compute sensitivities with respect to
+ * the problem parameters p1, p2, and p3 of the following quantity:
+ *   G = int_t0^t1 g(t,p,y) dt
+ * where
+ *   g(t,p,y) = y3
+ *
+ * The gradient dG/dp is obtained as:
+ *   dG/dp = int_t0^t1 (g_p - lambda^T F_p ) dt - 
+ *           lambda^T*F_y'*y_p | _t0^t1
+ *         = int_t0^t1 (lambda^T*F_p) dt
+ * where lambda and are solutions of the adjoint system:
+ *   d(lambda^T * F_y' )/dt -lambda^T F_y = -g_y
+ *
+ * During the backward integration, IDAS also evaluates G as
+ *   G = - phi(t0)
+ * where
+ *   d(phi)/dt = g(t,y,p)
+ *   phi(t1) = 0
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <idas/idas.h>
+#include <idas/idas_superlumt.h>
+#include <sundials/sundials_sparse.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Accessor macros */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i= 1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ      3             /* number of equations                  */
+
+#define RTOL     RCONST(1e-06) /* scalar relative tolerance            */
+
+#define ATOL1    RCONST(1e-08) /* vector absolute tolerance components */
+#define ATOL2    RCONST(1e-12)
+#define ATOL3    RCONST(1e-08)
+
+#define ATOLA    RCONST(1e-08) /* absolute tolerance for adjoint vars. */
+#define ATOLQ    RCONST(1e-06) /* absolute tolerance for quadratures   */
+
+#define T0       RCONST(0.0)   /* initial time                         */
+#define TOUT     RCONST(4e10)  /* final time                           */
+
+#define TB1      RCONST(50.0)  /* starting point for adjoint problem   */
+#define TB2      TOUT          /* starting point for adjoint problem   */
+
+#define T1B      RCONST(49.0)  /* for IDACalcICB                       */
+
+#define STEPS    100           /* number of steps between check points */
+
+#define NP       3             /* number of problem parameters         */
+
+#define ONE     RCONST(1.0)
+#define ZERO    RCONST(0.0)
+
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];
+} *UserData;
+
+/* Prototypes of user-supplied functions */
+
+static int res(realtype t, N_Vector yy, N_Vector yp, 
+               N_Vector resval, void *user_data);
+static int Jac(realtype t, realtype cj, 
+               N_Vector yy, N_Vector yp, N_Vector resvec, 
+               SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data);
+static int ewt(N_Vector y, N_Vector w, void *user_data);
+
+static int resB(realtype tt, 
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                void *user_dataB);
+
+static int JacB(realtype tt, realtype cjB,
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                SlsMat JacMatB, void *user_data,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+
+static int rhsQB(realtype tt, 
+                 N_Vector yy, N_Vector yp, 
+                 N_Vector yyB, N_Vector ypB, 
+                 N_Vector rrQB, void *user_dataB);
+
+/* Prototypes of private functions */
+static void PrintOutput(realtype tfinal, N_Vector yB, N_Vector ypB, N_Vector qB);
+static int check_flag(void *flagvalue, char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  UserData data;
+
+  void *ida_mem;
+
+  realtype reltolQ, abstolQ;
+  N_Vector yy, yp, q;
+  N_Vector yyTB1, ypTB1;
+  N_Vector id;
+
+  int steps;
+
+  int indexB;
+
+  realtype reltolB, abstolB, abstolQB;
+  N_Vector yB, ypB, qB;
+  realtype time;
+  int flag, nthreads, nnz, ncheck;
+
+  IDAadjCheckPointRec *ckpnt;
+
+  long int nst, nstB;
+
+  data = NULL;
+  ckpnt = NULL;
+  ida_mem = NULL;
+  yy = yp = yB = qB = NULL;
+
+  /* Print problem description */
+  printf("\nAdjoint Sensitivity Example for Chemical Kinetics\n");
+  printf("-------------------------------------------------\n\n");
+  printf("DAE: dy1/dt + p1*y1 - p2*y2*y3 = 0\n");
+  printf("     dy2/dt - p1*y1 + p2*y2*y3 + p3*(y2)^2 = 0\n");
+  printf("               y1  +  y2  +  y3 = 0\n\n");
+  printf("Find dG/dp for\n");
+  printf("     G = int_t0^tB0 g(t,p,y) dt\n");
+  printf("     g(t,p,y) = y3\n\n\n");
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.04);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+
+  /* Initialize y */
+  yy = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  Ith(yy,1) = ONE;
+  Ith(yy,2) = ZERO;
+  Ith(yy,3) = ZERO;
+
+  /* Initialize yprime */
+  yp = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+  Ith(yp,1) = RCONST(-0.04);
+  Ith(yp,2) = RCONST( 0.04);
+  Ith(yp,3) = ZERO;
+
+  /* Initialize q */
+  q = N_VNew_Serial(1);
+  if (check_flag((void *)q, "N_VNew_Serial", 0)) return(1);
+  Ith(q,1) = ZERO;
+
+  /* Set the scalar realtive and absolute tolerances reltolQ and abstolQ */
+  reltolQ = RTOL;
+  abstolQ = ATOLQ;
+
+  /* Create and allocate IDAS memory for forward run */
+  printf("Create and allocate IDAS memory for forward runs\n");
+
+  ida_mem = IDACreate();
+  if (check_flag((void *)ida_mem, "IDACreate", 0)) return(1);
+
+  flag = IDAInit(ida_mem, res, T0, yy, yp);
+  if (check_flag(&flag, "IDAInit", 1)) return(1);
+
+  flag = IDAWFtolerances(ida_mem, ewt);
+  if (check_flag(&flag, "IDAWFtolerances", 1)) return(1);
+
+  flag = IDASetUserData(ida_mem, data);
+  if (check_flag(&flag, "IDASetUserData", 1)) return(1);
+
+  nthreads = 1;
+  nnz = NEQ * NEQ;
+  flag = IDASuperLUMT(ida_mem, nthreads, NEQ, nnz);
+  if (check_flag(&flag, "IDASuperLUMT", 1)) return(1);
+
+  flag = IDASlsSetSparseJacFn(ida_mem, Jac);
+  if (check_flag(&flag, "IDASlsSetSparseJacFn", 1)) return(1);
+
+  flag = IDAQuadInit(ida_mem, rhsQ, q);
+  if (check_flag(&flag, "IDAQuadInit", 1)) return(1);
+
+  flag = IDAQuadSStolerances(ida_mem, reltolQ, abstolQ);
+  if (check_flag(&flag, "IDAQuadSStolerances", 1)) return(1);
+
+  flag = IDASetQuadErrCon(ida_mem, TRUE);
+  if (check_flag(&flag, "IDASetQuadErrCon", 1)) return(1);
+
+  /* Allocate global memory */
+
+  steps = STEPS;
+  flag = IDAAdjInit(ida_mem, steps, IDA_HERMITE);
+  /*flag = IDAAdjInit(ida_mem, steps, IDA_POLYNOMIAL);*/
+  if (check_flag(&flag, "IDAAdjInit", 1)) return(1);
+
+  /* Perform forward run */
+  printf("Forward integration ... ");
+
+  /* Integrate till TB1 and get the solution (y, y') at that time. */
+  flag = IDASolveF(ida_mem, TB1, &time, yy, yp, IDA_NORMAL, &ncheck);
+  if (check_flag(&flag, "IDASolveF", 1)) return(1);
+
+  yyTB1 = N_VClone(yy);
+  ypTB1 = N_VClone(yp);
+  /* Save the states at t=TB1. */
+  N_VScale(ONE, yy, yyTB1);
+  N_VScale(ONE, yp, ypTB1);
+  
+  /* Continue integrating till TOUT is reached. */
+  flag = IDASolveF(ida_mem, TOUT, &time, yy, yp, IDA_NORMAL, &ncheck);
+  if (check_flag(&flag, "IDASolveF", 1)) return(1);
+
+  flag = IDAGetNumSteps(ida_mem, &nst);
+  if (check_flag(&flag, "IDAGetNumSteps", 1)) return(1);
+
+  printf("done ( nst = %ld )\n",nst);
+
+  flag = IDAGetQuad(ida_mem, &time, q);
+  if (check_flag(&flag, "IDAGetQuad", 1)) return(1);
+
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("G:          %12.4Le \n",Ith(q,1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("G:          %12.4e \n",Ith(q,1));
+#else
+  printf("G:          %12.4e \n",Ith(q,1));
+#endif
+  printf("--------------------------------------------------------\n\n");
+
+  /* Test check point linked list 
+     (uncomment next block to print check point information) */
+  
+  /*  
+  {
+    int i;
+    
+    printf("\nList of Check Points (ncheck = %d)\n\n", ncheck);
+    ckpnt = (IDAadjCheckPointRec *) malloc ( (ncheck+1)*sizeof(IDAadjCheckPointRec));
+    IDAGetAdjCheckPointsInfo(ida_mem, ckpnt);
+    for (i=0;i<=ncheck;i++) {
+      printf("Address:       %p\n",ckpnt[i].my_addr);
+      printf("Next:          %p\n",ckpnt[i].next_addr);
+      printf("Time interval: %le  %le\n",ckpnt[i].t0, ckpnt[i].t1);
+      printf("Step number:   %ld\n",ckpnt[i].nstep);
+      printf("Order:         %d\n",ckpnt[i].order);
+      printf("Step size:     %le\n",ckpnt[i].step);
+      printf("\n");
+    }
+    
+  }
+  */
+
+
+  /* Create BACKWARD problem. */
+
+  /* Allocate yB (i.e. lambda_0). */
+  yB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)yB, "N_VNew_Serial", 0)) return(1);
+
+  /* Consistently initialize yB. */
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = ONE;
+
+    
+  /* Allocate ypB (i.e. lambda'_0). */
+  ypB = N_VNew_Serial(NEQ);
+  if (check_flag((void *)ypB, "N_VNew_Serial", 0)) return(1);
+
+  /* Consistently initialize ypB. */
+  Ith(ypB,1) = ONE;
+  Ith(ypB,2) = ONE;
+  Ith(ypB,3) = ZERO;
+
+  
+  /* Set the scalar relative tolerance reltolB */
+  reltolB = RTOL;               
+
+  /* Set the scalar absolute tolerance abstolB */
+  abstolB = ATOLA;
+
+  /* Set the scalar absolute tolerance abstolQB */
+  abstolQB = ATOLQ;
+
+  /* Create and allocate IDAS memory for backward run */
+  printf("Create and allocate IDAS memory for backward run\n");
+
+  flag = IDACreateB(ida_mem, &indexB);
+  if (check_flag(&flag, "IDACreateB", 1)) return(1);
+
+  flag = IDAInitB(ida_mem, indexB, resB, TB2, yB, ypB);
+  if (check_flag(&flag, "IDAInitB", 1)) return(1);
+
+  flag = IDASStolerancesB(ida_mem, indexB, reltolB, abstolB);
+  if (check_flag(&flag, "IDASStolerancesB", 1)) return(1);
+
+  flag = IDASetUserDataB(ida_mem, indexB, data);
+  if (check_flag(&flag, "IDASetUserDataB", 1)) return(1);
+
+  flag = IDASetMaxNumStepsB(ida_mem, indexB, 1000);
+
+  flag = IDASuperLUMTB(ida_mem, indexB, nthreads, NEQ, nnz);
+  if (check_flag(&flag, "IDASuperLUMTB", 1)) return(1);
+
+  flag = IDASlsSetSparseJacFnB(ida_mem, indexB, JacB);
+  if (check_flag(&flag, "IDASlsSetSparseJacB", 1)) return(1);
+
+
+  /* Quadrature for backward problem. */
+ 
+  /* Initialize qB */
+  qB = N_VNew_Serial(NP);
+  if (check_flag((void *)qB, "N_VNew", 0)) return(1);
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  flag = IDAQuadInitB(ida_mem, indexB, rhsQB, qB);
+  if (check_flag(&flag, "IDAQuadInitB", 1)) return(1);
+
+  flag = IDAQuadSStolerancesB(ida_mem, indexB, reltolB, abstolQB);
+  if (check_flag(&flag, "IDAQuadSStolerancesB", 1)) return(1);
+
+  /* Include quadratures in error control. */
+  flag = IDASetQuadErrConB(ida_mem, indexB, TRUE);
+  if (check_flag(&flag, "IDASetQuadErrConB", 1)) return(1);
+
+
+  /* Backward Integration */
+  printf("Backward integration ... ");
+
+  flag = IDASolveB(ida_mem, T0, IDA_NORMAL);
+  if (check_flag(&flag, "IDASolveB", 1)) return(1);
+
+  IDAGetNumSteps(IDAGetAdjIDABmem(ida_mem, indexB), &nstB);
+  printf("done ( nst = %ld )\n", nstB);
+
+  flag = IDAGetB(ida_mem, indexB, &time, yB, ypB);
+  if (check_flag(&flag, "IDAGetB", 1)) return(1);
+
+  flag = IDAGetQuadB(ida_mem, indexB, &time, qB);
+  if (check_flag(&flag, "IDAGetB", 1)) return(1);
+
+  PrintOutput(TB2, yB, ypB, qB);
+
+
+  /* Reinitialize backward phase and start from a different time (TB1). */
+  printf("Re-initialize IDAS memory for backward run\n");
+
+  /* Both algebraic part from y and the entire y' are computed by IDACalcIC. */
+  Ith(yB,1) = ZERO;
+  Ith(yB,2) = ZERO;
+  Ith(yB,3) = RCONST(0.50); /* not consistent */
+
+  /* Rough guess for ypB. */
+  Ith(ypB,1) = RCONST(0.80);
+  Ith(ypB,2) = RCONST(0.75);
+  Ith(ypB,3) = ZERO;
+
+  /* Initialize qB */
+  Ith(qB,1) = ZERO;
+  Ith(qB,2) = ZERO;
+  Ith(qB,3) = ZERO;
+
+  flag = IDAReInitB(ida_mem, indexB, TB1, yB, ypB);
+  if (check_flag(&flag, "IDAReInitB", 1)) return(1);
+
+  /* Also reinitialize quadratures. */
+  flag = IDAQuadInitB(ida_mem, indexB, rhsQB, qB);
+  if (check_flag(&flag, "IDAQuadInitB", 1)) return(1);
+
+  /* Use IDACalcICB to compute consistent initial conditions 
+     for this backward problem. */
+
+  id = N_VNew_Serial(NEQ);
+  Ith(id,1) = 1.0;
+  Ith(id,2) = 1.0;
+  Ith(id,3) = 0.0;
+
+  /* Specify which variables are differential (1) and which algebraic (0).*/
+  flag = IDASetIdB(ida_mem, indexB, id);
+  if (check_flag(&flag, "IDASetId", 1)) return(1);
+
+  flag = IDACalcICB(ida_mem, indexB, T1B, yyTB1, ypTB1);
+  if (check_flag(&flag, "IDACalcICB", 1)) return(1);
+
+  /* Get the consistent IC found by IDAS. */
+  flag = IDAGetConsistentICB(ida_mem, indexB, yB, ypB);
+  if (check_flag(&flag, "IDAGetConsistentICB", 1)) return(1);
+
+  printf("Backward integration ... ");
+
+  flag = IDASolveB(ida_mem, T0, IDA_NORMAL);
+  if (check_flag(&flag, "IDASolveB", 1)) return(1);
+
+  IDAGetNumSteps(IDAGetAdjIDABmem(ida_mem, indexB), &nstB);
+  printf("done ( nst = %ld )\n", nstB);
+
+  flag = IDAGetB(ida_mem, indexB, &time, yB, ypB);
+  if (check_flag(&flag, "IDAGetB", 1)) return(1);
+
+  flag = IDAGetQuadB(ida_mem, indexB, &time, qB);
+  if (check_flag(&flag, "IDAGetQuadB", 1)) return(1);
+
+  PrintOutput(TB1, yB, ypB, qB);
+
+  /* Free any memory used.*/
+
+  printf("Free memory\n\n");
+
+  IDAFree(&ida_mem);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+  N_VDestroy_Serial(q);
+  N_VDestroy_Serial(yB);
+  N_VDestroy_Serial(ypB);
+  N_VDestroy_Serial(qB);
+  N_VDestroy_Serial(id);
+  N_VDestroy_Serial(yyTB1);
+  N_VDestroy_Serial(ypTB1);
+
+  if (ckpnt != NULL) free(ckpnt);
+  free(data);
+
+  return(0);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDAS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * f routine. Compute f(t,y). 
+*/
+
+static int res(realtype t, N_Vector yy, N_Vector yp, N_Vector resval, void *user_data)
+{
+  realtype y1, y2, y3,yp1, yp2, *rval;
+  UserData data;
+  realtype p1, p2, p3;
+
+  y1  = Ith(yy,1); y2  = Ith(yy,2); y3  = Ith(yy,3); 
+  yp1 = Ith(yp,1); yp2 = Ith(yp,2);
+  rval = N_VGetArrayPointer_Serial(resval);
+
+  data = (UserData) user_data;
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  rval[0] = p1*y1-p2*y2*y3;
+  rval[1] = -rval[0] + p3*y2*y2 + yp2;
+  rval[0]+= yp1;
+  rval[2] = y1+y2+y3-1;
+
+  return(0);
+}
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+*/
+
+static int Jac(realtype t, realtype cj,
+               N_Vector yy, N_Vector yp, N_Vector resvec, 
+               SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int *colptrs;
+  int *rowvals;
+  realtype* data;
+  UserData userdata;
+  realtype p1, p2, p3;
+ 
+  yval = N_VGetArrayPointer_Serial(yy);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data = JacMat->data;
+  userdata = (UserData) user_data;
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = p1+cj;                        rowvals[0] = 0;
+  data[1] = -p1;                          rowvals[1] = 1;
+  data[2] = ONE;                          rowvals[2] = 2;
+
+  data[3] = -p2*yval[2];                  rowvals[3] = 0;
+  data[4] = p2*yval[2]+2*p3*yval[1]+cj;   rowvals[4] = 1;
+  data[5] = ONE;                          rowvals[5] = 2;
+
+  data[6] = -p2*yval[1];                  rowvals[6] = 0;
+  data[7] = p2*yval[1];                   rowvals[7] = 1;
+  data[8] = ONE;                          rowvals[8] = 2;
+
+  return(0);
+}
+
+/* 
+ * rhsQ routine. Compute fQ(t,y). 
+*/
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data)
+{
+  Ith(qdot,1) = Ith(yy,3);  
+  return(0);
+}
+
+/*
+ * EwtSet function. Computes the error weights at the current solution.
+ */
+
+static int ewt(N_Vector y, N_Vector w, void *user_data)
+{
+  int i;
+  realtype yy, ww, rtol, atol[3];
+
+  rtol    = RTOL;
+  atol[0] = ATOL1;
+  atol[1] = ATOL2;
+  atol[2] = ATOL3;
+
+  for (i=1; i<=3; i++) {
+    yy = Ith(y,i);
+    ww = rtol * SUNRabs(yy) + atol[i-1];
+    if (ww <= 0.0) return (-1);
+    Ith(w,i) = 1.0/ww;
+  }
+
+  return(0);
+}
+
+ 
+/* 
+ * resB routine.
+*/
+
+static int resB(realtype tt, 
+                 N_Vector yy, N_Vector yp,
+                 N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                 void *user_dataB)
+{
+  UserData data;
+  realtype y2, y3;
+  realtype p1, p2, p3;
+  realtype l1, l2, l3;
+  realtype lp1, lp2;
+  realtype l21;
+  
+  data = (UserData) user_dataB;
+
+  /* The p vector */
+  p1 = data->p[0]; p2 = data->p[1]; p3 = data->p[2];
+
+  /* The y  vector */
+  y2 = Ith(yy,2); y3 = Ith(yy,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yyB,1); l2 = Ith(yyB,2); l3 = Ith(yyB,3);
+
+  /* The lambda dot vector */
+  lp1 = Ith(ypB,1); lp2 = Ith(ypB,2);
+
+  /* Temporary variables */
+  l21 = l2-l1;
+
+  /* Load residual. */
+  Ith(rrB,1) = lp1 + p1*l21 - l3;
+  Ith(rrB,2) = lp2 - p2*y3*l21 - RCONST(2.0)*p3*y2*l2-l3;
+  Ith(rrB,3) = - p2*y2*l21 -l3 + RCONST(1.0);
+
+  return(0);
+}
+
+/*Jacobian for backward problem. */
+static int JacB(realtype tt, realtype cjB,
+                N_Vector yy, N_Vector yp,
+                N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                SlsMat JacMatB, void *user_data,
+                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  realtype *yvalB;
+  int* colptrsB;
+  int* rowvalsB;
+  realtype* dataB;
+  UserData userdata;
+  realtype p1, p2, p3;
+ 
+  yvalB = N_VGetArrayPointer_Serial(yy);
+  colptrsB = (*JacMatB->colptrs);
+  rowvalsB = (*JacMatB->rowvals);
+  dataB = JacMatB->data;
+  userdata = (UserData) user_data;
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMatB);
+
+  colptrsB[0] = 0;
+  colptrsB[1] = 3;
+  colptrsB[2] = 6;
+  colptrsB[3] = 9;
+
+  dataB[0] = -p1+cjB;                          rowvalsB[0] = 0;
+  dataB[1] = p2*yvalB[2];                      rowvalsB[1] = 1;
+  dataB[2] = p2*yvalB[1];                      rowvalsB[2] = 2;
+
+  dataB[3] = p1;;                              rowvalsB[3] = 0;
+  dataB[4] = -(p2*yvalB[2]+RCONST(2.0)*p3*yvalB[1])+cjB;
+  rowvalsB[4] = 1;
+  dataB[5] = -p2*yvalB[1];                     rowvalsB[5] = 2;
+     
+  dataB[6] = -ONE;                             rowvalsB[6] = 0;
+  dataB[7] = -ONE;                             rowvalsB[7] = 1;
+  dataB[8] = -ONE;                             rowvalsB[8] = 2;
+
+  return(0);
+}
+
+static int rhsQB(realtype tt, 
+                 N_Vector yy, N_Vector yp, 
+                 N_Vector yyB, N_Vector ypB, 
+                 N_Vector rrQB, void *user_dataB)
+{
+  realtype y1, y2, y3;
+  realtype l1, l2;
+  realtype l21;
+
+  /* The y vector */
+  y1 = Ith(yy,1); y2 = Ith(yy,2); y3 = Ith(yy,3);
+  
+  /* The lambda vector */
+  l1 = Ith(yyB,1); l2 = Ith(yyB,2);
+  
+  /* Temporary variables */
+  l21 = l2-l1;
+
+  Ith(rrQB,1) = y1*l21;
+  Ith(rrQB,2) = -y3*y2*l21;
+  Ith(rrQB,3) = -y2*y2*l2;
+
+  return(0);
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Print results after backward integration
+ */
+
+static void PrintOutput(realtype tfinal, N_Vector yB, N_Vector ypB, N_Vector qB)
+{
+  printf("--------------------------------------------------------\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("tB0:        %12.4Le\n",tfinal);
+  printf("dG/dp:      %12.4Le %12.4Le %12.4Le\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+  printf("lambda(t0): %12.4Le %12.4Le %12.4Le\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("tB0:        %12.4e\n",tfinal);
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+#else
+  printf("tB0:        %12.4e\n",tfinal);
+  printf("dG/dp:      %12.4e %12.4e %12.4e\n", 
+         -Ith(qB,1), -Ith(qB,2), -Ith(qB,3));
+  printf("lambda(t0): %12.4e %12.4e %12.4e\n", 
+         Ith(yB,1), Ith(yB,2), Ith(yB,3));
+#endif
+  printf("--------------------------------------------------------\n\n");
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasRoberts_ASAi_sps.out b/examples/idas/serial/idasRoberts_ASAi_sps.out
new file mode 100644
index 0000000..21ea3e2
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_ASAi_sps.out
@@ -0,0 +1,37 @@
+
+Adjoint Sensitivity Example for Chemical Kinetics
+-------------------------------------------------
+
+DAE: dy1/dt + p1*y1 - p2*y2*y3 = 0
+     dy2/dt - p1*y1 + p2*y2*y3 + p3*(y2)^2 = 0
+               y1  +  y2  +  y3 = 0
+
+Find dG/dp for
+     G = int_t0^tB0 g(t,p,y) dt
+     g(t,p,y) = y3
+
+
+Create and allocate IDAS memory for forward runs
+Forward integration ... done ( nst = 774 )
+--------------------------------------------------------
+G:            4.0000e+10 
+--------------------------------------------------------
+
+Create and allocate IDAS memory for backward run
+Backward integration ... done ( nst = 1303 )
+--------------------------------------------------------
+tB0:          4.0000e+10
+dG/dp:        1.4878e+06  -5.9467e+00   9.9112e-04
+lambda(t0):  -2.4998e+01   1.6442e-03   1.0000e+00
+--------------------------------------------------------
+
+Re-initialize IDAS memory for backward run
+Backward integration ... done ( nst = 416 )
+--------------------------------------------------------
+tB0:          5.0000e+01
+dG/dp:        1.7341e+02  -5.0592e-04   8.4323e-08
+lambda(t0):  -7.6780e+00  -1.2758e-04   1.0000e+00
+--------------------------------------------------------
+
+Free memory
+
diff --git a/examples/idas/serial/idasRoberts_FSA_dns.c b/examples/idas/serial/idasRoberts_FSA_dns.c
new file mode 100644
index 0000000..30afa2e
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_FSA_dns.c
@@ -0,0 +1,789 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Cosmin Petra and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * This simple example problem for IDA, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt = -p1*y1 + p2*y2*y3
+ *      dy2/dt = p1*y1 - p2*y2*y3 - p3*y2**2
+ *         0   = y1 + y2 + y3 - 1
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.The reaction rates are: p1=0.04,
+ * p2=1e4, and p3=3e7
+ *
+ * Optionally, IDAS can compute sensitivities with respect to the
+ * problem parameters p1, p2, and p3.
+ * The sensitivity right hand side is given analytically through the
+ * user routine fS (of type SensRhs1Fn).
+ * Any of two sensitivity methods (SIMULTANEOUS and STAGGERED can be
+ * used and sensitivities may be included in the error test or not 
+ *(error control set on TRUE or FALSE, respectively).
+ *
+ * Execution:
+ *
+ * If no sensitivities are desired:
+ *    % idasRoberts_FSA_dns -nosensi
+ * If sensitivities are to be computed:
+ *    % idasRoberts_FSA_dns -sensi sensi_meth err_con
+ * where sensi_meth is one of {sim, stg} and err_con is one of
+ * {t, f}.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <idas/idas.h>           /* prototypes for IDAS fcts. and consts. */
+#include <idas/idas_dense.h>
+#include <nvector/nvector_serial.h>  /* defs. of serial NVECTOR fcts. and macros  */
+#include <sundials/sundials_types.h> /* def. of type realtype */
+#include <sundials/sundials_math.h>  /* definition of ABS */
+
+/* Accessor macros */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i=1..NEQ */
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1) /* (i,j)-th matrix component i,j=1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ   3             /* number of equations  */
+#define T0    RCONST(0.0)   /* initial time */
+#define T1    RCONST(0.4)   /* first output time */
+#define TMULT RCONST(10.0)  /* output time factor */
+#define NOUT  12            /* number of output times */
+
+#define NP    3             /* number of problem parameters */
+#define NS    3             /* number of sensitivities computed */
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];           /* problem parameters */
+  realtype coef;
+} *UserData;
+
+/* Prototypes of functions by IDAS */
+
+static int res(realtype t, N_Vector y, N_Vector yp, N_Vector resval, void *user_data);
+
+static int resS(int Ns, realtype t, 
+                N_Vector y, N_Vector yp, N_Vector resval,
+                N_Vector *yyS, N_Vector *ypS, N_Vector *resvalS,
+                void *user_data, 
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int rhsQ(realtype tres, N_Vector yy, N_Vector yp,
+                 N_Vector rrQ, void *user_data);
+
+/* Prototypes of private functions */
+
+static void ProcessArgs(int argc, char *argv[],
+                        booleantype *sensi, int *sensi_meth, 
+                        booleantype *err_con);
+static void WrongArgs(char *name);
+
+static void PrintIC(N_Vector y, N_Vector yp);
+static void PrintSensIC(N_Vector y, N_Vector yp, N_Vector* yS, N_Vector* ypS); 
+
+static void PrintOutput(void *ida_mem, realtype t, N_Vector u);
+static void PrintSensOutput(N_Vector *uS);
+
+static void PrintFinalStats(void *ida_mem, booleantype sensi);
+
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  void *ida_mem;
+  UserData data;
+  realtype reltol, t, tout;
+  N_Vector y, yp, abstol, id;
+  int iout, flag;
+
+  realtype pbar[NS];
+  int is; 
+  N_Vector *yS, *ypS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  N_Vector yQ, *yQS;
+
+  ida_mem = NULL;
+  data    = NULL;
+  y       =  NULL;
+  yS      = NULL;
+  ypS     = NULL;
+
+  /* Process arguments */
+  ProcessArgs(argc, argv, &sensi, &sensi_meth, &err_con);
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.040);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+  data->coef = 0.5;
+
+  /* Initial conditions */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  Ith(y,1) = ONE;
+  Ith(y,2) = ZERO;
+  Ith(y,3) = ZERO;
+
+  yp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+
+  /* These initial conditions are NOT consistent. See IDACalcIC below. */
+  Ith(yp,1) = RCONST(0.1);
+  Ith(yp,2) = ZERO;
+  Ith(yp,3) = ZERO;  
+
+  /* Create IDAS object */
+  ida_mem = IDACreate();
+  if (check_flag((void *)ida_mem, "IDACreate", 0)) return(1);
+
+  /* Allocate space for IDAS */
+  flag = IDAInit(ida_mem, res, T0, y, yp);
+  if (check_flag(&flag, "IDAInit", 1)) return(1);
+
+  /* Specify scalar relative tol. and vector absolute tol. */
+  reltol = RCONST(1.0e-6);
+  abstol = N_VNew_Serial(NEQ);
+  Ith(abstol,1) = RCONST(1.0e-8);
+  Ith(abstol,2) = RCONST(1.0e-14);
+  Ith(abstol,3) = RCONST(1.0e-6);
+  flag = IDASVtolerances(ida_mem, reltol, abstol);
+  if (check_flag(&flag, "IDASVtolerances", 1)) return(1);
+
+  /* Set ID vector */
+  id = N_VNew_Serial(NEQ);
+  Ith(id,1) = 1.0;
+  Ith(id,2) = 1.0;
+  Ith(id,3) = 0.0;
+  flag = IDASetId(ida_mem, id);
+  if (check_flag(&flag, "IDASetId", 1)) return(1);
+
+  /* Attach user data */
+  flag = IDASetUserData(ida_mem, data);
+  if (check_flag(&flag, "IDASetUserData", 1)) return(1);
+
+  /* Attach linear solver */
+  flag = IDADense(ida_mem, NEQ);
+  if (check_flag(&flag, "IDADense", 1)) return(1);
+
+  printf("\n3-species chemical kinetics problem\n");
+
+  /* Sensitivity-related settings */
+  if (sensi) {
+
+    pbar[0] = data->p[0];
+    pbar[1] = data->p[1];
+    pbar[2] = data->p[2];
+
+    yS = N_VCloneVectorArray_Serial(NS, y);
+    if (check_flag((void *)yS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for (is=0;is<NS;is++) N_VConst(ZERO, yS[is]);
+    
+    ypS = N_VCloneVectorArray_Serial(NS, y);
+    if (check_flag((void *)ypS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for (is=0;is<NS;is++) N_VConst(ZERO, ypS[is]);
+
+    /* 
+    * Only non-zero sensitivity I.C. are ypS[0]: 
+    * - Ith(ypS[0],1) = -ONE;
+    * - Ith(ypS[0],2) =  ONE;
+    *
+    * They are not set. IDACalcIC also computes consistent IC for sensitivities.
+    */
+    
+    flag = IDASensInit(ida_mem, NS, sensi_meth, resS, yS, ypS);
+    if(check_flag(&flag, "IDASensInit", 1)) return(1);
+
+    flag = IDASensEEtolerances(ida_mem);
+    if(check_flag(&flag, "IDASensEEtolerances", 1)) return(1);
+
+    flag = IDASetSensErrCon(ida_mem, err_con);
+    if (check_flag(&flag, "IDASetSensErrCon", 1)) return(1);
+
+    flag = IDASetSensParams(ida_mem, data->p, pbar, NULL);
+    if (check_flag(&flag, "IDASetSensParams", 1)) return(1);
+
+    printf("Sensitivity: YES ");
+    if(sensi_meth == IDA_SIMULTANEOUS)   
+      printf("( SIMULTANEOUS +");
+    else 
+      printf("( STAGGERED +");   
+    if(err_con) printf(" FULL ERROR CONTROL )");
+    else        printf(" PARTIAL ERROR CONTROL )");
+
+  } else {
+
+    printf("Sensitivity: NO ");
+
+  }
+
+  /*----------------------------------------------------------
+   *               Q U A D R A T U R E S
+   * ---------------------------------------------------------*/
+  yQ = N_VNew_Serial(2);
+
+  Ith(yQ,1) = 0;
+  Ith(yQ,2) = 0;
+
+  IDAQuadInit(ida_mem, rhsQ, yQ);
+
+  yQS = N_VCloneVectorArray_Serial(NS, yQ);
+  for (is=0;is<NS;is++) N_VConst(ZERO, yQS[is]);  
+
+  IDAQuadSensInit(ida_mem, NULL, yQS);
+
+  /* Call IDACalcIC to compute consistent initial conditions. If sensitivity is
+     enabled, this function also try to find consistent IC for the sensitivities. */
+
+  flag = IDACalcIC(ida_mem, IDA_YA_YDP_INIT, T1);;
+  if (check_flag(&flag, "IDACalcIC", 1)) return(1);
+
+  flag = IDAGetConsistentIC(ida_mem, y, yp);
+  if (check_flag(&flag, "IDAGetConsistentIC", 1)) return(1);
+
+  PrintIC(y, yp);
+
+  if(sensi) {
+      IDAGetSensConsistentIC(ida_mem, yS, ypS);
+      PrintSensIC(y, yp, yS, ypS); 
+    }
+      
+  /* In loop over output points, call IDA, print results, test for error */
+  
+  printf("\n\n");
+  printf("===========================================");
+  printf("============================\n");
+  printf("     T     Q       H      NST           y1");
+  printf("           y2           y3    \n");
+  printf("===========================================");
+  printf("============================\n");
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout *= TMULT) {
+    
+    flag = IDASolve(ida_mem, tout, &t, y, yp, IDA_NORMAL);
+    if (check_flag(&flag, "IDASolve", 1)) break;
+
+    PrintOutput(ida_mem, t, y);
+    
+    if (sensi) {
+      flag = IDAGetSens(ida_mem, &t, yS);
+      if (check_flag(&flag, "IDAGetSens", 1)) break;
+      PrintSensOutput(yS);
+    } 
+    printf("-----------------------------------------");
+    printf("------------------------------\n");
+
+  }
+
+  printf("\nQuadrature:\n");
+  IDAGetQuad(ida_mem, &t, yQ);
+  printf("G:      %10.4e\n", Ith(yQ,1)); 
+
+  if(sensi) {
+    IDAGetQuadSens(ida_mem, &t, yQS);
+    printf("\nSensitivities at t=%g:\n",t);
+    printf("dG/dp1: %11.4e\n", Ith(yQS[0], 1));
+    printf("dG/dp1: %11.4e\n", Ith(yQS[1], 1));
+    printf("dG/dp1: %11.4e\n", Ith(yQS[2], 1));
+  }
+
+  /* Print final statistics */
+  PrintFinalStats(ida_mem, sensi);
+
+  /* Free memory */
+  N_VDestroy_Serial(y);
+  if (sensi) {
+    N_VDestroyVectorArray_Serial(yS, NS);
+  }
+  free(data);
+  IDAFree(&ida_mem);
+  N_VDestroy_Serial(yQ);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDAS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Residual routine. Compute F(t,y,y',p). 
+ */
+static int res(realtype t, N_Vector yy, N_Vector yp, N_Vector resval, void *user_data)
+{
+  UserData data;
+  realtype p1, p2, p3;
+  realtype y1, y2, y3;
+  realtype yp1, yp2, yp3;
+
+  data = (UserData) user_data;
+  p1 = data->p[0];
+  p2 = data->p[1];
+  p3 = data->p[2];
+
+  y1 = Ith(yy,1);
+  y2 = Ith(yy,2);
+  y3 = Ith(yy,3);
+
+  yp1 = Ith(yp,1);
+  yp2 = Ith(yp,2);
+  yp3 = Ith(yp,3);
+
+  Ith(resval,1) = yp1 + p1*y1 - p2*y2*y3;
+  Ith(resval,2) = yp2 - p1*y1 + p2*y2*y3 + p3*y2*y2;
+  Ith(resval,3) = y1 + y2 + y3 - ONE;
+
+  return(0);
+}
+
+ 
+/* 
+ * resS routine. Compute sensitivity r.h.s. 
+ */
+
+static int resS(int Ns, realtype t, 
+                N_Vector yy, N_Vector yp, N_Vector resval,
+                N_Vector *yyS, N_Vector *ypS, N_Vector *resvalS,
+                void *user_data, 
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  UserData data;
+  realtype p1, p2, p3;
+  realtype y1, y2, y3;
+  realtype yp1, yp2, yp3;
+  realtype s1, s2, s3;
+  realtype sd1, sd2, sd3;
+  realtype rs1, rs2, rs3;
+  int is;
+
+  data = (UserData) user_data;
+  p1 = data->p[0];
+  p2 = data->p[1];
+  p3 = data->p[2];
+
+  y1 = Ith(yy,1);
+  y2 = Ith(yy,2);
+  y3 = Ith(yy,3);
+
+  yp1 = Ith(yp,1);
+  yp2 = Ith(yp,2);
+  yp3 = Ith(yp,3);
+
+  for (is=0; is<NS; is++) {
+
+    s1 = Ith(yyS[is],1);
+    s2 = Ith(yyS[is],2);
+    s3 = Ith(yyS[is],3);
+
+    sd1 = Ith(ypS[is],1);
+    sd2 = Ith(ypS[is],2);
+    sd3 = Ith(ypS[is],3);
+
+    rs1 = sd1 + p1*s1 - p2*y3*s2 - p2*y2*s3;
+    rs2 = sd2 - p1*s1 + p2*y3*s2 + p2*y2*s3 + 2*p3*y2*s2;
+    rs3 = s1 + s2 + s3;
+
+    switch (is) {
+    case 0:
+      rs1 += y1;
+      rs2 -= y1;
+      break;
+    case 1:
+      rs1 -= y2*y3;
+      rs2 += y2*y3;
+      break;
+    case 2:
+      rs2 += y2*y2;
+      break;
+    }
+  
+    Ith(resvalS[is],1) = rs1;
+    Ith(resvalS[is],2) = rs2;
+    Ith(resvalS[is],3) = rs3;
+
+  }
+
+  return(0);
+}
+
+static int rhsQ(realtype t, N_Vector y, N_Vector yp, 
+              N_Vector ypQ, void* user_data)
+{
+  UserData data;
+
+  data = (UserData) user_data;
+
+  Ith(ypQ,1) = Ith(y,3);
+  
+  Ith(ypQ,2) = data->coef*( Ith(y,1)*Ith(y,1)+ 
+                            Ith(y,2)*Ith(y,2)+ 
+                            Ith(y,3)*Ith(y,3) );
+                    
+  return(0);
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Process and verify arguments to idasfwddenx.
+ */
+
+static void ProcessArgs(int argc, char *argv[], 
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = IDA_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = IDA_STAGGERED;
+    else 
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(argv[0]);
+  }
+
+}
+
+static void WrongArgs(char *name)
+{
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim or stg\n");
+    printf("         err_con    = t or f\n");
+    
+    exit(0);
+}
+
+
+static void PrintIC(N_Vector y, N_Vector yp)
+{
+  realtype* data;
+
+  data = N_VGetArrayPointer_Serial(y);
+  printf("\n\nConsistent IC:\n");
+  printf("\ty = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", data[0], data[1], data[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#endif
+
+  data = N_VGetArrayPointer_Serial(yp);
+  printf("\typ= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", data[0], data[1], data[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#endif
+
+}
+static void PrintSensIC(N_Vector y, N_Vector yp, N_Vector* yS, N_Vector* ypS)
+{
+  realtype *sdata;
+
+  sdata = N_VGetArrayPointer_Serial(yS[0]);
+  printf("                  Sensitivity 1  ");
+
+  printf("\n\ts1 = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  sdata = N_VGetArrayPointer_Serial(ypS[0]);
+  printf("\ts1'= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+
+  printf("                  Sensitivity 2  ");
+  sdata = N_VGetArrayPointer_Serial(yS[1]);
+  printf("\n\ts2 = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  sdata = N_VGetArrayPointer_Serial(ypS[1]);
+  printf("\ts2'= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+
+  printf("                  Sensitivity 3  ");
+  sdata = N_VGetArrayPointer_Serial(yS[2]);
+  printf("\n\ts3 = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  sdata = N_VGetArrayPointer_Serial(ypS[2]);
+  printf("\ts3'= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+
+}
+
+/*
+ * Print current t, step count, order, stepsize, and solution.
+ */
+
+static void PrintOutput(void *ida_mem, realtype t, N_Vector u)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = IDAGetNumSteps(ida_mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetLastOrder(ida_mem, &qu);
+  check_flag(&flag, "IDAGetLastOrder", 1);
+  flag = IDAGetLastStep(ida_mem, &hu);
+  check_flag(&flag, "IDAGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%8.3Le %2d  %8.3Le %5ld\n", t, qu, hu, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#else
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#endif
+
+  printf("                  Solution       ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", udata[0], udata[1], udata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#endif
+
+}
+
+/* 
+ * Print sensitivities.
+*/
+
+static void PrintSensOutput(N_Vector *uS)
+{
+  realtype *sdata;
+
+  sdata = N_VGetArrayPointer_Serial(uS[0]);
+  printf("                  Sensitivity 1  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  
+  sdata = N_VGetArrayPointer_Serial(uS[1]);
+  printf("                  Sensitivity 2  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+  sdata = N_VGetArrayPointer_Serial(uS[2]);
+  printf("                  Sensitivity 3  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+}
+
+/* 
+ * Print some final statistics from the IDAS memory.
+ */
+
+static void PrintFinalStats(void *ida_mem, booleantype sensi)
+{
+  long int nst;
+  long int nfe, nsetups, nni, ncfn, netf;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  long int nje, nfeLS;
+  int flag;
+
+  flag = IDAGetNumSteps(ida_mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetNumResEvals(ida_mem, &nfe);
+  check_flag(&flag, "IDAGetNumRhsEvals", 1);
+  flag = IDAGetNumLinSolvSetups(ida_mem, &nsetups);
+  check_flag(&flag, "IDAGetNumLinSolvSetups", 1);
+  flag = IDAGetNumErrTestFails(ida_mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1);
+  flag = IDAGetNumNonlinSolvIters(ida_mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1);
+  flag = IDAGetNumNonlinSolvConvFails(ida_mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1);
+
+  if (sensi) {
+    flag = IDAGetSensNumResEvals(ida_mem, &nfSe);
+    check_flag(&flag, "IDAGetSensNumRhsEvals", 1);
+    flag = IDAGetNumResEvalsSens(ida_mem, &nfeS);
+    check_flag(&flag, "IDAGetNumResEvalsSens", 1);
+    flag = IDAGetSensNumLinSolvSetups(ida_mem, &nsetupsS);
+    check_flag(&flag, "IDAGetSensNumLinSolvSetups", 1);
+    flag = IDAGetSensNumErrTestFails(ida_mem, &netfS);
+    check_flag(&flag, "IDAGetSensNumErrTestFails", 1);
+    flag = IDAGetSensNumNonlinSolvIters(ida_mem, &nniS);
+    check_flag(&flag, "IDAGetSensNumNonlinSolvIters", 1);
+    flag = IDAGetSensNumNonlinSolvConvFails(ida_mem, &ncfnS);
+    check_flag(&flag, "IDAGetSensNumNonlinSolvConvFails", 1);
+  }
+
+  flag = IDADlsGetNumJacEvals(ida_mem, &nje);
+  check_flag(&flag, "IDADlsGetNumJacEvals", 1);
+  flag = IDADlsGetNumResEvals(ida_mem, &nfeLS);
+  check_flag(&flag, "IDADlsGetNumResEvals", 1);
+
+  printf("\nFinal Statistics\n\n");
+  printf("nst     = %5ld\n\n", nst);
+  printf("nfe     = %5ld\n",   nfe);
+  printf("netf    = %5ld    nsetups  = %5ld\n", netf, nsetups);
+  printf("nni     = %5ld    ncfn     = %5ld\n", nni, ncfn);
+
+  if(sensi) {
+    printf("\n");
+    printf("nfSe    = %5ld    nfeS     = %5ld\n", nfSe, nfeS);
+    printf("netfs   = %5ld    nsetupsS = %5ld\n", netfS, nsetupsS);
+    printf("nniS    = %5ld    ncfnS    = %5ld\n", nniS, ncfnS);
+  }
+
+  printf("\n");
+  printf("nje    = %5ld    nfeLS     = %5ld\n", nje, nfeLS);
+
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasRoberts_FSA_dns.out b/examples/idas/serial/idasRoberts_FSA_dns.out
new file mode 100644
index 0000000..cb70bb8
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_FSA_dns.out
@@ -0,0 +1,115 @@
+
+3-species chemical kinetics problem
+Sensitivity: YES ( SIMULTANEOUS + FULL ERROR CONTROL )
+
+Consistent IC:
+	y =   1.0000e+00   0.0000e+00  -7.7954e-16 
+	yp=  -4.0000e-02   4.0000e-02   0.0000e+00 
+                  Sensitivity 1  
+	s1 =   0.0000e+00   0.0000e+00  -1.9467e-14 
+	s1'=  -1.0000e-00   1.0000e-00   0.0000e+00 
+                  Sensitivity 2  
+	s2 =   0.0000e+00   0.0000e+00   0.0000e+00 
+	s2'=   0.0000e+00   0.0000e+00   0.0000e+00 
+                  Sensitivity 3  
+	s3 =   0.0000e+00   0.0000e+00   0.0000e+00 
+	s3'=   0.0000e+00   0.0000e+00   0.0000e+00 
+
+
+=======================================================================
+     T     Q       H      NST           y1           y2           y3    
+=======================================================================
+4.000e-01  3  5.234e-02   410
+                  Solution         9.8517e-01   3.3864e-05   1.4792e-02 
+                  Sensitivity 1   -3.5590e-01   3.9026e-04   3.5551e-01 
+                  Sensitivity 2    9.5512e-08  -2.1306e-10  -9.5299e-08 
+                  Sensitivity 3   -1.5847e-11  -5.2901e-13   1.6376e-11 
+-----------------------------------------------------------------------
+4.000e+00  4  1.544e-01   452
+                  Solution         9.0552e-01   2.2405e-05   9.4458e-02 
+                  Sensitivity 1   -1.8761e+00   1.7922e-04   1.8759e+00 
+                  Sensitivity 2    2.9614e-06  -5.8304e-10  -2.9608e-06 
+                  Sensitivity 3   -4.9335e-10  -2.7626e-13   4.9362e-10 
+-----------------------------------------------------------------------
+4.000e+01  4  1.280e+00   511
+                  Solution         7.1583e-01   9.1855e-06   2.8416e-01 
+                  Sensitivity 1   -4.2476e+00   4.5912e-05   4.2475e+00 
+                  Sensitivity 2    1.3731e-05  -2.3572e-10  -1.3731e-05 
+                  Sensitivity 3   -2.2884e-09  -1.1381e-13   2.2885e-09 
+-----------------------------------------------------------------------
+4.000e+02  5  1.323e+01   581
+                  Solution         4.5052e-01   3.2229e-06   5.4948e-01 
+                  Sensitivity 1   -5.9584e+00   3.5427e-06   5.9584e+00 
+                  Sensitivity 2    2.2738e-05  -2.2601e-11  -2.2738e-05 
+                  Sensitivity 3   -3.7897e-09  -4.9948e-14   3.7897e-09 
+-----------------------------------------------------------------------
+4.000e+03  4  9.361e+01   675
+                  Solution         1.8320e-01   8.9424e-07   8.1680e-01 
+                  Sensitivity 1   -4.7501e+00  -5.9937e-06   4.7501e+00 
+                  Sensitivity 2    1.8809e-05   2.3127e-11  -1.8809e-05 
+                  Sensitivity 3   -3.1348e-09  -1.8758e-14   3.1348e-09 
+-----------------------------------------------------------------------
+4.000e+04  5  1.092e+03   763
+                  Solution         3.8983e-02   1.6218e-07   9.6102e-01 
+                  Sensitivity 1   -1.5750e+00  -2.7620e-06   1.5750e+00 
+                  Sensitivity 2    6.2875e-06   1.1002e-11  -6.2875e-06 
+                  Sensitivity 3   -1.0479e-09  -4.5367e-15   1.0479e-09 
+-----------------------------------------------------------------------
+4.000e+05  5  1.116e+04   846
+                  Solution         4.9383e-03   1.9850e-08   9.9506e-01 
+                  Sensitivity 1   -2.3633e-01  -4.5841e-07   2.3633e-01 
+                  Sensitivity 2    9.4503e-07   1.8325e-12  -9.4503e-07 
+                  Sensitivity 3   -1.5751e-10  -6.3625e-16   1.5751e-10 
+-----------------------------------------------------------------------
+4.000e+06  5  1.281e+05   919
+                  Solution         5.1682e-04   2.0683e-09   9.9948e-01 
+                  Sensitivity 1   -2.5666e-02  -5.1061e-08   2.5666e-02 
+                  Sensitivity 2    1.0266e-07   2.0423e-13  -1.0266e-07 
+                  Sensitivity 3   -1.7110e-11  -6.8510e-17   1.7110e-11 
+-----------------------------------------------------------------------
+4.000e+07  5  1.793e+06   974
+                  Solution         5.2033e-05   2.0814e-10   9.9995e-01 
+                  Sensitivity 1   -2.5993e-03  -5.1947e-09   2.5993e-03 
+                  Sensitivity 2    1.0397e-08   2.0778e-14  -1.0397e-08 
+                  Sensitivity 3   -1.7328e-12  -6.9320e-18   1.7328e-12 
+-----------------------------------------------------------------------
+4.000e+08  4  2.324e+07  1011
+                  Solution         5.2096e-06   2.0839e-11   9.9999e-01 
+                  Sensitivity 1   -2.6054e-04  -5.2100e-10   2.6054e-04 
+                  Sensitivity 2    1.0422e-09   2.0840e-15  -1.0422e-09 
+                  Sensitivity 3   -1.7363e-13  -6.9454e-19   1.7364e-13 
+-----------------------------------------------------------------------
+4.000e+09  3  3.664e+08  1042
+                  Solution         5.2268e-07   2.0907e-12   1.0000e-00 
+                  Sensitivity 1   -2.6168e-05  -5.2687e-11   2.6169e-05 
+                  Sensitivity 2    1.0467e-10   2.1075e-16  -1.0467e-10 
+                  Sensitivity 3   -1.7422e-14  -6.9690e-20   1.7423e-14 
+-----------------------------------------------------------------------
+4.000e+10  2  4.467e+09  1064
+                  Solution         5.1289e-08   2.0516e-13   1.0000e-00 
+                  Sensitivity 1   -2.5638e-06  -4.9912e-12   2.5638e-06 
+                  Sensitivity 2    1.0255e-11   1.9965e-17  -1.0255e-11 
+                  Sensitivity 3   -1.7096e-15  -6.8385e-21   1.7096e-15 
+-----------------------------------------------------------------------
+
+Quadrature:
+G:      4.0000e+10
+
+Sensitivities at t=4e+10:
+dG/dp1:  1.4895e+06
+dG/dp1: -5.9536e+00
+dG/dp1:  9.9196e-04
+
+Final Statistics
+
+nst     =  1064
+
+nfe     =  1702
+netf    =    19    nsetups  =   129
+nni     =  1700    ncfn     =    12
+
+nfSe    =  1702    nfeS     =     0
+netfs   =     0    nsetupsS =     0
+nniS    =     0    ncfnS    =     0
+
+nje    =   129    nfeLS     =   387
diff --git a/examples/idas/serial/idasRoberts_FSA_klu.c b/examples/idas/serial/idasRoberts_FSA_klu.c
new file mode 100644
index 0000000..264b41f
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_FSA_klu.c
@@ -0,0 +1,830 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date: $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on idasRoberts_FSA_dns.c and modified to use KLU
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * This simple example problem for IDA, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt = -p1*y1 + p2*y2*y3
+ *      dy2/dt = p1*y1 - p2*y2*y3 - p3*y2**2
+ *         0   = y1 + y2 + y3 - 1
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.The reaction rates are: p1=0.04,
+ * p2=1e4, and p3=3e7
+ *
+ * Optionally, IDAS can compute sensitivities with respect to the
+ * problem parameters p1, p2, and p3.
+ * The sensitivity right hand side is given analytically through the
+ * user routine fS (of type SensRhs1Fn).
+ * Any of two sensitivity methods (SIMULTANEOUS and STAGGERED can be
+ * used and sensitivities may be included in the error test or not 
+ *(error control set on TRUE or FALSE, respectively).
+ *
+ * Execution:
+ *
+ * If no sensitivities are desired:
+ *    % idasRoberts_FSA_klu -nosensi
+ * If sensitivities are to be computed:
+ *    % idasRoberts_FSA_klu -sensi sensi_meth err_con
+ * where sensi_meth is one of {sim, stg} and err_con is one of
+ * {t, f}.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Header files with a description of contents used */
+
+#include <idas/idas.h>                 /* prototypes for IDAS fcts. and consts. */
+#include <idas/idas_klu.h>             /* prototypes for IDAKLU fcts. and constants */
+#include <sundials/sundials_sparse.h>  /* defs. of SlsMat */
+#include <nvector/nvector_serial.h>    /* defs. of serial NVECTOR fcts. and macros  */
+#include <sundials/sundials_types.h>   /* def. of type realtype */
+#include <sundials/sundials_math.h>    /* definition of ABS */
+
+/* Accessor macros */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i=1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ   3             /* number of equations  */
+#define T0    RCONST(0.0)   /* initial time */
+#define T1    RCONST(0.4)   /* first output time */
+#define TMULT RCONST(10.0)  /* output time factor */
+#define NOUT  12            /* number of output times */
+
+#define NP    3             /* number of problem parameters */
+#define NS    3             /* number of sensitivities computed */
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];           /* problem parameters */
+  realtype coef;
+} *UserData;
+
+/* Prototypes of functions by IDAS */
+
+static int res(realtype t, N_Vector y, N_Vector yp, N_Vector resval, void *user_data);
+
+static int Jac(realtype t, realtype cj, 
+               N_Vector yy, N_Vector yp, N_Vector resvec, 
+               SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int resS(int Ns, realtype t, 
+                N_Vector y, N_Vector yp, N_Vector resval,
+                N_Vector *yyS, N_Vector *ypS, N_Vector *resvalS,
+                void *user_data, 
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int rhsQ(realtype tres, N_Vector yy, N_Vector yp,
+                 N_Vector rrQ, void *user_data);
+
+/* Prototypes of private functions */
+
+static void ProcessArgs(int argc, char *argv[],
+                        booleantype *sensi, int *sensi_meth, 
+                        booleantype *err_con);
+static void WrongArgs(char *name);
+
+static void PrintIC(N_Vector y, N_Vector yp);
+static void PrintSensIC(N_Vector y, N_Vector yp, N_Vector* yS, N_Vector* ypS); 
+
+static void PrintOutput(void *ida_mem, realtype t, N_Vector u);
+static void PrintSensOutput(N_Vector *uS);
+
+static void PrintFinalStats(void *ida_mem, booleantype sensi);
+
+static int check_flag(void *flagvalue, char *funcname, int opt);
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  void *ida_mem;
+  UserData data;
+  realtype reltol, t, tout;
+  N_Vector y, yp, abstol, id;
+  int iout, flag, nnz;
+
+  realtype pbar[NS];
+  int is; 
+  N_Vector *yS, *ypS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  N_Vector yQ, *yQS;
+
+  ida_mem = NULL;
+  data    = NULL;
+  y       =  NULL;
+  yS      = NULL;
+  ypS     = NULL;
+
+  /* Process arguments */
+  ProcessArgs(argc, argv, &sensi, &sensi_meth, &err_con);
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.040);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+  data->coef = 0.5;
+
+  /* Initial conditions */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  Ith(y,1) = ONE;
+  Ith(y,2) = ZERO;
+  Ith(y,3) = ZERO;
+
+  yp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+
+  /* These initial conditions are NOT consistent. See IDACalcIC below. */
+  Ith(yp,1) = RCONST(0.1);
+  Ith(yp,2) = ZERO;
+  Ith(yp,3) = ZERO;  
+
+  /* Create IDAS object */
+  ida_mem = IDACreate();
+  if (check_flag((void *)ida_mem, "IDACreate", 0)) return(1);
+
+  /* Allocate space for IDAS */
+  flag = IDAInit(ida_mem, res, T0, y, yp);
+  if (check_flag(&flag, "IDAInit", 1)) return(1);
+
+  /* Specify scalar relative tol. and vector absolute tol. */
+  reltol = RCONST(1.0e-6);
+  abstol = N_VNew_Serial(NEQ);
+  Ith(abstol,1) = RCONST(1.0e-8);
+  Ith(abstol,2) = RCONST(1.0e-14);
+  Ith(abstol,3) = RCONST(1.0e-6);
+  flag = IDASVtolerances(ida_mem, reltol, abstol);
+  if (check_flag(&flag, "IDASVtolerances", 1)) return(1);
+
+  /* Set ID vector */
+  id = N_VNew_Serial(NEQ);
+  Ith(id,1) = 1.0;
+  Ith(id,2) = 1.0;
+  Ith(id,3) = 0.0;
+  flag = IDASetId(ida_mem, id);
+  if (check_flag(&flag, "IDASetId", 1)) return(1);
+
+  /* Attach user data */
+  flag = IDASetUserData(ida_mem, data);
+  if (check_flag(&flag, "IDASetUserData", 1)) return(1);
+
+  /* Attach linear solver */
+  nnz = NEQ * NEQ;
+  flag = IDAKLU(ida_mem, NEQ, nnz, CSC_MAT);
+  if (check_flag(&flag, "IDAKLU", 1)) return(1);
+
+  flag = IDASlsSetSparseJacFn(ida_mem, Jac);
+  if (check_flag(&flag, "IDASlsSetSparseJacFn", 1)) return(1);
+
+  printf("\n3-species chemical kinetics problem\n");
+
+  /* Sensitivity-related settings */
+  if (sensi) {
+
+    pbar[0] = data->p[0];
+    pbar[1] = data->p[1];
+    pbar[2] = data->p[2];
+
+    yS = N_VCloneVectorArray_Serial(NS, y);
+    if (check_flag((void *)yS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for (is=0;is<NS;is++) N_VConst(ZERO, yS[is]);
+    
+    ypS = N_VCloneVectorArray_Serial(NS, y);
+    if (check_flag((void *)ypS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for (is=0;is<NS;is++) N_VConst(ZERO, ypS[is]);
+
+    /* 
+    * Only non-zero sensitivity I.C. are ypS[0]: 
+    * - Ith(ypS[0],1) = -ONE;
+    * - Ith(ypS[0],2) =  ONE;
+    *
+    * They are not set. IDACalcIC also computes consistent IC for sensitivities.
+    */
+    
+    flag = IDASensInit(ida_mem, NS, sensi_meth, resS, yS, ypS);
+    if(check_flag(&flag, "IDASensInit", 1)) return(1);
+
+    flag = IDASensEEtolerances(ida_mem);
+    if(check_flag(&flag, "IDASensEEtolerances", 1)) return(1);
+
+    flag = IDASetSensErrCon(ida_mem, err_con);
+    if (check_flag(&flag, "IDASetSensErrCon", 1)) return(1);
+
+    flag = IDASetSensParams(ida_mem, data->p, pbar, NULL);
+    if (check_flag(&flag, "IDASetSensParams", 1)) return(1);
+
+    printf("Sensitivity: YES ");
+    if(sensi_meth == IDA_SIMULTANEOUS)   
+      printf("( SIMULTANEOUS +");
+    else 
+      printf("( STAGGERED +");   
+    if(err_con) printf(" FULL ERROR CONTROL )");
+    else        printf(" PARTIAL ERROR CONTROL )");
+
+  } else {
+
+    printf("Sensitivity: NO ");
+
+  }
+
+  /*----------------------------------------------------------
+   *               Q U A D R A T U R E S
+   * ---------------------------------------------------------*/
+  yQ = N_VNew_Serial(2);
+
+  Ith(yQ,1) = 0;
+  Ith(yQ,2) = 0;
+
+  IDAQuadInit(ida_mem, rhsQ, yQ);
+
+  yQS = N_VCloneVectorArray_Serial(NS, yQ);
+  for (is=0;is<NS;is++) N_VConst(ZERO, yQS[is]);  
+
+  IDAQuadSensInit(ida_mem, NULL, yQS);
+
+  /* Call IDACalcIC to compute consistent initial conditions. If sensitivity is
+     enabled, this function also try to find consistent IC for the sensitivities. */
+
+  flag = IDACalcIC(ida_mem, IDA_YA_YDP_INIT, T1);;
+  if (check_flag(&flag, "IDACalcIC", 1)) return(1);
+
+  flag = IDAGetConsistentIC(ida_mem, y, yp);
+  if (check_flag(&flag, "IDAGetConsistentIC", 1)) return(1);
+
+  PrintIC(y, yp);
+
+  if(sensi) {
+      IDAGetSensConsistentIC(ida_mem, yS, ypS);
+      PrintSensIC(y, yp, yS, ypS); 
+    }
+      
+  /* In loop over output points, call IDA, print results, test for error */
+  
+  printf("\n\n");
+  printf("===========================================");
+  printf("============================\n");
+  printf("     T     Q       H      NST           y1");
+  printf("           y2           y3    \n");
+  printf("===========================================");
+  printf("============================\n");
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout *= TMULT) {
+    
+    flag = IDASolve(ida_mem, tout, &t, y, yp, IDA_NORMAL);
+    if (check_flag(&flag, "IDASolve", 1)) break;
+
+    PrintOutput(ida_mem, t, y);
+    
+    if (sensi) {
+      flag = IDAGetSens(ida_mem, &t, yS);
+      if (check_flag(&flag, "IDAGetSens", 1)) break;
+      PrintSensOutput(yS);
+    } 
+    printf("-----------------------------------------");
+    printf("------------------------------\n");
+
+  }
+
+  printf("\nQuadrature:\n");
+  IDAGetQuad(ida_mem, &t, yQ);
+  printf("G:      %10.4e\n", Ith(yQ,1)); 
+
+  if(sensi) {
+    IDAGetQuadSens(ida_mem, &t, yQS);
+    printf("\nSensitivities at t=%g:\n",t);
+    printf("dG/dp1: %11.4e\n", Ith(yQS[0], 1));
+    printf("dG/dp1: %11.4e\n", Ith(yQS[1], 1));
+    printf("dG/dp1: %11.4e\n", Ith(yQS[2], 1));
+  }
+
+  /* Print final statistics */
+  PrintFinalStats(ida_mem, sensi);
+
+  /* Free memory */
+  N_VDestroy_Serial(y);
+  if (sensi) {
+    N_VDestroyVectorArray_Serial(yS, NS);
+  }
+  free(data);
+  IDAFree(&ida_mem);
+  N_VDestroy_Serial(yQ);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDAS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Residual routine. Compute F(t,y,y',p). 
+ */
+static int res(realtype t, N_Vector yy, N_Vector yp, N_Vector resval, void *user_data)
+{
+  UserData data;
+  realtype p1, p2, p3;
+  realtype y1, y2, y3;
+  realtype yp1, yp2;
+
+  data = (UserData) user_data;
+  p1 = data->p[0];
+  p2 = data->p[1];
+  p3 = data->p[2];
+
+  y1 = Ith(yy,1);
+  y2 = Ith(yy,2);
+  y3 = Ith(yy,3);
+
+  yp1 = Ith(yp,1);
+  yp2 = Ith(yp,2);
+
+  Ith(resval,1) = yp1 + p1*y1 - p2*y2*y3;
+  Ith(resval,2) = yp2 - p1*y1 + p2*y2*y3 + p3*y2*y2;
+  Ith(resval,3) = y1 + y2 + y3 - ONE;
+
+  return(0);
+}
+
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+*/
+
+static int Jac(realtype t, realtype cj,
+               N_Vector yy, N_Vector yp, N_Vector resvec, 
+               SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int *colptrs;
+  int *rowvals;
+  realtype* data;
+  UserData userdata;
+  realtype p1, p2, p3;
+ 
+  yval = N_VGetArrayPointer_Serial(yy);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data = JacMat->data;
+  userdata = (UserData) user_data;
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = p1+cj;                        rowvals[0] = 0;
+  data[1] = -p1;                          rowvals[1] = 1;
+  data[2] = ONE;                          rowvals[2] = 2;
+
+  data[3] = -p2*yval[2];                  rowvals[3] = 0;
+  data[4] = p2*yval[2]+2*p3*yval[1]+cj;   rowvals[4] = 1;
+  data[5] = ONE;                          rowvals[5] = 2;
+
+  data[6] = -p2*yval[1];                  rowvals[6] = 0;
+  data[7] = p2*yval[1];                   rowvals[7] = 1;
+  data[8] = ONE;                          rowvals[8] = 2;
+
+  return(0);
+}
+ 
+/* 
+ * resS routine. Compute sensitivity r.h.s. 
+ */
+
+static int resS(int Ns, realtype t, 
+                N_Vector yy, N_Vector yp, N_Vector resval,
+                N_Vector *yyS, N_Vector *ypS, N_Vector *resvalS,
+                void *user_data, 
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  UserData data;
+  realtype p1, p2, p3;
+  realtype y1, y2, y3;
+  realtype s1, s2, s3;
+  realtype sd1, sd2;
+  realtype rs1, rs2, rs3;
+  int is;
+
+  data = (UserData) user_data;
+  p1 = data->p[0];
+  p2 = data->p[1];
+  p3 = data->p[2];
+
+  y1 = Ith(yy,1);
+  y2 = Ith(yy,2);
+  y3 = Ith(yy,3);
+
+  for (is=0; is<NS; is++) {
+
+    s1 = Ith(yyS[is],1);
+    s2 = Ith(yyS[is],2);
+    s3 = Ith(yyS[is],3);
+
+    sd1 = Ith(ypS[is],1);
+    sd2 = Ith(ypS[is],2);
+
+    rs1 = sd1 + p1*s1 - p2*y3*s2 - p2*y2*s3;
+    rs2 = sd2 - p1*s1 + p2*y3*s2 + p2*y2*s3 + 2*p3*y2*s2;
+    rs3 = s1 + s2 + s3;
+
+    switch (is) {
+    case 0:
+      rs1 += y1;
+      rs2 -= y1;
+      break;
+    case 1:
+      rs1 -= y2*y3;
+      rs2 += y2*y3;
+      break;
+    case 2:
+      rs2 += y2*y2;
+      break;
+    }
+  
+    Ith(resvalS[is],1) = rs1;
+    Ith(resvalS[is],2) = rs2;
+    Ith(resvalS[is],3) = rs3;
+
+  }
+
+  return(0);
+}
+
+static int rhsQ(realtype t, N_Vector y, N_Vector yp, 
+              N_Vector ypQ, void* user_data)
+{
+  UserData data;
+
+  data = (UserData) user_data;
+
+  Ith(ypQ,1) = Ith(y,3);
+  
+  Ith(ypQ,2) = data->coef*( Ith(y,1)*Ith(y,1)+ 
+                            Ith(y,2)*Ith(y,2)+ 
+                            Ith(y,3)*Ith(y,3) );
+                    
+  return(0);
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Process and verify arguments to idasfwddenx.
+ */
+
+static void ProcessArgs(int argc, char *argv[], 
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = IDA_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = IDA_STAGGERED;
+    else 
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(argv[0]);
+  }
+
+}
+
+static void WrongArgs(char *name)
+{
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim or stg\n");
+    printf("         err_con    = t or f\n");
+    
+    exit(0);
+}
+
+
+static void PrintIC(N_Vector y, N_Vector yp)
+{
+  realtype* data;
+
+  data = N_VGetArrayPointer_Serial(y);
+  printf("\n\nConsistent IC:\n");
+  printf("\ty = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", data[0], data[1], data[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#endif
+
+  data = N_VGetArrayPointer_Serial(yp);
+  printf("\typ= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", data[0], data[1], data[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#endif
+
+}
+static void PrintSensIC(N_Vector y, N_Vector yp, N_Vector* yS, N_Vector* ypS)
+{
+  realtype *sdata;
+
+  sdata = N_VGetArrayPointer_Serial(yS[0]);
+  printf("                  Sensitivity 1  ");
+
+  printf("\n\ts1 = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  sdata = N_VGetArrayPointer_Serial(ypS[0]);
+  printf("\ts1'= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+
+  printf("                  Sensitivity 2  ");
+  sdata = N_VGetArrayPointer_Serial(yS[1]);
+  printf("\n\ts2 = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  sdata = N_VGetArrayPointer_Serial(ypS[1]);
+  printf("\ts2'= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+
+  printf("                  Sensitivity 3  ");
+  sdata = N_VGetArrayPointer_Serial(yS[2]);
+  printf("\n\ts3 = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  sdata = N_VGetArrayPointer_Serial(ypS[2]);
+  printf("\ts3'= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+
+}
+
+/*
+ * Print current t, step count, order, stepsize, and solution.
+ */
+
+static void PrintOutput(void *ida_mem, realtype t, N_Vector u)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = IDAGetNumSteps(ida_mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetLastOrder(ida_mem, &qu);
+  check_flag(&flag, "IDAGetLastOrder", 1);
+  flag = IDAGetLastStep(ida_mem, &hu);
+  check_flag(&flag, "IDAGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%8.3Le %2d  %8.3Le %5ld\n", t, qu, hu, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#else
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#endif
+
+  printf("                  Solution       ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", udata[0], udata[1], udata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#endif
+
+}
+
+/* 
+ * Print sensitivities.
+*/
+
+static void PrintSensOutput(N_Vector *uS)
+{
+  realtype *sdata;
+
+  sdata = N_VGetArrayPointer_Serial(uS[0]);
+  printf("                  Sensitivity 1  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  
+  sdata = N_VGetArrayPointer_Serial(uS[1]);
+  printf("                  Sensitivity 2  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+  sdata = N_VGetArrayPointer_Serial(uS[2]);
+  printf("                  Sensitivity 3  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+}
+
+/* 
+ * Print some final statistics from the IDAS memory.
+ */
+
+static void PrintFinalStats(void *ida_mem, booleantype sensi)
+{
+  long int nst;
+  long int nfe, nsetups, nni, ncfn, netf;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  int flag;
+
+  flag = IDAGetNumSteps(ida_mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetNumResEvals(ida_mem, &nfe);
+  check_flag(&flag, "IDAGetNumRhsEvals", 1);
+  flag = IDAGetNumLinSolvSetups(ida_mem, &nsetups);
+  check_flag(&flag, "IDAGetNumLinSolvSetups", 1);
+  flag = IDAGetNumErrTestFails(ida_mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1);
+  flag = IDAGetNumNonlinSolvIters(ida_mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1);
+  flag = IDAGetNumNonlinSolvConvFails(ida_mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1);
+
+  if (sensi) {
+    flag = IDAGetSensNumResEvals(ida_mem, &nfSe);
+    check_flag(&flag, "IDAGetSensNumRhsEvals", 1);
+    flag = IDAGetNumResEvalsSens(ida_mem, &nfeS);
+    check_flag(&flag, "IDAGetNumResEvalsSens", 1);
+    flag = IDAGetSensNumLinSolvSetups(ida_mem, &nsetupsS);
+    check_flag(&flag, "IDAGetSensNumLinSolvSetups", 1);
+    flag = IDAGetSensNumErrTestFails(ida_mem, &netfS);
+    check_flag(&flag, "IDAGetSensNumErrTestFails", 1);
+    flag = IDAGetSensNumNonlinSolvIters(ida_mem, &nniS);
+    check_flag(&flag, "IDAGetSensNumNonlinSolvIters", 1);
+    flag = IDAGetSensNumNonlinSolvConvFails(ida_mem, &ncfnS);
+    check_flag(&flag, "IDAGetSensNumNonlinSolvConvFails", 1);
+  }
+
+  printf("\nFinal Statistics\n\n");
+  printf("nst     = %5ld\n\n", nst);
+  printf("nfe     = %5ld\n",   nfe);
+  printf("netf    = %5ld    nsetups  = %5ld\n", netf, nsetups);
+  printf("nni     = %5ld    ncfn     = %5ld\n", nni, ncfn);
+
+  if(sensi) {
+    printf("\n");
+    printf("nfSe    = %5ld    nfeS     = %5ld\n", nfSe, nfeS);
+    printf("netfs   = %5ld    nsetupsS = %5ld\n", netfS, nsetupsS);
+    printf("nniS    = %5ld    ncfnS    = %5ld\n", nniS, ncfnS);
+  }
+
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasRoberts_FSA_klu.out b/examples/idas/serial/idasRoberts_FSA_klu.out
new file mode 100644
index 0000000..0201d41
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_FSA_klu.out
@@ -0,0 +1,113 @@
+
+3-species chemical kinetics problem
+Sensitivity: YES ( STAGGERED + FULL ERROR CONTROL )
+
+Consistent IC:
+	y =   1.0000e+00   0.0000e+00  -8.1102e-17 
+	yp=  -4.0000e-02   4.0000e-02   0.0000e+00 
+                  Sensitivity 1  
+	s1 =   0.0000e+00   0.0000e+00   0.0000e+00 
+	s1'=  -1.0000e+00   1.0000e+00   0.0000e+00 
+                  Sensitivity 2  
+	s2 =   0.0000e+00   0.0000e+00   0.0000e+00 
+	s2'=   0.0000e+00   0.0000e+00   0.0000e+00 
+                  Sensitivity 3  
+	s3 =   0.0000e+00   0.0000e+00   0.0000e+00 
+	s3'=   0.0000e+00   0.0000e+00   0.0000e+00 
+
+
+=======================================================================
+     T     Q       H      NST           y1           y2           y3    
+=======================================================================
+4.000e-01  5  7.149e-02   212
+                  Solution         9.8517e-01   3.3864e-05   1.4794e-02 
+                  Sensitivity 1   -3.5595e-01   3.9025e-04   3.5556e-01 
+                  Sensitivity 2    9.5424e-08  -2.1310e-10  -9.5210e-08 
+                  Sensitivity 3   -1.5832e-11  -5.2900e-13   1.6361e-11 
+-----------------------------------------------------------------------
+4.000e+00  5  1.430e-01   247
+                  Solution         9.0552e-01   2.2405e-05   9.4459e-02 
+                  Sensitivity 1   -1.8761e+00   1.7922e-04   1.8759e+00 
+                  Sensitivity 2    2.9614e-06  -5.8305e-10  -2.9608e-06 
+                  Sensitivity 3   -4.9334e-10  -2.7626e-13   4.9362e-10 
+-----------------------------------------------------------------------
+4.000e+01  2  1.991e-01   380
+                  Solution         7.1583e-01   9.1855e-06   2.8416e-01 
+                  Sensitivity 1   -4.2476e+00   4.5912e-05   4.2475e+00 
+                  Sensitivity 2    1.3731e-05  -2.3572e-10  -1.3731e-05 
+                  Sensitivity 3   -2.2884e-09  -1.1381e-13   2.2885e-09 
+-----------------------------------------------------------------------
+4.000e+02  5  6.240e+00   523
+                  Solution         4.5052e-01   3.2229e-06   5.4948e-01 
+                  Sensitivity 1   -5.9584e+00   3.5427e-06   5.9584e+00 
+                  Sensitivity 2    2.2738e-05  -2.2601e-11  -2.2738e-05 
+                  Sensitivity 3   -3.7897e-09  -4.9948e-14   3.7897e-09 
+-----------------------------------------------------------------------
+4.000e+03  4  6.558e+01   685
+                  Solution         1.8320e-01   8.9424e-07   8.1680e-01 
+                  Sensitivity 1   -4.7501e+00  -5.9937e-06   4.7501e+00 
+                  Sensitivity 2    1.8809e-05   2.3127e-11  -1.8809e-05 
+                  Sensitivity 3   -3.1348e-09  -1.8758e-14   3.1348e-09 
+-----------------------------------------------------------------------
+4.000e+04  5  7.922e+02   871
+                  Solution         3.8983e-02   1.6218e-07   9.6102e-01 
+                  Sensitivity 1   -1.5750e+00  -2.7620e-06   1.5750e+00 
+                  Sensitivity 2    6.2875e-06   1.1002e-11  -6.2875e-06 
+                  Sensitivity 3   -1.0479e-09  -4.5367e-15   1.0479e-09 
+-----------------------------------------------------------------------
+4.000e+05  4  8.317e+03  1010
+                  Solution         4.9383e-03   1.9850e-08   9.9506e-01 
+                  Sensitivity 1   -2.3633e-01  -4.5841e-07   2.3633e-01 
+                  Sensitivity 2    9.4503e-07   1.8325e-12  -9.4503e-07 
+                  Sensitivity 3   -1.5751e-10  -6.3625e-16   1.5751e-10 
+-----------------------------------------------------------------------
+4.000e+06  5  1.198e+05  1104
+                  Solution         5.1681e-04   2.0683e-09   9.9948e-01 
+                  Sensitivity 1   -2.5666e-02  -5.1061e-08   2.5666e-02 
+                  Sensitivity 2    1.0266e-07   2.0423e-13  -1.0266e-07 
+                  Sensitivity 3   -1.7110e-11  -6.8510e-17   1.7110e-11 
+-----------------------------------------------------------------------
+4.000e+07  5  1.916e+06  1159
+                  Solution         5.2033e-05   2.0814e-10   9.9995e-01 
+                  Sensitivity 1   -2.5993e-03  -5.1946e-09   2.5993e-03 
+                  Sensitivity 2    1.0397e-08   2.0778e-14  -1.0397e-08 
+                  Sensitivity 3   -1.7328e-12  -6.9321e-18   1.7328e-12 
+-----------------------------------------------------------------------
+4.000e+08  4  2.483e+07  1205
+                  Solution         5.2074e-06   2.0830e-11   9.9999e-01 
+                  Sensitivity 1   -2.6034e-04  -5.2063e-10   2.6034e-04 
+                  Sensitivity 2    1.0414e-09   2.0825e-15  -1.0414e-09 
+                  Sensitivity 3   -1.7356e-13  -6.9425e-19   1.7356e-13 
+-----------------------------------------------------------------------
+4.000e+09  2  2.649e+08  1239
+                  Solution         5.2055e-07   2.0822e-12   1.0000e+00 
+                  Sensitivity 1   -2.6027e-05  -5.2052e-11   2.6027e-05 
+                  Sensitivity 2    1.0411e-10   2.0821e-16  -1.0411e-10 
+                  Sensitivity 3   -1.7351e-14  -6.9405e-20   1.7351e-14 
+-----------------------------------------------------------------------
+4.000e+10  4  4.851e+09  1262
+                  Solution         5.1638e-08   2.0655e-13   1.0000e+00 
+                  Sensitivity 1   -2.5811e-06  -5.1604e-12   2.5811e-06 
+                  Sensitivity 2    1.0324e-11   2.0642e-17  -1.0324e-11 
+                  Sensitivity 3   -1.7214e-15  -6.8856e-21   1.7214e-15 
+-----------------------------------------------------------------------
+
+Quadrature:
+G:      4.0000e+10
+
+Sensitivities at t=4e+10:
+dG/dp1:  1.4874e+06
+dG/dp1: -5.9450e+00
+dG/dp1:  9.9085e-04
+
+Final Statistics
+
+nst     =  1262
+
+nfe     =  1492
+netf    =     2    nsetups  =    90
+nni     =  1489    ncfn     =     0
+
+nfSe    =  1587    nfeS     =     0
+netfs   =     0    nsetupsS =     1
+nniS    =  1585    ncfnS    =     0
diff --git a/examples/idas/serial/idasRoberts_FSA_sps.c b/examples/idas/serial/idasRoberts_FSA_sps.c
new file mode 100644
index 0000000..edeafbf
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_FSA_sps.c
@@ -0,0 +1,831 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date: $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on idasRoberts_FSA_dns.c and modified to use SuperLUMT
+ * -----------------------------------------------------------------
+ * Example problem:
+ *
+ * This simple example problem for IDA, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt = -p1*y1 + p2*y2*y3
+ *      dy2/dt = p1*y1 - p2*y2*y3 - p3*y2**2
+ *         0   = y1 + y2 + y3 - 1
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.The reaction rates are: p1=0.04,
+ * p2=1e4, and p3=3e7
+ *
+ * Optionally, IDAS can compute sensitivities with respect to the
+ * problem parameters p1, p2, and p3.
+ * The sensitivity right hand side is given analytically through the
+ * user routine fS (of type SensRhs1Fn).
+ * Any of two sensitivity methods (SIMULTANEOUS and STAGGERED can be
+ * used and sensitivities may be included in the error test or not 
+ *(error control set on TRUE or FALSE, respectively).
+ *
+ * Execution:
+ *
+ * If no sensitivities are desired:
+ *    % idasRoberts_FSA_sps -nosensi
+ * If sensitivities are to be computed:
+ *    % idasRoberts_FSA_sps -sensi sensi_meth err_con
+ * where sensi_meth is one of {sim, stg} and err_con is one of
+ * {t, f}.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Header files with a description of contents used */
+
+#include <idas/idas.h>                 /* prototypes for IDAS fcts. and consts. */
+#include <idas/idas_superlumt.h>       /* prototypes for IDASuperLUMT fcts. and consts. */
+#include <sundials/sundials_sparse.h>  /* defs. of SlsMat */
+#include <nvector/nvector_serial.h>    /* defs. of serial NVECTOR fcts. and macros  */
+#include <sundials/sundials_types.h>   /* def. of type realtype */
+#include <sundials/sundials_math.h>    /* definition of ABS */
+
+/* Accessor macros */
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i=1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ   3             /* number of equations  */
+#define T0    RCONST(0.0)   /* initial time */
+#define T1    RCONST(0.4)   /* first output time */
+#define TMULT RCONST(10.0)  /* output time factor */
+#define NOUT  12            /* number of output times */
+
+#define NP    3             /* number of problem parameters */
+#define NS    3             /* number of sensitivities computed */
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+
+/* Type : UserData */
+
+typedef struct {
+  realtype p[3];           /* problem parameters */
+  realtype coef;
+} *UserData;
+
+/* Prototypes of functions by IDAS */
+
+static int res(realtype t, N_Vector y, N_Vector yp, N_Vector resval, void *user_data);
+
+static int Jac(realtype t, realtype cj, 
+               N_Vector yy, N_Vector yp, N_Vector resvec, 
+               SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int resS(int Ns, realtype t, 
+                N_Vector y, N_Vector yp, N_Vector resval,
+                N_Vector *yyS, N_Vector *ypS, N_Vector *resvalS,
+                void *user_data, 
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int rhsQ(realtype tres, N_Vector yy, N_Vector yp,
+                 N_Vector rrQ, void *user_data);
+
+/* Prototypes of private functions */
+
+static void ProcessArgs(int argc, char *argv[],
+                        booleantype *sensi, int *sensi_meth, 
+                        booleantype *err_con);
+static void WrongArgs(char *name);
+
+static void PrintIC(N_Vector y, N_Vector yp);
+static void PrintSensIC(N_Vector y, N_Vector yp, N_Vector* yS, N_Vector* ypS); 
+
+static void PrintOutput(void *ida_mem, realtype t, N_Vector u);
+static void PrintSensOutput(N_Vector *uS);
+
+static void PrintFinalStats(void *ida_mem, booleantype sensi);
+
+static int check_flag(void *flagvalue, char *funcname, int opt);
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  void *ida_mem;
+  UserData data;
+  realtype reltol, t, tout;
+  N_Vector y, yp, abstol, id;
+  int iout, flag, nthreads, nnz;
+
+  realtype pbar[NS];
+  int is; 
+  N_Vector *yS, *ypS;
+  booleantype sensi, err_con;
+  int sensi_meth;
+
+  N_Vector yQ, *yQS;
+
+  ida_mem = NULL;
+  data    = NULL;
+  y       =  NULL;
+  yS      = NULL;
+  ypS     = NULL;
+
+  /* Process arguments */
+  ProcessArgs(argc, argv, &sensi, &sensi_meth, &err_con);
+
+  /* User data structure */
+  data = (UserData) malloc(sizeof *data);
+  if (check_flag((void *)data, "malloc", 2)) return(1);
+  data->p[0] = RCONST(0.040);
+  data->p[1] = RCONST(1.0e4);
+  data->p[2] = RCONST(3.0e7);
+  data->coef = 0.5;
+
+  /* Initial conditions */
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  Ith(y,1) = ONE;
+  Ith(y,2) = ZERO;
+  Ith(y,3) = ZERO;
+
+  yp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+
+  /* These initial conditions are NOT consistent. See IDACalcIC below. */
+  Ith(yp,1) = RCONST(0.1);
+  Ith(yp,2) = ZERO;
+  Ith(yp,3) = ZERO;  
+
+  /* Create IDAS object */
+  ida_mem = IDACreate();
+  if (check_flag((void *)ida_mem, "IDACreate", 0)) return(1);
+
+  /* Allocate space for IDAS */
+  flag = IDAInit(ida_mem, res, T0, y, yp);
+  if (check_flag(&flag, "IDAInit", 1)) return(1);
+
+  /* Specify scalar relative tol. and vector absolute tol. */
+  reltol = RCONST(1.0e-6);
+  abstol = N_VNew_Serial(NEQ);
+  Ith(abstol,1) = RCONST(1.0e-8);
+  Ith(abstol,2) = RCONST(1.0e-14);
+  Ith(abstol,3) = RCONST(1.0e-6);
+  flag = IDASVtolerances(ida_mem, reltol, abstol);
+  if (check_flag(&flag, "IDASVtolerances", 1)) return(1);
+
+  /* Set ID vector */
+  id = N_VNew_Serial(NEQ);
+  Ith(id,1) = 1.0;
+  Ith(id,2) = 1.0;
+  Ith(id,3) = 0.0;
+  flag = IDASetId(ida_mem, id);
+  if (check_flag(&flag, "IDASetId", 1)) return(1);
+
+  /* Attach user data */
+  flag = IDASetUserData(ida_mem, data);
+  if (check_flag(&flag, "IDASetUserData", 1)) return(1);
+
+  /* Attach linear solver */
+  nthreads = 1;
+  nnz = NEQ * NEQ;
+  flag = IDASuperLUMT(ida_mem, nthreads, NEQ, nnz);
+  if (check_flag(&flag, "IDASuperLUMT", 1)) return(1);
+
+  flag = IDASlsSetSparseJacFn(ida_mem, Jac);
+  if (check_flag(&flag, "IDASlsSetSparseJacFn", 1)) return(1);
+
+  printf("\n3-species chemical kinetics problem\n");
+
+  /* Sensitivity-related settings */
+  if (sensi) {
+
+    pbar[0] = data->p[0];
+    pbar[1] = data->p[1];
+    pbar[2] = data->p[2];
+
+    yS = N_VCloneVectorArray_Serial(NS, y);
+    if (check_flag((void *)yS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for (is=0;is<NS;is++) N_VConst(ZERO, yS[is]);
+    
+    ypS = N_VCloneVectorArray_Serial(NS, y);
+    if (check_flag((void *)ypS, "N_VCloneVectorArray_Serial", 0)) return(1);
+    for (is=0;is<NS;is++) N_VConst(ZERO, ypS[is]);
+
+    /* 
+    * Only non-zero sensitivity I.C. are ypS[0]: 
+    * - Ith(ypS[0],1) = -ONE;
+    * - Ith(ypS[0],2) =  ONE;
+    *
+    * They are not set. IDACalcIC also computes consistent IC for sensitivities.
+    */
+    
+    flag = IDASensInit(ida_mem, NS, sensi_meth, resS, yS, ypS);
+    if(check_flag(&flag, "IDASensInit", 1)) return(1);
+
+    flag = IDASensEEtolerances(ida_mem);
+    if(check_flag(&flag, "IDASensEEtolerances", 1)) return(1);
+
+    flag = IDASetSensErrCon(ida_mem, err_con);
+    if (check_flag(&flag, "IDASetSensErrCon", 1)) return(1);
+
+    flag = IDASetSensParams(ida_mem, data->p, pbar, NULL);
+    if (check_flag(&flag, "IDASetSensParams", 1)) return(1);
+
+    printf("Sensitivity: YES ");
+    if(sensi_meth == IDA_SIMULTANEOUS)   
+      printf("( SIMULTANEOUS +");
+    else 
+      printf("( STAGGERED +");   
+    if(err_con) printf(" FULL ERROR CONTROL )");
+    else        printf(" PARTIAL ERROR CONTROL )");
+
+  } else {
+
+    printf("Sensitivity: NO ");
+
+  }
+
+  /*----------------------------------------------------------
+   *               Q U A D R A T U R E S
+   * ---------------------------------------------------------*/
+  yQ = N_VNew_Serial(2);
+
+  Ith(yQ,1) = 0;
+  Ith(yQ,2) = 0;
+
+  IDAQuadInit(ida_mem, rhsQ, yQ);
+
+  yQS = N_VCloneVectorArray_Serial(NS, yQ);
+  for (is=0;is<NS;is++) N_VConst(ZERO, yQS[is]);  
+
+  IDAQuadSensInit(ida_mem, NULL, yQS);
+
+  /* Call IDACalcIC to compute consistent initial conditions. If sensitivity is
+     enabled, this function also try to find consistent IC for the sensitivities. */
+
+  flag = IDACalcIC(ida_mem, IDA_YA_YDP_INIT, T1);;
+  if (check_flag(&flag, "IDACalcIC", 1)) return(1);
+
+  flag = IDAGetConsistentIC(ida_mem, y, yp);
+  if (check_flag(&flag, "IDAGetConsistentIC", 1)) return(1);
+
+  PrintIC(y, yp);
+
+  if(sensi) {
+      IDAGetSensConsistentIC(ida_mem, yS, ypS);
+      PrintSensIC(y, yp, yS, ypS); 
+    }
+      
+  /* In loop over output points, call IDA, print results, test for error */
+  
+  printf("\n\n");
+  printf("===========================================");
+  printf("============================\n");
+  printf("     T     Q       H      NST           y1");
+  printf("           y2           y3    \n");
+  printf("===========================================");
+  printf("============================\n");
+
+  for (iout=1, tout=T1; iout <= NOUT; iout++, tout *= TMULT) {
+    
+    flag = IDASolve(ida_mem, tout, &t, y, yp, IDA_NORMAL);
+    if (check_flag(&flag, "IDASolve", 1)) break;
+
+    PrintOutput(ida_mem, t, y);
+    
+    if (sensi) {
+      flag = IDAGetSens(ida_mem, &t, yS);
+      if (check_flag(&flag, "IDAGetSens", 1)) break;
+      PrintSensOutput(yS);
+    } 
+    printf("-----------------------------------------");
+    printf("------------------------------\n");
+
+  }
+
+  printf("\nQuadrature:\n");
+  IDAGetQuad(ida_mem, &t, yQ);
+  printf("G:      %10.4e\n", Ith(yQ,1)); 
+
+  if(sensi) {
+    IDAGetQuadSens(ida_mem, &t, yQS);
+    printf("\nSensitivities at t=%g:\n",t);
+    printf("dG/dp1: %11.4e\n", Ith(yQS[0], 1));
+    printf("dG/dp1: %11.4e\n", Ith(yQS[1], 1));
+    printf("dG/dp1: %11.4e\n", Ith(yQS[2], 1));
+  }
+
+  /* Print final statistics */
+  PrintFinalStats(ida_mem, sensi);
+
+  /* Free memory */
+  N_VDestroy_Serial(y);
+  if (sensi) {
+    N_VDestroyVectorArray_Serial(yS, NS);
+  }
+  free(data);
+  IDAFree(&ida_mem);
+  N_VDestroy_Serial(yQ);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY IDAS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Residual routine. Compute F(t,y,y',p). 
+ */
+static int res(realtype t, N_Vector yy, N_Vector yp, N_Vector resval, void *user_data)
+{
+  UserData data;
+  realtype p1, p2, p3;
+  realtype y1, y2, y3;
+  realtype yp1, yp2;
+
+  data = (UserData) user_data;
+  p1 = data->p[0];
+  p2 = data->p[1];
+  p3 = data->p[2];
+
+  y1 = Ith(yy,1);
+  y2 = Ith(yy,2);
+  y3 = Ith(yy,3);
+
+  yp1 = Ith(yp,1);
+  yp2 = Ith(yp,2);
+
+  Ith(resval,1) = yp1 + p1*y1 - p2*y2*y3;
+  Ith(resval,2) = yp2 - p1*y1 + p2*y2*y3 + p3*y2*y2;
+  Ith(resval,3) = y1 + y2 + y3 - ONE;
+
+  return(0);
+}
+
+
+/* 
+ * Jacobian routine. Compute J(t,y). 
+*/
+
+static int Jac(realtype t, realtype cj,
+               N_Vector yy, N_Vector yp, N_Vector resvec, 
+               SlsMat JacMat, void *user_data, 
+               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype *yval;
+  int *colptrs;
+  int *rowvals;
+  realtype* data;
+  UserData userdata;
+  realtype p1, p2, p3;
+ 
+  yval = N_VGetArrayPointer_Serial(yy);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data = JacMat->data;
+  userdata = (UserData) user_data;
+  p1 = userdata->p[0]; p2 = userdata->p[1]; p3 = userdata->p[2];
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = p1+cj;                        rowvals[0] = 0;
+  data[1] = -p1;                          rowvals[1] = 1;
+  data[2] = ONE;                          rowvals[2] = 2;
+
+  data[3] = -p2*yval[2];                  rowvals[3] = 0;
+  data[4] = p2*yval[2]+2*p3*yval[1]+cj;   rowvals[4] = 1;
+  data[5] = ONE;                          rowvals[5] = 2;
+
+  data[6] = -p2*yval[1];                  rowvals[6] = 0;
+  data[7] = p2*yval[1];                   rowvals[7] = 1;
+  data[8] = ONE;                          rowvals[8] = 2;
+
+  return(0);
+}
+ 
+/* 
+ * resS routine. Compute sensitivity r.h.s. 
+ */
+
+static int resS(int Ns, realtype t, 
+                N_Vector yy, N_Vector yp, N_Vector resval,
+                N_Vector *yyS, N_Vector *ypS, N_Vector *resvalS,
+                void *user_data, 
+                N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  UserData data;
+  realtype p1, p2, p3;
+  realtype y1, y2, y3;
+  realtype s1, s2, s3;
+  realtype sd1, sd2;
+  realtype rs1, rs2, rs3;
+  int is;
+
+  data = (UserData) user_data;
+  p1 = data->p[0];
+  p2 = data->p[1];
+  p3 = data->p[2];
+
+  y1 = Ith(yy,1);
+  y2 = Ith(yy,2);
+  y3 = Ith(yy,3);
+
+  for (is=0; is<NS; is++) {
+
+    s1 = Ith(yyS[is],1);
+    s2 = Ith(yyS[is],2);
+    s3 = Ith(yyS[is],3);
+
+    sd1 = Ith(ypS[is],1);
+    sd2 = Ith(ypS[is],2);
+
+    rs1 = sd1 + p1*s1 - p2*y3*s2 - p2*y2*s3;
+    rs2 = sd2 - p1*s1 + p2*y3*s2 + p2*y2*s3 + 2*p3*y2*s2;
+    rs3 = s1 + s2 + s3;
+
+    switch (is) {
+    case 0:
+      rs1 += y1;
+      rs2 -= y1;
+      break;
+    case 1:
+      rs1 -= y2*y3;
+      rs2 += y2*y3;
+      break;
+    case 2:
+      rs2 += y2*y2;
+      break;
+    }
+  
+    Ith(resvalS[is],1) = rs1;
+    Ith(resvalS[is],2) = rs2;
+    Ith(resvalS[is],3) = rs3;
+
+  }
+
+  return(0);
+}
+
+static int rhsQ(realtype t, N_Vector y, N_Vector yp, 
+              N_Vector ypQ, void* user_data)
+{
+  UserData data;
+
+  data = (UserData) user_data;
+
+  Ith(ypQ,1) = Ith(y,3);
+  
+  Ith(ypQ,2) = data->coef*( Ith(y,1)*Ith(y,1)+ 
+                            Ith(y,2)*Ith(y,2)+ 
+                            Ith(y,3)*Ith(y,3) );
+                    
+  return(0);
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Process and verify arguments to idasfwddenx.
+ */
+
+static void ProcessArgs(int argc, char *argv[], 
+                        booleantype *sensi, int *sensi_meth, booleantype *err_con)
+{
+  *sensi = FALSE;
+  *sensi_meth = -1;
+  *err_con = FALSE;
+
+  if (argc < 2) WrongArgs(argv[0]);
+
+  if (strcmp(argv[1],"-nosensi") == 0)
+    *sensi = FALSE;
+  else if (strcmp(argv[1],"-sensi") == 0)
+    *sensi = TRUE;
+  else
+    WrongArgs(argv[0]);
+  
+  if (*sensi) {
+
+    if (argc != 4)
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[2],"sim") == 0)
+      *sensi_meth = IDA_SIMULTANEOUS;
+    else if (strcmp(argv[2],"stg") == 0)
+      *sensi_meth = IDA_STAGGERED;
+    else 
+      WrongArgs(argv[0]);
+
+    if (strcmp(argv[3],"t") == 0)
+      *err_con = TRUE;
+    else if (strcmp(argv[3],"f") == 0)
+      *err_con = FALSE;
+    else
+      WrongArgs(argv[0]);
+  }
+
+}
+
+static void WrongArgs(char *name)
+{
+    printf("\nUsage: %s [-nosensi] [-sensi sensi_meth err_con]\n",name);
+    printf("         sensi_meth = sim or stg\n");
+    printf("         err_con    = t or f\n");
+    
+    exit(0);
+}
+
+
+static void PrintIC(N_Vector y, N_Vector yp)
+{
+  realtype* data;
+
+  data = N_VGetArrayPointer_Serial(y);
+  printf("\n\nConsistent IC:\n");
+  printf("\ty = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", data[0], data[1], data[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#endif
+
+  data = N_VGetArrayPointer_Serial(yp);
+  printf("\typ= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", data[0], data[1], data[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", data[0], data[1], data[2]);
+#endif
+
+}
+static void PrintSensIC(N_Vector y, N_Vector yp, N_Vector* yS, N_Vector* ypS)
+{
+  realtype *sdata;
+
+  sdata = N_VGetArrayPointer_Serial(yS[0]);
+  printf("                  Sensitivity 1  ");
+
+  printf("\n\ts1 = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  sdata = N_VGetArrayPointer_Serial(ypS[0]);
+  printf("\ts1'= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+
+  printf("                  Sensitivity 2  ");
+  sdata = N_VGetArrayPointer_Serial(yS[1]);
+  printf("\n\ts2 = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  sdata = N_VGetArrayPointer_Serial(ypS[1]);
+  printf("\ts2'= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+
+  printf("                  Sensitivity 3  ");
+  sdata = N_VGetArrayPointer_Serial(yS[2]);
+  printf("\n\ts3 = ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  sdata = N_VGetArrayPointer_Serial(ypS[2]);
+  printf("\ts3'= ");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+
+}
+
+/*
+ * Print current t, step count, order, stepsize, and solution.
+ */
+
+static void PrintOutput(void *ida_mem, realtype t, N_Vector u)
+{
+  long int nst;
+  int qu, flag;
+  realtype hu, *udata;
+  
+  udata = N_VGetArrayPointer_Serial(u);
+
+  flag = IDAGetNumSteps(ida_mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetLastOrder(ida_mem, &qu);
+  check_flag(&flag, "IDAGetLastOrder", 1);
+  flag = IDAGetLastStep(ida_mem, &hu);
+  check_flag(&flag, "IDAGetLastStep", 1);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%8.3Le %2d  %8.3Le %5ld\n", t, qu, hu, nst);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#else
+  printf("%8.3e %2d  %8.3e %5ld\n", t, qu, hu, nst);
+#endif
+
+  printf("                  Solution       ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", udata[0], udata[1], udata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", udata[0], udata[1], udata[2]);
+#endif
+
+}
+
+/* 
+ * Print sensitivities.
+*/
+
+static void PrintSensOutput(N_Vector *uS)
+{
+  realtype *sdata;
+
+  sdata = N_VGetArrayPointer_Serial(uS[0]);
+  printf("                  Sensitivity 1  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+  
+  sdata = N_VGetArrayPointer_Serial(uS[1]);
+  printf("                  Sensitivity 2  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+
+  sdata = N_VGetArrayPointer_Serial(uS[2]);
+  printf("                  Sensitivity 3  ");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%12.4Le %12.4Le %12.4Le \n", sdata[0], sdata[1], sdata[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#else
+  printf("%12.4e %12.4e %12.4e \n", sdata[0], sdata[1], sdata[2]);
+#endif
+}
+
+/* 
+ * Print some final statistics from the IDAS memory.
+ */
+
+static void PrintFinalStats(void *ida_mem, booleantype sensi)
+{
+  long int nst;
+  long int nfe, nsetups, nni, ncfn, netf;
+  long int nfSe, nfeS, nsetupsS, nniS, ncfnS, netfS;
+  int flag;
+
+  flag = IDAGetNumSteps(ida_mem, &nst);
+  check_flag(&flag, "IDAGetNumSteps", 1);
+  flag = IDAGetNumResEvals(ida_mem, &nfe);
+  check_flag(&flag, "IDAGetNumRhsEvals", 1);
+  flag = IDAGetNumLinSolvSetups(ida_mem, &nsetups);
+  check_flag(&flag, "IDAGetNumLinSolvSetups", 1);
+  flag = IDAGetNumErrTestFails(ida_mem, &netf);
+  check_flag(&flag, "IDAGetNumErrTestFails", 1);
+  flag = IDAGetNumNonlinSolvIters(ida_mem, &nni);
+  check_flag(&flag, "IDAGetNumNonlinSolvIters", 1);
+  flag = IDAGetNumNonlinSolvConvFails(ida_mem, &ncfn);
+  check_flag(&flag, "IDAGetNumNonlinSolvConvFails", 1);
+
+  if (sensi) {
+    flag = IDAGetSensNumResEvals(ida_mem, &nfSe);
+    check_flag(&flag, "IDAGetSensNumRhsEvals", 1);
+    flag = IDAGetNumResEvalsSens(ida_mem, &nfeS);
+    check_flag(&flag, "IDAGetNumResEvalsSens", 1);
+    flag = IDAGetSensNumLinSolvSetups(ida_mem, &nsetupsS);
+    check_flag(&flag, "IDAGetSensNumLinSolvSetups", 1);
+    flag = IDAGetSensNumErrTestFails(ida_mem, &netfS);
+    check_flag(&flag, "IDAGetSensNumErrTestFails", 1);
+    flag = IDAGetSensNumNonlinSolvIters(ida_mem, &nniS);
+    check_flag(&flag, "IDAGetSensNumNonlinSolvIters", 1);
+    flag = IDAGetSensNumNonlinSolvConvFails(ida_mem, &ncfnS);
+    check_flag(&flag, "IDAGetSensNumNonlinSolvConvFails", 1);
+  }
+
+  printf("\nFinal Statistics\n\n");
+  printf("nst     = %5ld\n\n", nst);
+  printf("nfe     = %5ld\n",   nfe);
+  printf("netf    = %5ld    nsetups  = %5ld\n", netf, nsetups);
+  printf("nni     = %5ld    ncfn     = %5ld\n", nni, ncfn);
+
+  if(sensi) {
+    printf("\n");
+    printf("nfSe    = %5ld    nfeS     = %5ld\n", nfSe, nfeS);
+    printf("netfs   = %5ld    nsetupsS = %5ld\n", netfS, nsetupsS);
+    printf("nniS    = %5ld    ncfnS    = %5ld\n", nniS, ncfnS);
+  }
+
+}
+
+/* 
+ * Check function return value.
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasRoberts_FSA_sps.out b/examples/idas/serial/idasRoberts_FSA_sps.out
new file mode 100644
index 0000000..8f842a9
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_FSA_sps.out
@@ -0,0 +1,113 @@
+
+3-species chemical kinetics problem
+Sensitivity: YES ( STAGGERED + FULL ERROR CONTROL )
+
+Consistent IC:
+	y =   1.0000e+00   0.0000e+00  -8.1102e-17 
+	yp=  -4.0000e-02   4.0000e-02   0.0000e+00 
+                  Sensitivity 1  
+	s1 =   0.0000e+00   0.0000e+00   0.0000e+00 
+	s1'=  -1.0000e+00   1.0000e+00   0.0000e+00 
+                  Sensitivity 2  
+	s2 =   0.0000e+00   0.0000e+00   0.0000e+00 
+	s2'=   0.0000e+00   0.0000e+00   0.0000e+00 
+                  Sensitivity 3  
+	s3 =   0.0000e+00   0.0000e+00   0.0000e+00 
+	s3'=   0.0000e+00   0.0000e+00   0.0000e+00 
+
+
+=======================================================================
+     T     Q       H      NST           y1           y2           y3    
+=======================================================================
+4.000e-01  5  7.149e-02   212
+                  Solution         9.8517e-01   3.3864e-05   1.4794e-02 
+                  Sensitivity 1   -3.5595e-01   3.9025e-04   3.5556e-01 
+                  Sensitivity 2    9.5424e-08  -2.1310e-10  -9.5210e-08 
+                  Sensitivity 3   -1.5832e-11  -5.2900e-13   1.6361e-11 
+-----------------------------------------------------------------------
+4.000e+00  5  1.430e-01   247
+                  Solution         9.0552e-01   2.2405e-05   9.4459e-02 
+                  Sensitivity 1   -1.8761e+00   1.7922e-04   1.8759e+00 
+                  Sensitivity 2    2.9614e-06  -5.8305e-10  -2.9608e-06 
+                  Sensitivity 3   -4.9334e-10  -2.7626e-13   4.9362e-10 
+-----------------------------------------------------------------------
+4.000e+01  2  1.991e-01   380
+                  Solution         7.1583e-01   9.1855e-06   2.8416e-01 
+                  Sensitivity 1   -4.2476e+00   4.5912e-05   4.2475e+00 
+                  Sensitivity 2    1.3731e-05  -2.3572e-10  -1.3731e-05 
+                  Sensitivity 3   -2.2884e-09  -1.1381e-13   2.2885e-09 
+-----------------------------------------------------------------------
+4.000e+02  5  6.239e+00   523
+                  Solution         4.5052e-01   3.2229e-06   5.4948e-01 
+                  Sensitivity 1   -5.9584e+00   3.5427e-06   5.9584e+00 
+                  Sensitivity 2    2.2738e-05  -2.2601e-11  -2.2738e-05 
+                  Sensitivity 3   -3.7897e-09  -4.9948e-14   3.7897e-09 
+-----------------------------------------------------------------------
+4.000e+03  4  1.019e+02   681
+                  Solution         1.8320e-01   8.9424e-07   8.1680e-01 
+                  Sensitivity 1   -4.7501e+00  -5.9937e-06   4.7501e+00 
+                  Sensitivity 2    1.8809e-05   2.3127e-11  -1.8809e-05 
+                  Sensitivity 3   -3.1348e-09  -1.8758e-14   3.1348e-09 
+-----------------------------------------------------------------------
+4.000e+04  4  5.747e+02   866
+                  Solution         3.8983e-02   1.6218e-07   9.6102e-01 
+                  Sensitivity 1   -1.5750e+00  -2.7620e-06   1.5750e+00 
+                  Sensitivity 2    6.2875e-06   1.1002e-11  -6.2875e-06 
+                  Sensitivity 3   -1.0479e-09  -4.5367e-15   1.0479e-09 
+-----------------------------------------------------------------------
+4.000e+05  4  8.382e+03  1004
+                  Solution         4.9383e-03   1.9850e-08   9.9506e-01 
+                  Sensitivity 1   -2.3633e-01  -4.5841e-07   2.3633e-01 
+                  Sensitivity 2    9.4503e-07   1.8325e-12  -9.4503e-07 
+                  Sensitivity 3   -1.5750e-10  -6.3625e-16   1.5751e-10 
+-----------------------------------------------------------------------
+4.000e+06  5  1.086e+05  1083
+                  Solution         5.1681e-04   2.0683e-09   9.9948e-01 
+                  Sensitivity 1   -2.5666e-02  -5.1061e-08   2.5666e-02 
+                  Sensitivity 2    1.0266e-07   2.0423e-13  -1.0266e-07 
+                  Sensitivity 3   -1.7110e-11  -6.8510e-17   1.7110e-11 
+-----------------------------------------------------------------------
+4.000e+07  5  1.738e+06  1142
+                  Solution         5.2033e-05   2.0814e-10   9.9995e-01 
+                  Sensitivity 1   -2.5993e-03  -5.1946e-09   2.5993e-03 
+                  Sensitivity 2    1.0397e-08   2.0778e-14  -1.0397e-08 
+                  Sensitivity 3   -1.7328e-12  -6.9321e-18   1.7328e-12 
+-----------------------------------------------------------------------
+4.000e+08  4  2.253e+07  1188
+                  Solution         5.2072e-06   2.0829e-11   9.9999e-01 
+                  Sensitivity 1   -2.6033e-04  -5.2060e-10   2.6033e-04 
+                  Sensitivity 2    1.0413e-09   2.0824e-15  -1.0413e-09 
+                  Sensitivity 3   -1.7355e-13  -6.9422e-19   1.7355e-13 
+-----------------------------------------------------------------------
+4.000e+09  3  5.034e+08  1218
+                  Solution         5.2052e-07   2.0821e-12   1.0000e+00 
+                  Sensitivity 1   -2.6023e-05  -5.2042e-11   2.6023e-05 
+                  Sensitivity 2    1.0409e-10   2.0817e-16  -1.0409e-10 
+                  Sensitivity 3   -1.7350e-14  -6.9402e-20   1.7350e-14 
+-----------------------------------------------------------------------
+4.000e+10  3  4.072e+09  1240
+                  Solution         5.1691e-08   2.0677e-13   1.0000e+00 
+                  Sensitivity 1   -2.5827e-06  -5.1617e-12   2.5827e-06 
+                  Sensitivity 2    1.0331e-11   2.0647e-17  -1.0331e-11 
+                  Sensitivity 3   -1.7231e-15  -6.8924e-21   1.7231e-15 
+-----------------------------------------------------------------------
+
+Quadrature:
+G:      4.0000e+10
+
+Sensitivities at t=4e+10:
+dG/dp1:  1.4875e+06
+dG/dp1: -5.9454e+00
+dG/dp1:  9.9096e-04
+
+Final Statistics
+
+nst     =  1240
+
+nfe     =  1527
+netf    =     3    nsetups  =    90
+nni     =  1524    ncfn     =     0
+
+nfSe    =  1643    nfeS     =     0
+netfs   =     0    nsetupsS =     2
+nniS    =  1641    ncfnS    =     0
diff --git a/examples/idas/serial/idasRoberts_dns.c b/examples/idas/serial/idasRoberts_dns.c
new file mode 100644
index 0000000..2dffb09
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_dns.c
@@ -0,0 +1,402 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * This simple example problem for IDA, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *      dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+ *         0   = y1 + y2 + y3 - 1
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.
+ *
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01.
+ *
+ * The problem is solved with IDA using IDADENSE for the linear
+ * solver, with a user-supplied Jacobian. Output is printed at
+ * t = .4, 4, 40, ..., 4e10.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NEQ   3
+#define NOUT  12
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Macro to define dense matrix elements, indexed from 1. */
+
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1)
+
+/* Prototypes of functions called by IDA */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, 
+           N_Vector resval, void *user_data);
+
+static int grob(realtype t, N_Vector yy, N_Vector yp,
+                realtype *gout, void *user_data);
+
+int jacrob(long int Neq, realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec,
+           DlsMat JJ, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+/* Prototypes of private functions */
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y);
+static void PrintOutput(void *mem, realtype t, N_Vector y);
+static void PrintRootInfo(int root_f1, int root_f2);
+static void PrintFinalStats(void *mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * Main Program
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  N_Vector yy, yp, avtol;
+  realtype rtol, *yval, *ypval, *atval;
+  realtype t0, tout1, tout, tret;
+  int iout, retval, retvalr;
+  int rootsfound[2];
+
+  mem = NULL;
+  yy = yp = avtol = NULL;
+  yval = ypval = atval = NULL;
+
+  /* Allocate N-vectors. */
+  yy = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  yp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+  avtol = N_VNew_Serial(NEQ);
+  if(check_flag((void *)avtol, "N_VNew_Serial", 0)) return(1);
+
+  /* Create and initialize  y, y', and absolute tolerance vectors. */
+  yval  = N_VGetArrayPointer_Serial(yy);
+  yval[0] = ONE;
+  yval[1] = ZERO;
+  yval[2] = ZERO;
+
+  ypval = N_VGetArrayPointer_Serial(yp);
+  ypval[0]  = RCONST(-0.04);
+  ypval[1]  = RCONST(0.04);
+  ypval[2]  = ZERO;  
+
+  rtol = RCONST(1.0e-4);
+
+  atval = N_VGetArrayPointer_Serial(avtol);
+  atval[0] = RCONST(1.0e-8);
+  atval[1] = RCONST(1.0e-6);
+  atval[2] = RCONST(1.0e-6);
+
+  /* Integration limits */
+  t0 = ZERO;
+  tout1 = RCONST(0.4);
+
+  PrintHeader(rtol, avtol, yy);
+
+  /* Call IDACreate and IDAMalloc to initialize IDA memory */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+  retval = IDAInit(mem, resrob, t0, yy, yp);
+  if(check_flag(&retval, "IDAInit", 1)) return(1);
+  retval = IDASVtolerances(mem, rtol, avtol);
+  if(check_flag(&retval, "IDASVtolerances", 1)) return(1);
+
+  /* Free avtol */
+  N_VDestroy_Serial(avtol);
+
+  /* Call IDARootInit to specify the root function grob with 2 components */
+  retval = IDARootInit(mem, 2, grob);
+  if (check_flag(&retval, "IDARootInit", 1)) return(1);
+
+  /* Call IDADense and set up the linear solver. */
+  retval = IDADense(mem, NEQ);
+  if(check_flag(&retval, "IDADense", 1)) return(1);
+  retval = IDADlsSetDenseJacFn(mem, jacrob);
+  if(check_flag(&retval, "IDADlsSetDenseJacFn", 1)) return(1);
+
+  /* In loop, call IDASolve, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached. */
+
+  iout = 0; tout = tout1;
+  while(1) {
+
+    retval = IDASolve(mem, tout, &tret, yy, yp, IDA_NORMAL);
+
+    PrintOutput(mem,tret,yy);
+
+    if(check_flag(&retval, "IDASolve", 1)) return(1);
+
+    if (retval == IDA_ROOT_RETURN) {
+      retvalr = IDAGetRootInfo(mem, rootsfound);
+      check_flag(&retvalr, "IDAGetRootInfo", 1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (retval == IDA_SUCCESS) {
+      iout++;
+      tout *= RCONST(10.0);
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+
+  return(0);
+  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Functions called by IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Define the system residual function. 
+ */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
+{
+  realtype *yval, *ypval, *rval;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  ypval = N_VGetArrayPointer_Serial(yp); 
+  rval = N_VGetArrayPointer_Serial(rr);
+
+  rval[0]  = RCONST(-0.04)*yval[0] + RCONST(1.0e4)*yval[1]*yval[2];
+  rval[1]  = -rval[0] - RCONST(3.0e7)*yval[1]*yval[1] - ypval[1];
+  rval[0] -=  ypval[0];
+  rval[2]  =  yval[0] + yval[1] + yval[2] - ONE;
+
+  return(0);
+}
+
+/*
+ * Root function routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int grob(realtype t, N_Vector yy, N_Vector yp, realtype *gout,
+                void *user_data)
+{
+  realtype *yval, y1, y3;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  y1 = yval[0]; y3 = yval[2];
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Define the Jacobian function. 
+ */
+
+int jacrob(long int Neq, realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec,
+           DlsMat JJ, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  realtype *yval;
+  
+  yval = N_VGetArrayPointer_Serial(yy);
+
+  IJth(JJ,1,1) = RCONST(-0.04) - cj;
+  IJth(JJ,2,1) = RCONST(0.04);
+  IJth(JJ,3,1) = ONE;
+  IJth(JJ,1,2) = RCONST(1.0e4)*yval[2];
+  IJth(JJ,2,2) = RCONST(-1.0e4)*yval[2] - RCONST(6.0e7)*yval[1] - cj;
+  IJth(JJ,3,2) = ONE;
+  IJth(JJ,1,3) = RCONST(1.0e4)*yval[1];
+  IJth(JJ,2,3) = RCONST(-1.0e4)*yval[1];
+  IJth(JJ,3,3) = ONE;
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Private functions
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y)
+{
+  realtype *atval, *yval;
+
+  atval  = N_VGetArrayPointer_Serial(avtol);
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  printf("\nidasRoberts_dns: Robertson kinetics DAE serial example problem for IDA.\n");
+  printf("               Three equation chemical kinetics problem.\n\n");
+  printf("Linear solver: IDADENSE, with user-supplied Jacobian.\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg %Lg %Lg \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%Lg %Lg %Lg)\n",
+         yval[0], yval[1], yval[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#endif
+  printf("Constraints and id not used.\n\n");
+  printf("-----------------------------------------------------------------------\n");
+  printf("  t             y1           y2           y3");
+  printf("      | nst  k      h\n");
+  printf("-----------------------------------------------------------------------\n");
+}
+
+/*
+ * Print Output
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector y)
+{
+  realtype *yval;
+  int retval, kused;
+  long int nst;
+  realtype hused;
+
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  retval = IDAGetLastOrder(mem, &kused);
+  check_flag(&retval, "IDAGetLastOrder", 1);
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetLastStep(mem, &hused);
+  check_flag(&retval, "IDAGetLastStep", 1);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%10.4Le %12.4Le %12.4Le %12.4Le | %3ld  %1d %12.4Le\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#else
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#endif
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+  return;
+}
+
+/*
+ * Print final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  int retval;
+  long int nst, nni, nje, nre, nreLS, netf, ncfn, nge;
+
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetNumResEvals(mem, &nre);
+  check_flag(&retval, "IDAGetNumResEvals", 1);
+  retval = IDADlsGetNumJacEvals(mem, &nje);
+  check_flag(&retval, "IDADlsGetNumJacEvals", 1);
+  retval = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&retval, "IDAGetNumNonlinSolvIters", 1);
+  retval = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&retval, "IDAGetNumErrTestFails", 1);
+  retval = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&retval, "IDAGetNumNonlinSolvConvFails", 1);
+  retval = IDADlsGetNumResEvals(mem, &nreLS);
+  check_flag(&retval, "IDADlsGetNumResEvals", 1);
+  retval = IDAGetNumGEvals(mem, &nge);
+  check_flag(&retval, "IDAGetNumGEvals", 1);
+
+  printf("\nFinal Run Statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+  printf("Number of root fn. evaluations     = %ld\n", nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasRoberts_dns.out b/examples/idas/serial/idasRoberts_dns.out
new file mode 100644
index 0000000..c2e4d03
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_dns.out
@@ -0,0 +1,38 @@
+
+idasRoberts_dns: Robertson kinetics DAE serial example problem for IDA.
+               Three equation chemical kinetics problem.
+
+Linear solver: IDADENSE, with user-supplied Jacobian.
+Tolerance parameters:  rtol = 0.0001   atol = 1e-08 1e-06 1e-06 
+Initial conditions y0 = (1 0 0)
+Constraints and id not used.
+
+-----------------------------------------------------------------------
+  t             y1           y2           y3      | nst  k      h
+-----------------------------------------------------------------------
+2.6402e-01   9.8997e-01   3.4706e-05   1.0000e-02 |  27  2   4.4012e-02
+    rootsfound[] =   0   1
+4.0000e-01   9.8517e-01   3.3864e-05   1.4794e-02 |  29  3   8.8024e-02
+4.0000e+00   9.0553e-01   2.2406e-05   9.4452e-02 |  43  4   6.3377e-01
+4.0000e+01   7.1579e-01   9.1838e-06   2.8420e-01 |  68  4   3.1932e+00
+4.0000e+02   4.5044e-01   3.2218e-06   5.4956e-01 |  95  4   3.3201e+01
+4.0000e+03   1.8320e-01   8.9444e-07   8.1680e-01 | 126  3   3.1458e+02
+4.0000e+04   3.8992e-02   1.6221e-07   9.6101e-01 | 161  5   2.5058e+03
+4.0000e+05   4.9369e-03   1.9842e-08   9.9506e-01 | 202  3   2.6370e+04
+4.0000e+06   5.1674e-04   2.0684e-09   9.9948e-01 | 250  3   1.7186e+05
+2.0788e+07   1.0000e-04   4.0004e-10   9.9990e-01 | 280  5   1.0513e+06
+    rootsfound[] =  -1   0
+4.0000e+07   5.2009e-05   2.0805e-10   9.9995e-01 | 293  4   2.3655e+06
+4.0000e+08   5.2012e-06   2.0805e-11   9.9999e-01 | 325  4   2.6809e+07
+4.0000e+09   5.1850e-07   2.0740e-12   1.0000e-00 | 348  3   7.4307e+08
+4.0000e+10   4.8641e-08   1.9456e-13   1.0000e-00 | 362  2   7.5482e+09
+
+Final Run Statistics: 
+
+Number of steps                    = 362
+Number of residual evaluations     = 537
+Number of Jacobian evaluations     = 60
+Number of nonlinear iterations     = 537
+Number of error test failures      = 15
+Number of nonlinear conv. failures = 0
+Number of root fn. evaluations     = 404
diff --git a/examples/idas/serial/idasRoberts_klu.c b/examples/idas/serial/idasRoberts_klu.c
new file mode 100644
index 0000000..be8d65d
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_klu.c
@@ -0,0 +1,427 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL  (based on idasRoberts_dns.c)
+ * -----------------------------------------------------------------
+ * This simple example problem for IDA, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *      dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+ *         0   = y1 + y2 + y3 - 1
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.
+ *
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01.
+ *
+ * The problem is solved with IDA using IDAKLU for the linear
+ * solver, with a user-supplied Jacobian. Output is printed at
+ * t = .4, 4, 40, ..., 4e10.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_klu.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NEQ   3
+#define NOUT  12
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Prototypes of functions called by IDA */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, 
+           N_Vector resval, void *user_data);
+
+static int grob(realtype t, N_Vector yy, N_Vector yp,
+                realtype *gout, void *user_data);
+
+int jacrob(realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec, 
+	   SlsMat JacMat, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+/* Prototypes of private functions */
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y);
+static void PrintOutput(void *mem, realtype t, N_Vector y);
+static void PrintRootInfo(int root_f1, int root_f2);
+static void PrintFinalStats(void *mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * Main Program
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  N_Vector yy, yp, avtol;
+  realtype rtol, *yval, *ypval, *atval;
+  realtype t0, tout1, tout, tret;
+  int iout, retval, retvalr;
+  int rootsfound[2];
+
+  int nnz;
+
+  mem = NULL;
+  yy = yp = avtol = NULL;
+  yval = ypval = atval = NULL;
+
+  /* Allocate N-vectors. */
+  yy = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  yp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+  avtol = N_VNew_Serial(NEQ);
+  if(check_flag((void *)avtol, "N_VNew_Serial", 0)) return(1);
+
+  /* Create and initialize  y, y', and absolute tolerance vectors. */
+  yval  = N_VGetArrayPointer_Serial(yy);
+  yval[0] = ONE;
+  yval[1] = ZERO;
+  yval[2] = ZERO;
+
+  ypval = N_VGetArrayPointer_Serial(yp);
+  ypval[0]  = RCONST(-0.04);
+  ypval[1]  = RCONST(0.04);
+  ypval[2]  = ZERO;  
+
+  rtol = RCONST(1.0e-4);
+
+  atval = N_VGetArrayPointer_Serial(avtol);
+  atval[0] = RCONST(1.0e-8);
+  atval[1] = RCONST(1.0e-6);
+  atval[2] = RCONST(1.0e-6);
+
+  /* Integration limits */
+  t0 = ZERO;
+  tout1 = RCONST(0.4);
+
+  PrintHeader(rtol, avtol, yy);
+
+  /* Call IDACreate and IDAMalloc to initialize IDA memory */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+  retval = IDAInit(mem, resrob, t0, yy, yp);
+  if(check_flag(&retval, "IDAInit", 1)) return(1);
+  retval = IDASVtolerances(mem, rtol, avtol);
+  if(check_flag(&retval, "IDASVtolerances", 1)) return(1);
+
+  /* Free avtol */
+  N_VDestroy_Serial(avtol);
+
+  /* Call IDARootInit to specify the root function grob with 2 components */
+  retval = IDARootInit(mem, 2, grob);
+  if (check_flag(&retval, "IDARootInit", 1)) return(1);
+
+  /* Call IDAKLU and set up the linear solver. */
+  nnz = NEQ * NEQ;
+  retval = IDAKLU(mem, NEQ, nnz, CSC_MAT);
+  if(check_flag(&retval, "IDAKLU", 1)) return(1);
+  retval = IDASlsSetSparseJacFn(mem, jacrob);
+  if(check_flag(&retval, "IDASlsSetSparseJacFn", 1)) return(1);
+
+  /* In loop, call IDASolve, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached. */
+
+  iout = 0; tout = tout1;
+  while(1) {
+
+    retval = IDASolve(mem, tout, &tret, yy, yp, IDA_NORMAL);
+
+    PrintOutput(mem,tret,yy);
+
+    if(check_flag(&retval, "IDASolve", 1)) return(1);
+
+    if (retval == IDA_ROOT_RETURN) {
+      retvalr = IDAGetRootInfo(mem, rootsfound);
+      check_flag(&retvalr, "IDAGetRootInfo", 1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (retval == IDA_SUCCESS) {
+      iout++;
+      tout *= RCONST(10.0);
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+
+  return(0);
+  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Functions called by IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Define the system residual function. 
+ */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
+{
+  realtype *yval, *ypval, *rval;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  ypval = N_VGetArrayPointer_Serial(yp); 
+  rval = N_VGetArrayPointer_Serial(rr);
+
+  rval[0]  = RCONST(-0.04)*yval[0] + RCONST(1.0e4)*yval[1]*yval[2];
+  rval[1]  = -rval[0] - RCONST(3.0e7)*yval[1]*yval[1] - ypval[1];
+  rval[0] -=  ypval[0];
+  rval[2]  =  yval[0] + yval[1] + yval[2] - ONE;
+
+  return(0);
+}
+
+/*
+ * Root function routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int grob(realtype t, N_Vector yy, N_Vector yp, realtype *gout,
+                void *user_data)
+{
+  realtype *yval, y1, y3;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  y1 = yval[0]; y3 = yval[2];
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Define the Jacobian function. 
+ */
+
+int jacrob(realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec,
+	   SlsMat JacMat, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  realtype *yval;
+  int* colptrs;
+  int* rowvals;
+  realtype* data;
+  
+  yval = N_VGetArrayPointer_Serial(yy);
+  colptrs = (*JacMat->colptrs);
+  rowvals = (*JacMat->rowvals);
+  data    = JacMat->data;
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  data[0] = RCONST(-0.04) - cj;
+  rowvals[0] = 0;
+  data[1] = RCONST(0.04);
+  rowvals[1] = 1;
+  data[2] = ONE;
+  rowvals[2] = 2;
+
+  data[3] = RCONST(1.0e4)*yval[2];
+  rowvals[3] = 0;
+  data[4] = (RCONST(-1.0e4)*yval[2]) - (RCONST(6.0e7)*yval[1]) - cj;
+  rowvals[4] = 1;
+  data[5] = ONE;
+  rowvals[5] = 2;
+
+  data[6] = RCONST(1.0e4)*yval[1];
+  rowvals[6] = 0;
+  data[7] = RCONST(-1.0e4)*yval[1];
+  rowvals[7] = 1;
+  data[8] = ONE;
+  rowvals[8] = 2;
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Private functions
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y)
+{
+  realtype *atval, *yval;
+
+  atval  = N_VGetArrayPointer_Serial(avtol);
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  printf("\nidasRoberts_klu: Robertson kinetics DAE serial example problem for IDA.\n");
+  printf("               Three equation chemical kinetics problem.\n\n");
+  printf("Linear solver: IDAKLU, with user-supplied Jacobian.\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg %Lg %Lg \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%Lg %Lg %Lg)\n",
+         yval[0], yval[1], yval[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#endif
+  printf("Constraints and id not used.\n\n");
+  printf("-----------------------------------------------------------------------\n");
+  printf("  t             y1           y2           y3");
+  printf("      | nst  k      h\n");
+  printf("-----------------------------------------------------------------------\n");
+}
+
+/*
+ * Print Output
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector y)
+{
+  realtype *yval;
+  int retval, kused;
+  long int nst;
+  realtype hused;
+
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  retval = IDAGetLastOrder(mem, &kused);
+  check_flag(&retval, "IDAGetLastOrder", 1);
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetLastStep(mem, &hused);
+  check_flag(&retval, "IDAGetLastStep", 1);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%10.4Le %12.4Le %12.4Le %12.4Le | %3ld  %1d %12.4Le\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#else
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#endif
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+  return;
+}
+
+/*
+ * Print final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  int retval;
+  long int nst, nni, nje, nre, nreLS, netf, ncfn, nge;
+
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetNumResEvals(mem, &nre);
+  check_flag(&retval, "IDAGetNumResEvals", 1);
+  retval = IDASlsGetNumJacEvals(mem, &nje);
+  check_flag(&retval, "IDASlsGetNumJacEvals", 1);
+  retval = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&retval, "IDAGetNumNonlinSolvIters", 1);
+  retval = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&retval, "IDAGetNumErrTestFails", 1);
+  retval = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&retval, "IDAGetNumNonlinSolvConvFails", 1);
+  /*  
+      retval = IDASlsGetNumResEvals(mem, &nreLS);
+      check_flag(&retval, "IDASlsGetNumResEvals", 1);
+  */
+  nreLS = 0;
+  retval = IDAGetNumGEvals(mem, &nge);
+  check_flag(&retval, "IDAGetNumGEvals", 1);
+
+  printf("\nFinal Run Statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+  printf("Number of root fn. evaluations     = %ld\n", nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasRoberts_klu.out b/examples/idas/serial/idasRoberts_klu.out
new file mode 100644
index 0000000..d986b7f
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_klu.out
@@ -0,0 +1,38 @@
+
+idasRoberts_klu: Robertson kinetics DAE serial example problem for IDA.
+               Three equation chemical kinetics problem.
+
+Linear solver: IDAKLU, with user-supplied Jacobian.
+Tolerance parameters:  rtol = 0.0001   atol = 1e-08 1e-06 1e-06 
+Initial conditions y0 = (1 0 0)
+Constraints and id not used.
+
+-----------------------------------------------------------------------
+  t             y1           y2           y3      | nst  k      h
+-----------------------------------------------------------------------
+2.6402e-01   9.8997e-01   3.4706e-05   1.0000e-02 |  27  2   4.4012e-02
+    rootsfound[] =   0   1
+4.0000e-01   9.8517e-01   3.3864e-05   1.4794e-02 |  29  3   8.8024e-02
+4.0000e+00   9.0553e-01   2.2406e-05   9.4452e-02 |  43  4   6.3377e-01
+4.0000e+01   7.1579e-01   9.1838e-06   2.8420e-01 |  68  4   3.1932e+00
+4.0000e+02   4.5044e-01   3.2218e-06   5.4956e-01 |  95  4   3.3201e+01
+4.0000e+03   1.8320e-01   8.9444e-07   8.1680e-01 | 126  3   3.1458e+02
+4.0000e+04   3.8992e-02   1.6221e-07   9.6101e-01 | 161  5   2.5058e+03
+4.0000e+05   4.9369e-03   1.9842e-08   9.9506e-01 | 202  3   2.6371e+04
+4.0000e+06   5.1693e-04   2.0688e-09   9.9948e-01 | 252  5   2.5583e+05
+2.0801e+07   1.0000e-04   4.0004e-10   9.9990e-01 | 291  4   1.1781e+06
+    rootsfound[] =  -1   0
+4.0000e+07   5.2043e-05   2.0818e-10   9.9995e-01 | 303  5   2.3562e+06
+4.0000e+08   5.2113e-06   2.0845e-11   9.9999e-01 | 336  4   3.7885e+07
+4.0000e+09   5.2515e-07   2.1006e-12   1.0000e+00 | 359  3   5.4083e+08
+4.0000e+10   5.1251e-08   2.0500e-13   1.0000e+00 | 375  3   8.6532e+09
+
+Final Run Statistics: 
+
+Number of steps                    = 375
+Number of residual evaluations     = 529
+Number of Jacobian evaluations     = 54
+Number of nonlinear iterations     = 529
+Number of error test failures      = 10
+Number of nonlinear conv. failures = 0
+Number of root fn. evaluations     = 417
diff --git a/examples/idas/serial/idasRoberts_sps.c b/examples/idas/serial/idasRoberts_sps.c
new file mode 100644
index 0000000..e4c67ca
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_sps.c
@@ -0,0 +1,421 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL  (based on idasRoberts_dns.c)
+ * -----------------------------------------------------------------
+ * This simple example problem for IDA, due to Robertson, 
+ * is from chemical kinetics, and consists of the following three 
+ * equations:
+ *
+ *      dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *      dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
+ *         0   = y1 + y2 + y3 - 1
+ *
+ * on the interval from t = 0.0 to t = 4.e10, with initial
+ * conditions: y1 = 1, y2 = y3 = 0.
+ *
+ * While integrating the system, we also use the rootfinding
+ * feature to find the points at which y1 = 1e-4 or at which
+ * y3 = 0.01.
+ *
+ * The problem is solved with IDA using IDASUPERLUMT for the linear
+ * solver, with a user-supplied Jacobian. Output is printed at
+ * t = .4, 4, 40, ..., 4e10.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <math.h>
+
+#include <idas/idas.h>
+#include <idas/idas_superlumt.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NEQ   3
+#define NOUT  12
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Prototypes of functions called by IDA */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, 
+           N_Vector resval, void *user_data);
+
+static int grob(realtype t, N_Vector yy, N_Vector yp,
+                realtype *gout, void *user_data);
+
+int jacrob(realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec, 
+	   SlsMat JacMat, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+/* Prototypes of private functions */
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y);
+static void PrintOutput(void *mem, realtype t, N_Vector y);
+static void PrintRootInfo(int root_f1, int root_f2);
+static void PrintFinalStats(void *mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * Main Program
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  void *mem;
+  N_Vector yy, yp, avtol;
+  realtype rtol, *yval, *ypval, *atval;
+  realtype t0, tout1, tout, tret;
+  int iout, retval, retvalr;
+  int rootsfound[2];
+
+  int nnz;
+
+  mem = NULL;
+  yy = yp = avtol = NULL;
+  yval = ypval = atval = NULL;
+
+  /* Allocate N-vectors. */
+  yy = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yy, "N_VNew_Serial", 0)) return(1);
+  yp = N_VNew_Serial(NEQ);
+  if(check_flag((void *)yp, "N_VNew_Serial", 0)) return(1);
+  avtol = N_VNew_Serial(NEQ);
+  if(check_flag((void *)avtol, "N_VNew_Serial", 0)) return(1);
+
+  /* Create and initialize  y, y', and absolute tolerance vectors. */
+  yval  = N_VGetArrayPointer_Serial(yy);
+  yval[0] = ONE;
+  yval[1] = ZERO;
+  yval[2] = ZERO;
+
+  ypval = N_VGetArrayPointer_Serial(yp);
+  ypval[0]  = RCONST(-0.04);
+  ypval[1]  = RCONST(0.04);
+  ypval[2]  = ZERO;  
+
+  rtol = RCONST(1.0e-4);
+
+  atval = N_VGetArrayPointer_Serial(avtol);
+  atval[0] = RCONST(1.0e-8);
+  atval[1] = RCONST(1.0e-6);
+  atval[2] = RCONST(1.0e-6);
+
+  /* Integration limits */
+  t0 = ZERO;
+  tout1 = RCONST(0.4);
+
+  PrintHeader(rtol, avtol, yy);
+
+  /* Call IDACreate and IDAMalloc to initialize IDA memory */
+  mem = IDACreate();
+  if(check_flag((void *)mem, "IDACreate", 0)) return(1);
+  retval = IDAInit(mem, resrob, t0, yy, yp);
+  if(check_flag(&retval, "IDAInit", 1)) return(1);
+  retval = IDASVtolerances(mem, rtol, avtol);
+  if(check_flag(&retval, "IDASVtolerances", 1)) return(1);
+
+  /* Free avtol */
+  N_VDestroy_Serial(avtol);
+
+  /* Call IDARootInit to specify the root function grob with 2 components */
+  retval = IDARootInit(mem, 2, grob);
+  if (check_flag(&retval, "IDARootInit", 1)) return(1);
+
+  /* Call IDASuperLUMT and set up the linear solver. */
+  nnz = NEQ * NEQ;
+  retval = IDASuperLUMT(mem, 1, NEQ, nnz);
+  if(check_flag(&retval, "IDASuperLUMT", 1)) return(1);
+  retval = IDASlsSetSparseJacFn(mem, jacrob);
+  if(check_flag(&retval, "IDASlsSetSparseJacFn", 1)) return(1);
+
+  /* In loop, call IDASolve, print results, and test for error.
+     Break out of loop when NOUT preset output times have been reached. */
+
+  iout = 0; tout = tout1;
+  while(1) {
+
+    retval = IDASolve(mem, tout, &tret, yy, yp, IDA_NORMAL);
+
+    PrintOutput(mem,tret,yy);
+
+    if(check_flag(&retval, "IDASolve", 1)) return(1);
+
+    if (retval == IDA_ROOT_RETURN) {
+      retvalr = IDAGetRootInfo(mem, rootsfound);
+      check_flag(&retvalr, "IDAGetRootInfo", 1);
+      PrintRootInfo(rootsfound[0],rootsfound[1]);
+    }
+
+    if (retval == IDA_SUCCESS) {
+      iout++;
+      tout *= RCONST(10.0);
+    }
+
+    if (iout == NOUT) break;
+  }
+
+  PrintFinalStats(mem);
+
+  /* Free memory */
+
+  IDAFree(&mem);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+
+  return(0);
+  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Functions called by IDA
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Define the system residual function. 
+ */
+
+int resrob(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
+{
+  realtype *yval, *ypval, *rval;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  ypval = N_VGetArrayPointer_Serial(yp); 
+  rval = N_VGetArrayPointer_Serial(rr);
+
+  rval[0]  = RCONST(-0.04)*yval[0] + RCONST(1.0e4)*yval[1]*yval[2];
+  rval[1]  = -rval[0] - RCONST(3.0e7)*yval[1]*yval[1] - ypval[1];
+  rval[0] -=  ypval[0];
+  rval[2]  =  yval[0] + yval[1] + yval[2] - ONE;
+
+  return(0);
+}
+
+/*
+ * Root function routine. Compute functions g_i(t,y) for i = 0,1. 
+ */
+
+static int grob(realtype t, N_Vector yy, N_Vector yp, realtype *gout,
+                void *user_data)
+{
+  realtype *yval, y1, y3;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  y1 = yval[0]; y3 = yval[2];
+  gout[0] = y1 - RCONST(0.0001);
+  gout[1] = y3 - RCONST(0.01);
+
+  return(0);
+}
+
+/*
+ * Define the Jacobian function. 
+ */
+
+int jacrob(realtype tt,  realtype cj, 
+           N_Vector yy, N_Vector yp, N_Vector resvec,
+	   SlsMat JacMat, void *user_data,
+           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  realtype *yval;
+  int *colptrs = *JacMat->colptrs;
+  int *rowvals = *JacMat->rowvals;
+  
+  yval = N_VGetArrayPointer_Serial(yy);
+
+  SparseSetMatToZero(JacMat);
+
+  colptrs[0] = 0;
+  colptrs[1] = 3;
+  colptrs[2] = 6;
+  colptrs[3] = 9;
+
+  JacMat->data[0] = RCONST(-0.04) - cj;
+  rowvals[0] = 0;
+  JacMat->data[1] = RCONST(0.04);
+  rowvals[1] = 1;
+  JacMat->data[2] = ONE;
+  rowvals[2] = 2;
+
+  JacMat->data[3] = RCONST(1.0e4)*yval[2];
+  rowvals[3] = 0;
+  JacMat->data[4] = (RCONST(-1.0e4)*yval[2]) - (RCONST(6.0e7)*yval[1]) - cj;
+  rowvals[4] = 1;
+  JacMat->data[5] = ONE;
+  rowvals[5] = 2;
+
+  JacMat->data[6] = RCONST(1.0e4)*yval[1];
+  rowvals[6] = 0;
+  JacMat->data[7] = RCONST(-1.0e4)*yval[1];
+  rowvals[7] = 1;
+  JacMat->data[8] = ONE;
+  rowvals[8] = 2;
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * Private functions
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype rtol, N_Vector avtol, N_Vector y)
+{
+  realtype *atval, *yval;
+
+  atval  = N_VGetArrayPointer_Serial(avtol);
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  printf("\nidasRoberts_sps: Robertson kinetics DAE serial example problem for IDA.\n");
+  printf("               Three equation chemical kinetics problem.\n\n");
+  printf("Linear solver: IDASUPERLUMT, with user-supplied Jacobian.\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg %Lg %Lg \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%Lg %Lg %Lg)\n",
+         yval[0], yval[1], yval[2]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g %g %g \n",
+         rtol, atval[0],atval[1],atval[2]);
+  printf("Initial conditions y0 = (%g %g %g)\n",
+         yval[0], yval[1], yval[2]);
+#endif
+  printf("Constraints and id not used.\n\n");
+  printf("-----------------------------------------------------------------------\n");
+  printf("  t             y1           y2           y3");
+  printf("      | nst  k      h\n");
+  printf("-----------------------------------------------------------------------\n");
+}
+
+/*
+ * Print Output
+ */
+
+static void PrintOutput(void *mem, realtype t, N_Vector y)
+{
+  realtype *yval;
+  int retval, kused;
+  long int nst;
+  realtype hused;
+
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  retval = IDAGetLastOrder(mem, &kused);
+  check_flag(&retval, "IDAGetLastOrder", 1);
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetLastStep(mem, &hused);
+  check_flag(&retval, "IDAGetLastStep", 1);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%10.4Le %12.4Le %12.4Le %12.4Le | %3ld  %1d %12.4Le\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#else
+  printf("%10.4e %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#endif
+}
+
+static void PrintRootInfo(int root_f1, int root_f2)
+{
+  printf("    rootsfound[] = %3d %3d\n", root_f1, root_f2);
+  return;
+}
+
+/*
+ * Print final integrator statistics
+ */
+
+static void PrintFinalStats(void *mem)
+{
+  int retval;
+  long int nst, nni, nje, nre, nreLS, netf, ncfn, nge;
+
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetNumResEvals(mem, &nre);
+  check_flag(&retval, "IDAGetNumResEvals", 1);
+  retval = IDASlsGetNumJacEvals(mem, &nje);
+  check_flag(&retval, "IDASlsGetNumJacEvals", 1);
+  retval = IDAGetNumNonlinSolvIters(mem, &nni);
+  check_flag(&retval, "IDAGetNumNonlinSolvIters", 1);
+  retval = IDAGetNumErrTestFails(mem, &netf);
+  check_flag(&retval, "IDAGetNumErrTestFails", 1);
+  retval = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  check_flag(&retval, "IDAGetNumNonlinSolvConvFails", 1);
+  /*  retval = IDASlsGetNumResEvals(mem, &nreLS); */
+  /*  check_flag(&retval, "IDASlsGetNumResEvals", 1); */
+  nreLS = 0;
+  retval = IDAGetNumGEvals(mem, &nge);
+  check_flag(&retval, "IDAGetNumGEvals", 1);
+
+  printf("\nFinal Run Statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+  printf("Number of root fn. evaluations     = %ld\n", nge);
+}
+
+/*
+ * Check function return value...
+ *   opt == 0 means SUNDIALS function allocates memory so check if
+ *            returned NULL pointer
+ *   opt == 1 means SUNDIALS function returns a flag so check if
+ *            flag >= 0
+ *   opt == 2 means function allocates memory so check if returned
+ *            NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  } else if (opt == 1) {
+    /* Check if flag < 0 */
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n", 
+              funcname, *errflag);
+      return(1); 
+    }
+  } else if (opt == 2 && flagvalue == NULL) {
+    /* Check if function returned NULL pointer - no memory allocated */
+    fprintf(stderr, 
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n", 
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasRoberts_sps.out b/examples/idas/serial/idasRoberts_sps.out
new file mode 100644
index 0000000..d0739a6
--- /dev/null
+++ b/examples/idas/serial/idasRoberts_sps.out
@@ -0,0 +1,38 @@
+
+idasRoberts_sps: Robertson kinetics DAE serial example problem for IDA.
+               Three equation chemical kinetics problem.
+
+Linear solver: IDASUPERLUMT, with user-supplied Jacobian.
+Tolerance parameters:  rtol = 0.0001   atol = 1e-08 1e-06 1e-06 
+Initial conditions y0 = (1 0 0)
+Constraints and id not used.
+
+-----------------------------------------------------------------------
+  t             y1           y2           y3      | nst  k      h
+-----------------------------------------------------------------------
+2.6402e-01   9.8997e-01   3.4706e-05   1.0000e-02 |  27  2   4.4012e-02
+    rootsfound[] =   0   1
+4.0000e-01   9.8517e-01   3.3864e-05   1.4794e-02 |  29  3   8.8024e-02
+4.0000e+00   9.0553e-01   2.2406e-05   9.4452e-02 |  43  4   6.3377e-01
+4.0000e+01   7.1579e-01   9.1838e-06   2.8420e-01 |  68  4   3.1932e+00
+4.0000e+02   4.5044e-01   3.2218e-06   5.4956e-01 |  95  4   3.3201e+01
+4.0000e+03   1.8320e-01   8.9444e-07   8.1680e-01 | 126  3   3.1458e+02
+4.0000e+04   3.8992e-02   1.6221e-07   9.6101e-01 | 161  5   2.5058e+03
+4.0000e+05   4.9369e-03   1.9842e-08   9.9506e-01 | 202  3   2.6371e+04
+4.0000e+06   5.1693e-04   2.0688e-09   9.9948e-01 | 252  5   2.5583e+05
+2.0801e+07   1.0000e-04   4.0004e-10   9.9990e-01 | 291  4   1.1781e+06
+    rootsfound[] =  -1   0
+4.0000e+07   5.2043e-05   2.0818e-10   9.9995e-01 | 303  5   2.3562e+06
+4.0000e+08   5.2113e-06   2.0845e-11   9.9999e-01 | 336  4   3.7885e+07
+4.0000e+09   5.2515e-07   2.1006e-12   1.0000e+00 | 359  3   5.4083e+08
+4.0000e+10   5.1251e-08   2.0500e-13   1.0000e+00 | 375  3   8.6532e+09
+
+Final Run Statistics: 
+
+Number of steps                    = 375
+Number of residual evaluations     = 529
+Number of Jacobian evaluations     = 54
+Number of nonlinear iterations     = 529
+Number of error test failures      = 10
+Number of nonlinear conv. failures = 0
+Number of root fn. evaluations     = 417
diff --git a/examples/idas/serial/idasSlCrank_FSA_dns.c b/examples/idas/serial/idasSlCrank_FSA_dns.c
new file mode 100644
index 0000000..790b238
--- /dev/null
+++ b/examples/idas/serial/idasSlCrank_FSA_dns.c
@@ -0,0 +1,550 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer: Radu Serban and Cosmin Petra @ LLNL
+ * -----------------------------------------------------------------
+ * Simulation of a slider-crank mechanism modelled with 3 generalized
+ * coordinates: crank angle, connecting bar angle, and slider location.
+ * The mechanism moves under the action of a constant horizontal 
+ * force applied to the connecting rod and a spring-damper connecting 
+ * the crank and connecting rod.
+ *
+ * The equations of motion are formulated as a system of stabilized
+ * index-2 DAEs (Gear-Gupta-Leimkuhler formulation).
+ *
+ * IDAS also computes sensitivities with respect to the problem 
+ * parameters k (spring constant) and c (damper constant) of the 
+ * kinetic energy:
+ *   G = int_t0^tend g(t,y,p) dt, 
+ * where
+ *   g(t,y,p) = 0.5*J1*v1^2 + 0.5*J2*v3^2 + 0.5*m2*v2^2
+ *              
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+
+#include <idas/idas.h>
+#include <idas/idas_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i= 1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ   10
+#define NP     2
+
+#define TBEGIN  RCONST(0.0)
+#define TEND    RCONST(10.000)
+
+#define RTOLF   RCONST(1.0e-06)
+#define ATOLF   RCONST(1.0e-07)
+
+#define RTOLQ   RCONST(1.0e-06)
+#define ATOLQ   RCONST(1.0e-08)
+
+#define RTOLFD  RCONST(1.0e-06)
+#define ATOLFD  RCONST(1.0e-08)
+
+
+#define ZERO     RCONST(0.00)
+#define QUARTER  RCONST(0.25)
+#define HALF     RCONST(0.50)
+#define ONE      RCONST(1.00)
+#define TWO      RCONST(2.00)
+#define FOUR     RCONST(4.00)
+
+typedef struct {
+  realtype a;
+  realtype J1, J2, m1, m2;
+  realtype l0;
+  realtype params[2];
+  realtype F;
+} *UserData;
+
+static int ressc(realtype tres, N_Vector yy, N_Vector yp, 
+           N_Vector resval, void *user_data);
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data);
+
+static int rhsQS(int Ns, realtype t, N_Vector yy, N_Vector yp, 
+                 N_Vector *yyS, N_Vector *ypS, N_Vector rrQ, N_Vector *rhsvalQS,
+                 void *user_data,  N_Vector yytmp, N_Vector yptmp, N_Vector tmpQS);
+
+
+static void setIC(N_Vector yy, N_Vector yp, UserData data);
+static void force(N_Vector yy, realtype *Q, UserData data);
+
+static void PrintFinalStats(void *mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+/*
+ *--------------------------------------------------------------------
+ * Main Program
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  UserData data;
+
+  void *mem;
+  N_Vector yy, yp, id, q, *yyS, *ypS, *qS;
+  realtype tret;
+  realtype pbar[2];
+  realtype dp, G, Gm[2], Gp[2];
+  int flag, is;
+  realtype atolS[NP];
+
+  id = N_VNew_Serial(NEQ);
+  yy = N_VNew_Serial(NEQ);
+  yp = N_VNew_Serial(NEQ);
+  q = N_VNew_Serial(1);
+
+  yyS= N_VCloneVectorArray(NP,yy);
+  ypS= N_VCloneVectorArray(NP,yp);
+  qS = N_VCloneVectorArray_Serial(NP, q);
+
+  data = (UserData) malloc(sizeof *data);
+
+  data->a = 0.5;   /* half-length of crank */
+  data->J1 = 1.0;  /* crank moment of inertia */
+  data->m2 = 1.0;  /* mass of connecting rod */
+  data->m1 = 1.0;
+  data->J2 = 2.0;  /* moment of inertia of connecting rod */
+  data->params[0] = 1.0;   /* spring constant */
+  data->params[1] = 1.0;   /* damper constant */
+  data->l0 = 1.0;  /* spring free length */
+  data->F = 1.0;   /* external constant force */
+
+  N_VConst(ONE, id);
+  NV_Ith_S(id, 9) = ZERO;
+  NV_Ith_S(id, 8) = ZERO;
+  NV_Ith_S(id, 7) = ZERO;
+  NV_Ith_S(id, 6) = ZERO;
+  
+  printf("\nSlider-Crank example for IDAS:\n");
+
+  /* Consistent IC*/
+  setIC(yy, yp, data);
+
+  for (is=0;is<NP;is++) {
+    N_VConst(ZERO, yyS[is]);
+    N_VConst(ZERO, ypS[is]);
+  }
+
+  /* IDA initialization */
+  mem = IDACreate();
+  flag = IDAInit(mem, ressc, TBEGIN, yy, yp);
+  flag = IDASStolerances(mem, RTOLF, ATOLF);
+  flag = IDASetUserData(mem, data);
+  flag = IDASetId(mem, id);
+  flag = IDASetSuppressAlg(mem, TRUE);
+  flag = IDASetMaxNumSteps(mem, 20000);
+
+  /* Call IDADense and set up the linear solver. */
+  flag = IDADense(mem, NEQ);
+
+  flag = IDASensInit(mem, NP, IDA_SIMULTANEOUS, NULL, yyS, ypS);
+  pbar[0] = data->params[0];pbar[1] = data->params[1];
+  flag = IDASetSensParams(mem, data->params, pbar, NULL);
+  flag = IDASensEEtolerances(mem);
+  IDASetSensErrCon(mem, TRUE);
+  
+  N_VConst(ZERO, q);
+  flag = IDAQuadInit(mem, rhsQ, q);
+  flag = IDAQuadSStolerances(mem, RTOLQ, ATOLQ);
+  flag = IDASetQuadErrCon(mem, TRUE);
+  
+  N_VConst(ZERO, qS[0]);
+  flag = IDAQuadSensInit(mem, rhsQS, qS);
+  atolS[0] = atolS[1] = ATOLQ;
+  flag = IDAQuadSensSStolerances(mem, RTOLQ, atolS);
+  flag = IDASetQuadSensErrCon(mem, TRUE);  
+  
+
+  /* Perform forward run */
+  printf("\nForward integration ... ");
+
+  flag = IDASolve(mem, TEND, &tret, yy, yp, IDA_NORMAL);
+  if (check_flag(&flag, "IDASolve", 1)) return(1);
+
+  printf("done!\n");
+
+  PrintFinalStats(mem);
+
+  IDAGetQuad(mem, &tret, q);
+  printf("--------------------------------------------\n");
+  printf("  G = %24.16f\n", Ith(q,1));
+  printf("--------------------------------------------\n\n");
+  
+  IDAGetQuadSens(mem, &tret, qS);
+  printf("-------------F O R W A R D------------------\n");
+  printf("   dG/dp:  %12.4e %12.4e\n", Ith(qS[0],1), Ith(qS[1],1));
+  printf("--------------------------------------------\n\n");
+
+  IDAFree(&mem);
+
+
+
+  /* Finite differences for dG/dp */
+  dp = 0.00001;
+  data->params[0] = ONE;
+  data->params[1] = ONE;
+
+  mem = IDACreate();
+
+  setIC(yy, yp, data);
+  flag = IDAInit(mem, ressc, TBEGIN, yy, yp);
+  flag = IDASStolerances(mem, RTOLFD, ATOLFD);
+  flag = IDASetUserData(mem, data);
+  flag = IDASetId(mem, id);
+  flag = IDASetSuppressAlg(mem, TRUE);
+  /* Call IDADense and set up the linear solver. */
+  flag = IDADense(mem, NEQ);
+
+  N_VConst(ZERO, q);
+  IDAQuadInit(mem, rhsQ, q);
+  IDAQuadSStolerances(mem, RTOLQ, ATOLQ);
+  IDASetQuadErrCon(mem, TRUE);
+
+  IDASolve(mem, TEND, &tret, yy, yp, IDA_NORMAL);
+
+  IDAGetQuad(mem,&tret,q);
+  G = Ith(q,1);
+  /*printf("  G  =%12.6e\n", Ith(q,1));*/
+
+  /******************************
+  * BACKWARD for k
+  ******************************/
+  data->params[0] -= dp;
+  setIC(yy, yp, data);
+
+  IDAReInit(mem, TBEGIN, yy, yp);
+
+  N_VConst(ZERO, q);
+  IDAQuadReInit(mem, q);
+
+  IDASolve(mem, TEND, &tret, yy, yp, IDA_NORMAL);
+  IDAGetQuad(mem, &tret, q);
+  Gm[0] = Ith(q,1);
+  /*printf("Gm[0]=%12.6e\n", Ith(q,1));*/
+
+  /****************************
+  * FORWARD for k *
+  ****************************/
+  data->params[0] += (TWO*dp);
+  setIC(yy, yp, data);
+  IDAReInit(mem, TBEGIN, yy, yp);
+
+  N_VConst(ZERO, q);
+  IDAQuadReInit(mem, q);
+
+  IDASolve(mem, TEND, &tret, yy, yp, IDA_NORMAL);
+  IDAGetQuad(mem, &tret, q);
+  Gp[0] = Ith(q,1);
+  /*printf("Gp[0]=%12.6e\n", Ith(q,1));*/
+
+
+  /* Backward for c */
+  data->params[0] = ONE;
+  data->params[1] -= dp;
+  setIC(yy, yp, data);
+  IDAReInit(mem, TBEGIN, yy, yp);
+
+  N_VConst(ZERO, q);
+  IDAQuadReInit(mem, q);
+
+  IDASolve(mem, TEND, &tret, yy, yp, IDA_NORMAL);
+  IDAGetQuad(mem, &tret, q);
+  Gm[1] = Ith(q,1);
+
+  /* Forward for c */
+  data->params[1] += (TWO*dp);
+  setIC(yy, yp, data);
+  IDAReInit(mem, TBEGIN, yy, yp);
+
+  N_VConst(ZERO, q);
+  IDAQuadReInit(mem, q);
+
+  IDASolve(mem, TEND, &tret, yy, yp, IDA_NORMAL);
+  IDAGetQuad(mem, &tret, q);
+  Gp[1] = Ith(q,1);
+
+  IDAFree(&mem);
+
+  printf("\n\n   Checking using Finite Differences \n\n");
+
+  printf("---------------BACKWARD------------------\n");
+  printf("   dG/dp:  %12.4e %12.4e\n", (G-Gm[0])/dp, (G-Gm[1])/dp);
+  printf("-----------------------------------------\n\n");
+
+  printf("---------------FORWARD-------------------\n");
+  printf("   dG/dp:  %12.4e %12.4e\n", (Gp[0]-G)/dp, (Gp[1]-G)/dp);
+  printf("-----------------------------------------\n\n");
+
+  printf("--------------CENTERED-------------------\n");
+  printf("   dG/dp:  %12.4e %12.4e\n", (Gp[0]-Gm[0])/(TWO*dp) ,(Gp[1]-Gm[1])/(TWO*dp));
+  printf("-----------------------------------------\n\n");
+
+
+  /* Free memory */
+  free(data);
+
+  N_VDestroy(id);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+  N_VDestroy_Serial(q);
+  return(0);
+  
+}
+
+static void setIC(N_Vector yy, N_Vector yp, UserData data)
+{
+  realtype pi;
+  realtype a, J1, m2, J2;
+  realtype q, p, x;
+  realtype Q[3];
+
+  N_VConst(ZERO, yy);
+  N_VConst(ZERO, yp);
+
+  pi = FOUR*atan(ONE);
+
+  a = data->a;
+  J1 = data->J1;
+  m2 = data->m2;
+  J2 = data->J2;
+  
+  q = pi/TWO;
+  p = asin(-a);
+  x = cos(p);
+
+  NV_Ith_S(yy,0) = q;
+  NV_Ith_S(yy,1) = x;
+  NV_Ith_S(yy,2) = p;
+  
+  force(yy, Q, data);
+
+  NV_Ith_S(yp,3) = Q[0]/J1;
+  NV_Ith_S(yp,4) = Q[1]/m2;
+  NV_Ith_S(yp,5) = Q[2]/J2;
+
+}
+
+static void force(N_Vector yy, realtype *Q, UserData data)
+{
+  realtype a, k, c, l0, F;
+  realtype q, x, p;
+  realtype qd, xd, pd;  
+  realtype s1, c1, s2, c2, s21, c21;
+  realtype l2, l, ld;
+  realtype f, fl;
+
+  a = data->a;
+  k = data->params[0];
+  c = data->params[1];
+  l0 = data->l0;
+  F = data->F;
+
+  q = NV_Ith_S(yy,0);
+  x = NV_Ith_S(yy,1);
+  p = NV_Ith_S(yy,2);
+
+  qd = NV_Ith_S(yy,3);
+  xd = NV_Ith_S(yy,4);
+  pd = NV_Ith_S(yy,5);
+
+  s1 = sin(q);
+  c1 = cos(q);
+  s2 = sin(p);
+  c2 = cos(p);
+  s21 = s2*c1 - c2*s1;
+  c21 = c2*c1 + s2*s1;
+
+  l2 = x*x - x*(c2+a*c1) + (ONE + a*a)/FOUR + a*c21/TWO;
+  l = SUNRsqrt(l2);
+  ld = TWO*x*xd - xd*(c2+a*c1) + x*(s2*pd+a*s1*qd) - a*s21*(pd-qd)/TWO;
+  ld /= TWO*l;
+
+  f = k*(l-l0) + c*ld;
+  fl = f/l;
+
+  Q[0] = - fl * a * (s21/TWO + x*s1) / TWO;
+  Q[1] = fl * (c2/TWO - x + a*c1/TWO) + F;
+  Q[2] = - fl * (x*s2 - a*s21/TWO) / TWO - F*s2;
+
+}
+
+static int ressc(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
+{
+  UserData data;
+  realtype Q[3];
+  realtype a, J1, m2, J2;
+  realtype *yval, *ypval, *rval;
+  realtype q, x, p;
+  realtype qd, xd, pd;  
+  realtype lam1, lam2, mu1, mu2;
+  realtype s1, c1, s2, c2;
+
+  data = (UserData) user_data;
+
+  a  = data->a;
+  J1 = data->J1;
+  m2 = data->m2;
+  J2 = data->J2;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  ypval = N_VGetArrayPointer_Serial(yp); 
+  rval = N_VGetArrayPointer_Serial(rr);
+
+  q = yval[0];
+  x = yval[1];
+  p = yval[2];
+
+  qd = yval[3];
+  xd = yval[4];
+  pd = yval[5];
+
+  lam1 = yval[6];
+  lam2 = yval[7];
+
+  mu1 = yval[8];
+  mu2 = yval[9];
+
+  s1 = sin(q);
+  c1 = cos(q);
+  s2 = sin(p);
+  c2 = cos(p);
+
+  force(yy, Q, data);
+
+  rval[0] = ypval[0] - qd + a*s1*mu1 - a*c1*mu2;
+  rval[1] = ypval[1] - xd + mu1;
+  rval[2] = ypval[2] - pd + s2*mu1 - c2*mu2; 
+
+  rval[3] = J1*ypval[3] - Q[0] + a*s1*lam1 - a*c1*lam2;
+  rval[4] = m2*ypval[4] - Q[1] + lam1;
+  rval[5] = J2*ypval[5] - Q[2] + s2*lam1 - c2*lam2; 
+
+  rval[6] = x - c2 - a*c1;
+  rval[7] = -s2 - a*s1;
+
+  rval[8] = a*s1*qd + xd + s2*pd;
+  rval[9] = -a*c1*qd - c2*pd;
+
+  return(0);
+}
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data)
+{
+  realtype v1, v2, v3;
+  realtype m1, J1, m2, J2, a;
+  UserData data;
+  
+  data = (UserData) user_data;
+  J1 = data->J1;
+  m1 = data->m1;
+  m2 = data->m2;
+  J2 = data->J2;
+  a  = data->a;
+
+  v1 = Ith(yy,4);
+  v2 = Ith(yy,5);
+  v3 = Ith(yy,6);
+
+  Ith(qdot,1) = HALF*(J1*v1*v1 + m2*v2*v2 + J2*v3*v3);
+
+  return(0);
+}
+
+static int rhsQS(int Ns, realtype t, N_Vector yy, N_Vector yp, 
+                 N_Vector *yyS, N_Vector *ypS, N_Vector rrQ, N_Vector *rhsvalQS,
+                 void *user_data,  N_Vector yytmp, N_Vector yptmp, N_Vector tmpQS)
+{
+  realtype v1, v2, v3;
+  realtype m1, J1, m2, J2, a;
+  UserData data;
+  realtype s1, s2, s3;
+  
+  data = (UserData) user_data;
+  J1 = data->J1;
+  m1 = data->m1;
+  m2 = data->m2;
+  J2 = data->J2;
+  a  = data->a;
+
+  v1 = Ith(yy,4);
+  v2 = Ith(yy,5);
+  v3 = Ith(yy,6);
+  
+  /* Sensitivities of v. */
+  s1 = Ith(yyS[0],4);
+  s2 = Ith(yyS[0],5);
+  s3 = Ith(yyS[0],6);
+
+  Ith(rhsvalQS[0], 1) = J1*v1*s1 + m2*v2*s2 + J2*v3*s3;
+
+  s1 = Ith(yyS[1],4);
+  s2 = Ith(yyS[1],5);
+  s3 = Ith(yyS[1],6);
+
+  Ith(rhsvalQS[1], 1) = J1*v1*s1 + m2*v2*s2 + J2*v3*s3;
+
+  return(0);
+}
+
+static void PrintFinalStats(void *mem)
+{
+  int flag;
+  long int nst, nni, nje, nre, nreLS, netf, ncfn;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  flag = IDAGetNumResEvals(mem, &nre);
+  flag = IDADlsGetNumJacEvals(mem, &nje);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  flag = IDADlsGetNumResEvals(mem, &nreLS);
+
+  printf("\nFinal Run Statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+}
+
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
diff --git a/examples/idas/serial/idasSlCrank_FSA_dns.out b/examples/idas/serial/idasSlCrank_FSA_dns.out
new file mode 100644
index 0000000..103893c
--- /dev/null
+++ b/examples/idas/serial/idasSlCrank_FSA_dns.out
@@ -0,0 +1,37 @@
+
+Slider-Crank example for IDAS:
+
+Forward integration ... done!
+
+Final Run Statistics: 
+
+Number of steps                    = 234
+Number of residual evaluations     = 1194
+Number of Jacobian evaluations     = 48
+Number of nonlinear iterations     = 714
+Number of error test failures      = 0
+Number of nonlinear conv. failures = 1
+--------------------------------------------
+  G =       3.3366156512592133
+--------------------------------------------
+
+-------------F O R W A R D------------------
+   dG/dp:    3.3346e-01  -3.6375e-01
+--------------------------------------------
+
+
+
+   Checking using Finite Differences 
+
+---------------BACKWARD------------------
+   dG/dp:    3.3345e-01  -3.6375e-01
+-----------------------------------------
+
+---------------FORWARD-------------------
+   dG/dp:    3.3345e-01  -3.6375e-01
+-----------------------------------------
+
+--------------CENTERED-------------------
+   dG/dp:    3.3345e-01  -3.6375e-01
+-----------------------------------------
+
diff --git a/examples/idas/serial/idasSlCrank_dns.c b/examples/idas/serial/idasSlCrank_dns.c
new file mode 100644
index 0000000..fb1d782
--- /dev/null
+++ b/examples/idas/serial/idasSlCrank_dns.c
@@ -0,0 +1,433 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer: Radu Serban and Cosmin Petra @ LLNL
+ * -----------------------------------------------------------------
+ * Simulation of a slider-crank mechanism modelled with 3 generalized
+ * coordinates: crank angle, connecting bar angle, and slider location.
+ * The mechanism moves under the action of a constant horizontal 
+ * force applied to the connecting rod and a spring-damper connecting 
+ * the crank and connecting rod.
+ *
+ * The equations of motion are formulated as a system of stabilized
+ * index-2 DAEs (Gear-Gupta-Leimkuhler formulation).
+ *
+ * IDAS also computes the average kinetic energy as the quadrature:
+ *   G = int_t0^tend g(t,y,p) dt, 
+ * where
+ *   g(t,y,p) = 0.5*J1*v1^2 + 0.5*J2*v3^2 + 0.5*m2*v2^2
+ *              
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+
+#include <idas/idas.h>
+#include <idas/idas_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* i-th vector component i= 1..NEQ */
+
+/* Problem Constants */
+
+#define NEQ   10
+
+#define TBEGIN  RCONST(0.0)
+#define TEND    RCONST(10.0)
+
+#define NOUT  25
+
+#define RTOLF   RCONST(1.0e-06)
+#define ATOLF   RCONST(1.0e-07)
+
+#define RTOLQ   RCONST(1.0e-06)
+#define ATOLQ   RCONST(1.0e-08)
+
+#define ZERO     RCONST(0.00)
+#define QUARTER  RCONST(0.25)
+#define HALF     RCONST(0.50)
+#define ONE      RCONST(1.00)
+#define TWO      RCONST(2.00)
+#define FOUR     RCONST(4.00)
+
+typedef struct {
+  realtype a;
+  realtype J1, J2, m1, m2;
+  realtype l0;
+  realtype params[2];
+  realtype F;
+} *UserData;
+
+static int ressc(realtype tres, N_Vector yy, N_Vector yp, 
+           N_Vector resval, void *user_data);
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data);
+
+static void setIC(N_Vector yy, N_Vector yp, UserData data);
+static void force(N_Vector yy, realtype *Q, UserData data);
+
+static void PrintHeader(realtype rtol, realtype avtol, N_Vector y);
+static void PrintOutput(void *mem, realtype t, N_Vector y);
+static void PrintFinalStats(void *mem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+/*
+ *--------------------------------------------------------------------
+ * Main Program
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  UserData data;
+
+  void *mem;
+  N_Vector yy, yp, id, q;
+  realtype tret, tout;
+  int flag;
+
+  id = N_VNew_Serial(NEQ);
+  yy = N_VNew_Serial(NEQ);
+  yp = N_VNew_Serial(NEQ);
+  q = N_VNew_Serial(1);
+
+  data = (UserData) malloc(sizeof *data);
+
+  data->a = 0.5;   /* half-length of crank */
+  data->J1 = 1.0;  /* crank moment of inertia */
+  data->m2 = 1.0;  /* mass of connecting rod */
+  data->m1 = 1.0;
+  data->J2 = 2.0;  /* moment of inertia of connecting rod */
+  data->params[0] = 1.0;   /* spring constant */
+  data->params[1] = 1.0;   /* damper constant */
+  data->l0 = 1.0;  /* spring free length */
+  data->F = 1.0;   /* external constant force */
+
+  N_VConst(ONE, id);
+  NV_Ith_S(id, 9) = ZERO;
+  NV_Ith_S(id, 8) = ZERO;
+  NV_Ith_S(id, 7) = ZERO;
+  NV_Ith_S(id, 6) = ZERO;
+  
+  /* Consistent IC*/
+  setIC(yy, yp, data);
+
+  /* IDAS initialization */
+  mem = IDACreate();
+  flag = IDAInit(mem, ressc, TBEGIN, yy, yp);
+  flag = IDASStolerances(mem, RTOLF, ATOLF);
+  flag = IDASetUserData(mem, data);
+  flag = IDASetId(mem, id);
+  flag = IDASetSuppressAlg(mem, TRUE);
+  flag = IDASetMaxNumSteps(mem, 20000);
+
+  /* Call IDADense and set up the linear solver. */
+  flag = IDADense(mem, NEQ);
+
+  N_VConst(ZERO, q);
+  flag = IDAQuadInit(mem, rhsQ, q);
+  flag = IDAQuadSStolerances(mem, RTOLQ, ATOLQ);
+  flag = IDASetQuadErrCon(mem, TRUE);
+
+  PrintHeader(RTOLF, ATOLF, yy);
+
+  /* Print initial states */
+  PrintOutput(mem,0.0,yy);
+
+  /* Perform forward run */
+  tout = TEND/NOUT;
+
+  while (1) {
+
+    flag = IDASolve(mem, tout, &tret, yy, yp, IDA_NORMAL);
+    if (check_flag(&flag, "IDASolve", 1)) return(1);
+
+    PrintOutput(mem,tret,yy);
+
+    tout += TEND/NOUT;
+    
+    if (tret > TEND) break;
+  }
+  
+  PrintFinalStats(mem);
+
+  IDAGetQuad(mem, &tret, q);
+  printf("--------------------------------------------\n");
+  printf("  G = %24.16f\n", Ith(q,1));
+  printf("--------------------------------------------\n\n");
+  
+  IDAFree(&mem);
+
+  /* Free memory */
+
+  free(data);
+  N_VDestroy(id);
+  N_VDestroy_Serial(yy);
+  N_VDestroy_Serial(yp);
+  N_VDestroy_Serial(q);
+
+  return(0);  
+}
+
+static void setIC(N_Vector yy, N_Vector yp, UserData data)
+{
+  realtype pi;
+  realtype a, J1, m2, J2;
+  realtype q, p, x;
+  realtype Q[3];
+
+  N_VConst(ZERO, yy);
+  N_VConst(ZERO, yp);
+
+  pi = FOUR*atan(ONE);
+
+  a = data->a;
+  J1 = data->J1;
+  m2 = data->m2;
+  J2 = data->J2;
+  
+  q = pi/TWO;
+  p = asin(-a);
+  x = cos(p);
+
+  NV_Ith_S(yy,0) = q;
+  NV_Ith_S(yy,1) = x;
+  NV_Ith_S(yy,2) = p;
+  
+  force(yy, Q, data);
+
+  NV_Ith_S(yp,3) = Q[0]/J1;
+  NV_Ith_S(yp,4) = Q[1]/m2;
+  NV_Ith_S(yp,5) = Q[2]/J2;
+
+}
+
+static void force(N_Vector yy, realtype *Q, UserData data)
+{
+  realtype a, k, c, l0, F;
+  realtype q, x, p;
+  realtype qd, xd, pd;  
+  realtype s1, c1, s2, c2, s21, c21;
+  realtype l2, l, ld;
+  realtype f, fl;
+
+  a = data->a;
+  k = data->params[0];
+  c = data->params[1];
+  l0 = data->l0;
+  F = data->F;
+
+  q = NV_Ith_S(yy,0);
+  x = NV_Ith_S(yy,1);
+  p = NV_Ith_S(yy,2);
+
+  qd = NV_Ith_S(yy,3);
+  xd = NV_Ith_S(yy,4);
+  pd = NV_Ith_S(yy,5);
+
+  s1 = sin(q);
+  c1 = cos(q);
+  s2 = sin(p);
+  c2 = cos(p);
+  s21 = s2*c1 - c2*s1;
+  c21 = c2*c1 + s2*s1;
+
+  l2 = x*x - x*(c2+a*c1) + (ONE + a*a)/FOUR + a*c21/TWO;
+  l = SUNRsqrt(l2);
+  ld = TWO*x*xd - xd*(c2+a*c1) + x*(s2*pd+a*s1*qd) - a*s21*(pd-qd)/TWO;
+  ld /= TWO*l;
+
+  f = k*(l-l0) + c*ld;
+  fl = f/l;
+
+  Q[0] = - fl * a * (s21/TWO + x*s1) / TWO;
+  Q[1] = fl * (c2/TWO - x + a*c1/TWO) + F;
+  Q[2] = - fl * (x*s2 - a*s21/TWO) / TWO - F*s2;
+
+}
+
+static int ressc(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
+{
+  UserData data;
+  realtype Q[3];
+  realtype a, J1, m2, J2;
+  realtype *yval, *ypval, *rval;
+  realtype q, x, p;
+  realtype qd, xd, pd;  
+  realtype lam1, lam2, mu1, mu2;
+  realtype s1, c1, s2, c2;
+
+  data = (UserData) user_data;
+
+  a  = data->a;
+  J1 = data->J1;
+  m2 = data->m2;
+  J2 = data->J2;
+
+  yval = N_VGetArrayPointer_Serial(yy); 
+  ypval = N_VGetArrayPointer_Serial(yp); 
+  rval = N_VGetArrayPointer_Serial(rr);
+
+  q = yval[0];
+  x = yval[1];
+  p = yval[2];
+
+  qd = yval[3];
+  xd = yval[4];
+  pd = yval[5];
+
+  lam1 = yval[6];
+  lam2 = yval[7];
+
+  mu1 = yval[8];
+  mu2 = yval[9];
+
+  s1 = sin(q);
+  c1 = cos(q);
+  s2 = sin(p);
+  c2 = cos(p);
+
+  force(yy, Q, data);
+
+  rval[0] = ypval[0] - qd + a*s1*mu1 - a*c1*mu2;
+  rval[1] = ypval[1] - xd + mu1;
+  rval[2] = ypval[2] - pd + s2*mu1 - c2*mu2; 
+
+  rval[3] = J1*ypval[3] - Q[0] + a*s1*lam1 - a*c1*lam2;
+  rval[4] = m2*ypval[4] - Q[1] + lam1;
+  rval[5] = J2*ypval[5] - Q[2] + s2*lam1 - c2*lam2; 
+
+  rval[6] = x - c2 - a*c1;
+  rval[7] = -s2 - a*s1;
+
+  rval[8] = a*s1*qd + xd + s2*pd;
+  rval[9] = -a*c1*qd - c2*pd;
+
+  return(0);
+}
+
+static int rhsQ(realtype t, N_Vector yy, N_Vector yp, N_Vector qdot, void *user_data)
+{
+  realtype v1, v2, v3;
+  realtype m1, J1, m2, J2, a;
+  UserData data;
+  
+  data = (UserData) user_data;
+  J1 = data->J1;
+  m1 = data->m1;
+  m2 = data->m2;
+  J2 = data->J2;
+  a  = data->a;
+
+  v1 = Ith(yy,4); 
+  v2 = Ith(yy,5); 
+  v3 = Ith(yy,6);
+
+  Ith(qdot,1) = HALF*(J1*v1*v1 + m2*v2*v2 + J2*v3*v3);
+
+  return(0);
+}
+
+static void PrintHeader(realtype rtol, realtype avtol, N_Vector y)
+{
+  printf("\nidasSlCrank_dns: Slider-Crank DAE serial example problem for IDAS\n");
+  printf("Linear solver: IDADENSE, Jacobian is computed by IDAS.\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("Tolerance parameters:  rtol = %Lg   atol = %Lg\n",
+         rtol, avtol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n",
+         rtol, avtol);
+#else
+  printf("Tolerance parameters:  rtol = %g   atol = %g\n",
+         rtol, avtol);
+#endif
+  printf("-----------------------------------------------------------------------\n");
+  printf("  t         y1          y2           y3");
+  printf("      | nst  k      h\n");
+  printf("-----------------------------------------------------------------------\n");
+}
+
+
+static void PrintOutput(void *mem, realtype t, N_Vector y)
+{
+  realtype *yval;
+  int retval, kused;
+  long int nst;
+  realtype hused;
+
+  yval  = N_VGetArrayPointer_Serial(y);
+
+  retval = IDAGetLastOrder(mem, &kused);
+  check_flag(&retval, "IDAGetLastOrder", 1);
+  retval = IDAGetNumSteps(mem, &nst);
+  check_flag(&retval, "IDAGetNumSteps", 1);
+  retval = IDAGetLastStep(mem, &hused);
+  check_flag(&retval, "IDAGetLastStep", 1);
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("%5.2Lf %12.4Le %12.4Le %12.4Le | %3ld  %1d %12.4Le\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("%5.2f %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#else
+  printf("%5.2f %12.4e %12.4e %12.4e | %3ld  %1d %12.4e\n", 
+         t, yval[0], yval[1], yval[2], nst, kused, hused);
+#endif
+}
+
+
+static void PrintFinalStats(void *mem)
+{
+  int flag;
+  long int nst, nni, nje, nre, nreLS, netf, ncfn;
+
+  flag = IDAGetNumSteps(mem, &nst);
+  flag = IDAGetNumResEvals(mem, &nre);
+  flag = IDADlsGetNumJacEvals(mem, &nje);
+  flag = IDAGetNumNonlinSolvIters(mem, &nni);
+  flag = IDAGetNumErrTestFails(mem, &netf);
+  flag = IDAGetNumNonlinSolvConvFails(mem, &ncfn);
+  flag = IDADlsGetNumResEvals(mem, &nreLS);
+
+  printf("\nFinal Run Statistics: \n\n");
+  printf("Number of steps                    = %ld\n", nst);
+  printf("Number of residual evaluations     = %ld\n", nre+nreLS);
+  printf("Number of Jacobian evaluations     = %ld\n", nje);
+  printf("Number of nonlinear iterations     = %ld\n", nni);
+  printf("Number of error test failures      = %ld\n", netf);
+  printf("Number of nonlinear conv. failures = %ld\n", ncfn);
+}
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); }}
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1); }
+
+  return(0);
+}
+
+
diff --git a/examples/idas/serial/idasSlCrank_dns.out b/examples/idas/serial/idasSlCrank_dns.out
new file mode 100644
index 0000000..0bfcbf2
--- /dev/null
+++ b/examples/idas/serial/idasSlCrank_dns.out
@@ -0,0 +1,46 @@
+
+idasSlCrank_dns: Slider-Crank DAE serial example problem for IDAS
+Linear solver: IDADENSE, Jacobian is computed by IDAS.
+Tolerance parameters:  rtol = 1e-06   atol = 1e-07
+-----------------------------------------------------------------------
+  t         y1          y2           y3      | nst  k      h
+-----------------------------------------------------------------------
+ 0.00   1.5708e+00   8.6603e-01  -5.2360e-01 |   0  0   0.0000e+00
+ 0.40   1.5299e+00   8.8672e-01  -5.2312e-01 |  40  5   4.6748e-02
+ 0.80   1.4072e+00   9.5128e-01  -5.1591e-01 |  48  5   4.6748e-02
+ 1.20   1.2039e+00   1.0638e+00  -4.8559e-01 |  57  5   3.7866e-02
+ 1.60   9.2524e-01   1.2176e+00  -4.1084e-01 |  68  4   3.4080e-02
+ 2.00   5.7904e-01   1.3803e+00  -2.7714e-01 |  78  5   6.8159e-02
+ 2.40   1.7783e-01   1.4882e+00  -8.8565e-02 |  86  5   4.3666e-02
+ 2.80  -2.4460e-01   1.4778e+00   1.2138e-01 |  96  5   3.9299e-02
+ 3.20  -6.3618e-01   1.3570e+00   3.0161e-01 | 107  5   3.1832e-02
+ 3.60  -9.6169e-01   1.1981e+00   4.2254e-01 | 121  5   2.8649e-02
+ 4.00  -1.2064e+00   1.0623e+00   4.8609e-01 | 128  5   5.7298e-02
+ 4.40  -1.3632e+00   9.7518e-01   5.1125e-01 | 136  5   4.6412e-02
+ 4.80  -1.4300e+00   9.3903e-01   5.1789e-01 | 146  5   4.1770e-02
+ 5.20  -1.4081e+00   9.5081e-01   5.1599e-01 | 155  5   4.1770e-02
+ 5.60  -1.2995e+00   1.0103e+00   5.0261e-01 | 164  5   8.3541e-02
+ 6.00  -1.1080e+00   1.1176e+00   4.6386e-01 | 169  5   7.5187e-02
+ 6.40  -8.4049e-01   1.2616e+00   3.8168e-01 | 175  5   7.5187e-02
+ 6.80  -5.0621e-01   1.4075e+00   2.4487e-01 | 180  5   6.0901e-02
+ 7.20  -1.2091e-01   1.4945e+00   6.0346e-02 | 188  5   4.4397e-02
+ 7.60   2.7894e-01   1.4712e+00  -1.3811e-01 | 198  5   3.5962e-02
+ 8.00   6.4422e-01   1.3536e+00  -3.0500e-01 | 211  5   2.8980e-02
+ 8.40   9.4289e-01   1.2082e+00  -4.1657e-01 | 220  5   5.2163e-02
+ 8.80   1.1604e+00   1.0882e+00  -4.7630e-01 | 227  5   5.2163e-02
+ 9.20   1.2895e+00   1.0159e+00  -5.0105e-01 | 235  5   5.2163e-02
+ 9.60   1.3276e+00   9.9477e-01  -5.0669e-01 | 243  5   4.6947e-02
+10.00   1.2757e+00   1.0236e+00  -4.9881e-01 | 251  5   4.6947e-02
+
+Final Run Statistics: 
+
+Number of steps                    = 251
+Number of residual evaluations     = 1066
+Number of Jacobian evaluations     = 39
+Number of nonlinear iterations     = 676
+Number of error test failures      = 1
+Number of nonlinear conv. failures = 0
+--------------------------------------------
+  G =       3.3366160663212514
+--------------------------------------------
+
diff --git a/examples/kinsol/C_openmp/CMakeLists.txt b/examples/kinsol/C_openmp/CMakeLists.txt
new file mode 100644
index 0000000..06c937f
--- /dev/null
+++ b/examples/kinsol/C_openmp/CMakeLists.txt
@@ -0,0 +1,128 @@
+# ---------------------------------------------------------------
+# Programmer: Ting Yan @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt file for KINSOL OpenMP examples
+
+# Only include tests if OpenMP is enabled
+IF(OPENMP_FOUND)
+
+# Add variable KINSOL_examples_OMP with the names of the openmp KINSOL examples
+SET(KINSOL_examples_OMP
+  kinFoodWeb_kry_omp
+  )
+
+ENDIF(OPENMP_FOUND)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(KINSOL_LIB sundials_kinsol_static)
+  SET(NVECOMP_LIB sundials_nvecopenmp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(KINSOL_LIB sundials_kinsol_shared)
+  SET(NVECOMP_LIB sundials_nvecopenmp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+SET(SUNDIALS_LIBS ${KINSOL_LIB} ${NVECOMP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# update the compilation flags to include OpenMP support
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+
+# Add the build and install targets for each KINSOL example
+FOREACH(example ${KINSOL_examples_OMP})
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  #SUNDIALS_ADD_TEST(${example} ${example} TEST_ARGS 4) # No test until TestRunner modified for OpenMP
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/C_openmp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${KINSOL_examples_OMP})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/C_openmp)
+
+  # Install the extra files
+  FOREACH(extrafile ${KINSOL_extras_OMP})
+    INSTALL(FILES ${extrafile} DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/C_openmp)
+  ENDFOREACH(extrafile ${KINSOL_extras_OMP})
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "KINSOL")
+  SET(SOLVER_LIB "sundials_kinsol")
+  LIST2STRING(KINSOL_examples_OMP EXAMPLES)
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/kinsol/C_openmp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/kinsol/C_openmp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/C_openmp 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/kinsol/C_openmp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/kinsol/C_openmp/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/C_openmp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/kinsol/C_openmp/README b/examples/kinsol/C_openmp/README
new file mode 100644
index 0000000..56fb7dd
--- /dev/null
+++ b/examples/kinsol/C_openmp/README
@@ -0,0 +1,49 @@
+List of C_openmp KINSOL examples
+
+  kinFoodWeb_kry_omp: 2-D food web system, block-diagonal preconditioner
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/kinsol/C_openmp/kinFoodWeb_kry_omp.c b/examples/kinsol/C_openmp/kinFoodWeb_kry_omp.c
new file mode 100644
index 0000000..c50b8c9
--- /dev/null
+++ b/examples/kinsol/C_openmp/kinFoodWeb_kry_omp.c
@@ -0,0 +1,824 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:  $
+ * $Date:  $
+ * -----------------------------------------------------------------
+ * Programmer(s): Ting Yan @ SMU
+ *      Based on kinFoodWeb_kry.c and parallelized with OpenMP
+ * -----------------------------------------------------------------
+ * Example (serial):
+ *
+ * This example solves a nonlinear system that arises from a system
+ * of partial differential equations. The PDE system is a food web
+ * population model, with predator-prey interaction and diffusion
+ * on the unit square in two dimensions. The dependent variable
+ * vector is the following:
+ * 
+ *       1   2         ns
+ * c = (c , c ,  ..., c  )     (denoted by the variable cc)
+ * 
+ * and the PDE's are as follows:
+ *
+ *                    i       i
+ *         0 = d(i)*(c     + c    )  +  f  (x,y,c)   (i=1,...,ns)
+ *                    xx      yy         i
+ *
+ *   where
+ *
+ *                   i             ns         j
+ *   f  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The number np is both the
+ * number of prey and predator species. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *   a(i,i) = -AA   (all i)
+ *   a(i,j) = -GG   (i <= np , j >  np)
+ *   a(i,j) =  EE   (i >  np,  j <= np)
+ *   b(i) = BB * (1 + alpha * x * y)   (i <= np)
+ *   b(i) =-BB * (1 + alpha * x * y)   (i >  np)
+ *   d(i) = DPREY   (i <= np)
+ *   d(i) = DPRED   ( i > np)
+ *
+ * The various scalar parameters are set using define's or in
+ * routine InitUserData.
+ *
+ * The boundary conditions are: normal derivative = 0, and the
+ * initial guess is constant in x and y, but the final solution
+ * is not.
+ *
+ * The PDEs are discretized by central differencing on an MX by
+ * MY mesh.
+ * 
+ * The nonlinear system is solved by KINSOL using the method
+ * specified in local variable globalstrat.
+ *
+ * The preconditioner matrix is a block-diagonal matrix based on
+ * the partial derivatives of the interaction terms f only.
+ *
+ * Constraints are imposed to make all components of the solution
+ * positive.
+ *
+ * Optionally, we can set the number of threads from environment 
+ * variable or command line. To check the current value for number
+ * of threads from environment:
+ *      % echo $OMP_NUM_THREADS
+ *
+ * Execution:
+ *
+ * If the user want to use the default value or the number of threads 
+ * from environment value:
+ *      % ./kinFoodWeb_kry_omp 
+ * If the user want to specify the number of threads to use
+ *      % ./kinFoodWeb_kry_omp num_threads
+ * where num_threads is the number of threads the user want to use 
+ *
+ * -----------------------------------------------------------------
+ * References:
+ *
+ * 1. Peter N. Brown and Youcef Saad,
+ *    Hybrid Krylov Methods for Nonlinear Systems of Equations
+ *    LLNL report UCRL-97645, November 1987.
+ *
+ * 2. Peter N. Brown and Alan C. Hindmarsh,
+ *    Reduced Storage Matrix Methods in Stiff ODE systems,
+ *    Lawrence Livermore National Laboratory Report  UCRL-95088,
+ *    Rev. 1, June 1987, and  Journal of Applied Mathematics and
+ *    Computation, Vol. 31 (May 1989), pp. 40-91. (Presents a
+ *    description of the time-dependent version of this test
+ *    problem.)
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_spgmr.h>
+#include <nvector/nvector_openmp.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+/* Problem Constants */
+
+#define NUM_SPECIES     6  /* must equal 2*(number of prey or predators)
+                              number of prey = number of predators       */ 
+
+#define PI       RCONST(3.1415926535898)   /* pi */ 
+
+#define MX          8              /* MX = number of x mesh points */
+#define MY          8              /* MY = number of y mesh points */
+#define NSMX        (NUM_SPECIES * MX)
+#define NEQ         (NSMX * MY)    /* number of equations in the system */
+#define AA          RCONST(1.0)    /* value of coefficient AA in above eqns */
+#define EE          RCONST(10000.) /* value of coefficient EE in above eqns */
+#define GG          RCONST(0.5e-6) /* value of coefficient GG in above eqns */
+#define BB          RCONST(1.0)    /* value of coefficient BB in above eqns */
+#define DPREY       RCONST(1.0)    /* value of coefficient dprey above */
+#define DPRED       RCONST(0.5)    /* value of coefficient dpred above */
+#define ALPHA       RCONST(1.0)    /* value of coefficient alpha above */
+#define AX          RCONST(1.0)    /* total range of x variable */
+#define AY          RCONST(1.0)    /* total range of y variable */
+#define FTOL        RCONST(1.e-7)  /* ftol tolerance */
+#define STOL        RCONST(1.e-13) /* stol tolerance */
+#define THOUSAND    RCONST(1000.0) /* one thousand */
+#define ZERO        RCONST(0.)     /* 0. */
+#define ONE         RCONST(1.0)    /* 1. */
+#define TWO         RCONST(2.0)    /* 2. */
+#define PREYIN      RCONST(1.0)    /* initial guess for prey concentrations. */
+#define PREDIN      RCONST(30000.0)/* initial guess for predator concs.      */
+
+/* User-defined vector access macro: IJ_Vptr */
+
+/* IJ_Vptr is defined in order to translate from the underlying 3D structure
+   of the dependent variable vector to the 1D storage scheme for an N-vector.
+   IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+   indices is = 0, jx = i, jy = j.    */
+
+#define IJ_Vptr(vv,i,j)   (&NV_Ith_OMP(vv, i*NUM_SPECIES + j*NSMX))
+
+/* Type : UserData 
+   contains preconditioner blocks, pivot arrays, and problem constants */
+
+typedef struct {
+  realtype **P[MX][MY];
+  long int *pivot[MX][MY];
+  realtype **acoef, *bcoef;
+  N_Vector rates;
+  realtype *cox, *coy;
+  realtype ax, ay, dx, dy;
+  realtype uround, sqruround;
+  long int mx, my, ns, np;
+  int nthreads;
+} *UserData;
+
+/* Functions Called by the KINSOL Solver */
+
+static int func(N_Vector cc, N_Vector fval, void *user_data);
+
+static int PrecSetupBD(N_Vector cc, N_Vector cscale,
+                       N_Vector fval, N_Vector fscale,
+                       void *user_data,
+                       N_Vector vtemp1, N_Vector vtemp2);
+
+static int PrecSolveBD(N_Vector cc, N_Vector cscale, 
+                       N_Vector fval, N_Vector fscale, 
+                       N_Vector vv, void *user_data,
+                       N_Vector ftem);
+
+/* Private Helper Functions */
+
+static UserData AllocUserData(void);
+static void InitUserData(UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector cc, N_Vector sc);
+static void PrintHeader(int globalstrategy, int maxl, int maxlrst, 
+                        realtype fnormtol, realtype scsteptol);
+static void PrintOutput(N_Vector cc);
+static void PrintFinalStats(void *kmem);
+static void WebRate(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                    void *user_data);
+static realtype DotProd(long int size, realtype *x1, realtype *x2);
+static int check_flag(void *flagvalue, char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  int globalstrategy;
+  realtype fnormtol, scsteptol;
+  N_Vector cc, sc, constraints;
+  UserData data;
+  int flag, maxl, maxlrst;
+  void *kmem;
+  int num_threads;
+
+  cc = sc = constraints = NULL;
+  kmem = NULL;
+  data = NULL;
+
+  /* Allocate memory, and set problem data, initial values, tolerances */ 
+  globalstrategy = KIN_NONE;
+
+  /* Set the number of threads to use */
+  num_threads = 1;     /* default value*/
+#ifdef _OPENMP
+  num_threads = omp_get_max_threads();    /* Overwrite with OMP_NUM_THREADS environment variable */
+#endif
+  if (argc > 1)        /* overwrithe with command line value, if supplied */
+    num_threads = strtol(argv[1], NULL, 0);
+
+  data = AllocUserData();
+  if (check_flag((void *)data, "AllocUserData", 2)) return(1);
+  InitUserData(data);
+  data->nthreads = num_threads;
+
+  /* Create serial vectors of length NEQ */
+  cc = N_VNew_OpenMP(NEQ, num_threads);
+  if (check_flag((void *)cc, "N_VNew_OpenMP", 0)) return(1);
+  sc = N_VNew_OpenMP(NEQ, num_threads);
+  if (check_flag((void *)sc, "N_VNew_OpenMP", 0)) return(1);
+  data->rates = N_VNew_OpenMP(NEQ, num_threads);
+  if (check_flag((void *)data->rates, "N_VNew_OpenMP", 0)) return(1);
+
+  constraints = N_VNew_OpenMP(NEQ, num_threads);
+  if (check_flag((void *)constraints, "N_VNew_OpenMP", 0)) return(1);
+  N_VConst(TWO, constraints);
+
+  SetInitialProfiles(cc, sc);
+
+  fnormtol=FTOL; scsteptol=STOL;
+
+  /* Call KINCreate/KINInit to initialize KINSOL.
+     A pointer to KINSOL problem memory is returned and stored in kmem. */
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0)) return(1);
+
+  /* Vector cc passed as template vector. */
+  flag = KINInit(kmem, func, cc);
+  if (check_flag(&flag, "KINInit", 1)) return(1);
+
+  flag = KINSetUserData(kmem, data);
+  if (check_flag(&flag, "KINSetUserData", 1)) return(1);
+  flag = KINSetConstraints(kmem, constraints);
+  if (check_flag(&flag, "KINSetConstraints", 1)) return(1);
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1)) return(1);
+  flag = KINSetScaledStepTol(kmem, scsteptol);
+  if (check_flag(&flag, "KINSetScaledStepTol", 1)) return(1);
+
+  /* We no longer need the constraints vector since KINSetConstraints
+     creates a private copy for KINSOL to use. */
+  N_VDestroy_OpenMP(constraints);
+
+  /* Call KINSpgmr to specify the linear solver KINSPGMR with preconditioner
+     routines PrecSetupBD and PrecSolveBD. */
+  maxl = 15; 
+  maxlrst = 2;
+  flag = KINSpgmr(kmem, maxl);
+  if (check_flag(&flag, "KINSpgmr", 1)) return(1);
+
+  flag = KINSpilsSetMaxRestarts(kmem, maxlrst);
+  if (check_flag(&flag, "KINSpilsSetMaxRestarts", 1)) return(1);
+  flag = KINSpilsSetPreconditioner(kmem,
+				   PrecSetupBD,
+				   PrecSolveBD);
+  if (check_flag(&flag, "KINSpilsSetPreconditioner", 1)) return(1);
+
+  /* Print out the problem size, solution parameters, initial guess. */
+  PrintHeader(globalstrategy, maxl, maxlrst, fnormtol, scsteptol);
+
+  /* Call KINSol and print output concentration profile */
+  flag = KINSol(kmem,           /* KINSol memory block */
+                cc,             /* initial guess on input; solution vector */
+                globalstrategy, /* global strategy choice */
+                sc,             /* scaling vector, for the variable cc */
+                sc);            /* scaling vector for function values fval */
+  if (check_flag(&flag, "KINSol", 1)) return(1);
+
+  printf("\n\nComputed equilibrium species concentrations:\n");
+  PrintOutput(cc);
+
+  /* Print final statistics and free memory */  
+  PrintFinalStats(kmem);
+  printf("num_threads = %i\n", num_threads);
+
+  N_VDestroy_OpenMP(cc);
+  N_VDestroy_OpenMP(sc);
+  KINFree(&kmem);
+  FreeUserData(data);
+
+  return(0);
+}
+
+/* Readability definitions used in other routines below */
+
+#define acoef  (data->acoef)
+#define bcoef  (data->bcoef)
+#define cox    (data->cox)
+#define coy    (data->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY KINSOL
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * System function for predator-prey system 
+ */
+
+static int func(N_Vector cc, N_Vector fval, void *user_data)
+{
+  realtype xx, yy, delx, dely, *cxy, *rxy, *fxy, dcyli, dcyui, dcxli, dcxri;
+  long int jx, jy, is, idyu, idyl, idxr, idxl;
+  UserData data;
+  
+  data = (UserData)user_data;
+  delx = data->dx;
+  dely = data->dy;
+  
+  /* Loop over all mesh points, evaluating rate array at each point*/
+  for (jy = 0; jy < MY; jy++) {
+    
+    yy = dely*jy;
+
+    /* Set lower/upper index shifts, special at boundaries. */
+    idyl = (jy != 0   ) ? NSMX : -NSMX;
+    idyu = (jy != MY-1) ? NSMX : -NSMX;
+    
+    for (jx = 0; jx < MX; jx++) {
+
+      xx = delx*jx;
+
+      /* Set left/right index shifts, special at boundaries. */
+      idxl = (jx !=  0  ) ?  NUM_SPECIES : -NUM_SPECIES;
+      idxr = (jx != MX-1) ?  NUM_SPECIES : -NUM_SPECIES;
+
+      cxy = IJ_Vptr(cc,jx,jy);
+      rxy = IJ_Vptr(data->rates,jx,jy);
+      fxy = IJ_Vptr(fval,jx,jy);
+
+      /* Get species interaction rate array at (xx,yy) */
+      WebRate(xx, yy, cxy, rxy, user_data);
+
+      for(is = 0; is < NUM_SPECIES; is++) {
+        
+        /* Differencing in x direction */
+        dcyli = *(cxy+is) - *(cxy - idyl + is) ;
+        dcyui = *(cxy + idyu + is) - *(cxy+is);
+        
+        /* Differencing in y direction */
+        dcxli = *(cxy+is) - *(cxy - idxl + is);
+        dcxri = *(cxy + idxr +is) - *(cxy+is);
+        
+        /* Compute the total rate value at (xx,yy) */
+        fxy[is] = (coy)[is] * (dcyui - dcyli) +
+          (cox)[is] * (dcxri - dcxli) + rxy[is];
+        
+      } /* end of is loop */
+      
+    } /* end of jx loop */
+    
+  } /* end of jy loop */
+
+  return(0);
+}
+
+/*
+ * Preconditioner setup routine. Generate and preprocess P. 
+ */
+
+static int PrecSetupBD(N_Vector cc, N_Vector cscale,
+                       N_Vector fval, N_Vector fscale,
+                       void *user_data,
+                       N_Vector vtemp1, N_Vector vtemp2)
+{
+  realtype r, r0, uround, sqruround, xx, yy, delx, dely, csave, fac;
+  realtype *cxy, *scxy, **Pxy, *ratesxy, *Pxycol, perturb_rates[NUM_SPECIES];
+  long int i, j, jx, jy, ret;
+  UserData data;
+  
+  data = (UserData) user_data;
+  delx = data->dx;
+  dely = data->dy;
+  
+  uround = data->uround;
+  sqruround = data->sqruround;
+  fac = N_VWL2Norm(fval, fscale);
+  r0 = THOUSAND * uround * fac * NEQ;
+  if(r0 == ZERO) r0 = ONE;
+  
+  /* Loop over spatial points; get size NUM_SPECIES Jacobian block at each */
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy*dely;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx*delx;
+      Pxy = (data->P)[jx][jy];
+      cxy = IJ_Vptr(cc,jx,jy);
+      scxy= IJ_Vptr(cscale,jx,jy);
+      ratesxy = IJ_Vptr((data->rates),jx,jy);
+      
+      /* Compute difference quotients of interaction rate fn. */
+      for (j = 0; j < NUM_SPECIES; j++) {
+        
+        csave = cxy[j];  /* Save the j,jx,jy element of cc */
+        r = SUNMAX(sqruround*SUNRabs(csave), r0/scxy[j]);
+        cxy[j] += r; /* Perturb the j,jx,jy element of cc */
+        fac = ONE/r;
+        
+        WebRate(xx, yy, cxy, perturb_rates, data);
+        
+        /* Restore j,jx,jy element of cc */
+        cxy[j] = csave;
+        
+        /* Load the j-th column of difference quotients */
+        Pxycol = Pxy[j];
+	
+#pragma omp parallel for default(shared) private(i)
+        for (i = 0; i < NUM_SPECIES; i++)
+          Pxycol[i] = (perturb_rates[i] - ratesxy[i]) * fac;
+        
+        
+      } /* end of j loop */
+      
+      /* Do LU decomposition of size NUM_SPECIES preconditioner block */
+      ret = denseGETRF(Pxy, NUM_SPECIES, NUM_SPECIES, (data->pivot)[jx][jy]);
+      if (ret != 0) return(1);
+      
+    } /* end of jx loop */
+    
+  } /* end of jy loop */
+  
+  return(0);  
+}
+
+/*
+ * Preconditioner solve routine 
+ */
+
+static int PrecSolveBD(N_Vector cc, N_Vector cscale, 
+                       N_Vector fval, N_Vector fscale, 
+                       N_Vector vv, void *user_data,
+                       N_Vector ftem)
+{
+  realtype **Pxy, *vxy;
+  long int *piv, jx, jy;
+  UserData data;
+  
+  data = (UserData)user_data;
+  
+#pragma omp parallel for collapse(2) default(shared) private(jx, jy, Pxy, piv, vxy) schedule(static) 
+  for (jx=0; jx<MX; jx++) {
+    
+    for (jy=0; jy<MY; jy++) {
+      
+      /* For each (jx,jy), solve a linear system of size NUM_SPECIES.
+         vxy is the address of the corresponding portion of the vector vv;
+         Pxy is the address of the corresponding block of the matrix P;
+         piv is the address of the corresponding block of the array pivot. */
+      vxy = IJ_Vptr(vv,jx,jy);
+      Pxy = (data->P)[jx][jy];
+      piv = (data->pivot)[jx][jy];
+      denseGETRS(Pxy, NUM_SPECIES, piv, vxy);
+      
+    } /* end of jy loop */
+    
+  } /* end of jx loop */
+  
+  return(0);
+}
+
+/*
+ * Interaction rate function routine 
+ */
+
+static void WebRate(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                    void *user_data)
+{
+  long int i;
+  realtype fac;
+  UserData data;
+  
+  data = (UserData)user_data;
+  
+  for (i = 0; i<NUM_SPECIES; i++)
+    ratesxy[i] = DotProd(NUM_SPECIES, cxy, acoef[i]);
+  
+  fac = ONE + ALPHA * xx * yy;
+  
+#pragma omp parallel for default(shared) private(i) 
+  for (i = 0; i < NUM_SPECIES; i++)
+    ratesxy[i] = cxy[i] * ( bcoef[i] * fac + ratesxy[i] );  
+}
+
+/*
+ * Dot product routine for realtype arrays 
+ */
+
+static realtype DotProd(long int size, realtype *x1, realtype *x2)
+{
+  long int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+
+  return(temp);  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Allocate memory for data structure of type UserData 
+ */
+
+static UserData AllocUserData(void)
+{
+  int jx, jy;
+  UserData data;
+
+  data = (UserData) malloc(sizeof *data);
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      (data->P)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+    }
+  }
+  acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  bcoef = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  cox   = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  coy   = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  
+  return(data);
+}
+
+/* 
+ * Load problem constants in data 
+ */
+
+static void InitUserData(UserData data)
+{
+  long int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  data->mx = MX;
+  data->my = MY;
+  data->ns = NUM_SPECIES;
+  data->np = NUM_SPECIES/2;
+  data->ax = AX;
+  data->ay = AY;
+  data->dx = (data->ax)/(MX-1);
+  data->dy = (data->ay)/(MY-1);
+  data->uround = UNIT_ROUNDOFF;
+  data->sqruround = SUNRsqrt(data->uround);
+
+  /* Set up the coefficients a and b plus others found in the equations */
+  np = data->np;
+
+  dx2=(data->dx)*(data->dx); dy2=(data->dy)*(data->dy);
+
+  for (i = 0; i < np; i++) {
+    a1= &(acoef[i][np]);
+    a2= &(acoef[i+np][0]);
+    a3= &(acoef[i][0]);
+    a4= &(acoef[i+np][np]);
+
+    /*  Fill in the portion of acoef in the four quadrants, row by row */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+
+    /* and then change the diagonal elements of acoef to -AA */
+    acoef[i][i]=-AA;
+    acoef[i+np][i+np] = -AA;
+
+    bcoef[i] = BB;
+    bcoef[i+np] = -BB;
+
+    cox[i]=DPREY/dx2;
+    cox[i+np]=DPRED/dx2;
+
+    coy[i]=DPREY/dy2;
+    coy[i+np]=DPRED/dy2;
+  }  
+}
+
+/* 
+ * Free data memory 
+ */
+
+static void FreeUserData(UserData data)
+{
+  int jx, jy;
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      destroyMat((data->P)[jx][jy]);
+      destroyArray((data->pivot)[jx][jy]);
+    }
+  }
+  
+  destroyMat(acoef);
+  free(bcoef);
+  free(cox);
+  free(coy);
+  N_VDestroy_OpenMP(data->rates);
+  free(data);
+}
+
+/* 
+ * Set initial conditions in cc 
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector sc)
+{
+  int i, jx, jy;
+  realtype *cloc, *sloc;
+  realtype  ctemp[NUM_SPECIES], stemp[NUM_SPECIES];
+  
+  /* Initialize arrays ctemp and stemp used in the loading process */
+  for (i = 0; i < NUM_SPECIES/2; i++) {
+    ctemp[i] = PREYIN;
+    stemp[i] = ONE;
+  }
+  for (i = NUM_SPECIES/2; i < NUM_SPECIES; i++) {
+    ctemp[i] = PREDIN;
+    stemp[i] = RCONST(0.00001);
+  }
+
+  /* Load initial profiles into cc and sc vector from ctemp and stemp. */
+  for (jy = 0; jy < MY; jy++) {
+    for (jx = 0; jx < MX; jx++) {
+      cloc = IJ_Vptr(cc,jx,jy);
+      sloc = IJ_Vptr(sc,jx,jy);
+      for (i = 0; i < NUM_SPECIES; i++) {
+        cloc[i] = ctemp[i];
+        sloc[i] = stemp[i];
+      }
+    }
+  }
+}
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(int globalstrategy, int maxl, int maxlrst, 
+                        realtype fnormtol, realtype scsteptol)
+{
+  printf("\nPredator-prey test problem --  KINSol (OpenMP version)\n\n");
+  printf("Mesh dimensions = %d X %d\n", MX, MY);
+  printf("Number of species = %d\n", NUM_SPECIES);
+  printf("Total system size = %d\n\n", NEQ);
+  printf("Flag globalstrategy = %d (0 = None, 1 = Linesearch)\n",
+         globalstrategy);
+  printf("Linear solver is SPGMR with maxl = %d, maxlrst = %d\n",
+         maxl, maxlrst);
+  printf("Preconditioning uses interaction-only block-diagonal matrix\n");
+  printf("Positivity constraints imposed on all components \n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  fnormtol = %Lg   scsteptol = %Lg\n",
+         fnormtol, scsteptol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  fnormtol = %g   scsteptol = %g\n",
+         fnormtol, scsteptol);
+#else
+  printf("Tolerance parameters:  fnormtol = %g   scsteptol = %g\n",
+         fnormtol, scsteptol);
+#endif
+
+  printf("\nInitial profile of concentration\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("At all mesh points:  %Lg %Lg %Lg   %Lg %Lg %Lg\n", 
+         PREYIN, PREYIN, PREYIN,
+         PREDIN, PREDIN, PREDIN);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At all mesh points:  %g %g %g   %g %g %g\n", 
+         PREYIN, PREYIN, PREYIN,
+         PREDIN, PREDIN, PREDIN);
+#else
+  printf("At all mesh points:  %g %g %g   %g %g %g\n", 
+         PREYIN, PREYIN, PREYIN,
+         PREDIN, PREDIN, PREDIN);
+#endif
+}
+
+/* 
+ * Print sampled values of current cc 
+ */
+
+static void PrintOutput(N_Vector cc)
+{
+  int is, jx, jy;
+  realtype *ct;
+  
+  jy = 0; jx = 0;
+  ct = IJ_Vptr(cc,jx,jy);
+  printf("\nAt bottom left:");
+
+  /* Print out lines with up to 6 values per line */
+  for (is = 0; is < NUM_SPECIES; is++){
+    if ((is%6)*6 == is) printf("\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %Lg",ct[is]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %g",ct[is]);
+#else
+    printf(" %g",ct[is]);
+#endif
+  }
+  
+  jy = MY-1; jx = MX-1;
+  ct = IJ_Vptr(cc,jx,jy);
+  printf("\n\nAt top right:");
+
+  /* Print out lines with up to 6 values per line */
+  for (is = 0; is < NUM_SPECIES; is++) {
+    if ((is%6)*6 == is) printf("\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %Lg",ct[is]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %g",ct[is]);
+#else
+    printf(" %g",ct[is]);
+#endif
+  }
+  printf("\n\n");
+}
+
+/* 
+ * Print final statistics contained in iopt 
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe, nli, npe, nps, ncfl, nfeSG;
+  int flag;
+  
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1);
+  flag = KINSpilsGetNumLinIters(kmem, &nli);
+  check_flag(&flag, "KINSpilsGetNumLinIters", 1);
+  flag = KINSpilsGetNumPrecEvals(kmem, &npe);
+  check_flag(&flag, "KINSpilsGetNumPrecEvals", 1);
+  flag = KINSpilsGetNumPrecSolves(kmem, &nps);
+  check_flag(&flag, "KINSpilsGetNumPrecSolves", 1);
+  flag = KINSpilsGetNumConvFails(kmem, &ncfl);
+  check_flag(&flag, "KINSpilsGetNumConvFails", 1);
+  flag = KINSpilsGetNumFuncEvals(kmem, &nfeSG);
+  check_flag(&flag, "KINSpilsGetNumFuncEvals", 1);
+
+  printf("Final Statistics.. \n");
+  printf("nni    = %5ld    nli   = %5ld\n", nni, nli);
+  printf("nfe    = %5ld    nfeSG = %5ld\n", nfe, nfeSG);
+  printf("nps    = %5ld    npe   = %5ld     ncfl  = %5ld\n", nps, npe, ncfl);
+  
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr,
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/C_openmp/kinFoodWeb_kry_omp.out b/examples/kinsol/C_openmp/kinFoodWeb_kry_omp.out
new file mode 100644
index 0000000..e4829be
--- /dev/null
+++ b/examples/kinsol/C_openmp/kinFoodWeb_kry_omp.out
@@ -0,0 +1,30 @@
+
+Predator-prey test problem --  KINSol (OpenMP version)
+
+Mesh dimensions = 8 X 8
+Number of species = 6
+Total system size = 384
+
+Flag globalstrategy = 0 (0 = None, 1 = Linesearch)
+Linear solver is SPGMR with maxl = 15, maxlrst = 2
+Preconditioning uses interaction-only block-diagonal matrix
+Positivity constraints imposed on all components 
+Tolerance parameters:  fnormtol = 1e-07   scsteptol = 1e-13
+
+Initial profile of concentration
+At all mesh points:  1 1 1   30000 30000 30000
+
+
+Computed equilibrium species concentrations:
+
+At bottom left:
+ 1.16428 1.16428 1.16428 34927.5 34927.5 34927.5
+
+At top right:
+ 1.25797 1.25797 1.25797 37736.7 37736.7 37736.7
+
+Final Statistics.. 
+nni    =    10    nli   =   378
+nfe    =    11    nfeSG =   388
+nps    =   388    npe   =     1     ncfl  =     7
+num_threads = 32
diff --git a/examples/kinsol/fcmix_parallel/CMakeLists.txt b/examples/kinsol/fcmix_parallel/CMakeLists.txt
new file mode 100644
index 0000000..d3f5d60
--- /dev/null
+++ b/examples/kinsol/fcmix_parallel/CMakeLists.txt
@@ -0,0 +1,140 @@
+# ---------------------------------------------------------------
+# $Revision: 4096 $
+# $Date: 2014-05-02 14:49:50 -0700 (Fri, 02 May 2014) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the FKINSOL parallel examples
+
+
+# Add variable kinsol_examples with the names of the parallel KINSOL examples
+
+SET(FKINSOL_examples
+  "fkinDiagon_kry_p\;1\;4"
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the Fortran compiler to the MPIF77 script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPIF77 )
+  # use MPI_MPIF77 as the compiler
+  SET(CMAKE_Fortran_COMPILER ${MPI_MPIF77})
+ELSE(MPI_MPIF77)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPIF77)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(KINSOL_LIB sundials_kinsol_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+  SET(FNVECP_LIB sundials_fnvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(KINSOL_LIB sundials_kinsol_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+  SET(FNVECP_LIB sundials_fnvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FKINSOL_LIB sundials_fkinsol_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FKINSOL_LIB} ${KINSOL_LIB} ${FNVECP_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each KINSOL example
+
+FOREACH(example_tuple ${FKINSOL_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.f)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPIF77)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPIF77)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/fcmix_parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${FKINSOL_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/fcmix_parallel)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "KINSOL")
+  SET(SOLVER_LIB "sundials_kinsol")
+  SET(SOLVER_FLIB "sundials_fkinsol")
+  FOREACH(example_tuple ${FKINSOL_examples})
+    list(GET example_tuple 0 example)
+    LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${FKINSOL_examples})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/kinsol/fcmix_parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/kinsol/fcmix_parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/fcmix_parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/kinsol/fcmix_parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/kinsol/fcmix_parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/fcmix_parallel 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
+
diff --git a/examples/kinsol/fcmix_parallel/README b/examples/kinsol/fcmix_parallel/README
new file mode 100644
index 0000000..1c00d9e
--- /dev/null
+++ b/examples/kinsol/fcmix_parallel/README
@@ -0,0 +1,49 @@
+List of parallel KINSOL FCMIX examples
+
+  fkinDiagon_kry_p: simple diagonal test with Fortran interface
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/kinsol/fcmix_parallel/fkinDiagon_kry_p.f b/examples/kinsol/fcmix_parallel/fkinDiagon_kry_p.f
new file mode 100644
index 0000000..bebff32
--- /dev/null
+++ b/examples/kinsol/fcmix_parallel/fkinDiagon_kry_p.f
@@ -0,0 +1,260 @@
+      program fkinDiagon_kry_p
+c     ----------------------------------------------------------------
+c     $Revision: 4881 $
+c     $Date: 2016-09-01 15:31:14 -0700 (Thu, 01 Sep 2016) $
+c     ----------------------------------------------------------------
+c     Programmer(s): Allan G. Taylor, Alan C. Hindmarsh and
+c                    Radu Serban @ LLNL
+c     ----------------------------------------------------------------
+c     Simple diagonal test with Fortran interface, using
+c     user-supplied preconditioner setup and solve routines (supplied
+c     in Fortran, below).
+c
+c     This example does a basic test of the solver by solving the
+c     system:
+c               f(u) = 0  for
+c               f(u) = u(i)^2 - i^2
+c
+c      No scaling is done.
+c      An approximate diagonal preconditioner is used.
+c
+c      Execution command: mpirun -np 4 fkinDiagon_kry_p
+c     ----------------------------------------------------------------
+c
+      implicit none
+
+      include "mpif.h"
+
+      integer localsize
+      parameter(localsize=32)
+      integer baseadd, i, ii
+      integer ier, size, globalstrat, rank, mype, npes
+      integer maxl, maxlrst
+c The following declaration specification should match C type long int.
+      integer*8 neq, nlocal, iout(15), msbpre
+      double precision rout(2)
+      double precision pp, fnormtol, scsteptol
+      double precision uu(localsize), scale(localsize)
+      double precision constr(localsize)
+
+      common /pcom/ pp(localsize), nlocal, mype, npes, baseadd
+
+      nlocal = localsize
+      neq = 4 * nlocal
+      globalstrat = 0
+      fnormtol = 1.0d-5
+      scsteptol = 1.0d-4
+      maxl = 10
+      maxlrst = 2
+      msbpre  = 5
+
+c     The user MUST call mpi_init, Fortran binding, for the fkinsol package
+c     to work. The communicator, MPI_COMM_WORLD, is the only one common 
+c     between the Fortran and C bindings. So in the following, the communicator
+c     MPI_COMM_WORLD is used in calls to mpi_comm_size and mpi_comm_rank
+c     to determine the total number of processors and the rank (0 ... size-1) 
+c     number of this process.
+      
+      call mpi_init(ier)
+      if (ier .ne. 0) then
+         write(6,1210) ier
+ 1210    format('MPI_ERROR: MPI_INIT returned IER = ', i4)
+         stop
+      endif
+
+      call fnvinitp(mpi_comm_world, 3, nlocal, neq, ier)
+      if (ier .ne. 0) then
+         write(6,1220) ier
+ 1220    format('SUNDIALS_ERROR: FNVINITP returned IER = ', i4)
+         call mpi_finalize(ier)
+         stop
+      endif
+      
+      call mpi_comm_size(mpi_comm_world, size, ier)
+      if (ier .ne. 0) then
+         write(6,1222) ier
+ 1222    format('MPI_ERROR: MPI_COMM_SIZE returned IER = ', i4)
+         call mpi_abort(mpi_comm_world, 1, ier)
+         stop
+      endif
+      
+      if (size .ne. 4) then
+         write(6,1230)
+ 1230    format('MPI_ERROR: must use 4 processes')
+         call mpi_finalize(ier)
+         stop
+      endif
+      npes = size
+
+      call mpi_comm_rank(mpi_comm_world, rank, ier)
+      if (ier .ne. 0) then
+         write(6,1224) ier
+ 1224    format('MPI_ERROR: MPI_COMM_RANK returned IER = ', i4)
+         call mpi_abort(mpi_comm_world, 1, ier)
+         stop
+      endif
+
+      mype = rank
+      baseadd = mype * nlocal 
+
+      do 20 ii = 1, nlocal
+         i = ii + baseadd
+         uu(ii) = 2.0d0 * i
+         scale(ii) = 1.0d0
+         constr(ii) = 0.0d0
+ 20   continue
+      
+      call fkincreate(ier)
+      if (ier .ne. 0) then
+         write(6,1231)ier
+ 1231    format('SUNDIALS_ERROR: FKINCREATE returned IER = ', i4)
+         call mpi_abort(mpi_comm_world, 1, ier)
+         stop
+      endif
+      
+      call fkinsetiin('MAX_SETUPS', msbpre, ier)
+      call fkinsetrin('FNORM_TOL', fnormtol, ier)
+      call fkinsetrin('SSTEP_TOL', scsteptol, ier)
+      call fkinsetvin('CONSTR_VEC', constr, ier)
+
+      call fkininit(iout, rout, ier)
+      if (ier .ne. 0) then
+         write(6,1232)ier
+ 1232    format('SUNDIALS_ERROR: FKININIT returned IER = ', i4)
+         call mpi_abort(mpi_comm_world, 1, ier)
+         stop
+      endif
+
+      call fkinspgmr(maxl, maxlrst, ier)
+      call fkinspilssetprec(1, ier)
+      
+      if (mype .eq. 0) write(6,1240)
+ 1240 format('Example program fkinDiagon_kry_p:'//
+     1       ' This FKINSOL example',
+     2       ' solves a 128 eqn diagonal algebraic system.'/
+     3       ' Its purpose is to demonstrate the use of the Fortran',
+     4       ' interface'/' in a parallel environment.')
+
+      call fkinsol(uu, globalstrat, scale, scale, ier)
+      if (ier .lt. 0) then
+         write(6,1242) ier, iout(9)
+ 1242    format('SUNDIALS_ERROR: FKINSOL returned IER = ', i4, /,
+     1          '                Linear Solver returned IER = ', i4)
+         call mpi_abort(mpi_comm_world, 1, ier)
+         stop
+      endif
+
+      if (mype .eq. 0) write(6,1245) ier
+ 1245 format(/' FKINSOL return code is ', i4)
+
+      if (mype .eq. 0) write(6,1246)
+ 1246 format(/' The resultant values of uu (process 0) are:'/)
+      
+      do 30 i = 1, nlocal, 4
+         if(mype .eq. 0) write(6,1256) i + baseadd, uu(i), uu(i+1),
+     1                                 uu(i+2), uu(i+3)
+ 1256    format(i4, 4(1x, f10.6))
+ 30   continue
+
+      if (mype .eq. 0) write(6,1267) iout(3), iout(14), iout(4),
+     1                               iout(12), iout(13), iout(15)
+ 1267 format(/'Final statistics:'//
+     1     '  nni = ', i3, ',  nli  = ', i3, /,
+     2     '  nfe = ', i3, ',  npe  = ', i3, /,
+     3     '  nps = ', i3, ',  ncfl = ', i3)
+
+      call fkinfree
+      
+c     An explicit call to mpi_finalize (Fortran binding) is required by 
+c     the constructs used in fkinsol. 
+      call mpi_finalize(ier)
+      
+      stop
+      end
+      
+
+c * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+c     The function defining the system f(u) = 0 must be defined by a Fortran
+c     function with the following name and form. 
+      
+      subroutine fkfun(uu, fval, ier)
+
+      implicit none
+
+c The following declaration specification should match C type long int.
+      integer*8 nlocal
+      integer ier, mype, npes, baseadd, i
+      integer localsize
+      parameter(localsize=32)
+      double precision pp
+      double precision fval(*), uu(*)
+
+      common /pcom/ pp(localsize), nlocal, mype, npes, baseadd
+
+      do 10 i = 1, nlocal
+ 10      fval(i) = uu(i) * uu(i) - (i + baseadd) * (i + baseadd)
+      
+      ier = 0
+      
+      return
+      end
+      
+      
+c * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+c     The routine kpreco is the preconditioner setup routine. It must have
+c     that specific name be used in order that the c code can find and link
+c     to it.  The argument list must also be as illustrated below:
+      
+      subroutine fkpset(udata, uscale, fdata, fscale, 
+     1                  vtemp1, vtemp2, ier)
+
+      implicit none
+
+c The following declaration specification should match C type long int.
+      integer*8 nlocal
+      integer ier, mype, npes, baseadd, i
+      integer localsize
+      parameter(localsize=32)
+      double precision pp
+      double precision udata(*), uscale(*), fdata(*), fscale(*)
+      double precision vtemp1(*), vtemp2(*)
+
+      common /pcom/ pp(localsize), nlocal, mype, npes, baseadd
+
+      do 10 i = 1, nlocal
+ 10      pp(i) = 0.5d0 / (udata(i)+ 5.0d0)
+
+      ier = 0
+
+      return
+      end
+      
+      
+c * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+c     The routine kpsol is the preconditioner solve routine. It must have
+c     that specific name be used in order that the c code can find and link
+c     to it.  The argument list must also be as illustrated below:
+      
+      subroutine fkpsol(udata, uscale, fdata, fscale, 
+     1                  vv, ftem, ier)
+
+      implicit none
+
+c The following declaration specification should match C type long int.
+      integer*8 nlocal
+      integer ier, mype, npes, baseadd, i
+      integer localsize
+      parameter(localsize=32)
+      double precision udata(*), uscale(*), fdata(*), fscale(*)
+      double precision vv(*), ftem(*)
+      double precision pp
+
+      common /pcom/ pp(localsize), nlocal, mype, npes, baseadd
+
+      do 10 i = 1, nlocal
+ 10      vv(i) = vv(i) * pp(i)
+
+      ier = 0
+
+      return
+      end
diff --git a/examples/kinsol/fcmix_parallel/fkinDiagon_kry_p.out b/examples/kinsol/fcmix_parallel/fkinDiagon_kry_p.out
new file mode 100644
index 0000000..9a8f8ee
--- /dev/null
+++ b/examples/kinsol/fcmix_parallel/fkinDiagon_kry_p.out
@@ -0,0 +1,24 @@
+Example program fkinDiagon_kry_p:
+
+ This FKINSOL example solves a 128 eqn diagonal algebraic system.
+ Its purpose is to demonstrate the use of the Fortran interface
+ in a parallel environment.
+
+ FKINSOL return code is    0
+
+ The resultant values of uu (process 0) are:
+
+   1   1.000000   2.000000   3.000000   4.000000
+   5   5.000000   6.000000   7.000000   8.000000
+   9   9.000000  10.000000  11.000000  12.000000
+  13  13.000000  14.000000  15.000000  16.000000
+  17  17.000000  18.000000  19.000000  20.000000
+  21  21.000000  22.000000  23.000000  24.000000
+  25  25.000000  26.000000  27.000000  28.000000
+  29  29.000000  30.000000  31.000000  32.000000
+
+Final statistics:
+
+  nni =   7,  nli  =  21
+  nfe =   8,  npe  =   2
+  nps =  28,  ncfl =   0
diff --git a/examples/kinsol/fcmix_serial/CMakeLists.txt b/examples/kinsol/fcmix_serial/CMakeLists.txt
new file mode 100644
index 0000000..d739119
--- /dev/null
+++ b/examples/kinsol/fcmix_serial/CMakeLists.txt
@@ -0,0 +1,144 @@
+# ---------------------------------------------------------------
+# $Revision: 4096 $
+# $Date: 2014-05-02 14:49:50 -0700 (Fri, 02 May 2014) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the FKINSOL serial examples
+
+
+# Add variable kinsol_examples with the names of the serial FKINSOL examples
+
+SET(FKINSOL_examples
+  fkinDiagon_kry
+  )
+
+# Add variable FKINSOL_examples_BL with the names of the serial FKINSOL examples
+# that use Lapack
+
+SET(FKINSOL_examples_BL
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(KINSOL_LIB sundials_kinsol_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+  SET(FNVECS_LIB sundials_fnvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(KINSOL_LIB sundials_kinsol_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+  SET(FNVECS_LIB sundials_fnvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Only static FCMIX libraries are available
+
+SET(FKINSOL_LIB sundials_fkinsol_static)
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${FKINSOL_LIB} ${KINSOL_LIB} ${FNVECS_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each FKINSOL example
+
+FOREACH(example ${FKINSOL_examples})
+  ADD_EXECUTABLE(${example} ${example}.f)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/fcmix_serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${FKINSOL_examples})
+
+# If Lapack support is enabled, add the build and install targets for
+# the examples using Lapack
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${FKINSOL_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.f)
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.f ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/fcmix_serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${FKINSOL_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/fcmix_serial)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "KINSOL")
+  SET(SOLVER_LIB "sundials_kinsol")
+  SET(SOLVER_FLIB "sundials_fkinsol")
+  LIST2STRING(FKINSOL_examples EXAMPLES)
+  IF(LAPACK_FOUND)
+    LIST2STRING(FKINSOL_examples_BL EXAMPLES_BL)
+  ELSE(LAPACK_FOUND)
+    SET(EXAMPLES_BL "")
+  ENDIF(LAPACK_FOUND)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/kinsol/fcmix_serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/kinsol/fcmix_serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/fcmix_serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_F77_ex.in
+      ${PROJECT_BINARY_DIR}/examples/kinsol/fcmix_serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/kinsol/fcmix_serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/fcmix_serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/kinsol/fcmix_serial/README b/examples/kinsol/fcmix_serial/README
new file mode 100644
index 0000000..d23c56f
--- /dev/null
+++ b/examples/kinsol/fcmix_serial/README
@@ -0,0 +1,49 @@
+List of serial KINSOL FCMIX examples
+
+  fkinDiagon_kry: simple diagonal test with Fortran interface
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/kinsol/fcmix_serial/fkinDiagon_kry.f b/examples/kinsol/fcmix_serial/fkinDiagon_kry.f
new file mode 100644
index 0000000..87f1553
--- /dev/null
+++ b/examples/kinsol/fcmix_serial/fkinDiagon_kry.f
@@ -0,0 +1,232 @@
+      program fkinDiagon_kry
+c     ----------------------------------------------------------------
+c     $Revision: 4881 $
+c     $Date: 2016-09-01 15:31:14 -0700 (Thu, 01 Sep 2016) $
+c     ----------------------------------------------------------------
+c     Programmer(s): Allan Taylor, Alan Hindmarsh and
+c                    Radu Serban @ LLNL  
+c     ----------------------------------------------------------------
+c     Simple diagonal test with Fortran interface, using user-supplied
+c     preconditioner setup and solve routines (supplied in Fortran).
+c
+c     This example does a basic test of the solver by solving the
+c     system:
+c               f(u) = 0  for
+c               f(u) = u(i)^2 - i^2
+c
+c     No scaling is done.
+c     An approximate diagonal preconditioner is used.
+c
+c     ----------------------------------------------------------------
+c
+      implicit none
+
+      integer PROBSIZE
+      parameter(PROBSIZE=128)
+c The following declaration specification should match C type long int.
+      integer*8 neq, iout(15), msbpre
+      integer ier, globalstrat, maxl, maxlrst, i
+      double precision pp, fnormtol, scsteptol
+      double precision rout(2), uu(PROBSIZE), scale(PROBSIZE)
+      double precision constr(PROBSIZE)
+
+      common /pcom/ pp(PROBSIZE)
+      common /psize/ neq
+
+      neq = PROBSIZE
+      globalstrat = 0
+      fnormtol = 1.0d-5
+      scsteptol = 1.0d-4
+      maxl = 10
+      maxlrst = 2
+      msbpre  = 5
+
+c * * * * * * * * * * * * * * * * * * * * * *
+
+      call fnvinits(3, neq, ier)
+      if (ier .ne. 0) then
+         write(6,1220) ier
+ 1220    format('SUNDIALS_ERROR: FNVINITS returned IER = ', i4)
+         stop
+      endif
+
+      do 20 i = 1, neq
+         uu(i) = 2.0d0 * i
+         scale(i) = 1.0d0
+         constr(i) = 0.0d0
+  20  continue
+
+      call fkincreate(ier)
+      if (ier .ne. 0) then
+         write(6,1230) ier
+ 1230    format('SUNDIALS_ERROR: FKINCREATE returned IER = ', i4)
+         stop
+      endif
+
+      call fkinsetiin('MAX_SETUPS', msbpre, ier)
+      if (ier .ne. 0) then
+         write(6,1231) ier
+ 1231    format('SUNDIALS_ERROR: FKINSETIIN returned IER = ', i4)
+         call fkinfree
+         stop
+      endif
+
+      call fkinsetrin('FNORM_TOL', fnormtol, ier)
+      if (ier .ne. 0) then
+         write(6,1232) ier
+ 1232    format('SUNDIALS_ERROR: FKINSETRIN returned IER = ', i4)
+         call fkinfree
+         stop
+      endif
+
+      call fkinsetrin('SSTEP_TOL', scsteptol, ier)
+      if (ier .ne. 0) then
+         write(6,1232) ier
+         call fkinfree
+         stop
+      endif
+
+      call fkinsetvin('CONSTR_VEC', constr, ier)
+      if (ier .ne. 0) then
+         write(6,1233) ier
+ 1233    format('SUNDIALS_ERROR: FKINSETVIN returned IER = ', i4)
+         call fkinfree
+         stop
+      endif
+
+      call fkininit(iout, rout, ier)
+      if (ier .ne. 0) then
+         write(6,1234) ier
+ 1234    format('SUNDIALS_ERROR: FKININIT returned IER = ', i4)
+         stop
+      endif
+
+      call fkinspgmr(maxl, maxlrst, ier)
+      if (ier .ne. 0) then
+         write(6,1235) ier
+ 1235    format('SUNDIALS_ERROR: FKINSPGMR returned IER = ', i4)
+         call fkinfree
+         stop
+      endif
+
+      call fkinspilssetprec(1, ier)
+
+      write(6,1240)
+ 1240 format('Example program fkinDiagon_kry:'//' This FKINSOL example',
+     1       ' solves a 128 eqn diagonal algebraic system.'/
+     2       ' Its purpose is to demonstrate the use of the Fortran',
+     3       ' interface'/' in a serial environment.'///
+     4       ' globalstrategy = KIN_NONE')
+
+      call fkinsol(uu, globalstrat, scale, scale, ier)
+      if (ier .lt. 0) then
+         write(6,1242) ier, iout(9)
+ 1242    format('SUNDIALS_ERROR: FKINSOL returned IER = ', i4, /,
+     1          '                Linear Solver returned IER = ', i4)
+         call fkinfree
+         stop
+      endif
+
+      write(6,1245) ier
+ 1245 format(/' FKINSOL return code is ', i4)
+
+      write(6,1246)
+ 1246 format(//' The resultant values of uu are:'/)
+
+      do 30 i = 1, neq, 4
+         write(6,1256) i, uu(i), uu(i+1), uu(i+2), uu(i+3)
+ 1256    format(i4, 4(1x, f10.6))
+ 30   continue
+
+      write(6,1267) iout(3), iout(14), iout(4), iout(12), iout(13),
+     1              iout(15)
+ 1267 format(//'Final statistics:'//
+     1     '  nni = ', i3, ',  nli  = ', i3, /,
+     2     '  nfe = ', i3, ',  npe  = ', i3, /,
+     3     '  nps = ', i3, ',  ncfl = ', i3)
+
+      call fkinfree
+
+      stop
+      end
+      
+c * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+c     The function defining the system f(u) = 0 must be defined by a Fortran
+c     function of the following form.
+      
+      subroutine fkfun(uu, fval, ier)
+
+      implicit none
+
+      integer ier, i
+c The following declaration specification should match C type long int.
+      integer*8 neq
+      double precision fval(*), uu(*)
+
+      common /psize/ neq
+
+      do 10 i = 1, neq
+         fval(i) = uu(i) * uu(i) - i * i
+ 10   continue
+
+      ier = 0
+
+      return
+      end
+      
+      
+c * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+c     The routine kpreco is the preconditioner setup routine. It must have
+c     that specific name be used in order that the c code can find and link
+c     to it.  The argument list must also be as illustrated below:
+      
+      subroutine fkpset(udata, uscale, fdata, fscale, vtemp1, vtemp2,
+     1                  ier)
+
+      implicit none
+
+      integer ier, i
+c The following declaration specification should match C type long int.
+      integer*8 neq
+      double precision pp
+      double precision udata(*), uscale(*), fdata(*), fscale(*)
+      double precision vtemp1(*), vtemp2(*)
+
+      common /pcom/ pp(128)
+      common /psize/ neq
+
+      do 10 i = 1, neq
+         pp(i) = 0.5d0 / (udata(i) + 5.0d0)
+ 10   continue
+      ier = 0
+      
+      return
+      end
+      
+      
+c * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+c     The routine kpsol is the preconditioner solve routine. It must have
+c     that specific name be used in order that the c code can find and link
+c     to it.  The argument list must also be as illustrated below:
+      
+      subroutine fkpsol(udata, uscale, fdata, fscale, vv, ftem, ier)
+
+      implicit none
+
+      integer ier, i
+c The following declaration specification should match C type long int.
+      integer*8 neq
+      double precision pp
+      double precision udata(*), uscale(*), fdata(*), fscale(*)
+      double precision vv(*), ftem(*)
+
+      common /pcom/ pp(128)
+      common /psize/ neq
+
+      do 10 i = 1, neq
+         vv(i) = vv(i) * pp(i)
+ 10   continue
+      ier = 0
+      
+      return
+      end
diff --git a/examples/kinsol/fcmix_serial/fkinDiagon_kry.out b/examples/kinsol/fcmix_serial/fkinDiagon_kry.out
new file mode 100644
index 0000000..27dd57d
--- /dev/null
+++ b/examples/kinsol/fcmix_serial/fkinDiagon_kry.out
@@ -0,0 +1,53 @@
+Example program fkinDiagon_kry:
+
+ This FKINSOL example solves a 128 eqn diagonal algebraic system.
+ Its purpose is to demonstrate the use of the Fortran interface
+ in a serial environment.
+
+
+ globalstrategy = KIN_NONE
+
+ FKINSOL return code is   0
+
+
+ The resultant values of uu are:
+
+   1   1.000000   2.000000   3.000000   4.000000
+   5   5.000000   6.000000   7.000000   8.000000
+   9   9.000000  10.000000  11.000000  12.000000
+  13  13.000000  14.000000  15.000000  16.000000
+  17  17.000000  18.000000  19.000000  20.000000
+  21  21.000000  22.000000  23.000000  24.000000
+  25  25.000000  26.000000  27.000000  28.000000
+  29  29.000000  30.000000  31.000000  32.000000
+  33  33.000000  34.000000  35.000000  36.000000
+  37  37.000000  38.000000  39.000000  40.000000
+  41  41.000000  42.000000  43.000000  44.000000
+  45  45.000000  46.000000  47.000000  48.000000
+  49  49.000000  50.000000  51.000000  52.000000
+  53  53.000000  54.000000  55.000000  56.000000
+  57  57.000000  58.000000  59.000000  60.000000
+  61  61.000000  62.000000  63.000000  64.000000
+  65  65.000000  66.000000  67.000000  68.000000
+  69  69.000000  70.000000  71.000000  72.000000
+  73  73.000000  74.000000  75.000000  76.000000
+  77  77.000000  78.000000  79.000000  80.000000
+  81  81.000000  82.000000  83.000000  84.000000
+  85  85.000000  86.000000  87.000000  88.000000
+  89  89.000000  90.000000  91.000000  92.000000
+  93  93.000000  94.000000  95.000000  96.000000
+  97  97.000000  98.000000  99.000000 100.000000
+ 101 101.000000 102.000000 103.000000 104.000000
+ 105 105.000000 106.000000 107.000000 108.000000
+ 109 109.000000 110.000000 111.000000 112.000000
+ 113 113.000000 114.000000 115.000000 116.000000
+ 117 117.000000 118.000000 119.000000 120.000000
+ 121 121.000000 122.000000 123.000000 124.000000
+ 125 125.000000 126.000000 127.000000 128.000000
+
+
+Final statistics:
+
+  nni =   7,  nli  =  21
+  nfe =   8,  npe  =   2
+  nps =  28,  ncfl =   0
diff --git a/examples/kinsol/parallel/CMakeLists.txt b/examples/kinsol/parallel/CMakeLists.txt
new file mode 100644
index 0000000..4a08d8f
--- /dev/null
+++ b/examples/kinsol/parallel/CMakeLists.txt
@@ -0,0 +1,133 @@
+# ---------------------------------------------------------------
+# $Revision: 4137 $
+# $Date: 2014-06-15 12:26:15 -0700 (Sun, 15 Jun 2014) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for KINSOL parallel examples
+
+
+# Add variable KINSOL_examples with the names of the parallel KINSOL examples
+# "name\;nodes\;tasks"
+SET(KINSOL_examples
+  "kinFoodWeb_kry_bbd_p\;1\;4"
+  "kinFoodWeb_kry_p\;1\;4"
+  )
+
+# Check whether we use MPI compiler scripts.
+# If yes, then change the C compiler to the MPICC script.
+# If not, then add the MPI include directory for MPI headers.
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(KINSOL_LIB sundials_kinsol_static)
+  SET(NVECP_LIB sundials_nvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(KINSOL_LIB sundials_kinsol_shared)
+  SET(NVECP_LIB sundials_nvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${KINSOL_LIB} ${NVECP_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+# Add the build and install targets for each KINSOL example
+
+FOREACH(example_tuple ${KINSOL_examples})
+  list(GET example_tuple 0 example)
+  list(GET example_tuple 1 number_of_nodes)
+  list(GET example_tuple 2 number_of_tasks)
+  # first item is example
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example} MPI_NPROCS ${number_of_tasks})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(NOT MPI_MPICC)
+    TARGET_LINK_LIBRARIES(${example} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARIES})
+  ENDIF(NOT MPI_MPICC)
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example_tuple ${KINSOL_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/parallel)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "KINSOL")
+  SET(SOLVER_LIB "sundials_kinsol")
+  FOREACH(example_tuple ${KINSOL_examples})
+  	list(GET example_tuple 0 example)
+  	LIST2STRING(example EXAMPLES)
+  ENDFOREACH(example_tuple ${KINSOL_examples})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/kinsol/parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/kinsol/parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/parallel 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/kinsol/parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/kinsol/parallel/Makefile_ex
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/parallel
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/kinsol/parallel/README b/examples/kinsol/parallel/README
new file mode 100644
index 0000000..f2d9bf4
--- /dev/null
+++ b/examples/kinsol/parallel/README
@@ -0,0 +1,50 @@
+List of parallel KINSOL examples
+
+  kinFoodWeb_kry_bbd_p: 2-D food web system, BBD preconditioner
+  kinFoodWeb_kry_p:     2-D food web system, block-diagonal preconditioner
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/kinsol/parallel/kinFoodWeb_kry_bbd_p.c b/examples/kinsol/parallel/kinFoodWeb_kry_bbd_p.c
new file mode 100644
index 0000000..0543096
--- /dev/null
+++ b/examples/kinsol/parallel/kinFoodWeb_kry_bbd_p.c
@@ -0,0 +1,1009 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem for KINSOL (parallel machine case) using the BBD
+ * preconditioner.
+ *
+ * This example solves a nonlinear system that arises from a system
+ * of partial differential equations. The PDE system is a food web
+ * population model, with predator-prey interaction and diffusion on
+ * the unit square in two dimensions. The dependent variable vector
+ * is the following:
+ * 
+ *       1   2         ns
+ * c = (c , c ,  ..., c  )     (denoted by the variable cc)
+ *
+ * and the PDE's are as follows:
+ *
+ *                    i       i
+ *         0 = d(i)*(c     + c    )  +  f  (x,y,c)   (i=1,...,ns)
+ *                    xx      yy         i
+ *
+ *   where
+ *
+ *                   i             ns         j
+ *   f  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The number np is both the
+ * number of prey and predator species. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *   a(i,i) = -AA   (all i)
+ *   a(i,j) = -GG   (i <= np , j >  np)
+ *   a(i,j) =  EE   (i >  np,  j <= np)
+ *   b(i) = BB * (1 + alpha * x * y)   (i <= np)
+ *   b(i) =-BB * (1 + alpha * x * y)   (i >  np)
+ *   d(i) = DPREY   (i <= np)
+ *   d(i) = DPRED   ( i > np)
+ *
+ * The various scalar parameters are set using define's or in
+ * routine InitUserData.
+ *
+ * The boundary conditions are: normal derivative = 0, and the
+ * initial guess is constant in x and y, although the final
+ * solution is not.
+ *
+ * The PDEs are discretized by central differencing on a MX by
+ * MY mesh.
+ *
+ * The nonlinear system is solved by KINSOL using the method
+ * specified in the local variable globalstrat.
+ *
+ * The preconditioner matrix is a band-block-diagonal matrix
+ * using the KINBBDPRE module. The half-bandwidths are as follows:
+ *
+ *   Difference quotient half-bandwidths mldq = mudq = 2*ns - 1
+ *   Retained banded blocks have half-bandwidths mlkeep = mukeep = ns.
+ *
+ * -----------------------------------------------------------------
+ * References:
+ *
+ * 1. Peter N. Brown and Youcef Saad,
+ *    Hybrid Krylov Methods for Nonlinear Systems of Equations
+ *    LLNL report UCRL-97645, November 1987.
+ *
+ * 2. Peter N. Brown and Alan C. Hindmarsh,
+ *    Reduced Storage Matrix Methods in Stiff ODE systems,
+ *    Lawrence Livermore National Laboratory Report  UCRL-95088,
+ *    Rev. 1, June 1987, and  Journal of Applied Mathematics and
+ *    Computation, Vol. 31 (May 1989), pp. 40-91. (Presents a
+ *    description of the time-dependent version of this
+ *    test problem.)
+ * --------------------------------------------------------------------------
+ *  Run command line: mpirun -np N -machinefile machines kinFoodWeb_kry_bbd_p
+ *  where N = NPEX * NPEY is the number of processors.
+ * --------------------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_spgmr.h>
+#include <kinsol/kinsol_bbdpre.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+#include <mpi.h>
+
+
+/* Problem Constants */
+
+#define NUM_SPECIES     6  /*  must equal 2*(number of prey or predators)
+                               number of prey =  number of predators      */
+
+#define PI       RCONST(3.1415926535898)   /* pi */ 
+
+#define NPEX        2            /* number of processors in the x-direction */
+#define NPEY        2            /* number of processors in the y-direction */
+#define MXSUB       10           /* number of x mesh points per subgrid     */
+#define MYSUB       10           /* number of y mesh points per subgrid     */
+#define MX          (NPEX*MXSUB) /* number of grid points in x-direction    */
+#define MY          (NPEY*MYSUB) /* number of grid points in y-direction    */
+#define NSMXSUB     (NUM_SPECIES * MXSUB)
+#define NSMXSUB2    (NUM_SPECIES * (MXSUB+2))
+#define NEQ         (NUM_SPECIES*MX*MY)  /* number of equations in system   */ 
+#define AA          RCONST(1.0)    /* value of coefficient AA in above eqns */
+#define EE          RCONST(10000.) /* value of coefficient EE in above eqns */
+#define GG          RCONST(0.5e-6) /* value of coefficient GG in above eqns */
+#define BB          RCONST(1.0)    /* value of coefficient BB in above eqns */
+#define DPREY       RCONST(1.0)    /* value of coefficient dprey above */
+#define DPRED       RCONST(0.5)    /* value of coefficient dpred above */
+#define ALPHA       RCONST(1.0)    /* value of coefficient alpha above */
+#define AX          RCONST(1.0)    /* total range of x variable */
+#define AY          RCONST(1.0)    /* total range of y variable */
+#define FTOL        RCONST(1.e-7)  /*  ftol tolerance */
+#define STOL        RCONST(1.e-13) /*  stol tolerance */
+#define THOUSAND    RCONST(1000.0) /* one thousand */
+#define ZERO        RCONST(0.0)    /* 0. */
+#define ONE         RCONST(1.0)    /* 1. */
+#define PREYIN      RCONST(1.0)    /* initial guess for prey concentrations. */
+#define PREDIN      RCONST(30000.0)/* initial guess for predator concs.      */
+
+/* User-defined vector access macro: IJ_Vptr */
+
+/* IJ_Vptr is defined in order to translate from the underlying 3D structure
+   of the dependent variable vector to the 1D storage scheme for an N-vector.
+   IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+   indices is = 0, jx = i, jy = j.    */
+
+#define IJ_Vptr(vv,i,j)   (&NV_Ith_P(vv, i*NUM_SPECIES + j*NSMXSUB))
+
+/* Type : UserData 
+   contains problem constants and extended array */
+
+typedef struct {
+  realtype **acoef, *bcoef;
+  N_Vector rates;
+  realtype *cox, *coy;
+  realtype ax, ay, dx, dy;
+  long int Nlocal;
+  int mx, my, ns, np;
+  realtype cext[NUM_SPECIES * (MXSUB+2)*(MYSUB+2)];
+  int my_pe, isubx, isuby, nsmxsub, nsmxsub2;
+  MPI_Comm comm;
+} *UserData;
+
+/* Function called by the KINSol Solver */
+
+static int func(N_Vector cc, N_Vector fval, void *user_data);
+
+static int ccomm(long int Nlocal, N_Vector cc, void *data);
+
+static int func_local(long int Nlocal, N_Vector cc, N_Vector fval, void *user_data);
+
+/* Private Helper Functions */
+
+static UserData AllocUserData(void);
+static void InitUserData(int my_pe, long int Nlocal, MPI_Comm comm, UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector cc, N_Vector sc);
+static void PrintHeader(int globalstrategy, int maxl, int maxlrst,
+                        long int mudq, long int mldq,
+			long int mukeep, long int mlkeep,
+                        realtype fnormtol, realtype scsteptol);
+static void PrintOutput(int my_pe, MPI_Comm comm, N_Vector cc);
+static void PrintFinalStats(void *kmem);
+static void WebRate(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy,
+                    void *user_data);
+static realtype DotProd(int size, realtype *x1, realtype *x2);
+static void BSend(MPI_Comm comm, int my_pe, int isubx,
+                  int isuby, int dsizex, int dsizey,
+                  realtype *cdata);
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int isubx, int isuby,
+                      int dsizex, int dsizey,
+                      realtype *cext, realtype *buffer);
+static void BRecvWait(MPI_Request request[], int isubx,
+                      int isuby, int dsizex, realtype *cext,
+                      realtype *buffer);
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+{
+  MPI_Comm comm;
+  void *kmem;
+  UserData data;
+  N_Vector cc, sc, constraints;
+  int globalstrategy;
+  long int Nlocal;
+  realtype fnormtol, scsteptol, dq_rel_uu;
+  int flag, maxl, maxlrst;
+  long int mudq, mldq, mukeep, mlkeep;
+  int my_pe, npes, npelast = NPEX*NPEY-1;
+
+  data = NULL;
+  kmem = NULL;
+  cc = sc = constraints = NULL;
+
+  /* Get processor number and total number of pe's */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  if (npes != NPEX*NPEY) {
+    if (my_pe == 0)
+      printf("\nMPI_ERROR(0): npes=%d is not equal to NPEX*NPEY=%d\n", npes,
+             NPEX*NPEY);
+    return(1);
+  }
+
+  /* Allocate memory, and set problem data, initial values, tolerances */ 
+
+  /* Set local length */
+  Nlocal = NUM_SPECIES*MXSUB*MYSUB;
+
+  /* Allocate and initialize user data block */
+  data = AllocUserData();
+  if (check_flag((void *)data, "AllocUserData", 2, my_pe)) MPI_Abort(comm, 1);
+  InitUserData(my_pe, Nlocal, comm, data);
+
+  /* Choose global strategy */
+  globalstrategy = KIN_NONE;
+
+  /* Allocate and initialize vectors */
+  cc = N_VNew_Parallel(comm, Nlocal, NEQ);
+  if (check_flag((void *)cc, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  sc = N_VNew_Parallel(comm, Nlocal, NEQ);
+  if (check_flag((void *)sc, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  data->rates = N_VNew_Parallel(comm, Nlocal, NEQ);
+  if (check_flag((void *)data->rates, "N_VNew_Parallel", 0, my_pe))
+      MPI_Abort(comm, 1);
+  constraints = N_VNew_Parallel(comm, Nlocal, NEQ);
+  if (check_flag((void *)constraints, "N_VNew_Parallel", 0, my_pe))
+      MPI_Abort(comm, 1);
+  N_VConst(ZERO, constraints);
+  
+  SetInitialProfiles(cc, sc);
+
+  fnormtol = FTOL; scsteptol = STOL;
+
+  /* Call KINCreate/KINInit to initialize KINSOL: 
+     nvSpec  points to machine environment data
+     A pointer to KINSOL problem memory is returned and stored in kmem. */
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0, my_pe)) MPI_Abort(comm, 1);
+
+  /* Vector cc passed as template vector. */
+  flag = KINInit(kmem, func, cc);
+  if (check_flag(&flag, "KINInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = KINSetUserData(kmem, data);
+  if (check_flag(&flag, "KINSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = KINSetConstraints(kmem, constraints);
+  if (check_flag(&flag, "KINSetConstraints", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* We no longer need the constraints vector since KINSetConstraints
+     creates a private copy for KINSOL to use. */
+  N_VDestroy_Parallel(constraints);
+
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = KINSetScaledStepTol(kmem, scsteptol);
+  if (check_flag(&flag, "KINSetScaledStepTol", 1, my_pe)) MPI_Abort(comm, 1);
+  
+  /* Call KINBBDPrecInit to initialize and allocate memory for the
+     band-block-diagonal preconditioner, and specify the local and
+     communication functions func_local and gcomm=NULL (all communication
+     needed for the func_local is already done in func). */
+  dq_rel_uu = ZERO;
+  mudq = mldq = 2*NUM_SPECIES - 1;
+  mukeep = mlkeep = NUM_SPECIES;
+
+  /* Call KINBBDSpgmr to specify the linear solver KINSPGMR */
+  maxl = 20; maxlrst = 2;
+  flag = KINSpgmr(kmem, maxl);
+  if (check_flag(&flag, "KINSpgmr", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Initialize BBD preconditioner */
+  flag = KINBBDPrecInit(kmem, Nlocal, mudq, mldq, mukeep, mlkeep,
+                        dq_rel_uu, func_local, NULL);
+  if (check_flag(&flag, "KINBBDPrecInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+
+  flag = KINSpilsSetMaxRestarts(kmem, maxlrst);
+  if (check_flag(&flag, "KINSpilsSetMaxRestarts", 1, my_pe)) 
+    MPI_Abort(comm, 1);
+
+  /* Print out the problem size, solution parameters, initial guess. */
+  if (my_pe == 0)
+    PrintHeader(globalstrategy, maxl, maxlrst, mudq, mldq, mukeep,
+		mlkeep, fnormtol, scsteptol);
+
+  /* call KINSol and print output concentration profile */
+  flag = KINSol(kmem,           /* KINSol memory block */
+                cc,             /* initial guesss on input; solution vector */
+                globalstrategy, /* global stragegy choice */
+                sc,             /* scaling vector, for the variable cc */
+                sc);            /* scaling vector for function values fval */
+  if (check_flag(&flag, "KINSol", 1, my_pe)) MPI_Abort(comm, 1);
+
+  if (my_pe == 0) printf("\n\nComputed equilibrium species concentrations:\n");
+  if (my_pe == 0 || my_pe==npelast) PrintOutput(my_pe, comm, cc);
+  
+  /* Print final statistics and free memory */
+  if (my_pe == 0) 
+    PrintFinalStats(kmem);
+
+  N_VDestroy_Parallel(cc);
+  N_VDestroy_Parallel(sc);
+
+  KINFree(&kmem);
+  FreeUserData(data);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/* Readability definitions used in other routines below */
+
+#define acoef  (data->acoef)
+#define bcoef  (data->bcoef)
+#define cox    (data->cox)
+#define coy    (data->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY KINSOL
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * ccomm routine.  This routine performs all communication 
+ * between processors of data needed to calculate f. 
+ */
+
+static int ccomm(long int Nlocal, N_Vector cc, void *userdata)
+{
+
+  realtype *cdata, *cext, buffer[2*NUM_SPECIES*MYSUB];
+  UserData data;
+  MPI_Comm comm;
+  int my_pe, isubx, isuby, nsmxsub, nsmysub;
+  MPI_Request request[4];
+
+  /* Get comm, my_pe, subgrid indices, data sizes, extended array cext */
+  data = (UserData) userdata;
+  comm = data->comm;  my_pe = data->my_pe;
+  isubx = data->isubx;   isuby = data->isuby;
+  nsmxsub = data->nsmxsub;
+  nsmysub = NUM_SPECIES*MYSUB;
+  cext = data->cext;
+
+  cdata = N_VGetArrayPointer_Parallel(cc);
+
+  /* Start receiving boundary data from neighboring PEs */
+  BRecvPost(comm, request, my_pe, isubx, isuby, nsmxsub, nsmysub, cext, buffer);
+
+  /* Send data from boundary of local grid to neighboring PEs */
+  BSend(comm, my_pe, isubx, isuby, nsmxsub, nsmysub, cdata);
+
+  /* Finish receiving boundary data from neighboring PEs */
+  BRecvWait(request, isubx, isuby, nsmxsub, cext, buffer);
+
+  return(0);
+}
+
+/*
+ * System function for predator-prey system - calculation part 
+ */
+
+static int func_local(long int Nlocal, N_Vector cc, N_Vector fval, void *user_data)
+{
+  realtype xx, yy, *cxy, *rxy, *fxy, dcydi, dcyui, dcxli, dcxri;
+  realtype *cext, dely, delx, *cdata;
+  int i, jx, jy, is, ly;
+  int isubx, isuby, nsmxsub, nsmxsub2;
+  int shifty, offsetc, offsetce, offsetcl, offsetcr, offsetcd, offsetcu;
+  UserData data;
+  
+  data = (UserData)user_data;
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Get subgrid indices, data sizes, extended work array cext */
+  isubx = data->isubx;   isuby = data->isuby;
+  nsmxsub = data->nsmxsub; nsmxsub2 = data->nsmxsub2;
+  cext = data->cext;
+  
+  /* Copy local segment of cc vector into the working extended array cext */
+  offsetc = 0;
+  offsetce = nsmxsub2 + NUM_SPECIES;
+  for (ly = 0; ly < MYSUB; ly++) {
+    for (i = 0; i < nsmxsub; i++) cext[offsetce+i] = cdata[offsetc+i];
+    offsetc = offsetc + nsmxsub;
+    offsetce = offsetce + nsmxsub2;
+  }
+  
+  /* To facilitate homogeneous Neumann boundary conditions, when this is a
+     boundary PE, copy data from the first interior mesh line of cc to cext */
+  
+  /* If isuby = 0, copy x-line 2 of cc to cext */
+  if (isuby == 0) {
+    for (i = 0; i < nsmxsub; i++) cext[NUM_SPECIES+i] = cdata[nsmxsub+i];
+  }
+  
+  /* If isuby = NPEY-1, copy x-line MYSUB-1 of cc to cext */
+  if (isuby == NPEY-1) {
+    offsetc = (MYSUB-2)*nsmxsub;
+    offsetce = (MYSUB+1)*nsmxsub2 + NUM_SPECIES;
+    for (i = 0; i < nsmxsub; i++) cext[offsetce+i] = cdata[offsetc+i];
+  }
+  
+  /* If isubx = 0, copy y-line 2 of cc to cext */
+  if (isubx == 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetc = ly*nsmxsub + NUM_SPECIES;
+      offsetce = (ly+1)*nsmxsub2;
+      for (i = 0; i < NUM_SPECIES; i++) cext[offsetce+i] = cdata[offsetc+i];
+    }
+  }
+  
+  /* If isubx = NPEX-1, copy y-line MXSUB-1 of cc to cext */
+  if (isubx == NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetc = (ly+1)*nsmxsub - 2*NUM_SPECIES;
+      offsetce = (ly+2)*nsmxsub2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++) cext[offsetce+i] = cdata[offsetc+i];
+    }
+  }
+
+  /* Loop over all mesh points, evaluating rate arra at each point */
+  delx = data->dx;
+  dely = data->dy;
+  shifty = (MXSUB+2)*NUM_SPECIES;
+
+  for (jy = 0; jy < MYSUB; jy++) {
+
+    yy = dely*(jy + isuby * MYSUB);
+
+    for (jx = 0; jx < MXSUB; jx++) {
+
+      xx = delx * (jx + isubx * MXSUB);
+      cxy = IJ_Vptr(cc,jx,jy);
+      rxy = IJ_Vptr(data->rates,jx,jy);
+      fxy = IJ_Vptr(fval,jx,jy);
+      
+      WebRate(xx, yy, cxy, rxy, user_data);
+
+      offsetc = (jx+1)*NUM_SPECIES + (jy+1)*NSMXSUB2;
+      offsetcd = offsetc - shifty;
+      offsetcu = offsetc + shifty;
+      offsetcl = offsetc - NUM_SPECIES;
+      offsetcr = offsetc + NUM_SPECIES;
+      
+      for (is = 0; is < NUM_SPECIES; is++) {
+        
+        /* differencing in x */
+        dcydi = cext[offsetc+is]  - cext[offsetcd+is];
+        dcyui = cext[offsetcu+is] - cext[offsetc+is];
+        
+        /* differencing in y */
+        dcxli = cext[offsetc+is]  - cext[offsetcl+is];
+        dcxri = cext[offsetcr+is] - cext[offsetc+is];
+        
+        /* compute the value at xx , yy */
+        fxy[is] = (coy)[is] * (dcyui - dcydi) +
+          (cox)[is] * (dcxri - dcxli) + rxy[is];
+        
+      } /* end of is loop */
+      
+    } /* end of jx loop */
+    
+  } /* end of jy loop */
+
+  return(0);
+}
+
+/*
+ * System function routine.  Evaluate f(cc).  First call ccomm to do 
+ * communication of subgrid boundary data into cext.  Then calculate f
+ * by a call to func_local. 
+ */
+
+static int func(N_Vector cc, N_Vector fval, void *user_data)
+{
+  UserData data;
+
+  data = (UserData) user_data;
+
+  /* Call ccomm to do inter-processor communicaiton */
+  ccomm(data->Nlocal, cc, data);
+
+  /* Call func_local to calculate all right-hand sides */
+  func_local(data->Nlocal, cc, fval, data);
+
+  return(0);
+}
+
+/*
+ * Interaction rate function routine 
+ */
+
+static void WebRate(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                    void *user_data)
+{
+  int i;
+  realtype fac;
+  UserData data;
+  
+  data = (UserData)user_data;
+  
+  for (i = 0; i<NUM_SPECIES; i++)
+    ratesxy[i] = DotProd(NUM_SPECIES, cxy, acoef[i]);
+  
+  fac = ONE + ALPHA * xx * yy;
+  
+  for (i = 0; i < NUM_SPECIES; i++)
+    ratesxy[i] = cxy[i] * ( bcoef[i] * fac + ratesxy[i] );  
+}
+
+/*
+ * Dot product routine for realtype arrays 
+ */
+
+static realtype DotProd(int size, realtype *x1, realtype *x2)
+{
+  int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+
+  return(temp);  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Allocate memory for data structure of type UserData 
+ */
+
+static UserData AllocUserData(void)
+{
+  UserData data;
+  
+  data = (UserData) malloc(sizeof *data);
+  
+  acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  bcoef = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  cox   = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  coy   = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  
+  return(data);
+}
+
+/* 
+ * Load problem constants in data 
+ */
+
+static void InitUserData(int my_pe, long int Nlocal, MPI_Comm comm, UserData data)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  data->mx = MX;
+  data->my = MY;
+  data->ns = NUM_SPECIES;
+  data->np = NUM_SPECIES/2;
+  data->ax = AX;
+  data->ay = AY;
+  data->dx = (data->ax)/(MX-1);
+  data->dy = (data->ay)/(MY-1);
+  data->my_pe = my_pe;
+  data->Nlocal = Nlocal;
+  data->comm = comm;
+  data->isuby = my_pe/NPEX;
+  data->isubx = my_pe - data->isuby*NPEX;
+  data->nsmxsub = NUM_SPECIES * MXSUB;
+  data->nsmxsub2 = NUM_SPECIES * (MXSUB+2);
+  
+  /* Set up the coefficients a and b plus others found in the equations */
+  np = data->np;
+
+  dx2=(data->dx)*(data->dx); dy2=(data->dy)*(data->dy);
+
+  for (i = 0; i < np; i++) {
+    a1= &(acoef[i][np]);
+    a2= &(acoef[i+np][0]);
+    a3= &(acoef[i][0]);
+    a4= &(acoef[i+np][np]);
+
+    /*  Fill in the portion of acoef in the four quadrants, row by row */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+
+    /* and then change the diagonal elements of acoef to -AA */
+    acoef[i][i]=-AA;
+    acoef[i+np][i+np] = -AA;
+
+    bcoef[i] = BB;
+    bcoef[i+np] = -BB;
+
+    cox[i]=DPREY/dx2;
+    cox[i+np]=DPRED/dx2;
+
+    coy[i]=DPREY/dy2;
+    coy[i+np]=DPRED/dy2;
+  }
+}
+
+/*
+ * Free data memory 
+ */
+
+static void FreeUserData(UserData data)
+{
+
+  destroyMat(acoef);
+  free(bcoef);
+  free(cox); free(coy);
+  N_VDestroy_Parallel(data->rates);
+
+  free(data);
+
+}
+
+/*
+ * Set initial conditions in cc 
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector sc)
+{
+  int i, jx, jy;
+  realtype *cloc, *sloc;
+  realtype  ctemp[NUM_SPECIES], stemp[NUM_SPECIES];
+
+  /* Initialize arrays ctemp and stemp used in the loading process */
+  for (i = 0; i < NUM_SPECIES/2; i++) {
+    ctemp[i] = PREYIN;
+    stemp[i] = ONE;
+  }
+  for (i = NUM_SPECIES/2; i < NUM_SPECIES; i++) {
+    ctemp[i] = PREDIN;
+    stemp[i] = RCONST(0.00001);
+  }
+
+  /* Load initial profiles into cc and sc vector from ctemp and stemp. */
+  for (jy = 0; jy < MYSUB; jy++) {
+    for (jx=0; jx < MXSUB; jx++) {
+      cloc = IJ_Vptr(cc,jx,jy);
+      sloc = IJ_Vptr(sc,jx,jy);
+      for (i = 0; i < NUM_SPECIES; i++){
+        cloc[i] = ctemp[i];
+        sloc[i] = stemp[i];
+      }
+    }
+  }
+  
+}
+
+/*
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(int globalstrategy, int maxl, int maxlrst,
+                        long int mudq, long int mldq,
+			long int mukeep, long int mlkeep,
+                        realtype fnormtol, realtype scsteptol)
+{
+    printf("\nPredator-prey test problem--  KINSol (parallel-BBD version)\n\n");
+    printf("Mesh dimensions = %d X %d\n", MX, MY);
+    printf("Number of species = %d\n", NUM_SPECIES);
+    printf("Total system size = %d\n\n", NEQ);
+    printf("Subgrid dimensions = %d X %d\n", MXSUB, MYSUB);
+    printf("Processor array is %d X %d\n\n", NPEX, NPEY);
+    printf("Flag globalstrategy = %d (0 = None, 1 = Linesearch)\n",
+           globalstrategy);
+    printf("Linear solver is SPGMR with maxl = %d, maxlrst = %d\n",
+           maxl, maxlrst);
+    printf("Preconditioning uses band-block-diagonal matrix from KINBBDPRE\n");
+    printf("  Difference quotient half-bandwidths: mudq = %ld, mldq = %ld\n",
+	   mudq, mldq);
+    printf("  Retained band block half-bandwidths: mukeep = %ld, mlkeep = %ld\n",
+	   mukeep, mlkeep);
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+    printf("Tolerance parameters:  fnormtol = %Lg   scsteptol = %Lg\n",
+           fnormtol, scsteptol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("Tolerance parameters:  fnormtol = %g   scsteptol = %g\n",
+           fnormtol, scsteptol);
+#else
+    printf("Tolerance parameters:  fnormtol = %g   scsteptol = %g\n",
+           fnormtol, scsteptol);
+#endif
+
+    printf("\nInitial profile of concentration\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("At all mesh points:  %Lg %Lg %Lg   %Lg %Lg %Lg\n",
+           PREYIN,PREYIN,PREYIN, PREDIN,PREDIN,PREDIN);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("At all mesh points:  %g %g %g   %g %g %g\n",
+           PREYIN,PREYIN,PREYIN, PREDIN,PREDIN,PREDIN);
+#else
+    printf("At all mesh points:  %g %g %g   %g %g %g\n", PREYIN,PREYIN,PREYIN,
+           PREDIN,PREDIN,PREDIN);
+#endif
+}
+
+/*
+ * Print sample of current cc values 
+ */
+
+static void PrintOutput(int my_pe, MPI_Comm comm, N_Vector cc)
+{
+  int is, i0, npelast;
+  realtype  *ct, tempc[NUM_SPECIES];
+  MPI_Status status;
+  
+  npelast = NPEX*NPEY - 1;
+  
+  ct = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Send the cc values (for all species) at the top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NUM_SPECIES*(MXSUB*MYSUB-1);
+    if (npelast!=0)
+      MPI_Send(&ct[i0],NUM_SPECIES,PVEC_REAL_MPI_TYPE,0,0,comm);
+    else  /* single processor case */
+      for (is = 0; is < NUM_SPECIES; is++) tempc[is]=ct[i0+is];   
+  }
+  
+  /* On PE 0, receive the cc values at top right, then print performance data 
+     and sampled solution values */
+  if (my_pe == 0) {
+    
+    if (npelast != 0)
+      MPI_Recv(&tempc[0],NUM_SPECIES,PVEC_REAL_MPI_TYPE,npelast,0,comm,&status);
+    
+    printf("\nAt bottom left:");
+    for (is = 0; is < NUM_SPECIES; is++){
+      if ((is%6)*6== is) printf("\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+      printf(" %Lg",ct[is]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      printf(" %g",ct[is]);
+#else
+      printf(" %g",ct[is]);
+#endif
+    }
+    
+    printf("\n\nAt top right:");
+    for (is = 0; is < NUM_SPECIES; is++) {
+      if ((is%6)*6 == is) printf("\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+      printf(" %Lg",tempc[is]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      printf(" %g",tempc[is]);
+#else
+      printf(" %g",tempc[is]);
+#endif
+    }
+    printf("\n\n");
+  } 
+}
+
+/*
+ * Print final statistics contained in iopt 
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe, nli, npe, nps, ncfl, nfeSG;
+  int flag;
+  
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1, 0);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1, 0);
+  flag = KINSpilsGetNumLinIters(kmem, &nli);
+  check_flag(&flag, "KINSpilsGetNumLinIters", 1, 0);
+  flag = KINSpilsGetNumPrecEvals(kmem, &npe);
+  check_flag(&flag, "KINSpilsGetNumPrecEvals", 1, 0);
+  flag = KINSpilsGetNumPrecSolves(kmem, &nps);
+  check_flag(&flag, "KINSpilsGetNumPrecSolves", 1, 0);
+  flag = KINSpilsGetNumConvFails(kmem, &ncfl);
+  check_flag(&flag, "KINSpilsGetNumConvFails", 1, 0);
+  flag = KINSpilsGetNumFuncEvals(kmem, &nfeSG);
+  check_flag(&flag, "KINSpilsGetNumFuncEvals", 1, 0);
+
+  printf("Final Statistics.. \n");
+  printf("nni    = %5ld    nli   = %5ld\n", nni, nli);
+  printf("nfe    = %5ld    nfeSG = %5ld\n", nfe, nfeSG);
+  printf("nps    = %5ld    npe   = %5ld     ncfl  = %5ld\n", nps, npe, ncfl);
+  
+}
+
+/*
+ * Routine to send boundary data to neighboring PEs 
+ */
+
+static void BSend(MPI_Comm comm, int my_pe, 
+                  int isubx, int isuby, 
+                  int dsizex, int dsizey, realtype *cdata)
+{
+  int i, ly;
+  int offsetc, offsetbuf;
+  realtype bufleft[NUM_SPECIES*MYSUB], bufright[NUM_SPECIES*MYSUB];
+
+  /* If isuby > 0, send data from bottom x-line of u */
+  if (isuby != 0)
+    MPI_Send(&cdata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+
+  /* If isuby < NPEY-1, send data from top x-line of u */
+  if (isuby != NPEY-1) {
+    offsetc = (MYSUB-1)*dsizex;
+    MPI_Send(&cdata[offsetc], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+
+  /* If isubx > 0, send data from left y-line of u (via bufleft) */
+  if (isubx != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = ly*dsizex;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufleft[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If isubx < NPEX-1, send data from right y-line of u (via bufright) */
+  if (isubx != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = offsetbuf*MXSUB + (MXSUB-1)*NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufright[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+
+/*
+ * Routine to start receiving boundary data from neighboring PEs.
+ *  Notes:
+ *  1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ *  2) request should have 4 entries, and should be passed in both calls also. 
+ */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int isubx, int isuby,
+                      int dsizex, int dsizey,
+                      realtype *cext, realtype *buffer)
+{
+  int offsetce;
+
+  /* Have bufleft and bufright use the same buffer */
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  
+  /* If isuby > 0, receive data for bottom x-line of cext */
+  if (isuby != 0)
+    MPI_Irecv(&cext[NUM_SPECIES], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+  
+  /* If isuby < NPEY-1, receive data for top x-line of cext */
+  if (isuby != NPEY-1) {
+    offsetce = NUM_SPECIES*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&cext[offsetce], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If isubx > 0, receive data for left y-line of cext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe-1, 0, comm, &request[2]);
+  }
+  
+  /* If isubx < NPEX-1, receive data for right y-line of cext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe+1, 0, comm, &request[3]);
+  } 
+}
+
+/*
+ * Routine to finish receiving boundary data from neighboring PEs.
+ *  Notes:
+ *  1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ *  2) request should have 4 entries, and should be passed in both calls also. 
+ */
+
+static void BRecvWait(MPI_Request request[], int isubx,
+                      int isuby, int dsizex, realtype *cext,
+                      realtype *buffer)
+{
+  int i, ly;
+  int dsizex2, offsetce, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2*NUM_SPECIES;
+  
+  /* If isuby > 0, receive data for bottom x-line of cext */
+  if (isuby != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If isuby < NPEY-1, receive data for top x-line of cext */
+  if (isuby != NPEY-1)
+    MPI_Wait(&request[1],&status);
+
+  /* If isubx > 0, receive data for left y-line of cext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Wait(&request[2],&status);
+    
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+1)*dsizex2;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufleft[offsetbuf+i];
+    }
+  }
+  
+  /* If isubx < NPEX-1, receive data for right y-line of cext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+    
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+2)*dsizex2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufright[offsetbuf+i];
+    }
+  }  
+}
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+	      id, funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/parallel/kinFoodWeb_kry_bbd_p.out b/examples/kinsol/parallel/kinFoodWeb_kry_bbd_p.out
new file mode 100644
index 0000000..49f6ea8
--- /dev/null
+++ b/examples/kinsol/parallel/kinFoodWeb_kry_bbd_p.out
@@ -0,0 +1,33 @@
+
+Predator-prey test problem--  KINSol (parallel-BBD version)
+
+Mesh dimensions = 20 X 20
+Number of species = 6
+Total system size = 2400
+
+Subgrid dimensions = 10 X 10
+Processor array is 2 X 2
+
+Flag globalstrategy = 0 (0 = None, 1 = Linesearch)
+Linear solver is SPGMR with maxl = 20, maxlrst = 2
+Preconditioning uses band-block-diagonal matrix from KINBBDPRE
+  Difference quotient half-bandwidths: mudq = 11, mldq = 11
+  Retained band block half-bandwidths: mukeep = 6, mlkeep = 6
+Tolerance parameters:  fnormtol = 1e-07   scsteptol = 1e-13
+
+Initial profile of concentration
+At all mesh points:  1 1 1   30000 30000 30000
+
+
+Computed equilibrium species concentrations:
+
+At bottom left:
+ 1.165 1.165 1.165 34949 34949 34949
+
+At top right:
+ 1.25552 1.25552 1.25552 37663.2 37663.2 37663.2
+
+Final Statistics.. 
+nni    =     9    nli   =   464
+nfe    =    10    nfeSG =   473
+nps    =   473    npe   =     1     ncfl  =     6
diff --git a/examples/kinsol/parallel/kinFoodWeb_kry_p.c b/examples/kinsol/parallel/kinFoodWeb_kry_p.c
new file mode 100644
index 0000000..0cbe6fe
--- /dev/null
+++ b/examples/kinsol/parallel/kinFoodWeb_kry_p.c
@@ -0,0 +1,1112 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example (parallel):
+ *
+ * This example solves a nonlinear system that arises from a system
+ * of partial differential equations. The PDE system is a food web
+ * population model, with predator-prey interaction and diffusion on
+ * the unit square in two dimensions. The dependent variable vector
+ * is the following:
+ *
+ *       1   2         ns
+ * c = (c , c ,  ..., c  )     (denoted by the variable cc)
+ *
+ * and the PDE's are as follows:
+ *
+ *                    i       i
+ *         0 = d(i)*(c     + c    )  +  f  (x,y,c)   (i=1,...,ns)
+ *                    xx      yy         i
+ *
+ *   where
+ *
+ *                   i             ns         j
+ *   f  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The number np is both
+ * the number of prey and predator species. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *   a(i,i) = -AA   (all i)
+ *   a(i,j) = -GG   (i <= np , j >  np)
+ *   a(i,j) =  EE   (i >  np,  j <= np)
+ *   b(i) = BB * (1 + alpha * x * y)   (i <= np)
+ *   b(i) =-BB * (1 + alpha * x * y)   (i >  np)
+ *   d(i) = DPREY   (i <= np)
+ *   d(i) = DPRED   ( i > np)
+ *
+ * The various scalar parameters are set using define's or in
+ * routine InitUserData.
+ *
+ * The boundary conditions are: normal derivative = 0, and the
+ * initial guess is constant in x and y, although the final
+ * solution is not.
+ *
+ * The PDEs are discretized by central differencing on a MX by
+ * MY mesh.
+ *
+ * The nonlinear system is solved by KINSOL using the method
+ * specified in the local variable globalstrat.
+ *
+ * The preconditioner matrix is a block-diagonal matrix based on
+ * the partial derivatives of the interaction terms f only.
+ * -----------------------------------------------------------------
+ * References:
+ *
+ * 1. Peter N. Brown and Youcef Saad,
+ *    Hybrid Krylov Methods for Nonlinear Systems of Equations
+ *    LLNL report UCRL-97645, November 1987.
+ *
+ * 2. Peter N. Brown and Alan C. Hindmarsh,
+ *    Reduced Storage Matrix Methods in Stiff ODE systems,
+ *    Lawrence Livermore National Laboratory Report  UCRL-95088,
+ *    Rev. 1, June 1987, and  Journal of Applied Mathematics and
+ *    Computation, Vol. 31 (May 1989), pp. 40-91. (Presents a
+ *    description of the time-dependent version of this test
+ *    problem.)
+ * ----------------------------------------------------------------------
+ *  Run command line: mpirun -np N -machinefile machines kinFoodWeb_kry_p
+ *  where N = NPEX * NPEY is the number of processors.
+ * ----------------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_spgmr.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <mpi.h>
+
+
+/* Problem Constants */
+
+#define NUM_SPECIES     6  /* must equal 2*(number of prey or predators)
+                              number of prey = number of predators       */ 
+
+#define PI       RCONST(3.1415926535898)   /* pi */ 
+
+#define NPEX        2            /* number of processors in the x-direction  */
+#define NPEY        2            /* number of processors in the y-direction  */
+#define MXSUB       10           /* number of x mesh points per subgrid      */
+#define MYSUB       10           /* number of y mesh points per subgrid      */
+#define MX          (NPEX*MXSUB) /* number of mesh points in the x-direction */
+#define MY          (NPEY*MYSUB) /* number of mesh points in the y-direction */
+#define NSMXSUB     (NUM_SPECIES * MXSUB)
+#define NSMXSUB2    (NUM_SPECIES * (MXSUB+2))
+#define NEQ         (NUM_SPECIES*MX*MY)  /* number of equations in the system */
+#define AA          RCONST(1.0)    /* value of coefficient AA in above eqns */
+#define EE          RCONST(10000.) /* value of coefficient EE in above eqns */
+#define GG          RCONST(0.5e-6) /* value of coefficient GG in above eqns */
+#define BB          RCONST(1.0)    /* value of coefficient BB in above eqns */
+#define DPREY       RCONST(1.0)    /* value of coefficient dprey above */
+#define DPRED       RCONST(0.5)    /* value of coefficient dpred above */
+#define ALPHA       RCONST(1.0)    /* value of coefficient alpha above */
+#define AX          RCONST(1.0)    /* total range of x variable */
+#define AY          RCONST(1.0)    /* total range of y variable */
+#define FTOL        RCONST(1.e-7)  /*  ftol tolerance */
+#define STOL        RCONST(1.e-13) /*  stol tolerance */
+#define THOUSAND    RCONST(1000.0) /* one thousand */
+#define ZERO        RCONST(0.0)    /* 0. */
+#define ONE         RCONST(1.0)    /* 1. */
+#define PREYIN      RCONST(1.0)    /* initial guess for prey concentrations. */
+#define PREDIN      RCONST(30000.0)/* initial guess for predator concs.      */
+
+/* User-defined vector access macro: IJ_Vptr */
+
+/* IJ_Vptr is defined in order to translate from the underlying 3D structure
+   of the dependent variable vector to the 1D storage scheme for an N-vector.
+   IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+   indices is = 0, jx = i, jy = j.    */
+
+#define IJ_Vptr(vv,i,j)   (&NV_Ith_P(vv, i*NUM_SPECIES + j*NSMXSUB))
+
+/* Type : UserData 
+   contains preconditioner blocks, pivot arrays, and problem constants */
+
+typedef struct {
+  realtype **P[MXSUB][MYSUB];
+  long int *pivot[MXSUB][MYSUB];
+  realtype **acoef, *bcoef;
+  N_Vector rates;
+  realtype *cox, *coy;
+  realtype ax, ay, dx, dy;
+  realtype uround, sqruround;
+  int mx, my, ns, np;
+  realtype cext[NUM_SPECIES * (MXSUB+2)*(MYSUB+2)];
+  int my_pe, isubx, isuby, nsmxsub, nsmxsub2;
+  MPI_Comm comm;
+} *UserData;
+
+/* Functions Called by the KINSol Solver */
+
+static int funcprpr(N_Vector cc, N_Vector fval, void *user_data);
+
+static int Precondbd(N_Vector cc, N_Vector cscale,
+                     N_Vector fval, N_Vector fscale,
+                     void *user_data,
+                     N_Vector vtemp1, N_Vector vtemp2);
+
+static int PSolvebd(N_Vector cc, N_Vector cscale, 
+                    N_Vector fval, N_Vector fscale, 
+                    N_Vector vv, void *user_data,
+                    N_Vector vtemp);
+
+/* Private Helper Functions */
+
+static UserData AllocUserData(void);
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector cc, N_Vector sc);
+static void PrintHeader(int globalstrategy, int maxl, int maxlrst, 
+                        realtype fnormtol, realtype scsteptol);
+static void PrintOutput(int my_pe, MPI_Comm comm, N_Vector cc);
+static void PrintFinalStats(void *kmem);
+static void WebRate(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                    void *user_data);
+static realtype DotProd(int size, realtype *x1, realtype *x2);
+static void BSend(MPI_Comm comm, int my_pe, int isubx, 
+                  int isuby, int dsizex, 
+                  int dsizey, realtype *cdata);
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int isubx, int isuby,
+                      int dsizex, int dsizey,
+                      realtype *cext, realtype *buffer);
+static void BRecvWait(MPI_Request request[], int isubx,
+                      int isuby, int dsizex, realtype *cext,
+                      realtype *buffer);
+static void ccomm(realtype *cdata, UserData data);
+static void fcalcprpr(N_Vector cc, N_Vector fval,void *user_data);
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(int argc, char *argv[])
+
+{
+  int globalstrategy;
+  long int local_N;
+  realtype fnormtol, scsteptol;
+  N_Vector cc, sc, constraints;
+  UserData data;
+  int flag, maxl, maxlrst;
+  int my_pe, npes, npelast = NPEX*NPEY-1;
+  void *kmem;
+  MPI_Comm comm;
+
+  cc = sc = constraints = NULL;
+  data = NULL;
+  kmem = NULL;
+
+  /* Get processor number and total number of pe's */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &npes);
+  MPI_Comm_rank(comm, &my_pe);
+
+  if (npes != NPEX*NPEY) {
+    if (my_pe == 0)
+      fprintf(stderr, "\nMPI_ERROR(0); npes = %d is not equal to NPEX*NPEY = %d\n",
+	      npes,NPEX*NPEY);
+    MPI_Finalize();
+    return(1);
+  }
+
+  /* Allocate memory, and set problem data, initial values, tolerances */ 
+
+  /* Set local vector length */
+  local_N = NUM_SPECIES*MXSUB*MYSUB;
+
+  /* Allocate and initialize user data block */
+  data = AllocUserData();
+  if (check_flag((void *)data, "AllocUserData", 0, my_pe)) MPI_Abort(comm, 1);
+  InitUserData(my_pe, comm, data);
+
+  /* Set global strategy flag */
+  globalstrategy = KIN_NONE;
+  
+  /* Allocate and initialize vectors */
+  cc = N_VNew_Parallel(comm, local_N, NEQ);
+  if (check_flag((void *)cc, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  sc = N_VNew_Parallel(comm, local_N, NEQ);
+  if (check_flag((void *)sc, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  data->rates = N_VNew_Parallel(comm, local_N, NEQ);
+  if (check_flag((void *)data->rates, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  constraints = N_VNew_Parallel(comm, local_N, NEQ);
+  if (check_flag((void *)constraints, "N_VNew_Parallel", 0, my_pe)) MPI_Abort(comm, 1);
+  N_VConst(ZERO, constraints);
+  
+  SetInitialProfiles(cc, sc);
+
+  fnormtol=FTOL; scsteptol=STOL;
+
+ /* Call KINCreate/KINInit to initialize KINSOL: 
+     nvSpec is the nvSpec pointer used in the parallel version
+     A pointer to KINSOL problem memory is returned and stored in kmem. */
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0, my_pe)) MPI_Abort(comm, 1);
+  /* Vector cc passed as template vector. */
+  flag = KINInit(kmem, funcprpr, cc);
+  if (check_flag(&flag, "KINInit", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = KINSetNumMaxIters(kmem, 250);
+  if (check_flag(&flag, "KINSetNumMaxIters", 1, my_pe)) MPI_Abort(comm, 1);
+  flag = KINSetUserData(kmem, data);
+  if (check_flag(&flag, "KINSetUserData", 1, my_pe)) MPI_Abort(comm, 1);
+  flag = KINSetConstraints(kmem, constraints);
+  if (check_flag(&flag, "KINSetConstraints", 1, my_pe)) MPI_Abort(comm, 1);
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1, my_pe)) MPI_Abort(comm, 1);
+  flag = KINSetScaledStepTol(kmem, scsteptol);
+  if (check_flag(&flag, "KINSetScaledStepTop", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* We no longer need the constraints vector since KINSetConstraints
+     creates a private copy for KINSOL to use. */
+  N_VDestroy_Parallel(constraints);
+
+  /* Call KINSpgmr to specify the linear solver KINSPGMR with preconditioner
+     routines Precondbd and PSolvebd, and the pointer to the user data block. */
+  maxl = 20; maxlrst = 2;
+  flag = KINSpgmr(kmem, maxl);
+  if (check_flag(&flag, "KINSpgmr", 1, my_pe)) MPI_Abort(comm, 1);
+
+  flag = KINSpilsSetMaxRestarts(kmem, maxlrst);
+  if (check_flag(&flag, "KINSpilsSetMaxRestarts", 1, my_pe)) MPI_Abort(comm, 1);
+  flag = KINSpilsSetPreconditioner(kmem,
+				   Precondbd,
+				   PSolvebd);
+  if (check_flag(&flag, "KINSpilsSetPreconditioner", 1, my_pe)) MPI_Abort(comm, 1);
+
+  /* Print out the problem size, solution parameters, initial guess. */
+  if (my_pe == 0) 
+    PrintHeader(globalstrategy, maxl, maxlrst, fnormtol, scsteptol);
+
+  /* Call KINSol and print output concentration profile */
+  flag = KINSol(kmem,           /* KINSol memory block */
+                cc,             /* initial guess on input; solution vector */
+                globalstrategy, /* global stragegy choice */
+                sc,             /* scaling vector for the variable cc */
+                sc);            /* scaling vector for function values fval */
+  if (check_flag(&flag, "KINSol", 1, my_pe)) MPI_Abort(comm, 1);
+
+  if (my_pe == 0) 
+     printf("\n\nComputed equilibrium species concentrations:\n");
+  if (my_pe == 0 || my_pe == npelast) 
+     PrintOutput(my_pe, comm, cc);
+
+  /* Print final statistics and free memory */  
+  if (my_pe == 0) 
+     PrintFinalStats(kmem);
+
+  N_VDestroy_Parallel(cc);
+  N_VDestroy_Parallel(sc);
+  KINFree(&kmem);
+  FreeUserData(data);
+
+  MPI_Finalize();
+
+  return(0);
+}
+
+/* Readability definitions used in other routines below */
+
+#define acoef  (data->acoef)
+#define bcoef  (data->bcoef)
+#define cox    (data->cox)
+#define coy    (data->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY KINSOL
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * System function routine.  Evaluate funcprpr(cc).  First call ccomm to do 
+ *  communication of subgrid boundary data into cext.  Then calculate funcprpr
+ *  by a call to fcalcprpr. 
+ */
+
+static int funcprpr(N_Vector cc, N_Vector fval, void *user_data)
+{
+  realtype *cdata, *fvdata;
+  UserData data;
+  
+  cdata = N_VGetArrayPointer_Parallel(cc);
+  fvdata = N_VGetArrayPointer_Parallel(fval);
+  data = (UserData) user_data;
+  
+  /* Call ccomm to do inter-processor communicaiton */
+  ccomm (cdata, data);
+
+  /* Call fcalcprpr to calculate all right-hand sides */
+  fcalcprpr (cc, fval, data);
+
+  return(0);
+}
+
+/*
+ * Preconditioner setup routine. Generate and preprocess P. 
+ */
+
+static int Precondbd(N_Vector cc, N_Vector cscale,
+                     N_Vector fval, N_Vector fscale,
+                     void *user_data,
+                     N_Vector vtemp1, N_Vector vtemp2)
+{
+  realtype r, r0, uround, sqruround, xx, yy, delx, dely, csave, fac;
+  realtype *cxy, *scxy, **Pxy, *ratesxy, *Pxycol, perturb_rates[NUM_SPECIES];
+  int i, j, jx, jy, ret;
+  UserData data;
+  
+  data = (UserData)user_data;
+  delx = data->dx;
+  dely = data->dy;
+  
+  uround = data->uround;
+  sqruround = data->sqruround;
+  fac = N_VWL2Norm(fval, fscale);
+  r0 = THOUSAND * uround * fac * NEQ;
+  if(r0 == ZERO) r0 = ONE;
+  
+  /* Loop over spatial points; get size NUM_SPECIES Jacobian block at each */
+  for (jy = 0; jy < MYSUB; jy++) {
+    yy = dely*(jy + data->isuby * MYSUB);
+    
+    for (jx = 0; jx < MXSUB; jx++) {
+      xx = delx*(jx + data->isubx * MXSUB);
+      Pxy = (data->P)[jx][jy];
+      cxy = IJ_Vptr(cc,jx,jy);
+      scxy= IJ_Vptr(cscale,jx,jy);
+      ratesxy = IJ_Vptr((data->rates),jx,jy);
+
+      /* Compute difference quotients of interaction rate fn. */
+      for (j = 0; j < NUM_SPECIES; j++) {
+        
+        csave = cxy[j];  /* Save the j,jx,jy element of cc */
+        r = SUNMAX(sqruround*SUNRabs(csave), r0/scxy[j]);
+        cxy[j] += r; /* Perturb the j,jx,jy element of cc */
+        fac = ONE/r;
+        
+        WebRate(xx, yy, cxy, perturb_rates, data);
+        
+        /* Restore j,jx,jy element of cc */
+        cxy[j] = csave;
+        
+        /* Load the j-th column of difference quotients */
+        Pxycol = Pxy[j];
+        for (i = 0; i < NUM_SPECIES; i++)
+          Pxycol[i] = (perturb_rates[i] - ratesxy[i]) * fac;
+        
+      } /* end of j loop */
+      
+      /* Do LU decomposition of size NUM_SPECIES preconditioner block */
+      ret = denseGETRF(Pxy, NUM_SPECIES, NUM_SPECIES, (data->pivot)[jx][jy]);
+      if (ret != 0) return(1);
+      
+    } /* end of jx loop */
+  } /* end of jy loop */
+  
+  return(0);
+}
+
+/*
+ * Preconditioner solve routine 
+ */
+
+static int PSolvebd(N_Vector cc, N_Vector cscale, 
+                    N_Vector fval, N_Vector fscale, 
+                    N_Vector vv, void *user_data,
+                    N_Vector vtemp)
+{
+  realtype **Pxy, *vxy;
+  long int *piv, jx, jy;
+  UserData data;
+  
+  data = (UserData)user_data;
+  
+  for (jx = 0; jx < MXSUB; jx++) {
+    
+    for (jy = 0; jy < MYSUB; jy++) {
+      
+      /* For each (jx,jy), solve a linear system of size NUM_SPECIES.
+         vxy is the address of the corresponding portion of the vector vv;
+         Pxy is the address of the corresponding block of the matrix P;
+         piv is the address of the corresponding block of the array pivot. */
+      vxy = IJ_Vptr(vv,jx,jy);
+      Pxy = (data->P)[jx][jy];
+      piv = (data->pivot)[jx][jy];
+      denseGETRS(Pxy, NUM_SPECIES, piv, vxy);
+      
+    } /* end of jy loop */
+    
+  } /* end of jx loop */
+  
+  return(0); 
+}
+
+/*
+ * Interaction rate function routine 
+ */
+
+static void WebRate(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                    void *user_data)
+{
+  int i;
+  realtype fac;
+  UserData data;
+  
+  data = (UserData)user_data;
+  
+  for (i = 0; i<NUM_SPECIES; i++)
+    ratesxy[i] = DotProd(NUM_SPECIES, cxy, acoef[i]);
+  
+  fac = ONE + ALPHA * xx * yy;
+  
+  for (i = 0; i < NUM_SPECIES; i++)
+    ratesxy[i] = cxy[i] * ( bcoef[i] * fac + ratesxy[i] );
+  
+}
+
+/*
+ * Dot product routine for realtype arrays 
+ */
+
+static realtype DotProd(int size, realtype *x1, realtype *x2)
+{
+  int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+  return(temp);
+
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Allocate memory for data structure of type UserData 
+ */
+
+static UserData AllocUserData(void)
+{
+  int jx, jy;
+  UserData data;
+  
+  data = (UserData) malloc(sizeof *data);
+
+  for (jx = 0; jx < MXSUB; jx++) {
+    for (jy = 0; jy < MYSUB; jy++) {
+      (data->P)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+    }
+  }
+
+  acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  bcoef = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  cox   = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  coy   = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  
+  return(data);
+  
+}
+
+/*
+ * Load problem constants in data 
+ */
+
+static void InitUserData(int my_pe, MPI_Comm comm, UserData data)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+  
+  data->mx = MX;
+  data->my = MY;
+  data->ns = NUM_SPECIES;
+  data->np = NUM_SPECIES/2;
+  data->ax = AX;
+  data->ay = AY;
+  data->dx = (data->ax)/(MX-1);
+  data->dy = (data->ay)/(MY-1);
+  data->uround = UNIT_ROUNDOFF;
+  data->sqruround = SUNRsqrt(data->uround);
+  data->my_pe = my_pe;
+  data->comm = comm;
+  data->isuby = my_pe/NPEX;
+  data->isubx = my_pe - data->isuby*NPEX;
+  data->nsmxsub = NUM_SPECIES * MXSUB;
+  data->nsmxsub2 = NUM_SPECIES * (MXSUB+2);
+  
+  /* Set up the coefficients a and b plus others found in the equations */
+  np = data->np;
+
+  dx2=(data->dx)*(data->dx); dy2=(data->dy)*(data->dy);
+
+  for (i = 0; i < np; i++) {
+    a1= &(acoef[i][np]);
+    a2= &(acoef[i+np][0]);
+    a3= &(acoef[i][0]);
+    a4= &(acoef[i+np][np]);
+
+    /*  Fill in the portion of acoef in the four quadrants, row by row */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+    
+    /* and then change the diagonal elements of acoef to -AA */
+    acoef[i][i]=-AA;
+    acoef[i+np][i+np] = -AA;
+
+    bcoef[i] = BB;
+    bcoef[i+np] = -BB;
+
+    cox[i]=DPREY/dx2;
+    cox[i+np]=DPRED/dx2;
+
+    coy[i]=DPREY/dy2;
+    coy[i+np]=DPRED/dy2;
+  }
+  
+}
+
+/*
+ * Free data memory 
+ */
+
+static void FreeUserData(UserData data)
+{
+  int jx, jy;
+
+  for (jx = 0; jx < MXSUB; jx++) {
+    for (jy = 0; jy < MYSUB; jy++) {
+      destroyMat((data->P)[jx][jy]);
+      destroyArray((data->pivot)[jx][jy]);
+    }
+  }
+
+  destroyMat(acoef);
+  free(bcoef);
+  free(cox); 
+  free(coy);
+  N_VDestroy_Parallel(data->rates);
+  free(data);  
+}
+
+/*
+ * Set initial conditions in cc 
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector sc)
+{
+  int i, jx, jy;
+  realtype *cloc, *sloc;
+  realtype  ctemp[NUM_SPECIES], stemp[NUM_SPECIES];
+  
+  /* Initialize arrays ctemp and stemp used in the loading process */
+  for (i = 0; i < NUM_SPECIES/2; i++) {
+    ctemp[i] = PREYIN;
+    stemp[i] = ONE;
+  }
+  for (i = NUM_SPECIES/2; i < NUM_SPECIES; i++) {
+    ctemp[i] = PREDIN;
+    stemp[i] = RCONST(0.00001);
+  }
+  
+  /* Load initial profiles into cc and sc vector from ctemp and stemp. */
+  for (jy = 0; jy < MYSUB; jy++) {
+    for (jx = 0; jx < MXSUB; jx++) {
+      cloc = IJ_Vptr(cc,jx,jy);
+      sloc = IJ_Vptr(sc,jx,jy);
+      for (i = 0; i < NUM_SPECIES; i++) {
+        cloc[i] = ctemp[i];
+        sloc[i] = stemp[i];
+      }
+    }
+  }
+}
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(int globalstrategy, int maxl, int maxlrst, 
+                        realtype fnormtol, realtype scsteptol)
+{
+    printf("\nPredator-prey test problem --  KINSol (parallel version)\n\n");
+    
+    printf("Mesh dimensions = %d X %d\n", MX, MY);
+    printf("Number of species = %d\n", NUM_SPECIES);
+    printf("Total system size = %d\n\n", NEQ);
+    printf("Subgrid dimensions = %d X %d\n", MXSUB, MYSUB);
+    printf("Processor array is %d X %d\n\n", NPEX, NPEY);
+    printf("Flag globalstrategy = %d (0 = None, 1 = Linesearch)\n",
+           globalstrategy);
+    printf("Linear solver is SPGMR with maxl = %d, maxlrst = %d\n",
+           maxl, maxlrst);
+    printf("Preconditioning uses interaction-only block-diagonal matrix\n");
+
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  fnormtol = %Lg   scsteptol = %Lg\n",
+         fnormtol, scsteptol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  fnormtol = %g   scsteptol = %g\n",
+         fnormtol, scsteptol);
+#else
+  printf("Tolerance parameters:  fnormtol = %g   scsteptol = %g\n",
+         fnormtol, scsteptol);
+#endif
+
+  printf("\nInitial profile of concentration\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("At all mesh points:  %Lg %Lg %Lg   %Lg %Lg %Lg\n", 
+         PREYIN,PREYIN,PREYIN,
+         PREDIN,PREDIN,PREDIN);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At all mesh points:  %g %g %g   %g %g %g\n", 
+         PREYIN,PREYIN,PREYIN,
+         PREDIN,PREDIN,PREDIN);
+#else
+  printf("At all mesh points:  %g %g %g   %g %g %g\n", 
+         PREYIN,PREYIN,PREYIN,
+         PREDIN,PREDIN,PREDIN);
+#endif
+}
+
+/*
+ * Print sample of current cc values 
+ */
+
+static void PrintOutput(int my_pe, MPI_Comm comm, N_Vector cc)
+{
+  int is, i0, npelast;
+  realtype  *ct, tempc[NUM_SPECIES];
+  MPI_Status status;
+
+  npelast = NPEX*NPEY - 1;
+
+  ct = N_VGetArrayPointer_Parallel(cc);
+  
+  /* Send the cc values (for all species) at the top right mesh point to PE 0 */
+  if (my_pe == npelast) {
+    i0 = NUM_SPECIES*(MXSUB*MYSUB-1);
+    if (npelast!=0)
+      MPI_Send(&ct[i0],NUM_SPECIES,PVEC_REAL_MPI_TYPE,0,0,comm);
+    else  /* single processor case */
+      for (is = 0; is < NUM_SPECIES; is++) tempc[is]=ct[i0+is];   
+  }
+  
+  /* On PE 0, receive the cc values at top right, then print performance data 
+     and sampled solution values */
+  if (my_pe == 0) {
+    
+    if (npelast != 0)
+      MPI_Recv(&tempc[0],NUM_SPECIES,PVEC_REAL_MPI_TYPE,npelast,0,comm,&status);
+    
+    printf("\nAt bottom left:");
+    for (is = 0; is < NUM_SPECIES; is++) {
+      if ((is%6)*6 == is) printf("\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+      printf(" %Lg",ct[is]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      printf(" %g",ct[is]);
+#else
+      printf(" %g",ct[is]);
+#endif
+    }
+    
+    printf("\n\nAt top right:");
+    for (is = 0; is < NUM_SPECIES; is++) {
+      if ((is%6)*6 == is) printf("\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+      printf(" %Lg",tempc[is]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      printf(" %g",tempc[is]);
+#else
+      printf(" %g",tempc[is]);
+#endif
+    }
+    printf("\n\n");
+  } 
+}
+
+/*
+ * Print final statistics contained in iopt 
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe, nli, npe, nps, ncfl, nfeSG;
+  int flag;
+
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1, 0);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1, 0);
+
+  flag = KINSpilsGetNumLinIters(kmem, &nli);
+  check_flag(&flag, "KINSpilsGetNumLinIters", 1, 0);
+  flag = KINSpilsGetNumPrecEvals(kmem, &npe);
+  check_flag(&flag, "KINSpilsGetNumPrecEvals", 1, 0);
+  flag = KINSpilsGetNumPrecSolves(kmem, &nps);
+  check_flag(&flag, "KINSpilsGetNumPrecSolves", 1, 0);
+  flag = KINSpilsGetNumConvFails(kmem, &ncfl);
+  check_flag(&flag, "KINSpilsGetNumConvFails", 1, 0);
+  flag = KINSpilsGetNumFuncEvals(kmem, &nfeSG);
+  check_flag(&flag, "KINSpilsGetNumFuncEvals", 1, 0);
+
+  printf("Final Statistics.. \n");
+  printf("nni    = %5ld    nli   = %5ld\n", nni, nli);
+  printf("nfe    = %5ld    nfeSG = %5ld\n", nfe, nfeSG);
+  printf("nps    = %5ld    npe   = %5ld     ncfl  = %5ld\n", nps, npe, ncfl);
+
+}
+
+/*
+ * Routine to send boundary data to neighboring PEs 
+ */
+
+static void BSend(MPI_Comm comm, int my_pe, 
+                  int isubx, int isuby,
+                  int dsizex, int dsizey, realtype *cdata)
+{
+  int i, ly;
+  int offsetc, offsetbuf;
+  realtype bufleft[NUM_SPECIES*MYSUB], bufright[NUM_SPECIES*MYSUB];
+  
+  /* If isuby > 0, send data from bottom x-line of u */
+  if (isuby != 0)
+    MPI_Send(&cdata[0], dsizex, PVEC_REAL_MPI_TYPE, my_pe-NPEX, 0, comm);
+  
+  /* If isuby < NPEY-1, send data from top x-line of u */
+  if (isuby != NPEY-1) {
+    offsetc = (MYSUB-1)*dsizex;
+    MPI_Send(&cdata[offsetc], dsizex, PVEC_REAL_MPI_TYPE, my_pe+NPEX, 0, comm);
+  }
+  
+  /* If isubx > 0, send data from left y-line of u (via bufleft) */
+  if (isubx != 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = ly*dsizex;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufleft[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe-1, 0, comm);   
+  }
+
+  /* If isubx < NPEX-1, send data from right y-line of u (via bufright) */
+  if (isubx != NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetc = offsetbuf*MXSUB + (MXSUB-1)*NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        bufright[offsetbuf+i] = cdata[offsetc+i];
+    }
+    MPI_Send(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE, my_pe+1, 0, comm);   
+  }
+}
+
+/*
+ * Routine to start receiving boundary data from neighboring PEs.
+ *  Notes:
+ *  1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *     should not be manipulated between the two calls.
+ *  2) request should have 4 entries, and should be passed in both calls also. 
+ */
+
+static void BRecvPost(MPI_Comm comm, MPI_Request request[], int my_pe,
+                      int isubx, int isuby,
+                      int dsizex, int dsizey,
+                      realtype *cext, realtype *buffer)
+{
+  int offsetce;
+
+  /* Have bufleft and bufright use the same buffer */
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  
+  /* If isuby > 0, receive data for bottom x-line of cext */
+  if (isuby != 0)
+    MPI_Irecv(&cext[NUM_SPECIES], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe-NPEX, 0, comm, &request[0]);
+  
+  /* If isuby < NPEY-1, receive data for top x-line of cext */
+  if (isuby != NPEY-1) {
+    offsetce = NUM_SPECIES*(1 + (MYSUB+1)*(MXSUB+2));
+    MPI_Irecv(&cext[offsetce], dsizex, PVEC_REAL_MPI_TYPE,
+              my_pe+NPEX, 0, comm, &request[1]);
+  }
+  
+  /* If isubx > 0, receive data for left y-line of cext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Irecv(&bufleft[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe-1, 0, comm, &request[2]);
+  }
+  
+  /* If isubx < NPEX-1, receive data for right y-line of cext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Irecv(&bufright[0], dsizey, PVEC_REAL_MPI_TYPE,
+              my_pe+1, 0, comm, &request[3]);
+  }
+}
+
+/*
+ * Routine to finish receiving boundary data from neighboring PEs.
+ *  Notes:
+ *  1) buffer should be able to hold 2*NUM_SPECIES*MYSUB realtype entries,
+ *     should be passed to both the BRecvPost and BRecvWait functions, and
+ *  should not be manipulated between the two calls.
+ *  2) request should have 4 entries, and should be passed in both calls also. 
+ */
+
+static void BRecvWait(MPI_Request request[], int isubx,
+                      int isuby, int dsizex, realtype *cext,
+                      realtype *buffer)
+{
+  int i, ly;
+  int dsizex2, offsetce, offsetbuf;
+  realtype *bufleft = buffer, *bufright = buffer+NUM_SPECIES*MYSUB;
+  MPI_Status status;
+  
+  dsizex2 = dsizex + 2*NUM_SPECIES;
+  
+  /* If isuby > 0, receive data for bottom x-line of cext */
+  if (isuby != 0)
+    MPI_Wait(&request[0],&status);
+  
+  /* If isuby < NPEY-1, receive data for top x-line of cext */
+  if (isuby != NPEY-1)
+    MPI_Wait(&request[1],&status);
+  
+  /* If isubx > 0, receive data for left y-line of cext (via bufleft) */
+  if (isubx != 0) {
+    MPI_Wait(&request[2],&status);
+    
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+1)*dsizex2;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufleft[offsetbuf+i];
+    }
+  }
+  
+  /* If isubx < NPEX-1, receive data for right y-line of cext (via bufright) */
+  if (isubx != NPEX-1) {
+    MPI_Wait(&request[3],&status);
+    
+    /* Copy the buffer to cext */
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetbuf = ly*NUM_SPECIES;
+      offsetce = (ly+2)*dsizex2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++)
+        cext[offsetce+i] = bufright[offsetbuf+i];
+    }
+  } 
+}
+
+/* 
+ * ccomm routine.  This routine performs all communication 
+ * between processors of data needed to calculate f. 
+ */
+
+static void ccomm(realtype *cdata, UserData data)
+{
+  realtype *cext, buffer[2*NUM_SPECIES*MYSUB];
+  MPI_Comm comm;
+  int my_pe, isubx, isuby, nsmxsub, nsmysub;
+  MPI_Request request[4];
+
+  /* Get comm, my_pe, subgrid indices, data sizes, extended array cext */
+  comm = data->comm;  my_pe = data->my_pe;
+  isubx = data->isubx;   isuby = data->isuby;
+  nsmxsub = data->nsmxsub;
+  nsmysub = NUM_SPECIES*MYSUB;
+  cext = data->cext;
+
+  /* Start receiving boundary data from neighboring PEs */
+  BRecvPost(comm, request, my_pe, isubx, isuby, nsmxsub, nsmysub, cext, buffer);
+  
+  /* Send data from boundary of local grid to neighboring PEs */
+  BSend(comm, my_pe, isubx, isuby, nsmxsub, nsmysub, cdata);
+  
+  /* Finish receiving boundary data from neighboring PEs */
+  BRecvWait(request, isubx, isuby, nsmxsub, cext, buffer);
+  
+}
+
+/*
+ * System function for predator-prey system - calculation part 
+ */
+
+static void fcalcprpr(N_Vector cc, N_Vector fval, void *user_data)
+{
+  realtype xx, yy, *cxy, *rxy, *fxy, dcydi, dcyui, dcxli, dcxri;
+  realtype *cext, dely, delx, *cdata;
+  int i, jx, jy, is, ly;
+  int isubx, isuby, nsmxsub, nsmxsub2;
+  int shifty, offsetc, offsetce, offsetcl, offsetcr, offsetcd, offsetcu;
+  UserData data;
+  
+  data = (UserData)user_data;
+  cdata = N_VGetArrayPointer_Parallel(cc);
+
+  /* Get subgrid indices, data sizes, extended work array cext */
+  isubx = data->isubx;   isuby = data->isuby;
+  nsmxsub = data->nsmxsub; nsmxsub2 = data->nsmxsub2;
+  cext = data->cext;
+
+  /* Copy local segment of cc vector into the working extended array cext */
+  offsetc = 0;
+  offsetce = nsmxsub2 + NUM_SPECIES;
+  for (ly = 0; ly < MYSUB; ly++) {
+    for (i = 0; i < nsmxsub; i++) cext[offsetce+i] = cdata[offsetc+i];
+    offsetc = offsetc + nsmxsub;
+    offsetce = offsetce + nsmxsub2;
+  }
+
+  /* To facilitate homogeneous Neumann boundary conditions, when this is a
+  boundary PE, copy data from the first interior mesh line of cc to cext   */
+
+  /* If isuby = 0, copy x-line 2 of cc to cext */
+  if (isuby == 0) {
+    for (i = 0; i < nsmxsub; i++) cext[NUM_SPECIES+i] = cdata[nsmxsub+i];
+  }
+
+  /* If isuby = NPEY-1, copy x-line MYSUB-1 of cc to cext */
+  if (isuby == NPEY-1) {
+    offsetc = (MYSUB-2)*nsmxsub;
+    offsetce = (MYSUB+1)*nsmxsub2 + NUM_SPECIES;
+    for (i = 0; i < nsmxsub; i++) cext[offsetce+i] = cdata[offsetc+i];
+  }
+
+  /* If isubx = 0, copy y-line 2 of cc to cext */
+  if (isubx == 0) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetc = ly*nsmxsub + NUM_SPECIES;
+      offsetce = (ly+1)*nsmxsub2;
+      for (i = 0; i < NUM_SPECIES; i++) cext[offsetce+i] = cdata[offsetc+i];
+    }
+  }
+
+  /* If isubx = NPEX-1, copy y-line MXSUB-1 of cc to cext */
+  if (isubx == NPEX-1) {
+    for (ly = 0; ly < MYSUB; ly++) {
+      offsetc = (ly+1)*nsmxsub - 2*NUM_SPECIES;
+      offsetce = (ly+2)*nsmxsub2 - NUM_SPECIES;
+      for (i = 0; i < NUM_SPECIES; i++) cext[offsetce+i] = cdata[offsetc+i];
+    }
+  }
+  
+  /* Loop over all mesh points, evaluating rate arra at each point */
+  delx = data->dx;
+  dely = data->dy;
+  shifty = (MXSUB+2)*NUM_SPECIES;
+  
+  for (jy = 0; jy < MYSUB; jy++) {
+    
+    yy = dely*(jy + isuby * MYSUB);
+
+    for (jx = 0; jx < MXSUB; jx++) {
+
+      xx = delx * (jx + isubx * MXSUB);
+      cxy = IJ_Vptr(cc,jx,jy);
+      rxy = IJ_Vptr(data->rates,jx,jy);
+      fxy = IJ_Vptr(fval,jx,jy);
+      
+      WebRate(xx, yy, cxy, rxy, user_data);
+
+      offsetc = (jx+1)*NUM_SPECIES + (jy+1)*NSMXSUB2;
+      offsetcd = offsetc - shifty;
+      offsetcu = offsetc + shifty;
+      offsetcl = offsetc - NUM_SPECIES;
+      offsetcr = offsetc + NUM_SPECIES;
+      
+      for (is = 0; is < NUM_SPECIES; is++) {
+        
+        /* differencing in x */
+        dcydi = cext[offsetc+is]  - cext[offsetcd+is];
+        dcyui = cext[offsetcu+is] - cext[offsetc+is];
+        
+        /* differencing in y */
+        dcxli = cext[offsetc+is]  - cext[offsetcl+is];
+        dcxri = cext[offsetcr+is] - cext[offsetc+is];
+        
+        /* compute the value at xx , yy */
+        fxy[is] = (coy)[is] * (dcyui - dcydi) +
+          (cox)[is] * (dcxri - dcxli) + rxy[is];
+        
+      } /* end of is loop */
+      
+    } /* end of jx loop */
+    
+  } /* end of jy loop */
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt, int id)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr, 
+              "\nSUNDIALS_ERROR(%d): %s() failed with flag = %d\n\n",
+	      id, funcname, *errflag);
+      return(1);
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nMEMORY_ERROR(%d): %s() failed - returned NULL pointer\n\n",
+	    id, funcname);
+    return(1); 
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/parallel/kinFoodWeb_kry_p.out b/examples/kinsol/parallel/kinFoodWeb_kry_p.out
new file mode 100644
index 0000000..63bd064
--- /dev/null
+++ b/examples/kinsol/parallel/kinFoodWeb_kry_p.out
@@ -0,0 +1,31 @@
+
+Predator-prey test problem --  KINSol (parallel version)
+
+Mesh dimensions = 20 X 20
+Number of species = 6
+Total system size = 2400
+
+Subgrid dimensions = 10 X 10
+Processor array is 2 X 2
+
+Flag globalstrategy = 0 (0 = None, 1 = Linesearch)
+Linear solver is SPGMR with maxl = 20, maxlrst = 2
+Preconditioning uses interaction-only block-diagonal matrix
+Tolerance parameters:  fnormtol = 1e-07   scsteptol = 1e-13
+
+Initial profile of concentration
+At all mesh points:  1 1 1   30000 30000 30000
+
+
+Computed equilibrium species concentrations:
+
+At bottom left:
+ 1.165 1.165 1.165 34949 34949 34949
+
+At top right:
+ 1.25552 1.25552 1.25552 37663.2 37663.2 37663.2
+
+Final Statistics.. 
+nni    =    19    nli   =  1140
+nfe    =    20    nfeSG =  1159
+nps    =  1159    npe   =     2     ncfl  =    19
diff --git a/examples/kinsol/serial/CMakeLists.txt b/examples/kinsol/serial/CMakeLists.txt
new file mode 100644
index 0000000..1c0a39e
--- /dev/null
+++ b/examples/kinsol/serial/CMakeLists.txt
@@ -0,0 +1,189 @@
+# ---------------------------------------------------------------
+# $Revision: 4901 $
+# $Date: 2016-09-14 07:45:54 -0700 (Wed, 14 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for KINSOL serial examples
+
+
+# Add variable KINSOL_examples with the names of the serial KINSOL examples
+
+SET(KINSOL_examples
+  kinFerTron_dns
+  kinFoodWeb_kry
+  kinKrylovDemo_ls
+  kinLaplace_bnd
+  kinLaplace_picard_bnd
+  kinRoberts_fp
+  kinRoboKin_dns
+  )
+
+# Add variable KINSOL_examples_BL with the names of the serial KINSOL examples
+# that use Lapack
+
+SET(KINSOL_examples_BL
+  )
+
+SET(KINSOL_examples_SUPERLUMT
+  kinRoboKin_slu
+  )
+
+SET(KINSOL_examples_KLU
+  kinFerTron_klu
+  )
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(KINSOL_LIB sundials_kinsol_static)
+  SET(NVECS_LIB sundials_nvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(KINSOL_LIB sundials_kinsol_shared)
+  SET(NVECS_LIB sundials_nvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${KINSOL_LIB} ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+IF(LAPACK_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_FOUND)
+
+IF(KLU_FOUND)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_FOUND)
+
+# Add the build and install targets for each KINSOL example
+
+FOREACH(example ${KINSOL_examples})
+  ADD_EXECUTABLE(${example} ${example}.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+  SUNDIALS_ADD_TEST(${example} ${example})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${KINSOL_examples})
+
+# If Lapack support is enabled, add the build and install targets for
+# the examples using Lapack
+
+IF(LAPACK_FOUND)
+  FOREACH(example ${KINSOL_examples_BL})
+    ADD_EXECUTABLE(${example} ${example}.c)    
+    SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${KINSOL_examples_BL})
+ENDIF(LAPACK_FOUND)
+
+# If SUPERLUMT support is enabled, add the build and install targets for
+# the examples using SUPERLUMT
+IF(SUPERLUMT_FOUND)
+  FOREACH(example ${KINSOL_examples_SUPERLUMT})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${KINSOL_examples_SUPERLUMT})
+ENDIF(SUPERLUMT_FOUND)
+
+# If KLU support is enabled, add the build and install targets for
+# the examples using KLU
+IF(KLU_FOUND)
+  FOREACH(example ${KINSOL_examples_KLU})
+    ADD_EXECUTABLE(${example} ${example}.c)
+    SUNDIALS_ADD_TEST(${example} ${example})
+    TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+    IF(EXAMPLES_INSTALL)
+      INSTALL(FILES ${example}.c ${example}.out DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/serial)
+    ENDIF(EXAMPLES_INSTALL)
+  ENDFOREACH(example ${KINSOL_examples_KLU})
+ENDIF(KLU_FOUND)
+
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES README DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/serial)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER "KINSOL")
+  SET(SOLVER_LIB "sundials_kinsol")
+  LIST2STRING(KINSOL_examples EXAMPLES)
+  IF(LAPACK_FOUND)
+    LIST2STRING(KINSOL_examples_BL EXAMPLES_BL)
+  ELSE()
+    SET(EXAMPLES_BL "")
+  ENDIF()
+
+  IF(SUPERLUMT_FOUND)
+    LIST2STRING(KINSOL_examples_SUPERLUMT EXAMPLES)
+  ENDIF()
+
+  IF(KLU_FOUND)
+    LIST2STRING(KINSOL_examples_KLU EXAMPLES)
+  ENDIF()
+
+  STRING (REPLACE ";" " " TMP_STR ${EXAMPLES})
+  SET(EXAMPLES ${TMP_STR})
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/kinsol/serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/kinsol/serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/serial 
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/kinsol/serial/Makefile_ex
+      @ONLY
+      )    
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/kinsol/serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/kinsol/serial 
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/kinsol/serial/README b/examples/kinsol/serial/README
new file mode 100644
index 0000000..ae1b396
--- /dev/null
+++ b/examples/kinsol/serial/README
@@ -0,0 +1,56 @@
+List of serial KINSOL examples
+
+  kinFerTron_dns:          Ferraris-Tronconi example (DENSE)
+  kinFoodWeb_kry:          2-D food web system, block-diagonal preconditioner
+  kinKrylovDemo_ls:        demonstration program with 3 Krylov solvers
+  kinLaplace_bnd:          2-D elliptic PDE (BAND)
+  kinLaplace_picard_bnd:   2-D elliptic PDE (Accelerated Picard solver, BAND)
+  kinRoberts_fp:           3-eqn chemical kinetics, accelerated fixed point
+  kinRoboKin_dns:          Robot kinematics problem (DENSE)
+  kinRoboKin_slu:          Robot problem with SuperLUMT sparse linear solver
+
+
+The following CMake command was used to configure SUNDIALS:
+
+ cmake \
+-DCMAKE_BUILD_TYPE=DEBUG \
+-DCXX_ENABLE=ON \
+-DBUILD_ARKODE=ON \
+-DBUILD_CVODE=ON \
+-DBUILD_CVODES=ON \
+-DBUILD_IDA=ON \
+-DBUILD_IDAS=ON \
+-DBUILD_KINSOL=ON \
+-DCMAKE_INSTALL_PREFIX=/home/user1/sundials/build/install \
+-DEXAMPLES_INSTALL_PATH=/home/user1/sundials/build/install/examples \
+-DBUILD_SHARED_LIBS=OFF \
+-DBUILD_STATIC_LIBS=ON \
+-DEXAMPLES_ENABLE=ON \
+-DEXAMPLES_INSTALL=ON \
+-DMPI_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DLAPACK_ENABLE=ON \
+-DKLU_ENABLE=ON \
+-DKLU_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/include \
+-DKLU_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/suitesparse/4.5.3/lib \
+-DHYPRE_ENABLE=ON \
+-DHYPRE_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/hypre/2.11.1/include \
+-DHYPRE_LIBRARY=/usr/casc/sundials/apps/rh6/hypre/2.11.1/lib/libHYPRE.a \
+-DOPENMP_ENABLE=ON \
+-DPTHREAD_ENABLE=ON \
+-DFCMIX_ENABLE=ON \
+-DF90_ENABLE=ON \
+-DSUPERLUMT_ENABLE=ON \
+-DSUPERLUMT_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/SRC \
+-DSUPERLUMT_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/superlu_mt/SuperLU_MT_3.1/lib \
+-DSUPERLUMT_THREAD_TYPE=Pthread \
+-DPETSC_ENABLE=ON \
+-DPETSC_INCLUDE_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/include \
+-DPETSC_LIBRARY_DIR=/usr/casc/sundials/apps/rh6/petsc/3.7.2/lib \
+../sundials
+
+  System Architecture: x86_64
+  Processor Type: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
+  Operating System: Red Hat 6.8
+  C/Fortran Compilers: gcc/gfortran v4.4.7
+  MPI: Open MPI v1.8.8
diff --git a/examples/kinsol/serial/kinFerTron_dns.c b/examples/kinsol/serial/kinFerTron_dns.c
new file mode 100644
index 0000000..1a3c3c3
--- /dev/null
+++ b/examples/kinsol/serial/kinFerTron_dns.c
@@ -0,0 +1,491 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example (serial):
+ *
+ * This example solves a nonlinear system from.
+ *
+ * Source: "Handbook of Test Problems in Local and Global Optimization",
+ *             C.A. Floudas, P.M. Pardalos et al.
+ *             Kluwer Academic Publishers, 1999.
+ * Test problem 4 from Section 14.1, Chapter 14: Ferraris and Tronconi
+ * 
+ * This problem involves a blend of trigonometric and exponential terms.
+ *    0.5 sin(x1 x2) - 0.25 x2/pi - 0.5 x1 = 0
+ *    (1-0.25/pi) ( exp(2 x1)-e ) + e x2 / pi - 2 e x1 = 0
+ * such that
+ *    0.25 <= x1 <=1.0
+ *    1.5 <= x2 <= 2 pi
+ * 
+ * The treatment of the bound constraints on x1 and x2 is done using
+ * the additional variables
+ *    l1 = x1 - x1_min >= 0
+ *    L1 = x1 - x1_max <= 0
+ *    l2 = x2 - x2_min >= 0
+ *    L2 = x2 - x2_max >= 0
+ * 
+ * and using the constraint feature in KINSOL to impose
+ *    l1 >= 0    l2 >= 0
+ *    L1 <= 0    L2 <= 0
+ * 
+ * The Ferraris-Tronconi test problem has two known solutions.
+ * The nonlinear system is solved by KINSOL using different 
+ * combinations of globalization and Jacobian update strategies 
+ * and with different initial guesses (leading to one or the other
+ * of the known solutions).
+ *
+ *
+ * Constraints are imposed to make all components of the solution
+ * positive.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NVAR   2
+#define NEQ    3*NVAR
+
+#define FTOL   RCONST(1.e-5)  /* function tolerance */
+#define STOL   RCONST(1.e-5) /* step tolerance */
+
+#define ZERO   RCONST(0.0)
+#define PT25   RCONST(0.25)
+#define PT5    RCONST(0.5)
+#define ONE    RCONST(1.0)
+#define ONEPT5 RCONST(1.5)
+#define TWO    RCONST(2.0)
+
+#define PI     RCONST(3.1415926)
+#define E      RCONST(2.7182818)
+
+typedef struct {
+  realtype lb[NVAR];
+  realtype ub[NVAR];
+} *UserData;
+
+/* Accessor macro */
+#define Ith(v,i)    NV_Ith_S(v,i-1)   
+
+/* Functions Called by the KINSOL Solver */
+static int func(N_Vector u, N_Vector f, void *user_data);
+
+/* Private Helper Functions */
+static void SetInitialGuess1(N_Vector u, UserData data);
+static void SetInitialGuess2(N_Vector u, UserData data);
+static int SolveIt(void *kmem, N_Vector u, N_Vector s, int glstr, int mset);
+static void PrintHeader(realtype fnormtol, realtype scsteptol);
+static void PrintOutput(N_Vector u);
+static void PrintFinalStats(void *kmem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{
+  UserData data;
+  realtype fnormtol, scsteptol;
+  N_Vector u1, u2, u, s, c;
+  int glstr, mset, flag;
+  void *kmem;
+
+  u1 = u2 = u = NULL;
+  s = c = NULL;
+  kmem = NULL;
+  data = NULL;
+
+  /* User data */
+
+  data = (UserData)malloc(sizeof *data);
+  data->lb[0] = PT25;       data->ub[0] = ONE;
+  data->lb[1] = ONEPT5;     data->ub[1] = TWO*PI;
+
+  /* Create serial vectors of length NEQ */
+  u1 = N_VNew_Serial(NEQ);
+  if (check_flag((void *)u1, "N_VNew_Serial", 0)) return(1);
+
+  u2 = N_VNew_Serial(NEQ);
+  if (check_flag((void *)u2, "N_VNew_Serial", 0)) return(1);
+
+  u = N_VNew_Serial(NEQ);
+  if (check_flag((void *)u, "N_VNew_Serial", 0)) return(1);
+
+  s = N_VNew_Serial(NEQ);
+  if (check_flag((void *)s, "N_VNew_Serial", 0)) return(1);
+
+  c = N_VNew_Serial(NEQ);
+  if (check_flag((void *)c, "N_VNew_Serial", 0)) return(1);
+
+  SetInitialGuess1(u1,data);
+  SetInitialGuess2(u2,data);
+
+  N_VConst_Serial(ONE,s); /* no scaling */
+
+  Ith(c,1) =  ZERO;   /* no constraint on x1 */
+  Ith(c,2) =  ZERO;   /* no constraint on x2 */
+  Ith(c,3) =  ONE;    /* l1 = x1 - x1_min >= 0 */
+  Ith(c,4) = -ONE;    /* L1 = x1 - x1_max <= 0 */
+  Ith(c,5) =  ONE;    /* l2 = x2 - x2_min >= 0 */
+  Ith(c,6) = -ONE;    /* L2 = x2 - x22_min <= 0 */
+  
+  fnormtol=FTOL; scsteptol=STOL;
+
+
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0)) return(1);
+
+  flag = KINSetUserData(kmem, data);
+  if (check_flag(&flag, "KINSetUserData", 1)) return(1);
+  flag = KINSetConstraints(kmem, c);
+  if (check_flag(&flag, "KINSetConstraints", 1)) return(1);
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1)) return(1);
+  flag = KINSetScaledStepTol(kmem, scsteptol);
+  if (check_flag(&flag, "KINSetScaledStepTol", 1)) return(1);
+
+  flag = KINInit(kmem, func, u);
+  if (check_flag(&flag, "KINInit", 1)) return(1);
+
+  /* Call KINDense to specify the linear solver */
+
+  flag = KINDense(kmem, NEQ);
+  if (check_flag(&flag, "KINDense", 1)) return(1);
+
+  /* Print out the problem size, solution parameters, initial guess. */
+  PrintHeader(fnormtol, scsteptol);
+
+  /* --------------------------- */
+
+  printf("\n------------------------------------------\n");
+  printf("\nInitial guess on lower bounds\n");
+  printf("  [x1,x2] = ");
+  PrintOutput(u1);
+
+  N_VScale_Serial(ONE,u1,u);
+  glstr = KIN_NONE;
+  mset = 1;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u1,u);
+  glstr = KIN_LINESEARCH;
+  mset = 1;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u1,u);
+  glstr = KIN_NONE;
+  mset = 0;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u1,u);
+  glstr = KIN_LINESEARCH;
+  mset = 0;
+  SolveIt(kmem, u, s, glstr, mset);
+
+
+
+  /* --------------------------- */
+
+  printf("\n------------------------------------------\n");
+  printf("\nInitial guess in middle of feasible region\n");
+  printf("  [x1,x2] = ");
+  PrintOutput(u2);
+
+  N_VScale_Serial(ONE,u2,u);
+  glstr = KIN_NONE;
+  mset = 1;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u2,u);
+  glstr = KIN_LINESEARCH;
+  mset = 1;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u2,u);
+  glstr = KIN_NONE;
+  mset = 0;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u2,u);
+  glstr = KIN_LINESEARCH;
+  mset = 0;
+  SolveIt(kmem, u, s, glstr, mset);
+
+
+
+
+  /* Free memory */
+
+  N_VDestroy_Serial(u);
+  N_VDestroy_Serial(s);
+  N_VDestroy_Serial(c);
+  KINFree(&kmem);
+  free(data);
+
+  return(0);
+}
+
+
+static int SolveIt(void *kmem, N_Vector u, N_Vector s, int glstr, int mset)
+{
+  int flag;
+
+  printf("\n");
+
+  if (mset==1)
+    printf("Exact Newton");
+  else
+    printf("Modified Newton");
+
+  if (glstr == KIN_NONE)
+    printf("\n");
+  else
+    printf(" with line search\n");
+
+  flag = KINSetMaxSetupCalls(kmem, mset);
+  if (check_flag(&flag, "KINSetMaxSetupCalls", 1)) return(1);
+
+  flag = KINSol(kmem, u, glstr, s, s);
+  if (check_flag(&flag, "KINSol", 1)) return(1);
+
+  printf("Solution:\n  [x1,x2] = ");
+  PrintOutput(u);
+
+  PrintFinalStats(kmem);
+
+  return(0);
+
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY KINSOL
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * System function for predator-prey system 
+ */
+
+static int func(N_Vector u, N_Vector f, void *user_data)
+{
+  realtype *udata, *fdata;
+  realtype x1, l1, L1, x2, l2, L2;
+  realtype *lb, *ub;
+  UserData data;
+  
+  data = (UserData)user_data;
+  lb = data->lb;
+  ub = data->ub;
+
+  udata = N_VGetArrayPointer_Serial(u);
+  fdata = N_VGetArrayPointer_Serial(f);
+
+  x1 = udata[0];
+  x2 = udata[1];
+  l1 = udata[2];
+  L1 = udata[3];
+  l2 = udata[4];
+  L2 = udata[5];
+
+  fdata[0] = PT5 * sin(x1*x2) - PT25 * x2 / PI - PT5 * x1;
+  fdata[1] = (ONE - PT25/PI)*(SUNRexp(TWO*x1)-E) + E*x2/PI - TWO*E*x1;
+  fdata[2] = l1 - x1 + lb[0];
+  fdata[3] = L1 - x1 + ub[0];
+  fdata[4] = l2 - x2 + lb[1];
+  fdata[5] = L2 - x2 + ub[1];
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Initial guesses
+ */
+
+static void SetInitialGuess1(N_Vector u, UserData data)
+{
+  realtype x1, x2;
+  realtype *udata;
+  realtype *lb, *ub;
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  lb = data->lb;
+  ub = data->ub;
+
+  /* There are two known solutions for this problem */
+
+  /* this init. guess should take us to (0.29945; 2.83693) */
+  x1 = lb[0];
+  x2 = lb[1];
+
+  udata[0] = x1;
+  udata[1] = x2;
+  udata[2] = x1 - lb[0];
+  udata[3] = x1 - ub[0];
+  udata[4] = x2 - lb[1];
+  udata[5] = x2 - ub[1];
+}
+
+static void SetInitialGuess2(N_Vector u, UserData data)
+{
+  realtype x1, x2;
+  realtype *udata;
+  realtype *lb, *ub;
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  lb = data->lb;
+  ub = data->ub;
+
+  /* There are two known solutions for this problem */
+
+  /* this init. guess should take us to (0.5; 3.1415926) */
+  x1 = PT5 * (lb[0] + ub[0]);
+  x2 = PT5 * (lb[1] + ub[1]);
+
+  udata[0] = x1;
+  udata[1] = x2;
+  udata[2] = x1 - lb[0];
+  udata[3] = x1 - ub[0];
+  udata[4] = x2 - lb[1];
+  udata[5] = x2 - ub[1];
+}
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype fnormtol, realtype scsteptol)
+{
+  printf("\nFerraris and Tronconi test problem\n");
+  printf("Tolerance parameters:\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("  fnormtol  = %10.6Lg\n  scsteptol = %10.6Lg\n",
+         fnormtol, scsteptol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("  fnormtol  = %10.6g\n  scsteptol = %10.6g\n",
+         fnormtol, scsteptol);
+#else
+  printf("  fnormtol  = %10.6g\n  scsteptol = %10.6g\n",
+         fnormtol, scsteptol);
+#endif
+}
+
+/* 
+ * Print solution
+ */
+
+static void PrintOutput(N_Vector u)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %8.6Lg  %8.6Lg\n", Ith(u,1), Ith(u,2));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %8.6g  %8.6g\n", Ith(u,1), Ith(u,2));
+#else
+    printf(" %8.6g  %8.6g\n", Ith(u,1), Ith(u,2));
+#endif
+}
+
+/* 
+ * Print final statistics contained in iopt 
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe, nje, nfeD;
+  int flag;
+  
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1);
+
+  flag = KINDlsGetNumJacEvals(kmem, &nje);
+  check_flag(&flag, "KINDlsGetNumJacEvals", 1);
+  flag = KINDlsGetNumFuncEvals(kmem, &nfeD);
+  check_flag(&flag, "KINDlsGetNumFuncEvals", 1);
+
+  printf("Final Statistics:\n");
+  printf("  nni = %5ld    nfe  = %5ld \n", nni, nfe);
+  printf("  nje = %5ld    nfeD = %5ld \n", nje, nfeD);
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr,
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/serial/kinFerTron_dns.out b/examples/kinsol/serial/kinFerTron_dns.out
new file mode 100644
index 0000000..e659a0a
--- /dev/null
+++ b/examples/kinsol/serial/kinFerTron_dns.out
@@ -0,0 +1,71 @@
+
+Ferraris and Tronconi test problem
+Tolerance parameters:
+  fnormtol  =      1e-05
+  scsteptol =      1e-05
+
+------------------------------------------
+
+Initial guess on lower bounds
+  [x1,x2] =      0.25       1.5
+
+Exact Newton
+Solution:
+  [x1,x2] =  0.299449   2.83693
+Final Statistics:
+  nni =     3    nfe  =     4 
+  nje =     3    nfeD =    18 
+
+Exact Newton with line search
+Solution:
+  [x1,x2] =  0.299449   2.83693
+Final Statistics:
+  nni =     3    nfe  =     4 
+  nje =     3    nfeD =    18 
+
+Modified Newton
+Solution:
+  [x1,x2] =  0.299449   2.83693
+Final Statistics:
+  nni =    11    nfe  =    12 
+  nje =     2    nfeD =    12 
+
+Modified Newton with line search
+Solution:
+  [x1,x2] =  0.299449   2.83693
+Final Statistics:
+  nni =    11    nfe  =    12 
+  nje =     2    nfeD =    12 
+
+------------------------------------------
+
+Initial guess in middle of feasible region
+  [x1,x2] =     0.625   3.89159
+
+Exact Newton
+Solution:
+  [x1,x2] =       0.5   3.14159
+Final Statistics:
+  nni =     5    nfe  =     6 
+  nje =     5    nfeD =    30 
+
+Exact Newton with line search
+Solution:
+  [x1,x2] =       0.5   3.14159
+Final Statistics:
+  nni =     5    nfe  =     6 
+  nje =     5    nfeD =    30 
+
+Modified Newton
+Solution:
+  [x1,x2] =  0.500003    3.1416
+Final Statistics:
+  nni =    12    nfe  =    13 
+  nje =     2    nfeD =    12 
+
+Modified Newton with line search
+Solution:
+  [x1,x2] =  0.500003    3.1416
+Final Statistics:
+  nni =    12    nfe  =    13 
+  nje =     2    nfeD =    12 
diff --git a/examples/kinsol/serial/kinFerTron_klu.c b/examples/kinsol/serial/kinFerTron_klu.c
new file mode 100644
index 0000000..2d8bc06
--- /dev/null
+++ b/examples/kinsol/serial/kinFerTron_klu.c
@@ -0,0 +1,623 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4552 $
+ * $Date: 2015-07-29 10:12:20 -0700 (Wed, 29 Jul 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example (serial):
+ *
+ * This example solves a nonlinear system from.
+ *
+ * Source: "Handbook of Test Problems in Local and Global Optimization",
+ *             C.A. Floudas, P.M. Pardalos et al.
+ *             Kluwer Academic Publishers, 1999.
+ * Test problem 4 from Section 14.1, Chapter 14: Ferraris and Tronconi
+ * 
+ * This problem involves a blend of trigonometric and exponential terms.
+ *    0.5 sin(x1 x2) - 0.25 x2/pi - 0.5 x1 = 0
+ *    (1-0.25/pi) ( exp(2 x1)-e ) + e x2 / pi - 2 e x1 = 0
+ * such that
+ *    0.25 <= x1 <=1.0
+ *    1.5 <= x2 <= 2 pi
+ * 
+ * The treatment of the bound constraints on x1 and x2 is done using
+ * the additional variables
+ *    l1 = x1 - x1_min >= 0
+ *    L1 = x1 - x1_max <= 0
+ *    l2 = x2 - x2_min >= 0
+ *    L2 = x2 - x2_max >= 0
+ * 
+ * and using the constraint feature in KINSOL to impose
+ *    l1 >= 0    l2 >= 0
+ *    L1 <= 0    L2 <= 0
+ * 
+ * The Ferraris-Tronconi test problem has two known solutions.
+ * The nonlinear system is solved by KINSOL using different 
+ * combinations of globalization and Jacobian update strategies 
+ * and with different initial guesses (leading to one or the other
+ * of the known solutions).
+ *
+ *
+ * Constraints are imposed to make all components of the solution
+ * positive.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_klu.h>
+#include <kinsol/kinsol_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NVAR   2
+#define NEQ    3*NVAR
+
+#define FTOL   RCONST(1.e-5) /* function tolerance */
+#define STOL   RCONST(1.e-5) /* step tolerance     */
+
+#define ZERO   RCONST(0.0)
+#define PT25   RCONST(0.25)
+#define PT5    RCONST(0.5)
+#define ONE    RCONST(1.0)
+#define ONEPT5 RCONST(1.5)
+#define TWO    RCONST(2.0)
+
+#define PI     RCONST(3.1415926)
+#define E      RCONST(2.7182818)
+
+typedef struct {
+  realtype lb[NVAR];
+  realtype ub[NVAR];
+  int nnz;
+} *UserData;
+
+/* Functions Called by the KINSOL Solver */
+static int func(N_Vector u, N_Vector f, void *user_data);
+static int jac(N_Vector y, N_Vector f, SlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2);
+static int jacDense(long int N,
+                    N_Vector y, N_Vector f,
+                    DlsMat J, void *user_data,
+                    N_Vector tmp1, N_Vector tmp2);
+
+/* Private Helper Functions */
+static void SetInitialGuess1(N_Vector u, UserData data);
+static void SetInitialGuess2(N_Vector u, UserData data);
+static int SolveIt(void *kmem, N_Vector u, N_Vector s, int glstr, int mset);
+static void PrintHeader(realtype fnormtol, realtype scsteptol);
+static void PrintOutput(N_Vector u);
+static void PrintFinalStats(void *kmem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{
+  UserData data;
+  realtype fnormtol, scsteptol;
+  N_Vector u1, u2, u, s, c;
+  int glstr, mset, flag;
+  void *kmem;
+
+  u1 = u2 = u = NULL;
+  s = c = NULL;
+  kmem = NULL;
+  data = NULL;
+
+  /* User data */
+
+  data = (UserData)malloc(sizeof *data);
+  data->lb[0] = PT25;       data->ub[0] = ONE;
+  data->lb[1] = ONEPT5;     data->ub[1] = TWO*PI;
+  data->nnz = 12;
+
+  /* Create serial vectors of length NEQ */
+  u1 = N_VNew_Serial(NEQ);
+  if (check_flag((void *)u1, "N_VNew_Serial", 0)) return(1);
+
+  u2 = N_VNew_Serial(NEQ);
+  if (check_flag((void *)u2, "N_VNew_Serial", 0)) return(1);
+
+  u = N_VNew_Serial(NEQ);
+  if (check_flag((void *)u, "N_VNew_Serial", 0)) return(1);
+
+  s = N_VNew_Serial(NEQ);
+  if (check_flag((void *)s, "N_VNew_Serial", 0)) return(1);
+
+  c = N_VNew_Serial(NEQ);
+  if (check_flag((void *)c, "N_VNew_Serial", 0)) return(1);
+
+  SetInitialGuess1(u1,data);
+  SetInitialGuess2(u2,data);
+
+  N_VConst_Serial(ONE,s); /* no scaling */
+
+  NV_Ith_S(c,0) =  ZERO;   /* no constraint on x1 */
+  NV_Ith_S(c,1) =  ZERO;   /* no constraint on x2 */
+  NV_Ith_S(c,2) =  ONE;    /* l1 = x1 - x1_min >= 0  */
+  NV_Ith_S(c,3) = -ONE;    /* L1 = x1 - x1_max <= 0  */
+  NV_Ith_S(c,4) =  ONE;    /* l2 = x2 - x2_min >= 0  */
+  NV_Ith_S(c,5) = -ONE;    /* L2 = x2 - x22_min <= 0 */
+  
+  fnormtol=FTOL; scsteptol=STOL;
+
+
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0)) return(1);
+
+  flag = KINSetUserData(kmem, data);
+  if (check_flag(&flag, "KINSetUserData", 1)) return(1);
+  flag = KINSetConstraints(kmem, c);
+  if (check_flag(&flag, "KINSetConstraints", 1)) return(1);
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1)) return(1);
+  flag = KINSetScaledStepTol(kmem, scsteptol);
+  if (check_flag(&flag, "KINSetScaledStepTol", 1)) return(1);
+
+  flag = KINInit(kmem, func, u);
+  if (check_flag(&flag, "KINInit", 1)) return(1);
+
+  /* Call KINDense to specify the linear solver */
+/*   
+ * flag = KINDense(kmem, NEQ); // <-- Replace with KINKLU
+ * if (check_flag(&flag, "KINDense", 1)) return(1);
+ * flag = KINDlsSetDenseJacFn(kmem, jacDense);
+ * if (check_flag(&flag, "KINDlsSetDenseJacFn", 1)) return(1);
+ */
+
+  /* Attach KLU linear solver, which uses CSR matrix */
+  flag = KINKLU(kmem, NEQ, data->nnz, CSR_MAT);
+  if (check_flag(&flag, "KINKLU", 1)) return(1);
+
+  flag = KINSlsSetSparseJacFn(kmem, jac);
+  if (check_flag(&flag, "KINSlsSetSparseJacFn", 1)) return(1);
+
+  /* Print out the problem size, solution parameters, initial guess. */
+  PrintHeader(fnormtol, scsteptol);
+
+  /* --------------------------- */
+
+  printf("\n------------------------------------------\n");
+  printf("\nInitial guess on lower bounds\n");
+  printf("  [x1,x2] = ");
+  PrintOutput(u1);
+
+  N_VScale_Serial(ONE,u1,u);
+  glstr = KIN_NONE;
+  mset = 1;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u1,u);
+  glstr = KIN_LINESEARCH;
+  mset = 1;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u1,u);
+  glstr = KIN_NONE;
+  mset = 0;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u1,u);
+  glstr = KIN_LINESEARCH;
+  mset = 0;
+  SolveIt(kmem, u, s, glstr, mset);
+
+
+
+  /* --------------------------- */
+
+  printf("\n------------------------------------------\n");
+  printf("\nInitial guess in middle of feasible region\n");
+  printf("  [x1,x2] = ");
+  PrintOutput(u2);
+
+  N_VScale_Serial(ONE,u2,u);
+  glstr = KIN_NONE;
+  mset = 1;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u2,u);
+  glstr = KIN_LINESEARCH;
+  mset = 1;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u2,u);
+  glstr = KIN_NONE;
+  mset = 0;
+  SolveIt(kmem, u, s, glstr, mset);
+
+  /* --------------------------- */
+
+  N_VScale_Serial(ONE,u2,u);
+  glstr = KIN_LINESEARCH;
+  mset = 0;
+  SolveIt(kmem, u, s, glstr, mset);
+
+
+
+
+  /* Free memory */
+
+  N_VDestroy_Serial(u1);
+  N_VDestroy_Serial(u2);
+  N_VDestroy_Serial(u);
+  N_VDestroy_Serial(s);
+  N_VDestroy_Serial(c);
+  KINFree(&kmem);
+  free(data);
+
+  return(0);
+}
+
+
+static int SolveIt(void *kmem, N_Vector u, N_Vector s, int glstr, int mset)
+{
+  int flag;
+
+  printf("\n");
+
+  if (mset==1)
+    printf("Exact Newton");
+  else
+    printf("Modified Newton");
+
+  if (glstr == KIN_NONE)
+    printf("\n");
+  else
+    printf(" with line search\n");
+
+  flag = KINSetMaxSetupCalls(kmem, mset);
+  if (check_flag(&flag, "KINSetMaxSetupCalls", 1)) return(1);
+
+  flag = KINSol(kmem, u, glstr, s, s);
+  if (check_flag(&flag, "KINSol", 1)) return(1);
+
+  printf("Solution:\n  [x1,x2] = ");
+  PrintOutput(u);
+
+  PrintFinalStats(kmem);
+
+  return(0);
+
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY KINSOL
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * System function for predator-prey system 
+ */
+
+static int func(N_Vector u, N_Vector f, void *user_data)
+{
+  realtype *udata, *fdata;
+  realtype x1, l1, L1, x2, l2, L2;
+  realtype *lb, *ub;
+  UserData params;
+  
+  params = (UserData)user_data;
+  lb = params->lb;
+  ub = params->ub;
+
+  udata = N_VGetArrayPointer_Serial(u);
+  fdata = N_VGetArrayPointer_Serial(f);
+
+  x1 = udata[0];
+  x2 = udata[1];
+  l1 = udata[2];
+  L1 = udata[3];
+  l2 = udata[4];
+  L2 = udata[5];
+
+  fdata[0] = PT5 * sin(x1*x2) - PT25 * x2 / PI - PT5 * x1;
+  fdata[1] = (ONE - PT25/PI)*(SUNRexp(TWO*x1)-E) + E*x2/PI - TWO*E*x1;
+  fdata[2] = l1 - x1 + lb[0];
+  fdata[3] = L1 - x1 + ub[0];
+  fdata[4] = l2 - x2 + lb[1];
+  fdata[5] = L2 - x2 + ub[1];
+
+  return(0);
+}
+
+
+/*
+ * System Jacobian
+ */
+
+static int jac(N_Vector y, N_Vector f,
+               SlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2)
+{
+  realtype *yd;
+  int *rowptrs;
+  int *colvals;
+  realtype *data;
+  
+  yd = N_VGetArrayPointer_Serial(y);
+  rowptrs = (*J->rowptrs);
+  colvals = (*J->colvals);
+  data    = J->data;
+  
+  SparseSetMatToZero(J);
+
+  rowptrs[0] =  0;
+  rowptrs[1] =  2;
+  rowptrs[2] =  4;
+  rowptrs[3] =  6;
+  rowptrs[4] =  8;
+  rowptrs[5] = 10;
+  rowptrs[6] = 12;
+
+  /* row 0 */
+  data[0] = PT5 * cos(yd[0]*yd[1]) * yd[1] - PT5;
+  colvals[0] = 0;
+  data[1] = PT5 * cos(yd[0]*yd[1]) * yd[0] - PT25/PI;
+  colvals[1] = 1;
+
+  /* row 1 */
+  data[2] = TWO * (ONE - PT25/PI) * (SUNRexp(TWO*yd[0]) - E);
+  colvals[2] = 0;
+  data[3] = E/PI;
+  colvals[3] = 1;
+  
+  /* row 2 */
+  data[4] = -ONE;
+  colvals[4] = 0;
+  data[5] =  ONE;
+  colvals[5] = 2;
+  
+  /* row 3 */
+  data[6] = -ONE;
+  colvals[6] = 0;
+  data[7] =  ONE;
+  colvals[7] = 3;
+  
+  /* row 4 */
+  data[8] = -ONE;
+  colvals[8] = 1;
+  data[9] =  ONE;
+  colvals[9] = 4;
+  
+  /* row 5 */
+  data[10] = -ONE;
+  colvals[10] = 1;
+  data[11] =  ONE;
+  colvals[11] = 5;
+  
+  return(0);
+
+}
+
+
+/*
+ * System dense Jacobian
+ */
+
+static int jacDense(long int N,
+                    N_Vector y, N_Vector f,
+                    DlsMat J, void *user_data,
+                    N_Vector tmp1, N_Vector tmp2)
+{
+  realtype *yd;
+
+  yd = N_VGetArrayPointer_Serial(y);
+
+  /* row 0 */
+  DENSE_ELEM(J,0,0) = PT5 * cos(yd[0]*yd[1]) * yd[1] - PT5;
+  DENSE_ELEM(J,0,1) = PT5 * cos(yd[0]*yd[1]) * yd[0] - PT25/PI;
+
+  /* row 1 */
+  DENSE_ELEM(J,1,0) = TWO * (ONE - PT25/PI) * (SUNRexp(TWO*yd[0]) - E);
+  DENSE_ELEM(J,1,1) = E/PI;
+  
+  /* row 2 */
+  DENSE_ELEM(J,2,0) = -ONE;
+  DENSE_ELEM(J,2,2) =  ONE;
+  
+  /* row 3 */
+  DENSE_ELEM(J,3,0) = -ONE;
+  DENSE_ELEM(J,3,3) =  ONE;
+  
+  /* row 4 */
+  DENSE_ELEM(J,4,1) = -ONE;
+  DENSE_ELEM(J,4,4) =  ONE;
+  
+  /* row 5 */
+  DENSE_ELEM(J,5,1) = -ONE;
+  DENSE_ELEM(J,5,5) =  ONE;
+  
+
+  return(0);
+}
+
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Initial guesses
+ */
+
+static void SetInitialGuess1(N_Vector u, UserData data)
+{
+  realtype x1, x2;
+  realtype *udata;
+  realtype *lb, *ub;
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  lb = data->lb;
+  ub = data->ub;
+
+  /* There are two known solutions for this problem */
+
+  /* this init. guess should take us to (0.29945; 2.83693) */
+  x1 = lb[0];
+  x2 = lb[1];
+
+  udata[0] = x1;
+  udata[1] = x2;
+  udata[2] = x1 - lb[0];
+  udata[3] = x1 - ub[0];
+  udata[4] = x2 - lb[1];
+  udata[5] = x2 - ub[1];
+}
+
+static void SetInitialGuess2(N_Vector u, UserData data)
+{
+  realtype x1, x2;
+  realtype *udata;
+  realtype *lb, *ub;
+
+  udata = N_VGetArrayPointer_Serial(u);
+
+  lb = data->lb;
+  ub = data->ub;
+
+  /* There are two known solutions for this problem */
+
+  /* this init. guess should take us to (0.5; 3.1415926) */
+  x1 = PT5 * (lb[0] + ub[0]);
+  x2 = PT5 * (lb[1] + ub[1]);
+
+  udata[0] = x1;
+  udata[1] = x2;
+  udata[2] = x1 - lb[0];
+  udata[3] = x1 - ub[0];
+  udata[4] = x2 - lb[1];
+  udata[5] = x2 - ub[1];
+}
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(realtype fnormtol, realtype scsteptol)
+{
+  printf("\nFerraris and Tronconi test problem\n");
+  printf("Tolerance parameters:\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("  fnormtol  = %10.6Lg\n  scsteptol = %10.6Lg\n",
+         fnormtol, scsteptol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("  fnormtol  = %10.6g\n  scsteptol = %10.6g\n",
+         fnormtol, scsteptol);
+#else
+  printf("  fnormtol  = %10.6g\n  scsteptol = %10.6g\n",
+         fnormtol, scsteptol);
+#endif
+}
+
+/* 
+ * Print solution
+ */
+
+static void PrintOutput(N_Vector u)
+{
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %8.6Lg  %8.6Lg\n", NV_Ith_S(u,0), NV_Ith_S(u,1));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %8.6g  %8.6g\n", NV_Ith_S(u,0), NV_Ith_S(u,1));
+#else
+    printf(" %8.6g  %8.6g\n", NV_Ith_S(u,0), NV_Ith_S(u,1));
+#endif
+}
+
+/* 
+ * Print final statistics contained in iopt 
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe, nje, nfeD;
+  int flag;
+  
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1);
+
+/*   flag = KINDlsGetNumJacEvals(kmem, &nje);
+ *   check_flag(&flag, "KINDlsGetNumJacEvals", 1);
+ */
+
+  flag = KINSlsGetNumJacEvals(kmem, &nje);
+  check_flag(&flag, "KINSlsGetNumJacEvals", 1);
+  
+  printf("Final Statistics:\n");
+  printf("  nni = %5ld    nfe  = %5ld \n", nni, nfe);
+  printf("  nje = %5ld    \n", nje);
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+              funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr,
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+            funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/serial/kinFerTron_klu.out b/examples/kinsol/serial/kinFerTron_klu.out
new file mode 100644
index 0000000..df23733
--- /dev/null
+++ b/examples/kinsol/serial/kinFerTron_klu.out
@@ -0,0 +1,71 @@
+
+Ferraris and Tronconi test problem
+Tolerance parameters:
+  fnormtol  =      1e-05
+  scsteptol =      1e-05
+
+------------------------------------------
+
+Initial guess on lower bounds
+  [x1,x2] =      0.25       1.5
+
+Exact Newton
+Solution:
+  [x1,x2] =  0.299448   2.83693
+Final Statistics:
+  nni =     4    nfe  =     5 
+  nje =     4    
+
+Exact Newton with line search
+Solution:
+  [x1,x2] =  0.299448   2.83693
+Final Statistics:
+  nni =     4    nfe  =     5 
+  nje =     4    
+
+Modified Newton
+Solution:
+  [x1,x2] =  0.299448   2.83693
+Final Statistics:
+  nni =    12    nfe  =    13 
+  nje =     2    
+
+Modified Newton with line search
+Solution:
+  [x1,x2] =  0.299448   2.83693
+Final Statistics:
+  nni =    12    nfe  =    13 
+  nje =     2    
+
+------------------------------------------
+
+Initial guess in middle of feasible region
+  [x1,x2] =     0.625   3.89159
+
+Exact Newton
+Solution:
+  [x1,x2] =  0.499999    3.1416
+Final Statistics:
+  nni =     6    nfe  =     7 
+  nje =     6    
+
+Exact Newton with line search
+Solution:
+  [x1,x2] =  0.500001   3.14159
+Final Statistics:
+  nni =     6    nfe  =     8 
+  nje =     6    
+
+Modified Newton
+Solution:
+  [x1,x2] =       0.5   3.14159
+Final Statistics:
+  nni =    14    nfe  =    15 
+  nje =     2    
+
+Modified Newton with line search
+Solution:
+  [x1,x2] =       0.5   3.14159
+Final Statistics:
+  nni =    14    nfe  =    15 
+  nje =     2    
diff --git a/examples/kinsol/serial/kinFoodWeb_kry.c b/examples/kinsol/serial/kinFoodWeb_kry.c
new file mode 100644
index 0000000..b6151ea
--- /dev/null
+++ b/examples/kinsol/serial/kinFoodWeb_kry.c
@@ -0,0 +1,789 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Example (serial):
+ *
+ * This example solves a nonlinear system that arises from a system
+ * of partial differential equations. The PDE system is a food web
+ * population model, with predator-prey interaction and diffusion
+ * on the unit square in two dimensions. The dependent variable
+ * vector is the following:
+ * 
+ *       1   2         ns
+ * c = (c , c ,  ..., c  )     (denoted by the variable cc)
+ * 
+ * and the PDE's are as follows:
+ *
+ *                    i       i
+ *         0 = d(i)*(c     + c    )  +  f  (x,y,c)   (i=1,...,ns)
+ *                    xx      yy         i
+ *
+ *   where
+ *
+ *                   i             ns         j
+ *   f  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The number np is both the
+ * number of prey and predator species. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *   a(i,i) = -AA   (all i)
+ *   a(i,j) = -GG   (i <= np , j >  np)
+ *   a(i,j) =  EE   (i >  np,  j <= np)
+ *   b(i) = BB * (1 + alpha * x * y)   (i <= np)
+ *   b(i) =-BB * (1 + alpha * x * y)   (i >  np)
+ *   d(i) = DPREY   (i <= np)
+ *   d(i) = DPRED   ( i > np)
+ *
+ * The various scalar parameters are set using define's or in
+ * routine InitUserData.
+ *
+ * The boundary conditions are: normal derivative = 0, and the
+ * initial guess is constant in x and y, but the final solution
+ * is not.
+ *
+ * The PDEs are discretized by central differencing on an MX by
+ * MY mesh.
+ * 
+ * The nonlinear system is solved by KINSOL using the method
+ * specified in local variable globalstrat.
+ *
+ * The preconditioner matrix is a block-diagonal matrix based on
+ * the partial derivatives of the interaction terms f only.
+ *
+ * Constraints are imposed to make all components of the solution
+ * positive.
+ * -----------------------------------------------------------------
+ * References:
+ *
+ * 1. Peter N. Brown and Youcef Saad,
+ *    Hybrid Krylov Methods for Nonlinear Systems of Equations
+ *    LLNL report UCRL-97645, November 1987.
+ *
+ * 2. Peter N. Brown and Alan C. Hindmarsh,
+ *    Reduced Storage Matrix Methods in Stiff ODE systems,
+ *    Lawrence Livermore National Laboratory Report  UCRL-95088,
+ *    Rev. 1, June 1987, and  Journal of Applied Mathematics and
+ *    Computation, Vol. 31 (May 1989), pp. 40-91. (Presents a
+ *    description of the time-dependent version of this test
+ *    problem.)
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_spgmr.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NUM_SPECIES     6  /* must equal 2*(number of prey or predators)
+                              number of prey = number of predators       */ 
+
+#define PI       RCONST(3.1415926535898)   /* pi */ 
+
+#define MX          8              /* MX = number of x mesh points */
+#define MY          8              /* MY = number of y mesh points */
+#define NSMX        (NUM_SPECIES * MX)
+#define NEQ         (NSMX * MY)    /* number of equations in the system */
+#define AA          RCONST(1.0)    /* value of coefficient AA in above eqns */
+#define EE          RCONST(10000.) /* value of coefficient EE in above eqns */
+#define GG          RCONST(0.5e-6) /* value of coefficient GG in above eqns */
+#define BB          RCONST(1.0)    /* value of coefficient BB in above eqns */
+#define DPREY       RCONST(1.0)    /* value of coefficient dprey above */
+#define DPRED       RCONST(0.5)    /* value of coefficient dpred above */
+#define ALPHA       RCONST(1.0)    /* value of coefficient alpha above */
+#define AX          RCONST(1.0)    /* total range of x variable */
+#define AY          RCONST(1.0)    /* total range of y variable */
+#define FTOL        RCONST(1.e-7)  /* ftol tolerance */
+#define STOL        RCONST(1.e-13) /* stol tolerance */
+#define THOUSAND    RCONST(1000.0) /* one thousand */
+#define ZERO        RCONST(0.)     /* 0. */
+#define ONE         RCONST(1.0)    /* 1. */
+#define TWO         RCONST(2.0)    /* 2. */
+#define PREYIN      RCONST(1.0)    /* initial guess for prey concentrations. */
+#define PREDIN      RCONST(30000.0)/* initial guess for predator concs.      */
+
+/* User-defined vector access macro: IJ_Vptr */
+
+/* IJ_Vptr is defined in order to translate from the underlying 3D structure
+   of the dependent variable vector to the 1D storage scheme for an N-vector.
+   IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+   indices is = 0, jx = i, jy = j.    */
+
+#define IJ_Vptr(vv,i,j)   (&NV_Ith_S(vv, i*NUM_SPECIES + j*NSMX))
+
+/* Type : UserData 
+   contains preconditioner blocks, pivot arrays, and problem constants */
+
+typedef struct {
+  realtype **P[MX][MY];
+  long int *pivot[MX][MY];
+  realtype **acoef, *bcoef;
+  N_Vector rates;
+  realtype *cox, *coy;
+  realtype ax, ay, dx, dy;
+  realtype uround, sqruround;
+  long int mx, my, ns, np;
+} *UserData;
+
+/* Functions Called by the KINSOL Solver */
+
+static int func(N_Vector cc, N_Vector fval, void *user_data);
+
+static int PrecSetupBD(N_Vector cc, N_Vector cscale,
+                       N_Vector fval, N_Vector fscale,
+                       void *user_data,
+                       N_Vector vtemp1, N_Vector vtemp2);
+
+static int PrecSolveBD(N_Vector cc, N_Vector cscale, 
+                       N_Vector fval, N_Vector fscale, 
+                       N_Vector vv, void *user_data,
+                       N_Vector ftem);
+
+/* Private Helper Functions */
+
+static UserData AllocUserData(void);
+static void InitUserData(UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector cc, N_Vector sc);
+static void PrintHeader(int globalstrategy, int maxl, int maxlrst, 
+                        realtype fnormtol, realtype scsteptol);
+static void PrintOutput(N_Vector cc);
+static void PrintFinalStats(void *kmem);
+static void WebRate(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                    void *user_data);
+static realtype DotProd(long int size, realtype *x1, realtype *x2);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  int globalstrategy;
+  realtype fnormtol, scsteptol;
+  N_Vector cc, sc, constraints;
+  UserData data;
+  int flag, maxl, maxlrst;
+  void *kmem;
+
+  cc = sc = constraints = NULL;
+  kmem = NULL;
+  data = NULL;
+
+  /* Allocate memory, and set problem data, initial values, tolerances */ 
+  globalstrategy = KIN_NONE;
+
+  data = AllocUserData();
+  if (check_flag((void *)data, "AllocUserData", 2)) return(1);
+  InitUserData(data);
+
+  /* Create serial vectors of length NEQ */
+  cc = N_VNew_Serial(NEQ);
+  if (check_flag((void *)cc, "N_VNew_Serial", 0)) return(1);
+  sc = N_VNew_Serial(NEQ);
+  if (check_flag((void *)sc, "N_VNew_Serial", 0)) return(1);
+  data->rates = N_VNew_Serial(NEQ);
+  if (check_flag((void *)data->rates, "N_VNew_Serial", 0)) return(1);
+
+  constraints = N_VNew_Serial(NEQ);
+  if (check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+  N_VConst(TWO, constraints);
+
+  SetInitialProfiles(cc, sc);
+
+  fnormtol=FTOL; scsteptol=STOL;
+
+  /* Call KINCreate/KINInit to initialize KINSOL.
+     A pointer to KINSOL problem memory is returned and stored in kmem. */
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0)) return(1);
+
+  /* Vector cc passed as template vector. */
+  flag = KINInit(kmem, func, cc);
+  if (check_flag(&flag, "KINInit", 1)) return(1);
+
+  flag = KINSetUserData(kmem, data);
+  if (check_flag(&flag, "KINSetUserData", 1)) return(1);
+  flag = KINSetConstraints(kmem, constraints);
+  if (check_flag(&flag, "KINSetConstraints", 1)) return(1);
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1)) return(1);
+  flag = KINSetScaledStepTol(kmem, scsteptol);
+  if (check_flag(&flag, "KINSetScaledStepTol", 1)) return(1);
+
+  /* We no longer need the constraints vector since KINSetConstraints
+     creates a private copy for KINSOL to use. */
+  N_VDestroy_Serial(constraints);
+
+  /* Call KINSpgmr to specify the linear solver KINSPGMR with preconditioner
+     routines PrecSetupBD and PrecSolveBD. */
+  maxl = 15; 
+  maxlrst = 2;
+  flag = KINSpgmr(kmem, maxl);
+  if (check_flag(&flag, "KINSpgmr", 1)) return(1);
+
+  flag = KINSpilsSetMaxRestarts(kmem, maxlrst);
+  if (check_flag(&flag, "KINSpilsSetMaxRestarts", 1)) return(1);
+  flag = KINSpilsSetPreconditioner(kmem,
+				   PrecSetupBD,
+				   PrecSolveBD);
+  if (check_flag(&flag, "KINSpilsSetPreconditioner", 1)) return(1);
+
+  /* Print out the problem size, solution parameters, initial guess. */
+  PrintHeader(globalstrategy, maxl, maxlrst, fnormtol, scsteptol);
+
+  /* Call KINSol and print output concentration profile */
+  flag = KINSol(kmem,           /* KINSol memory block */
+                cc,             /* initial guess on input; solution vector */
+                globalstrategy, /* global strategy choice */
+                sc,             /* scaling vector, for the variable cc */
+                sc);            /* scaling vector for function values fval */
+  if (check_flag(&flag, "KINSol", 1)) return(1);
+
+  printf("\n\nComputed equilibrium species concentrations:\n");
+  PrintOutput(cc);
+
+  /* Print final statistics and free memory */  
+  PrintFinalStats(kmem);
+
+  N_VDestroy_Serial(cc);
+  N_VDestroy_Serial(sc);
+  KINFree(&kmem);
+  FreeUserData(data);
+
+  return(0);
+}
+
+/* Readability definitions used in other routines below */
+
+#define acoef  (data->acoef)
+#define bcoef  (data->bcoef)
+#define cox    (data->cox)
+#define coy    (data->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY KINSOL
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * System function for predator-prey system 
+ */
+
+static int func(N_Vector cc, N_Vector fval, void *user_data)
+{
+  realtype xx, yy, delx, dely, *cxy, *rxy, *fxy, dcyli, dcyui, dcxli, dcxri;
+  long int jx, jy, is, idyu, idyl, idxr, idxl;
+  UserData data;
+  
+  data = (UserData)user_data;
+  delx = data->dx;
+  dely = data->dy;
+  
+  /* Loop over all mesh points, evaluating rate array at each point*/
+  for (jy = 0; jy < MY; jy++) {
+    
+    yy = dely*jy;
+
+    /* Set lower/upper index shifts, special at boundaries. */
+    idyl = (jy != 0   ) ? NSMX : -NSMX;
+    idyu = (jy != MY-1) ? NSMX : -NSMX;
+    
+    for (jx = 0; jx < MX; jx++) {
+
+      xx = delx*jx;
+
+      /* Set left/right index shifts, special at boundaries. */
+      idxl = (jx !=  0  ) ?  NUM_SPECIES : -NUM_SPECIES;
+      idxr = (jx != MX-1) ?  NUM_SPECIES : -NUM_SPECIES;
+
+      cxy = IJ_Vptr(cc,jx,jy);
+      rxy = IJ_Vptr(data->rates,jx,jy);
+      fxy = IJ_Vptr(fval,jx,jy);
+
+      /* Get species interaction rate array at (xx,yy) */
+      WebRate(xx, yy, cxy, rxy, user_data);
+      
+      for(is = 0; is < NUM_SPECIES; is++) {
+        
+        /* Differencing in x direction */
+        dcyli = *(cxy+is) - *(cxy - idyl + is) ;
+        dcyui = *(cxy + idyu + is) - *(cxy+is);
+        
+        /* Differencing in y direction */
+        dcxli = *(cxy+is) - *(cxy - idxl + is);
+        dcxri = *(cxy + idxr +is) - *(cxy+is);
+        
+        /* Compute the total rate value at (xx,yy) */
+        fxy[is] = (coy)[is] * (dcyui - dcyli) +
+          (cox)[is] * (dcxri - dcxli) + rxy[is];
+        
+      } /* end of is loop */
+      
+    } /* end of jx loop */
+    
+  } /* end of jy loop */
+
+  return(0);
+}
+
+/*
+ * Preconditioner setup routine. Generate and preprocess P. 
+ */
+
+static int PrecSetupBD(N_Vector cc, N_Vector cscale,
+                       N_Vector fval, N_Vector fscale,
+                       void *user_data,
+                       N_Vector vtemp1, N_Vector vtemp2)
+{
+  realtype r, r0, uround, sqruround, xx, yy, delx, dely, csave, fac;
+  realtype *cxy, *scxy, **Pxy, *ratesxy, *Pxycol, perturb_rates[NUM_SPECIES];
+  long int i, j, jx, jy, ret;
+  UserData data;
+  
+  data = (UserData) user_data;
+  delx = data->dx;
+  dely = data->dy;
+  
+  uround = data->uround;
+  sqruround = data->sqruround;
+  fac = N_VWL2Norm(fval, fscale);
+  r0 = THOUSAND * uround * fac * NEQ;
+  if(r0 == ZERO) r0 = ONE;
+  
+  /* Loop over spatial points; get size NUM_SPECIES Jacobian block at each */
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy*dely;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx*delx;
+      Pxy = (data->P)[jx][jy];
+      cxy = IJ_Vptr(cc,jx,jy);
+      scxy= IJ_Vptr(cscale,jx,jy);
+      ratesxy = IJ_Vptr((data->rates),jx,jy);
+      
+      /* Compute difference quotients of interaction rate fn. */
+      for (j = 0; j < NUM_SPECIES; j++) {
+        
+        csave = cxy[j];  /* Save the j,jx,jy element of cc */
+        r = SUNMAX(sqruround*SUNRabs(csave), r0/scxy[j]);
+        cxy[j] += r; /* Perturb the j,jx,jy element of cc */
+        fac = ONE/r;
+        
+        WebRate(xx, yy, cxy, perturb_rates, data);
+        
+        /* Restore j,jx,jy element of cc */
+        cxy[j] = csave;
+        
+        /* Load the j-th column of difference quotients */
+        Pxycol = Pxy[j];
+        for (i = 0; i < NUM_SPECIES; i++)
+          Pxycol[i] = (perturb_rates[i] - ratesxy[i]) * fac;
+        
+        
+      } /* end of j loop */
+      
+      /* Do LU decomposition of size NUM_SPECIES preconditioner block */
+      ret = denseGETRF(Pxy, NUM_SPECIES, NUM_SPECIES, (data->pivot)[jx][jy]);
+      if (ret != 0) return(1);
+      
+    } /* end of jx loop */
+    
+  } /* end of jy loop */
+  
+  return(0);  
+}
+
+/*
+ * Preconditioner solve routine 
+ */
+
+static int PrecSolveBD(N_Vector cc, N_Vector cscale, 
+                       N_Vector fval, N_Vector fscale, 
+                       N_Vector vv, void *user_data,
+                       N_Vector ftem)
+{
+  realtype **Pxy, *vxy;
+  long int *piv, jx, jy;
+  UserData data;
+  
+  data = (UserData)user_data;
+  
+  for (jx=0; jx<MX; jx++) {
+    
+    for (jy=0; jy<MY; jy++) {
+      
+      /* For each (jx,jy), solve a linear system of size NUM_SPECIES.
+         vxy is the address of the corresponding portion of the vector vv;
+         Pxy is the address of the corresponding block of the matrix P;
+         piv is the address of the corresponding block of the array pivot. */
+      vxy = IJ_Vptr(vv,jx,jy);
+      Pxy = (data->P)[jx][jy];
+      piv = (data->pivot)[jx][jy];
+      denseGETRS(Pxy, NUM_SPECIES, piv, vxy);
+      
+    } /* end of jy loop */
+    
+  } /* end of jx loop */
+  
+  return(0);
+}
+
+/*
+ * Interaction rate function routine 
+ */
+
+static void WebRate(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                    void *user_data)
+{
+  long int i;
+  realtype fac;
+  UserData data;
+  
+  data = (UserData)user_data;
+  
+  for (i = 0; i<NUM_SPECIES; i++)
+    ratesxy[i] = DotProd(NUM_SPECIES, cxy, acoef[i]);
+  
+  fac = ONE + ALPHA * xx * yy;
+  
+  for (i = 0; i < NUM_SPECIES; i++)
+    ratesxy[i] = cxy[i] * ( bcoef[i] * fac + ratesxy[i] );  
+}
+
+/*
+ * Dot product routine for realtype arrays 
+ */
+
+static realtype DotProd(long int size, realtype *x1, realtype *x2)
+{
+  long int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+
+  return(temp);  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Allocate memory for data structure of type UserData 
+ */
+
+static UserData AllocUserData(void)
+{
+  int jx, jy;
+  UserData data;
+
+  data = (UserData) malloc(sizeof *data);
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      (data->P)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+    }
+  }
+  acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  bcoef = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  cox   = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  coy   = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  
+  return(data);
+}
+
+/* 
+ * Load problem constants in data 
+ */
+
+static void InitUserData(UserData data)
+{
+  long int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  data->mx = MX;
+  data->my = MY;
+  data->ns = NUM_SPECIES;
+  data->np = NUM_SPECIES/2;
+  data->ax = AX;
+  data->ay = AY;
+  data->dx = (data->ax)/(MX-1);
+  data->dy = (data->ay)/(MY-1);
+  data->uround = UNIT_ROUNDOFF;
+  data->sqruround = SUNRsqrt(data->uround);
+
+  /* Set up the coefficients a and b plus others found in the equations */
+  np = data->np;
+
+  dx2=(data->dx)*(data->dx); dy2=(data->dy)*(data->dy);
+
+  for (i = 0; i < np; i++) {
+    a1= &(acoef[i][np]);
+    a2= &(acoef[i+np][0]);
+    a3= &(acoef[i][0]);
+    a4= &(acoef[i+np][np]);
+
+    /*  Fill in the portion of acoef in the four quadrants, row by row */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+
+    /* and then change the diagonal elements of acoef to -AA */
+    acoef[i][i]=-AA;
+    acoef[i+np][i+np] = -AA;
+
+    bcoef[i] = BB;
+    bcoef[i+np] = -BB;
+
+    cox[i]=DPREY/dx2;
+    cox[i+np]=DPRED/dx2;
+
+    coy[i]=DPREY/dy2;
+    coy[i+np]=DPRED/dy2;
+  }  
+}
+
+/* 
+ * Free data memory 
+ */
+
+static void FreeUserData(UserData data)
+{
+  int jx, jy;
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      destroyMat((data->P)[jx][jy]);
+      destroyArray((data->pivot)[jx][jy]);
+    }
+  }
+  
+  destroyMat(acoef);
+  free(bcoef);
+  free(cox);
+  free(coy);
+  N_VDestroy_Serial(data->rates);
+  free(data);
+}
+
+/* 
+ * Set initial conditions in cc 
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector sc)
+{
+  int i, jx, jy;
+  realtype *cloc, *sloc;
+  realtype  ctemp[NUM_SPECIES], stemp[NUM_SPECIES];
+  
+  /* Initialize arrays ctemp and stemp used in the loading process */
+  for (i = 0; i < NUM_SPECIES/2; i++) {
+    ctemp[i] = PREYIN;
+    stemp[i] = ONE;
+  }
+  for (i = NUM_SPECIES/2; i < NUM_SPECIES; i++) {
+    ctemp[i] = PREDIN;
+    stemp[i] = RCONST(0.00001);
+  }
+
+  /* Load initial profiles into cc and sc vector from ctemp and stemp. */
+  for (jy = 0; jy < MY; jy++) {
+    for (jx = 0; jx < MX; jx++) {
+      cloc = IJ_Vptr(cc,jx,jy);
+      sloc = IJ_Vptr(sc,jx,jy);
+      for (i = 0; i < NUM_SPECIES; i++) {
+        cloc[i] = ctemp[i];
+        sloc[i] = stemp[i];
+      }
+    }
+  }
+}
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(int globalstrategy, int maxl, int maxlrst, 
+                        realtype fnormtol, realtype scsteptol)
+{
+  printf("\nPredator-prey test problem --  KINSol (serial version)\n\n");
+  printf("Mesh dimensions = %d X %d\n", MX, MY);
+  printf("Number of species = %d\n", NUM_SPECIES);
+  printf("Total system size = %d\n\n", NEQ);
+  printf("Flag globalstrategy = %d (0 = None, 1 = Linesearch)\n",
+         globalstrategy);
+  printf("Linear solver is SPGMR with maxl = %d, maxlrst = %d\n",
+         maxl, maxlrst);
+  printf("Preconditioning uses interaction-only block-diagonal matrix\n");
+  printf("Positivity constraints imposed on all components \n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  fnormtol = %Lg   scsteptol = %Lg\n",
+         fnormtol, scsteptol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  fnormtol = %g   scsteptol = %g\n",
+         fnormtol, scsteptol);
+#else
+  printf("Tolerance parameters:  fnormtol = %g   scsteptol = %g\n",
+         fnormtol, scsteptol);
+#endif
+
+  printf("\nInitial profile of concentration\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("At all mesh points:  %Lg %Lg %Lg   %Lg %Lg %Lg\n", 
+         PREYIN, PREYIN, PREYIN,
+         PREDIN, PREDIN, PREDIN);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At all mesh points:  %g %g %g   %g %g %g\n", 
+         PREYIN, PREYIN, PREYIN,
+         PREDIN, PREDIN, PREDIN);
+#else
+  printf("At all mesh points:  %g %g %g   %g %g %g\n", 
+         PREYIN, PREYIN, PREYIN,
+         PREDIN, PREDIN, PREDIN);
+#endif
+}
+
+/* 
+ * Print sampled values of current cc 
+ */
+
+static void PrintOutput(N_Vector cc)
+{
+  int is, jx, jy;
+  realtype *ct;
+  
+  jy = 0; jx = 0;
+  ct = IJ_Vptr(cc,jx,jy);
+  printf("\nAt bottom left:");
+
+  /* Print out lines with up to 6 values per line */
+  for (is = 0; is < NUM_SPECIES; is++){
+    if ((is%6)*6 == is) printf("\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %Lg",ct[is]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %g",ct[is]);
+#else
+    printf(" %g",ct[is]);
+#endif
+  }
+  
+  jy = MY-1; jx = MX-1;
+  ct = IJ_Vptr(cc,jx,jy);
+  printf("\n\nAt top right:");
+
+  /* Print out lines with up to 6 values per line */
+  for (is = 0; is < NUM_SPECIES; is++) {
+    if ((is%6)*6 == is) printf("\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %Lg",ct[is]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %g",ct[is]);
+#else
+    printf(" %g",ct[is]);
+#endif
+  }
+  printf("\n\n");
+}
+
+/* 
+ * Print final statistics contained in iopt 
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe, nli, npe, nps, ncfl, nfeSG;
+  int flag;
+  
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1);
+  flag = KINSpilsGetNumLinIters(kmem, &nli);
+  check_flag(&flag, "KINSpilsGetNumLinIters", 1);
+  flag = KINSpilsGetNumPrecEvals(kmem, &npe);
+  check_flag(&flag, "KINSpilsGetNumPrecEvals", 1);
+  flag = KINSpilsGetNumPrecSolves(kmem, &nps);
+  check_flag(&flag, "KINSpilsGetNumPrecSolves", 1);
+  flag = KINSpilsGetNumConvFails(kmem, &ncfl);
+  check_flag(&flag, "KINSpilsGetNumConvFails", 1);
+  flag = KINSpilsGetNumFuncEvals(kmem, &nfeSG);
+  check_flag(&flag, "KINSpilsGetNumFuncEvals", 1);
+
+  printf("Final Statistics.. \n");
+  printf("nni    = %5ld    nli   = %5ld\n", nni, nli);
+  printf("nfe    = %5ld    nfeSG = %5ld\n", nfe, nfeSG);
+  printf("nps    = %5ld    npe   = %5ld     ncfl  = %5ld\n", nps, npe, ncfl);
+  
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr,
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/serial/kinFoodWeb_kry.out b/examples/kinsol/serial/kinFoodWeb_kry.out
new file mode 100644
index 0000000..61a7dc0
--- /dev/null
+++ b/examples/kinsol/serial/kinFoodWeb_kry.out
@@ -0,0 +1,29 @@
+
+Predator-prey test problem --  KINSol (serial version)
+
+Mesh dimensions = 8 X 8
+Number of species = 6
+Total system size = 384
+
+Flag globalstrategy = 0 (0 = None, 1 = Linesearch)
+Linear solver is SPGMR with maxl = 15, maxlrst = 2
+Preconditioning uses interaction-only block-diagonal matrix
+Positivity constraints imposed on all components 
+Tolerance parameters:  fnormtol = 1e-07   scsteptol = 1e-13
+
+Initial profile of concentration
+At all mesh points:  1 1 1   30000 30000 30000
+
+
+Computed equilibrium species concentrations:
+
+At bottom left:
+ 1.16428 1.16428 1.16428 34927.5 34927.5 34927.5
+
+At top right:
+ 1.25797 1.25797 1.25797 37736.7 37736.7 37736.7
+
+Final Statistics.. 
+nni    =    10    nli   =   378
+nfe    =    11    nfeSG =   388
+nps    =   388    npe   =     1     ncfl  =     7
diff --git a/examples/kinsol/serial/kinKrylovDemo_ls.c b/examples/kinsol/serial/kinKrylovDemo_ls.c
new file mode 100644
index 0000000..d446e05
--- /dev/null
+++ b/examples/kinsol/serial/kinKrylovDemo_ls.c
@@ -0,0 +1,900 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4840 $
+ * $Date: 2016-08-03 13:07:16 -0700 (Wed, 03 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ *
+ * This example loops through the available iterative linear solvers:
+ * SPGMR, SPBCG, SPTFQMR, and SPFGMR.
+ *
+ * Example (serial):
+ *
+ * This example solves a nonlinear system that arises from a system
+ * of partial differential equations. The PDE system is a food web
+ * population model, with predator-prey interaction and diffusion
+ * on the unit square in two dimensions. The dependent variable
+ * vector is the following:
+ * 
+ *       1   2         ns
+ * c = (c , c ,  ..., c  )     (denoted by the variable cc)
+ * 
+ * and the PDE's are as follows:
+ *
+ *                    i       i
+ *         0 = d(i)*(c     + c    )  +  f  (x,y,c)   (i=1,...,ns)
+ *                    xx      yy         i
+ *
+ *   where
+ *
+ *                   i             ns         j
+ *   f  (x,y,c)  =  c  * (b(i)  + sum a(i,j)*c )
+ *    i                           j=1
+ *
+ * The number of species is ns = 2 * np, with the first np being
+ * prey and the last np being predators. The number np is both the
+ * number of prey and predator species. The coefficients a(i,j),
+ * b(i), d(i) are:
+ *
+ *   a(i,i) = -AA   (all i)
+ *   a(i,j) = -GG   (i <= np , j >  np)
+ *   a(i,j) =  EE   (i >  np,  j <= np)
+ *   b(i) = BB * (1 + alpha * x * y)   (i <= np)
+ *   b(i) =-BB * (1 + alpha * x * y)   (i >  np)
+ *   d(i) = DPREY   (i <= np)
+ *   d(i) = DPRED   ( i > np)
+ *
+ * The various scalar parameters are set using define's or in
+ * routine InitUserData.
+ *
+ * The boundary conditions are: normal derivative = 0, and the
+ * initial guess is constant in x and y, but the final solution
+ * is not.
+ *
+ * The PDEs are discretized by central differencing on an MX by
+ * MY mesh.
+ * 
+ * The nonlinear system is solved by KINSOL using the method
+ * specified in local variable globalstrat.
+ *
+ * The preconditioner matrix is a block-diagonal matrix based on
+ * the partial derivatives of the interaction terms f only.
+ *
+ * Constraints are imposed to make all components of the solution
+ * positive.
+ * -----------------------------------------------------------------
+ * References:
+ *
+ * 1. Peter N. Brown and Youcef Saad,
+ *    Hybrid Krylov Methods for Nonlinear Systems of Equations
+ *    LLNL report UCRL-97645, November 1987.
+ *
+ * 2. Peter N. Brown and Alan C. Hindmarsh,
+ *    Reduced Storage Matrix Methods in Stiff ODE systems,
+ *    Lawrence Livermore National Laboratory Report  UCRL-95088,
+ *    Rev. 1, June 1987, and  Journal of Applied Mathematics and
+ *    Computation, Vol. 31 (May 1989), pp. 40-91. (Presents a
+ *    description of the time-dependent version of this test
+ *    problem.)
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_spgmr.h>
+#include <kinsol/kinsol_spbcgs.h>
+#include <kinsol/kinsol_sptfqmr.h>
+#include <kinsol/kinsol_spfgmr.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NUM_SPECIES     6  /* must equal 2*(number of prey or predators)
+                              number of prey = number of predators       */ 
+
+#define PI       RCONST(3.1415926535898)   /* pi */ 
+
+#define MX          5              /* MX = number of x mesh points */
+#define MY          5              /* MY = number of y mesh points */
+#define NSMX        (NUM_SPECIES * MX)
+#define NEQ         (NSMX * MY)    /* number of equations in the system */
+#define AA          RCONST(1.0)    /* value of coefficient AA in above eqns */
+#define EE          RCONST(10000.) /* value of coefficient EE in above eqns */
+#define GG          RCONST(0.5e-6) /* value of coefficient GG in above eqns */
+#define BB          RCONST(1.0)    /* value of coefficient BB in above eqns */
+#define DPREY       RCONST(1.0)    /* value of coefficient dprey above */
+#define DPRED       RCONST(0.5)    /* value of coefficient dpred above */
+#define ALPHA       RCONST(1.0)    /* value of coefficient alpha above */
+#define AX          RCONST(1.0)    /* total range of x variable */
+#define AY          RCONST(1.0)    /* total range of y variable */
+#define FTOL        RCONST(1.e-7)  /* ftol tolerance */
+#define STOL        RCONST(1.e-13) /* stol tolerance */
+#define THOUSAND    RCONST(1000.0) /* one thousand */
+#define ZERO        RCONST(0.)     /* 0. */
+#define ONE         RCONST(1.0)    /* 1. */
+#define TWO         RCONST(2.0)    /* 2. */
+#define PREYIN      RCONST(1.0)    /* initial guess for prey concentrations. */
+#define PREDIN      RCONST(30000.0)/* initial guess for predator concs.      */
+
+/* Linear Solver Loop Constants */
+
+#define USE_SPGMR   0
+#define USE_SPBCG   1
+#define USE_SPTFQMR 2
+#define USE_SPFGMR  3
+
+/* User-defined vector access macro: IJ_Vptr */
+
+/* IJ_Vptr is defined in order to translate from the underlying 3D structure
+   of the dependent variable vector to the 1D storage scheme for an N-vector.
+   IJ_Vptr(vv,i,j) returns a pointer to the location in vv corresponding to 
+   indices is = 0, jx = i, jy = j.    */
+
+#define IJ_Vptr(vv,i,j)   (&NV_Ith_S(vv, i*NUM_SPECIES + j*NSMX))
+
+/* Type : UserData 
+   contains preconditioner blocks, pivot arrays, and problem constants */
+
+typedef struct {
+  realtype **P[MX][MY];
+  long int *pivot[MX][MY];
+  realtype **acoef, *bcoef;
+  N_Vector rates;
+  realtype *cox, *coy;
+  realtype ax, ay, dx, dy;
+  realtype uround, sqruround;
+  int mx, my, ns, np;
+} *UserData;
+
+/* Functions Called by the KINSOL Solver */
+
+static int func(N_Vector cc, N_Vector fval, void *user_data);
+
+static int PrecSetupBD(N_Vector cc, N_Vector cscale,
+                       N_Vector fval, N_Vector fscale,
+                       void *user_data,
+                       N_Vector vtemp1, N_Vector vtemp2);
+
+static int PrecSolveBD(N_Vector cc, N_Vector cscale, 
+                       N_Vector fval, N_Vector fscale, 
+                       N_Vector vv, void *user_data,
+                       N_Vector ftem);
+
+/* Private Helper Functions */
+
+static UserData AllocUserData(void);
+static void InitUserData(UserData data);
+static void FreeUserData(UserData data);
+static void SetInitialProfiles(N_Vector cc, N_Vector sc);
+static void PrintHeader(int globalstrategy, int maxl, int maxlrst, 
+                        realtype fnormtol, realtype scsteptol,
+			int linsolver);
+static void PrintOutput(N_Vector cc);
+static void PrintFinalStats(void *kmem, int linsolver);
+static void WebRate(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                    void *user_data);
+static realtype DotProd(int size, realtype *x1, realtype *x2);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main(void)
+{
+  int globalstrategy, linsolver;
+  realtype fnormtol, scsteptol;
+  N_Vector cc, sc, constraints;
+  UserData data;
+  int flag, maxl, maxlrst;
+  void *kmem;
+
+  cc = sc = constraints = NULL;
+  kmem = NULL;
+  data = NULL;
+
+  /* Allocate memory, and set problem data, initial values, tolerances */ 
+  globalstrategy = KIN_NONE;
+
+  data = AllocUserData();
+  if (check_flag((void *)data, "AllocUserData", 2)) return(1);
+  InitUserData(data);
+
+  /* Create serial vectors of length NEQ */
+  cc = N_VNew_Serial(NEQ);
+  if (check_flag((void *)cc, "N_VNew_Serial", 0)) return(1);
+  sc = N_VNew_Serial(NEQ);
+  if (check_flag((void *)sc, "N_VNew_Serial", 0)) return(1);
+  data->rates = N_VNew_Serial(NEQ);
+  if (check_flag((void *)data->rates, "N_VNew_Serial", 0)) return(1);
+
+  constraints = N_VNew_Serial(NEQ);
+  if (check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+  N_VConst(TWO, constraints);
+
+  fnormtol=FTOL; scsteptol=STOL;
+
+  /* START: Loop through SPGMR, SPBCG, SPTFQMR and SPFGMR linear solver modules */
+  for (linsolver = 0; linsolver < 4; ++linsolver) {
+
+    /* (Re-)Initialize user data */
+    SetInitialProfiles(cc, sc);
+
+    /* Call KINCreate/KINInit to initialize KINSOL:
+       A pointer to KINSOL problem memory is returned and stored in kmem. */
+    kmem = KINCreate();
+    if (check_flag((void *)kmem, "KINCreate", 0)) return(1);
+
+    /* Vector cc passed as template vector. */
+    flag = KINInit(kmem, func, cc);
+    if (check_flag(&flag, "KINInit", 1)) return(1);
+
+    flag = KINSetUserData(kmem, data);
+    if (check_flag(&flag, "KINSetUserData", 1)) return(1);
+    flag = KINSetConstraints(kmem, constraints);
+    if (check_flag(&flag, "KINSetConstraints", 1)) return(1);
+    flag = KINSetFuncNormTol(kmem, fnormtol);
+    if (check_flag(&flag, "KINSetFuncNormTol", 1)) return(1);
+    flag = KINSetScaledStepTol(kmem, scsteptol);
+    if (check_flag(&flag, "KINSetScaledStepTol", 1)) return(1);
+
+    /* Attach a linear solver module */
+    switch(linsolver) {
+
+    /* (a) SPGMR */
+    case(USE_SPGMR):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPGMR |\n");
+      printf(" -------\n");
+
+      /* Call KINSpgmr to specify the linear solver KINSPGMR with preconditioner
+	 routines PrecSetupBD and PrecSolveBD, and the pointer to the user block data. */
+      maxl = 15; 
+      maxlrst = 2;
+      flag = KINSpgmr(kmem, maxl);
+      if (check_flag(&flag, "KINSpgmr", 1)) return(1);
+
+      flag = KINSpilsSetMaxRestarts(kmem, maxlrst);
+      if (check_flag(&flag, "KINSpilsSetMaxRestarts", 1)) return(1);
+
+      break;
+
+    /* (b) SPBCG */
+    case(USE_SPBCG):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPBCG |\n");
+      printf(" -------\n");
+
+      /* Call KINSpbcg to specify the linear solver KINSPBCG with preconditioner
+	 routines PrecSetupBD and PrecSolveBD, and the pointer to the user block data. */
+      maxl = 15; 
+      flag = KINSpbcg(kmem, maxl);
+      if (check_flag(&flag, "KINSpbcg", 1)) return(1);
+
+      break;
+
+    /* (c) SPTFQMR */
+    case(USE_SPTFQMR):
+
+      /* Print header */
+      printf(" ---------");
+      printf(" \n| SPTFQMR |\n");
+      printf(" ---------\n");
+
+      /* Call KINSptfqmr to specify the linear solver KINSPTFQMR with preconditioner
+	 routines PrecSetupBD and PrecSolveBD, and the pointer to the user block data. */
+      maxl = 25; 
+      flag = KINSptfqmr(kmem, maxl);
+      if (check_flag(&flag, "KINSptfqmr", 1)) return(1);
+
+      break;
+
+    /* (d) SPFGMR */
+    case(USE_SPFGMR):
+
+      /* Print header */
+      printf(" -------");
+      printf(" \n| SPFGMR |\n");
+      printf(" -------\n");
+
+      /* Call KINSpfgmr to specify the linear solver KINSPFGMR with preconditioner
+	 routines PrecSetupBD and PrecSolveBD, and the pointer to the user block data. */
+      maxl = 15; 
+      maxlrst = 2;
+      flag = KINSpfgmr(kmem, maxl);
+      if (check_flag(&flag, "KINSpfgmr", 1)) return(1);
+
+      flag = KINSpilsSetMaxRestarts(kmem, maxlrst);
+      if (check_flag(&flag, "KINSpilsSetMaxRestarts", 1)) return(1);
+
+      break;
+
+    }
+
+    /* Set preconditioner functions */
+    flag = KINSpilsSetPreconditioner(kmem, PrecSetupBD, PrecSolveBD);
+    if (check_flag(&flag, "KINSpilsSetPreconditioner", 1)) return(1);
+    
+    /* Print out the problem size, solution parameters, initial guess. */
+    PrintHeader(globalstrategy, maxl, maxlrst, fnormtol, scsteptol, linsolver);
+
+    /* Call KINSol and print output concentration profile */
+    flag = KINSol(kmem,           /* KINSol memory block */
+		  cc,             /* initial guess on input; solution vector */
+		  globalstrategy, /* global strategy choice */
+		  sc,             /* scaling vector, for the variable cc */
+		  sc);            /* scaling vector for function values fval */
+    if (check_flag(&flag, "KINSol", 1)) return(1);
+
+    printf("\n\nComputed equilibrium species concentrations:\n");
+    PrintOutput(cc);
+
+    /* Print final statistics and free memory */  
+    PrintFinalStats(kmem, linsolver);
+
+    KINFree(&kmem);
+
+  }  /* END: Loop through SPGMR, SPBCG, SPTFQMR, and SPFGMR linear solver modules */
+
+  N_VDestroy_Serial(constraints);
+  N_VDestroy_Serial(cc);
+  N_VDestroy_Serial(sc);
+  FreeUserData(data);
+
+  return(0);
+}
+
+/* Readability definitions used in other routines below */
+
+#define acoef  (data->acoef)
+#define bcoef  (data->bcoef)
+#define cox    (data->cox)
+#define coy    (data->coy)
+
+/*
+ *--------------------------------------------------------------------
+ * FUNCTIONS CALLED BY KINSOL
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * System function for predator-prey system 
+ */
+
+static int func(N_Vector cc, N_Vector fval, void *user_data)
+{
+  realtype xx, yy, delx, dely, *cxy, *rxy, *fxy, dcyli, dcyui, dcxli, dcxri;
+  int jx, jy, is, idyu, idyl, idxr, idxl;
+  UserData data;
+  
+  data = (UserData)user_data;
+  delx = data->dx;
+  dely = data->dy;
+  
+  /* Loop over all mesh points, evaluating rate array at each point*/
+  for (jy = 0; jy < MY; jy++) {
+    
+    yy = dely*jy;
+
+    /* Set lower/upper index shifts, special at boundaries. */
+    idyl = (jy != 0   ) ? NSMX : -NSMX;
+    idyu = (jy != MY-1) ? NSMX : -NSMX;
+    
+    for (jx = 0; jx < MX; jx++) {
+
+      xx = delx*jx;
+
+      /* Set left/right index shifts, special at boundaries. */
+      idxl = (jx !=  0  ) ?  NUM_SPECIES : -NUM_SPECIES;
+      idxr = (jx != MX-1) ?  NUM_SPECIES : -NUM_SPECIES;
+
+      cxy = IJ_Vptr(cc,jx,jy);
+      rxy = IJ_Vptr(data->rates,jx,jy);
+      fxy = IJ_Vptr(fval,jx,jy);
+
+      /* Get species interaction rate array at (xx,yy) */
+      WebRate(xx, yy, cxy, rxy, user_data);
+      
+      for(is = 0; is < NUM_SPECIES; is++) {
+        
+        /* Differencing in x direction */
+        dcyli = *(cxy+is) - *(cxy - idyl + is) ;
+        dcyui = *(cxy + idyu + is) - *(cxy+is);
+        
+        /* Differencing in y direction */
+        dcxli = *(cxy+is) - *(cxy - idxl + is);
+        dcxri = *(cxy + idxr +is) - *(cxy+is);
+        
+        /* Compute the total rate value at (xx,yy) */
+        fxy[is] = (coy)[is] * (dcyui - dcyli) +
+          (cox)[is] * (dcxri - dcxli) + rxy[is];
+
+      } /* end of is loop */
+
+    } /* end of jx loop */
+
+  } /* end of jy loop */
+
+  return(0);
+}
+
+/*
+ * Preconditioner setup routine. Generate and preprocess P. 
+ */
+
+static int PrecSetupBD(N_Vector cc, N_Vector cscale,
+                       N_Vector fval, N_Vector fscale,
+                       void *user_data,
+                       N_Vector vtemp1, N_Vector vtemp2)
+{
+  realtype r, r0, uround, sqruround, xx, yy, delx, dely, csave, fac;
+  realtype *cxy, *scxy, **Pxy, *ratesxy, *Pxycol, perturb_rates[NUM_SPECIES];
+  int i, j, jx, jy, ret;
+  UserData data;
+  
+  data = (UserData) user_data;
+  delx = data->dx;
+  dely = data->dy;
+  
+  uround = data->uround;
+  sqruround = data->sqruround;
+  fac = N_VWL2Norm(fval, fscale);
+  r0 = THOUSAND * uround * fac * NEQ;
+  if(r0 == ZERO) r0 = ONE;
+  
+  /* Loop over spatial points; get size NUM_SPECIES Jacobian block at each */
+  for (jy = 0; jy < MY; jy++) {
+    yy = jy*dely;
+    
+    for (jx = 0; jx < MX; jx++) {
+      xx = jx*delx;
+      Pxy = (data->P)[jx][jy];
+      cxy = IJ_Vptr(cc,jx,jy);
+      scxy= IJ_Vptr(cscale,jx,jy);
+      ratesxy = IJ_Vptr((data->rates),jx,jy);
+      
+      /* Compute difference quotients of interaction rate fn. */
+      for (j = 0; j < NUM_SPECIES; j++) {
+        
+        csave = cxy[j];  /* Save the j,jx,jy element of cc */
+        r = SUNMAX(sqruround*SUNRabs(csave), r0/scxy[j]);
+        cxy[j] += r; /* Perturb the j,jx,jy element of cc */
+        fac = ONE/r;
+        
+        WebRate(xx, yy, cxy, perturb_rates, data);
+        
+        /* Restore j,jx,jy element of cc */
+        cxy[j] = csave;
+        
+        /* Load the j-th column of difference quotients */
+        Pxycol = Pxy[j];
+        for (i = 0; i < NUM_SPECIES; i++)
+          Pxycol[i] = (perturb_rates[i] - ratesxy[i]) * fac;
+        
+        
+      } /* end of j loop */
+      
+      /* Do LU decomposition of size NUM_SPECIES preconditioner block */
+      ret = denseGETRF(Pxy, NUM_SPECIES, NUM_SPECIES, (data->pivot)[jx][jy]);
+      if (ret != 0) return(1);
+      
+    } /* end of jx loop */
+    
+  } /* end of jy loop */
+  
+  return(0);  
+}
+
+/*
+ * Preconditioner solve routine 
+ */
+
+static int PrecSolveBD(N_Vector cc, N_Vector cscale, 
+                       N_Vector fval, N_Vector fscale, 
+                       N_Vector vv, void *user_data,
+                       N_Vector ftem)
+{
+  realtype **Pxy, *vxy;
+  long int *piv, jx, jy;
+  UserData data;
+  
+  data = (UserData)user_data;
+  
+  for (jx=0; jx<MX; jx++) {
+    
+    for (jy=0; jy<MY; jy++) {
+      
+      /* For each (jx,jy), solve a linear system of size NUM_SPECIES.
+         vxy is the address of the corresponding portion of the vector vv;
+         Pxy is the address of the corresponding block of the matrix P;
+         piv is the address of the corresponding block of the array pivot. */
+      vxy = IJ_Vptr(vv,jx,jy);
+      Pxy = (data->P)[jx][jy];
+      piv = (data->pivot)[jx][jy];
+      denseGETRS(Pxy, NUM_SPECIES, piv, vxy);
+      
+    } /* end of jy loop */
+    
+  } /* end of jx loop */
+  
+  return(0);
+}
+
+/*
+ * Interaction rate function routine 
+ */
+
+static void WebRate(realtype xx, realtype yy, realtype *cxy, realtype *ratesxy, 
+                    void *user_data)
+{
+  int i;
+  realtype fac;
+  UserData data;
+  
+  data = (UserData)user_data;
+  
+  for (i = 0; i<NUM_SPECIES; i++)
+    ratesxy[i] = DotProd(NUM_SPECIES, cxy, acoef[i]);
+  
+  fac = ONE + ALPHA * xx * yy;
+  
+  for (i = 0; i < NUM_SPECIES; i++)
+    ratesxy[i] = cxy[i] * ( bcoef[i] * fac + ratesxy[i] );  
+}
+
+/*
+ * Dot product routine for realtype arrays 
+ */
+
+static realtype DotProd(int size, realtype *x1, realtype *x2)
+{
+  int i;
+  realtype *xx1, *xx2, temp = ZERO;
+  
+  xx1 = x1; xx2 = x2;
+  for (i = 0; i < size; i++) temp += (*xx1++) * (*xx2++);
+
+  return(temp);  
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/*
+ * Allocate memory for data structure of type UserData 
+ */
+
+static UserData AllocUserData(void)
+{
+  int jx, jy;
+  UserData data;
+
+  data = (UserData) malloc(sizeof *data);
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      (data->P)[jx][jy] = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+      (data->pivot)[jx][jy] = newLintArray(NUM_SPECIES);
+    }
+  }
+  acoef = newDenseMat(NUM_SPECIES, NUM_SPECIES);
+  bcoef = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  cox   = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  coy   = (realtype *)malloc(NUM_SPECIES * sizeof(realtype));
+  
+  return(data);
+}
+
+/* 
+ * Load problem constants in data 
+ */
+
+static void InitUserData(UserData data)
+{
+  int i, j, np;
+  realtype *a1,*a2, *a3, *a4, dx2, dy2;
+
+  data->mx = MX;
+  data->my = MY;
+  data->ns = NUM_SPECIES;
+  data->np = NUM_SPECIES/2;
+  data->ax = AX;
+  data->ay = AY;
+  data->dx = (data->ax)/(MX-1);
+  data->dy = (data->ay)/(MY-1);
+  data->uround = UNIT_ROUNDOFF;
+  data->sqruround = SUNRsqrt(data->uround);
+
+  /* Set up the coefficients a and b plus others found in the equations */
+  np = data->np;
+
+  dx2=(data->dx)*(data->dx); dy2=(data->dy)*(data->dy);
+
+  for (i = 0; i < np; i++) {
+    a1= &(acoef[i][np]);
+    a2= &(acoef[i+np][0]);
+    a3= &(acoef[i][0]);
+    a4= &(acoef[i+np][np]);
+
+    /*  Fill in the portion of acoef in the four quadrants, row by row */
+    for (j = 0; j < np; j++) {
+      *a1++ =  -GG;
+      *a2++ =   EE;
+      *a3++ = ZERO;
+      *a4++ = ZERO;
+    }
+
+    /* and then change the diagonal elements of acoef to -AA */
+    acoef[i][i]=-AA;
+    acoef[i+np][i+np] = -AA;
+
+    bcoef[i] = BB;
+    bcoef[i+np] = -BB;
+
+    cox[i]=DPREY/dx2;
+    cox[i+np]=DPRED/dx2;
+
+    coy[i]=DPREY/dy2;
+    coy[i+np]=DPRED/dy2;
+  }  
+}
+
+/* 
+ * Free data memory 
+ */
+
+static void FreeUserData(UserData data)
+{
+  int jx, jy;
+  
+  for (jx=0; jx < MX; jx++) {
+    for (jy=0; jy < MY; jy++) {
+      destroyMat((data->P)[jx][jy]);
+      destroyArray((data->pivot)[jx][jy]);
+    }
+  }
+  
+  destroyMat(acoef);
+  free(bcoef);
+  free(cox);
+  free(coy);
+  N_VDestroy_Serial(data->rates);
+  free(data);
+}
+
+/* 
+ * Set initial conditions in cc 
+ */
+
+static void SetInitialProfiles(N_Vector cc, N_Vector sc)
+{
+  int i, jx, jy;
+  realtype *cloc, *sloc;
+  realtype  ctemp[NUM_SPECIES], stemp[NUM_SPECIES];
+  
+  /* Initialize arrays ctemp and stemp used in the loading process */
+  for (i = 0; i < NUM_SPECIES/2; i++) {
+    ctemp[i] = PREYIN;
+    stemp[i] = ONE;
+  }
+  for (i = NUM_SPECIES/2; i < NUM_SPECIES; i++) {
+    ctemp[i] = PREDIN;
+    stemp[i] = RCONST(0.00001);
+  }
+
+  /* Load initial profiles into cc and sc vector from ctemp and stemp. */
+  for (jy = 0; jy < MY; jy++) {
+    for (jx = 0; jx < MX; jx++) {
+      cloc = IJ_Vptr(cc,jx,jy);
+      sloc = IJ_Vptr(sc,jx,jy);
+      for (i = 0; i < NUM_SPECIES; i++) {
+        cloc[i] = ctemp[i];
+        sloc[i] = stemp[i];
+      }
+    }
+  }
+}
+
+/* 
+ * Print first lines of output (problem description)
+ */
+
+static void PrintHeader(int globalstrategy, int maxl, int maxlrst, 
+                        realtype fnormtol, realtype scsteptol,
+			int linsolver)
+{
+  printf("\nPredator-prey test problem --  KINSol (serial version)\n\n");
+  printf("Mesh dimensions = %d X %d\n", MX, MY);
+  printf("Number of species = %d\n", NUM_SPECIES);
+  printf("Total system size = %d\n\n", NEQ);
+  printf("Flag globalstrategy = %d (0 = None, 1 = Linesearch)\n",
+         globalstrategy);
+
+  switch(linsolver) {
+
+  case(USE_SPGMR):
+    printf("Linear solver is SPGMR with maxl = %d, maxlrst = %d\n",
+	   maxl, maxlrst);
+    break;
+
+  case(USE_SPBCG):
+    printf("Linear solver is SPBCG with maxl = %d\n", maxl);
+    break;
+
+  case(USE_SPTFQMR):
+    printf("Linear solver is SPTFQMR with maxl = %d\n", maxl);
+    break;
+
+  case(USE_SPFGMR):
+    printf("Linear solver is SPFGMR with maxl = %d, maxlrst = %d\n",
+	   maxl, maxlrst);
+    break;
+
+  }
+
+  printf("Preconditioning uses interaction-only block-diagonal matrix\n");
+  printf("Positivity constraints imposed on all components \n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("Tolerance parameters:  fnormtol = %Lg   scsteptol = %Lg\n",
+         fnormtol, scsteptol);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("Tolerance parameters:  fnormtol = %g   scsteptol = %g\n",
+         fnormtol, scsteptol);
+#else
+  printf("Tolerance parameters:  fnormtol = %g   scsteptol = %g\n",
+         fnormtol, scsteptol);
+#endif
+
+  printf("\nInitial profile of concentration\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION) 
+  printf("At all mesh points:  %Lg %Lg %Lg   %Lg %Lg %Lg\n", 
+         PREYIN, PREYIN, PREYIN,
+         PREDIN, PREDIN, PREDIN);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("At all mesh points:  %g %g %g   %g %g %g\n", 
+         PREYIN, PREYIN, PREYIN,
+         PREDIN, PREDIN, PREDIN);
+#else
+  printf("At all mesh points:  %g %g %g   %g %g %g\n", 
+         PREYIN, PREYIN, PREYIN,
+         PREDIN, PREDIN, PREDIN);
+#endif
+}
+
+/* 
+ * Print sampled values of current cc 
+ */
+
+static void PrintOutput(N_Vector cc)
+{
+  int is, jx, jy;
+  realtype *ct;
+  
+  jy = 0; jx = 0;
+  ct = IJ_Vptr(cc,jx,jy);
+  printf("\nAt bottom left:");
+
+  /* Print out lines with up to 6 values per line */
+  for (is = 0; is < NUM_SPECIES; is++){
+    if ((is%6)*6 == is) printf("\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %Lg",ct[is]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %g",ct[is]);
+#else
+    printf(" %g",ct[is]);
+#endif
+  }
+  
+  jy = MY-1; jx = MX-1;
+  ct = IJ_Vptr(cc,jx,jy);
+  printf("\n\nAt top right:");
+
+  /* Print out lines with up to 6 values per line */
+  for (is = 0; is < NUM_SPECIES; is++) {
+    if ((is%6)*6 == is) printf("\n");
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %Lg",ct[is]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %g",ct[is]);
+#else
+    printf(" %g",ct[is]);
+#endif
+  }
+  printf("\n\n");
+}
+
+/* 
+ * Print final statistics contained in iopt 
+ */
+
+static void PrintFinalStats(void *kmem, int linsolver)
+{
+  long int nni, nfe, nli, npe, nps, ncfl, nfeSG;
+  int flag;
+  
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1);
+
+  flag = KINSpilsGetNumLinIters(kmem, &nli);
+  check_flag(&flag, "KINSpilsGetNumLinIters", 1);
+  flag = KINSpilsGetNumPrecEvals(kmem, &npe);
+  check_flag(&flag, "KINSpilsGetNumPrecEvals", 1);
+  flag = KINSpilsGetNumPrecSolves(kmem, &nps);
+  check_flag(&flag, "KINSpilsGetNumPrecSolves", 1);
+  flag = KINSpilsGetNumConvFails(kmem, &ncfl);
+  check_flag(&flag, "KINSpilsGetNumConvFails", 1);
+  flag = KINSpilsGetNumFuncEvals(kmem, &nfeSG);
+  check_flag(&flag, "KINSpilsGetNumFuncEvals", 1);
+
+  printf("Final Statistics.. \n");
+  printf("nni    = %5ld    nli   = %5ld\n", nni, nli);
+  printf("nfe    = %5ld    nfeSG = %5ld\n", nfe, nfeSG);
+  printf("nps    = %5ld    npe   = %5ld     ncfl  = %5ld\n", nps, npe, ncfl);
+
+  if (linsolver < 3) printf("\n=========================================================\n\n");
+
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr,
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/serial/kinKrylovDemo_ls.out b/examples/kinsol/serial/kinKrylovDemo_ls.out
new file mode 100644
index 0000000..577c261
--- /dev/null
+++ b/examples/kinsol/serial/kinKrylovDemo_ls.out
@@ -0,0 +1,137 @@
+ ------- 
+| SPGMR |
+ -------
+
+Predator-prey test problem --  KINSol (serial version)
+
+Mesh dimensions = 5 X 5
+Number of species = 6
+Total system size = 150
+
+Flag globalstrategy = 0 (0 = None, 1 = Linesearch)
+Linear solver is SPGMR with maxl = 15, maxlrst = 2
+Preconditioning uses interaction-only block-diagonal matrix
+Positivity constraints imposed on all components 
+Tolerance parameters:  fnormtol = 1e-07   scsteptol = 1e-13
+
+Initial profile of concentration
+At all mesh points:  1 1 1   30000 30000 30000
+
+
+Computed equilibrium species concentrations:
+
+At bottom left:
+ 1.16253 1.16253 1.16253 34875 34875 34875
+
+At top right:
+ 1.2637 1.2637 1.2637 37908.7 37908.7 37908.7
+
+Final Statistics.. 
+nni    =     5    nli   =   115
+nfe    =     6    nfeSG =   120
+nps    =   120    npe   =     1     ncfl  =     2
+
+=========================================================
+
+ ------- 
+| SPBCG |
+ -------
+
+Predator-prey test problem --  KINSol (serial version)
+
+Mesh dimensions = 5 X 5
+Number of species = 6
+Total system size = 150
+
+Flag globalstrategy = 0 (0 = None, 1 = Linesearch)
+Linear solver is SPBCG with maxl = 15
+Preconditioning uses interaction-only block-diagonal matrix
+Positivity constraints imposed on all components 
+Tolerance parameters:  fnormtol = 1e-07   scsteptol = 1e-13
+
+Initial profile of concentration
+At all mesh points:  1 1 1   30000 30000 30000
+
+
+Computed equilibrium species concentrations:
+
+At bottom left:
+ 1.16253 1.16253 1.16253 34875 34875 34875
+
+At top right:
+ 1.2637 1.2637 1.2637 37908.7 37908.7 37908.7
+
+Final Statistics.. 
+nni    =     7    nli   =    80
+nfe    =     8    nfeSG =   167
+nps    =   167    npe   =     1     ncfl  =     4
+
+=========================================================
+
+ --------- 
+| SPTFQMR |
+ ---------
+
+Predator-prey test problem --  KINSol (serial version)
+
+Mesh dimensions = 5 X 5
+Number of species = 6
+Total system size = 150
+
+Flag globalstrategy = 0 (0 = None, 1 = Linesearch)
+Linear solver is SPTFQMR with maxl = 25
+Preconditioning uses interaction-only block-diagonal matrix
+Positivity constraints imposed on all components 
+Tolerance parameters:  fnormtol = 1e-07   scsteptol = 1e-13
+
+Initial profile of concentration
+At all mesh points:  1 1 1   30000 30000 30000
+
+
+Computed equilibrium species concentrations:
+
+At bottom left:
+ 1.16253 1.16253 1.16253 34875 34875 34875
+
+At top right:
+ 1.2637 1.2637 1.2637 37908.7 37908.7 37908.7
+
+Final Statistics.. 
+nni    =     8    nli   =   164
+nfe    =     9    nfeSG =   664
+nps    =   664    npe   =     1     ncfl  =     5
+
+=========================================================
+
+ ------- 
+| SPFGMR |
+ -------
+
+Predator-prey test problem --  KINSol (serial version)
+
+Mesh dimensions = 5 X 5
+Number of species = 6
+Total system size = 150
+
+Flag globalstrategy = 0 (0 = None, 1 = Linesearch)
+Linear solver is SPFGMR with maxl = 15, maxlrst = 2
+Preconditioning uses interaction-only block-diagonal matrix
+Positivity constraints imposed on all components 
+Tolerance parameters:  fnormtol = 1e-07   scsteptol = 1e-13
+
+Initial profile of concentration
+At all mesh points:  1 1 1   30000 30000 30000
+
+
+Computed equilibrium species concentrations:
+
+At bottom left:
+ 1.16253 1.16253 1.16253 34875 34875 34875
+
+At top right:
+ 1.2637 1.2637 1.2637 37908.7 37908.7 37908.7
+
+Final Statistics.. 
+nni    =     5    nli   =   115
+nfe    =     6    nfeSG =   120
+nps    =   115    npe   =     1     ncfl  =     2
diff --git a/examples/kinsol/serial/kinLaplace_bnd.c b/examples/kinsol/serial/kinLaplace_bnd.c
new file mode 100644
index 0000000..cade735
--- /dev/null
+++ b/examples/kinsol/serial/kinLaplace_bnd.c
@@ -0,0 +1,394 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * This example solves a 2D elliptic PDE
+ *
+ *    d^2 u / dx^2 + d^2 u / dy^2 = u^3 - u - 2.0
+ *
+ * subject to homogeneous Dirichelt boundary conditions.
+ * The PDE is discretized on a uniform NX+2 by NY+2 grid with
+ * central differencing, and with boundary values eliminated,
+ * leaving an system of size NEQ = NX*NY.
+ * The nonlinear system is solved by KINSOL using the BAND linear
+ * solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_band.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NX   31             /* no. of points in x direction */
+#define NY   31             /* no. of points in y direction */
+#define NEQ  NX*NY          /* problem dimension */
+
+#define SKIP 3              /* no. of points skipped for printing */
+
+#define FTOL RCONST(1.e-12) /* function tolerance */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+/* IJth is defined in order to isolate the translation from the
+   mathematical 2-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. 
+   IJth(vdata,i,j) references the element in the vdata array for
+   u at mesh point (i,j), where 1 <= i <= NX, 1 <= j <= NY.
+   The vdata array is obtained via the macro call vdata = N_VGetArrayPointer_Serial(v),
+   where v is an N_Vector. 
+   The variables are ordered by the y index j, then by the x index i. */
+
+#define IJth(vdata,i,j) (vdata[(j-1) + (i-1)*NY])
+
+/* Private functions */
+
+static int func(N_Vector u, N_Vector f, void *user_data);
+static void PrintOutput(N_Vector u);
+static void PrintFinalStats(void *kmem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{
+  realtype fnormtol, fnorm;
+  N_Vector y, scale;
+  int mset, msubset, flag;
+  void *kmem;
+
+  y = scale = NULL;
+  kmem = NULL;
+
+  /* -------------------------
+   * Print problem description
+   * ------------------------- */
+  
+  printf("\n2D elliptic PDE on unit square\n");
+  printf("   d^2 u / dx^2 + d^2 u / dy^2 = u^3 - u + 2.0\n");
+  printf(" + homogeneous Dirichlet boundary conditions\n\n");
+  printf("Solution method: Modified Newton with band linear solver\n");
+  printf("Problem size: %2ld x %2ld = %4ld\n", (long int) NX, (long int) NY, (long int) NEQ);
+
+  /* --------------------------------------
+   * Create vectors for solution and scales
+   * -------------------------------------- */
+
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  scale = N_VNew_Serial(NEQ);
+  if (check_flag((void *)scale, "N_VNew_Serial", 0)) return(1);
+
+  /* -----------------------------------------
+   * Initialize and allocate memory for KINSOL
+   * ----------------------------------------- */
+
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0)) return(1);
+
+  /* y is used as a template */
+
+  flag = KINInit(kmem, func, y);
+  if (check_flag(&flag, "KINInit", 1)) return(1);
+
+  /* -------------------
+   * Set optional inputs 
+   * ------------------- */
+
+  /* Specify stopping tolerance based on residual */
+
+  fnormtol  = FTOL; 
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1)) return(1);
+
+  /* -------------------------
+   * Attach band linear solver 
+   * ------------------------- */
+
+  flag = KINBand(kmem, NEQ, NX, NX);
+  if (check_flag(&flag, "KINBand", 1)) return(1);
+
+  /* ------------------------------
+   * Parameters for Modified Newton
+   * ------------------------------ */
+
+  /* Force a Jacobian re-evaluation every mset iterations */
+  mset = 100;
+  flag = KINSetMaxSetupCalls(kmem, mset);
+  if (check_flag(&flag, "KINSetMaxSetupCalls", 1)) return(1);
+
+  /* Every msubset iterations, test if a Jacobian evaluation
+     is necessary */
+  msubset = 1;
+  flag = KINSetMaxSubSetupCalls(kmem, msubset);
+  if (check_flag(&flag, "KINSetMaxSubSetupCalls", 1)) return(1);
+
+  /* -------------
+   * Initial guess 
+   * ------------- */
+
+  N_VConst_Serial(ZERO, y);
+
+  /* ----------------------------
+   * Call KINSol to solve problem 
+   * ---------------------------- */
+
+  /* No scaling used */
+  N_VConst_Serial(ONE,scale);
+
+  /* Call main solver */
+  flag = KINSol(kmem,           /* KINSol memory block */
+                y,              /* initial guess on input; solution vector */
+                KIN_LINESEARCH, /* global strategy choice */
+                scale,          /* scaling vector, for the variable cc */
+                scale);         /* scaling vector for function values fval */
+  if (check_flag(&flag, "KINSol", 1)) return(1);
+
+
+  /* ------------------------------------
+   * Print solution and solver statistics 
+   * ------------------------------------ */
+
+  /* Get scaled norm of the system function */
+
+  flag = KINGetFuncNorm(kmem, &fnorm);
+  if (check_flag(&flag, "KINGetfuncNorm", 1)) return(1);
+
+  printf("\nComputed solution (||F|| = %g):\n\n",fnorm);
+  PrintOutput(y);
+
+  PrintFinalStats(kmem);
+
+  /* -----------
+   * Free memory 
+   * ----------- */
+  
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(scale);
+  KINFree(&kmem);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * System function 
+ */
+
+static int func(N_Vector u, N_Vector f, void *user_data)
+{
+  realtype dx, dy, hdiff, vdiff;
+  realtype hdc, vdc;
+  realtype uij, udn, uup, ult, urt;
+  realtype *udata, *fdata;
+  realtype x,y;
+
+  int i, j;
+
+  dx = ONE/(NX+1);  
+  dy = ONE/(NY+1);
+  hdc = ONE/(dx*dx);
+  vdc = ONE/(dy*dy);
+
+  udata = N_VGetArrayPointer_Serial(u);
+  fdata = N_VGetArrayPointer_Serial(f);
+
+  for (j=1; j <= NY; j++) {
+
+    y = j*dy;
+
+    for (i=1; i <= NX; i++) {
+
+      x = i*dx;
+
+      /* Extract u at x_i, y_j and four neighboring points */
+
+      uij = IJth(udata, i, j);
+      udn = (j == 1)  ? ZERO : IJth(udata, i, j-1);
+      uup = (j == NY) ? ZERO : IJth(udata, i, j+1);
+      ult = (i == 1)  ? ZERO : IJth(udata, i-1, j);
+      urt = (i == NX) ? ZERO : IJth(udata, i+1, j);
+
+      /* Evaluate diffusion components */
+
+      hdiff = hdc*(ult - TWO*uij + urt);
+      vdiff = vdc*(uup - TWO*uij + udn);
+
+      /* Set residual at x_i, y_j */
+
+      IJth(fdata, i, j) = hdiff + vdiff + uij - uij*uij*uij + 2.0;
+
+    }
+
+  }
+
+  return(0);
+}
+
+/* 
+ * Print solution at selected points
+ */
+
+static void PrintOutput(N_Vector u)
+{
+  int i, j;
+  realtype dx, dy, x, y;
+  realtype *udata;
+
+  dx = ONE/(NX+1);
+  dy = ONE/(NY+1);
+
+  udata =  N_VGetArrayPointer_Serial(u);
+
+  printf("            ");
+  for (i=1; i<=NX; i+= SKIP) {
+    x = i*dx;
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+      printf("%-8.5Lf ", x);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      printf("%-8.5f ", x);
+#else
+      printf("%-8.5f ", x);
+#endif
+  }
+  printf("\n\n");
+
+  for (j=1; j<=NY; j+= SKIP) {
+    y = j*dy;
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+      printf("%-8.5Lf    ", y);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      printf("%-8.5f    ", y);
+#else
+      printf("%-8.5f    ", y);
+#endif
+    for (i=1; i<=NX; i+= SKIP) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+      printf("%-8.5Lf ", IJth(udata,i,j));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      printf("%-8.5f ", IJth(udata,i,j));
+#else
+      printf("%-8.5f ", IJth(udata,i,j));
+#endif
+    }
+    printf("\n");
+  }
+}
+
+/* 
+ * Print final statistics
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe, nje, nfeD;
+  long int lenrw, leniw, lenrwB, leniwB;
+  long int nbcfails, nbacktr;
+  int flag;
+  
+  /* Main solver statistics */
+
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1);
+
+  /* Linesearch statistics */
+
+  flag = KINGetNumBetaCondFails(kmem, &nbcfails);
+  check_flag(&flag, "KINGetNumBetacondFails", 1);
+  flag = KINGetNumBacktrackOps(kmem, &nbacktr);
+  check_flag(&flag, "KINGetNumBacktrackOps", 1);
+
+  /* Main solver workspace size */
+
+  flag = KINGetWorkSpace(kmem, &lenrw, &leniw);
+  check_flag(&flag, "KINGetWorkSpace", 1);
+
+  /* Band linear solver statistics */
+
+  flag = KINDlsGetNumJacEvals(kmem, &nje);
+  check_flag(&flag, "KINDlsGetNumJacEvals", 1);
+  flag = KINDlsGetNumFuncEvals(kmem, &nfeD);
+  check_flag(&flag, "KINDlsGetNumFuncEvals", 1);
+
+  /* Band linear solver workspace size */
+
+  flag = KINDlsGetWorkSpace(kmem, &lenrwB, &leniwB);
+  check_flag(&flag, "KINDlsGetWorkSpace", 1);
+
+  printf("\nFinal Statistics.. \n\n");
+  printf("nni      = %6ld    nfe     = %6ld \n", nni, nfe);
+  printf("nbcfails = %6ld    nbacktr = %6ld \n", nbcfails, nbacktr);
+  printf("nje      = %6ld    nfeB    = %6ld \n", nje, nfeD);
+  printf("\n");
+  printf("lenrw    = %6ld    leniw   = %6ld \n", lenrw, leniw);
+  printf("lenrwB   = %6ld    leniwB  = %6ld \n", lenrwB, leniwB);
+  
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr,
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/serial/kinLaplace_bnd.out b/examples/kinsol/serial/kinLaplace_bnd.out
new file mode 100644
index 0000000..5f43154
--- /dev/null
+++ b/examples/kinsol/serial/kinLaplace_bnd.out
@@ -0,0 +1,32 @@
+
+2D elliptic PDE on unit square
+   d^2 u / dx^2 + d^2 u / dy^2 = u^3 - u + 2.0
+ + homogeneous Dirichlet boundary conditions
+
+Solution method: Modified Newton with band linear solver
+Problem size: 31 x 31 =  961
+
+Computed solution (||F|| = 1.37621e-12):
+
+            0.03125  0.12500  0.21875  0.31250  0.40625  0.50000  0.59375  0.68750  0.78125  0.87500  0.96875  
+
+0.03125     0.00405  0.01165  0.01617  0.01896  0.02051  0.02100  0.02051  0.01896  0.01617  0.01165  0.00405  
+0.12500     0.01165  0.03772  0.05461  0.06530  0.07126  0.07318  0.07126  0.06530  0.05461  0.03772  0.01165  
+0.21875     0.01617  0.05461  0.08098  0.09813  0.10780  0.11093  0.10780  0.09813  0.08098  0.05461  0.01617  
+0.31250     0.01896  0.06530  0.09813  0.11989  0.13229  0.13631  0.13229  0.11989  0.09813  0.06530  0.01896  
+0.40625     0.02051  0.07126  0.10780  0.13229  0.14632  0.15089  0.14632  0.13229  0.10780  0.07126  0.02051  
+0.50000     0.02100  0.07318  0.11093  0.13631  0.15089  0.15564  0.15089  0.13631  0.11093  0.07318  0.02100  
+0.59375     0.02051  0.07126  0.10780  0.13229  0.14632  0.15089  0.14632  0.13229  0.10780  0.07126  0.02051  
+0.68750     0.01896  0.06530  0.09813  0.11989  0.13229  0.13631  0.13229  0.11989  0.09813  0.06530  0.01896  
+0.78125     0.01617  0.05461  0.08098  0.09813  0.10780  0.11093  0.10780  0.09813  0.08098  0.05461  0.01617  
+0.87500     0.01165  0.03772  0.05461  0.06530  0.07126  0.07318  0.07126  0.06530  0.05461  0.03772  0.01165  
+0.96875     0.00405  0.01165  0.01617  0.01896  0.02051  0.02100  0.02051  0.01896  0.01617  0.01165  0.00405  
+
+Final Statistics.. 
+
+nni      =      7    nfe     =      8 
+nbcfails =      0    nbacktr =      0 
+nje      =      1    nfeB    =     63 
+
+lenrw    =   4822    leniw   =     27 
+lenrwB   = 150877    leniwB  =    961 
diff --git a/examples/kinsol/serial/kinLaplace_picard_bnd.c b/examples/kinsol/serial/kinLaplace_picard_bnd.c
new file mode 100644
index 0000000..b93a710
--- /dev/null
+++ b/examples/kinsol/serial/kinLaplace_picard_bnd.c
@@ -0,0 +1,432 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * This example solves a 2D elliptic PDE
+ *
+ *    d^2 u / dx^2 + d^2 u / dy^2 = u^3 - u - 2.0
+ *
+ * subject to homogeneous Dirichelt boundary conditions.
+ * The PDE is discretized on a uniform NX+2 by NY+2 grid with
+ * central differencing, and with boundary values eliminated,
+ * leaving a system of size NEQ = NX*NY.
+ * The nonlinear system is solved by KINSOL using the Picard
+ * iteration and the BAND linear solver.
+ *
+ * This file is strongly based on the kinLaplace_bnd.c file 
+ * developed by Radu Serban.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_band.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NX   31             /* no. of points in x direction */
+#define NY   31             /* no. of points in y direction */
+/* #define NX   3 */             /* no. of points in x direction */
+/* #define NY   3 */            /* no. of points in y direction */
+#define NEQ  NX*NY          /* problem dimension */
+
+#define SKIP 3              /* no. of points skipped for printing */
+
+#define FTOL RCONST(1.e-12) /* function tolerance */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+/* IJth is defined in order to isolate the translation from the
+   mathematical 2-dimensional structure of the dependent variable vector
+   to the underlying 1-dimensional storage. 
+   IJth(vdata,i,j) references the element in the vdata array for
+   u at mesh point (i,j), where 1 <= i <= NX, 1 <= j <= NY.
+   The vdata array is obtained via the macro call vdata = N_VGetArrayPointer_Serial(v),
+   where v is an N_Vector. 
+   The variables are ordered by the y index j, then by the x index i. */
+
+#define IJth(vdata,i,j) (vdata[(j-1) + (i-1)*NY])
+
+/* Private functions */
+
+static int func(N_Vector u, N_Vector f, void *user_data);
+static int jac(long int N, long int mu, long int ml, 
+	       N_Vector u, N_Vector f, DlsMat J, void *user_data,
+	       N_Vector tmp1, N_Vector tmp2);
+static void PrintOutput(N_Vector u);
+static void PrintFinalStats(void *kmem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{
+  realtype fnormtol, fnorm;
+  N_Vector y, scale;
+  int flag;
+  void *kmem;
+
+  y = scale = NULL;
+  kmem = NULL;
+
+  /* -------------------------
+   * Print problem description
+   * ------------------------- */
+  
+  printf("\n2D elliptic PDE on unit square\n");
+  printf("   d^2 u / dx^2 + d^2 u / dy^2 = u^3 - u + 2.0\n");
+  printf(" + homogeneous Dirichlet boundary conditions\n\n");
+  printf("Solution method: Anderson accelerated Picard iteration with band linear solver.\n");
+  printf("Problem size: %2ld x %2ld = %4ld\n", 
+	 (long int) NX, (long int) NY, (long int) NEQ);
+
+  /* --------------------------------------
+   * Create vectors for solution and scales
+   * -------------------------------------- */
+
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  scale = N_VNew_Serial(NEQ);
+  if (check_flag((void *)scale, "N_VNew_Serial", 0)) return(1);
+
+  /* ----------------------------------------------------------------------------------
+   * Initialize and allocate memory for KINSOL, set parametrs for Anderson acceleration
+   * ---------------------------------------------------------------------------------- */
+
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0)) return(1);
+
+  /* y is used as a template */
+
+  /* Use acceleration with up to 3 prior residuals */
+  flag = KINSetMAA(kmem, 3);
+  if (check_flag(&flag, "KINSetMAA", 1)) return(1);
+
+  flag = KINInit(kmem, func, y);
+  if (check_flag(&flag, "KINInit", 1)) return(1);
+
+  /* -------------------
+   * Set optional inputs 
+   * ------------------- */
+
+  /* Specify stopping tolerance based on residual */
+
+  fnormtol  = FTOL; 
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1)) return(1);
+
+  /* -------------------------
+   * Attach band linear solver 
+   * ------------------------- */
+
+  flag = KINBand(kmem, NEQ, NX, NX);
+  if (check_flag(&flag, "KINBand", 1)) return(1);
+  flag = KINDlsSetBandJacFn(kmem, jac);
+  if (check_flag(&flag, "KINDlsBandJacFn", 1)) return(1);
+
+  /* -------------
+   * Initial guess 
+   * ------------- */
+
+  N_VConst_Serial(ZERO, y);
+  IJth(N_VGetArrayPointer_Serial(y), 2, 2) = ONE;
+
+  /* ----------------------------
+   * Call KINSol to solve problem 
+   * ---------------------------- */
+
+  /* No scaling used */
+  N_VConst_Serial(ONE,scale);
+
+  /* Call main solver */
+  flag = KINSol(kmem,           /* KINSol memory block */
+                y,              /* initial guess on input; solution vector */
+                KIN_PICARD,     /* global strategy choice */
+                scale,          /* scaling vector, for the variable cc */
+                scale);         /* scaling vector for function values fval */
+  if (check_flag(&flag, "KINSol", 1)) return(1);
+
+
+  /* ------------------------------------
+   * Print solution and solver statistics 
+   * ------------------------------------ */
+
+  /* Get scaled norm of the system function */
+
+  flag = KINGetFuncNorm(kmem, &fnorm);
+  if (check_flag(&flag, "KINGetfuncNorm", 1)) return(1);
+
+  printf("\nComputed solution (||F|| = %g):\n\n",fnorm);
+  PrintOutput(y);
+
+  PrintFinalStats(kmem);
+
+  /* -----------
+   * Free memory 
+   * ----------- */
+  
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(scale);
+  KINFree(&kmem);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * System function 
+ */
+
+static int func(N_Vector u, N_Vector f, void *user_data)
+{
+  realtype dx, dy, hdiff, vdiff;
+  realtype hdc, vdc;
+  realtype uij, udn, uup, ult, urt;
+  realtype *udata, *fdata;
+  realtype x,y;
+
+  int i, j;
+
+  dx = ONE/(NX+1);  
+  dy = ONE/(NY+1);
+  hdc = ONE/(dx*dx);
+  vdc = ONE/(dy*dy);
+
+  udata = N_VGetArrayPointer_Serial(u);
+  fdata = N_VGetArrayPointer_Serial(f);
+
+  for (j=1; j <= NY; j++) {
+
+    y = j*dy;
+
+    for (i=1; i <= NX; i++) {
+
+      x = i*dx;
+
+      /* Extract u at x_i, y_j and four neighboring points */
+
+      uij = IJth(udata, i, j);
+      udn = (j == 1)  ? ZERO : IJth(udata, i, j-1);
+      uup = (j == NY) ? ZERO : IJth(udata, i, j+1);
+      ult = (i == 1)  ? ZERO : IJth(udata, i-1, j);
+      urt = (i == NX) ? ZERO : IJth(udata, i+1, j);
+
+      /* Evaluate diffusion components */
+
+      hdiff = hdc*(ult - TWO*uij + urt);
+      vdiff = vdc*(uup - TWO*uij + udn);
+
+      /* Set residual at x_i, y_j */
+
+      IJth(fdata, i, j) = hdiff + vdiff + uij - uij*uij*uij + 2.0;
+
+    }
+
+  }
+
+  return(0);
+}
+
+/* 
+ * Jacobian function 
+ */
+
+static int jac(long int N, long int mu, long int ml, 
+	       N_Vector u, N_Vector f, 
+	       DlsMat J, void *user_data,
+	       N_Vector tmp1, N_Vector tmp2)
+{
+  realtype dx, dy;
+  realtype hdc, vdc;
+  realtype *kthCol;
+
+  int i, j, k;
+
+  dx = ONE/(NX+1);  
+  dy = ONE/(NY+1);
+  hdc = ONE/(dx*dx);
+  vdc = ONE/(dy*dy);
+
+  /*
+     The components of f(t,u) which depend on u_{i,j} are
+     f_{i,j}, f_{i-1,j}, f_{i+1,j}, f_{i,j+1}, and f_{i,j-1}.
+     Thus, a column of the Jacobian will contain an entry from
+     each of these equations exception the ones on the boundary.
+
+     f_{i,j}   = hdc*(u_{i-1,j}  -2u_{i,j}  +u_{i+1,j})   + vdc*(u_{i,j-1}  -2u_{i,j}  +u_{i,j+1})
+     f_{i-1,j} = hdc*(u_{i-2,j}  -2u_{i-1,j}+u_{i,j})     + vdc*(u_{i-1,j-1}-2u_{i-1,j}+u_{i-1,j+1})
+     f_{i+1,j} = hdc*(u_{i,j}    -2u_{i+1,j}+u_{i+2,j})   + vdc*(u_{i+1,j-1}-2u_{i+1,j}+u_{i+1,j+1})
+     f_{i,j-1} = hdc*(u_{i-1,j-1}-2u_{i,j-1}+u_{i+1,j-1}) + vdc*(u_{i,j-2}  -2u_{i,j-1}+u_{i,j})
+     f_{i,j+1} = hdc*(u_{i-1,j+1}-2u_{i,j+1}+u_{i+1,j+1}) + vdc*(u_{i,j}    -2u_{i,j+1}+u_{i,j+2})
+
+  */
+
+  for (j=0; j <= NY-1; j++) {
+    for (i=0; i <= NX-1; i++) {
+
+      /* Evaluate diffusion coefficients */
+
+      k = i + j*NX;
+      kthCol = BAND_COL(J, k);
+      BAND_COL_ELEM(kthCol,k,k) = -2.0*hdc - 2.0*vdc;
+      if ( i != (NX-1) ) BAND_COL_ELEM(kthCol,k+1,k) = hdc;
+      if ( i != 0 )      BAND_COL_ELEM(kthCol,k-1,k) = hdc;
+      if ( j != (NY-1) ) BAND_COL_ELEM(kthCol,k+NX,k) = vdc;
+      if ( j != 0 )      BAND_COL_ELEM(kthCol,k-NX,k) = vdc;
+    }
+  }
+
+  return(0);
+}
+
+/* 
+ * Print solution at selected points
+ */
+
+static void PrintOutput(N_Vector u)
+{
+  int i, j;
+  realtype dx, dy, x, y;
+  realtype *udata;
+
+  dx = ONE/(NX+1);
+  dy = ONE/(NY+1);
+
+  udata =  N_VGetArrayPointer_Serial(u);
+
+  printf("            ");
+  for (i=1; i<=NX; i+= SKIP) {
+    x = i*dx;
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+      printf("%-8.5Lf ", x);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      printf("%-8.5f ", x);
+#else
+      printf("%-8.5f ", x);
+#endif
+  }
+  printf("\n\n");
+
+  for (j=1; j<=NY; j+= SKIP) {
+    y = j*dy;
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+      printf("%-8.5Lf    ", y);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      printf("%-8.5f    ", y);
+#else
+      printf("%-8.5f    ", y);
+#endif
+    for (i=1; i<=NX; i+= SKIP) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+      printf("%-8.5Lf ", IJth(udata,i,j));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      printf("%-8.5f ", IJth(udata,i,j));
+#else
+      printf("%-8.5f ", IJth(udata,i,j));
+#endif
+    }
+    printf("\n");
+  }
+}
+
+/* 
+ * Print final statistics
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe, nje, nfeD;
+  long int lenrwB, leniwB;
+  int flag;
+  
+  /* Main solver statistics */
+
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1);
+
+  /* Band linear solver statistics */
+
+  flag = KINDlsGetNumJacEvals(kmem, &nje);
+  check_flag(&flag, "KINDlsGetNumJacEvals", 1);
+  flag = KINDlsGetNumFuncEvals(kmem, &nfeD);
+  check_flag(&flag, "KINDlsGetNumFuncEvals", 1);
+
+  /* Band linear solver workspace size */
+
+  flag = KINDlsGetWorkSpace(kmem, &lenrwB, &leniwB);
+  check_flag(&flag, "KINDlsGetWorkSpace", 1);
+
+  printf("\nFinal Statistics.. \n\n");
+  printf("nni      = %6ld    nfe     = %6ld \n", nni, nfe);
+  printf("nje      = %6ld    nfeB    = %6ld \n", nje, nfeD);
+  printf("\n");
+  printf("lenrwB   = %6ld    leniwB  = %6ld \n", lenrwB, leniwB);
+  
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr,
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/serial/kinLaplace_picard_bnd.out b/examples/kinsol/serial/kinLaplace_picard_bnd.out
new file mode 100644
index 0000000..6ef27cc
--- /dev/null
+++ b/examples/kinsol/serial/kinLaplace_picard_bnd.out
@@ -0,0 +1,30 @@
+
+2D elliptic PDE on unit square
+   d^2 u / dx^2 + d^2 u / dy^2 = u^3 - u + 2.0
+ + homogeneous Dirichlet boundary conditions
+
+Solution method: Anderson accelerated Picard iteration with band linear solver.
+Problem size: 31 x 31 =  961
+
+Computed solution (||F|| = 1.83409e-13):
+
+            0.03125  0.12500  0.21875  0.31250  0.40625  0.50000  0.59375  0.68750  0.78125  0.87500  0.96875  
+
+0.03125     0.00405  0.01165  0.01617  0.01896  0.02051  0.02100  0.02051  0.01896  0.01617  0.01165  0.00405  
+0.12500     0.01165  0.03772  0.05461  0.06530  0.07126  0.07318  0.07126  0.06530  0.05461  0.03772  0.01165  
+0.21875     0.01617  0.05461  0.08098  0.09813  0.10780  0.11093  0.10780  0.09813  0.08098  0.05461  0.01617  
+0.31250     0.01896  0.06530  0.09813  0.11989  0.13229  0.13631  0.13229  0.11989  0.09813  0.06530  0.01896  
+0.40625     0.02051  0.07126  0.10780  0.13229  0.14632  0.15089  0.14632  0.13229  0.10780  0.07126  0.02051  
+0.50000     0.02100  0.07318  0.11093  0.13631  0.15089  0.15564  0.15089  0.13631  0.11093  0.07318  0.02100  
+0.59375     0.02051  0.07126  0.10780  0.13229  0.14632  0.15089  0.14632  0.13229  0.10780  0.07126  0.02051  
+0.68750     0.01896  0.06530  0.09813  0.11989  0.13229  0.13631  0.13229  0.11989  0.09813  0.06530  0.01896  
+0.78125     0.01617  0.05461  0.08098  0.09813  0.10780  0.11093  0.10780  0.09813  0.08098  0.05461  0.01617  
+0.87500     0.01165  0.03772  0.05461  0.06530  0.07126  0.07318  0.07126  0.06530  0.05461  0.03772  0.01165  
+0.96875     0.00405  0.01165  0.01617  0.01896  0.02051  0.02100  0.02051  0.01896  0.01617  0.01165  0.00405  
+
+Final Statistics.. 
+
+nni      =      6    nfe     =      7 
+nje      =      6    nfeB    =      0 
+
+lenrwB   = 150877    leniwB  =    961 
diff --git a/examples/kinsol/serial/kinRoberts_fp.c b/examples/kinsol/serial/kinRoberts_fp.c
new file mode 100644
index 0000000..82edd67
--- /dev/null
+++ b/examples/kinsol/serial/kinRoberts_fp.c
@@ -0,0 +1,299 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * Example problem:
+ * 
+ * The following is a simple example problem, with the coding
+ * needed for its solution by the accelerated fixed point solver in 
+ * KINSOL. 
+ * The problem is from chemical kinetics, and consists of solving 
+ * the first time step in a Backward Euler solution for the 
+ * following three rate equations:         
+ *    dy1/dt = -.04*y1 + 1.e4*y2*y3
+ *    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e2*(y2)^2
+ *    dy3/dt = 3.e2*(y2)^2
+ * on the interval from t = 0.0 to t = 0.1, with initial
+ * conditions: y1 = 1.0, y2 = y3 = 0. The problem is stiff.
+ * Run statistics (optional outputs) are printed at the end.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+/* Problem Constants */
+
+#define NEQ   3              /* number of equations  */
+#define Y10   RCONST(1.0)    /* initial y components */
+#define Y20   RCONST(0.0)
+#define Y30   RCONST(0.0)
+#define TOL   RCONST(1.e-10) /* function tolerance */
+#define DSTEP RCONST(0.1)    /* Size of the single time step used */
+
+#define PRIORS 2
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* User-defined vector accessor macro: Ith */
+
+/* This macro is defined in order to write code which exactly matches
+   the mathematical problem description given above.
+
+   Ith(v,i) references the ith component of the vector v, where i is in
+   the range [1..NEQ] and NEQ is defined above. The Ith macro is defined
+   using the N_VIth macro in nvector.h. N_VIth numbers the components of
+   a vector starting from 0.
+*/
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)       /* Ith numbers components 1..NEQ */
+
+
+/* Private functions */
+
+static int funcRoberts(N_Vector u, N_Vector f, void *user_data);
+static void PrintOutput(N_Vector u);
+static void PrintFinalStats(void *kmem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{
+  realtype fnormtol, fnorm;
+  N_Vector y, scale;
+  int flag;
+  void *kmem;
+
+  fnorm = 0.0;
+  y = scale = NULL;
+  kmem = NULL;
+
+  /* -------------------------
+   * Print problem description
+   * ------------------------- */
+  
+  printf("Example problem from chemical kinetics solving\n"); 
+  printf("the first time step in a Backward Euler solution for the\n");
+  printf("following three rate equations:\n");
+  printf("    dy1/dt = -.04*y1 + 1.e4*y2*y3\n");
+  printf("    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e2*(y2)^2\n");
+  printf("    dy3/dt = 3.e2*(y2)^2\n");
+  printf("on the interval from t = 0.0 to t = 0.1, with initial\n");
+  printf("conditions: y1 = 1.0, y2 = y3 = 0.\n"); 
+  printf("Solution method: Anderson accelerated fixed point iteration.\n");
+
+  /* --------------------------------------
+   * Create vectors for solution and scales
+   * -------------------------------------- */
+
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  scale = N_VNew_Serial(NEQ);
+  if (check_flag((void *)scale, "N_VNew_Serial", 0)) return(1);
+
+  /* -----------------------------------------
+   * Initialize and allocate memory for KINSOL
+   * ----------------------------------------- */
+
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0)) return(1);
+
+  /* y is used as a template */
+
+  /* Set number of prior residuals used in Anderson acceleration */
+  flag = KINSetMAA(kmem, PRIORS);
+
+  flag = KINInit(kmem, funcRoberts, y);
+  if (check_flag(&flag, "KINInit", 1)) return(1);
+
+  /* -------------------
+   * Set optional inputs 
+   * ------------------- */
+
+  /* Specify stopping tolerance based on residual */
+
+  fnormtol  = TOL; 
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1)) return(1);
+
+  /* -------------
+   * Initial guess 
+   * ------------- */
+
+  N_VConst_Serial(ZERO, y);
+  Ith(y,1) = ONE;
+
+  /* ----------------------------
+   * Call KINSol to solve problem 
+   * ---------------------------- */
+
+  /* No scaling used */
+  N_VConst_Serial(ONE,scale);
+
+  /* Call main solver */
+  flag = KINSol(kmem,           /* KINSol memory block */
+                y,              /* initial guess on input; solution vector */
+                KIN_FP,         /* global strategy choice */
+                scale,          /* scaling vector, for the variable cc */
+                scale);         /* scaling vector for function values fval */
+  if (check_flag(&flag, "KINSol", 1)) return(1);
+
+
+  /* ------------------------------------
+   * Print solution and solver statistics 
+   * ------------------------------------ */
+
+  /* Get scaled norm of the system function */
+
+  flag = KINGetFuncNorm(kmem, &fnorm);
+  if (check_flag(&flag, "KINGetfuncNorm", 1)) return(1);
+
+  printf("\nComputed solution (||F|| = %g):\n\n",fnorm);
+  PrintOutput(y);
+
+  PrintFinalStats(kmem);
+
+  /* -----------
+   * Free memory 
+   * ----------- */
+  
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(scale);
+  KINFree(&kmem);
+
+  return(0);
+}
+
+/*
+ *--------------------------------------------------------------------
+ * PRIVATE FUNCTIONS
+ *--------------------------------------------------------------------
+ */
+
+/* 
+ * System function 
+ */
+
+static int funcRoberts(N_Vector y, N_Vector g, void *user_data)
+{
+  realtype y1, y2, y3;
+  realtype yd1, yd3;
+
+  y1 = Ith(y,1);
+  y2 = Ith(y,2);
+  y3 = Ith(y,3);
+
+  yd1 = DSTEP * ( RCONST(-0.04)*y1 + RCONST(1.0e4)*y2*y3 );
+  yd3 = DSTEP * RCONST(3.0e2)*y2*y2;
+
+  Ith(g,1) = yd1 + Y10;
+  Ith(g,2) = -yd1 - yd3 + Y20;
+  Ith(g,3) = yd3 + Y30;
+
+  return(0);
+}
+
+/* 
+ * Print solution at selected points
+ */
+
+static void PrintOutput(N_Vector y)
+{
+  realtype y1, y2, y3;
+
+  y1 = Ith(y,1);
+  y2 = Ith(y,2);
+  y3 = Ith(y,3);
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+  printf("y =%14.6Le  %14.6Le  %14.6Le\n", y1, y2, y3);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  printf("y =%14.6e  %14.6e  %14.6e\n", y1, y2, y3);
+#else
+  printf("y =%14.6e  %14.6e  %14.6e\n", y1, y2, y3);
+#endif
+
+  return;
+}
+
+/* 
+ * Print final statistics
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe;
+  int flag;
+  
+  /* Main solver statistics */
+
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1);
+
+  printf("\nFinal Statistics.. \n\n");
+  printf("nni      = %6ld    nfe     = %6ld \n", nni, nfe);
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr,
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/serial/kinRoberts_fp.out b/examples/kinsol/serial/kinRoberts_fp.out
new file mode 100644
index 0000000..f105fcb
--- /dev/null
+++ b/examples/kinsol/serial/kinRoberts_fp.out
@@ -0,0 +1,17 @@
+Example problem from chemical kinetics solving
+the first time step in a Backward Euler solution for the
+following three rate equations:
+    dy1/dt = -.04*y1 + 1.e4*y2*y3
+    dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e2*(y2)^2
+    dy3/dt = 3.e2*(y2)^2
+on the interval from t = 0.0 to t = 0.1, with initial
+conditions: y1 = 1.0, y2 = y3 = 0.
+Solution method: Anderson accelerated fixed point iteration.
+
+Computed solution (||F|| = 3.96494e-12):
+
+y =  9.967854e-01    2.953006e-03    2.616074e-04
+
+Final Statistics.. 
+
+nni      =      8    nfe     =      8 
diff --git a/examples/kinsol/serial/kinRoboKin_dns.c b/examples/kinsol/serial/kinRoboKin_dns.c
new file mode 100644
index 0000000..baaf4bf
--- /dev/null
+++ b/examples/kinsol/serial/kinRoboKin_dns.c
@@ -0,0 +1,437 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * This example solves a nonlinear system from robot kinematics.
+ *
+ * Source: "Handbook of Test Problems in Local and Global Optimization",
+ *             C.A. Floudas, P.M. Pardalos et al.
+ *             Kluwer Academic Publishers, 1999.
+ * Test problem 6 from Section 14.1, Chapter 14
+ * 
+ * The nonlinear system is solved by KINSOL using the DENSE linear
+ * solver.
+ *
+ * Constraints are imposed to make all components of the solution
+ * be within [-1,1].
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_dense.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NVAR  8              /* variables */ 
+#define NEQ   3*NVAR         /* equations + bounds */
+
+#define FTOL   RCONST(1.e-5) /* function tolerance */
+#define STOL   RCONST(1.e-5) /* step tolerance */
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)
+#define IJth(A,i,j) DENSE_ELEM(A,i-1,j-1)
+
+static int func(N_Vector y, N_Vector f, void *user_data);
+static int jac(long int N,
+               N_Vector y, N_Vector f,
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2);
+static void PrintOutput(N_Vector y);
+static void PrintFinalStats(void *kmem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{
+  realtype fnormtol, scsteptol;
+  N_Vector y, scale, constraints;
+  int mset, flag, i;
+  void *kmem;
+
+  y = scale = constraints = NULL;
+  kmem = NULL;
+
+  printf("\nRobot Kinematics Example\n");
+  printf("8 variables; -1 <= x_i <= 1\n");
+  printf("KINSOL problem size: 8 + 2*8 = 24 \n\n");
+
+  /* Create vectors for solution, scales, and constraints */
+
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  scale = N_VNew_Serial(NEQ);
+  if (check_flag((void *)scale, "N_VNew_Serial", 0)) return(1);
+
+  constraints = N_VNew_Serial(NEQ);
+  if (check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize and allocate memory for KINSOL */
+
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0)) return(1);
+
+  flag = KINInit(kmem, func, y); /* y passed as a template */
+  if (check_flag(&flag, "KINInit", 1)) return(1);
+
+  /* Set optional inputs */
+
+  N_VConst_Serial(ZERO,constraints);
+  for (i = NVAR+1; i <= NEQ; i++) Ith(constraints, i) = ONE;
+  
+  flag = KINSetConstraints(kmem, constraints);
+  if (check_flag(&flag, "KINSetConstraints", 1)) return(1);
+
+  fnormtol  = FTOL; 
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1)) return(1);
+
+  scsteptol = STOL;
+  flag = KINSetScaledStepTol(kmem, scsteptol);
+  if (check_flag(&flag, "KINSetScaledStepTol", 1)) return(1);
+
+  /* Attach dense linear solver */
+
+  flag = KINDense(kmem, NEQ);
+  if (check_flag(&flag, "KINDense", 1)) return(1);
+
+  flag = KINDlsSetDenseJacFn(kmem, jac);
+  if (check_flag(&flag, "KINDlsSetDenseJacFn", 1)) return(1);
+
+  /* Indicate exact Newton */
+
+  mset = 1;
+  flag = KINSetMaxSetupCalls(kmem, mset);
+  if (check_flag(&flag, "KINSetMaxSetupCalls", 1)) return(1);
+
+  /* Initial guess */
+
+  N_VConst_Serial(ONE, y);
+  for(i = 1; i <= NVAR; i++) Ith(y,i) = SUNRsqrt(TWO)/TWO;
+
+  printf("Initial guess:\n");
+  PrintOutput(y);
+
+  /* Call KINSol to solve problem */
+
+  N_VConst_Serial(ONE,scale);
+  flag = KINSol(kmem,           /* KINSol memory block */
+                y,              /* initial guess on input; solution vector */
+                KIN_LINESEARCH, /* global strategy choice */
+                scale,          /* scaling vector, for the variable cc */
+                scale);         /* scaling vector for function values fval */
+  if (check_flag(&flag, "KINSol", 1)) return(1);
+
+  printf("\nComputed solution:\n");
+  PrintOutput(y);
+
+  /* Print final statistics and free memory */  
+
+  PrintFinalStats(kmem);
+
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(scale);
+  N_VDestroy_Serial(constraints);
+  KINFree(&kmem);
+
+  return(0);
+}
+
+/* 
+ * System function 
+ */
+
+static int func(N_Vector y, N_Vector f, void *user_data)
+{
+  realtype *yd, *fd;
+
+  realtype x1, x2, x3, x4, x5, x6, x7, x8;
+  realtype l1, l2, l3, l4, l5, l6, l7, l8;
+  realtype u1, u2, u3, u4, u5, u6, u7, u8;
+
+  realtype eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8;
+  realtype lb1, lb2, lb3, lb4, lb5, lb6, lb7, lb8;
+  realtype ub1, ub2, ub3, ub4, ub5, ub6, ub7, ub8;
+
+  yd = N_VGetArrayPointer_Serial(y);
+  fd = N_VGetArrayPointer_Serial(f);
+
+  x1 = yd[0]; l1 = yd[ 8]; u1 = yd[16]; 
+  x2 = yd[1]; l2 = yd[ 9]; u2 = yd[17]; 
+  x3 = yd[2]; l3 = yd[10]; u3 = yd[18]; 
+  x4 = yd[3]; l4 = yd[11]; u4 = yd[19]; 
+  x5 = yd[4]; l5 = yd[12]; u5 = yd[20]; 
+  x6 = yd[5]; l6 = yd[13]; u6 = yd[21]; 
+  x7 = yd[6]; l7 = yd[14]; u7 = yd[22]; 
+  x8 = yd[7]; l8 = yd[15]; u8 = yd[23]; 
+
+  /* Nonlinear equations */
+
+  eq1 = - 0.1238*x1 + x7 - 0.001637*x2 
+    - 0.9338*x4 + 0.004731*x1*x3 - 0.3578*x2*x3 - 0.3571;
+  eq2 = 0.2638*x1 - x7 - 0.07745*x2 
+    - 0.6734*x4 + 0.2238*x1*x3 + 0.7623*x2*x3 - 0.6022;
+  eq3 = 0.3578*x1 + 0.004731*x2 + x6*x8;
+  eq4 = - 0.7623*x1 + 0.2238*x2 + 0.3461;
+  eq5 = x1*x1 + x2*x2 - 1;
+  eq6 = x3*x3 + x4*x4 - 1;
+  eq7 = x5*x5 + x6*x6 - 1;
+  eq8 = x7*x7 + x8*x8 - 1;
+
+  /* Lower bounds ( l_i = 1 + x_i >= 0)*/
+
+  lb1 = l1 - 1.0 - x1;
+  lb2 = l2 - 1.0 - x2;
+  lb3 = l3 - 1.0 - x3;
+  lb4 = l4 - 1.0 - x4;
+  lb5 = l5 - 1.0 - x5;
+  lb6 = l6 - 1.0 - x6;
+  lb7 = l7 - 1.0 - x7;
+  lb8 = l8 - 1.0 - x8;
+
+  /* Upper bounds ( u_i = 1 - x_i >= 0)*/
+
+  ub1 = u1 - 1.0 + x1;
+  ub2 = u2 - 1.0 + x2;
+  ub3 = u3 - 1.0 + x3;
+  ub4 = u4 - 1.0 + x4;
+  ub5 = u5 - 1.0 + x5;
+  ub6 = u6 - 1.0 + x6;
+  ub7 = u7 - 1.0 + x7;
+  ub8 = u8 - 1.0 + x8;
+
+  fd[0] = eq1; fd[ 8] = lb1; fd[16] = ub1;
+  fd[1] = eq2; fd[ 9] = lb2; fd[17] = ub2;
+  fd[2] = eq3; fd[10] = lb3; fd[18] = ub3;
+  fd[3] = eq4; fd[11] = lb4; fd[19] = ub4;
+  fd[4] = eq5; fd[12] = lb5; fd[20] = ub5;
+  fd[5] = eq6; fd[13] = lb6; fd[21] = ub6;
+  fd[6] = eq7; fd[14] = lb7; fd[22] = ub7;
+  fd[7] = eq8; fd[15] = lb8; fd[23] = ub8;
+
+  return(0);
+}
+
+/*
+ * System Jacobian
+ */
+
+static int jac(long int N,
+               N_Vector y, N_Vector f,
+               DlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2)
+{
+  int i;
+  realtype *yd;
+  realtype x1, x2, x3, x4, x5, x6, x7, x8;
+
+  yd = N_VGetArrayPointer_Serial(y);
+
+  x1 = yd[0];
+  x2 = yd[1];
+  x3 = yd[2];
+  x4 = yd[3];
+  x5 = yd[4];
+  x6 = yd[5];
+  x7 = yd[6];
+  x8 = yd[7];
+
+  /* Nonlinear equations */
+
+  /* 
+     - 0.1238*x1 + x7 - 0.001637*x2 
+     - 0.9338*x4 + 0.004731*x1*x3 - 0.3578*x2*x3 - 0.3571 
+  */
+  IJth(J,1,1) = - 0.1238 + 0.004731*x3;
+  IJth(J,1,2) = - 0.001637 - 0.3578*x3;
+  IJth(J,1,3) = 0.004731*x1 - 0.3578*x2;
+  IJth(J,1,4) = - 0.9338;
+  IJth(J,1,7) = 1.0;
+
+  /*
+    0.2638*x1 - x7 - 0.07745*x2 
+    - 0.6734*x4 + 0.2238*x1*x3 + 0.7623*x2*x3 - 0.6022
+  */
+  IJth(J,2,1) = 0.2638 + 0.2238*x3;
+  IJth(J,2,2) = - 0.07745 + 0.7623*x3;
+  IJth(J,2,3) = 0.2238*x1 + 0.7623*x2;
+  IJth(J,2,4) = - 0.6734;
+  IJth(J,2,7) = -1.0;
+
+  /*
+    0.3578*x1 + 0.004731*x2 + x6*x8
+  */
+  IJth(J,3,1) = 0.3578;
+  IJth(J,3,2) = 0.004731;
+  IJth(J,3,6) = x8;
+  IJth(J,3,8) = x6;
+
+  /*
+    - 0.7623*x1 + 0.2238*x2 + 0.3461
+  */
+  IJth(J,4,1) = - 0.7623;
+  IJth(J,4,2) = 0.2238;
+
+  /*
+    x1*x1 + x2*x2 - 1
+  */
+  IJth(J,5,1) = 2.0*x1;
+  IJth(J,5,2) = 2.0*x2;
+
+  /*
+    x3*x3 + x4*x4 - 1
+  */
+  IJth(J,6,3) = 2.0*x3;
+  IJth(J,6,4) = 2.0*x4;
+
+  /*
+    x5*x5 + x6*x6 - 1
+  */
+  IJth(J,7,5) = 2.0*x5;
+  IJth(J,7,6) = 2.0*x6;
+
+  /*
+    x7*x7 + x8*x8 - 1
+  */
+  IJth(J,8,7) = 2.0*x7;
+  IJth(J,8,8) = 2.0*x8;
+
+  
+  /*
+    Lower bounds ( l_i = 1 + x_i >= 0)
+    l_i - 1.0 - x_i
+   */
+
+  for(i=1;i<=8;i++) {
+    IJth(J,8+i,i)   = -1.0;
+    IJth(J,8+i,8+i) =  1.0;
+  }
+
+  /*
+    Upper bounds ( u_i = 1 - x_i >= 0)
+    u_i - 1.0 + x_i
+   */
+
+  for(i=1;i<=8;i++) {
+    IJth(J,16+i,i)    = 1.0;
+    IJth(J,16+i,16+i) = 1.0;
+  }
+
+  return(0);
+
+}
+
+/* 
+ * Print solution
+ */
+
+static void PrintOutput(N_Vector y)
+{
+  int i;
+
+  printf("     l=x+1          x         u=1-x\n");
+  printf("   ----------------------------------\n");
+
+  for(i=1; i<=NVAR; i++) {
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %10.6Lg   %10.6Lg   %10.6Lg\n", 
+           Ith(y,i+NVAR), Ith(y,i), Ith(y,i+2*NVAR));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %10.6g   %10.6g   %10.6g\n", 
+           Ith(y,i+NVAR), Ith(y,i), Ith(y,i+2*NVAR));
+#else
+    printf(" %10.6g   %10.6g   %10.6g\n", 
+           Ith(y,i+NVAR), Ith(y,i), Ith(y,i+2*NVAR));
+#endif
+
+  }
+
+}
+
+/* 
+ * Print final statistics
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe, nje, nfeD;
+  int flag;
+  
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1);
+
+  flag = KINDlsGetNumJacEvals(kmem, &nje);
+  check_flag(&flag, "KINDlsGetNumJacEvals", 1);
+  flag = KINDlsGetNumFuncEvals(kmem, &nfeD);
+  check_flag(&flag, "KINDlsGetNumFuncEvals", 1);
+
+  printf("\nFinal Statistics.. \n");
+  printf("nni    = %5ld    nfe   = %5ld \n", nni, nfe);
+  printf("nje    = %5ld    nfeD  = %5ld \n", nje, nfeD);
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr,
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/serial/kinRoboKin_dns.out b/examples/kinsol/serial/kinRoboKin_dns.out
new file mode 100644
index 0000000..28ed6a2
--- /dev/null
+++ b/examples/kinsol/serial/kinRoboKin_dns.out
@@ -0,0 +1,32 @@
+
+Robot Kinematics Example
+8 variables; -1 <= x_i <= 1
+KINSOL problem size: 8 + 2*8 = 24 
+
+Initial guess:
+     l=x+1          x         u=1-x
+   ----------------------------------
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+
+Computed solution:
+     l=x+1          x         u=1-x
+   ----------------------------------
+    1.67155     0.671554     0.328446
+    1.74096     0.740955     0.259045
+    1.95189     0.951893    0.0481072
+   0.693569    -0.306431      1.30643
+    1.96381     0.963811    0.0361892
+   0.733413    -0.266587      1.26659
+    1.40464     0.404641     0.595359
+    1.91448     0.914475    0.0855246
+
+Final Statistics.. 
+nni    =     6    nfe   =     7 
+nje    =     6    nfeD  =     0 
diff --git a/examples/kinsol/serial/kinRoboKin_slu.c b/examples/kinsol/serial/kinRoboKin_slu.c
new file mode 100644
index 0000000..4e3a8b1
--- /dev/null
+++ b/examples/kinsol/serial/kinRoboKin_slu.c
@@ -0,0 +1,614 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4834 $
+ * $Date: 2016-08-01 16:59:05 -0700 (Mon, 01 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol S. Woodward @ LLNL.  Adapted from the file
+ *    kinRoboKin_dns.c by Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * This example solves a nonlinear system from robot kinematics.
+ *
+ * Source: "Handbook of Test Problems in Local and Global Optimization",
+ *             C.A. Floudas, P.M. Pardalos et al.
+ *             Kluwer Academic Publishers, 1999.
+ * Test problem 6 from Section 14.1, Chapter 14
+ * 
+ * The nonlinear system is solved by KINSOL using the SUPERLU_MT linear
+ * solver.
+ *
+ * Constraints are imposed to make all components of the solution
+ * be within [-1,1].
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <kinsol/kinsol.h>
+#include <kinsol/kinsol_superlumt.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+/* Problem Constants */
+
+#define NVAR  8              /* variables */ 
+#define NEQ   3*NVAR         /* equations + bounds */
+
+#define FTOL   RCONST(1.e-5) /* function tolerance */
+#define STOL   RCONST(1.e-5) /* step tolerance */
+
+#define ZERO  RCONST(0.0)
+#define ONE   RCONST(1.0)
+#define TWO   RCONST(2.0)
+
+#define Ith(v,i)    NV_Ith_S(v,i-1)
+
+static int func(N_Vector y, N_Vector f, void *user_data);
+static int jac(N_Vector y, N_Vector f,
+               SlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2);
+static void PrintOutput(N_Vector y);
+static void PrintFinalStats(void *kmem);
+static int check_flag(void *flagvalue, const char *funcname, int opt);
+
+/*
+ *--------------------------------------------------------------------
+ * MAIN PROGRAM
+ *--------------------------------------------------------------------
+ */
+
+int main()
+{
+  realtype fnormtol, scsteptol;
+  N_Vector y, scale, constraints;
+  int mset, flag, i;
+  void *kmem;
+
+  int nnz, num_threads;
+
+  y = scale = constraints = NULL;
+  kmem = NULL;
+
+  printf("\nRobot Kinematics Example\n");
+  printf("8 variables; -1 <= x_i <= 1\n");
+  printf("KINSOL problem size: 8 + 2*8 = 24 \n\n");
+
+  /* Create vectors for solution, scales, and constraints */
+
+  y = N_VNew_Serial(NEQ);
+  if (check_flag((void *)y, "N_VNew_Serial", 0)) return(1);
+
+  scale = N_VNew_Serial(NEQ);
+  if (check_flag((void *)scale, "N_VNew_Serial", 0)) return(1);
+
+  constraints = N_VNew_Serial(NEQ);
+  if (check_flag((void *)constraints, "N_VNew_Serial", 0)) return(1);
+
+  /* Initialize and allocate memory for KINSOL */
+
+  kmem = KINCreate();
+  if (check_flag((void *)kmem, "KINCreate", 0)) return(1);
+
+  flag = KINInit(kmem, func, y); /* y passed as a template */
+  if (check_flag(&flag, "KINInit", 1)) return(1);
+
+  /* Set optional inputs */
+
+  N_VConst_Serial(ZERO,constraints);
+  for (i = NVAR+1; i <= NEQ; i++) Ith(constraints, i) = ONE;
+  
+  flag = KINSetConstraints(kmem, constraints);
+  if (check_flag(&flag, "KINSetConstraints", 1)) return(1);
+
+  fnormtol  = FTOL; 
+  flag = KINSetFuncNormTol(kmem, fnormtol);
+  if (check_flag(&flag, "KINSetFuncNormTol", 1)) return(1);
+
+  scsteptol = STOL;
+  flag = KINSetScaledStepTol(kmem, scsteptol);
+  if (check_flag(&flag, "KINSetScaledStepTol", 1)) return(1);
+
+  /* Attach SuperLU_MT linear solver */
+  /* Set the number of nonzeros in the Jacobian */
+  nnz = 56;
+  /* Set the number fo threads to use */
+  num_threads = 2;
+  flag = KINSuperLUMT(kmem, num_threads, NEQ, nnz);
+  if (check_flag(&flag, "KINSuperLUMT", 1)) return(1);
+
+  flag = KINSlsSetSparseJacFn(kmem, jac);
+  if (check_flag(&flag, "KINSlsSetSparseJacFn", 1)) return(1);
+
+  /* Indicate exact Newton */
+
+  mset = 1;
+  flag = KINSetMaxSetupCalls(kmem, mset);
+  if (check_flag(&flag, "KINSetMaxSetupCalls", 1)) return(1);
+
+  /* Initial guess */
+
+  N_VConst_Serial(ONE, y);
+  for(i = 1; i <= NVAR; i++) Ith(y,i) = SUNRsqrt(TWO)/TWO;
+
+  printf("Initial guess:\n");
+  PrintOutput(y);
+
+  /* Call KINSol to solve problem */
+
+  N_VConst_Serial(ONE,scale);
+  flag = KINSol(kmem,           /* KINSol memory block */
+                y,              /* initial guess on input; solution vector */
+                KIN_LINESEARCH, /* global strategy choice */
+                scale,          /* scaling vector, for the variable cc */
+                scale);         /* scaling vector for function values fval */
+  if (check_flag(&flag, "KINSol", 1)) return(1);
+
+  printf("\nComputed solution:\n");
+  PrintOutput(y);
+
+  /* Print final statistics and free memory */  
+
+  PrintFinalStats(kmem);
+
+  N_VDestroy_Serial(y);
+  N_VDestroy_Serial(scale);
+  N_VDestroy_Serial(constraints);
+  KINFree(&kmem);
+
+  return(0);
+}
+
+/* 
+ * System function 
+ */
+
+static int func(N_Vector y, N_Vector f, void *user_data)
+{
+  realtype *yd, *fd;
+
+  realtype x1, x2, x3, x4, x5, x6, x7, x8;
+  realtype l1, l2, l3, l4, l5, l6, l7, l8;
+  realtype u1, u2, u3, u4, u5, u6, u7, u8;
+
+  realtype eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8;
+  realtype lb1, lb2, lb3, lb4, lb5, lb6, lb7, lb8;
+  realtype ub1, ub2, ub3, ub4, ub5, ub6, ub7, ub8;
+
+  yd = N_VGetArrayPointer_Serial(y);
+  fd = N_VGetArrayPointer_Serial(f);
+
+  x1 = yd[0]; l1 = yd[ 8]; u1 = yd[16]; 
+  x2 = yd[1]; l2 = yd[ 9]; u2 = yd[17]; 
+  x3 = yd[2]; l3 = yd[10]; u3 = yd[18]; 
+  x4 = yd[3]; l4 = yd[11]; u4 = yd[19]; 
+  x5 = yd[4]; l5 = yd[12]; u5 = yd[20]; 
+  x6 = yd[5]; l6 = yd[13]; u6 = yd[21]; 
+  x7 = yd[6]; l7 = yd[14]; u7 = yd[22]; 
+  x8 = yd[7]; l8 = yd[15]; u8 = yd[23]; 
+
+  /* Nonlinear equations */
+
+  eq1 = - 0.1238*x1 + x7 - 0.001637*x2 
+    - 0.9338*x4 + 0.004731*x1*x3 - 0.3578*x2*x3 - 0.3571;
+  eq2 = 0.2638*x1 - x7 - 0.07745*x2 
+    - 0.6734*x4 + 0.2238*x1*x3 + 0.7623*x2*x3 - 0.6022;
+  eq3 = 0.3578*x1 + 0.004731*x2 + x6*x8;
+  eq4 = - 0.7623*x1 + 0.2238*x2 + 0.3461;
+  eq5 = x1*x1 + x2*x2 - 1;
+  eq6 = x3*x3 + x4*x4 - 1;
+  eq7 = x5*x5 + x6*x6 - 1;
+  eq8 = x7*x7 + x8*x8 - 1;
+
+  /* Lower bounds ( l_i = 1 + x_i >= 0)*/
+
+  lb1 = l1 - 1.0 - x1;
+  lb2 = l2 - 1.0 - x2;
+  lb3 = l3 - 1.0 - x3;
+  lb4 = l4 - 1.0 - x4;
+  lb5 = l5 - 1.0 - x5;
+  lb6 = l6 - 1.0 - x6;
+  lb7 = l7 - 1.0 - x7;
+  lb8 = l8 - 1.0 - x8;
+
+  /* Upper bounds ( u_i = 1 - x_i >= 0)*/
+
+  ub1 = u1 - 1.0 + x1;
+  ub2 = u2 - 1.0 + x2;
+  ub3 = u3 - 1.0 + x3;
+  ub4 = u4 - 1.0 + x4;
+  ub5 = u5 - 1.0 + x5;
+  ub6 = u6 - 1.0 + x6;
+  ub7 = u7 - 1.0 + x7;
+  ub8 = u8 - 1.0 + x8;
+
+  fd[0] = eq1; fd[ 8] = lb1; fd[16] = ub1;
+  fd[1] = eq2; fd[ 9] = lb2; fd[17] = ub2;
+  fd[2] = eq3; fd[10] = lb3; fd[18] = ub3;
+  fd[3] = eq4; fd[11] = lb4; fd[19] = ub4;
+  fd[4] = eq5; fd[12] = lb5; fd[20] = ub5;
+  fd[5] = eq6; fd[13] = lb6; fd[21] = ub6;
+  fd[6] = eq7; fd[14] = lb7; fd[22] = ub7;
+  fd[7] = eq8; fd[15] = lb8; fd[23] = ub8;
+
+  return(0);
+}
+
+/*
+ * System Jacobian
+ */
+
+static int jac(N_Vector y, N_Vector f,
+               SlsMat J, void *user_data,
+               N_Vector tmp1, N_Vector tmp2)
+{
+  realtype *yd;
+  realtype x1, x2, x3, x4, x5, x6, x7, x8;
+  int *colptrs = *J->colptrs;
+  int *rowvals = *J->rowvals;
+  realtype *data = J->data;
+
+  yd = N_VGetArrayPointer_Serial(y);
+
+  x1 = yd[0];
+  x2 = yd[1];
+  x3 = yd[2];
+  x4 = yd[3];
+  x5 = yd[4];
+  x6 = yd[5];
+  x7 = yd[6];
+  x8 = yd[7];
+
+  SparseSetMatToZero(J);
+  
+  colptrs[0] = 0;
+  colptrs[1] = 7;
+  colptrs[2] = 14;
+  colptrs[3] = 19;
+  colptrs[4] = 24;
+  colptrs[5] = 27;
+  colptrs[6] = 31;
+  colptrs[7] = 36;
+  colptrs[8] = 40;
+  colptrs[9] = 41;
+  colptrs[10] = 42;
+  colptrs[11] = 43;
+  colptrs[12] = 44;
+  colptrs[13] = 45;
+  colptrs[14] = 46;
+  colptrs[15] = 47;
+  colptrs[16] = 48;
+  colptrs[17] = 49;
+  colptrs[18] = 50;
+  colptrs[19] = 51;
+  colptrs[20] = 52;
+  colptrs[21] = 53;
+  colptrs[22] = 54;
+  colptrs[23] = 55;
+  colptrs[24] = 56;
+
+  /* Nonlinear equations */
+
+  /* 
+     - 0.1238*x1 + x7 - 0.001637*x2 
+     - 0.9338*x4 + 0.004731*x1*x3 - 0.3578*x2*x3 - 0.3571 
+  */
+  /*
+  IJth(J,1,1) = - 0.1238 + 0.004731*x3;
+  IJth(J,1,2) = - 0.001637 - 0.3578*x3;
+  IJth(J,1,3) = 0.004731*x1 - 0.3578*x2;
+  IJth(J,1,4) = - 0.9338;
+  IJth(J,1,7) = 1.0;
+  */
+
+  J->data[0] = - 0.1238 + 0.004731*x3;
+  rowvals[0] = 0;
+  J->data[7] = - 0.001637 - 0.3578*x3;
+  rowvals[7] = 0;
+  J->data[14] = 0.004731*x1 - 0.3578*x2;
+  rowvals[14] = 0;
+  J->data[19] = - 0.9338;
+  rowvals[19] = 0;
+  J->data[31] = 1.0;
+  rowvals[31] = 0;
+
+  /*
+    0.2638*x1 - x7 - 0.07745*x2 
+    - 0.6734*x4 + 0.2238*x1*x3 + 0.7623*x2*x3 - 0.6022
+  */
+  /*
+  IJth(J,2,1) = 0.2638 + 0.2238*x3;
+  IJth(J,2,2) = - 0.07745 + 0.7623*x3;
+  IJth(J,2,3) = 0.2238*x1 + 0.7623*x2;
+  IJth(J,2,4) = - 0.6734;
+  IJth(J,2,7) = -1.0;
+  */
+
+  J->data[1] = 0.2638 + 0.2238*x3;
+  rowvals[1] = 1;
+  J->data[8] = - 0.07745 + 0.7623*x3;
+  rowvals[8] = 1;
+  J->data[15] = 0.2238*x1 + 0.7623*x2;
+  rowvals[15] = 1;
+  J->data[20] = - 0.6734;
+  rowvals[20] = 1;
+  J->data[32] = -1.0;
+  rowvals[32] = 1;
+
+
+  /*
+    0.3578*x1 + 0.004731*x2 + x6*x8
+  */
+  /*
+  IJth(J,3,1) = 0.3578;
+  IJth(J,3,2) = 0.004731;
+  IJth(J,3,6) = x8;
+  IJth(J,3,8) = x6;
+  */
+
+  J->data[2] = 0.3578;
+  rowvals[2] = 2;
+  J->data[9] = 0.004731;
+  rowvals[9] = 2;
+  J->data[27] = x8;
+  rowvals[27] = 2;
+  J->data[36] = x6;
+  rowvals[36] = 2;
+
+
+  /*
+    - 0.7623*x1 + 0.2238*x2 + 0.3461
+  */
+  /*
+  IJth(J,4,1) = - 0.7623;
+  IJth(J,4,2) = 0.2238;
+  */
+
+  J->data[3] = - 0.7623;
+  rowvals[3] = 3;
+  J->data[10] = 0.2238;
+  rowvals[10] = 3;
+
+  /*
+    x1*x1 + x2*x2 - 1
+  */
+  /*
+  IJth(J,5,1) = 2.0*x1;
+  IJth(J,5,2) = 2.0*x2;
+  */
+
+  J->data[4] = 2.0*x1;
+  rowvals[4] = 4;
+  J->data[11] = 2.0*x2;
+  rowvals[11] = 4;
+
+  /*
+    x3*x3 + x4*x4 - 1
+  */
+  /*
+  IJth(J,6,3) = 2.0*x3;
+  IJth(J,6,4) = 2.0*x4;
+  */
+
+  J->data[16] = 2.0*x3;
+  rowvals[16] = 5;
+  J->data[21] = 2.0*x4;
+  rowvals[21] = 5;
+
+  /*
+    x5*x5 + x6*x6 - 1
+  */
+  /*
+  IJth(J,7,5) = 2.0*x5;
+  IJth(J,7,6) = 2.0*x6;
+  */
+
+  J->data[24] = 2.0*x5;
+  rowvals[24] = 6;
+  J->data[28] = 2.0*x6;
+  rowvals[28] = 6;
+
+  /*
+    x7*x7 + x8*x8 - 1
+  */
+  /*
+  IJth(J,8,7) = 2.0*x7;
+  IJth(J,8,8) = 2.0*x8;
+  */
+  J->data[33] = 2.0*x7;
+  rowvals[33] = 7;
+  J->data[37] = 2.0*x8;
+  rowvals[37] = 7;
+
+  
+  /*
+    Lower bounds ( l_i = 1 + x_i >= 0)
+    l_i - 1.0 - x_i
+   */
+
+
+  /*
+  for(i=1;i<=8;i++) {
+    IJth(J,8+i,i)   = -1.0;
+    IJth(J,8+i,8+i) =  1.0;
+  } 
+  */
+
+  J->data[5] = -1.0;
+  rowvals[5] = 8;
+  J->data[12] = -1.0;
+  rowvals[12] = 9;
+  J->data[17] = -1.0;
+  rowvals[17] = 10;
+  J->data[22] = -1.0;
+  rowvals[22] = 11;
+  J->data[25] = -1.0;
+  rowvals[25] = 12;
+  J->data[29] = -1.0;
+  rowvals[29] = 13;
+  J->data[34] = -1.0;
+  rowvals[34] = 14;
+  J->data[38] = -1.0;
+  rowvals[38] = 15;
+
+  J->data[40] = 1.0;
+  rowvals[40] = 8;
+  J->data[41] = 1.0;
+  rowvals[41] = 9;
+  J->data[42] = 1.0;
+  rowvals[42] = 10;
+  J->data[43] = 1.0;
+  rowvals[43] = 11;
+  J->data[44] = 1.0;
+  rowvals[44] = 12;
+  J->data[45] = 1.0;
+  rowvals[45] = 13;
+  J->data[46] = 1.0;
+  rowvals[46] = 14;
+  J->data[47] = 1.0;
+  rowvals[47] = 15;
+
+
+  /*
+    Upper bounds ( u_i = 1 - x_i >= 0)
+    u_i - 1.0 + x_i
+   */
+  /*
+  for(i=1;i<=8;i++) {
+    IJth(J,16+i,i)    = 1.0;
+    IJth(J,16+i,16+i) = 1.0;
+  }
+  */
+
+  J->data[6] = 1.0;
+  rowvals[6] = 16;
+  J->data[13] = 1.0;
+  rowvals[13] = 17;
+  J->data[18] = 1.0;
+  rowvals[18] = 18;
+  J->data[23] = 1.0;
+  rowvals[23] = 19;
+  J->data[26] = 1.0;
+  rowvals[26] = 20;
+  J->data[30] = 1.0;
+  rowvals[30] = 21;
+  J->data[35] = 1.0;
+  rowvals[35] = 22;
+  J->data[39] = 1.0;
+  rowvals[39] = 23;
+
+  J->data[48] = 1.0;
+  rowvals[48] = 16;
+  J->data[49] = 1.0;
+  rowvals[49] = 17;
+  J->data[50] = 1.0;
+  rowvals[50] = 18;
+  J->data[51] = 1.0;
+  rowvals[51] = 19;
+  J->data[52] = 1.0;
+  rowvals[52] = 20;
+  J->data[53] = 1.0;
+  rowvals[53] = 21;
+  J->data[54] = 1.0;
+  rowvals[54] = 22;
+  J->data[55] = 1.0;
+  rowvals[55] = 23;
+
+  return(0);
+
+}
+
+/* 
+ * Print solution
+ */
+
+static void PrintOutput(N_Vector y)
+{
+  int i;
+
+  printf("     l=x+1          x         u=1-x\n");
+  printf("   ----------------------------------\n");
+
+  for(i=1; i<=NVAR; i++) {
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf(" %10.6Lg   %10.6Lg   %10.6Lg\n", 
+           Ith(y,i+NVAR), Ith(y,i), Ith(y,i+2*NVAR));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf(" %10.6g   %10.6g   %10.6g\n", 
+           Ith(y,i+NVAR), Ith(y,i), Ith(y,i+2*NVAR));
+#else
+    printf(" %10.6g   %10.6g   %10.6g\n", 
+           Ith(y,i+NVAR), Ith(y,i), Ith(y,i+2*NVAR));
+#endif
+
+  }
+
+}
+
+/* 
+ * Print final statistics
+ */
+
+static void PrintFinalStats(void *kmem)
+{
+  long int nni, nfe, nje;
+  int flag;
+  
+  flag = KINGetNumNonlinSolvIters(kmem, &nni);
+  check_flag(&flag, "KINGetNumNonlinSolvIters", 1);
+  flag = KINGetNumFuncEvals(kmem, &nfe);
+  check_flag(&flag, "KINGetNumFuncEvals", 1);
+
+  flag = KINSlsGetNumJacEvals(kmem, &nje);
+  check_flag(&flag, "KINSlsGetNumJacEvals", 1);
+
+  printf("\nFinal Statistics.. \n");
+  printf("nni    = %5ld    nfe   = %5ld \n", nni, nfe);
+  printf("nje    = %5ld \n", nje);
+}
+
+/*
+ * Check function return value...
+ *    opt == 0 means SUNDIALS function allocates memory so check if
+ *             returned NULL pointer
+ *    opt == 1 means SUNDIALS function returns a flag so check if
+ *             flag >= 0
+ *    opt == 2 means function allocates memory so check if returned
+ *             NULL pointer 
+ */
+
+static int check_flag(void *flagvalue, const char *funcname, int opt)
+{
+  int *errflag;
+
+  /* Check if SUNDIALS function returned NULL pointer - no memory allocated */
+  if (opt == 0 && flagvalue == NULL) {
+    fprintf(stderr, 
+            "\nSUNDIALS_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  /* Check if flag < 0 */
+  else if (opt == 1) {
+    errflag = (int *) flagvalue;
+    if (*errflag < 0) {
+      fprintf(stderr,
+              "\nSUNDIALS_ERROR: %s() failed with flag = %d\n\n",
+	      funcname, *errflag);
+      return(1); 
+    }
+  }
+
+  /* Check if function returned NULL pointer - no memory allocated */
+  else if (opt == 2 && flagvalue == NULL) {
+    fprintf(stderr,
+            "\nMEMORY_ERROR: %s() failed - returned NULL pointer\n\n",
+	    funcname);
+    return(1);
+  }
+
+  return(0);
+}
diff --git a/examples/kinsol/serial/kinRoboKin_slu.out b/examples/kinsol/serial/kinRoboKin_slu.out
new file mode 100644
index 0000000..0938b70
--- /dev/null
+++ b/examples/kinsol/serial/kinRoboKin_slu.out
@@ -0,0 +1,32 @@
+
+Robot Kinematics Example
+8 variables; -1 <= x_i <= 1
+KINSOL problem size: 8 + 2*8 = 24 
+
+Initial guess:
+     l=x+1          x         u=1-x
+   ----------------------------------
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+          1     0.707107            1
+
+Computed solution:
+     l=x+1          x         u=1-x
+   ----------------------------------
+    1.67155     0.671554     0.328446
+    1.74096     0.740955     0.259045
+    1.95189     0.951893    0.0481072
+   0.693569    -0.306431      1.30643
+    1.96381     0.963811    0.0361892
+   0.733413    -0.266587      1.26659
+    1.40464     0.404641     0.595359
+    1.91448     0.914475    0.0855246
+
+Final Statistics.. 
+nni    =     6    nfe   =     7 
+nje    =     6 
diff --git a/examples/nvector/C_openmp/CMakeLists.txt b/examples/nvector/C_openmp/CMakeLists.txt
new file mode 100644
index 0000000..9fca937
--- /dev/null
+++ b/examples/nvector/C_openmp/CMakeLists.txt
@@ -0,0 +1,120 @@
+# ---------------------------------------------------------------
+# $Revision: 4945 $
+# $Date: 2016-09-21 22:15:14 -0700 (Wed, 21 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Steven Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for nvector examples
+
+# Add variable nvector_openmp_examples with the names of the nvector examples
+
+SET(nvector_openmp_examples
+  test_nvector_openmp
+)
+
+SET(nvector_examples_dependencies
+  test_nvector
+  sundials_nvector
+)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(. ..)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecopenmp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecopenmp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+
+IF(OPENMP_FOUND)
+  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+  # Use C flags for linker as well.
+  SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+ENDIF(OPENMP_FOUND)
+
+# Add the build and install targets for each nvector example
+
+FOREACH(example ${nvector_openmp_examples})
+  ADD_EXECUTABLE(${example} ${example}.c ../test_nvector.c ../../../src/sundials/sundials_nvector.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+
+  SUNDIALS_ADD_TEST(${example}_1000_1_0 ${example} TEST_ARGS 1000 1 0)
+  SUNDIALS_ADD_TEST(${example}_1000_2_0 ${example} TEST_ARGS 1000 2 0)
+  SUNDIALS_ADD_TEST(${example}_1000_4_0 ${example} TEST_ARGS 1000 4 0)
+
+  SUNDIALS_ADD_TEST(${example}_10000_1_0 ${example} TEST_ARGS 10000 1 0)
+  SUNDIALS_ADD_TEST(${example}_10000_2_0 ${example} TEST_ARGS 10000 2 0)
+  SUNDIALS_ADD_TEST(${example}_10000_4_0 ${example} TEST_ARGS 10000 4 0)
+
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ../test_nvector.c ../test_nvector.h ../../../src/sundials/sundials_nvector.c DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/C_openmp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${nvector_openmp_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/C_openmp)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER_LIB "sundials_nvecopenmp")
+  LIST2STRING(nvector_openmp_examples EXAMPLES)
+  LIST2STRING(nvector_examples_dependencies EXAMPLES_DEPENDENCIES)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/C_openmp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/nvector/C_openmp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/C_openmp
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_openmp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/C_openmp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/nvector/C_openmp/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/C_openmp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/nvector/C_openmp/test_nvector_openmp.c b/examples/nvector/C_openmp/test_nvector_openmp.c
new file mode 100644
index 0000000..5319bcb
--- /dev/null
+++ b/examples/nvector/C_openmp/test_nvector_openmp.c
@@ -0,0 +1,160 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4790 $
+ * $Date: 2016-06-29 14:47:05 -0700 (Wed, 29 Jun 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): David J. Gardner @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the testing routine to check the open MP NVECTOR module
+ * implementation. 
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_types.h>
+#include <nvector/nvector_openmp.h>
+#include <sundials/sundials_math.h>
+#include "test_nvector.h"
+
+
+/* ----------------------------------------------------------------------
+ * Main NVector Testing Routine
+ * --------------------------------------------------------------------*/
+int main(int argc, char *argv[]) 
+{
+  int      fails = 0;            /* counter for test failures */
+  long int veclen;               /* vector length             */
+  N_Vector W, X, Y, Z;           /* test vectors              */
+  int      num_threads;
+  int      print_timing;
+
+  /* check input and set vector length */
+  if (argc < 4){
+    printf("ERROR: THREE (3) arguments required: <vector length> <number of threads> <print timing>\n");
+    return(-1);
+  }
+
+  veclen = atol(argv[1]); 
+  if (veclen <= 0) {
+    printf("ERROR: length of vector must be a positive integer \n");
+    return(-1); 
+  }
+
+  num_threads = atoi(argv[2]);
+  if (num_threads <= 0) {
+    printf("ERROR: numbber of threads must be a positive integer \n");
+    return(-1); 
+  }
+
+  print_timing = atoi(argv[3]);
+  SetTiming(print_timing);
+
+  printf("\nRunning with vector length %ld \n \n", veclen);
+  printf("\nRunning with number of threads %d \n \n", num_threads);
+
+  /* Create vectors */
+  W = N_VNewEmpty_OpenMP(veclen, num_threads);
+  X = N_VNew_OpenMP(veclen, num_threads);
+  Y = N_VNew_OpenMP(veclen, num_threads);
+  Z = N_VNew_OpenMP(veclen, num_threads);
+
+  if(N_VGetVectorID(W) == SUNDIALS_NVEC_OPENMP) {
+    /*printf("Testing OpenMP variant of N_Vector...\n");*/
+  }
+  
+  /* NVector Tests */
+  fails += Test_N_VSetArrayPointer(W, veclen, 0);
+  fails += Test_N_VGetArrayPointer(X, veclen, 0);
+  fails += Test_N_VLinearSum(X, Y, Z, veclen, 0);
+  fails += Test_N_VConst(X, veclen, 0);
+  fails += Test_N_VProd(X, Y, Z, veclen, 0);
+  fails += Test_N_VDiv(X, Y, Z, veclen, 0);
+  fails += Test_N_VScale(X, Z, veclen, 0);
+  fails += Test_N_VAbs(X, Z, veclen, 0);
+  fails += Test_N_VInv(X, Z, veclen, 0);
+  fails += Test_N_VAddConst(X, Z, veclen, 0);
+  fails += Test_N_VDotProd(X, Y, veclen, veclen, 0);
+  fails += Test_N_VMaxNorm(X, veclen, 0);
+  fails += Test_N_VWrmsNorm(X, Y, veclen, 0);
+  fails += Test_N_VWrmsNormMask(X, Y, Z, veclen, veclen, 0);
+  fails += Test_N_VMin(X, veclen, 0);
+  fails += Test_N_VWL2Norm(X, Y, veclen, veclen, 0);
+  fails += Test_N_VL1Norm(X, veclen, veclen, 0);
+  fails += Test_N_VCompare(X, Z, veclen, 0);
+  fails += Test_N_VInvTest(X, Z, veclen, 0);
+  fails += Test_N_VConstrMask(X, Y, Z, veclen, 0);
+  fails += Test_N_VMinQuotient(X, Y, veclen, 0);
+  fails += Test_N_VCloneVectorArray(5, X, veclen, 0);
+  fails += Test_N_VCloneEmptyVectorArray(5, X, 0);
+  fails += Test_N_VCloneEmpty(X, 0);
+  fails += Test_N_VClone(X, veclen, 0);
+
+  /* Free vectors */
+  N_VDestroy_OpenMP(W);
+  N_VDestroy_OpenMP(X);
+  N_VDestroy_OpenMP(Y);
+  N_VDestroy_OpenMP(Z);
+
+  /* Print results */
+  if (fails) {
+    printf("FAIL: NVector module failed %i tests \n \n", fails);
+  } else {
+    printf("SUCCESS: NVector module passed all tests \n \n");
+  }
+
+  return(0);
+}
+
+/* ----------------------------------------------------------------------
+ * Check vector
+ * --------------------------------------------------------------------*/
+int check_ans(realtype ans, N_Vector X, long int local_length)
+{
+  int      failure = 0;
+  long int i;
+  realtype *Xdata;
+  
+  Xdata = N_VGetArrayPointer(X);
+
+  /* check vector data */
+  for(i=0; i < local_length; i++){
+    failure += FNEQ(Xdata[i], ans);
+  }
+
+  if (failure > ZERO)
+    return(1);
+  else
+    return(0);
+}
+
+booleantype has_data(N_Vector X)
+{
+  realtype *Xdata = N_VGetArrayPointer(X);
+  if (Xdata == NULL)
+    return FALSE;
+  else
+    return TRUE;
+}
+
+void set_element(N_Vector X, long int i, realtype val)
+{
+  NV_Ith_OMP(X,i) = val;
+}
+ 
+realtype get_element(N_Vector X, long int i)
+{
+  return NV_Ith_OMP(X,i);
+}
+
diff --git a/examples/nvector/parallel/CMakeLists.txt b/examples/nvector/parallel/CMakeLists.txt
new file mode 100644
index 0000000..4f37514
--- /dev/null
+++ b/examples/nvector/parallel/CMakeLists.txt
@@ -0,0 +1,131 @@
+# ---------------------------------------------------------------
+# $Revision: 4456 $
+# $Date: 2015-03-28 20:22:03 -0700 (Sat, 28 Mar 2015) $
+# ---------------------------------------------------------------
+# Programmer:  Steven Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for nvector examples
+
+# Add variable nvector_parallel_examples with the names of the nvector examples
+
+SET(nvector_parallel_examples
+  test_nvector_mpi
+)
+
+SET(nvector_examples_dependencies
+  test_nvector
+  sundials_nvector
+)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(. ..)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecparallel_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecparallel_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+  TARGET_LINK_LIBRARIES(${example} MPI_LIBRARIES)
+ENDIF(MPI_MPICC)
+
+# Add the build and install targets for each nvector example
+
+FOREACH(example ${nvector_parallel_examples})
+
+  ADD_EXECUTABLE(${example} ${example}.c ../test_nvector.c ../../../src/sundials/sundials_nvector.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+
+  # Run sequentially
+  SUNDIALS_ADD_TEST("${example}" ${example})
+
+  # Run sequentially with arguments
+  SUNDIALS_ADD_TEST("${example}_1000_0" ${example} TEST_ARGS 1000 0)
+
+  # Run in parallel on 4 procs
+  SUNDIALS_ADD_TEST("${example}_4" ${example} MPI_NPROCS 4)
+  
+  # Parallel with additional arguments and supplying an answer file
+  SUNDIALS_ADD_TEST("${example}_4_1000_0" ${example} MPI_NPROCS 4 TEST_ARGS 1000 0 ANSWER_FILE ${example})
+
+  # Specify floating point precision and integer percentage for comparison
+  SUNDIALS_ADD_TEST("${example}_precision" ${example} MPI_NPROCS 4 TEST_ARGS 1000 0 ANSWER_FILE ${example}
+    FLOAT_PRECISION 5 INTEGER_PERCENTAGE 0)
+  
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ../test_nvector.c ../test_nvector.h ../../../src/sundials/sundials_nvector.c DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/parallel)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${nvector_parallel_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/parallel)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER_LIB "sundials_nvecparallel")
+  LIST2STRING(nvector_parallel_examples EXAMPLES)
+  LIST2STRING(nvector_examples_dependencies EXAMPLES_DEPENDENCIES)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/parallel/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/nvector/parallel/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/parallel
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parallel_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/parallel/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/nvector/parallel/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/parallel
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/nvector/parallel/test_nvector_mpi.c b/examples/nvector/parallel/test_nvector_mpi.c
new file mode 100644
index 0000000..c6535f2
--- /dev/null
+++ b/examples/nvector/parallel/test_nvector_mpi.c
@@ -0,0 +1,153 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4790 $
+ * $Date: 2016-06-29 14:47:05 -0700 (Wed, 29 Jun 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): David J. Gardner @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the testing routine to check the NVECTOR Parallel module 
+ * implementation. 
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_types.h>
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_math.h>
+#include "test_nvector.h"
+
+#include <mpi.h>
+
+
+/* local vector length */
+#define VECLEN 10000
+
+/* ----------------------------------------------------------------------
+ * Main NVector Testing Routine
+ * --------------------------------------------------------------------*/
+int main(int argc, char *argv[]) 
+{
+  int      fails = 0;                   /* counter for test failures */
+  long int local_length, global_length; /* vector lengths            */
+  N_Vector W, X, Y, Z;                  /* test vectors              */
+  MPI_Comm comm;                        /* MPI Communicator          */
+  int      nprocs, myid;                /* Number of procs, proc id  */
+
+  /* Get processor number and total number of processes */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &nprocs);
+  MPI_Comm_rank(comm, &myid);
+
+  /* set local and global lengths */
+  local_length = VECLEN;
+  global_length = nprocs*local_length;
+
+  /* Create vectors */
+  W = N_VNewEmpty_Parallel(comm, local_length, global_length);
+  X = N_VNew_Parallel(comm, local_length, global_length);
+  Y = N_VNew_Parallel(comm, local_length, global_length);
+  Z = N_VNew_Parallel(comm, local_length, global_length);
+
+  if(N_VGetVectorID(W) == SUNDIALS_NVEC_PARALLEL && myid == 0) {
+    /*printf("Testing parallel (MPI) variant of N_Vector...\n");*/
+  }
+
+  /* NVector Test */
+  fails += Test_N_VSetArrayPointer(W, local_length, myid);
+  fails += Test_N_VGetArrayPointer(X, local_length, myid);
+  fails += Test_N_VLinearSum(X, Y, Z, local_length, myid);
+  fails += Test_N_VConst(X, local_length, myid);
+  fails += Test_N_VProd(X, Y, Z, local_length, myid);
+  fails += Test_N_VDiv(X, Y, Z, local_length, myid);
+  fails += Test_N_VScale(X, Z, local_length, myid);
+  fails += Test_N_VAbs(X, Z, local_length, myid);
+  fails += Test_N_VInv(X, Z, local_length, myid);
+  fails += Test_N_VAddConst(X, Z, local_length, myid);
+  fails += Test_N_VDotProd(X, Y, local_length, global_length, myid);
+  fails += Test_N_VMaxNorm(X, local_length, myid);
+  fails += Test_N_VWrmsNorm(X, Y, local_length, myid);
+  fails += Test_N_VWrmsNormMask(X, Y, Z, local_length, global_length, myid);
+  fails += Test_N_VMin(X, local_length, myid);
+  fails += Test_N_VWL2Norm(X, Y, local_length, global_length, myid);
+  fails += Test_N_VL1Norm(X, local_length, global_length, myid);
+  fails += Test_N_VCompare(X, Z, local_length, myid);
+  fails += Test_N_VInvTest(X, Z, local_length, myid);
+  fails += Test_N_VConstrMask(X, Y, Z, local_length, myid);
+  fails += Test_N_VMinQuotient(X, Y, local_length, myid);
+  fails += Test_N_VCloneVectorArray(5, X, local_length, myid);
+  fails += Test_N_VCloneEmptyVectorArray(5, X, myid);
+  fails += Test_N_VCloneEmpty(X, myid);
+  fails += Test_N_VClone(X, local_length, myid);
+
+  /* Free vectors */
+  N_VDestroy_Parallel(W);
+  N_VDestroy_Parallel(X);
+  N_VDestroy_Parallel(Y);
+  N_VDestroy_Parallel(Z);
+
+  /* Print result */
+  if (fails) {
+    printf("FAIL: NVector module failed %i tests, Proc %d \n \n", fails, myid);
+  } else {
+     if(myid == 0) {
+	printf("SUCCESS: NVector module passed all tests, Proc %d \n \n",myid);
+     }
+  }
+  
+  MPI_Finalize();
+  return(0);
+}
+
+/* ----------------------------------------------------------------------
+ * Check vector
+ * --------------------------------------------------------------------*/
+int check_ans(realtype ans, N_Vector X, long int local_length)
+{
+  int      failure = 0;
+  long int i;
+  realtype *Xdata;
+  
+  Xdata = N_VGetArrayPointer(X);
+
+  /* check vector data */
+  for(i=0; i < local_length; i++){
+    failure += FNEQ(Xdata[i], ans);
+  }
+
+  if (failure > ZERO)
+    return(1);
+  else
+    return(0);
+}
+
+booleantype has_data(N_Vector X)
+{
+  realtype *Xdata = N_VGetArrayPointer(X);
+  if (Xdata == NULL)
+    return FALSE;
+  else
+    return TRUE;
+}
+
+void set_element(N_Vector X, long int i, realtype val)
+{
+  NV_Ith_P(X,i) = val;    
+}
+
+realtype get_element(N_Vector X, long int i)
+{
+  return NV_Ith_P(X,i);    
+}
diff --git a/examples/nvector/parhyp/CMakeLists.txt b/examples/nvector/parhyp/CMakeLists.txt
new file mode 100644
index 0000000..ad687bb
--- /dev/null
+++ b/examples/nvector/parhyp/CMakeLists.txt
@@ -0,0 +1,136 @@
+# ---------------------------------------------------------------
+# $Revision: 4456 $
+# $Date: 2015-03-28 20:22:03 -0700 (Sat, 28 Mar 2015) $
+# ---------------------------------------------------------------
+# Programmer:  Steven Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for nvector examples
+
+# Add variable nvector_parhyp_examples with the names of the nvector examples
+
+SET(nvector_parhyp_examples
+  test_nvector_parhyp
+)
+
+SET(nvector_examples_dependencies
+  test_nvector
+  sundials_nvector
+)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(. ..)
+INCLUDE_DIRECTORIES(${HYPRE_INC_PATH})
+INCLUDE_DIRECTORIES(${HYPRE_INC_DIR})
+INCLUDE_DIRECTORIES(${HYPRE_LIB_DIR})
+  
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecparhyp_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecparhyp_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+SET(SUNDIALS_LIBS ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+SET(HYPRE_LIBS ${HYPRE_LIBRARIES})
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+  TARGET_LINK_LIBRARIES(${example} MPI_LIBRARIES)
+ENDIF(MPI_MPICC)
+
+# Add the build and install targets for each nvector example
+
+FOREACH(example ${nvector_parhyp_examples})
+
+  ADD_EXECUTABLE(${example} ${example}.c ../test_nvector.c ../../../src/sundials/sundials_nvector.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+
+  # Run sequentially
+  SUNDIALS_ADD_TEST("${example}" ${example})
+
+  # Run sequentially with arguments
+  SUNDIALS_ADD_TEST("${example}_10000_0" ${example} TEST_ARGS 10000 0)
+
+  # Run in parhyp on 4 procs
+  SUNDIALS_ADD_TEST("${example}_4" ${example} MPI_NPROCS 4)
+  
+  # parhyp with additional arguments and supplying an answer file
+  SUNDIALS_ADD_TEST("${example}_4_10000_0" ${example} MPI_NPROCS 4 TEST_ARGS 10000 0 ANSWER_FILE ${example})
+
+  # Specify floating point precision and integer percentage for comparison
+  SUNDIALS_ADD_TEST("${example}_precision" ${example} MPI_NPROCS 4 TEST_ARGS 10000 0 ANSWER_FILE ${example}
+    FLOAT_PRECISION 5 INTEGER_PERCENTAGE 0)
+
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  
+  TARGET_LINK_LIBRARIES(${example} ${HYPRE_LIBRARIES})
+  
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ../test_nvector.c ../test_nvector.h ../../../src/sundials/sundials_nvector.c DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/parhyp)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${nvector_parhyp_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/parhyp)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER_LIB "sundials_nvecparhyp")
+  LIST2STRING(nvector_parhyp_examples EXAMPLES)
+  LIST2STRING(nvector_examples_dependencies EXAMPLES_DEPENDENCIES)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_parhyp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/parhyp/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/nvector/parhyp/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/parhyp
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_parhyp_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/parhyp/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/nvector/parhyp/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/parhyp
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/nvector/parhyp/test_nvector_parhyp.c b/examples/nvector/parhyp/test_nvector_parhyp.c
new file mode 100644
index 0000000..adf9ee3
--- /dev/null
+++ b/examples/nvector/parhyp/test_nvector_parhyp.c
@@ -0,0 +1,315 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4137 $
+ * $Date: 2014-06-15 12:26:15 -0700 (Sun, 15 Jun 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Slaven Peles @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the testing routine to check the NVECTOR Parallel module 
+ * implementation. 
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_types.h>
+#include <nvector/nvector_parhyp.h>
+#include <sundials/sundials_math.h>
+#include "test_nvector.h"
+
+#include <mpi.h>
+#include <omp.h>
+
+#if defined( SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS)
+#include <time.h>
+#include <unistd.h>
+#endif
+
+/* default local vector length */
+#define VECLEN 5000
+
+
+static int Test_N_VMake(HYPRE_ParVector W, int myid);
+static int Test_N_VGetVectorID(N_Vector W, int myid);
+
+/* ----------------------------------------------------------------------
+ * Main NVector Testing Routine
+ * --------------------------------------------------------------------*/
+int main(int argc, char *argv[]) 
+{
+  int      fails = 0;                   /* counter for test failures */
+  long int local_length, global_length; /* vector lengths            */
+  N_Vector W;
+  N_Vector X, Y, Z;                     /* test vectors              */
+  MPI_Comm comm;                        /* MPI Communicator          */
+  int      nprocs, myid;                /* Number of procs, proc id  */
+  long int veclen;                      /* vector length             */
+  int      print_timing;
+  HYPRE_Int *partitioning;      /* Vector Partitioning */
+  HYPRE_ParVector Xhyp;         /* Instantiate hypre parallel vector */
+
+  /* check input and set vector length */
+  if (argc < 3) {
+    SetTiming(0);
+  } else {
+   print_timing = atoi(argv[2]);
+   SetTiming(print_timing);
+  }
+  
+  if (argc < 2) {
+    veclen = VECLEN;
+  } else {
+    veclen = atol(argv[1]); 
+    if (veclen <= 0) {
+      printf("ERROR: length of vector must be a positive integer \n");
+      return(-1); 
+    }
+  }
+
+  /* printf("\nRunning with vector length %ld \n \n", veclen); */
+  /* Get processor number and total number of processes */
+  MPI_Init(&argc, &argv);
+  /* omp_set_num_threads(4); */
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &nprocs);
+  MPI_Comm_rank(comm, &myid);
+
+  /* set partitioning */
+  local_length = veclen;
+  global_length = nprocs*local_length;
+  if(HYPRE_AssumedPartitionCheck()) {
+    partitioning = (HYPRE_Int*) malloc(2*sizeof(HYPRE_Int));
+    partitioning[0] = myid*local_length;
+    partitioning[1] = (myid+1)*local_length;
+  } else {
+    partitioning = (HYPRE_Int*) malloc((nprocs+1)*sizeof(HYPRE_Int));
+    if (veclen <= 0) {
+      printf("Using global partition.\n");
+      printf("I don't do this stuff. Now exiting...\n");
+      return -1;
+    }
+  }
+  /* Create template hypre vector */
+  HYPRE_ParVectorCreate(comm, global_length, partitioning, &Xhyp);
+  HYPRE_ParVectorInitialize(Xhyp);
+
+  /* Create empty vector */
+  W = N_VNewEmpty_ParHyp(comm, local_length, global_length);
+
+  /* NVector Test */
+
+  /* Hypre specific tests */
+  fails += Test_N_VMake(Xhyp, myid);
+
+  /* Create hypre vector wrapper */
+  X = N_VMake_ParHyp(Xhyp);
+
+  /* Memory allocation tests */
+  fails += Test_N_VCloneEmpty(X, myid);
+  fails += Test_N_VClone(X, local_length, myid);
+  fails += Test_N_VCloneEmptyVectorArray(5, X, myid);
+  fails += Test_N_VCloneVectorArray(5, X, local_length, myid);
+
+  /* Create a couple of more vectors by cloning X */
+  Y = N_VClone(X);
+  Z = N_VClone(X);
+  
+  /* Skipped tests */
+  /* Accessing HYPRE vector raw data is not allowed from N_Vector interface */
+  /* fails += Test_N_VSetArrayPointer(W, local_length, myid); */
+  /* fails += Test_N_VGetArrayPointer(X, local_length, myid); */
+  
+  /* N_Vector interface tests */
+  fails += Test_N_VGetVectorID(W, myid);
+  fails += Test_N_VConst(X, local_length, myid);
+  fails += Test_N_VLinearSum(X, Y, Z, local_length, myid);
+  fails += Test_N_VProd(X, Y, Z, local_length, myid);
+  fails += Test_N_VDiv(X, Y, Z, local_length, myid);
+  fails += Test_N_VScale(X, Z, local_length, myid);
+  fails += Test_N_VAbs(X, Z, local_length, myid);
+  fails += Test_N_VInv(X, Z, local_length, myid);
+  fails += Test_N_VAddConst(X, Z, local_length, myid);
+  fails += Test_N_VDotProd(X, Y, local_length, global_length, myid);
+  fails += Test_N_VMaxNorm(X, local_length, myid);
+  fails += Test_N_VWrmsNorm(X, Y, local_length, myid);
+  fails += Test_N_VWrmsNormMask(X, Y, Z, local_length, global_length, myid);
+  fails += Test_N_VMin(X, local_length, myid);
+  fails += Test_N_VWL2Norm(X, Y, local_length, global_length, myid);
+  fails += Test_N_VL1Norm(X, local_length, global_length, myid);
+  fails += Test_N_VCompare(X, Z, local_length, myid);
+  fails += Test_N_VInvTest(X, Z, local_length, myid);
+  fails += Test_N_VConstrMask(X, Y, Z, local_length, myid);
+  fails += Test_N_VMinQuotient(X, Y, local_length, myid);
+
+  /* Free vectors */
+  N_VDestroy_ParHyp(W);
+  N_VDestroy_ParHyp(X);
+  N_VDestroy_ParHyp(Y);
+  N_VDestroy_ParHyp(Z);
+  
+  /* Print result */
+  if (fails) {
+    printf("FAIL: NVector module failed %i tests, Proc %d \n \n", fails, myid);
+  } else {
+     if(myid == 0) {
+       printf("SUCCESS: NVector module passed all tests, Proc %d \n \n",myid);
+     }
+  }
+
+  /* Free hypre template vector */
+  HYPRE_ParVectorDestroy(Xhyp);
+  
+  MPI_Finalize();
+  return(0);
+}
+
+/* ----------------------------------------------------------------------
+ * Check vector
+ * 
+ * Checks if all elements of vector X are set to value ans. 
+ * --------------------------------------------------------------------*/
+int check_ans(realtype ans, N_Vector X, long int local_length)
+{
+  int      failure = 0;
+  long int i;
+  hypre_ParVector *Xvec = N_VGetVector_ParHyp(X);
+  realtype *Xdata = Xvec == NULL ? NULL : hypre_VectorData(hypre_ParVectorLocalVector(Xvec));
+  
+  /* check vector data */
+  for(i=0; i < local_length; i++) {
+    failure += FNEQ(Xdata[i], ans);
+  }
+
+  if (failure > ZERO)
+    return(1);
+  else
+    return(0);
+}
+
+/* ----------------------------------------------------------------------
+ * has_data
+ *
+ * Utility that drills down to the hypre vector local data block and 
+ * checks if it is allocated. Does not verify the size of the block.
+ * --------------------------------------------------------------------*/
+booleantype has_data(N_Vector X)
+{
+  hypre_ParVector *Xvec = N_VGetVector_ParHyp(X);
+  realtype *Xdata = Xvec == NULL ? NULL : hypre_VectorData(hypre_ParVectorLocalVector(Xvec));
+  if (Xdata == NULL)
+    return FALSE;
+  else
+    return TRUE;
+}
+
+
+/* ----------------------------------------------------------------------
+ * set_element
+ *
+ * Sets single element in hypre vector by accessing its raw block. 
+ * Probably not the most efficient way to set the entire vector.
+ * --------------------------------------------------------------------*/
+void set_element(N_Vector X, long int i, realtype val)
+{
+  hypre_ParVector *Xvec = N_VGetVector_ParHyp(X);
+  realtype *Xdata = hypre_VectorData(hypre_ParVectorLocalVector(Xvec));
+  Xdata[i] = val;
+}
+ 
+/* ----------------------------------------------------------------------
+ * get_element
+ *
+ * Reads single element from hypre vector by accessing its raw block. 
+ * Probably not the most efficient way to get the vector values.
+ * --------------------------------------------------------------------*/
+realtype get_element(N_Vector X, long int i)
+{
+  hypre_ParVector *Xvec = N_VGetVector_ParHyp(X);
+  const realtype *Xdata = hypre_VectorData(hypre_ParVectorLocalVector(Xvec));
+  return Xdata[i];
+}
+
+/* ----------------------------------------------------------------------
+ * N_VGetVectorID Test
+ *
+ * --------------------------------------------------------------------*/
+int Test_N_VGetVectorID(N_Vector v, int myid)
+{
+  N_Vector_ID id = N_VGetVectorID(v);
+  if (id == SUNDIALS_NVEC_PARHYP) {
+    if (myid == 0) {
+      printf("    PASSED test -- N_VGetVectorID \n");
+      /* PRINT_TIME("    N_VMake Time: %22.15e \n \n", stop_time - start_time); */
+    }
+    return (0);
+  } else {
+    printf(">>> FAILED test -- N_VGetVectorID, Proc %d \n", myid);
+    printf("    Unrecognized vector type %d \n \n", id);
+    return (1);    
+  }
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VMake Test
+ *
+ * NOTE: This routine depends on N_VConst to check vector data.
+ * --------------------------------------------------------------------*/
+int Test_N_VMake(HYPRE_ParVector W, int myid)
+{
+  int failure;
+  /* double   start_time, stop_time; */
+  N_Vector X;
+  int local_length = hypre_ParVectorLastIndex(W) 
+                     - hypre_ParVectorFirstIndex(W) + 1;
+
+  /* clone vector */
+  /* start_time = get_time(); */  
+  X = N_VMake_ParHyp(W);
+  /* stop_time = get_time();  */
+
+  /* check cloned vector */
+  if (X == NULL) {
+    printf(">>> FAILED test -- N_VMake, Proc %d \n", myid);
+    printf("    After N_VMakeEmpty, X == NULL \n \n");
+    return(1);
+  } 
+
+  /* check cloned vector data */
+  if (!has_data(X)) {
+    printf(">>> FAILED test -- N_VMake, Proc %d \n", myid);
+    printf("    Vector data == NULL \n \n");
+    N_VDestroy(X);
+    return(1);
+  }    
+
+  N_VConst(ONE,X);
+  failure = check_ans(ONE, X, local_length);
+  if (failure) {
+    printf(">>> FAILED test -- N_VMake, Proc %d \n", myid);
+    printf("    Failed N_VConst check \n \n");
+    N_VDestroy(X);
+    return(1);
+  }    
+
+  N_VDestroy(X); 
+
+  if (myid == 0) {
+    printf("    PASSED test -- N_VMake \n");
+    /* PRINT_TIME("    N_VMake Time: %22.15e \n \n", stop_time - start_time); */
+  }
+
+  return(0);
+}
+
diff --git a/examples/nvector/petsc/CMakeLists.txt b/examples/nvector/petsc/CMakeLists.txt
new file mode 100644
index 0000000..2ced736
--- /dev/null
+++ b/examples/nvector/petsc/CMakeLists.txt
@@ -0,0 +1,133 @@
+# ---------------------------------------------------------------
+# $Revision: 4456 $
+# $Date: 2015-03-28 20:22:03 -0700 (Sat, 28 Mar 2015) $
+# ---------------------------------------------------------------
+# Programmer:  Steven Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for nvector examples
+
+# Add variable nvector_petsc_examples with the names of the nvector examples
+
+SET(nvector_petsc_examples
+  test_nvector_petsc
+)
+
+SET(nvector_examples_dependencies
+  test_nvector
+  sundials_nvector
+)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(. ..)
+INCLUDE_DIRECTORIES(${PETSC_INCLUDE_DIR})
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecpetsc_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecpetsc_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+  TARGET_LINK_LIBRARIES(${example} MPI_LIBRARIES)
+ENDIF(MPI_MPICC)
+
+# Add the build and install targets for each nvector example
+
+FOREACH(example ${nvector_petsc_examples})
+
+  ADD_EXECUTABLE(${example} ${example}.c ../test_nvector.c ../../../src/sundials/sundials_nvector.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+
+  # Run sequentially
+  SUNDIALS_ADD_TEST("${example}" ${example})
+
+  # Run sequentially with arguments
+  SUNDIALS_ADD_TEST("${example}_1000_0" ${example} TEST_ARGS 1000 0)
+
+  # Run in petsc on 4 procs
+  SUNDIALS_ADD_TEST("${example}_4" ${example} MPI_NPROCS 4)
+  
+  # Parallel with additional arguments and supplying an answer file
+  SUNDIALS_ADD_TEST("${example}_4_1000_0" ${example} MPI_NPROCS 4 TEST_ARGS 1000 0 ANSWER_FILE ${example})
+
+  # Specify floating point precision and integer percentage for comparison
+  SUNDIALS_ADD_TEST("${example}_precision" ${example} MPI_NPROCS 4 TEST_ARGS 1000 0 ANSWER_FILE ${example}
+    FLOAT_PRECISION 5 INTEGER_PERCENTAGE 0)
+  
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+  TARGET_LINK_LIBRARIES(${example} ${PETSC_LIBRARIES})
+
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ../test_nvector.c ../test_nvector.h ../../../src/sundials/sundials_nvector.c DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/petsc)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${nvector_petsc_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/petsc)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER_LIB "sundials_nvecpetsc")
+  LIST2STRING(nvector_petsc_examples EXAMPLES)
+  LIST2STRING(nvector_examples_dependencies EXAMPLES_DEPENDENCIES)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_petsc_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/petsc/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/nvector/petsc/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/petsc
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_petsc_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/petsc/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/nvector/petsc/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/petsc
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/nvector/petsc/test_nvector_petsc.c b/examples/nvector/petsc/test_nvector_petsc.c
new file mode 100644
index 0000000..513b522
--- /dev/null
+++ b/examples/nvector/petsc/test_nvector_petsc.c
@@ -0,0 +1,239 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4137 $
+ * $Date: 2014-06-15 12:26:15 -0700 (Sun, 15 Jun 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Slaven Peles @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the testing routine to check the NVECTOR Parallel module 
+ * implementation. 
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <petscvec.h>
+#include <sundials/sundials_types.h>
+#include <nvector/nvector_petsc.h>
+#include <sundials/sundials_math.h>
+#include "test_nvector.h"
+
+#include <mpi.h>
+
+
+/* local vector length */
+#define VECLEN 10000
+
+static int Test_N_VMake(Vec* W, int myid);
+
+/* ----------------------------------------------------------------------
+ * Main NVector Testing Routine
+ * --------------------------------------------------------------------*/
+int main(int argc, char *argv[]) 
+{
+  int      fails = 0;                   /* counter for test failures */
+  long int local_length, global_length; /* vector lengths            */
+  N_Vector W, X, Y, Z;                  /* test vectors              */
+  MPI_Comm comm;                        /* MPI Communicator          */
+  int      nprocs, myid;                /* Number of procs, proc id  */
+  Vec xvec;                             /* PETSc vector              */
+  PetscErrorCode ierr;                  /* PETSc error code          */
+
+  /* Get processor number and total number of processes */
+  MPI_Init(&argc, &argv);
+  comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm, &nprocs);
+  MPI_Comm_rank(comm, &myid);
+  ierr = PetscInitializeNoArguments();
+  CHKERRQ(ierr);
+  
+  /* set local and global lengths */
+  local_length = VECLEN;
+  global_length = nprocs*local_length;
+  
+  /* Allocate and initialize PETSc vector */
+  VecCreate(comm, &xvec);
+  VecSetSizes(xvec, local_length, global_length);
+  VecSetFromOptions(xvec);
+  
+  /* Create vectors */
+  W = N_VNewEmpty_Petsc(comm, local_length, global_length);
+  if(N_VGetVectorID(W) == SUNDIALS_NVEC_PETSC && myid == 0) {
+    /*printf("Testing PETSc vector wrapper...\n");*/
+  }
+    
+
+  /* NVector Test */
+
+  /* PETSc specific tests */
+  fails += Test_N_VMake(&xvec, myid);
+  
+  X = N_VMake_Petsc(&xvec);
+
+  /* Memory allocation tests */
+  fails += Test_N_VCloneEmpty(X, myid);
+  fails += Test_N_VClone(X, local_length, myid);
+  fails += Test_N_VCloneEmptyVectorArray(5, X, myid);
+  fails += Test_N_VCloneVectorArray(5, X, local_length, myid);
+
+  Y = N_VClone_Petsc(X);
+  Z = N_VClone_Petsc(X);
+
+  /* Skipped tests */
+  /* fails += Test_N_VSetArrayPointer(W, local_length, myid); */
+  /* fails += Test_N_VGetArrayPointer(X, local_length, myid); */
+  
+  /* Vector operations tests */
+  fails += Test_N_VConst(X, local_length, myid);
+  fails += Test_N_VLinearSum(X, Y, Z, local_length, myid);
+  fails += Test_N_VProd(X, Y, Z, local_length, myid);
+  fails += Test_N_VDiv(X, Y, Z, local_length, myid);
+  fails += Test_N_VScale(X, Z, local_length, myid);
+  fails += Test_N_VAbs(X, Z, local_length, myid);
+  fails += Test_N_VInv(X, Z, local_length, myid);
+  fails += Test_N_VAddConst(X, Z, local_length, myid);
+  fails += Test_N_VDotProd(X, Y, local_length, global_length, myid);
+  fails += Test_N_VMaxNorm(X, local_length, myid);
+  fails += Test_N_VWrmsNorm(X, Y, local_length, myid);
+  fails += Test_N_VWrmsNormMask(X, Y, Z, local_length, global_length, myid);
+  fails += Test_N_VMin(X, local_length, myid);
+  fails += Test_N_VWL2Norm(X, Y, local_length, global_length, myid);
+  fails += Test_N_VL1Norm(X, local_length, global_length, myid);
+  fails += Test_N_VCompare(X, Z, local_length, myid);
+  fails += Test_N_VInvTest(X, Z, local_length, myid);
+  fails += Test_N_VConstrMask(X, Y, Z, local_length, myid);
+  fails += Test_N_VMinQuotient(X, Y, local_length, myid);
+
+  /* Free vectors */
+  N_VDestroy_Petsc(W);
+  N_VDestroy_Petsc(X);
+  N_VDestroy_Petsc(Y);
+  N_VDestroy_Petsc(Z);
+
+  /* Print result */
+  if (fails) {
+    printf("FAIL: NVector module failed %i tests, Proc %d \n \n", fails, myid);
+  } else {
+     if(myid == 0) {
+       printf("SUCCESS: NVector module passed all tests, Proc %d \n \n",myid);
+     }
+  }
+  
+  ierr = PetscFinalize();
+  CHKERRQ(ierr);
+  MPI_Finalize();
+  return(0);
+}
+
+/* ----------------------------------------------------------------------
+ * Check vector
+ * --------------------------------------------------------------------*/
+int check_ans(realtype ans, N_Vector X, long int local_length)
+{
+  int failure = 0;
+  long int i;
+  Vec *xv = N_VGetVector_Petsc(X);
+  PetscScalar *a;
+
+  failure = 0;
+  /* check PETSc vector */
+  VecGetArray(*xv, &a);
+  for (i = 0; i < local_length; ++i){
+    failure += FNEQ(a[i], ans);
+  }
+  VecRestoreArray(*xv, &a);
+
+  if (failure > ZERO)
+    return(1);
+  else
+    return(0);
+}
+
+booleantype has_data(N_Vector X)
+{
+  if(N_VGetVector_Petsc(X) == NULL)
+    return FALSE;
+  else
+    return TRUE;
+}
+
+void set_element(N_Vector X, long int i, realtype val)
+{
+  PetscScalar *a;
+  Vec *xv = N_VGetVector_Petsc(X);
+  
+  VecGetArray(*xv, &a);
+  a[i] = val;
+  VecRestoreArray(*xv, &a);
+}
+
+realtype get_element(N_Vector X, long int i)
+{
+  PetscScalar *a;
+  Vec *xv = N_VGetVector_Petsc(X);
+  realtype val;
+  
+  VecGetArray(*xv, &a);
+  val = a[i];
+  VecRestoreArray(*xv, &a);
+  
+  return val;    
+}
+
+/* ----------------------------------------------------------------------
+ * N_VMake Test
+ *
+ * NOTE: This routine depends on N_VConst to check vector data.
+ * --------------------------------------------------------------------*/
+static int Test_N_VMake(Vec* W, int myid)
+{
+  /* double   start_time, stop_time; */
+  N_Vector X;
+
+  /* clone vector */
+  /* start_time = get_time(); */  
+  X = N_VMake_Petsc(W);
+  /* stop_time = get_time();  */
+
+  /* check vector wrapper */
+  if (X == NULL) {
+    printf(">>> FAILED test -- N_VMake, Proc %d \n", myid);
+    printf("    After N_VMake, X == NULL \n \n");
+    return(1);
+  } 
+
+  /* check underlying PETSc vector is correct */
+  if (*W != *N_VGetVector_Petsc(X)) {
+    printf(">>> FAILED test -- N_VMake, Proc %d \n", myid);
+    printf("    PETSc not wrapped correctly \n \n");
+    N_VDestroy(X);
+    return(1);
+  }    
+
+  N_VDestroy(X); 
+
+  if (*W == NULL) {
+    printf(">>> FAILED test -- N_VMake, Proc %d \n", myid);
+    printf("    Destroying wrapper destroyed underlying PETSc vector \n \n");
+    return(1);
+  }    
+
+  if (myid == 0) {
+    printf("    PASSED test -- N_VMake \n");
+    /* PRINT_TIME("    N_VMake Time: %22.15e \n \n", stop_time - start_time); */
+  }
+
+  return(0);
+}
+
diff --git a/examples/nvector/pthreads/CMakeLists.txt b/examples/nvector/pthreads/CMakeLists.txt
new file mode 100644
index 0000000..946d0d3
--- /dev/null
+++ b/examples/nvector/pthreads/CMakeLists.txt
@@ -0,0 +1,124 @@
+# ---------------------------------------------------------------
+# $Revision: 4456 $
+# $Date: 2015-03-28 20:22:03 -0700 (Sat, 28 Mar 2015) $
+# ---------------------------------------------------------------
+# Programmer:  Steven Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for nvector examples
+
+# Add variable nvector_pthreads_examples with the names of the nvector examples
+
+SET(nvector_pthreads_examples
+  test_nvector_pthreads
+)
+
+SET(nvector_examples_dependencies
+  test_nvector
+  sundials_nvector
+)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(. ..)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecpthreads_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecpthreads_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+
+# Add the build and install targets for each nvector example
+
+FOREACH(example ${nvector_pthreads_examples})
+
+  IF(WIN32)
+    # This is used to get around DLL linkage issue since we are
+    # manually including sundials_nvector.c here, which is normally in
+    # a library that is included.  If this is not set build system
+    # thinks nvector is externally linked.
+    ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+  ENDIF(WIN32)
+
+  ADD_EXECUTABLE(${example} ${example}.c ../test_nvector.c ../../../src/sundials/sundials_nvector.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+
+  SUNDIALS_ADD_TEST(${example}_1000_1_0 ${example} TEST_ARGS 1000 1 0)
+  SUNDIALS_ADD_TEST(${example}_1000_2_0 ${example} TEST_ARGS 1000 2 0)
+  SUNDIALS_ADD_TEST(${example}_1000_4_0 ${example} TEST_ARGS 1000 4 0)
+
+  SUNDIALS_ADD_TEST(${example}_10000_1_0 ${example} TEST_ARGS 10000 1 0)
+  SUNDIALS_ADD_TEST(${example}_10000_2_0 ${example} TEST_ARGS 10000 2 0)
+  SUNDIALS_ADD_TEST(${example}_10000_4_0 ${example} TEST_ARGS 10000 4 0)
+
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+
+  TARGET_LINK_LIBRARIES(${example} ${CMAKE_THREAD_LIBS_INIT})
+
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ../test_nvector.c ../test_nvector.h ../../../src/sundials/sundials_nvector.c DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/pthreads)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${nvector_pthreads_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/pthreads)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER_LIB "sundials_nvecpthreads")
+  LIST2STRING(nvector_pthreads_examples EXAMPLES)
+  LIST2STRING(nvector_examples_dependencies EXAMPLES_DEPENDENCIES)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_pthreads_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/pthreads/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/nvector/pthreads/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/pthreads
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_pthreads_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/pthreads/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/nvector/pthreads/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/pthreads
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/nvector/pthreads/test_nvector_pthreads.c b/examples/nvector/pthreads/test_nvector_pthreads.c
new file mode 100644
index 0000000..e29402a
--- /dev/null
+++ b/examples/nvector/pthreads/test_nvector_pthreads.c
@@ -0,0 +1,161 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4790 $
+ * $Date: 2016-06-29 14:47:05 -0700 (Wed, 29 Jun 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): David J. Gardner @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the testing routine to check the POSIX Threads (Pthreads) 
+ * NVECTOR module implementation which uses a LOCAL data struct to 
+ * share data between threads. 
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_types.h>
+#include <nvector/nvector_pthreads.h>
+#include <sundials/sundials_math.h>
+#include "test_nvector.h"
+
+
+/* ----------------------------------------------------------------------
+ * Main NVector Testing Routine
+ * --------------------------------------------------------------------*/
+int main(int argc, char *argv[]) 
+{
+  int      fails = 0;  /* counter for test failures */
+  int      nthreads;   /* number of threads         */
+  long int veclen;     /* vector length             */
+  N_Vector W, X, Y, Z; /* test vectors              */
+  int      print_timing;
+
+  /* check inputs, set vector length, and number of threads */
+  if (argc < 4){
+    printf("ERROR: THREE (3) Inputs required: vector length, number of threads, print timing \n");
+    return(-1);
+  }
+
+  veclen = atol(argv[1]); 
+  if (veclen <= 0) {
+    printf("ERROR: length of vector must be a positive integer \n");
+    return(-1); 
+  }
+
+  nthreads = atoi(argv[2]);
+  if (nthreads < 1) {
+    printf("ERROR: number of threads must be at least 1 \n");
+    return(-1); 
+  }
+
+  print_timing = atoi(argv[3]);
+  SetTiming(print_timing);
+
+
+  printf("\nRunning with %d threads and vector length %ld \n \n", nthreads, veclen);
+
+  /* Create vectors */
+  W = N_VNewEmpty_Pthreads(veclen, nthreads);
+  X = N_VNew_Pthreads(veclen, nthreads);
+  Y = N_VNew_Pthreads(veclen, nthreads);
+  Z = N_VNew_Pthreads(veclen, nthreads);
+
+  if(N_VGetVectorID(W) == SUNDIALS_NVEC_PTHREADS) {
+    /* printf("Testing Pthreads variant of N_Vector...\n"); */
+  }
+  
+  /* NVector Tests */
+  fails += Test_N_VSetArrayPointer(W, veclen, 0);
+  fails += Test_N_VGetArrayPointer(X, veclen, 0);
+  fails += Test_N_VLinearSum(X, Y, Z, veclen, 0);
+  fails += Test_N_VConst(X, veclen, 0);
+  fails += Test_N_VProd(X, Y, Z, veclen, 0);
+  fails += Test_N_VDiv(X, Y, Z, veclen, 0);
+  fails += Test_N_VScale(X, Z, veclen, 0);
+  fails += Test_N_VAbs(X, Z, veclen, 0);
+  fails += Test_N_VInv(X, Z, veclen, 0);
+  fails += Test_N_VAddConst(X, Z, veclen, 0);
+  fails += Test_N_VDotProd(X, Y, veclen, veclen, 0);
+  fails += Test_N_VMaxNorm(X, veclen, 0);
+  fails += Test_N_VWrmsNorm(X, Y, veclen, 0);
+  fails += Test_N_VWrmsNormMask(X, Y, Z, veclen, veclen, 0);
+  fails += Test_N_VMin(X, veclen, 0);
+  fails += Test_N_VWL2Norm(X, Y, veclen, veclen, 0);
+  fails += Test_N_VL1Norm(X, veclen, veclen, 0);
+  fails += Test_N_VCompare(X, Z, veclen, 0);
+  fails += Test_N_VInvTest(X, Z, veclen, 0);
+  fails += Test_N_VConstrMask(X, Y, Z, veclen, 0);
+  fails += Test_N_VMinQuotient(X, Y, veclen, 0);
+  fails += Test_N_VCloneVectorArray(5, X, veclen, 0);
+  fails += Test_N_VCloneEmptyVectorArray(5, X, 0);
+  fails += Test_N_VCloneEmpty(X, 0);
+  fails += Test_N_VClone(X, veclen, 0);
+
+  /* Free vectors */
+  N_VDestroy_Pthreads(W);
+  N_VDestroy_Pthreads(X);
+  N_VDestroy_Pthreads(Y);
+  N_VDestroy_Pthreads(Z);
+
+  /* Print result */
+  if (fails) {
+    printf("FAIL: NVector module failed %i tests \n \n", fails);
+  } else {
+    printf("SUCCESS: NVector module passed all tests \n \n");
+  }
+
+  return(0);
+}
+
+/* ----------------------------------------------------------------------
+ * Check vector
+ * --------------------------------------------------------------------*/
+int check_ans(realtype ans, N_Vector X, long int local_length)
+{
+  int      failure = 0;
+  long int i;
+  realtype *Xdata;
+  
+  Xdata = N_VGetArrayPointer(X);
+
+  /* check vector data */
+  for(i=0; i < local_length; i++){
+    failure += FNEQ(Xdata[i], ans);
+  }
+
+  if (failure > ZERO)
+    return(1);
+  else
+    return(0);
+}
+
+booleantype has_data(N_Vector X)
+{
+  realtype *Xdata = N_VGetArrayPointer(X);
+  if (Xdata == NULL)
+    return FALSE;
+  else
+    return TRUE;
+}
+
+void set_element(N_Vector X, long int i, realtype val)
+{
+  NV_Ith_PT(X,i) = val;
+}
+ 
+realtype get_element(N_Vector X, long int i)
+{
+  return NV_Ith_PT(X,i);
+}
+
diff --git a/examples/nvector/serial/CMakeLists.txt b/examples/nvector/serial/CMakeLists.txt
new file mode 100644
index 0000000..9c38a10
--- /dev/null
+++ b/examples/nvector/serial/CMakeLists.txt
@@ -0,0 +1,117 @@
+# ---------------------------------------------------------------
+# $Revision: 4456 $
+# $Date: 2015-03-28 20:22:03 -0700 (Sat, 28 Mar 2015) $
+# ---------------------------------------------------------------
+# Programmer:  Steven Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for nvector examples
+
+# Add variable nvector_serial_examples with the names of the nvector examples
+
+SET(nvector_serial_examples
+  test_nvector_serial
+)
+
+SET(nvector_examples_dependencies
+  test_nvector
+  sundials_nvector
+)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(. ..)
+
+# Specify libraries to link against (through the target that was used to 
+# generate them) based on the value of the variable LINK_LIBRARY_TYPE
+
+IF(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecserial_static)
+ELSE(LINK_LIBRARY_TYPE MATCHES "static")
+  SET(NVECS_LIB sundials_nvecserial_shared)
+ENDIF(LINK_LIBRARY_TYPE MATCHES "static")
+
+# Set-up linker flags and link libraries
+
+SET(SUNDIALS_LIBS ${NVECS_LIB} ${EXTRA_LINK_LIBS})
+
+# Add the build and install targets for each nvector example
+
+FOREACH(example ${nvector_serial_examples})
+
+  IF(WIN32)
+    # This is used to get around DLL linkage issue since we are
+    # manually including sundials_nvector.c here, which is normally in
+    # a library that is included.  If this is not set build system
+    # thinks nvector is externally linked.
+    ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+  ENDIF(WIN32)
+
+  ADD_EXECUTABLE(${example} ${example}.c ../test_nvector.c ../../../src/sundials/sundials_nvector.c)
+  SET_TARGET_PROPERTIES(${example} PROPERTIES FOLDER "Examples")
+
+  SUNDIALS_ADD_TEST( ${example}_1000_0 ${example} TEST_ARGS 1000 0)
+  SUNDIALS_ADD_TEST( ${example}_10000_0 ${example} TEST_ARGS 10000 0)
+
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+
+  IF(EXAMPLES_INSTALL)
+    INSTALL(FILES ${example}.c ../test_nvector.c ../test_nvector.h ../../../src/sundials/sundials_nvector.c DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/serial)
+  ENDIF(EXAMPLES_INSTALL)
+ENDFOREACH(example ${nvector_serial_examples})
+
+IF(EXAMPLES_INSTALL)
+
+  # Install the README file
+  INSTALL(FILES DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/serial)
+
+  # Prepare substitution variables for Makefile and/or CMakeLists templates
+  SET(SOLVER_LIB "sundials_nvecserial")
+  LIST2STRING(nvector_serial_examples EXAMPLES)
+  LIST2STRING(nvector_examples_dependencies EXAMPLES_DEPENDENCIES)
+
+  # Regardless of the platform we're on, we will generate and install 
+  # CMakeLists.txt file for building the examples. This file  can then 
+  # be used as a template for the user's own programs.
+
+  # generate CMakelists.txt in the binary directory
+  CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/cmakelists_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/serial/CMakeLists.txt
+      @ONLY
+      )
+
+  # install CMakelists.txt
+  INSTALL(
+    FILES ${PROJECT_BINARY_DIR}/examples/nvector/serial/CMakeLists.txt
+    DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/serial
+    )
+
+  # On UNIX-type platforms, we also  generate and install a makefile for 
+  # building the examples. This makefile can then be used as a template 
+  # for the user's own programs.
+
+  IF(UNIX)
+    # generate Makefile and place it in the binary dir
+    CONFIGURE_FILE(
+      ${PROJECT_SOURCE_DIR}/examples/templates/makefile_serial_C_ex.in
+      ${PROJECT_BINARY_DIR}/examples/nvector/serial/Makefile_ex
+      @ONLY
+      )
+    # install the configured Makefile_ex as Makefile
+    INSTALL(
+      FILES ${PROJECT_BINARY_DIR}/examples/nvector/serial/Makefile_ex 
+      DESTINATION ${EXAMPLES_INSTALL_PATH}/nvector/serial
+      RENAME Makefile
+      )
+  ENDIF(UNIX)
+
+ENDIF(EXAMPLES_INSTALL)
diff --git a/examples/nvector/serial/test_nvector_serial.c b/examples/nvector/serial/test_nvector_serial.c
new file mode 100644
index 0000000..a2e1979
--- /dev/null
+++ b/examples/nvector/serial/test_nvector_serial.c
@@ -0,0 +1,153 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4790 $
+ * $Date: 2016-06-29 14:47:05 -0700 (Wed, 29 Jun 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): David J. Gardner @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the testing routine to check the NVECTOR Serial module 
+ * implementation. 
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_types.h>
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+#include "test_nvector.h"
+
+
+/* ----------------------------------------------------------------------
+ * Main NVector Testing Routine
+ * --------------------------------------------------------------------*/
+int main(int argc, char *argv[]) 
+{
+  int      fails = 0;  /* counter for test failures  */
+  long int veclen;     /* vector length              */
+  N_Vector W, X, Y, Z; /* test vectors               */
+  int      print_timing;
+
+
+  /* check input and set vector length */
+  if (argc < 3){
+    printf("ERROR: ONE (1) Input required: vector length, print timing \n");
+    return(-1);
+  }
+
+  veclen = atol(argv[1]); 
+  if (veclen <= 0) {
+    printf("ERROR: length of vector must be a positive integer \n");
+    return(-1); 
+  }
+
+  print_timing = atoi(argv[2]);
+  SetTiming(print_timing);
+
+
+  printf("\nRunning with vector length %ld \n \n", veclen);
+
+  /* Create vectors */
+  W = N_VNewEmpty_Serial(veclen);
+  X = N_VNew_Serial(veclen);
+  Y = N_VNew_Serial(veclen);
+  Z = N_VNew_Serial(veclen);
+
+  if(N_VGetVectorID(W) == SUNDIALS_NVEC_SERIAL) {
+    /*printf("Testing serial variant of N_Vector...\n");*/
+  }
+  
+  /* NVector Tests */
+  fails += Test_N_VSetArrayPointer(W, veclen, 0);
+  fails += Test_N_VGetArrayPointer(X, veclen, 0);
+  fails += Test_N_VLinearSum(X, Y, Z, veclen, 0);
+  fails += Test_N_VConst(X, veclen, 0);
+  fails += Test_N_VProd(X, Y, Z, veclen, 0);
+  fails += Test_N_VDiv(X, Y, Z, veclen, 0);
+  fails += Test_N_VScale(X, Z, veclen, 0);
+  fails += Test_N_VAbs(X, Z, veclen, 0);
+  fails += Test_N_VInv(X, Z, veclen, 0);
+  fails += Test_N_VAddConst(X, Z, veclen, 0);
+  fails += Test_N_VDotProd(X, Y, veclen, veclen, 0);
+  fails += Test_N_VMaxNorm(X, veclen, 0);
+  fails += Test_N_VWrmsNorm(X, Y, veclen, 0);
+  fails += Test_N_VWrmsNormMask(X, Y, Z, veclen, veclen, 0);
+  fails += Test_N_VMin(X, veclen, 0);
+  fails += Test_N_VWL2Norm(X, Y, veclen, veclen, 0);
+  fails += Test_N_VL1Norm(X, veclen, veclen, 0);
+  fails += Test_N_VCompare(X, Z, veclen, 0);
+  fails += Test_N_VInvTest(X, Z, veclen, 0);
+  fails += Test_N_VConstrMask(X, Y, Z, veclen, 0);
+  fails += Test_N_VMinQuotient(X, Y, veclen, 0);
+  fails += Test_N_VCloneVectorArray(5, X, veclen, 0);
+  fails += Test_N_VCloneEmptyVectorArray(5, X, 0);
+  fails += Test_N_VCloneEmpty(X, 0);
+  fails += Test_N_VClone(X, veclen, 0);
+
+  /* Free vectors */
+  N_VDestroy_Serial(W);
+  N_VDestroy_Serial(X);
+  N_VDestroy_Serial(Y);
+  N_VDestroy_Serial(Z);
+
+  /* Print result */
+  if (fails) {
+    printf("FAIL: NVector module failed %i tests \n \n", fails);
+  } else {
+    printf("SUCCESS: NVector module passed all tests \n \n");
+  }
+
+  return(0);
+}
+
+/* ----------------------------------------------------------------------
+ * Check vector
+ * --------------------------------------------------------------------*/
+int check_ans(realtype ans, N_Vector X, long int local_length)
+{
+  int      failure = 0;
+  long int i;
+  realtype *Xdata;
+  
+  Xdata = N_VGetArrayPointer(X);
+
+  /* check vector data */
+  for(i=0; i < local_length; i++){
+    failure += FNEQ(Xdata[i], ans);
+  }
+
+  if (failure > ZERO)
+    return(1);
+  else
+    return(0);
+}
+
+booleantype has_data(N_Vector X)
+{
+  realtype *Xdata = N_VGetArrayPointer(X);
+  if (Xdata == NULL)
+    return FALSE;
+  else
+    return TRUE;
+}
+
+void set_element(N_Vector X, long int i, realtype val)
+{
+  NV_Ith_S(X,i) = val;    
+}
+
+realtype get_element(N_Vector X, long int i)
+{
+  return NV_Ith_S(X,i);    
+}
diff --git a/examples/nvector/test_nvector.c b/examples/nvector/test_nvector.c
new file mode 100644
index 0000000..4da2886
--- /dev/null
+++ b/examples/nvector/test_nvector.c
@@ -0,0 +1,1842 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4652 $
+ * $Date: 2016-02-11 10:22:15 -0800 (Thu, 11 Feb 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): David J. Gardner and Slaven Peles @ LLNL
+ * -----------------------------------------------------------------
+ * Acknowledgements: These testing routines are based on an
+ *                   NVECTOR testing routine by Daniel R. Reynolds
+ *                   @ SMU.
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * These test functions are designed to check an NVECTOR module 
+ * implementation. 
+ *
+ * NOTE: Many of these tests rely on the N_VGetArrayPointer routine 
+ *       to get a pointer to the data component of an N_Vector. This 
+ *       assumes the internal data is stored in a contiguous 
+ *       realtype array.
+ * -----------------------------------------------------------------
+ */
+
+#include <sundials/sundials_nvector.h>
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#include <math.h> /* include isnan */
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "test_nvector.h"
+
+#if defined( SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS)
+#include <time.h>
+#include <unistd.h>
+#endif
+
+
+/* private functions */
+static double get_time();
+
+int print_time = 0;
+
+#define PRINT_TIME(format, time) if(print_time) printf(format, time)
+
+/* ----------------------------------------------------------------------
+ * N_VCloneVectorArray Test
+ *
+ * NOTE: This routine depends on N_VConst to check vector data.
+ * --------------------------------------------------------------------*/
+int Test_N_VCloneVectorArray(int count, N_Vector W, long int local_length, int myid)
+{
+  int      i, failure;
+  double   start_time, stop_time;
+  N_Vector *vs;
+  
+  /* clone array of vectors */
+  start_time = get_time(); 
+  vs = N_VCloneVectorArray(count, W);
+  stop_time = get_time(); 
+  
+  /* check array of vectors */
+  if (count <= 0 && vs != NULL) {
+    printf(">>> FAILED test -- N_VCloneVectorArray, Proc %d \n", myid);
+    printf("    count = %d, expected *vs = NULL \n \n",count);
+    return(1);
+  } 
+  
+  /* check vectors in array */
+  for(i=0; i<count; i++) {
+    if (vs[i] == NULL) {
+      printf(">>> FAILED test -- N_VCloneVectorArray, Proc %d \n", myid);
+      printf("    Vector[%d] = NULL \n \n",i);
+      N_VDestroyVectorArray(vs, count);
+      return(1);
+    }    
+    
+    N_VConst(ONE,vs[i]);
+    failure = check_ans(ONE, vs[i], local_length);
+    if (failure) {
+      printf(">>> FAILED test -- N_VCloneVectorArray, Proc %d \n", myid);
+      printf("    Vector[%d] failed N_VConst check \n \n",i);
+      N_VDestroyVectorArray(vs, count);
+      return(1);
+    }    
+  }
+
+  N_VDestroyVectorArray(vs, count);
+  
+  if (myid == 0) {
+    printf("    PASSED test -- N_VCloneVectorArray \n");
+    PRINT_TIME("    N_VCloneVectorArray Time: %22.15e \n \n", stop_time - start_time);
+  }
+
+  return(0);
+}
+
+/* ----------------------------------------------------------------------
+ * N_VCloneVectorArrayEmpty Test
+ * --------------------------------------------------------------------*/
+int Test_N_VCloneEmptyVectorArray(int count, N_Vector W, int myid)
+{
+  int      i;
+  double   start_time, stop_time;
+  N_Vector *vs;
+
+  /* clone empty array */
+  start_time = get_time(); 
+  vs = N_VCloneEmptyVectorArray(count, W);
+  stop_time = get_time(); 
+  
+  /* check array of vectors */
+  if (count <= 0 && vs != NULL) {
+    printf(">>> FAILED test -- N_VCloneEmptyVectorArray, Proc %d \n", myid);
+    printf("    count = %d, expected *vs = NULL \n \n",count);
+    return(1);
+  } 
+
+  /* check vectors in array */
+  for(i=0; i<count; i++) {
+    if (vs[i] == NULL) {
+      printf(">>> FAILED test -- N_VCloneEmptyVectorArray, Proc %d \n", myid);
+      printf("    Vector[%d] = NULL \n \n",i);
+      N_VDestroyVectorArray(vs, count);
+      return(1);
+    }    
+
+    if (has_data(vs[i])) {
+      printf(">>> FAILED test -- N_VCloneEmptyVectorArray, Proc %d \n", myid);
+      printf("    Vector[%d] data != NULL \n \n",i);
+      N_VDestroyVectorArray(vs, count);
+      return(1);
+    }    
+  }
+
+  N_VDestroyVectorArray(vs, count);
+  
+  if (myid == 0) {
+    printf("    PASSED test -- N_VCloneEmptyVectorArray \n");
+    PRINT_TIME("    N_VCloneEmptyVectorArray Time: %22.15e \n \n", stop_time - start_time);
+  }
+
+  return(0);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VCloneEmpty Test
+ * --------------------------------------------------------------------*/
+int Test_N_VCloneEmpty(N_Vector W, int myid)
+{
+  double   start_time, stop_time;
+  N_Vector X;
+
+  /* clone empty vector */
+  start_time = get_time();   
+  X = N_VCloneEmpty(W);
+  stop_time = get_time(); 
+
+  /* check vector */
+  if (X == NULL) {
+    printf(">>> FAILED test -- N_VCloneEmpty, Proc %d \n", myid);
+    printf("    After N_VCloneEmpty, X == NULL \n \n");
+    return(1);
+  } 
+
+  /* check vector data */
+  if (has_data(X)) {
+    printf(">>> FAILED test -- N_VCloneEmpty, Proc %d \n", myid);
+    printf("    Vector data != NULL \n \n");
+    N_VDestroy(X);
+    return(1);
+  }    
+
+  N_VDestroy(X); 
+
+  if (myid == 0) {
+    printf("    PASSED test -- N_VCloneEmpty \n");
+    PRINT_TIME("    N_VCloneEmpty Time: %22.15e \n \n", stop_time - start_time);
+  }
+
+  return(0);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VClone Test
+ *
+ * NOTE: This routine depends on N_VConst to check vector data.
+ * --------------------------------------------------------------------*/
+int Test_N_VClone(N_Vector W, long int local_length, int myid)
+{
+  int      failure;
+  double   start_time, stop_time;
+  N_Vector X;
+
+  /* clone vector */
+  start_time = get_time();   
+  X = N_VClone(W);
+  stop_time = get_time();   
+
+  /* check cloned vector */
+  if (X == NULL) {
+    printf(">>> FAILED test -- N_VClone, Proc %d \n", myid);
+    printf("    After N_VCloneEmpty, X == NULL \n \n");
+    return(1);
+  } 
+
+  /* check cloned vector data */
+  if (!has_data(X)) {
+    printf(">>> FAILED test -- N_VClone, Proc %d \n", myid);
+    printf("    Vector data == NULL \n \n");
+    N_VDestroy(X);
+    return(1);
+  }    
+
+  N_VConst(ONE,X);
+  failure = check_ans(ONE, X, local_length);
+  if (failure) {
+    printf(">>> FAILED test -- N_VClone, Proc %d \n", myid);
+    printf("    Failed N_VConst check \n \n");
+    N_VDestroy(X);
+    return(1);
+  }    
+
+  N_VDestroy(X); 
+
+  if (myid == 0) {
+    printf("    PASSED test -- N_VClone \n");
+    PRINT_TIME("    N_VClone Time: %22.15e \n \n", stop_time - start_time);
+  }
+
+  return(0);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VGetArrayPointer Test
+ * 
+ * For now commenting this out to surpress warning messages (pointer set,
+ * but not used). Do we really need to time access to the vector 
+ * data pointer? 
+ *
+ * NOTE: This routine depends on N_VConst to check vector data.
+ * --------------------------------------------------------------------*/
+int Test_N_VGetArrayPointer(N_Vector W, long int local_length, int myid)
+{
+  int      failure = 0;
+  double   start_time, stop_time;
+  realtype *Wdata;
+
+  /* get vector data, time it and set it to NULL */
+  start_time = get_time();   
+  Wdata = N_VGetArrayPointer(W);
+  stop_time = get_time();
+  Wdata++; Wdata=NULL; /* Do something with pointer to surpress warning */
+  
+  /* check vector data */
+  if (!has_data(W)) {
+    printf(">>> FAILED test -- N_VGetArrayPointer, Proc %d \n", myid);
+    printf("    Vector data == NULL \n \n");
+    return(1);
+  }    
+
+  N_VConst(NEG_HALF,W);
+  failure = check_ans(NEG_HALF, W, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VGetArrayPointer, Proc %d \n", myid);
+    printf("    Failed N_VConst check \n \n");
+    return(1);
+  }
+
+  if (myid == 0) {
+    printf("    PASSED test -- N_VGetArrayPointer \n");
+    PRINT_TIME("    N_VGetArrayPointer Time: %22.15e \n \n", stop_time - start_time);
+  }
+  
+  return(0);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VSetArrayPointer Test
+ *
+ * NOTE: This routine depends on N_VConst to check vector data.
+ * --------------------------------------------------------------------*/
+int Test_N_VSetArrayPointer(N_Vector W, long int local_length, int myid)
+{
+  int      failure = 0;
+  long int i;  
+  double   start_time, stop_time;
+  realtype *Wdata;
+
+  /* create vector data */
+  Wdata = malloc(local_length * sizeof(realtype));
+  for(i=0; i < local_length; i++){
+    Wdata[i] = ONE;
+  }
+  
+  /* attach data to vector */
+  start_time = get_time();   
+  N_VSetArrayPointer(Wdata, W);
+  stop_time = get_time();   
+
+  /* check vector data */
+  N_VConst(NEG_HALF,W);
+  for(i=0; i < local_length; i++){
+    failure += FNEQ(Wdata[i], NEG_HALF);
+  }
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VSetArrayPointer, Proc %d \n", myid);
+    printf("    Failed N_VConst check \n \n");
+    free(Wdata);
+    return(1);
+  }
+
+  free(Wdata);
+
+  if (myid == 0) {
+    printf("    PASSED test -- N_VSetArrayPointer \n");
+    PRINT_TIME("    N_VSetArrayPointer Time: %22.15e \n \n", stop_time - start_time);
+  }
+  
+  return(0);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VLinearSum Tests
+ * --------------------------------------------------------------------*/
+int Test_N_VLinearSum(N_Vector X, N_Vector Y, N_Vector Z, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+  
+  /* 
+   * Case 1a: y = x + y, (Vaxpy Case 1) 
+   */
+
+  /* fill vector data */
+  N_VConst(ONE, X);
+  N_VConst(NEG_TWO, Y);
+
+  start_time = get_time(); 
+  N_VLinearSum(ONE, X, ONE, Y, Y);
+  stop_time = get_time(); 
+  
+  /* Y should be vector of -1 */
+  failure = check_ans(NEG_ONE, Y, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 1a, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 1a \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  /*
+   * Case 1b: y = -x + y, (Vaxpy Case 2)
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(ONE, X);
+  N_VConst(TWO, Y);
+
+  start_time = get_time(); 
+  N_VLinearSum(NEG_ONE, X, ONE, Y, Y);
+  stop_time = get_time(); 
+  
+  /* Y should be vector of +1 */
+  failure = check_ans(ONE, Y, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 1b, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 1b \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  /*
+   * Case 1c: y = ax + y, (Vaxpy Case 3)
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(TWO, X);
+  N_VConst(NEG_TWO, Y);
+
+  start_time = get_time(); 
+  N_VLinearSum(HALF, X, ONE, Y, Y);
+  stop_time = get_time(); 
+  
+  /* Y should be vector of -1 */
+  failure = check_ans(NEG_ONE, Y, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 1c, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 1c \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  /*
+   * Case 2a: x = x + y, (Vaxpy Case 1)
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(TWO, X);
+  N_VConst(NEG_ONE, Y);
+
+  start_time = get_time(); 
+  N_VLinearSum(ONE, X, ONE, Y, X);
+  stop_time = get_time(); 
+  
+  /* Y should be vector of +1 */
+  failure = check_ans(ONE, X, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 2a, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 2a \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  /*
+   * Case 2b: x = x - y, (Vaxpy Case 2)
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(ONE, X);
+  N_VConst(TWO, Y);
+
+  start_time = get_time(); 
+  N_VLinearSum(ONE, X, NEG_ONE, Y, X);
+  stop_time = get_time(); 
+  
+  /* Y should be vector of -1 */
+  failure = check_ans(NEG_ONE, X, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 2b, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 2b \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  /* 
+   * Case 2c: x = x + by, (Vaxpy Case 3) 
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(TWO, X);
+  N_VConst(NEG_HALF, Y);
+
+  start_time = get_time(); 
+  N_VLinearSum(ONE, X, TWO, Y, X);
+  stop_time = get_time(); 
+  
+  /* X should be vector of +1 */
+  failure = check_ans(ONE, X, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 2c, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 2c \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  /* 
+   * Case 3: z = x + y, (VSum) 
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(NEG_TWO, X);
+  N_VConst(ONE, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time(); 
+  N_VLinearSum(ONE, X, ONE, Y, Z);
+  stop_time = get_time(); 
+  
+  /* Z should be vector of -1 */
+  failure = check_ans(NEG_ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 3, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 3 \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  /* 
+   * Case 4a: z = x - y, (VDiff) 
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(TWO, X);
+  N_VConst(ONE, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time(); 
+  N_VLinearSum(ONE, X, NEG_ONE, Y, Z);
+  stop_time = get_time(); 
+  
+  /* Z should be vector of +1 */
+  failure = check_ans(ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 4a, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 4a \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  /* 
+   * Case 4b: z = -x + y, (VDiff) 
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(TWO, X);
+  N_VConst(ONE, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time(); 
+  N_VLinearSum(NEG_ONE, X, ONE, Y, Z);
+  stop_time = get_time(); 
+  
+  /* Z should be vector of -1 */
+  failure = check_ans(NEG_ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 4b, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 4b \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  /* 
+   * Case 5a: z = x + by, (VLin1) 
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(TWO, X);
+  N_VConst(NEG_HALF, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time(); 
+  N_VLinearSum(ONE, X, TWO, Y, Z);
+  stop_time = get_time(); 
+  
+  /* Z should be vector of +1 */
+  failure = check_ans(ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 5a, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 5a \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /* 
+   * Case 5b: z = ax + y, (VLin1) 
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(HALF, X);
+  N_VConst(NEG_TWO, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time(); 
+  N_VLinearSum(TWO, X, ONE, Y, Z);
+  stop_time = get_time(); 
+  
+  /* Z should be vector of -1 */
+  failure = check_ans(NEG_ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 5b, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 5b \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /* 
+   * Case 6a: z = -x + by, (VLin2) 
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(NEG_TWO, X);
+  N_VConst(NEG_HALF, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time(); 
+  N_VLinearSum(NEG_ONE, X, TWO, Y, Z);
+  stop_time = get_time(); 
+  
+  /* Z should be vector of +1 */
+  failure = check_ans(ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 6a, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 6a \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /* 
+   * Case 6b: z = ax - y, (VLin2) 
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(HALF, X);
+  N_VConst(TWO, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time(); 
+  N_VLinearSum(TWO, X, NEG_ONE, Y, Z);
+  stop_time = get_time(); 
+  
+  /* Z should be vector of -1 */
+  failure = check_ans(NEG_ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 6b, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 6b \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /* 
+   * Case 7: z = a(x + y), (VScaleSum) 
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(ONE, X);
+  N_VConst(NEG_HALF, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time(); 
+  N_VLinearSum(TWO, X, TWO, Y, Z);
+  stop_time = get_time(); 
+  
+  /* Z should be vector of +1 */
+  failure = check_ans(ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 7, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 7 \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /* 
+   * Case 8: z = a(x - y), (VScaleDiff) 
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(HALF, X);
+  N_VConst(ONE, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time(); 
+  N_VLinearSum(TWO, X, NEG_TWO, Y, Z);
+  stop_time = get_time(); 
+  
+  /* Z should be vector of -1 */
+  failure = check_ans(NEG_ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 8, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 8 \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /* 
+   * Case 9: z = ax + by, All Other Cases
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(ONE, X);
+  N_VConst(NEG_TWO, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time(); 
+  N_VLinearSum(TWO, X, HALF, Y, Z);
+  stop_time = get_time(); 
+  
+  /* Z should be vector of +1 */
+  failure = check_ans(ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VLinearSum Case 9, Proc %d \n", myid);
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VLinearSum Case 9 \n");
+    PRINT_TIME("    N_VLinearSum Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VConst Test
+ * --------------------------------------------------------------------*/
+int Test_N_VConst(N_Vector X, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+  long int i;
+
+  /* fill vector data */
+  for(i=0; i < local_length; i++){
+    set_element(X, i, ZERO);
+  }
+
+  start_time = get_time();
+  N_VConst(ONE,X);
+  stop_time = get_time(); 
+
+  /* X should be vector of +1 */
+  failure = check_ans(ONE, X, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VConst, Proc %d \n", myid);
+    PRINT_TIME("    N_VConst Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VConst \n");
+    PRINT_TIME("    N_VConst Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VProd Test
+ * --------------------------------------------------------------------*/
+int Test_N_VProd(N_Vector X, N_Vector Y, N_Vector Z, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+
+  /* fill vector data */
+  N_VConst(TWO, X);
+  N_VConst(NEG_HALF, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time();
+  N_VProd(X, Y, Z);
+  stop_time = get_time(); 
+
+  /* Z should be vector of -1 */
+  failure = check_ans(NEG_ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VProd, Proc %d \n", myid);
+    PRINT_TIME("    N_VProd Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VProd \n");
+    PRINT_TIME("    N_VProd Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VDiv Test
+ * --------------------------------------------------------------------*/
+int Test_N_VDiv(N_Vector X, N_Vector Y, N_Vector Z, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+
+  /* fill vector data */
+  N_VConst(ONE, X);
+  N_VConst(TWO, Y);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time();
+  N_VDiv(X, Y, Z);
+  stop_time = get_time(); 
+
+  /* Z should be vector of +1/2 */
+  failure = check_ans(HALF, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VDiv, Proc %d \n", myid);
+    PRINT_TIME("    N_VDiv Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VDiv \n");
+    PRINT_TIME("    N_VDiv Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VScale Tests
+ * --------------------------------------------------------------------*/
+int Test_N_VScale(N_Vector X, N_Vector Z, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+
+  /* 
+   * Case 1: x = cx, VScaleBy
+   */
+
+  /* fill vector data */
+  N_VConst(HALF, X);
+
+  start_time = get_time();
+  N_VScale(TWO, X, X);
+  stop_time = get_time(); 
+
+  /* X should be vector of +1 */
+  failure = check_ans(ONE, X, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VScale Case 1, Proc %d \n", myid);
+    PRINT_TIME("    N_VScale Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VScale Case 1 \n");
+    PRINT_TIME("    N_VScale Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /* 
+   * Case 2: z = x, VCopy
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(NEG_ONE, X);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time();
+  N_VScale(ONE, X, Z);
+  stop_time = get_time(); 
+
+  /* Z should be vector of -1 */
+  failure = check_ans(NEG_ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VScale Case 2, Proc %d \n", myid);
+    PRINT_TIME("    N_VScale Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VScale Case 2 \n");
+    PRINT_TIME("    N_VScale Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /* 
+   * Case 3: z = -x, VNeg
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(NEG_ONE, X);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time();
+  N_VScale(NEG_ONE, X, Z);
+  stop_time = get_time(); 
+
+  /* Z should be vector of +1 */
+  failure = check_ans(ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VScale Case 3, Proc %d \n", myid);
+    PRINT_TIME("    N_VScale Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VScale Case 3 \n");
+    PRINT_TIME("    N_VScale Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /* 
+   * Case 4: z = cx, All other cases
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(NEG_HALF, X);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time();
+  N_VScale(TWO, X, Z);
+  stop_time = get_time(); 
+
+  /* Z should be vector of -1 */
+  failure = check_ans(NEG_ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VScale Case 4, Proc %d \n", myid);
+    PRINT_TIME("    N_VScale Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VScale Case 4 \n");
+    PRINT_TIME("    N_VScale Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VAbs Test
+ * --------------------------------------------------------------------*/
+int Test_N_VAbs(N_Vector X, N_Vector Z, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+
+  /* fill vector data */
+  N_VConst(NEG_ONE, X);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time();
+  N_VAbs(X,Z);
+  stop_time = get_time(); 
+
+  /* Z should be vector of +1 */
+  failure = check_ans(ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VAbs, Proc %d \n", myid);
+    PRINT_TIME("    N_VAbs Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VAbs \n");
+    PRINT_TIME("    N_VAbs Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VInv Test
+ * --------------------------------------------------------------------*/
+int Test_N_VInv(N_Vector X, N_Vector Z, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+
+  /* fill vector data */
+  N_VConst(TWO, X);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time();
+  N_VInv(X,Z);
+  stop_time = get_time(); 
+
+  /* Z should be vector of +1/2 */
+  failure = check_ans(HALF, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VInv, Proc %d \n", myid);
+    PRINT_TIME("    N_VInv Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VInv \n");
+    PRINT_TIME("    N_VInv Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VAddConst Test
+ * --------------------------------------------------------------------*/
+int Test_N_VAddConst(N_Vector X, N_Vector Z, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+
+  /* fill vector data */
+  N_VConst(ONE, X);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time();
+  N_VAddConst(X,NEG_TWO,Z);
+  stop_time = get_time(); 
+
+  /* Z should be vector of -1 */
+  failure = check_ans(NEG_ONE, Z, local_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VAddConst, Proc %d \n", myid);
+    PRINT_TIME("    N_VAddConst Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VAddConst \n");
+    PRINT_TIME("    N_VAddConst Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VDotProd Test
+ * --------------------------------------------------------------------*/
+int Test_N_VDotProd(N_Vector X, N_Vector Y, 
+                    long int local_length, long int global_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+  realtype ans;
+
+  /* fill vector data */
+  N_VConst(TWO, X);
+  N_VConst(HALF, Y);
+
+  start_time = get_time();
+  ans = N_VDotProd(X,Y);
+  stop_time = get_time(); 
+
+  /* ans should equal global vector length */
+  failure = FNEQ(ans, global_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VDotProd, Proc %d \n", myid);
+    PRINT_TIME("    N_VDotProd Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VDotProd \n");
+    PRINT_TIME("    N_VDotProd Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VMaxNorm Test
+ * --------------------------------------------------------------------*/
+int Test_N_VMaxNorm(N_Vector X, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+  realtype ans;
+
+  /* fill vector data */
+  N_VConst(NEG_ONE, X);
+  set_element(X, local_length-1, NEG_TWO);
+  
+  start_time = get_time();
+  ans = N_VMaxNorm(X);
+  stop_time = get_time(); 
+
+  /* ans should equal 2 */
+  failure = (ans < ZERO) ? 1 : FNEQ(ans, TWO);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VMaxNorm, Proc %d \n", myid);
+    PRINT_TIME("    N_VMaxNorm Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VMaxNorm \n");
+    PRINT_TIME("    N_VMaxNorm Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VWrmsNorm Test
+ * --------------------------------------------------------------------*/
+int Test_N_VWrmsNorm(N_Vector X, N_Vector W, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+  realtype ans;
+
+  /* fill vector data */
+  N_VConst(NEG_HALF, X);
+  N_VConst(HALF, W);
+
+  start_time = get_time();
+  ans = N_VWrmsNorm(X, W);
+  stop_time = get_time(); 
+
+  /* ans should equal 1/4 */
+  failure = (ans < ZERO) ? 1 : FNEQ(ans, HALF*HALF);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VWrmsNorm, Proc %d \n", myid);
+    PRINT_TIME("    N_VWrmsNorm Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VWrmsNorm \n");
+    PRINT_TIME("    N_VWrmsNorm Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VWrmsNormMask Test
+ * --------------------------------------------------------------------*/
+int Test_N_VWrmsNormMask(N_Vector X, N_Vector W, N_Vector ID, 
+			 long int local_length, long int global_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+  realtype ans;
+
+  /* 
+   * Case 1: use all elements, ID = 1
+   */
+
+  /* fill vector data */
+  N_VConst(NEG_HALF, X);
+  N_VConst(HALF, W);
+  N_VConst(ONE, ID);
+
+  start_time = get_time();
+  ans = N_VWrmsNormMask(X, W, ID);
+  stop_time = get_time(); 
+  
+  /* ans equals 1/4 (same as wrms norm) */
+  failure = (ans < ZERO) ? 1 : FNEQ(ans, HALF*HALF);
+    
+  if (failure) {
+    printf(">>> FAILED test -- N_VWrmsNormMask Case 1, Proc %d \n", myid);
+    PRINT_TIME("    N_VWrmsNormMask Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VWrmsNormMask Case 1 \n");
+    PRINT_TIME("    N_VWrmsNormMask Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /* 
+   * Case 2: use no elements, ID = 0
+   */
+  
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(NEG_HALF, X);
+  N_VConst(HALF, W);
+  N_VConst(ZERO, ID);
+
+  start_time = get_time();
+  ans = N_VWrmsNormMask(X, W, ID);
+  stop_time = get_time(); 
+  
+  /* ans equals 0 (skips all elements) */
+  failure = (ans < ZERO) ? 1 : FNEQ(ans, ZERO);
+    
+  if (failure) {
+    printf(">>> FAILED test -- N_VWrmsNormMask Case 2, Proc %d \n", myid);
+    PRINT_TIME("    N_VWrmsNormMask Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VWrmsNormMask Case 2 \n");
+    PRINT_TIME("    N_VWrmsNormMask Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VMin Test
+ * --------------------------------------------------------------------*/
+int Test_N_VMin(N_Vector X, long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+  realtype ans;
+
+  /* fill vector data */
+  N_VConst(TWO, X);
+  set_element(X, local_length-1, NEG_ONE);
+
+  start_time = get_time();
+  ans = N_VMin(X);
+  stop_time = get_time(); 
+
+  /* ans should equal -1 */
+  failure = FNEQ(ans, NEG_ONE);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VMin, Proc %d \n", myid);
+    PRINT_TIME("    N_VMin Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VMin \n");
+    PRINT_TIME("    N_VMin Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VWL2Norm Test
+ * --------------------------------------------------------------------*/
+int Test_N_VWL2Norm(N_Vector X, N_Vector W, 
+                    long int local_length, long int global_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+  realtype ans;
+
+  /* fill vector data */
+  N_VConst(NEG_HALF, X);
+  N_VConst(HALF, W);
+
+  start_time = get_time();
+  ans = N_VWL2Norm(X, W);
+  stop_time = get_time(); 
+
+  /* ans should equal 1/4 * sqrt(global_length) */
+  failure = (ans < ZERO) ? 1 : FNEQ(ans, HALF*HALF*SUNRsqrt((realtype) global_length));
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VWL2Norm, Proc %d \n", myid);
+    PRINT_TIME("    N_VWL2Norm Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VWL2Norm \n");
+    PRINT_TIME("    N_VWL2Norm Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VL1Norm Test
+ * --------------------------------------------------------------------*/
+int Test_N_VL1Norm(N_Vector X, long int local_length, 
+                   long int global_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+  realtype ans;
+
+  /* fill vector data */
+  N_VConst(NEG_ONE, X);
+
+  start_time = get_time();
+  ans = N_VL1Norm(X);
+  stop_time = get_time(); 
+
+  /* ans should equal global_length */
+  failure = (ans < ZERO) ? 1 : FNEQ(ans, global_length);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VL1Norm, Proc %d \n", myid);
+    PRINT_TIME("    N_VL1Norm Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VL1Norm \n");
+    PRINT_TIME("    N_VL1Norm Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VCompare
+ * --------------------------------------------------------------------*/
+int Test_N_VCompare(N_Vector X, N_Vector Z, long int local_length, int myid)
+{
+  int      mask, fails = 0, failure = 0;
+  double   start_time, stop_time;
+  long int i;
+
+  if (local_length < 3) {
+    printf("Error Test_N_VCompare: Local vector length is %ld, length must be >= 3", local_length);
+    return(-1);
+  }
+
+  /* fill vector data */
+  for(i=0; i < local_length; i++){
+    set_element(Z, i, NEG_ONE);
+
+    mask = i % 3;
+    switch(mask) {
+
+    case 0 :
+      /* abs(X[i]) < c */
+      set_element(X, i, ZERO);
+      break;
+
+    case 1 :
+      /* abs(X[i]) = c */
+      set_element(X, i, NEG_ONE);
+      break;
+      
+    case 2 :
+      /* abs(X[i]) > c */
+      set_element(X, i, NEG_TWO);
+      break;
+    }
+  }
+
+  start_time = get_time();
+  N_VCompare(ONE, X, Z);
+  stop_time = get_time(); 
+
+  /* check return vector */
+  for(i=0; i < local_length; i++){
+    mask = i % 3;
+
+    switch(mask) {
+
+    case 0 :
+      /* Z[i] == 0 */
+      if (get_element(Z, i) != ZERO)
+        failure = 1;
+      break;
+
+    case 1 :
+      /* Z[i] == 1 */
+      if (get_element(Z, i) != ONE)
+        failure = 1;
+      break;
+      
+    case 2 :
+      /* Z[i] == 1 */
+      if (get_element(Z, i) != ONE)
+        failure = 1;
+      break;
+    }
+  }
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VCompare, Proc %d \n", myid);
+    PRINT_TIME("    N_VCompare Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VCompare \n");
+    PRINT_TIME("    N_VCompare Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VInvTest
+ * --------------------------------------------------------------------*/
+int Test_N_VInvTest(N_Vector X, N_Vector Z, long int local_length, int myid)
+{
+  int         mask, fails = 0, failure = 0;
+  double      start_time, stop_time;
+  long int    i;
+  booleantype test;
+
+  if (local_length < 2) {
+    printf("Error Test_N_VCompare: Local vector length is %ld, length must be >= 2", local_length);
+    return(-1);
+  }
+
+  /*
+   * Case 1: All elements Nonzero, z[i] = 1/x[i], return True
+   */
+
+  /* fill vector data */
+  N_VConst(HALF, X);
+  N_VConst(ZERO, Z);
+
+  start_time = get_time();
+  test = N_VInvTest(X, Z);
+  stop_time = get_time(); 
+
+  /* Z should be vector of +2 */
+  failure = check_ans(TWO, Z, local_length);
+
+  if (failure || !test) {
+    printf(">>> FAILED test -- N_VInvTest Case 1, Proc %d \n", myid);
+    PRINT_TIME("    N_VInvTest Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VInvTest Case 1 \n");
+    PRINT_TIME("    N_VInvTest Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /*
+   * Case 2: Some elements Zero, z[i] = 1/x[i] for x[i] != 0, return False
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(ZERO, Z);
+  for(i=0; i < local_length; i++){
+    mask = i % 2;   
+    if (mask)
+      set_element(X, i, HALF);
+    else
+      set_element(X, i, ZERO);
+  }
+
+  start_time = get_time();
+  test = N_VInvTest(X, Z);
+  stop_time = get_time();
+
+  /* check return vector */
+  for(i=0; i < local_length; i++){
+    mask = i % 2;
+
+    if (mask) {
+      if (get_element(Z, i) != TWO) 
+        failure = 1;
+    } else {
+      if (get_element(Z, i) != ZERO) 
+        failure = 1;
+    }
+  }
+
+  if (failure || test) {
+    printf(">>> FAILED test -- N_VInvTest Case 2, Proc %d \n", myid);
+    PRINT_TIME("    N_VInvTest Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VInvTest Case 2 \n");
+    PRINT_TIME("    N_VInvTest Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VConstrMask
+ * --------------------------------------------------------------------*/
+int Test_N_VConstrMask(N_Vector C, N_Vector X, N_Vector M, 
+                       long int local_length, int myid)
+{
+  int         mask, fails = 0, failure = 0;
+  double      start_time, stop_time;
+  long int    i;
+  booleantype test;
+
+  if (local_length < 7) {
+    printf("Error Test_N_VCompare: Local vector length is %ld, length must be >= 7", local_length);
+    return(-1);
+  }
+
+  /*
+   * Case 1: Return True
+   */
+
+  /* fill vector data */
+  for(i=0; i < local_length; i++){
+    set_element(M, i, NEG_ONE);
+
+    mask = i % 7;  
+    switch(mask) {
+    case 0 :
+      /* c = -2, test for < 0*/
+      set_element(C, i, NEG_TWO);
+      set_element(X, i, NEG_TWO);
+      break;
+      
+    case 1 :
+      /* c = -1, test for <= 0 */
+      set_element(C, i, NEG_ONE);
+      set_element(X, i, NEG_ONE);	
+      break;
+      
+    case 2 :
+      /* c = -1, test for == 0 */
+      set_element(C, i, NEG_ONE);
+      set_element(X, i, ZERO); 
+      break;
+      
+    case 3 :
+      /* c = 0, no test */
+      set_element(C, i, ZERO);
+      set_element(X, i, HALF);
+      break;
+      
+    case 4 :
+      /* c = 1, test for == 0*/
+      set_element(C, i, ONE);
+      set_element(X, i, ZERO);
+      break;
+      
+    case 5 :
+      /* c = 1, test for >= 0*/
+      set_element(C, i, ONE);
+      set_element(X, i, ONE);
+      break;
+      
+    case 6:
+      /* c = 2, test for > 0 */
+      set_element(C, i, TWO);
+      set_element(X, i, TWO);
+      break;
+    }
+  }
+
+  start_time = get_time(); 
+  test = N_VConstrMask(C, X, M);
+  stop_time = get_time();
+
+  /* M should be vector of 0 */
+  failure = check_ans(ZERO, M, local_length);
+
+  if (failure || !test) {
+    printf(">>> FAILED test -- N_VConstrMask Case 1, Proc %d \n", myid);
+    PRINT_TIME("    N_VConstrMask Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VConstrMask Case 1 \n");
+    PRINT_TIME("    N_VConstrMask Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  /*
+   * Case 2: Return False
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  for(i=0; i < local_length; i++){
+    set_element(M, i, NEG_ONE);
+    
+    mask = i % 5;  
+    switch(mask) {
+    case 0 :
+      /* c = -2, test for < 0*/
+      set_element(C, i, NEG_TWO);
+      set_element(X, i, TWO);
+      break;
+
+    case 1 :
+      /* c = -1, test for <= 0 */
+      set_element(C, i, NEG_ONE);
+      set_element(X, i, ONE);	
+      break;
+      
+    case 2 :
+      /* c = 0, no test */
+      set_element(C, i, ZERO);
+      set_element(X, i, HALF);
+      break;
+
+    case 3 :
+      /* c = 1, test for >= 0*/
+      set_element(C, i, ONE);
+      set_element(X, i, NEG_ONE);
+      break;
+
+    case 4 :
+      /* c = 2, test for > 0 */
+      set_element(C, i, TWO);
+      set_element(X, i, NEG_TWO);
+      break;
+    }
+  }
+
+  start_time = get_time();  
+  test = N_VConstrMask(C, X, M);
+  stop_time = get_time();
+
+  /* check mask vector */
+  for(i=0; i < local_length; i++){
+    mask = i % 5;
+    
+    if (mask == 2){
+      if (get_element(M, i) != ZERO) 
+        failure = 1;
+    } else {
+      if (get_element(M, i) != ONE)
+        failure = 1;
+    }
+  }
+  
+  if (failure || test) {
+    printf(">>> FAILED test -- N_VConstrMask Case 2, Proc %d \n", myid);
+    PRINT_TIME("    N_VConstrMask Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VConstrMask Case 2 \n");
+    PRINT_TIME("    N_VConstrMask Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ----------------------------------------------------------------------
+ * N_VMinQuotient Test
+ * --------------------------------------------------------------------*/
+int Test_N_VMinQuotient(N_Vector NUM, N_Vector DENOM, 
+                        long int local_length, int myid)
+{
+  int      fails = 0, failure = 0;
+  double   start_time, stop_time;
+  realtype ans;
+
+  /*
+   * Case 1: Pass
+   */
+
+  /* fill vector data */
+  N_VConst(TWO, NUM);
+  N_VConst(TWO, DENOM);
+  set_element(NUM, local_length-1, ONE);
+
+  start_time = get_time();
+  ans = N_VMinQuotient(NUM, DENOM);
+  stop_time = get_time(); 
+
+  /* ans should equal 1/2 */
+  failure = FNEQ(ans, HALF);
+  
+  if (failure) {
+    printf(">>> FAILED test -- N_VMinQuotient Case 1, Proc %d \n", myid);
+    PRINT_TIME("    N_VMinQuotient Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VMinQuotient Case 1 \n");
+    PRINT_TIME("    N_VMinQuotient Time: %22.15e \n \n", stop_time - start_time);
+  }    
+  
+  /*
+   * Case 2: Fail
+   */
+
+  /* reset failure */
+  failure = 0;
+
+  /* fill vector data */
+  N_VConst(TWO, NUM);
+  N_VConst(ZERO, DENOM);
+
+  start_time = get_time();
+  ans = N_VMinQuotient(NUM, DENOM);
+  stop_time = get_time(); 
+  
+  /* ans should equal BIG_REAL */
+  failure = FNEQ(ans, BIG_REAL);
+
+  if (failure) {
+    printf(">>> FAILED test -- N_VMinQuotient Case 2, Proc %d \n", myid);
+    PRINT_TIME("    N_VMinQuotient Time: %22.15e \n \n", stop_time - start_time);
+    fails++;
+  }
+  else if (myid == 0) {
+    printf("    PASSED test -- N_VMinQuotient Case 2 \n");
+    PRINT_TIME("    N_VMinQuotient Time: %22.15e \n \n", stop_time - start_time);
+  }    
+
+  return(fails);
+}
+
+
+/* ======================================================================
+ * Private functions
+ * ====================================================================*/
+
+#if defined( SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS)
+time_t base_time_tv_sec = 0; /* Base time; makes time values returned
+                                by get_time easier to read when
+                                printed since they will be zero
+                                based.
+                              */
+#endif
+
+void SetTiming(int onoff)
+{
+   print_time = onoff;
+
+#if defined( SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS)
+  struct timespec spec;  
+  clock_gettime( CLOCK_MONOTONIC_RAW, &spec );
+  base_time_tv_sec = spec.tv_sec;
+#endif
+}
+
+/* ----------------------------------------------------------------------
+ * Timer
+ * --------------------------------------------------------------------*/
+static double get_time()
+{
+#if defined( SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS)
+  struct timespec spec;  
+  clock_gettime( CLOCK_MONOTONIC_RAW, &spec );
+  double time = (double)(spec.tv_sec - base_time_tv_sec) + ((double)(spec.tv_nsec) / 1E9);
+#else
+  double time = 0;
+#endif
+  return time;
+}
+
+
diff --git a/examples/nvector/test_nvector.h b/examples/nvector/test_nvector.h
new file mode 100644
index 0000000..81852c9
--- /dev/null
+++ b/examples/nvector/test_nvector.h
@@ -0,0 +1,87 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 1.0 $
+ * $Date: 2013/08/31 12:25:00 $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): David J. Gardner @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file contains the prototypes for functions to 
+ * test an NVECTOR module implementation. 
+ * -----------------------------------------------------------------
+ */
+
+#include <math.h>
+
+/* define constatnts */
+#define NEG_TWO  RCONST(-2.0)
+#define NEG_ONE  RCONST(-1.0)
+#define NEG_HALF RCONST(-0.5)
+#define ZERO     RCONST(0.0)
+#define HALF     RCONST(0.5)
+#define ONE      RCONST(1.0)
+#define TWO      RCONST(2.0)
+
+/* NAN and floating point "equality" check, failure update macro */
+#if __STDC_VERSION__ >= 199901L
+#define FNEQ(a,b) (isnan(a) ? 1 : ( SUNRabs((a)-(b))/SUNRabs(b) > 1.0e-15 ))
+#else
+#define FNEQ(a,b) (( SUNRabs((a)-(b))/SUNRabs(b) > 1.0e-15 ))
+#endif
+
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+  /* Forward declarations for implementation specific utility functions */
+  int check_ans(realtype ans, N_Vector X, long int local_length);
+  booleantype has_data(N_Vector X);
+  void set_element(N_Vector X, long int i, realtype val);
+  realtype get_element(N_Vector X, long int i);
+
+  /* Test function declarations */
+  int Test_N_VCloneVectorArray(int count, N_Vector W, long int local_length, int myid);
+  int Test_N_VCloneEmptyVectorArray(int count, N_Vector W, int myid);
+  int Test_N_VCloneEmpty(N_Vector W, int myid);
+  int Test_N_VClone(N_Vector W, long int local_length, int myid);
+  int Test_N_VGetArrayPointer(N_Vector W, long int local_length, int myid);
+  int Test_N_VSetArrayPointer(N_Vector W, long int local_length, int myid);
+  int Test_N_VLinearSum(N_Vector X, N_Vector Y, N_Vector Z, 
+                        long int local_length, int myid);
+  int Test_N_VConst(N_Vector X, long int local_length, int myid);
+  int Test_N_VProd(N_Vector X, N_Vector Y, N_Vector Z, long int local_length, int myid);
+  int Test_N_VDiv(N_Vector X, N_Vector Y, N_Vector Z, long int local_length, int myid);
+  int Test_N_VScale(N_Vector X, N_Vector Z, long int local_length, int myid);
+  int Test_N_VAbs(N_Vector X, N_Vector Z, long int local_length, int myid);
+  int Test_N_VInv(N_Vector X, N_Vector Z, long int local_length, int myid);
+  int Test_N_VAddConst(N_Vector X, N_Vector Z, long int local_length, int myid);
+  int Test_N_VDotProd(N_Vector X, N_Vector Y, 
+                      long int local_length, long int global_length, int myid);
+  int Test_N_VMaxNorm(N_Vector X, long int local_length, int myid); 
+  int Test_N_VWrmsNorm(N_Vector X, N_Vector W, long int local_length, int myid);
+  int Test_N_VWrmsNormMask(N_Vector X, N_Vector W, N_Vector ID, 
+                           long int local_length, long int global_length, int myid);
+  int Test_N_VMin(N_Vector X, long int local_length, int myid); 
+  int Test_N_VWL2Norm(N_Vector X, N_Vector W, 
+                      long int local_length, long int global_length, int myid);
+  int Test_N_VL1Norm(N_Vector X, long int local_length, long int global_length, int myid);
+  int Test_N_VCompare(N_Vector X, N_Vector Z, long int local_length, int myid);
+  int Test_N_VInvTest(N_Vector X, N_Vector Z, long int local_length, int myid);
+  int Test_N_VConstrMask(N_Vector C, N_Vector X, N_Vector M, 
+                         long int local_length, int myid);
+  int Test_N_VMinQuotient(N_Vector NUM, N_Vector DENOM, long int local_length, int myid);
+
+  void SetTiming(int onoff);
+  
+#ifdef __cplusplus
+}
+#endif
diff --git a/examples/templates/cmakelists_openmp_C_ex.in b/examples/templates/cmakelists_openmp_C_ex.in
new file mode 100644
index 0000000..c12b5e3
--- /dev/null
+++ b/examples/templates/cmakelists_openmp_C_ex.in
@@ -0,0 +1,111 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ OpenMP examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(@SOLVER at _openmp_examples C)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@ @EXAMPLES_BL@)
+LIST(REMOVE_DUPLICATES examples)
+
+# Set names of examples specific dependency source files
+SET(examples_dependencies @EXAMPLES_DEPENDENCIES@)
+
+# Specify path to SUNDIALS header files
+SET(SUNDIALS_INC_DIR
+  @includedir@
+  CACHE STRING
+  "Location of SUNDIALS header files")
+  
+# Add path to SUNDIALS header files
+INCLUDE_DIRECTORIES(${SUNDIALS_INC_DIR})
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecopenmp ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+SET(PETSC_LIBRARIES @PETSC_LIBRARIES@ CACHE STRING "PETSC libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS ${SUNDIALS_SOLVER_LIB} ${SUNDIALS_NVEC_LIB} ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+IF(PETSC_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_LIBRARIES)
+
+FIND_PACKAGE(OpenMP)
+IF(OPENMP_FOUND)
+  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+  # Use C flags for linker as well.
+  SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+ELSE(OPENMP_FOUND)
+  message(STATUS "Disabling OpenMP support, could not determine compiler flags")
+ENDIF(OPENMP_FOUND)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.c ${examples_dependencies})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
+ 
diff --git a/examples/templates/cmakelists_openmp_F77_ex.in b/examples/templates/cmakelists_openmp_F77_ex.in
new file mode 100644
index 0000000..3fba4e9
--- /dev/null
+++ b/examples/templates/cmakelists_openmp_F77_ex.in
@@ -0,0 +1,107 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ openmp examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(F at SOLVER@_openmp_examples Fortran C)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@ @EXAMPLES_BL@)
+LIST(REMOVE_DUPLICATES examples)
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+FIND_LIBRARY(SUNDIALS_SOLVER_FLIB
+  @SOLVER_FLIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ F77-C library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecopenmp ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+FIND_LIBRARY(SUNDIALS_NVEC_FLIB
+  sundials_fnvecopenmp ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR F77-C library")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+SET(PETSC_LIBRARIES @PETSC_LIBRARIES@ CACHE STRING "PETSC libraries")
+
+FIND_PACKAGE(OpenMP)
+IF(OPENMP_FOUND)
+  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+  # Use C flags for linker as well.
+  SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+ELSE(OPENMP_FOUND)
+  message(STATUS "Disabling OpenMP support, could not determine compiler flags")
+ENDIF(OPENMP_FOUND)
+
+# List of all libraries
+SET(SUNDIALS_LIBS 
+  ${SUNDIALS_SOLVER_FLIB} ${SUNDIALS_SOLVER_LIB}
+  ${SUNDIALS_NVEC_FLIB} ${SUNDIALS_NVEC_LIB}
+  ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+IF(PETSC_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.f)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
+
diff --git a/examples/templates/cmakelists_parallel_CXX_ex.in b/examples/templates/cmakelists_parallel_CXX_ex.in
new file mode 100644
index 0000000..381a8ca
--- /dev/null
+++ b/examples/templates/cmakelists_parallel_CXX_ex.in
@@ -0,0 +1,100 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ parallel examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(@SOLVER at _CXX_parallel_examples CXX)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@)
+
+# Set name of MPI compiler to be used (CXX or MPICXX)
+SET(MPI_MPICXX @MPICXX@ CACHE STRING "MPICXX compiler script")
+SET(CMAKE_CXX_COMPILER ${MPI_MPICXX})
+
+# Specify path to SUNDIALS header files
+SET(SUNDIALS_INC_DIR
+  @includedir@
+  CACHE STRING
+  "Location of SUNDIALS header files")
+
+# Add path to SUNDIALS header files
+INCLUDE_DIRECTORIES(${SUNDIALS_INC_DIR})
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecparallel ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+SET(PETSC_LIBRARIES @PETSC_LIBRARIES@ CACHE STRING "PETSC libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS ${SUNDIALS_SOLVER_LIB} ${SUNDIALS_NVEC_LIB} ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+IF(PETSC_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.cpp)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
diff --git a/examples/templates/cmakelists_parallel_C_ex.in b/examples/templates/cmakelists_parallel_C_ex.in
new file mode 100644
index 0000000..0f8b9f5
--- /dev/null
+++ b/examples/templates/cmakelists_parallel_C_ex.in
@@ -0,0 +1,104 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ parallel examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(@SOLVER at _parallel_examples C)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@)
+LIST(REMOVE_DUPLICATES examples)
+
+# Set names of examples specific dependency source files
+SET(examples_dependencies @EXAMPLES_DEPENDENCIES@)
+
+# Set name of MPI compiler to be used (CC or MPICC)
+SET(MPI_MPICC @MPICC@ CACHE STRING "MPICC compiler script")
+SET(CMAKE_C_COMPILER ${MPI_MPICC})
+
+# Specify path to SUNDIALS header files
+SET(SUNDIALS_INC_DIR
+  @includedir@
+  CACHE STRING
+  "Location of SUNDIALS header files")
+
+# Add path to SUNDIALS header files
+INCLUDE_DIRECTORIES(${SUNDIALS_INC_DIR})
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecparallel ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+SET(PETSC_LIBRARIES @PETSC_LIBRARIESY@ CACHE STRING "PETSC libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS ${SUNDIALS_SOLVER_LIB} ${SUNDIALS_NVEC_LIB} ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+IF(PETSC_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.c ${examples_dependencies})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
diff --git a/examples/templates/cmakelists_parallel_F77_ex.in b/examples/templates/cmakelists_parallel_F77_ex.in
new file mode 100644
index 0000000..dc88376
--- /dev/null
+++ b/examples/templates/cmakelists_parallel_F77_ex.in
@@ -0,0 +1,102 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ Fortran parallel examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(F at SOLVER@_parallel_examples Fortran)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@)
+
+# Set name of MPI compiler to be used (F77 or MPIF77)
+SET(MPI_MPIF77 @MPIF77@ CACHE STRING "MPIF77 compiler script")
+SET(CMAKE_Fortran_COMPILER ${MPI_MPIF77})
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+FIND_LIBRARY(SUNDIALS_SOLVER_FLIB
+  @SOLVER_FLIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ F77-C library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecparallel ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+FIND_LIBRARY(SUNDIALS_NVEC_FLIB
+  sundials_fnvecparallel ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR F77-C library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+SET(PETSC_LIBRARIES @PETSC_LIBRARIES@ CACHE STRING "PETSC libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS 
+  ${SUNDIALS_SOLVER_FLIB} ${SUNDIALS_SOLVER_LIB} 
+  ${SUNDIALS_NVEC_FLIB} ${SUNDIALS_NVEC_LIB} 
+  ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+IF(PETSC_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.f)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS}) 
+ENDFOREACH(example ${examples})
diff --git a/examples/templates/cmakelists_parallel_F90_ex.in b/examples/templates/cmakelists_parallel_F90_ex.in
new file mode 100644
index 0000000..3bd95fe
--- /dev/null
+++ b/examples/templates/cmakelists_parallel_F90_ex.in
@@ -0,0 +1,97 @@
+# -----------------------------------------------------------------
+# $Revision: 4944 $
+# $Date: 2016-09-21 21:48:35 -0700 (Wed, 21 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ Fortran parallel examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(F90 at SOLVER@_parallel_examples Fortran)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@)
+
+# Set name of MPI compiler to be used (F90 or MPIF90)
+SET(MPI_MPIF90 @MPIF90@ CACHE STRING "MPIF90 compiler script")
+SET(CMAKE_Fortran_COMPILER ${MPI_MPIF90})
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+FIND_LIBRARY(SUNDIALS_SOLVER_FLIB
+  @SOLVER_FLIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ Fortran-C library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecparallel ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+FIND_LIBRARY(SUNDIALS_NVEC_FLIB
+  sundials_fnvecparallel ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR F90-C library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS 
+  ${SUNDIALS_SOLVER_FLIB} ${SUNDIALS_SOLVER_LIB} 
+  ${SUNDIALS_NVEC_FLIB} ${SUNDIALS_NVEC_LIB} 
+  ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.f90)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS}) 
+ENDFOREACH(example ${examples})
diff --git a/examples/templates/cmakelists_parhyp_C_ex.in b/examples/templates/cmakelists_parhyp_C_ex.in
new file mode 100644
index 0000000..7c683fd
--- /dev/null
+++ b/examples/templates/cmakelists_parhyp_C_ex.in
@@ -0,0 +1,110 @@
+# -----------------------------------------------------------------
+# $Revision: 4456 $
+# $Date: 2015-03-28 20:22:03 -0700 (Sat, 28 Mar 2015) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ parhyp examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(@SOLVER at _parhyp_examples C)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@)
+
+# Set names of examples specific dependency source files
+SET(examples_dependencies @EXAMPLES_DEPENDENCIES@)
+
+# Set name of MPI compiler to be used (CC or MPICC)
+SET(MPI_MPICC @MPICC@ CACHE STRING "MPICC compiler script")
+SET(CMAKE_C_COMPILER ${MPI_MPICC})
+
+# Specify path to SUNDIALS header files
+SET(SUNDIALS_INC_DIR
+  @includedir@
+  CACHE STRING
+  "Location of SUNDIALS header files")
+
+SET(HYPRE_INC_DIR
+  @HYPRE_INCLUDE_DIR@
+  CACHE STRING
+  "Location of HYPRE header files")
+
+# Add path to SUNDIALS header files
+INCLUDE_DIRECTORIES(${SUNDIALS_INC_DIR})
+INCLUDE_DIRECTORIES(${HYPRE_INC_DIR})
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecparhyp ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+SET(HYPRE_LIBRARIES @HYPRE_LIBS@ CACHE STRING "HYPRE libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS ${SUNDIALS_SOLVER_LIB} ${SUNDIALS_NVEC_LIB} ${SUNDIALS_EXTRA_LIB})
+
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+IF(HYPRE_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${HYPRE_LIBRARIES})
+ENDIF(HYPRE_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.c ${examples_dependencies})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
diff --git a/examples/templates/cmakelists_petsc_C_ex.in b/examples/templates/cmakelists_petsc_C_ex.in
new file mode 100644
index 0000000..4e3d9bd
--- /dev/null
+++ b/examples/templates/cmakelists_petsc_C_ex.in
@@ -0,0 +1,109 @@
+# -----------------------------------------------------------------
+# $Revision: 4456 $
+# $Date: 2015-03-28 20:22:03 -0700 (Sat, 28 Mar 2015) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ petsc examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(@SOLVER at _petsc_examples C)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@)
+
+# Set names of examples specific dependency source files
+SET(examples_dependencies @EXAMPLES_DEPENDENCIES@)
+
+# Set name of MPI compiler to be used (CC or MPICC)
+SET(MPI_MPICC @MPICC@ CACHE STRING "MPICC compiler script")
+SET(CMAKE_C_COMPILER ${MPI_MPICC})
+
+# Specify path to SUNDIALS header files
+SET(SUNDIALS_INC_DIR
+  @includedir@
+  CACHE STRING
+  "Location of SUNDIALS header files")
+
+SET(PETSC_INC_DIR
+  @PETSC_INCLUDE_DIR@
+  CACHE STRING
+  "Location of NVector PETSC header files")
+
+# Add path to SUNDIALS header files
+INCLUDE_DIRECTORIES(${SUNDIALS_INC_DIR})
+INCLUDE_DIRECTORIES(${PETSC_INC_DIR})
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+# Find the NVECTOR PETSC library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecpetsc ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(PETSC_LIBRARIES @PETSC_LIBRARIES@ CACHE STRING "PETSC libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS ${SUNDIALS_SOLVER_LIB} ${SUNDIALS_NVEC_LIB} ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(PETSC_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.c ${examples_dependencies})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
diff --git a/examples/templates/cmakelists_pthreads_C_ex.in b/examples/templates/cmakelists_pthreads_C_ex.in
new file mode 100644
index 0000000..fea6cbd
--- /dev/null
+++ b/examples/templates/cmakelists_pthreads_C_ex.in
@@ -0,0 +1,85 @@
+# -----------------------------------------------------------------
+# $Revision: 4456 $
+# $Date: 2015-03-28 20:22:03 -0700 (Sat, 28 Mar 2015) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ serial examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(@SOLVER at _pthreads_examples C)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@ @EXAMPLES_BL@)
+
+# Set names of examples specific dependency source files
+SET(examples_dependencies @EXAMPLES_DEPENDENCIES@)
+
+# Specify path to SUNDIALS header files
+SET(SUNDIALS_INC_DIR
+  @includedir@
+  CACHE STRING
+  "Location of SUNDIALS header files")
+
+# Add path to SUNDIALS header files
+INCLUDE_DIRECTORIES(${SUNDIALS_INC_DIR})
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecserial ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set Blas/Lapack libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS ${SUNDIALS_SOLVER_LIB} ${SUNDIALS_NVEC_LIB} ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.c ${examples_dependencies})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
+ 
diff --git a/examples/templates/cmakelists_pthreads_F77_ex.in b/examples/templates/cmakelists_pthreads_F77_ex.in
new file mode 100644
index 0000000..280bba4
--- /dev/null
+++ b/examples/templates/cmakelists_pthreads_F77_ex.in
@@ -0,0 +1,100 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ pthreads examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(F at SOLVER@_pthreads_examples Fortran)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@ @EXAMPLES_BL@)
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+FIND_LIBRARY(SUNDIALS_SOLVER_FLIB
+  @SOLVER_FLIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ F77-C library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecpthreads ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+FIND_LIBRARY(SUNDIALS_NVEC_FLIB
+  sundials_fnvecpthreads ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR F77-C library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+SET(PETSC_LIBRARIES @PETSC_LIBRARIES@ CACHE STRING "PETSC libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS 
+  ${SUNDIALS_SOLVER_FLIB} ${SUNDIALS_SOLVER_LIB}
+  ${SUNDIALS_NVEC_FLIB} ${SUNDIALS_NVEC_LIB}
+  ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+IF(PETSC_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_LIBRARIES)
+
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.f)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
+
diff --git a/examples/templates/cmakelists_serial_CXX_ex.in b/examples/templates/cmakelists_serial_CXX_ex.in
new file mode 100644
index 0000000..43b224b
--- /dev/null
+++ b/examples/templates/cmakelists_serial_CXX_ex.in
@@ -0,0 +1,93 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ serial examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(@SOLVER at _CXX_serial_examples CXX)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@ @EXAMPLES_BL@)
+
+# Specify path to SUNDIALS header files
+SET(SUNDIALS_INC_DIR
+  @includedir@
+  CACHE STRING
+  "Location of SUNDIALS header files")
+
+# Add path to SUNDIALS header files
+INCLUDE_DIRECTORIES(${SUNDIALS_INC_DIR})
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecserial ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+SET(PETSC_LIBRARIES @PETSC_LIBRARIES@ CACHE STRING "PETSC libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS ${SUNDIALS_SOLVER_LIB} ${SUNDIALS_NVEC_LIB} ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.cpp)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
+ 
diff --git a/examples/templates/cmakelists_serial_C_ex.in b/examples/templates/cmakelists_serial_C_ex.in
new file mode 100644
index 0000000..d13301f
--- /dev/null
+++ b/examples/templates/cmakelists_serial_C_ex.in
@@ -0,0 +1,101 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ serial examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(@SOLVER at _serial_examples C)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@ @EXAMPLES_BL@)
+LIST(REMOVE_DUPLICATES examples)
+
+# Set names of examples specific dependency source files
+SET(examples_dependencies @EXAMPLES_DEPENDENCIES@)
+
+# Specify path to SUNDIALS header files
+SET(SUNDIALS_INC_DIR
+  @includedir@
+  CACHE STRING
+  "Location of SUNDIALS header files")
+
+# Add path to SUNDIALS header files
+INCLUDE_DIRECTORIES(${SUNDIALS_INC_DIR})
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecserial ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+SET(PETSC_LIBRARIES @PETSC_LIBRARIES@ CACHE STRING "PETSC libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS ${SUNDIALS_SOLVER_LIB} ${SUNDIALS_NVEC_LIB} ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+IF(PETSC_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.c ${examples_dependencies})
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
+ 
diff --git a/examples/templates/cmakelists_serial_F77_ex.in b/examples/templates/cmakelists_serial_F77_ex.in
new file mode 100644
index 0000000..9b39fff
--- /dev/null
+++ b/examples/templates/cmakelists_serial_F77_ex.in
@@ -0,0 +1,100 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ serial examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(F at SOLVER@_serial_examples Fortran)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@ @EXAMPLES_BL@)
+LIST(REMOVE_DUPLICATES examples)
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+FIND_LIBRARY(SUNDIALS_SOLVER_FLIB
+  @SOLVER_FLIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ F77-C library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecserial ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+FIND_LIBRARY(SUNDIALS_NVEC_FLIB
+  sundials_fnvecserial ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR F77-C library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+SET(PETSC_LIBRARIES @PETSC_LIBRARIES@ CACHE STRING "PETSC libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS 
+  ${SUNDIALS_SOLVER_FLIB} ${SUNDIALS_SOLVER_LIB}
+  ${SUNDIALS_NVEC_FLIB} ${SUNDIALS_NVEC_LIB}
+  ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+IF(PETSC_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${PETSC_LIBRARIES})
+ENDIF(PETSC_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.f)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
+
diff --git a/examples/templates/cmakelists_serial_F90_ex.in b/examples/templates/cmakelists_serial_F90_ex.in
new file mode 100644
index 0000000..8641fa9
--- /dev/null
+++ b/examples/templates/cmakelists_serial_F90_ex.in
@@ -0,0 +1,93 @@
+# -----------------------------------------------------------------
+# $Revision: 4824 $
+# $Date: 2016-07-24 16:39:04 -0700 (Sun, 24 Jul 2016) $
+# -----------------------------------------------------------------
+# Programmer: Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# CMakeLists.txt for @SOLVER@ serial examples
+#
+# This file is generated from a template using  various variables
+# set at configuration time. It can be used as a template for
+# other user CMakeLists configuration files.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LAPACK_LIBRARIES. Otherwise, this variable should contain
+# an empty string or LAPACK_LIBRARIES-NOTFOUND. If this variable 
+# contains a valid library entry, we add it to each example traget
+# whether they use the Lapack module or not. This is done in order
+# to address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+#
+# -----------------------------------------------------------------
+cmake_minimum_required(VERSION 2.8)
+
+# Specify project name
+PROJECT(F90 at SOLVER@_serial_examples Fortran)
+
+MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+
+# Set the names of the examples to be built
+SET(examples @EXAMPLES@ @EXAMPLES_BL@)
+
+# Set search path for SUNDIALS libraries 
+SET(SUNDIALS_LIB_DIR @libdir@)
+
+# Find the SUNDIALS solver's library
+FIND_LIBRARY(SUNDIALS_SOLVER_LIB
+  @SOLVER_LIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ library")
+
+FIND_LIBRARY(SUNDIALS_SOLVER_FLIB
+  @SOLVER_FLIB@ ${SUNDIALS_LIB_DIR}
+  DOC "@SOLVER@ Fortran-C library")
+
+# Find the NVECTOR library
+FIND_LIBRARY(SUNDIALS_NVEC_LIB
+  sundials_nvecserial ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR library")
+
+FIND_LIBRARY(SUNDIALS_NVEC_FLIB
+  sundials_fnvecserial ${SUNDIALS_LIB_DIR}
+  DOC "NVECTOR Fortran-C library")
+
+# Set additional libraries
+SET(SUNDIALS_EXTRA_LIB @LIBS@ CACHE STRING "Additional libraries")
+
+# Set other libraries libraries
+SET(LAPACK_LIBRARIES @BLAS_LAPACK_LIBS@ CACHE STRING "Lapack libraries")
+SET(SUPERLUMT_LIBRARIES @SUPERLUMT_LIBRARIES@ CACHE STRING "SuperLUMT libraries")
+SET(KLU_LIBRARIES @KLU_LIBRARIES@ CACHE STRING "KLU libraries")
+
+# List of all libraries
+SET(SUNDIALS_LIBS 
+  ${SUNDIALS_SOLVER_FLIB} ${SUNDIALS_SOLVER_LIB}
+  ${SUNDIALS_NVEC_FLIB} ${SUNDIALS_NVEC_LIB}
+  ${SUNDIALS_EXTRA_LIB})
+IF(LAPACK_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${LAPACK_LIBRARIES})
+ENDIF(LAPACK_LIBRARIES)
+
+IF(SUPERLUMT_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${SUPERLUMT_LIBRARIES})
+ENDIF(SUPERLUMT_LIBRARIES)
+
+IF(KLU_LIBRARIES)
+  LIST(APPEND SUNDIALS_LIBS ${KLU_LIBRARIES})
+ENDIF(KLU_LIBRARIES)
+
+# Build each example one by one
+FOREACH(example ${examples})
+  ADD_EXECUTABLE(${example} ${example}.f90)
+  TARGET_LINK_LIBRARIES(${example} ${SUNDIALS_LIBS})
+ENDFOREACH(example ${examples})
+
diff --git a/examples/templates/makefile_openmp_C_ex.in b/examples/templates/makefile_openmp_C_ex.in
new file mode 100644
index 0000000..2469d86
--- /dev/null
+++ b/examples/templates/makefile_openmp_C_ex.in
@@ -0,0 +1,83 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Steven Smith @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ pthreads examples.
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, whether they use the Lapack module or not, to
+# address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+CPP      = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CC       = @CC@
+CFLAGS   = @CFLAGS@ @OpenMP_C_FLAGS@
+LDFLAGS  = @LDFLAGS@ @OpenMP_C_FLAGS@
+LIBS     = @LIBS@
+
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+INCLUDES = -I${includedir}
+LIBRARIES = -l at SOLVER_LIB@ -lsundials_nvecopenmp ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+LIBRARIES_PETSC = @PETSC_LIBRARIES@
+
+EXAMPLES = @EXAMPLES@ @EXAMPLES_BL@
+EXAMPLES_DEPENDENCIES = @EXAMPLES_DEPENDENCIES@
+
+OBJECTS = ${EXAMPLES:=.o}
+OBJECTS_DEPENDENCIES = ${EXAMPLES_DEPENDENCIES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .c
+
+.c.o :
+	${CC} ${CPPFLAGS} ${CFLAGS} ${INCLUDES} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${CC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS}" ; \
+	  ${CC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS} ; \
+	done
+	
+${OBJECTS}: ${OBJECTS_DEPENDENCIES}
+
+clean:
+	rm -f ${OBJECTS_DEPENDENCIES}
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
+
diff --git a/examples/templates/makefile_openmp_F77_ex.in b/examples/templates/makefile_openmp_F77_ex.in
new file mode 100644
index 0000000..599e093
--- /dev/null
+++ b/examples/templates/makefile_openmp_F77_ex.in
@@ -0,0 +1,76 @@
+# -----------------------------------------------------------------
+# $Revision: 4074 $
+# $Date: 2014-04-23 14:13:52 -0700 (Wed, 23 Apr 2014) $
+# -----------------------------------------------------------------
+# Programmer: Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2014, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ Fortran OpenMP examples
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, whether they use the Lapack module or not, to
+# address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+F77         = @F77@
+FFLAGS      = @FFLAGS@ @OpenMP_C_FLAGS@
+F77_LNKR    = @F77_LNKR@ @OpenMP_C_FLAGS@
+F77_LDFLAGS = @F77_LDFLAGS@
+F77_LIBS    = @F77_LIBS@
+
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+LIBRARIES = -l at SOLVER_FLIB@ -l at SOLVER_LIB@ -lsundials_fnvecopenmp -lsundials_nvecopenmp ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+LIBRARIES_PETSC = @PETSC_LIBRARIES@
+
+EXAMPLES = @EXAMPLES@ @EXAMPLES_BL@
+
+OBJECTS = ${EXAMPLES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .f
+
+.f.o :
+	${F77} ${FFLAGS} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${F77_LNKR} -o $${i} $${i}.o ${F77_LDFLAGS} ${F77_LIBS} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS}" ; \
+	  ${F77_LNKR} -o $${i} $${i}.o ${F77_LDFLAGS} ${F77_LIBS} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS} ; \
+	done
+
+clean:
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
+
diff --git a/examples/templates/makefile_parallel_CXX_ex.in b/examples/templates/makefile_parallel_CXX_ex.in
new file mode 100644
index 0000000..aef617d
--- /dev/null
+++ b/examples/templates/makefile_parallel_CXX_ex.in
@@ -0,0 +1,82 @@
+# -----------------------------------------------------------------
+# $Revision: 4824 $
+# $Date: 2016-07-24 16:39:04 -0700 (Sun, 24 Jul 2016) $
+# -----------------------------------------------------------------
+# Programmer: Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ parallel examples
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, even the parallel ones which obviously cannot 
+# use the Lapack linear solver modules simply to address the case 
+# in which the SUNDIALS libraries are shared objects. In that case, 
+# the solver library references Lapack  symbols which must be 
+# always resolved by linking against the Blas/Lapack libraries. 
+# If only static SUNDIALS libraries have been built, it is not 
+# required to link the Blas/Lapack libraries for the parallel 
+# examples...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+CPP         = @CPP@
+CPPFLAGS    = @CPPFLAGS@ -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX -DLAM_BUILDING
+CXX         = @CXX@
+CXXFLAGS    = @CXXFLAGS@
+LDFLAGS     = @LDFLAGS@
+LIBS        = @LIBS@
+MPICXX      = @MPICXX@
+MPI_INC_DIR = @MPI_INC_DIR@
+MPI_LIB_DIR = @MPI_LIB_DIR@
+MPI_LIBS    = @MPI_LIBS@
+MPI_FLAGS   = @MPI_FLAGS@
+
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+INCLUDES = -I${includedir} -I${MPI_INC_DIR}
+LIBRARIES = -l at SOLVER_LIB@ -lsundials_nvecparallel ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+
+EXAMPLES = @EXAMPLES@
+
+OBJECTS = ${EXAMPLES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .cpp
+
+.cpp.o :
+	${MPICXX} ${CPPFLAGS} ${CXXFLAGS} ${MPI_FLAGS} ${INCLUDES} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${MPICXX} -o $${i} $${i}.o ${MPI_FLAGS} ${CXXFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS}" ; \
+	  ${MPICXX} -o $${i} $${i}.o ${MPI_FLAGS} ${CXXFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS} ; \
+	done
+
+clean:
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
diff --git a/examples/templates/makefile_parallel_C_ex.in b/examples/templates/makefile_parallel_C_ex.in
new file mode 100644
index 0000000..802d459
--- /dev/null
+++ b/examples/templates/makefile_parallel_C_ex.in
@@ -0,0 +1,87 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ parallel examples
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, even the parallel ones which obviously cannot 
+# use the Lapack linear solver modules simply to address the case 
+# in which the SUNDIALS libraries are shared objects. In that case, 
+# the solver library references Lapack  symbols which must be 
+# always resolved by linking against the Blas/Lapack libraries. 
+# If only static SUNDIALS libraries have been built, it is not 
+# required to link the Blas/Lapack libraries for the parallel 
+# examples...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+CPP         = @CPP@
+CPPFLAGS    = @CPPFLAGS@
+CC          = @CC@
+CFLAGS      = @CFLAGS@
+LDFLAGS     = @LDFLAGS@
+LIBS        = @LIBS@
+LINKFLAGS = -Wl,-rpath, at libdir@
+MPICC       = @MPICC@
+MPI_INC_DIR = @MPI_INC_DIR@
+MPI_LIB_DIR = @MPI_LIB_DIR@
+MPI_LIBS    = @MPI_LIBS@
+MPI_FLAGS   = @MPI_FLAGS@
+
+INCLUDES = -I${includedir} -I${MPI_INC_DIR}
+LIBRARIES = -l at SOLVER_LIB@ -lsundials_nvecparallel ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+LIBRARIES_PETSC = @PETSC_LIBRARIES@
+
+EXAMPLES = @EXAMPLES@
+EXAMPLES_DEPENDENCIES = @EXAMPLES_DEPENDENCIES@
+
+OBJECTS = ${EXAMPLES:=.o}
+OBJECTS_DEPENDENCIES = ${EXAMPLES_DEPENDENCIES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .c
+
+.c.o :
+	${MPICC} ${CPPFLAGS} ${CFLAGS} ${MPI_FLAGS} ${INCLUDES} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${MPICC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${MPI_FLAGS} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS}" ; \
+	  ${MPICC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${MPI_FLAGS} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS} ; \
+	done
+
+${OBJECTS}: ${OBJECTS_DEPENDENCIES}
+
+clean:
+	rm -f ${OBJECTS_DEPENDENCIES}
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
diff --git a/examples/templates/makefile_parallel_F77_ex.in b/examples/templates/makefile_parallel_F77_ex.in
new file mode 100644
index 0000000..df4a8b3
--- /dev/null
+++ b/examples/templates/makefile_parallel_F77_ex.in
@@ -0,0 +1,82 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ fortran parallel examples
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, even the parallel ones which obviously cannot 
+# use the Lapack linear solver modules simply to address the case 
+# in which the SUNDIALS libraries are shared objects. In that case, 
+# the solver library references Lapack  symbols which must be 
+# always resolved by linking against the Blas/Lapack libraries. 
+# If only static SUNDIALS libraries have been built, it is not 
+# required to link the Blas/Lapack libraries for the parallel 
+# examples...
+#
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+FFLAGS       = @FFLAGS@
+F77_LDFLAGS  = @F77_LDFLAGS@
+F77_LIBS     = @F77_LIBS@
+
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+MPIF77       = @MPIF77@
+MPI_INC_DIR  = @MPI_INC_DIR@
+MPI_FLAGS    = @MPI_FLAGS@
+MPIF77_LNKR  = @MPIF77_LNKR@
+MPI_LIB_DIR  = @MPI_LIB_DIR@
+MPI_LIBS     = @MPI_LIBS@
+
+LIBRARIES = -l at SOLVER_FLIB@ -l at SOLVER_LIB@ -lsundials_fnvecparallel -lsundials_nvecparallel ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+LIBRARIES_PETSC = @PETSC_LIBRARIES@
+
+EXAMPLES = @EXAMPLES@
+
+OBJECTS = ${EXAMPLES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .f
+
+.f.o :
+	${MPIF77} ${FFLAGS} ${MPI_FLAGS} -I${MPI_INC_DIR} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${MPIF77_LNKR} -o $${i} $${i}.o ${MPI_FLAGS} ${F77_LDFLAGS} ${F77_LIBS} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS}" ; \
+	  ${MPIF77_LNKR} -o $${i} $${i}.o ${MPI_FLAGS} ${F77_LDFLAGS} ${F77_LIBS} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS} ; \
+	done
+
+clean:
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
diff --git a/examples/templates/makefile_parallel_F90_ex.in b/examples/templates/makefile_parallel_F90_ex.in
new file mode 100644
index 0000000..b5bee6c
--- /dev/null
+++ b/examples/templates/makefile_parallel_F90_ex.in
@@ -0,0 +1,80 @@
+# -----------------------------------------------------------------
+# $Revision: 4824 $
+# $Date: 2016-07-24 16:39:04 -0700 (Sun, 24 Jul 2016) $
+# -----------------------------------------------------------------
+# Programmer: Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ fortran parallel examples
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, even the parallel ones which obviously cannot 
+# use the Lapack linear solver modules simply to address the case 
+# in which the SUNDIALS libraries are shared objects. In that case, 
+# the solver library references Lapack  symbols which must be 
+# always resolved by linking against the Blas/Lapack libraries. 
+# If only static SUNDIALS libraries have been built, it is not 
+# required to link the Blas/Lapack libraries for the parallel 
+# examples...
+#
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+F90FLAGS     = @F90FLAGS@
+F90_LDFLAGS  = @F90_LDFLAGS@
+F90_LIBS     = @F90_LIBS@
+
+MPIF90       = @MPIF90@
+MPI_INC_DIR  = @MPI_INC_DIR@
+MPI_FLAGS    = @MPI_FLAGS@
+MPI_LIB_DIR  = @MPI_LIB_DIR@
+MPI_LIBS     = @MPI_LIBS@
+
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+LIBRARIES = -l at SOLVER_FLIB@ -l at SOLVER_LIB@ -lsundials_fnvecparallel -lsundials_nvecparallel ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+
+EXAMPLES = @EXAMPLES@
+
+OBJECTS = ${EXAMPLES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .f90
+
+.f90.o :
+	${MPIF90} ${F90FLAGS} ${MPI_FLAGS} -I${MPI_INC_DIR} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${MPIF90} -o $${i} $${i}.o ${MPI_FLAGS} ${F90_LDFLAGS} ${F90_LIBS} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS}" ; \
+	  ${MPIF90} -o $${i} $${i}.o ${MPI_FLAGS} ${F90_LDFLAGS} ${F90_LIBS} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS} ; \
+	done
+
+clean:
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
diff --git a/examples/templates/makefile_parhyp_C_ex.in b/examples/templates/makefile_parhyp_C_ex.in
new file mode 100644
index 0000000..9e56fdd
--- /dev/null
+++ b/examples/templates/makefile_parhyp_C_ex.in
@@ -0,0 +1,90 @@
+# -----------------------------------------------------------------
+# $Revision: 4456 $
+# $Date: 2015-03-28 20:22:03 -0700 (Sat, 28 Mar 2015) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ parhyp examples
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, even the parhyp ones which obviously cannot 
+# use the Lapack linear solver modules simply to address the case 
+# in which the SUNDIALS libraries are shared objects. In that case, 
+# the solver library references Lapack  symbols which must be 
+# always resolved by linking against the Blas/Lapack libraries. 
+# If only static SUNDIALS libraries have been built, it is not 
+# required to link the Blas/Lapack libraries for the parhyp 
+# examples...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+CPP         = @CPP@
+CPPFLAGS    = @CPPFLAGS@
+CC          = @CC@
+CFLAGS      = @CFLAGS@ @OpenMP_C_FLAGS@
+LDFLAGS     = @LDFLAGS@ @OpenMP_C_FLAGS@
+LIBS        = @LIBS@
+LINKFLAGS = -Wl,-rpath, at libdir@
+MPICC       = @MPICC@
+MPI_INC_DIR = @MPI_INC_DIR@
+MPI_LIB_DIR = @MPI_LIB_DIR@
+MPI_LIBS    = @MPI_LIBS@
+MPI_FLAGS   = @MPI_FLAGS@
+HYPRE_INC_DIR = @HYPRE_INCLUDE_DIR@
+HYPRE_LIB_DIR = @HYPRE_LIB_DIR@
+HYPRE_LIBS    = @HYPRE_LIBRARIES@
+HYPRE_FLAGS   = @HYPRE_FLAGS@
+
+INCLUDES = -I${includedir} -I${MPI_INC_DIR} -I${HYPRE_INC_DIR}
+LIBRARIES = -l at SOLVER_LIB@ -lsundials_nvecparhyp ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+
+EXAMPLES = @EXAMPLES@
+EXAMPLES_DEPENDENCIES = @EXAMPLES_DEPENDENCIES@
+
+OBJECTS = ${EXAMPLES:=.o}
+OBJECTS_DEPENDENCIES = ${EXAMPLES_DEPENDENCIES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .c
+
+.c.o :
+	${MPICC} ${CPPFLAGS} ${CFLAGS} ${MPI_FLAGS} ${INCLUDES} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${MPICC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${MPI_FLAGS} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${HYPRE_LIBS} ${LINKFLAGS}" ; \
+	  ${MPICC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${MPI_FLAGS} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${HYPRE_LIBS} ${LINKFLAGS} ; \
+	done
+
+${OBJECTS}: ${OBJECTS_DEPENDENCIES}
+
+clean:
+	rm -f ${OBJECTS_DEPENDENCIES}
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
diff --git a/examples/templates/makefile_petsc_C_ex.in b/examples/templates/makefile_petsc_C_ex.in
new file mode 100644
index 0000000..07ced4e
--- /dev/null
+++ b/examples/templates/makefile_petsc_C_ex.in
@@ -0,0 +1,89 @@
+# -----------------------------------------------------------------
+# $Revision: 4456 $
+# $Date: 2015-03-28 20:22:03 -0700 (Sat, 28 Mar 2015) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+#             Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ parallel examples
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, even the parallel ones which obviously cannot 
+# use the Lapack linear solver modules simply to address the case 
+# in which the SUNDIALS libraries are shared objects. In that case, 
+# the solver library references Lapack  symbols which must be 
+# always resolved by linking against the Blas/Lapack libraries. 
+# If only static SUNDIALS libraries have been built, it is not 
+# required to link the Blas/Lapack libraries for the parallel 
+# examples...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+CPP         = @CPP@
+CPPFLAGS    = @CPPFLAGS@
+CC          = @CC@
+CFLAGS      = @CFLAGS@
+LDFLAGS     = @LDFLAGS@
+LIBS        = @LIBS@
+LINKFLAGS = -Wl,-rpath, at libdir@
+MPICC       = @MPICC@
+MPI_INC_DIR = @MPI_INC_DIR@
+MPI_LIB_DIR = @MPI_LIB_DIR@
+MPI_LIBS    = @MPI_LIBS@
+MPI_FLAGS   = @MPI_FLAGS@
+PETSC_LIBS = @PETSC_LIBRARIES@
+PETSC_INC_DIR = @PETSC_INCLUDE_DIR@
+
+INCLUDES = -I${includedir} -I${MPI_INC_DIR} -I${PETSC_INC_DIR}
+LIBRARIES = -l at SOLVER_LIB@ -lsundials_nvecpetsc ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+
+EXAMPLES = @EXAMPLES@
+EXAMPLES_DEPENDENCIES = @EXAMPLES_DEPENDENCIES@
+
+OBJECTS = ${EXAMPLES:=.o}
+OBJECTS_DEPENDENCIES = ${EXAMPLES_DEPENDENCIES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .c
+
+.c.o :
+	${MPICC} ${CPPFLAGS} ${CFLAGS} ${MPI_FLAGS} ${INCLUDES} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${MPICC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${MPI_FLAGS} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${PETSC_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS}" ; \
+	  ${MPICC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${MPI_FLAGS} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${PETSC_LIBS} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS} ; \
+	done
+
+${OBJECTS}: ${OBJECTS_DEPENDENCIES}
+
+clean:
+	rm -f ${OBJECTS_DEPENDENCIES}
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
diff --git a/examples/templates/makefile_pthreads_C_ex.in b/examples/templates/makefile_pthreads_C_ex.in
new file mode 100644
index 0000000..9b80b69
--- /dev/null
+++ b/examples/templates/makefile_pthreads_C_ex.in
@@ -0,0 +1,81 @@
+# -----------------------------------------------------------------
+# $Revision: 4824 $
+# $Date: 2016-07-24 16:39:04 -0700 (Sun, 24 Jul 2016) $
+# -----------------------------------------------------------------
+# Programmer: Steven Smith @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ pthreads examples.
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, whether they use the Lapack module or not, to
+# address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+CPP      = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CC       = @CC@
+CFLAGS   = @CFLAGS@
+LDFLAGS  = @LDFLAGS@ @CMAKE_THREAD_LIBS_INIT@
+LIBS     = @LIBS@
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+INCLUDES = -I${includedir}
+LIBRARIES = -l at SOLVER_LIB@ -lsundials_nvecpthreads ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+
+EXAMPLES = @EXAMPLES@ @EXAMPLES_BL@
+EXAMPLES_DEPENDENCIES = @EXAMPLES_DEPENDENCIES@
+
+OBJECTS = ${EXAMPLES:=.o}
+OBJECTS_DEPENDENCIES = ${EXAMPLES_DEPENDENCIES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .c
+
+.c.o :
+	${CC} ${CPPFLAGS} ${CFLAGS} ${INCLUDES} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${CC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS}" ; \
+	  ${CC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS} ; \
+	done
+
+${OBJECTS}: ${OBJECTS_DEPENDENCIES}
+
+clean:
+	rm -f ${OBJECTS_DEPENDENCIES}
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
+
diff --git a/examples/templates/makefile_pthreads_F77_ex.in b/examples/templates/makefile_pthreads_F77_ex.in
new file mode 100644
index 0000000..3ee0acd
--- /dev/null
+++ b/examples/templates/makefile_pthreads_F77_ex.in
@@ -0,0 +1,76 @@
+# -----------------------------------------------------------------
+# $Revision: 4074 $
+# $Date: 2014-04-23 14:13:52 -0700 (Wed, 23 Apr 2014) $
+# -----------------------------------------------------------------
+# Programmer: Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2014, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ Fortran pthreads examples
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, whether they use the Lapack module or not, to
+# address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+F77         = @F77@
+FFLAGS      = @FFLAGS@
+F77_LNKR    = @F77_LNKR@
+F77_LDFLAGS = @F77_LDFLAGS@ @CMAKE_THREAD_LIBS_INIT@
+F77_LIBS    = @F77_LIBS@
+
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+LIBRARIES = -l at SOLVER_FLIB@ -l at SOLVER_LIB@ -lsundials_fnvecpthreads -lsundials_nvecpthreads ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+LIBRARIES_PETSC = @PETSC_LIBRARIES@
+
+EXAMPLES = @EXAMPLES@ @EXAMPLES_BL@
+
+OBJECTS = ${EXAMPLES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .f
+
+.f.o :
+	${F77} ${FFLAGS} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${F77_LNKR} -o $${i} $${i}.o ${F77_LDFLAGS} ${F77_LIBS} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS}" ; \
+	  ${F77_LNKR} -o $${i} $${i}.o ${F77_LDFLAGS} ${F77_LIBS} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS} ; \
+	done
+
+clean:
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
+
diff --git a/examples/templates/makefile_serial_CXX_ex.in b/examples/templates/makefile_serial_CXX_ex.in
new file mode 100644
index 0000000..7c7586d
--- /dev/null
+++ b/examples/templates/makefile_serial_CXX_ex.in
@@ -0,0 +1,77 @@
+# -----------------------------------------------------------------
+# $Revision: 4944 $
+# $Date: 2016-09-21 21:48:35 -0700 (Wed, 21 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ serial examples.
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, whether they use the Lapack module or not, to
+# address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+CPP      = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX      = @CXX@
+CXXFLAGS   = @CXXFLAGS@
+LDFLAGS  = @LDFLAGS@
+LIBS     = @LIBS@
+
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+INCLUDES = -I${includedir}
+LIBRARIES = -l at SOLVER_LIB@ -lsundials_nvecserial ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+
+EXAMPLES = @EXAMPLES@ @EXAMPLES_BL@
+
+OBJECTS = ${EXAMPLES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .cpp
+
+.cpp.o :
+	${CXX} ${CPPFLAGS} ${CXXFLAGS} ${INCLUDES} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${CXX} -o $${i} $${i}.o ${CXXFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS}" ; \
+	  ${CXX} -o $${i} $${i}.o ${CXXFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS} ; \
+	done
+
+clean:
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
+
diff --git a/examples/templates/makefile_serial_C_ex.in b/examples/templates/makefile_serial_C_ex.in
new file mode 100644
index 0000000..5a5460b
--- /dev/null
+++ b/examples/templates/makefile_serial_C_ex.in
@@ -0,0 +1,83 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2002, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ serial examples.
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, whether they use the Lapack module or not, to
+# address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+CPP      = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CC       = @CC@
+CFLAGS   = @CFLAGS@
+LDFLAGS  = @LDFLAGS@
+LIBS     = @LIBS@
+
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+INCLUDES = -I${includedir}
+LIBRARIES = -l at SOLVER_LIB@ -lsundials_nvecserial ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+LIBRARIES_PETSC = @PETSC_LIBRARIES@
+
+EXAMPLES = @EXAMPLES@ @EXAMPLES_BL@
+EXAMPLES_DEPENDENCIES = @EXAMPLES_DEPENDENCIES@
+
+OBJECTS = ${EXAMPLES:=.o}
+OBJECTS_DEPENDENCIES = ${EXAMPLES_DEPENDENCIES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .c
+
+.c.o :
+	${CC} ${CPPFLAGS} ${CFLAGS} ${INCLUDES} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${CC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS}" ; \
+	  ${CC} -o $${i} $${i}.o ${OBJECTS_DEPENDENCIES} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS} ; \
+	done
+
+${OBJECTS}: ${OBJECTS_DEPENDENCIES}
+
+clean:
+	rm -f ${OBJECTS_DEPENDENCIES}
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
+
diff --git a/examples/templates/makefile_serial_F77_ex.in b/examples/templates/makefile_serial_F77_ex.in
new file mode 100644
index 0000000..a31e37d
--- /dev/null
+++ b/examples/templates/makefile_serial_F77_ex.in
@@ -0,0 +1,76 @@
+# -----------------------------------------------------------------
+# $Revision: 4958 $
+# $Date: 2016-09-23 14:02:13 -0700 (Fri, 23 Sep 2016) $
+# -----------------------------------------------------------------
+# Programmer: Radu Serban @ LLNL
+# -----------------------------------------------------------------
+# Copyright (c) 2007, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ Fortran serial examples
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, whether they use the Lapack module or not, to
+# address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+F77         = @F77@
+FFLAGS      = @FFLAGS@
+F77_LNKR    = @F77_LNKR@
+F77_LDFLAGS = @F77_LDFLAGS@
+F77_LIBS    = @F77_LIBS@
+
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+LIBRARIES = -l at SOLVER_FLIB@ -l at SOLVER_LIB@ -lsundials_fnvecserial -lsundials_nvecserial ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+LIBRARIES_PETSC = @PETSC_LIBRARIES@
+
+EXAMPLES = @EXAMPLES@ @EXAMPLES_BL@
+
+OBJECTS = ${EXAMPLES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .f
+
+.f.o :
+	${F77} ${FFLAGS} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${F77_LNKR} -o $${i} $${i}.o ${F77_LDFLAGS} ${F77_LIBS} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS}" ; \
+	  ${F77_LNKR} -o $${i} $${i}.o ${F77_LDFLAGS} ${F77_LIBS} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LIBRARIES_PETSC} ${LINKFLAGS} ; \
+	done
+
+clean:
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
+
diff --git a/examples/templates/makefile_serial_F90_ex.in b/examples/templates/makefile_serial_F90_ex.in
new file mode 100644
index 0000000..faeebdc
--- /dev/null
+++ b/examples/templates/makefile_serial_F90_ex.in
@@ -0,0 +1,74 @@
+# -----------------------------------------------------------------
+# $Revision: 4824 $
+# $Date: 2016-07-24 16:39:04 -0700 (Sun, 24 Jul 2016) $
+# -----------------------------------------------------------------
+# Programmer: Daniel R. Reynolds @ SMU
+# -----------------------------------------------------------------
+# Copyright (c) 2013, The Regents of the University of California.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# -----------------------------------------------------------------
+# Makefile for @SOLVER@ Fortran90 serial examples
+#
+# This file is generated from a template using various variables
+# set at configuration time. It can be used as a template for
+# other user Makefiles.
+#
+# Note: if the solver was successfully configured with Blas/Lapack
+# support, the Blas/Lapack libraries are specified through the 
+# variable LIBRARIES_BL. Otherwise, this variable should contain
+# an empty string. We include LIBRARIES_BL in the link line for
+# all examples, whether they use the Lapack module or not, to
+# address the case in which the SUNDIALS libraries are shared 
+# objects. In that case, the solver library references Lapack 
+# symbols which must be always resolved by linking against the
+# Blas/Lapack libraries. If only static SUNDIALS libraries have 
+# been built, it is not required to link the Blas/Lapack libraries
+# for examples that do not use that module...
+# -----------------------------------------------------------------
+
+SHELL = @SHELL@
+
+prefix       = @prefix@
+exec_prefix  = @exec_prefix@
+includedir   = @includedir@
+libdir       = @libdir@
+
+F90         = @F90@
+F90FLAGS    = @F90FLAGS@
+F90_LDFLAGS = @F90_LDFLAGS@
+F90_LIBS    = @F90_LIBS@
+
+LINKFLAGS = -Wl,-rpath, at libdir@
+
+LIBRARIES = -l at SOLVER_FLIB@ -l at SOLVER_LIB@ -lsundials_fnvecserial -lsundials_nvecserial ${LIBS}
+LIBRARIES_BL = @BLAS_LAPACK_LIBS@
+LIBRARIES_SLUMT = @SUPERLUMT_LIBS@
+LIBRARIES_KLU = @KLU_LIBS@
+
+EXAMPLES = @EXAMPLES@ @EXAMPLES_BL@
+
+OBJECTS = ${EXAMPLES:=.o}
+
+# -----------------------------------------------------------------------------------------
+
+.SUFFIXES : .o .f90
+
+.f90.o :
+	${F90} ${F90FLAGS} -c $<
+
+# -----------------------------------------------------------------------------------------
+
+all: ${OBJECTS}
+	@for i in ${EXAMPLES} ; do \
+	  echo "${F90} -o $${i} $${i}.o ${F90_LDFLAGS} ${F90_LIBS} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS}" ; \
+	  ${F90} -o $${i} $${i}.o ${F90_LDFLAGS} ${F90_LIBS} -L${libdir} ${LIBRARIES} ${LIBRARIES_BL} ${LIBRARIES_SLUMT} ${LIBRARIES_KLU} ${LINKFLAGS} ; \
+	done
+
+clean:
+	rm -f ${OBJECTS}
+	rm -f ${EXAMPLES}
+
+# -----------------------------------------------------------------------------------------
+
diff --git a/include/arkode/arkode.h b/include/arkode/arkode.h
new file mode 100644
index 0000000..1a7123c
--- /dev/null
+++ b/include/arkode/arkode.h
@@ -0,0 +1,1380 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the interface file for the main ARKODE integrator.
+ *---------------------------------------------------------------
+ * ARKODE is used to solve numerically the ordinary initial value
+ * problem:
+ *              M(t)*y' = f(t,y),
+ *                y(t0) = y0,
+ * where t0, y0 in R^N, M(t)*y: R x R^N -> R^N, and 
+ * f: R x R^N -> R^N are given.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKODE_H
+#define _ARKODE_H
+
+#include <stdio.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*===============================================================
+                         ARKODE CONSTANTS
+===============================================================*/
+
+/*---------------------------------------------------------------
+ Enumerations for inputs to ARKodeCreate and ARKode.
+-----------------------------------------------------------------
+ Symbolic constants for the iter parameter to 
+ ARKodeCreate and the input parameter itask to ARKode, are given 
+ below.
+ 
+ itask: The itask input parameter to ARKode indicates the job
+        of the solver for the next user step. The ARK_NORMAL
+        itask is to have the solver take internal steps until
+        it has reached or just passed the user specified tout
+        parameter. The solver then interpolates in order to
+        return an approximate value of y(tout). The ARK_ONE_STEP
+        option tells the solver to just take one internal step
+        and return the solution at the point reached by that 
+	step.  If fixed time steps are desired, then the user 
+	can run in ARK_ONE_STEP mode, and set hmin and hmax to
+	be the desired time step -- this will effectively 
+	disable all temporal error control, and the user may
+	need to increase the iteration counts for the nonlinear 
+	and linear solvers to guarantee convergence for larger 
+	step sizes.
+---------------------------------------------------------------*/
+
+/* max number of overall stages allowed */
+#define ARK_S_MAX          15
+#define ARK_A(A,i,j)       (A[i*ARK_S_MAX + j])
+
+/* itask */
+#define ARK_NORMAL         1
+#define ARK_ONE_STEP       2
+
+
+/* Butcher table accessors -- explicit */
+#define HEUN_EULER_2_1_2         0
+#define BOGACKI_SHAMPINE_4_2_3   1
+#define ARK324L2SA_ERK_4_2_3     2
+#define ZONNEVELD_5_3_4          3
+#define ARK436L2SA_ERK_6_3_4     4
+#define SAYFY_ABURUB_6_3_4       5
+#define CASH_KARP_6_4_5          6
+#define FEHLBERG_6_4_5           7
+#define DORMAND_PRINCE_7_4_5     8
+#define ARK548L2SA_ERK_8_4_5     9
+#define VERNER_8_5_6            10
+#define FEHLBERG_13_7_8         11
+
+#define DEFAULT_ERK_2           HEUN_EULER_2_1_2
+#define DEFAULT_ERK_3           BOGACKI_SHAMPINE_4_2_3
+#define DEFAULT_ERK_4           ZONNEVELD_5_3_4
+#define DEFAULT_ERK_5           CASH_KARP_6_4_5
+#define DEFAULT_ERK_6           VERNER_8_5_6
+#define DEFAULT_ERK_8           FEHLBERG_13_7_8
+
+#define MIN_ERK_NUM              0
+#define MAX_ERK_NUM             11
+
+/* Butcher table accessors -- implicit */
+#define SDIRK_2_1_2             12
+#define BILLINGTON_3_3_2        13
+#define TRBDF2_3_3_2            14
+#define KVAERNO_4_2_3           15
+#define ARK324L2SA_DIRK_4_2_3   16
+#define CASH_5_2_4              17
+#define CASH_5_3_4              18
+#define SDIRK_5_3_4             19
+#define KVAERNO_5_3_4           20
+#define ARK436L2SA_DIRK_6_3_4   21
+#define KVAERNO_7_4_5           22
+#define ARK548L2SA_DIRK_8_4_5   23
+
+#define DEFAULT_DIRK_2          SDIRK_2_1_2
+#define DEFAULT_DIRK_3          ARK324L2SA_DIRK_4_2_3
+#define DEFAULT_DIRK_4          SDIRK_5_3_4
+#define DEFAULT_DIRK_5          ARK548L2SA_DIRK_8_4_5
+
+#define MIN_DIRK_NUM            12
+#define MAX_DIRK_NUM            23
+
+/* Butcher table accessors -- ImEx */
+#define DEFAULT_ARK_ETABLE_3    ARK324L2SA_ERK_4_2_3
+#define DEFAULT_ARK_ETABLE_4    ARK436L2SA_ERK_6_3_4
+#define DEFAULT_ARK_ETABLE_5    ARK548L2SA_ERK_8_4_5
+#define DEFAULT_ARK_ITABLE_3    ARK324L2SA_DIRK_4_2_3
+#define DEFAULT_ARK_ITABLE_4    ARK436L2SA_DIRK_6_3_4
+#define DEFAULT_ARK_ITABLE_5    ARK548L2SA_DIRK_8_4_5
+
+
+/* ARKODE return flags */
+#define ARK_SUCCESS               0
+#define ARK_TSTOP_RETURN          1
+#define ARK_ROOT_RETURN           2
+
+#define ARK_WARNING              99
+
+#define ARK_TOO_MUCH_WORK        -1
+#define ARK_TOO_MUCH_ACC         -2
+#define ARK_ERR_FAILURE          -3
+#define ARK_CONV_FAILURE         -4
+
+#define ARK_LINIT_FAIL           -5
+#define ARK_LSETUP_FAIL          -6
+#define ARK_LSOLVE_FAIL          -7
+#define ARK_RHSFUNC_FAIL         -8
+#define ARK_FIRST_RHSFUNC_ERR    -9
+#define ARK_REPTD_RHSFUNC_ERR    -10
+#define ARK_UNREC_RHSFUNC_ERR    -11
+#define ARK_RTFUNC_FAIL          -12
+#define ARK_LFREE_FAIL           -13
+#define ARK_MASSINIT_FAIL        -14
+#define ARK_MASSSETUP_FAIL       -15
+#define ARK_MASSSOLVE_FAIL       -16
+#define ARK_MASSFREE_FAIL        -17
+#define ARK_MASSMULT_FAIL        -18
+
+#define ARK_MEM_FAIL             -20
+#define ARK_MEM_NULL             -21
+#define ARK_ILL_INPUT            -22
+#define ARK_NO_MALLOC            -23
+#define ARK_BAD_K                -24
+#define ARK_BAD_T                -25
+#define ARK_BAD_DKY              -26
+#define ARK_TOO_CLOSE            -27
+
+#define ARK_POSTPROCESS_FAIL     -28
+
+
+/*===============================================================
+                          FUNCTION TYPES
+===============================================================*/
+
+/*---------------------------------------------------------------
+ Type : ARKRhsFn
+-----------------------------------------------------------------
+ The f functions which define the right hand side of the ODE
+ system M*y' = fe(t,y) + fi(t,y) must have type ARKRhsFn.
+ f takes as input the independent variable value t, and the
+ dependent variable vector y.  It stores the result of fe(t,y) 
+ or fi(t,y) in the vector ydot.  The y and ydot arguments are of 
+ type N_Vector.
+ (Allocation of memory for ydot is handled within ARKODE)
+ The user_data parameter is the same as the user_data
+ parameter set by the user through the ARKodeSetUserData routine.
+ This user-supplied pointer is passed to the user's fe or fi
+ function every time it is called.
+
+ A ARKRhsFn should return 0 if successful, a negative value if
+ an unrecoverable error occured, and a positive value if a 
+ recoverable error (e.g. invalid y values) occured. 
+ If an unrecoverable occured, the integration is halted. 
+ If a recoverable error occured, then (in most cases) ARKODE
+ will try to correct and retry.
+---------------------------------------------------------------*/
+typedef int (*ARKRhsFn)(realtype t, N_Vector y,
+			N_Vector ydot, void *user_data);
+
+/*---------------------------------------------------------------
+ Type : ARKRootFn
+-----------------------------------------------------------------
+ A function g, which defines a set of functions g_i(t,y) whose
+ roots are sought during the integration, must have type 
+ ARKRootFn. The function g takes as input the independent 
+ variable value t, and the dependent variable vector y.  It 
+ stores the nrtfn values g_i(t,y) in the realtype array gout.
+ (Allocation of memory for gout is handled within ARKODE.)
+ The user_data parameter is the same as that passed by the user
+ to the ARKodeSetUserData routine.  This user-supplied pointer 
+ is passed to the user's g function every time it is called.
+
+ A ARKRootFn should return 0 if successful or a non-zero value
+ if an error occured (in which case the integration will be 
+ halted).
+---------------------------------------------------------------*/
+typedef int (*ARKRootFn)(realtype t, N_Vector y, 
+			 realtype *gout, void *user_data);
+
+/*---------------------------------------------------------------
+ Type : ARKEwtFn
+-----------------------------------------------------------------
+ A function e, which sets the error weight vector ewt, must have
+ type ARKEwtFn.  The function e takes as input the current 
+ dependent variable y. It must set the vector of error weights 
+ used in the WRMS norm:
+ 
+   ||y||_WRMS = sqrt [ 1/N * sum ( ewt_i * y_i)^2 ]
+
+ Typically, the vector ewt has components:
+ 
+   ewt_i = 1 / (reltol * |y_i| + abstol_i)
+
+ The user_data parameter is the same as that passed by the user
+ to the ARKodeSetUserData routine.  This user-supplied pointer 
+ is passed to the user's e function every time it is called.
+ A ARKEwtFn e must return 0 if the error weight vector has been
+ successfuly set and a non-zero value otherwise.
+---------------------------------------------------------------*/
+typedef int (*ARKEwtFn)(N_Vector y, N_Vector ewt, void *user_data);
+
+/*---------------------------------------------------------------
+ Type : ARKRwtFn
+-----------------------------------------------------------------
+ A function r, which sets the residual weight vector rwt, must 
+ have type ARKRwtFn.  The function r takes as input the current 
+ dependent variable y.  It must set the vector of residual 
+ weights used in the WRMS norm:
+ 
+   ||v||_WRMS = sqrt [ 1/N * sum ( rwt_i * v_i)^2 ]
+
+ Typically, the vector rwt has components:
+ 
+   rwt_i = 1 / (reltol * |(M*y)_i| + rabstol_i)
+
+ The user_data parameter is the same as that passed by the user
+ to the ARKodeSetUserData routine.  This user-supplied pointer 
+ is passed to the user's r function every time it is called.
+ A ARKRwtFn e must return 0 if the residual weight vector has 
+ been successfuly set and a non-zero value otherwise.
+---------------------------------------------------------------*/
+typedef int (*ARKRwtFn)(N_Vector y, N_Vector rwt, void *user_data);
+
+/*---------------------------------------------------------------
+ Type : ARKErrHandlerFn
+-----------------------------------------------------------------
+ A function eh, which handles error messages, must have type
+ ARKErrHandlerFn.  The function eh takes as input the error code, 
+ the name of the module reporting the error, the error message, 
+ and a pointer to user data, the same as that passed to 
+ ARKodeSetUserData.
+ 
+ All error codes are negative, except ARK_WARNING which indicates 
+ a warning (the solver continues).
+
+ A ARKErrHandlerFn has no return value.
+---------------------------------------------------------------*/
+typedef void (*ARKErrHandlerFn)(int error_code, const char *module, 
+				const char *function, char *msg, 
+				void *user_data); 
+
+/*---------------------------------------------------------------
+ Type : ARKAdaptFn
+-----------------------------------------------------------------
+ A function which sets the new time step h, must have type 
+ ARKAdaptFn.  The function takes as input the current dependent 
+ variable y, the current time t, the last 3 step sizes h, 
+ the last 3 error estimates, the method order q, the embedding 
+ order p, and a pointer to user data. The function must set the 
+ scalar step size for the upcoming time step.  This value will 
+ subsequently be bounded by the user-supplied values for the 
+ minimum and maximum allowed time step, and the time step 
+ satisfying the explicit stability restriction.  The user_data 
+ parameter is the same as that passed by the user to the 
+ ARKodeSetUserData routine.  This user-supplied pointer is passed 
+ to the function every time it is called.
+
+ A ARKAdaptFn must return 0 if the new time step has been
+ successfuly set and a non-zero value otherwise.
+---------------------------------------------------------------*/
+typedef int (*ARKAdaptFn)(N_Vector y, realtype t, realtype h1, 
+			  realtype h2, realtype h3, 
+			  realtype e1, realtype e2, 
+			  realtype e3, int q, int p, 
+			  realtype *hnew, void *user_data);
+
+/*---------------------------------------------------------------
+ Type : ARKExpStabFn
+-----------------------------------------------------------------
+ A function which returns the time step satisfying the stability 
+ restriction for the explicit portion of the ODE.  The function 
+ takes as input the current dependent variable y, the current 
+ time t, and a pointer to user data. The function must set the 
+ scalar step size satisfying the stability restriction for the 
+ upcoming time step.  This value will subsequently be bounded by 
+ the user-supplied values for the minimum and maximum allowed 
+ time step, and the accuracy-based time step.  The user_data 
+ parameter is the same as that passed by the user to the 
+ ARKodeSetUserData routine.  This user-supplied pointer is passed
+ to the function every time it is called.
+
+ If this function is not supplied (NULL), or if it returns a
+ negative time step size, then ARKode will assume that there is
+ no explicit stability restriction on the time step size.
+
+ A ARKExpStabFn must return 0 if the step size limit has been
+ successfuly set and a non-zero value otherwise.
+---------------------------------------------------------------*/
+typedef int (*ARKExpStabFn)(N_Vector y, realtype t, 
+			    realtype *hstab, void *user_data);
+
+/*---------------------------------------------------------------
+ Type : ARKVecResizeFn
+-----------------------------------------------------------------
+ When calling ARKodeResize, the user may specify a vector resize
+ function to be used to convert any existing N_Vectors in the 
+ ARKode memory structure to the new problem size.  This would 
+ typically be used if there is a user-supplied N_Vector module 
+ that allows dynamic resizing of the vector data structures 
+ without the need to delete/allocate memory on each call.  
+
+ The default behavior will be to delete the vector memory and 
+ re-clone from the new vector; if this is the desired behavior 
+ then specification of the ARKVecResizeFn is not recommended.
+
+ The first argument, 'y', is the vector to be resized.
+
+ The second argument, 'ytemplate', is the user-provided vector 
+ with the "new" size, that may be used as a template.
+
+ The third argument, 'user_data', is a user-provided data 
+ structure to ARKodeResize, in case additional data is 
+ necessary for the resize operation.
+
+ A ARKVecResizeFn should return 0 if successful, and a nonzero 
+ value if an error occurred.
+---------------------------------------------------------------*/
+typedef int (*ARKVecResizeFn)(N_Vector y, N_Vector ytemplate, 
+			      void *user_data);
+
+/*---------------------------------------------------------------
+ Type : ARKPostProcessStepFn
+-----------------------------------------------------------------
+ A function that is used to process the results of each timestep
+ solution, in preparation for subsequent steps.  A routine of 
+ this type is designed for tasks such as inter-processor 
+ communication, computation of derived quantities, etc..
+
+ IF THIS IS USED TO MODIFY ANY OF THE ACTIVE STATE DATA, THEN ALL
+ THEORETICAL GUARANTEES OF SOLUTION ACCURACY AND STABILITY ARE 
+ LOST.
+
+ Inputs: 
+   t          current time of ARKode solution
+   y          current ARKode solution N_Vector for processing
+   user_data  the structure passed by the user to the 
+              ARKodeSetUserData routine.
+---------------------------------------------------------------*/
+typedef int (*ARKPostProcessStepFn)(realtype t, N_Vector y, 
+				    void *user_data);
+
+
+/*===============================================================
+                       USER-CALLABLE ROUTINES
+===============================================================*/
+
+/*---------------------------------------------------------------
+ Function : ARKodeCreate
+-----------------------------------------------------------------
+ ARKodeCreate creates an internal memory block for a problem to
+ be solved by ARKODE.
+
+ If successful, ARKodeCreate returns a pointer to initialized
+ problem memory. This pointer should be passed to ARKodeInit.
+ If an initialization error occurs, ARKodeCreate prints an error
+ message to standard err and returns NULL.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT void *ARKodeCreate();
+
+/*---------------------------------------------------------------
+ Integrator optional input specification functions
+-----------------------------------------------------------------
+ The following functions can be called to set optional inputs
+ to values other than the defaults given below.  
+
+
+ Function                 |  Optional input / [ default value ]
+-----------------------------------------------------------------
+ ARKodeSetDefaults        | resets all optional inputs to ARKode 
+                          | default values.  Does not change 
+                          | problem-defining function pointers 
+                          | fe and fi or user_data pointer.  Also
+                          | leaves alone any data structures or 
+                          | options related to root-finding 
+                          | (those can be reset using 
+                          ! ARKodeRootInit).
+                          | [internal]
+                          |
+ ARKodeSetOptimalParams   | sets all adaptivity and solver 
+                          | parameters to our 'best guess' values, 
+                          | for a given integration method (ERK, 
+                          | DIRK, ARK) and a given method order.  
+                          | Should only be called after the method
+                          | order and integration method have been 
+                          ! set.
+                          | [internal]
+                          |
+ ARKodeSetErrHandlerFn    | user-provided ErrHandler function.
+                          | [internal]
+                          |
+ ARKodeSetErrFile         | the file pointer for an error file
+                          | where all ARKODE warning and error
+                          | messages will be written if the 
+                          | default internal error handling 
+                          | function is used. This parameter can 
+                          | be stdout (standard output), stderr 
+                          | (standard error), or a file pointer 
+                          | (corresponding to a user error file 
+                          | opened for writing) returned by fopen.
+                          | If not called, then all messages will
+                          | be written to stderr.
+                          | [stderr]
+                          |
+ ARKodeSetUserData        | a pointer to user data that will be
+                          | passed to the user's f function every
+                          | time f is called.
+                          | [NULL]
+                          |
+ ARKodeSetDiagnostics     | the file pointer for a diagnostics file 
+                          | where all ARKODE step adaptivity and solver 
+                          | information is written.  This parameter can 
+                          | be stdout or stderr, though the preferred 
+                          | approach is to specify a file pointer 
+                          | (corresponding to a user diagnostics file 
+                          | opened for writing) returned by fopen.  If 
+                          | not called, or if called with a NULL file
+                          | pointer, all diagnostics output is disabled.
+                          | NOTE: when run in parallel, only one process 
+                          | should set a non-NULL value for this pointer, 
+                          | since statistics from all processes would be 
+                          | identical.
+                          | [NULL]
+                          |
+ ARKodeSetOrder           | method order to be used by the solver.
+                          | [4]
+                          |
+ ARKodeSetDenseOrder      | polynomial order to be used for dense 
+                          | output.  Allowed values are between 0
+                          | and min(q,5) (where q is the order of
+                          | the integrator)
+                          | [3]
+                          |
+ ARKodeSetLinear          | specifies that the implicit portion of 
+                          | the problem is linear, and to tighten 
+                          | the linear solver tolerances while 
+                          | taking only one Newton iteration.
+                          | [FALSE]
+                          |
+ ARKodeSetNonlinear       | specifies that the implicit portion of 
+                          | the problem is nonlinear.  Used to undo
+                          | a previous call to ARKodeSetLinear.
+                          | [TRUE]
+                          |
+ ARKodeSetFixedPoint      | specifies that the implicit portion of 
+                          | the problem should use the accelerated 
+                          | fixed-point solver.
+                          | [FALSE]
+                          |
+ ARKodeSetNewton          | specifies that the implicit portion of 
+                          | the problem should use the modified Newton 
+                          | solver.  Used to undo a previous call to
+                          | ARKodeSetFixedPoint.
+                          | [TRUE]
+                          |
+ ARKodeSetExplicit        | specifies that implicit portion of 
+                          | problem is disabled, and to use an 
+                          | explicit RK method.
+                          | [FALSE]
+                          |
+ ARKodeSetImplicit        | specifies that explicit portion of 
+                          | problem is disabled, and to use an 
+                          | implicit RK method.
+                          | [FALSE]
+                          |
+ ARKodeSetImEx            | specifies that problem has both 
+                          | implicit and explicit parts, and to 
+                          | use an ARK method.
+                          | [TRUE]
+                          |
+ ARKodeSetERKTable        | specifies to use a customized Butcher 
+                          | table for the explicit portion of the 
+                          | system.  This automatically calls 
+                          ! ARKodeSetExplicit.
+                          | [determined by ARKODE based on order]
+                          |
+ ARKodeSetIRKTable        | specifies to use a customized Butcher 
+                          | table for the implicit portion of the 
+                          | system. This automatically calls 
+                          ! ARKodeSetImplicit.
+                          | [determined by ARKODE based on order]
+                          |
+ ARKodeSetARKTables       | specifies to use customized Butcher 
+                          | tables for the IMEX system.  This 
+                          ! automatically calls ARKodeSetImEx.
+                          | [determined by ARKODE based on order]
+                          |
+ ARKodeSetERKTableNum     | specifies to use a built-in Butcher 
+                          | table for the explicit portion of the 
+                          | system.  The integer argument should 
+                          | match an existing method in 
+                          | ARKodeLoadButcherTable() within the file
+                          | arkode_butcher.c.  Error-checking is
+                          | performed to ensure that the table
+                          | exists, and is not implicit.  This 
+                          ! automatically calls ARKodeSetExplicit.
+                          | [determined by ARKODE based on order]
+                          |
+ ARKodeSetIRKTableNum     | specifies to use a built-in Butcher 
+                          | table for the implicit portion of the 
+                          | system.  The integer argument should 
+                          | match an existing method in 
+                          | ARKodeLoadButcherTable() within the file
+                          | arkode_butcher.c.  Error-checking is
+                          | performed to ensure that the table
+                          | exists, and is not explicit.  This 
+                          ! automatically calls ARKodeSetImplicit.
+                          | [determined by ARKODE based on order]
+                          |
+ ARKodeSetARKTableNum     | specifies to use a built-in Butcher 
+                          | tables for the ImEx system.  The 
+                          ! integer arguments should match existing 
+                          | methods in ARKodeLoadButcherTable() 
+                          | within the file arkode_butcher.c.  
+                          | Error-checking is performed to ensure 
+                          | that the tables exist.  Subsequent 
+                          | error-checking is automatically performed
+                          | to ensure that the tables' stage times 
+                          | and solution coefficients match.  This 
+                          ! automatically calls ARKodeSetImEx.
+                          | [determined by ARKODE based on order]
+                          |
+ ARKodeSetMaxNumSteps     | maximum number of internal steps to be
+                          | taken by the solver in its attempt to
+                          | reach tout.
+                          | [500]
+                          |
+ ARKodeSetMaxHnilWarns    | maximum number of warning messages
+                          | issued by the solver that t+h==t on 
+                          | the next internal step. A value of -1 
+                          | means no such messages are issued.
+                          | [10]
+                          |
+ ARKodeSetInitStep        | initial step size.
+                          | [estimated by ARKODE]
+                          |
+ ARKodeSetMinStep         | minimum absolute value of step size
+                          | allowed.
+                          | [0.0]
+                          |
+ ARKodeSetMaxStep         | maximum absolute value of step size
+                          | allowed.
+                          | [infinity]
+                          |
+ ARKodeSetStopTime        | the independent variable value past
+                          | which the solution is not to proceed.
+                          | [infinity]
+                          |
+ ARKodeSetFixedStep       | specifies to use a fixed step size 
+                          | throughout integration
+                          | [off]
+                          |
+ ARKodeSetCFLFraction     | safety factor to use for explicitly 
+                          ! stable steps
+                          | [0.5]
+                          |
+ ARKodeSetSafetyFactor    | safety factor to use for error-based 
+                          ! step adaptivity
+                          | [0.96]
+                          |
+ ARKodeSetErrorBias       | error bias factor to use in error-based
+                          ! step adaptivity
+                          | [1.5]
+                          |
+ ARKodeSetMaxGrowth       | maximum growth factor for successive 
+                          ! time steps (not including the first step).
+                          | [20.0]
+                          |
+ ARKodeSetMaxFirstGrowth  | maximum growth factor for first step.
+                          | [10000.0]
+                          |
+ ARKodeSetMaxEFailGrowth  | maximum growth factor after an error failure.
+                          | [0.3]
+                          |
+ ARKodeSetSmallNumEFails  | maximum number of error failures before 
+                          ! MaxFailGrowth factor is used.
+                          | [2]
+                          |
+ ARKodeSetMaxCFailGrowth  | maximum growth factor after a convergence failure.
+                          | [0.25]
+                          |
+ ARKodeSetFixedStepBounds | step growth interval to force retention of 
+                          ! the same step size
+                          | [1.0 1.5]
+                          |
+ ARKodeSetAdaptivityMethod | Method to use for time step adaptivity
+                          | [0]
+                          |
+ ARKodeSetAdaptivityFn    | user-provided time step adaptivity 
+                          | function.
+                          | [internal]
+                          |
+ ARKodeSetNonlinCRDown    | user-provided nonlinear convergence
+                          | rate constant.
+                          | [0.3]
+                          |
+ ARKodeSetNonlinRDiv      | user-provided nonlinear divergence ratio.
+                          | [2.3]
+                          |
+ ARKodeSetDeltaGammaMax   | user-provided linear setup decision
+                          | constant.
+                          | [0.2]
+                          |
+ ARKodeSetMaxStepsBetweenLSet | user-provided linear setup decision
+                          | constant.
+                          | [20]
+                          |
+ ARKodeSetPredictorMethod | Method to use for predicting implicit 
+                          | solutions.
+                          | [0]
+                          |
+ ARKodeSetStabilityFn     | user-provided explicit time step 
+                          | stability function.
+                          | [internal]
+                          |
+ ARKodeSetMaxErrTestFails | Maximum number of error test failures
+                          | in attempting one step.
+                          | [7]
+                          |
+ ARKodeSetMaxNonlinIters  | Maximum number of nonlinear solver
+                          | iterations at one stage solution.
+                          | [3]
+                          |
+ ARKodeSetMaxConvFails    | Maximum number of convergence failures
+                          | allowed in attempting one step.
+                          | [10]
+                          |
+ ARKodeSetNonlinConvCoef  | Coefficient in the nonlinear
+                          | convergence test.
+                          | [0.1]
+                          |
+-----------------------------------------------------------------
+ ARKodeSetRootDirection      | Specifies the direction of zero
+                             | crossings to be monitored
+                             | [both directions]
+                             |
+ ARKodeSetNoInactiveRootWarn | disable warning about possible
+                             | g==0 at beginning of integration
+-----------------------------------------------------------------
+ Return flag:
+   ARK_SUCCESS   if successful
+   ARK_MEM_NULL  if the arkode memory is NULL
+   ARK_ILL_INPUT if an argument has an illegal value
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeSetDefaults(void *arkode_mem);
+SUNDIALS_EXPORT int ARKodeSetOptimalParams(void *arkode_mem);
+SUNDIALS_EXPORT int ARKodeSetErrHandlerFn(void *arkode_mem, 
+					  ARKErrHandlerFn ehfun, 
+					  void *eh_data);
+SUNDIALS_EXPORT int ARKodeSetErrFile(void *arkode_mem, 
+				     FILE *errfp);
+SUNDIALS_EXPORT int ARKodeSetUserData(void *arkode_mem, 
+				      void *user_data);
+SUNDIALS_EXPORT int ARKodeSetDiagnostics(void *arkode_mem, 
+					 FILE *diagfp);
+SUNDIALS_EXPORT int ARKodeSetOrder(void *arkode_mem, int maxord);
+SUNDIALS_EXPORT int ARKodeSetDenseOrder(void *arkode_mem, int dord);
+SUNDIALS_EXPORT int ARKodeSetLinear(void *arkode_mem, int timedepend);
+SUNDIALS_EXPORT int ARKodeSetNonlinear(void *arkode_mem);
+SUNDIALS_EXPORT int ARKodeSetFixedPoint(void *arkode_mem, long int fp_m);
+SUNDIALS_EXPORT int ARKodeSetNewton(void *arkode_mem);
+SUNDIALS_EXPORT int ARKodeSetExplicit(void *arkode_mem);
+SUNDIALS_EXPORT int ARKodeSetImplicit(void *arkode_mem);
+SUNDIALS_EXPORT int ARKodeSetImEx(void *arkode_mem);
+SUNDIALS_EXPORT int ARKodeSetERKTable(void *arkode_mem, int s, 
+				      int q, int p, realtype *c, 
+				      realtype *A, realtype *b, 
+				      realtype *bembed);
+SUNDIALS_EXPORT int ARKodeSetIRKTable(void *arkode_mem, int s, 
+				      int q, int p, realtype *c, 
+				      realtype *A, realtype *b, 
+				      realtype *bembed);
+SUNDIALS_EXPORT int ARKodeSetARKTables(void *arkode_mem, int s, 
+				       int q, int p, 
+				       realtype *ci, realtype *ce, 
+				       realtype *Ai, realtype *Ae, 
+				       realtype *bi, realtype *be, 
+				       realtype *b2i, realtype *b2e);
+SUNDIALS_EXPORT int ARKodeSetERKTableNum(void *arkode_mem, int itable);
+SUNDIALS_EXPORT int ARKodeSetIRKTableNum(void *arkode_mem, int itable);
+SUNDIALS_EXPORT int ARKodeSetARKTableNum(void *arkode_mem, 
+					 int itable, int etable);
+SUNDIALS_EXPORT int ARKodeSetMaxNumSteps(void *arkode_mem, 
+					 long int mxsteps);
+SUNDIALS_EXPORT int ARKodeSetMaxHnilWarns(void *arkode_mem, 
+					  int mxhnil);
+SUNDIALS_EXPORT int ARKodeSetInitStep(void *arkode_mem, 
+				      realtype hin);
+SUNDIALS_EXPORT int ARKodeSetMinStep(void *arkode_mem, 
+				     realtype hmin);
+SUNDIALS_EXPORT int ARKodeSetMaxStep(void *arkode_mem, 
+				     realtype hmax);
+SUNDIALS_EXPORT int ARKodeSetStopTime(void *arkode_mem, 
+				      realtype tstop);
+SUNDIALS_EXPORT int ARKodeSetFixedStep(void *arkode_mem, 
+				       realtype hfixed);
+SUNDIALS_EXPORT int ARKodeSetCFLFraction(void *arkode_mem, 
+					 realtype cfl_frac);
+SUNDIALS_EXPORT int ARKodeSetSafetyFactor(void *arkode_mem, 
+					  realtype safety);
+SUNDIALS_EXPORT int ARKodeSetErrorBias(void *arkode_mem, 
+				       realtype bias);
+SUNDIALS_EXPORT int ARKodeSetMaxGrowth(void *arkode_mem, 
+				       realtype mx_growth);
+SUNDIALS_EXPORT int ARKodeSetFixedStepBounds(void *arkode_mem, 
+					     realtype lb, realtype ub);
+SUNDIALS_EXPORT int ARKodeSetAdaptivityMethod(void *arkode_mem, 
+					      int imethod, 
+					      int idefault, int pq, 
+					      realtype *adapt_params);
+SUNDIALS_EXPORT int ARKodeSetAdaptivityFn(void *arkode_mem, 
+					  ARKAdaptFn hfun, 
+					  void *h_data);
+SUNDIALS_EXPORT int ARKodeSetMaxFirstGrowth(void *arkode_mem, 
+					    realtype etamx1);
+SUNDIALS_EXPORT int ARKodeSetMaxEFailGrowth(void *arkode_mem, 
+					    realtype etamxf);
+SUNDIALS_EXPORT int ARKodeSetSmallNumEFails(void *arkode_mem, 
+					    int small_nef);
+SUNDIALS_EXPORT int ARKodeSetMaxCFailGrowth(void *arkode_mem, 
+					    realtype etacf);
+SUNDIALS_EXPORT int ARKodeSetNonlinCRDown(void *arkode_mem, 
+					  realtype crdown);
+SUNDIALS_EXPORT int ARKodeSetNonlinRDiv(void *arkode_mem, 
+					realtype rdiv);
+SUNDIALS_EXPORT int ARKodeSetDeltaGammaMax(void *arkode_mem, 
+					   realtype dgmax);
+SUNDIALS_EXPORT int ARKodeSetMaxStepsBetweenLSet(void *arkode_mem, 
+						 int msbp);
+SUNDIALS_EXPORT int ARKodeSetPredictorMethod(void *arkode_mem, 
+					     int method);
+SUNDIALS_EXPORT int ARKodeSetStabilityFn(void *arkode_mem, 
+					 ARKExpStabFn EStab, 
+					 void *estab_data);
+SUNDIALS_EXPORT int ARKodeSetMaxErrTestFails(void *arkode_mem, 
+					     int maxnef);
+SUNDIALS_EXPORT int ARKodeSetMaxNonlinIters(void *arkode_mem, 
+					    int maxcor);
+SUNDIALS_EXPORT int ARKodeSetMaxConvFails(void *arkode_mem, 
+					  int maxncf);
+SUNDIALS_EXPORT int ARKodeSetNonlinConvCoef(void *arkode_mem, 
+					    realtype nlscoef);
+
+SUNDIALS_EXPORT int ARKodeSetRootDirection(void *arkode_mem, 
+					   int *rootdir);
+SUNDIALS_EXPORT int ARKodeSetNoInactiveRootWarn(void *arkode_mem);
+
+SUNDIALS_EXPORT int ARKodeSetPostprocessStepFn(void *arkode_mem,
+					       ARKPostProcessStepFn ProcessStep);
+
+/*---------------------------------------------------------------
+ Function : ARKodeInit
+-----------------------------------------------------------------
+ ARKodeInit allocates and initializes memory for a problem to
+ to be solved by ARKODE.
+
+ arkode_mem is pointer to ARKODE memory returned by ARKodeCreate.
+
+ fe      is the name of the C function defining the explicit 
+         portion of the right-hand side function in 
+                y' = fe(t,y) + fi(t,y).
+
+ fi      is the name of the C function defining the implicit 
+         portion of the right-hand side function in 
+                y' = fe(t,y) + fi(t,y).
+
+ t0      is the initial value of t.
+
+ y0      is the initial condition vector y(t0).
+
+ Return flag:
+  ARK_SUCCESS   if successful
+  ARK_MEM_NULL  if the arkode memory was NULL
+  ARK_MEM_FAIL  if a memory allocation failed
+  ARK_ILL_INPUT if an argument has an illegal value.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeInit(void *arkode_mem, ARKRhsFn fe, 
+			       ARKRhsFn fi, realtype t0, N_Vector y0);
+
+/*---------------------------------------------------------------
+ Function : ARKodeReInit
+-----------------------------------------------------------------
+ ARKodeReInit re-initializes ARKode for the solution of a problem,
+ where a prior call to ARKodeInit has been made with the same
+ problem size N. ARKodeReInit performs the same input checking
+ and initializations that ARKodeInit does, but it does no memory
+ allocation, since the basic data structures initialized in 
+ ARKodeInit may be reused.
+
+ All of the arguments to ARKodeReInit have names and meanings
+ identical to those of ARKodeInit.
+
+ The return value of ARKodeReInit is equal to ARK_SUCCESS = 0 if
+ there were no errors; otherwise it is a negative int equal to:
+   ARK_MEM_NULL     indicating arkode_mem was NULL (i.e.,
+                    ARKodeCreate has not been called).
+   ARK_NO_MALLOC    indicating that arkode_mem has not been
+                    allocated (i.e., ARKodeInit has not been
+                    called).
+   ARK_ILL_INPUT    indicating an input argument was illegal
+                    (including an attempt to increase maxord).
+ In case of an error return, an error message is also printed.
+ --------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeReInit(void *arkode_mem, ARKRhsFn fe, 
+				 ARKRhsFn fi, realtype t0, N_Vector y0);
+
+/*---------------------------------------------------------------
+ Function : ARKodeResize
+-----------------------------------------------------------------
+ ARKodeResize re-initializes ARKODE's memory for a problem with a
+ changing vector size.  It is assumed that the problem dynamics 
+ before and after the vector resize will be comparable, so that 
+ all time-stepping heuristics prior to calling ARKodeResize 
+ remain valid after the call.  If instead the dynamics should be 
+ re-calibrated, the ARKode memory structure should be deleted 
+ with a call to ARKodeFree, and re-created with calls to 
+ ARKodeCreate and ARKodeInit.
+
+ To aid in the vector-resize operation, the user can supply a 
+ vector resize function, that will take as input an N_Vector with
+ the previous size, and return as output a corresponding vector 
+ of the new size.  If this function (of type ARKVecResizeFn) is 
+ not supplied (i.e. is set to NULL), then all existing N_Vectors 
+ will be destroyed and re-cloned from the input vector.
+
+ In the case that the dynamical time scale should be modified 
+ slightly from the previous time scale, an input "hscale" is 
+ allowed, that will re-scale the upcoming time step by the 
+ specified factor.  If a value <= 0 is specified, the default of 
+ 1.0 will be used.
+
+ Other arguments:
+   arkode_mem       Existing ARKode memory data structure.
+   ynew             The newly-sized solution vector, holding 
+                    the current dependent variable values.
+   t0               The current value of the independent 
+                    variable.
+   resize_data      User-supplied data structure that will be 
+                    passed to the supplied resize function.
+
+ The return value of ARKodeResize is equal to ARK_SUCCESS = 0 if
+ there were no errors; otherwise it is a negative int equal to:
+   ARK_MEM_NULL     indicating arkode_mem was NULL (i.e.,
+                    ARKodeCreate has not been called).
+   ARK_NO_MALLOC    indicating that arkode_mem has not been
+                    allocated (i.e., ARKodeInit has not been
+                    called).
+   ARK_ILL_INPUT    indicating an input argument was illegal
+                    (including an error from the supplied 
+		    resize function).
+ In case of an error return, an error message is also printed.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeResize(void *arkode_mem, N_Vector ynew, 
+				 realtype hscale, realtype t0,
+				 ARKVecResizeFn resize, 
+				 void *resize_data);
+
+/*---------------------------------------------------------------
+ Functions : ARKodeSStolerances
+             ARKodeSVtolerances
+             ARKodeWFtolerances
+-----------------------------------------------------------------
+ These functions specify the integration tolerances. One of them
+ SHOULD be called before the first call to ARKode; otherwise 
+ default values of reltol=1e-4 and abstol=1e-9 will be used, 
+ which may be entirely incorrect for a specific problem.
+
+ ARKodeSStolerances specifies scalar relative and absolute 
+   tolerances.
+ ARKodeSVtolerances specifies scalar relative tolerance and a 
+   vector absolute tolerance (a potentially different absolute 
+   tolerance for each vector component).
+ ARKodeWFtolerances specifies a user-provided function (of type 
+   ARKEwtFn) which will be called to set the error weight vector.
+
+ The tolerances reltol and abstol define a vector of error 
+ weights, ewt, with components
+   ewt[i] = 1/(reltol*abs(y[i]) + abstol)      (in SS case), or
+   ewt[i] = 1/(reltol*abs(y[i]) + abstol[i])   (in SV case).
+ This vector is used in all error and convergence tests, which
+ use a weighted RMS norm on all error-like vectors v:
+    WRMSnorm(v) = sqrt( (1/N) sum(i=1..N) (v[i]*ewt[i])^2 ),
+ where N is the problem dimension.
+
+ The return value of these functions is equal to ARK_SUCCESS=0 
+ if there were no errors; otherwise it is a negative int equal 
+ to:
+   ARK_MEM_NULL     indicating arkode_mem was NULL (i.e.,
+                    ARKodeCreate has not been called).
+   ARK_NO_MALLOC    indicating that arkode_mem has not been
+                    allocated (i.e., ARKodeInit has not been
+                    called).
+   ARK_ILL_INPUT    indicating an input argument was illegal
+                    (e.g. a negative tolerance)
+ In case of an error return, an error message is also printed.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeSStolerances(void *arkode_mem, 
+				       realtype reltol, 
+				       realtype abstol);
+SUNDIALS_EXPORT int ARKodeSVtolerances(void *arkode_mem, 
+				       realtype reltol, 
+				       N_Vector abstol);
+SUNDIALS_EXPORT int ARKodeWFtolerances(void *arkode_mem, 
+				       ARKEwtFn efun);
+
+/*---------------------------------------------------------------
+ Functions : ARKodeResStolerance
+             ARKodeResVtolerance
+             ARKodeResFtolerance
+-----------------------------------------------------------------
+ These functions specify the absolute residual tolerance. 
+ Specification of the absolute residual tolerance is only 
+ necessary for problems with non-identity mass matrices in which
+ the units of the solution vector y dramatically differ from the 
+ units of My, where M is the user-supplied mass matrix.  If this
+ occurs, one of these routines SHOULD be called before the first 
+ call to ARKode; otherwise the default value of rabstol=1e-9 will 
+ be used, which may be entirely incorrect for a specific problem.
+
+ ARKodeResStolerances specifies a scalar residual tolerance.
+
+ ARKodeResVtolerances specifies a vector residual tolerance 
+  (a potentially different absolute residual tolerance for 
+   each vector component).
+
+ ARKodeResFtolerances specifies a user-provides function (of 
+   type ARKRwtFn) which will be called to set the residual 
+   weight vector.
+
+ The tolerances reltol (defined for both the solution and 
+ residual) and rabstol define a vector of residual weights, 
+ rwt, with components
+   rwt[i] = 1/(reltol*abs(My[i]) + abstol)     (in S case), or
+   rwt[i] = 1/(reltol*abs(My[i]) + abstol[i])  (in V case).
+ This vector is used in all solver convergence tests, which
+ use a weighted RMS norm on all residual-like vectors v:
+    WRMSnorm(v) = sqrt( (1/N) sum(i=1..N) (v[i]*rwt[i])^2 ),
+ where N is the problem dimension.
+
+ The return value of these functions is equal to ARK_SUCCESS=0 
+ if there were no errors; otherwise it is a negative int equal 
+ to:
+   ARK_MEM_NULL     indicating arkode_mem was NULL (i.e.,
+                    ARKodeCreate has not been called).
+   ARK_NO_MALLOC    indicating that arkode_mem has not been
+                    allocated (i.e., ARKodeInit has not been
+                    called).
+   ARK_ILL_INPUT    indicating an input argument was illegal
+                    (e.g. a negative tolerance)
+ In case of an error return, an error message is also printed.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeResStolerance(void *arkode_mem, 
+					realtype rabstol);
+SUNDIALS_EXPORT int ARKodeResVtolerance(void *arkode_mem, 
+					N_Vector rabstol);
+SUNDIALS_EXPORT int ARKodeResFtolerance(void *arkode_mem, 
+					ARKRwtFn rfun);
+
+/*---------------------------------------------------------------
+ Function : ARKodeRootInit
+-----------------------------------------------------------------
+ ARKodeRootInit initializes a rootfinding problem to be solved
+ during the integration of the ODE system.  It must be called
+ after ARKodeCreate, and before ARKode.  The arguments are:
+
+ arkode_mem = pointer to ARKODE memory returned by ARKodeCreate.
+
+ nrtfn      = number of functions g_i, an integer >= 0.
+
+ g          = name of user-supplied function, of type ARKRootFn,
+              defining the functions g_i whose roots are sought.
+
+ If a new problem is to be solved with a call to ARKodeReInit,
+ where the new problem has no root functions but the prior one
+ did, then call ARKodeRootInit with nrtfn = 0.
+
+ The return value of ARKodeRootInit is ARK_SUCCESS = 0 if there 
+ were no errors; otherwise it is a negative int equal to:
+   ARK_MEM_NULL    indicating arkode_mem was NULL, or
+   ARK_MEM_FAIL    indicating a memory allocation failed.
+                   (including an attempt to increase maxord).
+   ARK_ILL_INPUT   indicating nrtfn > 0 but g = NULL.
+ In case of an error return, an error message is also printed.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeRootInit(void *arkode_mem, 
+				   int nrtfn, 
+				   ARKRootFn g);
+
+/*---------------------------------------------------------------
+ Function : ARKode
+-----------------------------------------------------------------
+ ARKode integrates the ODE over an interval in t.
+
+ ARKode may be run in one of two modes (ARK_NORMAL or 
+ ARK_ONE_STEP), as determined by the itask argument:
+
+ If itask is ARK_NORMAL, then the solver integrates from its
+ current internal t value to a point at or beyond tout, then
+ interpolates to t = tout and returns y(tout) in the user-
+ allocated vector yout.  This interpolation is typically less 
+ accurate than the full time step solutions produced by the 
+ solver, since the interpolating polynomial relies on the 
+ internal stage solutions, that may have reduced accuracy in 
+ comparison with the full time step solutions.  If the user 
+ wishes that this returned value have full method accuracy, they 
+ may issue a call to ARKodeSetStopTime before the call to ARKode 
+ to specify a fixed stop time to end the time step and return to 
+ the user.  Once the integrator returns at a tstop time, any 
+ future testing for tstop is disabled (and can be reenabled only 
+ though a new call to ARKodeSetStopTime).
+
+ If itask is ARK_ONE_STEP, then the solver takes one internal 
+ time step and returns in yout the value of y at the new internal 
+ time. In this case, tout is used only during the first call to 
+ ARKode to determine the direction of integration and the rough 
+ scale of the t variable.  As with the ARK_NORMAL mode, a user 
+ may specify a specific stop time for output of this step, 
+ assuming that the requested step is smaller than the step taken 
+ by the method. 
+
+ The time reached by the solver is placed in (*tret). The
+ user is responsible for allocating the memory for this value.
+
+ arkode_mem is the pointer to ARKODE memory returned by
+            ARKodeCreate.
+
+ tout  is the next time at which a computed solution is desired.
+
+ yout  is the computed solution vector. In ARK_NORMAL mode with no
+       errors and no roots found, yout=y(tout).
+
+ tret  is a pointer to a real location. ARKode sets (*tret) to
+       the time reached by the solver and returns
+       yout=y(*tret).
+
+ itask is ARK_NORMAL or ARK_ONE_STEP, as described above.
+
+ Here is a brief description of each return value:
+
+ ARK_SUCCESS:      ARKode succeeded and no roots were found.
+
+ ARK_ROOT_RETURN:  ARKode succeeded, and found one or more roots.
+                   If nrtfn > 1, call ARKodeGetRootInfo to see
+                   which g_i were found to have a root at (*tret).
+
+ ARK_TSTOP_RETURN: ARKode succeeded and returned at tstop.
+
+ ARK_MEM_NULL:     The arkode_mem argument was NULL.
+
+ ARK_NO_MALLOC:    arkode_mem was not allocated.
+
+ ARK_ILL_INPUT:    One of the inputs to ARKode is illegal. This
+                   includes the situation when a component of the
+                   error weight vectors becomes < 0 during
+                   internal time-stepping.  It also includes the
+                   situation where a root of one of the root
+                   functions was found both at t0 and very near t0.
+                   The ILL_INPUT flag will also be returned if the
+                   linear solver routine ARK--- (called by the user
+                   after calling ARKodeCreate) failed to set one of
+                   the linear solver-related fields in arkode_mem or
+                   if the linear solver's init routine failed. In
+                   any case, the user should see the printed
+                   error message for more details.
+
+ ARK_TOO_MUCH_WORK: The solver took mxstep internal steps but
+                   could not reach tout prior to the maximum number
+		   of steps (ark_mxstep).
+
+ ARK_TOO_MUCH_ACC: The solver could not satisfy the accuracy
+                   demanded by the user for some internal step.
+
+ ARK_ERR_FAILURE:  Error test failures occurred too many times
+                   (= ark_maxnef) during one internal time step 
+                   or occurred with |h| = hmin.
+
+ ARK_CONV_FAILURE: Convergence test failures occurred too many
+                   times (= ark_maxncf) during one internal time
+                   step or occurred with |h| = hmin.
+
+ ARK_LINIT_FAIL:   The linear solver's initialization function 
+                   failed.
+
+ ARK_LSETUP_FAIL:  The linear solver's setup routine failed in an
+                   unrecoverable manner.
+
+ ARK_LSOLVE_FAIL:  The linear solver's solve routine failed in an
+                   unrecoverable manner.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKode(void *arkode_mem, realtype tout, 
+			   N_Vector yout, realtype *tret, int itask);
+
+/*---------------------------------------------------------------
+ Function : ARKodeGetDky
+-----------------------------------------------------------------
+ ARKodeGetDky computes the kth derivative of the y function at
+ time t, where tn-hu <= t <= tn, tn denotes the current
+ internal time reached, and hu is the last internal step size
+ successfully used by the solver. The user may request
+ k=0, 1, ..., d, where d = min(5,q), with q the order of accuracy 
+ for the time integration method. The derivative vector is 
+ returned in dky. This vector must be allocated by the caller. It 
+ is only legal to call this function after a successful return 
+ from ARKode.
+
+ arkode_mem is the pointer to ARKODE memory returned by
+            ARKodeCreate.
+
+ t   is the time at which the kth derivative of y is evaluated.
+     The legal range for t is [tn-hu,tn] as described above.
+
+ k   is the order of the derivative of y to be computed. The
+     legal range for k is [0,min(q,3)] as described above.
+
+ dky is the output derivative vector [((d/dy)^k)y](t).
+
+ The return value for ARKodeGetDky is one of:
+
+   ARK_SUCCESS:  ARKodeGetDky succeeded.
+
+   ARK_BAD_K:    k is not in the range 0, 1, ..., s-1.
+
+   ARK_BAD_T:    t is not in the interval [tn-hu,tn].
+
+   ARK_BAD_DKY:  The dky argument was NULL.
+
+   ARK_MEM_NULL: The arkode_mem argument was NULL.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeGetDky(void *arkode_mem, realtype t, 
+				 int k, N_Vector dky);
+
+/*---------------------------------------------------------------
+ Integrator optional output extraction functions
+-----------------------------------------------------------------
+ The following functions can be called to get optional outputs
+ and statistics related to the main integrator.
+-----------------------------------------------------------------
+ ARKodeGetWorkSpace returns the ARKODE real and integer workspaces
+
+ ARKodeGetNumSteps returns the cumulative number of internal
+                   steps taken by the solver
+
+ ARKodeGetNumExpSteps returns the cumulative number of stability 
+                      limited steps taken by the solver
+
+ ARKodeGetNumAccSteps returns the cumulative number of accuracy 
+                      limited steps taken by the solver
+
+ ARKodeGetNumStepAttempts returns the total number of steps
+                          attempted by the solver
+
+ ARKodeGetNumRhsEvals returns the number of calls to the user's
+                      fe and fi functions
+
+ ARKodeGetNumLinSolvSetups returns the number of calls made to
+                           the linear solver's setup routine
+
+ ARKodeGetNumMassSolves returns the number of calls made to
+                           the mass matrix solve routine
+
+ ARKodeGetNumMassMultiplies returns the number of calls made to
+                            the mass matrix times vector routine
+
+ ARKodeGetNumErrTestFails returns the number of local error test
+                          failures that have occured
+
+ ARKodeGetActualInitStep returns the actual initial step size
+                         used by ARKODE
+
+ ARKodeGetLastStep returns the step size for the last internal
+                   step
+
+ ARKodeGetCurrentStep returns the step size to be attempted on
+                      the next internal step
+
+ ARKodeGetCurrentTime returns the current internal time reached
+                      by the solver
+
+ ARKodeGetCurrentButcherTables returns the explicit and implicit
+                               Butcher tables currently in use
+
+ ARKodeGetTolScaleFactor returns a suggested factor by which the
+                         user's tolerances should be scaled when
+                         too much accuracy has been requested for
+                         some internal step
+
+ ARKodeGetErrWeights returns the current error weight vector.
+                     The user must allocate space for eweight.
+
+ ARKodeGetEstLocalErrors returns the vector of estimated local
+                         errors. The user must allocate space
+                         for ele.
+
+ ARKodeGetNumGEvals returns the number of calls to the user's
+                    g function (for rootfinding)
+
+ ARKodeGetRootInfo returns the indices for which g_i was found to 
+                   have a root. The user must allocate space for 
+                   rootsfound. For i = 0 ... nrtfn-1, 
+                   rootsfound[i] = 1 if g_i has a root, and = 0 
+		   if not.
+
+ ARKodeGet* return values:
+   ARK_SUCCESS   if succesful
+   ARK_MEM_NULL  if the arkode memory was NULL
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeGetWorkSpace(void *arkode_mem, 
+				       long int *lenrw, 
+				       long int *leniw);
+SUNDIALS_EXPORT int ARKodeGetNumSteps(void *arkode_mem, 
+				      long int *nsteps);
+SUNDIALS_EXPORT int ARKodeGetNumExpSteps(void *arkode_mem, 
+					 long int *expsteps);
+SUNDIALS_EXPORT int ARKodeGetNumAccSteps(void *arkode_mem, 
+					 long int *accsteps);
+SUNDIALS_EXPORT int ARKodeGetNumStepAttempts(void *arkode_mem, 
+					     long int *step_attempts);
+SUNDIALS_EXPORT int ARKodeGetNumRhsEvals(void *arkode_mem, 
+					 long int *nfe_evals, 
+					 long int *nfi_evals);
+SUNDIALS_EXPORT int ARKodeGetNumLinSolvSetups(void *arkode_mem, 
+					      long int *nlinsetups);
+SUNDIALS_EXPORT int ARKodeGetNumMassSolves(void *arkode_mem, 
+					   long int *nMassSolves);
+SUNDIALS_EXPORT int ARKodeGetNumMassMultiplies(void *arkode_mem, 
+					       long int *nMassMult);
+SUNDIALS_EXPORT int ARKodeGetNumErrTestFails(void *arkode_mem, 
+					     long int *netfails);
+SUNDIALS_EXPORT int ARKodeGetActualInitStep(void *arkode_mem, 
+					    realtype *hinused);
+SUNDIALS_EXPORT int ARKodeGetLastStep(void *arkode_mem, 
+				      realtype *hlast);
+SUNDIALS_EXPORT int ARKodeGetCurrentStep(void *arkode_mem, 
+					 realtype *hcur);
+SUNDIALS_EXPORT int ARKodeGetCurrentTime(void *arkode_mem, 
+					 realtype *tcur);
+SUNDIALS_EXPORT int ARKodeGetCurrentButcherTables(void *arkode_mem, 
+						  int *s, int *q, int *p, 
+						  realtype *Ai, realtype *Ae, 
+						  realtype *ci, realtype *ce, 
+						  realtype *bi, realtype *be, 
+						  realtype *b2i, realtype *b2e);
+SUNDIALS_EXPORT int ARKodeGetTolScaleFactor(void *arkode_mem, 
+					    realtype *tolsfac);
+SUNDIALS_EXPORT int ARKodeGetErrWeights(void *arkode_mem, 
+					N_Vector eweight);
+SUNDIALS_EXPORT int ARKodeGetEstLocalErrors(void *arkode_mem, 
+					    N_Vector ele);
+SUNDIALS_EXPORT int ARKodeGetNumGEvals(void *arkode_mem, 
+				       long int *ngevals);
+SUNDIALS_EXPORT int ARKodeGetRootInfo(void *arkode_mem, 
+				      int *rootsfound);
+
+/*---------------------------------------------------------------
+ As a convenience, the following functions provides the
+ optional outputs in one group.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeGetIntegratorStats(void *arkode_mem, 
+					     long int *nsteps,
+					     long int *expsteps, 
+					     long int *accsteps, 
+					     long int *step_attempts, 
+					     long int *nfe_evals, 
+					     long int *nfi_evals, 
+					     long int *nlinsetups, 
+					     long int *netfails,
+					     realtype *hinused, 
+					     realtype *hlast, 
+					     realtype *hcur, 
+					     realtype *tcur);
+
+/*---------------------------------------------------------------
+ Nonlinear solver optional output extraction functions
+-----------------------------------------------------------------
+ The following functions can be called to get optional outputs
+ and statistics related to the nonlinear solver.
+-----------------------------------------------------------------
+ ARKodeGetNumNonlinSolvIters returns the number of nonlinear
+                             solver iterations performed.
+
+ ARKodeGetNumNonlinSolvConvFails returns the number of nonlinear
+                                 convergence failures.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeGetNumNonlinSolvIters(void *arkode_mem, 
+						long int *nniters);
+SUNDIALS_EXPORT int ARKodeGetNumNonlinSolvConvFails(void *arkode_mem, 
+						    long int *nncfails);
+
+/*---------------------------------------------------------------
+ As a convenience, the following function provides the
+ nonlinear solver optional outputs in a group.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeGetNonlinSolvStats(void *arkode_mem, 
+					     long int *nniters,
+					     long int *nncfails);
+
+/*---------------------------------------------------------------
+ As a convenience, the following function may be used to retrieve
+ Butcher tables from arkode_butcher.c.  The array A must be 
+ declared of type A[ARK_S_MAX][ARK_S_MAX], and the arrays c, b 
+ and b2 should all have length at least ARK_S_MAX.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeLoadButcherTable(int imethod, int *s, 
+					   int *q, int *p, 
+					   realtype *A, realtype *b, 
+					   realtype *c, realtype *b2);
+
+/*---------------------------------------------------------------
+ The following function returns the name of the constant 
+ associated with a ARKODE return flag
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT char *ARKodeGetReturnFlagName(long int flag);
+
+/*---------------------------------------------------------------
+ Function : ARKodeWriteParameters
+-----------------------------------------------------------------
+ ARKodeWriteParameters outputs all solver parameters to the 
+ provided file pointer.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeWriteParameters(void *arkode_mem, FILE *fp);
+
+/*---------------------------------------------------------------
+ Function : ARKodeWriteButcher
+-----------------------------------------------------------------
+ ARKodeWriteButcher outputs the Butcher tables to the 
+ provided file pointer.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKodeWriteButcher(void *arkode_mem, FILE *fp);
+
+/*---------------------------------------------------------------
+ Function : ARKodeFree
+-----------------------------------------------------------------
+ ARKodeFree frees the problem memory arkode_mem allocated by
+ ARKodeCreate and ARKodeInit. Its only argument is the pointer
+ arkode_mem returned by ARKodeCreate.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT void ARKodeFree(void **arkode_mem);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_band.h b/include/arkode/arkode_band.h
new file mode 100644
index 0000000..c96f764
--- /dev/null
+++ b/include/arkode/arkode_band.h
@@ -0,0 +1,94 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Header file for the ARKODE band linear solver, ARKBAND.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKBAND_H
+#define _ARKBAND_H
+
+#include <arkode/arkode_direct.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------
+ ARKBand:
+
+ A call to the ARKBand function links the main ARKODE integrator
+ with the ARKBAND linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ N is the size of the ODE system.
+
+ mupper is the upper bandwidth of the band Jacobian
+        approximation.
+
+ mlower is the lower bandwidth of the band Jacobian
+        approximation.
+
+ The return value of ARKBand is one of:
+    ARKDLS_SUCCESS   if successful
+    ARKDLS_MEM_NULL  if the arkode memory was NULL
+    ARKDLS_MEM_FAIL  if there was a memory allocation failure
+    ARKDLS_ILL_INPUT if a required vector operation is missing or
+                       if a bandwidth has an illegal value.
+---------------------------------------------------------------*/
+
+SUNDIALS_EXPORT int ARKBand(void *arkode_mem, long int N, 
+			    long int mupper, long int mlower);
+
+/*---------------------------------------------------------------
+ ARKMassBand:
+
+ A call to the ARKMassBand function links the mass matrix solve
+ with the ARKBAND linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ N is the size of the ODE system.
+
+ mupper is the upper bandwidth of the band Jacobian
+        approximation.
+
+ mlower is the lower bandwidth of the band Jacobian
+        approximation.
+
+ bmass is the user-supplied band mass matrix setup routine.
+
+ The return value of ARKBand is one of:
+    ARKDLS_SUCCESS   if successful
+    ARKDLS_MEM_NULL  if the arkode memory was NULL
+    ARKDLS_MEM_FAIL  if there was a memory allocation failure
+    ARKDLS_ILL_INPUT if a required vector operation is missing or
+                       if a bandwidth has an illegal value.
+---------------------------------------------------------------*/
+
+SUNDIALS_EXPORT int ARKMassBand(void *arkode_mem, long int N, 
+				long int mupper, long int mlower,
+				ARKDlsBandMassFn bmass);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_bandpre.h b/include/arkode/arkode_bandpre.h
new file mode 100644
index 0000000..0b905f8
--- /dev/null
+++ b/include/arkode/arkode_bandpre.h
@@ -0,0 +1,149 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the header file for the ARKBANDPRE module, which
+ * provides a banded difference quotient Jacobian-based
+ * preconditioner and solver routines for use with ARKSPGMR,
+ * ARKSPBCG, ARKSPTFQMR, ARKSPFGMR or ARKPCG.
+ *
+ * Summary:
+ * These routines provide a band matrix preconditioner based on
+ * difference quotients of the implicit portion of the ODE 
+ * right-hand side function f.  The user supplies parameters
+ *   mu = upper half-bandwidth (number of super-diagonals)
+ *   ml = lower half-bandwidth (number of sub-diagonals)
+ * The routines generate a band matrix of bandwidth ml + mu + 1
+ * and use this to form a preconditioner for use with the Krylov
+ * linear solver in ARKSP*. Although this matrix is intended to
+ * approximate the Jacobian dfi/dy, it may be a very crude
+ * approximation. The true Jacobian need not be banded, or its
+ * true bandwith may be larger than ml + mu + 1, as long as the
+ * banded approximation generated here is sufficiently accurate
+ * to speed convergence as a preconditioner.
+ *
+ * Usage:
+ *   The following is a summary of the usage of this module.
+ *   Details of the calls to ARKodeCreate, ARKSp*,
+ *   and ARKode are available in the User Guide.
+ *   To use these routines, the sequence of calls in the user
+ *   main program should be as follows:
+ *
+ *   #include <arkode/arkode_bandpre.h>
+ *   #include <nvector_serial.h>
+ *   ...
+ *   Set y0
+ *   ...
+ *   arkode_mem = ARKodeCreate();
+ *   ier = ARKodeInit(...);
+ *   ...
+ *   flag = ARKSptfqmr(arkode_mem, pretype, maxl);
+ *     -or-
+ *   flag = ARKSpgmr(arkode_mem, pretype, maxl);
+ *     -or-
+ *   flag = ARKSpbcg(arkode_mem, pretype, maxl);
+ *     -or-
+ *   flag = ARKSpfgmr(arkode_mem, pretype, maxl);
+ *     -or-
+ *   flag = ARKPcg(arkode_mem, pretype, maxl);
+ *   ...
+ *   flag = ARKBandPrecInit(arkode_mem, N, mu, ml);
+ *   ...
+ *   flag = ARKode(...);
+ *   ...
+ *   Free y0
+ *   ...
+ *   ARKodeFree(&arkode_mem);
+ *
+ * Notes:
+ * (1) Include this file for the ARKBandPrecData type definition.
+ * (2) In the ARKBandPrecAlloc call, the arguments N is the
+ *     problem dimension.
+ * (3) In the ARKBPSp* call, the user is free to specify
+ *     the input pretype and the optional input maxl.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKBANDPRE_H
+#define _ARKBANDPRE_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*---------------------------------------------------------------
+ ARKBandPrecInit:
+
+ ARKBandPrecInit allocates and initializes the BANDPRE preconditioner
+ module. This functino must be called AFTER one of the SPILS linear
+ solver modules has been attached to the ARKODE integrator.
+
+ The parameters of ARKBandPrecInit are as follows:
+
+ arkode_mem is the pointer to ARKODE memory returned by ARKodeCreate.
+
+ N is the problem size.
+
+ mu is the upper half bandwidth.
+
+ ml is the lower half bandwidth.
+
+ The return value of ARKBandPrecInit is one of:
+   ARKSPILS_SUCCESS if no errors occurred
+   ARKSPILS_MEM_NULL if the integrator memory is NULL
+   ARKSPILS_LMEM_NULL if the linear solver memory is NULL
+   ARKSPILS_ILL_INPUT if an input has an illegal value
+   ARKSPILS_MEM_FAIL if a memory allocation request failed
+
+ NOTE: The band preconditioner assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKBandPrecInit will
+       first test for a compatible N_Vector internal
+       representation by checking for required functions.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKBandPrecInit(void *arkode_mem, long int N, 
+				    long int mu, long int ml);
+
+/*---------------------------------------------------------------
+ Optional output functions : ARKBandPrecGet*
+
+ ARKBandPrecGetWorkSpace returns the real and integer work space used
+                        by ARKBANDPRE.
+
+ ARKBandPrecGetNumRhsEvals returns the number of calls made from
+                          ARKBANDPRE to the user's right-hand side
+                          routine f.
+
+ The return value of ARKBandPrecGet* is one of:
+   ARKSPILS_SUCCESS if no errors occurred
+   ARKSPILS_MEM_NULL if the integrator memory is NULL
+   ARKSPILS_LMEM_NULL if the linear solver memory is NULL
+   ARKSPILS_PMEM_NULL if the preconditioner memory is NULL
+---------------------------------------------------------------*/
+
+SUNDIALS_EXPORT int ARKBandPrecGetWorkSpace(void *arkode_mem, 
+					    long int *lenrwLS, 
+					    long int *leniwLS);
+SUNDIALS_EXPORT int ARKBandPrecGetNumRhsEvals(void *arkode_mem, 
+					      long int *nfevalsBP);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_bbdpre.h b/include/arkode/arkode_bbdpre.h
new file mode 100644
index 0000000..363c80c
--- /dev/null
+++ b/include/arkode/arkode_bbdpre.h
@@ -0,0 +1,271 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the header file for the ARKBBDPRE module, for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with ARKSPGMR, ARKSPBCG, 
+ * ARKSPTFQMR, ARKSPFGMR or ARKPCG, and the parallel implementation 
+ * of the NVECTOR module.
+ *
+ * Summary:
+ *
+ * These routines provide a preconditioner matrix that is
+ * block-diagonal with banded blocks. The blocking corresponds
+ * to the distribution of the dependent variable vector y among
+ * the processors. Each preconditioner block is generated from
+ * the Jacobian of the local part (on the current processor) of a
+ * given function g(t,y) approximating f(t,y). The blocks are
+ * generated by a difference quotient scheme on each processor
+ * independently. This scheme utilizes an assumed banded
+ * structure with given half-bandwidths, mudq and mldq.
+ * However, the banded Jacobian block kept by the scheme has
+ * half-bandwiths mukeep and mlkeep, which may be smaller.
+ *
+ * The user's calling program should have the following form:
+ *
+ *   #include <nvector_parallel.h>
+ *   #include <arkode/arkode_bbdpre.h>
+ *   ...
+ *   void *arkode_mem;
+ *   ...
+ *   Set y0
+ *   ...
+ *   arkode_mem = ARKodeCreate();
+ *   ier = ARKodeInit(...);
+ *   ...
+ *   flag = ARKSpgmr(arkode_mem, pretype, maxl);
+ *      -or-
+ *   flag = ARKSpbcg(arkode_mem, pretype, maxl);
+ *      -or-
+ *   flag = ARKSptfqmr(arkode_mem, pretype, maxl);
+ *      -or-
+ *   flag = ARKSpfgmr(arkode_mem, pretype, maxl);
+ *      -or-
+ *   flag = ARKPcg(arkode_mem, pretype, maxl);
+ *   ...
+ *   flag = ARKBBDPrecInit(arkode_mem, Nlocal, mudq ,mldq,
+ *                         mukeep, mlkeep, dqrely, gloc, cfn);
+ *   ...
+ *   ier = ARKode(...);
+ *   ...
+ *   ARKodeFree(&arkode_mem);
+ * 
+ *   Free y0
+ *
+ * The user-supplied routines required are:
+ *
+ *   f    = function defining the ODE right-hand side f(t,y).
+ *
+ *   gloc = function defining the approximation g(t,y).
+ *
+ *   cfn  = function to perform communication need for gloc.
+ *
+ * Notes:
+ *
+ * 1) This header file is included by the user for the definition
+ *    of the ARKBBDData type and for needed function prototypes.
+ *
+ * 2) The ARKBBDPrecInit call includes half-bandwiths mudq and mldq
+ *    to be used in the difference quotient calculation of the
+ *    approximate Jacobian. They need not be the true
+ *    half-bandwidths of the Jacobian of the local block of g,
+ *    when smaller values may provide a greater efficiency.
+ *    Also, the half-bandwidths mukeep and mlkeep of the retained
+ *    banded approximate Jacobian block may be even smaller,
+ *    to reduce storage and computation costs further.
+ *    For all four half-bandwidths, the values need not be the
+ *    same on every processor.
+ *
+ * 3) The actual name of the user's f function is passed to
+ *    ARKodeInit, and the names of the user's gloc and cfn
+ *    functions are passed to ARKBBDPrecInit.
+ *
+ * 4) The pointer to the user-defined data block user_data, which is
+ *    set through ARKodeSetUserData is also available to the user in
+ *    gloc and cfn.
+ *
+ * 5) Optional outputs specific to this module are available by
+ *    way of routines listed below. These include work space sizes
+ *    and the cumulative number of gloc calls. The costs
+ *    associated with this module also include nsetups banded LU
+ *    factorizations, nlinsetups cfn calls, and npsolves banded
+ *    backsolve calls, where nlinsetups and npsolves are
+ *    integrator/ARKSPGMR/ARKSPBCG/ARKSPTFQMR/ARKSPFGMR/ARKPCG 
+ *    optional outputs.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKBBDPRE_H
+#define _ARKBBDPRE_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------
+ Type: ARKLocalFn
+
+ The user must supply a function g(t,y) which approximates the
+ right-hand side function f for the system y'=f(t,y), and which
+ is computed locally (without interprocess communication).
+ (The case where g is mathematically identical to f is allowed.)
+ The implementation of this function must have type ARKLocalFn.
+
+ This function takes as input the local vector size Nlocal, the
+ independent variable value t, the local real dependent
+ variable vector y, and a pointer to the user-defined data
+ block user_data. It is to compute the local part of g(t,y) and
+ store this in the vector g.
+ (Allocation of memory for y and g is handled within the
+ preconditioner module.)
+ The user_data parameter is the same as that specified by the user
+ through the ARKodeSetFdata routine.
+
+ A ARKLocalFn should return 0 if successful, a positive value if 
+ a recoverable error occurred, and a negative value if an 
+ unrecoverable error occurred.
+---------------------------------------------------------------*/
+typedef int (*ARKLocalFn)(long int Nlocal, realtype t, N_Vector y,
+                          N_Vector g, void *user_data);
+
+
+/*---------------------------------------------------------------
+ Type: ARKCommFn
+
+ The user may supply a function of type ARKCommFn which performs
+ all interprocess communication necessary to evaluate the
+ approximate right-hand side function described above.
+
+ This function takes as input the local vector size Nlocal,
+ the independent variable value t, the dependent variable
+ vector y, and a pointer to the user-defined data block user_data.
+ The user_data parameter is the same as that specified by the user
+ through the ARKodeSetUserData routine. The ARKCommFn cfn is
+ expected to save communicated data in space defined within the
+ structure user_data. Note: A ARKCommFn cfn does not have a return value.
+
+ Each call to the ARKCommFn cfn is preceded by a call to the
+ ARKRhsFn f with the same (t,y) arguments. Thus cfn can omit any
+ communications done by f if relevant to the evaluation of g.
+ If all necessary communication was done by f, the user can
+ pass NULL for cfn in ARKBBDPrecInit (see below).
+
+ A ARKCommFn should return 0 if successful, a positive value if 
+ a recoverable error occurred, and a negative value if an 
+ unrecoverable error occurred.
+---------------------------------------------------------------*/
+typedef int (*ARKCommFn)(long int Nlocal, realtype t, 
+			 N_Vector y, void *user_data);
+
+
+/*---------------------------------------------------------------
+ ARKBBDPrecInit:
+
+ ARKBBDPrecInit allocates and initializes the BBD preconditioner.
+
+ The parameters of ARKBBDPrecInit are as follows:
+
+ arkode_mem is the pointer to the integrator memory.
+
+ Nlocal is the length of the local block of the vectors y etc.
+        on the current processor.
+
+ mudq, mldq are the upper and lower half-bandwidths to be used
+            in the difference quotient computation of the local
+            Jacobian block.
+
+ mukeep, mlkeep are the upper and lower half-bandwidths of the
+                retained banded approximation to the local Jacobian
+                block.
+
+ dqrely is an optional input. It is the relative increment
+        in components of y used in the difference quotient
+        approximations. To specify the default, pass 0.
+        The default is dqrely = sqrt(unit roundoff).
+
+ gloc is the name of the user-supplied function g(t,y) that
+      approximates f and whose local Jacobian blocks are
+      to form the preconditioner.
+
+ cfn is the name of the user-defined function that performs
+     necessary interprocess communication for the
+     execution of gloc.
+
+ The return value of ARKBBDPrecInit is one of:
+   ARKSPILS_SUCCESS if no errors occurred
+   ARKSPILS_MEM_NULL if the integrator memory is NULL
+   ARKSPILS_LMEM_NULL if the linear solver memory is NULL
+   ARKSPILS_ILL_INPUT if an input has an illegal value
+   ARKSPILS_MEM_FAIL if a memory allocation request failed
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKBBDPrecInit(void *arkode_mem, long int Nlocal, 
+				   long int mudq, long int mldq, 
+				   long int mukeep, long int mlkeep, 
+				   realtype dqrely,
+				   ARKLocalFn gloc, ARKCommFn cfn);
+
+
+/*---------------------------------------------------------------
+ ARKBBDPrecReInit:
+
+ ARKBBDPrecReInit re-initializes the BBDPRE module when solving a
+ sequence of problems of the same size with ARKSPGMR/ARKBBDPRE or
+ ARKSPBCG/ARKBBDPRE or ARKSPTFQMR/ARKBBDPRE or ARKSPFGMR/ARKBBDPRE
+ or ARKPCG/ARKBBDPRE provided there is no change in Nlocal, 
+ mukeep, or mlkeep. After solving one problem, and after calling 
+ ARKodeReInit to re-initialize the integrator for a subsequent 
+ problem, call ARKBBDPrecReInit.
+
+ All arguments have the same names and meanings as those
+ of ARKBBDPrecInit.
+
+ The return value of ARKBBDPrecReInit is one of:
+   ARKSPILS_SUCCESS if no errors occurred
+   ARKSPILS_MEM_NULL if the integrator memory is NULL
+   ARKSPILS_LMEM_NULL if the linear solver memory is NULL
+   ARKSPILS_PMEM_NULL if the preconditioner memory is NULL
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKBBDPrecReInit(void *arkode_mem, long int mudq, 
+				     long int mldq, realtype dqrely);
+
+
+/*---------------------------------------------------------------
+ BBDPRE optional output extraction routines:
+
+ ARKBBDPrecGetWorkSpace returns the BBDPRE real and integer work 
+                       space sizes.
+ ARKBBDPrecGetNumGfnEvals returns the number of calls to gfn.
+
+ The return value of ARKBBDPrecGet* is one of:
+   ARKSPILS_SUCCESS if no errors occurred
+   ARKSPILS_MEM_NULL if the integrator memory is NULL
+   ARKSPILS_LMEM_NULL if the linear solver memory is NULL
+   ARKSPILS_PMEM_NULL if the preconditioner memory is NULL
+---------------------------------------------------------------*/
+
+SUNDIALS_EXPORT int ARKBBDPrecGetWorkSpace(void *arkode_mem, 
+					   long int *lenrwLS, 
+					   long int *leniwLS);
+SUNDIALS_EXPORT int ARKBBDPrecGetNumGfnEvals(void *arkode_mem, 
+					     long int *ngevalsBBDP);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_dense.h b/include/arkode/arkode_dense.h
new file mode 100644
index 0000000..83da464
--- /dev/null
+++ b/include/arkode/arkode_dense.h
@@ -0,0 +1,77 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Header file for the ARKODE dense linear solver, ARKDENSE.
+ *---------------------------------------------------------------*/
+
+#ifndef _ARKDENSE_H
+#define _ARKDENSE_H
+
+#include <arkode/arkode_direct.h>
+#include <sundials/sundials_dense.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*---------------------------------------------------------------
+ Function: ARKDense
+-----------------------------------------------------------------
+ A call to the ARKDense function links the main integrator with
+ the ARKDENSE linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+            ARKodeCreate.
+
+ N is the size of the ODE system.
+
+ The return value of ARKDense is one of:
+    ARKDLS_SUCCESS   if successful
+    ARKDLS_MEM_NULL  if the arkode memory was NULL
+    ARKDLS_MEM_FAIL  if there was a memory allocation failure
+    ARKDLS_ILL_INPUT if a required vector operation is missing
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKDense(void *arkode_mem, long int N);
+
+/*---------------------------------------------------------------
+ Function: ARKMassDense
+-----------------------------------------------------------------
+ A call to the ARKMassDense function links the mass matrix solve
+ with the ARKDENSE linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+            ARKodeCreate.
+
+ N is the size of the ODE system.
+
+ dmass is the user-supplied dense mass matrix setup function.
+
+ The return value of ARKMassDense is one of:
+    ARKDLS_SUCCESS   if successful
+    ARKDLS_MEM_NULL  if the arkode memory was NULL
+    ARKDLS_MEM_FAIL  if there was a memory allocation failure
+    ARKDLS_ILL_INPUT if a required vector operation is missing
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassDense(void *arkode_mem, long int N, 
+				 ARKDlsDenseMassFn dmass);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_direct.h b/include/arkode/arkode_direct.h
new file mode 100644
index 0000000..c919583
--- /dev/null
+++ b/include/arkode/arkode_direct.h
@@ -0,0 +1,373 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Common header file for the direct linear solvers in ARKODE.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKDLS_H
+#define _ARKDLS_H
+
+#include <sundials/sundials_direct.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*===============================================================
+  ARKDIRECT CONSTANTS
+===============================================================*/
+
+/* ARKDLS return values */
+#define ARKDLS_SUCCESS          0
+#define ARKDLS_MEM_NULL        -1
+#define ARKDLS_LMEM_NULL       -2
+#define ARKDLS_ILL_INPUT       -3
+#define ARKDLS_MEM_FAIL        -4
+#define ARKDLS_MASSMEM_NULL    -5
+
+/* Additional last_flag values */
+#define ARKDLS_JACFUNC_UNRECVR  -6
+#define ARKDLS_JACFUNC_RECVR    -7
+#define ARKDLS_MASSFUNC_UNRECVR -8
+#define ARKDLS_MASSFUNC_RECVR   -9
+
+
+/*===============================================================
+  FUNCTION TYPES
+===============================================================*/
+
+/*---------------------------------------------------------------
+ Type: ARKDlsDenseJacFn
+
+ A dense Jacobian approximation function Jac must be of type 
+ ARKDlsDenseJacFn. Its parameters are:
+
+ N   is the problem size.
+
+ Jac is the dense matrix (of type DlsMat) that will be loaded
+     by a ARKDlsDenseJacFn with an approximation to the Jacobian 
+     matrix J = (df_i/dy_j) at the point (t,y). 
+
+ t   is the current value of the independent variable.
+
+ y   is the current value of the dependent variable vector,
+     namely the predicted value of y(t).
+
+ fy  is the vector f(t,y).
+
+ user_data is a pointer to user data - the same as the user_data
+     parameter passed to ARKodeSetFdata.
+
+ tmp1, tmp2, and tmp3 are pointers to memory allocated for
+ vectors of length N which can be used by a ARKDlsDenseJacFn
+ as temporary storage or work space.
+
+ A ARKDlsDenseJacFn should return 0 if successful, a positive 
+ value if a recoverable error occurred, and a negative value if 
+ an unrecoverable error occurred.
+
+ NOTE: The following are two efficient ways to load a dense Jac:         
+ (1) (with macros - no explicit data structure references)      
+     for (j=0; j < Neq; j++) {                                  
+       col_j = DENSE_COL(Jac,j);                                 
+       for (i=0; i < Neq; i++) {                                
+         generate J_ij = the (i,j)th Jacobian element           
+         col_j[i] = J_ij;                                       
+       }                                                        
+     }                                                          
+ (2) (without macros - explicit data structure references)      
+     for (j=0; j < Neq; j++) {                                  
+       col_j = (Jac->data)[j];                                   
+       for (i=0; i < Neq; i++) {                                
+         generate J_ij = the (i,j)th Jacobian element           
+         col_j[i] = J_ij;                                       
+       }                                                        
+     }                                                          
+ A third way, using the DENSE_ELEM(A,i,j) macro, is much less   
+ efficient in general.  It is only appropriate for use in small 
+ problems in which efficiency of access is NOT a major concern. 
+                                                                
+ NOTE: If the user's Jacobian routine needs other quantities,   
+     they are accessible as follows: hcur (the current stepsize)
+     and ewt (the error weight vector) are accessible through   
+     ARKodeGetCurrentStep and ARKodeGetErrWeights, respectively 
+     (see arkode.h). The unit roundoff is available as 
+     UNIT_ROUNDOFF defined in sundials_types.h.
+
+---------------------------------------------------------------*/
+typedef int (*ARKDlsDenseJacFn)(long int N, realtype t,
+				N_Vector y, N_Vector fy, 
+				DlsMat Jac, void *user_data,
+				N_Vector tmp1, N_Vector tmp2, 
+				N_Vector tmp3);
+  
+
+/*---------------------------------------------------------------
+ Type: ARKDlsDenseMassFn
+
+ A dense mass matrix approximation function Mass must be of type 
+ ARKDlsDenseMassFn. Its parameters are:
+
+ N   is the problem size.
+
+ t   is the current value of the independent variable.
+
+ M   is the dense matrix (of type DlsMat) that will be loaded
+     by a ARKDlsDenseMassFn with an approximation to the mass matrix.
+
+ user_data is a pointer to user data - the same as the user_data
+     parameter passed to ARKodeSetFdata.
+
+ tmp1, tmp2, and tmp3 are pointers to memory allocated for
+ vectors of length N which can be used by a ARKDlsDenseMassFn
+ as temporary storage or work space.
+
+ A ARKDlsDenseMassFn should return 0 if successful, and a 
+ negative value if an unrecoverable error occurred.
+
+---------------------------------------------------------------*/
+typedef int (*ARKDlsDenseMassFn)(long int N, realtype t, DlsMat M, 
+				 void *user_data, N_Vector tmp1, 
+				 N_Vector tmp2, N_Vector tmp3);
+  
+
+/*---------------------------------------------------------------
+ Type: ARKDlsBandJacFn
+
+ A band Jacobian approximation function Jac must have the
+ prototype given below. Its parameters are:
+
+ N is the length of all vector arguments.
+
+ mupper is the upper half-bandwidth of the approximate banded
+ Jacobian. This parameter is the same as the mupper parameter
+ passed by the user to the linear solver initialization function.
+
+ mlower is the lower half-bandwidth of the approximate banded
+ Jacobian. This parameter is the same as the mlower parameter
+ passed by the user to the linear solver initialization function.
+
+ t is the current value of the independent variable.
+
+ y is the current value of the dependent variable vector,
+      namely the predicted value of y(t).
+
+ fy is the vector f(t,y).
+
+ Jac is the band matrix (of type DlsMat) that will be loaded
+ by a ARKDlsBandJacFn with an approximation to the Jacobian matrix
+ Jac = (df_i/dy_j) at the point (t,y).
+ Three efficient ways to load J are:
+
+ (1) (with macros - no explicit data structure references)
+    for (j=0; j < n; j++) {
+       col_j = BAND_COL(Jac,j);
+       for (i=j-mupper; i <= j+mlower; i++) {
+         generate J_ij = the (i,j)th Jacobian element
+         BAND_COL_ELEM(col_j,i,j) = J_ij;
+       }
+     }
+
+ (2) (with BAND_COL macro, but without BAND_COL_ELEM macro)
+    for (j=0; j < n; j++) {
+       col_j = BAND_COL(Jac,j);
+       for (k=-mupper; k <= mlower; k++) {
+         generate J_ij = the (i,j)th Jacobian element, i=j+k
+         col_j[k] = J_ij;
+       }
+     }
+
+ (3) (without macros - explicit data structure references)
+     offset = Jac->smu;
+     for (j=0; j < n; j++) {
+       col_j = ((Jac->data)[j])+offset;
+       for (k=-mupper; k <= mlower; k++) {
+         generate J_ij = the (i,j)th Jacobian element, i=j+k
+         col_j[k] = J_ij;
+       }
+     }
+ Caution: Jac->smu is generally NOT the same as mupper.
+
+ The BAND_ELEM(A,i,j) macro is appropriate for use in small
+ problems in which efficiency of access is NOT a major concern.
+
+ user_data is a pointer to user data - the same as the user_data
+          parameter passed to ARKodeSetFdata.
+
+ NOTE: If the user's Jacobian routine needs other quantities,
+     they are accessible as follows: hcur (the current stepsize)
+     and ewt (the error weight vector) are accessible through
+     ARKodeGetCurrentStep and ARKodeGetErrWeights, respectively
+     (see arkode.h). The unit roundoff is available as
+     UNIT_ROUNDOFF defined in sundials_types.h
+
+ tmp1, tmp2, and tmp3 are pointers to memory allocated for
+ vectors of length N which can be used by a ARKDlsBandJacFn
+ as temporary storage or work space.
+
+ A ARKDlsBandJacFn should return 0 if successful, a positive value
+ if a recoverable error occurred, and a negative value if an 
+ unrecoverable error occurred.
+---------------------------------------------------------------*/
+typedef int (*ARKDlsBandJacFn)(long int N, long int mupper, 
+			       long int mlower, realtype t, 
+			       N_Vector y, N_Vector fy, 
+			       DlsMat Jac, void *user_data,
+			       N_Vector tmp1, N_Vector tmp2, 
+			       N_Vector tmp3);
+
+/*---------------------------------------------------------------
+ Type: ARKDlsBandMassFn
+
+ A band mass matrix approximation function Mass must have the
+ prototype given below. Its parameters are:
+
+ N is the length of all vector arguments.
+
+ mupper is the upper half-bandwidth of the approximate banded
+ Jacobian. This parameter is the same as the mupper parameter
+ passed by the user to the linear solver initialization function.
+
+ mlower is the lower half-bandwidth of the approximate banded
+ Jacobian. This parameter is the same as the mlower parameter
+ passed by the user to the linear solver initialization function.
+
+ t is the current value of the independent variable.
+
+ M is the band matrix (of type DlsMat) that will be loaded
+ by a ARKDlsBandMassFn with an approximation to the mass matrix
+
+ user_data is a pointer to user data - the same as the user_data
+     parameter passed to ARKodeSetFdata.
+
+ tmp1, tmp2, and tmp3 are pointers to memory allocated for
+ vectors of length N which can be used by a ARKDlsBandMassFn
+ as temporary storage or work space.
+
+ A ARKDlsBandMassFn should return 0 if successful, and a negative 
+ value if an unrecoverable error occurred.
+---------------------------------------------------------------*/
+typedef int (*ARKDlsBandMassFn)(long int N, long int mupper, 
+				long int mlower, realtype t, 
+				DlsMat M, void *user_data, 
+				N_Vector tmp1, N_Vector tmp2, 
+				N_Vector tmp3);
+
+
+/*===============================================================
+  EXPORTED FUNCTIONS
+===============================================================*/
+
+/*---------------------------------------------------------------
+ Optional inputs to the ARKDLS linear solver:
+
+ ARKDlsSetDenseJacFn specifies the dense Jacobian approximation
+ routine to be used for a direct dense linear solver.
+
+ ARKDlsSetBandJacFn specifies the band Jacobian approximation
+ routine to be used for a direct band linear solver.
+
+ By default, a difference quotient approximation, supplied with
+ the solver is used.
+
+ The return value is one of:
+    ARKDLS_SUCCESS   if successful
+    ARKDLS_MEM_NULL  if the ARKODE memory was NULL
+    ARKDLS_LMEM_NULL if the linear solver memory was NULL
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKDlsSetDenseJacFn(void *arkode_mem, 
+					ARKDlsDenseJacFn jac);
+SUNDIALS_EXPORT int ARKDlsSetBandJacFn(void *arkode_mem, 
+				       ARKDlsBandJacFn jac);
+
+
+/*---------------------------------------------------------------
+ Optional inputs to the ARKDLS linear solver:
+
+ ARKDlsSetDenseMassFn specifies the dense mass matrix 
+ approximation routine to be used for a direct dense solver.
+
+ ARKDlsSetBandMassFn specifies the band mass matrix approximation
+ routine to be used for a direct band solver.
+
+ The return value is one of:
+    ARKDLS_SUCCESS      if successful
+    ARKDLS_MEM_NULL     if the ARKODE memory was NULL
+    ARKDLS_MASSMEM_NULL if the mass matrix solver memory was NULL
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKDlsSetDenseMassFn(void *arkode_mem, 
+					 ARKDlsDenseMassFn mass);
+SUNDIALS_EXPORT int ARKDlsSetBandMassFn(void *arkode_mem, 
+					ARKDlsBandMassFn mass);
+
+
+/*---------------------------------------------------------------
+ Optional outputs from the ARKDLS linear solver:
+
+ ARKDlsGetWorkSpace   returns the real and integer workspace used
+                     by the direct linear solver.
+ ARKDlsGetMassWorkSpace   returns the real and integer workspace used
+                     by the mass matrix direct linear solver.
+ ARKDlsGetNumJacEvals returns the number of calls made to the
+                     Jacobian evaluation routine jac.
+ ARKDlsGetNumMassEvals returns the number of calls made to the
+                     mass matrix evaluation routine Mass.
+ ARKDlsGetNumRhsEvals returns the number of calls to the user
+                     f routine due to finite difference Jacobian
+                     evaluation.
+ ARKDlsGetLastFlag    returns the last error flag set by any of
+                     the ARKDLS interface functions.
+ ARKDlsGetLastMassFlag  returns the last error flag set by any of
+                     the ARKDLS interface mass matrix functions.
+
+ The return value of ARKDlsGet* is one of:
+    ARKDLS_SUCCESS   if successful
+    ARKDLS_MEM_NULL  if the ARKODE memory was NULL
+    ARKDLS_LMEM_NULL if the linear solver memory was NULL
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKDlsGetWorkSpace(void *arkode_mem, 
+				       long int *lenrwLS, 
+				       long int *leniwLS);
+SUNDIALS_EXPORT int ARKDlsGetMassWorkSpace(void *arkode_mem, 
+					   long int *lenrwMLS, 
+					   long int *leniwMLS);
+SUNDIALS_EXPORT int ARKDlsGetNumJacEvals(void *arkode_mem, 
+					 long int *njevals);
+SUNDIALS_EXPORT int ARKDlsGetNumMassEvals(void *arkode_mem, 
+					  long int *nmevals);
+SUNDIALS_EXPORT int ARKDlsGetNumRhsEvals(void *arkode_mem, 
+					 long int *nfevalsLS);
+SUNDIALS_EXPORT int ARKDlsGetLastFlag(void *arkode_mem, 
+				      long int *flag);
+SUNDIALS_EXPORT int ARKDlsGetLastMassFlag(void *arkode_mem, 
+					  long int *flag);
+
+
+/*---------------------------------------------------------------
+ The following function returns the name of the constant 
+ associated with a ARKDLS return flag
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT char *ARKDlsGetReturnFlagName(long int flag);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_klu.h b/include/arkode/arkode_klu.h
new file mode 100644
index 0000000..54269ac
--- /dev/null
+++ b/include/arkode/arkode_klu.h
@@ -0,0 +1,195 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Header file for the ARKKLU linear solver module.
+ *---------------------------------------------------------------*/
+
+#ifndef _ARKKLU_H
+#define _ARKKLU_H
+
+#include "arkode/arkode_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*---------------------------------------------------------------
+ Function: ARKKLU
+-----------------------------------------------------------------
+ A call to the ARKKLU function links the main integrator with 
+ the ARKKLU linear solver module.
+                                                                
+ arkode_mem is the pointer to integrator memory returned by        
+            ARKodeCreate.             
+
+ n is the size of the linear system (nrows = ncols = n)
+
+ nnz is the maximum number of nonzeros in the sparse matrix
+     A = M + gamma*J
+                                                                
+ The return value of ARKKLU is one of:
+     ARKSLS_SUCCESS   if successful
+     ARKSLS_MEM_NULL  if the ARKode memory was NULL
+     ARKSLS_MEM_FAIL  if there was a memory allocation failure   
+     ARKSLS_ILL_INPUT if a required vector operation is missing
+                                                                
+ NOTE: The KLU linear solver assumes a serial implementation  
+       of the NVECTOR package. Therefore, ARKKLU will first
+       test for a compatible N_Vector internal representation
+       by checking that the function N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKKLU(void *arkode_mem, int n, int nnz, int sparsetype); 
+
+
+/*---------------------------------------------------------------
+ Function: ARKMassKLU
+-----------------------------------------------------------------
+ A call to the ARKMassKLU function links the mass matrix solve
+ with the ARKKLU linear solver module.
+                                                                
+ arkode_mem is the pointer to integrator memory returned by        
+            ARKodeCreate.             
+
+ n is the size of the linear system (nrows = ncols = n)
+
+ nnz is the maximum number of nonzeros in the sparse mass matrix
+                                                                
+ smass is the user-supplied sparse mass matrix setup function.
+
+ The return value of ARKMassKLU is one of:
+     ARKSLS_SUCCESS   if successful
+     ARKSLS_MEM_NULL  if the ARKode memory was NULL
+     ARKSLS_MEM_FAIL  if there was a memory allocation failure   
+     ARKSLS_ILL_INPUT if a required vector operation is missing
+                                                                
+ NOTE: The KLU linear solver assumes a serial implementation  
+       of the NVECTOR package. Therefore, ARKKLU will first
+       test for a compatible N_Vector internal representation
+       by checking that the function N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassKLU(void *arkode_mem, int n, int nnz, int sparsetype,
+			       ARKSlsSparseMassFn smass); 
+
+
+/*
+ * -----------------------------------------------------------------
+ * ARKKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to CVKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is ARKSLS_SUCCESS = 0, ARKSLS_MEM_NULL = -1, 
+ * ARKSLS_LMEM_NULL = -2, ARKSLS_ILL_INPUT = -3, or ARKSLS_MEM_FAIL = -4.
+ *
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int ARKKLUReInit(void *arkode_mem, int n, int nnz, 
+				   int reinit_type);
+
+
+/*
+ * -----------------------------------------------------------------
+ * ARKMassKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to CVKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is ARKSLS_SUCCESS = 0, ARKSLS_MEM_NULL = -1, 
+ * ARKSLS_MASSMEM_NULL = -8, ARKSLS_ILL_INPUT = -3, or ARKSLS_MEM_FAIL = -4.
+ *
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int ARKMassKLUReInit(void *arkode_mem, int n, 
+				       int nnz, int reinit_type);
+
+/*================================================================
+ Optional Input Specification Functions
+=================================================================*/
+
+/*---------------------------------------------------------------
+ Function: ARKKLUSetOrdering 
+-----------------------------------------------------------------
+ This routine sets the ordering used by KLU for reducing fill in 
+ the system matrix solve.  Options for ordering_choice are: 
+        0 for AMD, 
+	1 for COLAMD, and 
+	2 for the natural ordering.
+ The default used in ARKODE is 1 for COLAMD.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKKLUSetOrdering(void *arkode_mem, 
+				      int ordering_choice); 
+
+
+/*---------------------------------------------------------------
+ Function: ARKMassKLUSetOrdering 
+-----------------------------------------------------------------
+ This routine sets the ordering used by KLU for reducing fill in 
+ the mass matrix solve.  Options for ordering_choice are: 
+        0 for AMD, 
+	1 for COLAMD, and 
+	2 for the natural ordering.
+ The default used in ARKODE is 1 for COLAMD.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassKLUSetOrdering(void *arkode_mem, 
+					  int ordering_choice); 
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_lapack.h b/include/arkode/arkode_lapack.h
new file mode 100644
index 0000000..6f18050
--- /dev/null
+++ b/include/arkode/arkode_lapack.h
@@ -0,0 +1,134 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Header file for the ARKODE dense linear solver ARKLAPACK.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKLAPACK_H
+#define _ARKLAPACK_H
+
+#include <arkode/arkode_direct.h>
+#include <sundials/sundials_lapack.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*===============================================================
+  EXPORTED FUNCTIONS
+===============================================================*/
+
+/*---------------------------------------------------------------
+ ARKLapackDense:
+
+ A call to the ARKLapackDense function links the main integrator
+ with the ARKLAPACK linear solver using dense Jacobians.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ N is the size of the ODE system.
+
+ The return value of ARKLapackDense is one of:
+    ARKLAPACK_SUCCESS   if successful
+    ARKLAPACK_MEM_NULL  if the ARKODE memory was NULL
+    ARKLAPACK_MEM_FAIL  if there was a memory allocation failure
+    ARKLAPACK_ILL_INPUT if a required vector operation is missing
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKLapackDense(void *arkode_mem, int N);
+
+
+/*---------------------------------------------------------------
+ ARKMassLapackDense:
+
+ A call to the ARKMassLapackDense function links the mass matrix 
+ solve with the ARKLAPACK linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ N is the size of the ODE system.
+
+ dmass is the user-supplied dense mass matrix setup routine.
+
+ The return value of ARKMassLapackDense is one of:
+    ARKLAPACK_SUCCESS   if successful
+    ARKLAPACK_MEM_NULL  if the ARKODE memory was NULL
+    ARKLAPACK_MEM_FAIL  if there was a memory allocation failure
+    ARKLAPACK_ILL_INPUT if a required vector operation is missing
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassLapackDense(void *arkode_mem, int N, 
+				       ARKDlsDenseMassFn dmass);
+
+
+/*---------------------------------------------------------------
+ ARKLapackBand:
+
+ A call to the ARKLapackBand function links the main integrator
+ with the ARKLAPACK linear solver using banded Jacobians. 
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ N is the size of the ODE system.
+
+ mupper is the upper bandwidth of the band Jacobian approximation.
+
+ mlower is the lower bandwidth of the band Jacobian approximation.
+
+ The return value of ARKLapackBand is one of:
+    ARKLAPACK_SUCCESS   if successful
+    ARKLAPACK_MEM_NULL  if the ARKODE memory was NULL
+    ARKLAPACK_MEM_FAIL  if there was a memory allocation failure
+    ARKLAPACK_ILL_INPUT if a required vector operation is missing 
+                        or if a bandwidth has an illegal value.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKLapackBand(void *arkode_mem, int N, int mupper, int mlower);
+
+/*---------------------------------------------------------------
+ ARKMassLapackBand:
+
+ A call to the ARKMassLapackBand function links the mass matrix 
+ solve with the ARKLAPACK linear solver. 
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ N is the size of the ODE system.
+
+ mupper is the upper bandwidth of the band Jacobian approximation.
+
+ mlower is the lower bandwidth of the band Jacobian approximation.
+
+ bmass is the user-supplied band mass matrix setup routine.
+
+ The return value of ARKLapackBand is one of:
+    ARKLAPACK_SUCCESS   if successful
+    ARKLAPACK_MEM_NULL  if the ARKODE memory was NULL
+    ARKLAPACK_MEM_FAIL  if there was a memory allocation failure
+    ARKLAPACK_ILL_INPUT if a required vector operation is missing 
+                        or if a bandwidth has an illegal value.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassLapackBand(void *arkode_mem, int N, int mupper, 
+				      int mlower, ARKDlsBandMassFn bmass);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_pcg.h b/include/arkode/arkode_pcg.h
new file mode 100644
index 0000000..545f4ca
--- /dev/null
+++ b/include/arkode/arkode_pcg.h
@@ -0,0 +1,116 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the header file for the ARKODE scaled preconditioned 
+ * CG linear solver, ARKPCG.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKPCG_H
+#define _ARKPCG_H
+
+#include <arkode/arkode.h>
+#include <arkode/arkode_spils.h>
+#include <sundials/sundials_pcg.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------
+ ARKPcg:
+
+ A call to the ARKPcg function links the main ARKODE integrator
+ with the ARKPCG linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ pretype   is the type of user preconditioning to be done.
+           This must be one of the four enumeration constants
+           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined
+           in iterative.h. These correspond to no preconditioning,
+           left preconditioning only, right preconditioning
+           only, and both left and right preconditioning,
+           respectively.  However, since PCG requires a symmetric 
+	   linear operator, this flag is checked for any one of 
+	   PREC_LEFT, PREC_RIGHT and PREC_BOTH -- if any are 
+	   found then preconditioning is used.  It is assumed 
+	   that the preconditioner implements a symmetric linear 
+	   operator.
+
+ maxl      is the maximum Krylov dimension. This is an
+           optional input to the ARKPCG solver. Pass 0 to
+           use the default value ARKPCG_MAXL=5.
+
+ The return value of ARKPcg is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_MEM_FAIL  if there was a memory allocation failure
+    ARKSPILS_ILL_INPUT if a required vector operation is missing
+ The above constants are defined in arkode_spils.h
+
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKPcg(void *arkode_mem, int pretype, int maxl);
+
+
+/*---------------------------------------------------------------
+ ARKMassPcg:
+
+ A call to the ARKMassPcg function links the mass matrix solve
+ with the ARKPCG linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ pretype   is the type of user preconditioning to be done.
+           This must be one of the four enumeration constants
+           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined
+           in iterative.h. These correspond to no preconditioning,
+           left preconditioning only, right preconditioning
+           only, and both left and right preconditioning,
+           respectively.  However, since PCG requires a symmetric 
+	   linear operator, this flag is checked for any one of 
+	   PREC_LEFT, PREC_RIGHT and PREC_BOTH -- if any are 
+	   found then preconditioning is used.  It is assumed 
+	   that the preconditioner implements a symmetric linear 
+	   operator.
+
+ maxl      is the maximum Krylov dimension. This is an
+           optional input to the ARKPCG solver. Pass 0 to
+           use the default value ARKPCG_MAXL=5.
+
+ mtimes    is the user-supplied mass-matrix-vector product 
+           routine.
+
+ The return value of ARKMassPcg is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_MEM_FAIL  if there was a memory allocation failure
+    ARKSPILS_ILL_INPUT if a required vector operation is missing
+ The above constants are defined in arkode_spils.h
+
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassPcg(void *arkode_mem, int pretype, int maxl, 
+			       ARKSpilsMassTimesVecFn mtimes,
+			       void *mtimes_data);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_sparse.h b/include/arkode/arkode_sparse.h
new file mode 100644
index 0000000..f0b279e
--- /dev/null
+++ b/include/arkode/arkode_sparse.h
@@ -0,0 +1,216 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Header file for the generic ARKSLS linear solver module.
+ *---------------------------------------------------------------*/
+
+#ifndef _ARKSPARSE_H
+#define _ARKSPARSE_H
+
+#include <sundials/sundials_sparse.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*===============================================================
+  ARKSPARSE CONSTANTS
+===============================================================*/
+
+/* ARKSLS return values */
+#define ARKSLS_SUCCESS           0
+#define ARKSLS_MEM_NULL         -1
+#define ARKSLS_LMEM_NULL        -2
+#define ARKSLS_ILL_INPUT        -3
+#define ARKSLS_MEM_FAIL         -4
+#define ARKSLS_JAC_NOSET        -5
+#define ARKSLS_MASS_NOSET       -6
+#define ARKSLS_PACKAGE_FAIL     -7
+#define ARKSLS_MASSMEM_NULL     -8
+
+/* Additional last_flag values */
+#define ARKSLS_JACFUNC_UNRECVR  -9
+#define ARKSLS_JACFUNC_RECVR    -10
+#define ARKSLS_MASSFUNC_UNRECVR -11
+#define ARKSLS_MASSFUNC_RECVR   -12
+
+
+/*===============================================================
+  FUNCTION TYPES
+===============================================================*/
+
+/*-----------------------------------------------------------------
+ Types : ARKSlsSparseJacFn
+
+ A sparse Jacobian approximation function Jac must be of type
+ ARKSlsSparseJacFn.  Its parameters are:
+
+ t   is the current value of the independent variable t.
+                                                                
+ y   is the current value of the dependent variable vector,
+     namely the predicted value of y(t)
+                                                                
+ fy  is the vector f(t,y).
+     namely the predicted value of y'(t)
+                                                                
+ JacMat is the compressed sparse column matrix (of type SlsMat)
+     to be loaded by an ARKSlsSparseJacFn routine with an 
+     approximation to the system Jacobian matrix
+            J = (df_i/dy_j) at the point (t,y). 
+     Note that JacMat is NOT preset to zero!
+     Matrix data is for the nonzero entries of the Jacobian stored 
+     in compressed column format.  Row indices of entries in 
+     column j are stored in JacMat->rowvals[colptrs[j]] 
+     through JacMat->rowvals[colptrs[j+i]-1]
+     and corresponding numerical values of the Jacobian are stored 
+     in the same entries of JacMat->data.
+
+ J_data is a pointer to user Jacobian data - the same as the
+     user_data parameter passed to ARKodeSetFdata.
+                                                                
+ tmp1, tmp2, tmp3 are pointers to memory allocated for
+     N_Vectors which can be used by an ARKSparseJacFn routine
+     as temporary storage or work space.
+                                                                
+ A ARKSlsSparseJacFn should return 0 if successful, a positive 
+ value if a recoverable error occurred, and a negative value if 
+ a nonrecoverable error occurred. 
+
+ NOTE: If the user's Jacobian routine needs other quantities,
+     they are accessible as follows: hcur (the current stepsize)
+     and ewt (the error weight vector) are accessible through
+     ARKodeGetCurrentStep and ARKodeGetErrWeights, respectively
+     (see arkode.h). The unit roundoff is available as
+     UNIT_ROUNDOFF defined in sundials_types.h.
+
+---------------------------------------------------------------*/
+typedef int (*ARKSlsSparseJacFn)(realtype t,
+				 N_Vector y, N_Vector fy, 
+				 SlsMat JacMat, void *user_data,
+				 N_Vector tmp1, N_Vector tmp2, 
+				 N_Vector tmp3);
+
+/*-----------------------------------------------------------------
+ Types : ARKSlsSparseMassFn
+
+ A sparse mass matrix approximation function Mass must be of type
+ ARKSlsSparseMassFn.  Its parameters are:
+
+ t   is the current value of the independent variable t.
+                                                                
+ MassMat is the compressed sparse column matrix (of type SlsMat)
+     to be loaded by an ARKSlsSparseJacFn routine with an 
+     approximation to the system mass matrix.  Note that MassMat 
+     is NOT preset to zero! Matrix data is for the nonzero entries 
+     of the mass matrix stored in compressed column format.  Row 
+     indices of entries in column j are stored in 
+     MassMat->rowvals[colptrs[j]] through 
+     MassMat->rowvals[colptrs[j+i]-1]
+     and corresponding numerical values of the mass matrix are 
+     stored in the same entries of MassMat->data.
+
+ M_data is a pointer to user mass matrix data - the same as the
+     user_data parameter passed to ARKodeSetFdata.
+                                                                
+ tmp1, tmp2, tmp3 are pointers to memory allocated for
+     N_Vectors which can be used by an ARKSparseJacFn routine
+     as temporary storage or work space.
+                                                                
+ A ARKSlsSparseMassFn should return 0 if successful, a positive 
+ value if a recoverable error occurred, and a negative int if a
+ nonrecoverable error occurred. 
+
+---------------------------------------------------------------*/
+typedef int (*ARKSlsSparseMassFn)(realtype t, SlsMat MassMat, 
+				  void *user_data, N_Vector tmp1, 
+				  N_Vector tmp2, N_Vector tmp3);
+
+
+/*===============================================================
+  EXPORTED FUNCTIONS
+===============================================================*/
+
+/*---------------------------------------------------------------
+ Optional inputs to the ARKSLS linear solver:
+
+ ARKSlsSetSparseJacFn specifies the Jacobian approximation
+ routine to be used for a sparse direct linear solver.
+
+ The return value is one of:
+    ARKSLS_SUCCESS   if successful
+    ARKSLS_MEM_NULL  if the ARKODE memory was NULL
+    ARKSLS_LMEM_NULL if the linear solver memory was NULL
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSlsSetSparseJacFn(void *arkode_mem, 
+					 ARKSlsSparseJacFn jac);
+
+/*---------------------------------------------------------------
+ Optional inputs to the ARKSLS linear solver:
+
+ ARKSlsSetSparseMassFn specifies the sparse mass matrix 
+ approximation routine to be used for a sparse direct linear 
+ solver.
+
+ The return value is one of:
+    ARKSLS_SUCCESS   if successful
+    ARKSLS_MEM_NULL  if the ARKODE memory was NULL
+    ARKSLS_MASSMEM_NULL if the mass matrix solver memory was NULL
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSlsSetSparseMassFn(void *arkode_mem, 
+					  ARKSlsSparseMassFn mass);
+
+/*---------------------------------------------------------------
+ Optional outputs from the ARKSLS linear solver:
+
+ ARKSlsGetNumJacEvals returns the number of calls made to the
+                      Jacobian evaluation routine jac.
+ ARKSlsGetNumMassEvals returns the number of calls made to the
+                      mass matrix evaluation routine Mass.
+ ARKSlsGetLastFlag    returns the last error flag set by any of
+                      the ARKSLS interface functions.
+ ARKSlsGetLastMassFlag returns the last error flag set by any of 
+                      the ARKSLS interface mass matrix functions.
+
+ The return value of ARKSlsGet* is one of:
+    ARKSLS_SUCCESS   if successful
+    ARKSLS_MEM_NULL  if the IDA memory was NULL
+    ARKSLS_LMEM_NULL if the linear solver memory was NULL
+    ARKSLS_MASSMEM_NULL if the linear solver memory was NULL
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSlsGetNumJacEvals(void *arkode_mem, 
+					 long int *njevals);
+SUNDIALS_EXPORT int ARKSlsGetNumMassEvals(void *arkode_mem, 
+					  long int *nmevals);
+SUNDIALS_EXPORT int ARKSlsGetLastFlag(void *arkode_mem, 
+				      long int *flag);
+SUNDIALS_EXPORT int ARKSlsGetLastMassFlag(void *arkode_mem, 
+					  long int *flag);
+
+/*---------------------------------------------------------------
+ The following function returns the name of the constant 
+ associated with a ARKSLS return flag
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT char *ARKSlsGetReturnFlagName(long int flag);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_spbcgs.h b/include/arkode/arkode_spbcgs.h
new file mode 100644
index 0000000..2151d7b
--- /dev/null
+++ b/include/arkode/arkode_spbcgs.h
@@ -0,0 +1,106 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the header file for the ARKODE scaled preconditioned 
+ * Bi-CGSTAB linear solver, ARKSPBCG.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKSPBCG_H
+#define _ARKSPBCG_H
+
+#include <arkode/arkode.h>
+#include <arkode/arkode_spils.h>
+#include <sundials/sundials_spbcgs.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------
+ ARKSpbcg:
+
+ A call to the ARKSpbcg function links the main ARKODE integrator
+ with the ARKSPBCG linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ pretype   is the type of user preconditioning to be done.
+           This must be one of the four enumeration constants
+           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined
+           in iterative.h. These correspond to no preconditioning,
+           left preconditioning only, right preconditioning
+           only, and both left and right preconditioning,
+           respectively.
+
+ maxl      is the maximum Krylov dimension. This is an
+           optional input to the ARKSPBCG solver. Pass 0 to
+           use the default value ARKSPBCG_MAXL=5.
+
+ The return value of ARKSpbcg is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_MEM_FAIL  if there was a memory allocation failure
+    ARKSPILS_ILL_INPUT if a required vector operation is missing
+ The above constants are defined in arkode_spils.h
+
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSpbcg(void *arkode_mem, int pretype, int maxl);
+
+
+/*---------------------------------------------------------------
+ ARKMassSpbcg:
+
+ A call to the ARKMassSpbcg function links the mass matrix solve
+ with the ARKSPBCG linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ pretype   is the type of user preconditioning to be done.
+           This must be one of the four enumeration constants
+           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined
+           in iterative.h. These correspond to no preconditioning,
+           left preconditioning only, right preconditioning
+           only, and both left and right preconditioning,
+           respectively.
+
+ maxl      is the maximum Krylov dimension. This is an
+           optional input to the ARKSPBCG solver. Pass 0 to
+           use the default value ARKSPBCG_MAXL=5.
+
+ mtimes    is the user-supplied mass-matrix-vector product 
+           routine.
+
+ The return value of ARKMassSpbcg is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_MEM_FAIL  if there was a memory allocation failure
+    ARKSPILS_ILL_INPUT if a required vector operation is missing
+ The above constants are defined in arkode_spils.h
+
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassSpbcg(void *arkode_mem, int pretype, int maxl, 
+				 ARKSpilsMassTimesVecFn mtimes,
+				 void *mtimes_data);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_spfgmr.h b/include/arkode/arkode_spfgmr.h
new file mode 100644
index 0000000..cd8f36d
--- /dev/null
+++ b/include/arkode/arkode_spfgmr.h
@@ -0,0 +1,115 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the header file for the ARKODE scaled preconditioned 
+ * FGMRES linear solver, ARKSPFGMR.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKSPFGMR_H
+#define _ARKSPFGMR_H
+
+#include <arkode/arkode.h>
+#include <arkode/arkode_spils.h>
+#include <sundials/sundials_spfgmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*---------------------------------------------------------------
+ ARKSpfgmr:
+
+ A call to ARKSpfgmr links the main ARKODE integrator with the 
+ ARKSPFGMR linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ pretype   is the type of user preconditioning to be done.
+           This must be one of the four enumeration constants
+           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined 
+           in sundials_iterative.h.
+           These correspond to no preconditioning,
+           left preconditioning only, right preconditioning
+           only, and both left and right preconditioning,
+           respectively. ARKSPFGMR only implements right 
+	   preconditioning, so if any one of PREC_LEFT, 
+	   PREC_RIGHT or PREC_BOTH are defined, it will default 
+	   to using the right preconditioner only.
+
+ maxl      is the maximum Krylov dimension. This is an
+           optional input to the ARKSPFGMR solver. Pass 0 to
+           use the default value ARKSPFGMR_MAXL=5.
+
+ The return value of ARKSpfgmr is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_MEM_FAIL  if there was a memory allocation failure
+    ARKSPILS_ILL_INPUT if a required vector operation is missing
+ The above constants are defined in arkode_spils.h
+
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSpfgmr(void *arkode_mem, int pretype, int maxl);
+
+
+/*---------------------------------------------------------------
+ ARKMassSpfgmr:
+
+ A call to ARKMassSpfgmr links the mass matrix solve
+ with the ARKSPFGMR linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ pretype   is the type of user preconditioning to be done.
+           This must be one of the four enumeration constants
+           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined 
+           in sundials_iterative.h.
+           These correspond to no preconditioning,
+           left preconditioning only, right preconditioning
+           only, and both left and right preconditioning,
+           respectively. ARKSPFGMR only implements right 
+	   preconditioning, so if any one of PREC_LEFT, 
+	   PREC_RIGHT or PREC_BOTH are defined, it will default 
+	   to using the right preconditioner only.
+
+ maxl      is the maximum Krylov dimension. This is an
+           optional input to the ARKSPFGMR solver. Pass 0 to
+           use the default value ARKSPFGMR_MAXL=5.
+
+ mtimes    is the user-supplied mass-matrix-vector product 
+           routine.
+
+ The return value of ARKMassSpfgmr is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_MEM_FAIL  if there was a memory allocation failure
+    ARKSPILS_ILL_INPUT if a required vector operation is missing
+ The above constants are defined in arkode_spils.h
+
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassSpfgmr(void *arkode_mem, int pretype, int maxl, 
+				  ARKSpilsMassTimesVecFn mtimes,
+				  void *mtimes_data);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_spgmr.h b/include/arkode/arkode_spgmr.h
new file mode 100644
index 0000000..336e74a
--- /dev/null
+++ b/include/arkode/arkode_spgmr.h
@@ -0,0 +1,109 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the header file for the ARKODE scaled preconditioned 
+ * GMRES linear solver, ARKSPGMR.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKSPGMR_H
+#define _ARKSPGMR_H
+
+#include <arkode/arkode.h>
+#include <arkode/arkode_spils.h>
+#include <sundials/sundials_spgmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*---------------------------------------------------------------
+ ARKSpgmr:
+
+ A call to the ARKSpgmr function links the main ARKODE integrator
+ with the ARKSPGMR linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ pretype   is the type of user preconditioning to be done.
+           This must be one of the four enumeration constants
+           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined 
+           in sundials_iterative.h.
+           These correspond to no preconditioning,
+           left preconditioning only, right preconditioning
+           only, and both left and right preconditioning,
+           respectively.
+
+ maxl      is the maximum Krylov dimension. This is an
+           optional input to the ARKSPGMR solver. Pass 0 to
+           use the default value ARKSPGMR_MAXL=5.
+
+ The return value of ARKSpgmr is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_MEM_FAIL  if there was a memory allocation failure
+    ARKSPILS_ILL_INPUT if a required vector operation is missing
+ The above constants are defined in arkode_spils.h
+
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSpgmr(void *arkode_mem, int pretype, int maxl);
+
+
+/*---------------------------------------------------------------
+ ARKMassSpgmr:
+
+ A call to the ARKMassSpgmr function links the mass matrix solve
+ with the ARKSPGMR linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ pretype   is the type of user preconditioning to be done.
+           This must be one of the four enumeration constants
+           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined 
+           in sundials_iterative.h.
+           These correspond to no preconditioning,
+           left preconditioning only, right preconditioning
+           only, and both left and right preconditioning,
+           respectively.
+
+ maxl      is the maximum Krylov dimension. This is an
+           optional input to the ARKSPGMR solver. Pass 0 to
+           use the default value ARKSPGMR_MAXL=5.
+
+ mtimes    is the user-supplied mass-matrix-vector product 
+           routine.
+
+ The return value of ARKMassSpgmr is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_MEM_FAIL  if there was a memory allocation failure
+    ARKSPILS_ILL_INPUT if a required vector operation is missing
+ The above constants are defined in arkode_spils.h
+
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassSpgmr(void *arkode_mem, int pretype, int maxl, 
+				 ARKSpilsMassTimesVecFn mtimes,
+				 void *mtimes_data);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_spils.h b/include/arkode/arkode_spils.h
new file mode 100644
index 0000000..54040f0
--- /dev/null
+++ b/include/arkode/arkode_spils.h
@@ -0,0 +1,529 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the common header file for the Scaled, Preconditioned
+ * Iterative Linear Solvers in ARKODE.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKSPILS_H
+#define _ARKSPILS_H
+
+#include <sundials/sundials_iterative.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*---------------------------------------------------------------
+ ARKSPILS return values 
+---------------------------------------------------------------*/
+#define ARKSPILS_SUCCESS       0
+#define ARKSPILS_MEM_NULL     -1
+#define ARKSPILS_LMEM_NULL    -2
+#define ARKSPILS_ILL_INPUT    -3
+#define ARKSPILS_MEM_FAIL     -4
+#define ARKSPILS_PMEM_NULL    -5
+#define ARKSPILS_MASSMEM_NULL -6
+
+
+/*---------------------------------------------------------------
+ ARKSPILS solver constants:
+
+ ARKSPILS_MAXL   : default value for the maximum Krylov
+                   dimension
+
+ ARKSPILS_MSBPRE : maximum number of steps between
+                   preconditioner evaluations
+
+ ARKSPILS_DGMAX  : maximum change in gamma between
+                   preconditioner evaluations
+
+ ARKSPILS_EPLIN  : default value for factor by which the
+                   tolerance on the nonlinear iteration is
+                   multiplied to get a tolerance on the linear
+                   iteration
+---------------------------------------------------------------*/
+#define ARKSPILS_MAXL   5
+#define ARKSPILS_MSBPRE 50
+#define ARKSPILS_DGMAX  RCONST(0.2)
+#define ARKSPILS_EPLIN  RCONST(0.05)
+
+
+/*---------------------------------------------------------------
+ Type: ARKSpilsPrecSetupFn
+
+ The user-supplied preconditioner setup function PrecSetup and
+ the user-supplied preconditioner solve function PrecSolve
+ together must define left and right preconditoner matrices
+ P1 and P2 (either of which may be trivial), such that the
+ product P1*P2 is an approximation to the Newton matrix
+ M = I - gamma*J.  Here J is the system Jacobian J = df/dy,
+ and gamma is a scalar proportional to the integration step
+ size h.  The solution of systems P z = r, with P = P1 or P2,
+ is to be carried out by the PrecSolve function, and PrecSetup
+ is to do any necessary setup operations.
+
+ The user-supplied preconditioner setup function PrecSetup
+ is to evaluate and preprocess any Jacobian-related data
+ needed by the preconditioner solve function PrecSolve.
+ This might include forming a crude approximate Jacobian,
+ and performing an LU factorization on the resulting
+ approximation to M.  This function will not be called in
+ advance of every call to PrecSolve, but instead will be called
+ only as often as necessary to achieve convergence within the
+ Newton iteration.  If the PrecSolve function needs no
+ preparation, the PrecSetup function can be NULL.
+
+ For greater efficiency, the PrecSetup function may save
+ Jacobian-related data and reuse it, rather than generating it
+ from scratch.  In this case, it should use the input flag jok
+ to decide whether to recompute the data, and set the output
+ flag *jcurPtr accordingly.
+
+ Each call to the PrecSetup function is preceded by a call to
+ the RhsFn f with the same (t,y) arguments.  Thus the PrecSetup
+ function can use any auxiliary data that is computed and
+ saved by the f function and made accessible to PrecSetup.
+
+ A function PrecSetup must have the prototype given below.
+ Its parameters are as follows:
+
+ t       is the current value of the independent variable.
+
+ y       is the current value of the dependent variable vector,
+          namely the predicted value of y(t).
+
+ fy      is the vector f(t,y).
+
+ jok     is an input flag indicating whether Jacobian-related
+         data needs to be recomputed, as follows:
+           jok == FALSE means recompute Jacobian-related data
+                  from scratch.
+           jok == TRUE  means that Jacobian data, if saved from
+                  the previous PrecSetup call, can be reused
+                  (with the current value of gamma).
+         A Precset call with jok == TRUE can only occur after
+         a call with jok == FALSE.
+
+ jcurPtr is a pointer to an output integer flag which is
+         to be set by PrecSetup as follows:
+         Set *jcurPtr = TRUE if Jacobian data was recomputed.
+         Set *jcurPtr = FALSE if Jacobian data was not recomputed,
+                        but saved data was reused.
+
+ gamma   is the scalar appearing in the Newton matrix.
+
+ user_data  is a pointer to user data - the same as the user_data
+         parameter passed to the ARKodeSetUserData function.
+
+ tmp1, tmp2, and tmp3 are pointers to memory allocated
+                      for N_Vectors which can be used by
+                      ARKSpilsPrecSetupFn as temporary storage or
+                      work space.
+
+ NOTE: If the user's preconditioner needs other quantities,
+       they are accessible as follows: hcur (the current stepsize)
+       and ewt (the error weight vector) are accessible through
+       ARKodeGetCurrentStep and ARKodeGetErrWeights, respectively).
+       The unit roundoff is available as UNIT_ROUNDOFF defined in
+       sundials_types.h.
+
+ Returned value:
+ The value to be returned by the PrecSetup function is a flag
+ indicating whether it was successful.  This value should be
+   0   if successful,
+   > 0 for a recoverable error (step will be retried),
+   < 0 for an unrecoverable error (integration is halted).
+---------------------------------------------------------------*/
+typedef int (*ARKSpilsPrecSetupFn)(realtype t, N_Vector y, 
+				   N_Vector fy, booleantype jok, 
+				   booleantype *jcurPtr,
+				   realtype gamma, void *user_data,
+				   N_Vector tmp1, N_Vector tmp2,
+				   N_Vector tmp3);
+
+
+/*---------------------------------------------------------------
+ Type: ARKSpilsPrecSolveFn
+
+ The user-supplied preconditioner solve function PrecSolve
+ is to solve a linear system P z = r in which the matrix P is
+ one of the preconditioner matrices P1 or P2, depending on the
+ type of preconditioning chosen.
+
+ A function PrecSolve must have the prototype given below.
+ Its parameters are as follows:
+
+ t      is the current value of the independent variable.
+
+ y      is the current value of the dependent variable vector.
+
+ fy     is the vector f(t,y).
+
+ r      is the right-hand side vector of the linear system.
+
+ z      is the output vector computed by PrecSolve.
+
+ gamma  is the scalar appearing in the Newton matrix.
+
+ delta  is an input tolerance for use by PSolve if it uses
+        an iterative method in its solution.  In that case,
+        the residual vector Res = r - P z of the system
+        should be made less than delta in weighted L2 norm,
+        i.e., sqrt [ Sum (Res[i]*ewt[i])^2 ] < delta.
+        Note: the error weight vector ewt can be obtained
+        through a call to the routine ARKodeGetErrWeights.
+
+ lr     is an input flag indicating whether PrecSolve is to use
+        the left preconditioner P1 or right preconditioner
+        P2: lr = 1 means use P1, and lr = 2 means use P2.
+
+ user_data  is a pointer to user data - the same as the user_data
+         parameter passed to the ARKodeSetUserData function.
+
+ tmp    is a pointer to memory allocated for an N_Vector
+        which can be used by PSolve for work space.
+
+ Returned value:
+ The value to be returned by the PrecSolve function is a flag
+ indicating whether it was successful.  This value should be
+   0 if successful,
+   positive for a recoverable error (step will be retried),
+   negative for an unrecoverable error (integration is halted).
+---------------------------------------------------------------*/
+typedef int (*ARKSpilsPrecSolveFn)(realtype t, N_Vector y, 
+				   N_Vector fy, N_Vector r, 
+				   N_Vector z, realtype gamma, 
+				   realtype delta, int lr, 
+				   void *user_data, N_Vector tmp);
+
+
+/*---------------------------------------------------------------
+ Type: ARKSpilsJacTimesVecFn
+
+ The user-supplied function jtimes is to generate the product
+ J*v for given v, where J is the Jacobian df/dy, or an
+ approximation to it, and v is a given vector. It should return
+ 0 if successful a positive value for a recoverable error or 
+ a negative value for an unrecoverable failure.
+
+ A function jtimes must have the prototype given below. Its
+ parameters are as follows:
+
+   v        is the N_Vector to be multiplied by J.
+
+   Jv       is the output N_Vector containing J*v.
+
+   t        is the current value of the independent variable.
+
+   y        is the current value of the dependent variable
+            vector.
+
+   fy       is the vector f(t,y).
+
+   user_data   is a pointer to user data, the same as the user_data
+            parameter passed to the ARKodeSetUserData function.
+
+   tmp      is a pointer to memory allocated for an N_Vector
+            which can be used by Jtimes for work space.
+---------------------------------------------------------------*/
+typedef int (*ARKSpilsJacTimesVecFn)(N_Vector v, N_Vector Jv, 
+				     realtype t, N_Vector y, 
+				     N_Vector fy, void *user_data, 
+				     N_Vector tmp);
+
+
+/*---------------------------------------------------------------
+ Type: ARKSpilsMassTimesVecFn
+
+ The user-supplied function mtimes is to generate the product
+ M*v for given v, where M is the mass matrix, or an 
+ approximation to it, and v is a given vector. It should return 
+ 0 if successful or a negative value for an unrecoverable failure.
+
+ A function mtimes must have the prototype given below. Its
+ parameters are as follows:
+
+   v        is the N_Vector to be multiplied by M.
+
+   Mv       is the output N_Vector containing M*v.
+
+   t        is the current value of the independent variable.
+
+   user_data   is a pointer to user data, the same as the user_data
+            parameter passed to the ARKodeSetUserData function.
+---------------------------------------------------------------*/
+typedef int (*ARKSpilsMassTimesVecFn)(N_Vector v, N_Vector Mv, 
+				      realtype t, void *user_data);
+
+
+
+/*---------------------------------------------------------------
+ Type: ARKSpilsMassPrecSetupFn
+
+ The user-supplied mass matrix preconditioner setup function 
+ MPrecSetup and the user-supplied mass matrix preconditioner solve 
+ function PrecSolve together must define left and right 
+ preconditoner matrices P1 and P2 (either of which may be 
+ trivial), such that the product P1*P2 is an approximation to 
+ the mass matrix M.  The solution of systems P z = r, with P = P1 
+ or P2, is to be carried out by the PrecSolve function, and 
+ MPrecSetup is to do any necessary setup operations.
+
+ The user-supplied preconditioner setup function MPrecSetup
+ is to evaluate and preprocess any mass-matrix-related data
+ needed by the preconditioner solve function PrecSolve.
+
+ A function MPrecSetup must have the prototype given below.
+ Its parameters are as follows:
+
+ t       is the current value of the independent variable.
+
+ user_data  is a pointer to user data - the same as the user_data
+         parameter passed to the ARKodeSetUserData function.
+
+ tmp1, tmp2, and tmp3 are pointers to memory allocated
+                      for N_Vectors which can be used by
+                      ARKSpilsMassPrecSetupFn as temporary 
+                      storage or work space.
+
+ Returned value:
+ The value to be returned by the MPrecSetup function is a flag
+ indicating whether it was successful.  This value should be
+   0   if successful,
+   < 0 for an unrecoverable error (integration is halted).
+---------------------------------------------------------------*/
+typedef int (*ARKSpilsMassPrecSetupFn)(realtype t, void *user_data, 
+				       N_Vector tmp1, N_Vector tmp2, 
+				       N_Vector tmp3);
+
+
+/*---------------------------------------------------------------
+ Type: ARKSpilsMassPrecSolveFn
+
+ The user-supplied mass matrix preconditioner solve function 
+ MPrecSolve is to solve a linear system P z = r in which the 
+ matrix P is one of the preconditioner matrices P1 or P2, 
+ depending on the type of preconditioning chosen.
+
+ A function MPrecSolve must have the prototype given below.
+ Its parameters are as follows:
+
+ t      is the current value of the independent variable.
+
+ r      is the right-hand side vector of the linear system.
+
+ z      is the output vector computed by MPrecSolve.
+
+ delta  is an input tolerance for use by PSolve if it uses
+        an iterative method in its solution.  In that case,
+        the residual vector Res = r - P z of the system
+        should be made less than delta in weighted L2 norm,
+        i.e., sqrt [ Sum (Res[i]*ewt[i])^2 ] < delta.
+        Note: the error weight vector ewt can be obtained
+        through a call to the routine ARKodeGetErrWeights.
+
+ lr     is an input flag indicating whether MPrecSolve is to use
+        the left preconditioner P1 or right preconditioner
+        P2: lr = 1 means use P1, and lr = 2 means use P2.
+
+ user_data  is a pointer to user data - the same as the user_data
+         parameter passed to the ARKodeSetUserData function.
+
+ tmp    is a pointer to memory allocated for an N_Vector
+        which can be used by PSolve for work space.
+
+ Returned value:
+ The value to be returned by the MPrecSolve function is a flag
+ indicating whether it was successful.  This value should be
+   0 if successful,
+   negative for an unrecoverable error (integration is halted).
+---------------------------------------------------------------*/
+typedef int (*ARKSpilsMassPrecSolveFn)(realtype t, N_Vector r, 
+				       N_Vector z, realtype delta, 
+				       int lr, void *user_data, 
+				       N_Vector tmp);
+
+
+/*---------------------------------------------------------------
+ Optional inputs to the ARKSPILS linear solver:
+
+ ARKSpilsSetPrecType resets the type of preconditioner, pretype,
+                from the value previously set.
+                This must be one of PREC_NONE, PREC_LEFT, 
+                PREC_RIGHT, or PREC_BOTH.
+
+ ARKSpilsSetGSType specifies the type of Gram-Schmidt
+                orthogonalization to be used. This must be one of
+                the two enumeration constants MODIFIED_GS or
+                CLASSICAL_GS defined in iterative.h. These 
+                correspond to using modified Gram-Schmidt and 
+                classical Gram-Schmidt, respectively.
+                Default value is MODIFIED_GS.
+
+ ARKSpilsSetMaxl resets the maximum Krylov subspace size, maxl,
+                from the value previously set.
+                An input value <= 0, gives the default value.
+
+ ARKSpilsSetEpsLin specifies the factor by which the tolerance on
+                the nonlinear iteration is multiplied to get a
+                tolerance on the linear iteration.
+                Default value is 0.05.
+
+ ARKSpilsSetPreconditioner specifies the PrecSetup and PrecSolve 
+                functions.  Default is NULL for both arguments 
+                (no preconditioning)
+
+ ARKSpilsSetMassPreconditioner specifies the mass matrix MPrecSetup
+                and MPrecSolve functions.  Default is NULL for 
+                both arguments (no preconditioning)
+
+ ARKSpilsSetJacTimesVecFn specifies the jtimes function. Default 
+                is to use an internal finite difference 
+		approximation routine.
+
+ ARKSpilsSetMassTimesVecFn specifies the mtimes function. No Default.
+
+ The return value of ARKSpilsSet* is one of:
+    ARKSPILS_SUCCESS      if successful
+    ARKSPILS_MEM_NULL     if the arkode memory was NULL
+    ARKSPILS_LMEM_NULL    if the linear solver memory was NULL
+    ARKSPILS_MASSMEM_NULL if the mass matrix solver memory was NULL
+    ARKSPILS_ILL_INPUT    if an input has an illegal value
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSpilsSetPrecType(void *arkode_mem, int pretype);
+SUNDIALS_EXPORT int ARKSpilsSetMassPrecType(void *arkode_mem, int pretype);
+SUNDIALS_EXPORT int ARKSpilsSetGSType(void *arkode_mem, int gstype);
+SUNDIALS_EXPORT int ARKSpilsSetMassGSType(void *arkode_mem, int gstype);
+SUNDIALS_EXPORT int ARKSpilsSetMaxl(void *arkode_mem, int maxl);
+SUNDIALS_EXPORT int ARKSpilsSetMassMaxl(void *arkode_mem, int maxl);
+SUNDIALS_EXPORT int ARKSpilsSetEpsLin(void *arkode_mem, realtype eplifac);
+SUNDIALS_EXPORT int ARKSpilsSetMassEpsLin(void *arkode_mem, realtype eplifac);
+SUNDIALS_EXPORT int ARKSpilsSetPreconditioner(void *arkode_mem, 
+					      ARKSpilsPrecSetupFn pset,
+					      ARKSpilsPrecSolveFn psolve);
+SUNDIALS_EXPORT int ARKSpilsSetMassPreconditioner(void *arkode_mem, 
+						  ARKSpilsMassPrecSetupFn pset,
+						  ARKSpilsMassPrecSolveFn psolve);
+SUNDIALS_EXPORT int ARKSpilsSetJacTimesVecFn(void *arkode_mem, 
+					     ARKSpilsJacTimesVecFn jtv);
+SUNDIALS_EXPORT int ARKSpilsSetMassTimesVecFn(void *arkode_mem, 
+					      ARKSpilsMassTimesVecFn mtv,
+					      void *mtimes_data);
+
+
+/*---------------------------------------------------------------
+ Optional outputs from the ARKSPILS linear solver:
+
+ ARKSpilsGetWorkSpace returns the real and integer workspace used
+                by the SPILS module.
+
+ ARKSpilsGetMassWorkSpace returns the real and integer workspace used
+                by the mass matrix SPILS module.
+
+ ARKSpilsGetNumPrecEvals returns the number of preconditioner
+                 evaluations, i.e. the number of calls made
+                 to PrecSetup with jok==FALSE.
+
+ ARKSpilsGetNumMassPrecEvals returns the number of mass matrix 
+                 preconditioner evaluations, i.e. the number of 
+                 calls made to MPrecSetup.
+
+ ARKSpilsGetNumPrecSolves returns the number of calls made to
+                 PrecSolve.
+
+ ARKSpilsGetNumMassPrecSolves returns the number of calls made to
+                 MPrecSolve.
+
+ ARKSpilsGetNumLinIters returns the number of linear iterations.
+
+ ARKSpilsGetNumMassIters returns the number of mass matrix solver
+                  iterations.
+
+ ARKSpilsGetNumConvFails returns the number of linear
+                 convergence failures.
+
+ ARKSpilsGetNumMassConvFails returns the number of mass matrix solver
+                 convergence failures.
+
+ ARKSpilsGetNumJtimesEvals returns the number of calls to jtimes.
+
+ ARKSpilsGetNumMtimesEvals returns the number of calls to mtimes.
+
+ ARKSpilsGetNumRhsEvals returns the number of calls to the user
+                 f routine due to finite difference Jacobian
+                 times vector evaluation.
+
+ ARKSpilsGetLastFlag returns the last error flag set by any of
+                 the ARKSPILS interface functions.
+
+ ARKSpilsGetLastMassFlag returns the last error flag set by any of
+                 the ARKSPILS interface functions on the mass 
+		 matrix solve.
+
+ The return value of ARKSpilsGet* is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_LMEM_NULL if the linear solver memory was NULL
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSpilsGetWorkSpace(void *arkode_mem, 
+					 long int *lenrwLS, 
+					 long int *leniwLS);
+SUNDIALS_EXPORT int ARKSpilsGetMassWorkSpace(void *arkode_mem, 
+					     long int *lenrwMLS, 
+					     long int *leniwMLS);
+SUNDIALS_EXPORT int ARKSpilsGetNumPrecEvals(void *arkode_mem, 
+					    long int *npevals);
+SUNDIALS_EXPORT int ARKSpilsGetNumMassPrecEvals(void *arkode_mem, 
+						long int *nmpevals);
+SUNDIALS_EXPORT int ARKSpilsGetNumPrecSolves(void *arkode_mem, 
+					     long int *npsolves);
+SUNDIALS_EXPORT int ARKSpilsGetNumMassPrecSolves(void *arkode_mem, 
+						 long int *nmpsolves);
+SUNDIALS_EXPORT int ARKSpilsGetNumLinIters(void *arkode_mem, 
+					   long int *nliters);
+SUNDIALS_EXPORT int ARKSpilsGetNumMassIters(void *arkode_mem, 
+					    long int *nmiters);
+SUNDIALS_EXPORT int ARKSpilsGetNumConvFails(void *arkode_mem, 
+					    long int *nlcfails);
+SUNDIALS_EXPORT int ARKSpilsGetNumMassConvFails(void *arkode_mem, 
+						long int *nmcfails);
+SUNDIALS_EXPORT int ARKSpilsGetNumJtimesEvals(void *arkode_mem, 
+					      long int *njvevals);
+SUNDIALS_EXPORT int ARKSpilsGetNumMtimesEvals(void *arkode_mem, 
+					      long int *nmvevals);
+SUNDIALS_EXPORT int ARKSpilsGetNumRhsEvals(void *arkode_mem, 
+					   long int *nfevalsLS); 
+SUNDIALS_EXPORT int ARKSpilsGetLastFlag(void *arkode_mem, 
+					long int *flag);
+SUNDIALS_EXPORT int ARKSpilsGetLastMassFlag(void *arkode_mem, 
+					    long int *flag);
+
+
+/*---------------------------------------------------------------
+ The following function returns the name of the constant 
+ associated with a ARKSPILS return flag
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT char *ARKSpilsGetReturnFlagName(long int flag);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_sptfqmr.h b/include/arkode/arkode_sptfqmr.h
new file mode 100644
index 0000000..946cebe
--- /dev/null
+++ b/include/arkode/arkode_sptfqmr.h
@@ -0,0 +1,104 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the header file for the ARKODE scaled preconditioned 
+ * TFQMR linear solver, ARKSPTFQMR.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKSPTFQMR_H
+#define _ARKSPTFQMR_H
+
+#include <arkode/arkode.h>
+#include <arkode/arkode_spils.h>
+#include <sundials/sundials_sptfqmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------
+ ARKSptfqmr:
+
+ A call to the ARKSptfqmr function links the main ARKODE integrator
+ with the ARKSPTFQMR linear solver.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ pretype   is the type of user preconditioning to be done.
+           This must be one of the four enumeration constants
+           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined
+           in iterative.h. These correspond to no preconditioning,
+           left preconditioning only, right preconditioning
+           only, and both left and right preconditioning,
+           respectively.
+
+ maxl      is the maximum Krylov dimension. This is an
+           optional input to the ARKSPTFQMR solver. Pass 0 to
+           use the default value ARKSPILS_MAXL=5.
+
+ The return value of ARKSptfqmr is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_MEM_FAIL  if there was a memory allocation failure
+    ARKSPILS_ILL_INPUT if a required vector operation is missing
+ The above constants are defined in arkode_spils.h
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSptfqmr(void *arkode_mem, int pretype, int maxl);
+
+
+/*---------------------------------------------------------------
+ ARKMassSptfqmr:
+
+ A call to the ARKMassSptfqmr function links the mass matrix solve
+ with the ARKSPTFQMR linear solver module.
+
+ arkode_mem is the pointer to the integrator memory returned by
+           ARKodeCreate.
+
+ pretype   is the type of user preconditioning to be done.
+           This must be one of the four enumeration constants
+           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined
+           in iterative.h. These correspond to no preconditioning,
+           left preconditioning only, right preconditioning
+           only, and both left and right preconditioning,
+           respectively.
+
+ maxl      is the maximum Krylov dimension. This is an
+           optional input to the ARKSPTFQMR solver. Pass 0 to
+           use the default value ARKSPILS_MAXL=5.
+
+ mtimes    is the user-supplied mass-matrix-vector product 
+           routine.
+
+ The return value of ARKMassSptfqmr is one of:
+    ARKSPILS_SUCCESS   if successful
+    ARKSPILS_MEM_NULL  if the arkode memory was NULL
+    ARKSPILS_MEM_FAIL  if there was a memory allocation failure
+    ARKSPILS_ILL_INPUT if a required vector operation is missing
+ The above constants are defined in arkode_spils.h
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassSptfqmr(void *arkode_mem, int pretype, int maxl, 
+				   ARKSpilsMassTimesVecFn mtimes,
+				   void *mtimes_data);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/arkode/arkode_superlumt.h b/include/arkode/arkode_superlumt.h
new file mode 100644
index 0000000..5d980ce
--- /dev/null
+++ b/include/arkode/arkode_superlumt.h
@@ -0,0 +1,138 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Header file for the ARKSUPERLUMT linear solver module.
+ *---------------------------------------------------------------*/
+
+#ifndef _ARKSUPERLUMT_H
+#define _ARKSUPERLUMT_H
+
+#include "arkode/arkode_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*---------------------------------------------------------------
+ Function: ARKSuperLUMT
+-----------------------------------------------------------------
+ A call to the ARKSuperLUMT function links the main integrator
+ with the ARKSUPERLUMT linear solver module.
+
+ arkode_mem is the pointer to integrator memory returned by
+            ARKodeCreate.
+
+ num_threads is the number of hardware threads to use
+
+ n is the number of rows in the linear system
+
+ nnz is the maximum number of nonzeros in the sparse matrix
+     A = M + gamma*J
+
+ The return value of ARKSuperLUMT is one of:
+     ARKSLS_SUCCESS   if successful
+     ARKSLS_MEM_NULL  if the ARKode memory was NULL
+     ARKSLS_MEM_FAIL  if there was a memory allocation failure
+     ARKSLS_ILL_INPUT if a required vector operation is missing
+
+ NOTE: The ARKSUPERLUMT linear solver assumes a serial 
+       implementation of the NVECTOR package. Therefore, 
+       ARKSuperLUMT will first test for a compatible N_Vector
+       internal representation by checking that the function
+       N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSuperLUMT(void *arkode_mem, 
+				 int num_threads,
+				 int n, int nnz); 
+
+
+/*---------------------------------------------------------------
+ Function: ARKMassSuperLUMT
+-----------------------------------------------------------------
+ A call to the ARKMassSuperLUMT function links the mass matrix
+ solve with the ARKSUPERLUMT linear solver module.
+
+ arkode_mem is the pointer to integrator memory returned by
+            ARKodeCreate.
+
+ num_threads is the number of hardware threads to use
+
+ n is the number of rows in the sparse mass matrix
+
+ nnz is the maximum number of nonzeros in the sparse mass matrix
+
+ smass is the user-supplied sparse mass matrix setup function.
+
+ The return value of ARKMassSuperLUMT is one of:
+     ARKSLS_SUCCESS   if successful
+     ARKSLS_MEM_NULL  if the ARKode memory was NULL
+     ARKSLS_MEM_FAIL  if there was a memory allocation failure
+     ARKSLS_ILL_INPUT if a required vector operation is missing
+
+ NOTE: The ARKSUPERLUMT linear solver assumes a serial 
+       implementation of the NVECTOR package. Therefore, 
+       ARKMassSuperLUMT will first test for a compatible 
+       N_Vector internal representation by checking that the 
+       function N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassSuperLUMT(void *arkode_mem, 
+				     int num_threads,
+				     int n, int nnz,
+				     ARKSlsSparseMassFn smass); 
+
+
+/*================================================================
+ Optional Input Specification Functions
+=================================================================*/
+
+/*---------------------------------------------------------------
+ Function: ARKSuperLUMTSetOrdering 
+-----------------------------------------------------------------
+ Sets the ordering used by ARKSuperLUMT for reducing fill in the 
+ system matrix solve.  Options for ordering_choice are:
+     0 for natural ordering
+     1 for minimal degree ordering on A'*A
+     2 for minimal degree ordering on A'+A
+     3 for AMD ordering for unsymmetric matrices
+ The default used in ARKODE is 3 for COLAMD.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKSuperLUMTSetOrdering(void *ark_mem, 
+					    int ordering_choice); 
+
+
+/*---------------------------------------------------------------
+ Function: ARKMassSuperLUMTSetOrdering 
+-----------------------------------------------------------------
+ Sets the ordering used by ARKMassSuperLUMT for reducing fill in 
+ the mass matrix solve.  Options for ordering_choice are:
+     0 for natural ordering
+     1 for minimal degree ordering on A'*A
+     2 for minimal degree ordering on A'+A
+     3 for AMD ordering for unsymmetric matrices
+ The default used in ARKODE is 3 for COLAMD.
+---------------------------------------------------------------*/
+SUNDIALS_EXPORT int ARKMassSuperLUMTSetOrdering(void *ark_mem, 
+						int ordering_choice); 
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode.h b/include/cvode/cvode.h
new file mode 100644
index 0000000..13bac37
--- /dev/null
+++ b/include/cvode/cvode.h
@@ -0,0 +1,794 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, Radu Serban
+ *                and Dan Shumaker @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the interface file for the main CVODE integrator.
+ * -----------------------------------------------------------------
+ *
+ * CVODE is used to solve numerically the ordinary initial value
+ * problem:
+ *
+ *                 y' = f(t,y),
+ *                 y(t0) = y0,
+ *
+ * where t0, y0 in R^N, and f: R x R^N -> R^N are given.
+ *
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVODE_H
+#define _CVODE_H
+
+#include <stdio.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *              C V O D E     C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Enumerations for inputs to CVodeCreate and CVode.
+ * -----------------------------------------------------------------
+ * Symbolic constants for the lmm and iter parameters to CVodeCreate
+ * and the input parameter itask to CVode, are given below.
+ *
+ * lmm:   The user of the CVODE package specifies whether to use the
+ *        CV_ADAMS (Adams-Moulton) or CV_BDF (Backward Differentiation
+ *        Formula) linear multistep method. The BDF method is
+ *        recommended for stiff problems, and the CV_ADAMS method is
+ *        recommended for nonstiff problems.
+ *
+ * iter:  At each internal time step, a nonlinear equation must
+ *        be solved. The user can specify either CV_FUNCTIONAL
+ *        iteration, which does not require linear algebra, or a
+ *        CV_NEWTON iteration, which requires the solution of linear
+ *        systems. In the CV_NEWTON case, the user also specifies a
+ *        CVODE linear solver. CV_NEWTON is recommended in case of
+ *        stiff problems.
+ *
+ * itask: The itask input parameter to CVode indicates the job
+ *        of the solver for the next user step. The CV_NORMAL
+ *        itask is to have the solver take internal steps until
+ *        it has reached or just passed the user specified tout
+ *        parameter. The solver then interpolates in order to
+ *        return an approximate value of y(tout). The CV_ONE_STEP
+ *        option tells the solver to just take one internal step
+ *        and return the solution at the point reached by that step.
+ * -----------------------------------------------------------------
+ */
+
+/* lmm */
+#define CV_ADAMS 1
+#define CV_BDF   2
+
+/* iter */
+#define CV_FUNCTIONAL 1
+#define CV_NEWTON     2
+
+/* itask */
+#define CV_NORMAL         1
+#define CV_ONE_STEP       2
+
+/*
+ * ----------------------------------------
+ * CVODE return flags
+ * ----------------------------------------
+ */
+
+#define CV_SUCCESS               0
+#define CV_TSTOP_RETURN          1
+#define CV_ROOT_RETURN           2
+
+#define CV_WARNING              99
+
+#define CV_TOO_MUCH_WORK        -1
+#define CV_TOO_MUCH_ACC         -2
+#define CV_ERR_FAILURE          -3
+#define CV_CONV_FAILURE         -4
+
+#define CV_LINIT_FAIL           -5
+#define CV_LSETUP_FAIL          -6
+#define CV_LSOLVE_FAIL          -7
+#define CV_RHSFUNC_FAIL         -8
+#define CV_FIRST_RHSFUNC_ERR    -9
+#define CV_REPTD_RHSFUNC_ERR    -10
+#define CV_UNREC_RHSFUNC_ERR    -11
+#define CV_RTFUNC_FAIL          -12
+
+#define CV_MEM_FAIL             -20
+#define CV_MEM_NULL             -21
+#define CV_ILL_INPUT            -22
+#define CV_NO_MALLOC            -23
+#define CV_BAD_K                -24
+#define CV_BAD_T                -25
+#define CV_BAD_DKY              -26
+#define CV_TOO_CLOSE            -27
+
+/*
+ * =================================================================
+ *              F U N C T I O N   T Y P E S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVRhsFn
+ * -----------------------------------------------------------------
+ * The f function which defines the right hand side of the ODE
+ * system y' = f(t,y) must have type CVRhsFn.
+ * f takes as input the independent variable value t, and the
+ * dependent variable vector y.  It stores the result of f(t,y)
+ * in the vector ydot.  The y and ydot arguments are of type
+ * N_Vector.
+ * (Allocation of memory for ydot is handled within CVODE)
+ * The user_data parameter is the same as the user_data
+ * parameter set by the user through the CVodeSetUserData routine.
+ * This user-supplied pointer is passed to the user's f function
+ * every time it is called.
+ *
+ * A CVRhsFn should return 0 if successful, a negative value if
+ * an unrecoverable error occured, and a positive value if a 
+ * recoverable error (e.g. invalid y values) occured. 
+ * If an unrecoverable occured, the integration is halted. 
+ * If a recoverable error occured, then (in most cases) CVODE
+ * will try to correct and retry.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVRhsFn)(realtype t, N_Vector y,
+		       N_Vector ydot, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVRootFn
+ * -----------------------------------------------------------------
+ * A function g, which defines a set of functions g_i(t,y) whose
+ * roots are sought during the integration, must have type CVRootFn.
+ * The function g takes as input the independent variable value
+ * t, and the dependent variable vector y.  It stores the nrtfn
+ * values g_i(t,y) in the realtype array gout.
+ * (Allocation of memory for gout is handled within CVODE.)
+ * The user_data parameter is the same as that passed by the user
+ * to the CVodeSetUserData routine.  This user-supplied pointer is
+ * passed to the user's g function every time it is called.
+ *
+ * A CVRootFn should return 0 if successful or a non-zero value
+ * if an error occured (in which case the integration will be halted).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVRootFn)(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVEwtFn
+ * -----------------------------------------------------------------
+ * A function e, which sets the error weight vector ewt, must have
+ * type CVEwtFn.
+ * The function e takes as input the current dependent variable y.
+ * It must set the vector of error weights used in the WRMS norm:
+ * 
+ *   ||y||_WRMS = sqrt [ 1/N * sum ( ewt_i * y_i)^2 ]
+ *
+ * Typically, the vector ewt has components:
+ * 
+ *   ewt_i = 1 / (reltol * |y_i| + abstol_i)
+ *
+ * The user_data parameter is the same as that passed by the user
+ * to the CVodeSetUserData routine.  This user-supplied pointer is
+ * passed to the user's e function every time it is called.
+ * A CVEwtFn e must return 0 if the error weight vector has been
+ * successfuly set and a non-zero value otherwise.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVEwtFn)(N_Vector y, N_Vector ewt, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVErrHandlerFn
+ * -----------------------------------------------------------------
+ * A function eh, which handles error messages, must have type
+ * CVErrHandlerFn.
+ * The function eh takes as input the error code, the name of the
+ * module reporting the error, the error message, and a pointer to
+ * user data, the same as that passed to CVodeSetUserData.
+ * 
+ * All error codes are negative, except CV_WARNING which indicates 
+ * a warning (the solver continues).
+ *
+ * A CVErrHandlerFn has no return value.
+ * -----------------------------------------------------------------
+ */
+
+typedef void (*CVErrHandlerFn)(int error_code, 
+			       const char *module, const char *function, 
+			       char *msg, void *user_data); 
+
+/*
+ * =================================================================
+ *          U S E R - C A L L A B L E   R O U T I N E S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeCreate
+ * -----------------------------------------------------------------
+ * CVodeCreate creates an internal memory block for a problem to
+ * be solved by CVODE.
+ *
+ * lmm   is the type of linear multistep method to be used.
+ *       The legal values are CV_ADAMS and CV_BDF (see previous
+ *       description).
+ *
+ * iter  is the type of iteration used to solve the nonlinear
+ *       system that arises during each internal time step.
+ *       The legal values are CV_FUNCTIONAL and CV_NEWTON.
+ *
+ * If successful, CVodeCreate returns a pointer to initialized
+ * problem memory. This pointer should be passed to CVodeInit.
+ * If an initialization error occurs, CVodeCreate prints an error
+ * message to standard err and returns NULL.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void *CVodeCreate(int lmm, int iter);
+
+/*
+ * -----------------------------------------------------------------
+ * Integrator optional input specification functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to set optional inputs
+ * to values other than the defaults given below:
+ *
+ * Function                |  Optional input / [ default value ]
+ * -----------------------------------------------------------------
+ *                         |
+ * CVodeSetErrHandlerFn    | user-provided ErrHandler function.
+ *                         | [internal]
+ *                         |
+ * CVodeSetErrFile         | the file pointer for an error file
+ *                         | where all CVODE warning and error
+ *                         | messages will be written if the default
+ *                         | internal error handling function is used. 
+ *                         | This parameter can be stdout (standard 
+ *                         | output), stderr (standard error), or a 
+ *                         | file pointer (corresponding to a user 
+ *                         | error file opened for writing) returned 
+ *                         | by fopen.
+ *                         | If not called, then all messages will
+ *                         | be written to the standard error stream.
+ *                         | [stderr]
+ *                         |
+ * CVodeSetUserData        | a pointer to user data that will be
+ *                         | passed to the user's f function every
+ *                         | time f is called.
+ *                         | [NULL]
+ *                         |
+ * CVodeSetMaxOrd          | maximum lmm order to be used by the
+ *                         | solver.
+ *                         | [12 for Adams , 5 for BDF]
+ *                         |
+ * CVodeSetMaxNumSteps     | maximum number of internal steps to be
+ *                         | taken by the solver in its attempt to
+ *                         | reach tout.
+ *                         | [500]
+ *                         |
+ * CVodeSetMaxHnilWarns    | maximum number of warning messages
+ *                         | issued by the solver that t+h==t on the
+ *                         | next internal step. A value of -1 means
+ *                         | no such messages are issued.
+ *                         | [10]
+ *                         |
+ * CVodeSetStabLimDet      | flag to turn on/off stability limit
+ *                         | detection (TRUE = on, FALSE = off).
+ *                         | When BDF is used and order is 3 or
+ *                         | greater, CVsldet is called to detect
+ *                         | stability limit.  If limit is detected,
+ *                         | the order is reduced.
+ *                         | [FALSE]
+ *                         |
+ * CVodeSetInitStep        | initial step size.
+ *                         | [estimated by CVODE]
+ *                         |
+ * CVodeSetMinStep         | minimum absolute value of step size
+ *                         | allowed.
+ *                         | [0.0]
+ *                         |
+ * CVodeSetMaxStep         | maximum absolute value of step size
+ *                         | allowed.
+ *                         | [infinity]
+ *                         |
+ * CVodeSetStopTime        | the independent variable value past
+ *                         | which the solution is not to proceed.
+ *                         | [infinity]
+ *                         |
+ * CVodeSetMaxErrTestFails | Maximum number of error test failures
+ *                         | in attempting one step.
+ *                         | [7]
+ *                         |
+ * CVodeSetMaxNonlinIters  | Maximum number of nonlinear solver
+ *                         | iterations at one solution.
+ *                         | [3]
+ *                         |
+ * CVodeSetMaxConvFails    | Maximum number of convergence failures
+ *                         | allowed in attempting one step.
+ *                         | [10]
+ *                         |
+ * CVodeSetNonlinConvCoef  | Coefficient in the nonlinear
+ *                         | convergence test.
+ *                         | [0.1]
+ *                         |
+ * -----------------------------------------------------------------
+ *                         |
+ * CVodeSetIterType        | Changes the current nonlinear iteration
+ *                         | type.
+ *                         | [set by CVodecreate]
+ *                         |
+ * -----------------------------------------------------------------
+ *                            |
+ * CVodeSetRootDirection      | Specifies the direction of zero
+ *                            | crossings to be monitored
+ *                            | [both directions]
+ *                            |
+ * CVodeSetNoInactiveRootWarn | disable warning about possible
+ *                            | g==0 at beginning of integration
+ *                            | 
+ * -----------------------------------------------------------------
+
+ * -----------------------------------------------------------------
+ * Return flag:
+ *   CV_SUCCESS   if successful
+ *   CV_MEM_NULL  if the cvode memory is NULL
+ *   CV_ILL_INPUT if an argument has an illegal value
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSetErrHandlerFn(void *cvode_mem, CVErrHandlerFn ehfun, void *eh_data);
+SUNDIALS_EXPORT int CVodeSetErrFile(void *cvode_mem, FILE *errfp);
+SUNDIALS_EXPORT int CVodeSetUserData(void *cvode_mem, void *user_data);
+SUNDIALS_EXPORT int CVodeSetMaxOrd(void *cvode_mem, int maxord);
+SUNDIALS_EXPORT int CVodeSetMaxNumSteps(void *cvode_mem, long int mxsteps);
+SUNDIALS_EXPORT int CVodeSetMaxHnilWarns(void *cvode_mem, int mxhnil);
+SUNDIALS_EXPORT int CVodeSetStabLimDet(void *cvode_mem, booleantype stldet);
+SUNDIALS_EXPORT int CVodeSetInitStep(void *cvode_mem, realtype hin);
+SUNDIALS_EXPORT int CVodeSetMinStep(void *cvode_mem, realtype hmin);
+SUNDIALS_EXPORT int CVodeSetMaxStep(void *cvode_mem, realtype hmax);
+SUNDIALS_EXPORT int CVodeSetStopTime(void *cvode_mem, realtype tstop);
+SUNDIALS_EXPORT int CVodeSetMaxErrTestFails(void *cvode_mem, int maxnef);
+SUNDIALS_EXPORT int CVodeSetMaxNonlinIters(void *cvode_mem, int maxcor);
+SUNDIALS_EXPORT int CVodeSetMaxConvFails(void *cvode_mem, int maxncf);
+SUNDIALS_EXPORT int CVodeSetNonlinConvCoef(void *cvode_mem, realtype nlscoef);
+
+SUNDIALS_EXPORT int CVodeSetIterType(void *cvode_mem, int iter);
+
+SUNDIALS_EXPORT int CVodeSetRootDirection(void *cvode_mem, int *rootdir);
+SUNDIALS_EXPORT int CVodeSetNoInactiveRootWarn(void *cvode_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeInit
+ * -----------------------------------------------------------------
+ * CVodeInit allocates and initializes memory for a problem to
+ * to be solved by CVODE.
+ *
+ * cvode_mem is pointer to CVODE memory returned by CVodeCreate.
+ *
+ * f       is the name of the C function defining the right-hand
+ *         side function in y' = f(t,y).
+ *
+ * t0      is the initial value of t.
+ *
+ * y0      is the initial condition vector y(t0).
+ *
+ * Return flag:
+ *  CV_SUCCESS if successful
+ *  CV_MEM_NULL if the cvode memory was NULL
+ *  CV_MEM_FAIL if a memory allocation failed
+ *  CV_ILL_INPUT f an argument has an illegal value.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeInit(void *cvode_mem, CVRhsFn f, realtype t0, N_Vector y0);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeReInit
+ * -----------------------------------------------------------------
+ * CVodeReInit re-initializes CVode for the solution of a problem,
+ * where a prior call to CVodeInit has been made with the same
+ * problem size N. CVodeReInit performs the same input checking
+ * and initializations that CVodeInit does.
+ * But it does no memory allocation, assuming that the existing
+ * internal memory is sufficient for the new problem.
+ *
+ * The use of CVodeReInit requires that the maximum method order,
+ * maxord, is no larger for the new problem than for the problem
+ * specified in the last call to CVodeInit.  This condition is
+ * automatically fulfilled if the multistep method parameter lmm
+ * is unchanged (or changed from CV_ADAMS to CV_BDF) and the default
+ * value for maxord is specified.
+ *
+ * All of the arguments to CVodeReInit have names and meanings
+ * identical to those of CVodeInit.
+ *
+ * The return value of CVodeReInit is equal to CV_SUCCESS = 0 if
+ * there were no errors; otherwise it is a negative int equal to:
+ *   CV_MEM_NULL      indicating cvode_mem was NULL (i.e.,
+ *                    CVodeCreate has not been called).
+ *   CV_NO_MALLOC     indicating that cvode_mem has not been
+ *                    allocated (i.e., CVodeInit has not been
+ *                    called).
+ *   CV_ILL_INPUT     indicating an input argument was illegal
+ *                    (including an attempt to increase maxord).
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeReInit(void *cvode_mem, realtype t0, N_Vector y0);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : CVodeSStolerances
+ *             CVodeSVtolerances
+ *             CVodeWFtolerances
+ * -----------------------------------------------------------------
+ *
+ * These functions specify the integration tolerances. One of them
+ * MUST be called before the first call to CVode.
+ *
+ * CVodeSStolerances specifies scalar relative and absolute tolerances.
+ * CVodeSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component).
+ * CVodeWFtolerances specifies a user-provides function (of type CVEwtFn)
+ *   which will be called to set the error weight vector.
+ *
+ * The tolerances reltol and abstol define a vector of error weights,
+ * ewt, with components
+ *   ewt[i] = 1/(reltol*abs(y[i]) + abstol)      (in the SS case), or
+ *   ewt[i] = 1/(reltol*abs(y[i]) + abstol[i])   (in the SV case).
+ * This vector is used in all error and convergence tests, which
+ * use a weighted RMS norm on all error-like vectors v:
+ *    WRMSnorm(v) = sqrt( (1/N) sum(i=1..N) (v[i]*ewt[i])^2 ),
+ * where N is the problem dimension.
+ *
+ * The return value of these functions is equal to CV_SUCCESS = 0 if
+ * there were no errors; otherwise it is a negative int equal to:
+ *   CV_MEM_NULL      indicating cvode_mem was NULL (i.e.,
+ *                    CVodeCreate has not been called).
+ *   CV_NO_MALLOC     indicating that cvode_mem has not been
+ *                    allocated (i.e., CVodeInit has not been
+ *                    called).
+ *   CV_ILL_INPUT     indicating an input argument was illegal
+ *                    (e.g. a negative tolerance)
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSStolerances(void *cvode_mem, realtype reltol, realtype abstol);
+SUNDIALS_EXPORT int CVodeSVtolerances(void *cvode_mem, realtype reltol, N_Vector abstol);
+SUNDIALS_EXPORT int CVodeWFtolerances(void *cvode_mem, CVEwtFn efun);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeRootInit
+ * -----------------------------------------------------------------
+ * CVodeRootInit initializes a rootfinding problem to be solved
+ * during the integration of the ODE system.  It must be called
+ * after CVodeCreate, and before CVode.  The arguments are:
+ *
+ * cvode_mem = pointer to CVODE memory returned by CVodeCreate.
+ *
+ * nrtfn     = number of functions g_i, an int >= 0.
+ *
+ * g         = name of user-supplied function, of type CVRootFn,
+ *             defining the functions g_i whose roots are sought.
+ *
+ * If a new problem is to be solved with a call to CVodeReInit,
+ * where the new problem has no root functions but the prior one
+ * did, then call CVodeRootInit with nrtfn = 0.
+ *
+ * The return value of CVodeRootInit is CV_SUCCESS = 0 if there were
+ * no errors; otherwise it is a negative int equal to:
+ *   CV_MEM_NULL     indicating cvode_mem was NULL, or
+ *   CV_MEM_FAIL     indicating a memory allocation failed.
+ *                    (including an attempt to increase maxord).
+ *   CV_ILL_INPUT   indicating nrtfn > 0 but g = NULL.
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeRootInit(void *cvode_mem, int nrtfn, CVRootFn g);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVode
+ * -----------------------------------------------------------------
+ * CVode integrates the ODE over an interval in t.
+ * If itask is CV_NORMAL, then the solver integrates from its
+ * current internal t value to a point at or beyond tout, then
+ * interpolates to t = tout and returns y(tout) in the user-
+ * allocated vector yout. If itask is CV_ONE_STEP, then the solver
+ * takes one internal time step and returns in yout the value of
+ * y at the new internal time. In this case, tout is used only
+ * during the first call to CVode to determine the direction of
+ * integration and the rough scale of the t variable. If tstop is
+ * enabled (through a call to CVodeSetStopTime), then CVode returns
+ * the solution at tstop. Once the integrator returns at a tstop
+ * time, any future testing for tstop is disabled (and can be 
+ * reenabled only though a new call to CVodeSetStopTime).
+ * The time reached by the solver is placed in (*tret). The
+ * user is responsible for allocating the memory for this value.
+ *
+ * cvode_mem is the pointer to CVODE memory returned by
+ *           CVodeCreate.
+ *
+ * tout  is the next time at which a computed solution is desired.
+ *
+ * yout  is the computed solution vector. In CV_NORMAL mode with no
+ *       errors and no roots found, yout=y(tout).
+ *
+ * tret  is a pointer to a real location. CVode sets (*tret) to
+ *       the time reached by the solver and returns
+ *       yout=y(*tret).
+ *
+ * itask is CV_NORMAL or CV_ONE_STEP. These two modes are described above.
+ *
+ * Here is a brief description of each return value:
+ *
+ * CV_SUCCESS:      CVode succeeded and no roots were found.
+ *
+ * CV_ROOT_RETURN:  CVode succeeded, and found one or more roots.
+ *                  If nrtfn > 1, call CVodeGetRootInfo to see
+ *                  which g_i were found to have a root at (*tret).
+ *
+ * CV_TSTOP_RETURN: CVode succeeded and returned at tstop.
+ *
+ * CV_MEM_NULL:     The cvode_mem argument was NULL.
+ *
+ * CV_NO_MALLOC:    cvode_mem was not allocated.
+ *
+ * CV_ILL_INPUT:    One of the inputs to CVode is illegal. This
+ *                  includes the situation when a component of the
+ *                  error weight vectors becomes < 0 during
+ *                  internal time-stepping.  It also includes the
+ *                  situation where a root of one of the root
+ *                  functions was found both at t0 and very near t0.
+ *                  The ILL_INPUT flag will also be returned if the
+ *                  linear solver routine CV--- (called by the user
+ *                  after calling CVodeCreate) failed to set one of
+ *                  the linear solver-related fields in cvode_mem or
+ *                  if the linear solver's init routine failed. In
+ *                  any case, the user should see the printed
+ *                  error message for more details.
+ *
+ * CV_TOO_MUCH_WORK: The solver took mxstep internal steps but
+ *                  could not reach tout. The default value for
+ *                  mxstep is MXSTEP_DEFAULT = 500.
+ *
+ * CV_TOO_MUCH_ACC: The solver could not satisfy the accuracy
+ *                  demanded by the user for some internal step.
+ *
+ * CV_ERR_FAILURE:  Error test failures occurred too many times
+ *                  (= MXNEF = 7) during one internal time step or
+ *                  occurred with |h| = hmin.
+ *
+ * CV_CONV_FAILURE: Convergence test failures occurred too many
+ *                  times (= MXNCF = 10) during one internal time
+ *                  step or occurred with |h| = hmin.
+ *
+ * CV_LINIT_FAIL:   The linear solver's initialization function 
+ *                  failed.
+ *
+ * CV_LSETUP_FAIL:  The linear solver's setup routine failed in an
+ *                  unrecoverable manner.
+ *
+ * CV_LSOLVE_FAIL:  The linear solver's solve routine failed in an
+ *                  unrecoverable manner.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVode(void *cvode_mem, realtype tout, N_Vector yout,
+			  realtype *tret, int itask);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeGetDky
+ * -----------------------------------------------------------------
+ * CVodeGetDky computes the kth derivative of the y function at
+ * time t, where tn-hu <= t <= tn, tn denotes the current
+ * internal time reached, and hu is the last internal step size
+ * successfully used by the solver. The user may request
+ * k=0, 1, ..., qu, where qu is the order last used. The
+ * derivative vector is returned in dky. This vector must be
+ * allocated by the caller. It is only legal to call this
+ * function after a successful return from CVode.
+ *
+ * cvode_mem is the pointer to CVODE memory returned by
+ *           CVodeCreate.
+ *
+ * t   is the time at which the kth derivative of y is evaluated.
+ *     The legal range for t is [tn-hu,tn] as described above.
+ *
+ * k   is the order of the derivative of y to be computed. The
+ *     legal range for k is [0,qu] as described above.
+ *
+ * dky is the output derivative vector [((d/dy)^k)y](t).
+ *
+ * The return value for CVodeGetDky is one of:
+ *
+ *   CV_SUCCESS:  CVodeGetDky succeeded.
+ *
+ *   CV_BAD_K:    k is not in the range 0, 1, ..., qu.
+ *
+ *   CV_BAD_T:    t is not in the interval [tn-hu,tn].
+ *
+ *   CV_BAD_DKY:  The dky argument was NULL.
+ *
+ *   CV_MEM_NULL: The cvode_mem argument was NULL.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetDky(void *cvode_mem, realtype t, int k, N_Vector dky);
+
+/*
+ * -----------------------------------------------------------------
+ * Integrator optional output extraction functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistics related to the main integrator.
+ * -----------------------------------------------------------------
+ * CVodeGetWorkSpace returns the CVODE real and integer workspaces
+ * CVodeGetNumSteps returns the cumulative number of internal
+ *                  steps taken by the solver
+ * CVodeGetNumRhsEvals returns the number of calls to the user's
+ *                     f function
+ * CVodeGetNumLinSolvSetups returns the number of calls made to
+ *                          the linear solver's setup routine
+ * CVodeGetNumErrTestFails returns the number of local error test
+ *                         failures that have occured
+ * CVodeGetLastOrder returns the order used during the last
+ *                   internal step
+ * CVodeGetCurrentOrder returns the order to be used on the next
+ *                      internal step
+ * CVodeGetNumStabLimOrderReds returns the number of order
+ *                             reductions due to stability limit
+ *                             detection
+ * CVodeGetActualInitStep returns the actual initial step size
+ *                        used by CVODE
+ * CVodeGetLastStep returns the step size for the last internal
+ *                  step
+ * CVodeGetCurrentStep returns the step size to be attempted on
+ *                     the next internal step
+ * CVodeGetCurrentTime returns the current internal time reached
+ *                     by the solver
+ * CVodeGetTolScaleFactor returns a suggested factor by which the
+ *                        user's tolerances should be scaled when
+ *                        too much accuracy has been requested for
+ *                        some internal step
+ * CVodeGetErrWeights returns the current error weight vector.
+ *                    The user must allocate space for eweight.
+ * CVodeGetEstLocalErrors returns the vector of estimated local
+ *                        errors. The user must allocate space
+ *                        for ele.
+ * CVodeGetNumGEvals returns the number of calls to the user's
+ *                   g function (for rootfinding)
+ * CVodeGetRootInfo returns the indices for which g_i was found to 
+ *                  have a root. The user must allocate space for 
+ *                  rootsfound. For i = 0 ... nrtfn-1, 
+ *                  rootsfound[i] = 1 if g_i has a root, and = 0 if not.
+ *
+ * CVodeGet* return values:
+ *   CV_SUCCESS   if succesful
+ *   CV_MEM_NULL  if the cvode memory was NULL
+ *   CV_NO_SLDET  if stability limit was not turned on
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetWorkSpace(void *cvode_mem, long int *lenrw, long int *leniw);
+SUNDIALS_EXPORT int CVodeGetNumSteps(void *cvode_mem, long int *nsteps);
+SUNDIALS_EXPORT int CVodeGetNumRhsEvals(void *cvode_mem, long int *nfevals);
+SUNDIALS_EXPORT int CVodeGetNumLinSolvSetups(void *cvode_mem, long int *nlinsetups);
+SUNDIALS_EXPORT int CVodeGetNumErrTestFails(void *cvode_mem, long int *netfails);
+SUNDIALS_EXPORT int CVodeGetLastOrder(void *cvode_mem, int *qlast);
+SUNDIALS_EXPORT int CVodeGetCurrentOrder(void *cvode_mem, int *qcur);
+SUNDIALS_EXPORT int CVodeGetNumStabLimOrderReds(void *cvode_mem, long int *nslred);
+SUNDIALS_EXPORT int CVodeGetActualInitStep(void *cvode_mem, realtype *hinused);
+SUNDIALS_EXPORT int CVodeGetLastStep(void *cvode_mem, realtype *hlast);
+SUNDIALS_EXPORT int CVodeGetCurrentStep(void *cvode_mem, realtype *hcur);
+SUNDIALS_EXPORT int CVodeGetCurrentTime(void *cvode_mem, realtype *tcur);
+SUNDIALS_EXPORT int CVodeGetTolScaleFactor(void *cvode_mem, realtype *tolsfac);
+SUNDIALS_EXPORT int CVodeGetErrWeights(void *cvode_mem, N_Vector eweight);
+SUNDIALS_EXPORT int CVodeGetEstLocalErrors(void *cvode_mem, N_Vector ele);
+SUNDIALS_EXPORT int CVodeGetNumGEvals(void *cvode_mem, long int *ngevals);
+SUNDIALS_EXPORT int CVodeGetRootInfo(void *cvode_mem, int *rootsfound);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following functions provides the
+ * optional outputs in one group.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetIntegratorStats(void *cvode_mem, long int *nsteps,
+					    long int *nfevals, long int *nlinsetups,
+					    long int *netfails, int *qlast,
+					    int *qcur, realtype *hinused, realtype *hlast,
+					    realtype *hcur, realtype *tcur);
+
+/*
+ * -----------------------------------------------------------------
+ * Nonlinear solver optional output extraction functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistics related to the nonlinear solver.
+ * -----------------------------------------------------------------
+ * CVodeGetNumNonlinSolvIters returns the number of nonlinear
+ *                            solver iterations performed.
+ * CVodeGetNumNonlinSolvConvFails returns the number of nonlinear
+ *                                convergence failures.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetNumNonlinSolvIters(void *cvode_mem, long int *nniters);
+SUNDIALS_EXPORT int CVodeGetNumNonlinSolvConvFails(void *cvode_mem, long int *nncfails);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following function provides the
+ * nonlinear solver optional outputs in a group.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetNonlinSolvStats(void *cvode_mem, long int *nniters,
+					    long int *nncfails);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a CVODE return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *CVodeGetReturnFlagName(long int flag);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeFree
+ * -----------------------------------------------------------------
+ * CVodeFree frees the problem memory cvode_mem allocated by
+ * CVodeCreate and CVodeInit. Its only argument is the pointer
+ * cvode_mem returned by CVodeCreate.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void CVodeFree(void **cvode_mem);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_band.h b/include/cvode/cvode_band.h
new file mode 100644
index 0000000..c80ae87
--- /dev/null
+++ b/include/cvode/cvode_band.h
@@ -0,0 +1,66 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVODE band linear solver, CVBAND.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVBAND_H
+#define _CVBAND_H
+
+#include <cvode/cvode_direct.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBand
+ * -----------------------------------------------------------------
+ * A call to the CVBand function links the main CVODE integrator
+ * with the CVBAND linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * mupper is the upper bandwidth of the band Jacobian
+ *        approximation.
+ *
+ * mlower is the lower bandwidth of the band Jacobian
+ *        approximation.
+ *
+ * The return value of CVBand is one of:
+ *    CVDLS_SUCCESS   if successful
+ *    CVDLS_MEM_NULL  if the cvode memory was NULL
+ *    CVDLS_MEM_FAIL  if there was a memory allocation failure
+ *    CVDLS_ILL_INPUT if a required vector operation is missing or
+ *                       if a bandwidth has an illegal value.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBand(void *cvode_mem, long int N, long int mupper, long int mlower);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_bandpre.h b/include/cvode/cvode_bandpre.h
new file mode 100644
index 0000000..771a1d5
--- /dev/null
+++ b/include/cvode/cvode_bandpre.h
@@ -0,0 +1,146 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVBANDPRE module, which
+ * provides a banded difference quotient Jacobian-based
+ * preconditioner and solver routines for use with CVSPGMR,
+ * CVSPBCG, or CVSPTFQMR.
+ *
+ * Summary:
+ * These routines provide a band matrix preconditioner based on
+ * difference quotients of the ODE right-hand side function f.
+ * The user supplies parameters
+ *   mu = upper half-bandwidth (number of super-diagonals)
+ *   ml = lower half-bandwidth (number of sub-diagonals)
+ * The routines generate a band matrix of bandwidth ml + mu + 1
+ * and use this to form a preconditioner for use with the Krylov
+ * linear solver in CVSP*. Although this matrix is intended to
+ * approximate the Jacobian df/dy, it may be a very crude
+ * approximation. The true Jacobian need not be banded, or its
+ * true bandwith may be larger than ml + mu + 1, as long as the
+ * banded approximation generated here is sufficiently accurate
+ * to speed convergence as a preconditioner.
+ *
+ * Usage:
+ *   The following is a summary of the usage of this module.
+ *   Details of the calls to CVodeCreate, CVodeInit, CVSp*,
+ *   and CVode are available in the User Guide.
+ *   To use these routines, the sequence of calls in the user
+ *   main program should be as follows:
+ *
+ *   #include <cvode/cvode_bandpre.h>
+ *   #include <nvector_serial.h>
+ *   ...
+ *   Set y0
+ *   ...
+ *   cvode_mem = CVodeCreate(...);
+ *   ier = CVodeInit(...);
+ *   ...
+ *   flag = CVSptfqmr(cvode_mem, pretype, maxl);
+ *     -or-
+ *   flag = CVSpgmr(cvode_mem, pretype, maxl);
+ *     -or-
+ *   flag = CVSpbcg(cvode_mem, pretype, maxl);
+ *   ...
+ *   flag = CVBandPrecInit(cvode_mem, N, mu, ml);
+ *   ...
+ *   flag = CVode(...);
+ *   ...
+ *   Free y0
+ *   ...
+ *   CVodeFree(&cvode_mem);
+ *
+ * Notes:
+ * (1) Include this file for the CVBandPrecData type definition.
+ * (2) In the CVBandPrecAlloc call, the arguments N is the
+ *     problem dimension.
+ * (3) In the CVBPSp* call, the user is free to specify
+ *     the input pretype and the optional input maxl.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVBANDPRE_H
+#define _CVBANDPRE_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBandPrecInit
+ * -----------------------------------------------------------------
+ * CVBandPrecInit allocates and initializes the BANDPRE preconditioner
+ * module. This functino must be called AFTER one of the SPILS linear
+ * solver modules has been attached to the CVODE integrator.
+ *
+ * The parameters of CVBandPrecInit are as follows:
+ *
+ * cvode_mem is the pointer to CVODE memory returned by CVodeCreate.
+ *
+ * N is the problem size.
+ *
+ * mu is the upper half bandwidth.
+ *
+ * ml is the lower half bandwidth.
+ *
+ * The return value of CVBandPrecInit is one of:
+ *   CVSPILS_SUCCESS if no errors occurred
+ *   CVSPILS_MEM_NULL if the integrator memory is NULL
+ *   CVSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   CVSPILS_ILL_INPUT if an input has an illegal value
+ *   CVSPILS_MEM_FAIL if a memory allocation request failed
+ *
+ * NOTE: The band preconditioner assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVBandPrecInit will
+ *       first test for a compatible N_Vector internal
+ *       representation by checking for required functions.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBandPrecInit(void *cvode_mem, long int N, long int mu, long int ml);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional output functions : CVBandPrecGet*
+ * -----------------------------------------------------------------
+ * CVBandPrecGetWorkSpace returns the real and integer work space used
+ *                        by CVBANDPRE.
+ * CVBandPrecGetNumRhsEvals returns the number of calls made from
+ *                          CVBANDPRE to the user's right-hand side
+ *                          routine f.
+ *
+ * The return value of CVBandPrecGet* is one of:
+ *   CVSPILS_SUCCESS if no errors occurred
+ *   CVSPILS_MEM_NULL if the integrator memory is NULL
+ *   CVSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   CVSPILS_PMEM_NULL if the preconditioner memory is NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBandPrecGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int CVBandPrecGetNumRhsEvals(void *cvode_mem, long int *nfevalsBP);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_bbdpre.h b/include/cvode/cvode_bbdpre.h
new file mode 100644
index 0000000..15535b0
--- /dev/null
+++ b/include/cvode/cvode_bbdpre.h
@@ -0,0 +1,273 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Michael Wittman, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVBBDPRE module, for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with CVSPGMR/CVSPBCG/CVSPTFQMR, 
+ * and the parallel implementation of the NVECTOR module.
+ *
+ * Summary:
+ *
+ * These routines provide a preconditioner matrix that is
+ * block-diagonal with banded blocks. The blocking corresponds
+ * to the distribution of the dependent variable vector y among
+ * the processors. Each preconditioner block is generated from
+ * the Jacobian of the local part (on the current processor) of a
+ * given function g(t,y) approximating f(t,y). The blocks are
+ * generated by a difference quotient scheme on each processor
+ * independently. This scheme utilizes an assumed banded
+ * structure with given half-bandwidths, mudq and mldq.
+ * However, the banded Jacobian block kept by the scheme has
+ * half-bandwiths mukeep and mlkeep, which may be smaller.
+ *
+ * The user's calling program should have the following form:
+ *
+ *   #include <nvector_parallel.h>
+ *   #include <cvode/cvode_bbdpre.h>
+ *   ...
+ *   void *cvode_mem;
+ *   ...
+ *   Set y0
+ *   ...
+ *   cvode_mem = CVodeCreate(...);
+ *   ier = CVodeInit(...);
+ *   ...
+ *   flag = CVSpgmr(cvode_mem, pretype, maxl);
+ *      -or-
+ *   flag = CVSpbcg(cvode_mem, pretype, maxl);
+ *      -or-
+ *   flag = CVSptfqmr(cvode_mem, pretype, maxl);
+ *   ...
+ *   flag = CVBBDPrecInit(cvode_mem, Nlocal, mudq ,mldq,
+ *                        mukeep, mlkeep, dqrely, gloc, cfn);
+ *   ...
+ *   ier = CVode(...);
+ *   ...
+ *   CVodeFree(&cvode_mem);
+ * 
+ *   Free y0
+ *
+ * The user-supplied routines required are:
+ *
+ *   f    = function defining the ODE right-hand side f(t,y).
+ *
+ *   gloc = function defining the approximation g(t,y).
+ *
+ *   cfn  = function to perform communication need for gloc.
+ *
+ * Notes:
+ *
+ * 1) This header file is included by the user for the definition
+ *    of the CVBBDData type and for needed function prototypes.
+ *
+ * 2) The CVBBDPrecInit call includes half-bandwiths mudq and mldq
+ *    to be used in the difference quotient calculation of the
+ *    approximate Jacobian. They need not be the true
+ *    half-bandwidths of the Jacobian of the local block of g,
+ *    when smaller values may provide a greater efficiency.
+ *    Also, the half-bandwidths mukeep and mlkeep of the retained
+ *    banded approximate Jacobian block may be even smaller,
+ *    to reduce storage and computation costs further.
+ *    For all four half-bandwidths, the values need not be the
+ *    same on every processor.
+ *
+ * 3) The actual name of the user's f function is passed to
+ *    CVodeInit, and the names of the user's gloc and cfn
+ *    functions are passed to CVBBDPrecInit.
+ *
+ * 4) The pointer to the user-defined data block user_data, which is
+ *    set through CVodeSetUserData is also available to the user in
+ *    gloc and cfn.
+ *
+ * 5) Optional outputs specific to this module are available by
+ *    way of routines listed below. These include work space sizes
+ *    and the cumulative number of gloc calls. The costs
+ *    associated with this module also include nsetups banded LU
+ *    factorizations, nlinsetups cfn calls, and npsolves banded
+ *    backsolve calls, where nlinsetups and npsolves are
+ *    integrator/CVSPGMR/CVSPBCG/CVSPTFQMR optional outputs.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVBBDPRE_H
+#define _CVBBDPRE_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVLocalFn
+ * -----------------------------------------------------------------
+ * The user must supply a function g(t,y) which approximates the
+ * right-hand side function f for the system y'=f(t,y), and which
+ * is computed locally (without interprocess communication).
+ * (The case where g is mathematically identical to f is allowed.)
+ * The implementation of this function must have type CVLocalFn.
+ *
+ * This function takes as input the local vector size Nlocal, the
+ * independent variable value t, the local real dependent
+ * variable vector y, and a pointer to the user-defined data
+ * block user_data. It is to compute the local part of g(t,y) and
+ * store this in the vector g.
+ * (Allocation of memory for y and g is handled within the
+ * preconditioner module.)
+ * The user_data parameter is the same as that specified by the user
+ * through the CVodeSetFdata routine.
+ *
+ * A CVLocalFn should return 0 if successful, a positive value if 
+ * a recoverable error occurred, and a negative value if an 
+ * unrecoverable error occurred.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVLocalFn)(long int Nlocal, realtype t, N_Vector y,
+                         N_Vector g, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVCommFn
+ * -----------------------------------------------------------------
+ * The user may supply a function of type CVCommFn which performs
+ * all interprocess communication necessary to evaluate the
+ * approximate right-hand side function described above.
+ *
+ * This function takes as input the local vector size Nlocal,
+ * the independent variable value t, the dependent variable
+ * vector y, and a pointer to the user-defined data block user_data.
+ * The user_data parameter is the same as that specified by the user
+ * through the CVodeSetUserData routine. The CVCommFn cfn is
+ * expected to save communicated data in space defined within the
+ * structure user_data. Note: A CVCommFn cfn does not have a return value.
+ *
+ * Each call to the CVCommFn cfn is preceded by a call to the
+ * CVRhsFn f with the same (t,y) arguments. Thus cfn can omit any
+ * communications done by f if relevant to the evaluation of g.
+ * If all necessary communication was done by f, the user can
+ * pass NULL for cfn in CVBBDPrecInit (see below).
+ *
+ * A CVCommFn should return 0 if successful, a positive value if 
+ * a recoverable error occurred, and a negative value if an 
+ * unrecoverable error occurred.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVCommFn)(long int Nlocal, realtype t, N_Vector y,
+                        void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBBDPrecInit
+ * -----------------------------------------------------------------
+ * CVBBDPrecInit allocates and initializes the BBD preconditioner.
+ *
+ * The parameters of CVBBDPrecInit are as follows:
+ *
+ * cvode_mem is the pointer to the integrator memory.
+ *
+ * Nlocal is the length of the local block of the vectors y etc.
+ *        on the current processor.
+ *
+ * mudq, mldq are the upper and lower half-bandwidths to be used
+ *            in the difference quotient computation of the local
+ *            Jacobian block.
+ *
+ * mukeep, mlkeep are the upper and lower half-bandwidths of the
+ *                retained banded approximation to the local Jacobian
+ *                block.
+ *
+ * dqrely is an optional input. It is the relative increment
+ *        in components of y used in the difference quotient
+ *        approximations. To specify the default, pass 0.
+ *        The default is dqrely = sqrt(unit roundoff).
+ *
+ * gloc is the name of the user-supplied function g(t,y) that
+ *      approximates f and whose local Jacobian blocks are
+ *      to form the preconditioner.
+ *
+ * cfn is the name of the user-defined function that performs
+ *     necessary interprocess communication for the
+ *     execution of gloc.
+ *
+ * The return value of CVBBDPrecInit is one of:
+ *   CVSPILS_SUCCESS if no errors occurred
+ *   CVSPILS_MEM_NULL if the integrator memory is NULL
+ *   CVSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   CVSPILS_ILL_INPUT if an input has an illegal value
+ *   CVSPILS_MEM_FAIL if a memory allocation request failed
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBBDPrecInit(void *cvode_mem, long int Nlocal, 
+                                  long int mudq, long int mldq, 
+                                  long int mukeep, long int mlkeep, 
+                                  realtype dqrely,
+                                  CVLocalFn gloc, CVCommFn cfn);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBBDPrecReInit
+ * -----------------------------------------------------------------
+ * CVBBDPrecReInit re-initializes the BBDPRE module when solving a
+ * sequence of problems of the same size with CVSPGMR/CVBBDPRE or
+ * CVSPBCG/CVBBDPRE or CVSPTFQMR/CVBBDPRE provided there is no change 
+ * in Nlocal, mukeep, or mlkeep. After solving one problem, and after 
+ * calling CVodeReInit to re-initialize the integrator for a subsequent 
+ * problem, call CVBBDPrecReInit.
+ *
+ * All arguments have the same names and meanings as those
+ * of CVBBDPrecInit.
+ *
+ * The return value of CVBBDPrecReInit is one of:
+ *   CVSPILS_SUCCESS if no errors occurred
+ *   CVSPILS_MEM_NULL if the integrator memory is NULL
+ *   CVSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   CVSPILS_PMEM_NULL if the preconditioner memory is NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBBDPrecReInit(void *cvode_mem, long int mudq, long int mldq,
+				    realtype dqrely);
+
+/*
+ * -----------------------------------------------------------------
+ * BBDPRE optional output extraction routines
+ * -----------------------------------------------------------------
+ * CVBBDPrecGetWorkSpace returns the BBDPRE real and integer work space
+ *                       sizes.
+ * CVBBDPrecGetNumGfnEvals returns the number of calls to gfn.
+ *
+ * The return value of CVBBDPrecGet* is one of:
+ *   CVSPILS_SUCCESS if no errors occurred
+ *   CVSPILS_MEM_NULL if the integrator memory is NULL
+ *   CVSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   CVSPILS_PMEM_NULL if the preconditioner memory is NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBBDPrecGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int CVBBDPrecGetNumGfnEvals(void *cvode_mem, long int *ngevalsBBDP);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_dense.h b/include/cvode/cvode_dense.h
new file mode 100644
index 0000000..d9636f5
--- /dev/null
+++ b/include/cvode/cvode_dense.h
@@ -0,0 +1,59 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVODE dense linear solver, CVDENSE.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVDENSE_H
+#define _CVDENSE_H
+
+#include <cvode/cvode_direct.h>
+#include <sundials/sundials_dense.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVDense
+ * -----------------------------------------------------------------
+ * A call to the CVDense function links the main integrator with
+ * the CVDENSE linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * The return value of CVDense is one of:
+ *    CVDLS_SUCCESS   if successful
+ *    CVDLS_MEM_NULL  if the cvode memory was NULL
+ *    CVDLS_MEM_FAIL  if there was a memory allocation failure
+ *    CVDLS_ILL_INPUT if a required vector operation is missing
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDense(void *cvode_mem, long int N);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_diag.h b/include/cvode/cvode_diag.h
new file mode 100644
index 0000000..e3d1ba9
--- /dev/null
+++ b/include/cvode/cvode_diag.h
@@ -0,0 +1,111 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVODE diagonal linear solver, CVDIAG.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVDIAG_H
+#define _CVDIAG_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVDiag
+ * -----------------------------------------------------------------
+ * A call to the CVDiag function links the main integrator with
+ * the CVDIAG linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * The return value of CVDiag is one of:
+ *    CVDIAG_SUCCESS   if successful
+ *    CVDIAG_MEM_NULL  if the cvode memory was NULL
+ *    CVDIAG_MEM_FAIL  if there was a memory allocation failure
+ *    CVDIAG_ILL_INPUT if a required vector operation is missing
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDiag(void *cvode_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the CVDIAG linear solver
+ * -----------------------------------------------------------------
+ *
+ * CVDiagGetWorkSpace returns the real and integer workspace used
+ *                    by CVDIAG.
+ * CVDiagGetNumRhsEvals returns the number of calls to the user
+ *                      f routine due to finite difference Jacobian
+ *                      evaluation.
+ *                      Note: The number of diagonal approximate
+ *                      Jacobians formed is equal to the number of
+ *                      CVDiagSetup calls. This number is available
+ *                      through CVodeGetNumLinSolvSetups.
+ * CVDiagGetLastFlag returns the last error flag set by any of
+ *                   the CVDIAG interface functions.
+ *
+ * The return value of CVDiagGet* is one of:
+ *    CVDIAG_SUCCESS   if successful
+ *    CVDIAG_MEM_NULL  if the cvode memory was NULL
+ *    CVDIAG_LMEM_NULL if the cvdiag memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDiagGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int CVDiagGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS);
+SUNDIALS_EXPORT int CVDiagGetLastFlag(void *cvode_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a CVDIAG return flag
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT char *CVDiagGetReturnFlagName(long int flag);
+
+/*
+ * -----------------------------------------------------------------
+ * CVDIAG return values
+ * -----------------------------------------------------------------
+ */
+
+#define CVDIAG_SUCCESS          0
+#define CVDIAG_MEM_NULL        -1
+#define CVDIAG_LMEM_NULL       -2
+#define CVDIAG_ILL_INPUT       -3
+#define CVDIAG_MEM_FAIL        -4
+
+/* Additional last_flag values */
+
+#define CVDIAG_INV_FAIL        -5
+#define CVDIAG_RHSFUNC_UNRECVR -6
+#define CVDIAG_RHSFUNC_RECVR   -7
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_direct.h b/include/cvode/cvode_direct.h
new file mode 100644
index 0000000..79e96e4
--- /dev/null
+++ b/include/cvode/cvode_direct.h
@@ -0,0 +1,290 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common header file for the direct linear solvers in CVODE.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVDLS_H
+#define _CVDLS_H
+
+#include <sundials/sundials_direct.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *              C V D I R E C T     C O N S T A N T S
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * CVDLS return values 
+ * -----------------------------------------------------------------
+ */
+
+#define CVDLS_SUCCESS           0
+#define CVDLS_MEM_NULL         -1
+#define CVDLS_LMEM_NULL        -2
+#define CVDLS_ILL_INPUT        -3
+#define CVDLS_MEM_FAIL         -4
+
+/* Additional last_flag values */
+
+#define CVDLS_JACFUNC_UNRECVR  -5
+#define CVDLS_JACFUNC_RECVR    -6
+
+/*
+ * =================================================================
+ *              F U N C T I O N   T Y P E S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVDlsDenseJacFn
+ * -----------------------------------------------------------------
+ *
+ * A dense Jacobian approximation function Jac must be of type 
+ * CVDlsDenseJacFn. Its parameters are:
+ *
+ * N   is the problem size.
+ *
+ * Jac is the dense matrix (of type DlsMat) that will be loaded
+ *     by a CVDlsDenseJacFn with an approximation to the Jacobian 
+ *     matrix J = (df_i/dy_j) at the point (t,y). 
+ *
+ * t   is the current value of the independent variable.
+ *
+ * y   is the current value of the dependent variable vector,
+ *     namely the predicted value of y(t).
+ *
+ * fy  is the vector f(t,y).
+ *
+ * user_data is a pointer to user data - the same as the user_data
+ *     parameter passed to CVodeSetFdata.
+ *
+ * tmp1, tmp2, and tmp3 are pointers to memory allocated for
+ * vectors of length N which can be used by a CVDlsDenseJacFn
+ * as temporary storage or work space.
+ *
+ * A CVDlsDenseJacFn should return 0 if successful, a positive 
+ * value if a recoverable error occurred, and a negative value if 
+ * an unrecoverable error occurred.
+ *
+ * -----------------------------------------------------------------
+ *
+ * NOTE: The following are two efficient ways to load a dense Jac:         
+ * (1) (with macros - no explicit data structure references)      
+ *     for (j=0; j < Neq; j++) {                                  
+ *       col_j = DENSE_COL(Jac,j);                                 
+ *       for (i=0; i < Neq; i++) {                                
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         col_j[i] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ * (2) (without macros - explicit data structure references)      
+ *     for (j=0; j < Neq; j++) {                                  
+ *       col_j = (Jac->data)[j];                                   
+ *       for (i=0; i < Neq; i++) {                                
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         col_j[i] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ * A third way, using the DENSE_ELEM(A,i,j) macro, is much less   
+ * efficient in general.  It is only appropriate for use in small 
+ * problems in which efficiency of access is NOT a major concern. 
+ *                                                                
+ * NOTE: If the user's Jacobian routine needs other quantities,   
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through   
+ *     CVodeGetCurrentStep and CVodeGetErrWeights, respectively 
+ *     (see cvode.h). The unit roundoff is available as 
+ *     UNIT_ROUNDOFF defined in sundials_types.h.
+ *
+ * -----------------------------------------------------------------
+ */
+  
+  
+typedef int (*CVDlsDenseJacFn)(long int N, realtype t,
+			       N_Vector y, N_Vector fy, 
+			       DlsMat Jac, void *user_data,
+			       N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+  
+/*
+ * -----------------------------------------------------------------
+ * Type: CVDlsBandJacFn
+ * -----------------------------------------------------------------
+ *
+ * A band Jacobian approximation function Jac must have the
+ * prototype given below. Its parameters are:
+ *
+ * N is the length of all vector arguments.
+ *
+ * mupper is the upper half-bandwidth of the approximate banded
+ * Jacobian. This parameter is the same as the mupper parameter
+ * passed by the user to the linear solver initialization function.
+ *
+ * mlower is the lower half-bandwidth of the approximate banded
+ * Jacobian. This parameter is the same as the mlower parameter
+ * passed by the user to the linear solver initialization function.
+ *
+ * t is the current value of the independent variable.
+ *
+ * y is the current value of the dependent variable vector,
+ *      namely the predicted value of y(t).
+ *
+ * fy is the vector f(t,y).
+ *
+ * Jac is the band matrix (of type DlsMat) that will be loaded
+ * by a CVDlsBandJacFn with an approximation to the Jacobian matrix
+ * Jac = (df_i/dy_j) at the point (t,y).
+ * Three efficient ways to load J are:
+ *
+ * (1) (with macros - no explicit data structure references)
+ *    for (j=0; j < n; j++) {
+ *       col_j = BAND_COL(Jac,j);
+ *       for (i=j-mupper; i <= j+mlower; i++) {
+ *         generate J_ij = the (i,j)th Jacobian element
+ *         BAND_COL_ELEM(col_j,i,j) = J_ij;
+ *       }
+ *     }
+ *
+ * (2) (with BAND_COL macro, but without BAND_COL_ELEM macro)
+ *    for (j=0; j < n; j++) {
+ *       col_j = BAND_COL(Jac,j);
+ *       for (k=-mupper; k <= mlower; k++) {
+ *         generate J_ij = the (i,j)th Jacobian element, i=j+k
+ *         col_j[k] = J_ij;
+ *       }
+ *     }
+ *
+ * (3) (without macros - explicit data structure references)
+ *     offset = Jac->smu;
+ *     for (j=0; j < n; j++) {
+ *       col_j = ((Jac->data)[j])+offset;
+ *       for (k=-mupper; k <= mlower; k++) {
+ *         generate J_ij = the (i,j)th Jacobian element, i=j+k
+ *         col_j[k] = J_ij;
+ *       }
+ *     }
+ * Caution: Jac->smu is generally NOT the same as mupper.
+ *
+ * The BAND_ELEM(A,i,j) macro is appropriate for use in small
+ * problems in which efficiency of access is NOT a major concern.
+ *
+ * user_data is a pointer to user data - the same as the user_data
+ *          parameter passed to CVodeSetFdata.
+ *
+ * NOTE: If the user's Jacobian routine needs other quantities,
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through
+ *     CVodeGetCurrentStep and CVodeGetErrWeights, respectively
+ *     (see cvode.h). The unit roundoff is available as
+ *     UNIT_ROUNDOFF defined in sundials_types.h
+ *
+ * tmp1, tmp2, and tmp3 are pointers to memory allocated for
+ * vectors of length N which can be used by a CVDlsBandJacFn
+ * as temporary storage or work space.
+ *
+ * A CVDlsBandJacFn should return 0 if successful, a positive value
+ * if a recoverable error occurred, and a negative value if an 
+ * unrecoverable error occurred.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVDlsBandJacFn)(long int N, long int mupper, long int mlower,
+			      realtype t, N_Vector y, N_Vector fy, 
+			      DlsMat Jac, void *user_data,
+			      N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the CVDLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * CVDlsSetDenseJacFn specifies the dense Jacobian approximation
+ * routine to be used for a direct dense linear solver.
+ *
+ * CVDlsSetBandJacFn specifies the band Jacobian approximation
+ * routine to be used for a direct band linear solver.
+ *
+ * By default, a difference quotient approximation, supplied with
+ * the solver is used.
+ *
+ * The return value is one of:
+ *    CVDLS_SUCCESS   if successful
+ *    CVDLS_MEM_NULL  if the CVODE memory was NULL
+ *    CVDLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDlsSetDenseJacFn(void *cvode_mem, CVDlsDenseJacFn jac);
+SUNDIALS_EXPORT int CVDlsSetBandJacFn(void *cvode_mem, CVDlsBandJacFn jac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the CVDLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * CVDlsGetWorkSpace   returns the real and integer workspace used
+ *                     by the direct linear solver.
+ * CVDlsGetNumJacEvals returns the number of calls made to the
+ *                     Jacobian evaluation routine jac.
+ * CVDlsGetNumRhsEvals returns the number of calls to the user
+ *                     f routine due to finite difference Jacobian
+ *                     evaluation.
+ * CVDlsGetLastFlag    returns the last error flag set by any of
+ *                     the CVDLS interface functions.
+ *
+ * The return value of CVDlsGet* is one of:
+ *    CVDLS_SUCCESS   if successful
+ *    CVDLS_MEM_NULL  if the CVODE memory was NULL
+ *    CVDLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDlsGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int CVDlsGetNumJacEvals(void *cvode_mem, long int *njevals);
+SUNDIALS_EXPORT int CVDlsGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS);
+SUNDIALS_EXPORT int CVDlsGetLastFlag(void *cvode_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a CVDLS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *CVDlsGetReturnFlagName(long int flag);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_klu.h b/include/cvode/cvode_klu.h
new file mode 100644
index 0000000..f0259d5
--- /dev/null
+++ b/include/cvode/cvode_klu.h
@@ -0,0 +1,111 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4558 $
+ * $Date: 2015-10-05 09:04:16 -0700 (Mon, 05 Oct 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVKLU linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVKLU_H
+#define _CVKLU_H
+
+#include "cvode/cvode_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVKLU
+ * -----------------------------------------------------------------
+ * A call to the CVKLU function links the main integrator      
+ * with the CVKLU linear solver module.                        
+ *                                                                
+ * cv_mem is the pointer to integrator memory returned by        
+ *     CVCreate.             
+ *
+ *                                                                
+ * CVKLU returns:                                              
+ *     CVSLU_SUCCESS   = 0  if successful                              
+ *     CVSLU_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     CVSLU_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The KLU linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, CVKLU will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVKLU(void *cv_mem, int n, int nnz, int sparsetype); 
+
+/*
+ * -----------------------------------------------------------------
+ * CVKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to CVKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is CVSLS_SUCCESS = 0, CVSLS_MEM_NULL = -1,
+ * CVSLS_LMEM_NULL = -2, CVSLS_ILL_INPUT = -3, or CVSLS_MEM_FAIL = -4.
+ *
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVKLUReInit(void *cv_mem_v, int n, int nnz, 
+				  int reinit_type);
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * CVKLUSetOrdering sets the ordering used by KLU for reducing fill.
+ * Options are: 0 for AMD, 1 for COLAMD, and 2 for the natural ordering.
+ * The default used in CVODE is 1 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVKLUSetOrdering(void *cv_mem, int ordering_choice); 
+
+
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_lapack.h b/include/cvode/cvode_lapack.h
new file mode 100644
index 0000000..96495a5
--- /dev/null
+++ b/include/cvode/cvode_lapack.h
@@ -0,0 +1,91 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Header file for the CVODE dense linear solver CVLAPACK.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVLAPACK_H
+#define _CVLAPACK_H
+
+#include <cvode/cvode_direct.h>
+#include <sundials/sundials_lapack.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVLapackDense
+ * -----------------------------------------------------------------
+ * A call to the CVLapackDense function links the main integrator
+ * with the CVLAPACK linear solver using dense Jacobians.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * The return value of CVLapackDense is one of:
+ *    CVLAPACK_SUCCESS   if successful
+ *    CVLAPACK_MEM_NULL  if the CVODE memory was NULL
+ *    CVLAPACK_MEM_FAIL  if there was a memory allocation failure
+ *    CVLAPACK_ILL_INPUT if a required vector operation is missing
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVLapackDense(void *cvode_mem, int N);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVLapackBand
+ * -----------------------------------------------------------------
+ * A call to the CVLapackBand function links the main integrator
+ * with the CVLAPACK linear solver using banded Jacobians. 
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * mupper is the upper bandwidth of the band Jacobian approximation.
+ *
+ * mlower is the lower bandwidth of the band Jacobian approximation.
+ *
+ * The return value of CVLapackBand is one of:
+ *    CVLAPACK_SUCCESS   if successful
+ *    CVLAPACK_MEM_NULL  if the CVODE memory was NULL
+ *    CVLAPACK_MEM_FAIL  if there was a memory allocation failure
+ *    CVLAPACK_ILL_INPUT if a required vector operation is missing or
+ *                       if a bandwidth has an illegal value.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVLapackBand(void *cvode_mem, int N, int mupper, int mlower);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_sparse.h b/include/cvode/cvode_sparse.h
new file mode 100644
index 0000000..a4a1511
--- /dev/null
+++ b/include/cvode/cvode_sparse.h
@@ -0,0 +1,182 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the Sparse linear solver module in IDA.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSPARSE_H
+#define _CVSPARSE_H
+
+#include <sundials/sundials_sparse.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * C V S P A R S E    C O N S T A N T S
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * CVSLS return values 
+ * -----------------------------------------------------------------
+ */
+
+#define CVSLS_SUCCESS           0
+#define CVSLS_MEM_NULL         -1
+#define CVSLS_LMEM_NULL        -2
+#define CVSLS_ILL_INPUT        -3
+#define CVSLS_MEM_FAIL         -4
+#define CVSLS_JAC_NOSET        -5
+#define CVSLS_PACKAGE_FAIL     -6
+
+/* Additional last_flag values */
+
+#define CVSLS_JACFUNC_UNRECVR  -7
+#define CVSLS_JACFUNC_RECVR    -8
+
+/* Return values for the adjoint module */
+#define CVSLS_NO_ADJ           -101
+#define CVSLS_LMEMB_NULL       -102
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : CVSlsSparseJacFn
+ * -----------------------------------------------------------------
+ *
+ * A sparse Jacobian approximation function jac must be of type 
+ * CVSlsSparseJacFn.
+ * Its parameters are:                     
+ *                                                                
+ * t   is the current value of the independent variable t.        
+ *                                                                
+ * y   is the current value of the dependent variable vector,     
+ *     namely the predicted value of y(t).                     
+ *                                                                
+ * fy  is the vector f(t,y).
+ *     namely the predicted value of y'(t).                    
+ *                                                                
+ * JacMat is the compressed sparse column matrix (of type SlsMat)
+ *     to be loaded by an CVSlsSparseJacFn routine with an approximation
+ *     to the system Jacobian matrix
+ *            J = J = (df_i/dy_j) at the point (t,y). 
+ *     Note that JacMat is NOT preset to zero!
+ *     Matrix data is for the nonzero entries of the Jacobian stored in
+ *     compressed column format.  Row indices of entries in 
+ *     column j are stored in J->rowvals[colptrs[j]] 
+ *     through J->rowvals[colptrs[j+i]-1]
+ *     and corresponding numerical values of the Jacobian are stored 
+ *     in the same entries of J->data.
+ * 
+ * J_data is a pointer to user Jacobian data - the same as the    
+ *     user_data parameter passed to CVodeSetFdata.                     
+ *                                                                
+ * tmp1, tmp2, tmp3 are pointers to memory allocated for          
+ *     N_Vectors which can be used by an CVSparseJacFn routine 
+ *     as temporary storage or work space.                     
+ *                                                                
+ * A CVSlsSparseJacFn should return                                
+ *     0 if successful,                                           
+ *     a positive int if a recoverable error occurred, or         
+ *     a negative int if a nonrecoverable error occurred.         
+ *
+ * -----------------------------------------------------------------
+ *
+  * NOTE: If the user's Jacobian routine needs other quantities,   
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through   
+ *     CVodeGetCurrentStep and CVodeGetErrWeights, respectively 
+ *     (see cvode.h). The unit roundoff is available as 
+ *     UNIT_ROUNDOFF defined in sundials_types.h.
+ *
+ * -----------------------------------------------------------------
+ */
+  
+  
+typedef int (*CVSlsSparseJacFn)(realtype t,
+		     N_Vector y, N_Vector fy, 
+		     SlsMat JacMat, void *user_data,
+		     N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the CVSPARSE linear solver
+ * -----------------------------------------------------------------
+ * CVSlsSetSparseJacFn specifies the Jacobian approximation
+ * routine to be used for a sparse direct linear solver.
+ *
+ * The return value is one of:
+ *    CVSLS_SUCCESS   if successful
+ *    CVSLS_MEM_NULL  if the CVODE memory was NULL
+ *    CVSLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSlsSetSparseJacFn(void *cvode_mem, CVSlsSparseJacFn jac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the CVSLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * CVSlsGetNumJacEvals returns the number of calls made to the
+ *                      Jacobian evaluation routine jac.
+ * CVSlsGetLastFlag    returns the last error flag set by any of
+ *                      the IDADLS interface functions.
+ *
+ * The return value of IDADlsGet* is one of:
+ *    CVSLS_SUCCESS   if successful
+ *    CVSLS_MEM_NULL  if the IDA memory was NULL
+ *    CVSLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSlsGetNumJacEvals(void *ida_mem, long int *njevals);
+SUNDIALS_EXPORT int CVSlsGetLastFlag(void *ida_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a CVSLS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *CVSlsGetReturnFlagName(long int flag);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_spbcgs.h b/include/cvode/cvode_spbcgs.h
new file mode 100644
index 0000000..f6c1714
--- /dev/null
+++ b/include/cvode/cvode_spbcgs.h
@@ -0,0 +1,72 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVODE scaled preconditioned 
+ * Bi-CGSTAB linear solver, CVSPBCG.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSPBCG_H
+#define _CVSPBCG_H
+
+#include <cvode/cvode_spils.h>
+#include <sundials/sundials_spbcgs.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcg
+ * -----------------------------------------------------------------
+ * A call to the CVSpbcg function links the main CVODE integrator
+ * with the CVSPBCG linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * pretype   is the type of user preconditioning to be done.
+ *           This must be one of the four enumeration constants
+ *           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined
+ *           in iterative.h. These correspond to no preconditioning,
+ *           left preconditioning only, right preconditioning
+ *           only, and both left and right preconditioning,
+ *           respectively.
+ *
+ * maxl      is the maximum Krylov dimension. This is an
+ *           optional input to the CVSPBCG solver. Pass 0 to
+ *           use the default value CVSPBCG_MAXL=5.
+ *
+ * The return value of CVSpbcg is one of:
+ *    CVSPILS_SUCCESS   if successful
+ *    CVSPILS_MEM_NULL  if the cvode memory was NULL
+ *    CVSPILS_MEM_FAIL  if there was a memory allocation failure
+ *    CVSPILS_ILL_INPUT if a required vector operation is missing
+ * The above constants are defined in cvode_spils.h
+ *
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpbcg(void *cvode_mem, int pretype, int maxl);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_spgmr.h b/include/cvode/cvode_spgmr.h
new file mode 100644
index 0000000..10c05a1
--- /dev/null
+++ b/include/cvode/cvode_spgmr.h
@@ -0,0 +1,74 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVODE scaled preconditioned GMRES 
+ * linear solver, CVSPGMR.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSPGMR_H
+#define _CVSPGMR_H
+
+#include <cvode/cvode_spils.h>
+#include <sundials/sundials_spgmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpgmr
+ * -----------------------------------------------------------------
+ * A call to the CVSpgmr function links the main CVODE integrator
+ * with the CVSPGMR linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * pretype   is the type of user preconditioning to be done.
+ *           This must be one of the four enumeration constants
+ *           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined 
+ *           in sundials_iterative.h.
+ *           These correspond to no preconditioning,
+ *           left preconditioning only, right preconditioning
+ *           only, and both left and right preconditioning,
+ *           respectively.
+ *
+ * maxl      is the maximum Krylov dimension. This is an
+ *           optional input to the CVSPGMR solver. Pass 0 to
+ *           use the default value CVSPGMR_MAXL=5.
+ *
+ * The return value of CVSpgmr is one of:
+ *    CVSPILS_SUCCESS   if successful
+ *    CVSPILS_MEM_NULL  if the cvode memory was NULL
+ *    CVSPILS_MEM_FAIL  if there was a memory allocation failure
+ *    CVSPILS_ILL_INPUT if a required vector operation is missing
+ * The above constants are defined in cvode_spils.h
+ *
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpgmr(void *cvode_mem, int pretype, int maxl);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_spils.h b/include/cvode/cvode_spils.h
new file mode 100644
index 0000000..9207b5b
--- /dev/null
+++ b/include/cvode/cvode_spils.h
@@ -0,0 +1,370 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the common header file for the Scaled, Preconditioned
+ * Iterative Linear Solvers in CVODE.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSPILS_H
+#define _CVSPILS_H
+
+#include <sundials/sundials_iterative.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVSPILS return values 
+ * -----------------------------------------------------------------
+ */
+
+#define CVSPILS_SUCCESS          0
+#define CVSPILS_MEM_NULL        -1
+#define CVSPILS_LMEM_NULL       -2
+#define CVSPILS_ILL_INPUT       -3
+#define CVSPILS_MEM_FAIL        -4
+#define CVSPILS_PMEM_NULL       -5
+
+/*
+ * -----------------------------------------------------------------
+ * CVSPILS solver constants
+ * -----------------------------------------------------------------
+ * CVSPILS_MAXL   : default value for the maximum Krylov
+ *                  dimension
+ *
+ * CVSPILS_MSBPRE : maximum number of steps between
+ *                  preconditioner evaluations
+ *
+ * CVSPILS_DGMAX  : maximum change in gamma between
+ *                  preconditioner evaluations
+ *
+ * CVSPILS_EPLIN  : default value for factor by which the
+ *                  tolerance on the nonlinear iteration is
+ *                  multiplied to get a tolerance on the linear
+ *                  iteration
+ * -----------------------------------------------------------------
+ */
+
+#define CVSPILS_MAXL   5
+#define CVSPILS_MSBPRE 50
+#define CVSPILS_DGMAX  RCONST(0.2)
+#define CVSPILS_EPLIN  RCONST(0.05)
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsPrecSetupFn
+ * -----------------------------------------------------------------
+ * The user-supplied preconditioner setup function PrecSetup and
+ * the user-supplied preconditioner solve function PrecSolve
+ * together must define left and right preconditoner matrices
+ * P1 and P2 (either of which may be trivial), such that the
+ * product P1*P2 is an approximation to the Newton matrix
+ * M = I - gamma*J.  Here J is the system Jacobian J = df/dy,
+ * and gamma is a scalar proportional to the integration step
+ * size h.  The solution of systems P z = r, with P = P1 or P2,
+ * is to be carried out by the PrecSolve function, and PrecSetup
+ * is to do any necessary setup operations.
+ *
+ * The user-supplied preconditioner setup function PrecSetup
+ * is to evaluate and preprocess any Jacobian-related data
+ * needed by the preconditioner solve function PrecSolve.
+ * This might include forming a crude approximate Jacobian,
+ * and performing an LU factorization on the resulting
+ * approximation to M.  This function will not be called in
+ * advance of every call to PrecSolve, but instead will be called
+ * only as often as necessary to achieve convergence within the
+ * Newton iteration.  If the PrecSolve function needs no
+ * preparation, the PrecSetup function can be NULL.
+ *
+ * For greater efficiency, the PrecSetup function may save
+ * Jacobian-related data and reuse it, rather than generating it
+ * from scratch.  In this case, it should use the input flag jok
+ * to decide whether to recompute the data, and set the output
+ * flag *jcurPtr accordingly.
+ *
+ * Each call to the PrecSetup function is preceded by a call to
+ * the RhsFn f with the same (t,y) arguments.  Thus the PrecSetup
+ * function can use any auxiliary data that is computed and
+ * saved by the f function and made accessible to PrecSetup.
+ *
+ * A function PrecSetup must have the prototype given below.
+ * Its parameters are as follows:
+ *
+ * t       is the current value of the independent variable.
+ *
+ * y       is the current value of the dependent variable vector,
+ *          namely the predicted value of y(t).
+ *
+ * fy      is the vector f(t,y).
+ *
+ * jok     is an input flag indicating whether Jacobian-related
+ *         data needs to be recomputed, as follows:
+ *           jok == FALSE means recompute Jacobian-related data
+ *                  from scratch.
+ *           jok == TRUE  means that Jacobian data, if saved from
+ *                  the previous PrecSetup call, can be reused
+ *                  (with the current value of gamma).
+ *         A Precset call with jok == TRUE can only occur after
+ *         a call with jok == FALSE.
+ *
+ * jcurPtr is a pointer to an output integer flag which is
+ *         to be set by PrecSetup as follows:
+ *         Set *jcurPtr = TRUE if Jacobian data was recomputed.
+ *         Set *jcurPtr = FALSE if Jacobian data was not recomputed,
+ *                        but saved data was reused.
+ *
+ * gamma   is the scalar appearing in the Newton matrix.
+ *
+ * user_data  is a pointer to user data - the same as the user_data
+ *         parameter passed to the CVodeSetUserData function.
+ *
+ * tmp1, tmp2, and tmp3 are pointers to memory allocated
+ *                      for N_Vectors which can be used by
+ *                      CVSpilsPrecSetupFn as temporary storage or
+ *                      work space.
+ *
+ * NOTE: If the user's preconditioner needs other quantities,
+ *       they are accessible as follows: hcur (the current stepsize)
+ *       and ewt (the error weight vector) are accessible through
+ *       CVodeGetCurrentStep and CVodeGetErrWeights, respectively).
+ *       The unit roundoff is available as UNIT_ROUNDOFF defined in
+ *       sundials_types.h.
+ *
+ * Returned value:
+ * The value to be returned by the PrecSetup function is a flag
+ * indicating whether it was successful.  This value should be
+ *   0   if successful,
+ *   > 0 for a recoverable error (step will be retried),
+ *   < 0 for an unrecoverable error (integration is halted).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsPrecSetupFn)(realtype t, N_Vector y, N_Vector fy,
+                                  booleantype jok, booleantype *jcurPtr,
+                                  realtype gamma, void *user_data,
+                                  N_Vector tmp1, N_Vector tmp2,
+                                  N_Vector tmp3);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsPrecSolveFn
+ * -----------------------------------------------------------------
+ * The user-supplied preconditioner solve function PrecSolve
+ * is to solve a linear system P z = r in which the matrix P is
+ * one of the preconditioner matrices P1 or P2, depending on the
+ * type of preconditioning chosen.
+ *
+ * A function PrecSolve must have the prototype given below.
+ * Its parameters are as follows:
+ *
+ * t      is the current value of the independent variable.
+ *
+ * y      is the current value of the dependent variable vector.
+ *
+ * fy     is the vector f(t,y).
+ *
+ * r      is the right-hand side vector of the linear system.
+ *
+ * z      is the output vector computed by PrecSolve.
+ *
+ * gamma  is the scalar appearing in the Newton matrix.
+ *
+ * delta  is an input tolerance for use by PSolve if it uses
+ *        an iterative method in its solution.  In that case,
+ *        the residual vector Res = r - P z of the system
+ *        should be made less than delta in weighted L2 norm,
+ *        i.e., sqrt [ Sum (Res[i]*ewt[i])^2 ] < delta.
+ *        Note: the error weight vector ewt can be obtained
+ *        through a call to the routine CVodeGetErrWeights.
+ *
+ * lr     is an input flag indicating whether PrecSolve is to use
+ *        the left preconditioner P1 or right preconditioner
+ *        P2: lr = 1 means use P1, and lr = 2 means use P2.
+ *
+ * user_data  is a pointer to user data - the same as the user_data
+ *         parameter passed to the CVodeSetUserData function.
+ *
+ * tmp    is a pointer to memory allocated for an N_Vector
+ *        which can be used by PSolve for work space.
+ *
+ * Returned value:
+ * The value to be returned by the PrecSolve function is a flag
+ * indicating whether it was successful.  This value should be
+ *   0 if successful,
+ *   positive for a recoverable error (step will be retried),
+ *   negative for an unrecoverable error (integration is halted).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsPrecSolveFn)(realtype t, N_Vector y, N_Vector fy,
+                                  N_Vector r, N_Vector z,
+                                  realtype gamma, realtype delta,
+                                  int lr, void *user_data, N_Vector tmp);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsJacTimesVecFn
+ * -----------------------------------------------------------------
+ * The user-supplied function jtimes is to generate the product
+ * J*v for given v, where J is the Jacobian df/dy, or an
+ * approximation to it, and v is a given vector. It should return
+ * 0 if successful a positive value for a recoverable error or 
+ * a negative value for an unrecoverable failure.
+ *
+ * A function jtimes must have the prototype given below. Its
+ * parameters are as follows:
+ *
+ *   v        is the N_Vector to be multiplied by J.
+ *
+ *   Jv       is the output N_Vector containing J*v.
+ *
+ *   t        is the current value of the independent variable.
+ *
+ *   y        is the current value of the dependent variable
+ *            vector.
+ *
+ *   fy       is the vector f(t,y).
+ *
+ *   user_data   is a pointer to user data, the same as the user_data
+ *            parameter passed to the CVodeSetUserData function.
+ *
+ *   tmp      is a pointer to memory allocated for an N_Vector
+ *            which can be used by Jtimes for work space.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsJacTimesVecFn)(N_Vector v, N_Vector Jv, realtype t,
+                                    N_Vector y, N_Vector fy,
+                                    void *user_data, N_Vector tmp);
+
+
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the CVSPILS linear solver
+ * -----------------------------------------------------------------
+ *
+ * CVSpilsSetPrecType resets the type of preconditioner, pretype,
+ *                from the value previously set.
+ *                This must be one of PREC_NONE, PREC_LEFT, 
+ *                PREC_RIGHT, or PREC_BOTH.
+ *
+ * CVSpilsSetGSType specifies the type of Gram-Schmidt
+ *                orthogonalization to be used. This must be one of
+ *                the two enumeration constants MODIFIED_GS or
+ *                CLASSICAL_GS defined in iterative.h. These correspond
+ *                to using modified Gram-Schmidt and classical
+ *                Gram-Schmidt, respectively.
+ *                Default value is MODIFIED_GS.
+ *
+ * CVSpilsSetMaxl resets the maximum Krylov subspace size, maxl,
+ *                from the value previously set.
+ *                An input value <= 0, gives the default value.
+ *
+ * CVSpilsSetEpsLin specifies the factor by which the tolerance on
+ *                the nonlinear iteration is multiplied to get a
+ *                tolerance on the linear iteration.
+ *                Default value is 0.05.
+ *
+ * CVSpilsSetPreconditioner specifies the PrecSetup and PrecSolve functions.
+ *                Default is NULL for both arguments (no preconditioning)
+ *
+ * CVSpilsSetJacTimesVecFn specifies the jtimes function. Default is to 
+ *                use an internal finite difference approximation routine.
+ *
+ * The return value of CVSpilsSet* is one of:
+ *    CVSPILS_SUCCESS   if successful
+ *    CVSPILS_MEM_NULL  if the cvode memory was NULL
+ *    CVSPILS_LMEM_NULL if the linear solver memory was NULL
+ *    CVSPILS_ILL_INPUT if an input has an illegal value
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpilsSetPrecType(void *cvode_mem, int pretype);
+SUNDIALS_EXPORT int CVSpilsSetGSType(void *cvode_mem, int gstype);
+SUNDIALS_EXPORT int CVSpilsSetMaxl(void *cvode_mem, int maxl);
+SUNDIALS_EXPORT int CVSpilsSetEpsLin(void *cvode_mem, realtype eplifac);
+SUNDIALS_EXPORT int CVSpilsSetPreconditioner(void *cvode_mem, 
+                                             CVSpilsPrecSetupFn pset,
+                                             CVSpilsPrecSolveFn psolve);
+SUNDIALS_EXPORT int CVSpilsSetJacTimesVecFn(void *cvode_mem, 
+                                            CVSpilsJacTimesVecFn jtv);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the CVSPILS linear solver
+ * -----------------------------------------------------------------
+ * CVSpilsGetWorkSpace returns the real and integer workspace used
+ *                by the SPILS module.
+ *
+ * CVSpilsGetNumPrecEvals returns the number of preconditioner
+ *                 evaluations, i.e. the number of calls made
+ *                 to PrecSetup with jok==FALSE.
+ *
+ * CVSpilsGetNumPrecSolves returns the number of calls made to
+ *                 PrecSolve.
+ *
+ * CVSpilsGetNumLinIters returns the number of linear iterations.
+ *
+ * CVSpilsGetNumConvFails returns the number of linear
+ *                 convergence failures.
+ *
+ * CVSpilsGetNumJtimesEvals returns the number of calls to jtimes.
+ *
+ * CVSpilsGetNumRhsEvals returns the number of calls to the user
+ *                 f routine due to finite difference Jacobian
+ *                 times vector evaluation.
+ *
+ * CVSpilsGetLastFlag returns the last error flag set by any of
+ *                 the CVSPILS interface functions.
+ *
+ * The return value of CVSpilsGet* is one of:
+ *    CVSPILS_SUCCESS   if successful
+ *    CVSPILS_MEM_NULL  if the cvode memory was NULL
+ *    CVSPILS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpilsGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int CVSpilsGetNumPrecEvals(void *cvode_mem, long int *npevals);
+SUNDIALS_EXPORT int CVSpilsGetNumPrecSolves(void *cvode_mem, long int *npsolves);
+SUNDIALS_EXPORT int CVSpilsGetNumLinIters(void *cvode_mem, long int *nliters);
+SUNDIALS_EXPORT int CVSpilsGetNumConvFails(void *cvode_mem, long int *nlcfails);
+SUNDIALS_EXPORT int CVSpilsGetNumJtimesEvals(void *cvode_mem, long int *njvevals);
+SUNDIALS_EXPORT int CVSpilsGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS); 
+SUNDIALS_EXPORT int CVSpilsGetLastFlag(void *cvode_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a CVSPILS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *CVSpilsGetReturnFlagName(long int flag);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_sptfqmr.h b/include/cvode/cvode_sptfqmr.h
new file mode 100644
index 0000000..179d818
--- /dev/null
+++ b/include/cvode/cvode_sptfqmr.h
@@ -0,0 +1,72 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVODE scaled preconditioned TFQMR 
+ * linear solver, CVSPTFQMR.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSPTFQMR_H
+#define _CVSPTFQMR_H
+
+#include <cvode/cvode_spils.h>
+#include <sundials/sundials_sptfqmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmr
+ * -----------------------------------------------------------------
+ * A call to the CVSptfqmr function links the main CVODE integrator
+ * with the CVSPTFQMR linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * pretype   is the type of user preconditioning to be done.
+ *           This must be one of the four enumeration constants
+ *           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined
+ *           in iterative.h. These correspond to no preconditioning,
+ *           left preconditioning only, right preconditioning
+ *           only, and both left and right preconditioning,
+ *           respectively.
+ *
+ * maxl      is the maximum Krylov dimension. This is an
+ *           optional input to the CVSPTFQMR solver. Pass 0 to
+ *           use the default value CVSPILS_MAXL=5.
+ *
+ * The return value of CVSptfqmr is one of:
+ *    CVSPILS_SUCCESS   if successful
+ *    CVSPILS_MEM_NULL  if the cvode memory was NULL
+ *    CVSPILS_MEM_FAIL  if there was a memory allocation failure
+ *    CVSPILS_ILL_INPUT if a required vector operation is missing
+ * The above constants are defined in cvode_spils.h
+ *
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSptfqmr(void *cvode_mem, int pretype, int maxl);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvode/cvode_superlumt.h b/include/cvode/cvode_superlumt.h
new file mode 100644
index 0000000..1638876
--- /dev/null
+++ b/include/cvode/cvode_superlumt.h
@@ -0,0 +1,84 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4177 $
+ * $Date: 2014-07-23 11:56:06 -0700 (Wed, 23 Jul 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDASuperLUMT linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSUPERLUMT_H
+#define _CVSUPERLUMT_H
+
+#include "cvode/cvode_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSuperLUMT
+ * -----------------------------------------------------------------
+ * A call to the CVSuperLUMT function links the main integrator      
+ * with the CVSuperLUMT linear solver module.                        
+ *                                                                
+ * cv_mem is the pointer to integrator memory returned by        
+ *     CVCreate.             
+ *
+ *                                                                
+ * CVSuperLUMT returns:                                              
+ *     CVSLU_SUCCESS   = 0  if successful                              
+ *     CVSLU_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     CVSLU_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The CVSuperLUMT linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, CVSuperLUMT will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVSuperLUMT(void *cv_mem, int num_threads,
+				  int n, int nnz); 
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * CVSuperLUMTSetOrdering sets the ordering used by CVSuperLUMT for 
+ * reducing fill.
+ * Options are: 
+ * 0 for natural ordering
+ * 1 for minimal degree ordering on A'*A
+ * 2 for minimal degree ordering on A'+A
+ * 3 for approximate minimal degree ordering for unsymmetric matrices
+ * The default used in SUNDIALS is 3 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVSuperLUMTSetOrdering(void *cv_mem, 
+					     int ordering_choice); 
+
+
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes.h b/include/cvodes/cvodes.h
new file mode 100644
index 0000000..7c32757
--- /dev/null
+++ b/include/cvodes/cvodes.h
@@ -0,0 +1,1972 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the interface file for the main CVODES integrator.
+ * -----------------------------------------------------------------
+ *
+ * CVODES is used to solve numerically the ordinary initial value    
+ * problem:                                                          
+ *                                                                   
+ *                 y' = f(t,y),                                      
+ *                 y(t0) = y0,                                       
+ *                                                                   
+ * where t0, y0 in R^N, and f: R x R^N -> R^N are given.             
+ *                                                                   
+ * Optionally, CVODES can perform forward or adjoint sensitivity 
+ * analysis to find sensitivities of the solution y with respect 
+ * to parameters in the right hand side f and/or in the initial         
+ * conditions y0.                                                    
+ *
+ * -----------------------------------------------------------------
+ *
+ *  1: CONSTANTS
+ *     input constants
+ *     return flags
+ *
+ *  2: FUNCTION TYPES
+ *     CVRhsFn CVQuadRhsFn CVSensRhsFn CVSensRhs1Fn CVQuadSensRhsFn
+ *     CVRootFn
+ *     CVEwtFn
+ *     CVErrHandlerFn
+ *     CVRhsFnB     CVRhsFnBS
+ *     CVQuadRhsFnB CVQuadRhsFnBS
+ *     
+ *  3: INITIALIZATION AND DEALLOCATION FUNCTIONS FOR FORWARD PROBLEMS
+ *     CVodeCreate
+ *     CVodeInit        CVodeReInit
+ *     CVodeQuadInit    CVodeQuadReInit
+ *     CVodeSensInit    CVodeSensReInit
+ *     CVodeRootInit
+ *     CVodeFree          CVodeQuadFree      CVodeSensFree
+ *    
+ *  4: OPTIONAL INPUT FUNCTIONS FOR FORWARD PROBLEMS   
+ *    
+ *  5: MAIN SOLVER FUNCTION FOR FORWARD PROBLEMS
+ *     CVode
+ *
+ *  6: EXTRACTION AND DENSE OUTPUT FUNCTIONS FOR FORWARD PROBLEMS
+ *     CVodeGetDky
+ *     CVodeGetQuad
+ *     CVodeGetQuadDky
+ *     CVodeGetSens      CVodeGetSens1
+ *     CVodeGetSensDky   CVodeGetSensDky1
+ *     CVodeGetQuadSens      CVodeGetQuadSens1
+ *     CVodeGetQuadSensDky   CVodeGetQuadSensDky1
+ *    
+ *  7: OPTIONAL OUTPUT FUNCTIONS FOR FORWARD PROBLEMS
+ *    
+ *  8: INITIALIZATION AND DEALLOCATION FUNCTIONS FOR BACKWARD PROBLEMS  
+ *     CVodeAdjInit    CVodeAdjReInit
+ *     CVodeAdjFree
+ *     CVodeInitB      CVodeInitBS       CVodeReInitB
+ *     CVodeQuadInitB  CVodeQuadInitBS   CVodeQuadReInitB
+ *     
+ *  9  MAIN SOLVER FUNCTIONS FOR FORWARD PROBLEMS
+ *     CVodeF
+ *     CVodeB
+ *    
+ * 10: OPTIONAL INPUT FUNCTIONS FOR BACKWARD PROBLEMS  
+ *    
+ * 11: EXTRACTION AND DENSE OUTPUT FUNCTIONS FOR BACKWARD PROBLEMS  
+ *     CVodeGetB
+ *     CVodeGetQuadB
+ *    
+ * 12: OPTIONAL OUTPUT FUNCTIONS FOR BACKWARD PROBLEMS   
+ *
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVODES_H
+#define _CVODES_H
+
+#include <stdio.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *
+ * CVODES CONSTANTS
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Enumerations for inputs to:
+ * CVodeCreate (lmm, iter),
+ * CVodeSensInit, CvodeSensinit1, CVodeSensReInit (ism),
+ * CVodeAdjInit (interp),
+ * CVode (itask)
+ * -----------------------------------------------------------------
+ * Symbolic constants for the lmm and iter parameters to CVodeCreate
+ * the input parameter itask to CVode, and the input parameter interp
+ * to CVodeAdjInit, are given below.
+ *
+ * lmm:   The user of the CVODES package specifies whether to use
+ *        the CV_ADAMS or CV_BDF (backward differentiation formula)
+ *        linear multistep method. The BDF method is recommended
+ *        for stiff problems, and the CV_ADAMS method is recommended
+ *        for nonstiff problems.
+ *
+ * iter:  At each internal time step, a nonlinear equation must
+ *        be solved. The user can specify either CV_FUNCTIONAL
+ *        iteration, which does not require linear algebra, or a
+ *        CV_NEWTON iteration, which requires the solution of linear
+ *        systems. In the CV_NEWTON case, the user also specifies a
+ *        CVODE linear solver. CV_NEWTON is recommended in case of
+ *        stiff problems.
+ *
+ * ism:   This parameter specifies the sensitivity corrector type
+ *        to be used. In the CV_SIMULTANEOUS case, the nonlinear
+ *        systems for states and all sensitivities are solved
+ *        simultaneously. In the CV_STAGGERED case, the nonlinear
+ *        system for states is solved first and then, the
+ *        nonlinear systems for all sensitivities are solved
+ *        at the same time. Finally, in the CV_STAGGERED1 approach
+ *        all nonlinear systems are solved in a sequence.
+ *
+ * itask: The itask input parameter to CVode indicates the job
+ *        of the solver for the next user step. The CV_NORMAL
+ *        itask is to have the solver take internal steps until
+ *        it has reached or just passed the user specified tout
+ *        parameter. The solver then interpolates in order to
+ *        return an approximate value of y(tout). The CV_ONE_STEP
+ *        option tells the solver to just take one internal step
+ *        and return the solution at the point reached by that step.
+ *
+ * interp: Specifies the interpolation type used to evaluate the
+ *        forward solution during the backward integration phase.
+ *        CV_HERMITE specifies cubic Hermite interpolation.
+ *        CV_POYNOMIAL specifies the polynomial interpolation
+ * -----------------------------------------------------------------
+ */
+
+/* lmm */
+#define CV_ADAMS          1
+#define CV_BDF            2
+
+/* iter */
+#define CV_FUNCTIONAL     1
+#define CV_NEWTON         2
+
+/* itask */
+#define CV_NORMAL         1
+#define CV_ONE_STEP       2
+
+/* ism */
+#define CV_SIMULTANEOUS   1
+#define CV_STAGGERED      2
+#define CV_STAGGERED1     3
+
+/* DQtype */
+#define CV_CENTERED       1
+#define CV_FORWARD        2
+
+/* interp */
+#define CV_HERMITE        1
+#define CV_POLYNOMIAL     2
+
+/* 
+ * ----------------------------------------
+ * CVODES return flags
+ * ----------------------------------------
+ */
+
+#define CV_SUCCESS               0
+#define CV_TSTOP_RETURN          1
+#define CV_ROOT_RETURN           2
+
+#define CV_WARNING              99
+
+#define CV_TOO_MUCH_WORK        -1
+#define CV_TOO_MUCH_ACC         -2
+#define CV_ERR_FAILURE          -3
+#define CV_CONV_FAILURE         -4
+
+#define CV_LINIT_FAIL           -5
+#define CV_LSETUP_FAIL          -6
+#define CV_LSOLVE_FAIL          -7
+#define CV_RHSFUNC_FAIL         -8
+#define CV_FIRST_RHSFUNC_ERR    -9
+#define CV_REPTD_RHSFUNC_ERR    -10
+#define CV_UNREC_RHSFUNC_ERR    -11
+#define CV_RTFUNC_FAIL          -12
+
+#define CV_MEM_FAIL             -20
+#define CV_MEM_NULL             -21
+#define CV_ILL_INPUT            -22
+#define CV_NO_MALLOC            -23
+#define CV_BAD_K                -24
+#define CV_BAD_T                -25
+#define CV_BAD_DKY              -26
+#define CV_TOO_CLOSE            -27
+
+#define CV_NO_QUAD              -30
+#define CV_QRHSFUNC_FAIL        -31
+#define CV_FIRST_QRHSFUNC_ERR   -32
+#define CV_REPTD_QRHSFUNC_ERR   -33
+#define CV_UNREC_QRHSFUNC_ERR   -34
+
+#define CV_NO_SENS              -40
+#define CV_SRHSFUNC_FAIL        -41
+#define CV_FIRST_SRHSFUNC_ERR   -42
+#define CV_REPTD_SRHSFUNC_ERR   -43
+#define CV_UNREC_SRHSFUNC_ERR   -44
+
+#define CV_BAD_IS               -45
+
+#define CV_NO_QUADSENS          -50
+#define CV_QSRHSFUNC_FAIL       -51
+#define CV_FIRST_QSRHSFUNC_ERR  -52
+#define CV_REPTD_QSRHSFUNC_ERR  -53
+#define CV_UNREC_QSRHSFUNC_ERR  -54
+
+/* 
+ * ----------------------------------------
+ * CVODEA return flags
+ * ----------------------------------------
+ */
+
+#define CV_NO_ADJ              -101
+#define CV_NO_FWD              -102
+#define CV_NO_BCK              -103
+#define CV_BAD_TB0             -104
+#define CV_REIFWD_FAIL         -105
+#define CV_FWD_FAIL            -106
+#define CV_GETY_BADT           -107
+
+/*
+ * =================================================================
+ *
+ * FUNCTION TYPES
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVRhsFn
+ * -----------------------------------------------------------------
+ * The f function which defines the right hand side of the ODE
+ * system y' = f(t,y) must have type CVRhsFn.
+ * f takes as input the independent variable value t, and the
+ * dependent variable vector y.  It stores the result of f(t,y)
+ * in the vector ydot.  The y and ydot arguments are of type
+ * N_Vector.
+ * (Allocation of memory for ydot is handled within CVODES)
+ * The user_data parameter is the same as the user_data
+ * parameter set by the user through the CVodeSetUserData routine.
+ * This user-supplied pointer is passed to the user's f function
+ * every time it is called.
+ *
+ * A CVRhsFn should return 0 if successful, a negative value if
+ * an unrecoverable error occured, and a positive value if a 
+ * recoverable error (e.g. invalid y values) occured. 
+ * If an unrecoverable occured, the integration is halted. 
+ * If a recoverable error occured, then (in most cases) CVODES
+ * will try to correct and retry.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVRhsFn)(realtype t, N_Vector y,
+		       N_Vector ydot, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVRootFn
+ * -----------------------------------------------------------------
+ * A function g, which defines a set of functions g_i(t,y) whose
+ * roots are sought during the integration, must have type CVRootFn.
+ * The function g takes as input the independent variable value
+ * t, and the dependent variable vector y.  It stores the nrtfn
+ * values g_i(t,y) in the realtype array gout.
+ * (Allocation of memory for gout is handled within CVODE.)
+ * The user_data parameter is the same as that passed by the user
+ * to the CVodeSetUserData routine.  This user-supplied pointer is
+ * passed to the user's g function every time it is called.
+ *
+ * A CVRootFn should return 0 if successful or a non-zero value
+ * if an error occured (in which case the integration will be halted).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVRootFn)(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVEwtFn
+ * -----------------------------------------------------------------
+ * A function e, which sets the error weight vector ewt, must have
+ * type CVEwtFn.
+ * The function e takes as input the current dependent variable y.
+ * It must set the vector of error weights used in the WRMS norm:
+ * 
+ *   ||y||_WRMS = sqrt [ 1/N * sum ( ewt_i * y_i)^2 ]
+ *
+ * Typically, the vector ewt has components:
+ * 
+ *   ewt_i = 1 / (reltol * |y_i| + abstol_i)
+ *
+ * The user_data parameter is the same as that passed by the user
+ * to the CVodeSetUserData routine.  This user-supplied pointer is
+ * passed to the user's e function every time it is called.
+ * A CVEwtFn e must return 0 if the error weight vector has been
+ * successfuly set and a non-zero value otherwise.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVEwtFn)(N_Vector y, N_Vector ewt, void *user_data);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVErrHandlerFn
+ * -----------------------------------------------------------------
+ * A function eh, which handles error messages, must have type
+ * CVErrHandlerFn.
+ * The function eh takes as input the error code, the name of the
+ * module reporting the error, the error message, and a pointer to
+ * user data, the same as that passed to CVodeSetUserData.
+ * 
+ * All error codes are negative, except CV_WARNING which indicates 
+ * a warning (the solver continues).
+ *
+ * A CVErrHandlerFn has no return value.
+ * -----------------------------------------------------------------
+ */
+  
+typedef void (*CVErrHandlerFn)(int error_code, 
+			       const char *module, const char *function, 
+			       char *msg, void *user_data); 
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVQuadRhsFn
+ * -----------------------------------------------------------------
+ * The fQ function which defines the right hand side of the
+ * quadrature equations yQ' = fQ(t,y) must have type CVQuadRhsFn.
+ * fQ takes as input the value of the independent variable t,
+ * the vector of states y and must store the result of fQ in
+ * yQdot. (Allocation of memory for yQdot is handled by CVODES).
+ * The user_data parameter is the same as the user_data parameter
+ * set by the user through the CVodeSetUserData routine and is
+ * passed to the fQ function every time it is called.
+ *
+ * If the quadrature RHS also depends on the sensitivity variables,
+ * i.e., yQ' = fQs(t,y,yS), then fQ must be of type CVodeQuadRhsFnS.
+ *
+ * A CVQuadRhsFn or CVodeQuadRhsFnS should return 0 if successful,
+ * a negative value if an unrecoverable error occured, and a positive
+ * value if a recoverable error (e.g. invalid y values) occured. 
+ * If an unrecoverable occured, the integration is halted. 
+ * If a recoverable error occured, then (in most cases) CVODES
+ * will try to correct and retry.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVQuadRhsFn)(realtype t, N_Vector y,
+                           N_Vector yQdot,
+			   void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSensRhsFn
+ * -----------------------------------------------------------------
+ * The fS function which defines the right hand side of the
+ * sensitivity ODE systems s' = f_y * s + f_p must have type
+ * CVSensRhsFn.
+ * fS takes as input the number of sensitivities Ns, the
+ * independent variable value t, the states y and the
+ * corresponding value of f(t,y) in ydot, and the dependent
+ * sensitivity vectors yS. It stores the result of fS in ySdot.
+ * (Allocation of memory for ySdot is handled within CVODES)
+ * The user_data parameter is the same as the user_data parameter
+ * set by the user through the CVodeSetUserData routine and is
+ * passed to the fS function every time it is called.
+ *
+ * A CVSensRhsFn should return 0 if successful, a negative value if
+ * an unrecoverable error occured, and a positive value if a 
+ * recoverable error (e.g. invalid y or yS values) occured. 
+ * If an unrecoverable occured, the integration is halted. 
+ * If a recoverable error occured, then (in most cases) CVODES
+ * will try to correct and retry.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSensRhsFn)(int Ns, realtype t,
+			   N_Vector y, N_Vector ydot,
+			   N_Vector *yS, N_Vector *ySdot,
+			   void *user_data,
+			   N_Vector tmp1, N_Vector tmp2);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSensRhs1Fn
+ * -----------------------------------------------------------------
+ * The fS1 function which defines the right hand side of the i-th
+ * sensitivity ODE system s_i' = f_y * s_i + f_p must have type
+ * CVSensRhs1Fn.
+ * fS1 takes as input the number of sensitivities Ns, the current
+ * sensitivity iS, the independent variable value t, the states y
+ * and the corresponding value of f(t,y) in ydot, and the
+ * dependent sensitivity vector yS. It stores the result of fS in
+ * ySdot.
+ * (Allocation of memory for ySdot is handled within CVODES)
+ * The user_data parameter is the same as the user_data parameter
+ * set by the user through the CVodeSetUserData routine and is
+ * passed to the fS1 function every time it is called.
+ *
+ * A CVSensRhs1Fn should return 0 if successful, a negative value if
+ * an unrecoverable error occured, and a positive value if a 
+ * recoverable error (e.g. invalid y or yS values) occured. 
+ * If an unrecoverable occured, the integration is halted. 
+ * If a recoverable error occured, then (in most cases) CVODES
+ * will try to correct and retry.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSensRhs1Fn)(int Ns, realtype t,
+			    N_Vector y, N_Vector ydot,
+			    int iS, N_Vector yS, N_Vector ySdot,
+			    void *user_data,
+			    N_Vector tmp1, N_Vector tmp2);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVQuadSensRhsFn
+ * -----------------------------------------------------------------
+ * The fQS function which defines the right hand side of the
+ * sensitivity ODE systems for quadratures, yQS' = fQ_y * yS + fQ_p
+ * must have type CVQuadSensRhsFn.
+ *
+ * fQS takes as input the number of sensitivities Ns (the same as
+ * that passed to CVodeQuadSensInit), the independent variable 
+ * value t, the states y and the dependent sensitivity vectors yS,
+ * as well as the current value of the quadrature RHS yQdot.
+ * It stores the result of fQS in yQSdot.
+ * (Allocation of memory for yQSdot is handled within CVODES)
+ *
+ * A CVQuadSensRhsFn should return 0 if successful, a negative
+ * value if an unrecoverable error occured, and a positive value
+ * if a recoverable error (e.g. invalid y or yS values) occured. 
+ * If an unrecoverable occured, the integration is halted. 
+ * If a recoverable error occured, then (in most cases) CVODES
+ * will try to correct and retry.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVQuadSensRhsFn)(int Ns, realtype t,
+                               N_Vector y, N_Vector *yS, 
+                               N_Vector yQdot, N_Vector *yQSdot,
+                               void *user_data,
+                               N_Vector tmp, N_Vector tmpQ);
+
+/*
+ * -----------------------------------------------------------------
+ * CVRhsFnB and CVRhsFnBS
+ *    The fB function which defines the right hand side of the
+ *    ODE systems to be integrated backwards must have type CVRhsFnB.
+ *    If the backward problem depends on forward sensitivities, its
+ *    RHS function must have type CVRhsFnBS.
+ * -----------------------------------------------------------------
+ * CVQuadRhsFnB and CVQuadRhsFnBS
+ *    The fQB function which defines the quadratures to be integrated
+ *    backwards must have type CVQuadRhsFnB.
+ *    If the backward problem depends on forward sensitivities, its
+ *    quadrature RHS function must have type CVQuadRhsFnBS.
+ * -----------------------------------------------------------------
+ */
+  
+typedef int (*CVRhsFnB)(realtype t, N_Vector y,
+			N_Vector yB, N_Vector yBdot,
+			void *user_dataB);
+
+typedef int (*CVRhsFnBS)(realtype t, N_Vector y, N_Vector *yS,
+                         N_Vector yB, N_Vector yBdot,
+                         void *user_dataB);
+
+  
+typedef int (*CVQuadRhsFnB)(realtype t, N_Vector y,
+			    N_Vector yB, N_Vector qBdot,
+			    void *user_dataB);
+
+typedef int (*CVQuadRhsFnBS)(realtype t, N_Vector y, N_Vector *yS,
+                             N_Vector yB, N_Vector qBdot,
+                             void *user_dataB);
+
+
+/*
+ * =================================================================
+ *
+ * INITIALIZATION AND DEALLOCATION FUNCTIONS FOR FORWARD PROBLEMS 
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeCreate
+ * -----------------------------------------------------------------
+ * CVodeCreate creates an internal memory block for a problem to
+ * be solved by CVODES.
+ *
+ * lmm  is the type of linear multistep method to be used.
+ *      The legal values are CV_ADAMS and CV_BDF (see previous
+ *      description).
+ *
+ * iter  is the type of iteration used to solve the nonlinear
+ *       system that arises during each internal time step.
+ *       The legal values are CV_FUNCTIONAL and CV_NEWTON.
+ *
+ * If successful, CVodeCreate returns a pointer to initialized
+ * problem memory. This pointer should be passed to CVodeInit.
+ * If an initialization error occurs, CVodeCreate prints an error
+ * message to standard err and returns NULL.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void *CVodeCreate(int lmm, int iter);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : CVodeInit and CVodeReInit
+ * -----------------------------------------------------------------
+ * CVodeInit allocates and initializes memory for a problem to
+ * to be solved by CVODE.
+ *
+ * CVodeReInit re-initializes CVode for the solution of a problem,
+ * where a prior call to CVodeInit has been made with the same
+ * problem size N. CVodeReInit performs the same input checking
+ * and initializations that CVodeInit does.
+ * But it does no memory allocation, assuming that the existing
+ * internal memory is sufficient for the new problem.
+ *
+ * The use of CVodeReInit requires that the maximum method order,
+ * maxord, is no larger for the new problem than for the problem
+ * specified in the last call to CVodeInit.  This condition is
+ * automatically fulfilled if the multistep method parameter lmm
+ * is unchanged (or changed from CV_ADAMS to CV_BDF) and the default
+ * value for maxord is specified.
+ *
+ * cvode_mem is pointer to CVODE memory returned by CVodeCreate.
+ *
+ * f       is the name of the C function defining the right-hand
+ *         side function in y' = f(t,y).
+ *
+ * t0      is the initial value of t.
+ *
+ * y0      is the initial condition vector y(t0).
+ *
+ * Return flag:
+ *  CV_SUCCESS   if successful
+ *  CV_MEM_NULL  if the cvode memory was NULL
+ *  CV_MEM_FAIL  if a memory allocation failed
+ *  CV_NO_MALLOC if cvode_mem has not been allocated
+ *               (i.e., CVodeInit has not been called).
+ *  CV_ILL_INPUT if an argument has an illegal value.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeInit(void *cvode_mem, CVRhsFn f, realtype t0, N_Vector y0);
+SUNDIALS_EXPORT int CVodeReInit(void *cvode_mem, realtype t0, N_Vector y0);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : CVodeSStolerances
+ *             CVodeSVtolerances
+ *             CVodeWFtolerances
+ * -----------------------------------------------------------------
+ *
+ * These functions specify the integration tolerances. One of them
+ * MUST be called before the first call to CVode.
+ *
+ * CVodeSStolerances specifies scalar relative and absolute tolerances.
+ * CVodeSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component).
+ * CVodeWFtolerances specifies a user-provides function (of type CVEwtFn)
+ *   which will be called to set the error weight vector.
+ *
+ * The tolerances reltol and abstol define a vector of error weights,
+ * ewt, with components
+ *   ewt[i] = 1/(reltol*abs(y[i]) + abstol)      (in the SS case), or
+ *   ewt[i] = 1/(reltol*abs(y[i]) + abstol[i])   (in the SV case).
+ * This vector is used in all error and convergence tests, which
+ * use a weighted RMS norm on all error-like vectors v:
+ *    WRMSnorm(v) = sqrt( (1/N) sum(i=1..N) (v[i]*ewt[i])^2 ),
+ * where N is the problem dimension.
+ *
+ * The return value of these functions is equal to CV_SUCCESS = 0 if
+ * there were no errors; otherwise it is a negative int equal to:
+ *   CV_MEM_NULL      indicating cvode_mem was NULL (i.e.,
+ *                    CVodeCreate has not been called).
+ *   CV_NO_MALLOC     indicating that cvode_mem has not been
+ *                    allocated (i.e., CVodeInit has not been
+ *                    called).
+ *   CV_ILL_INPUT     indicating an input argument was illegal
+ *                    (e.g. a negative tolerance)
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSStolerances(void *cvode_mem, realtype reltol, realtype abstol);
+SUNDIALS_EXPORT int CVodeSVtolerances(void *cvode_mem, realtype reltol, N_Vector abstol);
+SUNDIALS_EXPORT int CVodeWFtolerances(void *cvode_mem, CVEwtFn efun);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeQuadInit and CVodeQuadReInit
+ * -----------------------------------------------------------------
+ * CVodeQuadInit allocates and initializes memory related to
+ * quadrature integration.
+ *
+ * CVodeQuadReInit re-initializes CVODES's quadrature related
+ * memory for a problem, assuming it has already been allocated
+ * in prior calls to CVodeInit and CVodeQuadInit.
+ * The number of quadratures Nq is assumed to be unchanged
+ * since the previous call to CVodeQuadInit.
+ *
+ * cvode_mem is a pointer to CVODES memory returned by CVodeCreate
+ *
+ * fQ    is the user-provided integrand routine.
+ *
+ * yQ0   is an N_Vector with initial values for quadratures
+ *       (typically yQ0 has all zero components).
+ *
+ * Return values:
+ *  CV_SUCCESS if successful
+ *  CV_MEM_NULL if the cvode memory was NULL
+ *  CV_MEM_FAIL if a memory allocation failed
+ *  CV_NO_QUAD  if quadratures were not initialized
+ *              (i.e. CVodeQuadInit has not been called)
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeQuadInit(void *cvode_mem, CVQuadRhsFn fQ, N_Vector yQ0);
+SUNDIALS_EXPORT int CVodeQuadReInit(void *cvode_mem, N_Vector yQ0);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : CVodeQuadSStolerances
+ *             CVodeQuadSVtolerances
+ * -----------------------------------------------------------------
+ *
+ * These functions specify the integration tolerances for quadrature
+ * variables. One of them MUST be called before the first call to
+ * CVode IF error control on the quadrature variables is enabled
+ * (see CVodeSetQuadErrCon).
+ *
+ * CVodeSStolerances specifies scalar relative and absolute tolerances.
+ * CVodeSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component).
+ *
+ * Return values:
+ *  CV_SUCCESS    if successful
+ *  CV_MEM_NULL   if the cvode memory was NULL
+ *  CV_NO_QUAD    if quadratures were not initialized
+ *  CV_ILL_INPUT  if an input argument was illegal
+ *                (e.g. a negative tolerance)
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeQuadSStolerances(void *cvode_mem, realtype reltolQ, realtype abstolQ);
+SUNDIALS_EXPORT int CVodeQuadSVtolerances(void *cvode_mem, realtype reltolQ, N_Vector abstolQ);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeSensInit, CVSensInit1, and CVodeSensReInit
+ * -----------------------------------------------------------------
+ * CVodeSensInit and CVSensInit1 allocate and initialize memory
+ * related to sensitivity computations. They only differ in the 
+ * type of the sensitivity RHS function: CVodeSensInit specifies
+ * fS of type CVSensRhsFn (i.e. a function that evaluates all
+ * sensitivity RHS simultaneously), while CVodeSensInit1 specifies
+ * fS of type CVSensRhs1Fn (i.e. a function that evaluates one
+ * sensitivity RHS at a time). Recall that ism=CV_STAGGERED1 is 
+ * compatible ONLY with a CVSensRhs1Fn. As such, this value for
+ * ism cannot be passed to CVodeSensInit.
+ *
+ * CVodeSensReInit re-initializes CVODES's sensitivity related
+ * memory for a problem, assuming it has already been allocated
+ * in prior calls to CVodeInit and CVodeSensInit.
+ * The number of sensitivities Ns is assumed to be unchanged
+ * since the previous call to CVodeSensInit.
+ * If any error occurs during initialization, it is reported to
+ * the file whose file pointer is errfp.
+ * CVodeSensReInit potentially does some minimal memory allocation
+ * (for the sensitivity absolute tolerance and for arrays of
+ * counters used by the CV_STAGGERED1 method).
+
+ * cvode_mem is pointer to CVODES memory returned by CVodeCreate
+ *
+ * Ns        is the number of sensitivities to be computed.
+ *
+ * ism       is the type of corrector used in sensitivity
+ *           analysis. The legal values are: CV_SIMULTANEOUS,
+ *           CV_STAGGERED, and CV_STAGGERED1.
+ *
+ * fS        is the sensitivity righ-hand side function
+ *           (pass NULL to use the internal DQ approximation)
+ *
+ * yS0       is the array of initial condition vectors for
+ *           sensitivity variables.
+ *
+ * Return values:
+ *   CV_SUCCESS
+ *   CV_MEM_NULL
+ *   CV_ILL_INPUT
+ *   CV_MEM_FAIL
+ *   CV_NO_SENS
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSensInit(void *cvode_mem, int Ns, int ism,
+                                  CVSensRhsFn fS, N_Vector *yS0);
+SUNDIALS_EXPORT int CVodeSensInit1(void *cvode_mem, int Ns, int ism,
+                                   CVSensRhs1Fn fS1, N_Vector *yS0);
+SUNDIALS_EXPORT int CVodeSensReInit(void *cvode_mem, int ism, N_Vector *yS0);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : CVodeSensSStolerances
+ *             CVodeSensSVtolerances
+ *             CVodeSensEEtolerances
+ * -----------------------------------------------------------------
+ *
+ * These functions specify the integration tolerances for sensitivity
+ * variables. One of them MUST be called before the first call to CVode.
+ *
+ * CVodeSensSStolerances specifies scalar relative and absolute tolerances.
+ * CVodeSensSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance for each sensitivity vector (a potentially different
+ *   absolute tolerance for each vector component).
+ * CVodeSensEEtolerances specifies that tolerances for sensitivity variables
+ *   should be estimated from those provided for the state variables.
+ *
+ * The return value is equal to CV_SUCCESS = 0 if there were no
+ * errors; otherwise it is a negative int equal to:
+ *   CV_MEM_NULL  indicating cvode_mem was NULL, or
+ *   CV_NO_SENS   indicating there was not a prior call to
+ *                CVodeSensInit.
+ *   CV_ILL_INPUT indicating an input argument was illegal
+ *                (e.g. negative tolerances)
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSensSStolerances(void *cvode_mem, realtype reltolS, realtype *abstolS);
+SUNDIALS_EXPORT int CVodeSensSVtolerances(void *cvode_mem, realtype reltolS, N_Vector *abstolS);
+SUNDIALS_EXPORT int CVodeSensEEtolerances(void *cvode_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeQuadSensInit and CVodeQuadSensReInit
+ * -----------------------------------------------------------------
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeQuadSensInit(void *cvode_mem, CVQuadSensRhsFn fQS, N_Vector *yQS0);
+SUNDIALS_EXPORT int CVodeQuadSensReInit(void *cvode_mem, N_Vector *yQS0);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : CVodeQuadSensSStolerances
+ *             CVodeQuadSensSVtolerances
+ *             CVodeQuadSensEEtolerances
+ * -----------------------------------------------------------------
+ *
+ * These functions specify the integration tolerances for quadrature
+ * sensitivity variables. One of them MUST be called before the first
+ * call to CVode IF these variables are included in the error test.
+ *
+ * CVodeQuadSensSStolerances specifies scalar relative and absolute tolerances.
+ * CVodeQuadSensSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance for each quadrature sensitivity vector (a potentially
+ *   different absolute tolerance for each vector component).
+ * CVodeQuadSensEEtolerances specifies that tolerances for sensitivity variables
+ *   should be estimated from those provided for the quadrature variables.
+ *   In this case, tolerances for the quadrature variables must be
+ *   specified through a call to one of CVodeQuad**tolerances.
+ *
+ * The return value is equal to CV_SUCCESS = 0 if there were no
+ * errors; otherwise it is a negative int equal to:
+ *   CV_MEM_NULL     if cvode_mem was NULL, or
+ *   CV_NO_QuadSENS  if there was not a prior call to
+ *                   CVodeQuadSensInit.
+ *   CV_ILL_INPUT    if an input argument was illegal
+ *                   (e.g. negative tolerances)
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeQuadSensSStolerances(void *cvode_mem, realtype reltolQS, realtype *abstolQS);
+SUNDIALS_EXPORT int CVodeQuadSensSVtolerances(void *cvode_mem, realtype reltolQS, N_Vector *abstolQS);
+SUNDIALS_EXPORT int CVodeQuadSensEEtolerances(void *cvode_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeRootInit
+ * -----------------------------------------------------------------
+ * CVodeRootInit initializes a rootfinding problem to be solved
+ * during the integration of the ODE system.  It must be called
+ * after CVodeCreate, and before CVode.  The arguments are:
+ *
+ * cvode_mem = pointer to CVODE memory returned by CVodeCreate.
+ *
+ * nrtfn     = number of functions g_i, an int >= 0.
+ *
+ * g         = name of user-supplied function, of type CVRootFn,
+ *             defining the functions g_i whose roots are sought.
+ *
+ * If a new problem is to be solved with a call to CVodeReInit,
+ * where the new problem has no root functions but the prior one
+ * did, then call CVodeRootInit with nrtfn = 0.
+ *
+ * The return value of CVodeRootInit is CV_SUCCESS = 0 if there were
+ * no errors; otherwise it is a negative int equal to:
+ *   CV_MEM_NULL    indicating cvode_mem was NULL, or
+ *   CV_MEM_FAIL    indicating a memory allocation failed.
+ *                  (including an attempt to increase maxord).
+ *   CV_ILL_INPUT   indicating nrtfn > 0 but g = NULL.
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeRootInit(void *cvode_mem, int nrtfn, CVRootFn g);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeFree
+ * -----------------------------------------------------------------
+ * CVodeFree frees the problem memory cvode_mem allocated by
+ * CVodeInit.  Its only argument is the pointer cvode_mem
+ * returned by CVodeCreate.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void CVodeFree(void **cvode_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeQuadFree
+ * -----------------------------------------------------------------
+ * CVodeQuadFree frees the problem memory in cvode_mem allocated
+ * for quadrature integration. Its only argument is the pointer
+ * cvode_mem returned by CVodeCreate.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void CVodeQuadFree(void *cvode_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeSensFree
+ * -----------------------------------------------------------------
+ * CVodeSensFree frees the problem memory in cvode_mem allocated
+ * for sensitivity analysis. Its only argument is the pointer
+ * cvode_mem returned by CVodeCreate.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void CVodeSensFree(void *cvode_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeQuadSensFree
+ * -----------------------------------------------------------------
+ * CVodeQuadSensFree frees the problem memory in cvode_mem allocated
+ * for quadrature sensitivity analysis. Its only argument is the
+ * pointer cvode_mem returned by CVodeCreate.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void CVodeQuadSensFree(void *cvode_mem);
+
+/*
+ * =================================================================
+ *
+ * OPTIONAL INPUT FUNCTIONS FOR FORWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Integrator optional input specification functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to set optional inputs
+ * to values other than the defaults given below:
+ *
+ * Function                |  Optional input / [ default value ]
+ * -----------------------------------------------------------------
+ *                         |
+ * CVodeSetErrHandlerFn    | user-provided ErrHandler function.
+ *                         | [internal]
+ *                         |
+ * CVodeSetErrFile         | the file pointer for an error file
+ *                         | where all CVODE warning and error
+ *                         | messages will be written if the default
+ *                         | internal error handling function is used. 
+ *                         | This parameter can be stdout (standard 
+ *                         | output), stderr (standard error), or a 
+ *                         | file pointer (corresponding to a user 
+ *                         | error file opened for writing) returned 
+ *                         | by fopen.
+ *                         | If not called, then all messages will
+ *                         | be written to the standard error stream.
+ *                         | [stderr]
+ *                         |
+ * CVodeSetUserData        | a pointer to user data that will be
+ *                         | passed to the user's f function every
+ *                         | time f is called.
+ *                         | [NULL]
+ *                         |
+ * CVodeSetMaxOrd          | maximum lmm order to be used by the
+ *                         | solver.
+ *                         | [12 for Adams , 5 for BDF]
+ *                         |
+ * CVodeSetMaxNumSteps     | maximum number of internal steps to be
+ *                         | taken by the solver in its attempt to
+ *                         | reach tout.
+ *                         | [500]
+ *                         |
+ * CVodeSetMaxHnilWarns    | maximum number of warning messages
+ *                         | issued by the solver that t+h==t on the
+ *                         | next internal step. A value of -1 means
+ *                         | no such messages are issued.
+ *                         | [10]
+ *                         |
+ * CVodeSetStabLimDet      | flag to turn on/off stability limit
+ *                         | detection (TRUE = on, FALSE = off).
+ *                         | When BDF is used and order is 3 or
+ *                         | greater, CVsldet is called to detect
+ *                         | stability limit.  If limit is detected,
+ *                         | the order is reduced.
+ *                         | [FALSE]
+ *                         |
+ * CVodeSetInitStep        | initial step size.
+ *                         | [estimated by CVODES]
+ *                         |
+ * CVodeSetMinStep         | minimum absolute value of step size
+ *                         | allowed.
+ *                         | [0.0]
+ *                         |
+ * CVodeSetMaxStep         | maximum absolute value of step size
+ *                         | allowed.
+ *                         | [infinity]
+ *                         |
+ * CVodeSetStopTime        | the independent variable value past
+ *                         | which the solution is not to proceed.
+ *                         | [infinity]
+ *                         |
+ * CVodeSetMaxErrTestFails | Maximum number of error test failures
+ *                         | in attempting one step.
+ *                         | [7]
+ *                         |
+ * CVodeSetMaxNonlinIters  | Maximum number of nonlinear solver
+ *                         | iterations at one solution.
+ *                         | [3]
+ *                         |
+ * CVodeSetMaxConvFails    | Maximum number of allowable conv.
+ *                         | failures in attempting one step.
+ *                         | [10]
+ *                         |
+ * CVodeSetNonlinConvCoef  | Coeficient in the nonlinear conv.
+ *                         | test.
+ *                         | [0.1]
+ *                         |
+ * -----------------------------------------------------------------
+ *                         |
+ * CVodeSetIterType        | Changes the current nonlinear iteration
+ *                         | type.
+ *                         | [set by CVodecreate]
+ *                         |
+ * -----------------------------------------------------------------
+ *                            |
+ * CVodeSetRootDirection      | Specifies the direction of zero
+ *                            | crossings to be monitored
+ *                            | [both directions]
+ *                            |
+ * CVodeSetNoInactiveRootWarn | disable warning about possible
+ *                            | g==0 at beginning of integration
+ *                            | 
+ * -----------------------------------------------------------------
+ * Return flag:
+ *   CV_SUCCESS   if successful
+ *   CV_MEM_NULL  if the cvode memory is NULL
+ *   CV_ILL_INPUT if an argument has an illegal value
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSetErrHandlerFn(void *cvode_mem, CVErrHandlerFn ehfun, void *eh_data);
+SUNDIALS_EXPORT int CVodeSetErrFile(void *cvode_mem, FILE *errfp);
+SUNDIALS_EXPORT int CVodeSetUserData(void *cvode_mem, void *user_data);
+SUNDIALS_EXPORT int CVodeSetMaxOrd(void *cvode_mem, int maxord);
+SUNDIALS_EXPORT int CVodeSetMaxNumSteps(void *cvode_mem, long int mxsteps);
+SUNDIALS_EXPORT int CVodeSetMaxHnilWarns(void *cvode_mem, int mxhnil);
+SUNDIALS_EXPORT int CVodeSetStabLimDet(void *cvode_mem, booleantype stldet);
+SUNDIALS_EXPORT int CVodeSetInitStep(void *cvode_mem, realtype hin);
+SUNDIALS_EXPORT int CVodeSetMinStep(void *cvode_mem, realtype hmin);
+SUNDIALS_EXPORT int CVodeSetMaxStep(void *cvode_mem, realtype hmax);
+SUNDIALS_EXPORT int CVodeSetStopTime(void *cvode_mem, realtype tstop);
+SUNDIALS_EXPORT int CVodeSetMaxErrTestFails(void *cvode_mem, int maxnef);
+SUNDIALS_EXPORT int CVodeSetMaxNonlinIters(void *cvode_mem, int maxcor);
+SUNDIALS_EXPORT int CVodeSetMaxConvFails(void *cvode_mem, int maxncf);
+SUNDIALS_EXPORT int CVodeSetNonlinConvCoef(void *cvode_mem, realtype nlscoef);
+
+SUNDIALS_EXPORT int CVodeSetIterType(void *cvode_mem, int iter);
+
+SUNDIALS_EXPORT int CVodeSetRootDirection(void *cvode_mem, int *rootdir);
+SUNDIALS_EXPORT int CVodeSetNoInactiveRootWarn(void *cvode_mem);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Quadrature optional input specification functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to set optional inputs
+ * to values other than the defaults given below:
+ *
+ * Function             |  Optional input / [ default value ]
+ * --------------------------------------------------------------
+ *                      |
+ * CVodeSetQuadErrCon   | are quadrature variables considered in
+ *                      | the error control?
+ *                      | If yes, tolerances for quadrature are
+ *                      | required (see CVodeQuad**tolerances) 
+ *                      | [errconQ = FALSE]
+ *                      |
+ * -----------------------------------------------------------------
+ * If successful, these functions return CV_SUCCESS. If an argument
+ * has an illegal value, they return one of the error flags
+ * defined for the CVodeSet* routines.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSetQuadErrCon(void *cvode_mem, booleantype errconQ); 
+
+/*
+ * -----------------------------------------------------------------
+ * Forward sensitivity optional input specification functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to set optional inputs
+ * to other values than the defaults given below:
+ *
+ * Function                   |  Optional input / [ default value ]
+ * -----------------------------------------------------------------
+ *                            |
+ * CVodeSetSensDQMethod       | controls the selection of finite
+ *                            | difference schemes used in evaluating
+ *                            | the sensitivity right hand sides:
+ *                            | (centered vs. forward and 
+ *                            | simultaneous vs. separate)
+ *                            | [DQtype=CV_CENTERED]
+ *                            | [DQrhomax=0.0]
+ *                            |
+ * CVodeSetSensParams         | parameter information:
+ *                            | p: pointer to problem parameters
+ *                            | plist: list of parameters with respect
+ *                            |        to which sensitivities are to be
+ *                            |        computed.
+ *                            | pbar: order of magnitude info. 
+ *                            |       Typically, if p[plist[i]] is nonzero, 
+ *                            |       pbar[i]=p[plist[i]].
+ *                            | [p=NULL]
+ *                            | [plist=NULL]
+ *                            | [pbar=NULL]
+ *                            |
+ * CVodeSetSensErrCon         | are sensitivity variables considered in
+ *                            | the error control?
+ *                            | [FALSE]
+ *                            |
+ * CVodeSetSensMaxNonlinIters | Maximum number of nonlinear solver
+ *                            | iterations at one solution.
+ *                            | [3]
+ *                            |
+ * -----------------------------------------------------------------
+ * The return values are the same as for CVodeSet*
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSetSensDQMethod(void *cvode_mem, int DQtype, realtype DQrhomax);
+SUNDIALS_EXPORT int CVodeSetSensErrCon(void *cvode_mem, booleantype errconS);
+SUNDIALS_EXPORT int CVodeSetSensMaxNonlinIters(void *cvode_mem, int maxcorS);
+SUNDIALS_EXPORT int CVodeSetSensParams(void *cvode_mem, realtype *p, realtype *pbar, int *plist);
+
+/*
+ * -----------------------------------------------------------------
+ * Quadrature sensitivity optional input specification functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to set optional inputs
+ * to values other than the defaults given below:
+ *
+ * Function               |  Optional input / [ default value ]
+ * --------------------------------------------------------------
+ *                        |
+ * CVodeSetQuadSensErrCon | are quadrature sensitivity variables
+ *                        | considered in the error control?
+ *                        | If yes, tolerances for quadrature
+ *                        | sensitivity variables are required.
+ *                        | [errconQS = FALSE]
+ *                        |
+ * -----------------------------------------------------------------
+ * If successful, these functions return CV_SUCCESS. If an argument
+ * has an illegal value, they return one of the error flags
+ * defined for the CVodeSet* routines.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSetQuadSensErrCon(void *cvode_mem, booleantype errconQS); 
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeSensToggleOff
+ * -----------------------------------------------------------------
+ * CVodeSensToggleOff deactivates sensitivity calculations.
+ * It does NOT deallocate sensitivity-related memory so that 
+ * sensitivity computations can be later toggled ON (through
+ * CVodeSensReInit).
+ * 
+ * The return value is equal to CV_SUCCESS = 0 if there were no
+ * errors or CV_MEM_NULL if cvode_mem was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSensToggleOff(void *cvode_mem);
+
+
+/*
+ * =================================================================
+ *
+ * MAIN SOLVER FUNCTION FOR FORWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVode
+ * -----------------------------------------------------------------
+ * CVode integrates the ODE over an interval in t.
+ * If itask is CV_NORMAL, then the solver integrates from its
+ * current internal t value to a point at or beyond tout, then
+ * interpolates to t = tout and returns y(tout) in the user-
+ * allocated vector yout. If itask is CV_ONE_STEP, then the solver
+ * takes one internal time step and returns in yout the value of
+ * y at the new internal time. In this case, tout is used only
+ * during the first call to CVode to determine the direction of
+ * integration and the rough scale of the problem. If tstop is
+ * enabled (through a call to CVodeSetStopTime), then CVode returns
+ * the solution at tstop. Once the integrator returns at a tstop
+ * time, any future testing for tstop is disabled (and can be 
+ * reenabled only though a new call to CVodeSetStopTime).
+ * The time reached by the solver is placed in (*tret). The
+ * user is responsible for allocating the memory for this value.
+ *
+ * cvode_mem is the pointer to CVODES memory returned by
+ *           CVodeCreate.
+ *
+ * tout  is the next time at which a computed solution is desired.
+ *
+ * yout  is the computed solution vector. In CV_NORMAL mode with no
+ *       errors and no roots found, yout=y(tout).
+ *
+ * tret  is a pointer to a real location. CVode sets (*tret) to
+ *       the time reached by the solver and returns yout=y(*tret).
+ *
+ * itask is CV_NORMAL or CV_ONE_STEP. These two modes are described above.
+ *
+ * Here is a brief description of each return value:
+ *
+ * CV_SUCCESS:     CVode succeeded and no roots were found.
+ *
+ * CV_ROOT_RETURN: CVode succeeded, and found one or more roots.
+ *                 If nrtfn > 1, call CVodeGetRootInfo to see
+ *                 which g_i were found to have a root at (*tret).
+ *
+ * CV_TSTOP_RETURN: CVode succeded and returned at tstop.
+ *
+ * CV_MEM_NULL:    The cvode_mem argument was NULL.
+ *
+ * CV_NO_MALLOC:   cvode_mem was not allocated.
+ *
+ * CV_ILL_INPUT:   One of the inputs to CVode is illegal. This
+ *                 includes the situation when a component of the
+ *                 error weight vectors becomes < 0 during
+ *                 internal time-stepping. The ILL_INPUT flag
+ *                 will also be returned if the linear solver
+ *                 routine CV--- (called by the user after
+ *                 calling CVodeCreate) failed to set one of the
+ *                 linear solver-related fields in cvode_mem or
+ *                 if the linear solver's init routine failed. In
+ *                 any case, the user should see the printed
+ *                 error message for more details.
+ *
+ * CV_TOO_MUCH_WORK: The solver took mxstep internal steps but
+ *                 could not reach tout. The default value for
+ *                 mxstep is MXSTEP_DEFAULT = 500.
+ *
+ * CV_TOO_MUCH_ACC: The solver could not satisfy the accuracy
+ *                 demanded by the user for some internal step.
+ *
+ * CV_ERR_FAILURE: Error test failures occurred too many times
+ *                 (= MXNEF = 7) during one internal time step or
+ *                 occurred with |h| = hmin.
+ *
+ * CV_CONV_FAILURE: Convergence test failures occurred too many
+ *                 times (= MXNCF = 10) during one internal time
+ *                 step or occurred with |h| = hmin.
+ *
+ * CV_LINIT_FAIL:  The linear solver's initialization function 
+ *                 failed.
+ *
+ * CV_LSETUP_FAIL: The linear solver's setup routine failed in an
+ *                 unrecoverable manner.
+ *
+ * CV_LSOLVE_FAIL: The linear solver's solve routine failed in an
+ *                 unrecoverable manner.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVode(void *cvode_mem, realtype tout, N_Vector yout,
+			  realtype *tret, int itask);
+
+
+/*
+ * =================================================================
+ *
+ * EXTRACTION AND DENSE OUTPUT FUNCTIONS FOR FORWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVodeGetDky
+ * -----------------------------------------------------------------
+ * CVodeGetDky computes the kth derivative of the y function at
+ * time t, where tn-hu <= t <= tn, tn denotes the current
+ * internal time reached, and hu is the last internal step size
+ * successfully used by the solver. The user may request
+ * k=0, 1, ..., qu, where qu is the current order. The
+ * derivative vector is returned in dky. This vector must be
+ * allocated by the caller. It is only legal to call this
+ * function after a successful return from CVode.
+ *
+ * cvode_mem is the pointer to CVODES memory returned by
+ *           CVodeCreate.
+ *
+ * t   is the time at which the kth derivative of y is evaluated.
+ *     The legal range for t is [tn-hu,tn] as described above.
+ *
+ * k   is the order of the derivative of y to be computed. The
+ *     legal range for k is [0,qu] as described above.
+ *
+ * dky is the output derivative vector [(D_k)y](t).
+ *
+ * The return values for CVodeGetDky are defined below.
+ * Here is a brief description of each return value:
+ *
+ * CV_SUCCESS: CVodeGetDky succeeded.
+ *
+ * CV_BAD_K : k is not in the range 0, 1, ..., qu.
+ *
+ * CV_BAD_T : t is not in the interval [tn-hu,tn].
+ *
+ * CV_BAD_DKY : The dky argument was NULL.
+ *
+ * CV_MEM_NULL : The cvode_mem argument was NULL.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetDky(void *cvode_mem, realtype t, int k, N_Vector dky);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Quadrature integration solution extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to obtain the quadrature
+ * variables after a successful integration step.
+ * If quadratures were not computed, they return CV_NO_QUAD.
+ *
+ * CVodeGetQuad returns the quadrature variables at the same time
+ *   as that at which CVode returned the solution.
+ *
+ * CVodeGetQuadDky returns the quadrature variables (or their 
+ *   derivatives up to the current method order) at any time within
+ *   the last integration step (dense output). See CVodeGetQuad for
+ *   more information.
+ *
+ * The output vectors yQout and dky must be allocated by the user.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetQuad(void *cvode_mem, realtype *tret, N_Vector yQout);
+
+SUNDIALS_EXPORT int CVodeGetQuadDky(void *cvode_mem, realtype t, int k, N_Vector dky);
+
+/*
+ * -----------------------------------------------------------------
+ * Forward sensitivity solution extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to obtain the sensitivity
+ * variables after a successful integration step.
+ * 
+ * CVodeGetSens and CVodeGetSens1 return all the sensitivity vectors
+ *   or only one of them, respectively, at the same time as that at 
+ *   which CVode returned the solution.
+ *   The array of output vectors or output vector ySout must be
+ *   allocated by the user.
+ *
+ * CVodeGetSensDky1 computes the kth derivative of the is-th
+ *   sensitivity (is=1, 2, ..., Ns) of the y function at time t,
+ *   where tn-hu <= t <= tn, tn denotes the current internal time
+ *   reached, and hu is the last internal step size successfully
+ *   used by the solver. The user may request k=0, 1, ..., qu,
+ *   where qu is the current order.
+ *   The is-th sensitivity derivative vector is returned in dky.
+ *   This vector must be allocated by the caller. It is only legal
+ *   to call this function after a successful return from CVode
+ *   with sensitivty computations enabled.
+ *   Arguments have the same meaning as in CVodeDky.
+ *
+ * CVodeGetSensDky computes the k-th derivative of all
+ *   sensitivities of the y function at time t. It repeatedly calls
+ *   CVodeGetSensDky. The argument dkyA must be a pointer to
+ *   N_Vector and must be allocated by the user to hold at least Ns
+ *   vectors.
+ *
+ * Return values are similar to those of CVodeDky. Additionally,
+ * CVodeSensDky can return CV_NO_SENS if sensitivities were
+ * not computed and CV_BAD_IS if is < 0 or is >= Ns.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetSens(void *cvode_mem, realtype *tret, N_Vector *ySout);
+SUNDIALS_EXPORT int CVodeGetSens1(void *cvode_mem, realtype *tret, int is, N_Vector ySout);
+
+SUNDIALS_EXPORT int CVodeGetSensDky(void *cvode_mem, realtype t, int k, N_Vector *dkyA);
+SUNDIALS_EXPORT int CVodeGetSensDky1(void *cvode_mem, realtype t, int k, int is, N_Vector dky);
+
+/*
+ * -----------------------------------------------------------------
+ * Quadrature sensitivity solution extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to obtain the quadrature
+ * sensitivity variables after a successful integration step.
+ * 
+ * CVodeGetQuadSens and CVodeGetQuadSens1 return all the quadrature
+ *   sensitivity vectors or only one of them, respectively, at the
+ *   same time as that at which CVode returned the solution.
+ *   The array of output vectors or output vector yQSout must be
+ *   allocated by the user.
+ *
+ * CVodeGetQuadSensDky1 computes the kth derivative of the is-th
+ *   quadrature sensitivity (is=1, 2, ..., Ns) at time t, where
+ *   tn-hu <= t <= tn, tn denotes the current internal time 
+ *   reached, and hu is the last internal step size successfully
+ *   used by the solver. The user may request  k=0, 1, ..., qu,
+ *   where qu is the current order.
+ *   The is-th sensitivity derivative vector is returned in dkyQS.
+ *   This vector must be allocated by the caller. It is only legal
+ *   to call this function after a successful return from CVode
+ *   with quadrature sensitivty computations enabled.
+ *   Arguments have the same meaning as in CVodeDky.
+ *
+ * CVodeGetQuadSensDky computes the k-th derivative of all
+ *   quadrature sensitivities at time t. It repeatedly calls
+ *   CVodeGetSensDky. The argument dkyQS_all must be a pointer to
+ *   N_Vector and must be allocated by the user to hold at least Ns
+ *   vectors.
+ *
+ * Return values are similar to those of CVodeDky. Additionally,
+ * CVodeQuadSensDky can return CV_NO_QUADSENS if quadrature
+ * sensitivities were not computed and CV_BAD_IS if is < 0 or is >= Ns.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetQuadSens(void *cvode_mem, realtype *tret, N_Vector *yQSout);
+SUNDIALS_EXPORT int CVodeGetQuadSens1(void *cvode_mem, realtype *tret, int is, N_Vector yQSout);
+
+SUNDIALS_EXPORT int CVodeGetQuadSensDky(void *cvode_mem, realtype t, int k, N_Vector *dkyQS_all);
+SUNDIALS_EXPORT int CVodeGetQuadSensDky1(void *cvode_mem, realtype t, int k, int is, N_Vector dkyQS);
+
+/*
+ * =================================================================
+ *
+ * OPTIONAL OUTPUT FUNCTIONS FOR FORWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Integrator optional output extraction functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistics related to the main integrator.
+ * -----------------------------------------------------------------
+ * CVodeGetWorkSpace returns the CVODES real and integer workspaces
+ * CVodeGetNumSteps returns the cumulative number of internal
+ *                  steps taken by the solver
+ * CVodeGetNumRhsEvals returns the number of calls to the user's
+ *                  f function
+ * CVodeGetNumLinSolvSetups returns the number of calls made to
+ *                  the linear solver's setup routine
+ * CVodeGetNumErrTestFails returns the number of local error test
+ *                  failures that have occured
+ * CVodeGetLastOrder returns the order used during the last
+ *                  internal step
+ * CVodeGetCurrentOrder returns the order to be used on the next
+ *                  internal step
+ * CVodeGetNumStabLimOrderReds returns the number of order
+ *                  reductions due to stability limit detection
+ * CVodeGetActualInitStep returns the actual initial step size
+ *                  used by CVODES
+ * CVodeGetLastStep returns the step size for the last internal
+ *                  step
+ * CVodeGetCurrentStep returns the step size to be attempted on
+ *                  the next internal step
+ * CVodeGetCurrentTime returns the current internal time reached
+ *                  by the solver
+ * CVodeGetTolScaleFactor returns a suggested factor by which the
+ *                  user's tolerances should be scaled when too
+ *                  much accuracy has been requested for some
+ *                  internal step
+ * CVodeGetErrWeights returns the current error weight vector.
+ *                    The user must allocate space for eweight.
+ * CVodeGetEstLocalErrors returns the vector of estimated local
+ *                  errors. The user must allocate space for ele.
+ * CVodeGetNumGEvals returns the number of calls to the user's
+ *                  g function (for rootfinding)
+ * CVodeGetRootInfo returns the indices for which g_i was found to 
+ *                  have a root. The user must allocate space for 
+ *                  rootsfound. For i = 0 ... nrtfn-1, 
+ *                  rootsfound[i] = 1 if g_i has a root, and = 0 if not.
+ *
+ * CVodeGet* return values:
+ *   CV_SUCCESS   if succesful
+ *   CV_MEM_NULL  if the cvode memory was NULL
+ *   CV_NO_SLDET  if stability limit was not turned on
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetWorkSpace(void *cvode_mem, long int *lenrw, long int *leniw);
+SUNDIALS_EXPORT int CVodeGetNumSteps(void *cvode_mem, long int *nsteps);
+SUNDIALS_EXPORT int CVodeGetNumRhsEvals(void *cvode_mem, long int *nfevals);
+SUNDIALS_EXPORT int CVodeGetNumLinSolvSetups(void *cvode_mem, long int *nlinsetups);
+SUNDIALS_EXPORT int CVodeGetNumErrTestFails(void *cvode_mem, long int *netfails);
+SUNDIALS_EXPORT int CVodeGetLastOrder(void *cvode_mem, int *qlast);
+SUNDIALS_EXPORT int CVodeGetCurrentOrder(void *cvode_mem, int *qcur);
+SUNDIALS_EXPORT int CVodeGetNumStabLimOrderReds(void *cvode_mem, long int *nslred);
+SUNDIALS_EXPORT int CVodeGetActualInitStep(void *cvode_mem, realtype *hinused);
+SUNDIALS_EXPORT int CVodeGetLastStep(void *cvode_mem, realtype *hlast);
+SUNDIALS_EXPORT int CVodeGetCurrentStep(void *cvode_mem, realtype *hcur);
+SUNDIALS_EXPORT int CVodeGetCurrentTime(void *cvode_mem, realtype *tcur);
+SUNDIALS_EXPORT int CVodeGetTolScaleFactor(void *cvode_mem, realtype *tolsfac);
+SUNDIALS_EXPORT int CVodeGetErrWeights(void *cvode_mem, N_Vector eweight);
+SUNDIALS_EXPORT int CVodeGetEstLocalErrors(void *cvode_mem, N_Vector ele);
+SUNDIALS_EXPORT int CVodeGetNumGEvals(void *cvode_mem, long int *ngevals);
+SUNDIALS_EXPORT int CVodeGetRootInfo(void *cvode_mem, int *rootsfound);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following functions provides the
+ * optional outputs in one group.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetIntegratorStats(void *cvode_mem, long int *nsteps,
+					    long int *nfevals, long int *nlinsetups,
+					    long int *netfails, int *qlast,
+					    int *qcur, realtype *hinused, realtype *hlast,
+					    realtype *hcur, realtype *tcur);
+
+/*
+ * -----------------------------------------------------------------
+ * Nonlinear solver optional output extraction functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistics related to the nonlinear solver.
+ * -----------------------------------------------------------------
+ * CVodeGetNumNonlinSolvIters returns the number of nonlinear
+ *                            solver iterations performed.
+ * CVodeGetNumNonlinSolvConvFails returns the number of nonlinear
+ *                                convergence failures.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetNumNonlinSolvIters(void *cvode_mem, long int *nniters);
+SUNDIALS_EXPORT int CVodeGetNumNonlinSolvConvFails(void *cvode_mem, long int *nncfails);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following function provides the
+ * nonlinear solver optional outputs in a group.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetNonlinSolvStats(void *cvode_mem, long int *nniters,
+					    long int *nncfails);
+
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a CVODES return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *CVodeGetReturnFlagName(long int flag);
+
+/*
+ * -----------------------------------------------------------------
+ * Quadrature integration optional output extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistics related to the integration of quadratures.
+ * -----------------------------------------------------------------
+ * CVodeGetQuadNumRhsEvals returns the number of calls to the
+ *                         user function fQ defining the right hand
+ *                         side of the quadrature variables.
+ * CVodeGetQuadNumErrTestFails returns the number of local error
+ *                             test failures for quadrature variables.
+ * CVodeGetQuadErrWeights returns the vector of error weights for
+ *                        the quadrature variables. The user must
+ *                        allocate space for ewtQ.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetQuadNumRhsEvals(void *cvode_mem, long int *nfQevals);
+SUNDIALS_EXPORT int CVodeGetQuadNumErrTestFails(void *cvode_mem, long int *nQetfails);
+SUNDIALS_EXPORT int CVodeGetQuadErrWeights(void *cvode_mem, N_Vector eQweight);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following function provides the above
+ * optional outputs in a group.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetQuadStats(void *cvode_mem, long int *nfQevals,
+				      long int *nQetfails);
+
+/*
+ * -----------------------------------------------------------------
+ * Forward sensitivity optional output extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistics related to the integration of sensitivities.
+ * -----------------------------------------------------------------
+ * CVodeGetSensNumRhsEvals returns the number of calls to the
+ *   sensitivity right hand side routine.
+ * CVodeGetNumRhsEvalsSens returns the number of calls to the
+ *   user f routine due to finite difference evaluations of the 
+ *   sensitivity equations.
+ * CVodeGetSensNumErrTestFails returns the number of local error
+ *   test failures for sensitivity variables.
+ * CVodeGetSensNumLinSolvSetups returns the number of calls made
+ *   to the linear solver's setup routine due to sensitivity computations.
+ * CVodeGetSensErrWeights returns the sensitivity error weight
+ *   vectors. The user need not allocate space for ewtS.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetSensNumRhsEvals(void *cvode_mem, long int *nfSevals);
+SUNDIALS_EXPORT int CVodeGetNumRhsEvalsSens(void *cvode_mem, long int *nfevalsS);
+SUNDIALS_EXPORT int CVodeGetSensNumErrTestFails(void *cvode_mem, long int *nSetfails);
+SUNDIALS_EXPORT int CVodeGetSensNumLinSolvSetups(void *cvode_mem, long int *nlinsetupsS);
+SUNDIALS_EXPORT int CVodeGetSensErrWeights(void *cvode_mem, N_Vector *eSweight);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following function provides the
+ * optional outputs in a group.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetSensStats(void *cvode_mem, long int *nfSevals, long int *nfevalsS,
+				      long int *nSetfails, long int *nlinsetupsS);
+
+/*
+ * -----------------------------------------------------------------
+ * Sensitivity nonlinear solver optional output extraction
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistics related to the sensitivity nonlinear solver.
+ * -----------------------------------------------------------------
+ * CVodeGetSensNumNonlinSolvIters returns the total number of
+ *   nonlinear iterations for sensitivity variables.
+ * CVodeGetSensNumNonlinSolvConvFails returns the total number
+ *   of nonlinear convergence failures for sensitivity variables
+ * CVodeGetStgrSensNumNonlinSolvIters returns a vector of Ns
+ *   nonlinear iteration counters for sensitivity variables in 
+ *   the CV_STAGGERED1 method.
+ * CVodeGetStgrSensNumNonlinSolvConvFails returns a vector of Ns
+ *   nonlinear solver convergence failure counters for sensitivity 
+ *   variables in the CV_STAGGERED1 method.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetSensNumNonlinSolvIters(void *cvode_mem, long int *nSniters);
+SUNDIALS_EXPORT int CVodeGetSensNumNonlinSolvConvFails(void *cvode_mem, long int *nSncfails);
+SUNDIALS_EXPORT int CVodeGetStgrSensNumNonlinSolvIters(void *cvode_mem, long int *nSTGR1niters);
+SUNDIALS_EXPORT int CVodeGetStgrSensNumNonlinSolvConvFails(void *cvode_mem, 
+							   long int *nSTGR1ncfails);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following function provides the      
+ * optional outputs in groups.                                    
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetSensNonlinSolvStats(void *cvode_mem, long int *nSniters,
+						long int *nSncfails);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Quadrature sensitivity optional output extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs and
+ * statistics related to the integration of quadrature sensitivitiess.
+ * -----------------------------------------------------------------
+ * CVodeGetQuadSensNumRhsEvals returns the number of calls to the
+ *       user function fQS defining the right hand side of the 
+ *       quadrature sensitivity equations.
+ * CVodeGetQuadSensNumErrTestFails returns the number of local error
+ *       test failures for quadrature sensitivity variables.
+ * CVodeGetQuadSensErrWeights returns the vector of error weights
+ *       for the quadrature sensitivity variables. The user must
+ *       allocate space for ewtQS.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetQuadSensNumRhsEvals(void *cvode_mem, long int *nfQSevals);
+SUNDIALS_EXPORT int CVodeGetQuadSensNumErrTestFails(void *cvode_mem, long int *nQSetfails);
+SUNDIALS_EXPORT int CVodeGetQuadSensErrWeights(void *cvode_mem, N_Vector *eQSweight);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following function provides the above
+ * optional outputs in a group.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetQuadSensStats(void *cvode_mem,
+                                          long int *nfQSevals,
+                                          long int *nQSetfails);
+
+
+/*
+ * =================================================================
+ *
+ * INITIALIZATION AND DEALLOCATION FUNCTIONS FOR BACKWARD PROBLEMS 
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeAdjInit
+ * -----------------------------------------------------------------
+ * CVodeAdjInit specifies some parameters for ASA, initializes ASA
+ * and allocates space for the adjoint memory structure.
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT int CVodeAdjInit(void *cvode_mem, long int steps, int interp);
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeAdjReInit
+ * -----------------------------------------------------------------
+ * CVodeAdjReInit reinitializes the CVODES memory structure for ASA,
+ * assuming that the number of steps between check points and the
+ * type of interpolation remained unchanged. The list of check points
+ * (and associated memory) is deleted. The list of backward problems
+ * is kept (however, new backward problems can be added to this list
+ * by calling CVodeCreateB). The CVODES memory for the forward and 
+ * backward problems can be reinitialized separately by calling 
+ * CVodeReInit and CVodeReInitB, respectively.
+ * NOTE: if a entirely new list of backward problems is desired,
+ *   then simply free the adjoint memory (by calling CVodeAdjFree)
+ *   and reinitialize ASA with CVodeAdjInit.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeAdjReInit(void *cvode_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeAdjFree
+ * -----------------------------------------------------------------
+ * CVodeAdjFree frees the memory allocated by CVodeAdjInit.
+ * It is typically called by CVodeFree.
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT void CVodeAdjFree(void *cvode_mem);
+  
+
+/*
+ * -----------------------------------------------------------------
+ * Interfaces to CVODES functions for setting-up backward problems.
+ * -----------------------------------------------------------------
+ * CVodeCreateB, 
+ *
+ * CVodeInitB, CVodeInitBS, CVodeReInitB
+ * 
+ * CVodeQuadInitB, CVodeQuadInitBS, CVodeQuadReInitB
+ * 
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeCreateB(void *cvode_mem, int lmmB, int iterB, int *which);
+
+SUNDIALS_EXPORT int CVodeInitB(void *cvode_mem, int which,
+                               CVRhsFnB fB,
+                               realtype tB0, N_Vector yB0);
+SUNDIALS_EXPORT int CVodeInitBS(void *cvode_mem, int which,
+                                CVRhsFnBS fBs,
+                                realtype tB0, N_Vector yB0);
+SUNDIALS_EXPORT int CVodeReInitB(void *cvode_mem, int which,
+				 realtype tB0, N_Vector yB0);
+
+SUNDIALS_EXPORT int CVodeSStolerancesB(void *cvode_mem, int which,
+                                       realtype reltolB, realtype abstolB);
+SUNDIALS_EXPORT int CVodeSVtolerancesB(void *cvode_mem, int which,
+                                       realtype reltolB, N_Vector abstolB);
+
+SUNDIALS_EXPORT int CVodeQuadInitB(void *cvode_mem, int which,
+                                     CVQuadRhsFnB fQB, N_Vector yQB0);
+SUNDIALS_EXPORT int CVodeQuadInitBS(void *cvode_mem, int which,
+                                      CVQuadRhsFnBS fQBs, N_Vector yQB0);
+SUNDIALS_EXPORT int CVodeQuadReInitB(void *cvode_mem, int which, N_Vector yQB0);
+
+SUNDIALS_EXPORT int CVodeQuadSStolerancesB(void *cvode_mem, int which,
+                                           realtype reltolQB, realtype abstolQB);
+SUNDIALS_EXPORT int CVodeQuadSVtolerancesB(void *cvode_mem, int which,
+                                           realtype reltolQB, N_Vector abstolQB);
+
+/*
+ * =================================================================
+ *
+ * MAIN SOLVER FUNCTIONS FOR FORWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeF
+ * -----------------------------------------------------------------
+ * CVodeF integrates towards tout and returns solution into yout.
+ * In the same time, it stores check point data every 'steps'.
+ *
+ * CVodeF can be called repeatedly by the user.
+ *
+ * ncheckPtr points to the number of check points stored so far.
+ *
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeF(void *cvode_mem, realtype tout, N_Vector yout,
+			   realtype *tret, int itask, int *ncheckPtr);
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeB
+ * -----------------------------------------------------------------
+ * CVodeB performs the integration of all backward problems specified
+ * through calls to CVodeCreateB through a sequence of forward-backward
+ * runs in between consecutive check points. CVodeB can be called 
+ * either in CV_NORMAL or CV_ONE_STEP mode. After a successful return
+ * from CVodeB, the solution and quadrature variables at the current
+ * return time for any given backward problem can be obtained by
+ * calling CVodeGetB and CVodeGetQuadB, respectively.
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT int CVodeB(void *cvode_mem, realtype tBout, int itaskB);
+
+/*
+ * =================================================================
+ *
+ * OPTIONAL INPUT FUNCTIONS FOR BACKWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeSetAdjNoSensi
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSetAdjNoSensi(void *cvode_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional input functions for backward problems
+ * -----------------------------------------------------------------
+ * These functions are just wrappers around the corresponding
+ * functions in cvodes.h, with some particularizations for the
+ * backward integration.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeSetIterTypeB(void *cvode_mem, int which, int iterB);
+SUNDIALS_EXPORT int CVodeSetUserDataB(void *cvode_mem, int which, void *user_dataB);
+SUNDIALS_EXPORT int CVodeSetMaxOrdB(void *cvode_mem, int which, int maxordB);
+SUNDIALS_EXPORT int CVodeSetMaxNumStepsB(void *cvode_mem, int which, long int mxstepsB);
+SUNDIALS_EXPORT int CVodeSetStabLimDetB(void *cvode_mem, int which, booleantype stldetB);
+SUNDIALS_EXPORT int CVodeSetInitStepB(void *cvode_mem, int which, realtype hinB);
+SUNDIALS_EXPORT int CVodeSetMinStepB(void *cvode_mem, int which, realtype hminB);
+SUNDIALS_EXPORT int CVodeSetMaxStepB(void *cvode_mem, int which, realtype hmaxB);
+      
+SUNDIALS_EXPORT int CVodeSetQuadErrConB(void *cvode_mem, int which, booleantype errconQB);
+
+/*
+ * =================================================================
+ *
+ * EXTRACTION AND DENSE OUTPUT FUNCTIONS FOR BACKWARD PROBLEMS
+ *
+ * =================================================================
+ */
+  
+/*
+ * -----------------------------------------------------------------
+ * CVodeGetB and CVodeGetQuadB
+ * -----------------------------------------------------------------
+ * Extraction functions for the solution and quadratures for a given 
+ * backward problem. They return their corresponding output vector
+ * at the current time reached by the integration of the backward
+ * problem. To obtain the solution or quadratures associated with
+ * a given backward problem at some other time within the last 
+ * integration step (dense output), first obtain a pointer to the
+ * proper CVODES memory by calling CVodeGetAdjCVodeBmem and then use it
+ * to call CVodeGetDky and CVodeGetQuadDky.  
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT int CVodeGetB(void *cvode_mem, int which,
+                              realtype *tBret, N_Vector yB);
+SUNDIALS_EXPORT int CVodeGetQuadB(void *cvode_mem, int which,
+                                  realtype *tBret, N_Vector qB);
+
+
+/*
+ * =================================================================
+ *
+ * OPTIONAL OUTPUT FUNCTIONS FOR BACKWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeGetAdjCVodeBmem
+ * -----------------------------------------------------------------
+ * CVodeGetAdjCVodeBmem returns a (void *) pointer to the CVODES
+ * memory allocated for the backward problem. This pointer can
+ * then be used to call any of the CVodeGet* CVODES routines to
+ * extract optional output for the backward integration phase.
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT void *CVodeGetAdjCVodeBmem(void *cvode_mem, int which);
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeGetAdjY
+ *    Returns the interpolated forward solution at time t. This
+ *    function is a wrapper around the interpType-dependent internal
+ *    function.
+ *    The calling function must allocate space for y.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetAdjY(void *cvode_mem, realtype t, N_Vector y);
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeGetAdjCheckPointsInfo
+ *    Loads an array of nckpnts structures of type CVadjCheckPointRec.
+ *    The user must allocate space for ckpnt (ncheck+1).
+ * -----------------------------------------------------------------
+ */
+
+typedef struct {
+  void *my_addr;
+  void *next_addr;
+  realtype t0;
+  realtype t1;
+  long int nstep;
+  int order;
+  realtype step;
+} CVadjCheckPointRec;
+
+SUNDIALS_EXPORT int CVodeGetAdjCheckPointsInfo(void *cvode_mem, CVadjCheckPointRec *ckpnt);
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeGetAdjDataPointHermite
+ *    Returns the 2 vectors stored for cubic Hermite interpolation 
+ *    at the data point 'which'. The user must allocate space for
+ *    y and yd. Returns CV_MEM_NULL if cvode_mem is NULL.
+ *    Returns CV_ILL_INPUT if interpType != CV_HERMITE.
+ * CVodeGetAdjDataPointPolynomial
+ *    Returns the vector stored for polynomial interpolation 
+ *    at the data point 'which'. The user must allocate space for
+ *    y. Returns CV_MEM_NULL if cvode_mem is NULL.
+ *    Returns CV_ILL_INPUT if interpType != CV_POLYNOMIAL.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetAdjDataPointHermite(void *cvode_mem, int which,
+                                                realtype *t, N_Vector y, N_Vector yd);
+  
+SUNDIALS_EXPORT int CVodeGetAdjDataPointPolynomial(void *cvode_mem, int which,
+                                                   realtype *t, int *order, N_Vector y);
+
+/*
+ * -----------------------------------------------------------------
+ * CVodeGetAdjCurrentCheckPoint
+ *    Returns the address of the 'active' check point.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVodeGetAdjCurrentCheckPoint(void *cvode_mem, void **addr);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_band.h b/include/cvodes/cvodes_band.h
new file mode 100644
index 0000000..59f0bb4
--- /dev/null
+++ b/include/cvodes/cvodes_band.h
@@ -0,0 +1,78 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the band linear solver CSVBAND.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSBAND_H
+#define _CVSBAND_H
+
+#include <cvodes/cvodes_direct.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBand
+ * -----------------------------------------------------------------
+ * A call to the CVBand function links the main CVODE integrator
+ * with the CVSBAND linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * mupper is the upper bandwidth of the band Jacobian
+ *        approximation.
+ *
+ * mlower is the lower bandwidth of the band Jacobian
+ *        approximation.
+ *
+ * The return value of CVBand is one of:
+ *    CVDLS_SUCCESS   if successful
+ *    CVDLS_MEM_NULL  if the cvode memory was NULL
+ *    CVDLS_MEM_FAIL  if there was a memory allocation failure
+ *    CVDLS_ILL_INPUT if a required vector operation is missing or
+ *                     if a bandwidth has an illegal value.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBand(void *cvode_mem, long int N, long int mupper, long int mlower);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVBandB
+ * -----------------------------------------------------------------
+ * CVBandB links the main CVODE integrator with the CVSBAND
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBandB(void *cvode_mem, int which,
+                            long int nB, long int mupperB, long int mlowerB);
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_bandpre.h b/include/cvodes/cvodes_bandpre.h
new file mode 100644
index 0000000..bd2f196
--- /dev/null
+++ b/include/cvodes/cvodes_bandpre.h
@@ -0,0 +1,185 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVSBANDPRE module, which
+ * provides a banded difference quotient Jacobian-based
+ * preconditioner and solver routines for use with CVSPGMR,
+ * CVSPBCG, or CVSPTFQMR.
+ *
+ * Part I contains type definitions and function prototypes for using
+ * CVSBANDPRE on forward problems (IVP integration and/or FSA)
+ *
+ * Part II contains type definitions and function prototypes for using
+ * CVSBANDPRE on adjopint (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSBANDPRE_H
+#define _CVSBANDPRE_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * =================================================================
+ * PART I - forward problems
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ *
+ * SUMMARY
+ * 
+ * These routines provide a band matrix preconditioner based on
+ * difference quotients of the ODE right-hand side function f.
+ * The user supplies parameters
+ *   mu = upper half-bandwidth (number of super-diagonals)
+ *   ml = lower half-bandwidth (number of sub-diagonals)
+ * The routines generate a band matrix of bandwidth ml + mu + 1
+ * and use this to form a preconditioner for use with the Krylov
+ * linear solver in CVSP*. Although this matrix is intended to
+ * approximate the Jacobian df/dy, it may be a very crude
+ * approximation. The true Jacobian need not be banded, or its
+ * true bandwith may be larger than ml + mu + 1, as long as the
+ * banded approximation generated here is sufficiently accurate
+ * to speed convergence as a preconditioner.
+ *
+ * Usage:
+ *   The following is a summary of the usage of this module.
+ *   Details of the calls to CVodeCreate, CVodeInit, CVSp*,
+ *   and CVode are available in the User Guide.
+ *   To use these routines, the sequence of calls in the user
+ *   main program should be as follows:
+ *
+ *   #include <cvodes/cvodes_bandpre.h>
+ *   #include <nvector_serial.h>
+ *   ...
+ *   Set y0
+ *   ...
+ *   cvode_mem = CVodeCreate(...);
+ *   ier = CVodeInit(...);
+ *   ...
+ *   flag = CVSptfqmr(cvode_mem, pretype, maxl);
+ *     -or-
+ *   flag = CVSpgmr(cvode_mem, pretype, maxl);
+ *     -or-
+ *   flag = CVSpbcg(cvode_mem, pretype, maxl);
+ *   ...
+ *   flag = CVBandPrecInit(cvode_mem, N, mu, ml);
+ *   ...
+ *   flag = CVode(...);
+ *   ...
+ *   Free y0
+ *   ...
+ *   CVodeFree(&cvode_mem);
+ *
+ * Notes:
+ * (1) Include this file for the CVBandPrecData type definition.
+ * (2) In the CVBandPrecInit call, the arguments N is the
+ *     problem dimension.
+ * (3) In the CVBPSp* call, the user is free to specify
+ *     the input pretype and the optional input maxl.
+ * -----------------------------------------------------------------
+ */
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBandPrecInit
+ * -----------------------------------------------------------------
+ * CVBandPrecInit allocates and initializes the BANDPRE preconditioner
+ * module. This functino must be called AFTER one of the SPILS linear
+ * solver modules has been attached to the CVODE integrator.
+ *
+ * The parameters of CVBandPrecInit are as follows:
+ *
+ * cvode_mem is the pointer to CVODE memory returned by CVodeCreate.
+ *
+ * N is the problem size.
+ *
+ * mu is the upper half bandwidth.
+ *
+ * ml is the lower half bandwidth.
+ *
+ * The return value of CVBandPrecInit is one of:
+ *   CVSPILS_SUCCESS if no errors occurred
+ *   CVSPILS_MEM_NULL if the integrator memory is NULL
+ *   CVSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   CVSPILS_ILL_INPUT if an input has an illegal value
+ *   CVSPILS_MEM_FAIL if a memory allocation request failed
+ *
+ * NOTE: The band preconditioner assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVBandPrecInit will
+ *       first test for a compatible N_Vector internal
+ *       representation by checking for required functions.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBandPrecInit(void *cvode_mem, long int N, long int mu, long int ml);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional output functions : CVBandPrecGet*
+ * -----------------------------------------------------------------
+ * CVBandPrecGetWorkSpace returns the real and integer work space used
+ *                        by CVBANDPRE.
+ * CVBandPrecGetNumRhsEvals returns the number of calls made from
+ *                          CVBANDPRE to the user's right-hand side
+ *                          routine f.
+ *
+ * The return value of CVBandPrecGet* is one of:
+ *   CVSPILS_SUCCESS if no errors occurred
+ *   CVSPILS_MEM_NULL if the integrator memory is NULL
+ *   CVSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   CVSPILS_PMEM_NULL if the preconditioner memory is NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBandPrecGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int CVBandPrecGetNumRhsEvals(void *cvode_mem, long int *nfevalsBP);
+
+/* 
+ * =================================================================
+ * PART II - backward problems
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: CVBandPrecInitB, CVBPSp*B
+ * -----------------------------------------------------------------
+ * Interface functions for the CVBANDPRE preconditioner to be used
+ * on the backward phase.
+ *
+ * CVBandPrecInitB interfaces to the CVBANDPRE preconditioner
+ * for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBandPrecInitB(void *cvode_mem, int which,
+                                    long int nB, long int muB, long int mlB);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_bbdpre.h b/include/cvodes/cvodes_bbdpre.h
new file mode 100644
index 0000000..bd711ed
--- /dev/null
+++ b/include/cvodes/cvodes_bbdpre.h
@@ -0,0 +1,337 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVBBDPRE module, for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with CVSPGMR/CVSPBCG/CVSPTFQMR, 
+ * and the parallel implementation of the NVECTOR module.
+ *
+ *
+ * Part I contains type definitions and function prototypes for using
+ * CVBBDPRE on forward problems (IVP integration and/or FSA)
+ *
+ * Part II contains type definitions and function prototypes for using
+ * CVBBDPRE on adjopint (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSBBDPRE_H
+#define _CVSBBDPRE_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * =================================================================
+ * PART I - forward problems
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ *
+ * SUMMARY
+ *
+ * These routines provide a preconditioner matrix that is
+ * block-diagonal with banded blocks. The blocking corresponds
+ * to the distribution of the dependent variable vector y among
+ * the processors. Each preconditioner block is generated from
+ * the Jacobian of the local part (on the current processor) of a
+ * given function g(t,y) approximating f(t,y). The blocks are
+ * generated by a difference quotient scheme on each processor
+ * independently. This scheme utilizes an assumed banded
+ * structure with given half-bandwidths, mudq and mldq.
+ * However, the banded Jacobian block kept by the scheme has
+ * half-bandwiths mukeep and mlkeep, which may be smaller.
+ *
+ * The user's calling program should have the following form:
+ *
+ *   #include <cvodes/cvodes_bbdpre.h>
+ *   #include <nvector_parallel.h>
+ *   ...
+ *   void *cvode_mem;
+ *   ...
+ *   Set y0
+ *   ...
+ *   cvode_mem = CVodeCreate(...);
+ *   ier = CVodeInit(...);
+ *   ...
+ *   flag = CVSpgmr(cvode_mem, pretype, maxl);
+ *      -or-
+ *   flag = CVSpbcg(cvode_mem, pretype, maxl);
+ *      -or-
+ *   flag = CVSptfqmr(cvode_mem, pretype, maxl);
+ *   ...
+ *   flag = CVBBDPrecInit(cvode_mem, Nlocal, mudq ,mldq,
+ *                        mukeep, mlkeep, dqrely, gloc, cfn);
+ *   ...
+ *   ier = CVode(...);
+ *   ...
+ *   CVodeFree(&cvode_mem);
+ * 
+ *   Free y0
+ *
+ * The user-supplied routines required are:
+ *
+ *   f    = function defining the ODE right-hand side f(t,y).
+ *
+ *   gloc = function defining the approximation g(t,y).
+ *
+ *   cfn  = function to perform communication need for gloc.
+ *
+ * Notes:
+ *
+ * 1) This header file is included by the user for the definition
+ *    of the CVBBDData type and for needed function prototypes.
+ *
+ * 2) The CVBBDPrecInit call includes half-bandwiths mudq and mldq
+ *    to be used in the difference quotient calculation of the
+ *    approximate Jacobian. They need not be the true
+ *    half-bandwidths of the Jacobian of the local block of g,
+ *    when smaller values may provide a greater efficiency.
+ *    Also, the half-bandwidths mukeep and mlkeep of the retained
+ *    banded approximate Jacobian block may be even smaller,
+ *    to reduce storage and computation costs further.
+ *    For all four half-bandwidths, the values need not be the
+ *    same on every processor.
+ *
+ * 3) The actual name of the user's f function is passed to
+ *    CVodeInit, and the names of the user's gloc and cfn
+ *    functions are passed to CVBBDPrecInit.
+ *
+ * 4) The pointer to the user-defined data block user_data, which is
+ *    set through CVodeSetUserData is also available to the user in
+ *    gloc and cfn.
+ *
+ * 5) Optional outputs specific to this module are available by
+ *    way of routines listed below. These include work space sizes
+ *    and the cumulative number of gloc calls. The costs
+ *    associated with this module also include nsetups banded LU
+ *    factorizations, nlinsetups cfn calls, and npsolves banded
+ *    backsolve calls, where nlinsetups and npsolves are
+ *    integrator/CVSPGMR/CVSPBCG/CVSPTFQMR optional outputs.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVLocalFn
+ * -----------------------------------------------------------------
+ * The user must supply a function g(t,y) which approximates the
+ * right-hand side function f for the system y'=f(t,y), and which
+ * is computed locally (without interprocess communication).
+ * (The case where g is mathematically identical to f is allowed.)
+ * The implementation of this function must have type CVLocalFn.
+ *
+ * This function takes as input the local vector size Nlocal, the
+ * independent variable value t, the local real dependent
+ * variable vector y, and a pointer to the user-defined data
+ * block user_data. It is to compute the local part of g(t,y) and
+ * store this in the vector g.
+ * (Allocation of memory for y and g is handled within the
+ * preconditioner module.)
+ * The user_data parameter is the same as that specified by the user
+ * through the CVodeSetFdata routine.
+ *
+ * A CVLocalFn should return 0 if successful, a positive value if 
+ * a recoverable error occurred, and a negative value if an 
+ * unrecoverable error occurred.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVLocalFn)(long int Nlocal, realtype t, 
+			 N_Vector y, N_Vector g, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVCommFn
+ * -----------------------------------------------------------------
+ * The user may supply a function of type CVCommFn which performs
+ * all interprocess communication necessary to evaluate the
+ * approximate right-hand side function described above.
+ *
+ * This function takes as input the local vector size Nlocal,
+ * the independent variable value t, the dependent variable
+ * vector y, and a pointer to the user-defined data block user_data.
+ * The user_data parameter is the same as that specified by the user
+ * through the CVodeSetUserData routine. The CVCommFn cfn is
+ * expected to save communicated data in space defined within the
+ * structure user_data. Note: A CVCommFn cfn does not have a return value.
+ *
+ * Each call to the CVCommFn cfn is preceded by a call to the
+ * CVRhsFn f with the same (t,y) arguments. Thus cfn can omit any
+ * communications done by f if relevant to the evaluation of g.
+ * If all necessary communication was done by f, the user can
+ * pass NULL for cfn in CVBBDPrecInit (see below).
+ *
+ * A CVCommFn should return 0 if successful, a positive value if 
+ * a recoverable error occurred, and a negative value if an 
+ * unrecoverable error occurred.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVCommFn)(long int Nlocal, realtype t, 
+			N_Vector y,
+			void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBBDPrecInit
+ * -----------------------------------------------------------------
+ * CVBBDPrecInit allocates and initializes the BBD preconditioner.
+ *
+ * The parameters of CVBBDPrecInit are as follows:
+ *
+ * cvode_mem is the pointer to the integrator memory.
+ *
+ * Nlocal is the length of the local block of the vectors y etc.
+ *        on the current processor.
+ *
+ * mudq, mldq are the upper and lower half-bandwidths to be used
+ *            in the difference quotient computation of the local
+ *            Jacobian block.
+ *
+ * mukeep, mlkeep are the upper and lower half-bandwidths of the
+ *                retained banded approximation to the local Jacobian
+ *                block.
+ *
+ * dqrely is an optional input. It is the relative increment
+ *        in components of y used in the difference quotient
+ *        approximations. To specify the default, pass 0.
+ *        The default is dqrely = sqrt(unit roundoff).
+ *
+ * gloc is the name of the user-supplied function g(t,y) that
+ *      approximates f and whose local Jacobian blocks are
+ *      to form the preconditioner.
+ *
+ * cfn is the name of the user-defined function that performs
+ *     necessary interprocess communication for the
+ *     execution of gloc.
+ *
+ * The return value of CVBBDPrecInit is one of:
+ *   CVSPILS_SUCCESS if no errors occurred
+ *   CVSPILS_MEM_NULL if the integrator memory is NULL
+ *   CVSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   CVSPILS_ILL_INPUT if an input has an illegal value
+ *   CVSPILS_MEM_FAIL if a memory allocation request failed
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBBDPrecInit(void *cvode_mem, long int Nlocal, 
+                                  long int mudq, long int mldq, 
+                                  long int mukeep, long int mlkeep, 
+                                  realtype dqrely,
+                                  CVLocalFn gloc, CVCommFn cfn);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBBDPrecReInit
+ * -----------------------------------------------------------------
+ * CVBBDPrecReInit re-initializes the BBDPRE module when solving a
+ * sequence of problems of the same size with CVSPGMR/CVBBDPRE,
+ * CVSPBCG/CVBBDPRE, or CVSPTFQMR/CVBBDPRE provided there is no change 
+ * in Nlocal, mukeep, or mlkeep. After solving one problem, and after 
+ * calling CVodeReInit to re-initialize the integrator for a subsequent 
+ * problem, call CVBBDPrecReInit.
+ *
+ * All arguments have the same names and meanings as those
+ * of CVBBDPrecInit.
+ *
+ * The return value of CVBBDPrecReInit is one of:
+ *   CVSPILS_SUCCESS if no errors occurred
+ *   CVSPILS_MEM_NULL if the integrator memory is NULL
+ *   CVSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   CVSPILS_PMEM_NULL if the preconditioner memory is NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBBDPrecReInit(void *cvode_mem, long int mudq, long int mldq,
+                                    realtype dqrely);
+
+/*
+ * -----------------------------------------------------------------
+ * CVBBDPRE optional output extraction routines
+ * -----------------------------------------------------------------
+ * CVBBDPrecGetWorkSpace returns the BBDPRE real and integer work space
+ *                       sizes.
+ * CVBBDPrecGetNumGfnEvals returns the number of calls to gfn.
+ *
+ * The return value of CVBBDPrecGet* is one of:
+ *   CVSPILS_SUCCESS if no errors occurred
+ *   CVSPILS_MEM_NULL if the integrator memory is NULL
+ *   CVSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   CVSPILS_PMEM_NULL if the preconditioner memory is NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBBDPrecGetWorkSpace(void *cvode_mem,
+                                          long int *lenrwBBDP, long int *leniwBBDP);
+SUNDIALS_EXPORT int CVBBDPrecGetNumGfnEvals(void *cvode_mem, long int *ngevalsBBDP);
+
+/* 
+ * =================================================================
+ * PART II - backward problems
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types: CVLocalFnB and CVCommFnB
+ * -----------------------------------------------------------------
+ * Local approximation function and inter-process communication
+ * function for the BBD preconditioner on the backward phase.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVLocalFnB)(long int NlocalB, realtype t, 
+			  N_Vector y, 
+			  N_Vector yB, N_Vector gB,
+			  void *user_dataB);
+  
+typedef int (*CVCommFnB)(long int NlocalB, realtype t,
+			 N_Vector y, 
+			 N_Vector yB,
+			 void *user_dataB);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: CVBBDPrecInitB, CVBBDSp*B, CVBBDPrecReInit
+ * -----------------------------------------------------------------
+ * Interface functions for the CVBBDPRE preconditioner to be used on
+ * the backward phase.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVBBDPrecInitB(void *cvode_mem, int which, long int NlocalB,
+                                   long int mudqB, long int mldqB,
+                                   long int mukeepB, long int mlkeepB,
+                                   realtype dqrelyB,
+                                   CVLocalFnB glocB, CVCommFnB cfnB);
+
+SUNDIALS_EXPORT int CVBBDPrecReInitB(void *cvode_mem, int which, 
+                                     long int mudqB, long int mldqB,
+                                     realtype dqrelyB);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_dense.h b/include/cvodes/cvodes_dense.h
new file mode 100644
index 0000000..60a91e2
--- /dev/null
+++ b/include/cvodes/cvodes_dense.h
@@ -0,0 +1,70 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the dense linear solver CVSDENSE.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSDENSE_H
+#define _CVSDENSE_H
+
+#include <cvodes/cvodes_direct.h>
+#include <sundials/sundials_dense.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVDense
+ * -----------------------------------------------------------------
+ * A call to the CVDense function links the main integrator with
+ * the CVSDENSE linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * The return value of CVDense is one of:
+ *    CVDLS_SUCCESS   if successful
+ *    CVDLS_MEM_NULL  if the cvode memory was NULL
+ *    CVDLS_MEM_FAIL  if there was a memory allocation failure
+ *    CVDLS_ILL_INPUT if a required vector operation is missing
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDense(void *cvode_mem, long int N);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVDenseB
+ * -----------------------------------------------------------------
+ * CVDenseB links the main CVODE integrator with the CVSDENSE
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDenseB(void *cvode_mem, int which, long int nB);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_diag.h b/include/cvodes/cvodes_diag.h
new file mode 100644
index 0000000..2e67ea8
--- /dev/null
+++ b/include/cvodes/cvodes_diag.h
@@ -0,0 +1,146 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the diagonal linear solver CVSDIAG.
+ *
+ *
+ * Part I contains type definitions and function prototypes for using
+ * CVDIAG on forward problems (IVP integration and/or FSA)
+ *
+ * Part II contains type definitions and function prototypes for using
+ * CVDIAG on adjoint (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSDIAG_H
+#define _CVSDIAG_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * CVDIAG return values
+ * -----------------------------------------------------------------
+ */
+
+#define CVDIAG_SUCCESS          0
+#define CVDIAG_MEM_NULL        -1
+#define CVDIAG_LMEM_NULL       -2
+#define CVDIAG_ILL_INPUT       -3
+#define CVDIAG_MEM_FAIL        -4
+
+/* Additional last_flag values */
+
+#define CVDIAG_INV_FAIL        -5
+#define CVDIAG_RHSFUNC_UNRECVR -6
+#define CVDIAG_RHSFUNC_RECVR   -7
+
+/* Return values for adjoint module */
+
+#define CVDIAG_NO_ADJ          -101
+
+/* 
+ * -----------------------------------------------------------------
+ * PART I - forward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVDiag
+ * -----------------------------------------------------------------
+ * A call to the CVDiag function links the main integrator with
+ * the CVDIAG linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * The return value of CVDiag is one of:
+ *    CVDIAG_SUCCESS   if successful
+ *    CVDIAG_MEM_NULL  if the cvode memory was NULL
+ *    CVDIAG_MEM_FAIL  if there was a memory allocation failure
+ *    CVDIAG_ILL_INPUT if a required vector operation is missing
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDiag(void *cvode_mem);
+  
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the CVDIAG linear solver
+ * -----------------------------------------------------------------
+ *
+ * CVDiagGetWorkSpace returns the real and integer workspace used
+ *                    by CVDIAG.
+ * CVDiagGetNumRhsEvals returns the number of calls to the user
+ *                      f routine due to finite difference Jacobian
+ *                      evaluation.
+ *                      Note: The number of diagonal approximate
+ *                      Jacobians formed is equal to the number of
+ *                      CVDiagSetup calls. This number is available
+ *                      through CVodeGetNumLinSolvSetups.
+ * CVDiagGetLastFlag returns the last error flag set by any of
+ *                   the CVDIAG interface functions.
+ *
+ * The return value of CVDiagGet* is one of:
+ *    CVDIAG_SUCCESS   if successful
+ *    CVDIAG_MEM_NULL  if the cvode memory was NULL
+ *    CVDIAG_LMEM_NULL if the cvdiag memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDiagGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int CVDiagGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS);
+SUNDIALS_EXPORT int CVDiagGetLastFlag(void *cvode_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a CVDIAG return flag
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT char *CVDiagGetReturnFlagName(long int flag);
+
+/* 
+ * -----------------------------------------------------------------
+ * PART II - backward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVDiagB
+ * -----------------------------------------------------------------
+ * CVDiagB links the main CVODE integrator with the CVDIAG
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT int CVDiagB(void *cvode_mem, int which);
+  
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_direct.h b/include/cvodes/cvodes_direct.h
new file mode 100644
index 0000000..ccd99a5
--- /dev/null
+++ b/include/cvodes/cvodes_direct.h
@@ -0,0 +1,413 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common header file for the direct linear solvers in CVODES.
+ *
+ * Part I contains type definitions and function prototypes for 
+ * using a CVDLS linear solver on forward problems (IVP 
+ * integration and/or FSA)
+ *
+ * Part II contains type definitions and function prototypes for 
+ * using a CVDLS linear solver on adjoint (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSDLS_H
+#define _CVSDLS_H
+
+#include <sundials/sundials_direct.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * C V S D I R E C T     C O N S T A N T S
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * CVSDIRECT return values 
+ * -----------------------------------------------------------------
+ */
+
+#define CVDLS_SUCCESS           0
+#define CVDLS_MEM_NULL         -1
+#define CVDLS_LMEM_NULL        -2
+#define CVDLS_ILL_INPUT        -3
+#define CVDLS_MEM_FAIL         -4
+
+/* Additional last_flag values */
+
+#define CVDLS_JACFUNC_UNRECVR  -5
+#define CVDLS_JACFUNC_RECVR    -6
+
+/* Return values for the adjoint module */
+
+#define CVDLS_NO_ADJ           -101
+#define CVDLS_LMEMB_NULL       -102
+
+/*
+ * =================================================================
+ * PART I:  F O R W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVDlsDenseJacFn
+ * -----------------------------------------------------------------
+ *
+ * A dense Jacobian approximation function Jac must be of type 
+ * CVDlsDenseJacFn. Its parameters are:
+ *
+ * N   is the problem size.
+ *
+ * Jac is the dense matrix (of type DlsMat) that will be loaded
+ *     by a CVDlsDenseJacFn with an approximation to the Jacobian 
+ *     matrix J = (df_i/dy_j) at the point (t,y). 
+ *
+ * t   is the current value of the independent variable.
+ *
+ * y   is the current value of the dependent variable vector,
+ *     namely the predicted value of y(t).
+ *
+ * fy  is the vector f(t,y).
+ *
+ * user_data is a pointer to user data - the same as the user_data
+ *     parameter passed to CVodeSetFdata.
+ *
+ * tmp1, tmp2, and tmp3 are pointers to memory allocated for
+ * vectors of length N which can be used by a CVDlsDenseJacFn
+ * as temporary storage or work space.
+ *
+ * A CVDlsDenseJacFn should return 0 if successful, a positive 
+ * value if a recoverable error occurred, and a negative value if 
+ * an unrecoverable error occurred.
+ *
+ * -----------------------------------------------------------------
+ *
+ * NOTE: The following are two efficient ways to load a dense Jac:         
+ * (1) (with macros - no explicit data structure references)      
+ *     for (j=0; j < Neq; j++) {                                  
+ *       col_j = DENSE_COL(Jac,j);                                 
+ *       for (i=0; i < Neq; i++) {                                
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         col_j[i] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ * (2) (without macros - explicit data structure references)      
+ *     for (j=0; j < Neq; j++) {                                  
+ *       col_j = (Jac->data)[j];                                   
+ *       for (i=0; i < Neq; i++) {                                
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         col_j[i] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ * A third way, using the DENSE_ELEM(A,i,j) macro, is much less   
+ * efficient in general.  It is only appropriate for use in small 
+ * problems in which efficiency of access is NOT a major concern. 
+ *                                                                
+ * NOTE: If the user's Jacobian routine needs other quantities,   
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through   
+ *     CVodeGetCurrentStep and CVodeGetErrWeights, respectively 
+ *     (see cvode.h). The unit roundoff is available as 
+ *     UNIT_ROUNDOFF defined in sundials_types.h.
+ *
+ * -----------------------------------------------------------------
+ */
+  
+  
+typedef int (*CVDlsDenseJacFn)(long int N, realtype t,
+			       N_Vector y, N_Vector fy, 
+			       DlsMat Jac, void *user_data,
+			       N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+  
+/*
+ * -----------------------------------------------------------------
+ * Type: CVDlsBandJacFn
+ * -----------------------------------------------------------------
+ *
+ * A band Jacobian approximation function Jac must have the
+ * prototype given below. Its parameters are:
+ *
+ * N is the length of all vector arguments.
+ *
+ * mupper is the upper half-bandwidth of the approximate banded
+ * Jacobian. This parameter is the same as the mupper parameter
+ * passed by the user to the linear solver initialization function.
+ *
+ * mlower is the lower half-bandwidth of the approximate banded
+ * Jacobian. This parameter is the same as the mlower parameter
+ * passed by the user to the linear solver initialization function.
+ *
+ * t is the current value of the independent variable.
+ *
+ * y is the current value of the dependent variable vector,
+ *      namely the predicted value of y(t).
+ *
+ * fy is the vector f(t,y).
+ *
+ * Jac is the band matrix (of type DlsMat) that will be loaded
+ * by a CVDlsBandJacFn with an approximation to the Jacobian matrix
+ * Jac = (df_i/dy_j) at the point (t,y).
+ * Three efficient ways to load J are:
+ *
+ * (1) (with macros - no explicit data structure references)
+ *    for (j=0; j < n; j++) {
+ *       col_j = BAND_COL(Jac,j);
+ *       for (i=j-mupper; i <= j+mlower; i++) {
+ *         generate J_ij = the (i,j)th Jacobian element
+ *         BAND_COL_ELEM(col_j,i,j) = J_ij;
+ *       }
+ *     }
+ *
+ * (2) (with BAND_COL macro, but without BAND_COL_ELEM macro)
+ *    for (j=0; j < n; j++) {
+ *       col_j = BAND_COL(Jac,j);
+ *       for (k=-mupper; k <= mlower; k++) {
+ *         generate J_ij = the (i,j)th Jacobian element, i=j+k
+ *         col_j[k] = J_ij;
+ *       }
+ *     }
+ *
+ * (3) (without macros - explicit data structure references)
+ *     offset = Jac->smu;
+ *     for (j=0; j < n; j++) {
+ *       col_j = ((Jac->data)[j])+offset;
+ *       for (k=-mupper; k <= mlower; k++) {
+ *         generate J_ij = the (i,j)th Jacobian element, i=j+k
+ *         col_j[k] = J_ij;
+ *       }
+ *     }
+ * Caution: Jac->smu is generally NOT the same as mupper.
+ *
+ * The BAND_ELEM(A,i,j) macro is appropriate for use in small
+ * problems in which efficiency of access is NOT a major concern.
+ *
+ * user_data is a pointer to user data - the same as the user_data
+ *          parameter passed to CVodeSetFdata.
+ *
+ * NOTE: If the user's Jacobian routine needs other quantities,
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through
+ *     CVodeGetCurrentStep and CVodeGetErrWeights, respectively
+ *     (see cvode.h). The unit roundoff is available as
+ *     UNIT_ROUNDOFF defined in sundials_types.h
+ *
+ * tmp1, tmp2, and tmp3 are pointers to memory allocated for
+ * vectors of length N which can be used by a CVDlsBandJacFn
+ * as temporary storage or work space.
+ *
+ * A CVDlsBandJacFn should return 0 if successful, a positive value
+ * if a recoverable error occurred, and a negative value if an 
+ * unrecoverable error occurred.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVDlsBandJacFn)(long int N, long int mupper, long int mlower,
+			      realtype t, N_Vector y, N_Vector fy, 
+			      DlsMat Jac, void *user_data,
+			      N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ * -----------------------------------------------------------------
+ * EXPORTED FUNCTIONS 
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the CVDLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * CVDlsSetDenseJacFn specifies the dense Jacobian approximation
+ * routine to be used for a direct dense linear solver.
+ *
+ * CVDlsSetBandJacFn specifies the band Jacobian approximation
+ * routine to be used for a direct band linear solver.
+ *
+ * By default, a difference quotient approximation, supplied with
+ * the solver is used.
+ *
+ * The return value is one of:
+ *    CVDLS_SUCCESS   if successful
+ *    CVDLS_MEM_NULL  if the CVODE memory was NULL
+ *    CVDLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDlsSetDenseJacFn(void *cvode_mem, CVDlsDenseJacFn jac);
+SUNDIALS_EXPORT int CVDlsSetBandJacFn(void *cvode_mem, CVDlsBandJacFn jac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the CVSDIRECT linear solver
+ * -----------------------------------------------------------------
+ *
+ * CVDlsGetWorkSpace   returns the real and integer workspace used
+ *                     by the direct linear solver.
+ * CVDlsGetNumJacEvals returns the number of calls made to the
+ *                     Jacobian evaluation routine jac.
+ * CVDlsGetNumRhsEvals returns the number of calls to the user
+ *                     f routine due to finite difference Jacobian
+ *                     evaluation.
+ * CVDlsGetLastFlag    returns the last error flag set by any of
+ *                     the CVSDIRECT interface functions.
+ *
+ * The return value of CVDlsGet* is one of:
+ *    CVDLS_SUCCESS   if successful
+ *    CVDLS_MEM_NULL  if the CVODES memory was NULL
+ *    CVDLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDlsGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int CVDlsGetNumJacEvals(void *cvode_mem, long int *njevals);
+SUNDIALS_EXPORT int CVDlsGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS);
+SUNDIALS_EXPORT int CVDlsGetLastFlag(void *cvode_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a CVSDIRECT return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *CVDlsGetReturnFlagName(long int flag);
+
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVDlsDenseJacFnB
+ * -----------------------------------------------------------------
+ * A dense Jacobian approximation function jacB for the adjoint
+ * (backward) problem must have the prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVDlsDenseJacFnB)(long int nB, realtype t,
+				N_Vector y, 
+				N_Vector yB, N_Vector fyB,
+				DlsMat JB, void *user_dataB, 
+				N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVDlsDenseJacFnBS
+ * -----------------------------------------------------------------
+ * A dense Jacobian approximation function jacBS for the adjoint
+ * (backward) problem, sensitivity-dependent case,  must have the
+ *  prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVDlsDenseJacFnBS)(long int nB, realtype t,
+				N_Vector y, N_Vector *yS,
+				N_Vector yB, N_Vector fyB,
+				DlsMat JB, void *user_dataB, 
+				N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVDlsBandJacFnB
+ * -----------------------------------------------------------------
+ * A band Jacobian approximation function jacB for the adjoint 
+ * (backward) problem must have the prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVDlsBandJacFnB)(long int nB, long int mupperB, long int mlowerB,
+			       realtype t, N_Vector y,
+			       N_Vector yB, N_Vector fyB,
+			       DlsMat JB, void *user_dataB, 
+			       N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVDlsBandJacFnBS
+ * -----------------------------------------------------------------
+ * A band Jacobian approximation function jacBS for the adjoint 
+ * (backward) problem, sensitivity-dependent case, must have the
+ * prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVDlsBandJacFnBS)(long int nB, long int mupperB, long int mlowerB,
+			       realtype t, N_Vector y, N_Vector *yS,
+			       N_Vector yB, N_Vector fyB,
+			       DlsMat JB, void *user_dataB,
+			       N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+/*
+ * -----------------------------------------------------------------
+ * EXPORTED FUNCTIONS 
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: CVDlsSet*JacFnB and CVDlsSet*JacFnBS
+ * -----------------------------------------------------------------
+ * CVDlsSetDenseJacFnB and CVDlsSetBandJacFnB specify the dense and
+ * band Jacobian functions, respectively, to be used by a
+ * CVSDIRECT linear solver for the backward integration phase, when
+ * the backward problem does not depend on forward sensitivities.
+ * CVDlsSetDenseJacFnBS and CVDlsSetBandJacFnBS specify the Jacobian
+ * functions when the backward problem does depend on sensitivities.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVDlsSetDenseJacFnB(void *cvode_mem, int which,
+                                        CVDlsDenseJacFnB jacB);
+
+SUNDIALS_EXPORT int CVDlsSetDenseJacFnBS(void *cvode_mem, int which,
+                                         CVDlsDenseJacFnBS jacBS);
+
+SUNDIALS_EXPORT int CVDlsSetBandJacFnB(void *cvode_mem, int which,
+                                       CVDlsBandJacFnB jacB);
+
+SUNDIALS_EXPORT int CVDlsSetBandJacFnBS(void *cvode_mem, int which,
+                                        CVDlsBandJacFnBS jacBS);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_klu.h b/include/cvodes/cvodes_klu.h
new file mode 100644
index 0000000..5aecedc
--- /dev/null
+++ b/include/cvodes/cvodes_klu.h
@@ -0,0 +1,156 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4558 $
+ * $Date: 2015-10-05 09:04:16 -0700 (Mon, 05 Oct 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVKLU linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSKLU_H
+#define _CVSKLU_H
+
+#include "cvodes/cvodes_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVKLU
+ * -----------------------------------------------------------------
+ * A call to the CVKLU function links the main integrator      
+ * with the CVKLU linear solver module.                        
+ *                                                                
+ * cv_mem is the pointer to integrator memory returned by        
+ *     CVCreate.             
+ *
+ *                                                                
+ * CVKLU returns:                                              
+ *     CVSLU_SUCCESS   = 0  if successful                              
+ *     CVSLU_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     CVSLU_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The KLU linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, CVKLU will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVKLU(void *cv_mem, int n, int nnz, int sparsetype); 
+
+/*
+ * -----------------------------------------------------------------
+ * CVKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to CVKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is CVSLS_SUCCESS = 0, CVSLS_MEM_NULL = -1,
+ * CVSLS_LMEM_NULL = -2, CVSLS_ILL_INPUT = -3, or CVSLS_MEM_FAIL = -4.
+ *
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVKLUReInit(void *cv_mem_v, int n, int nnz, 
+				  int reinit_type);
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * CVKLUSetOrdering sets the ordering used by KLU for reducing fill.
+ * Options are: 0 for AMD, 1 for COLAMD, and 2 for the natural ordering.
+ * The default used in CVODE is 1 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVKLUSetOrdering(void *cv_mem, int ordering_choice); 
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVKLUB
+ * -----------------------------------------------------------------
+ * CVKLUB is a wrapper around CVKLU. It attaches the CVKLU linear
+ * solver to the backward problem memory block.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVKLUB(void *cvode_mem, int which, int n, int nnz, int sparsetype);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVKLUReInitB
+ * -----------------------------------------------------------------
+ * CVKLUReInitB is a wrapper around CVKLUReInit. 
+ * CVKLUReInitB pulls off the memory block associated with the
+ * which parameter and reinitializes the KLU solver associated with that block.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVKLUReInitB(void *cvode_mem, int which, int n, int nnz, int reinit_type);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVKLUSetOrderingB
+ * -----------------------------------------------------------------
+ * CVKLUSetOrderingB is a wrapper around CVKLUSetOrdering. 
+ * CVKLUSetOrderingB pulls off the memory block associated with the
+ * which parameter and sets the ordering for the solver associated with that block.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVKLUSetOrderingB(void *cv_mem, int which, int ordering_choice); 
+
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_lapack.h b/include/cvodes/cvodes_lapack.h
new file mode 100644
index 0000000..49304e7
--- /dev/null
+++ b/include/cvodes/cvodes_lapack.h
@@ -0,0 +1,110 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Header file for the CVODES dense linear solver CVSLAPACK.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSLAPACK_H
+#define _CVSLAPACK_H
+
+#include <cvodes/cvodes_direct.h>
+#include <sundials/sundials_lapack.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVLapackDense
+ * -----------------------------------------------------------------
+ * A call to the CVLapackDense function links the main integrator
+ * with the CVSLAPACK linear solver using dense Jacobians.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * The return value of CVLapackDense is one of:
+ *    CVDLS_SUCCESS   if successful
+ *    CVDLS_MEM_NULL  if the CVODES memory was NULL
+ *    CVDLS_MEM_FAIL  if there was a memory allocation failure
+ *    CVDLS_ILL_INPUT if a required vector operation is missing
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVLapackDense(void *cvode_mem, int N);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVLapackBand
+ * -----------------------------------------------------------------
+ * A call to the CVLapackBand function links the main integrator
+ * with the CVSLAPACK linear solver using banded Jacobians. 
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * mupper is the upper bandwidth of the band Jacobian approximation.
+ *
+ * mlower is the lower bandwidth of the band Jacobian approximation.
+ *
+ * The return value of CVLapackBand is one of:
+ *    CVDLS_SUCCESS   if successful
+ *    CVDLS_MEM_NULL  if the CVODES memory was NULL
+ *    CVDLS_MEM_FAIL  if there was a memory allocation failure
+ *    CVDLS_ILL_INPUT if a required vector operation is missing or
+ *                       if a bandwidth has an illegal value.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVLapackBand(void *cvode_mem, int N, int mupper, int mlower);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVLapackDenseB
+ * -----------------------------------------------------------------
+ * CVLapackDenseB links the main CVODE integrator with the dense
+ * CVSLAPACK linear solver for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVLapackDenseB(void *cvode_mem, int which, int nB);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVLapackBandB
+ * -----------------------------------------------------------------
+ * CVLapackBandB links the main CVODE integrator with the band
+ * CVSLAPACK linear solver for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVLapackBandB(void *cvode_mem, int which,
+                                  int nB, int mupperB, int mlowerB);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_sparse.h b/include/cvodes/cvodes_sparse.h
new file mode 100644
index 0000000..432840c
--- /dev/null
+++ b/include/cvodes/cvodes_sparse.h
@@ -0,0 +1,255 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the Sparse linear solver module in CVODES.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSSPARSE_H
+#define _CVSSPARSE_H
+
+#include <sundials/sundials_sparse.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * C V S S P A R S E     C O N S T A N T S
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * CVSSPARSE return values 
+ * -----------------------------------------------------------------
+ */
+
+#define CVSLS_SUCCESS           0
+#define CVSLS_MEM_NULL         -1
+#define CVSLS_LMEM_NULL        -2
+#define CVSLS_ILL_INPUT        -3
+#define CVSLS_MEM_FAIL         -4
+#define CVSLS_JAC_NOSET        -5
+#define CVSLS_PACKAGE_FAIL     -6
+
+/* Additional last_flag values */
+
+#define CVSLS_JACFUNC_UNRECVR  -7
+#define CVSLS_JACFUNC_RECVR    -8
+
+/* Return values for the adjoint module */
+
+#define CVSLS_NO_ADJ           -101
+#define CVSLS_LMEMB_NULL       -102
+
+/*
+ * =================================================================
+ * PART I:  F O R W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : CVSlsSparseJacFn
+ * -----------------------------------------------------------------
+ *
+ * A sparse Jacobian approximation function jac must be of type 
+ * CVSlsSparseJacFn.
+ * Its parameters are:                     
+ *                                                                
+ * t   is the current value of the independent variable t.        
+ *                                                                
+ * y   is the current value of the dependent variable vector,     
+ *     namely the predicted value of y(t).                     
+ *                                                                
+ * fy  is the vector f(t,y).
+ *     namely the predicted value of y'(t).                    
+ *                                                                
+ * JacMat is the compressed sparse column matrix (of type SlsMat)
+ *     to be loaded by an CVSlsSparseJacFn routine with an approximation
+ *     to the system Jacobian matrix
+ *            J = J = (df_i/dy_j) at the point (t,y). 
+ *     Note that JacMat is NOT preset to zero!
+ *     Matrix data is for the nonzero entries of the Jacobian stored in
+ *     compressed column format.  Row indices of entries in 
+ *     column j are stored in J->rowvals[colptrs[j]] 
+ *     through J->rowvals[colptrs[j+i]-1]
+ *     and corresponding numerical values of the Jacobian are stored 
+ *     in the same entries of J->data.
+ * 
+ * J_data is a pointer to user Jacobian data - the same as the    
+ *     user_data parameter passed to CVodeSetFdata.                     
+ *                                                                
+ * tmp1, tmp2, tmp3 are pointers to memory allocated for          
+ *     N_Vectors which can be used by an CVSparseJacFn routine 
+ *     as temporary storage or work space.                     
+ *                                                                
+ * A CVSlsSparseJacFn should return                                
+ *     0 if successful,                                           
+ *     a positive int if a recoverable error occurred, or         
+ *     a negative int if a nonrecoverable error occurred.         
+ *
+ * -----------------------------------------------------------------
+ *
+  * NOTE: If the user's Jacobian routine needs other quantities,   
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through   
+ *     CVodeGetCurrentStep and CVodeGetErrWeights, respectively 
+ *     (see cvode.h). The unit roundoff is available as 
+ *     UNIT_ROUNDOFF defined in sundials_types.h.
+ *
+ * -----------------------------------------------------------------
+ */
+  
+  
+typedef int (*CVSlsSparseJacFn)(realtype t,
+		     N_Vector y, N_Vector fy, 
+		     SlsMat JacMat, void *user_data,
+		     N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the CVSPARSE linear solver
+ * -----------------------------------------------------------------
+ * CVSlsSetSparseJacFn specifies the Jacobian approximation
+ * routine to be used for a sparse direct linear solver.
+ *
+ * The return value is one of:
+ *    CVSLS_SUCCESS   if successful
+ *    CVSLS_MEM_NULL  if the CVODE memory was NULL
+ *    CVSLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSlsSetSparseJacFn(void *cvode_mem, CVSlsSparseJacFn jac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the CVSLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * CVSlsGetNumJacEvals returns the number of calls made to the
+ *                      Jacobian evaluation routine jac.
+ * CVSlsGetLastFlag    returns the last error flag set by any of
+ *                      the CVSLS interface functions.
+ *
+ * The return value of CVSlsGet* is one of:
+ *    CVSLS_SUCCESS   if successful
+ *    CVSLS_MEM_NULL  if the IDA memory was NULL
+ *    CVSLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSlsGetNumJacEvals(void *cvode_mem, long int *njevals);
+SUNDIALS_EXPORT int CVSlsGetLastFlag(void *cvode_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a CVSLS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *CVSlsGetReturnFlagName(long int flag);
+
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVSlsSparseJacFnB
+ * -----------------------------------------------------------------
+ * A sparse Jacobian approximation function jacB for the adjoint
+ * (backward) problem must have the prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSlsSparseJacFnB)(realtype t, N_Vector y, 
+				 N_Vector yB, N_Vector fyB,
+				 SlsMat JB, void *user_dataB, 
+				 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVSlsSparseJacFnBS
+ * -----------------------------------------------------------------
+ * A sparse Jacobian approximation function jacBS for the adjoint
+ * (backward) problem, sensitivity-dependent case,  must have the
+ *  prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSlsSparseJacFnBS)(realtype t,
+				  N_Vector y, N_Vector *yS,
+				  N_Vector yB, N_Vector fyB,
+				  SlsMat JB, void *user_dataB, 
+				  N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+/*
+ * -----------------------------------------------------------------
+ * EXPORTED FUNCTIONS 
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: CVSlsSetSparseJacFnB and CVSlsSetSparseJacFnBS
+ * -----------------------------------------------------------------
+ * CVSlsSetSparseJacFnB specifies the sparse Jacobian functions to 
+ * be used by a CVSPARSE linear solver for the backward integration phase
+ * when the backward problem does not depend on forward sensitivities.
+ * CVSlsSetSparseJacFnBS specifies the Jacobian
+ * functions when the backward problem does depend on sensitivities.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSlsSetSparseJacFnB(void *cv_mem, int which, 
+					 CVSlsSparseJacFnB jacB);
+SUNDIALS_EXPORT int CVSlsSetSparseJacFnBS(void *cv_mem, int which, 
+					  CVSlsSparseJacFnBS jacBS);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_spbcgs.h b/include/cvodes/cvodes_spbcgs.h
new file mode 100644
index 0000000..da87907
--- /dev/null
+++ b/include/cvodes/cvodes_spbcgs.h
@@ -0,0 +1,102 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4490 $
+ * $Date: 2015-04-30 16:55:37 -0700 (Thu, 30 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVODES scaled preconditioned 
+ * Bi-CGSTAB linear solver, CVSPBCG.
+ *
+ * Part I contains function prototypes for using CVSPBCG on forward 
+ * problems (IVP integration and/or FSA)
+ *
+ * Part II contains function prototypes for using CVSPBCG on adjoint 
+ * (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSSPBCG_H
+#define _CVSSPBCG_H
+
+#include <cvodes/cvodes_spils.h>
+#include <sundials/sundials_spbcgs.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * -----------------------------------------------------------------
+ * PART I - forward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcg
+ * -----------------------------------------------------------------
+ * A call to the CVSpbcg function links the main CVODE integrator
+ * with the CVSPBCG linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * pretype   is the type of user preconditioning to be done.
+ *           This must be one of the four enumeration constants
+ *           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined
+ *           in iterative.h. These correspond to no preconditioning,
+ *           left preconditioning only, right preconditioning
+ *           only, and both left and right preconditioning,
+ *           respectively.
+ *
+ * maxl      is the maximum Krylov dimension. This is an
+ *           optional input to the CVSPBCG solver. Pass 0 to
+ *           use the default value CVSPILS_MAXL=5.
+ *
+ * The return value of CVSpbcg is one of:
+ *    CVSPILS_SUCCESS   if successful
+ *    CVSPILS_MEM_NULL  if the cvode memory was NULL
+ *    CVSPILS_MEM_FAIL  if there was a memory allocation failure
+ *    CVSPILS_ILL_INPUT if a required vector operation is missing
+ * The above constants are defined in cvodes_spils.h
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpbcg(void *cvode_mem, int pretype, int maxl);
+
+/* 
+ * -----------------------------------------------------------------
+ * PART II - backward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVSpbcgB
+ * -----------------------------------------------------------------
+ * CVSpbcgB links the main CVODES integrator with the CVSpbcg
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpbcgB(void *cvode_mem, int which,
+                             int pretypeB, int maxlB);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_spgmr.h b/include/cvodes/cvodes_spgmr.h
new file mode 100644
index 0000000..ff79405
--- /dev/null
+++ b/include/cvodes/cvodes_spgmr.h
@@ -0,0 +1,103 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVODES scaled preconditioned 
+ * GMRES linear solver, CVSPGMR.
+ *
+ * Part I contains function prototypes for using CVSPGMR on forward 
+ * problems (IVP integration and/or FSA)
+ *
+ * Part II contains function prototypes for using CVSPGMR on adjoint 
+ * (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSSPGMR_H
+#define _CVSSPGMR_H
+
+#include <cvodes/cvodes_spils.h>
+#include <sundials/sundials_spgmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * -----------------------------------------------------------------
+ * PART I - forward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpgmr
+ * -----------------------------------------------------------------
+ * A call to the CVSpgmr function links the main CVODE integrator
+ * with the CVSPGMR linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * pretype   is the type of user preconditioning to be done.
+ *           This must be one of the four enumeration constants
+ *           NONE, LEFT, RIGHT, or BOTH defined in iterative.h.
+ *           These correspond to no preconditioning,
+ *           left preconditioning only, right preconditioning
+ *           only, and both left and right preconditioning,
+ *           respectively.
+ *
+ * maxl      is the maximum Krylov dimension. This is an
+ *           optional input to the CVSPGMR solver. Pass 0 to
+ *           use the default value CVSPILS_MAXL=5.
+ *
+ * The return value of CVSpgmr is one of:
+ *    CVSPILS_SUCCESS   if successful
+ *    CVSPILS_MEM_NULL  if the cvode memory was NULL
+ *    CVSPILS_MEM_FAIL  if there was a memory allocation failure
+ *    CVSPILS_ILL_INPUT if a required vector operation is missing
+ * The above constants are defined in cvodes_spils.h
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpgmr(void *cvode_mem, int pretype, int maxl);
+
+/* 
+ * -----------------------------------------------------------------
+ * PART II - backward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVSpgmrB
+ * -----------------------------------------------------------------
+ * CVSpgmrB links the main CVODES integrator with the CVSpgmr
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpgmrB(void *cvode_mem, int which,
+                             int pretypeB, int maxlB);
+  
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_spils.h b/include/cvodes/cvodes_spils.h
new file mode 100644
index 0000000..252d911
--- /dev/null
+++ b/include/cvodes/cvodes_spils.h
@@ -0,0 +1,518 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the common header file for the Scaled, Preconditioned
+ * Iterative Linear Solvers in CVODES.
+ *
+ * Part I contains type definitions and functions for using the 
+ * iterative linear solvers on forward problems 
+ * (IVP integration and/or FSA)
+ *
+ * Part II contains type definitions and functions for using the 
+ * iterative linear solvers on adjoint (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSSPILS_H
+#define _CVSSPILS_H
+
+#include <sundials/sundials_iterative.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * CVSPILS return values
+ * -----------------------------------------------------------------
+ */
+
+#define CVSPILS_SUCCESS          0
+#define CVSPILS_MEM_NULL        -1
+#define CVSPILS_LMEM_NULL       -2
+#define CVSPILS_ILL_INPUT       -3
+#define CVSPILS_MEM_FAIL        -4
+#define CVSPILS_PMEM_NULL       -5
+
+/* Return values for the adjoint module */
+
+#define CVSPILS_NO_ADJ          -101
+#define CVSPILS_LMEMB_NULL      -102
+
+/*
+ * -----------------------------------------------------------------
+ * CVSPILS solver constants
+ * -----------------------------------------------------------------
+ * CVSPILS_MAXL   : default value for the maximum Krylov
+ *                  dimension
+ *
+ * CVSPILS_MSBPRE : maximum number of steps between
+ *                  preconditioner evaluations
+ *
+ * CVSPILS_DGMAX  : maximum change in gamma between
+ *                  preconditioner evaluations
+ *
+ * CVSPILS_EPLIN  : default value for factor by which the
+ *                  tolerance on the nonlinear iteration is
+ *                  multiplied to get a tolerance on the linear
+ *                  iteration
+ * -----------------------------------------------------------------
+ */
+
+#define CVSPILS_MAXL   5
+#define CVSPILS_MSBPRE 50
+#define CVSPILS_DGMAX  RCONST(0.2)
+#define CVSPILS_EPLIN  RCONST(0.05)
+
+/* 
+ * -----------------------------------------------------------------
+ * PART I - forward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsPrecSetupFn
+ * -----------------------------------------------------------------
+ * The user-supplied preconditioner setup function PrecSetup and
+ * the user-supplied preconditioner solve function PrecSolve
+ * together must define left and right preconditoner matrices
+ * P1 and P2 (either of which may be trivial), such that the
+ * product P1*P2 is an approximation to the Newton matrix
+ * M = I - gamma*J.  Here J is the system Jacobian J = df/dy,
+ * and gamma is a scalar proportional to the integration step
+ * size h.  The solution of systems P z = r, with P = P1 or P2,
+ * is to be carried out by the PrecSolve function, and PrecSetup
+ * is to do any necessary setup operations.
+ *
+ * The user-supplied preconditioner setup function PrecSetup
+ * is to evaluate and preprocess any Jacobian-related data
+ * needed by the preconditioner solve function PrecSolve.
+ * This might include forming a crude approximate Jacobian,
+ * and performing an LU factorization on the resulting
+ * approximation to M.  This function will not be called in
+ * advance of every call to PrecSolve, but instead will be called
+ * only as often as necessary to achieve convergence within the
+ * Newton iteration.  If the PrecSolve function needs no
+ * preparation, the PrecSetup function can be NULL.
+ *
+ * For greater efficiency, the PrecSetup function may save
+ * Jacobian-related data and reuse it, rather than generating it
+ * from scratch.  In this case, it should use the input flag jok
+ * to decide whether to recompute the data, and set the output
+ * flag *jcurPtr accordingly.
+ *
+ * Each call to the PrecSetup function is preceded by a call to
+ * the RhsFn f with the same (t,y) arguments.  Thus the PrecSetup
+ * function can use any auxiliary data that is computed and
+ * saved by the f function and made accessible to PrecSetup.
+ *
+ * A function PrecSetup must have the prototype given below.
+ * Its parameters are as follows:
+ *
+ * t       is the current value of the independent variable.
+ *
+ * y       is the current value of the dependent variable vector,
+ *          namely the predicted value of y(t).
+ *
+ * fy      is the vector f(t,y).
+ *
+ * jok     is an input flag indicating whether Jacobian-related
+ *         data needs to be recomputed, as follows:
+ *           jok == FALSE means recompute Jacobian-related data
+ *                  from scratch.
+ *           jok == TRUE  means that Jacobian data, if saved from
+ *                  the previous PrecSetup call, can be reused
+ *                  (with the current value of gamma).
+ *         A Precset call with jok == TRUE can only occur after
+ *         a call with jok == FALSE.
+ *
+ * jcurPtr is a pointer to an output integer flag which is
+ *         to be set by PrecSetup as follows:
+ *         Set *jcurPtr = TRUE if Jacobian data was recomputed.
+ *         Set *jcurPtr = FALSE if Jacobian data was not recomputed,
+ *                        but saved data was reused.
+ *
+ * gamma   is the scalar appearing in the Newton matrix.
+ *
+ * user_data  is a pointer to user data - the same as the user_data
+ *         parameter passed to the CVodeSetUserData function.
+ *
+ * tmp1, tmp2, and tmp3 are pointers to memory allocated
+ *                      for N_Vectors which can be used by
+ *                      CVSpilsPrecSetupFn as temporary storage or
+ *                      work space.
+ *
+ * NOTE: If the user's preconditioner needs other quantities,
+ *       they are accessible as follows: hcur (the current stepsize)
+ *       and ewt (the error weight vector) are accessible through
+ *       CVodeGetCurrentStep and CVodeGetErrWeights, respectively).
+ *       The unit roundoff is available as UNIT_ROUNDOFF defined in
+ *       sundials_types.h.
+ *
+ * Returned value:
+ * The value to be returned by the PrecSetup function is a flag
+ * indicating whether it was successful.  This value should be
+ *   0   if successful,
+ *   > 0 for a recoverable error (step will be retried),
+ *   < 0 for an unrecoverable error (integration is halted).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsPrecSetupFn)(realtype t, N_Vector y, N_Vector fy,
+				  booleantype jok, booleantype *jcurPtr,
+				  realtype gamma, void *user_data,
+				  N_Vector tmp1, N_Vector tmp2,
+				  N_Vector tmp3);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsPrecSolveFn
+ * -----------------------------------------------------------------
+ * The user-supplied preconditioner solve function PrecSolve
+ * is to solve a linear system P z = r in which the matrix P is
+ * one of the preconditioner matrices P1 or P2, depending on the
+ * type of preconditioning chosen.
+ *
+ * A function PrecSolve must have the prototype given below.
+ * Its parameters are as follows:
+ *
+ * t      is the current value of the independent variable.
+ *
+ * y      is the current value of the dependent variable vector.
+ *
+ * fy     is the vector f(t,y).
+ *
+ * r      is the right-hand side vector of the linear system.
+ *
+ * z      is the output vector computed by PrecSolve.
+ *
+ * gamma  is the scalar appearing in the Newton matrix.
+ *
+ * delta  is an input tolerance for use by PSolve if it uses
+ *        an iterative method in its solution.  In that case,
+ *        the residual vector Res = r - P z of the system
+ *        should be made less than delta in weighted L2 norm,
+ *        i.e., sqrt [ Sum (Res[i]*ewt[i])^2 ] < delta.
+ *        Note: the error weight vector ewt can be obtained
+ *        through a call to the routine CVodeGetErrWeights.
+ *
+ * lr     is an input flag indicating whether PrecSolve is to use
+ *        the left preconditioner P1 or right preconditioner
+ *        P2: lr = 1 means use P1, and lr = 2 means use P2.
+ *
+ * user_data is a pointer to user data - the same as the user_data
+ *        parameter passed to the CVodeSetUserData function.
+ *
+ * tmp    is a pointer to memory allocated for an N_Vector
+ *        which can be used by PSolve for work space.
+ *
+ * Returned value:
+ * The value to be returned by the PrecSolve function is a flag
+ * indicating whether it was successful.  This value should be
+ *   0 if successful,
+ *   positive for a recoverable error (step will be retried),
+ *   negative for an unrecoverable error (integration is halted).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsPrecSolveFn)(realtype t, N_Vector y, N_Vector fy,
+				  N_Vector r, N_Vector z,
+				  realtype gamma, realtype delta,
+				  int lr, void *user_data, N_Vector tmp);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsJacTimesVecFn
+ * -----------------------------------------------------------------
+ * The user-supplied function jtimes is to generate the product
+ * J*v for given v, where J is the Jacobian df/dy, or an
+ * approximation to it, and v is a given vector. It should return
+ * 0 if successful a positive value for a recoverable error or 
+ * a negative value for an unrecoverable failure.
+ *
+ * A function jtimes must have the prototype given below. Its
+ * parameters are as follows:
+ *
+ *   v        is the N_Vector to be multiplied by J.
+ *
+ *   Jv       is the output N_Vector containing J*v.
+ *
+ *   t        is the current value of the independent variable.
+ *
+ *   y        is the current value of the dependent variable
+ *            vector.
+ *
+ *   fy       is the vector f(t,y).
+ *
+ *   user_data   is a pointer to user data, the same as the user_data
+ *            parameter passed to the CVodeSetUserData function. 
+ *
+ *   tmp      is a pointer to memory allocated for an N_Vector
+ *            which can be used by Jtimes for work space.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsJacTimesVecFn)(N_Vector v, N_Vector Jv, realtype t,
+				    N_Vector y, N_Vector fy,
+				    void *user_data, N_Vector tmp);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the CVSPILS linear solver
+ * -----------------------------------------------------------------
+ *
+ * CVSpilsSetPrecType resets the type of preconditioner, pretype,
+ *                from the value previously set.
+ *                This must be one of PREC_NONE, PREC_LEFT, 
+ *                PREC_RIGHT, or PREC_BOTH.
+ *
+ * CVSpilsSetGSType specifies the type of Gram-Schmidt
+ *                orthogonalization to be used. This must be one of
+ *                the two enumeration constants MODIFIED_GS or
+ *                CLASSICAL_GS defined in iterative.h. These correspond
+ *                to using modified Gram-Schmidt and classical
+ *                Gram-Schmidt, respectively.
+ *                Default value is MODIFIED_GS.
+ *
+ * CVSpilsSetMaxl resets the maximum Krylov subspace size, maxl,
+ *                from the value previously set.
+ *                An input value <= 0, gives the default value.
+ *
+ * CVSpilsSetEpsLin specifies the factor by which the tolerance on
+ *                the nonlinear iteration is multiplied to get a
+ *                tolerance on the linear iteration.
+ *                Default value is 0.05.
+ *
+ * CVSpilsSetPreconditioner specifies the PrecSetup and PrecSolve functions.
+ *                Default is NULL for both arguments (no preconditioning).
+ *
+ * CVSpilsSetJacTimesVecFn specifies the jtimes function. Default is to use 
+ *                an internal finite difference approximation routine.
+ *
+ * The return value of CVSpilsSet* is one of:
+ *    CVSPILS_SUCCESS   if successful
+ *    CVSPILS_MEM_NULL  if the cvode memory was NULL
+ *    CVSPILS_LMEM_NULL if the linear solver memory was NULL
+ *    CVSPILS_ILL_INPUT if an input has an illegal value
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpilsSetPrecType(void *cvode_mem, int pretype);
+SUNDIALS_EXPORT int CVSpilsSetGSType(void *cvode_mem, int gstype);
+SUNDIALS_EXPORT int CVSpilsSetMaxl(void *cvode_mem, int maxl);
+SUNDIALS_EXPORT int CVSpilsSetEpsLin(void *cvode_mem, realtype eplifac);
+SUNDIALS_EXPORT int CVSpilsSetPreconditioner(void *cvode_mem,
+                                             CVSpilsPrecSetupFn pset, 
+					     CVSpilsPrecSolveFn psolve);
+SUNDIALS_EXPORT int CVSpilsSetJacTimesVecFn(void *cvode_mem,
+                                            CVSpilsJacTimesVecFn jtv);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the CVSPILS linear solver
+ * -----------------------------------------------------------------
+ * CVSpilsGetWorkSpace returns the real and integer workspace used
+ *                by the SPILS module.
+ *
+ * CVSpilsGetNumPrecEvals returns the number of preconditioner
+ *                 evaluations, i.e. the number of calls made
+ *                 to PrecSetup with jok==FALSE.
+ *
+ * CVSpilsGetNumPrecSolves returns the number of calls made to
+ *                 PrecSolve.
+ *
+ * CVSpilsGetNumLinIters returns the number of linear iterations.
+ *
+ * CVSpilsGetNumConvFails returns the number of linear
+ *                 convergence failures.
+ *
+ * CVSpilsGetNumJtimesEvals returns the number of calls to jtimes.
+ *
+ * CVSpilsGetNumRhsEvals returns the number of calls to the user
+ *                 f routine due to finite difference Jacobian
+ *                 times vector evaluation.
+ *
+ * CVSpilsGetLastFlag returns the last error flag set by any of
+ *                 the CVSPILS interface functions.
+ *
+ * The return value of CVSpilsGet* is one of:
+ *    CVSPILS_SUCCESS   if successful
+ *    CVSPILS_MEM_NULL  if the cvode memory was NULL
+ *    CVSPILS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpilsGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int CVSpilsGetNumPrecEvals(void *cvode_mem, long int *npevals);
+SUNDIALS_EXPORT int CVSpilsGetNumPrecSolves(void *cvode_mem, long int *npsolves);
+SUNDIALS_EXPORT int CVSpilsGetNumLinIters(void *cvode_mem, long int *nliters);
+SUNDIALS_EXPORT int CVSpilsGetNumConvFails(void *cvode_mem, long int *nlcfails);
+SUNDIALS_EXPORT int CVSpilsGetNumJtimesEvals(void *cvode_mem, long int *njvevals);
+SUNDIALS_EXPORT int CVSpilsGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS); 
+SUNDIALS_EXPORT int CVSpilsGetLastFlag(void *cvode_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a CVSPILS return flag
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT char *CVSpilsGetReturnFlagName(long int flag);
+
+
+/* 
+ * -----------------------------------------------------------------
+ * PART II - backward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsPrecSetupFnB
+ * -----------------------------------------------------------------
+ * A function PrecSetupB for the adjoint (backward) problem must have 
+ * the prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsPrecSetupFnB)(realtype t, N_Vector y,
+                                   N_Vector yB, N_Vector fyB,
+                                   booleantype jokB,
+                                   booleantype *jcurPtrB, realtype gammaB,
+                                   void *user_dataB,
+                                   N_Vector tmp1B, N_Vector tmp2B,
+                                   N_Vector tmp3B);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsPrecSetupFnBS
+ * -----------------------------------------------------------------
+ * A function PrecSetupBS for the adjoint (backward) problem must have 
+ * the prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsPrecSetupFnBS)(realtype t, N_Vector y, N_Vector *yS,
+                                    N_Vector yB, N_Vector fyB,
+                                    booleantype jokB,
+                                    booleantype *jcurPtrB, realtype gammaB,
+                                    void *user_dataB,
+                                    N_Vector tmp1B, N_Vector tmp2B,
+                                    N_Vector tmp3B);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsPrecSolveFnB
+ * -----------------------------------------------------------------
+ * A function PrecSolveB for the adjoint (backward) problem  must 
+ * have the prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsPrecSolveFnB)(realtype t, N_Vector y,
+                                   N_Vector yB, N_Vector fyB,
+                                   N_Vector rB, N_Vector zB,
+                                   realtype gammaB, realtype deltaB,
+                                   int lrB, void *user_dataB, N_Vector tmpB);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsPrecSolveFnBS
+ * -----------------------------------------------------------------
+ * A function PrecSolveBS for the adjoint (backward) problem  must 
+ * have the prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsPrecSolveFnBS)(realtype t, N_Vector y, N_Vector *yS,
+                                    N_Vector yB, N_Vector fyB,
+                                    N_Vector rB, N_Vector zB,
+                                    realtype gammaB, realtype deltaB,
+                                    int lrB, void *user_dataB, N_Vector tmpB);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsJacTimesVecFnB
+ * -----------------------------------------------------------------
+ * A function jtimesB for the adjoint (backward) problem must have 
+ * the prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsJacTimesVecFnB)(N_Vector vB, N_Vector JvB, realtype t,
+                                     N_Vector y, N_Vector yB, N_Vector fyB,
+                                     void *jac_dataB, N_Vector tmpB);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : CVSpilsJacTimesVecFnBS
+ * -----------------------------------------------------------------
+ * A function jtimesBS for the adjoint (backward) problem must have 
+ * the prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*CVSpilsJacTimesVecFnBS)(N_Vector vB, N_Vector JvB,
+                                      realtype t, N_Vector y, N_Vector *yS,
+                                      N_Vector yB, N_Vector fyB,
+                                      void *jac_dataB, N_Vector tmpB);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Each CVSpilsSet***B or CVSpilsSet***BS function below links the
+ * main CVODES integrator with the corresponding CVSpilsSet***
+ * optional input function for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSpilsSetPrecTypeB(void *cvode_mem, int which, int pretypeB);
+SUNDIALS_EXPORT int CVSpilsSetGSTypeB(void *cvode_mem, int which, int gstypeB);
+SUNDIALS_EXPORT int CVSpilsSetEpsLinB(void *cvode_mem, int which, realtype eplifacB);
+SUNDIALS_EXPORT int CVSpilsSetMaxlB(void *cvode_mem, int which, int maxlB);
+
+SUNDIALS_EXPORT int CVSpilsSetPreconditionerB(void *cvode_mem, int which, 
+                                              CVSpilsPrecSetupFnB psetB,
+					      CVSpilsPrecSolveFnB psolveB);
+SUNDIALS_EXPORT int CVSpilsSetPreconditionerBS(void *cvode_mem, int which, 
+                                               CVSpilsPrecSetupFnBS psetBS,
+					       CVSpilsPrecSolveFnBS psolveBS);
+
+SUNDIALS_EXPORT int CVSpilsSetJacTimesVecFnB(void *cvode_mem, int which, 
+                                             CVSpilsJacTimesVecFnB jtvB);
+SUNDIALS_EXPORT int CVSpilsSetJacTimesVecFnBS(void *cvode_mem, int which, 
+                                              CVSpilsJacTimesVecFnBS jtvBS);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_sptfqmr.h b/include/cvodes/cvodes_sptfqmr.h
new file mode 100644
index 0000000..f898eda
--- /dev/null
+++ b/include/cvodes/cvodes_sptfqmr.h
@@ -0,0 +1,103 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4488 $
+ * $Date: 2015-04-29 16:39:48 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVODES scaled preconditioned TFQMR 
+ * linear solver, CVSPTFQMR.
+ *
+ * Part I contains function prototypes for using CVSPTFQMR on forward 
+ * problems (IVP integration and/or FSA)
+ *
+ * Part II contains function prototypes for using CVSPTFQMR on adjoint 
+ * (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSSPTFQMR_H
+#define _CVSSPTFQMR_H
+
+#include <cvodes/cvodes_spils.h>
+#include <sundials/sundials_sptfqmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * -----------------------------------------------------------------
+ * PART I - forward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmr
+ * -----------------------------------------------------------------
+ * A call to the CVSptfqmr function links the main CVODE integrator
+ * with the CVSPTFQMR linear solver.
+ *
+ * cvode_mem is the pointer to the integrator memory returned by
+ *           CVodeCreate.
+ *
+ * pretype   is the type of user preconditioning to be done.
+ *           This must be one of the four enumeration constants
+ *           PREC_NONE, PREC_LEFT, PREC_RIGHT, or PREC_BOTH defined
+ *           in iterative.h. These correspond to no preconditioning,
+ *           left preconditioning only, right preconditioning
+ *           only, and both left and right preconditioning,
+ *           respectively.
+ *
+ * maxl      is the maximum Krylov dimension. This is an
+ *           optional input to the CVSPTFQMR solver. Pass 0 to
+ *           use the default value CVSPILS_MAXL=5.
+ *
+ * The return value of CVSptfqmr is one of:
+ *    CVSPILS_SUCCESS   if successful
+ *    CVSPILS_MEM_NULL  if the cvode memory was NULL
+ *    CVSPILS_MEM_FAIL  if there was a memory allocation failure
+ *    CVSPILS_ILL_INPUT if a required vector operation is missing
+ * The above constants are defined in cvodes_spils.h
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSptfqmr(void *cvode_mem, int pretype, int maxl);
+
+
+/* 
+ * -----------------------------------------------------------------
+ * PART II - backward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVSptfqmrB
+ * -----------------------------------------------------------------
+ * CVSptfqmrB links the main CVODES integrator with the CVSptfqmr
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int CVSptfqmrB(void *cvode_mem, int which,
+                               int pretypeB, int maxlB);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/cvodes/cvodes_superlumt.h b/include/cvodes/cvodes_superlumt.h
new file mode 100644
index 0000000..2f437cc
--- /dev/null
+++ b/include/cvodes/cvodes_superlumt.h
@@ -0,0 +1,111 @@
+/*
+ * -----------------------------------------------------------------
+ * $Rev $
+ * $Date $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the CVSuperLUMT linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSSUPERLUMT_H
+#define _CVSSUPERLUMT_H
+
+#include "cvodes/cvodes_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSuperLUMT
+ * -----------------------------------------------------------------
+ * A call to the CVSuperLUMT function links the main integrator      
+ * with the CVSuperLUMT linear solver module.                        
+ *                                                                
+ * cv_mem is the pointer to integrator memory returned by        
+ *     CVCreate.             
+ *
+ *                                                                
+ * CVSuperLUMT returns:                                              
+ *     CVSLU_SUCCESS   = 0  if successful                              
+ *     CVSLU_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     CVSLU_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The CVSuperLUMT linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, CVSuperLUMT will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVSuperLUMT(void *cv_mem, int num_threads,
+				  int n, int nnz); 
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * CVSuperLUMTSetOrdering sets the ordering used by CVSuperLUMT for 
+ * reducing fill.
+ * Options are: 
+ * 0 for natural ordering
+ * 1 for minimal degree ordering on A'*A
+ * 2 for minimal degree ordering on A'+A
+ * 3 for approximate minimal degree ordering for unsymmetric matrices
+ * The default used in SUNDIALS is 3 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int CVSuperLUMTSetOrdering(void *cv_mem, 
+					     int ordering_choice); 
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function: CVSuperLUMTB
+ * -----------------------------------------------------------------
+ * CVSuperLUMTB links the main CVODES integrator with the CVSuperLUMT
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+ 
+  SUNDIALS_EXPORT int CVSuperLUMTB(void *cvode_mem, int which, int num_threads, 
+				   int nB, int nnzB);
+ 
+ 
+/*
+ * -----------------------------------------------------------------
+ * Function: CVSuperLUMTSetOrderingB
+ * -----------------------------------------------------------------
+ * CVSuperLUMTSetOrderingB pulls off the memory block associated with the
+ * which parameter and sets the ordering for the solver associated with that block.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ * -----------------------------------------------------------------
+ */
+ 
+  SUNDIALS_EXPORT int CVSuperLUMTSetOrderingB(void *cvode_mem, int which, 
+					      int ordering_choice);
+
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida.h b/include/ida/ida.h
new file mode 100644
index 0000000..c9ceab1
--- /dev/null
+++ b/include/ida/ida.h
@@ -0,0 +1,944 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4845 $
+ * $Date: 2016-08-03 15:45:09 -0700 (Wed, 03 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Allan G. Taylor, Alan C. Hindmarsh, Radu Serban,
+ *                and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header (include) file for the main IDA solver.
+ * -----------------------------------------------------------------
+ *
+ * IDA is used to solve numerically the initial value problem     
+ * for the differential algebraic equation (DAE) system           
+ *   F(t,y,y') = 0,                                               
+ * given initial conditions                                       
+ *   y(t0) = y0,   y'(t0) = yp0.                                  
+ * Here y and F are vectors of length N.                          
+ *
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDA_H
+#define _IDA_H
+
+#include <stdio.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus     /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *              I D A     C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * ----------------------------------------------------------------
+ * Inputs to IDAInit, IDAReInit, IDACalcIC, and IDASolve.       
+ * ----------------------------------------------------------------
+ */
+
+/* itask */
+#define IDA_NORMAL           1
+#define IDA_ONE_STEP         2
+
+/* icopt */
+#define IDA_YA_YDP_INIT      1 
+#define IDA_Y_INIT           2
+
+/* 
+ * ----------------------------------------
+ * IDA return flags 
+ * ----------------------------------------
+ */
+
+#define IDA_SUCCESS          0
+#define IDA_TSTOP_RETURN     1
+#define IDA_ROOT_RETURN      2
+
+#define IDA_WARNING          99
+
+#define IDA_TOO_MUCH_WORK   -1
+#define IDA_TOO_MUCH_ACC    -2
+#define IDA_ERR_FAIL        -3
+#define IDA_CONV_FAIL       -4
+
+#define IDA_LINIT_FAIL      -5
+#define IDA_LSETUP_FAIL     -6
+#define IDA_LSOLVE_FAIL     -7
+#define IDA_RES_FAIL        -8
+#define IDA_REP_RES_ERR     -9
+#define IDA_RTFUNC_FAIL     -10
+#define IDA_CONSTR_FAIL     -11
+
+#define IDA_FIRST_RES_FAIL  -12
+#define IDA_LINESEARCH_FAIL -13
+#define IDA_NO_RECOVERY     -14
+
+#define IDA_MEM_NULL        -20
+#define IDA_MEM_FAIL        -21
+#define IDA_ILL_INPUT       -22
+#define IDA_NO_MALLOC       -23
+#define IDA_BAD_EWT         -24
+#define IDA_BAD_K           -25
+#define IDA_BAD_T           -26
+#define IDA_BAD_DKY         -27
+
+#define IDA_UNRECOGNISED_ERROR -99
+
+/*
+ * ----------------------------------------------------------------
+ * Type : IDAResFn                                                   
+ * ----------------------------------------------------------------
+ * The F function which defines the DAE system   F(t,y,y')=0      
+ * must have type IDAResFn.                                          
+ * Symbols are as follows: 
+ *                  t  <-> t        y <-> yy               
+ *                  y' <-> yp       F <-> rr
+ * A IDAResFn takes as input the independent variable value t,    
+ * the dependent variable vector yy, and the derivative (with     
+ * respect to t) of the yy vector, yp.  It stores the result of   
+ * F(t,y,y') in the vector rr. The yy, yp, and rr arguments are of 
+ * type N_Vector. The user_data parameter is the pointer user_data 
+ * passed by the user to the IDASetUserData routine. This user-supplied 
+ * pointer is passed to the user's res function every time it is called, 
+ * to provide access in res to user data.                                    
+ *                                                                
+ * A IDAResFn res should return a value of 0 if successful, a positive
+ * value if a recoverable error occured (e.g. yy has an illegal value),
+ * or a negative value if a nonrecoverable error occured. In the latter
+ * case, the program halts. If a recoverable error occured, the integrator
+ * will attempt to correct and retry.
+ * ----------------------------------------------------------------
+ */
+
+typedef int (*IDAResFn)(realtype tt, N_Vector yy, N_Vector yp,
+			N_Vector rr, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDARootFn
+ * -----------------------------------------------------------------
+ * A function g, which defines a set of functions g_i(t,y,y') whose
+ * roots are sought during the integration, must have type IDARootFn.
+ * The function g takes as input the independent variable value t,
+ * the dependent variable vector y, and its t-derivative yp (= y').
+ * It stores the nrtfn values g_i(t,y,y') in the realtype array gout.
+ * (Allocation of memory for gout is handled within IDA.)
+ * The user_data parameter is the same as that passed by the user
+ * to the IDASetUserData routine.  This user-supplied pointer is
+ * passed to the user's g function every time it is called.
+ *
+ * An IDARootFn should return 0 if successful or a non-zero value
+ * if an error occured (in which case the integration will be halted).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDARootFn)(realtype t, N_Vector y, N_Vector yp,
+			 realtype *gout, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDAEwtFn
+ * -----------------------------------------------------------------
+ * A function e, which sets the error weight vector ewt, must have
+ * type IDAEwtFn.
+ * The function e takes as input the current dependent variable y.
+ * It must set the vector of error weights used in the WRMS norm:
+ * 
+ *   ||y||_WRMS = sqrt [ 1/N * sum ( ewt_i * y_i)^2 ]
+ *
+ * Typically, the vector ewt has components:
+ * 
+ *   ewt_i = 1 / (reltol * |y_i| + abstol_i)
+ *
+ * The user_data parameter is the same as that passed by the user
+ * to the IDASetUserData routine.  This user-supplied pointer is
+ * passed to the user's e function every time it is called.
+ * An IDAEwtFn e must return 0 if the error weight vector has been
+ * successfuly set and a non-zero value otherwise.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDAEwtFn)(N_Vector y, N_Vector ewt, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDAErrHandlerFn
+ * -----------------------------------------------------------------
+ * A function eh, which handles error messages, must have type
+ * IDAErrHandlerFn.
+ * The function eh takes as input the error code, the name of the
+ * module reporting the error, the error message, and a pointer to
+ * user data, the same as that passed to IDASetUserData.
+ * 
+ * All error codes are negative, except IDA_WARNING which indicates 
+ * a warning (the solver continues).
+ *
+ * An IDAErrHandlerFn has no return value.
+ * -----------------------------------------------------------------
+ */
+
+typedef void (*IDAErrHandlerFn)(int error_code, 
+				const char *module, const char *function, 
+				char *msg, void *user_data); 
+
+/*
+ * ================================================================
+ *          U S E R - C A L L A B L E   R O U T I N E S           
+ * ================================================================
+ */
+
+/* 
+ * ----------------------------------------------------------------
+ * Function : IDACreate                                           
+ * ----------------------------------------------------------------
+ * IDACreate creates an internal memory block for a problem to    
+ * be solved by IDA.                                              
+ *                                                                
+ * If successful, IDACreate returns a pointer to initialized      
+ * problem memory. This pointer should be passed to IDAInit.    
+ * If an initialization error occurs, IDACreate prints an error   
+ * message to standard err and returns NULL.                      
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void *IDACreate(void);
+
+/*
+ * ----------------------------------------------------------------
+ * Integrator optional input specification functions              
+ * ----------------------------------------------------------------
+ * The following functions can be called to set optional inputs   
+ * to values other than the defaults given below:                 
+ *                                                                
+ *                      |                                         
+ * Function             |  Optional input / [ default value ]     
+ *                      |                                          
+ * ---------------------------------------------------------------- 
+ *                      |                                          
+ * IDASetErrHandlerFn   | user-provided ErrHandler function.
+ *                      | [internal]
+ *                      |
+ * IDASetErrFile        | the file pointer for an error file
+ *                      | where all IDA warning and error
+ *                      | messages will be written if the default
+ *                      | internal error handling function is used. 
+ *                      | This parameter can be stdout (standard 
+ *                      | output), stderr (standard error), or a 
+ *                      | file pointer (corresponding to a user 
+ *                      | error file opened for writing) returned 
+ *                      | by fopen.
+ *                      | If not called, then all messages will
+ *                      | be written to the standard error stream.
+ *                      | [stderr]
+ *                      |                                          
+ * IDASetUserData       | a pointer to user data that will be     
+ *                      | passed to the user's res function every 
+ *                      | time a user-supplied function is called.                     
+ *                      | [NULL]                                  
+ *                      |         
+ * IDASetMaxOrd         | maximum lmm order to be used by the     
+ *                      | solver.                                 
+ *                      | [5]                                      
+ *                      |                                          
+ * IDASetMaxNumSteps    | maximum number of internal steps to be  
+ *                      | taken by the solver in its attempt to   
+ *                      | reach tout.                             
+ *                      | [500]                                   
+ *                      |                                          
+ * IDASetInitStep       | initial step size.                      
+ *                      | [estimated by IDA]                       
+ *                      |                                          
+ * IDASetMaxStep        | maximum absolute value of step size     
+ *                      | allowed.                                
+ *                      | [infinity]                              
+ *                      |                                          
+ * IDASetStopTime       | the independent variable value past     
+ *                      | which the solution is not to proceed.   
+ *                      | [infinity]                              
+ *                      |                                          
+ * IDASetNonlinConvCoef | Newton convergence test  constant       
+ *                      | for use during integration.             
+ *                      | [0.33]                                  
+ *                      |                                          
+ * IDASetMaxErrTestFails| Maximum number of error test failures   
+ *                      | in attempting one step.                 
+ *                      | [10]                                    
+ *                      |                                         
+ * IDASetMaxNonlinIters | Maximum number of nonlinear solver      
+ *                      | iterations at one solution.             
+ *                      | [4]                                     
+ *                      |                                         
+ * IDASetMaxConvFails   | Maximum number of allowable conv.       
+ *                      | failures in attempting one step.        
+ *                      | [10]                                    
+ *                      |                                         
+ * IDASetSuppressAlg    | flag to indicate whether or not to      
+ *                      | suppress algebraic variables in the     
+ *                      | local error tests:                      
+ *                      | FALSE = do not suppress;                 
+ *                      | TRUE = do suppress;                     
+ *                      | [FALSE]                                 
+ *                      | NOTE: if suppressed algebraic variables 
+ *                      | is selected, the nvector 'id' must be   
+ *                      | supplied for identification of those    
+ *                      | algebraic components (see IDASetId).    
+ *                      |                                          
+ * IDASetId             | an N_Vector, which states a given       
+ *                      | element to be either algebraic or       
+ *                      | differential.                           
+ *                      | A value of 1.0 indicates a differential 
+ *                      | variable while a 0.0 indicates an       
+ *                      | algebraic variable. 'id' is required    
+ *                      | if optional input SUPPRESSALG is set,   
+ *                      | or if IDACalcIC is to be called with    
+ *                      | icopt = IDA_YA_YDP_INIT.               
+ *                      |                                         
+ * IDASetConstraints    | an N_Vector defining inequality         
+ *                      | constraints for each component of the   
+ *                      | solution vector y. If a given element   
+ *                      | of this vector has values +2 or -2,     
+ *                      | then the corresponding component of y   
+ *                      | will be constrained to be > 0.0 or      
+ *                      | <0.0, respectively, while if it is +1   
+ *                      | or -1, the y component is constrained   
+ *                      | to be >= 0.0 or <= 0.0, respectively.   
+ *                      | If a component of constraints is 0.0,   
+ *                      | then no constraint is imposed on the    
+ *                      | corresponding component of y.           
+ *                      | The presence of a non-NULL constraints  
+ *                      | vector that is not 0.0 (ZERO) in all    
+ *                      | components will cause constraint        
+ *                      | checking to be performed.               
+ *                      |                                         
+ * -----------------------------------------------------------------
+ *                          |
+ * IDASetRootDirection      | Specifies the direction of zero
+ *                          | crossings to be monitored
+ *                          | [both directions]
+ *                          |
+ * IDASetNoInactiveRootWarn | disable warning about possible
+ *                          | g==0 at beginning of integration
+ *                          | 
+ * -----------------------------------------------------------------
+ * Return flag:
+ *   IDA_SUCCESS   if successful
+ *   IDA_MEM_NULL  if the ida memory is NULL
+ *   IDA_ILL_INPUT if an argument has an illegal value
+ *
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASetErrHandlerFn(void *ida_mem, IDAErrHandlerFn ehfun, void *eh_data);
+SUNDIALS_EXPORT int IDASetErrFile(void *ida_mem, FILE *errfp);
+SUNDIALS_EXPORT int IDASetUserData(void *ida_mem, void *user_data);
+SUNDIALS_EXPORT int IDASetMaxOrd(void *ida_mem, int maxord);
+SUNDIALS_EXPORT int IDASetMaxNumSteps(void *ida_mem, long int mxsteps);
+SUNDIALS_EXPORT int IDASetInitStep(void *ida_mem, realtype hin);
+SUNDIALS_EXPORT int IDASetMaxStep(void *ida_mem, realtype hmax);
+SUNDIALS_EXPORT int IDASetStopTime(void *ida_mem, realtype tstop);
+SUNDIALS_EXPORT int IDASetNonlinConvCoef(void *ida_mem, realtype epcon);
+SUNDIALS_EXPORT int IDASetMaxErrTestFails(void *ida_mem, int maxnef);
+SUNDIALS_EXPORT int IDASetMaxNonlinIters(void *ida_mem, int maxcor);
+SUNDIALS_EXPORT int IDASetMaxConvFails(void *ida_mem, int maxncf);
+SUNDIALS_EXPORT int IDASetSuppressAlg(void *ida_mem, booleantype suppressalg);
+SUNDIALS_EXPORT int IDASetId(void *ida_mem, N_Vector id);
+SUNDIALS_EXPORT int IDASetConstraints(void *ida_mem, N_Vector constraints);
+
+SUNDIALS_EXPORT int IDASetRootDirection(void *ida_mem, int *rootdir);
+SUNDIALS_EXPORT int IDASetNoInactiveRootWarn(void *ida_mem);
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDAInit                                           
+ * ----------------------------------------------------------------
+ * IDAInit allocates and initializes memory for a problem to    
+ * to be solved by IDA.                                           
+ *                                                                
+ * res     is the residual function F in F(t,y,y') = 0.                     
+ *                                                                
+ * t0      is the initial value of t, the independent variable.   
+ *                                                                
+ * yy0     is the initial condition vector y(t0).                 
+ *                                                                
+ * yp0     is the initial condition vector y'(t0)                 
+ *                                                                
+ *  IDA_SUCCESS if successful
+ *  IDA_MEM_NULL if the ida memory was NULL
+ *  IDA_MEM_FAIL if a memory allocation failed
+ *  IDA_ILL_INPUT f an argument has an illegal value.
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAInit(void *ida_mem, IDAResFn res,
+                            realtype t0, N_Vector yy0, N_Vector yp0);
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDAReInit                                           
+ * ----------------------------------------------------------------
+ * IDAReInit re-initializes IDA for the solution of a problem,    
+ * where a prior call to IDAInit has been made.                 
+ * IDAReInit performs the same input checking and initializations 
+ * that IDAInit does.                                           
+ * But it does no memory allocation, assuming that the existing   
+ * internal memory is sufficient for the new problem.             
+ *                                                                
+ * The use of IDAReInit requires that the maximum method order,   
+ * maxord, is no larger for the new problem than for the problem  
+ * specified in the last call to IDAInit.  This condition is    
+ * automatically fulfilled if the default value for maxord is     
+ * specified.                                                     
+ *                                                                
+ * Following the call to IDAReInit, a call to the linear solver   
+ * specification routine is necessary if a different linear solver
+ * is chosen, but may not be otherwise.  If the same linear solver
+ * is chosen, and there are no changes in its input parameters,   
+ * then no call to that routine is needed.                        
+ *                                                                
+ * The first argument to IDAReInit is:                            
+ *                                                                
+ * ida_mem = pointer to IDA memory returned by IDACreate.         
+ *                                                                
+ * All the remaining arguments to IDAReInit have names and        
+ * meanings identical to those of IDAInit.                      
+ *                                                                
+ * The return value of IDAReInit is equal to SUCCESS = 0 if there 
+ * were no errors; otherwise it is a negative int equal to:       
+ *   IDA_MEM_NULL   indicating ida_mem was NULL, or            
+ *   IDA_NO_MALLOC  indicating that ida_mem was not allocated. 
+ *   IDA_ILL_INPUT  indicating an input argument was illegal   
+ *                  (including an attempt to increase maxord). 
+ * In case of an error return, an error message is also printed.  
+ * ----------------------------------------------------------------
+ */                                                                
+
+SUNDIALS_EXPORT int IDAReInit(void *ida_mem,
+			      realtype t0, N_Vector yy0, N_Vector yp0);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : IDASStolerances
+ *             IDASVtolerances
+ *             IDAWFtolerances
+ * -----------------------------------------------------------------
+ *
+ * These functions specify the integration tolerances. One of them
+ * MUST be called before the first call to IDA.
+ *
+ * IDASStolerances specifies scalar relative and absolute tolerances.
+ * IDASVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component).
+ * IDAWFtolerances specifies a user-provides function (of type IDAEwtFn)
+ *   which will be called to set the error weight vector.
+ *
+ * The tolerances reltol and abstol define a vector of error weights,
+ * ewt, with components
+ *   ewt[i] = 1/(reltol*abs(y[i]) + abstol)      (in the SS case), or
+ *   ewt[i] = 1/(reltol*abs(y[i]) + abstol[i])   (in the SV case).
+ * This vector is used in all error and convergence tests, which
+ * use a weighted RMS norm on all error-like vectors v:
+ *    WRMSnorm(v) = sqrt( (1/N) sum(i=1..N) (v[i]*ewt[i])^2 ),
+ * where N is the problem dimension.
+ *
+ * The return value of these functions is equal to IDA_SUCCESS = 0 if
+ * there were no errors; otherwise it is a negative int equal to:
+ *   IDa_MEM_NULL     indicating ida_mem was NULL (i.e.,
+ *                    IDACreate has not been called).
+ *   IDA_NO_MALLOC    indicating that ida_mem has not been
+ *                    allocated (i.e., IDAInit has not been
+ *                    called).
+ *   IDA_ILL_INPUT    indicating an input argument was illegal
+ *                    (e.g. a negative tolerance)
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASStolerances(void *ida_mem, realtype reltol, realtype abstol);
+SUNDIALS_EXPORT int IDASVtolerances(void *ida_mem, realtype reltol, N_Vector abstol);
+SUNDIALS_EXPORT int IDAWFtolerances(void *ida_mem, IDAEwtFn efun);
+ 
+/* ----------------------------------------------------------------
+ * Initial Conditions optional input specification functions      
+ * ----------------------------------------------------------------
+ * The following functions can be called to set optional inputs   
+ * to control the initial conditions calculations.                
+ *                                                                
+ *                        |                                        
+ * Function               |  Optional input / [ default value ]   
+ *                        |                                        
+ * -------------------------------------------------------------- 
+ *                        |                                        
+ * IDASetNonlinConvCoefIC | positive coeficient in the Newton     
+ *                        | convergence test.  This test uses a   
+ *                        | weighted RMS norm (with weights       
+ *                        | defined by the tolerances, as in      
+ *                        | IDASolve).  For new initial value     
+ *                        | vectors y and y' to be accepted, the  
+ *                        | norm of J-inverse F(t0,y,y') is       
+ *                        | required to be less than epiccon,     
+ *                        | where J is the system Jacobian.       
+ *                        | [0.01 * 0.33]                          
+ *                        |                                        
+ * IDASetMaxNumStepsIC    | maximum number of values of h allowed 
+ *                        | when icopt = IDA_YA_YDP_INIT, where  
+ *                        | h appears in the system Jacobian,     
+ *                        | J = dF/dy + (1/h)dF/dy'.              
+ *                        | [5]                                   
+ *                        |                                        
+ * IDASetMaxNumJacsIC     | maximum number of values of the       
+ *                        | approximate Jacobian or preconditioner
+ *                        | allowed, when the Newton iterations   
+ *                        | appear to be slowly converging.       
+ *                        | [4]                                    
+ *                        |                                        
+ * IDASetMaxNumItersIC    | maximum number of Newton iterations   
+ *                        | allowed in any one attempt to solve   
+ *                        | the IC problem.                       
+ *                        | [10]                                  
+ *                        |                                        
+ * IDASetLineSearchOffIC  | a boolean flag to turn off the        
+ *                        | linesearch algorithm.                 
+ *                        | [FALSE]                               
+ *                        |                                        
+ * IDASetStepToleranceIC  | positive lower bound on the norm of   
+ *                        | a Newton step.                        
+ *                        | [(unit roundoff)^(2/3)                
+ *                                                                
+ * ---------------------------------------------------------------- 
+ * Return flag:
+ *   IDA_SUCCESS   if successful
+ *   IDA_MEM_NULL  if the ida memory is NULL
+ *   IDA_ILL_INPUT if an argument has an illegal value
+ *
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASetNonlinConvCoefIC(void *ida_mem, realtype epiccon);
+SUNDIALS_EXPORT int IDASetMaxNumStepsIC(void *ida_mem, int maxnh);
+SUNDIALS_EXPORT int IDASetMaxNumJacsIC(void *ida_mem, int maxnj);
+SUNDIALS_EXPORT int IDASetMaxNumItersIC(void *ida_mem, int maxnit);
+SUNDIALS_EXPORT int IDASetLineSearchOffIC(void *ida_mem, booleantype lsoff);
+SUNDIALS_EXPORT int IDASetStepToleranceIC(void *ida_mem, realtype steptol);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDARootInit
+ * -----------------------------------------------------------------
+ * IDARootInit initializes a rootfinding problem to be solved
+ * during the integration of the DAE system.  It must be called
+ * after IDACreate, and before IDASolve.  The arguments are:
+ *
+ * ida_mem = pointer to IDA memory returned by IDACreate.
+ *
+ * nrtfn   = number of functions g_i, an int >= 0.
+ *
+ * g       = name of user-supplied function, of type IDARootFn,
+ *           defining the functions g_i whose roots are sought.
+ *
+ * If a new problem is to be solved with a call to IDAReInit,
+ * where the new problem has no root functions but the prior one
+ * did, then call IDARootInit with nrtfn = 0.
+ *
+ * The return value of IDARootInit is IDA_SUCCESS = 0 if there were
+ * no errors; otherwise it is a negative int equal to:
+ *   IDA_MEM_NULL     indicating ida_mem was NULL, or
+ *   IDA_MEM_FAIL     indicating a memory allocation failed.
+ *                    (including an attempt to increase maxord).
+ *   IDA_ILL_INPUT    indicating nrtfn > 0 but g = NULL.
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDARootInit(void *ida_mem, int nrtfn, IDARootFn g);
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDACalcIC                                           
+ * ----------------------------------------------------------------
+ * IDACalcIC calculates corrected initial conditions for the DAE  
+ * system for a class of index-one problems of semi-implicit form.
+ * It uses Newton iteration combined with a Linesearch algorithm. 
+ * Calling IDACalcIC is optional. It is only necessary when the   
+ * initial conditions do not solve the given system.  I.e., if    
+ * y0 and yp0 are known to satisfy F(t0, y0, yp0) = 0, then       
+ * a call to IDACalcIC is NOT necessary (for index-one problems). 
+ *                                                                
+ * A call to IDACalcIC must be preceded by a successful call to   
+ * IDAInit or IDAReInit for the given DAE problem, and by a     
+ * successful call to the linear system solver specification      
+ * routine.                                                       
+ *                                                                
+ * The call to IDACalcIC should precede the call(s) to IDASolve   
+ * for the given problem.                                         
+ *                                                                
+ * The arguments to IDACalcIC are as follows:                     
+ *                                                                
+ * ida_mem is the pointer to IDA memory returned by IDACreate.    
+ *                                                                
+ * icopt  is the option of IDACalcIC to be used.                  
+ *        icopt = IDA_YA_YDP_INIT   directs IDACalcIC to compute 
+ *                the algebraic components of y and differential  
+ *                components of y', given the differential        
+ *                components of y.  This option requires that the 
+ *                N_Vector id was set through a call to IDASetId  
+ *                specifying the differential and algebraic       
+ *                components.                                     
+ *        icopt = IDA_Y_INIT   directs IDACalcIC to compute all  
+ *                components of y, given y'.  id is not required. 
+ *                                                                
+ * tout1  is the first value of t at which a soluton will be      
+ *        requested (from IDASolve).  (This is needed here to     
+ *        determine the direction of integration and rough scale  
+ *        in the independent variable t.)                          
+ *                                                                
+ *                                                                
+ * IDACalcIC returns an int flag.  Its symbolic values and their  
+ * meanings are as follows.  (The numerical return values are set 
+ * above in this file.)  All unsuccessful returns give a negative 
+ * return value.  If IFACalcIC failed, y0 and yp0 contain         
+ * (possibly) altered values, computed during the attempt.        
+ *                                                                
+ * IDA_SUCCESS         IDACalcIC was successful.  The corrected   
+ *                     initial value vectors were stored internally.
+ *                                                                
+ * IDA_MEM_NULL        The argument ida_mem was NULL.             
+ *                                                                
+ * IDA_ILL_INPUT       One of the input arguments was illegal.    
+ *                     See printed message.                       
+ *                                                                
+ * IDA_LINIT_FAIL      The linear solver's init routine failed.   
+ *                                                                
+ * IDA_BAD_EWT         Some component of the error weight vector  
+ *                     is zero (illegal), either for the input    
+ *                     value of y0 or a corrected value.          
+ *                                                                
+ * IDA_RES_FAIL        The user's residual routine returned 
+ *                     a non-recoverable error flag.              
+ *                                                                
+ * IDA_FIRST_RES_FAIL  The user's residual routine returned 
+ *                     a recoverable error flag on the first call,
+ *                     but IDACalcIC was unable to recover.       
+ *                                                                
+ * IDA_LSETUP_FAIL     The linear solver's setup routine had a    
+ *                     non-recoverable error.                     
+ *                                                                
+ * IDA_LSOLVE_FAIL     The linear solver's solve routine had a    
+ *                     non-recoverable error.                     
+ *                                                                
+ * IDA_NO_RECOVERY     The user's residual routine, or the linear 
+ *                     solver's setup or solve routine had a      
+ *                     recoverable error, but IDACalcIC was       
+ *                     unable to recover.                         
+ *                                                                
+ * IDA_CONSTR_FAIL     IDACalcIC was unable to find a solution    
+ *                     satisfying the inequality constraints.     
+ *                                                                
+ * IDA_LINESEARCH_FAIL The Linesearch algorithm failed to find a  
+ *                     solution with a step larger than steptol   
+ *                     in weighted RMS norm.                      
+ *                                                                
+ * IDA_CONV_FAIL       IDACalcIC failed to get convergence of the 
+ *                     Newton iterations.                         
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDACalcIC(void *ida_mem, int icopt, realtype tout1); 
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDASolve                                            
+ * ----------------------------------------------------------------
+ * IDASolve integrates the DAE over an interval in t, the         
+ * independent variable. If itask is IDA_NORMAL, then the solver      
+ * integrates from its current internal t value to a point at or  
+ * beyond tout, then interpolates to t = tout and returns y(tret) 
+ * in the user-allocated vector yret. In general, tret = tout.    
+ * If itask is IDA_ONE_STEP, then the solver takes one internal
+ * step of the independent variable and returns in yret the value
+ * of y at the new internal independent variable value. In this
+ * case, tout is used only during the first call to IDASolve to         
+ * determine the direction of integration and the rough scale of  
+ * the problem. If tstop is enabled (through a call to IDASetStopTime),
+ * then IDASolve returns the solution at tstop. Once the integrator
+ * returns at a tstop time, any future testing for tstop is disabled
+ * (and can be reenabled only though a new call to IDASetStopTime).
+ * The time reached by the solver is placed in (*tret). The
+ * user is responsible for allocating the memory for this value.
+ *                                                                
+ * ida_mem is the pointer (void) to IDA memory returned by        
+ *         IDACreate.
+ *                                                                
+ * tout    is the next independent variable value at which a      
+ *         computed solution is desired.                          
+ *                                                                
+ * tret    is a pointer to a real location.  IDASolve sets (*tret)
+ *         to the actual t value reached, corresponding to the
+ *         solution vector yret.  In IDA_NORMAL mode, with no
+ *         errors and no roots found, (*tret) = tout.
+ *
+ * yret    is the computed solution vector.  With no errors,
+ *         yret = y(tret).                                        
+ *                                                                
+ * ypret   is the derivative of the computed solution at t = tret.
+ *                                                                
+ * Note: yret and ypret may be the same N_Vectors as y0 and yp0   
+ * in the call to IDAInit or IDAReInit.                         
+ *                                                                
+ * itask   is IDA_NORMAL or IDA_ONE_STEP. These two modes are described above.
+ *
+ *
+ * The return values for IDASolve are described below.            
+ * (The numerical return values are defined above in this file.)  
+ * All unsuccessful returns give a negative return value.         
+ *                                                                
+ * IDA_SUCCESS
+ *   IDASolve succeeded and no roots were found.                       
+ *
+ * IDA_ROOT_RETURN:  IDASolve succeeded, and found one or more roots.
+ *   If nrtfn > 1, call IDAGetRootInfo to see which g_i were found
+ *   to have a root at (*tret).
+ *
+ * IDA_TSTOP_RETURN: 
+ *   IDASolve returns computed results for the independent variable 
+ *   value tstop. That is, tstop was reached.                            
+ *                                                                
+ * IDA_MEM_NULL: 
+ *   The IDA_mem argument was NULL.            
+ *                                                                
+ * IDA_ILL_INPUT: 
+ *   One of the inputs to IDASolve is illegal. This includes the 
+ *   situation when a component of the error weight vectors 
+ *   becomes < 0 during internal stepping.  It also includes the
+ *   situation where a root of one of the root functions was found
+ *   both at t0 and very near t0.  The ILL_INPUT flag          
+ *   will also be returned if the linear solver function IDA---
+ *   (called by the user after calling IDACreate) failed to set one 
+ *   of the linear solver-related fields in ida_mem or if the linear 
+ *   solver's init routine failed. In any case, the user should see 
+ *   the printed error message for more details.                
+ *                                                                
+ * IDA_TOO_MUCH_WORK: 
+ *   The solver took mxstep internal steps but could not reach tout. 
+ *   The default value for mxstep is MXSTEP_DEFAULT = 500.                
+ *                                                                
+ * IDA_TOO_MUCH_ACC: 
+ *   The solver could not satisfy the accuracy demanded by the user 
+ *   for some internal step.   
+ *                                                                
+ * IDA_ERR_FAIL:
+ *   Error test failures occurred too many times (=MXETF = 10) during 
+ *   one internal step.  
+ *                                                                
+ * IDA_CONV_FAIL: 
+ *   Convergence test failures occurred too many times (= MXNCF = 10) 
+ *   during one internal step.                                          
+ *                                                                
+ * IDA_LSETUP_FAIL: 
+ *   The linear solver's setup routine failed  
+ *   in an unrecoverable manner.                    
+ *                                                                
+ * IDA_LSOLVE_FAIL: 
+ *   The linear solver's solve routine failed  
+ *   in an unrecoverable manner.                    
+ *                                                                
+ * IDA_CONSTR_FAIL:
+ *    The inequality constraints were violated, 
+ *    and the solver was unable to recover.         
+ *                                                                
+ * IDA_REP_RES_ERR: 
+ *    The user's residual function repeatedly returned a recoverable 
+ *    error flag, but the solver was unable to recover.                 
+ *                                                                
+ * IDA_RES_FAIL:
+ *    The user's residual function returned a nonrecoverable error 
+ *    flag.
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASolve(void *ida_mem, realtype tout, realtype *tret,
+			     N_Vector yret, N_Vector ypret, int itask);
+
+/*
+ * ----------------------------------------------------------------
+ * Function: IDAGetDky                                     
+ * ----------------------------------------------------------------
+ *
+ * This routine computes the k-th derivative of the interpolating
+ * polynomial at the time t and stores the result in the vector dky.
+ *
+ * The return values are:                                         
+ *   IDA_SUCCESS:  succeess.                                  
+ *   IDA_BAD_T:    t is not in the interval [tn-hu,tn].                   
+ *   IDA_MEM_NULL: The ida_mem argument was NULL.
+ *   IDA_BAD_DKY  if the dky vector is NULL.
+ *   IDA_BAD_K    if the requested k is not in the range 0,1,...,order used 
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetDky(void *ida_mem, realtype t, int k, N_Vector dky);
+
+/* ----------------------------------------------------------------
+ * Integrator optional output extraction functions                
+ * ----------------------------------------------------------------
+ *                                                                
+ * The following functions can be called to get optional outputs  
+ * and statistics related to the main integrator.                 
+ * ---------------------------------------------------------------- 
+ *                                                                
+ * IDAGetWorkSpace returns the IDA real and integer workspace sizes      
+ * IDAGetNumSteps returns the cumulative number of internal       
+ *       steps taken by the solver                                
+ * IDAGetNumRhsEvals returns the number of calls to the user's    
+ *       res function                                             
+ * IDAGetNumLinSolvSetups returns the number of calls made to     
+ *       the linear solver's setup routine                        
+ * IDAGetNumErrTestFails returns the number of local error test   
+ *       failures that have occured                               
+ * IDAGetNumBacktrackOps returns the number of backtrack          
+ *       operations done in the linesearch algorithm in IDACalcIC 
+ * IDAGetConsistentIC returns the consistent initial conditions
+ *       computed by IDACalcIC
+ * IDAGetLastOrder returns the order used during the last         
+ *       internal step                                            
+ * IDAGetCurentOrder returns the order to be used on the next     
+ *       internal step                                            
+ * IDAGetActualInitStep returns the actual initial step size      
+ *       used by IDA                                              
+ * IDAGetLAstStep returns the step size for the last internal     
+ *       step (if from IDASolve), or the last value of the        
+ *       artificial step size h (if from IDACalcIC)               
+ * IDAGetCurrentStep returns the step size to be attempted on the 
+ *       next internal step                                       
+ * IDAGetCurrentTime returns the current internal time reached    
+ *       by the solver                                            
+ * IDAGetTolScaleFactor returns a suggested factor by which the   
+ *       user's tolerances should be scaled when too much         
+ *       accuracy has been requested for some internal step       
+ * IDAGetErrWeights returns the current state error weight vector.        
+ *       The user must allocate space for eweight.
+ * IDAGetEstLocalErrors returns the estimated local errors. The user
+ *       must allocate space for the vector ele.
+ * IDAGetNumGEvals returns the number of calls to the user's
+ *       g function (for rootfinding)
+ * IDAGetRootInfo returns the indices for which g_i was found to 
+ *       have a root. The user must allocate space for rootsfound.
+ *       For i = 0 ... nrtfn-1, rootsfound[i] = 1 if g_i has a root,
+ *       and rootsfound[i]= 0 if not.
+ *                                                                
+ * IDAGet* return values:
+ *   IDA_SUCCESS   if succesful
+ *   IDA_MEM_NULL  if the ida memory was NULL
+ *   IDA_ILL_INPUT if some input is illegal
+ *
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetWorkSpace(void *ida_mem, long int *lenrw, long int *leniw);
+SUNDIALS_EXPORT int IDAGetNumSteps(void *ida_mem, long int *nsteps);
+SUNDIALS_EXPORT int IDAGetNumResEvals(void *ida_mem, long int *nrevals);
+SUNDIALS_EXPORT int IDAGetNumLinSolvSetups(void *ida_mem, long int *nlinsetups);
+SUNDIALS_EXPORT int IDAGetNumErrTestFails(void *ida_mem, long int *netfails);
+SUNDIALS_EXPORT int IDAGetNumBacktrackOps(void *ida_mem, long int *nbacktr);
+SUNDIALS_EXPORT int IDAGetConsistentIC(void *ida_mem, N_Vector yy0_mod, N_Vector yp0_mod);
+SUNDIALS_EXPORT int IDAGetLastOrder(void *ida_mem, int *klast);
+SUNDIALS_EXPORT int IDAGetCurrentOrder(void *ida_mem, int *kcur);
+SUNDIALS_EXPORT int IDAGetActualInitStep(void *ida_mem, realtype *hinused);
+SUNDIALS_EXPORT int IDAGetLastStep(void *ida_mem, realtype *hlast);
+SUNDIALS_EXPORT int IDAGetCurrentStep(void *ida_mem, realtype *hcur);
+SUNDIALS_EXPORT int IDAGetCurrentTime(void *ida_mem, realtype *tcur);
+SUNDIALS_EXPORT int IDAGetTolScaleFactor(void *ida_mem, realtype *tolsfact);
+SUNDIALS_EXPORT int IDAGetErrWeights(void *ida_mem, N_Vector eweight);
+SUNDIALS_EXPORT int IDAGetEstLocalErrors(void *ida_mem, N_Vector ele);
+SUNDIALS_EXPORT int IDAGetNumGEvals(void *ida_mem, long int *ngevals);
+SUNDIALS_EXPORT int IDAGetRootInfo(void *ida_mem, int *rootsfound);
+
+/*
+ * ----------------------------------------------------------------
+ * As a convenience, the following function provides the          
+ * optional outputs in a group.                                   
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetIntegratorStats(void *ida_mem, long int *nsteps, 
+                                          long int *nrevals, long int *nlinsetups, 
+                                          long int *netfails, int *qlast, int *qcur, 
+                                          realtype *hinused, realtype *hlast, realtype *hcur, 
+                                          realtype *tcur);
+
+/*
+ * ----------------------------------------------------------------
+ * Nonlinear solver optional output extraction functions          
+ * ----------------------------------------------------------------
+ *                                                                
+ * The following functions can be called to get optional outputs  
+ * and statistics related to the nonlinear solver.                
+ * -------------------------------------------------------------- 
+ *                                                                
+ * IDAGetNumNonlinSolvIters returns the number of nonlinear       
+ *       solver iterations performed.                             
+ * IDAGetNumNonlinSolvConvFails returns the number of nonlinear   
+ *       convergence failures.                                    
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetNumNonlinSolvIters(void *ida_mem, long int *nniters);
+SUNDIALS_EXPORT int IDAGetNumNonlinSolvConvFails(void *ida_mem, long int *nncfails);
+
+/*
+ * ----------------------------------------------------------------
+ * As a convenience, the following function provides the          
+ * nonlinear solver optional outputs in a group.                                   
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetNonlinSolvStats(void *ida_mem, long int *nniters, 
+					  long int *nncfails);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with an IDA return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *IDAGetReturnFlagName(long int flag);
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDAFree                                             
+ * ----------------------------------------------------------------
+ * IDAFree frees the problem memory IDA_mem allocated by          
+ * IDAInit.  Its only argument is the pointer idamem            
+ * returned by IDAInit.                                         
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void IDAFree(void **ida_mem);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_band.h b/include/ida/ida_band.h
new file mode 100644
index 0000000..1f2242d
--- /dev/null
+++ b/include/ida/ida_band.h
@@ -0,0 +1,64 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh, and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDABAND linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDABAND_H
+#define _IDABAND_H
+
+#include <ida/ida_direct.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDABand
+ * -----------------------------------------------------------------
+ * A call to the IDABand function links the main integrator       
+ * with the IDABAND linear solver module.                         
+ *                                                                
+ * ida_mem is the pointer to the integrator memory returned by    
+ *         IDACreate.                                                   
+ *                                                                
+ * mupper is the upper bandwidth of the banded Jacobian matrix.   
+ *                                                                
+ * mlower is the lower bandwidth of the banded Jacobian matrix.   
+ *                                                                
+ * The return values of IDABand are:                              
+ *     IDADLS_SUCCESS   = 0  if successful                            
+ *     IDADLS_LMEM_FAIL = -1 if there was a memory allocation failure 
+ *     IDADLS_ILL_INPUT = -2 if the input was illegal or NVECTOR bad. 
+ *                                                                
+ * NOTE: The band linear solver assumes a serial implementation   
+ *       of the NVECTOR package. Therefore, IDABand will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the N_VGetArrayPointer function exists.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDABand(void *ida_mem, long int Neq, long int mupper, long int mlower);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_bbdpre.h b/include/ida/ida_bbdpre.h
new file mode 100644
index 0000000..4c790fc
--- /dev/null
+++ b/include/ida/ida_bbdpre.h
@@ -0,0 +1,280 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh, Radu Serban and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDABBDPRE module, for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with IDA and
+ * IDASPGMR/IDASPBCG/IDASPTFQMR.
+ *
+ * Summary:
+ *
+ * These routines provide a preconditioner matrix that is
+ * block-diagonal with banded blocks. The blocking corresponds
+ * to the distribution of the dependent variable vector y among
+ * the processors. Each preconditioner block is generated from
+ * the Jacobian of the local part (on the current processor) of a
+ * given function G(t,y,y') approximating F(t,y,y'). The blocks
+ * are generated by a difference quotient scheme on each processor
+ * independently. This scheme utilizes an assumed banded structure
+ * with given half-bandwidths, mudq and mldq. However, the banded
+ * Jacobian block kept by the scheme has half-bandwiths mukeep and
+ * mlkeep, which may be smaller.
+ *
+ * The user's calling program should have the following form:
+ *
+ *   #include <ida/ida_bbdpre.h>
+ *   #include <nvector_parallel.h>
+ *   ...
+ *   y0  = N_VNew_Parallel(...);
+ *   yp0 = N_VNew_Parallel(...);
+ *   ...
+ *   ida_mem = IDACreate(...);
+ *   ier = IDAInit(...);
+ *   ...
+ *   flag = IDASptfqmr(ida_mem, maxl);
+ *       -or-
+ *   flag = IDASpgmr(ida_mem, maxl);
+ *       -or-
+ *   flag = IDASpbcg(ida_mem, maxl);
+ *   ...
+ *   flag = IDABBDPrecInit(ida_mem, Nlocal, mudq, mldq,
+ *                         mukeep, mlkeep, dq_rel_yy, Gres, Gcomm);
+ *   ...
+ *   ier = IDASolve(...);
+ *   ...
+ *   IDAFree(&ida_mem);
+ *
+ *   N_VDestroy(y0);
+ *   N_VDestroy(yp0);
+ *
+ * The user-supplied routines required are:
+ *
+ *   res  is the function F(t,y,y') defining the DAE system to
+ *   be solved:  F(t,y,y') = 0.
+ *
+ *   Gres  is the function defining a local approximation
+ *   G(t,y,y') to F, for the purposes of the preconditioner.
+ *
+ *   Gcomm  is the function performing communication needed
+ *   for Glocal.
+ *
+ * Notes:
+ *
+ * 1) This header file is included by the user for the definition
+ *    of the IBBDPrecData type and for needed function prototypes.
+ *
+ * 2) The IDABBDPrecInit call includes half-bandwidths mudq and
+ *    mldq to be used in the approximate Jacobian. They need
+ *    not be the true half-bandwidths of the Jacobian of the
+ *    local block of G, when smaller values may provide a greater
+ *    efficiency. Similarly, mukeep and mlkeep, specifying the
+ *    bandwidth kept for the approximate Jacobian, need not be
+ *    the true half-bandwidths. Also, mukeep, mlkeep, mudq, and
+ *    mldq need not be the same on every processor.
+ *
+ * 3) The actual name of the user's res function is passed to
+ *    IDAInit, and the names of the user's Gres and Gcomm
+ *    functions are passed to IDABBDPrecInit.        
+ *
+ * 4) The pointer to the user-defined data block user_data, which
+ *    is set through IDASetUserData is also available to the user
+ *    in glocal and gcomm.
+ *
+ * 5) Optional outputs specific to this module are available by
+ *    way of routines listed below. These include work space sizes
+ *    and the cumulative number of glocal calls. The costs
+ *    associated with this module also include nsetups banded LU
+ *    factorizations, nsetups gcomm calls, and nps banded
+ *    backsolve calls, where nsetups and nps are integrator
+ *    optional outputs.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDABBDPRE_H
+#define _IDABBDPRE_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus     /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDABBDLocalFn
+ * -----------------------------------------------------------------
+ * The user must supply a function G(t,y,y') which approximates
+ * the function F for the system F(t,y,y') = 0, and which is
+ * computed locally (without interprocess communication).
+ * (The case where G is mathematically identical to F is allowed.)
+ * The implementation of this function must have type IDABBDLocalFn.
+ *
+ * This function takes as input the independent variable value tt,
+ * the current solution vector yy, the current solution
+ * derivative vector yp, and a pointer to the user-defined data
+ * block user_data. It is to compute the local part of G(t,y,y')
+ * and store it in the vector gval. (Providing memory for yy and
+ * gval is handled within this preconditioner module.) It is
+ * expected that this routine will save communicated data in work
+ * space defined by the user, and made available to the
+ * preconditioner function for the problem. The user_data
+ * parameter is the same as that passed by the user to the
+ * IDASetUserdata routine.
+ *
+ * An IDABBDLocalFn Gres is to return an int, defined in the same
+ * way as for the residual function: 0 (success), +1 or -1 (fail).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDABBDLocalFn)(long int Nlocal, realtype tt,
+			     N_Vector yy, N_Vector yp, N_Vector gval,
+			     void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDABBDCommFn
+ * -----------------------------------------------------------------
+ * The user may supply a function of type IDABBDCommFn which
+ * performs all interprocess communication necessary to
+ * evaluate the approximate system function described above.
+ *
+ * This function takes as input the solution vectors yy and yp,
+ * and a pointer to the user-defined data block user_data. The
+ * user_data parameter is the same as that passed by the user to
+ * the IDASetUserData routine.
+ *
+ * The IDABBDCommFn Gcomm is expected to save communicated data in
+ * space defined with the structure *user_data.
+ *
+ * A IDABBDCommFn Gcomm returns an int value equal to 0 (success),
+ * > 0 (recoverable error), or < 0 (unrecoverable error).
+ *
+ * Each call to the IDABBDCommFn is preceded by a call to the system
+ * function res with the same vectors yy and yp. Thus the
+ * IDABBDCommFn gcomm can omit any communications done by res if
+ * relevant to the evaluation of the local function glocal.
+ * A NULL communication function can be passed to IDABBDPrecInit
+ * if all necessary communication was done by res.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDABBDCommFn)(long int Nlocal, realtype tt,
+			    N_Vector yy, N_Vector yp,
+			    void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDABBDPrecInit
+ * -----------------------------------------------------------------
+ * IDABBDPrecInit allocates and initializes the BBD preconditioner.
+ *
+ * The parameters of IDABBDPrecInit are as follows:
+ *
+ * ida_mem  is a pointer to the memory blockreturned by IDACreate.
+ *
+ * Nlocal  is the length of the local block of the vectors yy etc.
+ *         on the current processor.
+ *
+ * mudq, mldq  are the upper and lower half-bandwidths to be used
+ *             in the computation of the local Jacobian blocks.
+ *
+ * mukeep, mlkeep are the upper and lower half-bandwidths to be
+ *                used in saving the Jacobian elements in the local
+ *                block of the preconditioner matrix PP.
+ *
+ * dq_rel_yy is an optional input. It is the relative increment
+ *           to be used in the difference quotient routine for
+ *           Jacobian calculation in the preconditioner. The
+ *           default is sqrt(unit roundoff), and specified by
+ *           passing dq_rel_yy = 0.
+ *
+ * Gres    is the name of the user-supplied function G(t,y,y')
+ *         that approximates F and whose local Jacobian blocks
+ *         are to form the preconditioner.
+ *
+ * Gcomm   is the name of the user-defined function that performs
+ *         necessary interprocess communication for the
+ *         execution of glocal.
+ *
+ * The return value of IDABBDPrecInit is one of:
+ *   IDASPILS_SUCCESS if no errors occurred
+ *   IDASPILS_MEM_NULL if the integrator memory is NULL
+ *   IDASPILS_LMEM_NULL if the linear solver memory is NULL
+ *   IDASPILS_ILL_INPUT if an input has an illegal value
+ *   IDASPILS_MEM_FAIL if a memory allocation request failed
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDABBDPrecInit(void *ida_mem, long int Nlocal,
+                                   long int mudq, long int mldq,
+                                   long int mukeep, long int mlkeep,
+                                   realtype dq_rel_yy,
+                                   IDABBDLocalFn Gres, IDABBDCommFn Gcomm);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDABBDPrecReInit
+ * -----------------------------------------------------------------
+ * IDABBDPrecReInit reinitializes the IDABBDPRE module when
+ * solving a sequence of problems of the same size with
+ * IDASPGMR/IDABBDPRE, IDASPBCG/IDABBDPRE, or IDASPTFQMR/IDABBDPRE
+ * provided there is no change in Nlocal, mukeep, or mlkeep. After
+ * solving one problem, and after calling IDAReInit to reinitialize
+ * the integrator for a subsequent problem, call IDABBDPrecReInit.
+ *
+ * All arguments have the same names and meanings as those
+ * of IDABBDPrecInit.
+ *
+ * The return value of IDABBDPrecReInit is one of:
+ *   IDASPILS_SUCCESS if no errors occurred
+ *   IDASPILS_MEM_NULL if the integrator memory is NULL
+ *   IDASPILS_LMEM_NULL if the linear solver memory is NULL
+ *   IDASPILS_PMEM_NULL if the preconditioner memory is NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDABBDPrecReInit(void *ida_mem,
+				     long int mudq, long int mldq,
+				     realtype dq_rel_yy);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs for IDABBDPRE
+ * -----------------------------------------------------------------
+ * IDABBDPrecGetWorkSpace returns the real and integer work space
+ *                        for IDABBDPRE.
+ * IDABBDPrecGetNumGfnEvals returns the number of calls to the
+ *                          user Gres function.
+ * 
+ * The return value of IDABBDPrecGet* is one of:
+ *   IDASPILS_SUCCESS if no errors occurred
+ *   IDASPILS_MEM_NULL if the integrator memory is NULL
+ *   IDASPILS_LMEM_NULL if the linear solver memory is NULL
+ *   IDASPILS_PMEM_NULL if the preconditioner memory is NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDABBDPrecGetWorkSpace(void *ida_mem, 
+                                           long int *lenrwBBDP, long int *leniwBBDP);
+SUNDIALS_EXPORT int IDABBDPrecGetNumGfnEvals(void *ida_mem, long int *ngevalsBBDP);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_dense.h b/include/ida/ida_dense.h
new file mode 100644
index 0000000..3ea763e
--- /dev/null
+++ b/include/ida/ida_dense.h
@@ -0,0 +1,63 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDADENSE linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDADENSE_H
+#define _IDADENSE_H
+
+#include <ida/ida_direct.h>
+#include <sundials/sundials_dense.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDADense
+ * -----------------------------------------------------------------
+ * A call to the IDADense function links the main integrator      
+ * with the IDADENSE linear solver module.                        
+ *                                                                
+ * ida_mem is the pointer to integrator memory returned by        
+ *     IDACreate.                                                 
+ *                                                                
+ * Neq  is the problem size                                       
+ *                                                                
+ * IDADense returns:                                              
+ *     IDADLS_SUCCESS   = 0  if successful                              
+ *     IDADLS_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     IDADLS_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The dense linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, IDADense will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDADense(void *ida_mem, long int Neq); 
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_direct.h b/include/ida/ida_direct.h
new file mode 100644
index 0000000..401b719
--- /dev/null
+++ b/include/ida/ida_direct.h
@@ -0,0 +1,307 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4525 $
+ * $Date: 2015-08-12 16:28:00 -0700 (Wed, 12 Aug 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common header file for the direct linear solvers in IDA.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDADLS_H
+#define _IDADLS_H
+
+#include <sundials/sundials_direct.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *              I D A D I R E C T     C O N S T A N T S
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * IDADLS return values 
+ * -----------------------------------------------------------------
+ */
+
+#define IDADLS_SUCCESS           0
+#define IDADLS_MEM_NULL         -1
+#define IDADLS_LMEM_NULL        -2
+#define IDADLS_ILL_INPUT        -3
+#define IDADLS_MEM_FAIL         -4
+
+/* Additional last_flag values */
+
+#define IDADLS_JACFUNC_UNRECVR  -5
+#define IDADLS_JACFUNC_RECVR    -6
+
+/*
+ * =================================================================
+ *              F U N C T I O N   T Y P E S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDADlsDenseJacFn
+ * -----------------------------------------------------------------
+ *
+ * A dense Jacobian approximation function djac must be of type 
+ * IDADlsDenseJacFn.
+ * Its parameters are:                     
+ *                                                                
+ * N   is the problem size, and length of all vector arguments.   
+ *                                                                
+ * t   is the current value of the independent variable t.        
+ *                                                                
+ * y   is the current value of the dependent variable vector,     
+ *     namely the predicted value of y(t).                     
+ *                                                                
+ * yp  is the current value of the derivative vector y',          
+ *     namely the predicted value of y'(t).                    
+ *                                                                
+ * r   is the residual vector F(tt,yy,yp).                     
+ *                                                                
+ * c_j is the scalar in the system Jacobian, proportional to 
+ *     the inverse of the step size h.
+ *                                                                
+ * user_data is a pointer to user Jacobian data - the same as the    
+ *     user_data parameter passed to IDASetUserData.                     
+ *                                                                
+ * Jac is the dense matrix (of type DlsMat) to be loaded by  
+ *     an IDADlsDenseJacFn routine with an approximation to the   
+ *     system Jacobian matrix                                  
+ *            J = dF/dy + c_j *dF/dy'                            
+ *     at the given point (t,y,y'), where the ODE system is    
+ *     given by F(t,y,y') = 0.
+ *     Note that Jac is NOT preset to zero!
+ *                                                                
+ * tmp1, tmp2, tmp3 are pointers to memory allocated for          
+ *     N_Vectors which can be used by an IDADlsDenseJacFn routine 
+ *     as temporary storage or work space.                     
+ *                                                                
+ * A IDADlsDenseJacFn should return                                
+ *     0 if successful,                                           
+ *     a positive int if a recoverable error occurred, or         
+ *     a negative int if a nonrecoverable error occurred.         
+ * In the case of a recoverable error return, the integrator will 
+ * attempt to recover by reducing the stepsize (which changes c_j).
+ *
+ * -----------------------------------------------------------------
+ *
+ * NOTE: The following are two efficient ways to load a dense Jac:         
+ * (1) (with macros - no explicit data structure references)      
+ *     for (j=0; j < Neq; j++) {                                  
+ *       col_j = LAPACK_DENSE_COL(Jac,j);                                 
+ *       for (i=0; i < Neq; i++) {                                
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         col_j[i] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ * (2) (without macros - explicit data structure references)      
+ *     for (j=0; j < Neq; j++) {                                  
+ *       col_j = (Jac->data)[j];                                   
+ *       for (i=0; i < Neq; i++) {                                
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         col_j[i] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ * A third way, using the LAPACK_DENSE_ELEM(A,i,j) macro, is much less   
+ * efficient in general.  It is only appropriate for use in small 
+ * problems in which efficiency of access is NOT a major concern. 
+ *                                                                
+ * NOTE: If the user's Jacobian routine needs other quantities,   
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through   
+ *     IDAGetCurrentStep and IDAGetErrWeights, respectively, but this
+ *     requires including in user_data a pointer to the solver memory.
+ *     The unit roundoff is available as UNIT_ROUNDOFF defined in
+ *     sundials_types.h.
+ *
+ * -----------------------------------------------------------------
+ */
+  
+  
+typedef int (*IDADlsDenseJacFn)(long int N, realtype t, realtype c_j,
+				N_Vector y, N_Vector yp, N_Vector r, 
+				DlsMat Jac, void *user_data,
+				N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDADlsBandJacFn
+ * -----------------------------------------------------------------
+ * A banded Jacobian approximation function bjac must have the    
+ * prototype given below. Its parameters are:                     
+ *                                                                
+ * Neq is the problem size, and length of all vector arguments.   
+ *                                                                
+ * mupper is the upper bandwidth of the banded Jacobian matrix.   
+ *                                                                
+ * mlower is the lower bandwidth of the banded Jacobian matrix.   
+ *                                                                
+ * tt is the current value of the independent variable t.        
+ *                                                                
+ * yy is the current value of the dependent variable vector,     
+ *    namely the predicted value of y(t).                     
+ *                                                                
+ * yp is the current value of the derivative vector y',          
+ *    namely the predicted value of y'(t).                    
+ *                                                                
+ * rr is the residual vector F(tt,yy,yp).                     
+ *                                                                
+ * c_j is the scalar in the system Jacobian, proportional to 1/hh.
+ *                                                                
+ * user_data  is a pointer to user Jacobian data - the same as the    
+ *    user_data parameter passed to IDASetUserData.                      
+ *                                                                
+ * Jac is the band matrix (of type BandMat) to be loaded by    
+ *     an IDADlsBandJacFn routine with an approximation to the    
+ *     system Jacobian matrix                                  
+ *            J = dF/dy + c_j *dF/dy'                             
+ *     at the given point (t,y,y'), where the DAE system is    
+ *     given by F(t,y,y') = 0.  Jac is preset to zero, so only 
+ *     the nonzero elements need to be loaded.  See note below.
+ *                                                                
+ * tmp1, tmp2, tmp3 are pointers to memory allocated for          
+ *     N_Vectors which can be used by an IDADlsBandJacFn routine  
+ *     as temporary storage or work space.                     
+ *                                                                
+ * An IDADlsBandJacFn function should return                                 
+ *     0 if successful,                                           
+ *     a positive int if a recoverable error occurred, or         
+ *     a negative int if a nonrecoverable error occurred.         
+ * In the case of a recoverable error return, the integrator will 
+ * attempt to recover by reducing the stepsize (which changes c_j).
+ *
+ * -----------------------------------------------------------------
+ *
+ * NOTE: The following are two efficient ways to load Jac:
+ *                                                                
+ * (1) (with macros - no explicit data structure references)      
+ *    for (j=0; j < Neq; j++) {                                   
+ *       col_j = BAND_COL(Jac,j);                                  
+ *       for (i=j-mupper; i <= j+mlower; i++) {                   
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         BAND_COL_ELEM(col_j,i,j) = J_ij;                       
+ *       }                                                        
+ *     }                                                          
+ *                                                                
+ * (2) (with BAND_COL macro, but without BAND_COL_ELEM macro)     
+ *    for (j=0; j < Neq; j++) {                                   
+ *       col_j = BAND_COL(Jac,j);                                  
+ *       for (k=-mupper; k <= mlower; k++) {                      
+ *         generate J_ij = the (i,j)th Jacobian element, i=j+k    
+ *         col_j[k] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ *                                                                
+ * A third way, using the BAND_ELEM(A,i,j) macro, is much less    
+ * efficient in general.  It is only appropriate for use in small 
+ * problems in which efficiency of access is NOT a major concern. 
+ *                                                                
+ * NOTE: If the user's Jacobian routine needs other quantities,   
+ *       they are accessible as follows: hcur (the current stepsize)
+ *       and ewt (the error weight vector) are accessible through   
+ *       IDAGetCurrentStep and IDAGetErrWeights, respectively, but this
+ *       requires including in user_data a pointer to the solver memory.
+ *       The unit roundoff is available as UNIT_ROUNDOFF defined in
+ *       sundials_types.h                   
+ *                                                                
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDADlsBandJacFn)(long int N, long int mupper, long int mlower,
+			       realtype t, realtype c_j, 
+			       N_Vector y, N_Vector yp, N_Vector r,
+			       DlsMat Jac, void *user_data,
+			       N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+  
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the IDADLS linear solver
+ * -----------------------------------------------------------------
+ * IDADlsSetDenseJacFn specifies the dense Jacobian approximation
+ * routine to be used for a direct dense linear solver.
+ *
+ * IDADlsSetBandJacFn specifies the band Jacobian approximation
+ * routine to be used for a direct band linear solver.
+ *
+ * By default, a difference quotient approximation, supplied with
+ * the solver is used.
+ *
+ * The return value is one of:
+ *    IDADLS_SUCCESS   if successful
+ *    IDADLS_MEM_NULL  if the IDA memory was NULL
+ *    IDADLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDADlsSetDenseJacFn(void *ida_mem, IDADlsDenseJacFn jac);
+SUNDIALS_EXPORT int IDADlsSetBandJacFn(void *ida_mem, IDADlsBandJacFn jac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the IDADLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * IDADlsGetWorkSpace   returns the real and integer workspace used
+ *                      by the direct linear solver.
+ * IDADlsGetNumJacEvals returns the number of calls made to the
+ *                      Jacobian evaluation routine jac.
+ * IDADlsGetNumResEvals returns the number of calls to the user
+ *                      F routine due to finite difference Jacobian
+ *                      evaluation.
+ * IDADlsGetLastFlag    returns the last error flag set by any of
+ *                      the IDADLS interface functions.
+ *
+ * The return value of IDADlsGet* is one of:
+ *    IDADLS_SUCCESS   if successful
+ *    IDADLS_MEM_NULL  if the IDA memory was NULL
+ *    IDADLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDADlsGetWorkSpace(void *ida_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int IDADlsGetNumJacEvals(void *ida_mem, long int *njevals);
+SUNDIALS_EXPORT int IDADlsGetNumResEvals(void *ida_mem, long int *nfevalsLS);
+SUNDIALS_EXPORT int IDADlsGetLastFlag(void *ida_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a IDADLS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *IDADlsGetReturnFlagName(long int flag);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_klu.h b/include/ida/ida_klu.h
new file mode 100644
index 0000000..79c03b3
--- /dev/null
+++ b/include/ida/ida_klu.h
@@ -0,0 +1,122 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4558 $
+ * $Date: 2015-10-05 09:04:16 -0700 (Mon, 05 Oct 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDAKLU linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDAKLU_H
+#define _IDAKLU_H
+
+#include "ida/ida_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDAKLU
+ * -----------------------------------------------------------------
+ * A call to the IDAKLU function links the main integrator      
+ * with the IDAKLU linear solver module.                        
+ *                                                                
+ * ida_mem is the pointer to integrator memory returned by        
+ *     IDACreate.             
+ *
+ *                                                                
+ * IDAKLU returns:                                              
+ *     IDASLU_SUCCESS   = 0  if successful                              
+ *     IDASLU_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     IDASLU_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The KLU linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, IDAKLU will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDAKLU(void *ida_mem, int n, int nnz, int sparesetype); 
+
+/*
+ * -----------------------------------------------------------------
+ * IDAKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to IDAKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is IDASLS_SUCCESS = 0, IDASLS_MEM_NULL = -1, 
+ * IDASLS_LMEM_NULL = -2, IDASLS_ILL_INPUT = -3, or IDASLS_MEM_FAIL = -4.
+ *
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAKLUReInit(void *ida_mem_v, int n, int nnz, 
+				 int reinit_type);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDAKLUB
+ * -----------------------------------------------------------------
+ * IDAKLUB links the main IDAS integrator with the IDAKLU
+ * linear solver for the backward integration.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDAKLUB(void *ida_mem, int which, int nB, int nnzB);
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * IDAKLUSetOrdering sets the ordering used by KLU for reducing fill.
+ * Options are: 0 for AMD, 1 for COLAMD, and 2 for the natural ordering.
+ * The default used in IDA is 1 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDAKLUSetOrdering(void *ida_mem, int ordering_choice); 
+
+
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_lapack.h b/include/ida/ida_lapack.h
new file mode 100644
index 0000000..2a16130
--- /dev/null
+++ b/include/ida/ida_lapack.h
@@ -0,0 +1,85 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Header file for the IDA dense linear solver IDALAPACK.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDALAPACK_H
+#define _IDALAPACK_H
+
+#include <ida/ida_direct.h>
+#include <sundials/sundials_lapack.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDALapackDense
+ * -----------------------------------------------------------------
+ * A call to the IDALapackDense function links the main integrator
+ * with the IDALAPACK linear solver using dense Jacobians.
+ *
+ * ida_mem is the pointer to the integrator memory returned by
+ *           IDACreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * The return value of IDALapackDense is one of:
+ *    IDADLS_SUCCESS   if successful
+ *    IDADLS_MEM_NULL  if the IDA memory was NULL
+ *    IDADLS_MEM_FAIL  if there was a memory allocation failure
+ *    IDADLS_ILL_INPUT if a required vector operation is missing
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDALapackDense(void *ida_mem, int N);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDALapackBand
+ * -----------------------------------------------------------------
+ * A call to the IDALapackBand function links the main integrator
+ * with the IDALAPACK linear solver using banded Jacobians. 
+ *
+ * ida_mem is the pointer to the integrator memory returned by
+ *           IDACreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * mupper is the upper bandwidth of the band Jacobian approximation.
+ *
+ * mlower is the lower bandwidth of the band Jacobian approximation.
+ *
+ * The return value of IDALapackBand is one of:
+ *    IDADLS_SUCCESS   if successful
+ *    IDADLS_MEM_NULL  if the IDA memory was NULL
+ *    IDADLS_MEM_FAIL  if there was a memory allocation failure
+ *    IDADLS_ILL_INPUT if a required vector operation is missing
+ *                        or if a bandwidth has an illegal value.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDALapackBand(void *ida_mem, int N, int mupper, int mlower);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_sparse.h b/include/ida/ida_sparse.h
new file mode 100644
index 0000000..0aae45f
--- /dev/null
+++ b/include/ida/ida_sparse.h
@@ -0,0 +1,268 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4423 $
+ * $Date: 2015-03-08 17:23:10 -0700 (Sun, 08 Mar 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the Sparse linear solver module in IDA.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASPARSE_H
+#define _IDASPARSE_H
+
+#include <sundials/sundials_sparse.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * I D A S S P A R S E    C O N S T A N T S
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * IDASLS return values 
+ * -----------------------------------------------------------------
+ */
+
+#define IDASLS_SUCCESS           0
+#define IDASLS_MEM_NULL         -1
+#define IDASLS_LMEM_NULL        -2
+#define IDASLS_ILL_INPUT        -3
+#define IDASLS_MEM_FAIL         -4
+#define IDASLS_JAC_NOSET        -5
+#define IDASLS_PACKAGE_FAIL     -6
+
+/* Additional last_flag values */
+
+#define IDASLS_JACFUNC_UNRECVR  -7
+#define IDASLS_JACFUNC_RECVR    -8
+
+/* Return values for the adjoint module */
+#define IDASLS_NO_ADJ           -101
+#define IDASLS_LMEMB_NULL       -102
+
+/*
+ * =================================================================
+ * PART I:  F O R W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDASlsSparseJacFn
+ * -----------------------------------------------------------------
+ *
+ * A sparse Jacobian approximation function jaceval must be of type 
+ * IDASlsSparseJacFn.
+ * Its parameters are:                     
+ *                                                                
+ * t   is the current value of the independent variable t.        
+ *                                                                
+ * c_j is the scalar in the system Jacobian, proportional to 
+ *     the inverse of the step size h.
+ *                                                                
+ * y   is the current value of the dependent variable vector,     
+ *     namely the predicted value of y(t).                     
+ *                                                                
+ * yp  is the current value of the derivative vector y',          
+ *     namely the predicted value of y'(t).                    
+ *                                                                
+ * r   is the residual vector F(tt,yy,yp).                     
+ *                                                                
+ * JacMat is the compressed sparse column matrix (of type SlsMat)
+ *     to be loaded by an IDASlsSparseJacFn routine with an approximation
+ *     to the system Jacobian matrix
+ *            J = dF/dy' + c_j*dF/dy                            
+ *     at the given point (t,y,y'), where the ODE system is    
+ *     given by F(t,y,y') = 0.
+ *     Note that JacMat is NOT preset to zero!
+ *     Matrix data is for the nonzero entries of the Jacobian are stored in
+ *     compressed column format.  Row indices of entries in 
+ *     column j are stored in J->data[colptrs[j]] 
+ *     through J->data[colptrs[j+i]-1]
+ *     and corresponding numerical values of the Jacobian are stored 
+ *     in the same entries of a.
+ * 
+ * user_data is a pointer to user Jacobian data - the same as the    
+ *     user_data parameter passed to IDASetRdata.                     
+ *                                                                
+ * tmp1, tmp2, tmp3 are pointers to memory allocated for          
+ *     N_Vectors which can be used by an IDASparseJacFn routine 
+ *     as temporary storage or work space.                     
+ *                                                                
+ * A IDASlsSparseJacFn should return                                
+ *     0 if successful,                                           
+ *     a positive int if a recoverable error occurred, or         
+ *     a negative int if a nonrecoverable error occurred.         
+ * In the case of a recoverable error return, the integrator will 
+ * attempt to recover by reducing the stepsize (which changes cj).
+ *
+ * -----------------------------------------------------------------
+ *
+  * NOTE: If the user's Jacobian routine needs other quantities,   
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through   
+ *     IDAGetCurrentStep and IDAGetErrWeights, respectively 
+ *     (see ida.h). The unit roundoff is available as 
+ *     UNIT_ROUNDOFF defined in sundials_types.h.
+ *
+ * -----------------------------------------------------------------
+ */
+  
+  
+typedef int (*IDASlsSparseJacFn)(realtype t, realtype c_j,
+		     N_Vector y, N_Vector yp, N_Vector r, 
+		     SlsMat JacMat, void *user_data,
+		     N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the IDASPARSE linear solver
+ * -----------------------------------------------------------------
+ * IDASlsSetSparseJacFn specifies the Jacobian approximation
+ * routine to be used for a sparse direct linear solver.
+ *
+ * The return value is one of:
+ *    IDASLS_SUCCESS   if successful
+ *    IDASLS_MEM_NULL  if the IDA memory was NULL
+ *    IDASLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASlsSetSparseJacFn(void *ida_mem, IDASlsSparseJacFn jac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the IDASLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * IDASlsGetWorkSpace   returns the real and integer workspace used
+ *                      by the direct linear solver.
+ * IDASlsGetNumJacEvals returns the number of calls made to the
+ *                      Jacobian evaluation routine jac.
+ * IDASlsGetLastFlag    returns the last error flag set by any of
+ *                      the IDADLS interface functions.
+ *
+ * The return value of IDADlsGet* is one of:
+ *    IDASLS_SUCCESS   if successful
+ *    IDASLS_MEM_NULL  if the IDA memory was NULL
+ *    IDASLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASlsGetNumJacEvals(void *ida_mem, long int *njevals);
+SUNDIALS_EXPORT int IDASlsGetLastFlag(void *ida_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a IDASLS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *IDASlsGetReturnFlagName(long int flag);
+
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type: IDASlsSparseJacFnB
+ * -----------------------------------------------------------------
+ * A sparse Jacobian approximation function JacB for the adjoint
+ * (backward) problem must have the prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASlsSparseJacFnB)(realtype tt, realtype c_jB, 
+	      	     N_Vector yy, N_Vector yp,
+		     N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+		     SlsMat JacMatB, void *user_dataB, 
+		     N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type: IDASlsSparseJacFnBS
+ * -----------------------------------------------------------------
+ * A dense Jacobian approximation function JacBS for the adjoint
+ * (backward) problem, sensitivity-dependent case, must have the
+ *  prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASlsSparseJacFnBS)(realtype tt, realtype c_jB, 
+	      	     N_Vector yy, N_Vector yp,
+		     N_Vector *yS, N_Vector *ypS,
+		     N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+		     SlsMat JacMatB, void *user_dataB, 
+		     N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+
+/*
+ * -----------------------------------------------------------------
+ * EXPORTED FUNCTIONS 
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: IDASlsSetSparseJacFnB and IDASlsSetSparseJacFnBS
+ * -----------------------------------------------------------------
+ * IDASlsSetSparseJacFnB specifies the sparse Jacobian functions to 
+ * be used by a IDASPARSE linear solver for the backward integration phase
+ * when the backward problem does not depend on forward sensitivities.
+ * IDASlsSetSparseJacFnBS specifies the Jacobian
+ * functions when the backward problem does depend on sensitivities.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASlsSetSparseJacFnB(void *ida_mem, int which, 
+					  IDASlsSparseJacFnB jacB);
+SUNDIALS_EXPORT int IDASlsSetSparseJacFnBS(void *ida_mem, int which, 
+					  IDASlsSparseJacFnBS jacBS);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_spbcgs.h b/include/ida/ida_spbcgs.h
new file mode 100644
index 0000000..9b49c35
--- /dev/null
+++ b/include/ida/ida_spbcgs.h
@@ -0,0 +1,64 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the public header file for the IDA scaled preconditioned
+ * Bi-CGSTAB linear solver module, IDASPBCG.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASPBCG_H
+#define _IDASPBCG_H
+
+#include <ida/ida_spils.h>
+#include <sundials/sundials_spbcgs.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASpbcg
+ * -----------------------------------------------------------------
+ * A call to the IDASpbcg function links the main integrator with
+ * the IDASPBCG linear solver module. Its parameters are as
+ * follows:
+ *
+ * IDA_mem   is the pointer to memory block returned by IDACreate.
+ *
+ * maxl      is the maximum Krylov subspace dimension, an
+ *           optional input. Pass 0 to use the default value.
+ *           Otherwise pass a positive integer.
+ *
+ * The return values of IDASpbcg are:
+ *    IDASPILS_SUCCESS    if successful
+ *    IDASPILS_MEM_NULL   if the ida memory was NULL
+ *    IDASPILS_MEM_FAIL   if there was a memory allocation failure
+ *    IDASPILS_ILL_INPUT  if there was illegal input.
+ * The above constants are defined in ida_spils.h
+ *
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASpbcg(void *ida_mem, int maxl);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_spgmr.h b/include/ida/ida_spgmr.h
new file mode 100644
index 0000000..2a4247a
--- /dev/null
+++ b/include/ida/ida_spgmr.h
@@ -0,0 +1,65 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDA Scaled Preconditioned GMRES     
+ * linear solver module, IDASPGMR.                                 
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASPGMR_H
+#define _IDASPGMR_H
+
+#include <ida/ida_spils.h>
+#include <sundials/sundials_spgmr.h>
+
+#ifdef __cplusplus     /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ *                                                                
+ * Function : IDASpgmr                                            
+ * -----------------------------------------------------------------
+ * A call to the IDASpgmr function links the main integrator with 
+ * the IDASPGMR linear solver module.  Its parameters are as      
+ * follows:                                                       
+ *                                                                
+ * IDA_mem   is the pointer to memory block returned by IDACreate.
+ *                                                                
+ * maxl      is the maximum Krylov subspace dimension, an         
+ *           optional input.  Pass 0 to use the default value,    
+ *           MIN(Neq, 5).  Otherwise pass a positive integer.     
+ *                                                                
+ * The return values of IDASpgmr are:                             
+ *    IDASPILS_SUCCESS    if successful                            
+ *    IDASPILS_MEM_NULL   if the ida memory was NULL
+ *    IDASPILS_MEM_FAIL   if there was a memory allocation failure 
+ *    IDASPILS_ILL_INPUT  if there was illegal input.              
+ * The above constants are defined in ida_spils.h
+ *                                                                
+ * -----------------------------------------------------------------
+ */                                                                
+
+SUNDIALS_EXPORT int IDASpgmr(void *ida_mem, int maxl);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_spils.h b/include/ida/ida_spils.h
new file mode 100644
index 0000000..d99ad93
--- /dev/null
+++ b/include/ida/ida_spils.h
@@ -0,0 +1,326 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Alan Hindmarsh, Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the common header file for the Scaled and Preconditioned
+ * Iterative Linear Solvers in IDA.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASPILS_H
+#define _IDASPILS_H
+
+#include <sundials/sundials_iterative.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * -----------------------------------------------------------------
+ * IDASPILS return values 
+ * -----------------------------------------------------------------
+ */
+
+#define IDASPILS_SUCCESS     0
+#define IDASPILS_MEM_NULL   -1 
+#define IDASPILS_LMEM_NULL  -2 
+#define IDASPILS_ILL_INPUT  -3
+#define IDASPILS_MEM_FAIL   -4
+#define IDASPILS_PMEM_NULL  -5
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsPrecSetupFn
+ * -----------------------------------------------------------------
+ * The optional user-supplied functions PrecSetup and PrecSolve
+ * together must define the left preconditoner matrix P
+ * approximating the system Jacobian matrix
+ *    J = dF/dy + c_j*dF/dy'
+ * (where the DAE system is F(t,y,y') = 0), and solve the linear
+ * systems P z = r.   PrecSetup is to do any necessary setup
+ * operations, and PrecSolve is to compute the solution of
+ * P z = r.
+ *
+ * The preconditioner setup function PrecSetup is to evaluate and
+ * preprocess any Jacobian-related data needed by the
+ * preconditioner solve function PrecSolve.  This might include
+ * forming a crude approximate Jacobian, and performing an LU
+ * factorization on it.  This function will not be called in
+ * advance of every call to PrecSolve, but instead will be called
+ * only as often as necessary to achieve convergence within the
+ * Newton iteration.  If the PrecSolve function needs no
+ * preparation, the PrecSetup function can be NULL.
+ *
+ * Each call to the PrecSetup function is preceded by a call to
+ * the system function res with the same (t,y,y') arguments.
+ * Thus the PrecSetup function can use any auxiliary data that is
+ * computed and saved by the res function and made accessible
+ * to PrecSetup.
+ *
+ * A preconditioner setup function PrecSetup must have the
+ * prototype given below.  Its parameters are as follows:
+ *
+ * tt  is the current value of the independent variable t.
+ *
+ * yy  is the current value of the dependent variable vector,
+ *     namely the predicted value of y(t).
+ *
+ * yp  is the current value of the derivative vector y',
+ *     namely the predicted value of y'(t).
+ *
+ * rr  is the current value of the residual vector F(t,y,y').
+ *
+ * c_j is the scalar in the system Jacobian, proportional to 1/hh.
+ *
+ * user_data is a pointer to user data, the same as the user_data
+ *     parameter passed to IDASetUserData.
+ *
+ * tmp1, tmp2, tmp3 are pointers to vectors of type N_Vector
+ *     which can be used by an IDASpilsPrecSetupFn routine
+ *     as temporary storage or work space.
+ *
+ * NOTE: If the user's preconditioner needs other quantities,
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through
+ *     IDAGetCurrentStep and IDAGetErrWeights, respectively (see
+ *     ida.h). The unit roundoff is available as
+ *     UNIT_ROUNDOFF defined in sundials_types.h
+ *
+ * The IDASpilsPrecSetupFn should return
+ *     0 if successful,
+ *     a positive int if a recoverable error occurred, or
+ *     a negative int if a nonrecoverable error occurred.
+ * In the case of a recoverable error return, the integrator will
+ * attempt to recover by reducing the stepsize (which changes cj).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASpilsPrecSetupFn)(realtype tt,
+				   N_Vector yy, N_Vector yp, N_Vector rr,
+				   realtype c_j, void *user_data,
+				   N_Vector tmp1, N_Vector tmp2,
+				   N_Vector tmp3);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsPrecSolveFn
+ * -----------------------------------------------------------------
+ * The optional user-supplied function PrecSolve must compute a
+ * solution to the linear system P z = r, where P is the left
+ * preconditioner defined by the user.  If no preconditioning
+ * is desired, pass NULL for PrecSolve to IDASp*.
+ *
+ * A preconditioner solve function PrecSolve must have the
+ * prototype given below.  Its parameters are as follows:
+ *
+ * tt is the current value of the independent variable t.
+ *
+ * yy is the current value of the dependent variable vector y.
+ *
+ * yp is the current value of the derivative vector y'.
+ *
+ * rr is the current value of the residual vector F(t,y,y').
+ *
+ * rvec is the input right-hand side vector r.
+ *
+ * zvec is the computed solution vector z.
+ *
+ * c_j is the scalar in the system Jacobian, proportional to 1/hh.
+ *
+ * delta is an input tolerance for use by PrecSolve if it uses an
+ *     iterative method in its solution.   In that case, the
+ *     the residual vector r - P z of the system should be
+ *     made less than delta in weighted L2 norm, i.e.,
+ *            sqrt [ Sum (Res[i]*ewt[i])^2 ] < delta .
+ *     Note: the error weight vector ewt can be obtained
+ *     through a call to the routine IDAGetErrWeights.
+ *
+ * user_data is a pointer to user data, the same as the user_data
+ *     parameter passed to IDASetUserData.
+ *
+ * tmp is an N_Vector which can be used by the PrecSolve
+ *     routine as temporary storage or work space.
+ *
+ * The IDASpilsPrecSolveFn should return
+ *     0 if successful,
+ *     a positive int if a recoverable error occurred, or
+ *     a negative int if a nonrecoverable error occurred.
+ * Following a recoverable error, the integrator will attempt to
+ * recover by updating the preconditioner and/or reducing the
+ * stepsize.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASpilsPrecSolveFn)(realtype tt,
+				   N_Vector yy, N_Vector yp, N_Vector rr,
+				   N_Vector rvec, N_Vector zvec,
+				   realtype c_j, realtype delta, void *user_data,
+				   N_Vector tmp);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsJacTimesVecFn
+ * -----------------------------------------------------------------
+ * The user-supplied function jtimes is to generate the product
+ * J*v for given v, where J is the Jacobian matrix
+ *    J = dF/dy + c_j*dF/dy'
+ *  or an approximation to it, and v is a given vector.
+ * It should return 0 if successful and a nonzero int otherwise.
+ *
+ * A function jtimes must have the prototype given below. Its
+ * parameters are as follows:
+ *
+ *   tt   is the current value of the independent variable.
+ *
+ *   yy   is the current value of the dependent variable vector,
+ *        namely the predicted value of y(t).
+ *
+ *   yp   is the current value of the derivative vector y',
+ *        namely the predicted value of y'(t).
+ *
+ *   rr   is the current value of the residual vector F(t,y,y').
+ *
+ *   v    is the N_Vector to be multiplied by J.
+ *
+ *   Jv   is the output N_Vector containing J*v.
+ *
+ *   c_j  is the scalar in the system Jacobian, proportional
+ *        to 1/hh.
+ *
+ *   user_data is a pointer to user data, the same as the
+ *        pointer passed to IDASetUserData.
+ *
+ *   tmp1, tmp2 are two N_Vectors which can be used by Jtimes for
+ *         work space.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASpilsJacTimesVecFn)(realtype tt,
+				     N_Vector yy, N_Vector yp, N_Vector rr,
+				     N_Vector v, N_Vector Jv,
+				     realtype c_j, void *user_data,
+				     N_Vector tmp1, N_Vector tmp2);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the IDASPILS linear solver                  
+ * -----------------------------------------------------------------
+ *                                                                
+ * IDASpilsSetPreconditioner specifies the PrecSetup and PrecSolve 
+ *           functions.
+ *           Default is NULL for both arguments.
+ * IDASpilsSetJacTimesVecFn specifies the jtimes function.        
+ *           Default is to use an internal finite difference      
+ *           approximation routine.                           
+ * IDASpilsSetGSType specifies the type of Gram-Schmidt           
+ *           orthogonalization to be used. This must be one of    
+ *           the two enumeration constants MODIFIED_GS or         
+ *           CLASSICAL_GS defined in iterativ.h. These correspond 
+ *           to using modified Gram-Schmidt and classical         
+ *           Gram-Schmidt, respectively.                          
+ *           Default value is MODIFIED_GS.                        
+ *           Only for IDASPGMR.
+ * IDASpilsSetMaxRestarts specifies the maximum number of restarts
+ *           to be used in the GMRES algorithm.  maxrs must be a  
+ *           non-negative integer.  Pass 0 to specify no restarts.
+ *           Default is 5.                                        
+ *           Only for IDASPGMR.
+ * IDASpbcgSetMaxl specifies the maximum Krylov subspace size. 
+ *           Default is 5.
+ *           Only for IDASPBCG and IDASPTFQMR.
+ * IDASpilsSetEpsLin specifies the factor in the linear iteration 
+ *           convergence test constant.                           
+ *           Default is 0.05                                      
+ * IDASpilsSetIncrementFactor specifies a factor in the increments
+ *           to yy used in the difference quotient approximations 
+ *           to matrix-vector products Jv.                        
+ *           Default is 1.0                                       
+ *                                                                
+ * The return value of IDASpilsSet* is one of:
+ *    IDASPILS_SUCCESS   if successful
+ *    IDASPILS_MEM_NULL  if the ida memory was NULL
+ *    IDASPILS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASpilsSetPreconditioner(void *ida_mem,
+                                              IDASpilsPrecSetupFn pset, 
+					      IDASpilsPrecSolveFn psolve);
+SUNDIALS_EXPORT int IDASpilsSetJacTimesVecFn(void *ida_mem,
+                                             IDASpilsJacTimesVecFn jtv);
+
+SUNDIALS_EXPORT int IDASpilsSetGSType(void *ida_mem, int gstype);
+SUNDIALS_EXPORT int IDASpilsSetMaxRestarts(void *ida_mem, int maxrs);
+SUNDIALS_EXPORT int IDASpilsSetMaxl(void *ida_mem, int maxl);
+SUNDIALS_EXPORT int IDASpilsSetEpsLin(void *ida_mem, realtype eplifac);
+SUNDIALS_EXPORT int IDASpilsSetIncrementFactor(void *ida_mem, realtype dqincfac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the IDASPILS linear solver               
+ *----------------------------------------------------------------
+ *                                                                
+ * IDASpilsGetWorkSpace returns the real and integer workspace used 
+ *     by IDASPILS.                                                  
+ * IDASpilsGetNumPrecEvals returns the number of preconditioner   
+ *     evaluations, i.e. the number of calls made to PrecSetup    
+ *     with jok==FALSE.                                           
+ * IDASpilsGetNumPrecSolves returns the number of calls made to   
+ *     PrecSolve.                                                 
+ * IDASpilsGetNumLinIters returns the number of linear iterations.
+ * IDASpilsGetNumConvFails returns the number of linear           
+ *     convergence failures.                                      
+ * IDASpilsGetNumJtimesEvals returns the number of calls to jtimes
+ * IDASpilsGetNumResEvals returns the number of calls to the user 
+ *     res routine due to finite difference Jacobian times vector 
+ *     evaluation.                                                
+ * IDASpilsGetLastFlag returns the last error flag set by any of
+ *     the IDASPILS interface functions.
+ *                                                                
+ * The return value of IDASpilsGet* is one of:
+ *    IDASPILS_SUCCESS   if successful
+ *    IDASPILS_MEM_NULL  if the ida memory was NULL
+ *    IDASPILS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */                                                                
+
+SUNDIALS_EXPORT int IDASpilsGetWorkSpace(void *ida_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int IDASpilsGetNumPrecEvals(void *ida_mem, long int *npevals);
+SUNDIALS_EXPORT int IDASpilsGetNumPrecSolves(void *ida_mem, long int *npsolves);
+SUNDIALS_EXPORT int IDASpilsGetNumLinIters(void *ida_mem, long int *nliters);
+SUNDIALS_EXPORT int IDASpilsGetNumConvFails(void *ida_mem, long int *nlcfails);
+SUNDIALS_EXPORT int IDASpilsGetNumJtimesEvals(void *ida_mem, long int *njvevals);
+SUNDIALS_EXPORT int IDASpilsGetNumResEvals(void *ida_mem, long int *nrevalsLS); 
+SUNDIALS_EXPORT int IDASpilsGetLastFlag(void *ida_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with an IDASPILS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *IDASpilsGetReturnFlagName(long int flag);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_sptfqmr.h b/include/ida/ida_sptfqmr.h
new file mode 100644
index 0000000..50f0325
--- /dev/null
+++ b/include/ida/ida_sptfqmr.h
@@ -0,0 +1,64 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the public header file for the IDA scaled preconditioned
+ * TFQMR linear solver module, IDASPTFQMR.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASPTFQMR_H
+#define _IDASPTFQMR_H
+
+#include <ida/ida_spils.h>
+#include <sundials/sundials_sptfqmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASptfqmr
+ * -----------------------------------------------------------------
+ * A call to the IDASptfqmr function links the main integrator with
+ * the IDASPTFQMR linear solver module. Its parameters are as
+ * follows:
+ *
+ * IDA_mem  is the pointer to memory block returned by IDACreate.
+ *
+ * maxl     is the maximum Krylov subspace dimension, an
+ *          optional input. Pass 0 to use the default value.
+ *          Otherwise pass a positive integer.
+ *
+ * The return values of IDASptfqmr are:
+ *    IDASPILS_SUCCESS    if successful
+ *    IDASPILS_MEM_NULL   if the ida memory was NULL
+ *    IDASPILS_MEM_FAIL   if there was a memory allocation failure
+ *    IDASPILS_ILL_INPUT  if there was illegal input.
+ * The above constants are defined in ida_spils.h
+ *
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASptfqmr(void *ida_mem, int maxl);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/ida/ida_superlumt.h b/include/ida/ida_superlumt.h
new file mode 100644
index 0000000..3269991
--- /dev/null
+++ b/include/ida/ida_superlumt.h
@@ -0,0 +1,99 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4179 $
+ * $Date: 2014-07-23 12:16:01 -0700 (Wed, 23 Jul 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDASuperLUMT linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASUPERLUMT_H
+#define _IDASUPERLUMT_H
+
+#include "ida/ida_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASuperLUMT
+ * -----------------------------------------------------------------
+ * A call to the IDASuperLUMT function links the main integrator      
+ * with the IDASuperLUMT linear solver module.                        
+ *                                                                
+ * ida_mem is the pointer to integrator memory returned by        
+ *     IDACreate.             
+ *
+ * num_threads is the number of threads that SuperLUMT should invoke     
+ *                                                                
+ * IDASuperLUMT returns:                                              
+ *     IDASLU_SUCCESS   = 0  if successful                              
+ *     IDASLU_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     IDASLU_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The SuperLUMT linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, IDASuperLUMT will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDASuperLUMT(void *ida_mem, int num_threads, 
+				   int n, int nnz); 
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDASuperLUMTB
+ * -----------------------------------------------------------------
+ * IDASuperLUMTB links the main IDAS integrator with the IDASuperLUMT
+ * linear solver for the backward integration.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDASuperLUMTB(void *ida_mem, int num_threads, 
+				    int which, int mB, int nB, int nnzB);
+
+
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * IDASuperLUMTSetOrdering sets the ordering used by SuperLUMT for 
+ * reducing fill.
+ * Options are: 
+ * 0 for natural ordering
+ * 1 for minimal degree ordering on A'*A
+ * 2 for minimal degree ordering on A'+A
+ * 3 for approximate minimal degree ordering for unsymmetric matrices
+ * The default used in SUNDIALS is 3 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDASuperLUMTSetOrdering(void *ida_mem, 
+					      int ordering_choice); 
+
+
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas.h b/include/idas/idas.h
new file mode 100644
index 0000000..19509a1
--- /dev/null
+++ b/include/idas/idas.h
@@ -0,0 +1,2106 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4845 $
+ * $Date: 2016-08-03 15:45:09 -0700 (Wed, 03 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header (include) file for the main IDAS solver.
+ * -----------------------------------------------------------------
+ *
+ * IDAS is used to solve numerically the initial value problem     
+ * for the differential algebraic equation (DAE) system           
+ *   F(t,y,y') = 0,                                               
+ * given initial conditions                                       
+ *   y(t0) = y0,   y'(t0) = yp0.                                  
+ * Here y and F are vectors of length N.                          
+ *
+ * Additionally, IDAS can perform forward or adjoint sensitivity
+ * analysis.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDAS_H
+#define _IDAS_H
+
+#include <stdio.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus     /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* * =================================================================
+ *              I D A S     C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * ----------------------------------------------------------------
+ * Inputs to:
+ *  IDAInit, IDAReInit, 
+ *  IDASensInit, IDASensReInit, 
+ *  IDAQuadInit, IDAQuadReInit,
+ *  IDAQuadSensInit, IDAQuadSensReInit,
+ *  IDACalcIC, IDASolve,
+ *  IDAAdjInit
+ * ----------------------------------------------------------------
+ */
+
+/* itask */
+#define IDA_NORMAL           1
+#define IDA_ONE_STEP         2
+
+/* icopt */
+#define IDA_YA_YDP_INIT      1 
+#define IDA_Y_INIT           2
+
+/* ism */
+#define IDA_SIMULTANEOUS     1
+#define IDA_STAGGERED        2
+
+/* DQtype */
+#define IDA_CENTERED         1
+#define IDA_FORWARD          2
+
+/* interp */
+#define IDA_HERMITE          1
+#define IDA_POLYNOMIAL       2
+
+/*
+ * ===============================================================
+ * IDAS RETURN VALUES
+ * ===============================================================
+ */
+
+#define IDA_SUCCESS          0
+#define IDA_TSTOP_RETURN     1
+#define IDA_ROOT_RETURN      2
+
+#define IDA_WARNING          99
+
+#define IDA_TOO_MUCH_WORK   -1
+#define IDA_TOO_MUCH_ACC    -2
+#define IDA_ERR_FAIL        -3
+#define IDA_CONV_FAIL       -4
+
+#define IDA_LINIT_FAIL      -5
+#define IDA_LSETUP_FAIL     -6
+#define IDA_LSOLVE_FAIL     -7
+#define IDA_RES_FAIL        -8
+#define IDA_REP_RES_ERR     -9
+#define IDA_RTFUNC_FAIL     -10
+#define IDA_CONSTR_FAIL     -11
+
+#define IDA_FIRST_RES_FAIL  -12
+#define IDA_LINESEARCH_FAIL -13
+#define IDA_NO_RECOVERY     -14
+
+#define IDA_MEM_NULL        -20
+#define IDA_MEM_FAIL        -21
+#define IDA_ILL_INPUT       -22
+#define IDA_NO_MALLOC       -23
+#define IDA_BAD_EWT         -24
+#define IDA_BAD_K           -25
+#define IDA_BAD_T           -26
+#define IDA_BAD_DKY         -27
+
+#define IDA_NO_QUAD         -30
+#define IDA_QRHS_FAIL       -31
+#define IDA_FIRST_QRHS_ERR  -32
+#define IDA_REP_QRHS_ERR    -33
+
+#define IDA_NO_SENS         -40
+#define IDA_SRES_FAIL       -41
+#define IDA_REP_SRES_ERR    -42
+#define IDA_BAD_IS          -43
+
+#define IDA_NO_QUADSENS     -50
+#define IDA_QSRHS_FAIL      -51
+#define IDA_FIRST_QSRHS_ERR -52
+#define IDA_REP_QSRHS_ERR   -53
+
+#define IDA_UNRECONGISED_ERROR -99
+
+/*
+ * -----------------------------------------
+ * IDAA return flags
+ * -----------------------------------------
+ */
+
+#define IDA_NO_ADJ          -101
+#define IDA_NO_FWD          -102
+#define IDA_NO_BCK          -103
+#define IDA_BAD_TB0         -104
+#define IDA_REIFWD_FAIL     -105
+#define IDA_FWD_FAIL        -106
+#define IDA_GETY_BADT       -107
+
+/*
+ * =================================================================
+ *              F U N C T I O N   T Y P E S
+ * =================================================================
+ */
+
+/*
+ * ----------------------------------------------------------------
+ * Type : IDAResFn                                                   
+ * ----------------------------------------------------------------
+ * The F function which defines the DAE system   F(t,y,y')=0      
+ * must have type IDAResFn.                                          
+ * Symbols are as follows: 
+ *                  t  <-> t        y <-> yy               
+ *                  y' <-> yp       F <-> rr
+ * A IDAResFn takes as input the independent variable value t,    
+ * the dependent variable vector yy, and the derivative (with     
+ * respect to t) of the yy vector, yp.  It stores the result of   
+ * F(t,y,y') in the vector rr. The yy, yp, and rr arguments are of 
+ * type N_Vector. The user_data parameter is the pointer user_data 
+ * passed by the user to the IDASetUserData routine. This user-supplied 
+ * pointer is passed to the user's res function every time it is called, 
+ * to provide access in res to user data.                                    
+ *                                                                
+ * A IDAResFn res should return a value of 0 if successful, a positive
+ * value if a recoverable error occured (e.g. yy has an illegal value),
+ * or a negative value if a nonrecoverable error occured. In the latter
+ * case, the program halts. If a recoverable error occured, the integrator
+ * will attempt to correct and retry.
+ * ----------------------------------------------------------------
+ */
+
+typedef int (*IDAResFn)(realtype tt, N_Vector yy, N_Vector yp,
+			N_Vector rr, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDARootFn
+ * -----------------------------------------------------------------
+ * A function g, which defines a set of functions g_i(t,y,y') whose
+ * roots are sought during the integration, must have type IDARootFn.
+ * The function g takes as input the independent variable value t,
+ * the dependent variable vector y, and its t-derivative yp (= y').
+ * It stores the nrtfn values g_i(t,y,y') in the realtype array gout.
+ * (Allocation of memory for gout is handled within IDA.)
+ * The user_data parameter is the same as that passed by the user
+ * to the IDASetUserData routine.  This user-supplied pointer is
+ * passed to the user's g function every time it is called.
+ *
+ * An IDARootFn should return 0 if successful or a non-zero value
+ * if an error occured (in which case the integration will be halted).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDARootFn)(realtype t, N_Vector y, N_Vector yp,
+			 realtype *gout, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDAEwtFn
+ * -----------------------------------------------------------------
+ * A function e, which sets the error weight vector ewt, must have
+ * type IDAEwtFn.
+ * The function e takes as input the current dependent variable y.
+ * It must set the vector of error weights used in the WRMS norm:
+ * 
+ *   ||y||_WRMS = sqrt [ 1/N * sum ( ewt_i * y_i)^2 ]
+ *
+ * Typically, the vector ewt has components:
+ * 
+ *   ewt_i = 1 / (reltol * |y_i| + abstol_i)
+ *
+ * The user_data parameter is the same as that passed by the user
+ * to the IDASetUserData routine.  This user-supplied pointer is
+ * passed to the user's e function every time it is called.
+ * An IDAEwtFn e must return 0 if the error weight vector has been
+ * successfuly set and a non-zero value otherwise.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDAEwtFn)(N_Vector y, N_Vector ewt, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDAErrHandlerFn
+ * -----------------------------------------------------------------
+ * A function eh, which handles error messages, must have type
+ * IDAErrHandlerFn.
+ * The function eh takes as input the error code, the name of the
+ * module reporting the error, the error message, and a pointer to
+ * user data, the same as that passed to IDASetUserData.
+ * 
+ * All error codes are negative, except IDA_WARNING which indicates 
+ * a warning (the solver continues).
+ *
+ * An IDAErrHandlerFn has no return value.
+ * -----------------------------------------------------------------
+ */
+
+typedef void (*IDAErrHandlerFn)(int error_code, 
+				const char *module, const char *function, 
+				char *msg, void *user_data); 
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDAQuadRhsFn
+ * -----------------------------------------------------------------
+ * The rhsQ function which defines the right hand side of the
+ * quadrature equations yQ' = rhsQ(t,y) must have type IDAQuadRhsFn.
+ * rhsQ takes as input the value of the independent variable t,
+ * the vector of states y and y' and must store the result of rhsQ in
+ * rrQ. (Allocation of memory for rrQ is handled by IDAS).
+ *
+ * The user_data parameter is the same as the user_data parameter
+ * set by the user through the IDASetUserData routine and is
+ * passed to the rhsQ function every time it is called.
+ *
+ * A function of type IDAQuadRhsFn should return 0 if successful,
+ * a negative value if an unrecoverable error occured, and a positive
+ * value if a recoverable error (e.g. invalid y values) occured. 
+ * If an unrecoverable occured, the integration is halted. 
+ * If a recoverable error occured, then (in most cases) IDAS will
+ * try to correct and retry.
+ * -----------------------------------------------------------------
+ */
+  
+typedef int (*IDAQuadRhsFn)(realtype tres, 
+			    N_Vector yy, N_Vector yp,
+			    N_Vector rrQ,
+			    void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASensResFn
+ * -----------------------------------------------------------------
+ * The resS function which defines the right hand side of the
+ * sensitivity DAE systems F_y * s + F_y' * s' + F_p = 0 
+ * must have type IDASensResFn.
+ * 
+ * resS takes as input the number of sensitivities Ns, the
+ * independent variable value t, the states yy and yp and the
+ * corresponding value of the residual in resval, and the dependent
+ * sensitivity vectors yyS and ypS. It stores the residual in 
+ * resvalS. (Memory allocation for resvalS is handled within IDAS)
+ *
+ * The user_data parameter is the same as the user_data parameter
+ * set by the user through the IDASetUserData routine and is
+ * passed to the resS function every time it is called.
+ *
+ * A IDASensResFn should return 0 if successful, a negative value if
+ * an unrecoverable error occured, and a positive value if a 
+ * recoverable error (e.g. invalid y, yp, yyS or ypS values) 
+ * occured. If an unrecoverable occured, the integration is halted. 
+ * If a recoverable error occured, then (in most cases) IDAS will
+ * try to correct and retry.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASensResFn)(int Ns, realtype t, 
+			    N_Vector yy, N_Vector yp, N_Vector resval,
+			    N_Vector *yyS, N_Vector *ypS, 
+                            N_Vector *resvalS, void *user_data,
+			    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDAQuadSensRhsFn
+ * -----------------------------------------------------------------
+ * The rhsQS function which defines the RHS of the sensitivity DAE 
+ * systems for quadratures  must have type IDAQuadSensRhsFn.
+ *
+ * rhsQS takes as input the number of sensitivities Ns (the same as
+ * that passed to IDAQuadSensInit), the independent variable 
+ * value t, the states yy, yp and the dependent sensitivity vectors 
+ * yyS and ypS, as well as the current value of the quadrature RHS 
+ * rrQ. It stores the result of rhsQS in rhsvalQS.
+ * (Allocation of memory for resvalQS is handled within IDAS)
+ *
+ * A IDAQuadSensRhsFn should return 0 if successful, a negative
+ * value if an unrecoverable error occured, and a positive value
+ * if a recoverable error (e.g. invalid yy, yp, yyS or ypS values) 
+ * occured. If an unrecoverable occured, the integration is halted. 
+ * If a recoverable error occured, then (in most cases) IDAS
+ * will try to correct and retry.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDAQuadSensRhsFn)(int Ns, realtype t,
+                               N_Vector yy, N_Vector yp, 
+                               N_Vector *yyS, N_Vector *ypS, 
+                               N_Vector rrQ, N_Vector *rhsvalQS,
+                               void *user_data,
+                               N_Vector yytmp, N_Vector yptmp, N_Vector tmpQS);
+
+/*
+ * -----------------------------------------------------------------
+ * Types: IDAResFnB and IDAResFnBS
+ * -----------------------------------------------------------------
+ *    The resB function which defines the right hand side of the
+ *    DAE systems to be integrated backwards must have type IDAResFnB.
+ *    If the backward problem depends on forward sensitivities, its
+ *    RHS function must have type IDAResFnBS.
+ * -----------------------------------------------------------------
+ * Types: IDAQuadRhsFnB and IDAQuadRhsFnBS
+ * -----------------------------------------------------------------
+ *    The rhsQB function which defines the quadratures to be integrated
+ *    backwards must have type IDAQuadRhsFnB.
+ *    If the backward problem depends on forward sensitivities, its
+ *    quadrature RHS function must have type IDAQuadRhsFnBS.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDAResFnB)(realtype tt, 
+			 N_Vector yy, N_Vector yp,
+			 N_Vector yyB, N_Vector ypB, 
+                         N_Vector rrB, void *user_dataB);
+
+typedef int (*IDAResFnBS)(realtype t, 
+                          N_Vector yy, N_Vector yp, 
+                          N_Vector *yyS, N_Vector *ypS,
+                          N_Vector yyB, N_Vector ypB,
+                          N_Vector rrBS, void *user_dataB);
+
+typedef int (*IDAQuadRhsFnB)(realtype tt, 
+                             N_Vector yy, N_Vector yp, 
+                             N_Vector yyB, N_Vector ypB,
+                             N_Vector rhsvalBQ, void *user_dataB);
+
+typedef int (*IDAQuadRhsFnBS)(realtype t, 
+                              N_Vector yy, N_Vector yp,
+                              N_Vector *yyS, N_Vector *ypS,
+                              N_Vector yyB, N_Vector ypB,
+                              N_Vector rhsvalBQS, void *user_dataB);
+/*
+ * ================================================================
+ *          U S E R - C A L L A B L E   R O U T I N E S           
+ * ================================================================
+ */
+
+/* 
+ * ----------------------------------------------------------------
+ * Function : IDACreate                                           
+ * ----------------------------------------------------------------
+ * IDACreate creates an internal memory block for a problem to    
+ * be solved by IDA.                                              
+ *                                                                
+ * If successful, IDACreate returns a pointer to initialized      
+ * problem memory. This pointer should be passed to IDAInit.    
+ * If an initialization error occurs, IDACreate prints an error   
+ * message to standard err and returns NULL.                      
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void *IDACreate(void);
+
+/*
+ * ----------------------------------------------------------------
+ * Integrator optional input specification functions              
+ * ----------------------------------------------------------------
+ * The following functions can be called to set optional inputs   
+ * to values other than the defaults given below:                 
+ *                                                                
+ *                      |                                         
+ * Function             |  Optional input / [ default value ]     
+ *                      |                                          
+ * ---------------------------------------------------------------- 
+ *                      |                                          
+ * IDASetErrHandlerFn   | user-provided ErrHandler function.
+ *                      | [internal]
+ *                      |
+ * IDASetErrFile        | the file pointer for an error file
+ *                      | where all IDA warning and error
+ *                      | messages will be written if the default
+ *                      | internal error handling function is used. 
+ *                      | This parameter can be stdout (standard 
+ *                      | output), stderr (standard error), or a 
+ *                      | file pointer (corresponding to a user 
+ *                      | error file opened for writing) returned 
+ *                      | by fopen.
+ *                      | If not called, then all messages will
+ *                      | be written to the standard error stream.
+ *                      | [stderr]
+ *                      |                                          
+ * IDASetUserData       | a pointer to user data that will be     
+ *                      | passed to all user-supplied functions.
+ *                      | [NULL]                                  
+ *                      |         
+ * IDASetMaxOrd         | maximum lmm order to be used by the     
+ *                      | solver.                                 
+ *                      | [5]                                      
+ *                      |                                          
+ * IDASetMaxNumSteps    | maximum number of internal steps to be  
+ *                      | taken by the solver in its attempt to   
+ *                      | reach tout.                             
+ *                      | [500]                                   
+ *                      |                                          
+ * IDASetInitStep       | initial step size.                      
+ *                      | [estimated by IDA]                       
+ *                      |                                          
+ * IDASetMaxStep        | maximum absolute value of step size     
+ *                      | allowed.                                
+ *                      | [infinity]                              
+ *                      |                                          
+ * IDASetStopTime       | the independent variable value past     
+ *                      | which the solution is not to proceed.   
+ *                      | [infinity]                              
+ *                      |                                          
+ * IDASetNonlinConvCoef | Newton convergence test  constant       
+ *                      | for use during integration.             
+ *                      | [0.33]                                  
+ *                      |                                          
+ * IDASetMaxErrTestFails| Maximum number of error test failures   
+ *                      | in attempting one step.                 
+ *                      | [10]                                    
+ *                      |                                         
+ * IDASetMaxNonlinIters | Maximum number of nonlinear solver      
+ *                      | iterations at one solution.             
+ *                      | [4]                                     
+ *                      |                                         
+ * IDASetMaxConvFails   | Maximum number of allowable conv.       
+ *                      | failures in attempting one step.        
+ *                      | [10]                                    
+ *                      |                                         
+ * IDASetSuppressAlg    | flag to indicate whether or not to      
+ *                      | suppress algebraic variables in the     
+ *                      | local error tests:                      
+ *                      | FALSE = do not suppress;                 
+ *                      | TRUE = do suppress;                     
+ *                      | [FALSE]                                 
+ *                      | NOTE: if suppressed algebraic variables 
+ *                      | is selected, the nvector 'id' must be   
+ *                      | supplied for identification of those    
+ *                      | algebraic components (see IDASetId)    
+ *                      |                                          
+ * IDASetId             | an N_Vector, which states a given       
+ *                      | element to be either algebraic or       
+ *                      | differential.                           
+ *                      | A value of 1.0 indicates a differential 
+ *                      | variable while a 0.0 indicates an       
+ *                      | algebraic variable. 'id' is required    
+ *                      | if optional input SUPPRESSALG is set,   
+ *                      | or if IDACalcIC is to be called with    
+ *                      | icopt = IDA_YA_YDP_INIT.               
+ *                      |                                         
+ * IDASetConstraints    | an N_Vector defining inequality         
+ *                      | constraints for each component of the   
+ *                      | solution vector y. If a given element   
+ *                      | of this vector has values +2 or -2,     
+ *                      | then the corresponding component of y   
+ *                      | will be constrained to be > 0.0 or      
+ *                      | <0.0, respectively, while if it is +1   
+ *                      | or -1, the y component is constrained   
+ *                      | to be >= 0.0 or <= 0.0, respectively.   
+ *                      | If a component of constraints is 0.0,   
+ *                      | then no constraint is imposed on the    
+ *                      | corresponding component of y.           
+ *                      | The presence of a non-NULL constraints  
+ *                      | vector that is not 0.0 (ZERO) in all    
+ *                      | components will cause constraint        
+ *                      | checking to be performed.               
+ *                      |                                         
+ * -----------------------------------------------------------------
+ *                          |
+ * IDASetRootDirection      | Specifies the direction of zero
+ *                          | crossings to be monitored
+ *                          | [both directions]
+ *                          |
+ * IDASetNoInactiveRootWarn | disable warning about possible
+ *                          | g==0 at beginning of integration
+ *                          | 
+ * ---------------------------------------------------------------- 
+ * Return flag:
+ *   IDA_SUCCESS   if successful
+ *   IDA_MEM_NULL  if the IDAS memory is NULL
+ *   IDA_ILL_INPUT if an argument has an illegal value
+ *
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASetErrHandlerFn(void *ida_mem, IDAErrHandlerFn ehfun, void *eh_data);
+SUNDIALS_EXPORT int IDASetErrFile(void *ida_mem, FILE *errfp);
+SUNDIALS_EXPORT int IDASetUserData(void *ida_mem, void *user_data);
+SUNDIALS_EXPORT int IDASetMaxOrd(void *ida_mem, int maxord);
+SUNDIALS_EXPORT int IDASetMaxNumSteps(void *ida_mem, long int mxsteps);
+SUNDIALS_EXPORT int IDASetInitStep(void *ida_mem, realtype hin);
+SUNDIALS_EXPORT int IDASetMaxStep(void *ida_mem, realtype hmax);
+SUNDIALS_EXPORT int IDASetStopTime(void *ida_mem, realtype tstop);
+SUNDIALS_EXPORT int IDASetNonlinConvCoef(void *ida_mem, realtype epcon);
+SUNDIALS_EXPORT int IDASetMaxErrTestFails(void *ida_mem, int maxnef);
+SUNDIALS_EXPORT int IDASetMaxNonlinIters(void *ida_mem, int maxcor);
+SUNDIALS_EXPORT int IDASetMaxConvFails(void *ida_mem, int maxncf);
+SUNDIALS_EXPORT int IDASetSuppressAlg(void *ida_mem, booleantype suppressalg);
+SUNDIALS_EXPORT int IDASetId(void *ida_mem, N_Vector id);
+SUNDIALS_EXPORT int IDASetConstraints(void *ida_mem, N_Vector constraints);
+
+SUNDIALS_EXPORT int IDASetRootDirection(void *ida_mem, int *rootdir);
+SUNDIALS_EXPORT int IDASetNoInactiveRootWarn(void *ida_mem);
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDAInit                                           
+ * ----------------------------------------------------------------
+ * IDAInit allocates and initializes memory for a problem to    
+ * to be solved by IDAS.                                           
+ *                                                                
+ * res     is the residual function F in F(t,y,y') = 0.                     
+ *                                                                
+ * t0      is the initial value of t, the independent variable.   
+ *                                                                
+ * yy0     is the initial condition vector y(t0).                 
+ *                                                                
+ * yp0     is the initial condition vector y'(t0)                 
+ *                                                                
+ *  IDA_SUCCESS if successful
+ *  IDA_MEM_NULL if the IDAS memory was NULL
+ *  IDA_MEM_FAIL if a memory allocation failed
+ *  IDA_ILL_INPUT f an argument has an illegal value.
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAInit(void *ida_mem, IDAResFn res,
+                            realtype t0, N_Vector yy0, N_Vector yp0);
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDAReInit                                           
+ * ----------------------------------------------------------------
+ * IDAReInit re-initializes IDAS for the solution of a problem,    
+ * where a prior call to IDAInit has been made.                 
+ * IDAReInit performs the same input checking and initializations 
+ * that IDAInit does.                                           
+ * But it does no memory allocation, assuming that the existing   
+ * internal memory is sufficient for the new problem.             
+ *                                                                
+ * The use of IDAReInit requires that the maximum method order,   
+ * maxord, is no larger for the new problem than for the problem  
+ * specified in the last call to IDAInit.  This condition is    
+ * automatically fulfilled if the default value for maxord is     
+ * specified.                                                     
+ *                                                                
+ * Following the call to IDAReInit, a call to the linear solver   
+ * specification routine is necessary if a different linear solver
+ * is chosen, but may not be otherwise.  If the same linear solver
+ * is chosen, and there are no changes in its input parameters,   
+ * then no call to that routine is needed.                        
+ *                                                                
+ * The first argument to IDAReInit is:                            
+ *                                                                
+ * ida_mem = pointer to IDA memory returned by IDACreate.         
+ *                                                                
+ * All the remaining arguments to IDAReInit have names and        
+ * meanings identical to those of IDAInit.                      
+ *                                                                
+ * The return value of IDAReInit is equal to SUCCESS = 0 if there 
+ * were no errors; otherwise it is a negative int equal to:       
+ *   IDA_MEM_NULL   indicating ida_mem was NULL, or            
+ *   IDA_NO_MALLOC  indicating that ida_mem was not allocated. 
+ *   IDA_ILL_INPUT  indicating an input argument was illegal   
+ *                  (including an attempt to increase maxord). 
+ * In case of an error return, an error message is also printed.  
+ * ----------------------------------------------------------------
+ */                                                                
+
+SUNDIALS_EXPORT int IDAReInit(void *ida_mem,
+			      realtype t0, N_Vector yy0, N_Vector yp0);
+ 
+/*
+ * -----------------------------------------------------------------
+ * Functions : IDASStolerances
+ *             IDASVtolerances
+ *             IDAWFtolerances
+ * -----------------------------------------------------------------
+ *
+ * These functions specify the integration tolerances. One of them
+ * MUST be called before the first call to IDA.
+ *
+ * IDASStolerances specifies scalar relative and absolute tolerances.
+ * IDASVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component).
+ * IDAWFtolerances specifies a user-provides function (of type IDAEwtFn)
+ *   which will be called to set the error weight vector.
+ *
+ * The tolerances reltol and abstol define a vector of error weights,
+ * ewt, with components
+ *   ewt[i] = 1/(reltol*abs(y[i]) + abstol)      (in the SS case), or
+ *   ewt[i] = 1/(reltol*abs(y[i]) + abstol[i])   (in the SV case).
+ * This vector is used in all error and convergence tests, which
+ * use a weighted RMS norm on all error-like vectors v:
+ *    WRMSnorm(v) = sqrt( (1/N) sum(i=1..N) (v[i]*ewt[i])^2 ),
+ * where N is the problem dimension.
+ *
+ * The return value of these functions is equal to IDA_SUCCESS = 0 if
+ * there were no errors; otherwise it is a negative int equal to:
+ *   IDa_MEM_NULL     indicating ida_mem was NULL (i.e.,
+ *                    IDACreate has not been called).
+ *   IDA_NO_MALLOC    indicating that ida_mem has not been
+ *                    allocated (i.e., IDAInit has not been
+ *                    called).
+ *   IDA_ILL_INPUT    indicating an input argument was illegal
+ *                    (e.g. a negative tolerance)
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASStolerances(void *ida_mem, realtype reltol, realtype abstol);
+SUNDIALS_EXPORT int IDASVtolerances(void *ida_mem, realtype reltol, N_Vector abstol);
+SUNDIALS_EXPORT int IDAWFtolerances(void *ida_mem, IDAEwtFn efun);
+
+/* ----------------------------------------------------------------
+ * Initial Conditions optional input specification functions      
+ * ----------------------------------------------------------------
+ * The following functions can be called to set optional inputs   
+ * to control the initial conditions calculations.                
+ *                                                                
+ *                        |                                        
+ * Function               |  Optional input / [ default value ]   
+ *                        |                                        
+ * -------------------------------------------------------------- 
+ *                        |                                        
+ * IDASetNonlinConvCoefIC | positive coeficient in the Newton     
+ *                        | convergence test.  This test uses a   
+ *                        | weighted RMS norm (with weights       
+ *                        | defined by the tolerances, as in      
+ *                        | IDASolve).  For new initial value     
+ *                        | vectors y and y' to be accepted, the  
+ *                        | norm of J-inverse F(t0,y,y') is       
+ *                        | required to be less than epiccon,     
+ *                        | where J is the system Jacobian.       
+ *                        | [0.01 * 0.33]                          
+ *                        |                                        
+ * IDASetMaxNumStepsIC    | maximum number of values of h allowed 
+ *                        | when icopt = IDA_YA_YDP_INIT, where  
+ *                        | h appears in the system Jacobian,     
+ *                        | J = dF/dy + (1/h)dF/dy'.              
+ *                        | [5]                                   
+ *                        |                                        
+ * IDASetMaxNumJacsIC     | maximum number of values of the       
+ *                        | approximate Jacobian or preconditioner
+ *                        | allowed, when the Newton iterations   
+ *                        | appear to be slowly converging.       
+ *                        | [4]                                    
+ *                        |                                        
+ * IDASetMaxNumItersIC    | maximum number of Newton iterations   
+ *                        | allowed in any one attempt to solve   
+ *                        | the IC problem.                       
+ *                        | [10]                                  
+ *                        |                                        
+ * IDASetLineSearchOffIC  | a boolean flag to turn off the        
+ *                        | linesearch algorithm.                 
+ *                        | [FALSE]                               
+ *                        |                                        
+ * IDASetStepToleranceIC  | positive lower bound on the norm of   
+ *                        | a Newton step.                        
+ *                        | [(unit roundoff)^(2/3)                
+ *                                                                
+ * ---------------------------------------------------------------- 
+ * Return flag:
+ *   IDA_SUCCESS   if successful
+ *   IDA_MEM_NULL  if the IDAS memory is NULL
+ *   IDA_ILL_INPUT if an argument has an illegal value
+ *
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASetNonlinConvCoefIC(void *ida_mem, realtype epiccon);
+SUNDIALS_EXPORT int IDASetMaxNumStepsIC(void *ida_mem, int maxnh);
+SUNDIALS_EXPORT int IDASetMaxNumJacsIC(void *ida_mem, int maxnj);
+SUNDIALS_EXPORT int IDASetMaxNumItersIC(void *ida_mem, int maxnit);
+SUNDIALS_EXPORT int IDASetLineSearchOffIC(void *ida_mem, booleantype lsoff);
+SUNDIALS_EXPORT int IDASetStepToleranceIC(void *ida_mem, realtype steptol);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDARootInit
+ * -----------------------------------------------------------------
+ * IDARootInit initializes a rootfinding problem to be solved
+ * during the integration of the DAE system.  It must be called
+ * after IDACreate, and before IDASolve.  The arguments are:
+ *
+ * ida_mem = pointer to IDA memory returned by IDACreate.
+ *
+ * nrtfn   = number of functions g_i, an int >= 0.
+ *
+ * g       = name of user-supplied function, of type IDARootFn,
+ *           defining the functions g_i whose roots are sought.
+ *
+ * If a new problem is to be solved with a call to IDAReInit,
+ * where the new problem has no root functions but the prior one
+ * did, then call IDARootInit with nrtfn = 0.
+ *
+ * The return value of IDARootInit is IDA_SUCCESS = 0 if there were
+ * no errors; otherwise it is a negative int equal to:
+ *   IDA_MEM_NULL     indicating ida_mem was NULL, or
+ *   IDA_MEM_FAIL     indicating a memory allocation failed.
+ *                    (including an attempt to increase maxord).
+ *   IDA_ILL_INPUT    indicating nrtfn > 0 but g = NULL.
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDARootInit(void *ida_mem, int nrtfn, IDARootFn g);
+
+/*
+ * -----------------------------------------------------------------
+ * Quadrature optional input specification functions
+ * -----------------------------------------------------------------
+ * The following function can be called to set optional inputs
+ * to values other than the defaults given below:
+ *
+ * Function             |  Optional input / [ default value ]
+ * --------------------------------------------------------------
+ *                      |
+ * IDASetQuadErrCon     | are quadrature variables considered in
+ *                      | the error control?
+ *                      | If yes, set tolerances for quadrature
+ *                      | integration. 
+ *                      | [errconQ = FALSE]
+ *                      |
+ * -----------------------------------------------------------------
+ * If successful, the function return IDA_SUCCESS. If an argument
+ * has an illegal value, they print an error message to the
+ * file specified by errfp and return one of the error flags
+ * defined for the IDASet* routines.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASetQuadErrCon(void *ida_mem, booleantype errconQ);
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDAQuadInit and IDAQuadReInit                                     
+ * ----------------------------------------------------------------
+ * IDAQuadInit allocates and initializes memory related to      
+ * quadrature integration.                                        
+ *
+ * IDAQuadReInit re-initializes IDAS's quadrature related         
+ * memory for a problem, assuming it has already been allocated   
+ * in prior calls to IDAInit and IDAQuadInit. 
+ *                                                                
+ * ida_mem is a pointer to IDAS memory returned by IDACreate      
+ *                                                                
+ * rhsQ  is the user-provided integrand routine.                  
+ *                                                                
+ * yQ0   is a pointer to a vector specification structure         
+ *       for N_Vectors containing quadrature variables.           
+ *                                                                
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAQuadInit(void *ida_mem, IDAQuadRhsFn rhsQ, N_Vector yQ0);
+SUNDIALS_EXPORT int IDAQuadReInit(void *ida_mem, N_Vector yQ0);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : IDAQuadSStolerances
+ *             IDAQuadSVtolerances
+ * -----------------------------------------------------------------
+ *
+ * These functions specify the integration tolerances for quadrature
+ * variables. One of them MUST be called before the first call to
+ * IDA IF error control on the quadrature variables is enabled
+ * (see IDASetQuadErrCon).
+ *
+ * IDASStolerances specifies scalar relative and absolute tolerances.
+ * IDASVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component).
+ *
+ * Return values:
+ *  IDA_SUCCESS    if successful
+ *  IDA_MEM_NULL   if the solver memory was NULL
+ *  IDA_NO_QUAD    if quadratures were not initialized
+ *  IDA_ILL_INPUT  if an input argument was illegal
+ *                 (e.g. a negative tolerance)
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAQuadSStolerances(void *ida_mem, realtype reltolQ, realtype abstolQ);
+SUNDIALS_EXPORT int IDAQuadSVtolerances(void *ida_mem, realtype reltolQ, N_Vector abstolQ);
+
+/* 
+ * ----------------------------------------------------------------
+ * Forward sensitivity optional input specification functions     
+ * ----------------------------------------------------------------
+ * The following functions can be called to set optional inputs   
+ * to other values than the defaults given below:                 
+ *                                                                
+ * Function                 |  Optional input / [ default value ]     
+ *                          |                                          
+ * -------------------------------------------------------------- 
+ *                          |                                         
+ * IDASetSensDQMethod       | controls the selection of finite
+ *                          | difference schemes used in evaluating
+ *                          | the sensitivity right hand sides:
+ *                          | (centered vs. forward and 
+ *                          | simultaneous vs. separate)
+ *                          | [DQtype=IDA_CENTERED]
+ *                          | [DQrhomax=0.0]                                   
+ *                          |                                         
+ * IDASetSensParams         |   parameter information:
+ *                          | p: pointer to problem parameters
+ *                          | plist: list of parameters with respect
+ *                          |        to which sensitivities are to be
+ *                          |        computed.
+ *                          | pbar: order of magnitude info. 
+ *                          |       Typically, if p[plist[i]] is nonzero, 
+ *                          |       pbar[i]=p[plist[i]].
+ *                          | [p=NULL]
+ *                          | [plist=NULL]
+ *                          | [pbar=NULL]                               
+ *                          |                                         
+ * IDASetSensErrCon         | are sensitivity variables considered in 
+ *                          | the error control?                      
+ *                          | [TRUE]                                  
+ *                          |                                         
+ * IDASetSensMaxNonlinIters | Maximum number of nonlinear solver  
+ *                          | iterations for sensitivity systems  
+ *                          | (staggered)                         
+ *                          | [4]                                 
+ *                          |                                     
+ * -------------------------------------------------------------- 
+ * If successful, these functions return IDA_SUCCESS. If an argument  
+ * has an illegal value, they return one of the error flags      
+ * defined for the IDASet* routines.                              
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASetSensDQMethod(void *ida_mem, int DQtype, realtype DQrhomax);
+SUNDIALS_EXPORT int IDASetSensParams(void *ida_mem, realtype *p, realtype *pbar, int *plist);
+SUNDIALS_EXPORT int IDASetSensErrCon(void *ida_mem, booleantype errconS);
+SUNDIALS_EXPORT int IDASetSensMaxNonlinIters(void *ida_mem, int maxcorS);
+  
+/*
+ * ----------------------------------------------------------------
+ * Function : IDASensInit                                       
+ * ----------------------------------------------------------------
+ * IDASensInit allocates and initializes memory related to      
+ * sensitivity computations.                                      
+ *                                                                
+ * ida_mem is a pointer to IDAS memory returned by IDACreate.     
+ *                                                                
+ * Ns        is the number of sensitivities to be computed.       
+ *                                                                
+ * ism       is the type of corrector used in sensitivity         
+ *           analysis. The legal values are: SIMULTANEOUS
+ *           and STAGGERED (see previous description) 
+ *                                                                
+ * yS0       is the array of initial condition vectors for        
+ *           sensitivity variables.                                
+ *                                                                
+ * ypS0      is the array of initial condition vectors for        
+ *           sensitivity derivatives.                              
+ *                                                                
+ * If successful, IDASensInit returns SUCCESS. If an            
+ * initialization error occurs, IDASensInit returns one of      
+ * the error flags defined above.                                 
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASensInit(void *ida_mem, int Ns, int ism, 
+                                IDASensResFn resS,
+                                N_Vector *yS0, N_Vector *ypS0);
+  
+  
+/*
+ * ----------------------------------------------------------------
+ * Function : IDASensReInit                                       
+ * ----------------------------------------------------------------
+ * IDASensReInit re-initializes the IDAS sensitivity related      
+ * memory for a problem, assuming it has already been allocated   
+ * in prior calls to IDAInit and IDASensInit.                 
+ *                                                                
+ * All problem specification inputs are checked for errors.       
+ * The number of sensitivities Ns is assumed to be unchanged      
+ * since the previous call to IDASensInit.                      
+ * If any error occurs during initialization, it is reported to   
+ * the file whose file pointer is errfp.                          
+ *                                                                
+ * IDASensReInit potentially does some minimal memory allocation  
+ * (for the sensitivity absolute tolerance).
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+SUNDIALS_EXPORT int IDASensReInit(void *ida_mem, int ism, N_Vector *yS0, N_Vector *ypS0);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASensToggleOff
+ * -----------------------------------------------------------------
+ * IDASensToggleOff deactivates sensitivity calculations.
+ * It does NOT deallocate sensitivity-related memory so that 
+ * sensitivity computations can be later toggled ON (through
+ * IDASensReInit).
+ * 
+ * 
+ * The return value is equal to IDA_SUCCESS = 0 if there were no
+ * errors or IDA_MEM_NULL if ida_mem was NULL
+ * -----------------------------------------------------------------
+ */
+SUNDIALS_EXPORT int IDASensToggleOff(void *ida_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : IDASensSStolerances
+ *             IDASensSVtolerances
+ *             IDASensEEtolerances
+ * -----------------------------------------------------------------
+ *
+ * These functions specify the integration tolerances for sensitivity
+ * variables. One of them MUST be called before the first call to IDASolve.
+ *
+ * IDASensSStolerances specifies scalar relative and absolute tolerances.
+ * IDASensSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance for each sensitivity vector (a potentially different
+ *   absolute tolerance for each vector component).
+ * IDASensEEtolerances specifies that tolerances for sensitivity variables
+ *   should be estimated from those provided for the state variables.
+ *
+ * The return value is equal to IDA_SUCCESS = 0 if there were no
+ * errors; otherwise it is a negative int equal to:
+ *   IDA_MEM_NULL  indicating ida_mem was NULL, or
+ *   IDA_NO_SENS   indicating there was not a prior call to
+ *                IDASensInit.
+ *   IDA_ILL_INPUT indicating an input argument was illegal
+ *                (e.g. negative tolerances)
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+SUNDIALS_EXPORT int IDASensSStolerances(void *ida_mem, realtype reltolS, realtype *abstolS);
+SUNDIALS_EXPORT int IDASensSVtolerances(void *ida_mem, realtype reltolS, N_Vector *abstolS);
+SUNDIALS_EXPORT int IDASensEEtolerances(void *ida_mem);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDAQuadSensInit and IDAQuadSensReInit
+ * -----------------------------------------------------------------
+ * IDAQuadSensInit allocates and initializes memory related to
+ * quadrature integration.
+ *
+ * IDAQuadSensReInit re-initializes IDAS' sensitivity quadrature 
+ * related memory for a problem, assuming it has already been 
+ * allocated in prior calls to IDAInit and IDAQuadSensInit.
+ * The number of quadratures Ns is assumed to be unchanged
+ * since the previous call to IDAQuadInit.
+ *
+ * ida_mem is a pointer to IDAS memory returned by IDACreate
+ *
+ * resQS     is the sensitivity righ-hand side function
+ *        (pass NULL to use the internal DQ approximation)
+ *
+ * yQS    is an N_Vector with initial values for sensitivities
+
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAQuadSensInit(void *ida_mem, IDAQuadSensRhsFn resQS, N_Vector *yQS0);
+SUNDIALS_EXPORT int IDAQuadSensReInit(void *ida_mem, N_Vector *yQS0);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : IDAQuadSensSStolerances
+ *             IDAQuadSensSVtolerances
+ *             IDAQuadSensEEtolerances
+ * -----------------------------------------------------------------
+ *
+ * These functions specify the integration tolerances for quadrature
+ * sensitivity variables. One of them MUST be called before the first
+ * call to IDAS IF these variables are included in the error test.
+ *
+ * IDAQuadSensSStolerances specifies scalar relative and absolute tolerances.
+ * IDAQuadSensSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance for each quadrature sensitivity vector (a potentially
+ *   different absolute tolerance for each vector component).
+ * IDAQuadSensEEtolerances specifies that tolerances for sensitivity variables
+ *   should be estimated from those provided for the quadrature variables.
+ *   In this case, tolerances for the quadrature variables must be
+ *   specified through a call to one of IDAQuad**tolerances.
+ *
+ * The return value is equal to IDA_SUCCESS = 0 if there were no
+ * errors; otherwise it is a negative int equal to:
+ *   IDA_MEM_NULL     if ida_mem was NULL, or
+ *   IDA_NO_QUADSENS  if there was not a prior call to
+ *                    IDAQuadSensInit.
+ *   IDA_ILL_INPUT    if an input argument was illegal
+ *                   (e.g. negative tolerances)
+ * In case of an error return, an error message is also printed.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAQuadSensSStolerances(void *ida_mem, realtype reltolQS, realtype *abstolQS);
+SUNDIALS_EXPORT int IDAQuadSensSVtolerances(void *ida_mem, realtype reltolQS, N_Vector *abstolQS);
+SUNDIALS_EXPORT int IDAQuadSensEEtolerances(void *ida_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDASetQuadSensErrCon 
+ * -----------------------------------------------------------------
+ * IDASetQuadSensErrCon specifies if quadrature sensitivity variables
+ * are considered or not in the error control.
+ *
+ * If yes, tolerances for quadrature sensitivity variables are 
+ * required. The function is optional, by default IDAS does not
+ * quadrature sensitivities in error control.
+ * 
+ * The return value is equal to IDA_SUCCESS = 0 if there were no
+ * errors or IDA_MEM_NULL if ida_mem was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASetQuadSensErrCon(void *ida_mem, booleantype errconQS);
+
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDACalcIC                                          
+ * ----------------------------------------------------------------
+ * IDACalcIC calculates corrected initial conditions for the DAE  
+ * system for a class of index-one problems of semi-implicit form.
+ * It uses Newton iteration combined with a Linesearch algorithm. 
+ * Calling IDACalcIC is optional. It is only necessary when the   
+ * initial conditions do not solve the given system.  I.e., if    
+ * y0 and yp0 are known to satisfy F(t0, y0, yp0) = 0, then       
+ * a call to IDACalcIC is NOT necessary (for index-one problems). 
+ *                                                                
+ * A call to IDACalcIC must be preceded by a successful call to   
+ * IDAInit or IDAReInit for the given DAE problem, and by a     
+ * successful call to the linear system solver specification      
+ * routine.                                                       
+ *
+ * The call to IDACalcIC should precede the call(s) to IDASolve   
+ * for the given problem.                                         
+ *                                                                
+ * The arguments to IDACalcIC are as follows:                             
+ *                                                                
+ * ida_mem is the pointer to IDA memory returned by IDACreate.    
+ *                                                                
+ * icopt  is the option of IDACalcIC to be used.                  
+ *        icopt = IDA_YA_YDP_INIT   directs IDACalcIC to compute 
+ *                the algebraic components of y and differential  
+ *                components of y', given the differential        
+ *                components of y.  This option requires that the 
+ *                N_Vector id was set through a call to IDASetId  
+ *                specifying the differential and algebraic       
+ *                components.                                     
+ *        icopt = IDA_Y_INIT   directs IDACalcIC to compute all  
+ *                components of y, given y'.  id is not required. 
+ *                                                                
+ * tout1  is the first value of t at which a soluton will be      
+ *        requested (from IDASolve).  (This is needed here to     
+ *        determine the direction of integration and rough scale  
+ *        in the independent variable t.)                          
+ *                                                                
+ *                                                                
+ * IDACalcIC returns an int flag.  Its symbolic values and their  
+ * meanings are as follows.  (The numerical return values are set 
+ * above in this file.)  All unsuccessful returns give a negative 
+ * return value.  If IFACalcIC failed, y0 and yp0 contain         
+ * (possibly) altered values, computed during the attempt.        
+ *                                                                
+ * IDA_SUCCESS         IDACalcIC was successful.  The corrected   
+ *                     initial value vectors were stored internally.
+ *                                                                
+ * IDA_MEM_NULL        The argument ida_mem was NULL.             
+ *                                                                
+ * IDA_ILL_INPUT       One of the input arguments was illegal.    
+ *                     See printed message.                       
+ *                                                                
+ * IDA_LINIT_FAIL      The linear solver's init routine failed.   
+ *                                                                
+ * IDA_BAD_EWT         Some component of the error weight vector  
+ *                     is zero (illegal), either for the input    
+ *                     value of y0 or a corrected value.          
+ *                                                                
+ * IDA_RES_FAIL        The user's residual routine returned 
+ *                     a non-recoverable error flag.              
+ *                                                                
+ * IDA_FIRST_RES_FAIL  The user's residual routine returned 
+ *                     a recoverable error flag on the first call,
+ *                     but IDACalcIC was unable to recover.       
+ *                                                                
+ * IDA_LSETUP_FAIL     The linear solver's setup routine had a    
+ *                     non-recoverable error.                     
+ *                                                                
+ * IDA_LSOLVE_FAIL     The linear solver's solve routine had a    
+ *                     non-recoverable error.                     
+ *                                                                
+ * IDA_NO_RECOVERY     The user's residual routine, or the linear 
+ *                     solver's setup or solve routine had a      
+ *                     recoverable error, but IDACalcIC was       
+ *                     unable to recover.                         
+ *                                                                
+ * IDA_CONSTR_FAIL     IDACalcIC was unable to find a solution    
+ *                     satisfying the inequality constraints.     
+ *                                                                
+ * IDA_LINESEARCH_FAIL The Linesearch algorithm failed to find a  
+ *                     solution with a step larger than steptol   
+ *                     in weighted RMS norm.                      
+ *                                                                
+ * IDA_CONV_FAIL       IDACalcIC failed to get convergence of the 
+ *                     Newton iterations.                         
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDACalcIC(void *ida_mem, int icopt, realtype tout1); 
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDASolve                                            
+ * ----------------------------------------------------------------
+ * IDASolve integrates the DAE over an interval in t, the         
+ * independent variable. If itask is IDA_NORMAL, then the solver      
+ * integrates from its current internal t value to a point at or  
+ * beyond tout, then interpolates to t = tout and returns y(tret) 
+ * in the user-allocated vector yret. In general, tret = tout.    
+ * If itask is IDA_ONE_STEP, then the solver takes one internal
+ * step of the independent variable and returns in yret the value
+ * of y at the new internal independent variable value. In this
+ * case, tout is used only during the first call to IDASolve to         
+ * determine the direction of integration and the rough scale of  
+ * the problem. If tstop is enabled (through a call to IDASetStopTime),
+ * then IDASolve returns the solution at tstop. Once the integrator
+ * returns at a tstop time, any future testing for tstop is disabled
+ * (and can be reenabled only though a new call to IDASetStopTime).
+ * The time reached by the solver is placed in (*tret). The
+ * user is responsible for allocating the memory for this value.
+ *                                                                
+ * ida_mem is the pointer (void) to IDA memory returned by        
+ *         IDACreate.
+ *                                                                
+ * tout    is the next independent variable value at which a      
+ *         computed solution is desired.                          
+ *                                                                
+ * tret    is a pointer to a real location.  IDASolve sets (*tret)
+ *         to the actual t value reached, corresponding to the
+ *         solution vector yret.  In IDA_NORMAL mode, with no
+ *         errors and no roots found, (*tret) = tout.
+ *
+ * yret    is the computed solution vector.  With no errors,
+ *         yret = y(tret).                                        
+ *                                                                
+ * ypret   is the derivative of the computed solution at t = tret.
+ *                                                                
+ * Note: yret and ypret may be the same N_Vectors as y0 and yp0   
+ * in the call to IDAInit or IDAReInit.                         
+ *                                                                
+ * itask   is IDA_NORMAL or IDA_ONE_STEP. These two modes are described above.
+ *
+ *
+ * The return values for IDASolve are described below.            
+ * (The numerical return values are defined above in this file.)  
+ * All unsuccessful returns give a negative return value.         
+ *                                                                
+ * IDA_SUCCESS
+ *   IDASolve succeeded and no roots were found.                       
+ *
+ * IDA_ROOT_RETURN:  IDASolve succeeded, and found one or more roots.
+ *   If nrtfn > 1, call IDAGetRootInfo to see which g_i were found
+ *   to have a root at (*tret).
+ *
+ * IDA_TSTOP_RETURN: 
+ *   IDASolve returns computed results for the independent variable 
+ *   value tstop. That is, tstop was reached.                            
+ *                                                                
+ * IDA_MEM_NULL: 
+ *   The ida_mem argument was NULL.            
+ *                                                                
+ * IDA_ILL_INPUT: 
+ *   One of the inputs to IDASolve is illegal. This includes the 
+ *   situation when a component of the error weight vectors 
+ *   becomes < 0 during internal stepping.  It also includes the
+ *   situation where a root of one of the root functions was found
+ *   both at t0 and very near t0.  The ILL_INPUT flag          
+ *   will also be returned if the linear solver function IDA---
+ *   (called by the user after calling IDACreate) failed to set one 
+ *   of the linear solver-related fields in ida_mem or if the linear 
+ *   solver's init routine failed. In any case, the user should see 
+ *   the printed error message for more details.                
+ *                                                                
+ * IDA_TOO_MUCH_WORK: 
+ *   The solver took mxstep internal steps but could not reach tout. 
+ *   The default value for mxstep is MXSTEP_DEFAULT = 500.                
+ *                                                                
+ * IDA_TOO_MUCH_ACC: 
+ *   The solver could not satisfy the accuracy demanded by the user 
+ *   for some internal step.   
+ *                                                                
+ * IDA_ERR_FAIL:
+ *   Error test failures occurred too many times (=MXETF = 10) during 
+ *   one internal step.  
+ *                                                                
+ * IDA_CONV_FAIL: 
+ *   Convergence test failures occurred too many times (= MXNCF = 10) 
+ *   during one internal step.                                          
+ *                                                                
+ * IDA_LSETUP_FAIL: 
+ *   The linear solver's setup routine failed  
+ *   in an unrecoverable manner.                    
+ *                                                                
+ * IDA_LSOLVE_FAIL: 
+ *   The linear solver's solve routine failed  
+ *   in an unrecoverable manner.                    
+ *                                                                
+ * IDA_CONSTR_FAIL:
+ *    The inequality constraints were violated, 
+ *    and the solver was unable to recover.         
+ *                                                                
+ * IDA_REP_RES_ERR: 
+ *    The user's residual function repeatedly returned a recoverable 
+ *    error flag, but the solver was unable to recover.                 
+ *                                                                
+ * IDA_RES_FAIL:
+ *    The user's residual function returned a nonrecoverable error 
+ *    flag.
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASolve(void *ida_mem, realtype tout, realtype *tret,
+			     N_Vector yret, N_Vector ypret, int itask);
+
+/*
+ * ----------------------------------------------------------------
+ * Function: IDAGetDky                                     
+ * ----------------------------------------------------------------
+ *
+ * This routine computes the k-th derivative of the interpolating
+ * polynomial at the time t and stores the result in the vector dky.
+ *
+ * The return values are:                                         
+ *   IDA_SUCCESS:  succeess.                                  
+ *   IDA_BAD_T:    t is not in the interval [tn-hu,tn].                   
+ *   IDA_MEM_NULL: The ida_mem argument was NULL.
+ *   IDA_BAD_DKY  if the dky vector is NULL.
+ *   IDA_BAD_K    if the requested k is not in the range 0,1,...,order used 
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetDky(void *ida_mem, realtype t, int k, N_Vector dky);
+
+/* ----------------------------------------------------------------
+ * Integrator optional output extraction functions                
+ * ----------------------------------------------------------------
+ *                                                                
+ * The following functions can be called to get optional outputs  
+ * and statistics related to the main integrator.                 
+ * ---------------------------------------------------------------- 
+ *                                                                
+ * IDAGetWorkSpace returns the IDA real and integer workspace sizes      
+ * IDAGetNumSteps returns the cumulative number of internal       
+ *       steps taken by the solver                                
+ * IDAGetNumResEvals returns the number of calls to the user's    
+ *       res function                                             
+ * IDAGetNumLinSolvSetups returns the number of calls made to     
+ *       the linear solver's setup routine                        
+ * IDAGetNumErrTestFails returns the number of local error test   
+ *       failures that have occured                               
+ * IDAGetNumBacktrackOps returns the number of backtrack          
+ *       operations done in the linesearch algorithm in IDACalcIC 
+ * IDAGetConsistentIC returns the consistent initial conditions
+ *       computed by IDACalcIC
+ * IDAGetLastOrder returns the order used during the last         
+ *       internal step                                            
+ * IDAGetCurentOrder returns the order to be used on the next     
+ *       internal step                                            
+ * IDAGetActualInitStep returns the actual initial step size      
+ *       used by IDA                                              
+ * IDAGetLastStep returns the step size for the last internal     
+ *       step (if from IDASolve), or the last value of the        
+ *       artificial step size h (if from IDACalcIC)               
+ * IDAGetCurrentStep returns the step size to be attempted on the 
+ *       next internal step                                       
+ * IDAGetCurrentTime returns the current internal time reached    
+ *       by the solver                                            
+ * IDAGetTolScaleFactor returns a suggested factor by which the   
+ *       user's tolerances should be scaled when too much         
+ *       accuracy has been requested for some internal step       
+ * IDAGetErrWeights returns the current state error weight vector.        
+ *       The user must allocate space for eweight.
+ * IDAGetEstLocalErrors returns the estimated local errors. The user
+ *       must allocate space for the vector ele.
+ * IDAGetNumGEvals returns the number of calls to the user's
+ *       g function (for rootfinding)
+ * IDAGetRootInfo returns the indices for which g_i was found to 
+ *       have a root. The user must allocate space for rootsfound.
+ *       For i = 0 ... nrtfn-1, rootsfound[i] = 1 if g_i has a root,
+ *       and rootsfound[i]= 0 if not.
+ *                                                                
+ * IDAGet* return values:
+ *   IDA_SUCCESS   if succesful
+ *   IDA_MEM_NULL  if the IDAS memory was NULL
+ *   IDA_ILL_INPUT if some input is illegal
+ *
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetWorkSpace(void *ida_mem, long int *lenrw, long int *leniw);
+SUNDIALS_EXPORT int IDAGetNumSteps(void *ida_mem, long int *nsteps);
+SUNDIALS_EXPORT int IDAGetNumResEvals(void *ida_mem, long int *nrevals);
+SUNDIALS_EXPORT int IDAGetNumLinSolvSetups(void *ida_mem, long int *nlinsetups);
+SUNDIALS_EXPORT int IDAGetNumErrTestFails(void *ida_mem, long int *netfails);
+SUNDIALS_EXPORT int IDAGetNumBacktrackOps(void *ida_mem, long int *nbacktr);
+SUNDIALS_EXPORT int IDAGetConsistentIC(void *ida_mem, N_Vector yy0_mod, N_Vector yp0_mod);
+SUNDIALS_EXPORT int IDAGetLastOrder(void *ida_mem, int *klast);
+SUNDIALS_EXPORT int IDAGetCurrentOrder(void *ida_mem, int *kcur);
+SUNDIALS_EXPORT int IDAGetActualInitStep(void *ida_mem, realtype *hinused);
+SUNDIALS_EXPORT int IDAGetLastStep(void *ida_mem, realtype *hlast);
+SUNDIALS_EXPORT int IDAGetCurrentStep(void *ida_mem, realtype *hcur);
+SUNDIALS_EXPORT int IDAGetCurrentTime(void *ida_mem, realtype *tcur);
+SUNDIALS_EXPORT int IDAGetTolScaleFactor(void *ida_mem, realtype *tolsfact);
+SUNDIALS_EXPORT int IDAGetErrWeights(void *ida_mem, N_Vector eweight);
+SUNDIALS_EXPORT int IDAGetEstLocalErrors(void *ida_mem, N_Vector ele);
+SUNDIALS_EXPORT int IDAGetNumGEvals(void *ida_mem, long int *ngevals);
+SUNDIALS_EXPORT int IDAGetRootInfo(void *ida_mem, int *rootsfound);
+
+/*
+ * ----------------------------------------------------------------
+ * As a convenience, the following function provides the          
+ * optional outputs in a group.                                   
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetIntegratorStats(void *ida_mem, long int *nsteps, 
+					  long int *nrevals, long int *nlinsetups, 
+					  long int *netfails, int *qlast, int *qcur, 
+					  realtype *hinused, realtype *hlast, realtype *hcur, 
+					  realtype *tcur);
+/*
+ * ----------------------------------------------------------------
+ * Nonlinear solver optional output extraction functions          
+ * ----------------------------------------------------------------
+ *                                                                
+ * The following functions can be called to get optional outputs  
+ * and statistics related to the nonlinear solver.                
+ * -------------------------------------------------------------- 
+ *                                                                
+ * IDAGetNumNonlinSolvIters returns the number of nonlinear       
+ *       solver iterations performed.                             
+ * IDAGetNumNonlinSolvConvFails returns the number of nonlinear   
+ *       convergence failures.                                    
+ *                                                                
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetNumNonlinSolvIters(void *ida_mem, long int *nniters);
+SUNDIALS_EXPORT int IDAGetNumNonlinSolvConvFails(void *ida_mem, long int *nncfails);
+
+/*
+ * ----------------------------------------------------------------
+ * As a convenience, the following function provides the          
+ * nonlinear solver optional outputs in a group.                                   
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetNonlinSolvStats(void *ida_mem, long int *nniters, 
+					  long int *nncfails);
+
+/*
+ * -----------------------------------------------------------------
+ * Quadrature integration solution extraction routines
+ * -----------------------------------------------------------------
+ * The following function can be called to obtain the quadrature
+ * variables after a successful integration step.
+ * If quadratures were not computed, it returns IDA_NO_QUAD.
+ *
+ * IDAGetQuad returns the quadrature variables at the same time
+ *   as that at which IDASolve returned the solution.
+ *
+ * IDAGetQuadDky returns the quadrature variables (or their 
+ *   derivatives up to the current method order) at any time within
+ *   the last integration step (dense output). 
+ *
+ * The output vectors yQout and dky must be allocated by the user.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetQuad(void *ida_mem, realtype *t, N_Vector yQout);
+SUNDIALS_EXPORT int IDAGetQuadDky(void *ida_mem, realtype t, int k, N_Vector dky);
+/*
+ * -----------------------------------------------------------------
+ * Quadrature integration optional output extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistics related to the integration of quadratures.
+ * -----------------------------------------------------------------
+ * IDAGetQuadNumRhsEvals returns the number of calls to the
+ *                       user function rhsQ defining the right hand
+ *                       side of the quadrature variables.
+ * IDAGetQuadNumErrTestFails returns the number of local error
+ *                           test failures for quadrature variables.
+ * IDAGetQuadErrWeights returns the vector of error weights for
+ *                      the quadrature variables. The user must
+ *                      allocate space for ewtQ.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetQuadNumRhsEvals(void *ida_mem, long int *nrhsQevals);
+SUNDIALS_EXPORT int IDAGetQuadNumErrTestFails(void *ida_mem, long int *nQetfails);
+SUNDIALS_EXPORT int IDAGetQuadErrWeights(void *ida_mem, N_Vector eQweight);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following function provides the
+ * optional outputs in a group.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetQuadStats(void *ida_mem, 
+                                    long int *nrhsQevals, long int *nQetfails);
+
+/*
+ * -----------------------------------------------------------------
+ * Sensitivity solution extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to obtain the sensitivity
+ * variables after a successful integration step.
+ * 
+ * IDAGetSens and IDAGetSens1 return all the sensitivity vectors
+ *   or only one of them, respectively, at the same time as that at 
+ *   which IDASolve returned the solution.
+ *   The array of output vectors or output vector ySout must be
+ *   allocated by the user.
+ *
+ * IDAGetSensDky1 computes the kth derivative of the is-th
+ *   sensitivity (is=1, 2, ..., Ns) of the y function at time t,
+ *   where tn-hu <= t <= tn, tn denotes the current internal time
+ *   reached, and hu is the last internal step size successfully
+ *   used by the solver. The user may request k=0, 1, ..., qu,
+ *   where qu is the current order.
+ *   The is-th sensitivity derivative vector is returned in dky.
+ *   This vector must be allocated by the caller. It is only legal
+ *   to call this function after a successful return from IDASolve
+ *   with sensitivity computations enabled.
+ *   Arguments have the same meaning as in IDADGetky.
+ *
+ * IDAGetSensDky computes the k-th derivative of all
+ *   sensitivities of the y function at time t. It repeatedly calls
+ *   IDAGetSensDky. The argument dkyS must be a pointer to
+ *   N_Vector and must be allocated by the user to hold at least Ns
+ *   vectors.
+ *
+ * Return values are similar to those of IDAGetDky. Additionally,
+ * these functions can return IDA_NO_SENS if sensitivities were
+ * not computed and IDA_BAD_IS if is < 0 or is >= Ns.
+ * -----------------------------------------------------------------
+ */
+
+
+SUNDIALS_EXPORT int IDAGetSens(void *ida_mem, realtype *tret, N_Vector *yySout);
+SUNDIALS_EXPORT int IDAGetSens1(void *ida_mem, realtype *tret, int is, N_Vector yySret);
+
+SUNDIALS_EXPORT int IDAGetSensDky(void *ida_mem, realtype t, int k, N_Vector *dkyS);
+SUNDIALS_EXPORT int IDAGetSensDky1(void *ida_mem, realtype t, int k, int is, N_Vector dkyS);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Consistent sensitivity IC calculation optional outputs
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetSensConsistentIC(void *ida_mem, N_Vector *yyS0, N_Vector *ypS0);
+
+/*
+ * -----------------------------------------------------------------
+ * Forward sensitivity optional output extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistics related to the integration of sensitivities.
+ * -----------------------------------------------------------------
+ * IDAGetSensNumResEvals returns the number of calls to the
+ *                       sensitivity residual function.
+ * IDAGetNumResEvalsSens returns the number of calls to the
+ *                       user res routine due to finite difference
+ *                       evaluations of the sensitivity equations.
+ * IDAGetSensNumErrTestFails returns the number of local error
+ *                           test failures for sensitivity variables.
+ * IDAGetSensNumLinSolvSetups returns the number of calls made
+ *                            to the linear solver's setup routine
+ *                            due to sensitivity computations.
+ * IDAGetSensErrWeights returns the sensitivity error weight
+ *                      vectors. The user need not allocate space
+ *                      for ewtS.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetSensNumResEvals(void *ida_mem, long int *nresSevals);
+SUNDIALS_EXPORT int IDAGetNumResEvalsSens(void *ida_mem, long int *nresevalsS);
+SUNDIALS_EXPORT int IDAGetSensNumErrTestFails(void *ida_mem, long int *nSetfails);
+SUNDIALS_EXPORT int IDAGetSensNumLinSolvSetups(void *ida_mem, long int *nlinsetupsS);
+SUNDIALS_EXPORT int IDAGetSensErrWeights(void *ida_mem, N_Vector_S eSweight);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following function provides the
+ * optional outputs in a group.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetSensStats(void *ida_mem, long int *nresSevals, 
+                                    long int *nresevalsS, 
+                                    long int *nSetfails, 
+                                    long int *nlinsetupsS);
+
+/*
+ * ----------------------------------------------------------------
+ * Sensitivity nonlinear solver optional output extraction functions          
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetSensNumNonlinSolvIters(void *ida_mem, long int *nSniters);
+SUNDIALS_EXPORT int IDAGetSensNumNonlinSolvConvFails(void *ida_mem, 
+                                                     long int *nSncfails);
+SUNDIALS_EXPORT int IDAGetSensNonlinSolvStats(void *ida_mem, 
+                                              long int *nSniters, 
+                                              long int *nSncfails);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Quadrature sensitivity optional output extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs and
+ * statistics related to the integration of quadrature sensitivitiess.
+ * -----------------------------------------------------------------
+ * IDAGetQuadSensNumRhsEvals returns the number of calls to the
+ *       user function fQS defining the right hand side of the 
+ *       quadrature sensitivity equations.
+ * IDAGetQuadSensNumErrTestFails returns the number of local error
+ *       test failures for quadrature sensitivity variables.
+ * IDAGetQuadSensErrWeights returns the vector of error weights
+ *       for the quadrature sensitivity variables. The user must
+ *       allocate space for ewtQS.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetQuadSensNumRhsEvals(void *ida_mem, long int *nrhsQSevals);
+SUNDIALS_EXPORT int IDAGetQuadSensNumErrTestFails(void *ida_mem, long int *nQSetfails);
+SUNDIALS_EXPORT int IDAGetQuadSensErrWeights(void *ida_mem, N_Vector *eQSweight);
+
+/*
+ * -----------------------------------------------------------------
+ * As a convenience, the following function provides the above
+ * optional outputs in a group.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetQuadSensStats(void *ida_mem,
+                                          long int *nrhsQSevals,
+                                          long int *nQSetfails);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Quadrature Sensitivity solution extraction routines
+ * -----------------------------------------------------------------
+ * The following functions can be called to obtain the sensitivity
+ * variables after a successful integration step.
+ * 
+ * IDAGetQuadSens and IDAGetQuadSens1 return all the sensitivity 
+ *   vectors or only one of them, respectively, at the same time 
+ *   as that at which IDASolve returned the solution.
+ *   The array of output vectors or output vector yQSout must be
+ *   allocated by the user.
+ *
+ * IDAGetQuadSensDky1 computes the kth derivative of the is-th
+ *   sensitivity (is=1, 2, ..., Ns) of the quadrature function at 
+ *   time t, where  tn - hu <= t <= tn,  tn denotes the current 
+ *   internal  time reached  and hu is the  last internal  
+ *   successfully step size. The user may request k=0,..., qu, 
+ *   where qu is the current order.
+ *
+ *   The is-th sensitivity derivative vector is returned in dky.
+ *   This vector must be allocated by the caller. It is only legal
+ *   to call this function after a successful return from IDASolve
+ *   with sensitivity computations enabled.
+ *   Arguments have the same meaning as in IDADGetky.
+ *
+ * IDAGetQuadSensDky computes the k-th derivative of all
+ *   sensitivities of the y function at time t. It repeatedly calls
+ *   IDAGetQuadSensDky. The argument dkyS must be a pointer to
+ *   N_Vector and must be allocated by the user to hold at least Ns
+ *   vectors.
+ *
+ * Return values are similar to those of IDAGetDky. Additionally,
+ * these functions can return IDA_NO_SENS if sensitivities were
+ * not computed and IDA_BAD_IS if is < 0 or is >= Ns.
+ * -----------------------------------------------------------------
+ */
+
+
+SUNDIALS_EXPORT int IDAGetQuadSens(void *ida_mem, realtype *tret, N_Vector *yyQSout);
+SUNDIALS_EXPORT int IDAGetQuadSens1(void *ida_mem, realtype *tret, int is, N_Vector yyQSret);
+
+SUNDIALS_EXPORT int IDAGetQuadSensDky(void *ida_mem, realtype t, int k, N_Vector *dkyQS);
+SUNDIALS_EXPORT int IDAGetQuadSensDky1(void *ida_mem, realtype t, int k, int is, N_Vector dkyQS);
+
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with an IDAS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *IDAGetReturnFlagName(long int flag);
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDAFree                                             
+ * ----------------------------------------------------------------
+ * IDAFree frees the problem memory IDA_mem allocated by          
+ * IDAInit.  Its only argument is the pointer idamem            
+ * returned by IDAInit.                                         
+ * ----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void IDAFree(void **ida_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDAQuadFree
+ * -----------------------------------------------------------------
+ * IDAQuadFree frees the problem memory in ida_mem allocated
+ * for quadrature integration. Its only argument is the pointer
+ * ida_mem returned by IDACreate.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void IDAQuadFree(void *ida_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASensFree
+ * -----------------------------------------------------------------
+ * IDASensFree frees the problem memory in ida_mem allocated
+ * for sensitivity analysis. Its only argument is the pointer
+ * ida_mem returned by IDACreate.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void IDASensFree(void *ida_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDAQuadSensFree
+ * -----------------------------------------------------------------
+ * IDAQuadSensFree frees the problem memory in ida_mem allocated
+ * for quadrature sensitivity analysis. Its only argument is the 
+ * pointer ida_mem returned by IDACreate.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void IDAQuadSensFree(void* ida_mem);
+
+/* 
+ * =================================================================
+ *
+ * INITIALIZATION AND DEALLOCATION FUNCTIONS FOR BACKWARD PROBLEMS 
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * IDAAdjInit
+ * -----------------------------------------------------------------
+ * IDAAdjInit specifies some parameters for ASA, initializes ASA
+ * and allocates space for the adjoint memory structure.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAAdjInit(void *ida_mem, long int steps, int interp);
+/*
+ * -----------------------------------------------------------------
+ * IDAAdjReInit
+ * -----------------------------------------------------------------
+ * IDAAdjReInit reinitializes the IDAS memory structure for ASA,
+ * assuming that the number of steps between check points and the
+ * type of interpolation remained unchanged. The list of check points
+ * (and associated memory) is deleted. The list of backward problems
+ * is kept (however, new backward problems can be added to this list
+ * by calling IDACreateB). The IDAS memory for the forward and 
+ * backward problems can be reinitialized separately by calling 
+ * IDAReInit and IDAReInitB, respectively.
+ * NOTE: if a entirely new list of backward problems is desired,
+ *   then simply free the adjoint memory (by calling IDAAdjFree)
+ *   and reinitialize ASA with IDAAdjReInit 
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAAdjReInit(void *ida_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * IDAAdjFree
+ * -----------------------------------------------------------------
+ * IDAAdjFree frees the memory allocated by IDAAdjInit.
+ * It is typically called by IDAFree.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void IDAAdjFree(void *ida_mem);
+
+/*
+ * =================================================================
+ *
+ * OPTIONAL INPUT FUNCTIONS FOR BACKWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+
+/*
+ * =================================================================
+ *
+ * Interfaces to IDAS functions for setting-up backward problems.
+ *
+ * =================================================================
+ */
+
+SUNDIALS_EXPORT int IDACreateB(void *ida_mem, int *which);
+
+SUNDIALS_EXPORT int IDAInitB(void *ida_mem, int which, IDAResFnB resB,
+                             realtype tB0, N_Vector yyB0, N_Vector ypB0);
+
+SUNDIALS_EXPORT int IDAInitBS(void *ida_mem, int which, IDAResFnBS resS,
+                              realtype tB0, N_Vector yyB0, N_Vector ypB0);
+
+SUNDIALS_EXPORT int IDAReInitB(void *ida_mem, int which,
+			       realtype tB0, N_Vector yyB0, N_Vector ypB0);
+
+SUNDIALS_EXPORT int IDASStolerancesB(void *ida_mem, int which, 
+                                     realtype relTolB, realtype absTolB);
+SUNDIALS_EXPORT int IDASVtolerancesB(void *ida_mem, int which, 
+                                     realtype relTolB, N_Vector absTolB);
+
+SUNDIALS_EXPORT int IDAQuadInitB(void *ida_mem, int which, 
+                                 IDAQuadRhsFnB rhsQB, N_Vector yQB0);
+
+SUNDIALS_EXPORT int IDAQuadInitBS(void *ida_mem, int which, 
+                                  IDAQuadRhsFnBS rhsQS, N_Vector yQB0);
+
+SUNDIALS_EXPORT int IDAQuadReInitB(void *ida_mem, int which, N_Vector yQB0);
+
+SUNDIALS_EXPORT int IDAQuadSStolerancesB(void *ida_mem, int which,
+                                         realtype reltolQB, realtype abstolQB);
+SUNDIALS_EXPORT int IDAQuadSVtolerancesB(void *ida_mem, int which,
+                                         realtype reltolQB, N_Vector abstolQB);
+
+/*
+ * ----------------------------------------------------------------
+ * The following functions computes consistent initial conditions
+ * for the backward problems.
+ * ----------------------------------------------------------------
+ * Function : IDACalcICB                                         
+ * ----------------------------------------------------------------
+ * IDACalcICB calculates corrected initial conditions for a DAE  
+ * backward system (index-one in semi-implicit form).
+ * ----------------------------------------------------------------
+ * Function : IDACalcICBS
+ * ----------------------------------------------------------------
+ * IDACalcICBS calculates corrected initial conditions for a DAE  
+ * backward problems that also depends on  the sensitivities.
+ *
+ * They use Newton iteration combined with a Linesearch algorithm. 
+ *
+ * Calling IDACalcICB(S) is optional. It is only necessary when the   
+ * initial conditions do not solve the given system.  I.e., if    
+ * yB0 and ypB0 are known to satisfy the backward problem, then       
+ * a call to IDACalcICB is NOT necessary (for index-one problems). 
+ *
+ * Any call to IDACalcICB(S) should precede the call(s) to 
+ * IDASolveB for the given problem. 
+ * 
+ * The functions compute the algebraic components of y and 
+ * differential components of y', given the differential        
+ * components of y.  This option requires that the N_Vector id was 
+ * set through a call to IDASetIdB specifying the differential and 
+ * algebraic components.      
+ *
+ * The arguments to IDACalcICB(S) are as follows:
+ *                                                                
+ * ida_mem  is the pointer to IDA memory returned by IDACreate.                        
+ *
+ * which    is the index of the backward problem returned by
+ *          IDACreateB
+ *
+ * tout1    is the first value of t at which a soluton will be      
+ *          requested (from IDASolveB).  (This is needed here to     
+ *          determine the direction of integration and rough 
+ *          scale  in the independent variable t.)  
+ *
+ * yy0      state variables y and y' corresponding to the initial
+ * yp0      time at which the backward problem is (re)started.
+ *
+ * yyS0     sensitivities variables corresponding to the initial
+ * ypS0     time at which the backward problem is (re)started. 
+ *
+ * Return value is a int flag. For more information see IDACalcIC.
+*/
+
+SUNDIALS_EXPORT int IDACalcICB (void *ida_mem, int which, realtype tout1,
+                                N_Vector yy0, N_Vector yp0);
+
+SUNDIALS_EXPORT int IDACalcICBS(void *ida_mem, int which, realtype tout1,
+                                N_Vector yy0, N_Vector yp0,
+                                N_Vector *yyS0, N_Vector *ypS0); 
+
+
+/*
+ * =================================================================
+ *
+ * MAIN SOLVER FUNCTIONS FOR FORWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * IDASolveF
+ * -----------------------------------------------------------------
+ * IDASolveF integrates towards tout and returns solution into yret
+ * and ypret.
+ *
+ * In the same time, it stores check point data every 'steps'.
+ *
+ * IDASolveF can be called repeatedly by the user.
+ *
+ * ncheckPtr represents the number of check points stored so far.
+ *
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASolveF(void *ida_mem, realtype tout, 
+                              realtype *tret, 
+                              N_Vector yret, N_Vector ypret, 
+                              int itask, int *ncheckPtr);
+
+
+/*
+ * -----------------------------------------------------------------
+ * IDASolveB
+ * -----------------------------------------------------------------
+ * IDASolveB performs the integration of all backward problems 
+ * specified through calls to IDACreateB through a sequence of 
+ * forward-backward runs in between consecutive check points. It can 
+ * be called either in IDA_NORMAL or IDA_ONE_STEP mode. After a 
+ * successful return from IDASolveB, the solution and quadrature 
+ * variables at the current return time for any given backward 
+ * problem can be obtained by calling IDAGetB and IDAGetQuadB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASolveB(void *ida_mem, realtype tBout, int itaskB);
+
+
+/*
+ * =================================================================
+ *
+ * OPTIONAL INPUT FUNCTIONS FOR BACKWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * IDAAdjSetNoSensi
+ * -----------------------------------------------------------------
+ * Disables the forward sensitivity analysis in IDASolveF.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAAdjSetNoSensi(void *ida_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional input functions for backward problems
+ * -----------------------------------------------------------------
+ * These functions are just wrappers around the corresponding
+ * functions from the forward module, with some particularizations 
+ * for the backward integration.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASetUserDataB(void *ida_mem, int which, void *user_dataB);
+
+SUNDIALS_EXPORT int IDASetMaxOrdB(void *ida_mem, int which, int maxordB);
+
+SUNDIALS_EXPORT int IDASetMaxNumStepsB(void *ida_mem, int which, long int mxstepsB);
+
+SUNDIALS_EXPORT int IDASetInitStepB(void *ida_mem, int which, realtype hinB);
+
+SUNDIALS_EXPORT int IDASetMaxStepB(void *ida_mem, int which, realtype hmaxB);
+
+SUNDIALS_EXPORT int IDASetSuppressAlgB(void *ida_mem, int which, 
+                                       booleantype suppressalgB);
+SUNDIALS_EXPORT int IDASetIdB(void *ida_mem, int which, N_Vector idB);
+
+SUNDIALS_EXPORT int IDASetConstraintsB(void *ida_mem, int which, 
+                                       N_Vector constraintsB);
+
+SUNDIALS_EXPORT int IDASetQuadErrConB(void *ida_mem, int which, int errconQB);
+
+/*
+ * =================================================================
+ *
+ * EXTRACTION AND DENSE OUTPUT FUNCTIONS FOR BACKWARD PROBLEMS
+ *
+ * =================================================================
+ */
+  
+/*
+ * -----------------------------------------------------------------
+ * IDAGetB and IDAGetQuadB
+ * -----------------------------------------------------------------
+ * Extraction functions for the solution and quadratures for a given 
+ * backward problem. They return their corresponding output vector
+ * at the current time reached by the integration of the backward
+ * problem. To obtain the solution or quadratures associated with
+ * a given backward problem at some other time within the last 
+ * integration step (dense output), first obtain a pointer to the
+ * proper IDAS memory by calling IDAGetAdjIDABmem and then use it
+ * to call IDAGetDky and IDAGetQuadDky.  
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetB(void* ida_mem, int which, realtype *tret,
+                            N_Vector yy, N_Vector yp);
+
+SUNDIALS_EXPORT int IDAGetQuadB(void *ida_mem, int which, 
+                                realtype *tret, N_Vector qB);
+
+/*
+ * =================================================================
+ *
+ * OPTIONAL OUTPUT FUNCTIONS FOR BACKWARD PROBLEMS
+ *
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * IDAGetAdjIDABmem
+ * -----------------------------------------------------------------
+ * IDAGetAdjIDABmem returns a (void *) pointer to the IDAS
+ * memory allocated for the backward problem. This pointer can
+ * then be used to call any of the IDAGet* IDAS routines to
+ * extract optional output for the backward integration phase.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void *IDAGetAdjIDABmem(void *ida_mem, int which);
+
+/* 
+ * -----------------------------------------------------------------
+ * IDAGetConsistentICB
+ * -----------------------------------------------------------------
+ * IDAGetConsistentIC returns the consistent initial conditions
+ * computed by IDACalcICB or IDCalcICBS
+ */
+SUNDIALS_EXPORT int IDAGetConsistentICB(void *ida_mem, int which, 
+                                        N_Vector yyB0, N_Vector ypB0);
+
+/*
+ * -----------------------------------------------------------------
+ * IDAGetAdjY
+ * -----------------------------------------------------------------
+ * Returns the interpolated forward solution at time t. This
+ * function is a wrapper around the interpType-dependent internal
+ * function.
+ * The calling function must allocate space for yy and yp.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetAdjY(void *ida_mem, realtype t, 
+                               N_Vector yy, N_Vector yp);
+
+
+/*
+ * -----------------------------------------------------------------
+ * IDAGetAdjCheckPointsInfo
+ * -----------------------------------------------------------------
+ * Loads an array of nckpnts structures of type IDAadjCheckPointRec
+ * defined below.
+ *
+ * The user must allocate space for ckpnt (ncheck+1).
+ * -----------------------------------------------------------------
+ */
+
+  typedef struct {
+  void *my_addr;
+  void *next_addr;
+  realtype t0;
+  realtype t1;
+  long int nstep;
+  int order;
+  realtype step;
+  } IDAadjCheckPointRec;
+
+SUNDIALS_EXPORT int IDAGetAdjCheckPointsInfo(void *ida_mem, 
+                                             IDAadjCheckPointRec *ckpnt);
+
+/*
+ * -----------------------------------------------------------------
+ * IDAGetAdjDataPointHermite
+ * -----------------------------------------------------------------
+ * Returns the 2 vectors stored for cubic Hermite interpolation at
+ * the data point 'which'. The user must allocate space for yy and
+ * yd. 
+ *
+ * Returns IDA_MEM_NULL if ida_mem is NULL, IDA_ILL_INPUT if the 
+ * interpolation type previously specified is not IDA_HERMITE or
+ * IDA_SUCCESS otherwise.
+ *
+ * -----------------------------------------------------------------
+ * IDAGetAdjDataPointPolynomial
+ * -----------------------------------------------------------------
+ * Returns the vector stored for polynomial interpolation at the
+ * data point 'which'. The user must allocate space for y.
+ *
+ * Returns IDA_MEM_NULL if ida_mem is NULL, IDA_ILL_INPUT if the 
+ * interpolation type previously specified is not IDA_POLYNOMIAL or
+ * IDA_SUCCESS otherwise.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetAdjDataPointHermite(void *ida_mem, int which,
+                                              realtype *t, N_Vector yy, N_Vector yd);
+
+SUNDIALS_EXPORT int IDAGetAdjDataPointPolynomial(void *ida_mem, int which,
+                                                 realtype *t, int *order, 
+                                                 N_Vector y);
+  
+  
+/*
+ * -----------------------------------------------------------------
+ * IDAGetAdjCurrentCheckPoint
+ * -----------------------------------------------------------------
+ * Returns the address of the 'active' check point.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAGetAdjCurrentCheckPoint(void *ida_mem, void **addr);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_band.h b/include/idas/idas_band.h
new file mode 100644
index 0000000..774c379
--- /dev/null
+++ b/include/idas/idas_band.h
@@ -0,0 +1,86 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4489 $
+ * $Date: 2015-04-29 17:15:44 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh, and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDAS band linear solver
+ * module, IDABAND. It interfaces between the band module and the
+ * integrator when a banded linear solver is appropriate.
+ *
+ * Part I contains type definitions and function prototypes for using
+ * IDABAND on forward problems (DAE integration and/or FSA)
+ *
+ * Part II contains type definitions and function prototypes for using
+ * IDABAND on adjoint (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASBAND_H
+#define _IDASBAND_H
+
+#include <idas/idas_direct.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDABand
+ * -----------------------------------------------------------------
+ * A call to the IDABand function links the main integrator       
+ * with the IDABAND linear solver module.                         
+ *                                                                
+ * ida_mem is the pointer to the integrator memory returned by    
+ *         IDACreate.                                                   
+ *                                                                
+ * mupper is the upper bandwidth of the banded Jacobian matrix.   
+ *                                                                
+ * mlower is the lower bandwidth of the banded Jacobian matrix.   
+ *                                                                
+ * The return values of IDABand are:                              
+ *     IDADLS_SUCCESS   = 0  if successful                            
+ *     IDADLS_LMEM_FAIL = -1 if there was a memory allocation failure 
+ *     IDADLS_ILL_INPUT = -2 if the input was illegal or NVECTOR bad. 
+ *                                                                
+ * NOTE: The band linear solver assumes a serial implementation   
+ *       of the NVECTOR package. Therefore, IDABand will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the N_VGetArrayPointer function exists.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDABand(void *ida_mem,
+                            long int Neq, long int mupper, long int mlower);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDABandB
+ * -----------------------------------------------------------------
+ * IDABandB links the main IDAS integrator with the IDABAND
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDABandB(void *idaadj_mem, int which, 
+                             long int NeqB, long int mupperB, long int mlowerB);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_bbdpre.h b/include/idas/idas_bbdpre.h
new file mode 100644
index 0000000..50d6d6d
--- /dev/null
+++ b/include/idas/idas_bbdpre.h
@@ -0,0 +1,333 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4489 $
+ * $Date: 2015-04-29 17:15:44 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh, Radu Serban and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDABBDPRE module, for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with IDAS and
+ * IDASpgmr/IDASpbcg/IDASptfqmr.
+ */
+
+#ifndef _IDASBBDPRE_H
+#define _IDASBBDPRE_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus     /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * =================================================================
+ * PART I - forward problems
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ *
+ * SUMMARY
+ *
+ * These routines provide a preconditioner matrix that is
+ * block-diagonal with banded blocks. The blocking corresponds
+ * to the distribution of the dependent variable vector y among
+ * the processors. Each preconditioner block is generated from
+ * the Jacobian of the local part (on the current processor) of a
+ * given function G(t,y,y') approximating F(t,y,y'). The blocks
+ * are generated by a difference quotient scheme on each processor
+ * independently. This scheme utilizes an assumed banded structure
+ * with given half-bandwidths, mudq and mldq. However, the banded
+ * Jacobian block kept by the scheme has half-bandwiths mukeep and
+ * mlkeep, which may be smaller.
+ *
+ * The user's calling program should have the following form:
+ *
+ *   #include <idas/idas_bbdpre.h>
+ *   #include <nvector_parallel.h>
+ *   ...
+ *   y0  = N_VNew_Parallel(...);
+ *   yp0 = N_VNew_Parallel(...);
+ *   ...
+ *   ida_mem = IDACreate(...);
+ *   ier = IDAInit(...);
+ *   ...
+ *   flag = IDASptfqmr(ida_mem, maxl);
+ *       -or-
+ *   flag = IDASpgmr(ida_mem, maxl);
+ *       -or-
+ *   flag = IDASpbcg(ida_mem, maxl);
+ *   ...
+ *   flag = IDABBDPrecInit(ida_mem, Nlocal, mudq, mldq,
+ *                         mukeep, mlkeep, dq_rel_yy, Gres, Gcomm);
+ *   ...
+ *   ier = IDASolve(...);
+ *   ...
+ *   IDAFree(&ida_mem);
+ *
+ *   N_VDestroy(y0);
+ *   N_VDestroy(yp0);
+ *
+ * The user-supplied routines required are:
+ *
+ *   res  is the function F(t,y,y') defining the DAE system to
+ *   be solved:  F(t,y,y') = 0.
+ *
+ *   Gres  is the function defining a local approximation
+ *   G(t,y,y') to F, for the purposes of the preconditioner.
+ *
+ *   Gcomm  is the function performing communication needed
+ *   for Glocal.
+ *
+ * Notes:
+ *
+ * 1) This header file is included by the user for the definition
+ *    of the IBBDPrecData type and for needed function prototypes.
+ *
+ * 2) The IDABBDPrecInit call includes half-bandwidths mudq and
+ *    mldq to be used in the approximate Jacobian. They need
+ *    not be the true half-bandwidths of the Jacobian of the
+ *    local block of G, when smaller values may provide a greater
+ *    efficiency. Similarly, mukeep and mlkeep, specifying the
+ *    bandwidth kept for the approximate Jacobian, need not be
+ *    the true half-bandwidths. Also, mukeep, mlkeep, mudq, and
+ *    mldq need not be the same on every processor.
+ *
+ * 3) The actual name of the user's res function is passed to
+ *    IDAInit, and the names of the user's Gres and Gcomm
+ *    functions are passed to IDABBDPrecInit.        
+ *
+ * 4) The pointer to the user-defined data block user_data, which
+ *    is set through IDASetUserData is also available to the user
+ *    in glocal and gcomm.
+ *
+ * 5) Optional outputs specific to this module are available by
+ *    way of routines listed below. These include work space sizes
+ *    and the cumulative number of glocal calls. The costs
+ *    associated with this module also include nsetups banded LU
+ *    factorizations, nsetups gcomm calls, and nps banded
+ *    backsolve calls, where nsetups and nps are integrator
+ *    optional outputs.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDABBDLocalFn
+ * -----------------------------------------------------------------
+ * The user must supply a function G(t,y,y') which approximates
+ * the function F for the system F(t,y,y') = 0, and which is
+ * computed locally (without interprocess communication).
+ * (The case where G is mathematically identical to F is allowed.)
+ * The implementation of this function must have type IDABBDLocalFn.
+ *
+ * This function takes as input the independent variable value tt,
+ * the current solution vector yy, the current solution
+ * derivative vector yp, and a pointer to the user-defined data
+ * block user_data. It is to compute the local part of G(t,y,y')
+ * and store it in the vector gval. (Providing memory for yy and
+ * gval is handled within this preconditioner module.) It is
+ * expected that this routine will save communicated data in work
+ * space defined by the user, and made available to the
+ * preconditioner function for the problem. The user_data
+ * parameter is the same as that passed by the user to the
+ * IDAMalloc routine.
+ *
+ * An IDABBDLocalFn Gres is to return an int, defined in the same
+ * way as for the residual function: 0 (success), +1 or -1 (fail).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDABBDLocalFn)(long int Nlocal, realtype tt,
+			     N_Vector yy, N_Vector yp, N_Vector gval,
+			     void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDABBDCommFn
+ * -----------------------------------------------------------------
+ * The user may supply a function of type IDABBDCommFn which
+ * performs all interprocess communication necessary to
+ * evaluate the approximate system function described above.
+ *
+ * This function takes as input the solution vectors yy and yp,
+ * and a pointer to the user-defined data block user_data. The
+ * user_data parameter is the same as that passed by the user to
+ * the IDASetUserData routine.
+ *
+ * The IDABBDCommFn Gcomm is expected to save communicated data in
+ * space defined with the structure *user_data.
+ *
+ * A IDABBDCommFn Gcomm returns an int value equal to 0 (success),
+ * > 0 (recoverable error), or < 0 (unrecoverable error).
+ *
+ * Each call to the IDABBDCommFn is preceded by a call to the system
+ * function res with the same vectors yy and yp. Thus the
+ * IDABBDCommFn gcomm can omit any communications done by res if
+ * relevant to the evaluation of the local function glocal.
+ * A NULL communication function can be passed to IDABBDPrecInit
+ * if all necessary communication was done by res.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDABBDCommFn)(long int Nlocal, realtype tt,
+			    N_Vector yy, N_Vector yp,
+			    void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDABBDPrecInit
+ * -----------------------------------------------------------------
+ * IDABBDPrecInit allocates and initializes the BBD preconditioner.
+ *
+ * The parameters of IDABBDPrecInit are as follows:
+ *
+ * ida_mem  is a pointer to the memory blockreturned by IDACreate.
+ *
+ * Nlocal  is the length of the local block of the vectors yy etc.
+ *         on the current processor.
+ *
+ * mudq, mldq  are the upper and lower half-bandwidths to be used
+ *             in the computation of the local Jacobian blocks.
+ *
+ * mukeep, mlkeep are the upper and lower half-bandwidths to be
+ *                used in saving the Jacobian elements in the local
+ *                block of the preconditioner matrix PP.
+ *
+ * dq_rel_yy is an optional input. It is the relative increment
+ *           to be used in the difference quotient routine for
+ *           Jacobian calculation in the preconditioner. The
+ *           default is sqrt(unit roundoff), and specified by
+ *           passing dq_rel_yy = 0.
+ *
+ * Gres    is the name of the user-supplied function G(t,y,y')
+ *         that approximates F and whose local Jacobian blocks
+ *         are to form the preconditioner.
+ *
+ * Gcomm   is the name of the user-defined function that performs
+ *         necessary interprocess communication for the
+ *         execution of glocal.
+ *
+ * The return value of IDABBDPrecInit is one of:
+ *   IDASPILS_SUCCESS if no errors occurred
+ *   IDASPILS_MEM_NULL if the integrator memory is NULL
+ *   IDASPILS_LMEM_NULL if the linear solver memory is NULL
+ *   IDASPILS_ILL_INPUT if an input has an illegal value
+ *   IDASPILS_MEM_FAIL if a memory allocation request failed
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDABBDPrecInit(void *ida_mem, long int Nlocal,
+                                   long int mudq, long int mldq,
+                                   long int mukeep, long int mlkeep,
+                                   realtype dq_rel_yy,
+                                   IDABBDLocalFn Gres, IDABBDCommFn Gcomm);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDABBDPrecReInit
+ * -----------------------------------------------------------------
+ * IDABBDPrecReInit reinitializes the IDABBDPRE module when
+ * solving a sequence of problems of the same size with
+ * IDASPGMR/IDABBDPRE, IDASPBCG/IDABBDPRE, or IDASPTFQMR/IDABBDPRE
+ * provided there is no change in Nlocal, mukeep, or mlkeep. After
+ * solving one problem, and after calling IDAReInit to reinitialize
+ * the integrator for a subsequent problem, call IDABBDPrecReInit.
+ *
+ * All arguments have the same names and meanings as those
+ * of IDABBDPrecInit.
+ *
+ * The return value of IDABBDPrecReInit is one of:
+ *   IDASPILS_SUCCESS if no errors occurred
+ *   IDASPILS_MEM_NULL if the integrator memory is NULL
+ *   IDASPILS_LMEM_NULL if the linear solver memory is NULL
+ *   IDASPILS_PMEM_NULL if the preconditioner memory is NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDABBDPrecReInit(void *ida_mem,
+				     long int mudq, long int mldq,
+				     realtype dq_rel_yy);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs for IDABBDPRE
+ * -----------------------------------------------------------------
+ * IDABBDPrecGetWorkSpace returns the real and integer work space
+ *                        for IDABBDPRE.
+ * IDABBDPrecGetNumGfnEvals returns the number of calls to the
+ *                          user Gres function.
+ * 
+ * The return value of IDABBDPrecGet* is one of:
+ *   IDASPILS_SUCCESS if no errors occurred
+ *   IDASPILS_MEM_NULL if the integrator memory is NULL
+ *   IDASPILS_LMEM_NULL if the linear solver memory is NULL
+ *   IDASPILS_PMEM_NULL if the preconditioner memory is NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDABBDPrecGetWorkSpace(void *ida_mem, 
+                                           long int *lenrwBBDP, long int *leniwBBDP);
+SUNDIALS_EXPORT int IDABBDPrecGetNumGfnEvals(void *ida_mem, long int *ngevalsBBDP);
+
+/* 
+ * =================================================================
+ * PART II - backward problems
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types: IDALocalFnB and IDACommFnB
+ * -----------------------------------------------------------------
+ * Local approximation function and inter-process communication
+ * function for the BBD preconditioner on the backward phase.
+ * -----------------------------------------------------------------
+ */
+typedef int (*IDABBDLocalFnB)(long int NlocalB, realtype tt,
+			      N_Vector yy, N_Vector yp, 
+			      N_Vector yyB, N_Vector ypB, N_Vector gvalB,
+			      void *user_dataB);
+
+typedef int (*IDABBDCommFnB)(long int NlocalB, realtype tt,
+			     N_Vector yy, N_Vector yp,
+			     N_Vector yyB, N_Vector ypB,
+			     void *user_dataB);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: IDABBDPrecInitB, IDABBDPrecReInit
+ * -----------------------------------------------------------------
+ * Interface functions for the IDABBDPRE preconditioner to be used
+ * on the backward phase.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDABBDPrecInitB(void *ida_mem, int which, long int NlocalB,
+                                    long int mudqB, long int mldqB,
+                                    long int mukeepB, long int mlkeepB,
+                                    realtype dq_rel_yyB,
+                                    IDABBDLocalFnB GresB, IDABBDCommFnB GcommB);
+
+SUNDIALS_EXPORT int IDABBDPrecReInitB(void *ida_mem, int which, 
+                                      long int mudqB, long int mldqB, realtype dq_rel_yyB);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_dense.h b/include/idas/idas_dense.h
new file mode 100644
index 0000000..2fb2ec7
--- /dev/null
+++ b/include/idas/idas_dense.h
@@ -0,0 +1,75 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4489 $
+ * $Date: 2015-04-29 17:15:44 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDADENSE linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASDENSE_H
+#define _IDASDENSE_H
+
+#include <idas/idas_direct.h>
+#include <sundials/sundials_dense.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDADense
+ * -----------------------------------------------------------------
+ * A call to the IDADense function links the main integrator      
+ * with the IDADENSE linear solver module.                        
+ *                                                                
+ * ida_mem is the pointer to integrator memory returned by        
+ *     IDACreate.                                                 
+ *                                                                
+ * Neq  is the problem size                                       
+ *                                                                
+ * IDADense returns:                                              
+ *     IDADLS_SUCCESS   = 0  if successful                              
+ *     IDADLS_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     IDADLS_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The dense linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, IDADense will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDADense(void *ida_mem, long int Neq); 
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDADenseB
+ * -----------------------------------------------------------------
+ * IDADenseB links the main IDAS integrator with the IDADENSE
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDADenseB(void *ida_mem, int which, long int NeqB);
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_direct.h b/include/idas/idas_direct.h
new file mode 100644
index 0000000..d26833b
--- /dev/null
+++ b/include/idas/idas_direct.h
@@ -0,0 +1,422 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4489 $
+ * $Date: 2015-04-29 17:15:44 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common header file for the direct linear solvers in IDAS.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDADLS_H
+#define _IDADLS_H
+
+#include <sundials/sundials_direct.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * I D A S D I R E C T     C O N S T A N T S
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * IDASDIRECT return values 
+ * -----------------------------------------------------------------
+ */
+
+#define IDADLS_SUCCESS           0
+#define IDADLS_MEM_NULL         -1
+#define IDADLS_LMEM_NULL        -2
+#define IDADLS_ILL_INPUT        -3
+#define IDADLS_MEM_FAIL         -4
+
+
+/* Additional last_flag values */
+
+#define IDADLS_JACFUNC_UNRECVR  -5
+#define IDADLS_JACFUNC_RECVR    -6
+
+/* Return values for the adjoint module */
+#define IDADLS_NO_ADJ           -101
+#define IDADLS_LMEMB_NULL       -102
+
+/*
+ * =================================================================
+ * PART I:  F O R W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDADlsDenseJacFn
+ * -----------------------------------------------------------------
+ *
+ * A dense Jacobian approximation function djac must be of type 
+ * IDADlsDenseJacFn.
+ * Its parameters are:                     
+ *                                                                
+ * N   is the problem size, and length of all vector arguments.   
+ *                                                                
+ * t   is the current value of the independent variable t.        
+ *                                                                
+ * y   is the current value of the dependent variable vector,     
+ *     namely the predicted value of y(t).                     
+ *                                                                
+ * yp  is the current value of the derivative vector y',          
+ *     namely the predicted value of y'(t).                    
+ *                                                                
+ * f   is the residual vector F(tt,yy,yp).                     
+ *                                                                
+ * c_j is the scalar in the system Jacobian, proportional to 
+ *     the inverse of the step size h.
+ *                                                                
+ * user_data is a pointer to user Jacobian data - the same as the    
+ *     user_data parameter passed to IDASetUserData.                     
+ *                                                                
+ * Jac is the dense matrix (of type DlsMat) to be loaded by  
+ *     an IDADlsDenseJacFn routine with an approximation to the   
+ *     system Jacobian matrix                                  
+ *            J = dF/dy' + gamma*dF/dy                            
+ *     at the given point (t,y,y'), where the ODE system is    
+ *     given by F(t,y,y') = 0.
+ *     Note that Jac is NOT preset to zero!
+ *                                                                
+ * tmp1, tmp2, tmp3 are pointers to memory allocated for          
+ *     N_Vectors which can be used by an IDADlsDenseJacFn routine 
+ *     as temporary storage or work space.                     
+ *                                                                
+ * A IDADlsDenseJacFn should return                                
+ *     0 if successful,                                           
+ *     a positive int if a recoverable error occurred, or         
+ *     a negative int if a nonrecoverable error occurred.         
+ * In the case of a recoverable error return, the integrator will 
+ * attempt to recover by reducing the stepsize (which changes cj).
+ *
+ * -----------------------------------------------------------------
+ *
+ * NOTE: The following are two efficient ways to load a dense Jac:         
+ * (1) (with macros - no explicit data structure references)      
+ *     for (j=0; j < Neq; j++) {                                  
+ *       col_j = LAPACK_DENSE_COL(Jac,j);                                 
+ *       for (i=0; i < Neq; i++) {                                
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         col_j[i] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ * (2) (without macros - explicit data structure references)      
+ *     for (j=0; j < Neq; j++) {                                  
+ *       col_j = (Jac->data)[j];                                   
+ *       for (i=0; i < Neq; i++) {                                
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         col_j[i] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ * A third way, using the LAPACK_DENSE_ELEM(A,i,j) macro, is much less   
+ * efficient in general.  It is only appropriate for use in small 
+ * problems in which efficiency of access is NOT a major concern. 
+ *                                                                
+ * NOTE: If the user's Jacobian routine needs other quantities,   
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through   
+ *     IDAGetCurrentStep and IDAGetErrWeights, respectively 
+ *     (see ida.h). The unit roundoff is available as 
+ *     UNIT_ROUNDOFF defined in sundials_types.h.
+ *
+ * -----------------------------------------------------------------
+ */
+  
+  
+typedef int (*IDADlsDenseJacFn)(long int N, realtype t, realtype c_j,
+				N_Vector y, N_Vector yp, N_Vector r, 
+				DlsMat Jac, void *user_data,
+				N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDADlsBandJacFn
+ * -----------------------------------------------------------------
+ * A banded Jacobian approximation function bjac must have the    
+ * prototype given below. Its parameters are:                     
+ *                                                                
+ * Neq is the problem size, and length of all vector arguments.   
+ *                                                                
+ * mupper is the upper bandwidth of the banded Jacobian matrix.   
+ *                                                                
+ * mlower is the lower bandwidth of the banded Jacobian matrix.   
+ *                                                                
+ * tt is the current value of the independent variable t.        
+ *                                                                
+ * yy is the current value of the dependent variable vector,     
+ *    namely the predicted value of y(t).                     
+ *                                                                
+ * yp is the current value of the derivative vector y',          
+ *    namely the predicted value of y'(t).                    
+ *                                                                
+ * rr is the residual vector F(tt,yy,yp).                     
+ *                                                                
+ * c_j is the scalar in the system Jacobian, proportional to 1/hh.
+ *                                                                
+ * user_data  is a pointer to user Jacobian data - the same as the    
+ *    user_data parameter passed to IDASetUserData.                      
+ *                                                                
+ * Jac is the band matrix (of type BandMat) to be loaded by    
+ *     an IDADlsBandJacFn routine with an approximation to the    
+ *     system Jacobian matrix                                  
+ *            J = dF/dy + cj*dF/dy'                             
+ *     at the given point (t,y,y'), where the DAE system is    
+ *     given by F(t,y,y') = 0.  Jac is preset to zero, so only 
+ *     the nonzero elements need to be loaded.  See note below.
+ *                                                                
+ * tmp1, tmp2, tmp3 are pointers to memory allocated for          
+ *     N_Vectors which can be used by an IDADlsBandJacFn routine  
+ *     as temporary storage or work space.                     
+ *                                                                
+ * An IDADlsBandJacFn function should return                                 
+ *     0 if successful,                                           
+ *     a positive int if a recoverable error occurred, or         
+ *     a negative int if a nonrecoverable error occurred.         
+ * In the case of a recoverable error return, the integrator will 
+ * attempt to recover by reducing the stepsize (which changes cj).
+ *
+ * -----------------------------------------------------------------
+ *
+ * NOTE: The following are two efficient ways to load Jac:
+ *                                                                
+ * (1) (with macros - no explicit data structure references)      
+ *    for (j=0; j < Neq; j++) {                                   
+ *       col_j = BAND_COL(Jac,j);                                  
+ *       for (i=j-mupper; i <= j+mlower; i++) {                   
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         BAND_COL_ELEM(col_j,i,j) = J_ij;                       
+ *       }                                                        
+ *     }                                                          
+ *                                                                
+ * (2) (with BAND_COL macro, but without BAND_COL_ELEM macro)     
+ *    for (j=0; j < Neq; j++) {                                   
+ *       col_j = BAND_COL(Jac,j);                                  
+ *       for (k=-mupper; k <= mlower; k++) {                      
+ *         generate J_ij = the (i,j)th Jacobian element, i=j+k    
+ *         col_j[k] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ *                                                                
+ * A third way, using the BAND_ELEM(A,i,j) macro, is much less    
+ * efficient in general.  It is only appropriate for use in small 
+ * problems in which efficiency of access is NOT a major concern. 
+ *                                                                
+ * NOTE: If the user's Jacobian routine needs other quantities,   
+ *       they are accessible as follows: hcur (the current stepsize)
+ *       and ewt (the error weight vector) are accessible through   
+ *       IDAGetCurrentStep and IDAGetErrWeights, respectively (see  
+ *       ida.h). The unit roundoff is available as                  
+ *       UNIT_ROUNDOFF defined in sundials_types.h                   
+ *                                                                
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDADlsBandJacFn)(long int N, long int mupper, long int mlower,
+			       realtype t, realtype c_j, 
+			       N_Vector y, N_Vector yp, N_Vector r,
+			       DlsMat Jac, void *user_data,
+			       N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+  
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the IDADLS linear solver
+ * -----------------------------------------------------------------
+ * IDADlsSetDenseJacFn specifies the dense Jacobian approximation
+ * routine to be used for a direct dense linear solver.
+ *
+ * IDADlsSetBandJacFn specifies the band Jacobian approximation
+ * routine to be used for a direct band linear solver.
+ *
+ * By default, a difference quotient approximation, supplied with
+ * the solver is used.
+ *
+ * The return value is one of:
+ *    IDADLS_SUCCESS   if successful
+ *    IDADLS_MEM_NULL  if the IDA memory was NULL
+ *    IDADLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDADlsSetDenseJacFn(void *ida_mem, IDADlsDenseJacFn jac);
+SUNDIALS_EXPORT int IDADlsSetBandJacFn(void *ida_mem, IDADlsBandJacFn jac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the IDADLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * IDADlsGetWorkSpace   returns the real and integer workspace used
+ *                      by the direct linear solver.
+ * IDADlsGetNumJacEvals returns the number of calls made to the
+ *                      Jacobian evaluation routine jac.
+ * IDADlsGetNumResEvals returns the number of calls to the user
+ *                      f routine due to finite difference Jacobian
+ *                      evaluation.
+ * IDADlsGetLastFlag    returns the last error flag set by any of
+ *                      the IDADLS interface functions.
+ *
+ * The return value of IDADlsGet* is one of:
+ *    IDADLS_SUCCESS   if successful
+ *    IDADLS_MEM_NULL  if the IDA memory was NULL
+ *    IDADLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDADlsGetWorkSpace(void *ida_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int IDADlsGetNumJacEvals(void *ida_mem, long int *njevals);
+SUNDIALS_EXPORT int IDADlsGetNumResEvals(void *ida_mem, long int *nfevalsLS);
+SUNDIALS_EXPORT int IDADlsGetLastFlag(void *ida_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a IDADLS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *IDADlsGetReturnFlagName(long int flag);
+
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type: IDADlsDenseJacFnB
+ * -----------------------------------------------------------------
+ * A dense Jacobian approximation function JacB for the adjoint
+ * (backward) problem must have the prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDADlsDenseJacFnB)(long int NeqB, realtype tt, realtype c_jB, 
+				 N_Vector yy, N_Vector yp,
+				 N_Vector yyB, N_Vector ypB, N_Vector rrB,
+				 DlsMat JacB, void *user_dataB, 
+				 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type: IDADlsDenseJacFnBS
+ * -----------------------------------------------------------------
+ * A dense Jacobian approximation function JacBS for the adjoint
+ * (backward) problem, sensitivity-dependent case, must have the
+ *  prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDADlsDenseJacFnBS)(long int NeqB, realtype tt, realtype c_jB, 
+				 N_Vector yy, N_Vector yp,
+				 N_Vector *yS, N_Vector *ypS,
+				 N_Vector yyB, N_Vector ypB, N_Vector rrB,
+				 DlsMat JacB, void *user_dataB, 
+				 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDADlsBandJacFnB
+ * -----------------------------------------------------------------
+ * A band Jacobian approximation function JacB for the adjoint 
+ * (backward) problem must have the prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDADlsBandJacFnB)(long int NeqB, long int mupperB, long int mlowerB, 
+				realtype tt, realtype c_jB, 
+				N_Vector yy, N_Vector yp,
+				N_Vector yyB, N_Vector ypB, N_Vector rrB,
+				DlsMat JacB, void *user_dataB,
+				N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+  
+/*
+ * -----------------------------------------------------------------
+ * Type : IDADlsBandJacFnBS
+ * -----------------------------------------------------------------
+ * A band Jacobian approximation function JacBS for the adjoint 
+ * (backward) problem, sensitivity-dependent case, must have the
+ *  prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDADlsBandJacFnBS)(long int NeqB, long int mupperB, long int mlowerB, 
+				realtype tt, realtype c_jB, 
+				N_Vector yy, N_Vector yp,
+				N_Vector *yS, N_Vector *ypS,
+				N_Vector yyB, N_Vector ypB, N_Vector rrB,
+				DlsMat JacB, void *user_dataB,
+				N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+  
+/*
+ * -----------------------------------------------------------------
+ * EXPORTED FUNCTIONS 
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * --------------------------------------------------------------------
+ * Functions: IDADlsSet*JacFnB and IDADlsSet*JacFnBS
+ * --------------------------------------------------------------------
+ * IDADlsSetDenseJacFnB and IDADlsSetBandJacFnB specify the dense
+ * and band Jacobian functions, respectively, to be used by a
+ * IDASDIRECT linear solver for the backward integration phase, when
+ * the backward problem does not depend on forward sensitivities.
+ * IDADlsSetDenseJacFnBS and IDADlsSetBandJacFnBS specify the Jacobian
+ * functions when the backward problem does depend on sensitivities.
+ * The 'which' argument is the int returned by IDACreateB.
+ * --------------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDADlsSetDenseJacFnB(void *ida_mem, int which, IDADlsDenseJacFnB jacB);
+SUNDIALS_EXPORT int IDADlsSetDenseJacFnBS(void *ida_mem, int which, IDADlsDenseJacFnBS jacBS);
+
+SUNDIALS_EXPORT int IDADlsSetBandJacFnB(void *idaa_mem, int which, IDADlsBandJacFnB jacB);
+SUNDIALS_EXPORT int IDADlsSetBandJacFnBS(void *idaa_mem, int which, IDADlsBandJacFnBS jacBS);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_klu.h b/include/idas/idas_klu.h
new file mode 100644
index 0000000..8db561a
--- /dev/null
+++ b/include/idas/idas_klu.h
@@ -0,0 +1,157 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4558 $
+ * $Date: 2015-10-05 09:04:16 -0700 (Mon, 05 Oct 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDAKLU linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASKLU_H
+#define _IDASKLU_H
+
+#include "idas/idas_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDAKLU
+ * -----------------------------------------------------------------
+ * A call to the IDAKLU function links the main integrator      
+ * with the IDAKLU linear solver module.                        
+ *                                                                
+ * ida_mem is the pointer to integrator memory returned by        
+ *     IDACreate.             
+ *
+ *                                                                
+ * IDAKLU returns:                                              
+ *     IDASLU_SUCCESS   = 0  if successful                              
+ *     IDASLU_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     IDASLU_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The KLU linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, IDAKLU will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDAKLU(void *ida_mem, int n, int nnz, int sparesetype); 
+
+/*
+ * -----------------------------------------------------------------
+ * IDAKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to IDAKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is IDASLS_SUCCESS = 0, IDASLS_MEM_NULL = -1, 
+ * IDASLS_LMEM_NULL = -2, IDASLS_ILL_INPUT = -3, or IDASLS_MEM_FAIL = -4.
+ *
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDAKLUReInit(void *ida_mem_v, int n, int nnz, 
+				   int reinit_type);
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * IDAKLUSetOrdering sets the ordering used by KLU for reducing fill.
+ * Options are: 0 for AMD, 1 for COLAMD, and 2 for the natural ordering.
+ * The default used in KINSOL is 1 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDAKLUSetOrdering(void *ida_mem, int ordering_choice); 
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDAKLUB
+ * -----------------------------------------------------------------
+ * IDAKLUB links the main IDAS integrator with the IDAKLU
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDAKLUB(void *ida_mem, int which, int nB, int nnzB, int sparsetype);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDAKLUReInitB
+ * -----------------------------------------------------------------
+ * IDAKLUReInitB pulls off the memory block associated with the which parameter
+ * and reinitializes the KLU solver associated with that memory block.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDAKLUReInitB(void *ida_mem, int which, int nB, int nnzB, int reinit_type);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDAKLUSetOrderingB
+ * -----------------------------------------------------------------
+ * IDAKLUSetOrderingB pulls off the memory block associated with the which parameter
+ * and sets the ordering for the KLU solver associated with that memory block.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDAKLUSetOrderingB(void *ida_mem, int which, int ordering_choiceB);
+
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_lapack.h b/include/idas/idas_lapack.h
new file mode 100644
index 0000000..8e5b778
--- /dev/null
+++ b/include/idas/idas_lapack.h
@@ -0,0 +1,110 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4489 $
+ * $Date: 2015-04-29 17:15:44 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Header file for the IDAS dense linear solver IDASLAPACK.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDALAPACK_H
+#define _IDALAPACK_H
+
+#include <idas/idas_direct.h>
+#include <sundials/sundials_lapack.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDALapackDense
+ * -----------------------------------------------------------------
+ * A call to the IDALapackDense function links the main integrator
+ * with the IDALAPACK linear solver using dense Jacobians.
+ *
+ * ida_mem is the pointer to the integrator memory returned by
+ *           IDACreate.
+ *
+ * N is the size of the DAE system.
+ *
+ * The return value of IDALapackDense is one of:
+ *    IDADLS_SUCCESS   if successful
+ *    IDADLS_MEM_NULL  if the IDAS memory was NULL
+ *    IDADLS_MEM_FAIL  if there was a memory allocation failure
+ *    IDADLS_ILL_INPUT if a required vector operation is missing
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDALapackDense(void *ida_mem, int N);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDALapackBand
+ * -----------------------------------------------------------------
+ * A call to the IDALapackBand function links the main integrator
+ * with the IDALAPACK linear solver using banded Jacobians. 
+ *
+ * ida_mem is the pointer to the integrator memory returned by
+ *           IDACreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * mupper is the upper bandwidth of the band Jacobian approximation.
+ *
+ * mlower is the lower bandwidth of the band Jacobian approximation.
+ *
+ * The return value of IDALapackBand is one of:
+ *    IDADLS_SUCCESS   if successful
+ *    IDADLS_MEM_NULL  if the IDAS memory was NULL
+ *    IDADLS_MEM_FAIL  if there was a memory allocation failure
+ *    IDADLS_ILL_INPUT if a required vector operation is missing
+ *                        or if a bandwidth has an illegal value.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDALapackBand(void *ida_mem, int N, int mupper, int mlower);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDALapackDenseB
+ * -----------------------------------------------------------------
+ * IDALapackDenseB links the main IDAS integrator with the dense
+ * IDALAPACK linear solver for the backward integration.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDALapackDenseB(void *ida_mem, int which, int NeqB);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDALapackBandB
+ * -----------------------------------------------------------------
+ * IDALapackBandB links the main IDAS integrator with the band
+ * IDALAPACK linear solver for the backward integration.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDALapackBandB(void *ida_mem, int which, int NeqB, int mupperB, int mlowerB);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_sparse.h b/include/idas/idas_sparse.h
new file mode 100644
index 0000000..9ddd7b3
--- /dev/null
+++ b/include/idas/idas_sparse.h
@@ -0,0 +1,269 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4489 $
+ * $Date: 2015-04-29 17:15:44 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the Sparse linear solver module in IDAS.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASSPARSE_H
+#define _IDASSPARSE_H
+
+#include <sundials/sundials_sparse.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * I D A S S P A R S E    C O N S T A N T S
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * IDASSLS return values 
+ * -----------------------------------------------------------------
+ */
+
+#define IDASLS_SUCCESS           0
+#define IDASLS_MEM_NULL         -1
+#define IDASLS_LMEM_NULL        -2
+#define IDASLS_ILL_INPUT        -3
+#define IDASLS_MEM_FAIL         -4
+#define IDASLS_JAC_NOSET        -5
+#define IDASLS_PACKAGE_FAIL     -6
+
+/* Additional last_flag values */
+
+#define IDASLS_JACFUNC_UNRECVR  -7
+#define IDASLS_JACFUNC_RECVR    -8
+
+/* Return values for the adjoint module */
+#define IDASLS_NO_ADJ           -101
+#define IDASLS_LMEMB_NULL       -102
+
+/*
+ * =================================================================
+ * PART I:  F O R W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDASlsSparseJacFn
+ * -----------------------------------------------------------------
+ *
+ * A sparse Jacobian approximation function jaceval must be of type 
+ * IDASlsSparseJacFn.
+ * Its parameters are:                     
+ *                                                                
+ * t   is the current value of the independent variable t.        
+ *                                                                
+ * c_j is the scalar in the system Jacobian, proportional to 
+ *     the inverse of the step size h.
+ *                                                                
+ * y   is the current value of the dependent variable vector,     
+ *     namely the predicted value of y(t).                     
+ *                                                                
+ * yp  is the current value of the derivative vector y',          
+ *     namely the predicted value of y'(t).                    
+ *                                                                
+ * f   is the residual vector F(tt,yy,yp).                     
+ *                                                                
+ * JacMat is the compressed sparse column matrix (of type SlsMat)
+ *     to be loaded by an IDASlsSparseJacFn routine with an approximation
+ *     to the system Jacobian matrix
+ *            J = dF/dy' + gamma*dF/dy                            
+ *     at the given point (t,y,y'), where the ODE system is    
+ *     given by F(t,y,y') = 0.
+ *     Note that JacMat is NOT preset to zero!
+ *     Matrix data is for the nonzero entries of the Jacobian are stored in
+ *     compressed column format.  Row indices of entries in 
+ *     column j are stored in J->data[colptrs[j]] 
+ *     through J->data[colptrs[j+i]-1]
+ *     and corresponding numerical values of the Jacobian are stored 
+ *     in the same entries of a.
+ * 
+ * user_data is a pointer to user Jacobian data - the same as the    
+ *     user_data parameter passed to IDASetRdata.                     
+ *                                                                
+ * tmp1, tmp2, tmp3 are pointers to memory allocated for          
+ *     N_Vectors which can be used by an IDASparseJacFn routine 
+ *     as temporary storage or work space.                     
+ *                                                                
+ * A IDASlsSparseJacFn should return                                
+ *     0 if successful,                                           
+ *     a positive int if a recoverable error occurred, or         
+ *     a negative int if a nonrecoverable error occurred.         
+ * In the case of a recoverable error return, the integrator will 
+ * attempt to recover by reducing the stepsize (which changes cj).
+ *
+ * -----------------------------------------------------------------
+ *
+  * NOTE: If the user's Jacobian routine needs other quantities,   
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through   
+ *     IDAGetCurrentStep and IDAGetErrWeights, respectively 
+ *     (see ida.h). The unit roundoff is available as 
+ *     UNIT_ROUNDOFF defined in sundials_types.h.
+ *
+ * -----------------------------------------------------------------
+ */
+  
+  
+typedef int (*IDASlsSparseJacFn)(realtype t, realtype c_j,
+		     N_Vector y, N_Vector yp, N_Vector r, 
+		     SlsMat JacMat, void *user_data,
+		     N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the IDASSPARSE linear solver
+ * -----------------------------------------------------------------
+ * IDASlsSetSparseJacFn specifies the Jacobian approximation
+ * routine to be used for a sparse direct linear solver.
+ *
+ * The return value is one of:
+ *    IDASLS_SUCCESS   if successful
+ *    IDASLS_MEM_NULL  if the IDA memory was NULL
+ *    IDASLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASlsSetSparseJacFn(void *ida_mem, IDASlsSparseJacFn jac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the IDASLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * IDASlsGetWorkSpace   returns the real and integer workspace used
+ *                      by the direct linear solver.
+ * IDASlsGetNumJacEvals returns the number of calls made to the
+ *                      Jacobian evaluation routine jac.
+ * IDASlsGetLastFlag    returns the last error flag set by any of
+ *                      the IDADLS interface functions.
+ *
+ * The return value of IDADlsGet* is one of:
+ *    IDASLS_SUCCESS   if successful
+ *    IDASLS_MEM_NULL  if the IDA memory was NULL
+ *    IDASLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASlsGetNumJacEvals(void *ida_mem, long int *njevals);
+SUNDIALS_EXPORT int IDASlsGetLastFlag(void *ida_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a IDASLS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *IDASlsGetReturnFlagName(long int flag);
+
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type: IDASlsSparseJacFnB
+ * -----------------------------------------------------------------
+ * A sparse Jacobian approximation function JacB for the adjoint
+ * (backward) problem must have the prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASlsSparseJacFnB)(realtype tt, realtype c_jB, 
+	      	     N_Vector yy, N_Vector yp,
+		     N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+		     SlsMat JacMatB, void *user_dataB, 
+		     N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type: IDASlsSparseJacFnBS
+ * -----------------------------------------------------------------
+ * A dense Jacobian approximation function JacBS for the adjoint
+ * (backward) problem, sensitivity-dependent case, must have the
+ *  prototype given below. 
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASlsSparseJacFnBS)(realtype tt, realtype c_jB, 
+	      	     N_Vector yy, N_Vector yp,
+		     N_Vector *yS, N_Vector *ypS,
+		     N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+		     SlsMat JacMatB, void *user_dataB, 
+		     N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+
+/*
+ * -----------------------------------------------------------------
+ * EXPORTED FUNCTIONS 
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: IDASlsSetSparseJacFnB and IDASlsSetSparseJacFnBS
+ * -----------------------------------------------------------------
+ * IDASlsSetSparseJacFnB specifies the sparse Jacobian functions to 
+ * be used by a IDASSPARSE linear solver for the backward integration phase
+ * when the backward problem does not depend on forward sensitivities.
+ * IDASlsSetSparseJacFnBS specifies the Jacobian
+ * functions when the backward problem does depend on sensitivities.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASlsSetSparseJacFnB(void *ida_mem, int which, 
+					  IDASlsSparseJacFnB jacB);
+SUNDIALS_EXPORT int IDASlsSetSparseJacFnBS(void *ida_mem, int which, 
+					  IDASlsSparseJacFnBS jacBS);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_spbcgs.h b/include/idas/idas_spbcgs.h
new file mode 100644
index 0000000..4264504
--- /dev/null
+++ b/include/idas/idas_spbcgs.h
@@ -0,0 +1,94 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4489 $
+ * $Date: 2015-04-29 17:15:44 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the public header file for the IDAS scaled preconditioned
+ * Bi-CGSTAB linear solver module, IDASPBCG.
+ *
+ * Part I contains function prototypes for using IDASPBCG on forward 
+ * problems (DAE integration and/or FSA)
+ *
+ * Part II contains function prototypes for using IDASPBCG on adjoint 
+ * (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASSPBCG_H
+#define _IDASSPBCG_H
+
+#include <idas/idas_spils.h>
+#include <sundials/sundials_spbcgs.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * -----------------------------------------------------------------
+ * PART I - forward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASpbcg
+ * -----------------------------------------------------------------
+ * A call to the IDASpbcg function links the main integrator with
+ * the IDASPBCG linear solver module. Its parameters are as
+ * follows:
+ *
+ * IDA_mem   is the pointer to memory block returned by IDACreate.
+ *
+ * maxl      is the maximum Krylov subspace dimension, an
+ *           optional input. Pass 0 to use the default value.
+ *           Otherwise pass a positive integer.
+ *
+ * The return values of IDASpbcg are:
+ *    IDASPILS_SUCCESS    if successful
+ *    IDASPILS_MEM_NULL   if the IDAS memory was NULL
+ *    IDASPILS_MEM_FAIL   if there was a memory allocation failure
+ *    IDASPILS_ILL_INPUT  if there was illegal input.
+ * The above constants are defined in idas_spils.h
+ *
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASpbcg(void *ida_mem, int maxl);
+
+/* 
+ * -----------------------------------------------------------------
+ * PART II - backward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDASpbcgB
+ * -----------------------------------------------------------------
+ * IDASpbcgB links the main IDAS integrator with the IDASpbcg
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASpbcgB(void *ida_mem, int which, int maxlB);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_spgmr.h b/include/idas/idas_spgmr.h
new file mode 100644
index 0000000..9b15566
--- /dev/null
+++ b/include/idas/idas_spgmr.h
@@ -0,0 +1,95 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4489 $
+ * $Date: 2015-04-29 17:15:44 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Alan Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDAS Scaled Preconditioned GMRES     
+ * linear solver module, IDASPGMR.                                 
+ *
+ * Part I contains function prototypes for using IDASPGMR on forward 
+ * problems (DAE integration and/or FSA)
+ *
+ * Part II contains function prototypes for using IDASPGMR on adjoint 
+ * (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASSPGMR_H
+#define _IDASSPGMR_H
+
+#include <idas/idas_spils.h>
+#include <sundials/sundials_spgmr.h>
+
+#ifdef __cplusplus     /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * -----------------------------------------------------------------
+ * PART I - forward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ *                                                                
+ * Function : IDASpgmr                                            
+ * -----------------------------------------------------------------
+ * A call to the IDASpgmr function links the main integrator with 
+ * the IDASPGMR linear solver module.  Its parameters are as      
+ * follows:                                                       
+ *                                                                
+ * IDA_mem   is the pointer to memory block returned by IDACreate.
+ *                                                                
+ * maxl      is the maximum Krylov subspace dimension, an         
+ *           optional input.  Pass 0 to use the default value,    
+ *           MIN(Neq, 5).  Otherwise pass a positive integer.     
+ *                                                                
+ * The return values of IDASpgmr are:                             
+ *    IDASPILS_SUCCESS    if successful                            
+ *    IDASPILS_MEM_NULL   if the IDAS memory was NULL
+ *    IDASPILS_MEM_FAIL   if there was a memory allocation failure 
+ *    IDASPILS_ILL_INPUT  if there was illegal input.              
+ * The above constants are defined in idas_spils.h
+ *                                                                
+ * -----------------------------------------------------------------
+ */                                                                
+
+SUNDIALS_EXPORT int IDASpgmr(void *ida_mem, int maxl);
+
+
+/* 
+ * -----------------------------------------------------------------
+ * PART II - backward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDASpgmrB
+ * -----------------------------------------------------------------
+ * IDASpgmrB links the main IDAS integrator with the IDASpgmr
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASpgmrB(void *ida_mem, int which, int maxlB);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_spils.h b/include/idas/idas_spils.h
new file mode 100644
index 0000000..58ac018
--- /dev/null
+++ b/include/idas/idas_spils.h
@@ -0,0 +1,479 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4489 $
+ * $Date: 2015-04-29 17:15:44 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the common header file for the Scaled and Preconditioned
+ * Iterative Linear Solvers in IDAS.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASSPILS_H
+#define _IDASSPILS_H
+
+#include <sundials/sundials_iterative.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * -----------------------------------------------------------------
+ * IDASPILS return values 
+ * -----------------------------------------------------------------
+ */
+
+#define IDASPILS_SUCCESS     0
+#define IDASPILS_MEM_NULL   -1 
+#define IDASPILS_LMEM_NULL  -2 
+#define IDASPILS_ILL_INPUT  -3
+#define IDASPILS_MEM_FAIL   -4
+#define IDASPILS_PMEM_NULL  -5
+
+/* Return values for the adjoint module */
+
+#define IDASPILS_NO_ADJ          -101
+#define IDASPILS_LMEMB_NULL      -102
+
+/* 
+ * -----------------------------------------------------------------
+ * PART I - forward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsPrecSetupFn
+ * -----------------------------------------------------------------
+ * The optional user-supplied functions PrecSetup and PrecSolve
+ * together must define the left preconditoner matrix P
+ * approximating the system Jacobian matrix
+ *    J = dF/dy + c_j*dF/dy'
+ * (where the DAE system is F(t,y,y') = 0), and solve the linear
+ * systems P z = r.   PrecSetup is to do any necessary setup
+ * operations, and PrecSolve is to compute the solution of
+ * P z = r.
+ *
+ * The preconditioner setup function PrecSetup is to evaluate and
+ * preprocess any Jacobian-related data needed by the
+ * preconditioner solve function PrecSolve.  This might include
+ * forming a crude approximate Jacobian, and performing an LU
+ * factorization on it.  This function will not be called in
+ * advance of every call to PrecSolve, but instead will be called
+ * only as often as necessary to achieve convergence within the
+ * Newton iteration.  If the PrecSolve function needs no
+ * preparation, the PrecSetup function can be NULL.
+ *
+ * Each call to the PrecSetup function is preceded by a call to
+ * the system function res with the same (t,y,y') arguments.
+ * Thus the PrecSetup function can use any auxiliary data that is
+ * computed and saved by the res function and made accessible
+ * to PrecSetup.
+ *
+ * A preconditioner setup function PrecSetup must have the
+ * prototype given below.  Its parameters are as follows:
+ *
+ * tt  is the current value of the independent variable t.
+ *
+ * yy  is the current value of the dependent variable vector,
+ *     namely the predicted value of y(t).
+ *
+ * yp  is the current value of the derivative vector y',
+ *     namely the predicted value of y'(t).
+ *
+ * rr  is the current value of the residual vector F(t,y,y').
+ *
+ * c_j is the scalar in the system Jacobian, proportional to 1/hh.
+ *
+ * user_data is a pointer to user data, the same as the user_data
+ *     parameter passed to IDASetUserData.
+ *
+ * tmp1, tmp2, tmp3 are pointers to vectors of type N_Vector
+ *     which can be used by an IDASpilsPrecSetupFn routine
+ *     as temporary storage or work space.
+ *
+ * NOTE: If the user's preconditioner needs other quantities,
+ *     they are accessible as follows: hcur (the current stepsize)
+ *     and ewt (the error weight vector) are accessible through
+ *     IDAGetCurrentStep and IDAGetErrWeights, respectively (see
+ *     ida.h). The unit roundoff is available as
+ *     UNIT_ROUNDOFF defined in sundials_types.h
+ *
+ * The IDASpilsPrecSetupFn should return
+ *     0 if successful,
+ *     a positive int if a recoverable error occurred, or
+ *     a negative int if a nonrecoverable error occurred.
+ * In the case of a recoverable error return, the integrator will
+ * attempt to recover by reducing the stepsize (which changes cj).
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASpilsPrecSetupFn)(realtype tt,
+				   N_Vector yy, N_Vector yp, N_Vector rr,
+				   realtype c_j, void *user_data,
+				   N_Vector tmp1, N_Vector tmp2,
+				   N_Vector tmp3);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsPrecSolveFn
+ * -----------------------------------------------------------------
+ * The optional user-supplied function PrecSolve must compute a
+ * solution to the linear system P z = r, where P is the left
+ * preconditioner defined by the user.  If no preconditioning
+ * is desired, pass NULL for PrecSolve to IDASp*.
+ *
+ * A preconditioner solve function PrecSolve must have the
+ * prototype given below.  Its parameters are as follows:
+ *
+ * tt is the current value of the independent variable t.
+ *
+ * yy is the current value of the dependent variable vector y.
+ *
+ * yp is the current value of the derivative vector y'.
+ *
+ * rr is the current value of the residual vector F(t,y,y').
+ *
+ * rvec is the input right-hand side vector r.
+ *
+ * zvec is the computed solution vector z.
+ *
+ * c_j is the scalar in the system Jacobian, proportional to 1/hh.
+ *
+ * delta is an input tolerance for use by PrecSolve if it uses an
+ *     iterative method in its solution.   In that case, the
+ *     the residual vector r - P z of the system should be
+ *     made less than delta in weighted L2 norm, i.e.,
+ *            sqrt [ Sum (Res[i]*ewt[i])^2 ] < delta .
+ *     Note: the error weight vector ewt can be obtained
+ *     through a call to the routine IDAGetErrWeights.
+ *
+ * user_data is a pointer to user data, the same as the user_data
+ *     parameter passed to IDASetUserData.
+ *
+ * tmp is an N_Vector which can be used by the PrecSolve
+ *     routine as temporary storage or work space.
+ *
+ * The IDASpilsPrecSolveFn should return
+ *     0 if successful,
+ *     a positive int if a recoverable error occurred, or
+ *     a negative int if a nonrecoverable error occurred.
+ * Following a recoverable error, the integrator will attempt to
+ * recover by updating the preconditioner and/or reducing the
+ * stepsize.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASpilsPrecSolveFn)(realtype tt,
+				   N_Vector yy, N_Vector yp, N_Vector rr,
+				   N_Vector rvec, N_Vector zvec,
+				   realtype c_j, realtype delta, void *user_data,
+				   N_Vector tmp);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsJacTimesVecFn
+ * -----------------------------------------------------------------
+ * The user-supplied function jtimes is to generate the product
+ * J*v for given v, where J is the Jacobian matrix
+ *    J = dF/dy + c_j*dF/dy'
+ *  or an approximation to it, and v is a given vector.
+ * It should return 0 if successful and a nonzero int otherwise.
+ *
+ * A function jtimes must have the prototype given below. Its
+ * parameters are as follows:
+ *
+ *   tt   is the current value of the independent variable.
+ *
+ *   yy   is the current value of the dependent variable vector,
+ *        namely the predicted value of y(t).
+ *
+ *   yp   is the current value of the derivative vector y',
+ *        namely the predicted value of y'(t).
+ *
+ *   rr   is the current value of the residual vector F(t,y,y').
+ *
+ *   v    is the N_Vector to be multiplied by J.
+ *
+ *   Jv   is the output N_Vector containing J*v.
+ *
+ *   c_j  is the scalar in the system Jacobian, proportional
+ *        to 1/hh.
+ *
+ *   user_data is a pointer to user data, the same as the
+ *        pointer passed to IDASetUserData.
+ *
+ *   tmp1, tmp2 are two N_Vectors which can be used by Jtimes for
+ *         work space.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASpilsJacTimesVecFn)(realtype tt,
+				     N_Vector yy, N_Vector yp, N_Vector rr,
+				     N_Vector v, N_Vector Jv,
+				     realtype c_j, void *user_data,
+				     N_Vector tmp1, N_Vector tmp2);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the IDASPILS linear solver                  
+ * -----------------------------------------------------------------
+ *                                                                
+ * IDASpilsSetPreconditioner specifies the PrecSetup and PrecSolve 
+ *           functions, as well as a pointer to user preconditioner 
+ *           data. This pointer is passed to PrecSetup and PrecSolve
+ *           every time these routines are called.
+ *           Default is NULL for al three arguments.
+ * IDASpilsSetJacTimesVecFn specifies the jtimes function.        
+ *           Default is to use an internal finite difference      
+ *           approximation routine.                          
+ * IDASpilsSetGSType specifies the type of Gram-Schmidt           
+ *           orthogonalization to be used. This must be one of    
+ *           the two enumeration constants MODIFIED_GS or         
+ *           CLASSICAL_GS defined in iterativ.h. These correspond 
+ *           to using modified Gram-Schmidt and classical         
+ *           Gram-Schmidt, respectively.                          
+ *           Default value is MODIFIED_GS.                        
+ *           Only for IDASPGMR.
+ * IDASpilsSetMaxRestarts specifies the maximum number of restarts
+ *           to be used in the GMRES algorithm.  maxrs must be a  
+ *           non-negative integer.  Pass 0 to specify no restarts.
+ *           Default is 5.                                        
+ *           Only for IDASPGMR.
+ * IDASpbcgSetMaxl specifies the maximum Krylov subspace size. 
+ *           Default is 5.
+ *           Only for IDASPBCG and IDASPTFQMR.
+ * IDASpilsSetEpsLin specifies the factor in the linear iteration 
+ *           convergence test constant.                           
+ *           Default is 0.05                                      
+ * IDASpilsSetIncrementFactor specifies a factor in the increments
+ *           to yy used in the difference quotient approximations 
+ *           to matrix-vector products Jv.                        
+ *           Default is 1.0                                       
+ *                                                                
+ * The return value of IDASpilsSet* is one of:
+ *    IDASPILS_SUCCESS   if successful
+ *    IDASPILS_MEM_NULL  if the IDAS memory was NULL
+ *    IDASPILS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASpilsSetPreconditioner(void *ida_mem,
+                                              IDASpilsPrecSetupFn pset, 
+					      IDASpilsPrecSolveFn psolve);
+SUNDIALS_EXPORT int IDASpilsSetJacTimesVecFn(void *ida_mem,
+                                             IDASpilsJacTimesVecFn jtv);
+
+SUNDIALS_EXPORT int IDASpilsSetGSType(void *ida_mem, int gstype);
+SUNDIALS_EXPORT int IDASpilsSetMaxRestarts(void *ida_mem, int maxrs);
+SUNDIALS_EXPORT int IDASpilsSetMaxl(void *ida_mem, int maxl);
+SUNDIALS_EXPORT int IDASpilsSetEpsLin(void *ida_mem, realtype eplifac);
+SUNDIALS_EXPORT int IDASpilsSetIncrementFactor(void *ida_mem, realtype dqincfac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the IDASPILS linear solver               
+ *----------------------------------------------------------------
+ *                                                                
+ * IDASpilsGetWorkSpace returns the real and integer workspace used 
+ *     by IDASPILS.                                                  
+ * IDASpilsGetNumPrecEvals returns the number of preconditioner   
+ *     evaluations, i.e. the number of calls made to PrecSetup    
+ *     with jok==FALSE.                                           
+ * IDASpilsGetNumPrecSolves returns the number of calls made to   
+ *     PrecSolve.                                                 
+ * IDASpilsGetNumLinIters returns the number of linear iterations.
+ * IDASpilsGetNumConvFails returns the number of linear           
+ *     convergence failures.                                      
+ * IDASpilsGetNumJtimesEvals returns the number of calls to jtimes
+ * IDASpilsGetNumResEvals returns the number of calls to the user 
+ *     res routine due to finite difference Jacobian times vector 
+ *     evaluation.                                                
+ * IDASpilsGetLastFlag returns the last error flag set by any of
+ *     the IDASPILS interface functions.
+ *                                                                
+ * The return value of IDASpilsGet* is one of:
+ *    IDASPILS_SUCCESS   if successful
+ *    IDASPILS_MEM_NULL  if the IDAS memory was NULL
+ *    IDASPILS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */                                                                
+
+SUNDIALS_EXPORT int IDASpilsGetWorkSpace(void *ida_mem, long int *lenrwLS, long int *leniwLS);
+SUNDIALS_EXPORT int IDASpilsGetNumPrecEvals(void *ida_mem, long int *npevals);
+SUNDIALS_EXPORT int IDASpilsGetNumPrecSolves(void *ida_mem, long int *npsolves);
+SUNDIALS_EXPORT int IDASpilsGetNumLinIters(void *ida_mem, long int *nliters);
+SUNDIALS_EXPORT int IDASpilsGetNumConvFails(void *ida_mem, long int *nlcfails);
+SUNDIALS_EXPORT int IDASpilsGetNumJtimesEvals(void *ida_mem, long int *njvevals);
+SUNDIALS_EXPORT int IDASpilsGetNumResEvals(void *ida_mem, long int *nrevalsLS); 
+SUNDIALS_EXPORT int IDASpilsGetLastFlag(void *ida_mem, long int *flag);
+
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a IDASPILS return flag
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT char *IDASpilsGetReturnFlagName(long int flag);
+
+
+/* 
+ * -----------------------------------------------------------------
+ * PART II - backward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsPrecSetupFnB
+ * -----------------------------------------------------------------
+ * A function PrecSetupB for the adjoint (backward) problem must have 
+ * the prototype given below.
+ * -----------------------------------------------------------------
+ */
+typedef int (*IDASpilsPrecSetupFnB)(realtype tt, 
+				    N_Vector yy, N_Vector yp,
+				    N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+				    realtype c_jB, void *user_dataB,
+				    N_Vector tmp1B, N_Vector tmp2B, 
+				    N_Vector tmp3B);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsPrecSetupFnBS
+ * -----------------------------------------------------------------
+ * A function PrecSetupBS for the adjoint (backward) problem must have 
+ * the prototype given below.
+ * -----------------------------------------------------------------
+ */
+typedef int (*IDASpilsPrecSetupFnBS)(realtype tt,
+                                     N_Vector yy, N_Vector yp,
+                                     N_Vector *yyS, N_Vector *ypS,
+                                     N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                     realtype c_jB, void *user_dataB,
+                                     N_Vector tmp1B, N_Vector tmp2B,
+                                     N_Vector tmp3B);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsPrecSolveFnB
+ * -----------------------------------------------------------------
+ * A function PrecSolveB for the adjoint (backward) problem  must 
+ * have the prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASpilsPrecSolveFnB)(realtype tt, 
+				    N_Vector yy, N_Vector yp,
+				    N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+				    N_Vector rvecB, N_Vector zvecB,
+				    realtype c_jB, realtype deltaB,
+				    void *user_dataB, N_Vector tmpB);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsPrecSolveFnBS
+ * -----------------------------------------------------------------
+ * A function PrecSolveBS for the adjoint (backward) problem  must 
+ * have the prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASpilsPrecSolveFnBS)(realtype tt,
+                                     N_Vector yy, N_Vector yp,
+                                     N_Vector *yyS, N_Vector *ypS,
+                                     N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                     N_Vector rvecB, N_Vector zvecB,
+                                     realtype c_jB, realtype deltaB,
+                                     void *user_dataB, N_Vector tmpB);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsJacTimesVecFnB
+ * -----------------------------------------------------------------
+ * A function jtimesB for the adjoint (backward) problem must have 
+ * the prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASpilsJacTimesVecFnB)(realtype t,
+				      N_Vector yy, N_Vector yp,
+				      N_Vector yyB, N_Vector ypB, N_Vector rrB,
+				      N_Vector vB, N_Vector JvB, 
+				      realtype c_jB, void *user_dataB, 
+				      N_Vector tmp1B, N_Vector tmp2B);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : IDASpilsJacTimesVecFnBS
+ * -----------------------------------------------------------------
+ * A function jtimesBS for the adjoint (backward) problem must have 
+ * the prototype given below.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*IDASpilsJacTimesVecFnBS)(realtype t,
+                                       N_Vector yy, N_Vector yp,
+                                       N_Vector *yyS, N_Vector *ypS,
+                                       N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                       N_Vector vB, N_Vector JvB, 
+                                       realtype c_jB, void *user_dataB, 
+                                       N_Vector tmp1B, N_Vector tmp2B);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Each IDASpilsSet***B or IDASpilsSet***BS function below links the
+ * main IDAS integrator with the corresponding IDASpilsSet***
+ * optional input function for the backward integration.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASpilsSetGSTypeB(void *ida_mem, int which, int gstypeB);
+SUNDIALS_EXPORT int IDASpilsSetMaxRestartsB(void *ida_mem, int which, int maxrsB);
+SUNDIALS_EXPORT int IDASpilsSetEpsLinB(void *ida_mem, int which, realtype eplifacB);
+SUNDIALS_EXPORT int IDASpilsSetMaxlB(void *ida_mem, int which, int maxlB);
+SUNDIALS_EXPORT int IDASpilsSetIncrementFactorB(void *ida_mem, int which, 
+                                                realtype dqincfacB);
+
+SUNDIALS_EXPORT int IDASpilsSetPreconditionerB(void *ida_mem, int which,
+                                               IDASpilsPrecSetupFnB psetB,
+					       IDASpilsPrecSolveFnB psolveB);
+SUNDIALS_EXPORT int IDASpilsSetPreconditionerBS(void *ida_mem, int which,
+                                                IDASpilsPrecSetupFnBS psetBS,
+                                                IDASpilsPrecSolveFnBS psolveBS);
+
+SUNDIALS_EXPORT int IDASpilsSetJacTimesVecFnB(void *ida_mem, int which,
+                                              IDASpilsJacTimesVecFnB jtvB);
+SUNDIALS_EXPORT int IDASpilsSetJacTimesVecFnBS(void *ida_mem, int which,
+                                               IDASpilsJacTimesVecFnBS jtvBS);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_sptfqmr.h b/include/idas/idas_sptfqmr.h
new file mode 100644
index 0000000..0d22174
--- /dev/null
+++ b/include/idas/idas_sptfqmr.h
@@ -0,0 +1,94 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4489 $
+ * $Date: 2015-04-29 17:15:44 -0700 (Wed, 29 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the public header file for the IDAS scaled preconditioned
+ * TFQMR linear solver module, IDASPTFQMR.
+ *
+ * Part I contains function prototypes for using IDASPTFQMR on forward 
+ * problems (DAE integration and/or FSA)
+ *
+ * Part II contains function prototypes for using IDASPTFQMR on adjoint 
+ * (backward) problems
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASSPTFQMR_H
+#define _IDASSPTFQMR_H
+
+#include <idas/idas_spils.h>
+#include <sundials/sundials_sptfqmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * -----------------------------------------------------------------
+ * PART I - forward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASptfqmr
+ * -----------------------------------------------------------------
+ * A call to the IDASptfqmr function links the main integrator with
+ * the IDASPTFQMR linear solver module. Its parameters are as
+ * follows:
+ *
+ * IDA_mem  is the pointer to memory block returned by IDACreate.
+ *
+ * maxl     is the maximum Krylov subspace dimension, an
+ *          optional input. Pass 0 to use the default value.
+ *          Otherwise pass a positive integer.
+ *
+ * The return values of IDASptfqmr are:
+ *    IDASPILS_SUCCESS    if successful
+ *    IDASPILS_MEM_NULL   if the IDAS memory was NULL
+ *    IDASPILS_MEM_FAIL   if there was a memory allocation failure
+ *    IDASPILS_ILL_INPUT  if there was illegal input.
+ * The above constants are defined in idas_spils.h
+ *
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDASptfqmr(void *ida_mem, int maxl);
+
+/* 
+ * -----------------------------------------------------------------
+ * PART II - backward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDASptfqmrB
+ * -----------------------------------------------------------------
+ * IDASptfqmrB links the main IDAS integrator with the IDASptfqmr
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+
+SUNDIALS_EXPORT int IDASptfqmrB(void *ida_mem, int which, int maxlB);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/idas/idas_superlumt.h b/include/idas/idas_superlumt.h
new file mode 100644
index 0000000..2606b7d
--- /dev/null
+++ b/include/idas/idas_superlumt.h
@@ -0,0 +1,112 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4491 $
+ * $Date: 2015-04-30 16:56:10 -0700 (Thu, 30 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the IDASuperLUMT linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASSUPERLUMT_H
+#define _IDASSUPERLUMT_H
+
+#include "idas/idas_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASuperLUMT
+ * -----------------------------------------------------------------
+ * A call to the IDASuperLUMT function links the main integrator      
+ * with the IDASuperLUMT linear solver module.                        
+ *                                                                
+ * ida_mem is the pointer to integrator memory returned by        
+ *     IDACreate.             
+ *
+ * num_threads is the number of threads that SuperLUMT should invoke     
+ *                                                                
+ * IDASuperLUMT returns:                                              
+ *     IDASLU_SUCCESS   = 0  if successful                              
+ *     IDASLU_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     IDASLU_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The SuperLUMT linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, IDASuperLUMT will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDASuperLUMT(void *ida_mem, int num_threads, 
+				   int n, int nnz); 
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * IDASuperLUMTSetOrdering sets the ordering used by SuperLUMT for 
+ * reducing fill.
+ * Options are: 
+ * 0 for natural ordering
+ * 1 for minimal degree ordering on A'*A
+ * 2 for minimal degree ordering on A'+A
+ * 3 for approximate minimal degree ordering for unsymmetric matrices
+ * The default used in SUNDIALS is 3 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDASuperLUMTSetOrdering(void *ida_mem, 
+					      int ordering_choice); 
+
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDASuperLUMTB
+ * -----------------------------------------------------------------
+ * IDASuperLUMTB links the main IDAS integrator with the IDASuperLUMT
+ * linear solver for the backward integration.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int IDASuperLUMTB(void *ida_mem, int which, int num_threads, 
+				    int nB, int nnzB);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDASuperLUMTSetOrderingB
+ * -----------------------------------------------------------------
+ * IDASuperLUMTSetOrderingB pulls off the memory block associated with the which parameter
+ * and sets the ordering for the KLU solver associated with that memory block.
+ * The 'which' argument is the int returned by IDACreateB.
+ * -----------------------------------------------------------------
+ */
+  SUNDIALS_EXPORT int IDASuperLUMTSetOrderingB(void *ida_mem, int which, 
+					      int ordering_choiceB); 
+
+
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol.h b/include/kinsol/kinsol.h
new file mode 100644
index 0000000..4ea5604
--- /dev/null
+++ b/include/kinsol/kinsol.h
@@ -0,0 +1,771 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4423 $
+ * $Date: 2015-03-08 17:23:10 -0700 (Sun, 08 Mar 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * KINSOL solver module header file
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSOL_H
+#define _KINSOL_H
+
+#include <stdio.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *              K I N S O L     C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * KINSOL return flags
+ * -----------------------------------------------------------------
+ */
+
+#define KIN_SUCCESS             0
+#define KIN_INITIAL_GUESS_OK    1
+#define KIN_STEP_LT_STPTOL      2
+
+#define KIN_WARNING             99
+
+#define KIN_MEM_NULL            -1
+#define KIN_ILL_INPUT           -2
+#define KIN_NO_MALLOC           -3
+#define KIN_MEM_FAIL            -4
+#define KIN_LINESEARCH_NONCONV  -5
+#define KIN_MAXITER_REACHED     -6
+#define KIN_MXNEWT_5X_EXCEEDED  -7
+#define KIN_LINESEARCH_BCFAIL   -8
+#define KIN_LINSOLV_NO_RECOVERY -9
+#define KIN_LINIT_FAIL          -10
+#define KIN_LSETUP_FAIL         -11
+#define KIN_LSOLVE_FAIL         -12
+
+#define KIN_SYSFUNC_FAIL        -13
+#define KIN_FIRST_SYSFUNC_ERR   -14
+#define KIN_REPTD_SYSFUNC_ERR   -15
+
+
+/*
+ * -----------------------------------------------------------------
+ * Enumeration for inputs to KINSetEtaForm (eta choice)
+ * -----------------------------------------------------------------
+ * KIN_ETACONSTANT : use constant value for eta (default value is
+ *                   0.1 but a different value can be specified via
+ *                   a call to KINSetEtaConstValue)
+ *
+ * KIN_ETACHOICE1 : use choice #1 as given in Eisenstat and Walker's
+ *                  paper of SIAM J.Sci.Comput.,17 (1996), pp 16-32,
+ *                  wherein eta is defined to be:
+ *
+ *              eta(k+1) = ABS(||F(u_k+1)||_L2-||F(u_k)+J(u_k)*p_k||_L2)
+ *                       ---------------------------------------------
+ *                                       ||F(u_k)||_L2
+ *
+ *                                                      1+sqrt(5)
+ *              eta_safe = eta(k)^ealpha where ealpha = ---------
+ *                                                          2
+ *
+ * KIN_ETACHOICE2 : use choice #2 as given in Eisenstat and Walker's
+ *                  paper wherein eta is defined to be:
+ *
+ *                                  [ ||F(u_k+1)||_L2 ]^ealpha
+ *              eta(k+1) = egamma * [ --------------- ]
+ *                                  [  ||F(u_k)||_L2  ]
+ *
+ *                  where egamma = [0,1] and ealpha = (1,2]
+ *
+ *              eta_safe = egamma*(eta(k)^ealpha)
+ *
+ *                  Note: The default values of the scalar
+ *                  coefficients egamma and ealpha (both required)
+ *                  are egamma = 0.9 and ealpha = 2.0, but the
+ *                  routine KINSetEtaParams can be used to specify
+ *                  different values.
+ *
+ * When using either KIN_ETACHOICE1 or KIN_ETACHOICE2, if
+ * eta_safe > 0.1 then the following safeguard is applied:
+ *
+ *  eta(k+1) = MAX {eta(k+1), eta_safe}
+ *
+ * The following safeguards are always applied when using either
+ * KIN_ETACHOICE1 or KIN_ETACHOICE2 so that eta_min <= eta <= eta_max:
+ *
+ *  eta(k+1) = MAX {eta(k+1), eta_min}
+ *  eta(k+1) = MIN {eta(k+1), eta_max}
+ *
+ * where eta_min = 1.0e-4 and eta_max = 0.9 (see KINForcingTerm).
+ * -----------------------------------------------------------------
+ */
+
+#define KIN_ETACHOICE1  1
+#define KIN_ETACHOICE2  2
+#define KIN_ETACONSTANT 3
+  
+/*
+ * -----------------------------------------------------------------
+ * Enumeration for global strategy
+ * -----------------------------------------------------------------
+ */
+  
+#define KIN_NONE       0
+#define KIN_LINESEARCH 1
+#define KIN_PICARD     2
+#define KIN_FP         3
+
+/*
+ * =================================================================
+ *              F U N C T I O N   T Y P E S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type : KINSysFn
+ * -----------------------------------------------------------------
+ * The user-supplied subroutine implementing the nonlinear system
+ * function (vector-valued function) F must take as input the
+ * dependent variable vector uu (type N_Vector), and set fval (type
+ * N_Vector) equal to F(uu) before returning. Additional workspace
+ * is allocated by the user and referenced by the user_data memory
+ * pointer.
+ * 
+ * Note: The user-defined routine (internally referenced by a
+ * a pointer (type KINSysFn) named func) should have an 'int' return
+ * value type. However, the return value is currently ignored.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*KINSysFn)(N_Vector uu, N_Vector fval, void *user_data );
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type : KINErrHandlerFn
+ * -----------------------------------------------------------------
+ * A function eh, which handles error messages, must have type
+ * KINErrHandlerFn.
+ * The function eh takes as input the error code, the name of the
+ * module reporting the error, the error message, and a pointer to
+ * user data, the same as that passed to KINSetUserData.
+ * 
+ * All error codes are negative, except KIN_WARNING which indicates 
+ * a warning (the solver continues).
+ *
+ * A KINErrHandlerFn has no return value.
+ * -----------------------------------------------------------------
+ */
+
+typedef void (*KINErrHandlerFn)(int error_code, 
+				const char *module, const char *function, 
+				char *msg, void *user_data); 
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type : KINInfoHandlerFn
+ * -----------------------------------------------------------------
+ * A function ih, which handles info messages, must have type
+ * KINInfoHandlerFn.
+ * The function ih takes as input the name of the module and of the
+ * function reporting the info message and a pointer to
+ * user data, the same as that passed to KINSetfdata.
+ * 
+ * A KINInfoHandlerFn has no return value.
+ * -----------------------------------------------------------------
+ */
+
+typedef void (*KINInfoHandlerFn)(const char *module, const char *function, 
+				 char *msg, void *user_data); 
+
+/*
+ * ================================================================
+ *          U S E R - C A L L A B L E   R O U T I N E S           
+ * ================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINCreate
+ * -----------------------------------------------------------------
+ * KINCreate allocates and initializes an internal memory block for
+ * the KINSOL solver module.
+ *
+ * If successful, KINCreate returns a pointer to the initialized
+ * memory block which should be passed to KINInit. If an
+ * error occurs, then KINCreate returns a NULL pointer.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void *KINCreate(void);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions (KINSOL)
+ * -----------------------------------------------------------------
+ * The following functions can be called to set optional inputs:
+ *
+ *     Function Name      |    Optional Input  [Default Value]
+ *                        |
+ * -----------------------------------------------------------------
+ *                        |
+ * KINSetErrHandlerFn     | user-provided ErrHandler function.
+ *                        | [internal]
+ *                        |
+ * KINSetErrFile          | pointer (type FILE) indicating where all
+ *                        | warning/error messages should be sent
+ *                        | if the default internal error handler 
+ *                        | is used
+ *                        | [stderr]
+ *                        |
+ * KINSetPrintLevel       | level of verbosity of output:
+ *                        |
+ *                        |  0  no statistical information is
+ *                        |     displayed (default level)
+ *                        |
+ *                        |  1  for each nonlinear iteration display
+ *                        |     the following information: the scaled
+ *                        |     norm (L2) of the system function
+ *                        |     evaluated at the current iterate, the
+ *                        |     scaled norm of the Newton step (only if
+ *                        |     using KIN_NONE), and the
+ *                        |     number of function evaluations performed
+ *                        |     thus far
+ *                        |
+ *                        |  2  display level 1 output and the
+ *                        |     following values for each iteration:
+ *                        |
+ *                        |       fnorm (L2) = ||fscale*func(u)||_L2
+ *                        |       (only for KIN_NONE)
+ *                        |
+ *                        |       scaled fnorm (for stopping) =
+ *                        |       ||fscale*ABS(func(u))||_L-infinity
+ *                        |       (for KIN_NONE and
+ *                        |       KIN_LINESEARCH)
+ *                        |
+ *                        |  3  display level 2 output plus additional
+ *                        |     values used by the global strategy
+ *                        |     (only if using KIN_LINESEARCH), and
+ *                        |     statistical information for the linear
+ *                        |     solver
+ *                        | [0]
+ *                        |
+ * KINSetInfoHandlerFn    | user-provided InfoHandler function.
+ *                        | [internal]
+ *                        |
+ * KINSetInfoFile         | pointer (type FILE) specifying where
+ *                        | informative (non-error) messages should
+ *                        | be sent if the default internal info
+ *                        | handler is used
+ *                        | [stdout]
+ *                        |
+ * KINSetUserData         | pointer to user-allocated memory that is
+ *                        | passed to the user-supplied subroutine
+ *                        | implementing the nonlinear system function
+ *                        | F(u)
+ *                        | [NULL]
+ *                        |
+ * KINSetNumMaxIters      | maximum number of nonlinear iterations
+ *                        | [MXITER_DEFAULT] (defined in kinsol_impl.h)
+ *                        |
+ * KINSetNoInitSetup      | flag controlling whether or not the
+ *                        | KINSol routine makes an initial call
+ *                        | to the linear solver setup routine (lsetup)
+ *                        | (possible values are TRUE and FALSE)
+ *                        | [FALSE]
+ *                        |
+ * KINSetNoResMon         | flag controlling whether or not the nonlinear
+ *                        | residual monitoring scheme is used to control
+ *                        | Jacobian updating (possible values are TRUE
+ *                        | and FALSE)
+ *                        | [FALSE if using direct linear solver]
+ *                        | [TRUE if using inexact linear solver]
+ *                        |
+ * KINSetMaxSetupCalls    | mbset, number of nonlinear iteraions, such 
+ *                        | that a call to the linear solver setup routine
+ *                        | (lsetup) is forced every mbset iterations.
+ *                        | If mbset=1, lsetup s called at every iteration.
+ *                        | [MSBSET_DEFAULT] (defined in kinsol_impl.h)
+ *                        |
+ * KINSetMaxSubSetupCalls | mbsetsub is the number of nonlinear iterations
+ *                        | between checks by the nonlinear residual
+ *                        | monitoring algorithm (specifies length of
+ *                        | subinterval)
+ *                        | NOTE: mbset should be a multiple of mbsetsub
+ *                        | [MSBSET_SUB_DEFAULT] (defined in kinsol_impl.h)
+ *                        |
+ * KINSetEtaForm          | flag indicating which method to use to
+ *                        | compute the value of the eta coefficient
+ *                        | used in the calculation of the linear
+ *                        | solver convergence tolerance:
+ *                        |
+ *                        |  eps = (eta+uround)*||fscale*func(u)||_L2
+ *                        |
+ *                        | the linear solver tests for convergence by
+ *                        | checking if the following inequality has
+ *                        | been satisfied:
+ *                        |
+ *                        |  ||fscale*(func(u)+J(u)*p)||_L2 <= eps
+ *                        |
+ *                        | where J(u) is the system Jacobian
+ *                        | evaluated at the current iterate, and p
+ *                        | denotes the Newton step
+ *                        |
+ *                        | choices for computing eta are as follows:
+ *                        |
+ *                        |  KIN_ETACHOICE1  (refer to KINForcingTerm)
+ *                        |
+ *                        |  eta = ABS(||F(u_k+1)||_L2-||F(u_k)+J(u_k)*p_k||_L2)
+ *                        |        ---------------------------------------------
+ *                        |                        ||F(u_k)||_L2
+ *                        | 
+ *                        |  KIN_ETACHOICE2  (refer to KINForcingTerm)
+ *                        |
+ *                        |                [ ||F(u_k+1)||_L2 ]^alpha
+ *                        |  eta = gamma * [ --------------- ]
+ *                        |                [  ||F(u_k)||_L2  ]
+ *                        |
+ *                        |  where gamma = [0,1] and alpha = (1,2]
+ *                        |
+ *                        |  KIN_ETACONSTANT  use a constant value for eta
+ *                        | [KIN_ETACHOICE1]
+ *                        |
+ * KINSetEtaConstValue    | constant value of eta - use with
+ *                        | KIN_ETACONSTANT option
+ *                        | [0.1]
+ *                        |
+ * KINSetEtaParams        | values of eta_gamma (egamma) and eta_alpha
+ *                        | (ealpha) coefficients - use with KIN_ETACHOICE2
+ *                        | option
+ *                        | [0.9 and 2.0]
+ *                        |
+ * KINSetResMonParams     | values of omega_min and omega_max scalars
+ *                        | used by nonlinear residual monitoring
+ *                        | algorithm (see KINStop)
+ *                        | [0.00001 and 0.9]
+ *                        |
+ * KINSetResMonConstValue | constant value used by residual monitoring
+ *                        | algorithm. If omega=0, then it is estimated
+ *                        | using omega_min and omega_max.
+ *                        | [0.0]
+ *                        |
+ * KINSetNoMinEps         | flag controlling whether or not the value
+ *                        | of eps is bounded below by 0.01*fnormtol
+ *                        | (see KINSetFuncNormTol)
+ *                        |
+ *                        |  FALSE  constrain value of eps by setting
+ *                        |         to the following:
+ *                        |
+ *                        |          eps = MAX{0.01*fnormtol, eps}
+ *                        |
+ *                        |  TRUE  do not constrain value of eps
+ *                        | [FALSE]
+ *                        |
+ * KINSetMaxNewtonStep    | maximum scaled length of Newton step
+ *                        | (reset to value of one if user-supplied
+ *                        | value is less than one)
+ *                        | [1000*||uscale*u_0||_L2]
+ *                        |
+ * KINSetMaxBetaFails     | maximum number of beta condition failures
+ *                        | in the line search algorithm.
+ *                        | [MXNBCF_DEFAULT] (defined in kinsol_impl.h)
+ *                        |
+ * KINSetRelErrFunc       | real scalar equal to realative error in
+ *                        | computing F(u) (used in difference-
+ *                        | quotient approximation of matrix-vector
+ *                        | product J(u)*v)
+ *                        | [(uround)^1/2]
+ *                        |
+ * KINSetFuncNormTol      | real scalar used as stopping tolerance on
+ *                        | ||fscale*ABS(func(u))||_L-infinity (see
+ *                        | KINStop and KINInitialStop)
+ *                        | [(uround)^1/3]
+ *                        |
+ * KINSetScaledStepTol    | real scalar used as stopping tolerance on
+ *                        | the maximum scaled step length:
+ *                        |
+ *                        |  ||    u_k+1 - u_k    ||
+ *                        |  || ----------------- ||_L-infinity
+ *                        |  || ABS(u_k+1)+uscale ||
+ *                        |
+ *                        | (see KINStop)
+ *                        | [(uround)^2/3]
+ *                        |
+ * KINSetConstraints      | pointer to an array (type N_Vector) of
+ *                        | constraints on the solution vector u
+ *                        | 
+ *                        | if constraints[i] =
+ *                        |
+ *                        |   0  u[i] not constrained
+ *                        |
+ *                        |  +1  u[i] constrained to be >= 0
+ *                        |  -1  u[i] constrained to be <= 0
+ *                        |
+ *                        |  +2  u[i] constrained to be > 0
+ *                        |  -2  u[i] constrained to be < 0
+ *                        |
+ *                        | if a NULL pointer is given, then no
+ *                        | constraints are applied to vector u
+ *                        | [NULL]
+ *                        |
+ * KINSetSysFunc          | set the user-provided routine which
+ *                        | defines the nonlinear problem to be 
+ *                        | solved
+ *                        | [none]
+ * -----------------------------------------------------------------
+ * The possible return values for the KINSet* subroutines are the
+ * following:
+ *
+ * KIN_SUCCESS : means the associated variable was successfully
+ *               set [0]
+ *
+ * KIN_MEM_NULL : means a NULL KINSOL memory block pointer was given
+ *                (must call the KINCreate and KINInit memory
+ *                allocation subroutines prior to calling KINSol) [-1]
+ *
+ * KIN_ILL_INPUT : means the supplied parameter was invalid (check
+ *                 error message) [-2]
+ * -----------------------------------------------------------------
+ * Note: If successful, these functions return KIN_SUCCESS. If an
+ * argument has an illegal value, then an error message is printed
+ * to the file specified by errfp and an error code is returned.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINSetErrHandlerFn(void *kinmem, KINErrHandlerFn ehfun, void *eh_data);
+SUNDIALS_EXPORT int KINSetErrFile(void *kinmem, FILE *errfp);
+SUNDIALS_EXPORT int KINSetInfoHandlerFn(void *kinmem, KINInfoHandlerFn ihfun, void *ih_data);
+SUNDIALS_EXPORT int KINSetInfoFile(void *kinmem, FILE *infofp);
+SUNDIALS_EXPORT int KINSetUserData(void *kinmem, void *user_data);
+SUNDIALS_EXPORT int KINSetPrintLevel(void *kinmemm, int printfl);
+SUNDIALS_EXPORT int KINSetMAA(void *kinmem, long int maa);
+  /* SUNDIALS_EXPORT int KINSetAAStopCrit(void *kinmem, booleantype setstop); */
+SUNDIALS_EXPORT int KINSetNumMaxIters(void *kinmem, long int mxiter);
+SUNDIALS_EXPORT int KINSetNoInitSetup(void *kinmem, booleantype noInitSetup);
+SUNDIALS_EXPORT int KINSetNoResMon(void *kinmem, booleantype noNNIResMon);
+SUNDIALS_EXPORT int KINSetMaxSetupCalls(void *kinmem, long int msbset);
+SUNDIALS_EXPORT int KINSetMaxSubSetupCalls(void *kinmem, long int msbsetsub);
+SUNDIALS_EXPORT int KINSetEtaForm(void *kinmem, int etachoice);
+SUNDIALS_EXPORT int KINSetEtaConstValue(void *kinmem, realtype eta);
+SUNDIALS_EXPORT int KINSetEtaParams(void *kinmem, realtype egamma, realtype ealpha);
+SUNDIALS_EXPORT int KINSetResMonParams(void *kinmem, realtype omegamin, realtype omegamax);
+SUNDIALS_EXPORT int KINSetResMonConstValue(void *kinmem, realtype omegaconst);
+SUNDIALS_EXPORT int KINSetNoMinEps(void *kinmem, booleantype noMinEps);
+SUNDIALS_EXPORT int KINSetMaxNewtonStep(void *kinmem, realtype mxnewtstep);
+SUNDIALS_EXPORT int KINSetMaxBetaFails(void *kinmem, long int mxnbcf);
+SUNDIALS_EXPORT int KINSetRelErrFunc(void *kinmem, realtype relfunc);
+SUNDIALS_EXPORT int KINSetFuncNormTol(void *kinmem, realtype fnormtol);
+SUNDIALS_EXPORT int KINSetScaledStepTol(void *kinmem, realtype scsteptol);
+SUNDIALS_EXPORT int KINSetConstraints(void *kinmem, N_Vector constraints);
+SUNDIALS_EXPORT int KINSetSysFunc(void *kinmem, KINSysFn func);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINInit
+ * -----------------------------------------------------------------
+ * KINInit allocates additional memory for vector storage and
+ * sets a couple problem-specific KINSOL variables.
+ *
+ * Note: Additional vectors must be initialized by the user and
+ * passed to the KINSol routine.
+ *
+ *  kinmem  pointer to an internal memory block allocated during a
+ *          prior call to KINCreate
+ *
+ *  func  name of user-supplied subroutine implementing the
+ *        nonlinear function F(u)
+ *
+ *  tmpl  implementation-specific template vector (type N_Vector)
+ *        (created using either N_VNew_Serial or N_VNew_Parallel)
+ *
+ * KINInit return flags: KIN_SUCCESS, KIN_MEM_NULL, KIN_ILL_INPUT,
+ * and KIN_MEM_FAIL (see below). If an error occurs, then KINInit
+ * prints an error message.
+ *
+ * -----------------------------------------------------------------
+ * The possible return values for the KINInit subroutine are the
+ * following:
+ *
+ * KIN_SUCCESS : means the necessary system memory was successfully
+ *               allocated [0]
+ *
+ * KIN_MEM_NULL : means a NULL KINSOL memory block pointer was given
+ *                (must call the KINCreate routine before calling
+ *                KINInit) [-1]
+ *
+ * KIN_ILL_INPUT : means the name of a user-supplied subroutine
+ *                 implementing the nonlinear system function F(u)
+ *                 was not given [-2]
+ *
+ * KIN_MEM_FAIL : means an error occurred during memory allocation
+ *                (either insufficient system resources are available
+ *                or the vector kernel has not yet been initialized)
+ *                [-4]
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINInit(void *kinmem, KINSysFn func, N_Vector tmpl);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSol
+ * -----------------------------------------------------------------
+ * KINSol (main KINSOL driver routine) manages the computational
+ * process of computing an approximate solution of the nonlinear
+ * system. If the initial guess (initial value assigned to vector u)
+ * doesn't violate any user-defined constraints, then the subroutine
+ * attempts to solve the system F(u) = 0 using a nonlinear Krylov
+ * subspace projection method. The Newton-Krylov iterations are
+ * stopped if either of the following conditions is satisfied:
+ *
+ *  ||F(u)||_L-infinity <= 0.01*fnormtol
+ *
+ *  ||u[i+1] - u[i]||_L-infinity <= scsteptol
+ *
+ * However, if the current iterate satisfies the second stopping
+ * criterion, it doesn't necessarily mean an approximate solution
+ * has been found since the algorithm may have stalled, or the
+ * user-specified step tolerance (scsteptol) may be too large.
+ *
+ *  kinmem  pointer to an internal memory block allocated during a
+ *          prior call to KINCreate
+ *
+ *  uu  vector set to initial guess by user before calling KINSol,
+ *      but which upon return contains an approximate solution of
+ *      the nonlinear system F(u) = 0
+ *
+ *  strategy  global strategy applied to Newton step if unsatisfactory
+ *            (KIN_NONE or KIN_LINESEARCH)
+ *
+ *  u_scale  vector containing diagonal elements of scaling matrix
+ *           for vector u chosen so that the components of
+ *           u_scale*u (as a matrix multiplication) all have
+ *           about the same magnitude when u is close to a root
+ *           of F(u)
+ *
+ *  f_scale  vector containing diagonal elements of scaling matrix
+ *           for F(u) chosen so that the components of
+ *           f_scale*F(u) (as a matrix multiplication) all have
+ *           roughly the same magnitude when u is not too near a
+ *           root of F(u)
+ *
+ * Note: The components of vectors u_scale and f_scale should be
+ * positive.
+ *
+ * If successful, KINSol returns a vector uu contains an approximate
+ * solution of the given nonlinear system. If an error occurs, then
+ * an error message is printed and an error code is returned.
+ *
+ * -----------------------------------------------------------------
+ * KINSol Return Values
+ * -----------------------------------------------------------------
+ *
+ * The possible return values for the KINSol subroutine are the
+ * following:
+ *
+ * KIN_SUCCESS : means ||fscale*ABS(func(u))||_L-infinity <= 0.01*fnormtol
+ *               and the current iterate uu is probably an approximate
+ *               solution of the nonlinear system F(u) = 0 [0]
+ *
+ * KIN_INITIAL_GUESS_OK : means the initial user-supplied guess
+ *                        already satisfies the stopping criterion
+ *                        given above [1]
+ *
+ * KIN_STEP_LT_STPTOL : means the following inequality has been
+ *                      satisfied (stopping tolerance on scaled
+ *                      step length):
+ *
+ *                    ||    u_k+1 - u_k    ||
+ *                    || ----------------- ||_L-infinity <= scsteptol
+ *                    || ABS(u_k+1)+uscale ||
+ *
+ *                      so the current iterate (denoted above by u_k+1)
+ *                      may be an approximate solution of the given
+ *                      nonlinear system, but it is also quite possible
+ *                      that the algorithm is "stalled" (making
+ *                      insufficient progress) near an invalid solution,
+ *                      or the real scalar scsteptol is too large [2]
+ *
+ * KIN_LINESEARCH_NONCONV : means the line search algorithm was unable
+ *                          to find an iterate sufficiently distinct
+ *                          from the current iterate
+ *
+ *                          failure to satisfy the sufficient decrease
+ *                          condition could mean the current iterate is
+ *                          "close" to an approximate solution of the given
+ *                          nonlinear system, the finite-difference
+ *                          approximation of the matrix-vector product
+ *                          J(u)*v is inaccurate, or the real scalar
+ *                          scsteptol is too large [-5]
+ *
+ * KIN_MAXITER_REACHED : means the maximum number of nonlinear iterations
+ *                       has been reached [-6]
+ *
+ * KIN_MXNEWT_5X_EXCEEDED : means five consecutive steps have been taken
+ *                          that satisfy the following inequality:
+ *
+ *                            ||uscale*p||_L2 > 0.99*mxnewtstep
+ *
+ *                          where p denotes the current step and
+ *                          mxnewtstep is a real scalar upper bound
+ *                          on the scaled step length
+ *
+ *                          such a failure may mean ||fscale*func(u)||_L2
+ *                          asymptotes from above to a finite value, or
+ *                          the real scalar mxnewtstep is too small [-7]
+ *
+ * KIN_LINESEARCH_BCFAIL : means the line search algorithm (implemented
+ *                         in KINLineSearch) was unable to satisfy the
+ *                         beta-condition for MXNBCF + 1 nonlinear
+ *                         iterations (not necessarily consecutive),
+ *                         which may indicate the algorithm is making
+ *                         poor progress [-8]
+ *
+ * KIN_LINSOLV_NO_RECOVERY : means the user-supplied routine psolve
+ *                           encountered a recoverable error, but
+ *                           the preconditioner is already current [-9]
+ *
+ * KIN_LINIT_FAIL : means the linear solver initialization routine (linit)
+ *                  encountered an error [-10]
+ *
+ * KIN_LSETUP_FAIL : means the user-supplied routine pset (used to compute
+ *                   the preconditioner) encountered an unrecoverable
+ *                   error [-11]
+ *
+ * KIN_LSOLVE_FAIL : means either the user-supplied routine psolve (used to
+ *                   to solve the preconditioned linear system) encountered
+ *                   an unrecoverable error, or the linear solver routine
+ *                   (lsolve) encountered an error condition [-12]
+ *
+ * KIN_MEM_NULL : means a NULL KINSOL memory block pointer was given
+ *                (must call the KINCreate and KINInit memory
+ *                allocation subroutines prior to calling KINSol) [-1]
+ *
+ * KIN_NO_MALLOC : means additional system memory has not yet been
+ *                 allocated for vector storage (forgot to call the
+ *                 KINInit routine) [-3]
+ *
+ * KIN_ILL_INPUT : means at least one input parameter was invalid
+ *                 (check error output) [-2]
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINSol(void *kinmem, N_Vector uu, int strategy,
+			   N_Vector u_scale, N_Vector f_scale);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional Output Extraction Functions (KINSOL)
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistical information related to the KINSOL solver:
+ *
+ *       Function Name       |      Returned Value
+ *                           |
+ * -----------------------------------------------------------------
+ *                           |
+ * KINGetWorkSpace           | returns both integer workspace size
+ *                           | (total number of long int-sized blocks
+ *                           | of memory allocated by KINSOL for
+ *                           | vector storage) and real workspace
+ *                           | size (total number of realtype-sized
+ *                           | blocks of memory allocated by KINSOL
+ *                           | for vector storage)
+ *                           |
+ * KINGetNumFuncEvals        | total number evaluations of the
+ *                           | nonlinear system function F(u)
+ *                           | (number of direct calls made to the
+ *                           | user-supplied subroutine by KINSOL
+ *                           | module member functions)
+ *                           |
+ * KINGetNumNonlinSolvIters  | total number of nonlinear iterations
+ *                           | performed
+ *                           |
+ * KINGetNumBetaCondFails    | total number of beta-condition
+ *                           | failures (see KINLineSearch)
+ *                           |
+ *                           | KINSOL halts if the number of such
+ *                           | failures exceeds the value of the
+ *                           | constant MXNBCF (defined in kinsol.c)
+ *                           |
+ * KINGetNumBacktrackOps     | total number of backtrack operations
+ *                           | (step length adjustments) performed
+ *                           | by the line search algorithm (see
+ *                           | KINLineSearch)
+ *                           |
+ * KINGetFuncNorm            | scaled norm of the nonlinear system
+ *                           | function F(u) evaluated at the
+ *                           | current iterate:
+ *                           |
+ *                           |  ||fscale*func(u)||_L2
+ *                           |
+ * KINGetStepLength          | scaled norm (or length) of the step
+ *                           | used during the previous iteration:
+ *                           |
+ *                           |  ||uscale*p||_L2
+ *                           |
+ * KINGetReturnFlagName      | returns the name of the constant
+ *                           | associated with a KINSOL return flag
+ *                           |
+ * -----------------------------------------------------------------
+ *
+ * The possible return values for the KINSet* subroutines are the
+ * following:
+ *
+ * KIN_SUCCESS : means the information was successfully retrieved [0]
+ * 
+ * KIN_MEM_NULL : means a NULL KINSOL memory block pointer was given
+ *                (must call the KINCreate and KINInit memory
+ *                allocation subroutines prior to calling KINSol) [-1]
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINGetWorkSpace(void *kinmem, long int *lenrw, long int *leniw);
+SUNDIALS_EXPORT int KINGetNumNonlinSolvIters(void *kinmem, long int *nniters);
+SUNDIALS_EXPORT int KINGetNumFuncEvals(void *kinmem, long int *nfevals);
+SUNDIALS_EXPORT int KINGetNumBetaCondFails(void *kinmem, long int *nbcfails); 
+SUNDIALS_EXPORT int KINGetNumBacktrackOps(void *kinmem, long int *nbacktr);
+SUNDIALS_EXPORT int KINGetFuncNorm(void *kinmem, realtype *fnorm);
+SUNDIALS_EXPORT int KINGetStepLength(void *kinmem, realtype *steplength);
+SUNDIALS_EXPORT char *KINGetReturnFlagName(long int flag);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINFree
+ * -----------------------------------------------------------------
+ * KINFree frees system memory resources reserved for the KINSOL
+ * solver module.
+ *
+ *  kinmem  pointer to an internal memory block allocated during
+ *          prior calls to KINCreate and KINInit
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void KINFree(void **kinmem);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_band.h b/include/kinsol/kinsol_band.h
new file mode 100644
index 0000000..c79b111
--- /dev/null
+++ b/include/kinsol/kinsol_band.h
@@ -0,0 +1,62 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the KINSOL band linear solver, KINBAND.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINBAND_H
+#define _KINBAND_H
+
+#include <kinsol/kinsol_direct.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINBand
+ * -----------------------------------------------------------------
+ * A call to the KINBand function links the main solver with the 
+ * KINBAND linear solver. Its arguments are as follows:
+ *
+ * kinmem - pointer to the integrator memory returned by KINCreate.
+ *
+ * N      - problem size
+ *
+ * mupper - upper bandwidth of the band Jacobian
+ *
+ * mlower - lower bandwidth of the band Jacobian
+ *
+ * The return value of KINBand is one of:
+ *    KINDLS_SUCCESS   if successful
+ *    KINDLS_MEM_NULL  if the kinsol memory was NULL
+ *    KINDLS_MEM_FAIL  if there was a memory allocation failure
+ *    KINDLS_ILL_INPUT if a required vector operation is missing
+ *                        or if a bandwidth has an illegal value.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINBand(void *kinmem, long int N, long int mupper, long int mlower);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_bbdpre.h b/include/kinsol/kinsol_bbdpre.h
new file mode 100644
index 0000000..3df7cd3
--- /dev/null
+++ b/include/kinsol/kinsol_bbdpre.h
@@ -0,0 +1,238 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Alan Hindmarsh, Radu Serban, and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the KINBBDPRE module, for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with KINSol, KINSp*,
+ * and the parallel implementaion of the NVECTOR module.
+ *
+ * Summary:
+ *
+ * These routines provide a preconditioner matrix for KINSol that
+ * is block-diagonal with banded blocks. The blocking corresponds
+ * to the distribution of the dependent variable vector u amongst
+ * the processes. Each preconditioner block is generated from
+ * the Jacobian of the local part (associated with the current
+ * process) of a given function g(u) approximating f(u). The blocks
+ * are generated by each process via a difference quotient scheme,
+ * utilizing the assumed banded structure with given half-bandwidths,
+ * mudq and mldq. However, the banded Jacobian block kept by the
+ * scheme has half-bandwidths mukeep and mlkeep, which may be smaller.
+ *
+ * The user's calling program should have the following form:
+ *
+ *   #include <sundials/sundials_types.h>
+ *   #include <sundials/sundials_math.h>
+ *   #include <sundials/sundials_iterative.h>
+ *   #include <nvector_parallel.h>
+ *   #include <kinsol.h>
+ *   #include <kinsol/kinsol_bbdpre.h>
+ *   ...
+ *   MPI_Init(&argc,&argv);
+ *   ...
+ *   tmpl = N_VNew_Parallel(...);
+ *   ...
+ *   kin_mem = KINCreate();
+ *   flag = KINInit(kin_mem,...,tmpl);
+ *   ...
+ *   flag = KINSptfqmr(kin_mem,...);
+ *         -or-
+ *   flag = KINSpbcg(kin_mem,...);
+ *         -or-
+ *   flag = KINSpgmr(kin_mem,...);
+ *   ...
+ *   flag = KINBBDPrecInit(kin_mem,...);
+ *   ...
+ *   KINSol(kin_mem,...);
+ *   ...
+ *   KINFree(&kin_mem);
+ *   ...
+ *   N_VDestroy_Parallel(tmpl);
+ *   ...
+ *   MPI_Finalize();
+ *
+ * The user-supplied routines required are:
+ *
+ *  func    the function f(u) defining the system to be solved:
+ *          f(u) = 0
+ *
+ *  glocal  the function defining the approximation g(u) to f(u)
+ *
+ *  gcomm   the function to do necessary communication for glocal
+ *
+ * Notes:
+ *
+ * 1) This header file (kinsol_bbdpre.h) is included by the user for
+ *    the definition of the KBBDData data type and for needed
+ *    function prototypes.
+ *
+ * 2) The KINBBDPrecInit call includes half-bandwiths mudq and mldq
+ *    to be used in the difference quotient calculation of the
+ *    approximate Jacobian. They need not be the true half-bandwidths
+ *    of the Jacobian of the local block of g, when smaller values may
+ *    provide greater efficiency. Also, the half-bandwidths mukeep and
+ *    mlkeep of the retained banded approximate Jacobian block may be
+ *    even smaller, to furhter reduce storage and computational costs.
+ *    For all four half-bandwidths, the values need not be the same
+ *    for every process.
+ *
+ * 3) The actual name of the user's f function is passed to
+ *    KINInit, and the names of the user's glocal and gcomm
+ *    functions are passed to KINBBDPrecInit.
+ *
+ * 4) Optional outputs specific to this module are available by
+ *    way of the functions listed below. These include work space
+ *    sizes and the cumulative number of glocal calls.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINBBDPRE_H
+#define _KINBBDPRE_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* KINBBDPRE return values */
+
+#define KINBBDPRE_SUCCESS          0
+#define KINBBDPRE_PDATA_NULL     -11
+#define KINBBDPRE_FUNC_UNRECVR   -12
+/*
+ * -----------------------------------------------------------------
+ * Type : KINCommFn
+ * -----------------------------------------------------------------
+ * The user must supply a function of type KINCommFn which
+ * performs all inter-process communication necessary to
+ * evaluate the approximate system function described above.
+ *
+ * This function takes as input the local vector size Nlocal,
+ * the solution vector u, and a pointer to the user-defined
+ * data block user_data.
+ *
+ * The KINCommFn gcomm is expected to save communicated data in
+ * space defined with the structure *user_data.
+ *
+ * Each call to the KINCommFn is preceded by a call to the system
+ * function func at the current iterate uu. Thus functions of the
+ * type KINCommFn can omit any communications done by f (func) if
+ * relevant to the evaluation of the KINLocalFn function. If all
+ * necessary communication was done in func, the user can pass
+ * NULL for gcomm in the call to KINBBDPrecInit (see below).
+ *
+ * A KINCommFn function should return 0 if successful or
+ * a non-zero value if an error occured.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*KINCommFn)(long int Nlocal, N_Vector u, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : KINLocalFn
+ * -----------------------------------------------------------------
+ * The user must supply a function g(u) which approximates the
+ * function f for the system f(u) = 0, and which is computed
+ * locally (without inter-process communication). Note: The case
+ * where g is mathematically identical to f is allowed.
+ *
+ * The implementation of this function must have type KINLocalFn
+ * and take as input the local vector size Nlocal, the local
+ * solution vector uu, the returned local g values vector, and a
+ * pointer to the user-defined data block user_data. It is to
+ * compute the local part of g(u) and store the result in the
+ * vector gval. (Note: Memory for uu and gval is handled within the
+ * preconditioner module.) It is expected that this routine will
+ * save communicated data in work space defined by the user and
+ * made available to the preconditioner function for the problem.
+ *
+ * A KINLocalFn function should return 0 if successful or
+ * a non-zero value if an error occured.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*KINLocalFn)(long int Nlocal, N_Vector uu,
+                          N_Vector gval, void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINBBDPrecInit
+ * -----------------------------------------------------------------
+ * KINBBDPrecInit allocates and initializes the BBD preconditioner.
+ *
+ * The parameters of KINBBDPrecInit are as follows:
+ *
+ * kinmem  is a pointer to the KINSol memory block.
+ *
+ * Nlocal  is the length of the local block of the vectors
+ *         on the current process.
+ *
+ * mudq, mldq  are the upper and lower half-bandwidths to be used
+ *             in the computation of the local Jacobian blocks.
+ *
+ * mukeep, mlkeep  are the upper and lower half-bandwidths of the
+ *                 retained banded approximation to the local
+ *                 Jacobian block.
+ *
+ * dq_rel_uu  is the relative error to be used in the difference
+ *            quotient Jacobian calculation in the preconditioner.
+ *            The default is sqrt(unit roundoff), obtained by
+ *            passing 0.
+ *
+ * gloc    is the name of the user-supplied function g(u) that
+ *         approximates f and whose local Jacobian blocks are
+ *         to form the preconditioner.
+ *
+ * gcomm   is the name of the user-defined function that performs
+ *         necessary inter-process communication for the
+ *         execution of gloc.
+ *
+ * The return value of KINBBDPrecInit is one of:
+ *   KINSPILS_SUCCESS if no errors occurred
+ *   KINSPILS_MEM_NULL if the integrator memory is NULL
+ *   KINSPILS_LMEM_NULL if the linear solver memory is NULL
+ *   KINSPILS_ILL_INPUT if an input has an illegal value
+ *   KINSPILS_MEM_FAIL if a memory allocation request failed
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINBBDPrecInit(void *kinmem, long int Nlocal, 
+                                   long int mudq, long int mldq,
+                                   long int mukeep, long int mlkeep,
+                                   realtype dq_rel_uu, 
+                                   KINLocalFn gloc, KINCommFn gcomm);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINBBDPrecGet*
+ *
+ * The return value of KINBBDPrecGet* is one of:
+ *    KINBBDPRE_SUCCESS    if successful
+ *    KINBBDPRE_PDATA_NULL if the p_data memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINBBDPrecGetWorkSpace(void *kinmem, long int *lenrwBBDP, long int *leniwBBDP);
+SUNDIALS_EXPORT int KINBBDPrecGetNumGfnEvals(void *kinmem, long int *ngevalsBBDP);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_dense.h b/include/kinsol/kinsol_dense.h
new file mode 100644
index 0000000..c44196b
--- /dev/null
+++ b/include/kinsol/kinsol_dense.h
@@ -0,0 +1,59 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the KINSOL dense linear solver module, 
+ * KINDENSE.
+ * -----------------------------------------------------------------
+ */
+
+#include <kinsol/kinsol_direct.h>
+#include <sundials/sundials_dense.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+#ifndef _KINDENSE_H
+#define _KINDENSE_H
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINDense
+ * -----------------------------------------------------------------
+ * A call to the KINDense function links the main solver with the
+ * KINDENSE linear solver. Its arguments are as follows:
+ *
+ * kinmem - pointer to an internal memory block allocated during a
+ *          prior call to KINCreate
+ *
+ * N      - problem size
+ *
+ * The return value of KINDense is one of:
+ *    KINDLS_SUCCESS   if successful
+ *    KINDLS_MEM_NULL  if the kinsol memory was NULL
+ *    KINDLS_MEM_FAIL  if there was a memory allocation failure
+ *    KINDLS_ILL_INPUT if a required vector operation is missing
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINDense(void *kinmem, long int N);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/include/kinsol/kinsol_direct.h b/include/kinsol/kinsol_direct.h
new file mode 100644
index 0000000..288ab8a
--- /dev/null
+++ b/include/kinsol/kinsol_direct.h
@@ -0,0 +1,267 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common header file for the direct linear solvers in KINSOL.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINDLS_H
+#define _KINDLS_H
+
+#include <sundials/sundials_direct.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *              K I N D I R E C T     C O N S T A N T S
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * KINDLS return values 
+ * -----------------------------------------------------------------
+ */
+
+#define KINDLS_SUCCESS           0
+#define KINDLS_MEM_NULL         -1
+#define KINDLS_LMEM_NULL        -2
+#define KINDLS_ILL_INPUT        -3
+#define KINDLS_MEM_FAIL         -4
+
+/* Additional last_flag values */
+
+#define KINDLS_JACFUNC_UNRECVR  -5
+#define KINDLS_JACFUNC_RECVR    -6
+
+/*
+ * =================================================================
+ *              F U N C T I O N   T Y P E S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type: KINDlsDenseJacFn
+ * -----------------------------------------------------------------
+ *
+ * A dense Jacobian approximation function Jac must be of type 
+ * KINDlsDenseJacFn. Its parameters are:
+ *
+ * N        - problem size.
+ *
+ * u        - current iterate (unscaled) [input]
+ *
+ * fu       - vector (type N_Vector) containing result of nonlinear
+ *            system function evaluated at current iterate:
+ *            fu = F(u) [input]
+ *
+ * J        - dense matrix (of type DlsMat) that will be loaded
+ *            by a KINDlsDenseJacFn with an approximation to the
+ *            Jacobian matrix J = (dF_i/dy_j).
+ *
+ * user_data   - pointer to user data - the same as the user_data
+ *            parameter passed to KINSetFdata.
+ *
+ * tmp1, tmp2 - available scratch vectors (volatile storage)
+ *
+ * A KINDlsDenseJacFn should return 0 if successful, a positive 
+ * value if a recoverable error occurred, and a negative value if 
+ * an unrecoverable error occurred.
+ *
+ * -----------------------------------------------------------------
+ *
+ * NOTE: The following are two efficient ways to load a dense Jac:         
+ * (1) (with macros - no explicit data structure references)      
+ *     for (j=0; j < Neq; j++) {                                  
+ *       col_j = DENSE_COL(Jac,j);                                 
+ *       for (i=0; i < Neq; i++) {                                
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         col_j[i] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ * (2) (without macros - explicit data structure references)      
+ *     for (j=0; j < Neq; j++) {                                  
+ *       col_j = (Jac->data)[j];                                   
+ *       for (i=0; i < Neq; i++) {                                
+ *         generate J_ij = the (i,j)th Jacobian element           
+ *         col_j[i] = J_ij;                                       
+ *       }                                                        
+ *     }                                                          
+ * A third way, using the DENSE_ELEM(A,i,j) macro, is much less   
+ * efficient in general.  It is only appropriate for use in small 
+ * problems in which efficiency of access is NOT a major concern. 
+ *                                                                
+ * -----------------------------------------------------------------
+ */
+  
+  
+typedef int (*KINDlsDenseJacFn)(long int N,
+				N_Vector u, N_Vector fu, 
+				DlsMat J, void *user_data,
+				N_Vector tmp1, N_Vector tmp2);
+  
+/*
+ * -----------------------------------------------------------------
+ * Type: KINDlsBandJacFn
+ * -----------------------------------------------------------------
+ *
+ * A band Jacobian approximation function Jac must have the
+ * prototype given below. Its parameters are:
+ *
+ * N is the problem size
+ *
+ * mupper is the upper half-bandwidth of the approximate banded
+ * Jacobian. This parameter is the same as the mupper parameter
+ * passed by the user to the linear solver initialization function.
+ *
+ * mlower is the lower half-bandwidth of the approximate banded
+ * Jacobian. This parameter is the same as the mlower parameter
+ * passed by the user to the linear solver initialization function.
+ *
+ * u        - current iterate (unscaled) [input]
+ *
+ * fu       - vector (type N_Vector) containing result of nonlinear
+ *            system function evaluated at current iterate:
+ *            fu = F(uu) [input]
+ *
+ * J        - band matrix (of type DlsMat) that will be loaded by a
+ *            KINDlsBandJacFn with an approximation to the Jacobian
+ *            matrix Jac = (dF_i/dy_j).
+ *
+ * user_data   - pointer to user data - the same as the user_data
+ *            parameter passed to KINSetFdata.
+ *
+ * tmp1, tmp2 - available scratch vectors (volatile storage)
+ *
+ * A KINDlsBandJacFn should return 0 if successful, a positive value
+ * if a recoverable error occurred, and a negative value if an 
+ * unrecoverable error occurred.
+ *
+ * -----------------------------------------------------------------
+ *
+ * NOTE. Three efficient ways to load J are:
+ *
+ * (1) (with macros - no explicit data structure references)
+ *    for (j=0; j < n; j++) {
+ *       col_j = BAND_COL(Jac,j);
+ *       for (i=j-mupper; i <= j+mlower; i++) {
+ *         generate J_ij = the (i,j)th Jacobian element
+ *         BAND_COL_ELEM(col_j,i,j) = J_ij;
+ *       }
+ *     }
+ *
+ * (2) (with BAND_COL macro, but without BAND_COL_ELEM macro)
+ *    for (j=0; j < n; j++) {
+ *       col_j = BAND_COL(Jac,j);
+ *       for (k=-mupper; k <= mlower; k++) {
+ *         generate J_ij = the (i,j)th Jacobian element, i=j+k
+ *         col_j[k] = J_ij;
+ *       }
+ *     }
+ *
+ * (3) (without macros - explicit data structure references)
+ *     offset = Jac->smu;
+ *     for (j=0; j < n; j++) {
+ *       col_j = ((Jac->data)[j])+offset;
+ *       for (k=-mupper; k <= mlower; k++) {
+ *         generate J_ij = the (i,j)th Jacobian element, i=j+k
+ *         col_j[k] = J_ij;
+ *       }
+ *     }
+ * Caution: Jac->smu is generally NOT the same as mupper.
+ *
+ * The BAND_ELEM(A,i,j) macro is appropriate for use in small
+ * problems in which efficiency of access is NOT a major concern.
+ *
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*KINDlsBandJacFn)(long int N, long int mupper, long int mlower,
+			       N_Vector u, N_Vector fu, 
+			       DlsMat J, void *user_data,
+			       N_Vector tmp1, N_Vector tmp2);
+
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the KINDLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * KINDlsSetDenseJacFn specifies the dense Jacobian approximation
+ * routine to be used for a direct dense linear solver.
+ *
+ * KINDlsSetBandJacFn specifies the band Jacobian approximation
+ * routine to be used for a direct band linear solver.
+ *
+ * By default, a difference quotient approximation, supplied with
+ * the solver is used.
+ *
+ * The return value is one of:
+ *    KINDLS_SUCCESS   if successful
+ *    KINDLS_MEM_NULL  if the KINSOL memory was NULL
+ *    KINDLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINDlsSetDenseJacFn(void *kinmem, KINDlsDenseJacFn jac);
+SUNDIALS_EXPORT int KINDlsSetBandJacFn(void *kinmem, KINDlsBandJacFn jac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from a KINDLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * KINDlsGetWorkSpace    returns the real and integer workspace used
+ *                       by the KINDLS linear solver.
+ * KINDlsGetNumJacEvals  returns the number of calls made to the
+ *                       Jacobian evaluation routine.
+ * KINDlsGetNumFuncEvals returns the number of calls to the user's F
+ *                       routine due to finite difference Jacobian
+ *                       evaluation.
+ * KINDlsGetLastFlag     returns the last error flag set by any of
+ *                       the KINDLS interface functions.
+ * KINDlsGetReturnFlagName returns the name of the constant
+ *                       associated with a KINDLS return flag
+ *
+ * The return value of KINDlsGet* is one of:
+ *    KINDLS_SUCCESS   if successful
+ *    KINDLS_MEM_NULL  if the KINSOL memory was NULL
+ *    KINDLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINDlsGetWorkSpace(void *kinmem, long int *lenrwB, long int *leniwB);
+SUNDIALS_EXPORT int KINDlsGetNumJacEvals(void *kinmem, long int *njevalsB);
+SUNDIALS_EXPORT int KINDlsGetNumFuncEvals(void *kinmem, long int *nfevalsB);
+SUNDIALS_EXPORT int KINDlsGetLastFlag(void *kinmem, long int *flag);
+SUNDIALS_EXPORT char *KINDlsGetReturnFlagName(long int flag);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_klu.h b/include/kinsol/kinsol_klu.h
new file mode 100644
index 0000000..d023d34
--- /dev/null
+++ b/include/kinsol/kinsol_klu.h
@@ -0,0 +1,111 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4558 $
+ * $Date: 2015-10-05 09:04:16 -0700 (Mon, 05 Oct 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the KINKLU linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINKLU_H
+#define _KINKLU_H
+
+#include "kinsol/kinsol_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINKLU
+ * -----------------------------------------------------------------
+ * A call to the KINKLU function links the main integrator      
+ * with the KINKLU linear solver module.                        
+ *                                                                
+ * kin_mem is the pointer to integrator memory returned by        
+ *     KINCreate.             
+ *
+ *                                                                
+ * KINKLU returns:                                              
+ *     KINSLU_SUCCESS   = 0  if successful                              
+ *     KINSLU_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     KINSLU_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The KLU linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, KINKLU will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int KINKLU(void *kin_mem, int n, int nnz, int sparsetype); 
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to KINKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is KINSLS_SUCCESS = 0, KINSLS_MEM_NULL = -1, 
+ * KINSLS_LMEM_NULL = -2, KINSLS_ILL_INPUT = -3, or KINSLS_MEM_FAIL = -4.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int KINKLUReInit(void *kin_mem, int n, int nnz, 
+				   int reinit_type); 
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * KINKLUSetOrdering sets the ordering used by KLU for reducing fill.
+ * Options are: 0 for AMD, 1 for COLAMD, and 2 for the natural ordering.
+ * The default used in KINSOL is 1 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int KINKLUSetOrdering(void *kin_mem, int ordering_choice); 
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_lapack.h b/include/kinsol/kinsol_lapack.h
new file mode 100644
index 0000000..03aa4af
--- /dev/null
+++ b/include/kinsol/kinsol_lapack.h
@@ -0,0 +1,89 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Header file for the KINSOL dense linear solver KINLAPACK.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINLAPACK_H
+#define _KINLAPACK_H
+
+#include <kinsol/kinsol_direct.h>
+#include <sundials/sundials_lapack.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINLapackDense
+ * -----------------------------------------------------------------
+ * A call to the KINLapackDense function links the main solver
+ * with the KINLAPACK linear solver using dense Jacobians.
+ *
+ * kinmem is the pointer to the solver memory returned by KINCreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * The return value of KINLapackDense is one of:
+ *    KINDLS_SUCCESS   if successful
+ *    KINDLS_MEM_NULL  if the KINSOL memory was NULL
+ *    KINDLS_MEM_FAIL  if there was a memory allocation failure
+ *    KINDLS_ILL_INPUT if a required vector operation is missing
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINLapackDense(void *kinmem, int N);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINLapackBand
+ * -----------------------------------------------------------------
+ * A call to the KINLapackBand function links the main solver
+ * with the KINLAPACK linear solver using banded Jacobians. 
+ *
+ * kinmem is the pointer to the solver memory returned by KINCreate.
+ *
+ * N is the size of the ODE system.
+ *
+ * mupper is the upper bandwidth of the band Jacobian approximation.
+ *
+ * mlower is the lower bandwidth of the band Jacobian approximation.
+ *
+ * The return value of KINLapackBand is one of:
+ *    KINDLS_SUCCESS   if successful
+ *    KINDLS_MEM_NULL  if the KINSOL memory was NULL
+ *    KINDLS_MEM_FAIL  if there was a memory allocation failure
+ *    KINDLS_ILL_INPUT if a required vector operation is missing
+ *                        or if a bandwidth has an illegal value.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINLapackBand(void *kinmem, int N, int mupper, int mlower);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_sparse.h b/include/kinsol/kinsol_sparse.h
new file mode 100644
index 0000000..92ca1a4
--- /dev/null
+++ b/include/kinsol/kinsol_sparse.h
@@ -0,0 +1,165 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4268 $
+ * $Date: 2014-11-14 16:37:06 -0800 (Fri, 14 Nov 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the Sparse linear solver module in KINSOL.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSOLSPARSE_H
+#define _KINSOLSPARSE_H
+
+#include "sundials/sundials_sparse.h"
+#include "sundials/sundials_nvector.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * K I N S O L S P A R S E    C O N S T A N T S
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * KINSLS return values 
+ * -----------------------------------------------------------------
+ */
+
+#define KINSLS_SUCCESS           0
+#define KINSLS_MEM_NULL         -1
+#define KINSLS_LMEM_NULL        -2
+#define KINSLS_ILL_INPUT        -3
+#define KINSLS_MEM_FAIL         -4
+#define KINSLS_JAC_NOSET        -5
+#define KINSLS_PACKAGE_FAIL     -6
+
+/* Additional last_flag values */
+
+#define KINSLS_JACFUNC_UNRECVR  -7
+#define KINSLS_JACFUNC_RECVR    -8
+
+/*
+ * -----------------------------------------------------------------
+ * FUNCTION TYPES
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : KINSlsSparseJacFn
+ * -----------------------------------------------------------------
+ *
+ * A sparse Jacobian approximation function jaceval must be of type 
+ * KINSlsSparseJacFn.
+ * Its parameters are:                     
+ *                                                                
+ * u   is the current value of the dependent variable vector     
+ *                                                                
+ * fval is the residual vector F(tt,yy,yp).                     
+ *                                                                
+ * JacMat is the compressed sparse column matrix (of type SlsMat)
+ *     to be loaded by an KINSlsSparseJacFn routine with an approximation
+ *     to the system Jacobian matrix
+ *            J = dF/dy
+ *     Note that JacMat is NOT preset to zero!
+ *     Matrix data is for the nonzero entries of the Jacobian are stored in
+ *     compressed column format.  Row indices of entries in 
+ *     column j are stored in J->data[colptrs[j]] 
+ *     through J->data[colptrs[j+i]-1]
+ *     and corresponding numerical values of the Jacobian are stored 
+ *     in the same entries of a.
+ * 
+ * user_data is a pointer to user Jacobian data 
+ *                                                                
+ * vtemp1 and vtemp2 are pointers to memory allocated for          
+ *     N_Vectors which can be used by an KINSparseJacFn routine 
+ *     as temporary storage or work space.                     
+ *                                                                
+ * A KINSlsSparseJacFn should return                                
+ *     0 if successful,                      
+ *     1 if successful but the user code indicates a new factorization
+ *       of the Jacobian is required
+ *     a positive int if a recoverable error occurred, or         
+ *     a negative int if a nonrecoverable error occurred.         
+ *
+ * -----------------------------------------------------------------
+ */
+  
+  
+typedef int (*KINSlsSparseJacFn)(N_Vector u, N_Vector fval, 
+		     SlsMat JacMat, void *user_data,
+		     N_Vector vtemp1, N_Vector vtemp2);
+
+/*
+ * =================================================================
+ *            E X P O R T E D    F U N C T I O N S 
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional inputs to the KINSPARSE linear solver
+ * -----------------------------------------------------------------
+ * KINSlsSetSparseJacFn specifies the Jacobian approximation
+ * routine to be used for a sparse direct linear solver.
+ *
+ * The return value is one of:
+ *    KINSLS_SUCCESS   if successful
+ *    KINSLS_MEM_NULL  if the IDA memory was NULL
+ *    KINSLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINSlsSetSparseJacFn(void *kin_mem_v, KINSlsSparseJacFn jac);
+
+/*
+ * -----------------------------------------------------------------
+ * Optional outputs from the KINSLS linear solver
+ * -----------------------------------------------------------------
+ *
+ * KINSlsGetNumJacEvals returns the number of calls made to the
+ *                      Jacobian evaluation routine jac.
+ * KINSlsGetLastFlag    returns the last error flag set by any of
+ *                      the KINSLS interface functions.
+ *
+ * The return value of KINSlsGet* is one of:
+ *    KINSLS_SUCCESS   if successful
+ *    KINSLS_MEM_NULL  if the KINSOL memory was NULL
+ *    KINSLS_LMEM_NULL if the linear solver memory was NULL
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINSlsGetNumJacEvals(void *kin_mem, long int *njevals);
+SUNDIALS_EXPORT int KINSlsGetLastFlag(void *kin_mem, long int *flag);
+
+/*
+ * -----------------------------------------------------------------
+ * The following function returns the name of the constant 
+ * associated with a IDASLS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT char *KINSlsGetReturnFlagName(long int flag);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_spbcgs.h b/include/kinsol/kinsol_spbcgs.h
new file mode 100644
index 0000000..07cd9ad
--- /dev/null
+++ b/include/kinsol/kinsol_spbcgs.h
@@ -0,0 +1,94 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the public header file for the KINSOL scaled preconditioned
+ * Bi-CGSTAB linear solver module, KINSPBCG.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSPBCG_H
+#define _KINSPBCG_H
+
+#include <kinsol/kinsol_spils.h>
+#include <sundials/sundials_spbcgs.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpbcg
+ * -----------------------------------------------------------------
+ * KINSpbcg links the main KINSOL solver module with the SPBCG
+ * linear solver module. The routine establishes the inter-module
+ * interface by setting the generic KINSOL pointers linit, lsetup,
+ * lsolve, and lfree to KINSpbcgInit, KINSpbcgSetup, KINSpbcgSolve,
+ * and KINSpbcgFree, respectively.
+ *
+ *  kinmem  pointer to an internal memory block allocated during a
+ *          prior call to KINCreate
+ *
+ *  maxl  maximum allowable dimension of Krylov subspace (passing
+ *        a value of 0 (zero) will cause the default value
+ *        KINSPILS_MAXL (predefined constant) to be used)
+ *
+ * If successful, KINSpbcg returns KINSPILS_SUCCESS. If an error
+ * occurs, then KINSpbcg returns an error code (negative integer
+ * value).
+ *
+ * -----------------------------------------------------------------
+ * KINSpbcg Return Values
+ * -----------------------------------------------------------------
+ * The possible return values for the KINSpbcg subroutine are the
+ * following:
+ *
+ * KINSPILS_SUCCESS : means the KINSPBCG linear solver module
+ *                    (implementation of the Bi-CGSTAB method) was
+ *                    successfully initialized - allocated system
+ *                    memory and set shared variables to default
+ *                    values [0]
+ *
+ * KINSPILS_MEM_NULL : means a NULL KINSOL memory block pointer
+ *                     was given (must call the KINCreate and
+ *                     KINMalloc memory allocation subroutines
+ *                     prior to calling KINSpbcg) [-1]
+ *
+ * KINSPILS_MEM_FAIL : means either insufficient system resources
+ *                     were available to allocate memory for the
+ *                     main KINSPBCG data structure (type
+ *                     KINSpbcgMemRec), or the SpbcgMalloc subroutine
+ *                     failed (unable to allocate enough system
+ *                     memory for vector storate and/or the main
+ *                     SPBCG data structure (type SpbcgMemRec)) [-4]
+ *
+ * KINSPILS_ILL_INPUT : means either a supplied parameter was invalid,
+ *                      or the NVECTOR implementation is NOT
+ *                      compatible [-3]
+ *
+ * The above constants are defined in kinsol_spils.h
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINSpbcg(void *kinmem, int maxl);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_spfgmr.h b/include/kinsol/kinsol_spfgmr.h
new file mode 100644
index 0000000..4639a4d
--- /dev/null
+++ b/include/kinsol/kinsol_spfgmr.h
@@ -0,0 +1,90 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL, based on kinsol_spgmr.h
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the KINSOL Scaled Preconditioned GMRES     
+ * linear solver module, KINSPFGMR.    
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSPFGMR_H
+#define _KINSPFGMR_H
+
+#include <kinsol/kinsol_spils.h>
+#include <sundials/sundials_spfgmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpfgmr
+ * -----------------------------------------------------------------
+ * KINSpfgmr links the main KINSOL solver module with the SPFGMR
+ * linear solver module. The routine establishes the inter-module
+ * interface by setting the generic KINSOL pointers linit, lsetup,
+ * lsolve, and lfree to KINSpfgmrInit, KINSpfgmrSetup, KINSpfgmrSolve,
+ * and KINSpfgmrFree, respectively.
+ *
+ *  kinmem  pointer to an internal memory block allocated during a
+ *          prior call to KINCreate
+ *
+ *  maxl  maximum allowable dimension of Krylov subspace (passing
+ *        a value of 0 (zero) will cause the default value
+ *        KINSPILS_MAXL (predefined constant) to be used)
+ *
+ * -----------------------------------------------------------------
+ * KINSpfgmr Return Values
+ * -----------------------------------------------------------------
+ *
+ * The possible return values for the KINSpfgmr subroutine are the
+ * following:
+ *
+ * KINSPILS_SUCCESS : means the KINSPFGMR linear solver module
+ *                    (implementation of the GMRES method) was
+ *                    successfully initialized - allocated system
+ *                    memory and set shared variables to default
+ *                    values [0]
+ *
+ * KINSPILS_MEM_NULL : means a NULL KINSOL memory block pointer was
+ *                     given (must call the KINCreate and KINMalloc
+ *                     memory allocation subroutines prior to
+ *                     calling KINSpfgmr) [-1]
+ *
+ * KINSPILS_MEM_FAIL : means either insufficient system resources
+ *                     were available to allocate memory for the main
+ *                     KINSPFGMR data structure (type KINSpfgmrMemRec),
+ *                     or the SpfgmrMalloc subroutine failed (unable
+ *                     to allocate enough system memory for vector
+ *                     storage and/or the main SPFGMR data structure
+ *                     (type SpfgmrMemRec)) [-4]
+ *
+ * KINSPILS_ILL_INPUT : means a supplied parameter was invalid
+ *                      (check error message) [-3]
+ *
+ * The above constants are defined in kinsol_spils.h
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINSpfgmr(void *kinmem, int maxl);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_spgmr.h b/include/kinsol/kinsol_spgmr.h
new file mode 100644
index 0000000..a6faf68
--- /dev/null
+++ b/include/kinsol/kinsol_spgmr.h
@@ -0,0 +1,91 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the KINSOL Scaled Preconditioned GMRES     
+ * linear solver module, KINSPGMR.    
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSPGMR_H
+#define _KINSPGMR_H
+
+#include <kinsol/kinsol_spils.h>
+#include <sundials/sundials_spgmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpgmr
+ * -----------------------------------------------------------------
+ * KINSpgmr links the main KINSOL solver module with the SPGMR
+ * linear solver module. The routine establishes the inter-module
+ * interface by setting the generic KINSOL pointers linit, lsetup,
+ * lsolve, and lfree to KINSpgmrInit, KINSpgmrSetup, KINSpgmrSolve,
+ * and KINSpgmrFree, respectively.
+ *
+ *  kinmem  pointer to an internal memory block allocated during a
+ *          prior call to KINCreate
+ *
+ *  maxl  maximum allowable dimension of Krylov subspace (passing
+ *        a value of 0 (zero) will cause the default value
+ *        KINSPILS_MAXL (predefined constant) to be used)
+ *
+ * -----------------------------------------------------------------
+ * KINSpgmr Return Values
+ * -----------------------------------------------------------------
+ *
+ * The possible return values for the KINSpgmr subroutine are the
+ * following:
+ *
+ * KINSPILS_SUCCESS : means the KINSPGMR linear solver module
+ *                    (implementation of the GMRES method) was
+ *                    successfully initialized - allocated system
+ *                    memory and set shared variables to default
+ *                    values [0]
+ *
+ * KINSPILS_MEM_NULL : means a NULL KINSOL memory block pointer was
+ *                     given (must call the KINCreate and KINMalloc
+ *                     memory allocation subroutines prior to
+ *                     calling KINSpgmr) [-1]
+ *
+ * KINSPILS_MEM_FAIL : means either insufficient system resources
+ *                     were available to allocate memory for the main
+ *                     KINSPGMR data structure (type KINSpgmrMemRec),
+ *                     or the SpgmrMalloc subroutine failed (unable
+ *                     to allocate enough system memory for vector
+ *                     storage and/or the main SPGMR data structure
+ *                     (type SpgmrMemRec)) [-4]
+ *
+ * KINSPILS_ILL_INPUT : means a supplied parameter was invalid
+ *                      (check error message) [-3]
+ *
+ * The above constants are defined in kinsol_spils.h
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINSpgmr(void *kinmem, int maxl);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_spils.h b/include/kinsol/kinsol_spils.h
new file mode 100644
index 0000000..2597f48
--- /dev/null
+++ b/include/kinsol/kinsol_spils.h
@@ -0,0 +1,323 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott Cohen, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the common header file for the Scaled Preconditioned
+ * Iterative Linear Solvers in KINSOL.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSPILS_H
+#define _KINSPILS_H
+
+#include <sundials/sundials_iterative.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * KINSPILS return values
+ * -----------------------------------------------------------------
+ */
+
+#define KINSPILS_SUCCESS    0
+
+#define KINSPILS_MEM_NULL  -1
+#define KINSPILS_LMEM_NULL -2
+#define KINSPILS_ILL_INPUT -3
+#define KINSPILS_MEM_FAIL  -4
+#define KINSPILS_PMEM_NULL -5
+
+/*
+ * -----------------------------------------------------------------
+ * KINSPILS solver constant
+ * -----------------------------------------------------------------
+ * KINSPILS_MAXL : default maximum dimension of Krylov subspace
+ * -----------------------------------------------------------------
+ */
+
+#define KINSPILS_MAXL 10
+
+/*
+ * -----------------------------------------------------------------
+ * Type : KINSpilsPrecSetupFn
+ * -----------------------------------------------------------------
+ * The user-supplied preconditioner setup subroutine should
+ * compute the right-preconditioner matrix P (stored in memory
+ * block referenced by P_data pointer) used to form the
+ * scaled preconditioned linear system:
+ *
+ *  (Df*J(uu)*(P^-1)*(Du^-1)) * (Du*P*x) = Df*(-F(uu))
+ *
+ * where Du and Df denote the diagonal scaling matrices whose
+ * diagonal elements are stored in the vectors uscale and
+ * fscale, repsectively.
+ *
+ * The preconditioner setup routine (referenced by iterative linear
+ * solver modules via pset (type KINSpilsPrecSetupFn)) will not be
+ * called prior to every call made to the psolve function, but will
+ * instead be called only as often as necessary to achieve convergence
+ * of the Newton iteration.
+ *
+ * Note: If the psolve routine requires no preparation, then a
+ * preconditioner setup function need not be given.
+ *
+ *  uu  current iterate (unscaled) [input]
+ *
+ *  uscale  vector (type N_Vector) containing diagonal elements
+ *          of scaling matrix for vector uu [input]
+ *
+ *  fval  vector (type N_Vector) containing result of nonliear
+ *        system function evaluated at current iterate:
+ *        fval = F(uu) [input]
+ *
+ *  fscale  vector (type N_Vector) containing diagonal elements
+ *          of scaling matrix for fval [input]
+ *
+ *  user_data  pointer to user-allocated data memory block
+ *
+ *  vtemp1/vtemp2  available scratch vectors (temporary storage)
+ *
+ * If successful, the function should return 0 (zero). If an error
+ * occurs, then the routine should return a non-zero integer value.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*KINSpilsPrecSetupFn)(N_Vector uu, N_Vector uscale,
+                                   N_Vector fval, N_Vector fscale,
+                                   void *user_data, N_Vector vtemp1,
+				   N_Vector vtemp2);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : KINSpilsPrecSolveFn
+ * -----------------------------------------------------------------
+ * The user-supplied preconditioner solve subroutine (referenced
+ * by iterative linear solver modules via psolve (type
+ * KINSpilsPrecSolveFn)) should solve a (scaled) preconditioned
+ * linear system of the generic form P*z = r, where P denotes the
+ * right-preconditioner matrix computed by the pset routine.
+ *
+ *  uu  current iterate (unscaled) [input]
+ *
+ *  uscale  vector (type N_Vector) containing diagonal elements
+ *          of scaling matrix for vector uu [input]
+ *
+ *  fval  vector (type N_Vector) containing result of nonliear
+ *        system function evaluated at current iterate:
+ *        fval = F(uu) [input]
+ *
+ *  fscale  vector (type N_Vector) containing diagonal elements
+ *          of scaling matrix for fval [input]
+ *
+ *  vv  vector initially set to the right-hand side vector r, but
+ *      which upon return contains a solution of the linear system
+ *      P*z = r [input/output]
+ *
+ *  user_data  pointer to user-allocated data memory block
+ *
+ *  vtemp  available scratch vector (volatile storage)
+ *
+ * If successful, the function should return 0 (zero). If a
+ * recoverable error occurs, then the subroutine should return
+ * a positive integer value (in this case, KINSOL attempts to
+ * correct by calling the preconditioner setup function if the 
+ * preconditioner information is out of date). If an unrecoverable 
+ * error occurs, then the preconditioner solve function should return 
+ * a negative integer value.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*KINSpilsPrecSolveFn)(N_Vector uu, N_Vector uscale, 
+                                   N_Vector fval, N_Vector fscale, 
+                                   N_Vector vv, void *user_data,
+                                   N_Vector vtemp);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : KINSpilsJacTimesVecFn
+ * -----------------------------------------------------------------
+ * The (optional) user-supplied matrix-vector product subroutine
+ * (referenced internally via jtimes (type KINSpilsJacTimesVecFn))
+ * is used to compute Jv = J(uu)*v (system Jacobian applied to a
+ * given vector). If a user-defined routine is not given, then the
+ * private routine is used.
+ *
+ *  v  unscaled variant of vector to be multiplied by J(uu) [input]
+ *
+ *  Jv  vector containing result of matrix-vector product J(uu)*v
+ *      [output]
+ *
+ *  uu  current iterate (unscaled) [input]
+ *
+ *  new_uu  flag (reset by user) indicating if the iterate uu
+ *          has been updated in the interim - Jacobian needs
+ *          to be updated/reevaluated, if appropriate, unless
+ *          new_uu = FALSE [input/output]
+ *
+ *  user_data  pointer to user data, the same as the user_data
+ *          parameter passed to the KINSetUserData function.
+ *
+ * If successful, the function should return 0 (zero). If an error
+ * occurs, then the routine should return a non-zero integer value.
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*KINSpilsJacTimesVecFn)(N_Vector v, N_Vector Jv,
+                                     N_Vector uu, booleantype *new_uu, 
+                                     void *J_data);
+
+
+
+
+
+/*
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to set optional inputs:
+ *
+ *       Function Name       |   Optional Input  [Default Value]
+ *                           |
+ * -----------------------------------------------------------------
+ *                           |
+ * KINSpilsSetMaxRestarts    | maximum number of times the SPGMR
+ *                           | (scaled preconditioned GMRES) linear
+ *                           | solver can be restarted
+ *                           | [0]
+ *                           |
+ * KINSpilsSetPreconditioner | used to set the following:
+ *                           |   (a) name of user-supplied routine
+ *                           |       used to compute a preconditioner
+ *                           |       matrix for the given linear
+ *                           |       system (pset)
+ *                           |       [NULL]
+ *                           |   (b) name of user-supplied routine
+ *                           |       used to apply preconditioner to
+ *                           |       linear system (psolve)
+ *                           |       [NULL]
+ *                           |
+ * KINSpilsSetJacTimesVecFn  | used to set the following the name
+ *                           | of user-supplied subroutine used to 
+ *                           | compute the matrix-vector product J(u)*v,
+ *                           | where J denotes the system Jacobian.
+ *                           | [KINSpilsDQJtimes]
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINSpilsSetMaxRestarts(void *kinmem, int maxrs);
+SUNDIALS_EXPORT int KINSpilsSetPreconditioner(void *kinmem,
+					      KINSpilsPrecSetupFn pset,
+					      KINSpilsPrecSolveFn psolve);
+SUNDIALS_EXPORT int KINSpilsSetJacTimesVecFn(void *kinmem,
+                                             KINSpilsJacTimesVecFn jtv);
+
+/*
+ * -----------------------------------------------------------------
+ * KINSpilsSet* Return Values
+ * -----------------------------------------------------------------
+ * The possible return values for the KINSpilsSet* subroutines
+ * are the following:
+ *
+ * KINSPILS_SUCCESS : means the associated parameter was successfully
+ *                    set [0]
+ *
+ * KINSPILS_ILL_INPUT : means the supplied parameter was invalid
+ *                      (check error message) [-3]
+ *
+ * KINSPILS_MEM_NULL : means a NULL KINSOL memory block pointer
+ *                     was given [-1]
+ *
+ * KINSPILS_LMEM_NULL : means system memory has not yet been
+ *                      allocated for the linear solver 
+ *                      (lmem == NULL) [-2]
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Optional Output Extraction Functions
+ * -----------------------------------------------------------------
+ * The following functions can be called to get optional outputs
+ * and statistical information related to the KINSPILS linear
+ * solvers:
+ *
+ *        Function Name       |      Returned Value
+ *                            |
+ * -----------------------------------------------------------------
+ *                            |
+ * KINSpilsGetWorkSpace       | returns both integer workspace size
+ *                            | (total number of long int-sized blocks
+ *                            | of memory allocated  for
+ *                            | vector storage), and real workspace
+ *                            | size (total number of realtype-sized
+ *                            | blocks of memory allocated
+ *                            | for vector storage)
+ *                            |
+ * KINSpilsGetNumPrecEvals    | total number of preconditioner
+ *                            | evaluations (number of calls made
+ *                            | to the user-defined pset routine)
+ *                            |
+ * KINSpilsGetNumPrecSolves   | total number of times preconditioner
+ *                            | was applied to linear system (number
+ *                            | of calls made to the user-supplied
+ *                            | psolve function)
+ *                            |
+ * KINSpilsGetNumLinIters     | total number of linear iterations
+ *                            | performed
+ *                            |
+ * KINSpilsGetNumConvFails    | total number of linear convergence
+ *                            | failures
+ *                            |
+ * KINSpilsGetNumJtimesEvals  | total number of times the matrix-
+ *                            | vector product J(u)*v was computed
+ *                            | (number of calls made to the jtimes
+ *                            | subroutine)
+ *                            |
+ * KINSpilsGetNumFuncEvals    | total number of evaluations of the
+ *                            | system function F(u) (number of
+ *                            | calls made to the user-supplied
+ *                            | func routine by the linear solver
+ *                            | module member subroutines)
+ *                            |
+ * KINSpilsGetLastFlag        | returns the last flag returned by
+ *                            | the linear solver
+ *                            |
+ * KINSpilsGetReturnFlagName  | returns the name of the constant
+ *                            | associated with a KINSPILS return flag
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINSpilsGetWorkSpace(void *kinmem, long int *lenrwSG, long int *leniwSG);
+SUNDIALS_EXPORT int KINSpilsGetNumPrecEvals(void *kinmem, long int *npevals);
+SUNDIALS_EXPORT int KINSpilsGetNumPrecSolves(void *kinmem, long int *npsolves);
+SUNDIALS_EXPORT int KINSpilsGetNumLinIters(void *kinmem, long int *nliters);
+SUNDIALS_EXPORT int KINSpilsGetNumConvFails(void *kinmem, long int *nlcfails);
+SUNDIALS_EXPORT int KINSpilsGetNumJtimesEvals(void *kinmem, long int *njvevals);
+SUNDIALS_EXPORT int KINSpilsGetNumFuncEvals(void *kinmem, long int *nfevalsS); 
+SUNDIALS_EXPORT int KINSpilsGetLastFlag(void *kinmem, long int *flag);
+SUNDIALS_EXPORT char *KINSpilsGetReturnFlagName(long int flag);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_sptfqmr.h b/include/kinsol/kinsol_sptfqmr.h
new file mode 100644
index 0000000..cda1d89
--- /dev/null
+++ b/include/kinsol/kinsol_sptfqmr.h
@@ -0,0 +1,95 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the public header file for the KINSOL scaled preconditioned
+ * TFQMR linear solver module, KINSPTFQMR.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSPTFQMR_H
+#define _KINSPTFQMR_H
+
+#include <kinsol/kinsol_spils.h>
+#include <sundials/sundials_sptfqmr.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSptfqmr
+ * -----------------------------------------------------------------
+ * KINSptfqmr links the main KINSOL solver module with the SPTFQMR
+ * linear solver module. The routine establishes the inter-module
+ * interface by setting the generic KINSOL pointers linit, lsetup,
+ * lsolve, and lfree to KINSptfqmrInit, KINSptfqmrSetup, KINSptfqmrSolve,
+ * and KINSptfqmrFree, respectively.
+ *
+ *  kinmem  pointer to an internal memory block allocated during a
+ *          prior call to KINCreate
+ *
+ *  maxl  maximum allowable dimension of Krylov subspace (passing
+ *        a value of 0 (zero) will cause the default value
+ *        KINSPTFQMR_MAXL (predefined constant) to be used)
+ *
+ * If successful, KINSptfqmr returns KINSPTFQMR_SUCCESS. If an error
+ * occurs, then KINSptfqmr returns an error code (negative integer
+ * value).
+ *
+ * -----------------------------------------------------------------
+ * KINSptfqmr Return Values
+ * -----------------------------------------------------------------
+ * The possible return values for the KINSptfqmr subroutine are the
+ * following:
+ *
+ * KINSPTFQMR_SUCCESS : means the KINSPTFQMR linear solver module
+ *                      (implementation of the TFQMR method) was
+ *                      successfully initialized - allocated system
+ *                      memory and set shared variables to default
+ *                      values [0]
+ *
+ * KINSPTFQMR_MEM_NULL : means a NULL KINSOL memory block pointer
+ *                       was given (must call the KINCreate and
+ *                       KINMalloc memory allocation subroutines
+ *                       prior to calling KINSptfqmr) [-1]
+ *
+ * KINSPTFQMR_MEM_FAIL : means either insufficient system resources
+ *                       were available to allocate memory for the
+ *                       main KINSPTFQMR data structure (type
+ *                       KINSptfqmrMemRec), or the SptfqmrMalloc
+ *                       subroutine failed (unable to allocate enough
+ *                       system memory for vector storate and/or the
+ *                       main SPTFQMR data structure
+ *                       (type SptfqmrMemRec)) [-4]
+ *
+ * KINSPTFQMR_ILL_INPUT : means either a supplied parameter was invalid,
+ *                        or the NVECTOR implementation is NOT
+ *                        compatible [-3]
+ *
+ * The above constants are defined in kinsol_spils.h
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int KINSptfqmr(void *kinmem, int maxl);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/kinsol/kinsol_superlumt.h b/include/kinsol/kinsol_superlumt.h
new file mode 100644
index 0000000..89cb8e9
--- /dev/null
+++ b/include/kinsol/kinsol_superlumt.h
@@ -0,0 +1,87 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4181 $
+ * $Date: 2014-07-23 12:43:06 -0700 (Wed, 23 Jul 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the KINSuperLUMT linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSUPERLUMT_H
+#define _KINSUPERLUMT_H
+
+#include "kinsol/kinsol_sparse.h"
+#include "sundials/sundials_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSuperLUMT
+ * -----------------------------------------------------------------
+ * A call to the KINSuperLUMT function links the main integrator      
+ * with the KINSuperLUMT linear solver module.                        
+ *                                                                
+ * kin_mem is the pointer to integrator memory returned by        
+ *     KINCreate.       
+ *
+ * num_threads is the number of threads that SuperLUMT should invoke         
+ *
+ *                                                                
+ * KINSuperLUMT returns:                                              
+ *     KINSLU_SUCCESS   = 0  if successful                              
+ *     KINSLU_LMEM_FAIL = -1 if there was a memory allocation failure   
+ *     KINSLU_ILL_INPUT = -2 if NVECTOR found incompatible           
+ *                                                                
+ * NOTE: The SuperLUMT linear solver assumes a serial implementation  
+ *       of the NVECTOR package. Therefore, KINSuperLUMT will first
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the functions N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int KINSuperLUMT(void *kin_mem, int num_threads,
+				   int n, int nnz); 
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * KINSuperLUMTSetOrdering sets the ordering used by SuperLUMT for 
+ * reducing fill.
+ * Options are: 
+ * 0 for natural ordering
+ * 1 for minimal degree ordering on A'*A
+ * 2 for minimal degree ordering on A'+A
+ * 3 for approximate minimal degree ordering for unsymmetric matrices
+ * The default used in SUNDIALS is 3 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+  SUNDIALS_EXPORT int KINSuperLUMTSetOrdering(void *kin_mem, 
+					      int ordering_choice); 
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/nvector/nvector_openmp.h b/include/nvector/nvector_openmp.h
new file mode 100644
index 0000000..d9cf4c8
--- /dev/null
+++ b/include/nvector/nvector_openmp.h
@@ -0,0 +1,289 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4869 $
+ * $Date: 2016-08-19 10:34:20 -0700 (Fri, 19 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): David J. Gardner and Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * Acknowledgements: This NVECTOR module is based on the NVECTOR 
+ *                   Serial module by Scott D. Cohen, Alan C. 
+ *                   Hindmarsh, Radu Serban, and Aaron Collier 
+ *                   @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the OpenMP implementation of the
+ * NVECTOR module.
+ *
+ * Part I contains declarations specific to the OpenMP
+ * implementation of the supplied NVECTOR module.
+ *
+ * Part II defines accessor macros that allow the user to
+ * efficiently use the type N_Vector without making explicit
+ * references to the underlying data structure.
+ *
+ * Part III contains the prototype for the constructor N_VNew_OpenMP
+ * as well as implementation-specific prototypes for various useful
+ * vector operations.
+ *
+ * Notes:
+ *
+ *   - The definition of the generic N_Vector structure can be found
+ *     in the header file sundials_nvector.h.
+ *
+ *   - The definition of the type 'realtype' can be found in the
+ *     header file sundials_types.h, and it may be changed (at the 
+ *     configuration stage) according to the user's needs. 
+ *     The sundials_types.h file also contains the definition
+ *     for the type 'booleantype'.
+ *
+ *   - N_Vector arguments to arithmetic vector operations need not
+ *     be distinct. For example, the following call:
+ *
+ *       N_VLinearSum_OpenMP(a,x,b,y,y);
+ *
+ *     (which stores the result of the operation a*x+b*y in y)
+ *     is legal.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _NVECTOR_OPENMP_H
+#define _NVECTOR_OPENMP_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * PART I: OPENMP implementation of N_Vector
+ * -----------------------------------------------------------------
+ */
+
+/* OpenMP implementation of the N_Vector 'content' structure
+   contains the length of the vector, a pointer to an array
+   of 'realtype' components, and a flag indicating ownership of
+   the data */
+
+struct _N_VectorContent_OpenMP {
+  long int length;
+  booleantype own_data;
+  realtype *data;
+  int num_threads;
+};
+
+typedef struct _N_VectorContent_OpenMP *N_VectorContent_OpenMP;
+
+/*
+ * -----------------------------------------------------------------
+ * PART II: macros NV_CONTENT_OMP, NV_DATA_OMP, NV_OWN_DATA_OMP,
+ *          NV_LENGTH_OMP, and NV_Ith_OMP
+ * -----------------------------------------------------------------
+ * In the descriptions below, the following user declarations
+ * are assumed:
+ *
+ * N_Vector v;
+ * long int i;
+ *
+ * (1) NV_CONTENT_OMP
+ *
+ *     This routines gives access to the contents of the OpenMP
+ *     vector N_Vector.
+ *
+ *     The assignment v_cont = NV_CONTENT_OMP(v) sets v_cont to be
+ *     a pointer to the OpenMP N_Vector content structure.
+ *
+ * (2) NV_DATA_OMP NV_OWN_DATA_OMP and NV_LENGTH_OMP
+ *
+ *     These routines give access to the individual parts of
+ *     the content structure of a OpenMP N_Vector.
+ *
+ *     The assignment v_data = NV_DATA_OMP(v) sets v_data to be
+ *     a pointer to the first component of v. The assignment
+ *     NV_DATA_OMP(v) = data_V sets the component array of v to
+ *     be data_v by storing the pointer data_v.
+ *
+ *     The assignment v_len = NV_LENGTH_OMP(v) sets v_len to be
+ *     the length of v. The call NV_LENGTH_OMP(v) = len_v sets
+ *     the length of v to be len_v.
+ *
+ * (3) NV_Ith_OMP
+ *
+ *     In the following description, the components of an
+ *     N_Vector are numbered 0..n-1, where n is the length of v.
+ *
+ *     The assignment r = NV_Ith_OMP(v,i) sets r to be the value of
+ *     the ith component of v. The assignment NV_Ith_OMP(v,i) = r
+ *     sets the value of the ith component of v to be r.
+ *
+ * Note: When looping over the components of an N_Vector v, it is
+ * more efficient to first obtain the component array via
+ * v_data = NV_DATA_OMP(v) and then access v_data[i] within the
+ * loop than it is to use NV_Ith_OMP(v,i) within the loop.
+ * -----------------------------------------------------------------
+ */
+
+#define NV_CONTENT_OMP(v)  ( (N_VectorContent_OpenMP)(v->content) )
+
+#define NV_LENGTH_OMP(v)   ( NV_CONTENT_OMP(v)->length )
+
+#define NV_NUM_THREADS_OMP(v)   ( NV_CONTENT_OMP(v)->num_threads )
+
+#define NV_OWN_DATA_OMP(v) ( NV_CONTENT_OMP(v)->own_data )
+
+#define NV_DATA_OMP(v)     ( NV_CONTENT_OMP(v)->data )
+
+#define NV_Ith_OMP(v,i)    ( NV_DATA_OMP(v)[i] )
+
+/*
+ * -----------------------------------------------------------------
+ * PART III: functions exported by nvector_OpenMP
+ * 
+ * CONSTRUCTORS:
+ *    N_VNew_OpenMP
+ *    N_VNewEmpty_OpenMP
+ *    N_VMake_OpenMP
+ *    N_VCloneVectorArray_OpenMP
+ *    N_VCloneVectorArrayEmpty_OpenMP
+ * DESTRUCTORS:
+ *    N_VDestroy_OpenMP
+ *    N_VDestroyVectorArray_OpenMP
+ * OTHER:
+ *    N_VGetLength_OpenMP
+ *    N_VPrint_OpenMP
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VNew_OpenMP
+ * -----------------------------------------------------------------
+ * This function creates and allocates memory for a OpenMP vector.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VNew_OpenMP(long int vec_length, int num_threads);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VNewEmpty_OpenMP
+ * -----------------------------------------------------------------
+ * This function creates a new OpenMP N_Vector with an empty (NULL)
+ * data array.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VNewEmpty_OpenMP(long int vec_length, int num_threads);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VMake_OpenMP
+ * -----------------------------------------------------------------
+ * This function creates and allocates memory for a OpenMP vector
+ * with a user-supplied data array.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VMake_OpenMP(long int vec_length, realtype *v_data, int num_threads);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArray_OpenMP
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' OPENMP vectors by
+ * cloning a given vector w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArray_OpenMP(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArrayEmpty_OpenMP
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' OPENMP vectors each
+ * with an empty (NULL) data array by cloning w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArrayEmpty_OpenMP(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VDestroyVectorArray_OpenMP
+ * -----------------------------------------------------------------
+ * This function frees an array of OPENMP vectors created with 
+ * N_VCloneVectorArray_OpenMP or N_VCloneVectorArrayEmpty_OpenMP.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VDestroyVectorArray_OpenMP(N_Vector *vs, int count);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VGetLength_OpenMP
+ * -----------------------------------------------------------------
+ * This function returns number of vector elements.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT long int N_VGetLength_OpenMP(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VPrint_OpenMP
+ * -----------------------------------------------------------------
+ * This function prints the content of a OpenMP vector to stdout.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VPrint_OpenMP(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * OpenMP implementations of various useful vector operations
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector_ID N_VGetVectorID_OpenMP(N_Vector v);
+SUNDIALS_EXPORT N_Vector N_VCloneEmpty_OpenMP(N_Vector w);
+SUNDIALS_EXPORT N_Vector N_VClone_OpenMP(N_Vector w);
+SUNDIALS_EXPORT void N_VDestroy_OpenMP(N_Vector v);
+SUNDIALS_EXPORT void N_VSpace_OpenMP(N_Vector v, long int *lrw, long int *liw);
+SUNDIALS_EXPORT realtype *N_VGetArrayPointer_OpenMP(N_Vector v);
+SUNDIALS_EXPORT void N_VSetArrayPointer_OpenMP(realtype *v_data, N_Vector v);
+SUNDIALS_EXPORT void N_VLinearSum_OpenMP(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VConst_OpenMP(realtype c, N_Vector z);
+SUNDIALS_EXPORT void N_VProd_OpenMP(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VDiv_OpenMP(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VScale_OpenMP(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAbs_OpenMP(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VInv_OpenMP(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAddConst_OpenMP(N_Vector x, realtype b, N_Vector z);
+SUNDIALS_EXPORT realtype N_VDotProd_OpenMP(N_Vector x, N_Vector y);
+SUNDIALS_EXPORT realtype N_VMaxNorm_OpenMP(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWrmsNorm_OpenMP(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VWrmsNormMask_OpenMP(N_Vector x, N_Vector w, N_Vector id);
+SUNDIALS_EXPORT realtype N_VMin_OpenMP(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWL2Norm_OpenMP(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VL1Norm_OpenMP(N_Vector x);
+SUNDIALS_EXPORT void N_VCompare_OpenMP(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VInvTest_OpenMP(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VConstrMask_OpenMP(N_Vector c, N_Vector x, N_Vector m);
+SUNDIALS_EXPORT realtype N_VMinQuotient_OpenMP(N_Vector num, N_Vector denom);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/nvector/nvector_parallel.h b/include/nvector/nvector_parallel.h
new file mode 100644
index 0000000..e725451
--- /dev/null
+++ b/include/nvector/nvector_parallel.h
@@ -0,0 +1,343 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4867 $
+ * $Date: 2016-08-19 10:05:14 -0700 (Fri, 19 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, Radu Serban,
+ *                and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the main header file for the MPI-enabled implementation
+ * of the NVECTOR module.
+ *
+ * Part I contains declarations specific to the parallel
+ * implementation of the supplied NVECTOR module.
+ *
+ * Part II defines accessor macros that allow the user to efficiently
+ * use the type N_Vector without making explicit references to the
+ * underlying data structure.
+ *
+ * Part III contains the prototype for the constructor
+ * N_VNew_Parallel as well as implementation-specific prototypes
+ * for various useful vector operations.
+ *
+ * Notes:
+ *
+ *   - The definition of the generic N_Vector structure can be
+ *     found in the header file sundials_nvector.h.
+ *
+ *   - The definition of the type realtype can be found in the
+ *     header file sundials_types.h, and it may be changed (at the 
+ *     configuration stage) according to the user's needs. 
+ *     The sundials_types.h file also contains the definition
+ *     for the type booleantype.
+ *
+ *   - N_Vector arguments to arithmetic vector operations need not
+ *     be distinct. For example, the following call:
+ *
+ *        N_VLinearSum_Parallel(a,x,b,y,y);
+ *
+ *     (which stores the result of the operation a*x+b*y in y)
+ *     is legal.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _NVECTOR_PARALLEL_H
+#define _NVECTOR_PARALLEL_H
+
+#include <mpi.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*
+ * -----------------------------------------------------------------
+ * PART I: PARALLEL implementation of N_Vector               
+ * -----------------------------------------------------------------
+ */
+
+/* define MPI data types */
+
+#if defined(SUNDIALS_SINGLE_PRECISION)
+
+#define PVEC_REAL_MPI_TYPE MPI_FLOAT
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define PVEC_REAL_MPI_TYPE MPI_DOUBLE
+
+#elif defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define PVEC_REAL_MPI_TYPE MPI_LONG_DOUBLE
+
+#endif
+
+#define PVEC_INTEGER_MPI_TYPE MPI_LONG
+
+/* parallel implementation of the N_Vector 'content' structure
+   contains the global and local lengths of the vector, a pointer
+   to an array of 'realtype components', the MPI communicator,
+   and a flag indicating ownership of the data */
+
+struct _N_VectorContent_Parallel {
+  long int local_length;   /* local vector length         */
+  long int global_length;  /* global vector length        */
+  booleantype own_data;    /* ownership of data           */
+  realtype *data;          /* local data array            */
+  MPI_Comm comm;           /* pointer to MPI communicator */
+};
+
+typedef struct _N_VectorContent_Parallel *N_VectorContent_Parallel;
+
+/*
+ * -----------------------------------------------------------------
+ * PART II: macros NV_CONTENT_P, NV_DATA_P, NV_OWN_DATA_P,
+ *          NV_LOCLENGTH_P, NV_GLOBLENGTH_P,NV_COMM_P, and NV_Ith_P
+ * -----------------------------------------------------------------
+ * In the descriptions below, the following user declarations
+ * are assumed:
+ *
+ * N_Vector v;
+ * long int v_len, s_len, i;
+ *
+ * (1) NV_CONTENT_P
+ *
+ *     This routines gives access to the contents of the parallel
+ *     vector N_Vector.
+ *
+ *     The assignment v_cont = NV_CONTENT_P(v) sets v_cont to be
+ *     a pointer to the parallel N_Vector content structure.
+ *
+ * (2) NV_DATA_P, NV_OWN_DATA_P, NV_LOCLENGTH_P, NV_GLOBLENGTH_P,
+ *     and NV_COMM_P
+ *
+ *     These routines give access to the individual parts of
+ *     the content structure of a parallel N_Vector.
+ *
+ *     The assignment v_data = NV_DATA_P(v) sets v_data to be
+ *     a pointer to the first component of the local data for
+ *     the vector v. The assignment NV_DATA_P(v) = data_v sets
+ *     the component array of v to be data_V by storing the
+ *     pointer data_v.
+ *
+ *     The assignment v_llen = NV_LOCLENGTH_P(v) sets v_llen to
+ *     be the length of the local part of the vector v. The call
+ *     NV_LOCLENGTH_P(v) = llen_v sets the local length
+ *     of v to be llen_v.
+ *
+ *     The assignment v_glen = NV_GLOBLENGTH_P(v) sets v_glen to
+ *     be the global length of the vector v. The call
+ *     NV_GLOBLENGTH_P(v) = glen_v sets the global length of v to
+ *     be glen_v.
+ *
+ *     The assignment v_comm = NV_COMM_P(v) sets v_comm to be the
+ *     MPI communicator of the vector v. The assignment
+ *     NV_COMM_C(v) = comm_v sets the MPI communicator of v to be
+ *     comm_v.
+ *
+ * (3) NV_Ith_P
+ *
+ *     In the following description, the components of the
+ *     local part of an N_Vector are numbered 0..n-1, where n
+ *     is the local length of (the local part of) v.
+ *
+ *     The assignment r = NV_Ith_P(v,i) sets r to be the value
+ *     of the ith component of the local part of the vector v.
+ *     The assignment NV_Ith_P(v,i) = r sets the value of the
+ *     ith local component of v to be r.
+ *
+ * Note: When looping over the components of an N_Vector v, it is
+ * more efficient to first obtain the component array via
+ * v_data = NV_DATA_P(v) and then access v_data[i] within the
+ * loop than it is to use NV_Ith_P(v,i) within the loop.
+ * -----------------------------------------------------------------
+ */
+
+#define NV_CONTENT_P(v)    ( (N_VectorContent_Parallel)(v->content) )
+
+#define NV_LOCLENGTH_P(v)  ( NV_CONTENT_P(v)->local_length )
+
+#define NV_GLOBLENGTH_P(v) ( NV_CONTENT_P(v)->global_length )
+
+#define NV_OWN_DATA_P(v)   ( NV_CONTENT_P(v)->own_data )
+
+#define NV_DATA_P(v)       ( NV_CONTENT_P(v)->data )
+
+#define NV_COMM_P(v)       ( NV_CONTENT_P(v)->comm )
+
+#define NV_Ith_P(v,i)      ( NV_DATA_P(v)[i] )
+
+/*
+ * -----------------------------------------------------------------
+ * PART III: functions exported by nvector_parallel
+ * 
+ * CONSTRUCTORS:
+ *    N_VNew_Parallel
+ *    N_VNewEmpty_Parallel
+ *    N_VMake_Parallel
+ *    N_VCloneVectorArray_Parallel
+ *    N_VCloneVectorArrayEmpty_Parallel
+ * DESTRUCTORS:
+ *    N_VDestroy_Parallel
+ *    N_VDestroyVectorArray_Parallel
+ * OTHER:
+ *    N_VGetLength_Parallel
+ *    N_VGetLocalLength_Parallel
+ *    N_VPrint_Parallel
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VNew_Parallel
+ * -----------------------------------------------------------------
+ * This function creates and allocates memory for a parallel vector.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VNew_Parallel(MPI_Comm comm, 
+                                         long int local_length,
+                                         long int global_length);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VNewEmpty_Parallel
+ * -----------------------------------------------------------------
+ * This function creates a new parallel N_Vector with an empty
+ * (NULL) data array.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VNewEmpty_Parallel(MPI_Comm comm, 
+                                              long int local_length,
+                                              long int global_length);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VMake_Parallel
+ * -----------------------------------------------------------------
+ * This function creates and allocates memory for a parallel vector
+ * with a user-supplied data array.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VMake_Parallel(MPI_Comm comm, 
+                                          long int local_length,
+                                          long int global_length,
+                                          realtype *v_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArray_Parallel
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' PARALLEL vectors by
+ * cloning a given vector w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArray_Parallel(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArrayEmpty_Parallel
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' PARALLEL vectors each 
+ * with an empty (NULL) data array by cloning w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArrayEmpty_Parallel(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VDestroyVectorArray_Parallel
+ * -----------------------------------------------------------------
+ * This function frees an array of N_Vector created with 
+ * N_VCloneVectorArray_Parallel or N_VCloneVectorArrayEmpty_Parallel.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VDestroyVectorArray_Parallel(N_Vector *vs, int count);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VGetLength_Parallel
+ * -----------------------------------------------------------------
+ * This function returns number of vector elements (global vector 
+ * length). It returns locally stored integer, and is therefore 
+ * a local call.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT long int N_VGetLength_Parallel(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VGetLocalLength_Parallel
+ * -----------------------------------------------------------------
+ * This function returns local vector length.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT long int N_VGetLocalLength_Parallel(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VPrint_Parallel
+ * -----------------------------------------------------------------
+ * This function prints the content of a parallel vector to stdout.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VPrint_Parallel(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * parallel implementations of the vector operations
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector_ID N_VGetVectorID_Parallel(N_Vector v);
+SUNDIALS_EXPORT N_Vector N_VCloneEmpty_Parallel(N_Vector w);
+SUNDIALS_EXPORT N_Vector N_VClone_Parallel(N_Vector w);
+SUNDIALS_EXPORT void N_VDestroy_Parallel(N_Vector v);
+SUNDIALS_EXPORT void N_VSpace_Parallel(N_Vector v, long int *lrw, long int *liw);
+SUNDIALS_EXPORT realtype *N_VGetArrayPointer_Parallel(N_Vector v);
+SUNDIALS_EXPORT void N_VSetArrayPointer_Parallel(realtype *v_data, N_Vector v);
+SUNDIALS_EXPORT void N_VLinearSum_Parallel(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VConst_Parallel(realtype c, N_Vector z);
+SUNDIALS_EXPORT void N_VProd_Parallel(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VDiv_Parallel(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VScale_Parallel(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAbs_Parallel(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VInv_Parallel(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAddConst_Parallel(N_Vector x, realtype b, N_Vector z);
+SUNDIALS_EXPORT realtype N_VDotProd_Parallel(N_Vector x, N_Vector y);
+SUNDIALS_EXPORT realtype N_VMaxNorm_Parallel(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWrmsNorm_Parallel(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VWrmsNormMask_Parallel(N_Vector x, N_Vector w, N_Vector id);
+SUNDIALS_EXPORT realtype N_VMin_Parallel(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWL2Norm_Parallel(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VL1Norm_Parallel(N_Vector x);
+SUNDIALS_EXPORT void N_VCompare_Parallel(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VInvTest_Parallel(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VConstrMask_Parallel(N_Vector c, N_Vector x, N_Vector m);
+SUNDIALS_EXPORT realtype N_VMinQuotient_Parallel(N_Vector num, N_Vector denom);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/nvector/nvector_parhyp.h b/include/nvector/nvector_parhyp.h
new file mode 100644
index 0000000..e3777ca
--- /dev/null
+++ b/include/nvector/nvector_parhyp.h
@@ -0,0 +1,237 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Jean M. Sexton @ SMU
+ *                Slaven Peles @ LLNL
+ * ----------------------------------------------------------------- 
+ * Based on work by: Scott D. Cohen, Alan C. Hindmarsh, Radu Serban,
+ *                   and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the main header file for the MPI-enabled implementation
+ * of the NVECTOR module.
+ *
+ * Part I contains declarations specific to the parallel
+ * implementation of the supplied NVECTOR module.
+ *
+ * Part II contains the prototype for the constructor
+ * N_VNew_ParHyp as well as implementation-specific prototypes
+ * for various useful vector operations.
+ *
+ * Notes:
+ *
+ *   - The definition of the generic N_Vector structure can be
+ *     found in the header file sundials_nvector.h.
+ *
+ *   - The definition of the type realtype can be found in the
+ *     header file sundials_types.h, and it may be changed (at the 
+ *     configuration stage) according to the user's needs. 
+ *     The sundials_types.h file also contains the definition
+ *     for the type booleantype.
+ *
+ *   - N_Vector arguments to arithmetic vector operations need not
+ *     be distinct. For example, the following call:
+ *
+ *        N_VLinearSum_ParHyp(a,x,b,y,y);
+ *
+ *     (which stores the result of the operation a*x+b*y in y)
+ *     is legal.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _NVECTOR_PARHYP_H
+#define _NVECTOR_PARHYP_H
+
+#include <mpi.h>
+#include <sundials/sundials_nvector.h>
+
+/* hypre header files */
+#include <_hypre_parcsr_mv.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*
+ * -----------------------------------------------------------------
+ * PART I: PARALLEL implementation of N_Vector               
+ * -----------------------------------------------------------------
+ */
+
+/* define MPI data types */
+
+#if defined(SUNDIALS_SINGLE_PRECISION)
+  #define PVEC_REAL_MPI_TYPE MPI_FLOAT
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  #define PVEC_REAL_MPI_TYPE MPI_DOUBLE
+#elif defined(SUNDIALS_EXTENDED_PRECISION)
+  #define PVEC_REAL_MPI_TYPE MPI_LONG_DOUBLE
+#endif
+
+#define PVEC_INTEGER_MPI_TYPE MPI_LONG
+
+/* 
+ * Parallel implementation of the N_Vector 'content' structure
+ * contains the global and local lengths of the vector, a pointer
+ * to an array of 'realtype components', the MPI communicator,
+ * and a flag indicating ownership of the data. 
+ */
+struct _N_VectorContent_ParHyp {
+  long int local_length;      /* local vector length         */
+  long int global_length;     /* global vector length        */
+  booleantype own_parvector;  /* ownership of HYPRE vector   */
+  MPI_Comm comm;              /* pointer to MPI communicator */
+
+  hypre_ParVector *x;   /* The actual hypre_ParVector object */
+};
+
+typedef struct _N_VectorContent_ParHyp *N_VectorContent_ParHyp;
+
+
+/*
+ * -----------------------------------------------------------------
+ * PART II: functions exported by nvector_ParHyp
+ * 
+ * CONSTRUCTORS:
+ *    N_VNewEmpty_ParHyp
+ *    N_VMake_ParHyp
+ *    N_VCloneVectorArray_ParHyp
+ *    N_VCloneVectorArrayEmpty_ParHyp
+ * DESTRUCTORS:
+ *    N_VDestroy_ParHyp
+ *    N_VDestroyVectorArray_ParHyp
+ * ACCESSOR FUNCTIONS:
+ *    N_VGetVector_ParHyp
+ * OTHER:
+ *    N_VPrint_ParHyp
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VNewEmpty_ParHyp
+ * -----------------------------------------------------------------
+ * This function creates a new hypre vector wrapper without the 
+ * hypre vector itself.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VNewEmpty_ParHyp(MPI_Comm comm, 
+                                            long int local_length,
+                                            long int global_length);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VMake_ParHyp
+ * -----------------------------------------------------------------
+ * This function creates a hypre vector wrapper around user-supplied 
+ * hypre vector.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VMake_ParHyp(hypre_ParVector *x);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArray_ParHyp
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' N_Vectors by cloning a 
+ * given vector w. Both, the wrapper and the underlying hypre vector
+ * are cloned.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArray_ParHyp(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArrayEmpty_ParHyp
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' empty hypre vector
+ * wrappers by cloning w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArrayEmpty_ParHyp(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VDestroyVectorArray_ParHyp
+ * -----------------------------------------------------------------
+ * This function frees an array of N_Vector created with 
+ * N_VCloneVectorArray_ParHyp or N_VCloneVectorArrayEmpty_ParHyp.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VDestroyVectorArray_ParHyp(N_Vector *vs, int count);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VGetVector_ParHyp
+ * -----------------------------------------------------------------
+ * Extracts underlying HYPRE vector.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT hypre_ParVector *N_VGetVector_ParHyp(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VPrint_ParHyp
+ * -----------------------------------------------------------------
+ * This function prints the content of a parallel vector to stdout.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VPrint_ParHyp(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * parallel implementations of the vector operations
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector_ID N_VGetVectorID_ParHyp(N_Vector v);
+SUNDIALS_EXPORT N_Vector N_VCloneEmpty_ParHyp(N_Vector w);
+SUNDIALS_EXPORT N_Vector N_VClone_ParHyp(N_Vector w);
+SUNDIALS_EXPORT void N_VDestroy_ParHyp(N_Vector v);
+SUNDIALS_EXPORT void N_VSpace_ParHyp(N_Vector v, long int *lrw, long int *liw);
+SUNDIALS_EXPORT realtype *N_VGetArrayPointer_ParHyp(N_Vector v);
+SUNDIALS_EXPORT void N_VSetArrayPointer_ParHyp(realtype *v_data, N_Vector v);
+SUNDIALS_EXPORT void N_VLinearSum_ParHyp(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VConst_ParHyp(realtype c, N_Vector z);
+SUNDIALS_EXPORT void N_VProd_ParHyp(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VDiv_ParHyp(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VScale_ParHyp(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAbs_ParHyp(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VInv_ParHyp(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAddConst_ParHyp(N_Vector x, realtype b, N_Vector z);
+SUNDIALS_EXPORT realtype N_VDotProd_ParHyp(N_Vector x, N_Vector y);
+SUNDIALS_EXPORT realtype N_VMaxNorm_ParHyp(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWrmsNorm_ParHyp(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VWrmsNormMask_ParHyp(N_Vector x, N_Vector w, N_Vector id);
+SUNDIALS_EXPORT realtype N_VMin_ParHyp(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWL2Norm_ParHyp(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VL1Norm_ParHyp(N_Vector x);
+SUNDIALS_EXPORT void N_VCompare_ParHyp(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VInvTest_ParHyp(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VConstrMask_ParHyp(N_Vector c, N_Vector x, N_Vector m);
+SUNDIALS_EXPORT realtype N_VMinQuotient_ParHyp(N_Vector num, N_Vector denom);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/nvector/nvector_petsc.h b/include/nvector/nvector_petsc.h
new file mode 100644
index 0000000..0690129
--- /dev/null
+++ b/include/nvector/nvector_petsc.h
@@ -0,0 +1,240 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision:$
+ * $Date:$
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Slaven Peles @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the main header file for the PETSc vector wrapper 
+ * for NVECTOR module.
+ *
+ * Part I contains declarations specific to the PETSc vector wrapper
+ * implementation.
+ *
+ * Part II contains the prototype for the constructor
+ * N_VMake_Petsc as well as PETSc-specific prototypes
+ * for various useful vector operations.
+ *
+ * Notes:
+ *
+ *   - The definition of the generic N_Vector structure can be
+ *     found in the header file sundials_nvector.h.
+ *
+ *   - The definition of the type realtype can be found in the
+ *     header file sundials_types.h, and it may be changed (at the 
+ *     build configuration stage) according to the user's needs. 
+ *     The sundials_types.h file also contains the definition
+ *     for the type booleantype.
+ *
+ *   - N_Vector arguments to arithmetic vector operations need not
+ *     be distinct. For example, the following call:
+ *
+ *        N_VLinearSum_Petsc(a,x,b,y,y);
+ *
+ *     (which stores the result of the operation a*x+b*y in y)
+ *     is legal.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _NVECTOR_PETSC_H
+#define _NVECTOR_PETSC_H
+
+#include <mpi.h>
+#include <petscvec.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*
+ * -----------------------------------------------------------------
+ * PART I: PARALLEL implementation of N_Vector               
+ * -----------------------------------------------------------------
+ */
+
+/* define MPI data types */
+
+#if defined(SUNDIALS_SINGLE_PRECISION)
+
+#define PVEC_REAL_MPI_TYPE MPI_FLOAT
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define PVEC_REAL_MPI_TYPE MPI_DOUBLE
+
+#elif defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define PVEC_REAL_MPI_TYPE MPI_LONG_DOUBLE
+
+#endif
+
+#define PVEC_INTEGER_MPI_TYPE MPI_LONG
+
+/* parallel implementation of the N_Vector 'content' structure
+   contains the global and local lengths of the vector, a pointer
+   to the underlying PETSc vector, the MPI communicator,
+   and a flag indicating ownership of the PETSc vector */
+
+struct _N_VectorContent_Petsc {
+  long int local_length;   /* copy of local vector length  */
+  long int global_length;  /* copy of global vector length */
+  booleantype own_data;    /* ownership of data            */
+  Vec *pvec;               /* pointer to PETSc vector      */
+  MPI_Comm comm;           /* copy of MPI communicator     */
+};
+
+typedef struct _N_VectorContent_Petsc *N_VectorContent_Petsc;
+
+/*
+ * -----------------------------------------------------------------
+ * PART II: functions exported by nvector_Petsc
+ * 
+ * CONSTRUCTORS:
+ *    N_VNewEmpty_Petsc
+ *    N_VMake_Petsc
+ *    N_VCloneVectorArray_Petsc
+ *    N_VCloneVectorArrayEmpty_Petsc
+ * DESTRUCTORS:
+ *    N_VDestroyVectorArray_Petsc
+ * OTHER:
+ *    N_VGetVector_Petsc
+ *    N_VPrint_Petsc
+ * -----------------------------------------------------------------
+ */
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VNewEmpty_Petsc
+ * -----------------------------------------------------------------
+ * This function creates a new N_Vector wrapper around an empty
+ * (NULL) PETSc vector.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VNewEmpty_Petsc(MPI_Comm comm, 
+                                           long int local_length,
+                                           long int global_length);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VMake_Petsc
+ * -----------------------------------------------------------------
+ * This function is not supported for PETSc vector wrapper.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VMake_Petsc(Vec *v);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VGetArrayPointer_Petsc
+ * -----------------------------------------------------------------
+ * This function is not supported for PETSc vector wrapper.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT realtype *N_VGetArrayPointer_Petsc(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArray_Petsc
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' PARALLEL vectors by
+ * cloning a given vector w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArray_Petsc(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArrayEmpty_Petsc
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' PARALLEL vectors each 
+ * with an empty (NULL) data array by cloning w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArrayEmpty_Petsc(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VDestroyVectorArray_Petsc
+ * -----------------------------------------------------------------
+ * This function frees an array of N_Vector created with 
+ * N_VCloneVectorArray_Petsc or N_VCloneVectorArrayEmpty_Petsc.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VDestroyVectorArray_Petsc(N_Vector *vs, int count);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VGetVector_Petsc
+ * -----------------------------------------------------------------
+ * Extracts PETSc vector from N_Vector wrapper.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT Vec *N_VGetVector_Petsc(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VPrint_Petsc
+ * -----------------------------------------------------------------
+ * This function prints the content of a parallel vector to stdout.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VPrint_Petsc(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * PETSc implementations of the vector operations
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector_ID N_VGetVectorID_Petsc(N_Vector v);
+SUNDIALS_EXPORT N_Vector N_VCloneEmpty_Petsc(N_Vector w);
+SUNDIALS_EXPORT N_Vector N_VClone_Petsc(N_Vector w);
+SUNDIALS_EXPORT void N_VDestroy_Petsc(N_Vector v);
+SUNDIALS_EXPORT void N_VSpace_Petsc(N_Vector v, long int *lrw, long int *liw);
+SUNDIALS_EXPORT void N_VSetArrayPointer_Petsc(realtype *v_data, N_Vector v);
+SUNDIALS_EXPORT void N_VLinearSum_Petsc(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VConst_Petsc(realtype c, N_Vector z);
+SUNDIALS_EXPORT void N_VProd_Petsc(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VDiv_Petsc(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VScale_Petsc(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAbs_Petsc(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VInv_Petsc(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAddConst_Petsc(N_Vector x, realtype b, N_Vector z);
+SUNDIALS_EXPORT realtype N_VDotProd_Petsc(N_Vector x, N_Vector y);
+SUNDIALS_EXPORT realtype N_VMaxNorm_Petsc(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWrmsNorm_Petsc(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VWrmsNormMask_Petsc(N_Vector x, N_Vector w, N_Vector id);
+SUNDIALS_EXPORT realtype N_VMin_Petsc(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWL2Norm_Petsc(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VL1Norm_Petsc(N_Vector x);
+SUNDIALS_EXPORT void N_VCompare_Petsc(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VInvTest_Petsc(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VConstrMask_Petsc(N_Vector c, N_Vector x, N_Vector m);
+SUNDIALS_EXPORT realtype N_VMinQuotient_Petsc(N_Vector num, N_Vector denom);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NVECTOR_PETSC_H */
diff --git a/include/nvector/nvector_pthreads.h b/include/nvector/nvector_pthreads.h
new file mode 100644
index 0000000..e73d839
--- /dev/null
+++ b/include/nvector/nvector_pthreads.h
@@ -0,0 +1,310 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4869 $
+ * $Date: 2016-08-19 10:34:20 -0700 (Fri, 19 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): David J. Gardner @ LLNL
+ * -----------------------------------------------------------------
+ * Acknowledgements: This NVECTOR module is based on the NVECTOR 
+ *                   Serial module by Scott D. Cohen, Alan C. 
+ *                   Hindmarsh, Radu Serban, and Aaron Collier 
+ *                   @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the POSIX Threads (Pthreads) 
+ * implementation of the NVECTOR module using LOCAL data structs
+ * to share data between threads.
+ *
+ * Part I contains declarations specific to the pthreads
+ * implementation of the supplied NVECTOR module.
+ *
+ * Part II defines accessor macros that allow the user to
+ * efficiently use the type N_Vector without making explicit
+ * references to the underlying data structure.
+ *
+ * Part III contains the prototype for the constructor N_VNew_Pthreads
+ * as well as implementation-specific prototypes for various useful
+ * vector operations.
+ *
+ * Notes:
+ *
+ *   - The definition of the generic N_Vector structure can be found
+ *     in the header file sundials_nvector.h.
+ *
+ *   - The definition of the type 'realtype' can be found in the
+ *     header file sundials_types.h, and it may be changed (at the 
+ *     configuration stage) according to the user's needs. 
+ *     The sundials_types.h file also contains the definition
+ *     for the type 'booleantype'.
+ *
+ *   - N_Vector arguments to arithmetic vector operations need not
+ *     be distinct. For example, the following call:
+ *
+ *       N_VLinearSum_Pthreads(a,x,b,y,y);
+ *
+ *     (which stores the result of the operation a*x+b*y in y)
+ *     is legal.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _NVECTOR_PTHREADS_H
+#define _NVECTOR_PTHREADS_H
+
+#include <pthread.h>
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * PART I: PTHREADS implementation of N_Vector
+ * -----------------------------------------------------------------
+ */
+
+/* pthreads implementation of the N_Vector 'content' structure
+   contains the length of the vector, number of threads, a pointer 
+   to an array of 'realtype' components, and a flag indicating 
+   ownership of the data */
+
+struct _N_VectorContent_Pthreads {
+  long int length;
+  booleantype own_data;
+  realtype *data;
+  int num_threads;
+};
+
+typedef struct _N_VectorContent_Pthreads *N_VectorContent_Pthreads;
+
+
+/* structure to allow threads to share data */
+struct _Pthreads_Data{
+  long int start;                /* starting index for loop  */ 
+  long int end;                  /* ending index for loop    */
+  realtype c1, c2;               /* scaler values            */
+  realtype *v1, *v2, *v3;        /* vector data              */
+  realtype *global_val;          /* shared global variable   */
+  pthread_mutex_t *global_mutex; /* lock for shared variable */ 
+};
+
+typedef struct _Pthreads_Data Pthreads_Data;
+
+
+/*
+ * -----------------------------------------------------------------
+ * PART II: macros NV_CONTENT_PT, NV_DATA_PT, NV_OWN_DATA_PT,
+ *          NV_LENGTH_PT, and NV_Ith_PT
+ * -----------------------------------------------------------------
+ * In the descriptions below, the following user declarations
+ * are assumed:
+ *
+ * N_Vector v;
+ * long int i;
+ *
+ * (1) NV_CONTENT_PT
+ *
+ *     This routines gives access to the contents of the pthreads
+ *     vector N_Vector.
+ *
+ *     The assignment v_cont = NV_CONTENT_PT(v) sets v_cont to be
+ *     a pointer to the pthreads N_Vector content structure.
+ *
+ * (2) NV_DATA_PT NV_OWN_DATA_PT NV_LENGTH_PT and NV_NUM_THREADS_PT
+ *
+ *     These routines give access to the individual parts of
+ *     the content structure of a pthreads N_Vector.
+ *
+ *     The assignment v_data = NV_DATA_PT(v) sets v_data to be
+ *     a pointer to the first component of v. The assignment
+ *     NV_DATA_PT(v) = data_V sets the component array of v to
+ *     be data_v by storing the pointer data_v.
+ *
+ *     The assignment v_len = NV_LENGTH_PT(v) sets v_len to be
+ *     the length of v. The call NV_LENGTH_PT(v) = len_v sets
+ *     the length of v to be len_v.
+ *
+ *     The assignment v_nthreads = NV_NUM_THREADS(v) sets v_nthreads
+ *     to be the number of threads that operate on v. The call 
+ *     NV_NUM_THREADS(v) = nthreads_v sets the number of threads that 
+ *     operate on v to be nthreads_v.
+ *
+ * (3) NV_Ith_PT
+ *
+ *     In the following description, the components of an
+ *     N_Vector are numbered 0..n-1, where n is the length of v.
+ *
+ *     The assignment r = NV_Ith_PT(v,i) sets r to be the value of
+ *     the ith component of v. The assignment NV_Ith_PT(v,i) = r
+ *     sets the value of the ith component of v to be r.
+ *
+ * Note: When looping over the components of an N_Vector v, it is
+ * more efficient to first obtain the component array via
+ * v_data = NV_DATA_PT(v) and then access v_data[i] within the
+ * loop than it is to use NV_Ith_PT(v,i) within the loop.
+ * -----------------------------------------------------------------
+ */
+
+#define NV_CONTENT_PT(v)       ( (N_VectorContent_Pthreads)(v->content) )
+
+#define NV_LENGTH_PT(v)        ( NV_CONTENT_PT(v)->length )
+
+#define NV_NUM_THREADS_PT(v)   ( NV_CONTENT_PT(v)->num_threads )
+
+#define NV_OWN_DATA_PT(v)      ( NV_CONTENT_PT(v)->own_data )
+
+#define NV_DATA_PT(v)          ( NV_CONTENT_PT(v)->data )
+
+#define NV_Ith_PT(v,i)         ( NV_DATA_PT(v)[i] )
+
+/*
+ * -----------------------------------------------------------------
+ * PART III: functions exported by nvector_Pthreads
+ * 
+ * CONSTRUCTORS:
+ *    N_VNew_Pthreads
+ *    N_VNewEmpty_Pthreads
+ *    N_VMake_Pthreads
+ *    N_VCloneVectorArray_Pthreads
+ *    N_VCloneVectorArrayEmpty_Pthreads
+ * DESTRUCTORS:
+ *    N_VDestroy_Pthreads
+ *    N_VDestroyVectorArray_Pthreads
+ * OTHER:
+ *    N_VGetLength_Pthreads
+ *    N_VPrint_Pthreads
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VNew_Pthreads
+ * -----------------------------------------------------------------
+ * This function creates and allocates memory for a pthreads vector.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VNew_Pthreads(long int vec_length, int n_threads);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VNewEmpty_Pthreads
+ * -----------------------------------------------------------------
+ * This function creates a new pthreads N_Vector with an empty (NULL)
+ * data array.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VNewEmpty_Pthreads(long int vec_length, int n_threads);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VMake_Pthreads
+ * -----------------------------------------------------------------
+ * This function creates and allocates memory for a pthreads vector
+ * with a user-supplied data array.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VMake_Pthreads(long int vec_length, int n_threads, realtype *v_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArray_Pthreads
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' PTHREADS vectors by
+ * cloning a given vector w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArray_Pthreads(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArrayEmpty_Pthreads
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' PTHREADS vectors each
+ * with an empty (NULL) data array by cloning w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArrayEmpty_Pthreads(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VDestroyVectorArray_Pthreads
+ * -----------------------------------------------------------------
+ * This function frees an array of PTHREADS vectors created with 
+ * N_VCloneVectorArray_Pthreads or N_VCloneVectorArrayEmpty_Pthreads.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VDestroyVectorArray_Pthreads(N_Vector *vs, int count);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VGetLength_Pthreads
+ * -----------------------------------------------------------------
+ * This function returns number of vector elements.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT long int N_VGetLength_Pthreads(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VPrint_Pthreads
+ * -----------------------------------------------------------------
+ * This function prints the content of a pthreads vector to stdout.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VPrint_Pthreads(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * pthreads implementations of various useful vector operations
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector_ID N_VGetVectorID_Pthreads(N_Vector v);
+SUNDIALS_EXPORT N_Vector N_VCloneEmpty_Pthreads(N_Vector w);
+SUNDIALS_EXPORT N_Vector N_VClone_Pthreads(N_Vector w);
+SUNDIALS_EXPORT void N_VDestroy_Pthreads(N_Vector v);
+SUNDIALS_EXPORT void N_VSpace_Pthreads(N_Vector v, long int *lrw, long int *liw);
+SUNDIALS_EXPORT realtype *N_VGetArrayPointer_Pthreads(N_Vector v);
+SUNDIALS_EXPORT void N_VSetArrayPointer_Pthreads(realtype *v_data, N_Vector v);
+SUNDIALS_EXPORT void N_VLinearSum_Pthreads(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VConst_Pthreads(realtype c, N_Vector z);
+SUNDIALS_EXPORT void N_VProd_Pthreads(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VDiv_Pthreads(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VScale_Pthreads(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAbs_Pthreads(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VInv_Pthreads(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAddConst_Pthreads(N_Vector x, realtype b, N_Vector z);
+SUNDIALS_EXPORT realtype N_VDotProd_Pthreads(N_Vector x, N_Vector y);
+SUNDIALS_EXPORT realtype N_VMaxNorm_Pthreads(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWrmsNorm_Pthreads(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VWrmsNormMask_Pthreads(N_Vector x, N_Vector w, N_Vector id);
+SUNDIALS_EXPORT realtype N_VMin_Pthreads(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWL2Norm_Pthreads(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VL1Norm_Pthreads(N_Vector x);
+SUNDIALS_EXPORT void N_VCompare_Pthreads(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VInvTest_Pthreads(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VConstrMask_Pthreads(N_Vector c, N_Vector x, N_Vector m);
+SUNDIALS_EXPORT realtype N_VMinQuotient_Pthreads(N_Vector num, N_Vector denom);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/nvector/nvector_serial.h b/include/nvector/nvector_serial.h
new file mode 100644
index 0000000..a943707
--- /dev/null
+++ b/include/nvector/nvector_serial.h
@@ -0,0 +1,282 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4867 $
+ * $Date: 2016-08-19 10:05:14 -0700 (Fri, 19 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, Radu Serban,
+ *                and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the serial implementation of the
+ * NVECTOR module.
+ *
+ * Part I contains declarations specific to the serial
+ * implementation of the supplied NVECTOR module.
+ *
+ * Part II defines accessor macros that allow the user to
+ * efficiently use the type N_Vector without making explicit
+ * references to the underlying data structure.
+ *
+ * Part III contains the prototype for the constructor N_VNew_Serial
+ * as well as implementation-specific prototypes for various useful
+ * vector operations.
+ *
+ * Notes:
+ *
+ *   - The definition of the generic N_Vector structure can be found
+ *     in the header file sundials_nvector.h.
+ *
+ *   - The definition of the type 'realtype' can be found in the
+ *     header file sundials_types.h, and it may be changed (at the 
+ *     configuration stage) according to the user's needs. 
+ *     The sundials_types.h file also contains the definition
+ *     for the type 'booleantype'.
+ *
+ *   - N_Vector arguments to arithmetic vector operations need not
+ *     be distinct. For example, the following call:
+ *
+ *       N_VLinearSum_Serial(a,x,b,y,y);
+ *
+ *     (which stores the result of the operation a*x+b*y in y)
+ *     is legal.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _NVECTOR_SERIAL_H
+#define _NVECTOR_SERIAL_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * PART I: SERIAL implementation of N_Vector
+ * -----------------------------------------------------------------
+ */
+
+/* serial implementation of the N_Vector 'content' structure
+   contains the length of the vector, a pointer to an array
+   of 'realtype' components, and a flag indicating ownership of
+   the data */
+
+struct _N_VectorContent_Serial {
+  long int length;
+  booleantype own_data;
+  realtype *data;
+};
+
+typedef struct _N_VectorContent_Serial *N_VectorContent_Serial;
+
+/*
+ * -----------------------------------------------------------------
+ * PART II: macros NV_CONTENT_S, NV_DATA_S, NV_OWN_DATA_S,
+ *          NV_LENGTH_S, and NV_Ith_S
+ * -----------------------------------------------------------------
+ * In the descriptions below, the following user declarations
+ * are assumed:
+ *
+ * N_Vector v;
+ * long int i;
+ *
+ * (1) NV_CONTENT_S
+ *
+ *     This routines gives access to the contents of the serial
+ *     vector N_Vector.
+ *
+ *     The assignment v_cont = NV_CONTENT_S(v) sets v_cont to be
+ *     a pointer to the serial N_Vector content structure.
+ *
+ * (2) NV_DATA_S NV_OWN_DATA_S and NV_LENGTH_S
+ *
+ *     These routines give access to the individual parts of
+ *     the content structure of a serial N_Vector.
+ *
+ *     The assignment v_data = NV_DATA_S(v) sets v_data to be
+ *     a pointer to the first component of v. The assignment
+ *     NV_DATA_S(v) = data_V sets the component array of v to
+ *     be data_v by storing the pointer data_v.
+ *
+ *     The assignment v_len = NV_LENGTH_S(v) sets v_len to be
+ *     the length of v. The call NV_LENGTH_S(v) = len_v sets
+ *     the length of v to be len_v.
+ *
+ * (3) NV_Ith_S
+ *
+ *     In the following description, the components of an
+ *     N_Vector are numbered 0..n-1, where n is the length of v.
+ *
+ *     The assignment r = NV_Ith_S(v,i) sets r to be the value of
+ *     the ith component of v. The assignment NV_Ith_S(v,i) = r
+ *     sets the value of the ith component of v to be r.
+ *
+ * Note: When looping over the components of an N_Vector v, it is
+ * more efficient to first obtain the component array via
+ * v_data = NV_DATA_S(v) and then access v_data[i] within the
+ * loop than it is to use NV_Ith_S(v,i) within the loop.
+ * -----------------------------------------------------------------
+ */
+
+#define NV_CONTENT_S(v)  ( (N_VectorContent_Serial)(v->content) )
+
+#define NV_LENGTH_S(v)   ( NV_CONTENT_S(v)->length )
+
+#define NV_OWN_DATA_S(v) ( NV_CONTENT_S(v)->own_data )
+
+#define NV_DATA_S(v)     ( NV_CONTENT_S(v)->data )
+
+#define NV_Ith_S(v,i)    ( NV_DATA_S(v)[i] )
+
+/*
+ * -----------------------------------------------------------------
+ * PART III: functions exported by nvector_serial
+ * 
+ * CONSTRUCTORS:
+ *    N_VNew_Serial
+ *    N_VNewEmpty_Serial
+ *    N_VMake_Serial
+ *    N_VCloneVectorArray_Serial
+ *    N_VCloneVectorArrayEmpty_Serial
+ * DESTRUCTORS:
+ *    N_VDestroy_Serial
+ *    N_VDestroyVectorArray_Serial
+ * OTHER:
+ *    N_VGetLength_Serial
+ *    N_VPrint_Serial
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VNew_Serial
+ * -----------------------------------------------------------------
+ * This function creates and allocates memory for a serial vector.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VNew_Serial(long int vec_length);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VNewEmpty_Serial
+ * -----------------------------------------------------------------
+ * This function creates a new serial N_Vector with an empty (NULL)
+ * data array.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VNewEmpty_Serial(long int vec_length);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VMake_Serial
+ * -----------------------------------------------------------------
+ * This function creates and allocates memory for a serial vector
+ * with a user-supplied data array.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector N_VMake_Serial(long int vec_length, realtype *v_data);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArray_Serial
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' SERIAL vectors by
+ * cloning a given vector w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArray_Serial(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VCloneVectorArrayEmpty_Serial
+ * -----------------------------------------------------------------
+ * This function creates an array of 'count' SERIAL vectors each
+ * with an empty (NULL) data array by cloning w.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArrayEmpty_Serial(int count, N_Vector w);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VDestroyVectorArray_Serial
+ * -----------------------------------------------------------------
+ * This function frees an array of SERIAL vectors created with 
+ * N_VCloneVectorArray_Serial or N_VCloneVectorArrayEmpty_Serial.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VDestroyVectorArray_Serial(N_Vector *vs, int count);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VGetLength_Serial
+ * -----------------------------------------------------------------
+ * This function returns number of vector elements.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT long int N_VGetLength_Serial(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : N_VPrint_Serial
+ * -----------------------------------------------------------------
+ * This function prints the content of a serial vector to stdout.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void N_VPrint_Serial(N_Vector v);
+
+/*
+ * -----------------------------------------------------------------
+ * serial implementations of various useful vector operations
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector_ID N_VGetVectorID_Serial(N_Vector v);
+SUNDIALS_EXPORT N_Vector N_VCloneEmpty_Serial(N_Vector w);
+SUNDIALS_EXPORT N_Vector N_VClone_Serial(N_Vector w);
+SUNDIALS_EXPORT void N_VDestroy_Serial(N_Vector v);
+SUNDIALS_EXPORT void N_VSpace_Serial(N_Vector v, long int *lrw, long int *liw);
+SUNDIALS_EXPORT realtype *N_VGetArrayPointer_Serial(N_Vector v);
+SUNDIALS_EXPORT void N_VSetArrayPointer_Serial(realtype *v_data, N_Vector v);
+SUNDIALS_EXPORT void N_VLinearSum_Serial(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VConst_Serial(realtype c, N_Vector z);
+SUNDIALS_EXPORT void N_VProd_Serial(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VDiv_Serial(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VScale_Serial(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAbs_Serial(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VInv_Serial(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAddConst_Serial(N_Vector x, realtype b, N_Vector z);
+SUNDIALS_EXPORT realtype N_VDotProd_Serial(N_Vector x, N_Vector y);
+SUNDIALS_EXPORT realtype N_VMaxNorm_Serial(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWrmsNorm_Serial(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VWrmsNormMask_Serial(N_Vector x, N_Vector w, N_Vector id);
+SUNDIALS_EXPORT realtype N_VMin_Serial(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWL2Norm_Serial(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VL1Norm_Serial(N_Vector x);
+SUNDIALS_EXPORT void N_VCompare_Serial(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VInvTest_Serial(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VConstrMask_Serial(N_Vector c, N_Vector x, N_Vector m);
+SUNDIALS_EXPORT realtype N_VMinQuotient_Serial(N_Vector num, N_Vector denom);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_band.h b/include/sundials/sundials_band.h
new file mode 100644
index 0000000..e6593c0
--- /dev/null
+++ b/include/sundials/sundials_band.h
@@ -0,0 +1,180 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4780 $
+ * $Date: 2016-06-22 17:28:19 -0700 (Wed, 22 Jun 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for a generic BAND linear solver
+ * package, based on the DlsMat type defined in sundials_direct.h.
+ *
+ * There are two sets of band solver routines listed in
+ * this file: one set uses type DlsMat defined below and the
+ * other set uses the type realtype ** for band matrix arguments.
+ * Routines that work with the type DlsMat begin with "Band".
+ * Routines that work with realtype ** begin with "band"
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SUNDIALS_BAND_H
+#define _SUNDIALS_BAND_H
+
+#include <sundials/sundials_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Function : BandGBTRF
+ * -----------------------------------------------------------------
+ * Usage : ier = BandGBTRF(A, p);
+ *         if (ier != 0) ... A is singular
+ * -----------------------------------------------------------------
+ * BandGBTRF performs the LU factorization of the N by N band
+ * matrix A. This is done using standard Gaussian elimination
+ * with partial pivoting.
+ *
+ * A successful LU factorization leaves the "matrix" A and the
+ * pivot array p with the following information:
+ *
+ * (1) p[k] contains the row number of the pivot element chosen
+ *     at the beginning of elimination step k, k=0, 1, ..., N-1.
+ *
+ * (2) If the unique LU factorization of A is given by PA = LU,
+ *     where P is a permutation matrix, L is a lower triangular
+ *     matrix with all 1's on the diagonal, and U is an upper
+ *     triangular matrix, then the upper triangular part of A
+ *     (including its diagonal) contains U and the strictly lower
+ *     triangular part of A contains the multipliers, I-L.
+ *
+ * BandGBTRF returns 0 if successful. Otherwise it encountered
+ * a zero diagonal element during the factorization. In this case
+ * it returns the column index (numbered from one) at which
+ * it encountered the zero.
+ *
+ * Important Note: A must be allocated to accommodate the increase
+ * in upper bandwidth that occurs during factorization. If
+ * mathematically, A is a band matrix with upper bandwidth mu and
+ * lower bandwidth ml, then the upper triangular factor U can
+ * have upper bandwidth as big as smu = MIN(n-1,mu+ml). The lower
+ * triangular factor L has lower bandwidth ml. Allocate A with
+ * call A = BandAllocMat(N,mu,ml,smu), where mu, ml, and smu are
+ * as defined above. The user does not have to zero the "extra"
+ * storage allocated for the purpose of factorization. This will
+ * handled by the BandGBTRF routine.
+ *
+ * BandGBTRF is only a wrapper around bandGBTRF. All work is done
+ * in bandGBTRF, which works directly on the data in the DlsMat A
+ * (i.e. in the field A->cols).
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT long int BandGBTRF(DlsMat A, long int *p);
+SUNDIALS_EXPORT long int bandGBTRF(realtype **a, long int n, long int mu, long int ml,
+                                   long int smu, long int *p);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : BandGBTRS
+ * -----------------------------------------------------------------
+ * Usage : BandGBTRS(A, p, b);
+ * -----------------------------------------------------------------
+ * BandGBTRS solves the N-dimensional system A x = b using
+ * the LU factorization in A and the pivot information in p
+ * computed in BandGBTRF. The solution x is returned in b. This
+ * routine cannot fail if the corresponding call to BandGBTRF
+ * did not fail.
+ *
+ * BandGBTRS is only a wrapper around bandGBTRS which does all the
+ * work directly on the data in the DlsMat A (i.e. in A->cols).
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void BandGBTRS(DlsMat A, long int *p, realtype *b);
+SUNDIALS_EXPORT void bandGBTRS(realtype **a, long int n, long int smu,
+                               long int ml, long int *p, realtype *b);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : BandCopy
+ * -----------------------------------------------------------------
+ * Usage : BandCopy(A, B, copymu, copyml);
+ * -----------------------------------------------------------------
+ * BandCopy copies the submatrix with upper and lower bandwidths
+ * copymu, copyml of the N by N band matrix A into the N by N
+ * band matrix B.
+ * 
+ * BandCopy is a wrapper around bandCopy which accesses the data
+ * in the DlsMat A and DlsMat B (i.e. the fields cols)
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void BandCopy(DlsMat A, DlsMat B, long int copymu, long int copyml);
+SUNDIALS_EXPORT void bandCopy(realtype **a, realtype **b, long int n,
+                              long int a_smu, long int b_smu,
+			      long int copymu, long int copyml);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: BandScale
+ * -----------------------------------------------------------------
+ * Usage : BandScale(c, A);
+ * -----------------------------------------------------------------
+ * A(i,j) <- c*A(i,j),   j-(A->mu) <= i <= j+(A->ml).
+ *
+ * BandScale is a wrapper around bandScale which performs the actual
+ * scaling by accessing the data in the DlsMat A (i.e. the field
+ * A->cols).
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void BandScale(realtype c, DlsMat A);
+SUNDIALS_EXPORT void bandScale(realtype c, realtype **a, long int n, long int mu, long int ml, long int smu);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: bandAddIdentity
+ * -----------------------------------------------------------------
+ * bandAddIdentity adds the identity matrix to the n-by-n matrix
+ * stored in the realtype** arrays.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void bandAddIdentity(realtype **a, long int n, long int smu);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function: BandMatvec
+ * -----------------------------------------------------------------
+ * BandMatvec computes the matrix-vector product y = A*x, where A 
+ * is an M-by-N band matrix, x is a vector of length N, and y is a 
+ * vector of length M.  No error checking is performed on the length 
+ * of the arrays x and y.  Only y is modified in this routine.
+ *
+ * BandMatvec is a wrapper around bandMatvec which performs the 
+ * actual product by accessing the data in the DlsMat A.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void BandMatvec(DlsMat A, realtype *x, realtype *y);
+SUNDIALS_EXPORT void bandMatvec(realtype **a, realtype *x, realtype *y, long int n, 
+		long int mu, long int ml, long int smu);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_config.in b/include/sundials/sundials_config.in
new file mode 100644
index 0000000..1e06ccd
--- /dev/null
+++ b/include/sundials/sundials_config.in
@@ -0,0 +1,92 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4895 $
+ * $Date: 2016-09-05 16:57:24 -0700 (Mon, 05 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * Copyright (c) 2005, The Regents of the University of California.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ *------------------------------------------------------------------
+ * SUNDIALS configuration header file
+ *------------------------------------------------------------------
+ */
+
+/* Define SUNDIALS version number */
+#define SUNDIALS_PACKAGE_VERSION "@PACKAGE_VERSION@"
+
+/* FCMIX: Define Fortran name-mangling macro for C identifiers.
+ * Depending on the inferred scheme, one of the following six
+ * macros will be defined:
+ *     #define SUNDIALS_F77_FUNC(name,NAME) name
+ *     #define SUNDIALS_F77_FUNC(name,NAME) name ## _
+ *     #define SUNDIALS_F77_FUNC(name,NAME) name ## __
+ *     #define SUNDIALS_F77_FUNC(name,NAME) NAME
+ *     #define SUNDIALS_F77_FUNC(name,NAME) NAME ## _
+ *     #define SUNDIALS_F77_FUNC(name,NAME) NAME ## __
+ */
+ at F77_MANGLE_MACRO1@
+
+/* FCMIX: Define Fortran name-mangling macro for C identifiers
+ *        which contain underscores.
+ */
+ at F77_MANGLE_MACRO2@
+
+/* Define precision of SUNDIALS data type 'realtype' 
+ * Depending on the precision level, one of the following 
+ * three macros will be defined:
+ *     #define SUNDIALS_SINGLE_PRECISION 1
+ *     #define SUNDIALS_DOUBLE_PRECISION 1
+ *     #define SUNDIALS_EXTENDED_PRECISION 1
+ */
+ at PRECISION_LEVEL@
+
+/* Use generic math functions 
+ * If it was decided that generic math functions can be used, then
+ *     #define SUNDIALS_USE_GENERIC_MATH
+ */
+#cmakedefine SUNDIALS_USE_GENERIC_MATH
+
+/* Use POSIX timers if available.
+ *     #define SUNDIALS_HAVE_POSIX_TIMERS
+ */
+#cmakedefine SUNDIALS_HAVE_POSIX_TIMERS
+
+/* Blas/Lapack available
+ * If working libraries for Blas/lapack support were found, then
+ *     #define SUNDIALS_BLAS_LAPACK
+ */
+#cmakedefine SUNDIALS_BLAS_LAPACK
+
+/* SUPERLUMT available
+ * If working libraries for SUPERLUMT support were found, then
+ *     #define SUNDIALS_SUPERLUMT 
+ */
+#cmakedefine SUNDIALS_SUPERLUMT
+#cmakedefine SUNDIALS_SUPERLUMT_THREAD_TYPE "@SUPERLUMT_THREAD_TYPE@"
+
+/* KLU available
+ * If working libraries for KLU support were found, then
+ *     #define SUNDIALS_KLU 
+ */
+#cmakedefine SUNDIALS_KLU
+
+/* FNVECTOR: Allow user to specify different MPI communicator
+ * If it was found that the MPI implementation supports MPI_Comm_f2c, then
+ *      #define SUNDIALS_MPI_COMM_F2C 1
+ * otherwise
+ *      #define SUNDIALS_MPI_COMM_F2C 0
+ */
+ at F77_MPI_COMM_F2C@
+
+/* Mark SUNDIALS API functions for export/import
+ * When building shared SUNDIALS libraries under Windows, use
+ *      #define SUNDIALS_EXPORT __declspec(dllexport)
+ * When linking to shared SUNDIALS libraries under Windows, use
+ *      #define SUNDIALS_EXPORT __declspec(dllimport)
+ * In all other cases (other platforms or static libraries under
+ * Windows), the SUNDIALS_EXPORT macro is empty
+ */
+ at SUNDIALS_EXPORT@
diff --git a/include/sundials/sundials_dense.h b/include/sundials/sundials_dense.h
new file mode 100644
index 0000000..30411a1
--- /dev/null
+++ b/include/sundials/sundials_dense.h
@@ -0,0 +1,211 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4780 $
+ * $Date: 2016-06-22 17:28:19 -0700 (Wed, 22 Jun 2016) $
+ * -----------------------------------------------------------------
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for a generic package of DENSE matrix
+ * operations, based on the DlsMat type defined in sundials_direct.h.
+ *
+ * There are two sets of dense solver routines listed in
+ * this file: one set uses type DlsMat defined below and the
+ * other set uses the type realtype ** for dense matrix arguments.
+ * Routines that work with the type DlsMat begin with "Dense".
+ * Routines that work with realtype** begin with "dense". 
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SUNDIALS_DENSE_H
+#define _SUNDIALS_DENSE_H
+
+#include <sundials/sundials_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: DenseGETRF and DenseGETRS
+ * -----------------------------------------------------------------
+ * DenseGETRF performs the LU factorization of the M by N dense
+ * matrix A. This is done using standard Gaussian elimination
+ * with partial (row) pivoting. Note that this applies only
+ * to matrices with M >= N and full column rank.
+ *
+ * A successful LU factorization leaves the matrix A and the
+ * pivot array p with the following information:
+ *
+ * (1) p[k] contains the row number of the pivot element chosen
+ *     at the beginning of elimination step k, k=0, 1, ..., N-1.
+ *
+ * (2) If the unique LU factorization of A is given by PA = LU,
+ *     where P is a permutation matrix, L is a lower trapezoidal
+ *     matrix with all 1's on the diagonal, and U is an upper
+ *     triangular matrix, then the upper triangular part of A
+ *     (including its diagonal) contains U and the strictly lower
+ *     trapezoidal part of A contains the multipliers, I-L.
+ *
+ * For square matrices (M = N), L is unit lower triangular.
+ *
+ * DenseGETRF returns 0 if successful. Otherwise it encountered
+ * a zero diagonal element during the factorization. In this case
+ * it returns the column index (numbered from one) at which
+ * it encountered the zero.
+ *
+ * DenseGETRS solves the N-dimensional system A x = b using
+ * the LU factorization in A and the pivot information in p
+ * computed in DenseGETRF. The solution x is returned in b. This
+ * routine cannot fail if the corresponding call to DenseGETRF
+ * did not fail.
+ * DenseGETRS does NOT check for a square matrix!
+ *
+ * -----------------------------------------------------------------
+ * DenseGETRF and DenseGETRS are simply wrappers around denseGETRF
+ * and denseGETRS, respectively, which perform all the work by
+ * directly accessing the data in the DlsMat A (i.e. in A->cols).
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT long int DenseGETRF(DlsMat A, long int *p);
+SUNDIALS_EXPORT void DenseGETRS(DlsMat A, long int *p, realtype *b);
+
+SUNDIALS_EXPORT long int denseGETRF(realtype **a, long int m, long int n, long int *p);
+SUNDIALS_EXPORT void denseGETRS(realtype **a, long int n, long int *p, realtype *b);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : DensePOTRF and DensePOTRS
+ * -----------------------------------------------------------------
+ * DensePOTRF computes the Cholesky factorization of a real symmetric
+ * positive definite matrix A.
+ * -----------------------------------------------------------------
+ * DensePOTRS solves a system of linear equations A*X = B with a 
+ * symmetric positive definite matrix A using the Cholesky factorization
+ * A = L*L**T computed by DensePOTRF.
+ *
+ * -----------------------------------------------------------------
+ * DensePOTRF and DensePOTRS are simply wrappers around densePOTRF
+ * and densePOTRS, respectively, which perform all the work by
+ * directly accessing the data in the DlsMat A (i.e. the field cols)
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT long int DensePOTRF(DlsMat A);
+SUNDIALS_EXPORT void DensePOTRS(DlsMat A, realtype *b);
+
+SUNDIALS_EXPORT long int densePOTRF(realtype **a, long int m);
+SUNDIALS_EXPORT void densePOTRS(realtype **a, long int m, realtype *b);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions : DenseGEQRF and DenseORMQR
+ * -----------------------------------------------------------------
+ * DenseGEQRF computes a QR factorization of a real M-by-N matrix A:
+ * A = Q * R (with M>= N).
+ * 
+ * DenseGEQRF requires a temporary work vector wrk of length M.
+ * -----------------------------------------------------------------
+ * DenseORMQR computes the product w = Q * v where Q is a real 
+ * orthogonal matrix defined as the product of k elementary reflectors
+ *
+ *        Q = H(1) H(2) . . . H(k)
+ *
+ * as returned by DenseGEQRF. Q is an M-by-N matrix, v is a vector
+ * of length N and w is a vector of length M (with M >= N).
+ *
+ * DenseORMQR requires a temporary work vector wrk of length M.
+ *
+ * -----------------------------------------------------------------
+ * DenseGEQRF and DenseORMQR are simply wrappers around denseGEQRF
+ * and denseORMQR, respectively, which perform all the work by
+ * directly accessing the data in the DlsMat A (i.e. the field cols)
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int DenseGEQRF(DlsMat A, realtype *beta, realtype *wrk);
+SUNDIALS_EXPORT int DenseORMQR(DlsMat A, realtype *beta, realtype *vn, realtype *vm, 
+			       realtype *wrk);
+
+SUNDIALS_EXPORT int denseGEQRF(realtype **a, long int m, long int n, realtype *beta,
+                               realtype *wrk);
+SUNDIALS_EXPORT int denseORMQR(realtype **a, long int m, long int n, realtype *beta,
+			       realtype *v, realtype *w, realtype *wrk);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : DenseCopy
+ * -----------------------------------------------------------------
+ * DenseCopy copies the contents of the M-by-N matrix A into the
+ * M-by-N matrix B.
+ * 
+ * DenseCopy is a wrapper around denseCopy which accesses the data
+ * in the DlsMat A and DlsMat B (i.e. the fields cols)
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void DenseCopy(DlsMat A, DlsMat B);
+SUNDIALS_EXPORT void denseCopy(realtype **a, realtype **b, long int m, long int n);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: DenseScale
+ * -----------------------------------------------------------------
+ * DenseScale scales the elements of the M-by-N matrix A by the
+ * constant c and stores the result back in A.
+ *
+ * DenseScale is a wrapper around denseScale which performs the actual
+ * scaling by accessing the data in the DlsMat A (i.e. in A->cols).
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void DenseScale(realtype c, DlsMat A);
+SUNDIALS_EXPORT void denseScale(realtype c, realtype **a, long int m, long int n);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function: denseAddIdentity
+ * -----------------------------------------------------------------
+ * denseAddIdentity adds the identity matrix to the n-by-n matrix
+ * stored in a realtype** array.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void denseAddIdentity(realtype **a, long int n);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function: DenseMatvec
+ * -----------------------------------------------------------------
+ * DenseMatvec computes the matrix-vector product y = A*x, where A 
+ * is an M-by-N matrix, x is a vector of length N, and y is a vector
+ * of length M.  No error checking is performed on the length of the
+ * arrays x and y.  Only y is modified in this routine.
+ *
+ * DenseMatvec is a wrapper around denseMatvec which performs the 
+ * actual product by accessing the data in the DlsMat A.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void DenseMatvec(DlsMat A, realtype *x, realtype *y);
+SUNDIALS_EXPORT void denseMatvec(realtype **a, realtype *x, realtype *y, long int m, long int n);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_direct.h b/include/sundials/sundials_direct.h
new file mode 100644
index 0000000..23984b4
--- /dev/null
+++ b/include/sundials/sundials_direct.h
@@ -0,0 +1,341 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4780 $
+ * $Date: 2016-06-22 17:28:19 -0700 (Wed, 22 Jun 2016) $
+ * -----------------------------------------------------------------
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This header file contains definitions and declarations for use by
+ * generic direct linear solvers for Ax = b. It defines types for
+ * dense and banded matrices and corresponding accessor macros.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SUNDIALS_DIRECT_H
+#define _SUNDIALS_DIRECT_H
+
+#include <sundials/sundials_types.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *                C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ *  SUNDIALS_DENSE: dense matrix
+ *  SUNDIALS_BAND:  banded matrix
+ */
+
+#define SUNDIALS_DENSE 1
+#define SUNDIALS_BAND  2
+
+/*
+ * ==================================================================
+ * Type definitions
+ * ==================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Type : DlsMat
+ * -----------------------------------------------------------------
+ * The type DlsMat is defined to be a pointer to a structure
+ * with various sizes, a data field, and an array of pointers to
+ * the columns which defines a dense or band matrix for use in 
+ * direct linear solvers. The M and N fields indicates the number 
+ * of rows and columns, respectively. The data field is a one 
+ * dimensional array used for component storage. The cols field 
+ * stores the pointers in data for the beginning of each column.
+ * -----------------------------------------------------------------
+ * For DENSE matrices, the relevant fields in DlsMat are:
+ *    type  = SUNDIALS_DENSE
+ *    M     - number of rows
+ *    N     - number of columns
+ *    ldim  - leading dimension (ldim >= M)
+ *    data  - pointer to a contiguous block of realtype variables
+ *    ldata - length of the data array =ldim*N
+ *    cols  - array of pointers. cols[j] points to the first element 
+ *            of the j-th column of the matrix in the array data.
+ *
+ * The elements of a dense matrix are stored columnwise (i.e. columns 
+ * are stored one on top of the other in memory). 
+ * If A is of type DlsMat, then the (i,j)th element of A (with 
+ * 0 <= i < M and 0 <= j < N) is given by (A->data)[j*n+i]. 
+ *
+ * The DENSE_COL and DENSE_ELEM macros below allow a user to access 
+ * efficiently individual matrix elements without writing out explicit 
+ * data structure references and without knowing too much about the 
+ * underlying element storage. The only storage assumption needed is 
+ * that elements are stored columnwise and that a pointer to the 
+ * jth column of elements can be obtained via the DENSE_COL macro.
+ * -----------------------------------------------------------------
+ * For BAND matrices, the relevant fields in DlsMat are:
+ *    type  = SUNDIALS_BAND
+ *    M     - number of rows
+ *    N     - number of columns
+ *    mu    - upper bandwidth, 0 <= mu <= min(M,N)
+ *    ml    - lower bandwidth, 0 <= ml <= min(M,N)
+ *    s_mu  - storage upper bandwidth, mu <= s_mu <= N-1.
+ *            The dgbtrf routine writes the LU factors into the storage 
+ *            for A. The upper triangular factor U, however, may have 
+ *            an upper bandwidth as big as MIN(N-1,mu+ml) because of 
+ *            partial pivoting. The s_mu field holds the upper 
+ *            bandwidth allocated for A.
+ *    ldim  - leading dimension (ldim >= s_mu)
+ *    data  - pointer to a contiguous block of realtype variables
+ *    ldata - length of the data array =ldim*(s_mu+ml+1)
+ *    cols  - array of pointers. cols[j] points to the first element 
+ *            of the j-th column of the matrix in the array data.
+ *
+ * The BAND_COL, BAND_COL_ELEM, and BAND_ELEM macros below allow a 
+ * user to access individual matrix elements without writing out 
+ * explicit data structure references and without knowing too much 
+ * about the underlying element storage. The only storage assumption 
+ * needed is that elements are stored columnwise and that a pointer 
+ * into the jth column of elements can be obtained via the BAND_COL 
+ * macro. The BAND_COL_ELEM macro selects an element from a column
+ * which has already been isolated via BAND_COL. The macro 
+ * BAND_COL_ELEM allows the user to avoid the translation 
+ * from the matrix location (i,j) to the index in the array returned 
+ * by BAND_COL at which the (i,j)th element is stored. 
+ * -----------------------------------------------------------------
+ */
+
+typedef struct _DlsMat {
+  int type;
+  long int M;
+  long int N;
+  long int ldim;
+  long int mu;
+  long int ml;
+  long int s_mu;
+  realtype *data;
+  long int ldata;
+  realtype **cols;
+} *DlsMat;
+
+/*
+ * ==================================================================
+ * Data accessor macros
+ * ==================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * DENSE_COL and DENSE_ELEM
+ * -----------------------------------------------------------------
+ *
+ * DENSE_COL(A,j) references the jth column of the M-by-N dense
+ * matrix A, 0 <= j < N. The type of the expression DENSE_COL(A,j) 
+ * is (realtype *). After the assignment col_j = DENSE_COL(A,j),
+ * col_j may be treated as an array indexed from 0 to M-1.
+ * The (i,j)-th element of A is thus referenced by col_j[i].
+ *
+ * DENSE_ELEM(A,i,j) references the (i,j)th element of the dense 
+ * M-by-N matrix A, 0 <= i < M ; 0 <= j < N.
+ *
+ * -----------------------------------------------------------------
+ */
+
+#define DENSE_COL(A,j) ((A->cols)[j])
+#define DENSE_ELEM(A,i,j) ((A->cols)[j][i])
+
+/*
+ * -----------------------------------------------------------------
+ * BAND_COL, BAND_COL_ELEM, and BAND_ELEM
+ * -----------------------------------------------------------------
+ *  
+ * BAND_COL(A,j) references the diagonal element of the jth column 
+ * of the N by N band matrix A, 0 <= j <= N-1. The type of the 
+ * expression BAND_COL(A,j) is realtype *. The pointer returned by 
+ * the call BAND_COL(A,j) can be treated as an array which is 
+ * indexed from -(A->mu) to (A->ml).
+ * 
+ * BAND_COL_ELEM references the (i,j)th entry of the band matrix A 
+ * when used in conjunction with BAND_COL. The index (i,j) should 
+ * satisfy j-(A->mu) <= i <= j+(A->ml).
+ *
+ * BAND_ELEM(A,i,j) references the (i,j)th element of the M-by-N 
+ * band matrix A, where 0 <= i,j <= N-1. The location (i,j) should 
+ * further satisfy j-(A->mu) <= i <= j+(A->ml). 
+ *
+ * -----------------------------------------------------------------
+ */
+ 
+#define BAND_COL(A,j) (((A->cols)[j])+(A->s_mu))
+#define BAND_COL_ELEM(col_j,i,j) (col_j[(i)-(j)])
+#define BAND_ELEM(A,i,j) ((A->cols)[j][(i)-(j)+(A->s_mu)])
+
+/*
+ * ==================================================================
+ * Exported function prototypes (functions working on dlsMat)
+ * ==================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function: NewDenseMat
+ * -----------------------------------------------------------------
+ * NewDenseMat allocates memory for an M-by-N dense matrix and
+ * returns the storage allocated (type DlsMat). NewDenseMat
+ * returns NULL if the request for matrix storage cannot be
+ * satisfied. See the above documentation for the type DlsMat
+ * for matrix storage details.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT DlsMat NewDenseMat(long int M, long int N);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: NewBandMat
+ * -----------------------------------------------------------------
+ * NewBandMat allocates memory for an M-by-N band matrix 
+ * with upper bandwidth mu, lower bandwidth ml, and storage upper
+ * bandwidth smu. Pass smu as follows depending on whether A will 
+ * be LU factored:
+ *
+ * (1) Pass smu = mu if A will not be factored.
+ *
+ * (2) Pass smu = MIN(N-1,mu+ml) if A will be factored.
+ *
+ * NewBandMat returns the storage allocated (type DlsMat) or
+ * NULL if the request for matrix storage cannot be satisfied.
+ * See the documentation for the type DlsMat for matrix storage
+ * details.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT DlsMat NewBandMat(long int N, long int mu, long int ml, long int smu);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: DestroyMat
+ * -----------------------------------------------------------------
+ * DestroyMat frees the memory allocated by NewDenseMat or NewBandMat
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void DestroyMat(DlsMat A);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: NewIntArray
+ * -----------------------------------------------------------------
+ * NewIntArray allocates memory an array of N int's and returns
+ * the pointer to the memory it allocates. If the request for
+ * memory storage cannot be satisfied, it returns NULL.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int *NewIntArray(int N);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: NewLintArray
+ * -----------------------------------------------------------------
+ * NewLintArray allocates memory an array of N long int's and returns
+ * the pointer to the memory it allocates. If the request for
+ * memory storage cannot be satisfied, it returns NULL.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT long int *NewLintArray(long int N);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: NewRealArray
+ * -----------------------------------------------------------------
+ * NewRealArray allocates memory an array of N realtype and returns
+ * the pointer to the memory it allocates. If the request for
+ * memory storage cannot be satisfied, it returns NULL.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT realtype *NewRealArray(long int N);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: DestroyArray
+ * -----------------------------------------------------------------
+ * DestroyArray frees memory allocated by NewIntArray, NewLintArray,
+ * or NewRealArray.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void DestroyArray(void *p);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : AddIdentity
+ * -----------------------------------------------------------------
+ * AddIdentity adds 1.0 to the main diagonal (A_ii, i=0,1,...,N-1) of
+ * the M-by-N matrix A (M>= N) and stores the result back in A.
+ * AddIdentity is typically used with square matrices.
+ * AddIdentity does not check for M >= N and therefore a segmentation
+ * fault will occur if M < N!
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void AddIdentity(DlsMat A);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SetToZero
+ * -----------------------------------------------------------------
+ * SetToZero sets all the elements of the M-by-N matrix A to 0.0.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void SetToZero(DlsMat A);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: PrintMat
+ * -----------------------------------------------------------------
+ * This function prints the M-by-N (dense or band) matrix A to
+ * standard output as it would normally appear on paper.
+ * It is intended as debugging tools with small values of M and N.
+ * The elements are printed using the %g/%lg/%Lg option. 
+ * A blank line is printed before and after the matrix.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void PrintMat(DlsMat A);
+
+
+/*
+ * ==================================================================
+ * Exported function prototypes (functions working on realtype**)
+ * ==================================================================
+ */
+
+SUNDIALS_EXPORT realtype **newDenseMat(long int m, long int n);
+SUNDIALS_EXPORT realtype **newBandMat(long int n, long int smu, long int ml);
+SUNDIALS_EXPORT void destroyMat(realtype **a);
+SUNDIALS_EXPORT int *newIntArray(int n);
+SUNDIALS_EXPORT long int *newLintArray(long int n);
+SUNDIALS_EXPORT realtype *newRealArray(long int m);
+SUNDIALS_EXPORT void destroyArray(void *v);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_fnvector.h b/include/sundials/sundials_fnvector.h
new file mode 100644
index 0000000..0128266
--- /dev/null
+++ b/include/sundials/sundials_fnvector.h
@@ -0,0 +1,47 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file (companion of nvector.h) contains definitions 
+ * needed for the initialization of vector operations in Fortran.
+ * -----------------------------------------------------------------
+ */
+
+
+#ifndef _FNVECTOR_H
+#define _FNVECTOR_H
+
+#ifndef _SUNDIALS_CONFIG_H
+#define _SUNDIALS_CONFIG_H
+#include <sundials/sundials_config.h>
+#endif
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* SUNDIALS solver IDs */
+
+#define FCMIX_CVODE   1
+#define FCMIX_IDA     2
+#define FCMIX_KINSOL  3
+#define FCMIX_ARKODE  4
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_iterative.h b/include/sundials/sundials_iterative.h
new file mode 100644
index 0000000..fe4118a
--- /dev/null
+++ b/include/sundials/sundials_iterative.h
@@ -0,0 +1,247 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen and Alan C. Hindmarsh @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This header file contains declarations intended for use by
+ * generic iterative solvers of Ax = b. The enumeration gives
+ * symbolic names for the type  of preconditioning to be used.
+ * The function type declarations give the prototypes for the
+ * functions to be called within an iterative linear solver, that
+ * are responsible for
+ *    multiplying A by a given vector v (ATimesFn), and
+ *    solving the preconditioner equation Pz = r (PSolveFn).
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _ITERATIVE_H
+#define _ITERATIVE_H
+
+#include <sundials/sundials_nvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*
+ * -----------------------------------------------------------------
+ * enum : types of preconditioning                                
+ * -----------------------------------------------------------------
+ * PREC_NONE  : The iterative linear solver should not use             
+ *              preconditioning.                                       
+ *                                                                
+ * PREC_LEFT  : The iterative linear solver uses preconditioning on    
+ *              the left only.                                         
+ *                                                                
+ * PREC_RIGHT : The iterative linear solver uses preconditioning on    
+ *              the right only.                                        
+ *                                                                
+ * PREC_BOTH  : The iterative linear solver uses preconditioning on    
+ *              both the left and the right.                           
+ * -----------------------------------------------------------------
+ */
+
+enum { PREC_NONE, PREC_LEFT, PREC_RIGHT, PREC_BOTH };
+
+/*
+ * -----------------------------------------------------------------
+ * enum : types of Gram-Schmidt routines                          
+ * -----------------------------------------------------------------
+ * MODIFIED_GS  : The iterative solver uses the modified          
+ *                Gram-Schmidt routine ModifiedGS listed in this  
+ *                file.                                           
+ *                                                                
+ * CLASSICAL_GS : The iterative solver uses the classical         
+ *                Gram-Schmidt routine ClassicalGS listed in this 
+ *                file.                                           
+ * -----------------------------------------------------------------
+ */
+
+enum { MODIFIED_GS = 1, CLASSICAL_GS = 2 };
+
+/*
+ * -----------------------------------------------------------------
+ * Type: ATimesFn                                                 
+ * -----------------------------------------------------------------
+ * An ATimesFn multiplies Av and stores the result in z. The      
+ * caller is responsible for allocating memory for the z vector.  
+ * The parameter A_data is a pointer to any information about A   
+ * which the function needs in order to do its job. The vector v  
+ * is unchanged. An ATimesFn returns 0 if successful and a        
+ * non-zero value if unsuccessful.                                
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*ATimesFn)(void *A_data, N_Vector v, N_Vector z);
+
+/*
+ * -----------------------------------------------------------------
+ * Type: PSolveFn                                                 
+ * -----------------------------------------------------------------
+ * A PSolveFn solves the preconditioner equation Pz = r for the   
+ * vector z. The caller is responsible for allocating memory for  
+ * the z vector. The parameter P_data is a pointer to any         
+ * information about P which the function needs in order to do    
+ * its job. The parameter lr is input, and indicates whether P    
+ * is to be taken as the left preconditioner or the right         
+ * preconditioner: lr = 1 for left and lr = 2 for right.          
+ * If preconditioning is on one side only, lr can be ignored.     
+ * The vector r is unchanged.                                     
+ * A PSolveFn returns 0 if successful and a non-zero value if     
+ * unsuccessful.  On a failure, a negative return value indicates 
+ * an unrecoverable condition, while a positive value indicates   
+ * a recoverable one, in which the calling routine may reattempt  
+ * the solution after updating preconditioner data.               
+ * -----------------------------------------------------------------
+ */
+
+typedef int (*PSolveFn)(void *P_data, N_Vector r, N_Vector z, int lr);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: ModifiedGS                                           
+ * -----------------------------------------------------------------
+ * ModifiedGS performs a modified Gram-Schmidt orthogonalization  
+ * of the N_Vector v[k] against the p unit N_Vectors at           
+ * v[k-1], v[k-2], ..., v[k-p].                                   
+ *                                                                
+ * v is an array of (k+1) N_Vectors v[i], i=0, 1, ..., k.         
+ * v[k-1], v[k-2], ..., v[k-p] are assumed to have L2-norm        
+ * equal to 1.                                                    
+ *                                                                
+ * h is the output k by k Hessenberg matrix of inner products.    
+ * This matrix must be allocated row-wise so that the (i,j)th     
+ * entry is h[i][j]. The inner products (v[i],v[k]),              
+ * i=i0, i0+1, ..., k-1, are stored at h[i][k-1]. Here            
+ * i0=SUNMAX(0,k-p).
+ *                                                                
+ * k is the index of the vector in the v array that needs to be   
+ * orthogonalized against previous vectors in the v array.        
+ *                                                                
+ * p is the number of previous vectors in the v array against     
+ * which v[k] is to be orthogonalized.                            
+ *                                                                
+ * new_vk_norm is a pointer to memory allocated by the caller to  
+ * hold the Euclidean norm of the orthogonalized vector v[k].     
+ *                                                                
+ * If (k-p) < 0, then ModifiedGS uses p=k. The orthogonalized     
+ * v[k] is NOT normalized and is stored over the old v[k]. Once   
+ * the orthogonalization has been performed, the Euclidean norm   
+ * of v[k] is stored in (*new_vk_norm).                           
+ *                                                                
+ * ModifiedGS returns 0 to indicate success. It cannot fail.      
+ * -----------------------------------------------------------------
+ */                                                                
+
+SUNDIALS_EXPORT int ModifiedGS(N_Vector *v, realtype **h, int k, int p, 
+			       realtype *new_vk_norm);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: ClassicalGS                                          
+ * -----------------------------------------------------------------
+ * ClassicalGS performs a classical Gram-Schmidt                  
+ * orthogonalization of the N_Vector v[k] against the p unit      
+ * N_Vectors at v[k-1], v[k-2], ..., v[k-p]. The parameters v, h, 
+ * k, p, and new_vk_norm are as described in the documentation    
+ * for ModifiedGS.                                                
+ *                                                                
+ * temp is an N_Vector which can be used as workspace by the      
+ * ClassicalGS routine.                                           
+ *                                                                
+ * s is a length k array of realtype which can be used as         
+ * workspace by the ClassicalGS routine.                          
+ *
+ * ClassicalGS returns 0 to indicate success. It cannot fail.     
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int ClassicalGS(N_Vector *v, realtype **h, int k, int p, 
+				realtype *new_vk_norm, N_Vector temp, realtype *s);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: QRfact                                               
+ * -----------------------------------------------------------------
+ * QRfact performs a QR factorization of the Hessenberg matrix H. 
+ *                                                                
+ * n is the problem size; the matrix H is (n+1) by n.             
+ *                                                                
+ * h is the (n+1) by n Hessenberg matrix H to be factored. It is  
+ * stored row-wise.                                               
+ *                                                                
+ * q is an array of length 2*n containing the Givens rotations    
+ * computed by this function. A Givens rotation has the form:     
+ * | c  -s |                                                      
+ * | s   c |.                                                     
+ * The components of the Givens rotations are stored in q as      
+ * (c, s, c, s, ..., c, s).                                       
+ *                                                                
+ * job is a control flag. If job==0, then a new QR factorization  
+ * is performed. If job!=0, then it is assumed that the first     
+ * n-1 columns of h have already been factored and only the last  
+ * column needs to be updated.                                    
+ *                                                                
+ * QRfact returns 0 if successful. If a zero is encountered on    
+ * the diagonal of the triangular factor R, then QRfact returns   
+ * the equation number of the zero entry, where the equations are 
+ * numbered from 1, not 0. If QRsol is subsequently called in     
+ * this situation, it will return an error because it could not   
+ * divide by the zero diagonal entry.                             
+ * -----------------------------------------------------------------
+ */                                                                
+
+SUNDIALS_EXPORT int QRfact(int n, realtype **h, realtype *q, int job);
+
+/*                                                                
+ * -----------------------------------------------------------------
+ * Function: QRsol                                                
+ * -----------------------------------------------------------------
+ * QRsol solves the linear least squares problem                  
+ *                                                                
+ * min (b - H*x, b - H*x), x in R^n,                              
+ *                                                                
+ * where H is a Hessenberg matrix, and b is in R^(n+1).           
+ * It uses the QR factors of H computed by QRfact.                
+ *                                                                
+ * n is the problem size; the matrix H is (n+1) by n.             
+ *                                                                
+ * h is a matrix (computed by QRfact) containing the upper        
+ * triangular factor R of the original Hessenberg matrix H.       
+ *                                                                
+ * q is an array of length 2*n (computed by QRfact) containing    
+ * the Givens rotations used to factor H.                         
+ *                                                                
+ * b is the (n+1)-vector appearing in the least squares problem   
+ * above.                                                         
+ *                                                                
+ * On return, b contains the solution x of the least squares      
+ * problem, if QRsol was successful.                              
+ *                                                                
+ * QRsol returns a 0 if successful.  Otherwise, a zero was        
+ * encountered on the diagonal of the triangular factor R.        
+ * In this case, QRsol returns the equation number (numbered      
+ * from 1, not 0) of the zero entry.                              
+ * -----------------------------------------------------------------
+ */                                                                
+
+SUNDIALS_EXPORT int QRsol(int n, realtype **h, realtype *q, realtype *b);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_klu_impl.h b/include/sundials/sundials_klu_impl.h
new file mode 100644
index 0000000..3271bc5
--- /dev/null
+++ b/include/sundials/sundials_klu_impl.h
@@ -0,0 +1,57 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4558 $
+ * $Date: 2015-10-05 09:04:16 -0700 (Mon, 05 Oct 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the Sundials interface to 
+ * the KLU linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SUNKLU_IMPL_H
+#define _SUNKLU_IMPL_H
+
+#ifndef _S_KLU_H
+#define _S_KLU_H
+#include "klu.h"
+#endif
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Definition of KLUData
+ * -----------------------------------------------------------------
+ */
+ 
+typedef struct KLUDataRec {
+ 
+  /* Structure for KLU-specific data */
+ 
+  klu_symbolic *s_Symbolic;
+  klu_numeric  *s_Numeric;
+  klu_common    s_Common;
+  int           s_ordering;
+  int          (*sun_klu_solve)(klu_symbolic*, klu_numeric*, int, int, double*, klu_common*);
+ 
+} *KLUData;
+ 
+#ifdef __cplusplus
+} 
+#endif 
+ 
+#endif 
diff --git a/include/sundials/sundials_lapack.h b/include/sundials/sundials_lapack.h
new file mode 100644
index 0000000..08fcdaf
--- /dev/null
+++ b/include/sundials/sundials_lapack.h
@@ -0,0 +1,131 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * -----------------------------------------------------------------
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for a generic package of direct matrix
+ * operations for use with BLAS/LAPACK.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SUNDIALS_LAPACK_H
+#define _SUNDIALS_LAPACK_H
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * ==================================================================
+ * Blas and Lapack functions
+ * ==================================================================
+ */
+
+#if defined(SUNDIALS_F77_FUNC)
+
+#define dcopy_f77       SUNDIALS_F77_FUNC(dcopy, DCOPY)
+#define dscal_f77       SUNDIALS_F77_FUNC(dscal, DSCAL)
+#define dgemv_f77       SUNDIALS_F77_FUNC(dgemv, DGEMV)
+#define dtrsv_f77       SUNDIALS_F77_FUNC(dtrsv, DTRSV)
+#define dsyrk_f77       SUNDIALS_F77_FUNC(dsyrk, DSKYR)
+
+#define dgbtrf_f77      SUNDIALS_F77_FUNC(dgbtrf, DGBTRF)
+#define dgbtrs_f77      SUNDIALS_F77_FUNC(dgbtrs, DGBTRS)
+#define dgetrf_f77      SUNDIALS_F77_FUNC(dgetrf, DGETRF)
+#define dgetrs_f77      SUNDIALS_F77_FUNC(dgetrs, DGETRS)
+#define dgeqp3_f77      SUNDIALS_F77_FUNC(dgeqp3, DGEQP3)
+#define dgeqrf_f77      SUNDIALS_F77_FUNC(dgeqrf, DGEQRF)
+#define dormqr_f77      SUNDIALS_F77_FUNC(dormqr, DORMQR)
+#define dpotrf_f77      SUNDIALS_F77_FUNC(dpotrf, DPOTRF)
+#define dpotrs_f77      SUNDIALS_F77_FUNC(dpotrs, DPOTRS)
+
+#else
+
+#define dcopy_f77       dcopy_
+#define dscal_f77       dscal_
+#define dgemv_f77       dgemv_
+#define dtrsv_f77       dtrsv_
+#define dsyrk_f77       dsyrk_
+
+#define dgbtrf_f77      dgbtrf_
+#define dgbtrs_f77      dgbtrs_
+#define dgeqp3_f77      dgeqp3_
+#define dgeqrf_f77      dgeqrf_
+#define dgetrf_f77      dgetrf_
+#define dgetrs_f77      dgetrs_
+#define dormqr_f77      dormqr_
+#define dpotrf_f77      dpotrf_
+#define dpotrs_f77      dpotrs_
+
+#endif
+
+/* Level-1 BLAS */
+  
+extern void dcopy_f77(int *n, const double *x, const int *inc_x, double *y, const int *inc_y);
+extern void dscal_f77(int *n, const double *alpha, double *x, const int *inc_x);
+
+/* Level-2 BLAS */
+
+extern void dgemv_f77(const char *trans, int *m, int *n, const double *alpha, const double *a, 
+		      int *lda, const double *x, int *inc_x, const double *beta, double *y, int *inc_y, 
+		      int len_trans);
+
+extern void dtrsv_f77(const char *uplo, const char *trans, const char *diag, const int *n, 
+		      const double *a, const int *lda, double *x, const int *inc_x, 
+		      int len_uplo, int len_trans, int len_diag);
+
+/* Level-3 BLAS */
+
+extern void dsyrk_f77(const char *uplo, const char *trans, const int *n, const int *k, 
+		      const double *alpha, const double *a, const int *lda, const double *beta, 
+		      const double *c, const int *ldc, int len_uplo, int len_trans);
+  
+/* LAPACK */
+
+extern void dgbtrf_f77(const int *m, const int *n, const int *kl, const int *ku, 
+		       double *ab, int *ldab, int *ipiv, int *info);
+
+extern void dgbtrs_f77(const char *trans, const int *n, const int *kl, const int *ku, const int *nrhs, 
+		       double *ab, const int *ldab, int *ipiv, double *b, const int *ldb, 
+		       int *info, int len_trans);
+
+
+extern void dgeqp3_f77(const int *m, const int *n, double *a, const int *lda, int *jpvt, double *tau, 
+		       double *work, const int *lwork, int *info);
+
+extern void dgeqrf_f77(const int *m, const int *n, double *a, const int *lda, double *tau, double *work, 
+		       const int *lwork, int *info);
+
+extern void dgetrf_f77(const int *m, const int *n, double *a, int *lda, int *ipiv, int *info);
+
+extern void dgetrs_f77(const char *trans, const int *n, const int *nrhs, double *a, const int *lda, 
+		       int *ipiv, double *b, const int *ldb, int *info, int len_trans);
+
+
+extern void dormqr_f77(const char *side, const char *trans, const int *m, const int *n, const int *k, 
+		       double *a, const int *lda, double *tau, double *c, const int *ldc, 
+		       double *work, const int *lwork, int *info, int len_side, int len_trans);
+
+extern void dpotrf_f77(const char *uplo, const int *n, double *a, int *lda, int *info, int len_uplo);
+
+extern void dpotrs_f77(const char *uplo, const int *n, const int *nrhs, double *a, const int *lda, 
+		       double *b, const int *ldb, int * info, int len_uplo);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_math.h b/include/sundials/sundials_math.h
new file mode 100644
index 0000000..7e25d3e
--- /dev/null
+++ b/include/sundials/sundials_math.h
@@ -0,0 +1,133 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for a simple C-language math library. The
+ * routines listed here work with the type realtype as defined in
+ * the header file sundials_types.h.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SUNDIALSMATH_H
+#define _SUNDIALSMATH_H
+
+#include <sundials/sundials_types.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Macros : MIN and MAX
+ * -----------------------------------------------------------------
+ * MIN(A,B) returns the minimum of A and B
+ *
+ * MAX(A,B) returns the maximum of A and B
+ *
+ * SQR(A) returns A^2
+ * -----------------------------------------------------------------
+ */
+
+#ifndef SUNMIN
+#define SUNMIN(A, B) ((A) < (B) ? (A) : (B))
+#endif
+
+#ifndef SUNMAX
+#define SUNMAX(A, B) ((A) > (B) ? (A) : (B))
+#endif
+
+#ifndef SUNSQR
+#define SUNSQR(A) ((A)*(A))
+#endif
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SUNRpowerI
+ * -----------------------------------------------------------------
+ * Usage : int exponent;
+ *         realtype base, ans;
+ *         ans = SUNRpowerI(base,exponent);
+ * -----------------------------------------------------------------
+ * SUNRpowerI returns the value of base^exponent, where base is of type
+ * realtype and exponent is of type int.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT realtype SUNRpowerI(realtype base, int exponent);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SUNRpowerR
+ * -----------------------------------------------------------------
+ * Usage : realtype base, exponent, ans;
+ *         ans = SUNRpowerR(base,exponent);
+ * -----------------------------------------------------------------
+ * SUNRpowerR returns the value of base^exponent, where both base and
+ * exponent are of type realtype. If base < ZERO, then SUNRpowerR
+ * returns ZERO.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT realtype SUNRpowerR(realtype base, realtype exponent);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SUNRsqrt
+ * -----------------------------------------------------------------
+ * Usage : realtype sqrt_x;
+ *         sqrt_x = SUNRsqrt(x);
+ * -----------------------------------------------------------------
+ * SUNRsqrt(x) returns the square root of x. If x < ZERO, then
+ * SUNRsqrt returns ZERO.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT realtype SUNRsqrt(realtype x);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SUNRabs
+ * -----------------------------------------------------------------
+ * Usage : realtype abs_x;
+ *         abs_x = SUNRabs(x);
+ * -----------------------------------------------------------------
+ * SUNRabs(x) returns the absolute value of x.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT realtype SUNRabs(realtype x);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SUNRexp
+ * -----------------------------------------------------------------
+ * Usage : realtype exp_x;
+ *         exp_x = SUNRexp(x);
+ * -----------------------------------------------------------------
+ * SUNRexp(x) returns e^x (base-e exponential function).
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT realtype SUNRexp(realtype x);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_nvector.h b/include/sundials/sundials_nvector.h
new file mode 100644
index 0000000..7fe88e1
--- /dev/null
+++ b/include/sundials/sundials_nvector.h
@@ -0,0 +1,403 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4803 $
+ * $Date: 2016-07-08 14:01:04 -0700 (Fri, 08 Jul 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for a generic NVECTOR package.
+ * It defines the N_Vector structure (_generic_N_Vector) which
+ * contains the following fields:
+ *   - an implementation-dependent 'content' field which contains
+ *     the description and actual data of the vector
+ *   - an 'ops' filed which contains a structure listing operations
+ *     acting on such vectors
+ *
+ * Part I of this file contains type declarations for the
+ * _generic_N_Vector and _generic_N_Vector_Ops structures, as well
+ * as references to pointers to such structures (N_Vector).
+ *
+ * Part II of this file contains the prototypes for the vector
+ * functions which operate on N_Vector.
+ *
+ * At a minimum, a particular implementation of an NVECTOR must
+ * do the following:
+ *  - specify the 'content' field of N_Vector,
+ *  - implement the operations on those N_Vectors,
+ *  - provide a constructor routine for new vectors
+ *
+ * Additionally, an NVECTOR implementation may provide the following:
+ *  - macros to access the underlying N_Vector data
+ *  - a constructor for an array of N_Vectors
+ *  - a constructor for an empty N_Vector (i.e., a new N_Vector with
+ *    a NULL data pointer).
+ *  - a routine to print the content of an N_Vector
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _NVECTOR_H
+#define _NVECTOR_H
+
+#include <sundials/sundials_types.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  
+/*
+ * -----------------------------------------------------------------
+ * Implemented N_Vector types
+ * -----------------------------------------------------------------
+ */
+  
+typedef enum {
+  SUNDIALS_NVEC_SERIAL, 
+  SUNDIALS_NVEC_PARALLEL, 
+  SUNDIALS_NVEC_OPENMP, 
+  SUNDIALS_NVEC_PTHREADS, 
+  SUNDIALS_NVEC_PARHYP, 
+  SUNDIALS_NVEC_PETSC,
+  SUNDIALS_NVEC_CUSTOM
+} N_Vector_ID;
+  
+/*
+ * -----------------------------------------------------------------
+ * Generic definition of N_Vector
+ * -----------------------------------------------------------------
+ */
+
+/* Forward reference for pointer to N_Vector_Ops object */
+typedef struct _generic_N_Vector_Ops *N_Vector_Ops;
+
+/* Forward reference for pointer to N_Vector object */
+typedef struct _generic_N_Vector *N_Vector;
+
+/* Define array of N_Vectors */
+typedef N_Vector *N_Vector_S;
+
+/* Structure containing function pointers to vector operations  */  
+struct _generic_N_Vector_Ops {
+  N_Vector_ID (*nvgetvectorid)(N_Vector);
+  N_Vector    (*nvclone)(N_Vector);
+  N_Vector    (*nvcloneempty)(N_Vector);
+  void        (*nvdestroy)(N_Vector);
+  void        (*nvspace)(N_Vector, long int *, long int *);
+  realtype*   (*nvgetarraypointer)(N_Vector);
+  void        (*nvsetarraypointer)(realtype *, N_Vector);
+  void        (*nvlinearsum)(realtype, N_Vector, realtype, N_Vector, N_Vector); 
+  void        (*nvconst)(realtype, N_Vector);
+  void        (*nvprod)(N_Vector, N_Vector, N_Vector);
+  void        (*nvdiv)(N_Vector, N_Vector, N_Vector);
+  void        (*nvscale)(realtype, N_Vector, N_Vector);
+  void        (*nvabs)(N_Vector, N_Vector);
+  void        (*nvinv)(N_Vector, N_Vector);
+  void        (*nvaddconst)(N_Vector, realtype, N_Vector);
+  realtype    (*nvdotprod)(N_Vector, N_Vector);
+  realtype    (*nvmaxnorm)(N_Vector);
+  realtype    (*nvwrmsnorm)(N_Vector, N_Vector);
+  realtype    (*nvwrmsnormmask)(N_Vector, N_Vector, N_Vector);
+  realtype    (*nvmin)(N_Vector);
+  realtype    (*nvwl2norm)(N_Vector, N_Vector);
+  realtype    (*nvl1norm)(N_Vector);
+  void        (*nvcompare)(realtype, N_Vector, N_Vector);
+  booleantype (*nvinvtest)(N_Vector, N_Vector);
+  booleantype (*nvconstrmask)(N_Vector, N_Vector, N_Vector);
+  realtype    (*nvminquotient)(N_Vector, N_Vector);
+};
+
+/*
+ * -----------------------------------------------------------------
+ * A vector is a structure with an implementation-dependent
+ * 'content' field, and a pointer to a structure of vector
+ * operations corresponding to that implementation.
+ * -----------------------------------------------------------------
+ */
+
+struct _generic_N_Vector {
+  void *content;
+  struct _generic_N_Vector_Ops *ops;
+};
+  
+/*
+ * -----------------------------------------------------------------
+ * Functions exported by NVECTOR module
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * N_VGetVectorID
+ *   Returns an identifier for the vector type from enumeration 
+ *   N_Vector_ID.
+ *
+ * N_VClone
+ *   Creates a new vector of the same type as an existing vector.
+ *   It does not copy the vector, but rather allocates storage for
+ *   the new vector.
+ *
+ * N_VCloneEmpty
+ *   Creates a new vector of the same type as an existing vector,
+ *   but does not allocate storage.
+ *
+ * N_VDestroy
+ *   Destroys a vector created with N_VClone.
+ *
+ * N_VSpace
+ *   Returns space requirements for one N_Vector (type 'realtype' in
+ *   lrw and type 'long int' in liw).
+ *
+ * N_VGetArrayPointer
+ *   Returns a pointer to the data component of the given N_Vector.
+ *   NOTE: This function assumes that the internal data is stored
+ *   as a contiguous 'realtype' array. This routine is only used in
+ *   the solver-specific interfaces to the dense and banded linear
+ *   solvers, as well as the interfaces to  the banded preconditioners
+ *   distributed with SUNDIALS.
+ *   
+ * N_VSetArrayPointer
+ *   Overwrites the data field in the given N_Vector with a user-supplied
+ *   array of type 'realtype'.
+ *   NOTE: This function assumes that the internal data is stored
+ *   as a contiguous 'realtype' array. This routine is only used in
+ *   the interfaces to the dense linear solver.
+ *
+ * N_VLinearSum
+ *   Performs the operation z = a*x + b*y
+ *
+ * N_VConst
+ *   Performs the operation z[i] = c for i = 0, 1, ..., N-1
+ *
+ * N_VProd
+ *   Performs the operation z[i] = x[i]*y[i] for i = 0, 1, ..., N-1
+ *
+ * N_VDiv
+ *   Performs the operation z[i] = x[i]/y[i] for i = 0, 1, ..., N-1
+ *
+ * N_VScale
+ *   Performs the operation z = c*x
+ *
+ * N_VAbs
+ *   Performs the operation z[i] = |x[i]| for i = 0, 1, ..., N-1
+ *
+ * N_VInv
+ *   Performs the operation z[i] = 1/x[i] for i = 0, 1, ..., N-1
+ *   This routine does not check for division by 0. It should be
+ *   called only with an N_Vector x which is guaranteed to have
+ *   all non-zero components.
+ *
+ * N_VAddConst
+ *   Performs the operation z[i] = x[i] + b   for i = 0, 1, ..., N-1
+ *
+ * N_VDotProd
+ *   Returns the dot product of two vectors:
+ *         sum (i = 0 to N-1) {x[i]*y[i]}
+ *
+ * N_VMaxNorm
+ *   Returns the maximum norm of x:
+ *         max (i = 0 to N-1) ABS(x[i])
+ *
+ * N_VWrmsNorm
+ *   Returns the weighted root mean square norm of x with weight 
+ *   vector w:
+ *         sqrt [(sum (i = 0 to N-1) {(x[i]*w[i])^2})/N]
+ *
+ * N_VWrmsNormMask
+ *   Returns the weighted root mean square norm of x with weight
+ *   vector w, masked by the elements of id:
+ *         sqrt [(sum (i = 0 to N-1) {(x[i]*w[i]*msk[i])^2})/N]
+ *   where msk[i] = 1.0 if id[i] > 0 and
+ *         msk[i] = 0.0 if id[i] < 0
+ *
+ * N_VMin
+ *   Returns the smallest element of x:
+ *         min (i = 0 to N-1) x[i]
+ *
+ * N_VWL2Norm
+ *   Returns the weighted Euclidean L2 norm of x with weight 
+ *   vector w:
+ *         sqrt [(sum (i = 0 to N-1) {(x[i]*w[i])^2})]
+ *
+ * N_VL1Norm
+ *   Returns the L1 norm of x:
+ *         sum (i = 0 to N-1) {ABS(x[i])}
+ *
+ * N_VCompare
+ *   Performs the operation
+ *          z[i] = 1.0 if ABS(x[i]) >= c   i = 0, 1, ..., N-1
+ *                 0.0 otherwise
+ *
+ * N_VInvTest
+ *   Performs the operation z[i] = 1/x[i] with a test for 
+ *   x[i] == 0.0 before inverting x[i].
+ *   This routine returns TRUE if all components of x are non-zero 
+ *   (successful inversion) and returns FALSE otherwise.
+ *
+ * N_VConstrMask
+ *   Performs the operation : 
+ *       m[i] = 1.0 if constraint test fails for x[i]
+ *       m[i] = 0.0 if constraint test passes for x[i]
+ *   where the constraint tests are as follows:
+ *      If c[i] = +2.0, then x[i] must be >  0.0.
+ *      If c[i] = +1.0, then x[i] must be >= 0.0.
+ *      If c[i] = -1.0, then x[i] must be <= 0.0.
+ *      If c[i] = -2.0, then x[i] must be <  0.0.
+ *   This routine returns a boolean FALSE if any element failed
+ *   the constraint test, TRUE if all passed. It also sets a
+ *   mask vector m, with elements equal to 1.0 where the
+ *   corresponding constraint test failed, and equal to 0.0
+ *   where the constraint test passed.
+ *   This routine is specialized in that it is used only for
+ *   constraint checking.
+ *
+ * N_VMinQuotient
+ *   Performs the operation : 
+ *       minq  = min ( num[i]/denom[i]) over all i such that   
+ *       denom[i] != 0.
+ *   This routine returns the minimum of the quotients obtained
+ *   by term-wise dividing num[i] by denom[i]. A zero element
+ *   in denom will be skipped. If no such quotients are found,
+ *   then the large value BIG_REAL is returned.
+ *
+ * -----------------------------------------------------------------
+ *
+ * The following table lists the vector functions used by
+ * different modules in SUNDIALS. The symbols in the table
+ * have the following meaning:
+ * S    -  called by the solver;
+ * D    -  called by the dense linear solver module
+ * B    -  called by the band linear solver module
+ * Di   -  called by the diagonal linear solver module
+ * I    -  called by the iterative linear solver module
+ * BP   -  called by the band preconditioner module
+ * BBDP -  called by the band-block diagonal preconditioner module
+ * F    -  called by the Fortran-to-C interface
+ *
+ *                  ------------------------------------------------
+ *                                         MODULES                  
+ * NVECTOR          ------------------------------------------------
+ * FUNCTIONS          CVODE/CVODES          IDA             KINSOL    
+ * -----------------------------------------------------------------
+ * N_VGetVectorID     
+ * -----------------------------------------------------------------
+ * N_VClone           S Di I                S I BBDP        S I BBDP
+ * -----------------------------------------------------------------
+ * N_VCloneEmpty      F                     F               F
+ * -----------------------------------------------------------------
+ * N_VDestroy         S Di I                S I BBDP        S I BBDP
+ * -----------------------------------------------------------------
+ * N_VSpace           S                     S               S         
+ * -----------------------------------------------------------------
+ * N_VGetArrayPointer D B BP BBDP F         D B BBDP        BBDP F     
+ * -----------------------------------------------------------------
+ * N_VSetArrayPointer D F                   D               F
+ * -----------------------------------------------------------------
+ * N_VLinearSum       S D Di I              S D I           S I       
+ * -----------------------------------------------------------------
+ * N_VConst           S I                   S I             I       
+ * -----------------------------------------------------------------
+ * N_VProd            S Di I                S I             S I       
+ * -----------------------------------------------------------------
+ * N_VDiv             S Di I                S I             S I
+ * -----------------------------------------------------------------
+ * N_VScale           S D B Di I BP BBDP    S D B I BBDP    S I BBDP  
+ * -----------------------------------------------------------------
+ * N_VAbs             S                     S               S         
+ * -----------------------------------------------------------------
+ * N_VInv             S Di                  S               S         
+ * -----------------------------------------------------------------
+ * N_VAddConst        S Di                  S                        
+ * -----------------------------------------------------------------
+ * N_VDotProd         I                     I               I         
+ * -----------------------------------------------------------------
+ * N_VMaxNorm         S                     S               S         
+ * -----------------------------------------------------------------
+ * N_VWrmsNorm        S D B I BP BBDP       S                         
+ * -----------------------------------------------------------------
+ * N_VWrmsNormMask                          S                         
+ * -----------------------------------------------------------------
+ * N_VMin             S                     S               S         
+ * -----------------------------------------------------------------
+ * N_VWL2Norm                                               S I       
+ * -----------------------------------------------------------------
+ * N_VL1Norm                                                I
+ * -----------------------------------------------------------------
+ * N_VCompare         Di                    S                         
+ * -----------------------------------------------------------------
+ * N_VInvTest         Di                                              
+ * -----------------------------------------------------------------
+ * N_VConstrMask                            S               S         
+ * -----------------------------------------------------------------
+ * N_VMinQuotient                           S               S         
+ * -----------------------------------------------------------------
+ */
+  
+SUNDIALS_EXPORT N_Vector_ID N_VGetVectorID(N_Vector w);
+SUNDIALS_EXPORT N_Vector N_VClone(N_Vector w);
+SUNDIALS_EXPORT N_Vector N_VCloneEmpty(N_Vector w);
+SUNDIALS_EXPORT void N_VDestroy(N_Vector v);
+SUNDIALS_EXPORT void N_VSpace(N_Vector v, long int *lrw, long int *liw);
+SUNDIALS_EXPORT realtype *N_VGetArrayPointer(N_Vector v);
+SUNDIALS_EXPORT void N_VSetArrayPointer(realtype *v_data, N_Vector v);
+SUNDIALS_EXPORT void N_VLinearSum(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VConst(realtype c, N_Vector z);
+SUNDIALS_EXPORT void N_VProd(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VDiv(N_Vector x, N_Vector y, N_Vector z);
+SUNDIALS_EXPORT void N_VScale(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAbs(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VInv(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT void N_VAddConst(N_Vector x, realtype b, N_Vector z);
+SUNDIALS_EXPORT realtype N_VDotProd(N_Vector x, N_Vector y);
+SUNDIALS_EXPORT realtype N_VMaxNorm(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWrmsNorm(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VWrmsNormMask(N_Vector x, N_Vector w, N_Vector id);
+SUNDIALS_EXPORT realtype N_VMin(N_Vector x);
+SUNDIALS_EXPORT realtype N_VWL2Norm(N_Vector x, N_Vector w);
+SUNDIALS_EXPORT realtype N_VL1Norm(N_Vector x);
+SUNDIALS_EXPORT void N_VCompare(realtype c, N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VInvTest(N_Vector x, N_Vector z);
+SUNDIALS_EXPORT booleantype N_VConstrMask(N_Vector c, N_Vector x, N_Vector m);
+SUNDIALS_EXPORT realtype N_VMinQuotient(N_Vector num, N_Vector denom);
+
+/*
+ * -----------------------------------------------------------------
+ * Additional functions exported by NVECTOR module
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * N_VCloneEmptyVectorArray
+ *   Creates (by cloning 'w') an array of 'count' empty N_Vectors 
+ *
+ * N_VCloneVectorArray
+ *   Creates (by cloning 'w') an array of 'count' N_Vectors 
+ *
+ * N_VDestroyVectorArray
+ *   Frees memory for an array of 'count' N_Vectors that was
+ *   created by a call to N_VCloneVectorArray
+ *
+ * These functions are used by the SPGMR iterative linear solver 
+ * module and by the CVODES and IDAS solvers.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT N_Vector *N_VCloneEmptyVectorArray(int count, N_Vector w);
+SUNDIALS_EXPORT N_Vector *N_VCloneVectorArray(int count, N_Vector w);
+SUNDIALS_EXPORT void N_VDestroyVectorArray(N_Vector *vs, int count);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_pcg.h b/include/sundials/sundials_pcg.h
new file mode 100644
index 0000000..8ec24f2
--- /dev/null
+++ b/include/sundials/sundials_pcg.h
@@ -0,0 +1,156 @@
+/*---------------------------------------------------------------
+ Programmer(s): Daniel R. Reynolds @ SMU
+ ----------------------------------------------------------------
+ Copyright (c) 2013, Southern Methodist University.
+ All rights reserved.
+ For details, see the LICENSE file.
+ ----------------------------------------------------------------
+ This is the header for the preconditioned conjugate gradient 
+ solver in SUNDIALS.
+ ---------------------------------------------------------------*/
+
+#ifndef _PCG_H
+#define _PCG_H
+
+#include <sundials/sundials_iterative.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------
+ Types: struct PcgMemRec and struct *PcgMem
+ ----------------------------------------------------------------
+ A variable declaration of type struct *PcgMem denotes a pointer
+ to a data structure of type struct PcgMemRec. The PcgMemRec
+ structure contains numerous fields that must be accessed by the
+ PCG linear solver module.
+  * l_max  maximum Krylov subspace dimension that PcgSolve will
+       be permitted to use
+  * r  vector (type N_Vector) which holds the preconditioned 
+       linear system residual
+  * p, z and Ap vectors (type N_Vector) used for workspace by
+       the PCG algorithm
+  * vtemp  scratch vector (type N_Vector) used as temporary 
+       vector storage
+ --------------------------------------------------------------*/
+typedef struct {
+  int l_max;
+  N_Vector r;
+  N_Vector p;
+  N_Vector z;
+  N_Vector Ap;
+} PcgMemRec, *PcgMem;
+
+/*---------------------------------------------------------------
+ Function : PcgMalloc
+ ----------------------------------------------------------------
+ PcgMalloc allocates additional memory needed by the PCG linear 
+ solver module.
+
+   l_max  maximum Krylov subspace dimension that PcgSolve will
+          be permitted to use
+
+   vec_tmpl implementation-specific template vector (of type 
+          N_Vector)
+
+ If successful, PcgMalloc returns a non-NULL memory pointer. If
+ an error occurs, then a NULL pointer is returned.
+ --------------------------------------------------------------*/
+
+SUNDIALS_EXPORT PcgMem PcgMalloc(int l_max, N_Vector vec_tmpl);
+
+/*---------------------------------------------------------------
+ Function : PcgSolve
+ ----------------------------------------------------------------
+ PcgSolve solves the linear system Ax = b by means of a 
+ preconditioned Conjugate-Gradient (PCG) iterative method.
+
+  mem  pointer to an internal memory block allocated during a
+       prior call to PcgMalloc
+
+  A_data  pointer to a data structure containing information
+       about the coefficient matrix A (passed to user-supplied
+       function referenced by atimes (function pointer))
+
+  x  vector (type N_Vector) containing initial guess x_0 upon
+       entry, but which upon return contains an approximate 
+       solution of the linear system Ax = b (solution only 
+       valid if return value is either PCG_SUCCESS or 
+       PCG_RES_REDUCED)
+
+  b  vector (type N_Vector) set to the right-hand side vector b
+       of the linear system (unchanged by function)
+
+  pretype  variable (type int) indicating the type of
+       preconditioning to be used (see sundials_iterative.h);
+       Note: since CG is for symmetric problems, preconditioning 
+       is applied symmetrically by default, so any nonzero flag 
+       will indicate to use the preconditioner.
+
+  delta  tolerance on the L2 norm of the residual (if the 
+       return value == PCG_SUCCESS, then ||b-Ax||_L2 <= delta)
+
+  P_data  pointer to a data structure containing preconditioner
+       information (passed to user-supplied function referenced
+       by psolve (function pointer))
+
+  w  vector (type N_Vector) used in computing the residual norm 
+       for stopping solver (unchanged by function).  This is 
+       needed since PCG cannot utilize the same scaling vectors 
+       as used in the other SUNDIALS solvers, due to 
+       symmetry-breaking nature of scaling operators.
+
+  atimes  user-supplied routine responsible for computing the
+       matrix-vector product Ax (see sundials_iterative.h)
+
+  psolve  user-supplied routine responsible for solving the
+       preconditioned linear system Pz = r (ignored if
+       pretype == PREC_NONE) (see sundials_iterative.h)
+
+  res_norm  pointer (type realtype*) to the L2 norm of the
+       residual (if return value is either PCG_SUCCESS or 
+       PCG_RES_REDUCED, then
+            *res_norm = ||b-Ax||_L2, where x is
+       the computed approximate solution)
+
+  nli  pointer (type int*) to the total number of linear
+       iterations performed
+
+  nps  pointer (type int*) to the total number of calls made
+       to the psolve routine
+ --------------------------------------------------------------*/
+
+SUNDIALS_EXPORT int PcgSolve(PcgMem mem, void *A_data, N_Vector x, N_Vector b,
+			     int pretype, realtype delta, void *P_data, 
+			     N_Vector w, ATimesFn atimes, PSolveFn psolve,
+			     realtype *res_norm, int *nli, int *nps);
+
+/* Return values for PcgSolve */
+#define PCG_SUCCESS            0  /* PCG algorithm converged          */
+#define PCG_RES_REDUCED        1  /* PCG did NOT converge, but the
+				       residual was reduced           */
+#define PCG_CONV_FAIL          2  /* PCG algorithm failed to converge */
+#define PCG_PSOLVE_FAIL_REC    3  /* psolve failed recoverably        */
+#define PCG_ATIMES_FAIL_REC    4  /* atimes failed recoverably        */
+#define PCG_PSET_FAIL_REC      5  /* pset faild recoverably           */
+
+#define PCG_MEM_NULL          -1  /* mem argument is NULL             */
+#define PCG_ATIMES_FAIL_UNREC -2  /* atimes returned failure flag     */
+#define PCG_PSOLVE_FAIL_UNREC -3  /* psolve failed unrecoverably      */
+#define PCG_PSET_FAIL_UNREC   -4  /* pset failed unrecoverably        */
+
+/*---------------------------------------------------------------
+ Function : PcgFree
+ ----------------------------------------------------------------
+ PcgFree frees the memory allocated by a call to PcgMalloc.
+ It is illegal to use the pointer mem after a call to PcgFree.
+ ---------------------------------------------------------------*/
+
+SUNDIALS_EXPORT void PcgFree(PcgMem mem);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_sparse.h b/include/sundials/sundials_sparse.h
new file mode 100644
index 0000000..358f273
--- /dev/null
+++ b/include/sundials/sundials_sparse.h
@@ -0,0 +1,237 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4771 $
+ * $Date: 2016-06-03 13:21:57 -0700 (Fri, 03 Jun 2016) $
+ * -----------------------------------------------------------------
+ * Programmer: Carol Woodward, Slaven Peles @ LLNL,
+ *             Daniel R. Reynolds @ SMU.
+ * -----------------------------------------------------------------
+ * For details, see the LICENSE file.
+ * -----------------------------------------------------------------
+ * This header file contains definitions and declarations for use by
+ * sparse linear solvers for Ax = b. 
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SUNDIALS_SPARSE_H
+#define _SUNDIALS_SPARSE_H
+
+#include <stdio.h>
+
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * ==================================================================
+ * Type definitions
+ * ==================================================================
+ */
+
+#define CSC_MAT 0
+#define CSR_MAT 1
+
+/*
+ * -----------------------------------------------------------------
+ * Type : SlsMat
+ * -----------------------------------------------------------------
+ * The type SlsMat is defined to be a pointer to a structure
+ * with various sizes, a data field, and arrays for the row and 
+ * column information for the sparse matrix entries.
+ * The M and N fields indicates the number 
+ * of rows and columns, respectively. The data field is a one 
+ * dimensional array used for component storage. The NNZ field indicates
+ * the number of nonzero entries in the matrix. The integer array, asub, 
+ * holds the row index for each of the matrix entries.  The integer
+ * array, xa, holds the index entry for the starting value of each column.
+ * -----------------------------------------------------------------
+ * The relevant fields in DlsMat are:
+ *    M     - number of rows
+ *    N     - number of columns
+ *    NNZ   - the number of nonzero entries in the matrix
+ *    NP    - number of index pointers
+ *    data  - pointer to a contiguous block of realtype variables
+ *    sparsetype - type of sparse matrix: compressed sparse column or row
+ *    indexvals  - indices of each nonzero entry (columns or rows)
+ *    indexptrs  - starting index of the first entry in data for each slice
+ *    rowvals - pointer to row indices of each nonzero entry
+ *    colptrs - pointer to starting indices in data array for each column
+ *    colvals - pointer to column indices of each nonzero entry
+ *    rowptrs - pointer to starting indices in data array for each row
+ *
+ * The nonzero entries of the matrix are stored in
+ * compressed column format.  Row indices of entries in 
+ * column j are stored in rowvals[colptrs[j]] through rowvals[colptrs[j+i]-1]
+ * and corresponding numerical values of the matrix are stored 
+ * in the same entries of data.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct _SlsMat {
+  int M;
+  int N;
+  int NNZ;
+  int NP;
+  realtype *data;
+  int sparsetype;
+  int *indexvals;
+  int *indexptrs;
+  /* CSC indices */
+  int **rowvals;
+  int **colptrs;
+  /* CSR indices */
+  int **colvals;
+  int **rowptrs;
+} *SlsMat;
+
+/*
+ * ==================================================================
+ * Exported function prototypes (functions working on SlsMat)
+ * ==================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function: SparseNewMat
+ * -----------------------------------------------------------------
+ * SparseNewMat allocates memory for a compressed column sparse
+ * matrix with M rows, N columns, NNZ nonzeros and of sparsetype 
+ * type (CSC or CSR matrix). SparseNewMat returns NULL if the 
+ * request for matrix storage cannot be satisfied. See the above 
+ * documentation for the type SlsMat for matrix storage details.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT SlsMat SparseNewMat(int M, int N, int NNZ, int sparsetype);
+
+/*
+ * -----------------------------------------------------------------
+ * Function: SparseFromDenseMat
+ * -----------------------------------------------------------------
+ * SlsConvertDense creates a new CSC matrix from an existing
+ * dense/band matrix by copying all nonzero values into the sparse 
+ * matrix structure.  SlsConvertDense returns NULL if the request 
+ * for matrix storage cannot be satisfied. 
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT SlsMat SparseFromDenseMat(const DlsMat A, int sparsetype);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: SparseDestroyMat
+ * -----------------------------------------------------------------
+ * SparseDestroyMat frees the memory allocated by SparseNewMat
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int SparseDestroyMat(SlsMat A);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SparseSetMatToZero
+ * -----------------------------------------------------------------
+ * SetToZero sets all the elements of the sparse matrix A to 0.0.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int SparseSetMatToZero(SlsMat A);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: SparseCopyMat
+ * -----------------------------------------------------------------
+ * This function copies sparse matrix A into sparse matrix B.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int SparseCopyMat(const SlsMat A, SlsMat B);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: SparseScaleMat
+ * -----------------------------------------------------------------
+ * This function scales all data entries of a sparse matrix A 
+ * by the realtype number in b.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int SparseScaleMat(realtype b, SlsMat A);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: SparseAddIdentityMat
+ * -----------------------------------------------------------------
+ * This function adds 1 to every diagonal entry of A.
+ * Note that the resulting matrix may have more nonzero entries than 
+ * the original.  This is accounted for, so that the return matrix 
+ * may be larger than the one sent in.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int SparseAddIdentityMat(SlsMat A);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: SparseAddMat
+ * -----------------------------------------------------------------
+ * This function adds two sparse matrices: A = A+B.
+ * Note that the resulting matrix may have more nonzero entries than
+ * either of the original matrices.  This is accounted for, so that 
+ * the return matrix may be larger than the ones sent in.  Upon 
+ * successful completion, the return value is zero; otherwise 1 is 
+ * returned.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int SparseAddMat(SlsMat A, const SlsMat B);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: SparseReallocMat
+ * -----------------------------------------------------------------
+ * This function reallocs internal arrays so that the resulting matrix 
+ * holds colptrs[N] nonzeros.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int SparseReallocMat(SlsMat A);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: SparseMatvec
+ * -----------------------------------------------------------------
+ * This function computes the matrix-vector product, y=A*x, where A
+ * is a sparse matrix of dimension MxN, x is a realtype array of 
+ * length N, and y is a realtype array of length M. Upon successful
+ * completion, the return value is zero; otherwise 1 is returned.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int SparseMatvec(const SlsMat A, const realtype *x, realtype *y);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: SparsePrintMat
+ * -----------------------------------------------------------------
+ * This function prints the compressed column matrix information for 
+ * matrix A to standard output.
+ * It is intended as a debugging tool with small values of NNZ.
+ * The elements are printed using the %g/%lg/%Lg option. 
+ * A blank line is printed before and after the matrix.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void SparsePrintMat(const SlsMat A, FILE* outfile);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_spbcgs.h b/include/sundials/sundials_spbcgs.h
new file mode 100644
index 0000000..9c6b6a6
--- /dev/null
+++ b/include/sundials/sundials_spbcgs.h
@@ -0,0 +1,204 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Peter Brown and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the implementation of the scaled,
+ * preconditioned Bi-CGSTAB (SPBCG) iterative linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SPBCG_H
+#define _SPBCG_H
+
+#include <sundials/sundials_iterative.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Types: struct SpbcgMemRec and struct *SpbcgMem
+ * -----------------------------------------------------------------
+ * A variable declaration of type struct *SpbcgMem denotes a pointer
+ * to a data structure of type struct SpbcgMemRec. The SpbcgMemRec
+ * structure contains numerous fields that must be accessed by the
+ * SPBCG linear solver module.
+ *
+ *  l_max  maximum Krylov subspace dimension that SpbcgSolve will
+ *         be permitted to use
+ *
+ *  r  vector (type N_Vector) which holds the scaled, preconditioned
+ *     linear system residual
+ *
+ *  r_star  vector (type N_Vector) which holds the initial scaled,
+ *          preconditioned linear system residual
+ *
+ *  p, q, u and Ap  vectors (type N_Vector) used for workspace by
+ *                  the SPBCG algorithm
+ *
+ *  vtemp  scratch vector (type N_Vector) used as temporary vector
+ *         storage
+ * -----------------------------------------------------------------
+ */
+
+typedef struct {
+
+  int l_max;
+
+  N_Vector r_star;
+  N_Vector r;
+  N_Vector p;
+  N_Vector q;
+  N_Vector u;
+  N_Vector Ap;
+  N_Vector vtemp;
+
+} SpbcgMemRec, *SpbcgMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpbcgMalloc
+ * -----------------------------------------------------------------
+ * SpbcgMalloc allocates additional memory needed by the SPBCG
+ * linear solver module.
+ *
+ *  l_max  maximum Krylov subspace dimension that SpbcgSolve will
+ *         be permitted to use
+ *
+ *  vec_tmpl  implementation-specific template vector (type N_Vector)
+ *            (created using either N_VNew_Serial or N_VNew_Parallel)
+ *
+ * If successful, SpbcgMalloc returns a non-NULL memory pointer. If
+ * an error occurs, then a NULL pointer is returned.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT SpbcgMem SpbcgMalloc(int l_max, N_Vector vec_tmpl);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpbcgSolve
+ * -----------------------------------------------------------------
+ * SpbcgSolve solves the linear system Ax = b by means of a scaled
+ * preconditioned Bi-CGSTAB (SPBCG) iterative method.
+ *
+ *  mem  pointer to an internal memory block allocated during a
+ *       prior call to SpbcgMalloc
+ *
+ *  A_data  pointer to a data structure containing information
+ *          about the coefficient matrix A (passed to user-supplied
+ *          function referenced by atimes (function pointer))
+ *
+ *  x  vector (type N_Vector) containing initial guess x_0 upon
+ *     entry, but which upon return contains an approximate solution
+ *     of the linear system Ax = b (solution only valid if return
+ *     value is either SPBCG_SUCCESS or SPBCG_RES_REDUCED)
+ *
+ *  b  vector (type N_Vector) set to the right-hand side vector b
+ *     of the linear system (undisturbed by function)
+ *
+ *  pretype  variable (type int) indicating the type of
+ *           preconditioning to be used (see sundials_iterative.h)
+ *
+ *  delta  tolerance on the L2 norm of the scaled, preconditioned
+ *         residual (if return value == SPBCG_SUCCESS, then
+ *         ||sb*P1_inv*(b-Ax)||_L2 <= delta)
+ *
+ *  P_data  pointer to a data structure containing preconditioner
+ *          information (passed to user-supplied function referenced
+ *          by psolve (function pointer))
+ *
+ *  sx  vector (type N_Vector) containing positive scaling factors
+ *      for x (pass sx == NULL if scaling NOT required)
+ *
+ *  sb  vector (type N_Vector) containing positive scaling factors
+ *      for b (pass sb == NULL if scaling NOT required)
+ *
+ *  atimes  user-supplied routine responsible for computing the
+ *          matrix-vector product Ax (see sundials_iterative.h)
+ *
+ *  psolve  user-supplied routine responsible for solving the
+ *          preconditioned linear system Pz = r (ignored if
+ *          pretype == PREC_NONE) (see sundials_iterative.h)
+ *
+ *  res_norm  pointer (type realtype*) to the L2 norm of the
+ *            scaled, preconditioned residual (if return value
+ *            is either SPBCG_SUCCESS or SPBCG_RES_REDUCED, then
+ *            *res_norm = ||sb*P1_inv*(b-Ax)||_L2, where x is
+ *            the computed approximate solution, sb is the diagonal
+ *            scaling matrix for the right-hand side b, and P1_inv
+ *            is the inverse of the left-preconditioner matrix)
+ *
+ *  nli  pointer (type int*) to the total number of linear
+ *       iterations performed
+ *
+ *  nps  pointer (type int*) to the total number of calls made
+ *       to the psolve routine
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int SpbcgSolve(SpbcgMem mem, void *A_data, N_Vector x, N_Vector b,
+			       int pretype, realtype delta, void *P_data, N_Vector sx,
+			       N_Vector sb, ATimesFn atimes, PSolveFn psolve,
+			       realtype *res_norm, int *nli, int *nps);
+
+/* Return values for SpbcgSolve */
+
+#define SPBCG_SUCCESS            0  /* SPBCG algorithm converged          */
+#define SPBCG_RES_REDUCED        1  /* SPBCG did NOT converge, but the
+				       residual was reduced               */
+#define SPBCG_CONV_FAIL          2  /* SPBCG algorithm failed to converge */
+#define SPBCG_PSOLVE_FAIL_REC    3  /* psolve failed recoverably          */
+#define SPBCG_ATIMES_FAIL_REC    4  /* atimes failed recoverably          */
+#define SPBCG_PSET_FAIL_REC      5  /* pset faild recoverably             */
+
+#define SPBCG_MEM_NULL          -1  /* mem argument is NULL               */
+#define SPBCG_ATIMES_FAIL_UNREC -2  /* atimes returned failure flag       */
+#define SPBCG_PSOLVE_FAIL_UNREC -3  /* psolve failed unrecoverably        */
+#define SPBCG_PSET_FAIL_UNREC   -4  /* pset failed unrecoverably          */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpbcgFree
+ * -----------------------------------------------------------------
+ * SpbcgFree frees the memory allocated by a call to SpbcgMalloc.
+ * It is illegal to use the pointer mem after a call to SpbcgFree.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void SpbcgFree(SpbcgMem mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Macro : SPBCG_VTEMP
+ * -----------------------------------------------------------------
+ * This macro provides access to the vector r in the
+ * memory block of the SPBCG module. The argument mem is the
+ * memory pointer returned by SpbcgMalloc, of type SpbcgMem,
+ * and the macro value is of type N_Vector.
+ *
+ * Note: Only used by IDA (r contains P_inverse F if nli_inc == 0).
+ * -----------------------------------------------------------------
+ */
+
+#define SPBCG_VTEMP(mem) (mem->r)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_spfgmr.h b/include/sundials/sundials_spfgmr.h
new file mode 100644
index 0000000..847a650
--- /dev/null
+++ b/include/sundials/sundials_spfgmr.h
@@ -0,0 +1,284 @@
+/* -----------------------------------------------------------------
+ Programmer(s): Daniel R. Reynolds and Hilari C. Tiedeman @ SMU
+ -------------------------------------------------------------------
+ Copyright (c) 2011, Southern Methodist University.
+ All rights reserved.
+ For details, see the LICENSE file.
+ -------------------------------------------------------------------
+ This is the header file for the implementation of SPFGMR Krylov
+ iterative linear solver.  The SPFGMR algorithm is based on the
+ Scaled Preconditioned Flexible GMRES (Generalized Minimal Residual)
+ method [Y. Saad, SIAM J. Sci. Comput., 1993].
+
+ The SPFGMR algorithm solves a linear system A x = b.
+ Preconditioning is only allowed on the right.
+ Scaling is allowed on the right, and restarts are also allowed.
+ We denote the preconditioner and scaling matrices as follows:
+   P = right preconditioner
+   S1 = diagonal matrix of scale factors for P-inverse b
+   S2 = diagonal matrix of scale factors for x
+ The matrices A and P are not required explicitly; only
+ routines that provide A and P-inverse as operators are required.
+
+ In this notation, SPFGMR applies the underlying FGMRES method to
+ the equivalent transformed system
+   Abar xbar = bbar , where
+   Abar = S1 A (P-inverse) (S2-inverse),
+   bbar = S1 b , and   xbar = S2 P x .
+
+ The scaling matrix must be chosen so that the vectors S1 b and 
+ S2 P x have dimensionless components.  If preconditioning is not 
+ performed (P = I), then S2 must be a scaling for x, while S1 is a
+ scaling for b.  Similarly, if preconditioning is performed, then S1
+ must be a scaling for b, while S2 is a scaling for P x, and may 
+ also be taken as a scaling for b. 
+
+ The stopping test for the SPFGMR iterations is on the L2 norm of
+ the scaled preconditioned residual:
+      || bbar - Abar xbar ||_2  <  delta
+ with an input test constant delta.
+
+ The usage of this SPFGMR solver involves supplying two routines
+ and making three calls.  The user-supplied routines are
+    atimes (A_data, x, y) to compute y = A x, given x,
+ and
+    psolve (P_data, y, x, lr)
+                to solve P x = y for x, given y.
+ The three user calls are:
+    mem  = SpfgmrMalloc(lmax, vec_tmpl);
+           to initialize memory,
+    flag = SpfgmrSolve(mem,A_data,x,b,...,
+                       P_data,s1,s2,atimes,psolve,...);
+           to solve the system, and
+    SpfgmrFree(mem);
+           to free the memory created by SpfgmrMalloc.
+ Complete details for specifying atimes and psolve and for the
+ usage calls are given in the paragraphs below and in iterative.h.
+ -----------------------------------------------------------------*/
+
+#ifndef _SPFGMR_H
+#define _SPFGMR_H
+
+#include <sundials/sundials_iterative.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* -----------------------------------------------------------------
+ Types: SpfgmrMemRec, SpfgmrMem
+ -------------------------------------------------------------------
+ SpfgmrMem is a pointer to an SpfgmrMemRec which contains
+ the memory needed by SpfgmrSolve. The SpfgmrMalloc routine
+ returns a pointer of type SpfgmrMem which should then be passed
+ in subsequent calls to SpfgmrSolve. The SpfgmrFree routine frees
+ the memory allocated by SpfgmrMalloc.
+
+ l_max is the maximum Krylov dimension that SpfgmrSolve will be
+ permitted to use.
+
+ V is the array of Krylov basis vectors v_1, ..., v_(l_max+1),
+ stored in V[0], ..., V[l_max], where l_max is the second
+ parameter to SpfgmrMalloc. Each v_i is a vector of type
+ N_Vector.
+
+ Z is the array of preconditioned basis vectors z_1, ..., 
+ z_(l_max+1), stored in Z[0], ..., Z[l_max], where l_max is the 
+ second parameter to SpfgmrMalloc. Each z_i is a vector of type
+ N_Vector.
+
+ Hes is the (l_max+1) x l_max Hessenberg matrix. It is stored
+ row-wise so that the (i,j)th element is given by Hes[i][j].
+
+ givens is a length 2*l_max array which represents the
+ Givens rotation matrices that arise in the algorithm. The
+ Givens rotation matrices F_0, F_1, ..., F_j, where F_i is
+
+             1
+               1
+                 c_i  -s_i      <--- row i
+                 s_i   c_i
+                           1
+                             1
+
+ are represented in the givens vector as
+ givens[0]=c_0, givens[1]=s_0, givens[2]=c_1, givens[3]=s_1,
+ ..., givens[2j]=c_j, givens[2j+1]=s_j.
+
+ xcor is a vector (type N_Vector) which holds the scaled,
+ preconditioned correction to the initial guess.
+
+ yg is a length (l_max+1) array of realtype used to hold "short"
+ vectors (e.g. y and g).
+
+ vtemp is a vector (type N_Vector) used as temporary vector
+ storage during calculations.
+ -----------------------------------------------------------------*/
+typedef struct _SpfgmrMemRec {
+  int l_max;
+  N_Vector *V;
+  N_Vector *Z;
+  realtype **Hes;
+  realtype *givens;
+  N_Vector xcor;
+  realtype *yg;
+  N_Vector vtemp;
+} SpfgmrMemRec, *SpfgmrMem;
+
+/*----------------------------------------------------------------
+ Function : SpfgmrMalloc
+ -----------------------------------------------------------------
+ SpfgmrMalloc allocates the memory used by SpfgmrSolve. It
+ returns a pointer of type SpfgmrMem which the user of the
+ SPGMR package should pass to SpfgmrSolve. The parameter l_max
+ is the maximum Krylov dimension that SpfgmrSolve will be
+ permitted to use. The parameter vec_tmpl is a pointer to an
+ N_Vector used as a template to create new vectors by duplication.
+ This routine returns NULL if there is a memory request failure.
+ ---------------------------------------------------------------*/
+
+SUNDIALS_EXPORT SpfgmrMem SpfgmrMalloc(int l_max, N_Vector vec_tmpl);
+
+/*----------------------------------------------------------------
+ Function : SpfgmrSolve
+ -----------------------------------------------------------------
+ SpfgmrSolve solves the linear system Ax = b using the SPFGMR
+ method. The return values are given by the symbolic constants
+ below. The first SpfgmrSolve parameter is a pointer to memory
+ allocated by a prior call to SpfgmrMalloc.
+
+ mem is the pointer returned by SpfgmrMalloc to the structure
+ containing the memory needed by SpfgmrSolve.
+
+ A_data is a pointer to information about the coefficient
+ matrix A. This pointer is passed to the user-supplied function
+ atimes.
+
+ x is the initial guess x_0 upon entry and the solution
+ N_Vector upon exit with return value SPFGMR_SUCCESS or
+ SPFGMR_RES_REDUCED. For all other return values, the output x
+ is undefined.
+
+ b is the right hand side N_Vector. It is undisturbed by this
+ function.
+
+ pretype is the type of preconditioning to be used. Its
+ legal possible values are enumerated in iterative.h. These
+ values are PREC_NONE, PREC_LEFT, PREC_RIGHT and PREC_BOTH; 
+ however since this solver can only precondition on the right, 
+ then right-preconditioning will be done if any of the values 
+ PREC_LEFT, PREC_RIGHT or PREC_BOTH are provided..
+
+ gstype is the type of Gram-Schmidt orthogonalization to be
+ used. Its legal values are enumerated in iterativ.h. These
+ values are MODIFIED_GS=0 and CLASSICAL_GS=1.
+
+ delta is the tolerance on the L2 norm of the scaled,
+ preconditioned residual. On return with value SPFGMR_SUCCESS,
+ this residual satisfies || s1 P1_inv (b - Ax) ||_2 <= delta.
+
+ max_restarts is the maximum number of times the algorithm is
+ allowed to restart.
+
+ maxit is the maximum number of iterations allowed within the 
+ solve.  This value must be less than or equal to the "l_max" 
+ value previously supplied to SpfgmrMalloc.  If maxit is too 
+ large, l_max will be used instead.
+
+ P_data is a pointer to preconditioner information. This
+ pointer is passed to the user-supplied function psolve.
+
+ s1 is an N_Vector of positive scale factors for b. (Not 
+ tested for positivity.)  Pass NULL if no scaling on b is 
+ required.
+
+ s2 is an N_Vector of positive scale factors for P x, where
+ P is the right preconditioner. (Not tested for positivity.)
+ Pass NULL if no scaling on P x is required.
+
+ atimes is the user-supplied function which performs the
+ operation of multiplying A by a given vector. Its description
+ is given in iterative.h.
+
+ psolve is the user-supplied function which solves a
+ preconditioner system Pz = r, where P is P1 or P2. Its full
+ description is given in iterative.h. The psolve function will
+ not be called if pretype is NONE; in that case, the user
+ should pass NULL for psolve.
+
+ res_norm is a pointer to the L2 norm of the scaled,
+ preconditioned residual. On return with value SPFGMR_SUCCESS or
+ SPFGMR_RES_REDUCED, (*res_norm) contains the value
+ || s1 (b - Ax) ||_2 for the computed solution x.
+ For all other return values, (*res_norm) is undefined. The
+ caller is responsible for allocating the memory (*res_norm)
+ to be filled in by SpfgmrSolve.
+
+ nli is a pointer to the number of linear iterations done in
+ the execution of SpfgmrSolve. The caller is responsible for
+ allocating the memory (*nli) to be filled in by SpfgmrSolve.
+
+ nps is a pointer to the number of calls made to psolve during
+ the execution of SpfgmrSolve. The caller is responsible for
+ allocating the memory (*nps) to be filled in by SpfgmrSolve.
+
+ Note: Repeated calls can be made to SpfgmrSolve with varying
+ input arguments. If, however, the problem size N or the
+ maximum Krylov dimension l_max changes, then a call to
+ SpfgmrMalloc must be made to obtain new memory for SpfgmrSolve
+ to use.
+ ---------------------------------------------------------------*/
+     
+SUNDIALS_EXPORT int SpfgmrSolve(SpfgmrMem mem, void *A_data, N_Vector x, 
+				N_Vector b, int pretype, int gstype, 
+				realtype delta, int max_restarts, 
+				int maxit, void *P_data, N_Vector s1, 
+				N_Vector s2, ATimesFn atimes, PSolveFn psolve, 
+				realtype *res_norm, int *nli, int *nps);
+
+
+/* Return values for SpfgmrSolve */
+#define SPFGMR_SUCCESS            0  /* Converged                     */
+#define SPFGMR_RES_REDUCED        1  /* Did not converge, but reduced
+                                        norm of residual              */
+#define SPFGMR_CONV_FAIL          2  /* Failed to converge            */
+#define SPFGMR_QRFACT_FAIL        3  /* QRfact found singular matrix  */
+#define SPFGMR_PSOLVE_FAIL_REC    4  /* psolve failed recoverably     */
+#define SPFGMR_ATIMES_FAIL_REC    5  /* atimes failed recoverably     */
+#define SPFGMR_PSET_FAIL_REC      6  /* pset faild recoverably        */
+
+#define SPFGMR_MEM_NULL          -1  /* mem argument is NULL          */
+#define SPFGMR_ATIMES_FAIL_UNREC -2  /* atimes returned failure flag  */
+#define SPFGMR_PSOLVE_FAIL_UNREC -3  /* psolve failed unrecoverably   */
+#define SPFGMR_GS_FAIL           -4  /* Gram-Schmidt routine faiuled  */        
+#define SPFGMR_QRSOL_FAIL        -5  /* QRsol found singular R        */
+#define SPFGMR_PSET_FAIL_UNREC   -6  /* pset failed unrecoverably     */
+
+/*----------------------------------------------------------------
+ Function : SpfgmrFree
+ -----------------------------------------------------------------
+ SpfgmrMalloc frees the memory allocated by SpfgmrMalloc. It is
+ illegal to use the pointer mem after a call to SpfgmrFree.
+ ---------------------------------------------------------------*/
+
+SUNDIALS_EXPORT void SpfgmrFree(SpfgmrMem mem);
+
+/*----------------------------------------------------------------
+ Macro: SPFGMR_VTEMP
+ -----------------------------------------------------------------
+ This macro provides access to the work vector vtemp in the
+ memory block of the SPFGMR module.  The argument mem is the
+ memory pointer returned by SpfgmrMalloc, of type SpfgmrMem,
+ and the macro value is of type N_Vector.
+ On a return from SpfgmrSolve with *nli = 0, this vector
+ contains the scaled preconditioned initial residual,
+ s1 * P1_inverse * (b - A x_0).
+ ---------------------------------------------------------------*/
+
+#define SPFGMR_VTEMP(mem) (mem->vtemp)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_spgmr.h b/include/sundials/sundials_spgmr.h
new file mode 100644
index 0000000..07b0910
--- /dev/null
+++ b/include/sundials/sundials_spgmr.h
@@ -0,0 +1,301 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the implementation of SPGMR Krylov
+ * iterative linear solver.  The SPGMR algorithm is based on the
+ * Scaled Preconditioned GMRES (Generalized Minimal Residual)
+ * method.
+ *
+ * The SPGMR algorithm solves a linear system A x = b.
+ * Preconditioning is allowed on the left, right, or both.
+ * Scaling is allowed on both sides, and restarts are also allowed.
+ * We denote the preconditioner and scaling matrices as follows:
+ *   P1 = left preconditioner
+ *   P2 = right preconditioner
+ *   S1 = diagonal matrix of scale factors for P1-inverse b
+ *   S2 = diagonal matrix of scale factors for P2 x
+ * The matrices A, P1, and P2 are not required explicitly; only
+ * routines that provide A, P1-inverse, and P2-inverse as
+ * operators are required.
+ *
+ * In this notation, SPGMR applies the underlying GMRES method to
+ * the equivalent transformed system
+ *   Abar xbar = bbar , where
+ *   Abar = S1 (P1-inverse) A (P2-inverse) (S2-inverse) ,
+ *   bbar = S1 (P1-inverse) b , and   xbar = S2 P2 x .
+ *
+ * The scaling matrices must be chosen so that vectors S1
+ * P1-inverse b and S2 P2 x have dimensionless components.
+ * If preconditioning is done on the left only (P2 = I), by a
+ * matrix P, then S2 must be a scaling for x, while S1 is a
+ * scaling for P-inverse b, and so may also be taken as a scaling
+ * for x.  Similarly, if preconditioning is done on the right only
+ * (P1 = I, P2 = P), then S1 must be a scaling for b, while S2 is
+ * a scaling for P x, and may also be taken as a scaling for b.
+ *
+ * The stopping test for the SPGMR iterations is on the L2 norm of
+ * the scaled preconditioned residual:
+ *      || bbar - Abar xbar ||_2  <  delta
+ * with an input test constant delta.
+ *
+ * The usage of this SPGMR solver involves supplying two routines
+ * and making three calls.  The user-supplied routines are
+ *    atimes (A_data, x, y) to compute y = A x, given x,
+ * and
+ *    psolve (P_data, y, x, lr)
+ *                to solve P1 x = y or P2 x = y for x, given y.
+ * The three user calls are:
+ *    mem  = SpgmrMalloc(lmax, vec_tmpl);
+ *           to initialize memory,
+ *    flag = SpgmrSolve(mem,A_data,x,b,...,
+ *                      P_data,s1,s2,atimes,psolve,...);
+ *           to solve the system, and
+ *    SpgmrFree(mem);
+ *           to free the memory created by SpgmrMalloc.
+ * Complete details for specifying atimes and psolve and for the
+ * usage calls are given below and in sundials_iterative.h.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SPGMR_H
+#define _SPGMR_H
+
+#include <sundials/sundials_iterative.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Types: SpgmrMemRec, SpgmrMem
+ * -----------------------------------------------------------------
+ * SpgmrMem is a pointer to an SpgmrMemRec which contains
+ * the memory needed by SpgmrSolve. The SpgmrMalloc routine
+ * returns a pointer of type SpgmrMem which should then be passed
+ * in subsequent calls to SpgmrSolve. The SpgmrFree routine frees
+ * the memory allocated by SpgmrMalloc.
+ *
+ * l_max is the maximum Krylov dimension that SpgmrSolve will be
+ * permitted to use.
+ *
+ * V is the array of Krylov basis vectors v_1, ..., v_(l_max+1),
+ * stored in V[0], ..., V[l_max], where l_max is the second
+ * parameter to SpgmrMalloc. Each v_i is a vector of type
+ * N_Vector.
+ *
+ * Hes is the (l_max+1) x l_max Hessenberg matrix. It is stored
+ * row-wise so that the (i,j)th element is given by Hes[i][j].
+ *
+ * givens is a length 2*l_max array which represents the
+ * Givens rotation matrices that arise in the algorithm. The
+ * Givens rotation matrices F_0, F_1, ..., F_j, where F_i is
+ *
+ *             1
+ *               1
+ *                 c_i  -s_i      <--- row i
+ *                 s_i   c_i
+ *                           1
+ *                             1
+ *
+ * are represented in the givens vector as
+ * givens[0]=c_0, givens[1]=s_0, givens[2]=c_1, givens[3]=s_1,
+ * ..., givens[2j]=c_j, givens[2j+1]=s_j.
+ *
+ * xcor is a vector (type N_Vector) which holds the scaled,
+ * preconditioned correction to the initial guess.
+ *
+ * yg is a length (l_max+1) array of realtype used to hold "short"
+ * vectors (e.g. y and g).
+ *
+ * vtemp is a vector (type N_Vector) used as temporary vector
+ * storage during calculations.
+ * -----------------------------------------------------------------
+ */
+  
+typedef struct _SpgmrMemRec {
+
+  int l_max;
+
+  N_Vector *V;
+  realtype **Hes;
+  realtype *givens;
+  N_Vector xcor;
+  realtype *yg;
+  N_Vector vtemp;
+
+} SpgmrMemRec, *SpgmrMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpgmrMalloc
+ * -----------------------------------------------------------------
+ * SpgmrMalloc allocates the memory used by SpgmrSolve. It
+ * returns a pointer of type SpgmrMem which the user of the
+ * SPGMR package should pass to SpgmrSolve. The parameter l_max
+ * is the maximum Krylov dimension that SpgmrSolve will be
+ * permitted to use. The parameter vec_tmpl is a pointer to an
+ * N_Vector used as a template to create new vectors by duplication.
+ * This routine returns NULL if there is a memory request failure.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT SpgmrMem SpgmrMalloc(int l_max, N_Vector vec_tmpl);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpgmrSolve
+ * -----------------------------------------------------------------
+ * SpgmrSolve solves the linear system Ax = b using the SPGMR
+ * method. The return values are given by the symbolic constants
+ * below. The first SpgmrSolve parameter is a pointer to memory
+ * allocated by a prior call to SpgmrMalloc.
+ *
+ * mem is the pointer returned by SpgmrMalloc to the structure
+ * containing the memory needed by SpgmrSolve.
+ *
+ * A_data is a pointer to information about the coefficient
+ * matrix A. This pointer is passed to the user-supplied function
+ * atimes.
+ *
+ * x is the initial guess x_0 upon entry and the solution
+ * N_Vector upon exit with return value SPGMR_SUCCESS or
+ * SPGMR_RES_REDUCED. For all other return values, the output x
+ * is undefined.
+ *
+ * b is the right hand side N_Vector. It is undisturbed by this
+ * function.
+ *
+ * pretype is the type of preconditioning to be used. Its
+ * legal values are enumerated in sundials_iterative.h. These
+ * values are PREC_NONE=0, PREC_LEFT=1, PREC_RIGHT=2, and
+ * PREC_BOTH=3.
+ *
+ * gstype is the type of Gram-Schmidt orthogonalization to be
+ * used. Its legal values are enumerated in sundials_iterative.h.
+ * These values are MODIFIED_GS=0 and CLASSICAL_GS=1.
+ *
+ * delta is the tolerance on the L2 norm of the scaled,
+ * preconditioned residual. On return with value SPGMR_SUCCESS,
+ * this residual satisfies || s1 P1_inv (b - Ax) ||_2 <= delta.
+ *
+ * max_restarts is the maximum number of times the algorithm is
+ * allowed to restart.
+ *
+ * P_data is a pointer to preconditioner information. This
+ * pointer is passed to the user-supplied function psolve.
+ *
+ * s1 is an N_Vector of positive scale factors for P1-inv b, where
+ * P1 is the left preconditioner. (Not tested for positivity.)
+ * Pass NULL if no scaling on P1-inv b is required.
+ *
+ * s2 is an N_Vector of positive scale factors for P2 x, where
+ * P2 is the right preconditioner. (Not tested for positivity.)
+ * Pass NULL if no scaling on P2 x is required.
+ *
+ * atimes is the user-supplied function which performs the
+ * operation of multiplying A by a given vector. Its description
+ * is given in sundials_iterative.h.
+ *
+ * psolve is the user-supplied function which solves a
+ * preconditioner system Pz = r, where P is P1 or P2. Its full
+ * description is given in sundials_iterative.h. The psolve function
+ * will not be called if pretype is NONE; in that case, the user
+ * should pass NULL for psolve.
+ *
+ * res_norm is a pointer to the L2 norm of the scaled,
+ * preconditioned residual. On return with value SPGMR_SUCCESS or
+ * SPGMR_RES_REDUCED, (*res_norm) contains the value
+ * || s1 P1_inv (b - Ax) ||_2 for the computed solution x.
+ * For all other return values, (*res_norm) is undefined. The
+ * caller is responsible for allocating the memory (*res_norm)
+ * to be filled in by SpgmrSolve.
+ *
+ * nli is a pointer to the number of linear iterations done in
+ * the execution of SpgmrSolve. The caller is responsible for
+ * allocating the memory (*nli) to be filled in by SpgmrSolve.
+ *
+ * nps is a pointer to the number of calls made to psolve during
+ * the execution of SpgmrSolve. The caller is responsible for
+ * allocating the memory (*nps) to be filled in by SpgmrSolve.
+ *
+ * Note: Repeated calls can be made to SpgmrSolve with varying
+ * input arguments. If, however, the problem size N or the
+ * maximum Krylov dimension l_max changes, then a call to
+ * SpgmrMalloc must be made to obtain new memory for SpgmrSolve
+ * to use.
+ * -----------------------------------------------------------------
+ */                                                                
+     
+SUNDIALS_EXPORT int SpgmrSolve(SpgmrMem mem, void *A_data, N_Vector x, N_Vector b,
+			       int pretype, int gstype, realtype delta, 
+			       int max_restarts, void *P_data, N_Vector s1, 
+			       N_Vector s2, ATimesFn atimes, PSolveFn psolve, 
+			       realtype *res_norm, int *nli, int *nps);
+
+
+/* Return values for SpgmrSolve */
+
+#define SPGMR_SUCCESS            0  /* Converged                     */
+#define SPGMR_RES_REDUCED        1  /* Did not converge, but reduced
+                                       norm of residual              */
+#define SPGMR_CONV_FAIL          2  /* Failed to converge            */
+#define SPGMR_QRFACT_FAIL        3  /* QRfact found singular matrix  */
+#define SPGMR_PSOLVE_FAIL_REC    4  /* psolve failed recoverably     */
+#define SPGMR_ATIMES_FAIL_REC    5  /* atimes failed recoverably     */
+#define SPGMR_PSET_FAIL_REC      6  /* pset faild recoverably        */
+
+#define SPGMR_MEM_NULL          -1  /* mem argument is NULL          */
+#define SPGMR_ATIMES_FAIL_UNREC -2  /* atimes returned failure flag  */
+#define SPGMR_PSOLVE_FAIL_UNREC -3  /* psolve failed unrecoverably   */
+#define SPGMR_GS_FAIL           -4  /* Gram-Schmidt routine faiuled  */        
+#define SPGMR_QRSOL_FAIL        -5  /* QRsol found singular R        */
+#define SPGMR_PSET_FAIL_UNREC   -6  /* pset failed unrecoverably     */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpgmrFree
+ * -----------------------------------------------------------------
+ * SpgmrMalloc frees the memory allocated by SpgmrMalloc. It is
+ * illegal to use the pointer mem after a call to SpgmrFree.
+ * -----------------------------------------------------------------
+ */                                                                
+
+SUNDIALS_EXPORT void SpgmrFree(SpgmrMem mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Macro: SPGMR_VTEMP
+ * -----------------------------------------------------------------
+ * This macro provides access to the work vector vtemp in the
+ * memory block of the SPGMR module.  The argument mem is the
+ * memory pointer returned by SpgmrMalloc, of type SpgmrMem,
+ * and the macro value is of type N_Vector.
+ * On a return from SpgmrSolve with *nli = 0, this vector
+ * contains the scaled preconditioned initial residual,
+ * s1 * P1_inverse * (b - A x_0).
+ * -----------------------------------------------------------------
+ */
+
+#define SPGMR_VTEMP(mem) (mem->vtemp)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_sptfqmr.h b/include/sundials/sundials_sptfqmr.h
new file mode 100644
index 0000000..3dc2dfb
--- /dev/null
+++ b/include/sundials/sundials_sptfqmr.h
@@ -0,0 +1,259 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the implementation of the scaled
+ * preconditioned Transpose-Free Quasi-Minimal Residual (SPTFQMR)
+ * linear solver.
+ *
+ * The SPTFQMR algorithm solves a linear system of the form Ax = b.
+ * Preconditioning is allowed on the left (PREC_LEFT), right
+ * (PREC_RIGHT), or both (PREC_BOTH).  Scaling is allowed on both
+ * sides.  We denote the preconditioner and scaling matrices as
+ * follows:
+ *   P1 = left preconditioner
+ *   P2 = right preconditioner
+ *   S1 = diagonal matrix of scale factors for P1-inverse b
+ *   S2 = diagonal matrix of scale factors for P2 x
+ * The matrices A, P1, and P2 are not required explicitly; only
+ * routines that provide A, P1-inverse, and P2-inverse as operators
+ * are required.
+ *
+ * In this notation, SPTFQMR applies the underlying TFQMR method to
+ * the equivalent transformed system:
+ *   Abar xbar = bbar, where
+ *   Abar = S1 (P1-inverse) A (P2-inverse) (S2-inverse),
+ *   bbar = S1 (P1-inverse) b, and
+ *   xbar = S2 P2 x.
+ *
+ * The scaling matrices must be chosen so that vectors
+ * S1 P1-inverse b and S2 P2 x have dimensionless components.  If
+ * preconditioning is done on the left only (P2 = I), by a matrix P,
+ * then S2 must be a scaling for x, while S1 is a scaling for
+ * P-inverse b, and so may also be taken as a scaling for x.
+ * Similarly, if preconditioning is done on the right only (P1 = I,
+ * P2 = P), then S1 must be a scaling for b, while S2 is a scaling
+ * for P x, and may also be taken as a scaling for b.
+ *
+ * The stopping test for the SPTFQMR iterations is on the L2-norm of
+ * the scaled preconditioned residual:
+ *   || bbar - Abar xbar ||_2 < delta
+ * with an input test constant delta.
+ *
+ * The usage of this SPTFQMR solver involves supplying two routines
+ * and making three calls.  The user-supplied routines are:
+ *   atimes(A_data, x, y) to compute y = A x, given x,
+ * and
+ *   psolve(P_data, y, x, lr) to solve P1 x = y or P2 x = y for x,
+ *                            given y.
+ * The three user calls are:
+ *   mem  = SptfqmrMalloc(lmax, vec_tmpl);
+ *          to initialize memory
+ *   flag = SptfqmrSolve(mem, A_data, x, b, pretype, delta, P_data,
+ *                       sx, sb, atimes, psolve, res_norm, nli, nps);
+ *          to solve the system, and
+ *   SptfqmrFree(mem);
+ *          to free the memory allocated by SptfqmrMalloc().
+ * Complete details for specifying atimes() and psolve() and for the
+ * usage calls are given in the paragraphs below and in the header
+ * file sundials_iterative.h.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SPTFQMR_H
+#define _SPTFQMR_H
+
+#include <sundials/sundials_iterative.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Types: struct SptfqmrMemRec and struct *SptfqmrMem
+ * -----------------------------------------------------------------
+ * A variable declaration of type struct *SptfqmrMem denotes a pointer
+ * to a data structure of type struct SptfqmrMemRec. The SptfqmrMemRec
+ * structure contains numerous fields that must be accessed by the
+ * SPTFQMR linear solver module.
+ *
+ *  l_max  maximum Krylov subspace dimension that SptfqmrSolve will
+ *         be permitted to use
+ *
+ *  r_star  vector (type N_Vector) which holds the initial scaled,
+ *          preconditioned linear system residual
+ *
+ *  q/d/v/p/u/r  vectors (type N_Vector) used for workspace by
+ *               the SPTFQMR algorithm
+ *
+ *  vtemp1/vtemp2/vtemp3  scratch vectors (type N_Vector) used as
+ *                        temporary storage
+ * -----------------------------------------------------------------
+ */
+
+typedef struct {
+
+  int l_max;
+
+  N_Vector r_star;
+  N_Vector q;
+  N_Vector d;
+  N_Vector v;
+  N_Vector p;
+  N_Vector *r;
+  N_Vector u;
+  N_Vector vtemp1;
+  N_Vector vtemp2;
+  N_Vector vtemp3;
+
+} SptfqmrMemRec, *SptfqmrMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SptfqmrMalloc
+ * -----------------------------------------------------------------
+ * SptfqmrMalloc allocates additional memory needed by the SPTFQMR
+ * linear solver module.
+ *
+ *  l_max  maximum Krylov subspace dimension that SptfqmrSolve will
+ *         be permitted to use
+ *
+ *  vec_tmpl  implementation-specific template vector (type N_Vector)
+ *            (created using either N_VNew_Serial or N_VNew_Parallel)
+ *
+ * If successful, SptfqmrMalloc returns a non-NULL memory pointer. If
+ * an error occurs, then a NULL pointer is returned.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT SptfqmrMem SptfqmrMalloc(int l_max, N_Vector vec_tmpl);
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SptfqmrSolve
+ * -----------------------------------------------------------------
+ * SptfqmrSolve solves the linear system Ax = b by means of a scaled
+ * preconditioned Transpose-Free Quasi-Minimal Residual (SPTFQMR)
+ * method.
+ *
+ *  mem  pointer to an internal memory block allocated during a
+ *       prior call to SptfqmrMalloc
+ *
+ *  A_data  pointer to a data structure containing information
+ *          about the coefficient matrix A (passed to user-supplied
+ *          function referenced by atimes (function pointer))
+ *
+ *  x  vector (type N_Vector) containing initial guess x_0 upon
+ *     entry, but which upon return contains an approximate solution
+ *     of the linear system Ax = b (solution only valid if return
+ *     value is either SPTFQMR_SUCCESS or SPTFQMR_RES_REDUCED)
+ *
+ *  b  vector (type N_Vector) set to the right-hand side vector b
+ *     of the linear system (undisturbed by function)
+ *
+ *  pretype  variable (type int) indicating the type of
+ *           preconditioning to be used (see sundials_iterative.h)
+ *
+ *  delta  tolerance on the L2 norm of the scaled, preconditioned
+ *         residual (if return value == SPTFQMR_SUCCESS, then
+ *         ||sb*P1_inv*(b-Ax)||_L2 <= delta)
+ *
+ *  P_data  pointer to a data structure containing preconditioner
+ *          information (passed to user-supplied function referenced
+ *          by psolve (function pointer))
+ *
+ *  sx  vector (type N_Vector) containing positive scaling factors
+ *      for x (pass sx == NULL if scaling NOT required)
+ *
+ *  sb  vector (type N_Vector) containing positive scaling factors
+ *      for b (pass sb == NULL if scaling NOT required)
+ *
+ *  atimes  user-supplied routine responsible for computing the
+ *          matrix-vector product Ax (see sundials_iterative.h)
+ *
+ *  psolve  user-supplied routine responsible for solving the
+ *          preconditioned linear system Pz = r (ignored if
+ *          pretype == PREC_NONE) (see sundials_iterative.h)
+ *
+ *  res_norm  pointer (type realtype*) to the L2 norm of the
+ *            scaled, preconditioned residual (if return value
+ *            is either SPTFQMR_SUCCESS or SPTFQMR_RES_REDUCED, then
+ *            *res_norm = ||sb*P1_inv*(b-Ax)||_L2, where x is
+ *            the computed approximate solution, sb is the diagonal
+ *            scaling matrix for the right-hand side b, and P1_inv
+ *            is the inverse of the left-preconditioner matrix)
+ *
+ *  nli  pointer (type int*) to the total number of linear
+ *       iterations performed
+ *
+ *  nps  pointer (type int*) to the total number of calls made
+ *       to the psolve routine
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int SptfqmrSolve(SptfqmrMem mem, void *A_data, N_Vector x, N_Vector b,
+				 int pretype, realtype delta, void *P_data, N_Vector sx,
+				 N_Vector sb, ATimesFn atimes, PSolveFn psolve,
+				 realtype *res_norm, int *nli, int *nps);
+
+/* Return values for SptfqmrSolve */
+
+#define SPTFQMR_SUCCESS            0  /* SPTFQMR algorithm converged          */
+#define SPTFQMR_RES_REDUCED        1  /* SPTFQMR did NOT converge, but the
+				         residual was reduced                 */
+#define SPTFQMR_CONV_FAIL          2  /* SPTFQMR algorithm failed to converge */
+#define SPTFQMR_PSOLVE_FAIL_REC    3  /* psolve failed recoverably            */
+#define SPTFQMR_ATIMES_FAIL_REC    4  /* atimes failed recoverably            */
+#define SPTFQMR_PSET_FAIL_REC      5  /* pset faild recoverably               */
+
+#define SPTFQMR_MEM_NULL          -1  /* mem argument is NULL                 */
+#define SPTFQMR_ATIMES_FAIL_UNREC -2  /* atimes returned failure flag         */
+#define SPTFQMR_PSOLVE_FAIL_UNREC -3  /* psolve failed unrecoverably          */
+#define SPTFQMR_PSET_FAIL_UNREC   -4  /* pset failed unrecoverably            */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SptfqmrFree
+ * -----------------------------------------------------------------
+ * SptfqmrFree frees the memory allocated by a call to SptfqmrMalloc.
+ * It is illegal to use the pointer mem after a call to SptfqmrFree.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT void SptfqmrFree(SptfqmrMem mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Macro : SPTFQMR_VTEMP
+ * -----------------------------------------------------------------
+ * This macro provides access to the work vector vtemp1 in the
+ * memory block of the SPTFQMR module. The argument mem is the
+ * memory pointer returned by SptfqmrMalloc, of type SptfqmrMem,
+ * and the macro value is of type N_Vector.
+ *
+ * Note: Only used by IDA (vtemp1 contains P_inverse F if
+ *       nli_inc == 0).
+ * -----------------------------------------------------------------
+ */
+
+#define SPTFQMR_VTEMP(mem) (mem->vtemp1)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sundials/sundials_superlumt_impl.h b/include/sundials/sundials_superlumt_impl.h
new file mode 100644
index 0000000..d823baa
--- /dev/null
+++ b/include/sundials/sundials_superlumt_impl.h
@@ -0,0 +1,61 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4741 $
+ * $Date: 2016-04-20 11:36:18 -0700 (Wed, 20 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the SUNDIALS interface to the 
+ * SuperLUMT linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _SUNSLUMT_IMPL_H
+#define _SUNSLUMT_IMPL_H
+
+#ifndef _SLUMT_H
+#define _SLUMT_H
+/* #include "pdsp_defs.h" */
+#include "slu_mt_ddefs.h"
+#endif
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Definition of SLUMTData
+ * -----------------------------------------------------------------
+ */
+ 
+typedef struct SLUMTDataRec {
+ 
+  /* Structure for SuperLUMT-specific data */
+ 
+  SuperMatrix *s_A, *s_AC, *s_L, *s_U, *s_B;
+  Gstat_t *Gstat;
+  int *perm_r, *perm_c;
+  int num_threads;
+  double diag_pivot_thresh; 
+  superlumt_options_t *superlumt_options;
+
+  int s_ordering;
+ 
+} *SLUMTData;
+ 
+#ifdef __cplusplus
+} 
+#endif 
+ 
+#endif 
diff --git a/include/sundials/sundials_types.h b/include/sundials/sundials_types.h
new file mode 100644
index 0000000..844d5f9
--- /dev/null
+++ b/include/sundials/sundials_types.h
@@ -0,0 +1,122 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott Cohen, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * Copyright (c) 2002, The Regents of the University of California.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ *------------------------------------------------------------------
+ * This header file exports two types: realtype and booleantype,
+ * as well as the constants TRUE and FALSE.
+ *
+ * Users should include the header file sundials_types.h in every
+ * program file and use the exported name realtype instead of
+ * float, double or long double.
+ *
+ * The constants SUNDIALS_SINGLE_PRECISION, SUNDIALS_DOUBLE_PRECISION
+ * and SUNDIALS_LONG_DOUBLE_PRECISION indicate the underlying data
+ * type of realtype. It is set at the configuration stage.
+ *
+ * The legal types for realtype are float, double and long double.
+ *
+ * The macro RCONST gives the user a convenient way to define
+ * real-valued constants. To use the constant 1.0, for example,
+ * the user should write the following:
+ *
+ *   #define ONE RCONST(1.0)
+ *
+ * If realtype is defined as a double, then RCONST(1.0) expands
+ * to 1.0. If realtype is defined as a float, then RCONST(1.0)
+ * expands to 1.0F. If realtype is defined as a long double,
+ * then RCONST(1.0) expands to 1.0L. There is never a need to
+ * explicitly cast 1.0 to (realtype).
+ *------------------------------------------------------------------
+ */
+  
+#ifndef _SUNDIALSTYPES_H
+#define _SUNDIALSTYPES_H
+
+#ifndef _SUNDIALS_CONFIG_H
+#define _SUNDIALS_CONFIG_H
+#include <sundials/sundials_config.h>
+#endif
+
+#include <float.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ *------------------------------------------------------------------
+ * Type realtype
+ * Macro RCONST
+ * Constants BIG_REAL, SMALL_REAL, and UNIT_ROUNDOFF
+ *------------------------------------------------------------------
+ */
+
+#if defined(SUNDIALS_SINGLE_PRECISION)
+
+typedef float realtype;
+# define RCONST(x) x##F
+# define BIG_REAL FLT_MAX
+# define SMALL_REAL FLT_MIN
+# define UNIT_ROUNDOFF FLT_EPSILON
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+typedef double realtype;
+# define RCONST(x) x
+# define BIG_REAL DBL_MAX
+# define SMALL_REAL DBL_MIN
+# define UNIT_ROUNDOFF DBL_EPSILON
+
+#elif defined(SUNDIALS_EXTENDED_PRECISION)
+
+typedef long double realtype;
+# define RCONST(x) x##L
+# define BIG_REAL LDBL_MAX
+# define SMALL_REAL LDBL_MIN
+# define UNIT_ROUNDOFF LDBL_EPSILON
+
+#endif
+
+/*
+ *------------------------------------------------------------------
+ * Type : booleantype
+ *------------------------------------------------------------------
+ * Constants : FALSE and TRUE
+ *------------------------------------------------------------------
+ * ANSI C does not have a built-in boolean data type. Below is the
+ * definition for a new type called booleantype. The advantage of
+ * using the name booleantype (instead of int) is an increase in
+ * code readability. It also allows the programmer to make a
+ * distinction between int and boolean data. Variables of type
+ * booleantype are intended to have only the two values FALSE and
+ * TRUE which are defined below to be equal to 0 and 1,
+ * respectively.
+ *------------------------------------------------------------------
+ */
+
+#ifndef booleantype
+#define booleantype int
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/arkode/CMakeLists.txt b/src/arkode/CMakeLists.txt
new file mode 100644
index 0000000..cfed8e6
--- /dev/null
+++ b/src/arkode/CMakeLists.txt
@@ -0,0 +1,161 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# LLNS/SMU Copyright Start
+# Copyright (c) 2015, Southern Methodist University and 
+# Lawrence Livermore National Security
+#
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Southern Methodist University and Lawrence Livermore 
+# National Laboratory under Contract DE-AC52-07NA27344.
+# Produced at Southern Methodist University and the Lawrence 
+# Livermore National Laboratory.
+#
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS/SMU Copyright End
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the ARKODE library
+
+INSTALL(CODE "MESSAGE(\"\nInstall ARKODE\n\")")
+
+# Add variable arkode_SOURCES with the sources for the ARKODE library
+SET(arkode_SOURCES
+  arkode.c
+  arkode_band.c
+  arkode_bandpre.c
+  arkode_bbdpre.c
+  arkode_butcher.c
+  arkode_dense.c
+  arkode_direct.c        
+  arkode_io.c
+  arkode_pcg.c
+  arkode_spbcgs.c
+  arkode_spfgmr.c
+  arkode_spgmr.c
+  arkode_spils.c
+  arkode_sptfqmr.c
+  arkode_sparse.c
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND arkode_SOURCES arkode_klu.c)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND arkode_SOURCES arkode_superlumt.c)
+ENDIF()
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the ARKODE library
+SET(shared_SOURCES
+  sundials_nvector.c
+  sundials_math.c
+  sundials_direct.c
+  sundials_band.c
+  sundials_dense.c
+  sundials_iterative.c
+  sundials_pcg.c
+  sundials_spbcgs.c
+  sundials_spfgmr.c
+  sundials_spgmr.c
+  sundials_sptfqmr.c
+  sundials_sparse.c
+  )
+
+# Add prefix with complete path to the common SUNDIALS sources
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable arkode_HEADERS with the exported ARKODE header files
+SET(arkode_HEADERS
+  arkode.h
+  arkode_band.h
+  arkode_bandpre.h
+  arkode_bbdpre.h
+  arkode_dense.h
+  arkode_direct.h
+  arkode_pcg.h
+  arkode_spbcgs.h
+  arkode_spfgmr.h
+  arkode_spgmr.h
+  arkode_spils.h
+  arkode_sptfqmr.h
+  arkode_sparse.h
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND arkode_HEADERS arkode_klu.h)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND arkode_HEADERS arkode_superlumt.h)
+ENDIF()
+
+# Add prefix with complete path to the ARKODE header files
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/arkode/ arkode_HEADERS)
+
+# If Blas/Lapack support was enabled, set-up additional file lists
+IF(LAPACK_FOUND)
+  SET(arkode_BL_SOURCES arkode_lapack.c)
+  SET(arkode_BL_HEADERS arkode_lapack.h)
+  ADD_PREFIX(${sundials_SOURCE_DIR}/include/arkode/ arkode_BL_HEADERS)
+ELSE(LAPACK_FOUND)
+  SET(arkode_BL_SOURCES "")
+  SET(arkode_BL_HEADERS "")
+ENDIF(LAPACK_FOUND)
+
+# Add source directories to include directories for access to
+# implementation only header files.
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(../sundials)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Build the static library
+IF(BUILD_STATIC_LIBS)
+
+  # Add the build target for the static ARKODE library
+  ADD_LIBRARY(sundials_arkode_static STATIC 
+    ${arkode_SOURCES}  ${arkode_BL_SOURCES} ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_arkode_static
+    PROPERTIES OUTPUT_NAME sundials_arkode CLEAN_DIRECT_OUTPUT 1)
+
+  # Install the ARKODE library
+  INSTALL(TARGETS sundials_arkode_static DESTINATION lib)
+
+ENDIF(BUILD_STATIC_LIBS)
+
+# Build the shared library
+IF(BUILD_SHARED_LIBS)
+
+  # Add the build target for the ARKODE library
+  ADD_LIBRARY(sundials_arkode_shared SHARED 
+    ${arkode_SOURCES}  ${arkode_BL_SOURCES}  ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_arkode_shared
+    PROPERTIES OUTPUT_NAME sundials_arkode CLEAN_DIRECT_OUTPUT 1)
+
+  # Set VERSION and SOVERSION for shared libraries
+  SET_TARGET_PROPERTIES(sundials_arkode_shared
+    PROPERTIES VERSION ${arkodelib_VERSION} SOVERSION ${arkodelib_SOVERSION})
+
+  # Install the ARKODE library
+  INSTALL(TARGETS sundials_arkode_shared DESTINATION lib)
+
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the ARKODE header files
+INSTALL(FILES ${arkode_HEADERS} ${arkode_BL_HEADERS} DESTINATION include/arkode)
+
+# Install the ARKODE implementation header file
+INSTALL(FILES arkode_impl.h DESTINATION include/arkode)
+
+#
+MESSAGE(STATUS "Added ARKODE module")
diff --git a/src/arkode/LICENSE b/src/arkode/LICENSE
new file mode 100644
index 0000000..4909357
--- /dev/null
+++ b/src/arkode/LICENSE
@@ -0,0 +1,32 @@
+Copyright (c) 2013, Southern Methodist University
+Written by D. R. Reynolds, D. J. Gardner and J. M. Sexton.
+LLNL-CODE-667205
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met: 
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer. 
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the
+   distribution.
+
+3. Neither the name of Southern Methodist University nor the names of
+   its contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.  
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
diff --git a/src/arkode/README b/src/arkode/README
new file mode 100644
index 0000000..e56be67
--- /dev/null
+++ b/src/arkode/README
@@ -0,0 +1,72 @@
+                             ARKODE
+                   Release 1.1.0, September, 2016
+                       Daniel R. Reynolds
+                  Department of Mathematics, SMU
+
+ARKODE is a solver for multi-rate ODE systems (initial value problems) 
+given in explicit form M*dy/dt = f(t,y). It is written in ANSI standard C.
+
+ARKODE can be used both on serial and parallel (MPI) computers.  The main
+difference is in the NVECTOR module of vector kernels.  The desired
+version is obtained when compiling the example files by linking the
+appropriate library of NVECTOR kernels.  In the parallel version,
+communication between processors is done with the MPI (Message Passage
+Interface) system, with OpenMP, or with Pthreads.
+
+When used with the serial NVECTOR module, ARKODE provides both direct (dense 
+and band) and preconditioned Krylov (iterative) linear solvers. Many different
+iterative solvers are available: scaled preconditioned GMRES (SPGMR), 
+scaled preconditioned Flexible GMRES (SPFGMR), scaled preconditioned 
+conjugate gradient, scaled preconditioned BiCGStab (SPBCG), 
+and scaled preconditioned TFQMR (SPTFQMR). When ARKODE is used with 
+the parallel NVECTOR module, only the Krylov linear solvers are available. 
+(An approximate diagonal Jacobian option is available with both versions.)  
+For the serial version, there is a banded preconditioner module called 
+ARKBANDPRE available for use with the Krylov solvers, while for the 
+parallel version there is a preconditioner module called ARKBBDPRE 
+which provides a band-block-diagonal preconditioner.
+
+ARKODE is part of a software family called SUNDIALS: SUite of Nonlinear
+and DIfferential/ALgebraic equation Solvers.  This suite consists of
+ARKODE, CVODE, CVODES, KINSOL, IDAS, and IDA.  The directory structure 
+of the package supplied reflects this family relationship. 
+
+For use with Fortran applications, a set of Fortran/C interface routines,
+called FARKODE, is also supplied.  These are written in C, but assume that
+the user calling program and all user-supplied routines are in Fortran.
+
+The notes below provide the location of documentation, directions for the 
+installation of the ARKode package, and relevant references. Following that 
+is a brief history of revisions to the package.
+
+
+A. Documentation
+----------------
+
+/sundials/doc/arkode/ contains PDF files for the ARKODE User Guide [1]
+(ark_guide.pdf) and the ARKODE Examples [2] (ark_examples.pdf) documents.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see the file /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see the "Installation Procedure"
+chapter in the ARKODE User Guide.
+
+
+C. References
+-------------
+
+[1] Daniel R. Reynolds, "User Documentation for ARKode v1.1.0," 
+    Southern Methodist University, March 2016.
+
+
+D. Releases
+-----------
+
+v. 1.1.0 - Sep. 2016
+v. 1.0.2 - Aug. 2015
+v. 1.0.1 - Mar. 2015
+v. 1.0.0 - Mar. 2015
+
diff --git a/src/arkode/arkode.c b/src/arkode/arkode.c
new file mode 100644
index 0000000..cf4a7f3
--- /dev/null
+++ b/src/arkode/arkode.c
@@ -0,0 +1,6396 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for the main ARKODE integrator.
+ * It is independent of the ARKODE linear solver in use.
+ *--------------------------------------------------------------*/
+
+/*===============================================================
+             Import Header Files                                 
+===============================================================*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "arkode_impl.h"
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+#define NO_DEBUG_OUTPUT
+#ifdef DEBUG_OUTPUT
+#include <nvector/nvector_serial.h>
+#endif
+
+#define FIXED_LIN_TOL
+
+#ifdef __GNUC__
+#define SUNDIALS_UNUSED __attribute__ ((unused))
+#else
+#define SUNDIALS_UNUSED
+#endif
+
+/*===============================================================
+             Private Functions Prototypes
+===============================================================*/
+static void arkPrintMem(ARKodeMem ark_mem) SUNDIALS_UNUSED;
+static booleantype arkCheckNvector(N_Vector tmpl);
+static booleantype arkAllocVectors(ARKodeMem ark_mem, 
+				   N_Vector tmpl);
+static int arkAllocRKVectors(ARKodeMem ark_mem);
+static void arkFreeVectors(ARKodeMem ark_mem);
+
+static int arkAllocFPData(ARKodeMem ark_mem);
+static int arkResizeFPData(ARKodeMem ark_mem, 
+			   ARKVecResizeFn resize,
+			   void *resize_data,
+			   long int lrw_diff,
+			   long int liw_diff);
+static void arkFreeFPData(ARKodeMem ark_mem);
+
+static int arkInitialSetup(ARKodeMem ark_mem);
+static int arkHin(ARKodeMem ark_mem, realtype tout);
+static realtype arkUpperBoundH0(ARKodeMem ark_mem, 
+				realtype tdist);
+static int arkYddNorm(ARKodeMem ark_mem, realtype hg, 
+		      realtype *yddnrm);
+static int arkSetButcherTables(ARKodeMem ark_mem);
+static int arkCheckButcherTables(ARKodeMem ark_mem);
+
+static int arkStep(ARKodeMem ark_mem);
+static int arkPredict(ARKodeMem ark_mem, int istage);
+static int arkSet(ARKodeMem ark_mem);
+static int arkComputeSolutions(ARKodeMem ark_mem, realtype *dsm);
+static int arkDoErrorTest(ARKodeMem ark_mem, int *nflagPtr,
+			  realtype saved_t, int *nefPtr, 
+			  realtype dsm);
+static int arkCompleteStep(ARKodeMem ark_mem, realtype dsm);
+static int arkPrepareNextStep(ARKodeMem ark_mem);
+
+static int arkNls(ARKodeMem ark_mem, int nflag);
+static int arkNlsResid(ARKodeMem ark_mem, N_Vector y, 
+			N_Vector fy, N_Vector r);
+static int arkNlsNewton(ARKodeMem ark_mem, int nflag);
+static int arkNlsAccelFP(ARKodeMem ark_mem, int nflag);
+static int arkAndersonAcc(ARKodeMem ark_mem, N_Vector gval, 
+			  N_Vector fv, N_Vector x, N_Vector xold, 
+			  int iter, realtype *R, realtype *gamma);
+static int arkLs(ARKodeMem ark_mem, int nflag);
+static int arkHandleNFlag(ARKodeMem ark_mem, int *nflagPtr, 
+			  realtype saved_t, int *ncfPtr);
+
+static int arkHandleFailure(ARKodeMem ark_mem,int flag);
+
+static int arkDenseEval(ARKodeMem ark_mem, realtype tau,
+			int d, int order, N_Vector yout);
+
+static int arkFullRHS(ARKodeMem ark_mem, realtype t, 
+		      N_Vector y, N_Vector tmp, N_Vector f);
+
+static int arkEwtSetSS(ARKodeMem ark_mem, N_Vector ycur, 
+		       N_Vector weight);
+static int arkEwtSetSV(ARKodeMem ark_mem, N_Vector ycur, 
+		       N_Vector weight);
+static int arkRwtSetSS(ARKodeMem ark_mem, N_Vector My, 
+		       N_Vector weight);
+static int arkRwtSetSV(ARKodeMem ark_mem, N_Vector My, 
+		       N_Vector weight);
+
+static int arkAdapt(ARKodeMem ark_mem);
+static int arkAdaptPID(ARKodeMem ark_mem, realtype *hnew);
+static int arkAdaptPI(ARKodeMem ark_mem, realtype *hnew);
+static int arkAdaptI(ARKodeMem ark_mem, realtype *hnew);
+static int arkAdaptExpGus(ARKodeMem ark_mem, realtype *hnew);
+static int arkAdaptImpGus(ARKodeMem ark_mem, realtype *hnew);
+static int arkAdaptImExGus(ARKodeMem ark_mem, realtype *hnew);
+
+static int arkRootCheck1(ARKodeMem ark_mem);
+static int arkRootCheck2(ARKodeMem ark_mem);
+static int arkRootCheck3(ARKodeMem ark_mem);
+static int arkRootfind(ARKodeMem ark_mem);
+
+
+
+
+/*===============================================================
+  EXPORTED FUNCTIONS
+===============================================================*/
+
+/*---------------------------------------------------------------
+ ARKodeCreate:
+
+ ARKodeCreate creates an internal memory block for a problem to 
+ be solved by ARKODE.  If successful, ARKodeCreate returns a 
+ pointer to the problem memory. This pointer should be passed to
+ ARKodeInit. If an initialization error occurs, ARKodeCreate 
+ prints an error message to standard err and returns NULL. 
+---------------------------------------------------------------*/
+void *ARKodeCreate()
+{
+  int i, j, iret;
+  ARKodeMem ark_mem;
+
+  ark_mem = NULL;
+  ark_mem = (ARKodeMem) malloc(sizeof(struct ARKodeMemRec));
+  if (ark_mem == NULL) {
+    arkProcessError(NULL, 0, "ARKODE", "ARKodeCreate", 
+		    MSGARK_ARKMEM_FAIL);
+    return(NULL);
+  }
+
+  /* Zero out ark_mem */
+  memset(ark_mem, 0, sizeof(struct ARKodeMemRec));
+
+  /* Set uround */
+  ark_mem->ark_uround = UNIT_ROUNDOFF;
+
+  /* Set default values for integrator optional inputs */
+  iret = ARKodeSetDefaults((void *)ark_mem);
+  if (iret != ARK_SUCCESS) {
+    arkProcessError(NULL, 0, "ARKODE", "ARKodeCreate", 
+		    "Error setting default solver options");
+    return(NULL);
+  }
+
+  /* Initialize internal RK parameters and coefficients */
+  ark_mem->ark_stages = 0;
+  ark_mem->ark_istage = 0;
+  ark_mem->ark_p = 0;
+  for (i=0; i<ARK_S_MAX; i++) {
+    for (j=0; j<ARK_S_MAX; j++) {
+      ARK_A(ark_mem->ark_Ae,i,j) = ZERO;
+      ARK_A(ark_mem->ark_Ai,i,j) = ZERO;
+    }
+    ark_mem->ark_ce[i]  = ZERO;
+    ark_mem->ark_ci[i]  = ZERO;
+    ark_mem->ark_be[i]  = ZERO;
+    ark_mem->ark_bi[i]  = ZERO;
+    ark_mem->ark_b2e[i] = ZERO;
+    ark_mem->ark_b2i[i] = ZERO;
+    ark_mem->ark_Fi[i]  = NULL;
+    ark_mem->ark_Fe[i]  = NULL;
+  }
+
+  /* Initialize root finding variables */
+  ark_mem->ark_glo     = NULL;
+  ark_mem->ark_ghi     = NULL;
+  ark_mem->ark_grout   = NULL;
+  ark_mem->ark_iroots  = NULL;
+  ark_mem->ark_rootdir = NULL;
+  ark_mem->ark_gfun    = NULL;
+  ark_mem->ark_nrtfn   = 0;
+  ark_mem->ark_gactive = NULL;
+  ark_mem->ark_mxgnull = 1;
+
+  /* Set default nonlinear solver choice to Newton,
+     initialize fixed-point solver variables */
+  ark_mem->ark_use_fp   = FALSE;
+  ark_mem->ark_fp_R     = NULL;
+  ark_mem->ark_fp_gamma = NULL;
+  ark_mem->ark_fp_df    = NULL;
+  ark_mem->ark_fp_dg    = NULL;
+  ark_mem->ark_fp_q     = NULL;
+  ark_mem->ark_fp_fval  = NULL;
+  ark_mem->ark_fp_fold  = NULL;
+  ark_mem->ark_fp_gold  = NULL;
+
+  /* Initialize diagnostics reporting variables */
+  ark_mem->ark_report  = FALSE;
+  ark_mem->ark_diagfp  = NULL;
+
+  /* Initialize lrw and liw */
+  ark_mem->ark_lrw = 58;   /* to be updated */
+  ark_mem->ark_liw = 40;   /* to be updated */
+
+  /* No mallocs have been done yet */
+  ark_mem->ark_VabstolMallocDone  = FALSE;
+  ark_mem->ark_VRabstolMallocDone = FALSE;
+  ark_mem->ark_MallocDone         = FALSE;
+
+  /* No user-supplied step postprocessing function yet */
+  ark_mem->ark_ProcessStep = NULL;
+
+  /* Return pointer to ARKODE memory block */
+  return((void *)ark_mem);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeInit:
+ 
+ ARKodeInit allocates and initializes memory for a problem. All 
+ inputs are checked for errors. If any error occurs during 
+ initialization, it is reported to the file whose file pointer 
+ is errfp and an error flag is returned. Otherwise, it returns 
+ ARK_SUCCESS.  This routine must be called prior to calling 
+ ARKode to evolve the problem.
+---------------------------------------------------------------*/
+int ARKodeInit(void *arkode_mem, ARKRhsFn fe, ARKRhsFn fi, 
+	       realtype t0, N_Vector y0)
+{
+  ARKodeMem ark_mem;
+  booleantype nvectorOK, allocOK;
+  long int lrw1, liw1;
+
+  /* Check arkode_mem */
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", "ARKodeInit", 
+		    MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check for legal input parameters */
+  if (y0==NULL) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeInit", MSGARK_NULL_Y0);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Set implicit/explicit problem based on function pointers */
+  if (fe == NULL) ark_mem->ark_implicit = TRUE;
+  if (fi == NULL) ark_mem->ark_explicit = TRUE;
+
+  /* Check that at least one of fe,fi is supplied and is to be used */
+  if (ark_mem->ark_implicit && ark_mem->ark_explicit) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE",
+  		    "ARKodeInit", MSGARK_NULL_F);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Test if all required vector operations are implemented */
+  nvectorOK = arkCheckNvector(y0);
+  if (!nvectorOK) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeInit", MSGARK_BAD_NVECTOR);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Set space requirements for one N_Vector */
+  if (y0->ops->nvspace != NULL) {
+    N_VSpace(y0, &lrw1, &liw1);
+  } else {
+    lrw1 = 0;
+    liw1 = 0;
+  }
+  ark_mem->ark_lrw1 = lrw1;
+  ark_mem->ark_liw1 = liw1;
+
+
+  /* Allocate the solver vectors (using y0 as a template) */
+  allocOK = arkAllocVectors(ark_mem, y0);
+  if (!allocOK) {
+    arkProcessError(ark_mem, ARK_MEM_FAIL, "ARKODE", 
+		    "ARKodeInit", MSGARK_MEM_FAIL);
+    return(ARK_MEM_FAIL);
+  }
+
+  /* All error checking is complete at this point */
+
+  /* Copy the input parameters into ARKODE state */
+  ark_mem->ark_fe = fe;
+  ark_mem->ark_fi = fi;
+  ark_mem->ark_tn = t0;
+  ark_mem->ark_tnew = t0;
+
+  /* Set step parameters */
+  ark_mem->ark_hold  = ZERO;
+  ark_mem->ark_tolsf = ONE;
+
+  /* Set the linear solver addresses to NULL.
+     (We check != NULL later, in ARKode.) */
+  ark_mem->ark_linit  = NULL;
+  ark_mem->ark_lsetup = NULL;
+  ark_mem->ark_lsolve = NULL;
+  ark_mem->ark_lfree  = NULL;
+  ark_mem->ark_lmem   = NULL;
+  ark_mem->ark_lsolve_type = -1;
+
+  /* Set the mass matrix to identity, and mass matrix solver 
+     addresses to NULL. (We check != NULL later, in ARKode.) */
+  ark_mem->ark_mass_matrix = FALSE;
+  ark_mem->ark_minit       = NULL;
+  ark_mem->ark_msetup      = NULL;
+  ark_mem->ark_msolve      = NULL;
+  ark_mem->ark_mfree       = NULL;
+  ark_mem->ark_mtimes      = NULL;
+  ark_mem->ark_mtimes_data = NULL;
+  ark_mem->ark_mass_mem    = NULL;
+  ark_mem->ark_msolve_type = -1;
+
+  /* Initialize ycur */
+  N_VScale(ONE, y0, ark_mem->ark_ycur);
+
+  /* Initialize error history (1.0 => met target accuracy) */
+  ark_mem->ark_hadapt_ehist[0] = ONE;
+  ark_mem->ark_hadapt_ehist[1] = ONE;
+  ark_mem->ark_hadapt_ehist[2] = ONE;
+  ark_mem->ark_eRNrm = 1.0;
+
+  /* Initialize step history */
+  ark_mem->ark_hadapt_hhist[0] = ZERO;
+  ark_mem->ark_hadapt_hhist[1] = ZERO;
+  ark_mem->ark_hadapt_hhist[2] = ZERO;
+
+  /* Initialize all the counters */
+  ark_mem->ark_nst          = 0;
+  ark_mem->ark_nst_acc      = 0;
+  ark_mem->ark_nst_exp      = 0;
+  ark_mem->ark_nst_attempts = 0;
+  ark_mem->ark_nfe          = 0;
+  ark_mem->ark_nfi          = 0;
+  ark_mem->ark_ncfn         = 0;
+  ark_mem->ark_nmassfails   = 0;
+  ark_mem->ark_netf         = 0;
+  ark_mem->ark_nni          = 0;
+  ark_mem->ark_nsetups      = 0;
+  ark_mem->ark_nhnil        = 0;
+  ark_mem->ark_nstlp        = 0;
+  ark_mem->ark_nge          = 0;
+  ark_mem->ark_irfnd        = 0;
+  ark_mem->ark_mass_solves  = 0;
+  ark_mem->ark_mass_mult    = 0;
+
+  /* Initialize other integrator optional outputs */
+  ark_mem->ark_h0u    = ZERO;
+  ark_mem->ark_next_h = ZERO;
+
+  /* Initially, rwt should point to ewt */
+  ark_mem->ark_rwt_is_ewt = TRUE;
+
+  /* Indicate that problem size is new */
+  ark_mem->ark_resized = TRUE;
+  ark_mem->ark_firststage = TRUE;
+
+  /* Problem has been successfully initialized */
+  ark_mem->ark_MallocDone = TRUE;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeReInit:
+
+ ARKodeReInit re-initializes ARKODE's memory for a problem, 
+ assuming it has already been allocated in a prior ARKodeInit 
+ call.  All problem specification inputs are checked for errors.
+ If any error occurs during initialization, it is reported to 
+ the file whose file pointer is errfp.  This routine should only
+ be called after ARKodeInit, and only when the problem dynamics 
+ or desired solvers have changed dramatically, so that the
+ problem integration should resume as if started from scratch.
+
+ The return value is ARK_SUCCESS = 0 if no errors occurred, or
+ a negative value otherwise.
+---------------------------------------------------------------*/
+int ARKodeReInit(void *arkode_mem, ARKRhsFn fe, ARKRhsFn fi, 
+		 realtype t0, N_Vector y0)
+{
+  ARKodeMem ark_mem;
+ 
+  /* Check arkode_mem */
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeReInit", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if arkode_mem was allocated */
+  if (ark_mem->ark_MallocDone == FALSE) {
+    arkProcessError(ark_mem, ARK_NO_MALLOC, "ARKODE", 
+		    "ARKodeReInit", MSGARK_NO_MALLOC);
+    return(ARK_NO_MALLOC);
+  }
+
+  /* Check for legal input parameters */
+  if (y0 == NULL) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeReInit", MSGARK_NULL_Y0);
+    return(ARK_ILL_INPUT);
+  }
+  
+  /* Set implicit/explicit problem based on function pointers */
+  ark_mem->ark_implicit = ark_mem->ark_explicit = FALSE;
+  if (fe == NULL) ark_mem->ark_implicit = TRUE;
+  if (fi == NULL) ark_mem->ark_explicit = TRUE;
+
+  /* Check that at least one of fe,fi is supplied and is to be used */
+  if (ark_mem->ark_implicit && ark_mem->ark_explicit) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE",
+  		    "ARKodeInit", MSGARK_NULL_F);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Copy the input parameters into ARKODE state */
+  ark_mem->ark_fe = fe;
+  ark_mem->ark_fi = fi;
+  ark_mem->ark_tn = t0;
+  ark_mem->ark_tnew = t0;
+  
+  /* Set step parameters */
+  ark_mem->ark_hold  = ZERO;
+  ark_mem->ark_tolsf = ONE;
+
+  /* Do not reset the linear solver addresses to NULL.  This means 
+     that if the user does not re-set these manually, we'll re-use 
+     the linear solver routines that were set during ARKodeInit. */
+
+  /* Initialize ycur */
+  N_VScale(ONE, y0, ark_mem->ark_ycur);
+ 
+  /* Initialize error history (1.0 => met target accuracy) */
+  ark_mem->ark_hadapt_ehist[0] = ONE;
+  ark_mem->ark_hadapt_ehist[1] = ONE;
+  ark_mem->ark_hadapt_ehist[2] = ONE;
+  ark_mem->ark_eRNrm = 1.0;
+
+  /* Initialize step history */
+  ark_mem->ark_hadapt_hhist[0] = ZERO;
+  ark_mem->ark_hadapt_hhist[1] = ZERO;
+  ark_mem->ark_hadapt_hhist[2] = ZERO;
+
+  /* Initialize all the counters */
+  ark_mem->ark_nst          = 0;
+  ark_mem->ark_nst_acc      = 0;
+  ark_mem->ark_nst_exp      = 0;
+  ark_mem->ark_nst_attempts = 0;
+  ark_mem->ark_nfe          = 0;
+  ark_mem->ark_nfi          = 0;
+  ark_mem->ark_ncfn         = 0;
+  ark_mem->ark_nmassfails   = 0;
+  ark_mem->ark_netf         = 0;
+  ark_mem->ark_nni          = 0;
+  ark_mem->ark_nsetups      = 0;
+  ark_mem->ark_nhnil        = 0;
+  ark_mem->ark_nstlp        = 0;
+  ark_mem->ark_nge          = 0;
+  ark_mem->ark_irfnd        = 0;
+  ark_mem->ark_mass_solves  = 0;
+  ark_mem->ark_mass_mult    = 0;
+
+  /* Indicate that problem size is new */
+  ark_mem->ark_resized = TRUE;
+  ark_mem->ark_firststage = TRUE;
+
+  /* Initialize other integrator optional outputs */
+  ark_mem->ark_h0u    = ZERO;
+  ark_mem->ark_next_h = ZERO;
+
+  /* Problem has been successfully re-initialized */
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeResize:
+
+ ARKodeResize re-initializes ARKODE's memory for a problem with a
+ changing vector size.  It is assumed that the problem dynamics 
+ before and after the vector resize will be comparable, so that 
+ all time-stepping heuristics prior to calling ARKodeResize 
+ remain valid after the call.  If instead the dynamics should be 
+ re-calibrated, the ARKode memory structure should be deleted 
+ with a call to ARKodeFree, and re-created with calls to 
+ ARKodeCreate and ARKodeInit.
+
+ To aid in the vector-resize operation, the user can supply a 
+ vector resize function, that will take as input an N_Vector with
+ the previous size, and return as output a corresponding vector 
+ of the new size.  If this function (of type ARKVecResizeFn) is 
+ not supplied (i.e. is set to NULL), then all existing N_Vectors 
+ will be destroyed and re-cloned from the input vector.
+
+ In the case that the dynamical time scale should be modified 
+ slightly from the previous time scale, an input "hscale" is 
+ allowed, that will re-scale the upcoming time step by the 
+ specified factor.  If a value <= 0 is specified, the default of 
+ 1.0 will be used.
+
+ Other arguments:
+   arkode_mem       Existing ARKode memory data structure.
+   ynew             The newly-sized solution vector, holding 
+                    the current dependent variable values.
+   t0               The current value of the independent 
+                    variable.
+   resize_data      User-supplied data structure that will be 
+                    passed to the supplied resize function.
+
+ The return value is ARK_SUCCESS = 0 if no errors occurred, or
+ a negative value otherwise.
+---------------------------------------------------------------*/
+int ARKodeResize(void *arkode_mem, N_Vector y0, 
+		 realtype hscale, realtype t0, 
+		 ARKVecResizeFn resize, void *resize_data)
+{
+  ARKodeMem ark_mem;
+  long int lrw1=0, liw1=0;
+  long int lrw_diff, liw_diff;
+  int ier, i;
+ 
+  /* Check arkode_mem */
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeResize", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if arkode_mem was allocated */
+  if (ark_mem->ark_MallocDone == FALSE) {
+    arkProcessError(ark_mem, ARK_NO_MALLOC, "ARKODE", 
+		    "ARKodeResize", MSGARK_NO_MALLOC);
+    return(ARK_NO_MALLOC);
+  }
+
+  /* Check for legal input parameters */
+  if (y0 == NULL) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeResize", MSGARK_NULL_Y0);
+    return(ARK_ILL_INPUT);
+  }
+  
+  /* Copy the input parameters into ARKODE state */
+  ark_mem->ark_tn = t0;
+  ark_mem->ark_tnew = t0;
+
+  /* Update time-stepping parameters */
+  /*   adjust upcoming step size depending on hscale */
+  if (hscale < 0.0)  hscale = 1.0;
+  if (hscale != 1.0) {
+
+    /* Encode hscale into ark_mem structure */
+    ark_mem->ark_eta = hscale;
+    ark_mem->ark_hprime *= hscale;
+
+    /* If next step would overtake tstop, adjust stepsize */
+    if ( ark_mem->ark_tstopset ) 
+      if ( (ark_mem->ark_tn+ark_mem->ark_hprime-ark_mem->ark_tstop)*ark_mem->ark_hprime > ZERO ) {
+	ark_mem->ark_hprime = (ark_mem->ark_tstop-ark_mem->ark_tn)*(ONE-FOUR*ark_mem->ark_uround);
+	ark_mem->ark_eta = ark_mem->ark_hprime/ark_mem->ark_h;
+      }
+
+  }
+
+  /* Determing change in vector sizes */
+  if (y0->ops->nvspace != NULL) 
+    N_VSpace(y0, &lrw1, &liw1);
+  lrw_diff = lrw1 - ark_mem->ark_lrw1;
+  liw_diff = liw1 - ark_mem->ark_liw1;
+  ark_mem->ark_lrw1 = lrw1;
+  ark_mem->ark_liw1 = liw1;
+
+  /* Resize the ARKode vectors */
+  /*     Vabstol */
+  if (ark_mem->ark_Vabstol != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_Vabstol);
+      ark_mem->ark_Vabstol = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_Vabstol, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     VRabstol */
+  if (ark_mem->ark_VRabstol != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_VRabstol);
+      ark_mem->ark_VRabstol = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_VRabstol, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     ark_Fe */
+  for (i=0; i<ARK_S_MAX; i++) {
+    if (ark_mem->ark_Fe[i] != NULL) {
+      if (resize == NULL) {
+	N_VDestroy(ark_mem->ark_Fe[i]);
+	ark_mem->ark_Fe[i] = N_VClone(y0);
+      } else {
+	if (resize(ark_mem->ark_Fe[i], y0, resize_data)) {
+	  arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			  "ARKodeResize", MSGARK_RESIZE_FAIL);
+	  return(ARK_ILL_INPUT);
+	}
+      }
+      ark_mem->ark_lrw += lrw_diff;
+      ark_mem->ark_liw += liw_diff;
+    }
+  }
+  /*     ark_Fi */
+  for (i=0; i<ARK_S_MAX; i++) {
+    if (ark_mem->ark_Fi[i] != NULL) {
+      if (resize == NULL) {
+	N_VDestroy(ark_mem->ark_Fi[i]);
+	ark_mem->ark_Fi[i] = N_VClone(y0);
+      } else {
+	if (resize(ark_mem->ark_Fi[i], y0, resize_data)) {
+	  arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			  "ARKodeResize", MSGARK_RESIZE_FAIL);
+	  return(ARK_ILL_INPUT);
+	}
+      }
+      ark_mem->ark_lrw += lrw_diff;
+      ark_mem->ark_liw += liw_diff;
+    }
+  }
+  /*     ewt */
+  if (ark_mem->ark_ewt != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_ewt);
+      ark_mem->ark_ewt = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_ewt, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     rwt  */
+  if (ark_mem->ark_rwt_is_ewt) {      /* update pointer to ewt */
+    ark_mem->ark_rwt = ark_mem->ark_ewt;
+  } else {                            /* resize if distinct from ewt */
+    if (ark_mem->ark_rwt != NULL) {
+      if (resize == NULL) {
+	N_VDestroy(ark_mem->ark_rwt);
+	ark_mem->ark_rwt = N_VClone(y0);
+      } else {
+	if (resize(ark_mem->ark_rwt, y0, resize_data)) {
+	  arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			  "ARKodeResize", MSGARK_RESIZE_FAIL);
+	  return(ARK_ILL_INPUT);
+	}
+      }
+      ark_mem->ark_lrw += lrw_diff;
+      ark_mem->ark_liw += liw_diff;
+    }
+  }
+  /*     ycur */
+  if (ark_mem->ark_ycur != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_ycur);
+      ark_mem->ark_ycur = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_ycur, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     acor */
+  if (ark_mem->ark_acor != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_acor);
+      ark_mem->ark_acor = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_acor, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     sdata */
+  if (ark_mem->ark_sdata != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_sdata);
+      ark_mem->ark_sdata = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_sdata, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     tempv */
+  if (ark_mem->ark_tempv != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_tempv);
+      ark_mem->ark_tempv = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_tempv, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     ftemp */
+  if (ark_mem->ark_ftemp != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_ftemp);
+      ark_mem->ark_ftemp = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_ftemp, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     fold */
+  if (ark_mem->ark_fold != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_fold);
+      ark_mem->ark_fold = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_fold, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     fnew */
+  if (ark_mem->ark_fnew != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_fnew);
+      ark_mem->ark_fnew = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_fnew, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     yold */
+  if (ark_mem->ark_yold != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_yold);
+      ark_mem->ark_yold = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_yold, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+  /*     ynew */
+  if (ark_mem->ark_ynew != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_ynew);
+      ark_mem->ark_ynew = N_VClone(y0);
+    } else {
+      if (resize(ark_mem->ark_ynew, y0, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+
+
+  /* Resize fixed-point solver memory */
+  if (ark_mem->ark_use_fp) {
+    ier = arkResizeFPData(ark_mem, resize, resize_data, 
+			  lrw_diff, liw_diff);
+    if (ier != ARK_SUCCESS) {
+      arkProcessError(ark_mem, ARK_MEM_FAIL, "ARKODE", 
+		      "ARKodeResize", MSGARK_MEM_FAIL);
+      return(ARK_MEM_FAIL);
+    }
+  }
+
+
+  /* Copy y0 into ark_ycur to set the current solution */
+  N_VScale(ONE, y0, ark_mem->ark_ycur);
+
+  /* Indicate that problem size is new */
+  ark_mem->ark_resized = TRUE;
+  ark_mem->ark_firststage = TRUE;
+  
+  /* Problem has been successfully re-sized */
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSStolerances:
+ ARKodeSVtolerances:
+ ARKodeWFtolerances:
+
+ These functions specify the integration tolerances. One of them
+ SHOULD be called before the first call to ARKode; otherwise 
+ default values of reltol=1e-4 and abstol=1e-9 will be used, 
+ which may be entirely incorrect for a specific problem.
+
+ ARKodeSStolerances specifies scalar relative and absolute 
+   tolerances.
+
+ ARKodeSVtolerances specifies scalar relative tolerance and a 
+   vector absolute tolerance (a potentially different absolute 
+   tolerance for each vector component).
+
+ ARKodeWFtolerances specifies a user-provides function (of type
+   ARKEwtFn) which will be called to set the error weight vector.
+---------------------------------------------------------------*/
+int ARKodeSStolerances(void *arkode_mem, realtype reltol, 
+		       realtype abstol)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSStolerances", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_MallocDone == FALSE) {
+    arkProcessError(ark_mem, ARK_NO_MALLOC, "ARKODE", 
+		    "ARKodeSStolerances", MSGARK_NO_MALLOC);
+    return(ARK_NO_MALLOC);
+  }
+
+  /* Check inputs */
+  if (reltol < ZERO) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSStolerances", MSGARK_BAD_RELTOL);
+    return(ARK_ILL_INPUT);
+  }
+  if (abstol < ZERO) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSStolerances", MSGARK_BAD_ABSTOL);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  ark_mem->ark_reltol  = reltol;
+  ark_mem->ark_Sabstol = abstol;
+  ark_mem->ark_itol    = ARK_SS;
+
+  /* enforce use of arkEwtSet */
+  ark_mem->ark_user_efun = FALSE;
+  ark_mem->ark_efun      = arkEwtSet;
+  ark_mem->ark_e_data    = ark_mem;
+
+  return(ARK_SUCCESS);
+}
+
+int ARKodeSVtolerances(void *arkode_mem, realtype reltol, 
+		       N_Vector abstol)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSVtolerances", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_MallocDone == FALSE) {
+    arkProcessError(ark_mem, ARK_NO_MALLOC, "ARKODE", 
+		    "ARKodeSVtolerances", MSGARK_NO_MALLOC);
+    return(ARK_NO_MALLOC);
+  }
+
+  /* Check inputs */
+  if (reltol < ZERO) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSVtolerances", MSGARK_BAD_RELTOL);
+    return(ARK_ILL_INPUT);
+  }
+  if (N_VMin(abstol) < ZERO) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSVtolerances", MSGARK_BAD_ABSTOL);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  if ( !(ark_mem->ark_VabstolMallocDone) ) {
+    ark_mem->ark_Vabstol = N_VClone(ark_mem->ark_ewt);
+    ark_mem->ark_lrw += ark_mem->ark_lrw1;
+    ark_mem->ark_liw += ark_mem->ark_liw1;
+    ark_mem->ark_VabstolMallocDone = TRUE;
+  }
+  N_VScale(ONE, abstol, ark_mem->ark_Vabstol);
+  ark_mem->ark_reltol = reltol;
+  ark_mem->ark_itol   = ARK_SV;
+
+  /* enforce use of arkEwtSet */
+  ark_mem->ark_user_efun = FALSE;
+  ark_mem->ark_efun      = arkEwtSet;
+  ark_mem->ark_e_data    = ark_mem;
+
+  return(ARK_SUCCESS);
+}
+
+int ARKodeWFtolerances(void *arkode_mem, ARKEwtFn efun)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeWFtolerances", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_MallocDone == FALSE) {
+    arkProcessError(ark_mem, ARK_NO_MALLOC, "ARKODE", 
+		    "ARKodeWFtolerances", MSGARK_NO_MALLOC);
+    return(ARK_NO_MALLOC);
+  }
+
+  /* Copy tolerance data into memory */
+  ark_mem->ark_itol      = ARK_WF;
+  ark_mem->ark_user_efun = TRUE;
+  ark_mem->ark_efun      = efun;
+  ark_mem->ark_e_data    = NULL; /* set to user_data in InitialSetup */
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeResStolerance:
+ ARKodeResVtolerance:
+ ARKodeResFtolerance:
+
+ These functions specify the absolute residual tolerance. 
+ Specification of the absolute residual tolerance is only 
+ necessary for problems with non-identity mass matrices in which
+ the units of the solution vector y dramatically differ from the 
+ units of the ODE right-hand side f(t,y).  If this occurs, one 
+ of these routines SHOULD be called before the first call to 
+ ARKode; otherwise the default value of rabstol=1e-9 will be 
+ used, which may be entirely incorrect for a specific problem.
+
+ ARKodeResStolerances specifies a scalar residual tolerance.
+
+ ARKodeResVtolerances specifies a vector residual tolerance 
+  (a potentially different absolute residual tolerance for 
+   each vector component).
+
+ ARKodeResFtolerances specifies a user-provides function (of 
+   type ARKRwtFn) which will be called to set the residual 
+   weight vector.
+---------------------------------------------------------------*/
+int ARKodeResStolerance(void *arkode_mem, realtype rabstol)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeResStolerances", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_MallocDone == FALSE) {
+    arkProcessError(ark_mem, ARK_NO_MALLOC, "ARKODE", 
+		    "ARKodeResStolerances", MSGARK_NO_MALLOC);
+    return(ARK_NO_MALLOC);
+  }
+
+  /* Check inputs */
+  if (rabstol < ZERO) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeResStolerances", MSGARK_BAD_RABSTOL);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Allocate space for rwt if necessary */
+  if (ark_mem->ark_rwt_is_ewt) {
+    ark_mem->ark_rwt_is_ewt = FALSE;
+    ark_mem->ark_rwt = N_VClone(ark_mem->ark_ewt);
+    ark_mem->ark_lrw += ark_mem->ark_lrw1;
+    ark_mem->ark_liw += ark_mem->ark_liw1;
+  }
+
+  /* Copy tolerances into memory */
+  ark_mem->ark_SRabstol = rabstol;
+  ark_mem->ark_ritol    = ARK_SS;
+
+  /* enforce use of arkRwtSet */
+  ark_mem->ark_user_efun = FALSE;
+  ark_mem->ark_rfun      = arkRwtSet;
+  ark_mem->ark_r_data    = ark_mem;
+
+  return(ARK_SUCCESS);
+}
+
+int ARKodeResVtolerance(void *arkode_mem, N_Vector rabstol)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeResVtolerances", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_MallocDone == FALSE) {
+    arkProcessError(ark_mem, ARK_NO_MALLOC, "ARKODE", 
+		    "ARKodeResVtolerances", MSGARK_NO_MALLOC);
+    return(ARK_NO_MALLOC);
+  }
+
+  /* Check inputs */
+  if (N_VMin(rabstol) < ZERO) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeResVtolerances", MSGARK_BAD_RABSTOL);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Allocate space for rwt if necessary */
+  if (ark_mem->ark_rwt_is_ewt) {
+    ark_mem->ark_rwt_is_ewt = FALSE;
+    ark_mem->ark_rwt = N_VClone(ark_mem->ark_ewt);
+    ark_mem->ark_lrw += ark_mem->ark_lrw1;
+    ark_mem->ark_liw += ark_mem->ark_liw1;
+  }
+
+  /* Copy tolerances into memory */
+  if ( !(ark_mem->ark_VRabstolMallocDone) ) {
+    ark_mem->ark_VRabstol = N_VClone(ark_mem->ark_rwt);
+    ark_mem->ark_lrw += ark_mem->ark_lrw1;
+    ark_mem->ark_liw += ark_mem->ark_liw1;
+    ark_mem->ark_VRabstolMallocDone = TRUE;
+  }
+  N_VScale(ONE, rabstol, ark_mem->ark_VRabstol);
+  ark_mem->ark_ritol = ARK_SV;
+
+
+  /* enforce use of arkRwtSet */
+  ark_mem->ark_user_efun = FALSE;
+  ark_mem->ark_rfun      = arkRwtSet;
+  ark_mem->ark_r_data    = ark_mem;
+
+  return(ARK_SUCCESS);
+}
+
+int ARKodeResFtolerance(void *arkode_mem, ARKRwtFn rfun)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeResFtolerances", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_MallocDone == FALSE) {
+    arkProcessError(ark_mem, ARK_NO_MALLOC, "ARKODE", 
+		    "ARKodeResFtolerances", MSGARK_NO_MALLOC);
+    return(ARK_NO_MALLOC);
+  }
+
+  /* Allocate space for rwt if necessary */
+  if (ark_mem->ark_rwt_is_ewt) {
+    ark_mem->ark_rwt_is_ewt = FALSE;
+    ark_mem->ark_rwt = N_VClone(ark_mem->ark_ewt);
+    ark_mem->ark_lrw += ark_mem->ark_lrw1;
+    ark_mem->ark_liw += ark_mem->ark_liw1;
+  }
+
+  /* Copy tolerance data into memory */
+  ark_mem->ark_ritol     = ARK_WF;
+  ark_mem->ark_user_rfun = TRUE;
+  ark_mem->ark_rfun      = rfun;
+  ark_mem->ark_r_data    = NULL; /* set to user_data in InitialSetup */
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKode:
+
+ This routine is the main driver of the ARKODE package. 
+
+ It integrates over a time interval defined by the user, by 
+ calling arkStep to do internal time steps.
+
+ The first time that ARKode is called for a successfully 
+ initialized problem, it computes a tentative initial step size.
+
+ ARKode supports two modes as specified by itask: ARK_NORMAL and
+ ARK_ONE_STEP.  In the ARK_NORMAL mode, the solver steps until 
+ it reaches or passes tout and then interpolates to obtain 
+ y(tout).  In the ARK_ONE_STEP mode, it takes one internal step 
+ and returns.  The behavior of both modes can be over-rided 
+ through user-specification of ark_tstop (through the
+ ARKodeSetStopTime function), in which case if a solver step 
+ would pass tstop, the step is shortened so that it stops at
+ exactly the specified stop time, and hence interpolation of 
+ y(tout) is not required.
+---------------------------------------------------------------*/
+int ARKode(void *arkode_mem, realtype tout, N_Vector yout, 
+	   realtype *tret, int itask)
+{
+  ARKodeMem ark_mem;
+  long int nstloc;
+  int retval, hflag, kflag, istate, ir, ier, irfndp;
+  int ewtsetOK;
+  realtype troundoff, tout_hin, rh, nrm;
+  booleantype inactive_roots;
+
+
+  /*-------------------------------------
+    1. Check and process inputs
+  -------------------------------------*/
+
+  /* Check if arkode_mem exists */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", "ARKode", 
+		    MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if arkode_mem was allocated */
+  if (ark_mem->ark_MallocDone == FALSE) {
+    arkProcessError(ark_mem, ARK_NO_MALLOC, "ARKODE", "ARKode", 
+		    MSGARK_NO_MALLOC);
+    return(ARK_NO_MALLOC);
+  }
+  
+  /* Check for yout != NULL */
+  if ((ark_mem->ark_y = yout) == NULL) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "ARKode", 
+		    MSGARK_YOUT_NULL);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Check for tret != NULL */
+  if (tret == NULL) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "ARKode", 
+		    MSGARK_TRET_NULL);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Check for valid itask */
+  if ( (itask != ARK_NORMAL) && (itask != ARK_ONE_STEP) ) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "ARKode", 
+		    MSGARK_BAD_ITASK);
+    return(ARK_ILL_INPUT);
+  }
+
+  if (itask == ARK_NORMAL) ark_mem->ark_toutc = tout;
+  ark_mem->ark_taskc = itask;
+
+
+  /*----------------------------------------
+    2. Initializations performed only at
+       the first step (nst=0):
+       - initial setup
+       - compute initial step size
+       - check for approach to tstop
+       - check for approach to a root
+  ----------------------------------------*/
+  if (ark_mem->ark_nst == 0) {
+
+    /* initialize tret values to initialization time */
+    ark_mem->ark_tretlast = *tret = ark_mem->ark_tn;
+
+    /* Temporarily set ark_h and perform initial integrator setup */
+    ark_mem->ark_h = SUNRabs(tout - ark_mem->ark_tn);
+    if (ark_mem->ark_h == ZERO)  ark_mem->ark_h = ONE;
+    ier = arkInitialSetup(ark_mem);
+    if (ier!= ARK_SUCCESS) return(ier);
+    
+    /* Copy f(t0,y0) into ark_fold */
+    /*   if (!ark_mem->ark_explicit)*/
+    N_VScale(ONE, ark_mem->ark_fnew, ark_mem->ark_fold);
+    
+    /* Test input tstop for legality. */
+    if ( ark_mem->ark_tstopset ) {
+      if ( (ark_mem->ark_tstop - ark_mem->ark_tn)*(tout - ark_mem->ark_tn) <= ZERO ) {
+        arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKVODE", "ARKode", 
+			MSGARK_BAD_TSTOP, ark_mem->ark_tstop, ark_mem->ark_tn);
+        return(ARK_ILL_INPUT);
+      }
+    }
+
+    /* Set initial h (from H0 or arkHin). */
+    ark_mem->ark_h = ark_mem->ark_hin;
+    if ( (ark_mem->ark_h != ZERO) && 
+	 ((tout-ark_mem->ark_tn)*ark_mem->ark_h < ZERO) ) {
+      arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "ARKode", 
+		      MSGARK_BAD_H0);
+      return(ARK_ILL_INPUT);
+    }
+    if (ark_mem->ark_h == ZERO) {
+      /* Again, temporarily set ark_h for estimating an optimal value */
+      ark_mem->ark_h = SUNRabs(tout - ark_mem->ark_tn);
+      if (ark_mem->ark_h == ZERO)  ark_mem->ark_h = ONE;
+      /* Estimate the first step size */
+      tout_hin = tout;
+      if ( ark_mem->ark_tstopset && 
+	   (tout-ark_mem->ark_tn)*(tout-ark_mem->ark_tstop) > ZERO ) 
+	tout_hin = ark_mem->ark_tstop; 
+      hflag = arkHin(ark_mem, tout_hin);
+      if (hflag != ARK_SUCCESS) {
+        istate = arkHandleFailure(ark_mem, hflag);
+        return(istate);
+      }
+    }
+    rh = SUNRabs(ark_mem->ark_h)*ark_mem->ark_hmax_inv;
+    if (rh > ONE) ark_mem->ark_h /= rh;
+    if (SUNRabs(ark_mem->ark_h) < ark_mem->ark_hmin)
+      ark_mem->ark_h *= ark_mem->ark_hmin/SUNRabs(ark_mem->ark_h);
+
+    /* Check for approach to tstop */
+    if (ark_mem->ark_tstopset) {
+      if ( (ark_mem->ark_tn + ark_mem->ark_h - ark_mem->ark_tstop)*ark_mem->ark_h > ZERO ) {
+        ark_mem->ark_h = (ark_mem->ark_tstop - ark_mem->ark_tn)*(ONE-FOUR*ark_mem->ark_uround);
+      }
+    }
+
+    /* Set initial time step factors */
+    ark_mem->ark_h0u    = ark_mem->ark_h;
+    ark_mem->ark_hprime = ark_mem->ark_h;
+
+    /* Check for zeros of root function g at and near t0. */
+    if (ark_mem->ark_nrtfn > 0) {
+      retval = arkRootCheck1(ark_mem);
+
+      if (retval == ARK_RTFUNC_FAIL) {
+        arkProcessError(ark_mem, ARK_RTFUNC_FAIL, "ARKODE", "arkRootCheck1", 
+			MSGARK_RTFUNC_FAILED, ark_mem->ark_tn);
+        return(ARK_RTFUNC_FAIL);
+      }
+    }
+
+  } /* end of first call block */
+
+
+  /*----------------------------------------
+    2b. Initializations performed only in 
+        the first step after the problem has
+        been resized:
+       - re-initialize the linear solver
+       - fills ynew, fnew and fold arrays
+       - checks for approach to tstop
+       - checks for root near t0
+  ----------------------------------------*/
+  if (ark_mem->ark_nst > 0 && ark_mem->ark_resized) {
+
+    /* Re-initialize the linear solver (assumes that solver 
+       memory has already been resized appropriately) */
+    if (!ark_mem->ark_explicit) {
+      if (ark_mem->ark_linit != NULL) {
+	ier = ark_mem->ark_linit(ark_mem);
+	if (ier != 0) {
+	  arkProcessError(ark_mem, ARK_LINIT_FAIL, "ARKODE", 
+			  "ARKode", MSGARK_LINIT_FAIL);
+	  return(ARK_LINIT_FAIL);
+	}
+      }
+    }
+
+    /* Re-initialize the mass matrix solver (assumes that solver 
+       memory has already been resized appropriately) */
+    if (ark_mem->ark_minit != NULL) {
+      ier = ark_mem->ark_minit(ark_mem);
+      if (ier != 0) {
+	arkProcessError(ark_mem, ARK_MASSINIT_FAIL, "ARKODE", 
+			"ARKode", MSGARK_MASSINIT_FAIL);
+	return(ARK_MASSINIT_FAIL);
+      }
+    }
+
+    /* Fill initial ynew and fnew arrays */
+    N_VScale(ONE, ark_mem->ark_ycur, ark_mem->ark_ynew);
+    ier = arkFullRHS(ark_mem, ark_mem->ark_tn, ark_mem->ark_ycur,
+		     ark_mem->ark_ftemp, ark_mem->ark_fnew);
+
+    /* Load updated error weights */
+    ier = ark_mem->ark_efun(ark_mem->ark_ycur,
+			    ark_mem->ark_ewt, 
+			    ark_mem->ark_e_data);
+    if (ier != 0) {
+      if (ark_mem->ark_itol == ARK_WF) 
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_EWT_FAIL);
+      else 
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeResize", MSGARK_BAD_EWT);
+      return(ARK_ILL_INPUT);
+    }
+
+    /* Load updated residual weights */
+    if (!ark_mem->ark_rwt_is_ewt) {
+      ier = ark_mem->ark_rfun(ark_mem->ark_ycur,
+			      ark_mem->ark_rwt, 
+			      ark_mem->ark_r_data);
+      if (ier != 0) {
+	if (ark_mem->ark_itol == ARK_WF) 
+	  arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			  "ARKodeResize", MSGARK_RWT_FAIL);
+	else 
+	  arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			  "ARKodeResize", MSGARK_BAD_RWT);
+	return(ARK_ILL_INPUT);
+      }
+    }
+
+    /* if the problem involves a non-identity mass matrix, update fnew here */
+    if (ark_mem->ark_mass_matrix) {
+      N_VScale(ark_mem->ark_h, ark_mem->ark_fnew, ark_mem->ark_fnew);   /* scale RHS */
+      retval = ark_mem->ark_msolve(ark_mem, ark_mem->ark_fnew, ark_mem->ark_rwt); 
+      /* retval = ark_mem->ark_msolve(ark_mem, ark_mem->ark_fnew, ark_mem->ark_ewt);  */
+      N_VScale(ONE/ark_mem->ark_h, ark_mem->ark_fnew, ark_mem->ark_fnew);   /* scale result */
+      ark_mem->ark_mass_solves++;
+      if (retval != ARK_SUCCESS) {
+	ark_mem->ark_nmassfails++;
+	arkProcessError(ark_mem, ARK_MASSSOLVE_FAIL, "ARKODE", 
+			"ARKode", "Mass matrix solver failure");
+	return(ARK_MASSSOLVE_FAIL);
+      }
+    }
+  
+    /* Copy f(t0,y0) into ark_fold */
+    /* if (!ark_mem->ark_explicit) */
+    N_VScale(ONE, ark_mem->ark_fnew, ark_mem->ark_fold);
+
+    /* Check for legal tstop (correct direction of integration) */
+    if (ark_mem->ark_tstopset) {
+      if ( (ark_mem->ark_tstop - ark_mem->ark_tn)*ark_mem->ark_h < ZERO ) {
+        arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "ARKode", 
+			MSGARK_BAD_TSTOP, ark_mem->ark_tstop, ark_mem->ark_tn);
+        return(ARK_ILL_INPUT);
+      }
+    }
+
+    /* Check for zeros of root function g at and near t0. */
+    if (ark_mem->ark_nrtfn > 0) {
+      retval = arkRootCheck1(ark_mem);
+
+      if (retval == ARK_RTFUNC_FAIL) {
+        arkProcessError(ark_mem, ARK_RTFUNC_FAIL, "ARKODE", "arkRootCheck1", 
+			MSGARK_RTFUNC_FAILED, ark_mem->ark_tn);
+        return(ARK_RTFUNC_FAIL);
+      }
+    }
+
+  } /* end of first-step-after-resize call block */
+
+
+  /*------------------------------------------------------
+    3. At following steps, perform stop tests:
+       - check for root in last step
+       - check if we passed tstop
+       - check if we passed tout (NORMAL mode)
+       - check if current tn was returned (ONE_STEP mode)
+       - check if we are close to tstop
+         (adjust step size if needed)
+  -------------------------------------------------------*/
+  if (ark_mem->ark_nst > 0 && !ark_mem->ark_resized) {
+
+    /* Estimate an infinitesimal time interval to be used as
+       a roundoff for time quantities (based on current time 
+       and step size) */
+    troundoff = FUZZ_FACTOR*ark_mem->ark_uround *
+      (SUNRabs(ark_mem->ark_tn) + SUNRabs(ark_mem->ark_h));
+
+    /* First, check for a root in the last step taken, other than the
+       last root found, if any.  If itask = ARK_ONE_STEP and y(tn) was not
+       returned because of an intervening root, return y(tn) now.     */
+    if (ark_mem->ark_nrtfn > 0) {
+
+      irfndp = ark_mem->ark_irfnd;
+      
+      retval = arkRootCheck2(ark_mem);
+
+      if (retval == CLOSERT) {
+        arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "arkRootCheck2", 
+			MSGARK_CLOSE_ROOTS, ark_mem->ark_tlo);
+        return(ARK_ILL_INPUT);
+      } else if (retval == ARK_RTFUNC_FAIL) {
+        arkProcessError(ark_mem, ARK_RTFUNC_FAIL, "ARKODE", "arkRootCheck2", 
+			MSGARK_RTFUNC_FAILED, ark_mem->ark_tlo);
+        return(ARK_RTFUNC_FAIL);
+      } else if (retval == RTFOUND) {
+        ark_mem->ark_tretlast = *tret = ark_mem->ark_tlo;
+        return(ARK_ROOT_RETURN);
+      }
+
+      /* If tn is distinct from tretlast (within roundoff),
+         check remaining interval for roots */
+      if ( SUNRabs(ark_mem->ark_tn - ark_mem->ark_tretlast) > troundoff ) {
+
+        retval = arkRootCheck3(ark_mem);
+
+        if (retval == ARK_SUCCESS) {     /* no root found */
+          ark_mem->ark_irfnd = 0;
+          if ((irfndp == 1) && (itask == ARK_ONE_STEP)) {
+            ark_mem->ark_tretlast = *tret = ark_mem->ark_tn;
+            N_VScale(ONE, ark_mem->ark_ycur, yout);
+            return(ARK_SUCCESS);
+          }
+        } else if (retval == RTFOUND) {  /* a new root was found */
+          ark_mem->ark_irfnd = 1;
+          ark_mem->ark_tretlast = *tret = ark_mem->ark_tlo;
+          return(ARK_ROOT_RETURN);
+        } else if (retval == ARK_RTFUNC_FAIL) {  /* g failed */
+          arkProcessError(ark_mem, ARK_RTFUNC_FAIL, "ARKODE", "arkRootCheck3", 
+			  MSGARK_RTFUNC_FAILED, ark_mem->ark_tlo);
+          return(ARK_RTFUNC_FAIL);
+        }
+
+      }
+
+    } /* end of root stop check */
+
+    /* In ARK_NORMAL mode, test if tout was reached */
+    if ( (itask == ARK_NORMAL) && 
+	 ((ark_mem->ark_tn-tout)*ark_mem->ark_h >= ZERO) ) {
+      ark_mem->ark_tretlast = *tret = tout;
+      ier =  ARKodeGetDky(ark_mem, tout, 0, yout);
+      if (ier != ARK_SUCCESS) {
+        arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKode", MSGARK_BAD_TOUT, tout);
+        return(ARK_ILL_INPUT);
+      }
+      return(ARK_SUCCESS);
+    }
+
+    /* In ARK_ONE_STEP mode, test if tn was returned */
+    if ( itask == ARK_ONE_STEP && 
+	 SUNRabs(ark_mem->ark_tn - ark_mem->ark_tretlast) > troundoff ) {
+      ark_mem->ark_tretlast = *tret = ark_mem->ark_tn;
+      N_VScale(ONE, ark_mem->ark_ycur, yout);
+      return(ARK_SUCCESS);
+    }
+
+    /* Test for tn at tstop or near tstop */
+    if ( ark_mem->ark_tstopset ) {
+
+      if ( SUNRabs(ark_mem->ark_tn - ark_mem->ark_tstop) <= troundoff) {
+        ier =  ARKodeGetDky(ark_mem, ark_mem->ark_tstop, 0, yout);
+        if (ier != ARK_SUCCESS) {
+          arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "ARKode", 
+			  MSGARK_BAD_TSTOP, ark_mem->ark_tstop, ark_mem->ark_tn);
+          return(ARK_ILL_INPUT);
+        }
+        ark_mem->ark_tretlast = *tret = ark_mem->ark_tstop;
+        ark_mem->ark_tstopset = FALSE;
+        return(ARK_TSTOP_RETURN);
+      }
+      
+      /* If next step would overtake tstop, adjust stepsize */
+      if ( (ark_mem->ark_tn + ark_mem->ark_hprime - ark_mem->ark_tstop)*ark_mem->ark_h > ZERO ) {
+        ark_mem->ark_hprime = (ark_mem->ark_tstop - ark_mem->ark_tn)*(ONE-FOUR*ark_mem->ark_uround);
+        ark_mem->ark_eta = ark_mem->ark_hprime/ark_mem->ark_h;
+      }
+    }
+  } /* end stopping tests block */  
+
+
+  /*--------------------------------------------------
+    4. Looping point for internal steps
+ 
+       - update the ewt vector for the next step
+       - check for errors (too many steps, too much
+         accuracy requested, step size too small)
+       - take a new step (via arkStep); stop on error 
+       - perform stop tests:
+         - check for root in last step taken
+         - check if tout was passed
+         - check if close to tstop
+         - check if in ONE_STEP mode (must return)
+  --------------------------------------------------*/
+  nstloc = 0;
+  for(;;) {
+   
+    ark_mem->ark_next_h = ark_mem->ark_h;
+    
+    /* Reset and check ewt */
+    if (ark_mem->ark_nst > 0 && !ark_mem->ark_resized) {
+      ewtsetOK = ark_mem->ark_efun(ark_mem->ark_ycur,
+				   ark_mem->ark_ewt, 
+				   ark_mem->ark_e_data);
+      if (ewtsetOK != 0) {
+        if (ark_mem->ark_itol == ARK_WF) 
+          arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "ARKode", 
+			  MSGARK_EWT_NOW_FAIL, ark_mem->ark_tn);
+        else 
+          arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "ARKode", 
+			  MSGARK_EWT_NOW_BAD, ark_mem->ark_tn);
+	
+        istate = ARK_ILL_INPUT;
+        ark_mem->ark_tretlast = *tret = ark_mem->ark_tn;
+        N_VScale(ONE, ark_mem->ark_ycur, yout);
+        break;
+      }
+    }
+    
+    /* Reset and check rwt */
+    if (!ark_mem->ark_rwt_is_ewt) {
+      if (ark_mem->ark_nst > 0 && !ark_mem->ark_resized) {
+	ewtsetOK = ark_mem->ark_rfun(ark_mem->ark_ycur,
+				     ark_mem->ark_rwt,
+				     ark_mem->ark_r_data);
+	if (ewtsetOK != 0) {
+	  if (ark_mem->ark_itol == ARK_WF) 
+	    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "ARKode", 
+			    MSGARK_RWT_NOW_FAIL, ark_mem->ark_tn);
+	  else 
+	    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "ARKode", 
+			    MSGARK_RWT_NOW_BAD, ark_mem->ark_tn);
+	
+	  istate = ARK_ILL_INPUT;
+	  ark_mem->ark_tretlast = *tret = ark_mem->ark_tn;
+	  N_VScale(ONE, ark_mem->ark_ycur, yout);
+	  break;
+	}
+      }
+    }
+    
+    /* Check for too many steps */
+    if ( (ark_mem->ark_mxstep>0) && (nstloc >= ark_mem->ark_mxstep) ) {
+      arkProcessError(ark_mem, ARK_TOO_MUCH_WORK, "ARKODE", "ARKode", 
+		      MSGARK_MAX_STEPS, ark_mem->ark_tn);
+      istate = ARK_TOO_MUCH_WORK;
+      ark_mem->ark_tretlast = *tret = ark_mem->ark_tn;
+      N_VScale(ONE, ark_mem->ark_ycur, yout);
+      break;
+    }
+
+    /* Check for too much accuracy requested */
+    nrm = N_VWrmsNorm(ark_mem->ark_ycur, ark_mem->ark_ewt);
+    ark_mem->ark_tolsf = ark_mem->ark_uround * nrm;
+    if (ark_mem->ark_tolsf > ONE) {
+      arkProcessError(ark_mem, ARK_TOO_MUCH_ACC, "ARKODE", "ARKode", 
+		      MSGARK_TOO_MUCH_ACC, ark_mem->ark_tn);
+      istate = ARK_TOO_MUCH_ACC;
+      ark_mem->ark_tretlast = *tret = ark_mem->ark_tn;
+      N_VScale(ONE, ark_mem->ark_ycur, yout);
+      ark_mem->ark_tolsf *= TWO;
+      break;
+    } else {
+      ark_mem->ark_tolsf = ONE;
+    }
+
+    /* Check for h below roundoff level in tn */
+    if (ark_mem->ark_tn + ark_mem->ark_h == ark_mem->ark_tn) {
+      ark_mem->ark_nhnil++;
+      if (ark_mem->ark_nhnil <= ark_mem->ark_mxhnil) 
+        arkProcessError(ark_mem, ARK_WARNING, "ARKODE", "ARKode", 
+			MSGARK_HNIL, ark_mem->ark_tn, ark_mem->ark_h);
+      if (ark_mem->ark_nhnil == ark_mem->ark_mxhnil) 
+        arkProcessError(ark_mem, ARK_WARNING, "ARKODE", "ARKode", 
+			MSGARK_HNIL_DONE);
+    }
+
+    /* Update parameter for upcoming step size */
+    if ((ark_mem->ark_nst > 0) && (ark_mem->ark_hprime != ark_mem->ark_h)) {
+      ark_mem->ark_h = ark_mem->ark_h * ark_mem->ark_eta;
+      ark_mem->ark_next_h = ark_mem->ark_h;
+    }
+    if (ark_mem->ark_fixedstep) {
+      ark_mem->ark_h = ark_mem->ark_hin;
+      ark_mem->ark_next_h = ark_mem->ark_h;
+    }
+
+    /* Call arkStep to take a step */
+    kflag = arkStep(ark_mem);
+
+    /* Process failed step cases, and exit loop */
+    if (kflag != ARK_SUCCESS) {
+      istate = arkHandleFailure(ark_mem, kflag);
+      ark_mem->ark_tretlast = *tret = ark_mem->ark_tn;
+      N_VScale(ONE, ark_mem->ark_ycur, yout);
+      break;
+    }
+    
+    nstloc++;
+
+    /* Check for root in last step taken. */
+    if (ark_mem->ark_nrtfn > 0) {
+
+      retval = arkRootCheck3(ark_mem);
+      if (retval == RTFOUND) {  /* A new root was found */
+        ark_mem->ark_irfnd = 1;
+        istate = ARK_ROOT_RETURN;
+        ark_mem->ark_tretlast = *tret = ark_mem->ark_tlo;
+        break;
+      } else if (retval == ARK_RTFUNC_FAIL) { /* g failed */
+        arkProcessError(ark_mem, ARK_RTFUNC_FAIL, "ARKODE", "arkRootCheck3", 
+			MSGARK_RTFUNC_FAILED, ark_mem->ark_tlo);
+        istate = ARK_RTFUNC_FAIL;
+        break;
+      }
+
+      /* If we are at the end of the first step and we still have
+       * some event functions that are inactive, issue a warning
+       * as this may indicate a user error in the implementation
+       * of the root function. */
+      if (ark_mem->ark_nst==1) {
+        inactive_roots = FALSE;
+        for (ir=0; ir<ark_mem->ark_nrtfn; ir++) { 
+          if (!ark_mem->ark_gactive[ir]) {
+            inactive_roots = TRUE;
+            break;
+          }
+        }
+        if ((ark_mem->ark_mxgnull > 0) && inactive_roots) {
+          arkProcessError(ark_mem, ARK_WARNING, "ARKODES", "ARKode", 
+			  MSGARK_INACTIVE_ROOTS);
+        }
+      }
+    }
+
+    /* In NORMAL mode, check if tout reached */
+    if ( (itask == ARK_NORMAL) &&
+	 (ark_mem->ark_tn-tout)*ark_mem->ark_h >= ZERO ) {
+      istate = ARK_SUCCESS;
+      ark_mem->ark_tretlast = *tret = tout;
+      (void) ARKodeGetDky(ark_mem, tout, 0, yout);
+      ark_mem->ark_next_h = ark_mem->ark_hprime;
+      break;
+    }
+
+    /* Check if tn is at tstop or near tstop */
+    if ( ark_mem->ark_tstopset ) {
+      troundoff = FUZZ_FACTOR*ark_mem->ark_uround * 
+	(SUNRabs(ark_mem->ark_tn) + SUNRabs(ark_mem->ark_h));
+      if ( SUNRabs(ark_mem->ark_tn - ark_mem->ark_tstop) <= troundoff) {
+        (void) ARKodeGetDky(ark_mem, ark_mem->ark_tstop, 0, yout);
+        ark_mem->ark_tretlast = *tret = ark_mem->ark_tstop;
+        ark_mem->ark_tstopset = FALSE;
+        istate = ARK_TSTOP_RETURN;
+        break;
+      }
+      if ( (ark_mem->ark_tn + ark_mem->ark_hprime - ark_mem->ark_tstop)*ark_mem->ark_h > ZERO ) {
+        ark_mem->ark_hprime = (ark_mem->ark_tstop - ark_mem->ark_tn)*(ONE-FOUR*ark_mem->ark_uround);
+        ark_mem->ark_eta = ark_mem->ark_hprime/ark_mem->ark_h;
+      }
+    }
+
+    /* In ONE_STEP mode, copy y and exit loop */
+    if (itask == ARK_ONE_STEP) {
+      istate = ARK_SUCCESS;
+      ark_mem->ark_tretlast = *tret = ark_mem->ark_tn;
+      N_VScale(ONE, ark_mem->ark_ycur, yout);
+      ark_mem->ark_next_h = ark_mem->ark_hprime;
+      break;
+    }
+
+  } /* end looping for internal steps */
+
+  return(istate);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetDky:
+
+ This routine computes the k-th derivative of the interpolating
+ polynomial at the time t and stores the result in the vector 
+ dky. This routine internally calls arkDenseEval to perform the
+ interpolation.  We have the restriction that 0 <= k <= 3.  This 
+ routine uses an interpolating polynomial of degree 
+ max(ark_dense_q, k), i.e. it will form a polynomial of the
+ degree requested by the user through ark_dense_q, unless 
+ higher-order derivatives are requested.
+
+ This function is called by ARKode with k=0 and t=tout to perform
+ interpolation of outputs, but may also be called directly by the
+ user.  Note: in all cases it will be called after ark_tn has 
+ been updated to correspond with the end time of the last 
+ successful step.
+---------------------------------------------------------------*/
+int ARKodeGetDky(void *arkode_mem, realtype t, int k, N_Vector dky)
+{
+  realtype s, tfuzz, tp, tn1;
+  int retval, degree;
+  ARKodeMem ark_mem;
+  
+  /* Check all inputs for legality */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", "ARKodeGetDky", 
+		    MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+  if (dky == NULL) {
+    arkProcessError(ark_mem, ARK_BAD_DKY, "ARKODE", "ARKodeGetDky", 
+		    MSGARK_NULL_DKY);
+    return(ARK_BAD_DKY);
+  }
+  if ((k < 0) || (k > 3)) {
+    arkProcessError(ark_mem, ARK_BAD_K, "ARKODE", "ARKodeGetDky", 
+		    MSGARK_BAD_K);
+    return(ARK_BAD_K);
+  }
+  
+  /* Allow for some slack */
+  tfuzz = FUZZ_FACTOR * ark_mem->ark_uround * 
+    (SUNRabs(ark_mem->ark_tn) + SUNRabs(ark_mem->ark_hold));
+  if (ark_mem->ark_hold < ZERO) tfuzz = -tfuzz;
+  tp = ark_mem->ark_tn - ark_mem->ark_hold - tfuzz;
+  tn1 = ark_mem->ark_tn + tfuzz;
+  if ((t-tp)*(t-tn1) > ZERO) {
+    arkProcessError(ark_mem, ARK_BAD_T, "ARKODE", "ARKodeGetDky", 
+		    MSGARK_BAD_T, t, ark_mem->ark_tn-ark_mem->ark_hold, 
+		    ark_mem->ark_tn);
+    return(ARK_BAD_T);
+  }
+
+  /* call arkDenseEval to evaluate result */
+  s = (t - ark_mem->ark_tn) / ark_mem->ark_h;
+  degree = (k > ark_mem->ark_dense_q) ? k : ark_mem->ark_dense_q;
+  retval = arkDenseEval(ark_mem, s, k, degree, dky);
+  if (retval != ARK_SUCCESS) 
+    arkProcessError(ark_mem, ARK_RHSFUNC_FAIL, "ARKODE", "arkDenseEval", 
+		    MSGARK_RHSFUNC_FAILED, t);
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeFree:
+
+ This routine frees the problem memory allocated by ARKodeInit.
+ Such memory includes all the vectors allocated by 
+ arkAllocVectors, and arkAllocRKVectors, and the memory lmem for
+ the linear solver (deallocated by a call to lfree).
+---------------------------------------------------------------*/
+void ARKodeFree(void **arkode_mem)
+{
+  ARKodeMem ark_mem;
+
+  if (*arkode_mem == NULL) return;
+
+  ark_mem = (ARKodeMem) (*arkode_mem);
+  
+  arkFreeVectors(ark_mem);
+
+  arkFreeFPData(ark_mem);
+
+  if (ark_mem->ark_lfree != NULL) 
+    ark_mem->ark_lfree(ark_mem);
+
+  if (ark_mem->ark_mfree != NULL) 
+    ark_mem->ark_mfree(ark_mem);
+
+  if (ark_mem->ark_nrtfn > 0) {
+    free(ark_mem->ark_glo);     ark_mem->ark_glo     = NULL;
+    free(ark_mem->ark_ghi);     ark_mem->ark_ghi     = NULL;
+    free(ark_mem->ark_grout);   ark_mem->ark_grout   = NULL;
+    free(ark_mem->ark_iroots);  ark_mem->ark_iroots  = NULL;
+    free(ark_mem->ark_rootdir); ark_mem->ark_rootdir = NULL;
+    free(ark_mem->ark_gactive); ark_mem->ark_gactive = NULL;
+  }
+
+  free(*arkode_mem);
+  *arkode_mem = NULL;
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeRootInit:
+
+ ARKodeRootInit initializes a rootfinding problem to be solved
+ during the integration of the ODE system.  It loads the root
+ function pointer and the number of root functions, and allocates
+ workspace memory.  The return value is ARK_SUCCESS = 0 if no 
+ errors occurred, or a negative value otherwise.
+---------------------------------------------------------------*/
+int ARKodeRootInit(void *arkode_mem, int nrtfn, ARKRootFn g)
+{
+  ARKodeMem ark_mem;
+  int i, nrt;
+
+  /* Check arkode_mem pointer */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeRootInit", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  nrt = (nrtfn < 0) ? 0 : nrtfn;
+
+  /* If rerunning ARKodeRootInit() with a different number of root
+     functions (changing number of gfun components), then free
+     currently held memory resources */
+  if ((nrt != ark_mem->ark_nrtfn) && (ark_mem->ark_nrtfn > 0)) {
+    free(ark_mem->ark_glo);     ark_mem->ark_glo     = NULL;
+    free(ark_mem->ark_ghi);     ark_mem->ark_ghi     = NULL;
+    free(ark_mem->ark_grout);   ark_mem->ark_grout   = NULL;
+    free(ark_mem->ark_iroots);  ark_mem->ark_iroots  = NULL;
+    free(ark_mem->ark_rootdir); ark_mem->ark_rootdir = NULL;
+    free(ark_mem->ark_gactive); ark_mem->ark_gactive = NULL;
+
+    ark_mem->ark_lrw -= 3 * (ark_mem->ark_nrtfn);
+    ark_mem->ark_liw -= 3 * (ark_mem->ark_nrtfn);
+  }
+
+  /* If ARKodeRootInit() was called with nrtfn == 0, then set 
+     ark_nrtfn to zero and ark_gfun to NULL before returning */
+  if (nrt == 0) {
+    ark_mem->ark_nrtfn = nrt;
+    ark_mem->ark_gfun = NULL;
+    return(ARK_SUCCESS);
+  }
+
+  /* If rerunning ARKodeRootInit() with the same number of root 
+     functions (not changing number of gfun components), then 
+     check if the root function argument has changed */
+  /* If g != NULL then return as currently reserved memory 
+     resources will suffice */
+  if (nrt == ark_mem->ark_nrtfn) {
+    if (g != ark_mem->ark_gfun) {
+      if (g == NULL) {
+        free(ark_mem->ark_glo);     ark_mem->ark_glo     = NULL;
+        free(ark_mem->ark_ghi);     ark_mem->ark_ghi     = NULL;
+        free(ark_mem->ark_grout);   ark_mem->ark_grout   = NULL;
+        free(ark_mem->ark_iroots);  ark_mem->ark_iroots  = NULL;
+        free(ark_mem->ark_rootdir); ark_mem->ark_rootdir = NULL;
+        free(ark_mem->ark_gactive); ark_mem->ark_gactive = NULL;
+
+        ark_mem->ark_lrw -= 3*nrt;
+        ark_mem->ark_liw -= 3*nrt;
+
+        arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"ARKodeRootInit", MSGARK_NULL_G);
+        return(ARK_ILL_INPUT);
+      }
+      else {
+        ark_mem->ark_gfun = g;
+        return(ARK_SUCCESS);
+      }
+    }
+    else return(ARK_SUCCESS);
+  }
+
+  /* Set variable values in ARKode memory block */
+  ark_mem->ark_nrtfn = nrt;
+  if (g == NULL) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeRootInit", MSGARK_NULL_G);
+    return(ARK_ILL_INPUT);
+  }
+  else ark_mem->ark_gfun = g;
+
+  /* Allocate necessary memory and return */
+  ark_mem->ark_glo = NULL;
+  ark_mem->ark_glo = (realtype *) malloc(nrt*sizeof(realtype));
+  if (ark_mem->ark_glo == NULL) {
+    arkProcessError(ark_mem, ARK_MEM_FAIL, "ARKODE", 
+		    "ARKodeRootInit", MSGARK_MEM_FAIL);
+    return(ARK_MEM_FAIL);
+  }
+  ark_mem->ark_ghi = NULL;
+  ark_mem->ark_ghi = (realtype *) malloc(nrt*sizeof(realtype));
+  if (ark_mem->ark_ghi == NULL) {
+    free(ark_mem->ark_glo); ark_mem->ark_glo = NULL;
+    arkProcessError(ark_mem, ARK_MEM_FAIL, "ARKODE", 
+		    "ARKodeRootInit", MSGARK_MEM_FAIL);
+    return(ARK_MEM_FAIL);
+  }
+  ark_mem->ark_grout = NULL;
+  ark_mem->ark_grout = (realtype *) malloc(nrt*sizeof(realtype));
+  if (ark_mem->ark_grout == NULL) {
+    free(ark_mem->ark_glo); ark_mem->ark_glo = NULL;
+    free(ark_mem->ark_ghi); ark_mem->ark_ghi = NULL;
+    arkProcessError(ark_mem, ARK_MEM_FAIL, "ARKODE", 
+		    "ARKodeRootInit", MSGARK_MEM_FAIL);
+    return(ARK_MEM_FAIL);
+  }
+  ark_mem->ark_iroots = NULL;
+  ark_mem->ark_iroots = (int *) malloc(nrt*sizeof(int));
+  if (ark_mem->ark_iroots == NULL) {
+    free(ark_mem->ark_glo); ark_mem->ark_glo = NULL; 
+    free(ark_mem->ark_ghi); ark_mem->ark_ghi = NULL;
+    free(ark_mem->ark_grout); ark_mem->ark_grout = NULL;
+    arkProcessError(ark_mem, ARK_MEM_FAIL, "ARKODE", 
+		    "ARKodeRootInit", MSGARK_MEM_FAIL);
+    return(ARK_MEM_FAIL);
+  }
+  ark_mem->ark_rootdir = NULL;
+  ark_mem->ark_rootdir = (int *) malloc(nrt*sizeof(int));
+  if (ark_mem->ark_rootdir == NULL) {
+    free(ark_mem->ark_glo); ark_mem->ark_glo = NULL; 
+    free(ark_mem->ark_ghi); ark_mem->ark_ghi = NULL;
+    free(ark_mem->ark_grout); ark_mem->ark_grout = NULL;
+    free(ark_mem->ark_iroots); ark_mem->ark_iroots = NULL;
+    arkProcessError(ark_mem, ARK_MEM_FAIL, "ARKODE", 
+		    "ARKodeRootInit", MSGARK_MEM_FAIL);
+    return(ARK_MEM_FAIL);
+  }
+  ark_mem->ark_gactive = NULL;
+  ark_mem->ark_gactive = (booleantype *) malloc(nrt*sizeof(booleantype));
+  if (ark_mem->ark_gactive == NULL) {
+    free(ark_mem->ark_glo); ark_mem->ark_glo = NULL; 
+    free(ark_mem->ark_ghi); ark_mem->ark_ghi = NULL;
+    free(ark_mem->ark_grout); ark_mem->ark_grout = NULL;
+    free(ark_mem->ark_iroots); ark_mem->ark_iroots = NULL;
+    free(ark_mem->ark_rootdir); ark_mem->ark_rootdir = NULL;
+    arkProcessError(ark_mem, ARK_MEM_FAIL, "ARKODES", 
+		    "ARKodeRootInit", MSGARK_MEM_FAIL);
+    return(ARK_MEM_FAIL);
+  }
+
+  /* Set default values for rootdir (both directions) */
+  for(i=0; i<nrt; i++) ark_mem->ark_rootdir[i] = 0;
+
+  /* Set default values for gactive (all active) */
+  for(i=0; i<nrt; i++) ark_mem->ark_gactive[i] = TRUE;
+
+  ark_mem->ark_lrw += 3*nrt;
+  ark_mem->ark_liw += 3*nrt;
+
+  return(ARK_SUCCESS);
+}
+
+
+
+/*===============================================================
+  Internal functions that may be replaced by the user
+===============================================================*/
+
+/*---------------------------------------------------------------
+ arkEwtSet
+
+ This routine is responsible for setting the error weight vector ewt,
+ according to tol_type, as follows:
+
+ (1) ewt[i] = 1 / (reltol * SUNRabs(ycur[i]) + abstol), i=0,...,neq-1
+     if tol_type = ARK_SS
+ (2) ewt[i] = 1 / (reltol * SUNRabs(ycur[i]) + abstol[i]), i=0,...,neq-1
+     if tol_type = ARK_SV
+
+ arkEwtSet returns 0 if ewt is successfully set as above to a
+ positive vector and -1 otherwise. In the latter case, ewt is
+ considered undefined.
+
+ All the real work is done in the routines arkEwtSetSS, arkEwtSetSV.
+---------------------------------------------------------------*/
+int arkEwtSet(N_Vector ycur, N_Vector weight, void *data)
+{
+  ARKodeMem ark_mem;
+  int flag = 0;
+
+  /* data points to ark_mem here */
+  ark_mem = (ARKodeMem) data;
+
+  switch(ark_mem->ark_itol) {
+  case ARK_SS: 
+    flag = arkEwtSetSS(ark_mem, ycur, weight);
+    break;
+  case ARK_SV: 
+    flag = arkEwtSetSV(ark_mem, ycur, weight);
+    break;
+  }
+  
+  return(flag);
+}
+
+
+/*---------------------------------------------------------------
+ arkRwtSet
+
+ This routine is responsible for setting the residual weight 
+ vector rwt, according to tol_type, as follows:
+
+ (1) rwt[i] = 1 / (reltol * SUNRabs(M*ycur[i]) + rabstol), i=0,...,neq-1
+     if tol_type = ARK_SS
+ (2) rwt[i] = 1 / (reltol * SUNRabs(M*ycur[i]) + rabstol[i]), i=0,...,neq-1
+     if tol_type = ARK_SV
+ (3) unset if tol_type is any other value (occurs rwt=ewt)
+
+ arkRwtSet returns 0 if rwt is successfully set as above to a
+ positive vector and -1 otherwise. In the latter case, rwt is
+ considered undefined.
+
+ All the real work is done in the routines arkRwtSetSS, arkRwtSetSV.
+---------------------------------------------------------------*/
+int arkRwtSet(N_Vector y, N_Vector weight, void *data)
+{
+  ARKodeMem ark_mem;
+  N_Vector My;
+  int flag = 0;
+
+  /* data points to ark_mem here */
+  ark_mem = (ARKodeMem) data;
+
+  /* return if rwt is just ewt */
+  if (ark_mem->ark_rwt_is_ewt)  return(0);
+
+  /* put M*y into ark_ftemp */
+  My = ark_mem->ark_ftemp;
+  if (ark_mem->ark_mass_matrix) {
+    flag = ark_mem->ark_mtimes(y, My, ark_mem->ark_tn, 
+			       ark_mem->ark_mtimes_data);
+    ark_mem->ark_mass_mult++;
+    if (flag != ARK_SUCCESS)  return (ARK_MASSMULT_FAIL);
+  } else {  /* this condition should not apply, but just in case */
+    N_VScale(ONE, y, My);
+  }
+
+  /* call appropriate routine to fill rwt */
+  switch(ark_mem->ark_ritol) {
+  case ARK_SS: 
+    flag = arkRwtSetSS(ark_mem, My, weight);
+    break;
+  case ARK_SV: 
+    flag = arkRwtSetSV(ark_mem, My, weight);
+    break;
+  }
+  
+  return(flag);
+}
+
+
+/*---------------------------------------------------------------
+ arkErrHandler is the default error handling function.
+   It sends the error message to the stream pointed to by ark_errfp 
+---------------------------------------------------------------*/
+void arkErrHandler(int error_code, const char *module,
+		   const char *function, char *msg, void *data)
+{
+  ARKodeMem ark_mem;
+  char err_type[10];
+
+  /* data points to ark_mem here */
+  ark_mem = (ARKodeMem) data;
+
+  if (error_code == ARK_WARNING)
+    sprintf(err_type,"WARNING");
+  else
+    sprintf(err_type,"ERROR");
+
+#ifndef NO_FPRINTF_OUTPUT
+  if (ark_mem->ark_errfp!=NULL) {
+    fprintf(ark_mem->ark_errfp,"\n[%s %s]  %s\n",module,err_type,function);
+    fprintf(ark_mem->ark_errfp,"  %s\n\n",msg);
+  }
+#endif
+
+  return;
+}
+
+
+
+/*===============================================================
+   Private Helper Functions
+===============================================================*/
+
+/*---------------------------------------------------------------
+ arkPrintMem:
+
+ This routine outputs the ark_mem structure to stdout.
+---------------------------------------------------------------*/
+static void arkPrintMem(ARKodeMem ark_mem)
+{
+  int i, j;
+
+  /* output integer quantities */
+  printf("ark_itol = %i\n", ark_mem->ark_itol);
+  printf("ark_ritol = %i\n", ark_mem->ark_ritol);
+  printf("ark_q = %i\n", ark_mem->ark_q);
+  printf("ark_p = %i\n", ark_mem->ark_p);
+  printf("ark_istage = %i\n", ark_mem->ark_istage);
+  printf("ark_stages = %i\n", ark_mem->ark_stages);
+  printf("ark_dense_q = %i\n", ark_mem->ark_dense_q);
+  printf("ark_mnewt = %i\n", ark_mem->ark_mnewt);
+  printf("ark_hadapt_imethod = %i\n", ark_mem->ark_hadapt_imethod);
+  printf("ark_maxcor = %i\n", ark_mem->ark_maxcor);
+  printf("ark_mxhnil = %i\n", ark_mem->ark_mxhnil);
+  printf("ark_maxnef = %i\n", ark_mem->ark_maxnef);
+  printf("ark_maxncf = %i\n", ark_mem->ark_maxncf);
+  printf("ark_small_nef = %i\n", ark_mem->ark_small_nef);
+  printf("ark_msbp = %i\n", ark_mem->ark_msbp);
+  printf("ark_predictor = %i\n", ark_mem->ark_predictor);
+  printf("ark_nhnil = %i\n", ark_mem->ark_nhnil);
+  printf("ark_lsolve_type = %i\n", ark_mem->ark_lsolve_type);
+  printf("ark_msolve_type = %i\n", ark_mem->ark_msolve_type);
+  printf("ark_nrtfn = %i\n", ark_mem->ark_nrtfn);
+  if (ark_mem->ark_iroots != NULL) 
+    for (i=0; i<ark_mem->ark_nrtfn; i++)
+      printf("ark_iroots[%i] = %i\n", i, ark_mem->ark_iroots[i]);
+  if (ark_mem->ark_rootdir != NULL) 
+    for (i=0; i<ark_mem->ark_nrtfn; i++)
+      printf("ark_rootdir[%i] = %i\n", i, ark_mem->ark_rootdir[i]);
+  printf("ark_taskc = %i\n", ark_mem->ark_taskc);
+  printf("ark_irfnd = %i\n", ark_mem->ark_irfnd);
+  printf("ark_mxgnull = %i\n", ark_mem->ark_mxgnull);
+
+  /* output long integer quantities */
+  printf("ark_mxstep = %li\n", ark_mem->ark_mxstep);
+  printf("ark_nst = %li\n", ark_mem->ark_nst);
+  printf("ark_nst_acc = %li\n", ark_mem->ark_nst_acc);
+  printf("ark_nst_exp = %li\n", ark_mem->ark_nst_exp);
+  printf("ark_nst_attempts = %li\n", ark_mem->ark_nst_attempts);
+  printf("ark_nfe = %li\n", ark_mem->ark_nfe);
+  printf("ark_nfi = %li\n", ark_mem->ark_nfi);
+  printf("ark_ncfn = %li\n", ark_mem->ark_ncfn);
+  printf("ark_nmassfails = %li\n", ark_mem->ark_nmassfails);
+  printf("ark_netf = %li\n", ark_mem->ark_netf);
+  printf("ark_nni = %li\n", ark_mem->ark_nni);
+  printf("ark_nsetups = %li\n", ark_mem->ark_nsetups);
+  printf("ark_lrw1 = %li\n", ark_mem->ark_lrw1);
+  printf("ark_liw1 = %li\n", ark_mem->ark_liw1);
+  printf("ark_lrw = %li\n", ark_mem->ark_lrw);
+  printf("ark_liw = %li\n", ark_mem->ark_liw);
+  printf("ark_fp_m = %li\n", ark_mem->ark_fp_m);
+  if (ark_mem->ark_fp_imap != NULL)
+    for (i=0; i<ark_mem->ark_fp_m; i++)
+      printf("ark_fp_imap[%i] = %li\n", i, ark_mem->ark_fp_imap[i]);
+  printf("ark_mass_solves = %li\n", ark_mem->ark_mass_solves);
+  printf("ark_mass_mult = %li\n", ark_mem->ark_mass_mult);
+  printf("ark_nstlp = %li\n", ark_mem->ark_nstlp);
+  printf("ark_nge = %li\n", ark_mem->ark_nge);
+
+  /* output boolean quantities */
+  printf("ark_user_efun = %i\n", ark_mem->ark_user_efun);
+  printf("ark_user_linear = %i\n", ark_mem->ark_linear);
+  printf("ark_user_linear_timedep = %i\n", ark_mem->ark_linear_timedep);
+  printf("ark_user_explicit = %i\n", ark_mem->ark_explicit);
+  printf("ark_user_implicit = %i\n", ark_mem->ark_implicit);
+  printf("ark_tstopset = %i\n", ark_mem->ark_tstopset);
+  printf("ark_hadapt_pq = %i\n", ark_mem->ark_hadapt_pq);
+  printf("ark_report = %i\n", ark_mem->ark_report);
+  printf("ark_use_fp = %i\n", ark_mem->ark_use_fp);
+  printf("ark_mass_matrix = %i\n", ark_mem->ark_mass_matrix);
+  printf("ark_jcur = %i\n", ark_mem->ark_jcur);
+  printf("ark_setupNonNull = %i\n", ark_mem->ark_setupNonNull);
+  printf("ark_MassSetupNonNull = %i\n", ark_mem->ark_MassSetupNonNull);
+  printf("ark_VabstolMallocDone = %i\n", ark_mem->ark_VabstolMallocDone);
+  printf("ark_MallocDone = %i\n", ark_mem->ark_MallocDone);
+  printf("ark_resized = %i\n", ark_mem->ark_resized);
+  printf("ark_firststage = %i\n", ark_mem->ark_firststage);
+  if (ark_mem->ark_gactive != NULL)
+    for (i=0; i<ark_mem->ark_nrtfn; i++)
+      printf("ark_gactive[%i] = %i\n", i, ark_mem->ark_gactive[i]);
+
+  /* output realtype quantities */
+  printf("ark_uround = %.16g\n", ark_mem->ark_uround);
+  printf("ark_reltol = %.16g\n", ark_mem->ark_reltol);
+  printf("ark_Sabstol = %.16g\n", ark_mem->ark_Sabstol);
+  printf("ark_tstop = %.16g\n", ark_mem->ark_tstop);
+  printf("ark_Ae = \n");
+  for (i=0; i<ARK_S_MAX; i++) {
+    printf("    ");
+    for (j=0; j<ARK_S_MAX; j++)
+      printf("%.16g  ", ARK_A(ark_mem->ark_Ae,i,j));
+    printf("\n");
+  }
+  printf("ark_Ai = \n");
+  for (i=0; i<ARK_S_MAX; i++) {
+    printf("    ");
+    for (j=0; j<ARK_S_MAX; j++)
+      printf("%.16g  ", ARK_A(ark_mem->ark_Ai,i,j));
+    printf("\n");
+  }
+  printf("ark_ce = ");
+  for (i=0; i<ARK_S_MAX; i++) 
+    printf("%.16g  ", ark_mem->ark_ce[i]);
+  printf("\n");
+  printf("ark_ci = ");
+  for (i=0; i<ARK_S_MAX; i++) 
+    printf("%.16g  ", ark_mem->ark_ci[i]);
+  printf("\n");
+  printf("ark_be = ");
+  for (i=0; i<ARK_S_MAX; i++) 
+    printf("%.16g  ", ark_mem->ark_be[i]);
+  printf("\n");
+  printf("ark_bi = ");
+  for (i=0; i<ARK_S_MAX; i++) 
+    printf("%.16g  ", ark_mem->ark_bi[i]);
+  printf("\n");
+  printf("ark_b2e = ");
+  for (i=0; i<ARK_S_MAX; i++) 
+    printf("%.16g  ", ark_mem->ark_b2e[i]);
+  printf("\n");
+  printf("ark_b2i = ");
+  for (i=0; i<ARK_S_MAX; i++) 
+    printf("%.16g  ", ark_mem->ark_b2i[i]);
+  printf("\n");
+  printf("ark_hin = %.16g\n", ark_mem->ark_hin);
+  printf("ark_h = %.16g\n", ark_mem->ark_h);
+  printf("ark_hprime = %.16g\n", ark_mem->ark_hprime);
+  printf("ark_next_h = %.16g\n", ark_mem->ark_next_h);
+  printf("ark_eta = %.16g\n", ark_mem->ark_eta);
+  printf("ark_tn = %.16g\n", ark_mem->ark_tn);
+  printf("ark_tretlast = %.16g\n", ark_mem->ark_tretlast);
+  printf("ark_gamma = %.16g\n", ark_mem->ark_gamma);
+  printf("ark_gammap = %.16g\n", ark_mem->ark_gammap);
+  printf("ark_gamrat = %.16g\n", ark_mem->ark_gamrat);
+  printf("ark_crate = %.16g\n", ark_mem->ark_crate);
+  printf("ark_eRNrm = %.16g\n", ark_mem->ark_eRNrm);
+  printf("ark_nlscoef = %.16g\n", ark_mem->ark_nlscoef);
+  printf("ark_fixedstep = %i\n", ark_mem->ark_fixedstep);
+  printf("ark_hadapt_ehist =  %.16g  %.16g  %.16g\n",
+	 ark_mem->ark_hadapt_ehist[0], ark_mem->ark_hadapt_ehist[1], ark_mem->ark_hadapt_ehist[2]);
+  printf("ark_hadapt_hhist =  %.16g  %.16g  %.16g\n",
+	 ark_mem->ark_hadapt_hhist[0], ark_mem->ark_hadapt_hhist[1], ark_mem->ark_hadapt_hhist[2]);
+  printf("ark_hadapt_cfl = %.16g\n", ark_mem->ark_hadapt_cfl);
+  printf("ark_hadapt_safety = %.16g\n", ark_mem->ark_hadapt_safety);
+  printf("ark_hadapt_bias = %.16g\n", ark_mem->ark_hadapt_bias);
+  printf("ark_hadapt_growth = %.16g\n", ark_mem->ark_hadapt_growth);
+  printf("ark_hadapt_lbound = %.16g\n", ark_mem->ark_hadapt_lbound);
+  printf("ark_hadapt_ubound = %.16g\n", ark_mem->ark_hadapt_ubound);
+  printf("ark_hadapt_k1 = %.16g\n", ark_mem->ark_hadapt_k1);
+  printf("ark_hadapt_k2 = %.16g\n", ark_mem->ark_hadapt_k2);
+  printf("ark_hadapt_k3 = %.16g\n", ark_mem->ark_hadapt_k3);
+  printf("ark_hmin = %.16g\n", ark_mem->ark_hmin);
+  printf("ark_hmax_inv = %.16g\n", ark_mem->ark_hmax_inv);
+  printf("ark_etamax = %.16g\n", ark_mem->ark_etamax);
+  printf("ark_etamx1 = %.16g\n", ark_mem->ark_etamx1);
+  printf("ark_etamxf = %.16g\n", ark_mem->ark_etamxf);
+  printf("ark_etacf = %.16g\n", ark_mem->ark_etacf);
+  printf("ark_crdown = %.16g\n", ark_mem->ark_crdown);
+  printf("ark_rdiv = %.16g\n", ark_mem->ark_rdiv);
+  printf("ark_dgmax = %.16g\n", ark_mem->ark_dgmax);
+  if (ark_mem->ark_fp_R != NULL) {
+    printf("ark_fp_R =  ");
+    for (i=0; i<ark_mem->ark_fp_m*ark_mem->ark_fp_m; i++)
+      printf("%.16g  ", ark_mem->ark_fp_R[i]);
+    printf("\n");
+  }
+  if (ark_mem->ark_fp_gamma != NULL) {
+    printf("ark_fp_gamma =  ");
+    for (i=0; i<ark_mem->ark_fp_m; i++)
+      printf("%.16g  ", ark_mem->ark_fp_gamma[i]);
+    printf("\n");
+  }
+  printf("ark_h0u = %.16g\n", ark_mem->ark_h0u);
+  printf("ark_tnew = %.16g\n", ark_mem->ark_tnew);
+  printf("ark_hold = %.16g\n", ark_mem->ark_hold);
+  printf("ark_tolsf = %.16g\n", ark_mem->ark_tolsf);
+  printf("ark_tlo = %.16g\n", ark_mem->ark_tlo);
+  printf("ark_thi = %.16g\n", ark_mem->ark_thi);
+  printf("ark_trout = %.16g\n", ark_mem->ark_trout);
+  if (ark_mem->ark_glo != NULL) 
+    for (i=0; i<ark_mem->ark_nrtfn; i++)
+      printf("ark_glo[%i] = %.16g\n", i, ark_mem->ark_glo[i]);
+  if (ark_mem->ark_ghi != NULL) 
+    for (i=0; i<ark_mem->ark_nrtfn; i++)
+      printf("ark_ghi[%i] = %.16g\n", i, ark_mem->ark_ghi[i]);
+  if (ark_mem->ark_grout != NULL) 
+    for (i=0; i<ark_mem->ark_nrtfn; i++)
+      printf("ark_grout[%i] = %.16g\n", i, ark_mem->ark_grout[i]);
+  printf("ark_toutc = %.16g\n", ark_mem->ark_toutc);
+  printf("ark_ttol = %.16g\n", ark_mem->ark_ttol);
+
+#ifdef DEBUG_OUTPUT
+  /* output vector quantities */  
+  if (ark_mem->ark_Vabstol != NULL) {
+    printf("ark_Vapbsol:\n");
+    N_VPrint_Serial(ark_mem->ark_Vabstol);
+  }
+  for (i=0; i<ARK_S_MAX; i++) 
+    if (ark_mem->ark_Fe[i] != NULL) {
+      printf("ark_Fe[%i]:\n", i);
+      N_VPrint_Serial(ark_mem->ark_Fe[i]);
+    }
+  for (i=0; i<ARK_S_MAX; i++) 
+    if (ark_mem->ark_Fi[i] != NULL) {
+      printf("ark_Fi[%i]:\n", i);
+      N_VPrint_Serial(ark_mem->ark_Fi[i]);
+    }
+  if (ark_mem->ark_ewt != NULL) {
+    printf("ark_ewt:\n");
+    N_VPrint_Serial(ark_mem->ark_ewt);
+  }
+  if (!ark_mem->ark_rwt_is_ewt && ark_mem->ark_rwt != NULL) {
+    printf("ark_rwt:\n");
+    N_VPrint_Serial(ark_mem->ark_rwt);
+  }
+  if (ark_mem->ark_y != NULL) {
+    printf("ark_y:\n");
+    N_VPrint_Serial(ark_mem->ark_y);
+  }
+  if (ark_mem->ark_ycur != NULL) {
+    printf("ark_ycur:\n");
+    N_VPrint_Serial(ark_mem->ark_ycur);
+  }
+  if (ark_mem->ark_sdata != NULL) {
+    printf("ark_sdata:\n");
+    N_VPrint_Serial(ark_mem->ark_sdata);
+  }
+  if (ark_mem->ark_tempv != NULL) {
+    printf("ark_tempv:\n");
+    N_VPrint_Serial(ark_mem->ark_tempv);
+  }
+  if (ark_mem->ark_acor != NULL) {
+    printf("ark_acor:\n");
+    N_VPrint_Serial(ark_mem->ark_acor);
+  }
+  if (ark_mem->ark_ftemp != NULL) {
+    printf("ark_ftemp:\n");
+    N_VPrint_Serial(ark_mem->ark_ftemp);
+  }
+  if (ark_mem->ark_fold != NULL) {
+    printf("ark_fold:\n");
+    N_VPrint_Serial(ark_mem->ark_fold);
+  }
+  if (ark_mem->ark_fnew != NULL) {
+    printf("ark_fnew:\n");
+    N_VPrint_Serial(ark_mem->ark_fnew);
+  }
+  if (ark_mem->ark_yold != NULL) {
+    printf("ark_yold:\n");
+    N_VPrint_Serial(ark_mem->ark_yold);
+  }
+  if (ark_mem->ark_ynew != NULL) {
+    printf("ark_ynew:\n");
+    N_VPrint_Serial(ark_mem->ark_ynew);
+  }
+  if (ark_mem->ark_fp_df != NULL) 
+    for (i=0; i<ark_mem->ark_fp_m; i++)
+      if (ark_mem->ark_fp_df[i] != NULL) {
+	printf("ark_fp_df[%i]:\n", i);
+	N_VPrint_Serial(ark_mem->ark_fp_df[i]);
+      }
+  if (ark_mem->ark_fp_dg != NULL) 
+    for (i=0; i<ark_mem->ark_fp_m; i++)
+      if (ark_mem->ark_fp_dg[i] != NULL) {
+	printf("ark_fp_dg[%i]:\n", i);
+	N_VPrint_Serial(ark_mem->ark_fp_dg[i]);
+      }
+  if (ark_mem->ark_fp_q != NULL) 
+    for (i=0; i<ark_mem->ark_fp_m; i++)
+      if (ark_mem->ark_fp_q[i] != NULL) {
+	printf("ark_fp_q[%i]:\n", i);
+	N_VPrint_Serial(ark_mem->ark_fp_q[i]);
+      }
+  if (ark_mem->ark_fp_fval != NULL) {
+    printf("ark_fp_fval:\n");
+    N_VPrint_Serial(ark_mem->ark_fp_fval);
+  }
+  if (ark_mem->ark_fp_fold != NULL) {
+    printf("ark_fp_fold:\n");
+    N_VPrint_Serial(ark_mem->ark_fp_fold);
+  }
+  if (ark_mem->ark_fp_gold != NULL) {
+    printf("ark_fp_gold:\n");
+    N_VPrint_Serial(ark_mem->ark_fp_gold);
+  }
+#endif
+
+}
+
+
+/*---------------------------------------------------------------
+ arkCheckNvector:
+
+ This routine checks if all required vector operations are 
+ present.  If any of them is missing it returns FALSE.
+---------------------------------------------------------------*/
+static booleantype arkCheckNvector(N_Vector tmpl)  /* to be updated?? */
+{
+  if ((tmpl->ops->nvclone     == NULL) ||
+      (tmpl->ops->nvdestroy   == NULL) ||
+      (tmpl->ops->nvlinearsum == NULL) ||
+      (tmpl->ops->nvconst     == NULL) ||
+      (tmpl->ops->nvdiv       == NULL) ||
+      (tmpl->ops->nvscale     == NULL) ||
+      (tmpl->ops->nvabs       == NULL) ||
+      (tmpl->ops->nvinv       == NULL) ||
+      (tmpl->ops->nvaddconst  == NULL) ||
+      (tmpl->ops->nvmaxnorm   == NULL) ||
+      (tmpl->ops->nvwrmsnorm  == NULL) ||
+      (tmpl->ops->nvmin       == NULL))
+    return(FALSE);
+  else
+    return(TRUE);
+}
+
+
+/*---------------------------------------------------------------
+ arkAllocVectors:
+
+ This routine allocates the ARKODE vectors ewt, acor, ycur, 
+ sdata, tempv, ftemp, fold, fnew, yold, and ynew.  If any of 
+ these vectors already exist, they are left alone.  Otherwise, it
+ will allocate each vector by cloning the input vector. If all 
+ memory allocations are successful, arkAllocVectors returns TRUE. 
+ Otherwise all vector memory is freed and arkAllocVectors 
+ returns FALSE. This routine also updates the optional outputs 
+ lrw and liw, which are (respectively) the lengths of the real 
+ and integer work spaces.
+---------------------------------------------------------------*/
+static booleantype arkAllocVectors(ARKodeMem ark_mem, N_Vector tmpl)
+{
+  /* Allocate ewt if needed */
+  if (ark_mem->ark_ewt == NULL) {
+    ark_mem->ark_ewt = N_VClone(tmpl);
+    if (ark_mem->ark_ewt == NULL) {
+      arkFreeVectors(ark_mem);
+      return(FALSE);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Set rwt to point at ewt */
+  if (ark_mem->ark_rwt_is_ewt) 
+    ark_mem->ark_rwt = ark_mem->ark_ewt;
+
+  /* Allocate acor if needed */
+  if (ark_mem->ark_acor == NULL) {
+    ark_mem->ark_acor = N_VClone(tmpl);
+    if (ark_mem->ark_acor == NULL) {
+      arkFreeVectors(ark_mem);
+      return(FALSE);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate ycur if needed */
+  if (ark_mem->ark_ycur == NULL) {
+    ark_mem->ark_ycur = N_VClone(tmpl);
+    if (ark_mem->ark_ycur == NULL) {
+      arkFreeVectors(ark_mem);
+      return(FALSE);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate sdata if needed */
+  if (ark_mem->ark_sdata == NULL) {
+    ark_mem->ark_sdata = N_VClone(tmpl);
+    if (ark_mem->ark_sdata == NULL) {
+      arkFreeVectors(ark_mem);
+      return(FALSE);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate tempv if needed */
+  if (ark_mem->ark_tempv == NULL) {
+    ark_mem->ark_tempv = N_VClone(tmpl);
+    if (ark_mem->ark_tempv == NULL) {
+      arkFreeVectors(ark_mem);
+      return(FALSE);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate ftemp if needed */
+  if (ark_mem->ark_ftemp == NULL) {
+    ark_mem->ark_ftemp = N_VClone(tmpl);
+    if (ark_mem->ark_ftemp == NULL) {
+      arkFreeVectors(ark_mem);
+      return(FALSE);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate fold if needed */
+  if (ark_mem->ark_fold == NULL) {
+    ark_mem->ark_fold = N_VClone(tmpl);
+    if (ark_mem->ark_fold == NULL) {
+      arkFreeVectors(ark_mem);
+      return(FALSE);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate fnew if needed */
+  if (ark_mem->ark_fnew == NULL) {
+    ark_mem->ark_fnew = N_VClone(tmpl);
+    if (ark_mem->ark_fnew == NULL) {
+      arkFreeVectors(ark_mem);
+      return(FALSE);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate yold if needed */
+  if (ark_mem->ark_yold == NULL) {
+    ark_mem->ark_yold = N_VClone(tmpl);
+    if (ark_mem->ark_yold == NULL) {
+      arkFreeVectors(ark_mem);
+      return(FALSE);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate ynew if needed */
+  if (ark_mem->ark_ynew == NULL) {
+    ark_mem->ark_ynew = N_VClone(tmpl);
+    if (ark_mem->ark_ynew == NULL) {
+      arkFreeVectors(ark_mem);
+      return(FALSE);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  return(TRUE);
+}
+
+
+/*---------------------------------------------------------------
+ arkAllocRKVectors
+
+ This routine allocates the ARKODE vectors 
+ Fe[0], ..., Fe[stages-1], Fi[0], ..., Fi[stages-1], and fa and 
+ fb (if necessary).
+
+ If any of these vectors already exist, they are left alone.  
+ Otherwise, it will allocate each vector by cloning the input 
+ vector. If all memory allocations are successful, 
+ arkAllocRKVectors returns TRUE.  Otherwise all vector memory is 
+ freed and arkAllocRKVectors returns FALSE. This routine also 
+ updates the optional outputs lrw and liw, which are 
+ (respectively) the lengths of the real and integer work spaces.
+
+ NOTE: this routine is separate from arkAllocVectors, since that
+ routine is called in ARKodeInit, which may be called by a user
+ prior to setting their desired method order, 
+ implicit/explicit/imex problem, and number of RK stages.  Hence
+ this routine is called during arkInitialStep, which is called 
+ on the first call to the ARKode() integrator.
+---------------------------------------------------------------*/
+static int arkAllocRKVectors(ARKodeMem ark_mem)
+{
+  int j;
+
+  /* Allocate Fe[0] ... Fe[stages-1] if needed */
+  if (!ark_mem->ark_implicit) {
+    for (j=0; j<ark_mem->ark_stages; j++) {
+      if (ark_mem->ark_Fe[j] == NULL) {
+	ark_mem->ark_Fe[j] = N_VClone(ark_mem->ark_ewt);
+	if (ark_mem->ark_Fe[j] == NULL) {
+	  arkFreeVectors(ark_mem);
+	  return(ARK_MEM_FAIL);
+	} else {
+	  ark_mem->ark_lrw += ark_mem->ark_lrw1;
+	  ark_mem->ark_liw += ark_mem->ark_liw1;
+	}
+      }
+    }
+  }
+
+  /* Allocate Fi[0] ... Fi[stages-1] if needed */
+  if (!ark_mem->ark_explicit) {
+    for (j=0; j<ark_mem->ark_stages; j++) {
+      if (ark_mem->ark_Fi[j] == NULL) {
+	ark_mem->ark_Fi[j] = N_VClone(ark_mem->ark_ewt);
+	if (ark_mem->ark_Fi[j] == NULL) {
+	  arkFreeVectors(ark_mem);
+	  return(ARK_MEM_FAIL);
+	} else {
+	  ark_mem->ark_lrw += ark_mem->ark_lrw1;
+	  ark_mem->ark_liw += ark_mem->ark_liw1;
+	}
+      }
+    }
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkFreeVectors
+
+ This routine frees the ARKODE vectors allocated in both
+ arkAllocVectors and arkAllocRKVectors.
+---------------------------------------------------------------*/
+static void arkFreeVectors(ARKodeMem ark_mem)
+{
+  int j;
+  if (ark_mem->ark_ewt != NULL) {
+    N_VDestroy(ark_mem->ark_ewt);
+    ark_mem->ark_ewt = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  if ((!ark_mem->ark_rwt_is_ewt) && (ark_mem->ark_rwt != NULL)) {
+    N_VDestroy(ark_mem->ark_rwt);
+    ark_mem->ark_rwt = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  if (ark_mem->ark_acor != NULL) {
+    N_VDestroy(ark_mem->ark_acor);
+    ark_mem->ark_acor = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  if (ark_mem->ark_ycur != NULL) {
+    N_VDestroy(ark_mem->ark_ycur);
+    ark_mem->ark_ycur = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  if (ark_mem->ark_sdata != NULL) {
+    N_VDestroy(ark_mem->ark_sdata);
+    ark_mem->ark_sdata = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  if (ark_mem->ark_tempv != NULL) {
+    N_VDestroy(ark_mem->ark_tempv);
+    ark_mem->ark_tempv = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  if (ark_mem->ark_ftemp != NULL) {
+    N_VDestroy(ark_mem->ark_ftemp);
+    ark_mem->ark_ftemp = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  if (ark_mem->ark_fold != NULL) {
+    N_VDestroy(ark_mem->ark_fold);
+    ark_mem->ark_fold = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  if (ark_mem->ark_fnew != NULL) {
+    N_VDestroy(ark_mem->ark_fnew);
+    ark_mem->ark_fnew = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  if (ark_mem->ark_yold != NULL) {
+    N_VDestroy(ark_mem->ark_yold);
+    ark_mem->ark_yold = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  if (ark_mem->ark_ynew != NULL) {
+    N_VDestroy(ark_mem->ark_ynew);
+    ark_mem->ark_ynew = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+  /* if (ark_mem->ark_fa != NULL) { */
+  /*   N_VDestroy(ark_mem->ark_fa); */
+  /*   ark_mem->ark_fa = NULL; */
+  /*   ark_mem->ark_lrw -= ark_mem->ark_lrw1; */
+  /*   ark_mem->ark_liw -= ark_mem->ark_liw1; */
+  /* } */
+  /* if (ark_mem->ark_fb != NULL) { */
+  /*   N_VDestroy(ark_mem->ark_fb); */
+  /*   ark_mem->ark_fb = NULL; */
+  /*   ark_mem->ark_lrw -= ark_mem->ark_lrw1; */
+  /*   ark_mem->ark_liw -= ark_mem->ark_liw1; */
+  /* } */
+  for(j=0; j<ARK_S_MAX; j++) {
+    if (ark_mem->ark_Fe[j] != NULL) {
+      N_VDestroy(ark_mem->ark_Fe[j]);
+      ark_mem->ark_Fe[j] = NULL;
+      ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+      ark_mem->ark_liw -= ark_mem->ark_liw1;
+    }
+    if (ark_mem->ark_Fi[j] != NULL) {
+      N_VDestroy(ark_mem->ark_Fi[j]);
+      ark_mem->ark_Fi[j] = NULL;
+      ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+      ark_mem->ark_liw -= ark_mem->ark_liw1;
+    }
+  }
+  if (ark_mem->ark_Vabstol != NULL) {
+    N_VDestroy(ark_mem->ark_Vabstol);
+    ark_mem->ark_Vabstol = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+}
+
+
+/*---------------------------------------------------------------
+ arkAllocFPData
+
+ This routine allocates all required memory for performing the 
+ accelerated fixed-point solver.
+---------------------------------------------------------------*/
+static int arkAllocFPData(ARKodeMem ark_mem)
+{
+  long int maa = ark_mem->ark_fp_m;
+
+  /* ensure that DotProd function is defined */
+  if (ark_mem->ark_ewt->ops->nvdotprod == NULL) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "arkAllocFPData", MSGARK_BAD_NVECTOR);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Allocate ark_fp_fval if needed */
+  if (ark_mem->ark_fp_fval == NULL) {
+    ark_mem->ark_fp_fval = N_VClone(ark_mem->ark_ewt);
+    if (ark_mem->ark_fp_fval == NULL) {
+      arkFreeFPData(ark_mem);
+      return(ARK_MEM_FAIL);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate ark_fp_fold if needed */
+  if (ark_mem->ark_fp_fold == NULL) {
+    ark_mem->ark_fp_fold = N_VClone(ark_mem->ark_ewt);
+    if (ark_mem->ark_fp_fold == NULL) {
+      arkFreeFPData(ark_mem);
+      return(ARK_MEM_FAIL);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate ark_fp_gold if needed */
+  if (ark_mem->ark_fp_gold == NULL) {
+    ark_mem->ark_fp_gold = N_VClone(ark_mem->ark_ewt);
+    if (ark_mem->ark_fp_gold == NULL) {
+      arkFreeFPData(ark_mem);
+      return(ARK_MEM_FAIL);
+    } else {
+      ark_mem->ark_lrw += ark_mem->ark_lrw1;
+      ark_mem->ark_liw += ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate ark_fp_df if needed */
+  if ((ark_mem->ark_fp_df == NULL) && (maa > 0)) {
+    ark_mem->ark_fp_df = N_VCloneVectorArray(maa, ark_mem->ark_ewt);
+    if (ark_mem->ark_fp_df == NULL) {
+      arkFreeFPData(ark_mem);
+      return(ARK_MEM_FAIL);
+    } else {
+      ark_mem->ark_lrw += maa*ark_mem->ark_lrw1;
+      ark_mem->ark_liw += maa*ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate ark_fp_dg if needed */
+  if ((ark_mem->ark_fp_dg == NULL) && (maa > 0)) {
+    ark_mem->ark_fp_dg = N_VCloneVectorArray(maa, ark_mem->ark_ewt);
+    if (ark_mem->ark_fp_dg == NULL) {
+      arkFreeFPData(ark_mem);
+      return(ARK_MEM_FAIL);
+    } else {
+      ark_mem->ark_lrw += maa*ark_mem->ark_lrw1;
+      ark_mem->ark_liw += maa*ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate ark_fp_q if needed */
+  if ((ark_mem->ark_fp_q == NULL) && (maa > 0)) {
+    ark_mem->ark_fp_q = N_VCloneVectorArray(maa, ark_mem->ark_ewt);
+    if (ark_mem->ark_fp_q == NULL) {
+      arkFreeFPData(ark_mem);
+      return(ARK_MEM_FAIL);
+    } else {
+      ark_mem->ark_lrw += maa*ark_mem->ark_lrw1;
+      ark_mem->ark_liw += maa*ark_mem->ark_liw1;
+    }
+  }
+
+  /* Allocate ark_fp_R if needed */
+  if ((ark_mem->ark_fp_R == NULL) && (maa > 0)) {
+    ark_mem->ark_fp_R = (realtype *) malloc((maa*maa) * sizeof(realtype));
+    if (ark_mem->ark_fp_R == NULL) {
+      arkFreeFPData(ark_mem);
+      return(ARK_MEM_FAIL);
+    } else {
+      ark_mem->ark_lrw += maa*maa;
+    }
+  }
+
+  /* Allocate ark_fp_gamma if needed */
+  if ((ark_mem->ark_fp_gamma == NULL) && (maa > 0)) {
+    ark_mem->ark_fp_gamma = (realtype *) malloc(maa * sizeof(realtype));
+    if (ark_mem->ark_fp_gamma == NULL) {
+      arkFreeFPData(ark_mem);
+      return(ARK_MEM_FAIL);
+    } else {
+      ark_mem->ark_lrw += maa;
+    }
+  }
+
+  /* Allocate ark_fp_imap if needed */
+  if ((ark_mem->ark_fp_imap == NULL) && (maa > 0)) {
+    ark_mem->ark_fp_imap = (long int *) malloc(maa * sizeof(long int));
+    if (ark_mem->ark_fp_imap == NULL) {
+      arkFreeFPData(ark_mem);
+      return(ARK_MEM_FAIL);
+    } else {
+      ark_mem->ark_liw += maa;
+    }
+  }
+
+  return(ARK_SUCCESS);
+}
+
+/*---------------------------------------------------------------
+ arkResizeFPData
+
+ This routine resizes all required memory for the accelerated
+ fixed-point solver (called from ARKodeResize()).
+---------------------------------------------------------------*/
+static int arkResizeFPData(ARKodeMem ark_mem, ARKVecResizeFn resize,
+			   void *resize_data, long int lrw_diff, 
+			   long int liw_diff)
+{
+  long int i;
+  long int maa = ark_mem->ark_fp_m;
+
+  /* Resize ark_fp_fval if needed */
+  if (ark_mem->ark_fp_fval != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_fp_fval);
+      ark_mem->ark_fp_fval = N_VClone(ark_mem->ark_ewt);
+    } else {
+      if (resize(ark_mem->ark_fp_fval, ark_mem->ark_ewt, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"arkResizeFPData", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+
+  /* Resize ark_fp_fold if needed */
+  if (ark_mem->ark_fp_fold != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_fp_fold);
+      ark_mem->ark_fp_fold = N_VClone(ark_mem->ark_ewt);
+    } else {
+      if (resize(ark_mem->ark_fp_fold, ark_mem->ark_ewt, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"arkResizeFPData", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+
+  /* Resize ark_fp_gold if needed */
+  if (ark_mem->ark_fp_gold != NULL) {
+    if (resize == NULL) {
+      N_VDestroy(ark_mem->ark_fp_gold);
+      ark_mem->ark_fp_gold = N_VClone(ark_mem->ark_ewt);
+    } else {
+      if (resize(ark_mem->ark_fp_gold, ark_mem->ark_ewt, resize_data)) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"arkResizeFPData", MSGARK_RESIZE_FAIL);
+	return(ARK_ILL_INPUT);
+      }
+    }
+    ark_mem->ark_lrw += lrw_diff;
+    ark_mem->ark_liw += liw_diff;
+  }
+
+  /* Resize ark_fp_df if needed */
+  if ((ark_mem->ark_fp_df != NULL) && (maa > 0)) {
+    for (i=0; i<maa; i++) {
+      if (resize == NULL) {
+	N_VDestroy(ark_mem->ark_fp_df[i]);
+	ark_mem->ark_fp_df[i] = N_VClone(ark_mem->ark_ewt);
+      } else {
+	if (resize(ark_mem->ark_fp_df[i], ark_mem->ark_ewt, resize_data)) {
+	  arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			  "arkResizeFPData", MSGARK_RESIZE_FAIL);
+	  return(ARK_ILL_INPUT);
+	}
+      }
+    }
+    ark_mem->ark_lrw += maa*lrw_diff;
+    ark_mem->ark_liw += maa*liw_diff;
+  }
+
+  /* Resize ark_fp_dg if needed */
+  if ((ark_mem->ark_fp_dg != NULL) && (maa > 0)) {
+    for (i=0; i<maa; i++) {
+      if (resize == NULL) {
+	N_VDestroy(ark_mem->ark_fp_dg[i]);
+	ark_mem->ark_fp_dg[i] = N_VClone(ark_mem->ark_ewt);
+      } else {
+	if (resize(ark_mem->ark_fp_dg[i], ark_mem->ark_ewt, resize_data)) {
+	  arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			  "arkResizeFPData", MSGARK_RESIZE_FAIL);
+	  return(ARK_ILL_INPUT);
+	}
+      }
+    }
+    ark_mem->ark_lrw += maa*lrw_diff;
+    ark_mem->ark_liw += maa*liw_diff;
+  }
+
+  /* Resize ark_fp_q if needed */
+  if ((ark_mem->ark_fp_q != NULL) && (maa > 0)) {
+    for (i=0; i<maa; i++) {
+      if (resize == NULL) {
+	N_VDestroy(ark_mem->ark_fp_q[i]);
+	ark_mem->ark_fp_q[i] = N_VClone(ark_mem->ark_ewt);
+      } else {
+	if (resize(ark_mem->ark_fp_q[i], ark_mem->ark_ewt, resize_data)) {
+	  arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			  "arkResizeFPData", MSGARK_RESIZE_FAIL);
+	  return(ARK_ILL_INPUT);
+	}
+      }
+    }
+    ark_mem->ark_lrw += maa*lrw_diff;
+    ark_mem->ark_liw += maa*liw_diff;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkFreeFPData
+
+ This routine frees all memory allocated by arkAllocFPData.
+---------------------------------------------------------------*/
+static void arkFreeFPData(ARKodeMem ark_mem)
+{
+  long int maa = ark_mem->ark_fp_m;
+
+  /* free ark_fp_fval if needed */
+  if (ark_mem->ark_fp_fval != NULL) {
+    N_VDestroy(ark_mem->ark_fp_fval);
+    ark_mem->ark_fp_fval = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+
+  /* free ark_fp_fold if needed */
+  if (ark_mem->ark_fp_fold != NULL) {
+    N_VDestroy(ark_mem->ark_fp_fold);
+    ark_mem->ark_fp_fold = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+
+  /* free ark_fp_gold if needed */
+  if (ark_mem->ark_fp_gold != NULL) {
+    N_VDestroy(ark_mem->ark_fp_gold);
+    ark_mem->ark_fp_gold = NULL;
+    ark_mem->ark_lrw -= ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= ark_mem->ark_liw1;
+  }
+
+  /* free ark_fp_df if needed */
+  if ((ark_mem->ark_fp_df != NULL) && (maa>0)) {
+    N_VDestroyVectorArray(ark_mem->ark_fp_df, maa);
+    ark_mem->ark_fp_df = NULL;
+    ark_mem->ark_lrw -= maa*ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= maa*ark_mem->ark_liw1;
+  }
+
+  /* free ark_fp_dg if needed */
+  if ((ark_mem->ark_fp_dg != NULL) && (maa>0)) {
+    N_VDestroyVectorArray(ark_mem->ark_fp_dg, maa);
+    ark_mem->ark_fp_dg = NULL;
+    ark_mem->ark_lrw -= maa*ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= maa*ark_mem->ark_liw1;
+  }
+
+  /* free ark_fp_q if needed */
+  if ((ark_mem->ark_fp_q != NULL) && (maa>0)) {
+    N_VDestroyVectorArray(ark_mem->ark_fp_q, maa);
+    ark_mem->ark_fp_q = NULL;
+    ark_mem->ark_lrw -= maa*ark_mem->ark_lrw1;
+    ark_mem->ark_liw -= maa*ark_mem->ark_liw1;
+  }
+
+  /* free ark_fp_R if needed */
+  if (ark_mem->ark_fp_R != NULL) {
+    free(ark_mem->ark_fp_R);
+    ark_mem->ark_fp_R = NULL;
+    ark_mem->ark_lrw -= maa*maa;
+  }
+
+  /* free ark_fp_gamma if needed */
+  if (ark_mem->ark_fp_gamma != NULL) {
+    free(ark_mem->ark_fp_gamma);
+    ark_mem->ark_fp_gamma = NULL;
+    ark_mem->ark_lrw -= maa;
+  }
+
+  /* free ark_fp_imap if needed */
+  if (ark_mem->ark_fp_imap != NULL) {
+    free(ark_mem->ark_fp_imap);
+    ark_mem->ark_fp_imap = NULL;
+    ark_mem->ark_liw -= maa;
+  }
+}
+
+
+/*---------------------------------------------------------------
+ arkInitialSetup
+
+ This routine performs input consistency checks at the first step.
+ If needed, it also checks the linear solver module and calls the
+ linear solver initialization routine.
+---------------------------------------------------------------*/
+static int arkInitialSetup(ARKodeMem ark_mem)
+{
+  int ier;
+
+  /* Set first step growth factor */
+  ark_mem->ark_etamax = ark_mem->ark_etamx1;
+
+  /* Create Butcher tables (if not already set) */
+  ier = arkSetButcherTables(ark_mem);
+  if (ier != ARK_SUCCESS) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "arkInitialStep", "Could not create Butcher table");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Check that Butcher tables are OK */
+  ier = arkCheckButcherTables(ark_mem);
+  if (ier != ARK_SUCCESS) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "arkInitialStep", "Error in Butcher tables");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Check that user has supplied an initial step size if fixedstep mode is on */ 
+  if ( (ark_mem->ark_fixedstep) && (ark_mem->ark_hin == ZERO) ) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "arkInitialStep", "Fixed step mode enabled, but no step size set");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Allocate ARK RHS vector memory */
+  ier = arkAllocRKVectors(ark_mem);
+  if (ier != ARK_SUCCESS) {
+    arkProcessError(ark_mem, ARK_MEM_FAIL, "ARKODE", 
+		    "arkInitialSetup", MSGARK_MEM_FAIL);
+    return(ARK_MEM_FAIL);
+  }
+
+  /* Check for consistency between linear system modules 
+     (if lsolve is direct, msolve needs to match) */
+  if (ark_mem->ark_mass_matrix) {  /* M != I */
+    if (ark_mem->ark_lsolve_type != 0) { /* non-iterative */
+      if (ark_mem->ark_lsolve_type != ark_mem->ark_msolve_type) {
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"arkInitialSetup", 
+			"Incompatible linear and mass matrix solvers");
+	return(ARK_MEM_FAIL);
+      }
+    }
+  }
+
+  /* Set data for efun (if left unspecified) */
+  if (ark_mem->ark_user_efun) 
+    ark_mem->ark_e_data = ark_mem->ark_user_data;
+  else                        
+    ark_mem->ark_e_data = ark_mem;
+
+  /* Load initial error weights */
+  ier = ark_mem->ark_efun(ark_mem->ark_ycur,
+			  ark_mem->ark_ewt, 
+			  ark_mem->ark_e_data);
+  if (ier != 0) {
+    if (ark_mem->ark_itol == ARK_WF) 
+      arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		      "arkInitialSetup", MSGARK_EWT_FAIL);
+    else 
+      arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		      "arkInitialSetup", MSGARK_BAD_EWT);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* Set data for rfun (if left unspecified) */
+  if (ark_mem->ark_user_rfun) 
+    ark_mem->ark_r_data = ark_mem->ark_user_data;
+  else                        
+    ark_mem->ark_r_data = ark_mem;
+
+  /* Load initial residual weights */
+  if (ark_mem->ark_rwt_is_ewt) {      /* update pointer to ewt */
+    ark_mem->ark_rwt = ark_mem->ark_ewt;
+  } else { 
+    ier = ark_mem->ark_rfun(ark_mem->ark_ycur,
+			    ark_mem->ark_rwt, 
+			    ark_mem->ark_r_data);
+    if (ier != 0) {
+      if (ark_mem->ark_itol == ARK_WF) 
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"arkInitialSetup", MSGARK_RWT_FAIL);
+      else 
+	arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+			"arkInitialSetup", MSGARK_BAD_RWT);
+      return(ARK_ILL_INPUT);
+    }
+  }
+
+  /* Check if lsolve function exists and call linit (if it exists) */
+  if (!ark_mem->ark_explicit && !ark_mem->ark_use_fp) {
+    if (ark_mem->ark_lsolve == NULL) {
+      arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		      "arkInitialSetup", MSGARK_LSOLVE_NULL);
+      return(ARK_ILL_INPUT);
+    }
+    if (ark_mem->ark_linit != NULL) {
+      ier = ark_mem->ark_linit(ark_mem);
+      if (ier != 0) {
+	arkProcessError(ark_mem, ARK_LINIT_FAIL, "ARKODE", 
+			"arkInitialSetup", MSGARK_LINIT_FAIL);
+	return(ARK_LINIT_FAIL);
+      }
+    }
+  }
+
+  /* Call minit (if it exists) */
+  if (ark_mem->ark_minit != NULL) {
+    ier = ark_mem->ark_minit(ark_mem);
+    if (ier != 0) {
+      arkProcessError(ark_mem, ARK_MASSINIT_FAIL, "ARKODE", 
+		      "arkInitialSetup", MSGARK_MASSINIT_FAIL);
+      return(ARK_MASSINIT_FAIL);
+    }
+  }
+  
+  /* Call msetup (if necessary) */
+  if (ark_mem->ark_mass_matrix && ark_mem->ark_MassSetupNonNull) {
+    ier = ark_mem->ark_msetup(ark_mem, ark_mem->ark_ewt, 
+			      ark_mem->ark_acor, ark_mem->ark_sdata);
+    if (ier != 0) {
+      arkProcessError(ark_mem, ARK_MASSSETUP_FAIL, "ARKODE", 
+		      "arkInitialSetup", MSGARK_MASSSETUP_FAIL);
+      return(ARK_MASSSETUP_FAIL);
+    }
+  }
+
+  /* Allocate fixed-point solver memory */
+  if (ark_mem->ark_use_fp) {
+    ier = arkAllocFPData(ark_mem);
+    if (ier != ARK_SUCCESS) {
+      arkProcessError(ark_mem, ARK_MEM_FAIL, "ARKODE", 
+		      "arkInitialSetup", MSGARK_MEM_FAIL);
+      return(ARK_MEM_FAIL);
+    }
+  }
+
+  /* Fill initial ynew and fnew arrays */
+  N_VScale(ONE, ark_mem->ark_ycur, ark_mem->ark_ynew);
+  ier = arkFullRHS(ark_mem, ark_mem->ark_tn, ark_mem->ark_ycur,
+		   ark_mem->ark_ftemp, ark_mem->ark_fnew);
+  if (ier != 0)  return(ARK_RHSFUNC_FAIL);
+
+  /* if the problem involves a non-identity mass matrix, update fnew here */
+  if (ark_mem->ark_mass_matrix) {
+    N_VScale(ark_mem->ark_h, ark_mem->ark_fnew, ark_mem->ark_fnew);   /* scale RHS */
+    ier = ark_mem->ark_msolve(ark_mem, ark_mem->ark_fnew, ark_mem->ark_rwt); 
+    N_VScale(ONE/ark_mem->ark_h, ark_mem->ark_fnew, ark_mem->ark_fnew);   /* scale result */
+    ark_mem->ark_mass_solves++;
+    if (ier != ARK_SUCCESS) {
+      ark_mem->ark_nmassfails++;
+      arkProcessError(ark_mem, ARK_MASSSOLVE_FAIL, "ARKODE", 
+		      "arkInitialSetup", "Mass matrix solver failure");
+      return(ARK_MASSSOLVE_FAIL);
+    }
+  }
+  
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkHin
+
+ This routine computes a tentative initial step size h0. 
+ If tout is too close to tn (= t0), then arkHin returns 
+ ARK_TOO_CLOSE and h remains uninitialized. Note that here tout 
+ is either the value passed to ARKode at the first call or the 
+ value of tstop (if tstop is enabled and it is closer to t0=tn 
+ than tout). If the RHS function fails unrecoverably, arkHin 
+ returns ARK_RHSFUNC_FAIL. If the RHS function fails recoverably 
+ too many times and recovery is not possible, arkHin returns 
+ ARK_REPTD_RHSFUNC_ERR. Otherwise, arkHin sets h to the chosen 
+ value h0 and returns ARK_SUCCESS.
+
+ The algorithm used seeks to find h0 as a solution of
+       (WRMS norm of (h0^2 ydd / 2)) = 1, 
+ where ydd = estimated second derivative of y.  Although this 
+ choice is based on an error expansion of the Backward Euler
+ method, and hence results in an overly-conservative time step 
+ for our higher-order ARK methods, it does find an order-of-
+ magnitude estimate of the initial time scale of the solution.
+ Since this method is only used on the first time step, the
+ additional caution will not overly hinder solver efficiency.
+
+ We start with an initial estimate equal to the geometric mean 
+ of the lower and upper bounds on the step size.
+
+ Loop up to H0_ITERS times to find h0.
+ Stop if new and previous values differ by a factor < 2.
+ Stop if hnew/hg > 2 after one iteration, as this probably 
+ means that the ydd value is bad because of cancellation error.        
+  
+ For each new proposed hg, we allow H0_ITERS attempts to
+ resolve a possible recoverable failure from f() by reducing
+ the proposed stepsize by a factor of 0.2. If a legal stepsize
+ still cannot be found, fall back on a previous value if 
+ possible, or else return ARK_REPTD_RHSFUNC_ERR.
+
+ Finally, we apply a bias (0.5) and verify that h0 is within 
+ bounds.
+---------------------------------------------------------------*/
+static int arkHin(ARKodeMem ark_mem, realtype tout)
+{
+  int retval, sign, count1, count2;
+  realtype tdiff, tdist, tround, hlb, hub;
+  realtype hg, hgs, hs, hnew, hrat, h0, yddnrm;
+  booleantype hgOK, hnewOK;
+
+  /* If tout is too close to tn, give up */
+  if ((tdiff = tout-ark_mem->ark_tn) == ZERO) return(ARK_TOO_CLOSE);
+  
+  sign = (tdiff > ZERO) ? 1 : -1;
+  tdist = SUNRabs(tdiff);
+  tround = ark_mem->ark_uround * SUNMAX(SUNRabs(ark_mem->ark_tn), SUNRabs(tout));
+
+  if (tdist < TWO*tround) return(ARK_TOO_CLOSE);
+  
+  /* Set lower and upper bounds on h0, and take geometric mean 
+     as first trial value.
+     Exit with this value if the bounds cross each other. */
+  hlb = H0_LBFACTOR * tround;
+  hub = arkUpperBoundH0(ark_mem, tdist);
+
+  hg  = SUNRsqrt(hlb*hub);
+
+  if (hub < hlb) {
+    if (sign == -1) ark_mem->ark_h = -hg;
+    else            ark_mem->ark_h =  hg;
+    return(ARK_SUCCESS);
+  }
+  
+  /* Outer loop */
+  hnewOK = FALSE;
+  hs = hg;     /* safeguard against 'uninitialized variable' warning */
+  for(count1 = 1; count1 <= H0_ITERS; count1++) {
+
+    /* Attempts to estimate ydd */
+    hgOK = FALSE;
+
+    for (count2 = 1; count2 <= H0_ITERS; count2++) {
+      hgs = hg*sign;
+      retval = arkYddNorm(ark_mem, hgs, &yddnrm);
+      /* If f() failed unrecoverably, give up */
+      if (retval < 0) return(ARK_RHSFUNC_FAIL);
+      /* If successful, we can use ydd */
+      if (retval == ARK_SUCCESS) {hgOK = TRUE; break;}
+      /* f() failed recoverably; cut step size and test it again */
+      hg *= POINT2;
+    }
+
+    /* If f() failed recoverably H0_ITERS times */
+    if (!hgOK) {
+      /* Exit if this is the first or second pass. No recovery possible */
+      if (count1 <= 2) return(ARK_REPTD_RHSFUNC_ERR);
+      /* We have a fall-back option. The value hs is a previous hnew which
+         passed through f(). Use it and break */
+      hnew = hs;
+      break;
+    }
+
+    /* The proposed step size is feasible. Save it. */
+    hs = hg;
+
+    /* If stopping criteria was met, or if this is the last pass, stop */
+    if ( (hnewOK) || (count1 == H0_ITERS))  {hnew = hg; break;}
+
+    /* Propose new step size */
+    hnew = (yddnrm*hub*hub > TWO) ? SUNRsqrt(TWO/yddnrm) : SUNRsqrt(hg*hub);
+    hrat = hnew/hg;
+    
+    /* Accept hnew if it does not differ from hg by more than a factor of 2 */
+    if ((hrat > HALF) && (hrat < TWO))  hnewOK = TRUE;
+
+    /* After one pass, if ydd seems to be bad, use fall-back value. */
+    if ((count1 > 1) && (hrat > TWO)) {
+      hnew = hg;
+      hnewOK = TRUE;
+    }
+
+    /* Send this value back through f() */
+    hg = hnew;
+  }
+
+  /* Apply bounds, bias factor, and attach sign */
+  h0 = H0_BIAS*hnew;
+  if (h0 < hlb) h0 = hlb;
+  if (h0 > hub) h0 = hub;
+  if (sign == -1) h0 = -h0;
+  ark_mem->ark_h = h0;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkUpperBoundH0
+
+ This routine sets an upper bound on abs(h0) based on
+ tdist = tn - t0 and the values of y[i]/y'[i].
+---------------------------------------------------------------*/
+static realtype arkUpperBoundH0(ARKodeMem ark_mem, realtype tdist)
+{
+  realtype hub_inv, hub;
+  N_Vector temp1, temp2;
+
+  /* Bound based on |y0|/|y0'| -- allow at most an increase of
+   * H0_UBFACTOR in y0 (based on a forward Euler step). The weight 
+   * factor is used as a safeguard against zero components in y0. */
+  temp1 = ark_mem->ark_tempv;
+  temp2 = ark_mem->ark_acor;
+
+  N_VAbs(ark_mem->ark_ynew, temp2);
+  ark_mem->ark_efun(ark_mem->ark_ynew, temp1, ark_mem->ark_e_data);
+  N_VInv(temp1, temp1);
+  N_VLinearSum(H0_UBFACTOR, temp2, ONE, temp1, temp1);
+
+  N_VAbs(ark_mem->ark_fnew, temp2);
+
+  N_VDiv(temp2, temp1, temp1);
+  hub_inv = N_VMaxNorm(temp1);
+
+  /* bound based on tdist -- allow at most a step of magnitude
+   * H0_UBFACTOR * tdist */
+  hub = H0_UBFACTOR*tdist;
+
+  /* Use the smaller of the two */
+  if (hub*hub_inv > ONE) hub = ONE/hub_inv;
+
+  return(hub);
+}
+
+
+/*---------------------------------------------------------------
+ arkYddNorm
+
+ This routine computes an estimate of the second derivative of y
+ using a difference quotient, and returns its WRMS norm.
+---------------------------------------------------------------*/
+static int arkYddNorm(ARKodeMem ark_mem, realtype hg, realtype *yddnrm)
+{
+  int retval;
+
+  /* increment y with a multiple of f */
+  N_VLinearSum(hg, ark_mem->ark_fnew, ONE, 
+	       ark_mem->ark_ynew, ark_mem->ark_y);
+
+  /* compute y', via the ODE RHS routine */
+  retval = arkFullRHS(ark_mem, ark_mem->ark_tn+hg, ark_mem->ark_y, 
+		      ark_mem->ark_ftemp, ark_mem->ark_tempv);
+  if (retval != 0) return(ARK_RHSFUNC_FAIL);
+
+  /* if using a non-identity mass matrix, update fnew here to get y' */
+  if (ark_mem->ark_mass_matrix) {
+    N_VScale(ark_mem->ark_h, ark_mem->ark_tempv, ark_mem->ark_tempv);
+    retval = ark_mem->ark_msolve(ark_mem, ark_mem->ark_tempv, ark_mem->ark_rwt); 
+    /* retval = ark_mem->ark_msolve(ark_mem, ark_mem->ark_tempv, ark_mem->ark_ewt);  */
+    N_VScale(ONE/ark_mem->ark_h, ark_mem->ark_tempv, ark_mem->ark_tempv);
+    ark_mem->ark_mass_solves++;
+    if (retval != ARK_SUCCESS) {
+      ark_mem->ark_nmassfails++;
+      arkProcessError(ark_mem, ARK_MASSSOLVE_FAIL, "ARKODE", 
+		      "arkYddNorm", "Mass matrix solver failure");
+      return(ARK_MASSSOLVE_FAIL);
+    }
+  }
+
+  /* difference new f and original f to estimate y'' */
+  N_VLinearSum(ONE, ark_mem->ark_tempv, -ONE, 
+	       ark_mem->ark_fnew, ark_mem->ark_tempv);
+  N_VScale(ONE/hg, ark_mem->ark_tempv, ark_mem->ark_tempv);
+
+  /* compute norm of y'' */
+  *yddnrm = N_VWrmsNorm(ark_mem->ark_tempv, ark_mem->ark_ewt);
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkSetButcherTables
+
+ This routine determines the ERK/DIRK/ARK method to use, based 
+ on the desired accuracy and information on whether the problem
+ is explicit, implicit or imex.
+---------------------------------------------------------------*/
+static int arkSetButcherTables(ARKodeMem ark_mem)
+{
+
+  /* if tables have already been specified, just return */
+  int i,j,q, etable=-1, itable=-1;
+  booleantype A_set = FALSE;
+  for (i=0; i<ARK_S_MAX; i++) {
+    for (j=0; j<ARK_S_MAX; j++) {
+      if (SUNRabs(ARK_A(ark_mem->ark_Ae,i,j)) > TINY)  A_set = TRUE;
+      if (SUNRabs(ARK_A(ark_mem->ark_Ai,i,j)) > TINY)  A_set = TRUE;
+    }
+    if (SUNRabs(ark_mem->ark_be[i]) > TINY)  A_set = TRUE;
+    if (SUNRabs(ark_mem->ark_bi[i]) > TINY)  A_set = TRUE;
+    if (SUNRabs(ark_mem->ark_ce[i]) > TINY)  A_set = TRUE;
+    if (SUNRabs(ark_mem->ark_ci[i]) > TINY)  A_set = TRUE;
+  }
+  if (A_set)  return (ARK_SUCCESS);
+
+  /**** explicit methods ****/
+  if (ark_mem->ark_explicit) {
+
+    switch (ark_mem->ark_q) {
+    case(2):
+      etable = DEFAULT_ERK_2;
+      break;
+    case(3):
+      etable = DEFAULT_ERK_3;
+      break;
+    case(4):
+      etable = DEFAULT_ERK_4;
+      break;
+    case(5):
+      etable = DEFAULT_ERK_5;
+      break;
+    case(6):
+      etable = DEFAULT_ERK_6;
+      break;
+    case(7):
+    case(8):
+      etable = DEFAULT_ERK_8;
+      break;
+    default:    /* no available method, set default */
+      arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		      "arkSetButcherTables", 
+		      "No explicit method at requested order, using q=6.");
+      etable = DEFAULT_ERK_6;
+      break;
+    }
+
+  /**** implicit methods ****/
+  } else if (ark_mem->ark_implicit) {
+
+    switch (ark_mem->ark_q) {
+    case(2):
+      itable = DEFAULT_DIRK_2;
+      break;
+    case(3):
+      itable = DEFAULT_DIRK_3;
+      break;
+    case(4):
+      itable = DEFAULT_DIRK_4;
+      break;
+    case(5):
+      itable = DEFAULT_DIRK_5;;
+      break;
+    default:    /* no available method, set default */
+      arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		      "arkSetButcherTables", 
+		      "No implicit method at requested order, using q=5.");
+      itable = DEFAULT_DIRK_5;
+      break;
+    }
+
+  /**** ImEx methods ****/
+  } else {
+
+    switch (ark_mem->ark_q) {
+
+    case(2):
+    case(3):
+      etable = DEFAULT_ARK_ETABLE_3;
+      itable = DEFAULT_ARK_ITABLE_3;
+      break;
+    case(4):
+      etable = DEFAULT_ARK_ETABLE_4;
+      itable = DEFAULT_ARK_ITABLE_4;
+      break;
+    case(5):
+      etable = DEFAULT_ARK_ETABLE_5;
+      itable = DEFAULT_ARK_ITABLE_5;
+      break;
+    default:    /* no available method, set default */
+      arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		      "arkSetButcherTables", 
+		      "No ImEx method at requested order, using q=5.");
+      etable = DEFAULT_ARK_ETABLE_5;
+      itable = DEFAULT_ARK_ITABLE_5;
+      break;
+    }
+  }
+
+  if (etable > -1)
+    ARKodeLoadButcherTable(etable, 
+			   &ark_mem->ark_stages, 
+			   &q, 
+			   &ark_mem->ark_p, 
+			   ark_mem->ark_Ae, 
+			   ark_mem->ark_be, 
+			   ark_mem->ark_ce, 
+			   ark_mem->ark_b2e);
+  if (itable > -1)
+    ARKodeLoadButcherTable(itable, 
+			   &ark_mem->ark_stages, 
+			   &q, 
+			   &ark_mem->ark_p, 
+			   ark_mem->ark_Ai, 
+			   ark_mem->ark_bi, 
+			   ark_mem->ark_ci, 
+			   ark_mem->ark_b2i);
+
+  /* if requested method order does not match actual, update here */
+  ark_mem->ark_q = q;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkCheckButcherTables
+
+ This routine runs through the explicit and/or implicit Butcher 
+ tables to ensure that they meet all necessary requirements, 
+ including:
+     strictly lower-triangular (ERK)
+     lower-triangular with some nonzeros on diagonal (IRK)
+     method order q > 0 (all)
+     embedding order q > 0 (all -- if adaptive time-stepping enabled)
+     stages > 0 (all)
+
+Returns ARK_SUCCESS if tables pass, ARK_ILL_INPUT otherwise.
+---------------------------------------------------------------*/
+static int arkCheckButcherTables(ARKodeMem ark_mem)
+{
+  int i, j;
+  booleantype okay;
+  realtype tol = RCONST(1.0e-12);
+
+  /* check that ERK table is strictly lower triangular */
+  if (!ark_mem->ark_implicit) {
+    okay = TRUE;
+    for (i=0; i<ark_mem->ark_stages; i++)
+      for (j=i; j<ark_mem->ark_stages; j++)
+	if (SUNRabs(ARK_A(ark_mem->ark_Ae,i,j)) > tol)
+	  okay = FALSE;
+    if (!okay) {
+      arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		      "arkCheckButcherTables",
+		      "Ae Butcher table is implicit!");
+      return(ARK_ILL_INPUT);
+    }
+  }
+
+  /* check that IRK table is implicit */
+  if (!ark_mem->ark_explicit) {
+    okay = FALSE;
+    for (i=0; i<ark_mem->ark_stages; i++)
+      if (SUNRabs(ARK_A(ark_mem->ark_Ai,i,i)) > tol)
+	okay = TRUE;
+    if (!okay) {
+      arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		      "arkCheckButcherTables",
+		      "Ai Butcher table is explicit!");
+      return(ARK_ILL_INPUT);
+    }
+  }
+
+  /* check that IRK table is lower triangular */
+  if (!ark_mem->ark_explicit) {
+    okay = TRUE;
+    for (i=0; i<ark_mem->ark_stages; i++)
+      for (j=i+1; j<ark_mem->ark_stages; j++)
+	if (SUNRabs(ARK_A(ark_mem->ark_Ai,i,j)) > tol)
+	  okay = FALSE;
+    if (!okay) {
+      arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		      "arkCheckButcherTables",
+		      "Ai Butcher table has entries above diagonal!");
+      return(ARK_ILL_INPUT);
+    }
+  }
+
+  /* check that method order q > 0 */
+  if (ark_mem->ark_q < 1) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "arkCheckButcherTables",
+		    "method order < 1!");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* check that embedding order p > 0 */
+  if ((ark_mem->ark_p < 1) && (!ark_mem->ark_fixedstep)) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "arkCheckButcherTables",
+		    "embedding order < 1!");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* check that stages > 0 */
+  if (ark_mem->ark_stages < 1) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "arkCheckButcherTables",
+		    "stages < 1!");
+    return(ARK_ILL_INPUT);
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkStep
+
+ This routine performs one internal arkode step, from tn to tn + h.
+ It calls other routines to do all the work.
+
+ The main operations done here are as follows:
+ - preliminary adjustments if a new step size was chosen;
+ - loop over internal time step stages:
+   - predict stage solution (if implicit);
+   - set up RHS data using old solutions;
+   - solve the implicit system, or evaluate explicit update;
+ - testing the local error;
+ - reset stepsize for the next step.
+ On a failure in the linear/nonlinear solvers or error test, the
+ step may be reattempted, depending on the nature of the failure.
+---------------------------------------------------------------*/
+static int arkStep(ARKodeMem ark_mem)
+{
+  realtype saved_t, dsm, tn_explicit;
+  int retval, ncf, nef, is, nflag, kflag, eflag;
+  
+  saved_t = ark_mem->ark_tn;
+  ncf = nef = 0;
+  nflag = FIRST_CALL;
+  eflag = ARK_SUCCESS;
+  kflag = SOLVE_SUCCESS;
+
+  /* Looping point for attempts to take a step */
+  for(;;) {  
+
+    /* increment attempt counter */
+    ark_mem->ark_nst_attempts++;
+
+    /* Loop over internal stages to the step */
+    for (is=0; is<ark_mem->ark_stages; is++) {
+
+      /* store current stage index */
+      ark_mem->ark_istage = is;
+
+      /* Set current stage time(s) */
+      ark_mem->ark_tn = ark_mem->ark_tnew + ark_mem->ark_ci[is]*ark_mem->ark_h;
+      tn_explicit = ark_mem->ark_tnew + ark_mem->ark_ce[is]*ark_mem->ark_h;
+      /* if (ark_mem->ark_tstopset) { */
+      /* 	if ((ark_mem->ark_tn - ark_mem->ark_tstop)*ark_mem->ark_h > ZERO) */
+      /* 	  ark_mem->ark_tn = ark_mem->ark_tstop; */
+      /* 	if ((tn_explicit - ark_mem->ark_tstop)*ark_mem->ark_h > ZERO) */
+      /* 	  tn_explicit = ark_mem->ark_tstop; */
+      /* } */
+
+#ifdef DEBUG_OUTPUT
+ printf("step %li,  stage %i,  h = %19.16g,  t_n = %19.16g\n", 
+	 ark_mem->ark_nst, is, ark_mem->ark_h, ark_mem->ark_tn);
+#endif
+      
+      /* Call predictor for current stage solution (result placed in ycur) */
+      if (arkPredict(ark_mem, is) != ARK_SUCCESS)
+        return (ARK_MASSSOLVE_FAIL);
+
+#ifdef DEBUG_OUTPUT
+ printf("predictor:\n");
+ N_VPrint_Serial(ark_mem->ark_ycur);
+#endif
+      
+      /* Set up data for evaluation of ARK stage residual (data stored in ark_sdata) */
+      if (arkSet(ark_mem) != ARK_SUCCESS)  
+	return (ARK_MASSMULT_FAIL);
+
+#ifdef DEBUG_OUTPUT
+ printf("rhs data:\n");
+ N_VPrint_Serial(ark_mem->ark_sdata);
+#endif
+
+      /* Solver diagnostics reporting */
+      if (ark_mem->ark_report) 	
+	fprintf(ark_mem->ark_diagfp, "step  %li  %19.16g  %i  %19.16g\n",
+		ark_mem->ark_nst, ark_mem->ark_h, is, ark_mem->ark_tn);
+
+      /* solve implicit problem (if required) */
+      if (SUNRabs(ARK_A(ark_mem->ark_Ai,is,is)) > TINY) {
+
+	/* perform implicit solve */
+	nflag = arkNls(ark_mem, nflag);
+
+#ifdef DEBUG_OUTPUT
+ printf("nonlinear solution:\n");
+ N_VPrint_Serial(ark_mem->ark_y);
+#endif
+
+	/* check for convergence (on failure, h will have been modified) */
+	kflag = arkHandleNFlag(ark_mem, &nflag, saved_t, &ncf);
+
+	/* If fixed time-stepping is used, then anything other than a 
+	   successful solve must result in an error */
+	if (ark_mem->ark_fixedstep && (kflag != SOLVE_SUCCESS)) 
+	  return(kflag);
+
+	/* If h reduced and step needs to be retried, break loop */
+	if (kflag == PREDICT_AGAIN) break;
+
+	/* Return if nonlinear solve failed and recovery not possible. */
+	if (kflag != SOLVE_SUCCESS) return(kflag);
+
+      /* otherwise no nonlinear solve is needed */
+      } else {
+
+	/* if M!=I, solve with M to compute update (place back in sdata) */
+	if (ark_mem->ark_mass_matrix) {
+
+	  /* perform mass matrix solve */
+	  /* nflag = ark_mem->ark_msolve(ark_mem, ark_mem->ark_sdata,  */
+	  /* 			      ark_mem->ark_ewt);  */
+	  nflag = ark_mem->ark_msolve(ark_mem, ark_mem->ark_sdata, 
+				      ark_mem->ark_rwt); 
+	  ark_mem->ark_mass_solves++;
+	  
+	  /* check for convergence (on failure, h will have been modified) */
+	  kflag = arkHandleNFlag(ark_mem, &nflag, saved_t, &ncf);
+
+	  /* increment failure counter if necessary */
+	  if (kflag != SOLVE_SUCCESS)
+	    ark_mem->ark_nmassfails++;
+
+	  /* If fixed time-stepping is used, then anything other than a 
+	     successful solve must result in an error */
+	  if (ark_mem->ark_fixedstep && (kflag != SOLVE_SUCCESS)) 
+	    return(kflag);
+
+	  /* If h reduced and step needs to be retried, break loop */
+	  if (kflag == PREDICT_AGAIN) break;
+
+	  /* Return if solve failed and recovery not possible. */
+	  if (kflag != SOLVE_SUCCESS) return(kflag);
+
+      	/* if M==I, set y to be ycur + RHS data computed in arkSet */
+	} else {
+	  N_VLinearSum(ONE, ark_mem->ark_sdata, ONE, 
+		       ark_mem->ark_ycur, ark_mem->ark_y);
+	}
+
+#ifdef DEBUG_OUTPUT
+ printf("explicit solution:\n");
+ N_VPrint_Serial(ark_mem->ark_y);
+#endif
+
+      }
+
+      /* successful stage solve, fill in implicit and explicit RHS for this stage */
+      if (!ark_mem->ark_explicit) {
+	retval = ark_mem->ark_fi(ark_mem->ark_tn, ark_mem->ark_y,
+				 ark_mem->ark_Fi[is], ark_mem->ark_user_data);
+	ark_mem->ark_nfi++; 
+	if (retval < 0)  return(ARK_RHSFUNC_FAIL);
+	if (retval > 0)  return(ARK_UNREC_RHSFUNC_ERR);
+      }
+      if (!ark_mem->ark_implicit) {
+	retval = ark_mem->ark_fe(tn_explicit, ark_mem->ark_y, 
+				 ark_mem->ark_Fe[is], ark_mem->ark_user_data);
+	ark_mem->ark_nfe++;
+	if (retval < 0)  return(ARK_RHSFUNC_FAIL);
+	if (retval > 0)  return(ARK_UNREC_RHSFUNC_ERR);
+      }
+
+    } /* loop over stages */
+
+    /* if h has changed due to convergence failure and a new 
+       prediction is needed, continue to next attempt at step
+       (cannot occur if fixed time stepping is enabled) */
+    if (kflag == PREDICT_AGAIN)  continue;
+      
+    /* compute time-evolved solution (in ark_y), error estimate (in dsm) */
+    retval = arkComputeSolutions(ark_mem, &dsm);
+    if (retval < 0)  return(retval);    /* msetup failure */
+
+#ifdef DEBUG_OUTPUT
+ printf("error estimate = %19.16g\n", dsm);
+#endif
+
+    /* Solver diagnostics reporting */
+    if (ark_mem->ark_report) 
+      fprintf(ark_mem->ark_diagfp, "  etest  %li  %19.16g  %19.16g\n", 
+	      ark_mem->ark_nst, ark_mem->ark_h, dsm);
+
+    /* Perform time accuracy error test (if failure, updates h for next try) */
+    if (!ark_mem->ark_fixedstep) 
+      eflag = arkDoErrorTest(ark_mem, &nflag, saved_t, &nef, dsm);
+	
+#ifdef DEBUG_OUTPUT
+ printf("error test flag = %i\n", eflag);
+#endif
+
+    /* Restart step attempt (recompute all stages) if error test fails recoverably */
+    if (eflag == TRY_AGAIN)  continue;
+	
+    /* Return if error test failed and recovery not possible. */
+    if (eflag != ARK_SUCCESS)  return(eflag);
+	
+    /* Error test passed (eflag=ARK_SUCCESS), break from loop */
+    break;
+
+  } /* loop over step attempts */
+
+
+  /* Nonlinear system solves and error test were all successful, clean up */
+
+  /*    Update current time to step end */
+  ark_mem->ark_tn = saved_t + ark_mem->ark_h;
+  if (ark_mem->ark_tstopset)
+    if ((ark_mem->ark_tn - ark_mem->ark_tstop)*ark_mem->ark_h > ZERO)
+      ark_mem->ark_tn = ark_mem->ark_tstop;
+
+  /*    Update current solution data */
+  eflag = arkCompleteStep(ark_mem, dsm); 
+  if (eflag != ARK_SUCCESS)  return(eflag);
+
+  /*    Consider change of step size */
+  retval = arkPrepareNextStep(ark_mem); 
+  if (retval != ARK_SUCCESS)  return(retval);
+
+  /*    Reset growth factor for subsequent time step */
+  ark_mem->ark_etamax = ark_mem->ark_hadapt_growth;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkPredict
+
+ This routine computes the prediction for a specific internal 
+ stage solution, storing the result in ark_mem->ark_ycur.  The 
+ prediction is done using the dense output routine in 
+ extrapolation mode, hence stages "far" from the previous time 
+ interval are predicted using lower order polynomials than the
+ "nearby" stages.
+---------------------------------------------------------------*/
+static int arkPredict(ARKodeMem ark_mem, int istage)
+{
+  int i, retval, ord, jstage;
+  realtype tau;
+  realtype tau_tol = 0.5;
+  realtype tau_tol2 = 0.75;
+  realtype h, a0, a1, a2, hA;
+  N_Vector yguess = ark_mem->ark_ycur;
+
+  /* if the first step (or if resized), use initial condition as guess */
+  if (ark_mem->ark_nst == 0 || ark_mem->ark_resized) {
+    N_VScale(ONE, ark_mem->ark_ynew, yguess);
+    return(ARK_SUCCESS);
+  }
+
+  /* set evaluation time tau relative shift from previous successful time */
+  tau = ark_mem->ark_ci[istage]*ark_mem->ark_h/ark_mem->ark_hold;
+
+  /* use requested predictor formula */
+  switch (ark_mem->ark_predictor) {
+
+  case 1:
+
+    /***** Dense Output Predictor 1 -- all to max order *****/
+    retval = arkDenseEval(ark_mem, tau, 0, ark_mem->ark_dense_q, yguess);
+    if (retval == ARK_SUCCESS)  return(ARK_SUCCESS);
+    break;
+
+  case 2:
+
+    /***** Dense Output Predictor 2 -- decrease order w/ increasing stage *****/
+    /* ord = SUNMAX(ark_mem->ark_dense_q - istage, 1); */
+    if (tau <= tau_tol) {
+      ord = 3;
+    } else if (tau <= tau_tol2) {
+      ord = 2;
+    } else {
+      ord = 1;
+    }
+    retval = arkDenseEval(ark_mem, tau, 0, ord, yguess);
+    if (retval == ARK_SUCCESS)  return(ARK_SUCCESS);
+    break;
+
+  case 3:
+
+    /***** Cutoff predictor: max order dense output for stages "close" to previous 
+	   step, first-order dense output predictor for subsequent stages *****/
+    if (tau <= tau_tol) {
+      retval = arkDenseEval(ark_mem, tau, 0, ark_mem->ark_dense_q, yguess);
+    } else {
+      retval = arkDenseEval(ark_mem, tau, 0, 1, yguess);
+    }
+    if (retval == ARK_SUCCESS)  return(ARK_SUCCESS);
+    break;
+
+  case 4:
+
+    /***** Bootstrap predictor: if any previous stage in step has nonzero c_i, 
+	   construct a quadratic Hermite interpolant for prediction; otherwise 
+	   use the trivial predictor. *****/
+
+    /* this approach will not work (for now) when using a non-identity mass matrix */
+    if (ark_mem->ark_mass_matrix)  break;
+
+    /* determine if any previous stages in step meet criteria */
+    jstage = -1;
+    for (i=0; i<istage; i++)
+      jstage = (ark_mem->ark_ci[i] != ZERO) ? i : jstage;
+
+    /* if using the trivial predictor, break */
+    if (jstage == -1)  break;
+    
+    /* find the "optimal" previous stage to use */
+    for (i=0; i<istage; i++) 
+      if ((ark_mem->ark_ci[i] > ark_mem->ark_ci[jstage]) && (ark_mem->ark_ci[i] != ZERO))
+	jstage = i;
+
+    /* evaluate the quadratic Hermite interpolant for the prediction */
+    h = ark_mem->ark_h * ark_mem->ark_ci[jstage];
+    tau = ark_mem->ark_h * ark_mem->ark_ci[istage];
+    a0 = ONE;
+    a2 = tau*tau/TWO/h;
+    a1 = tau - a2;
+
+    N_VLinearSum(a0, ark_mem->ark_ynew, a1, ark_mem->ark_fnew, yguess);
+    if (!ark_mem->ark_explicit) 
+      N_VLinearSum(a2, ark_mem->ark_Fi[jstage], ONE, yguess, yguess);
+    if (!ark_mem->ark_implicit) 
+      N_VLinearSum(a2, ark_mem->ark_Fe[jstage], ONE, yguess, yguess);
+    return(ARK_SUCCESS);
+    break;
+
+  case 5:
+
+    /***** Minimal correction predictor: use all previous stage 
+           information in this step *****/
+
+    /* this approach will not work (for now) when using a non-identity mass matrix */
+    if (ark_mem->ark_mass_matrix)  break;
+
+    /* yguess = h*sum_{j=0}^{i-1} (Ae(i,j)*Fe(j) + Ai(i,j)*Fi(j)) */
+    N_VConst(ZERO, yguess);
+    if (!ark_mem->ark_implicit)
+      for (jstage=0; jstage<istage; jstage++) {
+        hA = ark_mem->ark_h * ARK_A(ark_mem->ark_Ae,istage,jstage);
+        N_VLinearSum(hA, ark_mem->ark_Fe[jstage], ONE, yguess, yguess);
+      }
+    if (!ark_mem->ark_explicit)
+      for (jstage=0; jstage<istage; jstage++) {
+        hA = ark_mem->ark_h * ARK_A(ark_mem->ark_Ai,istage,jstage);
+        N_VLinearSum(hA, ark_mem->ark_Fi[jstage], ONE, yguess, yguess);
+    }
+
+    /* yguess = ynew + h*sum_{j=0}^{i-1}(Ae(i,j)*Fe(j) + Ai(i,j)*Fi(j)) */ 
+    N_VLinearSum(ONE, ark_mem->ark_ynew, ONE, yguess, yguess);
+    return(ARK_SUCCESS);
+    break;
+
+  }
+
+  /* if we made it here, use the trivial predictor (previous step solution) */
+  N_VScale(ONE, ark_mem->ark_ynew, yguess);
+  return(ARK_SUCCESS);
+
+}
+
+
+/*---------------------------------------------------------------
+ arkSet
+
+ This routine sets up the stage data for computing the RK 
+ residual, along with the step- and method-related factors 
+ gamma, gammap and gamrat.
+---------------------------------------------------------------*/
+static int arkSet(ARKodeMem ark_mem)
+{
+  /* local data */
+  realtype hA;
+  int retval, j, i = ark_mem->ark_istage;
+  N_Vector tmp = ark_mem->ark_tempv;
+
+  /* If ark_predictor==5, then sdata=0, otherwise set sdata appropriately */
+  if (ark_mem->ark_predictor == 5 && !ark_mem->ark_mass_matrix) {
+
+    N_VConst(ZERO, ark_mem->ark_sdata);
+
+  } else {
+
+    /* Initialize sdata to ynew - ycur (ycur holds guess) */
+    N_VLinearSum(ONE, ark_mem->ark_ynew, -ONE, ark_mem->ark_ycur, 
+                 ark_mem->ark_sdata);
+
+    /* If M!=I, replace sdata with M*sdata, so that sdata = M*(yn-ycur) */
+    if (ark_mem->ark_mass_matrix) {
+      N_VScale(ONE, ark_mem->ark_sdata, tmp);
+      retval = ark_mem->ark_mtimes(tmp, ark_mem->ark_sdata, ark_mem->ark_tn, 
+                                   ark_mem->ark_mtimes_data);
+      ark_mem->ark_mass_mult++;
+      if (retval != ARK_SUCCESS)  return (ARK_MASSMULT_FAIL);
+    }
+
+    /* Iterate over each prior stage updating rhs */
+    /*    Explicit pieces */
+    if (!ark_mem->ark_implicit)
+      for (j=0; j<i; j++) {
+        hA = ark_mem->ark_h * ARK_A(ark_mem->ark_Ae,i,j);
+        N_VLinearSum(hA, ark_mem->ark_Fe[j], ONE, 
+                     ark_mem->ark_sdata, ark_mem->ark_sdata);
+      }
+    /*    Implicit pieces */
+    if (!ark_mem->ark_explicit)
+      for (j=0; j<i; j++) {
+        hA = ark_mem->ark_h * ARK_A(ark_mem->ark_Ai,i,j);
+        N_VLinearSum(hA, ark_mem->ark_Fi[j], ONE, 
+                     ark_mem->ark_sdata, ark_mem->ark_sdata);
+      }
+
+  }
+
+  /* Update gamma */
+  ark_mem->ark_gamma = ark_mem->ark_h * ARK_A(ark_mem->ark_Ai,i,i);
+  if (ark_mem->ark_firststage)  
+    ark_mem->ark_gammap = ark_mem->ark_gamma;
+  ark_mem->ark_gamrat = (ark_mem->ark_firststage) ? 
+    ONE : ark_mem->ark_gamma / ark_mem->ark_gammap;  /* protect x/x != 1.0 */
+
+  /* return with success */
+  return (ARK_SUCCESS);
+
+}
+
+
+/*---------------------------------------------------------------
+ arkComputeSolutions
+
+ This routine calculates the final RK solution using the existing 
+ data.  This solution is placed directly in ark_y.  This routine 
+ also computes the error estimate ||y-ytilde||_WRMS, where ytilde 
+ is the embedded solution, and the norm weights come from 
+ ark_ewt.  This norm value is returned.  The vector form of this 
+ estimated error (y-ytilde) is stored in ark_tempv, in case the 
+ calling routine wishes to examine the error locations.
+
+ Note: at this point in the step, the vectors ark_tempv, 
+ ark_sdata and ark_ycur may all be used as temporary vectors.
+---------------------------------------------------------------*/
+static int arkComputeSolutions(ARKodeMem ark_mem, realtype *dsm)
+{
+  /* local data */
+  realtype hb;
+  int ier, j;
+  N_Vector y    = ark_mem->ark_y;
+  N_Vector yerr = ark_mem->ark_tempv;
+  N_Vector tmp1 = ark_mem->ark_sdata;
+  N_Vector tmp2 = ark_mem->ark_ycur;
+
+  /* Compute updated solution and error estimate based on whether
+     a non-identity mass matrix is present */
+  if (ark_mem->ark_mass_matrix) {   /* M != I */
+
+    /* setup mass matrix, using y, tmp1, tmp2 as temporaries */
+    if (ark_mem->ark_MassSetupNonNull) {
+      ier = ark_mem->ark_msetup(ark_mem, y, tmp1, tmp2);
+      if (ier != ARK_SUCCESS)  return(ARK_MASSSETUP_FAIL);
+    }
+
+    /* compute y RHS (store in y) */
+    N_VConst(ZERO, y);
+    for (j=0; j<ark_mem->ark_stages; j++) {
+      if (!ark_mem->ark_implicit) {
+	hb = ark_mem->ark_h * ark_mem->ark_be[j];
+	N_VLinearSum(hb, ark_mem->ark_Fe[j], ONE, y, y);
+      }
+      if (!ark_mem->ark_explicit) {
+	hb = ark_mem->ark_h * ark_mem->ark_bi[j];
+	N_VLinearSum(hb, ark_mem->ark_Fi[j], ONE, y, y);
+      }
+    }
+    
+    /* solve for y update (stored in y) */
+    /* ier = ark_mem->ark_msolve(ark_mem, y, ark_mem->ark_ewt);  */
+    ier = ark_mem->ark_msolve(ark_mem, y, ark_mem->ark_rwt); 
+    ark_mem->ark_mass_solves++;
+    if (ier < 0) {
+      ark_mem->ark_nmassfails++;
+      *dsm = 2.0;         /* indicate too much error, step with smaller step */
+      N_VScale(ONE, ark_mem->ark_ynew, y);      /* place old solution into y */
+      return(CONV_FAIL);
+    }
+
+    /* compute y = ynew + update */
+    N_VLinearSum(ONE, ark_mem->ark_ynew, ONE, y, y);
+
+
+    /* compute yerr (if step adaptivity enabled) */
+    N_VConst(ZERO, yerr);
+    if (!ark_mem->ark_fixedstep) {
+
+      /* compute yerr RHS vector (store in yerr) */
+      for (j=0; j<ark_mem->ark_stages; j++) {
+	if (!ark_mem->ark_implicit) {
+	  hb = ark_mem->ark_h * (ark_mem->ark_be[j] - ark_mem->ark_b2e[j]);
+	  N_VLinearSum(hb, ark_mem->ark_Fe[j], ONE, yerr, yerr);
+	}
+	if (!ark_mem->ark_explicit) {
+	  hb = ark_mem->ark_h * (ark_mem->ark_bi[j] - ark_mem->ark_b2i[j]);
+	  N_VLinearSum(hb, ark_mem->ark_Fi[j], ONE, yerr, yerr);
+	}
+      }
+
+      /* solve for yerr */
+      /* ier = ark_mem->ark_msolve(ark_mem, yerr, ark_mem->ark_ewt);  */
+      ier = ark_mem->ark_msolve(ark_mem, yerr, ark_mem->ark_rwt); 
+      ark_mem->ark_mass_solves++;
+      if (ier < 0) {
+	ark_mem->ark_nmassfails++;
+	*dsm = 2.0;         /* indicate too much error, step with smaller step */
+	return(CONV_FAIL);
+      }
+
+    }
+
+  } else {                          /* M == I */
+
+    /* Initialize solution to yn, error estimate to zero */
+    N_VScale(ONE, ark_mem->ark_ynew, y);
+    N_VConst(ZERO, yerr);
+
+    /* Compute time step solution */
+    for (j=0; j<ark_mem->ark_stages; j++) {
+      
+      if (!ark_mem->ark_implicit) {
+	hb = ark_mem->ark_h * ark_mem->ark_be[j];
+	N_VLinearSum(hb, ark_mem->ark_Fe[j], ONE, y, y);
+      }
+      if (!ark_mem->ark_explicit) {
+	hb = ark_mem->ark_h * ark_mem->ark_bi[j];
+	N_VLinearSum(hb, ark_mem->ark_Fi[j], ONE, y, y);
+      }
+
+    }
+
+    /* Compute yerr (if step adaptivity enabled) */
+    if (!ark_mem->ark_fixedstep) {
+      for (j=0; j<ark_mem->ark_stages; j++) {
+	if (!ark_mem->ark_implicit) {
+	  hb = ark_mem->ark_h * (ark_mem->ark_be[j] - ark_mem->ark_b2e[j]);
+	  N_VLinearSum(hb, ark_mem->ark_Fe[j], ONE, yerr, yerr);
+	}
+	if (!ark_mem->ark_explicit) {
+	  hb = ark_mem->ark_h * (ark_mem->ark_bi[j] - ark_mem->ark_b2i[j]);
+	  N_VLinearSum(hb, ark_mem->ark_Fi[j], ONE, yerr, yerr);
+	}
+      }
+    }
+
+  }
+
+  /* fill error norm and return */
+  *dsm = N_VWrmsNorm(yerr, ark_mem->ark_ewt);
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkDoErrorTest
+
+ This routine performs the local error test for the ARK method. 
+ The weighted local error norm dsm is passed in, and 
+ the test dsm ?<= 1 is made.
+
+ If the test passes, arkDoErrorTest returns ARK_SUCCESS. 
+
+ If the test fails, we revert to the last successful solution 
+ time, and:
+   - if maxnef error test failures have occurred or if 
+     SUNRabs(h) = hmin, we return ARK_ERR_FAILURE.
+   - otherwise: update time step factor eta based on local error 
+     estimate and reduce h.  Then set *nflagPtr to PREV_ERR_FAIL, 
+     and return TRY_AGAIN. 
+---------------------------------------------------------------*/
+static int arkDoErrorTest(ARKodeMem ark_mem, int *nflagPtr,
+			  realtype saved_t, int *nefPtr, realtype dsm)
+{
+  realtype ehist2, hhist2;
+  int retval;
+
+  /* If est. local error norm dsm passes test, return ARK_SUCCESS */  
+  if (dsm <= ONE) return(ARK_SUCCESS);
+  
+  /* Test failed; increment counters, set nflag, and restore tn */
+  (*nefPtr)++;
+  ark_mem->ark_netf++;
+  *nflagPtr = PREV_ERR_FAIL;
+  ark_mem->ark_tn = saved_t;
+
+  /* At maxnef failures or |h| = hmin, return ARK_ERR_FAILURE */
+  if ((SUNRabs(ark_mem->ark_h) <= ark_mem->ark_hmin*ONEPSM) ||
+      (*nefPtr == ark_mem->ark_maxnef)) return(ARK_ERR_FAILURE);
+
+  /* Set etamax=1 to prevent step size increase at end of this step */
+  ark_mem->ark_etamax = ONE;
+
+  /* Temporarily update error history array for recomputation of h */
+  ehist2 = ark_mem->ark_hadapt_ehist[2];
+  ark_mem->ark_hadapt_ehist[2] = ark_mem->ark_hadapt_ehist[1];
+  ark_mem->ark_hadapt_ehist[1] = ark_mem->ark_hadapt_ehist[0];
+  ark_mem->ark_hadapt_ehist[0] = dsm*ark_mem->ark_hadapt_bias;
+
+  /* Temporarily update step history array for recomputation of h */
+  hhist2 = ark_mem->ark_hadapt_hhist[2];
+  ark_mem->ark_hadapt_hhist[2] = ark_mem->ark_hadapt_hhist[1];
+  ark_mem->ark_hadapt_hhist[1] = ark_mem->ark_hadapt_hhist[0];
+  ark_mem->ark_hadapt_hhist[0] = ark_mem->ark_h;
+
+  /* Compute accuracy-based time step estimate (updated ark_eta) */
+  retval = arkAdapt(ark_mem);
+  if (retval != ARK_SUCCESS)  return(ARK_ERR_FAILURE);
+
+  /* Revert error history array */
+  ark_mem->ark_hadapt_ehist[0] = ark_mem->ark_hadapt_ehist[1];
+  ark_mem->ark_hadapt_ehist[1] = ark_mem->ark_hadapt_ehist[2];
+  ark_mem->ark_hadapt_ehist[2] = ehist2;
+
+  /* Revert step history array */
+  ark_mem->ark_hadapt_hhist[0] = ark_mem->ark_hadapt_hhist[1];
+  ark_mem->ark_hadapt_hhist[1] = ark_mem->ark_hadapt_hhist[2];
+  ark_mem->ark_hadapt_hhist[2] = hhist2;
+
+  /* Enforce failure bounds on eta, update h, and return for retry of step */
+  if (*nefPtr >= ark_mem->ark_small_nef) 
+    ark_mem->ark_eta = SUNMIN(ark_mem->ark_eta, ark_mem->ark_etamxf);
+  ark_mem->ark_h *= ark_mem->ark_eta;
+  ark_mem->ark_next_h = ark_mem->ark_h;
+  return(TRY_AGAIN);
+}
+
+
+/*---------------------------------------------------------------
+ arkCompleteStep
+
+ This routine performs various update operations when the step 
+ solution has passed the local error test.  We update the current
+ time, increment the step counter nst, record the values hold and
+ tnew, reset the resized flag, update the error and time step 
+ history arrays, update ycur to hold the current solution, and 
+ update the yold, ynew, fold and fnew arrays.
+---------------------------------------------------------------*/
+static int arkCompleteStep(ARKodeMem ark_mem, realtype dsm)
+{
+  int retval;
+  booleantype recomputeRHS;
+  N_Vector tempvec;
+
+  /* Set current time to the end of the step (in case the last 
+     stage time does not coincide with the step solution time).  
+     If tstop is enabled, it is possible for tn + h to be past 
+     tstop by roundoff, and in that case, we reset tn (after 
+     incrementing by h) to tstop. */
+  ark_mem->ark_tn = ark_mem->ark_tnew + ark_mem->ark_h;
+  if (ark_mem->ark_tstopset) {
+    if ((ark_mem->ark_tn - ark_mem->ark_tstop)*ark_mem->ark_h > ZERO) 
+      ark_mem->ark_tn = ark_mem->ark_tstop;
+  }
+
+  /* update scalar quantities */
+  ark_mem->ark_nst++;
+  ark_mem->ark_hold = ark_mem->ark_h;
+  ark_mem->ark_tnew = ark_mem->ark_tn;
+
+  /* turn off flag regarding resized problem */
+  ark_mem->ark_resized = FALSE;
+
+  /* update error history array */
+  ark_mem->ark_hadapt_ehist[2] = ark_mem->ark_hadapt_ehist[1];
+  ark_mem->ark_hadapt_ehist[1] = ark_mem->ark_hadapt_ehist[0];
+  ark_mem->ark_hadapt_ehist[0] = dsm*ark_mem->ark_hadapt_bias;
+
+  /* update step history array */
+  ark_mem->ark_hadapt_hhist[2] = ark_mem->ark_hadapt_hhist[1];
+  ark_mem->ark_hadapt_hhist[1] = ark_mem->ark_hadapt_hhist[0];
+  ark_mem->ark_hadapt_hhist[0] = ark_mem->ark_h;
+
+  /* apply user-supplied step postprocessing function (if supplied) */
+  if (ark_mem->ark_ProcessStep != NULL) {
+    retval = ark_mem->ark_ProcessStep(ark_mem->ark_tn, 
+				      ark_mem->ark_y,
+				      ark_mem->ark_user_data);
+
+    if (retval != 0) return(ARK_POSTPROCESS_FAIL);
+  }
+
+  /* update ycur to current solution */
+  N_VScale(ONE, ark_mem->ark_y, ark_mem->ark_ycur);
+
+  /* swap yold and ynew arrays */
+  tempvec = ark_mem->ark_yold;
+  ark_mem->ark_yold = ark_mem->ark_ynew;
+  ark_mem->ark_ynew = tempvec;
+
+  /* swap fold and fnew arrays */
+  tempvec = ark_mem->ark_fold;
+  ark_mem->ark_fold = ark_mem->ark_fnew;
+  ark_mem->ark_fnew = tempvec;
+
+  /* update fnew array using explicit and implicit RHS:
+     if ce[s-1] = 1.0 and ci[s-1] = 1.0 and no post-processing, use already-computed 
+     RHS values, otherwise compute from scratch */
+  N_VConst(ZERO, ark_mem->ark_fnew);
+  recomputeRHS = FALSE;
+  if (ark_mem->ark_ProcessStep != NULL) 
+    recomputeRHS = TRUE;
+  if ((!ark_mem->ark_implicit) && (SUNRabs(ark_mem->ark_ce[ark_mem->ark_stages-1]-ONE)>TINY))
+    recomputeRHS = TRUE;
+  if ((!ark_mem->ark_explicit) && (SUNRabs(ark_mem->ark_ci[ark_mem->ark_stages-1]-ONE)>TINY))
+    recomputeRHS = TRUE;
+  if (recomputeRHS) {
+    retval = arkFullRHS(ark_mem, ark_mem->ark_tn, ark_mem->ark_y, 
+			ark_mem->ark_ftemp, ark_mem->ark_fnew);
+    if (retval != 0) return(ARK_RHSFUNC_FAIL);
+  } else {
+    if (!ark_mem->ark_explicit) 
+      N_VLinearSum(ONE, ark_mem->ark_Fi[ark_mem->ark_stages-1], 
+		   ONE, ark_mem->ark_fnew, ark_mem->ark_fnew);
+    if (!ark_mem->ark_implicit) 
+      N_VLinearSum(ONE, ark_mem->ark_Fe[ark_mem->ark_stages-1], 
+		   ONE, ark_mem->ark_fnew, ark_mem->ark_fnew);
+  }
+
+  /* if M!=I, update fnew with M^{-1}*fnew (note, mass matrix already current) */
+  if (ark_mem->ark_mass_matrix) {   /* M != I */
+    N_VScale(ark_mem->ark_h, ark_mem->ark_fnew, ark_mem->ark_fnew);      /* scale RHS */
+    retval = ark_mem->ark_msolve(ark_mem, ark_mem->ark_fnew, ark_mem->ark_rwt); 
+    N_VScale(ONE/ark_mem->ark_h, ark_mem->ark_fnew, ark_mem->ark_fnew);  /* scale result */
+    ark_mem->ark_mass_solves++;
+    if (retval != ARK_SUCCESS) {
+      ark_mem->ark_nmassfails++;
+      arkProcessError(ark_mem, ARK_MASSSOLVE_FAIL, "ARKODE", 
+		      "arkCompleteStep", "Mass matrix solver failure");
+      return(ARK_MASSSOLVE_FAIL);
+    }
+  }
+
+  /* update ynew (cannot swap since ark_y is a pointer to user-supplied data) */
+  N_VScale(ONE, ark_mem->ark_y, ark_mem->ark_ynew);
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkPrepareNextStep
+
+ This routine handles the setting of stepsize, hprime, for the 
+ next step.  Along with hprime, it sets the ratio eta=hprime/h.
+ It also updates other state variables related to a change of 
+ step size.
+---------------------------------------------------------------*/
+ static int arkPrepareNextStep(ARKodeMem ark_mem)
+{
+  int retval;
+
+  /* If etamax = 1, or if fixed time-stepping requesetd, defer 
+     step size changes until next step */
+  if ((ark_mem->ark_etamax == ONE) || ark_mem->ark_fixedstep){
+    ark_mem->ark_hprime = ark_mem->ark_h;
+    ark_mem->ark_eta = ONE;
+    return(ARK_SUCCESS);
+  }
+
+  /* Adjust ark_eta in arkAdapt */
+  retval = arkAdapt(ark_mem);
+  
+  /* set hprime value for next step size */
+  ark_mem->ark_hprime = ark_mem->ark_h * ark_mem->ark_eta;
+
+  if (retval != ARK_SUCCESS)  return(ARK_ERR_FAILURE);
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkNls
+
+ This routine attempts to solve the nonlinear system associated
+ with a single implicit step of the linear multistep method.
+ It calls one of arkNlsAccelFP, arkLs or arkNlsNewton to do the 
+ work.
+
+ Upon a successful solve, the solution is held in ark_mem->ark_y.
+---------------------------------------------------------------*/
+static int arkNls(ARKodeMem ark_mem, int nflag)
+{
+
+  /* call the appropriate solver */
+
+  /*   fixed point */
+  if (ark_mem->ark_use_fp)
+    return(arkNlsAccelFP(ark_mem, nflag));
+
+  /*   linearly implicit (one Newton iteration) */
+  if (ark_mem->ark_linear)
+    return(arkLs(ark_mem, nflag));
+  
+  /*   Newton */
+  return(arkNlsNewton(ark_mem, nflag));
+
+}
+
+
+/*---------------------------------------------------------------
+ arkNlsResid
+
+ This routine evaluates the negative nonlinear residual for the 
+ additive Runge-Kutta method.  It assumes that any data from 
+ previous time steps/stages is contained in ark_mem, and merely 
+ combines this old data with the current ODE RHS vector, 
+ fy = f(t,y), to compute the nonlinear residual r.
+
+ At the ith stage, we compute 
+    r = -M*zi + M*yn + h*sum_{j=0}^{i-1} Ae(i,j)*Fe(j) 
+                     + h*sum_{j=0}^{i} Ai(i,j)*Fi(j)
+    r = -M*zi + gamma*Fi(zi) + M*yn + data
+ where
+    zi is stored in y
+    Fi(zi) is stored in fy
+    (M*yn+data) is stored in ark_mem->ark_sdata,
+ so we really just compute
+    r = -M*y + gamma*fy + ark_mem->ark_sdata
+
+ Possible return values:  ARK_SUCCESS  or  ARK_RHSFUNC_FAIL
+---------------------------------------------------------------*/
+static int arkNlsResid(ARKodeMem ark_mem, N_Vector y, 
+		       N_Vector fy, N_Vector r)
+{
+
+  /* temporary variables */
+  int retval;
+
+  /* put M*y in r */
+  if (ark_mem->ark_mass_matrix) {
+    retval = ark_mem->ark_mtimes(y, r, ark_mem->ark_tn, 
+				 ark_mem->ark_mtimes_data);
+    ark_mem->ark_mass_mult++;
+    if (retval != ARK_SUCCESS)  
+      return (ARK_MASSMULT_FAIL);
+  } else {
+    N_VScale(ONE, y, r);
+  }
+
+  /* update with sdata */
+  N_VLinearSum(-ONE, r, ONE, ark_mem->ark_sdata, r);
+
+  /* update with gamma*fy */
+  N_VLinearSum(ark_mem->ark_gamma, fy, ONE, r, r);
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkNlsNewton
+
+ This routine handles the Newton iteration for implicit portions 
+ of the ARK and DIRK methods. It calls lsetup if indicated, 
+ performs a modified Newton iteration (using a fixed 
+ Jacobian / precond), and retries a failed attempt at Newton 
+ iteration if that is indicated. 
+
+ Upon entry, the predicted solution is held in ark_mem->ark_ycur; 
+ this array is never changed throughout this routine.  If an 
+ initial attempt at solving the nonlinear system fail (e.g. due to 
+ a stale Jacobian), this allows for new attempts that first revert 
+ ark_mem->ark_y back to this initial guess before trying again. 
+
+ Upon a successful solve, the solution is held in ark_mem->ark_y.
+
+ Possible return values:
+
+   ARK_SUCCESS       ---> continue with error test
+
+   ARK_RHSFUNC_FAIL  -+  
+   ARK_LSETUP_FAIL    |-> halt the integration 
+   ARK_LSOLVE_FAIL   -+
+
+   CONV_FAIL        -+
+   RHSFUNC_RECVR    -+-> predict again or stop if too many
+---------------------------------------------------------------*/
+static int arkNlsNewton(ARKodeMem ark_mem, int nflag)
+{
+  N_Vector vtemp1, vtemp2, vtemp3, b;
+  int convfail, retval, ier, m;
+  booleantype callSetup;
+  realtype del, delp, dcon;
+  
+  vtemp1 = ark_mem->ark_acor;  /* rename acor as vtemp1 for readability  */
+  vtemp2 = ark_mem->ark_y;     /* rename y as vtemp2 for readability     */
+  vtemp3 = ark_mem->ark_tempv; /* rename tempv as vtemp3 for readability */
+  b      = ark_mem->ark_tempv; /* also rename tempv as b for readability */
+
+  /* Set flag convfail, input to lsetup for its evaluation decision */
+  convfail = ((nflag == FIRST_CALL) || (nflag == PREV_ERR_FAIL)) ?
+    ARK_NO_FAILURES : ARK_FAIL_OTHER;
+
+  /* Decide whether or not to call setup routine (if one exists) */
+  if (ark_mem->ark_setupNonNull) {      
+    callSetup = (nflag == PREV_CONV_FAIL) || (nflag == PREV_ERR_FAIL) ||
+      (ark_mem->ark_firststage) || (ark_mem->ark_msbp < 0) ||
+      (ark_mem->ark_nst >= ark_mem->ark_nstlp + abs(ark_mem->ark_msbp)) || 
+      (SUNRabs(ark_mem->ark_gamrat-ONE) > ark_mem->ark_dgmax);
+  } else {  
+    ark_mem->ark_crate = ONE;
+    callSetup = FALSE;
+  }
+  
+  /* Looping point for attempts at solution of the nonlinear system:
+       Evaluate f at predicted y, store result in ark_mem->ark_ftemp.
+       Call lsetup if indicated, setting statistics and gamma factors.
+       Zero out the correction array (ark_mem->ark_acor).
+       Copy the predicted y (ycur) into the output (ark_mem->ark_y).
+       Performs the modified Newton iteration using the existing lsetup.
+       Repeat process if a recoverable failure occurred (convergence
+	  failure with stale Jacobian). */
+  for(;;) {
+
+    if (!ark_mem->ark_explicit) {
+      retval = ark_mem->ark_fi(ark_mem->ark_tn, ark_mem->ark_ycur, 
+			       ark_mem->ark_ftemp, ark_mem->ark_user_data);
+      ark_mem->ark_nfi++; 
+      if (retval < 0) return(ARK_RHSFUNC_FAIL);
+      if (retval > 0) return(RHSFUNC_RECVR);
+    }
+    
+    if (callSetup) {
+
+      /* Solver diagnostics reporting */
+      if (ark_mem->ark_report)  fprintf(ark_mem->ark_diagfp, "  lsetup\n");
+
+      ier = ark_mem->ark_lsetup(ark_mem, convfail, ark_mem->ark_ycur, 
+				ark_mem->ark_ftemp, &ark_mem->ark_jcur, 
+				vtemp1, vtemp2, vtemp3);
+      ark_mem->ark_nsetups++;
+      callSetup = FALSE;
+      ark_mem->ark_firststage = FALSE;
+      ark_mem->ark_gamrat = ark_mem->ark_crate = ONE; 
+      ark_mem->ark_gammap = ark_mem->ark_gamma;
+      ark_mem->ark_nstlp  = ark_mem->ark_nst;
+
+      /* Return if lsetup failed */
+      if (ier < 0) return(ARK_LSETUP_FAIL);
+      if (ier > 0) return(CONV_FAIL);
+    }
+
+    /* Set acor to zero and load prediction into y vector */
+    N_VConst(ZERO, ark_mem->ark_acor);
+    N_VScale(ONE, ark_mem->ark_ycur, ark_mem->ark_y);
+
+
+    /***********************************
+     Do the modified Newton iteration:
+     - Reuses a single call to ark_mem->ark_lsetup (called by the enclosing loop). 
+     - Upon entry, the predicted solution is held in ark_mem->ark_ycur.
+     - Here, ark_mem->ark_acor accumulates the difference between the predictor 
+       and the final solution to the time step.
+     - Upon a successful solve, the solution is held in ark_mem->ark_y. 
+    */
+
+    /* Initialize temporary variables for use in iteration */
+    ark_mem->ark_mnewt = m = 0;
+    del = delp = ZERO;
+
+    /* Reset the stored residual norm (for iterative linear solvers) */
+    ark_mem->ark_eRNrm = RCONST(0.1) * ark_mem->ark_nlscoef;
+
+    /* Looping point for Newton iteration */
+    for(;;) {
+
+      /* Evaluate the nonlinear system residual, put result into b */
+      retval = arkNlsResid(ark_mem, ark_mem->ark_acor, 
+			   ark_mem->ark_ftemp, b);
+      if (retval != ARK_SUCCESS) {
+	ier = ARK_RHSFUNC_FAIL;
+	break;
+      }
+
+      /* Call the lsolve function */
+      retval = ark_mem->ark_lsolve(ark_mem, b, ark_mem->ark_rwt, 
+				   ark_mem->ark_y, ark_mem->ark_ftemp); 
+      ark_mem->ark_nni++;
+    
+      if (retval < 0) {
+	ier = ARK_LSOLVE_FAIL;
+	break;
+      }
+    
+      /* If lsolve had a recoverable failure and Jacobian data is
+	 not current, signal to try the solution again */
+      if (retval > 0) { 
+	if ((!ark_mem->ark_jcur) && (ark_mem->ark_setupNonNull)) 
+	  ier = TRY_AGAIN;
+	else 
+	  ier = CONV_FAIL;
+	break;
+      }
+
+      /* Get WRMS norm of correction; add correction to acor and y */
+      del = N_VWrmsNorm(b, ark_mem->ark_ewt);
+      N_VLinearSum(ONE, ark_mem->ark_acor, ONE, b, ark_mem->ark_acor);
+      N_VLinearSum(ONE, ark_mem->ark_ycur, ONE, ark_mem->ark_acor, ark_mem->ark_y);
+
+      /* Compute the nonlinear error estimate.  If m > 0, an estimate of the convergence
+	 rate constant is stored in crate, and used in the subsequent estimates */
+      if (m > 0) 
+	ark_mem->ark_crate = SUNMAX(ark_mem->ark_crdown*ark_mem->ark_crate, del/delp);
+      dcon = SUNMIN(ark_mem->ark_crate, ONE) * del / ark_mem->ark_nlscoef;
+
+      /* compute the forcing term for linear solver tolerance */
+      ark_mem->ark_eRNrm = SUNMIN(ark_mem->ark_crate, ONE) * del
+	                 * RCONST(0.1) * ark_mem->ark_nlscoef;
+#ifdef FIXED_LIN_TOL
+      /* reset if a fixed linear solver tolerance is desired */
+      ark_mem->ark_eRNrm = RCONST(0.1) * ark_mem->ark_nlscoef;
+#endif
+
+#ifdef DEBUG_OUTPUT
+ printf("Newton iter %i,  del = %19.16g,  crate = %19.16g\n", m, del, ark_mem->ark_crate);
+ printf("   dcon = %19.16g\n", dcon);
+ printf("Newton correction:\n");
+ N_VPrint_Serial(ark_mem->ark_acor);
+#endif
+
+      /* Solver diagnostics reporting */
+      if (ark_mem->ark_report) 
+	fprintf(ark_mem->ark_diagfp, "    newt  %i  %19.16g  %19.16g\n", m, del, dcon);
+    
+      if (dcon <= ONE) {
+	ark_mem->ark_jcur = FALSE;
+	ier = ARK_SUCCESS;
+	break;
+      }
+
+      /* update Newton iteration counter */
+      ark_mem->ark_mnewt = ++m;
+    
+      /* Stop at maxcor iterations or if iteration seems to be diverging.
+	 If still not converged and Jacobian data is not current, signal 
+	 to try the solution again */
+      if ((m == ark_mem->ark_maxcor) || 
+	  ((m >= 2) && (del > ark_mem->ark_rdiv*delp))) {
+	if ((!ark_mem->ark_jcur) && (ark_mem->ark_setupNonNull)) 
+	  ier = TRY_AGAIN;
+	else
+	  ier = CONV_FAIL;
+	break;
+      }
+    
+      /* Save norm of correction, evaluate fi, and loop again */
+      delp = del;
+      if (!ark_mem->ark_explicit) {
+	retval = ark_mem->ark_fi(ark_mem->ark_tn, ark_mem->ark_y, 
+				 ark_mem->ark_ftemp, ark_mem->ark_user_data);
+	ark_mem->ark_nfi++;
+	if (retval < 0) {
+	  ier = ARK_RHSFUNC_FAIL;
+	  break;
+	}
+	if (retval > 0) {
+	  if ((!ark_mem->ark_jcur) && (ark_mem->ark_setupNonNull)) 
+	    ier = TRY_AGAIN;
+	  else
+	    ier = RHSFUNC_RECVR;
+	  break;
+	}
+      }
+    } 
+    /* end modified Newton iteration */
+    /*********************************/
+    
+    /* If there is a convergence failure and the Jacobian-related 
+       data appears not to be current, loop again with a call to lsetup
+       in which convfail=ARK_FAIL_BAD_J.  Otherwise return. */
+    if (ier != TRY_AGAIN) return(ier);
+    
+    callSetup = TRUE;
+    convfail = ARK_FAIL_BAD_J;
+  }
+}
+
+
+/*---------------------------------------------------------------
+ arkNlsAccelFP
+
+ This routine handles the Anderson-accelerated fixed-point 
+ iteration for implicit portions of the ARK and DIRK methods. It 
+ performs an accelerated fixed-point iteration (without need for 
+ a Jacobian or preconditioner. 
+
+ Upon entry, the predicted solution is held in ark_mem->ark_ycur.
+
+ Upon a successful solve, the solution is held in ark_mem->ark_y.
+
+ Possible return values:
+
+   ARK_SUCCESS       ---> continue with error test
+
+   ARK_RHSFUNC_FAIL  ---> halt the integration 
+
+   CONV_FAIL         -+
+   RHSFUNC_RECVR     -+-> predict again or stop if too many
+---------------------------------------------------------------*/
+static int arkNlsAccelFP(ARKodeMem ark_mem, int nflag)
+{
+  /* local variables */
+  int retval;
+  realtype del, delp, dcon;
+
+  /* local shortcut variables */
+  realtype tn     = ark_mem->ark_tn;
+  realtype *R     = ark_mem->ark_fp_R;
+  realtype *gamma = ark_mem->ark_fp_gamma;
+  long int maa    = ark_mem->ark_fp_m;
+  void *udata     = ark_mem->ark_user_data;
+  N_Vector ypred  = ark_mem->ark_acor;
+  N_Vector y      = ark_mem->ark_y;
+  N_Vector ycur   = ark_mem->ark_ycur;
+  N_Vector ftemp  = ark_mem->ark_ftemp;
+  N_Vector fval   = ark_mem->ark_fp_fval;
+  N_Vector tempv  = ark_mem->ark_tempv;
+
+  /* Initialize temporary variables for use in iteration */
+  del = delp = ZERO;
+  ark_mem->ark_crate = ONE;
+
+  /* Initialize iteration counter */
+  ark_mem->ark_mnewt = 0;
+
+  /* Load prediction into y vector, ypred */
+  N_VScale(ONE, ycur, y);
+  N_VScale(ONE, ycur, ypred);
+
+  /* Looping point for attempts at solution of the nonlinear system:
+       Evaluate f at predicted y, store result in ark_mem->ark_ftemp.
+       Performs the accelerated fixed-point iteration.
+       Repeat process if a recoverable failure occurred (convergence
+	  failure with stale Jacobian). */
+  for(;;) {
+
+    /* evaluate implicit ODE RHS function, store in ftemp */
+    if (!ark_mem->ark_explicit) {
+      retval = ark_mem->ark_fi(tn, y, ftemp, udata);
+      ark_mem->ark_nfi++;
+      if (retval < 0) return(ARK_RHSFUNC_FAIL);
+      if (retval > 0) return(RHSFUNC_RECVR);
+    }
+
+    /* store difference between current guess and prediction in tempv */
+    N_VLinearSum(ONE, y, -ONE, ypred, tempv);
+
+    /* evaluate nonlinear residual, store in fval */
+    retval = arkNlsResid(ark_mem, tempv, ftemp, fval);
+    if (retval != ARK_SUCCESS) return(ARK_RHSFUNC_FAIL);
+
+    /* convert nonlinear residual result to a fixed-point function result */
+    N_VLinearSum(ONE, y, ONE, fval, fval);
+
+    /* perform fixed point update */
+    if (maa == 0) {
+      /* plain fixed-point solver, copy residual into y */
+      N_VScale(ONE, fval, y);
+    } else {
+      /* Anderson-accelerated solver */
+      N_VScale(ONE, ycur, y);   /* update guess */
+      retval = arkAndersonAcc(ark_mem, fval, tempv, y,  /* accelerate guess */
+			      ycur, (int)(ark_mem->ark_mnewt), R, gamma);
+    }
+    ark_mem->ark_nni++;
+
+    /* compute the nonlinear error estimate.  If m > 0, an estimate of the convergence
+       rate constant is stored in crate, and used in the subsequent estimates */
+    N_VLinearSum(ONE, y, -ONE, ycur, tempv);
+    del = N_VWrmsNorm(tempv, ark_mem->ark_ewt);
+    if (ark_mem->ark_mnewt > 0)
+      ark_mem->ark_crate = SUNMAX(ark_mem->ark_crdown*ark_mem->ark_crate, del/delp);
+    dcon = SUNMIN(ark_mem->ark_crate, ONE) * del / ark_mem->ark_nlscoef;
+
+#ifdef DEBUG_OUTPUT
+ printf("FP iter %i,  del = %19.16g,  crate = %19.16g\n", ark_mem->ark_mnewt, del, ark_mem->ark_crate);
+ printf("   dcon = %19.16g\n", dcon);
+ printf("Fixed-point correction:\n");
+ N_VPrint_Serial(tempv);
+#endif
+
+    /* Solver diagnostics reporting */
+    if (ark_mem->ark_report)
+      fprintf(ark_mem->ark_diagfp, "    fp  %i  %19.16g  %19.16g\n", ark_mem->ark_mnewt, del, dcon);
+
+    /* update iteration counter */
+    ark_mem->ark_mnewt++;
+
+    if (dcon <= ONE)  return(ARK_SUCCESS);
+
+    /* Stop at maxcor iterations or if iteration seems to be diverging */
+    if ((ark_mem->ark_mnewt == ark_mem->ark_maxcor) ||
+	((ark_mem->ark_mnewt >= 2) && (del > ark_mem->ark_rdiv*delp))) 
+      return(CONV_FAIL);
+
+    /* Update current solution guess */
+    N_VScale(ONE, y, ycur);
+    
+    /* Save norm of correction and loop again */
+    delp = del;
+
+  }
+}
+
+
+/*---------------------------------------------------------------
+ arkAndersonAcc
+
+ This routine computes the Anderson-accelerated fixed point 
+ iterate itself, as used by the nonlinear solver arkNlsAccelFP().  
+
+ Upon entry, the predicted solution is held in xold;
+ this array is never changed throughout this routine.  
+
+ The result of the routine is held in x.  
+
+ Possible return values:
+   ARK_SUCCESS   ---> successful completion
+
+---------------------------------------------------------------*/
+static int arkAndersonAcc(ARKodeMem ark_mem, N_Vector gval, 
+			  N_Vector fv, N_Vector x, N_Vector xold, 
+			  int iter, realtype *R, realtype *gamma)
+{
+  /* local variables */
+  long int i_pt, i, j, lAA;
+  realtype alfa, a, b, temp, c, s;
+
+  /* local shortcut variables */
+  N_Vector vtemp2 = ark_mem->ark_y;       /* rename y as vtemp2 for readability */
+  long int *ipt_map = ark_mem->ark_fp_imap;
+  long int maa = ark_mem->ark_fp_m;
+  N_Vector gold = ark_mem->ark_fp_gold;
+  N_Vector fold = ark_mem->ark_fp_fold;
+  N_Vector *df = ark_mem->ark_fp_df;
+  N_Vector *dg = ark_mem->ark_fp_dg;
+  N_Vector *Q = ark_mem->ark_fp_q;
+  
+  for (i=0; i<maa; i++)  ipt_map[i]=0;
+  i_pt = iter-1 - ((iter-1)/maa)*maa;
+  N_VLinearSum(ONE, gval, -ONE, xold, fv);
+  if (iter > 0) {
+    /* compute dg_new = gval - gval_old*/
+    N_VLinearSum(ONE, gval, -ONE, gold, dg[i_pt]);
+    /* compute df_new = fval - fval_old */
+    N_VLinearSum(ONE, fv, -ONE, fold, df[i_pt]);
+  }
+    
+  N_VScale(ONE, gval, gold);
+  N_VScale(ONE, fv, fold);
+  
+  if (iter == 0) {
+    N_VScale(ONE, gval, x);
+  } else {
+    if (iter == 1) {
+      R[0] = SUNRsqrt(N_VDotProd(df[i_pt], df[i_pt])); 
+      alfa = ONE/R[0];
+      N_VScale(alfa, df[i_pt], Q[i_pt]);
+      ipt_map[0] = 0;
+    } else if (iter <= maa) {
+      N_VScale(ONE, df[i_pt], vtemp2);
+      for (j=0; j<(iter-1); j++) {
+	ipt_map[j] = j;
+	R[(iter-1)*maa+j] = N_VDotProd(Q[j], vtemp2);
+	N_VLinearSum(ONE, vtemp2, -R[(iter-1)*maa+j], Q[j], vtemp2);
+      }
+      R[(iter-1)*maa+iter-1] = SUNRsqrt(N_VDotProd(vtemp2, vtemp2)); 
+      if (R[(iter-1)*maa+iter-1] == ZERO) {
+	N_VScale(ZERO, vtemp2, Q[i_pt]);
+      } else {
+	N_VScale((ONE/R[(iter-1)*maa+iter-1]), vtemp2, Q[i_pt]);
+      }
+      ipt_map[iter-1] = iter-1;
+    } else {
+      /* Delete left-most column vector from QR factorization */
+      for (i=0; i < maa-1; i++) {
+        a = R[(i+1)*maa + i];
+        b = R[(i+1)*maa + i+1];
+        temp = SUNRsqrt(a*a + b*b);
+        c = a / temp;
+        s = b / temp;
+        R[(i+1)*maa + i] = temp;
+        R[(i+1)*maa + i+1] = 0.0;      
+	/* OK to re-use temp */
+        if (i < maa-1) {
+          for (j = i+2; j < maa; j++) {
+            a = R[j*maa + i];
+            b = R[j*maa + i+1];
+            temp = c * a + s * b;
+            R[j*maa + i+1] = -s*a + c*b;
+            R[j*maa + i] = temp;
+	  }
+	}
+        N_VLinearSum(c, Q[i], s, Q[i+1], vtemp2);
+        N_VLinearSum(-s, Q[i], c, Q[i+1], Q[i+1]);
+        N_VScale(ONE, vtemp2, Q[i]);
+      }
+
+      /* Shift R to the left by one. */
+      for (i = 1; i < maa; i++) {
+        for (j = 0; j < maa-1; j++) {
+          R[(i-1)*maa + j] = R[i*maa + j];
+        }
+      }
+
+      /* Add the new df vector */
+      N_VScale(ONE,df[i_pt],vtemp2);
+      for (j=0; j < (maa-1); j++) {
+        R[(maa-1)*maa+j] = N_VDotProd(Q[j],vtemp2);
+        N_VLinearSum(ONE,vtemp2,-R[(maa-1)*maa+j],Q[j],vtemp2);
+      }
+      R[(maa-1)*maa+maa-1] = SUNRsqrt(N_VDotProd(vtemp2,vtemp2));
+      N_VScale((1/R[(maa-1)*maa+maa-1]),vtemp2,Q[maa-1]);
+
+      /* Update the iteration map */
+      j = 0;
+      for (i=i_pt+1; i<maa; i++)
+	ipt_map[j++] = i;
+      for (i=0; i<(i_pt+1); i++)
+	ipt_map[j++] = i;
+    }
+
+    /* Solve least squares problem and update solution */
+    lAA = iter;
+    if (maa < iter)  lAA = maa;
+    N_VScale(ONE, gval, x);
+    for (i=0; i<lAA; i++)
+      gamma[i] = N_VDotProd(fv, Q[i]);
+    for (i=lAA-1; i>-1; i--) {
+      for (j=i+1; j<lAA; j++) 
+	gamma[i] = gamma[i] - R[j*maa+i]*gamma[j]; 
+      if (gamma[i] == ZERO) {
+	gamma[i] = ZERO;
+      } else {
+	gamma[i] = gamma[i]/R[i*maa+i];
+      }
+      N_VLinearSum(ONE, x, -gamma[i], dg[ipt_map[i]], x);
+    }
+  }
+
+  return 0;
+}
+
+/*---------------------------------------------------------------
+ arkLs
+
+ This routine attempts to solve the linear system associated
+ with a single implicit step of the ARK method.  This should 
+ only be called if the user has specified that the implicit 
+ problem is linear.  In this routine, we assume that the problem 
+ depends linearly on the solution.  Additionally, if the Jacobian
+ is not time dependent we only call lsetup on changes to gamma; 
+ otherwise we call lsetup at every call.  In all cases, we then 
+ call the user-specified linear solver (with a tight tolerance) 
+ to compute the time-evolved solution.  
+
+ Upon entry, the predicted solution is held in ark_mem->ark_ycur.
+
+ Upon a successful solve, the solution is held in ark_mem->ark_y.
+
+ Possible return values:
+
+   ARK_SUCCESS       ---> continue with error test
+
+   ARK_RHSFUNC_FAIL  -+  
+   ARK_LSETUP_FAIL    |-> halt the integration 
+   ARK_LSOLVE_FAIL   -+
+
+   RHSFUNC_RECVR     --> predict again or stop if too many
+---------------------------------------------------------------*/
+static int arkLs(ARKodeMem ark_mem, int nflag)
+{
+  N_Vector vtemp1, vtemp2, vtemp3, b;
+  int convfail, retval, ier;
+  booleantype callSetup;
+  realtype del;
+  
+  vtemp1 = ark_mem->ark_acor;  /* rename acor as vtemp1 for readability  */
+  vtemp2 = ark_mem->ark_y;     /* rename y as vtemp2 for readability     */
+  vtemp3 = ark_mem->ark_tempv; /* rename tempv as vtemp3 for readability */
+  b      = ark_mem->ark_tempv; /* also rename tempv as b for readability */
+
+  /* Set flag convfail, input to lsetup for its evaluation decision */
+  convfail = (nflag == FIRST_CALL) ? ARK_NO_FAILURES : ARK_FAIL_OTHER;
+
+  /* Decide whether or not to call setup routine (if one exists) */
+  if (ark_mem->ark_setupNonNull) {      
+    callSetup = (ark_mem->ark_firststage) || 
+      (ark_mem->ark_linear_timedep) || (ark_mem->ark_msbp < 0) ||
+      (SUNRabs(ark_mem->ark_gamrat-ONE) > ark_mem->ark_dgmax);
+  } else {  
+    callSetup = FALSE;
+  }
+  
+  /* update implicit RHS, store in ark_mem->ark_ftemp */
+  if (!ark_mem->ark_explicit) {
+    retval = ark_mem->ark_fi(ark_mem->ark_tn, ark_mem->ark_ycur, 
+			     ark_mem->ark_ftemp, ark_mem->ark_user_data);
+    ark_mem->ark_nfi++; 
+    if (retval < 0) return(ARK_RHSFUNC_FAIL);
+    if (retval > 0) return(RHSFUNC_RECVR);
+  }
+  
+  /* update system matrix if necessary */
+  if (callSetup) {
+
+    /* Solver diagnostics reporting */
+    if (ark_mem->ark_report)  fprintf(ark_mem->ark_diagfp, "  lsetup\n");
+
+    ier = ark_mem->ark_lsetup(ark_mem, convfail, ark_mem->ark_ycur, 
+			      ark_mem->ark_ftemp, &ark_mem->ark_jcur, 
+			      vtemp1, vtemp2, vtemp3);
+    ark_mem->ark_nsetups++;
+    callSetup = FALSE;
+    ark_mem->ark_firststage = FALSE;
+    ark_mem->ark_gamrat = ark_mem->ark_crate = ONE; 
+    ark_mem->ark_gammap = ark_mem->ark_gamma;
+    ark_mem->ark_nstlp  = ark_mem->ark_nst;
+
+    /* Return if lsetup failed */
+    if (ier < 0) return(ARK_LSETUP_FAIL);
+    if (ier > 0) return(CONV_FAIL);
+  }
+
+  /* Set acor to zero and load prediction into y vector */
+  N_VConst(ZERO, ark_mem->ark_acor);
+  N_VScale(ONE, ark_mem->ark_ycur, ark_mem->ark_y);
+  
+
+  /* Do a single Newton iteration */
+
+  /*   Initialize temporary variables for use in iteration */
+  ark_mem->ark_mnewt = 0;
+  del = ZERO;
+
+  /*   Set the stored residual norm to force an "accurate" initial linear solve */
+  ark_mem->ark_eRNrm = RCONST(0.1) * ark_mem->ark_nlscoef;
+
+  /*   Evaluate the nonlinear system residual, put result into b */
+  retval = arkNlsResid(ark_mem, ark_mem->ark_acor, ark_mem->ark_ftemp, b);
+  if (retval != ARK_SUCCESS)  return (ARK_RHSFUNC_FAIL);
+
+  /*   Call the lsolve function */
+  retval = ark_mem->ark_lsolve(ark_mem, b, ark_mem->ark_rwt, 
+			       ark_mem->ark_y, ark_mem->ark_ftemp); 
+  ark_mem->ark_nni++;
+  if (retval != 0)  return (ARK_LSOLVE_FAIL);
+    
+  /*   Get WRMS norm of correction; add correction to acor and y */
+  del = N_VWrmsNorm(b, ark_mem->ark_ewt);
+  N_VLinearSum(ONE, ark_mem->ark_acor, ONE, b, ark_mem->ark_acor);
+  N_VLinearSum(ONE, ark_mem->ark_ycur, ONE, ark_mem->ark_acor, ark_mem->ark_y);
+
+  /*   Solver diagnostics reporting */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "    newt  %i  %19.16g  %19.16g\n", 0, del, 0.0);
+
+  /* clean up and return */ 
+  ark_mem->ark_jcur = FALSE;
+  return (ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkHandleNFlag
+
+ This routine takes action on the return value nflag = *nflagPtr
+ returned by arkNls, as follows:
+
+ If arkNls succeeded in solving the nonlinear system, then
+ arkHandleNFlag returns the constant SOLVE_SUCCESS, which tells 
+ arkStep it is safe to continue with other stage solves, or to 
+ perform the error test.
+
+ If the nonlinear system was not solved successfully, then ncfn and
+ ncf = *ncfPtr are incremented.
+
+ If the solution of the nonlinear system failed due to an
+ unrecoverable failure by setup, we return the value ARK_LSETUP_FAIL.
+ 
+ If it failed due to an unrecoverable failure in solve, then we return
+ the value ARK_LSOLVE_FAIL.
+
+ If it failed due to an unrecoverable failure in rhs, then we return
+ the value ARK_RHSFUNC_FAIL.
+
+ Otherwise, a recoverable failure occurred when solving the 
+ nonlinear system (arkNls returned nflag == CONV_FAIL or RHSFUNC_RECVR). 
+ In this case, if using fixed time step sizes, or if ncf is now equal 
+ to maxncf, or if |h| = hmin, then we return the value ARK_CONV_FAILURE 
+ (if nflag=CONV_FAIL) or ARK_REPTD_RHSFUNC_ERR (if nflag=RHSFUNC_RECVR).
+ If not, we set *nflagPtr = PREV_CONV_FAIL and return the value
+ PREDICT_AGAIN, telling arkStep to reattempt the step.
+---------------------------------------------------------------*/
+static int arkHandleNFlag(ARKodeMem ark_mem, int *nflagPtr, 
+			  realtype saved_t, int *ncfPtr)
+{
+  int nflag;
+  
+  nflag = *nflagPtr;
+  
+  if (nflag == ARK_SUCCESS) return(SOLVE_SUCCESS);
+
+  /* The nonlinear soln. failed; increment ncfn */
+  ark_mem->ark_ncfn++;
+  
+  /* If fixed time stepping, then return with convergence failure */
+  if (ark_mem->ark_fixedstep)    return(ARK_CONV_FAILURE);
+
+  /* Restore the previous step time, tn */
+  ark_mem->ark_tn = saved_t;
+  
+  /* Return if lsetup, lsolve, or rhs failed unrecoverably */
+  if (nflag == ARK_LSETUP_FAIL)  return(ARK_LSETUP_FAIL);
+  if (nflag == ARK_LSOLVE_FAIL)  return(ARK_LSOLVE_FAIL);
+  if (nflag == ARK_RHSFUNC_FAIL) return(ARK_RHSFUNC_FAIL);
+  
+  /* At this point, nflag = CONV_FAIL or RHSFUNC_RECVR; increment ncf */
+  (*ncfPtr)++;
+  ark_mem->ark_etamax = ONE;
+
+  /* If we had maxncf failures or |h| = hmin, 
+     return ARK_CONV_FAILURE or ARK_REPTD_RHSFUNC_ERR. */
+  if ((SUNRabs(ark_mem->ark_h) <= ark_mem->ark_hmin*ONEPSM) ||
+      (*ncfPtr == ark_mem->ark_maxncf)) {
+    if (nflag == CONV_FAIL)     return(ARK_CONV_FAILURE);
+    if (nflag == RHSFUNC_RECVR) return(ARK_REPTD_RHSFUNC_ERR);    
+  }
+
+  /* Reduce step size; return to reattempt the step */
+  ark_mem->ark_eta = SUNMAX(ark_mem->ark_etacf,
+			 ark_mem->ark_hmin / SUNRabs(ark_mem->ark_h));
+  ark_mem->ark_h *= ark_mem->ark_eta;
+  ark_mem->ark_next_h = ark_mem->ark_h;
+  *nflagPtr = PREV_CONV_FAIL;
+
+
+  return(PREDICT_AGAIN);
+}
+
+
+/*---------------------------------------------------------------
+ arkHandleFailure
+
+ This routine prints error messages for all cases of failure by
+ arkHin and arkStep. It returns to ARKode the value that ARKode is 
+ to return to the user.
+---------------------------------------------------------------*/
+static int arkHandleFailure(ARKodeMem ark_mem, int flag)
+{
+
+  /* Depending on flag, print error message and return error flag */
+  switch (flag) {
+  case ARK_ERR_FAILURE: 
+    arkProcessError(ark_mem, ARK_ERR_FAILURE, "ARKODE", "ARKode", 
+		    MSGARK_ERR_FAILS, ark_mem->ark_tn, ark_mem->ark_h);
+    break;
+  case ARK_CONV_FAILURE:
+    arkProcessError(ark_mem, ARK_CONV_FAILURE, "ARKODE", "ARKode", 
+		    MSGARK_CONV_FAILS, ark_mem->ark_tn, ark_mem->ark_h);
+    break;
+  case ARK_LSETUP_FAIL:
+    arkProcessError(ark_mem, ARK_LSETUP_FAIL, "ARKODE", "ARKode", 
+		    MSGARK_SETUP_FAILED, ark_mem->ark_tn);
+    break;
+  case ARK_LSOLVE_FAIL:
+    arkProcessError(ark_mem, ARK_LSOLVE_FAIL, "ARKODE", "ARKode", 
+		    MSGARK_SOLVE_FAILED, ark_mem->ark_tn);
+    break;
+  case ARK_RHSFUNC_FAIL:
+    arkProcessError(ark_mem, ARK_RHSFUNC_FAIL, "ARKODE", "ARKode", 
+		    MSGARK_RHSFUNC_FAILED, ark_mem->ark_tn);
+    break;
+  case ARK_UNREC_RHSFUNC_ERR:
+    arkProcessError(ark_mem, ARK_UNREC_RHSFUNC_ERR, "ARKODE", "ARKode", 
+		    MSGARK_RHSFUNC_UNREC, ark_mem->ark_tn);
+    break;
+  case ARK_REPTD_RHSFUNC_ERR:
+    arkProcessError(ark_mem, ARK_REPTD_RHSFUNC_ERR, "ARKODE", "ARKode", 
+		    MSGARK_RHSFUNC_REPTD, ark_mem->ark_tn);
+    break;
+  case ARK_RTFUNC_FAIL:    
+    arkProcessError(ark_mem, ARK_RTFUNC_FAIL, "ARKODE", "ARKode", 
+		    MSGARK_RTFUNC_FAILED, ark_mem->ark_tn);
+    break;
+  case ARK_TOO_CLOSE:
+    arkProcessError(ark_mem, ARK_TOO_CLOSE, "ARKODE", "ARKode", 
+		    MSGARK_TOO_CLOSE);
+    break;
+  case ARK_MASSSOLVE_FAIL:
+    arkProcessError(ark_mem, ARK_MASSSOLVE_FAIL, "ARKODE", "ARKode", 
+		    MSGARK_MASSSOLVE_FAIL);
+    break;
+  default:
+    return(ARK_SUCCESS);   
+  }
+
+  return(flag);
+}
+
+
+/*---------------------------------------------------------------
+ arkDenseEval
+
+ This routine evaluates the dense output formula for the method,
+ using a cubic Hermite interpolating formula with the data 
+ {yn,yp,fn,fp}, where yn,yp are the stored solution values and 
+ fn,fp are the sotred RHS function values at the endpoints of the
+ last successful time step [tn,tp].  If greater polynomial order 
+ than 3 is requested (and the method order allows it, then we 
+ can bootstrap up to a 5th-order accurate interpolant.  For lower 
+ order interpolants than cubic, we use {yn,yp,fp} for 
+ quadratic, {yn,yp} for linear, and {0.5*(yn+yp)} for constant.
+ 
+ Derivatives have reduced accuracy than the dense output function
+ itself, losing one order per derivative.  We will provide 
+ derivatives up to d = min(5,q).
+
+ The input 'tau' specifies the time at which to return derivative
+ information, the formula is 
+    t = tn + tau*h,
+ where h = tp-tn, i.e. values 0<tau<1 provide interpolation, 
+ other values result in extrapolation.
+---------------------------------------------------------------*/
+static int arkDenseEval(ARKodeMem ark_mem, realtype tau, 
+			int d, int order, N_Vector yout)
+{
+  /* local variables */
+  int q;
+  realtype h, a0, a1, a2, a3, tau2, tau3;
+  h = ark_mem->ark_hold;
+  tau2 = tau*tau;
+  tau3 = tau*tau2;
+
+  /* determine polynomial order q */
+  q = SUNMIN(order, ark_mem->ark_dense_q);   /* respect Set routine  */
+  q = SUNMIN(q, ark_mem->ark_q);             /* respect method order */
+  q = SUNMAX(q, 0);                          /* respect lower bound  */
+  q = SUNMIN(q, 3);                          /* respect max possible */
+
+  /* check that d is possible */
+  /* if ((d > SUNMIN(5,q)) || (d < 0)) { */
+  if ((d > SUNMIN(3,q)) || (d < 0)) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "arkDenseEval", "Requested illegal derivative.");
+    return (ARK_ILL_INPUT);
+  }
+
+  /* build polynomial based on order */
+  switch (q) {
+
+  case(0):    /* constant interpolant, yout = 0.5*(yn+yp) */
+    N_VLinearSum(HALF, ark_mem->ark_yold, HALF, ark_mem->ark_ynew, yout);
+    break;
+
+  case(1):    /* linear interpolant */
+    if (d == 0) {
+      a0 = -tau;
+      a1 = ONE+tau;
+    } else {  /* d=1 */
+      a0 = -ONE/h;
+      a1 =  ONE/h;
+    }
+    N_VLinearSum(a0, ark_mem->ark_yold, a1, ark_mem->ark_ynew, yout);
+    break;
+
+  case(2):    /* quadratic interpolant */
+    if (d == 0) {
+      a0 = tau2;
+      a1 = ONE -tau2;
+      a2 = h*(tau2 + tau);
+    } else if (d == 1) {
+      a0 = TWO*tau/h;
+      a1 = -TWO*tau/h;
+      a2 = (ONE + TWO*tau);
+    } else {  /* d == 2 */
+      a0 = TWO/h/h;
+      a1 = -TWO/h/h;
+      a2 = TWO/h;
+    }
+    N_VLinearSum(a0, ark_mem->ark_yold, a1, ark_mem->ark_ynew, yout);
+    N_VLinearSum(a2, ark_mem->ark_fnew, ONE, yout, yout);
+    break;
+
+  case(3):    /* cubic interpolant */
+    if (d == 0) {
+      a0 = THREE*tau2 + TWO*tau3;
+      a1 = ONE - THREE*tau2 - TWO*tau3;
+      a2 = h*(tau2 + tau3);
+      a3 = h*(tau + TWO*tau2 + tau3);
+    } else if (d == 1) {
+      a0 = (SIX*tau + SIX*tau2)/h;
+      a1 = -(SIX*tau + SIX*tau2)/h;
+      a2 = TWO*tau + THREE*tau2;
+      a3 = ONE + FOUR*tau + THREE*tau2;
+    } else if (d == 2) {
+      a0 = (SIX + TWELVE*tau)/h/h;
+      a1 = -(SIX + TWELVE*tau)/h/h;
+      a2 = (TWO + SIX*tau)/h;
+      a3 = (FOUR + SIX*tau)/h;
+    } else {  /* d == 3 */
+      a0 = TWELVE/h/h/h;
+      a1 = -TWELVE/h/h/h;
+      a2 = SIX/h/h;
+      a3 = SIX/h/h;
+    }
+    N_VLinearSum(a0, ark_mem->ark_yold, a1, ark_mem->ark_ynew, yout);
+    N_VLinearSum(a2, ark_mem->ark_fold, ONE, yout, yout);
+    N_VLinearSum(a3, ark_mem->ark_fnew, ONE, yout, yout);
+    break;
+
+  default:
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "arkDenseEval", 
+		    "Illegal polynomial order.");
+    return (ARK_ILL_INPUT);
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkFullRHS
+
+ This routine computes the full ODE RHS [fe(t,y) + fi(t,y)].  If
+ a non-identity mass matrix is defined for the problem, it fills
+ the return array with M^{-1}*[fe(t,y) + fi(t,y)]
+
+ Inputs (unchanged): ark_mem, t, y
+ Output: f
+ Temporary: tmp
+---------------------------------------------------------------*/
+static int arkFullRHS(ARKodeMem ark_mem, realtype t, 
+		      N_Vector y, N_Vector tmp, N_Vector f)
+{
+  int retval;
+
+  /* if the problem involves a non-identity mass matrix and setup is
+     required, do so here (use f, tmp and ark_sdata as a temporaries) */
+  if (ark_mem->ark_mass_matrix && ark_mem->ark_MassSetupNonNull) {
+    retval = ark_mem->ark_msetup(ark_mem, f, tmp, ark_mem->ark_sdata);
+    if (retval != ARK_SUCCESS)  return(ARK_MASSSETUP_FAIL);
+  }
+
+
+  /* explicit problem -- only call fe */
+  if (ark_mem->ark_explicit) {
+
+    retval = ark_mem->ark_fe(t, y, f, ark_mem->ark_user_data);
+    ark_mem->ark_nfe++;
+    if (retval != 0) {
+      arkProcessError(ark_mem, ARK_RHSFUNC_FAIL, "ARKODE", "arkFullRHS", 
+		      MSGARK_RHSFUNC_FAILED, ark_mem->ark_tn);
+      return(ARK_RHSFUNC_FAIL);
+    }
+
+
+  /* implicit problem -- only call fi */
+  } else if (ark_mem->ark_implicit) {
+
+    retval = ark_mem->ark_fi(t, y, f, ark_mem->ark_user_data);
+    ark_mem->ark_nfi++;
+    if (retval != 0) {
+      arkProcessError(ark_mem, ARK_RHSFUNC_FAIL, "ARKODE", 
+		      "arkFullRHS", MSGARK_RHSFUNC_FAILED, ark_mem->ark_tn);
+      return(ARK_RHSFUNC_FAIL);
+    }
+
+
+  /* imex problem */
+  } else {
+    
+    /* explicit portion */
+    retval = ark_mem->ark_fe(t, y, f, ark_mem->ark_user_data);
+    ark_mem->ark_nfe++;
+    if (retval != 0) {
+      arkProcessError(ark_mem, ARK_RHSFUNC_FAIL, "ARKODE", "arkFullRHS", 
+		      MSGARK_RHSFUNC_FAILED, ark_mem->ark_tn);
+      return(ARK_RHSFUNC_FAIL);
+    }
+
+    /* implicit portion */
+    retval = ark_mem->ark_fi(t, y, tmp, ark_mem->ark_user_data);
+    ark_mem->ark_nfi++;
+    if (retval != 0) {
+      arkProcessError(ark_mem, ARK_RHSFUNC_FAIL, "ARKODE", 
+		      "arkFullRHS", MSGARK_RHSFUNC_FAILED, ark_mem->ark_tn);
+      return(ARK_RHSFUNC_FAIL);
+    }
+    N_VLinearSum(ONE, tmp, ONE, f, f);
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkEwtSetSS
+
+ This routine sets ewt as decribed above in the case tol_type = ARK_SS.
+ It tests for non-positive components before inverting. arkEwtSetSS
+ returns 0 if ewt is successfully set to a positive vector
+ and -1 otherwise. In the latter case, ewt is considered undefined.
+---------------------------------------------------------------*/
+static int arkEwtSetSS(ARKodeMem ark_mem, N_Vector ycur, N_Vector weight)
+{
+  N_VAbs(ycur, ark_mem->ark_tempv);
+  N_VScale(ark_mem->ark_reltol, ark_mem->ark_tempv, ark_mem->ark_tempv);
+  N_VAddConst(ark_mem->ark_tempv, ark_mem->ark_Sabstol, ark_mem->ark_tempv);
+  if (N_VMin(ark_mem->ark_tempv) <= ZERO) return(-1);
+  N_VInv(ark_mem->ark_tempv, weight);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkEwtSetSV
+
+ This routine sets ewt as decribed above in the case tol_type = ARK_SV.
+ It tests for non-positive components before inverting. arkEwtSetSV
+ returns 0 if ewt is successfully set to a positive vector
+ and -1 otherwise. In the latter case, ewt is considered undefined.
+---------------------------------------------------------------*/
+static int arkEwtSetSV(ARKodeMem ark_mem, N_Vector ycur, N_Vector weight)
+{
+  N_VAbs(ycur, ark_mem->ark_tempv);
+  N_VLinearSum(ark_mem->ark_reltol, ark_mem->ark_tempv, ONE, 
+	       ark_mem->ark_Vabstol, ark_mem->ark_tempv);
+  if (N_VMin(ark_mem->ark_tempv) <= ZERO) return(-1);
+  N_VInv(ark_mem->ark_tempv, weight);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkRwtSetSS
+
+ This routine sets rwt as decribed above in the case tol_type = ARK_SS.
+ It tests for non-positive components before inverting. arkRwtSetSS
+ returns 0 if rwt is successfully set to a positive vector
+ and -1 otherwise. In the latter case, rwt is considered undefined.
+---------------------------------------------------------------*/
+static int arkRwtSetSS(ARKodeMem ark_mem, N_Vector My, N_Vector weight)
+{
+  N_VAbs(My, ark_mem->ark_tempv);
+  N_VScale(ark_mem->ark_reltol, ark_mem->ark_tempv, ark_mem->ark_tempv);
+  N_VAddConst(ark_mem->ark_tempv, ark_mem->ark_SRabstol, ark_mem->ark_tempv);
+  if (N_VMin(ark_mem->ark_tempv) <= ZERO) return(-1);
+  N_VInv(ark_mem->ark_tempv, weight);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkRwtSetSV
+
+ This routine sets rwt as decribed above in the case tol_type = ARK_SV.
+ It tests for non-positive components before inverting. arkRwtSetSV
+ returns 0 if rwt is successfully set to a positive vector
+ and -1 otherwise. In the latter case, rwt is considered undefined.
+---------------------------------------------------------------*/
+static int arkRwtSetSV(ARKodeMem ark_mem, N_Vector My, N_Vector weight)
+{
+  N_VAbs(My, ark_mem->ark_tempv);
+  N_VLinearSum(ark_mem->ark_reltol, ark_mem->ark_tempv, ONE, 
+	       ark_mem->ark_VRabstol, ark_mem->ark_tempv);
+  if (N_VMin(ark_mem->ark_tempv) <= ZERO) return(-1);
+  N_VInv(ark_mem->ark_tempv, weight);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkAdapt is the time step adaptivity wrapper function.  This 
+ should be called after arkCompleteStep, as it depends on the 
+ values updated by that routine.  It computes and sets the value 
+ of ark_eta inside ark_mem.
+---------------------------------------------------------------*/
+static int arkAdapt(ARKodeMem ark_mem)
+{
+  int ier;
+  realtype h_acc, h_cfl, safety, int_dir;
+  safety = ark_mem->ark_hadapt_safety;
+
+  /* Call algorithm-specific error adaptivity method */
+  switch (ark_mem->ark_hadapt_imethod) {
+  case(0):    /* PID controller */
+    ier = arkAdaptPID(ark_mem, &h_acc);
+    break;
+  case(1):    /* PI controller */
+    ier = arkAdaptPI(ark_mem, &h_acc);
+    break;
+  case(2):    /* I controller */
+    ier = arkAdaptI(ark_mem, &h_acc);
+    break;
+  case(3):    /* explicit Gustafsson controller */
+    ier = arkAdaptExpGus(ark_mem, &h_acc);
+    break;
+  case(4):    /* implicit Gustafsson controller */
+    ier = arkAdaptImpGus(ark_mem, &h_acc);
+    break;
+  case(5):    /* imex Gustafsson controller */
+    ier = arkAdaptImExGus(ark_mem, &h_acc);
+    break;
+  case(-1):   /* user-supplied controller */
+    ier = ark_mem->ark_hadapt(ark_mem->ark_ycur,
+			      ark_mem->ark_tn, 
+			      ark_mem->ark_hadapt_hhist[0], 
+			      ark_mem->ark_hadapt_hhist[1], 
+			      ark_mem->ark_hadapt_hhist[2], 
+			      ark_mem->ark_hadapt_ehist[0],
+			      ark_mem->ark_hadapt_ehist[1],
+			      ark_mem->ark_hadapt_ehist[2],
+			      ark_mem->ark_q, ark_mem->ark_p, 
+			      &h_acc, ark_mem->ark_hadapt_data);
+    break;
+  default:
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "arkAdapt", 
+		    "Illegal adapt_imethod.");
+    return (ARK_ILL_INPUT);
+  }
+  if (ier != ARK_SUCCESS) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "arkAdapt", 
+		    "Error in accuracy-based adaptivity function.");
+    return (ARK_ILL_INPUT);
+  }
+
+  /* determine direction of integration */
+  int_dir = ark_mem->ark_h / SUNRabs(ark_mem->ark_h);
+
+  /* Call explicit stability function */
+  ier = ark_mem->ark_expstab(ark_mem->ark_ycur, ark_mem->ark_tn,
+			     &h_cfl, ark_mem->ark_estab_data);
+  if (ier != ARK_SUCCESS) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", "arkAdapt", 
+		    "Error in explicit stability function.");
+    return (ARK_ILL_INPUT);
+  }
+  if (h_cfl <= 0.0)  h_cfl = RCONST(1.0e30) * SUNRabs(ark_mem->ark_h);
+
+  /* Solver diagnostics reporting */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "  adapt  %19.16g  %19.16g  %19.16g  %19.16g  %19.16g  %19.16g  %19.16g  %19.16g  ",
+	    ark_mem->ark_hadapt_ehist[0], ark_mem->ark_hadapt_ehist[1], 
+	    ark_mem->ark_hadapt_ehist[2], ark_mem->ark_hadapt_hhist[0], 
+	    ark_mem->ark_hadapt_hhist[1], ark_mem->ark_hadapt_hhist[2], h_acc, h_cfl);
+
+  /* enforce safety factors */
+  h_acc *= safety;
+  h_cfl *= ark_mem->ark_hadapt_cfl * int_dir;
+
+  /* enforce maximum bound on time step growth */
+  h_acc = int_dir * SUNMIN(SUNRabs(h_acc), SUNRabs(ark_mem->ark_etamax*ark_mem->ark_h));
+
+  /* enforce minimum bound time step reduction */
+  h_acc = int_dir * SUNMAX(SUNRabs(h_acc), SUNRabs(ETAMIN*ark_mem->ark_h));
+
+  /* Solver diagnostics reporting */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "%19.16g  %19.16g  ", h_acc, h_cfl);
+
+  /* increment the relevant step counter, set desired step */
+  if (SUNRabs(h_acc) < SUNRabs(h_cfl))
+    ark_mem->ark_nst_acc++;
+  else
+    ark_mem->ark_nst_exp++;
+  h_acc = int_dir * SUNMIN(SUNRabs(h_acc), SUNRabs(h_cfl));
+
+  /* enforce adaptivity bounds to retain Jacobian/preconditioner accuracy */
+  if ( (SUNRabs(h_acc) > SUNRabs(ark_mem->ark_h*ark_mem->ark_hadapt_lbound*ONEMSM)) &&
+       (SUNRabs(h_acc) < SUNRabs(ark_mem->ark_h*ark_mem->ark_hadapt_ubound*ONEPSM)) )
+    h_acc = ark_mem->ark_h;
+
+  /* set basic value of ark_eta */
+  ark_mem->ark_eta = h_acc / ark_mem->ark_h;
+
+  /* enforce minimum time step size */
+  ark_mem->ark_eta = SUNMAX(ark_mem->ark_eta,
+			 ark_mem->ark_hmin / SUNRabs(ark_mem->ark_h));
+
+  /* enforce maximum time step size */
+  ark_mem->ark_eta /= SUNMAX(ONE, SUNRabs(ark_mem->ark_h) *
+			  ark_mem->ark_hmax_inv*ark_mem->ark_eta);
+
+  /* Solver diagnostics reporting */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "%19.16g\n", ark_mem->ark_eta);
+
+  return(ier);
+}
+
+
+/*---------------------------------------------------------------
+ arkAdaptPID implements a PID time step control algorithm.
+---------------------------------------------------------------*/
+static int arkAdaptPID(ARKodeMem ark_mem, realtype *hnew)
+{
+  realtype k, k1, k2, k3, e1, e2, e3, hcur, h_acc;
+
+  /* set usable time-step adaptivity parameters */
+  k = (ark_mem->ark_hadapt_pq) ? ark_mem->ark_q : ark_mem->ark_p;
+  k1 = -ark_mem->ark_hadapt_k1 / k;
+  k2 =  ark_mem->ark_hadapt_k2 / k;
+  k3 = -ark_mem->ark_hadapt_k3 / k;
+  e1 = SUNMAX(ark_mem->ark_hadapt_ehist[0], TINY);
+  e2 = SUNMAX(ark_mem->ark_hadapt_ehist[1], TINY);
+  e3 = SUNMAX(ark_mem->ark_hadapt_ehist[2], TINY);
+  hcur = ark_mem->ark_h;
+  
+  /* compute estimated optimal time step size, set into output */
+  h_acc = hcur * SUNRpowerR(e1,k1) * SUNRpowerR(e2,k2) * SUNRpowerR(e3,k3);
+  *hnew = h_acc;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkAdaptPI implements a PI time step control algorithm.
+---------------------------------------------------------------*/
+static int arkAdaptPI(ARKodeMem ark_mem, realtype *hnew)
+{
+  realtype k, k1, k2, e1, e2, hcur, h_acc;
+
+  /* set usable time-step adaptivity parameters */
+  k = (ark_mem->ark_hadapt_pq) ? ark_mem->ark_q : ark_mem->ark_p;
+  k1 = -ark_mem->ark_hadapt_k1 / k;
+  k2 =  ark_mem->ark_hadapt_k2 / k;
+  e1 = SUNMAX(ark_mem->ark_hadapt_ehist[0], TINY);
+  e2 = SUNMAX(ark_mem->ark_hadapt_ehist[1], TINY);
+  hcur = ark_mem->ark_h;
+  
+  /* compute estimated optimal time step size, set into output */
+  h_acc = hcur * SUNRpowerR(e1,k1) * SUNRpowerR(e2,k2);
+  *hnew = h_acc;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkAdaptI implements an I time step control algorithm.
+---------------------------------------------------------------*/
+static int arkAdaptI(ARKodeMem ark_mem, realtype *hnew)
+{
+  realtype k, k1, e1, hcur, h_acc;
+
+  /* set usable time-step adaptivity parameters */
+  k = (ark_mem->ark_hadapt_pq) ? ark_mem->ark_q : ark_mem->ark_p;
+  k1 = -ark_mem->ark_hadapt_k1 / k;
+  e1 = SUNMAX(ark_mem->ark_hadapt_ehist[0], TINY);
+  hcur = ark_mem->ark_h;
+  
+  /* compute estimated optimal time step size, set into output */
+  h_acc = hcur * SUNRpowerR(e1,k1);
+  *hnew = h_acc;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkAdaptExpGus implements the explicit Gustafsson time step
+ control algorithm.
+---------------------------------------------------------------*/
+static int arkAdaptExpGus(ARKodeMem ark_mem, realtype *hnew)
+{
+  realtype k, k1, k2, e1, e2, hcur, h_acc;
+  k = (ark_mem->ark_hadapt_pq) ? ark_mem->ark_q : ark_mem->ark_p;
+
+  /* modified method for first step */
+  if (ark_mem->ark_nst < 2) {
+
+    k1 = -ONE / k;
+    hcur = ark_mem->ark_h;
+    e1 = SUNMAX(ark_mem->ark_hadapt_ehist[0], TINY);
+    h_acc = hcur * SUNRpowerR(e1,k1);
+
+  /* general estimate */
+  } else {
+
+    k1 = -ark_mem->ark_hadapt_k1 / k;
+    k2 = -ark_mem->ark_hadapt_k2 / k;
+    e1 = SUNMAX(ark_mem->ark_hadapt_ehist[0], TINY);
+    e2 = e1 / SUNMAX(ark_mem->ark_hadapt_ehist[1], TINY);
+    hcur = ark_mem->ark_h;
+    h_acc = hcur * SUNRpowerR(e1,k1) * SUNRpowerR(e2,k2);
+
+  }
+  *hnew = h_acc;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkAdaptImpGus implements the implicit Gustafsson time step 
+ control algorithm.
+---------------------------------------------------------------*/
+static int arkAdaptImpGus(ARKodeMem ark_mem, realtype *hnew)
+{
+  realtype k, k1, k2, e1, e2, hcur, hrat, h_acc;
+  k = (ark_mem->ark_hadapt_pq) ? ark_mem->ark_q : ark_mem->ark_p;
+
+  /* modified method for first step */
+  if (ark_mem->ark_nst < 2) {
+
+    k1 = -ONE / k;
+    hcur = ark_mem->ark_h;
+    e1 = SUNMAX(ark_mem->ark_hadapt_ehist[0], TINY);
+    h_acc = hcur * SUNRpowerR(e1,k1);
+
+  /* general estimate */
+  } else {
+
+    k1 = -ark_mem->ark_hadapt_k1 / k;
+    k2 = -ark_mem->ark_hadapt_k2 / k;
+    e1 = SUNMAX(ark_mem->ark_hadapt_ehist[0], TINY);
+    e2 = e1 / SUNMAX(ark_mem->ark_hadapt_ehist[1], TINY);
+    hcur = ark_mem->ark_hadapt_hhist[0];
+    hrat = hcur / ark_mem->ark_hadapt_hhist[1];
+    h_acc = hcur * hrat * SUNRpowerR(e1,k1) * SUNRpowerR(e2,k2);
+
+  }
+  *hnew = h_acc;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkAdaptImExGus implements a combination implicit/explicit 
+ Gustafsson time step control algorithm.
+---------------------------------------------------------------*/
+static int arkAdaptImExGus(ARKodeMem ark_mem, realtype *hnew)
+{
+  realtype k, k1, k2, k3, e1, e2, hcur, hrat, h_acc;
+  k = (ark_mem->ark_hadapt_pq) ? ark_mem->ark_q : ark_mem->ark_p;
+
+  /* modified method for first step */
+  if (ark_mem->ark_nst < 2) {
+
+    k1 = -ONE / k;
+    hcur = ark_mem->ark_h;
+    e1 = SUNMAX(ark_mem->ark_hadapt_ehist[0], TINY);
+    h_acc = hcur * SUNRpowerR(e1,k1);
+
+  /* general estimate */
+  } else {
+
+    k1 = -ark_mem->ark_hadapt_k1 / k;
+    k2 = -ark_mem->ark_hadapt_k2 / k;
+    k3 = -ark_mem->ark_hadapt_k3 / k;
+    e1 = SUNMAX(ark_mem->ark_hadapt_ehist[0], TINY);
+    e2 = e1 / SUNMAX(ark_mem->ark_hadapt_ehist[1], TINY);
+    hcur = ark_mem->ark_hadapt_hhist[0];
+    hrat = hcur / ark_mem->ark_hadapt_hhist[1];
+    /* implicit estimate */
+    h_acc = hcur * hrat * SUNRpowerR(e1,k3) * SUNRpowerR(e2,k3);
+    /* explicit estimate */
+    h_acc = SUNMIN(h_acc, hcur * SUNRpowerR(e1,k1) * SUNRpowerR(e2,k2));
+
+  }
+  *hnew = h_acc;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkExpStab is the default explicit stability estimation function
+---------------------------------------------------------------*/
+int arkExpStab(N_Vector y, realtype t, realtype *hstab, void *data)
+{
+  /* explicit stability not used by default, 
+     set to zero to disable */
+  *hstab = RCONST(0.0);
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkProcessError is a high level error handling function
+ - if ark_mem==NULL it prints the error message to stderr
+ - otherwise, it sets-up and calls the error handling function 
+   pointed to by ark_ehfun 
+---------------------------------------------------------------*/
+void arkProcessError(ARKodeMem ark_mem, int error_code, 
+		     const char *module, const char *fname, 
+		     const char *msgfmt, ...)
+{
+  va_list ap;
+  char msg[256];
+
+  /* Initialize the argument pointer variable 
+     (msgfmt is the last required argument to arkProcessError) */
+  va_start(ap, msgfmt);
+
+  /* Compose the message */
+  vsprintf(msg, msgfmt, ap);
+
+  if (ark_mem == NULL) {    /* We write to stderr */
+
+#ifndef NO_FPRINTF_OUTPUT
+    fprintf(stderr, "\n[%s ERROR]  %s\n  ", module, fname);
+    fprintf(stderr, "%s\n\n", msg);
+#endif
+
+  } else {                 /* We can call ehfun */
+    ark_mem->ark_ehfun(error_code, module, fname, msg, 
+		       ark_mem->ark_eh_data);
+  }
+
+  /* Finalize argument processing */
+  va_end(ap);
+
+  return;
+}
+
+
+/*---------------------------------------------------------------
+ arkRootCheck1
+
+ This routine completes the initialization of rootfinding memory
+ information, and checks whether g has a zero both at and very near
+ the initial point of the IVP.
+
+ This routine returns an int equal to:
+  ARK_RTFUNC_FAIL < 0  if the g function failed, or
+  ARK_SUCCESS     = 0  otherwise.
+---------------------------------------------------------------*/
+static int arkRootCheck1(ARKodeMem ark_mem)
+{
+  int i, retval;
+  realtype smallh, hratio, tplus;
+  booleantype zroot;
+
+  for (i = 0; i < ark_mem->ark_nrtfn; i++) 
+    ark_mem->ark_iroots[i] = 0;
+  ark_mem->ark_tlo = ark_mem->ark_tn;
+  ark_mem->ark_ttol = (SUNRabs(ark_mem->ark_tn) +
+		       SUNRabs(ark_mem->ark_h))*ark_mem->ark_uround*HUND;
+
+  /* Evaluate g at initial t and check for zero values. */
+  retval = ark_mem->ark_gfun(ark_mem->ark_tlo, ark_mem->ark_ycur,
+			     ark_mem->ark_glo, ark_mem->ark_user_data);
+  ark_mem->ark_nge = 1;
+  if (retval != 0) return(ARK_RTFUNC_FAIL);
+
+  zroot = FALSE;
+  for (i = 0; i < ark_mem->ark_nrtfn; i++) {
+    if (SUNRabs(ark_mem->ark_glo[i]) == ZERO) {
+      zroot = TRUE;
+      ark_mem->ark_gactive[i] = FALSE;
+    }
+  }
+  if (!zroot) return(ARK_SUCCESS);
+
+  /* Some g_i is zero at t0; look at g at t0+(small increment). */
+  hratio = SUNMAX(ark_mem->ark_ttol/SUNRabs(ark_mem->ark_h), TENTH);
+  smallh = hratio*ark_mem->ark_h;
+  tplus = ark_mem->ark_tlo + smallh;
+  N_VLinearSum(ONE, ark_mem->ark_ycur, smallh,
+	       ark_mem->ark_fold, ark_mem->ark_y);
+  retval = ark_mem->ark_gfun(tplus, ark_mem->ark_y, ark_mem->ark_ghi, 
+			     ark_mem->ark_user_data);
+  ark_mem->ark_nge++;
+  if (retval != 0) return(ARK_RTFUNC_FAIL);
+
+  /* We check now only the components of g which were exactly 0.0 at t0
+   * to see if we can 'activate' them. */
+  for (i = 0; i < ark_mem->ark_nrtfn; i++) {
+    if (!ark_mem->ark_gactive[i] && SUNRabs(ark_mem->ark_ghi[i]) != ZERO) {
+      ark_mem->ark_gactive[i] = TRUE;
+      ark_mem->ark_glo[i] = ark_mem->ark_ghi[i];
+    }
+  }
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkRootCheck2
+
+ This routine checks for exact zeros of g at the last root found,
+ if the last return was a root.  It then checks for a close pair of
+ zeros (an error condition), and for a new root at a nearby point.
+ The array glo = g(tlo) at the left endpoint of the search interval
+ is adjusted if necessary to assure that all g_i are nonzero
+ there, before returning to do a root search in the interval.
+
+ On entry, tlo = tretlast is the last value of tret returned by
+ ARKode.  This may be the previous tn, the previous tout value, or
+ the last root location.
+
+ This routine returns an int equal to:
+      ARK_RTFUNC_FAIL < 0 if the g function failed, or
+      CLOSERT         = 3 if a close pair of zeros was found, or
+      RTFOUND         = 1 if a new zero of g was found near tlo, or
+      ARK_SUCCESS     = 0 otherwise.
+---------------------------------------------------------------*/
+static int arkRootCheck2(ARKodeMem ark_mem)
+{
+  int i, retval;
+  /* realtype smallh, hratio, tplus; */
+  realtype smallh, tplus;
+  booleantype zroot;
+
+  /* return if no roots in previous step */
+  if (ark_mem->ark_irfnd == 0) return(ARK_SUCCESS);
+
+  /* Set ark_y = y(tlo) */
+  (void) ARKodeGetDky(ark_mem, ark_mem->ark_tlo, 0, ark_mem->ark_y);
+
+  /* Evaluate root-finding function: glo = g(tlo, y(tlo)) */
+  retval = ark_mem->ark_gfun(ark_mem->ark_tlo, ark_mem->ark_y, 
+			     ark_mem->ark_glo, ark_mem->ark_user_data);
+  ark_mem->ark_nge++;
+  if (retval != 0) return(ARK_RTFUNC_FAIL);
+
+  /* reset root-finding flags (overall, and for specific eqns) */
+  zroot = FALSE;
+  for (i = 0; i < ark_mem->ark_nrtfn; i++) 
+    ark_mem->ark_iroots[i] = 0;
+
+  /* for all active roots, check if glo_i == 0 to mark roots found */
+  for (i = 0; i < ark_mem->ark_nrtfn; i++) {
+    if (!ark_mem->ark_gactive[i]) continue;
+    if (SUNRabs(ark_mem->ark_glo[i]) == ZERO) {
+      zroot = TRUE;
+      ark_mem->ark_iroots[i] = 1;
+    }
+  }
+  if (!zroot) return(ARK_SUCCESS);  /* return if no roots */
+
+  /* One or more g_i has a zero at tlo.  Check g at tlo+smallh. */
+  /*     set time tolerance */
+  ark_mem->ark_ttol = (SUNRabs(ark_mem->ark_tn) +
+		       SUNRabs(ark_mem->ark_h))*ark_mem->ark_uround*HUND;
+  /*     set tplus = tlo + smallh */
+  smallh = (ark_mem->ark_h > ZERO) ? ark_mem->ark_ttol : -ark_mem->ark_ttol;
+  tplus = ark_mem->ark_tlo + smallh;
+  /*     update ark_y with small explicit Euler step (if tplus is past tn) */
+  if ( (tplus - ark_mem->ark_tn)*ark_mem->ark_h >= ZERO ) {
+    /* hratio = smallh/ark_mem->ark_h; */
+    N_VLinearSum(ONE, ark_mem->ark_y, smallh, 
+		 ark_mem->ark_fold, ark_mem->ark_y);
+  } else {
+    /*   set ark_y = y(tplus) via interpolation */
+    (void) ARKodeGetDky(ark_mem, tplus, 0, ark_mem->ark_y);
+  }
+  /*     set ghi = g(tplus,y(tplus)) */
+  retval = ark_mem->ark_gfun(tplus, ark_mem->ark_y, ark_mem->ark_ghi, 
+			     ark_mem->ark_user_data);
+  ark_mem->ark_nge++;
+  if (retval != 0) return(ARK_RTFUNC_FAIL);
+
+  /* Check for close roots (error return), for a new zero at tlo+smallh,
+  and for a g_i that changed from zero to nonzero. */
+  zroot = FALSE;
+  for (i = 0; i < ark_mem->ark_nrtfn; i++) {
+    if (!ark_mem->ark_gactive[i]) continue;
+    if (SUNRabs(ark_mem->ark_ghi[i]) == ZERO) {
+      if (ark_mem->ark_iroots[i] == 1) return(CLOSERT);
+      zroot = TRUE;
+      ark_mem->ark_iroots[i] = 1;
+    } else {
+      if (ark_mem->ark_iroots[i] == 1) 
+	ark_mem->ark_glo[i] = ark_mem->ark_ghi[i];
+    }
+  }
+  if (zroot) return(RTFOUND);
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkRootCheck3
+
+ This routine interfaces to arkRootfind to look for a root of g
+ between tlo and either tn or tout, whichever comes first.
+ Only roots beyond tlo in the direction of integration are sought.
+
+ This routine returns an int equal to:
+      ARK_RTFUNC_FAIL < 0 if the g function failed, or
+      RTFOUND         = 1 if a root of g was found, or
+      ARK_SUCCESS     = 0 otherwise.
+---------------------------------------------------------------*/
+static int arkRootCheck3(ARKodeMem ark_mem)
+{
+  int i, retval, ier;
+
+  /* Set thi = tn or tout, whichever comes first; set y = y(thi). */
+  if (ark_mem->ark_taskc == ARK_ONE_STEP) {
+    ark_mem->ark_thi = ark_mem->ark_tn;
+    N_VScale(ONE, ark_mem->ark_ycur, ark_mem->ark_y);
+  }
+  if (ark_mem->ark_taskc == ARK_NORMAL) {
+    if ( (ark_mem->ark_toutc - ark_mem->ark_tn)*ark_mem->ark_h >= ZERO) {
+      ark_mem->ark_thi = ark_mem->ark_tn; 
+      N_VScale(ONE, ark_mem->ark_ycur, ark_mem->ark_y);
+    } else {
+      ark_mem->ark_thi = ark_mem->ark_toutc;
+      (void) ARKodeGetDky(ark_mem, ark_mem->ark_thi, 0, ark_mem->ark_y);
+    }
+  }
+
+  /* Set ark_mem->ark_ghi = g(thi) and call arkRootfind to search (tlo,thi) for roots. */
+  retval = ark_mem->ark_gfun(ark_mem->ark_thi, ark_mem->ark_y, 
+			     ark_mem->ark_ghi, ark_mem->ark_user_data);
+  ark_mem->ark_nge++;
+  if (retval != 0) return(ARK_RTFUNC_FAIL);
+
+  ark_mem->ark_ttol = (SUNRabs(ark_mem->ark_tn) +
+		       SUNRabs(ark_mem->ark_h))*ark_mem->ark_uround*HUND;
+  ier = arkRootfind(ark_mem);
+  if (ier == ARK_RTFUNC_FAIL) return(ARK_RTFUNC_FAIL);
+  for(i=0; i<ark_mem->ark_nrtfn; i++) {
+    if (!ark_mem->ark_gactive[i] && ark_mem->ark_grout[i] != ZERO) 
+      ark_mem->ark_gactive[i] = TRUE;
+  }
+  ark_mem->ark_tlo = ark_mem->ark_trout;
+  for (i = 0; i < ark_mem->ark_nrtfn; i++) 
+    ark_mem->ark_glo[i] = ark_mem->ark_grout[i];
+
+  /* If no root found, return ARK_SUCCESS. */  
+  if (ier == ARK_SUCCESS) return(ARK_SUCCESS);
+
+  /* If a root was found, interpolate to get y(trout) and return.  */
+  (void) ARKodeGetDky(ark_mem, ark_mem->ark_trout, 0, ark_mem->ark_y);
+  return(RTFOUND);
+
+}
+
+
+/*---------------------------------------------------------------
+ arkRootfind
+
+ This routine solves for a root of g(t) between tlo and thi, if
+ one exists.  Only roots of odd multiplicity (i.e. with a change
+ of sign in one of the g_i), or exact zeros, are found.
+ Here the sign of tlo - thi is arbitrary, but if multiple roots
+ are found, the one closest to tlo is returned.
+
+ The method used is the Illinois algorithm, a modified secant method.
+ Reference: Kathie L. Hiebert and Lawrence F. Shampine, Implicitly
+ Defined Output Points for Solutions of ODEs, Sandia National
+ Laboratory Report SAND80-0180, February 1980.
+
+ This routine uses the following parameters for communication:
+
+ nrtfn    = number of functions g_i, or number of components of
+            the vector-valued function g(t).  Input only.
+
+ gfun     = user-defined function for g(t).  Its form is
+            (void) gfun(t, y, gt, user_data)
+
+ rootdir  = in array specifying the direction of zero-crossings.
+            If rootdir[i] > 0, search for roots of g_i only if
+            g_i is increasing; if rootdir[i] < 0, search for
+            roots of g_i only if g_i is decreasing; otherwise
+            always search for roots of g_i.
+
+ gactive  = array specifying whether a component of g should
+            or should not be monitored. gactive[i] is initially
+            set to TRUE for all i=0,...,nrtfn-1, but it may be
+            reset to FALSE if at the first step g[i] is 0.0
+            both at the I.C. and at a small perturbation of them.
+            gactive[i] is then set back on TRUE only after the 
+            corresponding g function moves away from 0.0.
+
+ nge      = cumulative counter for gfun calls.
+
+ ttol     = a convergence tolerance for trout.  Input only.
+            When a root at trout is found, it is located only to
+            within a tolerance of ttol.  Typically, ttol should
+            be set to a value on the order of
+               100 * UROUND * max (SUNRabs(tlo), SUNRabs(thi))
+            where UROUND is the unit roundoff of the machine.
+
+ tlo, thi = endpoints of the interval in which roots are sought.
+            On input, and must be distinct, but tlo - thi may
+            be of either sign.  The direction of integration is
+            assumed to be from tlo to thi.  On return, tlo and thi
+            are the endpoints of the final relevant interval.
+
+ glo, ghi = arrays of length nrtfn containing the vectors g(tlo)
+            and g(thi) respectively.  Input and output.  On input,
+            none of the glo[i] should be zero.
+
+ trout    = root location, if a root was found, or thi if not.
+            Output only.  If a root was found other than an exact
+            zero of g, trout is the endpoint thi of the final
+            interval bracketing the root, with size at most ttol.
+
+ grout    = array of length nrtfn containing g(trout) on return.
+
+ iroots   = int array of length nrtfn with root information.
+            Output only.  If a root was found, iroots indicates
+            which components g_i have a root at trout.  For
+            i = 0, ..., nrtfn-1, iroots[i] = 1 if g_i has a root
+            and g_i is increasing, iroots[i] = -1 if g_i has a
+            root and g_i is decreasing, and iroots[i] = 0 if g_i
+            has no roots or g_i varies in the direction opposite
+            to that indicated by rootdir[i].
+
+ This routine returns an int equal to:
+      ARK_RTFUNC_FAIL < 0 if the g function failed, or
+      RTFOUND         = 1 if a root of g was found, or
+      ARK_SUCCESS     = 0 otherwise.
+---------------------------------------------------------------*/
+static int arkRootfind(ARKodeMem ark_mem)
+{
+  realtype alpha, tmid, gfrac, maxfrac, fracint, fracsub;
+  int i, retval, imax, side, sideprev;
+  booleantype zroot, sgnchg;
+
+  imax = 0;
+
+  /* First check for change in sign in ghi or for a zero in ghi. */
+  maxfrac = ZERO;
+  zroot = FALSE;
+  sgnchg = FALSE;
+  for (i = 0;  i < ark_mem->ark_nrtfn; i++) {
+    if (!ark_mem->ark_gactive[i]) continue;
+    if (SUNRabs(ark_mem->ark_ghi[i]) == ZERO) {
+      if (ark_mem->ark_rootdir[i]*ark_mem->ark_glo[i] <= ZERO) {
+        zroot = TRUE;
+      }
+    } else {
+      if ( (ark_mem->ark_glo[i]*ark_mem->ark_ghi[i] < ZERO) && 
+	   (ark_mem->ark_rootdir[i]*ark_mem->ark_glo[i] <= ZERO) ) {
+        gfrac = SUNRabs(ark_mem->ark_ghi[i]/(ark_mem->ark_ghi[i] - ark_mem->ark_glo[i]));
+        if (gfrac > maxfrac) {
+          sgnchg = TRUE;
+          maxfrac = gfrac;
+          imax = i;
+        }
+      }
+    }
+  }
+
+  /* If no sign change was found, reset trout and grout.  Then return
+     ARK_SUCCESS if no zero was found, or set iroots and return RTFOUND.  */ 
+  if (!sgnchg) {
+    ark_mem->ark_trout = ark_mem->ark_thi;
+    for (i = 0; i < ark_mem->ark_nrtfn; i++) 
+      ark_mem->ark_grout[i] = ark_mem->ark_ghi[i];
+    if (!zroot) return(ARK_SUCCESS);
+    for (i = 0; i < ark_mem->ark_nrtfn; i++) {
+      ark_mem->ark_iroots[i] = 0;
+      if (!ark_mem->ark_gactive[i]) continue;
+      if (SUNRabs(ark_mem->ark_ghi[i]) == ZERO)
+	ark_mem->ark_iroots[i] = ark_mem->ark_glo[i] > 0 ? -1:1;
+    }
+    return(RTFOUND);
+  }
+
+  /* Initialize alpha to avoid compiler warning */
+  alpha = ONE;
+
+  /* A sign change was found.  Loop to locate nearest root. */
+  side = 0;  sideprev = -1;
+  for(;;) {                                    /* Looping point */
+
+    /* If interval size is already less than tolerance ttol, break. */
+    if (SUNRabs(ark_mem->ark_thi - ark_mem->ark_tlo) <= ark_mem->ark_ttol) break;
+    
+    /* Set weight alpha.
+       On the first two passes, set alpha = 1.  Thereafter, reset alpha
+       according to the side (low vs high) of the subinterval in which
+       the sign change was found in the previous two passes.
+       If the sides were opposite, set alpha = 1.
+       If the sides were the same, then double alpha (if high side),
+       or halve alpha (if low side).
+       The next guess tmid is the secant method value if alpha = 1, but
+       is closer to tlo if alpha < 1, and closer to thi if alpha > 1.    */
+    if (sideprev == side) {
+      alpha = (side == 2) ? alpha*TWO : alpha*HALF;
+    } else {
+      alpha = ONE;
+    }
+
+    /* Set next root approximation tmid and get g(tmid).
+       If tmid is too close to tlo or thi, adjust it inward,
+       by a fractional distance that is between 0.1 and 0.5.  */
+    tmid = ark_mem->ark_thi - (ark_mem->ark_thi - ark_mem->ark_tlo) *
+      ark_mem->ark_ghi[imax]/(ark_mem->ark_ghi[imax] - alpha*ark_mem->ark_glo[imax]);
+    if (SUNRabs(tmid - ark_mem->ark_tlo) < HALF*ark_mem->ark_ttol) {
+      fracint = SUNRabs(ark_mem->ark_thi - ark_mem->ark_tlo)/ark_mem->ark_ttol;
+      fracsub = (fracint > FIVE) ? TENTH : HALF/fracint;
+      tmid = ark_mem->ark_tlo + fracsub*(ark_mem->ark_thi - ark_mem->ark_tlo);
+    }
+    if (SUNRabs(ark_mem->ark_thi - tmid) < HALF*ark_mem->ark_ttol) {
+      fracint = SUNRabs(ark_mem->ark_thi - ark_mem->ark_tlo)/ark_mem->ark_ttol;
+      fracsub = (fracint > FIVE) ? TENTH : HALF/fracint;
+      tmid = ark_mem->ark_thi - fracsub*(ark_mem->ark_thi - ark_mem->ark_tlo);
+    }
+
+    (void) ARKodeGetDky(ark_mem, tmid, 0, ark_mem->ark_y);
+    retval = ark_mem->ark_gfun(tmid, ark_mem->ark_y, ark_mem->ark_grout, 
+			       ark_mem->ark_user_data);
+    ark_mem->ark_nge++;
+    if (retval != 0) return(ARK_RTFUNC_FAIL);
+
+    /* Check to see in which subinterval g changes sign, and reset imax.
+       Set side = 1 if sign change is on low side, or 2 if on high side.  */  
+    maxfrac = ZERO;
+    zroot = FALSE;
+    sgnchg = FALSE;
+    sideprev = side;
+    for (i = 0;  i < ark_mem->ark_nrtfn; i++) {
+      if (!ark_mem->ark_gactive[i]) continue;
+      if (SUNRabs(ark_mem->ark_grout[i]) == ZERO) {
+        if (ark_mem->ark_rootdir[i]*ark_mem->ark_glo[i] <= ZERO) {
+          zroot = TRUE;
+        }
+      } else {
+        if ( (ark_mem->ark_glo[i]*ark_mem->ark_grout[i] < ZERO) && 
+	     (ark_mem->ark_rootdir[i]*ark_mem->ark_glo[i] <= ZERO) ) {
+          gfrac = SUNRabs(ark_mem->ark_grout[i]/(ark_mem->ark_grout[i] - ark_mem->ark_glo[i]));
+          if (gfrac > maxfrac) {
+            sgnchg = TRUE;
+            maxfrac = gfrac;
+            imax = i;
+          }
+        }
+      }
+    }
+    if (sgnchg) {
+      /* Sign change found in (tlo,tmid); replace thi with tmid. */
+      ark_mem->ark_thi = tmid;
+      for (i = 0; i < ark_mem->ark_nrtfn; i++) 
+	ark_mem->ark_ghi[i] = ark_mem->ark_grout[i];
+      side = 1;
+      /* Stop at root thi if converged; otherwise loop. */
+      if (SUNRabs(ark_mem->ark_thi - ark_mem->ark_tlo) <= ark_mem->ark_ttol) break;
+      continue;  /* Return to looping point. */
+    }
+
+    if (zroot) {
+      /* No sign change in (tlo,tmid), but g = 0 at tmid; return root tmid. */
+      ark_mem->ark_thi = tmid;
+      for (i = 0; i < ark_mem->ark_nrtfn; i++) 
+	ark_mem->ark_ghi[i] = ark_mem->ark_grout[i];
+      break;
+    }
+
+    /* No sign change in (tlo,tmid), and no zero at tmid.
+       Sign change must be in (tmid,thi).  Replace tlo with tmid. */
+    ark_mem->ark_tlo = tmid;
+    for (i = 0; i < ark_mem->ark_nrtfn; i++) 
+      ark_mem->ark_glo[i] = ark_mem->ark_grout[i];
+    side = 2;
+    /* Stop at root thi if converged; otherwise loop back. */
+    if (SUNRabs(ark_mem->ark_thi - ark_mem->ark_tlo) <= ark_mem->ark_ttol)
+      break;
+
+  } /* End of root-search loop */
+
+  /* Reset trout and grout, set iroots, and return RTFOUND. */
+  ark_mem->ark_trout = ark_mem->ark_thi;
+  for (i = 0; i < ark_mem->ark_nrtfn; i++) {
+    ark_mem->ark_grout[i] = ark_mem->ark_ghi[i];
+    ark_mem->ark_iroots[i] = 0;
+    if (!ark_mem->ark_gactive[i]) continue;
+    if ( (SUNRabs(ark_mem->ark_ghi[i]) == ZERO) &&
+	 (ark_mem->ark_rootdir[i]*ark_mem->ark_glo[i] <= ZERO) ) 
+      ark_mem->ark_iroots[i] = ark_mem->ark_glo[i] > 0 ? -1:1;
+    if ( (ark_mem->ark_glo[i]*ark_mem->ark_ghi[i] < ZERO) && 
+	 (ark_mem->ark_rootdir[i]*ark_mem->ark_glo[i] <= ZERO) ) 
+      ark_mem->ark_iroots[i] = ark_mem->ark_glo[i] > 0 ? -1:1;
+  }
+  return(RTFOUND);
+}
+
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/arkode_band.c b/src/arkode/arkode_band.c
new file mode 100644
index 0000000..603a66a
--- /dev/null
+++ b/src/arkode/arkode_band.c
@@ -0,0 +1,637 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for the ARKBAND linear solver.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <arkode/arkode_band.h>
+#include "arkode_direct_impl.h"
+#include "arkode_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* ARKBAND linit, lsetup, lsolve, and lfree routines */
+static int arkBandInit(ARKodeMem ark_mem);
+static int arkBandSetup(ARKodeMem ark_mem, int convfail, N_Vector ypred,
+                       N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                       N_Vector vtemp2, N_Vector vtemp3);
+static int arkBandSolve(ARKodeMem ark_mem, N_Vector b, N_Vector weight,
+                       N_Vector ycur, N_Vector fcur);
+static int arkBandFree(ARKodeMem ark_mem);
+
+/* ARKBAND minit, msetup, msolve, mfree and mtimes routines */
+static int arkMassBandInit(ARKodeMem ark_mem);
+static int arkMassBandSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			    N_Vector vtemp2, N_Vector vtemp3);
+static int arkMassBandSolve(ARKodeMem ark_mem, N_Vector b, N_Vector weight);
+static int arkMassBandFree(ARKodeMem ark_mem);
+static int arkMassBandMultiply(N_Vector v, N_Vector Mv, 
+			       realtype t, void *user_data);
+
+
+/*---------------------------------------------------------------
+ ARKBand:
+
+ This routine initializes the memory record and sets various function
+ fields specific to the band linear solver module.  ARKBand first calls
+ the existing lfree routine if this is not NULL.  It then sets the
+ ark_linit, ark_lsetup, ark_lsolve, and ark_lfree fields in (*arkode_mem)
+ to be arkBandInit, arkBandSetup, arkBandSolve, and arkBandFree,
+ respectively.  It allocates memory for a structure of type
+ ARKDlsMemRec and sets the ark_lmem field in (*arkode_mem) to the
+ address of this structure.  It sets setupNonNull in (*arkode_mem) to be
+ TRUE, d_mu to be mupper, d_ml to be mlower, and the d_jac field to be 
+ arkDlsBandDQJac.  Finally, it allocates memory for M, savedJ, and pivot.  
+ The ARKBand return value is SUCCESS = 0, LMEM_FAIL = -1, or 
+ LIN_ILL_INPUT = -2.
+
+ NOTE: The band linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKBand will first 
+       test for compatible a compatible N_Vector internal
+       representation by checking that the function 
+       N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+int ARKBand(void *arkode_mem, long int N, long int mupper, long int mlower)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKBAND", "ARKBand", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKBAND", "ARKBand", MSGD_BAD_NVECTOR);
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree != NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem */  
+  ark_mem->ark_linit  = arkBandInit;
+  ark_mem->ark_lsetup = arkBandSetup;
+  ark_mem->ark_lsolve = arkBandSolve;
+  ark_mem->ark_lfree  = arkBandFree;
+  ark_mem->ark_lsolve_type = 2;
+  
+  /* Get memory for ARKDlsMemRec */
+  arkdls_mem = NULL;
+  arkdls_mem = (ARKDlsMem) malloc(sizeof(struct ARKDlsMemRec));
+  if (arkdls_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKBAND", "ARKBand", MSGD_MEM_FAIL);
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  arkdls_mem->d_type = SUNDIALS_BAND;
+  
+  /* Initialize Jacobian-related data */
+  arkdls_mem->d_jacDQ = TRUE;
+  arkdls_mem->d_bjac = NULL;
+  arkdls_mem->d_J_data = NULL;
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  ark_mem->ark_setupNonNull = TRUE;
+
+  /* Initialize counters */
+  arkDlsInitializeCounters(arkdls_mem);
+  
+  /* Load problem dimension */
+  arkdls_mem->d_n = N;
+
+  /* Load half-bandwiths in arkdls_mem */
+  arkdls_mem->d_ml = mlower;
+  arkdls_mem->d_mu = mupper;
+
+  /* Test ml and mu for legality */
+  if ((arkdls_mem->d_ml < 0) || (arkdls_mem->d_mu < 0) || (arkdls_mem->d_ml >= N) || (arkdls_mem->d_mu >= N)) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKBAND", "ARKBand", MSGD_BAD_SIZES);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  arkdls_mem->d_smu = SUNMIN(N-1, arkdls_mem->d_mu + arkdls_mem->d_ml);
+
+  /* Allocate memory for M, savedJ, and pivot arrays */
+  arkdls_mem->d_M = NULL;
+  arkdls_mem->d_M = NewBandMat(N, arkdls_mem->d_mu, arkdls_mem->d_ml, arkdls_mem->d_smu);
+  if (arkdls_mem->d_M == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKBAND", "ARKBand", MSGD_MEM_FAIL);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_savedJ = NULL;
+  arkdls_mem->d_savedJ = NewBandMat(N, arkdls_mem->d_mu, arkdls_mem->d_ml, arkdls_mem->d_mu);
+  if (arkdls_mem->d_savedJ == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKBAND", "ARKBand", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_lpivots = NULL;
+  arkdls_mem->d_lpivots = NewLintArray(N);
+  if (arkdls_mem->d_lpivots == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKBAND", "ARKBand", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    DestroyMat(arkdls_mem->d_savedJ);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_lmem = arkdls_mem;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkBandInit:
+
+ This routine does remaining initializations specific to the band
+ linear solver.
+---------------------------------------------------------------*/
+static int arkBandInit(ARKodeMem ark_mem)
+{
+  ARKDlsMem arkdls_mem;
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  arkDlsInitializeCounters(arkdls_mem);
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (arkdls_mem->d_jacDQ) {
+    arkdls_mem->d_bjac = arkDlsBandDQJac;
+    arkdls_mem->d_J_data = ark_mem;
+  } else {
+    arkdls_mem->d_J_data = ark_mem->ark_user_data;
+  }
+
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkBandSetup:
+
+ This routine does the setup operations for the band linear 
+ solver. It makes a decision whether or not to call the Jacobian 
+ evaluation routine based on various state variables, and if not 
+ it uses the saved copy.  In any case, it constructs the Newton 
+ matrix  A = M - gamma*J, updates counters, and calls the band 
+ LU factorization routine.
+---------------------------------------------------------------*/
+static int arkBandSetup(ARKodeMem ark_mem, int convfail, 
+			N_Vector ypred, N_Vector fpred, 
+			booleantype *jcurPtr, N_Vector vtemp1,
+			N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  long int i, j, ier, ml, mu, N, M, is, ie;
+  DlsMat A, Mass;
+  ARKDlsMem arkdls_mem;
+  ARKDlsMassMem arkdls_mass_mem;
+  int retval;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arkdls_mem->d_nstlj + ARKD_MSBJ) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKD_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    BandCopy(arkdls_mem->d_savedJ, arkdls_mem->d_M, arkdls_mem->d_mu, arkdls_mem->d_ml);
+
+  } else {
+
+    /* If jok = FALSE, call jac routine for new J value */
+    arkdls_mem->d_nje++;
+    arkdls_mem->d_nstlj = ark_mem->ark_nst;
+    *jcurPtr = TRUE;
+    SetToZero(arkdls_mem->d_M); 
+
+    retval = arkdls_mem->d_bjac(arkdls_mem->d_n, arkdls_mem->d_mu, arkdls_mem->d_ml, 
+				ark_mem->ark_tn, ypred, fpred, arkdls_mem->d_M, 
+				arkdls_mem->d_J_data, vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKDLS_JACFUNC_UNRECVR, "ARKBAND", "arkBandSetup", MSGD_JACFUNC_FAILED);
+      arkdls_mem->d_last_flag = ARKDLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      arkdls_mem->d_last_flag = ARKDLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    BandCopy(arkdls_mem->d_M, arkdls_mem->d_savedJ, arkdls_mem->d_mu, arkdls_mem->d_ml);
+
+  }
+
+  /* Scale J by -gamma */
+  BandScale(-ark_mem->ark_gamma, arkdls_mem->d_M);
+
+  /* Add mass matrix to get A = M-gamma*J*/
+  if (ark_mem->ark_mass_matrix) {
+
+    /* Compute mass matrix */
+    arkdls_mass_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+    SetToZero(arkdls_mass_mem->d_M);
+    retval = arkdls_mass_mem->d_bmass(arkdls_mass_mem->d_n, arkdls_mass_mem->d_mu, 
+				      arkdls_mass_mem->d_ml, ark_mem->ark_tn, 
+				      arkdls_mass_mem->d_M, arkdls_mass_mem->d_M_data, 
+				      vtemp1, vtemp2, vtemp3);
+    arkdls_mass_mem->d_nme++;
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKDLS_MASSFUNC_UNRECVR, "ARKBAND", 
+		      "arkBandSetup",  MSGD_MASSFUNC_FAILED);
+      arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_RECVR;
+      return(1);
+    }
+
+    /* perform matrix sum */
+    ml = arkdls_mem->d_M->ml;
+    mu = arkdls_mem->d_M->mu;
+    N = arkdls_mem->d_M->N;
+    M = arkdls_mem->d_M->M;
+    A = arkdls_mem->d_M;
+    Mass = arkdls_mass_mem->d_M;
+    for (j=0; j<N; j++) {                /* loop over columns */
+      is = (0 > j-mu) ? 0 : j-mu;        /* colum nonzero bounds */
+      ie = (M-1 < j+ml) ? M-1 : j+ml;
+      for (i=is; i<=ie; i++) {           /* loop over rows */
+	BAND_ELEM(A,i,j) += BAND_ELEM(Mass,i,j);
+      }
+    }
+
+  } else {
+    AddIdentity(arkdls_mem->d_M);
+  }
+
+  /* Do LU factorization of M */
+  ier = BandGBTRF(arkdls_mem->d_M, arkdls_mem->d_lpivots);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  if (ier > 0) {
+    arkdls_mem->d_last_flag = ier;
+    return(1);
+  }
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkBandSolve:
+
+ This routine handles the solve operation for the band linear solver
+ by calling the band backsolve routine.  The return value is 0.
+---------------------------------------------------------------*/
+static int arkBandSolve(ARKodeMem ark_mem, N_Vector b, N_Vector weight,
+                       N_Vector ycur, N_Vector fcur)
+{
+  ARKDlsMem arkdls_mem;
+  realtype *bd;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  bd = N_VGetArrayPointer(b);
+
+  BandGBTRS(arkdls_mem->d_M, arkdls_mem->d_lpivots, bd);
+
+  /* scale the correction to account for change in gamma */
+  if (ark_mem->ark_gamrat != ONE) 
+    N_VScale(TWO/(ONE + ark_mem->ark_gamrat), b, b);
+
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkBandFree:
+
+ This routine frees memory specific to the band linear solver.
+---------------------------------------------------------------*/
+static int arkBandFree(ARKodeMem ark_mem)
+{
+  ARKDlsMem arkdls_mem;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  DestroyMat(arkdls_mem->d_M);
+  DestroyMat(arkdls_mem->d_savedJ);
+  DestroyArray(arkdls_mem->d_lpivots);
+  free(arkdls_mem);
+  ark_mem->ark_lmem = NULL;
+
+  return(0);
+}
+
+
+
+
+/*---------------------------------------------------------------
+ ARKMassBand:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the band mass matrix linear solver 
+ module.  ARKMassBand first calls the existing mfree routine if 
+ this is not NULL.  It then sets the ark_minit, ark_msetup, 
+ ark_msolve, and ark_mfree fields in (*arkode_mem) to be 
+ arkMassBandInit, arkMassBandSetup, arkMassBandSolve, and 
+ arkMassBandFree, respectively.  It allocates memory for a 
+ structure of type ARKDlsMassMemRec and sets the ark_mass_mem 
+ field in (*arkode_mem) to the address of this structure.  It 
+ sets MassSetupNonNull in (*arkode_mem) to be TRUE, d_mu to be 
+ mupper and d_ml to be mlower. Finally, it allocates memory for 
+ M and pivot.  The ARKMassBand return value is SUCCESS = 0, 
+ LMEM_FAIL = -1, or LIN_ILL_INPUT = -2.
+
+ NOTE: The band linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKMassBand will first 
+       test for compatible a compatible N_Vector internal
+       representation by checking that the function 
+       N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+int ARKMassBand(void *arkode_mem, long int N, long int mupper, 
+		long int mlower, ARKDlsBandMassFn bmass)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKBAND", "ARKMassBand", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKBAND", "ARKMassBand", MSGD_BAD_NVECTOR);
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree != NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set four main function fields in ark_mem, enable mass matrix */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = arkMassBandInit;
+  ark_mem->ark_msetup = arkMassBandSetup;
+  ark_mem->ark_msolve = arkMassBandSolve;
+  ark_mem->ark_mfree  = arkMassBandFree;
+  ark_mem->ark_mtimes = arkMassBandMultiply;
+  ark_mem->ark_mtimes_data = (void *) ark_mem;
+  ark_mem->ark_msolve_type = 2;
+  
+  /* Get memory for ARKDlsMassMemRec */
+  arkdls_mem = NULL;
+  arkdls_mem = (ARKDlsMassMem) malloc(sizeof(struct ARKDlsMassMemRec));
+  if (arkdls_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKBAND", "ARKMassBand", MSGD_MEM_FAIL);
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  arkdls_mem->d_type = SUNDIALS_BAND;
+  
+  /* Initialize mass-matrix-related data */
+  arkdls_mem->d_nme = 0;
+  arkdls_mem->d_bmass = bmass;
+  arkdls_mem->d_M_data = NULL;
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  ark_mem->ark_MassSetupNonNull = TRUE;
+
+  /* Load problem dimension */
+  arkdls_mem->d_n = N;
+
+  /* Load half-bandwiths in arkdls_mem */
+  arkdls_mem->d_ml = mlower;
+  arkdls_mem->d_mu = mupper;
+
+  /* Test ml and mu for legality */
+  if ((arkdls_mem->d_ml < 0) || (arkdls_mem->d_mu < 0) || (arkdls_mem->d_ml >= N) || (arkdls_mem->d_mu >= N)) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKBAND", "ARKMassBand", MSGD_BAD_SIZES);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  arkdls_mem->d_smu = SUNMIN(N-1, arkdls_mem->d_mu + arkdls_mem->d_ml);
+
+  /* Allocate memory for M, M_lu, and pivot arrays */
+  arkdls_mem->d_M = NULL;
+  arkdls_mem->d_M = NewBandMat(N, arkdls_mem->d_mu, arkdls_mem->d_ml, arkdls_mem->d_mu);
+  if (arkdls_mem->d_M == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKBAND", "ARKMassBand", MSGD_MEM_FAIL);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_M_lu = NULL;
+  arkdls_mem->d_M_lu = NewBandMat(N, arkdls_mem->d_mu, arkdls_mem->d_ml, arkdls_mem->d_smu);
+  if (arkdls_mem->d_M_lu == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKBAND", "ARKMassBand", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_lpivots = NULL;
+  arkdls_mem->d_lpivots = NewLintArray(N);
+  if (arkdls_mem->d_lpivots == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKBAND", "ARKMassBand", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    DestroyMat(arkdls_mem->d_M_lu);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_mass_mem = arkdls_mem;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassBandInit:
+
+ This routine does remaining initializations specific to the band
+ mass matrix linear solver.
+---------------------------------------------------------------*/
+static int arkMassBandInit(ARKodeMem ark_mem)
+{
+  ARKDlsMassMem arkdls_mem;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  arkdls_mem->d_nme = 0;
+
+  /* Set mass matrix data */
+  arkdls_mem->d_M_data = ark_mem->ark_user_data;
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassBandSetup:
+
+ This routine does the setup operations for the band mass matrix
+ solver. It constructs the mass matrix, M, updates counters, 
+ and calls the band LU factorization routine.
+---------------------------------------------------------------*/
+static int arkMassBandSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			    N_Vector vtemp2, N_Vector vtemp3)
+{
+  long int ier;
+  ARKDlsMassMem arkdls_mem;
+  int retval;
+
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  SetToZero(arkdls_mem->d_M); 
+  retval = arkdls_mem->d_bmass(arkdls_mem->d_n, arkdls_mem->d_mu, 
+			       arkdls_mem->d_ml, ark_mem->ark_tn, 
+			       arkdls_mem->d_M, arkdls_mem->d_M_data, 
+			       vtemp1, vtemp2, vtemp3);
+  arkdls_mem->d_nme++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, ARKDLS_MASSFUNC_UNRECVR, "ARKBAND", "arkMassBandSetup", 
+		    MSGD_MASSFUNC_FAILED);
+    arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_UNRECVR;
+    return(-1);
+  }
+  if (retval > 0) {
+    arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_RECVR;
+    return(1);
+  }
+
+  /* Copy M into M_lu for LU decomposition */
+  BandCopy(arkdls_mem->d_M, arkdls_mem->d_M_lu, arkdls_mem->d_mu, arkdls_mem->d_ml);
+
+  /* Do LU factorization of M */
+  ier = BandGBTRF(arkdls_mem->d_M_lu, arkdls_mem->d_lpivots);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  if (ier > 0) {
+    arkdls_mem->d_last_flag = ier;
+    return(1);
+  }
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassBandSolve:
+
+ This routine handles the solve operation for the band mass 
+ matrix solver by calling the band backsolve routine.  The 
+ return value is 0.
+---------------------------------------------------------------*/
+static int arkMassBandSolve(ARKodeMem ark_mem, N_Vector b, 
+			    N_Vector weight)
+{
+  ARKDlsMassMem arkdls_mem;
+  realtype *bd;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  bd = N_VGetArrayPointer(b);
+  BandGBTRS(arkdls_mem->d_M_lu, arkdls_mem->d_lpivots, bd);
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassBandFree:
+
+ This routine frees memory specific to the band linear solver.
+---------------------------------------------------------------*/
+static int arkMassBandFree(ARKodeMem ark_mem)
+{
+  ARKDlsMassMem arkdls_mem;
+
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  DestroyMat(arkdls_mem->d_M);
+  DestroyMat(arkdls_mem->d_M_lu);
+  DestroyArray(arkdls_mem->d_lpivots);
+  free(arkdls_mem);
+  ark_mem->ark_mass_mem = NULL;
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassBandMultiply performs a matrix-vector product, 
+ multiplying the current mass matrix by a given vector.
+---------------------------------------------------------------*/                  
+static int arkMassBandMultiply(N_Vector v, N_Vector Mv, 
+			       realtype t, void *arkode_mem)
+{
+  /* extract the DlsMassMem structure from the user_data pointer */
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+  realtype *vdata=NULL, *Mvdata=NULL;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKBAND", 
+		    "arkMassBandMultiply", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  /* access the vector arrays (since they must be serial vectors) */
+  vdata = N_VGetArrayPointer(v);
+  Mvdata = N_VGetArrayPointer(Mv);
+  if (vdata == NULL || Mvdata == NULL)
+    return(1);
+
+  /* perform matrix-vector product and return */
+  BandMatvec(arkdls_mem->d_M, vdata, Mvdata);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+    EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_bandpre.c b/src/arkode/arkode_bandpre.c
new file mode 100644
index 0000000..5757f17
--- /dev/null
+++ b/src/arkode/arkode_bandpre.c
@@ -0,0 +1,465 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This file contains implementations of the banded difference
+ * quotient Jacobian-based preconditioner and solver routines for
+ * use with the ARKSPILS linear solvers..
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "arkode_impl.h"
+#include "arkode_bandpre_impl.h"
+#include "arkode_spils_impl.h"
+#include <sundials/sundials_math.h>
+
+#define MIN_INC_MULT RCONST(1000.0)
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+
+
+/* Prototypes of ARKBandPrecSetup and ARKBandPrecSolve */
+static int ARKBandPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+			    booleantype jok, booleantype *jcurPtr, 
+			    realtype gamma, void *bp_data,
+			    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int ARKBandPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+			    N_Vector r, N_Vector z, 
+			    realtype gamma, realtype delta,
+			    int lr, void *bp_data, N_Vector tmp);
+
+/* Prototype for ARKBandPrecFree */
+static int ARKBandPrecFree(ARKodeMem ark_mem);
+
+/* Prototype for difference quotient Jacobian calculation routine */
+static int ARKBandPDQJac(ARKBandPrecData pdata,
+			 realtype t, N_Vector y, N_Vector fy, 
+			 N_Vector ftemp, N_Vector ytemp);
+
+
+/*---------------------------------------------------------------
+ Initialization, Free, and Get Functions
+ NOTE: The band linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKBandPrecInit will
+       first test for a compatible N_Vector internal 
+       representation by checking that the function 
+       N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+int ARKBandPrecInit(void *arkode_mem, long int N, 
+		    long int mu, long int ml)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  ARKBandPrecData pdata;
+  long int mup, mlp, storagemu;
+  int flag;
+
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKBANDPRE", "ARKBandPrecInit", MSGBP_MEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKBANDPRE", "ARKBandPrecInit", MSGBP_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Test if the NVECTOR package is compatible with the BAND preconditioner */
+  if(ark_mem->ark_tempv->ops->nvgetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKBANDPRE", "ARKBandPrecInit", MSGBP_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  pdata = NULL;
+  pdata = (ARKBandPrecData) malloc(sizeof *pdata);  /* Allocate data memory */
+  if (pdata == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKBANDPRE", "ARKBandPrecInit", MSGBP_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Load pointers and bandwidths into pdata block. */
+  pdata->arkode_mem = arkode_mem;
+  pdata->N = N;
+  pdata->mu = mup = SUNMIN(N-1, SUNMAX(0,mu));
+  pdata->ml = mlp = SUNMIN(N-1, SUNMAX(0,ml));
+
+  /* Initialize nfeBP counter */
+  pdata->nfeBP = 0;
+
+  /* Allocate memory for saved banded Jacobian approximation. */
+  pdata->savedJ = NULL;
+  pdata->savedJ = NewBandMat(N, mup, mlp, mup);
+  if (pdata->savedJ == NULL) {
+    free(pdata); pdata = NULL;
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKBANDPRE", "ARKBandPrecInit", MSGBP_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Allocate memory for banded preconditioner. */
+  storagemu = SUNMIN(N-1, mup+mlp);
+  pdata->savedP = NULL;
+  pdata->savedP = NewBandMat(N, mup, mlp, storagemu);
+  if (pdata->savedP == NULL) {
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKBANDPRE", "ARKBandPrecInit", MSGBP_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Allocate memory for pivot array. */
+  pdata->lpivots = NULL;
+  pdata->lpivots = NewLintArray(N);
+  if (pdata->lpivots == NULL) {
+    DestroyMat(pdata->savedP);
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKBANDPRE", "ARKBandPrecInit", MSGBP_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* make sure s_P_data is free from any previous allocations */
+  if (arkspils_mem->s_pfree != NULL) {
+    arkspils_mem->s_pfree(ark_mem);
+  }
+
+  /* Point to the new P_data field in the SPILS memory */
+  arkspils_mem->s_P_data = pdata;
+
+  /* Attach the pfree function */
+  arkspils_mem->s_pfree = ARKBandPrecFree;
+
+  /* Attach preconditioner solve and setup functions */
+  flag = ARKSpilsSetPreconditioner(arkode_mem, ARKBandPrecSetup, ARKBandPrecSolve);
+
+  return(flag);
+}
+
+
+int ARKBandPrecGetWorkSpace(void *arkode_mem, long int *lenrwBP, long int *leniwBP)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  ARKBandPrecData pdata;
+  long int N, ml, mu, smu;
+
+  
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKBANDPRE", "ARKBandPrecGetWorkSpace", MSGBP_MEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKBANDPRE", "ARKBandPrecGetWorkSpace", MSGBP_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  if (arkspils_mem->s_P_data == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_PMEM_NULL, "ARKBANDPRE", "ARKBandPrecGetWorkSpace", MSGBP_PMEM_NULL);
+    return(ARKSPILS_PMEM_NULL);
+  } 
+  pdata = (ARKBandPrecData) arkspils_mem->s_P_data;
+
+  N   = pdata->N;
+  mu  = pdata->mu;
+  ml  = pdata->ml;
+  smu = SUNMIN( N-1, mu + ml);
+
+  *leniwBP = pdata->N;
+  *lenrwBP = N * ( 2*ml + smu + mu + 2 );
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+int ARKBandPrecGetNumRhsEvals(void *arkode_mem, long int *nfevalsBP)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  ARKBandPrecData pdata;
+
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKBANDPRE", "ARKBandPrecGetNumRhsEvals", MSGBP_MEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKBANDPRE", "ARKBandPrecGetNumRhsEvals", MSGBP_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  if (arkspils_mem->s_P_data == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_PMEM_NULL, "ARKBANDPRE", "ARKBandPrecGetNumRhsEvals", MSGBP_PMEM_NULL);
+    return(ARKSPILS_PMEM_NULL);
+  } 
+  pdata = (ARKBandPrecData) arkspils_mem->s_P_data;
+
+  *nfevalsBP = pdata->nfeBP;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKBandPrecSetup:
+
+ Together ARKBandPrecSetup and ARKBandPrecSolve use a banded
+ difference quotient Jacobian to create a preconditioner.
+ ARKBandPrecSetup calculates a new J, if necessary, then
+ calculates P = I - gamma*J, and does an LU factorization of P.
+
+ The parameters of ARKBandPrecSetup are as follows:
+
+ t       is the current value of the independent variable.
+
+ y       is the current value of the dependent variable vector,
+         namely the predicted value of y(t).
+
+ fy      is the vector f(t,y).
+
+ jok     is an input flag indicating whether Jacobian-related
+         data needs to be recomputed, as follows:
+           jok == FALSE means recompute Jacobian-related data
+                  from scratch.
+           jok == TRUE means that Jacobian data from the
+                  previous PrecSetup call will be reused
+                  (with the current value of gamma).
+         A ARKBandPrecSetup call with jok == TRUE should only
+         occur after a call with jok == FALSE.
+
+ *jcurPtr is a pointer to an output integer flag which is
+          set by ARKBandPrecond as follows:
+            *jcurPtr = TRUE if Jacobian data was recomputed.
+            *jcurPtr = FALSE if Jacobian data was not recomputed,
+                       but saved data was reused.
+
+ gamma   is the scalar appearing in the Newton matrix.
+
+ bp_data is a pointer to preconditoner data (set by ARKBandPrecInit)
+
+ tmp1, tmp2, and tmp3 are pointers to memory allocated
+           for vectors of length N for work space. This
+           routine uses only tmp1 and tmp2.
+
+ The value to be returned by the ARKBandPrecSetup function is
+   0  if successful, or
+   1  if the band factorization failed.
+---------------------------------------------------------------*/
+static int ARKBandPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+                           booleantype jok, booleantype *jcurPtr, 
+                           realtype gamma, void *bp_data,
+                           N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  ARKBandPrecData pdata;
+  ARKodeMem ark_mem;
+  int retval;
+  long int ier;
+
+  /* Assume matrix and lpivots have already been allocated. */
+  pdata = (ARKBandPrecData) bp_data;
+
+  ark_mem = (ARKodeMem) pdata->arkode_mem;
+
+  if (jok) {
+
+    /* If jok = TRUE, use saved copy of J. */
+    *jcurPtr = FALSE;
+    BandCopy(pdata->savedJ, pdata->savedP, pdata->mu, pdata->ml);
+
+  } else {
+
+    /* If jok = FALSE, call ARKBandPDQJac for new J value. */
+    *jcurPtr = TRUE;
+    SetToZero(pdata->savedJ);
+
+    retval = ARKBandPDQJac(pdata, t, y, fy, tmp1, tmp2);
+    if (retval < 0) {
+      arkProcessError(ark_mem, -1, "ARKBANDPRE", "ARKBandPrecSetup", MSGBP_RHSFUNC_FAILED);
+      return(-1);
+    }
+    if (retval > 0) {
+      return(1);
+    }
+
+    BandCopy(pdata->savedJ, pdata->savedP, pdata->mu, pdata->ml);
+
+  }
+  
+  /* Scale and add I to get savedP = I - gamma*J. */
+  BandScale(-gamma, pdata->savedP);
+  AddIdentity(pdata->savedP);
+ 
+  /* Do LU factorization of matrix. */
+  ier = BandGBTRF(pdata->savedP, pdata->lpivots);
+ 
+  /* Return 0 if the LU was complete; otherwise return 1. */
+  if (ier > 0) return(1);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKBandPrecSolve:
+
+ ARKBandPrecSolve solves a linear system P z = r, where P is the
+ matrix computed by ARKBandPrecond.
+
+ The parameters of ARKBandPrecSolve used here are as follows:
+
+ r is the right-hand side vector of the linear system.
+
+ bp_data is a pointer to preconditoner data (set by ARKBandPrecInit)
+
+ z is the output vector computed by ARKBandPrecSolve.
+
+ The value returned by the ARKBandPrecSolve function is always 0,
+ indicating success.
+---------------------------------------------------------------*/ 
+static int ARKBandPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+                           N_Vector r, N_Vector z, 
+                           realtype gamma, realtype delta,
+                           int lr, void *bp_data, N_Vector tmp)
+{
+  ARKBandPrecData pdata;
+  realtype *zd;
+
+  /* Assume matrix and lpivots have already been allocated. */
+  pdata = (ARKBandPrecData) bp_data;
+
+  /* Copy r to z. */
+  N_VScale(ONE, r, z);
+
+  /* Do band backsolve on the vector z. */
+  zd = N_VGetArrayPointer(z);
+
+  BandGBTRS(pdata->savedP, pdata->lpivots, zd);
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKBandPrecFree:
+
+ Frees data associated with the ARKBand preconditioner.
+---------------------------------------------------------------*/ 
+static int ARKBandPrecFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  ARKBandPrecData pdata;
+
+  if (ark_mem->ark_lmem == NULL) return(0);
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  
+  if (arkspils_mem->s_P_data == NULL) return(0);
+  pdata = (ARKBandPrecData) arkspils_mem->s_P_data;
+
+  DestroyMat(pdata->savedJ);
+  DestroyMat(pdata->savedP);
+  DestroyArray(pdata->lpivots);
+
+  free(pdata);
+  pdata = NULL;
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKBandPDQJac:
+
+ This routine generates a banded difference quotient approximation to
+ the Jacobian of f(t,y). It assumes that a band matrix of type
+ DlsMat is stored column-wise, and that elements within each column
+ are contiguous. This makes it possible to get the address of a column
+ of J via the macro BAND_COL and to write a simple for loop to set
+ each of the elements of a column in succession.
+---------------------------------------------------------------*/
+static int ARKBandPDQJac(ARKBandPrecData pdata, 
+			 realtype t, N_Vector y, N_Vector fy, 
+			 N_Vector ftemp, N_Vector ytemp)
+{
+  ARKodeMem ark_mem;
+  realtype fnorm, minInc, inc, inc_inv, srur;
+  long int group, i, j, width, ngroups, i1, i2;
+  realtype *col_j, *ewt_data, *fy_data, *ftemp_data, *y_data, *ytemp_data;
+  int retval;
+
+  ark_mem = (ARKodeMem) pdata->arkode_mem;
+
+  /* Obtain pointers to the data for ewt, fy, ftemp, y, ytemp. */
+  ewt_data   = N_VGetArrayPointer(ark_mem->ark_ewt);
+  fy_data    = N_VGetArrayPointer(fy);
+  ftemp_data = N_VGetArrayPointer(ftemp);
+  y_data     = N_VGetArrayPointer(y);
+  ytemp_data = N_VGetArrayPointer(ytemp);
+
+  /* Load ytemp with y = predicted y vector. */
+  N_VScale(ONE, y, ytemp);
+
+  /* Set minimum increment based on uround and norm of f. */
+  srur = SUNRsqrt(ark_mem->ark_uround);
+  /* fnorm = N_VWrmsNorm(fy, ark_mem->ark_ewt); */
+  fnorm = N_VWrmsNorm(fy, ark_mem->ark_rwt);
+  minInc = (fnorm != ZERO) ?
+    (MIN_INC_MULT * SUNRabs(ark_mem->ark_h) * ark_mem->ark_uround * pdata->N * fnorm) : ONE;
+
+  /* Set bandwidth and number of column groups for band differencing. */
+  width = pdata->ml + pdata->mu + 1;
+  ngroups = SUNMIN(width, pdata->N);
+  
+  for (group = 1; group <= ngroups; group++) {
+    
+    /* Increment all y_j in group. */
+    for(j = group-1; j < pdata->N; j += width) {
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      ytemp_data[j] += inc;
+    }
+
+    /* Evaluate f with incremented y. */
+    retval = ark_mem->ark_fi(t, ytemp, ftemp, ark_mem->ark_user_data);
+    pdata->nfeBP++;
+    if (retval != 0) return(retval);
+
+    /* Restore ytemp, then form and load difference quotients. */
+    for (j = group-1; j < pdata->N; j += width) {
+      ytemp_data[j] = y_data[j];
+      col_j = BAND_COL(pdata->savedJ,j);
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-pdata->mu);
+      i2 = SUNMIN(j+pdata->ml, pdata->N-1);
+      for (i=i1; i <= i2; i++)
+        BAND_COL_ELEM(col_j,i,j) =
+          inc_inv * (ftemp_data[i] - fy_data[i]);
+    }
+  }
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+   EOF
+---------------------------------------------------------------*/ 
diff --git a/src/arkode/arkode_bandpre_impl.h b/src/arkode/arkode_bandpre_impl.h
new file mode 100644
index 0000000..6c65b69
--- /dev/null
+++ b/src/arkode/arkode_bandpre_impl.h
@@ -0,0 +1,72 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Implementation header file for the ARKBANDPRE module.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKBANDPRE_IMPL_H
+#define _ARKBANDPRE_IMPL_H
+
+#include <arkode/arkode_bandpre.h>
+#include <sundials/sundials_band.h>
+#include <sundials/sundials_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------
+ Type: ARKBandPrecData
+---------------------------------------------------------------*/
+
+typedef struct ARKBandPrecDataRec {
+
+  /* Data set by user in ARKBandPrecInit */
+  long int N;
+  long int ml, mu;
+
+  /* Data set by ARKBandPrecSetup */
+  DlsMat savedJ;
+  DlsMat savedP;
+  long int *lpivots;
+
+  /* Rhs calls */
+  long int nfeBP;
+
+  /* Pointer to arkode_mem */
+  void *arkode_mem;
+
+} *ARKBandPrecData;
+
+
+/*---------------------------------------------------------------
+ ARKBANDPRE error messages
+---------------------------------------------------------------*/
+
+#define MSGBP_MEM_NULL       "Integrator memory is NULL."
+#define MSGBP_LMEM_NULL      "Linear solver memory is NULL. One of the SPILS linear solvers must be attached."
+#define MSGBP_MEM_FAIL       "A memory request failed."
+#define MSGBP_BAD_NVECTOR    "A required vector operation is not implemented."
+#define MSGBP_PMEM_NULL      "Band preconditioner memory is NULL. ARKBandPrecInit must be called."
+#define MSGBP_RHSFUNC_FAILED "The right-hand side routine failed in an unrecoverable manner."
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/arkode/arkode_bbdpre.c b/src/arkode/arkode_bbdpre.c
new file mode 100644
index 0000000..8bdb603
--- /dev/null
+++ b/src/arkode/arkode_bbdpre.c
@@ -0,0 +1,547 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This file contains implementations of routines for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with ARKODE, a ARKSPILS 
+ * linear solver, and the parallel implementation of NVECTOR.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "arkode_impl.h"
+#include "arkode_bbdpre_impl.h"
+#include "arkode_spils_impl.h"
+#include <sundials/sundials_math.h>
+
+
+#define MIN_INC_MULT RCONST(1000.0)
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+
+
+/* Prototypes of functions ARKBBDPrecSetup and ARKBBDPrecSolve */
+static int ARKBBDPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+			   booleantype jok, booleantype *jcurPtr, 
+			   realtype gamma, void *bbd_data, 
+			   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int ARKBBDPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+			   N_Vector r, N_Vector z, 
+			   realtype gamma, realtype delta,
+			   int lr, void *bbd_data, N_Vector tmp);
+
+/* Prototype for ARKBBDPrecFree */
+static int ARKBBDPrecFree(ARKodeMem ark_mem);
+
+/* Prototype for difference quotient Jacobian calculation routine */
+static int ARKBBDDQJac(ARKBBDPrecData pdata, realtype t, 
+		       N_Vector y, N_Vector gy, 
+		       N_Vector ytemp, N_Vector gtemp);
+
+
+/*---------------------------------------------------------------
+ User-Callable Functions: initialization, reinit and free
+---------------------------------------------------------------*/
+int ARKBBDPrecInit(void *arkode_mem, long int Nlocal, 
+                   long int mudq, long int mldq,
+                   long int mukeep, long int mlkeep, 
+                   realtype dqrely, 
+                   ARKLocalFn gloc, ARKCommFn cfn)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  ARKBBDPrecData pdata;
+  long int muk, mlk, storage_mu;
+  int flag;
+
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecInit", MSGBBD_MEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecInit", MSGBBD_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Test if the NVECTOR package is compatible with the BLOCK 
+     BAND preconditioner */
+  if(ark_mem->ark_tempv->ops->nvgetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKBBDPRE", 
+		    "ARKBBDPrecInit", MSGBBD_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate data memory */
+  pdata = NULL;
+  pdata = (ARKBBDPrecData) malloc(sizeof *pdata);  
+  if (pdata == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKBBDPRE", 
+		    "ARKBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set pointers to gloc and cfn; load half-bandwidths */
+  pdata->arkode_mem = arkode_mem;
+  pdata->gloc = gloc;
+  pdata->cfn = cfn;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0,mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0,mldq));
+  muk = SUNMIN(Nlocal-1, SUNMAX(0,mukeep));
+  mlk = SUNMIN(Nlocal-1, SUNMAX(0,mlkeep));
+  pdata->mukeep = muk;
+  pdata->mlkeep = mlk;
+
+  /* Allocate memory for saved Jacobian */
+  pdata->savedJ = NewBandMat(Nlocal, muk, mlk, muk);
+  if (pdata->savedJ == NULL) { 
+    free(pdata); pdata = NULL; 
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKBBDPRE", 
+		    "ARKBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL); 
+  }
+
+  /* Allocate memory for preconditioner matrix */
+  storage_mu = SUNMIN(Nlocal-1, muk + mlk);
+  pdata->savedP = NULL;
+  pdata->savedP = NewBandMat(Nlocal, muk, mlk, storage_mu);
+  if (pdata->savedP == NULL) {
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKBBDPRE", 
+		    "ARKBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+  /* Allocate memory for lpivots */
+  pdata->lpivots = NULL;
+  pdata->lpivots = NewLintArray(Nlocal);
+  if (pdata->lpivots == NULL) {
+    DestroyMat(pdata->savedP);
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKBBDPRE", 
+		    "ARKBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set pdata->dqrely based on input dqrely (0 implies default). */
+  pdata->dqrely = (dqrely > ZERO) ? dqrely : SUNRsqrt(ark_mem->ark_uround);
+
+  /* Store Nlocal to be used in ARKBBDPrecSetup */
+  pdata->n_local = Nlocal;
+
+  /* Set work space sizes and initialize nge */
+  pdata->rpwsize = Nlocal*(muk + 2*mlk + storage_mu + 2);
+  pdata->ipwsize = Nlocal;
+  pdata->nge = 0;
+
+  /* make sure s_P_data is free from any previous allocations */
+  if (arkspils_mem->s_pfree != NULL) {
+    arkspils_mem->s_pfree(ark_mem);
+  }
+
+  /* Point to the new P_data field in the SPILS memory */
+  arkspils_mem->s_P_data = pdata;
+
+  /* Attach the pfree function */
+  arkspils_mem->s_pfree = ARKBBDPrecFree;
+
+  /* Attach preconditioner solve and setup functions */
+  flag = ARKSpilsSetPreconditioner(arkode_mem, ARKBBDPrecSetup, 
+				   ARKBBDPrecSolve);
+
+  return(flag);
+}
+
+
+/*-------------------------------------------------------------*/
+int ARKBBDPrecReInit(void *arkode_mem, long int mudq, 
+		     long int mldq, realtype dqrely)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  ARKBBDPrecData pdata;
+  long int Nlocal;
+
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecReInit", MSGBBD_MEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecReInit", MSGBBD_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Test if the preconditioner data is non-NULL */
+  if (arkspils_mem->s_P_data == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_PMEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecReInit", MSGBBD_PMEM_NULL);
+    return(ARKSPILS_PMEM_NULL);
+  } 
+  pdata = (ARKBBDPrecData) arkspils_mem->s_P_data;
+
+  /* Load half-bandwidths */
+  Nlocal = pdata->n_local;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0,mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0,mldq));
+
+  /* Set pdata->dqrely based on input dqrely (0 implies default). */
+  pdata->dqrely = (dqrely > ZERO) ? dqrely : SUNRsqrt(ark_mem->ark_uround);
+
+  /* Re-initialize nge */
+  pdata->nge = 0;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*-------------------------------------------------------------*/
+int ARKBBDPrecGetWorkSpace(void *arkode_mem, long int *lenrwBBDP, 
+			   long int *leniwBBDP)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  ARKBBDPrecData pdata;
+
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecGetWorkSpace", MSGBBD_MEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecGetWorkSpace", MSGBBD_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  if (arkspils_mem->s_P_data == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_PMEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecGetWorkSpace", MSGBBD_PMEM_NULL);
+    return(ARKSPILS_PMEM_NULL);
+  } 
+  pdata = (ARKBBDPrecData) arkspils_mem->s_P_data;
+
+  *lenrwBBDP = pdata->rpwsize;
+  *leniwBBDP = pdata->ipwsize;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*-------------------------------------------------------------*/
+int ARKBBDPrecGetNumGfnEvals(void *arkode_mem, long int *ngevalsBBDP)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  ARKBBDPrecData pdata;
+
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecGetNumGfnEvals", MSGBBD_MEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecGetNumGfnEvals", MSGBBD_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  if (arkspils_mem->s_P_data == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_PMEM_NULL, "ARKBBDPRE", 
+		    "ARKBBDPrecGetNumGfnEvals", MSGBBD_PMEM_NULL);
+    return(ARKSPILS_PMEM_NULL);
+  } 
+  pdata = (ARKBBDPrecData) arkspils_mem->s_P_data;
+
+  *ngevalsBBDP = pdata->nge;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKBBDPrecSetup:
+
+ ARKBBDPrecSetup generates and factors a banded block of the
+ preconditioner matrix on each processor, via calls to the
+ user-supplied gloc and cfn functions. It uses difference
+ quotient approximations to the Jacobian elements.
+
+ ARKBBDPrecSetup calculates a new J,if necessary, then calculates
+ P = I - gamma*J, and does an LU factorization of P.
+
+ The parameters of ARKBBDPrecSetup used here are as follows:
+
+ t       is the current value of the independent variable.
+
+ y       is the current value of the dependent variable vector,
+         namely the predicted value of y(t).
+
+ fy      is the vector f(t,y).
+
+ jok     is an input flag indicating whether Jacobian-related
+         data needs to be recomputed, as follows:
+           jok == FALSE means recompute Jacobian-related data
+                  from scratch.
+           jok == TRUE  means that Jacobian data from the
+                  previous ARKBBDPrecon call can be reused
+                  (with the current value of gamma).
+         A ARKBBDPrecon call with jok == TRUE should only occur
+         after a call with jok == FALSE.
+
+ jcurPtr is a pointer to an output integer flag which is
+         set by ARKBBDPrecon as follows:
+           *jcurPtr = TRUE if Jacobian data was recomputed.
+           *jcurPtr = FALSE if Jacobian data was not recomputed,
+                      but saved data was reused.
+
+ gamma   is the scalar appearing in the Newton matrix.
+
+ bbd_data is a pointer to the preconditioner data set by
+          ARKBBDPrecInit
+
+ tmp1, tmp2, and tmp3 are pointers to memory allocated
+           for NVectors which are be used by ARKBBDPrecSetup
+           as temporary storage or work space.
+
+ Return value:
+ The value returned by this ARKBBDPrecSetup function is the int
+   0  if successful,
+   1  for a recoverable error (step will be retried).
+---------------------------------------------------------------*/
+static int ARKBBDPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+			   booleantype jok, booleantype *jcurPtr, 
+			   realtype gamma, void *bbd_data, 
+			   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  long int ier;
+  ARKBBDPrecData pdata;
+  ARKodeMem ark_mem;
+  int retval;
+
+  pdata = (ARKBBDPrecData) bbd_data;
+
+  ark_mem = (ARKodeMem) pdata->arkode_mem;
+
+  /* If jok = TRUE, use saved copy of J */
+  if (jok) {
+    *jcurPtr = FALSE;
+    BandCopy(pdata->savedJ, pdata->savedP, pdata->mukeep, pdata->mlkeep);
+
+  /* Otherwise call ARKBBDDQJac for new J value */
+  } else {
+    *jcurPtr = TRUE;
+    SetToZero(pdata->savedJ);
+
+    retval = ARKBBDDQJac(pdata, t, y, tmp1, tmp2, tmp3);
+    if (retval < 0) {
+      arkProcessError(ark_mem, -1, "ARKBBDPRE", "ARKBBDPrecSetup", 
+		      MSGBBD_FUNC_FAILED);
+      return(-1);
+    }
+    if (retval > 0) {
+      return(1);
+    }
+    BandCopy(pdata->savedJ, pdata->savedP, pdata->mukeep, pdata->mlkeep);
+
+  }
+  
+  /* Scale and add I to get P = I - gamma*J */
+  BandScale(-gamma, pdata->savedP);
+  AddIdentity(pdata->savedP);
+ 
+  /* Do LU factorization of P in place */
+  ier = BandGBTRF(pdata->savedP, pdata->lpivots);
+ 
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  if (ier > 0) return(1);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKBBDPrecSolve:
+
+ ARKBBDPrecSolve solves a linear system P z = r, with the
+ band-block-diagonal preconditioner matrix P generated and
+ factored by ARKBBDPrecSetup.
+
+ The parameters of ARKBBDPrecSolve used here are as follows:
+
+ r is the right-hand side vector of the linear system.
+
+ bbd_data is a pointer to the preconditioner data set by
+   ARKBBDPrecInit.
+
+ z is the output vector computed by ARKBBDPrecSolve.
+
+ The value returned by the ARKBBDPrecSolve function is always 0,
+ indicating success.
+---------------------------------------------------------------*/
+static int ARKBBDPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+			   N_Vector r, N_Vector z, 
+			   realtype gamma, realtype delta,
+			   int lr, void *bbd_data, N_Vector tmp)
+{
+  ARKBBDPrecData pdata;
+  realtype *zd;
+
+  pdata = (ARKBBDPrecData) bbd_data;
+
+  /* Copy r to z, then do backsolve and return */
+  N_VScale(ONE, r, z);
+  zd = N_VGetArrayPointer(z);
+  BandGBTRS(pdata->savedP, pdata->lpivots, zd);
+
+  return(0);
+}
+
+
+/*-------------------------------------------------------------*/
+static int ARKBBDPrecFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  ARKBBDPrecData pdata;
+  
+  if (ark_mem->ark_lmem == NULL) return(0);
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  
+  if (arkspils_mem->s_P_data == NULL) return(0);
+  pdata = (ARKBBDPrecData) arkspils_mem->s_P_data;
+
+  DestroyMat(pdata->savedJ);
+  DestroyMat(pdata->savedP);
+  DestroyArray(pdata->lpivots);
+
+  free(pdata);
+  pdata = NULL;
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKBBDDQJac:
+
+ This routine generates a banded difference quotient approximation
+ to the local block of the Jacobian of g(t,y). It assumes that a
+ band matrix of type DlsMat is stored columnwise, and that elements
+ within each column are contiguous. All matrix elements are generated
+ as difference quotients, by way of calls to the user routine gloc.
+ By virtue of the band structure, the number of these calls is
+ bandwidth + 1, where bandwidth = mldq + mudq + 1.
+ But the band matrix kept has bandwidth = mlkeep + mukeep + 1.
+ This routine also assumes that the local elements of a vector are
+ stored contiguously.
+---------------------------------------------------------------*/
+static int ARKBBDDQJac(ARKBBDPrecData pdata, realtype t, 
+		       N_Vector y, N_Vector gy, 
+		       N_Vector ytemp, N_Vector gtemp)
+{
+  ARKodeMem ark_mem;
+  realtype gnorm, minInc, inc, inc_inv;
+  long int group, i, j, width, ngroups, i1, i2;
+  realtype *y_data, *ewt_data, *gy_data, *gtemp_data, *ytemp_data, *col_j;
+  int retval;
+
+  ark_mem = (ARKodeMem) pdata->arkode_mem;
+
+  /* Load ytemp with y = predicted solution vector */
+  N_VScale(ONE, y, ytemp);
+
+  /* Call cfn and gloc to get base value of g(t,y) */
+  if (pdata->cfn != NULL) {
+    retval = pdata->cfn(pdata->n_local, t, y, ark_mem->ark_user_data);
+    if (retval != 0) return(retval);
+  }
+
+  retval = pdata->gloc(pdata->n_local, t, ytemp, gy, ark_mem->ark_user_data);
+  pdata->nge++;
+  if (retval != 0) return(retval);
+
+  /* Obtain pointers to the data for various vectors */
+  y_data     =  N_VGetArrayPointer(y);
+  gy_data    =  N_VGetArrayPointer(gy);
+  ewt_data   =  N_VGetArrayPointer(ark_mem->ark_ewt);
+  ytemp_data =  N_VGetArrayPointer(ytemp);
+  gtemp_data =  N_VGetArrayPointer(gtemp);
+
+  /* Set minimum increment based on uround and norm of g */
+  /* gnorm = N_VWrmsNorm(gy, ark_mem->ark_ewt); */
+  gnorm = N_VWrmsNorm(gy, ark_mem->ark_rwt);
+  minInc = (gnorm != ZERO) ? (MIN_INC_MULT * SUNRabs(ark_mem->ark_h) *
+			      ark_mem->ark_uround * pdata->n_local * gnorm) : ONE;
+
+  /* Set bandwidth and number of column groups for band differencing */
+  width = pdata->mldq + pdata->mudq + 1;
+  ngroups = SUNMIN(width, pdata->n_local);
+
+  /* Loop over groups */  
+  for (group=1; group <= ngroups; group++) {
+    
+    /* Increment all y_j in group */
+    for(j=group-1; j < pdata->n_local; j+=width) {
+      inc = SUNMAX(pdata->dqrely*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      ytemp_data[j] += inc;
+    }
+
+    /* Evaluate g with incremented y */
+    retval = pdata->gloc(pdata->n_local, t, ytemp, gtemp, 
+			 ark_mem->ark_user_data);
+    pdata->nge++;
+    if (retval != 0) return(retval);
+
+    /* Restore ytemp, then form and load difference quotients */
+    for (j=group-1; j < pdata->n_local; j+=width) {
+      ytemp_data[j] = y_data[j];
+      col_j = BAND_COL(pdata->savedJ,j);
+      inc = SUNMAX(pdata->dqrely*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-pdata->mukeep);
+      i2 = SUNMIN(j+pdata->mlkeep, pdata->n_local-1);
+      for (i=i1; i <= i2; i++)
+        BAND_COL_ELEM(col_j,i,j) =
+          inc_inv * (gtemp_data[i] - gy_data[i]);
+    }
+  }
+
+  return(0);
+}
+
+
+
+/*---------------------------------------------------------------
+    EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_bbdpre_impl.h b/src/arkode/arkode_bbdpre_impl.h
new file mode 100644
index 0000000..d546867
--- /dev/null
+++ b/src/arkode/arkode_bbdpre_impl.h
@@ -0,0 +1,77 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Implementation header file for the ARKBBDPRE module.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKBBDPRE_IMPL_H
+#define _ARKBBDPRE_IMPL_H
+
+#include <arkode/arkode_bbdpre.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*---------------------------------------------------------------
+ Type: ARKBBDPrecData
+---------------------------------------------------------------*/
+typedef struct ARKBBDPrecDataRec {
+
+  /* passed by user to ARKBBDPrecAlloc and used by PrecSetup/PrecSolve */
+  long int mudq, mldq, mukeep, mlkeep;
+  realtype dqrely;
+  ARKLocalFn gloc;
+  ARKCommFn cfn;
+
+  /* set by ARKBBDPrecSetup and used by ARKBBDPrecSolve */
+  DlsMat savedJ;
+  DlsMat savedP;
+  long int *lpivots;
+
+  /* set by ARKBBDPrecAlloc and used by ARKBBDPrecSetup */
+  long int n_local;
+
+  /* available for optional output */
+  long int rpwsize;
+  long int ipwsize;
+  long int nge;
+
+  /* pointer to arkode_mem */
+  void *arkode_mem;
+
+} *ARKBBDPrecData;
+
+
+/*---------------------------------------------------------------
+ ARKBBDPRE error messages
+---------------------------------------------------------------*/
+
+#define MSGBBD_MEM_NULL    "Integrator memory is NULL."
+#define MSGBBD_LMEM_NULL   "Linear solver memory is NULL. One of the SPILS linear solvers must be attached."
+#define MSGBBD_MEM_FAIL    "A memory request failed."
+#define MSGBBD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGBBD_PMEM_NULL   "BBD peconditioner memory is NULL. ARKBBDPrecInit must be called."
+#define MSGBBD_FUNC_FAILED "The gloc or cfn routine failed in an unrecoverable manner."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/arkode/arkode_butcher.c b/src/arkode/arkode_butcher.c
new file mode 100644
index 0000000..065dabf
--- /dev/null
+++ b/src/arkode/arkode_butcher.c
@@ -0,0 +1,1038 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for the known Butcher tables 
+ * for the ARKODE solver.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "arkode_impl.h"
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+
+/*---------------------------------------------------------------
+ Returns butcher table for Runge Kutta methods.  
+ Input:
+     imeth -- integer key for the desired method (see below)
+ Outputs:
+     s -- int number of stages for the requested method [s <= ARK_S_MAX = 8]
+     q -- integer, theoretical order of accuracy for the method
+     p -- integer, theoretical order of accuracy for the embedding
+     A[s][s] -- realtype Butcher table coefficients
+     b[s] -- realtype root node coefficients
+     c[s] -- realtype canopy node coefficients
+     b2[s] -- realtype embedding coefficients
+
+ Allowed 'method' names and properties (those in an ARK pair are marked 
+ with a *).  All method names are of the form <name>_s_p_q:
+
+   imeth                       type  A-stable  L-stable
+  ------------------------------------------------------
+   HEUN_EULER_2_1_2             ERK     N         N 
+   BOGACKI_SHAMPINE_4_2_3       ERK     N         N 
+   ARK324L2SA_ERK_4_2_3*        ERK     N         N 
+   ZONNEVELD_5_3_4              ERK     N         N 
+   ARK436L2SA_ERK_6_3_4*        ERK     N         N 
+   SAYFY_ABURUB_6_3_4           ERK     N         N 
+   CASH_KARP_6_4_5              ERK     N         N 
+   FEHLBERG_6_4_5               ERK     N         N 
+   DORMAND_PRINCE_7_4_5         ERK     N         N 
+   ARK548L2SA_ERK_8_4_5*        ERK     N         N 
+   VERNER_8_5_6                 ERK     N         N 
+   FEHLBERG_13_7_8              ERK     N         N 
+   SDIRK_2_1_2                SDIRK     Y         N 
+   BILLINGTON_3_3_2           SDIRK     N         N
+   TRBDF2_3_3_2              ESDIRK     N         N
+   KVAERNO_4_2_3             ESDIRK     Y         Y
+   ARK324L2SA_DIRK_4_2_3*    ESDIRK     Y         Y 
+   CASH_5_2_4                 SDIRK     Y         Y 
+   CASH_5_3_4                 SDIRK     Y         Y  
+   SDIRK_5_3_4                SDIRK     Y         Y  
+   KVAERNO_5_3_4             ESDIRK     Y         N 
+   ARK436L2SA_DIRK_6_3_4*    ESDIRK     Y         Y  
+   KVAERNO_7_4_5             ESDIRK     Y         Y  
+   ARK548L2SA_DIRK_8_4_5*    ESDIRK     Y         Y  
+  ------------------------------------------------------
+
+---------------------------------------------------------------*/
+int ARKodeLoadButcherTable(int imethod, int *s, int *q, int *p, 
+			   realtype *A, realtype *b, 
+			   realtype *c, realtype *b2) 
+{
+
+  int i, j;
+  realtype one = RCONST(1.0);
+  realtype two = RCONST(2.0);
+  realtype three = RCONST(3.0);
+  realtype four = RCONST(4.0);
+  realtype six = RCONST(6.0);
+  realtype sqrt2 = SUNRsqrt(two);
+
+  /* initialize output tables to zero */
+  for (i=0; i<ARK_S_MAX; i++) {
+    b[i]  = ZERO;
+    c[i]  = ZERO;
+    b2[i] = ZERO;
+    for (j=0; j<ARK_S_MAX; j++)  ARK_A(A,i,j) = ZERO;
+  }
+
+  /* fill in coefficients based on method name */
+  switch(imethod) {
+
+  case(HEUN_EULER_2_1_2):    /* Heun-Euler-ERK */
+    *s = 2;
+    *q = 2;
+    *p = 1;
+      
+    ARK_A(A,1,0) = RCONST(1.0);
+
+    b[0] = RCONST(0.5);
+    b[1] = RCONST(0.5);
+
+    b2[0] = RCONST(1.0);
+
+    c[1] = RCONST(1.0);
+    break;
+
+  case(BOGACKI_SHAMPINE_4_2_3):    /* Bogacki-Shampine-ERK */
+    *s = 4;
+    *q = 3;
+    *p = 2;
+    ARK_A(A,1,0) = RCONST(1.0)/RCONST(2.0);
+    ARK_A(A,2,1) = RCONST(3.0)/RCONST(4.0);
+    ARK_A(A,3,0) = RCONST(2.0)/RCONST(9.0);
+    ARK_A(A,3,1) = RCONST(1.0)/RCONST(3.0);
+    ARK_A(A,3,2) = RCONST(4.0)/RCONST(9.0);
+
+    b[0] = RCONST(2.0)/RCONST(9.0);
+    b[1] = RCONST(1.0)/RCONST(3.0);
+    b[2] = RCONST(4.0)/RCONST(9.0);
+
+    b2[0] = RCONST(7.0)/RCONST(24.0);
+    b2[1] = RCONST(1.0)/RCONST(4.0);
+    b2[2] = RCONST(1.0)/RCONST(3.0);
+    b2[3] = RCONST(1.0)/RCONST(8.0);
+
+    c[1] = RCONST(1.0)/RCONST(2.0);
+    c[2] = RCONST(3.0)/RCONST(4.0);
+    c[3] = RCONST(1.0);
+    break;
+
+  case(ARK324L2SA_ERK_4_2_3):    /* ARK3(2)4L[2]SA-ERK */
+    *s = 4;
+    *q = 3;
+    *p = 2;
+    ARK_A(A,1,0) = RCONST(1767732205903.0)/RCONST(2027836641118.0);
+    ARK_A(A,2,0) = RCONST(5535828885825.0)/RCONST(10492691773637.0);
+    ARK_A(A,2,1) = RCONST(788022342437.0)/RCONST(10882634858940.0);
+    ARK_A(A,3,0) = RCONST(6485989280629.0)/RCONST(16251701735622.0);
+    ARK_A(A,3,1) = RCONST(-4246266847089.0)/RCONST(9704473918619.0);
+    ARK_A(A,3,2) = RCONST(10755448449292.0)/RCONST(10357097424841.0);
+
+    b[0] = RCONST(1471266399579.0)/RCONST(7840856788654.0);
+    b[1] = RCONST(-4482444167858.0)/RCONST(7529755066697.0);
+    b[2] = RCONST(11266239266428.0)/RCONST(11593286722821.0);
+    b[3] = RCONST(1767732205903.0)/RCONST(4055673282236.0);
+
+    b2[0] = RCONST(2756255671327.0)/RCONST(12835298489170.0);
+    b2[1] = RCONST(-10771552573575.0)/RCONST(22201958757719.0);
+    b2[2] = RCONST(9247589265047.0)/RCONST(10645013368117.0);
+    b2[3] = RCONST(2193209047091.0)/RCONST(5459859503100.0);
+
+    c[1] = RCONST(1767732205903.0)/RCONST(2027836641118.0);
+    c[2] = RCONST(3.0)/RCONST(5.0);
+    c[3] = RCONST(1.0);
+    break;
+
+  case(ZONNEVELD_5_3_4):    /* Zonneveld */
+    *s = 5;
+    *q = 4;
+    *p = 3;
+    ARK_A(A,1,0) = RCONST(0.5);
+    ARK_A(A,2,1) = RCONST(0.5);
+    ARK_A(A,3,2) = RCONST(1.0);
+    ARK_A(A,4,0) = RCONST(5.0)/RCONST(32.0);
+    ARK_A(A,4,1) = RCONST(7.0)/RCONST(32.0);
+    ARK_A(A,4,2) = RCONST(13.0)/RCONST(32.0);
+    ARK_A(A,4,3) = RCONST(-1.0)/RCONST(32.0);
+
+    b[0] = RCONST(1.0)/RCONST(6.0);
+    b[1] = RCONST(1.0)/RCONST(3.0);
+    b[2] = RCONST(1.0)/RCONST(3.0);
+    b[3] = RCONST(1.0)/RCONST(6.0);
+
+    b2[0] = RCONST(-1.0)/RCONST(2.0);
+    b2[1] = RCONST(7.0)/RCONST(3.0);
+    b2[2] = RCONST(7.0)/RCONST(3.0);
+    b2[3] = RCONST(13.0)/RCONST(6.0);
+    b2[4] = RCONST(-16.0)/RCONST(3.0);
+
+    c[1] = RCONST(0.5);
+    c[2] = RCONST(0.5);
+    c[3] = RCONST(1.0);
+    c[4] = RCONST(0.75);
+    break;
+
+  case(ARK436L2SA_ERK_6_3_4):    /* ARK4(3)6L[2]SA-ERK */
+    *s = 6;
+    *q = 4;
+    *p = 3;
+    ARK_A(A,1,0) = RCONST(0.5);
+    ARK_A(A,2,0) = RCONST(13861.0)/RCONST(62500.0);
+    ARK_A(A,2,1) = RCONST(6889.0)/RCONST(62500.0);
+    ARK_A(A,3,0) = RCONST(-116923316275.0)/RCONST(2393684061468.0);
+    ARK_A(A,3,1) = RCONST(-2731218467317.0)/RCONST(15368042101831.0);
+    ARK_A(A,3,2) = RCONST(9408046702089.0)/RCONST(11113171139209.0);
+    ARK_A(A,4,0) = RCONST(-451086348788.0)/RCONST(2902428689909.0);
+    ARK_A(A,4,1) = RCONST(-2682348792572.0)/RCONST(7519795681897.0);
+    ARK_A(A,4,2) = RCONST(12662868775082.0)/RCONST(11960479115383.0);
+    ARK_A(A,4,3) = RCONST(3355817975965.0)/RCONST(11060851509271.0);
+    ARK_A(A,5,0) = RCONST(647845179188.0)/RCONST(3216320057751.0);
+    ARK_A(A,5,1) = RCONST(73281519250.0)/RCONST(8382639484533.0);
+    ARK_A(A,5,2) = RCONST(552539513391.0)/RCONST(3454668386233.0);
+    ARK_A(A,5,3) = RCONST(3354512671639.0)/RCONST(8306763924573.0);
+    ARK_A(A,5,4) = RCONST(4040.0)/RCONST(17871.0);
+
+    b[0] = RCONST(82889.0)/RCONST(524892.0);
+    b[2] = RCONST(15625.0)/RCONST(83664.0);
+    b[3] = RCONST(69875.0)/RCONST(102672.0);
+    b[4] = RCONST(-2260.0)/RCONST(8211.0);
+    b[5] = RCONST(1.0)/RCONST(4.0);
+
+    b2[0] = RCONST(4586570599.0)/RCONST(29645900160.0);
+    b2[2] = RCONST(178811875.0)/RCONST(945068544.0);
+    b2[3] = RCONST(814220225.0)/RCONST(1159782912.0);
+    b2[4] = RCONST(-3700637.0)/RCONST(11593932.0);
+    b2[5] = RCONST(61727.0)/RCONST(225920.0);
+
+    c[1] = RCONST(1.0)/RCONST(2.0);
+    c[2] = RCONST(83.0)/RCONST(250.0);
+    c[3] = RCONST(31.0)/RCONST(50.0);
+    c[4] = RCONST(17.0)/RCONST(20.0);
+    c[5] = RCONST(1.0);
+    break;
+
+  case(SAYFY_ABURUB_6_3_4):    /* Sayfy-Aburub-4-3-ERK */
+    *s = 6;
+    *q = 4;
+    *p = 3;
+    ARK_A(A,1,0) = RCONST(1.0)/RCONST(2.0); 
+    ARK_A(A,2,0) = RCONST(-1.0); 
+    ARK_A(A,2,1) = RCONST(2.0); 
+    ARK_A(A,3,0) = RCONST(1.0)/RCONST(6.0);
+    ARK_A(A,3,1) = RCONST(2.0)/RCONST(3.0);
+    ARK_A(A,3,2) = RCONST(1.0)/RCONST(6.0);
+    ARK_A(A,4,0) = RCONST(0.137);
+    ARK_A(A,4,1) = RCONST(0.226);
+    ARK_A(A,4,2) = RCONST(0.137);
+    ARK_A(A,5,0) = RCONST(0.452);
+    ARK_A(A,5,1) = RCONST(-0.904);
+    ARK_A(A,5,2) = RCONST(-0.548);
+    ARK_A(A,5,4) = RCONST(2.0);
+
+    b[0] = RCONST(1.0)/RCONST(6.0);
+    b[1] = RCONST(1.0)/RCONST(3.0);
+    b[2] = RCONST(1.0)/RCONST(12.0);
+    b[3] = RCONST(0.0);
+    b[4] = RCONST(1.0)/RCONST(3.0);
+    b[5] = RCONST(1.0)/RCONST(12.0);
+
+    b2[0] = RCONST(1.0)/RCONST(6.0);
+    b2[1] = RCONST(2.0)/RCONST(3.0);
+    b2[2] = RCONST(1.0)/RCONST(6.0);
+
+    c[1] = RCONST(1.0)/RCONST(2.0);
+    c[2] = RCONST(1.0);
+    c[3] = RCONST(1.0);
+    c[4] = RCONST(1.0)/RCONST(2.0);
+    c[5] = RCONST(1.0);
+    break;
+
+  case(CASH_KARP_6_4_5):    /* Cash-Karp-ERK */
+    *s = 6;
+    *q = 5;
+    *p = 4;
+    ARK_A(A,1,0) = RCONST(1.0)/RCONST(5.0);
+    ARK_A(A,2,0) = RCONST(3.0)/RCONST(40.0);
+    ARK_A(A,2,1) = RCONST(9.0)/RCONST(40.0);
+    ARK_A(A,3,0) = RCONST(3.0)/RCONST(10.0);
+    ARK_A(A,3,1) = RCONST(-9.0)/RCONST(10.0);
+    ARK_A(A,3,2) = RCONST(6.0)/RCONST(5.0);
+    ARK_A(A,4,0) = RCONST(-11.0)/RCONST(54.0);
+    ARK_A(A,4,1) = RCONST(5.0)/RCONST(2.0);
+    ARK_A(A,4,2) = RCONST(-70.0)/RCONST(27.0);
+    ARK_A(A,4,3) = RCONST(35.0)/RCONST(27.0);
+    ARK_A(A,5,0) = RCONST(1631.0)/RCONST(55296.0);
+    ARK_A(A,5,1) = RCONST(175.0)/RCONST(512.0);
+    ARK_A(A,5,2) = RCONST(575.0)/RCONST(13824.0);
+    ARK_A(A,5,3) = RCONST(44275.0)/RCONST(110592.0);
+    ARK_A(A,5,4) = RCONST(253.0)/RCONST(4096.0);
+
+    b[0] = RCONST(37.0)/RCONST(378.0);
+    b[2] = RCONST(250.0)/RCONST(621.0);
+    b[3] = RCONST(125.0)/RCONST(594.0);
+    b[5] = RCONST(512.0)/RCONST(1771.0);
+
+    b2[0] = RCONST(2825.0)/RCONST(27648.0);
+    b2[2] = RCONST(18575.0)/RCONST(48384.0);
+    b2[3] = RCONST(13525.0)/RCONST(55296.0);
+    b2[4] = RCONST(277.0)/RCONST(14336.0);
+    b2[5] = RCONST(1.0)/RCONST(4.0);
+
+    c[1] = RCONST(1.0)/RCONST(5.0);
+    c[2] = RCONST(3.0)/RCONST(10.0);
+    c[3] = RCONST(3.0)/RCONST(5.0);
+    c[4] = RCONST(1.0);
+    c[5] = RCONST(7.0)/RCONST(8.0);
+    break;
+
+  case(FEHLBERG_6_4_5):    /* Fehlberg-ERK */
+    *s = 6;
+    *q = 5;
+    *p = 4;
+    ARK_A(A,1,0) = RCONST(1.0)/RCONST(4.0);
+    ARK_A(A,2,0) = RCONST(3.0)/RCONST(32.0);
+    ARK_A(A,2,1) = RCONST(9.0)/RCONST(32.0);
+    ARK_A(A,3,0) = RCONST(1932.0)/RCONST(2197.0);
+    ARK_A(A,3,1) = RCONST(-7200.0)/RCONST(2197.0);
+    ARK_A(A,3,2) = RCONST(7296.0)/RCONST(2197.0);
+    ARK_A(A,4,0) = RCONST(439.0)/RCONST(216.0);
+    ARK_A(A,4,1) = RCONST(-8.0);
+    ARK_A(A,4,2) = RCONST(3680.0)/RCONST(513.0);
+    ARK_A(A,4,3) = RCONST(-845.0)/RCONST(4104.0);
+    ARK_A(A,5,0) = RCONST(-8.0)/RCONST(27.0);
+    ARK_A(A,5,1) = RCONST(2.0);
+    ARK_A(A,5,2) = RCONST(-3544.0)/RCONST(2565.0);
+    ARK_A(A,5,3) = RCONST(1859.0)/RCONST(4104.0);
+    ARK_A(A,5,4) = RCONST(-11.0)/RCONST(40.0);
+
+    b[0] = RCONST(16.0)/RCONST(135.0);
+    b[2] = RCONST(6656.0)/RCONST(12825.0);
+    b[3] = RCONST(28561.0)/RCONST(56430.0);
+    b[4] = RCONST(-9.0)/RCONST(50.0);
+    b[5] = RCONST(2.0)/RCONST(55.0);
+
+    b2[0] = RCONST(25.0)/RCONST(216.0);
+    b2[2] = RCONST(1408.0)/RCONST(2565.0);
+    b2[3] = RCONST(2197.0)/RCONST(4104.0);
+    b2[4] = RCONST(-1.0)/RCONST(5.0);
+      
+    c[1] = RCONST(1.0)/RCONST(4.0);
+    c[2] = RCONST(3.0)/RCONST(8.0);
+    c[3] = RCONST(12.0)/RCONST(13.0);
+    c[4] = RCONST(1.0);
+    c[5] = RCONST(1.0)/RCONST(2.0);
+    break;
+
+  case(DORMAND_PRINCE_7_4_5):    /* Dormand-Prince-ERK */
+    *s = 7;
+    *q = 5;
+    *p = 4;
+    ARK_A(A,1,0) = RCONST(1.0)/RCONST(5.0);
+    ARK_A(A,2,0) = RCONST(3.0)/RCONST(40.0);
+    ARK_A(A,2,1) = RCONST(9.0)/RCONST(40.0);
+    ARK_A(A,3,0) = RCONST(44.0)/RCONST(45.0);
+    ARK_A(A,3,1) = RCONST(-56.0)/RCONST(15.0);
+    ARK_A(A,3,2) = RCONST(32.0)/RCONST(9.0);
+    ARK_A(A,4,0) = RCONST(19372.0)/RCONST(6561.0);
+    ARK_A(A,4,1) = RCONST(-25360.0)/RCONST(2187.0);
+    ARK_A(A,4,2) = RCONST(64448.0)/RCONST(6561.0);
+    ARK_A(A,4,3) = RCONST(-212.0)/RCONST(729.0);
+    ARK_A(A,5,0) = RCONST(9017.0)/RCONST(3168.0);
+    ARK_A(A,5,1) = RCONST(-355.0)/RCONST(33.0);
+    ARK_A(A,5,2) = RCONST(46732.0)/RCONST(5247.0);
+    ARK_A(A,5,3) = RCONST(49.0)/RCONST(176.0);
+    ARK_A(A,5,4) = RCONST(-5103.0)/RCONST(18656.0);
+    ARK_A(A,6,0) = RCONST(35.0)/RCONST(384.0);
+    ARK_A(A,6,2) = RCONST(500.0)/RCONST(1113.0);
+    ARK_A(A,6,3) = RCONST(125.0)/RCONST(192.0);
+    ARK_A(A,6,4) = RCONST(-2187.0)/RCONST(6784.0);
+    ARK_A(A,6,5) = RCONST(11.0)/RCONST(84.0);
+
+    b[0] = RCONST(35.0)/RCONST(384.0);
+    b[2] = RCONST(500.0)/RCONST(1113.0);
+    b[3] = RCONST(125.0)/RCONST(192.0);
+    b[4] = RCONST(-2187.0)/RCONST(6784.0);
+    b[5] = RCONST(11.0)/RCONST(84.0);
+
+    b2[0] = RCONST(5179.0)/RCONST(57600.0);
+    b2[2] = RCONST(7571.0)/RCONST(16695.0);
+    b2[3] = RCONST(393.0)/RCONST(640.0);
+    b2[4] = RCONST(-92097.0)/RCONST(339200.0);
+    b2[5] = RCONST(187.0)/RCONST(2100.0);
+    b2[6] = RCONST(1.0)/RCONST(40.0);
+
+    c[1] = RCONST(1.0)/RCONST(5.0);
+    c[2] = RCONST(3.0)/RCONST(10.0);
+    c[3] = RCONST(4.0)/RCONST(5.0);
+    c[4] = RCONST(8.0)/RCONST(9.0);
+    c[5] = RCONST(1.0);
+    c[6] = RCONST(1.0);
+    break;
+
+  case(ARK548L2SA_ERK_8_4_5):    /* ARK5(4)8L[2]SA-ERK */
+    *s = 8;
+    *q = 5;
+    *p = 4;
+    ARK_A(A,1,0) = RCONST(41.0)/RCONST(100.0);
+    ARK_A(A,2,0) = RCONST(367902744464.0)/RCONST(2072280473677.0);
+    ARK_A(A,2,1) = RCONST(677623207551.0)/RCONST(8224143866563.0);
+    ARK_A(A,3,0) = RCONST(1268023523408.0)/RCONST(10340822734521.0);
+    ARK_A(A,3,2) = RCONST(1029933939417.0)/RCONST(13636558850479.0);
+    ARK_A(A,4,0) = RCONST(14463281900351.0)/RCONST(6315353703477.0);
+    ARK_A(A,4,2) = RCONST(66114435211212.0)/RCONST(5879490589093.0);
+    ARK_A(A,4,3) = RCONST(-54053170152839.0)/RCONST(4284798021562.0);
+    ARK_A(A,5,0) = RCONST(14090043504691.0)/RCONST(34967701212078.0);
+    ARK_A(A,5,2) = RCONST(15191511035443.0)/RCONST(11219624916014.0);
+    ARK_A(A,5,3) = RCONST(-18461159152457.0)/RCONST(12425892160975.0);
+    ARK_A(A,5,4) = RCONST(-281667163811.0)/RCONST(9011619295870.0);
+    ARK_A(A,6,0) = RCONST(19230459214898.0)/RCONST(13134317526959.0);
+    ARK_A(A,6,2) = RCONST(21275331358303.0)/RCONST(2942455364971.0);
+    ARK_A(A,6,3) = RCONST(-38145345988419.0)/RCONST(4862620318723.0);
+    ARK_A(A,6,4) = RCONST(-1.0)/RCONST(8.0);
+    ARK_A(A,6,5) = RCONST(-1.0)/RCONST(8.0);
+    ARK_A(A,7,0) = RCONST(-19977161125411.0)/RCONST(11928030595625.0);
+    ARK_A(A,7,2) = RCONST(-40795976796054.0)/RCONST(6384907823539.0);
+    ARK_A(A,7,3) = RCONST(177454434618887.0)/RCONST(12078138498510.0);
+    ARK_A(A,7,4) = RCONST(782672205425.0)/RCONST(8267701900261.0);
+    ARK_A(A,7,5) = RCONST(-69563011059811.0)/RCONST(9646580694205.0);
+    ARK_A(A,7,6) = RCONST(7356628210526.0)/RCONST(4942186776405.0);
+
+    b[0] = RCONST(-872700587467.0)/RCONST(9133579230613.0);
+    b[3] = RCONST(22348218063261.0)/RCONST(9555858737531.0);
+    b[4] = RCONST(-1143369518992.0)/RCONST(8141816002931.0);
+    b[5] = RCONST(-39379526789629.0)/RCONST(19018526304540.0);
+    b[6] = RCONST(32727382324388.0)/RCONST(42900044865799.0);
+    b[7] = RCONST(41.0)/RCONST(200.0);
+
+    b2[0] = RCONST(-975461918565.0)/RCONST(9796059967033.0);
+    b2[3] = RCONST(78070527104295.0)/RCONST(32432590147079.0);
+    b2[4] = RCONST(-548382580838.0)/RCONST(3424219808633.0);
+    b2[5] = RCONST(-33438840321285.0)/RCONST(15594753105479.0);
+    b2[6] = RCONST(3629800801594.0)/RCONST(4656183773603.0);
+    b2[7] = RCONST(4035322873751.0)/RCONST(18575991585200.0);
+
+    c[1] = RCONST(41.0)/RCONST(100.0);
+    c[2] = RCONST(2935347310677.0)/RCONST(11292855782101.0);
+    c[3] = RCONST(1426016391358.0)/RCONST(7196633302097.0);
+    c[4] = RCONST(92.0)/RCONST(100.0);
+    c[5] = RCONST(24.0)/RCONST(100.0);
+    c[6] = RCONST(3.0)/RCONST(5.0);
+    c[7] = RCONST(1.0);
+    break;
+
+  case(VERNER_8_5_6):    /* Verner-6-5 */
+    *s = 8;
+    *q = 6;
+    *p = 5;
+    ARK_A(A,1,0) = RCONST(1.0)/RCONST(6.0);
+    ARK_A(A,2,0) = RCONST(4.0)/RCONST(75.0);
+    ARK_A(A,2,1) = RCONST(16.0)/RCONST(75.0);
+    ARK_A(A,3,0) = RCONST(5.0)/RCONST(6.0);
+    ARK_A(A,3,1) = RCONST(-8.0)/RCONST(3.0);
+    ARK_A(A,3,2) = RCONST(5.0)/RCONST(2.0);
+    ARK_A(A,4,0) = RCONST(-165.0)/RCONST(64.0);
+    ARK_A(A,4,1) = RCONST(55.0)/RCONST(6.0);
+    ARK_A(A,4,2) = RCONST(-425.0)/RCONST(64.0);
+    ARK_A(A,4,3) = RCONST(85.0)/RCONST(96.0);
+    ARK_A(A,5,0) = RCONST(12.0)/RCONST(5.0);
+    ARK_A(A,5,1) = RCONST(-8.0);
+    ARK_A(A,5,2) = RCONST(4015.0)/RCONST(612.0);
+    ARK_A(A,5,3) = RCONST(-11.0)/RCONST(36.0);
+    ARK_A(A,5,4) = RCONST(88.0)/RCONST(255.0);
+    ARK_A(A,6,0) = RCONST(-8263.0)/RCONST(15000.0);
+    ARK_A(A,6,1) = RCONST(124.0)/RCONST(75.0);
+    ARK_A(A,6,2) = RCONST(-643.0)/RCONST(680.0);
+    ARK_A(A,6,3) = RCONST(-81.0)/RCONST(250.0);
+    ARK_A(A,6,4) = RCONST(2484.0)/RCONST(10625.0);
+    ARK_A(A,7,0) = RCONST(3501.0)/RCONST(1720.0);
+    ARK_A(A,7,1) = RCONST(-300.0)/RCONST(43.0);
+    ARK_A(A,7,2) = RCONST(297275.0)/RCONST(52632.0);
+    ARK_A(A,7,3) = RCONST(-319.0)/RCONST(2322.0);
+    ARK_A(A,7,4) = RCONST(24068.0)/RCONST(84065.0);
+    ARK_A(A,7,6) = RCONST(3850.0)/RCONST(26703.0);
+
+    b[0] = RCONST(3.0)/RCONST(40.0);
+    b[2] = RCONST(875.0)/RCONST(2244.0);
+    b[3] = RCONST(23.0)/RCONST(72.0);
+    b[4] = RCONST(264.0)/RCONST(1955.0);
+    b[6] = RCONST(125.0)/RCONST(11592.0);
+    b[7] = RCONST(43.0)/RCONST(616.0);
+
+    b2[0] = RCONST(13.0)/RCONST(160.0);
+    b2[2] = RCONST(2375.0)/RCONST(5984.0);
+    b2[3] = RCONST(5.0)/RCONST(16.0);
+    b2[4] = RCONST(12.0)/RCONST(85.0);
+    b2[5] = RCONST(3.0)/RCONST(44.0);
+
+    c[0] = RCONST(0.0);
+    c[1] = RCONST(1.0)/RCONST(6.0);
+    c[2] = RCONST(4.0)/RCONST(15.0);
+    c[3] = RCONST(2.0)/RCONST(3.0);
+    c[4] = RCONST(5.0)/RCONST(6.0);
+    c[5] = RCONST(1.0);
+    c[6] = RCONST(1.0)/RCONST(15.0);
+    c[7] = RCONST(1.0);
+    break;
+
+  case(FEHLBERG_13_7_8):    /* Fehlberg-8-7 */
+    *s = 13;
+    *q = 8;
+    *p = 7;
+    ARK_A(A,1,0) = RCONST(2.0)/RCONST(27.0);
+    ARK_A(A,2,0) = RCONST(1.0)/RCONST(36.0);
+    ARK_A(A,2,1) = RCONST(1.0)/RCONST(12.0);
+    ARK_A(A,3,0) = RCONST(1.0)/RCONST(24.0);
+    ARK_A(A,3,2) = RCONST(1.0)/RCONST(8.0);
+    ARK_A(A,4,0) = RCONST(5.0)/RCONST(12.0);
+    ARK_A(A,4,2) = RCONST(-25.0)/RCONST(16.0);
+    ARK_A(A,4,3) = RCONST(25.0)/RCONST(16.0);
+    ARK_A(A,5,0) = RCONST(1.0)/RCONST(20.0);
+    ARK_A(A,5,3) = RCONST(1.0)/RCONST(4.0);
+    ARK_A(A,5,4) = RCONST(1.0)/RCONST(5.0);
+    ARK_A(A,6,0) = RCONST(-25.0)/RCONST(108.0);
+    ARK_A(A,6,3) = RCONST(125.0)/RCONST(108.0);
+    ARK_A(A,6,4) = RCONST(-65.0)/RCONST(27.0);
+    ARK_A(A,6,5) = RCONST(125.0)/RCONST(54.0);
+    ARK_A(A,7,0) = RCONST(31.0)/RCONST(300.0);
+    ARK_A(A,7,4) = RCONST(61.0)/RCONST(225.0);
+    ARK_A(A,7,5) = RCONST(-2.0)/RCONST(9.0);
+    ARK_A(A,7,6) = RCONST(13.0)/RCONST(900.0);
+    ARK_A(A,8,0) = RCONST(2.0);
+    ARK_A(A,8,3) = RCONST(-53.0)/RCONST(6.0);
+    ARK_A(A,8,4) = RCONST(704.0)/RCONST(45.0);
+    ARK_A(A,8,5) = RCONST(-107.0)/RCONST(9.0);
+    ARK_A(A,8,6) = RCONST(67.0)/RCONST(90.0);
+    ARK_A(A,8,7) = RCONST(3.0);
+    ARK_A(A,9,0) = RCONST(-91.0)/RCONST(108.0);
+    ARK_A(A,9,3) = RCONST(23.0)/RCONST(108.0);
+    ARK_A(A,9,4) = RCONST(-976.0)/RCONST(135.0);
+    ARK_A(A,9,5) = RCONST(311.0)/RCONST(54.0);
+    ARK_A(A,9,6) = RCONST(-19.0)/RCONST(60.0);
+    ARK_A(A,9,7) = RCONST(17.0)/RCONST(6.0);
+    ARK_A(A,9,8) = RCONST(-1.0)/RCONST(12.0);
+    ARK_A(A,10,0) = RCONST(2383.0)/RCONST(4100.0);
+    ARK_A(A,10,3) = RCONST(-341.0)/RCONST(164.0);
+    ARK_A(A,10,4) = RCONST(4496.0)/RCONST(1025.0);
+    ARK_A(A,10,5) = RCONST(-301.0)/RCONST(82.0);
+    ARK_A(A,10,6) = RCONST(2133.0)/RCONST(4100.0);
+    ARK_A(A,10,7) = RCONST(45.0)/RCONST(82.0);
+    ARK_A(A,10,8) = RCONST(45.0)/RCONST(164.0);
+    ARK_A(A,10,9) = RCONST(18.0)/RCONST(41.0);
+    ARK_A(A,11,0) = RCONST(3.0)/RCONST(205.0);
+    ARK_A(A,11,5) = RCONST(-6.0)/RCONST(41.0);
+    ARK_A(A,11,6) = RCONST(-3.0)/RCONST(205.0);
+    ARK_A(A,11,7) = RCONST(-3.0)/RCONST(41.0);
+    ARK_A(A,11,8) = RCONST(3.0)/RCONST(41.0);
+    ARK_A(A,11,9) = RCONST(6.0)/RCONST(41.0);
+    ARK_A(A,12,0) = RCONST(-1777.0)/RCONST(4100.0);
+    ARK_A(A,12,3) = RCONST(-341.0)/RCONST(164.0);
+    ARK_A(A,12,4) = RCONST(4496.0)/RCONST(1025.0);
+    ARK_A(A,12,5) = RCONST(-289.0)/RCONST(82.0);
+    ARK_A(A,12,6) = RCONST(2193.0)/RCONST(4100.0);
+    ARK_A(A,12,7) = RCONST(51.0)/RCONST(82.0);
+    ARK_A(A,12,8) = RCONST(33.0)/RCONST(164.0);
+    ARK_A(A,12,9) = RCONST(12.0)/RCONST(41.0);
+    ARK_A(A,12,11) = RCONST(1.0);
+
+    b[5]  = RCONST(34.0)/RCONST(105.0);
+    b[6]  = RCONST(9.0)/RCONST(35.0);
+    b[7]  = RCONST(9.0)/RCONST(35.0);
+    b[8]  = RCONST(9.0)/RCONST(280.0);
+    b[9]  = RCONST(9.0)/RCONST(280.0);
+    b[11] = RCONST(41.0)/RCONST(840.0);
+    b[12] = RCONST(41.0)/RCONST(840.0);
+
+    b2[0]  = RCONST(41.0)/RCONST(840.0);
+    b2[5]  = RCONST(34.0)/RCONST(105.0);
+    b2[6]  = RCONST(9.0)/RCONST(35.0);
+    b2[7]  = RCONST(9.0)/RCONST(35.0);
+    b2[8]  = RCONST(9.0)/RCONST(280.0);
+    b2[9]  = RCONST(9.0)/RCONST(280.0);
+    b2[10] = RCONST(41.0)/RCONST(840.0);
+
+    c[1]  = RCONST(2.0)/RCONST(27.0);
+    c[2]  = RCONST(1.0)/RCONST(9.0);
+    c[3]  = RCONST(1.0)/RCONST(6.0);
+    c[4]  = RCONST(5.0)/RCONST(12.0);
+    c[5]  = RCONST(1.0)/RCONST(2.0);
+    c[6]  = RCONST(5.0)/RCONST(6.0);
+    c[7]  = RCONST(1.0)/RCONST(6.0);
+    c[8]  = RCONST(2.0)/RCONST(3.0);
+    c[9]  = RCONST(1.0)/RCONST(3.0);
+    c[10] = RCONST(1.0);
+    c[12] = RCONST(1.0);
+    break;
+
+  case(SDIRK_2_1_2):   /* SDIRK-2-1 (A,B stable) */
+    *s = 2;
+    *q = 2;
+    *p = 1;
+      
+    ARK_A(A,0,0) = RCONST(1.0);
+    ARK_A(A,1,0) = RCONST(-1.0);
+    ARK_A(A,1,1) = RCONST(1.0);
+
+    b[0] = RCONST(0.5);
+    b[1] = RCONST(0.5);
+
+    b2[0] = RCONST(1.0);
+
+    c[0] = RCONST(1.0);
+    c[1] = RCONST(0.0);
+    break;
+
+  case(BILLINGTON_3_3_2):    /* Billington-SDIRK */
+    *s = 3;
+    /* *q = 3; */
+    /* *p = 2; */
+    *q = 2;
+    *p = 3;
+
+    ARK_A(A,0,0) = RCONST(0.292893218813);
+    ARK_A(A,1,0) = RCONST(0.798989873223);
+    ARK_A(A,1,1) = RCONST(0.292893218813);
+    ARK_A(A,2,0) = RCONST(0.740789228841);
+    ARK_A(A,2,1) = RCONST(0.259210771159);
+    ARK_A(A,2,2) = RCONST(0.292893218813);
+
+    /* b[0] = RCONST(0.691665115992); */
+    /* b[1] = RCONST(0.503597029883); */
+    /* b[2] = RCONST(-0.195262145876); */
+
+    /* b2[0] = RCONST(0.740789228840); */
+    /* b2[1] = RCONST(0.259210771159); */
+
+    b2[0] = RCONST(0.691665115992);
+    b2[1] = RCONST(0.503597029883);
+    b2[2] = RCONST(-0.195262145876);
+
+    b[0] = RCONST(0.740789228840);
+    b[1] = RCONST(0.259210771159);
+
+    c[0] = RCONST(0.292893218813);
+    c[1] = RCONST(1.091883092037);
+    c[2] = RCONST(1.292893218813);
+    break;
+
+  case(TRBDF2_3_3_2):    /* TRBDF2-ESDIRK */
+    *s = 3;
+    /* *q = 3; */
+    /* *p = 2; */
+    *q = 2;
+    *p = 3;
+
+    ARK_A(A,1,0) = (two-sqrt2)/two;
+    ARK_A(A,1,1) = (two-sqrt2)/two;
+    ARK_A(A,2,0) = sqrt2/four;
+    ARK_A(A,2,1) = sqrt2/four;
+    ARK_A(A,2,2) = (two-sqrt2)/two;
+
+    /* b[0] = (one-sqrt2/four)/three; */
+    /* b[1] = (three*sqrt2/four+one)/three; */
+    /* b[2] = (two-sqrt2)/six; */
+
+    /* b2[0] = sqrt2/four; */
+    /* b2[1] = sqrt2/four; */
+    /* b2[2] = (two-sqrt2)/two; */
+
+    b2[0] = (one-sqrt2/four)/three;
+    b2[1] = (three*sqrt2/four+one)/three;
+    b2[2] = (two-sqrt2)/six;
+
+    b[0] = sqrt2/four;
+    b[1] = sqrt2/four;
+    b[2] = (two-sqrt2)/two;
+
+    c[1] = two-sqrt2;
+    c[2] = one;
+    break;
+
+  case(KVAERNO_4_2_3):    /* Kvaerno(4,2,3)-ESDIRK */
+    *s = 4;
+    *q = 3;
+    *p = 2;
+    ARK_A(A,1,0) = RCONST(0.4358665215);
+    ARK_A(A,1,1) = RCONST(0.4358665215);
+    ARK_A(A,2,0) = RCONST(0.490563388419108);
+    ARK_A(A,2,1) = RCONST(0.073570090080892);
+    ARK_A(A,2,2) = RCONST(0.4358665215);
+    ARK_A(A,3,0) = RCONST(0.308809969973036);
+    ARK_A(A,3,1) = RCONST(1.490563388254106);
+    ARK_A(A,3,2) = RCONST(-1.235239879727145);
+    ARK_A(A,3,3) = RCONST(0.4358665215);
+
+    b[0] = RCONST(0.308809969973036);
+    b[1] = RCONST(1.490563388254106);
+    b[2] = RCONST(-1.235239879727145);
+    b[3] = RCONST(0.4358665215);
+
+    b2[0] = RCONST(0.490563388419108);
+    b2[1] = RCONST(0.073570090080892);
+    b2[2] = RCONST(0.4358665215);
+
+    c[1] = RCONST(0.871733043);
+    c[2] = RCONST(1.0);
+    c[3] = RCONST(1.0);
+    break;
+
+  case(ARK324L2SA_DIRK_4_2_3):    /* ARK3(2)4L[2]SA-ESDIRK */
+    *s = 4;
+    *q = 3;
+    *p = 2;
+    ARK_A(A,1,0) = RCONST(1767732205903.0)/RCONST(4055673282236.0);
+    ARK_A(A,1,1) = RCONST(1767732205903.0)/RCONST(4055673282236.0);
+    ARK_A(A,2,0) = RCONST(2746238789719.0)/RCONST(10658868560708.0);
+    ARK_A(A,2,1) = RCONST(-640167445237.0)/RCONST(6845629431997.0);
+    ARK_A(A,2,2) = RCONST(1767732205903.0)/RCONST(4055673282236.0);
+    ARK_A(A,3,0) = RCONST(1471266399579.0)/RCONST(7840856788654.0);
+    ARK_A(A,3,1) = RCONST(-4482444167858.0)/RCONST(7529755066697.0);
+    ARK_A(A,3,2) = RCONST(11266239266428.0)/RCONST(11593286722821.0);
+    ARK_A(A,3,3) = RCONST(1767732205903.0)/RCONST(4055673282236.0);
+
+    b[0] = RCONST(1471266399579.0)/RCONST(7840856788654.0);
+    b[1] = RCONST(-4482444167858.0)/RCONST(7529755066697.0);
+    b[2] = RCONST(11266239266428.0)/RCONST(11593286722821.0);
+    b[3] = RCONST(1767732205903.0)/RCONST(4055673282236.0);
+
+    b2[0] = RCONST(2756255671327.0)/RCONST(12835298489170.0);
+    b2[1] = RCONST(-10771552573575.0)/RCONST(22201958757719.0);
+    b2[2] = RCONST(9247589265047.0)/RCONST(10645013368117.0);
+    b2[3] = RCONST(2193209047091.0)/RCONST(5459859503100.0);
+
+    c[1] = RCONST(1767732205903.0)/RCONST(2027836641118.0);
+    c[2] = RCONST(3.0)/RCONST(5.0);
+    c[3] = RCONST(1.0);
+    break;
+
+  case(CASH_5_2_4):    /* Cash(5,2,4)-SDIRK */
+    *s = 5;
+    *q = 4;
+    *p = 2;
+    ARK_A(A,0,0) = RCONST(0.435866521508);
+    ARK_A(A,1,0) = RCONST(-1.13586652150);
+    ARK_A(A,1,1) = RCONST(0.435866521508);
+    ARK_A(A,2,0) = RCONST(1.08543330679);
+    ARK_A(A,2,1) = RCONST(-0.721299828287);
+    ARK_A(A,2,2) = RCONST(0.435866521508);
+    ARK_A(A,3,0) = RCONST(0.416349501547);
+    ARK_A(A,3,1) = RCONST(0.190984004184);
+    ARK_A(A,3,2) = RCONST(-0.118643265417);
+    ARK_A(A,3,3) = RCONST(0.435866521508);
+    ARK_A(A,4,0) = RCONST(0.896869652944);
+    ARK_A(A,4,1) = RCONST(0.0182725272734);
+    ARK_A(A,4,2) = RCONST(-0.0845900310706);
+    ARK_A(A,4,3) = RCONST(-0.266418670647);
+    ARK_A(A,4,4) = RCONST(0.435866521508);
+
+    b[0] = RCONST(0.896869652944);
+    b[1] = RCONST(0.0182725272734);
+    b[2] = RCONST(-0.0845900310706);
+    b[3] = RCONST(-0.266418670647);
+    b[4] = RCONST(0.435866521508);
+
+    b2[0] = RCONST((-0.7-0.5))/RCONST((-0.7-0.435866521508));
+    b2[1] = RCONST((0.5-0.435866521508))/RCONST((-0.7-0.435866521508));
+
+    c[0] = RCONST(0.435866521508);
+    c[1] = RCONST(-0.7);
+    c[2] = RCONST(0.8);
+    c[3] = RCONST(0.924556761814);
+    c[4] = RCONST(1.0);
+    break;
+
+  case(CASH_5_3_4):    /* Cash(5,3,4)-SDIRK */
+    *s = 5;
+    *q = 4;
+    *p = 3;
+    ARK_A(A,0,0) = RCONST(0.435866521508);
+    ARK_A(A,1,0) = RCONST(-1.13586652150);
+    ARK_A(A,1,1) = RCONST(0.435866521508);
+    ARK_A(A,2,0) = RCONST(1.08543330679);
+    ARK_A(A,2,1) = RCONST(-0.721299828287);
+    ARK_A(A,2,2) = RCONST(0.435866521508);
+    ARK_A(A,3,0) = RCONST(0.416349501547);
+    ARK_A(A,3,1) = RCONST(0.190984004184);
+    ARK_A(A,3,2) = RCONST(-0.118643265417);
+    ARK_A(A,3,3) = RCONST(0.435866521508);
+    ARK_A(A,4,0) = RCONST(0.896869652944);
+    ARK_A(A,4,1) = RCONST(0.0182725272734);
+    ARK_A(A,4,2) = RCONST(-0.0845900310706);
+    ARK_A(A,4,3) = RCONST(-0.266418670647);
+    ARK_A(A,4,4) = RCONST(0.435866521508);
+
+    b[0] = RCONST(0.896869652944);
+    b[1] = RCONST(0.0182725272734);
+    b[2] = RCONST(-0.0845900310706);
+    b[3] = RCONST(-0.266418670647);
+    b[4] = RCONST(0.435866521508);
+
+    b2[0] = RCONST(0.776691932910);
+    b2[1] = RCONST(0.0297472791484);
+    b2[2] = RCONST(-0.0267440239074);
+    b2[3] = RCONST(0.220304811849);
+
+    c[0] = RCONST(0.435866521508);
+    c[1] = RCONST(-0.7);
+    c[2] = RCONST(0.8);
+    c[3] = RCONST(0.924556761814);
+    c[4] = RCONST(1.0);
+    break;
+
+  case(SDIRK_5_3_4):    /* SDIRK-5-4 */
+    *s = 5;
+    *q = 4;
+    *p = 3;
+    ARK_A(A,0,0) = RCONST(0.25);
+    ARK_A(A,1,0) = RCONST(0.5);
+    ARK_A(A,1,1) = RCONST(0.25);
+    ARK_A(A,2,0) = RCONST(17.0)/RCONST(50.0);
+    ARK_A(A,2,1) = RCONST(-1.0)/RCONST(25.0);
+    ARK_A(A,2,2) = RCONST(0.25);
+    ARK_A(A,3,0) = RCONST(371.0)/RCONST(1360.0);
+    ARK_A(A,3,1) = RCONST(-137.0)/RCONST(2720.0);
+    ARK_A(A,3,2) = RCONST(15.0)/RCONST(544.0);
+    ARK_A(A,3,3) = RCONST(0.25);
+    ARK_A(A,4,0) = RCONST(25.0)/RCONST(24.0);
+    ARK_A(A,4,1) = RCONST(-49.0)/RCONST(48.0);
+    ARK_A(A,4,2) = RCONST(125.0)/RCONST(16.0);
+    ARK_A(A,4,3) = RCONST(-85.0)/RCONST(12.0);
+    ARK_A(A,4,4) = RCONST(0.25);
+
+    b[0] = RCONST(25.0)/RCONST(24.0);
+    b[1] = RCONST(-49.0)/RCONST(48.0);
+    b[2] = RCONST(125.0)/RCONST(16.0);
+    b[3] = RCONST(-85.0)/RCONST(12.0);
+    b[4] = RCONST(0.25);
+
+    b2[0] = RCONST(59.0)/RCONST(48.0);
+    b2[1] = RCONST(-17.0)/RCONST(96.0);
+    b2[2] = RCONST(225.0)/RCONST(32.0);
+    b2[3] = RCONST(-85.0)/RCONST(12.0);
+
+    c[0] = RCONST(0.25);
+    c[1] = RCONST(0.75);
+    c[2] = RCONST(11.0)/RCONST(20.0);
+    c[3] = RCONST(0.5);
+    c[4] = RCONST(1.0);
+    break;
+
+  case(KVAERNO_5_3_4):    /* Kvaerno(5,3,4)-ESDIRK */
+    *s = 5;
+    *q = 4;
+    *p = 3;
+    ARK_A(A,1,0) = RCONST(0.4358665215); 
+    ARK_A(A,1,1) = RCONST(0.4358665215); 
+    ARK_A(A,2,0) = RCONST(0.140737774731968);
+    ARK_A(A,2,1) = RCONST(-0.108365551378832);
+    ARK_A(A,2,2) = RCONST(0.4358665215);
+    ARK_A(A,3,0) = RCONST(0.102399400616089);
+    ARK_A(A,3,1) = RCONST(-0.376878452267324);
+    ARK_A(A,3,2) = RCONST(0.838612530151233);
+    ARK_A(A,3,3) = RCONST(0.4358665215);
+    ARK_A(A,4,0) = RCONST(0.157024897860995);
+    ARK_A(A,4,1) = RCONST(0.117330441357768);
+    ARK_A(A,4,2) = RCONST(0.61667803039168);
+    ARK_A(A,4,3) = RCONST(-0.326899891110444);
+    ARK_A(A,4,4) = RCONST(0.4358665215);
+
+    b[0] = RCONST(0.157024897860995);
+    b[1] = RCONST(0.117330441357768);
+    b[2] = RCONST(0.61667803039168);
+    b[3] = RCONST(-0.326899891110444);
+    b[4] = RCONST(0.4358665215);
+
+    b2[0] = RCONST(0.102399400616089);
+    b2[1] = RCONST(-0.376878452267324);
+    b2[2] = RCONST(0.838612530151233);
+    b2[3] = RCONST(0.4358665215);
+
+    c[1] = RCONST(0.871733043);
+    c[2] = RCONST(0.468238744853136);
+    c[3] = RCONST(1.0);
+    c[4] = RCONST(1.0);
+    break;
+
+  case(ARK436L2SA_DIRK_6_3_4):    /* ARK4(3)6L[2]SA-ESDIRK */
+    *s = 6;
+    *q = 4;
+    *p = 3;
+    ARK_A(A,1,0) = RCONST(1.0)/RCONST(4.0);
+    ARK_A(A,1,1) = RCONST(1.0)/RCONST(4.0);
+    ARK_A(A,2,0) = RCONST(8611.0)/RCONST(62500.0);
+    ARK_A(A,2,1) = RCONST(-1743.0)/RCONST(31250.0);
+    ARK_A(A,2,2) = RCONST(1.0)/RCONST(4.0);
+    ARK_A(A,3,0) = RCONST(5012029.0)/RCONST(34652500.0);
+    ARK_A(A,3,1) = RCONST(-654441.0)/RCONST(2922500.0);
+    ARK_A(A,3,2) = RCONST(174375.0)/RCONST(388108.0);
+    ARK_A(A,3,3) = RCONST(1.0)/RCONST(4.0);
+    ARK_A(A,4,0) = RCONST(15267082809.0)/RCONST(155376265600.0);
+    ARK_A(A,4,1) = RCONST(-71443401.0)/RCONST(120774400.0);
+    ARK_A(A,4,2) = RCONST(730878875.0)/RCONST(902184768.0);
+    ARK_A(A,4,3) = RCONST(2285395.0)/RCONST(8070912.0);
+    ARK_A(A,4,4) = RCONST(1.0)/RCONST(4.0);
+    ARK_A(A,5,0) = RCONST(82889.0)/RCONST(524892.0);
+    ARK_A(A,5,2) = RCONST(15625.0)/RCONST(83664.0);
+    ARK_A(A,5,3) = RCONST(69875.0)/RCONST(102672.0);
+    ARK_A(A,5,4) = RCONST(-2260.0)/RCONST(8211.0);
+    ARK_A(A,5,5) = RCONST(1.0)/RCONST(4.0);
+
+    b[0] = RCONST(82889.0)/RCONST(524892.0);
+    b[2] = RCONST(15625.0)/RCONST(83664.0);
+    b[3] = RCONST(69875.0)/RCONST(102672.0);
+    b[4] = RCONST(-2260.0)/RCONST(8211.0);
+    b[5] = RCONST(1.0)/RCONST(4.0);
+
+    c[1] = RCONST(1.0)/RCONST(2.0);
+    c[2] = RCONST(83.0)/RCONST(250.0);
+    c[3] = RCONST(31.0)/RCONST(50.0);
+    c[4] = RCONST(17.0)/RCONST(20.0);
+    c[5] = RCONST(1.0);
+
+    b2[0] = RCONST(4586570599.0)/RCONST(29645900160.0);
+    b2[2] = RCONST(178811875.0)/RCONST(945068544.0);
+    b2[3] = RCONST(814220225.0)/RCONST(1159782912.0);
+    b2[4] = RCONST(-3700637.0)/RCONST(11593932.0);
+    b2[5] = RCONST(61727.0)/RCONST(225920.0);
+    break;
+
+  case(KVAERNO_7_4_5):    /* Kvaerno(7,4,5)-ESDIRK */
+    *s = 7;
+    *q = 5;
+    *p = 4;
+    ARK_A(A,1,0) = RCONST(0.26);
+    ARK_A(A,1,1) = RCONST(0.26);
+    ARK_A(A,2,0) = RCONST(0.13);
+    ARK_A(A,2,1) = RCONST(0.84033320996790809);
+    ARK_A(A,2,2) = RCONST(0.26);
+    ARK_A(A,3,0) = RCONST(0.22371961478320505);
+    ARK_A(A,3,1) = RCONST(0.47675532319799699);
+    ARK_A(A,3,2) = RCONST(-0.06470895363112615);
+    ARK_A(A,3,3) = RCONST(0.26);
+    ARK_A(A,4,0) = RCONST(0.16648564323248321);
+    ARK_A(A,4,1) = RCONST(0.10450018841591720);
+    ARK_A(A,4,2) = RCONST(0.03631482272098715);
+    ARK_A(A,4,3) = RCONST(-0.13090704451073998);
+    ARK_A(A,4,4) = RCONST(0.26);
+    ARK_A(A,5,0) = RCONST(0.13855640231268224);
+    ARK_A(A,5,2) = RCONST(-0.04245337201752043);
+    ARK_A(A,5,3) = RCONST(0.02446657898003141);
+    ARK_A(A,5,4) = RCONST(0.61943039072480676);
+    ARK_A(A,5,5) = RCONST(0.26);
+    ARK_A(A,6,0) = RCONST(0.13659751177640291);
+    ARK_A(A,6,2) = RCONST(-0.05496908796538376);
+    ARK_A(A,6,3) = RCONST(-0.04118626728321046);
+    ARK_A(A,6,4) = RCONST(0.62993304899016403);
+    ARK_A(A,6,5) = RCONST(0.06962479448202728);
+    ARK_A(A,6,6) = RCONST(0.26);
+
+    b[0] = RCONST(0.13659751177640291);
+    b[2] = RCONST(-0.05496908796538376);
+    b[3] = RCONST(-0.04118626728321046);
+    b[4] = RCONST(0.62993304899016403);
+    b[5] = RCONST(0.06962479448202728);
+    b[6] = RCONST(0.26);
+
+    b2[0] = RCONST(0.13855640231268224);
+    b2[2] = RCONST(-0.04245337201752043);
+    b2[3] = RCONST(0.02446657898003141);
+    b2[4] = RCONST(0.61943039072480676);
+    b2[5] = RCONST(0.26);
+
+    c[1] = RCONST(0.52);
+    c[2] = RCONST(1.230333209967908);
+    c[3] = RCONST(0.895765984350076);
+    c[4] = RCONST(0.436393609858648);
+    c[5] = RCONST(1.0);
+    c[6] = RCONST(1.0);
+    break;
+
+  case(ARK548L2SA_DIRK_8_4_5):    /* ARK5(4)8L[2]SA-ESDIRK */
+    *s = 8;
+    *q = 5;
+    *p = 4;
+    ARK_A(A,1,0) = RCONST(41.0)/RCONST(200.0);
+    ARK_A(A,1,1) = RCONST(41.0)/RCONST(200.0);
+    ARK_A(A,2,0) = RCONST(41.0)/RCONST(400.0);
+    ARK_A(A,2,1) = RCONST(-567603406766.0)/RCONST(11931857230679.0);
+    ARK_A(A,2,2) = RCONST(41.0)/RCONST(200.0);
+    ARK_A(A,3,0) = RCONST(683785636431.0)/RCONST(9252920307686.0);
+    ARK_A(A,3,2) = RCONST(-110385047103.0)/RCONST(1367015193373.0);
+    ARK_A(A,3,3) = RCONST(41.0)/RCONST(200.0);
+    ARK_A(A,4,0) = RCONST(3016520224154.0)/RCONST(10081342136671.0);
+    ARK_A(A,4,2) = RCONST(30586259806659.0)/RCONST(12414158314087.0);
+    ARK_A(A,4,3) = RCONST(-22760509404356.0)/RCONST(11113319521817.0);
+    ARK_A(A,4,4) = RCONST(41.0)/RCONST(200.0);
+    ARK_A(A,5,0) = RCONST(218866479029.0)/RCONST(1489978393911.0);
+    ARK_A(A,5,2) = RCONST(638256894668.0)/RCONST(5436446318841.0);
+    ARK_A(A,5,3) = RCONST(-1179710474555.0)/RCONST(5321154724896.0);
+    ARK_A(A,5,4) = RCONST(-60928119172.0)/RCONST(8023461067671.0);
+    ARK_A(A,5,5) = RCONST(41.0)/RCONST(200.0);
+    ARK_A(A,6,0) = RCONST(1020004230633.0)/RCONST(5715676835656.0);
+    ARK_A(A,6,2) = RCONST(25762820946817.0)/RCONST(25263940353407.0);
+    ARK_A(A,6,3) = RCONST(-2161375909145.0)/RCONST(9755907335909.0);
+    ARK_A(A,6,4) = RCONST(-211217309593.0)/RCONST(5846859502534.0);
+    ARK_A(A,6,5) = RCONST(-4269925059573.0)/RCONST(7827059040749.0);
+    ARK_A(A,6,6) = RCONST(41.0)/RCONST(200.0);
+    ARK_A(A,7,0) = RCONST(-872700587467.0)/RCONST(9133579230613.0);
+    ARK_A(A,7,3) = RCONST(22348218063261.0)/RCONST(9555858737531.0);
+    ARK_A(A,7,4) = RCONST(-1143369518992.0)/RCONST(8141816002931.0);
+    ARK_A(A,7,5) = RCONST(-39379526789629.0)/RCONST(19018526304540.0);
+    ARK_A(A,7,6) = RCONST(32727382324388.0)/RCONST(42900044865799.0);
+    ARK_A(A,7,7) = RCONST(41.0)/RCONST(200.0);
+
+    b[0] = RCONST(-872700587467.0)/RCONST(9133579230613.0);
+    b[3] = RCONST(22348218063261.0)/RCONST(9555858737531.0);
+    b[4] = RCONST(-1143369518992.0)/RCONST(8141816002931.0);
+    b[5] = RCONST(-39379526789629.0)/RCONST(19018526304540.0);
+    b[6] = RCONST(32727382324388.0)/RCONST(42900044865799.0);
+    b[7] = RCONST(41.0)/RCONST(200.0);
+
+    b2[0] = RCONST(-975461918565.0)/RCONST(9796059967033.0);
+    b2[3] = RCONST(78070527104295.0)/RCONST(32432590147079.0);
+    b2[4] = RCONST(-548382580838.0)/RCONST(3424219808633.0);
+    b2[5] = RCONST(-33438840321285.0)/RCONST(15594753105479.0);
+    b2[6] = RCONST(3629800801594.0)/RCONST(4656183773603.0);
+    b2[7] = RCONST(4035322873751.0)/RCONST(18575991585200.0);
+
+    c[1] = RCONST(41.0)/RCONST(100.0);
+    c[2] = RCONST(2935347310677.0)/RCONST(11292855782101.0);
+    c[3] = RCONST(1426016391358.0)/RCONST(7196633302097.0);
+    c[4] = RCONST(92.0)/RCONST(100.0);
+    c[5] = RCONST(24.0)/RCONST(100.0);
+    c[6] = RCONST(3.0)/RCONST(5.0);
+    c[7] = RCONST(1.0);
+    break;
+
+  default:
+
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeGetButcherTable", "Unknown Butcher table");
+    return(ARK_ILL_INPUT);
+
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+  EOF
+  ---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_dense.c b/src/arkode/arkode_dense.c
new file mode 100644
index 0000000..b472218
--- /dev/null
+++ b/src/arkode/arkode_dense.c
@@ -0,0 +1,613 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the impleentation file for the ARKDENSE linear solver.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <arkode/arkode_dense.h>
+#include "arkode_direct_impl.h"
+#include "arkode_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* ARKDENSE linit, lsetup, lsolve, and lfree routines */
+static int arkDenseInit(ARKodeMem ark_mem);
+static int arkDenseSetup(ARKodeMem ark_mem, int convfail, N_Vector ypred,
+			 N_Vector fpred, booleantype *jcurPtr, 
+			 N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+static int arkDenseSolve(ARKodeMem ark_mem, N_Vector b, N_Vector weight,
+			 N_Vector ycur, N_Vector fcur);
+static int arkDenseFree(ARKodeMem ark_mem);
+
+/* ARKDENSE minit, msetup, msolve, mfree and mtimes routines */
+static int arkMassDenseInit(ARKodeMem ark_mem);
+static int arkMassDenseSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			     N_Vector vtemp2, N_Vector vtemp3);
+static int arkMassDenseSolve(ARKodeMem ark_mem, N_Vector b, 
+			     N_Vector weight);
+static int arkMassDenseFree(ARKodeMem ark_mem);
+static int arkMassDenseMultiply(N_Vector v, N_Vector Mv, 
+				realtype t, void *arkode_mem);
+                
+                
+/*---------------------------------------------------------------
+ ARKDense:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the dense linear solver module.  
+ ARKDense first calls the existing lfree routine if this is not 
+ NULL.  Then it sets the ark_linit, ark_lsetup, ark_lsolve and
+ ark_lfree fields in (*arkode_mem) to be arkDenseInit, 
+ arkDenseSetup, arkDenseSolve, and arkDenseFree, respectively.  
+ It allocates memory for a structure of type ARKDlsMemRec and 
+ sets the ark_lmem field in (*arkode_mem) to the address of this 
+ structure.  It sets setupNonNull in (*arkode_mem) to TRUE, and 
+ the d_jac field to the default arkDlsDenseDQJac.  Finally, it
+ allocates memory for M, savedJ, and lpivots. The return value 
+ is SUCCESS = 0, or LMEM_FAIL = -1.
+
+ NOTE: The dense linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKDense will first 
+       test for compatible a compatible N_Vector internal
+       representation by checking that N_VGetArrayPointer and
+       N_VSetArrayPointer exist.
+---------------------------------------------------------------*/
+int ARKDense(void *arkode_mem, long int N)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDENSE", 
+                    "ARKDense", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the DENSE solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL ||
+      ark_mem->ark_tempv->ops->nvsetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKDENSE", 
+                    "ARKDense", MSGD_BAD_NVECTOR);
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree !=NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem */
+  ark_mem->ark_linit  = arkDenseInit;
+  ark_mem->ark_lsetup = arkDenseSetup;
+  ark_mem->ark_lsolve = arkDenseSolve;
+  ark_mem->ark_lfree  = arkDenseFree;
+  ark_mem->ark_lsolve_type = 1;
+
+  /* Get memory for ARKDlsMemRec */
+  arkdls_mem = NULL;
+  arkdls_mem = (ARKDlsMem) malloc(sizeof(struct ARKDlsMemRec));
+  if (arkdls_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKDENSE", 
+                    "ARKDense", MSGD_MEM_FAIL);
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  arkdls_mem->d_type = SUNDIALS_DENSE;
+
+  /* Initialize Jacobian-related data */
+  arkdls_mem->d_jacDQ  = TRUE;
+  arkdls_mem->d_djac   = NULL;
+  arkdls_mem->d_J_data = NULL;
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  ark_mem->ark_setupNonNull = TRUE;
+
+  /* Initialize counters */
+  arkDlsInitializeCounters(arkdls_mem);
+
+  /* Set problem dimension */
+  arkdls_mem->d_n = N;
+
+  /* Allocate memory for M, savedJ, and pivot array */
+  arkdls_mem->d_M = NULL;
+  arkdls_mem->d_M = NewDenseMat(N, N);
+  if (arkdls_mem->d_M == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKDENSE", 
+                    "ARKDense", MSGD_MEM_FAIL);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_savedJ = NULL;
+  arkdls_mem->d_savedJ = NewDenseMat(N, N);
+  if (arkdls_mem->d_savedJ == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKDENSE", 
+                    "ARKDense", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_lpivots = NULL;
+  arkdls_mem->d_lpivots = NewLintArray(N);
+  if (arkdls_mem->d_lpivots == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKDENSE", 
+                    "ARKDense", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    DestroyMat(arkdls_mem->d_savedJ);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_lmem = arkdls_mem;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkDenseInit:
+
+ This routine does remaining initializations specific to the 
+ dense linear solver.
+---------------------------------------------------------------*/
+static int arkDenseInit(ARKodeMem ark_mem)
+{
+  ARKDlsMem arkdls_mem;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+  
+  arkDlsInitializeCounters(arkdls_mem);
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (arkdls_mem->d_jacDQ) {
+    arkdls_mem->d_djac   = arkDlsDenseDQJac;
+    arkdls_mem->d_J_data = ark_mem;
+  } else {
+    arkdls_mem->d_J_data = ark_mem->ark_user_data;
+  }
+
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkDenseSetup:
+
+ This routine does the setup operations for the dense linear solver.
+ It makes a decision whether or not to call the Jacobian evaluation
+ routine based on various state variables, and if not it uses the 
+ saved copy.  In any case, it constructs the Newton matrix 
+ A = M - gamma*J, updates counters, and calls the dense LU 
+ factorization routine.
+---------------------------------------------------------------*/
+static int arkDenseSetup(ARKodeMem ark_mem, int convfail, 
+			 N_Vector ypred, N_Vector fpred, 
+			 booleantype *jcurPtr, N_Vector vtemp1, 
+			 N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma, *Acol_j, *Mcol_j;
+  long int i, j, ier;
+  ARKDlsMem arkdls_mem;
+  ARKDlsMassMem arkdls_mass_mem;
+  int retval;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+ 
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arkdls_mem->d_nstlj + ARKD_MSBJ) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKD_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  jok = !jbad;
+ 
+  /* If jok = TRUE, use saved copy of J */
+  if (jok) {
+    *jcurPtr = FALSE;
+    DenseCopy(arkdls_mem->d_savedJ, arkdls_mem->d_M);
+
+  /* If jok = FALSE, call jac routine for new J value */
+  } else {
+    arkdls_mem->d_nje++;
+    arkdls_mem->d_nstlj = ark_mem->ark_nst;
+    *jcurPtr = TRUE;
+    SetToZero(arkdls_mem->d_M);
+
+    retval = arkdls_mem->d_djac(arkdls_mem->d_n, ark_mem->ark_tn, 
+				ypred, fpred, arkdls_mem->d_M, 
+				arkdls_mem->d_J_data, 
+				vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKDLS_JACFUNC_UNRECVR, "ARKDENSE", 
+		      "arkDenseSetup",  MSGD_JACFUNC_FAILED);
+      arkdls_mem->d_last_flag = ARKDLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      arkdls_mem->d_last_flag = ARKDLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    DenseCopy(arkdls_mem->d_M, arkdls_mem->d_savedJ);
+
+  }
+  
+  /* Scale J by -gamma */
+  DenseScale(-ark_mem->ark_gamma, arkdls_mem->d_M);
+  
+  /* Add mass matrix to get A = M-gamma*J*/
+  if (ark_mem->ark_mass_matrix) {
+
+    /* Compute mass matrix */
+    arkdls_mass_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+    SetToZero(arkdls_mass_mem->d_M);
+    retval = arkdls_mass_mem->d_dmass(arkdls_mass_mem->d_n, 
+				      ark_mem->ark_tn, 
+				      arkdls_mass_mem->d_M, 
+				      arkdls_mass_mem->d_M_data, 
+				      vtemp1, vtemp2, vtemp3);
+    arkdls_mass_mem->d_nme++;
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKDLS_MASSFUNC_UNRECVR, "ARKDENSE", 
+		      "arkDenseSetup",  MSGD_MASSFUNC_FAILED);
+      arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_RECVR;
+      return(1);
+    }
+
+    /* Add to A */
+    for (j=0; j<arkdls_mem->d_M->N; j++) {
+      Acol_j = arkdls_mem->d_M->cols[j];
+      Mcol_j = arkdls_mass_mem->d_M->cols[j];
+      for (i=0; i<arkdls_mem->d_M->M; i++) 
+	Acol_j[i] += Mcol_j[i];
+    }
+  } else {
+    AddIdentity(arkdls_mem->d_M);
+  }
+
+  /* Do LU factorization of A */
+  ier = DenseGETRF(arkdls_mem->d_M, arkdls_mem->d_lpivots); 
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  arkdls_mem->d_last_flag = ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkDenseSolve:
+
+ This routine handles the solve operation for the dense linear 
+ solver by calling the dense backsolve routine.  The returned 
+ value is 0.
+---------------------------------------------------------------*/
+static int arkDenseSolve(ARKodeMem ark_mem, N_Vector b, 
+			 N_Vector weight, N_Vector ycur, 
+			 N_Vector fcur)
+{
+  ARKDlsMem arkdls_mem;
+  realtype *bd;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+  
+  bd = N_VGetArrayPointer(b);
+
+  DenseGETRS(arkdls_mem->d_M, arkdls_mem->d_lpivots, bd);
+
+  /* scale the correction to account for change in gamma */
+  if (ark_mem->ark_gamrat != ONE) 
+    N_VScale(TWO/(ONE + ark_mem->ark_gamrat), b, b);
+  
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkDenseFree:
+
+ This routine frees memory specific to the dense linear solver.
+---------------------------------------------------------------*/
+static int arkDenseFree(ARKodeMem ark_mem)
+{
+  ARKDlsMem  arkdls_mem;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+  
+  DestroyMat(arkdls_mem->d_M);
+  DestroyMat(arkdls_mem->d_savedJ);
+  DestroyArray(arkdls_mem->d_lpivots);
+  free(arkdls_mem);
+  ark_mem->ark_lmem = NULL;
+
+  return(0);
+}
+
+
+
+
+/*---------------------------------------------------------------
+ ARKMassDense:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the dense mass matrix linear solver
+ module.  ARKMassDense first calls the existing mfree routine if 
+ this is not NULL.  Then it sets the ark_minit, ark_msetup, 
+ ark_msolve, ark_mfree fields in (*arkode_mem) to be 
+ arkMassDenseInit, arkMassDenseSetup, arkMassDenseSolve, and 
+ arkMassDenseFree, respectively.  It allocates memory for a 
+ structure of type ARKDlsMassMemRec and sets the ark_mass_mem
+ field in (*arkode_mem) to the address of this structure.  It 
+ sets MassSetupNonNull in (*arkode_mem) to TRUE.  Finally, it 
+ allocates memory for M and lpivots. The return value is 
+ SUCCESS = 0, or LMEM_FAIL = -1.
+
+ NOTE: The dense linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKMassDense will first 
+       test for compatible a compatible N_Vector internal
+       representation by checking that N_VGetArrayPointer and
+       N_VSetArrayPointer exist.
+---------------------------------------------------------------*/
+int ARKMassDense(void *arkode_mem, long int N, ARKDlsDenseMassFn dmass)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDENSE", 
+		    "ARKMassDense", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the DENSE solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL ||
+      ark_mem->ark_tempv->ops->nvsetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKDENSE", 
+		    "ARKMassDense", MSGD_BAD_NVECTOR);
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree !=NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set four main function fields in ark_mem, enable mass matrix */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = arkMassDenseInit;
+  ark_mem->ark_msetup = arkMassDenseSetup;
+  ark_mem->ark_msolve = arkMassDenseSolve;
+  ark_mem->ark_mfree  = arkMassDenseFree;
+  ark_mem->ark_mtimes = arkMassDenseMultiply;
+  ark_mem->ark_mtimes_data = (void *) ark_mem;
+  ark_mem->ark_msolve_type = 1;
+
+  /* Get memory for ARKDlsMassMemRec */
+  arkdls_mem = NULL;
+  arkdls_mem = (ARKDlsMassMem) malloc(sizeof(struct ARKDlsMassMemRec));
+  if (arkdls_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKDENSE", 
+		    "ARKMassDense", MSGD_MEM_FAIL);
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  arkdls_mem->d_type = SUNDIALS_DENSE;
+
+  /* Initialize mass-matrix-related data */
+  arkdls_mem->d_nme = 0;
+  arkdls_mem->d_dmass = dmass;
+  arkdls_mem->d_M_data = NULL;
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  ark_mem->ark_MassSetupNonNull = TRUE;
+
+  /* Set problem dimension */
+  arkdls_mem->d_n = N;
+
+  /* Allocate memory for M, M_lu, and pivot array */
+  arkdls_mem->d_M = NULL;
+  arkdls_mem->d_M = NewDenseMat(N, N);
+  if (arkdls_mem->d_M == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKDENSE", 
+		    "ARKMassDense", MSGD_MEM_FAIL);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_M_lu = NULL;
+  arkdls_mem->d_M_lu = NewDenseMat(N, N);
+  if (arkdls_mem->d_M_lu == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKDENSE", 
+		    "ARKMassDense", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_lpivots = NULL;
+  arkdls_mem->d_lpivots = NewLintArray(N);
+  if (arkdls_mem->d_lpivots == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKDENSE", 
+		    "ARKMassDense", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    DestroyMat(arkdls_mem->d_M_lu);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_mass_mem = arkdls_mem;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassDenseInit:
+
+ This routine does remaining initializations specific to the 
+ dense linear solver.
+---------------------------------------------------------------*/
+static int arkMassDenseInit(ARKodeMem ark_mem)
+{
+  ARKDlsMassMem arkdls_mem;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  arkdls_mem->d_nme = 0;
+
+  /* Set mass matrix function data */
+  arkdls_mem->d_M_data = ark_mem->ark_user_data;
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassDenseSetup:
+
+ This routine does the setup operations for the dense mass matrix 
+ solver.  It calls the mass matrix evaluation, updates counters, 
+ and calls the dense LU factorization routine.
+---------------------------------------------------------------*/
+static int arkMassDenseSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			     N_Vector vtemp2, N_Vector vtemp3)
+{
+  long int ier;
+  ARKDlsMassMem arkdls_mem;
+  int retval;
+
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+ 
+  /* call Mass routine for new M matrix */
+  SetToZero(arkdls_mem->d_M);
+  retval = arkdls_mem->d_dmass(arkdls_mem->d_n, ark_mem->ark_tn, 
+			       arkdls_mem->d_M, 
+			       arkdls_mem->d_M_data, vtemp1, 
+			       vtemp2, vtemp3);
+  arkdls_mem->d_nme++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, ARKDLS_MASSFUNC_UNRECVR, "ARKDENSE", 
+		    "arkMassDenseSetup",  MSGD_MASSFUNC_FAILED);
+    arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_UNRECVR;
+    return(-1);
+  }
+  if (retval > 0) {
+    arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_RECVR;
+    return(1);
+  }
+
+  /* Copy M into M_lu for LU decomposition */
+  DenseCopy(arkdls_mem->d_M, arkdls_mem->d_M_lu);
+
+  /* Do LU factorization of M_lu */
+  ier = DenseGETRF(arkdls_mem->d_M_lu, arkdls_mem->d_lpivots); 
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  arkdls_mem->d_last_flag = ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassDenseSolve:
+
+ This routine handles the solve operation for the dense mass 
+ matrix solver by calling the dense backsolve routine.  The 
+ returned value is 0.
+---------------------------------------------------------------*/
+static int arkMassDenseSolve(ARKodeMem ark_mem, N_Vector b, 
+			     N_Vector weight)
+{
+  ARKDlsMassMem arkdls_mem;
+  realtype *bd;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  bd = N_VGetArrayPointer(b);
+  DenseGETRS(arkdls_mem->d_M_lu, arkdls_mem->d_lpivots, bd);
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassDenseFree:
+
+ This routine frees memory specific to the dense mass matrix
+ solver.
+---------------------------------------------------------------*/
+static int arkMassDenseFree(ARKodeMem ark_mem)
+{
+  ARKDlsMassMem  arkdls_mem;
+
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  
+  DestroyMat(arkdls_mem->d_M);
+  DestroyMat(arkdls_mem->d_M_lu);
+  DestroyArray(arkdls_mem->d_lpivots);
+  free(arkdls_mem);
+  ark_mem->ark_mass_mem = NULL;
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassDenseMultiply performs a matrix-vector product, 
+ multiplying the current mass matrix by a given vector.
+---------------------------------------------------------------*/                  
+static int arkMassDenseMultiply(N_Vector v, N_Vector Mv, 
+				realtype t, void *arkode_mem)
+{
+  /* extract the DlsMassMem structure from the user_data pointer */
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+  realtype *vdata=NULL, *Mvdata=NULL;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDENSE", 
+		    "arkMassDenseMultiply", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  /* access the vector arrays (since they must be serial vectors) */
+  vdata = N_VGetArrayPointer(v);
+  Mvdata = N_VGetArrayPointer(Mv);
+  if (vdata == NULL || Mvdata == NULL)
+    return(1);
+
+  /* perform matrix-vector product and return */
+  DenseMatvec(arkdls_mem->d_M, vdata, Mvdata);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+   EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_direct.c b/src/arkode/arkode_direct.c
new file mode 100644
index 0000000..ad03b14
--- /dev/null
+++ b/src/arkode/arkode_direct.c
@@ -0,0 +1,617 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for the ARKDLS linear solvers
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "arkode_impl.h"
+#include "arkode_direct_impl.h"
+#include <sundials/sundials_math.h>
+
+/*===============================================================
+ FUNCTION SPECIFIC CONSTANTS
+===============================================================*/
+
+/* Constant for DQ Jacobian approximation */
+#define MIN_INC_MULT RCONST(1000.0)
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+
+
+/*===============================================================
+ EXPORTED FUNCTIONS
+===============================================================*/
+              
+/*---------------------------------------------------------------
+ ARKDlsSetDenseJacFn specifies the dense Jacobian function.
+---------------------------------------------------------------*/
+int ARKDlsSetDenseJacFn(void *arkode_mem, ARKDlsDenseJacFn jac)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsSetDenseJacFn", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_LMEM_NULL, "ARKDLS", 
+		    "ARKDlsSetDenseJacFn", MSGD_LMEM_NULL);
+    return(ARKDLS_LMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  if (jac != NULL) {
+    arkdls_mem->d_jacDQ = FALSE;
+    arkdls_mem->d_djac  = jac;
+  } else {
+    arkdls_mem->d_jacDQ = TRUE;
+  }
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsSetBandJacFn specifies the band Jacobian function.
+---------------------------------------------------------------*/
+int ARKDlsSetBandJacFn(void *arkode_mem, ARKDlsBandJacFn jac)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsSetBandJacFn", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_LMEM_NULL, "ARKDLS", 
+		    "ARKDlsSetBandJacFn", MSGD_LMEM_NULL);
+    return(ARKDLS_LMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  if (jac != NULL) {
+    arkdls_mem->d_jacDQ = FALSE;
+    arkdls_mem->d_bjac  = jac;
+  } else {
+    arkdls_mem->d_jacDQ = TRUE;
+  }
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsSetDenseMassFn specifies the dense mass matrix function.
+---------------------------------------------------------------*/
+int ARKDlsSetDenseMassFn(void *arkode_mem, ARKDlsDenseMassFn mass)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsSetDenseMassFn", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MASSMEM_NULL, "ARKDLS", 
+		    "ARKDlsSetDenseMassFn", MSGD_MASSMEM_NULL);
+    return(ARKDLS_MASSMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  if (mass != NULL) {
+    arkdls_mem->d_dmass = mass;
+  } else {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKDLS", 
+		    "ARKDlsSetDenseMassFn", "DenseMassFn must be non-NULL");
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsSetBandMassFn specifies the band mass matrix function.
+---------------------------------------------------------------*/
+int ARKDlsSetBandMassFn(void *arkode_mem, ARKDlsBandMassFn mass)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsSetBandMassFn", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MASSMEM_NULL, "ARKDLS", 
+		    "ARKDlsSetBandMassFn", MSGD_MASSMEM_NULL);
+    return(ARKDLS_MASSMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  if (mass != NULL) {
+    arkdls_mem->d_bmass = mass;
+  } else {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKDLS", 
+		    "ARKDlsSetBandMassFn", "BandMassFn must be non-NULL");
+    return(ARKDLS_MASSMEM_NULL);
+  }
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsGetWorkSpace returns the length of workspace allocated for 
+ the ARKDLS linear solver.
+---------------------------------------------------------------*/
+int ARKDlsGetWorkSpace(void *arkode_mem, long int *lenrwLS, long int *leniwLS)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsGetWorkSpace", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_LMEM_NULL, "ARKDLS", 
+		    "ARKDlsGetWorkSpace", MSGD_LMEM_NULL);
+    return(ARKDLS_LMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  if (arkdls_mem->d_type == SUNDIALS_DENSE) {
+    *lenrwLS = 2*arkdls_mem->d_n*arkdls_mem->d_n;
+    *leniwLS = arkdls_mem->d_n;
+  } else if (arkdls_mem->d_type == SUNDIALS_BAND) {
+    *lenrwLS = arkdls_mem->d_n*(arkdls_mem->d_smu + arkdls_mem->d_mu + 2*arkdls_mem->d_ml + 2);
+    *leniwLS = arkdls_mem->d_n;
+  }
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsGetMassWorkSpace returns the length of workspace allocated 
+ for the ARKDLS mass matrix linear solver.
+---------------------------------------------------------------*/
+int ARKDlsGetMassWorkSpace(void *arkode_mem, long int *lenrwMLS, 
+			   long int *leniwMLS)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsGetMassWorkSpace", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MASSMEM_NULL, "ARKDLS", 
+		    "ARKDlsGetMassWorkSpace", MSGD_MASSMEM_NULL);
+    return(ARKDLS_MASSMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  if (arkdls_mem->d_type == SUNDIALS_DENSE) {
+    *lenrwMLS = 2*arkdls_mem->d_n*arkdls_mem->d_n;
+    *leniwMLS = arkdls_mem->d_n;
+  } else if (arkdls_mem->d_type == SUNDIALS_BAND) {
+    *lenrwMLS = arkdls_mem->d_n*(arkdls_mem->d_smu + arkdls_mem->d_mu + 2*arkdls_mem->d_ml + 2);
+    *leniwMLS = arkdls_mem->d_n;
+  }
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsGetNumJacEvals returns the number of Jacobian evaluations.
+---------------------------------------------------------------*/
+int ARKDlsGetNumJacEvals(void *arkode_mem, long int *njevals)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsGetNumJacEvals", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_LMEM_NULL, "ARKDLS", 
+		    "ARKDlsGetNumJacEvals", MSGD_LMEM_NULL);
+    return(ARKDLS_LMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  *njevals = arkdls_mem->d_nje;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsGetNumMassEvals returns the number of mass matrix evaluations.
+---------------------------------------------------------------*/
+int ARKDlsGetNumMassEvals(void *arkode_mem, long int *nmevals)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsGetNumMassEvals", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MASSMEM_NULL, "ARKDLS", 
+		    "ARKDlsGetNumMassEvals", MSGD_MASSMEM_NULL);
+    return(ARKDLS_MASSMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  *nmevals = arkdls_mem->d_nme;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsGetNumRhsEvals returns the number of calls to the ODE function
+ needed for the DQ Jacobian approximation.
+---------------------------------------------------------------*/
+int ARKDlsGetNumRhsEvals(void *arkode_mem, long int *nfevalsLS)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsGetNumRhsEvals", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_LMEM_NULL, "ARKDLS", 
+		    "ARKDlsGetNumRhsEvals", MSGD_LMEM_NULL);
+    return(ARKDLS_LMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  *nfevalsLS = arkdls_mem->d_nfeDQ;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsGetReturnFlagName returns the name associated with a ARKDLS
+ return value.
+---------------------------------------------------------------*/
+char *ARKDlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case ARKDLS_SUCCESS:
+    sprintf(name,"ARKDLS_SUCCESS");
+    break;   
+  case ARKDLS_MEM_NULL:
+    sprintf(name,"ARKDLS_MEM_NULL");
+    break;
+  case ARKDLS_LMEM_NULL:
+    sprintf(name,"ARKDLS_LMEM_NULL");
+    break;
+  case ARKDLS_MASSMEM_NULL:
+    sprintf(name,"ARKDLS_MASSMEM_NULL");
+    break;
+  case ARKDLS_ILL_INPUT:
+    sprintf(name,"ARKDLS_ILL_INPUT");
+    break;
+  case ARKDLS_MEM_FAIL:
+    sprintf(name,"ARKDLS_MEM_FAIL");
+    break;
+  case ARKDLS_JACFUNC_UNRECVR:
+    sprintf(name,"ARKDLS_JACFUNC_UNRECVR");
+    break;
+  case ARKDLS_JACFUNC_RECVR:
+    sprintf(name,"ARKDLS_JACFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsGetLastFlag returns the last flag set in a ARKDLS function.
+---------------------------------------------------------------*/
+int ARKDlsGetLastFlag(void *arkode_mem, long int *flag)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsGetLastFlag", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_LMEM_NULL, "ARKDLS", 
+		    "ARKDlsGetLastFlag", MSGD_LMEM_NULL);
+    return(ARKDLS_LMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  *flag = arkdls_mem->d_last_flag;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKDlsGetLastMassFlag returns the last flag set in a ARKDLS mass
+  matrix function.
+---------------------------------------------------------------*/
+int ARKDlsGetLastMassFlag(void *arkode_mem, long int *flag)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKDLS", 
+		    "ARKDlsGetLastMassFlag", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MASSMEM_NULL, "ARKDLS", 
+		    "ARKDlsGetLastMassFlag", MSGD_MASSMEM_NULL);
+    return(ARKDLS_MASSMEM_NULL);
+  }
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  *flag = arkdls_mem->d_last_flag;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*===============================================================
+ DQ JACOBIAN APPROXIMATIONS
+===============================================================*/
+
+/*---------------------------------------------------------------
+ arkDlsDenseDQJac:
+
+ This routine generates a dense difference quotient approximation 
+ to the Jacobian of f(t,y). It assumes that a dense matrix of 
+ type DlsMat is stored column-wise, and that elements within each 
+ column are contiguous. The address of the jth column of J is 
+ obtained via the macro DENSE_COL and this pointer is associated 
+ with an N_Vector using the N_VGetArrayPointer/N_VSetArrayPointer 
+ functions.  Finally, the actual computation of the jth column of
+ the Jacobian is done with a call to N_VLinearSum.
+---------------------------------------------------------------*/
+int arkDlsDenseDQJac(long int N, realtype t, N_Vector y, 
+		     N_Vector fy, DlsMat Jac, void *data,
+		     N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype fnorm, minInc, inc, inc_inv, yjsaved, srur;
+  realtype *tmp2_data, *y_data, *ewt_data;
+  N_Vector ftemp, jthCol;
+  long int j;
+  int retval = 0;
+
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* data points to arkode_mem */
+  ark_mem = (ARKodeMem) data;
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  /* Save pointer to the array in tmp2 */
+  tmp2_data = N_VGetArrayPointer(tmp2);
+
+  /* Rename work vectors for readibility */
+  ftemp = tmp1; 
+  jthCol = tmp2;
+
+  /* Obtain pointers to the data for ewt, y */
+  ewt_data = N_VGetArrayPointer(ark_mem->ark_ewt);
+  y_data   = N_VGetArrayPointer(y);
+
+  /* Set minimum increment based on uround and norm of f */
+  srur = SUNRsqrt(ark_mem->ark_uround);
+  /* fnorm = N_VWrmsNorm(fy, ark_mem->ark_ewt); */
+  fnorm = N_VWrmsNorm(fy, ark_mem->ark_rwt);
+  minInc = (fnorm != ZERO) ?
+           (MIN_INC_MULT * SUNRabs(ark_mem->ark_h) * ark_mem->ark_uround * N * fnorm) : ONE;
+
+  for (j = 0; j < N; j++) {
+
+    /* Generate the jth col of J(tn,y) */
+    N_VSetArrayPointer(DENSE_COL(Jac,j), jthCol);
+
+    yjsaved = y_data[j];
+    inc = SUNMAX(srur*SUNRabs(yjsaved), minInc/ewt_data[j]);
+    y_data[j] += inc;
+
+    retval = ark_mem->ark_fi(t, y, ftemp, ark_mem->ark_user_data);
+    arkdls_mem->d_nfeDQ++;
+    if (retval != 0) break;
+    
+    y_data[j] = yjsaved;
+
+    inc_inv = ONE/inc;
+    N_VLinearSum(inc_inv, ftemp, -inc_inv, fy, jthCol);
+
+    DENSE_COL(Jac,j) = N_VGetArrayPointer(jthCol);
+  }
+
+  /* Restore original array pointer in tmp2 */
+  N_VSetArrayPointer(tmp2_data, tmp2);
+
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ arkDlsBandDQJac:
+
+ This routine generates a banded difference quotient approximation 
+ to the Jacobian of f(t,y).  It assumes that a band matrix of type
+ DlsMat is stored column-wise, and that elements within each 
+ column are contiguous. This makes it possible to get the address 
+ of a column of J via the macro BAND_COL and to write a simple for 
+ loop to set each of the elements of a column in succession.
+---------------------------------------------------------------*/
+int arkDlsBandDQJac(long int N, long int mupper, long int mlower,
+                   realtype t, N_Vector y, N_Vector fy, 
+                   DlsMat Jac, void *data,
+                   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  N_Vector ftemp, ytemp;
+  realtype fnorm, minInc, inc, inc_inv, srur;
+  realtype *col_j, *ewt_data, *fy_data, *ftemp_data, *y_data, *ytemp_data;
+  long int group, i, j, width, ngroups, i1, i2;
+  int retval = 0;
+
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* data points to arkode_mem */
+  ark_mem = (ARKodeMem) data;
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  /* Rename work vectors for use as temporary values of y and f */
+  ftemp = tmp1;
+  ytemp = tmp2;
+
+  /* Obtain pointers to the data for ewt, fy, ftemp, y, ytemp */
+  ewt_data   = N_VGetArrayPointer(ark_mem->ark_ewt);
+  fy_data    = N_VGetArrayPointer(fy);
+  ftemp_data = N_VGetArrayPointer(ftemp);
+  y_data     = N_VGetArrayPointer(y);
+  ytemp_data = N_VGetArrayPointer(ytemp);
+
+  /* Load ytemp with y = predicted y vector */
+  N_VScale(ONE, y, ytemp);
+
+  /* Set minimum increment based on uround and norm of f */
+  srur = SUNRsqrt(ark_mem->ark_uround);
+  /* fnorm = N_VWrmsNorm(fy, ark_mem->ark_ewt); */
+  fnorm = N_VWrmsNorm(fy, ark_mem->ark_rwt);
+  minInc = (fnorm != ZERO) ?
+           (MIN_INC_MULT * SUNRabs(ark_mem->ark_h) * ark_mem->ark_uround * N * fnorm) : ONE;
+
+  /* Set bandwidth and number of column groups for band differencing */
+  width = mlower + mupper + 1;
+  ngroups = SUNMIN(width, N);
+
+  /* Loop over column groups. */
+  for (group=1; group <= ngroups; group++) {
+    
+    /* Increment all y_j in group */
+    for(j=group-1; j < N; j+=width) {
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      ytemp_data[j] += inc;
+    }
+
+    /* Evaluate f with incremented y */
+    retval = ark_mem->ark_fi(ark_mem->ark_tn, ytemp, ftemp, 
+                             ark_mem->ark_user_data);
+    arkdls_mem->d_nfeDQ++;
+    if (retval != 0) break;
+
+    /* Restore ytemp, then form and load difference quotients */
+    for (j=group-1; j < N; j+=width) {
+      ytemp_data[j] = y_data[j];
+      col_j = BAND_COL(Jac,j);
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-mupper);
+      i2 = SUNMIN(j+mlower, N-1);
+      for (i=i1; i <= i2; i++)
+        BAND_COL_ELEM(col_j,i,j) = inc_inv * (ftemp_data[i] - fy_data[i]);
+    }
+  }
+  
+  return(retval);
+}
+
+
+int arkDlsInitializeCounters(ARKDlsMem arkdls_mem)
+{
+  arkdls_mem->d_nje    = 0;
+  arkdls_mem->d_nfeDQ  = 0;
+  arkdls_mem->d_nstlj  = 0;
+  return(0);
+}
+
+/*---------------------------------------------------------------
+    EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_direct_impl.h b/src/arkode/arkode_direct_impl.h
new file mode 100644
index 0000000..29b1906
--- /dev/null
+++ b/src/arkode/arkode_direct_impl.h
@@ -0,0 +1,141 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Common implementation header file for the ARKDLS linear solvers.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKDLS_IMPL_H
+#define _ARKDLS_IMPL_H
+
+#include <arkode/arkode_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------
+ ARKDLS solver constants:
+
+ ARKD_MSBJ   maximum number of steps between Jacobian evaluations
+ ARKD_DGMAX  maximum change in gamma between Jacobian evaluations
+---------------------------------------------------------------*/
+#define ARKD_MSBJ  50
+#define ARKD_DGMAX RCONST(0.2)
+
+
+/*---------------------------------------------------------------
+ Types: ARKDlsMemRec, ARKDlsMem                             
+
+ ARKDlsMem is pointer to a ARKDlsMemRec structure.
+---------------------------------------------------------------*/
+typedef struct ARKDlsMemRec {
+
+  int d_type;             /* SUNDIALS_DENSE or SUNDIALS_BAND              */
+
+  long int d_n;           /* problem dimension                            */
+
+  long int d_ml;          /* lower bandwidth of Jacobian                  */
+  long int d_mu;          /* upper bandwidth of Jacobian                  */ 
+  long int d_smu;         /* upper bandwith of M = MIN(N-1,d_mu+d_ml)     */
+
+  booleantype d_jacDQ;    /* TRUE if using internal DQ Jacobian approx.   */
+  ARKDlsDenseJacFn d_djac; /* dense Jacobian routine to be called          */
+  ARKDlsBandJacFn d_bjac;  /* band Jacobian routine to be called           */
+  void *d_J_data;         /* user data is passed to djac or bjac          */
+
+  DlsMat d_M;             /* M = I - gamma * df/dy                        */
+  DlsMat d_savedJ;        /* savedJ = old Jacobian                        */
+
+  int *d_pivots;          /* pivots = int pivot array for PM = LU         */
+  long int *d_lpivots;    /* lpivots = long int pivot array for PM = LU   */
+
+  long int  d_nstlj;      /* nstlj = nst at last Jacobian eval.           */
+
+  long int d_nje;         /* nje = no. of calls to jac                    */
+
+  long int d_nfeDQ;       /* no. of calls to f due to DQ Jacobian approx. */
+
+  long int d_last_flag;   /* last error return flag                       */
+  
+} *ARKDlsMem;
+
+
+/*---------------------------------------------------------------
+ Types: ARKDlsMassMemRec, ARKDlsMassMem
+
+ ARKDlsMassMem is pointer to a ARKDlsMassMemRec structure.
+---------------------------------------------------------------*/
+typedef struct ARKDlsMassMemRec {
+
+  int d_type;                /* SUNDIALS_DENSE or SUNDIALS_BAND            */
+
+  long int d_n;              /* problem dimension                          */
+
+  long int d_ml;             /* lower bandwidth of mass matrix             */
+  long int d_mu;             /* upper bandwidth of mass matrix             */ 
+  long int d_smu;            /* upper bandwith of M = MIN(N-1,d_mu+d_ml)   */
+
+  ARKDlsDenseMassFn d_dmass; /* dense mass matrix routine to be called     */
+  ARKDlsBandMassFn d_bmass;  /* band mass matrix routine to be called      */
+  void *d_M_data;            /* user data is passed to djac or bjac        */
+
+  DlsMat d_M;                /* mass matrix structure                      */
+  DlsMat d_M_lu;             /* mass matrix structure for LU decomposition */
+
+  int *d_pivots;             /* pivots = int pivot array for PM = LU       */
+  long int *d_lpivots;       /* lpivots = long int pivot array for PM = LU */
+
+  long int d_nme;            /* nje = no. of calls to mass matrix routine  */
+
+  long int d_last_flag;      /* last error return flag                     */
+  
+} *ARKDlsMassMem;
+
+
+/*---------------------------------------------------------------
+ Prototypes of internal functions
+---------------------------------------------------------------*/
+int arkDlsDenseDQJac(long int N, realtype t, N_Vector y, 
+                     N_Vector fy, DlsMat Jac, void *data,
+                     N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+int arkDlsBandDQJac(long int N, long int mupper, long int mlower,
+                    realtype t, N_Vector y, N_Vector fy, 
+                    DlsMat Jac, void *data, N_Vector tmp1, 
+                    N_Vector tmp2, N_Vector tmp3);
+
+/* Auxilliary functions */
+
+int arkDlsInitializeCounters(ARKDlsMem arkdls_mem);
+
+
+/*---------------------------------------------------------------
+ Error Messages
+---------------------------------------------------------------*/
+#define MSGD_ARKMEM_NULL    "Integrator memory is NULL."
+#define MSGD_BAD_NVECTOR    "A required vector operation is not implemented."
+#define MSGD_BAD_SIZES      "Illegal bandwidth parameter(s). Must have 0 <=  ml, mu <= N-1."
+#define MSGD_MEM_FAIL       "A memory request failed."
+#define MSGD_LMEM_NULL      "Linear solver memory is NULL."
+#define MSGD_MASSMEM_NULL   "Mass matrix solver memory is NULL."
+#define MSGD_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+#define MSGD_MASSFUNC_FAILED "The mass matrix routine failed in an unrecoverable manner."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/arkode/arkode_impl.h b/src/arkode/arkode_impl.h
new file mode 100644
index 0000000..b8bfcf2
--- /dev/null
+++ b/src/arkode/arkode_impl.h
@@ -0,0 +1,805 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Implementation header file for the main ARKODE integrator.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKODE_IMPL_H
+#define _ARKODE_IMPL_H
+
+#include <stdarg.h>
+#include <arkode/arkode.h>
+#include <arkode/arkode_spils.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*===============================================================
+             ARKODE Private Constants                             
+===============================================================*/
+
+/* Basic ARKODE constants */
+#define Q_DEFAULT        4       /* default RK order */
+#define QDENSE_DEF       3       /* default dense output order */
+#define MXSTEP_DEFAULT   500     /* mxstep default value */
+#define MAXNEF           7       /* maxnef default value */
+#define MAXNCF           10      /* maxncf default value */
+#define MXHNIL           10      /* mxhnil default value */
+#define MAXCOR           3       /* maxcor default value */
+#define FP_ACCEL_M       3       /* fp_m default value */
+
+/* Numeric constants */
+#define ZERO   RCONST(0.0)      /* real 0.0     */
+#define TINY   RCONST(1.0e-10)  /* small number */
+#define TENTH  RCONST(0.1)      /* real 0.1     */
+#define POINT2 RCONST(0.2)      /* real 0.2     */
+#define FOURTH RCONST(0.25)     /* real 0.25    */
+#define HALF   RCONST(0.5)      /* real 0.5     */
+#define ONE    RCONST(1.0)      /* real 1.0     */
+#define TWO    RCONST(2.0)      /* real 2.0     */
+#define THREE  RCONST(3.0)      /* real 3.0     */
+#define FOUR   RCONST(4.0)      /* real 4.0     */
+#define FIVE   RCONST(5.0)      /* real 5.0     */
+#define SIX    RCONST(6.0)      /* real 6.0     */
+#define SEVEN  RCONST(7.0)      /* real 7.0     */
+#define TWELVE RCONST(12.0)     /* real 12.0    */
+#define HUND   RCONST(100.0)    /* real 100.0   */
+
+/* Time step controller default values */
+#define CFLFAC    RCONST(0.5)
+#define SAFETY    RCONST(0.96)  /* CVODE uses 1.0  */
+#define BIAS      RCONST(1.5)   /* CVODE uses 6.0  */
+#define GROWTH    RCONST(20.0)  /* CVODE uses 10.0 */
+#define HFIXED_LB RCONST(1.0)   /* CVODE uses 1.0  */
+#define HFIXED_UB RCONST(1.5)   /* CVODE uses 1.5  */
+#define AD0_K1    RCONST(0.58)  /* PID controller constants */
+#define AD0_K2    RCONST(0.21)
+#define AD0_K3    RCONST(0.1)
+#define AD1_K1    RCONST(0.8)   /* PI controller constants */
+#define AD1_K2    RCONST(0.31)
+#define AD2_K1    RCONST(1.0)   /* I controller constants */
+#define AD3_K1    RCONST(0.367) /* explicit Gustafsson controller */
+#define AD3_K2    RCONST(0.268)
+#define AD4_K1    RCONST(0.98)  /* implicit Gustafsson controller */
+#define AD4_K2    RCONST(0.95)
+#define AD5_K1    RCONST(0.367) /* imex Gustafsson controller */
+#define AD5_K2    RCONST(0.268)
+#define AD5_K3    RCONST(0.95)
+
+/* Default solver tolerance factor */
+/* #define NLSCOEF   RCONST(0.003)   /\* Hairer & Wanner constant *\/ */
+/* #define NLSCOEF   RCONST(0.2)     /\* CVODE constant *\/ */
+#define NLSCOEF   RCONST(0.1)
+
+/* Control constants for tolerances */
+#define ARK_SS  0
+#define ARK_SV  1
+#define ARK_WF  2
+
+
+/*===============================================================
+             ARKODE Routine-Specific Constants                   
+===============================================================*/
+
+/*---------------------------------------------------------------
+ Control constants for lower-level functions used by arkStep:
+-----------------------------------------------------------------
+ arkHin return values:  ARK_SUCCESS, ARK_RHSFUNC_FAIL, or 
+    ARK_TOO_CLOSE
+
+ arkStep control constants:  SOLVE_SUCCESS or PREDICT_AGAIN
+
+ arkStep return values:  ARK_SUCCESS, ARK_LSETUP_FAIL, 
+    ARK_LSOLVE_FAIL, ARK_RHSFUNC_FAIL, ARK_RTFUNC_FAIL,
+    ARK_CONV_FAILURE, ARK_ERR_FAILURE or ARK_FIRST_RHSFUNC_ERR
+
+ arkNls input nflag values:  FIRST_CALL, PREV_CONV_FAIL or 
+    PREV_ERR_FAIL
+    
+ arkNls return values:  ARK_SUCCESS, ARK_LSETUP_FAIL,
+    ARK_LSOLVE_FAIL, ARK_RHSFUNC_FAIL, CONV_FAIL or
+    RHSFUNC_RECVR
+ 
+ arkNewtonIteration return values:  ARK_SUCCESS, ARK_LSOLVE_FAIL,
+    ARK_RHSFUNC_FAIL, CONV_FAIL, RHSFUNC_RECVR or TRY_AGAIN
+---------------------------------------------------------------*/
+#define SOLVE_SUCCESS    +2
+#define PREDICT_AGAIN    +3
+
+#define CONV_FAIL        +4 
+#define TRY_AGAIN        +5
+
+#define FIRST_CALL       +6
+#define PREV_CONV_FAIL   +7
+#define PREV_ERR_FAIL    +8
+
+#define RHSFUNC_RECVR    +9
+
+
+/*---------------------------------------------------------------
+ Return values for lower-level rootfinding functions
+-----------------------------------------------------------------
+ arkRootCheck1:  ARK_SUCCESS or ARK_RTFUNC_FAIL
+
+ arkRootCheck2:  ARK_SUCCESS, ARK_RTFUNC_FAIL, CLOSERT or RTFOUND
+
+ arkRootCheck3:  ARK_SUCCESS, ARK_RTFUNC_FAIL or RTFOUND
+
+ arkRootfind:  ARK_SUCCESS, ARK_RTFUNC_FAIL or RTFOUND
+---------------------------------------------------------------*/
+#define RTFOUND          +1
+#define CLOSERT          +3
+
+
+/*---------------------------------------------------------------
+ Algorithmic constants
+-----------------------------------------------------------------
+ ARKodeGetDky and arkStep:  FUZZ_FACTOR
+
+ arkHin:  H0_LBFACTOR, H0_UBFACTOR, H0_BIAS and H0_ITERS
+
+ arkStep:  
+    ETAMX1      maximum step size change on first step
+    ETAMXF      step size reduction factor on multiple error 
+                test failures (multiple implies >= SMALL_NEF)
+    ETAMIN      smallest allowable step size reduction factor 
+                on an error test failure
+    ETACF       step size reduction factor on nonlinear 
+                convergence failure
+    ONEPSM      safety factor for floating point comparisons
+    ONEMSM      safety factor for floating point comparisons
+    SMALL_NEF   if an error failure occurs and SMALL_NEF <= nef,
+                then reset  eta = MIN(eta, ETAMXF)
+
+ arkNls:
+    CRDOWN      constant used in the estimation of the 
+                convergence rate (crate) of the iterates for 
+                the nonlinear equation
+    DGMAX       if |gamma/gammap-1| > DGMAX then call lsetup
+    RDIV        declare divergence if ratio del/delp > RDIV
+    MSBP        max no. of steps between lsetup calls
+---------------------------------------------------------------*/
+#define FUZZ_FACTOR RCONST(100.0)
+
+#define H0_LBFACTOR RCONST(100.0)
+#define H0_UBFACTOR RCONST(0.1)
+#define H0_BIAS     HALF
+#define H0_ITERS    4
+
+#define ETAMX1      RCONST(10000.0)     /* default */
+#define ETAMXF      RCONST(0.3)         /* default */
+#define ETAMIN      RCONST(0.1)         /* default */
+#define ETACF       RCONST(0.25)        /* default */
+#define ONEPSM      RCONST(1.000001)
+#define ONEMSM      RCONST(0.999999)
+#define SMALL_NEF   2                   /* default */
+
+#define CRDOWN      RCONST(0.3)         /* default */
+#define DGMAX       RCONST(0.2)         /* default */
+#define RDIV        RCONST(2.3)         /* default */
+#define MSBP        20                  /* default */
+
+
+/*===============================================================
+  MAIN INTEGRATOR MEMORY BLOCK
+===============================================================*/
+
+/*---------------------------------------------------------------
+ Types : struct ARKodeMemRec, ARKodeMem
+-----------------------------------------------------------------
+ The type ARKodeMem is type pointer to struct ARKodeMemRec.
+ This structure contains fields to keep track of problem state.
+---------------------------------------------------------------*/
+typedef struct ARKodeMemRec {
+
+  realtype ark_uround;         /* machine unit roundoff */
+
+  /*-------------------------- 
+    Problem Specification Data 
+    --------------------------*/
+  ARKRhsFn     ark_fe;         /* y' = fe(t,y(t)) + fi(t,y(t))          */
+  ARKRhsFn     ark_fi;
+  void        *ark_user_data;  /* user pointer passed to fe, fi         */
+  ARKExpStabFn ark_expstab;    /* time step stability function for fe   */
+  void        *ark_estab_data; /* user pointer passed to expstab        */
+  int          ark_itol;       /* itol = ARK_SS (scalar, default), 
+                                         ARK_SV (vector),
+                                         ARK_WF (user weight function)  */
+  int          ark_ritol;      /* itol = ARK_SS (scalar, default), 
+                                         ARK_SV (vector),
+                                         ARK_WF (user weight function)  */
+  realtype     ark_reltol;     /* relative tolerance                    */
+  realtype     ark_Sabstol;    /* scalar absolute solution tolerance    */
+  N_Vector     ark_Vabstol;    /* vector absolute solution tolerance    */
+  realtype     ark_SRabstol;   /* scalar absolute residual tolerance    */
+  N_Vector     ark_VRabstol;   /* vector absolute residual tolerance    */
+  booleantype  ark_user_efun;  /* TRUE if user sets efun                */
+  ARKEwtFn     ark_efun;       /* function to set ewt                   */
+  void        *ark_e_data;     /* user pointer passed to efun           */
+  booleantype  ark_user_rfun;  /* TRUE if user sets rfun                */
+  ARKRwtFn     ark_rfun;       /* function to set rwt                   */
+  void        *ark_r_data;     /* user pointer passed to rfun           */
+  booleantype  ark_linear;     /* TRUE if fi is linear                  */
+  booleantype  ark_linear_timedep;  /* TRUE if dfi/dy depends on t      */
+  booleantype  ark_explicit;   /* TRUE if fi is disabled                */
+  booleantype  ark_implicit;   /* TRUE if fe is disabled                */
+
+  /*-----------------
+    Stored RHS arrays
+    -----------------*/
+  N_Vector ark_Fe[ARK_S_MAX];  /* explicit RHS at each stage */
+  N_Vector ark_Fi[ARK_S_MAX];  /* implicit RHS at each stage */
+
+  /*--------------------------
+    other vectors of length N 
+    -------------------------*/
+  N_Vector ark_ewt;     /* error weight vector                               */
+  N_Vector ark_rwt;     /* residual weight vector                            */
+  booleantype ark_rwt_is_ewt;     /* TRUE if rwt is a pointer to ewt         */
+  N_Vector ark_y;       /* y is used as temporary storage by the solver
+			   The memory is provided by the user to ARKode
+			   where the vector is named yout.                   */
+  N_Vector ark_ycur;    /* ycur always holds the solver's current version of 
+                           the solution */
+  N_Vector ark_sdata;   /* Storage for old stage data in computing residual. */
+  N_Vector ark_tempv;   /* temporary storage vector                          */
+  N_Vector ark_acor;    /* temporary storage vector; Between steps this  
+			   holds the estimaged local error                   */
+  N_Vector ark_ftemp;   /* temporary storage vector                          */
+  N_Vector ark_fold;    /* f(t,y) at beginning of last successful step       */
+  N_Vector ark_fnew;    /* f(t,y) at end of last successful step             */
+  N_Vector ark_yold;    /* y at beginning of last successful step            */
+  N_Vector ark_ynew;    /* y at end of last successful step                  */
+  /* N_Vector ark_fa;      /\* f at h/3 through step (high order dense output)   *\/ */
+  /* N_Vector ark_fb;      /\* f at h*2/3 through step (high order dense output) *\/ */
+
+  /*-----------------
+    Tstop information
+    -----------------*/
+  booleantype ark_tstopset;
+  realtype    ark_tstop;
+
+  /*-----------
+    Method Data 
+    -----------*/  
+  int ark_q;                              /* method order                   */
+  int ark_p;                              /* embedding order                */
+  int ark_istage;                         /* current stage                  */
+  int ark_stages;                         /* number of stages               */
+  int ark_dense_q;                        /* dense output polynomial order  */
+  realtype ark_Ae[ARK_S_MAX*ARK_S_MAX];   /* ERK Butcher table              */
+  realtype ark_Ai[ARK_S_MAX*ARK_S_MAX];   /* IRK Butcher table              */
+  realtype ark_ce[ARK_S_MAX];             /* ERK method canopy nodes        */
+  realtype ark_ci[ARK_S_MAX];             /* IRK method canopy nodes        */
+  realtype ark_be[ARK_S_MAX];             /* ERK method solution coeffs     */
+  realtype ark_bi[ARK_S_MAX];             /* IRK method solution coeffs     */
+  realtype ark_b2e[ARK_S_MAX];            /* ERK method embedding coeffs    */
+  realtype ark_b2i[ARK_S_MAX];            /* IRK method embedding coeffs    */
+
+  /*---------
+    Step Data 
+    ---------*/  
+  realtype ark_hin;             /* initial step size                        */
+  realtype ark_h;               /* current step size                        */
+  realtype ark_hprime;          /* step size to be used on the next step    */ 
+  realtype ark_next_h;          /* step size to be used on the next step    */ 
+  realtype ark_eta;             /* eta = hprime / h                         */
+  realtype ark_tn;              /* current internal value of t              */
+  realtype ark_tretlast;        /* value of tret last returned by ARKode    */
+  realtype ark_gamma;           /* gamma = h * rl1                          */
+  realtype ark_gammap;          /* gamma at the last setup call             */
+  realtype ark_gamrat;          /* gamma / gammap                           */
+  realtype ark_crate;           /* estimated corrector convergence rate     */
+  realtype ark_eRNrm;           /* estimated residual norm, used in nonlinear 
+				   and linear solver convergence tests      */
+  realtype ark_nlscoef;         /* coefficient in nonlin. convergence test  */
+  int      ark_mnewt;           /* Newton iteration counter                 */
+
+
+  /*-------------------------
+    Time Step Adaptivity Data 
+    -------------------------*/
+  booleantype ark_fixedstep;       /* flag to disable temporal adaptivity    */
+  ARKAdaptFn ark_hadapt;           /* function to set the new time step size */
+  void      *ark_hadapt_data;      /* user pointer passed to hadapt          */
+  realtype   ark_hadapt_ehist[3];  /* error history for time adaptivity      */
+  realtype   ark_hadapt_hhist[3];  /* step history for time adaptivity       */
+  int        ark_hadapt_imethod;   /* time step adaptivity method to use:
+				      -1 -> User-specified function above
+				       0 -> PID controller
+				       1 -> PI controller
+				       2 -> I controller
+				       3 -> explicit Gustafsson controller
+				       4 -> implicit Gustafsson controller
+				       5 -> imex Gustafsson controller       */
+  realtype   ark_hadapt_cfl;       /* cfl safety factor                      */
+  realtype   ark_hadapt_safety;    /* accuracy safety factor on h            */
+  realtype   ark_hadapt_bias;      /* accuracy safety factor on LTE          */
+  realtype   ark_hadapt_growth;    /* maximum step growth safety factor      */
+  realtype   ark_hadapt_lbound;    /* eta lower bound to leave h unchanged   */
+  realtype   ark_hadapt_ubound;    /* eta upper bound to leave h unchanged   */
+  booleantype ark_hadapt_pq;       /* choice of using p (0) vs q (1)         */
+  realtype   ark_hadapt_k1;
+  realtype   ark_hadapt_k2;        /* method-specific adaptivity parameters  */
+  realtype   ark_hadapt_k3;
+
+  /*------------------------------------
+    Limits and various solver parameters
+    ------------------------------------*/
+  long int ark_mxstep;   /* max number of internal steps for one user call */
+  int      ark_maxcor;   /* max number of corrector iterations for the
+			    solution of the nonlinear equation             */
+  int      ark_mxhnil;   /* max number of warning messages issued to the
+			    user that t+h == t for the next internal step  */
+  int      ark_maxnef;   /* max number of error test failures in one step  */
+  int      ark_maxncf;   /* max number of nonlin. conv. fails in one step  */
+  realtype ark_hmin;     /* |h| >= hmin                                    */
+  realtype ark_hmax_inv; /* |h| <= 1/hmax_inv                              */
+  realtype ark_etamax;   /* eta <= etamax                                  */
+
+  realtype ark_etamx1;   /* max step size change on first step             */
+  realtype ark_etamxf;   /* h reduction factor on multiple error fails     */
+  int ark_small_nef;     /* bound to determine 'multiple' above            */
+  realtype ark_etacf;    /* h reduction factor on nonlinear conv fail      */
+
+  realtype ark_crdown;   /* nonlinear convergence rate estimation constant */
+  realtype ark_rdiv;     /* declare divergence if ratio del/delp > RDIV    */
+
+  realtype ark_dgmax;    /* if |gamma/gammap-1| > DGMAX then call lsetup   */
+  int ark_msbp;          /* positive => max # steps between lsetup calls
+			    negative => recompute at every Newton iter.    */
+  int ark_predictor;     /* choice of prediction method */
+
+  /*--------
+    Counters 
+    --------*/
+  long int ark_nst;          /* number of internal steps taken             */
+  long int ark_nst_acc;      /* number of accuracy-limited internal steps  */
+  long int ark_nst_exp;      /* number of stability-limited internal steps */
+  long int ark_nst_attempts; /* number of attempted steps                  */
+  long int ark_nfe;          /* number of fe calls                         */
+  long int ark_nfi;          /* number of fi calls                         */
+  long int ark_ncfn;         /* number of corrector convergence failures   */
+  long int ark_nmassfails;   /* number of mass matrix solver failures      */
+  long int ark_netf;         /* number of error test failures              */
+  long int ark_nni;          /* number of Newton iterations performed      */
+  long int ark_nsetups;      /* number of setup calls                      */
+  int      ark_nhnil;        /* number of messages issued to the user that 
+			        t+h == t for the next iternal step         */
+
+  /*-----------------
+    Diagnostic output
+    -----------------*/
+  booleantype ark_report;   /* flag to enable/disable diagnostic output    */
+  FILE       *ark_diagfp;   /* diagnostic outputs are sent to ark_diagfp   */
+
+  /*-----------------------------
+    Space requirements for ARKODE 
+    -----------------------------*/
+  long int ark_lrw1;        /* no. of realtype words in 1 N_Vector          */ 
+  long int ark_liw1;        /* no. of integer words in 1 N_Vector           */ 
+  long int ark_lrw;         /* no. of realtype words in ARKODE work vectors */
+  long int ark_liw;         /* no. of integer words in ARKODE work vectors  */
+
+
+  /*-----------------------
+    Fixed-point Solver Data 
+    -----------------------*/
+  booleantype ark_use_fp;     /* flag to enable fixed-point solver vs Newton */
+  long int    ark_fp_m;       /* number of vectors to use in acceleration    */
+  long int    *ark_fp_imap;   /* array of length m          */
+  realtype    *ark_fp_R;      /* array of length m*m        */
+  realtype    *ark_fp_gamma;  /* array of length m          */
+  N_Vector    *ark_fp_df;     /* vector array of length m   */
+  N_Vector    *ark_fp_dg;     /* vector array of length m   */
+  N_Vector    *ark_fp_q;      /* vector array of length m   */
+  N_Vector     ark_fp_fval;   /* temporary N_Vectors        */
+  N_Vector     ark_fp_fold;
+  N_Vector     ark_fp_gold;
+
+  /*------------------
+    Linear Solver Data 
+    ------------------*/
+  int (*ark_linit)(struct ARKodeMemRec *ark_mem);
+  int (*ark_lsetup)(struct ARKodeMemRec *ark_mem, int convfail, N_Vector ypred,
+		    N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+		    N_Vector vtemp2, N_Vector vtemp3); 
+  int (*ark_lsolve)(struct ARKodeMemRec *ark_mem, N_Vector b, N_Vector weight,
+		    N_Vector ycur, N_Vector fcur);
+  int (*ark_lfree)(struct ARKodeMemRec *ark_mem);
+  void *ark_lmem;
+  int ark_lsolve_type;   /* linear solver type: 0=iterative; 1=dense; 
+                                                2=band; 3=sparse; 4=custom */
+
+  /*-----------------------
+    Mass Matrix Solver Data 
+    -----------------------*/
+  booleantype ark_mass_matrix;   /* flag denoting use of a non-identity M  */
+  long int ark_mass_solves;      /* number of mass matrix solve calls      */
+  long int ark_mass_mult;        /* number of mass matrix product calls    */
+  ARKSpilsMassTimesVecFn ark_mtimes;   /* mass-matrix-vector product routine */
+  void *ark_mtimes_data;         /* user pointer passed to mtimes          */
+  int (*ark_minit)(struct ARKodeMemRec *ark_mem);
+  int (*ark_msetup)(struct ARKodeMemRec *ark_mem, N_Vector vtemp1, 
+		    N_Vector vtemp2, N_Vector vtemp3); 
+  int (*ark_msolve)(struct ARKodeMemRec *ark_mem, N_Vector b, N_Vector weight);
+  int (*ark_mfree)(struct ARKodeMemRec *ark_mem);
+  void *ark_mass_mem;
+  int ark_msolve_type;   /* mass matrix type: 0=iterative; 1=dense; 
+			                      2=band; 3=sparse; 4=custom */
+
+  /*------------
+    Saved Values
+    ------------*/
+  long int    ark_nstlp;        /* step number of last setup call             */
+  realtype    ark_h0u;          /* actual initial stepsize                    */
+  realtype    ark_tnew;         /* time of last successful step               */
+  realtype    ark_hold;         /* last successful h value used               */
+  booleantype ark_jcur;         /* is Jacobian info. for lin. solver current? */
+  realtype    ark_tolsf;        /* tolerance scale factor                     */
+  booleantype ark_setupNonNull; /* does ark_lsetup do anything?               */
+  booleantype ark_MassSetupNonNull; /* does ark_msetup do anything?           */
+  booleantype ark_VabstolMallocDone;
+  booleantype ark_VRabstolMallocDone;
+  booleantype ark_MallocDone;  
+  booleantype ark_resized;      /* denotes first step after ARKodeResize      */
+  booleantype ark_firststage;   /* denotes first stage in simulation          */
+
+  /*-------------------------------------------
+    Error handler function and error ouput file 
+    -------------------------------------------*/
+  ARKErrHandlerFn ark_ehfun;    /* error messages are handled by ehfun        */
+  void           *ark_eh_data;  /* data pointer passed to ehfun               */
+  FILE           *ark_errfp;    /* ARKODE error messages are sent to errfp    */
+
+  /*----------------
+    Rootfinding Data
+    ----------------*/
+  ARKRootFn    ark_gfun;        /* function g for roots sought                  */
+  int          ark_nrtfn;       /* number of components of g                    */
+  int         *ark_iroots;      /* array for root information                   */
+  int         *ark_rootdir;     /* array specifying direction of zero-crossing  */
+  realtype     ark_tlo;         /* nearest endpoint of interval in root search  */
+  realtype     ark_thi;         /* farthest endpoint of interval in root search */
+  realtype     ark_trout;       /* t value returned by rootfinding routine      */
+  realtype    *ark_glo;         /* saved array of g values at t = tlo           */
+  realtype    *ark_ghi;         /* saved array of g values at t = thi           */
+  realtype    *ark_grout;       /* array of g values at t = trout               */
+  realtype     ark_toutc;       /* copy of tout (if NORMAL mode)                */
+  realtype     ark_ttol;        /* tolerance on root location                   */
+  int          ark_taskc;       /* copy of parameter itask                      */
+  int          ark_irfnd;       /* flag showing whether last step had a root    */
+  long int     ark_nge;         /* counter for g evaluations                    */
+  booleantype *ark_gactive;     /* array with active/inactive event functions   */
+  int          ark_mxgnull;     /* num. warning messages about possible g==0    */
+
+  /*----------------------------------------------------
+    User-supplied step solution post-processing function
+    ----------------------------------------------------*/
+  ARKPostProcessStepFn ark_ProcessStep;
+
+} *ARKodeMem;
+
+
+
+/*===============================================================
+     I N T E R F A C E   T O    L I N E A R   S O L V E R S
+===============================================================*/
+  
+/*---------------------------------------------------------------
+ Communication between ARKODE and a ARKODE Linear Solver
+-----------------------------------------------------------------
+ convfail (input to ark_lsetup)
+
+ ARK_NO_FAILURES : Either this is the first ark_setup call for 
+                   this step, or the local error test failed on 
+		   the previous attempt at this step (but the 
+		   Newton iteration converged).
+
+ ARK_FAIL_BAD_J  : This value is passed to ark_lsetup if
+
+                  (a) The previous Newton corrector iteration
+                      did not converge and the linear solver's
+                      setup routine indicated that its Jacobian-
+                      related data is not current
+                                   or
+                  (b) During the previous Newton corrector
+                      iteration, the linear solver's solve 
+		      routine failed in a recoverable manner 
+		      and the linear solver's setup routine 
+		      indicated that its Jacobian-related data 
+		      is not current.
+
+ ARK_FAIL_OTHER  : During the current internal step try, the
+                   previous Newton iteration failed to converge
+		   even though the linear solver was using 
+		   current Jacobian-related data.
+---------------------------------------------------------------*/
+  
+/* Constants for convfail (input to ark_lsetup) */
+#define ARK_NO_FAILURES 0
+#define ARK_FAIL_BAD_J  1
+#define ARK_FAIL_OTHER  2
+
+/*---------------------------------------------------------------
+ int (*ark_linit)(ARKodeMem ark_mem);
+-----------------------------------------------------------------
+ The purpose of ark_linit is to complete initializations for a
+ specific linear solver, such as counters and statistics.
+ An LInitFn should return 0 if it has successfully initialized 
+ the ARKODE linear solver and a negative value otherwise.
+ If an error does occur, an appropriate message should be sent 
+ to the error handler function.
+---------------------------------------------------------------*/
+  
+/*---------------------------------------------------------------
+ int (*ark_lsetup)(ARKodeMem ark_mem, int convfail, 
+                   N_Vector ypred, N_Vector fpred, 
+		   booleantype *jcurPtr, N_Vector vtemp1, 
+		   N_Vector vtemp2, N_Vector vtemp3);
+ -----------------------------------------------------------------
+ The job of ark_lsetup is to prepare the linear solver for
+ subsequent calls to ark_lsolve. It may recompute Jacobian-
+ related data is it deems necessary. Its parameters are as
+ follows:
+
+ ark_mem - problem memory pointer of type ARKodeMem. See the
+          typedef earlier in this file.
+
+ convfail - a flag to indicate any problem that occurred during
+            the solution of the nonlinear equation on the
+            current time step for which the linear solver is
+            being used. This flag can be used to help decide
+            whether the Jacobian data kept by a ARKODE linear
+            solver needs to be updated or not.
+            Its possible values have been documented above.
+
+ ypred - the predicted y vector for the current ARKODE internal
+         step.
+
+ fpred - f(tn, ypred).
+
+ jcurPtr - a pointer to a boolean to be filled in by ark_lsetup.
+           The function should set *jcurPtr=TRUE if its Jacobian
+           data is current after the call and should set
+           *jcurPtr=FALSE if its Jacobian data is not current.
+           Note: If ark_lsetup calls for re-evaluation of
+           Jacobian data (based on convfail and ARKODE state
+           data), it should return *jcurPtr=TRUE always;
+           otherwise an infinite loop can result.
+
+ vtemp1 - temporary N_Vector provided for use by ark_lsetup.
+
+ vtemp3 - temporary N_Vector provided for use by ark_lsetup.
+
+ vtemp3 - temporary N_Vector provided for use by ark_lsetup.
+
+ The ark_lsetup routine should return 0 if successful, a positive
+ value for a recoverable error, and a negative value for an
+ unrecoverable error.
+---------------------------------------------------------------*/
+
+/*---------------------------------------------------------------
+ int (*ark_lsolve)(ARKodeMem ark_mem, N_Vector b, N_Vector weight,
+                   N_Vector ycur, N_Vector fcur);
+-----------------------------------------------------------------
+ ark_lsolve must solve the linear equation P x = b, where
+ P is some approximation to (M - gamma J), M is the system mass
+ matrix, J = (df/dy)(tn,ycur), and the RHS vector b is input. The 
+ N-vector ycur contains the solver's current approximation to 
+ y(tn) and the vector fcur contains the N_Vector f(tn,ycur). The 
+ solution is to be returned in the vector b. ark_lsolve returns 
+ a positive value for a recoverable error and a negative value 
+ for an unrecoverable error. Success is indicated by a 0 return 
+ value.
+---------------------------------------------------------------*/
+
+/*---------------------------------------------------------------
+ int (*ark_lfree)(ARKodeMem ark_mem);
+-----------------------------------------------------------------
+ ark_lfree should free up any memory allocated by the linear
+ solver. This routine is called once a problem has been
+ completed and the linear solver is no longer needed.  It should 
+ return 0 upon success, or a nonzero on failure.
+---------------------------------------------------------------*/
+
+
+
+/*---------------------------------------------------------------
+ int (*ark_minit)(ARKodeMem ark_mem);
+-----------------------------------------------------------------
+ The purpose of ark_minit is to complete initializations for a
+ specific mass matrix linear solver, such as counters and 
+ statistics. An function of this type should return 0 if it has 
+ successfully initialized the mass matrix linear solver and a 
+ negative value otherwise.  If an error does occur, an 
+ appropriate message should be sent to the error handler function.
+---------------------------------------------------------------*/
+  
+/*---------------------------------------------------------------
+ int (*ark_msetup)(ARKodeMem ark_mem, N_Vector vtemp1, 
+                   N_Vector vtemp2, N_Vector vtemp3);
+ -----------------------------------------------------------------
+ The job of ark_msetup is to prepare the mass matrix solver for
+ subsequent calls to ark_msolve. It may recompute mass matrix
+ related data is it deems necessary. Its parameters are as
+ follows:
+
+ ark_mem - problem memory pointer of type ARKodeMem. See the
+          typedef earlier in this file.
+
+ vtemp1 - temporary N_Vector provided for use by ark_lsetup.
+
+ vtemp3 - temporary N_Vector provided for use by ark_lsetup.
+
+ vtemp3 - temporary N_Vector provided for use by ark_lsetup.
+
+ The ark_msetup routine should return 0 if successful, and a 
+ negative value for an unrecoverable error.
+---------------------------------------------------------------*/
+
+/*---------------------------------------------------------------
+ int (*ark_msolve)(ARKodeMem ark_mem, N_Vector b, N_Vector weight);
+-----------------------------------------------------------------
+ ark_msolve must solve the linear equation M x = b, where
+ M is the system mass matrix, and the RHS vector b is input. The
+ solution is to be returned in the vector b.  The ark_msolve
+ routine returns a positive value for a recoverable error and 
+ a negative value for an unrecoverable error. Success is 
+ indicated by a 0 return value.
+---------------------------------------------------------------*/
+
+/*---------------------------------------------------------------
+ int (*ark_mfree)(ARKodeMem ark_mem);
+-----------------------------------------------------------------
+ ark_mfree should free up any memory allocated by the mass matrix
+ solver. This routine is called once a problem has been
+ completed and the solver is no longer needed.  It should return
+ 0 upon success, or a nonzero on failure.
+---------------------------------------------------------------*/
+
+  
+/*===============================================================
+   ARKODE PROTOTYPE FUNCTIONS (MAY BE REPLACED BY USER)
+===============================================================*/
+
+/* Prototype of internal ewtSet function */
+int arkEwtSet(N_Vector ycur, N_Vector weight, void *data);
+
+/* Prototype of internal rwtSet function */
+int arkRwtSet(N_Vector ycur, N_Vector weight, void *data);
+
+/* Prototype of internal errHandler function */
+void arkErrHandler(int error_code, const char *module, 
+		   const char *function, char *msg, void *data);
+
+/* Prototype of internal explicit stability estimation function */
+int arkExpStab(N_Vector y, realtype t, realtype *hstab, void *user_data);
+
+/*===============================================================
+   HIGH LEVEL ERROR HANDLER, USED THROUGHOUT ARKODE
+===============================================================*/
+
+void arkProcessError(ARKodeMem ark_mem, int error_code, 
+		     const char *module, const char *fname, 
+		     const char *msgfmt, ...);
+
+/*===============================================================
+   ARKODE ERROR MESSAGES
+===============================================================*/
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define MSG_TIME        "t = %Lg"
+#define MSG_TIME_H      "t = %Lg and h = %Lg"
+#define MSG_TIME_INT    "t = %Lg is not between tcur - hold = %Lg and tcur = %Lg."
+#define MSG_TIME_TOUT   "tout = %Lg"
+#define MSG_TIME_TSTOP  "tstop = %Lg"
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define MSG_TIME        "t = %lg"
+#define MSG_TIME_H      "t = %lg and h = %lg"
+#define MSG_TIME_INT    "t = %lg is not between tcur - hold = %lg and tcur = %lg."
+#define MSG_TIME_TOUT   "tout = %lg"
+#define MSG_TIME_TSTOP  "tstop = %lg"
+
+#else
+
+#define MSG_TIME        "t = %g"
+#define MSG_TIME_H      "t = %g and h = %g"
+#define MSG_TIME_INT    "t = %g is not between tcur - hold = %g and tcur = %g."
+#define MSG_TIME_TOUT   "tout = %g"
+#define MSG_TIME_TSTOP  "tstop = %g"
+
+#endif
+
+/* Initialization and I/O error messages */
+#define MSGARK_NO_MEM        "arkode_mem = NULL illegal."
+#define MSGARK_ARKMEM_FAIL   "Allocation of arkode_mem failed."
+#define MSGARK_MEM_FAIL      "A memory request failed."
+#define MSGARK_NO_MALLOC     "Attempt to call before ARKodeInit."
+#define MSGARK_NEG_MAXORD    "maxord <= 0 illegal."
+#define MSGARK_BAD_MAXORD    "Illegal attempt to increase maximum method order."
+#define MSGARK_NEG_HMIN      "hmin < 0 illegal."
+#define MSGARK_NEG_HMAX      "hmax < 0 illegal."
+#define MSGARK_BAD_HMIN_HMAX "Inconsistent step size limits: hmin > hmax."
+#define MSGARK_BAD_RELTOL    "reltol < 0 illegal."
+#define MSGARK_BAD_ABSTOL    "abstol has negative component(s) (illegal)."
+#define MSGARK_NULL_ABSTOL   "abstol = NULL illegal."
+#define MSGARK_BAD_RABSTOL   "rabstol has negative component(s) (illegal)."
+#define MSGARK_NULL_RABSTOL  "rabstol = NULL illegal."
+#define MSGARK_NULL_Y0       "y0 = NULL illegal."
+#define MSGARK_NULL_F        "Must specify at least one of fe, fi (both NULL)."
+#define MSGARK_NULL_G        "g = NULL illegal."
+#define MSGARK_BAD_NVECTOR   "A required vector operation is not implemented."
+#define MSGARK_BAD_K         "Illegal value for k."
+#define MSGARK_NULL_DKY      "dky = NULL illegal."
+#define MSGARK_BAD_T         "Illegal value for t." MSG_TIME_INT
+#define MSGARK_NO_ROOT       "Rootfinding was not initialized."
+
+/* ARKode Error Messages */
+#define MSGARK_LSOLVE_NULL    "The linear solver's solve routine is NULL."
+#define MSGARK_YOUT_NULL      "yout = NULL illegal."
+#define MSGARK_TRET_NULL      "tret = NULL illegal."
+#define MSGARK_BAD_EWT        "Initial ewt has component(s) equal to zero (illegal)."
+#define MSGARK_EWT_NOW_BAD    "At " MSG_TIME ", a component of ewt has become <= 0."
+#define MSGARK_BAD_RWT        "Initial rwt has component(s) equal to zero (illegal)."
+#define MSGARK_RWT_NOW_BAD    "At " MSG_TIME ", a component of rwt has become <= 0."
+#define MSGARK_BAD_ITASK      "Illegal value for itask."
+#define MSGARK_BAD_H0         "h0 and tout - t0 inconsistent."
+#define MSGARK_BAD_TOUT       "Trouble interpolating at " MSG_TIME_TOUT ". tout too far back in direction of integration"
+#define MSGARK_EWT_FAIL       "The user-provide EwtSet function failed."
+#define MSGARK_EWT_NOW_FAIL   "At " MSG_TIME ", the user-provide EwtSet function failed."
+#define MSGARK_RWT_FAIL       "The user-provide RwtSet function failed."
+#define MSGARK_RWT_NOW_FAIL   "At " MSG_TIME ", the user-provide RwtSet function failed."
+#define MSGARK_LINIT_FAIL     "The linear solver's init routine failed."
+#define MSGARK_LFREE_FAIL     "The linear solver's free routine failed."
+#define MSGARK_HNIL_DONE      "The above warning has been issued mxhnil times and will not be issued again for this problem."
+#define MSGARK_TOO_CLOSE      "tout too close to t0 to start integration."
+#define MSGARK_MAX_STEPS      "At " MSG_TIME ", mxstep steps taken before reaching tout."
+#define MSGARK_TOO_MUCH_ACC   "At " MSG_TIME ", too much accuracy requested."
+#define MSGARK_HNIL           "Internal " MSG_TIME_H " are such that t + h = t on the next step. The solver will continue anyway."
+#define MSGARK_ERR_FAILS      "At " MSG_TIME_H ", the error test failed repeatedly or with |h| = hmin."
+#define MSGARK_CONV_FAILS     "At " MSG_TIME_H ", the solver convergence test failed repeatedly or with |h| = hmin."
+#define MSGARK_SETUP_FAILED   "At " MSG_TIME ", the setup routine failed in an unrecoverable manner."
+#define MSGARK_SOLVE_FAILED   "At " MSG_TIME ", the solve routine failed in an unrecoverable manner."
+#define MSGARK_RHSFUNC_FAILED "At " MSG_TIME ", the right-hand side routine failed in an unrecoverable manner."
+#define MSGARK_RHSFUNC_UNREC  "At " MSG_TIME ", the right-hand side failed in a recoverable manner, but no recovery is possible."
+#define MSGARK_RHSFUNC_REPTD  "At " MSG_TIME " repeated recoverable right-hand side function errors."
+#define MSGARK_RHSFUNC_FIRST  "The right-hand side routine failed at the first call."
+#define MSGARK_RTFUNC_FAILED  "At " MSG_TIME ", the rootfinding routine failed in an unrecoverable manner."
+#define MSGARK_CLOSE_ROOTS    "Root found at and very near " MSG_TIME "."
+#define MSGARK_BAD_TSTOP      "The value " MSG_TIME_TSTOP " is behind current " MSG_TIME " in the direction of integration."
+#define MSGARK_INACTIVE_ROOTS "At the end of the first step, there are still some root functions identically 0. This warning will not be issued again."
+#define MSGARK_MISSING_FE     "Cannot specify that method is explicit without providing a function pointer to fe(t,y)."
+#define MSGARK_MISSING_FI     "Cannot specify that method is explicit without providing a function pointer to fe(t,y)."
+#define MSGARK_MISSING_F      "Cannot specify that method is ImEx without providing function pointers to fi(t,y) and fe(t,y)."
+#define MSGARK_RESIZE_FAIL    "Error in user-supplied resize() function."
+#define MSGARK_MASSINIT_FAIL  "The mass matrix solver's init routine failed."
+#define MSGARK_MASSSETUP_FAIL "The mass matrix solver's setup routine failed."
+#define MSGARK_MASSSOLVE_NULL "The mass matrix solver's solve routine is NULL."
+#define MSGARK_MASSSOLVE_FAIL "The mass matrix solver failed."
+#define MSGARK_MASSFREE_FAIL  "The mass matrixsolver's free routine failed."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/arkode/arkode_io.c b/src/arkode/arkode_io.c
new file mode 100644
index 0000000..7be7adf
--- /dev/null
+++ b/src/arkode/arkode_io.c
@@ -0,0 +1,2944 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for the optional input and 
+ * output functions for the ARKODE solver.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "arkode_impl.h"
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+
+/*===============================================================
+ ARKODE optional input functions
+===============================================================*/
+
+/*---------------------------------------------------------------
+ ARKodeSetDefaults:
+
+ Resets all optional inputs to ARKode default values.  Does not 
+ change problem-defining function pointers fe and fi or 
+ user_data pointer.  Also leaves alone any data 
+ structures/options related to root-finding (those can be reset 
+ using ARKodeRootInit).
+---------------------------------------------------------------*/
+int ARKodeSetDefaults(void *arkode_mem)
+{
+  int i, j;
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetDefaults", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Set default values for integrator optional inputs */
+  ark_mem->ark_q                = Q_DEFAULT;      /* method order */
+  ark_mem->ark_p                = 0;              /* embedding order */
+  ark_mem->ark_dense_q          = QDENSE_DEF;     /* dense output order */
+  ark_mem->ark_expstab          = arkExpStab;     /* explicit stability fn */
+  ark_mem->ark_estab_data       = ark_mem;        /* explicit stability data */
+  ark_mem->ark_fixedstep        = FALSE;          /* default to use adaptive steps */
+  ark_mem->ark_hadapt           = NULL;           /* step adaptivity fn */
+  ark_mem->ark_hadapt_data      = NULL;           /* step adaptivity data */
+  ark_mem->ark_hadapt_cfl       = CFLFAC;         /* explicit stability factor */
+  ark_mem->ark_hadapt_safety    = SAFETY;         /* step adaptivity safety factor  */
+  ark_mem->ark_hadapt_bias      = BIAS;           /* step adaptivity error bias */
+  ark_mem->ark_hadapt_growth    = GROWTH;         /* step adaptivity growth factor */
+  ark_mem->ark_hadapt_lbound    = HFIXED_LB;      /* step adaptivity no-change lower bound */
+  ark_mem->ark_hadapt_ubound    = HFIXED_UB;      /* step adaptivity no-change upper bound */
+  ark_mem->ark_hadapt_pq        = FALSE;          /* use embedding order */
+  ark_mem->ark_hadapt_imethod   = 0;              /* PID controller */
+  ark_mem->ark_hadapt_k1        = AD0_K1;         /* step adaptivity parameter */
+  ark_mem->ark_hadapt_k2        = AD0_K2;         /* step adaptivity parameter */
+  ark_mem->ark_hadapt_k3        = AD0_K3;         /* step adaptivity parameter */
+  ark_mem->ark_predictor        = 0;              /* trivial predictor */
+  ark_mem->ark_reltol           = 1.e-4;          /* relative tolerance */
+  ark_mem->ark_itol             = ARK_SS;         /* scalar-scalar solution tolerances */
+  ark_mem->ark_ritol            = ARK_SS;         /* scalar-scalar residual tolerances */
+  ark_mem->ark_Sabstol          = 1.e-9;          /* solution absolute tolerance */
+  ark_mem->ark_SRabstol         = 1.e-9;          /* residual absolute tolerance */
+  ark_mem->ark_user_efun        = FALSE;          /* no user-supplied ewt function */
+  ark_mem->ark_efun             = arkEwtSet;      /* built-in ewt function */
+  ark_mem->ark_e_data           = NULL;           /* ewt function data */
+  ark_mem->ark_user_rfun        = FALSE;          /* no user-supplied rwt function */
+  ark_mem->ark_rfun             = arkRwtSet;      /* built-in rwt function */
+  ark_mem->ark_e_data           = NULL;           /* rwt function data */
+  ark_mem->ark_linear           = FALSE;          /* nonlinear problem */
+  ark_mem->ark_linear_timedep   = TRUE;           /* dfi/dy depends on t */
+  ark_mem->ark_explicit         = FALSE;          /* fi(t,y) will be used */
+  ark_mem->ark_implicit         = FALSE;          /* fe(t,y) will be used */
+  ark_mem->ark_ehfun            = arkErrHandler;  /* default error handler fn */
+  ark_mem->ark_eh_data          = ark_mem;        /* error handler data */
+  ark_mem->ark_errfp            = stderr;         /* output stream for errors */
+  ark_mem->ark_mxstep           = MXSTEP_DEFAULT; /* max number of steps */
+  ark_mem->ark_mxhnil           = MXHNIL;         /* max warns of t+h==t */
+  ark_mem->ark_hin              = ZERO;           /* determine initial step on-the-fly */
+  ark_mem->ark_hmin             = ZERO;           /* no minimum step size */
+  ark_mem->ark_hmax_inv         = ZERO;           /* no maximum step size */
+  ark_mem->ark_tstopset         = FALSE;          /* no stop time set */
+  ark_mem->ark_tstop            = ZERO;           /* no fixed stop time */
+  ark_mem->ark_maxcor           = MAXCOR;         /* max nonlinear iters/stage */
+  ark_mem->ark_maxnef           = MAXNEF;         /* max error test fails */
+  ark_mem->ark_maxncf           = MAXNCF;         /* max convergence fails */
+  ark_mem->ark_nlscoef          = NLSCOEF;        /* nonlinear tolerance coefficient */
+  ark_mem->ark_etamx1           = ETAMX1;         /* max change on first step */
+  ark_mem->ark_etamxf           = ETAMXF;         /* max change on error-failed step */
+  ark_mem->ark_small_nef        = SMALL_NEF;      /* num error fails before ETAMXF enforced */
+  ark_mem->ark_etacf            = ETACF;          /* max change on convergence failure */
+  ark_mem->ark_crdown           = CRDOWN;         /* nonlinear convergence estimate coeff. */
+  ark_mem->ark_rdiv             = RDIV;           /* nonlinear divergence tolerance */
+  ark_mem->ark_dgmax            = DGMAX;          /* max step change before recomputing J or P */
+  ark_mem->ark_msbp             = MSBP;           /* max steps between updates to J or P */
+  ark_mem->ark_use_fp           = FALSE;          /* use Newton solver */
+  ark_mem->ark_fp_m             = FP_ACCEL_M;     /* num Anderson acceleration vectors */
+  ark_mem->ark_diagfp           = NULL;           /* no solver diagnostics file */
+  ark_mem->ark_report           = FALSE;          /* don't report solver diagnostics */
+  ark_mem->ark_stages           = 0;              /* no stages */
+  ark_mem->ark_istage           = 0;              /* current stage */
+  for (i=0; i<ARK_S_MAX; i++) {                   /* no Butcher table */
+    for (j=0; j<ARK_S_MAX; j++) {
+      ARK_A(ark_mem->ark_Ae,i,j) = ZERO;
+      ARK_A(ark_mem->ark_Ai,i,j) = ZERO;
+    }
+    ark_mem->ark_ce[i]  = ZERO;
+    ark_mem->ark_ci[i]  = ZERO;
+    ark_mem->ark_be[i]  = ZERO;
+    ark_mem->ark_bi[i]  = ZERO;
+    ark_mem->ark_b2e[i] = ZERO;
+    ark_mem->ark_b2i[i] = ZERO;
+  }
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetOptimalParams:
+
+ Sets all adaptivity and solver parameters to our 'best guess' 
+ values, for a given integration method (ERK, DIRK, ARK), a 
+ given method order, and a given nonlinear solver type.  Should
+ only be called after the method order, solver, and integration
+ method have been set.
+---------------------------------------------------------------*/
+int ARKodeSetOptimalParams(void *arkode_mem)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetOptimalParams", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Choose values based on method, order */
+
+  /*    explicit */
+  if (ark_mem->ark_explicit) {
+    ark_mem->ark_hadapt_imethod = 1;
+    ark_mem->ark_hadapt_safety  = RCONST(0.99);
+    ark_mem->ark_hadapt_bias    = RCONST(1.2);
+    ark_mem->ark_hadapt_growth  = RCONST(25.0);
+    ark_mem->ark_hadapt_k1      = RCONST(0.8);
+    ark_mem->ark_hadapt_k2      = RCONST(0.31);
+    ark_mem->ark_etamxf         = RCONST(0.3);
+
+  /*    implicit */
+  } else if (ark_mem->ark_implicit) {
+    switch (ark_mem->ark_q) {
+    case 2:   /* just use standard defaults since better ones unknown */
+      ark_mem->ark_hadapt_imethod   = 0;
+      ark_mem->ark_hadapt_safety    = SAFETY;
+      ark_mem->ark_hadapt_bias      = BIAS;
+      ark_mem->ark_hadapt_growth    = GROWTH;
+      ark_mem->ark_etamxf           = ETAMXF;
+      ark_mem->ark_nlscoef          = RCONST(0.001);
+      ark_mem->ark_maxcor           = 5;
+      ark_mem->ark_crdown           = CRDOWN;
+      ark_mem->ark_rdiv             = RDIV;
+      ark_mem->ark_dgmax            = DGMAX;
+      ark_mem->ark_msbp             = MSBP;
+      ark_mem->ark_small_nef        = SMALL_NEF;
+      ark_mem->ark_etacf            = ETACF;
+      break;
+    case 3:
+      ark_mem->ark_hadapt_imethod   = 2;
+      ark_mem->ark_hadapt_safety    = RCONST(0.957);
+      ark_mem->ark_hadapt_bias      = RCONST(1.9);
+      ark_mem->ark_hadapt_growth    = RCONST(17.6);
+      ark_mem->ark_etamxf           = RCONST(0.45);
+      ark_mem->ark_nlscoef          = RCONST(0.22);
+      ark_mem->ark_crdown           = RCONST(0.17);
+      ark_mem->ark_rdiv             = RCONST(2.3);
+      ark_mem->ark_dgmax            = RCONST(0.19);
+      ark_mem->ark_msbp             = 60;
+      ark_mem->ark_small_nef        = SMALL_NEF;
+      ark_mem->ark_etacf            = ETACF;
+      break;
+    case 4:
+      ark_mem->ark_hadapt_imethod   = 0;
+      ark_mem->ark_hadapt_safety    = RCONST(0.988);
+      ark_mem->ark_hadapt_bias      = RCONST(1.2);
+      ark_mem->ark_hadapt_growth    = RCONST(31.5);
+      ark_mem->ark_hadapt_k1        = RCONST(0.535);
+      ark_mem->ark_hadapt_k2        = RCONST(0.209);
+      ark_mem->ark_hadapt_k3        = RCONST(0.148);
+      ark_mem->ark_etamxf           = RCONST(0.33);
+      ark_mem->ark_nlscoef          = RCONST(0.24);
+      ark_mem->ark_crdown           = RCONST(0.26);
+      ark_mem->ark_rdiv             = RCONST(2.3);
+      ark_mem->ark_dgmax            = RCONST(0.16);
+      ark_mem->ark_msbp             = 31;
+      ark_mem->ark_small_nef        = SMALL_NEF;
+      ark_mem->ark_etacf            = ETACF;
+      break;
+    case 5:
+      ark_mem->ark_hadapt_imethod   = 0;
+      ark_mem->ark_hadapt_safety    = RCONST(0.937);
+      ark_mem->ark_hadapt_bias      = RCONST(3.3);
+      ark_mem->ark_hadapt_growth    = RCONST(22.0);
+      ark_mem->ark_hadapt_k1        = RCONST(0.56);
+      ark_mem->ark_hadapt_k2        = RCONST(0.338);
+      ark_mem->ark_hadapt_k3        = RCONST(0.14);
+      ark_mem->ark_etamxf           = RCONST(0.44);
+      ark_mem->ark_nlscoef          = RCONST(0.25);
+      ark_mem->ark_crdown           = RCONST(0.4);
+      ark_mem->ark_rdiv             = RCONST(2.3);
+      ark_mem->ark_dgmax            = RCONST(0.32);
+      ark_mem->ark_msbp             = 31;
+      ark_mem->ark_small_nef        = SMALL_NEF;
+      ark_mem->ark_etacf            = ETACF;
+      break;
+    }
+
+    /* newton vs fixed-point */
+    if (ark_mem->ark_use_fp)  ark_mem->ark_maxcor = 10;
+
+  /*    imex */
+  } else {
+    switch (ark_mem->ark_q) {
+    case 3:
+      ark_mem->ark_hadapt_imethod   = 0;
+      ark_mem->ark_hadapt_safety    = RCONST(0.965);
+      ark_mem->ark_hadapt_bias      = RCONST(1.42);
+      ark_mem->ark_hadapt_growth    = RCONST(28.7);
+      ark_mem->ark_hadapt_k1        = RCONST(0.54);
+      ark_mem->ark_hadapt_k2        = RCONST(0.36);
+      ark_mem->ark_hadapt_k3        = RCONST(0.14);
+      ark_mem->ark_etamxf           = RCONST(0.46);
+      ark_mem->ark_nlscoef          = RCONST(0.22);
+      ark_mem->ark_crdown           = RCONST(0.17);
+      ark_mem->ark_rdiv             = RCONST(2.3);
+      ark_mem->ark_dgmax            = RCONST(0.19);
+      ark_mem->ark_msbp             = 60;
+      ark_mem->ark_small_nef        = SMALL_NEF;
+      ark_mem->ark_etacf            = ETACF;
+      break;
+    case 4:
+      ark_mem->ark_hadapt_imethod   = 0;
+      ark_mem->ark_hadapt_safety    = RCONST(0.97);
+      ark_mem->ark_hadapt_bias      = RCONST(1.35);
+      ark_mem->ark_hadapt_growth    = RCONST(25.0);
+      ark_mem->ark_hadapt_k1        = RCONST(0.543);
+      ark_mem->ark_hadapt_k2        = RCONST(0.297);
+      ark_mem->ark_hadapt_k3        = RCONST(0.14);
+      ark_mem->ark_etamxf           = RCONST(0.47);
+      ark_mem->ark_nlscoef          = RCONST(0.24);
+      ark_mem->ark_crdown           = RCONST(0.26);
+      ark_mem->ark_rdiv             = RCONST(2.3);
+      ark_mem->ark_dgmax            = RCONST(0.16);
+      ark_mem->ark_msbp             = 31;
+      ark_mem->ark_small_nef        = SMALL_NEF;
+      ark_mem->ark_etacf            = ETACF;
+      break;
+    case 5:
+      ark_mem->ark_hadapt_imethod   = 1;
+      ark_mem->ark_hadapt_safety    = RCONST(0.993);
+      ark_mem->ark_hadapt_bias      = RCONST(1.15);
+      ark_mem->ark_hadapt_growth    = RCONST(28.5);
+      ark_mem->ark_hadapt_k1        = RCONST(0.8);
+      ark_mem->ark_hadapt_k2        = RCONST(0.35);
+      ark_mem->ark_etamxf           = RCONST(0.3);
+      ark_mem->ark_nlscoef          = RCONST(0.25);
+      ark_mem->ark_crdown           = RCONST(0.4);
+      ark_mem->ark_rdiv             = RCONST(2.3);
+      ark_mem->ark_dgmax            = RCONST(0.32);
+      ark_mem->ark_msbp             = 31;
+      ark_mem->ark_small_nef        = SMALL_NEF;
+      ark_mem->ark_etacf            = ETACF;
+      break;
+    }
+
+    /* newton vs fixed-point */
+    if (ark_mem->ark_use_fp)  ark_mem->ark_maxcor = 10;
+
+  }
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetErrHandlerFn:
+
+ Specifies the error handler function
+---------------------------------------------------------------*/
+int ARKodeSetErrHandlerFn(void *arkode_mem, ARKErrHandlerFn ehfun, 
+			  void *eh_data)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetErrHandlerFn", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* set user-provided values, or defaults, depending on argument */
+  if (ehfun == NULL) {
+    ark_mem->ark_ehfun   = arkErrHandler;
+    ark_mem->ark_eh_data = ark_mem;
+  } else {
+    ark_mem->ark_ehfun   = ehfun;
+    ark_mem->ark_eh_data = eh_data;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetErrFile:
+
+ Specifies the FILE pointer for output (NULL means no messages)
+---------------------------------------------------------------*/
+int ARKodeSetErrFile(void *arkode_mem, FILE *errfp)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetErrFile", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  ark_mem->ark_errfp = errfp;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetUserData:
+
+ Specifies the user data pointer for f
+---------------------------------------------------------------*/
+int ARKodeSetUserData(void *arkode_mem, void *user_data)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetUserData", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  ark_mem->ark_user_data = user_data;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetDiagnostics:
+
+ Specifies to enable solver diagnostics, and specifies the FILE
+ pointer for output (diagfp==NULL disables output)
+---------------------------------------------------------------*/
+int ARKodeSetDiagnostics(void *arkode_mem, FILE *diagfp)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetDiagnostics", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  ark_mem->ark_diagfp = diagfp;
+  if (diagfp != NULL) {
+    ark_mem->ark_report = TRUE;
+  } else {
+    ark_mem->ark_report = FALSE;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetOrder:
+
+ Specifies the method order
+
+ ** Note in documentation that this should not be called along 
+    with ARKodeSetERKTable, ARKodeSetIRKTable, ARKodeSetARKTable, 
+    ARKodeSetERKTableNum, ARKodeSetIRKTableNum or 
+    ARKodeSetARKTableNum.  This routine is used to specify a 
+    desired method order using default Butcher tables, whereas 
+    any user-supplied table will have their own order associated 
+    with them.
+---------------------------------------------------------------*/
+int ARKodeSetOrder(void *arkode_mem, int ord)
+{
+  int i, j;
+
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetOrder", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* set user-provided value, or default, depending on argument */
+  if (ord <= 0) {
+    ark_mem->ark_q = Q_DEFAULT;
+  } else {
+    ark_mem->ark_q = ord;
+  }
+
+  /* clear Butcher tables, since user is requesting a change in method
+     or a reset to defaults.  Tables will be set in ARKInitialSetup. */
+  ark_mem->ark_stages = 0;
+  ark_mem->ark_istage = 0;
+  ark_mem->ark_p = 0;
+  for (i=0; i<ARK_S_MAX; i++) {
+    for (j=0; j<ARK_S_MAX; j++) {
+      ARK_A(ark_mem->ark_Ae,i,j) = ZERO;
+      ARK_A(ark_mem->ark_Ai,i,j) = ZERO;
+    }
+    ark_mem->ark_ce[i]  = ZERO;
+    ark_mem->ark_ci[i]  = ZERO;
+    ark_mem->ark_be[i]  = ZERO;
+    ark_mem->ark_bi[i]  = ZERO;
+    ark_mem->ark_b2e[i] = ZERO;
+    ark_mem->ark_b2i[i] = ZERO;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetDenseOrder:
+
+ Specifies the polynomial order for dense output.  Allowed values
+ range from 0 to min(q,5), where q is the order of the time 
+ integration method.  Illegal values imply to use the default.
+---------------------------------------------------------------*/
+int ARKodeSetDenseOrder(void *arkode_mem, int dord)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetDenseOrder", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* check input */
+  if (dord > 5) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetDenseOrder", "Dense output order must be <= 5");
+    return(ARK_ILL_INPUT);
+  }
+  /* NOTE: we check that dord < q internally, to allow for subsequent 
+     changes via ARKodeSetOrder */
+
+  /* set user-provided value, or default, depending on argument */
+  /* if ((dord < 0) || (dord > 5)) { */
+  if ((dord < 0) || (dord > 3)) {
+    ark_mem->ark_dense_q = QDENSE_DEF;
+  } else {
+    ark_mem->ark_dense_q = dord;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetLinear:
+
+ Specifies that the implicit portion of the problem is linear, 
+ and to tighten the linear solver tolerances while taking only 
+ one Newton iteration.  Not useful when used in combination with
+ the fixed-point solver.  Automatically tightens DeltaGammaMax 
+ to ensure that step size changes cause Jacobian recomputation.
+
+ The argument should be 1 or 0, where 1 indicates that the 
+ Jacobian of fi with respect to y depends on time, and
+ 0 indicates that it is not time dependent.  Alternately, when 
+ using an iterative linear solver this flag denotes time 
+ dependence of the preconditioner. 
+---------------------------------------------------------------*/
+int ARKodeSetLinear(void *arkode_mem, int timedepend)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetLinear", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+
+  ark_mem = (ARKodeMem) arkode_mem;
+  ark_mem->ark_linear = TRUE;
+  ark_mem->ark_linear_timedep = (timedepend == 1);
+  ark_mem->ark_dgmax = RCONST(100.0)*UNIT_ROUNDOFF;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetNonlinear:
+
+ Specifies that the implicit portion of the problem is nonlinear.
+ Used to undo a previous call to ARKodeSetLinear.  Automatically
+ loosens DeltaGammaMax back to default value.
+---------------------------------------------------------------*/
+int ARKodeSetNonlinear(void *arkode_mem)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetNonlinear", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+
+  ark_mem = (ARKodeMem) arkode_mem;
+  ark_mem->ark_linear = FALSE;
+  ark_mem->ark_linear_timedep = TRUE;
+  ark_mem->ark_dgmax = DGMAX;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetFixedPoint:
+
+ Specifies that the implicit portion of the problem should be 
+ solved using the accelerated fixed-point solver instead of the 
+ Newton iteration.  Allowed values for the dimension of the 
+ acceleration space, fp_m, must be non-negative.  Illegal 
+ values imply to use the default.
+---------------------------------------------------------------*/
+int ARKodeSetFixedPoint(void *arkode_mem, long int fp_m)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetFixedPoint", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+
+  ark_mem = (ARKodeMem) arkode_mem;
+  ark_mem->ark_use_fp = TRUE;
+  if (fp_m < 0) {
+    ark_mem->ark_fp_m = FP_ACCEL_M;
+  } else {
+    ark_mem->ark_fp_m = fp_m;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetNewton:
+
+ Specifies that the implicit portion of the problem should be 
+ solved using the modified Newton solver.  Used to undo a 
+ previous call to ARKodeSetFixedPoint.
+---------------------------------------------------------------*/
+int ARKodeSetNewton(void *arkode_mem)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetNewton", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+
+  ark_mem = (ARKodeMem) arkode_mem;
+  ark_mem->ark_use_fp = FALSE;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetExplicit:
+
+ Specifies that the implicit portion of the problem is disabled, 
+ and to use an explicit RK method.
+---------------------------------------------------------------*/
+int ARKodeSetExplicit(void *arkode_mem)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetExplicit", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* ensure that fe is defined */
+  if (ark_mem->ark_fe == NULL) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetExplicit", MSGARK_MISSING_FE);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set the relevant parameters */
+  ark_mem->ark_explicit = TRUE;
+  ark_mem->ark_implicit = FALSE;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetImplicit:
+
+ Specifies that the explicit portion of the problem is disabled, 
+ and to use an implicit RK method.
+---------------------------------------------------------------*/
+int ARKodeSetImplicit(void *arkode_mem)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetImplicit", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* ensure that fi is defined */
+  if (ark_mem->ark_fi == NULL) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetImplicit", MSGARK_MISSING_FI);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set the relevant parameters */
+  ark_mem->ark_implicit = TRUE;
+  ark_mem->ark_explicit = FALSE;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetImEx:
+
+ Specifies that the specifies that problem has both implicit and
+ explicit parts, and to use an ARK method (this is the default).
+---------------------------------------------------------------*/
+int ARKodeSetImEx(void *arkode_mem)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetImEx", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* ensure that fe and fi are defined */
+  if (ark_mem->ark_fe == NULL) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetImEx", MSGARK_MISSING_FE);
+    return(ARK_ILL_INPUT);
+  }
+  if (ark_mem->ark_fi == NULL) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetImEx", MSGARK_MISSING_FI);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set the relevant parameters */
+  ark_mem->ark_explicit = FALSE;
+  ark_mem->ark_implicit = FALSE;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetERKTable:
+
+ Specifies to use a customized Butcher table for the explicit 
+ portion of the system (automatically calls ARKodeSetExplicit).
+ 
+ If bembed==NULL, then the method is automatically flagged as a 
+ fixed-step method; a user MUST also call either 
+ ARKodeSetFixedStep or ARKodeSetInitStep to set the desired time 
+ step size.
+---------------------------------------------------------------*/
+int ARKodeSetERKTable(void *arkode_mem, int s, int q, int p,
+		      realtype *c, realtype *A, realtype *b, 
+		      realtype *bembed)
+{
+  int i, j;
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetERKTable", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* check for legal inputs */
+  if (s > ARK_S_MAX) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetERKTable", "s exceeds ARK_S_MAX");
+    return(ARK_ILL_INPUT);
+  }
+  if ((c == NULL) || (A == NULL) || (b == NULL)) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetERKTable", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+
+  /* clear any existing parameters */
+  ark_mem->ark_stages = 0;
+  ark_mem->ark_q = 0;
+  ark_mem->ark_p = 0;
+  for (i=0; i<ARK_S_MAX; i++) {
+    ark_mem->ark_ce[i]  = 0.0;
+    ark_mem->ark_be[i]  = 0.0;
+    ark_mem->ark_b2e[i] = 0.0;
+    for (j=0; j<ARK_S_MAX; j++) 
+      ARK_A(ark_mem->ark_Ae,i,j) = 0.0;
+  }
+
+  /* set the relevant parameters */
+  ark_mem->ark_stages = s;
+  ark_mem->ark_q = q;
+  ark_mem->ark_p = p;
+  for (i=0; i<s; i++) {
+    ark_mem->ark_ce[i]  = c[i];
+    ark_mem->ark_be[i]  = b[i];
+    for (j=0; j<s; j++) {
+      ARK_A(ark_mem->ark_Ae,i,j) = A[i*s + j];
+    }
+  }
+
+  /* set embedding (if applicable), otherwise set as fixed-step method */
+  if (bembed == NULL) {
+    ark_mem->ark_fixedstep = TRUE;
+  } else {
+    for (i=0; i<s; i++) 
+      ark_mem->ark_b2e[i] = bembed[i];
+  }
+  
+  /* set method as purely explicit */
+  if (ARKodeSetExplicit(arkode_mem) != ARK_SUCCESS) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetERKTable", MSGARK_MISSING_FE);
+    return(ARK_ILL_INPUT);
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetIRKTable:
+
+ Specifies to use a customized Butcher table for the implicit 
+ portion of the system (automatically calls ARKodeSetImplicit).
+
+ If bembed==NULL, then the method is automatically flagged as a 
+ fixed-step method; a user MUST also call either 
+ ARKodeSetFixedStep or ARKodeSetInitStep to set the desired time 
+ step size.
+---------------------------------------------------------------*/
+int ARKodeSetIRKTable(void *arkode_mem, int s, int q, int p,
+		      realtype *c, realtype *A, realtype *b, 
+		      realtype *bembed)
+{
+  int i, j;
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetIRKTable", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* check for legal inputs */
+  if (s > ARK_S_MAX) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetIRKTable", "s exceeds ARK_S_MAX");
+    return(ARK_ILL_INPUT);
+  }
+  if ((c == NULL) || (A == NULL) || (b == NULL)) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetIRKTable", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+
+  /* clear any existing parameters */
+  ark_mem->ark_stages = 0;
+  ark_mem->ark_q = 0;
+  ark_mem->ark_p = 0;
+  for (i=0; i<ARK_S_MAX; i++) {
+    ark_mem->ark_ci[i]  = 0.0;
+    ark_mem->ark_bi[i]  = 0.0;
+    ark_mem->ark_b2i[i] = 0.0;
+    for (j=0; j<ARK_S_MAX; j++) 
+      ARK_A(ark_mem->ark_Ai,i,j) = 0.0;
+  }
+
+  /* set the relevant parameters */
+  ark_mem->ark_stages = s;
+  ark_mem->ark_q = q;
+  ark_mem->ark_p = p;
+  for (i=0; i<s; i++) {
+    ark_mem->ark_ci[i]  = c[i];
+    ark_mem->ark_bi[i]  = b[i];
+    for (j=0; j<s; j++) {
+      ARK_A(ark_mem->ark_Ai,i,j) = A[i*s + j];
+    }
+  }
+
+  /* set embedding (if applicable), otherwise set as fixed-step method */
+  if (bembed == NULL) {
+    ark_mem->ark_fixedstep = TRUE;
+  } else {
+    for (i=0; i<s; i++) 
+      ark_mem->ark_b2i[i] = bembed[i];
+  }
+  
+  /* set method as purely implicit */
+  if (ARKodeSetImplicit(arkode_mem) != ARK_SUCCESS) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetIRKTable", MSGARK_MISSING_FI);
+    return(ARK_ILL_INPUT);
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetARKTables:
+
+ Specifies to use customized Butcher tables for the ImEx system
+ (automatically calls ARKodeSetImEx).
+
+ If either b2e==NULL or b2i==NULL, then the method is 
+ automatically flagged as a fixed-step method; a user MUST also 
+ call either ARKodeSetFixedStep or ARKodeSetInitStep to set the 
+ desired time step size.
+---------------------------------------------------------------*/
+int ARKodeSetARKTables(void *arkode_mem, int s, int q, int p,
+		       realtype *ci, realtype *ce, 
+		       realtype *Ai, realtype *Ae, 
+		       realtype *bi, realtype *be, 
+		       realtype *b2i, realtype *b2e)
+{
+  int i, j;
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetARKTables", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* check for legal inputs */
+  if (s > ARK_S_MAX) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetARKTables", "s exceeds ARK_S_MAX");
+    return(ARK_ILL_INPUT);
+  }
+  if ((ci == NULL) || (ce == NULL) || 
+      (Ai == NULL) || (Ae == NULL) || 
+      (bi == NULL) || (be == NULL)) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetARKTables", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+
+  /* clear any existing parameters */
+  ark_mem->ark_stages = 0;
+  ark_mem->ark_q = 0;
+  ark_mem->ark_p = 0;
+  for (i=0; i<ARK_S_MAX; i++) {
+    ark_mem->ark_ce[i]  = 0.0;
+    ark_mem->ark_ci[i]  = 0.0;
+    ark_mem->ark_be[i]  = 0.0;
+    ark_mem->ark_bi[i]  = 0.0;
+    ark_mem->ark_b2e[i] = 0.0;
+    ark_mem->ark_b2i[i] = 0.0;
+    for (j=0; j<ARK_S_MAX; j++) {
+      ARK_A(ark_mem->ark_Ai,i,j) = 0.0;
+      ARK_A(ark_mem->ark_Ae,i,j) = 0.0;
+    }
+  }
+
+  /* set the relevant parameters */
+  ark_mem->ark_stages = s;
+  ark_mem->ark_q = q;
+  ark_mem->ark_p = p;
+  for (i=0; i<s; i++) {
+    ark_mem->ark_ce[i]  = ce[i];
+    ark_mem->ark_ci[i]  = ci[i];
+    ark_mem->ark_be[i]  = be[i];
+    ark_mem->ark_bi[i]  = bi[i];
+    for (j=0; j<s; j++) {
+      ARK_A(ark_mem->ark_Ai,i,j) = Ai[i*s + j];
+      ARK_A(ark_mem->ark_Ae,i,j) = Ae[i*s + j];
+    }
+  }
+
+  /* set embeddings (if applicable), otherwise set as fixed-step method */
+  if ((b2e == NULL) || (b2i == NULL)) {
+    ark_mem->ark_fixedstep = TRUE;
+  } else {
+    for (i=0; i<s; i++) {
+      ark_mem->ark_b2e[i] = b2e[i];
+      ark_mem->ark_b2i[i] = b2i[i];
+    }
+  }
+
+  /* set method as ImEx */
+  if (ARKodeSetImEx(arkode_mem) != ARK_SUCCESS) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetARKTables", MSGARK_MISSING_F);
+    return(ARK_ILL_INPUT);
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetERKTableNum:
+
+ Specifies to use a pre-existing Butcher table for the explicit 
+ portion of the problem, based on the integer flag held in 
+ ARKodeLoadButcherTable() within the file arkode_butcher.c 
+ (automatically calls ARKodeSetExplicit).
+---------------------------------------------------------------*/
+int ARKodeSetERKTableNum(void *arkode_mem, int itable)
+{
+  int iflag;
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetERKTableNum", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* check that argument specifies an explicit table */
+  if (itable<MIN_ERK_NUM || itable>MAX_ERK_NUM) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetERKTableNum", 
+		    "Illegal ERK table number");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* fill in table based on argument */
+  iflag = ARKodeLoadButcherTable(itable, 
+				 &ark_mem->ark_stages, 
+				 &ark_mem->ark_q, 
+				 &ark_mem->ark_p, 
+				 ark_mem->ark_Ae, 
+				 ark_mem->ark_be, 
+				 ark_mem->ark_ce, 
+				 ark_mem->ark_b2e);
+  if (iflag != ARK_SUCCESS) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetERKTableNum", 
+		    "Error setting table with that index");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set method as purely explicit */
+  if (ARKodeSetExplicit(arkode_mem) != ARK_SUCCESS) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetERKTableNum", MSGARK_MISSING_FE);
+    return(ARK_ILL_INPUT);
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetIRKTableNum:
+
+ Specifies to use a pre-existing Butcher table for the implicit 
+ portion of the problem, based on the integer flag held in 
+ ARKodeLoadButcherTable() within the file arkode_butcher.c
+ (automatically calls ARKodeSetImplicit).
+---------------------------------------------------------------*/
+int ARKodeSetIRKTableNum(void *arkode_mem, int itable)
+{
+  int iflag;
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetIRKTableNum", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* check that argument specifies an implicit table */
+  if (itable<MIN_DIRK_NUM || itable>MAX_DIRK_NUM) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetIRKTableNum", 
+		    "Illegal IRK table number");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* fill in table based on argument */
+  iflag = ARKodeLoadButcherTable(itable, 
+				 &ark_mem->ark_stages, 
+				 &ark_mem->ark_q, 
+				 &ark_mem->ark_p, 
+				 ark_mem->ark_Ai, 
+				 ark_mem->ark_bi, 
+				 ark_mem->ark_ci, 
+				 ark_mem->ark_b2i);
+  if (iflag != ARK_SUCCESS) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetIRKTableNum", 
+		    "Error setting table with that index");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set method as purely implicit */
+  if (ARKodeSetImplicit(arkode_mem) != ARK_SUCCESS) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetIRKTableNum", MSGARK_MISSING_FI);
+    return(ARK_ILL_INPUT);
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetARKTableNum:
+
+ Specifies to use pre-existing Butcher tables for the ImEx system,
+ based on the integer flags held in ARKodeLoadButcherTable() 
+ within the file arkode_butcher.c (automatically calls ARKodeSetImEx).
+---------------------------------------------------------------*/
+int ARKodeSetARKTableNum(void *arkode_mem, int itable, int etable)
+{
+  int iflag, eflag;
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetARKTableNum", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* ensure that tables match */
+  iflag = 1;
+  if ( ((etable == ARK324L2SA_ERK_4_2_3) && (itable == ARK324L2SA_DIRK_4_2_3)) ||
+       ((etable == ARK436L2SA_ERK_6_3_4) && (itable == ARK436L2SA_DIRK_6_3_4)) ||
+       ((etable == ARK548L2SA_ERK_8_4_5) && (itable == ARK548L2SA_DIRK_8_4_5)) )
+    iflag = 0;
+  if (iflag) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetARKTableNum", 
+		    "Incompatible Butcher tables for ARK method");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* fill in tables based on arguments */
+  iflag = ARKodeLoadButcherTable(itable, 
+				 &ark_mem->ark_stages, 
+				 &ark_mem->ark_q, 
+				 &ark_mem->ark_p, 
+				 ark_mem->ark_Ai, 
+				 ark_mem->ark_bi, 
+				 ark_mem->ark_ci, 
+				 ark_mem->ark_b2i);
+  eflag = ARKodeLoadButcherTable(etable, 
+				 &ark_mem->ark_stages, 
+				 &ark_mem->ark_q, 
+				 &ark_mem->ark_p, 
+				 ark_mem->ark_Ae, 
+				 ark_mem->ark_be, 
+				 ark_mem->ark_ce, 
+				 ark_mem->ark_b2e);
+
+  /* check that requested tables are legal */
+  if (iflag != ARK_SUCCESS) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetARKTableNum", 
+		    "Illegal IRK table number");
+    return(ARK_ILL_INPUT);
+  }
+  if (eflag != ARK_SUCCESS) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetARKTableNum", 
+		    "Illegal ERK table number");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set method as ImEx */
+  if (ARKodeSetImEx(arkode_mem) != ARK_SUCCESS) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetARKTableNum", MSGARK_MISSING_F);
+    return(ARK_ILL_INPUT);
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxNumSteps:
+
+ Specifies the maximum number of integration steps
+---------------------------------------------------------------*/
+int ARKodeSetMaxNumSteps(void *arkode_mem, long int mxsteps)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxNumSteps", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Passing mxsteps=0 sets the default. Passing mxsteps<0 disables the test. */
+  if (mxsteps == 0)
+    ark_mem->ark_mxstep = MXSTEP_DEFAULT;
+  else
+    ark_mem->ark_mxstep = mxsteps;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxHnilWarns:
+
+ Specifies the maximum number of warnings for small h
+---------------------------------------------------------------*/
+int ARKodeSetMaxHnilWarns(void *arkode_mem, int mxhnil)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxHnilWarns", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Passing mxhnil=0 sets the default, otherwise use input. */
+  if (mxhnil == 0) {
+    ark_mem->ark_mxhnil = 10;
+  } else {
+    ark_mem->ark_mxhnil = mxhnil;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetInitStep:
+
+ Specifies the initial step size
+---------------------------------------------------------------*/
+int ARKodeSetInitStep(void *arkode_mem, realtype hin)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetInitStep", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Passing hin=0 sets the default, otherwise use input. */
+  if (hin == ZERO) {
+    ark_mem->ark_hin = ZERO;
+  } else {
+    ark_mem->ark_hin = hin;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMinStep:
+
+ Specifies the minimum step size
+---------------------------------------------------------------*/
+int ARKodeSetMinStep(void *arkode_mem, realtype hmin)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMinStep", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Passing a value <= 0 sets hmax = infinity */
+  if (hmin <= ZERO) {
+    ark_mem->ark_hmin = ZERO;
+    return(ARK_SUCCESS);
+  }
+
+  /* check that hmin and hmax are agreeable */
+  if (hmin * ark_mem->ark_hmax_inv > ONE) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetMinStep", MSGARK_BAD_HMIN_HMAX);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set the value */
+  ark_mem->ark_hmin = hmin;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxStep:
+
+ Specifies the maximum step size
+---------------------------------------------------------------*/
+int ARKodeSetMaxStep(void *arkode_mem, realtype hmax)
+{
+  realtype hmax_inv;
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxStep", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Passing a value <= 0 sets hmax = infinity */
+  if (hmax <= ZERO) {
+    ark_mem->ark_hmax_inv = ZERO;
+    return(ARK_SUCCESS);
+  }
+
+  /* check that hmax and hmin are agreeable */
+  hmax_inv = ONE/hmax;
+  if (hmax_inv * ark_mem->ark_hmin > ONE) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetMaxStep", MSGARK_BAD_HMIN_HMAX);
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set the value */
+  ark_mem->ark_hmax_inv = hmax_inv;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetStopTime:
+
+ Specifies the time beyond which the integration is not to proceed.
+---------------------------------------------------------------*/
+int ARKodeSetStopTime(void *arkode_mem, realtype tstop)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetStopTime", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* If ARKode was called at least once, test if tstop is legal
+     (i.e. if it was not already passed).
+     If ARKodeSetStopTime is called before the first call to ARKode,
+     tstop will be checked in ARKode. */
+  if (ark_mem->ark_nst > 0) {
+    if ( (tstop - ark_mem->ark_tn) * ark_mem->ark_h < ZERO ) {
+      arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		      "ARKodeSetStopTime", MSGARK_BAD_TSTOP, 
+		      tstop, ark_mem->ark_tn);
+      return(ARK_ILL_INPUT);
+    }
+  }
+
+  ark_mem->ark_tstop    = tstop;
+  ark_mem->ark_tstopset = TRUE;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetFixedStep:
+
+ Specifies to use a fixed time step size instead of performing 
+ any form of temporal adaptivity.  ARKode will use this step size 
+ for all steps (unless tstop is set, in which case it may need to 
+ modify that last step approaching tstop.  If any (non)linear
+ solver failure occurs, ARKode will immediately return with an 
+ error message since the time step size cannot be modified.  
+
+ Any nonzero argument will result in the use of that fixed step 
+ size; an argument of 0 will re-enable temporal adaptivity.
+---------------------------------------------------------------*/
+int ARKodeSetFixedStep(void *arkode_mem, realtype hfixed)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetFixedStep", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* set ark_mem entry */
+  if (hfixed != ZERO) {
+    ark_mem->ark_fixedstep = TRUE;
+    ark_mem->ark_hin = hfixed;
+  } else {
+    ark_mem->ark_fixedstep = FALSE;
+  }
+    
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetCFLFraction:
+
+ Specifies the safety factor to use on the maximum explicitly-
+ stable step size.  Allowable values must be within the open 
+ interval (0,1).  A non-positive input implies a reset to
+ the default value.
+---------------------------------------------------------------*/
+int ARKodeSetCFLFraction(void *arkode_mem, realtype cfl_frac)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetCFLFraction", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* check for allowable parameters */
+  if (cfl_frac >= 1.0) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetCFLFraction", "Illegal CFL fraction");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set positive-valued parameters into ark_mem, 
+     otherwise set default */
+  if (cfl_frac <= ZERO) {
+    ark_mem->ark_hadapt_cfl = CFLFAC;
+  } else {
+    ark_mem->ark_hadapt_cfl = cfl_frac;
+  }
+    
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetSafetyFactor:
+
+ Specifies the safety factor to use on the error-based predicted 
+ time step size.  Allowable values must be within the open 
+ interval (0,1).  A non-positive input implies a reset to the 
+ default value.
+---------------------------------------------------------------*/
+int ARKodeSetSafetyFactor(void *arkode_mem, realtype safety)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetSafetyFactoy", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* check for allowable parameters */
+  if (safety >= 1.0) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetSafetyFactor", "Illegal safety factor");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set positive-valued parameters into ark_mem, 
+     otherwise set default */
+  if (safety <= ZERO) {
+    ark_mem->ark_hadapt_safety = SAFETY;
+  } else {
+    ark_mem->ark_hadapt_safety = safety;
+  }
+    
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetErrorBias:
+
+ Specifies the error bias to use when performing adaptive-step
+ error control.  Allowable values must be >= 1.0.  Any illegal
+ value implies a reset to the default value.
+---------------------------------------------------------------*/
+int ARKodeSetErrorBias(void *arkode_mem, realtype bias)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetErrorBias", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* set allowed value into ark_mem, otherwise set default */
+  if (bias < 1.0) {
+    ark_mem->ark_hadapt_bias = BIAS;
+  } else {
+    ark_mem->ark_hadapt_bias = bias;
+  }
+    
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxGrowth:
+
+ Specifies the maximum step size growth factor to be allowed
+ between successive integration steps.  Note: the first step uses 
+ a separate maximum growth factor.  Allowable values must be 
+ > 1.0.  Any illegal value implies a reset to the default.
+---------------------------------------------------------------*/
+int ARKodeSetMaxGrowth(void *arkode_mem, realtype mx_growth)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxGrowth", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* set allowed value into ark_mem, otherwise set default */
+  if (mx_growth == ZERO) {
+    ark_mem->ark_hadapt_growth = GROWTH;
+  } else {
+    ark_mem->ark_hadapt_growth = mx_growth;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetFixedStepBounds:
+
+ Specifies the step size growth interval within which the step 
+ size will remain unchanged.  Allowable values must enclose the 
+ value 1.0.  Any illegal interval implies a reset to the default.
+---------------------------------------------------------------*/
+int ARKodeSetFixedStepBounds(void *arkode_mem, realtype lb, realtype ub)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetFixedStepBounds", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* set allowable interval into ark_mem, otherwise set defaults */
+  if ((lb <= 1.0) && (ub >= 1.0)) {
+    ark_mem->ark_hadapt_lbound = lb;
+    ark_mem->ark_hadapt_ubound = ub;
+  } else {
+    ark_mem->ark_hadapt_lbound = HFIXED_LB;
+    ark_mem->ark_hadapt_ubound = HFIXED_UB;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetAdaptivityMethod:
+
+ Specifies the built-in time step adaptivity algorithm (and 
+ optionally, its associated parameters) to use.  All parameters 
+ will be checked for validity when used by the solver.
+---------------------------------------------------------------*/
+int ARKodeSetAdaptivityMethod(void *arkode_mem, int imethod, 
+			      int idefault, int pq, 
+			      realtype *adapt_params)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetAdaptivityMethod", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* check for allowable parameters */
+  if ((imethod > 5) || (imethod < 0)) {
+    arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetAdaptivityMethod", "Illegal imethod");
+    return(ARK_ILL_INPUT);
+  }
+
+  /* set adaptivity method */
+  ark_mem->ark_hadapt_imethod = imethod;
+
+  /* set flag whether to use p or q */
+  ark_mem->ark_hadapt_pq = (pq != 0);
+
+  /* set method parameters */
+  if (idefault == 1) {
+    switch (ark_mem->ark_hadapt_imethod) {
+    case (0):
+      ark_mem->ark_hadapt_k1 = AD0_K1; 
+      ark_mem->ark_hadapt_k2 = AD0_K2;
+      ark_mem->ark_hadapt_k3 = AD0_K3; break;
+    case (1):
+      ark_mem->ark_hadapt_k1 = AD1_K1;
+      ark_mem->ark_hadapt_k2 = AD1_K2; break;
+    case (2):
+      ark_mem->ark_hadapt_k1 = AD2_K1; break;
+    case (3):
+      ark_mem->ark_hadapt_k1 = AD3_K1;
+      ark_mem->ark_hadapt_k2 = AD3_K2; break;
+    case (4):
+      ark_mem->ark_hadapt_k1 = AD4_K1;
+      ark_mem->ark_hadapt_k2 = AD4_K2; break;
+    case (5):
+      ark_mem->ark_hadapt_k1 = AD5_K1;
+      ark_mem->ark_hadapt_k2 = AD5_K2; 
+      ark_mem->ark_hadapt_k3 = AD5_K3; break;
+    }
+  } else {
+    ark_mem->ark_hadapt_k1 = adapt_params[0];
+    ark_mem->ark_hadapt_k2 = adapt_params[1];
+    ark_mem->ark_hadapt_k3 = adapt_params[2];
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetAdaptivityFn:
+
+ Specifies the user-provided time step adaptivity function to use.
+---------------------------------------------------------------*/
+int ARKodeSetAdaptivityFn(void *arkode_mem, ARKAdaptFn hfun,
+			  void *h_data)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetAdaptivityFn", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* NULL argument sets default, otherwise set inputs */
+  if (hfun == NULL) {
+    ark_mem->ark_hadapt         = NULL;
+    ark_mem->ark_hadapt_data    = NULL;
+    ark_mem->ark_hadapt_imethod = 0;
+  } else {
+    ark_mem->ark_hadapt         = hfun;
+    ark_mem->ark_hadapt_data    = h_data;
+    ark_mem->ark_hadapt_imethod = -1;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxFirstGrowth:
+
+ Specifies the user-provided time step adaptivity constant 
+ etamx1.  Legal values are greater than 1.0.  Illegal values 
+ imply a reset to the default value. 
+---------------------------------------------------------------*/
+int ARKodeSetMaxFirstGrowth(void *arkode_mem, realtype etamx1)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxFirstGrowth", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* if argument legal set it, otherwise set default */
+  if (etamx1 <= ONE) {
+    ark_mem->ark_etamx1 = ETAMX1;
+  } else {
+    ark_mem->ark_etamx1 = etamx1;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxEFailGrowth:
+
+ Specifies the user-provided time step adaptivity constant 
+ etamxf. Legal values are in the interval (0,1].  Illegal values 
+ imply a reset to the default value. 
+---------------------------------------------------------------*/
+int ARKodeSetMaxEFailGrowth(void *arkode_mem, realtype etamxf)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxEFailGrowth", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* if argument legal set it, otherwise set default */
+  if ((etamxf <= ZERO) || (etamxf > ONE)) {
+    ark_mem->ark_etamxf = ETAMXF;
+  } else {
+    ark_mem->ark_etamxf = etamxf;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetSmallNumEFails:
+
+ Specifies the user-provided time step adaptivity constant
+ small_nef.  Legal values are > 0.  Illegal values 
+ imply a reset to the default value. 
+---------------------------------------------------------------*/
+int ARKodeSetSmallNumEFails(void *arkode_mem, int small_nef)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetSmallNumEFails", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* if argument legal set it, otherwise set default */
+  if (small_nef <= 0) {
+    ark_mem->ark_small_nef = SMALL_NEF;
+  } else {
+    ark_mem->ark_small_nef = small_nef;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxCFailGrowth:
+
+ Specifies the user-provided time step adaptivity constant
+ etacf. Legal values are in the interval (0,1].  Illegal values 
+ imply a reset to the default value. 
+---------------------------------------------------------------*/
+int ARKodeSetMaxCFailGrowth(void *arkode_mem, realtype etacf)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxCFailGrowth", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* if argument legal set it, otherwise set default */
+  if ((etacf <= ZERO) || (etacf > ONE)) {
+    ark_mem->ark_etacf = ETACF;
+  } else {
+    ark_mem->ark_etacf = etacf;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetNonlinCRDown:
+
+ Specifies the user-provided nonlinear convergence constant
+ crdown.  Legal values are strictly positive; illegal values 
+ imply a reset to the default.
+---------------------------------------------------------------*/
+int ARKodeSetNonlinCRDown(void *arkode_mem, realtype crdown)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetNonlinCRDown", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* if argument legal set it, otherwise set default */
+  if (crdown <= ZERO) {
+    ark_mem->ark_crdown = CRDOWN;
+  } else {
+    ark_mem->ark_crdown = crdown;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetNonlinRDiv:
+
+ Specifies the user-provided nonlinear convergence constant
+ rdiv.  Legal values are strictly positive; illegal values 
+ imply a reset to the default.
+---------------------------------------------------------------*/
+int ARKodeSetNonlinRDiv(void *arkode_mem, realtype rdiv)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetNonlinRDiv", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* if argument legal set it, otherwise set default */
+  if (rdiv <= ZERO) {
+    ark_mem->ark_rdiv = RDIV;
+  } else {
+    ark_mem->ark_rdiv = rdiv;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetDeltaGammaMax:
+
+ Specifies the user-provided linear setup decision constant
+ dgmax.  Legal values are strictly positive; illegal values imply 
+ a reset to the default. 
+---------------------------------------------------------------*/
+int ARKodeSetDeltaGammaMax(void *arkode_mem, realtype dgmax)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetDeltaGammaMax", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* if argument legal set it, otherwise set default */
+  if (dgmax <= ZERO) {
+    ark_mem->ark_dgmax = DGMAX;
+  } else {
+    ark_mem->ark_dgmax = dgmax;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxStepsBetweenLSet:
+
+ Specifies the user-provided linear setup decision constant
+ msbp.  Positive values give the number of time steps to wait 
+ before calling lsetup; negative values imply recomputation of 
+ lsetup at each Newton iteration; a zero value implies a reset 
+ to the default. 
+---------------------------------------------------------------*/
+int ARKodeSetMaxStepsBetweenLSet(void *arkode_mem, int msbp)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxStepsBetweenLSet", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* if argument legal set it, otherwise set default */
+  if (msbp == 0) {
+    ark_mem->ark_msbp = MSBP;
+  } else {
+    ark_mem->ark_msbp = msbp;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetPredictorMethod:
+
+ Specifies the method to use for predicting implicit solutions.  
+ Non-default choices are {1,2,3,4}, all others will use default 
+ (trivial) predictor.
+---------------------------------------------------------------*/
+int ARKodeSetPredictorMethod(void *arkode_mem, int pred_method)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetPredictorMethod", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+  ark_mem->ark_predictor = pred_method;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetStabilityFn:
+
+ Specifies the user-provided explicit time step stability 
+ function to use.  A NULL input function implies a reset to
+ the default function (empty).
+---------------------------------------------------------------*/
+int ARKodeSetStabilityFn(void *arkode_mem, ARKExpStabFn EStab,
+			 void *estab_data)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetStabilityFn", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* NULL argument sets default, otherwise set inputs */
+  if (EStab == NULL) {
+    ark_mem->ark_expstab    = arkExpStab;
+    ark_mem->ark_estab_data = ark_mem;
+  } else {
+    ark_mem->ark_expstab    = EStab;
+    ark_mem->ark_estab_data = estab_data;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxErrTestFails:
+
+ Specifies the maximum number of error test failures during one
+ step try.  A non-positive input implies a reset to
+ the default value.
+---------------------------------------------------------------*/
+int ARKodeSetMaxErrTestFails(void *arkode_mem, int maxnef)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxErrTestFails", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* argument <= 0 sets default, otherwise set input */
+  if (maxnef <= 0) {
+    ark_mem->ark_maxnef = MAXNEF;
+  } else {
+    ark_mem->ark_maxnef = maxnef;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxConvFails:
+
+ Specifies the maximum number of nonlinear convergence failures 
+ during one step try.  A non-positive input implies a reset to
+ the default value.
+---------------------------------------------------------------*/
+int ARKodeSetMaxConvFails(void *arkode_mem, int maxncf)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxConvFails", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* argument <= 0 sets default, otherwise set input */
+  if (maxncf <= 0) {
+    ark_mem->ark_maxncf = MAXNCF;
+  } else {
+    ark_mem->ark_maxncf = maxncf;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetMaxNonlinIters:
+
+ Specifies the maximum number of nonlinear iterations during
+ one solve.  A non-positive input implies a reset to the 
+ default value.
+---------------------------------------------------------------*/
+int ARKodeSetMaxNonlinIters(void *arkode_mem, int maxcor)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetMaxNonlinIters", MSGARK_NO_MEM);
+    return (ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* argument <= 0 sets default, otherwise set input */
+  if (maxcor <= 0) {
+    ark_mem->ark_maxcor = MAXCOR;
+  } else {
+    ark_mem->ark_maxcor = maxcor;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetNonlinConvCoef:
+
+ Specifies the coefficient in the nonlinear solver convergence
+ test.  A non-positive input implies a reset to the default value.
+---------------------------------------------------------------*/
+int ARKodeSetNonlinConvCoef(void *arkode_mem, realtype nlscoef)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetNonlinConvCoef", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* argument <= 0 sets default, otherwise set input */
+  if (nlscoef <= ZERO) {
+    ark_mem->ark_nlscoef = NLSCOEF;
+  } else {
+    ark_mem->ark_nlscoef = nlscoef;
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetRootDirection:
+
+ Specifies the direction of zero-crossings to be monitored.
+ The default is to monitor both crossings.
+---------------------------------------------------------------*/
+int ARKodeSetRootDirection(void *arkode_mem, int *rootdir)
+{
+  ARKodeMem ark_mem;
+  int i, nrt;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetRootDirection", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  nrt = ark_mem->ark_nrtfn;
+  if (nrt==0) {
+    arkProcessError(NULL, ARK_ILL_INPUT, "ARKODE", 
+		    "ARKodeSetRootDirection", MSGARK_NO_ROOT);
+    return(ARK_ILL_INPUT);    
+  }
+
+  for(i=0; i<nrt; i++) ark_mem->ark_rootdir[i] = rootdir[i];
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetNoInactiveRootWarn:
+
+ Disables issuing a warning if some root function appears
+ to be identically zero at the beginning of the integration
+---------------------------------------------------------------*/
+int ARKodeSetNoInactiveRootWarn(void *arkode_mem)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetNoInactiveRootWarn", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  ark_mem->ark_mxgnull = 0;
+  
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeSetPostprocessStepFn:
+
+ Specifies a user-provided step postprocessing function having 
+ type ARKPostProcessStepFn.  A NULL input function disables step
+ postprocessing.
+
+ IF THE SUPPLIED FUNCTION MODIFIES ANY OF THE ACTIVE STATE DATA, 
+ THEN ALL THEORETICAL GUARANTEES OF SOLUTION ACCURACY AND 
+ STABILITY ARE LOST.
+---------------------------------------------------------------*/
+int ARKodeSetPostprocessStepFn(void *arkode_mem, 
+			       ARKPostProcessStepFn ProcessStep)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeSetStabilityFn", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* NULL argument sets default, otherwise set inputs */
+  ark_mem->ark_ProcessStep = ProcessStep;
+  return(ARK_SUCCESS);
+}
+
+
+/*===============================================================
+ ARKODE optional output functions
+===============================================================*/
+
+/*---------------------------------------------------------------
+ ARKodeGetNumSteps:
+
+ Returns the current number of integration steps
+---------------------------------------------------------------*/
+int ARKodeGetNumSteps(void *arkode_mem, long int *nsteps)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumSteps", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nsteps = ark_mem->ark_nst;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumExpSteps:
+
+ Returns the current number of stability-limited steps
+---------------------------------------------------------------*/
+int ARKodeGetNumExpSteps(void *arkode_mem, long int *nsteps)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumExpSteps", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nsteps = ark_mem->ark_nst_exp;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumAccSteps:
+
+ Returns the current number of accuracy-limited steps
+---------------------------------------------------------------*/
+int ARKodeGetNumAccSteps(void *arkode_mem, long int *nsteps)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumAccSteps", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nsteps = ark_mem->ark_nst_acc;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumStepAttempts:
+
+ Returns the current number of steps attempted by the solver
+---------------------------------------------------------------*/
+int ARKodeGetNumStepAttempts(void *arkode_mem, long int *nsteps)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumStepAttempts", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nsteps = ark_mem->ark_nst_attempts;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumRhsEvals:
+
+ Returns the current number of calls to fe and fi
+---------------------------------------------------------------*/
+int ARKodeGetNumRhsEvals(void *arkode_mem, long int *fe_evals,
+			 long int *fi_evals)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumRhsEvals", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *fe_evals = ark_mem->ark_nfe;
+  *fi_evals = ark_mem->ark_nfi;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumLinSolvSetups:
+
+ Returns the current number of calls to the lsetup routine
+---------------------------------------------------------------*/
+int ARKodeGetNumLinSolvSetups(void *arkode_mem, long int *nlinsetups)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumLinSolvSetups", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nlinsetups = ark_mem->ark_nsetups;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumMassSolves:
+
+ Returns the current number of calls to the mass matrix solver.
+---------------------------------------------------------------*/
+int ARKodeGetNumMassSolves(void *arkode_mem, long int *nMassSolves)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumMassSolves", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nMassSolves = ark_mem->ark_mass_solves;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumMassMultiplies:
+
+ Returns the current number of calls to the mass matrix product.
+---------------------------------------------------------------*/
+int ARKodeGetNumMassMultiplies(void *arkode_mem, long int *nMassMult)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumMassMult", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nMassMult = ark_mem->ark_mass_mult;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumErrTestFails:
+
+ Returns the current number of error test failures
+---------------------------------------------------------------*/
+int ARKodeGetNumErrTestFails(void *arkode_mem, long int *netfails)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumErrTestFails", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *netfails = ark_mem->ark_netf;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetActualInitStep:
+
+ Returns the step size used on the first step
+---------------------------------------------------------------*/
+int ARKodeGetActualInitStep(void *arkode_mem, realtype *hinused)
+{
+  ARKodeMem ark_mem;
+
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetActualInitStep", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *hinused = ark_mem->ark_h0u;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetLastStep:
+
+ Returns the step size used on the last successful step
+---------------------------------------------------------------*/
+int ARKodeGetLastStep(void *arkode_mem, realtype *hlast)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetLastStep", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *hlast = ark_mem->ark_hold;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetCurrentStep:
+
+ Returns the step size to be attempted on the next step
+---------------------------------------------------------------*/
+int ARKodeGetCurrentStep(void *arkode_mem, realtype *hcur)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetCurrentStep", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+  
+  *hcur = ark_mem->ark_next_h;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetCurrentTime:
+
+ Returns the current value of the independent variable
+---------------------------------------------------------------*/
+int ARKodeGetCurrentTime(void *arkode_mem, realtype *tcur)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetCurrentTime", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *tcur = ark_mem->ark_tn;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetCurrentButcherTables:
+
+ Returns the explicit and implicit Butcher tables currently in 
+ use.  The tables should be declared statically as 
+ Ae[ARK_S_MAX*ARK_S_MAX] and Ai[ARK_S_MAX*ARK_S_MAX], and the 
+ arrays c, b and b2 should all have length ARK_S_MAX.
+---------------------------------------------------------------*/
+int ARKodeGetCurrentButcherTables(void *arkode_mem, 
+				  int *s, int *q, int *p,
+				  realtype *Ai, realtype *Ae, 
+				  realtype *ci, realtype *ce, 
+				  realtype *bi, realtype *be,
+				  realtype *b2i, realtype *b2e)
+{
+  int i,j;
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetCurrentButcherTables", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *s = ark_mem->ark_stages;
+  *q = ark_mem->ark_q;
+  *p = ark_mem->ark_p;
+  for (i=0; i<ARK_S_MAX; i++) {
+    for (j=0; j<ARK_S_MAX; j++) {
+      ARK_A(Ae,i,j) = ARK_A(ark_mem->ark_Ae,i,j);
+      ARK_A(Ai,i,j) = ARK_A(ark_mem->ark_Ai,i,j);
+    }
+    ce[i]  = ark_mem->ark_ce[i];
+    ci[i]  = ark_mem->ark_ci[i];
+    be[i]  = ark_mem->ark_be[i];
+    bi[i]  = ark_mem->ark_bi[i];
+    b2e[i] = ark_mem->ark_b2e[i];
+    b2i[i] = ark_mem->ark_b2i[i];
+  }
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetTolScaleFactor:
+
+ Returns a suggested factor for scaling tolerances
+---------------------------------------------------------------*/
+int ARKodeGetTolScaleFactor(void *arkode_mem, realtype *tolsfact)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetTolScaleFactor", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *tolsfact = ark_mem->ark_tolsf;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetErrWeights:
+
+ This routine returns the current weight vector.
+---------------------------------------------------------------*/
+int ARKodeGetErrWeights(void *arkode_mem, N_Vector eweight)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetErrWeights", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  N_VScale(ONE, ark_mem->ark_ewt, eweight);
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetEstLocalErrors: (updated to the correct vector, but 
+   need to verify that it is unchanged between filling the 
+   estimated error and the end of the time step)
+
+ Returns an estimate of the local error
+---------------------------------------------------------------*/
+int ARKodeGetEstLocalErrors(void *arkode_mem, N_Vector ele)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetEstLocalErrors", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  N_VScale(ONE, ark_mem->ark_tempv, ele);
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetWorkSpace:
+
+ Returns integrator work space requirements
+---------------------------------------------------------------*/
+int ARKodeGetWorkSpace(void *arkode_mem, long int *lenrw, long int *leniw)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetWorkSpace", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *leniw = ark_mem->ark_liw;
+  *lenrw = ark_mem->ark_lrw;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetIntegratorStats:
+
+ Returns integrator statistics
+---------------------------------------------------------------*/
+int ARKodeGetIntegratorStats(void *arkode_mem, long int *nsteps, 
+			     long int *expsteps, long int *accsteps, 
+			     long int *step_attempts, long int *fe_evals, 
+			     long int *fi_evals, long int *nlinsetups, 
+			     long int *netfails, realtype *hinused, 
+			     realtype *hlast, realtype *hcur, 
+			     realtype *tcur)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetIntegratorStats", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nsteps        = ark_mem->ark_nst;
+  *expsteps      = ark_mem->ark_nst_exp;
+  *accsteps      = ark_mem->ark_nst_acc;
+  *step_attempts = ark_mem->ark_nst_attempts;
+  *fe_evals      = ark_mem->ark_nfe;
+  *fi_evals      = ark_mem->ark_nfi;
+  *nlinsetups    = ark_mem->ark_nsetups;
+  *netfails      = ark_mem->ark_netf;
+  *hinused       = ark_mem->ark_h0u;
+  *hlast         = ark_mem->ark_hold;
+  *hcur          = ark_mem->ark_next_h;
+  *tcur          = ark_mem->ark_tn;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumGEvals:
+
+ Returns the current number of calls to g (for rootfinding)
+---------------------------------------------------------------*/
+int ARKodeGetNumGEvals(void *arkode_mem, long int *ngevals)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumGEvals", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *ngevals = ark_mem->ark_nge;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetRootInfo:
+
+ Returns pointer to array rootsfound showing roots found
+---------------------------------------------------------------*/
+int ARKodeGetRootInfo(void *arkode_mem, int *rootsfound)
+{
+  int i, nrt;
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetRootInfo", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  nrt = ark_mem->ark_nrtfn;
+
+  for (i=0; i<nrt; i++) rootsfound[i] = ark_mem->ark_iroots[i];
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumNonlinSolvIters:
+
+ Returns the current number of nonlinear solver iterations 
+---------------------------------------------------------------*/
+int ARKodeGetNumNonlinSolvIters(void *arkode_mem, long int *nniters)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumNonlinSolvIters", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nniters = ark_mem->ark_nni;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNumNonlinSolvConvFails:
+
+ Returns the current number of nonlinear solver convergence fails
+---------------------------------------------------------------*/
+int ARKodeGetNumNonlinSolvConvFails(void *arkode_mem, long int *nncfails)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNumNonlinSolvConvFails", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nncfails = ark_mem->ark_ncfn;
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeGetNonlinSolvStats:
+
+ Returns nonlinear solver statistics
+---------------------------------------------------------------*/
+int ARKodeGetNonlinSolvStats(void *arkode_mem, long int *nniters, 
+			     long int *nncfails)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeGetNonlinSolvStats", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  *nniters = ark_mem->ark_nni;
+  *nncfails = ark_mem->ark_ncfn;
+
+  return(ARK_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+char *ARKodeGetReturnFlagName(long int flag)
+{
+  char *name;
+  name = (char *)malloc(24*sizeof(char));
+
+  switch(flag) {
+  case ARK_SUCCESS:
+    sprintf(name,"ARK_SUCCESS");
+    break;
+  case ARK_TSTOP_RETURN:
+    sprintf(name,"ARK_TSTOP_RETURN");
+    break;
+  case ARK_ROOT_RETURN:
+    sprintf(name,"ARK_ROOT_RETURN");
+    break;
+  case ARK_TOO_MUCH_WORK:
+    sprintf(name,"ARK_TOO_MUCH_WORK");
+    break;
+  case ARK_TOO_MUCH_ACC:
+    sprintf(name,"ARK_TOO_MUCH_ACC");
+    break;
+  case ARK_ERR_FAILURE:
+    sprintf(name,"ARK_ERR_FAILURE");
+    break;
+  case ARK_CONV_FAILURE:
+    sprintf(name,"ARK_CONV_FAILURE");
+    break;
+  case ARK_LINIT_FAIL:
+    sprintf(name,"ARK_LINIT_FAIL");
+    break;
+  case ARK_LSETUP_FAIL:
+    sprintf(name,"ARK_LSETUP_FAIL");
+    break;
+  case ARK_LSOLVE_FAIL:
+    sprintf(name,"ARK_LSOLVE_FAIL");
+    break;
+  case ARK_RHSFUNC_FAIL:
+    sprintf(name,"ARK_RHSFUNC_FAIL");
+    break;
+  case ARK_FIRST_RHSFUNC_ERR:
+    sprintf(name,"ARK_FIRST_RHSFUNC_ERR");
+    break;
+  case ARK_REPTD_RHSFUNC_ERR:
+    sprintf(name,"ARK_REPTD_RHSFUNC_ERR");
+    break;
+  case ARK_UNREC_RHSFUNC_ERR:
+    sprintf(name,"ARK_UNREC_RHSFUNC_ERR");
+    break;
+  case ARK_RTFUNC_FAIL:
+    sprintf(name,"ARK_RTFUNC_FAIL");
+    break;
+  case ARK_LFREE_FAIL:
+    sprintf(name,"ARK_LFREE_FAIL");
+    break;
+  case ARK_MASSINIT_FAIL:
+    sprintf(name,"ARK_MASSINIT_FAIL");
+    break;
+  case ARK_MASSSETUP_FAIL:
+    sprintf(name,"ARK_MASSSETUP_FAIL");
+    break;
+  case ARK_MASSSOLVE_FAIL:
+    sprintf(name,"ARK_MASSSOLVE_FAIL");
+    break;
+  case ARK_MASSFREE_FAIL:
+    sprintf(name,"ARK_MASSFREE_FAIL");
+    break;
+  case ARK_MASSMULT_FAIL:
+    sprintf(name,"ARK_MASSMULT_FAIL");
+    break;
+  case ARK_MEM_FAIL:
+    sprintf(name,"ARK_MEM_FAIL");
+    break;
+  case ARK_MEM_NULL:
+    sprintf(name,"ARK_MEM_NULL");
+    break;
+  case ARK_ILL_INPUT:
+    sprintf(name,"ARK_ILL_INPUT");
+    break;
+  case ARK_NO_MALLOC:
+    sprintf(name,"ARK_NO_MALLOC");
+    break;
+  case ARK_BAD_K:
+    sprintf(name,"ARK_BAD_K");
+    break;
+  case ARK_BAD_T:
+    sprintf(name,"ARK_BAD_T");
+    break;
+  case ARK_BAD_DKY:
+    sprintf(name,"ARK_BAD_DKY");
+    break;
+  case ARK_TOO_CLOSE:
+    sprintf(name,"ARK_TOO_CLOSE");
+    break;    
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+
+
+/*===============================================================
+  ARKODE parameter output
+===============================================================*/
+
+/*---------------------------------------------------------------
+ ARKodeWriteParameters:
+
+ Outputs all solver parameters to the provided file pointer.
+---------------------------------------------------------------*/
+int ARKodeWriteParameters(void *arkode_mem, FILE *fp)
+{
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeWriteParameters", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* print integrator parameters to file */
+  fprintf(fp, "ARKode solver parameters:\n");
+  fprintf(fp, "  Method order %i\n",ark_mem->ark_q);
+  fprintf(fp, "  Dense output order %i\n",ark_mem->ark_dense_q);
+  if (ark_mem->ark_linear) {
+    fprintf(fp, "  Linear implicit problem");
+    if (ark_mem->ark_linear_timedep) {
+      fprintf(fp, " (time-dependent Jacobian)\n");
+    } else {
+      fprintf(fp, " (time-independent Jacobian)\n");
+    }
+  }
+  if (ark_mem->ark_explicit) {
+    fprintf(fp, "  Explicit integrator\n");
+  } else if (ark_mem->ark_implicit) {
+    fprintf(fp, "  Implicit integrator\n");
+  } else {
+    fprintf(fp, "  ImEx integrator\n");
+  }
+  if (ark_mem->ark_fixedstep) {
+    fprintf(fp, "  Fixed time-stepping enabled\n");
+  } else {
+    if (ark_mem->ark_hadapt == NULL) {
+      fprintf(fp, "  Time step adaptivity method %i\n", ark_mem->ark_hadapt_imethod);
+      fprintf(fp, "     Safety factor = %g\n", ark_mem->ark_hadapt_safety);
+      fprintf(fp, "     Bias factor = %g\n", ark_mem->ark_hadapt_bias);
+      fprintf(fp, "     Growth factor = %g\n", ark_mem->ark_hadapt_growth);
+      fprintf(fp, "     Step growth lower bound = %g\n", ark_mem->ark_hadapt_lbound);
+      fprintf(fp, "     Step growth upper bound = %g\n", ark_mem->ark_hadapt_ubound);
+      fprintf(fp, "     k1 = %g\n", ark_mem->ark_hadapt_k1);
+      fprintf(fp, "     k2 = %g\n", ark_mem->ark_hadapt_k2);
+      fprintf(fp, "     k3 = %g\n", ark_mem->ark_hadapt_k3);
+    } else {
+      fprintf(fp, "  User provided time step adaptivity function\n");
+    }
+  }
+  if (ark_mem->ark_itol == ARK_WF) {
+    fprintf(fp, "  User provided error weight function\n");
+  } else {
+    fprintf(fp, "  Solver relative tolerance = %g\n", ark_mem->ark_reltol);
+    if (ark_mem->ark_itol == ARK_SS) {
+      fprintf(fp, "  Solver absolute tolerance = %g\n", ark_mem->ark_Sabstol);
+    } else {
+      fprintf(fp, "  Vector-valued solver absolute tolerance\n");
+    }
+  }
+  if (!ark_mem->ark_rwt_is_ewt) {
+    if (ark_mem->ark_ritol == ARK_WF) {
+      fprintf(fp, "  User provided residual weight function\n");
+    } else {
+      if (ark_mem->ark_ritol == ARK_SS) {
+	fprintf(fp, "  Absolute residual tolerance = %g\n", ark_mem->ark_SRabstol);
+      } else {
+	fprintf(fp, "  Vector-valued residual absolute tolerance\n");
+      }
+    }
+  }
+  if (ark_mem->ark_hin != ZERO)  
+    fprintf(fp, "  Initial step size = %g\n",ark_mem->ark_hin);
+  if (ark_mem->ark_hmin != ZERO)  
+    fprintf(fp, "  Minimum step size = %g\n",ark_mem->ark_hmin);
+  if (ark_mem->ark_hmax_inv != ZERO)  
+    fprintf(fp, "  Maximum step size = %g\n",ONE/ark_mem->ark_hmax_inv);
+  fprintf(fp, "  Maximum number of error test failures = %i\n",ark_mem->ark_maxnef);
+  fprintf(fp, "  Maximum number of convergence test failures = %i\n",ark_mem->ark_maxncf);
+  fprintf(fp, "  Maximum step increase (first step) = %g\n",ark_mem->ark_etamx1);
+  fprintf(fp, "  Step reduction factor on multiple error fails = %g\n",ark_mem->ark_etamxf);
+  fprintf(fp, "  Minimum error fails before above factor is used = %i\n",ark_mem->ark_small_nef);
+  fprintf(fp, "  Step reduction factor on nonlinear convergence failure = %g\n",ark_mem->ark_etacf);
+
+  if (!ark_mem->ark_implicit) {
+    if (ark_mem->ark_expstab == arkExpStab) {
+      fprintf(fp, "  Default explicit stability function\n");
+    } else {
+      fprintf(fp, "  User provided explicit stability function\n");
+    }
+    fprintf(fp, "  Explicit safety factor = %g\n",ark_mem->ark_hadapt_cfl);
+  }
+  if (!ark_mem->ark_explicit) {
+    fprintf(fp, "  Implicit predictor method = %i\n",ark_mem->ark_predictor);
+    fprintf(fp, "  Implicit solver tolerance coefficient = %g\n",ark_mem->ark_nlscoef);
+    fprintf(fp, "  Maximum number of nonlinear corrections = %i\n",ark_mem->ark_maxcor);
+    fprintf(fp, "  Nonlinear convergence rate constant = %g\n",ark_mem->ark_crdown);
+    fprintf(fp, "  Nonlinear divergence tolerance = %g\n",ark_mem->ark_rdiv);
+    fprintf(fp, "  Gamma factor LSetup tolerance = %g\n",ark_mem->ark_dgmax);
+    fprintf(fp, "  Number of steps between LSetup calls = %i\n",ark_mem->ark_msbp);
+  }
+  fprintf(fp, "\n");
+
+  return(ARK_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKodeWriteButcher:
+
+ Outputs Butcher tables to the provided file pointer.
+---------------------------------------------------------------*/
+int ARKodeWriteButcher(void *arkode_mem, FILE *fp)
+{
+  int i, j;
+  ARKodeMem ark_mem;
+  if (arkode_mem==NULL) {
+    arkProcessError(NULL, ARK_MEM_NULL, "ARKODE", 
+		    "ARKodeWriteButcher", MSGARK_NO_MEM);
+    return(ARK_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* print Butcher tables to file */
+  fprintf(fp, "\nARKode Butcher tables (stages = %i):\n", ark_mem->ark_stages);
+  if (!ark_mem->ark_implicit) {
+    fprintf(fp, "  Explicit Butcher table:\n");
+    for (i=0; i<ark_mem->ark_stages; i++) {
+      fprintf(fp, "     %.5f",ark_mem->ark_ce[i]);
+      for (j=0; j<ark_mem->ark_stages; j++) 
+	fprintf(fp, " %.5f",ARK_A(ark_mem->ark_Ae,i,j));
+      fprintf(fp,"\n");
+    }
+    fprintf(fp, "            ");
+    for (j=0; j<ark_mem->ark_stages; j++) 
+      fprintf(fp, " %.5f",ark_mem->ark_be[j]);
+    fprintf(fp,"\n");
+    fprintf(fp, "            ");
+    for (j=0; j<ark_mem->ark_stages; j++) 
+      fprintf(fp, " %.5f",ark_mem->ark_b2e[j]);
+    fprintf(fp,"\n");
+  }
+  if (!ark_mem->ark_explicit) {
+    fprintf(fp, "  Implicit Butcher table:\n");
+    for (i=0; i<ark_mem->ark_stages; i++) {
+      fprintf(fp, "     %.5f",ark_mem->ark_ci[i]);
+      for (j=0; j<ark_mem->ark_stages; j++) 
+	fprintf(fp, " %.5f",ARK_A(ark_mem->ark_Ai,i,j));
+      fprintf(fp,"\n");
+    }
+    fprintf(fp, "            ");
+    for (j=0; j<ark_mem->ark_stages; j++) 
+      fprintf(fp, " %.5f",ark_mem->ark_bi[j]);
+    fprintf(fp,"\n");
+    fprintf(fp, "            ");
+    for (j=0; j<ark_mem->ark_stages; j++) 
+      fprintf(fp, " %.5f",ark_mem->ark_b2i[j]);
+    fprintf(fp,"\n");
+  }
+  fprintf(fp, "\n");
+
+  return(ARK_SUCCESS);
+}
+
+
+
+
+/*---------------------------------------------------------------
+      EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_klu.c b/src/arkode/arkode_klu.c
new file mode 100644
index 0000000..5102ac6
--- /dev/null
+++ b/src/arkode/arkode_klu.c
@@ -0,0 +1,1275 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Implementation file for the ARKKLU linear solver module.
+ *---------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "arkode/arkode_klu.h"
+#include "arkode/arkode_sparse.h"
+#include "arkode_sparse_impl.h"
+#include "arkode_impl.h"
+
+#include <sundials/sundials_klu_impl.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+#define ONE RCONST(1.0)
+#define TWO RCONST(2.0)
+#define TWOTHIRDS    RCONST(0.6666666666666667)
+
+/* ARKKLU linit, lsetup, lsolve, and lfree routines */
+static int arkKLUInit(ARKodeMem ark_mem);
+static int arkKLUSetup(ARKodeMem ark_mem, int convfail, 
+		       N_Vector ypred, N_Vector fpred, 
+		       booleantype *jcurPtr, N_Vector tmp1, 
+		       N_Vector tmp2, N_Vector tmp3);
+static int arkKLUSolve(ARKodeMem ark_mem, N_Vector b, 
+		       N_Vector weight, N_Vector ycur, 
+		       N_Vector fcur);
+static int arkKLUFree(ARKodeMem ark_mem);
+
+/* ARKKLU minit, msetup, msolve, mfree and mtimes routines */
+static int arkMassKLUInit(ARKodeMem ark_mem);
+static int arkMassKLUSetup(ARKodeMem ark_mem, N_Vector tmp1, 
+			   N_Vector tmp2, N_Vector tmp3);
+static int arkMassKLUSolve(ARKodeMem ark_mem, N_Vector b, 
+			   N_Vector weight);
+static int arkMassKLUFree(ARKodeMem ark_mem);
+static int arkMassKLUMultiply(N_Vector v, N_Vector Mv, 
+			      realtype t, void *arkode_mem);
+
+
+/*---------------------------------------------------------------
+ ARKKLU
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the ARKode / KLU linear solver 
+ module.  ARKKLU first calls the existing lfree routine if this 
+ is not NULL.  Then it sets the ark_linit, ark_lsetup, ark_lsolve
+ and ark_lfree fields in (*arkode_mem) to be arkKLUInit, 
+ arkKLUSetup, arkKLUSolve and arkKLUFree, respectively.   It 
+ allocates memory for a structure of type ARKSlsMemRec and sets 
+ the ark_lmem field in (*arkode_mem) to the address of this 
+ structure.  It sets setupNonNull in (*arkode_mem) to TRUE.  
+ Finally, it allocates memory for KLU.  The return value is 
+ ARKSLS_SUCCESS = 0, ARKSLS_LMEM_FAIL = -1, or 
+ ARKSLS_ILL_INPUT = -2.
+
+ NOTE: The KLU linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKKLU will first 
+       test for a compatible N_Vector internal representation
+       by checking that the function N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+int ARKKLU(void *arkode_mem, int n, int nnz, int sparsetype)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMem arksls_mem;
+  KLUData klu_data;
+  int flag;
+
+  /* Return immediately if ark_mem is NULL. */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+                    "ARKKLU", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKSLS_ILL_INPUT, "ARKSLS", 
+                    "ARKKLU", MSGSP_BAD_NVECTOR);
+    return(ARKSLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree != NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem. */
+  ark_mem->ark_linit  = arkKLUInit;
+  ark_mem->ark_lsetup = arkKLUSetup;
+  ark_mem->ark_lsolve = arkKLUSolve;
+  ark_mem->ark_lfree  = arkKLUFree;
+  ark_mem->ark_lsolve_type = 3;
+
+  /* Get memory for ARKSlsMemRec. */
+  arksls_mem = (ARKSlsMem) malloc(sizeof(struct ARKSlsMemRec));
+  if (arksls_mem == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+                    "ARKKLU", MSGSP_MEM_FAIL);
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Get memory for KLUData. */
+  klu_data = (KLUData) malloc(sizeof(struct KLUDataRec));
+  if (klu_data == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+                    "ARKKLU", MSGSP_MEM_FAIL);
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Initialize Jacobian-related data */
+  arksls_mem->s_Jeval = NULL;
+  arksls_mem->s_Jdata = NULL;
+  ark_mem->ark_setupNonNull = TRUE;
+  arksls_mem->sparsetype = sparsetype;
+
+  /* Initialize counters */
+  arksls_mem->s_nje = 0;
+  arksls_mem->s_first_factorize = 1;
+  arksls_mem->s_nstlj = 0;
+
+  /* Allocate memory for the sparse Jacobian */
+  arksls_mem->s_A = NULL;
+  arksls_mem->s_A = SparseNewMat(n, n, nnz, sparsetype);
+  if (arksls_mem->s_A == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+                    "ARKKLU", MSGSP_MEM_FAIL);
+    free(klu_data); klu_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Allocate memory for saved sparse Jacobian */
+  arksls_mem->s_savedJ = NULL;
+  arksls_mem->s_savedJ = SparseNewMat(n, n, nnz, sparsetype);
+  if (arksls_mem->s_savedJ == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+                    "ARKKLU", MSGSP_MEM_FAIL);
+    SparseDestroyMat(arksls_mem->s_A);
+    free(klu_data); klu_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Initialize KLU structures */
+  switch (sparsetype) {
+    case CSC_MAT:
+      klu_data->sun_klu_solve = &klu_solve;
+      break;
+    case CSR_MAT:
+      klu_data->sun_klu_solve = &klu_tsolve;
+      break;
+    default:
+      SparseDestroyMat(arksls_mem->s_A);
+      SparseDestroyMat(arksls_mem->s_savedJ);
+      free(klu_data); klu_data = NULL;
+      free(arksls_mem); arksls_mem = NULL;
+      return(ARKSLS_ILL_INPUT);
+  }
+  klu_data->s_Symbolic = NULL;
+  klu_data->s_Numeric = NULL;
+
+  /* Set default parameters for KLU */
+  flag = klu_defaults(&klu_data->s_Common);
+  if (flag == 0) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+                    "ARKKLU", MSGSP_MEM_FAIL);
+    klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+    free(klu_data->s_Numeric);  klu_data->s_Numeric = NULL;
+    klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+    free(klu_data->s_Symbolic);  klu_data->s_Symbolic = NULL;
+    SparseDestroyMat(arksls_mem->s_A);
+    SparseDestroyMat(arksls_mem->s_savedJ);
+    free(klu_data); klu_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Set ordering to COLAMD as the arkode default use.
+     Users can set a different value with ARKKLUSetOrdering,
+     and the user-set value is loaded before any call to klu_analyze in
+     ARKKLUSetup.  */
+  klu_data->s_ordering = 1;
+  klu_data->s_Common.ordering = klu_data->s_ordering;
+
+  /* Attach linear solver memory to the integrator memory */
+  arksls_mem->s_solver_data = (void *) klu_data;
+  ark_mem->ark_lmem = arksls_mem;
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+  ARKKLUReInit
+
+  This routine reinitializes memory and flags for a new 
+  factorization (symbolic and numeric) to be conducted at the 
+  next solver setup call.  This routine is useful in the cases 
+  where the number of nonzeroes has changed or if the structure 
+  of the linear system has changed which would require a new 
+  symbolic (and numeric) factorization.
+ 
+  The reinit_type argument governs the level of reinitialization:
+ 
+  reinit_type = 1: The Jacobian matrix will be destroyed and 
+                   a new one will be allocated based on the nnz
+                   value passed to this call. New symbolic and
+                   numeric factorizations will be completed at the 
+                   next solver setup.
+ 
+  reinit_type = 2: Only symbolic and numeric factorizations will be 
+                   completed.  It is assumed that the Jacobian size
+                   has not exceeded the size of nnz given in the 
+                   prior call to ARKMassKLU.
+ 
+  This routine assumes no other changes to solver use are necessary.
+ 
+  The return value is ARKSLS_SUCCESS = 0, ARKSLS_MEM_NULL = -1, 
+  ARKSLS_MASSMEM_NULL = -8, ARKSLS_ILL_INPUT = -3, or 
+  ARKSLS_MEM_FAIL = -4.
+---------------------------------------------------------------*/
+int ARKKLUReInit(void *arkode_mem, int n, int nnz, int reinit_type)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMem arksls_mem;
+  KLUData klu_data;
+
+  /* Return immediately if arkode_mem is NULL. */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", "ARKKLUReInit", 
+		    MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Return immediately if ark_lmem is NULL. */
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(NULL, ARKSLS_LMEM_NULL, "ARKSLS", "ARKKLUReInit", 
+		    MSGSP_LMEM_NULL);
+    return(ARKSLS_LMEM_NULL);
+  }
+
+  arksls_mem = (ARKSlsMem) (ark_mem->ark_lmem);
+  klu_data = (KLUData) arksls_mem->s_solver_data;
+
+  /* Return if reinit_type is not valid */
+  if ((reinit_type != 1) && (reinit_type != 2)) {
+    arkProcessError(NULL, ARKSLS_ILL_INPUT, "ARKSLS", "ARKKLUReInit", 
+		    MSGSP_ILL_INPUT);
+    return(ARKSLS_ILL_INPUT);
+  }
+
+  if (reinit_type == 1) {
+
+    /* Destroy previous Jacobian information */
+    if (arksls_mem->s_A) {
+      SparseDestroyMat(arksls_mem->s_A);
+    }
+
+    /* Allocate memory for the sparse Jacobian */
+    arksls_mem->s_A = SparseNewMat(n, n, nnz, arksls_mem->sparsetype);
+    if (arksls_mem->s_A == NULL) {
+      arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", "ARKKLU", 
+		    MSGSP_MEM_FAIL);
+      return(ARKSLS_MEM_FAIL);
+    }
+  }
+
+  /* Free the prior factorazation and reset for first factorization */
+  if( klu_data->s_Symbolic != NULL)
+    klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  if( klu_data->s_Numeric != NULL)
+    klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  arksls_mem->s_first_factorize = 1;
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+
+  return(0);
+}
+
+/*---------------------------------------------------------------
+ arkKLUInit:
+
+ This routine does remaining initializations specific to the 
+ ARKKLU linear solver module.  It returns 0 if successful.
+---------------------------------------------------------------*/
+static int arkKLUInit(ARKodeMem ark_mem)
+{
+  ARKSlsMem arksls_mem;
+
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+
+  arksls_mem->s_Jdata = ark_mem->ark_user_data;
+
+  arksls_mem->s_nje = 0;
+  /* Force factorization every call to ARKODE */
+  arksls_mem->s_first_factorize = 1;
+  arksls_mem->s_nstlj = 0;
+
+  arksls_mem->s_last_flag = 0;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkKLUSetup:
+
+  This routine does the setup operations for the ARKKLU linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     ARKSLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+---------------------------------------------------------------*/
+static int arkKLUSetup(ARKodeMem ark_mem, int convfail, 
+		       N_Vector ypred, N_Vector fpred, 
+		       booleantype *jcurPtr, N_Vector vtemp1, 
+		       N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  ARKSlsMem arksls_mem;
+  ARKSlsMassMem arksls_mass_mem;
+  KLUData klu_data;
+  int retval;
+
+  realtype uround_twothirds;
+  
+  uround_twothirds = SUNRpowerR(ark_mem->ark_uround,TWOTHIRDS);
+
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+  klu_data = (KLUData) arksls_mem->s_solver_data;
+  
+  /* Check that Jacobian eval routine is set */
+  if (arksls_mem->s_Jeval == NULL) {
+    arkProcessError(ark_mem, ARKSLS_JAC_NOSET, "ARKSLS", 
+		    "arkKLUSetup", MSGSP_JAC_NOSET);
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_JAC_NOSET);
+  }
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arksls_mem->s_nstlj + ARKS_MSBJ) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKS_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  jok = !jbad;
+  
+  /* If jok = TRUE, use saved copy of J */
+  if (jok) {
+    *jcurPtr = FALSE;
+    SparseCopyMat(arksls_mem->s_savedJ, arksls_mem->s_A);
+
+  /* If jok = FALSE, call jac routine for new J value */
+  } else {
+    arksls_mem->s_nje++;
+    arksls_mem->s_nstlj = ark_mem->ark_nst;
+    *jcurPtr = TRUE;
+    SparseSetMatToZero(arksls_mem->s_A);
+
+    retval = arksls_mem->s_Jeval(ark_mem->ark_tn, ypred, fpred, 
+				 arksls_mem->s_A, arksls_mem->s_Jdata, 
+				 vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKSLS_JACFUNC_UNRECVR, "ARKSLS", 
+		      "arkKLUSetup", MSGSP_JACFUNC_FAILED);
+      arksls_mem->s_last_flag = ARKSLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      arksls_mem->s_last_flag = ARKSLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    SparseCopyMat(arksls_mem->s_A, arksls_mem->s_savedJ);
+  }
+
+  /* Scale J by -gamma */
+  SparseScaleMat(-ark_mem->ark_gamma, arksls_mem->s_A);
+
+  /* Add mass matrix to get A = M-gamma*J */
+  if (ark_mem->ark_mass_matrix) {
+
+    /* Compute mass matrix */
+    arksls_mass_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+    SparseSetMatToZero(arksls_mass_mem->s_M);
+    retval = arksls_mass_mem->s_Meval(ark_mem->ark_tn, 
+				      arksls_mass_mem->s_M, 
+				      arksls_mass_mem->s_Mdata, 
+				      vtemp1, vtemp2, vtemp3);
+    arksls_mass_mem->s_nme++;
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKSLS_MASSFUNC_UNRECVR, "ARKSLS", 
+		      "arkKLUSetup",  MSGSP_MASSFUNC_FAILED);
+      arksls_mem->s_last_flag = ARKSLS_MASSFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      arksls_mem->s_last_flag = ARKSLS_MASSFUNC_RECVR;
+      return(1);
+    }
+    
+    /* add to A */
+    retval = SparseAddMat(arksls_mem->s_A, arksls_mass_mem->s_M);
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		      "arkKLUSetup",  "Error in adding mass matrix to Jacobian");
+      arksls_mem->s_last_flag = ARKSLS_PACKAGE_FAIL;
+      return(retval);
+    }
+    if (retval > 0)  return(retval);
+    
+  } else {
+    SparseAddIdentityMat(arksls_mem->s_A);
+  }
+
+
+  /* On first decomposition, get the symbolic factorization */ 
+  if (arksls_mem->s_first_factorize) {
+
+    /* Update the ordering option with user-updated values */
+    klu_data->s_Common.ordering = klu_data->s_ordering;
+
+    /* Perform symbolic analysis of sparsity structure */
+    if (klu_data->s_Symbolic != NULL) {
+       klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+    }
+    klu_data->s_Symbolic = klu_analyze(arksls_mem->s_A->NP, 
+				       arksls_mem->s_A->indexptrs, 
+				       arksls_mem->s_A->indexvals, 
+				       &(klu_data->s_Common));
+    if (klu_data->s_Symbolic == NULL) {
+      arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		      "ARKKLUSetup", MSGSP_PACKAGE_FAIL);
+      return(ARKSLS_PACKAGE_FAIL);
+    }
+
+    /* ------------------------------------------------------------
+       Compute the LU factorization of  the Jacobian.
+       ------------------------------------------------------------*/
+    if( klu_data->s_Numeric != NULL) {
+       klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+    }
+    klu_data->s_Numeric = klu_factor(arksls_mem->s_A->indexptrs, 
+				     arksls_mem->s_A->indexvals, 
+				     arksls_mem->s_A->data, 
+				     klu_data->s_Symbolic, 
+				     &(klu_data->s_Common));
+    if (klu_data->s_Numeric == NULL) {
+      arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		      "ARKKLUSetup", MSGSP_PACKAGE_FAIL);
+      return(ARKSLS_PACKAGE_FAIL);
+    }
+
+    arksls_mem->s_first_factorize = 0;
+  }
+  else {
+
+    retval = klu_refactor(arksls_mem->s_A->indexptrs, 
+			  arksls_mem->s_A->indexvals, 
+			  arksls_mem->s_A->data, 
+			  klu_data->s_Symbolic, klu_data->s_Numeric,
+			  &(klu_data->s_Common));
+    if (retval == 0) {
+      arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		      "ARKKLUSetup", MSGSP_PACKAGE_FAIL);
+      return(ARKSLS_PACKAGE_FAIL);
+    }
+    
+    /*-----------------------------------------------------------
+      Check if a cheap estimate of the reciprocal of the condition 
+      number is getting too small.  If so, delete
+      the prior numeric factorization and recompute it.
+      -----------------------------------------------------------*/
+    
+    retval = klu_rcond(klu_data->s_Symbolic, klu_data->s_Numeric,
+		       &(klu_data->s_Common));
+    if (retval == 0) {
+      arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		      "ARKKLUSetup", MSGSP_PACKAGE_FAIL);
+      return(ARKSLS_PACKAGE_FAIL);
+    }
+
+    if ( (klu_data->s_Common.rcond)  < uround_twothirds ) {
+      
+      /* Condition number may be getting large.  
+	 Compute more accurate estimate */
+      retval = klu_condest(arksls_mem->s_A->indexptrs, 
+			   arksls_mem->s_A->data, 
+			   klu_data->s_Symbolic, klu_data->s_Numeric,
+			   &(klu_data->s_Common));
+      if (retval == 0) {
+	arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+			"ARKKLUSetup", MSGSP_PACKAGE_FAIL);
+	return(ARKSLS_PACKAGE_FAIL);
+      }
+      
+      if ( (klu_data->s_Common.condest) > 
+	   (1.0/uround_twothirds) ) {
+
+	/* More accurate estimate also says condition number is 
+	   large, so recompute the numeric factorization */
+
+	klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+	
+	klu_data->s_Numeric = klu_factor(arksls_mem->s_A->indexptrs, 
+					 arksls_mem->s_A->indexvals, 
+					 arksls_mem->s_A->data,
+					 klu_data->s_Symbolic, 
+					 &(klu_data->s_Common));
+
+	if (klu_data->s_Numeric == NULL) {
+	  arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+			  "ARKKLUSetup", MSGSP_PACKAGE_FAIL);
+	  return(ARKSLS_PACKAGE_FAIL);
+	}
+      }
+    }
+  }
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkKLUSolve:
+
+ This routine handles the solve operation for the ARKKLU linear
+ solver module.  It calls the KLU solve routine, then returns 
+ ARKSLS_SUCCESS = 0.
+---------------------------------------------------------------*/
+static int arkKLUSolve(ARKodeMem ark_mem, N_Vector b, 
+		       N_Vector weight, N_Vector ycur, 
+		       N_Vector fcur)
+{
+  int flag;
+  ARKSlsMem arksls_mem;
+  KLUData klu_data;
+  realtype *bd;
+  
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+  klu_data = (KLUData) arksls_mem->s_solver_data;
+
+  bd = N_VGetArrayPointer(b);
+
+  /* Call KLU to solve the linear system */
+  flag = klu_data->sun_klu_solve(klu_data->s_Symbolic, klu_data->s_Numeric, 
+                                 arksls_mem->s_A->NP, 1, bd, 
+                                 &(klu_data->s_Common));
+  if (flag == 0) {
+    arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		    "ARKKLUSolve", MSGSP_PACKAGE_FAIL);
+    return(ARKSLS_PACKAGE_FAIL);
+  }
+
+  /* Scale the correction to account for change in gamma. */
+  if (ark_mem->ark_gamrat != ONE)
+    N_VScale(TWO/(ONE + ark_mem->ark_gamrat), b, b);
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkKLUFree:
+
+ This routine frees memory specific to the ARKKLU linear solver.
+---------------------------------------------------------------*/
+static int arkKLUFree(ARKodeMem ark_mem)
+{
+  ARKSlsMem arksls_mem;
+  KLUData klu_data;
+  
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+  klu_data = (KLUData) arksls_mem->s_solver_data;
+
+  if( klu_data->s_Numeric != NULL)
+  {
+     klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  }
+  if( klu_data->s_Symbolic != NULL)
+  {
+     klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  }
+
+  if (arksls_mem->s_A) {
+    SparseDestroyMat(arksls_mem->s_A);
+    arksls_mem->s_A = NULL;
+  }
+
+  if (arksls_mem->s_savedJ) {
+    SparseDestroyMat(arksls_mem->s_savedJ);
+    arksls_mem->s_savedJ = NULL;
+  }
+
+  free(klu_data); 
+  free(arksls_mem); 
+  ark_mem->ark_lmem = NULL;
+
+  return(0);
+}
+
+
+
+/*---------------------------------------------------------------
+ ARKMassKLU
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the ARKode / KLU mass matrix linear 
+ solver module.  ARKMassKLU first calls the existing mfree 
+ routine if this is not NULL.  Then it sets the ark_minit, 
+ ark_msetup, ark_msolve and ark_mfree fields in (*arkode_mem) 
+ to be arkMassKLUInit, arkMassKLUSetup, arkMassKLUSolve and 
+ arkMassKLUFree, respectively.   It allocates memory for a 
+ structure of type ARKSlsMassMemRec and sets the ark_mass_mem 
+ field in (*arkode_mem) to the address of this structure.  It 
+ sets MassSetupNonNull in (*arkode_mem) to TRUE.  Finally, it 
+ allocates memory for KLU.  The return value is 
+ ARKSLS_SUCCESS = 0, ARKSLS_LMEM_FAIL = -1, or 
+ ARKSLS_ILL_INPUT = -2.
+
+ NOTE: The KLU linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKMassKLU will first 
+       test for a compatible N_Vector internal representation
+       by checking that the function N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+int ARKMassKLU(void *arkode_mem, int n, int nnz, int sparsetype, 
+               ARKSlsSparseMassFn smass)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMassMem arksls_mem;
+  KLUData klu_data;
+  int flag;
+
+  /* Return immediately if arkode_mem is NULL. */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+                    "ARKMassKLU", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKSLS_ILL_INPUT, "ARKSLS", 
+                    "ARKMassKLU", MSGSP_BAD_NVECTOR);
+    return(ARKSLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree != NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set five main function fields in ark_mem, enable mass matrix. */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = arkMassKLUInit;
+  ark_mem->ark_msetup = arkMassKLUSetup;
+  ark_mem->ark_msolve = arkMassKLUSolve;
+  ark_mem->ark_mfree  = arkMassKLUFree;
+  ark_mem->ark_mtimes = arkMassKLUMultiply;
+  ark_mem->ark_mtimes_data = (void *) ark_mem;
+  ark_mem->ark_msolve_type = 3;
+
+  /* Get memory for ARKSlsMassMemRec. */
+  arksls_mem = (ARKSlsMassMem) malloc(sizeof(struct ARKSlsMassMemRec));
+  if (arksls_mem == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+                    "ARKMassKLU", MSGSP_MEM_FAIL);
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Get memory for KLUData. */
+  klu_data = (KLUData) malloc(sizeof(struct KLUDataRec));
+  if (klu_data == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+                    "ARKMassKLU", MSGSP_MEM_FAIL);
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Initialize mass-matrix-related data */
+  arksls_mem->s_nme = 0;
+  arksls_mem->s_first_factorize = 1;
+  arksls_mem->s_Meval = smass;
+  arksls_mem->s_Mdata = ark_mem->ark_user_data;
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  ark_mem->ark_MassSetupNonNull = TRUE;
+  arksls_mem->sparsetype = sparsetype;
+
+  /* Allocate memory for M and M_lu */
+  arksls_mem->s_M = NULL;
+  arksls_mem->s_M = SparseNewMat(n, n, nnz, sparsetype);
+  if (arksls_mem->s_M == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+                    "ARKMassKLU", MSGSP_MEM_FAIL);
+    free(klu_data); klu_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+  arksls_mem->s_M_lu = NULL;
+  arksls_mem->s_M_lu = SparseNewMat(n, n, nnz, sparsetype);
+  if (arksls_mem->s_M_lu == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+                    "ARKMassKLU", MSGSP_MEM_FAIL);
+    SparseDestroyMat(arksls_mem->s_M);
+    free(klu_data); klu_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Initialize KLU structures */
+  switch (sparsetype) {
+    case CSC_MAT:
+      klu_data->sun_klu_solve = &klu_solve;
+      break;
+    case CSR_MAT:
+      klu_data->sun_klu_solve = &klu_tsolve;
+      break;
+    default:
+      SparseDestroyMat(arksls_mem->s_M);
+      SparseDestroyMat(arksls_mem->s_M_lu);
+      free(klu_data); klu_data = NULL;
+      free(arksls_mem); arksls_mem = NULL;
+      return(ARKSLS_ILL_INPUT);
+  }
+  klu_data->s_Symbolic = NULL;
+  klu_data->s_Numeric = NULL;
+
+  /* Set default parameters for KLU */
+  flag = klu_defaults(&klu_data->s_Common);
+  if (flag == 0) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+                    "ARKMassKLU", MSGSP_MEM_FAIL);
+    klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+    free(klu_data->s_Numeric);  klu_data->s_Numeric = NULL;
+    klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+    free(klu_data->s_Symbolic);  klu_data->s_Symbolic = NULL;
+    SparseDestroyMat(arksls_mem->s_M);
+    SparseDestroyMat(arksls_mem->s_M_lu);
+    free(klu_data); klu_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Set ordering to COLAMD as the arkode default use.
+     Users can set a different value with ARKMassKLUSetOrdering,
+     and the user-set value is loaded before any call to klu_analyze in
+     ARKMassKLUSetup.  */
+  klu_data->s_ordering = 1;
+  klu_data->s_Common.ordering = klu_data->s_ordering;
+
+  /* Attach linear solver memory to the integrator memory */
+  arksls_mem->s_solver_data = (void *) klu_data;
+  ark_mem->ark_mass_mem = arksls_mem;
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+  ARKMassKLUReInit
+
+  This routine reinitializes memory and flags for a new 
+  factorization (symbolic and numeric) to be conducted at the 
+  next solver setup call.  This routine is useful in the cases 
+  where the number of nonzeroes has changed or if the structure 
+  of the linear system has changed which would require a new 
+  symbolic (and numeric) factorization.
+ 
+  The reinit_type argument governs the level of reinitialization:
+ 
+  reinit_type = 1: The mass matrix will be destroyed and 
+                   a new one will be allocated based on the nnz
+                   value passed to this call. New symbolic and
+                   numeric factorizations will be completed at the 
+                   next solver setup.
+ 
+  reinit_type = 2: Only symbolic and numeric factorizations will be 
+                   completed.  It is assumed that the mass matrix
+                   size has not exceeded the size of nnz given in 
+                   the prior call to ARKMassKLU.
+ 
+  This routine assumes no other changes to solver use are necessary.
+ 
+  The return value is ARKSLS_SUCCESS = 0, ARKSLS_MEM_NULL = -1, 
+  ARKSLS_MASSMEM_NULL = -8, ARKSLS_ILL_INPUT = -3, or 
+  ARKSLS_MEM_FAIL = -4.
+---------------------------------------------------------------*/
+int ARKMassKLUReInit(void *arkode_mem, int n, int nnz, int reinit_type)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMassMem arksls_mem;
+  KLUData klu_data;
+
+  /* Return immediately if arkode_mem is NULL. */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", "ARKMassKLUReInit", 
+		    MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Return immediately if ark_lmem is NULL. */
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MASSMEM_NULL, "ARKSLS", "ARKMassKLUReInit", 
+		    MSGSP_MASSMEM_NULL);
+    return(ARKSLS_MASSMEM_NULL);
+  }
+
+  arksls_mem = (ARKSlsMassMem) (ark_mem->ark_mass_mem);
+  klu_data = (KLUData) arksls_mem->s_solver_data;
+
+  /* Return if reinit_type is not valid */
+  if ((reinit_type != 1) && (reinit_type != 2)) {
+    arkProcessError(NULL, ARKSLS_ILL_INPUT, "ARKSLS", "ARKMassKLUReInit", 
+		    MSGSP_ILL_INPUT);
+    return(ARKSLS_ILL_INPUT);
+  }
+
+  if (reinit_type == 1) {
+
+    /* Destroy previous Jacobian information */
+    if (arksls_mem->s_M) {
+      SparseDestroyMat(arksls_mem->s_M);
+    }
+
+    /* Allocate memory for the sparse Jacobian */
+    arksls_mem->s_M = SparseNewMat(n, n, nnz, arksls_mem->sparsetype);
+    if (arksls_mem->s_M == NULL) {
+      arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", "ARKMassKLU", 
+		    MSGSP_MEM_FAIL);
+      return(ARKSLS_MEM_FAIL);
+    }
+  }
+
+  /* Free the prior factorazation and reset for first factorization */
+  if( klu_data->s_Symbolic != NULL)
+    klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  if( klu_data->s_Numeric != NULL)
+    klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  arksls_mem->s_first_factorize = 1;
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+
+  return(0);
+}
+
+/*---------------------------------------------------------------
+ arkMassKLUInit:
+
+ This routine does remaining initializations specific to the 
+ ARKKLU mass matrix linear solver module.  It returns 0 if 
+ successful.
+---------------------------------------------------------------*/
+static int arkMassKLUInit(ARKodeMem ark_mem)
+{
+  ARKSlsMassMem arksls_mem;
+
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+  arksls_mem->s_nme = 0;
+  arksls_mem->s_first_factorize = 1;
+
+  arksls_mem->s_Mdata = ark_mem->ark_user_data;
+
+  /* Set mass matrix function data */
+  arksls_mem->s_Mdata = ark_mem->ark_user_data;
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassKLUSetup:
+
+  This routine does the setup operations for the ARKMassKLU 
+  linear solver module.  It calls the mass matrix evaluation 
+  routine, updates counters, and calls the LU factorization 
+  routine.  The return value is either
+     ARkSLS_SUCCESS = 0  if successful,
+     +1  if the Meval routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the Meval routine failed unrecoverably.
+---------------------------------------------------------------*/
+static int arkMassKLUSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			   N_Vector vtemp2, N_Vector vtemp3)
+{
+  ARKSlsMassMem arksls_mem;
+  KLUData klu_data;
+  int retval;
+  
+  realtype uround_twothirds;
+  
+  uround_twothirds = SUNRpowerR(ark_mem->ark_uround,TWOTHIRDS);
+
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+  klu_data = (KLUData) arksls_mem->s_solver_data;
+  
+  /* Check that mass matrix eval routine is set */
+  if (arksls_mem->s_Meval == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MASS_NOSET, "ARKSLS", 
+		    "arkMassKLUSetup", MSGSP_MASS_NOSET);
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MASS_NOSET);
+  }
+
+  /* call Meval routine for new M matrix */
+  SparseSetMatToZero(arksls_mem->s_M);
+  retval = arksls_mem->s_Meval(ark_mem->ark_tn, arksls_mem->s_M, 
+			       arksls_mem->s_Mdata, vtemp1, 
+			       vtemp2, vtemp3);
+  arksls_mem->s_nme++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, ARKSLS_MASSFUNC_UNRECVR, "ARKSLS", 
+		    "arkMassKLUSetup", MSGSP_MASSFUNC_FAILED);
+    arksls_mem->s_last_flag = ARKSLS_MASSFUNC_UNRECVR;
+    return(-1);
+  }
+  if (retval > 0) {
+    arksls_mem->s_last_flag = ARKSLS_MASSFUNC_RECVR;
+    return(1);
+  }
+
+  /* Copy M into M_lu for LU decomposition */
+  SparseCopyMat(arksls_mem->s_M, arksls_mem->s_M_lu);
+
+  /* On first decomposition, get the symbolic factorization */ 
+  if (arksls_mem->s_first_factorize) {
+
+    /* Update the ordering option with user-updated values */
+    klu_data->s_Common.ordering = klu_data->s_ordering;
+
+    /* Perform symbolic analysis of sparsity structure */
+    if (klu_data->s_Symbolic != NULL) {
+       klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+    }
+    klu_data->s_Symbolic = klu_analyze(arksls_mem->s_M_lu->N, 
+                                       arksls_mem->s_M_lu->indexptrs, 
+				       arksls_mem->s_M_lu->indexvals, 
+				       &(klu_data->s_Common));
+    if (klu_data->s_Symbolic == NULL) {
+      arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		      "ARKMassKLUSetup", MSGSP_PACKAGE_FAIL);
+      return(ARKSLS_PACKAGE_FAIL);
+    }
+
+    /* ------------------------------------------------------------
+       Compute the LU factorization of  the Jacobian.
+       ------------------------------------------------------------*/
+    if( klu_data->s_Numeric != NULL) {
+       klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+    }
+    klu_data->s_Numeric = klu_factor(arksls_mem->s_M_lu->indexptrs, 
+				     arksls_mem->s_M_lu->indexvals, 
+				     arksls_mem->s_M_lu->data, 
+				     klu_data->s_Symbolic, 
+				     &(klu_data->s_Common));
+    if (klu_data->s_Numeric == NULL) {
+      arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		      "ARKMassKLUSetup", MSGSP_PACKAGE_FAIL);
+      return(ARKSLS_PACKAGE_FAIL);
+    }
+    
+    arksls_mem->s_first_factorize = 0;
+  }
+  else {
+
+    retval = klu_refactor(arksls_mem->s_M_lu->indexptrs, 
+			  arksls_mem->s_M_lu->indexvals, 
+			  arksls_mem->s_M_lu->data,
+			  klu_data->s_Symbolic, klu_data->s_Numeric,
+			  &(klu_data->s_Common));
+    if (retval == 0) {
+      arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		      "ARKMassKLUSetup", MSGSP_PACKAGE_FAIL);
+      return(ARKSLS_PACKAGE_FAIL);
+    }
+    
+    /*-----------------------------------------------------------
+      Check if a cheap estimate of the reciprocal of the condition 
+      number is getting too small.  If so, delete
+      the prior numeric factorization and recompute it.
+      -----------------------------------------------------------*/
+    
+    retval = klu_rcond(klu_data->s_Symbolic, klu_data->s_Numeric,
+		       &(klu_data->s_Common));
+    if (retval == 0) {
+      arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		      "ARKMassKLUSetup", MSGSP_PACKAGE_FAIL);
+      return(ARKSLS_PACKAGE_FAIL);
+    }
+
+    if ( (klu_data->s_Common.rcond)  < uround_twothirds ) {
+      
+      /* Condition number may be getting large.  
+	 Compute more accurate estimate */
+      retval = klu_condest(arksls_mem->s_M_lu->indexptrs, 
+			   arksls_mem->s_M_lu->data,
+			   klu_data->s_Symbolic, klu_data->s_Numeric,
+			   &(klu_data->s_Common));
+      if (retval == 0) {
+	arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+			"ARKMassKLUSetup", MSGSP_PACKAGE_FAIL);
+	return(ARKSLS_PACKAGE_FAIL);
+      }
+      
+      if ( (klu_data->s_Common.condest) > 
+	   (1.0/uround_twothirds) ) {
+
+	/* More accurate estimate also says condition number is 
+	   large, so recompute the numeric factorization */
+
+	klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+	
+	klu_data->s_Numeric = klu_factor(arksls_mem->s_M_lu->indexptrs, 
+					 arksls_mem->s_M_lu->indexvals, 
+					 arksls_mem->s_M_lu->data, 
+					 klu_data->s_Symbolic, 
+					 &(klu_data->s_Common));
+
+	if (klu_data->s_Numeric == NULL) {
+	  arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+			  "ARKMassKLUSetup", MSGSP_PACKAGE_FAIL);
+	  return(ARKSLS_PACKAGE_FAIL);
+	}
+      }
+    }
+  }
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassKLUSolve:
+
+  This routine handles the solve operation for the ARKKLU mass 
+  matrix linear solver module.  It calls the KLU solve routine, 
+  then returns ARKSLS_SUCCESS = 0.
+---------------------------------------------------------------*/
+static int arkMassKLUSolve(ARKodeMem ark_mem, N_Vector b, 
+			   N_Vector weight)
+{
+  int flag;
+  ARKSlsMassMem arksls_mem;
+  KLUData klu_data;
+  realtype *bd;
+  
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+  klu_data = (KLUData) arksls_mem->s_solver_data;
+
+  bd = N_VGetArrayPointer(b);
+
+  /* Call KLU to solve the linear system */
+  flag = klu_data->sun_klu_solve(klu_data->s_Symbolic, klu_data->s_Numeric, 
+                                 arksls_mem->s_M_lu->NP, 1, bd, 
+                                 &(klu_data->s_Common));
+  if (flag == 0) {
+    arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		    "ARKMassKLUSolve", MSGSP_PACKAGE_FAIL);
+    return(ARKSLS_PACKAGE_FAIL);
+  }
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassKLUFree:
+
+ This routine frees memory specific to the ARKMassKLU mass 
+ matrix linear solver.
+---------------------------------------------------------------*/
+static int arkMassKLUFree(ARKodeMem ark_mem)
+{
+  ARKSlsMassMem arksls_mem;
+  KLUData klu_data;
+  
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+  klu_data = (KLUData) arksls_mem->s_solver_data;
+
+  if( klu_data->s_Numeric != NULL)
+  {
+     klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  }
+  if( klu_data->s_Symbolic != NULL)
+  {
+     klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  }
+
+  if (arksls_mem->s_M) {
+    SparseDestroyMat(arksls_mem->s_M);
+    arksls_mem->s_M = NULL;
+  }
+
+  if (arksls_mem->s_M_lu) {
+    SparseDestroyMat(arksls_mem->s_M_lu);
+    arksls_mem->s_M_lu = NULL;
+  }
+
+  free(klu_data); 
+  free(arksls_mem); 
+  ark_mem->ark_mass_mem = NULL;
+
+  return(0);
+}
+
+
+/*===============================================================
+ Utility Functions
+===============================================================*/
+
+/*---------------------------------------------------------------
+ arkMassKLUMultiply:
+
+ Multiplies the mass matrix by the vector v to fill in the 
+ vector Mv.
+---------------------------------------------------------------*/
+static int arkMassKLUMultiply(N_Vector v, N_Vector Mv, 
+			      realtype t, void *arkode_mem)
+{
+
+  /* extract the SlsMassMem structure from the arkode_mem pointer */
+  ARKodeMem ark_mem;
+  ARKSlsMassMem arksls_mem;
+  realtype *vdata=NULL, *Mvdata=NULL;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "arkMassKLUMultiply", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+
+  /* zero out the result */
+  N_VConst(0.0, Mv);
+
+  /* access the vector arrays (since they must be serial vectors) */
+  vdata = N_VGetArrayPointer(v);
+  Mvdata = N_VGetArrayPointer(Mv);
+  if (vdata == NULL || Mvdata == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "arkMassKLLUMultiply", 
+		    "Vector data un-allocated.");
+    return(ARKSLS_MEM_NULL);
+  }
+
+  /* perform matrix-vector product with arksls_mem->s_M and return */
+  if (SparseMatvec(arksls_mem->s_M, vdata, Mvdata) != 0) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "arkMassKLUMultiply", 
+		    "Mass matrix data un-allocated.");
+    return(ARKSLS_MEM_NULL);
+  }
+
+  return(0);
+
+}
+
+
+/*===============================================================
+ Optional Input Specification Functions
+===============================================================*/
+
+
+/*---------------------------------------------------------------
+ ARKKLUSetOrdering:
+
+ Sets the ordering used by KLU for reducing fill.  Options are: 
+     0 for AMD, 
+     1 for COLAMD, and 
+     2 for the natural ordering.  
+ The default used is 1 (COLAMD).
+---------------------------------------------------------------*/
+int ARKKLUSetOrdering(void *arkode_mem, int ordering_choice)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMem arksls_mem;
+  KLUData klu_data;
+
+  /* Return immediately if ark_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "ARKKLUSetOrdering", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) ) {
+    arkProcessError(NULL, ARKSLS_ILL_INPUT, "ARKSLS", 
+		    "ARKKLUSetOrdering", MSGSP_ILL_INPUT);
+    return(ARKSLS_ILL_INPUT);
+  }
+
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+  klu_data = (KLUData) arksls_mem->s_solver_data;
+
+  klu_data->s_ordering = ordering_choice;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassKLUSetOrdering:
+
+ Sets the ordering used by KLU for reducing fill.  Options are: 
+     0 for AMD, 
+     1 for COLAMD, and 
+     2 for the natural ordering.  
+ The default used is 1 (COLAMD).
+---------------------------------------------------------------*/
+int ARKMassKLUSetOrdering(void *arkode_mem, int ordering_choice)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMassMem arksls_mem;
+  KLUData klu_data;
+
+  /* Return immediately if ark_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "ARKKLUSetOrdering", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) ) {
+    arkProcessError(NULL, ARKSLS_ILL_INPUT, "ARKSLS", 
+		    "ARKKLUSetOrdering", MSGSP_ILL_INPUT);
+    return(ARKSLS_ILL_INPUT);
+  }
+
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+  klu_data = (KLUData) arksls_mem->s_solver_data;
+
+  klu_data->s_ordering = ordering_choice;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+   EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_lapack.c b/src/arkode/arkode_lapack.c
new file mode 100644
index 0000000..ae7ce31
--- /dev/null
+++ b/src/arkode/arkode_lapack.c
@@ -0,0 +1,1270 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for a ARKODE dense linear solver
+ * using BLAS and LAPACK functions.
+ *--------------------------------------------------------------*/
+
+/* NOTE: the only operation that does not use Blas/Lapack functions
+   is matrix plus mass matrix (in calculating M-gamma*J in lsetup) */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <arkode/arkode_lapack.h>
+#include "arkode_direct_impl.h"
+#include "arkode_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+
+/*===============================================================
+ PROTOTYPES FOR PRIVATE FUNCTIONS
+===============================================================*/
+
+/* ARKLAPACK DENSE linit, lsetup, lsolve, and lfree routines */ 
+static int arkLapackDenseInit(ARKodeMem ark_mem);
+static int arkLapackDenseSetup(ARKodeMem ark_mem, int convfail, 
+			       N_Vector yP, N_Vector fctP, 
+			       booleantype *jcurPtr, N_Vector tmp1, 
+			       N_Vector tmp2, N_Vector tmp3);
+static int arkLapackDenseSolve(ARKodeMem ark_mem, N_Vector b, 
+			       N_Vector weight, N_Vector yC, 
+			       N_Vector fctC);
+static int arkLapackDenseFree(ARKodeMem ark_mem);
+
+/* ARKLAPACK DENSE minit, msetup, msolve, mfree and mtimes routines */ 
+static int arkMassLapackDenseInit(ARKodeMem ark_mem);
+static int arkMassLapackDenseSetup(ARKodeMem ark_mem, N_Vector tmp1, 
+				   N_Vector tmp2, N_Vector tmp3);
+static int arkMassLapackDenseSolve(ARKodeMem ark_mem, N_Vector b, 
+				   N_Vector weight);
+static int arkMassLapackDenseFree(ARKodeMem ark_mem);
+static int arkMassLapackDenseMultiply(N_Vector v, N_Vector Mv, 
+				      realtype t, void *user_data);
+
+/* ARKLAPACK BAND linit, lsetup, lsolve, and lfree routines */ 
+static int arkLapackBandInit(ARKodeMem ark_mem);
+static int arkLapackBandSetup(ARKodeMem ark_mem, int convfail, 
+			      N_Vector yP, N_Vector fctP, 
+			      booleantype *jcurPtr, N_Vector tmp1, 
+			      N_Vector tmp2, N_Vector tmp3);
+static int arkLapackBandSolve(ARKodeMem ark_mem, N_Vector b, 
+			      N_Vector weight, N_Vector yC, 
+			      N_Vector fctC);
+static int arkLapackBandFree(ARKodeMem ark_mem);
+
+/* ARKLAPACK BAND minit, msetup, msolve, mfree and mtimes routines */ 
+static int arkMassLapackBandInit(ARKodeMem ark_mem);
+static int arkMassLapackBandSetup(ARKodeMem ark_mem, N_Vector tmp1, 
+				  N_Vector tmp2, N_Vector tmp3);
+static int arkMassLapackBandSolve(ARKodeMem ark_mem, N_Vector b, 
+				  N_Vector weight);
+static int arkMassLapackBandFree(ARKodeMem ark_mem);
+static int arkMassLapackBandMultiply(N_Vector v, N_Vector Mv, 
+				     realtype t, void *user_data);
+
+/*===============================================================
+ EXPORTED FUNCTIONS FOR IMPLICIT INTEGRATION
+===============================================================*/
+              
+/*---------------------------------------------------------------
+ ARKLapackDense:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the linear solver module.  
+ ARKLapackDense first calls the existing lfree routine if this is 
+ not NULL.  Then it sets the ark_linit, ark_lsetup, ark_lsolve, 
+ ark_lfree fields in (*arkode_mem) to be arkLapackDenseInit, 
+ arkLapackDenseSetup, arkLapackDenseSolve, and arkLapackDenseFree, 
+ respectively.  It allocates memory for a structure of type 
+ ARKDlsMemRec and sets the ark_lmem field in (*arkode_mem) to the
+ address of this structure.  It sets setupNonNull in (*arkode_mem) 
+ to TRUE, and the d_jac field to the default arkDlsDenseDQJac. 
+ Finally, it allocates memory for M, pivots, and savedJ.
+ The return value is SUCCESS = 0, or LMEM_FAIL = -1.
+
+ NOTE: The dense linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKLapackDense will 
+       first test for a compatible N_Vector internal 
+       representation by checking that N_VGetArrayPointer and 
+       N_VSetArrayPointer exist.  Of course, other vector 
+       implementations may also have these functions set, so 
+       this test is not sufficient to guarantee use of the 
+       serial NVECTOR package.
+---------------------------------------------------------------*/
+int ARKLapackDense(void *arkode_mem, int N)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKLAPACK", 
+		    "ARKLapackDense", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the LAPACK solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL ||
+      ark_mem->ark_tempv->ops->nvsetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKLAPACK", 
+		    "ARKLapackDense", MSGD_BAD_NVECTOR);
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree !=NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem */
+  ark_mem->ark_linit  = arkLapackDenseInit;
+  ark_mem->ark_lsetup = arkLapackDenseSetup;
+  ark_mem->ark_lsolve = arkLapackDenseSolve;
+  ark_mem->ark_lfree  = arkLapackDenseFree;
+  ark_mem->ark_lsolve_type = 1;
+
+  /* Get memory for ARKDlsMemRec */
+  arkdls_mem = NULL;
+  arkdls_mem = (ARKDlsMem) malloc(sizeof(struct ARKDlsMemRec));
+  if (arkdls_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKLapackDense", MSGD_MEM_FAIL);
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  arkdls_mem->d_type = SUNDIALS_DENSE;
+
+  /* Initialize Jacobian-related data */
+  arkdls_mem->d_jacDQ  = TRUE;
+  arkdls_mem->d_djac   = NULL;
+  arkdls_mem->d_J_data = NULL;
+
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  ark_mem->ark_setupNonNull = TRUE;
+
+  /* Initialize counters */
+  arkDlsInitializeCounters(arkdls_mem);
+  
+  /* Set problem dimension */
+  arkdls_mem->d_n = (long int) N;
+
+  /* Allocate memory for M, pivot array, and savedJ */
+  arkdls_mem->d_M = NULL;
+  arkdls_mem->d_pivots = NULL;
+  arkdls_mem->d_savedJ = NULL;
+
+  arkdls_mem->d_M = NewDenseMat(arkdls_mem->d_n, arkdls_mem->d_n);
+  if (arkdls_mem->d_M == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKLapackDense", MSGD_MEM_FAIL);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_pivots = NewIntArray(N);
+  if (arkdls_mem->d_pivots == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKLapackDense", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_savedJ = NewDenseMat(arkdls_mem->d_n, arkdls_mem->d_n);
+  if (arkdls_mem->d_savedJ == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKLapackDense", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    DestroyArray(arkdls_mem->d_pivots);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_lmem = arkdls_mem;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKLapackBand:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the band linear solver module. It 
+ first calls the existing lfree routine if this is not NULL.  It 
+ then sets the ark_linit, ark_lsetup, ark_lsolve, and ark_lfree 
+ fields in (*arkode_mem) to be arkLapackBandInit, 
+ arkLapackBandSetup, arkLapackBandSolve, and arkLapackBandFree, 
+ respectively.  It allocates memory for a structure of type 
+ ARKLapackBandMemRec and sets the ark_lmem field in (*arkode_mem) 
+ to the address of this structure.  It sets setupNonNull in 
+ (*arkode_mem) to be TRUE, mu to be mupper, and ml to be mlower.  
+ Finally, it allocates memory for M, pivots, and savedJ.  The 
+ ARKLapackBand return value is ARKDLS_SUCCESS=0, 
+ ARKDLS_MEM_FAIL=-1, or ARKDLS_ILL_INPUT=-2.
+
+ NOTE: The ARKLAPACK linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKLapackBand will first 
+       test for compatible a compatible N_Vector internal
+       representation by checking that the function 
+       N_VGetArrayPointer exists.  Again, this test is insufficient
+       to guarantee the serial NVECTOR package, but it's a start.
+---------------------------------------------------------------*/                  
+int ARKLapackBand(void *arkode_mem, int N, int mupper, int mlower)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKLAPACK", 
+		    "ARKLapackBand", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKLAPACK", 
+		    "ARKLapackBand", MSGD_BAD_NVECTOR);
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree != NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem */  
+  ark_mem->ark_linit  = arkLapackBandInit;
+  ark_mem->ark_lsetup = arkLapackBandSetup;
+  ark_mem->ark_lsolve = arkLapackBandSolve;
+  ark_mem->ark_lfree  = arkLapackBandFree;
+  ark_mem->ark_lsolve_type = 2;
+  
+  /* Get memory for ARKDlsMemRec */
+  arkdls_mem = NULL;
+  arkdls_mem = (ARKDlsMem) malloc(sizeof(struct ARKDlsMemRec));
+  if (arkdls_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKLapackBand", MSGD_MEM_FAIL);
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  arkdls_mem->d_type = SUNDIALS_BAND;
+
+  /* Initialize Jacobian-related data */
+  arkdls_mem->d_jacDQ  = TRUE;
+  arkdls_mem->d_bjac   = NULL;
+  arkdls_mem->d_J_data = NULL;
+
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  ark_mem->ark_setupNonNull = TRUE;
+  
+  /* Initialize counters */
+  arkDlsInitializeCounters(arkdls_mem);
+  
+  /* Load problem dimension */
+  arkdls_mem->d_n = (long int) N;
+
+  /* Load half-bandwiths in arkdls_mem */
+  arkdls_mem->d_ml = (long int) mlower;
+  arkdls_mem->d_mu = (long int) mupper;
+
+  /* Test ml and mu for legality */
+  if ((arkdls_mem->d_ml < 0) || (arkdls_mem->d_mu < 0) || 
+      (arkdls_mem->d_ml >= arkdls_mem->d_n) || 
+      (arkdls_mem->d_mu >= arkdls_mem->d_n)) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKLAPACK", 
+		    "ARKLapackBand", MSGD_BAD_SIZES);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  arkdls_mem->d_smu = SUNMIN(arkdls_mem->d_n-1,
+			  arkdls_mem->d_mu + arkdls_mem->d_ml);
+
+  /* Allocate memory for M, pivot array, and savedJ */
+  arkdls_mem->d_M = NULL;
+  arkdls_mem->d_pivots = NULL;
+  arkdls_mem->d_savedJ = NULL;
+
+  arkdls_mem->d_M = NewBandMat(arkdls_mem->d_n, arkdls_mem->d_mu, 
+			       arkdls_mem->d_ml, arkdls_mem->d_smu);
+  if (arkdls_mem->d_M == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKLapackBand", MSGD_MEM_FAIL);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }  
+  arkdls_mem->d_pivots = NewIntArray(N);
+  if (arkdls_mem->d_pivots == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKLapackBand", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_savedJ = NewBandMat(arkdls_mem->d_n, arkdls_mem->d_mu, 
+				    arkdls_mem->d_ml, arkdls_mem->d_smu);
+  if (arkdls_mem->d_savedJ == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKLapackBand", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    DestroyArray(arkdls_mem->d_pivots);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_lmem = arkdls_mem;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassLapackDense:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the mass matrix solver module.  
+ ARKMassLapackDense first calls the existing mfree routine if 
+ this is not NULL.  Then it sets the ark_minit, ark_msetup, 
+ ark_msolve, ark_mfree fields in (*arkode_mem) to be 
+ arkMassLapackDenseInit, arkMassLapackDenseSetup, 
+ arkMassLapackDenseSolve, and arkMassLapackDenseFree, 
+ respectively.  It allocates memory for a structure of type 
+ ARKDlsMassMemRec and sets the ark_mass_mem field in 
+ (*arkode_mem) to the address of this structure.  It sets 
+ MassSetupNonNull in (*arkode_mem) to TRUE.  Finally, it 
+ allocates memory for M and pivots. The return value is 
+ SUCCESS = 0, or LMEM_FAIL = -1.
+
+ NOTE: The dense linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKMassLapackDense will 
+       first test for a compatible N_Vector internal 
+       representation by checking that N_VGetArrayPointer and 
+       N_VSetArrayPointer exist.  Of course, other vector 
+       implementations may also have these functions set, so 
+       this test is not sufficient to guarantee use of the 
+       serial NVECTOR package.
+---------------------------------------------------------------*/
+int ARKMassLapackDense(void *arkode_mem, int N, 
+		       ARKDlsDenseMassFn dmass)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKLAPACK", 
+		    "ARKMassLapackDense", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the LAPACK solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL ||
+      ark_mem->ark_tempv->ops->nvsetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKLAPACK", 
+		    "ARKMassLapackDense", MSGD_BAD_NVECTOR);
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree !=NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set related function fields in ark_mem, enable mass matrix */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = arkMassLapackDenseInit;
+  ark_mem->ark_msetup = arkMassLapackDenseSetup;
+  ark_mem->ark_msolve = arkMassLapackDenseSolve;
+  ark_mem->ark_mfree  = arkMassLapackDenseFree;
+  ark_mem->ark_mtimes = arkMassLapackDenseMultiply;
+  ark_mem->ark_mtimes_data = (void *) ark_mem;
+  ark_mem->ark_msolve_type = 1;
+
+  /* Get memory for ARKDlsMassMemRec */
+  arkdls_mem = NULL;
+  arkdls_mem = (ARKDlsMassMem) malloc(sizeof(struct ARKDlsMassMemRec));
+  if (arkdls_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKMassLapackDense", MSGD_MEM_FAIL);
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  arkdls_mem->d_type = SUNDIALS_DENSE;
+
+  /* Initialize mass-matrix-related data */
+  arkdls_mem->d_dmass = dmass;
+  arkdls_mem->d_M_data = NULL;
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  ark_mem->ark_MassSetupNonNull = TRUE;
+
+  /* Set problem dimension */
+  arkdls_mem->d_n = (long int) N;
+
+  /* Allocate memory for M and pivot array */
+  arkdls_mem->d_M = NULL;
+  arkdls_mem->d_pivots = NULL;
+
+  arkdls_mem->d_M = NewDenseMat(arkdls_mem->d_n, arkdls_mem->d_n);
+  if (arkdls_mem->d_M == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKMassLapackDense", MSGD_MEM_FAIL);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+  arkdls_mem->d_pivots = NewIntArray(N);
+  if (arkdls_mem->d_pivots == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKMassLapackDense", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_mass_mem = arkdls_mem;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassLapackBand:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the band mass matrix solver module. 
+ It first calls the existing mfree routine if this is not NULL.  
+ It then sets the ark_minit, ark_msetup, ark_msolve, and ark_mfree 
+ fields in (*arkode_mem) to be arkMassLapackBandInit, 
+ arkMassLapackBandSetup, arkMassLapackBandSolve, and 
+ arkMassLapackBandFree, respectively.  It allocates memory for a
+ structure of type ARKMassLapackBandMemRec and sets the 
+ ark_mass_mem field in (*arkode_mem) to the address of this 
+ structure.  It sets MassSetupNonNull in (*arkode_mem) to be TRUE, 
+ mu to be mupper, and ml to be mlower.  Finally, it allocates 
+ memory for M and pivots.  The ARKMassLapackBand return value is 
+ ARKDLS_SUCCESS=0, ARKDLS_MEM_FAIL=-1, or ARKDLS_ILL_INPUT=-2.
+
+ NOTE: The ARKLAPACK linear solver assumes a serial implementation
+       of the NVECTOR package. Therefore, ARKMassLapackBand will first 
+       test for compatible a compatible N_Vector internal
+       representation by checking that the function 
+       N_VGetArrayPointer exists.  Again, this test is insufficient
+       to guarantee the serial NVECTOR package, but it's a start.
+---------------------------------------------------------------*/                  
+int ARKMassLapackBand(void *arkode_mem, int N, int mupper, 
+		      int mlower, ARKDlsBandMassFn bmass)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKLAPACK", 
+		    "ARKMassLapackBand", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKLAPACK", 
+		    "ARKMassLapackBand", MSGD_BAD_NVECTOR);
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree != NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set four main function fields in ark_mem, enable mass matrix */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = arkMassLapackBandInit;
+  ark_mem->ark_msetup = arkMassLapackBandSetup;
+  ark_mem->ark_msolve = arkMassLapackBandSolve;
+  ark_mem->ark_mfree  = arkMassLapackBandFree;
+  ark_mem->ark_mtimes = arkMassLapackBandMultiply;
+  ark_mem->ark_mtimes_data = (void *) ark_mem;
+  ark_mem->ark_msolve_type = 2;
+  
+  /* Get memory for ARKDlsMassMemRec */
+  arkdls_mem = NULL;
+  arkdls_mem = (ARKDlsMassMem) malloc(sizeof(struct ARKDlsMassMemRec));
+  if (arkdls_mem == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKMassLapackBand", MSGD_MEM_FAIL);
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  arkdls_mem->d_type = SUNDIALS_BAND;
+
+  /* Initialize mass-matrix-related data */
+  arkdls_mem->d_bmass = bmass;
+  arkdls_mem->d_M_data = NULL;
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  ark_mem->ark_MassSetupNonNull = TRUE;
+  
+  /* Load problem dimension */
+  arkdls_mem->d_n = (long int) N;
+
+  /* Load half-bandwiths in arkdls_mem */
+  arkdls_mem->d_ml = (long int) mlower;
+  arkdls_mem->d_mu = (long int) mupper;
+
+  /* Test ml and mu for legality */
+  if ((arkdls_mem->d_ml < 0) || (arkdls_mem->d_mu < 0) || 
+      (arkdls_mem->d_ml >= arkdls_mem->d_n) || 
+      (arkdls_mem->d_mu >= arkdls_mem->d_n)) {
+    arkProcessError(ark_mem, ARKDLS_ILL_INPUT, "ARKLAPACK", 
+		    "ARKMassLapackBand", MSGD_BAD_SIZES);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  arkdls_mem->d_smu = SUNMIN(arkdls_mem->d_n-1,
+			  arkdls_mem->d_mu + arkdls_mem->d_ml);
+
+  /* Allocate memory for M and pivot array */
+  arkdls_mem->d_M = NULL;
+  arkdls_mem->d_pivots = NULL;
+
+  arkdls_mem->d_M = NewBandMat(arkdls_mem->d_n, arkdls_mem->d_mu, 
+			       arkdls_mem->d_ml, arkdls_mem->d_smu);
+  if (arkdls_mem->d_M == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKMassLapackBand", MSGD_MEM_FAIL);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }  
+  arkdls_mem->d_pivots = NewIntArray(N);
+  if (arkdls_mem->d_pivots == NULL) {
+    arkProcessError(ark_mem, ARKDLS_MEM_FAIL, "ARKLAPACK", 
+		    "ARKMassLapackBand", MSGD_MEM_FAIL);
+    DestroyMat(arkdls_mem->d_M);
+    free(arkdls_mem); arkdls_mem = NULL;
+    return(ARKDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_mass_mem = arkdls_mem;
+
+  return(ARKDLS_SUCCESS);
+}
+
+
+/*===============================================================
+  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH DENSE JACOBIANS
+===============================================================*/
+
+/*---------------------------------------------------------------
+ arkLapackDenseInit does remaining initializations specific to 
+ the dense linear solver.
+---------------------------------------------------------------*/                  
+static int arkLapackDenseInit(ARKodeMem ark_mem)
+{
+  ARKDlsMem arkdls_mem;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+  
+  arkDlsInitializeCounters(arkdls_mem);
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (arkdls_mem->d_jacDQ) {
+    arkdls_mem->d_djac = arkDlsDenseDQJac;
+    arkdls_mem->d_J_data = ark_mem;
+  } else {
+    arkdls_mem->d_J_data = ark_mem->ark_user_data;
+  }
+
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkLapackDenseSetup does the setup operations for the dense 
+ linear solver. It makes a decision whether or not to call the 
+ Jacobian evaluation routine based on various state variables, 
+ and if not it uses the saved copy. In any case, it constructs 
+ the Newton matrix A = M - gamma*J updates counters, and calls 
+ the dense LU factorization routine.
+---------------------------------------------------------------*/                  
+static int arkLapackDenseSetup(ARKodeMem ark_mem, int convfail,
+			       N_Vector yP, N_Vector fctP,
+			       booleantype *jcurPtr, N_Vector tmp1, 
+			       N_Vector tmp2, N_Vector tmp3)
+{
+  ARKDlsMem arkdls_mem;
+  ARKDlsMassMem arkdls_mass_mem;
+  realtype dgamma, fact, *Acol_j, *Mcol_j;
+  booleantype jbad, jok;
+  int ier, retval, one = 1;
+  int intn, lenmat, i, j;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+  intn = (int) arkdls_mem->d_n;
+  lenmat = arkdls_mem->d_M->ldata ;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arkdls_mem->d_nstlj + ARKD_MSBJ) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKD_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  jok = !jbad;
+  
+  /* If jok = TRUE, use saved copy of J */
+  if (jok) {
+    *jcurPtr = FALSE;
+    dcopy_f77(&lenmat, arkdls_mem->d_savedJ->data, &one, 
+	      arkdls_mem->d_M->data, &one);
+    
+  /* If jok = FALSE, call jac routine for new J value */
+  } else {
+    arkdls_mem->d_nje++;
+    arkdls_mem->d_nstlj = ark_mem->ark_nst;
+    *jcurPtr = TRUE;
+    SetToZero(arkdls_mem->d_M);
+
+    retval = arkdls_mem->d_djac(arkdls_mem->d_n, ark_mem->ark_tn, 
+				yP, fctP, arkdls_mem->d_M, 
+				arkdls_mem->d_J_data, tmp1, tmp2, tmp3);
+
+    if (retval == 0) {
+      dcopy_f77(&lenmat, arkdls_mem->d_M->data, &one, 
+		arkdls_mem->d_savedJ->data, &one);
+    } else if (retval < 0) {
+      arkProcessError(ark_mem, ARKDLS_JACFUNC_UNRECVR, "ARKLAPACK", 
+		      "arkLapackDenseSetup", MSGD_JACFUNC_FAILED);
+      arkdls_mem->d_last_flag = ARKDLS_JACFUNC_UNRECVR;
+      return(-1);
+    } else if (retval > 0) {
+      arkdls_mem->d_last_flag = ARKDLS_JACFUNC_RECVR;
+      return(1);
+    }
+  }
+
+  /* Scale J by -gamma */
+  fact = -ark_mem->ark_gamma;
+  dscal_f77(&lenmat, &fact, arkdls_mem->d_M->data, &one);
+  
+  /* Add mass matrix to get A = M-gamma*J*/
+  if (ark_mem->ark_mass_matrix) {
+
+    /* Compute mass matrix */
+    arkdls_mass_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+    SetToZero(arkdls_mass_mem->d_M);
+    retval = arkdls_mass_mem->d_dmass(arkdls_mass_mem->d_n, 
+				      ark_mem->ark_tn, 
+				      arkdls_mass_mem->d_M, 
+				      arkdls_mass_mem->d_M_data, 
+				      tmp1, tmp2, tmp3);
+    arkdls_mass_mem->d_nme++;
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKDLS_MASSFUNC_UNRECVR, "ARKDENSE", 
+		      "arkLapackDenseSetup",  MSGD_MASSFUNC_FAILED);
+      arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_RECVR;
+      return(1);
+    }
+
+    /* Add to A */
+    for (j=0; j<arkdls_mem->d_M->N; j++) {
+      Acol_j = arkdls_mem->d_M->cols[j];
+      Mcol_j = arkdls_mass_mem->d_M->cols[j];
+      for (i=0; i<arkdls_mem->d_M->M; i++) 
+	Acol_j[i] += Mcol_j[i];
+    }
+  } else {
+    AddIdentity(arkdls_mem->d_M);
+  }
+
+  /* Do LU factorization of M */
+  dgetrf_f77(&intn, &intn, arkdls_mem->d_M->data, 
+	     &intn, arkdls_mem->d_pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  arkdls_mem->d_last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkLapackDenseSolve handles the solve operation for the dense 
+ linear solver by calling the dense backsolve routine.
+---------------------------------------------------------------*/                  
+static int arkLapackDenseSolve(ARKodeMem ark_mem, N_Vector b, 
+			       N_Vector weight, N_Vector yC, 
+			       N_Vector fctC)
+{
+  ARKDlsMem arkdls_mem;
+  realtype *bd, fact;
+  int ier, one = 1;
+  int intn;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+  intn = (int) arkdls_mem->d_n;
+
+  bd = N_VGetArrayPointer(b);
+
+  dgetrs_f77("N", &intn, &one, arkdls_mem->d_M->data, &intn, 
+	     arkdls_mem->d_pivots, bd, &intn, &ier, 1); 
+
+  if (ier > 0) return(1);
+
+  /* scale the correction to account for change in gamma */
+  if (ark_mem->ark_gamrat != ONE) {
+    fact = TWO/(ONE + ark_mem->ark_gamrat);
+    dscal_f77(&intn, &fact, bd, &one); 
+  }
+  
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkLapackDenseFree frees memory specific to the dense linear 
+ solver.
+---------------------------------------------------------------*/                  
+static int arkLapackDenseFree(ARKodeMem ark_mem)
+{
+  ARKDlsMem  arkdls_mem;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+  
+  DestroyMat(arkdls_mem->d_M);
+  DestroyArray(arkdls_mem->d_pivots);
+  DestroyMat(arkdls_mem->d_savedJ);
+  free(arkdls_mem); 
+  arkdls_mem = NULL;
+
+  return(0);
+}
+
+
+/*===============================================================
+  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH DENSE MASS MATRIX
+===============================================================*/
+
+/*---------------------------------------------------------------
+ arkMassLapackDenseInit does remaining initializations specific to 
+ the dense linear solver.
+---------------------------------------------------------------*/                  
+static int arkMassLapackDenseInit(ARKodeMem ark_mem)
+{
+  ARKDlsMassMem arkdls_mem;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  arkdls_mem->d_nme = 0;
+  arkdls_mem->d_M_data = ark_mem->ark_user_data;
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassLapackDenseSetup does the setup operations for the dense 
+ mass matrix solver. It calls the mass matrix evaluation routine,
+ updates counters, and calls the dense LU factorization routine.
+---------------------------------------------------------------*/                  
+static int arkMassLapackDenseSetup(ARKodeMem ark_mem, N_Vector tmp1, 
+				   N_Vector tmp2, N_Vector tmp3)
+{
+  ARKDlsMassMem arkdls_mem;
+  int ier, retval;
+  int intn;
+
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  intn = (int) arkdls_mem->d_n;
+
+  SetToZero(arkdls_mem->d_M);
+  retval = arkdls_mem->d_dmass(arkdls_mem->d_n, ark_mem->ark_tn, 
+			       arkdls_mem->d_M, arkdls_mem->d_M_data, 
+			       tmp1, tmp2, tmp3);
+  arkdls_mem->d_nme++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, ARKDLS_MASSFUNC_UNRECVR, "ARKLAPACK", 
+		    "arkMassLapackDenseSetup", MSGD_MASSFUNC_FAILED);
+    arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_UNRECVR;
+    return(-1);
+  } else if (retval > 0) {
+    arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_RECVR;
+    return(1);
+  }
+
+  /* Do LU factorization of M */
+  dgetrf_f77(&intn, &intn, arkdls_mem->d_M->data, 
+	     &intn, arkdls_mem->d_pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  arkdls_mem->d_last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassLapackDenseSolve handles the solve operation for the
+ dense mass matrix solver by calling the dense backsolve routine.
+---------------------------------------------------------------*/                  
+static int arkMassLapackDenseSolve(ARKodeMem ark_mem, N_Vector b, 
+				   N_Vector weight)
+{
+  ARKDlsMassMem arkdls_mem;
+  realtype *bd;
+  int ier, one = 1;
+  int intn;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  intn = (int) arkdls_mem->d_n;
+  bd = N_VGetArrayPointer(b);
+  dgetrs_f77("N", &intn, &one, arkdls_mem->d_M->data, &intn, 
+	     arkdls_mem->d_pivots, bd, &intn, &ier, 1); 
+  if (ier > 0) return(1);
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassLapackDenseFree frees memory specific to the dense mass
+ matrix solver.
+---------------------------------------------------------------*/                  
+static int arkMassLapackDenseFree(ARKodeMem ark_mem)
+{
+  ARKDlsMassMem arkdls_mem;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  DestroyMat(arkdls_mem->d_M);
+  DestroyArray(arkdls_mem->d_pivots);
+  free(arkdls_mem); 
+  arkdls_mem = NULL;
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassLapackDenseMultiply performs a matrix-vector product, 
+ multiplying the current mass matrix by a given vector.
+---------------------------------------------------------------*/                  
+static int arkMassLapackDenseMultiply(N_Vector v, N_Vector Mv, 
+				      realtype t, void *arkode_mem)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+  realtype *vdata=NULL, *Mvdata=NULL;
+  realtype *Mcol_j;
+  int i, j;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKLAPACK", 
+		    "arkMassLapackDenseMultiply", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+
+  /* extract the DlsMassMem structure from the user_data pointer */
+  ark_mem = (ARKodeMem) arkode_mem;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  /* zero out the result */
+  N_VConst(0.0, Mv);
+
+  /* access the vector arrays (since they must be serial vectors) */
+  vdata = N_VGetArrayPointer(v);
+  Mvdata = N_VGetArrayPointer(Mv);
+  if (vdata == NULL || Mvdata == NULL)
+    return(1);
+
+  /* perform matrix-vector product and return */
+  for (j=0; j<arkdls_mem->d_M->N; j++) {
+    Mcol_j = arkdls_mem->d_M->cols[j];
+    for (i=0; i<arkdls_mem->d_M->M; i++) 
+      Mvdata[i] += Mcol_j[i]*vdata[j];
+  }
+  return(0);
+}
+
+
+/*===============================================================
+  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH BAND JACOBIANS
+===============================================================*/
+
+/*---------------------------------------------------------------
+ arkLapackBandInit does remaining initializations specific to 
+ the band linear solver.
+---------------------------------------------------------------*/                  
+static int arkLapackBandInit(ARKodeMem ark_mem)
+{
+  ARKDlsMem arkdls_mem;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+
+  arkDlsInitializeCounters(arkdls_mem);
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (arkdls_mem->d_jacDQ) {
+    arkdls_mem->d_bjac = arkDlsBandDQJac;
+    arkdls_mem->d_J_data = ark_mem;
+  } else {
+    arkdls_mem->d_J_data = ark_mem->ark_user_data;
+  }
+  
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkLapackBandSetup does the setup operations for the band linear 
+ solver. It makes a decision whether or not to call the Jacobian 
+ evaluation routine based on various state variables, and if not 
+ it uses the saved copy. In any case, it constructs the Newton 
+ matrix A = M - gamma*J, updates counters, and calls the band LU
+ factorization routine.
+---------------------------------------------------------------*/                  
+static int arkLapackBandSetup(ARKodeMem ark_mem, int convfail, 
+			      N_Vector yP, N_Vector fctP, 
+			      booleantype *jcurPtr, N_Vector tmp1, 
+			      N_Vector tmp2, N_Vector tmp3)
+{
+  ARKDlsMem arkdls_mem;
+  ARKDlsMassMem arkdls_mass_mem;
+  realtype dgamma, fact, *Acol_j, *Mcol_j;
+  booleantype jbad, jok;
+  int ier, retval, one = 1;
+  int intn, iml, imu, lenmat, ldmat, i, j, colSize;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+  intn = (int) arkdls_mem->d_n;
+  iml = (int) arkdls_mem->d_ml;
+  imu = (int) arkdls_mem->d_mu;
+  lenmat = arkdls_mem->d_M->ldata;
+  ldmat = arkdls_mem->d_M->ldim;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arkdls_mem->d_nstlj + ARKD_MSBJ) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKD_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  jok = !jbad;
+  
+  /* If jok = TRUE, use saved copy of J */
+  if (jok) {
+    *jcurPtr = FALSE;
+    dcopy_f77(&lenmat, arkdls_mem->d_savedJ->data, 
+	      &one, arkdls_mem->d_M->data, &one);
+    
+  /* If jok = FALSE, call jac routine for new J value */
+  } else {
+    arkdls_mem->d_nje++;
+    arkdls_mem->d_nstlj = ark_mem->ark_nst;
+    *jcurPtr = TRUE;
+    SetToZero(arkdls_mem->d_M);
+
+    retval = arkdls_mem->d_bjac(arkdls_mem->d_n, arkdls_mem->d_mu, 
+				arkdls_mem->d_ml, ark_mem->ark_tn, 
+				yP, fctP, arkdls_mem->d_M, 
+				arkdls_mem->d_J_data, tmp1, tmp2, tmp3);
+    if (retval == 0) {
+      dcopy_f77(&lenmat, arkdls_mem->d_M->data, &one, 
+		arkdls_mem->d_savedJ->data, &one);
+    } else if (retval < 0) {
+      arkProcessError(ark_mem, ARKDLS_JACFUNC_UNRECVR, "ARKLAPACK", 
+		      "arkLapackBandSetup", MSGD_JACFUNC_FAILED);
+      arkdls_mem->d_last_flag = ARKDLS_JACFUNC_UNRECVR;
+      return(-1);
+    } else if (retval > 0) {
+      arkdls_mem->d_last_flag = ARKDLS_JACFUNC_RECVR;
+      return(1);
+    }
+  }
+  
+  /* Scale J by -gamma */
+  fact = -ark_mem->ark_gamma;
+  dscal_f77(&lenmat, &fact, arkdls_mem->d_M->data, &one);
+  
+  /* Add mass matrix to get A = M-gamma*J*/
+  if (ark_mem->ark_mass_matrix) {
+
+    /* Compute mass matrix */
+    arkdls_mass_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+    SetToZero(arkdls_mass_mem->d_M);
+    retval = arkdls_mass_mem->d_bmass(arkdls_mass_mem->d_n, arkdls_mass_mem->d_mu, 
+				      arkdls_mass_mem->d_ml, ark_mem->ark_tn, 
+				      arkdls_mass_mem->d_M, arkdls_mass_mem->d_M_data, 
+				      tmp1, tmp2, tmp3);
+    arkdls_mass_mem->d_nme++;
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKDLS_MASSFUNC_UNRECVR, "ARKLAPACK", 
+		      "arkLapackBandSetup",  MSGD_MASSFUNC_FAILED);
+      arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_RECVR;
+      return(1);
+    }
+
+    /* Add to A -- CURRENTLY ASSUMES THAT BOTH MATRICES HAVE 
+                   THE SAME BAND STRUCTURE AND COLUMN SIZE */
+    colSize = arkdls_mem->d_M->mu + arkdls_mem->d_M->ml + 1;
+    for (j=0; j<arkdls_mem->d_M->M; j++) {
+      Acol_j = arkdls_mem->d_M->cols[j] + arkdls_mem->d_M->s_mu - arkdls_mem->d_M->mu;
+      Mcol_j = arkdls_mass_mem->d_M->cols[j] + arkdls_mass_mem->d_M->s_mu 
+	     - arkdls_mass_mem->d_M->mu;
+      for (i=0; i<colSize; i++) 
+	Acol_j[i] += Mcol_j[i];
+    }
+  } else {
+    AddIdentity(arkdls_mem->d_M);
+  }
+  
+  /* Do LU factorization of M */
+  dgbtrf_f77(&intn, &intn, &iml, &imu, arkdls_mem->d_M->data, 
+	     &ldmat, arkdls_mem->d_pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  arkdls_mem->d_last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+
+}
+
+
+/*---------------------------------------------------------------
+ arkLapackBandSolve handles the solve operation for the band 
+ linear solver by calling the band backsolve routine.
+---------------------------------------------------------------*/                  
+static int arkLapackBandSolve(ARKodeMem ark_mem, N_Vector b, 
+			      N_Vector weight, N_Vector yC, 
+			      N_Vector fctC)
+{
+  ARKDlsMem arkdls_mem;
+  realtype *bd, fact;
+  int ier, one = 1;
+  int intn, iml, imu, ldmat;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+  intn = (int) arkdls_mem->d_n;
+  iml = (int) arkdls_mem->d_ml;
+  imu = (int) arkdls_mem->d_mu;
+  ldmat = arkdls_mem->d_M->ldim;
+
+  bd = N_VGetArrayPointer(b);
+
+  dgbtrs_f77("N", &intn, &iml, &imu, &one, arkdls_mem->d_M->data, 
+	     &ldmat, arkdls_mem->d_pivots, bd, &intn, &ier, 1);
+  if (ier > 0) return(1);
+
+  /* scale the correction to account for change in gamma */
+  if (ark_mem->ark_gamrat != ONE) {
+    fact = TWO/(ONE + ark_mem->ark_gamrat);
+    dscal_f77(&intn, &fact, bd, &one); 
+  }
+
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkLapackBandFree frees memory specific to the band linear 
+ solver.
+---------------------------------------------------------------*/                  
+static int arkLapackBandFree(ARKodeMem ark_mem)
+{
+  ARKDlsMem  arkdls_mem;
+
+  arkdls_mem = (ARKDlsMem) ark_mem->ark_lmem;
+  
+  DestroyMat(arkdls_mem->d_M);
+  DestroyArray(arkdls_mem->d_pivots);
+  DestroyMat(arkdls_mem->d_savedJ);
+  free(arkdls_mem); 
+  arkdls_mem = NULL;
+
+  return(0);
+}
+
+
+/*===============================================================
+  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH BAND MASS MATRIX
+===============================================================*/
+
+/*---------------------------------------------------------------
+ arkMassLapackBandInit does remaining initializations specific to 
+ the band linear solver.
+---------------------------------------------------------------*/                  
+static int arkMassLapackBandInit(ARKodeMem ark_mem)
+{
+  ARKDlsMassMem arkdls_mem;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  arkdls_mem->d_nme = 0;
+  arkdls_mem->d_M_data = ark_mem->ark_user_data;
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassLapackBandSetup does the setup operations for the band 
+ mass matrix solver. It constructs the mass matrix M, updates 
+ counters, and calls the band LU factorization routine.
+---------------------------------------------------------------*/                  
+static int arkMassLapackBandSetup(ARKodeMem ark_mem, N_Vector tmp1, 
+				  N_Vector tmp2, N_Vector tmp3)
+{
+  ARKDlsMassMem arkdls_mem;
+  int ier, retval;
+  int intn, iml, imu, ldmat;
+
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  intn = (int) arkdls_mem->d_n;
+  iml = (int) arkdls_mem->d_ml;
+  imu = (int) arkdls_mem->d_mu;
+  ldmat = arkdls_mem->d_M->ldim;
+
+  SetToZero(arkdls_mem->d_M);
+  retval = arkdls_mem->d_bmass(arkdls_mem->d_n, arkdls_mem->d_mu, 
+			       arkdls_mem->d_ml, ark_mem->ark_tn, 
+			       arkdls_mem->d_M, arkdls_mem->d_M_data, 
+			       tmp1, tmp2, tmp3);
+  arkdls_mem->d_nme++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, ARKDLS_MASSFUNC_UNRECVR, "ARKLAPACK", 
+		    "arkMassLapackBandSetup", MSGD_MASSFUNC_FAILED);
+    arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_UNRECVR;
+    return(-1);
+  } else if (retval > 0) {
+    arkdls_mem->d_last_flag = ARKDLS_MASSFUNC_RECVR;
+    return(1);
+  }
+  
+  /* Do LU factorization of M */
+  dgbtrf_f77(&intn, &intn, &iml, &imu, arkdls_mem->d_M->data, 
+	     &ldmat, arkdls_mem->d_pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  arkdls_mem->d_last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassLapackBandSolve handles the solve operation for the band 
+ mass matrix solver by calling the band backsolve routine.
+---------------------------------------------------------------*/                  
+static int arkMassLapackBandSolve(ARKodeMem ark_mem, N_Vector b, 
+				  N_Vector weight)
+{
+  ARKDlsMassMem arkdls_mem;
+  realtype *bd;
+  int ier, one = 1;
+  int intn, iml, imu, ldmat;
+
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  intn = (int) arkdls_mem->d_n;
+  iml = (int) arkdls_mem->d_ml;
+  imu = (int) arkdls_mem->d_mu;
+  ldmat = arkdls_mem->d_M->ldim;
+  bd = N_VGetArrayPointer(b);
+  dgbtrs_f77("N", &intn, &iml, &imu, &one, arkdls_mem->d_M->data, 
+	     &ldmat, arkdls_mem->d_pivots, bd, &intn, &ier, 1);
+  if (ier > 0) return(1);
+  arkdls_mem->d_last_flag = ARKDLS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassLapackBandFree frees memory specific to the band mass
+ matrix solver.
+---------------------------------------------------------------*/                  
+static int arkMassLapackBandFree(ARKodeMem ark_mem)
+{
+  ARKDlsMassMem arkdls_mem;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+  DestroyMat(arkdls_mem->d_M);
+  DestroyArray(arkdls_mem->d_pivots);
+  free(arkdls_mem); 
+  arkdls_mem = NULL;
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassLapackBandMultiply performs a matrix-vector product, 
+ multiplying the current mass matrix by a given vector.
+---------------------------------------------------------------*/                  
+static int arkMassLapackBandMultiply(N_Vector v, N_Vector Mv, 
+				     realtype t, void *arkode_mem)
+{
+  ARKodeMem ark_mem;
+  ARKDlsMassMem arkdls_mem;
+  realtype *vdata=NULL, *Mvdata=NULL;
+  realtype *Mcol_j;
+  int colSize, s_mu, i, j;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKDLS_MEM_NULL, "ARKLAPACK", 
+		    "arkMassLapackBandMultiply", MSGD_ARKMEM_NULL);
+    return(ARKDLS_MEM_NULL);
+  }
+
+  /* extract the DlsMassMem structure from the user_data pointer */
+  ark_mem = (ARKodeMem) arkode_mem;
+  arkdls_mem = (ARKDlsMassMem) ark_mem->ark_mass_mem;
+
+  /* zero out the result */
+  N_VConst(0.0, Mv);
+
+  /* access the vector arrays (since they must be serial vectors) */
+  vdata = N_VGetArrayPointer(v);
+  Mvdata = N_VGetArrayPointer(Mv);
+  if (vdata == NULL || Mvdata == NULL)
+    return(1);
+
+  /* perform matrix-vector product and return */
+  colSize = arkdls_mem->d_M->mu + arkdls_mem->d_M->ml + 1;
+  s_mu = arkdls_mem->d_M->s_mu;
+  for (j=0; j<arkdls_mem->d_M->M; j++) {
+    Mcol_j = arkdls_mem->d_M->cols[j] + arkdls_mem->d_M->s_mu - arkdls_mem->d_M->mu;
+    for (i=0; i<colSize; i++) 
+      Mvdata[i+j-s_mu] += Mcol_j[i]*vdata[j];
+  }
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+     EOF
+---------------------------------------------------------------*/                  
diff --git a/src/arkode/arkode_pcg.c b/src/arkode/arkode_pcg.c
new file mode 100644
index 0000000..21bf1f3
--- /dev/null
+++ b/src/arkode/arkode_pcg.c
@@ -0,0 +1,772 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *--------------------------------------------------------------
+ * This is the implementation file for the ARKPCG linear solver.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <arkode/arkode_pcg.h>
+#include "arkode_spils_impl.h"
+#include "arkode_impl.h"
+
+#include <sundials/sundials_pcg.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* ARKPCG linit, lsetup, lsolve, and lfree routines */
+static int ARKPcgInit(ARKodeMem ark_mem);
+static int ARKPcgSetup(ARKodeMem ark_mem, int convfail, 
+		       N_Vector ypred, N_Vector fpred, 
+		       booleantype *jcurPtr, N_Vector vtemp1,
+		       N_Vector vtemp2, N_Vector vtemp3);
+static int ARKPcgSolve(ARKodeMem ark_mem, N_Vector b, 
+		       N_Vector weight, N_Vector ynow, 
+		       N_Vector fnow);
+static int ARKPcgFree(ARKodeMem ark_mem);
+
+/* ARKPCG minit, msetup, msolve, and mfree routines */
+static int ARKMassPcgInit(ARKodeMem ark_mem);
+static int ARKMassPcgSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			   N_Vector vtemp2, N_Vector vtemp3);
+static int ARKMassPcgSolve(ARKodeMem ark_mem, N_Vector b, 
+			   N_Vector weight);
+static int ARKMassPcgFree(ARKodeMem ark_mem);
+
+
+/*---------------------------------------------------------------
+ ARKPcg:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the Pcg linear solver module. 
+ ARKPcg first calls the existing lfree routine if this is not 
+ NULL. It then sets the ark_linit, ark_lsetup, ark_lsolve, 
+ ark_lfree fields in (*arkode_mem) to be ARKPcgInit, 
+ ARKPcgSetup, ARKPcgSolve, and ARKPcgFree, respectively. 
+ It allocates memory for a structure of type ARKSpilsMemRec and 
+ sets the ark_lmem field in (*arkode_mem) to the address of 
+ this structure. It sets setupNonNull in (*arkode_mem),
+ and sets various fields in the ARKSpilsMemRec structure.
+ Finally, ARKPcg allocates memory for ytemp and x, and calls
+ PcgMalloc to allocate memory for the Pcg solver.
+---------------------------------------------------------------*/
+int ARKPcg(void *arkode_mem, int pretype, int maxl)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  PcgMem pcg_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKPCG", 
+		    "ARKPcg", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if N_VDotProd and N_VWrmsNorm is present */
+  if ((ark_mem->ark_tempv->ops->nvdotprod == NULL) ||
+      (ark_mem->ark_tempv->ops->nvwrmsnorm == NULL)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKPCG", 
+		    "ARKPcg", MSGS_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree != NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem */
+  ark_mem->ark_linit  = ARKPcgInit;
+  ark_mem->ark_lsetup = ARKPcgSetup;
+  ark_mem->ark_lsolve = ARKPcgSolve;
+  ark_mem->ark_lfree  = ARKPcgFree;
+  ark_mem->ark_lsolve_type = 0;
+
+  /* Get memory for ARKSpilsMemRec */
+  arkspils_mem = NULL;
+  arkspils_mem = (ARKSpilsMem) malloc(sizeof(struct ARKSpilsMemRec));
+  if (arkspils_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKPCG", 
+		    "ARKPcg", MSGS_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  arkspils_mem->s_type = SPILS_PCG;
+
+  /* Set Pcg parameters that have been passed in call sequence */
+  arkspils_mem->s_pretype = pretype;
+  mxl = arkspils_mem->s_maxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fields */
+  arkspils_mem->s_jtimesDQ = TRUE;
+  arkspils_mem->s_jtimes   = NULL;
+  arkspils_mem->s_j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  arkspils_mem->s_pset   = NULL;
+  arkspils_mem->s_psolve = NULL;
+  arkspils_mem->s_pfree  = NULL;
+  arkspils_mem->s_P_data = ark_mem->ark_user_data;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+  arkspils_mem->s_nstlpre = arkspils_mem->s_njtimes = 0;
+  arkspils_mem->s_nfes = 0;
+
+  /* Set default values for the rest of the Pcg parameters */
+  arkspils_mem->s_eplifac   = ARKSPILS_EPLIN;
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  ark_mem->ark_setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKPCG", 
+		    "ARKPcg", MSGS_BAD_PRETYPE);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  arkspils_mem->s_ytemp = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_ytemp == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKPCG", 
+		    "ARKPcg", MSGS_MEM_FAIL);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  arkspils_mem->s_x = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_x == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKPCG", 
+		    "ARKPcg", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, arkspils_mem->s_ytemp);
+  arkspils_mem->s_sqrtN = SUNRsqrt(N_VDotProd(arkspils_mem->s_ytemp, 
+					   arkspils_mem->s_ytemp));
+
+  /* Call PcgMalloc to allocate workspace for Pcg */
+  pcg_mem = NULL;
+  pcg_mem = PcgMalloc(mxl, ark_mem->ark_tempv);
+  if (pcg_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKPCG", 
+		    "ARKPcg", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    N_VDestroy(arkspils_mem->s_x);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* Attach PCG memory to spils memory structure */
+  arkspils_mem->s_spils_mem = (void *) pcg_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_lmem = arkspils_mem;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKPcgInit:
+
+ This routine does remaining initializations specific to the 
+ Pcg linear solver.
+---------------------------------------------------------------*/
+static int ARKPcgInit(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  PcgMem pcg_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  pcg_mem = (PcgMem) arkspils_mem->s_spils_mem;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+  arkspils_mem->s_nstlpre = arkspils_mem->s_njtimes = 0;
+  arkspils_mem->s_nfes = 0;
+
+  /* Check for legal combination pretype - psolve */
+  if ((arkspils_mem->s_pretype != PREC_NONE) && 
+      (arkspils_mem->s_psolve == NULL)) {
+    arkProcessError(ark_mem, -1, "ARKPCG", 
+		    "ARKPcgInit", MSGS_PSOLVE_REQ);
+    arkspils_mem->s_last_flag = ARKSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE)  and there is a preconditioning
+     setup phase (pset != NULL) */
+  ark_mem->ark_setupNonNull = (arkspils_mem->s_pretype != PREC_NONE) 
+    && (arkspils_mem->s_pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (arkspils_mem->s_jtimesDQ) {
+    arkspils_mem->s_jtimes = ARKSpilsDQJtimes;
+    arkspils_mem->s_j_data = ark_mem;
+  } else {
+    arkspils_mem->s_j_data = ark_mem->ark_user_data;
+  }
+
+  /*  Set maxl in the PCG memory in case it was changed by the user */
+  pcg_mem->l_max = arkspils_mem->s_maxl;
+
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKPcgSetup:
+
+ This routine does the setup operations for the Pcg linear 
+ solver. It makes a decision as to whether or not to signal for 
+ reevaluation of Jacobian data in the pset routine, based on 
+ various state variables, then it calls pset. If we signal for 
+ reevaluation, then we reset jcur = *jcurPtr to TRUE, regardless 
+ of the pset output. In any case, if jcur == TRUE, we increment 
+ npe and save nst in nstlpre.
+---------------------------------------------------------------*/
+static int ARKPcgSetup(ARKodeMem ark_mem, int convfail, 
+		       N_Vector ypred, N_Vector fpred, 
+		       booleantype *jcurPtr, N_Vector vtemp1,
+		       N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  ARKSpilsMem arkspils_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arkspils_mem->s_nstlpre + ARKSPILS_MSBPRE) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKSPILS_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = arkspils_mem->s_pset(ark_mem->ark_tn, ypred, fpred, jok, 
+				jcurPtr, ark_mem->ark_gamma, 
+				arkspils_mem->s_P_data, vtemp1, 
+				vtemp2, vtemp3);
+  if (retval < 0) {
+    arkProcessError(ark_mem, PCG_PSET_FAIL_UNREC, "ARKPCG", 
+		    "ARKPcgSetup", MSGS_PSET_FAILED);
+    arkspils_mem->s_last_flag = PCG_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    arkspils_mem->s_last_flag = PCG_PSET_FAIL_REC;
+  }
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    arkspils_mem->s_npe++;
+    arkspils_mem->s_nstlpre = ark_mem->ark_nst;
+  }
+
+  arkspils_mem->s_last_flag = PCG_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKPcgSolve:
+
+ This routine handles the call to the generic solver PcgSolve
+ for the solution of the linear system Ax = b with the PCG 
+ method. The solution x is returned in the vector b.
+
+ If the WRMS norm of b is small, we return x = b (if this is the 
+ first Newton iteration) or x = 0 (if a later Newton iteration).
+
+ Otherwise, we set the tolerance parameter and initial guess 
+ (x = 0), call PcgSolve, and copy the solution x into b. The 
+ x-scaling and b-scaling arrays are both equal to weight.
+
+ The counters nli, nps, and ncfl are incremented, and the return 
+ value is set according to the success of PcgSolve. The 
+ success flag is returned if PcgSolve converged, or if this is 
+ the first Newton iteration and the residual norm was reduced 
+ below its initial value.
+---------------------------------------------------------------*/
+static int ARKPcgSolve(ARKodeMem ark_mem, N_Vector b, 
+		       N_Vector weight, N_Vector ynow, 
+		       N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  ARKSpilsMem arkspils_mem;
+  PcgMem pcg_mem;
+  int nli_inc, nps_inc, retval;
+  
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  pcg_mem = (PcgMem) arkspils_mem->s_spils_mem;
+
+  /* Test norm(b); if small, return x = 0 or x = b */
+  arkspils_mem->s_deltar = arkspils_mem->s_eplifac * ark_mem->ark_eRNrm; 
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= arkspils_mem->s_deltar) {
+    if (ark_mem->ark_mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  arkspils_mem->s_ycur = ynow;
+  arkspils_mem->s_fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to PcgSolve */
+  arkspils_mem->s_delta = arkspils_mem->s_deltar * arkspils_mem->s_sqrtN;
+  N_VConst(ZERO, arkspils_mem->s_x);
+  /* N_VConst(ark_mem->ark_uround, arkspils_mem->s_x); */
+
+  /* Call PcgSolve and copy x to b */
+  retval = PcgSolve(pcg_mem, ark_mem, arkspils_mem->s_x, b, 
+		    arkspils_mem->s_pretype, arkspils_mem->s_delta,
+		    ark_mem, weight, ARKSpilsAtimes, 
+		    ARKSpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+  N_VScale(ONE, arkspils_mem->s_x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  arkspils_mem->s_nli += nli_inc;
+  arkspils_mem->s_nps += nps_inc;
+  if (retval != PCG_SUCCESS) arkspils_mem->s_ncfl++;
+
+  /* Log solver statistics to diagnostics file (if requested) */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "      kry  %19.16g  %19.16g  %i  %i\n", 
+	    bnorm, res_norm, nli_inc, nps_inc);
+  
+  /* Interpret return value from SpbcgSolve */
+  arkspils_mem->s_last_flag = retval;
+
+  switch(retval) {
+
+  case PCG_SUCCESS:
+    return 0;
+    break;
+  case PCG_RES_REDUCED:
+    /* allow reduction but not solution on first Newton iteration, 
+       otherwise return with a recoverable failure */
+    if (ark_mem->ark_mnewt == 0) return(0);
+    else                         return(1);
+    break;
+  case PCG_CONV_FAIL:
+    return 1;
+    break;
+  case PCG_PSOLVE_FAIL_REC:
+    return 1;
+    break;
+  case PCG_ATIMES_FAIL_REC:
+    return 1;
+    break;
+  case PCG_MEM_NULL:
+    return -1;
+    break;
+  case PCG_ATIMES_FAIL_UNREC:
+    arkProcessError(ark_mem, PCG_ATIMES_FAIL_UNREC, "ARKPCG", 
+		    "ARKPcgSolve", MSGS_JTIMES_FAILED);    
+    return -1;
+    break;
+  case PCG_PSOLVE_FAIL_UNREC:
+    arkProcessError(ark_mem, PCG_PSOLVE_FAIL_UNREC, "ARKPCG", 
+		    "ARKPcgSolve", MSGS_PSOLVE_FAILED);
+    return -1;
+    break;
+  }
+
+  return 0;
+}
+
+
+/*---------------------------------------------------------------
+ ARKPcgFree:
+
+ This routine frees memory specific to the Pcg linear solver.
+---------------------------------------------------------------*/
+static int ARKPcgFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  PcgMem pcg_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  N_VDestroy(arkspils_mem->s_ytemp);
+  N_VDestroy(arkspils_mem->s_x);
+
+  pcg_mem = (PcgMem) arkspils_mem->s_spils_mem;
+  PcgFree(pcg_mem);
+
+  if (arkspils_mem->s_pfree != NULL) (arkspils_mem->s_pfree)(ark_mem);
+
+  free(arkspils_mem);
+  ark_mem->ark_lmem = NULL;
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassPcg:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the Pcg mass matrix solver module. 
+ ARKMassPcg first calls the existing mfree routine if this is not 
+ NULL. It then sets the ark_minit, ark_msetup, ark_msolve, 
+ ark_mfree fields in (*arkode_mem) to be ARKMassPcgInit, 
+ ARKMassPcgSetup, ARKMassPcgSolve, and ARKMassPcgFree, 
+ respectively. It sets MassSetupNonNull in (*arkode_mem), 
+ allocates memory for a structure of type ARKSpilsMassMemRec and 
+ sets the ark_mass_mem field in (*arkode_mem) to the address of 
+ this structure.  Finally, ARKMassPcg allocates memory for ytemp 
+ and x, and calls PcgMalloc to allocate memory for the Pcg solver.
+---------------------------------------------------------------*/
+int ARKMassPcg(void *arkode_mem, int pretype, int maxl, 
+	       ARKSpilsMassTimesVecFn mtimes, void *mtimes_data)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+  PcgMem pcg_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKPCG", 
+		    "ARKMassPcg", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if N_VDotProd and N_VWrmsNorm is present */
+  if ((ark_mem->ark_tempv->ops->nvdotprod == NULL) ||
+      (ark_mem->ark_tempv->ops->nvwrmsnorm == NULL)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKPCG", 
+		    "ARKMassPcg", MSGS_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree != NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set four main function fields in ark_mem, enable mass matrix */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = ARKMassPcgInit;
+  ark_mem->ark_msetup = ARKMassPcgSetup;
+  ark_mem->ark_msolve = ARKMassPcgSolve;
+  ark_mem->ark_mfree  = ARKMassPcgFree;
+  ark_mem->ark_msolve_type = 0;
+
+  /* Get memory for ARKSpilsMassMemRec */
+  arkspils_mem = NULL;
+  arkspils_mem = (ARKSpilsMassMem) malloc(sizeof(struct ARKSpilsMassMemRec));
+  if (arkspils_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKPCG", 
+		    "ARKMassPcg", MSGS_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set mass-matrix-vector product routine */
+  ark_mem->ark_mtimes      = mtimes;
+  ark_mem->ark_mtimes_data = mtimes_data;
+
+  /* Set ILS type */
+  arkspils_mem->s_type = SPILS_PCG;
+
+  /* Set Pcg parameters that have been passed in call sequence */
+  arkspils_mem->s_pretype    = pretype;
+  mxl = arkspils_mem->s_maxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+
+  /* Set defaults for preconditioner-related fields */
+  arkspils_mem->s_pset   = NULL;
+  arkspils_mem->s_psolve = NULL;
+  arkspils_mem->s_pfree  = NULL;
+  arkspils_mem->s_P_data = ark_mem->ark_user_data;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli  = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+
+  /* Set default values for the rest of the Pcg parameters */
+  arkspils_mem->s_eplifac       = ARKSPILS_EPLIN;
+  arkspils_mem->s_last_flag     = ARKSPILS_SUCCESS;
+  ark_mem->ark_MassSetupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKPCG", 
+		    "ARKMassPcg", MSGS_BAD_PRETYPE);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  arkspils_mem->s_ytemp = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_ytemp == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKPCG", 
+		    "ARKMassPcg", MSGS_MEM_FAIL);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  arkspils_mem->s_x = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_x == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKPCG", 
+		    "ARKMassPcg", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, arkspils_mem->s_ytemp);
+  arkspils_mem->s_sqrtN = SUNRsqrt(N_VDotProd(arkspils_mem->s_ytemp, 
+					   arkspils_mem->s_ytemp));
+
+  /* Call PcgMalloc to allocate workspace for Pcg */
+  pcg_mem = NULL;
+  pcg_mem = PcgMalloc(mxl, ark_mem->ark_tempv);
+  if (pcg_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKPCG", 
+		    "ARKMassPcg", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    N_VDestroy(arkspils_mem->s_x);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* Attach PCG memory to spils memory structure */
+  arkspils_mem->s_spils_mem = (void *) pcg_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_mass_mem = arkspils_mem;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassPcgInit:
+
+ This routine does remaining initializations specific to the 
+ Pcg linear solver.
+---------------------------------------------------------------*/
+static int ARKMassPcgInit(ARKodeMem ark_mem)
+{
+  ARKSpilsMassMem arkspils_mem;
+  PcgMem pcg_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+  pcg_mem = (PcgMem) arkspils_mem->s_spils_mem;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli  = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+
+  /* Check for legal combination pretype - psolve */
+  if ((arkspils_mem->s_pretype != PREC_NONE) && 
+      (arkspils_mem->s_psolve == NULL)) {
+    arkProcessError(ark_mem, -1, "ARKPCG", 
+		    "ARKMassPcgInit", MSGS_PSOLVE_REQ);
+    arkspils_mem->s_last_flag = ARKSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set MassSetupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE)  and there is a preconditioning
+     setup phase (pset != NULL) */
+  ark_mem->ark_MassSetupNonNull = (arkspils_mem->s_pretype != PREC_NONE) 
+    && (arkspils_mem->s_pset != NULL);
+
+  /* Set maxl in the PCG memory in case it was changed by the user */
+  pcg_mem->l_max = arkspils_mem->s_maxl;
+
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassPcgSetup:
+
+ This routine does the setup operations for the Pcg linear 
+ solver. It makes a decision as to whether or not to signal for 
+ reevaluation of Jacobian data in the pset routine, based on 
+ various state variables, then it calls pset.
+---------------------------------------------------------------*/
+static int ARKMassPcgSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			   N_Vector vtemp2, N_Vector vtemp3)
+{
+  int  retval;
+  ARKSpilsMassMem arkspils_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  /* Call pset routine */
+  retval = arkspils_mem->s_pset(ark_mem->ark_tn, 
+				arkspils_mem->s_P_data, 
+				vtemp1, vtemp2, vtemp3);
+  arkspils_mem->s_npe++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, PCG_PSET_FAIL_UNREC, "ARKPCG", 
+		    "ARKMassPcgSetup", MSGS_PSET_FAILED);
+    arkspils_mem->s_last_flag = PCG_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    arkspils_mem->s_last_flag = PCG_PSET_FAIL_REC;
+  }
+  if (retval == 0) {
+    arkspils_mem->s_last_flag = PCG_SUCCESS;
+  }
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassPcgSolve:
+
+ This routine handles the call to the generic solver PcgSolve
+ for the solution of the mass matrix system Mx = b with the PCG 
+ method. The solution x is returned in the vector b.
+
+ We set the tolerance parameter and initial guess 
+ (x = 0), call PcgSolve, and copy the solution x into b. The 
+ x-scaling and b-scaling arrays are both equal to weight.
+
+ The counters nli, nps, and ncfl are incremented, and the return 
+ value is set according to the success of PcgSolve. The 
+ success flag is returned if PcgSolve converged.
+---------------------------------------------------------------*/
+static int ARKMassPcgSolve(ARKodeMem ark_mem, N_Vector b, 
+			   N_Vector weight)
+{
+  realtype res_norm;
+  ARKSpilsMassMem arkspils_mem;
+  PcgMem pcg_mem;
+  int nli_inc, nps_inc, retval;
+  
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+  pcg_mem = (PcgMem) arkspils_mem->s_spils_mem;
+
+  /* Set inputs delta and initial guess x = 0 to PcgSolve */
+  arkspils_mem->s_deltar = arkspils_mem->s_eplifac * ark_mem->ark_nlscoef; 
+  arkspils_mem->s_delta  = arkspils_mem->s_deltar * arkspils_mem->s_sqrtN;
+  N_VConst(ZERO, arkspils_mem->s_x);
+
+  /* Call PcgSolve and copy x to b */
+  retval = PcgSolve(pcg_mem, ark_mem, arkspils_mem->s_x, b, 
+		    arkspils_mem->s_pretype, arkspils_mem->s_delta,
+		    ark_mem, weight, ARKSpilsMtimes, 
+		    ARKSpilsMPSolve, &res_norm, &nli_inc, &nps_inc);
+  N_VScale(ONE, arkspils_mem->s_x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  arkspils_mem->s_nli += nli_inc;
+  arkspils_mem->s_nps += nps_inc;
+  if (retval != PCG_SUCCESS) arkspils_mem->s_ncfl++;
+
+  /* Log solver statistics to diagnostics file (if requested) */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "      mass  %19.16g  %i  %i\n", 
+	    res_norm, nli_inc, nps_inc);
+  
+  /* Interpret return value from PcgSolve */
+  arkspils_mem->s_last_flag = retval;
+
+  switch(retval) {
+
+  case PCG_SUCCESS:
+    return 0;
+    break;
+  case PCG_RES_REDUCED:
+    return 1;
+    break;
+  case PCG_CONV_FAIL:
+    return 1;
+    break;
+  case PCG_PSOLVE_FAIL_REC:
+    return 1;
+    break;
+  case PCG_ATIMES_FAIL_REC:
+    return 1;
+    break;
+  case PCG_MEM_NULL:
+    return -1;
+    break;
+  case PCG_ATIMES_FAIL_UNREC:
+    arkProcessError(ark_mem, PCG_ATIMES_FAIL_UNREC, "ARKPCG", 
+		    "ARKMassPcgSolve", MSGS_MTIMES_FAILED);
+    return -1;
+    break;
+  case PCG_PSOLVE_FAIL_UNREC:
+    arkProcessError(ark_mem, PCG_PSOLVE_FAIL_UNREC, "ARKPCG", 
+		    "ARKMassPcgSolve", MSGS_PSOLVE_FAILED);
+    return -1;
+    break;
+  }
+
+  return 0;
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassPcgFree:
+
+ This routine frees memory specific to the Pcg linear solver.
+---------------------------------------------------------------*/
+static int ARKMassPcgFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMassMem arkspils_mem;
+  PcgMem pcg_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  N_VDestroy(arkspils_mem->s_ytemp);
+  N_VDestroy(arkspils_mem->s_x);
+
+  pcg_mem = (PcgMem) arkspils_mem->s_spils_mem;
+  PcgFree(pcg_mem);
+
+  if (arkspils_mem->s_pfree != NULL) (arkspils_mem->s_pfree)(ark_mem);
+
+  free(arkspils_mem);
+  ark_mem->ark_mass_mem = NULL;
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+     EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_sparse.c b/src/arkode/arkode_sparse.c
new file mode 100644
index 0000000..c00a0d0
--- /dev/null
+++ b/src/arkode/arkode_sparse.c
@@ -0,0 +1,268 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Implementation file for the generic ARKSLS linear solver module.
+ *---------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "arkode_impl.h"
+#include "arkode_sparse_impl.h"
+#include <sundials/sundials_math.h>
+
+/*===============================================================
+ FUNCTION SPECIFIC CONSTANTS (none)
+===============================================================*/
+
+/*===============================================================
+ EXPORTED FUNCTIONS
+===============================================================*/
+              
+/*---------------------------------------------------------------
+ ARKSlsSetSparseJacFn specifies the sparse Jacobian function.
+---------------------------------------------------------------*/
+int ARKSlsSetSparseJacFn(void *arkode_mem, ARKSlsSparseJacFn jac)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMem arksls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		   "ARKSlsSetSparseJacFn", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSLS_LMEM_NULL, "ARKSLS", 
+		    "ARKSlsSetSparseJacFn", MSGSP_LMEM_NULL);
+    return(ARKSLS_LMEM_NULL);
+  }
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+
+  arksls_mem->s_Jeval = jac;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSlsSetSparseMassFn specifies the sparse mass matrix function.
+---------------------------------------------------------------*/
+int ARKSlsSetSparseMassFn(void *arkode_mem, ARKSlsSparseMassFn mass)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMassMem arksls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		   "ARKSlsSetSparseMassFn", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MASSMEM_NULL, "ARKSLS", 
+		    "ARKSlsSetSparseMassFn", MSGSP_MASSMEM_NULL);
+    return(ARKSLS_MASSMEM_NULL);
+  }
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+
+  arksls_mem->s_Meval = mass;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSlsGetNumJacEvals returns the number of Jacobian evaluations.
+---------------------------------------------------------------*/
+int ARKSlsGetNumJacEvals(void *arkode_mem, long int *njevals)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMem arksls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		   "ARKSlsGetNumJacEvals", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSLS_LMEM_NULL, "ARKSLS", 
+		    "ARKSlsGetNumJacEvals", MSGSP_LMEM_NULL);
+    return(ARKSLS_LMEM_NULL);
+  }
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+
+  *njevals = arksls_mem->s_nje;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+
+/*---------------------------------------------------------------
+ ARKSlsGetNumMassEvals returns the number of mass matrix evaluations.
+---------------------------------------------------------------*/
+int ARKSlsGetNumMassEvals(void *arkode_mem, long int *nmevals)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMassMem arksls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		   "ARKSlsGetNumMassEvals", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MASSMEM_NULL, "ARKSLS", 
+		    "ARKSlsGetNumMassEvals", MSGSP_MASSMEM_NULL);
+    return(ARKSLS_MASSMEM_NULL);
+  }
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+
+  *nmevals = arksls_mem->s_nme;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSlsGetReturnFlagName returns the name associated with a 
+ ARKSLS return value.
+---------------------------------------------------------------*/
+char *ARKSlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case ARKSLS_SUCCESS:
+    sprintf(name,"ARKSLS_SUCCESS");
+    break;   
+  case ARKSLS_MEM_NULL:
+    sprintf(name,"ARKSLS_MEM_NULL");
+    break;
+  case ARKSLS_LMEM_NULL:
+    sprintf(name,"ARKSLS_LMEM_NULL");
+    break;
+  case ARKSLS_ILL_INPUT:
+    sprintf(name,"ARKSLS_ILL_INPUT");
+    break;
+  case ARKSLS_MEM_FAIL:
+    sprintf(name,"ARKSLS_MEM_FAIL");
+    break;
+  case ARKSLS_JAC_NOSET:
+    sprintf(name,"ARKSLS_JAC_NOSET");
+    break;
+  case ARKSLS_PACKAGE_FAIL:
+    sprintf(name,"ARKSLS_PACKAGE_FAIL");
+    break;
+  case ARKSLS_MASSMEM_NULL:
+    sprintf(name,"ARKSLS_MASSMEM_NULL");
+    break;
+  case ARKSLS_JACFUNC_UNRECVR:
+    sprintf(name,"ARKSLS_JACFUNC_UNRECVR");
+    break;
+  case ARKSLS_JACFUNC_RECVR:
+    sprintf(name,"ARKSLS_JACFUNC_RECVR");
+    break;
+  case ARKSLS_MASSFUNC_UNRECVR:
+    sprintf(name,"ARKSLS_MASSFUNC_UNRECVR");
+    break;
+  case ARKSLS_MASSFUNC_RECVR:
+    sprintf(name,"ARKSLS_MASSFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSlsGetLastFlag returns the last flag set in a ARKSLS function.
+---------------------------------------------------------------*/
+int ARKSlsGetLastFlag(void *arkode_mem, long int *flag)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMem arksls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "ARKSlsGetLastFlag", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSLS_LMEM_NULL, "ARKSLS", 
+		    "ARKSlsGetLastFlag", MSGSP_LMEM_NULL);
+    return(ARKSLS_LMEM_NULL);
+  }
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+
+  *flag = arksls_mem->s_last_flag;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSlsGetLastMassFlag returns the last flag set in a ARKSLS mass
+ matrix function.
+---------------------------------------------------------------*/
+int ARKSlsGetLastMassFlag(void *arkode_mem, long int *flag)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMassMem arksls_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "ARKSlsGetLastMassFlag", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MASSMEM_NULL, "ARKSLS", 
+		    "ARKSlsGetLastMassFlag", MSGSP_MASSMEM_NULL);
+    return(ARKSLS_MASSMEM_NULL);
+  }
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+
+  *flag = arksls_mem->s_last_flag;
+
+  return(ARKSLS_SUCCESS);
+}
+
+/*---------------------------------------------------------------
+    EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_sparse_impl.h b/src/arkode/arkode_sparse_impl.h
new file mode 100644
index 0000000..331bd78
--- /dev/null
+++ b/src/arkode/arkode_sparse_impl.h
@@ -0,0 +1,127 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Implementation header file for the generic ARKSLS linear solver 
+ * module.
+ *---------------------------------------------------------------*/
+
+#ifndef _ARKSPARSE_IMPL_H
+#define _ARKSPARSE_IMPL_H
+
+#include "arkode/arkode_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------
+ ARKSLS solver constants:
+
+ ARKS_MSBJ   maximum number of steps between Jacobian evaluations
+ ARKS_DGMAX  maximum change in gamma between Jacobian evaluations
+---------------------------------------------------------------*/
+#define ARKS_MSBJ  50
+#define ARKS_DGMAX RCONST(0.2)
+
+ 
+/*---------------------------------------------------------------
+ Types: ARKSlsMemRec, ARKSlsMem
+
+ ARKSlsMem is pointer to a ARKSlsMemRec structure.
+---------------------------------------------------------------*/
+
+typedef struct ARKSlsMemRec {
+
+  ARKSlsSparseJacFn s_Jeval; /* user Jacobian evaluation routine 
+                                to be called                   */
+  void *s_Jdata;             /* user data passed to s_Jeval    */
+
+  long int s_nje;            /* nje = no. of calls to s_Jeval  */
+
+  long int s_last_flag;      /* last error return flag         */
+
+  int s_first_factorize;     /* flag telling whether the first 
+			        factorization needs to happen  */
+
+  int s_nstlj;               /* time step of last J evaluation */
+
+  SlsMat s_A;                /* A = M - gamma * df/dy          */
+
+  SlsMat s_savedJ;           /* saved copy of Jacobian         */
+
+  int sparsetype;            /* matrix type: compressed sparse column or row */
+
+  void *s_solver_data;       /* struct for solver data         */
+
+} *ARKSlsMem;
+
+
+/*---------------------------------------------------------------
+ Types: ARKSlsMassMemRec, ARKSlsMassMem
+
+ ARKSlsMassMem is pointer to a ARKSlsMassMemRec structure.
+---------------------------------------------------------------*/
+
+typedef struct ARKSlsMassMemRec {
+
+  ARKSlsSparseMassFn s_Meval; /* user mass matrix evaluation 
+                                    routine to be called       */
+  void *s_Mdata;              /* user data passed to s_Meval   */
+
+  long int s_nme;             /* nme = no. of calls to s_Meval */
+
+  long int s_last_flag;       /* last error return flag        */
+
+  int s_first_factorize;      /* flag telling whether the first 
+			         factorization needs to happen */
+
+  SlsMat s_M;                 /* mass matrix structure         */
+
+  SlsMat s_M_lu;              /* mass matrix for LU decomp     */
+
+  int sparsetype;             /* matrix type: compressed sparse column or row */
+
+  void *s_solver_data;        /* struct for solver data        */
+
+} *ARKSlsMassMem;
+
+
+/*---------------------------------------------------------------
+ Prototypes of internal functions (none)
+---------------------------------------------------------------*/
+  
+
+/*---------------------------------------------------------------
+ Error Messages
+---------------------------------------------------------------*/
+#define MSGSP_ARKMEM_NULL     "Integrator memory is NULL."
+#define MSGSP_BAD_NVECTOR     "A required vector operation is not implemented."
+#define MSGSP_MEM_FAIL        "A memory request failed."
+#define MSGSP_LMEM_NULL       "Linear solver memory is NULL."
+#define MSGSP_MASSMEM_NULL    "Mass matrix solver memory is NULL."
+#define MSGSP_ILL_INPUT       "Invalid input detected."
+#define MSGSP_JAC_NOSET       "Jacobian evaluation function has not been set."
+#define MSGSP_MASS_NOSET      "Mass matrix evaluation function has not been set."
+#define MSGSP_JACFUNC_FAILED  "The Jacobian routine failed in an unrecoverable manner."
+#define MSGSP_MASSFUNC_FAILED "The mass matrix routine failed in an unrecoverable manner."
+#define MSGSP_PACKAGE_FAIL    "A call to an external package failed."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/arkode/arkode_spbcgs.c b/src/arkode/arkode_spbcgs.c
new file mode 100644
index 0000000..6bbed59
--- /dev/null
+++ b/src/arkode/arkode_spbcgs.c
@@ -0,0 +1,766 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for the ARKSPBCG linear solver.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <arkode/arkode_spbcgs.h>
+#include "arkode_spils_impl.h"
+#include "arkode_impl.h"
+
+#include <sundials/sundials_spbcgs.h>
+#include <sundials/sundials_math.h>
+
+
+/* Constants */
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* ARKSPBCG linit, lsetup, lsolve, and lfree routines */
+static int ARKSpbcgInit(ARKodeMem ark_mem);
+static int ARKSpbcgSetup(ARKodeMem ark_mem, int convfail, 
+			 N_Vector ypred, N_Vector fpred, 
+			 booleantype *jcurPtr, N_Vector vtemp1,
+			 N_Vector vtemp2, N_Vector vtemp3);
+static int ARKSpbcgSolve(ARKodeMem ark_mem, N_Vector b, 
+			 N_Vector weight, N_Vector ynow, 
+			 N_Vector fnow);
+static int ARKSpbcgFree(ARKodeMem ark_mem);
+
+/* ARKSPBCG minit, msetup, msolve, and mfree routines */
+static int ARKMassSpbcgInit(ARKodeMem ark_mem);
+static int ARKMassSpbcgSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			     N_Vector vtemp2, N_Vector vtemp3);
+static int ARKMassSpbcgSolve(ARKodeMem ark_mem, N_Vector b, 
+			     N_Vector weight);
+static int ARKMassSpbcgFree(ARKodeMem ark_mem);
+
+
+/*---------------------------------------------------------------
+ ARKSpbcg:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the Spbcg linear solver module. 
+ ARKSpbcg first calls the existing lfree routine if this is not 
+ NULL. It then sets the ark_linit, ark_lsetup, ark_lsolve, 
+ ark_lfree fields in (*arkode_mem) to be ARKSpbcgInit, 
+ ARKSpbcgSetup, ARKSpbcgSolve, and ARKSpbcgFree, respectively. 
+ It allocates memory for a structure of type ARKSpilsMemRec and 
+ sets the ark_lmem field in (*arkode_mem) to the address of 
+ this structure. It sets setupNonNull in (*arkode_mem),
+ and sets various fields in the ARKSpilsMemRec structure.
+ Finally, ARKSpbcg allocates memory for ytemp and x, and calls
+ SpbcgMalloc to allocate memory for the Spbcg solver.
+---------------------------------------------------------------*/
+int ARKSpbcg(void *arkode_mem, int pretype, int maxl)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  SpbcgMem spbcg_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPBCG", 
+		    "ARKSpbcg", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if N_VDotProd and N_VProd are present */
+  if ((ark_mem->ark_tempv->ops->nvdotprod == NULL) ||
+      (ark_mem->ark_tempv->ops->nvprod == NULL)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPBCG", 
+		    "ARKSpbcg", MSGS_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree != NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem */
+  ark_mem->ark_linit  = ARKSpbcgInit;
+  ark_mem->ark_lsetup = ARKSpbcgSetup;
+  ark_mem->ark_lsolve = ARKSpbcgSolve;
+  ark_mem->ark_lfree  = ARKSpbcgFree;
+  ark_mem->ark_lsolve_type = 0;
+
+  /* Get memory for ARKSpilsMemRec */
+  arkspils_mem = NULL;
+  arkspils_mem = (ARKSpilsMem) malloc(sizeof(struct ARKSpilsMemRec));
+  if (arkspils_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPBCG", 
+		    "ARKSpbcg", MSGS_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  arkspils_mem->s_type = SPILS_SPBCG;
+
+  /* Set Spbcg parameters that have been passed in call sequence */
+  arkspils_mem->s_pretype = pretype;
+  mxl = arkspils_mem->s_maxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fields */
+  arkspils_mem->s_jtimesDQ = TRUE;
+  arkspils_mem->s_jtimes   = NULL;
+  arkspils_mem->s_j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  arkspils_mem->s_pset   = NULL;
+  arkspils_mem->s_psolve = NULL;
+  arkspils_mem->s_pfree  = NULL;
+  arkspils_mem->s_P_data = ark_mem->ark_user_data;
+
+  /* Initialize counters */
+  arkSpilsInitializeCounters(arkspils_mem);
+
+  /* Set default values for the rest of the Spbcg parameters */
+  arkspils_mem->s_eplifac = ARKSPILS_EPLIN;
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  ark_mem->ark_setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPBCG", 
+		    "ARKSpbcg", MSGS_BAD_PRETYPE);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  arkspils_mem->s_ytemp = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_ytemp == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPBCG", 
+		    "ARKSpbcg", MSGS_MEM_FAIL);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  arkspils_mem->s_x = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_x == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPBCG", 
+		    "ARKSpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, arkspils_mem->s_ytemp);
+  arkspils_mem->s_sqrtN = SUNRsqrt(N_VDotProd(arkspils_mem->s_ytemp, 
+					   arkspils_mem->s_ytemp));
+
+  /* Call SpbcgMalloc to allocate workspace for Spbcg */
+  spbcg_mem = NULL;
+  spbcg_mem = SpbcgMalloc(mxl, ark_mem->ark_tempv);
+  if (spbcg_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPBCG", 
+		    "ARKSpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    N_VDestroy(arkspils_mem->s_x);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPBCG memory to spils memory structure */
+  arkspils_mem->s_spils_mem = (void *) spbcg_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_lmem = arkspils_mem;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpbcgInit:
+
+ This routine does remaining initializations specific to the 
+ Spbcg linear solver.
+---------------------------------------------------------------*/
+static int ARKSpbcgInit(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  SpbcgMem spbcg_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  spbcg_mem = (SpbcgMem) arkspils_mem->s_spils_mem;
+
+  /* Initialize counters */
+  arkSpilsInitializeCounters(arkspils_mem);
+
+  /* Check for legal combination pretype - psolve */
+  if ((arkspils_mem->s_pretype != PREC_NONE) && 
+      (arkspils_mem->s_psolve == NULL)) {
+    arkProcessError(ark_mem, -1, "ARKSPBCG", 
+                    "ARKSpbcgInit", MSGS_PSOLVE_REQ);
+    arkspils_mem->s_last_flag = ARKSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE)  and there is a preconditioning
+     setup phase (pset != NULL) */
+  ark_mem->ark_setupNonNull = (arkspils_mem->s_pretype != PREC_NONE) 
+    && (arkspils_mem->s_pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (arkspils_mem->s_jtimesDQ) {
+    arkspils_mem->s_jtimes = ARKSpilsDQJtimes;
+    arkspils_mem->s_j_data = ark_mem;
+  } else {
+    arkspils_mem->s_j_data = ark_mem->ark_user_data;
+  }
+
+  /*  Set maxl in the SPBCG memory in case it was changed by the user */
+  spbcg_mem->l_max  = arkspils_mem->s_maxl;
+
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpbcgSetup:
+
+ This routine does the setup operations for the Spbcg linear 
+ solver. It makes a decision as to whether or not to signal for 
+ reevaluation of Jacobian data in the pset routine, based on 
+ various state variables, then it calls pset. If we signal for 
+ reevaluation, then we reset jcur = *jcurPtr to TRUE, regardless 
+ of the pset output. In any case, if jcur == TRUE, we increment 
+ npe and save nst in nstlpre.
+---------------------------------------------------------------*/
+static int ARKSpbcgSetup(ARKodeMem ark_mem, int convfail, 
+			 N_Vector ypred, N_Vector fpred, 
+			 booleantype *jcurPtr, N_Vector vtemp1,
+			 N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  ARKSpilsMem arkspils_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arkspils_mem->s_nstlpre + ARKSPILS_MSBPRE) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKSPILS_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = arkspils_mem->s_pset(ark_mem->ark_tn, ypred, fpred, jok, 
+				jcurPtr, ark_mem->ark_gamma, 
+				arkspils_mem->s_P_data, vtemp1, 
+				vtemp2, vtemp3);
+  if (retval < 0) {
+    arkProcessError(ark_mem, SPBCG_PSET_FAIL_UNREC, "ARKSPBCG", 
+		    "ARKSpbcgSetup", MSGS_PSET_FAILED);
+    arkspils_mem->s_last_flag = SPBCG_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    arkspils_mem->s_last_flag = SPBCG_PSET_FAIL_REC;
+  }
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    arkspils_mem->s_npe++;
+    arkspils_mem->s_nstlpre = ark_mem->ark_nst;
+  }
+
+  arkspils_mem->s_last_flag = SPBCG_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpbcgSolve:
+
+ This routine handles the call to the generic solver SpbcgSolve
+ for the solution of the linear system Ax = b with the SPBCG 
+ method. The solution x is returned in the vector b.
+
+ If the WRMS norm of b is small, we return x = b (if this is the 
+ first Newton iteration) or x = 0 (if a later Newton iteration).
+
+ Otherwise, we set the tolerance parameter and initial guess 
+ (x = 0), call SpbcgSolve, and copy the solution x into b. The 
+ x-scaling and b-scaling arrays are both equal to weight.
+
+ The counters nli, nps, and ncfl are incremented, and the return 
+ value is set according to the success of SpbcgSolve. The 
+ success flag is returned if SpbcgSolve converged, or if this is 
+ the first Newton iteration and the residual norm was reduced 
+ below its initial value.
+---------------------------------------------------------------*/
+static int ARKSpbcgSolve(ARKodeMem ark_mem, N_Vector b, 
+			 N_Vector weight, N_Vector ynow, 
+			 N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  ARKSpilsMem arkspils_mem;
+  SpbcgMem spbcg_mem;
+  int nli_inc, nps_inc, retval;
+  
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  spbcg_mem = (SpbcgMem) arkspils_mem->s_spils_mem;
+
+  /* Test norm(b); if small, return x = 0 or x = b */
+  arkspils_mem->s_deltar = arkspils_mem->s_eplifac * ark_mem->ark_eRNrm; 
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= arkspils_mem->s_deltar) {
+    if (ark_mem->ark_mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  arkspils_mem->s_ycur = ynow;
+  arkspils_mem->s_fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to SpbcgSolve */  
+  arkspils_mem->s_delta = arkspils_mem->s_deltar * arkspils_mem->s_sqrtN;
+  N_VConst(ZERO, arkspils_mem->s_x);
+  
+  /* Call SpbcgSolve and copy x to b */
+  retval = SpbcgSolve(spbcg_mem, ark_mem, arkspils_mem->s_x, b, 
+		      arkspils_mem->s_pretype, arkspils_mem->s_delta,
+		      ark_mem, weight, weight, ARKSpilsAtimes, 
+		      ARKSpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+  N_VScale(ONE, arkspils_mem->s_x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  arkspils_mem->s_nli += nli_inc;
+  arkspils_mem->s_nps += nps_inc;
+  if (retval != SPBCG_SUCCESS) arkspils_mem->s_ncfl++;
+
+  /* Log solver statistics to diagnostics file (if requested) */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "      kry  %19.16g  %19.16g  %i  %i\n", 
+	    bnorm, res_norm, nli_inc, nps_inc);
+  
+  /* Interpret return value from SpbcgSolve */
+  arkspils_mem->s_last_flag = retval;
+
+  switch(retval) {
+
+  case SPBCG_SUCCESS:
+    return(0);
+    break;
+  case SPBCG_RES_REDUCED:
+    /* allow reduction but not solution on first Newton iteration, 
+       otherwise return with a recoverable failure */
+    if (ark_mem->ark_mnewt == 0) return(0);
+    else                         return(1);
+    break;
+  case SPBCG_CONV_FAIL:
+    return(1);
+    break;
+  case SPBCG_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_MEM_NULL:
+    return(-1);
+    break;
+  case SPBCG_ATIMES_FAIL_UNREC:
+    arkProcessError(ark_mem, SPBCG_ATIMES_FAIL_UNREC, "ARKSPBCG", 
+		    "ARKSpbcgSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPBCG_PSOLVE_FAIL_UNREC:
+    arkProcessError(ark_mem, SPBCG_PSOLVE_FAIL_UNREC, "ARKSPBCG", 
+		    "ARKSpbcgSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpbcgFree:
+
+ This routine frees memory specific to the Spbcg linear solver.
+---------------------------------------------------------------*/
+static int ARKSpbcgFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  SpbcgMem spbcg_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  N_VDestroy(arkspils_mem->s_ytemp);
+  N_VDestroy(arkspils_mem->s_x);
+
+  spbcg_mem = (SpbcgMem) arkspils_mem->s_spils_mem;
+  SpbcgFree(spbcg_mem);
+
+  if (arkspils_mem->s_pfree != NULL) (arkspils_mem->s_pfree)(ark_mem);
+
+  free(arkspils_mem);
+  ark_mem->ark_lmem = NULL;
+
+  return(0);
+}
+
+
+
+
+/*---------------------------------------------------------------
+ ARKMassSpbcg:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the Spbcg mass matrix solver module. 
+ ARKMassSpbcg first calls the existing mfree routine if this is 
+ not NULL. It then sets the ark_minit, ark_msetup, ark_msolve, 
+ ark_mfree fields in (*arkode_mem) to be ARKMassSpbcgInit, 
+ ARKMassSpbcgSetup, ARKMassSpbcgSolve, and ARKMassSpbcgFree, 
+ respectively. It allocates memory for a structure of type 
+ ARKSpilsMassMemRec and sets the ark_mass_mem field in
+ (*arkode_mem) to the address of this structure. It sets 
+ MassSetupNonNull in (*arkode_mem), and sets various fields in
+ the ARKSpilsMassMemRec structure, allocates memory for ytemp 
+ and x, and calls SpbcgMalloc to allocate memory for the Spbcg 
+ solver.
+---------------------------------------------------------------*/
+int ARKMassSpbcg(void *arkode_mem, int pretype, int maxl, 
+		 ARKSpilsMassTimesVecFn mtimes, void *mtimes_data)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+  SpbcgMem spbcg_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPBCG", 
+		    "ARKMassSpbcg", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if N_VDotProd is present */
+  if (ark_mem->ark_tempv->ops->nvdotprod == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPBCG", 
+		    "ARKMassSpbcg", MSGS_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree != NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set four main function fields in ark_mem, enable mass matrix */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = ARKMassSpbcgInit;
+  ark_mem->ark_msetup = ARKMassSpbcgSetup;
+  ark_mem->ark_msolve = ARKMassSpbcgSolve;
+  ark_mem->ark_mfree  = ARKMassSpbcgFree;
+  ark_mem->ark_msolve_type = 0;
+
+  /* Get memory for ARKSpilsMassMemRec */
+  arkspils_mem = NULL;
+  arkspils_mem = (ARKSpilsMassMem) malloc(sizeof(struct ARKSpilsMassMemRec));
+  if (arkspils_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPBCG", 
+		    "ARKMassSpbcg", MSGS_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set mass-matrix-vector product routine */
+  ark_mem->ark_mtimes      = mtimes;
+  ark_mem->ark_mtimes_data = mtimes_data;
+
+  /* Set ILS type */
+  arkspils_mem->s_type = SPILS_SPBCG;
+
+  /* Set Spbcg parameters that have been passed in call sequence */
+  arkspils_mem->s_pretype    = pretype;
+  mxl = arkspils_mem->s_maxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+
+  /* Set defaults for preconditioner-related fields */
+  arkspils_mem->s_pset   = NULL;
+  arkspils_mem->s_psolve = NULL;
+  arkspils_mem->s_pfree  = NULL;
+  arkspils_mem->s_P_data = ark_mem->ark_user_data;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli  = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+
+  /* Set default values for the rest of the Spbcg parameters */
+  arkspils_mem->s_eplifac       = ARKSPILS_EPLIN;
+  arkspils_mem->s_last_flag     = ARKSPILS_SUCCESS;
+  ark_mem->ark_MassSetupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPBCG", 
+		    "ARKMassSpbcg", MSGS_BAD_PRETYPE);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  arkspils_mem->s_ytemp = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_ytemp == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPBCG", 
+		    "ARKMassSpbcg", MSGS_MEM_FAIL);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  arkspils_mem->s_x = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_x == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPBCG", 
+		    "ARKMassSpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, arkspils_mem->s_ytemp);
+  arkspils_mem->s_sqrtN = SUNRsqrt(N_VDotProd(arkspils_mem->s_ytemp, 
+					   arkspils_mem->s_ytemp));
+
+  /* Call SpbcgMalloc to allocate workspace for Spbcg */
+  spbcg_mem = NULL;
+  spbcg_mem = SpbcgMalloc(mxl, ark_mem->ark_tempv);
+  if (spbcg_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPBCG", 
+		    "ARKMassSpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    N_VDestroy(arkspils_mem->s_x);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPBCG memory to spils memory structure */
+  arkspils_mem->s_spils_mem = (void *) spbcg_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_mass_mem = arkspils_mem;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpbcgInit:
+
+ This routine does remaining initializations specific to the 
+ Spbcg linear solver.
+---------------------------------------------------------------*/
+static int ARKMassSpbcgInit(ARKodeMem ark_mem)
+{
+  ARKSpilsMassMem arkspils_mem;
+  SpbcgMem spbcg_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+  spbcg_mem = (SpbcgMem) arkspils_mem->s_spils_mem;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli  = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+
+  /* Check for legal combination pretype - psolve */
+  if ((arkspils_mem->s_pretype != PREC_NONE) && 
+      (arkspils_mem->s_psolve == NULL)) {
+    arkProcessError(ark_mem, -1, "ARKSPBCG", 
+		    "ARKMassSpbcgInit", MSGS_PSOLVE_REQ);
+    arkspils_mem->s_last_flag = ARKSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set MassSetupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE)  and there is a preconditioning
+     setup phase (pset != NULL) */
+  ark_mem->ark_MassSetupNonNull = (arkspils_mem->s_pretype != PREC_NONE) 
+    && (arkspils_mem->s_pset != NULL);
+
+  /*  Set maxl in the SPBCG memory in case it was changed by the user */
+  spbcg_mem->l_max = arkspils_mem->s_maxl;
+
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpbcgSetup:
+
+ This routine does the setup operations for the Spbcg mass matrix 
+ solver. It calls pset and increments npe.
+---------------------------------------------------------------*/
+static int ARKMassSpbcgSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			     N_Vector vtemp2, N_Vector vtemp3)
+{
+  int  retval;
+  ARKSpilsMassMem arkspils_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  /* Call pset routine */
+  retval = arkspils_mem->s_pset(ark_mem->ark_tn, 
+				arkspils_mem->s_P_data, 
+				vtemp1, vtemp2, vtemp3);
+  arkspils_mem->s_npe++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, SPBCG_PSET_FAIL_UNREC, "ARKSPBCG", 
+		    "ARKMassSpbcgSetup", MSGS_PSET_FAILED);
+    arkspils_mem->s_last_flag = SPBCG_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    arkspils_mem->s_last_flag = SPBCG_PSET_FAIL_REC;
+  }
+  if (retval == 0) {
+    arkspils_mem->s_last_flag = SPBCG_SUCCESS;
+  }
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpbcgSolve:
+
+ This routine handles the call to the generic solver SpbcgSolve
+ for the solution of the mass matrix system Mx = b with the SPBCG 
+ method. The solution x is returned in the vector b.
+
+ We set the tolerance parameter and initial guess (x = 0), call
+ SpbcgSolve, and copy the solution x into b. The 
+ x-scaling and b-scaling arrays are both equal to weight.
+
+ The counters nli, nps, and ncfl are incremented, and the return 
+ value is set according to the success of SpbcgSolve.
+---------------------------------------------------------------*/
+static int ARKMassSpbcgSolve(ARKodeMem ark_mem, N_Vector b, 
+			     N_Vector weight)
+{
+  realtype res_norm;
+  ARKSpilsMassMem arkspils_mem;
+  SpbcgMem spbcg_mem;
+  int nli_inc, nps_inc, retval;
+  
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+  spbcg_mem = (SpbcgMem) arkspils_mem->s_spils_mem;
+
+  /* Set inputs delta and initial guess x = 0 to SpbcgSolve */  
+  arkspils_mem->s_deltar = arkspils_mem->s_eplifac * ark_mem->ark_nlscoef; 
+  arkspils_mem->s_delta  = arkspils_mem->s_deltar * arkspils_mem->s_sqrtN;
+  N_VConst(ZERO, arkspils_mem->s_x);
+  
+  /* Call SpbcgSolve and copy x to b */
+  retval = SpbcgSolve(spbcg_mem, ark_mem, arkspils_mem->s_x, b, 
+		      arkspils_mem->s_pretype, arkspils_mem->s_delta,
+		      ark_mem, weight, weight, ARKSpilsMtimes, 
+		      ARKSpilsMPSolve, &res_norm, &nli_inc, &nps_inc);
+  N_VScale(ONE, arkspils_mem->s_x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  arkspils_mem->s_nli += nli_inc;
+  arkspils_mem->s_nps += nps_inc;
+  if (retval != SPBCG_SUCCESS) arkspils_mem->s_ncfl++;
+
+  /* Log solver statistics to diagnostics file (if requested) */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "      mass  %19.16g  %i  %i\n", 
+	    res_norm, nli_inc, nps_inc);
+  
+  /* Interpret return value from SpbcgSolve */
+  arkspils_mem->s_last_flag = retval;
+
+  switch(retval) {
+
+  case SPBCG_SUCCESS:
+    return(0);
+    break;
+  case SPBCG_RES_REDUCED:
+    return(1);
+    break;
+  case SPBCG_CONV_FAIL:
+    return(1);
+    break;
+  case SPBCG_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_MEM_NULL:
+    return(-1);
+    break;
+  case SPBCG_ATIMES_FAIL_UNREC:
+    arkProcessError(ark_mem, SPBCG_ATIMES_FAIL_UNREC, "ARKSPBCG", 
+		    "ARKMassSpbcgSolve", MSGS_MTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPBCG_PSOLVE_FAIL_UNREC:
+    arkProcessError(ark_mem, SPBCG_PSOLVE_FAIL_UNREC, "ARKSPBCG", 
+		    "ARKMassSpbcgSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpbcgFree:
+
+ This routine frees memory specific to the Spbcg mass matrix solver.
+---------------------------------------------------------------*/
+static int ARKMassSpbcgFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMassMem arkspils_mem;
+  SpbcgMem spbcg_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  N_VDestroy(arkspils_mem->s_ytemp);
+  N_VDestroy(arkspils_mem->s_x);
+
+  spbcg_mem = (SpbcgMem) arkspils_mem->s_spils_mem;
+  SpbcgFree(spbcg_mem);
+
+  if (arkspils_mem->s_pfree != NULL) (arkspils_mem->s_pfree)(ark_mem);
+
+  free(arkspils_mem);
+  ark_mem->ark_mass_mem = NULL;
+  
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+     EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_spfgmr.c b/src/arkode/arkode_spfgmr.c
new file mode 100644
index 0000000..4b7932d
--- /dev/null
+++ b/src/arkode/arkode_spfgmr.c
@@ -0,0 +1,777 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for the ARKSPFGMR linear solver.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <arkode/arkode_spfgmr.h>
+#include "arkode_spils_impl.h"
+#include "arkode_impl.h"
+
+#include <sundials/sundials_spfgmr.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* ARKSPFGMR linit, lsetup, lsolve, and lfree routines */
+static int ARKSpfgmrInit(ARKodeMem ark_mem);
+static int ARKSpfgmrSetup(ARKodeMem ark_mem, int convfail, 
+			  N_Vector ypred, N_Vector fpred, 
+			  booleantype *jcurPtr, N_Vector vtemp1,
+			  N_Vector vtemp2, N_Vector vtemp3);
+static int ARKSpfgmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			  N_Vector weight, N_Vector ynow, 
+			  N_Vector fnow);
+static int ARKSpfgmrFree(ARKodeMem ark_mem);
+
+/* ARKSPFGMR minit, msetup, msolve, and mfree routines */
+static int ARKMassSpfgmrInit(ARKodeMem ark_mem);
+static int ARKMassSpfgmrSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			      N_Vector vtemp2, N_Vector vtemp3);
+static int ARKMassSpfgmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			      N_Vector weight);
+static int ARKMassSpfgmrFree(ARKodeMem ark_mem);
+
+
+/*---------------------------------------------------------------
+ ARKSpfgmr:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the Spfgmr linear solver module. 
+ ARKSpfgmr first calls the existing lfree routine if this is not 
+ NULL.  It then sets the ark_linit, ark_lsetup, ark_lsolve, 
+ ark_lfree fields in (*arkode_mem) to be ARKSpfgmrInit, 
+ ARKSpfgmrSetup, ARKSpfgmrSolve, and ARKSpfgmrFree, respectively.  
+ It allocates memory for a structure of type ARKSpilsMemRec and
+ sets the ark_lmem field in (*arkode_mem) to the address of this
+ structure.  It sets setupNonNull in (*arkode_mem), and sets 
+ various fields in the ARKSpilsMemRec structure. Finally, 
+ ARKSpfgmr allocates memory for ytemp and x, and calls
+ SpfgmrMalloc to allocate memory for the Spfgmr solver.
+---------------------------------------------------------------*/
+int ARKSpfgmr(void *arkode_mem, int pretype, int maxl)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  SpfgmrMem spfgmr_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPFGMR", 
+		    "ARKSpfgmr", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if N_VDotProd and N_VProd are present */
+  if ((ark_mem->ark_tempv->ops->nvdotprod == NULL) ||
+      (ark_mem->ark_tempv->ops->nvprod == NULL)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPFGMR", 
+		    "ARKSpfgmr", MSGS_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree != NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem */
+  ark_mem->ark_linit  = ARKSpfgmrInit;
+  ark_mem->ark_lsetup = ARKSpfgmrSetup;
+  ark_mem->ark_lsolve = ARKSpfgmrSolve;
+  ark_mem->ark_lfree  = ARKSpfgmrFree;
+  ark_mem->ark_lsolve_type = 0;
+
+  /* Get memory for ARKSpilsMemRec */
+  arkspils_mem = NULL;
+  arkspils_mem = (ARKSpilsMem) malloc(sizeof(struct ARKSpilsMemRec));
+  if (arkspils_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPFGMR", 
+		    "ARKSpfgmr", MSGS_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  arkspils_mem->s_type = SPILS_SPFGMR;
+
+  /* Set Spfgmr parameters that have been passed in call sequence */
+  arkspils_mem->s_pretype    = pretype;
+  mxl = arkspils_mem->s_maxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fields */
+  arkspils_mem->s_jtimesDQ = TRUE;
+  arkspils_mem->s_jtimes   = NULL;
+  arkspils_mem->s_j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  arkspils_mem->s_pset   = NULL;
+  arkspils_mem->s_psolve = NULL;
+  arkspils_mem->s_pfree  = NULL;
+  arkspils_mem->s_P_data = ark_mem->ark_user_data;
+
+  /* Initialize counters */
+  arkSpilsInitializeCounters(arkspils_mem);
+
+  /* Set default values for the rest of the Spfgmr parameters */
+  arkspils_mem->s_gstype    = MODIFIED_GS;
+  arkspils_mem->s_eplifac   = ARKSPILS_EPLIN;
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  ark_mem->ark_setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPFGMR", 
+		    "ARKSpfgmr", MSGS_BAD_PRETYPE);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  arkspils_mem->s_ytemp = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_ytemp == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPFGMR", 
+		    "ARKSpfgmr", MSGS_MEM_FAIL);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  arkspils_mem->s_x = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_x == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPFGMR", 
+		    "ARKSpfgmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, arkspils_mem->s_ytemp);
+  arkspils_mem->s_sqrtN = SUNRsqrt( N_VDotProd(arkspils_mem->s_ytemp, 
+					    arkspils_mem->s_ytemp) );
+
+  /* Call SpfgmrMalloc to allocate workspace for Spfgmr */
+  spfgmr_mem = NULL;
+  spfgmr_mem = SpfgmrMalloc(mxl, ark_mem->ark_tempv);
+  if (spfgmr_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPFGMR", 
+		    "ARKSpfgmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    N_VDestroy(arkspils_mem->s_x);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPFGMR memory to spils memory structure */
+  arkspils_mem->s_spils_mem = (void *) spfgmr_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_lmem = arkspils_mem;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpfgmrInit:
+
+ This routine does remaining initializations specific to the 
+ Spfgmr linear solver.
+---------------------------------------------------------------*/
+static int ARKSpfgmrInit(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Initialize counters */
+  arkSpilsInitializeCounters(arkspils_mem);
+
+  /* Check for legal combination pretype - psolve */
+  if ((arkspils_mem->s_pretype != PREC_NONE) 
+      && (arkspils_mem->s_psolve == NULL)) {
+    arkProcessError(ark_mem, -1, "ARKSPFGMR", "ARKSpfgmrInit", 
+                    MSGS_PSOLVE_REQ);
+    arkspils_mem->s_last_flag = ARKSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull=TRUE iff there is preconditioning (pretype != PREC_NONE)
+     and there is a preconditioning setup phase (pset != NULL)             */
+  ark_mem->ark_setupNonNull = (arkspils_mem->s_pretype != PREC_NONE) 
+    && (arkspils_mem->s_pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (arkspils_mem->s_jtimesDQ) {
+    arkspils_mem->s_jtimes = ARKSpilsDQJtimes;
+    arkspils_mem->s_j_data = ark_mem;
+  } else {
+    arkspils_mem->s_j_data = ark_mem->ark_user_data;
+  }
+
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpfgmrSetup:
+
+ This routine does the setup operations for the Spfgmr linear 
+ solver. It makes a decision as to whether or not to signal for 
+ re-evaluation of Jacobian data in the pset routine, based on 
+ various state variables, then it calls pset.  If we signal for 
+ re-evaluation, then we reset jcur = *jcurPtr to TRUE, regardless 
+ of the pset output. In any case, if jcur == TRUE, we increment 
+ npe and save nst in nstlpre.
+---------------------------------------------------------------*/
+static int ARKSpfgmrSetup(ARKodeMem ark_mem, int convfail, 
+			 N_Vector ypred, N_Vector fpred, 
+			 booleantype *jcurPtr, N_Vector vtemp1,
+			 N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  ARKSpilsMem arkspils_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arkspils_mem->s_nstlpre + ARKSPILS_MSBPRE) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKSPILS_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = arkspils_mem->s_pset(ark_mem->ark_tn, ypred, fpred, jok, 
+				jcurPtr, ark_mem->ark_gamma, 
+				arkspils_mem->s_P_data, vtemp1, 
+				vtemp2, vtemp3);
+  if (retval < 0) {
+    arkProcessError(ark_mem, SPFGMR_PSET_FAIL_UNREC, "ARKSPFGMR", 
+		    "ARKSpfgmrSetup", MSGS_PSET_FAILED);
+    arkspils_mem->s_last_flag = SPFGMR_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) 
+    arkspils_mem->s_last_flag = SPFGMR_PSET_FAIL_REC;
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    arkspils_mem->s_npe++;
+    arkspils_mem->s_nstlpre = ark_mem->ark_nst;
+  }
+
+  arkspils_mem->s_last_flag = SPFGMR_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpfgmrSolve:
+
+ This routine handles the call to the generic solver SpfgmrSolve
+ for the solution of the linear system Ax = b with the SPFGMR 
+ method, without restarts.  The solution x is returned in the 
+ vector b.
+
+ If the WRMS norm of b is small, we return x = b (if this is the 
+ first Newton iteration) or x = 0 (if a later Newton iteration).
+
+ Otherwise, we set the tolerance parameter and initial guess 
+ (x = 0), call SpfgmrSolve, and copy the solution x into b.  The 
+ x-scaling and b-scaling arrays are both equal to weight, and no 
+ restarts are allowed.
+
+ The counters nli, nps, and ncfl are incremented, and the return
+ value is set according to the success of SpfgmrSolve.  The 
+ success flag is returned if SpfgmrSolve converged, or if this is 
+ the first Newton iteration and the residual norm was reduced 
+ below its initial value.
+---------------------------------------------------------------*/
+static int ARKSpfgmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			  N_Vector weight, N_Vector ynow, 
+			  N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  ARKSpilsMem arkspils_mem;
+  SpfgmrMem spfgmr_mem;
+  int nli_inc, nps_inc, retval;
+  
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  spfgmr_mem = (SpfgmrMem) arkspils_mem->s_spils_mem;
+
+  /* Test norm(b); if small, return x = 0 or x = b */
+  arkspils_mem->s_deltar = arkspils_mem->s_eplifac * ark_mem->ark_eRNrm; 
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= arkspils_mem->s_deltar) {
+    if (ark_mem->ark_mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  arkspils_mem->s_ycur = ynow;
+  arkspils_mem->s_fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to SpfgmrSolve */  
+  arkspils_mem->s_delta = arkspils_mem->s_deltar * arkspils_mem->s_sqrtN;
+  N_VConst(ZERO, arkspils_mem->s_x);
+  
+  /* Call SpfgmrSolve and copy x to b */
+  retval = SpfgmrSolve(spfgmr_mem, ark_mem, arkspils_mem->s_x, b, 
+		       arkspils_mem->s_pretype, arkspils_mem->s_gstype, 
+		       arkspils_mem->s_delta, 0, arkspils_mem->s_maxl, 
+		       ark_mem, weight, weight, ARKSpilsAtimes, 
+		       ARKSpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+  N_VScale(ONE, arkspils_mem->s_x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  arkspils_mem->s_nli += nli_inc;
+  arkspils_mem->s_nps += nps_inc;
+  if (retval != SPFGMR_SUCCESS) arkspils_mem->s_ncfl++;
+
+  /* Log solver statistics to diagnostics file (if requested) */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "      kry  %19.16g  %19.16g  %i  %i\n", 
+	    bnorm, res_norm, nli_inc, nps_inc);
+  
+  /* Interpret return value from SpfgmrSolve */
+  arkspils_mem->s_last_flag = retval;
+
+  switch(retval) {
+
+  case SPFGMR_SUCCESS:
+    return(0);
+    break;
+  case SPFGMR_RES_REDUCED:
+    /* allow reduction but not solution on first Newton iteration, 
+       otherwise return with a recoverable failure */
+    if (ark_mem->ark_mnewt == 0) return(0);
+    else                         return(1);
+    break;
+  case SPFGMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPFGMR_QRFACT_FAIL:
+    return(1);
+    break;
+  case SPFGMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPFGMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPFGMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPFGMR_ATIMES_FAIL_UNREC:
+    arkProcessError(ark_mem, SPFGMR_ATIMES_FAIL_UNREC, "ARKSPFGMR", 
+		    "ARKSpfgmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPFGMR_PSOLVE_FAIL_UNREC:
+    arkProcessError(ark_mem, SPFGMR_PSOLVE_FAIL_UNREC, "ARKSPFGMR", 
+		    "ARKSpfgmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  case SPFGMR_GS_FAIL:
+    return(-1);
+    break;
+  case SPFGMR_QRSOL_FAIL:
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpfgmrFree:
+
+ This routine frees memory specific to the Spfgmr linear solver.
+---------------------------------------------------------------*/
+static int ARKSpfgmrFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  SpfgmrMem spfgmr_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  
+  N_VDestroy(arkspils_mem->s_ytemp);
+  N_VDestroy(arkspils_mem->s_x);
+
+  spfgmr_mem = (SpfgmrMem) arkspils_mem->s_spils_mem;
+  SpfgmrFree(spfgmr_mem);
+
+  if (arkspils_mem->s_pfree != NULL) (arkspils_mem->s_pfree)(ark_mem);
+
+  free(arkspils_mem);
+  ark_mem->ark_lmem = NULL;
+
+  return(0);
+}
+
+
+
+
+
+/*---------------------------------------------------------------
+ ARKMassSpfgmr:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the Spfgmr mass matrix solver 
+ module. ARKMassSpfgmr first calls the existing mfree routine if 
+ this is not NULL.  It then sets the ark_minit, ark_msetup, 
+ ark_msolve, ark_mfree fields in (*arkode_mem) to be 
+ ARKMassSpfgmrInit, ARKMassSpfgmrSetup, ARKMassSpfgmrSolve, and 
+ ARKMassSpfgmrFree, respectively.  It allocates memory for a 
+ structure of type ARKSpilsMassMemRec and sets the ark_mass_mem
+ field in (*arkode_mem) to the address of this structure.  It 
+ sets MassSetupNonNull in (*arkode_mem), and sets various fields
+ in the ARKSpilsMassMemRec structure, allocates memory for ytemp 
+ and x, and calls SpfgmrMalloc to allocate memory for the Spfgmr 
+ solver.
+---------------------------------------------------------------*/
+int ARKMassSpfgmr(void *arkode_mem, int pretype, int maxl, 
+		  ARKSpilsMassTimesVecFn mtimes, void *mtimes_data)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+  SpfgmrMem spfgmr_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPFGMR", 
+		    "ARKMassSpfgmr", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if N_VDotProd is present */
+  if(ark_mem->ark_tempv->ops->nvdotprod == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPFGMR", 
+		    "ARKMassSpfgmr", MSGS_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree != NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set four main function fields in ark_mem, enable mass matrix */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = ARKMassSpfgmrInit;
+  ark_mem->ark_msetup = ARKMassSpfgmrSetup;
+  ark_mem->ark_msolve = ARKMassSpfgmrSolve;
+  ark_mem->ark_mfree  = ARKMassSpfgmrFree;
+  ark_mem->ark_msolve_type = 0;
+
+  /* Get memory for ARKSpilsMassMemRec */
+  arkspils_mem = NULL;
+  arkspils_mem = (ARKSpilsMassMem) malloc(sizeof(struct ARKSpilsMassMemRec));
+  if (arkspils_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPFGMR", 
+		    "ARKMassSpfgmr", MSGS_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set mass-matrix-vector product routine */
+  ark_mem->ark_mtimes      = mtimes;
+  ark_mem->ark_mtimes_data = mtimes_data;
+
+  /* Set ILS type */
+  arkspils_mem->s_type = SPILS_SPFGMR;
+
+  /* Set Spfgmr parameters that have been passed in call sequence */
+  arkspils_mem->s_pretype    = pretype;
+  mxl = arkspils_mem->s_maxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+
+  /* Set defaults for preconditioner-related fields */
+  arkspils_mem->s_pset   = NULL;
+  arkspils_mem->s_psolve = NULL;
+  arkspils_mem->s_pfree  = NULL;
+  arkspils_mem->s_P_data = ark_mem->ark_user_data;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli  = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+
+  /* Set default values for the rest of the Spfgmr parameters */
+  arkspils_mem->s_gstype        = MODIFIED_GS;
+  arkspils_mem->s_eplifac       = ARKSPILS_EPLIN;
+  arkspils_mem->s_last_flag     = ARKSPILS_SUCCESS;
+  ark_mem->ark_MassSetupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPFGMR", 
+		    "ARKMassSpfgmr", MSGS_BAD_PRETYPE);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  arkspils_mem->s_ytemp = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_ytemp == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPFGMR", 
+		    "ARKMassSpfgmr", MSGS_MEM_FAIL);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  arkspils_mem->s_x = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_x == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPFGMR", 
+		    "ARKMassSpfgmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, arkspils_mem->s_ytemp);
+  arkspils_mem->s_sqrtN = SUNRsqrt( N_VDotProd(arkspils_mem->s_ytemp, 
+					    arkspils_mem->s_ytemp) );
+
+  /* Call SpfgmrMalloc to allocate workspace for Spfgmr */
+  spfgmr_mem = NULL;
+  spfgmr_mem = SpfgmrMalloc(mxl, ark_mem->ark_tempv);
+  if (spfgmr_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPFGMR", 
+		    "ARKMassSpfgmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    N_VDestroy(arkspils_mem->s_x);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPFGMR memory to spils memory structure */
+  arkspils_mem->s_spils_mem = (void *) spfgmr_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_mass_mem = arkspils_mem;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpfgmrInit:
+
+ This routine does remaining initializations specific to the 
+ Spfgmr linear solver.
+---------------------------------------------------------------*/
+static int ARKMassSpfgmrInit(ARKodeMem ark_mem)
+{
+  ARKSpilsMassMem arkspils_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli  = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+
+  /* Check for legal combination pretype - psolve */
+  if ((arkspils_mem->s_pretype != PREC_NONE) 
+      && (arkspils_mem->s_psolve == NULL)) {
+    arkProcessError(ark_mem, -1, "ARKSPFGMR", "ARKMassSpfgmrInit", 
+		    MSGS_PSOLVE_REQ);
+    arkspils_mem->s_last_flag = ARKSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set MassSetupNonNull=TRUE iff there is preconditioning 
+     (pretype != PREC_NONE) and there is a preconditioning 
+     setup phase (pset != NULL)             */
+  ark_mem->ark_MassSetupNonNull = (arkspils_mem->s_pretype != PREC_NONE) 
+    && (arkspils_mem->s_pset != NULL);
+
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpfgmrSetup:
+
+ This routine does the setup operations for the Spfgmr mass
+ matrix solver. It calls pset, and increments npe.
+---------------------------------------------------------------*/
+static int ARKMassSpfgmrSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			      N_Vector vtemp2, N_Vector vtemp3)
+{
+  int  retval;
+  ARKSpilsMassMem arkspils_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  /* Call pset routine */
+  retval = arkspils_mem->s_pset(ark_mem->ark_tn, 
+				arkspils_mem->s_P_data, 
+				vtemp1, vtemp2, vtemp3);
+  arkspils_mem->s_npe++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, SPFGMR_PSET_FAIL_UNREC, "ARKSPFGMR", 
+		    "ARKMassSpfgmrSetup", MSGS_PSET_FAILED);
+    arkspils_mem->s_last_flag = SPFGMR_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) 
+    arkspils_mem->s_last_flag = SPFGMR_PSET_FAIL_REC;
+  if (retval == 0)
+    arkspils_mem->s_last_flag = SPFGMR_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpfgmrSolve:
+
+ This routine handles the call to the generic solver SpfgmrSolve
+ for the solution of the mass matrix system Mx = b with the 
+ SPFGMR method, without restarts.  The solution x is returned in 
+ the vector b.
+
+ We set the tolerance parameter and initial guess (x = 0), call 
+ SpfgmrSolve, and copy the solution x into b.  The x-scaling and 
+ b-scaling arrays are both equal to weight, and no restarts are
+ allowed.
+
+ The counters nli, nps, and ncfl are incremented, and the return
+ value is set according to the success of SpfgmrSolve.
+---------------------------------------------------------------*/
+static int ARKMassSpfgmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			      N_Vector weight)
+{
+  realtype res_norm;
+  ARKSpilsMassMem arkspils_mem;
+  SpfgmrMem spfgmr_mem;
+  int nli_inc, nps_inc, retval;
+  
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+  spfgmr_mem = (SpfgmrMem) arkspils_mem->s_spils_mem;
+
+  /* Set inputs delta and initial guess x = 0 to SpfgmrSolve */  
+  arkspils_mem->s_deltar = arkspils_mem->s_eplifac * ark_mem->ark_nlscoef; 
+  arkspils_mem->s_delta  = arkspils_mem->s_deltar * arkspils_mem->s_sqrtN;
+  N_VConst(ZERO, arkspils_mem->s_x);
+  
+  /* Call SpfgmrSolve and copy x to b */
+  retval = SpfgmrSolve(spfgmr_mem, ark_mem, arkspils_mem->s_x, b, 
+		       arkspils_mem->s_pretype, arkspils_mem->s_gstype, 
+		       arkspils_mem->s_delta, 0, arkspils_mem->s_maxl, 
+		       ark_mem, weight, weight, ARKSpilsMtimes, 
+		       ARKSpilsMPSolve, &res_norm, &nli_inc, &nps_inc);
+  N_VScale(ONE, arkspils_mem->s_x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  arkspils_mem->s_nli += nli_inc;
+  arkspils_mem->s_nps += nps_inc;
+  if (retval != SPFGMR_SUCCESS) arkspils_mem->s_ncfl++;
+
+  /* Log solver statistics to diagnostics file (if requested) */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "      mass  %19.16g  %i  %i\n", 
+	    res_norm, nli_inc, nps_inc);
+  
+  /* Interpret return value from SpfgmrSolve */
+  arkspils_mem->s_last_flag = retval;
+
+  switch(retval) {
+
+  case SPFGMR_SUCCESS:
+    return(0);
+    break;
+  case SPFGMR_RES_REDUCED:
+    return(1);
+    break;
+  case SPFGMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPFGMR_QRFACT_FAIL:
+    return(1);
+    break;
+  case SPFGMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPFGMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPFGMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPFGMR_ATIMES_FAIL_UNREC:
+    arkProcessError(ark_mem, SPFGMR_ATIMES_FAIL_UNREC, "ARKSPFGMR", 
+		    "ARKMassSpfgmrSolve", MSGS_MTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPFGMR_PSOLVE_FAIL_UNREC:
+    arkProcessError(ark_mem, SPFGMR_PSOLVE_FAIL_UNREC, "ARKSPFGMR", 
+		    "ARKMassSpfgmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  case SPFGMR_GS_FAIL:
+    return(-1);
+    break;
+  case SPFGMR_QRSOL_FAIL:
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpfgmrFree:
+
+ This routine frees memory specific to the Spfgmr linear solver.
+---------------------------------------------------------------*/
+static int ARKMassSpfgmrFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMassMem arkspils_mem;
+  SpfgmrMem spfgmr_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+  
+  N_VDestroy(arkspils_mem->s_ytemp);
+  N_VDestroy(arkspils_mem->s_x);
+
+  spfgmr_mem = (SpfgmrMem) arkspils_mem->s_spils_mem;
+  SpfgmrFree(spfgmr_mem);
+
+  if (arkspils_mem->s_pfree != NULL) (arkspils_mem->s_pfree)(ark_mem);
+
+  free(arkspils_mem);
+  ark_mem->ark_mass_mem = NULL;
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+    EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_spgmr.c b/src/arkode/arkode_spgmr.c
new file mode 100644
index 0000000..4e4d360
--- /dev/null
+++ b/src/arkode/arkode_spgmr.c
@@ -0,0 +1,779 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for the ARKSPGMR linear solver.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <arkode/arkode_spgmr.h>
+#include "arkode_spils_impl.h"
+#include "arkode_impl.h"
+
+#include <sundials/sundials_spgmr.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* ARKSPGMR linit, lsetup, lsolve, and lfree routines */
+static int ARKSpgmrInit(ARKodeMem ark_mem);
+static int ARKSpgmrSetup(ARKodeMem ark_mem, int convfail, 
+			 N_Vector ypred, N_Vector fpred, 
+			 booleantype *jcurPtr, N_Vector vtemp1,
+			 N_Vector vtemp2, N_Vector vtemp3);
+static int ARKSpgmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			 N_Vector weight, N_Vector ynow, 
+			 N_Vector fnow);
+static int ARKSpgmrFree(ARKodeMem ark_mem);
+
+/* ARKSPGMR minit, msetup, msolve, and mfree routines */
+static int ARKMassSpgmrInit(ARKodeMem ark_mem);
+static int ARKMassSpgmrSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			     N_Vector vtemp2, N_Vector vtemp3);
+static int ARKMassSpgmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			     N_Vector weight);
+static int ARKMassSpgmrFree(ARKodeMem ark_mem);
+
+
+/*---------------------------------------------------------------
+ ARKSpgmr:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the Spgmr linear solver module. 
+ ARKSpgmr first calls the existing lfree routine if this is not 
+ NULL.  It then sets the ark_linit, ark_lsetup, ark_lsolve, 
+ ark_lfree fields in (*arkode_mem) to be ARKSpgmrInit, 
+ ARKSpgmrSetup, ARKSpgmrSolve, and ARKSpgmrFree, respectively.  
+ It allocates memory for a structure of type ARKSpilsMemRec and
+ sets the ark_lmem field in (*arkode_mem) to the address of this
+ structure.  It sets setupNonNull in (*arkode_mem), and sets 
+ various fields in the ARKSpilsMemRec structure. Finally, 
+ ARKSpgmr allocates memory for ytemp and x, and calls
+ SpgmrMalloc to allocate memory for the Spgmr solver.
+---------------------------------------------------------------*/
+int ARKSpgmr(void *arkode_mem, int pretype, int maxl)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  SpgmrMem spgmr_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPGMR", 
+		    "ARKSpgmr", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if N_VDotProd and N_VProd are present */
+  if ((ark_mem->ark_tempv->ops->nvdotprod == NULL) ||
+      (ark_mem->ark_tempv->ops->nvprod == NULL)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPGMR", 
+		    "ARKSpgmr", MSGS_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree != NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem */
+  ark_mem->ark_linit  = ARKSpgmrInit;
+  ark_mem->ark_lsetup = ARKSpgmrSetup;
+  ark_mem->ark_lsolve = ARKSpgmrSolve;
+  ark_mem->ark_lfree  = ARKSpgmrFree;
+  ark_mem->ark_lsolve_type = 0;
+
+  /* Get memory for ARKSpilsMemRec */
+  arkspils_mem = NULL;
+  arkspils_mem = (ARKSpilsMem) malloc(sizeof(struct ARKSpilsMemRec));
+  if (arkspils_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPGMR", 
+		    "ARKSpgmr", MSGS_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  arkspils_mem->s_type = SPILS_SPGMR;
+
+  /* Set Spgmr parameters that have been passed in call sequence */
+  arkspils_mem->s_pretype    = pretype;
+  mxl = arkspils_mem->s_maxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fields */
+  arkspils_mem->s_jtimesDQ = TRUE;
+  arkspils_mem->s_jtimes   = NULL;
+  arkspils_mem->s_j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  arkspils_mem->s_pset   = NULL;
+  arkspils_mem->s_psolve = NULL;
+  arkspils_mem->s_pfree  = NULL;
+  arkspils_mem->s_P_data = ark_mem->ark_user_data;
+
+  /* Initialize counters */
+  arkSpilsInitializeCounters(arkspils_mem);
+
+  /* Set default values for the rest of the Spgmr parameters */
+  arkspils_mem->s_gstype = MODIFIED_GS;
+  arkspils_mem->s_eplifac = ARKSPILS_EPLIN;
+  arkspils_mem->s_last_flag  = ARKSPILS_SUCCESS;
+  ark_mem->ark_setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPGMR", 
+		    "ARKSpgmr", MSGS_BAD_PRETYPE);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  arkspils_mem->s_ytemp = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_ytemp == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPGMR", 
+		    "ARKSpgmr", MSGS_MEM_FAIL);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  arkspils_mem->s_x = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_x == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPGMR", 
+		    "ARKSpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, arkspils_mem->s_ytemp);
+  arkspils_mem->s_sqrtN = SUNRsqrt( N_VDotProd(arkspils_mem->s_ytemp, 
+					    arkspils_mem->s_ytemp) );
+
+  /* Call SpgmrMalloc to allocate workspace for Spgmr */
+  spgmr_mem = NULL;
+  spgmr_mem = SpgmrMalloc(mxl, ark_mem->ark_tempv);
+  if (spgmr_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPGMR", 
+		    "ARKSpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    N_VDestroy(arkspils_mem->s_x);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPGMR memory to spils memory structure */
+  arkspils_mem->s_spils_mem = (void *) spgmr_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_lmem = arkspils_mem;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpgmrInit:
+
+ This routine does remaining initializations specific to the Spgmr 
+ linear solver.
+---------------------------------------------------------------*/
+static int ARKSpgmrInit(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Initialize counters */
+  arkSpilsInitializeCounters(arkspils_mem);
+
+  /* Check for legal combination pretype - psolve */
+  if ((arkspils_mem->s_pretype != PREC_NONE) 
+      && (arkspils_mem->s_psolve == NULL)) {
+    arkProcessError(ark_mem, -1, "ARKSPGMR", "ARKSpgmrInit", 
+		    MSGS_PSOLVE_REQ);
+    arkspils_mem->s_last_flag = ARKSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull = TRUE iff there is preconditioning (pretype != PREC_NONE)
+     and there is a preconditioning setup phase (pset != NULL)             */
+  ark_mem->ark_setupNonNull = (arkspils_mem->s_pretype != PREC_NONE) 
+    && (arkspils_mem->s_pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (arkspils_mem->s_jtimesDQ) {
+    arkspils_mem->s_jtimes = ARKSpilsDQJtimes;
+    arkspils_mem->s_j_data = ark_mem;
+  } else {
+    arkspils_mem->s_j_data = ark_mem->ark_user_data;
+  }
+
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpgmrSetup:
+
+ This routine does the setup operations for the Spgmr linear 
+ solver. It makes a decision as to whether or not to signal for 
+ re-evaluation of Jacobian data in the pset routine, based on 
+ various state variables, then it calls pset.  If we signal for 
+ re-evaluation, then we reset jcur = *jcurPtr to TRUE, regardless 
+ of the pset output. In any case, if jcur == TRUE, we increment 
+ npe and save nst in nstlpre.
+---------------------------------------------------------------*/
+static int ARKSpgmrSetup(ARKodeMem ark_mem, int convfail, 
+			 N_Vector ypred, N_Vector fpred, 
+			 booleantype *jcurPtr, N_Vector vtemp1,
+			 N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  ARKSpilsMem arkspils_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arkspils_mem->s_nstlpre + ARKSPILS_MSBPRE) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKSPILS_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = arkspils_mem->s_pset(ark_mem->ark_tn, ypred, fpred, jok, 
+				jcurPtr, ark_mem->ark_gamma, 
+				arkspils_mem->s_P_data, vtemp1, 
+				vtemp2, vtemp3);
+  if (retval < 0) {
+    arkProcessError(ark_mem, SPGMR_PSET_FAIL_UNREC, "ARKSPGMR", 
+		    "ARKSpgmrSetup", MSGS_PSET_FAILED);
+    arkspils_mem->s_last_flag = SPGMR_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    arkspils_mem->s_last_flag = SPGMR_PSET_FAIL_REC;
+  }
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    arkspils_mem->s_npe++;
+    arkspils_mem->s_nstlpre = ark_mem->ark_nst;
+  }
+
+  arkspils_mem->s_last_flag = SPGMR_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpgmrSolve:
+
+ This routine handles the call to the generic solver SpgmrSolve
+ for the solution of the linear system Ax = b with the SPGMR 
+ method, without restarts.  The solution x is returned in the 
+ vector b.
+
+ If the WRMS norm of b is small, we return x = b (if this is the 
+ first Newton iteration) or x = 0 (if a later Newton iteration).
+
+ Otherwise, we set the tolerance parameter and initial guess 
+ (x = 0), call SpgmrSolve, and copy the solution x into b.  The 
+ x-scaling and b-scaling arrays are both equal to weight, and no 
+ restarts are allowed.
+
+ The counters nli, nps, and ncfl are incremented, and the return
+ value is set according to the success of SpgmrSolve.  The 
+ success flag is returned if SpgmrSolve converged, or if this is 
+ the first Newton iteration and the residual norm was reduced 
+ below its initial value.
+---------------------------------------------------------------*/
+static int ARKSpgmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			 N_Vector weight, N_Vector ynow, 
+			 N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  ARKSpilsMem arkspils_mem;
+  SpgmrMem spgmr_mem;
+  int nli_inc, nps_inc, retval;
+  
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  spgmr_mem = (SpgmrMem) arkspils_mem->s_spils_mem;
+
+  /* Test norm(b); if small, return x = 0 or x = b */
+  arkspils_mem->s_deltar = arkspils_mem->s_eplifac * ark_mem->ark_eRNrm; 
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= arkspils_mem->s_deltar) {
+    if (ark_mem->ark_mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  arkspils_mem->s_ycur = ynow;
+  arkspils_mem->s_fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to SpgmrSolve */  
+  arkspils_mem->s_delta = arkspils_mem->s_deltar * arkspils_mem->s_sqrtN;
+  N_VConst(ZERO, arkspils_mem->s_x);
+  
+  /* Call SpgmrSolve and copy x to b */
+  retval = SpgmrSolve(spgmr_mem, ark_mem, arkspils_mem->s_x, b, 
+		      arkspils_mem->s_pretype, arkspils_mem->s_gstype, 
+		      arkspils_mem->s_delta, 0, ark_mem, weight, weight, 
+		      ARKSpilsAtimes, ARKSpilsPSolve, &res_norm, 
+		      &nli_inc, &nps_inc);
+  N_VScale(ONE, arkspils_mem->s_x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  arkspils_mem->s_nli += nli_inc;
+  arkspils_mem->s_nps += nps_inc;
+  if (retval != SPGMR_SUCCESS) arkspils_mem->s_ncfl++;
+
+  /* Log solver statistics to diagnostics file (if requested) */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "      kry  %19.16g  %19.16g  %i  %i\n", 
+	    bnorm, res_norm, nli_inc, nps_inc);
+  
+  /* Interpret return value from SpgmrSolve */
+  arkspils_mem->s_last_flag = retval;
+
+  switch(retval) {
+
+  case SPGMR_SUCCESS:
+    return(0);
+    break;
+  case SPGMR_RES_REDUCED:
+    /* allow reduction but not solution on first Newton iteration, 
+       otherwise return with a recoverable failure */
+    if (ark_mem->ark_mnewt == 0) return(0);
+    else                         return(1);
+    break;
+  case SPGMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPGMR_QRFACT_FAIL:
+    return(1);
+    break;
+  case SPGMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPGMR_ATIMES_FAIL_UNREC:
+    arkProcessError(ark_mem, SPGMR_ATIMES_FAIL_UNREC, "ARKSPGMR", 
+		    "ARKSpgmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPGMR_PSOLVE_FAIL_UNREC:
+    arkProcessError(ark_mem, SPGMR_PSOLVE_FAIL_UNREC, "ARKSPGMR", 
+		    "ARKSpgmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  case SPGMR_GS_FAIL:
+    return(-1);
+    break;
+  case SPGMR_QRSOL_FAIL:
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpgmrFree:
+
+ This routine frees memory specific to the Spgmr linear solver.
+---------------------------------------------------------------*/
+static int ARKSpgmrFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  SpgmrMem spgmr_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  
+  N_VDestroy(arkspils_mem->s_ytemp);
+  N_VDestroy(arkspils_mem->s_x);
+
+  spgmr_mem = (SpgmrMem) arkspils_mem->s_spils_mem;
+  SpgmrFree(spgmr_mem);
+
+  if (arkspils_mem->s_pfree != NULL) (arkspils_mem->s_pfree)(ark_mem);
+
+  free(arkspils_mem);
+  ark_mem->ark_lmem = NULL;
+
+  return(0);
+}
+
+
+
+
+/*---------------------------------------------------------------
+ ARKMassSpgmr:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the Spgmr mass matrix solver module. 
+ ARKMassSpgmr first calls the existing mfree routine if this is 
+ not NULL.  It then sets the ark_minit, ark_msetup, ark_msolve, 
+ ark_mfree fields in (*arkode_mem) to be ARKMassSpgmrInit, 
+ ARKMassSpgmrSetup, ARKMassSpgmrSolve, and ARKMassSpgmrFree, 
+ respectively.  It allocates memory for a structure of type 
+ ARKSpilsMassMemRec and sets the ark_mass_mem field in 
+ (*arkode_mem) to the address of this structure.  It sets 
+ MassSetupNonNull in (*arkode_mem), and sets various fields in
+ the ARKSpilsMassMemRec structure, allocates memory for ytemp
+ and x, and calls SpgmrMalloc to allocate memory for the Spgmr 
+ solver.
+---------------------------------------------------------------*/
+int ARKMassSpgmr(void *arkode_mem, int pretype, int maxl, 
+		 ARKSpilsMassTimesVecFn mtimes, void *mtimes_data)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+  SpgmrMem spgmr_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPGMR", 
+		    "ARKMassSpgmr", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if N_VDotProd is present */
+  if(ark_mem->ark_tempv->ops->nvdotprod == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPGMR", 
+		    "ARKMassSpgmr", MSGS_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree != NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set four main function fields in ark_mem, enable mass matrix */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = ARKMassSpgmrInit;
+  ark_mem->ark_msetup = ARKMassSpgmrSetup;
+  ark_mem->ark_msolve = ARKMassSpgmrSolve;
+  ark_mem->ark_mfree  = ARKMassSpgmrFree;
+  ark_mem->ark_msolve_type = 0;
+
+  /* Get memory for ARKSpilsMassMemRec */
+  arkspils_mem = NULL;
+  arkspils_mem = (ARKSpilsMassMem) malloc(sizeof(struct ARKSpilsMassMemRec));
+  if (arkspils_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPGMR", 
+		    "ARKMassSpgmr", MSGS_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set mass-matrix-vector product routine */
+  ark_mem->ark_mtimes      = mtimes;
+  ark_mem->ark_mtimes_data = mtimes_data;
+
+  /* Set ILS type */
+  arkspils_mem->s_type = SPILS_SPGMR;
+
+  /* Set Spgmr parameters that have been passed in call sequence */
+  arkspils_mem->s_pretype    = pretype;
+  mxl = arkspils_mem->s_maxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+
+  /* Set defaults for preconditioner-related fields */
+  arkspils_mem->s_pset   = NULL;
+  arkspils_mem->s_psolve = NULL;
+  arkspils_mem->s_pfree  = NULL;
+  arkspils_mem->s_P_data = ark_mem->ark_user_data;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli  = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+
+  /* Set default values for the rest of the Spgmr parameters */
+  arkspils_mem->s_gstype        = MODIFIED_GS;
+  arkspils_mem->s_eplifac       = ARKSPILS_EPLIN;
+  arkspils_mem->s_last_flag     = ARKSPILS_SUCCESS;
+  ark_mem->ark_MassSetupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPGMR", 
+		    "ARKMassSpgmr", MSGS_BAD_PRETYPE);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  arkspils_mem->s_ytemp = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_ytemp == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPGMR", 
+		    "ARKMassSpgmr", MSGS_MEM_FAIL);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  arkspils_mem->s_x = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_x == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPGMR", 
+		    "ARKMassSpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, arkspils_mem->s_ytemp);
+  arkspils_mem->s_sqrtN = SUNRsqrt( N_VDotProd(arkspils_mem->s_ytemp, 
+					    arkspils_mem->s_ytemp) );
+
+  /* Call SpgmrMalloc to allocate workspace for Spgmr */
+  spgmr_mem = NULL;
+  spgmr_mem = SpgmrMalloc(mxl, ark_mem->ark_tempv);
+  if (spgmr_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPGMR", 
+		    "ARKMassSpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    N_VDestroy(arkspils_mem->s_x);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPGMR memory to spils memory structure */
+  arkspils_mem->s_spils_mem = (void *) spgmr_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_mass_mem = arkspils_mem;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpgmrInit:
+
+ This routine does remaining initializations specific to the Spgmr 
+ linear solver.
+---------------------------------------------------------------*/
+static int ARKMassSpgmrInit(ARKodeMem ark_mem)
+{
+  ARKSpilsMassMem arkspils_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli  = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+
+  /* Check for legal combination pretype - psolve */
+  if ((arkspils_mem->s_pretype != PREC_NONE) 
+      && (arkspils_mem->s_psolve == NULL)) {
+    arkProcessError(ark_mem, -1, "ARKSPGMR", 
+		    "ARKMassSpgmrInit", MSGS_PSOLVE_REQ);
+    arkspils_mem->s_last_flag = ARKSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set MassSetupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE) and there is a preconditioning setup 
+     phase (pset != NULL)             */
+  ark_mem->ark_MassSetupNonNull = (arkspils_mem->s_pretype != PREC_NONE) 
+    && (arkspils_mem->s_pset != NULL);
+
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpgmrSetup:
+
+ This routine does the setup operations for the Spgmr mass matrix
+ solver. It calls pset and increments npe.
+---------------------------------------------------------------*/
+static int ARKMassSpgmrSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			     N_Vector vtemp2, N_Vector vtemp3)
+{
+  int  retval;
+  ARKSpilsMassMem arkspils_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  /* Call pset routine */
+  retval = arkspils_mem->s_pset(ark_mem->ark_tn, 
+				arkspils_mem->s_P_data, 
+				vtemp1, vtemp2, vtemp3);
+  arkspils_mem->s_npe++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, SPGMR_PSET_FAIL_UNREC, "ARKSPGMR", 
+		    "ARKMassSpgmrSetup", MSGS_PSET_FAILED);
+    arkspils_mem->s_last_flag = SPGMR_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    arkspils_mem->s_last_flag = SPGMR_PSET_FAIL_REC;
+  }
+  if (retval == 0) {
+    arkspils_mem->s_last_flag = SPGMR_SUCCESS;
+  }
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpgmrSolve:
+
+ This routine handles the call to the generic solver SpgmrSolve
+ for the solution of the mass matrix system Mx = b with the SPGMR 
+ method, without restarts.  The solution x is returned in the 
+ vector b.
+
+ We set the tolerance parameter and initial guess (x = 0), call 
+ SpgmrSolve, and copy the solution x into b.  The x-scaling and 
+ b-scaling arrays are both equal to weight, and no restarts are
+ allowed.
+
+ The counters nli, nps, and ncfl are incremented, and the return
+ value is set according to the success of SpgmrSolve.
+---------------------------------------------------------------*/
+static int ARKMassSpgmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			     N_Vector weight)
+{
+  realtype res_norm;
+  ARKSpilsMassMem arkspils_mem;
+  SpgmrMem spgmr_mem;
+  int nli_inc, nps_inc, retval;
+  
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+  spgmr_mem = (SpgmrMem) arkspils_mem->s_spils_mem;
+
+  /* Set inputs delta and initial guess x = 0 to SpgmrSolve */  
+  arkspils_mem->s_deltar = arkspils_mem->s_eplifac * ark_mem->ark_nlscoef; 
+  arkspils_mem->s_delta  = arkspils_mem->s_deltar * arkspils_mem->s_sqrtN;
+  N_VConst(ZERO, arkspils_mem->s_x);
+  
+  /* Call SpgmrSolve and copy x to b */
+  retval = SpgmrSolve(spgmr_mem, ark_mem, arkspils_mem->s_x, b, 
+		      arkspils_mem->s_pretype, arkspils_mem->s_gstype, 
+		      arkspils_mem->s_delta, 0, ark_mem, weight, weight, 
+		      ARKSpilsMtimes, ARKSpilsMPSolve, &res_norm, 
+		      &nli_inc, &nps_inc);
+  N_VScale(ONE, arkspils_mem->s_x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  arkspils_mem->s_nli += nli_inc;
+  arkspils_mem->s_nps += nps_inc;
+  if (retval != SPGMR_SUCCESS) arkspils_mem->s_ncfl++;
+
+  /* Log solver statistics to diagnostics file (if requested) */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "      mass  %19.16g  %i  %i\n", 
+	    res_norm, nli_inc, nps_inc);
+  
+  /* Interpret return value from SpgmrSolve */
+  arkspils_mem->s_last_flag = retval;
+
+  switch(retval) {
+
+  case SPGMR_SUCCESS:
+    return(0);
+    break;
+  case SPGMR_RES_REDUCED:
+    return(1);
+    break;
+  case SPGMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPGMR_QRFACT_FAIL:
+    return(1);
+    break;
+  case SPGMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPGMR_ATIMES_FAIL_UNREC:
+    arkProcessError(ark_mem, SPGMR_ATIMES_FAIL_UNREC, "ARKSPGMR", 
+		    "ARKMassSpgmrSolve", MSGS_MTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPGMR_PSOLVE_FAIL_UNREC:
+    arkProcessError(ark_mem, SPGMR_PSOLVE_FAIL_UNREC, "ARKSPGMR", 
+		    "ARKMassSpgmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  case SPGMR_GS_FAIL:
+    return(-1);
+    break;
+  case SPGMR_QRSOL_FAIL:
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSpgmrFree:
+
+ This routine frees memory specific to the Spgmr linear solver.
+---------------------------------------------------------------*/
+static int ARKMassSpgmrFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMassMem arkspils_mem;
+  SpgmrMem spgmr_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+  
+  N_VDestroy(arkspils_mem->s_ytemp);
+  N_VDestroy(arkspils_mem->s_x);
+
+  spgmr_mem = (SpgmrMem) arkspils_mem->s_spils_mem;
+  SpgmrFree(spgmr_mem);
+
+  if (arkspils_mem->s_pfree != NULL) (arkspils_mem->s_pfree)(ark_mem);
+
+  free(arkspils_mem);
+  ark_mem->ark_mass_mem = NULL;
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+    EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_spils.c b/src/arkode/arkode_spils.c
new file mode 100644
index 0000000..050cb49
--- /dev/null
+++ b/src/arkode/arkode_spils.c
@@ -0,0 +1,1191 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for the ARKSPILS linear solvers.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "arkode_impl.h"
+#include "arkode_spils_impl.h"
+
+/* constants */
+#define MAX_DQITERS  3  /* max. # of attempts to recover in DQ J*v */
+#define ZERO   RCONST(0.0)
+#define PT25   RCONST(0.25)
+#define ONE    RCONST(1.0)
+
+
+/*===============================================================
+   OPTIONAL INPUT and OUTPUT
+===============================================================*/
+
+/*---------------------------------------------------------------
+ ARKSpilsSetPrecType
+---------------------------------------------------------------*/
+int ARKSpilsSetPrecType(void *arkode_mem, int pretype)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetPrecType", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetPrecType", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE)  && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetPrecType", MSGS_BAD_PRETYPE);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  arkspils_mem->s_pretype = pretype;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsSetMassPrecType
+---------------------------------------------------------------*/
+int ARKSpilsSetMassPrecType(void *arkode_mem, int pretype)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMassPrecType", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMassPrecType", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE)  && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetMassPrecType", MSGS_BAD_PRETYPE);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  arkspils_mem->s_pretype = pretype;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsSetGSType
+---------------------------------------------------------------*/
+int ARKSpilsSetGSType(void *arkode_mem, int gstype)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetGSType", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetGSType", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  if ((arkspils_mem->s_type != SPILS_SPGMR) &&
+      (arkspils_mem->s_type != SPILS_SPFGMR)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetGSType", MSGS_BAD_LSTYPE);
+    fprintf(stderr,"solver type = %i\n",arkspils_mem->s_type);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Check for legal gstype */
+  if ((gstype != MODIFIED_GS) && (gstype != CLASSICAL_GS)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetGSType", MSGS_BAD_GSTYPE);
+    return(ARKSPILS_ILL_INPUT);
+  }
+  arkspils_mem->s_gstype = gstype;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsSetMassGSType
+---------------------------------------------------------------*/
+int ARKSpilsSetMassGSType(void *arkode_mem, int gstype)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMassGSType", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMassGSType", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  if ((arkspils_mem->s_type != SPILS_SPGMR) &&
+      (arkspils_mem->s_type != SPILS_SPFGMR)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetMassGSType", MSGS_BAD_LSTYPE);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Check for legal gstype */
+  if ((gstype != MODIFIED_GS) && (gstype != CLASSICAL_GS)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetMassGSType", MSGS_BAD_GSTYPE);
+    return(ARKSPILS_ILL_INPUT);
+  }
+  arkspils_mem->s_gstype = gstype;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ Function : ARKSpilsSetMaxl
+---------------------------------------------------------------*/
+int ARKSpilsSetMaxl(void *arkode_mem, int maxl)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMaxl", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(NULL, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMaxl", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  if ((arkspils_mem->s_type == SPILS_SPGMR) &&
+      (arkspils_mem->s_type == SPILS_SPFGMR)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetMaxl", MSGS_BAD_LSTYPE);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  mxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+  arkspils_mem->s_maxl = mxl;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ Function : ARKSpilsSetMassMaxl
+---------------------------------------------------------------*/
+int ARKSpilsSetMassMaxl(void *arkode_mem, int maxl)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMassMaxl", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMassMaxl", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  if ((arkspils_mem->s_type == SPILS_SPGMR) &&
+      (arkspils_mem->s_type == SPILS_SPFGMR)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetMassMaxl", MSGS_BAD_LSTYPE);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  mxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+  arkspils_mem->s_maxl = mxl;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsSetEpsLin
+---------------------------------------------------------------*/
+int ARKSpilsSetEpsLin(void *arkode_mem, realtype eplifac)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetEpsLin", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetEpsLin", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Check for legal eplifac */
+  if(eplifac < ZERO) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetEpsLin", MSGS_BAD_EPLIN);
+    return(ARKSPILS_ILL_INPUT);
+  }
+  arkspils_mem->s_eplifac = (eplifac == ZERO) ? ARKSPILS_EPLIN : eplifac;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsSetMassEpsLin
+---------------------------------------------------------------*/
+int ARKSpilsSetMassEpsLin(void *arkode_mem, realtype eplifac)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMassEpsLin", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMassEpsLin", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  /* Check for legal eplifac */
+  if(eplifac < ZERO) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetMassEpsLin", MSGS_BAD_EPLIN);
+    return(ARKSPILS_ILL_INPUT);
+  }
+  arkspils_mem->s_eplifac = (eplifac == ZERO) ? ARKSPILS_EPLIN : eplifac;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsSetPreconditioner
+---------------------------------------------------------------*/
+int ARKSpilsSetPreconditioner(void *arkode_mem, 
+			      ARKSpilsPrecSetupFn pset, 
+			      ARKSpilsPrecSolveFn psolve)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetPreconditioner", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetPreconditioner", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  arkspils_mem->s_pset   = pset;
+  arkspils_mem->s_psolve = psolve;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsSetMassPreconditioner
+---------------------------------------------------------------*/
+int ARKSpilsSetMassPreconditioner(void *arkode_mem, 
+				  ARKSpilsMassPrecSetupFn pset, 
+				  ARKSpilsMassPrecSolveFn psolve)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMassPreconditioner", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetMassPreconditioner", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  arkspils_mem->s_pset   = pset;
+  arkspils_mem->s_psolve = psolve;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsSetJacTimesVecFn
+---------------------------------------------------------------*/
+int ARKSpilsSetJacTimesVecFn(void *arkode_mem, 
+			     ARKSpilsJacTimesVecFn jtv)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetJacTimesVecFn", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetJacTimesVecFn", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  if (jtv != NULL) {
+    arkspils_mem->s_jtimesDQ = FALSE;
+    arkspils_mem->s_jtimes   = jtv;
+  } else {
+    arkspils_mem->s_jtimesDQ = TRUE;
+  }
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsSetMassTimesVecFn
+---------------------------------------------------------------*/
+int ARKSpilsSetMassTimesVecFn(void *arkode_mem, 
+			      ARKSpilsMassTimesVecFn mtv,
+			      void *mtimes_data)
+{
+  ARKodeMem ark_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsSetJacTimesVecFn", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (mtv == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPILS", 
+		    "ARKSpilsSetMassTimesVecFn", "non-NULL function must be supplied");
+    return(ARKSPILS_LMEM_NULL);
+  }
+
+  /* set arguments into ark_mem data structure */
+  ark_mem->ark_mtimes = mtv;
+  ark_mem->ark_mtimes_data = mtimes_data;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetWorkSpace
+---------------------------------------------------------------*/
+int ARKSpilsGetWorkSpace(void *arkode_mem, long int *lenrwLS, 
+			 long int *leniwLS)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  int maxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetWorkSpace", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetWorkSpace", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  switch(arkspils_mem->s_type) {
+  case SPILS_SPGMR:
+    maxl = arkspils_mem->s_maxl;
+    *lenrwLS = ark_mem->ark_lrw1*(maxl + 5) + maxl*(maxl + 4) + 1;
+    *leniwLS = ark_mem->ark_liw1*(maxl + 5);
+    break;
+  case SPILS_SPBCG:
+    *lenrwLS = ark_mem->ark_lrw1 * 9;
+    *leniwLS = ark_mem->ark_liw1 * 9;
+    break;
+  case SPILS_SPTFQMR:
+    *lenrwLS = ark_mem->ark_lrw1*11;
+    *leniwLS = ark_mem->ark_liw1*11;
+    break;
+  case SPILS_PCG:
+    *lenrwLS = ark_mem->ark_lrw1 * 4;
+    *leniwLS = ark_mem->ark_liw1 * 4 + 1;
+    break;
+  case SPILS_SPFGMR:
+    maxl = arkspils_mem->s_maxl;
+    *lenrwLS = ark_mem->ark_lrw1*(2*maxl + 4) + maxl*(maxl + 4) + 1;
+    *leniwLS = ark_mem->ark_liw1*(2*maxl + 4);
+    break;
+  }
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetMassWorkSpace
+---------------------------------------------------------------*/
+int ARKSpilsGetMassWorkSpace(void *arkode_mem, long int *lenrwMLS, 
+			     long int *leniwMLS)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+  int maxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetMassWorkSpace", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetMassWorkSpace", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  switch(arkspils_mem->s_type) {
+  case SPILS_SPGMR:
+    maxl = arkspils_mem->s_maxl;
+    *lenrwMLS = ark_mem->ark_lrw1*(maxl + 5) + maxl*(maxl + 4) + 1;
+    *leniwMLS = ark_mem->ark_liw1*(maxl + 5);
+    break;
+  case SPILS_SPBCG:
+    *lenrwMLS = ark_mem->ark_lrw1 * 9;
+    *leniwMLS = ark_mem->ark_liw1 * 9;
+    break;
+  case SPILS_SPTFQMR:
+    *lenrwMLS = ark_mem->ark_lrw1*11;
+    *leniwMLS = ark_mem->ark_liw1*11;
+    break;
+  case SPILS_PCG:
+    *lenrwMLS = ark_mem->ark_lrw1 * 4;
+    *leniwMLS = ark_mem->ark_liw1 * 4 + 1;
+    break;
+  case SPILS_SPFGMR:
+    maxl = arkspils_mem->s_maxl;
+    *lenrwMLS = ark_mem->ark_lrw1*(2*maxl + 4) + maxl*(maxl + 4) + 1;
+    *leniwMLS = ark_mem->ark_liw1*(2*maxl + 4);
+    break;
+  }
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumPrecEvals
+---------------------------------------------------------------*/
+int ARKSpilsGetNumPrecEvals(void *arkode_mem, long int *npevals)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumPrecEvals", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumPrecEvals", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  *npevals = arkspils_mem->s_npe;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumMassPrecEvals
+---------------------------------------------------------------*/
+int ARKSpilsGetNumMassPrecEvals(void *arkode_mem, long int *npevals)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumMassPrecEvals", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumMassPrecEvals", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  *npevals = arkspils_mem->s_npe;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumPrecSolves
+---------------------------------------------------------------*/
+int ARKSpilsGetNumPrecSolves(void *arkode_mem, long int *npsolves)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumPrecSolves", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumPrecSolves", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  *npsolves = arkspils_mem->s_nps;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumMassPrecSolves
+---------------------------------------------------------------*/
+int ARKSpilsGetNumMassPrecSolves(void *arkode_mem, long int *npsolves)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumMassPrecSolves", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumMassPrecSolves", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  *npsolves = arkspils_mem->s_nps;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumLinIters
+---------------------------------------------------------------*/
+int ARKSpilsGetNumLinIters(void *arkode_mem, long int *nliters)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumLinIters", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumLinIters", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  *nliters = arkspils_mem->s_nli;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumMassIters
+---------------------------------------------------------------*/
+int ARKSpilsGetNumMassIters(void *arkode_mem, long int *nmiters)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumMassLinIters", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumMassLinIters", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  *nmiters = arkspils_mem->s_nli;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumConvFails
+---------------------------------------------------------------*/
+int ARKSpilsGetNumConvFails(void *arkode_mem, long int *nlcfails)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumConvFails", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumConvFails", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  *nlcfails = arkspils_mem->s_ncfl;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumMassConvFails
+---------------------------------------------------------------*/
+int ARKSpilsGetNumMassConvFails(void *arkode_mem, long int *nmcfails)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumMassConvFails", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumMassConvFails", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  *nmcfails = arkspils_mem->s_ncfl;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumJtimesEvals
+---------------------------------------------------------------*/
+int ARKSpilsGetNumJtimesEvals(void *arkode_mem, long int *njvevals)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumJtimesEvals", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumJtimesEvals", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  *njvevals = arkspils_mem->s_njtimes;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumMtimesEvals
+---------------------------------------------------------------*/
+int ARKSpilsGetNumMtimesEvals(void *arkode_mem, long int *nmvevals)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumMtimesEvals", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumMtimesEvals", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_mass_mem;
+
+  *nmvevals = arkspils_mem->s_njtimes;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetNumRhsEvals
+---------------------------------------------------------------*/
+int ARKSpilsGetNumRhsEvals(void *arkode_mem, long int *nfevalsLS)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumRhsEvals", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetNumRhsEvals", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  *nfevalsLS = arkspils_mem->s_nfes;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetLastFlag
+---------------------------------------------------------------*/
+int ARKSpilsGetLastFlag(void *arkode_mem, long int *flag)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetLastFlag", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_lmem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_LMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetLastFlag", MSGS_LMEM_NULL);
+    return(ARKSPILS_LMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  *flag = arkspils_mem->s_last_flag;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetLastMassFlag
+---------------------------------------------------------------*/
+int ARKSpilsGetLastMassFlag(void *arkode_mem, long int *flag)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetLastMassFlag", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  if (ark_mem->ark_mass_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MASSMEM_NULL, "ARKSPILS", 
+		    "ARKSpilsGetLastMassFlag", MSGS_MASSMEM_NULL);
+    return(ARKSPILS_MASSMEM_NULL);
+  }
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  *flag = arkspils_mem->s_last_flag;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsGetReturnFlagName
+---------------------------------------------------------------*/
+char *ARKSpilsGetReturnFlagName(long int flag)
+{
+  char *name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case ARKSPILS_SUCCESS:
+    sprintf(name,"ARKSPILS_SUCCESS");
+    break; 
+  case ARKSPILS_MEM_NULL:
+    sprintf(name,"ARKSPILS_MEM_NULL");
+    break;
+  case ARKSPILS_LMEM_NULL:
+    sprintf(name,"ARKSPILS_LMEM_NULL");
+    break;
+  case ARKSPILS_MASSMEM_NULL:
+    sprintf(name,"ARKSPILS_MASSMEM_NULL");
+    break;
+  case ARKSPILS_ILL_INPUT:
+    sprintf(name,"ARKSPILS_ILL_INPUT");
+    break;
+  case ARKSPILS_MEM_FAIL:
+    sprintf(name,"ARKSPILS_MEM_FAIL");
+    break;
+  case ARKSPILS_PMEM_NULL:
+    sprintf(name,"ARKSPILS_PMEM_NULL");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+
+/*===============================================================
+   ARKSPILS private functions
+===============================================================*/
+
+/*---------------------------------------------------------------
+ ARKSpilsAtimes:
+
+ This routine generates the matrix-vector product z = Av, where
+ A = M - gamma*J. The product M*v is obtained either by calling 
+ the mtimes routine or by just using v (if M=I).  The product 
+ J*v is obtained by calling the jtimes routine. It is then scaled 
+ by -gamma and added to M*v to obtain A*v. The return value is 
+ the same as the values returned by jtimes and mtimes -- 
+ 0 if successful, nonzero otherwise.
+---------------------------------------------------------------*/
+int ARKSpilsAtimes(void *arkode_mem, N_Vector v, N_Vector z)
+{
+  ARKodeMem   ark_mem;
+  ARKSpilsMem arkspils_mem;
+  int jtflag, mtflag;
+
+  ark_mem = (ARKodeMem) arkode_mem;
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  jtflag = arkspils_mem->s_jtimes(v, z, ark_mem->ark_tn, 
+				  arkspils_mem->s_ycur, 
+				  arkspils_mem->s_fcur, 
+				  arkspils_mem->s_j_data, 
+				  arkspils_mem->s_ytemp);
+  arkspils_mem->s_njtimes++;
+  if (jtflag != 0) return(jtflag);
+
+  /* Compute mass matrix vector product and add to result */
+  if (ark_mem->ark_mass_matrix) {
+    mtflag = ARKSpilsMtimes(arkode_mem, v, arkspils_mem->s_ytemp);
+    if (mtflag != 0) return(mtflag);
+    N_VLinearSum(ONE, arkspils_mem->s_ytemp, -ark_mem->ark_gamma, z, z);
+  } else {
+    N_VLinearSum(ONE, v, -ark_mem->ark_gamma, z, z);
+  }
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsPSolve:
+
+ This routine interfaces between the generic Sp***Solve routine
+ (within the SPGMR, SPBCG, SPTFQMR, SPFGMR or PCG solver) and the 
+ user's psolve routine.  It passes to psolve all required state 
+ information from arkode_mem.  Its return value is the same as 
+ that returned by psolve. Note that the generic SP*** solver 
+ guarantees that ARKSpilsPSolve will not be called in the case 
+ in which preconditioning is not done. This is the only case in 
+ which the user's psolve routine is allowed to be NULL.
+---------------------------------------------------------------*/
+int ARKSpilsPSolve(void *arkode_mem, N_Vector r, N_Vector z, int lr)
+{
+  ARKodeMem   ark_mem;
+  ARKSpilsMem arkspils_mem;
+  int retval;
+
+  ark_mem = (ARKodeMem) arkode_mem;
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* This call is counted in nps within the ARKSp***Solve routine */
+  retval = arkspils_mem->s_psolve(ark_mem->ark_tn, 
+				  arkspils_mem->s_ycur, 
+				  arkspils_mem->s_fcur, r, z, 
+				  ark_mem->ark_gamma, 
+				  arkspils_mem->s_delta, lr, 
+				  arkspils_mem->s_P_data, 
+				  arkspils_mem->s_ytemp);
+
+  return(retval);     
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsMtimes:
+
+ This routine generates the matrix-vector product z = Mv, where
+ M is the system mass matrix, by calling the user-supplied mtimes
+ routine.. The return value is the same as the value returned 
+ by mtimes -- 0 if successful, nonzero otherwise.
+---------------------------------------------------------------*/
+int ARKSpilsMtimes(void *arkode_mem, N_Vector v, N_Vector z)
+{
+  ARKodeMem ark_mem;
+  int retval;
+  ark_mem = (ARKodeMem) arkode_mem;
+  retval = ark_mem->ark_mtimes(v, z, ark_mem->ark_tn, 
+			       ark_mem->ark_mtimes_data);
+  ark_mem->ark_mass_mult++;
+
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsMPSolve:
+
+ This routine interfaces between the generic Sp***Solve routine
+ (within the SPGMR, SPBCG, SPTFQMR, SPFGMR or PCG solver) and the 
+ user's mass matrix psolve routine.  It passes to psolve all 
+ required state information from arkode_mem.  Its return value is
+ the same as that returned by psolve. Note that the generic SP*** 
+ solver guarantees that ARKSpilsMPSolve will not be called in the 
+ case in which preconditioning is not done. This is the only case 
+ in which the user's psolve routine is allowed to be NULL.
+---------------------------------------------------------------*/
+int ARKSpilsMPSolve(void *arkode_mem, N_Vector r, N_Vector z, int lr)
+{
+  ARKodeMem       ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+  int retval;
+
+  ark_mem = (ARKodeMem) arkode_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  /* This call is counted in nps within the ARKSp***Solve routine */
+  retval = arkspils_mem->s_psolve(ark_mem->ark_tn, r, z, 
+				  arkspils_mem->s_delta, lr, 
+				  arkspils_mem->s_P_data, 
+				  arkspils_mem->s_ytemp);
+  return(retval);     
+}
+
+
+/*---------------------------------------------------------------
+ ARKSpilsDQJtimes:
+
+ This routine generates a difference quotient approximation to
+ the Jacobian times vector f_y(t,y) * v. The approximation is 
+ Jv = vnrm[f(y + v/vnrm) - f(y)], where vnrm = (WRMS norm of v) 
+ is input, i.e. the WRMS norm of v/vnrm is 1.
+---------------------------------------------------------------*/
+int ARKSpilsDQJtimes(N_Vector v, N_Vector Jv, realtype t, 
+		     N_Vector y, N_Vector fy,
+		     void *data, N_Vector work)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  realtype sig, siginv;
+  int iter, retval;
+
+  /* data is arkode_mem */
+  ark_mem = (ARKodeMem) data;
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Initialize perturbation to 1/||v|| */
+  sig = ONE/N_VWrmsNorm(v, ark_mem->ark_ewt);
+
+  for (iter=0; iter<MAX_DQITERS; iter++) {
+
+    /* Set work = y + sig*v */
+    N_VLinearSum(sig, v, ONE, y, work);
+
+    /* Set Jv = f(tn, y+sig*v) */
+    retval = ark_mem->ark_fi(t, work, Jv, ark_mem->ark_user_data); 
+    arkspils_mem->s_nfes++;
+    if (retval == 0) break;
+    if (retval < 0)  return(-1);
+
+    /* If fi failed recoverably, shrink sig and retry */
+    sig *= PT25;
+
+  }
+
+  /* If retval still isn't 0, return with a recoverable failure */
+  if (retval > 0) return(+1);
+
+  /* Replace Jv by (Jv - fy)/sig */
+  siginv = ONE/sig;
+  N_VLinearSum(siginv, Jv, -siginv, fy, Jv);
+
+  return(0);
+}
+
+
+int arkSpilsInitializeCounters(ARKSpilsMem arkspils_mem)
+{
+  arkspils_mem->s_npe     = 0;
+  arkspils_mem->s_nli     = 0;
+  arkspils_mem->s_nps     = 0;
+  arkspils_mem->s_ncfl    = 0;
+  arkspils_mem->s_nstlpre = 0;
+  arkspils_mem->s_njtimes = 0;
+  arkspils_mem->s_nfes    = 0;
+  return(0); 
+}
+
+
+/*---------------------------------------------------------------
+    EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_spils_impl.h b/src/arkode/arkode_spils_impl.h
new file mode 100644
index 0000000..7703e46
--- /dev/null
+++ b/src/arkode/arkode_spils_impl.h
@@ -0,0 +1,192 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Common implementation header file for the scaled, preconditioned
+ * linear solver modules.
+ *--------------------------------------------------------------*/
+
+#ifndef _ARKSPILS_IMPL_H
+#define _ARKSPILS_IMPL_H
+
+#include <arkode/arkode_spils.h>
+#include "arkode_impl.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/* Types of iterative linear solvers */
+#define SPILS_SPGMR   1
+#define SPILS_SPBCG   2
+#define SPILS_SPTFQMR 3
+#define SPILS_PCG     4
+#define SPILS_SPFGMR  5
+
+
+/*---------------------------------------------------------------
+ Types: ARKSpilsMemRec, ARKSpilsMem
+
+ The type ARKSpilsMem is pointer to a ARKSpilsMemRec.
+---------------------------------------------------------------*/
+typedef struct ARKSpilsMemRec {
+
+  int s_type;           /* type of scaled preconditioned iterative LS   */
+
+  int  s_pretype;       /* type of preconditioning                      */
+  int  s_gstype;        /* type of Gram-Schmidt orthogonalization       */
+  realtype s_sqrtN;     /* sqrt(N)                                      */
+  realtype s_eplifac;   /* eplifac = user specified or EPLIN_DEFAULT    */
+  realtype s_deltar;    /* deltar = delt * LTE                          */
+  realtype s_delta;     /* delta = deltar * sqrtN                       */
+  int  s_maxl;          /* maxl = maximum dimension of the Krylov space */
+
+  long int s_nstlpre;   /* value of nst at the last pset call           */
+  long int s_npe;       /* npe = total number of pset calls             */
+  long int s_nli;       /* nli = total number of linear iterations      */
+  long int s_nps;       /* nps = total number of psolve calls           */
+  long int s_ncfl;      /* ncfl = total number of convergence failures  */
+  long int s_njtimes;   /* njtimes = total number of calls to jtimes    */
+  long int s_nfes;      /* nfeSG = total number of calls to f for     
+                           difference quotient Jacobian-vector products */
+
+  N_Vector s_ytemp;     /* temp vector passed to jtimes and psolve      */
+  N_Vector s_x;         /* temp vector used by ARKSpilsSolve            */
+  N_Vector s_ycur;      /* ARKODE current y vector in Newton Iteration  */
+  N_Vector s_fcur;      /* fcur = f(tn, ycur)                           */
+
+  void* s_spils_mem;    /* memory used by the generic solver            */
+
+  /* Preconditioner computation
+    (a) user-provided:
+        - P_data == user_data
+        - pfree == NULL (the user dealocates memory for user_data)
+    (b) internal preconditioner module
+        - P_data == arkode_mem
+        - pfree == set by the prec. module and called in ARKodeFree  */
+  ARKSpilsPrecSetupFn s_pset;
+  ARKSpilsPrecSolveFn s_psolve;
+  int (*s_pfree)(ARKodeMem ark_mem);
+  void *s_P_data;
+
+  /* Jacobian times vector compuation
+    (a) jtimes function provided by the user:
+        - j_data == user_data
+        - jtimesDQ == FALSE
+    (b) internal jtimes
+        - j_data == arkode_mem
+        - jtimesDQ == TRUE   */
+  booleantype s_jtimesDQ;
+  ARKSpilsJacTimesVecFn s_jtimes;
+  void *s_j_data;
+
+  long int s_last_flag; /* last error flag returned by any function     */
+
+} *ARKSpilsMem;
+
+
+/*---------------------------------------------------------------
+ Types: ARKSpilsMassMemRec, ARKSpilsMassMem
+
+ The type ARKSpilsMassMem is pointer to a ARKSpilsMassMemRec.
+---------------------------------------------------------------*/
+typedef struct ARKSpilsMassMemRec {
+
+  int s_type;           /* type of scaled preconditioned iterative LS   */
+
+  int  s_pretype;       /* type of preconditioning                      */
+  int  s_gstype;        /* type of Gram-Schmidt orthogonalization       */
+  realtype s_sqrtN;     /* sqrt(N)                                      */
+  realtype s_eplifac;   /* eplifac = user specified or EPLIN_DEFAULT    */
+  realtype s_deltar;    /* deltar = delt * LTE                          */
+  realtype s_delta;     /* delta = deltar * sqrtN                       */
+  int  s_maxl;          /* maxl = maximum dimension of the Krylov space */
+
+  long int s_npe;       /* npe = total number of pset calls             */
+  long int s_nli;       /* nli = total number of linear iterations      */
+  long int s_nps;       /* nps = total number of psolve calls           */
+  long int s_ncfl;      /* ncfl = total number of convergence failures  */
+
+  N_Vector s_ytemp;     /* temp vector passed to mtimes and psolve      */
+  N_Vector s_x;         /* temp vector used by ARKSpilsSolve            */
+  N_Vector s_ycur;      /* ARKODE current y vector                      */
+
+  void* s_spils_mem;    /* memory used by the generic solver            */
+
+  /* Preconditioner computation
+    (a) user-provided:
+        - P_data == user_data
+        - pfree == NULL (the user dealocates memory for user_data)
+    (b) internal preconditioner module
+        - P_data == arkode_mem
+        - pfree == set by the prec. module and called in ARKodeFree */
+  ARKSpilsMassPrecSetupFn s_pset;
+  ARKSpilsMassPrecSolveFn s_psolve;
+  int (*s_pfree)(ARKodeMem ark_mem);
+  void *s_P_data;
+
+  long int s_last_flag; /* last error flag returned by any function     */
+
+} *ARKSpilsMassMem;
+
+
+/*---------------------------------------------------------------
+ Prototypes of internal functions
+---------------------------------------------------------------*/
+
+/* Atimes and PSolve routines called by generic solver */
+int ARKSpilsAtimes(void *ark_mem, N_Vector v, N_Vector z);
+int ARKSpilsPSolve(void *ark_mem, N_Vector r, N_Vector z, int lr);
+
+/* Mtimes and MPSolve routines called by mass matrix solver */
+int ARKSpilsMtimes(void *ark_mem, N_Vector v, N_Vector z);
+int ARKSpilsMPSolve(void *ark_mem, N_Vector r, N_Vector z, int lr);
+
+/* Difference quotient approximation for Jac times vector */
+int ARKSpilsDQJtimes(N_Vector v, N_Vector Jv, realtype t,
+                     N_Vector y, N_Vector fy, void *data,
+                     N_Vector work);
+
+/* Auxilliary functions */
+int arkSpilsInitializeCounters(ARKSpilsMem arkspils_mem);
+
+
+/*---------------------------------------------------------------
+ Error Messages
+---------------------------------------------------------------*/
+#define MSGS_ARKMEM_NULL   "Integrator memory is NULL."
+#define MSGS_MEM_FAIL      "A memory request failed."
+#define MSGS_BAD_NVECTOR   "A required vector operation is not implemented."
+#define MSGS_BAD_LSTYPE    "Incompatible linear solver type."
+#define MSGS_BAD_PRETYPE   "Illegal value for pretype. Legal values are PREC_NONE, PREC_LEFT, PREC_RIGHT, and PREC_BOTH."
+#define MSGS_PSOLVE_REQ    "pretype != PREC_NONE, but PSOLVE = NULL is illegal."
+#define MSGS_LMEM_NULL     "Linear solver memory is NULL."
+#define MSGS_MASSMEM_NULL  "Mass matrix solver memory is NULL."
+#define MSGS_BAD_GSTYPE    "Illegal value for gstype. Legal values are MODIFIED_GS and CLASSICAL_GS."
+#define MSGS_BAD_EPLIN     "eplifac < 0 illegal."
+
+#define MSGS_PSET_FAILED   "The preconditioner setup routine failed in an unrecoverable manner."
+#define MSGS_PSOLVE_FAILED "The preconditioner solve routine failed in an unrecoverable manner."
+#define MSGS_JTIMES_FAILED "The Jacobian x vector routine failed in an unrecoverable manner."
+#define MSGS_MTIMES_FAILED "The mass matrix * vector routine failed in an unrecoverable manner."
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/arkode/arkode_sptfqmr.c b/src/arkode/arkode_sptfqmr.c
new file mode 100644
index 0000000..605093a
--- /dev/null
+++ b/src/arkode/arkode_sptfqmr.c
@@ -0,0 +1,767 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Implementation file for the ARKSPTFQMR linear solver.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <arkode/arkode_sptfqmr.h>
+#include "arkode_spils_impl.h"
+#include "arkode_impl.h"
+
+#include <sundials/sundials_sptfqmr.h>
+#include <sundials/sundials_math.h>
+
+/* Other Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* ARKSPTFQMR linit, lsetup, lsolve, and lfree routines */
+static int ARKSptfqmrInit(ARKodeMem ark_mem);
+static int ARKSptfqmrSetup(ARKodeMem ark_mem, int convfail, N_Vector ypred,
+			   N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+			   N_Vector vtemp2, N_Vector vtemp3);
+static int ARKSptfqmrSolve(ARKodeMem ark_mem, N_Vector b, N_Vector weight,
+			   N_Vector ynow, N_Vector fnow);
+static int ARKSptfqmrFree(ARKodeMem ark_mem);
+
+/* ARKSPTFQMR minit, msetup, msolve, and mfree routines */
+static int ARKMassSptfqmrInit(ARKodeMem ark_mem);
+static int ARKMassSptfqmrSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			       N_Vector vtemp2, N_Vector vtemp3);
+static int ARKMassSptfqmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			       N_Vector weight);
+static int ARKMassSptfqmrFree(ARKodeMem ark_mem);
+
+
+/*---------------------------------------------------------------
+ ARKSptfqmr:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the Sptfqmr linear solver module. 
+ ARKSptfqmr first calls the existing lfree routine if this is not 
+ NULL. It then sets the ark_linit, ark_lsetup, ark_lsolve, 
+ ark_lfree fields in (*arkode_mem) to be ARKSptfqmrInit, 
+ ARKSptfqmrSetup, ARKSptfqmrSolve, and ARKSptfqmrFree,
+ respectively. It allocates memory for a structure of type
+ ARKSpilsMemRec and sets the ark_lmem field in (*arkode_mem) to 
+ the address of this structure. It sets setupNonNull in 
+ (*arkode_mem), and sets various fields in the ARKSpilsMemRec 
+ structure. Finally, ARKSptfqmr allocates memory for ytemp and 
+ x, and calls SptfqmrMalloc to allocate memory for the Sptfqmr 
+ solver.
+---------------------------------------------------------------*/
+int ARKSptfqmr(void *arkode_mem, int pretype, int maxl)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMem arkspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPTFQMR", 
+		    "ARKSptfqmr", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if N_VDotProd and N_VProd are present */
+  if ((ark_mem->ark_tempv->ops->nvdotprod == NULL) ||
+      (ark_mem->ark_tempv->ops->nvprod == NULL)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPTFQMR", 
+		    "ARKSptfqmr", MSGS_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree != NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem */
+  ark_mem->ark_linit  = ARKSptfqmrInit;
+  ark_mem->ark_lsetup = ARKSptfqmrSetup;
+  ark_mem->ark_lsolve = ARKSptfqmrSolve;
+  ark_mem->ark_lfree  = ARKSptfqmrFree;
+  ark_mem->ark_lsolve_type = 0;
+
+  /* Get memory for ARKSpilsMemRec */
+  arkspils_mem = NULL;
+  arkspils_mem = (ARKSpilsMem) malloc(sizeof(struct ARKSpilsMemRec));
+  if (arkspils_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPTFQMR", 
+                    "ARKSptfqmr", MSGS_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  arkspils_mem->s_type = SPILS_SPTFQMR;
+
+  /* Set Sptfqmr parameters that have been passed in call sequence */
+  arkspils_mem->s_pretype = pretype;
+  mxl = arkspils_mem->s_maxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fields */
+  arkspils_mem->s_jtimesDQ = TRUE;
+  arkspils_mem->s_jtimes   = NULL;
+  arkspils_mem->s_j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  arkspils_mem->s_pset   = NULL;
+  arkspils_mem->s_psolve = NULL;
+  arkspils_mem->s_pfree  = NULL;
+  arkspils_mem->s_P_data = ark_mem->ark_user_data;
+
+  /* Initialize counters */
+  arkSpilsInitializeCounters(arkspils_mem);
+
+  /* Set default values for the rest of the Sptfqmr parameters */
+  arkspils_mem->s_eplifac = ARKSPILS_EPLIN;
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  ark_mem->ark_setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPTFQMR", 
+                    "ARKSptfqmr", MSGS_BAD_PRETYPE);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+
+  arkspils_mem->s_ytemp = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_ytemp == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPTFQMR", 
+		    "ARKSptfqmr", MSGS_MEM_FAIL);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  arkspils_mem->s_x = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_x == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPTFQMR", 
+		    "ARKSptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, arkspils_mem->s_ytemp);
+  arkspils_mem->s_sqrtN = SUNRsqrt(N_VDotProd(arkspils_mem->s_ytemp, 
+					   arkspils_mem->s_ytemp));
+
+  /* Call SptfqmrMalloc to allocate workspace for Sptfqmr */
+  sptfqmr_mem = NULL;
+  sptfqmr_mem = SptfqmrMalloc(mxl, ark_mem->ark_tempv);
+  if (sptfqmr_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPTFQMR", 
+		    "ARKSptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    N_VDestroy(arkspils_mem->s_x);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPTFQMR memory to spils memory structure */
+  arkspils_mem->s_spils_mem = (void *) sptfqmr_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_lmem = arkspils_mem;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSptfqmrInit:
+
+ This routine does remaining initializations specific to the 
+ Sptfqmr linear solver.
+---------------------------------------------------------------*/
+static int ARKSptfqmrInit(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  SptfqmrMem sptfqmr_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  sptfqmr_mem = (SptfqmrMem) arkspils_mem->s_spils_mem;
+
+  /* Initialize counters */
+  arkSpilsInitializeCounters(arkspils_mem);
+
+  /* Check for legal combination pretype - psolve */
+  if ((arkspils_mem->s_pretype != PREC_NONE) && 
+      (arkspils_mem->s_psolve == NULL)) {
+    arkProcessError(ark_mem, -1, "ARKSPTFQMR", "ARKSptfqmrInit", 
+                    MSGS_PSOLVE_REQ);
+    arkspils_mem->s_last_flag = ARKSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE)  and there is a preconditioning
+     setup phase (pset != NULL) */
+  ark_mem->ark_setupNonNull = (arkspils_mem->s_pretype != PREC_NONE) && 
+    (arkspils_mem->s_pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (arkspils_mem->s_jtimesDQ) {
+    arkspils_mem->s_jtimes = ARKSpilsDQJtimes;
+    arkspils_mem->s_j_data = ark_mem;
+  } else {
+    arkspils_mem->s_j_data = ark_mem->ark_user_data;
+  }
+
+  /* Set maxl in the SPTFQMR memory in case it was changed by the user */
+  sptfqmr_mem->l_max = arkspils_mem->s_maxl;
+
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  return(0);
+}
+
+/*---------------------------------------------------------------
+ ARKSptfqmrSetup:
+
+ This routine does the setup operations for the Sptfqmr linear 
+ solver. It makes a decision as to whether or not to signal for 
+ reevaluation of Jacobian data in the pset routine, based on 
+ various state variables, then it calls pset. If we signal for 
+ reevaluation, then we reset jcur = *jcurPtr to TRUE, regardless 
+ of the pset output. In any case, if jcur == TRUE, we increment 
+ npe and save nst in nstlpre.
+---------------------------------------------------------------*/
+static int ARKSptfqmrSetup(ARKodeMem ark_mem, int convfail, 
+			   N_Vector ypred, N_Vector fpred, 
+			   booleantype *jcurPtr, N_Vector vtemp1,
+			   N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  ARKSpilsMem arkspils_mem;
+
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arkspils_mem->s_nstlpre + ARKSPILS_MSBPRE) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKSPILS_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = arkspils_mem->s_pset(ark_mem->ark_tn, ypred, fpred, jok, 
+				jcurPtr, ark_mem->ark_gamma, 
+				arkspils_mem->s_P_data, 
+				vtemp1, vtemp2, vtemp3);
+  if (retval < 0) {
+    arkProcessError(ark_mem, SPTFQMR_PSET_FAIL_UNREC, "ARKSPTFQMR", 
+		    "ARKSptfqmrSetup", MSGS_PSET_FAILED);
+    arkspils_mem->s_last_flag = SPTFQMR_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    arkspils_mem->s_last_flag = SPTFQMR_PSET_FAIL_REC;
+  }
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    arkspils_mem->s_npe++;
+    arkspils_mem->s_nstlpre = ark_mem->ark_nst;
+  }
+
+  arkspils_mem->s_last_flag = SPTFQMR_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSptfqmrSolve:
+
+ This routine handles the call to the generic solver SptfqmrSolve
+ for the solution of the linear system Ax = b with the SPTFQMR 
+ method. The solution x is returned in the vector b.
+
+ If the WRMS norm of b is small, we return x = b (if this is the 
+ first Newton iteration) or x = 0 (if a later Newton iteration).
+
+ Otherwise, we set the tolerance parameter and initial guess 
+ (x = 0), call SptfqmrSolve, and copy the solution x into b. The 
+ x-scaling and b-scaling arrays are both equal to weight.
+
+ The counters nli, nps, and ncfl are incremented, and the return 
+ value is set according to the success of SptfqmrSolve. The 
+ success flag is returned if SptfqmrSolve converged, or if this 
+ is the first Newton iteration and the residual norm was reduced 
+ below its initial value.
+---------------------------------------------------------------*/
+static int ARKSptfqmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			   N_Vector weight, N_Vector ynow, 
+			   N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  ARKSpilsMem arkspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int nli_inc, nps_inc, retval;
+  
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+  sptfqmr_mem = (SptfqmrMem) arkspils_mem->s_spils_mem;
+
+  /* Test norm(b); if small, return x = 0 */
+  arkspils_mem->s_deltar = arkspils_mem->s_eplifac * ark_mem->ark_eRNrm; 
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= arkspils_mem->s_deltar) {
+    if (ark_mem->ark_mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  arkspils_mem->s_ycur = ynow;
+  arkspils_mem->s_fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to SptfqmrSolve */  
+  arkspils_mem->s_delta = arkspils_mem->s_deltar * arkspils_mem->s_sqrtN;
+  N_VConst(ZERO, arkspils_mem->s_x);
+  
+  /* Call SptfqmrSolve and copy x to b */
+  retval = SptfqmrSolve(sptfqmr_mem, ark_mem, arkspils_mem->s_x, b, 
+			arkspils_mem->s_pretype, arkspils_mem->s_delta,
+                        ark_mem, weight, weight, ARKSpilsAtimes, 
+			ARKSpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+  N_VScale(ONE, arkspils_mem->s_x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  arkspils_mem->s_nli += nli_inc;
+  arkspils_mem->s_nps += nps_inc;
+  if (retval != SPTFQMR_SUCCESS) arkspils_mem->s_ncfl++;
+
+  /* Log solver statistics to diagnostics file (if requested) */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "      kry  %19.16g  %19.16g  %i  %i\n", 
+	    bnorm, res_norm, nli_inc, nps_inc);
+  
+  /* Interpret return value from SptfqmrSolve */
+  arkspils_mem->s_last_flag = retval;
+
+  switch(retval) {
+
+  case SPTFQMR_SUCCESS:
+    return(0);
+    break;
+  case SPTFQMR_RES_REDUCED:
+    /* allow reduction but not solution on first Newton iteration, 
+       otherwise return with a recoverable failure */
+    if (ark_mem->ark_mnewt == 0) return(0);
+    else                         return(1);
+    break;
+  case SPTFQMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_UNREC:
+    arkProcessError(ark_mem, SPTFQMR_ATIMES_FAIL_UNREC, "ARKSPTFQMR", 
+		    "ARKSptfqmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_UNREC:
+    arkProcessError(ark_mem, SPTFQMR_PSOLVE_FAIL_UNREC, "ARKSPTFQMR", 
+		    "ARKSptfqmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKSptfqmrFree:
+
+ This routine frees memory specific to the Sptfqmr linear solver.
+---------------------------------------------------------------*/
+static int ARKSptfqmrFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMem arkspils_mem;
+  SptfqmrMem sptfqmr_mem;
+    
+  arkspils_mem = (ARKSpilsMem) ark_mem->ark_lmem;
+
+  N_VDestroy(arkspils_mem->s_ytemp);
+  N_VDestroy(arkspils_mem->s_x);
+
+  sptfqmr_mem = (SptfqmrMem) arkspils_mem->s_spils_mem;
+  SptfqmrFree(sptfqmr_mem);
+
+  if (arkspils_mem->s_pfree != NULL) (arkspils_mem->s_pfree)(ark_mem);
+
+  free(arkspils_mem);
+  ark_mem->ark_lmem = NULL;
+
+  return(0);
+}
+
+
+
+/*---------------------------------------------------------------
+ ARKMassSptfqmr:
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the Sptfqmr mass matrix solver 
+ module. ARKMassSptfqmr first calls the existing mfree routine 
+ if this is not NULL. It then sets the ark_minit, ark_msetup, 
+ ark_msolve, ark_mfree fields in (*arkode_mem) to be 
+ ARKMassSptfqmrInit, ARKMassSptfqmrSetup, ARKMassSptfqmrSolve, 
+ and ARKMassSptfqmrFree, respectively. It allocates memory for a
+ structure of type ARKMassSpilsMemRec and sets the ark_mass_mem
+ field in (*arkode_mem) to the address of this structure. It sets 
+ MassSetupNonNull in (*arkode_mem), and sets various fields in 
+ the ARKSpilsMassMemRec structure, allocates memory for ytemp 
+ and x, and calls SptfqmrMalloc to allocate memory for the 
+ Sptfqmr solver.
+---------------------------------------------------------------*/
+int ARKMassSptfqmr(void *arkode_mem, int pretype, int maxl, 
+		   ARKSpilsMassTimesVecFn mtimes, void *mtimes_data)
+{
+  ARKodeMem ark_mem;
+  ARKSpilsMassMem arkspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int mxl;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSPILS_MEM_NULL, "ARKSPTFQMR", 
+		    "ARKMassSptfqmr", MSGS_ARKMEM_NULL);
+    return(ARKSPILS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Check if N_VDotProd is present */
+  if (ark_mem->ark_tempv->ops->nvdotprod == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPTFQMR", 
+		    "ARKMassSptfqmr", MSGS_BAD_NVECTOR);
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree != NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set four main function fields in ark_mem, enable mass matrix */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = ARKMassSptfqmrInit;
+  ark_mem->ark_msetup = ARKMassSptfqmrSetup;
+  ark_mem->ark_msolve = ARKMassSptfqmrSolve;
+  ark_mem->ark_mfree  = ARKMassSptfqmrFree;
+  ark_mem->ark_msolve_type = 0;
+
+  /* Get memory for ARKSpilsMassMemRec */
+  arkspils_mem = NULL;
+  arkspils_mem = (ARKSpilsMassMem) malloc(sizeof(struct ARKSpilsMassMemRec));
+  if (arkspils_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPTFQMR", 
+		    "ARKMassSptfqmr", MSGS_MEM_FAIL);
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Set mass-matrix-vector product routine */
+  ark_mem->ark_mtimes      = mtimes;
+  ark_mem->ark_mtimes_data = mtimes_data;
+
+  /* Set ILS type */
+  arkspils_mem->s_type = SPILS_SPTFQMR;
+
+  /* Set Sptfqmr parameters that have been passed in call sequence */
+  arkspils_mem->s_pretype = pretype;
+  mxl = arkspils_mem->s_maxl = (maxl <= 0) ? ARKSPILS_MAXL : maxl;
+
+  /* Set defaults for preconditioner-related fields */
+  arkspils_mem->s_pset   = NULL;
+  arkspils_mem->s_psolve = NULL;
+  arkspils_mem->s_pfree  = NULL;
+  arkspils_mem->s_P_data = ark_mem->ark_user_data;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli  = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+
+  /* Set default values for the rest of the Sptfqmr parameters */
+  arkspils_mem->s_eplifac   = ARKSPILS_EPLIN;
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+
+  /* Disable call to msetup in ARKode solver (for now) */
+  ark_mem->ark_MassSetupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    arkProcessError(ark_mem, ARKSPILS_ILL_INPUT, "ARKSPTFQMR", 
+		    "ARKMassSptfqmr", MSGS_BAD_PRETYPE);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  arkspils_mem->s_ytemp = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_ytemp == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPTFQMR", 
+		    "ARKMassSptfqmr", MSGS_MEM_FAIL);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  arkspils_mem->s_x = N_VClone(ark_mem->ark_tempv);
+  if (arkspils_mem->s_x == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPTFQMR", 
+		    "ARKMassSptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, arkspils_mem->s_ytemp);
+  arkspils_mem->s_sqrtN = SUNRsqrt(N_VDotProd(arkspils_mem->s_ytemp, 
+					   arkspils_mem->s_ytemp));
+
+  /* Call SptfqmrMalloc to allocate workspace for Sptfqmr */
+  sptfqmr_mem = NULL;
+  sptfqmr_mem = SptfqmrMalloc(mxl, ark_mem->ark_tempv);
+  if (sptfqmr_mem == NULL) {
+    arkProcessError(ark_mem, ARKSPILS_MEM_FAIL, "ARKSPTFQMR", 
+		    "ARKMassSptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(arkspils_mem->s_ytemp);
+    N_VDestroy(arkspils_mem->s_x);
+    free(arkspils_mem); arkspils_mem = NULL;
+    return(ARKSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPTFQMR memory to spils memory structure */
+  arkspils_mem->s_spils_mem = (void *) sptfqmr_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  ark_mem->ark_mass_mem = arkspils_mem;
+
+  return(ARKSPILS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSptfqmrInit:
+
+ This routine does remaining initializations specific to the 
+ Sptfqmr linear solver.
+---------------------------------------------------------------*/
+static int ARKMassSptfqmrInit(ARKodeMem ark_mem)
+{
+  ARKSpilsMassMem arkspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+  sptfqmr_mem = (SptfqmrMem) arkspils_mem->s_spils_mem;
+
+  /* Initialize counters */
+  arkspils_mem->s_npe = arkspils_mem->s_nli  = 0;
+  arkspils_mem->s_nps = arkspils_mem->s_ncfl = 0;
+
+  /* Check for legal combination pretype - psolve */
+  if ((arkspils_mem->s_pretype != PREC_NONE) && 
+      (arkspils_mem->s_psolve == NULL)) {
+    arkProcessError(ark_mem, -1, "ARKSPTFQMR", "ARKMassSptfqmrInit", 
+		    MSGS_PSOLVE_REQ);
+    arkspils_mem->s_last_flag = ARKSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set MassSetupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE)  and there is a preconditioning
+     setup phase (pset != NULL) */
+  ark_mem->ark_MassSetupNonNull = (arkspils_mem->s_pretype != PREC_NONE) && 
+    (arkspils_mem->s_pset != NULL);
+
+  /* Set maxl in the SPTFQMR memory in case it was changed by the user */
+  sptfqmr_mem->l_max = arkspils_mem->s_maxl;
+
+  arkspils_mem->s_last_flag = ARKSPILS_SUCCESS;
+  return(0);
+}
+
+/*---------------------------------------------------------------
+ ARKMassSptfqmrSetup:
+
+ This routine does the setup operations for the Sptfqmr mass 
+ matrix solver. It calls the setup routine and increments npe.
+---------------------------------------------------------------*/
+static int ARKMassSptfqmrSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+			       N_Vector vtemp2, N_Vector vtemp3)
+{
+  int  retval;
+  ARKSpilsMassMem arkspils_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  /* Call pset routine */
+  retval = arkspils_mem->s_pset(ark_mem->ark_tn, 
+				arkspils_mem->s_P_data, 
+				vtemp1, vtemp2, vtemp3);
+  arkspils_mem->s_npe++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, SPTFQMR_PSET_FAIL_UNREC, "ARKSPTFQMR", 
+		    "ARKMassSptfqmrSetup", MSGS_PSET_FAILED);
+    arkspils_mem->s_last_flag = SPTFQMR_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    arkspils_mem->s_last_flag = SPTFQMR_PSET_FAIL_REC;
+  }
+  if (retval == 0) {
+    arkspils_mem->s_last_flag = SPTFQMR_SUCCESS;
+  }
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSptfqmrSolve:
+
+ This routine handles the call to the generic solver SptfqmrSolve
+ for the solution of the mass matrix system Mx = b with the 
+ SPTFQMR method. The solution x is returned in the vector b.
+
+ We set the tolerance parameter and initial guess (x = 0), call 
+ SptfqmrSolve, and copy the solution x into b. The x-scaling and 
+ b-scaling arrays are both equal to weight.
+
+ The counters nli, nps, and ncfl are incremented, and the return 
+ value is set according to the success of SptfqmrSolve. The 
+ success flag is returned if SptfqmrSolve converged.
+---------------------------------------------------------------*/
+static int ARKMassSptfqmrSolve(ARKodeMem ark_mem, N_Vector b, 
+			       N_Vector weight)
+{
+  realtype res_norm;
+  ARKSpilsMassMem arkspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int nli_inc, nps_inc, retval;
+
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+  sptfqmr_mem = (SptfqmrMem) arkspils_mem->s_spils_mem;
+
+  /* Set inputs delta and initial guess x = 0 to SptfqmrSolve */  
+  arkspils_mem->s_deltar = arkspils_mem->s_eplifac * ark_mem->ark_nlscoef; 
+  arkspils_mem->s_delta  = arkspils_mem->s_deltar * arkspils_mem->s_sqrtN;
+  N_VConst(ZERO, arkspils_mem->s_x);
+  
+  /* Call SptfqmrSolve and copy x to b */
+  retval = SptfqmrSolve(sptfqmr_mem, ark_mem, arkspils_mem->s_x, b, 
+			arkspils_mem->s_pretype, arkspils_mem->s_delta,
+                        ark_mem, weight, weight, ARKSpilsMtimes, 
+			ARKSpilsMPSolve, &res_norm, &nli_inc, &nps_inc);
+  N_VScale(ONE, arkspils_mem->s_x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  arkspils_mem->s_nli += nli_inc;
+  arkspils_mem->s_nps += nps_inc;
+  if (retval != SPTFQMR_SUCCESS) arkspils_mem->s_ncfl++;
+
+  /* Log solver statistics to diagnostics file (if requested) */
+  if (ark_mem->ark_report) 
+    fprintf(ark_mem->ark_diagfp, "      mass  %19.16g  %i  %i\n", 
+	    res_norm, nli_inc, nps_inc);
+  
+  /* Interpret return value from SptfqmrSolve */
+  arkspils_mem->s_last_flag = retval;
+
+  switch(retval) {
+
+  case SPTFQMR_SUCCESS:
+    return(0);
+    break;
+  case SPTFQMR_RES_REDUCED:
+    return(1);
+    break;
+  case SPTFQMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_UNREC:
+    arkProcessError(ark_mem, SPTFQMR_ATIMES_FAIL_UNREC, "ARKSPTFQMR", 
+		    "ARKMassSptfqmrSolve", MSGS_MTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_UNREC:
+    arkProcessError(ark_mem, SPTFQMR_PSOLVE_FAIL_UNREC, "ARKSPTFQMR", 
+		    "ARKMassSptfqmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSptfqmrFree:
+
+ This routine frees memory specific to the Sptfqmr linear solver.
+---------------------------------------------------------------*/
+static int ARKMassSptfqmrFree(ARKodeMem ark_mem)
+{
+  ARKSpilsMassMem arkspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  arkspils_mem = (ARKSpilsMassMem) ark_mem->ark_mass_mem;
+
+  N_VDestroy(arkspils_mem->s_ytemp);
+  N_VDestroy(arkspils_mem->s_x);
+
+  sptfqmr_mem = (SptfqmrMem) arkspils_mem->s_spils_mem;
+  SptfqmrFree(sptfqmr_mem);
+
+  if (arkspils_mem->s_pfree != NULL) (arkspils_mem->s_pfree)(ark_mem);
+
+  free(arkspils_mem);
+  ark_mem->ark_mass_mem = NULL;
+
+  return(0);
+}
+
+
+
+/*---------------------------------------------------------------
+     EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/arkode_superlumt.c b/src/arkode/arkode_superlumt.c
new file mode 100644
index 0000000..d0e3cf6
--- /dev/null
+++ b/src/arkode/arkode_superlumt.c
@@ -0,0 +1,1097 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Implementation file for the ARKSUPERLUMT linear solver module.
+ *---------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "arkode/arkode_superlumt.h"
+#include "arkode/arkode_sparse.h"
+#include "arkode_sparse_impl.h"
+#include "arkode_impl.h"
+
+#include <sundials/sundials_superlumt_impl.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+#define ONE RCONST(1.0)
+#define TWO RCONST(2.0)
+
+/* ARKSUPERLUMT linit, lsetup, lsolve, and lfree routines */
+static int arkSuperLUMTInit(ARKodeMem ark_mem);
+static int arkSuperLUMTSetup(ARKodeMem ark_mem, int convfail, 
+			     N_Vector ypred, N_Vector fpred, 
+			     booleantype *jcurPtr, N_Vector tmp1, 
+			     N_Vector tmp2, N_Vector tmp3);
+static int arkSuperLUMTSolve(ARKodeMem ark_mem, N_Vector b, 
+			     N_Vector weight, N_Vector ycur, 
+			     N_Vector fcur);
+static int arkSuperLUMTFree(ARKodeMem ark_mem);
+
+/* ARKSUPERLUMT minit, msetup, msolve, mfree and mtimes routines */
+static int arkMassSuperLUMTInit(ARKodeMem ark_mem);
+static int arkMassSuperLUMTSetup(ARKodeMem ark_mem, N_Vector tmp1,
+			     N_Vector tmp2, N_Vector tmp3);
+static int arkMassSuperLUMTSolve(ARKodeMem ark_mem, N_Vector b, 
+			     N_Vector weight);
+static int arkMassSuperLUMTFree(ARKodeMem ark_mem);
+static int arkMassSuperLUMTMultiply(N_Vector v, N_Vector Mv, 
+				    realtype t, void *arkode_mem);
+
+
+/*---------------------------------------------------------------
+ ARKSuperLUMT
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the ARKODE / SuperLUMT linear solver
+ module.  ARKSuperLUMT first calls the existing lfree routine if
+ this is not NULL.  Then it sets the ark_linit, ark_lsetup, 
+ ark_lsolve and ark_lfree fields in (*ark_mem) to be 
+ arkSuperLUMTInit, arkSuperLUMTSetup, arkSuperLUMTSolve, and 
+ arkSuperLUMTFree, respectively.  It allocates memory for a 
+ structure of type ARKSlsMemRec and sets the ark_lmem field in 
+ (*arkode_mem) to the address of this structure.  It sets 
+ setupNonNull in (*arkode_mem) to TRUE.  Finally, it allocates 
+ memory for SuperLUMT.  The return value is ARKSLS_SUCCESS = 0, 
+ ARKSLS_LMEM_FAIL = -1, or ARKSLS_ILL_INPUT = -2.
+
+ NOTE: The SuperLUMT linear solver assumes a serial 
+       implementation of the NVECTOR package. Therefore, 
+       ARKSuperLUMT will first test for a compatible N_Vector 
+       internal representation by checking that the function 
+       N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+int ARKSuperLUMT(void *arkode_mem, int num_threads, int n, int nnz)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMem arksls_mem;
+  SLUMTData slumt_data;
+  int *perm_c, *perm_r;
+  int nrhs, panel_size, relax;
+  double *bd;
+  SuperMatrix *B;
+
+  /* Return immediately if ark_mem is NULL. */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "ARKSuperLUMT", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKSLS_ILL_INPUT, "ARKSLS", 
+		    "ARKSuperLUMT", MSGSP_BAD_NVECTOR);
+    return(ARKSLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_lfree != NULL) ark_mem->ark_lfree(ark_mem);
+
+  /* Set four main function fields in ark_mem. */
+  ark_mem->ark_linit  = arkSuperLUMTInit;
+  ark_mem->ark_lsetup = arkSuperLUMTSetup;
+  ark_mem->ark_lsolve = arkSuperLUMTSolve;
+  ark_mem->ark_lfree  = arkSuperLUMTFree;
+  ark_mem->ark_lsolve_type = 3;
+
+  /* Get memory for ARKSlsMemRec. */
+  arksls_mem = (ARKSlsMem) malloc(sizeof(struct ARKSlsMemRec));
+  if (arksls_mem == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKSuperLUMT", MSGSP_MEM_FAIL);
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Get memory for SLUMTData. */
+  slumt_data = (SLUMTData) malloc(sizeof(struct SLUMTDataRec));
+  if (slumt_data == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKSuperLUMT", MSGSP_MEM_FAIL);
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Initialize Jacobian-related data */
+  arksls_mem->s_Jeval = NULL;
+  arksls_mem->s_Jdata = ark_mem->ark_user_data;
+  ark_mem->ark_setupNonNull = TRUE;
+  arksls_mem->sparsetype = CSC_MAT;
+
+  /* Initialize counters */
+  arksls_mem->s_nje = 0;
+  arksls_mem->s_first_factorize = 1;
+  arksls_mem->s_nstlj = 0;
+
+  /* Allocate memory for the sparse Jacobian */
+  arksls_mem->s_A = NULL;
+  arksls_mem->s_A = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (arksls_mem->s_A == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKSuperLUMT", MSGSP_MEM_FAIL);
+    free(slumt_data); slumt_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Allocate memory for saved sparse Jacobian */
+  arksls_mem->s_savedJ = NULL;
+  arksls_mem->s_savedJ = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (arksls_mem->s_savedJ == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKSuperLUMT", MSGSP_MEM_FAIL);
+    SparseDestroyMat(arksls_mem->s_A);
+    free(slumt_data); slumt_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Set up memory for the permutations */
+  perm_r = NULL;
+  perm_r = (int *) malloc(n*sizeof(int));
+  if (perm_r == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKSuperLUMT", MSGSP_MEM_FAIL);
+    SparseDestroyMat(arksls_mem->s_A);
+    SparseDestroyMat(arksls_mem->s_savedJ);
+    free(slumt_data); slumt_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+  perm_c = NULL;
+  perm_c = (int *) malloc(n*sizeof(int));
+  if (perm_c == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKSuperLUMT", MSGSP_MEM_FAIL);
+    SparseDestroyMat(arksls_mem->s_A);
+    SparseDestroyMat(arksls_mem->s_savedJ);
+    free(slumt_data); slumt_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    free(perm_r); perm_r = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+  slumt_data->perm_r = perm_r;
+  slumt_data->perm_c = perm_c;
+
+  /* Set default parameters for SuperLU */
+  slumt_data->num_threads = num_threads;
+  slumt_data->diag_pivot_thresh = 1.0;
+
+  /* Allocate structures for SuperLU */
+  slumt_data->Gstat = (Gstat_t *) malloc(sizeof(Gstat_t));
+  slumt_data->s_A   = (SuperMatrix *) malloc(sizeof(SuperMatrix));
+  slumt_data->s_AC  = (SuperMatrix *) malloc(sizeof(SuperMatrix));
+  slumt_data->s_L   = (SuperMatrix *) malloc(sizeof(SuperMatrix));
+  slumt_data->s_U   = (SuperMatrix *) malloc(sizeof(SuperMatrix));
+  slumt_data->s_A->Store  = NULL;
+  slumt_data->s_AC->Store = NULL;
+  slumt_data->s_L->Store  = NULL;
+  slumt_data->s_U->Store  = NULL;
+  slumt_data->superlumt_options = 
+    (superlumt_options_t *) malloc(sizeof(superlumt_options_t));
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  StatAlloc(arksls_mem->s_A->N, num_threads, panel_size, 
+	    relax, slumt_data->Gstat);
+  
+  /* Create RHS matrix */
+  nrhs = 1;
+  bd = NULL;
+  B = (SuperMatrix *) malloc(sizeof(SuperMatrix));
+  B->Store = NULL;
+  dCreate_Dense_Matrix(B, n, nrhs, bd, n, 
+		       SLU_DN, SLU_D, SLU_GE);
+  slumt_data->s_B = B;
+
+  /* Set ordering to COLAMD as the arkode default use.
+     Users can set a different value with ARKSuperLUMTSetOrdering,
+     and the user-set value is loaded before any call to 
+     factorize the matrix in arkSuperLUMTSetup.  */
+  slumt_data->s_ordering = 3;
+
+  /* Attach linear solver memory to the integrator memory */
+  arksls_mem->s_solver_data = (void *) slumt_data;
+  ark_mem->ark_lmem = arksls_mem;
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkSuperLUMTInit:
+
+ This routine does remaining initializations specific to the 
+ ARKSuperLUMT linear solver module.  It returns 0 if successful.
+---------------------------------------------------------------*/
+static int arkSuperLUMTInit(ARKodeMem ark_mem)
+{
+  ARKSlsMem arksls_mem;
+  SLUMTData slumt_data;
+
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+  slumt_data = (SLUMTData) arksls_mem->s_solver_data;
+
+  arksls_mem->s_nje = 0;
+  arksls_mem->s_first_factorize = 1;
+  arksls_mem->s_nstlj = 0;
+
+  /* Allocate storage and initialize statistics variables. */
+  StatInit(arksls_mem->s_A->N, slumt_data->num_threads, 
+	   slumt_data->Gstat);
+
+  arksls_mem->s_Jdata = ark_mem->ark_user_data;
+  arksls_mem->s_last_flag = 0;
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkSuperLUMTSetup:
+
+  This routine does the setup operations for the ARKSuperLUMT 
+  linear solver module.  It calls the Jacobian evaluation 
+  routine, updates counters, and calls the LU factorization 
+  routine.  The return value is either
+     ARKSLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+---------------------------------------------------------------*/
+static int arkSuperLUMTSetup(ARKodeMem ark_mem, int convfail, 
+			     N_Vector ypred, N_Vector fpred, 
+			     booleantype *jcurPtr, N_Vector vtemp1, 
+			     N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  int retval;
+  int panel_size, relax, lwork;
+  realtype dgamma;
+  double drop_tol;
+  fact_t fact;
+  trans_t trans;
+  yes_no_t refact, usepr;
+  ARKSlsMem arksls_mem;
+  ARKSlsMassMem arksls_mass_mem;
+  SLUMTData slumt_data;
+  void *work;
+  
+  arksls_mem = (ARKSlsMem) (ark_mem->ark_lmem);
+  slumt_data = (SLUMTData) arksls_mem->s_solver_data;
+
+  /* Set option values for SuperLU_MT */
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  fact = EQUILIBRATE;
+  trans = NOTRANS;
+  usepr = NO;
+  drop_tol = 0.0;
+  lwork = 0;
+  work = NULL;
+
+  /* Check that Jacobian eval routine is set */
+  if (arksls_mem->s_Jeval == NULL) {
+    arkProcessError(ark_mem, ARKSLS_JAC_NOSET, "ARKSLS", 
+		    "arkSuperLUMTSetup", MSGSP_JAC_NOSET);
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_JAC_NOSET);
+  }
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((ark_mem->ark_gamma/ark_mem->ark_gammap) - ONE);
+  jbad = (ark_mem->ark_nst == 0) || 
+    (ark_mem->ark_nst > arksls_mem->s_nstlj + ARKS_MSBJ) ||
+    ((convfail == ARK_FAIL_BAD_J) && (dgamma < ARKS_DGMAX)) ||
+    (convfail == ARK_FAIL_OTHER);
+  jok = !jbad;
+  
+  /* If jok = TRUE, use saved copy of J */
+  if (jok) {
+    *jcurPtr = FALSE;
+    SparseCopyMat(arksls_mem->s_savedJ, arksls_mem->s_A);
+
+  /* If jok = FALSE, call jac routine for new J value */
+  } else {
+    arksls_mem->s_nje++;
+    arksls_mem->s_nstlj = ark_mem->ark_nst;
+    *jcurPtr = TRUE;
+    SparseSetMatToZero(arksls_mem->s_A);
+
+    retval = arksls_mem->s_Jeval(ark_mem->ark_tn, ypred, fpred, 
+				 arksls_mem->s_A, arksls_mem->s_Jdata, 
+				 vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKSLS_JACFUNC_UNRECVR, "ARKSLS", 
+		      "arkSuperLUMTSetup", MSGSP_JACFUNC_FAILED);
+      arksls_mem->s_last_flag = ARKSLS_JACFUNC_UNRECVR;
+      return(ARKSLS_JACFUNC_UNRECVR);
+    }
+    if (retval > 0) {
+      arksls_mem->s_last_flag = ARKSLS_JACFUNC_RECVR;
+      return(ARKSLS_JACFUNC_RECVR);
+    }
+
+    SparseCopyMat(arksls_mem->s_A, arksls_mem->s_savedJ);
+  }
+
+  /* Scale J by -gamma */
+  SparseScaleMat(-ark_mem->ark_gamma, arksls_mem->s_A);
+
+  /* Add mass matrix to get A = M-gamma*J */
+  if (ark_mem->ark_mass_matrix) {
+
+    /* Compute mass matrix */
+    arksls_mass_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+    SparseSetMatToZero(arksls_mass_mem->s_M);
+    retval = arksls_mass_mem->s_Meval(ark_mem->ark_tn, 
+				      arksls_mass_mem->s_M, 
+				      arksls_mass_mem->s_Mdata, 
+				      vtemp1, vtemp2, vtemp3);
+    arksls_mass_mem->s_nme++;
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKSLS_MASSFUNC_UNRECVR, "ARKSLS", 
+		      "arkSuperLUMTSetup",  MSGSP_MASSFUNC_FAILED);
+      arksls_mem->s_last_flag = ARKSLS_MASSFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      arksls_mem->s_last_flag = ARKSLS_MASSFUNC_RECVR;
+      return(1);
+    }
+    
+    /* add to A */
+    retval = SparseAddMat(arksls_mem->s_A, arksls_mass_mem->s_M);
+    if (retval < 0) {
+      arkProcessError(ark_mem, ARKSLS_PACKAGE_FAIL, "ARKSLS", 
+		      "arkSuperLUMTSetup",  
+		      "Error in adding mass matrix to Jacobian");
+      arksls_mem->s_last_flag = ARKSLS_PACKAGE_FAIL;
+      return(retval);
+    }
+    if (retval > 0)  return(retval);
+    
+  } else {
+    SparseAddIdentityMat(arksls_mem->s_A);
+  }
+
+  /* free and reallocate sparse matrix */
+  if (slumt_data->s_A->Store) {
+    SUPERLU_FREE(slumt_data->s_A->Store);
+  }
+  dCreate_CompCol_Matrix(slumt_data->s_A, arksls_mem->s_A->M, 
+			 arksls_mem->s_A->N, arksls_mem->s_A->NNZ, 
+			 arksls_mem->s_A->data, 
+			 arksls_mem->s_A->indexvals, 
+			 arksls_mem->s_A->indexptrs, 
+			 SLU_NC, SLU_D, SLU_GE);
+
+  /* On first decomposition, set up reusable pieces */ 
+  if (arksls_mem->s_first_factorize) {
+
+    /* Get column permutation vector perm_c[], according to s_ordering */
+    get_perm_c(slumt_data->s_ordering, slumt_data->s_A, 
+	       slumt_data->perm_c);
+    refact= NO;
+    arksls_mem->s_first_factorize = 0;
+
+  } else {
+    /* Re-initialize statistics variables */
+    StatInit(arksls_mem->s_A->N, slumt_data->num_threads, 
+	     slumt_data->Gstat);
+    Destroy_CompCol_Permuted(slumt_data->s_AC);
+    refact= YES;
+  }
+
+  /* Initialize the option structure superlumt_options using the
+     user-input parameters. Subsequent calls will re-initialize
+     options.  Apply perm_c to columns of original A to form AC */
+  pdgstrf_init(slumt_data->num_threads, fact, trans, refact, 
+	       panel_size, relax, slumt_data->diag_pivot_thresh, 
+	       usepr, drop_tol, slumt_data->perm_c, 
+	       slumt_data->perm_r, work, lwork, slumt_data->s_A, 
+	       slumt_data->s_AC, slumt_data->superlumt_options, 
+	       slumt_data->Gstat);
+
+  /* Compute the LU factorization of A.
+     The following routine will create num_threads threads. */
+  pdgstrf(slumt_data->superlumt_options, slumt_data->s_AC, 
+	  slumt_data->perm_r, slumt_data->s_L, slumt_data->s_U, 
+	  slumt_data->Gstat, &retval);
+  if (retval != 0) {
+    arksls_mem->s_last_flag = retval;
+    return(ARKSLS_PACKAGE_FAIL);
+  }
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkSuperLUMTSolve:
+
+ This routine handles the solve operation for the ARKSuperLUMT 
+ linear solver module.  It calls the SuperLU_MT solve routine,
+ then returns ARKSLS_SUCCESS = 0.
+---------------------------------------------------------------*/
+static int arkSuperLUMTSolve(ARKodeMem ark_mem, N_Vector b, 
+			     N_Vector weight, N_Vector ycur, 
+			     N_Vector fcur)
+{
+  int info;
+  ARKSlsMem arksls_mem;
+  DNformat *Bstore;
+  SLUMTData slumt_data;
+  realtype *bd;
+  trans_t trans;
+  
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+  slumt_data = (SLUMTData) arksls_mem->s_solver_data;
+
+  bd = N_VGetArrayPointer(b);
+  Bstore = (DNformat *) (slumt_data->s_B->Store);
+  Bstore->nzval = bd;
+
+  /* Call SuperLUMT to solve the linear system using L and U */
+  trans = NOTRANS;
+  dgstrs(trans, slumt_data->s_L, slumt_data->s_U, 
+	 slumt_data->perm_r, slumt_data->perm_c, 
+	 slumt_data->s_B, slumt_data->Gstat, &info);
+
+  /* Scale the correction to account for change in gamma. */
+  if (ark_mem->ark_gamrat != ONE) 
+    N_VScale(TWO/(ONE + ark_mem->ark_gamrat), b, b);
+  Bstore->nzval = NULL;
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkSuperLUMTFree:
+
+ This routine frees memory specific to the ARKSuperLUMT linear 
+ solver.
+---------------------------------------------------------------*/
+static int arkSuperLUMTFree(ARKodeMem ark_mem)
+{
+  ARKSlsMem arksls_mem;
+  SLUMTData slumt_data;
+  
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+  slumt_data = (SLUMTData) arksls_mem->s_solver_data;
+
+  pxgstrf_finalize(slumt_data->superlumt_options, 
+		   slumt_data->s_AC);
+  free(slumt_data->perm_r);
+  free(slumt_data->perm_c);
+  free(slumt_data->superlumt_options);
+  Destroy_SuperNode_SCP( (slumt_data->s_L) );
+  Destroy_CompCol_NCP( (slumt_data->s_U) );
+  StatFree(slumt_data->Gstat);
+  free(slumt_data->Gstat);
+  
+  Destroy_SuperMatrix_Store(slumt_data->s_B);
+  SUPERLU_FREE(slumt_data->s_A->Store);
+  if (arksls_mem->s_A) {
+    SparseDestroyMat(arksls_mem->s_A);
+    arksls_mem->s_A = NULL;
+  }
+
+  if (arksls_mem->s_savedJ) {
+    SparseDestroyMat(arksls_mem->s_savedJ);
+    arksls_mem->s_savedJ = NULL;
+  }
+
+  free(slumt_data->s_B);
+  free(slumt_data->s_A);
+  free(slumt_data->s_AC);
+  free(slumt_data->s_L);
+  free(slumt_data->s_U);
+
+  free(slumt_data); 
+  slumt_data = NULL;
+  free(arksls_mem); 
+  ark_mem->ark_lmem = NULL;
+
+  return(0);
+}
+
+
+
+/*---------------------------------------------------------------
+ ARKMassSuperLUMT
+
+ This routine initializes the memory record and sets various 
+ function fields specific to the ARKODE / SuperLUMT mass matrix 
+ linear solver module.  ARKMassSuperLUMT first calls the 
+ existing mfree routine if this is not NULL.  Then it sets the 
+ ark_minit, ark_msetup, ark_msolve and ark_mfree fields in 
+ (*arkode_mem) to be arkMassSuperLUMTInit, arkMassSuperLUMTSetup, 
+ arkMassSuperLUMTSolve, and arkMassSuperLUMTFree, respectively.  
+ It allocates memory for a structure of type ARKSlsMassMemRec and
+ sets the ark_mass_mem field in (*arkode_mem) to the address of 
+ this structure.  It sets MassSetupNonNull in (*arkode_mem) to 
+ TRUE.  Finally, it allocates memory for SuperLUMT.  The return
+ value is ARKSLS_SUCCESS = 0, ARKSLS_LMEM_FAIL = -1, or 
+ ARKSLS_ILL_INPUT = -2.
+
+ NOTE: The SuperLUMT linear solver assumes a serial 
+       implementation of the NVECTOR package. Therefore, 
+       ARKMassSuperLUMT will first test for a compatible 
+       N_Vector internal representation by checking that the 
+       function N_VGetArrayPointer exists.
+---------------------------------------------------------------*/
+int ARKMassSuperLUMT(void *arkode_mem, int num_threads, 
+		     int n, int nnz, ARKSlsSparseMassFn smass)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMassMem arksls_mem;
+  SLUMTData slumt_data;
+  int *perm_c, *perm_r;
+  int nrhs, panel_size, relax;
+  double *bd;
+  SuperMatrix *B;
+
+  /* Return immediately if arkode_mem is NULL. */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "ARKMassSuperLUMT", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Test if the NVECTOR package is compatible with the solver */
+  if (ark_mem->ark_tempv->ops->nvgetarraypointer == NULL) {
+    arkProcessError(ark_mem, ARKSLS_ILL_INPUT, "ARKSLS", 
+		    "ARKMassSuperLUMT", MSGSP_BAD_NVECTOR);
+    return(ARKSLS_ILL_INPUT);
+  }
+
+  if (ark_mem->ark_mfree != NULL) ark_mem->ark_mfree(ark_mem);
+
+  /* Set main function fields in ark_mem, enable mass matrix. */
+  ark_mem->ark_mass_matrix = TRUE;
+  ark_mem->ark_minit  = arkMassSuperLUMTInit;
+  ark_mem->ark_msetup = arkMassSuperLUMTSetup;
+  ark_mem->ark_msolve = arkMassSuperLUMTSolve;
+  ark_mem->ark_mfree  = arkMassSuperLUMTFree;
+  ark_mem->ark_mtimes = arkMassSuperLUMTMultiply;
+  ark_mem->ark_mtimes_data = (void *) ark_mem;
+  ark_mem->ark_msolve_type = 3;
+
+  /* Get memory for ARKSlsMassMemRec. */
+  arksls_mem = (ARKSlsMassMem) malloc(sizeof(struct ARKSlsMassMemRec));
+  if (arksls_mem == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKMassSuperLUMT", MSGSP_MEM_FAIL);
+    return(ARKSLS_MEM_FAIL);
+  }
+  
+  /* Get memory for SLUMTData. */
+  slumt_data = (SLUMTData) malloc(sizeof(struct SLUMTDataRec));
+  if (slumt_data == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKMassSuperLUMT", MSGSP_MEM_FAIL);
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Initialize mass-matrix-related data */
+  arksls_mem->s_nme = 0;
+  arksls_mem->s_first_factorize = 1;
+  arksls_mem->s_Meval = smass;
+  arksls_mem->s_Mdata = ark_mem->ark_user_data;
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  ark_mem->ark_MassSetupNonNull = TRUE;
+  arksls_mem->sparsetype = CSC_MAT;
+
+  /* Allocate memory for M and M_lu */
+  arksls_mem->s_M = NULL;
+  arksls_mem->s_M = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (arksls_mem->s_M == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKMassSuperLUMT", MSGSP_MEM_FAIL);
+    free(slumt_data); slumt_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+  arksls_mem->s_M_lu = NULL;
+  arksls_mem->s_M_lu = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (arksls_mem->s_M_lu == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKMassSuperLUMT", MSGSP_MEM_FAIL);
+    SparseDestroyMat(arksls_mem->s_M);
+    free(slumt_data); slumt_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+
+  /* Set up memory for the permutations */
+  perm_r = NULL;
+  perm_r = (int *) malloc(n*sizeof(int));
+  if (perm_r == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKMassSuperLUMT", MSGSP_MEM_FAIL);
+    SparseDestroyMat(arksls_mem->s_M);
+    SparseDestroyMat(arksls_mem->s_M_lu);
+    free(slumt_data); slumt_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+  perm_c = NULL;
+  perm_c = (int *) malloc(n*sizeof(int));
+  if (perm_c == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MEM_FAIL, "ARKSLS", 
+		    "ARKMassSuperLUMT", MSGSP_MEM_FAIL);
+    SparseDestroyMat(arksls_mem->s_M);
+    SparseDestroyMat(arksls_mem->s_M_lu);
+    free(slumt_data); slumt_data = NULL;
+    free(arksls_mem); arksls_mem = NULL;
+    free(perm_r); perm_r = NULL;
+    return(ARKSLS_MEM_FAIL);
+  }
+  slumt_data->perm_r = perm_r;
+  slumt_data->perm_c = perm_c;
+
+  /* Set default parameters for SuperLU */
+  slumt_data->num_threads = num_threads;
+  slumt_data->diag_pivot_thresh = 1.0;
+
+  /* Allocate structures for SuperLU */
+  slumt_data->Gstat = (Gstat_t *) malloc(sizeof(Gstat_t));
+  slumt_data->s_A   = (SuperMatrix *) malloc(sizeof(SuperMatrix));
+  slumt_data->s_AC  = (SuperMatrix *) malloc(sizeof(SuperMatrix));
+  slumt_data->s_L   = (SuperMatrix *) malloc(sizeof(SuperMatrix));
+  slumt_data->s_U   = (SuperMatrix *) malloc(sizeof(SuperMatrix));
+  slumt_data->s_A->Store  = NULL;
+  slumt_data->s_AC->Store = NULL;
+  slumt_data->s_L->Store  = NULL;
+  slumt_data->s_U->Store  = NULL;
+  slumt_data->superlumt_options = 
+    (superlumt_options_t *) malloc(sizeof(superlumt_options_t));
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  StatAlloc(arksls_mem->s_M->N, num_threads, panel_size, 
+	    relax, slumt_data->Gstat);
+  
+  /* Create RHS matrix */
+  nrhs = 1;
+  bd = NULL;
+  B = (SuperMatrix *) malloc(sizeof(SuperMatrix));
+  B->Store = NULL;
+  dCreate_Dense_Matrix(B, n, nrhs, bd, n, 
+		       SLU_DN, SLU_D, SLU_GE);
+  slumt_data->s_B = B;
+
+  /* Set ordering to COLAMD as the arkode default use.
+     Users can set a different value with ARKMassSuperLUMTSetOrdering,
+     and the user-set value is loaded before any call to 
+     factorize the matrix in arkMassSuperLUMTSetup.  */
+  slumt_data->s_ordering = 3;
+
+  /* Attach linear solver memory to the integrator memory */
+  arksls_mem->s_solver_data = (void *) slumt_data;
+  ark_mem->ark_mass_mem = arksls_mem;
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassSuperLUMTInit:
+
+ This routine does remaining initializations specific to the 
+ ARKSuperLUMT mass matrix linear solver module.  It returns 0 if
+ successful.
+---------------------------------------------------------------*/
+static int arkMassSuperLUMTInit(ARKodeMem ark_mem)
+{
+  ARKSlsMassMem arksls_mem;
+  SLUMTData slumt_data;
+
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+  slumt_data = (SLUMTData) arksls_mem->s_solver_data;
+
+  arksls_mem->s_nme = 0;
+  arksls_mem->s_first_factorize = 1;
+
+  /* Allocate storage and initialize statistics variables. */
+  StatInit(arksls_mem->s_M->N, slumt_data->num_threads, 
+	   slumt_data->Gstat);
+  arksls_mem->s_Mdata = ark_mem->ark_user_data;
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassSuperLUMTSetup:
+
+  This routine does the setup operations for the ARKMassSuperLUMT 
+  linear solver module.  It calls the mass matrix evaluation 
+  routine, updates counters, and calls the LU factorization 
+  routine.  The return value is either
+     ARKSLS_SUCCESS = 0  if successful,
+     +1  if the Meval routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the Meval routine failed unrecoverably.
+---------------------------------------------------------------*/
+static int arkMassSuperLUMTSetup(ARKodeMem ark_mem, N_Vector vtemp1, 
+				 N_Vector vtemp2, N_Vector vtemp3)
+{
+  int retval;
+  int panel_size, relax, lwork;
+  double drop_tol;
+  fact_t fact;
+  trans_t trans;
+  yes_no_t refact, usepr;
+  ARKSlsMassMem arksls_mem;
+  SLUMTData slumt_data;
+  void *work;
+  
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+  slumt_data = (SLUMTData) arksls_mem->s_solver_data;
+
+  /* Set option values for SuperLU_MT */
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  fact = EQUILIBRATE;
+  trans = NOTRANS;
+  usepr = NO;
+  drop_tol = 0.0;
+  lwork = 0;
+  work = NULL;
+
+  /* Check that mass matrix eval routine is set */
+  if (arksls_mem->s_Meval == NULL) {
+    arkProcessError(ark_mem, ARKSLS_MASS_NOSET, "ARKSLS", 
+		    "arkMassSuperLUMTSetup", MSGSP_MASS_NOSET);
+    free(arksls_mem); arksls_mem = NULL;
+    return(ARKSLS_MASS_NOSET);
+  }
+
+  /* call Meval routine for new M matrix */
+  SparseSetMatToZero(arksls_mem->s_M);
+  retval = arksls_mem->s_Meval(ark_mem->ark_tn, arksls_mem->s_M, 
+			       arksls_mem->s_Mdata, vtemp1, 
+			       vtemp2, vtemp3);
+  arksls_mem->s_nme++;
+  if (retval < 0) {
+    arkProcessError(ark_mem, ARKSLS_MASSFUNC_UNRECVR, "ARKSLS", 
+		    "arkMassSuperLUMTSetup", MSGSP_MASSFUNC_FAILED);
+    arksls_mem->s_last_flag = ARKSLS_MASSFUNC_UNRECVR;
+    return(ARKSLS_MASSFUNC_UNRECVR);
+  }
+  if (retval > 0) {
+    arksls_mem->s_last_flag = ARKSLS_MASSFUNC_RECVR;
+    return(ARKSLS_MASSFUNC_RECVR);
+  }
+
+  /* Copy M into M_lu for LU decomposition */
+  SparseCopyMat(arksls_mem->s_M, arksls_mem->s_M_lu);
+
+
+  /* free and reallocate sparse matrix */
+  if (slumt_data->s_A->Store) {
+    SUPERLU_FREE(slumt_data->s_A->Store);
+  }
+  dCreate_CompCol_Matrix(slumt_data->s_A, arksls_mem->s_M->M, 
+			 arksls_mem->s_M->N, arksls_mem->s_M->NNZ, 
+			 arksls_mem->s_M->data, 
+			 arksls_mem->s_M->indexvals, 
+			 arksls_mem->s_M->indexptrs, 
+			 SLU_NC, SLU_D, SLU_GE);
+
+  /* On first decomposition, set up reusable pieces */ 
+  if (arksls_mem->s_first_factorize) {
+
+    /* Get column permutation vector perm_c[], according to s_ordering */
+    get_perm_c(slumt_data->s_ordering, slumt_data->s_A, 
+	       slumt_data->perm_c);
+    refact= NO;
+    arksls_mem->s_first_factorize = 0;
+
+  } else {
+    /* Re-initialize statistics variables */
+    StatInit(arksls_mem->s_M->N, slumt_data->num_threads, 
+	     slumt_data->Gstat);
+    Destroy_CompCol_Permuted(slumt_data->s_AC);
+    refact= YES;
+  }
+
+  /* Initialize the option structure superlumt_options using the
+     user-input parameters. Subsequent calls will re-initialize
+     options.  Apply perm_c to columns of original A to form AC */
+  pdgstrf_init(slumt_data->num_threads, fact, trans, refact, 
+	       panel_size, relax, slumt_data->diag_pivot_thresh, 
+	       usepr, drop_tol, slumt_data->perm_c, 
+	       slumt_data->perm_r, work, lwork, slumt_data->s_A, 
+	       slumt_data->s_AC, slumt_data->superlumt_options, 
+	       slumt_data->Gstat);
+
+  /* Compute the LU factorization of A.
+     The following routine will create num_threads threads. */
+  pdgstrf(slumt_data->superlumt_options, slumt_data->s_AC, 
+	  slumt_data->perm_r, slumt_data->s_L, slumt_data->s_U, 
+	  slumt_data->Gstat, &retval);
+  if (retval != 0) {
+    arksls_mem->s_last_flag = retval;
+    return(ARKSLS_PACKAGE_FAIL);
+  }
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassSuperLUMTSolve:
+
+ This routine handles the solve operation for the ARKSuperLUMT 
+ mass matrix linear solver module.  It calls the SuperLU_MT 
+ solve routine, then returns ARKSLS_SUCCESS = 0.
+---------------------------------------------------------------*/
+static int arkMassSuperLUMTSolve(ARKodeMem ark_mem, N_Vector b, 
+				 N_Vector weight)
+{
+  int info;
+  ARKSlsMassMem arksls_mem;
+  DNformat *Bstore;
+  SLUMTData slumt_data;
+  realtype *bd;
+  trans_t trans;
+  
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+  slumt_data = (SLUMTData) arksls_mem->s_solver_data;
+
+  bd = N_VGetArrayPointer(b);
+  Bstore = (DNformat *) (slumt_data->s_B->Store);
+  Bstore->nzval = bd;
+
+  /* Call SuperLUMT to solve the linear system using L and U */
+  trans = NOTRANS;
+  dgstrs(trans, slumt_data->s_L, slumt_data->s_U, 
+	 slumt_data->perm_r, slumt_data->perm_c, 
+	 slumt_data->s_B, slumt_data->Gstat, &info);
+
+  arksls_mem->s_last_flag = ARKSLS_SUCCESS;
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ arkMassSuperLUMTFree:
+
+ This routine frees memory specific to the ARKSuperLUMT mass 
+ matrix linear solver.
+---------------------------------------------------------------*/
+static int arkMassSuperLUMTFree(ARKodeMem ark_mem)
+{
+  ARKSlsMassMem arksls_mem;
+  SLUMTData slumt_data;
+  
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+  slumt_data = (SLUMTData) arksls_mem->s_solver_data;
+
+  pxgstrf_finalize(slumt_data->superlumt_options, 
+		   slumt_data->s_AC);
+  free(slumt_data->perm_r);
+  free(slumt_data->perm_c);
+  free(slumt_data->superlumt_options);
+  Destroy_SuperNode_SCP( (slumt_data->s_L) );
+  Destroy_CompCol_NCP( (slumt_data->s_U) );
+  StatFree(slumt_data->Gstat);
+  free(slumt_data->Gstat);
+  
+  Destroy_SuperMatrix_Store(slumt_data->s_B);
+  SUPERLU_FREE(slumt_data->s_A->Store);
+  if (arksls_mem->s_M) {
+    SparseDestroyMat(arksls_mem->s_M);
+    arksls_mem->s_M = NULL;
+  }
+
+  if (arksls_mem->s_M_lu) {
+    SparseDestroyMat(arksls_mem->s_M_lu);
+    arksls_mem->s_M_lu = NULL;
+  }
+
+  free(slumt_data->s_B);
+  free(slumt_data->s_A);
+  free(slumt_data->s_AC);
+  free(slumt_data->s_L);
+  free(slumt_data->s_U);
+
+  free(slumt_data); 
+  slumt_data = NULL;
+  free(arksls_mem); 
+  ark_mem->ark_mass_mem = NULL;
+
+  return(0);
+}
+
+
+/*===============================================================
+ Utility Functions
+===============================================================*/
+
+/*---------------------------------------------------------------
+ arkMassSuperLUMTMultiply:
+
+ Multiplies the mass matrix by the vector v to fill in the 
+ vector Mv.
+---------------------------------------------------------------*/
+static int arkMassSuperLUMTMultiply(N_Vector v, N_Vector Mv, 
+				    realtype t, void *arkode_mem)
+{
+
+  /* extract the SlsMassMem structure from the arkode_mem pointer */
+  ARKodeMem ark_mem;
+  ARKSlsMassMem arksls_mem;
+  realtype *vdata=NULL, *Mvdata=NULL;
+
+  /* Return immediately if arkode_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "arkMassSuperLUMTMultiply", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+
+  /* zero out the result */
+  N_VConst(0.0, Mv);
+
+  /* access the vector arrays (since they must be serial vectors) */
+  vdata = N_VGetArrayPointer(v);
+  Mvdata = N_VGetArrayPointer(Mv);
+  if (vdata == NULL || Mvdata == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "arkMassSuperLUMTMultiply", 
+		    "Vector data un-allocated.");
+    return(ARKSLS_MEM_NULL);
+  }
+
+  /* perform matrix-vector product with arksls_mem->s_M and return */
+  if (SparseMatvec(arksls_mem->s_M, vdata, Mvdata) != 0) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "arkMassSuperLUMTMultiply", 
+		    "Mass matrix data un-allocated.");
+    return(ARKSLS_MEM_NULL);
+  }
+
+  return(0);
+
+}
+
+
+/*===============================================================
+ Optional Input Specification Functions
+===============================================================*/
+
+
+/*---------------------------------------------------------------
+ ARKSuperLUMTSetOrdering:
+
+ Sets the ordering used by SuperLUMT for reducing fill.
+ Options are: 
+     0 for natural ordering
+     1 for minimal degree ordering on A'*A
+     2 for minimal degree ordering on A'+A
+     3 for AMD ordering for unsymmetric matrices
+ The default used in SUNDIALS is 3 for COLAMD.
+---------------------------------------------------------------*/
+int ARKSuperLUMTSetOrdering(void *arkode_mem, int ordering_choice)
+{
+  ARKodeMem ark_mem;
+  ARKSlsMem arksls_mem;
+  SLUMTData slumt_data;
+
+  /* Return immediately if ark_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "ARKSuperLUMTSetOrdering", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice < 0) || (ordering_choice > 3) ) {
+    arkProcessError(NULL, ARKSLS_ILL_INPUT, "ARKSLS", 
+		    "ARKSuperLUMTSetOrdering", MSGSP_ILL_INPUT);
+    return(ARKSLS_ILL_INPUT);
+  }
+
+  arksls_mem = (ARKSlsMem) ark_mem->ark_lmem;
+  slumt_data = (SLUMTData) arksls_mem->s_solver_data;
+
+  slumt_data->s_ordering = ordering_choice;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+ ARKMassSuperLUMTSetOrdering:
+
+ Sets the ordering used by SuperLUMT for reducing fill. Options 
+ are: 
+     0 for natural ordering
+     1 for minimal degree ordering on A'*A
+     2 for minimal degree ordering on A'+A
+     3 for AMD ordering for unsymmetric matrices
+ The default used in SUNDIALS is 3 for COLAMD.
+---------------------------------------------------------------*/
+int ARKMassSuperLUMTSetOrdering(void *arkode_mem, int ordering_choice)
+{
+  ARKodeMem     ark_mem;
+  ARKSlsMassMem arksls_mem;
+  SLUMTData     slumt_data;
+
+  /* Return immediately if ark_mem is NULL */
+  if (arkode_mem == NULL) {
+    arkProcessError(NULL, ARKSLS_MEM_NULL, "ARKSLS", 
+		    "ARKMassSuperLUMTSetOrdering", MSGSP_ARKMEM_NULL);
+    return(ARKSLS_MEM_NULL);
+  }
+  ark_mem = (ARKodeMem) arkode_mem;
+
+  /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice < 0) || (ordering_choice > 3) ) {
+    arkProcessError(NULL, ARKSLS_ILL_INPUT, "ARKSLS", 
+		    "ARKMassSuperLUMTSetOrdering", MSGSP_ILL_INPUT);
+    return(ARKSLS_ILL_INPUT);
+  }
+
+  arksls_mem = (ARKSlsMassMem) ark_mem->ark_mass_mem;
+  slumt_data = (SLUMTData) arksls_mem->s_solver_data;
+
+  slumt_data->s_ordering = ordering_choice;
+
+  return(ARKSLS_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------
+   EOF
+---------------------------------------------------------------*/
diff --git a/src/arkode/fcmix/CMakeLists.txt b/src/arkode/fcmix/CMakeLists.txt
new file mode 100644
index 0000000..cff9228
--- /dev/null
+++ b/src/arkode/fcmix/CMakeLists.txt
@@ -0,0 +1,76 @@
+# ---------------------------------------------------------------
+# Programmer:  Daniel R. Reynolds @ SMU
+# ---------------------------------------------------------------
+# Copyright (c) 2013, Southern Methodist University.
+# All rights reserved.
+# For details, see the LICENSE file.
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the FARKODE library
+
+# Add variable farkode_SOURCES with the sources for the FARKODE library
+SET(farkode_SOURCES
+  farkadapt.c
+  farkband.c
+  farkbandmass.c
+  farkbbd.c
+  farkbp.c
+  farkdense.c
+  farkdensemass.c
+  farkewt.c
+  farkexpstab.c
+  farkjtimes.c
+  farkmtimes.c
+  farkode.c
+  farkpreco.c
+  farkmasspreco.c
+  farkroot.c
+  )
+
+IF(LAPACK_FOUND)
+  SET(farkode_BL_SOURCES farklapack.c farklapdense.c farklapdensemass.c farklapband.c farklapbandmass.c)
+ELSE(LAPACK_FOUND)
+  SET(farkode_BL_SOURCES "")
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND OR SUPERLUMT_FOUND)
+  SET(farkode_SPARSE_SOURCES farksparse.c farksparsemass.c)
+ELSE(SPARSE_FOUND)
+  SET(farkode_SPARSE_SOURCES "")
+ENDIF(KLU_FOUND OR SUPERLUMT_FOUND)
+
+IF(KLU_FOUND)
+  SET(farkode_KLU_SOURCES farkklu.c)
+ELSE(KLU_FOUND)
+  SET(farkode_KLU_SOURCES "")
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  SET(farkode_SUPERLUMT_SOURCES farksuperlumt.c)
+ELSE(SUPERLUMT_FOUND)
+  SET(farkode_SUPERLUMT_SOURCES "")
+ENDIF(SUPERLUMT_FOUND)
+
+# Add source directories to include directories for access to
+# implementation only header files (both for farkode and arkode)
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(..)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Only build STATIC libraries (we cannot build shared libraries 
+# for the FCMIX interfaces due to unresolved symbol errors 
+# coming from inexistent user-provided functions)
+
+# Add the build target for the FARKODE library
+ADD_LIBRARY(sundials_farkode_static STATIC ${farkode_SOURCES} ${farkode_BL_SOURCES} ${farkode_SPARSE_SOURCES} ${farkode_KLU_SOURCES} ${farkode_SUPERLUMT_SOURCES})
+
+# Set the library name and make sure it is not deleted
+SET_TARGET_PROPERTIES(sundials_farkode_static
+  PROPERTIES OUTPUT_NAME sundials_farkode CLEAN_DIRECT_OUTPUT 1)
+
+# Install the FARKODE library
+INSTALL(TARGETS sundials_farkode_static DESTINATION lib)
+
+#
+MESSAGE(STATUS "Added ARKODE FCMIX module")
diff --git a/src/arkode/fcmix/farkadapt.c b/src/arkode/fcmix/farkadapt.c
new file mode 100644
index 0000000..013fe40
--- /dev/null
+++ b/src/arkode/fcmix/farkadapt.c
@@ -0,0 +1,82 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE, for the case of a 
+ * user-supplied step adaptivity routine.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_ADAPT(realtype *Y, realtype *T, realtype *H1, 
+			 realtype *H2, realtype *H3, realtype *E1, 
+			 realtype *E2, realtype *E3, int *Q, int *P, 
+			 realtype *HNEW, long int *IPAR, 
+			 realtype *RPAR, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeSetAdaptivityFn; see 
+   farkode.h for further information */
+void FARK_ADAPTSET(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = ARKodeSetAdaptivityFn(ARK_arkodemem, NULL, NULL);
+  } else {
+    *ier = ARKodeSetAdaptivityFn(ARK_arkodemem, FARKAdapt, 
+				 ARK_arkodemem);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied fortran routine FARKADAPT; see 
+   farkode.h for further information */
+int FARKAdapt(N_Vector y, realtype t, realtype h1, realtype h2, 
+	      realtype h3, realtype e1, realtype e2, realtype e3, 
+	      int q, int p, realtype *hnew, void *user_data)
+{
+  int ier = 0;
+  realtype *ydata;
+  FARKUserData ARK_userdata;
+
+  ydata  = N_VGetArrayPointer(y);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_ADAPT(ydata, &t, &h1, &h2, &h3, &e1, &e2, &e3, &q, &p, 
+	     hnew, ARK_userdata->ipar, ARK_userdata->rpar, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkband.c b/src/arkode/fcmix/farkband.c
new file mode 100644
index 0000000..2177ea0
--- /dev/null
+++ b/src/arkode/fcmix/farkband.c
@@ -0,0 +1,97 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKBAND, for the case 
+ * of a user-supplied Jacobian approximation routine.                
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_band.h>
+
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_BJAC(long int *N, long int *MU, long int *ML,
+  			long int *EBAND, realtype *T,
+  			realtype *Y, realtype *FY,
+  			realtype *BJAC, realtype *H,
+  			long int *IPAR, realtype *RPAR,
+  			realtype *V1, realtype *V2,
+  			realtype *V3, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface routine to ARKDlsSetBandJacFn; see farkode.h 
+   for further details */
+void FARK_BANDSETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = ARKDlsSetBandJacFn(ARK_arkodemem, NULL);
+  } else {
+    *ier = ARKDlsSetBandJacFn(ARK_arkodemem, FARKBandJac);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran subroutine FARKBJAC; see 
+   farkode.h for further details */
+int FARKBandJac(long int N, long int mupper, 
+		long int mlower, realtype t, N_Vector y, 
+		N_Vector fy, DlsMat J, void *user_data, 
+		N_Vector vtemp1, N_Vector vtemp2, 
+		N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *fydata, *jacdata, *v1data, *v2data, *v3data;
+  realtype h;
+  long int eband;
+  FARKUserData ARK_userdata;
+
+  ARKodeGetLastStep(ARK_arkodemem, &h);
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  eband   = (J->s_mu) + mlower + 1;
+  jacdata = BAND_COL(J,0) - mupper;
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_BJAC(&N, &mupper, &mlower, &eband, &t, ydata, fydata, 
+	    jacdata, &h, ARK_userdata->ipar, ARK_userdata->rpar, 
+	    v1data, v2data, v3data, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkbandmass.c b/src/arkode/fcmix/farkbandmass.c
new file mode 100644
index 0000000..8d69bb5
--- /dev/null
+++ b/src/arkode/fcmix/farkbandmass.c
@@ -0,0 +1,84 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKBAND, for the case 
+ * of a user-supplied Jacobian approximation routine.                
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_band.h>
+
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_BMASS(long int *N, long int *MU, long int *ML,
+  			 long int *EBAND, realtype *T,
+  			 realtype *BMASS, long int *IPAR,
+  			 realtype *RPAR, realtype *V1,
+  			 realtype *V2, realtype *V3, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface routine to ARKDlsSetBandMassFn; see farkode.h 
+   for further details */
+void FARK_BANDSETMASS(int *ier)
+{
+  *ier = ARKDlsSetBandMassFn(ARK_arkodemem, FARKBandMass);
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran subroutine FARKBMASS; see 
+   farkode.h for further details */
+int FARKBandMass(long int N, long int mupper, long int mlower, 
+		 realtype t, DlsMat M, void *user_data, 
+		 N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *massdata, *v1data, *v2data, *v3data;
+  long int eband;
+  FARKUserData ARK_userdata;
+
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  eband   = (M->s_mu) + mlower + 1;
+  massdata = BAND_COL(M,0) - mupper;
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_BMASS(&N, &mupper, &mlower, &eband, &t, massdata, 
+	     ARK_userdata->ipar, ARK_userdata->rpar, v1data, 
+	     v2data, v3data, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkbbd.c b/src/arkode/fcmix/farkbbd.c
new file mode 100644
index 0000000..15db62f
--- /dev/null
+++ b/src/arkode/fcmix/farkbbd.c
@@ -0,0 +1,129 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This module contains the routines necessary to interface with 
+ * the ARKBBDPRE module and user-supplied Fortran routines.
+ * The routines here call the generically named routines and 
+ * providea standard interface to the C code of the ARKBBDPRE 
+ * package.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "farkbbd.h"
+#include <arkode/arkode_bbdpre.h>
+
+/*=============================================================*/
+
+/* Prototypes of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_GLOCFN(long int *NLOC, realtype *T, 
+			  realtype *YLOC, realtype *GLOC,
+			  long int *IPAR, realtype *RPAR,
+			  int *ier);
+  extern void FARK_COMMFN(long int *NLOC, realtype *T, 
+			  realtype *Y, long int *IPAR, 
+			  realtype *RPAR, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKBBDPrecInit; see farkbbd.h 
+   for further details. */
+void FARK_BBDINIT(long int *Nloc, long int *mudq, long int *mldq, 
+		  long int *mu, long int *ml, realtype* dqrely, 
+		  int *ier)
+{
+  /* Notes: FARKgloc is a pointer to the ARKLocalFn function, 
+     and FARKcfn is a pointer to the ARKCommFn function */
+  *ier = ARKBBDPrecInit(ARK_arkodemem, *Nloc, *mudq, *mldq, 
+			*mu, *ml, *dqrely, FARKgloc, FARKcfn);
+  return; 
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKBBDPrecReInit; see farkbbd.h 
+   for further details. */
+void FARK_BBDREINIT(long int *Nloc, long int *mudq, 
+		    long int *mldq, realtype* dqrely, int *ier)
+{
+  *ier = ARKBBDPrecReInit(ARK_arkodemem, *mudq, *mldq, *dqrely);
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKGLOCFN; see 
+   farkbbd.h for further details. */
+int FARKgloc(long int Nloc, realtype t, N_Vector yloc, 
+	     N_Vector gloc, void *user_data)
+{
+  int ier;
+  realtype *yloc_data, *gloc_data;
+  FARKUserData ARK_userdata;
+
+  yloc_data = N_VGetArrayPointer(yloc);
+  gloc_data = N_VGetArrayPointer(gloc);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_GLOCFN(&Nloc, &t, yloc_data, gloc_data, 
+             ARK_userdata->ipar, ARK_userdata->rpar, &ier);
+  return(ier);
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKCOMMFN; see 
+   farkbbd.h for further details. */
+int FARKcfn(long int Nloc, realtype t, 
+	    N_Vector y, void *user_data)
+{
+  int ier;
+  realtype *yloc;
+  FARKUserData ARK_userdata;
+
+  yloc = N_VGetArrayPointer(y);
+  ARK_userdata = (FARKUserData) user_data;
+  FARK_COMMFN(&Nloc, &t, yloc, ARK_userdata->ipar, 
+	      ARK_userdata->rpar, &ier);
+  return(ier);
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routines ARKBBDPrecGetWorkSpace and 
+   ARKBBDPrecGetNumGfnEvals; see farkbbd.h for further details */
+void FARK_BBDOPT(long int *lenrwbbd, long int *leniwbbd, 
+		 long int *ngebbd)
+{
+  ARKBBDPrecGetWorkSpace(ARK_arkodemem, lenrwbbd, leniwbbd);
+  ARKBBDPrecGetNumGfnEvals(ARK_arkodemem, ngebbd);
+  return;
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkbbd.h b/src/arkode/fcmix/farkbbd.h
new file mode 100644
index 0000000..2a82efe
--- /dev/null
+++ b/src/arkode/fcmix/farkbbd.h
@@ -0,0 +1,645 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the Fortran interface include file for the BBD
+ * preconditioner (ARKBBDPRE)
+ *--------------------------------------------------------------*/
+
+/*===============================================================
+                   FARKBBD Interface Package
+ 
+ The FARKBBD Interface Package is a package of C functions which,
+ together with the FARKODE Interface Package, support the use of
+ the ARKODE solver and parallel N_Vector module, along with the 
+ ARKBBDPRE preconditioner module, for the solution of ODE systems
+ in a mixed Fortran/C setting.  The combination of ARKODE and 
+ ARKBBDPRE solves the linear systems arising from the solution 
+ of the implicit portions of the ODE system
+       dy/dt = fe(t,y) + fi(t,y)  
+ using a Krylov iterative linear solver (SPGMR, SPTFQMR, SPBCG, 
+ SPFGMR or PCG), and with a preconditioner that is block-diagonal 
+ with banded blocks.  While ARKODE and ARKBBDPRE are written in C, 
+ it is assumed here that the user's calling program and user-
+ supplied problem-defining routines are written in Fortran.
+ 
+ The user-callable functions in this package, with the 
+ corresponding ARKODE and ARKBBDPRE functions, are as follows: 
+
+   Fortran               ARKODE
+   --------------        ---------------------------
+   FARKBBDININT          ARKBBDPrecInit
+   FARKBBDREINIT         ARKBBDPrecReInit
+   FARKBBDOPT            (accesses optional outputs)
+   --------------        ---------------------------
+ 
+ In addition to the Fortran implicit right-hand side function 
+ FARKIFUN, the user-supplied functions used by this package are
+ listed below, each with the corresponding interface function 
+ which calls it (and its type within ARKBBDPRE or ARKODE):
+
+   Fortran          ARKODE           Type
+   -------------    ----------       ----------------
+   FARKGLOCFN       FARKgloc         ARKLocalFn
+   FARKCOMMFN       FARKcfn          ARKCommFn
+   FARKJTIMES(*)    FARKJtimes       ARKSpilsJtimesFn
+   -------------    ----------       ----------------
+   (*) = optional
+
+ Important notes on portability:
+
+ The names of all user-supplied routines here are fixed, in 
+ order to maximize portability for the resulting mixed-language 
+ program.
+
+ Additionally, the names of the interface functions, and the 
+ names of the Fortran user routines called by them, appear as 
+ dummy names which are mapped to actual values by a series of 
+ definitions in the header file farkbbd.h.
+ 
+ ================================================================
+ 
+            Usage of the FARKODE/FARKBBD Interface Packages
+ 
+ The usage of the combined interface packages FARKODE and 
+ FARKBBD requires calls to seven to twelve interface functions, 
+ and three or four user-supplied routines which define the 
+ problem to be solved and indirectly define the preconditioner.  
+ These function calls and user routines are summarized separately
+ below.
+ 
+ Some details are omitted, and the user is referred to the ARKODE
+ user document for more complete information.
+ 
+ (1) User-supplied implicit right-hand side routine: FARKIFUN
+     If any portion of the ODE system should be treated 
+     implicitly (and hence would require a linear solver at all),
+     the user must supply the following Fortran routine:
+
+       SUBROUTINE FARKIFUN(T, Y, YDOT, IPAR, RPAR, IER)
+
+     Sets the YDOT array to fi(T,Y), the implicit portion of the 
+     right-hand side of the ODE system, as function of time T and
+     the state variable array Y.
+
+     The arguments are:
+       Y    -- array containing state variables [realtype, input]
+       YDOT -- array containing state derivatives [realtype, 
+               output]
+       IPAR -- array containing integer user data that was passed
+               to FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                 >0 if a recoverable error occurred,
+                 <0 if an unrecoverable error ocurred.
+ 
+ (2) User-supplied routines to define preconditoner: FARKGLOCFN
+     and FARKCOMMFN
+ 
+     The routines in the ARKBBDPRE module provide a 
+     preconditioner matrix for ARKODE that is block-diagonal 
+     with banded blocks.  The blocking corresponds to the 
+     distribution of the dependent variable vector y among the 
+     processors.  Each preconditioner block is generated from the
+     Jacobian of the local part (on the current processor) of a 
+     given function g(t,y) approximating fi(t,y).  The blocks are
+     generated by a difference quotient scheme on each processor
+     independently, utilizing an assumed banded structure with
+     given half-bandwidths.  A separate pair of half-bandwidths
+     defines the band matrix retained.
+ 
+ (2.1) Local approximate function FARKGLOCFN.
+
+     The user must supply a subroutine of the form
+
+       SUBROUTINE FARKGLOCFN(NLOC, T, YLOC, GLOC, IPAR, 
+      &                      RPAR, IER)
+       DIMENSION YLOC(*), GLOC(*), IPAR(*), RPAR(*)
+
+     Sets the GLOC array to the function g(T,YLOC) which 
+     approximates the right-hand side function fi(T,YLOC).  This 
+     function is to be computed locally, i.e. without 
+     inter-processor communication (the case where g is 
+     mathematically identical to fi is allowed).  
+
+     The arguments are:
+       NLOC -- local problem size [long int, input]
+       T    -- current time [realtype, input]
+       YLOC -- array containing local state variables 
+               [realtype, input]
+       GLOC -- array containing local state derivatives 
+               [realtype, output]
+       IPAR -- array containing integer user data that was passed
+               to FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                 >0 if a recoverable error occurred,
+                 <0 if an unrecoverable error ocurred.
+ 
+ (2.2) Communication function FARKCOMMFN.
+
+     The user must also supply a subroutine of the form:
+
+       SUBROUTINE FARKCOMMFN(NLOC, T, YLOC, IPAR, RPAR, IER)
+       DIMENSION YLOC(*), IPAR(*), RPAR(*)
+
+     This performs all inter-processor communication necessary to
+     evaluate g described above.  It is expected to save 
+     communicated data in work space defined by the user, and 
+     made available to ARKLOCFN.  Each call to the FARKCOMMFN is
+     preceded by a call to FARKIFUN with the same (T,YLOC) 
+     arguments.  Thus FARKCOMMFN can omit any communications done
+     by FARKIFUN if relevant to the evaluation of g.
+
+     The arguments are:
+       NLOC -- local problem size [long int, input]
+       T    -- current time [realtype, input]
+       YLOC -- array containing local state variables 
+               [realtype, input]
+       IPAR -- array containing integer user data that was passed
+               to FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                 >0 if a recoverable error occurred,
+                 <0 if an unrecoverable error ocurred.
+ 
+ (3) Optional user-supplied Jacobian-vector product: FARKJTIMES
+
+     As an option, the user may supply a routine that computes 
+     the product of the system Jacobian  J = dfi(t,y)/dy and a 
+     given vector v.  If supplied, it must have the following 
+     form:
+
+       SUBROUTINE FARKJTIMES(V, FJV, T, Y, FY, H, IPAR, RPAR, 
+      &                      WORK, IER)
+
+     Typically this routine will use only NEQ, T, Y, V, and FJV. 
+     It must compute the product vector J*v where the vector V, 
+     and store the product in FJV.  
+
+     The arguments are:
+       V    -- vector to multiply [realtype, input]
+       FJV  -- product vector [realtype, output]
+       T    -- current time [realtype, input]
+       Y    -- state variables [realtype, input]
+       FY   -- state derivatives [realtype, input]
+       H    -- current step size [realtype, input]
+       IPAR -- array containing integer user data that was passed
+               to FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       WORK -- array containing temporary workspace of same size
+               as Y [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                  nonzero if an error.
+
+ (4) Initialization:  FNVINITP, FARKMALLOC, linear solver
+     initialization, and FARKBBDINIT.
+ 
+ (4.1) To initialize the parallel vector specification, the user
+     must make the following call:
+
+        CALL FNVINITP(4, NLOCAL, NGLOBAL, IER)
+
+     where the first argument is an int containing the ARKODE 
+     solver ID (4). The other arguments are:
+        NLOCAL = local vector size on this processor 
+	   [long int, input]
+        NGLOBAL = system size, and the global size of vectors 
+	   (the sum of all values of NLOCAL) [long int, input]
+        IER = return completion flag [int, ouptut]. 
+                  0 = success, 
+                 -1 = failure.
+
+     Note: If MPI was initialized by the user, the communicator 
+     must be set to MPI_COMM_WORLD.  If not, this routine 
+     initializes MPI and sets the communicator equal to 
+     MPI_COMM_WORLD.
+ 
+ (4.2) To set various problem and solution parameters and 
+     allocate internal memory, make the following call:
+
+       CALL FARKMALLOC(T0, Y0, IMEX, IATOL, RTOL, ATOL, IOUT,
+      &                ROUT, IPAR, RPAR, IER)
+
+     The arguments are:
+        T0 = initial value of t [realtype, input]
+	Y0 = array of initial conditions [realtype, input]
+	IMEX = flag denoting integration method [int, input]: 
+                  0 = implicit, 
+                  1 = explicit, 
+                  2 = imex
+        IATOL = type for absolute tolerance ATOL [int, input]: 
+                  1 = scalar, 
+                  2 = array,
+                  3 = user-supplied function; the user must 
+                      supply a routine FARKEWT to compute the 
+		      error weight vector.
+        RTOL = scalar relative tolerance [realtype, input]
+	ATOL = scalar/array absolute tolerance [realtype, input]
+	IOUT = array of length 22 for integer optional outputs
+	   [long int, output]
+	ROUT = array of length 6 for real optional outputs 
+	   [realtype, output]
+	IPAR = array of user integer data [long int, in/out]
+	RPAR = array with user real data [realtype, in/out]
+	IER  = return completion flag [int, output]:
+                  0 = SUCCESS,
+                 -1 = failure (see printed message for details).
+
+     The user data arrays IPAR and RPAR are passed unmodified to 
+     all subsequent calls to user-provided routines. Changes to
+     either array inside a user-provided routine will be 
+     propagated. Using these two arrays, the user can dispense 
+     with COMMON blocks to pass data betwen user-provided 
+     routines. 
+
+ (4.3) Attach one of the SPILS linear solvers.
+    
+ (4.3A) To specify the SPGMR (Scaled Preconditioned GMRES) 
+     linear solver make the following call:
+
+       CALL FARKSPGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)
+
+     The arguments are:
+        IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+	IGSTYPE = Gram-schmidt process type [int, input]: 
+              1 = modified G-S
+              2 = classical G-S.
+	MAXL = maximum Krylov subspace dimension [int; input]; 
+	      0 = default
+	DELT = convergence tolerance factor [realtype, input]; 
+	      0.0 = default.
+	IER = error return flag [int, output]: 
+	       0 = success; 
+	      <0 = an error occured
+ 
+     If a sequence of problems of the same size is being solved 
+     using the SPGMR linear solver, then following the call to 
+     FARKREINIT, a call to the FARKSPGMRREINIT routine is needed
+     if any of IPRETYPE, IGSTYPE, DELT is being changed.  In that
+     case, call FARKSPGMRREINIT as follows:
+
+       CALL FARKSPGMRREINIT(IPRETYPE, IGSTYPE, DELT, IER)
+
+     The arguments have the same meanings as for FARKSPGMR.  If 
+     MAXL is being changed, then the user should call FARKSPGMR 
+     instead.
+ 
+ (4.3B) To specify the SPBCG (Scaled Preconditioned Bi-CGSTAB) 
+     linear solver make the following call:
+
+       CALL FARKSPBCG(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+       MAXL = maximum Krylov subspace dimension [int, input]; 
+              0 = default.
+       DELT = convergence tolerance factor [realtype, input]; 
+              0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     If a sequence of problems of the same size is being solved 
+     using the SPBCG linear solver, then following the call to 
+     FARKREINIT, a call to the FARKSPBCGREINIT routine is needed
+     if any of its arguments is being changed.  The call is:
+
+       CALL FARKSPBCGREINIT(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments have the same meanings as for FARKSPBCG.
+
+ (4.3C) To specify the SPTFQMR (Scaled Preconditioned TFQMR) 
+     linear solver make the following call:
+
+       CALL FARKSPTFQMR(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+       MAXL = maximum Krylov subspace dimension [int, input]; 
+              0 = default.
+       DELT = convergence tolerance factor [realtype, input]
+	      0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     If a sequence of problems of the same size is being solved 
+     using the SPTFQMR linear solver, then following the call to
+     FARKREINIT, a call to the FARKSPTFQMRREINIT routine is 
+     needed if any of its arguments is being changed.  The call 
+     is:
+
+       CALL FARKSPTFQMRREINIT(IPRETYPE, MAXL, DELT, IER)
+
+     The arguments have the same meanings as for FARKSPTFQMR.
+
+ (4.3D) To specify the SPFGMR (Scaled Preconditioned Flexible GMRES) 
+     linear solver make the following call:
+
+       CALL FARKSPFGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)
+
+     The arguments are:
+        IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+	IGSTYPE = Gram-schmidt process type [int, input]: 
+              1 = modified G-S
+              2 = classical G-S.
+	MAXL = maximum Krylov subspace dimension [int; input]; 
+	      0 = default
+	DELT = convergence tolerance factor [realtype, input]; 
+	      0.0 = default.
+	IER = error return flag [int, output]: 
+	       0 = success; 
+	      <0 = an error occured
+ 
+     If a sequence of problems of the same size is being solved 
+     using the SPFGMR linear solver, then following the call to 
+     FARKREINIT, a call to the FARKSPFGMRREINIT routine is needed
+     if any of IPRETYPE, IGSTYPE, DELT is being changed.  In that
+     case, call FARKSPFGMRREINIT as follows:
+
+       CALL FARKSPFGMRREINIT(IPRETYPE, IGSTYPE, DELT, IER)
+
+     The arguments have the same meanings as for FARKSPFGMR.  If 
+     MAXL is being changed, then the user should call FARKSPFGMR 
+     instead.
+ 
+ (4.3E) To specify the PCG (Preconditioned Conjugate Gradient) 
+     linear solver make the following call:
+
+       CALL FARKPCG(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = use preconditioning
+       MAXL = maximum Krylov subspace dimension [int, input]; 
+              0 = default.
+       DELT = convergence tolerance factor [realtype, input]; 
+              0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     If a sequence of problems of the same size is being solved 
+     using the PCG linear solver, then following the call to 
+     FARKREINIT, a call to the FARKPCGREINIT routine is needed
+     if any of its arguments is being changed.  The call is:
+
+       CALL FARKPCGREINIT(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments have the same meanings as for FARKPCG.
+
+ (4.4) To allocate memory and initialize data associated with the
+     ARKBBDPRE preconditioner, make the following call:
+
+       CALL FARKBBDINIT(NLOCAL, MUDQ, MLDQ, MU, ML, DQRELY, IER)
+ 
+      The arguments are:
+        NLOCAL = local vector size on this process 
+	     [long int, input]
+        MUDQ = upper half-bandwidth to be used in the computation
+             of the local Jacobian blocks by difference 
+	     quotients.  These may be smaller than the true 
+	     half-bandwidths of the Jacobian of the local block 
+	     of g, when smaller values may provide greater 
+	     efficiency [long int, input]
+        MLDQ = lower half-bandwidth to be used in the computation
+             of the local Jacobian blocks by difference 
+	     quotients [long int, input]
+	MU = upper half-bandwidth of the band matrix that is
+	     retained as an approximation of the local Jacobian
+	     block (may be smaller than MUDQ) [long int, input]
+	ML = lower half-bandwidth of the band matrix that is
+	     retained as an approximation of the local Jacobian
+	     block (may be smaller than MLDQ) [long int, input]
+	DQRELY = relative increment factor in y for difference 
+	     quotients [realtype, input]
+                    0.0 = default (sqrt(unit roundoff))
+        IER = return completion flag [int, output]:
+                    0 = success
+                   <0 = an error occurred
+
+ (4.5) To specify whether the Krylov linear solver should use the
+     supplied FARKJTIMES or the internal finite difference 
+     approximation, make the call
+
+        CALL FARKSPILSSETJAC(FLAG, IER)
+
+     with the int FLAG=1 to specify that FARKJTIMES is provided 
+     (FLAG=0 specifies to use and internal finite difference 
+     approximation to this product).  The int return flag IER=0
+     if successful, and nonzero otherwise.
+ 
+ (5) Re-initialization: FARKREINIT, FARKBBDREINIT
+
+     If a sequence of problems of the same size is being solved
+     using the Krylov linear solver in combination with the 
+     ARKBBDPRE preconditioner, then the ARKODE package can be 
+     reinitialized for the second and subsequent problems so as
+     to avoid further memory allocation.  First, in place of the
+     call to FARKMALLOC, make the following call:
+
+       CALL FARKREINIT(T0, Y0, IMEX, IATOL, RTOL, ATOL, IER)
+
+     The arguments have the same names and meanings as those of 
+     FARKMALLOC.  FARKREINIT performs the same initializations 
+     as FARKMALLOC, but does no memory allocation, using instead
+     the existing internal memory created by the previous 
+     FARKMALLOC call.  The subsequent call to specify the linear 
+     system solution method may or may not be needed.
+
+     If there is a change in any of the linear solver arguments,
+     then a call to FARKSPGMR, FARKSPBCG, FARKSPTFQMR, FARKSPFGMR
+     or FARKPCG must also be made; in this case the linear solver 
+     memory is reallocated. 
+
+     Following the call to FARKREINIT, a call to FARKBBDINIT may
+     or may not be needed.  If the input arguments are the same,
+     no FARKBBDINIT call is needed. If there is a change in input
+     arguments, then make the call
+
+       CALL FARKBBDREINIT(NLOCAL, MUDQ, MLDQ, DQRELY, IER)
+ 
+     This reinitializes the BBD preconditioner, but without 
+     reallocating its memory.  The arguments of the have the same
+     names and meanings as FARKBBDINIT.  If the value of MU or ML
+     is being changed, then a call to FARKBBDINIT must be made.
+ 
+ (6) The integrator: FARKODE
+
+     Carrying out the integration is accomplished by making calls
+     as follows:
+
+       CALL FARKODE(TOUT, T, Y, ITASK, IER)
+
+     The arguments are:
+       TOUT = next value of t at which a solution is desired 
+           [realtype, input]
+       T = value of t reached by the solver [realtype, output]
+       Y = state variable array on output [realtype, output]
+       ITASK = task indicator [int, input]:
+                 1 = normal mode (overshoot TOUT and interpolate)
+		 2 = one-step mode (return after each internal 
+		     step taken)
+		 3 = normal tstop mode (like 1, but integration 
+		     never proceeds past TSTOP, which must be 
+		     specified through a call to FARKSETRIN using
+		     the key 'STOP_TIME')
+		 4 = one step tstop (like 2, but integration 
+		     never goes past TSTOP)
+       IER = completion flag [int, output]: 
+                  0 = success, 
+		  1 = tstop return, 
+		  2 = root return, 
+                  values -1 ... -10 are failure modes (see 
+		     ARKODE manual).
+     The current values of the optional outputs are immediately 
+     available in the IOUT and ROUT arrays.
+ 
+ (7) Optional outputs: FARKBBDOPT
+
+     Optional outputs specific to the SP* linear solvers are:
+        LENRWLS = IOUT(14) from ARKSp*GetWorkSpace (real space)
+        LENIWLS = IOUT(15) from ARKSp*GetWorkSpace (int space)
+        LSTF    = IOUT(16) from ARKSp*GetLastFlag
+        NFELS   = IOUT(17) from ARKSp*GetRhsEvals
+        NJTV    = IOUT(18) from ARKSp*GetJtimesEvals
+        NPE     = IOUT(19) from ARKSp*GetPrecEvals
+        NPS     = IOUT(20) from ARKSp*GetPrecSolves
+        NLI     = IOUT(21) from ARKSp*GetLinIters
+        NCFL    = IOUT(22) from ARKSp*GetConvFails
+     See the ARKODE manual for descriptions.
+
+     To obtain the optional outputs associated with the ARKBBDPRE
+     module, make the following call:
+
+       CALL FARKBBDOPT(LENRWBBD, LENIWBBD, NGEBBD)
+
+     The arguments returned are:
+       LENRWBP = length of real preconditioner work space, in 
+           realtype words (this size is local to the current 
+	   processor if run in parallel) [long int, output]
+       LENIWBP = length of integer preconditioner work space, in
+           integer words (processor-local) [long int, output]
+       NGEBBD = number of g(t,y) evaluations (calls to ARKLOCFN)
+           so far [long int, output]
+ 
+ (8) Computing solution derivatives: FARKDKY
+
+     To obtain a derivative of the solution, of order up to the 
+     method order, make the following call:
+
+       CALL FARKDKY(T, K, DKY, IER)
+
+     The arguments are:
+       T = time at which solution derivative is desired, within 
+           the interval [TCUR-HU,TCUR], [realtype, input].
+       K = derivative order (0 .le. K .le. QU) [int, input]
+       DKY = array containing computed K-th derivative of y 
+           [realtype, output]
+       IER = return flag [int, output]: 
+                    0 = success
+		   <0 = illegal argument.
+ 
+ (9) Memory freeing: FARKFREE
+
+     To free the internal memory created by the calls to 
+     FARKMALLOC, FNVINITS or FNVINITP, and FARKBPINIT, make the
+     call:
+
+       CALL FARKFREE()
+
+===============================================================*/
+
+#ifndef _FARKBBD_H
+#define _FARKBBD_H
+
+#include <sundials/sundials_nvector.h>
+#include <sundials/sundials_types.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* header files  */
+/* Definitions of interface function names */
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FARK_BBDINIT    SUNDIALS_F77_FUNC(farkbbdinit,   FARKBBDINIT)
+#define FARK_BBDREINIT  SUNDIALS_F77_FUNC(farkbbdreinit, FARKBBDREINIT)
+#define FARK_BBDOPT     SUNDIALS_F77_FUNC(farkbbdopt,    FARKBBDOPT)
+#define FARK_GLOCFN     SUNDIALS_F77_FUNC(farkglocfn,    FARKGLOCFN)
+#define FARK_COMMFN     SUNDIALS_F77_FUNC(farkcommfn,    FARKCOMMFN)
+
+#else
+
+#define FARK_BBDINIT    farkbbdinit_
+#define FARK_BBDREINIT  farkbbdreinit_
+#define FARK_BBDOPT     farkbbdopt_
+#define FARK_GLOCFN     farkglocfn_
+#define FARK_COMMFN     farkcommfn_
+
+#endif
+
+/* Prototypes of exported functions */
+void FARK_BBDINIT(long int *Nloc, long int *mudq, 
+		  long int *mldq, long int *mu, 
+		  long int *ml, realtype* dqrely, int *ier);
+void FARK_BBDREINIT(long int *Nloc, long int *mudq, 
+		    long int *mldq, realtype* dqrely, int *ier);
+void FARK_BBDOPT(long int *lenrwbbd, long int *leniwbbd, 
+		 long int *ngebbd);
+
+/* Prototypes: Functions Called by the ARKBBDPRE Module */
+int FARKgloc(long int Nloc, realtype t, N_Vector yloc, 
+	     N_Vector gloc, void *user_data);
+int FARKcfn(long int Nloc, realtype t, N_Vector y, 
+	    void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkbp.c b/src/arkode/fcmix/farkbp.c
new file mode 100644
index 0000000..e8b8909
--- /dev/null
+++ b/src/arkode/fcmix/farkbp.c
@@ -0,0 +1,55 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This module contains the routines necessary to interface with 
+ * the ARKBANDPRE module and user-supplied Fortran routines. The 
+ * routines here call the generically named routines and provide 
+ * a standard interface to the C code of the ARKBANDPRE package.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "farkbp.h"
+#include <arkode/arkode_bandpre.h>
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKBandPrecInit; see farkbp.h 
+   for additional information */
+void FARK_BPINIT(long int *N, long int *mu, 
+		 long int *ml, int *ier)
+{
+  *ier = ARKBandPrecInit(ARK_arkodemem, *N, *mu, *ml);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routines ARKBandPrecGetWorkSpace and 
+   ARKBandPrecGetNumRhsEvals; see farkbp.h for additional 
+   information */
+void FARK_BPOPT(long int *lenrwbp, long int *leniwbp, long int *nfebp)
+{
+  ARKBandPrecGetWorkSpace(ARK_arkodemem, lenrwbp, leniwbp);
+  ARKBandPrecGetNumRhsEvals(ARK_arkodemem, nfebp);
+  return;
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkbp.h b/src/arkode/fcmix/farkbp.h
new file mode 100644
index 0000000..682ffc2
--- /dev/null
+++ b/src/arkode/fcmix/farkbp.h
@@ -0,0 +1,491 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the Fortran interface include file for the BAND
+ * preconditioner (ARKBANDPRE).
+ *--------------------------------------------------------------*/
+
+/*===============================================================
+                  FARKBP Interface Package
+
+ The FARKBP Interface Package is a package of C functions which,
+ together with the FARKODE Interface Package, support the use of 
+ the ARKODE solver and N_VSerial vector module with the ARKBANDPRE
+ preconditioner module, for the solution of ODE systems in a mixed
+ Fortran/C setting.  The combination of ARKODE and ARKBANDPRE 
+ solves the linear systems arising from the solution of the 
+ implicit portions of the ODE system
+       dy/dt = fe(t,y) + fi(t,y)  
+ using a Krylov iterative linear solver (SPGMR, SPTFQMR, SPBCG, 
+ SPFGMR or PCG), and with a banded preconditioner.  This 
+ preconditioner can be constructed using either a user-supplied 
+ routine, or automatically via finite differencing.
+ 
+ The user-callable functions in this package, with the 
+ corresponding ARKODE and ARKBBDPRE functions, are as follows: 
+
+   Fortran              ARKODE
+   -------------        ---------------------------
+   FARKBPINIT           ARKBandPrecInit
+   FARKBPOPT            (accesses optional outputs)
+   -------------        ---------------------------
+ 
+ In addition to the Fortran implicit right-hand side function 
+ FARKIFUN, the user may (optionally) supply a routine FARKJTIMES 
+ that is called by the C interface function FARKJtimes of type 
+ ARKSpilsJtimesFn.  
+
+ 
+ Important notes on portability:
+
+ The names of all user-supplied routines here are fixed, in 
+ order to maximize portability for the resulting mixed-language 
+ program.
+
+ Additionally, the names of the interface functions, and the 
+ names of the Fortran user routines called by them, appear as 
+ dummy names which are mapped to actual values by a series of 
+ definitions in the header file farkbp.h.
+ 
+ ================================================================
+ 
+           Usage of the FARKODE/FARKBP Interface Packages
+ 
+ The usage of the combined interface packages FARKODE and FARKBP 
+ requires calls to seven to ten interface functions, and one or 
+ two user-supplied routines which define the problem to be solved
+ and indirectly define the preconditioner.  These function calls 
+ and user routines are summarized separately below.
+ 
+ Some details are omitted, and the user is referred to the ARKODE
+ user document for more complete information.
+ 
+ (1) User-supplied implicit right-hand side routine: FARKIFUN
+     If any portion of the ODE system should be treated 
+     implicitly (and hence would require a linear solver at all),
+     the user must supply the following Fortran routine:
+
+       SUBROUTINE FARKIFUN(T, Y, YDOT, IPAR, RPAR, IER)
+
+     Sets the YDOT array to fi(T,Y), the implicit portion of the 
+     right-hand side of the ODE system, as function of time T and
+     the state variable array Y.
+
+     The arguments are:
+       Y    -- array containing state variables [realtype, input]
+       YDOT -- array containing state derivatives [realtype, 
+               output]
+       IPAR -- array containing integer user data that was passed
+               to FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                 >0 if a recoverable error occurred,
+                 <0 if an unrecoverable error ocurred.
+ 
+ (2) Optional user-supplied Jacobian-vector product: FARKJTIMES
+
+     As an option, the user may supply a routine that computes 
+     the product of the system Jacobian  J = dfi(t,y)/dy and a 
+     given vector v.  If supplied, it must have the following 
+     form:
+
+       SUBROUTINE FARKJTIMES(V, FJV, T, Y, FY, H, IPAR, RPAR, 
+      &                      WORK, IER)
+
+     Typically this routine will use only NEQ, T, Y, V, and FJV. 
+     It must compute the product vector J*v where the vector V, 
+     and store the product in FJV.  
+
+     The arguments are:
+       V    -- vector to multiply [realtype, input]
+       FJV  -- product vector [realtype, output]
+       T    -- current time [realtype, input]
+       Y    -- state variables [realtype, input]
+       FY   -- state derivatives [realtype, input]
+       H    -- current step size [realtype, input]
+       IPAR -- array containing integer user data that was passed
+               to FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       WORK -- array containing temporary workspace of same size
+               as Y [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                  nonzero if an error.
+
+ (3) Initialization:  FNVINITS, FARKMALLOC, linear solver 
+     initialization, and FARKBPINIT.
+ 
+ (3.1) To initialize the serial vector specification, the user 
+      must make the following call:
+
+        CALL FNVINITS(4, NEQ, IER)
+
+     where the first argument is an int containing the ARKODE 
+     solver ID (4). The other arguments are:
+        NEQ = size of vectors [long int, input]
+	IER = return completion flag [int, output]:
+	          0 = success, 
+		 -1 = failure.
+ 
+ (3.2) To set various problem and solution parameters and 
+     allocate internal memory, make the following call:
+
+       CALL FARKMALLOC(T0, Y0, IMEX, IATOL, RTOL, ATOL, IOUT,
+      &                ROUT, IPAR, RPAR, IER)
+
+     The arguments are:
+        T0 = initial value of t [realtype, input]
+	Y0 = array of initial conditions [realtype, input]
+	IMEX = flag denoting integration method [int, input]: 
+                  0 = implicit, 
+                  1 = explicit, 
+                  2 = imex
+        IATOL = type for absolute tolerance ATOL [int, input]: 
+                  1 = scalar, 
+                  2 = array,
+                  3 = user-supplied function; the user must 
+                      supply a routine FARKEWT to compute the 
+		      error weight vector.
+        RTOL = scalar relative tolerance [realtype, input]
+	ATOL = scalar/array absolute tolerance [realtype, input]
+	IOUT = array of length 22 for integer optional outputs
+	   [long int, output]
+	ROUT = array of length 6 for real optional outputs 
+	   [realtype, output]
+	IPAR = array of user integer data [long int, in/out]
+	RPAR = array with user real data [realtype, in/out]
+	IER  = return completion flag [int, output]:
+                  0 = SUCCESS,
+                 -1 = failure (see printed message for details).
+
+     The user data arrays IPAR and RPAR are passed unmodified to 
+     all subsequent calls to user-provided routines. Changes to
+     either array inside a user-provided routine will be 
+     propagated. Using these two arrays, the user can dispense 
+     with COMMON blocks to pass data betwen user-provided 
+     routines. 
+
+ (3.3) Attach one of the 3 SPILS linear solvers.
+    
+ (3.3A) To specify the SPGMR (Scaled Preconditioned GMRES) 
+     linear solver make the following call:
+
+       CALL FARKSPGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)
+
+     The arguments are:
+        IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+	IGSTYPE = Gram-schmidt process type [int, input]: 
+              1 = modified G-S
+              2 = classical G-S.
+	MAXL = maximum Krylov subspace dimension [int; input]; 
+	      0 = default
+	DELT = convergence tolerance factor [realtype, input]; 
+	      0.0 = default.
+	IER = error return flag [int, output]: 
+	       0 = success; 
+	      <0 = an error occured
+ 
+     If a sequence of problems of the same size is being solved 
+     using the SPGMR linear solver, then following the call to 
+     FARKREINIT, a call to the FARKSPGMRREINIT routine is needed
+     if any of IPRETYPE, IGSTYPE, DELT is being changed.  In that
+     case, call FARKSPGMRREINIT as follows:
+
+       CALL FARKSPGMRREINIT(IPRETYPE, IGSTYPE, DELT, IER)
+
+     The arguments have the same meanings as for FARKSPGMR.  If 
+     MAXL is being changed, then the user should call FARKSPGMR 
+     instead.
+ 
+ (3.3B) To specify the SPBCG (Scaled Preconditioned Bi-CGSTAB) 
+     linear solver make the following call:
+
+       CALL FARKSPBCG(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+       MAXL = maximum Krylov subspace dimension [int, input]; 
+              0 = default.
+       DELT = convergence tolerance factor [realtype, input]; 
+              0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     If a sequence of problems of the same size is being solved 
+     using the SPBCG linear solver, then following the call to 
+     FARKREINIT, a call to the FARKSPBCGREINIT routine is needed
+     if any of its arguments is being changed.  The call is:
+
+       CALL FARKSPBCGREINIT(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments have the same meanings as for FARKSPBCG.
+
+ (3.3C) To specify the SPTFQMR (Scaled Preconditioned TFQMR) 
+     linear solver make the following call:
+
+       CALL FARKSPTFQMR(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+       MAXL = maximum Krylov subspace dimension [int, input]; 
+              0 = default.
+       DELT = convergence tolerance factor [realtype, input]
+	      0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     If a sequence of problems of the same size is being solved 
+     using the SPTFQMR linear solver, then following the call to
+     FARKREINIT, a call to the FARKSPTFQMRREINIT routine is 
+     needed if any of its arguments is being changed.  The call 
+     is:
+
+       CALL FARKSPTFQMRREINIT(IPRETYPE, MAXL, DELT, IER)
+
+     The arguments have the same meanings as for FARKSPTFQMR.
+
+ (3.3D) To specify the SPFGMR (Scaled Preconditioned Flexible GMRES) 
+     linear solver make the following call:
+
+       CALL FARKSPFGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)
+
+     The arguments are:
+        IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+	IGSTYPE = Gram-schmidt process type [int, input]: 
+              1 = modified G-S
+              2 = classical G-S.
+	MAXL = maximum Krylov subspace dimension [int; input]; 
+	      0 = default
+	DELT = convergence tolerance factor [realtype, input]; 
+	      0.0 = default.
+	IER = error return flag [int, output]: 
+	       0 = success; 
+	      <0 = an error occured
+ 
+     If a sequence of problems of the same size is being solved 
+     using the SPFGMR linear solver, then following the call to 
+     FARKREINIT, a call to the FARKSPFGMRREINIT routine is needed
+     if any of IPRETYPE, IGSTYPE, DELT is being changed.  In that
+     case, call FARKSPFGMRREINIT as follows:
+
+       CALL FARKSPFGMRREINIT(IPRETYPE, IGSTYPE, DELT, IER)
+
+     The arguments have the same meanings as for FARKSPFGMR.  If 
+     MAXL is being changed, then the user should call FARKSPFGMR 
+     instead.
+ 
+ (3.3E) To specify the PCG (Preconditioned Conjugate Gradient) 
+     linear solver make the following call:
+
+       CALL FARKPCG(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = use preconditioning
+       MAXL = maximum Krylov subspace dimension [int, input]; 
+              0 = default.
+       DELT = convergence tolerance factor [realtype, input]; 
+              0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     If a sequence of problems of the same size is being solved 
+     using the PCG linear solver, then following the call to 
+     FARKREINIT, a call to the FARKPCGREINIT routine is needed
+     if any of its arguments is being changed.  The call is:
+
+       CALL FARKPCGREINIT(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments have the same meanings as for FARKPCG.
+
+ (3.4) To allocate memory and initialize data associated with the
+      ARKBANDPRE preconditioner, make the following call:
+
+        CALL FARKBPINIT(NEQ, MU, ML, IER)
+
+      The arguments are:
+        NEQ = problem size [long int, input]
+        MU = upper half-bandwidth of the band matrix that is 
+	     retained as an approximation of the Jacobian 
+	     [long int, input]
+        ML = lower half-bandwidth of the band matrix approximant
+	     to the Jacobian [long int, input]
+        IER = return completion flag [int, output]:
+                    0 = success
+                   <0 = an error occurred
+
+ (3.5) To specify whether the Krylov linear solver should use the
+     supplied FARKJTIMES or the internal finite difference 
+     approximation, make the call
+
+        CALL FARKSPILSSETJAC(FLAG, IER)
+
+     with the int FLAG=1 to specify that FARKJTIMES is provided 
+     (FLAG=0 specifies to use and internal finite difference 
+     approximation to this product).  The int return flag IER=0
+     if successful, and nonzero otherwise.
+ 
+ (4) The integrator: FARKODE
+
+     Carrying out the integration is accomplished by making calls
+     as follows:
+
+       CALL FARKODE(TOUT, T, Y, ITASK, IER)
+
+     The arguments are:
+       TOUT = next value of t at which a solution is desired 
+           [realtype, input]
+       T = value of t reached by the solver [realtype, output]
+       Y = state variable array on output [realtype, output]
+       ITASK = task indicator [int, input]:
+                 1 = normal mode (overshoot TOUT and interpolate)
+		 2 = one-step mode (return after each internal 
+		     step taken)
+		 3 = normal tstop mode (like 1, but integration 
+		     never proceeds past TSTOP, which must be 
+		     specified through a call to FARKSETRIN using
+		     the key 'STOP_TIME')
+		 4 = one step tstop (like 2, but integration 
+		     never goes past TSTOP)
+       IER = completion flag [int, output]: 
+                  0 = success, 
+		  1 = tstop return, 
+		  2 = root return, 
+                  values -1 ... -10 are failure modes (see 
+		     ARKODE manual).
+     The current values of the optional outputs are immediately 
+     available in the IOUT and ROUT arrays.
+ 
+ (5) Optional outputs: FARKBPOPT
+
+     Optional outputs specific to the SP* linear solvers are:
+        LENRWLS = IOUT(14) from ARKSp*GetWorkSpace (real space)
+        LENIWLS = IOUT(15) from ARKSp*GetWorkSpace (int space)
+        LSTF    = IOUT(16) from ARKSp*GetLastFlag
+        NFELS   = IOUT(17) from ARKSp*GetRhsEvals
+        NJTV    = IOUT(18) from ARKSp*GetJtimesEvals
+        NPE     = IOUT(19) from ARKSp*GetPrecEvals
+        NPS     = IOUT(20) from ARKSp*GetPrecSolves
+        NLI     = IOUT(21) from ARKSp*GetLinIters
+        NCFL    = IOUT(22) from ARKSp*GetConvFails
+     See the ARKODE manual for descriptions.
+
+     To obtain the optional outputs associated with the 
+     ARKBANDPRE module, make the following call:
+
+       CALL FARKBPOPT(LENRWBP, LENIWBP, NFEBP)
+
+     The arguments returned are:
+       LENRWBP = length of real preconditioner work space, in 
+           realtype words (this size is local to the current 
+	   processor if run in parallel) [long int, output]
+       LENIWBP = length of integer preconditioner work space, in
+           integer words (processor-local) [long int, output]
+       NFEBP = number of fi(t,y) evaluations [long int, output]
+ 
+ (6) Computing solution derivatives: FARKDKY
+
+     To obtain a derivative of the solution, of order up to the 
+     method order, make the following call:
+
+       CALL FARKDKY(T, K, DKY, IER)
+
+     The arguments are:
+       T = time at which solution derivative is desired, within 
+           the interval [TCUR-HU,TCUR], [realtype, input].
+       K = derivative order (0 .le. K .le. QU) [int, input]
+       DKY = array containing computed K-th derivative of y 
+           [realtype, output]
+       IER = return flag [int, output]: 
+                    0 = success
+		   <0 = illegal argument.
+ 
+ (7) Memory freeing: FARKFREE
+
+     To free the internal memory created by the calls to 
+     FARKMALLOC, FNVINITS or FNVINITP, and FARKBPINIT, make the
+     call:
+
+       CALL FARKFREE()
+ 
+===============================================================*/
+
+#ifndef _FARKBP_H
+#define _FARKBP_H
+
+#include <sundials/sundials_nvector.h>
+#include <sundials/sundials_types.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* header files  */
+/* Definitions of interface function names */
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FARK_BPINIT    SUNDIALS_F77_FUNC(farkbpinit, FARKBPINIT)
+#define FARK_BPOPT     SUNDIALS_F77_FUNC(farkbpopt, FARKBPOPT)
+
+#else
+
+#define FARK_BPINIT    farkbpinit_
+#define FARK_BPOPT     farkbpopt_
+
+#endif
+
+/* Prototypes of exported function */
+void FARK_BPINIT(long int *N, 
+		 long int *mu, 
+		 long int *ml, 
+		 int *ier);
+void FARK_BPOPT(long int *lenrwbp, 
+		long int *leniwbp, 
+		long int *nfebp);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkdense.c b/src/arkode/fcmix/farkdense.c
new file mode 100644
index 0000000..fcb1a9b
--- /dev/null
+++ b/src/arkode/fcmix/farkdense.c
@@ -0,0 +1,90 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKDENSE, for the case
+ * of a user-supplied Jacobian approximation routine.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_dense.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_DJAC(long int *N, realtype *T, realtype *Y, 
+			realtype *FY, realtype *DJAC, 
+			realtype *H, long int *IPAR, 
+			realtype *RPAR, realtype *V1, 
+			realtype *V2, realtype *V3, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKDlsSetDenseJacFn; see 
+   farkode.h for additional information */
+void FARK_DENSESETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = ARKDlsSetDenseJacFn(ARK_arkodemem, NULL);
+  } else {
+    *ier = ARKDlsSetDenseJacFn(ARK_arkodemem, FARKDenseJac);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKDJAC; see 
+   farkode.h for additional information  */
+int FARKDenseJac(long int N, realtype t, N_Vector y, N_Vector fy, 
+                 DlsMat J, void *user_data, N_Vector vtemp1, 
+                 N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *fydata, *jacdata, *v1data, *v2data, *v3data;
+  realtype h;
+  FARKUserData ARK_userdata;
+
+  ARKodeGetLastStep(ARK_arkodemem, &h);
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  jacdata = DENSE_COL(J,0);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_DJAC(&N, &t, ydata, fydata, jacdata, &h, 
+            ARK_userdata->ipar, ARK_userdata->rpar, v1data, 
+            v2data, v3data, &ier); 
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkdensemass.c b/src/arkode/fcmix/farkdensemass.c
new file mode 100644
index 0000000..3a0253d
--- /dev/null
+++ b/src/arkode/fcmix/farkdensemass.c
@@ -0,0 +1,78 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKDENSE, for the case
+ * of a user-supplied Jacobian approximation routine.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_dense.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_DMASS(long int *N, realtype *T, 
+			 realtype *DMASS, long int *IPAR, 
+			 realtype *RPAR, realtype *V1, 
+			 realtype *V2, realtype *V3, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface routine to ARKDlsSetDenseMassFn; see 
+   farkode.h for further details */
+void FARK_DENSESETMASS(int *ier)
+{
+  *ier = ARKDlsSetDenseMassFn(ARK_arkodemem, FARKDenseMass);
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKDMASS; see 
+   farkode.h for additional information  */
+int FARKDenseMass(long int N, realtype t, DlsMat M, void *user_data, 
+		  N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *massdata, *v1data, *v2data, *v3data;
+  FARKUserData ARK_userdata;
+
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  massdata = DENSE_COL(M,0);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_DMASS(&N, &t, massdata, ARK_userdata->ipar, ARK_userdata->rpar, 
+	     v1data, v2data, v3data, &ier); 
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkewt.c b/src/arkode/fcmix/farkewt.c
new file mode 100644
index 0000000..931365a
--- /dev/null
+++ b/src/arkode/fcmix/farkewt.c
@@ -0,0 +1,76 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE, for the case of a 
+ * user-supplied error weight calculation routine.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_EWT(realtype *Y, realtype *EWT, 
+		       long int *IPAR, realtype *RPAR, 
+		       int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeWFtolerances; see 
+   farkode.h for further information */
+void FARK_EWTSET(int *flag, int *ier)
+{
+  if (*flag != 0) {
+    *ier = ARKodeWFtolerances(ARK_arkodemem, FARKEwt);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied fortran routine FARKEWT; see 
+   farkode.h for further information */
+int FARKEwt(N_Vector y, N_Vector ewt, void *user_data)
+{
+  int ier = 0;
+  realtype *ydata, *ewtdata;
+  FARKUserData ARK_userdata;
+
+  ydata  = N_VGetArrayPointer(y);
+  ewtdata = N_VGetArrayPointer(ewt);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_EWT(ydata, ewtdata, ARK_userdata->ipar, 
+	   ARK_userdata->rpar, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkexpstab.c b/src/arkode/fcmix/farkexpstab.c
new file mode 100644
index 0000000..29587a7
--- /dev/null
+++ b/src/arkode/fcmix/farkexpstab.c
@@ -0,0 +1,77 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE, for the case of a 
+ * user-supplied explicit stability routine.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_EXPSTAB(realtype *Y, realtype *T, realtype *HSTAB, 
+			   long int *IPAR, realtype *RPAR, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeSetStabilityFn; see 
+   farkode.h for further information */
+void FARK_EXPSTABSET(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = ARKodeSetStabilityFn(ARK_arkodemem, NULL, NULL);
+  } else {
+    *ier = ARKodeSetStabilityFn(ARK_arkodemem, FARKExpStab, 
+				ARK_arkodemem);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied fortran routine FARKEXPSTAB; see 
+   farkode.h for further information */
+int FARKExpStab(N_Vector y, realtype t, realtype *hstab, void *udata)
+{
+  int ier = 0;
+  realtype *ydata;
+  FARKUserData ARK_userdata;
+
+  ydata = N_VGetArrayPointer(y);
+  ARK_userdata = (FARKUserData) udata;
+
+  FARK_EXPSTAB(ydata, &t, hstab, ARK_userdata->ipar, 
+	       ARK_userdata->rpar, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkjtimes.c b/src/arkode/fcmix/farkjtimes.c
new file mode 100644
index 0000000..f9ebdcf
--- /dev/null
+++ b/src/arkode/fcmix/farkjtimes.c
@@ -0,0 +1,90 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * The C function FARKJtimes is to interface between the ARKSP* 
+ * modules and the user-supplied Jacobian-vector product routine
+ * FARKJTIMES. Note the use of the generic name FARK_JTIMES in
+ * the code below.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_spils.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_JTIMES(realtype *V, realtype *JV, realtype *T, 
+			  realtype *Y, realtype *FY, realtype *H,
+			  long int *IPAR, realtype *RPAR,
+			  realtype *WRK, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSpilsSetJacTimesVecFn; see 
+   farkode.h for further information */
+void FARK_SPILSSETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = ARKSpilsSetJacTimesVecFn(ARK_arkodemem, NULL);
+  } else {
+    *ier = ARKSpilsSetJacTimesVecFn(ARK_arkodemem, FARKJtimes);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKJTIMES; see
+   farkode.h for further information */
+int FARKJtimes(N_Vector v, N_Vector Jv, realtype t, N_Vector y, 
+	       N_Vector fy, void *user_data, N_Vector work)
+{
+  realtype *vdata, *Jvdata, *ydata, *fydata, *wkdata;
+  realtype h;
+  FARKUserData ARK_userdata;
+  int ier = 0;
+  
+  ARKodeGetLastStep(ARK_arkodemem, &h);
+
+  vdata  = N_VGetArrayPointer(v);
+  Jvdata = N_VGetArrayPointer(Jv);
+  ydata  = N_VGetArrayPointer(y);
+  fydata = N_VGetArrayPointer(fy);
+  wkdata = N_VGetArrayPointer(work);
+
+  ARK_userdata = (FARKUserData) user_data;
+ 
+  FARK_JTIMES(vdata, Jvdata, &t, ydata, fydata, &h, ARK_userdata->ipar, 
+	      ARK_userdata->rpar, wkdata, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkklu.c b/src/arkode/fcmix/farkklu.c
new file mode 100644
index 0000000..29df44d
--- /dev/null
+++ b/src/arkode/fcmix/farkklu.c
@@ -0,0 +1,66 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKKLU
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_klu.h>
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKKLU; see farkode.h for 
+   further details */
+void FARK_KLU(int *neq, int *nnz, int *sparsetype, int *ordering, int *ier)
+{
+  *ier = ARKKLU(ARK_arkodemem, *neq, *nnz, *sparsetype);
+  ARKKLUSetOrdering(ARK_arkodemem, *ordering);
+  ARK_ls = ARK_LS_KLU;
+  return;
+}
+
+/* Fortran interface to C routine ARKKLUReinit; see farkode.h for 
+   further details */
+void FARK_KLUREINIT(int *neq, int *nnz, int *reinit_type, int *ier)
+{
+  *ier = ARKKLUReInit(ARK_arkodemem, *neq, *nnz, *reinit_type);
+}
+
+/* Fortran interface to C routine ARKMassKLU; see farkode.h for 
+   further details */
+void FARK_MASSKLU(int *neq, int *nnz, int *sparsetype, int *ordering, int *ier)
+{
+  *ier = ARKMassKLU(ARK_arkodemem, *neq, *nnz, *sparsetype, NULL);
+  ARKMassKLUSetOrdering(ARK_arkodemem, *ordering);
+  ARK_mass_ls = ARK_LS_KLU;
+  return;
+}
+
+/* Fortran interface to C routine ARKMassKLUReinit; see farkode.h for 
+   further details */
+void FARK_MASSKLUREINIT(int *neq, int *nnz, int *reinit_type, int *ier)
+{
+  *ier = ARKMassKLUReInit(ARK_arkodemem, *neq, *nnz, *reinit_type);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
+
diff --git a/src/arkode/fcmix/farklapack.c b/src/arkode/fcmix/farklapack.c
new file mode 100644
index 0000000..100e8cf
--- /dev/null
+++ b/src/arkode/fcmix/farklapack.c
@@ -0,0 +1,71 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKLAPACK
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_lapack.h>
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKLapackDense; see farkode.h 
+   for further information */
+void FARK_LAPACKDENSE(int *neq, int *ier)
+{
+  *ier = ARKLapackDense(ARK_arkodemem, *neq);
+  ARK_ls = ARK_LS_LAPACKDENSE;
+  return;
+}
+
+/* Fortran interface to C routine ARKMassLapackDense; see farkode.h 
+   for further information */
+void FARK_MASSLAPACKDENSE(int *neq, int *ier)
+{
+  *ier = ARKMassLapackDense(ARK_arkodemem, *neq, NULL);
+  ARK_mass_ls = ARK_LS_LAPACKDENSE;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKLapackBand; see farkode.h 
+   for further information */
+void FARK_LAPACKBAND(int *neq, int *mupper, int *mlower, int *ier)
+{
+  *ier = ARKLapackBand(ARK_arkodemem, *neq, *mupper, *mlower);
+  ARK_ls = ARK_LS_LAPACKBAND;
+  return;
+}
+
+/* Fortran interface to C routine ARKMassLapackBand; see farkode.h 
+   for further information */
+void FARK_MASSLAPACKBAND(int *neq, int *mupper, int *mlower, int *ier)
+{
+  *ier = ARKMassLapackBand(ARK_arkodemem, *neq, *mupper, 
+			   *mlower, NULL);
+  ARK_mass_ls = ARK_LS_LAPACKBAND;
+  return;
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
+
diff --git a/src/arkode/fcmix/farklapband.c b/src/arkode/fcmix/farklapband.c
new file mode 100644
index 0000000..5d5f44c
--- /dev/null
+++ b/src/arkode/fcmix/farklapband.c
@@ -0,0 +1,103 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKLAPACKBAND, for the 
+ * case of a user-supplied Jacobian approximation routine.                
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_lapack.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_BJAC(long int *N, long int *MU, long int *ML, 
+			long int *EBAND, realtype *T, 
+			realtype *Y, realtype *FY,
+			realtype *LBJAC, realtype *H,
+			long int *IPAR, realtype *RPAR,
+			realtype *V1, realtype *V2, 
+			realtype *V3, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface routine to ARKDlsSetBandJacFn; see farkode.h 
+   for further details */
+void FARK_LAPACKBANDSETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = ARKDlsSetBandJacFn(ARK_arkodemem, NULL);
+  } else {
+    *ier = ARKDlsSetBandJacFn(ARK_arkodemem, FARKLapackBandJac);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* The C function FARKLapackBandJac interfaces between ARKODE 
+   and a Fortran subroutine FARKBJAC for the solution of a 
+   linear system using Lapack with band Jacobian approximation.
+   Addresses of arguments are passed to FARKBJAC, using the 
+   macro BAND_COL and the routine N_VGetArrayPointer from 
+   NVECTOR. The address passed for J is that of the element in 
+   column 0 with row index -mupper.  An extended bandwith equal
+   to (J->smu) + mlower + 1 is passed as the column dimension 
+   of the corresponding array */
+int FARKLapackBandJac(long int N, long int mupper, 
+		      long int mlower, realtype t, N_Vector y, 
+		      N_Vector fy, DlsMat J, void *user_data,
+		      N_Vector vtemp1, N_Vector vtemp2, 
+		      N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *fydata, *jacdata, *v1data, *v2data, *v3data;
+  realtype h;
+  long int eband;
+  FARKUserData ARK_userdata;
+
+  ARKodeGetLastStep(ARK_arkodemem, &h);
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  eband = (J->s_mu) + mlower + 1;
+  jacdata = BAND_COL(J,0) - mupper;
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_BJAC(&N, &mupper, &mlower, &eband, &t, ydata, fydata, 
+	    jacdata, &h, ARK_userdata->ipar, ARK_userdata->rpar, 
+	    v1data, v2data, v3data, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farklapbandmass.c b/src/arkode/fcmix/farklapbandmass.c
new file mode 100644
index 0000000..ea26675
--- /dev/null
+++ b/src/arkode/fcmix/farklapbandmass.c
@@ -0,0 +1,84 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKLAPACKBAND, for the 
+ * case of a user-supplied Jacobian approximation routine.                
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_lapack.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_BMASS(long int *N, long int *MU, long int *ML,
+			 long int *EBAND, realtype *T, 
+			 realtype *BMASS, long int *IPAR, 
+			 realtype *RPAR, realtype *V1, 
+			 realtype *V2, realtype *V3, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface routine to ARKDlsSetBandMassFn; see farkode.h 
+   for further details */
+void FARK_LAPACKBANDSETMASS(int *ier)
+{
+  *ier = ARKDlsSetBandMassFn(ARK_arkodemem, FARKLapackBandMass);
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran subroutine FARKBMASS; see 
+   farkode.h for further details */
+int FARKLapackBandMass(long int N, long int mupper, 
+		       long int mlower, realtype t, DlsMat M, 
+		       void *user_data, N_Vector vtemp1, 
+		       N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *massdata, *v1data, *v2data, *v3data;
+  long int eband;
+  FARKUserData ARK_userdata;
+
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  eband   = (M->s_mu) + mlower + 1;
+  massdata = BAND_COL(M,0) - mupper;
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_BMASS(&N, &mupper, &mlower, &eband, &t, massdata, 
+	     ARK_userdata->ipar, ARK_userdata->rpar, v1data, 
+	     v2data, v3data, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farklapdense.c b/src/arkode/fcmix/farklapdense.c
new file mode 100644
index 0000000..48c635c
--- /dev/null
+++ b/src/arkode/fcmix/farklapdense.c
@@ -0,0 +1,93 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKLAPACKDENSE, for the
+ * case of a user-supplied Jacobian approximation routine.a
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_lapack.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+  extern void FARK_DJAC(long int *N, realtype *T, realtype *Y, 
+			realtype *FY, realtype *LDJAC,
+			realtype *H, long int *IPAR, 
+			realtype *RPAR, realtype *V1, 
+			realtype *V2, realtype *V3, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKDlsSetDenseJacFn; see 
+   farkode.h for additional information */
+void FARK_LAPACKDENSESETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = ARKDlsSetDenseJacFn(ARK_arkodemem, NULL);
+  } else {
+    *ier = ARKDlsSetDenseJacFn(ARK_arkodemem, FARKLapackDenseJac);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* The C function FARKLapackDenseJac interfaces between ARKODE 
+   and a Fortran subroutine FARKDJAC for solution of a linear 
+   system using Lapack with dense Jacobian approximation.
+   Addresses of arguments are passed to FARKDJAC, using the macro 
+   DENSE_COL and the routine N_VGetArrayPointer from NVECTOR  */
+int FARKLapackDenseJac(long int N, realtype t, N_Vector y, 
+		       N_Vector fy, DlsMat J, void *user_data,
+		       N_Vector vtemp1, N_Vector vtemp2, 
+		       N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *fydata, *jacdata, *v1data, *v2data, *v3data;
+  realtype h;
+  FARKUserData ARK_userdata;
+
+  ARKodeGetLastStep(ARK_arkodemem, &h);
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  jacdata = DENSE_COL(J,0);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_DJAC(&N, &t, ydata, fydata, jacdata, &h, ARK_userdata->ipar, 
+	    ARK_userdata->rpar, v1data, v2data, v3data, &ier); 
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
+
diff --git a/src/arkode/fcmix/farklapdensemass.c b/src/arkode/fcmix/farklapdensemass.c
new file mode 100644
index 0000000..481df4e
--- /dev/null
+++ b/src/arkode/fcmix/farklapdensemass.c
@@ -0,0 +1,80 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKLAPACKDENSE, for the
+ * case of a user-supplied Jacobian approximation routine.a
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_lapack.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_DMASS(long int *N, realtype *T, 
+			 realtype *DMASS, long int *IPAR, 
+			 realtype *RPAR, realtype *V1, 
+			 realtype *V2, realtype *V3, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface routine to ARKDlsSetDenseMassFn; see 
+   farkode.h for further details */
+void FARK_LAPACKDENSESETMASS(int *ier)
+{
+  *ier = ARKDlsSetDenseMassFn(ARK_arkodemem, FARKLapackDenseMass);
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKDMASS; see 
+   farkode.h for additional information  */
+int FARKLapackDenseMass(long int N, realtype t, DlsMat M, 
+			void *user_data, N_Vector vtemp1, 
+			N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *massdata, *v1data, *v2data, *v3data;
+  FARKUserData ARK_userdata;
+
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  massdata = DENSE_COL(M,0);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_DMASS(&N, &t, massdata, ARK_userdata->ipar, ARK_userdata->rpar, 
+	     v1data, v2data, v3data, &ier); 
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
+
diff --git a/src/arkode/fcmix/farkmasspreco.c b/src/arkode/fcmix/farkmasspreco.c
new file mode 100644
index 0000000..41eeae6
--- /dev/null
+++ b/src/arkode/fcmix/farkmasspreco.c
@@ -0,0 +1,110 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * The C function FARKPSet is to interface between the ARKSP*
+ * modules and the user-supplied preconditioner setup routine 
+ * FARKPSET. Note the use of the generic name FARK_PSET in the 
+ * code below.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_spils.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_MASSPSET(realtype *T, long int *IPAR, 
+			    realtype *RPAR, realtype *W1, 
+			    realtype *W2, realtype *W3, int *IER);
+  extern void FARK_MASSPSOL(realtype *T, realtype *R, realtype *Z, 
+			    realtype *DELTA, int *LR, long int *IPAR, 
+			    realtype *RPAR, realtype *WRK, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSpilsSetMassPreconditioner; see 
+   farkode.h for further details */
+void FARK_SPILSSETMASSPREC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = ARKSpilsSetMassPreconditioner(ARK_arkodemem, NULL, NULL);
+  } else {
+    *ier = ARKSpilsSetMassPreconditioner(ARK_arkodemem, 
+					 FARKMassPSet, FARKMassPSol);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKMASSPSET; see 
+   farkode.h for further details */
+int FARKMassPSet(realtype t, void *user_data, N_Vector vtemp1, 
+		 N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier = 0;
+  realtype *v1data, *v2data, *v3data;
+  FARKUserData ARK_userdata;
+
+  v1data = N_VGetArrayPointer(vtemp1);
+  v2data = N_VGetArrayPointer(vtemp2);
+  v3data = N_VGetArrayPointer(vtemp3);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_MASSPSET(&t, ARK_userdata->ipar, ARK_userdata->rpar,
+		v1data, v2data, v3data, &ier);
+  return(ier);
+}
+
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKMASSPSOL; see 
+   farkode.h for further details */
+int FARKMassPSol(realtype t, N_Vector r, N_Vector z, realtype delta,
+		 int lr, void *user_data, N_Vector vtemp)
+{
+  int ier = 0;
+  realtype *vtdata, *rdata, *zdata;
+  FARKUserData ARK_userdata;
+
+  vtdata = N_VGetArrayPointer(vtemp);
+  rdata  = N_VGetArrayPointer(r);
+  zdata  = N_VGetArrayPointer(z);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_MASSPSOL(&t, rdata, zdata, &delta, &lr, ARK_userdata->ipar, 
+		ARK_userdata->rpar, vtdata, &ier);
+  return(ier);
+}
+
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkmtimes.c b/src/arkode/fcmix/farkmtimes.c
new file mode 100644
index 0000000..d16050a
--- /dev/null
+++ b/src/arkode/fcmix/farkmtimes.c
@@ -0,0 +1,77 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * The C function FARKJtimes is to interface between the ARKSP* 
+ * modules and the user-supplied Jacobian-vector product routine
+ * FARKJTIMES. Note the use of the generic name FARK_JTIMES in
+ * the code below.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_spils.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_MTIMES(realtype *V, realtype *MV, realtype *T, 
+			  long int *IPAR, realtype *RPAR, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSpilsSetMassTimesVecFn; see 
+   farkode.h for further information */
+void FARK_SPILSSETMASS(int *ier)
+{
+  ARKodeMem ark_mem;
+  ark_mem = (ARKodeMem) ARK_arkodemem;
+  *ier = ARKSpilsSetMassTimesVecFn(ARK_arkodemem, FARKMtimes, 
+				   ark_mem->ark_user_data);
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKMTIMES; see
+   farkode.h for further information */
+int FARKMtimes(N_Vector v, N_Vector Mv, realtype t, void *user_data)
+{
+  realtype *vdata, *Mvdata;
+  FARKUserData ARK_userdata;
+  int ier = 0;
+  
+  vdata  = N_VGetArrayPointer(v);
+  Mvdata = N_VGetArrayPointer(Mv);
+  ARK_userdata = (FARKUserData) user_data;
+  FARK_MTIMES(vdata, Mvdata, &t, ARK_userdata->ipar, 
+	      ARK_userdata->rpar, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkode.c b/src/arkode/fcmix/farkode.c
new file mode 100644
index 0000000..899a798
--- /dev/null
+++ b/src/arkode/fcmix/farkode.c
@@ -0,0 +1,1189 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the implementation file for the Fortran interface to
+ * the ARKODE package.  See farkode.h for usage.
+ * NOTE: some routines are necessarily stored elsewhere to avoid
+ * linking problems.  Therefore, see also farkpreco.c, farkpsol.c,
+ * farkjtimes.c, farkadapt.c and farkexpstab.c for all the 
+ * available options.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_band.h>
+#include <arkode/arkode_dense.h>
+#include <arkode/arkode_klu.h>
+#include <arkode/arkode_superlumt.h>
+#include <arkode/arkode_spgmr.h>
+#include <arkode/arkode_spbcgs.h>
+#include <arkode/arkode_sptfqmr.h>
+#include <arkode/arkode_spfgmr.h>
+#include <arkode/arkode_pcg.h>
+
+/*=============================================================*/
+
+/* Definitions for global variables shared between Fortran/C 
+   interface routines */
+void     *ARK_arkodemem;
+long int *ARK_iout;
+realtype *ARK_rout;
+int       ARK_nrtfn;
+int       ARK_ls;
+int       ARK_mass_ls;
+
+/*=============================================================*/
+
+/* Prototypes of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_IMP_FUN(realtype *T, realtype *Y, realtype *YDOT,
+			   long int *IPAR, realtype *RPAR, int *IER);
+  extern void FARK_EXP_FUN(realtype *T, realtype *Y, realtype *YDOT,
+			   long int *IPAR, realtype *RPAR, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface routine to initialize ARKode memory 
+   structure; functions as an all-in-one interface to the C 
+   routines ARKodeCreate, ARKodeSetUserData, ARKodeInit, and 
+   ARKodeSStolerances (or ARKodeSVtolerances); see farkode.h 
+   for further details */
+void FARK_MALLOC(realtype *t0, realtype *y0, int *imex, 
+		 int *iatol, realtype *rtol, realtype *atol, 
+		 long int *iout, realtype *rout, 
+		 long int *ipar, realtype *rpar, int *ier) {
+
+  N_Vector Vatol;
+  FARKUserData ARK_userdata;
+  realtype reltol, abstol;
+
+  *ier = 0;
+
+  /* Check for required vector operations */
+  if(F2C_ARKODE_vec->ops->nvgetarraypointer == NULL) {
+    *ier = -1;
+    printf("Error: getarraypointer vector operation is not implemented.\n\n");
+    return;
+  }
+  if(F2C_ARKODE_vec->ops->nvsetarraypointer == NULL) {
+    *ier = -1;
+    printf("Error: setarraypointer vector operation is not implemented.\n\n");
+    return;
+  }
+  if(F2C_ARKODE_vec->ops->nvcloneempty == NULL) {
+    *ier = -1;
+    printf("Error: cloneempty vector operation is not implemented.\n\n");
+    return;
+  }
+
+  /* Initialize all pointers to NULL */
+  ARK_arkodemem = NULL;
+  Vatol = NULL;
+
+  /* initialize global constants to zero */
+  ARK_nrtfn = 0;
+  ARK_ls = 0;
+  ARK_mass_ls = 0;
+
+  /* Create ARKODE object */
+  ARK_arkodemem = ARKodeCreate();
+  if (ARK_arkodemem == NULL) {
+    *ier = -1;
+    return;
+  }
+
+  /* Set and attach user data */
+  ARK_userdata = NULL;
+  ARK_userdata = (FARKUserData) malloc(sizeof *ARK_userdata);
+  if (ARK_userdata == NULL) {
+    *ier = -1;
+    return;
+  }
+  ARK_userdata->rpar = rpar;
+  ARK_userdata->ipar = ipar;
+  *ier = ARKodeSetUserData(ARK_arkodemem, ARK_userdata);
+  if(*ier != ARK_SUCCESS) {
+    free(ARK_userdata); ARK_userdata = NULL;
+    *ier = -1;
+    return;
+  }
+
+  /* Set data in F2C_ARKODE_vec to y0 */
+  N_VSetArrayPointer(y0, F2C_ARKODE_vec);
+
+  /* Call ARKodeInit based on imex argument */
+  switch (*imex) {
+  case 0:  /* purely implicit */
+    *ier = ARKodeInit(ARK_arkodemem, NULL, FARKfi, 
+		      *t0, F2C_ARKODE_vec);
+    break;
+  case 1:  /* purely explicit */
+    *ier = ARKodeInit(ARK_arkodemem, FARKfe, NULL, 
+		      *t0, F2C_ARKODE_vec);
+    break;
+  case 2:  /* imex */
+    *ier = ARKodeInit(ARK_arkodemem, FARKfe, FARKfi, 
+		      *t0, F2C_ARKODE_vec);
+    break;
+  }
+    
+  /* Reset data pointers */
+  N_VSetArrayPointer(NULL, F2C_ARKODE_vec);
+
+  /* On failure, exit */
+  if(*ier != ARK_SUCCESS) {
+    free(ARK_userdata);
+    ARK_userdata = NULL;
+    *ier = -1;
+    return;
+  }
+
+  /* Set tolerances -- if <= 0, keep as defaults */
+  reltol=1.e-4;
+  abstol=1.e-9;
+  if (*rtol > 0.0)  reltol = *rtol;
+  switch (*iatol) {
+  case 1:
+    if (*atol > 0.0)  abstol = *atol;
+    *ier = ARKodeSStolerances(ARK_arkodemem, reltol, abstol); 
+    break;
+  case 2:
+    Vatol = N_VCloneEmpty(F2C_ARKODE_vec);
+    if (Vatol == NULL) {
+      free(ARK_userdata);
+      ARK_userdata = NULL;
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(atol, Vatol);
+    if (N_VMin(Vatol) <= 0.0)  N_VConst(abstol, Vatol);
+    *ier = ARKodeSVtolerances(ARK_arkodemem, reltol, Vatol);
+    N_VDestroy(Vatol);
+    break;
+  }
+
+  /* On failure, exit */
+  if(*ier != ARK_SUCCESS) {
+    free(ARK_userdata); 
+    ARK_userdata = NULL;
+    *ier = -1;
+    return;
+  }
+
+  /* store pointers to optional output arrays in global vars */
+  ARK_iout = iout;
+  ARK_rout = rout;
+
+  /* Store the unit roundoff in rout for user access */
+  ARK_rout[5] = UNIT_ROUNDOFF;
+
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface routine to re-initialize ARKode memory 
+   structure; functions as an all-in-one interface to the C 
+   routines ARKodeReInit and ARKodeSStolerances (or 
+   ARKodeSVtolerances); see farkode.h for further details */
+void FARK_REINIT(realtype *t0, realtype *y0, int *imex, int *iatol, 
+		 realtype *rtol, realtype *atol, int *ier) {
+
+  N_Vector Vatol;
+  realtype reltol, abstol;
+  *ier = 0;
+
+  /* Initialize all pointers to NULL */
+  Vatol = NULL;
+
+  /* Set data in F2C_ARKODE_vec to y0 */
+  N_VSetArrayPointer(y0, F2C_ARKODE_vec);
+
+  /* Call ARKodeReInit based on imex argument */
+  switch (*imex) {
+  case 0:  /* purely implicit */
+    *ier = ARKodeReInit(ARK_arkodemem, NULL, FARKfi, 
+			*t0, F2C_ARKODE_vec);
+    break;
+  case 1:  /* purely explicit */
+    *ier = ARKodeReInit(ARK_arkodemem, FARKfe, NULL, 
+			*t0, F2C_ARKODE_vec);
+    break;
+  case 2:  /* imex */
+    *ier = ARKodeReInit(ARK_arkodemem, FARKfe, FARKfi, 
+			*t0, F2C_ARKODE_vec);
+    break;
+  }
+
+  /* Reset data pointers */
+  N_VSetArrayPointer(NULL, F2C_ARKODE_vec);
+
+  /* On failure, exit */
+  if (*ier != ARK_SUCCESS) {
+    *ier = -1;
+    return;
+  }
+
+  /* Set tolerances */
+  reltol=1.e-4;
+  abstol=1.e-9;
+  if (*rtol > 0.0)  reltol = *rtol;
+  switch (*iatol) {
+  case 1:
+    if (*atol > 0.0)  abstol = *atol;
+    *ier = ARKodeSStolerances(ARK_arkodemem, reltol, abstol); 
+    break;
+  case 2:
+    Vatol = N_VCloneEmpty(F2C_ARKODE_vec);
+    if (Vatol == NULL) {
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(atol, Vatol);
+    if (N_VMin(Vatol) <= 0.0)  N_VConst(abstol, Vatol);
+    *ier = ARKodeSVtolerances(ARK_arkodemem, reltol, Vatol);
+    N_VDestroy(Vatol);
+    break;
+  }
+
+  /* On failure, exit */
+  if (*ier != ARK_SUCCESS) {
+    *ier = -1;
+    return;
+  }
+
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface routine to re-initialize ARKode memory 
+   structure for a problem with a new size but similar time 
+   scale; functions as an all-in-one interface to the C 
+   routines ARKodeResize (and potentially ARKodeSVtolerances); 
+   see farkode.h for further details */
+void FARK_RESIZE(realtype *t0, realtype *y0, realtype *hscale,
+		 int *itol, realtype *rtol, realtype *atol, int *ier) {
+
+  *ier = 0;
+
+  /* Set data in F2C_ARKODE_vec to y0 */
+  N_VSetArrayPointer(y0, F2C_ARKODE_vec);
+  
+  /* Call ARKodeResize (currently does not allow Fortran 
+     user-supplied vector resize function) */
+  *ier = ARKodeResize(ARK_arkodemem, F2C_ARKODE_vec, *hscale,
+		      *t0, NULL, NULL);
+
+  /* Reset data pointer */
+  N_VSetArrayPointer(NULL, F2C_ARKODE_vec);
+
+  /* On failure, exit */
+  if (*ier != ARK_SUCCESS) {
+    *ier = -1;
+    return;
+  }
+
+  /* Set tolerances, based on itol argument */
+  if (*itol) {
+    N_Vector Vatol = NULL;
+    Vatol = N_VCloneEmpty(F2C_ARKODE_vec);
+    if (Vatol == NULL) {
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(atol, Vatol);
+    *ier = ARKodeSVtolerances(ARK_arkodemem, *rtol, Vatol);
+    N_VDestroy(Vatol);
+  }
+
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeSetDefaults; see 
+   farkode.h for further details */
+void FARK_SETDEFAULTS(int *ier) {
+  *ier = ARKodeSetDefaults(ARK_arkodemem);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C "set" routines having integer 
+   arguments; see farkode.h for further details */
+void FARK_SETIIN(char key_name[], long int *ival, int *ier) {
+  if (!strncmp(key_name, "ORDER", 5)) 
+    *ier = ARKodeSetOrder(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "DENSE_ORDER", 11)) 
+    *ier = ARKodeSetDenseOrder(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "LINEAR", 6)) 
+    *ier = ARKodeSetLinear(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "NONLINEAR", 9)) 
+    *ier = ARKodeSetNonlinear(ARK_arkodemem);
+  else if (!strncmp(key_name, "FIXEDPOINT", 10)) 
+    *ier = ARKodeSetFixedPoint(ARK_arkodemem, (long int) *ival);
+  else if (!strncmp(key_name, "NEWTON", 6)) 
+    *ier = ARKodeSetNewton(ARK_arkodemem);
+  else if (!strncmp(key_name, "EXPLICIT", 8)) 
+    *ier = ARKodeSetExplicit(ARK_arkodemem);
+  else if (!strncmp(key_name, "IMPLICIT", 8)) 
+    *ier = ARKodeSetImplicit(ARK_arkodemem);
+  else if (!strncmp(key_name, "IMEX", 4)) 
+    *ier = ARKodeSetImEx(ARK_arkodemem);
+  else if (!strncmp(key_name, "IRK_TABLE_NUM", 13)) 
+    *ier = ARKodeSetIRKTableNum(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "ERK_TABLE_NUM", 13)) 
+    *ier = ARKodeSetERKTableNum(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "ARK_TABLE_NUM", 13)) 
+    *ier = ARKodeSetARKTableNum(ARK_arkodemem, (int) ival[0], (int) ival[1]);
+  else if (!strncmp(key_name, "MAX_NSTEPS", 10)) 
+    *ier = ARKodeSetMaxNumSteps(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "HNIL_WARNS", 10)) 
+    *ier = ARKodeSetMaxHnilWarns(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "PREDICT_METHOD", 14)) 
+    *ier = ARKodeSetPredictorMethod(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "MAX_ERRFAIL", 11)) 
+    *ier = ARKodeSetMaxErrTestFails(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "MAX_CONVFAIL", 12)) 
+    *ier = ARKodeSetMaxConvFails(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "MAX_NITERS", 10)) 
+    *ier = ARKodeSetMaxNonlinIters(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "ADAPT_SMALL_NEF", 15))
+    *ier = ARKodeSetSmallNumEFails(ARK_arkodemem, (int) *ival);
+  else if (!strncmp(key_name, "LSETUP_MSBP", 11))
+    *ier = ARKodeSetMaxStepsBetweenLSet(ARK_arkodemem, (int) *ival);
+  else {
+    *ier = -99;
+    printf("FARKSETIIN: Unrecognized key.\n\n");
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C "set" routines having real
+   arguments; see farkode.h for further details */
+void FARK_SETRIN(char key_name[], realtype *rval, int *ier) {
+  if (!strncmp(key_name, "INIT_STEP", 9)) 
+    *ier = ARKodeSetInitStep(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "MAX_STEP", 8)) 
+    *ier = ARKodeSetMaxStep(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "MIN_STEP", 8)) 
+    *ier = ARKodeSetMinStep(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "STOP_TIME", 9)) 
+    *ier = ARKodeSetStopTime(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "NLCONV_COEF", 11)) 
+    *ier = ARKodeSetNonlinConvCoef(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "ADAPT_CFL", 9))
+    *ier = ARKodeSetCFLFraction(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "ADAPT_SAFETY", 12)) 
+    *ier = ARKodeSetSafetyFactor(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "ADAPT_BIAS", 10))
+    *ier = ARKodeSetErrorBias(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "ADAPT_GROWTH", 12)) 
+    *ier = ARKodeSetMaxGrowth(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "ADAPT_BOUNDS", 12))
+    *ier = ARKodeSetFixedStepBounds(ARK_arkodemem, rval[0], rval[1]);
+  else if (!strncmp(key_name, "ADAPT_ETAMX1", 12))
+    *ier = ARKodeSetMaxFirstGrowth(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "ADAPT_ETAMXF", 12))
+    *ier = ARKodeSetMaxEFailGrowth(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "ADAPT_ETACF", 11))
+    *ier = ARKodeSetMaxCFailGrowth(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "NONLIN_CRDOWN", 11))
+    *ier = ARKodeSetNonlinCRDown(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "NONLIN_RDIV", 9))
+    *ier = ARKodeSetNonlinRDiv(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "LSETUP_DGMAX", 12))
+    *ier = ARKodeSetDeltaGammaMax(ARK_arkodemem, *rval);
+  else if (!strncmp(key_name, "FIXED_STEP", 10))
+    *ier = ARKodeSetFixedStep(ARK_arkodemem, *rval);
+  else {
+    *ier = -99;
+    printf("FARKSETRIN: Unrecognized key: %s\n\n",key_name);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeSetAdaptivityMethod; 
+   see farkode.h for further details */
+void FARK_SETADAPTMETHOD(int *imethod, int *idefault, int *ipq, 
+			 realtype *params, int *ier) {
+
+  *ier = ARKodeSetAdaptivityMethod(ARK_arkodemem, *imethod, 
+				   *idefault, *ipq, params);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeSetERKTable; see 
+   farkode.h for further details */
+void FARK_SETERKTABLE(int *s, int *q, int *p, realtype *c, realtype *A, 
+		      realtype *b, realtype *b2, int *ier) {
+  *ier = ARKodeSetERKTable(ARK_arkodemem, *s, *q, *p, c, A, b, b2);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeSetIRKTable; see 
+   farkode.h for further details */
+void FARK_SETIRKTABLE(int *s, int *q, int *p, realtype *c, realtype *A, 
+		      realtype *b, realtype *b2, int *ier) {
+  *ier = ARKodeSetIRKTable(ARK_arkodemem, *s, *q, *p, c, A, b, b2);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeSetARKTables; see 
+   farkode.h for further details */
+void FARK_SETARKTABLES(int *s, int *q, int *p, realtype *ci, 
+		       realtype *ce, realtype *Ai, realtype *Ae, 
+		       realtype *bi, realtype *be, realtype *b2i, 
+		       realtype *b2e, int *ier) {
+  *ier = ARKodeSetARKTables(ARK_arkodemem, *s, *q, *p, ci, 
+			    ce, Ai, Ae, bi, be, b2i, b2e);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface routine to set residual tolerance 
+   scalar/array; functions as an all-in-one interface to the C 
+   routines ARKodeResStolerance and ARKodeResVtolerance; 
+   see farkode.h for further details */
+void FARK_SETRESTOLERANCE(int *itol, realtype *atol, int *ier) {
+
+  N_Vector Vatol;
+  realtype abstol;
+
+  *ier = 0;
+
+  /* Set tolerance, based on itol argument */
+  abstol=1.e-9;
+  switch (*itol) {
+  case 1:
+    if (*atol > 0.0)  abstol = *atol;
+    *ier = ARKodeResStolerance(ARK_arkodemem, abstol); 
+    break;
+  case 2:
+    Vatol = NULL;
+    Vatol = N_VCloneEmpty(F2C_ARKODE_vec);
+    if (Vatol == NULL) {
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(atol, Vatol);
+    if (N_VMin(Vatol) <= 0.0)  N_VConst(abstol, Vatol);
+    *ier = ARKodeResVtolerance(ARK_arkodemem, Vatol);
+    N_VDestroy(Vatol);
+    break;
+  }
+
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeSetDiagnostics; see 
+   farkode.h for further details */
+void FARK_SETDIAGNOSTICS(char fname[], int *flen, int *ier) {
+  char *filename=NULL;
+  FILE *DFID=NULL;
+  int i;
+
+  /* copy fname into array of specified length */
+  filename = (char *) malloc((*flen)*sizeof(char));
+  for (i=0; i<*flen; i++)  filename[i] = fname[i];
+
+  /* open diagnostics output file */
+  DFID = fopen(filename,"w");
+  if (DFID == NULL) {
+    *ier = 1;
+    return;
+  }
+  *ier = ARKodeSetDiagnostics(ARK_arkodemem, DFID);
+  free(filename);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran routine to close diagnostics output file; see farkode.h 
+   for further details */
+void FARK_STOPDIAGNOSTICS(int *ier) {
+  ARKodeMem ark_mem;
+  if (ARK_arkodemem == NULL) {
+    *ier = 1;
+    return;
+  }
+  ark_mem = (ARKodeMem) ARK_arkodemem;
+
+  if (ark_mem->ark_diagfp == NULL) {
+    *ier = 1;
+    return;
+  }
+  *ier = fclose(ark_mem->ark_diagfp);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKDense; see farkode.h for 
+   further details */
+void FARK_DENSE(long int *neq, int *ier) {
+  *ier = ARKDense(ARK_arkodemem, *neq);
+  ARK_ls = ARK_LS_DENSE;
+  return;
+}
+
+/* Fortran interface to C routine ARKMassDense; see farkode.h 
+   for further details */
+void FARK_MASSDENSE(long int *neq, int *ier) {
+  *ier = ARKMassDense(ARK_arkodemem, *neq, NULL);
+  ARK_mass_ls = ARK_LS_DENSE;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKBand; see farkode.h for 
+   further details */
+void FARK_BAND(long int *neq, long int *mupper, 
+	       long int *mlower, int *ier) {
+  *ier = ARKBand(ARK_arkodemem, *neq, *mupper, *mlower);
+  ARK_ls = ARK_LS_BAND;
+  return;
+}
+
+/* Fortran interface to C routine ARKMassBand; see farkode.h 
+   for further details */
+void FARK_MASSBAND(long int *neq, long int *mupper, 
+		   long int *mlower, int *ier) {
+  *ier = ARKMassBand(ARK_arkodemem, *neq, *mupper, 
+		     *mlower, NULL);
+  ARK_mass_ls = ARK_LS_BAND;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSpgmr and it's associated 
+   "set" routines; see farkode.h for further details */
+void FARK_SPGMR(int *pretype, int *gstype, int *maxl, 
+		realtype *delt, int *ier) {
+
+  *ier = ARKSpgmr(ARK_arkodemem, *pretype, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetGSType(ARK_arkodemem, *gstype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_ls = ARK_LS_SPGMR;
+  return;
+}
+
+/* Fortran interface to C routine ARKMassSpgmr and it's 
+   associated "set" routines; see farkode.h for further details */
+void FARK_MASSSPGMR(int *pretype, int *gstype, int *maxl, 
+		    realtype *delt, int *ier) {
+
+  *ier = ARKMassSpgmr(ARK_arkodemem, *pretype, *maxl, NULL, NULL);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassGSType(ARK_arkodemem, *gstype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_mass_ls = ARK_LS_SPGMR;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSpbcg and it's associated 
+   "set" routines; see farkode.h for further details */
+void FARK_SPBCG(int *pretype, int *maxl, realtype *delt, int *ier) {
+
+  *ier = ARKSpbcg(ARK_arkodemem, *pretype, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_ls = ARK_LS_SPBCG;
+  return;
+}
+
+/* Fortran interface to C routine ARKMassSpbcg and it's associated 
+   "set" routines; see farkode.h for further details */
+void FARK_MASSSPBCG(int *pretype, int *maxl, 
+		    realtype *delt, int *ier) {
+
+  *ier = ARKMassSpbcg(ARK_arkodemem, *pretype, *maxl, NULL, NULL);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_mass_ls = ARK_LS_SPBCG;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSptfqmr and it's associated 
+   "set" routines; see farkode.h for further details */
+void FARK_SPTFQMR(int *pretype, int *maxl, realtype *delt, int *ier) {
+
+  *ier = ARKSptfqmr(ARK_arkodemem, *pretype, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_ls = ARK_LS_SPTFQMR;
+  return;
+}
+
+/* Fortran interface to C routine ARKMassSptfqmr and it's associated 
+   "set" routines; see farkode.h for further details */
+void FARK_MASSSPTFQMR(int *pretype, int *maxl, 
+		      realtype *delt, int *ier) {
+
+  *ier = ARKMassSptfqmr(ARK_arkodemem, *pretype, *maxl, NULL, NULL);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_mass_ls = ARK_LS_SPTFQMR;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSpfgmr and it's associated 
+   "set" routines; see farkode.h for further details */
+void FARK_SPFGMR(int *pretype, int *gstype, int *maxl, realtype *delt, int *ier) {
+
+  *ier = ARKSpfgmr(ARK_arkodemem, *pretype, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetGSType(ARK_arkodemem, *gstype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_ls = ARK_LS_SPFGMR;
+  return;
+}
+
+/* Fortran interface to C routine ARKMassSpfgmr and it's associated 
+   "set" routines; see farkode.h for further details */
+void FARK_MASSSPFGMR(int *pretype, int *gstype, int *maxl, 
+		     realtype *delt, int *ier) {
+
+  *ier = ARKMassSpfgmr(ARK_arkodemem, *pretype, *maxl, NULL, NULL);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassGSType(ARK_arkodemem, *gstype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_mass_ls = ARK_LS_SPFGMR;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKPcg and it's associated 
+   "set" routines; see farkode.h for further details */
+void FARK_PCG(int *pretype, int *maxl, realtype *delt, int *ier) {
+
+  *ier = ARKPcg(ARK_arkodemem, *pretype, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_ls = ARK_LS_PCG;
+  return;
+}
+
+/* Fortran interface to C routine ARKMassPcg and it's associated 
+   "set" routines; see farkode.h for further details */
+void FARK_MASSPCG(int *pretype, int *maxl, 
+		  realtype *delt, int *ier) {
+
+  *ier = ARKMassPcg(ARK_arkodemem, *pretype, *maxl, NULL, NULL);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_mass_ls = ARK_LS_PCG;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C "set" routines for the ARKSpgmr solver; 
+   see farkode.h for further details */
+void FARK_SPGMRREINIT(int *pretype, int *gstype, 
+		      realtype *delt, int *ier) {
+
+  *ier = ARKSpilsSetPrecType(ARK_arkodemem, *pretype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetGSType(ARK_arkodemem, *gstype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_ls = ARK_LS_SPGMR;
+  return;
+}
+
+/* Fortran interface to C "set" routines for the ARKMassSpgmr solver; 
+   see farkode.h for further details */
+void FARK_MASSSPGMRREINIT(int *pretype, int *gstype, 
+			  realtype *delt, int *ier) {
+
+  *ier = ARKSpilsSetMassPrecType(ARK_arkodemem, *pretype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassGSType(ARK_arkodemem, *gstype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_mass_ls = ARK_LS_SPGMR;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C "set" routines for the ARKSpbcg solver; 
+   see farkode.h for further details */
+void FARK_SPBCGREINIT(int *pretype, int *maxl, 
+		      realtype *delt, int *ier) {
+
+  *ier = ARKSpilsSetPrecType(ARK_arkodemem, *pretype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMaxl(ARK_arkodemem, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_ls = ARK_LS_SPBCG;
+  return;
+}
+
+/* Fortran interface to C "set" routines for the ARKMassSpbcg solver; 
+   see farkode.h for further details */
+void FARK_MASSSPBCGREINIT(int *pretype, int *maxl, 
+			  realtype *delt, int *ier) {
+
+  *ier = ARKSpilsSetMassPrecType(ARK_arkodemem, *pretype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassMaxl(ARK_arkodemem, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_mass_ls = ARK_LS_SPBCG;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C "set" routines for the ARKSptfqmr
+   solver; see farkode.h for further details */
+void FARK_SPTFQMRREINIT(int *pretype, int *maxl, 
+			realtype *delt, int *ier) {
+
+  *ier = ARKSpilsSetPrecType(ARK_arkodemem, *pretype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMaxl(ARK_arkodemem, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_ls = ARK_LS_SPTFQMR;
+  return;
+}
+
+/* Fortran interface to C "set" routines for the ARKMassSptfqmr
+   solver; see farkode.h for further details */
+void FARK_MASSSPTFQMRREINIT(int *pretype, int *maxl, 
+			    realtype *delt, int *ier) {
+
+  *ier = ARKSpilsSetMassPrecType(ARK_arkodemem, *pretype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassMaxl(ARK_arkodemem, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_mass_ls = ARK_LS_SPTFQMR;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C "set" routines for the ARKSpfgmr solver; 
+   see farkode.h for further details */
+void FARK_SPFGMRREINIT(int *pretype, int *gstype, 
+		       realtype *delt, int *ier) {
+
+  *ier = ARKSpilsSetPrecType(ARK_arkodemem, *pretype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetGSType(ARK_arkodemem, *gstype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_ls = ARK_LS_SPFGMR;
+  return;
+}
+
+/* Fortran interface to C "set" routines for the ARKMassSpfgmr solver; 
+   see farkode.h for further details */
+void FARK_MASSSPFGMRREINIT(int *pretype, int *gstype, 
+			   realtype *delt, int *ier) {
+
+  *ier = ARKSpilsSetMassPrecType(ARK_arkodemem, *pretype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassGSType(ARK_arkodemem, *gstype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_mass_ls = ARK_LS_SPFGMR;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C "set" routines for the ARKPcg solver; 
+   see farkode.h for further details */
+void FARK_PCGREINIT(int *pretype, int *maxl, 
+		    realtype *delt, int *ier) {
+
+  *ier = ARKSpilsSetPrecType(ARK_arkodemem, *pretype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMaxl(ARK_arkodemem, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_ls = ARK_LS_PCG;
+  return;
+}
+
+/* Fortran interface to C "set" routines for the ARKMassPcg solver; 
+   see farkode.h for further details */
+void FARK_MASSPCGREINIT(int *pretype, int *maxl, 
+			realtype *delt, int *ier) {
+
+  *ier = ARKSpilsSetMassPrecType(ARK_arkodemem, *pretype);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassMaxl(ARK_arkodemem, *maxl);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  *ier = ARKSpilsSetMassEpsLin(ARK_arkodemem, *delt);
+  if (*ier != ARKSPILS_SUCCESS) return;
+
+  ARK_mass_ls = ARK_LS_PCG;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKode (the main integrator); 
+   see farkode.h for further details */
+void FARK_ARKODE(realtype *tout, realtype *t, realtype *y, 
+		 int *itask, int *ier) {
+
+  /* attach user solution array to solver memory */
+  N_VSetArrayPointer(y, F2C_ARKODE_vec);
+
+  /* call ARKode solver */
+  *ier = ARKode(ARK_arkodemem, *tout, F2C_ARKODE_vec, t, *itask);
+
+  /* detach user solution array from solver memory */
+  N_VSetArrayPointer(NULL, F2C_ARKODE_vec);
+
+  /* Load optional outputs in iout & rout */
+  ARKodeGetWorkSpace(ARK_arkodemem,
+		     &ARK_iout[0],          /* LENRW   */
+		     &ARK_iout[1]);         /* LENIW   */
+  ARKodeGetIntegratorStats(ARK_arkodemem, 
+			   &ARK_iout[2],    /* NST     */
+			   &ARK_iout[3],    /* NST_STB */
+			   &ARK_iout[4],    /* NST_ACC */ 
+			   &ARK_iout[5],    /* NST_ATT */ 
+			   &ARK_iout[6],    /* NFE     */ 
+			   &ARK_iout[7],    /* NFI     */ 
+			   &ARK_iout[8],    /* NSETUPS */ 
+			   &ARK_iout[9],    /* NETF    */ 
+			   &ARK_rout[0],    /* H0U     */
+			   &ARK_rout[1],    /* HU      */ 
+			   &ARK_rout[2],    /* HCUR    */ 
+			   &ARK_rout[3]);   /* TCUR    */ 
+  ARKodeGetTolScaleFactor(ARK_arkodemem, 
+			  &ARK_rout[4]);    /* TOLSFAC */
+  ARKodeGetNonlinSolvStats(ARK_arkodemem,
+                          &ARK_iout[10],    /* NNI     */
+                          &ARK_iout[11]);   /* NCFN    */
+  
+  /* If root finding is on, load those outputs as well */
+  if (ARK_nrtfn != 0)
+    ARKodeGetNumGEvals(ARK_arkodemem, &ARK_iout[12]);  /* NGE */
+
+  /* Attach linear solver outputs */
+  switch(ARK_ls) {
+  case ARK_LS_DENSE:
+  case ARK_LS_BAND:
+  case ARK_LS_LAPACKDENSE:
+  case ARK_LS_LAPACKBAND:
+    ARKDlsGetWorkSpace(ARK_arkodemem, &ARK_iout[13], &ARK_iout[14]);  /* LENRWLS, LENIWLS */
+    ARKDlsGetLastFlag(ARK_arkodemem, &ARK_iout[15]);                  /* LSTF  */
+    ARKDlsGetNumRhsEvals(ARK_arkodemem, &ARK_iout[16]);               /* NFELS */
+    ARKDlsGetNumJacEvals(ARK_arkodemem, &ARK_iout[17]);               /* NJE   */
+    break;
+  case ARK_LS_KLU:
+  case ARK_LS_SUPERLUMT:
+    ARKSlsGetLastFlag(ARK_arkodemem, &ARK_iout[15]);                  /* LSTF  */
+    ARKSlsGetNumJacEvals(ARK_arkodemem, &ARK_iout[17]);               /* NJE   */
+    break;
+  case ARK_LS_SPGMR:
+  case ARK_LS_SPBCG:
+  case ARK_LS_SPTFQMR:
+  case ARK_LS_SPFGMR:
+  case ARK_LS_PCG:
+    ARKSpilsGetWorkSpace(ARK_arkodemem, &ARK_iout[13], &ARK_iout[14]); /* LENRWLS, LENIWLS */
+    ARKSpilsGetLastFlag(ARK_arkodemem, &ARK_iout[15]);                 /* LSTF  */
+    ARKSpilsGetNumRhsEvals(ARK_arkodemem, &ARK_iout[16]);              /* NFELS */
+    ARKSpilsGetNumJtimesEvals(ARK_arkodemem, &ARK_iout[17]);           /* NJTV  */
+    ARKSpilsGetNumPrecEvals(ARK_arkodemem, &ARK_iout[18]);             /* NPE   */
+    ARKSpilsGetNumPrecSolves(ARK_arkodemem, &ARK_iout[19]);            /* NPS   */
+    ARKSpilsGetNumLinIters(ARK_arkodemem, &ARK_iout[20]);              /* NLI   */
+    ARKSpilsGetNumConvFails(ARK_arkodemem, &ARK_iout[21]);             /* NCFL  */
+  }
+
+  /* Attach mass matrix linear solver outputs */
+  switch(ARK_mass_ls) {
+  case ARK_LS_DENSE:
+  case ARK_LS_BAND:
+  case ARK_LS_LAPACKDENSE:
+  case ARK_LS_LAPACKBAND:
+    ARKDlsGetMassWorkSpace(ARK_arkodemem, &ARK_iout[22], &ARK_iout[23]);  /* LENRWMS, LENIWMS */
+    ARKDlsGetLastMassFlag(ARK_arkodemem, &ARK_iout[24]);                  /* LSTMF */
+    ARKDlsGetNumMassEvals(ARK_arkodemem, &ARK_iout[25]);                  /* NME   */
+    break;
+  case ARK_LS_KLU:
+  case ARK_LS_SUPERLUMT:
+    ARKSlsGetLastMassFlag(ARK_arkodemem, &ARK_iout[24]);                  /* LSTMF */
+    ARKSlsGetNumMassEvals(ARK_arkodemem, &ARK_iout[25]);                  /* NME   */
+    break;
+  case ARK_LS_SPGMR:
+  case ARK_LS_SPBCG:
+  case ARK_LS_SPTFQMR:
+  case ARK_LS_SPFGMR:
+  case ARK_LS_PCG:
+    ARKSpilsGetMassWorkSpace(ARK_arkodemem, &ARK_iout[22], &ARK_iout[23]); /* LENRWMS, LENIWMS */
+    ARKSpilsGetLastMassFlag(ARK_arkodemem, &ARK_iout[24]);                 /* LSTMF */
+    ARKSpilsGetNumMassPrecEvals(ARK_arkodemem, &ARK_iout[25]);             /* NMPE  */
+    ARKSpilsGetNumMassPrecSolves(ARK_arkodemem, &ARK_iout[26]);            /* NMPS  */
+    ARKSpilsGetNumMassIters(ARK_arkodemem, &ARK_iout[27]);                 /* NMLI  */
+    ARKSpilsGetNumMassConvFails(ARK_arkodemem, &ARK_iout[28]);             /* NMCFL */
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeGetDky; see farkode.h 
+   for further details */
+void FARK_DKY(realtype *t, int *k, realtype *dky, int *ier) {
+
+  /* store pointer existing F2C_ARKODE_vec data array */
+  realtype *f2c_data = N_VGetArrayPointer(F2C_ARKODE_vec);
+
+  /* attach output data array to F2C_ARKODE_vec */
+  N_VSetArrayPointer(dky, F2C_ARKODE_vec);
+
+  /* call ARKodeGetDky */
+  *ier = 0;
+  *ier = ARKodeGetDky(ARK_arkodemem, *t, *k, F2C_ARKODE_vec);
+
+  /* reattach F2C_ARKODE_vec to previous data array */
+  N_VSetArrayPointer(f2c_data, F2C_ARKODE_vec);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeGetErrWeights; see 
+   farkode.h for further details */
+void FARK_GETERRWEIGHTS(realtype *eweight, int *ier) {
+
+  /* store pointer existing F2C_ARKODE_vec data array */
+  realtype *f2c_data = N_VGetArrayPointer(F2C_ARKODE_vec);
+
+  /* attach output data array to F2C_ARKODE_vec */
+  N_VSetArrayPointer(eweight, F2C_ARKODE_vec);
+
+  /* call ARKodeGetErrWeights */
+  *ier = 0;
+  *ier = ARKodeGetErrWeights(ARK_arkodemem, F2C_ARKODE_vec);
+
+  /* reattach F2C_ARKODE_vec to previous data array */
+  N_VSetArrayPointer(f2c_data, F2C_ARKODE_vec);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeGetEstLocalErrors; see 
+   farkode.h for further details */
+void FARK_GETESTLOCALERR(realtype *ele, int *ier) {
+
+  /* store pointer existing F2C_ARKODE_vec data array */
+  realtype *f2c_data = N_VGetArrayPointer(F2C_ARKODE_vec);
+
+  /* attach output data array to F2C_ARKODE_vec */
+  N_VSetArrayPointer(ele, F2C_ARKODE_vec);
+
+  /* call ARKodeGetEstLocalErrors */
+  *ier = 0;
+  *ier = ARKodeGetEstLocalErrors(ARK_arkodemem, F2C_ARKODE_vec);
+
+  /* reattach F2C_ARKODE_vec to previous data array */
+  N_VSetArrayPointer(f2c_data, F2C_ARKODE_vec);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeFree; see farkode.h for 
+   further details */
+void FARK_FREE() {
+
+  ARKodeMem ark_mem;
+  ark_mem = (ARKodeMem) ARK_arkodemem;
+  free(ark_mem->ark_user_data); ark_mem->ark_user_data = NULL;
+
+  ARKodeFree(&ARK_arkodemem);
+
+  N_VSetArrayPointer(NULL, F2C_ARKODE_vec);
+  N_VDestroy(F2C_ARKODE_vec);
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeWriteParameters; see 
+   farkode.h for further details */
+void FARK_WRITEPARAMETERS(int *ier) {
+  *ier = ARKodeWriteParameters(ARK_arkodemem, stdout);
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied FORTRAN function FARKEFUN; see 
+   farkode.h for further details */
+int FARKfe(realtype t, N_Vector y, N_Vector ydot, void *user_data) {
+
+  int ier;
+  realtype *ydata, *dydata;
+  FARKUserData ARK_userdata;
+  ydata  = N_VGetArrayPointer(y);
+  dydata = N_VGetArrayPointer(ydot);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_EXP_FUN(&t, ydata, dydata, ARK_userdata->ipar, 
+	       ARK_userdata->rpar, &ier);
+  return(ier);
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied FORTRAN function FARKIFUN; see 
+   farkode.h for further details */
+int FARKfi(realtype t, N_Vector y, N_Vector ydot, void *user_data) {
+
+  int ier;
+  realtype *ydata, *dydata;
+  FARKUserData ARK_userdata;
+  ydata  = N_VGetArrayPointer(y);
+  dydata = N_VGetArrayPointer(ydot);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_IMP_FUN(&t, ydata, dydata, ARK_userdata->ipar, 
+	       ARK_userdata->rpar, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkode.h b/src/arkode/fcmix/farkode.h
new file mode 100644
index 0000000..c98665b
--- /dev/null
+++ b/src/arkode/fcmix/farkode.h
@@ -0,0 +1,2308 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the header file for FARKODE, the Fortran interface to
+ * the ARKODE package.                                            
+ *--------------------------------------------------------------*/
+
+/*===============================================================
+                FARKODE Interface Package
+
+ The FARKODE Interface Package is a package of C functions which 
+ support the use of the ARKODE solver, for the solution of ODE 
+ systems 
+         M(t) dy/dt = fe(t,y) + fi(t,y), 
+ in a mixed Fortran/C setting.  While ARKODE is written in C, it
+ is assumed here that the user's calling program and user-supplied
+ problem-defining routines are written in Fortran.  This package 
+ provides the necessary interface to ARKODE any acceptable NVECTOR
+ implementation.
+ 
+ A summary of the user-callable functions, with the corresponding 
+ ARKODE functions, are as follows:
+ 
+   Fortran                    ARKODE
+   ---------------------      --------------------------------
+   FNVINITS                   N_VNew_Serial
+   FNVINITP                   N_VNew_Parallel
+   FNVINITOMP                 N_VNew_OpenMP
+   FNVINITPTS                 N_VNew_Pthreads
+
+   FARKMALLOC                 ARKodeCreate, ARKodeSetUserData, 
+                                 and ARKodeInit
+   FARKREINIT                 ARKReInit
+   FARKRESIZE                 ARKResize
+   FARKSETIIN                 ARKodeSet* (integer arguments)
+   FARKSETRIN                 ARKodeSet* (real arguments)
+   FARKSETADAPTIVITYMETHOD    ARKodeSetAdaptivityMethod
+   FARKSETDEFAULTS            ARKodeSetDefaults
+   FARKSETERKTABLE            ARKodeSetERKTable
+   FARKSETIRKTABLE            ARKodeSetIRKTable
+   FARKSETARKTABLES           ARKodeSetARKTables
+   FARKSETRESTOLERANCE        ARKodeResStolerance, ARKodeResVtolerance
+   FARKEWTSET                 ARKodeWFtolerances
+   FARKADAPTSET               ARKodeSetAdaptivityFn
+   FARKEXPSTABSET             ARKodeSetStabilityFn
+   FARKSETDIAGNOSTICS         ARKodeSetDiagnostics
+   FARKSTOPDIAGNOSTICS        (none)
+
+   FARKDENSE                  ARKDense
+   FARKDENSESETJAC            ARKDlsSetDenseJacFn
+   FARKMASSDENSE              ARKMassDense
+   FARKDENSESETMASS           ARKDlsSetDenseMassFn
+
+   FARKBAND                   ARKBand
+   FARKBANDSETJAC             ARKDlsSetBandJacFn
+   FARKMASSBAND               ARKMassBand
+   FARKBANDSETMASS            ARKDlsSetBandMassFn
+
+   FARKLAPACKDENSE            ARKLapackDense
+   FARKLAPACKDENSESETJAC      ARKDlsSetDenseJacFn
+   FARKMASSLAPACKDENSE        ARKMassLapackDense
+   FARKLAPACKDENSESETMASS     ARKDlsSetDenseMassFn
+
+   FARKLAPACKBAND             ARKLapackBand
+   FARKLAPACKBANDSETJAC       ARKDlsSetBandJacFn
+   FARKMASSLAPACKBAND         ARKMassLapackBand
+   FARKLAPACKBANDSETMASS      ARKDlsSetBandMassFn
+
+   FARKKLU                    ARKKLU
+   FARKKLUREINIT              ARKKLUReinit
+   FARKSUPERLUMT              ARKSuperLUMT
+   FARKSPARSESETJAC           ARKSlsSetSparseJacFn
+   FARKMASSKLU                ARKMassKLU
+   FARKMASSKLUREINIT          ARKMassKLUReinit
+   FARKMASSSUPERLUMT          ARKMassSuperLUMT
+   FARKSPARSESETMASS          ARKSlsSetSparseMassFn
+
+   FARKSPGMR                  ARKSpgmr and ARKSpilsSet*
+   FARKSPGMRREINIT            ARKSpilsSet*
+   FARKMASSSPGMR              ARKMassSpgmr and ARKSpilsSetMass*
+   FARKMASSSPGMRREINIT        ARKSpilsSetMass*
+
+   FARKSPBCG                  ARKSpbcg and ARKSpilsSet*
+   FARKSPBCGREINIT            ARKSpilsSet*
+   FARKMASSSPBCG              ARKMassSpbcg and ARKSpilsSetMass*
+   FARKMASSSPBCGREINIT        ARKSpilsSetMass*
+
+   FARKSPTFQMR                ARKSptfqmr and ARKSpilsSet*
+   FARKSPTFQMRREINIT          ARKSpilsSet*
+   FARKMASSSPTFQMR            ARKMassSptfqmr and ARKSpilsSetMass*
+   FARKMASSSPTFQMRREINIT      ARKSpilsSetMass*
+
+   FARKSPFGMR                 ARKSpfgmr and ARKSpilsSet*
+   FARKSPFGMRREINIT           ARKSpilsSet*
+   FARKMASSSPFGMR             ARKwMASSMassSpfgmr and ARKSpilsSetMASS*
+   FARKMASSSPFGMRREINIT       ARKSpilsSetMASS*
+
+   FARKPCG                    ARKPcg and ARKSpilsSet*
+   FARKPCGREINIT              ARKSpilsSet*
+   FARKMASSPCG                ARKMASSPcg and ARKSpilsSetMASS*
+   FARKMASSPCGREINIT          ARKSpilsSetMASS*
+
+   FARKSPILSSETJAC            ARKSpilsSetJacTimesVecFn
+   FARKSPILSSETPREC           ARKSpilsSetPreconditioner
+   FARKSPILSSETMASS           ARKSpilsSetMassTimesVecFn
+   FARKSPILSSETMASSPREC       ARKSpilsSetMassPreconditioner
+ 
+   FARKODE                    ARKode, ARKodeGet*, and ARK*Get*
+   FARKDKY                    ARKodeGetDky
+
+   FARKGETERRWEIGHTS          ARKodeGetErrWeights
+   FARKGETESTLOCALERR         ARKodeGetEstLocalErrors
+
+   FARKFREE                   ARKodeFree
+   ---------------------      --------------------------------
+
+ 
+ The user-supplied functions, each listed with the corresponding interface
+ function which calls it (and its type within ARKODE), are as follows:
+
+   Fortran:           Interface Fcn:           ARKODE Type:
+   -------------      ------------------       -----------------------
+   FARKIFUN           FARKfi                   ARKRhsFn
+   FARKEFUN           FARKfe                   ARKRhsFn
+   FARKDJAC           FARKDenseJac             ARKDlsDenseJacFn
+   FARKDMASS          FARKDenseMass            ARKDlsDenseMassFn
+   FARKBJAC           FARKBandJac              ARKDlsBandJacFn
+   FARKBMASS          FARKBandMass             ARKDlsBandMassFn
+   FARKSPJAC          FARKSparseJac            ARKSlsSparseJacFn
+   FARKSPMASS         FARKSparseMass           ARKSlsSparseMassFn
+   FARKPSOL           FARKPSol                 ARKSpilsPrecSolveFn
+   FARKPSET           FARKPSet                 ARKSpilsPrecSetupFn
+   FARKMASSPSOL       FARKMassPSol             ARKSpilsMassPrecSolveFn
+   FARKMASSPSET       FARKMassPSet             ARKSpilsMassPrecSetupFn
+   FARKJTIMES         FARKJtimes               ARKSpilsJacTimesVecFn
+   FARKMTIMES         FARKMtimes               ARKSpilsMassTimesVecFn
+   FARKEWT            FARKEwt                  ARKEwtFn
+   FARKADAPT          FARKAdapt                ARKAdaptFn
+   FARKEXPSTAB        FARKExpStab              ARKExpStabFn
+   -------------      ------------------       -----------------------
+
+ In contrast to the case of direct use of ARKODE, and of most Fortran ODE
+ solvers, the names of all user-supplied routines here are fixed, in
+ order to maximize portability for the resulting mixed-language program.
+ 
+ Important note on portability:  In this package, the names of the interface 
+ functions, and the names of the Fortran user routines called by them, appear 
+ as dummy names which are mapped to actual values by a series of definitions, 
+ in this and other header files.
+ 
+ =============================================================================
+ 
+                  Usage of the FARKODE Interface Package
+ 
+ The usage of FARKODE requires calls to five or more interface
+ functions, depending on the method options selected, and one or more
+ user-supplied routines which define the problem to be solved.  These
+ function calls and user routines are summarized separately below.
+ 
+ Some details are omitted, and the user is referred to the ARKODE user 
+ documentation for more complete information.  Information on the arguments 
+ of any given user-callable interface routine, or of a given user-supplied 
+ function called by an interface function, can be found in the documentation 
+ on the corresponding function in the ARKODE package.
+ 
+ The number labels on the instructions below end with s for instructions
+ that are specific to use with the N_VSerial package; similarly those that 
+ end with p are specific to use with the N_VParallel package.
+
+ -----------------------------------------------------------------------------
+
+                               Data Types
+
+ Throughout this documentation, we will refer to data types according to their
+ usage in SUNDIALS.  The equivalent types to these may vary, depending on your
+ computer architecture and on how SUNDIALS was compiled.  A Fortran user 
+ should take care that all arguments passed through this Fortran/C interface 
+ are declared of the appropriate type.
+ 
+ Integers: SUNDIALS uses both 'int' and 'long int' types:
+   int      -- equivalent to an INTEGER or INTEGER*4 in Fortran
+   long int -- this will depend on the computer architecture:
+                 32-bit -- equivalent to an INTEGER or INTEGER*4 in Fortran
+                 64-bit -- equivalent to an INTEGER*8 in Fortran
+	      
+ Real numbers:  At compilation, SUNDIALS allows the configuration option 
+ '--with-precision', that accepts values of 'single', 'double' or 'extended' 
+ (the default is 'double').  This choice dictates the size of a SUNDIALS 
+ 'realtype' variable.  The corresponding Fortran types for these 'realtype' 
+ sizes are:
+   single   -- equivalent to a REAL or REAL*4 in Fortran
+   double   -- equivalent to a DOUBLE PRECISION or REAL*8 in Fortran
+   extended -- equivalent to a REAL*16 in Fortran
+
+ -----------------------------------------------------------------------------
+
+ (1) User-supplied right-hand side routines: FARKIFUN and FARKEFUN
+     The user must in all cases supply at least one of the following Fortran 
+     routines:
+
+       SUBROUTINE FARKIFUN(T, Y, YDOT, IPAR, RPAR, IER)
+
+     Sets the YDOT array to fi(T,Y), the implicit portion of the right-hand 
+     side of the ODE system, as function of time T and the state variable 
+     array Y.
+
+       SUBROUTINE FARKEFUN(T, Y, YDOT, IPAR, RPAR, IER)
+
+     Sets the YDOT array to fe(t,y), the explicit portion of the right-hand 
+     side of the ODE system, as function of time T and the state variable 
+     array Y.  
+
+     The arguments are:
+       Y    -- array containing state variables [realtype, input]
+       YDOT -- array containing state derivatives [realtype, output]
+       IPAR -- array containing integer user data that was passed to
+               FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                 >0 if a recoverable error occurred,
+                 <0 if an unrecoverable error ocurred.
+ 
+ (2s) Optional user-supplied dense Jacobian approximation routine: FARKDJAC
+
+     As an option when using the DENSE linear solver, the user may supply a
+     routine that computes a dense approximation of the system Jacobian 
+     J = dfi(t,y)/dy.  If supplied, it must have the following form:
+
+       SUBROUTINE FARKDJAC(NEQ, T, Y, FY, DJAC, H, IPAR, RPAR, WK1, WK2, 
+      &                    WK3, IER)
+
+     Typically this routine will use only NEQ, T, Y, and DJAC. It must compute
+     the Jacobian and store it column-wise in DJAC.
+
+     The arguments are:
+       NEQ  -- number of rows in the matrix [long int, input]
+       T    -- current time [realtype, input]
+       Y    -- array containing state variables [realtype, input]
+       FY   -- array containing state derivatives [realtype, input]
+       DJAC -- 2D array containing the jacobian entries [realtype of size
+               (NEQ,NEQ), output]
+       H    -- current step size [realtype, input]
+       IPAR -- array containing integer user data that was passed to
+               FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       WK*  -- array containing temporary workspace of same size as Y 
+               [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                 >0 if a recoverable error occurred,
+                 <0 if an unrecoverable error ocurred.
+ 
+ (2s) Optional user-supplied dense mass matrix routine: FARKDMASS
+
+     Required when using the DENSE or LAPACKDENSE mass matrix linear solvers,
+     the user must supply a routine that computes the system mass matrix M.  
+     This routine must have the following form: 
+
+       SUBROUTINE FARKDMASS(NEQ, T, DMASS, IPAR, RPAR, WK1, WK2, WK3, IER)
+
+     Typically this routine will use only NEQ, T, and DMASS. It must compute
+     the mass matrix and store it column-wise in DMASS.
+
+     The arguments are:
+       NEQ   -- number of rows in the matrix [long int, input]
+       T     -- current time [realtype, input]
+       DMASS -- 2D array containing the mass matrix entries [realtype 
+                of size (NEQ,NEQ), output]
+       IPAR  -- array containing integer user data that was passed to
+                FARKMALLOC [long int, input]
+       RPAR  -- array containing real user data that was passed to
+                FARKMALLOC [realtype, input]
+       WK*   -- array containing temporary workspace of same size as Y 
+                [realtype, input]
+       IER   -- return flag [int, output]:
+                   0 if successful, 
+                  >0 if a recoverable error occurred,
+                  <0 if an unrecoverable error ocurred.
+ 
+ (3s) Optional user-supplied band Jacobian approximation routine: FARKBJAC
+
+     As an option when using the BAND linear solver, the user may supply a
+     routine that computes a band approximation of the system Jacobian 
+     J = dfi(t,y)/dy. If supplied, it must have the following form:
+
+       SUBROUTINE FARKBJAC(NEQ, MU, ML, MDIM, T, Y, FY, BJAC, H,
+      &                    IPAR, RPAR, WK1, WK2, WK3, IER)
+
+     Typically this routine will use only NEQ, MU, ML, T, Y, and BJAC. It 
+     must load the MDIM by N array BJAC with the Jacobian matrix at the
+     current (t,y) in band form.  Store in BJAC(k,j) the Jacobian element 
+     J(i,j)  with k = i - j + MU + 1 (k = 1 ... ML+MU+1) and j = 1 ... N.
+
+     The arguments are:
+       NEQ  -- number of rows in the matrix [long int, input]
+       MU   -- upper half-bandwidth of the matrix [long int, input]
+       ML   -- lower half-bandwidth of the matrix [long int, input]
+       MDIM -- leading dimension of BJAC array [long int, input]
+       T    -- current time [realtype, input]
+       Y    -- array containing state variables [realtype, input]
+       FY   -- array containing state derivatives [realtype, input]
+       BJAC -- 2D array containing the jacobian entries [realtype of size
+               (MDIM,NEQ), output]
+       H    -- current step size [realtype, input]
+       IPAR -- array containing integer user data that was passed to
+               FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       WK*  -- array containing temporary workspace of same size as Y 
+               [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                 >0 if a recoverable error occurred,
+                 <0 if an unrecoverable error ocurred.
+ 
+ (4s) Optional user-supplied band Mass matrix routine: FARKBMASS
+
+     Required when using the BAND or LAPACKBAND mass matrix linear solvers, 
+     the user must supply a routine that computes the system mass matrix M.  
+     This routine must have the following form: 
+
+       SUBROUTINE FARKBMASS(NEQ, MU, ML, MDIM, T, BMASS, IPAR, 
+      &                     RPAR, WK1, WK2, WK3, IER)
+
+     Typically this routine will use only NEQ, MU, ML, T, and BMASS. It 
+     must load the MDIM by N array BMASS with the system mass matrix at 
+     the current (t) in band form.  Store in BMASS(k,j) the mass matrix 
+     element M(i,j)  with k = i - j + MU + 1 (k = 1 ... ML+MU+1) and 
+     j = 1 ... N.
+
+     The arguments are:
+       NEQ   -- number of rows in the matrix [long int, input]
+       MU    -- upper half-bandwidth of the matrix [long int, input]
+       ML    -- lower half-bandwidth of the matrix [long int, input]
+       MDIM  -- leading dimension of BMASS array [long int, input]
+       T     -- current time [realtype, input]
+       BMASS -- 2D array containing the mass matrix entries [realtype 
+                of size (MDIM,NEQ), output]
+       IPAR  -- array containing integer user data that was passed to
+                FARKMALLOC [long int, input]
+       RPAR  -- array containing real user data that was passed to
+                FARKMALLOC [realtype, input]
+       WK*   -- array containing temporary workspace of same size as Y 
+                [realtype, input]
+       IER   -- return flag [int, output]:
+                   0 if successful, 
+                  >0 if a recoverable error occurred,
+                  <0 if an unrecoverable error ocurred.
+ 
+ (5s) User-supplied sparse Jacobian approximation routine: FARKSPJAC
+
+     Required when using the ARKKLU or ARKSuperLUMT linear solvers, the 
+     user must supply a routine that computes a compressed-sparse-column 
+     [or compressed-sparse-row] approximation of the system Jacobian 
+     J = dfi(t,y)/dy.  This routine must have the following form:
+
+       SUBROUTINE FARKSPJAC(T, Y, FY, N, NNZ, JDATA, JRVALS, 
+      &                     JCPTRS, H, IPAR, RPAR, WK1, WK2, WK3, IER)
+
+     Typically this routine will use only M, N, NNZ, JDATA, JRVALS and 
+     JCPTRS. It must load the N by N compressed sparse column [or 
+     compressed sparse row] matrix with storage for NNZ nonzeros, stored 
+     in the arrays JDATA (nonzero values), JRVALS (row [or column] indices 
+     for each nonzero), JCOLPTRS (indices for start of each column [or row]), 
+     with the Jacobian matrix at the current (t,y) in CSC [or CSR] format 
+     (see sundials_sparse.h for more information).
+
+     The arguments are:
+         T    -- current time [realtype, input]
+         Y    -- array containing state variables [realtype, input]
+         FY   -- array containing state derivatives [realtype, input]
+         N    -- number of matrix rows/columns in Jacobian [int, input]
+         NNZ  -- allocated length of nonzero storage [int, input]
+        JDATA -- nonzero values in Jacobian
+                 [realtype of length NNZ, output]
+       JRVALS -- row [or column] indices for each nonzero in Jacobian
+                  [int of length NNZ, output]
+       JCPTRS -- pointers to each Jacobian column [or row] in preceding arrays
+                 [int of length N+1, output]
+         H    -- current step size [realtype, input]
+         IPAR -- array containing integer user data that was passed to
+                 FARKMALLOC [long int, input]
+         RPAR -- array containing real user data that was passed to
+                 FARKMALLOC [realtype, input]
+         WK*  -- array containing temporary workspace of same size as Y 
+                 [realtype, input]
+         IER  -- return flag [int, output]:
+                    0 if successful, 
+                   >0 if a recoverable error occurred,
+                   <0 if an unrecoverable error ocurred.
+ 
+ (6s) User-supplied sparse Mass matrix routine: FARKSPMASS
+
+     Required when using the ARKMassKLU or ARKMassSuperLUMT mass matrix 
+     linear solvers, the user must supply a routine that computes a 
+     compressed-sparse-column [or compressed-sparse-row] version of the 
+     (possibly time-dependent) system mass matrix M(t).  If supplied, 
+     it must have the following form:
+
+       SUBROUTINE FARKSPMASS(T, N, NNZ, MDATA, MRVALS, MCPTRS, 
+      &                      IPAR, RPAR, WK1, WK2, WK3, IER)
+
+     Typically this routine will use only M, N, NNZ, MDATA, MRVALS and 
+     MCPTRS. It must load the N by N compressed sparse column [or 
+     compressed sparse row] matrix with storage for NNZ nonzeros, stored 
+     in the arrays MDATA (nonzero values), MRVALS (row [or column] indices 
+     for each nonzero), MCOLPTRS (indices for start of each column [or row]), 
+     with the system mass matrix at the current (t) in CSC [or CSR] format 
+     (see sundials_sparse.h for more information).
+
+     The arguments are:
+         T    -- current time [realtype, input]
+         N    -- number of rows/columns in mass matrix [int, input]
+         NNZ  -- allocated length of nonzero storage [int, input]
+        MDATA -- nonzero values in mass matrix
+                 [realtype of length NNZ, output]
+       MRVALS -- row [or column] indices for each nonzero in mass matrix
+                  [int of length NNZ, output]
+       MCPTRS -- pointers to each mass matrix column [or row] in preceding arrays
+                 [int of length N+1, output]
+         IPAR -- array containing integer user data that was passed to
+                 FARKMALLOC [long int, input]
+         RPAR -- array containing real user data that was passed to
+                 FARKMALLOC [realtype, input]
+         WK*  -- array containing temporary workspace of same size as Y 
+                 [realtype, input]
+         IER  -- return flag [int, output]:
+                    0 if successful, 
+                   >0 if a recoverable error occurred,
+                   <0 if an unrecoverable error ocurred.
+ 
+ (7) Optional user-supplied Jacobian-vector product routine: FARKJTIMES
+
+     As an option when using the SP* linear solver, the user may supply a
+     routine that computes the product of the system Jacobian 
+     J = dfi(t,y)/dy and a given vector v.  If supplied, it must have the 
+     following form:
+
+       SUBROUTINE FARKJTIMES(V, JV, T, Y, FY, H, IPAR, RPAR, WORK, IER)
+
+     Typically this routine will use only NEQ, T, Y, V, and JV.  It must
+     compute the product vector J*v where v is stored in the vector V 
+     and the result J*v is stored in JV.  
+
+     The arguments are:
+       V    -- array containing vector to multiply [realtype, input]
+       JV   -- array containing product vector [realtype, output]
+       T    -- current time [realtype, input]
+       Y    -- array containing state variables [realtype, input]
+       FY   -- array containing state derivatives [realtype, input]
+       H    -- current step size [realtype, input]
+       IPAR -- array containing integer user data that was passed to
+               FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       WORK -- array containing temporary workspace of same size as Y 
+               [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                  nonzero if an error.
+ 
+ (8) User-supplied mass-matrix-vector product routine: FARKMTIMES
+
+     Required when using the SP* linear solvers, the user should supply a
+     routine that computes the product of the system mass matrix M and a 
+     given vector v.  It must have the following form:
+
+       SUBROUTINE FARKMTIMES(V, MV, T, IPAR, RPAR, IER)
+
+     Typically this routine will use only NEQ, T, V, and MV.  It must
+     compute the product vector M*v where v is stored in the vector V
+     and the result M*v is stored in MV.
+
+     The arguments are:
+       V    -- array containing vector to multiply [realtype, input]
+       MV   -- array containing product vector [realtype, output]
+       T    -- current time [realtype, input]
+       IPAR -- array containing integer user data that was passed to
+               FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                  nonzero if an error.
+ 
+ (9) Optional user-supplied error weight vector routine: FARKEWT
+ 
+     As an option to providing the relative and absolute tolerances, the user
+     may supply a routine that computes the weights used in the WRMS norms.
+     If supplied, it must have the following form:
+
+       SUBROUTINE FARKEWT(Y, EWT, IPAR, RPAR, IER)
+
+     It must store the error weights in EWT, given the current solution Y. 
+
+     The arguments are:
+       Y    -- array containing state variables [realtype, input]
+       EWT  -- array containing the error weight vector [realtype, output]
+       IPAR -- array containing integer user data that was passed to
+               FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                  nonzero if an error.
+
+ (10) Optional user-supplied error weight vector routine: FARKADAPT
+ 
+     As an option to providing the time step adaptivity, the user
+     may supply a routine that computes the new time step for ARKode to 
+     use, based on information about the three most recent errors and 
+     previous time steps taken by the solver. If supplied, it must have 
+     the following form:
+
+       SUBROUTINE FARKADAPT(Y, T, H1, H2, H3, E1, E2, E3, Q, P, HNEW, IPAR, RPAR, IER)
+
+     It must output the new time step in HNEW. 
+
+     The arguments are:
+       Y    -- array containing state variables [realtype, input]
+       T    -- current time [realtype, input]
+       H1   -- current step size [realtype, input]
+       H2   -- previous step size [realtype, input]
+       H3   -- previous-previous step size [realtype, input]
+       E1   -- estimated temporal error in current step [realtype, input]
+       E2   -- estimated temporal error in previous step [realtype, input]
+       E3   -- estimated temporal error in previous-previous step [realtype, input]
+       Q    -- global order of accuracy for RK method [int, input]
+       P    -- global order of accuracy for RK embedding [int, input]
+       HNEW -- predicted next step size [realtype, output]
+       IPAR -- array containing integer user data that was passed to
+               FARKMALLOC [long int, input]
+       RPAR -- array containing real user data that was passed to
+               FARKMALLOC [realtype, input]
+       IER  -- return flag [int, output]:
+                  0 if successful, 
+                  nonzero if an error.
+
+ (11) Optional user-supplied explicitly stable time step routine: FARKEXPSTAB
+ 
+     As an option, the user may provide a routine to return the maximum stable 
+     time step size for the explicit ODE RHS function.  If supplied, it must 
+     have the following form:
+
+       SUBROUTINE FARKEXPSTAB(Y, T, HSTAB, IPAR, RPAR, IER)
+
+     It must store the explicitly stable step size in the ouptut HSTAB. 
+
+     The arguments are:
+       Y     -- array containing state variables [realtype, input]
+       T     -- current time [realtype, input]
+       HSTAB -- explicitly-stable step size [realtype, output]
+       IPAR  -- array containing integer user data that was passed to
+                FARKMALLOC [long int, input]
+       RPAR  -- array containing real user data that was passed to
+                FARKMALLOC [realtype, input]
+       IER   -- return flag [int, output]:
+                  0 if successful, 
+                  nonzero if an error.
+
+ -----------------------------------------------------------------------------
+
+ (12) Initialization:  FNVINITS/FNVINITP/FNVINITOMP/FNVINITPTS, 
+                       FARKMALLOC, FARKREINIT, FARKRESIZE
+ 
+ (12.1s) To initialize the serial vector specification, the user must make the
+     following call:
+
+        CALL FNVINITS(4, NEQ, IER)
+
+     where the first argument is an int containing the ARKODE solver ID (4). 
+     The other arguments are:
+        NEQ = size of vectors [long int, input]
+	IER = return completion flag [int, output]:
+	          0 = success, 
+		 -1 = failure.
+ 
+ (12.1p) To initialize the distributed memory parallel machine environment, 
+        the user must make the following call:
+
+        CALL FNVINITP(COMM, 4, NLOCAL, NGLOBAL, IER)
+
+     The arguments are:
+        COMM = the MPI communicator [int, input]
+        NLOCAL = local size of vectors on this processor [long int, input]
+        NGLOBAL = the system size, and the global size of vectors (the sum 
+           of all values of NLOCAL) [long int, input]
+        IER = return completion flag [int, ouptut]. 
+                  0 = success, 
+                 -1 = failure.
+
+     Note: If MPI was initialized by the user, the communicator must be set to
+     MPI_COMM_WORLD.  If not, this routine initializes MPI and sets the
+     communicator equal to MPI_COMM_WORLD.
+ 
+ (12.1omp) To initialize the openMP threaded vector kernel, 
+          the user must make the following call:
+
+          CALL FNVINITOMP(3, NEQ, NUM_THREADS, IER)
+
+        The arguments are:
+          NEQ = size of vectors
+          NUM_THREADS = number of threads
+          IER = return completion flag. Values are 0 = success, -1 = failure.
+
+ (12.1pts) To initialize the Pthreads threaded vector kernel, 
+          the user must make the following call:
+
+          CALL FNVINITPTS(3, NEQ, NUM_THREADS, IER)
+
+        The arguments are:
+          NEQ = size of vectors
+          NUM_THREADS = number of threads
+          IER = return completion flag. Values are 0 = success, -1 = failure.
+
+ (12.2) To set various problem and solution parameters and allocate
+     internal memory, make the following call:
+
+       CALL FARKMALLOC(T0, Y0, IMEX, IATOL, RTOL, ATOL, IOUT, ROUT, 
+      &                IPAR, RPAR, IER)
+
+     The arguments are:
+        T0 = initial value of t [realtype, input]
+	Y0 = array of initial conditions [realtype, input]
+	IMEX = flag denoting basic integration method [int, input]: 
+                  0 = implicit, 
+                  1 = explicit, 
+                  2 = imex
+        IATOL = type for absolute tolerance ATOL [int, input]: 
+                  1 = scalar, 
+                  2 = array,
+                  3 = user-supplied function; the user must supply a routine
+		  FARKEWT to compute the error weight vector.
+        RTOL = scalar relative tolerance [realtype, input]
+	ATOL = scalar or array absolute tolerance [realtype, input]
+	IOUT = array of length 22 for integer optional outputs
+	   [long int, output]
+	ROUT = array of length 6 for real optional outputs [realtype, output]
+	IPAR = array of user integer data [long int, input/output]
+	RPAR = array with user real data [realtype, input/output]
+	IER  = return completion flag [int, output]:
+                  0 = SUCCESS,
+                 -1 = failure (see printed message for failure details).
+
+     The user data arrays IPAR and RPAR are passed unmodified to all 
+     subsequent calls to user-provided routines. Modifications to either array
+     inside a user-provided routine will be propagated. Using these two 
+     arrays, the user can dispense with COMMON blocks to pass data betwen 
+     user-provided routines. 
+ 
+     The optional outputs are:
+           LENRW   = IOUT( 1) from ARKodeGetWorkSpace
+           LENIW   = IOUT( 2) from ARKodeGetWorkSpace
+           NST     = IOUT( 3) from ARKodeGetNumSteps
+           NST_STB = IOUT( 4) from ARKodeGetNumExpSteps
+           NST_ACC = IOUT( 5) from ARKodeGetNumAccSteps
+           NST_ATT = IOUT( 6) from ARKodeGetNumStepAttempts
+           NFE     = IOUT( 7) from ARKodeGetNumRhsEvals (fe(t,y) calls)
+           NFI     = IOUT( 8) from ARKodeGetNumRhsEvals (fi(t,y) calls)
+           NSETUPS = IOUT( 9) from ARKodeGetNumLinSolvSetups
+           NETF    = IOUT(10) from ARKodeGetNumErrTestFails
+           NNI     = IOUT(11) from ARKodeGetNumNonlinSolvIters
+           NCFN    = IOUT(12) from ARKodeGetNumNonlinSolvConvFails
+           NGE     = IOUT(13) from ARKodeGetNumGEvals
+
+           H0U     = ROUT( 1) from ARKodeGetActualInitStep
+           HU      = ROUT( 2) from ARKodeGetLastStep
+           HCUR    = ROUT( 3) from ARKodeGetCurrentStep
+           TCUR    = ROUT( 4) from ARKodeGetCurrentTime
+           TOLSF   = ROUT( 5) from ARKodeGetTolScaleFactor
+           UROUND  = ROUT( 6) from UNIT_ROUNDOFF
+     See the ARKODE manual for details. 
+
+ (12.3) If the user program includes the FARKEWT routine for the evaluation 
+     of the error weights, the following call must be made
+
+       CALL FARKEWTSET(FLAG, IER)
+
+     with the int argument FLAG = 1 to specify that FARKEWT is provided and 
+     should be used; FLAG = 0 resets to the default EWT formulation.  The int 
+     return flag IER is 0 if successful, and nonzero otherwise.
+
+ (12.4) If the user program includes the FARKADAPT routine for performing 
+     step adaptivity, the following call must be made
+
+       CALL FARKADAPTSET(FLAG, IER)
+
+     with the int argument FLAG = 1 to specify that FARKADAPT is provided and 
+     should be used; FLAG = 0 resets to the default adaptivity formulation. 
+     The int return flag IER is 0 if successful, and nonzero otherwise.
+
+ (12.5) If the user program includes the FARKEXPSTAB routine for calculation of
+     the maximum explicitly stable step size, the following call must be made
+
+       CALL FARKEXPSTABSET(FLAG, IER)
+
+     with the int argument FLAG = 1 to specify that FARKEXPSTAB is provided and
+     should be used; FLAG = 0 resets to the default explicit stability formulation.
+     The int return flag IER is 0 if successful, and nonzero otherwise.
+
+ (12.6) To re-initialize the ARKODE solver for the solution of a new problem
+     of the same size as one already solved, make the following call:
+
+       CALL FARKREINIT(T0, Y0, IMEX, IATOL, RTOL, ATOL, IER)
+
+     The arguments have the same names and meanings as those of FARKMALLOC.  
+     FARKREINIT performs the same initializations as FARKMALLOC, but does no 
+     memory allocation, using instead the existing internal memory created by 
+     the previous FARKMALLOC call.  The subsequent call to specify the linear 
+     system solution method may or may not be needed; see paragraph (9) below.
+ 
+ (12.7) To re-initialize the ARKODE solver for the solution of a new problem
+     of a different size as one already solved, but with the same dynamical 
+     time scale and method choice, make the following call:
+
+       CALL FARKRESIZE(T0, Y0, HSCALE, ITOL, RTOL, ATOL, IER)
+
+     The arguments are:
+        T0 = initial value of t [realtype, input]
+	Y0 = array of initial conditions [realtype, input]
+	HSCALE = desired step size scale factor [realtype, input]
+	          1.0 is the default
+		  any value <= 0.0 results in the default.
+        ITOL = flag denoting that a new relative tolerance and vector of 
+	   absolute tolerances are supplied in the RTOL and ATOL arguments
+	   [int, input]: 
+                  0 = retain the current relative tolerance and current 
+		      scalar-valued or user-supplied function
+                  1 = RTOL contains the new scalar-valued relative tolerance 
+                      and ATOL contains a new array of absolute tolerances
+	RTOL = scalar-valued relative tolerance [realtype, input]
+	ATOL = array of absolute tolerances [realtype, input]
+	IER  = return completion flag [int, output]:
+                  0 = SUCCESS,
+                 -1 = failure (see printed message for failure details).
+
+     FARKRESIZE performs the opposite set of of operations as FARKREINIT: it 
+     does not reinitialize any of the time-step heuristics, but it does 
+     perform memory reallocation.  The subsequent call to specify the linear 
+     system solution method is required, since its internal memory 
+     structures will no longer be the correct size.; see paragraph (9) below.
+ 
+ (12.8) To set various integer optional inputs, make the folowing call:
+
+       CALL FARKSETIIN(KEY, VALUE, IER)
+
+     to set the integer value VALUE to the optional input specified by the 
+     quoted character string KEY. VALUE must be a Fortran integer of size 
+     commensurate with a C "long int".  KEY must be one of the following: 
+     ORDER, DENSE_ORDER, LINEAR, NONLINEAR, FIXEDPOINT, NEWTON, EXPLICIT, 
+     IMPLICIT, IMEX, IRK_TABLE_NUM, ERK_TABLE_NUM, ARK_TABLE_NUM (pass in an 
+     int array of length 2, implicit method first), MAX_NSTEPS, HNIL_WARNS, 
+     PREDICT_METHOD, MAX_ERRFAIL, MAX_CONVFAIL, MAX_NITERS, ADAPT_SMALL_NEF 
+     or LSETUP_MSBP.  The int return flag IER is 0 if successful, and 
+     nonzero otherwise.
+
+     To set various real optional inputs, make the following call:
+
+       CALL FARKSETRIN(KEY, VALUE, IER)
+
+     to set the realtype value VALUE to the optional input specified by the 
+     quoted character string KEY.  VALUE must be a Fortran real-valued number
+     of size commensurate with the SUNDIALS "realtype".  KEY must one of the 
+     following: INIT_STEP, MAX_STEP, MIN_STEP, STOP_TIME, NLCONV_COEF, 
+     ADAPT_CFL, ADAPT_SAFETY, ADAPT_BIAS, ADAPT_GROWTH, ADAPT_BOUNDS (pass in 
+     a realtype array of length 2), ADAPT_ETAMX1, ADAPT_ETAMXF, ADAPT_ETACF, 
+     NONLIN_CRDOWN, NONLIN_RDIV, LSETUP_DGMAX, or FIXED_STEP.
+
+     To set the time step adaptivity method (and its associated parameters), 
+     make the following call: 
+
+       CALL FARKSETADAPTIVITYMETHOD(IMETHOD, IDEFAULT, IPQ, PARAMS, IER)
+       
+     The arguments are:
+       IMETHOD  = the adaptivity method to use
+       IDEFAULT = flag to use (1) or not (0) the default adaptivity parameters
+       IPQ      = flag to use the embedding order p (0) or the method order 
+                  q (1) for error-based step adaptivity
+       PARAMS   = if IDEFAULT=0, this should be a realtype array of length 2 
+                  containing the custom adaptivity parameters to use in the 
+		  method.
+       IMETHOD  = integer error flag (0 = success, 1 = failure)
+
+     To reset all optional inputs to their default values, make the following 
+     call:
+
+       CALL FARKSETDEFAULTS(IER)
+
+     To set a custom explicit Runge-Kutta table, make the following call:
+
+       CALL FARKSETERKTABLE(S, Q, P, C, A, B, B2, IER)
+
+     The arguments are:
+       S = the number of stages in the table [int, input]
+       Q = the global order of accuracy of the method [int, input]
+       P = the global order of accuracy of the embedding [int, input]
+       C = array of length S containing the stage times [realtype, input]
+       A = array of length S*S containing the ERK coefficients (stored in 
+           row-major, "C", order) [realtype, input]
+       B = array of length S containing the solution coefficients
+           [realtype, input]
+       B2 = array of length S containing the embedding coefficients
+           [realtype, input]
+
+     To set a custom diagonally-implicit Runge-Kutta table, make the following
+     call:
+
+       CALL FARKSETIRKTABLE(S, Q, P, C, A, B, B2, IER)
+
+     The arguments are:
+       S = the number of stages in the table [int, input]
+       Q = the global order of accuracy of the method [int, input]
+       P = the global order of accuracy of the embedding [int, input]
+       C = array of length S containing the stage times [realtype, input]
+       A = array of length S*S containing the DIRK coefficients (stored in 
+           row-major, "C", order) [realtype, input]
+       B = array of length S containing the solution coefficients
+           [realtype, input]
+       B2 = array of length S containing the embedding coefficients
+           [realtype, input]
+
+     To set a custom additive Runge-Kutta table, make the following call:
+
+       CALL FARKSETARKTABLES(S, Q, P, CI, CE, AI, AE, BI, BE, B2I, B2E, IER)
+
+     The arguments are:
+       S = the number of stages in the table [int, input]
+       Q = the global order of accuracy of the method [int, input]
+       P = the global order of accuracy of the embedding [int, input]
+       CI = array of length S containing the implicit stage times
+           [realtype, input]
+       CE = array of length S containing the explicit stage times
+           [realtype, input]
+       AI = array of length S*S containing the DIRK coefficients (stored in 
+           row-major, "C", order) [realtype, input]
+       AE = array of length S*S containing the ERK coefficients (stored in 
+           row-major, "C", order) [realtype, input]
+       BI = array of length S containing the implicit solution coefficients
+           [realtype, input]
+       BE = array of length S containing the explicit solution coefficients
+           [realtype, input]
+       B2I = array of length S containing the implicit embedding coefficients
+           [realtype, input]
+       B2E = array of length S containing the explicit embedding coefficients
+           [realtype, input]
+
+     When using a non-identity mass matrix, to set an absolute residual 
+     tolerance (scalar or vector), call:
+
+       CALL FARKSETRESTOLERANCE(IATOL, ATOL, IER)
+
+     The arguments are:
+       IATOL = type for absolute tolerance ATOL [int, input]: 
+                 1 = scalar, 
+                 2 = array
+	ATOL = scalar or array absolute residual tolerance [realtype, input]
+	IER  = return completion flag [int, output]:
+                 0 = SUCCESS,
+                -1 = failure (see printed message for failure details).
+
+ (12.9) To set a solver diagnostics output file, make the folowing call:
+
+       CALL FARKSETDIAGNOSTICS(FNAME, FLEN, IER)
+
+     The desired diagnostics filename should be supplied by the 
+     quoted character string FNAME.  The integer argument FLEN should contain
+     the length (in characters) of FNAME (for portability).  The int return 
+     flag IER is 0 if successful (able to open file), and nonzero otherwise.
+
+ (12.10) To close the solver diagnostics output file, make the folowing call:
+
+       CALL FARKSTOPDIAGNOSTICS(IER)
+
+     The int return flag IER is 0 if successful (able to close file), and
+     nonzero otherwise.
+
+
+ -----------------------------------------------------------------------------
+
+ (13) Specification of linear system solution method.
+
+     In the case of using either an implicit or ImEx method and a Newton 
+     iteration, the solution of each Runge-Kutta stage may involve the 
+     solution of linear systems related to the Jacobian J = dfi(t,y)/dy of the 
+     implicit portion of the ODE system. ARKode presently includes a variety 
+     of choices for the treatment of these systems, and the user of FARKODE 
+     must call a routine with a specific name to make the desired choice.  
+     Following any call to FARKMALLOC or FARKRESIZE, one of these solver 
+     specification routines must be called again to set up the linear solver
+     memory.
+
+ (13.1s) DENSE treatment of the linear system.
+
+     The user must make the call
+
+       CALL FARKDENSE(NEQ, IER)
+
+     The arguments are:
+        NEQ = the problem size [long int; input]
+	IER = error return flag [int, output]: 
+	         0 = success, 
+		 negative = error.
+ 
+     If the user program includes the FARKDJAC routine for the evaluation of 
+     the dense approximation to the Jacobian, then after the call to 
+     FARKDENSE, the following call must be made 
+
+       CALL FARKDENSESETJAC(FLAG, IER)
+
+     with the int FLAG=1 to specify that FARKDJAC is provided and should be 
+     used; FLAG=0 specifies a reset to the internal finite difference Jacobian
+     approximation.  The int return flag IER=0 if successful, and nonzero 
+     otherwise.
+ 
+     Optional outputs specific to the DENSE case are:
+        LENRWLS = IOUT(14) from ARKDlsGetWorkSpace (realtype space)
+        LENIWLS = IOUT(15) from ARKDlsGetWorkSpace (integer space)
+        LSTF    = IOUT(16) from ARKDlsGetLastFlag
+        NFELS   = IOUT(17) from ARKDlsGetNumRhsEvals
+        NJED    = IOUT(18) from ARKDlsGetNumJacEvals
+     See the ARKODE manual for descriptions.
+ 
+ (13.2s) DENSE treatment of the mass matrix linear system.
+
+     The user must make the call
+
+       CALL FARKMASSDENSE(NEQ, IER)
+
+     The arguments are:
+        NEQ = the problem size [long int; input]
+	IER = error return flag [int, output]: 
+	         0 = success, 
+		 negative = error.
+ 
+     When using MASSDENSE, the user program must provide the FARKDMASS routine 
+     for the evaluation of the dense mass matrix.  To indicate that this routine
+     has been provided, following the call to FARKMASSDENSE, the following call 
+     must be made 
+
+       CALL FARKDENSESETMASS(IER)
+
+     The int return flag IER=0 if successful, nonzero otherwise.
+ 
+     Optional outputs specific to the MASSDENSE case are:
+        LENRWMS = IOUT(23) from ARKDlsGetMassWorkSpace (realtype space)
+        LENIWMS = IOUT(24) from ARKDlsGetMassWorkSpace (integer space)
+        LSTMF   = IOUT(25) from ARKDlsGetLastMassFlag
+        NME     = IOUT(26) from ARKDlsGetNumMassEvals
+     See the ARKODE manual for descriptions.
+ 
+ (13.3s) BAND treatment of the linear system
+
+     The user must make the call
+
+       CALL FARKBAND(NEQ, MU, ML, IER)
+
+     The arguments are:
+        NEQ = problem size [long int, input]
+	MU = upper bandwidth [long int, input]
+	ML = lower bandwidth [long int, input]
+        IER = return flag [int, output]; 0 if successful, nonzero otherwise.
+ 
+     If the user program includes the FARKBJAC routine for the evaluation of 
+     the band approximation to the Jacobian, then following the call to 
+     FARKBAND, the following call must be made 
+
+       CALL FARKBANDSETJAC(FLAG, IER)
+
+     with the int FLAG=1 to specify that FARKBJAC is provided and should be 
+     used; FLAG=0 specifies a reset to the internal finite difference Jacobian 
+     approximation.  The int return flag IER=0 if successful, nonzero otherwise.
+ 
+     Optional outputs specific to the BAND case are:
+        LENRWLS = IOUT(14) from ARKDlsGetWorkSpace (realtype space)
+        LENIWLS = IOUT(15) from ARKDlsGetWorkSpace (integer space)
+        LSTF    = IOUT(16) from ARKDlsGetLastFlag
+        NFELS   = IOUT(17) from ARKDlsGetNumRhsEvals
+        NJED    = IOUT(18) from ARKDlsGetNumJacEvals
+     See the ARKODE manual for descriptions.
+
+ (13.4s) BAND treatment of the mass matrix linear system
+
+     The user must make the call
+
+       CALL FARKMASSBAND(NEQ, MU, ML, IER)
+
+     The arguments are:
+        NEQ = problem size [long int, input]
+	MU = upper bandwidth [long int, input]
+	ML = lower bandwidth [long int, input]
+        IER = return flag [int, output]; 0 if successful, nonzero otherwise.
+ 
+     When using MASSBAND, the user program must provide the FARKBMASS routine 
+     for the evaluation of the band mass matrix.  To indicate that this routine
+     has been provided, following the call to FARKMASSBAND, the following call 
+     must be made 
+
+       CALL FARKBANDSETMASS(IER)
+
+     The int return flag IER=0 if successful, nonzero otherwise.
+ 
+     Optional outputs specific to the MASSBAND case are:
+        LENRWMS = IOUT(23) from ARKDlsGetMassWorkSpace (realtype space)
+        LENIWMS = IOUT(24) from ARKDlsGetMassWorkSpace (integer space)
+        LSTMF   = IOUT(25) from ARKDlsGetLastMassFlag
+        NME     = IOUT(26) from ARKDlsGetNumMassEvals
+     See the ARKODE manual for descriptions.
+
+ (13.5s) LAPACK dense treatment of the linear system
+
+     The user must make the call
+
+       CALL FARKLAPACKDENSE(NEQ, IER)
+
+     The arguments match those for FARKDENSE, except that NEQ is now a 
+     normal int (and not a long int).
+
+     Following the call to FARKLAPACKDENSE, the user may optionally call
+
+       CALL FARKLAPACKDENSESETJAC(FLAG, IER)
+       
+     with the int FLAG=1 if the user provides the function FARKDJAC (and 
+     wishes to use it); FLAG=0 implies a reset to the default finite 
+     difference Jacobian approximation.
+
+     The optional outputs when using FARKLAPACKDENSE match those from 
+     FARKDENSE.
+
+ (13.6s) LAPACK dense treatment of the mass matrix linear system
+
+     The user must make the call
+
+       CALL FARKMASSLAPACKDENSE(NEQ, IER)
+
+     The arguments match those for FARKMASSDENSE, except that NEQ is 
+     now a normal int (and not a long int).
+
+     Following the call to FARKMASSLAPACKDENSE, the user must call 
+
+       CALL FARKLAPACKDENSESETMASS(IER)
+
+     The int return flag IER=0 if successful, nonzero otherwise.
+ 
+     The optional outputs when using FARKMASSLAPACKDENSE match those 
+     from FARKMASSDENSE.
+
+ (13.7s) LAPACK band treatment of the linear system
+
+     The user must make the call
+
+       CALL FARKLAPACKBAND(NEQ, MUPPER, MLOWER, IER)
+
+     The arguments match those for FARKBAND, except that now all arguments 
+     have type 'int'.
+
+     Following the call to FARKLAPACKBAND, the user may optionally call
+
+       CALL FARKLAPACKBANDSETJAC(FLAG, IER)
+
+     with the int FLAG=1 if the user provides the function FARKBJAC (and 
+     wishes to use it); FLAG=0 implies a reset to the default finite 
+     difference Jacobian approximation.
+
+     The optional outputs when using FARKLAPACKBAND match those from FARKBAND.
+
+ (13.8s) LAPACK band treatment of the mass matrix linear system
+
+     The user must make the call
+
+       CALL FARKMASSLAPACKBAND(NEQ, MUPPER, MLOWER, IER)
+
+     The arguments match those for FARKMASSBAND, except that now all 
+     arguments have type 'int'.
+
+     Following the call to FARKMASSLAPACKBAND, the user must call 
+
+       CALL FARKLAPACKBANDSETMASS(IER)
+
+     The int return flag IER=0 if successful, nonzero otherwise.
+ 
+     The optional outputs when using FARKMASSLAPACKBAND match those from 
+     FARKMASSBAND.
+
+ (13.9s) SPARSE treatment of the linear system using the KLU solver.
+
+     The user must make the call
+
+       CALL FARKKLU(NEQ, NNZ, SPARSETYPE, ORDERING, IER)
+
+     The arguments are:
+        NEQ = the problem size [int; input]
+        NNZ = the maximum number of nonzeros [int; input]
+	SPARSETYPE = choice between CSC and CSR format
+           (0 = CSC, 1 = CSR) [int; input]
+	ORDERING = the matrix ordering desired, possible values come
+	   from the KLU package (0 = AMD, 1 = COLAMD) [int; input]
+	IER = error return flag [int, output]: 
+	         0 = success, 
+		 negative = error.
+ 
+     When using the KLU solver the user must provide the FARKSPJAC routine for the 
+     evaluation of the sparse approximation to the Jacobian.  To indicate that this
+     routine has been provided, after the call to FARKKLU, the following call must 
+     be made 
+
+       CALL FARKSPARSESETJAC(IER)
+
+     The int return flag IER=0 if successful, and nonzero otherwise.
+ 
+ 
+     The ARKODE KLU solver will reuse much of the factorization information from one
+     nonlinear iteration to the next.  If at any time the user wants to force a full
+     refactorization or if the number of nonzeros in the Jacobian matrix changes, the
+     user should make the call
+
+       CALL FARKKLUREINIT(NEQ, NNZ, REINIT_TYPE)
+
+     The arguments are:
+        NEQ = the problem size [int; input]
+        NNZ = the maximum number of nonzeros [int; input]
+	REINIT_TYPE = 1 or 2.  For a value of 1, the matrix will be destroyed and 
+          a new one will be allocated with NNZ nonzeros.  For a value of 2, 
+	  only symbolic and numeric factorizations will be completed. 
+ 
+     Optional outputs specific to the KLU case are:
+        LSTF    = IOUT(16) from ARKSlsGetLastFlag
+        NJES    = IOUT(18) from ARKSlsGetNumJacEvals
+     See the ARKODE manual for descriptions.
+ 
+ (13.10s) SPARSE treatment of the mass matrix linear system using the KLU solver.
+
+     The user must make the call
+
+       CALL FARKMASSKLU(NEQ, NNZ, SPARSETYPE, ORDERING, IER)
+
+     The arguments are:
+        NEQ = the problem size [int; input]
+        NNZ = the maximum number of mass matrix nonzeros [int; input]
+	SPARSETYPE = choice between CSC and CSR format
+           (0 = CSC, 1 = CSR) [int; input]
+	ORDERING = the matrix ordering desired, possible values
+	   come from the KLU package (0 = AMD, 1 = COLAMD) [int; input]
+	IER = error return flag [int, output]: 
+	         0 = success, 
+		 negative = error.
+ 
+     When using the MASSKLU solver the user must provide the FARKSPMASS routine for 
+     the evaluation of the sparse mass matrix.  To indicate that this routine has 
+     been provided, after the call to FARKMASSKLU, the following call must be made 
+
+       CALL FARKSPARSESETMASS(IER)
+
+     The int return flag IER=0 if successful, and nonzero otherwise.
+ 
+
+     The ARKODE KLU solver will reuse much of the factorization information from one
+     mass matrix solve to the next.  If at any time the user wants to force a full
+     refactorization or if the number of nonzeros in the mass matrix changes, the
+     user should make the call
+
+       CALL FARKMASSKLUREINIT(NEQ, NNZ, REINIT_TYPE)
+
+     The arguments are:
+        NEQ = the problem size [int; input]
+        NNZ = the maximum number of nonzeros [int; input]
+	REINIT_TYPE = 1 or 2.  For a value of 1, the matrix will be destroyed and 
+          a new one will be allocated with NNZ nonzeros.  For a value of 2, 
+	  only symbolic and numeric factorizations will be completed. 
+ 
+     Optional outputs specific to the MASSKLU case are:
+        LSTMF = IOUT(25) from ARKSlsGetLastMassFlag
+        NME = IOUT(26) from ARKSlsGetNumMassEvals
+     See the ARKODE manual for descriptions.
+ 
+ (13.11s) SPARSE treatment of the linear system using the SuperLUMT solver.
+
+     The user must make the call
+
+       CALL FARKSUPERLUMT(NTHREADS, NEQ, NNZ, ORDERING, IER)
+
+     The arguments are:
+        NTHREADS = desired number of threads to use [int; input]
+        NEQ = the problem size [int; input]
+        NNZ = the maximum number of nonzeros [int; input]
+	ORDERING = the matrix ordering desired, possible values
+	   come from the SuperLU_MT package [int; input]
+           0 = Natural
+           1 = Minimum degree on A^T A
+           2 = Minimum degree on A^T + A
+           3 = COLAMD
+	IER = error return flag [int, output]: 
+	         0 = success, 
+		 negative = error.
+ 
+     At this time, there is no reinitialization capability for the SUNDIALS 
+     interfaces to the SuperLUMT solver.
+
+     When using the SUPERLUMT solver the user must provide the FARKSPJAC routine
+     for the evaluation of the sparse approximation to the Jacobian.  To indicate 
+     that this routine has been provided, after the call to FARKKLU, the following 
+     call must be made 
+
+       CALL FARKSPARSESETJAC(IER)
+
+     The int return flag IER=0 if successful, and nonzero otherwise.
+ 
+     Optional outputs specific to the SUPERLUMT case are:
+        LSTF    = IOUT(16) from ARKSlsGetLastFlag
+        NJES    = IOUT(18) from ARKSlsGetNumJacEvals
+     See the ARKODE manual for descriptions.
+ 
+ (13.12s) SPARSE treatment of the mass matrix linear system using the SuperLUMT solver.
+
+     The user must make the call
+
+       CALL FARKMASSSUPERLUMT(NTHREADS, NEQ, NNZ, ORDERING, IER)
+
+     The arguments are:
+        NTHREADS = desired number of threads to use [int; input]
+        NEQ = the problem size [int; input]
+        NNZ = the maximum number of nonzeros [int; input]
+	ORDERING = the matrix ordering desired, possible values
+	   come from the SuperLU_MT package [int; input]
+           0 = Natural
+           1 = Minimum degree on A^T A
+           2 = Minimum degree on A^T + A
+           3 = COLAMD
+	IER = error return flag [int, output]: 
+	         0 = success, 
+		 negative = error.
+ 
+     At this time, there is no reinitialization capability for the SUNDIALS 
+     interfaces to the SuperLUMT solver.
+
+     When using the MASSSUPERLUMT solver the user must provide the FARKSPJAC 
+     routine for the evaluation of the mass matrix.  To indicate that this 
+     routine has been provided, after the call to FARKKLU, the following call
+     must be made 
+
+       CALL FARKSPARSESETMASS(IER)
+
+     The int return flag IER=0 if successful, and nonzero otherwise.
+ 
+     Optional outputs specific to the MASSSUPERLUMT case are:
+        LSTMF = IOUT(25) from ARKSlsGetLastMassFlag
+        NME = IOUT(26) from ARKSlsGetNumMassEvals
+     See the ARKODE manual for descriptions.
+ 
+ (13.13) SPGMR treatment of the linear systems.
+
+     For the Scaled Preconditioned GMRES solution of the linear systems,
+     the user must make the following call:
+
+       CALL FARKSPGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+        IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+	IGSTYPE = Gram-schmidt process type [int, input]: 
+              1 = modified G-S
+              2 = classical G-S.
+	MAXL = maximum Krylov subspace dimension [int; input]; 
+	      0 = default
+	DELT = linear convergence tolerance factor [realtype, input]; 
+	      0.0 = default.
+	IER = error return flag [int, output]: 
+	       0 = success; 
+	      <0 = an error occured
+ 
+     Optional outputs specific to the SPGMR case are:
+        LENRWLS = IOUT(14) from ARKSpilsGetWorkSpace
+        LENIWLS = IOUT(15) from ARKSpilsGetWorkSpace
+        LSTF    = IOUT(16) from ARKSpilsGetLastFlag
+        NFELS   = IOUT(17) from ARKSpilsGetNumRhsEvals
+        NJTV    = IOUT(18) from ARKSpilsGetNumJtimesEvals
+        NPE     = IOUT(19) from ARKSpilsGetNumPrecEvals
+        NPS     = IOUT(20) from ARKSpilsGetNumPrecSolves
+        NLI     = IOUT(21) from ARKSpilsGetNumLinIters
+        NCFL    = IOUT(22) from ARKSpilsGetNumConvFails
+     See the ARKODE manual for descriptions.
+ 
+     If a sequence of problems of the same size is being solved using the
+     SPGMR linear solver, then following the call to FARKREINIT, a call to 
+     the FARKSPGMRREINIT routine is needed if any of IPRETYPE, IGSTYPE, DELT 
+     is being changed.  In that case, call FARKSPGMRREINIT as follows:
+
+       CALL FARKSPGMRREINIT(IPRETYPE, IGSTYPE, DELT, IER)
+
+     The arguments have the same meanings as for FARKSPGMR.  If MAXL is being
+     changed, then the user should call FARKSPGMR instead.  
+
+     Note: if the problem has been resized using FARKRESIZE, then FARKSPGMR 
+     must be called again. 
+ 
+ (13.14) SPGMR treatment of the mass matrix linear systems.
+
+     For the Scaled Preconditioned GMRES solution of the mass matrix 
+     linear systems, the user must make the following call:
+
+       CALL FARKMASSSPGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+        IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+	IGSTYPE = Gram-schmidt process type [int, input]: 
+              1 = modified G-S
+              2 = classical G-S.
+	MAXL = maximum Krylov subspace dimension [int; input]; 
+	      0 = default
+	DELT = linear convergence tolerance factor [realtype, input]; 
+	      0.0 = default.
+	IER = error return flag [int, output]: 
+	       0 = success; 
+	      <0 = an error occured
+ 
+     Optional outputs specific to the MASSSPGMR case are:
+        LENRWMS = IOUT(23) from ARKSpilsGetMassWorkSpace
+        LENIWMS = IOUT(24) from ARKSpilsGetMassWorkSpace
+        LSTMF   = IOUT(25) from ARKSpilsGetLastMassFlag
+        NMPE    = IOUT(26) from ARKSpilsGetNumMassPrecEvals
+        NMPS    = IOUT(27) from ARKSpilsGetNumMassPrecSolves
+        NMLI    = IOUT(28) from ARKSpilsGetNumMassIters
+        NMCFL   = IOUT(29) from ARKSpilsGetNumMassConvFails
+     See the ARKODE manual for descriptions.
+ 
+     If a sequence of problems of the same size is being solved using the
+     MASSSPGMR linear solver, then following the call to FARKREINIT, a call
+     to the FARKMASSSPGMRREINIT routine is needed if any of IPRETYPE, 
+     IGSTYPE, DELT is being changed.  In that case, call FARKMASSSPGMRREINIT 
+     as follows:
+
+       CALL FARKMASSSPGMRREINIT(IPRETYPE, IGSTYPE, DELT, IER)
+
+     The arguments have the same meanings as for FARKMASSSPGMR.  If MAXL is 
+     being changed, then the user should call FARKMASSSPGMR instead.  
+
+     Note: if the problem has been resized using FARKRESIZE, then 
+     FARKMASSSPGMR must be called again. 
+ 
+ (13.15) SPBCG treatment of the linear systems.
+
+     For the Scaled Preconditioned Bi-CGSTAB solution of the linear systems,
+     the user must make the following call:
+
+       CALL FARKSPBCG(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+       MAXL = maximum Krylov subspace dimension [int, input]; 0 = default.
+       DELT = linear convergence tolerance factor [realtype, input]; 
+              0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     Optional outputs specific to the SPBCG case are identical to 
+     those from SPGMR.
+ 
+     If a sequence of problems of the same size is being solved using the
+     SPBCG linear solver, then following the call to FARKREINIT, a call to the
+     FARKSPBCGREINIT routine is needed if any of its arguments is being 
+     changed.  The call is:
+
+       CALL FARKSPBCGREINIT(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments have the same meanings as for FARKSPBCG.
+
+     Note: if the problem has been resized using FARKRESIZE, then FARKSPBCG 
+     must be called again. 
+
+ (13.16) SPBCG treatment of the mass matrix linear systems.
+
+     For the Scaled Preconditioned Bi-CGSTAB solution of the mass matrix 
+     linear systems, the user must make the following call:
+
+       CALL FARKMASSSPBCG(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+       MAXL = maximum Krylov subspace dimension [int, input]; 0 = default.
+       DELT = linear convergence tolerance factor [realtype, input]; 
+              0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     Optional outputs specific to the MASSSPBCG case are identical to 
+     those from MASSSPGMR.
+ 
+     If a sequence of problems of the same size is being solved using the
+     MASSSPBCG linear solver, then following the call to FARKREINIT, a call 
+     to the FARKMASSSPBCGREINIT routine is needed if any of its arguments 
+     is being changed.  The call is:
+
+       CALL FARKMASSSPBCGREINIT(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments have the same meanings as for FARKMASSSPBCG.
+
+     Note: if the problem has been resized using FARKRESIZE, then 
+     FARKMASSSPBCG must be called again. 
+
+ (13.17) SPTFQMR treatment of the linear systems.
+
+     For the Scaled Preconditioned TFQMR solution of the linear systems, the
+     user must make the following call:
+
+       CALL FARKSPTFQMR(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+       MAXL = maximum Krylov subspace dimension [int, input]; 0 = default.
+       DELT = linear convergence tolerance factor [realtype, input]
+	      0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     Optional outputs specific to the SPTFQMR case are identical to 
+     those from SPGMR.
+ 
+     If a sequence of problems of the same size is being solved using the
+     SPTFQMR linear solver, then following the call to FARKREINIT, a call to 
+     the FARKSPTFQMRREINIT routine is needed if any of its arguments is
+     being changed.  The call is:
+
+       CALL FARKSPTFQMRREINIT(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments have the same meanings as for FARKSPTFQMR.
+
+     Note: if the problem has been resized using FARKRESIZE, then FARKSPTFQMR 
+     must be called again. 
+
+ (13.18) SPTFQMR treatment of the mass matrix linear systems.
+
+     For the Scaled Preconditioned TFQMR solution of the mass matrix 
+     linear systems, the user must make the following call:
+
+       CALL FARKMASSSPTFQMR(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+       MAXL = maximum Krylov subspace dimension [int, input]; 0 = default.
+       DELT = linear convergence tolerance factor [realtype, input]
+	      0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     Optional outputs specific to the MASSSPTFQMR case are identical to 
+     those from MASSSPGMR.
+ 
+     If a sequence of problems of the same size is being solved using the
+     MASSSPTFQMR linear solver, then following the call to FARKREINIT, a 
+     call to the FARKMASSSPTFQMRREINIT routine is needed if any of its 
+     arguments is being changed.  The call is:
+
+       CALL FARKMASSSPTFQMRREINIT(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments have the same meanings as for FARKMASSSPTFQMR.
+
+     Note: if the problem has been resized using FARKRESIZE, then 
+     FARKMASSSPTFQMR must be called again. 
+
+ (13.19) SPFGMR treatment of the linear systems.
+
+     For the Scaled Preconditioned Flexible GMRES solution of the linear 
+     systems, the user must make the following call:
+
+       CALL FARKSPFGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+        IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+	IGSTYPE = Gram-schmidt process type [int, input]: 
+              1 = modified G-S
+              2 = classical G-S.
+	MAXL = maximum Krylov subspace dimension [int; input]; 
+	      0 = default
+	DELT = linear convergence tolerance factor [realtype, input]; 
+	      0.0 = default.
+	IER = error return flag [int, output]: 
+	       0 = success; 
+	      <0 = an error occured
+ 
+     Optional outputs specific to the SPFGMR case are identical to 
+     those from SPGMR.
+ 
+     If a sequence of problems of the same size is being solved using the
+     SPFGMR linear solver, then following the call to FARKREINIT, a call to 
+     the FARKSPFGMRREINIT routine is needed if any of IPRETYPE, IGSTYPE, DELT 
+     is being changed.  In that case, call FARKSPFGMRREINIT as follows:
+
+       CALL FARKSPFGMRREINIT(IPRETYPE, IGSTYPE, DELT, IER)
+
+     The arguments have the same meanings as for FARKSPFGMR.  If MAXL is being
+     changed, then the user should call FARKSPFGMR instead.  
+
+     Note: if the problem has been resized using FARKRESIZE, then FARKSPFGMR 
+     must be called again. 
+ 
+ (13.20) SPFGMR treatment of the mass matrix linear systems.
+
+     For the Scaled Preconditioned Flexible GMRES solution of the mass 
+     matrix linear systems, the user must make the following call:
+
+       CALL FARKMASSSPFGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+        IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+	IGSTYPE = Gram-schmidt process type [int, input]: 
+              1 = modified G-S
+              2 = classical G-S.
+	MAXL = maximum Krylov subspace dimension [int; input]; 
+	      0 = default
+	DELT = linear convergence tolerance factor [realtype, input]; 
+	      0.0 = default.
+	IER = error return flag [int, output]: 
+	       0 = success; 
+	      <0 = an error occured
+ 
+     Optional outputs specific to the MASSSPFGMR case are identical to 
+     those from MASSSPGMR.
+ 
+     If a sequence of problems of the same size is being solved using the
+     MASSSPFGMR linear solver, then following the call to FARKREINIT, a 
+     call to the FARKMASSSPFGMRREINIT routine is needed if any of IPRETYPE, 
+     IGSTYPE, DELT is being changed.  In that case, call 
+     FARKMASSSPFGMRREINIT as follows:
+
+       CALL FARKMASSSPFGMRREINIT(IPRETYPE, IGSTYPE, DELT, IER)
+
+     The arguments have the same meanings as for FARKMASSSPFGMR.  If MAXL 
+     is being changed, then the user should call FARKMASSSPFGMR instead.  
+
+     Note: if the problem has been resized using FARKRESIZE, then 
+     FARKMASSSPFGMR must be called again. 
+ 
+ (13.21) PCG treatment of the linear systems.
+
+     For the Preconditioned Conjugate Gradient solution of the linear systems,
+     the user must make the following call:
+
+       CALL FARKPCG(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+       MAXL = maximum Krylov subspace dimension [int, input]; 0 = default.
+       DELT = linear convergence tolerance factor [realtype, input]; 
+              0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     Optional outputs specific to the PCG case are identical to 
+     those from SPGMR.
+ 
+     If a sequence of problems of the same size is being solved using the
+     PCG linear solver, then following the call to FARKREINIT, a call to the
+     FARKPCGREINIT routine is needed if any of its arguments is being 
+     changed.  The call is:
+
+       CALL FARKPCGREINIT(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments have the same meanings as for FARKPCG.
+
+     Note: if the problem has been resized using FARKRESIZE, then FARKPCG
+     must be called again. 
+
+ (13.22) PCG treatment of the mass matrix linear systems.
+
+     For the Preconditioned Conjugate Gradient solution of the mass matrix 
+     linear systems, the user must make the following call:
+
+       CALL FARKMASSPCG(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments are:
+       IPRETYPE = preconditioner type [int, input]: 
+              0 = none 
+              1 = left only
+              2 = right only
+              3 = both sides
+       MAXL = maximum Krylov subspace dimension [int, input]; 0 = default.
+       DELT = linear convergence tolerance factor [realtype, input]; 
+              0.0 = default.
+       IER = error return flag [int, output]: 
+              0 = success; 
+	     <0 = an error occured
+ 
+     Optional outputs specific to the MASSPCG case are identical to 
+     those from MASSSPGMR.
+ 
+     If a sequence of problems of the same size is being solved using the
+     MASSPCG linear solver, then following the call to FARKREINIT, a call 
+     to the FARKMASSPCGREINIT routine is needed if any of its arguments 
+     is being changed.  The call is:
+
+       CALL FARKMASSPCGREINIT(IPRETYPE, MAXL, DELT, IER)              
+
+     The arguments have the same meanings as for FARKMASSPCG.
+
+     Note: if the problem has been resized using FARKRESIZE, then 
+     FARKMASSPCG must be called again. 
+
+ (13.23) Usage of user-supplied routines for the system Krylov solvers
+
+     If the user program includes the FARKJTIMES routine for the evaluation of
+     the Jacobian vector product, then after specifying the linear solver 
+     choice (e.g. FARKSPGMR), the following call must be made
+
+       CALL FARKSPILSSETJAC(FLAG, IER)
+
+     with the int FLAG=1 to specify that FARKJTIMES is provided and should
+     be used; FLAG=0 specifies a reset to the internal finite difference 
+     approximation to this product).  The int return flag IER=0 if 
+     successful, and nonzero otherwise.
+ 
+     Usage of the user-supplied routines FARKPSOL and FARKPSET for solution of
+     the preconditioner linear system similarly requires the following call after 
+     specifying the linear solver module:
+
+       CALL FARKSPILSSETPREC(FLAG, IER)
+
+     with the int FLAG=1.  If FLAG=0 then preconditioning with these routines 
+     will be disabled. The return flag IER=0 if successful, nonzero otherwise.
+
+     NOTE: following any call to FARKRESIZE, either of the above routines must 
+     again be called following re-specification of the linear solver module.
+
+     The user-supplied routine FARKPSET must have the form:
+
+       SUBROUTINE FARKPSET(T,Y,FY,JOK,JCUR,GAMMA,H,IPAR,RPAR,V1,V2,V3,IER)
+
+     This routine must set up the preconditioner P to be used in the 
+     subsequent call to FARKPSOL.  The preconditioner (or the product of the 
+     left and right preconditioners if using both) should be an approximation 
+     to the matrix  M(T) - GAMMA*J  (M(T) = mass matrix, J = Jacobian),
+
+     The arguments are:
+       T = current time [realtype, input]
+       Y = current state variable array [realtype, input]
+       FY = current state variable derivative array [realtype, input]
+       JOK = flag indicating whether Jacobian-related data needs to be 
+           recomputed [int, input]:
+                  0 = recompute, 
+		  1 = reuse with the current value of GAMMA
+       JCUR = return flag to denote if Jacobian data was recomputed
+           [realtype, output], 1=yes, 0=no
+       GAMMA = Jacobian scaling factor [realtype, input]
+       H = current time step [realtype, input]
+       IPAR = array of user integer data [long int, input/output]
+       RPAR = array with user real data [realtype, input/output]
+       V* -- array containing temporary workspace of same size as Y 
+               [realtype, input]
+       IER  = return completion flag [int, output]:
+                  0 = SUCCESS,
+		 >0 = recoverable failure
+                 <0 = non-recoverable failure
+
+     The user-supplied routine FARKPSOL must have the form:
+
+       SUBROUTINE FARKPSOL(T,Y,FY,R,Z,GAMMA,DELTA,LR,IPAR,RPAR,VT,IER)
+
+       DIMENSION Y(*), FY(*), VT(*), R(*), Z(*), IPAR(*), RPAR(*)
+
+     Typically this routine will use only T, Y, GAMMA, R, LR, and Z.  It
+     must solve the preconditioner linear system Pz = r.  The preconditioner
+     (or the product of the left and right preconditioners if both are 
+     nontrivial) should be an approximation to the matrix  M(T) - GAMMA*J  
+     (M(T) = mass matrix, J = Jacobian).
+
+     The arguments are:
+       T = current time [realtype, input]
+       Y = current state variable array [realtype, input]
+       FY = current state variable derivative array [realtype, input]
+       R = right-hand side array [realtype, input]
+       Z = solution array [realtype, output]
+       GAMMA = Jacobian scaling factor [realtype, input]
+       DELTA = desired residual tolerance [realtype, input]
+       LR = flag denoting to solve the right or left preconditioner system
+                  1 = left preconditioner
+		  2 = right preconditioner
+       IPAR = array of user integer data [long int, input/output]
+       RPAR = array with user real data [realtype, input/output]
+       VT -- array containing temporary workspace of same size as Y 
+               [realtype, input]
+       IER  = return completion flag [int, output]:
+                  0 = SUCCESS,
+		 >0 = recoverable failure
+                 <0 = non-recoverable failure
+
+ (13.24) Usage of user-supplied routines for the mass matrix Krylov solvers
+
+     When using any of the MASSSPGMR, MASSSPBCG, MASSSPTFQMR, MASSSPFGMR or 
+     MASSPCG mass matrix linear solvers, the user must supply the 
+     FARKMTIMES routine for the evaluation of the mass matrix vector product.  
+     After specifying the linear solver choice (e.g. FARKMASSSPGMR), the 
+     following call must be made
+
+       CALL FARKSPILSSETMASS(IER)
+
+     The int return flag IER=0 if successful, and nonzero otherwise.
+
+ 
+     Usage of the user-supplied routines FARKMASSPSOL and FARKMASSPSET for 
+     solution of the mass matrix preconditioner linear system similarly 
+     requires the following call after specifying the mass matrix linear 
+     solver module:
+
+       CALL FARKSPILSSETMASSPREC(FLAG, IER)
+
+     with the int FLAG=1. If FLAG=0 then preconditioning with these routines 
+     will be disabled. The return flag IER=0 if successful, nonzero otherwise.
+
+     NOTE: following any call to FARKRESIZE, the above routine must again 
+     be called following re-specification of the linear solver module.
+
+     The user-supplied routine FARKMASSPSET must have the form:
+
+       SUBROUTINE FARKMASSPSET(T,IPAR,RPAR,V1,V2,V3,IER)
+
+     This routine must set up the preconditioner P to be used in the 
+     subsequent call to FARKMASSPSOL.  The preconditioner (or the product 
+     of the left and right preconditioners if using both) should be an 
+     approximation to the system mass matrix M.
+
+     The arguments are:
+       T = current time [realtype, input]
+       IPAR = array of user integer data [long int, input/output]
+       RPAR = array with user real data [realtype, input/output]
+       V* -- array containing temporary workspace of same size as Y 
+               [realtype, input]
+       IER  = return completion flag [int, output]:
+                  0 = SUCCESS,
+		 >0 = recoverable failure
+                 <0 = non-recoverable failure
+
+     The user-supplied routine FARKMASSPSOL must have the form:
+
+       SUBROUTINE FARKMASSPSOL(T,R,Z,DELTA,LR,IPAR,RPAR,VT,IER)
+
+       DIMENSION VT(*), R(*), Z(*), IPAR(*), RPAR(*)
+
+     Typically this routine will use only T, R, LR, and Z.  It
+     must solve the preconditioner linear system Pz = r.  The 
+     preconditioner (or the product of the left and right 
+     preconditioners if both are nontrivial) should be an 
+     approximation to the system mass matrix M.
+
+     The arguments are:
+       T = current time [realtype, input]
+       R = right-hand side array [realtype, input]
+       Z = solution array [realtype, output]
+       DELTA = desired residual tolerance [realtype, input]
+       LR = flag denoting to solve the right or left preconditioner system
+                  1 = left preconditioner
+		  2 = right preconditioner
+       IPAR = array of user integer data [long int, input/output]
+       RPAR = array with user real data [realtype, input/output]
+       VT -- array containing temporary workspace of same size as Y 
+               [realtype, input]
+       IER  = return completion flag [int, output]:
+                  0 = SUCCESS,
+		 >0 = recoverable failure
+                 <0 = non-recoverable failure
+
+ -----------------------------------------------------------------------------
+
+ (14) The integrator: FARKODE
+
+     Carrying out the integration is accomplished by making calls as follows:
+
+       CALL FARKODE(TOUT, T, Y, ITASK, IER)
+
+     The arguments are:
+       TOUT = next value of t at which a solution is desired [realtype, input]
+       T = value of t reached by the solver [realtype, output]
+       Y = array containing state variables on output (realtype, output]
+       ITASK = task indicator [int, input]:
+                  1 = normal mode (overshoot TOUT and interpolate)
+		  2 = one-step mode (return after each internal step taken)
+		  3 = normal tstop mode (like 1, but integration never 
+		      proceeds past TSTOP, which must be specified through a 
+		      call to FARKSETRIN using the key 'STOP_TIME')
+		  4 = one step tstop (like 2, but integration never goes 
+		      past TSTOP)
+       IER = completion flag [int, output]: 
+                  0 = success, 
+		  1 = tstop return, 
+		  2 = root return, 
+                  values -1 ... -10 are failure modes (see ARKODE manual).
+     The current values of the optional outputs are immediately available in
+     the IOUT and ROUT arrays.
+ 
+ -----------------------------------------------------------------------------
+
+ (15) Computing solution derivatives: FARKDKY
+
+     To obtain a derivative of the solution, of order up to the method order,
+     make the following call:
+
+       CALL FARKDKY(T, K, DKY, IER)
+
+     The arguments are:
+       T = time at which solution derivative is desired, within the interval
+           [TCUR-HU,TCUR], [realtype, input].
+       K = derivative order (0 .le. K .le. QU) [int, input]
+       DKY = array containing computed K-th derivative of y [realtype, output]
+       IER = return flag [int, output]: 0=success, <0 = illegal argument.
+ 
+ -----------------------------------------------------------------------------
+
+ (16) Get the current weight vector: FARKGETERRWEIGHTS
+
+     To obtain the current weight vector, make the following call:
+
+       CALL FARKGETERRWEIGHTS(EWT, IER)
+
+     The arguments are:
+       EWT = array containing the error weight vector [realtype, output]
+       IER = return flag [int, output]: 0=success, nonzero if an error.
+ 
+ -----------------------------------------------------------------------------
+
+ (17) Get an estimate of the local error: FARKGETESTLOCALERR
+
+     To obtain the current error estimate vector, make the following call:
+
+       CALL FARKGETESTLOCALERR(ELE, IER)
+
+     The arguments are:
+       ELE = array with the estimated local error vector [realtype, output]
+       IER = return flag [int, output]: 0=success, nonzero if an error.
+ 
+ -----------------------------------------------------------------------------
+
+ (18) Memory freeing: FARKFREE 
+
+     To free the internal memory created by the calls to FARKMALLOC and
+     FNVINITS, FNVINITOMP, FNVINITPTS or FNVINITP, make the call
+
+       CALL FARKFREE()
+ 
+===============================================================*/
+
+#ifndef _FARKODE_H
+#define _FARKODE_H
+
+/* header files  */
+#include <arkode/arkode.h>
+#include <sundials/sundials_direct.h>  /* definition of type DlsMat   */
+#include <sundials/sundials_sparse.h>  /* definition of type SlsMat   */
+#include <sundials/sundials_nvector.h> /* definition of type N_Vector */
+#include <sundials/sundials_types.h>   /* definition of type realtype */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Definitions of interface function names */
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FARK_MALLOC              SUNDIALS_F77_FUNC(farkmalloc,              FARKMALLOC)
+#define FARK_REINIT              SUNDIALS_F77_FUNC(farkreinit,              FARKREINIT)
+#define FARK_RESIZE              SUNDIALS_F77_FUNC(farkresize,              FARKRESIZE)
+#define FARK_SETDEFAULTS         SUNDIALS_F77_FUNC(farksetdefaults,         FARKSETDEFAULTS)
+#define FARK_SETIIN              SUNDIALS_F77_FUNC(farksetiin,              FARKSETIIN)
+#define FARK_SETRIN              SUNDIALS_F77_FUNC(farksetrin,              FARKSETRIN)
+#define FARK_SETERKTABLE         SUNDIALS_F77_FUNC(farkseterktable,         FARKSETERKTABLE)
+#define FARK_SETIRKTABLE         SUNDIALS_F77_FUNC(farksetirktable,         FARKSETIRKTABLE)
+#define FARK_SETARKTABLES        SUNDIALS_F77_FUNC(farksetarktables,        FARKSETARKTABLES)
+#define FARK_SETRESTOLERANCE     SUNDIALS_F77_FUNC(farksetrestolerance,     FARKSETRESTOLERANCE)
+#define FARK_SETDIAGNOSTICS      SUNDIALS_F77_FUNC(farksetdiagnostics,      FARKSETDIAGNOSTICS)
+#define FARK_STOPDIAGNOSTICS     SUNDIALS_F77_FUNC(farkstopdiagnostics,     FARKSTOPDIAGNOSTICS)
+#define FARK_DENSE               SUNDIALS_F77_FUNC(farkdense,               FARKDENSE)
+#define FARK_DENSESETJAC         SUNDIALS_F77_FUNC(farkdensesetjac,         FARKDENSESETJAC)
+#define FARK_MASSDENSE           SUNDIALS_F77_FUNC(farkmassdense,           FARKMASSDENSE)
+#define FARK_DENSESETMASS        SUNDIALS_F77_FUNC(farkdensesetmass,        FARKDENSESETMASS)
+#define FARK_BAND                SUNDIALS_F77_FUNC(farkband,                FARKBAND)
+#define FARK_BANDSETJAC          SUNDIALS_F77_FUNC(farkbandsetjac,          FARKBANDSETJAC)
+#define FARK_MASSBAND            SUNDIALS_F77_FUNC(farkmassband,            FARKMASSBAND)
+#define FARK_BANDSETMASS         SUNDIALS_F77_FUNC(farkbandsetmass,         FARKBANDSETMASS)
+#define FARK_LAPACKDENSE         SUNDIALS_F77_FUNC(farklapackdense,         FARKLAPACKDENSE)
+#define FARK_LAPACKDENSESETJAC   SUNDIALS_F77_FUNC(farklapackdensesetjac,   FARKLAPACKDENSESETJAC)
+#define FARK_MASSLAPACKDENSE     SUNDIALS_F77_FUNC(farkmasslapackdense,     FARKMASSLAPACKDENSE)
+#define FARK_LAPACKDENSESETMASS  SUNDIALS_F77_FUNC(farklapackdensesetmass,  FARKLAPACKDENSESETMASS)
+#define FARK_LAPACKBAND          SUNDIALS_F77_FUNC(farklapackband,          FARKLAPACKBAND)
+#define FARK_LAPACKBANDSETJAC    SUNDIALS_F77_FUNC(farklapackbandsetjac,    FARKLAPACKBANDSETJAC)
+#define FARK_MASSLAPACKBAND      SUNDIALS_F77_FUNC(farkmasslapackband,      FARKMASSLAPACKBAND)
+#define FARK_LAPACKBANDSETMASS   SUNDIALS_F77_FUNC(farklapackbandsetmass,   FARKLAPACKBANDSETMASS)
+#define FARK_KLU                 SUNDIALS_F77_FUNC(farkklu,                 FARKKLU)
+#define FARK_KLUREINIT           SUNDIALS_F77_FUNC(farkklureinit,           FARKKLUREINIT)
+#define FARK_SUPERLUMT           SUNDIALS_F77_FUNC(farksuperlumt,           FARKSUPERLUMT)
+#define FARK_SPARSESETJAC        SUNDIALS_F77_FUNC(farksparsesetjac,        FARKSPARSESETJAC)
+#define FARK_MASSKLU             SUNDIALS_F77_FUNC(farkmassklu,             FARKMASSKLU)
+#define FARK_MASSKLUREINIT       SUNDIALS_F77_FUNC(farkmassklureinit,       FARKMASSKLUREINIT)
+#define FARK_MASSSUPERLUMT       SUNDIALS_F77_FUNC(farkmasssuperlumt,       FARKMASSSUPERLUMT)
+#define FARK_SPARSESETMASS       SUNDIALS_F77_FUNC(farksparsesetmass,       FARKSPARSESETMASS)
+#define FARK_SPTFQMR             SUNDIALS_F77_FUNC(farksptfqmr,             FARKSPTFQMR)
+#define FARK_SPTFQMRREINIT       SUNDIALS_F77_FUNC(farksptfqmrreinit,       FARKSPTFQMRREINIT)
+#define FARK_MASSSPTFQMR         SUNDIALS_F77_FUNC(farkmasssptfqmr,         FARKMASSSPTFQMR)
+#define FARK_MASSSPTFQMRREINIT   SUNDIALS_F77_FUNC(farkmasssptfqmrreinit,   FARKMASSSPTFQMRREINIT)
+#define FARK_SPBCG               SUNDIALS_F77_FUNC(farkspbcg,               FARKSPBCG)
+#define FARK_SPBCGREINIT         SUNDIALS_F77_FUNC(farkspbcgreinit,         FARKSPBCGREINIT)
+#define FARK_MASSSPBCG           SUNDIALS_F77_FUNC(farkmassspbcg,           FARKMASSSPBCG)
+#define FARK_MASSSPBCGREINIT     SUNDIALS_F77_FUNC(farkmassspbcgreinit,     FARKMASSSPBCGREINIT)
+#define FARK_SPGMR               SUNDIALS_F77_FUNC(farkspgmr,               FARKSPGMR)
+#define FARK_SPGMRREINIT         SUNDIALS_F77_FUNC(farkspgmrreinit,         FARKSPGMRREINIT)
+#define FARK_MASSSPGMR           SUNDIALS_F77_FUNC(farkmassspgmr,           FARKMASSSPGMR)
+#define FARK_MASSSPGMRREINIT     SUNDIALS_F77_FUNC(farkmassspgmrreinit,     FARKMASSSPGMRREINIT)
+#define FARK_SPFGMR              SUNDIALS_F77_FUNC(farkspfgmr,              FARKSPFGMR)
+#define FARK_SPFGMRREINIT        SUNDIALS_F77_FUNC(farkspfgmrreinit,        FARKSPFGMRREINIT)
+#define FARK_MASSSPFGMR          SUNDIALS_F77_FUNC(farkmassspfgmr,          FARKMASSSPFGMR)
+#define FARK_MASSSPFGMRREINIT    SUNDIALS_F77_FUNC(farkmassspfgmrreinit,    FARKMASSSPFGMRREINIT)
+#define FARK_PCG                 SUNDIALS_F77_FUNC(farkpcg,                 FARKPCG)
+#define FARK_PCGREINIT           SUNDIALS_F77_FUNC(farkpcgreinit,           FARKPCGREINIT)
+#define FARK_MASSPCG             SUNDIALS_F77_FUNC(farkmasspcg,             FARKMASSPCG)
+#define FARK_MASSPCGREINIT       SUNDIALS_F77_FUNC(farkmasspcgreinit,       FARKMASSPCGREINIT)
+#define FARK_SPILSSETJAC         SUNDIALS_F77_FUNC(farkspilssetjac,         FARKSPILSSETJAC)
+#define FARK_SPILSSETPREC        SUNDIALS_F77_FUNC(farkspilssetprec,        FARKSPILSSETPREC)
+#define FARK_SPILSSETMASS        SUNDIALS_F77_FUNC(farkspilssetmass,        FARKSPILSSETMASS)
+#define FARK_SPILSSETMASSPREC    SUNDIALS_F77_FUNC(farkspilssetmassprec,    FARKSPILSSETMASSPREC)
+#define FARK_ARKODE              SUNDIALS_F77_FUNC(farkode,                 FARKODE)
+#define FARK_DKY                 SUNDIALS_F77_FUNC(farkdky,                 FARKDKY)
+#define FARK_FREE                SUNDIALS_F77_FUNC(farkfree,                FARKFREE)
+#define FARK_IMP_FUN             SUNDIALS_F77_FUNC(farkifun,                FARKIFUN)
+#define FARK_EXP_FUN             SUNDIALS_F77_FUNC(farkefun,                FARKEFUN)
+#define FARK_DJAC                SUNDIALS_F77_FUNC(farkdjac,                FARKDJAC)
+#define FARK_DMASS               SUNDIALS_F77_FUNC(farkdmass,               FARKDMASS)
+#define FARK_BJAC                SUNDIALS_F77_FUNC(farkbjac,                FARKBJAC)
+#define FARK_BMASS               SUNDIALS_F77_FUNC(farkbmass,               FARKBMASS)
+#define FARK_SPJAC               SUNDIALS_F77_FUNC(farkspjac,               FARKSPJAC)
+#define FARK_SPMASS              SUNDIALS_F77_FUNC(farkspmass,              FARKSPMASS)
+#define FARK_PSOL                SUNDIALS_F77_FUNC(farkpsol,                FARKPSOL)
+#define FARK_PSET                SUNDIALS_F77_FUNC(farkpset,                FARKPSET)
+#define FARK_MASSPSOL            SUNDIALS_F77_FUNC(farkmasspsol,            FARKMASSPSOL)
+#define FARK_MASSPSET            SUNDIALS_F77_FUNC(farkmasspset,            FARKMASSPSET)
+#define FARK_JTIMES              SUNDIALS_F77_FUNC(farkjtimes,              FARKJTIMES)
+#define FARK_MTIMES              SUNDIALS_F77_FUNC(farkmtimes,              FARKMTIMES)
+#define FARK_EWT                 SUNDIALS_F77_FUNC(farkewt,                 FARKEWT)
+#define FARK_EWTSET              SUNDIALS_F77_FUNC(farkewtset,              FARKEWTSET)
+#define FARK_GETERRWEIGHTS       SUNDIALS_F77_FUNC(farkgeterrweights,       FARKGETERRWEIGHTS)
+#define FARK_GETESTLOCALERR      SUNDIALS_F77_FUNC(farkgetestlocalerr,      FARKGETESTLOCALERR)
+#define FARK_WRITEPARAMETERS     SUNDIALS_F77_FUNC(farkwriteparameters,     FARKWRITEPARAMETERS)
+#define FARK_ADAPT               SUNDIALS_F77_FUNC(farkadapt,               FARKADAPT)
+#define FARK_ADAPTSET            SUNDIALS_F77_FUNC(farkadaptset,            FARKADAPTSET)
+#define FARK_EXPSTAB             SUNDIALS_F77_FUNC(farkexpstab,             FARKEXPSTAB)
+#define FARK_EXPSTABSET          SUNDIALS_F77_FUNC(farkexpstabset,          FARKEXPSTABSET)
+#define FARK_SETADAPTMETHOD      SUNDIALS_F77_FUNC(farksetadaptivitymethod, FARKSETADAPTIVITYMETHOD)
+
+#else
+
+#define FARK_MALLOC              farkmalloc_
+#define FARK_REINIT              farkreinit_
+#define FARK_RESIZE              farkresize_
+#define FARK_SETDEFAULTS         farksetdefaults_
+#define FARK_SETIIN              farksetiin_
+#define FARK_SETRIN              farksetrin_
+#define FARK_SETERKTABLE         farkseterktable_
+#define FARK_SETIRKTABLE         farksetirktable_
+#define FARK_SETARKTABLES        farksetarktables_
+#define FARK_SETRESTOLERANCE     farksetrestolerance_
+#define FARK_SETDIAGNOSTICS      farksetdiagnostics_
+#define FARK_STOPDIAGNOSTICS     farkstopdiagnostics_
+#define FARK_DENSE               farkdense_
+#define FARK_DENSESETJAC         farkdensesetjac_
+#define FARK_MASSDENSE           farkmassdense_
+#define FARK_DENSESETMASS        farkdensesetmass_
+#define FARK_BAND                farkband_
+#define FARK_BANDSETJAC          farkbandsetjac_
+#define FARK_MASSBAND            farkmassband_
+#define FARK_BANDSETMASS         farkbandsetmass_
+#define FARK_LAPACKDENSE         farklapackdense_
+#define FARK_LAPACKDENSESETJAC   farklapackdensesetjac_
+#define FARK_MASSLAPACKDENSE     farkmasslapackdense_
+#define FARK_LAPACKDENSESETMASS  farklapackdensesetmass_
+#define FARK_LAPACKBAND          farklapackband_
+#define FARK_LAPACKBANDSETJAC    farklapackbandsetjac_
+#define FARK_MASSLAPACKBAND      farkmasslapackband_
+#define FARK_LAPACKBANDSETMASS   farklapackbandsetmass_
+#define FARK_KLU                 farkklu_
+#define FARK_KLUREINIT           farkklureinit_
+#define FARK_SUPERLUMT           farksuperlumt_
+#define FARK_SPARSESETJAC        farksparsesetjac_
+#define FARK_MASSKLU             farkmassklu_
+#define FARK_MASSKLUREINIT       farkmassklureinit_
+#define FARK_MASSSUPERLUMT       farkmasssuperlumt_
+#define FARK_SPARSESETMASS       farksparsesetmass_
+#define FARK_SPTFQMR             farksptfqmr_
+#define FARK_SPTFQMRREINIT       farksptfqmrreinit_
+#define FARK_MASSSPTFQMR         farkmasssptfqmr_
+#define FARK_MASSSPTFQMRREINIT   farkmasssptfqmrreinit_
+#define FARK_SPBCG               farkspbcg_
+#define FARK_SPBCGREINIT         farkspbcgreinit_
+#define FARK_MASSSPBCG           farkmassspbcg_
+#define FARK_MASSSPBCGREINIT     farkmassspbcgreinit_
+#define FARK_SPGMR               farkspgmr_
+#define FARK_SPGMRREINIT         farkspgmrreinit_
+#define FARK_MASSSPGMR           farkmassspgmr_
+#define FARK_MASSSPGMRREINIT     farkmassspgmrreinit_
+#define FARK_SPFGMR              farkspfgmr_
+#define FARK_SPFGMRREINIT        farkspfgmrreinit_
+#define FARK_MASSSPFGMR          farkmassspfgmr_
+#define FARK_MASSSPFGMRREINIT    farkmassspfgmrreinit_
+#define FARK_PCG                 farkpcg_
+#define FARK_PCGREINIT           farkpcgreinit_
+#define FARK_MASSPCG             farkmasspcg_
+#define FARK_MASSPCGREINIT       farkmasspcgreinit_
+#define FARK_SPILSSETJAC         farkspilssetjac_
+#define FARK_SPILSSETPREC        farkspilssetprec_
+#define FARK_SPILSSETMASS        farkspilssetmass_
+#define FARK_SPILSSETMASSPREC    farkmassspilssetprec_
+#define FARK_ARKODE              farkode_
+#define FARK_DKY                 farkdky_
+#define FARK_FREE                farkfree_
+#define FARK_IMP_FUN             farkifun_
+#define FARK_EXP_FUN             farkefun_
+#define FARK_DJAC                farkdjac_
+#define FARK_DMASS               farkdmass_
+#define FARK_BJAC                farkbjac_
+#define FARK_BMASS               farkbmass_
+#define FARK_SPJAC               farkspjac_
+#define FARK_SPMASS              farkspmass_
+#define FARK_PSOL                farkpsol_
+#define FARK_PSET                farkpset_
+#define FARK_MASSPSOL            farkmasspsol_
+#define FARK_MASSPSET            farkmasspset_
+#define FARK_JTIMES              farkjtimes_
+#define FARK_MTIMES              farkmtimes_
+#define FARK_EWT                 farkewt_
+#define FARK_EWTSET              farkewtset_
+#define FARK_GETERRWEIGHTS       farkgeterrweights_
+#define FARK_GETESTLOCALERR      farkgetestlocalerr_
+#define FARK_WRITEPARAMETERS     farkwriteparameters_
+#define FARK_ADAPT               farkadapt_
+#define FARK_ADAPTSET            farkadaptset_
+#define FARK_EXPSTAB             farkexpstab_
+#define FARK_EXPSTABSET          farkexpstabset_
+#define FARK_SETADAPTMETHOD      farksetadaptivitymethod_
+
+#endif
+
+  /* Type for user data */
+  typedef struct {
+    realtype *rpar;
+    long int *ipar;
+  } *FARKUserData;
+  
+  /* Prototypes of exported functions */
+  void FARK_MALLOC(realtype *t0, realtype *y0, int *imex, 
+		   int *iatol, realtype *rtol, realtype *atol, 
+		   long int *iout, realtype *rout, 
+		   long int *ipar, realtype *rpar, int *ier);
+
+  void FARK_REINIT(realtype *t0, realtype *y0, int *imex,
+		   int *iatol, realtype *rtol, realtype *atol,
+		   int *ier);
+
+  void FARK_RESIZE(realtype *t0, realtype *y0, realtype *hscale, 
+		   int *itol, realtype *rtol, realtype *atol, int *ier);
+
+  void FARK_SETIIN(char key_name[], long int *ival, int *ier);
+  void FARK_SETRIN(char key_name[], realtype *rval, int *ier);
+  void FARK_SETDEFAULTS(int *ier);
+  void FARK_SETERKTABLE(int *s, int *q, int *p, realtype *c, realtype *A, 
+			realtype *b, realtype *b2, int *ier);
+  void FARK_SETIRKTABLE(int *s, int *q, int *p, realtype *c, 
+			realtype *A, realtype *b, realtype *b2, int *ier);
+  void FARK_SETARKTABLES(int *s, int *q, int *p, realtype *ci, realtype *ce, 
+			 realtype *Ai, realtype *Ae, realtype *bi, 
+			 realtype *be, realtype *b2i, realtype *b2e, int *ier);
+  void FARK_SETRESTOLERANCE(int *itol, realtype *atol, int *ier);
+  void FARK_SETDIAGNOSTICS(char fname[], int *flen, int *ier);
+  void FARK_STOPDIAGNOSTICS(int *ier);
+
+  void FARK_EWTSET(int *flag, int *ier);
+  void FARK_ADAPTSET(int *flag, int *ier);
+  void FARK_EXPSTABSET(int *flag, int *ier);
+
+  void FARK_DENSE(long int *neq, int *ier);
+  void FARK_DENSESETJAC(int *flag, int *ier);
+  void FARK_MASSDENSE(long int *neq, int *ier);
+  void FARK_DENSESETMASS(int *ier);
+
+  void FARK_BAND(long int *neq, long int *mupper, long int *mlower, int *ier);
+  void FARK_BANDSETJAC(int *flag, int *ier);
+  void FARK_MASSBAND(long int *neq, long int *mupper, long int *mlower, int *ier);
+  void FARK_BANDSETMASS(int *ier);
+
+  void FARK_LAPACKDENSE(int *neq, int *ier);
+  void FARK_LAPACKDENSESETJAC(int *flag, int *ier);
+  void FARK_MASSLAPACKDENSE(int *neq, int *ier);
+  void FARK_LAPACKDENSESETMASS(int *ier);
+
+  void FARK_LAPACKBAND(int *neq, int *mupper, int *mlower, int *ier);
+  void FARK_LAPACKBANDSETJAC(int *flag, int *ier);
+  void FARK_MASSLAPACKBAND(int *neq, int *mupper, int *mlower, int *ier);
+  void FARK_LAPACKBANDSETMASS(int *ier);
+
+  void FARK_KLU(int *neq, int *nnz, int *sparsetype, int *ordering, int *ier);
+  void FARK_KLUREINIT(int *neq, int *nnz, int *reinit_type, int *ier);
+  void FARK_SUPERLUMT(int *nthreads, int *neq, int *nnz, int *ordering, int *ier);
+  void FARK_SPARSESETJAC(int *ier);
+  void FARK_MASSKLU(int *neq, int *nnz, int *sparsetype, int *ordering, int *ier);
+  void FARK_MASSKLUREINIT(int *neq, int *nnz, int *reinit_type, int *ier);
+  void FARK_MASSSUPERLUMT(int *nthreads, int *neq, int *nnz, int *ordering, int *ier);
+  void FARK_SPARSESETMASS(int *ier);
+
+  void FARK_SPGMR(int *pretype, int *gstype, int *maxl, realtype *delt, int *ier);
+  void FARK_SPGMRREINIT(int *pretype, int *gstype, realtype *delt, int *ier);
+  void FARK_MASSSPGMR(int *pretype, int *gstype, int *maxl, realtype *delt, int *ier);
+  void FARK_MASSSPGMRREINIT(int *pretype, int *gstype, realtype *delt, int *ier);
+
+  void FARK_SPFGMR(int *pretype, int *gstype, int *maxl, realtype *delt, int *ier);
+  void FARK_SPFGMRREINIT(int *pretype, int *gstype, realtype *delt, int *ier);
+  void FARK_MASSSPFGMR(int *pretype, int *gstype, int *maxl, realtype *delt, int *ier);
+  void FARK_MASSSPFGMRREINIT(int *pretype, int *gstype, realtype *delt, int *ier);
+
+  void FARK_SPBCG(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FARK_SPBCGREINIT(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FARK_MASSSPBCG(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FARK_MASSSPBCGREINIT(int *pretype, int *maxl, realtype *delt, int *ier);
+
+  void FARK_SPTFQMR(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FARK_SPTFQMRREINIT(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FARK_MASSSPTFQMR(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FARK_MASSSPTFQMRREINIT(int *pretype, int *maxl, realtype *delt, int *ier);
+
+  void FARK_PCG(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FARK_PCGREINIT(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FARK_MASSPCG(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FARK_MASSPCGREINIT(int *pretype, int *maxl, realtype *delt, int *ier);
+
+  void FARK_SPILSSETJAC(int *flag, int *ier);
+  void FARK_SPILSSETPREC(int *flag, int *ier);
+  void FARK_SPILSSETMASS(int *ier);
+  void FARK_SPILSSETMASSPREC(int *flag, int *ier);
+  
+  void FARK_ARKODE(realtype *tout, realtype *t, realtype *y, int *itask, int *ier);
+
+  void FARK_DKY(realtype *t, int *k, realtype *dky, int *ier);
+
+  void FARK_GETERRWEIGHTS(realtype *eweight, int *ier);
+  void FARK_GETESTLOCALERR(realtype *ele, int *ier);
+
+  void FARK_FREE(void);
+
+  void FARK_WRITEPARAMETERS(int *ier);
+
+  void FARK_SETADAPTMETHOD(int *imethod, int *idefault, int *ipq, 
+			   realtype *params, int *ier);
+
+
+  /* Prototypes: Functions Called by the ARKODE Solver */
+  int FARKfi(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+  int FARKfe(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+  
+  int FARKDenseJac(long int N, realtype t, 
+		   N_Vector y, N_Vector fy, 
+		   DlsMat J, void *user_data,
+		   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FARKDenseMass(long int N, realtype t, DlsMat M, void *user_data,
+		   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FARKBandJac(long int N, long int mupper, long int mlower,
+		  realtype t, N_Vector y, N_Vector fy,
+		  DlsMat J, void *user_data,
+		  N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FARKBandMass(long int N, long int mupper, long int mlower,
+		   realtype t, DlsMat M, void *user_data,
+		   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FARKLapackDenseJac(long int N, realtype t, 
+			 N_Vector y, N_Vector fy, 
+			 DlsMat J, void *user_data,
+			 N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FARKLapackDenseMass(long int N, realtype t, DlsMat M, void *user_data,
+			  N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+  int FARKLapackBandJac(long int N, long int mupper, long int mlower,
+			realtype t, N_Vector y, N_Vector fy,
+			DlsMat J, void *user_data,
+			N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FARKLapackBandMass(long int N, long int mupper, long int mlower,
+			 realtype t, DlsMat M, void *user_data,
+			 N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FARKSparseJac(realtype t, N_Vector y, N_Vector fy, 
+		    SlsMat J, void *user_data, N_Vector vtemp1, 
+		    N_Vector vtemp2, N_Vector vtemp3);
+
+  int FARKSparseMass(realtype t, SlsMat Mass, void *user_data, 
+		     N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FARKPSet(realtype tn, N_Vector y,N_Vector fy, booleantype jok,
+	       booleantype *jcurPtr, realtype gamma, void *user_data,
+	       N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FARKMassPSet(realtype tn, void *user_data, N_Vector vtemp1, 
+		   N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FARKPSol(realtype tn, N_Vector y, N_Vector fy, 
+	       N_Vector r, N_Vector z,
+	       realtype gamma, realtype delta,
+	       int lr, void *user_data, N_Vector vtemp);
+  
+  int FARKMassPSol(realtype tn, N_Vector r, N_Vector z, realtype delta, 
+		   int lr, void *user_data, N_Vector vtemp);
+  
+  int FARKJtimes(N_Vector v, N_Vector Jv, realtype t, 
+		 N_Vector y, N_Vector fy,
+		 void *user_data, N_Vector work);
+  
+  int FARKMtimes(N_Vector v, N_Vector Mv, realtype t, void *user_data);
+  
+  int FARKEwt(N_Vector y, N_Vector ewt, void *user_data);
+
+  int FARKAdapt(N_Vector y, realtype t, realtype h1, realtype h2, 
+		realtype h3, realtype e1, realtype e2, realtype e3, 
+		int q, int p, realtype *hnew, void *user_data);
+
+  int FARKExpStab(N_Vector y, realtype t, realtype *hstab, void *user_data);
+
+  /* Declarations for global variables shared amongst various routines */
+  extern N_Vector F2C_ARKODE_vec;     /* defined in FNVECTOR module */
+
+  extern void *ARK_arkodemem;     /* defined in farkode.c */
+  extern long int *ARK_iout;      /* defined in farkode.c */
+  extern realtype *ARK_rout;      /* defined in farkode.c */
+  extern int ARK_nrtfn;           /* defined in farkode.c */
+  extern int ARK_ls;              /* defined in farkode.c */
+  extern int ARK_mass_ls;         /* defined in farkode.c */
+
+  /* Linear solver IDs */
+  enum { ARK_LS_DENSE       = 1, 
+	 ARK_LS_BAND        = 2, 
+         ARK_LS_LAPACKDENSE = 3, 
+	 ARK_LS_LAPACKBAND  = 4,
+	 ARK_LS_KLU         = 5, 
+	 ARK_LS_SUPERLUMT   = 6, 
+	 ARK_LS_SPGMR       = 7, 
+	 ARK_LS_SPBCG       = 8, 
+	 ARK_LS_SPTFQMR     = 9, 
+	 ARK_LS_SPFGMR      = 10, 
+	 ARK_LS_PCG         = 12 };
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkpreco.c b/src/arkode/fcmix/farkpreco.c
new file mode 100644
index 0000000..75f2c70
--- /dev/null
+++ b/src/arkode/fcmix/farkpreco.c
@@ -0,0 +1,124 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * The C function FARKPSet is to interface between the ARKSP*
+ * modules and the user-supplied preconditioner setup routine 
+ * FARKPSET. Note the use of the generic name FARK_PSET in the 
+ * code below.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_spils.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_PSET(realtype *T, realtype *Y, realtype *FY,
+			booleantype *JOK, booleantype *JCUR,
+			realtype *GAMMA, realtype *H,
+			long int *IPAR, realtype *RPAR, 
+			realtype *W1, realtype *W2, 
+			realtype *W3, int *IER);
+  extern void FARK_PSOL(realtype *T, realtype *Y, realtype *FY,
+			realtype *R, realtype *Z, 
+			realtype *GAMMA, realtype *DELTA,
+			int *LR, long int *IPAR, realtype *RPAR,
+			realtype *WRK, int *IER);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSpilsSetPreconditioner; see 
+   farkode.h for further details */
+void FARK_SPILSSETPREC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = ARKSpilsSetPreconditioner(ARK_arkodemem, NULL, NULL);
+  } else {
+    *ier = ARKSpilsSetPreconditioner(ARK_arkodemem, 
+				     FARKPSet, FARKPSol);
+  }
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKPSET; see 
+   farkode.h for further details */
+int FARKPSet(realtype t, N_Vector y, N_Vector fy, 
+	     booleantype jok, booleantype *jcurPtr, 
+	     realtype gamma, void *user_data, N_Vector vtemp1, 
+	     N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier = 0;
+  realtype *ydata, *fydata, *v1data, *v2data, *v3data;
+  realtype h;
+  FARKUserData ARK_userdata;
+
+  ARKodeGetLastStep(ARK_arkodemem, &h);
+  ydata  = N_VGetArrayPointer(y);
+  fydata = N_VGetArrayPointer(fy);
+  v1data = N_VGetArrayPointer(vtemp1);
+  v2data = N_VGetArrayPointer(vtemp2);
+  v3data = N_VGetArrayPointer(vtemp3);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_PSET(&t, ydata, fydata, &jok, jcurPtr, &gamma, &h,
+	    ARK_userdata->ipar, ARK_userdata->rpar,
+	    v1data, v2data, v3data, &ier);
+  return(ier);
+}
+
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKPSOL; see 
+   farkode.h for further details */
+int FARKPSol(realtype t, N_Vector y, N_Vector fy, N_Vector r, 
+	     N_Vector z, realtype gamma, realtype delta,
+	     int lr, void *user_data, N_Vector vtemp)
+{
+  int ier = 0;
+  realtype *ydata, *fydata, *vtdata, *rdata, *zdata;
+  FARKUserData ARK_userdata;
+
+  ydata  = N_VGetArrayPointer(y);
+  fydata = N_VGetArrayPointer(fy);
+  vtdata = N_VGetArrayPointer(vtemp);
+  rdata  = N_VGetArrayPointer(r);
+  zdata  = N_VGetArrayPointer(z);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_PSOL(&t, ydata, fydata, rdata, zdata, &gamma, &delta, &lr, 
+	    ARK_userdata->ipar, ARK_userdata->rpar, vtdata, &ier);
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkroot.c b/src/arkode/fcmix/farkroot.c
new file mode 100644
index 0000000..df1695d
--- /dev/null
+++ b/src/arkode/fcmix/farkroot.c
@@ -0,0 +1,100 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * The FARKROOT module contains the routines necessary to use
+ * the rootfinding feature of the ARKODE module and to interface
+ * with the user-supplied Fortran subroutine.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "farkroot.h"
+#include "arkode_impl.h"
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+  extern void FARK_ROOTFN(realtype *T, realtype *Y, 
+			  realtype *G, long int *IPAR, 
+			  realtype *RPAR, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeRootInit; see farkroot.h
+   for further information. */
+void FARK_ROOTINIT(int *nrtfn, int *ier)
+{
+  *ier = ARKodeRootInit(ARK_arkodemem, *nrtfn, 
+			(ARKRootFn) FARKrootfunc);
+  ARK_nrtfn = *nrtfn;
+  return;
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeGetRootInfo; see 
+   farkroot.h for further information. */
+void FARK_ROOTINFO(int *nrtfn, int *info, int *ier)
+{
+  *ier = ARKodeGetRootInfo(ARK_arkodemem, info);
+  return; 
+}
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKodeRootInit, used to free 
+   existing memory resources; see farkroot.h for further 
+   information. */
+void FARK_ROOTFREE(void)
+{
+  ARKodeRootInit(ARK_arkodemem, 0, NULL);
+  return;
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied routine FARKROOTFN; see 
+   farkroot.h for further information. */
+int FARKrootfunc(realtype t, N_Vector y, 
+		 realtype *gout, void *user_data)
+{
+  int ier;
+  realtype *ydata;
+  FARKUserData ARK_userdata;
+
+  ydata = N_VGetArrayPointer(y);
+
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_ROOTFN(&t, ydata, gout, ARK_userdata->ipar, 
+	      ARK_userdata->rpar, &ier);
+
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farkroot.h b/src/arkode/fcmix/farkroot.h
new file mode 100644
index 0000000..59b103c
--- /dev/null
+++ b/src/arkode/fcmix/farkroot.h
@@ -0,0 +1,153 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * This is the Fortran interface include file for the rootfinding
+ * feature of ARKODE.
+ *--------------------------------------------------------------*/
+
+/*===============================================================
+                   FARKROOT Interface Package
+
+ The FARKROOT interface package allows programs written in 
+ FORTRAN to use the rootfinding feature of the ARKODE solver 
+ module.
+
+ The user-callable functions constituting the FARKROOT package 
+ are the following: FARKROOTINIT, FARKROOTINFO, and FARKROOTFREE. 
+ The corresponding ARKODE subroutine called by each interface 
+ function is given below.
+
+   FARKROOT routine      ARKODE equivalent
+   ----------------      -------------------
+     FARKROOTINIT    ->   ARKodeRootInit
+     FARKROOTINFO    ->   ARKodeGetRootInfo
+     FARKROOTFREE    ->   ARKodeRootInit
+
+ FARKROOTFN is a user-supplied subroutine defining the functions 
+ whose roots are sought.
+
+ ================================================================
+
+              Usage of the FARKROOT Interface Package
+
+ 1. In order to use the rootfinding feature of the ARKODE package 
+    the user must define the following subroutine:
+
+    SUBROUTINE FARKROOTFN(T, Y, G, IPAR, RPAR, IER)
+
+    The arguments are:
+      T = independent variable value t  [realtype, input]
+      Y = dependent variable array y  [realtype, input]
+      G = function value array g(t,y)  [realtype, output]
+      IPAR = user data array [long int, input/output]
+      RPAR = user data array [realtype, input/output]
+      IER = return flag [int, output]:
+            0 if success
+            non-zero if error
+
+ 2. After calling FARKMALLOC but prior to calling FARKODE, the 
+    user must allocate and initialize memory for the FARKROOT 
+    module by making the following call:
+
+    CALL FARKROOTINIT(NRTFN, IER)
+
+    The arguments are:
+      NRTFN = total number of root functions  [int, input]
+      IER   = return flag [int, output]:
+                 0 if success
+		-1 if ARKODE memory NULL 
+               -11 if memory allocation error
+
+ 3. After calling FARKODE, to see whether a root was found, test 
+    the FARKODE return flag IER.  The value IER = 2 means one or 
+    more roots were found.
+
+ 4. If a root was found, and if NRTFN>1, then to determine which 
+    root functions G(*) were found to have a root, make the 
+    following call:
+    
+    CALL FARKROOTINFO(NRTFN, INFO, IER)
+
+    The arguments are:
+      NRTFN = total number of root functions [int, input]
+      INFO = array of length NRTFN [int, output]:
+                if G(i) has a root, then INFO(i) = 1
+                if G(i) does not have a root, then INFO(i) = 0
+      IER = return flag [int, output]
+                0 if success
+                negative if failure
+
+ 5. The total number of calls made to the root function 
+    (FARKROOTFN), NGE, can be obtained from IOUT(13).
+
+    Note: if the FARKODE/ARKODE memory block is reinitialized to 
+    solve a different problem via a call to FARKREINIT, then the 
+    counter NGE is reset to zero.
+
+ 6. To free the memory resources allocated by a prior call to 
+    FARKROOTINIT make the following call:
+
+    CALL FARKROOTFREE()
+
+ For additional information, see the ARKODE documentation.
+===============================================================*/
+
+#ifndef _FARKROOT_H
+#define _FARKROOT_H
+
+#include <sundials/sundials_nvector.h>
+#include <sundials/sundials_types.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Definitions of interface function names */
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FARK_ROOTINIT SUNDIALS_F77_FUNC(farkrootinit, FARKROOTINIT)
+#define FARK_ROOTINFO SUNDIALS_F77_FUNC(farkrootinfo, FARKROOTINFO)
+#define FARK_ROOTFREE SUNDIALS_F77_FUNC(farkrootfree, FARKROOTFREE)
+#define FARK_ROOTFN   SUNDIALS_F77_FUNC(farkrootfn,   FARKROOTFN)
+
+#else
+
+#define FARK_ROOTINIT farkrootinit_
+#define FARK_ROOTINFO farkrootinfo_
+#define FARK_ROOTFREE farkrootfree_
+#define FARK_ROOTFN   farkrootfn_
+
+#endif
+
+/* Prototypes of exported function */
+void FARK_ROOTINIT(int *nrtfn, int *ier);
+void FARK_ROOTINFO(int *nrtfn, int *info, int *ier);
+void FARK_ROOTFREE(void);
+
+/* Prototype of function called by ARKODE module */
+int FARKrootfunc(realtype t, N_Vector y, 
+		 realtype *gout, void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farksparse.c b/src/arkode/fcmix/farksparse.c
new file mode 100644
index 0000000..c56ea43
--- /dev/null
+++ b/src/arkode/fcmix/farksparse.c
@@ -0,0 +1,86 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKKLU, for the case
+ * of a user-supplied sparse Jacobian routine.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_sparse.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_SPJAC(realtype *T, realtype *Y, 
+			 realtype *FY, int *N, int *NNZ, 
+			 realtype *JDATA, int *JRVALS, 
+			 int *JCPTRS, realtype *H, 
+			 long int *IPAR, realtype *RPAR, 
+			 realtype *V1, realtype *V2, 
+			 realtype *V3, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSlsSetSparseJacFn; see 
+   farkode.h for further information */
+void FARK_SPARSESETJAC(int *ier)
+{
+  *ier = ARKSlsSetSparseJacFn(ARK_arkodemem, FARKSparseJac);
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKSPJAC; see 
+   farkode.h for additional information  */
+int FARKSparseJac(realtype t, N_Vector y, N_Vector fy, 
+		  SlsMat J, void *user_data, N_Vector vtemp1, 
+		  N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *fydata, *v1data, *v2data, *v3data;
+  realtype h;
+  FARKUserData ARK_userdata;
+
+  ARKodeGetLastStep(ARK_arkodemem, &h);
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_SPJAC(&t, ydata, fydata, &(J->NP), &(J->NNZ), J->data, 
+	     J->indexvals, J->indexptrs, &h, ARK_userdata->ipar, 
+	     ARK_userdata->rpar, v1data, v2data, v3data, &ier); 
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farksparsemass.c b/src/arkode/fcmix/farksparsemass.c
new file mode 100644
index 0000000..a8913a4
--- /dev/null
+++ b/src/arkode/fcmix/farksparsemass.c
@@ -0,0 +1,79 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKKLU, for the case
+ * of a user-supplied sparse Jacobian routine.
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_sparse.h>
+
+/*=============================================================*/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FARK_SPMASS(realtype *T, int *N, int *NNZ, 
+			  realtype *MDATA, int *MRVALS, 
+			  int *MCPTRS, long int *IPAR, 
+			  realtype *RPAR, realtype *V1, 
+			  realtype *V2, realtype *V3, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSlsSetSparseMassFn; see 
+   farkode.h for further information */
+void FARK_SPARSESETMASS(int *ier)
+{
+  *ier = ARKSlsSetSparseMassFn(ARK_arkodemem, FARKSparseMass);
+}
+
+/*=============================================================*/
+
+/* C interface to user-supplied Fortran routine FARKSPMASS; see 
+   farkode.h for additional information  */
+int FARKSparseMass(realtype t, SlsMat MassMat, void *user_data, 
+		   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *v1data, *v2data, *v3data;
+  FARKUserData ARK_userdata;
+
+  v1data = N_VGetArrayPointer(vtemp1);
+  v2data = N_VGetArrayPointer(vtemp2);
+  v3data = N_VGetArrayPointer(vtemp3);
+  ARK_userdata = (FARKUserData) user_data;
+
+  FARK_SPMASS(&t, &(MassMat->NP), &(MassMat->NNZ), MassMat->data, 
+	      MassMat->indexvals, MassMat->indexptrs, ARK_userdata->ipar, 
+	      ARK_userdata->rpar, v1data, v2data, v3data, &ier); 
+  return(ier);
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/arkode/fcmix/farksuperlumt.c b/src/arkode/fcmix/farksuperlumt.c
new file mode 100644
index 0000000..80174f7
--- /dev/null
+++ b/src/arkode/fcmix/farksuperlumt.c
@@ -0,0 +1,53 @@
+/*---------------------------------------------------------------
+ * Programmer(s): Daniel R. Reynolds @ SMU
+ *---------------------------------------------------------------
+ * LLNS/SMU Copyright Start
+ * Copyright (c) 2015, Southern Methodist University and 
+ * Lawrence Livermore National Security
+ *
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Southern Methodist University and Lawrence Livermore 
+ * National Laboratory under Contract DE-AC52-07NA27344.
+ * Produced at Southern Methodist University and the Lawrence 
+ * Livermore National Laboratory.
+ *
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS/SMU Copyright End
+ *---------------------------------------------------------------
+ * Fortran/C interface routines for ARKODE/ARKSUPERLUMT
+ *--------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "farkode.h"
+#include "arkode_impl.h"
+#include <arkode/arkode_superlumt.h>
+
+/*=============================================================*/
+
+/* Fortran interface to C routine ARKSuperLUMT; see farkode.h for 
+   further details */
+void FARK_SUPERLUMT(int *nthreads, int *neq, int *nnz, int *ordering, int *ier)
+{
+  *ier = ARKSuperLUMT(ARK_arkodemem, *nthreads, *neq, *nnz);
+  ARKSuperLUMTSetOrdering(ARK_arkodemem, *ordering);
+  ARK_ls = ARK_LS_SUPERLUMT;
+  return;
+}
+
+
+/* Fortran interface to C routine ARKMassSuperLUMT; see farkode.h for 
+   further details */
+void FARK_MASSSUPERLUMT(int *nthreads, int *neq, int *nnz, int *ordering, int *ier)
+{
+  *ier = ARKMassSuperLUMT(ARK_arkodemem, *nthreads, *neq, *nnz, NULL);
+  ARKMassSuperLUMTSetOrdering(ARK_arkodemem, *ordering);
+  ARK_mass_ls = ARK_LS_SUPERLUMT;
+  return;
+}
+
+/*===============================================================
+   EOF
+===============================================================*/
+
diff --git a/src/cvode/CMakeLists.txt b/src/cvode/CMakeLists.txt
new file mode 100644
index 0000000..d47cccc
--- /dev/null
+++ b/src/cvode/CMakeLists.txt
@@ -0,0 +1,168 @@
+# ---------------------------------------------------------------
+# $Revision: 4759 $
+# $Date: 2016-05-18 16:25:17 -0700 (Wed, 18 May 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the CVODE library
+
+INSTALL(CODE "MESSAGE(\"\nInstall CVODE\n\")")
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Add variable cvode_SOURCES with the sources for the CVODE library
+SET(cvode_SOURCES
+  cvode.c
+  cvode_io.c
+  cvode_direct.c        
+  cvode_band.c
+  cvode_dense.c
+  cvode_diag.c
+  cvode_spils.c
+  cvode_spbcgs.c
+  cvode_spgmr.c
+  cvode_sptfqmr.c
+  cvode_sparse.c
+  cvode_bandpre.c
+  cvode_bbdpre.c
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND cvode_SOURCES cvode_klu.c)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND cvode_SOURCES cvode_superlumt.c)
+ENDIF()
+
+# IF(HYPRE_FOUND)
+#      LIST(APPEND cvode_SOURCES cvode_hypamgpre.c)
+# ENDIF()
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the CVODE library
+SET(shared_SOURCES
+  sundials_nvector.c
+  sundials_math.c
+  sundials_direct.c
+  sundials_band.c
+  sundials_dense.c
+  sundials_iterative.c
+  sundials_sparse.c
+  sundials_spbcgs.c
+  sundials_spgmr.c
+  sundials_sptfqmr.c
+  )
+
+# Add prefix with complete path to the common SUNDIALS sources
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable cvode_HEADERS with the exported CVODE header files
+SET(cvode_HEADERS
+  cvode_band.h
+  cvode_bandpre.h
+  cvode_bbdpre.h
+  cvode_dense.h
+  cvode_diag.h
+  cvode_direct.h
+  cvode.h
+  cvode_sparse.h
+  cvode_spbcgs.h
+  cvode_spgmr.h
+  cvode_spils.h
+  cvode_sptfqmr.h
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND cvode_HEADERS cvode_klu.h)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND cvode_HEADERS cvode_superlumt.h)
+ENDIF()
+
+# IF(HYPRE_FOUND)
+#      LIST(APPEND cvode_HEADERS cvode_hypamgpre.h)
+# ENDIF()
+
+# Add prefix with complete path to the CVODE header files
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/cvode/ cvode_HEADERS)
+
+# If Blas/Lapack support was enabled, set-up additional file lists
+IF(LAPACK_FOUND)
+  SET(cvode_BL_SOURCES cvode_lapack.c)
+  SET(cvode_BL_HEADERS cvode_lapack.h)
+  ADD_PREFIX(${sundials_SOURCE_DIR}/include/cvode/ cvode_BL_HEADERS)
+ELSE(LAPACK_FOUND)
+  SET(cvode_BL_SOURCES "")
+  SET(cvode_BL_HEADERS "")
+ENDIF(LAPACK_FOUND)
+
+# Add source directories to include directories for access to
+# implementation only header files.
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(../sundials)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Build the static library
+IF(BUILD_STATIC_LIBS)
+
+  # Add the build target for the static CVODE library
+  ADD_LIBRARY(sundials_cvode_static STATIC 
+    ${cvode_SOURCES}  ${cvode_BL_SOURCES} ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_cvode_static
+    PROPERTIES OUTPUT_NAME sundials_cvode CLEAN_DIRECT_OUTPUT 1)
+
+  # Install the CVODE library
+  INSTALL(TARGETS sundials_cvode_static DESTINATION lib)
+
+ENDIF(BUILD_STATIC_LIBS)
+
+# Build the shared library
+IF(BUILD_SHARED_LIBS)
+
+  # Add the build target for the CVODE library
+  ADD_LIBRARY(sundials_cvode_shared SHARED 
+    ${cvode_SOURCES}  ${cvode_BL_SOURCES}  ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_cvode_shared
+    PROPERTIES OUTPUT_NAME sundials_cvode CLEAN_DIRECT_OUTPUT 1)
+
+  # Set VERSION and SOVERSION for shared libraries
+  SET_TARGET_PROPERTIES(sundials_cvode_shared
+    PROPERTIES VERSION ${cvodelib_VERSION} SOVERSION ${cvodelib_SOVERSION})
+
+  # Install the CVODE library
+  INSTALL(TARGETS sundials_cvode_shared DESTINATION lib)
+
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the CVODE header files
+INSTALL(FILES ${cvode_HEADERS} ${cvode_BL_HEADERS} DESTINATION include/cvode)
+
+# Install the CVODE implementation header file
+INSTALL(FILES cvode_impl.h DESTINATION include/cvode)
+
+#
+MESSAGE(STATUS "Added CVODE module")
diff --git a/src/cvode/LICENSE b/src/cvode/LICENSE
new file mode 100644
index 0000000..574b0be
--- /dev/null
+++ b/src/cvode/LICENSE
@@ -0,0 +1,60 @@
+Copyright (c) 2002-2015, Lawrence Livermore National Security. 
+Produced at the Lawrence Livermore National Laboratory.
+Written by Scott Cohen, Alan Hindmarsh, Radu Serban, Dan Shumaker.
+UCRL-CODE-155951
+All rights reserved. 
+
+This file is part of CVODE.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the disclaimer below.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the disclaimer (as noted below)
+in the documentation and/or other materials provided with the
+distribution.
+
+3. Neither the name of the LLNS/LLNL nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
+LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF 
+ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Additional BSD Notice
+---------------------
+1. This notice is required to be provided under our contract with
+the U.S. Department of Energy (DOE). This work was produced at
+Lawrence Livermore National Laboratory under Contract 
+No. DE-AC52-07NA27344 with the DOE.
+
+2. Neither the United States Government nor Lawrence Livermore 
+National Security, LLC nor any of their employees, makes any warranty, 
+express or implied, or assumes any liability or responsibility for the
+accuracy, completeness, or usefulness of any information, apparatus,
+product, or process disclosed, or represents that its use would not
+infringe privately-owned rights.
+
+3. Also, reference herein to any specific commercial products, process, 
+or services by trade name, trademark, manufacturer or otherwise does 
+not necessarily constitute or imply its endorsement, recommendation, 
+or favoring by the United States Government or Lawrence Livermore 
+National Security, LLC. The views and opinions of authors expressed 
+herein do not necessarily state or reflect those of the United States 
+Government or Lawrence Livermore National Security, LLC, and shall 
+not be used for advertising or product endorsement purposes.
+
diff --git a/src/cvode/README b/src/cvode/README
new file mode 100644
index 0000000..9e23bbf
--- /dev/null
+++ b/src/cvode/README
@@ -0,0 +1,93 @@
+                              CVODE
+                    Release 2.9.0, September 2016
+                 Alan C. Hindmarsh and Radu Serban
+              Center for Applied Scientific Computing, LLNL
+
+CVODE is a solver for stiff and nonstiff ODE systems (initial value problem) 
+given in explicit form dy/dt = f(t,y). It is written in ANSI standard C.
+
+CVODE can be used both on serial and parallel computers.  The main
+difference is in the NVECTOR module of vector kernels.  The desired
+version is obtained when compiling the example files by linking the
+appropriate library of NVECTOR kernels.  In the parallel versions,
+communication between processors is done with MPI, with OpenMP, or with Pthreads.
+
+When used with the serial NVECTOR module, CVODE provides both direct (dense 
+and band) and preconditioned Krylov (iterative) linear solvers. Three different
+iterative solvers are available: scaled preconditioned GMRES (SPGMR), scaled 
+preconditioned BiCGStab (SPBCG), and scaled preconditioned TFQMR (SPTFQMR). 
+When CVODE is used with the parallel NVECTOR module, only the Krylov linear solvers 
+are available. (An approximate diagonal Jacobian option is available with both 
+versions.)  For the serial version, there is a banded preconditioner module 
+called CVBANDPRE available for use with the Krylov solvers, while for the parallel 
+version there is a preconditioner module called CVBBDPRE which provides a
+band-block-diagonal preconditioner.
+
+CVODE is part of a software family called SUNDIALS: SUite of Nonlinear
+and DIfferential/ALgebraic equation Solvers.  This suite consists of
+CVODE, CVODES, ARKode, KINSOL, IDAS, and IDA, and variants of these.  
+The directory structure of the package supplied reflects this family 
+relationship.
+
+For use with Fortran applications, a set of Fortran/C interface routines,
+called FCVODE, is also supplied.  These are written in C, but assume that
+the user calling program and all user-supplied routines are in Fortran.
+
+The notes below provide the location of documentation, directions for the 
+installation of the CVODE package, and relevant references. Following that 
+is a brief history of revisions to the package.
+
+
+A. Documentation
+----------------
+
+/sundials/doc/cvode/ contains PDF files for the CVODE User Guide [1] (cv_guide.pdf)
+and the CVODE Examples [2] (cv_examples.pdf) documents.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see the file /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see the "Installation Procedure"
+chapter in the CVODE User Guide.
+
+
+C. References
+-------------
+
+[1] A. C. Hindmarsh and R. Serban, "User Documentation for CVODE v2.9.0," 
+    LLNL technical report UCRL-SM-208108, March 2016.
+
+[2] A. C. Hindmarsh and R. Serban, "Example Programs for CVODE v2.9.0," 
+    LLNL technical report UCRL-SM-208110, March 2016.
+
+[3] S.D. Cohen and A.C. Hindmarsh, "CVODE, a Stiff/nonstiff ODE Solver in C,"
+    Computers in Physics, 10(2), pp. 138-143, 1996.
+
+[4] A. C. Hindmarsh, P. N. Brown, K. E. Grant, S. L. Lee, R. Serban, 
+    D. E. Shumaker, and C. S. Woodward, "SUNDIALS, Suite of Nonlinear and 
+    Differential/Algebraic Equation Solvers," ACM Trans. Math. Softw., 
+    31(3), pp. 363-396, 2005.
+
+
+D. Releases
+-----------
+
+v. 2.9.0       - Sep. 2016
+v. 2.8.2       - Aug. 2015
+v. 2.8.1       - Mar. 2015
+v. 2.8.0       - Mar. 2015
+v. 2.7.0       - Mar. 2012
+v. 2.6.0       - May  2009
+v. 2.5.0       - Nov. 2006
+v. 2.4.0       - Mar. 2006
+v. 2.3.0       - Apr. 2005
+v. 2.2.2       - Mar. 2005
+v. 2.2.1       - Jan. 2005
+v. 2.2.0       - Dec. 2004
+v. 2.0         - Jul. 2002 (first SUNDIALS release)
+v. 1.0         - Mar. 2002 (CVODE and PVODE combined)
+v. 1.0 (PVODE) - Jul. 1997 (date written)
+v. 1.0 (CVODE) - Sep. 1994 (date written)
+
diff --git a/src/cvode/cvode.c b/src/cvode/cvode.c
new file mode 100644
index 0000000..dafab72
--- /dev/null
+++ b/src/cvode/cvode.c
@@ -0,0 +1,4187 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4285 $
+ * $Date: 2014-12-12 13:39:23 -0800 (Fri, 12 Dec 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, Radu Serban,
+ *                and Dan Shumaker @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the main CVODE integrator.
+ * It is independent of the CVODE linear solver in use.
+ * -----------------------------------------------------------------
+ */
+
+/*=================================================================*/
+/*             Import Header Files                                 */
+/*=================================================================*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "cvode_impl.h"
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+/*=================================================================*/
+/*             Macros                                              */
+/*=================================================================*/
+
+/* Macro: loop */
+#define loop for(;;)
+
+/*=================================================================*/
+/*             CVODE Private Constants                             */
+/*=================================================================*/
+
+#define ZERO    RCONST(0.0)     /* real 0.0     */
+#define TINY    RCONST(1.0e-10) /* small number */
+#define PT1     RCONST(0.1)     /* real 0.1     */
+#define POINT2  RCONST(0.2)     /* real 0.2     */
+#define FOURTH  RCONST(0.25)    /* real 0.25    */
+#define HALF    RCONST(0.5)     /* real 0.5     */
+#define ONE     RCONST(1.0)     /* real 1.0     */
+#define TWO     RCONST(2.0)     /* real 2.0     */
+#define THREE   RCONST(3.0)     /* real 3.0     */
+#define FOUR    RCONST(4.0)     /* real 4.0     */
+#define FIVE    RCONST(5.0)     /* real 5.0     */
+#define TWELVE  RCONST(12.0)    /* real 12.0    */
+#define HUNDRED RCONST(100.0)   /* real 100.0   */
+
+/*=================================================================*/
+/*             CVODE Routine-Specific Constants                    */
+/*=================================================================*/
+
+/* 
+ * Control constants for lower-level functions used by cvStep 
+ * ----------------------------------------------------------
+ *
+ * cvHin return values:
+ *    CV_SUCCESS
+ *    CV_RHSFUNC_FAIL
+ *    CV_TOO_CLOSE
+ *
+ * cvStep control constants:
+ *    DO_ERROR_TEST
+ *    PREDICT_AGAIN
+ *
+ * cvStep return values: 
+ *    CV_SUCCESS,
+ *    CV_LSETUP_FAIL,  CV_LSOLVE_FAIL, 
+ *    CV_RHSFUNC_FAIL, CV_RTFUNC_FAIL
+ *    CV_CONV_FAILURE, CV_ERR_FAILURE,
+ *    CV_FIRST_RHSFUNC_ERR
+ *
+ * cvNls input nflag values:
+ *    FIRST_CALL
+ *    PREV_CONV_FAIL
+ *    PREV_ERR_FAIL
+ *    
+ * cvNls return values: 
+ *    CV_SUCCESS,
+ *    CV_LSETUP_FAIL, CV_LSOLVE_FAIL, CV_RHSFUNC_FAIL,
+ *    CONV_FAIL, RHSFUNC_RECVR
+ * 
+ * cvNewtonIteration return values:
+ *    CV_SUCCESS, 
+ *    CV_LSOLVE_FAIL, CV_RHSFUNC_FAIL
+ *    CONV_FAIL, RHSFUNC_RECVR,
+ *    TRY_AGAIN
+ * 
+ */
+
+#define DO_ERROR_TEST    +2
+#define PREDICT_AGAIN    +3
+
+#define CONV_FAIL        +4 
+#define TRY_AGAIN        +5
+
+#define FIRST_CALL       +6
+#define PREV_CONV_FAIL   +7
+#define PREV_ERR_FAIL    +8
+
+#define RHSFUNC_RECVR    +9
+
+/*
+ * Control constants for lower-level rootfinding functions
+ * -------------------------------------------------------
+ *
+ * cvRcheck1 return values:
+ *    CV_SUCCESS,
+ *    CV_RTFUNC_FAIL,
+ * cvRcheck2 return values:
+ *    CV_SUCCESS
+ *    CV_RTFUNC_FAIL,
+ *    CLOSERT
+ *    RTFOUND
+ * cvRcheck3 return values:
+ *    CV_SUCCESS
+ *    CV_RTFUNC_FAIL,
+ *    RTFOUND
+ * cvRootfind return values:
+ *    CV_SUCCESS
+ *    CV_RTFUNC_FAIL,
+ *    RTFOUND
+ */
+
+#define RTFOUND          +1
+#define CLOSERT          +3
+
+/*
+ * Control constants for tolerances
+ * --------------------------------
+ */
+
+#define CV_NN  0
+#define CV_SS  1
+#define CV_SV  2
+#define CV_WF  3
+
+/*
+ * Algorithmic constants
+ * ---------------------
+ *
+ * CVodeGetDky and cvStep
+ *
+ *    FUZZ_FACTOR
+ *
+ * cvHin
+ *
+ *    HLB_FACTOR
+ *    HUB_FACTOR
+ *    H_BIAS
+ *    MAX_ITERS
+ *
+ * CVodeCreate 
+ *
+ *   CORTES
+ *
+ * cvStep
+ *
+ *    THRESH
+ *    ETAMX1
+ *    ETAMX2
+ *    ETAMX3
+ *    ETAMXF
+ *    ETAMIN
+ *    ETACF
+ *    ADDON
+ *    BIAS1
+ *    BIAS2
+ *    BIAS3
+ *    ONEPSM
+ *
+ *    SMALL_NST   nst > SMALL_NST => use ETAMX3 
+ *    MXNCF       max no. of convergence failures during one step try
+ *    MXNEF       max no. of error test failures during one step try
+ *    MXNEF1      max no. of error test failures before forcing a reduction of order
+ *    SMALL_NEF   if an error failure occurs and SMALL_NEF <= nef <= MXNEF1, then
+ *                reset eta =  SUNMIN(eta, ETAMXF)
+ *    LONG_WAIT   number of steps to wait before considering an order change when
+ *                q==1 and MXNEF1 error test failures have occurred
+ *
+ * cvNls
+ *    
+ *    NLS_MAXCOR  maximum no. of corrector iterations for the nonlinear solver
+ *    CRDOWN      constant used in the estimation of the convergence rate (crate)
+ *                of the iterates for the nonlinear equation
+ *    DGMAX       iter == CV_NEWTON, |gamma/gammap-1| > DGMAX => call lsetup
+ *    RDIV        declare divergence if ratio del/delp > RDIV
+ *    MSBP        max no. of steps between lsetup calls
+ *    
+ */
+
+
+#define FUZZ_FACTOR RCONST(100.0)
+
+#define HLB_FACTOR RCONST(100.0)
+#define HUB_FACTOR RCONST(0.1)
+#define H_BIAS     HALF
+#define MAX_ITERS  4
+
+#define CORTES RCONST(0.1)
+
+#define THRESH RCONST(1.5)
+#define ETAMX1 RCONST(10000.0) 
+#define ETAMX2 RCONST(10.0)
+#define ETAMX3 RCONST(10.0)
+#define ETAMXF RCONST(0.2)
+#define ETAMIN RCONST(0.1)
+#define ETACF  RCONST(0.25)
+#define ADDON  RCONST(0.000001)
+#define BIAS1  RCONST(6.0)
+#define BIAS2  RCONST(6.0)
+#define BIAS3  RCONST(10.0)
+#define ONEPSM RCONST(1.000001)
+
+#define SMALL_NST    10
+#define MXNCF        10
+#define MXNEF         7
+#define MXNEF1        3
+#define SMALL_NEF     2
+#define LONG_WAIT    10
+
+#define NLS_MAXCOR 3
+#define CRDOWN RCONST(0.3)
+#define DGMAX  RCONST(0.3)
+
+#define RDIV      TWO
+#define MSBP       20
+
+/*=================================================================*/
+/*             Private Helper Functions Prototypes                 */
+/*=================================================================*/
+
+static booleantype cvCheckNvector(N_Vector tmpl);
+
+static int cvInitialSetup(CVodeMem cv_mem);
+
+static booleantype cvAllocVectors(CVodeMem cv_mem, N_Vector tmpl);
+static void cvFreeVectors(CVodeMem cv_mem);
+
+static int cvEwtSetSS(CVodeMem cv_mem, N_Vector ycur, N_Vector weight);
+static int cvEwtSetSV(CVodeMem cv_mem, N_Vector ycur, N_Vector weight);
+
+static int cvHin(CVodeMem cv_mem, realtype tout);
+static realtype cvUpperBoundH0(CVodeMem cv_mem, realtype tdist);
+static int cvYddNorm(CVodeMem cv_mem, realtype hg, realtype *yddnrm);
+
+static int cvStep(CVodeMem cv_mem);
+
+static int cvSLdet(CVodeMem cv_mem);
+
+static void cvAdjustParams(CVodeMem cv_mem);
+static void cvAdjustOrder(CVodeMem cv_mem, int deltaq);
+static void cvAdjustAdams(CVodeMem cv_mem, int deltaq);
+static void cvAdjustBDF(CVodeMem cv_mem, int deltaq);
+static void cvIncreaseBDF(CVodeMem cv_mem);
+static void cvDecreaseBDF(CVodeMem cv_mem);
+
+static void cvRescale(CVodeMem cv_mem);
+
+static void cvPredict(CVodeMem cv_mem);
+
+static void cvSet(CVodeMem cv_mem);
+static void cvSetAdams(CVodeMem cv_mem);
+static realtype cvAdamsStart(CVodeMem cv_mem, realtype m[]);
+static void cvAdamsFinish(CVodeMem cv_mem, realtype m[], realtype M[], realtype hsum);
+static realtype cvAltSum(int iend, realtype a[], int k);
+static void cvSetBDF(CVodeMem cv_mem);
+static void cvSetTqBDF(CVodeMem cv_mem, realtype hsum, realtype alpha0,
+                       realtype alpha0_hat, realtype xi_inv, realtype xistar_inv);
+
+static int cvNls(CVodeMem cv_mem, int nflag);
+static int cvNlsFunctional(CVodeMem cv_mem);
+static int cvNlsNewton(CVodeMem cv_mem, int nflag);
+static int cvNewtonIteration(CVodeMem cv_mem);
+
+static int cvHandleNFlag(CVodeMem cv_mem, int *nflagPtr, realtype saved_t,
+                         int *ncfPtr);
+
+static void cvRestore(CVodeMem cv_mem, realtype saved_t);
+
+static int cvDoErrorTest(CVodeMem cv_mem, int *nflagPtr,
+                         realtype saved_t, int *nefPtr, realtype *dsmPtr);
+
+static void cvCompleteStep(CVodeMem cv_mem);
+
+static void cvPrepareNextStep(CVodeMem cv_mem, realtype dsm);
+static void cvSetEta(CVodeMem cv_mem);
+static realtype cvComputeEtaqm1(CVodeMem cv_mem);
+static realtype cvComputeEtaqp1(CVodeMem cv_mem);
+static void cvChooseEta(CVodeMem cv_mem);
+static void cvBDFStab(CVodeMem cv_mem);
+
+static int cvHandleFailure(CVodeMem cv_mem,int flag);
+
+static int cvRcheck1(CVodeMem cv_mem);
+static int cvRcheck2(CVodeMem cv_mem);
+static int cvRcheck3(CVodeMem cv_mem);
+static int cvRootfind(CVodeMem cv_mem);
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+/* 
+ * CVodeCreate
+ *
+ * CVodeCreate creates an internal memory block for a problem to 
+ * be solved by CVODE.
+ * If successful, CVodeCreate returns a pointer to the problem memory. 
+ * This pointer should be passed to CVodeInit.  
+ * If an initialization error occurs, CVodeCreate prints an error 
+ * message to standard err and returns NULL. 
+ */
+
+void *CVodeCreate(int lmm, int iter)
+{
+  int maxord;
+  CVodeMem cv_mem;
+
+  /* Test inputs */
+
+  if ((lmm != CV_ADAMS) && (lmm != CV_BDF)) {
+    cvProcessError(NULL, 0, "CVODE", "CVodeCreate", MSGCV_BAD_LMM);
+    return(NULL);
+  }
+  
+  if ((iter != CV_FUNCTIONAL) && (iter != CV_NEWTON)) {
+    cvProcessError(NULL, 0, "CVODE", "CVodeCreate", MSGCV_BAD_ITER);
+    return(NULL);
+  }
+
+  cv_mem = NULL;
+  cv_mem = (CVodeMem) malloc(sizeof(struct CVodeMemRec));
+  if (cv_mem == NULL) {
+    cvProcessError(NULL, 0, "CVODE", "CVodeCreate", MSGCV_CVMEM_FAIL);
+    return(NULL);
+  }
+
+  /* Zero out cv_mem */
+  memset(cv_mem, 0, sizeof(struct CVodeMemRec));
+
+  maxord = (lmm == CV_ADAMS) ? ADAMS_Q_MAX : BDF_Q_MAX;
+
+  /* copy input parameters into cv_mem */
+  cv_mem->cv_lmm  = lmm;
+  cv_mem->cv_iter = iter;
+
+  /* Set uround */
+  cv_mem->cv_uround = UNIT_ROUNDOFF;
+
+  /* Set default values for integrator optional inputs */
+  cv_mem->cv_f          = NULL;
+  cv_mem->cv_user_data  = NULL;
+  cv_mem->cv_itol       = CV_NN;
+  cv_mem->cv_user_efun  = FALSE;
+  cv_mem->cv_efun       = NULL;
+  cv_mem->cv_e_data     = NULL;
+  cv_mem->cv_ehfun      = cvErrHandler;
+  cv_mem->cv_eh_data    = cv_mem;
+  cv_mem->cv_errfp      = stderr;
+  cv_mem->cv_qmax       = maxord;
+  cv_mem->cv_mxstep     = MXSTEP_DEFAULT;
+  cv_mem->cv_mxhnil     = MXHNIL_DEFAULT;
+  cv_mem->cv_sldeton    = FALSE;
+  cv_mem->cv_hin        = ZERO;
+  cv_mem->cv_hmin       = HMIN_DEFAULT;
+  cv_mem->cv_hmax_inv   = HMAX_INV_DEFAULT;
+  cv_mem->cv_tstopset   = FALSE;
+  cv_mem->cv_maxcor     = NLS_MAXCOR;
+  cv_mem->cv_maxnef     = MXNEF;
+  cv_mem->cv_maxncf     = MXNCF;
+  cv_mem->cv_nlscoef    = CORTES;
+
+  /* Initialize root finding variables */
+
+  cv_mem->cv_glo        = NULL;
+  cv_mem->cv_ghi        = NULL;
+  cv_mem->cv_grout      = NULL;
+  cv_mem->cv_iroots     = NULL;
+  cv_mem->cv_rootdir    = NULL;
+  cv_mem->cv_gfun       = NULL;
+  cv_mem->cv_nrtfn      = 0;
+  cv_mem->cv_gactive    = NULL;
+  cv_mem->cv_mxgnull    = 1;
+
+  /* Set the saved value qmax_alloc */
+
+  cv_mem->cv_qmax_alloc = maxord;
+  
+  /* Initialize lrw and liw */
+
+  cv_mem->cv_lrw = 58 + 2*L_MAX + NUM_TESTS;
+  cv_mem->cv_liw = 40;
+
+  /* No mallocs have been done yet */
+
+  cv_mem->cv_VabstolMallocDone = FALSE;
+  cv_mem->cv_MallocDone        = FALSE;
+
+  /* Return pointer to CVODE memory block */
+
+  return((void *)cv_mem);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define iter (cv_mem->cv_iter)  
+#define lmm  (cv_mem->cv_lmm) 
+#define lrw  (cv_mem->cv_lrw)
+#define liw  (cv_mem->cv_liw)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeInit
+ * 
+ * CVodeInit allocates and initializes memory for a problem. All 
+ * problem inputs are checked for errors. If any error occurs during 
+ * initialization, it is reported to the file whose file pointer is 
+ * errfp and an error flag is returned. Otherwise, it returns CV_SUCCESS
+ */
+
+int CVodeInit(void *cvode_mem, CVRhsFn f, realtype t0, N_Vector y0)
+{
+  CVodeMem cv_mem;
+  booleantype nvectorOK, allocOK;
+  long int lrw1, liw1;
+  int i,k;
+
+  /* Check cvode_mem */
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check for legal input parameters */
+
+  if (y0==NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeInit", MSGCV_NULL_Y0);
+    return(CV_ILL_INPUT);
+  }
+
+  if (f == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeInit", MSGCV_NULL_F);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Test if all required vector operations are implemented */
+
+  nvectorOK = cvCheckNvector(y0);
+  if(!nvectorOK) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeInit", MSGCV_BAD_NVECTOR);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Set space requirements for one N_Vector */
+
+  if (y0->ops->nvspace != NULL) {
+    N_VSpace(y0, &lrw1, &liw1);
+  } else {
+    lrw1 = 0;
+    liw1 = 0;
+  }
+  cv_mem->cv_lrw1 = lrw1;
+  cv_mem->cv_liw1 = liw1;
+
+  /* Allocate the vectors (using y0 as a template) */
+
+  allocOK = cvAllocVectors(cv_mem, y0);
+  if (!allocOK) {
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODE", "CVodeInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  /* All error checking is complete at this point */
+
+  /* Copy the input parameters into CVODE state */
+
+  cv_mem->cv_f  = f;
+  cv_mem->cv_tn = t0;
+
+  /* Set step parameters */
+
+  cv_mem->cv_q      = 1;
+  cv_mem->cv_L      = 2;
+  cv_mem->cv_qwait  = cv_mem->cv_L;
+  cv_mem->cv_etamax = ETAMX1;
+
+  cv_mem->cv_qu    = 0;
+  cv_mem->cv_hu    = ZERO;
+  cv_mem->cv_tolsf = ONE;
+
+  /* Set the linear solver addresses to NULL.
+     (We check != NULL later, in CVode, if using CV_NEWTON.) */
+
+  cv_mem->cv_linit  = NULL;
+  cv_mem->cv_lsetup = NULL;
+  cv_mem->cv_lsolve = NULL;
+  cv_mem->cv_lfree  = NULL;
+  cv_mem->cv_lmem   = NULL;
+
+  /* Initialize zn[0] in the history array */
+
+  N_VScale(ONE, y0, cv_mem->cv_zn[0]);
+
+  /* Initialize all the counters */
+
+  cv_mem->cv_nst     = 0;
+  cv_mem->cv_nfe     = 0;
+  cv_mem->cv_ncfn    = 0;
+  cv_mem->cv_netf    = 0;
+  cv_mem->cv_nni     = 0;
+  cv_mem->cv_nsetups = 0;
+  cv_mem->cv_nhnil   = 0;
+  cv_mem->cv_nstlp   = 0;
+  cv_mem->cv_nscon   = 0;
+  cv_mem->cv_nge     = 0;
+
+  cv_mem->cv_irfnd   = 0;
+
+  /* Initialize other integrator optional outputs */
+
+  cv_mem->cv_h0u      = ZERO;
+  cv_mem->cv_next_h   = ZERO;
+  cv_mem->cv_next_q   = 0;
+
+  /* Initialize Stablilty Limit Detection data */
+  /* NOTE: We do this even if stab lim det was not
+     turned on yet. This way, the user can turn it
+     on at any time */
+
+  cv_mem->cv_nor = 0;
+  for (i = 1; i <= 5; i++)
+    for (k = 1; k <= 3; k++) 
+      cv_mem->cv_ssdat[i-1][k-1] = ZERO;
+
+  /* Problem has been successfully initialized */
+
+  cv_mem->cv_MallocDone = TRUE;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define lrw1 (cv_mem->cv_lrw1)
+#define liw1 (cv_mem->cv_liw1)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeReInit
+ *
+ * CVodeReInit re-initializes CVODE's memory for a problem, assuming
+ * it has already been allocated in a prior CVodeInit call.
+ * All problem specification inputs are checked for errors.
+ * If any error occurs during initialization, it is reported to the
+ * file whose file pointer is errfp.
+ * The return value is CV_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int CVodeReInit(void *cvode_mem, realtype t0, N_Vector y0)
+{
+  CVodeMem cv_mem;
+  int i,k;
+ 
+  /* Check cvode_mem */
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeReInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if cvode_mem was allocated */
+
+  if (cv_mem->cv_MallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_MALLOC, "CVODE", "CVodeReInit", MSGCV_NO_MALLOC);
+    return(CV_NO_MALLOC);
+  }
+
+  /* Check for legal input parameters */
+
+  if (y0 == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeReInit", MSGCV_NULL_Y0);
+    return(CV_ILL_INPUT);
+  }
+  
+  /* Copy the input parameters into CVODE state */
+
+  cv_mem->cv_tn = t0;
+  
+  /* Set step parameters */
+
+  cv_mem->cv_q      = 1;
+  cv_mem->cv_L      = 2;
+  cv_mem->cv_qwait  = cv_mem->cv_L;
+  cv_mem->cv_etamax = ETAMX1;
+
+  cv_mem->cv_qu    = 0;
+  cv_mem->cv_hu    = ZERO;
+  cv_mem->cv_tolsf = ONE;
+
+  /* Initialize zn[0] in the history array */
+
+  N_VScale(ONE, y0, cv_mem->cv_zn[0]);
+ 
+  /* Initialize all the counters */
+
+  cv_mem->cv_nst     = 0;
+  cv_mem->cv_nfe     = 0;
+  cv_mem->cv_ncfn    = 0;
+  cv_mem->cv_netf    = 0;
+  cv_mem->cv_nni     = 0;
+  cv_mem->cv_nsetups = 0;
+  cv_mem->cv_nhnil   = 0;
+  cv_mem->cv_nstlp   = 0;
+  cv_mem->cv_nscon   = 0;
+  cv_mem->cv_nge     = 0;
+
+  cv_mem->cv_irfnd   = 0;
+
+  /* Initialize other integrator optional outputs */
+
+  cv_mem->cv_h0u      = ZERO;
+  cv_mem->cv_next_h   = ZERO;
+  cv_mem->cv_next_q   = 0;
+
+  /* Initialize Stablilty Limit Detection data */
+
+  cv_mem->cv_nor = 0;
+  for (i = 1; i <= 5; i++)
+    for (k = 1; k <= 3; k++) 
+      cv_mem->cv_ssdat[i-1][k-1] = ZERO;
+  
+  /* Problem has been successfully re-initialized */
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeSStolerances
+ * CVodeSVtolerances
+ * CVodeWFtolerances
+ *
+ * These functions specify the integration tolerances. One of them
+ * MUST be called before the first call to CVode.
+ *
+ * CVodeSStolerances specifies scalar relative and absolute tolerances.
+ * CVodeSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component).
+ * CVodeWFtolerances specifies a user-provides function (of type CVEwtFn)
+ *   which will be called to set the error weight vector.
+ */
+
+int CVodeSStolerances(void *cvode_mem, realtype reltol, realtype abstol)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSStolerances", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_MallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_MALLOC, "CVODE", "CVodeSStolerances", MSGCV_NO_MALLOC);
+    return(CV_NO_MALLOC);
+  }
+
+  /* Check inputs */
+
+  if (reltol < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSStolerances", MSGCV_BAD_RELTOL);
+    return(CV_ILL_INPUT);
+  }
+
+  if (abstol < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSStolerances", MSGCV_BAD_ABSTOL);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  
+  cv_mem->cv_reltol = reltol;
+  cv_mem->cv_Sabstol = abstol;
+
+  cv_mem->cv_itol = CV_SS;
+
+  cv_mem->cv_user_efun = FALSE;
+  cv_mem->cv_efun = cvEwtSet;
+  cv_mem->cv_e_data = NULL; /* will be set to cvode_mem in InitialSetup */
+
+  return(CV_SUCCESS);
+}
+
+
+int CVodeSVtolerances(void *cvode_mem, realtype reltol, N_Vector abstol)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSVtolerances", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_MallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_MALLOC, "CVODE", "CVodeSVtolerances", MSGCV_NO_MALLOC);
+    return(CV_NO_MALLOC);
+  }
+
+  /* Check inputs */
+
+  if (reltol < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSVtolerances", MSGCV_BAD_RELTOL);
+    return(CV_ILL_INPUT);
+  }
+
+  if (N_VMin(abstol) < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSVtolerances", MSGCV_BAD_ABSTOL);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  
+  if ( !(cv_mem->cv_VabstolMallocDone) ) {
+    cv_mem->cv_Vabstol = N_VClone(cv_mem->cv_ewt);
+    lrw += lrw1;
+    liw += liw1;
+    cv_mem->cv_VabstolMallocDone = TRUE;
+  }
+
+  cv_mem->cv_reltol = reltol;
+  N_VScale(ONE, abstol, cv_mem->cv_Vabstol);
+
+  cv_mem->cv_itol = CV_SV;
+
+  cv_mem->cv_user_efun = FALSE;
+  cv_mem->cv_efun = cvEwtSet;
+  cv_mem->cv_e_data = NULL; /* will be set to cvode_mem in InitialSetup */
+
+  return(CV_SUCCESS);
+}
+
+
+int CVodeWFtolerances(void *cvode_mem, CVEwtFn efun)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeWFtolerances", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_MallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_MALLOC, "CVODE", "CVodeWFtolerances", MSGCV_NO_MALLOC);
+    return(CV_NO_MALLOC);
+  }
+
+  cv_mem->cv_itol = CV_WF;
+
+  cv_mem->cv_user_efun = TRUE;
+  cv_mem->cv_efun = efun;
+  cv_mem->cv_e_data = NULL; /* will be set to user_data in InitialSetup */
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define gfun    (cv_mem->cv_gfun)
+#define glo     (cv_mem->cv_glo)
+#define ghi     (cv_mem->cv_ghi)
+#define grout   (cv_mem->cv_grout)
+#define iroots  (cv_mem->cv_iroots)
+#define rootdir (cv_mem->cv_rootdir)
+#define gactive (cv_mem->cv_gactive)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeRootInit
+ *
+ * CVodeRootInit initializes a rootfinding problem to be solved
+ * during the integration of the ODE system.  It loads the root
+ * function pointer and the number of root functions, and allocates
+ * workspace memory.  The return value is CV_SUCCESS = 0 if no errors
+ * occurred, or a negative value otherwise.
+ */
+
+int CVodeRootInit(void *cvode_mem, int nrtfn, CVRootFn g)
+{
+  CVodeMem cv_mem;
+  int i, nrt;
+
+  /* Check cvode_mem pointer */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeRootInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  nrt = (nrtfn < 0) ? 0 : nrtfn;
+
+  /* If rerunning CVodeRootInit() with a different number of root
+     functions (changing number of gfun components), then free
+     currently held memory resources */
+  if ((nrt != cv_mem->cv_nrtfn) && (cv_mem->cv_nrtfn > 0)) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); rootdir = NULL;
+    free(gactive); gactive = NULL;
+
+    lrw -= 3 * (cv_mem->cv_nrtfn);
+    liw -= 3 * (cv_mem->cv_nrtfn);
+  }
+
+  /* If CVodeRootInit() was called with nrtfn == 0, then set cv_nrtfn to
+     zero and cv_gfun to NULL before returning */
+  if (nrt == 0) {
+    cv_mem->cv_nrtfn = nrt;
+    gfun = NULL;
+    return(CV_SUCCESS);
+  }
+
+  /* If rerunning CVodeRootInit() with the same number of root functions
+     (not changing number of gfun components), then check if the root
+     function argument has changed */
+  /* If g != NULL then return as currently reserved memory resources
+     will suffice */
+  if (nrt == cv_mem->cv_nrtfn) {
+    if (g != gfun) {
+      if (g == NULL) {
+        free(glo); glo = NULL;
+        free(ghi); ghi = NULL;
+        free(grout); grout = NULL;
+        free(iroots); iroots = NULL;
+        free(rootdir); rootdir = NULL;
+        free(gactive); gactive = NULL;
+
+        lrw -= 3*nrt;
+        liw -= 3*nrt;
+
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeRootInit", MSGCV_NULL_G);
+        return(CV_ILL_INPUT);
+      }
+      else {
+        gfun = g;
+        return(CV_SUCCESS);
+      }
+    }
+    else return(CV_SUCCESS);
+  }
+
+  /* Set variable values in CVode memory block */
+  cv_mem->cv_nrtfn = nrt;
+  if (g == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeRootInit", MSGCV_NULL_G);
+    return(CV_ILL_INPUT);
+  }
+  else gfun = g;
+
+  /* Allocate necessary memory and return */
+  glo = NULL;
+  glo = (realtype *) malloc(nrt*sizeof(realtype));
+  if (glo == NULL) {
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODE", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  ghi = NULL;
+  ghi = (realtype *) malloc(nrt*sizeof(realtype));
+  if (ghi == NULL) {
+    free(glo); glo = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODE", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  grout = NULL;
+  grout = (realtype *) malloc(nrt*sizeof(realtype));
+  if (grout == NULL) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODE", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  iroots = NULL;
+  iroots = (int *) malloc(nrt*sizeof(int));
+  if (iroots == NULL) {
+    free(glo); glo = NULL; 
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODE", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  rootdir = NULL;
+  rootdir = (int *) malloc(nrt*sizeof(int));
+  if (rootdir == NULL) {
+    free(glo); glo = NULL; 
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODE", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  gactive = NULL;
+  gactive = (booleantype *) malloc(nrt*sizeof(booleantype));
+  if (gactive == NULL) {
+    free(glo); glo = NULL; 
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); rootdir = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  /* Set default values for rootdir (both directions) */
+  for(i=0; i<nrt; i++) rootdir[i] = 0;
+
+  /* Set default values for gactive (all active) */
+  for(i=0; i<nrt; i++) gactive[i] = TRUE;
+
+  lrw += 3*nrt;
+  liw += 3*nrt;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * Readibility Constants
+ * =================================================================
+ */
+
+#define f              (cv_mem->cv_f)      
+#define user_data      (cv_mem->cv_user_data) 
+#define efun           (cv_mem->cv_efun)
+#define e_data         (cv_mem->cv_e_data) 
+#define qmax           (cv_mem->cv_qmax)
+#define mxstep         (cv_mem->cv_mxstep)
+#define mxhnil         (cv_mem->cv_mxhnil)
+#define sldeton        (cv_mem->cv_sldeton)
+#define hin            (cv_mem->cv_hin)
+#define hmin           (cv_mem->cv_hmin)
+#define hmax_inv       (cv_mem->cv_hmax_inv)
+#define tstop          (cv_mem->cv_tstop)
+#define tstopset       (cv_mem->cv_tstopset)
+#define maxnef         (cv_mem->cv_maxnef)
+#define maxncf         (cv_mem->cv_maxncf)
+#define maxcor         (cv_mem->cv_maxcor)
+#define nlscoef        (cv_mem->cv_nlscoef)
+#define itol           (cv_mem->cv_itol)         
+#define reltol         (cv_mem->cv_reltol)       
+#define Sabstol        (cv_mem->cv_Sabstol)
+#define Vabstol        (cv_mem->cv_Vabstol)
+
+#define uround         (cv_mem->cv_uround)  
+#define zn             (cv_mem->cv_zn) 
+#define ewt            (cv_mem->cv_ewt)  
+#define y              (cv_mem->cv_y)
+#define acor           (cv_mem->cv_acor)
+#define tempv          (cv_mem->cv_tempv)
+#define ftemp          (cv_mem->cv_ftemp) 
+#define q              (cv_mem->cv_q)
+#define qprime         (cv_mem->cv_qprime)
+#define next_q         (cv_mem->cv_next_q)
+#define qwait          (cv_mem->cv_qwait)
+#define L              (cv_mem->cv_L)
+#define h              (cv_mem->cv_h)
+#define hprime         (cv_mem->cv_hprime)
+#define next_h         (cv_mem->cv_next_h)
+#define eta            (cv_mem->cv_eta) 
+#define etaqm1         (cv_mem->cv_etaqm1) 
+#define etaq           (cv_mem->cv_etaq) 
+#define etaqp1         (cv_mem->cv_etaqp1) 
+#define nscon          (cv_mem->cv_nscon)
+#define hscale         (cv_mem->cv_hscale)
+#define tn             (cv_mem->cv_tn)
+#define tau            (cv_mem->cv_tau)
+#define tq             (cv_mem->cv_tq)
+#define l              (cv_mem->cv_l)
+#define rl1            (cv_mem->cv_rl1)
+#define gamma          (cv_mem->cv_gamma) 
+#define gammap         (cv_mem->cv_gammap) 
+#define gamrat         (cv_mem->cv_gamrat)
+#define crate          (cv_mem->cv_crate)
+#define acnrm          (cv_mem->cv_acnrm)
+#define mnewt          (cv_mem->cv_mnewt)
+#define etamax         (cv_mem->cv_etamax)
+#define nst            (cv_mem->cv_nst)
+#define nfe            (cv_mem->cv_nfe)
+#define ncfn           (cv_mem->cv_ncfn)
+#define netf           (cv_mem->cv_netf)
+#define nni            (cv_mem->cv_nni)
+#define nsetups        (cv_mem->cv_nsetups)
+#define nhnil          (cv_mem->cv_nhnil)
+#define linit          (cv_mem->cv_linit)
+#define lsetup         (cv_mem->cv_lsetup)
+#define lsolve         (cv_mem->cv_lsolve) 
+#define lfree          (cv_mem->cv_lfree) 
+#define lmem           (cv_mem->cv_lmem) 
+#define qu             (cv_mem->cv_qu)          
+#define nstlp          (cv_mem->cv_nstlp)  
+#define h0u            (cv_mem->cv_h0u)
+#define hu             (cv_mem->cv_hu)         
+#define saved_tq5      (cv_mem->cv_saved_tq5)  
+#define indx_acor      (cv_mem->cv_indx_acor)
+#define jcur           (cv_mem->cv_jcur)         
+#define tolsf          (cv_mem->cv_tolsf)      
+#define setupNonNull   (cv_mem->cv_setupNonNull) 
+#define nor            (cv_mem->cv_nor)
+#define ssdat          (cv_mem->cv_ssdat)
+
+#define nrtfn          (cv_mem->cv_nrtfn)
+#define tlo            (cv_mem->cv_tlo)
+#define thi            (cv_mem->cv_thi)
+#define tretlast       (cv_mem->cv_tretlast)
+#define toutc          (cv_mem->cv_toutc)
+#define trout          (cv_mem->cv_trout)
+#define ttol           (cv_mem->cv_ttol)
+#define taskc          (cv_mem->cv_taskc)
+#define irfnd          (cv_mem->cv_irfnd)
+#define nge            (cv_mem->cv_nge)
+
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVode
+ *
+ * This routine is the main driver of the CVODE package. 
+ *
+ * It integrates over a time interval defined by the user, by calling
+ * cvStep to do internal time steps.
+ *
+ * The first time that CVode is called for a successfully initialized
+ * problem, it computes a tentative initial step size h.
+ *
+ * CVode supports two modes, specified by itask: CV_NORMAL, CV_ONE_STEP.
+ * In the CV_NORMAL mode, the solver steps until it reaches or passes tout
+ * and then interpolates to obtain y(tout).
+ * In the CV_ONE_STEP mode, it takes one internal step and returns.
+ */
+
+int CVode(void *cvode_mem, realtype tout, N_Vector yout, 
+          realtype *tret, int itask)
+{
+  CVodeMem cv_mem;
+  long int nstloc;
+  int retval, hflag, kflag, istate, ir, ier, irfndp;
+  int ewtsetOK;
+  realtype troundoff, tout_hin, rh, nrm;
+  booleantype inactive_roots;
+
+  /*
+   * -------------------------------------
+   * 1. Check and process inputs
+   * -------------------------------------
+   */
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVode", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if cvode_mem was allocated */
+  if (cv_mem->cv_MallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_MALLOC, "CVODE", "CVode", MSGCV_NO_MALLOC);
+    return(CV_NO_MALLOC);
+  }
+  
+  /* Check for yout != NULL */
+  if ((y = yout) == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", MSGCV_YOUT_NULL);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Check for tret != NULL */
+  if (tret == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", MSGCV_TRET_NULL);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Check for valid itask */
+  if ( (itask != CV_NORMAL) && (itask != CV_ONE_STEP) ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", MSGCV_BAD_ITASK);
+    return(CV_ILL_INPUT);
+  }
+
+  if (itask == CV_NORMAL) toutc = tout;
+  taskc = itask;
+
+  /*
+   * ----------------------------------------
+   * 2. Initializations performed only at
+   *    the first step (nst=0):
+   *    - initial setup
+   *    - initialize Nordsieck history array
+   *    - compute initial step size
+   *    - check for approach to tstop
+   *    - check for approach to a root
+   * ----------------------------------------
+   */
+
+  if (nst == 0) {
+
+    tretlast = *tret = tn;
+
+    ier = cvInitialSetup(cv_mem);
+    if (ier!= CV_SUCCESS) return(ier);
+    
+    /* Call f at (t0,y0), set zn[1] = y'(t0), 
+       set initial h (from H0 or cvHin), and scale zn[1] by h.
+       Also check for zeros of root function g at and near t0.    */
+    
+    retval = f(tn, zn[0], zn[1], user_data); 
+    nfe++;
+    if (retval < 0) {
+      cvProcessError(cv_mem, CV_RHSFUNC_FAIL, "CVODE", "CVode", MSGCV_RHSFUNC_FAILED, tn);
+      return(CV_RHSFUNC_FAIL);
+    }
+    if (retval > 0) {
+      cvProcessError(cv_mem, CV_FIRST_RHSFUNC_ERR, "CVODE", "CVode", MSGCV_RHSFUNC_FIRST);
+      return(CV_FIRST_RHSFUNC_ERR);
+    }
+
+    /* Test input tstop for legality. */
+
+    if (tstopset) {
+      if ( (tstop - tn)*(tout - tn) <= ZERO ) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", MSGCV_BAD_TSTOP, tstop, tn);
+        return(CV_ILL_INPUT);
+      }
+     }
+
+    /* Set initial h (from H0 or cvHin). */
+
+    h = hin;
+    if ( (h != ZERO) && ((tout-tn)*h < ZERO) ) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", MSGCV_BAD_H0);
+      return(CV_ILL_INPUT);
+    }
+    if (h == ZERO) {
+      tout_hin = tout;
+      if ( tstopset && (tout-tn)*(tout-tstop) > ZERO ) tout_hin = tstop; 
+      hflag = cvHin(cv_mem, tout_hin);
+      if (hflag != CV_SUCCESS) {
+        istate = cvHandleFailure(cv_mem, hflag);
+        return(istate);
+      }
+    }
+    rh = SUNRabs(h)*hmax_inv;
+    if (rh > ONE) h /= rh;
+    if (SUNRabs(h) < hmin) h *= hmin/SUNRabs(h);
+
+    /* Check for approach to tstop */
+
+    if (tstopset) {
+      if ( (tn + h - tstop)*h > ZERO ) 
+        h = (tstop - tn)*(ONE-FOUR*uround);
+    }
+
+    /* Scale zn[1] by h.*/
+
+    hscale = h; 
+    h0u    = h;
+    hprime = h;
+
+    N_VScale(h, zn[1], zn[1]);
+
+    /* Check for zeros of root function g at and near t0. */
+
+    if (nrtfn > 0) {
+
+      retval = cvRcheck1(cv_mem);
+
+      if (retval == CV_RTFUNC_FAIL) {
+        cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODE", "cvRcheck1", MSGCV_RTFUNC_FAILED, tn);
+        return(CV_RTFUNC_FAIL);
+      }
+
+    }
+
+  } /* end of first call block */
+
+  /*
+   * ------------------------------------------------------
+   * 3. At following steps, perform stop tests:
+   *    - check for root in last step
+   *    - check if we passed tstop
+   *    - check if we passed tout (NORMAL mode)
+   *    - check if current tn was returned (ONE_STEP mode)
+   *    - check if we are close to tstop
+   *      (adjust step size if needed)
+   * -------------------------------------------------------
+   */
+
+  if (nst > 0) {
+
+    /* Estimate an infinitesimal time interval to be used as
+       a roundoff for time quantities (based on current time 
+       and step size) */
+    troundoff = FUZZ_FACTOR*uround*(SUNRabs(tn) + SUNRabs(h));
+
+    /* First, check for a root in the last step taken, other than the
+       last root found, if any.  If itask = CV_ONE_STEP and y(tn) was not
+       returned because of an intervening root, return y(tn) now.     */
+    if (nrtfn > 0) {
+
+      irfndp = irfnd;
+      
+      retval = cvRcheck2(cv_mem);
+
+      if (retval == CLOSERT) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "cvRcheck2", MSGCV_CLOSE_ROOTS, tlo);
+        return(CV_ILL_INPUT);
+      } else if (retval == CV_RTFUNC_FAIL) {
+        cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODE", "cvRcheck2", MSGCV_RTFUNC_FAILED, tlo);
+        return(CV_RTFUNC_FAIL);
+      } else if (retval == RTFOUND) {
+        tretlast = *tret = tlo;
+        return(CV_ROOT_RETURN);
+      }
+
+      /* If tn is distinct from tretlast (within roundoff),
+         check remaining interval for roots */
+      if ( SUNRabs(tn - tretlast) > troundoff ) {
+
+        retval = cvRcheck3(cv_mem);
+
+        if (retval == CV_SUCCESS) {     /* no root found */
+          irfnd = 0;
+          if ((irfndp == 1) && (itask == CV_ONE_STEP)) {
+            tretlast = *tret = tn;
+            N_VScale(ONE, zn[0], yout);
+            return(CV_SUCCESS);
+          }
+        } else if (retval == RTFOUND) {  /* a new root was found */
+          irfnd = 1;
+          tretlast = *tret = tlo;
+          return(CV_ROOT_RETURN);
+        } else if (retval == CV_RTFUNC_FAIL) {  /* g failed */
+          cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODE", "cvRcheck3", MSGCV_RTFUNC_FAILED, tlo);
+          return(CV_RTFUNC_FAIL);
+        }
+
+      }
+
+    } /* end of root stop check */
+
+    /* In CV_NORMAL mode, test if tout was reached */
+    if ( (itask == CV_NORMAL) && ((tn-tout)*h >= ZERO) ) {
+      tretlast = *tret = tout;
+      ier =  CVodeGetDky(cv_mem, tout, 0, yout);
+      if (ier != CV_SUCCESS) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", MSGCV_BAD_TOUT, tout);
+        return(CV_ILL_INPUT);
+      }
+      return(CV_SUCCESS);
+    }
+
+    /* In CV_ONE_STEP mode, test if tn was returned */
+    if ( itask == CV_ONE_STEP && SUNRabs(tn - tretlast) > troundoff ) {
+      tretlast = *tret = tn;
+      N_VScale(ONE, zn[0], yout);
+      return(CV_SUCCESS);
+    }
+
+    /* Test for tn at tstop or near tstop */
+    if ( tstopset ) {
+
+      if ( SUNRabs(tn - tstop) <= troundoff) {
+        ier =  CVodeGetDky(cv_mem, tstop, 0, yout);
+        if (ier != CV_SUCCESS) {
+          cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", MSGCV_BAD_TSTOP, tstop, tn);
+          return(CV_ILL_INPUT);
+        }
+        tretlast = *tret = tstop;
+        tstopset = FALSE;
+        return(CV_TSTOP_RETURN);
+      }
+      
+      /* If next step would overtake tstop, adjust stepsize */
+      if ( (tn + hprime - tstop)*h > ZERO ) {
+        hprime = (tstop - tn)*(ONE-FOUR*uround);
+        eta = hprime/h;
+      }
+
+    }
+    
+  } /* end stopping tests block */  
+
+  /*
+   * --------------------------------------------------
+   * 4. Looping point for internal steps
+   *
+   *    4.1. check for errors (too many steps, too much
+   *         accuracy requested, step size too small)
+   *    4.2. take a new step (call cvStep)
+   *    4.3. stop on error 
+   *    4.4. perform stop tests:
+   *         - check for root in last step
+   *         - check if tout was passed
+   *         - check if close to tstop
+   *         - check if in ONE_STEP mode (must return)
+   * --------------------------------------------------
+   */
+
+  nstloc = 0;
+  loop {
+   
+    next_h = h;
+    next_q = q;
+    
+    /* Reset and check ewt */
+    if (nst > 0) {
+
+      ewtsetOK = efun(zn[0], ewt, e_data);
+
+      if (ewtsetOK != 0) {
+
+        if (itol == CV_WF) 
+          cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", MSGCV_EWT_NOW_FAIL, tn);
+        else 
+          cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", MSGCV_EWT_NOW_BAD, tn);
+	
+        istate = CV_ILL_INPUT;
+        tretlast = *tret = tn;
+        N_VScale(ONE, zn[0], yout);
+        break;
+
+      }
+    }
+    
+    /* Check for too many steps */
+    if ( (mxstep>0) && (nstloc >= mxstep) ) {
+      cvProcessError(cv_mem, CV_TOO_MUCH_WORK, "CVODE", "CVode", MSGCV_MAX_STEPS, tn);
+      istate = CV_TOO_MUCH_WORK;
+      tretlast = *tret = tn;
+      N_VScale(ONE, zn[0], yout);
+      break;
+    }
+
+    /* Check for too much accuracy requested */
+    nrm = N_VWrmsNorm(zn[0], ewt);
+    tolsf = uround * nrm;
+    if (tolsf > ONE) {
+      cvProcessError(cv_mem, CV_TOO_MUCH_ACC, "CVODE", "CVode", MSGCV_TOO_MUCH_ACC, tn);
+      istate = CV_TOO_MUCH_ACC;
+      tretlast = *tret = tn;
+      N_VScale(ONE, zn[0], yout);
+      tolsf *= TWO;
+      break;
+    } else {
+      tolsf = ONE;
+    }
+
+    /* Check for h below roundoff level in tn */
+    if (tn + h == tn) {
+      nhnil++;
+      if (nhnil <= mxhnil) 
+        cvProcessError(cv_mem, CV_WARNING, "CVODE", "CVode", MSGCV_HNIL, tn, h);
+      if (nhnil == mxhnil) 
+        cvProcessError(cv_mem, CV_WARNING, "CVODE", "CVode", MSGCV_HNIL_DONE);
+    }
+
+    /* Call cvStep to take a step */
+    kflag = cvStep(cv_mem);
+
+    /* Process failed step cases, and exit loop */
+    if (kflag != CV_SUCCESS) {
+      istate = cvHandleFailure(cv_mem, kflag);
+      tretlast = *tret = tn;
+      N_VScale(ONE, zn[0], yout);
+      break;
+    }
+    
+    nstloc++;
+
+    /* Check for root in last step taken. */
+    if (nrtfn > 0) {
+
+      retval = cvRcheck3(cv_mem);
+
+      if (retval == RTFOUND) {  /* A new root was found */
+        irfnd = 1;
+        istate = CV_ROOT_RETURN;
+        tretlast = *tret = tlo;
+        break;
+      } else if (retval == CV_RTFUNC_FAIL) { /* g failed */
+        cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODE", "cvRcheck3", MSGCV_RTFUNC_FAILED, tlo);
+        istate = CV_RTFUNC_FAIL;
+        break;
+      }
+
+      /* If we are at the end of the first step and we still have
+       * some event functions that are inactive, issue a warning
+       * as this may indicate a user error in the implementation
+       * of the root function. */
+
+      if (nst==1) {
+        inactive_roots = FALSE;
+        for (ir=0; ir<nrtfn; ir++) { 
+          if (!gactive[ir]) {
+            inactive_roots = TRUE;
+            break;
+          }
+        }
+        if ((cv_mem->cv_mxgnull > 0) && inactive_roots) {
+          cvProcessError(cv_mem, CV_WARNING, "CVODES", "CVode", MSGCV_INACTIVE_ROOTS);
+        }
+      }
+
+    }
+
+    /* In NORMAL mode, check if tout reached */
+    if ( (itask == CV_NORMAL) &&  (tn-tout)*h >= ZERO ) {
+      istate = CV_SUCCESS;
+      tretlast = *tret = tout;
+      (void) CVodeGetDky(cv_mem, tout, 0, yout);
+      next_q = qprime;
+      next_h = hprime;
+      break;
+    }
+
+    /* Check if tn is at tstop or near tstop */
+    if ( tstopset ) {
+
+      troundoff = FUZZ_FACTOR*uround*(SUNRabs(tn) + SUNRabs(h));
+      if ( SUNRabs(tn - tstop) <= troundoff) {
+        (void) CVodeGetDky(cv_mem, tstop, 0, yout);
+        tretlast = *tret = tstop;
+        tstopset = FALSE;
+        istate = CV_TSTOP_RETURN;
+        break;
+      }
+
+      if ( (tn + hprime - tstop)*h > ZERO ) {
+        hprime = (tstop - tn)*(ONE-FOUR*uround);
+        eta = hprime/h;
+      }
+
+    }
+
+    /* In ONE_STEP mode, copy y and exit loop */
+    if (itask == CV_ONE_STEP) {
+      istate = CV_SUCCESS;
+      tretlast = *tret = tn;
+      N_VScale(ONE, zn[0], yout);
+      next_q = qprime;
+      next_h = hprime;
+      break;
+    }
+
+  } /* end looping for internal steps */
+
+  return(istate);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeGetDky
+ *
+ * This routine computes the k-th derivative of the interpolating
+ * polynomial at the time t and stores the result in the vector dky.
+ * The formula is:
+ *         q 
+ *  dky = SUM c(j,k) * (t - tn)^(j-k) * h^(-j) * zn[j] , 
+ *        j=k 
+ * where c(j,k) = j*(j-1)*...*(j-k+1), q is the current order, and
+ * zn[j] is the j-th column of the Nordsieck history array.
+ *
+ * This function is called by CVode with k = 0 and t = tout, but
+ * may also be called directly by the user.
+ */
+
+int CVodeGetDky(void *cvode_mem, realtype t, int k, N_Vector dky)
+{
+  realtype s, c, r;
+  realtype tfuzz, tp, tn1;
+  int i, j;
+  CVodeMem cv_mem;
+  
+  /* Check all inputs for legality */
+ 
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetDky", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (dky == NULL) {
+    cvProcessError(cv_mem, CV_BAD_DKY, "CVODE", "CVodeGetDky", MSGCV_NULL_DKY);
+    return(CV_BAD_DKY);
+  }
+
+  if ((k < 0) || (k > q)) {
+    cvProcessError(cv_mem, CV_BAD_K, "CVODE", "CVodeGetDky", MSGCV_BAD_K);
+    return(CV_BAD_K);
+  }
+  
+  /* Allow for some slack */
+  tfuzz = FUZZ_FACTOR * uround * (SUNRabs(tn) + SUNRabs(hu));
+  if (hu < ZERO) tfuzz = -tfuzz;
+  tp = tn - hu - tfuzz;
+  tn1 = tn + tfuzz;
+  if ((t-tp)*(t-tn1) > ZERO) {
+    cvProcessError(cv_mem, CV_BAD_T, "CVODE", "CVodeGetDky", MSGCV_BAD_T, t, tn-hu, tn);
+    return(CV_BAD_T);
+  }
+
+  /* Sum the differentiated interpolating polynomial */
+
+  s = (t - tn) / h;
+  for (j=q; j >= k; j--) {
+    c = ONE;
+    for (i=j; i >= j-k+1; i--) c *= i;
+    if (j == q) {
+      N_VScale(c, zn[q], dky);
+    } else {
+      N_VLinearSum(c, zn[j], s, dky, dky);
+    }
+  }
+  if (k == 0) return(CV_SUCCESS);
+  r = SUNRpowerI(h,-k);
+  N_VScale(r, dky, dky);
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeFree
+ *
+ * This routine frees the problem memory allocated by CVodeInit.
+ * Such memory includes all the vectors allocated by cvAllocVectors,
+ * and the memory lmem for the linear solver (deallocated by a call
+ * to lfree).
+ */
+
+void CVodeFree(void **cvode_mem)
+{
+  CVodeMem cv_mem;
+
+  if (*cvode_mem == NULL) return;
+
+  cv_mem = (CVodeMem) (*cvode_mem);
+  
+  cvFreeVectors(cv_mem);
+
+  if (iter == CV_NEWTON && lfree != NULL) lfree(cv_mem);
+
+  if (nrtfn > 0) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); rootdir = NULL;
+    free(gactive); gactive = NULL;
+  }
+
+  free(*cvode_mem);
+  *cvode_mem = NULL;
+}
+
+/* 
+ * =================================================================
+ *  Private Functions Implementation
+ * =================================================================
+ */
+
+/*
+ * cvCheckNvector
+ * This routine checks if all required vector operations are present.
+ * If any of them is missing it returns FALSE.
+ */
+
+static booleantype cvCheckNvector(N_Vector tmpl)
+{
+  if((tmpl->ops->nvclone     == NULL) ||
+     (tmpl->ops->nvdestroy   == NULL) ||
+     (tmpl->ops->nvlinearsum == NULL) ||
+     (tmpl->ops->nvconst     == NULL) ||
+     (tmpl->ops->nvprod      == NULL) ||
+     (tmpl->ops->nvdiv       == NULL) ||
+     (tmpl->ops->nvscale     == NULL) ||
+     (tmpl->ops->nvabs       == NULL) ||
+     (tmpl->ops->nvinv       == NULL) ||
+     (tmpl->ops->nvaddconst  == NULL) ||
+     (tmpl->ops->nvmaxnorm   == NULL) ||
+     (tmpl->ops->nvwrmsnorm  == NULL) ||
+     (tmpl->ops->nvmin       == NULL))
+    return(FALSE);
+  else
+    return(TRUE);
+}
+
+/*
+ * cvAllocVectors
+ *
+ * This routine allocates the CVODE vectors ewt, acor, tempv, ftemp, and
+ * zn[0], ..., zn[maxord].
+ * If all memory allocations are successful, cvAllocVectors returns TRUE. 
+ * Otherwise all allocated memory is freed and cvAllocVectors returns FALSE.
+ * This routine also sets the optional outputs lrw and liw, which are
+ * (respectively) the lengths of the real and integer work spaces
+ * allocated here.
+ */
+
+static booleantype cvAllocVectors(CVodeMem cv_mem, N_Vector tmpl)
+{
+  int i, j;
+
+  /* Allocate ewt, acor, tempv, ftemp */
+  
+  ewt = N_VClone(tmpl);
+  if (ewt == NULL) return(FALSE);
+
+  acor = N_VClone(tmpl);
+  if (acor == NULL) {
+    N_VDestroy(ewt);
+    return(FALSE);
+  }
+
+  tempv = N_VClone(tmpl);
+  if (tempv == NULL) {
+    N_VDestroy(ewt);
+    N_VDestroy(acor);
+    return(FALSE);
+  }
+
+  ftemp = N_VClone(tmpl);
+  if (ftemp == NULL) {
+    N_VDestroy(tempv);
+    N_VDestroy(ewt);
+    N_VDestroy(acor);
+    return(FALSE);
+  }
+
+  /* Allocate zn[0] ... zn[qmax] */
+
+  for (j=0; j <= qmax; j++) {
+    zn[j] = N_VClone(tmpl);
+    if (zn[j] == NULL) {
+      N_VDestroy(ewt);
+      N_VDestroy(acor);
+      N_VDestroy(tempv);
+      N_VDestroy(ftemp);
+      for (i=0; i < j; i++) N_VDestroy(zn[i]);
+      return(FALSE);
+    }
+  }
+
+  /* Update solver workspace lengths  */
+  lrw += (qmax + 5)*lrw1;
+  liw += (qmax + 5)*liw1;
+
+  /* Store the value of qmax used here */
+  cv_mem->cv_qmax_alloc = qmax;
+
+  return(TRUE);
+}
+
+/*  
+ * cvFreeVectors
+ *
+ * This routine frees the CVODE vectors allocated in cvAllocVectors.
+ */
+
+static void cvFreeVectors(CVodeMem cv_mem)
+{
+  int j, maxord;
+  
+  maxord = cv_mem->cv_qmax_alloc;
+
+  N_VDestroy(ewt);
+  N_VDestroy(acor);
+  N_VDestroy(tempv);
+  N_VDestroy(ftemp);
+  for (j=0; j <= maxord; j++) N_VDestroy(zn[j]);
+
+  lrw -= (maxord + 5)*lrw1;
+  liw -= (maxord + 5)*liw1;
+
+  if (cv_mem->cv_VabstolMallocDone) {
+    N_VDestroy(Vabstol);
+    lrw -= lrw1;
+    liw -= liw1;
+  }
+}
+
+/*  
+ * cvInitialSetup
+ *
+ * This routine performs input consistency checks at the first step.
+ * If needed, it also checks the linear solver module and calls the
+ * linear solver initialization routine.
+ */
+
+static int cvInitialSetup(CVodeMem cv_mem)
+{
+  int ier;
+
+  /* Did the user specify tolerances? */
+  if (itol == CV_NN) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "cvInitialSetup", MSGCV_NO_TOLS);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Set data for efun */
+  if (cv_mem->cv_user_efun) e_data = user_data;
+  else                      e_data = cv_mem;
+
+  /* Load initial error weights */
+  ier = efun(zn[0], ewt, e_data);
+  if (ier != 0) {
+    if (itol == CV_WF) 
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "cvInitialSetup", MSGCV_EWT_FAIL);
+    else
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "cvInitialSetup", MSGCV_BAD_EWT);
+    return(CV_ILL_INPUT);
+  }
+  
+  /* Check if lsolve function exists (if needed) and call linit function (if it exists) */
+  if (iter == CV_NEWTON) {
+    if (lsolve == NULL) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "cvInitialSetup", MSGCV_LSOLVE_NULL);
+      return(CV_ILL_INPUT);
+    }
+    if (linit != NULL) {
+      ier = linit(cv_mem);
+      if (ier != 0) {
+        cvProcessError(cv_mem, CV_LINIT_FAIL, "CVODE", "cvInitialSetup", MSGCV_LINIT_FAIL);
+        return(CV_LINIT_FAIL);
+      }
+    }
+  }
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * PRIVATE FUNCTIONS FOR CVODE
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvHin
+ *
+ * This routine computes a tentative initial step size h0. 
+ * If tout is too close to tn (= t0), then cvHin returns CV_TOO_CLOSE
+ * and h remains uninitialized. Note that here tout is either the value
+ * passed to CVode at the first call or the value of tstop (if tstop is 
+ * enabled and it is closer to t0=tn than tout).
+ * If the RHS function fails unrecoverably, cvHin returns CV_RHSFUNC_FAIL.
+ * If the RHS function fails recoverably too many times and recovery is
+ * not possible, cvHin returns CV_REPTD_RHSFUNC_ERR.
+ * Otherwise, cvHin sets h to the chosen value h0 and returns CV_SUCCESS.
+ *
+ * The algorithm used seeks to find h0 as a solution of
+ *       (WRMS norm of (h0^2 ydd / 2)) = 1, 
+ * where ydd = estimated second derivative of y.
+ *
+ * We start with an initial estimate equal to the geometric mean of the
+ * lower and upper bounds on the step size.
+ *
+ * Loop up to MAX_ITERS times to find h0.
+ * Stop if new and previous values differ by a factor < 2.
+ * Stop if hnew/hg > 2 after one iteration, as this probably means
+ * that the ydd value is bad because of cancellation error.        
+ *  
+ * For each new proposed hg, we allow MAX_ITERS attempts to
+ * resolve a possible recoverable failure from f() by reducing
+ * the proposed stepsize by a factor of 0.2. If a legal stepsize
+ * still cannot be found, fall back on a previous value if possible,
+ * or else return CV_REPTD_RHSFUNC_ERR.
+ *
+ * Finally, we apply a bias (0.5) and verify that h0 is within bounds.
+ */
+
+static int cvHin(CVodeMem cv_mem, realtype tout)
+{
+  int retval, sign, count1, count2;
+  realtype tdiff, tdist, tround, hlb, hub;
+  realtype hg, hgs, hs, hnew, hrat, h0, yddnrm;
+  booleantype hgOK, hnewOK;
+
+  /* If tout is too close to tn, give up */
+  
+  if ((tdiff = tout-tn) == ZERO) return(CV_TOO_CLOSE);
+  
+  sign = (tdiff > ZERO) ? 1 : -1;
+  tdist = SUNRabs(tdiff);
+  tround = uround * SUNMAX(SUNRabs(tn), SUNRabs(tout));
+
+  if (tdist < TWO*tround) return(CV_TOO_CLOSE);
+  
+  /* 
+     Set lower and upper bounds on h0, and take geometric mean 
+     as first trial value.
+     Exit with this value if the bounds cross each other.
+  */
+
+  hlb = HLB_FACTOR * tround;
+  hub = cvUpperBoundH0(cv_mem, tdist);
+
+  hg  = SUNRsqrt(hlb*hub);
+
+  if (hub < hlb) {
+    if (sign == -1) h = -hg;
+    else            h =  hg;
+    return(CV_SUCCESS);
+  }
+  
+  /* Outer loop */
+
+  hnewOK = FALSE;
+  hs = hg;         /* safeguard against 'uninitialized variable' warning */
+
+  for(count1 = 1; count1 <= MAX_ITERS; count1++) {
+
+    /* Attempts to estimate ydd */
+
+    hgOK = FALSE;
+
+    for (count2 = 1; count2 <= MAX_ITERS; count2++) {
+      hgs = hg*sign;
+      retval = cvYddNorm(cv_mem, hgs, &yddnrm);
+      /* If f() failed unrecoverably, give up */
+      if (retval < 0) return(CV_RHSFUNC_FAIL);
+      /* If successful, we can use ydd */
+      if (retval == CV_SUCCESS) {hgOK = TRUE; break;}
+      /* f() failed recoverably; cut step size and test it again */
+      hg *= POINT2;
+    }
+
+    /* If f() failed recoverably MAX_ITERS times */
+
+    if (!hgOK) {
+      /* Exit if this is the first or second pass. No recovery possible */
+      if (count1 <= 2) return(CV_REPTD_RHSFUNC_ERR);
+      /* We have a fall-back option. The value hs is a previous hnew which
+         passed through f(). Use it and break */
+      hnew = hs;
+      break;
+    }
+
+    /* The proposed step size is feasible. Save it. */
+    hs = hg;
+
+    /* If the stopping criteria was met, or if this is the last pass, stop */
+    if ( (hnewOK) || (count1 == MAX_ITERS))  {hnew = hg; break;}
+
+    /* Propose new step size */
+    hnew = (yddnrm*hub*hub > TWO) ? SUNRsqrt(TWO/yddnrm) : SUNRsqrt(hg*hub);
+    hrat = hnew/hg;
+    
+    /* Accept hnew if it does not differ from hg by more than a factor of 2 */
+    if ((hrat > HALF) && (hrat < TWO)) {
+      hnewOK = TRUE;
+    }
+
+    /* After one pass, if ydd seems to be bad, use fall-back value. */
+    if ((count1 > 1) && (hrat > TWO)) {
+      hnew = hg;
+      hnewOK = TRUE;
+    }
+
+    /* Send this value back through f() */
+    hg = hnew;
+
+  }
+
+  /* Apply bounds, bias factor, and attach sign */
+
+  h0 = H_BIAS*hnew;
+  if (h0 < hlb) h0 = hlb;
+  if (h0 > hub) h0 = hub;
+  if (sign == -1) h0 = -h0;
+  h = h0;
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * cvUpperBoundH0
+ *
+ * This routine sets an upper bound on abs(h0) based on
+ * tdist = tn - t0 and the values of y[i]/y'[i].
+ */
+
+static realtype cvUpperBoundH0(CVodeMem cv_mem, realtype tdist)
+{
+  realtype hub_inv, hub;
+  N_Vector temp1, temp2;
+
+  /* 
+   * Bound based on |y0|/|y0'| -- allow at most an increase of
+   * HUB_FACTOR in y0 (based on a forward Euler step). The weight 
+   * factor is used as a safeguard against zero components in y0. 
+   */
+
+  temp1 = tempv;
+  temp2 = acor;
+
+  N_VAbs(zn[0], temp2);
+  efun(zn[0], temp1, e_data);
+  N_VInv(temp1, temp1);
+  N_VLinearSum(HUB_FACTOR, temp2, ONE, temp1, temp1);
+
+  N_VAbs(zn[1], temp2);
+
+  N_VDiv(temp2, temp1, temp1);
+  hub_inv = N_VMaxNorm(temp1);
+
+  /*
+   * bound based on tdist -- allow at most a step of magnitude
+   * HUB_FACTOR * tdist
+   */
+
+  hub = HUB_FACTOR*tdist;
+
+  /* Use the smaler of the two */
+
+  if (hub*hub_inv > ONE) hub = ONE/hub_inv;
+
+  return(hub);
+}
+
+/*
+ * cvYddNorm
+ *
+ * This routine computes an estimate of the second derivative of y
+ * using a difference quotient, and returns its WRMS norm.
+ */
+
+static int cvYddNorm(CVodeMem cv_mem, realtype hg, realtype *yddnrm)
+{
+  int retval;
+
+  N_VLinearSum(hg, zn[1], ONE, zn[0], y);
+  retval = f(tn+hg, y, tempv, user_data);
+  nfe++;
+  if (retval < 0) return(CV_RHSFUNC_FAIL);
+  if (retval > 0) return(RHSFUNC_RECVR);
+
+  N_VLinearSum(ONE, tempv, -ONE, zn[1], tempv);
+  N_VScale(ONE/hg, tempv, tempv);
+
+  *yddnrm = N_VWrmsNorm(tempv, ewt);
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * cvStep
+ *
+ * This routine performs one internal cvode step, from tn to tn + h.
+ * It calls other routines to do all the work.
+ *
+ * The main operations done here are as follows:
+ * - preliminary adjustments if a new step size was chosen;
+ * - prediction of the Nordsieck history array zn at tn + h;
+ * - setting of multistep method coefficients and test quantities;
+ * - solution of the nonlinear system;
+ * - testing the local error;
+ * - updating zn and other state data if successful;
+ * - resetting stepsize and order for the next step.
+ * - if SLDET is on, check for stability, reduce order if necessary.
+ * On a failure in the nonlinear system solution or error test, the
+ * step may be reattempted, depending on the nature of the failure.
+ */
+
+static int cvStep(CVodeMem cv_mem)
+{
+  realtype saved_t, dsm;
+  int ncf, nef;
+  int nflag, kflag, eflag;
+  
+  saved_t = tn;
+  ncf = nef = 0;
+  nflag = FIRST_CALL;
+
+  if ((nst > 0) && (hprime != h)) cvAdjustParams(cv_mem);
+  
+  /* Looping point for attempts to take a step */
+  loop {  
+
+    cvPredict(cv_mem);  
+    cvSet(cv_mem);
+
+    nflag = cvNls(cv_mem, nflag);
+    kflag = cvHandleNFlag(cv_mem, &nflag, saved_t, &ncf);
+
+    /* Go back in loop if we need to predict again (nflag=PREV_CONV_FAIL)*/
+    if (kflag == PREDICT_AGAIN) continue;
+
+    /* Return if nonlinear solve failed and recovery not possible. */
+    if (kflag != DO_ERROR_TEST) return(kflag);
+
+    /* Perform error test (nflag=CV_SUCCESS) */
+    eflag = cvDoErrorTest(cv_mem, &nflag, saved_t, &nef, &dsm);
+
+    /* Go back in loop if we need to predict again (nflag=PREV_ERR_FAIL) */
+    if (eflag == TRY_AGAIN)  continue;
+
+    /* Return if error test failed and recovery not possible. */
+    if (eflag != CV_SUCCESS) return(eflag);
+
+    /* Error test passed (eflag=CV_SUCCESS), break from loop */
+    break;
+
+  }
+
+  /* Nonlinear system solve and error test were both successful.
+     Update data, and consider change of step and/or order.       */
+
+  cvCompleteStep(cv_mem); 
+
+  cvPrepareNextStep(cv_mem, dsm); 
+
+  /* If Stablilty Limit Detection is turned on, call stability limit
+     detection routine for possible order reduction. */
+
+  if (sldeton) cvBDFStab(cv_mem);
+
+  etamax = (nst <= SMALL_NST) ? ETAMX2 : ETAMX3;
+
+  /*  Finally, we rescale the acor array to be the 
+      estimated local error vector. */
+
+  N_VScale(tq[2], acor, acor);
+  return(CV_SUCCESS);
+      
+}
+
+/*
+ * cvAdjustParams
+ *
+ * This routine is called when a change in step size was decided upon,
+ * and it handles the required adjustments to the history array zn.
+ * If there is to be a change in order, we call cvAdjustOrder and reset
+ * q, L = q+1, and qwait.  Then in any case, we call cvRescale, which
+ * resets h and rescales the Nordsieck array.
+ */
+
+static void cvAdjustParams(CVodeMem cv_mem)
+{
+  if (qprime != q) {
+    cvAdjustOrder(cv_mem, qprime-q);
+    q = qprime;
+    L = q+1;
+    qwait = L;
+  }
+  cvRescale(cv_mem);
+}
+
+/*
+ * cvAdjustOrder
+ *
+ * This routine is a high level routine which handles an order
+ * change by an amount deltaq (= +1 or -1). If a decrease in order
+ * is requested and q==2, then the routine returns immediately.
+ * Otherwise cvAdjustAdams or cvAdjustBDF is called to handle the
+ * order change (depending on the value of lmm).
+ */
+
+static void cvAdjustOrder(CVodeMem cv_mem, int deltaq)
+{
+  if ((q==2) && (deltaq != 1)) return;
+  
+  switch(lmm){
+  case CV_ADAMS: 
+    cvAdjustAdams(cv_mem, deltaq);
+    break;
+  case CV_BDF:   
+    cvAdjustBDF(cv_mem, deltaq);
+    break;
+  }
+}
+
+/*
+ * cvAdjustAdams
+ *
+ * This routine adjusts the history array on a change of order q by
+ * deltaq, in the case that lmm == CV_ADAMS.
+ */
+
+static void cvAdjustAdams(CVodeMem cv_mem, int deltaq)
+{
+  int i, j;
+  realtype xi, hsum;
+
+  /* On an order increase, set new column of zn to zero and return */
+  
+  if (deltaq==1) {
+    N_VConst(ZERO, zn[L]);
+    return;
+  }
+
+  /*
+   * On an order decrease, each zn[j] is adjusted by a multiple of zn[q].
+   * The coeffs. in the adjustment are the coeffs. of the polynomial:
+   *        x
+   * q * INT { u * ( u + xi_1 ) * ... * ( u + xi_{q-2} ) } du 
+   *        0
+   * where xi_j = [t_n - t_(n-j)]/h => xi_0 = 0
+   */
+
+  for (i=0; i <= qmax; i++) l[i] = ZERO;
+  l[1] = ONE;
+  hsum = ZERO;
+  for (j=1; j <= q-2; j++) {
+    hsum += tau[j];
+    xi = hsum / hscale;
+    for (i=j+1; i >= 1; i--) l[i] = l[i]*xi + l[i-1];
+  }
+  
+  for (j=1; j <= q-2; j++) l[j+1] = q * (l[j] / (j+1));
+  
+  for (j=2; j < q; j++)
+    N_VLinearSum(-l[j], zn[q], ONE, zn[j], zn[j]);
+}
+
+/*
+ * cvAdjustBDF
+ *
+ * This is a high level routine which handles adjustments to the
+ * history array on a change of order by deltaq in the case that 
+ * lmm == CV_BDF.  cvAdjustBDF calls cvIncreaseBDF if deltaq = +1 and 
+ * cvDecreaseBDF if deltaq = -1 to do the actual work.
+ */
+
+static void cvAdjustBDF(CVodeMem cv_mem, int deltaq)
+{
+  switch(deltaq) {
+  case 1: 
+    cvIncreaseBDF(cv_mem);
+    return;
+  case -1: 
+    cvDecreaseBDF(cv_mem);
+    return;
+  }
+}
+
+/*
+ * cvIncreaseBDF
+ *
+ * This routine adjusts the history array on an increase in the 
+ * order q in the case that lmm == CV_BDF.  
+ * A new column zn[q+1] is set equal to a multiple of the saved 
+ * vector (= acor) in zn[indx_acor].  Then each zn[j] is adjusted by
+ * a multiple of zn[q+1].  The coefficients in the adjustment are the 
+ * coefficients of the polynomial x*x*(x+xi_1)*...*(x+xi_j),
+ * where xi_j = [t_n - t_(n-j)]/h.
+ */
+
+static void cvIncreaseBDF(CVodeMem cv_mem)
+{
+  realtype alpha0, alpha1, prod, xi, xiold, hsum, A1;
+  int i, j;
+  
+  for (i=0; i <= qmax; i++) l[i] = ZERO;
+  l[2] = alpha1 = prod = xiold = ONE;
+  alpha0 = -ONE;
+  hsum = hscale;
+  if (q > 1) {
+    for (j=1; j < q; j++) {
+      hsum += tau[j+1];
+      xi = hsum / hscale;
+      prod *= xi;
+      alpha0 -= ONE / (j+1);
+      alpha1 += ONE / xi;
+      for (i=j+2; i >= 2; i--) l[i] = l[i]*xiold + l[i-1];
+      xiold = xi;
+    }
+  }
+  A1 = (-alpha0 - alpha1) / prod;
+  N_VScale(A1, zn[indx_acor], zn[L]);
+  for (j=2; j <= q; j++)
+    N_VLinearSum(l[j], zn[L], ONE, zn[j], zn[j]);
+}
+
+/*
+ * cvDecreaseBDF
+ *
+ * This routine adjusts the history array on a decrease in the 
+ * order q in the case that lmm == CV_BDF.  
+ * Each zn[j] is adjusted by a multiple of zn[q].  The coefficients
+ * in the adjustment are the coefficients of the polynomial
+ *   x*x*(x+xi_1)*...*(x+xi_j), where xi_j = [t_n - t_(n-j)]/h.
+ */
+
+static void cvDecreaseBDF(CVodeMem cv_mem)
+{
+  realtype hsum, xi;
+  int i, j;
+  
+  for (i=0; i <= qmax; i++) l[i] = ZERO;
+  l[2] = ONE;
+  hsum = ZERO;
+  for (j=1; j <= q-2; j++) {
+    hsum += tau[j];
+    xi = hsum /hscale;
+    for (i=j+2; i >= 2; i--) l[i] = l[i]*xi + l[i-1];
+  }
+  
+  for (j=2; j < q; j++)
+    N_VLinearSum(-l[j], zn[q], ONE, zn[j], zn[j]);
+}
+
+/*
+ * cvRescale
+ *
+ * This routine rescales the Nordsieck array by multiplying the
+ * jth column zn[j] by eta^j, j = 1, ..., q.  Then the value of
+ * h is rescaled by eta, and hscale is reset to h.
+ */
+
+static void cvRescale(CVodeMem cv_mem)
+{
+  int j;
+  realtype factor;
+  
+  factor = eta;
+  for (j=1; j <= q; j++) {
+    N_VScale(factor, zn[j], zn[j]);
+    factor *= eta;
+  }
+  h = hscale * eta;
+  next_h = h;
+  hscale = h;
+  nscon = 0;
+}
+
+/*
+ * cvPredict
+ *
+ * This routine advances tn by the tentative step size h, and computes
+ * the predicted array z_n(0), which is overwritten on zn.  The
+ * prediction of zn is done by repeated additions.
+ * If tstop is enabled, it is possible for tn + h to be past tstop by roundoff,
+ * and in that case, we reset tn (after incrementing by h) to tstop.
+ */
+
+static void cvPredict(CVodeMem cv_mem)
+{
+  int j, k;
+  
+  tn += h;
+  if (tstopset) {
+    if ((tn - tstop)*h > ZERO) tn = tstop;
+  }
+  for (k = 1; k <= q; k++)
+    for (j = q; j >= k; j--) 
+      N_VLinearSum(ONE, zn[j-1], ONE, zn[j], zn[j-1]); 
+}
+
+/*
+ * cvSet
+ *
+ * This routine is a high level routine which calls cvSetAdams or
+ * cvSetBDF to set the polynomial l, the test quantity array tq, 
+ * and the related variables  rl1, gamma, and gamrat.
+ *
+ * The array tq is loaded with constants used in the control of estimated
+ * local errors and in the nonlinear convergence test.  Specifically, while
+ * running at order q, the components of tq are as follows:
+ *   tq[1] = a coefficient used to get the est. local error at order q-1
+ *   tq[2] = a coefficient used to get the est. local error at order q
+ *   tq[3] = a coefficient used to get the est. local error at order q+1
+ *   tq[4] = constant used in nonlinear iteration convergence test
+ *   tq[5] = coefficient used to get the order q+2 derivative vector used in
+ *           the est. local error at order q+1
+ */
+
+static void cvSet(CVodeMem cv_mem)
+{
+  switch(lmm) {
+  case CV_ADAMS: 
+    cvSetAdams(cv_mem);
+    break;
+  case CV_BDF:
+    cvSetBDF(cv_mem);
+    break;
+  }
+  rl1 = ONE / l[1];
+  gamma = h * rl1;
+  if (nst == 0) gammap = gamma;
+  gamrat = (nst > 0) ? gamma / gammap : ONE;  /* protect x / x != 1.0 */
+}
+
+/*
+ * cvSetAdams
+ *
+ * This routine handles the computation of l and tq for the
+ * case lmm == CV_ADAMS.
+ *
+ * The components of the array l are the coefficients of a
+ * polynomial Lambda(x) = l_0 + l_1 x + ... + l_q x^q, given by
+ *                          q-1
+ * (d/dx) Lambda(x) = c * PRODUCT (1 + x / xi_i) , where
+ *                          i=1
+ *  Lambda(-1) = 0, Lambda(0) = 1, and c is a normalization factor.
+ * Here xi_i = [t_n - t_(n-i)] / h.
+ *
+ * The array tq is set to test quantities used in the convergence
+ * test, the error test, and the selection of h at a new order.
+ */
+
+static void cvSetAdams(CVodeMem cv_mem)
+{
+  realtype m[L_MAX], M[3], hsum;
+  
+  if (q == 1) {
+    l[0] = l[1] = tq[1] = tq[5] = ONE;
+    tq[2] = HALF;
+    tq[3] = ONE/TWELVE;
+    tq[4] = nlscoef / tq[2];       /* = 0.1 / tq[2] */
+    return;
+  }
+  
+  hsum = cvAdamsStart(cv_mem, m);
+  
+  M[0] = cvAltSum(q-1, m, 1);
+  M[1] = cvAltSum(q-1, m, 2);
+  
+  cvAdamsFinish(cv_mem, m, M, hsum);
+}
+
+/*
+ * cvAdamsStart
+ *
+ * This routine generates in m[] the coefficients of the product
+ * polynomial needed for the Adams l and tq coefficients for q > 1.
+ */
+
+static realtype cvAdamsStart(CVodeMem cv_mem, realtype m[])
+{
+  realtype hsum, xi_inv, sum;
+  int i, j;
+  
+  hsum = h;
+  m[0] = ONE;
+  for (i=1; i <= q; i++) m[i] = ZERO;
+  for (j=1; j < q; j++) {
+    if ((j==q-1) && (qwait == 1)) {
+      sum = cvAltSum(q-2, m, 2);
+      tq[1] = q * sum / m[q-2];
+    }
+    xi_inv = h / hsum;
+    for (i=j; i >= 1; i--) m[i] += m[i-1] * xi_inv;
+    hsum += tau[j];
+    /* The m[i] are coefficients of product(1 to j) (1 + x/xi_i) */
+  }
+  return(hsum);
+}
+
+/*
+ * cvAdamsFinish
+ *
+ * This routine completes the calculation of the Adams l and tq.
+ */
+
+static void cvAdamsFinish(CVodeMem cv_mem, realtype m[], realtype M[], realtype hsum)
+{
+  int i;
+  realtype M0_inv, xi, xi_inv;
+  
+  M0_inv = ONE / M[0];
+  
+  l[0] = ONE;
+  for (i=1; i <= q; i++) l[i] = M0_inv * (m[i-1] / i);
+  xi = hsum / h;
+  xi_inv = ONE / xi;
+  
+  tq[2] = M[1] * M0_inv / xi;
+  tq[5] = xi / l[q];
+
+  if (qwait == 1) {
+    for (i=q; i >= 1; i--) m[i] += m[i-1] * xi_inv;
+    M[2] = cvAltSum(q, m, 2);
+    tq[3] = M[2] * M0_inv / L;
+  }
+
+  tq[4] = nlscoef / tq[2];
+}
+
+/*  
+ * cvAltSum
+ *
+ * cvAltSum returns the value of the alternating sum
+ *   sum (i= 0 ... iend) [ (-1)^i * (a[i] / (i + k)) ].
+ * If iend < 0 then cvAltSum returns 0.
+ * This operation is needed to compute the integral, from -1 to 0,
+ * of a polynomial x^(k-1) M(x) given the coefficients of M(x).
+ */
+
+static realtype cvAltSum(int iend, realtype a[], int k)
+{
+  int i, sign;
+  realtype sum;
+  
+  if (iend < 0) return(ZERO);
+  
+  sum = ZERO;
+  sign = 1;
+  for (i=0; i <= iend; i++) {
+    sum += sign * (a[i] / (i+k));
+    sign = -sign;
+  }
+  return(sum);
+}
+
+/*
+ * cvSetBDF
+ *
+ * This routine computes the coefficients l and tq in the case
+ * lmm == CV_BDF.  cvSetBDF calls cvSetTqBDF to set the test
+ * quantity array tq. 
+ * 
+ * The components of the array l are the coefficients of a
+ * polynomial Lambda(x) = l_0 + l_1 x + ... + l_q x^q, given by
+ *                                 q-1
+ * Lambda(x) = (1 + x / xi*_q) * PRODUCT (1 + x / xi_i) , where
+ *                                 i=1
+ *  xi_i = [t_n - t_(n-i)] / h.
+ *
+ * The array tq is set to test quantities used in the convergence
+ * test, the error test, and the selection of h at a new order.
+ */
+
+static void cvSetBDF(CVodeMem cv_mem)
+{
+  realtype alpha0, alpha0_hat, xi_inv, xistar_inv, hsum;
+  int i,j;
+  
+  l[0] = l[1] = xi_inv = xistar_inv = ONE;
+  for (i=2; i <= q; i++) l[i] = ZERO;
+  alpha0 = alpha0_hat = -ONE;
+  hsum = h;
+  if (q > 1) {
+    for (j=2; j < q; j++) {
+      hsum += tau[j-1];
+      xi_inv = h / hsum;
+      alpha0 -= ONE / j;
+      for (i=j; i >= 1; i--) l[i] += l[i-1]*xi_inv;
+      /* The l[i] are coefficients of product(1 to j) (1 + x/xi_i) */
+    }
+    
+    /* j = q */
+    alpha0 -= ONE / q;
+    xistar_inv = -l[1] - alpha0;
+    hsum += tau[q-1];
+    xi_inv = h / hsum;
+    alpha0_hat = -l[1] - xi_inv;
+    for (i=q; i >= 1; i--) l[i] += l[i-1]*xistar_inv;
+  }
+
+  cvSetTqBDF(cv_mem, hsum, alpha0, alpha0_hat, xi_inv, xistar_inv);
+}
+
+/*
+ * cvSetTqBDF
+ *
+ * This routine sets the test quantity array tq in the case
+ * lmm == CV_BDF.
+ */
+
+static void cvSetTqBDF(CVodeMem cv_mem, realtype hsum, realtype alpha0,
+                       realtype alpha0_hat, realtype xi_inv, realtype xistar_inv)
+{
+  realtype A1, A2, A3, A4, A5, A6;
+  realtype C, Cpinv, Cppinv;
+  
+  A1 = ONE - alpha0_hat + alpha0;
+  A2 = ONE + q * A1;
+  tq[2] = SUNRabs(A1 / (alpha0 * A2));
+  tq[5] = SUNRabs(A2 * xistar_inv / (l[q] * xi_inv));
+  if (qwait == 1) {
+    if (q > 1) {
+      C = xistar_inv / l[q];
+      A3 = alpha0 + ONE / q;
+      A4 = alpha0_hat + xi_inv;
+      Cpinv = (ONE - A4 + A3) / A3;
+      tq[1] = SUNRabs(C * Cpinv);
+    }
+    else tq[1] = ONE;
+    hsum += tau[q];
+    xi_inv = h / hsum;
+    A5 = alpha0 - (ONE / (q+1));
+    A6 = alpha0_hat - xi_inv;
+    Cppinv = (ONE - A6 + A5) / A2;
+    tq[3] = SUNRabs(Cppinv / (xi_inv * (q+2) * A5));
+  }
+  tq[4] = nlscoef / tq[2];
+}
+
+/*
+ * cvNls
+ *
+ * This routine attempts to solve the nonlinear system associated
+ * with a single implicit step of the linear multistep method.
+ * Depending on iter, it calls cvNlsFunctional or cvNlsNewton
+ * to do the work.
+ */
+
+static int cvNls(CVodeMem cv_mem, int nflag)
+{
+  int flag = CV_SUCCESS;
+
+  switch(iter) {
+  case CV_FUNCTIONAL: 
+    flag = cvNlsFunctional(cv_mem);
+    break;
+  case CV_NEWTON:
+    flag = cvNlsNewton(cv_mem, nflag);
+    break;
+  }
+
+  return(flag);
+}
+
+/*
+ * cvNlsFunctional
+ *
+ * This routine attempts to solve the nonlinear system using 
+ * functional iteration (no matrices involved).
+ *
+ * Possible return values are:
+ *
+ *   CV_SUCCESS      --->  continue with error test
+ *
+ *   CV_RHSFUNC_FAIL --->  halt the integration
+ *
+ *   CONV_FAIL       -+
+ *   RHSFUNC_RECVR   -+->  predict again or stop if too many
+ *
+ */
+
+static int cvNlsFunctional(CVodeMem cv_mem)
+{
+  int retval, m;
+  realtype del, delp, dcon;
+
+  /* Initialize counter and evaluate f at predicted y */
+  
+  crate = ONE;
+  m = 0;
+
+  retval = f(tn, zn[0], tempv, user_data);
+  nfe++;
+  if (retval < 0) return(CV_RHSFUNC_FAIL);
+  if (retval > 0) return(RHSFUNC_RECVR);
+
+  N_VConst(ZERO, acor);
+
+  /* Initialize delp to avoid compiler warning message */
+  del = delp = ZERO;
+
+  /* Loop until convergence; accumulate corrections in acor */
+
+  loop {
+
+    nni++;
+
+    /* Correct y directly from the last f value */
+    N_VLinearSum(h, tempv, -ONE, zn[1], tempv);
+    N_VScale(rl1, tempv, tempv);
+    N_VLinearSum(ONE, zn[0], ONE, tempv, y);
+    /* Get WRMS norm of current correction to use in convergence test */
+    N_VLinearSum(ONE, tempv, -ONE, acor, acor);
+    del = N_VWrmsNorm(acor, ewt);
+    N_VScale(ONE, tempv, acor);
+    
+    /* Test for convergence.  If m > 0, an estimate of the convergence
+       rate constant is stored in crate, and used in the test.        */
+    if (m > 0) crate = SUNMAX(CRDOWN * crate, del / delp);
+    dcon = del * SUNMIN(ONE, crate) / tq[4];
+    if (dcon <= ONE) {
+      acnrm = (m == 0) ? del : N_VWrmsNorm(acor, ewt);
+      return(CV_SUCCESS);  /* Convergence achieved */
+    }
+
+    /* Stop at maxcor iterations or if iter. seems to be diverging */
+    m++;
+    if ((m==maxcor) || ((m >= 2) && (del > RDIV * delp))) return(CONV_FAIL);
+
+    /* Save norm of correction, evaluate f, and loop again */
+    delp = del;
+
+    retval = f(tn, y, tempv, user_data);
+    nfe++;
+    if (retval < 0) return(CV_RHSFUNC_FAIL);
+    if (retval > 0) return(RHSFUNC_RECVR);
+
+  }
+}
+
+/*
+ * cvNlsNewton
+ *
+ * This routine handles the Newton iteration. It calls lsetup if 
+ * indicated, calls cvNewtonIteration to perform the iteration, and 
+ * retries a failed attempt at Newton iteration if that is indicated.
+ *
+ * Possible return values:
+ *
+ *   CV_SUCCESS       ---> continue with error test
+ *
+ *   CV_RHSFUNC_FAIL  -+  
+ *   CV_LSETUP_FAIL    |-> halt the integration 
+ *   CV_LSOLVE_FAIL   -+
+ *
+ *   CONV_FAIL        -+
+ *   RHSFUNC_RECVR    -+-> predict again or stop if too many
+ *
+ */
+
+static int cvNlsNewton(CVodeMem cv_mem, int nflag)
+{
+  N_Vector vtemp1, vtemp2, vtemp3;
+  int convfail, retval, ier;
+  booleantype callSetup;
+  
+  vtemp1 = acor;  /* rename acor as vtemp1 for readability  */
+  vtemp2 = y;     /* rename y as vtemp2 for readability     */
+  vtemp3 = tempv; /* rename tempv as vtemp3 for readability */
+  
+  /* Set flag convfail, input to lsetup for its evaluation decision */
+  convfail = ((nflag == FIRST_CALL) || (nflag == PREV_ERR_FAIL)) ?
+    CV_NO_FAILURES : CV_FAIL_OTHER;
+
+  /* Decide whether or not to call setup routine (if one exists) */
+  if (setupNonNull) {      
+    callSetup = (nflag == PREV_CONV_FAIL) || (nflag == PREV_ERR_FAIL) ||
+      (nst == 0) || (nst >= nstlp + MSBP) || (SUNRabs(gamrat-ONE) > DGMAX);
+  } else {  
+    crate = ONE;
+    callSetup = FALSE;
+  }
+  
+  /* Looping point for the solution of the nonlinear system.
+     Evaluate f at the predicted y, call lsetup if indicated, and
+     call cvNewtonIteration for the Newton iteration itself.      */
+  
+
+  loop {
+
+    retval = f(tn, zn[0], ftemp, user_data);
+    nfe++; 
+    if (retval < 0) return(CV_RHSFUNC_FAIL);
+    if (retval > 0) return(RHSFUNC_RECVR);
+
+    if (callSetup) {
+      ier = lsetup(cv_mem, convfail, zn[0], ftemp, &jcur, 
+                   vtemp1, vtemp2, vtemp3);
+      nsetups++;
+      callSetup = FALSE;
+      gamrat = crate = ONE; 
+      gammap = gamma;
+      nstlp = nst;
+      /* Return if lsetup failed */
+      if (ier < 0) return(CV_LSETUP_FAIL);
+      if (ier > 0) return(CONV_FAIL);
+    }
+
+    /* Set acor to zero and load prediction into y vector */
+    N_VConst(ZERO, acor);
+    N_VScale(ONE, zn[0], y);
+
+    /* Do the Newton iteration */
+    ier = cvNewtonIteration(cv_mem);
+
+    /* If there is a convergence failure and the Jacobian-related 
+       data appears not to be current, loop again with a call to lsetup
+       in which convfail=CV_FAIL_BAD_J.  Otherwise return.                 */
+    if (ier != TRY_AGAIN) return(ier);
+    
+    callSetup = TRUE;
+    convfail = CV_FAIL_BAD_J;
+  }
+}
+
+/*
+ * cvNewtonIteration
+ *
+ * This routine performs the Newton iteration. If the iteration succeeds,
+ * it returns the value CV_SUCCESS. If not, it may signal the cvNlsNewton 
+ * routine to call lsetup again and reattempt the iteration, by
+ * returning the value TRY_AGAIN. (In this case, cvNlsNewton must set 
+ * convfail to CV_FAIL_BAD_J before calling setup again). 
+ * Otherwise, this routine returns one of the appropriate values 
+ * CV_LSOLVE_FAIL, CV_RHSFUNC_FAIL, CONV_FAIL, or RHSFUNC_RECVR back 
+ * to cvNlsNewton.
+ */
+
+static int cvNewtonIteration(CVodeMem cv_mem)
+{
+  int m, retval;
+  realtype del, delp, dcon;
+  N_Vector b;
+
+  mnewt = m = 0;
+
+  /* Initialize delp to avoid compiler warning message */
+  del = delp = ZERO;
+
+  /* Looping point for Newton iteration */
+  loop {
+
+    /* Evaluate the residual of the nonlinear system */
+    N_VLinearSum(rl1, zn[1], ONE, acor, tempv);
+    N_VLinearSum(gamma, ftemp, -ONE, tempv, tempv);
+
+    /* Call the lsolve function */
+    b = tempv;
+    retval = lsolve(cv_mem, b, ewt, y, ftemp); 
+    nni++;
+    
+    if (retval < 0) return(CV_LSOLVE_FAIL);
+    
+    /* If lsolve had a recoverable failure and Jacobian data is
+       not current, signal to try the solution again            */
+    if (retval > 0) { 
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(CONV_FAIL);
+    }
+
+    /* Get WRMS norm of correction; add correction to acor and y */
+    del = N_VWrmsNorm(b, ewt);
+    N_VLinearSum(ONE, acor, ONE, b, acor);
+    N_VLinearSum(ONE, zn[0], ONE, acor, y);
+    
+    /* Test for convergence.  If m > 0, an estimate of the convergence
+       rate constant is stored in crate, and used in the test.        */
+    if (m > 0) {
+      crate = SUNMAX(CRDOWN * crate, del/delp);
+    }
+    dcon = del * SUNMIN(ONE, crate) / tq[4];
+    
+    if (dcon <= ONE) {
+      acnrm = (m==0) ? del : N_VWrmsNorm(acor, ewt);
+      jcur = FALSE;
+      return(CV_SUCCESS); /* Nonlinear system was solved successfully */
+    }
+    
+    mnewt = ++m;
+    
+    /* Stop at maxcor iterations or if iter. seems to be diverging.
+       If still not converged and Jacobian data is not current, 
+       signal to try the solution again                            */
+    if ((m == maxcor) || ((m >= 2) && (del > RDIV*delp))) {
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(CONV_FAIL);
+    }
+    
+    /* Save norm of correction, evaluate f, and loop again */
+    delp = del;
+    retval = f(tn, y, ftemp, user_data);
+    nfe++;
+    if (retval < 0) return(CV_RHSFUNC_FAIL);
+    if (retval > 0) {
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(RHSFUNC_RECVR);
+    }
+
+  } /* end loop */
+}
+
+/*
+ * cvHandleNFlag
+ *
+ * This routine takes action on the return value nflag = *nflagPtr
+ * returned by cvNls, as follows:
+ *
+ * If cvNls succeeded in solving the nonlinear system, then
+ * cvHandleNFlag returns the constant DO_ERROR_TEST, which tells cvStep
+ * to perform the error test.
+ *
+ * If the nonlinear system was not solved successfully, then ncfn and
+ * ncf = *ncfPtr are incremented and Nordsieck array zn is restored.
+ *
+ * If the solution of the nonlinear system failed due to an
+ * unrecoverable failure by setup, we return the value CV_LSETUP_FAIL.
+ * 
+ * If it failed due to an unrecoverable failure in solve, then we return
+ * the value CV_LSOLVE_FAIL.
+ *
+ * If it failed due to an unrecoverable failure in rhs, then we return
+ * the value CV_RHSFUNC_FAIL.
+ *
+ * Otherwise, a recoverable failure occurred when solving the 
+ * nonlinear system (cvNls returned nflag == CONV_FAIL or RHSFUNC_RECVR). 
+ * In this case, if ncf is now equal to maxncf or |h| = hmin, 
+ * we return the value CV_CONV_FAILURE (if nflag=CONV_FAIL) or
+ * CV_REPTD_RHSFUNC_ERR (if nflag=RHSFUNC_RECVR).
+ * If not, we set *nflagPtr = PREV_CONV_FAIL and return the value
+ * PREDICT_AGAIN, telling cvStep to reattempt the step.
+ *
+ */
+
+static int cvHandleNFlag(CVodeMem cv_mem, int *nflagPtr, realtype saved_t,
+                         int *ncfPtr)
+{
+  int nflag;
+  
+  nflag = *nflagPtr;
+  
+  if (nflag == CV_SUCCESS) return(DO_ERROR_TEST);
+
+  /* The nonlinear soln. failed; increment ncfn and restore zn */
+  ncfn++;
+  cvRestore(cv_mem, saved_t);
+  
+  /* Return if lsetup, lsolve, or rhs failed unrecoverably */
+  if (nflag == CV_LSETUP_FAIL)  return(CV_LSETUP_FAIL);
+  if (nflag == CV_LSOLVE_FAIL)  return(CV_LSOLVE_FAIL);
+  if (nflag == CV_RHSFUNC_FAIL) return(CV_RHSFUNC_FAIL);
+  
+  /* At this point, nflag = CONV_FAIL or RHSFUNC_RECVR; increment ncf */
+  
+  (*ncfPtr)++;
+  etamax = ONE;
+
+  /* If we had maxncf failures or |h| = hmin, 
+     return CV_CONV_FAILURE or CV_REPTD_RHSFUNC_ERR. */
+
+  if ((SUNRabs(h) <= hmin*ONEPSM) || (*ncfPtr == maxncf)) {
+    if (nflag == CONV_FAIL)     return(CV_CONV_FAILURE);
+    if (nflag == RHSFUNC_RECVR) return(CV_REPTD_RHSFUNC_ERR);    
+  }
+
+  /* Reduce step size; return to reattempt the step */
+
+  eta = SUNMAX(ETACF, hmin / SUNRabs(h));
+  *nflagPtr = PREV_CONV_FAIL;
+  cvRescale(cv_mem);
+
+  return(PREDICT_AGAIN);
+}
+
+/*
+ * cvRestore
+ *
+ * This routine restores the value of tn to saved_t and undoes the
+ * prediction.  After execution of cvRestore, the Nordsieck array zn has
+ * the same values as before the call to cvPredict.
+ */
+
+static void cvRestore(CVodeMem cv_mem, realtype saved_t)
+{
+  int j, k;
+  
+  tn = saved_t;
+  for (k = 1; k <= q; k++)
+    for (j = q; j >= k; j--)
+      N_VLinearSum(ONE, zn[j-1], -ONE, zn[j], zn[j-1]);
+}
+
+/*
+ * cvDoErrorTest
+ *
+ * This routine performs the local error test. 
+ * The weighted local error norm dsm is loaded into *dsmPtr, and 
+ * the test dsm ?<= 1 is made.
+ *
+ * If the test passes, cvDoErrorTest returns CV_SUCCESS. 
+ *
+ * If the test fails, we undo the step just taken (call cvRestore) and 
+ *
+ *   - if maxnef error test failures have occurred or if SUNRabs(h) = hmin,
+ *     we return CV_ERR_FAILURE.
+ *
+ *   - if more than MXNEF1 error test failures have occurred, an order
+ *     reduction is forced. If already at order 1, restart by reloading 
+ *     zn from scratch. If f() fails we return either CV_RHSFUNC_FAIL
+ *     or CV_UNREC_RHSFUNC_ERR (no recovery is possible at this stage).
+ *
+ *   - otherwise, set *nflagPtr to PREV_ERR_FAIL, and return TRY_AGAIN. 
+ *
+ */
+
+static booleantype cvDoErrorTest(CVodeMem cv_mem, int *nflagPtr,
+                                realtype saved_t, int *nefPtr, realtype *dsmPtr)
+{
+  realtype dsm;
+  int retval;
+  
+  dsm = acnrm * tq[2];
+
+  /* If est. local error norm dsm passes test, return CV_SUCCESS */  
+  *dsmPtr = dsm; 
+  if (dsm <= ONE) return(CV_SUCCESS);
+  
+  /* Test failed; increment counters, set nflag, and restore zn array */
+  (*nefPtr)++;
+  netf++;
+  *nflagPtr = PREV_ERR_FAIL;
+  cvRestore(cv_mem, saved_t);
+
+  /* At maxnef failures or |h| = hmin, return CV_ERR_FAILURE */
+  if ((SUNRabs(h) <= hmin*ONEPSM) || (*nefPtr == maxnef)) return(CV_ERR_FAILURE);
+
+  /* Set etamax = 1 to prevent step size increase at end of this step */
+  etamax = ONE;
+
+  /* Set h ratio eta from dsm, rescale, and return for retry of step */
+  if (*nefPtr <= MXNEF1) {
+    eta = ONE / (SUNRpowerR(BIAS2*dsm,ONE/L) + ADDON);
+    eta = SUNMAX(ETAMIN, SUNMAX(eta, hmin / SUNRabs(h)));
+    if (*nefPtr >= SMALL_NEF) eta = SUNMIN(eta, ETAMXF);
+    cvRescale(cv_mem);
+    return(TRY_AGAIN);
+  }
+  
+  /* After MXNEF1 failures, force an order reduction and retry step */
+  if (q > 1) {
+    eta = SUNMAX(ETAMIN, hmin / SUNRabs(h));
+    cvAdjustOrder(cv_mem,-1);
+    L = q;
+    q--;
+    qwait = L;
+    cvRescale(cv_mem);
+    return(TRY_AGAIN);
+  }
+
+  /* If already at order 1, restart: reload zn from scratch */
+
+  eta = SUNMAX(ETAMIN, hmin / SUNRabs(h));
+  h *= eta;
+  next_h = h;
+  hscale = h;
+  qwait = LONG_WAIT;
+  nscon = 0;
+
+  retval = f(tn, zn[0], tempv, user_data);
+  nfe++;
+  if (retval < 0)  return(CV_RHSFUNC_FAIL);
+  if (retval > 0)  return(CV_UNREC_RHSFUNC_ERR);
+
+  N_VScale(h, tempv, zn[1]);
+
+  return(TRY_AGAIN);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions called after succesful step
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvCompleteStep
+ *
+ * This routine performs various update operations when the solution
+ * to the nonlinear system has passed the local error test. 
+ * We increment the step counter nst, record the values hu and qu,
+ * update the tau array, and apply the corrections to the zn array.
+ * The tau[i] are the last q values of h, with tau[1] the most recent.
+ * The counter qwait is decremented, and if qwait == 1 (and q < qmax)
+ * we save acor and tq[5] for a possible order increase.
+ */
+
+static void cvCompleteStep(CVodeMem cv_mem)
+{
+  int i, j;
+  
+  nst++;
+  nscon++;
+  hu = h;
+  qu = q;
+
+  for (i=q; i >= 2; i--)  tau[i] = tau[i-1];
+  if ((q==1) && (nst > 1)) tau[2] = tau[1];
+  tau[1] = h;
+
+  /* Apply correction to column j of zn: l_j * Delta_n */
+  for (j=0; j <= q; j++) 
+    N_VLinearSum(l[j], acor, ONE, zn[j], zn[j]);
+  qwait--;
+  if ((qwait == 1) && (q != qmax)) {
+    N_VScale(ONE, acor, zn[qmax]);
+    saved_tq5 = tq[5];
+    indx_acor = qmax;
+  }
+}
+
+/*
+ * cvPrepareNextStep
+ *
+ * This routine handles the setting of stepsize and order for the
+ * next step -- hprime and qprime.  Along with hprime, it sets the
+ * ratio eta = hprime/h.  It also updates other state variables 
+ * related to a change of step size or order. 
+ */
+
+static void cvPrepareNextStep(CVodeMem cv_mem, realtype dsm)
+{
+  /* If etamax = 1, defer step size or order changes */
+  if (etamax == ONE) {
+    qwait = SUNMAX(qwait, 2);
+    qprime = q;
+    hprime = h;
+    eta = ONE;
+    return;
+  }
+
+  /* etaq is the ratio of new to old h at the current order */  
+  etaq = ONE /(SUNRpowerR(BIAS2*dsm,ONE/L) + ADDON);
+  
+  /* If no order change, adjust eta and acor in cvSetEta and return */
+  if (qwait != 0) {
+    eta = etaq;
+    qprime = q;
+    cvSetEta(cv_mem);
+    return;
+  }
+  
+  /* If qwait = 0, consider an order change.   etaqm1 and etaqp1 are 
+     the ratios of new to old h at orders q-1 and q+1, respectively.
+     cvChooseEta selects the largest; cvSetEta adjusts eta and acor */
+  qwait = 2;
+  etaqm1 = cvComputeEtaqm1(cv_mem);
+  etaqp1 = cvComputeEtaqp1(cv_mem);  
+  cvChooseEta(cv_mem); 
+  cvSetEta(cv_mem);
+}
+
+/*
+ * cvSetEta
+ *
+ * This routine adjusts the value of eta according to the various
+ * heuristic limits and the optional input hmax.
+ */
+
+static void cvSetEta(CVodeMem cv_mem)
+{
+
+  /* If eta below the threshhold THRESH, reject a change of step size */
+  if (eta < THRESH) {
+    eta = ONE;
+    hprime = h;
+  } else {
+    /* Limit eta by etamax and hmax, then set hprime */
+    eta = SUNMIN(eta, etamax);
+    eta /= SUNMAX(ONE, SUNRabs(h)*hmax_inv*eta);
+    hprime = h * eta;
+    if (qprime < q) nscon = 0;
+  }
+}
+
+/*
+ * cvComputeEtaqm1
+ *
+ * This routine computes and returns the value of etaqm1 for a
+ * possible decrease in order by 1.
+ */
+
+static realtype cvComputeEtaqm1(CVodeMem cv_mem)
+{
+  realtype ddn;
+  
+  etaqm1 = ZERO;
+  if (q > 1) {
+    ddn = N_VWrmsNorm(zn[q], ewt) * tq[1];
+    etaqm1 = ONE/(SUNRpowerR(BIAS1*ddn, ONE/q) + ADDON);
+  }
+  return(etaqm1);
+}
+
+/*
+ * cvComputeEtaqp1
+ *
+ * This routine computes and returns the value of etaqp1 for a
+ * possible increase in order by 1.
+ */
+
+static realtype cvComputeEtaqp1(CVodeMem cv_mem)
+{
+  realtype dup, cquot;
+  
+  etaqp1 = ZERO;
+  if (q != qmax) {
+    if (saved_tq5 == ZERO) return(etaqp1);
+    cquot = (tq[5] / saved_tq5) * SUNRpowerI(h/tau[2], L);
+    N_VLinearSum(-cquot, zn[qmax], ONE, acor, tempv);
+    dup = N_VWrmsNorm(tempv, ewt) * tq[3];
+    etaqp1 = ONE / (SUNRpowerR(BIAS3*dup, ONE/(L+1)) + ADDON);
+  }
+  return(etaqp1);
+}
+
+/*
+ * cvChooseEta
+ * Given etaqm1, etaq, etaqp1 (the values of eta for qprime =
+ * q - 1, q, or q + 1, respectively), this routine chooses the 
+ * maximum eta value, sets eta to that value, and sets qprime to the
+ * corresponding value of q.  If there is a tie, the preference
+ * order is to (1) keep the same order, then (2) decrease the order,
+ * and finally (3) increase the order.  If the maximum eta value
+ * is below the threshhold THRESH, the order is kept unchanged and
+ * eta is set to 1.
+ */
+
+static void cvChooseEta(CVodeMem cv_mem)
+{
+  realtype etam;
+  
+  etam = SUNMAX(etaqm1, SUNMAX(etaq, etaqp1));
+  
+  if (etam < THRESH) {
+    eta = ONE;
+    qprime = q;
+    return;
+  }
+
+  if (etam == etaq) {
+
+    eta = etaq;
+    qprime = q;
+
+  } else if (etam == etaqm1) {
+
+    eta = etaqm1;
+    qprime = q - 1;
+
+  } else {
+
+    eta = etaqp1;
+    qprime = q + 1;
+
+    if (lmm == CV_BDF) {
+      /* 
+       * Store Delta_n in zn[qmax] to be used in order increase 
+       *
+       * This happens at the last step of order q before an increase
+       * to order q+1, so it represents Delta_n in the ELTE at q+1
+       */
+
+      N_VScale(ONE, acor, zn[qmax]);
+
+    }
+  }
+}
+
+/*
+ * cvHandleFailure
+ *
+ * This routine prints error messages for all cases of failure by
+ * cvHin and cvStep.
+ * It returns to CVode the value that CVode is to return to the user.
+ */
+
+static int cvHandleFailure(CVodeMem cv_mem, int flag)
+{
+
+  /* Set vector of  absolute weighted local errors */
+  /*
+  N_VProd(acor, ewt, tempv);
+  N_VAbs(tempv, tempv);
+  */
+
+  /* Depending on flag, print error message and return error flag */
+  switch (flag) {
+  case CV_ERR_FAILURE:
+    cvProcessError(cv_mem, CV_ERR_FAILURE, "CVODE", "CVode", MSGCV_ERR_FAILS, tn, h);
+    break;
+  case CV_CONV_FAILURE:
+    cvProcessError(cv_mem, CV_CONV_FAILURE, "CVODE", "CVode", MSGCV_CONV_FAILS, tn, h);
+    break;
+  case CV_LSETUP_FAIL:
+    cvProcessError(cv_mem, CV_LSETUP_FAIL, "CVODE", "CVode", MSGCV_SETUP_FAILED, tn);
+    break;
+  case CV_LSOLVE_FAIL:
+    cvProcessError(cv_mem, CV_LSOLVE_FAIL, "CVODE", "CVode", MSGCV_SOLVE_FAILED, tn);
+    break;
+  case CV_RHSFUNC_FAIL:
+    cvProcessError(cv_mem, CV_RHSFUNC_FAIL, "CVODE", "CVode", MSGCV_RHSFUNC_FAILED, tn);
+    break;
+  case CV_UNREC_RHSFUNC_ERR:
+    cvProcessError(cv_mem, CV_UNREC_RHSFUNC_ERR, "CVODE", "CVode", MSGCV_RHSFUNC_UNREC, tn);
+    break;
+  case CV_REPTD_RHSFUNC_ERR:
+    cvProcessError(cv_mem, CV_REPTD_RHSFUNC_ERR, "CVODE", "CVode", MSGCV_RHSFUNC_REPTD, tn);
+    break;
+  case CV_RTFUNC_FAIL:
+    cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODE", "CVode", MSGCV_RTFUNC_FAILED, tn);
+    break;
+  case CV_TOO_CLOSE:
+    cvProcessError(cv_mem, CV_TOO_CLOSE, "CVODE", "CVode", MSGCV_TOO_CLOSE);
+    break;
+  default:
+    return(CV_SUCCESS);
+  }
+
+  return(flag);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions for BDF Stability Limit Detection                       
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvBDFStab
+ *
+ * This routine handles the BDF Stability Limit Detection Algorithm
+ * STALD.  It is called if lmm = CV_BDF and the SLDET option is on.
+ * If the order is 3 or more, the required norm data is saved.
+ * If a decision to reduce order has not already been made, and
+ * enough data has been saved, cvSLdet is called.  If it signals
+ * a stability limit violation, the order is reduced, and the step
+ * size is reset accordingly.
+ */
+
+static void cvBDFStab(CVodeMem cv_mem)
+{
+  int i,k, ldflag, factorial;
+  realtype sq, sqm1, sqm2;
+      
+  /* If order is 3 or greater, then save scaled derivative data,
+     push old data down in i, then add current values to top.    */
+
+  if (q >= 3) {
+    for (k = 1; k <= 3; k++)
+      for (i = 5; i >= 2; i--)
+        ssdat[i][k] = ssdat[i-1][k];
+    factorial = 1;
+    for (i = 1; i <= q-1; i++) factorial *= i;
+    sq = factorial*q*(q+1)*acnrm/SUNMAX(tq[5],TINY);
+    sqm1 = factorial*q*N_VWrmsNorm(zn[q], ewt);
+    sqm2 = factorial*N_VWrmsNorm(zn[q-1], ewt);
+    ssdat[1][1] = sqm2*sqm2;
+    ssdat[1][2] = sqm1*sqm1;
+    ssdat[1][3] = sq*sq;
+  }  
+
+
+  if (qprime >= q) {
+
+    /* If order is 3 or greater, and enough ssdat has been saved,
+       nscon >= q+5, then call stability limit detection routine.  */
+
+    if ( (q >= 3) && (nscon >= q+5) ) {
+      ldflag = cvSLdet(cv_mem);
+      if (ldflag > 3) {
+        /* A stability limit violation is indicated by
+           a return flag of 4, 5, or 6.
+           Reduce new order.                     */
+        qprime = q-1;
+        eta = etaqm1; 
+        eta = SUNMIN(eta,etamax);
+        eta = eta/SUNMAX(ONE,SUNRabs(h)*hmax_inv*eta);
+        hprime = h*eta;
+        nor = nor + 1;
+      }
+    }
+  }
+  else {
+    /* Otherwise, let order increase happen, and 
+       reset stability limit counter, nscon.     */
+    nscon = 0;
+  }
+}
+
+/*
+ * cvSLdet
+ *
+ * This routine detects stability limitation using stored scaled 
+ * derivatives data. cvSLdet returns the magnitude of the
+ * dominate characteristic root, rr. The presents of a stability
+ * limit is indicated by rr > "something a little less then 1.0",  
+ * and a positive kflag. This routine should only be called if
+ * order is greater than or equal to 3, and data has been collected
+ * for 5 time steps. 
+ * 
+ * Returned values:
+ *    kflag = 1 -> Found stable characteristic root, normal matrix case
+ *    kflag = 2 -> Found stable characteristic root, quartic solution
+ *    kflag = 3 -> Found stable characteristic root, quartic solution,
+ *                 with Newton correction
+ *    kflag = 4 -> Found stability violation, normal matrix case
+ *    kflag = 5 -> Found stability violation, quartic solution
+ *    kflag = 6 -> Found stability violation, quartic solution,
+ *                 with Newton correction
+ *
+ *    kflag < 0 -> No stability limitation, 
+ *                 or could not compute limitation.
+ *
+ *    kflag = -1 -> Min/max ratio of ssdat too small.
+ *    kflag = -2 -> For normal matrix case, vmax > vrrt2*vrrt2
+ *    kflag = -3 -> For normal matrix case, The three ratios
+ *                  are inconsistent.
+ *    kflag = -4 -> Small coefficient prevents elimination of quartics.  
+ *    kflag = -5 -> R value from quartics not consistent.
+ *    kflag = -6 -> No corrected root passes test on qk values
+ *    kflag = -7 -> Trouble solving for sigsq.
+ *    kflag = -8 -> Trouble solving for B, or R via B.
+ *    kflag = -9 -> R via sigsq[k] disagrees with R from data.
+ */
+
+static int cvSLdet(CVodeMem cv_mem)
+{
+  int i, k, j, it, kmin = 0, kflag = 0;
+  realtype rat[5][4], rav[4], qkr[4], sigsq[4], smax[4], ssmax[4];
+  realtype drr[4], rrc[4],sqmx[4], qjk[4][4], vrat[5], qc[6][4], qco[6][4];
+  realtype rr, rrcut, vrrtol, vrrt2, sqtol, rrtol;
+  realtype smink, smaxk, sumrat, sumrsq, vmin, vmax, drrmax, adrr;
+  realtype tem, sqmax, saqk, qp, s, sqmaxk, saqj, sqmin;
+  realtype rsa, rsb, rsc, rsd, rd1a, rd1b, rd1c;
+  realtype rd2a, rd2b, rd3a, cest1, corr1; 
+  realtype ratp, ratm, qfac1, qfac2, bb, rrb;
+
+  /* The following are cutoffs and tolerances used by this routine */
+
+  rrcut  = RCONST(0.98);
+  vrrtol = RCONST(1.0e-4);
+  vrrt2  = RCONST(5.0e-4);
+  sqtol  = RCONST(1.0e-3);
+  rrtol  = RCONST(1.0e-2);
+
+  rr = ZERO;
+
+  /*  Index k corresponds to the degree of the interpolating polynomial. */
+  /*      k = 1 -> q-1          */
+  /*      k = 2 -> q            */
+  /*      k = 3 -> q+1          */
+
+  /*  Index i is a backward-in-time index, i = 1 -> current time, */
+  /*      i = 2 -> previous step, etc    */
+
+  /* get maxima, minima, and variances, and form quartic coefficients  */
+
+  for (k=1; k<=3; k++) {
+    smink = ssdat[1][k];
+    smaxk = ZERO;
+    
+    for (i=1; i<=5; i++) {
+      smink = SUNMIN(smink,ssdat[i][k]);
+      smaxk = SUNMAX(smaxk,ssdat[i][k]);
+    }
+    
+    if (smink < TINY*smaxk) {
+      kflag = -1;  
+      return(kflag);
+    }
+    smax[k] = smaxk;
+    ssmax[k] = smaxk*smaxk;
+
+    sumrat = ZERO;
+    sumrsq = ZERO;
+    for (i=1; i<=4; i++) {
+      rat[i][k] = ssdat[i][k]/ssdat[i+1][k];
+      sumrat = sumrat + rat[i][k];
+      sumrsq = sumrsq + rat[i][k]*rat[i][k];
+    } 
+    rav[k] = FOURTH*sumrat;
+    vrat[k] = SUNRabs(FOURTH*sumrsq - rav[k]*rav[k]);
+
+    qc[5][k] = ssdat[1][k]*ssdat[3][k] - ssdat[2][k]*ssdat[2][k];
+    qc[4][k] = ssdat[2][k]*ssdat[3][k] - ssdat[1][k]*ssdat[4][k];
+    qc[3][k] = ZERO;
+    qc[2][k] = ssdat[2][k]*ssdat[5][k] - ssdat[3][k]*ssdat[4][k];
+    qc[1][k] = ssdat[4][k]*ssdat[4][k] - ssdat[3][k]*ssdat[5][k];
+
+    for (i=1; i<=5; i++) {
+      qco[i][k] = qc[i][k];
+    }
+  }                            /* End of k loop */
+  
+  /* Isolate normal or nearly-normal matrix case. Three quartic will
+     have common or nearly-common roots in this case. 
+     Return a kflag = 1 if this procedure works. If three root 
+     differ more than vrrt2, return error kflag = -3.    */
+  
+  vmin = SUNMIN(vrat[1],SUNMIN(vrat[2],vrat[3]));
+  vmax = SUNMAX(vrat[1],SUNMAX(vrat[2],vrat[3]));
+  
+  if (vmin < vrrtol*vrrtol) {
+
+    if (vmax > vrrt2*vrrt2) {
+      kflag = -2;  
+      return(kflag);
+    } else {
+      rr = (rav[1] + rav[2] + rav[3])/THREE;
+      drrmax = ZERO;
+      for (k = 1;k<=3;k++) {
+        adrr = SUNRabs(rav[k] - rr);
+        drrmax = SUNMAX(drrmax, adrr);
+      }
+      if (drrmax > vrrt2) kflag = -3;    
+      kflag = 1;
+
+      /*  can compute charactistic root, drop to next section   */
+    }
+
+  } else {
+
+    /* use the quartics to get rr. */
+
+    if (SUNRabs(qco[1][1]) < TINY*ssmax[1]) {
+      kflag = -4;    
+      return(kflag);
+    }
+
+    tem = qco[1][2]/qco[1][1];
+    for (i=2; i<=5; i++) {
+      qco[i][2] = qco[i][2] - tem*qco[i][1];
+    }
+
+    qco[1][2] = ZERO;
+    tem = qco[1][3]/qco[1][1];
+    for (i=2; i<=5; i++) {
+      qco[i][3] = qco[i][3] - tem*qco[i][1];
+    }
+    qco[1][3] = ZERO;
+
+    if (SUNRabs(qco[2][2]) < TINY*ssmax[2]) {
+      kflag = -4;    
+      return(kflag);
+    }
+
+    tem = qco[2][3]/qco[2][2];
+    for (i=3; i<=5; i++) {
+      qco[i][3] = qco[i][3] - tem*qco[i][2];
+    }
+
+    if (SUNRabs(qco[4][3]) < TINY*ssmax[3]) {
+      kflag = -4;    
+      return(kflag);
+    }
+
+    rr = -qco[5][3]/qco[4][3];
+
+    if (rr < TINY || rr > HUNDRED) {
+      kflag = -5;   
+      return(kflag);
+    }
+
+    for (k=1; k<=3; k++)
+      qkr[k] = qc[5][k] + rr*(qc[4][k] + rr*rr*(qc[2][k] + rr*qc[1][k]));
+
+    sqmax = ZERO;
+    for (k=1; k<=3; k++) {
+      saqk = SUNRabs(qkr[k])/ssmax[k];
+      if (saqk > sqmax) sqmax = saqk;
+    } 
+
+    if (sqmax < sqtol) {
+      kflag = 2;
+
+      /*  can compute charactistic root, drop to "given rr,etc"   */
+
+    } else {
+
+      /* do Newton corrections to improve rr.  */
+
+      for (it=1; it<=3; it++) {
+        for (k=1; k<=3; k++) {
+          qp = qc[4][k] + rr*rr*(THREE*qc[2][k] + rr*FOUR*qc[1][k]);
+          drr[k] = ZERO;
+          if (SUNRabs(qp) > TINY*ssmax[k]) drr[k] = -qkr[k]/qp;
+          rrc[k] = rr + drr[k];
+        } 
+
+        for (k=1; k<=3; k++) {
+          s = rrc[k];
+          sqmaxk = ZERO;
+          for (j=1; j<=3; j++) {
+            qjk[j][k] = qc[5][j] + s*(qc[4][j] + s*s*(qc[2][j] + s*qc[1][j]));
+            saqj = SUNRabs(qjk[j][k])/ssmax[j];
+            if (saqj > sqmaxk) sqmaxk = saqj;
+          } 
+          sqmx[k] = sqmaxk;
+        }
+
+        sqmin = sqmx[1] + ONE;
+        for (k=1; k<=3; k++) {
+          if (sqmx[k] < sqmin) {
+            kmin = k;
+            sqmin = sqmx[k];
+          }
+        } 
+        rr = rrc[kmin];
+
+        if (sqmin < sqtol) {
+          kflag = 3;
+          /*  can compute charactistic root   */
+          /*  break out of Newton correction loop and drop to "given rr,etc" */ 
+          break;
+        } else {
+          for (j=1; j<=3; j++) {
+            qkr[j] = qjk[j][kmin];
+          }
+        }     
+      } /*  end of Newton correction loop  */ 
+
+      if (sqmin > sqtol) {
+        kflag = -6;
+        return(kflag);
+      }
+    } /*  end of if (sqmax < sqtol) else   */
+  } /*  end of if (vmin < vrrtol*vrrtol) else, quartics to get rr. */
+
+  /* given rr, find sigsq[k] and verify rr.  */
+  /* All positive kflag drop to this section  */
+  
+  for (k=1; k<=3; k++) {
+    rsa = ssdat[1][k];
+    rsb = ssdat[2][k]*rr;
+    rsc = ssdat[3][k]*rr*rr;
+    rsd = ssdat[4][k]*rr*rr*rr;
+    rd1a = rsa - rsb;
+    rd1b = rsb - rsc;
+    rd1c = rsc - rsd;
+    rd2a = rd1a - rd1b;
+    rd2b = rd1b - rd1c;
+    rd3a = rd2a - rd2b;
+    
+    if (SUNRabs(rd1b) < TINY*smax[k]) {
+      kflag = -7;
+      return(kflag);
+    }
+    
+    cest1 = -rd3a/rd1b;
+    if (cest1 < TINY || cest1 > FOUR) {
+      kflag = -7;
+      return(kflag);
+    }
+    corr1 = (rd2b/cest1)/(rr*rr);
+    sigsq[k] = ssdat[3][k] + corr1;
+  }
+  
+  if (sigsq[2] < TINY) {
+    kflag = -8;
+    return(kflag);
+  }
+  
+  ratp = sigsq[3]/sigsq[2];
+  ratm = sigsq[1]/sigsq[2];
+  qfac1 = FOURTH*(q*q - ONE);
+  qfac2 = TWO/(q - ONE);
+  bb = ratp*ratm - ONE - qfac1*ratp;
+  tem = ONE - qfac2*bb;
+  
+  if (SUNRabs(tem) < TINY) {
+    kflag = -8;
+    return(kflag);
+  }
+  
+  rrb = ONE/tem;
+  
+  if (SUNRabs(rrb - rr) > rrtol) {
+    kflag = -9;
+    return(kflag);
+  }
+  
+  /* Check to see if rr is above cutoff rrcut  */
+  if (rr > rrcut) {
+    if (kflag == 1) kflag = 4;
+    if (kflag == 2) kflag = 5;
+    if (kflag == 3) kflag = 6;
+  }
+  
+  /* All positive kflag returned at this point  */
+  
+  return(kflag);
+  
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions for rootfinding   
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * cvRcheck1
+ *
+ * This routine completes the initialization of rootfinding memory
+ * information, and checks whether g has a zero both at and very near
+ * the initial point of the IVP.
+ *
+ * This routine returns an int equal to:
+ *  CV_RTFUNC_FAIL < 0 if the g function failed, or
+ *  CV_SUCCESS     = 0 otherwise.
+ */
+
+static int cvRcheck1(CVodeMem cv_mem)
+{
+  int i, retval;
+  realtype smallh, hratio, tplus;
+  booleantype zroot;
+
+  for (i = 0; i < nrtfn; i++) iroots[i] = 0;
+  tlo = tn;
+  ttol = (SUNRabs(tn) + SUNRabs(h))*uround*HUNDRED;
+
+  /* Evaluate g at initial t and check for zero values. */
+  retval = gfun(tlo, zn[0], glo, user_data);
+  nge = 1;
+  if (retval != 0) return(CV_RTFUNC_FAIL);
+
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) {
+    if (SUNRabs(glo[i]) == ZERO) {
+      zroot = TRUE;
+      gactive[i] = FALSE;
+    }
+  }
+  if (!zroot) return(CV_SUCCESS);
+
+  /* Some g_i is zero at t0; look at g at t0+(small increment). */
+  hratio = SUNMAX(ttol/SUNRabs(h), PT1);
+  smallh = hratio*h;
+  tplus = tlo + smallh;
+  N_VLinearSum(ONE, zn[0], hratio, zn[1], y);
+  retval = gfun(tplus, y, ghi, user_data);
+  nge++;
+  if (retval != 0) return(CV_RTFUNC_FAIL);
+
+  /* We check now only the components of g which were exactly 0.0 at t0
+   * to see if we can 'activate' them. */
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i] && SUNRabs(ghi[i]) != ZERO) {
+      gactive[i] = TRUE;
+      glo[i] = ghi[i];
+    }
+  }
+  return(CV_SUCCESS);
+}
+
+/*
+ * cvRcheck2
+ *
+ * This routine checks for exact zeros of g at the last root found,
+ * if the last return was a root.  It then checks for a close pair of
+ * zeros (an error condition), and for a new root at a nearby point.
+ * The array glo = g(tlo) at the left endpoint of the search interval
+ * is adjusted if necessary to assure that all g_i are nonzero
+ * there, before returning to do a root search in the interval.
+ *
+ * On entry, tlo = tretlast is the last value of tret returned by
+ * CVode.  This may be the previous tn, the previous tout value,
+ * or the last root location.
+ *
+ * This routine returns an int equal to:
+ *     CV_RTFUNC_FAIL  < 0 if the g function failed, or
+ *     CLOSERT         = 3 if a close pair of zeros was found, or
+ *     RTFOUND         = 1 if a new zero of g was found near tlo, or
+ *     CV_SUCCESS      = 0 otherwise.
+ */
+
+static int cvRcheck2(CVodeMem cv_mem)
+{
+  int i, retval;
+  realtype smallh, hratio, tplus;
+  booleantype zroot;
+
+  if (irfnd == 0) return(CV_SUCCESS);
+
+  (void) CVodeGetDky(cv_mem, tlo, 0, y);
+  retval = gfun(tlo, y, glo, user_data);
+  nge++;
+  if (retval != 0) return(CV_RTFUNC_FAIL);
+
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) iroots[i] = 0;
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i]) continue;
+    if (SUNRabs(glo[i]) == ZERO) {
+      zroot = TRUE;
+      iroots[i] = 1;
+    }
+  }
+  if (!zroot) return(CV_SUCCESS);
+
+  /* One or more g_i has a zero at tlo.  Check g at tlo+smallh. */
+  ttol = (SUNRabs(tn) + SUNRabs(h))*uround*HUNDRED;
+  smallh = (h > ZERO) ? ttol : -ttol;
+  tplus = tlo + smallh;
+  if ( (tplus - tn)*h >= ZERO) {
+    hratio = smallh/h;
+    N_VLinearSum(ONE, y, hratio, zn[1], y);
+  } else {
+    (void) CVodeGetDky(cv_mem, tplus, 0, y);
+  }
+  retval = gfun(tplus, y, ghi, user_data);
+  nge++;
+  if (retval != 0) return(CV_RTFUNC_FAIL);
+
+  /* Check for close roots (error return), for a new zero at tlo+smallh,
+  and for a g_i that changed from zero to nonzero. */
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i]) continue;
+    if (SUNRabs(ghi[i]) == ZERO) {
+      if (iroots[i] == 1) return(CLOSERT);
+      zroot = TRUE;
+      iroots[i] = 1;
+    } else {
+      if (iroots[i] == 1) glo[i] = ghi[i];
+    }
+  }
+  if (zroot) return(RTFOUND);
+  return(CV_SUCCESS);
+}
+
+/*
+ * cvRcheck3
+ *
+ * This routine interfaces to cvRootfind to look for a root of g
+ * between tlo and either tn or tout, whichever comes first.
+ * Only roots beyond tlo in the direction of integration are sought.
+ *
+ * This routine returns an int equal to:
+ *     CV_RTFUNC_FAIL  < 0 if the g function failed, or
+ *     RTFOUND         = 1 if a root of g was found, or
+ *     CV_SUCCESS      = 0 otherwise.
+ */
+
+static int cvRcheck3(CVodeMem cv_mem)
+{
+  int i, ier, retval;
+
+  /* Set thi = tn or tout, whichever comes first; set y = y(thi). */
+  if (taskc == CV_ONE_STEP) {
+    thi = tn;
+    N_VScale(ONE, zn[0], y);
+  }
+  if (taskc == CV_NORMAL) {
+    if ( (toutc - tn)*h >= ZERO) {
+      thi = tn; 
+      N_VScale(ONE, zn[0], y);
+    } else {
+      thi = toutc;
+      (void) CVodeGetDky(cv_mem, thi, 0, y);
+    }
+  }
+
+  /* Set ghi = g(thi) and call cvRootfind to search (tlo,thi) for roots. */
+  retval = gfun(thi, y, ghi, user_data);
+  nge++;
+  if (retval != 0) return(CV_RTFUNC_FAIL);
+
+  ttol = (SUNRabs(tn) + SUNRabs(h))*uround*HUNDRED;
+  ier = cvRootfind(cv_mem);
+  if (ier == CV_RTFUNC_FAIL) return(CV_RTFUNC_FAIL);
+  for(i=0; i<nrtfn; i++) {
+    if(!gactive[i] && grout[i] != ZERO) gactive[i] = TRUE;
+  }
+  tlo = trout;
+  for (i = 0; i < nrtfn; i++) glo[i] = grout[i];
+
+  /* If no root found, return CV_SUCCESS. */  
+  if (ier == CV_SUCCESS) return(CV_SUCCESS);
+
+  /* If a root was found, interpolate to get y(trout) and return.  */
+  (void) CVodeGetDky(cv_mem, trout, 0, y);
+  return(RTFOUND);
+}
+
+/*
+ * cvRootfind
+ *
+ * This routine solves for a root of g(t) between tlo and thi, if
+ * one exists.  Only roots of odd multiplicity (i.e. with a change
+ * of sign in one of the g_i), or exact zeros, are found.
+ * Here the sign of tlo - thi is arbitrary, but if multiple roots
+ * are found, the one closest to tlo is returned.
+ *
+ * The method used is the Illinois algorithm, a modified secant method.
+ * Reference: Kathie L. Hiebert and Lawrence F. Shampine, Implicitly
+ * Defined Output Points for Solutions of ODEs, Sandia National
+ * Laboratory Report SAND80-0180, February 1980.
+ *
+ * This routine uses the following parameters for communication:
+ *
+ * nrtfn    = number of functions g_i, or number of components of
+ *            the vector-valued function g(t).  Input only.
+ *
+ * gfun     = user-defined function for g(t).  Its form is
+ *            (void) gfun(t, y, gt, user_data)
+ *
+ * rootdir  = in array specifying the direction of zero-crossings.
+ *            If rootdir[i] > 0, search for roots of g_i only if
+ *            g_i is increasing; if rootdir[i] < 0, search for
+ *            roots of g_i only if g_i is decreasing; otherwise
+ *            always search for roots of g_i.
+ *
+ * gactive  = array specifying whether a component of g should
+ *            or should not be monitored. gactive[i] is initially
+ *            set to TRUE for all i=0,...,nrtfn-1, but it may be
+ *            reset to FALSE if at the first step g[i] is 0.0
+ *            both at the I.C. and at a small perturbation of them.
+ *            gactive[i] is then set back on TRUE only after the 
+ *            corresponding g function moves away from 0.0.
+ *
+ * nge      = cumulative counter for gfun calls.
+ *
+ * ttol     = a convergence tolerance for trout.  Input only.
+ *            When a root at trout is found, it is located only to
+ *            within a tolerance of ttol.  Typically, ttol should
+ *            be set to a value on the order of
+ *               100 * UROUND * max (SUNRabs(tlo), SUNRabs(thi))
+ *            where UROUND is the unit roundoff of the machine.
+ *
+ * tlo, thi = endpoints of the interval in which roots are sought.
+ *            On input, these must be distinct, but tlo - thi may
+ *            be of either sign.  The direction of integration is
+ *            assumed to be from tlo to thi.  On return, tlo and thi
+ *            are the endpoints of the final relevant interval.
+ *
+ * glo, ghi = arrays of length nrtfn containing the vectors g(tlo)
+ *            and g(thi) respectively.  Input and output.  On input,
+ *            none of the glo[i] should be zero.
+ *
+ * trout    = root location, if a root was found, or thi if not.
+ *            Output only.  If a root was found other than an exact
+ *            zero of g, trout is the endpoint thi of the final
+ *            interval bracketing the root, with size at most ttol.
+ *
+ * grout    = array of length nrtfn containing g(trout) on return.
+ *
+ * iroots   = int array of length nrtfn with root information.
+ *            Output only.  If a root was found, iroots indicates
+ *            which components g_i have a root at trout.  For
+ *            i = 0, ..., nrtfn-1, iroots[i] = 1 if g_i has a root
+ *            and g_i is increasing, iroots[i] = -1 if g_i has a
+ *            root and g_i is decreasing, and iroots[i] = 0 if g_i
+ *            has no roots or g_i varies in the direction opposite
+ *            to that indicated by rootdir[i].
+ *
+ * This routine returns an int equal to:
+ *      CV_RTFUNC_FAIL  < 0 if the g function failed, or
+ *      RTFOUND         = 1 if a root of g was found, or
+ *      CV_SUCCESS      = 0 otherwise.
+ */
+
+static int cvRootfind(CVodeMem cv_mem)
+{
+  realtype alph, tmid, gfrac, maxfrac, fracint, fracsub;
+  int i, retval, imax, side, sideprev;
+  booleantype zroot, sgnchg;
+
+  imax = 0;
+
+  /* First check for change in sign in ghi or for a zero in ghi. */
+  maxfrac = ZERO;
+  zroot = FALSE;
+  sgnchg = FALSE;
+  for (i = 0;  i < nrtfn; i++) {
+    if(!gactive[i]) continue;
+    if (SUNRabs(ghi[i]) == ZERO) {
+      if(rootdir[i]*glo[i] <= ZERO) {
+        zroot = TRUE;
+      }
+    } else {
+      if ( (glo[i]*ghi[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) {
+        gfrac = SUNRabs(ghi[i]/(ghi[i] - glo[i]));
+        if (gfrac > maxfrac) {
+          sgnchg = TRUE;
+          maxfrac = gfrac;
+          imax = i;
+        }
+      }
+    }
+  }
+
+  /* If no sign change was found, reset trout and grout.  Then return
+     CV_SUCCESS if no zero was found, or set iroots and return RTFOUND.  */ 
+  if (!sgnchg) {
+    trout = thi;
+    for (i = 0; i < nrtfn; i++) grout[i] = ghi[i];
+    if (!zroot) return(CV_SUCCESS);
+    for (i = 0; i < nrtfn; i++) {
+      iroots[i] = 0;
+      if(!gactive[i]) continue;
+      if ( (SUNRabs(ghi[i]) == ZERO) && (rootdir[i]*glo[i] <= ZERO) )
+        iroots[i] = glo[i] > 0 ? -1:1;
+    }
+    return(RTFOUND);
+  }
+
+  /* Initialize alph to avoid compiler warning */
+  alph = ONE;
+
+  /* A sign change was found.  Loop to locate nearest root. */
+
+  side = 0;  sideprev = -1;
+  loop {                                    /* Looping point */
+
+    /* If interval size is already less than tolerance ttol, break. */
+      if (SUNRabs(thi - tlo) <= ttol) break;
+
+    /* Set weight alph.
+       On the first two passes, set alph = 1.  Thereafter, reset alph
+       according to the side (low vs high) of the subinterval in which
+       the sign change was found in the previous two passes.
+       If the sides were opposite, set alph = 1.
+       If the sides were the same, then double alph (if high side),
+       or halve alph (if low side).
+       The next guess tmid is the secant method value if alph = 1, but
+       is closer to tlo if alph < 1, and closer to thi if alph > 1.    */
+
+    if (sideprev == side) {
+      alph = (side == 2) ? alph*TWO : alph*HALF;
+    } else {
+      alph = ONE;
+    }
+
+    /* Set next root approximation tmid and get g(tmid).
+       If tmid is too close to tlo or thi, adjust it inward,
+       by a fractional distance that is between 0.1 and 0.5.  */
+    tmid = thi - (thi - tlo)*ghi[imax]/(ghi[imax] - alph*glo[imax]);
+    if (SUNRabs(tmid - tlo) < HALF*ttol) {
+      fracint = SUNRabs(thi - tlo)/ttol;
+      fracsub = (fracint > FIVE) ? PT1 : HALF/fracint;
+      tmid = tlo + fracsub*(thi - tlo);
+    }
+    if (SUNRabs(thi - tmid) < HALF*ttol) {
+      fracint = SUNRabs(thi - tlo)/ttol;
+      fracsub = (fracint > FIVE) ? PT1 : HALF/fracint;
+      tmid = thi - fracsub*(thi - tlo);
+    }
+
+    (void) CVodeGetDky(cv_mem, tmid, 0, y);
+    retval = gfun(tmid, y, grout, user_data);
+    nge++;
+    if (retval != 0) return(CV_RTFUNC_FAIL);
+
+    /* Check to see in which subinterval g changes sign, and reset imax.
+       Set side = 1 if sign change is on low side, or 2 if on high side.  */  
+    maxfrac = ZERO;
+    zroot = FALSE;
+    sgnchg = FALSE;
+    sideprev = side;
+    for (i = 0;  i < nrtfn; i++) {
+      if(!gactive[i]) continue;
+      if (SUNRabs(grout[i]) == ZERO) {
+        if(rootdir[i]*glo[i] <= ZERO) zroot = TRUE;
+      } else {
+        if ( (glo[i]*grout[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) {
+          gfrac = SUNRabs(grout[i]/(grout[i] - glo[i]));
+          if (gfrac > maxfrac) {
+            sgnchg = TRUE;
+            maxfrac = gfrac;
+            imax = i;
+          }
+        }
+      }
+    }
+    if (sgnchg) {
+      /* Sign change found in (tlo,tmid); replace thi with tmid. */
+      thi = tmid;
+      for (i = 0; i < nrtfn; i++) ghi[i] = grout[i];
+      side = 1;
+      /* Stop at root thi if converged; otherwise loop. */
+      if (SUNRabs(thi - tlo) <= ttol) break;
+      continue;  /* Return to looping point. */
+    }
+
+    if (zroot) {
+      /* No sign change in (tlo,tmid), but g = 0 at tmid; return root tmid. */
+      thi = tmid;
+      for (i = 0; i < nrtfn; i++) ghi[i] = grout[i];
+      break;
+    }
+
+    /* No sign change in (tlo,tmid), and no zero at tmid.
+       Sign change must be in (tmid,thi).  Replace tlo with tmid. */
+    tlo = tmid;
+    for (i = 0; i < nrtfn; i++) glo[i] = grout[i];
+    side = 2;
+    /* Stop at root thi if converged; otherwise loop back. */
+    if (SUNRabs(thi - tlo) <= ttol) break;
+
+  } /* End of root-search loop */
+
+  /* Reset trout and grout, set iroots, and return RTFOUND. */
+  trout = thi;
+  for (i = 0; i < nrtfn; i++) {
+    grout[i] = ghi[i];
+    iroots[i] = 0;
+    if(!gactive[i]) continue;
+    if ( (SUNRabs(ghi[i]) == ZERO) && (rootdir[i]*glo[i] <= ZERO) )
+      iroots[i] = glo[i] > 0 ? -1:1;
+    if ( (glo[i]*ghi[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) 
+      iroots[i] = glo[i] > 0 ? -1:1;
+  }
+  return(RTFOUND);
+}
+
+/* 
+ * =================================================================
+ * Internal EWT function
+ * =================================================================
+ */
+
+/*
+ * cvEwtSet
+ *
+ * This routine is responsible for setting the error weight vector ewt,
+ * according to tol_type, as follows:
+ *
+ * (1) ewt[i] = 1 / (reltol * SUNRabs(ycur[i]) + *abstol), i=0,...,neq-1
+ *     if tol_type = CV_SS
+ * (2) ewt[i] = 1 / (reltol * SUNRabs(ycur[i]) + abstol[i]), i=0,...,neq-1
+ *     if tol_type = CV_SV
+ *
+ * cvEwtSet returns 0 if ewt is successfully set as above to a
+ * positive vector and -1 otherwise. In the latter case, ewt is
+ * considered undefined.
+ *
+ * All the real work is done in the routines cvEwtSetSS, cvEwtSetSV.
+ */
+
+int cvEwtSet(N_Vector ycur, N_Vector weight, void *data)
+{
+  CVodeMem cv_mem;
+  int flag = 0;
+
+  /* data points to cv_mem here */
+
+  cv_mem = (CVodeMem) data;
+
+  switch(itol) {
+  case CV_SS: 
+    flag = cvEwtSetSS(cv_mem, ycur, weight);
+    break;
+  case CV_SV: 
+    flag = cvEwtSetSV(cv_mem, ycur, weight);
+    break;
+  }
+  
+  return(flag);
+}
+
+/*
+ * cvEwtSetSS
+ *
+ * This routine sets ewt as decribed above in the case tol_type = CV_SS.
+ * It tests for non-positive components before inverting. cvEwtSetSS
+ * returns 0 if ewt is successfully set to a positive vector
+ * and -1 otherwise. In the latter case, ewt is considered undefined.
+ */
+
+static int cvEwtSetSS(CVodeMem cv_mem, N_Vector ycur, N_Vector weight)
+{
+  N_VAbs(ycur, tempv);
+  N_VScale(reltol, tempv, tempv);
+  N_VAddConst(tempv, Sabstol, tempv);
+  if (N_VMin(tempv) <= ZERO) return(-1);
+  N_VInv(tempv, weight);
+  return(0);
+}
+
+/*
+ * cvEwtSetSV
+ *
+ * This routine sets ewt as decribed above in the case tol_type = CV_SV.
+ * It tests for non-positive components before inverting. cvEwtSetSV
+ * returns 0 if ewt is successfully set to a positive vector
+ * and -1 otherwise. In the latter case, ewt is considered undefined.
+ */
+
+static int cvEwtSetSV(CVodeMem cv_mem, N_Vector ycur, N_Vector weight)
+{
+  N_VAbs(ycur, tempv);
+  N_VLinearSum(reltol, tempv, ONE, Vabstol, tempv);
+  if (N_VMin(tempv) <= ZERO) return(-1);
+  N_VInv(tempv, weight);
+  return(0);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Error message handling functions   
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvProcessError is a high level error handling function.
+ * - If cv_mem==NULL it prints the error message to stderr.
+ * - Otherwise, it sets up and calls the error handling function 
+ *   pointed to by cv_ehfun.
+ */
+
+#define ehfun    (cv_mem->cv_ehfun)
+#define eh_data  (cv_mem->cv_eh_data)
+
+void cvProcessError(CVodeMem cv_mem, 
+                    int error_code, const char *module, const char *fname, 
+                    const char *msgfmt, ...)
+{
+  va_list ap;
+  char msg[256];
+
+  /* Initialize the argument pointer variable 
+     (msgfmt is the last required argument to cvProcessError) */
+
+  va_start(ap, msgfmt);
+
+  /* Compose the message */
+
+  vsprintf(msg, msgfmt, ap);
+
+  if (cv_mem == NULL) {    /* We write to stderr */
+#ifndef NO_FPRINTF_OUTPUT
+    fprintf(stderr, "\n[%s ERROR]  %s\n  ", module, fname);
+    fprintf(stderr, "%s\n\n", msg);
+#endif
+
+  } else {                 /* We can call ehfun */
+    ehfun(error_code, module, fname, msg, eh_data);
+  }
+
+  /* Finalize argument processing */
+  va_end(ap);
+
+  return;
+}
+
+/*
+ * cvErrHandler is the default error handling function.
+ * It sends the error message to the stream pointed to by cv_errfp.
+ */
+
+#define errfp    (cv_mem->cv_errfp)
+
+void cvErrHandler(int error_code, const char *module,
+                  const char *function, char *msg, void *data)
+{
+  CVodeMem cv_mem;
+  char err_type[10];
+
+  /* data points to cv_mem here */
+
+  cv_mem = (CVodeMem) data;
+
+  if (error_code == CV_WARNING)
+    sprintf(err_type,"WARNING");
+  else
+    sprintf(err_type,"ERROR");
+
+#ifndef NO_FPRINTF_OUTPUT
+  if (errfp!=NULL) {
+    fprintf(errfp,"\n[%s %s]  %s\n",module,err_type,function);
+    fprintf(errfp,"  %s\n\n",msg);
+  }
+#endif
+
+  return;
+}
diff --git a/src/cvode/cvode_band.c b/src/cvode/cvode_band.c
new file mode 100644
index 0000000..a4913d8
--- /dev/null
+++ b/src/cvode/cvode_band.c
@@ -0,0 +1,368 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVBAND linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvode/cvode_band.h>
+#include "cvode_direct_impl.h"
+#include "cvode_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* CVBAND linit, lsetup, lsolve, and lfree routines */
+
+static int cvBandInit(CVodeMem cv_mem);
+
+static int cvBandSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                       N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                       N_Vector vtemp2, N_Vector vtemp3);
+
+static int cvBandSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                       N_Vector ycur, N_Vector fcur);
+
+static int cvBandFree(CVodeMem cv_mem);
+
+/* Readability Replacements */
+
+#define lmm       (cv_mem->cv_lmm)
+#define f         (cv_mem->cv_f)
+#define nst       (cv_mem->cv_nst)
+#define tn        (cv_mem->cv_tn)
+#define h         (cv_mem->cv_h)
+#define gamma     (cv_mem->cv_gamma)
+#define gammap    (cv_mem->cv_gammap)
+#define gamrat    (cv_mem->cv_gamrat)
+#define ewt       (cv_mem->cv_ewt)
+#define nfe       (cv_mem->cv_nfe)
+#define linit     (cv_mem->cv_linit)
+#define lsetup    (cv_mem->cv_lsetup)
+#define lsolve    (cv_mem->cv_lsolve)
+#define lfree     (cv_mem->cv_lfree)
+#define lmem      (cv_mem->cv_lmem)
+#define vec_tmpl      (cv_mem->cv_tempv)
+#define setupNonNull  (cv_mem->cv_setupNonNull)
+
+#define mtype      (cvdls_mem->d_type)
+#define n          (cvdls_mem->d_n)
+#define jacDQ      (cvdls_mem->d_jacDQ)
+#define jac        (cvdls_mem->d_bjac)
+#define M          (cvdls_mem->d_M)
+#define mu         (cvdls_mem->d_mu)
+#define ml         (cvdls_mem->d_ml)
+#define smu        (cvdls_mem->d_smu)
+#define lpivots    (cvdls_mem->d_lpivots)
+#define savedJ     (cvdls_mem->d_savedJ)
+#define nstlj      (cvdls_mem->d_nstlj)
+#define nje        (cvdls_mem->d_nje)
+#define nfeDQ       (cvdls_mem->d_nfeDQ)
+#define J_data     (cvdls_mem->d_J_data)
+#define last_flag  (cvdls_mem->d_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * CVBand
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the band linear solver module.  CVBand first calls
+ * the existing lfree routine if this is not NULL.  It then sets the
+ * cv_linit, cv_lsetup, cv_lsolve, and cv_lfree fields in (*cvode_mem)
+ * to be cvBandInit, cvBandSetup, cvBandSolve, and cvBandFree,
+ * respectively.  It allocates memory for a structure of type
+ * CVDlsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure.  It sets setupNonNull in (*cvode_mem) to be
+ * TRUE, d_mu to be mupper, d_ml to be mlower, and the d_jac field to be 
+ * cvDlsBandDQJac.
+ * Finally, it allocates memory for M, savedJ, and pivot.  The CVBand
+ * return value is SUCCESS = 0, LMEM_FAIL = -1, or LIN_ILL_INPUT = -2.
+ *
+ * NOTE: The band linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVBand will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that the function 
+ *       N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+                  
+int CVBand(void *cvode_mem, long int N, long int mupper, long int mlower)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVBAND", "CVBand", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (vec_tmpl->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVBAND", "CVBand", MSGD_BAD_NVECTOR);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */  
+  linit  = cvBandInit;
+  lsetup = cvBandSetup;
+  lsolve = cvBandSolve;
+  lfree  = cvBandFree;
+  
+  /* Get memory for CVDlsMemRec */
+  cvdls_mem = NULL;
+  cvdls_mem = (CVDlsMem) malloc(sizeof(struct CVDlsMemRec));
+  if (cvdls_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVBAND", "CVBand", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_BAND;
+  
+  /* Initialize Jacobian-related data */
+  jacDQ = TRUE;
+  jac = NULL;
+  J_data = NULL;
+
+  last_flag = CVDLS_SUCCESS;
+
+  cvDlsInitializeCounters(cvdls_mem);
+
+  setupNonNull = TRUE;
+  
+  /* Load problem dimension */
+  n = N;
+
+  /* Load half-bandwiths in cvdls_mem */
+  ml = mlower;
+  mu = mupper;
+
+  /* Test ml and mu for legality */
+  if ((ml < 0) || (mu < 0) || (ml >= N) || (mu >= N)) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVBAND", "CVBand", MSGD_BAD_SIZES);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  smu = SUNMIN(N-1, mu + ml);
+
+  /* Allocate memory for M, savedJ, and pivot arrays */
+  M = NULL;
+  M = NewBandMat(N, mu, ml, smu);
+  if (M == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVBAND", "CVBand", MSGD_MEM_FAIL);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  savedJ = NULL;
+  savedJ = NewBandMat(N, mu, ml, mu);
+  if (savedJ == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVBAND", "CVBand", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  lpivots = NULL;
+  lpivots = NewLintArray(N);
+  if (lpivots == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVBAND", "CVBand", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    DestroyMat(savedJ);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvdls_mem;
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the band
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBandInit(CVodeMem cv_mem)
+{
+  CVDlsMem cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  cvDlsInitializeCounters(cvdls_mem);
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (jacDQ) {
+    jac = cvDlsBandDQJac;
+    J_data = cv_mem;
+  } else {
+    J_data = cv_mem->cv_user_data;
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the band linear solver.
+ * It makes a decision whether or not to call the Jacobian evaluation
+ * routine based on various state variables, and if not it uses the 
+ * saved copy.  In any case, it constructs the Newton matrix 
+ * M = I - gamma*J, updates counters, and calls the band LU 
+ * factorization routine.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBandSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                       N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                       N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  long int ier;
+  CVDlsMem cvdls_mem;
+  int retval;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVD_MSBJ) ||
+         ((convfail == CV_FAIL_BAD_J) && (dgamma < CVD_DGMAX)) ||
+         (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    BandCopy(savedJ, M, mu, ml);
+
+  } else {
+
+    /* If jok = FALSE, call jac routine for new J value */
+    nje++;
+    nstlj = nst;
+    *jcurPtr = TRUE;
+    SetToZero(M); 
+
+    retval = jac(n, mu, ml, tn, ypred, fpred, M, J_data, vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      cvProcessError(cv_mem, CVDLS_JACFUNC_UNRECVR, "CVBAND", "cvBandSetup", MSGD_JACFUNC_FAILED);
+      last_flag = CVDLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      last_flag = CVDLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    BandCopy(M, savedJ, mu, ml);
+
+  }
+  
+  /* Scale and add I to get M = I - gamma*J */
+  BandScale(-gamma, M);
+  AddIdentity(M);
+
+  /* Do LU factorization of M */
+  ier = BandGBTRF(M, lpivots);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  if (ier > 0) {
+    last_flag = ier;
+    return(1);
+  }
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandSolve
+ * -----------------------------------------------------------------
+ * This routine handles the solve operation for the band linear solver
+ * by calling the band backsolve routine.  The return value is 0.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBandSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                       N_Vector ycur, N_Vector fcur)
+{
+  CVDlsMem cvdls_mem;
+  realtype *bd;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  bd = N_VGetArrayPointer(b);
+
+  BandGBTRS(M, lpivots, bd);
+
+  /* If CV_BDF, scale the correction to account for change in gamma */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    N_VScale(TWO/(ONE + gamrat), b, b);
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the band linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBandFree(CVodeMem cv_mem)
+{
+  CVDlsMem cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  DestroyMat(M);
+  DestroyMat(savedJ);
+  DestroyArray(lpivots);
+  free(cvdls_mem);
+  cv_mem->cv_lmem = NULL;
+
+  return(0);
+}
+
diff --git a/src/cvode/cvode_bandpre.c b/src/cvode/cvode_bandpre.c
new file mode 100644
index 0000000..661e0dd
--- /dev/null
+++ b/src/cvode/cvode_bandpre.c
@@ -0,0 +1,490 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, Radu Serban,
+ *                and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file contains implementations of the banded difference
+ * quotient Jacobian-based preconditioner and solver routines for
+ * use with the CVSPILS linear solvers..
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvode_impl.h"
+#include "cvode_bandpre_impl.h"
+#include "cvode_spils_impl.h"
+
+#include <cvode/cvode_sptfqmr.h>
+#include <cvode/cvode_spbcgs.h>
+#include <cvode/cvode_spgmr.h>
+
+#include <sundials/sundials_math.h>
+
+#define MIN_INC_MULT RCONST(1000.0)
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+
+/* Prototypes of CVBandPrecSetup and CVBandPrecSolve */
+  
+static int CVBandPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+                           booleantype jok, booleantype *jcurPtr, 
+                           realtype gamma, void *bp_data,
+                           N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int CVBandPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+                           N_Vector r, N_Vector z, 
+                           realtype gamma, realtype delta,
+                           int lr, void *bp_data, N_Vector tmp);
+
+/* Prototype for CVBandPrecFree */
+
+static int CVBandPrecFree(CVodeMem cv_mem);
+
+/* Prototype for difference quotient Jacobian calculation routine */
+
+static int CVBandPDQJac(CVBandPrecData pdata,
+                        realtype t, N_Vector y, N_Vector fy, 
+                        N_Vector ftemp, N_Vector ytemp);
+
+/* Redability replacements */
+
+#define vec_tmpl (cv_mem->cv_tempv)
+
+/*
+ * -----------------------------------------------------------------
+ * Initialization, Free, and Get Functions
+ * NOTE: The band linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVBandPrecInit will
+ *       first test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int CVBandPrecInit(void *cvode_mem, long int N, long int mu, long int ml)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBandPrecData pdata;
+  long int mup, mlp, storagemu;
+  int flag;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBANDPRE", "CVBandPrecInit", MSGBP_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBANDPRE", "CVBandPrecInit", MSGBP_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  /* Test if the NVECTOR package is compatible with the BAND preconditioner */
+  if(vec_tmpl->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVBANDPRE", "CVBandPrecInit", MSGBP_BAD_NVECTOR);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  pdata = NULL;
+  pdata = (CVBandPrecData) malloc(sizeof *pdata);  /* Allocate data memory */
+  if (pdata == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBANDPRE", "CVBandPrecInit", MSGBP_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Load pointers and bandwidths into pdata block. */
+  pdata->cvode_mem = cvode_mem;
+  pdata->N = N;
+  pdata->mu = mup = SUNMIN(N-1, SUNMAX(0,mu));
+  pdata->ml = mlp = SUNMIN(N-1, SUNMAX(0,ml));
+
+  /* Initialize nfeBP counter */
+  pdata->nfeBP = 0;
+
+  /* Allocate memory for saved banded Jacobian approximation. */
+  pdata->savedJ = NULL;
+  pdata->savedJ = NewBandMat(N, mup, mlp, mup);
+  if (pdata->savedJ == NULL) {
+    free(pdata); pdata = NULL;
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBANDPRE", "CVBandPrecInit", MSGBP_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Allocate memory for banded preconditioner. */
+  storagemu = SUNMIN(N-1, mup+mlp);
+  pdata->savedP = NULL;
+  pdata->savedP = NewBandMat(N, mup, mlp, storagemu);
+  if (pdata->savedP == NULL) {
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBANDPRE", "CVBandPrecInit", MSGBP_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Allocate memory for pivot array. */
+  pdata->lpivots = NULL;
+  pdata->lpivots = NewLintArray(N);
+  if (pdata->lpivots == NULL) {
+    DestroyMat(pdata->savedP);
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBANDPRE", "CVBandPrecInit", MSGBP_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* make sure s_P_data is free from any previous allocations */
+  if (cvspils_mem->s_pfree != NULL) {
+    cvspils_mem->s_pfree(cv_mem);
+  }
+
+  /* Point to the new P_data field in the SPILS memory */
+  cvspils_mem->s_P_data = pdata;
+
+  /* Attach the pfree function */
+  cvspils_mem->s_pfree = CVBandPrecFree;
+
+  /* Attach preconditioner solve and setup functions */
+  flag = CVSpilsSetPreconditioner(cvode_mem, CVBandPrecSetup, CVBandPrecSolve);
+
+  return(flag);
+}
+
+int CVBandPrecGetWorkSpace(void *cvode_mem, long int *lenrwBP, long int *leniwBP)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBandPrecData pdata;
+  long int N, ml, mu, smu;
+
+  
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBANDPRE", "CVBandPrecGetWorkSpace", MSGBP_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBANDPRE", "CVBandPrecGetWorkSpace", MSGBP_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  if (cvspils_mem->s_P_data == NULL) {
+    cvProcessError(cv_mem, CVSPILS_PMEM_NULL, "CVBANDPRE", "CVBandPrecGetWorkSpace", MSGBP_PMEM_NULL);
+    return(CVSPILS_PMEM_NULL);
+  } 
+  pdata = (CVBandPrecData) cvspils_mem->s_P_data;
+
+  N   = pdata->N;
+  mu  = pdata->mu;
+  ml  = pdata->ml;
+  smu = SUNMIN( N-1, mu + ml);
+
+  *leniwBP = pdata->N;
+  *lenrwBP = N * ( 2*ml + smu + mu + 2 );
+
+  return(CVSPILS_SUCCESS);
+}
+
+int CVBandPrecGetNumRhsEvals(void *cvode_mem, long int *nfevalsBP)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBandPrecData pdata;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBANDPRE", "CVBandPrecGetNumRhsEvals", MSGBP_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBANDPRE", "CVBandPrecGetNumRhsEvals", MSGBP_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  if (cvspils_mem->s_P_data == NULL) {
+    cvProcessError(cv_mem, CVSPILS_PMEM_NULL, "CVBANDPRE", "CVBandPrecGetNumRhsEvals", MSGBP_PMEM_NULL);
+    return(CVSPILS_PMEM_NULL);
+  } 
+  pdata = (CVBandPrecData) cvspils_mem->s_P_data;
+
+  *nfevalsBP = pdata->nfeBP;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/* Readability Replacements */
+
+#define N       (pdata->N)
+#define mu      (pdata->mu)
+#define ml      (pdata->ml)
+#define lpivots (pdata->lpivots)
+#define savedJ  (pdata->savedJ)
+#define savedP  (pdata->savedP)
+#define nfeBP   (pdata->nfeBP)
+
+/*
+ * -----------------------------------------------------------------
+ * CVBandPrecSetup
+ * -----------------------------------------------------------------
+ * Together CVBandPrecSetup and CVBandPrecSolve use a banded
+ * difference quotient Jacobian to create a preconditioner.
+ * CVBandPrecSetup calculates a new J, if necessary, then
+ * calculates P = I - gamma*J, and does an LU factorization of P.
+ *
+ * The parameters of CVBandPrecSetup are as follows:
+ *
+ * t       is the current value of the independent variable.
+ *
+ * y       is the current value of the dependent variable vector,
+ *         namely the predicted value of y(t).
+ *
+ * fy      is the vector f(t,y).
+ *
+ * jok     is an input flag indicating whether Jacobian-related
+ *         data needs to be recomputed, as follows:
+ *           jok == FALSE means recompute Jacobian-related data
+ *                  from scratch.
+ *           jok == TRUE means that Jacobian data from the
+ *                  previous PrecSetup call will be reused
+ *                  (with the current value of gamma).
+ *         A CVBandPrecSetup call with jok == TRUE should only
+ *         occur after a call with jok == FALSE.
+ *
+ * *jcurPtr is a pointer to an output integer flag which is
+ *          set by CVBandPrecond as follows:
+ *            *jcurPtr = TRUE if Jacobian data was recomputed.
+ *            *jcurPtr = FALSE if Jacobian data was not recomputed,
+ *                       but saved data was reused.
+ *
+ * gamma   is the scalar appearing in the Newton matrix.
+ *
+ * bp_data is a pointer to preconditoner data (set by CVBandPrecInit)
+ *
+ * tmp1, tmp2, and tmp3 are pointers to memory allocated
+ *           for vectors of length N for work space. This
+ *           routine uses only tmp1 and tmp2.
+ *
+ * The value to be returned by the CVBandPrecSetup function is
+ *   0  if successful, or
+ *   1  if the band factorization failed.
+ * -----------------------------------------------------------------
+ */
+
+static int CVBandPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+                           booleantype jok, booleantype *jcurPtr, 
+                           realtype gamma, void *bp_data,
+                           N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  CVBandPrecData pdata;
+  CVodeMem cv_mem;
+  int retval;
+  long int ier;
+
+  /* Assume matrix and lpivots have already been allocated. */
+  pdata = (CVBandPrecData) bp_data;
+
+  cv_mem = (CVodeMem) pdata->cvode_mem;
+
+  if (jok) {
+
+    /* If jok = TRUE, use saved copy of J. */
+    *jcurPtr = FALSE;
+    BandCopy(savedJ, savedP, mu, ml);
+
+  } else {
+
+    /* If jok = FALSE, call CVBandPDQJac for new J value. */
+    *jcurPtr = TRUE;
+    SetToZero(savedJ);
+
+    retval = CVBandPDQJac(pdata, t, y, fy, tmp1, tmp2);
+    if (retval < 0) {
+      cvProcessError(cv_mem, -1, "CVBANDPRE", "CVBandPrecSetup", MSGBP_RHSFUNC_FAILED);
+      return(-1);
+    }
+    if (retval > 0) {
+      return(1);
+    }
+
+    BandCopy(savedJ, savedP, mu, ml);
+
+  }
+  
+  /* Scale and add I to get savedP = I - gamma*J. */
+  BandScale(-gamma, savedP);
+  AddIdentity(savedP);
+ 
+  /* Do LU factorization of matrix. */
+  ier = BandGBTRF(savedP, lpivots);
+ 
+  /* Return 0 if the LU was complete; otherwise return 1. */
+  if (ier > 0) return(1);
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVBandPrecSolve
+ * -----------------------------------------------------------------
+ * CVBandPrecSolve solves a linear system P z = r, where P is the
+ * matrix computed by CVBandPrecond.
+ *
+ * The parameters of CVBandPrecSolve used here are as follows:
+ *
+ * r is the right-hand side vector of the linear system.
+ *
+ * bp_data is a pointer to preconditoner data (set by CVBandPrecInit)
+ *
+ * z is the output vector computed by CVBandPrecSolve.
+ *
+ * The value returned by the CVBandPrecSolve function is always 0,
+ * indicating success.
+ * -----------------------------------------------------------------
+ */ 
+
+static int CVBandPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+                           N_Vector r, N_Vector z, 
+                           realtype gamma, realtype delta,
+                           int lr, void *bp_data, N_Vector tmp)
+{
+  CVBandPrecData pdata;
+  realtype *zd;
+
+  /* Assume matrix and lpivots have already been allocated. */
+  pdata = (CVBandPrecData) bp_data;
+
+  /* Copy r to z. */
+  N_VScale(ONE, r, z);
+
+  /* Do band backsolve on the vector z. */
+  zd = N_VGetArrayPointer(z);
+
+  BandGBTRS(savedP, lpivots, zd);
+
+  return(0);
+}
+
+
+static int CVBandPrecFree(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  CVBandPrecData pdata;
+
+  if (cv_mem->cv_lmem == NULL) return(0);
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+  
+  if (cvspils_mem->s_P_data == NULL) return(0);
+  pdata = (CVBandPrecData) cvspils_mem->s_P_data;
+
+  DestroyMat(savedJ);
+  DestroyMat(savedP);
+  DestroyArray(lpivots);
+
+  free(pdata);
+  pdata = NULL;
+
+  return(0);
+}
+
+#define ewt       (cv_mem->cv_ewt)
+#define uround    (cv_mem->cv_uround)
+#define h         (cv_mem->cv_h)
+#define f         (cv_mem->cv_f)
+#define user_data (cv_mem->cv_user_data)
+
+/*
+ * -----------------------------------------------------------------
+ * CVBandPDQJac
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation to
+ * the Jacobian of f(t,y). It assumes that a band matrix of type
+ * DlsMat is stored column-wise, and that elements within each column
+ * are contiguous. This makes it possible to get the address of a column
+ * of J via the macro BAND_COL and to write a simple for loop to set
+ * each of the elements of a column in succession.
+ * -----------------------------------------------------------------
+ */
+
+static int CVBandPDQJac(CVBandPrecData pdata, 
+                        realtype t, N_Vector y, N_Vector fy, 
+                        N_Vector ftemp, N_Vector ytemp)
+{
+  CVodeMem cv_mem;
+  realtype fnorm, minInc, inc, inc_inv, srur;
+  long int group, i, j, width, ngroups, i1, i2;
+  realtype *col_j, *ewt_data, *fy_data, *ftemp_data, *y_data, *ytemp_data;
+  int retval;
+
+  cv_mem = (CVodeMem) pdata->cvode_mem;
+
+  /* Obtain pointers to the data for ewt, fy, ftemp, y, ytemp. */
+  ewt_data   = N_VGetArrayPointer(ewt);
+  fy_data    = N_VGetArrayPointer(fy);
+  ftemp_data = N_VGetArrayPointer(ftemp);
+  y_data     = N_VGetArrayPointer(y);
+  ytemp_data = N_VGetArrayPointer(ytemp);
+
+  /* Load ytemp with y = predicted y vector. */
+  N_VScale(ONE, y, ytemp);
+
+  /* Set minimum increment based on uround and norm of f. */
+  srur = SUNRsqrt(uround);
+  fnorm = N_VWrmsNorm(fy, ewt);
+  minInc = (fnorm != ZERO) ?
+           (MIN_INC_MULT * SUNRabs(h) * uround * N * fnorm) : ONE;
+
+  /* Set bandwidth and number of column groups for band differencing. */
+  width = ml + mu + 1;
+  ngroups = SUNMIN(width, N);
+  
+  for (group = 1; group <= ngroups; group++) {
+    
+    /* Increment all y_j in group. */
+    for(j = group-1; j < N; j += width) {
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      ytemp_data[j] += inc;
+    }
+
+    /* Evaluate f with incremented y. */
+
+    retval = f(t, ytemp, ftemp, user_data);
+    nfeBP++;
+    if (retval != 0) return(retval);
+
+    /* Restore ytemp, then form and load difference quotients. */
+    for (j = group-1; j < N; j += width) {
+      ytemp_data[j] = y_data[j];
+      col_j = BAND_COL(savedJ,j);
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-mu);
+      i2 = SUNMIN(j+ml, N-1);
+      for (i=i1; i <= i2; i++)
+        BAND_COL_ELEM(col_j,i,j) =
+          inc_inv * (ftemp_data[i] - fy_data[i]);
+    }
+  }
+
+  return(0);
+}
diff --git a/src/cvode/cvode_bandpre_impl.h b/src/cvode/cvode_bandpre_impl.h
new file mode 100644
index 0000000..9b2b7ec
--- /dev/null
+++ b/src/cvode/cvode_bandpre_impl.h
@@ -0,0 +1,81 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Michael Wittman, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the CVBANDPRE module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVBANDPRE_IMPL_H
+#define _CVBANDPRE_IMPL_H
+
+#include <cvode/cvode_bandpre.h>
+#include <sundials/sundials_band.h>
+#include <sundials/sundials_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVBandPrecData
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVBandPrecDataRec {
+
+  /* Data set by user in CVBandPrecInit */
+
+  long int N;
+  long int ml, mu;
+
+  /* Data set by CVBandPrecSetup */
+
+  DlsMat savedJ;
+  DlsMat savedP;
+  long int *lpivots;
+
+  /* Rhs calls */
+
+  long int nfeBP;
+
+  /* Pointer to cvode_mem */
+
+  void *cvode_mem;
+
+} *CVBandPrecData;
+
+/*
+ * -----------------------------------------------------------------
+ * CVBANDPRE error messages
+ * -----------------------------------------------------------------
+ */
+
+#define MSGBP_MEM_NULL       "Integrator memory is NULL."
+#define MSGBP_LMEM_NULL      "Linear solver memory is NULL. One of the SPILS linear solvers must be attached."
+#define MSGBP_MEM_FAIL       "A memory request failed."
+#define MSGBP_BAD_NVECTOR    "A required vector operation is not implemented."
+#define MSGBP_PMEM_NULL      "Band preconditioner memory is NULL. CVBandPrecInit must be called."
+#define MSGBP_RHSFUNC_FAILED "The right-hand side routine failed in an unrecoverable manner."
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvode/cvode_bbdpre.c b/src/cvode/cvode_bbdpre.c
new file mode 100644
index 0000000..4a3f63a
--- /dev/null
+++ b/src/cvode/cvode_bbdpre.c
@@ -0,0 +1,562 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Michael Wittman, Alan C. Hindmarsh, Radu Serban,
+ *                and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file contains implementations of routines for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with CVODE, a CVSPILS linear
+ * solver, and the parallel implementation of NVECTOR.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvode_impl.h"
+#include "cvode_bbdpre_impl.h"
+#include "cvode_spils_impl.h"
+
+#include <cvode/cvode_sptfqmr.h>
+#include <cvode/cvode_spbcgs.h>
+#include <cvode/cvode_spgmr.h>
+
+#include <sundials/sundials_math.h>
+
+#define MIN_INC_MULT RCONST(1000.0)
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+
+/* Prototypes of functions CVBBDPrecSetup and CVBBDPrecSolve */
+
+static int CVBBDPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+                          booleantype jok, booleantype *jcurPtr, 
+                          realtype gamma, void *bbd_data, 
+                          N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int CVBBDPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+                          N_Vector r, N_Vector z, 
+                          realtype gamma, realtype delta,
+                          int lr, void *bbd_data, N_Vector tmp);
+
+/* Prototype for CVBBDPrecFree */
+static int CVBBDPrecFree(CVodeMem cv_mem);
+
+
+/* Prototype for difference quotient Jacobian calculation routine */
+
+static int CVBBDDQJac(CVBBDPrecData pdata, realtype t, 
+                      N_Vector y, N_Vector gy, 
+                      N_Vector ytemp, N_Vector gtemp);
+
+/* Redability replacements */
+
+#define uround   (cv_mem->cv_uround)
+#define vec_tmpl (cv_mem->cv_tempv)
+
+/*
+ * -----------------------------------------------------------------
+ * User-Callable Functions: initialization, reinit and free
+ * -----------------------------------------------------------------
+ */
+
+int CVBBDPrecInit(void *cvode_mem, long int Nlocal, 
+                   long int mudq, long int mldq,
+                   long int mukeep, long int mlkeep, 
+                   realtype dqrely, 
+                   CVLocalFn gloc, CVCommFn cfn)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBBDPrecData pdata;
+  long int muk, mlk, storage_mu;
+  int flag;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  /* Test if the NVECTOR package is compatible with the BLOCK BAND preconditioner */
+  if(vec_tmpl->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_BAD_NVECTOR);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Allocate data memory */
+  pdata = NULL;
+  pdata = (CVBBDPrecData) malloc(sizeof *pdata);  
+  if (pdata == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Set pointers to gloc and cfn; load half-bandwidths */
+  pdata->cvode_mem = cvode_mem;
+  pdata->gloc = gloc;
+  pdata->cfn = cfn;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0,mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0,mldq));
+  muk = SUNMIN(Nlocal-1, SUNMAX(0,mukeep));
+  mlk = SUNMIN(Nlocal-1, SUNMAX(0,mlkeep));
+  pdata->mukeep = muk;
+  pdata->mlkeep = mlk;
+
+  /* Allocate memory for saved Jacobian */
+  pdata->savedJ = NewBandMat(Nlocal, muk, mlk, muk);
+  if (pdata->savedJ == NULL) { 
+    free(pdata); pdata = NULL; 
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL); 
+  }
+
+  /* Allocate memory for preconditioner matrix */
+  storage_mu = SUNMIN(Nlocal-1, muk + mlk);
+  pdata->savedP = NULL;
+  pdata->savedP = NewBandMat(Nlocal, muk, mlk, storage_mu);
+  if (pdata->savedP == NULL) {
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+  /* Allocate memory for lpivots */
+  pdata->lpivots = NULL;
+  pdata->lpivots = NewLintArray(Nlocal);
+  if (pdata->lpivots == NULL) {
+    DestroyMat(pdata->savedP);
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Set pdata->dqrely based on input dqrely (0 implies default). */
+  pdata->dqrely = (dqrely > ZERO) ? dqrely : SUNRsqrt(uround);
+
+  /* Store Nlocal to be used in CVBBDPrecSetup */
+  pdata->n_local = Nlocal;
+
+  /* Set work space sizes and initialize nge */
+  pdata->rpwsize = Nlocal*(muk + 2*mlk + storage_mu + 2);
+  pdata->ipwsize = Nlocal;
+  pdata->nge = 0;
+
+  /* make sure s_P_data is free from any previous allocations */
+  if (cvspils_mem->s_pfree != NULL) {
+    cvspils_mem->s_pfree(cv_mem);
+  }
+
+  /* Point to the new P_data field in the SPILS memory */
+  cvspils_mem->s_P_data = pdata;
+
+  /* Attach the pfree function */
+  cvspils_mem->s_pfree = CVBBDPrecFree;
+
+  /* Attach preconditioner solve and setup functions */
+  flag = CVSpilsSetPreconditioner(cvode_mem, CVBBDPrecSetup, CVBBDPrecSolve);
+
+  return(flag);
+}
+
+
+int CVBBDPrecReInit(void *cvode_mem, 
+                    long int mudq, long int mldq, 
+                    realtype dqrely)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBBDPrecData pdata;
+  long int Nlocal;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBBDPRE", "CVBBDPrecReInit", MSGBBD_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBBDPRE", "CVBBDPrecReInit", MSGBBD_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  /* Test if the preconditioner data is non-NULL */
+  if (cvspils_mem->s_P_data == NULL) {
+    cvProcessError(cv_mem, CVSPILS_PMEM_NULL, "CVBBDPRE", "CVBBDPrecReInit", MSGBBD_PMEM_NULL);
+    return(CVSPILS_PMEM_NULL);
+  } 
+  pdata = (CVBBDPrecData) cvspils_mem->s_P_data;
+
+  /* Load half-bandwidths */
+  Nlocal = pdata->n_local;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0,mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0,mldq));
+
+  /* Set pdata->dqrely based on input dqrely (0 implies default). */
+  pdata->dqrely = (dqrely > ZERO) ? dqrely : SUNRsqrt(uround);
+
+  /* Re-initialize nge */
+  pdata->nge = 0;
+
+  return(CVSPILS_SUCCESS);
+}
+
+int CVBBDPrecGetWorkSpace(void *cvode_mem, long int *lenrwBBDP, long int *leniwBBDP)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBBDPrecData pdata;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBBDPRE", "CVBBDPrecGetWorkSpace", MSGBBD_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBBDPRE", "CVBBDPrecGetWorkSpace", MSGBBD_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  if (cvspils_mem->s_P_data == NULL) {
+    cvProcessError(cv_mem, CVSPILS_PMEM_NULL, "CVBBDPRE", "CVBBDPrecGetWorkSpace", MSGBBD_PMEM_NULL);
+    return(CVSPILS_PMEM_NULL);
+  } 
+  pdata = (CVBBDPrecData) cvspils_mem->s_P_data;
+
+  *lenrwBBDP = pdata->rpwsize;
+  *leniwBBDP = pdata->ipwsize;
+
+  return(CVSPILS_SUCCESS);
+}
+
+int CVBBDPrecGetNumGfnEvals(void *cvode_mem, long int *ngevalsBBDP)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBBDPrecData pdata;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBBDPRE", "CVBBDPrecGetNumGfnEvals", MSGBBD_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBBDPRE", "CVBBDPrecGetNumGfnEvals", MSGBBD_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  if (cvspils_mem->s_P_data == NULL) {
+    cvProcessError(cv_mem, CVSPILS_PMEM_NULL, "CVBBDPRE", "CVBBDPrecGetNumGfnEvals", MSGBBD_PMEM_NULL);
+    return(CVSPILS_PMEM_NULL);
+  } 
+  pdata = (CVBBDPrecData) cvspils_mem->s_P_data;
+
+  *ngevalsBBDP = pdata->nge;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/* Readability Replacements */
+
+#define Nlocal  (pdata->n_local)
+#define mudq    (pdata->mudq)
+#define mldq    (pdata->mldq)
+#define mukeep  (pdata->mukeep)
+#define mlkeep  (pdata->mlkeep)
+#define dqrely  (pdata->dqrely)
+#define gloc    (pdata->gloc)
+#define cfn     (pdata->cfn)
+#define savedJ  (pdata->savedJ)
+#define savedP  (pdata->savedP)
+#define lpivots (pdata->lpivots)
+#define nge     (pdata->nge)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBBDPrecSetup                                      
+ * -----------------------------------------------------------------
+ * CVBBDPrecSetup generates and factors a banded block of the
+ * preconditioner matrix on each processor, via calls to the
+ * user-supplied gloc and cfn functions. It uses difference
+ * quotient approximations to the Jacobian elements.
+ *
+ * CVBBDPrecSetup calculates a new J,if necessary, then calculates
+ * P = I - gamma*J, and does an LU factorization of P.
+ *
+ * The parameters of CVBBDPrecSetup used here are as follows:
+ *
+ * t       is the current value of the independent variable.
+ *
+ * y       is the current value of the dependent variable vector,
+ *         namely the predicted value of y(t).
+ *
+ * fy      is the vector f(t,y).
+ *
+ * jok     is an input flag indicating whether Jacobian-related
+ *         data needs to be recomputed, as follows:
+ *           jok == FALSE means recompute Jacobian-related data
+ *                  from scratch.
+ *           jok == TRUE  means that Jacobian data from the
+ *                  previous CVBBDPrecon call can be reused
+ *                  (with the current value of gamma).
+ *         A CVBBDPrecon call with jok == TRUE should only occur
+ *         after a call with jok == FALSE.
+ *
+ * jcurPtr is a pointer to an output integer flag which is
+ *         set by CVBBDPrecon as follows:
+ *           *jcurPtr = TRUE if Jacobian data was recomputed.
+ *           *jcurPtr = FALSE if Jacobian data was not recomputed,
+ *                      but saved data was reused.
+ *
+ * gamma   is the scalar appearing in the Newton matrix.
+ *
+ * bbd_data is a pointer to the preconditioner data set by
+ *          CVBBDPrecInit
+ *
+ * tmp1, tmp2, and tmp3 are pointers to memory allocated
+ *           for NVectors which are be used by CVBBDPrecSetup
+ *           as temporary storage or work space.
+ *
+ * Return value:
+ * The value returned by this CVBBDPrecSetup function is the int
+ *   0  if successful,
+ *   1  for a recoverable error (step will be retried).
+ * -----------------------------------------------------------------
+ */
+
+static int CVBBDPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+                          booleantype jok, booleantype *jcurPtr, 
+                          realtype gamma, void *bbd_data, 
+                          N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  long int ier;
+  CVBBDPrecData pdata;
+  CVodeMem cv_mem;
+  int retval;
+
+  pdata = (CVBBDPrecData) bbd_data;
+
+  cv_mem = (CVodeMem) pdata->cvode_mem;
+
+  if (jok) {
+
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    BandCopy(savedJ, savedP, mukeep, mlkeep);
+
+  } else {
+
+    /* Otherwise call CVBBDDQJac for new J value */
+    *jcurPtr = TRUE;
+    SetToZero(savedJ);
+
+    retval = CVBBDDQJac(pdata, t, y, tmp1, tmp2, tmp3);
+    if (retval < 0) {
+      cvProcessError(cv_mem, -1, "CVBBDPRE", "CVBBDPrecSetup", MSGBBD_FUNC_FAILED);
+      return(-1);
+    }
+    if (retval > 0) {
+      return(1);
+    }
+
+    BandCopy(savedJ, savedP, mukeep, mlkeep);
+
+  }
+  
+  /* Scale and add I to get P = I - gamma*J */
+  BandScale(-gamma, savedP);
+  AddIdentity(savedP);
+ 
+  /* Do LU factorization of P in place */
+  ier = BandGBTRF(savedP, lpivots);
+ 
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  if (ier > 0) return(1);
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBBDPrecSolve
+ * -----------------------------------------------------------------
+ * CVBBDPrecSolve solves a linear system P z = r, with the
+ * band-block-diagonal preconditioner matrix P generated and
+ * factored by CVBBDPrecSetup.
+ *
+ * The parameters of CVBBDPrecSolve used here are as follows:
+ *
+ * r is the right-hand side vector of the linear system.
+ *
+ * bbd_data is a pointer to the preconditioner data set by
+ *   CVBBDPrecInit.
+ *
+ * z is the output vector computed by CVBBDPrecSolve.
+ *
+ * The value returned by the CVBBDPrecSolve function is always 0,
+ * indicating success.
+ * -----------------------------------------------------------------
+ */
+
+static int CVBBDPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+                          N_Vector r, N_Vector z, 
+                          realtype gamma, realtype delta,
+                          int lr, void *bbd_data, N_Vector tmp)
+{
+  CVBBDPrecData pdata;
+  realtype *zd;
+
+  pdata = (CVBBDPrecData) bbd_data;
+
+  /* Copy r to z, then do backsolve and return */
+  N_VScale(ONE, r, z);
+  
+  zd = N_VGetArrayPointer(z);
+
+  BandGBTRS(savedP, lpivots, zd);
+
+  return(0);
+}
+
+
+static int CVBBDPrecFree(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  CVBBDPrecData pdata;
+  
+  if (cv_mem->cv_lmem == NULL) return(0);
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+  
+  if (cvspils_mem->s_P_data == NULL) return(0);
+  pdata = (CVBBDPrecData) cvspils_mem->s_P_data;
+
+  DestroyMat(savedJ);
+  DestroyMat(savedP);
+  DestroyArray(lpivots);
+
+  free(pdata);
+  pdata = NULL;
+
+  return(0);
+}
+
+
+#define ewt       (cv_mem->cv_ewt)
+#define h         (cv_mem->cv_h)
+#define user_data (cv_mem->cv_user_data)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVBBDDQJac
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation
+ * to the local block of the Jacobian of g(t,y). It assumes that a
+ * band matrix of type DlsMat is stored columnwise, and that elements
+ * within each column are contiguous. All matrix elements are generated
+ * as difference quotients, by way of calls to the user routine gloc.
+ * By virtue of the band structure, the number of these calls is
+ * bandwidth + 1, where bandwidth = mldq + mudq + 1.
+ * But the band matrix kept has bandwidth = mlkeep + mukeep + 1.
+ * This routine also assumes that the local elements of a vector are
+ * stored contiguously.
+ * -----------------------------------------------------------------
+ */
+
+static int CVBBDDQJac(CVBBDPrecData pdata, realtype t, 
+                      N_Vector y, N_Vector gy, 
+                      N_Vector ytemp, N_Vector gtemp)
+{
+  CVodeMem cv_mem;
+  realtype gnorm, minInc, inc, inc_inv;
+  long int group, i, j, width, ngroups, i1, i2;
+  realtype *y_data, *ewt_data, *gy_data, *gtemp_data, *ytemp_data, *col_j;
+  int retval;
+
+  cv_mem = (CVodeMem) pdata->cvode_mem;
+
+  /* Load ytemp with y = predicted solution vector */
+  N_VScale(ONE, y, ytemp);
+
+  /* Call cfn and gloc to get base value of g(t,y) */
+  if (cfn != NULL) {
+    retval = cfn(Nlocal, t, y, user_data);
+    if (retval != 0) return(retval);
+  }
+
+  retval = gloc(Nlocal, t, ytemp, gy, user_data);
+  nge++;
+  if (retval != 0) return(retval);
+
+  /* Obtain pointers to the data for various vectors */
+  y_data     =  N_VGetArrayPointer(y);
+  gy_data    =  N_VGetArrayPointer(gy);
+  ewt_data   =  N_VGetArrayPointer(ewt);
+  ytemp_data =  N_VGetArrayPointer(ytemp);
+  gtemp_data =  N_VGetArrayPointer(gtemp);
+
+  /* Set minimum increment based on uround and norm of g */
+  gnorm = N_VWrmsNorm(gy, ewt);
+  minInc = (gnorm != ZERO) ?
+           (MIN_INC_MULT * SUNRabs(h) * uround * Nlocal * gnorm) : ONE;
+
+  /* Set bandwidth and number of column groups for band differencing */
+  width = mldq + mudq + 1;
+  ngroups = SUNMIN(width, Nlocal);
+
+  /* Loop over groups */  
+  for (group=1; group <= ngroups; group++) {
+    
+    /* Increment all y_j in group */
+    for(j=group-1; j < Nlocal; j+=width) {
+      inc = SUNMAX(dqrely*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      ytemp_data[j] += inc;
+    }
+
+    /* Evaluate g with incremented y */
+    retval = gloc(Nlocal, t, ytemp, gtemp, user_data);
+    nge++;
+    if (retval != 0) return(retval);
+
+    /* Restore ytemp, then form and load difference quotients */
+    for (j=group-1; j < Nlocal; j+=width) {
+      ytemp_data[j] = y_data[j];
+      col_j = BAND_COL(savedJ,j);
+      inc = SUNMAX(dqrely*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-mukeep);
+      i2 = SUNMIN(j+mlkeep, Nlocal-1);
+      for (i=i1; i <= i2; i++)
+        BAND_COL_ELEM(col_j,i,j) =
+          inc_inv * (gtemp_data[i] - gy_data[i]);
+    }
+  }
+
+  return(0);
+}
diff --git a/src/cvode/cvode_bbdpre_impl.h b/src/cvode/cvode_bbdpre_impl.h
new file mode 100644
index 0000000..3415b95
--- /dev/null
+++ b/src/cvode/cvode_bbdpre_impl.h
@@ -0,0 +1,87 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Michael Wittman, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the CVBBDPRE module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVBBDPRE_IMPL_H
+#define _CVBBDPRE_IMPL_H
+
+#include <cvode/cvode_bbdpre.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVBBDPrecData
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVBBDPrecDataRec {
+
+  /* passed by user to CVBBDPrecAlloc and used by PrecSetup/PrecSolve */
+
+  long int mudq, mldq, mukeep, mlkeep;
+  realtype dqrely;
+  CVLocalFn gloc;
+  CVCommFn cfn;
+
+  /* set by CVBBDPrecSetup and used by CVBBDPrecSolve */
+
+  DlsMat savedJ;
+  DlsMat savedP;
+  long int *lpivots;
+
+  /* set by CVBBDPrecAlloc and used by CVBBDPrecSetup */
+
+  long int n_local;
+
+  /* available for optional output */
+
+  long int rpwsize;
+  long int ipwsize;
+  long int nge;
+
+  /* pointer to cvode_mem */
+
+  void *cvode_mem;
+
+} *CVBBDPrecData;
+
+/*
+ * -----------------------------------------------------------------
+ * CVBBDPRE error messages
+ * -----------------------------------------------------------------
+ */
+
+#define MSGBBD_MEM_NULL    "Integrator memory is NULL."
+#define MSGBBD_LMEM_NULL   "Linear solver memory is NULL. One of the SPILS linear solvers must be attached."
+#define MSGBBD_MEM_FAIL    "A memory request failed."
+#define MSGBBD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGBBD_PMEM_NULL   "BBD peconditioner memory is NULL. CVBBDPrecInit must be called."
+#define MSGBBD_FUNC_FAILED "The gloc or cfn routine failed in an unrecoverable manner."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvode/cvode_dense.c b/src/cvode/cvode_dense.c
new file mode 100644
index 0000000..77c986e
--- /dev/null
+++ b/src/cvode/cvode_dense.c
@@ -0,0 +1,352 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4951 $
+ * $Date: 2016-09-22 10:21:00 -0700 (Thu, 22 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the impleentation file for the CVDENSE linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvode/cvode_dense.h>
+#include "cvode_direct_impl.h"
+#include "cvode_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* CVDENSE linit, lsetup, lsolve, and lfree routines */
+ 
+static int cvDenseInit(CVodeMem cv_mem);
+
+static int cvDenseSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, 
+                        N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+static int cvDenseSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ycur, N_Vector fcur);
+
+static int cvDenseFree(CVodeMem cv_mem);
+
+/* Readability Replacements */
+
+#define lmm       (cv_mem->cv_lmm)
+#define f         (cv_mem->cv_f)
+#define nst       (cv_mem->cv_nst)
+#define tn        (cv_mem->cv_tn)
+#define h         (cv_mem->cv_h)
+#define gamma     (cv_mem->cv_gamma)
+#define gammap    (cv_mem->cv_gammap)
+#define gamrat    (cv_mem->cv_gamrat)
+#define ewt       (cv_mem->cv_ewt)
+#define linit     (cv_mem->cv_linit)
+#define lsetup    (cv_mem->cv_lsetup)
+#define lsolve    (cv_mem->cv_lsolve)
+#define lfree     (cv_mem->cv_lfree)
+#define lmem      (cv_mem->cv_lmem)
+#define vec_tmpl     (cv_mem->cv_tempv)
+#define setupNonNull (cv_mem->cv_setupNonNull)
+
+#define mtype     (cvdls_mem->d_type)
+#define n         (cvdls_mem->d_n)
+#define jacDQ     (cvdls_mem->d_jacDQ)
+#define jac       (cvdls_mem->d_djac)
+#define M         (cvdls_mem->d_M)
+#define lpivots   (cvdls_mem->d_lpivots)
+#define savedJ    (cvdls_mem->d_savedJ)
+#define nstlj     (cvdls_mem->d_nstlj)
+#define nje       (cvdls_mem->d_nje)
+#define nfeDQ     (cvdls_mem->d_nfeDQ)
+#define J_data    (cvdls_mem->d_J_data)
+#define last_flag (cvdls_mem->d_last_flag)
+                  
+/*
+ * -----------------------------------------------------------------
+ * CVDense
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the dense linear solver module.  CVDense first
+ * calls the existing lfree routine if this is not NULL.  Then it sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be cvDenseInit, cvDenseSetup, cvDenseSolve, and cvDenseFree,
+ * respectively.  It allocates memory for a structure of type
+ * CVDlsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure.  It sets setupNonNull in (*cvode_mem) to
+ * TRUE, and the d_jac field to the default cvDlsDenseDQJac.
+ * Finally, it allocates memory for M, savedJ, and lpivots.
+ * The return value is SUCCESS = 0, or LMEM_FAIL = -1.
+ *
+ * NOTE: The dense linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVDense will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+int CVDense(void *cvode_mem, long int N)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVDENSE", "CVDense", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the DENSE solver */
+  if (vec_tmpl->ops->nvgetarraypointer == NULL ||
+      vec_tmpl->ops->nvsetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVDENSE", "CVDense", MSGD_BAD_NVECTOR);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  if (lfree !=NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */
+  linit  = cvDenseInit;
+  lsetup = cvDenseSetup;
+  lsolve = cvDenseSolve;
+  lfree  = cvDenseFree;
+
+  /* Get memory for CVDlsMemRec */
+  cvdls_mem = NULL;
+  cvdls_mem = (CVDlsMem) malloc(sizeof(struct CVDlsMemRec));
+  if (cvdls_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVDENSE", "CVDense", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_DENSE;
+
+  /* Initialize Jacobian-related data */
+  jacDQ = TRUE;
+  jac = NULL;
+  J_data = NULL;
+
+  last_flag = CVDLS_SUCCESS;
+
+  cvDlsInitializeCounters(cvdls_mem);
+
+  setupNonNull = TRUE;
+
+  /* Set problem dimension */
+  n = N;
+
+  /* Allocate memory for M, savedJ, and pivot array */
+
+  M = NULL;
+  M = NewDenseMat(N, N);
+  if (M == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVDENSE", "CVDense", MSGD_MEM_FAIL);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  savedJ = NULL;
+  savedJ = NewDenseMat(N, N);
+  if (savedJ == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVDENSE", "CVDense", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  lpivots = NULL;
+  lpivots = NewLintArray(N);
+  if (lpivots == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVDENSE", "CVDense", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    DestroyMat(savedJ);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvdls_mem;
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvDenseInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the dense
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int cvDenseInit(CVodeMem cv_mem)
+{
+  CVDlsMem cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  cvDlsInitializeCounters(cvdls_mem);
+  /*   nje   = 0;
+   nfeDQ = 0;
+   nstlj = 0;
+  */
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (jacDQ) {
+    jac = cvDlsDenseDQJac;
+    J_data = cv_mem;
+  } else {
+    J_data = cv_mem->cv_user_data;
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvDenseSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the dense linear solver.
+ * It makes a decision whether or not to call the Jacobian evaluation
+ * routine based on various state variables, and if not it uses the 
+ * saved copy.  In any case, it constructs the Newton matrix 
+ * M = I - gamma*J, updates counters, and calls the dense LU 
+ * factorization routine.
+ * -----------------------------------------------------------------
+ */
+
+static int cvDenseSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, 
+                        N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  long int ier;
+  CVDlsMem cvdls_mem;
+  int retval;
+
+  cvdls_mem = (CVDlsMem) lmem;
+ 
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+ 
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVD_MSBJ) ||
+         ((convfail == CV_FAIL_BAD_J) && (dgamma < CVD_DGMAX)) ||
+         (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+ 
+  if (jok) {
+
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    DenseCopy(savedJ, M);
+
+  } else {
+
+    /* If jok = FALSE, call jac routine for new J value */
+    nje++;
+    nstlj = nst;
+    *jcurPtr = TRUE;
+    SetToZero(M);
+
+    retval = jac(n, tn, ypred, fpred, M, J_data, vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      cvProcessError(cv_mem, CVDLS_JACFUNC_UNRECVR, "CVDENSE", "cvDenseSetup", MSGD_JACFUNC_FAILED);
+      last_flag = CVDLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      last_flag = CVDLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    DenseCopy(M, savedJ);
+
+  }
+  
+  /* Scale and add I to get M = I - gamma*J */
+  DenseScale(-gamma, M);
+  AddIdentity(M);
+
+  /* Do LU factorization of M */
+  ier = DenseGETRF(M, lpivots); 
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  last_flag = ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvDenseSolve
+ * -----------------------------------------------------------------
+ * This routine handles the solve operation for the dense linear solver
+ * by calling the dense backsolve routine.  The returned value is 0.
+ * -----------------------------------------------------------------
+ */
+
+static int cvDenseSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ycur, N_Vector fcur)
+{
+  CVDlsMem cvdls_mem;
+  realtype *bd;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  bd = N_VGetArrayPointer(b);
+
+  DenseGETRS(M, lpivots, bd);
+
+  /* If CV_BDF, scale the correction to account for change in gamma */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    N_VScale(TWO/(ONE + gamrat), b, b);
+  }
+  
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvDenseFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the dense linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int cvDenseFree(CVodeMem cv_mem)
+{
+  CVDlsMem  cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  DestroyMat(M);
+  DestroyMat(savedJ);
+  DestroyArray(lpivots);
+  free(cvdls_mem);
+  cv_mem->cv_lmem = NULL;
+
+  return(0);
+}
+
diff --git a/src/cvode/cvode_diag.c b/src/cvode/cvode_diag.c
new file mode 100644
index 0000000..1f1a055
--- /dev/null
+++ b/src/cvode/cvode_diag.c
@@ -0,0 +1,444 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVDIAG linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvode_diag_impl.h"
+#include "cvode_impl.h"
+
+/* Other Constants */
+  
+#define FRACT RCONST(0.1)
+#define ONE   RCONST(1.0)
+
+/* CVDIAG linit, lsetup, lsolve, and lfree routines */
+
+static int CVDiagInit(CVodeMem cv_mem);
+
+static int CVDiagSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                       N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                       N_Vector vtemp2, N_Vector vtemp3);
+
+static int CVDiagSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                       N_Vector ycur, N_Vector fcur);
+
+static int CVDiagFree(CVodeMem cv_mem);
+
+/* Readability Replacements */
+
+#define lrw1      (cv_mem->cv_lrw1)
+#define liw1      (cv_mem->cv_liw1)
+#define f         (cv_mem->cv_f)
+#define uround    (cv_mem->cv_uround)
+#define tn        (cv_mem->cv_tn)
+#define h         (cv_mem->cv_h)
+#define rl1       (cv_mem->cv_rl1)
+#define gamma     (cv_mem->cv_gamma)
+#define ewt       (cv_mem->cv_ewt)
+#define nfe       (cv_mem->cv_nfe)
+#define zn        (cv_mem->cv_zn)
+#define linit     (cv_mem->cv_linit)
+#define lsetup    (cv_mem->cv_lsetup)
+#define lsolve    (cv_mem->cv_lsolve)
+#define lfree     (cv_mem->cv_lfree)
+#define lmem      (cv_mem->cv_lmem)
+#define vec_tmpl  (cv_mem->cv_tempv)
+#define setupNonNull   (cv_mem->cv_setupNonNull)
+
+#define gammasv   (cvdiag_mem->di_gammasv)
+#define M         (cvdiag_mem->di_M)
+#define bit       (cvdiag_mem->di_bit)
+#define bitcomp   (cvdiag_mem->di_bitcomp)
+#define nfeDI     (cvdiag_mem->di_nfeDI)
+#define last_flag (cvdiag_mem->di_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiag 
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the diagonal linear solver module.  CVDense first
+ * calls the existing lfree routine if this is not NULL.  Then it sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be CVDiagInit, CVDiagSetup, CVDiagSolve, and CVDiagFree,
+ * respectively.  It allocates memory for a structure of type
+ * CVDiagMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure.  It sets setupNonNull in (*cvode_mem) to
+ * TRUE.  Finally, it allocates memory for M, bit, and bitcomp.
+ * The CVDiag return value is SUCCESS = 0, LMEM_FAIL = -1, or 
+ * LIN_ILL_INPUT=-2.
+ * -----------------------------------------------------------------
+ */
+  
+int CVDiag(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  CVDiagMem cvdiag_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDIAG_MEM_NULL, "CVDIAG", "CVDiag", MSGDG_CVMEM_NULL);
+    return(CVDIAG_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if N_VCompare and N_VInvTest are present */
+  if(vec_tmpl->ops->nvcompare == NULL ||
+     vec_tmpl->ops->nvinvtest == NULL) {
+    cvProcessError(cv_mem, CVDIAG_ILL_INPUT, "CVDIAG", "CVDiag", MSGDG_BAD_NVECTOR);
+    return(CVDIAG_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+  
+  /* Set four main function fields in cv_mem */
+  linit  = CVDiagInit;
+  lsetup = CVDiagSetup;
+  lsolve = CVDiagSolve;
+  lfree  = CVDiagFree;
+
+  /* Get memory for CVDiagMemRec */
+  cvdiag_mem = NULL;
+  cvdiag_mem = (CVDiagMem) malloc(sizeof(CVDiagMemRec));
+  if (cvdiag_mem == NULL) {
+    cvProcessError(cv_mem, CVDIAG_MEM_FAIL, "CVDIAG", "CVDiag", MSGDG_MEM_FAIL);
+    return(CVDIAG_MEM_FAIL);
+  }
+
+  last_flag = CVDIAG_SUCCESS;
+
+  /* Set flag setupNonNull = TRUE */
+  setupNonNull = TRUE;
+
+  /* Allocate memory for M, bit, and bitcomp */
+    
+  M = N_VClone(vec_tmpl);
+  if (M == NULL) {
+    cvProcessError(cv_mem, CVDIAG_MEM_FAIL, "CVDIAG", "CVDiag", MSGDG_MEM_FAIL);
+    free(cvdiag_mem); cvdiag_mem = NULL;
+    return(CVDIAG_MEM_FAIL);
+  }
+
+  bit = N_VClone(vec_tmpl);
+  if (bit == NULL) {
+    cvProcessError(cv_mem, CVDIAG_MEM_FAIL, "CVDIAG", "CVDiag", MSGDG_MEM_FAIL);
+    N_VDestroy(M);
+    free(cvdiag_mem); cvdiag_mem = NULL;
+    return(CVDIAG_MEM_FAIL);
+  }
+
+  bitcomp = N_VClone(vec_tmpl);
+  if (bitcomp == NULL) {
+    cvProcessError(cv_mem, CVDIAG_MEM_FAIL, "CVDIAG", "CVDiag", MSGDG_MEM_FAIL);
+    N_VDestroy(M);
+    N_VDestroy(bit);
+    free(cvdiag_mem); cvdiag_mem = NULL;
+    return(CVDIAG_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvdiag_mem;
+
+  return(CVDIAG_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagGetWorkSpace
+ * -----------------------------------------------------------------
+ */
+
+int CVDiagGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS)
+{
+  CVodeMem cv_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDIAG_MEM_NULL, "CVDIAG", "CVDiagGetWorkSpace", MSGDG_CVMEM_NULL);
+    return(CVDIAG_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *lenrwLS = 3*lrw1;
+  *leniwLS = 3*liw1;
+
+  return(CVDIAG_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagGetNumRhsEvals
+ * -----------------------------------------------------------------
+ */
+
+int CVDiagGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS)
+{
+  CVodeMem cv_mem;
+  CVDiagMem cvdiag_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDIAG_MEM_NULL, "CVDIAG", "CVDiagGetNumRhsEvals", MSGDG_CVMEM_NULL);
+    return(CVDIAG_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDIAG_LMEM_NULL, "CVDIAG", "CVDiagGetNumRhsEvals", MSGDG_LMEM_NULL);
+    return(CVDIAG_LMEM_NULL);
+  }
+  cvdiag_mem = (CVDiagMem) lmem;
+
+  *nfevalsLS = nfeDI;
+
+  return(CVDIAG_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagGetLastFlag
+ * -----------------------------------------------------------------
+ */
+
+int CVDiagGetLastFlag(void *cvode_mem, long int *flag)
+{
+  CVodeMem cv_mem;
+  CVDiagMem cvdiag_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDIAG_MEM_NULL, "CVDIAG", "CVDiagGetLastFlag", MSGDG_CVMEM_NULL);
+    return(CVDIAG_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDIAG_LMEM_NULL, "CVDIAG", "CVDiagGetLastFlag", MSGDG_LMEM_NULL);
+    return(CVDIAG_LMEM_NULL);
+  }
+  cvdiag_mem = (CVDiagMem) lmem;
+
+  *flag = last_flag;
+
+  return(CVDIAG_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagGetReturnFlagName
+ * -----------------------------------------------------------------
+ */
+
+char *CVDiagGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case CVDIAG_SUCCESS:
+    sprintf(name,"CVDIAG_SUCCESS");
+    break;   
+  case CVDIAG_MEM_NULL:
+    sprintf(name,"CVDIAG_MEM_NULL");
+    break;
+  case CVDIAG_LMEM_NULL:
+    sprintf(name,"CVDIAG_LMEM_NULL");
+    break;
+  case CVDIAG_ILL_INPUT:
+    sprintf(name,"CVDIAG_ILL_INPUT");
+    break;
+  case CVDIAG_MEM_FAIL:
+    sprintf(name,"CVDIAG_MEM_FAIL");
+    break;
+  case CVDIAG_INV_FAIL:
+    sprintf(name,"CVDIAG_INV_FAIL");
+    break;
+  case CVDIAG_RHSFUNC_UNRECVR:
+    sprintf(name,"CVDIAG_RHSFUNC_UNRECVR");
+    break;
+  case CVDIAG_RHSFUNC_RECVR:
+    sprintf(name,"CVDIAG_RHSFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the diagonal
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVDiagInit(CVodeMem cv_mem)
+{
+  CVDiagMem cvdiag_mem;
+
+  cvdiag_mem = (CVDiagMem) lmem;
+
+  nfeDI = 0;
+
+  last_flag = CVDIAG_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the diagonal linear 
+ * solver.  It constructs a diagonal approximation to the Newton matrix 
+ * M = I - gamma*J, updates counters, and inverts M.
+ * -----------------------------------------------------------------
+ */
+
+static int CVDiagSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                       N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                       N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype r;
+  N_Vector ftemp, y;
+  booleantype invOK;
+  CVDiagMem cvdiag_mem;
+  int retval;
+
+  cvdiag_mem = (CVDiagMem) lmem;
+
+  /* Rename work vectors for use as temporary values of y and f */
+  ftemp = vtemp1;
+  y     = vtemp2;
+
+  /* Form y with perturbation = FRACT*(func. iter. correction) */
+  r = FRACT * rl1;
+  N_VLinearSum(h, fpred, -ONE, zn[1], ftemp);
+  N_VLinearSum(r, ftemp, ONE, ypred, y);
+
+  /* Evaluate f at perturbed y */
+  retval = f(tn, y, M, cv_mem->cv_user_data);
+  nfeDI++;
+  if (retval < 0) {
+    cvProcessError(cv_mem, CVDIAG_RHSFUNC_UNRECVR, "CVDIAG", "CVDiagSetup", MSGDG_RHSFUNC_FAILED);
+    last_flag = CVDIAG_RHSFUNC_UNRECVR;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = CVDIAG_RHSFUNC_RECVR;
+    return(1);
+  }
+
+  /* Construct M = I - gamma*J with J = diag(deltaf_i/deltay_i) */
+  N_VLinearSum(ONE, M, -ONE, fpred, M);
+  N_VLinearSum(FRACT, ftemp, -h, M, M);
+  N_VProd(ftemp, ewt, y);
+  /* Protect against deltay_i being at roundoff level */
+  N_VCompare(uround, y, bit);
+  N_VAddConst(bit, -ONE, bitcomp);
+  N_VProd(ftemp, bit, y);
+  N_VLinearSum(FRACT, y, -ONE, bitcomp, y);
+  N_VDiv(M, y, M);
+  N_VProd(M, bit, M);
+  N_VLinearSum(ONE, M, -ONE, bitcomp, M);
+
+  /* Invert M with test for zero components */
+  invOK = N_VInvTest(M, M);
+  if (!invOK) {
+    last_flag = CVDIAG_INV_FAIL;
+    return(1);
+  }
+
+  /* Set jcur = TRUE, save gamma in gammasv, and return */
+  *jcurPtr = TRUE;
+  gammasv = gamma;
+  last_flag = CVDIAG_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagSolve
+ * -----------------------------------------------------------------
+ * This routine performs the solve operation for the diagonal linear
+ * solver.  If necessary it first updates gamma in M = I - gamma*J.
+ * -----------------------------------------------------------------
+ */
+
+static int CVDiagSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                       N_Vector ycur, N_Vector fcur)
+{
+  booleantype invOK;
+  realtype r;
+  CVDiagMem cvdiag_mem;
+
+  cvdiag_mem = (CVDiagMem) lmem;
+  
+  /* If gamma has changed, update factor in M, and save gamma value */
+
+  if (gammasv != gamma) {
+    r = gamma / gammasv;
+    N_VInv(M, M);
+    N_VAddConst(M, -ONE, M);
+    N_VScale(r, M, M);
+    N_VAddConst(M, ONE, M);
+    invOK = N_VInvTest(M, M);
+    if (!invOK) {
+      last_flag = CVDIAG_INV_FAIL;
+      return (1);
+    }
+    gammasv = gamma;
+  }
+
+  /* Apply M-inverse to b */
+  N_VProd(b, M, b);
+
+  last_flag = CVDIAG_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the diagonal linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVDiagFree(CVodeMem cv_mem)
+{
+  CVDiagMem cvdiag_mem;
+  
+  cvdiag_mem = (CVDiagMem) lmem;
+
+  N_VDestroy(M);
+  N_VDestroy(bit);
+  N_VDestroy(bitcomp);
+  free(cvdiag_mem);
+  cv_mem->cv_lmem = NULL;
+
+  return(0);
+}
diff --git a/src/cvode/cvode_diag_impl.h b/src/cvode/cvode_diag_impl.h
new file mode 100644
index 0000000..f39b214
--- /dev/null
+++ b/src/cvode/cvode_diag_impl.h
@@ -0,0 +1,71 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the diagonal linear solver, CVDIAG.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVDIAG_IMPL_H
+#define _CVDIAG_IMPL_H
+
+#include <cvode/cvode_diag.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Types: CVDiagMemRec, CVDiagMem
+ * -----------------------------------------------------------------
+ * The type CVDiagMem is pointer to a CVDiagMemRec.
+ * This structure contains CVDiag solver-specific data.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct {
+
+  realtype di_gammasv; /* gammasv = gamma at the last call to setup */
+                       /* or solve                                  */
+
+  N_Vector di_M;       /* M = (I - gamma J)^{-1} , gamma = h / l1   */
+
+  N_Vector di_bit;     /* temporary storage vector                  */
+
+  N_Vector di_bitcomp; /* temporary storage vector                  */
+
+  long int di_nfeDI;   /* no. of calls to f due to difference 
+                          quotient diagonal Jacobian approximation  */
+
+  long int di_last_flag;    /* last error return flag                    */
+
+} CVDiagMemRec, *CVDiagMem;
+
+/* Error Messages */
+
+#define MSGDG_CVMEM_NULL "Integrator memory is NULL."
+#define MSGDG_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGDG_MEM_FAIL "A memory request failed."
+#define MSGDG_LMEM_NULL "CVDIAG memory is NULL."
+#define MSGDG_RHSFUNC_FAILED "The right-hand side routine failed in an unrecoverable manner."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvode/cvode_direct.c b/src/cvode/cvode_direct.c
new file mode 100644
index 0000000..da6eba6
--- /dev/null
+++ b/src/cvode/cvode_direct.c
@@ -0,0 +1,475 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVDLS linear solvers
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvode_impl.h"
+#include "cvode_direct_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+/* Constant for DQ Jacobian approximation */
+#define MIN_INC_MULT RCONST(1000.0)
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define f         (cv_mem->cv_f)
+#define user_data (cv_mem->cv_user_data)
+#define uround    (cv_mem->cv_uround)
+#define nst       (cv_mem->cv_nst)
+#define tn        (cv_mem->cv_tn)
+#define h         (cv_mem->cv_h)
+#define gamma     (cv_mem->cv_gamma)
+#define gammap    (cv_mem->cv_gammap)
+#define gamrat    (cv_mem->cv_gamrat)
+#define ewt       (cv_mem->cv_ewt)
+
+#define lmem      (cv_mem->cv_lmem)
+
+#define mtype     (cvdls_mem->d_type)
+#define n         (cvdls_mem->d_n)
+#define ml        (cvdls_mem->d_ml)
+#define mu        (cvdls_mem->d_mu)
+#define smu       (cvdls_mem->d_smu)
+#define jacDQ     (cvdls_mem->d_jacDQ)
+#define djac      (cvdls_mem->d_djac)
+#define bjac      (cvdls_mem->d_bjac)
+#define M         (cvdls_mem->d_M)
+#define nje       (cvdls_mem->d_nje)
+#define nfeDQ     (cvdls_mem->d_nfeDQ)
+#define last_flag (cvdls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS
+ * =================================================================
+ */
+              
+/*
+ * CVDlsSetDenseJacFn specifies the dense Jacobian function.
+ */
+int CVDlsSetDenseJacFn(void *cvode_mem, CVDlsDenseJacFn jac)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVDLS", "CVDlsSetDenseJacFn", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVDLS", "CVDlsSetDenseJacFn", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  if (jac != NULL) {
+    jacDQ = FALSE;
+    djac = jac;
+  } else {
+    jacDQ = TRUE;
+  }
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * CVDlsSetBandJacFn specifies the band Jacobian function.
+ */
+int CVDlsSetBandJacFn(void *cvode_mem, CVDlsBandJacFn jac)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVDLS", "CVDlsSetBandJacFn", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVDLS", "CVDlsSetBandJacFn", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  if (jac != NULL) {
+    jacDQ = FALSE;
+    bjac = jac;
+  } else {
+    jacDQ = TRUE;
+  }
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * CVDlsGetWorkSpace returns the length of workspace allocated for the
+ * CVDLS linear solver.
+ */
+int CVDlsGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVDLS", "CVDlsGetWorkSpace", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVDLS", "CVDlsGetWorkSpace", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  if (mtype == SUNDIALS_DENSE) {
+    *lenrwLS = 2*n*n;
+    *leniwLS = n;
+  } else if (mtype == SUNDIALS_BAND) {
+    *lenrwLS = n*(smu + mu + 2*ml + 2);
+    *leniwLS = n;
+  }
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * CVDlsGetNumJacEvals returns the number of Jacobian evaluations.
+ */
+int CVDlsGetNumJacEvals(void *cvode_mem, long int *njevals)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVDLS", "CVDlsGetNumJacEvals", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVDLS", "CVDlsGetNumJacEvals", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  *njevals = nje;
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * CVDlsGetNumRhsEvals returns the number of calls to the ODE function
+ * needed for the DQ Jacobian approximation.
+ */
+int CVDlsGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVDLS", "CVDlsGetNumRhsEvals", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVDLS", "CVDlsGetNumRhsEvals", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  *nfevalsLS = nfeDQ;
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * CVDlsGetReturnFlagName returns the name associated with a CVDLS
+ * return value.
+ */
+char *CVDlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case CVDLS_SUCCESS:
+    sprintf(name,"CVDLS_SUCCESS");
+    break;   
+  case CVDLS_MEM_NULL:
+    sprintf(name,"CVDLS_MEM_NULL");
+    break;
+  case CVDLS_LMEM_NULL:
+    sprintf(name,"CVDLS_LMEM_NULL");
+    break;
+  case CVDLS_ILL_INPUT:
+    sprintf(name,"CVDLS_ILL_INPUT");
+    break;
+  case CVDLS_MEM_FAIL:
+    sprintf(name,"CVDLS_MEM_FAIL");
+    break;
+  case CVDLS_JACFUNC_UNRECVR:
+    sprintf(name,"CVDLS_JACFUNC_UNRECVR");
+    break;
+  case CVDLS_JACFUNC_RECVR:
+    sprintf(name,"CVDLS_JACFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * CVDlsGetLastFlag returns the last flag set in a CVDLS function.
+ */
+int CVDlsGetLastFlag(void *cvode_mem, long int *flag)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVDLS", "CVDlsGetLastFlag", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVDLS", "CVDlsGetLastFlag", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  *flag = last_flag;
+
+  return(CVDLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * DQ JACOBIAN APPROXIMATIONS
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * cvDlsDenseDQJac 
+ * -----------------------------------------------------------------
+ * This routine generates a dense difference quotient approximation to
+ * the Jacobian of f(t,y). It assumes that a dense matrix of type
+ * DlsMat is stored column-wise, and that elements within each column
+ * are contiguous. The address of the jth column of J is obtained via
+ * the macro DENSE_COL and this pointer is associated with an N_Vector
+ * using the N_VGetArrayPointer/N_VSetArrayPointer functions. 
+ * Finally, the actual computation of the jth column of the Jacobian is 
+ * done with a call to N_VLinearSum.
+ * -----------------------------------------------------------------
+ */ 
+
+int cvDlsDenseDQJac(long int N, realtype t,
+                    N_Vector y, N_Vector fy, 
+                    DlsMat Jac, void *data,
+                    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype fnorm, minInc, inc, inc_inv, yjsaved, srur;
+  realtype *tmp2_data, *y_data, *ewt_data;
+  N_Vector ftemp, jthCol;
+  long int j;
+  int retval = 0;
+
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* data points to cvode_mem */
+  cv_mem = (CVodeMem) data;
+  cvdls_mem = (CVDlsMem) lmem;
+
+  /* Save pointer to the array in tmp2 */
+  tmp2_data = N_VGetArrayPointer(tmp2);
+
+  /* Rename work vectors for readibility */
+  ftemp = tmp1; 
+  jthCol = tmp2;
+
+  /* Obtain pointers to the data for ewt, y */
+  ewt_data = N_VGetArrayPointer(ewt);
+  y_data   = N_VGetArrayPointer(y);
+
+  /* Set minimum increment based on uround and norm of f */
+  srur = SUNRsqrt(uround);
+  fnorm = N_VWrmsNorm(fy, ewt);
+  minInc = (fnorm != ZERO) ?
+           (MIN_INC_MULT * SUNRabs(h) * uround * N * fnorm) : ONE;
+
+  for (j = 0; j < N; j++) {
+
+    /* Generate the jth col of J(tn,y) */
+
+    N_VSetArrayPointer(DENSE_COL(Jac,j), jthCol);
+
+    yjsaved = y_data[j];
+    inc = SUNMAX(srur*SUNRabs(yjsaved), minInc/ewt_data[j]);
+    y_data[j] += inc;
+
+    retval = f(t, y, ftemp, user_data);
+    nfeDQ++;
+    if (retval != 0) break;
+    
+    y_data[j] = yjsaved;
+
+    inc_inv = ONE/inc;
+    N_VLinearSum(inc_inv, ftemp, -inc_inv, fy, jthCol);
+
+    DENSE_COL(Jac,j) = N_VGetArrayPointer(jthCol);
+  }
+
+  /* Restore original array pointer in tmp2 */
+  N_VSetArrayPointer(tmp2_data, tmp2);
+
+  return(retval);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvDlsBandDQJac
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation to
+ * the Jacobian of f(t,y).  It assumes that a band matrix of type
+ * DlsMat is stored column-wise, and that elements within each column
+ * are contiguous. This makes it possible to get the address of a column
+ * of J via the macro BAND_COL and to write a simple for loop to set
+ * each of the elements of a column in succession.
+ * -----------------------------------------------------------------
+ */
+
+int cvDlsBandDQJac(long int N, long int mupper, long int mlower,
+                   realtype t, N_Vector y, N_Vector fy, 
+                   DlsMat Jac, void *data,
+                   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  N_Vector ftemp, ytemp;
+  realtype fnorm, minInc, inc, inc_inv, srur;
+  realtype *col_j, *ewt_data, *fy_data, *ftemp_data, *y_data, *ytemp_data;
+  long int group, i, j, width, ngroups, i1, i2;
+  int retval = 0;
+
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* data points to cvode_mem */
+  cv_mem = (CVodeMem) data;
+  cvdls_mem = (CVDlsMem) lmem;
+
+  /* Rename work vectors for use as temporary values of y and f */
+  ftemp = tmp1;
+  ytemp = tmp2;
+
+  /* Obtain pointers to the data for ewt, fy, ftemp, y, ytemp */
+  ewt_data   = N_VGetArrayPointer(ewt);
+  fy_data    = N_VGetArrayPointer(fy);
+  ftemp_data = N_VGetArrayPointer(ftemp);
+  y_data     = N_VGetArrayPointer(y);
+  ytemp_data = N_VGetArrayPointer(ytemp);
+
+  /* Load ytemp with y = predicted y vector */
+  N_VScale(ONE, y, ytemp);
+
+  /* Set minimum increment based on uround and norm of f */
+  srur = SUNRsqrt(uround);
+  fnorm = N_VWrmsNorm(fy, ewt);
+  minInc = (fnorm != ZERO) ?
+           (MIN_INC_MULT * SUNRabs(h) * uround * N * fnorm) : ONE;
+
+  /* Set bandwidth and number of column groups for band differencing */
+  width = mlower + mupper + 1;
+  ngroups = SUNMIN(width, N);
+
+  /* Loop over column groups. */
+  for (group=1; group <= ngroups; group++) {
+    
+    /* Increment all y_j in group */
+    for(j=group-1; j < N; j+=width) {
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      ytemp_data[j] += inc;
+    }
+
+    /* Evaluate f with incremented y */
+
+    retval = f(tn, ytemp, ftemp, user_data);
+    nfeDQ++;
+    if (retval != 0) break;
+
+    /* Restore ytemp, then form and load difference quotients */
+    for (j=group-1; j < N; j+=width) {
+      ytemp_data[j] = y_data[j];
+      col_j = BAND_COL(Jac,j);
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-mupper);
+      i2 = SUNMIN(j+mlower, N-1);
+      for (i=i1; i <= i2; i++)
+        BAND_COL_ELEM(col_j,i,j) = inc_inv * (ftemp_data[i] - fy_data[i]);
+    }
+  }
+  
+  return(retval);
+}
+
+int cvDlsInitializeCounters(CVDlsMem cvdls_mem)
+{
+  cvdls_mem->d_nje   = 0;
+  cvdls_mem->d_nfeDQ = 0;
+  cvdls_mem->d_nstlj = 0;
+  return(0);
+}
diff --git a/src/cvode/cvode_direct_impl.h b/src/cvode/cvode_direct_impl.h
new file mode 100644
index 0000000..e189b5f
--- /dev/null
+++ b/src/cvode/cvode_direct_impl.h
@@ -0,0 +1,118 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common implementation header file for the CVDLS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVDLS_IMPL_H
+#define _CVDLS_IMPL_H
+
+#include "cvode/cvode_direct.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * CVDLS solver constants
+ * -----------------------------------------------------------------
+ * CVD_MSBJ   maximum number of steps between Jacobian evaluations
+ * CVD_DGMAX  maximum change in gamma between Jacobian evaluations
+ * -----------------------------------------------------------------
+ */
+
+#define CVD_MSBJ  50
+#define CVD_DGMAX RCONST(0.2)
+
+/*
+ * -----------------------------------------------------------------
+ * Types : CVDlsMemRec, CVDlsMem                             
+ * -----------------------------------------------------------------
+ * CVDlsMem is pointer to a CVDlsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVDlsMemRec {
+
+  int d_type;             /* SUNDIALS_DENSE or SUNDIALS_BAND              */
+
+  long int d_n;           /* problem dimension                            */
+
+  long int d_ml;          /* lower bandwidth of Jacobian                  */
+  long int d_mu;          /* upper bandwidth of Jacobian                  */ 
+  long int d_smu;         /* upper bandwith of M = MIN(N-1,d_mu+d_ml)     */
+
+  booleantype d_jacDQ;    /* TRUE if using internal DQ Jacobian approx.   */
+  CVDlsDenseJacFn d_djac; /* dense Jacobian routine to be called          */
+  CVDlsBandJacFn d_bjac;  /* band Jacobian routine to be called           */
+  void *d_J_data;         /* user data is passed to djac or bjac          */
+
+  DlsMat d_M;             /* M = I - gamma * df/dy                        */
+  DlsMat d_savedJ;        /* savedJ = old Jacobian                        */
+
+  int *d_pivots;          /* pivots = int pivot array for PM = LU         */
+  long int *d_lpivots;    /* lpivots = long int pivot array for PM = LU   */
+
+  long int  d_nstlj;      /* nstlj = nst at last Jacobian eval.           */
+
+  long int d_nje;         /* nje = no. of calls to jac                    */
+
+  long int d_nfeDQ;       /* no. of calls to f due to DQ Jacobian approx. */
+
+  long int d_last_flag;   /* last error return flag                       */
+  
+} *CVDlsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+
+int cvDlsDenseDQJac(long int N, realtype t,
+                    N_Vector y, N_Vector fy, 
+                    DlsMat Jac, void *data,
+                    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+  
+int cvDlsBandDQJac(long int N, long int mupper, long int mlower,
+                   realtype t, N_Vector y, N_Vector fy, 
+                   DlsMat Jac, void *data,
+                   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Auxilliary functions */
+int cvDlsInitializeCounters(CVDlsMem cvdls_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Error Messages
+ * -----------------------------------------------------------------
+ */
+
+#define MSGD_CVMEM_NULL "Integrator memory is NULL."
+#define MSGD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGD_BAD_SIZES "Illegal bandwidth parameter(s). Must have 0 <=  ml, mu <= N-1."
+#define MSGD_MEM_FAIL "A memory request failed."
+#define MSGD_LMEM_NULL "Linear solver memory is NULL."
+#define MSGD_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvode/cvode_impl.h b/src/cvode/cvode_impl.h
new file mode 100644
index 0000000..21d9f38
--- /dev/null
+++ b/src/cvode/cvode_impl.h
@@ -0,0 +1,520 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, Radu Serban
+ *                and Dan Shumaker @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the main CVODE integrator.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVODE_IMPL_H
+#define _CVODE_IMPL_H
+
+#include <stdarg.h>
+#include <cvode/cvode.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *   M A I N    I N T E G R A T O R    M E M O R Y    B L O C K
+ * =================================================================
+ */
+
+/* Basic CVODE constants */
+
+#define ADAMS_Q_MAX 12     /* max value of q for lmm == ADAMS     */
+#define BDF_Q_MAX    5     /* max value of q for lmm == BDF       */
+#define Q_MAX  ADAMS_Q_MAX /* max value of q for either lmm       */
+#define L_MAX  (Q_MAX+1)   /* max value of L for either lmm       */
+#define NUM_TESTS    5     /* number of error test quantities     */
+
+#define HMIN_DEFAULT     RCONST(0.0)    /* hmin default value     */
+#define HMAX_INV_DEFAULT RCONST(0.0)    /* hmax_inv default value */
+#define MXHNIL_DEFAULT   10             /* mxhnil default value   */
+#define MXSTEP_DEFAULT   500            /* mxstep default value   */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : struct CVodeMemRec, CVodeMem
+ * -----------------------------------------------------------------
+ * The type CVodeMem is type pointer to struct CVodeMemRec.
+ * This structure contains fields to keep track of problem state.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVodeMemRec {
+
+  realtype cv_uround;    /* machine unit roundoff */
+
+  /*-------------------------- 
+    Problem Specification Data 
+    --------------------------*/
+
+  CVRhsFn cv_f;              /* y' = f(t,y(t))                                */
+  void *cv_user_data;        /* user pointer passed to f                      */
+  int cv_lmm;                /* lmm = CV_ADAMS or CV_BDF                      */
+  int cv_iter;               /* iter = CV_FUNCTIONAL or CV_NEWTON             */
+  int cv_itol;               /* itol = CV_SS, CV_SV, CV_WF, CV_NN             */
+
+  realtype cv_reltol;        /* relative tolerance                            */
+  realtype cv_Sabstol;       /* scalar absolute tolerance                     */
+  N_Vector cv_Vabstol;       /* vector absolute tolerance                     */
+  booleantype cv_user_efun;  /* TRUE if user sets efun                        */
+  CVEwtFn cv_efun;           /* function to set ewt                           */
+  void *cv_e_data;           /* user pointer passed to efun                   */
+
+  /*-----------------------
+    Nordsieck History Array 
+    -----------------------*/
+
+  N_Vector cv_zn[L_MAX];  /* Nordsieck array, of size N x (q+1).
+                             zn[j] is a vector of length N (j=0,...,q) 
+                             zn[j] = [1/factorial(j)] * h^j * (jth      
+                             derivative of the interpolating polynomial       */
+
+  /*--------------------------
+    other vectors of length N 
+    -------------------------*/
+
+  N_Vector cv_ewt;     /* error weight vector                                 */
+  N_Vector cv_y;       /* y is used as temporary storage by the solver
+                          The memory is provided by the user to CVode
+                          where the vector is named yout.                     */
+  N_Vector cv_acor;    /* In the context of the solution of the nonlinear
+                          equation, acor = y_n(m) - y_n(0). On return, 
+                          this vector is scaled to give the est. local err.   */
+  N_Vector cv_tempv;   /* temporary storage vector                            */
+  N_Vector cv_ftemp;   /* temporary storage vector                            */
+
+  /*-----------------
+    Tstop information
+    -----------------*/
+
+  booleantype cv_tstopset;
+  realtype cv_tstop;
+
+  /*---------
+    Step Data 
+    ---------*/  
+
+  int cv_q;                    /* current order                               */
+  int cv_qprime;               /* order to be used on the next step  
+                                  = q-1, q, or q+1                            */
+  int cv_next_q;               /* order to be used on the next step           */
+  int cv_qwait;                /* number of internal steps to wait before
+                                  considering a change in q                   */
+  int cv_L;                    /* L = q + 1                                   */
+
+  realtype cv_hin;             /* initial step size                           */
+  realtype cv_h;               /* current step size                           */
+  realtype cv_hprime;          /* step size to be used on the next step       */ 
+  realtype cv_next_h;          /* step size to be used on the next step       */ 
+  realtype cv_eta;             /* eta = hprime / h                            */
+  realtype cv_hscale;          /* value of h used in zn                       */
+  realtype cv_tn;              /* current internal value of t                 */
+  realtype cv_tretlast;        /* value of tret last returned by CVode        */
+
+  realtype cv_tau[L_MAX+1];    /* array of previous q+1 successful step 
+                                  sizes indexed from 1 to q+1                 */
+  realtype cv_tq[NUM_TESTS+1]; /* array of test quantities indexed from 
+                                  1 to NUM_TESTS(=5)                          */
+  realtype cv_l[L_MAX];        /* coefficients of l(x) (degree q poly)        */
+
+  realtype cv_rl1;              /* the scalar 1/l[1]                          */
+  realtype cv_gamma;            /* gamma = h * rl1                            */
+  realtype cv_gammap;           /* gamma at the last setup call               */
+  realtype cv_gamrat;           /* gamma / gammap                             */
+
+  realtype cv_crate;            /* estimated corrector convergence rate       */
+  realtype cv_acnrm;            /* | acor | wrms                              */
+  realtype cv_nlscoef;          /* coeficient in nonlinear convergence test   */
+  int  cv_mnewt;                /* Newton iteration counter                   */
+
+  /*------
+    Limits 
+    ------*/
+
+  int cv_qmax;          /* q <= qmax                                          */
+  long int cv_mxstep;   /* maximum number of internal steps for one user call */
+  int cv_maxcor;        /* maximum number of corrector iterations for the
+                           solution of the nonlinear equation                 */
+  int cv_mxhnil;        /* maximum number of warning messages issued to the
+                           user that t + h == t for the next internal step    */
+  int cv_maxnef;        /* maximum number of error test failures              */
+  int cv_maxncf;        /* maximum number of nonlinear convergence failures   */
+
+  realtype cv_hmin;     /* |h| >= hmin                                        */
+  realtype cv_hmax_inv; /* |h| <= 1/hmax_inv                                  */
+  realtype cv_etamax;   /* eta <= etamax                                      */
+
+  /*--------
+    Counters 
+    --------*/
+
+  long int cv_nst;         /* number of internal steps taken                  */
+  long int cv_nfe;         /* number of f calls                               */
+  long int cv_ncfn;        /* number of corrector convergence failures        */
+  long int cv_netf;        /* number of error test failures                   */
+  long int cv_nni;         /* number of Newton iterations performed           */
+  long int cv_nsetups;     /* number of setup calls                           */
+  int cv_nhnil;            /* number of messages issued to the user that 
+                              t + h == t for the next iternal step            */
+
+  realtype cv_etaqm1;      /* ratio of new to old h for order q-1             */
+  realtype cv_etaq;        /* ratio of new to old h for order q               */
+  realtype cv_etaqp1;      /* ratio of new to old h for order q+1             */
+
+  /*----------------------------
+    Space requirements for CVODE 
+    ----------------------------*/
+
+  long int cv_lrw1;        /* no. of realtype words in 1 N_Vector             */ 
+  long int cv_liw1;        /* no. of integer words in 1 N_Vector              */ 
+  long int cv_lrw;         /* no. of realtype words in CVODE work vectors     */
+  long int cv_liw;         /* no. of integer words in CVODE work vectors      */
+
+  /*------------------
+    Linear Solver Data 
+    ------------------*/
+
+  /* Linear Solver functions to be called */
+
+  int (*cv_linit)(struct CVodeMemRec *cv_mem);
+
+  int (*cv_lsetup)(struct CVodeMemRec *cv_mem, int convfail, N_Vector ypred,
+		   N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+		   N_Vector vtemp2, N_Vector vtemp3); 
+
+  int (*cv_lsolve)(struct CVodeMemRec *cv_mem, N_Vector b, N_Vector weight,
+		   N_Vector ycur, N_Vector fcur);
+
+  int (*cv_lfree)(struct CVodeMemRec *cv_mem);
+
+  /* Linear Solver specific memory */
+
+  void *cv_lmem;           
+
+  /*------------
+    Saved Values
+    ------------*/
+
+  int cv_qu;                   /* last successful q value used                */
+  long int cv_nstlp;           /* step number of last setup call              */
+  realtype cv_h0u;             /* actual initial stepsize                     */
+  realtype cv_hu;              /* last successful h value used                */
+  realtype cv_saved_tq5;       /* saved value of tq[5]                        */
+  booleantype cv_jcur;         /* is Jacobian info. for lin. solver current?  */
+  realtype cv_tolsf;           /* tolerance scale factor                      */
+  int cv_qmax_alloc;           /* value of qmax used when allocating memory   */
+  int cv_indx_acor;            /* index of the zn vector with saved acor      */
+  booleantype cv_setupNonNull; /* does setup do anything?                     */
+
+  booleantype cv_VabstolMallocDone;
+  booleantype cv_MallocDone;  
+
+  /*-------------------------------------------
+    Error handler function and error ouput file 
+    -------------------------------------------*/
+
+  CVErrHandlerFn cv_ehfun;    /* error messages are handled by ehfun          */
+  void *cv_eh_data;           /* data pointer passed to ehfun                 */
+  FILE *cv_errfp;             /* CVODE error messages are sent to errfp       */
+
+  /*-------------------------
+    Stability Limit Detection
+    -------------------------*/
+
+  booleantype cv_sldeton;     /* is Stability Limit Detection on?             */
+  realtype cv_ssdat[6][4];    /* scaled data array for STALD                  */
+  int cv_nscon;               /* counter for STALD method                     */
+  long int cv_nor;            /* counter for number of order reductions       */
+
+  /*----------------
+    Rootfinding Data
+    ----------------*/
+
+  CVRootFn cv_gfun;        /* function g for roots sought                     */
+  int cv_nrtfn;            /* number of components of g                       */
+  int *cv_iroots;          /* array for root information                      */
+  int *cv_rootdir;         /* array specifying direction of zero-crossing     */
+  realtype cv_tlo;         /* nearest endpoint of interval in root search     */
+  realtype cv_thi;         /* farthest endpoint of interval in root search    */
+  realtype cv_trout;       /* t value returned by rootfinding routine         */
+  realtype *cv_glo;        /* saved array of g values at t = tlo              */
+  realtype *cv_ghi;        /* saved array of g values at t = thi              */
+  realtype *cv_grout;      /* array of g values at t = trout                  */
+  realtype cv_toutc;       /* copy of tout (if NORMAL mode)                   */
+  realtype cv_ttol;        /* tolerance on root location                      */
+  int cv_taskc;            /* copy of parameter itask                         */
+  int cv_irfnd;            /* flag showing whether last step had a root       */
+  long int cv_nge;         /* counter for g evaluations                       */
+  booleantype *cv_gactive; /* array with active/inactive event functions      */
+  int cv_mxgnull;          /* number of warning messages about possible g==0  */
+
+
+} *CVodeMem;
+
+/*
+ * =================================================================
+ *     I N T E R F A C E   T O    L I N E A R   S O L V E R S
+ * =================================================================
+ */
+  
+/*
+ * -----------------------------------------------------------------
+ * Communication between CVODE and a CVODE Linear Solver
+ * -----------------------------------------------------------------
+ * convfail (input to cv_lsetup)
+ *
+ * CV_NO_FAILURES : Either this is the first cv_setup call for this
+ *                  step, or the local error test failed on the
+ *                  previous attempt at this step (but the Newton
+ *                  iteration converged).
+ *
+ * CV_FAIL_BAD_J  : This value is passed to cv_lsetup if
+ *
+ *                  (a) The previous Newton corrector iteration
+ *                      did not converge and the linear solver's
+ *                      setup routine indicated that its Jacobian-
+ *                      related data is not current
+ *                                   or
+ *                  (b) During the previous Newton corrector
+ *                      iteration, the linear solver's solve routine
+ *                      failed in a recoverable manner and the
+ *                      linear solver's setup routine indicated that
+ *                      its Jacobian-related data is not current.
+ *
+ * CV_FAIL_OTHER  : During the current internal step try, the
+ *                  previous Newton iteration failed to converge
+ *                  even though the linear solver was using current
+ *                  Jacobian-related data.
+ * -----------------------------------------------------------------
+ */
+  
+/* Constants for convfail (input to cv_lsetup) */
+  
+#define CV_NO_FAILURES 0
+#define CV_FAIL_BAD_J  1
+#define CV_FAIL_OTHER  2
+
+/*
+ * -----------------------------------------------------------------
+ * int (*cv_linit)(CVodeMem cv_mem);
+ * -----------------------------------------------------------------
+ * The purpose of cv_linit is to complete initializations for a
+ * specific linear solver, such as counters and statistics.
+ * An LInitFn should return 0 if it has successfully initialized the
+ * CVODE linear solver and a negative value otherwise.
+ * If an error does occur, an appropriate message should be sent to
+ * the error handler function.
+ * -----------------------------------------------------------------
+ */
+  
+/*
+ * -----------------------------------------------------------------
+ * int (*cv_lsetup)(CVodeMem cv_mem, int convfail, N_Vector ypred,
+ *                 N_Vector fpred, booleantype *jcurPtr,
+ *                 N_Vector vtemp1, N_Vector vtemp2,
+ *                 N_Vector vtemp3);
+ * -----------------------------------------------------------------
+ * The job of cv_lsetup is to prepare the linear solver for
+ * subsequent calls to cv_lsolve. It may recompute Jacobian-
+ * related data is it deems necessary. Its parameters are as
+ * follows:
+ *
+ * cv_mem - problem memory pointer of type CVodeMem. See the
+ *          typedef earlier in this file.
+ *
+ * convfail - a flag to indicate any problem that occurred during
+ *            the solution of the nonlinear equation on the
+ *            current time step for which the linear solver is
+ *            being used. This flag can be used to help decide
+ *            whether the Jacobian data kept by a CVODE linear
+ *            solver needs to be updated or not.
+ *            Its possible values have been documented above.
+ *
+ * ypred - the predicted y vector for the current CVODE internal
+ *         step.
+ *
+ * fpred - f(tn, ypred).
+ *
+ * jcurPtr - a pointer to a boolean to be filled in by cv_lsetup.
+ *           The function should set *jcurPtr=TRUE if its Jacobian
+ *           data is current after the call and should set
+ *           *jcurPtr=FALSE if its Jacobian data is not current.
+ *           Note: If cv_lsetup calls for re-evaluation of
+ *           Jacobian data (based on convfail and CVODE state
+ *           data), it should return *jcurPtr=TRUE always;
+ *           otherwise an infinite loop can result.
+ *
+ * vtemp1 - temporary N_Vector provided for use by cv_lsetup.
+ *
+ * vtemp3 - temporary N_Vector provided for use by cv_lsetup.
+ *
+ * vtemp3 - temporary N_Vector provided for use by cv_lsetup.
+ *
+ * The cv_lsetup routine should return 0 if successful, a positive
+ * value for a recoverable error, and a negative value for an
+ * unrecoverable error.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * int (*cv_lsolve)(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+ *                  N_Vector ycur, N_Vector fcur);
+ * -----------------------------------------------------------------
+ * cv_lsolve must solve the linear equation P x = b, where
+ * P is some approximation to (I - gamma J), J = (df/dy)(tn,ycur)
+ * and the RHS vector b is input. The N-vector ycur contains
+ * the solver's current approximation to y(tn) and the vector
+ * fcur contains the N_Vector f(tn,ycur). The solution is to be
+ * returned in the vector b. cv_lsolve returns a positive value
+ * for a recoverable error and a negative value for an
+ * unrecoverable error. Success is indicated by a 0 return value.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * int (*cv_lfree)(CVodeMem cv_mem);
+ * -----------------------------------------------------------------
+ * cv_lfree should free up any memory allocated by the linear
+ * solver. This routine is called once a problem has been
+ * completed and the linear solver is no longer needed.  It should 
+ * return 0 upon success, nonzero on failure.
+ * -----------------------------------------------------------------
+ */
+  
+/*
+ * =================================================================
+ *   C V O D E    I N T E R N A L   F U N C T I O N S
+ * =================================================================
+ */
+
+/* Prototype of internal ewtSet function */
+
+int cvEwtSet(N_Vector ycur, N_Vector weight, void *data);
+
+/* High level error handler */
+
+void cvProcessError(CVodeMem cv_mem, 
+		    int error_code, const char *module, const char *fname, 
+		    const char *msgfmt, ...);
+
+/* Prototype of internal ErrHandler function */
+
+void cvErrHandler(int error_code, const char *module, const char *function, 
+		  char *msg, void *data);
+
+/*
+ * =================================================================
+ *   C V O D E    E R R O R    M E S S A G E S
+ * =================================================================
+ */
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define MSG_TIME        "t = %Lg"
+#define MSG_TIME_H      "t = %Lg and h = %Lg"
+#define MSG_TIME_INT    "t = %Lg is not between tcur - hu = %Lg and tcur = %Lg."
+#define MSG_TIME_TOUT   "tout = %Lg"
+#define MSG_TIME_TSTOP  "tstop = %Lg"
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define MSG_TIME        "t = %lg"
+#define MSG_TIME_H      "t = %lg and h = %lg"
+#define MSG_TIME_INT    "t = %lg is not between tcur - hu = %lg and tcur = %lg."
+#define MSG_TIME_TOUT   "tout = %lg"
+#define MSG_TIME_TSTOP  "tstop = %lg"
+
+#else
+
+#define MSG_TIME        "t = %g"
+#define MSG_TIME_H      "t = %g and h = %g"
+#define MSG_TIME_INT    "t = %g is not between tcur - hu = %g and tcur = %g."
+#define MSG_TIME_TOUT   "tout = %g"
+#define MSG_TIME_TSTOP  "tstop = %g"
+
+#endif
+
+/* Initialization and I/O error messages */
+
+#define MSGCV_NO_MEM "cvode_mem = NULL illegal."
+#define MSGCV_CVMEM_FAIL "Allocation of cvode_mem failed."
+#define MSGCV_MEM_FAIL "A memory request failed."
+#define MSGCV_BAD_LMM  "Illegal value for lmm. The legal values are CV_ADAMS and CV_BDF."
+#define MSGCV_BAD_ITER  "Illegal value for iter. The legal values are CV_FUNCTIONAL and CV_NEWTON."
+#define MSGCV_NO_MALLOC "Attempt to call before CVodeInit."
+#define MSGCV_NEG_MAXORD "maxord <= 0 illegal."
+#define MSGCV_BAD_MAXORD  "Illegal attempt to increase maximum method order."
+#define MSGCV_SET_SLDET  "Attempt to use stability limit detection with the CV_ADAMS method illegal."
+#define MSGCV_NEG_HMIN "hmin < 0 illegal."
+#define MSGCV_NEG_HMAX "hmax < 0 illegal."
+#define MSGCV_BAD_HMIN_HMAX "Inconsistent step size limits: hmin > hmax."
+#define MSGCV_BAD_RELTOL "reltol < 0 illegal."
+#define MSGCV_BAD_ABSTOL "abstol has negative component(s) (illegal)."
+#define MSGCV_NULL_ABSTOL "abstol = NULL illegal."
+#define MSGCV_NULL_Y0 "y0 = NULL illegal."
+#define MSGCV_NULL_F "f = NULL illegal."
+#define MSGCV_NULL_G "g = NULL illegal."
+#define MSGCV_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGCV_BAD_K "Illegal value for k."
+#define MSGCV_NULL_DKY "dky = NULL illegal."
+#define MSGCV_BAD_T "Illegal value for t." MSG_TIME_INT
+#define MSGCV_NO_ROOT "Rootfinding was not initialized."
+
+/* CVode Error Messages */
+
+#define MSGCV_NO_TOLS "No integration tolerances have been specified."
+#define MSGCV_LSOLVE_NULL "The linear solver's solve routine is NULL."
+#define MSGCV_YOUT_NULL "yout = NULL illegal."
+#define MSGCV_TRET_NULL "tret = NULL illegal."
+#define MSGCV_BAD_EWT "Initial ewt has component(s) equal to zero (illegal)."
+#define MSGCV_EWT_NOW_BAD "At " MSG_TIME ", a component of ewt has become <= 0."
+#define MSGCV_BAD_ITASK "Illegal value for itask."
+#define MSGCV_BAD_H0 "h0 and tout - t0 inconsistent."
+#define MSGCV_BAD_TOUT "Trouble interpolating at " MSG_TIME_TOUT ". tout too far back in direction of integration"
+#define MSGCV_EWT_FAIL "The user-provide EwtSet function failed."
+#define MSGCV_EWT_NOW_FAIL "At " MSG_TIME ", the user-provide EwtSet function failed."
+#define MSGCV_LINIT_FAIL "The linear solver's init routine failed."
+#define MSGCV_HNIL_DONE "The above warning has been issued mxhnil times and will not be issued again for this problem."
+#define MSGCV_TOO_CLOSE "tout too close to t0 to start integration."
+#define MSGCV_MAX_STEPS "At " MSG_TIME ", mxstep steps taken before reaching tout."
+#define MSGCV_TOO_MUCH_ACC "At " MSG_TIME ", too much accuracy requested."
+#define MSGCV_HNIL "Internal " MSG_TIME_H " are such that t + h = t on the next step. The solver will continue anyway."
+#define MSGCV_ERR_FAILS "At " MSG_TIME_H ", the error test failed repeatedly or with |h| = hmin."
+#define MSGCV_CONV_FAILS "At " MSG_TIME_H ", the corrector convergence test failed repeatedly or with |h| = hmin."
+#define MSGCV_SETUP_FAILED "At " MSG_TIME ", the setup routine failed in an unrecoverable manner."
+#define MSGCV_SOLVE_FAILED "At " MSG_TIME ", the solve routine failed in an unrecoverable manner."
+#define MSGCV_RHSFUNC_FAILED "At " MSG_TIME ", the right-hand side routine failed in an unrecoverable manner."
+#define MSGCV_RHSFUNC_UNREC "At " MSG_TIME ", the right-hand side failed in a recoverable manner, but no recovery is possible."
+#define MSGCV_RHSFUNC_REPTD "At " MSG_TIME " repeated recoverable right-hand side function errors."
+#define MSGCV_RHSFUNC_FIRST "The right-hand side routine failed at the first call."
+#define MSGCV_RTFUNC_FAILED "At " MSG_TIME ", the rootfinding routine failed in an unrecoverable manner."
+#define MSGCV_CLOSE_ROOTS "Root found at and very near " MSG_TIME "."
+#define MSGCV_BAD_TSTOP "The value " MSG_TIME_TSTOP " is behind current " MSG_TIME " in the direction of integration."
+#define MSGCV_INACTIVE_ROOTS "At the end of the first step, there are still some root functions identically 0. This warning will not be issued again."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvode/cvode_io.c b/src/cvode/cvode_io.c
new file mode 100644
index 0000000..bc50ffb
--- /dev/null
+++ b/src/cvode/cvode_io.c
@@ -0,0 +1,1134 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4210 $
+ * $Date: 2014-08-27 15:40:02 -0700 (Wed, 27 Aug 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the optional input and output
+ * functions for the CVODE solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvode_impl.h"
+#include <sundials/sundials_types.h>
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+#define lrw (cv_mem->cv_lrw)
+#define liw (cv_mem->cv_liw)
+#define lrw1 (cv_mem->cv_lrw1)
+#define liw1 (cv_mem->cv_liw1)
+
+/* 
+ * =================================================================
+ * CVODE optional input functions
+ * =================================================================
+ */
+
+/* 
+ * CVodeSetErrHandlerFn
+ *
+ * Specifies the error handler function
+ */
+
+int CVodeSetErrHandlerFn(void *cvode_mem, CVErrHandlerFn ehfun, void *eh_data)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetErrHandlerFn", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_ehfun = ehfun;
+  cv_mem->cv_eh_data = eh_data;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetErrFile
+ *
+ * Specifies the FILE pointer for output (NULL means no messages)
+ */
+
+int CVodeSetErrFile(void *cvode_mem, FILE *errfp)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetErrFile", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_errfp = errfp;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetIterType
+ *
+ * Specifies the iteration type (CV_FUNCTIONAL or CV_NEWTON)
+ */
+
+int CVodeSetIterType(void *cvode_mem, int iter)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetIterType", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if ((iter != CV_FUNCTIONAL) && (iter != CV_NEWTON)) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSetIterType", MSGCV_BAD_ITER);
+    return (CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_iter = iter;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetUserData
+ *
+ * Specifies the user data pointer for f
+ */
+
+int CVodeSetUserData(void *cvode_mem, void *user_data)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetUserData", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_user_data = user_data;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxOrd
+ *
+ * Specifies the maximum method order
+ */
+
+int CVodeSetMaxOrd(void *cvode_mem, int maxord)
+{
+  CVodeMem cv_mem;
+  int qmax_alloc;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetMaxOrd", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (maxord <= 0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSetMaxOrd", MSGCV_NEG_MAXORD);
+    return(CV_ILL_INPUT);
+  }
+  
+  /* Cannot increase maximum order beyond the value that
+     was used when allocating memory */
+  qmax_alloc = cv_mem->cv_qmax_alloc;
+
+  if (maxord > qmax_alloc) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSetMaxOrd", MSGCV_BAD_MAXORD);
+    return(CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_qmax = maxord;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxNumSteps
+ *
+ * Specifies the maximum number of integration steps
+ */
+
+int CVodeSetMaxNumSteps(void *cvode_mem, long int mxsteps)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetMaxNumSteps", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Passing mxsteps=0 sets the default. Passing mxsteps<0 disables the test. */
+
+  if (mxsteps == 0)
+    cv_mem->cv_mxstep = MXSTEP_DEFAULT;
+  else
+    cv_mem->cv_mxstep = mxsteps;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxHnilWarns
+ *
+ * Specifies the maximum number of warnings for small h
+ */
+
+int CVodeSetMaxHnilWarns(void *cvode_mem, int mxhnil)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetMaxHnilWarns", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_mxhnil = mxhnil;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ *CVodeSetStabLimDet
+ *
+ * Turns on/off the stability limit detection algorithm
+ */
+
+int CVodeSetStabLimDet(void *cvode_mem, booleantype sldet)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetStabLimDet", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if( sldet && (cv_mem->cv_lmm != CV_BDF) ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSetStabLimDet", MSGCV_SET_SLDET);
+    return(CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_sldeton = sldet;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetInitStep
+ *
+ * Specifies the initial step size
+ */
+
+int CVodeSetInitStep(void *cvode_mem, realtype hin)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetInitStep", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_hin = hin;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMinStep
+ *
+ * Specifies the minimum step size
+ */
+
+int CVodeSetMinStep(void *cvode_mem, realtype hmin)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetMinStep", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (hmin<0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSetMinStep", MSGCV_NEG_HMIN);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Passing 0 sets hmin = zero */
+  if (hmin == ZERO) {
+    cv_mem->cv_hmin = HMIN_DEFAULT;
+    return(CV_SUCCESS);
+  }
+
+  if (hmin * cv_mem->cv_hmax_inv > ONE) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSetMinStep", MSGCV_BAD_HMIN_HMAX);
+    return(CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_hmin = hmin;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxStep
+ *
+ * Specifies the maximum step size
+ */
+
+int CVodeSetMaxStep(void *cvode_mem, realtype hmax)
+{
+  realtype hmax_inv;
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetMaxStep", MSGCV_NO_MEM);
+    return (CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (hmax < 0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSetMaxStep", MSGCV_NEG_HMAX);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Passing 0 sets hmax = infinity */
+  if (hmax == ZERO) {
+    cv_mem->cv_hmax_inv = HMAX_INV_DEFAULT;
+    return(CV_SUCCESS);
+  }
+
+  hmax_inv = ONE/hmax;
+  if (hmax_inv * cv_mem->cv_hmin > ONE) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSetMaxStep", MSGCV_BAD_HMIN_HMAX);
+    return(CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_hmax_inv = hmax_inv;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetStopTime
+ *
+ * Specifies the time beyond which the integration is not to proceed.
+ */
+
+int CVodeSetStopTime(void *cvode_mem, realtype tstop)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetStopTime", MSGCV_NO_MEM);
+    return (CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* If CVode was called at least once, test if tstop is legal
+   * (i.e. if it was not already passed).
+   * If CVodeSetStopTime is called before the first call to CVode,
+   * tstop will be checked in CVode. */
+  if (cv_mem->cv_nst > 0) {
+
+    if ( (tstop - cv_mem->cv_tn) * cv_mem->cv_h < ZERO ) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVodeSetStopTime", MSGCV_BAD_TSTOP, tstop, cv_mem->cv_tn);
+      return(CV_ILL_INPUT);
+    }
+
+  }
+
+  cv_mem->cv_tstop = tstop;
+  cv_mem->cv_tstopset = TRUE;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxErrTestFails
+ *
+ * Specifies the maximum number of error test failures during one
+ * step try.
+ */
+
+int CVodeSetMaxErrTestFails(void *cvode_mem, int maxnef)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetMaxErrTestFails", MSGCV_NO_MEM);
+    return (CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_maxnef = maxnef;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxConvFails
+ *
+ * Specifies the maximum number of nonlinear convergence failures 
+ * during one step try.
+ */
+
+int CVodeSetMaxConvFails(void *cvode_mem, int maxncf)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetMaxConvFails", MSGCV_NO_MEM);
+    return (CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_maxncf = maxncf;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxNonlinIters
+ *
+ * Specifies the maximum number of nonlinear iterations during
+ * one solve.
+ */
+
+int CVodeSetMaxNonlinIters(void *cvode_mem, int maxcor)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetMaxNonlinIters", MSGCV_NO_MEM);
+    return (CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_maxcor = maxcor;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetNonlinConvCoef
+ *
+ * Specifies the coeficient in the nonlinear solver convergence
+ * test
+ */
+
+int CVodeSetNonlinConvCoef(void *cvode_mem, realtype nlscoef)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetNonlinConvCoef", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_nlscoef = nlscoef;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetRootDirection
+ *
+ * Specifies the direction of zero-crossings to be monitored.
+ * The default is to monitor both crossings.
+ */
+
+int CVodeSetRootDirection(void *cvode_mem, int *rootdir)
+{
+  CVodeMem cv_mem;
+  int i, nrt;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetRootDirection", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  nrt = cv_mem->cv_nrtfn;
+  if (nrt==0) {
+    cvProcessError(NULL, CV_ILL_INPUT, "CVODE", "CVodeSetRootDirection", MSGCV_NO_ROOT);
+    return(CV_ILL_INPUT);    
+  }
+
+  for(i=0; i<nrt; i++) cv_mem->cv_rootdir[i] = rootdir[i];
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeSetNoInactiveRootWarn
+ *
+ * Disables issuing a warning if some root function appears
+ * to be identically zero at the beginning of the integration
+ */
+
+int CVodeSetNoInactiveRootWarn(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeSetNoInactiveRootWarn", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_mxgnull = 0;
+  
+  return(CV_SUCCESS);
+}
+
+
+/* 
+ * =================================================================
+ * CVODE optional output functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define nst            (cv_mem->cv_nst)
+#define nfe            (cv_mem->cv_nfe)
+#define ncfn           (cv_mem->cv_ncfn)
+#define netf           (cv_mem->cv_netf)
+#define nni            (cv_mem->cv_nni)
+#define nsetups        (cv_mem->cv_nsetups)
+#define qu             (cv_mem->cv_qu)
+#define next_q         (cv_mem->cv_next_q)
+#define ewt            (cv_mem->cv_ewt)  
+#define hu             (cv_mem->cv_hu)
+#define next_h         (cv_mem->cv_next_h)
+#define h0u            (cv_mem->cv_h0u)
+#define tolsf          (cv_mem->cv_tolsf)  
+#define acor           (cv_mem->cv_acor)
+#define lrw            (cv_mem->cv_lrw)
+#define liw            (cv_mem->cv_liw)
+#define nge            (cv_mem->cv_nge)
+#define iroots         (cv_mem->cv_iroots)
+#define nor            (cv_mem->cv_nor)
+#define sldeton        (cv_mem->cv_sldeton)
+#define tn             (cv_mem->cv_tn)
+#define efun           (cv_mem->cv_efun)
+
+/*
+ * CVodeGetNumSteps
+ *
+ * Returns the current number of integration steps
+ */
+
+int CVodeGetNumSteps(void *cvode_mem, long int *nsteps)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetNumSteps", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nsteps = nst;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNumRhsEvals
+ *
+ * Returns the current number of calls to f
+ */
+
+int CVodeGetNumRhsEvals(void *cvode_mem, long int *nfevals)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetNumRhsEvals", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nfevals = nfe;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNumLinSolvSetups
+ *
+ * Returns the current number of calls to the linear solver setup routine
+ */
+
+int CVodeGetNumLinSolvSetups(void *cvode_mem, long int *nlinsetups)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetNumLinSolvSetups", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nlinsetups = nsetups;
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeGetNumErrTestFails
+ *
+ * Returns the current number of error test failures
+ */
+
+int CVodeGetNumErrTestFails(void *cvode_mem, long int *netfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetNumErrTestFails", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *netfails = netf;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetLastOrder
+ *
+ * Returns the order on the last succesful step
+ */
+
+int CVodeGetLastOrder(void *cvode_mem, int *qlast)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetLastOrder", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *qlast = qu;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetCurrentOrder
+ *
+ * Returns the order to be attempted on the next step
+ */
+
+int CVodeGetCurrentOrder(void *cvode_mem, int *qcur)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetCurrentOrder", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *qcur = next_q;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNumStabLimOrderReds
+ *
+ * Returns the number of order reductions triggered by the stability
+ * limit detection algorithm
+ */
+
+int CVodeGetNumStabLimOrderReds(void *cvode_mem, long int *nslred)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetNumStabLimOrderReds", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sldeton==FALSE)
+    *nslred = 0;
+  else
+    *nslred = nor;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetActualInitStep
+ *
+ * Returns the step size used on the first step
+ */
+
+int CVodeGetActualInitStep(void *cvode_mem, realtype *hinused)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetActualInitStep", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *hinused = h0u;
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeGetLastStep
+ *
+ * Returns the step size used on the last successful step
+ */
+
+int CVodeGetLastStep(void *cvode_mem, realtype *hlast)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetLastStep", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *hlast = hu;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetCurrentStep
+ *
+ * Returns the step size to be attempted on the next step
+ */
+
+int CVodeGetCurrentStep(void *cvode_mem, realtype *hcur)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetCurrentStep", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+  
+  *hcur = next_h;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetCurrentTime
+ *
+ * Returns the current value of the independent variable
+ */
+
+int CVodeGetCurrentTime(void *cvode_mem, realtype *tcur)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetCurrentTime", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *tcur = tn;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetTolScaleFactor
+ *
+ * Returns a suggested factor for scaling tolerances
+ */
+
+int CVodeGetTolScaleFactor(void *cvode_mem, realtype *tolsfact)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetTolScaleFactor", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *tolsfact = tolsf;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetErrWeights
+ *
+ * This routine returns the current weight vector.
+ */
+
+int CVodeGetErrWeights(void *cvode_mem, N_Vector eweight)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetErrWeights", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  N_VScale(ONE, ewt, eweight);
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeGetEstLocalErrors
+ *
+ * Returns an estimate of the local error
+ */
+
+int CVodeGetEstLocalErrors(void *cvode_mem, N_Vector ele)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetEstLocalErrors", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  N_VScale(ONE, acor, ele);
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetWorkSpace
+ *
+ * Returns integrator work space requirements
+ */
+
+int CVodeGetWorkSpace(void *cvode_mem, long int *lenrw, long int *leniw)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetWorkSpace", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *leniw = liw;
+  *lenrw = lrw;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetIntegratorStats
+ *
+ * Returns integrator statistics
+ */
+
+int CVodeGetIntegratorStats(void *cvode_mem, long int *nsteps, long int *nfevals, 
+                            long int *nlinsetups, long int *netfails, int *qlast, 
+                            int *qcur, realtype *hinused, realtype *hlast, 
+                            realtype *hcur, realtype *tcur)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetIntegratorStats", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nsteps = nst;
+  *nfevals = nfe;
+  *nlinsetups = nsetups;
+  *netfails = netf;
+  *qlast = qu;
+  *qcur = next_q;
+  *hinused = h0u;
+  *hlast = hu;
+  *hcur = next_h;
+  *tcur = tn;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNumGEvals
+ *
+ * Returns the current number of calls to g (for rootfinding)
+ */
+
+int CVodeGetNumGEvals(void *cvode_mem, long int *ngevals)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetNumGEvals", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *ngevals = nge;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetRootInfo
+ *
+ * Returns pointer to array rootsfound showing roots found
+ */
+
+int CVodeGetRootInfo(void *cvode_mem, int *rootsfound)
+{
+  CVodeMem cv_mem;
+  int i, nrt;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetRootInfo", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  nrt = cv_mem->cv_nrtfn;
+
+  for (i=0; i<nrt; i++) rootsfound[i] = iroots[i];
+
+  return(CV_SUCCESS);
+}
+
+
+/* 
+ * CVodeGetNumNonlinSolvIters
+ *
+ * Returns the current number of iterations in the nonlinear solver
+ */
+
+int CVodeGetNumNonlinSolvIters(void *cvode_mem, long int *nniters)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetNumNonlinSolvIters", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nniters = nni;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNumNonlinSolvConvFails
+ *
+ * Returns the current number of convergence failures in the
+ * nonlinear solver
+ */
+
+int CVodeGetNumNonlinSolvConvFails(void *cvode_mem, long int *nncfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetNumNonlinSolvConvFails", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nncfails = ncfn;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNonlinSolvStats
+ *
+ * Returns nonlinear solver statistics
+ */
+
+int CVodeGetNonlinSolvStats(void *cvode_mem, long int *nniters, 
+                            long int *nncfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODE", "CVodeGetNonlinSolvStats", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nniters = nni;
+  *nncfails = ncfn;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+char *CVodeGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(24*sizeof(char));
+
+  switch(flag) {
+  case CV_SUCCESS:
+    sprintf(name,"CV_SUCCESS");
+    break;
+  case CV_TSTOP_RETURN:
+    sprintf(name,"CV_TSTOP_RETURN");
+    break;
+  case CV_ROOT_RETURN:
+    sprintf(name,"CV_ROOT_RETURN");
+    break;
+  case CV_TOO_MUCH_WORK:
+    sprintf(name,"CV_TOO_MUCH_WORK");
+    break;
+  case CV_TOO_MUCH_ACC:
+    sprintf(name,"CV_TOO_MUCH_ACC");
+    break;
+  case CV_ERR_FAILURE:
+    sprintf(name,"CV_ERR_FAILURE");
+    break;
+  case CV_CONV_FAILURE:
+    sprintf(name,"CV_CONV_FAILURE");
+    break;
+  case CV_LINIT_FAIL:
+    sprintf(name,"CV_LINIT_FAIL");
+    break;
+  case CV_LSETUP_FAIL:
+    sprintf(name,"CV_LSETUP_FAIL");
+    break;
+  case CV_LSOLVE_FAIL:
+    sprintf(name,"CV_LSOLVE_FAIL");
+    break;
+  case CV_RHSFUNC_FAIL:
+    sprintf(name,"CV_RHSFUNC_FAIL");
+    break;
+  case CV_FIRST_RHSFUNC_ERR:
+    sprintf(name,"CV_FIRST_RHSFUNC_ERR");
+    break;
+  case CV_REPTD_RHSFUNC_ERR:
+    sprintf(name,"CV_REPTD_RHSFUNC_ERR");
+    break;
+  case CV_UNREC_RHSFUNC_ERR:
+    sprintf(name,"CV_UNREC_RHSFUNC_ERR");
+    break;
+  case CV_RTFUNC_FAIL:
+    sprintf(name,"CV_RTFUNC_FAIL");
+    break;
+  case CV_MEM_FAIL:
+    sprintf(name,"CV_MEM_FAIL");
+    break;
+  case CV_MEM_NULL:
+    sprintf(name,"CV_MEM_NULL");
+    break;
+  case CV_ILL_INPUT:
+    sprintf(name,"CV_ILL_INPUT");
+    break;
+  case CV_NO_MALLOC:
+    sprintf(name,"CV_NO_MALLOC");
+    break;
+  case CV_BAD_K:
+    sprintf(name,"CV_BAD_K");
+    break;
+  case CV_BAD_T:
+    sprintf(name,"CV_BAD_T");
+    break;
+  case CV_BAD_DKY:
+    sprintf(name,"CV_BAD_DKY");
+    break;
+  case CV_TOO_CLOSE:
+    sprintf(name,"CV_TOO_CLOSE");
+    break;    
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
diff --git a/src/cvode/cvode_klu.c b/src/cvode/cvode_klu.c
new file mode 100644
index 0000000..9814c39
--- /dev/null
+++ b/src/cvode/cvode_klu.c
@@ -0,0 +1,612 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVKLU linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvode/cvode_klu.h"
+#include "cvode_impl.h"
+#include "cvode_sparse_impl.h"
+#include "sundials/sundials_klu_impl.h"
+#include "sundials/sundials_math.h"
+
+/* Constants */
+
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+#define TWOTHIRDS    RCONST(0.6666666666666667)
+
+/* CVKLU linit, lsetup, lsolve, and lfree routines */
+ 
+static int cvKLUInit(CVodeMem cv_mem);
+
+static int cvKLUSetup(CVodeMem cv_mem, int convfail, N_Vector ypred, 
+		      N_Vector fpred, booleantype *jcurPtr,
+		      N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int cvKLUSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+		      N_Vector ycur, N_Vector fcur);
+
+static int cvKLUFree(CVodeMem cv_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * CVKLU
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the CVODE / KLU linear solver module.  
+ * CVKLU first calls the existing lfree routine if this is not NULL.
+ * Then it sets the cv_linit, cv_lsetup, cv_lsolve, cv_lperf, and
+ * cv_lfree fields in (*cv_mem) to be CVKLUInit, CVKLUSetup,
+ * CVKLUSolve, NULL, and CVKLUFree, respectively.
+ * It allocates memory for a structure of type CVkluMemRec and sets
+ * the cv_lmem field in (*cvode_mem) to the address of this structure.
+ * It sets setupNonNull in (*cvode_mem) to TRUE.
+ * Finally, it allocates memory for KLU.
+ * The return value is CVSLS_SUCCESS = 0, CVSLS_LMEM_FAIL = -1,
+ * or CVSLS_ILL_INPUT = -2.
+ *
+ * NOTE: The KLU linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVKLU will first 
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int CVKLU(void *cvode_mem, int n, int nnz, int sparsetype)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+  KLUData klu_data;
+  int flag;
+
+  /* Return immediately if cv_mem is NULL. */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "cvKLU", 
+                   MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the Direct solver */
+  if (cv_mem->cv_tempv->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSLS", "cvKLU", 
+                   MSGSP_BAD_NVECTOR);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  if (cv_mem->cv_lfree != NULL) cv_mem->cv_lfree(cv_mem);
+
+  /* Set five main function fields in cv_mem. */
+  cv_mem->cv_linit  = cvKLUInit;
+  cv_mem->cv_lsetup = cvKLUSetup;
+  cv_mem->cv_lsolve = cvKLUSolve;
+  cv_mem->cv_lfree  = cvKLUFree;
+
+  /* Get memory for CVSlsMemRec. */
+  cvsls_mem = (CVSlsMem) malloc(sizeof(struct CVSlsMemRec));
+  if (cvsls_mem == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvKLU", 
+                   MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Get memory for KLUData. */
+  klu_data = (KLUData)malloc(sizeof(struct KLUDataRec));
+  if (klu_data == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvKLU", 
+                   MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  cv_mem->cv_setupNonNull = TRUE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  cvsls_mem->s_jaceval = NULL;
+  cvsls_mem->s_jacdata = NULL;
+  cvsls_mem->sparsetype = sparsetype;
+
+  /* Allocate memory for the sparse Jacobian */
+  cvsls_mem->s_JacMat = SparseNewMat(n, n, nnz, sparsetype);
+  if (cvsls_mem->s_JacMat == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvKLU", 
+                   MSGSP_MEM_FAIL);
+    free(cvsls_mem);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Allocate memory for saved sparse Jacobian */
+  cvsls_mem->s_savedJ = SparseNewMat(n, n, nnz, sparsetype);
+  if (cvsls_mem->s_savedJ == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvKLU", 
+                   MSGSP_MEM_FAIL);
+    SparseDestroyMat(cvsls_mem->s_JacMat);
+    free(cvsls_mem);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Initialize KLU structures */
+  switch (sparsetype) {
+    case CSC_MAT:
+      klu_data->sun_klu_solve = &klu_solve;
+      break;
+    case CSR_MAT:
+      klu_data->sun_klu_solve = &klu_tsolve;
+      break;
+    default:
+      SparseDestroyMat(cvsls_mem->s_JacMat);
+      free(klu_data);
+      free(cvsls_mem);
+      return(CVSLS_ILL_INPUT);
+  }
+  klu_data->s_Symbolic = NULL;
+  klu_data->s_Numeric = NULL;
+
+  /* Set default parameters for KLU */
+  flag = klu_defaults(&klu_data->s_Common);
+  if (flag == 0) {
+    cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "cvKLU", 
+                   MSGSP_PACKAGE_FAIL);
+    return(CVSLS_PACKAGE_FAIL);
+  }
+
+  /* Set ordering to COLAMD as the cvode default use.
+     Users can set a different value with CVKLUSetOrdering,
+     and the user-set value is loaded before any call to klu_analyze in
+     CVKLUSetup.  */
+  klu_data->s_ordering = 1;
+  klu_data->s_Common.ordering = klu_data->s_ordering;
+
+  /* Attach linear solver memory to the integrator memory */
+  cvsls_mem->s_solver_data = (void *) klu_data;
+  cv_mem->cv_lmem = cvsls_mem;
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+
+  return(CVSLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to CVKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is CVSLS_SUCCESS = 0, CVSLS_MEM_NULL = -1,
+ * CVSLS_LMEM_NULL = -2, CVSLS_ILL_INPUT = -3, or CVSLS_MEM_FAIL = -4.
+ * -----------------------------------------------------------------
+ */
+
+int CVKLUReInit(void *cvode_mem, int n, int nnz, int reinit_type)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+  KLUData klu_data;
+
+  /* Return immediately if cv_mem is NULL. */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVKLUReInit", 
+                   MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Return immediately if cv_lmem is NULL. */
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(NULL, CVSLS_LMEM_NULL, "CVSLS", "CVKLUReInit", 
+                   MSGSP_LMEM_NULL);
+    return(CVSLS_LMEM_NULL);
+  }
+  cvsls_mem = (CVSlsMem) (cv_mem->cv_lmem);
+  klu_data = (KLUData) cvsls_mem->s_solver_data;
+
+  /* Return if reinit_type is not valid */
+  if ((reinit_type != 1) && (reinit_type != 2)) {
+    cvProcessError(NULL, CVSLS_ILL_INPUT, "CVSLS", "CVKLUReInit", 
+                   MSGSP_ILL_INPUT);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  if (reinit_type == 1) {
+
+    /* Destroy previous Jacobian information */
+    if (cvsls_mem->s_JacMat) {
+      SparseDestroyMat(cvsls_mem->s_JacMat);
+    }
+
+    /* Allocate memory for the sparse Jacobian */
+    cvsls_mem->s_JacMat = SparseNewMat(n, n, nnz, cvsls_mem->sparsetype);
+    if (cvsls_mem->s_JacMat == NULL) {
+      cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "CVKLU", 
+                     MSGSP_MEM_FAIL);
+      return(CVSLS_MEM_FAIL);
+    }
+  }
+
+  /* Free the prior factorazation and reset for first factorization */
+  if( klu_data->s_Symbolic != NULL)
+    klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  if( klu_data->s_Numeric != NULL)
+    klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  cvsls_mem->s_first_factorize = 1;
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVKLU interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the CVKLU
+  linear solver module.  
+  It returns 0 if successful.
+*/
+
+static int cvKLUInit(CVodeMem cv_mem)
+{
+  CVSlsMem cvsls_mem;
+
+  cvsls_mem = (CVSlsMem)cv_mem->cv_lmem;
+
+  cvsls_mem->s_jacdata = cv_mem->cv_user_data;
+
+  cvsls_mem->s_nje = 0;
+  /* This forces factorization for every call to CVODE */
+  cvsls_mem->s_first_factorize = 1;
+  cvsls_mem->s_nstlj = 0;
+
+  cvsls_mem->s_last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the CVKLU linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     CVSLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int cvKLUSetup(CVodeMem cv_mem, int convfail, N_Vector ypred, 
+		      N_Vector fpred, booleantype *jcurPtr,
+		      N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  int retval;
+  long int nst, nstlj;
+  realtype tn, gamma, gammap, dgamma;
+  CVSlsMem cvsls_mem;
+  CVSlsSparseJacFn jaceval;
+  KLUData klu_data;
+  SlsMat JacMat, savedJ;
+  void *jacdata;
+  
+  realtype uround_twothirds;
+
+  uround_twothirds = SUNRpowerR(cv_mem->cv_uround,TWOTHIRDS);
+
+  cvsls_mem = (CVSlsMem) (cv_mem->cv_lmem);
+  tn = cv_mem->cv_tn; 
+  gamma = cv_mem->cv_gamma;
+  gammap = cv_mem->cv_gammap;
+  nst = cv_mem->cv_nst;
+
+  klu_data = (KLUData) cvsls_mem->s_solver_data;
+
+  jaceval = cvsls_mem->s_jaceval;
+  jacdata = cvsls_mem->s_jacdata;
+  JacMat = cvsls_mem->s_JacMat;
+  savedJ = cvsls_mem->s_savedJ;
+  nstlj = cvsls_mem->s_nstlj;
+
+  /* Check that Jacobian eval routine is set */
+  if (jaceval == NULL) {
+    cvProcessError(cv_mem, CVSLS_JAC_NOSET, "CVSLS", "cvKLUSetup", 
+		    MSGSP_JAC_NOSET);
+    free(cvsls_mem); cvsls_mem = NULL;
+    return(CVSLS_JAC_NOSET);
+  }
+
+  /* Determine whether Jacobian needs to be recalculated */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVS_MSBJ) ||
+         ((convfail == CV_FAIL_BAD_J) && (dgamma < CVS_DGMAX)) ||
+         (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    SparseCopyMat(savedJ, JacMat);
+  } else {
+    /* If jok = FALSE, call jac routine for new J value */
+    cvsls_mem->s_nje++;
+    cvsls_mem->s_nstlj = nst;
+    *jcurPtr = TRUE;
+    SparseSetMatToZero(JacMat);
+    retval = jaceval(tn, ypred, fpred, JacMat, jacdata, vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      cvProcessError(cv_mem, CVSLS_JACFUNC_UNRECVR, "CVSLS", "cvKLUSetup", MSGSP_JACFUNC_FAILED);
+      cvsls_mem->s_last_flag = CVSLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      cvsls_mem->s_last_flag = CVSLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    SparseCopyMat(JacMat, savedJ);
+  }
+
+  /* Scale and add I to get M = I - gamma*J */
+  SparseScaleMat(-gamma, JacMat);
+  SparseAddIdentityMat(JacMat);
+
+  if (cvsls_mem->s_first_factorize) {
+    /* ------------------------------------------------------------
+       Get the symbolic factorization
+       ------------------------------------------------------------*/ 
+    /* Update the ordering option with any user-updated values from 
+       calls to CVKLUSetOrdering */
+    klu_data->s_Common.ordering = klu_data->s_ordering;
+
+    if (klu_data->s_Symbolic != NULL) {
+       klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+    }
+    klu_data->s_Symbolic = klu_analyze(JacMat->NP, JacMat->indexptrs, 
+				       JacMat->indexvals, &(klu_data->s_Common));
+    if (klu_data->s_Symbolic == NULL) {
+      cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(CVSLS_PACKAGE_FAIL);
+    }
+
+    /* ------------------------------------------------------------
+       Compute the LU factorization of  the Jacobian.
+       ------------------------------------------------------------*/
+    /* If klu_factor previously called, free data */
+    if( klu_data->s_Numeric != NULL) {
+       klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+    }
+    klu_data->s_Numeric = klu_factor(JacMat->indexptrs, JacMat->indexvals, 
+				     JacMat->data, 
+				     klu_data->s_Symbolic, &(klu_data->s_Common));
+
+    if (klu_data->s_Numeric == NULL) {
+      cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(CVSLS_PACKAGE_FAIL);
+    }
+
+    cvsls_mem->s_first_factorize = 0;
+  }
+  else {
+
+    retval = klu_refactor(JacMat->indexptrs, JacMat->indexvals, JacMat->data, 
+			  klu_data->s_Symbolic, klu_data->s_Numeric,
+			  &(klu_data->s_Common));
+    if (retval == 0) {
+      cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "cvKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(CVSLS_PACKAGE_FAIL);
+    }
+    
+    /*-----------------------------------------------------------
+      Check if a cheap estimate of the reciprocal of the condition 
+      number is getting too small.  If so, delete
+      the prior numeric factorization and recompute it.
+      -----------------------------------------------------------*/
+    
+    retval = klu_rcond(klu_data->s_Symbolic, klu_data->s_Numeric,
+		       &(klu_data->s_Common));
+    if (retval == 0) {
+      cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(CVSLS_PACKAGE_FAIL);
+    }
+
+    if ( (klu_data->s_Common.rcond)  < uround_twothirds ) {
+      
+      /* Condition number may be getting large.  
+	 Compute more accurate estimate */
+      retval = klu_condest(JacMat->indexptrs, JacMat->data, 
+			   klu_data->s_Symbolic, klu_data->s_Numeric,
+			   &(klu_data->s_Common));
+      if (retval == 0) {
+	cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSetup", 
+		       MSGSP_PACKAGE_FAIL);
+	return(CVSLS_PACKAGE_FAIL);
+      }
+      
+      if ( (klu_data->s_Common.condest) > 
+	   (1.0/uround_twothirds) ) {
+
+	/* More accurate estimate also says condition number is 
+	   large, so recompute the numeric factorization */
+
+	klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+	
+	klu_data->s_Numeric = klu_factor(JacMat->indexptrs, JacMat->indexvals, 
+					 JacMat->data, klu_data->s_Symbolic, 
+					 &(klu_data->s_Common));
+
+	if (klu_data->s_Numeric == NULL) {
+	  cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSetup", 
+			 MSGSP_PACKAGE_FAIL);
+	  return(CVSLS_PACKAGE_FAIL);
+	}
+      }
+    }
+  }
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+  
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the CVKLU linear
+  solver module.  It calls the KLU solve routine,
+  then returns CVSLS_SUCCESS = 0.
+*/
+
+static int cvKLUSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+		      N_Vector ycur, N_Vector fcur)
+{
+  int flag, lmm;
+  realtype gamrat;
+  CVSlsMem cvsls_mem;
+  KLUData klu_data;
+  SlsMat JacMat;
+  realtype *bd;
+  
+  gamrat = cv_mem->cv_gamrat;
+  lmm = cv_mem->cv_lmm;
+
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+  JacMat = cvsls_mem->s_JacMat;
+
+  klu_data = (KLUData) cvsls_mem->s_solver_data;
+
+  bd = N_VGetArrayPointer(b);
+
+  /* Call KLU to solve the linear system */
+  flag = klu_data->sun_klu_solve(klu_data->s_Symbolic, klu_data->s_Numeric, JacMat->NP, 1, bd, 
+                                 &(klu_data->s_Common));
+  if (flag == 0) {
+    cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSolve", 
+		    MSGSP_PACKAGE_FAIL);
+    return(CVSLS_PACKAGE_FAIL);
+  }
+
+  /* Scale the correction to account for change in gamma. */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    N_VScale(TWO/(ONE + gamrat), b, b);
+  }
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+  return(CVSLS_SUCCESS);
+}
+
+/*
+  This routine frees memory specific to the CVKLU linear solver.
+*/
+
+static int cvKLUFree(CVodeMem cv_mem)
+{
+  CVSlsMem cvsls_mem;
+  KLUData klu_data;
+  
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+  klu_data = (KLUData) cvsls_mem->s_solver_data;
+
+  if( klu_data->s_Numeric != NULL)
+  {
+     klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  }
+  if( klu_data->s_Symbolic != NULL)
+  {
+     klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  }
+
+  if (cvsls_mem->s_JacMat) {
+    SparseDestroyMat(cvsls_mem->s_JacMat);
+    cvsls_mem->s_JacMat = NULL;
+  }
+
+  if (cvsls_mem->s_savedJ) {
+    SparseDestroyMat(cvsls_mem->s_savedJ);
+    cvsls_mem->s_savedJ = NULL;
+  }
+
+  free(klu_data); 
+  free(cv_mem->cv_lmem); 
+
+  return(0);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * CVKLUSetOrdering sets the ordering used by KLU for reducing fill.
+ * Options are: 0 for AMD, 1 for COLAMD, and 2 for the natural ordering.
+ * The default used in CVODE is 1 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+int CVKLUSetOrdering(void *cv_mem_v, int ordering_choice)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+  KLUData klu_data;
+
+ /* Return immediately if cv_mem is NULL */
+  if (cv_mem_v == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVKLUSetOrdering",
+		    MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cv_mem_v;
+
+ /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) ) {
+    cvProcessError(NULL, CVSLS_ILL_INPUT, "CVSLS", "CVKLUSetOrdering",
+		    MSGSP_ILL_INPUT);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+  klu_data = (KLUData) cvsls_mem->s_solver_data;
+
+  klu_data->s_ordering = ordering_choice;
+
+  return(CVSLS_SUCCESS);
+}
diff --git a/src/cvode/cvode_lapack.c b/src/cvode/cvode_lapack.c
new file mode 100644
index 0000000..bb26876
--- /dev/null
+++ b/src/cvode/cvode_lapack.c
@@ -0,0 +1,660 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a CVODE dense linear solver
+ * using BLAS and LAPACK functions.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * NOTE: the only operation that does not use Blas/Lapack functions
+ *       is matrix plus identity (in calculating I-gamma*J in lsetup)
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvode/cvode_lapack.h>
+#include "cvode_direct_impl.h"
+#include "cvode_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constant */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PROTOTYPES FOR PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/* CVLAPACK DENSE linit, lsetup, lsolve, and lfree routines */ 
+static int cvLapackDenseInit(CVodeMem cv_mem);
+static int cvLapackDenseSetup(CVodeMem cv_mem, int convfail, 
+                              N_Vector yP, N_Vector fctP, 
+                              booleantype *jcurPtr,
+                              N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int cvLapackDenseSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                              N_Vector yC, N_Vector fctC);
+static int cvLapackDenseFree(CVodeMem cv_mem);
+
+/* CVLAPACK BAND linit, lsetup, lsolve, and lfree routines */ 
+static int cvLapackBandInit(CVodeMem cv_mem);
+static int cvLapackBandSetup(CVodeMem cv_mem, int convfail, 
+                             N_Vector yP, N_Vector fctP, 
+                             booleantype *jcurPtr,
+                             N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int cvLapackBandSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                             N_Vector yC, N_Vector fctC);
+static int cvLapackBandFree(CVodeMem cv_mem);
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define lmm            (cv_mem->cv_lmm)
+#define f              (cv_mem->cv_f)
+#define nst            (cv_mem->cv_nst)
+#define tn             (cv_mem->cv_tn)
+#define h              (cv_mem->cv_h)
+#define gamma          (cv_mem->cv_gamma)
+#define gammap         (cv_mem->cv_gammap)
+#define gamrat         (cv_mem->cv_gamrat)
+#define ewt            (cv_mem->cv_ewt)
+
+#define linit          (cv_mem->cv_linit)
+#define lsetup         (cv_mem->cv_lsetup)
+#define lsolve         (cv_mem->cv_lsolve)
+#define lfree          (cv_mem->cv_lfree)
+#define lmem           (cv_mem->cv_lmem)
+#define tempv          (cv_mem->cv_tempv)
+#define setupNonNull   (cv_mem->cv_setupNonNull)
+
+#define mtype          (cvdls_mem->d_type)
+#define n              (cvdls_mem->d_n)
+#define ml             (cvdls_mem->d_ml)
+#define mu             (cvdls_mem->d_mu)
+#define smu            (cvdls_mem->d_smu)
+#define jacDQ          (cvdls_mem->d_jacDQ)
+#define djac           (cvdls_mem->d_djac)
+#define bjac           (cvdls_mem->d_bjac)
+#define M              (cvdls_mem->d_M)
+#define savedJ         (cvdls_mem->d_savedJ)
+#define pivots         (cvdls_mem->d_pivots)
+#define nstlj          (cvdls_mem->d_nstlj)
+#define nje            (cvdls_mem->d_nje)
+#define nfeDQ          (cvdls_mem->d_nfeDQ)
+#define J_data         (cvdls_mem->d_J_data)
+#define last_flag      (cvdls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS FOR IMPLICIT INTEGRATION
+ * =================================================================
+ */
+              
+/*
+ * -----------------------------------------------------------------
+ * CVLapackDense
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the linear solver module.  CVLapackDense first
+ * calls the existing lfree routine if this is not NULL.  Then it sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be cvLapackDenseInit, cvLapackDenseSetup, cvLapackDenseSolve, 
+ * and cvLapackDenseFree, respectively.  It allocates memory for a 
+ * structure of type CVDlsMemRec and sets the cv_lmem field in 
+ * (*cvode_mem) to the address of this structure.  It sets setupNonNull 
+ * in (*cvode_mem) to TRUE, and the d_jac field to the default 
+ * cvDlsDenseDQJac. Finally, it allocates memory for M, pivots, and 
+ * savedJ.
+ * The return value is SUCCESS = 0, or LMEM_FAIL = -1.
+ *
+ * NOTE: The dense linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVLapackDense will first 
+ *       test for a compatible N_Vector internal representation 
+ *       by checking that N_VGetArrayPointer and N_VSetArrayPointer 
+ *       exist.
+ * -----------------------------------------------------------------
+ */
+int CVLapackDense(void *cvode_mem, int N)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVLAPACK", "CVLapackDense", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the LAPACK solver */
+  if (tempv->ops->nvgetarraypointer == NULL ||
+      tempv->ops->nvsetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVLAPACK", "CVLapackDense", MSGD_BAD_NVECTOR);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  if (lfree !=NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */
+  linit  = cvLapackDenseInit;
+  lsetup = cvLapackDenseSetup;
+  lsolve = cvLapackDenseSolve;
+  lfree  = cvLapackDenseFree;
+
+  /* Get memory for CVDlsMemRec */
+  cvdls_mem = NULL;
+  cvdls_mem = (CVDlsMem) malloc(sizeof(struct CVDlsMemRec));
+  if (cvdls_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVLAPACK", "CVLapackDense", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_DENSE;
+
+  /* Initialize Jacobian-related data */
+  jacDQ  = TRUE;
+  djac   = NULL;
+  J_data = NULL;
+
+  last_flag = CVDLS_SUCCESS;
+  cvDlsInitializeCounters(cvdls_mem);
+  setupNonNull = TRUE;
+
+  /* Set problem dimension */
+  n = (long int) N;
+
+  /* Allocate memory for M, pivot array, and savedJ */
+  M = NULL;
+  pivots = NULL;
+  savedJ = NULL;
+
+  M = NewDenseMat(n, n);
+  if (M == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVLAPACK", "CVLapackDense", MSGD_MEM_FAIL);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  pivots = NewIntArray(N);
+  if (pivots == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVLAPACK", "CVLapackDense", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  savedJ = NewDenseMat(n, n);
+  if (savedJ == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVLAPACK", "CVLapackDense", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    DestroyArray(pivots);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvdls_mem;
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVLapackBand
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the band linear solver module. It first calls
+ * the existing lfree routine if this is not NULL.  It then sets the
+ * cv_linit, cv_lsetup, cv_lsolve, and cv_lfree fields in (*cvode_mem)
+ * to be cvLapackBandInit, cvLapackBandSetup, cvLapackBandSolve, 
+ * and cvLapackBandFree, respectively.  It allocates memory for a 
+ * structure of type CVLapackBandMemRec and sets the cv_lmem field in 
+ * (*cvode_mem) to the address of this structure.  It sets setupNonNull 
+ * in (*cvode_mem) to be TRUE, mu to be mupper, ml to be mlower, and 
+ * the jacE and jacI field to NULL.
+ * Finally, it allocates memory for M, pivots, and savedJ.  
+ * The CVLapackBand return value is CVDLS_SUCCESS = 0, 
+ * CVDLS_MEM_FAIL = -1, or CVDLS_ILL_INPUT = -2.
+ *
+ * NOTE: The CVLAPACK linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVLapackBand will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that the function 
+ *       N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */                  
+int CVLapackBand(void *cvode_mem, int N, int mupper, int mlower)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVLAPACK", "CVLapackBand", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (tempv->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVLAPACK", "CVLapackBand", MSGD_BAD_NVECTOR);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */  
+  linit  = cvLapackBandInit;
+  lsetup = cvLapackBandSetup;
+  lsolve = cvLapackBandSolve;
+  lfree  = cvLapackBandFree;
+  
+  /* Get memory for CVDlsMemRec */
+  cvdls_mem = NULL;
+  cvdls_mem = (CVDlsMem) malloc(sizeof(struct CVDlsMemRec));
+  if (cvdls_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVLAPACK", "CVLapackBand", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_BAND;
+
+  /* Initialize Jacobian-related data */
+  jacDQ  = TRUE;
+  bjac   = NULL;
+  J_data = NULL;
+
+  last_flag = CVDLS_SUCCESS;
+  cvDlsInitializeCounters(cvdls_mem);
+  setupNonNull = TRUE;
+  
+  /* Load problem dimension */
+  n = (long int) N;
+
+  /* Load half-bandwiths in cvdls_mem */
+  ml = (long int) mlower;
+  mu = (long int) mupper;
+
+  /* Test ml and mu for legality */
+  if ((ml < 0) || (mu < 0) || (ml >= n) || (mu >= n)) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVLAPACK", "CVLapackBand", MSGD_BAD_SIZES);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  smu = mu + ml;
+
+  /* Allocate memory for M, pivot array, and savedJ */
+  M = NULL;
+  pivots = NULL;
+  savedJ = NULL;
+
+  M = NewBandMat(n, mu, ml, smu);
+  if (M == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVLAPACK", "CVLapackBand", MSGD_MEM_FAIL);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }  
+  pivots = NewIntArray(N);
+  if (pivots == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVLAPACK", "CVLapackBand", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  savedJ = NewBandMat(n, mu, ml, smu);
+  if (savedJ == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVLAPACK", "CVLapackBand", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    DestroyArray(pivots);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvdls_mem;
+
+  return(CVDLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH DENSE JACOBIANS
+ * =================================================================
+ */
+
+/*
+ * cvLapackDenseInit does remaining initializations specific to the dense
+ * linear solver.
+ */
+static int cvLapackDenseInit(CVodeMem cv_mem)
+{
+  CVDlsMem cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  cvDlsInitializeCounters(cvdls_mem);
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (jacDQ) {
+    djac = cvDlsDenseDQJac;
+    J_data = cv_mem;
+  } else {
+    J_data = cv_mem->cv_user_data;
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * cvLapackDenseSetup does the setup operations for the dense linear solver.
+ * It makes a decision whether or not to call the Jacobian evaluation
+ * routine based on various state variables, and if not it uses the 
+ * saved copy. In any case, it constructs the Newton matrix M = I - gamma*J
+ * updates counters, and calls the dense LU factorization routine.
+ */
+static int cvLapackDenseSetup(CVodeMem cv_mem, int convfail,
+                              N_Vector yP, N_Vector fctP,
+                              booleantype *jcurPtr,
+                              N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  CVDlsMem cvdls_mem;
+  realtype dgamma, fact;
+  booleantype jbad, jok;
+  int ier, retval, one = 1;
+  int intn, lenmat;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  intn = (int) n;
+  lenmat = M->ldata ;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVD_MSBJ) ||
+    ((convfail == CV_FAIL_BAD_J) && (dgamma < CVD_DGMAX)) ||
+    (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+    
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    dcopy_f77(&lenmat, savedJ->data, &one, M->data, &one);
+    
+  } else {
+    
+    /* If jok = FALSE, call jac routine for new J value */
+    nje++;
+    nstlj = nst;
+    *jcurPtr = TRUE;
+    SetToZero(M);
+
+    retval = djac(n, tn, yP, fctP, M, J_data, tmp1, tmp2, tmp3);
+
+    if (retval == 0) {
+      dcopy_f77(&lenmat, M->data, &one, savedJ->data, &one);
+    } else if (retval < 0) {
+      cvProcessError(cv_mem, CVDLS_JACFUNC_UNRECVR, "CVLAPACK", "cvLapackDenseSetup", MSGD_JACFUNC_FAILED);
+      last_flag = CVDLS_JACFUNC_UNRECVR;
+      return(-1);
+    } else if (retval > 0) {
+      last_flag = CVDLS_JACFUNC_RECVR;
+      return(1);
+    }
+    
+  }
+
+  /* Scale J by - gamma */
+  fact = -gamma;
+  dscal_f77(&lenmat, &fact, M->data, &one);
+  
+  /* Add identity to get M = I - gamma*J*/
+  AddIdentity(M);
+
+  /* Do LU factorization of M */
+  dgetrf_f77(&intn, &intn, M->data, &intn, pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+/*
+ * cvLapackDenseSolve handles the solve operation for the dense linear solver
+ * by calling the dense backsolve routine.
+ */
+static int cvLapackDenseSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                              N_Vector yC, N_Vector fctC)
+{
+  CVDlsMem cvdls_mem;
+  realtype *bd, fact;
+  int ier, one = 1;
+  int intn;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  intn = (int) n;
+
+  bd = N_VGetArrayPointer(b);
+
+  dgetrs_f77("N", &intn, &one, M->data, &intn, pivots, bd, &intn, &ier, 1); 
+
+  if (ier > 0) return(1);
+
+  /* For BDF, scale the correction to account for change in gamma */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    fact = TWO/(ONE + gamrat);
+    dscal_f77(&intn, &fact, bd, &one); 
+  }
+  
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * cvLapackDenseFree frees memory specific to the dense linear solver.
+ */
+static int cvLapackDenseFree(CVodeMem cv_mem)
+{
+  CVDlsMem  cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  DestroyMat(M);
+  DestroyArray(pivots);
+  DestroyMat(savedJ);
+  free(cvdls_mem); 
+  cvdls_mem = NULL;
+
+  return(0);
+}
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH BAND JACOBIANS
+ * =================================================================
+ */
+
+/*
+ * cvLapackBandInit does remaining initializations specific to the band
+ * linear solver.
+ */
+static int cvLapackBandInit(CVodeMem cv_mem)
+{
+  CVDlsMem cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  cvDlsInitializeCounters(cvdls_mem);
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (jacDQ) {
+    bjac = cvDlsBandDQJac;
+    J_data = cv_mem;
+  } else {
+    J_data = cv_mem->cv_user_data;
+  }
+  
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * cvLapackBandSetup does the setup operations for the band linear solver.
+ * It makes a decision whether or not to call the Jacobian evaluation
+ * routine based on various state variables, and if not it uses the 
+ * saved copy. In any case, it constructs the Newton matrix M = I - gamma*J, 
+ * updates counters, and calls the band LU factorization routine.
+ */
+static int cvLapackBandSetup(CVodeMem cv_mem, int convfail, 
+                             N_Vector yP, N_Vector fctP, 
+                             booleantype *jcurPtr,
+                             N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  CVDlsMem cvdls_mem;
+  realtype dgamma, fact;
+  booleantype jbad, jok;
+  int ier, retval, one = 1;
+  int intn, iml, imu, lenmat, ldmat;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  intn = (int) n;
+  iml = (int) ml;
+  imu = (int) mu;
+  lenmat = M->ldata;
+  ldmat = M->ldim;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVD_MSBJ) ||
+    ((convfail == CV_FAIL_BAD_J) && (dgamma < CVD_DGMAX)) ||
+    (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+    
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    dcopy_f77(&lenmat, savedJ->data, &one, M->data, &one);
+    
+  } else {
+    
+    /* If jok = FALSE, call jac routine for new J value */
+    nje++;
+    nstlj = nst;
+    *jcurPtr = TRUE;
+    SetToZero(M);
+
+    retval = bjac(n, mu, ml, tn, yP, fctP, M, J_data, tmp1, tmp2, tmp3);
+    if (retval == 0) {
+      dcopy_f77(&lenmat, M->data, &one, savedJ->data, &one);
+    } else if (retval < 0) {
+      cvProcessError(cv_mem, CVDLS_JACFUNC_UNRECVR, "CVLAPACK", "cvLapackBandSetup", MSGD_JACFUNC_FAILED);
+      last_flag = CVDLS_JACFUNC_UNRECVR;
+      return(-1);
+    } else if (retval > 0) {
+      last_flag = CVDLS_JACFUNC_RECVR;
+      return(1);
+    }
+    
+  }
+  
+  /* Scale J by - gamma */
+  fact = -gamma;
+  dscal_f77(&lenmat, &fact, M->data, &one);
+  
+  /* Add identity to get M = I - gamma*J*/
+  AddIdentity(M);
+  
+  /* Do LU factorization of M */
+  dgbtrf_f77(&intn, &intn, &iml, &imu, M->data, &ldmat, pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+
+}
+
+/*
+ * cvLapackBandSolve handles the solve operation for the band linear solver
+ * by calling the band backsolve routine.
+ */
+static int cvLapackBandSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                             N_Vector yC, N_Vector fctC)
+{
+  CVDlsMem cvdls_mem;
+  realtype *bd, fact;
+  int ier, one = 1;
+  int intn, iml, imu, ldmat;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  intn = (int) n;
+  iml = (int) ml;
+  imu = (int) mu;
+  ldmat = M->ldim;
+
+  bd = N_VGetArrayPointer(b);
+
+  dgbtrs_f77("N", &intn, &iml, &imu, &one, M->data, &ldmat, pivots, bd, &intn, &ier, 1);
+  if (ier > 0) return(1);
+
+  /* For BDF, scale the correction to account for change in gamma */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    fact = TWO/(ONE + gamrat);
+    dscal_f77(&intn, &fact, bd, &one); 
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * cvLapackBandFree frees memory specific to the band linear solver.
+ */
+static int cvLapackBandFree(CVodeMem cv_mem)
+{
+  CVDlsMem  cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  DestroyMat(M);
+  DestroyArray(pivots);
+  DestroyMat(savedJ);
+  free(cvdls_mem); 
+  cvdls_mem = NULL;
+
+  return(0);
+}
+
diff --git a/src/cvode/cvode_sparse.c b/src/cvode/cvode_sparse.c
new file mode 100644
index 0000000..c71996d
--- /dev/null
+++ b/src/cvode/cvode_sparse.c
@@ -0,0 +1,175 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for an CVSLS linear solver.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvode_impl.h"
+#include "cvode_sparse_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS FOR IMPLICIT INTEGRATION
+ * =================================================================
+ */
+              
+/*
+ * CVSlsSetSparseJacFn specifies the sparse Jacobian function.
+ */
+int CVSlsSetSparseJacFn(void *cvode_mem, CVSlsSparseJacFn jac)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVSlsSetSparseJacFn", 
+		    MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSLS_LMEM_NULL, "CVSLS", 
+		    "CVSlsSetSparseJacFn", MSGSP_LMEM_NULL);
+    return(CVSLS_LMEM_NULL);
+  }
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+
+  cvsls_mem->s_jaceval = jac;
+
+  return(CVSLS_SUCCESS);
+}
+
+/*
+ * CVSlsGetNumJacEvals returns the number of Jacobian evaluations.
+ */
+int CVSlsGetNumJacEvals(void *cvode_mem, long int *njevals)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVSlsGetNumJacEvals", MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSLS_LMEM_NULL, "CVSLS", 
+		    "CVSlsGetNumJacEvals", MSGSP_LMEM_NULL);
+    return(CVSLS_LMEM_NULL);
+  }
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+
+  *njevals = cvsls_mem->s_nje;
+
+  return(CVSLS_SUCCESS);
+}
+
+/*
+ * CVSlsGetReturnFlagName returns the name associated with a CVSLS
+ * return value.
+ */
+char *CVSlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case CVSLS_SUCCESS:
+    sprintf(name,"CVSLS_SUCCESS");
+    break;   
+  case CVSLS_MEM_NULL:
+    sprintf(name,"CVSLS_MEM_NULL");
+    break;
+  case CVSLS_LMEM_NULL:
+    sprintf(name,"CVSLS_LMEM_NULL");
+    break;
+  case CVSLS_ILL_INPUT:
+    sprintf(name,"CVSLS_ILL_INPUT");
+    break;
+  case CVSLS_MEM_FAIL:
+    sprintf(name,"CVSLS_MEM_FAIL");
+    break;
+  case CVSLS_JAC_NOSET:
+    sprintf(name,"CVSLS_JAC_NOSET");
+    break;
+  case CVSLS_JACFUNC_UNRECVR:
+    sprintf(name,"CVSLS_JACFUNC_UNRECVR");
+    break;
+  case CVSLS_JACFUNC_RECVR:
+    sprintf(name,"CVSLS_JACFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * CVSlsGetLastFlag returns the last flag set in a CVSLS function.
+ */
+int CVSlsGetLastFlag(void *cvode_mem, long int *flag)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVSlsGetLastFlag", 
+		    MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSLS_LMEM_NULL, "CVSLS", 
+		    "CVSlsGetLastFlag", MSGSP_LMEM_NULL);
+    return(CVSLS_LMEM_NULL);
+  }
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+
+  *flag = cvsls_mem->s_last_flag;
+
+  return(CVSLS_SUCCESS);
+}
+
diff --git a/src/cvode/cvode_sparse_impl.h b/src/cvode/cvode_sparse_impl.h
new file mode 100644
index 0000000..f50e046
--- /dev/null
+++ b/src/cvode/cvode_sparse_impl.h
@@ -0,0 +1,109 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4558 $
+ * $Date: 2015-10-05 09:04:16 -0700 (Mon, 05 Oct 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the CVSLS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSPARSE_IMPL_H
+#define _CVSPARSE_IMPL_H
+
+#include "cvode/cvode_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * C V S P A R S E    I N T E R N A L    C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * CVSLS solver constants
+ * -----------------------------------------------------------------
+ * CVS_MSBJ   maximum number of steps between Jacobian evaluations
+ * CVS_DGMAX  maximum change in gamma between Jacobian evaluations
+ * -----------------------------------------------------------------
+ */
+ 
+#define CVS_MSBJ  50
+#define CVS_DGMAX RCONST(0.2)
+ 
+/*
+ * -----------------------------------------------------------------
+ * Types : CVSlsMemRec, CVSlsMem                             
+ * -----------------------------------------------------------------
+ * CVSlsMem is pointer to a CVSlsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVSlsMemRec {
+
+  CVSlsSparseJacFn s_jaceval; /* user Jacobian evaluation routine 
+				  to be called */
+  void *s_jacdata;           /* J_data is passed to djac or bjac */
+
+  long int s_nje;           /* nje = no. of calls to jac */
+
+  long int s_last_flag;     /* last error return flag */
+
+  int s_first_factorize;    /* flag telling whether the first 
+			       factorization needs to happen */
+
+  int s_nstlj;              /* time step of last Jacobian evaluation */
+
+  SlsMat s_JacMat;          /* M = I - gamma * df/dy */
+
+  SlsMat s_savedJ;          /* saved copy of Jacobian */
+
+  int sparsetype;           /* matrix type: compressed sparse column or row */
+
+  void *s_solver_data;      /* structure for solver-specific data */
+  
+
+} *CVSlsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+  
+
+/*
+ * =================================================================
+ * E R R O R   M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGSP_CVMEM_NULL "Integrator memory is NULL."
+#define MSGSP_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGSP_MEM_FAIL "A memory request failed."
+#define MSGSP_LMEM_NULL "Linear solver memory is NULL."
+#define MSGSP_ILL_INPUT "Invalid input detected."
+#define MSGSP_JAC_NOSET "Jacobian evaluation function has not been set."
+#define MSGSP_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+#define MSGSP_PACKAGE_FAIL "A call to an external package failed."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvode/cvode_spbcgs.c b/src/cvode/cvode_spbcgs.c
new file mode 100644
index 0000000..3fd7ad6
--- /dev/null
+++ b/src/cvode/cvode_spbcgs.c
@@ -0,0 +1,467 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSPBCG linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvode/cvode_spbcgs.h>
+#include "cvode_spils_impl.h"
+#include "cvode_impl.h"
+
+#include <sundials/sundials_spbcgs.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* CVSPBCG linit, lsetup, lsolve, and lfree routines */
+
+static int CVSpbcgInit(CVodeMem cv_mem);
+
+static int CVSpbcgSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                        N_Vector vtemp2, N_Vector vtemp3);
+
+static int CVSpbcgSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ynow, N_Vector fnow);
+
+static int CVSpbcgFree(CVodeMem cv_mem);
+
+
+/* Readability Replacements */
+
+#define tq           (cv_mem->cv_tq)
+#define nst          (cv_mem->cv_nst)
+#define tn           (cv_mem->cv_tn)
+#define gamma        (cv_mem->cv_gamma)
+#define gammap       (cv_mem->cv_gammap)
+#define f            (cv_mem->cv_f)
+#define user_data    (cv_mem->cv_user_data)
+#define ewt          (cv_mem->cv_ewt)
+#define errfp        (cv_mem->cv_errfp)
+#define mnewt        (cv_mem->cv_mnewt)
+#define linit        (cv_mem->cv_linit)
+#define lsetup       (cv_mem->cv_lsetup)
+#define lsolve       (cv_mem->cv_lsolve)
+#define lfree        (cv_mem->cv_lfree)
+#define lmem         (cv_mem->cv_lmem)
+#define vec_tmpl     (cv_mem->cv_tempv)
+#define setupNonNull (cv_mem->cv_setupNonNull)
+
+#define sqrtN     (cvspils_mem->s_sqrtN)   
+#define ytemp     (cvspils_mem->s_ytemp)
+#define x         (cvspils_mem->s_x)
+#define ycur      (cvspils_mem->s_ycur)
+#define fcur      (cvspils_mem->s_fcur)
+#define delta     (cvspils_mem->s_delta)
+#define deltar    (cvspils_mem->s_deltar)
+#define npe       (cvspils_mem->s_npe)
+#define nli       (cvspils_mem->s_nli)
+#define nps       (cvspils_mem->s_nps)
+#define ncfl      (cvspils_mem->s_ncfl)
+#define nstlpre   (cvspils_mem->s_nstlpre)
+#define njtimes   (cvspils_mem->s_njtimes)
+#define nfes      (cvspils_mem->s_nfes)
+#define spils_mem (cvspils_mem->s_spils_mem)
+
+#define jtimesDQ (cvspils_mem->s_jtimesDQ)
+#define jtimes  (cvspils_mem->s_jtimes)
+#define j_data  (cvspils_mem->s_j_data)
+
+#define last_flag (cvspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcg
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the Spbcg linear solver module. CVSpbcg first
+ * calls the existing lfree routine if this is not NULL. It then sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be CVSpbcgInit, CVSpbcgSetup, CVSpbcgSolve, and CVSpbcgFree,
+ * respectively. It allocates memory for a structure of type
+ * CVSpilsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure. It sets setupNonNull in (*cvode_mem),
+ * and sets various fields in the CVSpilsMemRec structure.
+ * Finally, CVSpbcg allocates memory for ytemp and x, and calls
+ * SpbcgMalloc to allocate memory for the Spbcg solver.
+ * -----------------------------------------------------------------
+ */
+
+int CVSpbcg(void *cvode_mem, int pretype, int maxl)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  SpbcgMem spbcg_mem;
+  int mxl;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPBCG", "CVSpbcg", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if N_VDotProd is present */
+  if (vec_tmpl->ops->nvdotprod == NULL) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPBCG", "CVSpbcg", MSGS_BAD_NVECTOR);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */
+  linit  = CVSpbcgInit;
+  lsetup = CVSpbcgSetup;
+  lsolve = CVSpbcgSolve;
+  lfree  = CVSpbcgFree;
+
+  /* Get memory for CVSpilsMemRec */
+  cvspils_mem = NULL;
+  cvspils_mem = (CVSpilsMem) malloc(sizeof(struct CVSpilsMemRec));
+  if (cvspils_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPBCG", "CVSpbcg", MSGS_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  cvspils_mem->s_type = SPILS_SPBCG;
+
+  /* Set Spbcg parameters that have been passed in call sequence */
+  cvspils_mem->s_pretype = pretype;
+  mxl = cvspils_mem->s_maxl = (maxl <= 0) ? CVSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  cvspils_mem->s_pset   = NULL;
+  cvspils_mem->s_psolve = NULL;
+  cvspils_mem->s_pfree  = NULL;
+  cvspils_mem->s_P_data = cv_mem->cv_user_data;
+
+  /* Set default values for the rest of the Spbcg parameters */
+  cvspils_mem->s_eplifac = CVSPILS_EPLIN;
+
+  cvspils_mem->s_last_flag = CVSPILS_SUCCESS;
+
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPBCG", "CVSpbcg", MSGS_BAD_PRETYPE);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPBCG", "CVSpbcg", MSGS_MEM_FAIL);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  x = N_VClone(vec_tmpl);
+  if (x == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPBCG", "CVSpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt(N_VDotProd(ytemp, ytemp));
+
+  /* Call SpbcgMalloc to allocate workspace for Spbcg */
+  spbcg_mem = NULL;
+  spbcg_mem = SpbcgMalloc(mxl, vec_tmpl);
+  if (spbcg_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPBCG", "CVSpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(x);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPBCG memory to spils memory structure */
+  spils_mem = (void *) spbcg_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvspils_mem;
+
+  return(CVSPILS_SUCCESS);
+}
+
+
+
+/* Additional readability replacements */
+
+#define pretype (cvspils_mem->s_pretype)
+#define eplifac (cvspils_mem->s_eplifac)
+#define maxl    (cvspils_mem->s_maxl)
+#define psolve  (cvspils_mem->s_psolve)
+#define pset    (cvspils_mem->s_pset)
+#define P_data  (cvspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcgInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the Spbcg
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpbcgInit(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  SpbcgMem spbcg_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+  spbcg_mem = (SpbcgMem) spils_mem;
+
+  /* Initialize counters */
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  /* Check for legal combination pretype - psolve */
+  if ((pretype != PREC_NONE) && (psolve == NULL)) {
+    cvProcessError(cv_mem, -1, "CVSPBCG", "CVSpbcgInit", MSGS_PSOLVE_REQ);
+    last_flag = CVSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE)  and there is a preconditioning
+     setup phase (pset != NULL) */
+  setupNonNull = (pretype != PREC_NONE) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = CVSpilsDQJtimes;
+    j_data = cv_mem;
+  } else {
+    j_data = user_data;
+  }
+
+  /*  Set maxl in the SPBCG memory in case it was changed by the user */
+  spbcg_mem->l_max  = maxl;
+
+  last_flag = CVSPILS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcgSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the Spbcg linear solver.
+ * It makes a decision as to whether or not to signal for reevaluation
+ * of Jacobian data in the pset routine, based on various state
+ * variables, then it calls pset. If we signal for reevaluation,
+ * then we reset jcur = *jcurPtr to TRUE, regardless of the pset output.
+ * In any case, if jcur == TRUE, we increment npe and save nst in nstlpre.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpbcgSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                        N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  CVSpilsMem cvspils_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlpre + CVSPILS_MSBPRE) ||
+      ((convfail == CV_FAIL_BAD_J) && (dgamma < CVSPILS_DGMAX)) ||
+      (convfail == CV_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = pset(tn, ypred, fpred, jok, jcurPtr, gamma, P_data, 
+                vtemp1, vtemp2, vtemp3);
+  if (retval < 0) {
+    cvProcessError(cv_mem, SPBCG_PSET_FAIL_UNREC, "CVSPBCG", "CVSpbcgSetup", MSGS_PSET_FAILED);
+    last_flag = SPBCG_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    last_flag = SPBCG_PSET_FAIL_REC;
+  }
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    npe++;
+    nstlpre = nst;
+  }
+
+  last_flag = SPBCG_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcgSolve
+ * -----------------------------------------------------------------
+ * This routine handles the call to the generic solver SpbcgSolve
+ * for the solution of the linear system Ax = b with the SPBCG method.
+ * The solution x is returned in the vector b.
+ *
+ * If the WRMS norm of b is small, we return x = b (if this is the first
+ * Newton iteration) or x = 0 (if a later Newton iteration).
+ *
+ * Otherwise, we set the tolerance parameter and initial guess (x = 0),
+ * call SpbcgSolve, and copy the solution x into b. The x-scaling and
+ * b-scaling arrays are both equal to weight.
+ *
+ * The counters nli, nps, and ncfl are incremented, and the return value
+ * is set according to the success of SpbcgSolve. The success flag is
+ * returned if SpbcgSolve converged, or if this is the first Newton
+ * iteration and the residual norm was reduced below its initial value.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpbcgSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ynow, N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  CVSpilsMem cvspils_mem;
+  SpbcgMem spbcg_mem;
+  int nli_inc, nps_inc, retval;
+  
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  spbcg_mem = (SpbcgMem) spils_mem;
+
+  /* Test norm(b); if small, return x = 0 or x = b */
+  deltar = eplifac * tq[4]; 
+
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= deltar) {
+    if (mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  ycur = ynow;
+  fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to SpbcgSolve */  
+  delta = deltar * sqrtN;
+  N_VConst(ZERO, x);
+  
+  /* Call SpbcgSolve and copy x to b */
+  retval = SpbcgSolve(spbcg_mem, cv_mem, x, b, pretype, delta,
+                   cv_mem, weight, weight, CVSpilsAtimes, CVSpilsPSolve,
+                   &res_norm, &nli_inc, &nps_inc);
+
+  N_VScale(ONE, x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPBCG_SUCCESS) ncfl++;
+
+  /* Interpret return value from SpbcgSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPBCG_SUCCESS:
+    return(0);
+    break;
+  case SPBCG_RES_REDUCED:
+    if (mnewt == 0) return(0);
+    else            return(1);
+    break;
+  case SPBCG_CONV_FAIL:
+    return(1);
+    break;
+  case SPBCG_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_MEM_NULL:
+    return(-1);
+    break;
+  case SPBCG_ATIMES_FAIL_UNREC:
+    cvProcessError(cv_mem, SPBCG_ATIMES_FAIL_UNREC, "CVSPBCG", "CVSpbcgSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPBCG_PSOLVE_FAIL_UNREC:
+    cvProcessError(cv_mem, SPBCG_PSOLVE_FAIL_UNREC, "CVSPBCG", "CVSpbcgSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcgFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the Spbcg linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpbcgFree(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  SpbcgMem spbcg_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  N_VDestroy(ytemp);
+  N_VDestroy(x);
+
+  spbcg_mem = (SpbcgMem) spils_mem;
+  SpbcgFree(spbcg_mem);
+
+  if (cvspils_mem->s_pfree != NULL) (cvspils_mem->s_pfree)(cv_mem);
+
+  free(cvspils_mem);
+  cv_mem->cv_lmem = NULL;
+
+  return(0);
+}
+
diff --git a/src/cvode/cvode_spgmr.c b/src/cvode/cvode_spgmr.c
new file mode 100644
index 0000000..1f53d7c
--- /dev/null
+++ b/src/cvode/cvode_spgmr.c
@@ -0,0 +1,471 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSPGMR linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvode/cvode_spgmr.h>
+#include "cvode_spils_impl.h"
+#include "cvode_impl.h"
+
+#include <sundials/sundials_spgmr.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* CVSPGMR linit, lsetup, lsolve, and lfree routines */
+
+static int CVSpgmrInit(CVodeMem cv_mem);
+
+static int CVSpgmrSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                        N_Vector vtemp2, N_Vector vtemp3);
+
+static int CVSpgmrSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ynow, N_Vector fnow);
+
+static int CVSpgmrFree(CVodeMem cv_mem);
+
+/* Readability Replacements */
+
+#define tq           (cv_mem->cv_tq)
+#define nst          (cv_mem->cv_nst)
+#define tn           (cv_mem->cv_tn)
+#define h            (cv_mem->cv_h)
+#define gamma        (cv_mem->cv_gamma)
+#define gammap       (cv_mem->cv_gammap)   
+#define f            (cv_mem->cv_f)
+#define user_data    (cv_mem->cv_user_data)
+#define ewt          (cv_mem->cv_ewt)
+#define mnewt        (cv_mem->cv_mnewt)
+#define ropt         (cv_mem->cv_ropt)
+#define linit        (cv_mem->cv_linit)
+#define lsetup       (cv_mem->cv_lsetup)
+#define lsolve       (cv_mem->cv_lsolve)
+#define lfree        (cv_mem->cv_lfree)
+#define lmem         (cv_mem->cv_lmem)
+#define vec_tmpl     (cv_mem->cv_tempv)
+#define setupNonNull (cv_mem->cv_setupNonNull)
+
+#define sqrtN   (cvspils_mem->s_sqrtN)   
+#define ytemp   (cvspils_mem->s_ytemp)
+#define x       (cvspils_mem->s_x)
+#define ycur    (cvspils_mem->s_ycur)
+#define fcur    (cvspils_mem->s_fcur)
+#define delta   (cvspils_mem->s_delta)
+#define deltar  (cvspils_mem->s_deltar)
+#define npe     (cvspils_mem->s_npe)
+#define nli     (cvspils_mem->s_nli)
+#define nps     (cvspils_mem->s_nps)
+#define ncfl    (cvspils_mem->s_ncfl)
+#define nstlpre (cvspils_mem->s_nstlpre)
+#define njtimes (cvspils_mem->s_njtimes)
+#define nfes    (cvspils_mem->s_nfes)
+#define spils_mem (cvspils_mem->s_spils_mem)
+
+#define jtimesDQ (cvspils_mem->s_jtimesDQ)
+#define jtimes  (cvspils_mem->s_jtimes)
+#define j_data  (cvspils_mem->s_j_data)
+
+#define last_flag (cvspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpgmr
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the Spgmr linear solver module. CVSpgmr first
+ * calls the existing lfree routine if this is not NULL.  It then sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be CVSpgmrInit, CVSpgmrSetup, CVSpgmrSolve, and CVSpgmrFree,
+ * respectively.  It allocates memory for a structure of type
+ * CVSpilsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure.  It sets setupNonNull in (*cvode_mem),
+ * and sets various fields in the CVSpilsMemRec structure.
+ * Finally, CVSpgmr allocates memory for ytemp and x, and calls
+ * SpgmrMalloc to allocate memory for the Spgmr solver.
+ * -----------------------------------------------------------------
+ */
+
+int CVSpgmr(void *cvode_mem, int pretype, int maxl)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  SpgmrMem spgmr_mem;
+  int mxl;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPGMR", "CVSpgmr", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if N_VDotProd is present */
+  if(vec_tmpl->ops->nvdotprod == NULL) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPGMR", "CVSpgmr", MSGS_BAD_NVECTOR);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */
+  linit  = CVSpgmrInit;
+  lsetup = CVSpgmrSetup;
+  lsolve = CVSpgmrSolve;
+  lfree  = CVSpgmrFree;
+
+  /* Get memory for CVSpilsMemRec */
+  cvspils_mem = NULL;
+  cvspils_mem = (CVSpilsMem) malloc(sizeof(struct CVSpilsMemRec));
+  if (cvspils_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPGMR", "CVSpgmr", MSGS_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  cvspils_mem->s_type = SPILS_SPGMR;
+
+  /* Set Spgmr parameters that have been passed in call sequence */
+  cvspils_mem->s_pretype    = pretype;
+  mxl = cvspils_mem->s_maxl = (maxl <= 0) ? CVSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  cvspils_mem->s_pset   = NULL;
+  cvspils_mem->s_psolve = NULL;
+  cvspils_mem->s_pfree  = NULL;
+  cvspils_mem->s_P_data = cv_mem->cv_user_data;
+
+  /* Set default values for the rest of the Spgmr parameters */
+  cvspils_mem->s_gstype = MODIFIED_GS;
+  cvspils_mem->s_eplifac = CVSPILS_EPLIN;
+
+  cvspils_mem->s_last_flag  = CVSPILS_SUCCESS;
+
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPGMR", "CVSpgmr", MSGS_BAD_PRETYPE);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPGMR", "CVSpgmr", MSGS_MEM_FAIL);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  x = N_VClone(vec_tmpl);
+  if (x == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPGMR", "CVSpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt( N_VDotProd(ytemp, ytemp) );
+
+  /* Call SpgmrMalloc to allocate workspace for Spgmr */
+  spgmr_mem = NULL;
+  spgmr_mem = SpgmrMalloc(mxl, vec_tmpl);
+  if (spgmr_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPGMR", "CVSpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(x);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPGMR memory to spils memory structure */
+  spils_mem = (void *) spgmr_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvspils_mem;
+
+  return(CVSPILS_SUCCESS);
+}
+
+
+/* Additional readability Replacements */
+
+#define pretype (cvspils_mem->s_pretype)
+#define gstype  (cvspils_mem->s_gstype)
+#define eplifac (cvspils_mem->s_eplifac)
+#define maxl    (cvspils_mem->s_maxl)
+#define psolve  (cvspils_mem->s_psolve)
+#define pset    (cvspils_mem->s_pset)
+#define P_data  (cvspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpgmrInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the Spgmr 
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpgmrInit(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Initialize counters */
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  /* Check for legal combination pretype - psolve */
+  if ((pretype != PREC_NONE) && (psolve == NULL)) {
+    cvProcessError(cv_mem, -1, "CVSPGMR", "CVSpgmrInit", MSGS_PSOLVE_REQ);
+    last_flag = CVSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull = TRUE iff there is preconditioning (pretype != PREC_NONE)
+     and there is a preconditioning setup phase (pset != NULL)             */
+  setupNonNull = (pretype != PREC_NONE) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = CVSpilsDQJtimes;
+    j_data = cv_mem;
+  } else {
+    j_data = user_data;
+  }
+
+  last_flag = CVSPILS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpgmrSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the Spgmr linear solver.
+ * It makes a decision as to whether or not to signal for re-evaluation
+ * of Jacobian data in the pset routine, based on various state
+ * variables, then it calls pset.  If we signal for re-evaluation,
+ * then we reset jcur = *jcurPtr to TRUE, regardless of the pset output.
+ * In any case, if jcur == TRUE, we increment npe and save nst in nstlpre.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpgmrSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                        N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  CVSpilsMem cvspils_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlpre + CVSPILS_MSBPRE) ||
+    ((convfail == CV_FAIL_BAD_J) && (dgamma < CVSPILS_DGMAX)) ||
+    (convfail == CV_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = pset(tn, ypred, fpred, jok, jcurPtr, gamma, P_data, 
+                vtemp1, vtemp2, vtemp3);
+  if (retval < 0) {
+    cvProcessError(cv_mem, SPGMR_PSET_FAIL_UNREC, "CVSPGMR", "CVSpgmrSetup", MSGS_PSET_FAILED);
+    last_flag = SPGMR_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    last_flag = SPGMR_PSET_FAIL_REC;
+  }
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    npe++;
+    nstlpre = nst;
+  }
+
+  last_flag = SPGMR_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpgmrSolve
+ * -----------------------------------------------------------------
+ * This routine handles the call to the generic solver SpgmrSolve
+ * for the solution of the linear system Ax = b with the SPGMR method,
+ * without restarts.  The solution x is returned in the vector b.
+ *
+ * If the WRMS norm of b is small, we return x = b (if this is the first
+ * Newton iteration) or x = 0 (if a later Newton iteration).
+ *
+ * Otherwise, we set the tolerance parameter and initial guess (x = 0),
+ * call SpgmrSolve, and copy the solution x into b.  The x-scaling and
+ * b-scaling arrays are both equal to weight, and no restarts are allowed.
+ *
+ * The counters nli, nps, and ncfl are incremented, and the return value
+ * is set according to the success of SpgmrSolve.  The success flag is
+ * returned if SpgmrSolve converged, or if this is the first Newton
+ * iteration and the residual norm was reduced below its initial value.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpgmrSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ynow, N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  CVSpilsMem cvspils_mem;
+  SpgmrMem spgmr_mem;
+  int nli_inc, nps_inc, retval;
+  
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  spgmr_mem = (SpgmrMem) spils_mem;
+
+  /* Test norm(b); if small, return x = 0 or x = b */
+  deltar = eplifac * tq[4]; 
+
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= deltar) {
+    if (mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  ycur = ynow;
+  fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to SpgmrSolve */  
+  delta = deltar * sqrtN;
+  N_VConst(ZERO, x);
+  
+  /* Call SpgmrSolve and copy x to b */
+  retval = SpgmrSolve(spgmr_mem, cv_mem, x, b, pretype, gstype, delta, 0,
+                      cv_mem, weight, weight, CVSpilsAtimes, CVSpilsPSolve,
+                      &res_norm, &nli_inc, &nps_inc);
+
+  N_VScale(ONE, x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPGMR_SUCCESS) ncfl++;
+
+  /* Interpret return value from SpgmrSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPGMR_SUCCESS:
+    return(0);
+    break;
+  case SPGMR_RES_REDUCED:
+    if (mnewt == 0) return(0);
+    else            return(1);
+    break;
+  case SPGMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPGMR_QRFACT_FAIL:
+    return(1);
+    break;
+  case SPGMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPGMR_ATIMES_FAIL_UNREC:
+    cvProcessError(cv_mem, SPGMR_ATIMES_FAIL_UNREC, "CVSPGMR", "CVSpgmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPGMR_PSOLVE_FAIL_UNREC:
+    cvProcessError(cv_mem, SPGMR_PSOLVE_FAIL_UNREC, "CVSPGMR", "CVSpgmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  case SPGMR_GS_FAIL:
+    return(-1);
+    break;
+  case SPGMR_QRSOL_FAIL:
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpgmrFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the Spgmr linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpgmrFree(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  SpgmrMem spgmr_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+  
+  N_VDestroy(ytemp);
+  N_VDestroy(x);
+
+  spgmr_mem = (SpgmrMem) spils_mem;
+  SpgmrFree(spgmr_mem);
+
+  if (cvspils_mem->s_pfree != NULL) (cvspils_mem->s_pfree)(cv_mem);
+
+  free(cvspils_mem);
+  cv_mem->cv_lmem = NULL;
+
+  return(0);
+}
+
diff --git a/src/cvode/cvode_spils.c b/src/cvode/cvode_spils.c
new file mode 100644
index 0000000..5bcdc9e
--- /dev/null
+++ b/src/cvode/cvode_spils.c
@@ -0,0 +1,715 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSPILS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvode_impl.h"
+#include "cvode_spils_impl.h"
+
+/* Private constants */
+
+#define ZERO   RCONST(0.0)
+#define PT25   RCONST(0.25)
+#define ONE    RCONST(1.0)
+
+/* Algorithmic constants */
+
+#define MAX_ITERS  3  /* max. number of attempts to recover in DQ J*v */
+
+/* Readability Replacements */
+
+#define lrw1      (cv_mem->cv_lrw1)
+#define liw1      (cv_mem->cv_liw1)
+#define tq        (cv_mem->cv_tq)
+#define tn        (cv_mem->cv_tn)
+#define h         (cv_mem->cv_h)
+#define gamma     (cv_mem->cv_gamma)
+#define nfe       (cv_mem->cv_nfe)
+#define f         (cv_mem->cv_f)
+#define user_data (cv_mem->cv_user_data)
+#define ewt       (cv_mem->cv_ewt)
+#define lmem      (cv_mem->cv_lmem)
+
+#define ils_type  (cvspils_mem->s_type)
+#define sqrtN     (cvspils_mem->s_sqrtN)   
+#define ytemp     (cvspils_mem->s_ytemp)
+#define x         (cvspils_mem->s_x)
+#define ycur      (cvspils_mem->s_ycur)
+#define fcur      (cvspils_mem->s_fcur)
+#define delta     (cvspils_mem->s_delta)
+#define npe       (cvspils_mem->s_npe)
+#define nli       (cvspils_mem->s_nli)
+#define nps       (cvspils_mem->s_nps)
+#define ncfl      (cvspils_mem->s_ncfl)
+#define njtimes   (cvspils_mem->s_njtimes)
+#define nfes      (cvspils_mem->s_nfes)
+
+#define jtimesDQ  (cvspils_mem->s_jtimesDQ)
+#define jtimes    (cvspils_mem->s_jtimes)
+#define j_data    (cvspils_mem->s_j_data)
+
+#define last_flag (cvspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * OPTIONAL INPUT and OUTPUT
+ * -----------------------------------------------------------------
+ */
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsSetPrecType
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetPrecType(void *cvode_mem, int pretype)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetPrecType", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetPrecType", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetPrecType", MSGS_BAD_PRETYPE);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  cvspils_mem->s_pretype = pretype;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsSetGSType
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetGSType(void *cvode_mem, int gstype)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetGSType", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetGSType", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  if (ils_type != SPILS_SPGMR) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetGSType", MSGS_BAD_LSTYPE);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Check for legal gstype */
+  if ((gstype != MODIFIED_GS) && (gstype != CLASSICAL_GS)) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetGSType", MSGS_BAD_GSTYPE);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  cvspils_mem->s_gstype = gstype;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpilsSetMaxl
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetMaxl(void *cvode_mem, int maxl)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  int mxl;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetMaxl", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(NULL, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetMaxl", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  if (ils_type == SPILS_SPGMR) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetMaxl", MSGS_BAD_LSTYPE);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  mxl = (maxl <= 0) ? CVSPILS_MAXL : maxl;
+  cvspils_mem->s_maxl = mxl;
+
+  return(CVSPILS_SUCCESS);
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsSetEpsLin
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetEpsLin(void *cvode_mem, realtype eplifac)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetEpsLin", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetEpsLin", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Check for legal eplifac */
+  if(eplifac < ZERO) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetEpsLin", MSGS_BAD_EPLIN);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  cvspils_mem->s_eplifac = (eplifac == ZERO) ? CVSPILS_EPLIN : eplifac;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsSetPrecSetupFn
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetPreconditioner(void *cvode_mem, 
+                             CVSpilsPrecSetupFn pset, CVSpilsPrecSolveFn psolve)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetPreconditioner", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetPreconditioner", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  cvspils_mem->s_pset = pset;
+  cvspils_mem->s_psolve = psolve;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsSetJacTimesVecFn
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetJacTimesVecFn(void *cvode_mem, CVSpilsJacTimesVecFn jtv)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetJacTimesVecFn", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetJacTimesVecFn", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  if (jtv != NULL) {
+    jtimesDQ = FALSE;
+    jtimes = jtv;
+  } else {
+    jtimesDQ = TRUE;
+  }
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetWorkSpace
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  int maxl;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetWorkSpace", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetWorkSpace", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  
+  switch(ils_type) {
+  case SPILS_SPGMR:
+    maxl = cvspils_mem->s_maxl;
+    *lenrwLS = lrw1*(maxl + 5) + maxl*(maxl + 4) + 1;
+    *leniwLS = liw1*(maxl + 5);
+    break;
+  case SPILS_SPBCG:
+    *lenrwLS = lrw1 * 9;
+    *leniwLS = liw1 * 9;
+    break;
+  case SPILS_SPTFQMR:
+    *lenrwLS = lrw1*11;
+    *leniwLS = liw1*11;
+    break;
+  }
+
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumPrecEvals
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumPrecEvals(void *cvode_mem, long int *npevals)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumPrecEvals", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumPrecEvals", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *npevals = npe;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumPrecSolves
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumPrecSolves(void *cvode_mem, long int *npsolves)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumPrecSolves", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumPrecSolves", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *npsolves = nps;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumLinIters
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumLinIters(void *cvode_mem, long int *nliters)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumLinIters", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumLinIters", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *nliters = nli;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumConvFails
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumConvFails(void *cvode_mem, long int *nlcfails)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumConvFails", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumConvFails", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *nlcfails = ncfl;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumJtimesEvals
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumJtimesEvals(void *cvode_mem, long int *njvevals)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumJtimesEvals", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumJtimesEvals", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *njvevals = njtimes;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumRhsEvals
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumRhsEvals", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumRhsEvals", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *nfevalsLS = nfes;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetLastFlag
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetLastFlag(void *cvode_mem, long int *flag)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetLastFlag", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetLastFlag", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *flag = last_flag;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetReturnFlagName
+ * -----------------------------------------------------------------
+ */
+
+char *CVSpilsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case CVSPILS_SUCCESS:
+    sprintf(name,"CVSPILS_SUCCESS");
+    break; 
+  case CVSPILS_MEM_NULL:
+    sprintf(name,"CVSPILS_MEM_NULL");
+    break;
+  case CVSPILS_LMEM_NULL:
+    sprintf(name,"CVSPILS_LMEM_NULL");
+    break;
+  case CVSPILS_ILL_INPUT:
+    sprintf(name,"CVSPILS_ILL_INPUT");
+    break;
+  case CVSPILS_MEM_FAIL:
+    sprintf(name,"CVSPILS_MEM_FAIL");
+    break;
+  case CVSPILS_PMEM_NULL:
+    sprintf(name,"CVSPILS_PMEM_NULL");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSPILS private functions
+ * -----------------------------------------------------------------
+ */
+
+
+/* Additional readability Replacements */
+
+#define pretype (cvspils_mem->s_pretype)
+#define eplifac (cvspils_mem->s_eplifac)
+#define maxl    (cvspils_mem->s_maxl)
+#define psolve  (cvspils_mem->s_psolve)
+#define P_data  (cvspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsAtimes
+ * -----------------------------------------------------------------
+ * This routine generates the matrix-vector product z = Mv, where
+ * M = I - gamma*J. The product J*v is obtained by calling the jtimes 
+ * routine. It is then scaled by -gamma and added to v to obtain M*v.
+ * The return value is the same as the value returned by jtimes --
+ * 0 if successful, nonzero otherwise.
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsAtimes(void *cvode_mem, N_Vector v, N_Vector z)
+{
+  CVodeMem   cv_mem;
+  CVSpilsMem cvspils_mem;
+  int jtflag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  jtflag = jtimes(v, z, tn, ycur, fcur, j_data, ytemp);
+  njtimes++;
+  if (jtflag != 0) return(jtflag);
+
+  N_VLinearSum(ONE, v, -gamma, z, z);
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsPSolve
+ * -----------------------------------------------------------------
+ * This routine interfaces between the generic Sp***Solve routine
+ * (within the SPGMR, SPBCG, or SPTFQMR solver) and the
+ * user's psolve routine.  It passes to psolve all required state 
+ * information from cvode_mem.  Its return value is the same as that
+ * returned by psolve. Note that the generic SP*** solver guarantees
+ * that CVSpilsPSolve will not be called in the case in which
+ * preconditioning is not done. This is the only case in which the
+ * user's psolve routine is allowed to be NULL.
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsPSolve(void *cvode_mem, N_Vector r, N_Vector z, int lr)
+{
+  CVodeMem   cv_mem;
+  CVSpilsMem cvspils_mem;
+  int retval;
+
+  cv_mem = (CVodeMem) cvode_mem;
+  cvspils_mem = (CVSpilsMem)lmem;
+
+  /* This call is counted in nps within the CVSp***Solve routine */
+  retval = psolve(tn, ycur, fcur, r, z, gamma, delta, lr, P_data, ytemp);
+
+  return(retval);     
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsDQJtimes
+ * -----------------------------------------------------------------
+ * This routine generates a difference quotient approximation to
+ * the Jacobian times vector f_y(t,y) * v. The approximation is 
+ * Jv = vnrm[f(y + v/vnrm) - f(y)], where vnrm = (WRMS norm of v) is
+ * input, i.e. the WRMS norm of v/vnrm is 1.
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsDQJtimes(N_Vector v, N_Vector Jv, realtype t, 
+                    N_Vector y, N_Vector fy,
+                    void *data, N_Vector work)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  realtype sig, siginv;
+  int iter, retval;
+
+  /* data is cvode_mem */
+  cv_mem = (CVodeMem) data;
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Initialize perturbation to 1/||v|| */
+  sig = ONE/N_VWrmsNorm(v, ewt);
+
+  for (iter=0; iter<MAX_ITERS; iter++) {
+
+    /* Set work = y + sig*v */
+    N_VLinearSum(sig, v, ONE, y, work);
+
+    /* Set Jv = f(tn, y+sig*v) */
+    retval = f(t, work, Jv, user_data); 
+    nfes++;
+    if (retval == 0) break;
+    if (retval < 0)  return(-1);
+
+    sig *= PT25;
+  }
+
+  if (retval > 0) return(+1);
+
+  /* Replace Jv by (Jv - fy)/sig */
+  siginv = ONE/sig;
+  N_VLinearSum(siginv, Jv, -siginv, fy, Jv);
+
+  return(0);
+}
+
+
+int cvSpilsInitializeCounters(CVSpilsMem cvspils_mem)
+{
+  cvspils_mem->s_npe     = 0;
+  cvspils_mem->s_nli     = 0;
+  cvspils_mem->s_nps     = 0;
+  cvspils_mem->s_ncfl    = 0;
+  cvspils_mem->s_nstlpre = 0;
+  cvspils_mem->s_njtimes = 0;
+  cvspils_mem->s_nfes    = 0;
+  return(0);
+}
diff --git a/src/cvode/cvode_spils_impl.h b/src/cvode/cvode_spils_impl.h
new file mode 100644
index 0000000..5e3f199
--- /dev/null
+++ b/src/cvode/cvode_spils_impl.h
@@ -0,0 +1,151 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common implementation header file for the scaled, preconditioned
+ * linear solver modules.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSPILS_IMPL_H
+#define _CVSPILS_IMPL_H
+
+#include <cvode/cvode_spils.h>
+#include "cvode_impl.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Types of iterative linear solvers */
+
+#define SPILS_SPGMR   1
+#define SPILS_SPBCG   2
+#define SPILS_SPTFQMR 3
+
+/*
+ * -----------------------------------------------------------------
+ * Types : CVSpilsMemRec, CVSpilsMem
+ * -----------------------------------------------------------------
+ * The type CVSpilsMem is pointer to a CVSpilsMemRec.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVSpilsMemRec {
+
+  int s_type;           /* type of scaled preconditioned iterative LS   */
+
+  int  s_pretype;       /* type of preconditioning                      */
+  int  s_gstype;        /* type of Gram-Schmidt orthogonalization       */
+  realtype s_sqrtN;     /* sqrt(N)                                      */
+  realtype s_eplifac;   /* eplifac = user specified or EPLIN_DEFAULT    */
+  realtype s_deltar;    /* deltar = delt * tq4                          */
+  realtype s_delta;     /* delta = deltar * sqrtN                       */
+  int  s_maxl;          /* maxl = maximum dimension of the Krylov space */
+
+  long int s_nstlpre;   /* value of nst at the last pset call           */
+  long int s_npe;       /* npe = total number of pset calls             */
+  long int s_nli;       /* nli = total number of linear iterations      */
+  long int s_nps;       /* nps = total number of psolve calls           */
+  long int s_ncfl;      /* ncfl = total number of convergence failures  */
+  long int s_njtimes;   /* njtimes = total number of calls to jtimes    */
+  long int s_nfes;      /* nfeSG = total number of calls to f for     
+                           difference quotient Jacobian-vector products */
+
+  N_Vector s_ytemp;     /* temp vector passed to jtimes and psolve      */
+  N_Vector s_x;         /* temp vector used by CVSpilsSolve             */
+  N_Vector s_ycur;      /* CVODE current y vector in Newton Iteration   */
+  N_Vector s_fcur;      /* fcur = f(tn, ycur)                           */
+
+  void* s_spils_mem;    /* memory used by the generic solver            */
+
+  /* Preconditioner computation
+   * (a) user-provided:
+   *     - P_data == user_data
+   *     - pfree == NULL (the user dealocates memory for user_data)
+   * (b) internal preconditioner module
+   *     - P_data == cvode_mem
+   *     - pfree == set by the prec. module and called in CVodeFree
+   */
+  CVSpilsPrecSetupFn s_pset;
+  CVSpilsPrecSolveFn s_psolve;
+  int (*s_pfree)(CVodeMem cv_mem);
+  void *s_P_data;
+
+  /* Jacobian times vector compuation
+   * (a) jtimes function provided by the user:
+   *     - j_data == user_data
+   *     - jtimesDQ == FALSE
+   * (b) internal jtimes
+   *     - j_data == cvode_mem
+   *     - jtimesDQ == TRUE
+   */
+  booleantype s_jtimesDQ;
+  CVSpilsJacTimesVecFn s_jtimes;
+  void *s_j_data;
+
+  long int s_last_flag; /* last error flag returned by any function     */
+
+} *CVSpilsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+
+/* Atimes and PSolve routines called by generic solver */
+
+int CVSpilsAtimes(void *cv_mem, N_Vector v, N_Vector z);
+
+int CVSpilsPSolve(void *cv_mem, N_Vector r, N_Vector z, int lr);
+
+/* Difference quotient approximation for Jac times vector */
+
+int CVSpilsDQJtimes(N_Vector v, N_Vector Jv, realtype t,
+                    N_Vector y, N_Vector fy, void *data,
+                    N_Vector work);
+
+/* Auxilliary functions */
+int cvSpilsInitializeCounters(CVSpilsMem cvspils_mem);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Error Messages
+ * -----------------------------------------------------------------
+ */
+
+#define MSGS_CVMEM_NULL  "Integrator memory is NULL."
+#define MSGS_MEM_FAIL    "A memory request failed."
+#define MSGS_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGS_BAD_LSTYPE  "Incompatible linear solver type."
+#define MSGS_BAD_PRETYPE "Illegal value for pretype. Legal values are PREC_NONE, PREC_LEFT, PREC_RIGHT, and PREC_BOTH."
+#define MSGS_PSOLVE_REQ  "pretype != PREC_NONE, but PSOLVE = NULL is illegal."
+#define MSGS_LMEM_NULL   "Linear solver memory is NULL."
+#define MSGS_BAD_GSTYPE  "Illegal value for gstype. Legal values are MODIFIED_GS and CLASSICAL_GS."
+#define MSGS_BAD_EPLIN   "eplifac < 0 illegal."
+
+#define MSGS_PSET_FAILED "The preconditioner setup routine failed in an unrecoverable manner."
+#define MSGS_PSOLVE_FAILED "The preconditioner solve routine failed in an unrecoverable manner."
+#define MSGS_JTIMES_FAILED "The Jacobian x vector routine failed in an unrecoverable manner."
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvode/cvode_sptfqmr.c b/src/cvode/cvode_sptfqmr.c
new file mode 100644
index 0000000..abf2d02
--- /dev/null
+++ b/src/cvode/cvode_sptfqmr.c
@@ -0,0 +1,465 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSPTFQMR linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvode/cvode_sptfqmr.h>
+#include "cvode_spils_impl.h"
+#include "cvode_impl.h"
+
+#include <sundials/sundials_sptfqmr.h>
+#include <sundials/sundials_math.h>
+
+/* Other Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* CVSPTFQMR linit, lsetup, lsolve, and lfree routines */
+
+static int CVSptfqmrInit(CVodeMem cv_mem);
+
+static int CVSptfqmrSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                          N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                          N_Vector vtemp2, N_Vector vtemp3);
+
+static int CVSptfqmrSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                          N_Vector ynow, N_Vector fnow);
+
+static int CVSptfqmrFree(CVodeMem cv_mem);
+
+
+/* Readability Replacements */
+
+#define tq           (cv_mem->cv_tq)
+#define nst          (cv_mem->cv_nst)
+#define tn           (cv_mem->cv_tn)
+#define gamma        (cv_mem->cv_gamma)
+#define gammap       (cv_mem->cv_gammap)
+#define f            (cv_mem->cv_f)
+#define user_data    (cv_mem->cv_user_data)
+#define ewt          (cv_mem->cv_ewt)
+#define errfp        (cv_mem->cv_errfp)
+#define mnewt        (cv_mem->cv_mnewt)
+#define linit        (cv_mem->cv_linit)
+#define lsetup       (cv_mem->cv_lsetup)
+#define lsolve       (cv_mem->cv_lsolve)
+#define lfree        (cv_mem->cv_lfree)
+#define lmem         (cv_mem->cv_lmem)
+#define vec_tmpl     (cv_mem->cv_tempv)
+#define setupNonNull (cv_mem->cv_setupNonNull)
+
+#define sqrtN       (cvspils_mem->s_sqrtN)   
+#define ytemp       (cvspils_mem->s_ytemp)
+#define x           (cvspils_mem->s_x)
+#define ycur        (cvspils_mem->s_ycur)
+#define fcur        (cvspils_mem->s_fcur)
+#define delta       (cvspils_mem->s_delta)
+#define deltar      (cvspils_mem->s_deltar)
+#define npe         (cvspils_mem->s_npe)
+#define nli         (cvspils_mem->s_nli)
+#define nps         (cvspils_mem->s_nps)
+#define ncfl        (cvspils_mem->s_ncfl)
+#define nstlpre     (cvspils_mem->s_nstlpre)
+#define njtimes     (cvspils_mem->s_njtimes)
+#define nfes        (cvspils_mem->s_nfes)
+#define spils_mem   (cvspils_mem->s_spils_mem)
+
+#define jtimesDQ (cvspils_mem->s_jtimesDQ)
+#define jtimes  (cvspils_mem->s_jtimes)
+#define j_data  (cvspils_mem->s_j_data)
+
+#define last_flag   (cvspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmr
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the Sptfqmr linear solver module. CVSptfqmr first
+ * calls the existing lfree routine if this is not NULL. It then sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be CVSptfqmrInit, CVSptfqmrSetup, CVSptfqmrSolve, and CVSptfqmrFree,
+ * respectively. It allocates memory for a structure of type
+ * CVSpilsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure. It sets setupNonNull in (*cvode_mem),
+ * and sets various fields in the CVSpilsMemRec structure.
+ * Finally, CVSptfqmr allocates memory for ytemp and x, and calls
+ * SptfqmrMalloc to allocate memory for the Sptfqmr solver.
+ * -----------------------------------------------------------------
+ */
+
+int CVSptfqmr(void *cvode_mem, int pretype, int maxl)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int mxl;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPTFQMR", "CVSptfqmr", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if N_VDotProd is present */
+  if (vec_tmpl->ops->nvdotprod == NULL) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPTFQMR", "CVSptfqmr", MSGS_BAD_NVECTOR);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */
+  linit  = CVSptfqmrInit;
+  lsetup = CVSptfqmrSetup;
+  lsolve = CVSptfqmrSolve;
+  lfree  = CVSptfqmrFree;
+
+  /* Get memory for CVSpilsMemRec */
+  cvspils_mem = NULL;
+  cvspils_mem = (CVSpilsMem) malloc(sizeof(struct CVSpilsMemRec));
+  if (cvspils_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPTFQMR", "CVSptfqmr", MSGS_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  cvspils_mem->s_type = SPILS_SPTFQMR;
+
+  /* Set Sptfqmr parameters that have been passed in call sequence */
+  cvspils_mem->s_pretype = pretype;
+  mxl = cvspils_mem->s_maxl = (maxl <= 0) ? CVSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  cvspils_mem->s_pset   = NULL;
+  cvspils_mem->s_psolve = NULL;
+  cvspils_mem->s_pfree  = NULL;
+  cvspils_mem->s_P_data = cv_mem->cv_user_data;
+
+  /* Set default values for the rest of the Sptfqmr parameters */
+  cvspils_mem->s_eplifac = CVSPILS_EPLIN;
+
+  cvspils_mem->s_last_flag = CVSPILS_SUCCESS;
+
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPTFQMR", "CVSptfqmr", MSGS_BAD_PRETYPE);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPTFQMR", "CVSptfqmr", MSGS_MEM_FAIL);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  x = N_VClone(vec_tmpl);
+  if (x == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPTFQMR", "CVSptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt(N_VDotProd(ytemp, ytemp));
+
+  /* Call SptfqmrMalloc to allocate workspace for Sptfqmr */
+  sptfqmr_mem = NULL;
+  sptfqmr_mem = SptfqmrMalloc(mxl, vec_tmpl);
+  if (sptfqmr_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPTFQMR", "CVSptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(x);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPTFQMR memory to spils memory structure */
+  spils_mem = (void *) sptfqmr_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvspils_mem;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/* Additional readability replacements */
+
+#define pretype (cvspils_mem->s_pretype)
+#define eplifac (cvspils_mem->s_eplifac)
+#define maxl    (cvspils_mem->s_maxl)
+#define psolve  (cvspils_mem->s_psolve)
+#define pset    (cvspils_mem->s_pset)
+#define P_data  (cvspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmrInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the Sptfqmr
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSptfqmrInit(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  SptfqmrMem sptfqmr_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+  sptfqmr_mem = (SptfqmrMem) spils_mem;
+
+  /* Initialize counters */
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  /* Check for legal combination pretype - psolve */
+  if ((pretype != PREC_NONE) && (psolve == NULL)) {
+    cvProcessError(cv_mem, -1, "CVSPTFQMR", "CVSptfqmrInit", MSGS_PSOLVE_REQ);
+    last_flag = CVSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE)  and there is a preconditioning
+     setup phase (pset != NULL) */
+  setupNonNull = (pretype != PREC_NONE) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = CVSpilsDQJtimes;
+    j_data = cv_mem;
+  } else {
+    j_data = user_data;
+  }
+
+  /*  Set maxl in the SPTFQMR memory in case it was changed by the user */
+  sptfqmr_mem->l_max  = maxl;
+
+  last_flag = CVSPILS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmrSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the Sptfqmr linear solver.
+ * It makes a decision as to whether or not to signal for reevaluation
+ * of Jacobian data in the pset routine, based on various state
+ * variables, then it calls pset. If we signal for reevaluation,
+ * then we reset jcur = *jcurPtr to TRUE, regardless of the pset output.
+ * In any case, if jcur == TRUE, we increment npe and save nst in nstlpre.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSptfqmrSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+			  N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+			  N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  CVSpilsMem cvspils_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlpre + CVSPILS_MSBPRE) ||
+      ((convfail == CV_FAIL_BAD_J) && (dgamma < CVSPILS_DGMAX)) ||
+      (convfail == CV_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = pset(tn, ypred, fpred, jok, jcurPtr, gamma, P_data, 
+                vtemp1, vtemp2, vtemp3);
+  if (retval < 0) {
+    cvProcessError(cv_mem, SPTFQMR_PSET_FAIL_UNREC, "CVSPTFQMR", "CVSptfqmrSetup", MSGS_PSET_FAILED);
+    last_flag = SPTFQMR_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    last_flag = SPTFQMR_PSET_FAIL_REC;
+  }
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    npe++;
+    nstlpre = nst;
+  }
+
+  last_flag = SPTFQMR_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmrSolve
+ * -----------------------------------------------------------------
+ * This routine handles the call to the generic solver SptfqmrSolve
+ * for the solution of the linear system Ax = b with the SPTFQMR method.
+ * The solution x is returned in the vector b.
+ *
+ * If the WRMS norm of b is small, we return x = b (if this is the first
+ * Newton iteration) or x = 0 (if a later Newton iteration).
+ *
+ * Otherwise, we set the tolerance parameter and initial guess (x = 0),
+ * call SptfqmrSolve, and copy the solution x into b. The x-scaling and
+ * b-scaling arrays are both equal to weight.
+ *
+ * The counters nli, nps, and ncfl are incremented, and the return value
+ * is set according to the success of SptfqmrSolve. The success flag is
+ * returned if SptfqmrSolve converged, or if this is the first Newton
+ * iteration and the residual norm was reduced below its initial value.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSptfqmrSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+			  N_Vector ynow, N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  CVSpilsMem cvspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int nli_inc, nps_inc, retval;
+  
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  sptfqmr_mem = (SptfqmrMem) spils_mem;
+
+  /* Test norm(b); if small, return x = 0 or x = b */
+  deltar = eplifac * tq[4]; 
+
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= deltar) {
+    if (mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  ycur = ynow;
+  fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to SptfqmrSolve */  
+  delta = deltar * sqrtN;
+  N_VConst(ZERO, x);
+  
+  /* Call SptfqmrSolve and copy x to b */
+  retval = SptfqmrSolve(sptfqmr_mem, cv_mem, x, b, pretype, delta,
+                        cv_mem, weight, weight, CVSpilsAtimes, CVSpilsPSolve,
+                        &res_norm, &nli_inc, &nps_inc);
+
+  N_VScale(ONE, x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPTFQMR_SUCCESS) ncfl++;
+
+  /* Interpret return value from SpgmrSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPTFQMR_SUCCESS:
+    return(0);
+    break;
+  case SPTFQMR_RES_REDUCED:
+    if (mnewt == 0) return(0);
+    else            return(1);
+    break;
+  case SPTFQMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_UNREC:
+    cvProcessError(cv_mem, SPTFQMR_ATIMES_FAIL_UNREC, "CVSPTFQMR", "CVSptfqmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_UNREC:
+    cvProcessError(cv_mem, SPTFQMR_PSOLVE_FAIL_UNREC, "CVSPTFQMR", "CVSptfqmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmrFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the Sptfqmr linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSptfqmrFree(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  SptfqmrMem sptfqmr_mem;
+    
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  N_VDestroy(ytemp);
+  N_VDestroy(x);
+
+  sptfqmr_mem = (SptfqmrMem) spils_mem;
+  SptfqmrFree(sptfqmr_mem);
+
+  if (cvspils_mem->s_pfree != NULL) (cvspils_mem->s_pfree)(cv_mem);
+
+  free(cvspils_mem);
+  cv_mem->cv_lmem = NULL;
+
+  return(0);
+}
+
diff --git a/src/cvode/cvode_superlumt.c b/src/cvode/cvode_superlumt.c
new file mode 100644
index 0000000..f601898
--- /dev/null
+++ b/src/cvode/cvode_superlumt.c
@@ -0,0 +1,554 @@
+
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4922 $
+ * $Date: 2016-09-19 14:35:32 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSUPERLUMT linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvode_impl.h"
+#include "cvode_sparse_impl.h"
+#include "cvode/cvode_superlumt.h"
+#include "sundials/sundials_superlumt_impl.h"
+#include "sundials/sundials_math.h"
+
+/* Constants */
+
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* CVSUPERLUMT linit, lsetup, lsolve, and lfree routines */
+ 
+static int cvSuperLUMTInit(CVodeMem cv_mem);
+
+static int cvSuperLUMTSetup(CVodeMem cv_mem, int convfail, N_Vector ypred, 
+			    N_Vector fpred, booleantype *jcurPtr,
+			    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int cvSuperLUMTSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+			    N_Vector ycur, N_Vector fcur);
+
+static int cvSuperLUMTFree(CVodeMem cv_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * CVSuperLUMT
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the CVODE / SuperLUMT linear solver module.  
+ * CVSUPERLUMT first calls the existing lfree routine if this is not NULL.
+ * Then it sets the cv_linit, cv_lsetup, cv_lsolve, and
+ * cv_lfree fields in (*cv_mem) to be cvSuperLUMTInit, cvSuperLUMTSetup,
+ * cvSuperLUMTSolve, and cvSuperLUMTFree, respectively.
+ * It allocates memory for a structure of type CVsluMemRec and sets
+ * the cv_lmem field in (*cvode_mem) to the address of this structure.
+ * It sets setupNonNull in (*cvode_mem) to TRUE.
+ * Finally, it allocates memory for SuperLUMT.
+ * The return value is CVSLS_SUCCESS = 0, CVSLS_LMEM_FAIL = -1,
+ * or CVSLS_ILL_INPUT = -2.
+ *
+ * NOTE: The SuperLUMT linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVSuperLUMT will first 
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int CVSuperLUMT(void *cvode_mem, int num_threads, int n, int nnz)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+  SLUMTData slumt_data;
+  int *perm_c, *perm_r;
+  int nrhs, panel_size, relax;
+  double *bd;
+  SuperMatrix *B;
+
+  /* Return immediately if cv_mem is NULL. */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the Direct solver */
+  if (cv_mem->cv_tempv->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_BAD_NVECTOR);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  if (cv_mem->cv_lfree != NULL) cv_mem->cv_lfree(cv_mem);
+
+  /* Set five main function fields in cv_mem. */
+  cv_mem->cv_linit  = cvSuperLUMTInit;
+  cv_mem->cv_lsetup = cvSuperLUMTSetup;
+  cv_mem->cv_lsolve = cvSuperLUMTSolve;
+  cv_mem->cv_lfree  = cvSuperLUMTFree;
+
+  /* Get memory for CVSlsMemRec. */
+  cvsls_mem = (CVSlsMem) malloc(sizeof(struct CVSlsMemRec));
+  if (cvsls_mem == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Get memory for SLUMT_data. */
+  slumt_data = (SLUMTData)malloc(sizeof(struct SLUMTDataRec));
+  if (slumt_data == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  cv_mem->cv_setupNonNull = TRUE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  cvsls_mem->s_jaceval = NULL;
+  cvsls_mem->s_jacdata = cv_mem->cv_user_data;
+
+  /* Allocate memory for the sparse Jacobian */
+  cvsls_mem->s_JacMat = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (cvsls_mem->s_JacMat == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    free(cvsls_mem);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Allocate memory for saved sparse Jacobian */
+  cvsls_mem->s_savedJ = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (cvsls_mem->s_savedJ == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    SparseDestroyMat(cvsls_mem->s_JacMat);
+    free(cvsls_mem);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Set up memory for the permutations */
+  perm_r = (int *)malloc(n*sizeof(int));
+  if (perm_r == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		   MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+  perm_c = (int *)malloc(n*sizeof(int));
+  if (perm_c == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		   MSGSP_MEM_FAIL);
+    free(perm_r);
+    return(CVSLS_MEM_FAIL);
+  }
+  slumt_data->perm_r = perm_r;
+  slumt_data->perm_c = perm_c;
+
+  /* Set default parameters for SuperLU */
+  slumt_data->num_threads = num_threads;
+  slumt_data->diag_pivot_thresh = 1.0;
+
+  /* Allocate structures for SuperLU */
+  slumt_data->Gstat = (Gstat_t *)malloc(sizeof(Gstat_t));
+  slumt_data->s_A = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_AC = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_L = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_U = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_A->Store  = NULL;
+  slumt_data->s_AC->Store = NULL;
+  slumt_data->s_L->Store  = NULL;
+  slumt_data->s_U->Store  = NULL;
+  slumt_data->superlumt_options = (superlumt_options_t *)malloc(sizeof(superlumt_options_t));
+
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  StatAlloc(cvsls_mem->s_JacMat->N, num_threads, panel_size, relax, 
+	    slumt_data->Gstat);
+  
+  /* Create RHS matrix */
+  nrhs = 1;
+  bd = NULL;
+  B = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  B->Store = NULL;
+  dCreate_Dense_Matrix(B, n, nrhs, bd, n, 
+		       SLU_DN, SLU_D, SLU_GE);
+  slumt_data->s_B = B;
+
+  /* Set ordering to COLAMD as the cvode default use.
+     Users can set a different value with CVSuperLUMTSetOrdering,
+     and the user-set value is loaded before any call to factorize the
+     matrix in cvSuperLUMTSetup.  */
+  slumt_data->s_ordering = 3;
+
+  /* Attach linear solver memory to the integrator memory */
+  cvsls_mem->s_solver_data = (void *) slumt_data;
+  cv_mem->cv_lmem = cvsls_mem;
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+
+  return(CVSLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSuperLUMT interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the CVSuperLUMT
+  linear solver module.  
+  It returns 0 if successful.
+*/
+
+static int cvSuperLUMTInit(CVodeMem cv_mem)
+{
+  int num_threads, n;
+  CVSlsMem cvsls_mem;
+  SLUMTData slumt_data;
+
+  cvsls_mem = (CVSlsMem)cv_mem->cv_lmem;
+  slumt_data = (SLUMTData) cvsls_mem->s_solver_data;
+
+  cvsls_mem->s_nje = 0;
+  cvsls_mem->s_first_factorize = 1;
+  cvsls_mem->s_nstlj = 0;
+
+  /* ------------------------------------------------------------
+     Allocate storage and initialize statistics variables. 
+     ------------------------------------------------------------*/
+  n = cvsls_mem->s_JacMat->N;
+  num_threads = slumt_data->num_threads;
+
+  StatInit(n, num_threads, slumt_data->Gstat);
+
+  cvsls_mem->s_last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the CVSuperLUMT linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     CVSLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int cvSuperLUMTSetup(CVodeMem cv_mem, int convfail, N_Vector ypred, 
+			   N_Vector fpred, booleantype *jcurPtr,
+			   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  int retval, info;
+  int nprocs, panel_size, relax, permc_spec, lwork;
+  int *perm_r, *perm_c;
+  long int nst, nstlj;
+  realtype tn, gamma, gammap, dgamma;
+  double diag_pivot_thresh, drop_tol;
+  fact_t fact;
+  trans_t trans;
+  yes_no_t refact, usepr;
+  CVSlsMem cvsls_mem;
+  CVSlsSparseJacFn jaceval;
+  SuperMatrix *A, *AC, *L, *U;
+  Gstat_t *Gstat;
+  superlumt_options_t *superlumt_options;
+  SLUMTData slumt_data;
+  SlsMat JacMat, savedJ;
+  void *jacdata;
+  void *work;
+  
+  cvsls_mem = (CVSlsMem) (cv_mem->cv_lmem);
+  tn = cv_mem->cv_tn; 
+  gamma = cv_mem->cv_gamma;
+  gammap = cv_mem->cv_gammap;
+  nst = cv_mem->cv_nst;
+
+  slumt_data = (SLUMTData) cvsls_mem->s_solver_data;
+
+  jaceval = cvsls_mem->s_jaceval;
+  jacdata = cvsls_mem->s_jacdata;
+  JacMat = cvsls_mem->s_JacMat;
+  savedJ = cvsls_mem->s_savedJ;
+  nstlj = cvsls_mem->s_nstlj;
+
+  superlumt_options = slumt_data->superlumt_options;
+  A = slumt_data->s_A;
+  AC = slumt_data->s_AC;
+  L = slumt_data->s_L;
+  U = slumt_data->s_U;
+  Gstat = slumt_data->Gstat;
+  perm_r = slumt_data->perm_r;
+  perm_c = slumt_data->perm_c;
+  nprocs = slumt_data->num_threads;
+  diag_pivot_thresh = slumt_data->diag_pivot_thresh;
+
+  /* Set option values for SuperLU_MT */
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  fact = EQUILIBRATE;
+  trans = NOTRANS;
+  usepr = NO;
+  drop_tol = 0.0;
+  lwork = 0;
+  work = NULL;
+
+  /* Check that Jacobian eval routine is set */
+  if (jaceval == NULL) {
+    cvProcessError(cv_mem, CVSLS_JAC_NOSET, "CVSLS", "cvSuperLUMTSetup", 
+		    MSGSP_JAC_NOSET);
+    free(cvsls_mem); cvsls_mem = NULL;
+    return(CVSLS_JAC_NOSET);
+  }
+
+  /* Determine whether Jacobian needs to be recalculated */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVS_MSBJ) ||
+         ((convfail == CV_FAIL_BAD_J) && (dgamma < CVS_DGMAX)) ||
+         (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    SparseCopyMat(savedJ, JacMat);
+  } else {
+    /* If jok = FALSE, call jac routine for new J value */
+    cvsls_mem->s_nje++;
+    cvsls_mem->s_nstlj = nst;
+    *jcurPtr = TRUE;
+    SparseSetMatToZero(JacMat);
+    retval = jaceval(tn, ypred, fpred, JacMat, jacdata, vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      cvProcessError(cv_mem, CVSLS_JACFUNC_UNRECVR, "CVSLS", "cvSuperLUMTSetup", MSGSP_JACFUNC_FAILED);
+      cvsls_mem->s_last_flag = CVSLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      cvsls_mem->s_last_flag = CVSLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    SparseCopyMat(JacMat, savedJ);
+  }
+
+  /* Scale and add I to get M = I - gamma*J */
+  SparseScaleMat(-gamma, JacMat);
+  SparseAddIdentityMat(JacMat);
+
+  if (A->Store) {
+    SUPERLU_FREE(A->Store);
+  }
+  dCreate_CompCol_Matrix(A, JacMat->M, JacMat->N, JacMat->NNZ, 
+			 JacMat->data, JacMat->indexvals, JacMat->indexptrs, 
+			 SLU_NC, SLU_D, SLU_GE);
+
+  if (cvsls_mem->s_first_factorize) {
+    /* ------------------------------------------------------------
+       Get column permutation vector perm_c[], according to permc_spec:
+       permc_spec = 3: approximate minimum degree for unsymmetric matrices
+       ------------------------------------------------------------*/ 
+    permc_spec = slumt_data->s_ordering;
+    get_perm_c(permc_spec, A, perm_c);
+
+    refact= NO;
+    cvsls_mem->s_first_factorize = 0;
+  }
+  else {
+    /* ------------------------------------------------------------
+       Re-initialize statistics variables 
+       ------------------------------------------------------------*/
+    StatInit(JacMat->N, nprocs, Gstat);
+    Destroy_CompCol_Permuted(AC);
+    refact= YES;
+  }
+
+  /* ------------------------------------------------------------
+     Initialize the option structure superlumt_options using the
+     user-input parameters;  Subsequent calls will re-initialize
+     options.
+     Apply perm_c to the columns of original A to form AC.
+     ------------------------------------------------------------*/
+  pdgstrf_init(nprocs, fact, trans, refact, panel_size, relax,
+	       diag_pivot_thresh, usepr, drop_tol, perm_c, perm_r,
+	       work, lwork, A, AC, superlumt_options, Gstat);
+  /* ------------------------------------------------------------
+     Compute the LU factorization of A.
+     The following routine will create nprocs threads.
+     ------------------------------------------------------------*/
+  pdgstrf(superlumt_options, AC, perm_r, L, U, Gstat, &info);
+    
+  if (info != 0) {
+    cvsls_mem->s_last_flag = info;
+    return(+1);
+  }
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the CVSuperLUMT linear
+  solver module.  It calls the SuperLU_MT solve routine,
+  then returns CVSLS_SUCCESS = 0.
+*/
+
+static int cvSuperLUMTSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+			    N_Vector ycur, N_Vector fcur)
+{
+  int info, trans, lmm;
+  int *perm_r, *perm_c;
+  realtype gamrat;
+  CVSlsMem cvsls_mem;
+  SuperMatrix *L, *U, *B;
+  Gstat_t *Gstat;
+  DNformat *Bstore;
+  SLUMTData slumt_data;
+  realtype *bd;
+  
+  gamrat = cv_mem->cv_gamrat;
+  lmm = cv_mem->cv_lmm;
+
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+
+  slumt_data = (SLUMTData) cvsls_mem->s_solver_data;
+
+  L = slumt_data->s_L;
+  U = slumt_data->s_U;
+  perm_r = slumt_data->perm_r;
+  perm_c = slumt_data->perm_c;
+  Gstat = slumt_data->Gstat;
+  B = slumt_data->s_B;
+   
+  bd = N_VGetArrayPointer(b);
+  Bstore = (DNformat *) (B->Store);
+  Bstore->nzval = bd;
+
+  /* Call SuperLUMT to solve the linear system using L and U */
+  trans = NOTRANS;
+  dgstrs(trans, L, U, perm_r, perm_c, B, Gstat, &info);
+
+  /* Scale the correction to account for change in gamma. */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    N_VScale(TWO/(ONE + gamrat), b, b);
+  }
+
+  Bstore->nzval = NULL;
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+  return(CVSLS_SUCCESS);
+}
+
+/*
+  This routine frees memory specific to the CVSuperLUMT linear solver.
+*/
+
+static int cvSuperLUMTFree(CVodeMem cv_mem)
+{
+  CVSlsMem cvsls_mem;
+  SLUMTData slumt_data;
+  
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+
+  slumt_data = (SLUMTData) cvsls_mem->s_solver_data;
+
+  pxgstrf_finalize(slumt_data->superlumt_options, slumt_data->s_AC);
+
+  free(slumt_data->perm_r);
+  free(slumt_data->perm_c);
+  free(slumt_data->superlumt_options);
+  Destroy_SuperNode_SCP( (slumt_data->s_L) );
+  Destroy_CompCol_NCP( (slumt_data->s_U) );
+  StatFree( (slumt_data->Gstat) );
+  free(slumt_data->Gstat);
+  
+  Destroy_SuperMatrix_Store(slumt_data->s_B);
+  SUPERLU_FREE(slumt_data->s_A->Store);
+  if (cvsls_mem->s_JacMat) {
+    SparseDestroyMat(cvsls_mem->s_JacMat);
+    cvsls_mem->s_JacMat = NULL;
+  }
+  if (cvsls_mem->s_savedJ) {
+    SparseDestroyMat(cvsls_mem->s_savedJ);
+    cvsls_mem->s_savedJ = NULL;
+  }
+
+  free(slumt_data->s_B);
+  free(slumt_data->s_A);
+  free(slumt_data->s_AC);
+  free(slumt_data->s_L);
+  free(slumt_data->s_U);
+
+  free(slumt_data); 
+  slumt_data = NULL;
+  free(cv_mem->cv_lmem); 
+
+  return(0);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * CVSuperLUMTSetOrdering sets the ordering used by SuperLUMT for reducing fill.
+ * Options are: 
+ * 0 for natural ordering
+ * 1 for minimal degree ordering on A'*A
+ * 2 for minimal degree ordering on A'+A
+ * 3 for approximate minimal degree ordering for unsymmetric matrices
+ * The default used in SUNDIALS is 3 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+int CVSuperLUMTSetOrdering(void *cv_mem_v, int ordering_choice)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+  SLUMTData slumt_data;
+
+ /* Return immediately if cv_mem is NULL */
+  if (cv_mem_v == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVSuperLUMTSetOrdering",
+		    MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cv_mem_v;
+
+ /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) && (ordering_choice != 3) ) {
+    cvProcessError(NULL, CVSLS_ILL_INPUT, "CVSLS", "CVSuperLUMTSetOrdering",
+		    MSGSP_ILL_INPUT);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+  slumt_data = (SLUMTData) cvsls_mem->s_solver_data;
+
+  slumt_data->s_ordering = ordering_choice;
+
+  return(CVSLS_SUCCESS);
+}
diff --git a/src/cvode/fcmix/CMakeLists.txt b/src/cvode/fcmix/CMakeLists.txt
new file mode 100644
index 0000000..44a82d4
--- /dev/null
+++ b/src/cvode/fcmix/CMakeLists.txt
@@ -0,0 +1,63 @@
+# CMakeLists.txt file for the FCVODE library
+
+# Add variable fcvode_SOURCES with the sources for the FCVODE library
+SET(fcvode_SOURCES
+  fcvband.c
+  fcvbbd.c
+  fcvbp.c
+  fcvdense.c
+  fcvewt.c
+  fcvjtimes.c
+  fcvode.c
+  fcvpreco.c
+  fcvroot.c
+  )
+
+IF(LAPACK_FOUND)
+  SET(fcvode_BL_SOURCES fcvlapack.c fcvlapband.c fcvlapdense.c)
+ELSE(LAPACK_FOUND)
+  SET(fcvode_BL_SOURCES "")
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND OR SUPERLUMT_FOUND)
+  SET(fcvode_SPARSE_SOURCES fcvsparse.c)
+ELSE(SPARSE_FOUND)
+  SET(fcvode_SPARSE_SOURCES "")
+ENDIF(KLU_FOUND OR SUPERLUMT_FOUND)
+
+IF(KLU_FOUND)
+  SET(fcvode_KLU_SOURCES fcvklu.c)
+ELSE(KLU_FOUND)
+  SET(fcvode_KLU_SOURCES "")
+ENDIF(KLU_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  SET(fcvode_SUPERLUMT_SOURCES fcvsuperlumt.c)
+ELSE(SUPERLUMT_FOUND)
+  SET(fcvode_SUPERLUMT_SOURCES "")
+ENDIF(SUPERLUMT_FOUND)
+
+# Add source directories to include directories for access to
+# implementation only header files (both for fcvode and cvode)
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(..)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Only build STATIC libraries (we cannot build shared libraries 
+# for the FCMIX interfaces due to unresolved symbol errors 
+# coming from inexistent user-provided functions)
+
+# Add the build target for the FCVODE library
+ADD_LIBRARY(sundials_fcvode_static STATIC ${fcvode_SOURCES} ${fcvode_BL_SOURCES} ${fcvode_SPARSE_SOURCES} ${fcvode_KLU_SOURCES} ${fcvode_SUPERLUMT_SOURCES})
+
+# Set the library name and make sure it is not deleted
+SET_TARGET_PROPERTIES(sundials_fcvode_static
+  PROPERTIES OUTPUT_NAME sundials_fcvode CLEAN_DIRECT_OUTPUT 1)
+
+# Install the FCVODE library
+INSTALL(TARGETS sundials_fcvode_static DESTINATION lib)
+
+#
+MESSAGE(STATUS "Added CVODE FCMIX module")
diff --git a/src/cvode/fcmix/fcvband.c b/src/cvode/fcmix/fcvband.c
new file mode 100644
index 0000000..8d40052
--- /dev/null
+++ b/src/cvode/fcmix/fcvband.c
@@ -0,0 +1,99 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4294 $
+ * $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for CVODE/CVBAND, for the case of 
+ * a user-supplied Jacobian approximation routine.                
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"     /* actual fn. names, prototypes and global vars.*/
+#include "cvode_impl.h" /* definition of CVodeMem type                  */
+
+#include <cvode/cvode_band.h>
+
+/******************************************************************************/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+  extern void FCV_BJAC(long int*, long int*, long int*, long int*,  /* N,MU,ML,EBAND */
+                       realtype*, realtype*, realtype*,  /* T, Y, FY         */
+                       realtype*,                        /* BJAC             */
+                       realtype*,                        /* H                */
+                       long int*, realtype*,             /* IPAR, RPAR       */
+                       realtype*, realtype*, realtype*,  /* V1, V2, V3       */
+                       int*);                            /* IER              */
+#ifdef __cplusplus
+}
+#endif
+
+/***************************************************************************/
+
+void FCV_BANDSETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = CVDlsSetBandJacFn(CV_cvodemem, NULL);
+  } else {
+    *ier = CVDlsSetBandJacFn(CV_cvodemem, FCVBandJac);
+  }
+}
+
+/***************************************************************************/
+
+/* C function CVBandJac interfaces between CVODE and a Fortran subroutine
+   FCVBJAC for solution of a linear system with band Jacobian approximation.
+   Addresses of arguments are passed to FCVBJAC, using the macro 
+   BAND_COL from BAND and the routine N_VGetArrayPointer from NVECTOR.
+   The address passed for J is that of the element in column 0 with row 
+   index -mupper.  An extended bandwith equal to (J->smu) + mlower + 1 is
+   passed as the column dimension of the corresponding array.
+   Auxiliary data is assumed to be communicated by Common. */
+
+int FCVBandJac(long int N, long int mupper, long int mlower,
+               realtype t, N_Vector y, N_Vector fy, 
+               DlsMat J, void *user_data,
+               N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *fydata, *jacdata, *v1data, *v2data, *v3data;
+  realtype h;
+  long int eband;
+  FCVUserData CV_userdata;
+
+  CVodeGetLastStep(CV_cvodemem, &h);
+
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+
+  eband = (J->s_mu) + mlower + 1;
+  jacdata = BAND_COL(J,0) - mupper;
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_BJAC(&N, &mupper, &mlower, &eband, &t, ydata, fydata, jacdata, &h,
+           CV_userdata->ipar, CV_userdata->rpar, v1data, v2data, v3data, &ier);
+
+  return(ier);
+}
diff --git a/src/cvode/fcmix/fcvbbd.c b/src/cvode/fcmix/fcvbbd.c
new file mode 100644
index 0000000..38674b1
--- /dev/null
+++ b/src/cvode/fcmix/fcvbbd.c
@@ -0,0 +1,146 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh, Radu Serban and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This module contains the routines necessary to interface with the
+ * CVBBDPRE module and user-supplied Fortran routines.
+ * The routines here call the generically named routines and provide
+ * a standard interface to the C code of the CVBBDPRE package.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"              /* actual function names, prototypes, global vars.*/
+#include "fcvbbd.h"              /* prototypes of interfaces to CVBBDPRE           */
+
+#include <cvode/cvode_bbdpre.h>  /* prototypes of CVBBDPRE functions and macros    */
+#include <cvode/cvode_sptfqmr.h> /* prototypes of CVSPTFQMR interface routines     */
+#include <cvode/cvode_spbcgs.h>  /* prototypes of CVSPBCG interface routines       */
+#include <cvode/cvode_spgmr.h>   /* prototypes of CVSPGMR interface routines       */
+
+/***************************************************************************/
+
+/* Prototypes of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FCV_GLOCFN(long int*,                        /* NLOC          */
+                         realtype*, realtype*, realtype*,  /* T, YLOC, GLOC */
+                         long int*, realtype*,             /* IPAR, RPAR    */
+                         int *ier);                        /* IER           */
+
+  extern void FCV_COMMFN(long int*,                        /* NLOC          */
+                         realtype*, realtype*,             /* T, Y          */
+                         long int*, realtype*,             /* IPAR, RPAR    */
+                         int *ier);                        /* IER           */
+
+#ifdef __cplusplus
+}
+#endif
+
+/***************************************************************************/
+
+void FCV_BBDINIT(long int *Nloc, long int *mudq, long int *mldq, long int *mu, long int *ml, 
+                 realtype* dqrely, int *ier)
+{
+
+  /* 
+     First call CVBBDPrecInit to initialize CVBBDPRE module:
+     Nloc       is the local vector size
+     mudq,mldq  are the half-bandwidths for computing preconditioner blocks
+     mu, ml     are the half-bandwidths of the retained preconditioner blocks
+     dqrely     is the difference quotient relative increment factor
+     FCVgloc    is a pointer to the CVLocalFn function
+     FCVcfn     is a pointer to the CVCommFn function 
+  */
+
+  *ier = CVBBDPrecInit(CV_cvodemem, *Nloc, *mudq, *mldq, *mu, *ml, 
+                       *dqrely, FCVgloc, FCVcfn);
+
+  return; 
+}
+
+/***************************************************************************/
+
+void FCV_BBDREINIT(long int *Nloc, long int *mudq, long int *mldq, realtype* dqrely, int *ier)
+{
+  /* 
+     First call CVReInitBBD to re-initialize CVBBDPRE module:
+     mudq,mldq   are the half-bandwidths for computing preconditioner blocks
+     dqrely      is the difference quotient relative increment factor
+     FCVgloc     is a pointer to the CVLocalFn function
+     FCVcfn      is a pointer to the CVCommFn function 
+  */
+
+  *ier = CVBBDPrecReInit(CV_cvodemem, *mudq, *mldq, *dqrely);
+}
+
+/***************************************************************************/
+
+/* C function FCVgloc to interface between CVBBDPRE module and a Fortran 
+   subroutine FCVLOCFN. */
+
+int FCVgloc(long int Nloc, realtype t, N_Vector yloc, N_Vector gloc, void *user_data)
+{
+  int ier;
+  realtype *yloc_data, *gloc_data;
+  FCVUserData CV_userdata;
+
+  yloc_data = N_VGetArrayPointer(yloc);
+  gloc_data = N_VGetArrayPointer(gloc);
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_GLOCFN(&Nloc, &t, yloc_data, gloc_data, 
+             CV_userdata->ipar, CV_userdata->rpar,
+             &ier);
+  return(ier);
+}
+
+/***************************************************************************/
+
+/* C function FCVcfn to interface between CVBBDPRE module and a Fortran 
+   subroutine FCVCOMMF. */
+
+int FCVcfn(long int Nloc, realtype t, N_Vector y, void *user_data)
+{
+  int ier;
+  realtype *yloc;
+  FCVUserData CV_userdata;
+
+  yloc = N_VGetArrayPointer(y);
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_COMMFN(&Nloc, &t, yloc, CV_userdata->ipar, CV_userdata->rpar, &ier);
+
+  return(ier);
+}
+
+/***************************************************************************/
+
+/* C function FCVBBDOPT to access optional outputs from CVBBD_Data */
+
+void FCV_BBDOPT(long int *lenrwbbd, long int *leniwbbd, long int *ngebbd)
+{
+  CVBBDPrecGetWorkSpace(CV_cvodemem, lenrwbbd, leniwbbd);
+  CVBBDPrecGetNumGfnEvals(CV_cvodemem, ngebbd);
+}
diff --git a/src/cvode/fcmix/fcvbbd.h b/src/cvode/fcmix/fcvbbd.h
new file mode 100644
index 0000000..c47aba6
--- /dev/null
+++ b/src/cvode/fcmix/fcvbbd.h
@@ -0,0 +1,325 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan Hindmarsh, Radu Serban and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the Fortran interface include file for the BBD
+ * preconditioner (CVBBDPRE)
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * ==============================================================================
+ *
+ *                   FCVBBD Interface Package
+ * 
+ * The FCVBBD Interface Package is a package of C functions which,
+ * together with the FCVODE Interface Package, support the use of the
+ * CVODE solver (parallel MPI version) with the CVBBDPRE preconditioner module,
+ * for the solution of ODE systems in a mixed Fortran/C setting.  The
+ * combination of CVODE and CVBBDPRE solves systems dy/dt = f(t,y) with
+ * the SPGMR (scaled preconditioned GMRES), SPTFQMR (scaled preconditioned TFQMR),
+ * or SPBCG (scaled preconditioned Bi-CGSTAB) method for the linear systems that
+ * arise, and with a preconditioner that is block-diagonal with banded blocks.
+ * While CVODE and CVBBDPRE are written in C, it is assumed here that the user's
+ * calling program and user-supplied problem-defining routines are written in
+ * Fortran.
+ * 
+ * The user-callable functions in this package, with the corresponding
+ * CVODE and CVBBDPRE functions, are as follows: 
+ *   FCVBBDININT   interfaces to CVBBDPrecInit
+ *   FCVBBDREINIT  interfaces to CVBBDPrecReInit
+ *   FCVBBDOPT     accesses optional outputs
+ * 
+ * In addition to the Fortran right-hand side function FCVFUN, the
+ * user-supplied functions used by this package, are listed below,
+ * each with the corresponding interface function which calls it (and its
+ * type within CVBBDPRE or CVODE):
+ *   FCVLOCFN  is called by the interface function FCVgloc of type CVLocalFn
+ *   FCVCOMMF  is called by the interface function FCVcfn of type CVCommFn
+ *   FCVJTIMES (optional) is called by the interface function FCVJtimes of 
+ *             type CVSpilsJtimesFn
+ * (The names of all user-supplied routines here are fixed, in order to
+ * maximize portability for the resulting mixed-language program.)
+ * 
+ * Important note on portability.
+ * In this package, the names of the interface functions, and the names of
+ * the Fortran user routines called by them, appear as dummy names
+ * which are mapped to actual values by a series of definitions in the
+ * header file fcvbbd.h.
+ * 
+ * ==============================================================================
+ * 
+ *               Usage of the FCVODE/FCVBBD Interface Packages
+ * 
+ * The usage of the combined interface packages FCVODE and FCVBBD requires
+ * calls to seven to twelve interface functions, and three or four user-supplied
+ * routines which define the problem to be solved and indirectly define
+ * the preconditioner.  These function calls and user routines are
+ * summarized separately below.
+ * 
+ * Some details are omitted, and the user is referred to the CVODE user document 
+ * for more complete information.
+ * 
+ * (1) User-supplied right-hand side routine: FCVFUN
+ * The user must in all cases supply the following Fortran routine
+ *       SUBROUTINE FCVFUN (T, Y, YDOT, IPAR, RPAR, IER)
+ *       DIMENSION Y(*), YDOT(*), IPAR(*), RPAR(*)
+ * It must set the YDOT array to f(t,y), the right-hand side of the ODE
+ * system, as function of T = t and the array Y = y.  Here Y and YDOT
+ * are distributed vectors.
+ * 
+ * (2) User-supplied routines to define preconditoner: FCVLOCFN and FCVCOMMF
+ * 
+ * The routines in the CVBBDPRE module provide a preconditioner matrix
+ * for CVODE that is block-diagonal with banded blocks.  The blocking
+ * corresponds to the distribution of the dependent variable vector y
+ * among the processors.  Each preconditioner block is generated from the
+ * Jacobian of the local part (on the current processor) of a given
+ * function g(t,y) approximating f(t,y).  The blocks are generated by a
+ * difference quotient scheme on each processor independently, utilizing
+ * an assumed banded structure with given half-bandwidths.  A separate
+ * pair of half-bandwidths defines the band matrix retained.
+ * 
+ * (2.1) Local approximate function FCVLOCFN.
+ * The user must supply a subroutine of the form
+ *       SUBROUTINE FCVLOCFN (NLOC, T, YLOC, GLOC, IPAR, RPAR, IER)
+ *       DIMENSION YLOC(*), GLOC(*), IPAR(*), RPAR(*)
+ * to compute the function g(t,y) which approximates the right-hand side
+ * function f(t,y).  This function is to be computed locally, i.e. without 
+ * interprocess communication.  (The case where g is mathematically
+ * identical to f is allowed.)  It takes as input the local vector length
+ * NLOC, the independent variable value T = t, and the local realtype
+ * dependent variable array YLOC.  It is to compute the local part of
+ * g(t,y) and store this in the realtype array GLOC.
+ * On return, set IER = 0 if successful, IER > 0 if a recoverable error occurred,
+ * and IER < 0 if an unrecoverable error ocurred.
+ * 
+ * (2.2) Communication function FCVCOMMF.
+ * The user must also supply a subroutine of the form
+ *       SUBROUTINE FCVCOMMF (NLOC, T, YLOC, IPAR, RPAR, IER)
+ *       DIMENSION YLOC(*), IPAR(*), RPAR(*)
+ * which is to perform all interprocess communication necessary to
+ * evaluate the approximate right-hand side function g described above.
+ * This function takes as input the local vector length NLOC, the
+ * independent variable value T = t, and the local real dependent
+ * variable array YLOC.  It is expected to save communicated data in 
+ * work space defined by the user, and made available to CVLOCFN.
+ * Each call to the FCVCOMMF is preceded by a call to FCVFUN with the same
+ * (t,y) arguments.  Thus FCVCOMMF can omit any communications done by 
+ * FCVFUN if relevant to the evaluation of g.
+ * On return, set IER = 0 if successful, IER > 0 if a recoverable error occurred,
+ * and IER < 0 if an unrecoverable error ocurred.
+ * 
+ * (3) Optional user-supplied Jacobian-vector product routine: FCVJTIMES
+ * As an option, the user may supply a routine that computes the product
+ * of the system Jacobian J = df/dy and a given vector v.  If supplied, it
+ * must have the following form:
+ *       SUBROUTINE FCVJTIMES (V, FJV, T, Y, FY, EWT, IPAR, RPAR, WORK, IER)
+ *       DIMENSION V(*), FJV(*), Y(*), FY(*), EWT(*), IPAR(*), RPAR(*), WORK(*)
+ * Typically this routine will use only NEQ, T, Y, V, and FJV.  It must
+ * compute the product vector Jv, where the vector v is stored in V, and store
+ * the product in FJV.  On return, set IER = 0 if FCVJTIMES was successful,
+ * and nonzero otherwise.
+ * 
+ * (4) Initialization:  FNVINITP, FCVMALLOC, FCVBBDINIT.
+ * 
+ * (4.1) To initialize the parallel vector specification, the user must make 
+ * the following call:
+ *        CALL FNVINITP (NLOCAL, NGLOBAL, IER)
+ * The arguments are:
+ * NLOCAL  = local size of vectors on this processor
+ * NGLOBAL = the system size, and the global size of vectors (the sum 
+ *           of all values of NLOCAL)
+ * IER     = return completion flag. Values are 0 = success, -1 = failure.
+ * 
+ * Note: If MPI was initialized by the user, the communicator must be
+ * set to MPI_COMM_WORLD.  If not, this routine initializes MPI and sets
+ * the communicator equal to MPI_COMM_WORLD.
+ * 
+ * (4.2) To set various problem and solution parameters and allocate
+ * internal memory for CVODE, make the following call:
+ *       CALL FCVMALLOC(T0, Y0, METH, ITMETH, IATOL, RTOL, ATOL,
+ *      1               IOUT, ROUT, IPAR, RPAR, IER)
+ * The arguments are:
+ * T0     = initial value of t
+ * Y0     = array of initial conditions
+ * METH   = basic integration method: 1 = Adams (nonstiff), 2 = BDF (stiff)
+ * ITMETH = nonlinear iteration method: 1 = functional iteration, 2 = Newton iter.
+ * IATOL  = type for absolute tolerance ATOL: 1 = scalar, 2 = array
+ * RTOL   = relative tolerance (scalar)
+ * ATOL   = absolute tolerance (scalar or array)
+ * IOUT   = array of length 21 for integer optional outputs
+ *          (declare as INTEGER*4 or INTEGER*8 according to C type long int)
+ * ROUT   = array of length 6 for real optional outputs
+ * IPAR   = array with user integer data
+ *          (declare as INTEGER*4 or INTEGER*8 according to C type long int)
+ * RPAR   = array with user real data
+ * IER    = return completion flag.  Values are 0 = success, and -1 = failure.
+ *          See printed message for details in case of failure.
+ * 
+ * (4.3) Attach one of the 3 SPILS linear solvers. Make one of the 
+ * following calls (see fcvode.h for more details).
+ *       CALL FCVSPGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)
+ *       CALL FCVSPBCG(IPRETYPE, MAXL, DELT, IER)
+ *       CALL FCVSPTFQMR(IPRETYPE, MAXL, DELT, IER)
+ *    
+ * (4.4) To allocate memory and initialize data associated with the CVBBDPRE
+ * preconditioner, make the following call:
+ *       CALL FCVBBDINIT(NLOCAL, MUDQ, MLDQ, MU, ML, DQRELY, IER)
+ * 
+ * The arguments are:
+ * NLOCAL    = local size of vectors on this processor
+ * MUDQ,MLDQ = upper and lower half-bandwidths to be used in the computation
+ *             of the local Jacobian blocks by difference quotients.
+ *             These may be smaller than the true half-bandwidths of the
+ *             Jacobian of the local block of g, when smaller values may
+ *             provide greater efficiency.
+ * MU, ML    = upper and lower half-bandwidths of the band matrix that 
+ *             is retained as an approximation of the local Jacobian block.
+ *             These may be smaller than MUDQ and MLDQ.
+ * DQRELY    = relative increment factor in y for difference quotients
+ *             (optional). 0.0 indicates the default, sqrt(unit roundoff).
+ * IER       = return completion flag: IER=0: success, IER<0: an error occurred
+ *
+ * (4.5) To specify whether the Krylov linear solver (GMRES, Bi-CGSTAB, or TFQMR)
+ * should use the supplied FCVJTIMES or the internal finite difference approximation, 
+ * make the call
+ *        CALL FCVSPILSSETJAC(FLAG, IER)
+ * where FLAG=0 for finite differences approximation or
+ *       FLAG=1 to use the supplied routine FCVJTIMES
+ * 
+ * (5) Re-initialization: FCVREINIT, FCVBBDREINIT
+ * If a sequence of problems of the same size is being solved using the SPGMR, SPBCG,
+ * SPTFQMR linear solver in combination with the CVBBDPRE preconditioner, then the
+ * CVODE package can be reinitialized for the second and subsequent problems
+ * so as to avoid further memory allocation.  First, in place of the call
+ * to FCVMALLOC, make the following call:
+ *       CALL FCVREINIT(T0, Y0, IATOL, RTOL, ATOL, IER)
+ * The arguments have the same names and meanings as those of FCVMALLOC, except
+ * that METH and ITMETH have been omitted from the argument list (being unchanged
+ * for the new problem).  FCVREINIT performs the same initializations as
+ * FCVMALLOC, but does no memory allocation, using instead the existing
+ * internal memory created by the previous FCVMALLOC call.
+ *
+ * If there is a change in any of the linear solver arguments, then
+ * a call to FCVSPGMR, FCVSPBCG, or FCVSPTFQMR must also be made;
+ * in this case the linear solver memory is reallocated. 
+ *
+ * Following the call to FCVREINIT, a call to FCVBBDINIT may or may not be needed.
+ * If the input arguments are the same, no FCVBBDINIT call is needed.
+ * If there is a change in input arguments, then make the call
+ *      CALL FCVBBDREINIT(NLOCAL, MUDQ, MLDQ, DQRELY, IER)
+ * This reinitializes the BBD preconditioner, but without reallocating its memory.
+ * The arguments of the have the same names and meanings as FCVBBDINIT.  
+ * If the value of MU or ML is being changed, then a call to FCVBBDINIT must
+ * be made.
+ * 
+ * (6) The integrator: FCVODE
+ * Carrying out the integration is accomplished by making calls as follows:
+ *       CALL FCVODE (TOUT, T, Y, ITASK, IER)
+ * The arguments are:
+ * TOUT  = next value of t at which a solution is desired (input)
+ * T     = value of t reached by the solver on output
+ * Y     = array containing the computed solution on output
+ * ITASK = task indicator: 
+ *         1 = normal mode (overshoot TOUT and interpolate)
+ *         2 = one-step mode (return after each internal step taken)
+ *         3 = normal mode with TSTOP check
+ *         4 = one-step mode with TSTOP check
+ * IER   = completion flag: 0 = success, 1 = TSTOP return, 2 = root return,
+ *         negative values are various failure modes (see CVODE User Guide).
+ * The current values of the optional outputs are available in IOUT and ROUT.
+ * 
+ * (7) Optional outputs: FCVBBDOPT
+ * Optional outputs specific to the SP* solver are LRW, LIW, LFLG, NFELS, NJTV,
+ * NPE, NPS, NLI, NCFL, stored in IOUT(13)...IOUT(21).
+ * To obtain the optional outputs associated with the CVBBDPRE module, make
+ * the following call:
+ *       CALL FCVBBDOPT (LENRWBBD, LENIWBBD, NGEBBD)
+ * The arguments returned are:
+ * LENRWBBD = length of real preconditioner work space, in realtype words.
+ *            This size is local to the current processor.
+ * LENIWBBD = length of integer preconditioner work space, in integer words.
+ *            This size is local to the current processor.
+ * NGEBBD   = number of g(t,y) evaluations (calls to CVLOCFN) so far.
+ * 
+ * (8) Computing solution derivatives: FCVDKY
+ * To obtain a derivative of the solution (optionally), of order up to
+ * the current method order, make the following call:
+ *       CALL FCVDKY (T, K, DKY)
+ * The arguments are:
+ * T   = value of t at which solution derivative is desired
+ * K   = derivative order (0 .le. K .le. QU)
+ * DKY = array containing computed K-th derivative of y on return
+ * 
+ * (9) Memory freeing: FCVFREE
+ *   To the free the internal memory created by the calls to FNVINITP,
+ * FCVMALLOC, and FCVBBDINIT, make the following call:
+ *       CALL FCVFREE
+ *
+ * ==============================================================================
+ */
+
+#ifndef _FCVBBD_H
+#define _FCVBBD_H
+
+/* header files  */
+#include <sundials/sundials_nvector.h> /* definition of type N_Vector */
+#include <sundials/sundials_types.h>   /* definition of type realtype */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Definitions of interface function names */
+
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FCV_BBDINIT    SUNDIALS_F77_FUNC(fcvbbdinit, FCVBBDINIT)
+#define FCV_BBDREINIT  SUNDIALS_F77_FUNC(fcvbbdreinit, FCVBBDREINIT)
+#define FCV_BBDOPT     SUNDIALS_F77_FUNC(fcvbbdopt, FCVBBDOPT)
+#define FCV_GLOCFN     SUNDIALS_F77_FUNC(fcvglocfn, FCVGLOCFN)
+#define FCV_COMMFN     SUNDIALS_F77_FUNC(fcvcommfn, FCVCOMMFN)
+
+#else
+
+#define FCV_BBDINIT    fcvbbdinit_
+#define FCV_BBDREINIT  fcvbbdreinit_
+#define FCV_BBDOPT     fcvbbdopt_
+#define FCV_GLOCFN     fcvglocfn_
+#define FCV_COMMFN     fcvcommfn_
+
+#endif
+
+/* Prototypes of exported functions */
+
+void FCV_BBDINIT(long int *Nloc, long int *mudq, long int *mldq, long int *mu, long int *ml,
+                 realtype* dqrely, int *ier);
+void FCV_BBDREINIT(long int *Nloc, long int *mudq, long int *mldq, realtype* dqrely, int *ier);
+void FCV_BBDOPT(long int *lenrwbbd, long int *leniwbbd, long int *ngebbd);
+
+/* Prototypes: Functions Called by the CVBBDPRE Module */
+
+int FCVgloc(long int Nloc, realtype t, N_Vector yloc, N_Vector gloc, void *user_data);
+
+int FCVcfn(long int Nloc, realtype t, N_Vector y, void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvode/fcmix/fcvbp.c b/src/cvode/fcmix/fcvbp.c
new file mode 100644
index 0000000..204c129
--- /dev/null
+++ b/src/cvode/fcmix/fcvbp.c
@@ -0,0 +1,59 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This module contains the routines necessary to interface with the
+ * CVBANDPRE module and user-supplied Fortran routines.
+ * The routines here call the generically named routines and provide 
+ * a standard interface to the C code of the CVBANDPRE package.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"                 /* actual fn. names, prototypes and global vars.*/
+#include "fcvbp.h"                  /* prototypes of interfaces to CVBANDPRE        */
+
+#include <cvode/cvode_bandpre.h>    /* prototypes of CVBANDPRE functions and macros */
+#include <cvode/cvode_sptfqmr.h>    /* prototypes of CVSPTFQMR interface routines   */
+#include <cvode/cvode_spbcgs.h>     /* prototypes of CVSPBCG interface routines     */
+#include <cvode/cvode_spgmr.h>      /* prototypes of CVSPGMR interface routines     */
+
+/***************************************************************************/
+
+void FCV_BPINIT(long int *N, long int *mu, long int *ml, int *ier)
+{
+  /* 
+     Call CVBandPrecInit to initialize the CVBANDPRE module:
+     N      is the vector size
+     mu, ml are the half-bandwidths of the retained preconditioner blocks
+  */
+
+  *ier = CVBandPrecInit(CV_cvodemem, *N, *mu, *ml);
+
+  return;
+}
+
+/***************************************************************************/
+
+/* C function FCVBPOPT to access optional outputs from CVBANDPRE_Data */
+
+void FCV_BPOPT(long int *lenrwbp, long int *leniwbp, long int *nfebp)
+{
+  CVBandPrecGetWorkSpace(CV_cvodemem, lenrwbp, leniwbp);
+  CVBandPrecGetNumRhsEvals(CV_cvodemem, nfebp);
+}
diff --git a/src/cvode/fcmix/fcvbp.h b/src/cvode/fcmix/fcvbp.h
new file mode 100644
index 0000000..51d5793
--- /dev/null
+++ b/src/cvode/fcmix/fcvbp.h
@@ -0,0 +1,248 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the Fortran interface include file for the BAND
+ * preconditioner (CVBANDPRE).
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * ==============================================================================
+ *
+ *                  FCVBP Interface Package
+ *
+ * The FCVBP Interface Package is a package of C functions which,
+ * together with the FCVODE Interface Package, support the use of the
+ * CVODE solver (serial version) with the CVBANDPRE preconditioner module,
+ * for the solution of ODE systems in a mixed Fortran/C setting.  The
+ * combination of CVODE and CVBANDPRE solves systems dy/dt = f(t,y) with the
+ * SPGMR (scaled preconditioned GMRES), SPTFQMR (scaled preconditioned TFQMR),
+ *  or SPBCG (scaled preconditioned Bi-CGSTAB) method for the linear systems
+ * that arise, and with a banded difference quotient Jacobian-based preconditioner.
+ * 
+ * The user-callable functions in this package, with the corresponding
+ * CVODE and CVBBDPRE functions, are as follows: 
+ *   FCVBPINIT    interfaces to CVBandPrecInit
+ *   FCVBPOPT     accesses optional outputs
+ * 
+ * In addition to the Fortran right-hand side function FCVFUN, the
+ * user may (optionally) supply a routine FCVJTIMES which is called by 
+ * the interface function FCVJtimes of type CVSpilsJtimesFn.
+ * (The names of all user-supplied routines here are fixed, in order to
+ * maximize portability for the resulting mixed-language program.)
+ * 
+ * Important note on portability.
+ * In this package, the names of the interface functions, and the names of
+ * the Fortran user routines called by them, appear as dummy names
+ * which are mapped to actual values by a series of definitions in the
+ * header file fcvbp.h.
+ * 
+ * ==============================================================================
+ * 
+ *               Usage of the FCVODE/FCVBP Interface Packages
+ * 
+ * The usage of the combined interface packages FCVODE and FCVBP requires
+ * calls to seven to ten interface functions, and one or two user-supplied
+ * routines which define the problem to be solved and indirectly define
+ * the preconditioner.  These function calls and user routines are
+ * summarized separately below.
+ * 
+ * Some details are omitted, and the user is referred to the CVODE user document 
+ * for more complete information.
+ * 
+ * (1) User-supplied right-hand side routine: FCVFUN
+ * The user must in all cases supply the following Fortran routine
+ *       SUBROUTINE FCVFUN (T, Y, YDOT, IPAR, RPAR, IER)
+ *       DIMENSION Y(*), YDOT(*), IPAR(*), RPAR(*)
+ * It must set the YDOT array to f(t,y), the right-hand side of the ODE
+ * system, as function of T = t and the array Y = y.  Here Y and YDOT
+ * are distributed vectors.
+ * 
+ * (2) Optional user-supplied Jacobian-vector product routine: FCVJTIMES
+ * As an option, the user may supply a routine that computes the product
+ * of the system Jacobian J = df/dy and a given vector v.  If supplied, it
+ * must have the following form:
+ *       SUBROUTINE FCVJTIMES (V, FJV, T, Y, FY, EWT, IPAR, RPAR, WORK, IER)
+ *       DIMENSION V(*), FJV(*), Y(*), FY(*), EWT(*), IPAR(*), RPAR(*), WORK(*)
+ * Typically this routine will use only NEQ, T, Y, V, and FJV.  It must
+ * compute the product vector Jv, where the vector v is stored in V, and store
+ * the product in FJV.  On return, set IER = 0 if FCVJTIMES was successful,
+ * and nonzero otherwise.
+ * 
+ * (3) Initialization:  FNVINITS, FCVMALLOC, FCVBPINIT.
+ * 
+ * (3.1) To initialize the serial vector specification, the user must make 
+ * the following call:
+ *        CALL FNVINITS(NEQ, IER)
+ * where NEQ is the problem size and IER is a return completion flag.
+ * Possible values for IER are 0 = success, -1 = failure.
+ * 
+ * (3.2) To set various problem and solution parameters and allocate
+ * internal memory for CVODE, make the following call:
+ *       CALL FCVMALLOC(T0, Y0, METH, ITMETH, IATOL, RTOL, ATOL,
+ *      1               IOUT, ROUT, IPAR, RPAR, IER)
+ * The arguments are:
+ * T0     = initial value of t
+ * Y0     = array of initial conditions
+ * METH   = basic integration method: 1 = Adams (nonstiff), 2 = BDF (stiff)
+ * ITMETH = nonlinear iteration method: 1 = functional iteration, 2 = Newton iter.
+ * IATOL  = type for absolute tolerance ATOL: 1 = scalar, 2 = array
+ * RTOL   = relative tolerance (scalar)
+ * ATOL   = absolute tolerance (scalar or array)
+ * IOUT   = array of length 21 for integer optional outputs
+ *          (declare as INTEGER*4 or INTEGER*8 according to C type long int)
+ * ROUT   = array of length 6 for real optional outputs
+ * IPAR   = array with user integer data
+ *          (declare as INTEGER*4 or INTEGER*8 according to C type long int)
+ * RPAR   = array with user real data
+ * IER    = return completion flag.  Values are 0 = success, and -1 = failure.
+ *          See printed message for details in case of failure.
+ * 
+ * (3.3) To allocate memory and initialize data associated with the CVBANDPRE
+ * preconditioner, make the following call:
+ *       CALL FCVBPINIT(NEQ, MU, ML, IER)
+ * The arguments are:
+ * NEQ       = problem size
+ * MU, ML    = upper and lower half-bandwidths of the band matrix that 
+ *             is retained as an approximation of the Jacobian.
+ * IER       = return completion flag: IER=0: success, IER<0: and error occurred
+ *
+ * (3.4A) To specify the SPGMR linear solver with the CVBANDPRE preconditioner,
+ * make the following call
+ *       CALL FCVSPGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)
+ * The arguments are:
+ * IPRETYPE  = preconditioner type: 
+ *            0 = none
+ *            1 = left only
+ *            2 = right only
+ *            3 = both sides.
+ * IGSTYPE   = Gram-schmidt process type: 0 = modified G-S, 1 = classical G-S.
+ * MAXL      = maximum Krylov subspace dimension; 0 indicates default.
+ * DELT      = linear convergence tolerance factor; 0.0 indicates default.
+ * IER       = return completion flag: IER=0: success, IER<0: ans error occurred
+ *
+ * (3.4B) To specify the SPBCG linear solver with the CVBANDPRE preconditioner,
+ * make the following call
+ *       CALL FCVSPBCG(IPRETYPE, MAXL, DELT, IER)
+ * The arguments are:
+ * IPRETYPE  = preconditioner type: 
+ *            0 = none
+ *            1 = left only
+ *            2 = right only
+ *            3 = both sides.
+ * MAXL      = maximum Krylov subspace dimension; 0 indicates default.
+ * DELT      = linear convergence tolerance factor; 0.0 indicates default.
+ * IER       = return completion flag: IER=0: success, IER<0: ans error occurred
+ *
+ * (3.4C) To specify the SPTFQMR linear solver with the CVBANDPRE preconditioner,
+ * make the following call
+ *       CALL FCVSPTFQMR(IPRETYPE, MAXL, DELT, IER)
+ * The arguments are:
+ * IPRETYPE  = preconditioner type: 
+ *            0 = none
+ *            1 = left only
+ *            2 = right only
+ *            3 = both sides.
+ * MAXL      = maximum Krylov subspace dimension; 0 indicates default.
+ * DELT      = linear convergence tolerance factor; 0.0 indicates default.
+ * IER       = return completion flag: IER=0: success, IER<0: ans error occurred
+ *
+ * (3.5) To specify whether the Krylov linear solver (GMRES, Bi-CGSTAB, or TFQMR) 
+ * should use the supplied FCVJTIMES or the internal finite difference approximation, 
+ * make the call
+ *        CALL FCVSPILSSETJAC(FLAG, IER)
+ * where FLAG=0 for finite differences approxaimtion or
+ *       FLAG=1 to use the supplied routine FCVJTIMES
+ *
+ * (4) The integrator: FCVODE
+ * Carrying out the integration is accomplished by making calls as follows:
+ *       CALL FCVODE (TOUT, T, Y, ITASK, IER)
+ * The arguments are:
+ * TOUT  = next value of t at which a solution is desired (input)
+ * T     = value of t reached by the solver on output
+ * Y     = array containing the computed solution on output
+ * ITASK = task indicator: 1 = normal mode (overshoot TOUT and interpolate);
+ *         2 = one-step mode (return after each internal step taken);
+ *         3 = normal mode with TSTOP; 4 = one-step mode with TSTOP.
+ * IER   = completion flag: 0 = success, 1 = TSTOP return, 2 = root return,
+ *         negative values are various failure modes (see CVODE User Guide).
+ * The current values of the optional outputs are available in IOUT and ROUT.
+ * 
+ * (5) Optional outputs: FCVBPOPT
+ * Optional outputs specific to the SP* solver are LRW, LIW, LFLG, NFELS, NJTV,
+ * NPE, NPS, NLI, NCFL, stored in IOUT(13)...IOUT(21).
+ * To obtain the optional outputs associated with the CVBANDPRE module, make
+ * the following call:
+ *       CALL FCVBPOPT(LENRWBP, LENIWBP, NFEBP)
+ * The arguments returned are:
+ * LENRWBP = length of real preconditioner work space, in realtype words.
+ *           This size is local to the current processor.
+ * LENIWBP = length of integer preconditioner work space, in integer words.
+ *           This size is local to the current processor.
+ * NFEBP   = number of f(t,y) evaluations for CVBANDPRE
+ * 
+ * (6) Computing solution derivatives: FCVDKY
+ * To obtain a derivative of the solution (optionally), of order up to
+ * the current method order, make the following call:
+ *       CALL FCVDKY (T, K, DKY)
+ * The arguments are:
+ * T   = value of t at which solution derivative is desired
+ * K   = derivative order (0 .le. K .le. QU)
+ * DKY = array containing computed K-th derivative of y on return
+ * 
+ * (7) Memory freeing: FCVFREE
+ *   To the free the internal memory created by the calls to FNVINITS,
+ * FCVMALLOC, and FCVBPINIT, make the following call:
+ *       CALL FCVFREE
+ * 
+ * ==============================================================================
+ */
+
+#ifndef _FCVBP_H
+#define _FCVBP_H
+
+/* header files  */
+#include <sundials/sundials_nvector.h> /* definition of type N_Vector */
+#include <sundials/sundials_types.h>   /* definition of type realtype */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Definitions of interface function names */
+
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FCV_BPINIT    SUNDIALS_F77_FUNC(fcvbpinit, FCVBPINIT)
+#define FCV_BPOPT     SUNDIALS_F77_FUNC(fcvbpopt, FCVBPOPT)
+
+#else
+
+#define FCV_BPINIT    fcvbpinit_
+#define FCV_BPOPT     fcvbpopt_
+
+#endif
+
+/* Prototypes of exported function */
+void FCV_BPINIT(long int *N, long int *mu, long int *ml, int *ier);
+void FCV_BPOPT(long int *lenrwbp, long int *leniwbp, long int *nfebp);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvode/fcmix/fcvdense.c b/src/cvode/fcmix/fcvdense.c
new file mode 100644
index 0000000..70f8609
--- /dev/null
+++ b/src/cvode/fcmix/fcvdense.c
@@ -0,0 +1,95 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4294 $
+ * $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for CVODE/CVDENSE, for the case
+ * of a user-supplied Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"     /* actual fn. names, prototypes and global vars.*/
+#include "cvode_impl.h" /* definition of CVodeMem type                  */
+
+#include <cvode/cvode_dense.h>
+
+/***************************************************************************/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+  extern void FCV_DJAC(long int*,                        /* N          */
+                       realtype*, realtype*, realtype*,  /* T, Y, FY   */
+                       realtype*,                        /* DJAC       */
+                       realtype*,                        /* H          */ 
+                       long int*, realtype*,             /* IPAR, RPAR */
+                       realtype*, realtype*, realtype*,  /* V1, V2, V3 */
+                       int *ier);                        /* IER        */
+#ifdef __cplusplus
+}
+#endif
+
+/***************************************************************************/
+
+void FCV_DENSESETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = CVDlsSetDenseJacFn(CV_cvodemem, NULL);
+  } else {
+    *ier = CVDlsSetDenseJacFn(CV_cvodemem, FCVDenseJac);
+  }
+}
+
+/***************************************************************************/
+
+/* C function CVDenseJac interfaces between CVODE and a Fortran subroutine
+   FCVDJAC for solution of a linear system with dense Jacobian approximation.
+   Addresses of arguments are passed to FCVDJAC, using the macro 
+   DENSE_COL from DENSE and the routine N_VGetArrayPointer from NVECTOR.
+   Auxiliary data is assumed to be communicated by Common. */
+
+int FCVDenseJac(long int N, realtype t, 
+                N_Vector y, N_Vector fy, 
+                DlsMat J, void *user_data,
+                N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *fydata, *jacdata, *v1data, *v2data, *v3data;
+  realtype h;
+  FCVUserData CV_userdata;
+
+  CVodeGetLastStep(CV_cvodemem, &h);
+
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+
+  jacdata = DENSE_COL(J,0);
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_DJAC(&N, &t, ydata, fydata, jacdata, &h, 
+           CV_userdata->ipar, CV_userdata->rpar, v1data, v2data, v3data, &ier); 
+
+  return(ier);
+}
+
diff --git a/src/cvode/fcmix/fcvewt.c b/src/cvode/fcmix/fcvewt.c
new file mode 100644
index 0000000..e18ed81
--- /dev/null
+++ b/src/cvode/fcmix/fcvewt.c
@@ -0,0 +1,76 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4294 $
+ * $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for CVODE, for the case of a 
+ * user-supplied error weight calculation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"           /* actual fn. names, prototypes and global vars.  */
+#include "cvode_impl.h"       /* definition of CVodeMem type                    */
+
+/***************************************************************************/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+  extern void FCV_EWT(realtype*, realtype*,  /* Y, EWT */ 
+                      long int*, realtype*,  /* IPAR, RPAR */
+                      int*);                 /* IER */
+#ifdef __cplusplus
+}
+#endif
+
+/***************************************************************************/
+
+/* 
+ * User-callable function to interface to CVodeSetEwtFn.
+ */
+
+void FCV_EWTSET(int *flag, int *ier)
+{
+  if (*flag != 0) {
+    *ier = CVodeWFtolerances(CV_cvodemem, FCVEwtSet);
+  }
+}
+
+/***************************************************************************/
+
+/* 
+ * C function to interface between CVODE and a Fortran subroutine FCVEWT.
+ */
+
+int FCVEwtSet(N_Vector y, N_Vector ewt, void *user_data)
+{
+  int ier = 0;
+  realtype *ydata, *ewtdata;
+  FCVUserData CV_userdata;
+
+  ydata  = N_VGetArrayPointer(y);
+  ewtdata = N_VGetArrayPointer(ewt);
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_EWT(ydata, ewtdata, CV_userdata->ipar, CV_userdata->rpar, &ier);
+
+  return(ier);
+}
diff --git a/src/cvode/fcmix/fcvjtimes.c b/src/cvode/fcmix/fcvjtimes.c
new file mode 100644
index 0000000..0ad26d8
--- /dev/null
+++ b/src/cvode/fcmix/fcvjtimes.c
@@ -0,0 +1,97 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4294 $
+ * $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh, Radu Serban and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * The C function FCVJtimes is to interface between the
+ * CVSP* module and the user-supplied Jacobian-vector
+ * product routine FCVJTIMES. Note the use of the generic name
+ * FCV_JTIMES below.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"     /* actual fn. names, prototypes and global vars.*/
+#include "cvode_impl.h" /* definition of CVodeMem type                  */
+
+#include <cvode/cvode_spils.h>
+
+/***************************************************************************/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FCV_JTIMES(realtype*, realtype*,            /* V, JV      */
+                         realtype*, realtype*, realtype*, /* T, Y, FY   */
+                         realtype*,                       /* H          */
+                         long int*, realtype*,            /* IPAR, RPAR */
+                         realtype*,                       /* WRK        */
+                         int*);                           /* IER        */
+
+#ifdef __cplusplus
+}
+#endif
+
+/***************************************************************************/
+
+void FCV_SPILSSETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = CVSpilsSetJacTimesVecFn(CV_cvodemem, NULL);
+  } else {
+    *ier = CVSpilsSetJacTimesVecFn(CV_cvodemem, FCVJtimes);
+  }
+}
+
+/***************************************************************************/
+
+/* C function  FCVJtimes to interface between CVODE and  user-supplied
+   Fortran routine FCVJTIMES for Jacobian * vector product.
+   Addresses of v, Jv, t, y, fy, h, and work are passed to FCVJTIMES,
+   using the routine N_VGetArrayPointer from NVECTOR.
+   A return flag ier from FCVJTIMES is returned by FCVJtimes.
+   Auxiliary data is assumed to be communicated by common blocks. */
+
+int FCVJtimes(N_Vector v, N_Vector Jv, realtype t, 
+              N_Vector y, N_Vector fy,
+              void *user_data, N_Vector work)
+{
+  realtype *vdata, *Jvdata, *ydata, *fydata, *wkdata;
+  realtype h;
+  FCVUserData CV_userdata;
+
+  int ier = 0;
+  
+  CVodeGetLastStep(CV_cvodemem, &h);
+
+  vdata   = N_VGetArrayPointer(v);
+  Jvdata  = N_VGetArrayPointer(Jv);
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  wkdata  = N_VGetArrayPointer(work);
+
+  CV_userdata = (FCVUserData) user_data;
+ 
+  FCV_JTIMES (vdata, Jvdata, &t, ydata, fydata, &h, 
+              CV_userdata->ipar, CV_userdata->rpar, wkdata, &ier);
+
+  return(ier);
+}
diff --git a/src/cvode/fcmix/fcvklu.c b/src/cvode/fcmix/fcvklu.c
new file mode 100644
index 0000000..ec6c77d
--- /dev/null
+++ b/src/cvode/fcmix/fcvklu.c
@@ -0,0 +1,52 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4654 $
+ * $Date: 2016-02-17 20:12:58 -0800 (Wed, 17 Feb 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2015, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the Fortran interface to
+ * the CVKLU solver. See fcvode.h for usage.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fcvode.h"
+#include "cvode_impl.h"
+#include <cvode/cvode_klu.h>
+ 
+/*
+ * ----------------------------------------------------------------
+ * Function : FCV_KLU
+ * ----------------------------------------------------------------
+ */
+
+void FCV_KLU(int *neq, int *nnz, int *sparsetype, int *ordering, int *ier)
+{
+  *ier = CVKLU(CV_cvodemem, *neq, *nnz, *sparsetype);
+  CVKLUSetOrdering(CV_cvodemem, *ordering);
+  CV_ls = CV_LS_KLU;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FCV_KLUReinit
+ * ----------------------------------------------------------------
+ */
+
+void FCV_KLUREINIT(int *neq, int *nnz, int *reinit_type, int *ier)
+{
+  *ier = CVKLUReInit(CV_cvodemem, *neq, *nnz, *reinit_type);
+}
+
diff --git a/src/cvode/fcmix/fcvlapack.c b/src/cvode/fcmix/fcvlapack.c
new file mode 100644
index 0000000..af265d9
--- /dev/null
+++ b/src/cvode/fcmix/fcvlapack.c
@@ -0,0 +1,57 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for CVODE/CVLAPACK
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"     /* actual fn. names, prototypes and global vars.*/
+#include "cvode_impl.h" /* definition of CVodeMem type                  */
+
+#include <cvode/cvode_lapack.h>
+
+/***************************************************************************/
+
+void FCV_LAPACKDENSE(int *neq, int *ier)
+{
+  /* neq  is the problem size */
+
+  *ier = CVLapackDense(CV_cvodemem, *neq);
+
+  CV_ls = CV_LS_LAPACKDENSE;
+}
+
+/***************************************************************************/
+
+void FCV_LAPACKBAND(int *neq, int *mupper, int *mlower, int *ier)
+{
+  /* 
+     neq        is the problem size
+     mupper     is the upper bandwidth
+     mlower     is the lower bandwidth 
+  */
+
+  *ier = CVLapackBand(CV_cvodemem, *neq, *mupper, *mlower);
+
+  CV_ls = CV_LS_LAPACKBAND;
+}
+
+/***************************************************************************/
+
diff --git a/src/cvode/fcmix/fcvlapband.c b/src/cvode/fcmix/fcvlapband.c
new file mode 100644
index 0000000..476e94e
--- /dev/null
+++ b/src/cvode/fcmix/fcvlapband.c
@@ -0,0 +1,103 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4294 $
+ * $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for CVODE/CVLAPACK, for the case
+ * of a user-supplied band Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"     /* actual fn. names, prototypes and global vars.*/
+#include "cvode_impl.h" /* definition of CVodeMem type                  */
+
+#include <cvode/cvode_lapack.h>
+
+/***************************************************************************/
+
+/* Prototype of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FCV_BJAC(long int*, long int*, long int*, long int*,    /* N,MU,ML,EBAND */
+                       realtype*, realtype*, realtype*,  /* T, Y, FY         */
+                       realtype*,                        /* LBJAC            */
+                       realtype*,                        /* H                */
+                       long int*, realtype*,             /* IPAR, RPAR       */
+                       realtype*, realtype*, realtype*,  /* V1, V2, V3       */
+                       int*);                            /* IER              */
+
+#ifdef __cplusplus
+}
+#endif
+
+/***************************************************************************/
+
+void FCV_LAPACKBANDSETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = CVDlsSetBandJacFn(CV_cvodemem, NULL);
+  } else {
+    *ier = CVDlsSetBandJacFn(CV_cvodemem, FCVLapackBandJac);
+  }
+}
+
+/***************************************************************************/
+
+/* The C function FCVLapackBandJac interfaces between CVODE and a 
+ * Fortran subroutine FCVBJAC for the solution of a linear system using
+ * Lapack with band Jacobian approximation.
+ * Addresses of arguments are passed to FCVBJAC, using the macro 
+ * BAND_COL and the routine N_VGetArrayPointer from NVECTOR.
+ * The address passed for J is that of the element in column 0 with row 
+ * index -mupper.  An extended bandwith equal to (J->smu) + mlower + 1 is
+ * passed as the column dimension of the corresponding array.
+ * Auxiliary data is assumed to be communicated by Common. 
+ */
+
+int FCVLapackBandJac(long int N, long int mupper, long int mlower,
+                     realtype t, N_Vector y, N_Vector fy, 
+                     DlsMat J, void *user_data,
+                     N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *fydata, *jacdata, *v1data, *v2data, *v3data;
+  realtype h;
+  long int eband;
+  FCVUserData CV_userdata;
+
+  CVodeGetLastStep(CV_cvodemem, &h);
+
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+
+  eband = (J->s_mu) + mlower + 1;
+  jacdata = BAND_COL(J,0) - mupper;
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_BJAC(&N, &mupper, &mlower, &eband, &t, ydata, fydata, jacdata, &h,
+           CV_userdata->ipar, CV_userdata->rpar, v1data, v2data, v3data, &ier);
+
+  return(ier);
+}
diff --git a/src/cvode/fcmix/fcvlapdense.c b/src/cvode/fcmix/fcvlapdense.c
new file mode 100644
index 0000000..9c72630
--- /dev/null
+++ b/src/cvode/fcmix/fcvlapdense.c
@@ -0,0 +1,97 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4294 $
+ * $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for CVODE/CVLAPACK, for the case
+ * of a user-supplied dense Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"     /* actual fn. names, prototypes and global vars.*/
+#include "cvode_impl.h" /* definition of CVodeMem type                  */
+
+#include <cvode/cvode_lapack.h>
+
+/***************************************************************************/
+
+/* Prototype of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+  extern void FCV_DJAC(long int*,                        /* N          */
+                       realtype*, realtype*, realtype*,  /* T, Y, FY   */
+                       realtype*,                        /* LDJAC      */
+                       realtype*,                        /* H          */ 
+                       long int*, realtype*,             /* IPAR, RPAR */
+                       realtype*, realtype*, realtype*,  /* V1, V2, V3 */
+                       int *ier);                        /* IER        */
+#ifdef __cplusplus
+}
+#endif
+
+/***************************************************************************/
+
+void FCV_LAPACKDENSESETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = CVDlsSetDenseJacFn(CV_cvodemem, NULL);
+  } else {
+    *ier = CVDlsSetDenseJacFn(CV_cvodemem, FCVLapackDenseJac);
+  }
+}
+
+/***************************************************************************/
+
+/* The C function FCVLapackDenseJac interfaces between CVODE and a 
+ * Fortran subroutine FCVDJAC for solution of a linear system using 
+ * Lapack with dense Jacobian approximation.
+ * Addresses of arguments are passed to FCVDJAC, using the macro 
+ * DENSE_COL and the routine N_VGetArrayPointer from NVECTOR.
+ * Auxiliary data is assumed to be communicated by Common. 
+ */
+
+int FCVLapackDenseJac(long int N, realtype t,
+                      N_Vector y, N_Vector fy, 
+                      DlsMat J, void *user_data,
+                      N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *fydata, *jacdata, *v1data, *v2data, *v3data;
+  realtype h;
+  FCVUserData CV_userdata;
+
+  CVodeGetLastStep(CV_cvodemem, &h);
+
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+
+  jacdata = DENSE_COL(J,0);
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_DJAC(&N, &t, ydata, fydata, jacdata, &h, 
+           CV_userdata->ipar, CV_userdata->rpar, v1data, v2data, v3data, &ier); 
+
+  return(ier);
+}
+
diff --git a/src/cvode/fcmix/fcvode.c b/src/cvode/fcmix/fcvode.c
new file mode 100644
index 0000000..c8c2dca
--- /dev/null
+++ b/src/cvode/fcmix/fcvode.c
@@ -0,0 +1,618 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4474 $
+ * $Date: 2015-04-03 10:14:53 -0700 (Fri, 03 Apr 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh, Radu Serban and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the Fortran interface to
+ * the CVODE package.  See fcvode.h for usage.
+ * NOTE: some routines are necessarily stored elsewhere to avoid
+ * linking problems.  Therefore, see also fcvpreco.c, fcvpsol.c,
+ * and fcvjtimes.c for all the options available.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "fcvode.h"                    /* actual function names, prototypes, global vars.*/ 
+#include "cvode_impl.h"                /* definition of CVodeMem type                    */
+
+#include <cvode/cvode_band.h>          /* prototypes for CVBAND interface routines       */
+#include <cvode/cvode_dense.h>         /* prototypes for CVDENSE interface routines      */
+#include <cvode/cvode_diag.h>          /* prototypes for CVDIAG interface routines       */
+#include <cvode/cvode_klu.h>           /* prototypes for CVKLU interface routines        */
+#include <cvode/cvode_superlumt.h>     /* prototypes for CVSUPERLUMT interface routines  */
+#include <cvode/cvode_spgmr.h>         /* prototypes for CVSPGMR interface routines      */
+#include <cvode/cvode_spbcgs.h>        /* prototypes for CVSPBCG interface routines      */
+#include <cvode/cvode_sptfqmr.h>       /* prototypes for CVSPTFQMR interface routines    */
+
+/***************************************************************************/
+
+/* Definitions for global variables shared amongst various routines */
+
+void *CV_cvodemem;
+long int *CV_iout;
+realtype *CV_rout;
+int CV_nrtfn;
+int CV_ls;
+
+/***************************************************************************/
+
+/* private constant(s) */
+#define ZERO RCONST(0.0)
+
+/***************************************************************************/
+
+/* Prototypes of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+  extern void FCV_FUN(realtype*,     /* T    */
+                      realtype*,     /* Y    */
+                      realtype*,     /* YDOT */
+                      long int*,     /* IPAR */
+                      realtype*,     /* RPAR */
+                      int*);         /* IER  */
+#ifdef __cplusplus
+}
+#endif
+
+/**************************************************************************/
+
+void FCV_MALLOC(realtype *t0, realtype *y0, 
+                int *meth, int *itmeth, int *iatol, 
+                realtype *rtol, realtype *atol,
+                long int *iout, realtype *rout,
+                long int *ipar, realtype *rpar,
+                int *ier)
+{
+  int lmm, iter;
+  N_Vector Vatol;
+  FCVUserData CV_userdata;
+
+  *ier = 0;
+
+  /* Check for required vector operations */
+  if(F2C_CVODE_vec->ops->nvgetarraypointer == NULL ||
+     F2C_CVODE_vec->ops->nvsetarraypointer == NULL) {
+    *ier = -1;
+    printf("A required vector operation is not implemented.\n\n");
+    return;
+  }
+
+  /* Initialize all pointers to NULL */
+  CV_cvodemem = NULL;
+  Vatol = NULL;
+
+  /* Create CVODE object */
+  lmm = (*meth == 1) ? CV_ADAMS : CV_BDF;
+  iter = (*itmeth == 1) ? CV_FUNCTIONAL : CV_NEWTON;
+  CV_cvodemem = CVodeCreate(lmm, iter);
+  if (CV_cvodemem == NULL) {
+    *ier = -1;
+    return;
+  }
+
+  /* Set and attach user data */
+  CV_userdata = NULL;
+  CV_userdata = (FCVUserData) malloc(sizeof *CV_userdata);
+  if (CV_userdata == NULL) {
+    *ier = -1;
+    return;
+  }
+  CV_userdata->rpar = rpar;
+  CV_userdata->ipar = ipar;
+
+  *ier = CVodeSetUserData(CV_cvodemem, CV_userdata);
+  if(*ier != CV_SUCCESS) {
+    free(CV_userdata); CV_userdata = NULL;
+    *ier = -1;
+    return;
+  }
+
+  /* Set data in F2C_CVODE_vec to y0 */
+  N_VSetArrayPointer(y0, F2C_CVODE_vec);
+
+  /* Call CVodeInit */
+  *ier = CVodeInit(CV_cvodemem, FCVf, *t0, F2C_CVODE_vec);
+
+  /* Reset data pointers */
+  N_VSetArrayPointer(NULL, F2C_CVODE_vec);
+
+  /* On failure, exit */
+  if(*ier != CV_SUCCESS) {
+    free(CV_userdata); CV_userdata = NULL;
+    *ier = -1;
+    return;
+  }
+
+  /* Set tolerances */
+  switch (*iatol) {
+  case 1:
+    *ier = CVodeSStolerances(CV_cvodemem, *rtol, *atol); 
+    break;
+  case 2:
+    Vatol = NULL;
+    Vatol = N_VCloneEmpty(F2C_CVODE_vec);
+    if (Vatol == NULL) {
+      free(CV_userdata); CV_userdata = NULL;
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(atol, Vatol);
+    *ier = CVodeSVtolerances(CV_cvodemem, *rtol, Vatol);
+    N_VDestroy(Vatol);
+    break;
+  }
+
+  /* On failure, exit */
+  if(*ier != CV_SUCCESS) {
+    free(CV_userdata); CV_userdata = NULL;
+    *ier = -1;
+    return;
+  }
+
+  /* Grab optional output arrays and store them in global variables */
+  CV_iout = iout;
+  CV_rout = rout;
+
+  /* Store the unit roundoff in rout for user access */
+  CV_rout[5] = UNIT_ROUNDOFF;
+
+  return;
+}
+
+/***************************************************************************/
+
+void FCV_REINIT(realtype *t0, realtype *y0, 
+                int *iatol, realtype *rtol, realtype *atol, 
+                int *ier)
+{
+  N_Vector Vatol;
+
+  *ier = 0;
+
+  /* Initialize all pointers to NULL */
+  Vatol = NULL;
+
+  /* Set data in F2C_CVODE_vec to y0 */
+  N_VSetArrayPointer(y0, F2C_CVODE_vec);
+
+  /* Call CVReInit */
+  *ier = CVodeReInit(CV_cvodemem, *t0, F2C_CVODE_vec);
+
+  /* Reset data pointers */
+  N_VSetArrayPointer(NULL, F2C_CVODE_vec);
+
+  /* On failure, exit */
+  if (*ier != CV_SUCCESS) {
+    *ier = -1;
+    return;
+  }
+
+  /* Set tolerances */
+  switch (*iatol) {
+  case 1:
+    *ier = CVodeSStolerances(CV_cvodemem, *rtol, *atol); 
+    break;
+  case 2:
+    Vatol = NULL;
+    Vatol = N_VCloneEmpty(F2C_CVODE_vec);
+    if (Vatol == NULL) {
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(atol, Vatol);
+    *ier = CVodeSVtolerances(CV_cvodemem, *rtol, Vatol);
+    N_VDestroy(Vatol);
+    break;
+  }
+
+  /* On failure, exit */
+  if (*ier != CV_SUCCESS) {
+    *ier = -1;
+    return;
+  }
+
+  return;
+}
+
+/***************************************************************************/
+
+void FCV_SETIIN(char key_name[], long int *ival, int *ier)
+{
+  if (!strncmp(key_name,"MAX_ORD",7))
+    *ier = CVodeSetMaxOrd(CV_cvodemem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_NSTEPS",10))
+    *ier = CVodeSetMaxNumSteps(CV_cvodemem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_ERRFAIL",11))
+    *ier = CVodeSetMaxErrTestFails(CV_cvodemem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_NITERS",10))
+    *ier = CVodeSetMaxNonlinIters(CV_cvodemem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_CONVFAIL",12))
+    *ier = CVodeSetMaxConvFails(CV_cvodemem, (int) *ival);
+  else if (!strncmp(key_name,"HNIL_WARNS",10))
+    *ier = CVodeSetMaxHnilWarns(CV_cvodemem, (int) *ival);
+  else if (!strncmp(key_name,"STAB_LIM",8))
+    *ier = CVodeSetStabLimDet(CV_cvodemem, (int) *ival);
+  else {
+    *ier = -99;
+    printf("FCVSETIIN: Unrecognized key.\n\n");
+  }
+
+}
+
+/***************************************************************************/
+
+void FCV_SETRIN(char key_name[], realtype *rval, int *ier)
+{
+  if (!strncmp(key_name,"INIT_STEP",9))
+    *ier = CVodeSetInitStep(CV_cvodemem, *rval);
+  else if (!strncmp(key_name,"MAX_STEP",8))
+    *ier = CVodeSetMaxStep(CV_cvodemem, *rval);
+  else if (!strncmp(key_name,"MIN_STEP",8))
+    *ier = CVodeSetMinStep(CV_cvodemem, *rval);
+  else if (!strncmp(key_name,"STOP_TIME",9))
+    *ier = CVodeSetStopTime(CV_cvodemem, *rval);
+  else if (!strncmp(key_name,"NLCONV_COEF",11))
+    *ier = CVodeSetNonlinConvCoef(CV_cvodemem, *rval);
+  else {
+    *ier = -99;
+    printf("FCVSETRIN: Unrecognized key.\n\n");
+  }
+
+}
+
+/***************************************************************************/
+
+void FCV_DENSE(long int *neq, int *ier)
+{
+  /* neq  is the problem size */
+
+  *ier = CVDense(CV_cvodemem, *neq);
+
+  CV_ls = CV_LS_DENSE;
+}
+
+/***************************************************************************/
+
+void FCV_BAND(long int *neq, long int *mupper, long int *mlower, int *ier)
+{
+  /* 
+     neq        is the problem size
+     mupper     is the upper bandwidth
+     mlower     is the lower bandwidth 
+  */
+
+  *ier = CVBand(CV_cvodemem, *neq, *mupper, *mlower);
+
+  CV_ls = CV_LS_BAND;
+}
+
+/***************************************************************************/
+
+void FCV_DIAG(int *ier)
+{
+  *ier = CVDiag(CV_cvodemem);
+
+  CV_ls = CV_LS_DIAG;
+}
+
+/***************************************************************************/
+
+void FCV_SPGMR(int *pretype, int *gstype, int *maxl, realtype *delt, int *ier)
+{
+  /* 
+     pretype    the preconditioner type
+     maxl       the maximum Krylov dimension
+     gstype     the Gram-Schmidt process type
+     delt       the linear convergence tolerance factor 
+  */
+
+  *ier = CVSpgmr(CV_cvodemem, *pretype, *maxl);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  *ier = CVSpilsSetGSType(CV_cvodemem, *gstype);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  *ier = CVSpilsSetEpsLin(CV_cvodemem, *delt);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  CV_ls = CV_LS_SPGMR;
+}
+
+/***************************************************************************/
+
+void FCV_SPBCG(int *pretype, int *maxl, realtype *delt, int *ier)
+{
+  /* 
+     pretype    the preconditioner type
+     maxl       the maximum Krylov dimension
+     delt       the linear convergence tolerance factor 
+  */
+
+  *ier = CVSpbcg(CV_cvodemem, *pretype, *maxl);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  *ier = CVSpilsSetEpsLin(CV_cvodemem, *delt);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  CV_ls = CV_LS_SPBCG;
+}
+
+/***************************************************************************/
+
+void FCV_SPTFQMR(int *pretype, int *maxl, realtype *delt, int *ier)
+{
+  /* 
+     pretype    the preconditioner type
+     maxl       the maximum Krylov dimension
+     delt       the linear convergence tolerance factor 
+  */
+
+  *ier = CVSptfqmr(CV_cvodemem, *pretype, *maxl);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  *ier = CVSpilsSetEpsLin(CV_cvodemem, *delt);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  CV_ls = CV_LS_SPTFQMR;
+}
+
+/***************************************************************************/
+
+void FCV_SPGMRREINIT(int *pretype, int *gstype, realtype *delt, int *ier)
+{
+  /* 
+     pretype    the preconditioner type
+     gstype     the Gram-Schmidt process type
+     delt       the linear convergence tolerance factor 
+  */
+
+  *ier = CVSpilsSetPrecType(CV_cvodemem, *pretype);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  *ier = CVSpilsSetGSType(CV_cvodemem, *gstype);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  *ier = CVSpilsSetEpsLin(CV_cvodemem, *delt);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  CV_ls = CV_LS_SPGMR;
+}
+
+/***************************************************************************/
+
+void FCV_SPBCGREINIT(int *pretype, int *maxl, realtype *delt, int *ier)
+{
+  /* 
+     pretype    the preconditioner type
+     maxl       the maximum Krylov subspace dimension
+     delt       the linear convergence tolerance factor 
+  */
+
+  *ier = CVSpilsSetPrecType(CV_cvodemem, *pretype);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  *ier = CVSpilsSetMaxl(CV_cvodemem, *maxl);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  *ier = CVSpilsSetEpsLin(CV_cvodemem, *delt);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  CV_ls = CV_LS_SPBCG;
+}
+
+/***************************************************************************/
+
+void FCV_SPTFQMRREINIT(int *pretype, int *maxl, realtype *delt, int *ier)
+{
+  /* 
+     pretype    the preconditioner type
+     maxl       the maximum Krylov subspace dimension
+     delt       the linear convergence tolerance factor 
+  */
+
+  *ier = CVSpilsSetPrecType(CV_cvodemem, *pretype);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  *ier = CVSpilsSetMaxl(CV_cvodemem, *maxl);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  *ier = CVSpilsSetEpsLin(CV_cvodemem, *delt);
+  if (*ier != CVSPILS_SUCCESS) return;
+
+  CV_ls = CV_LS_SPTFQMR;
+}
+
+/***************************************************************************/
+
+void FCV_CVODE(realtype *tout, realtype *t, realtype *y, int *itask, int *ier)
+{
+  /* 
+     tout          is the t value where output is desired
+     F2C_CVODE_vec is the N_Vector containing the solution on return
+     t             is the returned independent variable value
+     itask         is the task indicator (1 = CV_NORMAL, 2 = CV_ONE_STEP, 
+                                          3 = CV_NORMAL_TSTOP, 4 = CV_ONE_STEP_TSTOP) 
+  */
+
+  int qu, qcur;
+
+  N_VSetArrayPointer(y, F2C_CVODE_vec);
+
+  *ier = CVode(CV_cvodemem, *tout, F2C_CVODE_vec, t, *itask);
+
+  N_VSetArrayPointer(NULL, F2C_CVODE_vec);
+
+  /* Load optional outputs in iout & rout */
+  CVodeGetWorkSpace(CV_cvodemem,
+                    &CV_iout[0],                          /* LENRW   */
+                    &CV_iout[1]);                         /* LENIW   */
+  CVodeGetIntegratorStats(CV_cvodemem, 
+                          &CV_iout[2],                    /* NST     */
+                          &CV_iout[3],                    /* NFE     */ 
+                          &CV_iout[7],                    /* NSETUPS */ 
+                          &CV_iout[4],                    /* NETF    */ 
+                          &qu,                            /* QU      */
+                          &qcur,                          /* QCUR    */
+                          &CV_rout[0],                    /* H0U     */
+                          &CV_rout[1],                    /* HU      */ 
+                          &CV_rout[2],                    /* HCUR    */ 
+                          &CV_rout[3]);                   /* TCUR    */ 
+  CV_iout[8] = (long int) qu;
+  CV_iout[9] = (long int) qcur;
+  CVodeGetTolScaleFactor(CV_cvodemem, 
+                         &CV_rout[4]);                    /* TOLSFAC */
+  CVodeGetNonlinSolvStats(CV_cvodemem,
+                          &CV_iout[6],                    /* NNI     */
+                          &CV_iout[5]);                   /* NCFN    */
+  CVodeGetNumStabLimOrderReds(CV_cvodemem, &CV_iout[10]); /* NOR     */
+  
+  /* Root finding is on */
+  if (CV_nrtfn != 0)
+    CVodeGetNumGEvals(CV_cvodemem, &CV_iout[11]);         /* NGE     */
+  
+  switch(CV_ls) {
+  case CV_LS_DENSE:
+  case CV_LS_BAND:
+  case CV_LS_LAPACKDENSE:
+  case CV_LS_LAPACKBAND:
+    CVDlsGetWorkSpace(CV_cvodemem, &CV_iout[12], &CV_iout[13]);   /* LENRWLS,LENIWLS */
+    CVDlsGetLastFlag(CV_cvodemem, &CV_iout[14]);                  /* LSTF */
+    CVDlsGetNumRhsEvals(CV_cvodemem, &CV_iout[15]);               /* NFELS */
+    CVDlsGetNumJacEvals(CV_cvodemem, &CV_iout[16]);               /* NJE */
+    break;
+  case CV_LS_DIAG:
+    CVDiagGetWorkSpace(CV_cvodemem, &CV_iout[12], &CV_iout[13]);  /* LENRWLS,LENIWLS */
+    CVDiagGetLastFlag(CV_cvodemem, &CV_iout[14]);                 /* LSTF */
+    CVDiagGetNumRhsEvals(CV_cvodemem, &CV_iout[15]);              /* NFELS */
+    break;
+  case CV_LS_KLU:
+  case CV_LS_SUPERLUMT:
+    CVSlsGetLastFlag(CV_cvodemem, &CV_iout[14]);                  /* LSTF  */
+    CVSlsGetNumJacEvals(CV_cvodemem, &CV_iout[16]);               /* NJE   */
+    break;
+  case CV_LS_SPGMR:
+  case CV_LS_SPBCG:
+  case CV_LS_SPTFQMR:
+    CVSpilsGetWorkSpace(CV_cvodemem, &CV_iout[12], &CV_iout[13]); /* LENRWLS,LENIWLS */
+    CVSpilsGetLastFlag(CV_cvodemem, &CV_iout[14]);                /* LSTF */
+    CVSpilsGetNumRhsEvals(CV_cvodemem, &CV_iout[15]);             /* NFELS */
+    CVSpilsGetNumJtimesEvals(CV_cvodemem, &CV_iout[16]);          /* NJTV */
+    CVSpilsGetNumPrecEvals(CV_cvodemem, &CV_iout[17]);            /* NPE */
+    CVSpilsGetNumPrecSolves(CV_cvodemem, &CV_iout[18]);           /* NPS */
+    CVSpilsGetNumLinIters(CV_cvodemem, &CV_iout[19]);             /* NLI */
+    CVSpilsGetNumConvFails(CV_cvodemem, &CV_iout[20]);            /* NCFL */
+  }
+}
+
+/***************************************************************************/
+
+void FCV_DKY (realtype *t, int *k, realtype *dky, int *ier)
+{
+  /* 
+     t             is the t value where output is desired
+     k             is the derivative order
+     F2C_CVODE_vec is the N_Vector containing the solution derivative on return 
+  */
+
+  realtype *f2c_data = N_VGetArrayPointer(F2C_CVODE_vec);
+  N_VSetArrayPointer(dky, F2C_CVODE_vec);
+
+  *ier = 0;
+  *ier = CVodeGetDky(CV_cvodemem, *t, *k, F2C_CVODE_vec);
+
+  N_VSetArrayPointer(f2c_data, F2C_CVODE_vec);
+
+}
+
+/*************************************************/
+
+void FCV_GETERRWEIGHTS(realtype *eweight, int *ier)
+{
+  /* Attach user data to vector */
+  realtype *f2c_data = N_VGetArrayPointer(F2C_CVODE_vec);
+  N_VSetArrayPointer(eweight, F2C_CVODE_vec);
+
+  *ier = 0;
+  *ier = CVodeGetErrWeights(CV_cvodemem, F2C_CVODE_vec);
+
+  /* Reset data pointers */
+  N_VSetArrayPointer(f2c_data, F2C_CVODE_vec);
+
+  return;
+}
+
+/*************************************************/
+
+void FCV_GETESTLOCALERR(realtype *ele, int *ier)
+{
+  /* Attach user data to vector */
+  realtype *f2c_data = N_VGetArrayPointer(F2C_CVODE_vec);
+  N_VSetArrayPointer(ele, F2C_CVODE_vec);
+
+  *ier = 0;
+  *ier = CVodeGetEstLocalErrors(CV_cvodemem, F2C_CVODE_vec);
+
+  /* Reset data pointers */
+  N_VSetArrayPointer(f2c_data, F2C_CVODE_vec);
+
+  return;
+}
+
+/***************************************************************************/
+
+void FCV_FREE ()
+{
+  CVodeMem cv_mem;
+
+  cv_mem = (CVodeMem) CV_cvodemem;
+
+  free(cv_mem->cv_user_data); cv_mem->cv_user_data = NULL;
+
+  CVodeFree(&CV_cvodemem);
+
+  N_VSetArrayPointer(NULL, F2C_CVODE_vec);
+  N_VDestroy(F2C_CVODE_vec);
+}
+
+/***************************************************************************/
+
+/* 
+ * C function CVf to interface between CVODE and a Fortran subroutine FCVFUN.
+ * Addresses of t, y, and ydot are passed to CVFUN, using the
+ * routine N_VGetArrayPointer from the NVECTOR module.
+ * Auxiliary data is assumed to be communicated by Common. 
+ */
+
+int FCVf(realtype t, N_Vector y, N_Vector ydot, void *user_data)
+{
+  int ier;
+  realtype *ydata, *dydata;
+  FCVUserData CV_userdata;
+
+  ydata  = N_VGetArrayPointer(y);
+  dydata = N_VGetArrayPointer(ydot);
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_FUN(&t, ydata, dydata, CV_userdata->ipar, CV_userdata->rpar, &ier);
+
+  return(ier);
+}
diff --git a/src/cvode/fcmix/fcvode.h b/src/cvode/fcmix/fcvode.h
new file mode 100644
index 0000000..8552987
--- /dev/null
+++ b/src/cvode/fcmix/fcvode.h
@@ -0,0 +1,941 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4795 $
+ * $Date: 2016-07-01 15:10:25 -0700 (Fri, 01 Jul 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh, Radu Serban and
+ *                Aaron Collier @ LLNL
+ *                Ting Yan and Daniel R. Reynolds @ SMU
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for FCVODE, the Fortran interface to
+ * the CVODE package.                                            
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * =============================================================================
+ *
+ *                FCVODE Interface Package
+ *
+ * The FCVODE Interface Package is a package of C functions which support
+ * the use of the CVODE solver, for the solution of ODE systems 
+ * dy/dt = f(t,y), in a mixed Fortran/C setting.  While CVODE is written
+ * in C, it is assumed here that the user's calling program and
+ * user-supplied problem-defining routines are written in Fortran. 
+ * This package provides the necessary interface to CVODE for both the
+ * serial and the parallel NVECTOR implementations.
+ * 
+ * The user-callable functions, with the corresponding CVODE functions,
+ * are as follows:
+ * 
+ *   FNVINITS and FNVINITP interface to N_VNew_Serial and
+ *               N_VNew_Parallel, respectively
+ *   FNVINITOMP               N_VNew_OpenMP
+ *   FNVINITPTS               N_VNew_Pthreads
+ * 
+ *   FCVMALLOC  interfaces to CVodeCreate, CVodeSetUserData, and CVodeInit
+ * 
+ *   FCVREINIT  interfaces to CVReInit
+ * 
+ *   FCVSETIIN and FCVSETRIN interface to CVodeSet*
+ *
+ *   FCVEWTSET  interfaces to CVodeWFtolerances
+ * 
+ *   FCVDIAG    interfaces to CVDiag
+ * 
+ *   FCVDENSE   interfaces to CVDense
+ *   FCVDENSESETJAC   interfaces to CVDenseSetJacFn
+ * 
+ *   FCVBAND    interfaces to CVBand
+ *   FCVBANDSETJAC    interfaces to CVBandSetJacFn
+ *
+ *   FCVLAPACKDENSE   interfaces to CVLapackDense
+ *   FCVLAPACKBAND    interfaces to CVLapackBand
+ *   FCVLAPACKDENSESETJAC  interfaces to CVLapackSetJacFn
+ *   FCVLAPACKBANDSETJAC   interfaces to CVLapackSetJacFn
+ *
+ *   FCVKLU             interfaces to CVKLU
+ *   FCVKLUReinit       interfaces to CVKLUReinit
+ *   FCVSUPERLUMT       interfaces to CVSuperLUMT
+ *   FCVSPARSESETJAC    interfaces to CVSlsSetSparseJacFn
+ *
+ *   FCVSPGMR and FCVSPGMRREINIT interface to CVSpgmr and CVSpilsSet*
+ *   FCVSPBCG, FCVSPBCGREINIT interface to CVSpbcg and CVSpilsSet*
+ *   FCVSPTFQMR, FCVSPTFQMRREINIT interface to CVSptfqmr and CVSpilsSet*
+ *
+ *   FCVSPILSSETJAC   interfaces to CVSpilsSetJacTimesVecFn
+ *   FCVSPILSSETPREC  interfaces to CVSpilsSetPreconditioner
+ * 
+ *   FCVODE     interfaces to CVode, CVodeGet*, and CV*Get*
+ * 
+ *   FCVDKY     interfaces to CVodeGetDky
+ * 
+ *   FCVGETERRWEIGHTS  interfaces to CVodeGetErrWeights
+ *
+ *   FCVGETESTLOCALERR  interfaces to CVodeGetEstLocalErrors
+ *
+ *   FCVFREE    interfaces to CVodeFree
+ * 
+ * The user-supplied functions, each listed with the corresponding interface
+ * function which calls it (and its type within CVODE), are as follows:
+ *   FCVFUN    is called by the interface function FCVf of type CVRhsFn
+ *   FCVDJAC   is called by the interface fn. FCVDenseJac of type CVDenseJacFn
+ *   FCVBJAC   is called by the interface fn. FCVBandJac of type CVBandJacFn
+ *   FCVLDJAC  is called by the interface fn. FCVLapackDenseJac of type CVLapackJacFn
+ *   FCVLBJAC  is called by the interface fn. FCVLapackBandJac of type CVLapackJacFn
+ *   FCVPSOL   is called by the interface fn. FCVPSol of type CVSpilsPrecSolveFn
+ *   FCVPSET   is called by the interface fn. FCVPSet of type CVSpilsPrecSetupFn
+ *   FCVJTIMES is called by interface fn. FCVJtimes of type CVSpilsJacTimesVecFn
+ *   FCVSPJAC  is called by interface fn. FCVSparseJac of type CVSlsSparseJacFn
+ *   FCVEWT    is called by interface fn. FCVEwtSet of type CVEwtFn
+ * In contrast to the case of direct use of CVODE, and of most Fortran ODE
+ * solvers, the names of all user-supplied routines here are fixed, in
+ * order to maximize portability for the resulting mixed-language program.
+ * 
+ * Important note on portability.
+ * In this package, the names of the interface functions, and the names of
+ * the Fortran user routines called by them, appear as dummy names
+ * which are mapped to actual values by a series of definitions, in this
+ * and other header files.
+ * 
+ * =============================================================================
+ * 
+ *                  Usage of the FCVODE Interface Package
+ * 
+ * The usage of FCVODE requires calls to five or more interface
+ * functions, depending on the method options selected, and one or more
+ * user-supplied routines which define the problem to be solved.  These
+ * function calls and user routines are summarized separately below.
+ * 
+ * Some details are omitted, and the user is referred to the user documents
+ * on CVODE for more complete documentation.  Information on the
+ * arguments of any given user-callable interface routine, or of a given
+ * user-supplied function called by an interface function, can be found in
+ * the documentation on the corresponding function in the CVODE package.
+ * 
+ * The number labels on the instructions below end with s for instructions
+ * that apply to the serial version of CVODE only, and end with p for
+ * those that apply to the parallel version only.
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * (1) User-supplied right-hand side routine: FCVFUN
+ * The user must in all cases supply the following Fortran routine
+ *       SUBROUTINE FCVFUN (T, Y, YDOT, IPAR, RPAR, IER)
+ *       DIMENSION Y(*), YDOT(*), IPAR(*), RPAR(*)
+ * It must set the YDOT array to f(t,y), the right-hand side of the ODE 
+ * system, as function of T = t and the array Y = y.  Here Y and YDOT
+ * are distributed vectors. IPAR and RPAR are arrays of integer and real user 
+ * data, respectively as passed to FCVMALLOC.
+ * On return, set IER = 0 if successful, IER > 0 if a recoverable error occurred,
+ * and IER < 0 if an unrecoverable error ocurred.
+ * 
+ * (2s) Optional user-supplied dense Jacobian approximation routine: FCVDJAC
+ * As an option when using the DENSE linear solver, the user may supply a
+ * routine that computes a dense approximation of the system Jacobian 
+ * J = df/dy. If supplied, it must have the following form:
+ *       SUBROUTINE FCVDJAC (NEQ, T, Y, FY, DJAC, H, IPAR, RPAR, WK1, WK2, WK3, IER)
+ *       DIMENSION Y(*), FY(*), DJAC(NEQ,*), IPAR(*), RPAR(*), WK1(*), WK2(*), WK3(*)
+ * Typically this routine will use only NEQ, T, Y, and DJAC. It must compute
+ * the Jacobian and store it columnwise in DJAC.
+ * IPAR and RPAR are user (integer and real) arrays passed to FCVMALLOC.
+ * On return, set IER = 0 if successful, IER > 0 if a recoverable error occurred,
+ * and IER < 0 if an unrecoverable error ocurred.
+ * 
+ * (3s) Optional user-supplied band Jacobian approximation routine: FCVBJAC
+ * As an option when using the BAND linear solver, the user may supply a
+ * routine that computes a band approximation of the system Jacobian 
+ * J = df/dy. If supplied, it must have the following form:
+ *       SUBROUTINE FCVBJAC (NEQ, MU, ML, MDIM, T, Y, FY, BJAC, H,
+ *      1                    IPAR, RPAR, WK1, WK2, WK3, IER)
+ *       DIMENSION Y(*), FY(*), BJAC(MDIM,*), IPAR(*), RPAR(*), WK1(*), WK2(*), WK3(*)
+ * Typically this routine will use only NEQ, MU, ML, T, Y, and BJAC. 
+ * It must load the MDIM by N array BJAC with the Jacobian matrix at the
+ * current (t,y) in band form.  Store in BJAC(k,j) the Jacobian element J(i,j)
+ * with k = i - j + MU + 1 (k = 1 ... ML+MU+1) and j = 1 ... N.
+ * IPAR and RPAR are user (integer and real) arrays passed to FCVMALLOC.
+ * On return, set IER = 0 if successful, IER > 0 if a recoverable error occurred,
+ * and IER < 0 if an unrecoverable error ocurred.
+ * 
+ * (4s) User-supplied sparse Jacobian approximation routine: FCVSPJAC
+ *
+ * Required when using the CVKLU or CVSuperLUMT linear solvers, the 
+ * user must supply a routine that computes a compressed-sparse-column [or 
+ * compressed-sparse-row] approximation of the system Jacobian J = dfi(t,y)/dy.  
+ * If supplied, it must have the following form:
+ *
+ *       SUBROUTINE FCVSPJAC(T, Y, FY, N, NNZ, JDATA, JRVALS, 
+ *      &                     JCPTRS, H, IPAR, RPAR, WK1, WK2, WK3, IER)
+ *
+ * This routine must load the N by N compressed sparse column [or row] matrix 
+ * with storage for NNZ nonzeros, stored in the arrays JDATA (nonzero
+ * values), JRVALS (row [or column] indices for each nonzero), JCOLPTRS (indices 
+ * for start of each column [or row]), with the Jacobian matrix at the current
+ * (t,y) in CSC [or CSR] form (see sundials_sparse.h for more information).
+ *
+ * The arguments are:
+ *         T    -- current time [realtype, input]
+ *         Y    -- array containing state variables [realtype, input]
+ *         FY   -- array containing state derivatives [realtype, input]
+ *         N    -- number of matrix rows/columns in Jacobian [int, input]
+ *         NNZ  -- allocated length of nonzero storage [int, input]
+ *        JDATA -- nonzero values in Jacobian
+ *                 [realtype of length NNZ, output]
+ *       JRVALS -- row [or column] indices for each nonzero in Jacobian
+ *                  [int of length NNZ, output]
+ *       JCPTRS -- pointers to each Jacobian column [or row] in preceding arrays
+ *                 [int of length N+1, output]
+ *         H    -- current step size [realtype, input]
+ *         IPAR -- array containing integer user data that was passed to
+ *                 FCVMALLOC [long int, input]
+ *         RPAR -- array containing real user data that was passed to
+ *                 FCVMALLOC [realtype, input]
+ *         WK*  -- array containing temporary workspace of same size as Y 
+ *                 [realtype, input]
+ *         IER  -- return flag [int, output]:
+ *                    0 if successful, 
+ *                   >0 if a recoverable error occurred,
+ *                   <0 if an unrecoverable error ocurred.
+ *
+ * (5s) Optional user-supplied Lapack dense Jacobian routine: FCVLDJAC
+ * See the description for FCVDJAC. NOTE: the dense Jacobian matrix
+ * is NOT set to zero before calling the user's FCVLDJAC.
+ *
+ * (6s) Optional user-supplied Lapack band Jacobian routine: FCVLBJAC
+ * See the description for FCVBJAC. NOTE: the band Jacobian matrix
+ * is NOT set to zero before calling the user's FCVLBJAC.
+ *
+ * (7) Optional user-supplied Jacobian-vector product routine: FCVJTIMES
+ * As an option when using the SP* linear solver, the user may supply
+ * a routine that computes the product of the system Jacobian J = df/dy and 
+ * a given vector v.  If supplied, it must have the following form:
+ *       SUBROUTINE FCVJTIMES (V, FJV, T, Y, FY, H, IPAR, RPAR, WORK, IER)
+ *       DIMENSION V(*), FJV(*), Y(*), FY(*), IPAR(*), RPAR(*), WORK(*)
+ * Typically this routine will use only NEQ, T, Y, V, and FJV.  It must
+ * compute the product vector Jv where the vector v is stored in V, and store
+ * the product in FJV.  On return, set IER = 0 if FCVJTIMES was successful,
+ * and nonzero otherwise.
+ * IPAR and RPAR are user (integer and real) arrays passed to FCVMALLOC.
+ * 
+ * (8) Optional user-supplied error weight vector routine: FCVEWT
+ * As an option to providing the relative and absolute tolerances, the user
+ * may supply a routine that computes the weights used in the WRMS norms.
+ * If supplied, it must have the following form:
+ *       SUBROUTINE FCVEWT (Y, EWT, IPAR, RPAR, IER)
+ *       DIMENSION Y(*), EWT(*), IPAR(*), RPAR(*)
+ * It must store the error weights in EWT, given the current solution vector Y.
+ * On return, set IER = 0 if successful, and nonzero otherwise.
+ * IPAR and RPAR are user (integer and real) arrays passed to FCVMALLOC.
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * (9) Initialization:  FNVINITS/FNVINITP/FNVINITOMP/FNVINITPTS, 
+ *                      FCVMALLOC, FCVREINIT
+ * 
+ * (9.1s) To initialize the serial machine environment, the user must make
+ * the following call:
+ *        CALL FNVINITS (1, NEQ, IER)
+ * where the first argument is the CVODE solver ID. The other arguments are:
+ * NEQ     = size of vectors
+ * IER     = return completion flag. Values are 0 = success, -1 = failure.
+ * 
+ * (9.1p) To initialize the distributed memory parallel machine environment, 
+ * the user must make the following call:
+ *        CALL FNVINITP (1, NLOCAL, NGLOBAL, IER)
+ * The arguments are:
+ * NLOCAL  = local size of vectors on this processor
+ * NGLOBAL = the system size, and the global size of vectors (the sum 
+ *           of all values of NLOCAL)
+ * IER     = return completion flag. Values are 0 = success, -1 = failure.
+ * Note: If MPI was initialized by the user, the communicator must be
+ * set to MPI_COMM_WORLD.  If not, this routine initializes MPI and sets
+ * the communicator equal to MPI_COMM_WORLD.
+ * 
+ * (9.1omp) To initialize the openMP threaded vector kernel, 
+ *          the user must make the following call:
+ *
+ *          CALL FNVINITOMP (1, NEQ, NUM_THREADS, IER)
+ *
+ *        The arguments are:
+ *          NEQ = size of vectors
+ *          NUM_THREADS = number of threads
+ *          IER = return completion flag. Values are 0 = success, -1 = failure.
+ *
+ * (9.1pts) To initialize the Pthreads threaded vector kernel, 
+ *          the user must make the following call:
+ *
+ *          CALL FNVINITOMP (1, NEQ, NUM_THREADS, IER)
+ *
+ *        The arguments are:
+ *          NEQ = size of vectors
+ *          NUM_THREADS = number of threads
+ *          IER = return completion flag. Values are 0 = success, -1 = failure.
+ *
+ * (9.2) To set various problem and solution parameters and allocate
+ * internal memory, make the following call:
+ *       CALL FCVMALLOC(T0, Y0, METH, ITMETH, IATOL, RTOL, ATOL,
+ *      1               IOUT, ROUT, IPAR, RPAR, IER)
+ * The arguments are:
+ * T0     = initial value of t
+ * Y0     = array of initial conditions
+ * METH   = basic integration method: 1 = Adams (nonstiff), 2 = BDF (stiff)
+ * ITMETH = nonlinear iteration method: 1=functional iteration, 2=Newton iter.
+ * IATOL  = type for absolute tolerance ATOL: 1 = scalar, 2 = array.
+ *          If IATOL = 3, then the user must supply a routine FCVEWT to compute
+ *          the error weight vector.
+ * RTOL   = relative tolerance (scalar)
+ * ATOL   = absolute tolerance (scalar or array)
+ * IOUT   = array of length 21 for integer optional outputs
+ *          (declare as INTEGER*4 or INTEGER*8 according to C type long int)
+ * ROUT   = array of length 6 for real optional outputs
+ * IPAR   = array with user integer data
+ *          (declare as INTEGER*4 or INTEGER*8 according to C type long int)
+ * RPAR   = array with user real data
+ * IER    = return completion flag.  Values are 0 = SUCCESS, and -1 = failure.
+ *          See printed message for details in case of failure.
+ *
+ * The user data arrays IPAR and RPAR are passed unmodified to all subsequent
+ * calls to user-provided routines. Modifications to either array inside a
+ * user-provided routine will be propagated. Using these two arrays, the user
+ * can dispense with Common blocks to pass data betwen user-provided routines.
+ * 
+ * The optional outputs are:
+ *           LENRW   = IOUT( 1) from CVodeGetWorkSpace
+ *           LENIW   = IOUT( 2) from CVodeGetWorkSpace
+ *           NST     = IOUT( 3) from CVodeGetNumSteps
+ *           NFE     = IOUT( 4) from CVodeGetNumRhsEvals
+ *           NETF    = IOUT( 5) from CVodeGetNumErrTestFails
+ *           NCFN    = IOUT( 6) from CVodeGetNumNonlinSolvConvFails
+ *           NNI     = IOUT( 7) from CVodeGetNumNonlinSolvIters
+ *           NSETUPS = IOUT( 8) from CVodeGetNumLinSolvSetups
+ *           QU      = IOUT( 9) from CVodeGetLastOrder
+ *           QCUR    = IOUT(10) from CVodeGetCurrentOrder
+ *           NOR     = IOUT(11) from CVodeGetNumStabLimOrderReds
+ *           NGE     = IOUT(12) from CVodeGetNumGEvals
+ *
+ *           H0U     = ROUT( 1) from CVodeGetActualInitStep
+ *           HU      = ROUT( 2) from CVodeGetLastStep
+ *           HCUR    = ROUT( 3) from CVodeGetCurrentStep
+ *           TCUR    = ROUT( 4) from CVodeGetCurrentTime
+ *           TOLSF   = ROUT( 5) from CVodeGetTolScaleFactor
+ *           UROUND  = ROUT( 6) from UNIT_ROUNDOFF
+ * See the CVODE manual for details. 
+ *
+ * If the user program includes the FCVEWT routine for the evaluation of the 
+ * error weights, the following call must be made
+ *       CALL FCVEWTSET(FLAG, IER)
+ * with FLAG = 1 to specify that FCVEWT is provided.
+ * The return flag IER is 0 if successful, and nonzero otherwise.
+ *
+ * (9.3) To re-initialize the CVODE solver for the solution of a new problem
+ * of the same size as one already solved, make the following call:
+ *       CALL FCVREINIT(T0, Y0, IATOL, RTOL, ATOL, IER)
+ * The arguments have the same names and meanings as those of FCVMALLOC,
+ * except that METH and ITMETH  have been omitted from the argument list 
+ * (being unchanged for the new problem).  
+ * FCVREINIT performs the same initializations as FCVMALLOC, but does no memory 
+ * allocation, using instead the existing internal memory created by the
+ * previous  FCVMALLOC call.  The call to specify the linear system solution
+ * method may or may not be needed; see paragraph (7) below.
+ * 
+ * (9.4) To set various integer optional inputs, make the folowing call:
+ *       CALL FCVSETIIN(KEY, VALUE, IER)
+ * to set the integer value VAL to the optional input specified by the
+ * quoted character string KEY.
+ * KEY is one of the following: MAX_ORD, MAX_NSTEPS, MAX_ERRFAIL, MAX_NITERS, 
+ * MAX_CONVFAIL, HNIL_WARNS, STAB_LIM.
+ *
+ * To set various real optional inputs, make the folowing call:
+ *       CALL FCVSETRIN(KEY, VALUE, IER)
+ * to set the real value VAL to the optional input specified by the
+ * quoted character string KEY.
+ * KEY is one of the following: INIT_STEP, MAX_STEP, MIN_STEP, STOP_TIME,
+ * NLCONV_COEF.
+ *
+ * FCVSETIIN and FCVSETRIN return IER = 0 if successful and IER < 0 if an 
+ * error occured.
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * (10) Specification of linear system solution method.
+ * In the case of a stiff system, the implicit BDF method involves the solution
+ * of linear systems related to the Jacobian J = df/dy of the ODE system.
+ * CVODE presently includes four choices for the treatment of these systems,
+ * and the user of FCVODE must call a routine with a specific name to make the
+ * desired choice.
+ * 
+ * (10.1) Diagonal approximate Jacobian.
+ * This choice is appropriate when the Jacobian can be well approximated by
+ * a diagonal matrix.  The user must make the call:
+ *       CALL FCVDIAG(IER)
+ * IER is an error return flag: 0 = success, negative value = error.
+ * There is no additional user-supplied routine.  
+ *
+ * Optional outputs specific to the DIAG case are:
+ *        LENRWLS = IOUT(13) from CVDiagGetWorkSpace
+ *        LENIWLS = IOUT(14) from CVDiagGetWorkSpace
+ *        LSTF    = IOUT(15) from CVDiagGetLastFlag
+ *        NFELS   = IOUT(16) from CVDiagGetNumRhsEvals
+ * See the CVODE manual for descriptions.
+ * 
+ * (10.2s) DENSE treatment of the linear system.
+ * The user must make the call
+ *       CALL FCVDENSE(NEQ, IER)
+ * The argument is:
+ * IER = error return flag: 0 = success , negative value = an error occured
+ * 
+ * If the user program includes the FCVDJAC routine for the evaluation of the 
+ * dense approximation to the Jacobian, the following call must be made
+ *       CALL FCVDENSESETJAC(FLAG, IER)
+ * with FLAG = 1 to specify that FCVDJAC is provided.  (FLAG = 0 specifies
+ * using the internal finite differences approximation to the Jacobian.)
+ * The return flag IER is 0 if successful, and nonzero otherwise.
+ * 
+ * Optional outputs specific to the DENSE case are:
+ *        LENRWLS = IOUT(13) from CVDenseGetWorkSpace
+ *        LENIWLS = IOUT(14) from CVDenseGetWorkSpace
+ *        LSTF    = IOUT(15) from CVDenseGetLastFlag
+ *        NFELS   = IOUT(16) from CVDenseGetNumRhsEvals
+ *        NJED    = IOUT(17) from CVDenseGetNumJacEvals
+ * See the CVODE manual for descriptions.
+ * 
+ * (10.3s) BAND treatment of the linear system
+ * The user must make the call
+ *       CALL FCVBAND(NEQ, MU, ML, IER)
+ * The arguments are:
+ * MU  = upper bandwidth
+ * ML  = lower bandwidth
+ * IER = error return flag: 0 = success , negative value = an error occured
+ * 
+ * If the user program includes the FCVBJAC routine for the evaluation of the 
+ * band approximation to the Jacobian, the following call must be made
+ *       CALL FCVBANDSETJAC(FLAG, IER)
+ * with FLAG = 1 to specify that FCVBJAC is provided.  (FLAG = 0 specifies
+ * using the internal finite differences approximation to the Jacobian.)
+ * The return flag IER is 0 if successful, and nonzero otherwise.
+ * 
+ * Optional outputs specific to the BAND case are:
+ *        LENRWLS = IOUT(13) from CVBandGetWorkSpace
+ *        LENIWLS = IOUT(14) from CVBandGetWorkSpace
+ *        LSTF    = IOUT(15) from CVBandGetLastFlag
+ *        NFELS   = IOUT(16) from CVBandGetNumRhsEvals
+ *        NJEB    = IOUT(17) from CVBandGetNumJacEvals
+ * See the CVODE manual for descriptions.
+ *
+ * (10.4s) LAPACK dense treatment of the linear system
+ * The user must make the call
+ *       CALL FCVLAPACKDENSE(NEQ, IER)
+ * and, optionally
+ *       CALL FCVLAPACKDENSESETJAC(FLAG, IER)
+ * with FLAG=1 if the user provides the function FCVLDJAC. 
+ * See (9.2s) for more details.
+ *
+ * (10.5s) LAPACK band treatment of the linear system
+ * The user must make the call
+ *       CALL FCVLAPACKBAND(NEQ, IER)
+ * and, optionally
+ *       CALL FCVLAPACKBANDSETJAC(FLAG, IER)
+ * with FLAG=1 if the user provides the function FCVLBJAC. 
+ * See (9.3s)
+ *
+ *  (10.6s) SPARSE treatment of the linear system using the KLU solver.
+ *
+ *     The user must make the call
+ *
+ *       CALL FCVKLU(NEQ, NNZ, SPARSETYPE, ORDERING, IER)
+ *
+ *     The arguments are:
+ *        NEQ = the problem size [int; input]
+ *        NNZ = the maximum number of nonzeros [int; input]
+ *        SPARSETYPE = choice between CSC and CSR format
+ *           (0 = CSC, 1 = CSR) [int; input]
+ *        ORDERING = the matrix ordering desired, possible values
+ *           come from the KLU package (0 = AMD, 1 = COLAMD) [int; input]
+ *        IER = error return flag [int, output]: 
+ *	         0 = success, 
+ *		 negative = error.
+ *
+ *     When using the KLU solver the user must provide the FCVSPJAC routine for the 
+ *     evalution of the sparse approximation to the Jacobian. To indicate that this
+ *     routine has been provided, after the call to FCVKLU, the following call must 
+ *     be made    
+ *
+ *       CALL FCVSPARSESETJAC(IER) 
+ *
+ *     The int return flag IER=0 if successful, and nonzero otherwise.
+ *
+ *  
+ *     The CVODE KLU solver will reuse much of the factorization information from one
+ *     nonlinear iteration to the next.  If at any time the user wants to force a full
+ *     refactorization or if the number of nonzeros in the Jacobian matrix changes, the
+ *     user should make the call
+ *
+ *       CALL FCVKLUREINIT(NEQ, NNZ, REINIT_TYPE)
+ *
+ *     The arguments are:
+ *        NEQ = the problem size [int; input]
+ *        NNZ = the maximum number of nonzeros [int; input]
+ *	REINIT_TYPE = 1 or 2.  For a value of 1, the matrix will be destroyed and 
+ *          a new one will be allocated with NNZ nonzeros.  For a value of 2, 
+ *	  only symbolic and numeric factorizations will be completed. 
+ * 
+ *     When using FCVKLU, the user is required to supply the FCVSPJAC 
+ *     routine for the evaluation of the sparse approximation to the 
+ *     Jacobian, as discussed above with the other user-supplied routines.
+ * 
+ *     Optional outputs specific to the KLU case are:
+ *        LSTF    = IOUT(14) from CVSlsGetLastFlag
+ *        NJES    = IOUT(16) from CVSlsGetNumJacEvals
+ *     See the CVODE manual for descriptions.
+ * 
+ * (10.7s) SPARSE treatment of the linear system using the SuperLUMT solver.
+ *
+ *     The user must make the call
+ *
+ *       CALL FCVSUPERLUMT(NTHREADS, NEQ, NNZ, ORDERING, IER)
+ *
+ *     The arguments are:
+ *        NTHREADS = desired number of threads to use [int; input]
+ *        NEQ = the problem size [int; input]
+ *        NNZ = the maximum number of nonzeros [int; input]
+ *	ORDERING = the matrix ordering desired, possible values
+ *	   come from the SuperLU_MT package [int; input]
+ *           0 = Natural
+ *           1 = Minimum degree on A^T A
+ *           2 = Minimum degree on A^T + A
+ *           3 = COLAMD
+ *	IER = error return flag [int, output]: 
+ *	         0 = success, 
+ *		 negative = error.
+ *	 
+ *     At this time, there is no reinitialization capability for the SUNDIALS 
+ *     interfaces to the SuperLUMT solver.
+ *
+ *     When using the SuperLUMT solver the user must providing the FCVSPJAC routine
+ *     for the evalution of the CSC approximation to the Jacobian (note: the current 
+ *     SuperLU_MT interface in SUNDIALS does not support CSR matrices). To indicate 
+ *     that this routine has been provided, after the call to FCVSUPERLUMT, the following
+ *     call must be made    
+ *
+ *       CALL FCVSPARSESETJAC(IER) 
+ *
+ *     The int return flag IER=0 if successful, and nonzero otherwise.
+ * 
+ *     Optional outputs specific to the SUPERLUMT case are:
+ *        LSTF    = IOUT(14) from CVSlsGetLastFlag
+ *        NJES    = IOUT(16) from CVSlsGetNumJacEvals
+ *     See the CVODE manual for descriptions.
+ * 
+ * (10.8) SPGMR treatment of the linear systems.
+ * For the Scaled Preconditioned GMRES solution of the linear systems,
+ * the user must make the following call:
+ *       CALL FCVSPGMR(IPRETYPE, IGSTYPE, MAXL, DELT, IER)              
+ * The arguments are:
+ * IPRETYPE = preconditioner type: 
+ *              0 = none 
+ *              1 = left only
+ *              2 = right only
+ *              3 = both sides
+ * IGSTYPE  = Gram-schmidt process type: 
+ *              1 = modified G-S
+ *              2 = classical G-S.
+ * MAXL     = maximum Krylov subspace dimension; 0 indicates default.
+ * DELT     = linear convergence tolerance factor; 0.0 indicates default.
+ * IER      = error return flag: 0 = success; negative value = an error occured
+ * 
+ * 
+ * Optional outputs specific to the SPGMR case are:
+ *        LENRWLS = IOUT(13) from CVSpgmrGetWorkSpace
+ *        LENIWLS = IOUT(14) from CVSpgmrGetWorkSpace
+ *        LSTF    = IOUT(15) from CVSpgmrGetLastFlag
+ *        NFELS   = IOUT(16) from CVSpgmrGetRhsEvals
+ *        NJTV    = IOUT(17) from CVSpgmrGetJtimesEvals
+ *        NPE     = IOUT(18) from CVSpgmrGetPrecEvals
+ *        NPS     = IOUT(19) from CVSpgmrGetPrecSolves
+ *        NLI     = IOUT(20) from CVSpgmrGetLinIters
+ *        NCFL    = IOUT(21) from CVSpgmrGetConvFails
+ * See the CVODE manual for descriptions.
+ * 
+ * If a sequence of problems of the same size is being solved using the
+ * SPGMR linear solver, then following the call to FCVREINIT, a call to the
+ * FCVSPGMRREINIT routine is needed if any of IPRETYPE, IGSTYPE, DELT is
+ * being changed.  In that case, call FCVSPGMRREINIT as follows:
+ *       CALL FCVSPGMRREINIT(IPRETYPE, IGSTYPE, DELT, IER)              
+ * The arguments have the same meanings as for FCVSPGMR.  If MAXL is being
+ * changed, then call FCVSPGMR instead.
+ * 
+ * (10.9) SPBCG treatment of the linear systems.
+ * For the Scaled Preconditioned Bi-CGSTAB solution of the linear systems,
+ * the user must make the following call:
+ *       CALL FCVSPBCG(IPRETYPE, MAXL, DELT, IER)              
+ * The arguments are:
+ * IPRETYPE = preconditioner type: 
+ *              0 = none 
+ *              1 = left only
+ *              2 = right only
+ *              3 = both sides
+ * MAXL     = maximum Krylov subspace dimension; 0 indicates default.
+ * DELT     = linear convergence tolerance factor; 0.0 indicates default.
+ * IER      = error return flag: 0 = success; negative value = an error occured
+ * 
+ * Optional outputs specific to the SPBCG case are:
+ *        LENRWLS = IOUT(13) from CVSpbcgGetWorkSpace
+ *        LENIWLS = IOUT(14) from CVSpbcgGetWorkSpace
+ *        LSTF    = IOUT(15) from CVSpbcgGetLastFlag
+ *        NFELS   = IOUT(16) from CVSpbcgGetRhsEvals
+ *        NJTV    = IOUT(17) from CVSpbcgGetJtimesEvals
+ *        NPE     = IOUT(18) from CVSpbcgGetPrecEvals
+ *        NPS     = IOUT(19) from CVSpbcgGetPrecSolves
+ *        NLI     = IOUT(20) from CVSpbcgGetLinIters
+ *        NCFL    = IOUT(21) from CVSpbcgGetConvFails
+  * See the CVODE manual for descriptions.
+ * 
+ * If a sequence of problems of the same size is being solved using the
+ * SPBCG linear solver, then following the call to FCVREINIT, a call to the
+ * FCVSPBCGREINIT routine is needed if any of its arguments is
+ * being changed.  The call is:
+ *       CALL FCVSPBCGREINIT(IPRETYPE, MAXL, DELT, IER)              
+ * The arguments have the same meanings as for FCVSPBCG.
+ *
+ * (10.10) SPTFQMR treatment of the linear systems.
+ * For the Scaled Preconditioned TFQMR solution of the linear systems,
+ * the user must make the following call:
+ *       CALL FCVSPTFQMR(IPRETYPE, MAXL, DELT, IER)              
+ * The arguments are:
+ * IPRETYPE = preconditioner type: 
+ *              0 = none 
+ *              1 = left only
+ *              2 = right only
+ *              3 = both sides
+ * MAXL     = maximum Krylov subspace dimension; 0 indicates default.
+ * DELT     = linear convergence tolerance factor; 0.0 indicates default.
+ * IER      = error return flag: 0 = success; negative value = an error occured
+ * 
+ * Optional outputs specific to the SPTFQMR case are:
+ *        LENRWLS = IOUT(13) from CVSptfqmrGetWorkSpace
+ *        LENIWLS = IOUT(14) from CVSptfqmrGetWorkSpace
+ *        LSTF    = IOUT(15) from CVSptfqmrGetLastFlag
+ *        NFELS   = IOUT(16) from CVSptfqmrGetRhsEvals
+ *        NJTV    = IOUT(17) from CVSptfqmrGetJtimesEvals
+ *        NPE     = IOUT(18) from CVSptfqmrGetPrecEvals
+ *        NPS     = IOUT(19) from CVSptfqmrGetPrecSolves
+ *        NLI     = IOUT(20) from CVSptfqmrGetLinIters
+ *        NCFL    = IOUT(21) from CVSptfqmrGetConvFails
+ * See the CVODE manual for descriptions.
+ *
+ * If a sequence of problems of the same size is being solved using the
+ * SPTFQMR linear solver, then following the call to FCVREINIT, a call to the
+ * FCVSPTFQMRREINIT routine is needed if any of its arguments is
+ * being changed.  The call is:
+ *       CALL FCVSPTFQMRREINIT(IPRETYPE, MAXL, DELT, IER)              
+ * The arguments have the same meanings as for FCVSPTFQMR.
+ *
+ * (10.11) Usage of user-supplied routines for the Krylov solvers
+ *
+ * If the user program includes the FCVJTIMES routine for the evaluation of the 
+ * Jacobian vector product, the following call must be made
+ *       CALL FCVSPILSSETJAC(FLAG, IER)
+ * with FLAG = 1 to specify that FCVJTIMES is provided.  (FLAG = 0 specifies
+ * using and internal finite difference approximation to this product.)
+ * The return flag IER is 0 if successful, and nonzero otherwise.
+ * 
+ * Usage of the user-supplied routines FCVPSOL and FCVPSET for solution of the 
+ * preconditioner linear system requires the following call:
+ *       CALL FCVSPILSSETPREC(FLAG, IER)
+ * with FLAG = 1. The return flag IER is 0 if successful, nonzero otherwise.
+ * The user-supplied routine FCVPSOL must have the form:
+ *       SUBROUTINE FCVPSOL (T,Y,FY,R,Z,GAMMA,DELTA,LR,IPAR,RPAR,VT,IER)
+ *       DIMENSION Y(*), FY(*), VT(*), R(*), Z(*), IPAR(*), RPAR(*)
+ * Typically this routine will use only NEQ, T, Y, GAMMA, R, LR, and Z.  It
+ * must solve the preconditioner linear system Pz = r, where r = R is input, 
+ * and store the solution z in Z.  Here P is the left preconditioner if LR = 1
+ * and the right preconditioner if LR = 2.  The preconditioner (or the product
+ * of the left and right preconditioners if both are nontrivial) should be an 
+ * approximation to the matrix I - GAMMA*J (I = identity, J = Jacobian).
+ * IPAR and RPAR are user (integer and real) arrays passed to FCVMALLOC.
+ * On return, set IER = 0 if successful, IER > 0 if a recoverable error occurred,
+ * and IER < 0 if an unrecoverable error ocurred.
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * (11) The integrator: FCVODE
+ * Carrying out the integration is accomplished by making calls as follows:
+ *       CALL FCVODE (TOUT, T, Y, ITASK, IER)
+ * The arguments are:
+ * TOUT  = next value of t at which a solution is desired (input)
+ * T     = value of t reached by the solver on output
+ * Y     = array containing the computed solution on output
+ * ITASK = task indicator: 1 = normal mode (overshoot TOUT and interpolate)
+ *         2 = one-step mode (return after each internal step taken)
+ *         3 = normal tstop mode (like 1, but integration never proceeds past 
+ *             TSTOP, which must be specified through a call to FCVSETRIN
+ *             using the key 'STOP_TIME')
+ *         4 = one step tstop (like 2, but integration never goes past TSTOP)
+ * IER   = completion flag: 0 = success, 1 = tstop return, 2 = root return, 
+ *         values -1 ... -10 are various failure modes (see CVODE manual).
+ * The current values of the optional outputs are available in IOUT and ROUT.
+ * 
+ * -----------------------------------------------------------------------------
+ *
+ * (12) Computing solution derivatives: FCVDKY
+ * To obtain a derivative of the solution, of order up to the current method
+ * order, make the following call:
+ *       CALL FCVDKY (T, K, DKY, IER)
+ * The arguments are:
+ * T   = value of t at which solution derivative is desired, in [TCUR-HU,TCUR].
+ * K   = derivative order (0 .le. K .le. QU)
+ * DKY = array containing computed K-th derivative of y on return
+ * IER = return flag: = 0 for success, < 0 for illegal argument.
+ * 
+ * -----------------------------------------------------------------------------
+ *
+ * (13) Memory freeing: FCVFREE 
+ * To free the internal memory created by the calls to FCVMALLOC and
+ * FNVINITS or FNVINITP, make the call
+ *       CALL FCVFREE
+ * 
+ * =============================================================================
+ */
+
+#ifndef _FCVODE_H
+#define _FCVODE_H
+
+/* header files  */
+#include <cvode/cvode.h>
+#include <sundials/sundials_direct.h>  /* definition of type DlsMat   */
+#include <sundials/sundials_sparse.h>  /* definition of type SlsMat   */
+#include <sundials/sundials_nvector.h> /* definition of type N_Vector */
+#include <sundials/sundials_types.h>   /* definition of type realtype */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Definitions of interface function names */
+
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FCV_MALLOC         SUNDIALS_F77_FUNC(fcvmalloc, FCVMALLOC)
+#define FCV_REINIT         SUNDIALS_F77_FUNC(fcvreinit, FCVREINIT)
+#define FCV_SETIIN         SUNDIALS_F77_FUNC(fcvsetiin, FCVSETIIN)
+#define FCV_SETRIN         SUNDIALS_F77_FUNC(fcvsetrin, FCVSETRIN)
+#define FCV_EWTSET         SUNDIALS_F77_FUNC(fcvewtset, FCVEWTSET)
+#define FCV_DIAG           SUNDIALS_F77_FUNC(fcvdiag, FCVDIAG)
+#define FCV_DENSE          SUNDIALS_F77_FUNC(fcvdense, FCVDENSE)
+#define FCV_DENSESETJAC    SUNDIALS_F77_FUNC(fcvdensesetjac, FCVDENSESETJAC)
+#define FCV_BAND           SUNDIALS_F77_FUNC(fcvband, FCVBAND)
+#define FCV_BANDSETJAC     SUNDIALS_F77_FUNC(fcvbandsetjac, FCVBANDSETJAC)
+#define FCV_LAPACKDENSE    SUNDIALS_F77_FUNC(fcvlapackdense, FCVLAPACKDENSE)
+#define FCV_LAPACKDENSESETJAC   SUNDIALS_F77_FUNC(fcvlapackdensesetjac, FCVLAPACKDENSESETJAC)
+#define FCV_LAPACKBAND     SUNDIALS_F77_FUNC(fcvlapackband, FCVLAPACKBAND)
+#define FCV_LAPACKBANDSETJAC    SUNDIALS_F77_FUNC(fcvlapackbandsetjac, FCVLAPACKBANDSETJAC)
+#define FCV_KLU            SUNDIALS_F77_FUNC(fcvklu, FCVKLU)
+#define FCV_KLUREINIT      SUNDIALS_F77_FUNC(fcvklureinit, FCVKLUREINIT)
+#define FCV_SUPERLUMT      SUNDIALS_F77_FUNC(fcvsuperlumt, FCVSUPERLUMT)
+#define FCV_SPARSESETJAC   SUNDIALS_F77_FUNC(fcvsparsesetjac, FCVSPARSESETJAC)  
+#define FCV_SPTFQMR        SUNDIALS_F77_FUNC(fcvsptfqmr, FCVSPTFQMR)
+#define FCV_SPTFQMRREINIT  SUNDIALS_F77_FUNC(fcvsptfqmrreinit, FCVSPTFQMRREINIT)
+#define FCV_SPBCG          SUNDIALS_F77_FUNC(fcvspbcg, FCVSPBCG)
+#define FCV_SPBCGREINIT    SUNDIALS_F77_FUNC(fcvspbcgreinit, FCVSPBCGREINIT)
+#define FCV_SPGMR          SUNDIALS_F77_FUNC(fcvspgmr, FCVSPGMR)
+#define FCV_SPGMRREINIT    SUNDIALS_F77_FUNC(fcvspgmrreinit, FCVSPGMRREINIT)
+#define FCV_SPILSSETJAC    SUNDIALS_F77_FUNC(fcvspilssetjac, FCVSPILSSETJAC)
+#define FCV_SPILSSETPREC   SUNDIALS_F77_FUNC(fcvspilssetprec, FCVSPILSSETPREC)
+#define FCV_CVODE          SUNDIALS_F77_FUNC(fcvode, FCVODE)
+#define FCV_DKY            SUNDIALS_F77_FUNC(fcvdky, FCVDKY)
+#define FCV_FREE           SUNDIALS_F77_FUNC(fcvfree, FCVFREE)
+#define FCV_FUN            SUNDIALS_F77_FUNC(fcvfun, FCVFUN)
+#define FCV_DJAC           SUNDIALS_F77_FUNC(fcvdjac, FCVDJAC)
+#define FCV_BJAC           SUNDIALS_F77_FUNC(fcvbjac, FCVBJAC)
+#define FCV_SPJAC          SUNDIALS_F77_FUNC(fcvspjac, FCVSPJAC)
+#define FCV_PSOL           SUNDIALS_F77_FUNC(fcvpsol, FCVPSOL)
+#define FCV_PSET           SUNDIALS_F77_FUNC(fcvpset, FCVPSET)
+#define FCV_JTIMES         SUNDIALS_F77_FUNC(fcvjtimes, FCVJTIMES)
+#define FCV_EWT            SUNDIALS_F77_FUNC(fcvewt, FCVEWT)
+#define FCV_GETERRWEIGHTS  SUNDIALS_F77_FUNC(fcvgeterrweights, FCVGETERRWEIGHTS)
+#define FCV_GETESTLOCALERR SUNDIALS_F77_FUNC(fcvgetestlocalerr, FCVGETESTLOCALERR)
+
+#else
+
+#define FCV_MALLOC         fcvmalloc_
+#define FCV_REINIT         fcvreinit_
+#define FCV_SETIIN         fcvsetiin_
+#define FCV_SETRIN         fcvsetrin_
+#define FCV_EWTSET         fcvewtset_
+#define FCV_DIAG           fcvdiag_
+#define FCV_DENSE          fcvdense_
+#define FCV_DENSESETJAC    fcvdensesetjac_
+#define FCV_BAND           fcvband_
+#define FCV_BANDSETJAC     fcvbandsetjac_
+#define FCV_LAPACKDENSE    fcvlapackdense_
+#define FCV_LAPACKDENSESETJAC   fcvlapackdensesetjac_
+#define FCV_LAPACKBAND     fcvlapackband_
+#define FCV_LAPACKBANDSETJAC    fcvlapackbandsetjac_
+#define FCV_KLU            fcvklu_
+#define FCV_KLUREINIT      fcvklureinit_
+#define FCV_SUPERLUMT      fcvsuperlumt_
+#define FCV_SPARSESETJAC   fcvsparsesetjac_
+#define FCV_SPTFQMR        fcvsptfqmr_
+#define FCV_SPTFQMRREINIT  fcvsptfqmrreinit_
+#define FCV_SPBCG          fcvspbcg_
+#define FCV_SPBCGREINIT    fcvspbcgreinit_
+#define FCV_SPGMR          fcvspgmr_
+#define FCV_SPGMRREINIT    fcvspgmrreinit_
+#define FCV_SPILSSETJAC    fcvspilssetjac_
+#define FCV_SPILSSETPREC   fcvspilssetprec_
+#define FCV_CVODE          fcvode_
+#define FCV_DKY            fcvdky_
+#define FCV_FREE           fcvfree_
+#define FCV_FUN            fcvfun_
+#define FCV_DJAC           fcvdjac_
+#define FCV_BJAC           fcvbjac_
+#define FCV_SPJAC          fcvspjac_
+#define FCV_PSOL           fcvpsol_
+#define FCV_PSET           fcvpset_
+#define FCV_JTIMES         fcvjtimes_
+#define FCV_EWT            fcvewt_
+#define FCV_GETERRWEIGHTS  fcvgeterrweights_
+#define FCV_GETESTLOCALERR fcvgetestlocalerr_
+
+#endif
+
+  /* Type for user data */
+
+  typedef struct {
+    realtype *rpar;
+    long int *ipar;
+  } *FCVUserData;
+
+  /* Prototypes of exported functions */
+
+  void FCV_MALLOC(realtype *t0, realtype *y0,
+                  int *meth, int *itmeth, int *iatol,
+                  realtype *rtol, realtype *atol,
+                  long int *iout, realtype *rout,
+                  long int *ipar, realtype *rpar,
+                  int *ier);
+
+  void FCV_REINIT(realtype *t0, realtype *y0,
+                  int *iatol, realtype *rtol, realtype *atol,
+                  int *ier);
+
+  void FCV_SETIIN(char key_name[], long int *ival, int *ier);
+
+  void FCV_SETRIN(char key_name[], realtype *rval, int *ier);
+
+  void FCV_EWTSET(int *flag, int *ier);
+
+  void FCV_DIAG(int *ier);
+
+  void FCV_DENSE(long int *neq, int *ier);
+  void FCV_DENSESETJAC(int *flag, int *ier);
+
+  void FCV_BAND(long int *neq, long int *mupper, long int *mlower, int *ier);
+  void FCV_BANDSETJAC(int *flag, int *ier);
+
+  void FCV_LAPACKDENSE(int *neq, int *ier);
+  void FCV_LAPACKDENSESETJAC(int *flag, int *ier);
+  void FCV_LAPACKBAND(int *neq, int *mupper, int *mlower, int *ier);
+  void FCV_LAPACKBANDSETJAC(int *flag, int *ier);
+
+  void FCV_KLU(int *neq, int *nnz, int *sparsetype, int *ordering, int *ier);
+  void FCV_KLUREINIT(int *neq, int *nnz, int *reinit_type, int *ier);
+  void FCV_SUPERLUMT(int *nthreads, int *neq, int *nnz, int *ordering, int *ier);
+  void FCV_SPARSESETJAC(int *ier);
+
+  void FCV_SPGMR(int *pretype, int *gstype, int *maxl, realtype *delt, int *ier);
+  void FCV_SPGMRREINIT(int *pretype, int *gstype, realtype *delt, int *ier);
+
+  void FCV_SPBCG(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FCV_SPBCGREINIT(int *pretype, int *maxl, realtype *delt, int *ier);
+
+  void FCV_SPTFQMR(int *pretype, int *maxl, realtype *delt, int *ier);
+  void FCV_SPTFQMRREINIT(int *pretype, int *maxl, realtype *delt, int *ier);
+
+  void FCV_SPILSSETJAC(int *flag, int *ier);
+  void FCV_SPILSSETPREC(int *flag, int *ier);
+  
+  void FCV_CVODE(realtype *tout, realtype *t, realtype *y, int *itask, int *ier);
+
+  void FCV_DKY(realtype *t, int *k, realtype *dky, int *ier);
+
+  void FCV_GETERRWEIGHTS(realtype *eweight, int *ier);
+  void FCV_GETESTLOCALERR(realtype *ele, int *ier);
+
+  void FCV_FREE(void);
+
+
+  /* Prototypes: Functions Called by the CVODE Solver */
+  
+  int FCVf(realtype t, N_Vector y, N_Vector ydot, void *user_data);
+  
+  int FCVDenseJac(long int N, realtype t, 
+                  N_Vector y, N_Vector fy, 
+                  DlsMat J, void *user_data,
+                  N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FCVBandJac(long int N, long int mupper, long int mlower,
+                 realtype t, N_Vector y, N_Vector fy,
+                 DlsMat J, void *user_data,
+                 N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FCVLapackDenseJac(long int N, realtype t,
+                        N_Vector y, N_Vector fy, 
+                        DlsMat Jac, void *user_data,
+                        N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+  int FCVLapackBandJac(long int N, long int mupper, long int mlower,
+                       realtype t, N_Vector y, N_Vector fy, 
+                       DlsMat Jac, void *user_data,
+                       N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+  int FCVSparseJac(realtype t, N_Vector y, N_Vector fy, SlsMat J,
+		   void *user_data, N_Vector vtemp1,
+		   N_Vector vtemp2, N_Vector vtemp3);
+
+  int FCVPSet(realtype tn, N_Vector y, N_Vector fy, booleantype jok,
+              booleantype *jcurPtr, realtype gamma, void *user_data,
+              N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+  
+  int FCVPSol(realtype tn, N_Vector y, N_Vector fy, 
+              N_Vector r, N_Vector z,
+              realtype gamma, realtype delta,
+              int lr, void *user_data, N_Vector vtemp);
+  
+  int FCVJtimes(N_Vector v, N_Vector Jv, realtype t, 
+                N_Vector y, N_Vector fy,
+                void *user_data, N_Vector work);
+  
+  int FCVEwtSet(N_Vector y, N_Vector ewt, void *user_data);
+
+  /* Declarations for global variables shared amongst various routines */
+
+  extern N_Vector F2C_CVODE_vec;   /* defined in FNVECTOR module */
+
+  extern void *CV_cvodemem;        /* defined in fcvode.c */
+  extern long int *CV_iout;        /* defined in fcvode.c */
+  extern realtype *CV_rout;        /* defined in fcvode.c */
+  extern int CV_nrtfn;             /* defined in fcvode.c */
+  extern int CV_ls;                /* defined in fcvode.c */
+
+  /* Linear solver IDs */
+
+  enum { CV_LS_DENSE = 1, CV_LS_BAND = 2, CV_LS_DIAG = 3,
+         CV_LS_LAPACKDENSE = 4, CV_LS_LAPACKBAND = 5,
+	 CV_LS_KLU = 6, CV_LS_SUPERLUMT = 7, 
+	 CV_LS_SPGMR = 8, CV_LS_SPBCG = 9, CV_LS_SPTFQMR = 10 };
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvode/fcmix/fcvpreco.c b/src/cvode/fcmix/fcvpreco.c
new file mode 100644
index 0000000..dcf4a80
--- /dev/null
+++ b/src/cvode/fcmix/fcvpreco.c
@@ -0,0 +1,138 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4294 $
+ * $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh, Radu Serban and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * The C function FCVPSet is to interface between the CVSP*
+ * module and the user-supplied preconditioner setup routine FCVPSET.
+ * Note the use of the generic name FCV_PSET below.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"     /* actual fn. names, prototypes and global vars.*/
+#include "cvode_impl.h" /* definition of CVodeMem type                  */
+
+#include <cvode/cvode_spils.h>
+
+/*********************************************************************/
+
+/* Prototype of the Fortran routines */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FCV_PSET(realtype*, realtype*, realtype*,  /* T, Y, FY */
+                       booleantype*, booleantype*,       /* JOK, JCUR */
+                       realtype*, realtype*,             /* GAMMA, H */
+                       long int*, realtype*,             /* IPAR, RPAR */
+                       realtype*, realtype*, realtype*,  /* W1, W2, W3 */
+                       int*);                            /* IER */
+
+  extern void FCV_PSOL(realtype*, realtype*, realtype*,  /* T, Y, FY */
+                       realtype*, realtype*,             /* R, Z */
+                       realtype*, realtype*,             /* GAMMA, DELTA */
+                       int*,                             /* LR */
+                       long int*, realtype*,             /* IPAR, RPAR */
+                       realtype*,                        /* WRK */
+                       int*);                            /* IER */
+
+#ifdef __cplusplus
+}
+#endif
+
+/***************************************************************************/
+
+void FCV_SPILSSETPREC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = CVSpilsSetPreconditioner(CV_cvodemem, NULL, NULL);
+  } else {
+    *ier = CVSpilsSetPreconditioner(CV_cvodemem, FCVPSet, FCVPSol);
+  }
+}
+
+/***************************************************************************/
+
+/* C function FCVPSet to interface between CVODE and a Fortran subroutine
+   FCVPSET for setup of a Krylov preconditioner.
+   Addresses of t, y, fy, jok, gamma, h, vtemp1, vtemp2, vtemp3, and the 
+   address jcurPtr are passed to FCVPSET, using the routine
+   N_VGetArrayPointer from NVECTOR.
+   A return flag ier from FCVPSET is returned by FCVPSet.
+   Auxiliary data is assumed to be communicated by common blocks. */
+
+int FCVPSet(realtype t, N_Vector y, N_Vector fy, booleantype jok,
+            booleantype *jcurPtr, realtype gamma,
+            void *user_data,
+            N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier = 0;
+  realtype *ydata, *fydata, *v1data, *v2data, *v3data;
+  realtype h;
+  FCVUserData CV_userdata;
+
+  CVodeGetLastStep(CV_cvodemem, &h);
+
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_PSET(&t, ydata, fydata, &jok, jcurPtr, &gamma, &h,
+           CV_userdata->ipar, CV_userdata->rpar,
+           v1data, v2data, v3data, &ier);
+
+  return(ier);
+}
+
+/***************************************************************************/
+
+/* C function FCVPSol to interface between CVODE and a Fortran subroutine
+   FCVPSOL for solution of a Krylov preconditioner.
+   Addresses of t, y, fy, gamma, delta, lr, vtemp, r, and z are
+   passed to FCVPSOL, using the routine N_VGetArrayPointer from NVECTOR.
+   A return flag ier from FCVPSOL is returned by FCVPSol.
+   Auxiliary data is assumed to be communicated by Common blocks. */
+
+int FCVPSol(realtype t, N_Vector y, N_Vector fy, 
+            N_Vector r, N_Vector z,
+            realtype gamma, realtype delta,
+            int lr, void *user_data, N_Vector vtemp)
+{
+  int ier = 0;
+  realtype *ydata, *fydata, *vtdata, *rdata, *zdata;
+  FCVUserData CV_userdata;
+
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  vtdata  = N_VGetArrayPointer(vtemp);
+  rdata   = N_VGetArrayPointer(r);
+  zdata   = N_VGetArrayPointer(z);
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_PSOL(&t, ydata, fydata, rdata, zdata, &gamma, &delta, &lr, 
+           CV_userdata->ipar, CV_userdata->rpar, vtdata, &ier);
+
+  return(ier);
+}
diff --git a/src/cvode/fcmix/fcvroot.c b/src/cvode/fcmix/fcvroot.c
new file mode 100644
index 0000000..44eb352
--- /dev/null
+++ b/src/cvode/fcmix/fcvroot.c
@@ -0,0 +1,88 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4294 $
+ * $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * The FCVROOT module contains the routines necessary to use
+ * the rootfinding feature of the CVODE module and to interface
+ * with the user-supplied Fortran subroutine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fcvode.h"     /* actual fn. names, prototypes and global variables */
+#include "fcvroot.h"    /* prototypes of interfaces to CVODE                 */
+#include "cvode_impl.h" /* definition of CVodeMem type                       */
+
+/***************************************************************************/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+  extern void FCV_ROOTFN(realtype *, realtype*, realtype*,  /* T, Y, G    */
+                         long int*, realtype*,              /* IPAR, RPAR */
+                         int *ier);                         /* IER        */
+#ifdef __cplusplus
+}
+#endif
+
+/***************************************************************************/
+
+void FCV_ROOTINIT(int *nrtfn, int *ier)
+{
+  *ier = CVodeRootInit(CV_cvodemem, *nrtfn, (CVRootFn) FCVrootfunc);
+  CV_nrtfn = *nrtfn;
+
+  return;
+}
+
+/***************************************************************************/
+
+void FCV_ROOTINFO(int *nrtfn, int *info, int *ier)
+{
+  *ier = CVodeGetRootInfo(CV_cvodemem, info);
+  return; 
+}
+
+/***************************************************************************/
+
+void FCV_ROOTFREE(void)
+{
+  CVodeRootInit(CV_cvodemem, 0, NULL);
+
+  return;
+}
+
+/***************************************************************************/
+
+int FCVrootfunc(realtype t, N_Vector y, realtype *gout, void *user_data)
+{
+  int ier;
+  realtype *ydata;
+  FCVUserData CV_userdata;
+
+  ydata = N_VGetArrayPointer(y);
+
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_ROOTFN(&t, ydata, gout, CV_userdata->ipar, CV_userdata->rpar, &ier);
+
+  return(ier);
+}
+
diff --git a/src/cvode/fcmix/fcvroot.h b/src/cvode/fcmix/fcvroot.h
new file mode 100644
index 0000000..8ee21b0
--- /dev/null
+++ b/src/cvode/fcmix/fcvroot.h
@@ -0,0 +1,144 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the Fortran interface include file for the rootfinding
+ * feature of CVODE.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * ==============================================================================
+ *
+ *                   FCVROOT Interface Package
+ *
+ * The FCVROOT interface package allows programs written in FORTRAN to
+ * use the rootfinding feature of the CVODE solver module.
+ *
+ * The user-callable functions constituting the FCVROOT package are the
+ * following: FCVROOTINIT, FCVROOTINFO, and FCVROOTFREE. The corresponding
+ * CVODE subroutine called by each interface function is given below.
+ *
+ *   -----------------      -----------------------
+ *  | FCVROOT routine |    | CVODE function called |
+ *   -----------------      -----------------------
+ *      FCVROOTINIT     ->     CVodeRootInit
+ *      FCVROOTINFO     ->     CVodeGetRootInfo
+ *      FCVROOTFREE     ->     CVodeRootInit
+ *
+ * FCVROOTFN is a user-supplied subroutine defining the functions whose
+ * roots are sought.
+ *
+ * ==============================================================================
+ *
+ *                     Usage of the FCVROOT Interface Package
+ *
+ * 1. In order to use the rootfinding feature of the CVODE package the user must
+ * define the following subroutine:
+ *
+ *   SUBROUTINE FCVROOTFN (T, Y, G, IPAR, RPAR, IER)
+ *   DIMENSION Y(*), G(*), IPAR(*), RPAR(*)
+ *
+ * The arguments are:
+ *   T = independent variable value t  [input]
+ *   Y = dependent variable vector y  [input]
+ *   G = function values g(t,y)  [output]
+ *   IPAR, RPAR = user (integer and real) data [input/output]
+ *   IER = return flag (0 for success, a non-zero value if an error occurred.)
+ *
+ * 2. After calling FCVMALLOC but prior to calling FCVODE, the user must
+ * allocate and initialize memory for the FCVROOT module by making the
+ * following call:
+ *
+ *   CALL FCVROOTINIT (NRTFN, IER)
+ *
+ * The arguments are:
+ *   NRTFN = total number of root functions  [input]
+ *   IER   = return completion flag (0 = success, -1 = CVODE memory NULL and
+ *           -11  memory allocation error)  [output]
+ *
+ * 3. After calling FCVODE, to see whether a root was found, test the FCVODE
+ * return flag IER.  The value IER = 2 means one or more roots were found.
+ *
+ * 4. If a root was found, and if NRTFN > 1, then to determine which root
+ * functions G(*) were found to have a root, make the following call:
+ *     CALL FCVROOTINFO (NRTFN, INFO, IER)
+ * The arguments are:
+ *   NRTFN = total number of root functions  [input]
+ *   INFO  = integer array of length NRTFN, with values 0 or 1 [output]
+ *           For i = 1,...,NRTFN, G(i) was found to have a root if INFO(i) = 1.
+ *   IER   = completion flag (0 = success,  negative = failure)
+ *
+ * 5. The total number of calls made to the root function (FCVROOTFN), NGE,
+ * can be obtained from IOUT(12).
+ *
+ * If the FCVODE/CVODE memory block is reinitialized to solve a different
+ * problem via a call to FCVREINIT, then the counter variable NGE is cleared
+ * (reset to zero).
+ *
+ * 6. To free the memory resources allocated by a prior call to FCVROOTINIT make
+ * the following call:
+ *   CALL FCVROOTFREE
+ * See the CVODE documentation for additional information.
+ *
+ * ==============================================================================
+ */
+
+#ifndef _FCVROOT_H
+#define _FCVROOT_H
+
+/* header files */
+#include <sundials/sundials_nvector.h> /* definition of type N_Vector          */
+#include <sundials/sundials_types.h>   /* definition of SUNDIALS type realtype */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Definitions of interface function names */
+
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FCV_ROOTINIT SUNDIALS_F77_FUNC(fcvrootinit, FCVROOTINIT)
+#define FCV_ROOTINFO SUNDIALS_F77_FUNC(fcvrootinfo, FCVROOTINFO)
+#define FCV_ROOTFREE SUNDIALS_F77_FUNC(fcvrootfree, FCVROOTFREE)
+#define FCV_ROOTFN   SUNDIALS_F77_FUNC(fcvrootfn, FCVROOTFN)
+
+#else
+
+#define FCV_ROOTINIT fcvrootinit_
+#define FCV_ROOTINFO fcvrootinfo_
+#define FCV_ROOTFREE fcvrootfree_
+#define FCV_ROOTFN   fcvrootfn_
+
+#endif
+
+/* Prototypes of exported function */
+
+void FCV_ROOTINIT(int *nrtfn, int *ier);
+void FCV_ROOTINFO(int *nrtfn, int *info, int *ier);
+void FCV_ROOTFREE(void);
+
+/* Prototype of function called by CVODE module */
+
+int FCVrootfunc(realtype t, N_Vector y, realtype *gout, void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/src/cvode/fcmix/fcvsparse.c b/src/cvode/fcmix/fcvsparse.c
new file mode 100644
index 0000000..9dab7bc
--- /dev/null
+++ b/src/cvode/fcmix/fcvsparse.c
@@ -0,0 +1,81 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4815 $
+ * $Date: 2016-07-20 16:51:55 -0700 (Wed, 20 Jul 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ *                Ting Yan and Daniel R. Reynolds @ SMU
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2015, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fcvode.h"
+#include "cvode_impl.h"
+#include <cvode/cvode_sparse.h>
+
+/* Prototype of the Fortran routine */
+ 
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+ 
+extern void FCV_SPJAC(realtype *T, realtype *Y, 
+		       realtype *FY, int *N, int *NNZ, 
+		       realtype *JDATA, int *JRVALS, 
+		       int *JCPTRS, realtype *H, 
+		       long int *IPAR, realtype *RPAR, 
+		       realtype *V1, realtype *V2, 
+		       realtype *V3, int *ier);
+ 
+#ifdef __cplusplus
+}
+#endif
+ 
+/*=============================================================*/
+
+/* Fortran interface to C routine CVSlsSetSparseJacFn; see
+   fcvode.h for further information */
+void FCV_SPARSESETJAC(int *ier)
+{
+  *ier = CVSlsSetSparseJacFn(CV_cvodemem, FCVSparseJac);
+}
+
+/*=============================================================*/
+ 
+/* C interface to user-supplied Fortran routine FCVSPJAC; see 
+   fcvode.h for additional information  */
+int FCVSparseJac(realtype t, N_Vector y, N_Vector fy, 
+		 SlsMat J, void *user_data, N_Vector vtemp1, 
+		 N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *fydata, *v1data, *v2data, *v3data;
+  realtype h;
+  FCVUserData CV_userdata;
+
+  CVodeGetLastStep(CV_cvodemem, &h);
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  CV_userdata = (FCVUserData) user_data;
+
+  FCV_SPJAC(&t, ydata, fydata, &(J->NP), &(J->NNZ),
+	    J->data, J->indexvals, J->indexptrs, &h, 
+	    CV_userdata->ipar, CV_userdata->rpar, v1data, 
+	    v2data, v3data, &ier); 
+  return(ier);
+}
+
diff --git a/src/cvode/fcmix/fcvsuperlumt.c b/src/cvode/fcmix/fcvsuperlumt.c
new file mode 100644
index 0000000..eec7fbd
--- /dev/null
+++ b/src/cvode/fcmix/fcvsuperlumt.c
@@ -0,0 +1,42 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4402 $
+ * $Date: 2015-02-28 19:35:39 -0800 (Sat, 28 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2015, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the Fortran interface to
+ * the CVSuperLUMT solver. See fcvode.h for usage.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fcvode.h"
+#include "cvode_impl.h"
+#include <cvode/cvode_superlumt.h>
+ 
+/*
+ * ----------------------------------------------------------------
+ * Function : FCV_SUPERLUMT
+ * ----------------------------------------------------------------
+ */
+
+void FCV_SUPERLUMT(int *nthreads, int *neq, int *nnz, int *ordering, int *ier)
+{
+  *ier = CVSuperLUMT(CV_cvodemem, *nthreads, *neq, *nnz);
+  CVSuperLUMTSetOrdering(CV_cvodemem, *ordering);
+  CV_ls = CV_LS_SUPERLUMT;
+}
+
+
diff --git a/src/cvodes/CMakeLists.txt b/src/cvodes/CMakeLists.txt
new file mode 100644
index 0000000..38229df
--- /dev/null
+++ b/src/cvodes/CMakeLists.txt
@@ -0,0 +1,155 @@
+# ---------------------------------------------------------------
+# $Revision: 4759 $
+# $Date: 2016-05-18 16:25:17 -0700 (Wed, 18 May 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the CVODES library
+
+INSTALL(CODE "MESSAGE(\"\nInstall CVODES\n\")")
+
+# Add variable cvodes_SOURCES with the sources for the CVODES library
+SET(cvodes_SOURCES
+  cvodes.c
+  cvodea.c
+  cvodes_io.c
+  cvodea_io.c
+  cvodes_direct.c
+  cvodes_band.c
+  cvodes_dense.c
+  cvodes_diag.c
+  cvodes_sparse.c
+  cvodes_spils.c
+  cvodes_spbcgs.c
+  cvodes_spgmr.c
+  cvodes_sptfqmr.c
+  cvodes_bandpre.c
+  cvodes_bbdpre.c
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND cvodes_SOURCES cvodes_klu.c)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND cvodes_SOURCES cvodes_superlumt.c)
+ENDIF()
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the CVODES library
+SET(shared_SOURCES
+  sundials_nvector.c
+  sundials_math.c
+  sundials_direct.c
+  sundials_band.c
+  sundials_dense.c
+  sundials_iterative.c
+  sundials_sparse.c
+  sundials_spbcgs.c
+  sundials_spgmr.c
+  sundials_sptfqmr.c
+  )
+
+# Add prefix with complete path to the common SUNDIALS sources
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable cvodes_HEADERS with the exported CVODES header files
+SET(cvodes_HEADERS
+  cvodes_band.h
+  cvodes_bandpre.h
+  cvodes_bbdpre.h
+  cvodes_dense.h
+  cvodes_diag.h
+  cvodes_direct.h
+  cvodes.h
+  cvodes_sparse.h
+  cvodes_spbcgs.h
+  cvodes_spgmr.h
+  cvodes_spils.h
+  cvodes_sptfqmr.h
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND cvodes_HEADERS cvodes_klu.h)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND cvodes_HEADERS cvodes_superlumt.h)
+ENDIF()
+
+# Add prefix with complete path to the CVODES header files
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/cvodes/ cvodes_HEADERS)
+
+# If Blas/Lapack support was enabled, set-up additional file lists
+IF(LAPACK_FOUND)
+  SET(cvodes_BL_SOURCES cvodes_lapack.c)
+  SET(cvodes_BL_HEADERS cvodes_lapack.h)
+  ADD_PREFIX(${sundials_SOURCE_DIR}/include/cvodes/ cvodes_BL_HEADERS)
+ELSE(LAPACK_FOUND)
+  SET(cvodes_BL_SOURCES "")
+  SET(cvodes_BL_HEADERS "")
+ENDIF(LAPACK_FOUND)
+
+
+# Add source directories to include directories for access to
+# implementation only header files.
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(../sundials)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Build the static library
+IF(BUILD_STATIC_LIBS)
+
+  # Add the build target for the static CVODES library
+  ADD_LIBRARY(sundials_cvodes_static STATIC 
+    ${cvodes_SOURCES}  ${cvodes_BL_SOURCES}  ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_cvodes_static
+    PROPERTIES OUTPUT_NAME sundials_cvodes CLEAN_DIRECT_OUTPUT 1)
+
+  # Install the CVODES library
+  INSTALL(TARGETS sundials_cvodes_static DESTINATION lib)
+
+ENDIF(BUILD_STATIC_LIBS)
+
+# Build the shared library
+IF(BUILD_SHARED_LIBS)
+
+  # Add the build target for the CVODES library
+  ADD_LIBRARY(sundials_cvodes_shared SHARED 
+    ${cvodes_SOURCES}  ${cvodes_BL_SOURCES}  ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_cvodes_shared
+    PROPERTIES OUTPUT_NAME sundials_cvodes CLEAN_DIRECT_OUTPUT 1)
+
+  # Set VERSION and SOVERSION for shared libraries
+  SET_TARGET_PROPERTIES(sundials_cvodes_shared
+    PROPERTIES VERSION ${cvodeslib_VERSION} SOVERSION ${cvodeslib_SOVERSION})
+
+  # Install the CVODES library
+  INSTALL(TARGETS sundials_cvodes_shared DESTINATION lib)
+
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the CVODES header files
+INSTALL(FILES ${cvodes_HEADERS}  ${cvodes_BL_HEADERS} DESTINATION include/cvodes)
+
+# Install the CVODES implementation header file
+INSTALL(FILES cvodes_impl.h DESTINATION include/cvodes)
+
+#
+MESSAGE(STATUS "Added CVODES module")
diff --git a/src/cvodes/LICENSE b/src/cvodes/LICENSE
new file mode 100644
index 0000000..7fd3a7b
--- /dev/null
+++ b/src/cvodes/LICENSE
@@ -0,0 +1,60 @@
+Copyright (c) 2002-2015, Lawrence Livermore National Security. 
+Produced at the Lawrence Livermore National Laboratory 
+Written by A.C. Hindmarsh and R. Serban.
+UCRL-CODE-155950
+All rights reserved. 
+
+This file is part of CVODES.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the disclaimer below.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the disclaimer (as noted below)
+in the documentation and/or other materials provided with the
+distribution.
+
+3. Neither the name of the LLNS/LLNL nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
+LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF 
+ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Additional BSD Notice
+---------------------
+1. This notice is required to be provided under our contract with
+the U.S. Department of Energy (DOE). This work was produced at
+Lawrence Livermore National Laboratory under Contract 
+No. DE-AC52-07NA27344 with the DOE.
+
+2. Neither the United States Government nor Lawrence Livermore 
+National Security, LLC nor any of their employees, makes any warranty, 
+express or implied, or assumes any liability or responsibility for the
+accuracy, completeness, or usefulness of any information, apparatus,
+product, or process disclosed, or represents that its use would not
+infringe privately-owned rights.
+
+3. Also, reference herein to any specific commercial products, process, 
+or services by trade name, trademark, manufacturer or otherwise does 
+not necessarily constitute or imply its endorsement, recommendation, 
+or favoring by the United States Government or Lawrence Livermore 
+National Security, LLC. The views and opinions of authors expressed 
+herein do not necessarily state or reflect those of the United States 
+Government or Lawrence Livermore National Security, LLC, and shall 
+not be used for advertising or product endorsement purposes.
+
diff --git a/src/cvodes/README b/src/cvodes/README
new file mode 100644
index 0000000..cdebabc
--- /dev/null
+++ b/src/cvodes/README
@@ -0,0 +1,89 @@
+                           CVODES 
+                 Release 2.9.0, September, 2016
+               Alan C. Hindmarsh and Radu Serban
+          Center for Applied Scientific Computing, LLNL
+
+CVODES is a solver for stiff and nonstiff ODE systems (initial value 
+problem) given in explicit form y' = f(t,y,p) with sensitivity analysis 
+capabilities (both forward and adjoint modes). 
+It is written in ANSI standard C.
+
+CVODES can be used both on serial and parallel computers.  The 
+main difference is in the NVECTOR module of vector kernels.  The desired 
+version is obtained when compiling the example files by linking the 
+appropriate library of NVECTOR kernels.  In the parallel versions,
+communication between processors is done with MPI, with OpenMP, or with Pthreads.
+
+When used with the serial NVECTOR module, CVODES provides both direct (dense 
+and band) and preconditioned Krylov (iterative) linear solvers. Three different
+iterative solvers are available: scaled preconditioned GMRES (SPGMR), scaled 
+preconditioned BiCGStab (SPBCG), and scaled preconditioned TFQMR (SPTFQMR). 
+When CVODES is used with the parallel NVECTOR module, only the Krylov linear solvers 
+are available. (An approximate diagonal Jacobian option is available with both 
+versions.)  For the serial version, there is a banded preconditioner module 
+called CVBANDPRE available for use with the Krylov solvers, while for the parallel 
+version there is a preconditioner module called CVBBDPRE which provides a
+band-block-diagonal preconditioner.
+
+CVODES is part of a software family called SUNDIALS: SUite of Nonlinear and 
+DIfferential/ALgebraic equation Solvers [4].  This suite consists of CVODE, 
+CVODES, ARKode, IDA, IDAS, and KINSOL.  The directory structure of the 
+package supplied reflects this family relationship.
+
+The notes below provide the location of documentation, directions for the 
+installation of the CVODES package, and relevant references. Following that 
+is a brief history of revisions to the package.
+
+
+A. Documentation
+----------------
+
+/sundials/doc/cvodes/ contains PDF files for the CVODES User Guide [1] (cvs_guide.pdf)
+and the CVODES Examples [2] (cvs_examples.pdf) documents.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see the file /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see the "Installation Procedure"
+chapter in the CVODES User Guide.
+
+
+C. References
+-------------
+
+[1] A. C. Hindmarsh and R. Serban, "User Documentation for CVODES v2.9.0," 
+    LLNL technical report UCRL-SM-208111, March 2016.
+
+[2] A. C. Hindmarsh and R. Serban, "Example Programs for CVODES v2.9.0," 
+    LLNL technical report UCRL-SM-208115, March 2016.
+
+[3] R. Serban and A. C. Hindmarsh, "CVODES: the Sensitivity-Enabled ODE 
+    solver in SUNDIALS," Proceedings of IDETC/CIE 2005, Sept. 2005, 
+    Long Beach, CA.
+
+[4] A. C. Hindmarsh, P. N. Brown, K. E. Grant, S. L. Lee, R. Serban, 
+    D. E. Shumaker, and C. S. Woodward, "SUNDIALS, Suite of Nonlinear and 
+    Differential/Algebraic Equation Solvers," ACM Trans. Math. Softw., 
+    31(3), pp. 363-396, 2005.
+
+
+D. Releases
+-----------
+
+v. 2.9.0   - Sep. 2016
+v. 2.8.2   - Aug. 2015
+v. 2.8.1   - Mar. 2015
+v. 2.8.0   - Mar. 2015
+v. 2.7.0   - Mar. 2012
+v. 2.6.0   - May  2009
+v. 2.5.0   - Nov. 2006
+v. 2.4.0   - Mar. 2006
+v. 2.3.0   - May. 2005
+v. 2.2.0   - Apr. 2005
+v. 2.1.2   - Mar. 2005
+v. 2.1.1   - Jan. 2005
+v. 2.1.0   - Dec. 2004
+v. 1.0     - Jul. 2002 (first SUNDIALS release)
+
diff --git a/src/cvodes/cvodea.c b/src/cvodes/cvodea.c
new file mode 100644
index 0000000..d218fe7
--- /dev/null
+++ b/src/cvodes/cvodea.c
@@ -0,0 +1,2987 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4846 $
+ * $Date: 2016-08-03 15:47:48 -0700 (Wed, 03 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVODEA adjoint integrator.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes_impl.h"
+
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+/* 
+ * =================================================================
+ * MACRO DEFINITIONS
+ * =================================================================
+ */
+
+#define loop for(;;)
+
+/* 
+ * =================================================================
+ * CVODEA PRIVATE CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO        RCONST(0.0)        /* real 0.0   */
+#define ONE         RCONST(1.0)        /* real 1.0   */
+#define TWO         RCONST(2.0)        /* real 2.0   */
+#define HUNDRED     RCONST(100.0)      /* real 100.0 */
+#define FUZZ_FACTOR RCONST(1000000.0)  /* fuzz factor for IMget */
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTION PROTOTYPES
+ * =================================================================
+ */
+
+static CkpntMem CVAckpntInit(CVodeMem cv_mem);
+static CkpntMem CVAckpntNew(CVodeMem cv_mem);
+static void CVAckpntDelete(CkpntMem *ck_memPtr);
+
+static void CVAbckpbDelete(CVodeBMem *cvB_memPtr);
+
+static int  CVAdataStore(CVodeMem cv_mem, CkpntMem ck_mem);
+static int  CVAckpntGet(CVodeMem cv_mem, CkpntMem ck_mem); 
+
+static int CVAfindIndex(CVodeMem cv_mem, realtype t, 
+                        long int *indx, booleantype *newpoint);
+
+static booleantype CVAhermiteMalloc(CVodeMem cv_mem);
+static void CVAhermiteFree(CVodeMem cv_mem);
+static int CVAhermiteGetY(CVodeMem cv_mem, realtype t, N_Vector y, N_Vector *yS);
+static int CVAhermiteStorePnt(CVodeMem cv_mem, DtpntMem d);
+
+static booleantype CVApolynomialMalloc(CVodeMem cv_mem);
+static void CVApolynomialFree(CVodeMem cv_mem);
+static int CVApolynomialGetY(CVodeMem cv_mem, realtype t, N_Vector y, N_Vector *yS);
+static int CVApolynomialStorePnt(CVodeMem cv_mem, DtpntMem d);
+
+/* Wrappers */
+
+static int CVArhs(realtype t, N_Vector yB, 
+                  N_Vector yBdot, void *cvode_mem);
+
+static int CVArhsQ(realtype t, N_Vector yB, 
+                   N_Vector qBdot, void *cvode_mem);
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+/*
+ * CVodeAdjInit
+ *
+ * This routine initializes ASA and allocates space for the adjoint 
+ * memory structure.
+ */
+
+int CVodeAdjInit(void *cvode_mem, long int steps, int interp)
+{
+  CVadjMem ca_mem;
+  CVodeMem cv_mem;
+  long int i, ii;
+
+  /* ---------------
+   * Check arguments
+   * --------------- */
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeAdjInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem)cvode_mem;
+
+  if (steps <= 0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeAdjInit", MSGCV_BAD_STEPS);
+    return(CV_ILL_INPUT);
+  }
+
+  if ( (interp != CV_HERMITE) && (interp != CV_POLYNOMIAL) ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeAdjInit", MSGCV_BAD_INTERP);
+    return(CV_ILL_INPUT);
+  } 
+
+  /* ----------------------------
+   * Allocate CVODEA memory block
+   * ---------------------------- */
+
+  ca_mem = NULL;
+  ca_mem = (CVadjMem) malloc(sizeof(struct CVadjMemRec));
+  if (ca_mem == NULL) {
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODEA", "CVodeAdjInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  /* Attach ca_mem to CVodeMem structure */
+
+  cv_mem->cv_adj_mem = ca_mem;
+
+  /* ------------------------------
+   * Initialization of check points
+   * ------------------------------ */
+
+  /* Set Check Points linked list to NULL */
+  ca_mem->ck_mem = NULL;
+
+  /* Initialize nckpnts to ZERO */
+  ca_mem->ca_nckpnts = 0;
+
+  /* No interpolation data is available */
+  ca_mem->ca_ckpntData = NULL;
+
+  /* ------------------------------------
+   * Initialization of interpolation data
+   * ------------------------------------ */
+
+  /* Interpolation type */
+
+  ca_mem->ca_IMtype = interp;
+
+  /* Number of steps between check points */
+
+  ca_mem->ca_nsteps = steps;
+
+  /* Allocate space for the array of Data Point structures */
+
+  ca_mem->dt_mem = NULL;
+  ca_mem->dt_mem = (DtpntMem *) malloc((steps+1)*sizeof(struct DtpntMemRec *));
+  if (ca_mem->dt_mem == NULL) {
+    free(ca_mem); ca_mem = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODEA", "CVodeAdjInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  for (i=0; i<=steps; i++) { 
+    ca_mem->dt_mem[i] = NULL;
+    ca_mem->dt_mem[i] = (DtpntMem) malloc(sizeof(struct DtpntMemRec));
+    if (ca_mem->dt_mem[i] == NULL) {
+      for(ii=0; ii<i; ii++) {free(ca_mem->dt_mem[ii]); ca_mem->dt_mem[ii] = NULL;}
+      free(ca_mem->dt_mem); ca_mem->dt_mem = NULL;
+      free(ca_mem); ca_mem = NULL;
+      cvProcessError(cv_mem, CV_MEM_FAIL, "CVODEA", "CVodeAdjInit", MSGCV_MEM_FAIL);
+      return(CV_MEM_FAIL);
+    }
+  }
+
+  /* Attach functions for the appropriate interpolation module */
+  
+  switch(interp) {
+
+  case CV_HERMITE:
+    
+    ca_mem->ca_IMmalloc = CVAhermiteMalloc;
+    ca_mem->ca_IMfree   = CVAhermiteFree;
+    ca_mem->ca_IMget    = CVAhermiteGetY;
+    ca_mem->ca_IMstore  = CVAhermiteStorePnt;
+
+    break;
+    
+  case CV_POLYNOMIAL:
+  
+    ca_mem->ca_IMmalloc = CVApolynomialMalloc;
+    ca_mem->ca_IMfree   = CVApolynomialFree;
+    ca_mem->ca_IMget    = CVApolynomialGetY;
+    ca_mem->ca_IMstore  = CVApolynomialStorePnt;
+
+    break;
+
+  }
+
+  /* The interpolation module has not been initialized yet */
+
+  ca_mem->ca_IMmallocDone = FALSE;
+
+  /* By default we will store but not interpolate sensitivities
+   *  - IMstoreSensi will be set in CVodeF to FALSE if FSA is not enabled
+   *    or if the user can force this through CVodeSetAdjNoSensi 
+   *  - IMinterpSensi will be set in CVodeB to TRUE if IMstoreSensi is
+   *    TRUE and if at least one backward problem requires sensitivities */
+
+  ca_mem->ca_IMstoreSensi = TRUE;
+  ca_mem->ca_IMinterpSensi = FALSE;
+
+  /* ------------------------------------
+   * Initialize list of backward problems
+   * ------------------------------------ */
+
+  ca_mem->cvB_mem = NULL;
+  ca_mem->ca_bckpbCrt = NULL;
+  ca_mem->ca_nbckpbs = 0;
+
+  /* --------------------------------
+   * CVodeF and CVodeB not called yet
+   * -------------------------------- */
+
+  ca_mem->ca_firstCVodeFcall = TRUE;
+  ca_mem->ca_tstopCVodeFcall = FALSE;
+
+  ca_mem->ca_firstCVodeBcall = TRUE;
+
+  /* ---------------------------------------------
+   * ASA initialized and allocated
+   * --------------------------------------------- */
+
+  cv_mem->cv_adj = TRUE;
+  cv_mem->cv_adjMallocDone = TRUE;
+
+  return(CV_SUCCESS);
+} 
+
+/* CVodeAdjReInit
+ *
+ * This routine reinitializes the CVODEA memory structure assuming that the
+ * the number of steps between check points and the type of interpolation
+ * remain unchanged.
+ * The list of check points (and associated memory) is deleted.
+ * The list of backward problems is kept (however, new backward problems can 
+ * be added to this list by calling CVodeCreateB).
+ * The CVODES memory for the forward and backward problems can be reinitialized
+ * separately by calling CVodeReInit and CVodeReInitB, respectively.
+ * NOTE: if a completely new list of backward problems is also needed, then
+ *       simply free the adjoint memory (by calling CVodeAdjFree) and reinitialize
+ *       ASA with CVodeAdjInit.
+ */
+
+int CVodeAdjReInit(void *cvode_mem)
+{
+  CVadjMem ca_mem;
+  CVodeMem cv_mem;
+
+  /* Check cvode_mem */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeAdjReInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeAdjReInit", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Free current list of Check Points */
+
+  while (ca_mem->ck_mem != NULL) CVAckpntDelete(&(ca_mem->ck_mem));
+
+  /* Initialization of check points */
+  
+  ca_mem->ck_mem = NULL;
+  ca_mem->ca_nckpnts = 0;
+  ca_mem->ca_ckpntData = NULL;
+
+  /* CVodeF and CVodeB not called yet */
+ 
+  ca_mem->ca_firstCVodeFcall = TRUE;
+  ca_mem->ca_tstopCVodeFcall = FALSE;
+  ca_mem->ca_firstCVodeBcall = TRUE;
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeAdjFree
+ *
+ * This routine frees the memory allocated by CVodeAdjInit.
+ */
+
+void CVodeAdjFree(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  long int i;
+  
+  if (cvode_mem == NULL) return;
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_adjMallocDone) {
+
+    ca_mem = cv_mem->cv_adj_mem;
+
+    /* Delete check points one by one */
+    while (ca_mem->ck_mem != NULL) CVAckpntDelete(&(ca_mem->ck_mem));
+
+    /* Free vectors at all data points */
+    if (ca_mem->ca_IMmallocDone) {
+      ca_mem->ca_IMfree(cv_mem);
+    }
+    for(i=0; i<=ca_mem->ca_nsteps; i++) {
+      free(ca_mem->dt_mem[i]);
+      ca_mem->dt_mem[i] = NULL;
+    }
+    free(ca_mem->dt_mem);
+    ca_mem->dt_mem = NULL;
+
+    /* Delete backward problems one by one */
+    while (ca_mem->cvB_mem != NULL) CVAbckpbDelete(&(ca_mem->cvB_mem));
+
+    /* Free CVODEA memory */
+    free(ca_mem);
+    cv_mem->cv_adj_mem = NULL;
+
+  }
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Readibility Constants
+ * -----------------------------------------------------------------
+ */
+
+#define tinitial    (ca_mem->ca_tinitial)
+#define tfinal      (ca_mem->ca_tfinal)
+#define nckpnts     (ca_mem->ca_nckpnts)
+#define nsteps      (ca_mem->ca_nsteps)
+#define nbckpbs     (ca_mem->ca_nbckpbs)
+#define ckpntData   (ca_mem->ca_ckpntData)
+#define np          (ca_mem->ca_np)
+#define ytmp        (ca_mem->ca_ytmp)
+#define yStmp       (ca_mem->ca_yStmp)
+#define Y           (ca_mem->ca_Y)
+#define YS          (ca_mem->ca_YS)
+#define T           (ca_mem->ca_T)
+
+#define IMmalloc      (ca_mem->ca_IMmalloc)
+#define IMfree        (ca_mem->ca_IMfree)
+#define IMget         (ca_mem->ca_IMget)
+#define IMstore       (ca_mem->ca_IMstore)
+#define IMmallocDone  (ca_mem->ca_IMmallocDone)
+#define IMstoreSensi  (ca_mem->ca_IMstoreSensi)
+#define IMinterpSensi (ca_mem->ca_IMinterpSensi)
+#define IMnewData     (ca_mem->ca_IMnewData)
+
+#define uround     (cv_mem->cv_uround)
+#define zn         (cv_mem->cv_zn)
+#define nst        (cv_mem->cv_nst)
+#define q          (cv_mem->cv_q)
+#define qu         (cv_mem->cv_qu)
+#define qprime     (cv_mem->cv_qprime)
+#define qwait      (cv_mem->cv_qwait)
+#define L          (cv_mem->cv_L)
+#define gammap     (cv_mem->cv_gammap)
+#define h          (cv_mem->cv_h)
+#define hprime     (cv_mem->cv_hprime)
+#define hscale     (cv_mem->cv_hscale)
+#define eta        (cv_mem->cv_eta)
+#define etamax     (cv_mem->cv_etamax)
+#define tn         (cv_mem->cv_tn)
+#define tretlast   (cv_mem->cv_tretlast)
+#define tau        (cv_mem->cv_tau)
+#define tq         (cv_mem->cv_tq)
+#define l          (cv_mem->cv_l)
+#define saved_tq5  (cv_mem->cv_saved_tq5)
+#define forceSetup (cv_mem->cv_forceSetup)
+#define f          (cv_mem->cv_f)
+#define lmm        (cv_mem->cv_lmm)
+#define iter       (cv_mem->cv_iter)
+#define reltol     (cv_mem->cv_reltol)
+#define user_data  (cv_mem->cv_user_data)
+#define errfp      (cv_mem->cv_errfp)
+#define h0u        (cv_mem->cv_h0u)
+#define tempv      (cv_mem->cv_tempv)
+
+#define quadr      (cv_mem->cv_quadr)
+#define errconQ    (cv_mem->cv_errconQ)
+#define znQ        (cv_mem->cv_znQ)
+#define tempvQ     (cv_mem->cv_tempvQ)
+
+#define sensi      (cv_mem->cv_sensi)
+#define Ns         (cv_mem->cv_Ns)
+#define errconS    (cv_mem->cv_errconS)
+#define znS        (cv_mem->cv_znS)
+
+#define quadr_sensi (cv_mem->cv_quadr_sensi)
+#define errconQS    (cv_mem->cv_errconQS)
+#define znQS        (cv_mem->cv_znQS)
+
+#define t0_        (ck_mem->ck_t0)
+#define t1_        (ck_mem->ck_t1)
+#define zn_        (ck_mem->ck_zn)
+#define znQ_       (ck_mem->ck_znQ)
+#define znS_       (ck_mem->ck_znS)
+#define znQS_      (ck_mem->ck_znQS)
+#define quadr_     (ck_mem->ck_quadr)
+#define sensi_     (ck_mem->ck_sensi)
+#define quadr_sensi_ (ck_mem->ck_quadr_sensi)
+#define Ns_        (ck_mem->ck_Ns)
+#define zqm_       (ck_mem->ck_zqm)
+#define nst_       (ck_mem->ck_nst)
+#define tretlast_  (ck_mem->ck_tretlast)
+#define q_         (ck_mem->ck_q)
+#define qprime_    (ck_mem->ck_qprime)
+#define qwait_     (ck_mem->ck_qwait)
+#define L_         (ck_mem->ck_L)
+#define gammap_    (ck_mem->ck_gammap)
+#define h_         (ck_mem->ck_h)
+#define hprime_    (ck_mem->ck_hprime)
+#define hscale_    (ck_mem->ck_hscale)
+#define eta_       (ck_mem->ck_eta)
+#define etamax_    (ck_mem->ck_etamax)
+#define tau_       (ck_mem->ck_tau)
+#define tq_        (ck_mem->ck_tq)
+#define l_         (ck_mem->ck_l)
+#define saved_tq5_ (ck_mem->ck_saved_tq5)
+#define next_      (ck_mem->ck_next)
+
+
+/*
+ * CVodeF
+ *
+ * This routine integrates to tout and returns solution into yout.
+ * In the same time, it stores check point data every 'steps' steps. 
+ * 
+ * CVodeF can be called repeatedly by the user.
+ *
+ * ncheckPtr points to the number of check points stored so far.
+ */
+
+int CVodeF(void *cvode_mem, realtype tout, N_Vector yout, 
+           realtype *tret, int itask, int *ncheckPtr)
+{
+  CVadjMem ca_mem;
+  CVodeMem cv_mem;
+  CkpntMem tmp;
+  DtpntMem *dt_mem;
+  int flag, i;
+  booleantype iret, allocOK;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeF", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeF", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check for yout != NULL */
+  if (yout == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeF", MSGCV_YOUT_NULL);
+    return(CV_ILL_INPUT);
+  }
+  
+  /* Check for tret != NULL */
+  if (tret == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeF", MSGCV_TRET_NULL);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Check for valid itask */
+  if ( (itask != CV_NORMAL) && (itask != CV_ONE_STEP) ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeF", MSGCV_BAD_ITASK);
+    return(CV_ILL_INPUT);
+  }
+
+  /* All error checking done */
+
+  dt_mem = ca_mem->dt_mem;
+
+  /* If tstop is enabled, store some info */
+  if (cv_mem->cv_tstopset) {
+    ca_mem->ca_tstopCVodeFcall = TRUE;
+    ca_mem->ca_tstopCVodeF = cv_mem->cv_tstop;
+  }
+
+  /* We will call CVode in CV_ONE_STEP mode, regardless
+   * of what itask is, so flag if we need to return */
+  if (itask == CV_ONE_STEP) iret = TRUE;
+  else                      iret = FALSE;
+
+  /* On the first step:
+   *   - set tinitial
+   *   - initialize list of check points
+   *   - if needed, initialize the interpolation module
+   *   - load dt_mem[0]
+   * On subsequent steps, test if taking a new step is necessary. 
+   */
+  if ( ca_mem->ca_firstCVodeFcall ) {
+
+    tinitial = tn;
+
+    ca_mem->ck_mem = CVAckpntInit(cv_mem);
+    if (ca_mem->ck_mem == NULL) {
+      cvProcessError(cv_mem, CV_MEM_FAIL, "CVODEA", "CVodeF", MSGCV_MEM_FAIL);
+      return(CV_MEM_FAIL);
+    }
+
+    if ( !IMmallocDone ) {
+
+      /* Do we need to store sensitivities? */
+      if (!sensi) IMstoreSensi = FALSE;
+
+      /* Allocate space for interpolation data */
+      allocOK = IMmalloc(cv_mem);
+      if (!allocOK) {
+        cvProcessError(cv_mem, CV_MEM_FAIL, "CVODEA", "CVodeF", MSGCV_MEM_FAIL);
+        return(CV_MEM_FAIL);
+      }
+
+      /* Rename zn and, if needed, znS for use in interpolation */
+      for (i=0;i<L_MAX;i++) Y[i] = zn[i];
+      if (IMstoreSensi) {
+        for (i=0;i<L_MAX;i++) YS[i] = znS[i];
+      }
+
+      IMmallocDone = TRUE;
+
+    }
+
+    dt_mem[0]->t = ca_mem->ck_mem->ck_t0;
+    IMstore(cv_mem, dt_mem[0]);
+
+    ca_mem->ca_firstCVodeFcall = FALSE;
+
+  } else if ( (tn - tout)*h >= ZERO ) {
+
+    /* If tout was passed, return interpolated solution. 
+       No changes to ck_mem or dt_mem are needed. */
+    *tret = tout;
+    flag = CVodeGetDky(cv_mem, tout, 0, yout);
+    *ncheckPtr = nckpnts;
+    IMnewData = TRUE;
+    ckpntData = ca_mem->ck_mem;
+    np = nst % nsteps + 1;
+
+    return(flag);
+
+  }
+
+  /* Integrate to tout (in CV_ONE_STEP mode) while loading check points */
+  loop {
+
+    /* Perform one step of the integration */
+
+    flag = CVode(cv_mem, tout, yout, tret, CV_ONE_STEP);
+    if (flag < 0) break;
+
+    /* Test if a new check point is needed */
+
+    if ( nst % nsteps == 0 ) {
+
+      ca_mem->ck_mem->ck_t1 = *tret;
+
+      /* Create a new check point, load it, and append it to the list */
+      tmp = CVAckpntNew(cv_mem);
+      if (tmp == NULL) {
+        cvProcessError(cv_mem, CV_MEM_FAIL, "CVODEA", "CVodeF", MSGCV_MEM_FAIL);
+        flag = CV_MEM_FAIL;
+        break;
+      }
+      tmp->ck_next = ca_mem->ck_mem;
+      ca_mem->ck_mem = tmp;
+      nckpnts++;
+      forceSetup = TRUE;
+      
+      /* Reset i=0 and load dt_mem[0] */
+      dt_mem[0]->t = ca_mem->ck_mem->ck_t0;
+      IMstore(cv_mem, dt_mem[0]);
+
+    } else {
+
+      /* Load next point in dt_mem */
+      dt_mem[nst%nsteps]->t = *tret;
+      IMstore(cv_mem, dt_mem[nst%nsteps]);
+
+    }
+
+    /* Set t1 field of the current ckeck point structure
+       for the case in which there will be no future
+       check points */
+    ca_mem->ck_mem->ck_t1 = *tret;
+
+    /* tfinal is now set to *tret */
+    tfinal = *tret;
+
+    /* Return if in CV_ONE_STEP mode */
+    if (iret) break;
+
+    /* Return if tout reached */
+    if ( (*tret - tout)*h >= ZERO ) {
+      *tret = tout;
+      CVodeGetDky(cv_mem, tout, 0, yout);
+      /* Reset tretlast in cv_mem so that CVodeGetQuad and CVodeGetSens 
+       * evaluate quadratures and/or sensitivities at the proper time */
+      cv_mem->cv_tretlast = tout;
+      break;
+    }
+
+  } /* end of loop() */
+
+  /* Get ncheck from ca_mem */ 
+  *ncheckPtr = nckpnts;
+
+  /* Data is available for the last interval */
+  IMnewData = TRUE;
+  ckpntData = ca_mem->ck_mem;
+  np = nst % nsteps + 1;
+
+  return(flag);
+}
+
+
+
+/* 
+ * =================================================================
+ * FUNCTIONS FOR BACKWARD PROBLEMS
+ * =================================================================
+ */
+
+
+int CVodeCreateB(void *cvode_mem, int lmmB, int iterB, int *which)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem new_cvB_mem;
+  void *cvodeB_mem;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeCreateB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeCreateB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  }
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Allocate space for new CVodeBMem object */
+
+  new_cvB_mem = NULL;
+  new_cvB_mem = (CVodeBMem) malloc(sizeof(struct CVodeBMemRec));
+  if (new_cvB_mem == NULL) {
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODEA", "CVodeCreateB", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  /* Create and set a new CVODES object for the backward problem */
+
+  cvodeB_mem = CVodeCreate(lmmB, iterB);
+  if (cvodeB_mem == NULL) {
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODEA", "CVodeCreateB", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  CVodeSetUserData(cvodeB_mem, cvode_mem);
+
+  CVodeSetMaxHnilWarns(cvodeB_mem, -1);
+
+  CVodeSetErrHandlerFn(cvodeB_mem, cv_mem->cv_ehfun, cv_mem->cv_eh_data);
+  CVodeSetErrFile(cvodeB_mem, cv_mem->cv_errfp);
+
+  /* Set/initialize fields in the new CVodeBMem object, new_cvB_mem */
+
+  new_cvB_mem->cv_index   = nbckpbs;
+
+  new_cvB_mem->cv_mem     = (CVodeMem) cvodeB_mem;
+
+  new_cvB_mem->cv_f       = NULL;
+  new_cvB_mem->cv_fs      = NULL;
+
+  new_cvB_mem->cv_fQ      = NULL;
+  new_cvB_mem->cv_fQs     = NULL;
+
+  new_cvB_mem->cv_user_data  = NULL;
+
+  new_cvB_mem->cv_lmem    = NULL;
+  new_cvB_mem->cv_lfree   = NULL;
+  new_cvB_mem->cv_pmem    = NULL;
+  new_cvB_mem->cv_pfree   = NULL;
+
+  new_cvB_mem->cv_y       = NULL;
+
+  new_cvB_mem->cv_f_withSensi = FALSE;
+  new_cvB_mem->cv_fQ_withSensi = FALSE;
+
+  /* Attach the new object to the linked list cvB_mem */
+
+  new_cvB_mem->cv_next = ca_mem->cvB_mem;
+  ca_mem->cvB_mem = new_cvB_mem;
+  
+  /* Return the index of the newly created CVodeBMem object.
+   * This must be passed to CVodeInitB and to other ***B 
+   * functions to set optional inputs for this backward problem */
+
+  *which = nbckpbs;
+
+  nbckpbs++;
+
+  return(CV_SUCCESS);
+}
+
+int CVodeInitB(void *cvode_mem, int which, 
+               CVRhsFnB fB,
+               realtype tB0, N_Vector yB0)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeInitB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeInitB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check the value of which */
+
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeInitB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+  
+  /* Allocate and set the CVODES object */
+
+  flag = CVodeInit(cvodeB_mem, CVArhs, tB0, yB0);
+
+  if (flag != CV_SUCCESS) return(flag);
+
+  /* Copy fB function in cvB_mem */
+
+  cvB_mem->cv_f_withSensi = FALSE;
+  cvB_mem->cv_f = fB;
+
+  /* Allocate space and initialize the y Nvector in cvB_mem */
+
+  cvB_mem->cv_t0 = tB0;
+  cvB_mem->cv_y = N_VClone(yB0);
+  N_VScale(ONE, yB0, cvB_mem->cv_y);
+
+  return(CV_SUCCESS);
+}
+
+int CVodeInitBS(void *cvode_mem, int which, 
+                CVRhsFnBS fBs,
+                realtype tB0, N_Vector yB0)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeInitBS", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeInitBS", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check the value of which */
+
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeInitBS", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+  
+  /* Allocate and set the CVODES object */
+
+  flag = CVodeInit(cvodeB_mem, CVArhs, tB0, yB0);
+
+  if (flag != CV_SUCCESS) return(flag);
+
+  /* Copy fBs function in cvB_mem */
+
+  cvB_mem->cv_f_withSensi = TRUE;
+  cvB_mem->cv_fs = fBs;
+
+  /* Allocate space and initialize the y Nvector in cvB_mem */
+
+  cvB_mem->cv_t0 = tB0;
+  cvB_mem->cv_y = N_VClone(yB0);
+  N_VScale(ONE, yB0, cvB_mem->cv_y);
+
+  return(CV_SUCCESS);
+}
+
+
+int CVodeReInitB(void *cvode_mem, int which,
+                 realtype tB0, N_Vector yB0)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeReInitB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeReInitB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  }
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeReInitB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Reinitialize CVODES object */
+
+  flag = CVodeReInit(cvodeB_mem, tB0, yB0);
+
+  return(flag);
+}
+
+
+int CVodeSStolerancesB(void *cvode_mem, int which, realtype reltolB, realtype abstolB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSStolerancesB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSStolerancesB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check the value of which */
+
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSStolerancesB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Set tolerances */
+
+  flag = CVodeSStolerances(cvodeB_mem, reltolB, abstolB);
+
+  return(flag);
+}
+
+
+int CVodeSVtolerancesB(void *cvode_mem, int which, realtype reltolB, N_Vector abstolB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSVtolerancesB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSVtolerancesB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check the value of which */
+
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSVtolerancesB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Set tolerances */
+
+  flag = CVodeSVtolerances(cvodeB_mem, reltolB, abstolB);
+
+  return(flag);
+}
+
+
+int CVodeQuadInitB(void *cvode_mem, int which,
+                     CVQuadRhsFnB fQB, N_Vector yQB0)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeQuadInitB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeQuadInitB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeQuadInitB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeQuadInit(cvodeB_mem, CVArhsQ, yQB0);
+  if (flag != CV_SUCCESS) return(flag);
+
+  cvB_mem->cv_fQ_withSensi = FALSE;
+  cvB_mem->cv_fQ = fQB;
+
+  return(CV_SUCCESS);
+}
+
+int CVodeQuadInitBS(void *cvode_mem, int which,
+                      CVQuadRhsFnBS fQBs, N_Vector yQB0)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeQuadInitBS", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeQuadInitBS", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeQuadInitBS", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeQuadInit(cvodeB_mem, CVArhsQ, yQB0);
+  if (flag != CV_SUCCESS) return(flag);
+
+  cvB_mem->cv_fQ_withSensi = TRUE;
+  cvB_mem->cv_fQs = fQBs;
+
+  return(CV_SUCCESS);
+}
+
+int CVodeQuadReInitB(void *cvode_mem, int which, N_Vector yQB0)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeQuadReInitB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeQuadReInitB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeQuadReInitB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeQuadReInit(cvodeB_mem, yQB0);
+  if (flag != CV_SUCCESS) return(flag);
+
+  return(CV_SUCCESS);
+}
+
+int CVodeQuadSStolerancesB(void *cvode_mem, int which, realtype reltolQB, realtype abstolQB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeQuadSStolerancesB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeQuadSStolerancesB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeQuadSStolerancesB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeQuadSStolerances(cvodeB_mem, reltolQB, abstolQB);
+
+  return(flag);
+}
+
+int CVodeQuadSVtolerancesB(void *cvode_mem, int which, realtype reltolQB, N_Vector abstolQB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeQuadSStolerancesB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeQuadSStolerancesB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeQuadSStolerancesB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeQuadSVtolerances(cvodeB_mem, reltolQB, abstolQB);
+
+  return(flag);
+}
+
+/*
+ * CVodeB
+ *
+ * This routine performs the backward integration towards tBout
+ * of all backward problems that were defined.
+ * When necessary, it performs a forward integration between two 
+ * consecutive check points to update interpolation data.
+ *
+ * On a successful return, CVodeB returns CV_SUCCESS.
+ *
+ * NOTE that CVodeB DOES NOT return the solution for the backward
+ * problem(s). Use CVodeGetB to extract the solution at tBret
+ * for any given backward problem.
+ *
+ * If there are multiple backward problems and multiple check points,
+ * CVodeB may not succeed in getting all problems to take one step
+ * when called in ONE_STEP mode.
+ */
+
+int CVodeB(void *cvode_mem, realtype tBout, int itaskB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem, tmp_cvB_mem;
+  CkpntMem ck_mem;
+  int sign, flag=0;
+  realtype tfuzz, tBret, tBn;
+  booleantype gotCheckpoint, isActive, reachedTBout;
+  
+  /* Check if cvode_mem exists */
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  }
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check if any backward problem has been defined */
+
+  if ( nbckpbs == 0 ) {
+    cvProcessError(cv_mem, CV_NO_BCK, "CVODEA", "CVodeB", MSGCV_NO_BCK);
+    return(CV_NO_BCK);
+  }
+  cvB_mem = ca_mem->cvB_mem;
+
+  /* Check whether CVodeF has been called */
+
+  if ( ca_mem->ca_firstCVodeFcall ) {
+    cvProcessError(cv_mem, CV_NO_FWD, "CVODEA", "CVodeB", MSGCV_NO_FWD);
+    return(CV_NO_FWD);
+  }
+  sign = (tfinal - tinitial > ZERO) ? 1 : -1;
+
+  /* If this is the first call, loop over all backward problems and
+   *   - check that tB0 is valid
+   *   - check that tBout is ahead of tB0 in the backward direction
+   *   - check whether we need to interpolate forward sensitivities
+   */
+
+  if ( ca_mem->ca_firstCVodeBcall ) {
+
+    tmp_cvB_mem = cvB_mem;
+
+    while(tmp_cvB_mem != NULL) {
+
+      tBn = tmp_cvB_mem->cv_mem->cv_tn;
+
+      if ( (sign*(tBn-tinitial) < ZERO) || (sign*(tfinal-tBn) < ZERO) ) {
+        cvProcessError(cv_mem, CV_BAD_TB0, "CVODEA", "CVodeB", MSGCV_BAD_TB0,
+                       tmp_cvB_mem->cv_index);
+        return(CV_BAD_TB0);
+      }
+
+      if (sign*(tBn-tBout) <= ZERO) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeB", MSGCV_BAD_TBOUT,
+                       tmp_cvB_mem->cv_index);
+        return(CV_ILL_INPUT);
+      }
+
+      if ( tmp_cvB_mem->cv_f_withSensi || tmp_cvB_mem->cv_fQ_withSensi )
+          IMinterpSensi = TRUE;
+
+      tmp_cvB_mem = tmp_cvB_mem->cv_next;
+
+    }
+
+    if ( IMinterpSensi && !IMstoreSensi) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeB", MSGCV_BAD_SENSI);
+      return(CV_ILL_INPUT);
+    }
+
+    ca_mem->ca_firstCVodeBcall = FALSE;
+  }
+
+  /* Check if itaskB is legal */
+
+  if ( (itaskB != CV_NORMAL) && (itaskB != CV_ONE_STEP) ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeB", MSGCV_BAD_ITASKB);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Check if tBout is legal */
+
+  if ( (sign*(tBout-tinitial) < ZERO) || (sign*(tfinal-tBout) < ZERO) ) {
+    tfuzz = HUNDRED*uround*(SUNRabs(tinitial) + SUNRabs(tfinal));
+    if ( (sign*(tBout-tinitial) < ZERO) && (SUNRabs(tBout-tinitial) < tfuzz) ) {
+      tBout = tinitial;
+    } else {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeB", MSGCV_BAD_TBOUT);
+      return(CV_ILL_INPUT);
+    }
+  }
+
+  /* Loop through the check points and stop as soon as a backward
+   * problem has its tn value behind the current check point's t0_
+   * value (in the backward direction) */
+
+  ck_mem = ca_mem->ck_mem;
+
+  gotCheckpoint = FALSE;
+
+  loop {
+
+    tmp_cvB_mem = cvB_mem;
+    while(tmp_cvB_mem != NULL) {
+      tBn = tmp_cvB_mem->cv_mem->cv_tn;
+
+      if ( sign*(tBn-t0_) > ZERO ) {
+        gotCheckpoint = TRUE;
+        break;
+      }
+
+      if ( (itaskB==CV_NORMAL) && (tBn == t0_) && (sign*(tBout-t0_) >= ZERO) ) {
+        gotCheckpoint = TRUE;
+        break;
+      }
+
+      tmp_cvB_mem = tmp_cvB_mem->cv_next;
+    }
+
+    if (gotCheckpoint) break;
+
+    if (next_ == NULL) break;
+
+    ck_mem = next_;
+  }
+
+  /* Starting with the current check point from above, loop over check points
+     while propagating backward problems */
+
+  loop {
+
+    /* Store interpolation data if not available.
+       This is the 2nd forward integration pass */
+
+    if (ck_mem != ckpntData) {
+      flag = CVAdataStore(cv_mem, ck_mem);
+      if (flag != CV_SUCCESS) break;
+    }
+
+    /* Loop through all backward problems and, if needed,
+     * propagate their solution towards tBout */
+
+    tmp_cvB_mem = cvB_mem;
+    while (tmp_cvB_mem != NULL) {
+
+      /* Decide if current backward problem is "active" in this check point */
+
+      isActive = TRUE;
+
+      tBn = tmp_cvB_mem->cv_mem->cv_tn;
+
+      if ( (tBn == t0_) && (sign*(tBout-t0_) < ZERO ) ) isActive = FALSE;
+      if ( (tBn == t0_) && (itaskB==CV_ONE_STEP) ) isActive = FALSE;
+
+      if ( sign * (tBn - t0_) < ZERO ) isActive = FALSE;
+
+      if ( isActive ) {
+
+        /* Store the address of current backward problem memory 
+         * in ca_mem to be used in the wrapper functions */
+        ca_mem->ca_bckpbCrt = tmp_cvB_mem;
+
+        /* Integrate current backward problem */
+        CVodeSetStopTime(tmp_cvB_mem->cv_mem, t0_);
+        flag = CVode(tmp_cvB_mem->cv_mem, tBout, tmp_cvB_mem->cv_y, &tBret, itaskB);
+
+        /* Set the time at which we will report solution and/or quadratures */
+        tmp_cvB_mem->cv_tout = tBret;
+
+        /* If an error occurred, exit while loop */
+        if (flag < 0) break;
+
+      } else {
+        flag = CV_SUCCESS;
+        tmp_cvB_mem->cv_tout = tBn;
+      }
+
+      /* Move to next backward problem */
+
+      tmp_cvB_mem = tmp_cvB_mem->cv_next;
+    }
+
+    /* If an error occurred, return now */
+
+    if (flag <0) {
+      cvProcessError(cv_mem, flag, "CVODEA", "CVodeB", MSGCV_BACK_ERROR,
+                     tmp_cvB_mem->cv_index);
+      return(flag);
+    }
+
+    /* If in CV_ONE_STEP mode, return now (flag = CV_SUCCESS) */
+
+    if (itaskB == CV_ONE_STEP) break;
+
+    /* If all backward problems have succesfully reached tBout, return now */
+
+    reachedTBout = TRUE;
+
+    tmp_cvB_mem = cvB_mem;
+    while(tmp_cvB_mem != NULL) {
+      if ( sign*(tmp_cvB_mem->cv_tout - tBout) > ZERO ) {
+        reachedTBout = FALSE;
+        break;
+      }
+      tmp_cvB_mem = tmp_cvB_mem->cv_next;
+    }
+
+    if ( reachedTBout ) break;
+
+    /* Move check point in linked list to next one */
+
+    ck_mem = next_;
+
+  } 
+
+  return(flag);
+}
+
+
+int CVodeGetB(void *cvode_mem, int which, realtype *tret, N_Vector yB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeGetB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeGetB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeGetB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  } 
+
+  N_VScale(ONE, cvB_mem->cv_y, yB);
+  *tret = cvB_mem->cv_tout;
+
+  return(CV_SUCCESS);
+}
+
+
+/*
+ * CVodeGetQuadB
+ */
+
+int CVodeGetQuadB(void *cvode_mem, int which, realtype *tret, N_Vector qB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  long int nstB;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeGetQuadB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeGetQuadB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeGetQuadB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  } 
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* If the integration for this backward problem has not started yet,
+   * simply return the current value of qB (i.e. the final conditions) */
+
+  flag = CVodeGetNumSteps(cvodeB_mem, &nstB);
+  
+  if (nstB == 0) {
+    N_VScale(ONE, cvB_mem->cv_mem->cv_znQ[0], qB);
+    *tret = cvB_mem->cv_tout;
+  } else {
+    flag = CVodeGetQuad(cvodeB_mem, tret, qB);
+  }
+
+  return(flag);
+}
+
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTIONS FOR CHECK POINTS
+ * =================================================================
+ */
+
+/*
+ * CVAckpntInit
+ *
+ * This routine initializes the check point linked list with 
+ * information from the initial time.
+ */
+
+static CkpntMem CVAckpntInit(CVodeMem cv_mem)
+{
+  CkpntMem ck_mem;
+  int is;
+
+  /* Allocate space for ckdata */
+  ck_mem = NULL;
+  ck_mem = (CkpntMem) malloc(sizeof(struct CkpntMemRec));
+  if (ck_mem == NULL) return(NULL);
+
+  zn_[0] = N_VClone(tempv);
+  if (zn_[0] == NULL) {
+    free(ck_mem); ck_mem = NULL;
+    return(NULL);
+  }
+  
+  zn_[1] = N_VClone(tempv);
+  if (zn_[1] == NULL) {
+    N_VDestroy(zn_[0]);
+    free(ck_mem); ck_mem = NULL;
+    return(NULL);
+  }
+
+  /* zn_[qmax] was not allocated */
+  zqm_ = 0;
+
+  /* Load ckdata from cv_mem */
+  N_VScale(ONE, zn[0], zn_[0]);
+  t0_    = tn;
+  nst_   = 0;
+  q_     = 1;
+  h_     = 0.0;
+  
+  /* Do we need to carry quadratures */
+  quadr_ = quadr && errconQ;
+
+  if (quadr_) {
+
+    znQ_[0] = N_VClone(tempvQ);
+    if (znQ_[0] == NULL) {
+      N_VDestroy(zn_[0]);
+      N_VDestroy(zn_[1]);
+      free(ck_mem); ck_mem = NULL;
+      return(NULL);
+    }
+
+    N_VScale(ONE, znQ[0], znQ_[0]);
+
+  }
+
+  /* Do we need to carry sensitivities? */
+  sensi_ = sensi;
+
+  if (sensi_) {
+
+    Ns_ = Ns;
+
+    znS_[0] = N_VCloneVectorArray(Ns, tempv);
+    if (znS_[0] == NULL) {
+      N_VDestroy(zn_[0]);
+      N_VDestroy(zn_[1]);
+      if (quadr_) N_VDestroy(znQ_[0]);
+      free(ck_mem); ck_mem = NULL;
+      return(NULL);
+    }
+
+    for (is=0; is<Ns; is++)
+      N_VScale(ONE, znS[0][is], znS_[0][is]);
+
+  }
+
+  /* Do we need to carry quadrature sensitivities? */
+  quadr_sensi_ = quadr_sensi && errconQS;
+
+  if (quadr_sensi_) {
+    znQS_[0] = N_VCloneVectorArray(Ns, tempvQ);
+    if (znQS_[0] == NULL) {
+      N_VDestroy(zn_[0]);
+      N_VDestroy(zn_[1]);
+      if (quadr_) N_VDestroy(znQ_[0]);
+      N_VDestroyVectorArray(znS_[0], Ns);
+      free(ck_mem); ck_mem = NULL;
+      return(NULL);
+    }
+    
+    for (is=0; is<Ns; is++)
+      N_VScale(ONE, znQS[0][is], znQS_[0][is]);
+
+  }
+
+  /* Next in list */
+  next_  = NULL;
+
+  return(ck_mem);
+}
+
+/*
+ * CVAckpntNew
+ *
+ * This routine allocates space for a new check point and sets 
+ * its data from current values in cv_mem.
+ */
+
+static CkpntMem CVAckpntNew(CVodeMem cv_mem)
+{
+  CkpntMem ck_mem;
+  int j, jj, is, qmax; 
+
+  /* Allocate space for ckdata */
+  ck_mem = NULL;
+  ck_mem = (CkpntMem) malloc(sizeof(struct CkpntMemRec));
+  if (ck_mem == NULL) return(NULL);
+
+  /* Set cv_next to NULL */
+  ck_mem->ck_next = NULL;
+
+  /* Test if we need to allocate space for the last zn.
+   * NOTE: zn(qmax) may be needed for a hot restart, if an order
+   * increase is deemed necessary at the first step after a check point */
+  qmax = cv_mem->cv_qmax;
+  zqm_ = (q < qmax) ? qmax : 0;
+
+  for (j=0; j<=q; j++) {
+    zn_[j] = N_VClone(tempv);
+    if (zn_[j] == NULL) {
+      for (jj=0; jj<j; jj++) N_VDestroy(zn_[jj]);
+      free(ck_mem); ck_mem = NULL;
+      return(NULL);
+    }
+  }
+
+  if (q < qmax) {
+    zn_[qmax] = N_VClone(tempv);
+    if (zn_[qmax] == NULL) {
+      for (jj=0; jj<=q; jj++) N_VDestroy(zn_[jj]);
+      free(ck_mem); ck_mem = NULL;
+      return(NULL);
+    }
+  }
+
+  /* Test if we need to carry quadratures */
+  quadr_ = quadr && errconQ;
+
+  if (quadr_) {
+
+    for (j=0; j<=q; j++) {
+      znQ_[j] = N_VClone(tempvQ);
+      if(znQ_[j] == NULL) {
+        for (jj=0; jj<j; jj++) N_VDestroy(znQ_[jj]);
+        if (q < qmax) N_VDestroy(zn_[qmax]);
+        for (jj=0; jj<=q; j++) N_VDestroy(zn_[jj]);
+        free(ck_mem); ck_mem = NULL;
+        return(NULL);
+      }
+    }
+
+    if (q < qmax) {
+      znQ_[qmax] = N_VClone(tempvQ);
+      if (znQ_[qmax] == NULL) {
+        for (jj=0; jj<=q; jj++) N_VDestroy(znQ_[jj]);
+        N_VDestroy(zn_[qmax]);
+        for (jj=0; jj<=q; jj++) N_VDestroy(zn_[jj]);
+        free(ck_mem); ck_mem = NULL;
+        return(NULL);
+      }
+    }
+
+  }
+
+  /* Test if we need to carry sensitivities */
+  sensi_ = sensi;
+
+  if (sensi_) {
+
+    Ns_ = Ns;
+
+    for (j=0; j<=q; j++) {
+      znS_[j] = N_VCloneVectorArray(Ns, tempv);
+      if (znS_[j] == NULL) {
+        for (jj=0; jj<j; jj++) N_VDestroyVectorArray(znS_[jj], Ns);
+        if (quadr_) {
+          if (q < qmax) N_VDestroy(znQ_[qmax]);
+          for (jj=0; jj<=q; jj++) N_VDestroy(znQ_[jj]);
+        }
+        if (q < qmax) N_VDestroy(zn_[qmax]);
+        for (jj=0; jj<=q; jj++) N_VDestroy(zn_[jj]);
+        free(ck_mem); ck_mem = NULL;
+        return(NULL);
+      }
+    }
+
+    if ( q < qmax) {
+      znS_[qmax] = N_VCloneVectorArray(Ns, tempv);
+      if (znS_[qmax] == NULL) {
+        for (jj=0; jj<=q; jj++) N_VDestroyVectorArray(znS_[jj], Ns);
+        if (quadr_) {
+          N_VDestroy(znQ_[qmax]);
+          for (jj=0; jj<=q; jj++) N_VDestroy(znQ_[jj]);
+        }
+        N_VDestroy(zn_[qmax]);
+        for (jj=0; jj<=q; jj++) N_VDestroy(zn_[jj]);
+        free(ck_mem); ck_mem = NULL;
+        return(NULL);
+      }
+    }
+
+  }
+
+  /* Test if we need to carry quadrature sensitivities */
+  quadr_sensi_ = quadr_sensi && errconQS;
+
+  if (quadr_sensi_) {
+
+    for (j=0; j<=q; j++) {
+      znQS_[j] = N_VCloneVectorArray(Ns, tempvQ);
+      if (znQS_[j] == NULL) {
+        for (jj=0; jj<j; jj++) N_VDestroyVectorArray(znQS_[jj], Ns);
+        if (q < qmax) N_VDestroyVectorArray(znS_[qmax], Ns);
+        for (jj=0; jj<=q; jj++) N_VDestroyVectorArray(znS_[jj], Ns);
+        if (quadr_) {
+          if (q < qmax) N_VDestroy(znQ_[qmax]);
+          for (jj=0; jj<=q; jj++) N_VDestroy(znQ_[jj]);
+        }
+        if (q < qmax) N_VDestroy(zn_[qmax]);
+        for (jj=0; jj<=q; jj++) N_VDestroy(zn_[jj]);
+        free(ck_mem); ck_mem = NULL;
+        return(NULL);
+      }
+    }
+
+    if ( q < qmax) {
+      znQS_[qmax] = N_VCloneVectorArray(Ns, tempvQ);
+      if (znQS_[qmax] == NULL) {
+        for (jj=0; jj<=q; jj++) N_VDestroyVectorArray(znQS_[jj], Ns);
+        N_VDestroyVectorArray(znS_[qmax], Ns);
+        for (jj=0; jj<=q; jj++) N_VDestroyVectorArray(znS_[jj], Ns);
+        if (quadr_) {
+          N_VDestroy(znQ_[qmax]);
+          for (jj=0; jj<=q; jj++) N_VDestroy(zn_[jj]);
+        }
+        N_VDestroy(zn_[qmax]);
+        for (jj=0; jj<=q; jj++) N_VDestroy(zn_[jj]);
+        free(ck_mem); ck_mem = NULL;
+        return(NULL);
+      }
+    }
+
+  }
+
+  /* Load check point data from cv_mem */
+
+  for (j=0; j<=q; j++) N_VScale(ONE, zn[j], zn_[j]);
+  if ( q < qmax ) N_VScale(ONE, zn[qmax], zn_[qmax]);
+
+  if (quadr_) {
+    for (j=0; j<=q; j++) N_VScale(ONE, znQ[j], znQ_[j]);
+    if ( q < qmax ) N_VScale(ONE, znQ[qmax], znQ_[qmax]);
+  }
+
+  if (sensi_) {
+    for (is=0; is<Ns; is++) {
+      for (j=0; j<=q; j++) N_VScale(ONE, znS[j][is], znS_[j][is]);
+      if ( q < qmax ) N_VScale(ONE, znS[qmax][is], znS_[qmax][is]);
+    }
+  }
+
+  if (quadr_sensi_) {
+    for (is=0; is<Ns; is++) {
+      for (j=0; j<=q; j++) N_VScale(ONE, znQS[j][is], znQS_[j][is]);
+      if ( q < qmax ) N_VScale(ONE, znQS[qmax][is], znQS_[qmax][is]);
+    }
+  }
+
+  for (j=0; j<=L_MAX; j++)     tau_[j] = tau[j];
+  for (j=0; j<=NUM_TESTS; j++) tq_[j] = tq[j];
+  for (j=0; j<=q; j++)         l_[j] = l[j];
+  nst_       = nst;
+  tretlast_  = tretlast;
+  q_         = q;
+  qprime_    = qprime;
+  qwait_     = qwait;
+  L_         = L;
+  gammap_    = gammap;
+  h_         = h;
+  hprime_    = hprime;
+  hscale_    = hscale;
+  eta_       = eta;
+  etamax_    = etamax;
+  t0_        = tn;
+  saved_tq5_ = saved_tq5;
+
+  return(ck_mem);
+}
+
+/*
+ * CVAckpntDelete
+ *
+ * This routine deletes the first check point in list and returns
+ * the new list head
+ */
+
+static void CVAckpntDelete(CkpntMem *ck_memPtr)
+{
+  CkpntMem tmp;
+  int j;
+
+  if (*ck_memPtr == NULL) return;
+
+  /* store head of list */
+  tmp = *ck_memPtr;
+
+  /* move head of list */
+  *ck_memPtr = (*ck_memPtr)->ck_next;
+
+  /* free N_Vectors in tmp */
+  for (j=0;j<=tmp->ck_q;j++) N_VDestroy(tmp->ck_zn[j]);
+  if (tmp->ck_zqm != 0) N_VDestroy(tmp->ck_zn[tmp->ck_zqm]);
+
+  /* free N_Vectors for quadratures in tmp 
+   * Note that at the check point at t_initial, only znQ_[0] 
+   * was allocated */
+  if (tmp->ck_quadr) {
+
+    if (tmp->ck_next != NULL) {
+      for (j=0;j<=tmp->ck_q;j++) N_VDestroy(tmp->ck_znQ[j]);
+      if (tmp->ck_zqm != 0) N_VDestroy(tmp->ck_znQ[tmp->ck_zqm]);
+    } else {
+      N_VDestroy(tmp->ck_znQ[0]);
+    }
+    
+  }
+
+  /* free N_Vectors for sensitivities in tmp
+   * Note that at the check point at t_initial, only znS_[0] 
+   * was allocated */
+  if (tmp->ck_sensi) {
+    
+    if (tmp->ck_next != NULL) {
+      for (j=0;j<=tmp->ck_q;j++) N_VDestroyVectorArray(tmp->ck_znS[j], tmp->ck_Ns);
+      if (tmp->ck_zqm != 0) N_VDestroyVectorArray(tmp->ck_znS[tmp->ck_zqm], tmp->ck_Ns);
+    } else {
+      N_VDestroyVectorArray(tmp->ck_znS[0], tmp->ck_Ns);
+    }
+    
+  }
+
+  /* free N_Vectors for quadrature sensitivities in tmp
+   * Note that at the check point at t_initial, only znQS_[0] 
+   * was allocated */
+  if (tmp->ck_quadr_sensi) {
+    
+    if (tmp->ck_next != NULL) {
+      for (j=0;j<=tmp->ck_q;j++) N_VDestroyVectorArray(tmp->ck_znQS[j], tmp->ck_Ns);
+      if (tmp->ck_zqm != 0) N_VDestroyVectorArray(tmp->ck_znQS[tmp->ck_zqm], tmp->ck_Ns);
+    } else {
+      N_VDestroyVectorArray(tmp->ck_znQS[0], tmp->ck_Ns);
+    }
+    
+  }
+
+  free(tmp); tmp = NULL;
+
+}
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTIONS FOR BACKWARD PROBLEMS
+ * =================================================================
+ */
+
+static void CVAbckpbDelete(CVodeBMem *cvB_memPtr)
+{
+  CVodeBMem tmp;
+  void *cvode_mem;
+
+  if (*cvB_memPtr != NULL) {
+
+    /* Save head of the list */
+    tmp = *cvB_memPtr;
+
+    /* Move head of the list */
+    *cvB_memPtr = (*cvB_memPtr)->cv_next;
+
+    /* Free CVODES memory in tmp */
+    cvode_mem = (void *)(tmp->cv_mem);
+    CVodeFree(&cvode_mem);
+
+    /* Free linear solver memory */
+    if (tmp->cv_lfree != NULL) tmp->cv_lfree(tmp);
+
+    /* Free preconditioner memory */
+    if (tmp->cv_pfree != NULL) tmp->cv_pfree(tmp);
+
+    /* Free workspace Nvector */
+    N_VDestroy(tmp->cv_y);
+
+    free(tmp); tmp = NULL;
+
+  }
+
+}
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTIONS FOR INTERPOLATION
+ * =================================================================
+ */
+
+/*
+ * CVAdataStore
+ *
+ * This routine integrates the forward model starting at the check
+ * point ck_mem and stores y and yprime at all intermediate steps.
+ *
+ * Return values:
+ * CV_SUCCESS
+ * CV_REIFWD_FAIL
+ * CV_FWD_FAIL
+ */
+
+static int CVAdataStore(CVodeMem cv_mem, CkpntMem ck_mem)
+{
+  CVadjMem ca_mem;
+  DtpntMem *dt_mem;
+  realtype t;
+  long int i;
+  int flag, sign;
+
+  ca_mem = cv_mem->cv_adj_mem;
+  dt_mem = ca_mem->dt_mem;
+
+  /* Initialize cv_mem with data from ck_mem */
+  flag = CVAckpntGet(cv_mem, ck_mem);
+  if (flag != CV_SUCCESS)
+    return(CV_REIFWD_FAIL);
+
+  /* Set first structure in dt_mem[0] */
+  dt_mem[0]->t = t0_;
+  IMstore(cv_mem, dt_mem[0]);
+
+  /* Decide whether TSTOP must be activated */
+  if (ca_mem->ca_tstopCVodeFcall) {
+    CVodeSetStopTime(cv_mem, ca_mem->ca_tstopCVodeF);
+  }
+
+  sign = (tfinal - tinitial > ZERO) ? 1 : -1;
+
+
+  /* Run CVode to set following structures in dt_mem[i] */
+  i = 1;
+  do {
+
+    flag = CVode(cv_mem, t1_, ytmp, &t, CV_ONE_STEP);
+    if (flag < 0) return(CV_FWD_FAIL);
+
+    dt_mem[i]->t = t;
+    IMstore(cv_mem, dt_mem[i]);
+    i++;
+
+  } while ( sign*(t1_ - t) > ZERO );
+
+
+  IMnewData = TRUE;     /* New data is now available    */
+  ckpntData = ck_mem;   /* starting at this check point */
+  np = i;               /* and we have this many points */
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVAckpntGet
+ *
+ * This routine prepares CVODES for a hot restart from
+ * the check point ck_mem
+ */
+
+static int CVAckpntGet(CVodeMem cv_mem, CkpntMem ck_mem) 
+{
+  int flag, j, is, qmax;
+
+  if (next_ == NULL) {
+
+    /* In this case, we just call the reinitialization routine,
+     * but make sure we use the same initial stepsize as on 
+     * the first run. */
+
+    CVodeSetInitStep(cv_mem, h0u);
+
+    flag = CVodeReInit(cv_mem, t0_, zn_[0]);
+    if (flag != CV_SUCCESS) return(flag);
+
+    if (quadr_) {
+      flag = CVodeQuadReInit(cv_mem, znQ_[0]);
+      if (flag != CV_SUCCESS) return(flag);
+    }
+
+    if (sensi_) {
+      flag = CVodeSensReInit(cv_mem, cv_mem->cv_ism, znS_[0]);
+      if (flag != CV_SUCCESS) return(flag);
+    }
+
+    if (quadr_sensi_) {
+      flag = CVodeQuadSensReInit(cv_mem, znQS_[0]);
+      if (flag != CV_SUCCESS) return(flag);
+    }
+
+  } else {
+    
+    qmax = cv_mem->cv_qmax;
+
+    /* Copy parameters from check point data structure */
+
+    nst       = nst_;
+    tretlast  = tretlast_;
+    q         = q_;
+    qprime    = qprime_;
+    qwait     = qwait_;
+    L         = L_;
+    gammap    = gammap_;
+    h         = h_;
+    hprime    = hprime_;
+    hscale    = hscale_;
+    eta       = eta_;
+    etamax    = etamax_;
+    tn        = t0_;
+    saved_tq5 = saved_tq5_;
+    
+    /* Copy the arrays from check point data structure */
+
+    for (j=0; j<=q; j++) N_VScale(ONE, zn_[j], zn[j]);
+    if ( q < qmax ) N_VScale(ONE, zn_[qmax], zn[qmax]);
+
+    if (quadr_) {
+      for (j=0; j<=q; j++) N_VScale(ONE, znQ_[j], znQ[j]);
+      if ( q < qmax ) N_VScale(ONE, znQ_[qmax], znQ[qmax]);
+    }
+
+    if (sensi_) {
+      for (is=0; is<Ns; is++) {
+        for (j=0; j<=q; j++) N_VScale(ONE, znS_[j][is], znS[j][is]);
+        if ( q < qmax ) N_VScale(ONE, znS_[qmax][is], znS[qmax][is]);
+      }
+    }
+
+    if (quadr_sensi_) {
+      for (is=0; is<Ns; is++) {
+        for (j=0; j<=q; j++) N_VScale(ONE, znQS_[j][is], znQS[j][is]);
+        if ( q < qmax ) N_VScale(ONE, znQS_[qmax][is], znQS[qmax][is]);
+      }
+    }
+
+    for (j=0; j<=L_MAX; j++)     tau[j] = tau_[j];
+    for (j=0; j<=NUM_TESTS; j++) tq[j] = tq_[j];
+    for (j=0; j<=q; j++)         l[j] = l_[j];
+    
+    /* Force a call to setup */
+
+    forceSetup = TRUE;
+
+  }
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions for interpolation
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * CVAfindIndex
+ *
+ * Finds the index in the array of data point strctures such that
+ *     dt_mem[indx-1].t <= t < dt_mem[indx].t
+ * If indx is changed from the previous invocation, then newpoint = TRUE
+ *
+ * If t is beyond the leftmost limit, but close enough, indx=0.
+ *
+ * Returns CV_SUCCESS if successful and CV_GETY_BADT if unable to
+ * find indx (t is too far beyond limits).
+ */
+
+static int CVAfindIndex(CVodeMem cv_mem, realtype t, 
+                        long int *indx, booleantype *newpoint)
+{
+  CVadjMem ca_mem;
+  static long int ilast;
+  DtpntMem *dt_mem;
+  int sign;
+  booleantype to_left, to_right;
+
+  ca_mem = cv_mem->cv_adj_mem;
+  dt_mem = ca_mem->dt_mem;
+
+  *newpoint = FALSE;
+
+  /* Find the direction of integration */
+  sign = (tfinal - tinitial > ZERO) ? 1 : -1;
+
+  /* If this is the first time we use new data */
+  if (IMnewData) {
+    ilast     = np-1;
+    *newpoint = TRUE;
+    IMnewData   = FALSE;
+  }
+
+  /* Search for indx starting from ilast */
+  to_left  = ( sign*(t - dt_mem[ilast-1]->t) < ZERO);
+  to_right = ( sign*(t - dt_mem[ilast]->t)   > ZERO);
+
+  if ( to_left ) {
+    /* look for a new indx to the left */
+
+    *newpoint = TRUE;
+    
+    *indx = ilast;
+    loop {
+      if ( *indx == 0 ) break;
+      if ( sign*(t - dt_mem[*indx-1]->t) <= ZERO ) (*indx)--;
+      else                                         break;
+    }
+
+    if ( *indx == 0 )
+      ilast = 1;
+    else
+      ilast = *indx;
+
+    if ( *indx == 0 ) {
+      /* t is beyond leftmost limit. Is it too far? */  
+      if ( SUNRabs(t - dt_mem[0]->t) > FUZZ_FACTOR * uround ) {
+        return(CV_GETY_BADT);
+      }
+    }
+
+  } else if ( to_right ) {
+    /* look for a new indx to the right */
+
+    *newpoint = TRUE;
+
+    *indx = ilast;
+    loop {
+      if ( sign*(t - dt_mem[*indx]->t) > ZERO) (*indx)++;
+      else                                     break;
+    }
+
+    ilast = *indx;
+
+
+  } else {
+    /* ilast is still OK */
+
+    *indx = ilast;
+
+  }
+
+  return(CV_SUCCESS);
+
+
+}
+
+/*
+ * CVodeGetAdjY
+ *
+ * This routine returns the interpolated forward solution at time t.
+ * The user must allocate space for y.
+ */
+
+int CVodeGetAdjY(void *cvode_mem, realtype t, N_Vector y)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  int flag;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeGetAdjY", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  flag = IMget(cv_mem, t, y, NULL);
+
+  return(flag);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions specific to cubic Hermite interpolation
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * CVAhermiteMalloc
+ *
+ * This routine allocates memory for storing information at all
+ * intermediate points between two consecutive check points. 
+ * This data is then used to interpolate the forward solution 
+ * at any other time.
+ */
+
+static booleantype CVAhermiteMalloc(CVodeMem cv_mem)
+{
+  CVadjMem ca_mem;
+  DtpntMem *dt_mem;
+  HermiteDataMem content;
+  long int i, ii=0;
+  booleantype allocOK;
+
+  allocOK = TRUE;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Allocate space for the vectors ytmp and yStmp */
+
+  ytmp = N_VClone(tempv);
+  if (ytmp == NULL) {
+    return(FALSE);
+  }
+
+  if (IMstoreSensi) {
+    yStmp = N_VCloneVectorArray(Ns, tempv);
+    if (yStmp == NULL) {
+      N_VDestroy(ytmp);
+      return(FALSE);
+    }
+  }
+
+  /* Allocate space for the content field of the dt structures */
+
+  dt_mem = ca_mem->dt_mem;
+
+  for (i=0; i<=nsteps; i++) {
+
+    content = NULL;
+    content = (HermiteDataMem) malloc(sizeof(struct HermiteDataMemRec));
+    if (content == NULL) {
+      ii = i;
+      allocOK = FALSE;
+      break;
+    }
+
+    content->y = N_VClone(tempv);
+    if (content->y == NULL) {
+      free(content); content = NULL;
+      ii = i;
+      allocOK = FALSE;
+      break;
+    }
+
+    content->yd = N_VClone(tempv);
+    if (content->yd == NULL) {
+      N_VDestroy(content->y);
+      free(content); content = NULL;
+      ii = i;
+      allocOK = FALSE;
+      break;
+    }
+
+    if (IMstoreSensi) {
+
+      content->yS = N_VCloneVectorArray(Ns, tempv);
+      if (content->yS == NULL) {
+        N_VDestroy(content->y);
+        N_VDestroy(content->yd);
+        free(content); content = NULL;
+        ii = i;
+        allocOK = FALSE;
+        break;
+      }
+
+      content->ySd = N_VCloneVectorArray(Ns, tempv);
+      if (content->ySd == NULL) {
+        N_VDestroy(content->y);
+        N_VDestroy(content->yd);
+        N_VDestroyVectorArray(content->yS, Ns);
+        free(content); content = NULL;
+        ii = i;
+        allocOK = FALSE;
+        break;
+      }
+      
+    }
+    
+    dt_mem[i]->content = content;
+
+  } 
+
+  /* If an error occurred, deallocate and return */
+
+  if (!allocOK) {
+
+    N_VDestroy(ytmp);
+
+    if (IMstoreSensi) {
+      N_VDestroyVectorArray(yStmp, Ns);
+    }
+
+    for (i=0; i<ii; i++) {
+      content = (HermiteDataMem) (dt_mem[i]->content);
+      N_VDestroy(content->y);
+      N_VDestroy(content->yd);
+      if (IMstoreSensi) {
+        N_VDestroyVectorArray(content->yS, Ns);
+        N_VDestroyVectorArray(content->ySd, Ns);
+      }
+      free(dt_mem[i]->content); dt_mem[i]->content = NULL;
+    }
+
+  }
+
+  return(allocOK);
+}
+
+/*
+ * CVAhermiteFree
+ *
+ * This routine frees the memory allocated for data storage.
+ */
+
+static void CVAhermiteFree(CVodeMem cv_mem)
+{  
+  CVadjMem ca_mem;
+  DtpntMem *dt_mem;
+  HermiteDataMem content;
+  long int i;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  N_VDestroy(ytmp);
+
+  if (IMstoreSensi) {
+    N_VDestroyVectorArray(yStmp, Ns);
+  }
+
+  dt_mem = ca_mem->dt_mem;
+
+  for (i=0; i<=nsteps; i++) {
+    content = (HermiteDataMem) (dt_mem[i]->content);
+    N_VDestroy(content->y);
+    N_VDestroy(content->yd);
+    if (IMstoreSensi) {
+      N_VDestroyVectorArray(content->yS, Ns);
+      N_VDestroyVectorArray(content->ySd, Ns);
+    }
+    free(dt_mem[i]->content); dt_mem[i]->content = NULL;
+  }
+}
+
+/*
+ * CVAhermiteStorePnt ( -> IMstore )
+ *
+ * This routine stores a new point (y,yd) in the structure d for use
+ * in the cubic Hermite interpolation.
+ * Note that the time is already stored.
+ */
+
+static int CVAhermiteStorePnt(CVodeMem cv_mem, DtpntMem d)
+{
+  CVadjMem ca_mem;
+  HermiteDataMem content;
+  int is;
+  /* int retval; */
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  content = (HermiteDataMem) d->content;
+
+  /* Load solution */
+
+  N_VScale(ONE, zn[0], content->y);
+  
+  if (IMstoreSensi) {
+    for (is=0; is<Ns; is++) 
+      N_VScale(ONE, znS[0][is], content->yS[is]);
+  }
+
+  /* Load derivative */
+
+  if (nst == 0) {
+
+    /* retval = */ f(tn, content->y, content->yd, user_data);
+
+    if (IMstoreSensi) {
+      /* retval = */ cvSensRhsWrapper(cv_mem, tn, content->y, content->yd,
+                                content->yS, content->ySd,
+                                cv_mem->cv_tempv, cv_mem->cv_ftemp);
+    }
+
+  } else {
+
+    N_VScale(ONE/h, zn[1], content->yd);
+
+    if (IMstoreSensi) {
+      for (is=0; is<Ns; is++) 
+        N_VScale(ONE/h, znS[1][is], content->ySd[is]);
+    }
+
+  }
+
+  return(0);
+}
+
+/*
+ * CVAhermiteGetY ( -> IMget )
+ *
+ * This routine uses cubic piece-wise Hermite interpolation for 
+ * the forward solution vector. 
+ * It is typically called by the wrapper routines before calling
+ * user provided routines (fB, djacB, bjacB, jtimesB, psolB) but
+ * can be directly called by the user through CVodeGetAdjY
+ */
+
+static int CVAhermiteGetY(CVodeMem cv_mem, realtype t,
+                          N_Vector y, N_Vector *yS)
+{
+  CVadjMem ca_mem;
+  DtpntMem *dt_mem;
+  HermiteDataMem content0, content1;
+
+  realtype t0, t1, delta;
+  realtype factor1, factor2, factor3;
+
+  N_Vector y0, yd0, y1, yd1;
+  N_Vector *yS0=NULL, *ySd0=NULL, *yS1, *ySd1;
+
+  int flag, is, NS;
+  long int indx;
+  booleantype newpoint;
+
+ 
+  ca_mem = cv_mem->cv_adj_mem;
+  dt_mem = ca_mem->dt_mem;
+ 
+  /* Local value of Ns */
+ 
+  NS = (IMinterpSensi && (yS != NULL)) ? Ns : 0;
+
+  /* Get the index in dt_mem */
+
+  flag = CVAfindIndex(cv_mem, t, &indx, &newpoint);
+  if (flag != CV_SUCCESS) return(flag);
+
+  /* If we are beyond the left limit but close enough,
+     then return y at the left limit. */
+
+  if (indx == 0) {
+    content0 = (HermiteDataMem) (dt_mem[0]->content);
+    N_VScale(ONE, content0->y, y);
+    for (is=0; is<NS; is++) N_VScale(ONE, content0->yS[is], yS[is]);
+    return(CV_SUCCESS);
+  }
+
+  /* Extract stuff from the appropriate data points */
+
+  t0 = dt_mem[indx-1]->t;
+  t1 = dt_mem[indx]->t;
+  delta = t1 - t0;
+
+  content0 = (HermiteDataMem) (dt_mem[indx-1]->content);
+  y0  = content0->y;
+  yd0 = content0->yd;
+  if (IMinterpSensi) {
+    yS0  = content0->yS;
+    ySd0 = content0->ySd;
+  }
+
+  if (newpoint) {
+    
+    /* Recompute Y0 and Y1 */
+
+    content1 = (HermiteDataMem) (dt_mem[indx]->content);
+
+    y1  = content1->y;
+    yd1 = content1->yd;
+
+    N_VLinearSum(ONE, y1, -ONE, y0, Y[0]);
+    N_VLinearSum(ONE, yd1,  ONE, yd0, Y[1]);
+    N_VLinearSum(delta, Y[1], -TWO, Y[0], Y[1]);
+    N_VLinearSum(ONE, Y[0], -delta, yd0, Y[0]);
+
+
+    yS1  = content1->yS;
+    ySd1 = content1->ySd;
+      
+    for (is=0; is<NS; is++) {
+      N_VLinearSum(ONE, yS1[is], -ONE, yS0[is], YS[0][is]);
+      N_VLinearSum(ONE, ySd1[is],  ONE, ySd0[is], YS[1][is]);
+      N_VLinearSum(delta, YS[1][is], -TWO, YS[0][is], YS[1][is]);
+      N_VLinearSum(ONE, YS[0][is], -delta, ySd0[is], YS[0][is]);
+    }
+
+  }
+
+  /* Perform the actual interpolation. */
+
+  factor1 = t - t0;
+
+  factor2 = factor1/delta;
+  factor2 = factor2*factor2;
+
+  factor3 = factor2*(t-t1)/delta;
+
+  N_VLinearSum(ONE, y0, factor1, yd0, y);
+  N_VLinearSum(ONE, y, factor2, Y[0], y);
+  N_VLinearSum(ONE, y, factor3, Y[1], y);
+
+  for (is=0; is<NS; is++) {
+    N_VLinearSum(ONE, yS0[is], factor1, ySd0[is], yS[is]);
+    N_VLinearSum(ONE, yS[is], factor2, YS[0][is], yS[is]);
+    N_VLinearSum(ONE, yS[is], factor3, YS[1][is], yS[is]);
+  }
+
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions specific to Polynomial interpolation
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * CVApolynomialMalloc
+ *
+ * This routine allocates memory for storing information at all
+ * intermediate points between two consecutive check points. 
+ * This data is then used to interpolate the forward solution 
+ * at any other time.
+ */
+
+static booleantype CVApolynomialMalloc(CVodeMem cv_mem)
+{
+  CVadjMem ca_mem;
+  DtpntMem *dt_mem;
+  PolynomialDataMem content;
+  long int i, ii=0;
+  booleantype allocOK;
+
+  allocOK = TRUE;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Allocate space for the vectors ytmp and yStmp */
+
+  ytmp = N_VClone(tempv);
+  if (ytmp == NULL) {
+    return(FALSE);
+  }
+
+  if (IMstoreSensi) {
+    yStmp = N_VCloneVectorArray(Ns, tempv);
+    if (yStmp == NULL) {
+      N_VDestroy(ytmp);
+      return(FALSE);
+    }
+  }
+
+  /* Allocate space for the content field of the dt structures */
+
+  dt_mem = ca_mem->dt_mem;
+
+  for (i=0; i<=nsteps; i++) {
+
+    content = NULL;
+    content = (PolynomialDataMem) malloc(sizeof(struct PolynomialDataMemRec));
+    if (content == NULL) {
+      ii = i;
+      allocOK = FALSE;
+      break;
+    }
+
+    content->y = N_VClone(tempv);
+    if (content->y == NULL) {
+      free(content); content = NULL;
+      ii = i;
+      allocOK = FALSE;
+      break;
+    }
+
+    if (IMstoreSensi) {
+
+      content->yS = N_VCloneVectorArray(Ns, tempv);
+      if (content->yS == NULL) {
+        N_VDestroy(content->y);
+        free(content); content = NULL;
+        ii = i;
+        allocOK = FALSE;
+        break;
+      }
+
+    }
+
+    dt_mem[i]->content = content;
+
+  } 
+
+  /* If an error occurred, deallocate and return */
+
+  if (!allocOK) {
+
+    N_VDestroy(ytmp);
+
+    if (IMstoreSensi) {
+      N_VDestroyVectorArray(yStmp, Ns);
+    }
+
+    for (i=0; i<ii; i++) {
+      content = (PolynomialDataMem) (dt_mem[i]->content);
+      N_VDestroy(content->y);
+      if (IMstoreSensi) {
+        N_VDestroyVectorArray(content->yS, Ns);
+      }
+      free(dt_mem[i]->content); dt_mem[i]->content = NULL;
+    }
+
+  }
+
+  return(allocOK);
+
+}
+
+/*
+ * CVApolynomialFree
+ *
+ * This routine frees the memeory allocated for data storage.
+ */
+
+static void CVApolynomialFree(CVodeMem cv_mem)
+{
+  CVadjMem ca_mem;
+  DtpntMem *dt_mem;
+  PolynomialDataMem content;
+  long int i;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  N_VDestroy(ytmp);
+
+  if (IMstoreSensi) {
+    N_VDestroyVectorArray(yStmp, Ns);
+  }
+
+  dt_mem = ca_mem->dt_mem;
+
+  for (i=0; i<=nsteps; i++) {
+    content = (PolynomialDataMem) (dt_mem[i]->content);
+    N_VDestroy(content->y);
+    if (IMstoreSensi) {
+      N_VDestroyVectorArray(content->yS, Ns);
+    }
+    free(dt_mem[i]->content); dt_mem[i]->content = NULL;
+  }
+}
+
+/*
+ * CVApolynomialStorePnt ( -> IMstore )
+ *
+ * This routine stores a new point y in the structure d for use
+ * in the Polynomial interpolation.
+ * Note that the time is already stored.
+ */
+
+static int CVApolynomialStorePnt(CVodeMem cv_mem, DtpntMem d)
+{
+  CVadjMem ca_mem;
+  PolynomialDataMem content;
+  int is;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  content = (PolynomialDataMem) d->content;
+
+  N_VScale(ONE, zn[0], content->y);
+
+  if (IMstoreSensi) {
+    for (is=0; is<Ns; is++) 
+      N_VScale(ONE, znS[0][is], content->yS[is]);
+  }
+
+  content->order = qu;
+
+  return(0);
+}
+
+/*
+ * CVApolynomialGetY ( -> IMget )
+ *
+ * This routine uses polynomial interpolation for the forward solution vector. 
+ * It is typically called by the wrapper routines before calling
+ * user provided routines (fB, djacB, bjacB, jtimesB, psolB)) but
+ * can be directly called by the user through CVodeGetAdjY.
+ */
+
+static int CVApolynomialGetY(CVodeMem cv_mem, realtype t,
+                             N_Vector y, N_Vector *yS)
+{
+  CVadjMem ca_mem;
+  DtpntMem *dt_mem;
+  PolynomialDataMem content;
+
+  int flag, dir, order, i, j, is, NS;
+  long int indx, base;
+  booleantype newpoint;
+  realtype dt, factor;
+
+  ca_mem = cv_mem->cv_adj_mem;
+  dt_mem = ca_mem->dt_mem;
+  
+  /* Local value of Ns */
+ 
+  NS = (IMinterpSensi && (yS != NULL)) ? Ns : 0;
+
+  /* Get the index in dt_mem */
+
+  flag = CVAfindIndex(cv_mem, t, &indx, &newpoint);
+  if (flag != CV_SUCCESS) return(flag);
+
+  /* If we are beyond the left limit but close enough,
+     then return y at the left limit. */
+
+  if (indx == 0) {
+    content = (PolynomialDataMem) (dt_mem[0]->content);
+    N_VScale(ONE, content->y, y);
+    for (is=0; is<NS; is++) N_VScale(ONE, content->yS[is], yS[is]);
+    return(CV_SUCCESS);
+  }
+
+  /* Scaling factor */
+
+  dt = SUNRabs(dt_mem[indx]->t - dt_mem[indx-1]->t);
+
+  /* Find the direction of the forward integration */
+
+  dir = (tfinal - tinitial > ZERO) ? 1 : -1;
+
+  /* Establish the base point depending on the integration direction.
+     Modify the base if there are not enough points for the current order */
+
+  if (dir == 1) {
+    base = indx;
+    content = (PolynomialDataMem) (dt_mem[base]->content);
+    order = content->order;
+    if(indx < order) base += order-indx;
+  } else {
+    base = indx-1;
+    content = (PolynomialDataMem) (dt_mem[base]->content);
+    order = content->order;
+    if (np-indx > order) base -= indx+order-np;
+  }
+
+  /* Recompute Y (divided differences for Newton polynomial) if needed */
+
+  if (newpoint) {
+
+    /* Store 0-th order DD */
+    if (dir == 1) {
+      for(j=0;j<=order;j++) {
+        T[j] = dt_mem[base-j]->t;
+        content = (PolynomialDataMem) (dt_mem[base-j]->content);
+        N_VScale(ONE, content->y, Y[j]);
+        for (is=0; is<NS; is++) N_VScale(ONE, content->yS[is], YS[j][is]);
+      }
+    } else {
+      for(j=0;j<=order;j++) {
+        T[j] = dt_mem[base-1+j]->t;
+        content = (PolynomialDataMem) (dt_mem[base-1+j]->content);
+        N_VScale(ONE, content->y, Y[j]);
+        for (is=0; is<NS; is++) N_VScale(ONE, content->yS[is], YS[j][is]);
+      }
+    }
+
+    /* Compute higher-order DD */
+    for(i=1;i<=order;i++) {
+      for(j=order;j>=i;j--) {
+        factor = dt/(T[j]-T[j-i]);
+        N_VLinearSum(factor, Y[j], -factor, Y[j-1], Y[j]);
+        for (is=0; is<NS; is++) N_VLinearSum(factor, YS[j][is], -factor, YS[j-1][is], YS[j][is]);
+      }
+    }
+  }
+
+  /* Perform the actual interpolation using nested multiplications */
+
+  N_VScale(ONE, Y[order], y);
+  for (is=0; is<NS; is++) N_VScale(ONE, YS[order][is], yS[is]);
+  for (i=order-1; i>=0; i--) {
+    factor = (t-T[i])/dt;
+    N_VLinearSum(factor, y, ONE, Y[i], y);
+    for (is=0; is<NS; is++) N_VLinearSum(factor, yS[is], ONE, YS[i][is], yS[is]);
+  }
+
+  return(CV_SUCCESS);
+
+}
+
+/* 
+ * =================================================================
+ * WRAPPERS FOR ADJOINT SYSTEM
+ * =================================================================
+ */
+/*
+ * CVArhs
+ *
+ * This routine interfaces to the CVRhsFnB (or CVRhsFnBS) routine 
+ * provided by the user.
+ */
+
+static int CVArhs(realtype t, N_Vector yB, 
+                  N_Vector yBdot, void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  int flag, retval;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  /* Get forward solution from interpolation */
+
+  if (IMinterpSensi)
+    flag = IMget(cv_mem, t, ytmp, yStmp);
+  else 
+    flag = IMget(cv_mem, t, ytmp, NULL);
+
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVODEA", "CVArhs", MSGCV_BAD_TINTERP, t);
+    return(-1);
+  }
+
+  /* Call the user's RHS function */
+
+  if (cvB_mem->cv_f_withSensi)
+    retval = (cvB_mem->cv_fs)(t, ytmp, yStmp, yB, yBdot, cvB_mem->cv_user_data);
+  else
+    retval = (cvB_mem->cv_f)(t, ytmp, yB, yBdot, cvB_mem->cv_user_data);
+
+  return(retval);
+}
+
+/*
+ * CVArhsQ
+ *
+ * This routine interfaces to the CVQuadRhsFnB (or CVQuadRhsFnBS) routine
+ * provided by the user.
+ */
+
+static int CVArhsQ(realtype t, N_Vector yB, 
+                   N_Vector qBdot, void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  /* int flag; */
+  int retval;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  /* Get forward solution from interpolation */
+
+  if (IMinterpSensi)
+    /* flag = */ IMget(cv_mem, t, ytmp, yStmp);
+  else 
+    /* flag = */ IMget(cv_mem, t, ytmp, NULL);
+
+  /* Call the user's RHS function */
+
+  if (cvB_mem->cv_fQ_withSensi)
+    retval = (cvB_mem->cv_fQs)(t, ytmp, yStmp, yB, qBdot, cvB_mem->cv_user_data);
+  else
+    retval = (cvB_mem->cv_fQ)(t, ytmp, yB, qBdot, cvB_mem->cv_user_data);
+
+  return(retval);
+}
diff --git a/src/cvodes/cvodea_io.c b/src/cvodes/cvodea_io.c
new file mode 100644
index 0000000..7cb8fe2
--- /dev/null
+++ b/src/cvodes/cvodea_io.c
@@ -0,0 +1,721 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * -----------------------------------------------------------------
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the optional input and output
+ * functions for the adjoint module in the CVODES solver.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes_impl.h"
+#include <sundials/sundials_types.h>
+
+/* 
+ * =================================================================
+ * CVODEA PRIVATE CONSTANTS
+ * =================================================================
+ */
+
+#define ONE         RCONST(1.0) 
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * Readibility Constants
+ * -----------------------------------------------------------------
+ */
+
+#define IMtype      (ca_mem->ca_IMtype)
+#define ckpntData   (ca_mem->ca_ckpntData)
+#define nbckpbs     (ca_mem->ca_nbckpbs)
+
+#define t0_         (ck_mem->ck_t0)
+#define t1_         (ck_mem->ck_t1)
+#define nst_        (ck_mem->ck_nst)
+#define q_          (ck_mem->ck_q)
+#define h_          (ck_mem->ck_h)
+#define next_       (ck_mem->ck_next)
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional input functions for ASA
+ * -----------------------------------------------------------------
+ */
+
+int CVodeSetAdjNoSensi(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSetAdjNoSensi", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSetAdjNoSensi", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  ca_mem->ca_IMstoreSensi = FALSE;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional input functions for backward integration
+ * -----------------------------------------------------------------
+ */
+
+int CVodeSetIterTypeB(void *cvode_mem, int which, int iterB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSetIterTypeB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSetIterTypeB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSetIterTypeB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeSetIterType(cvodeB_mem, iterB);
+  
+  return(flag);
+}
+
+int CVodeSetUserDataB(void *cvode_mem, int which, void *user_dataB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSetUserDataB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSetUserDataB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSetUserDataB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvB_mem->cv_user_data = user_dataB;
+
+  return(CV_SUCCESS);
+}
+
+int CVodeSetMaxOrdB(void *cvode_mem, int which, int maxordB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSetMaxOrdB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSetMaxOrdB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSetMaxOrdB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeSetMaxOrd(cvodeB_mem, maxordB);
+
+  return(flag);
+}
+
+
+int CVodeSetMaxNumStepsB(void *cvode_mem, int which, long int mxstepsB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSetMaxNumStepsB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSetMaxNumStepsB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSetMaxNumStepsB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeSetMaxNumSteps(cvodeB_mem, mxstepsB);
+
+  return(flag);
+}
+
+int CVodeSetStabLimDetB(void *cvode_mem, int which, booleantype stldetB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSetStabLimDetB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSetStabLimDetB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSetStabLimDetB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeSetStabLimDet(cvodeB_mem, stldetB);
+
+  return(flag);
+}
+
+int CVodeSetInitStepB(void *cvode_mem, int which, realtype hinB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSetInitStepB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSetInitStepB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSetInitStepB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeSetInitStep(cvodeB_mem, hinB);
+
+  return(flag);
+}
+
+int CVodeSetMinStepB(void *cvode_mem, int which, realtype hminB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSetMinStepB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSetMinStepB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSetMinStepB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeSetMinStep(cvodeB_mem, hminB);
+
+  return(flag);
+}
+
+int CVodeSetMaxStepB(void *cvode_mem, int which, realtype hmaxB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSetMaxStepB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSetMaxStepB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSetMaxStepB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeSetMaxStep(cvodeB_mem, hmaxB);
+
+  return(flag);
+}
+
+/*
+ * CVodeSetQuad*B
+ *
+ * Wrappers for the backward phase around the corresponding 
+ * CVODES quadrature optional input functions
+ */
+
+int CVodeSetQuadErrConB(void *cvode_mem, int which, booleantype errconQB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeSetQuadErrConB", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeSetQuadErrConB", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVodeSetQuadErrConB", MSGCV_BAD_WHICH);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVodeSetQuadErrCon(cvodeB_mem, errconQB);
+
+  return(flag);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional output functions for backward integration
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * CVodeGetAdjCVodeBmem
+ *
+ * This function returns a (void *) pointer to the CVODES     
+ * memory allocated for the backward problem. This pointer can    
+ * then be used to call any of the CVodeGet* CVODES routines to  
+ * extract optional output for the backward integration phase.
+ */
+
+void *CVodeGetAdjCVodeBmem(void *cvode_mem, int which)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, 0, "CVODEA", "CVodeGetAdjCVodeBmem", MSGCV_NO_MEM);
+    return(NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, 0, "CVODEA", "CVodeGetAdjCVodeBmem", MSGCV_NO_ADJ);
+    return(NULL);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= nbckpbs ) {
+    cvProcessError(cv_mem, 0, "CVODEA", "CVodeGetAdjCVodeBmem", MSGCV_BAD_WHICH);
+    return(NULL);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  return(cvodeB_mem);
+}
+
+/*
+ * CVodeGetAdjCheckPointsInfo
+ *
+ * This routine loads an array of nckpnts structures of type CVadjCheckPointRec.
+ * The user must allocate space for ckpnt.
+ */
+
+int CVodeGetAdjCheckPointsInfo(void *cvode_mem, CVadjCheckPointRec *ckpnt)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CkpntMem ck_mem;
+  int i;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeGetAdjCheckPointsInfo", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeGetAdjCheckPointsInfo", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  ck_mem = ca_mem->ck_mem;
+
+  i = 0;
+
+  while (ck_mem != NULL) {
+
+    ckpnt[i].my_addr = (void *) ck_mem;
+    ckpnt[i].next_addr = (void *) next_;
+    ckpnt[i].t0 = t0_;
+    ckpnt[i].t1 = t1_;
+    ckpnt[i].nstep = nst_;
+    ckpnt[i].order = q_;
+    ckpnt[i].step = h_;
+
+    ck_mem = next_;
+    i++;
+
+  }
+
+  return(CV_SUCCESS);
+
+}
+
+/*
+ * CVodeGetAdjDataPointHermite
+ *
+ * This routine returns the solution stored in the data structure
+ * at the 'which' data point. Cubic Hermite interpolation.
+ */
+
+int CVodeGetAdjDataPointHermite(void *cvode_mem, int which, 
+                                realtype *t, N_Vector y, N_Vector yd)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  DtpntMem *dt_mem;
+  HermiteDataMem content;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeGetAdjDataPointHermite", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeGetAdjDataPointHermite", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  dt_mem = ca_mem->dt_mem;
+
+  if (IMtype != CV_HERMITE) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVadjGetDataPointHermite", MSGCV_WRONG_INTERP);
+    return(CV_ILL_INPUT);
+  }
+
+  *t = dt_mem[which]->t;
+
+  content = (HermiteDataMem) (dt_mem[which]->content);
+
+  if (y != NULL)
+    N_VScale(ONE, content->y, y);
+
+  if (yd != NULL)
+    N_VScale(ONE, content->yd, yd);
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeGetAdjDataPointPolynomial
+ *
+ * This routine returns the solution stored in the data structure
+ * at the 'which' data point. Polynomial interpolation.
+ */
+
+int CVodeGetAdjDataPointPolynomial(void *cvode_mem, int which, 
+                                   realtype *t, int *order, N_Vector y)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  DtpntMem *dt_mem;
+  PolynomialDataMem content;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeGetAdjDataPointPolynomial", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeGetAdjDataPointPolynomial", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  dt_mem = ca_mem->dt_mem;
+
+  if (IMtype != CV_POLYNOMIAL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODEA", "CVadjGetDataPointPolynomial", MSGCV_WRONG_INTERP);
+    return(CV_ILL_INPUT);
+  }
+
+  *t = dt_mem[which]->t;
+
+  content = (PolynomialDataMem) (dt_mem[which]->content);
+
+  if (y != NULL)
+    N_VScale(ONE, content->y, y);
+
+  *order = content->order;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * UNDOCUMENTED development user-callable functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * CVodeGetAdjCurrentCheckPoint
+ *
+ * Returns the address of the 'active' check point.
+ */
+
+int CVodeGetAdjCurrentCheckPoint(void *cvode_mem, void **addr)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODEA", "CVodeGetAdjCurrentCheckPoint", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_ADJ, "CVODEA", "CVodeGetAdjCurrentCheckPoint", MSGCV_NO_ADJ);
+    return(CV_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  *addr = (void *) ckpntData;
+
+  return(CV_SUCCESS);
+}
diff --git a/src/cvodes/cvodes.c b/src/cvodes/cvodes.c
new file mode 100644
index 0000000..44f2494
--- /dev/null
+++ b/src/cvodes/cvodes.c
@@ -0,0 +1,8991 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4826 $
+ * $Date: 2016-07-26 16:00:58 -0700 (Tue, 26 Jul 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the main CVODES integrator
+ * with sensitivity analysis capabilities.
+ * -----------------------------------------------------------------
+ * 
+ * EXPORTED FUNCTIONS
+ * ------------------
+ *
+ *   Creation, allocation and re-initialization functions
+ *
+ *      CVodeCreate
+ *
+ *      CVodeInit 
+ *      CVodeReInit
+ *      CVodeSStolerances
+ *      CVodeSVtolerances
+ *      CVodeWFtolerances
+ *
+ *      CVodeQuadInit
+ *      CVodeQuadReInit   
+ *      CVodeQuadSStolerances
+ *      CVodeQuadSVtolerances
+ *
+ *      CVodeSensInit
+ *      CVodeSensInit1
+ *      CVodeSensReInit             
+ *      CVodeSensSStolerances
+ *      CVodeSensSVtolerances
+ *      CVodeSensEEtolerances
+ *
+ *      CVodeQuadSensInit
+ *      CVodeQuadSensReInit
+ *
+ *      CVodeSensToggleOff
+ *
+ *      CVodeRootInit      
+ *
+ *   Main solver function
+ *      CVode
+ *
+ *   Interpolated output and extraction functions
+ *      CVodeGetDky
+ *      CVodeGetQuad             
+ *      CVodeGetQuadDky
+ *      CVodeGetSens             
+ *      CVodeGetSens1
+ *      CVodeGetSensDky         
+ *      CVodeGetSensDky1
+ *      CVodeGetQuadSens             
+ *      CVodeGetQuadSens1
+ *      CVodeGetQuadSensDky         
+ *      CVodeGetQuadSensDky1
+ *
+ *   Deallocation functions
+ *      CVodeFree              
+ *      CVodeQuadFree
+ *      CVodeSensFree  
+ *      CVodeQuadSensFree  
+ *
+ * PRIVATE FUNCTIONS
+ * -----------------
+ *
+ *      cvCheckNvector
+ *
+ *   Memory allocation/deallocation
+ *      cvAllocVectors         
+ *      cvFreeVectors
+ *      cvQuadAllocVectors      
+ *      cvQuadFreeVectors
+ *      cvSensAllocVectors     
+ *      cvSensFreeVectors
+ *      cvQuadSensAllocVectors     
+ *      cvQuadSensFreeVectors
+ *
+ *   Initial stepsize calculation
+ *      cvHin                 
+ *      cvUpperBoundH0
+ *      cvYddNorm     
+ *
+ *   Initial setup
+ *      cvInitialSetup
+ *      cvEwtSet           
+ *      cvEwtSetSS
+ *      cvEwtSetSV         
+ *      cvQuadEwtSet
+ *      cvQuadEwtSetSS     
+ *      cvQuadEwtSetSV
+ *      cvSensEwtSet      
+ *      cvSensEwtSetEE
+ *      cvSensEwtSetSS    
+ *      cvSensEwtSetSV
+ *      cvQuadSensEwtSet      
+ *      cvQuadSensEwtSetEE
+ *      cvQuadSensEwtSetSS    
+ *      cvQuadSensEwtSetSV
+ *
+ *   Main cvStep function
+ *      cvStep
+ *
+ *   Functions called at beginning of step
+ *      cvAdjustParams
+ *      cvAdjustOrder    
+ *      cvAdjustAdams
+ *      cvAdjustBDF       
+ *      cvIncreaseBDF
+ *      cvDecreaseBDF     
+ *      cvRescale
+ *      cvPredict         
+ *      cvSet
+ *      cvSetAdams        
+ *      cvAdamsStart
+ *      cvAdamsFinish      
+ *      cvAltSum
+ *      cvSetBDF           
+ *      cvSetTqBDF
+ *
+ *   Nonlinear solver functions
+ *      cvNls              
+ *      cvNlsFunctional
+ *      cvNlsNewton        
+ *      cvNewtonIteration
+ *      cvQuadNls           
+ *      cvStgrNls
+ *      cvStgrNlsFunctional     
+ *      cvStgrNlsNewton
+ *      cvStgrNewtonIteration    
+ *      cvStgr1Nls
+ *      cvStgr1NlsFunctional    
+ *      cvStgr1NlsNewton
+ *      cvStgr1NewtonIteration   
+ *      cvQuadSensNls 
+ *      cvHandleNFlag
+ *      cvRestore             
+ *
+ *   Error Test
+ *      cvDoErrorTest
+ *
+ *   Functions called after a successful step
+ *      cvCompleteStep      
+ *      cvPrepareNextStep
+ *      cvSetEta          
+ *      cvComputeEtaqm1
+ *      cvComputeEtaqp1   
+ *      cvChooseEta
+ *
+ *   Function to handle failures
+ *      cvHandleFailure   
+ *
+ *   Functions for BDF Stability Limit Detection  
+ *      cvBDFStab
+ *      cvSLdet   
+ *
+ *   Functions for rootfinding
+ *      cvRcheck1
+ *      cvRcheck2         
+ *      cvRcheck3
+ *      cvRootfind  
+ *
+ *   Functions for combined norms
+ *      cvQuadUpdateNorm
+ *      cvSensNorm
+ *      cvSensUpdateNorm    
+ *      cvQuadSensNorm
+ *      cvQuadSensUpdateNorm    
+ *
+ *   Wrappers for sensitivity RHS
+ *      cvSensRhsWrapper           
+ *      cvSensRhs1Wrapper
+ *
+ *   Internal DQ approximations for sensitivity RHS
+ *      cvSensRhsInternalDQ         
+ *      cvSensRhs1InternalDQ
+ *      cvQuadSensRhsDQ         
+ *
+ *   Error message handling functions
+ *      cvProcessError      
+ *      cvErrHandler
+ *
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "cvodes_impl.h"
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+/* 
+ * =================================================================
+ * MACRO DEFINITIONS
+ * =================================================================
+ */
+
+/* Macro: loop */
+#define loop for(;;)
+
+/* 
+ * =================================================================
+ * CVODES PRIVATE CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO    RCONST(0.0)
+#define TINY    RCONST(1.0e-10)
+#define PT1     RCONST(0.1)
+#define POINT2  RCONST(0.2)
+#define FOURTH  RCONST(0.25)
+#define HALF    RCONST(0.5)
+#define ONE     RCONST(1.0)
+#define TWO     RCONST(2.0)
+#define THREE   RCONST(3.0)
+#define FOUR    RCONST(4.0)
+#define FIVE    RCONST(5.0)
+#define TWELVE  RCONST(12.0)
+#define HUNDRED RCONST(100.0)
+
+/* 
+ * =================================================================
+ * CVODES ROUTINE-SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+/* 
+ * Control constants for lower-level functions used by cvStep 
+ * ----------------------------------------------------------
+ *
+ * cvHin return values:
+ *    CV_SUCCESS,
+ *    CV_RHSFUNC_FAIL,  CV_RPTD_RHSFUNC_ERR,
+ *    CV_QRHSFUNC_FAIL, CV_RPTD_QRHSFUNC_ERR,
+ *    CV_SRHSFUNC_FAIL, CV_RPTD_SRHSFUNC_ERR,
+ *    CV_TOO_CLOSE
+ *
+ * cvStep control constants:
+ *    DO_ERROR_TEST
+ *    PREDICT_AGAIN
+ *
+ * cvStep return values: 
+ *    CV_SUCCESS,
+ *    CV_CONV_FAILURE,      CV_ERR_FAILURE,
+ *    CV_LSETUP_FAIL,       CV_LSOLVE_FAIL, 
+ *    CV_RTFUNC_FAIL,
+ *    CV_RHSFUNC_FAIL,      CV_QRHSFUNC_FAIL,      CV_SRHSFUNC_FAIL,      CV_QSRHSFUNC_FAIL, 
+ *    CV_FIRST_RHSFUNC_ERR, CV_FIRST_QRHSFUNC_ERR, CV_FIRST_SRHSFUNC_ERR, CV_FIRST_QSRHSFUNC_ERR,
+ *    CV_UNREC_RHSFUNC_ERR, CV_UNREC_QRHSFUNC_ERR, CV_UNREC_SRHSFUNC_ERR, CV_UNREC_QSRHSFUNC_ERR,
+ *    CV_REPTD_RHSFUNC_ERR, CV_REPTD_QRHSFUNC_ERR, CV_REPTD_SRHSFUNC_ERR, CV_REPTD_QSRHSFUNC_ERR,
+ *
+ * cvNls input nflag values:
+ *    FIRST_CALL
+ *    PREV_CONV_FAIL
+ *    PREV_ERR_FAIL
+ *    
+ * cvNls return values: 
+ *    CV_SUCCESS,
+ *    CV_LSETUP_FAIL,  CV_LSOLVE_FAIL, 
+ *    CV_RHSFUNC_FAIL, CV_SRHSFUNC_FAIL,
+ *    CONV_FAIL, 
+ *    RHSFUNC_RECVR,   SRHSFUNC_RECVR
+ * 
+ * cvNewtonIteration return values:
+ *    CV_SUCCESS, 
+ *    CV_LSOLVE_FAIL, 
+ *    CV_RHSFUNC_FAIL, CV_SRHSFUNC_FAIL,
+ *    CONV_FAIL,       TRY_AGAIN
+ *    RHSFUNC_RECVR,   SRHSFUNC_RECVR
+ *
+ */
+
+#define DO_ERROR_TEST    +2
+#define PREDICT_AGAIN    +3
+
+#define CONV_FAIL        +4 
+#define TRY_AGAIN        +5
+
+#define FIRST_CALL       +6
+#define PREV_CONV_FAIL   +7
+#define PREV_ERR_FAIL    +8
+
+#define RHSFUNC_RECVR    +9
+
+#define QRHSFUNC_RECVR   +11
+#define SRHSFUNC_RECVR   +12
+#define QSRHSFUNC_RECVR  +13
+
+/*
+ * Control constants for lower-level rootfinding functions
+ * -------------------------------------------------------
+ *
+ * cvRcheck1 return values:
+ *    CV_SUCCESS,
+ *    CV_RTFUNC_FAIL,
+ * cvRcheck2 return values:
+ *    CV_SUCCESS,
+ *    CV_RTFUNC_FAIL,
+ *    CLOSERT,
+ *    RTFOUND
+ * cvRcheck3 return values:
+ *    CV_SUCCESS,
+ *    CV_RTFUNC_FAIL,
+ *    RTFOUND
+ * cvRootfind return values:
+ *    CV_SUCCESS,
+ *    CV_RTFUNC_FAIL,
+ *    RTFOUND
+ */
+
+#define RTFOUND          +1
+#define CLOSERT          +3
+
+/*
+ * Control constants for sensitivity DQ
+ * ------------------------------------
+ */
+
+#define CENTERED1        +1
+#define CENTERED2        +2
+#define FORWARD1         +3
+#define FORWARD2         +4
+
+/*
+ * Control constants for type of sensitivity RHS
+ * ---------------------------------------------
+ */
+
+#define CV_ONESENS  1
+#define CV_ALLSENS  2
+
+/*
+ * Control constants for tolerances
+ * --------------------------------
+ */
+
+#define CV_NN  0
+#define CV_SS  1
+#define CV_SV  2
+#define CV_WF  3
+#define CV_EE  4
+
+/*
+ * Algorithmic constants
+ * ---------------------
+ *
+ * CVodeGetDky and cvStep
+ *
+ *    FUZZ_FACTOR fuzz factor used to estimate infinitesimal time intervals
+ *
+ * cvHin
+ *
+ *    HLB_FACTOR  factor for upper bound on initial step size
+ *    HUB_FACTOR  factor for lower bound on initial step size
+ *    H_BIAS      bias factor in selection of initial step size
+ *    MAX_ITERS   maximum attempts to compute the initial step size
+ *
+ * CVodeCreate 
+ *
+ *   CORTES       constant in nonlinear iteration convergence test
+ *
+ * cvStep
+ *
+ *    THRESH      if eta < THRESH reject a change in step size or order
+ *    ETAMX1      -+
+ *    ETAMX2       |
+ *    ETAMX3       |-> bounds for eta (step size change)
+ *    ETAMXF       |
+ *    ETAMIN       |
+ *    ETACF       -+
+ *    ADDON       safety factor in computing eta
+ *    BIAS1       -+
+ *    BIAS2        |-> bias factors in eta selection
+ *    BIAS3       -+
+ *    ONEPSM      (1+epsilon) used in testing if the step size is below its bound
+ *
+ *    SMALL_NST   nst > SMALL_NST => use ETAMX3 
+ *    MXNCF       max no. of convergence failures during one step try
+ *    MXNEF       max no. of error test failures during one step try
+ *    MXNEF1      max no. of error test failures before forcing a reduction of order
+ *    SMALL_NEF   if an error failure occurs and SMALL_NEF <= nef <= MXNEF1, then
+ *                reset eta =  SUNMIN(eta, ETAMXF)
+ *    LONG_WAIT   number of steps to wait before considering an order change when
+ *                q==1 and MXNEF1 error test failures have occurred
+ *
+ * cvNls
+ *    
+ *    NLS_MAXCOR  maximum no. of corrector iterations for the nonlinear solver
+ *    CRDOWN      constant used in the estimation of the convergence rate (crate)
+ *                of the iterates for the nonlinear equation
+ *    DGMAX       iter == CV_NEWTON, |gamma/gammap-1| > DGMAX => call lsetup
+ *    RDIV        declare divergence if ratio del/delp > RDIV
+ *    MSBP        max no. of steps between lsetup calls
+ *    
+ */
+
+
+#define FUZZ_FACTOR RCONST(100.0)
+
+#define HLB_FACTOR RCONST(100.0)
+#define HUB_FACTOR RCONST(0.1)
+#define H_BIAS     HALF
+#define MAX_ITERS  4
+
+#define CORTES RCONST(0.1)
+
+#define THRESH RCONST(1.5)
+#define ETAMX1 RCONST(10000.0) 
+#define ETAMX2 RCONST(10.0)
+#define ETAMX3 RCONST(10.0)
+#define ETAMXF RCONST(0.2)
+#define ETAMIN RCONST(0.1)
+#define ETACF  RCONST(0.25)
+#define ADDON  RCONST(0.000001)
+#define BIAS1  RCONST(6.0)
+#define BIAS2  RCONST(6.0)
+#define BIAS3  RCONST(10.0)
+#define ONEPSM RCONST(1.000001)
+
+#define SMALL_NST    10
+#define MXNCF        10
+#define MXNEF         7
+#define MXNEF1        3
+#define SMALL_NEF     2
+#define LONG_WAIT    10
+
+#define NLS_MAXCOR 3
+#define CRDOWN RCONST(0.3)
+#define DGMAX  RCONST(0.3)
+
+#define RDIV      TWO
+#define MSBP       20
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTION PROTOTYPES
+ * =================================================================
+ */
+
+static booleantype cvCheckNvector(N_Vector tmpl);
+
+/* Memory allocation/deallocation */
+
+static booleantype cvAllocVectors(CVodeMem cv_mem, N_Vector tmpl);
+static void cvFreeVectors(CVodeMem cv_mem);
+
+static booleantype cvQuadAllocVectors(CVodeMem cv_mem, N_Vector tmpl);
+static void cvQuadFreeVectors(CVodeMem cv_mem);
+
+static booleantype cvSensAllocVectors(CVodeMem cv_mem, N_Vector tmpl);
+static void cvSensFreeVectors(CVodeMem cv_mem);
+
+static booleantype cvQuadSensAllocVectors(CVodeMem cv_mem, N_Vector tmpl);
+static void cvQuadSensFreeVectors(CVodeMem cv_mem);
+
+/* Initial stepsize calculation */
+
+static int cvHin(CVodeMem cv_mem, realtype tout);
+static realtype cvUpperBoundH0(CVodeMem cv_mem, realtype tdist);
+static int cvYddNorm(CVodeMem cv_mem, realtype hg, realtype *yddnrm);
+
+/* Initial setup */
+
+static int cvInitialSetup(CVodeMem cv_mem);
+
+static int cvEwtSetSS(CVodeMem cv_mem, N_Vector ycur, N_Vector weight);
+static int cvEwtSetSV(CVodeMem cv_mem, N_Vector ycur, N_Vector weight);
+
+static int cvQuadEwtSet(CVodeMem cv_mem, N_Vector qcur, N_Vector weightQ);
+static int cvQuadEwtSetSS(CVodeMem cv_mem, N_Vector qcur, N_Vector weightQ);
+static int cvQuadEwtSetSV(CVodeMem cv_mem, N_Vector qcur, N_Vector weightQ);
+
+static int cvSensEwtSet(CVodeMem cv_mem, N_Vector *yScur, N_Vector *weightS);
+static int cvSensEwtSetEE(CVodeMem cv_mem, N_Vector *yScur, N_Vector *weightS);
+static int cvSensEwtSetSS(CVodeMem cv_mem, N_Vector *yScur, N_Vector *weightS);
+static int cvSensEwtSetSV(CVodeMem cv_mem, N_Vector *yScur, N_Vector *weightS);
+
+static int cvQuadSensEwtSet(CVodeMem cv_mem, N_Vector *yQScur, N_Vector *weightQS);
+static int cvQuadSensEwtSetEE(CVodeMem cv_mem, N_Vector *yQScur, N_Vector *weightQS);
+static int cvQuadSensEwtSetSS(CVodeMem cv_mem, N_Vector *yQScur, N_Vector *weightQS);
+static int cvQuadSensEwtSetSV(CVodeMem cv_mem, N_Vector *yQScur, N_Vector *weightQS);
+
+/* Main cvStep function */
+
+static int cvStep(CVodeMem cv_mem);
+
+/* Function called at beginning of step */
+
+static void cvAdjustParams(CVodeMem cv_mem);
+static void cvAdjustOrder(CVodeMem cv_mem, int deltaq);
+static void cvAdjustAdams(CVodeMem cv_mem, int deltaq);
+static void cvAdjustBDF(CVodeMem cv_mem, int deltaq);
+static void cvIncreaseBDF(CVodeMem cv_mem);
+static void cvDecreaseBDF(CVodeMem cv_mem);
+static void cvRescale(CVodeMem cv_mem);
+static void cvPredict(CVodeMem cv_mem);
+static void cvSet(CVodeMem cv_mem);
+static void cvSetAdams(CVodeMem cv_mem);
+static realtype cvAdamsStart(CVodeMem cv_mem, realtype m[]);
+static void cvAdamsFinish(CVodeMem cv_mem, realtype m[], realtype M[], realtype hsum);
+static realtype cvAltSum(int iend, realtype a[], int k);
+static void cvSetBDF(CVodeMem cv_mem);
+static void cvSetTqBDF(CVodeMem cv_mem, realtype hsum, realtype alpha0,
+                       realtype alpha0_hat, realtype xi_inv, realtype xistar_inv);
+
+/* Nonlinear solver functions */
+
+static int cvNls(CVodeMem cv_mem, int nflag);
+static int cvNlsFunctional(CVodeMem cv_mem);
+static int cvNlsNewton(CVodeMem cv_mem, int nflag);
+static int cvNewtonIteration(CVodeMem cv_mem);
+
+static int cvQuadNls(CVodeMem cv_mem);
+
+static int cvStgrNls(CVodeMem cv_mem);
+static int cvStgrNlsFunctional(CVodeMem cv_mem);
+static int cvStgrNlsNewton(CVodeMem cv_mem);
+static int cvStgrNewtonIteration(CVodeMem cv_mem);
+
+static int cvStgr1Nls(CVodeMem cv_mem, int is);
+static int cvStgr1NlsFunctional(CVodeMem cv_mem, int is);
+static int cvStgr1NlsNewton(CVodeMem cv_mem, int is);
+static int cvStgr1NewtonIteration(CVodeMem cv_mem, int is);
+
+static int cvQuadSensNls(CVodeMem cv_mem);
+
+static int cvHandleNFlag(CVodeMem cv_mem, int *nflagPtr, realtype saved_t,
+                         int *ncfPtr, long int *ncfnPtr);
+
+static void cvRestore(CVodeMem cv_mem, realtype saved_t);
+
+/* Error Test */
+
+static int cvDoErrorTest(CVodeMem cv_mem, int *nflagPtr, realtype saved_t, 
+                         realtype acor_nrm,
+                         int *nefPtr, long int *netfPtr, realtype *dsmPtr);
+
+/* Function called after a successful step */
+
+static void cvCompleteStep(CVodeMem cv_mem);
+static void cvPrepareNextStep(CVodeMem cv_mem, realtype dsm);
+static void cvSetEta(CVodeMem cv_mem);
+static realtype cvComputeEtaqm1(CVodeMem cv_mem);
+static realtype cvComputeEtaqp1(CVodeMem cv_mem);
+static void cvChooseEta(CVodeMem cv_mem);
+
+/* Function to handle failures */
+
+static int cvHandleFailure(CVodeMem cv_mem,int flag);
+
+/* Functions for BDF Stability Limit Detection */
+
+static void cvBDFStab(CVodeMem cv_mem);
+static int cvSLdet(CVodeMem cv_mem);
+
+/* Functions for rootfinding */
+
+static int cvRcheck1(CVodeMem cv_mem);
+static int cvRcheck2(CVodeMem cv_mem);
+static int cvRcheck3(CVodeMem cv_mem);
+static int cvRootfind(CVodeMem cv_mem);
+
+/* Function for combined norms */
+
+static realtype cvQuadUpdateNorm(CVodeMem cv_mem, realtype old_nrm,
+                                 N_Vector xQ, N_Vector wQ);
+
+static realtype cvSensNorm(CVodeMem cv_mem, N_Vector *xS, N_Vector *wS);
+static realtype cvSensUpdateNorm(CVodeMem cv_mem, realtype old_nrm,
+                                 N_Vector *xS, N_Vector *wS);
+
+static realtype cvQuadSensNorm(CVodeMem cv_mem, N_Vector *xQS, N_Vector *wQS);
+static realtype cvQuadSensUpdateNorm(CVodeMem cv_mem, realtype old_nrm,
+                                     N_Vector *xQS, N_Vector *wQS);
+
+/* Internal sensitivity RHS DQ functions */
+
+static int cvQuadSensRhsInternalDQ(int Ns, realtype t, 
+                                   N_Vector y, N_Vector *yS,
+                                   N_Vector yQdot, N_Vector *yQSdot,
+                                   void *cvode_mem,  
+                                   N_Vector tmp, N_Vector tmpQ);
+
+static int cvQuadSensRhs1InternalDQ(CVodeMem cv_mem, int is, realtype t, 
+                                    N_Vector y, N_Vector yS,
+                                    N_Vector yQdot, N_Vector yQSdot, 
+                                    N_Vector tmp, N_Vector tmpQ);
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * Creation, allocation and re-initialization functions
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * CVodeCreate
+ *
+ * CVodeCreate creates an internal memory block for a problem to 
+ * be solved by CVODES.
+ * If successful, CVodeCreate returns a pointer to the problem memory. 
+ * This pointer should be passed to CVodeInit.  
+ * If an initialization error occurs, CVodeCreate prints an error 
+ * message to standard err and returns NULL. 
+ */
+
+void *CVodeCreate(int lmm, int iter)
+{
+  int maxord;
+  CVodeMem cv_mem;
+
+  /* Test inputs */
+
+  if ((lmm != CV_ADAMS) && (lmm != CV_BDF)) {
+    cvProcessError(NULL, 0, "CVODES", "CVodeCreate", MSGCV_BAD_LMM);
+    return(NULL);
+  }
+  
+  if ((iter != CV_FUNCTIONAL) && (iter != CV_NEWTON)) {
+    cvProcessError(NULL, 0, "CVODES", "CVodeCreate", MSGCV_BAD_ITER);
+    return(NULL);
+  }
+
+  cv_mem = NULL;
+  cv_mem = (CVodeMem) malloc(sizeof(struct CVodeMemRec));
+  if (cv_mem == NULL) {
+    cvProcessError(NULL, 0, "CVODES", "CVodeCreate", MSGCV_CVMEM_FAIL);
+    return(NULL);
+  }
+
+  /* Zero out cv_mem */
+  memset(cv_mem, 0, sizeof(struct CVodeMemRec));
+
+  maxord = (lmm == CV_ADAMS) ? ADAMS_Q_MAX : BDF_Q_MAX;
+
+  /* copy input parameters into cv_mem */
+
+  cv_mem->cv_lmm  = lmm;
+  cv_mem->cv_iter = iter;
+
+  /* Set uround */
+
+  cv_mem->cv_uround = UNIT_ROUNDOFF;
+
+  /* Set default values for integrator optional inputs */
+
+  cv_mem->cv_f          = NULL;
+  cv_mem->cv_user_data  = NULL;
+  cv_mem->cv_itol       = CV_NN;
+  cv_mem->cv_user_efun  = FALSE;
+  cv_mem->cv_efun       = NULL;
+  cv_mem->cv_e_data     = NULL;
+  cv_mem->cv_ehfun      = cvErrHandler;
+  cv_mem->cv_eh_data    = cv_mem;
+  cv_mem->cv_errfp      = stderr;
+  cv_mem->cv_qmax       = maxord;
+  cv_mem->cv_mxstep     = MXSTEP_DEFAULT;
+  cv_mem->cv_mxhnil     = MXHNIL_DEFAULT;
+  cv_mem->cv_sldeton    = FALSE;
+  cv_mem->cv_hin        = ZERO;
+  cv_mem->cv_hmin       = HMIN_DEFAULT;
+  cv_mem->cv_hmax_inv   = HMAX_INV_DEFAULT;
+  cv_mem->cv_tstopset   = FALSE;
+  cv_mem->cv_maxcor     = NLS_MAXCOR;
+  cv_mem->cv_maxnef     = MXNEF;
+  cv_mem->cv_maxncf     = MXNCF;
+  cv_mem->cv_nlscoef    = CORTES;
+
+  /* Initialize root finding variables */
+
+  cv_mem->cv_glo        = NULL;
+  cv_mem->cv_ghi        = NULL;
+  cv_mem->cv_grout      = NULL;
+  cv_mem->cv_iroots     = NULL;
+  cv_mem->cv_rootdir    = NULL;
+  cv_mem->cv_gfun       = NULL;
+  cv_mem->cv_nrtfn      = 0;  
+  cv_mem->cv_gactive    = NULL;
+  cv_mem->cv_mxgnull    = 1;
+
+  /* Set default values for quad. optional inputs */
+
+  cv_mem->cv_quadr      = FALSE;
+  cv_mem->cv_fQ         = NULL;
+  cv_mem->cv_errconQ    = FALSE;
+  cv_mem->cv_itolQ      = CV_NN;
+
+  /* Set default values for sensi. optional inputs */
+
+  cv_mem->cv_sensi      = FALSE;
+  cv_mem->cv_fS_data    = NULL;
+  cv_mem->cv_fS         = cvSensRhsInternalDQ;
+  cv_mem->cv_fS1        = cvSensRhs1InternalDQ;
+  cv_mem->cv_fSDQ       = TRUE;
+  cv_mem->cv_ifS        = CV_ONESENS;
+  cv_mem->cv_DQtype     = CV_CENTERED;
+  cv_mem->cv_DQrhomax   = ZERO;
+  cv_mem->cv_p          = NULL;
+  cv_mem->cv_pbar       = NULL;
+  cv_mem->cv_plist      = NULL;
+  cv_mem->cv_errconS    = FALSE;
+  cv_mem->cv_maxcorS    = NLS_MAXCOR;
+  cv_mem->cv_ncfS1      = NULL;
+  cv_mem->cv_ncfnS1     = NULL;
+  cv_mem->cv_nniS1      = NULL;
+  cv_mem->cv_itolS      = CV_NN;
+
+  /* Set default values for quad. sensi. optional inputs */
+
+  cv_mem->cv_quadr_sensi = FALSE;
+  cv_mem->cv_fQS         = NULL;
+  cv_mem->cv_fQS_data    = NULL;
+  cv_mem->cv_fQSDQ       = TRUE;
+  cv_mem->cv_errconQS    = FALSE;
+  cv_mem->cv_itolQS      = CV_NN;
+
+  /* Set default for ASA */
+
+  cv_mem->cv_adj         = FALSE;
+  cv_mem->cv_adj_mem     = NULL;
+
+  /* Set the saved values for qmax_alloc */
+
+  cv_mem->cv_qmax_alloc  = maxord;
+  cv_mem->cv_qmax_allocQ = maxord;
+  cv_mem->cv_qmax_allocS = maxord;
+
+  /* Initialize lrw and liw */
+
+  cv_mem->cv_lrw = 65 + 2*L_MAX + NUM_TESTS;
+  cv_mem->cv_liw = 52;
+
+  /* No mallocs have been done yet */
+
+  cv_mem->cv_VabstolMallocDone   = FALSE;
+  cv_mem->cv_MallocDone          = FALSE;
+
+  cv_mem->cv_VabstolQMallocDone  = FALSE;
+  cv_mem->cv_QuadMallocDone      = FALSE;
+
+  cv_mem->cv_VabstolSMallocDone  = FALSE;
+  cv_mem->cv_SabstolSMallocDone  = FALSE;
+  cv_mem->cv_SensMallocDone      = FALSE;
+
+  cv_mem->cv_VabstolQSMallocDone = FALSE;
+  cv_mem->cv_SabstolQSMallocDone = FALSE;
+  cv_mem->cv_QuadSensMallocDone  = FALSE;
+
+  cv_mem->cv_adjMallocDone       = FALSE;
+
+  /* Return pointer to CVODES memory block */
+
+  return((void *)cv_mem);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define iter (cv_mem->cv_iter)  
+#define lmm  (cv_mem->cv_lmm) 
+#define lrw  (cv_mem->cv_lrw)
+#define liw  (cv_mem->cv_liw)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeInit
+ * 
+ * CVodeInit allocates and initializes memory for a problem. All 
+ * problem inputs are checked for errors. If any error occurs during 
+ * initialization, it is reported to the file whose file pointer is 
+ * errfp and an error flag is returned. Otherwise, it returns CV_SUCCESS
+ */
+
+int CVodeInit(void *cvode_mem, CVRhsFn f, realtype t0, N_Vector y0)
+{
+  CVodeMem cv_mem;
+  booleantype nvectorOK, allocOK;
+  long int lrw1, liw1;
+  int i,k;
+
+  /* Check cvode_mem */
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check for legal input parameters */
+
+  if (y0==NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeInit", MSGCV_NULL_Y0);
+    return(CV_ILL_INPUT);
+  }
+
+  if (f == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeInit", MSGCV_NULL_F);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Test if all required vector operations are implemented */
+
+  nvectorOK = cvCheckNvector(y0);
+  if(!nvectorOK) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeInit", MSGCV_BAD_NVECTOR);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Set space requirements for one N_Vector */
+
+  if (y0->ops->nvspace != NULL) {
+    N_VSpace(y0, &lrw1, &liw1);
+  } else {
+    lrw1 = 0;
+    liw1 = 0;
+  }
+  cv_mem->cv_lrw1 = lrw1;
+  cv_mem->cv_liw1 = liw1;
+
+  /* Allocate the vectors (using y0 as a template) */
+
+  allocOK = cvAllocVectors(cv_mem, y0);
+  if (!allocOK) {
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  /* All error checking is complete at this point */
+
+  /* Copy the input parameters into CVODES state */
+
+  cv_mem->cv_f  = f;
+  cv_mem->cv_tn = t0;
+
+  /* Set step parameters */
+
+  cv_mem->cv_q      = 1;
+  cv_mem->cv_L      = 2;
+  cv_mem->cv_qwait  = cv_mem->cv_L;
+  cv_mem->cv_etamax = ETAMX1;
+
+  cv_mem->cv_qu     = 0;
+  cv_mem->cv_hu     = ZERO;
+  cv_mem->cv_tolsf  = ONE;
+
+  /* Set the linear solver addresses to NULL.
+     (We check != NULL later, in CVode, if using CV_NEWTON.) */
+
+  cv_mem->cv_linit  = NULL;
+  cv_mem->cv_lsetup = NULL;
+  cv_mem->cv_lsolve = NULL;
+  cv_mem->cv_lfree  = NULL;
+  cv_mem->cv_lmem   = NULL;
+
+  /* Set forceSetup to FALSE */
+
+  cv_mem->cv_forceSetup = FALSE;
+
+  /* Initialize zn[0] in the history array */
+
+  N_VScale(ONE, y0, cv_mem->cv_zn[0]);
+
+  /* Initialize all the counters */
+
+  cv_mem->cv_nst     = 0;
+  cv_mem->cv_nfe     = 0;
+  cv_mem->cv_ncfn    = 0;
+  cv_mem->cv_netf    = 0;
+  cv_mem->cv_nni     = 0;
+  cv_mem->cv_nsetups = 0;
+  cv_mem->cv_nhnil   = 0;
+  cv_mem->cv_nstlp   = 0;
+  cv_mem->cv_nscon   = 0;
+  cv_mem->cv_nge     = 0;
+
+  cv_mem->cv_irfnd   = 0;
+
+  /* Initialize other integrator optional outputs */
+
+  cv_mem->cv_h0u      = ZERO;
+  cv_mem->cv_next_h   = ZERO;
+  cv_mem->cv_next_q   = 0;
+
+  /* Initialize Stablilty Limit Detection data */
+  /* NOTE: We do this even if stab lim det was not
+     turned on yet. This way, the user can turn it
+     on at any time */
+
+  cv_mem->cv_nor = 0;
+  for (i = 1; i <= 5; i++)
+    for (k = 1; k <= 3; k++) 
+      cv_mem->cv_ssdat[i-1][k-1] = ZERO;
+
+  /* Problem has been successfully initialized */
+
+  cv_mem->cv_MallocDone = TRUE;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define lrw1 (cv_mem->cv_lrw1)
+#define liw1 (cv_mem->cv_liw1)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeReInit
+ *
+ * CVodeReInit re-initializes CVODES's memory for a problem, assuming
+ * it has already been allocated in a prior CVodeInit call.
+ * All problem specification inputs are checked for errors.
+ * If any error occurs during initialization, it is reported to the
+ * file whose file pointer is errfp.
+ * The return value is CV_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int CVodeReInit(void *cvode_mem, realtype t0, N_Vector y0)
+{
+  CVodeMem cv_mem;
+  int i,k;
+ 
+  /* Check cvode_mem */
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeReInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if cvode_mem was allocated */
+
+  if (cv_mem->cv_MallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_MALLOC, "CVODES", "CVodeReInit", MSGCV_NO_MALLOC);
+    return(CV_NO_MALLOC);
+  }
+
+  /* Check for legal input parameters */
+
+  if (y0 == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeReInit", MSGCV_NULL_Y0);
+    return(CV_ILL_INPUT);
+  }
+  
+  /* Copy the input parameters into CVODES state */
+
+  cv_mem->cv_tn = t0;
+
+  /* Set step parameters */
+
+  cv_mem->cv_q      = 1;
+  cv_mem->cv_L      = 2;
+  cv_mem->cv_qwait  = cv_mem->cv_L;
+  cv_mem->cv_etamax = ETAMX1;
+
+  cv_mem->cv_qu     = 0;
+  cv_mem->cv_hu     = ZERO;
+  cv_mem->cv_tolsf  = ONE;
+
+  /* Set forceSetup to FALSE */
+
+  cv_mem->cv_forceSetup = FALSE;
+
+  /* Initialize zn[0] in the history array */
+
+  N_VScale(ONE, y0, cv_mem->cv_zn[0]);
+ 
+  /* Initialize all the counters */
+
+  cv_mem->cv_nst     = 0;
+  cv_mem->cv_nfe     = 0;
+  cv_mem->cv_ncfn    = 0;
+  cv_mem->cv_netf    = 0;
+  cv_mem->cv_nni     = 0;
+  cv_mem->cv_nsetups = 0;
+  cv_mem->cv_nhnil   = 0;
+  cv_mem->cv_nstlp   = 0;
+  cv_mem->cv_nscon   = 0;
+  cv_mem->cv_nge     = 0;
+
+  cv_mem->cv_irfnd   = 0;
+
+  /* Initialize other integrator optional outputs */
+
+  cv_mem->cv_h0u      = ZERO;
+  cv_mem->cv_next_h   = ZERO;
+  cv_mem->cv_next_q   = 0;
+
+  /* Initialize Stablilty Limit Detection data */
+
+  cv_mem->cv_nor = 0;
+  for (i = 1; i <= 5; i++)
+    for (k = 1; k <= 3; k++) 
+      cv_mem->cv_ssdat[i-1][k-1] = ZERO;
+  
+  /* Problem has been successfully re-initialized */
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeSStolerances
+ * CVodeSVtolerances
+ * CVodeWFtolerances
+ *
+ * These functions specify the integration tolerances. One of them
+ * MUST be called before the first call to CVode.
+ *
+ * CVodeSStolerances specifies scalar relative and absolute tolerances.
+ * CVodeSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component).
+ * CVodeWFtolerances specifies a user-provides function (of type CVEwtFn)
+ *   which will be called to set the error weight vector.
+ */
+
+int CVodeSStolerances(void *cvode_mem, realtype reltol, realtype abstol)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSStolerances", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_MallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_MALLOC, "CVODES", "CVodeSStolerances", MSGCV_NO_MALLOC);
+    return(CV_NO_MALLOC);
+  }
+
+  /* Check inputs */
+
+  if (reltol < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSStolerances", MSGCV_BAD_RELTOL);
+    return(CV_ILL_INPUT);
+  }
+
+  if (abstol < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSStolerances", MSGCV_BAD_ABSTOL);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  
+  cv_mem->cv_reltol = reltol;
+  cv_mem->cv_Sabstol = abstol;
+
+  cv_mem->cv_itol = CV_SS;
+
+  cv_mem->cv_user_efun = FALSE;
+  cv_mem->cv_efun = cvEwtSet;
+  cv_mem->cv_e_data = NULL; /* will be set to cvode_mem in InitialSetup */
+
+  return(CV_SUCCESS);
+}
+
+
+int CVodeSVtolerances(void *cvode_mem, realtype reltol, N_Vector abstol)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSVtolerances", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_MallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_MALLOC, "CVODES", "CVodeSVtolerances", MSGCV_NO_MALLOC);
+    return(CV_NO_MALLOC);
+  }
+
+  /* Check inputs */
+
+  if (reltol < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSVtolerances", MSGCV_BAD_RELTOL);
+    return(CV_ILL_INPUT);
+  }
+
+  if (N_VMin(abstol) < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSVtolerances", MSGCV_BAD_ABSTOL);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  
+  if ( !(cv_mem->cv_VabstolMallocDone) ) {
+    cv_mem->cv_Vabstol = N_VClone(cv_mem->cv_ewt);
+    lrw += lrw1;
+    liw += liw1;
+    cv_mem->cv_VabstolMallocDone = TRUE;
+  }
+
+  cv_mem->cv_reltol = reltol;
+  N_VScale(ONE, abstol, cv_mem->cv_Vabstol);
+
+  cv_mem->cv_itol = CV_SV;
+
+  cv_mem->cv_user_efun = FALSE;
+  cv_mem->cv_efun = cvEwtSet;
+  cv_mem->cv_e_data = NULL; /* will be set to cvode_mem in InitialSetup */
+
+  return(CV_SUCCESS);
+}
+
+
+int CVodeWFtolerances(void *cvode_mem, CVEwtFn efun)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeWFtolerances", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_MallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_MALLOC, "CVODES", "CVodeWFtolerances", MSGCV_NO_MALLOC);
+    return(CV_NO_MALLOC);
+  }
+
+  cv_mem->cv_itol = CV_WF;
+
+  cv_mem->cv_user_efun = TRUE;
+  cv_mem->cv_efun = efun;
+  cv_mem->cv_e_data = NULL; /* will be set to user_data in InitialSetup */
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeQuadInit
+ *
+ * CVodeQuadInit allocates and initializes quadrature related 
+ * memory for a problem. All problem specification inputs are 
+ * checked for errors. If any error occurs during initialization, 
+ * it is reported to the file whose file pointer is errfp. 
+ * The return value is CV_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int CVodeQuadInit(void *cvode_mem, CVQuadRhsFn fQ, N_Vector yQ0)
+{
+  CVodeMem cv_mem;
+  booleantype allocOK;
+  long int lrw1Q, liw1Q;
+
+  /* Check cvode_mem */
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeQuadInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Set space requirements for one N_Vector */
+  N_VSpace(yQ0, &lrw1Q, &liw1Q);
+  cv_mem->cv_lrw1Q = lrw1Q;
+  cv_mem->cv_liw1Q = liw1Q;
+
+  /* Allocate the vectors (using yQ0 as a template) */
+  allocOK = cvQuadAllocVectors(cv_mem, yQ0);
+  if (!allocOK) {
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeQuadInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  /* Initialize znQ[0] in the history array */
+  N_VScale(ONE, yQ0, cv_mem->cv_znQ[0]);
+
+  /* Copy the input parameters into CVODES state */
+  cv_mem->cv_fQ = fQ;
+
+  /* Initialize counters */
+  cv_mem->cv_nfQe  = 0;
+  cv_mem->cv_netfQ = 0;
+
+  /* Quadrature integration turned ON */
+  cv_mem->cv_quadr = TRUE;
+  cv_mem->cv_QuadMallocDone = TRUE;
+
+  /* Quadrature initialization was successfull */
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define lrw1Q (cv_mem->cv_lrw1Q)
+#define liw1Q (cv_mem->cv_liw1Q)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeQuadReInit
+ *
+ * CVodeQuadReInit re-initializes CVODES's quadrature related memory 
+ * for a problem, assuming it has already been allocated in prior 
+ * calls to CVodeInit and CVodeQuadInit. 
+ * All problem specification inputs are checked for errors.
+ * If any error occurs during initialization, it is reported to the
+ * file whose file pointer is errfp.
+ * The return value is CV_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int CVodeQuadReInit(void *cvode_mem, N_Vector yQ0)
+{
+  CVodeMem cv_mem;
+
+  /* Check cvode_mem */
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeQuadReInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Ckeck if quadrature was initialized? */
+  if (cv_mem->cv_QuadMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUAD, "CVODES", "CVodeQuadReInit", MSGCV_NO_QUAD);
+    return(CV_NO_QUAD);
+  }
+
+  /* Initialize znQ[0] in the history array */
+  N_VScale(ONE, yQ0, cv_mem->cv_znQ[0]);
+
+  /* Initialize counters */
+  cv_mem->cv_nfQe  = 0;
+  cv_mem->cv_netfQ = 0;
+
+  /* Quadrature integration turned ON */
+  cv_mem->cv_quadr = TRUE;
+
+  /* Quadrature re-initialization was successfull */
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeQuadSStolerances
+ * CVodeQuadSVtolerances
+ *
+ * These functions specify the integration tolerances for sensitivity
+ * variables. One of them MUST be called before the first call to 
+ * CVode IF error control on the quadrature variables is enabled
+ * (see CVodeSetQuadErrCon).
+ *
+ * CVodeQuadSStolerances specifies scalar relative and absolute tolerances.
+ * CVodeQuadSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute toleranc (a potentially different absolute tolerance for each
+ *   vector component).
+ */
+
+int CVodeQuadSStolerances(void *cvode_mem, realtype reltolQ, realtype abstolQ)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeQuadSStolerances", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Ckeck if quadrature was initialized? */
+
+  if (cv_mem->cv_QuadMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUAD, "CVODES", "CVodeQuadSStolerances", MSGCV_NO_QUAD); 
+    return(CV_NO_QUAD);
+  }
+
+  /* Test user-supplied tolerances */
+
+  if (reltolQ < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSStolerances", MSGCV_BAD_RELTOLQ);
+    return(CV_ILL_INPUT);
+  }
+
+  if (abstolQ < 0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSStolerances", MSGCV_BAD_ABSTOLQ);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+
+  cv_mem->cv_itolQ = CV_SS;
+
+  cv_mem->cv_reltolQ  = reltolQ;
+  cv_mem->cv_SabstolQ = abstolQ;
+
+  return(CV_SUCCESS);
+}
+
+int CVodeQuadSVtolerances(void *cvode_mem, realtype reltolQ, N_Vector abstolQ)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeQuadSVtolerances", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Ckeck if quadrature was initialized? */
+
+  if (cv_mem->cv_QuadMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUAD, "CVODES", "CVodeQuadSVtolerances", MSGCV_NO_QUAD); 
+    return(CV_NO_QUAD);
+  }
+
+  /* Test user-supplied tolerances */
+
+  if (reltolQ < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSVtolerances", MSGCV_BAD_RELTOLQ);
+    return(CV_ILL_INPUT);
+  }
+
+  if (abstolQ == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSVtolerances", MSGCV_NULL_ABSTOLQ);
+    return(CV_ILL_INPUT);
+  }
+
+  if (N_VMin(abstolQ) < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSVtolerances", MSGCV_BAD_ABSTOLQ);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+
+  cv_mem->cv_itolQ = CV_SV;
+
+  cv_mem->cv_reltolQ  = reltolQ;
+
+  if ( !(cv_mem->cv_VabstolQMallocDone) ) {
+    cv_mem->cv_VabstolQ = N_VClone(cv_mem->cv_tempvQ);
+    lrw += lrw1Q;
+    liw += liw1Q;
+    cv_mem->cv_VabstolQMallocDone = TRUE;
+  }
+  
+  N_VScale(ONE, abstolQ, cv_mem->cv_VabstolQ);
+
+  return(CV_SUCCESS);
+}
+
+
+/*-----------------------------------------------------------------*/
+
+#define stgr1alloc   (cv_mem->cv_stgr1alloc)
+#define nniS1        (cv_mem->cv_nniS1)
+#define ncfnS1       (cv_mem->cv_ncfnS1)
+#define ncfS1        (cv_mem->cv_ncfS1)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeSensInit
+ *
+ * CVodeSensInit allocates and initializes sensitivity related 
+ * memory for a problem (using a sensitivity RHS function of type
+ * CVSensRhsFn). All problem specification inputs are checked for 
+ * errors.
+ * The return value is CV_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int CVodeSensInit(void *cvode_mem, int Ns, int ism, CVSensRhsFn fS, N_Vector *yS0)
+{
+  CVodeMem cv_mem;
+  booleantype allocOK;
+  int is;
+  
+  /* Check cvode_mem */
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSensInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if CVodeSensInit or CVodeSensInit1 was already called */
+
+  if (cv_mem->cv_SensMallocDone) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensInit", MSGCV_SENSINIT_2);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Check if Ns is legal */
+
+  if (Ns<=0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensInit", MSGCV_BAD_NS);
+    return(CV_ILL_INPUT);
+  }
+  cv_mem->cv_Ns = Ns;
+
+  /* Check if ism is compatible */
+
+  if (ism==CV_STAGGERED1) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensInit", MSGCV_BAD_ISM_IFS);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Check if ism is legal */
+
+  if ((ism!=CV_SIMULTANEOUS) && (ism!=CV_STAGGERED)) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensInit", MSGCV_BAD_ISM);
+    return(CV_ILL_INPUT);
+  }
+  cv_mem->cv_ism = ism;
+
+  /* Check if yS0 is non-null */
+
+  if (yS0 == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensInit", MSGCV_NULL_YS0);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Store sensitivity RHS-related data */
+
+  cv_mem->cv_ifS = CV_ALLSENS;
+  cv_mem->cv_fS1 = NULL;
+
+  if (fS == NULL) {
+
+    cv_mem->cv_fSDQ = TRUE;
+    cv_mem->cv_fS   = cvSensRhsInternalDQ;
+    cv_mem->cv_fS_data = cvode_mem;
+
+  } else {
+
+    cv_mem->cv_fSDQ = FALSE;
+    cv_mem->cv_fS   = fS;
+    cv_mem->cv_fS_data = cv_mem->cv_user_data;
+
+  }
+
+  /* No memory allocation for STAGGERED1 */
+
+  stgr1alloc = FALSE;
+
+  /* Allocate the vectors (using yS0[0] as a template) */
+
+  allocOK = cvSensAllocVectors(cv_mem, yS0[0]);
+  if (!allocOK) {
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeSensInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+  
+  /*---------------------------------------------- 
+    All error checking is complete at this point 
+    -----------------------------------------------*/
+
+  /* Initialize znS[0] in the history array */
+
+  for (is=0; is<Ns; is++) 
+    N_VScale(ONE, yS0[is], cv_mem->cv_znS[0][is]);
+
+  /* Initialize all sensitivity related counters */
+
+  cv_mem->cv_nfSe     = 0;
+  cv_mem->cv_nfeS     = 0;
+  cv_mem->cv_ncfnS    = 0;
+  cv_mem->cv_netfS    = 0;
+  cv_mem->cv_nniS     = 0;
+  cv_mem->cv_nsetupsS = 0;
+
+  /* Set default values for plist and pbar */
+
+  for (is=0; is<Ns; is++) {
+    cv_mem->cv_plist[is] = is;
+    cv_mem->cv_pbar[is] = ONE;
+  }
+
+  /* Sensitivities will be computed */
+
+  cv_mem->cv_sensi = TRUE;
+  cv_mem->cv_SensMallocDone = TRUE;
+
+  /* Sensitivity initialization was successfull */
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeSensInit1
+ *
+ * CVodeSensInit1 allocates and initializes sensitivity related 
+ * memory for a problem (using a sensitivity RHS function of type
+ * CVSensRhs1Fn). All problem specification inputs are checked for 
+ * errors.
+ * The return value is CV_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int CVodeSensInit1(void *cvode_mem, int Ns, int ism, CVSensRhs1Fn fS1, N_Vector *yS0)
+{
+  CVodeMem cv_mem;
+  booleantype allocOK;
+  int is;
+  
+  /* Check cvode_mem */
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSensInit1", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if CVodeSensInit or CVodeSensInit1 was already called */
+
+  if (cv_mem->cv_SensMallocDone) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensInit1", MSGCV_SENSINIT_2);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Check if Ns is legal */
+
+  if (Ns<=0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensInit1", MSGCV_BAD_NS);
+    return(CV_ILL_INPUT);
+  }
+  cv_mem->cv_Ns = Ns;
+
+  /* Check if ism is legal */
+
+  if ((ism!=CV_SIMULTANEOUS) && (ism!=CV_STAGGERED) && (ism!=CV_STAGGERED1)) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensInit1", MSGCV_BAD_ISM);
+    return(CV_ILL_INPUT);
+  }
+  cv_mem->cv_ism = ism;
+
+  /* Check if yS0 is non-null */
+
+  if (yS0 == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensInit1", MSGCV_NULL_YS0);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Store sensitivity RHS-related data */
+
+  cv_mem->cv_ifS = CV_ONESENS;
+  cv_mem->cv_fS  = NULL;
+
+  if (fS1 == NULL) {
+
+    cv_mem->cv_fSDQ = TRUE;
+    cv_mem->cv_fS1  = cvSensRhs1InternalDQ;
+    cv_mem->cv_fS_data = cvode_mem;
+
+  } else {
+
+    cv_mem->cv_fSDQ = FALSE;
+    cv_mem->cv_fS1  = fS1;
+    cv_mem->cv_fS_data = cv_mem->cv_user_data;
+
+  }
+
+  /* Allocate ncfS1, ncfnS1, and nniS1 if needed */
+
+  if (ism == CV_STAGGERED1) {
+    stgr1alloc = TRUE;
+    ncfS1 = NULL;
+    ncfS1 = (int*)malloc(Ns*sizeof(int));
+    ncfnS1 = NULL;
+    ncfnS1 = (long int*)malloc(Ns*sizeof(long int));
+    nniS1 = NULL;
+    nniS1 = (long int*)malloc(Ns*sizeof(long int));
+    if ( (ncfS1 == NULL) || (ncfnS1 == NULL) || (nniS1 == NULL) ) {
+      cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeSensInit1", MSGCV_MEM_FAIL);
+      return(CV_MEM_FAIL);
+    }
+  } else {
+    stgr1alloc = FALSE;
+  }
+
+  /* Allocate the vectors (using yS0[0] as a template) */
+
+  allocOK = cvSensAllocVectors(cv_mem, yS0[0]);
+  if (!allocOK) {
+    if (stgr1alloc) {
+      free(ncfS1); ncfS1 = NULL;
+      free(ncfnS1); ncfnS1 = NULL;
+      free(nniS1); nniS1 = NULL;
+    }
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeSensInit1", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+  
+  /*---------------------------------------------- 
+    All error checking is complete at this point 
+    -----------------------------------------------*/
+
+  /* Initialize znS[0] in the history array */
+
+  for (is=0; is<Ns; is++) 
+    N_VScale(ONE, yS0[is], cv_mem->cv_znS[0][is]);
+
+  /* Initialize all sensitivity related counters */
+
+  cv_mem->cv_nfSe     = 0;
+  cv_mem->cv_nfeS     = 0;
+  cv_mem->cv_ncfnS    = 0;
+  cv_mem->cv_netfS    = 0;
+  cv_mem->cv_nniS     = 0;
+  cv_mem->cv_nsetupsS = 0;
+  if (ism==CV_STAGGERED1)
+    for (is=0; is<Ns; is++) {
+      ncfnS1[is] = 0;
+      nniS1[is] = 0;
+    }
+
+  /* Set default values for plist and pbar */
+
+  for (is=0; is<Ns; is++) {
+    cv_mem->cv_plist[is] = is;
+    cv_mem->cv_pbar[is] = ONE;
+  }
+
+  /* Sensitivities will be computed */
+
+  cv_mem->cv_sensi = TRUE;
+  cv_mem->cv_SensMallocDone = TRUE;
+
+  /* Sensitivity initialization was successfull */
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define Ns  (cv_mem->cv_Ns)
+#define ifS (cv_mem->cv_ifS)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeSensReInit
+ *
+ * CVodeSensReInit re-initializes CVODES's sensitivity related memory 
+ * for a problem, assuming it has already been allocated in prior 
+ * calls to CVodeInit and CVodeSensInit/CVodeSensInit1. 
+ * All problem specification inputs are checked for errors.
+ * The number of sensitivities Ns is assumed to be unchanged since
+ * the previous call to CVodeSensInit.
+ * If any error occurs during initialization, it is reported to the
+ * file whose file pointer is errfp.
+ * The return value is CV_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */ 
+
+int CVodeSensReInit(void *cvode_mem, int ism, N_Vector *yS0)
+{
+  CVodeMem cv_mem;
+  int is;  
+
+  /* Check cvode_mem */
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSensReInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was sensitivity initialized? */
+
+  if (cv_mem->cv_SensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeSensReInit", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  } 
+
+  /* Check if ism is compatible */
+
+  if ((ifS==CV_ALLSENS) && (ism==CV_STAGGERED1)) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensReInit", MSGCV_BAD_ISM_IFS);
+    return(CV_ILL_INPUT);
+  }
+  
+  /* Check if ism is legal */
+
+  if ((ism!=CV_SIMULTANEOUS) && (ism!=CV_STAGGERED) && (ism!=CV_STAGGERED1)) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensReInit", MSGCV_BAD_ISM);
+    return(CV_ILL_INPUT);
+  }
+  cv_mem->cv_ism = ism;
+
+  /* Check if yS0 is non-null */
+
+  if (yS0 == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensReInit", MSGCV_NULL_YS0);
+    return(CV_ILL_INPUT);
+  }  
+
+  /* Allocate ncfS1, ncfnS1, and nniS1 if needed */
+
+  if ( (ism==CV_STAGGERED1) && (stgr1alloc==FALSE) ) {
+    stgr1alloc = TRUE;
+    ncfS1 = NULL;
+    ncfS1 = (int*)malloc(Ns*sizeof(int));
+    ncfnS1 = NULL;
+    ncfnS1 = (long int*)malloc(Ns*sizeof(long int));
+    nniS1 = NULL;
+    nniS1 = (long int*)malloc(Ns*sizeof(long int));
+    if ( (ncfS1==NULL) || (ncfnS1==NULL) || (nniS1==NULL) ) {
+      cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeSensReInit", MSGCV_MEM_FAIL);
+      return(CV_MEM_FAIL);
+    }
+  }
+
+  /*---------------------------------------------- 
+    All error checking is complete at this point 
+    -----------------------------------------------*/
+
+  /* Initialize znS[0] in the history array */
+
+  for (is=0; is<Ns; is++) 
+    N_VScale(ONE, yS0[is], cv_mem->cv_znS[0][is]);
+
+  /* Initialize all sensitivity related counters */
+
+  cv_mem->cv_nfSe     = 0;
+  cv_mem->cv_nfeS     = 0;
+  cv_mem->cv_ncfnS    = 0;
+  cv_mem->cv_netfS    = 0;
+  cv_mem->cv_nniS     = 0;
+  cv_mem->cv_nsetupsS = 0;
+  if (ism==CV_STAGGERED1)
+    for (is=0; is<Ns; is++) {
+      ncfnS1[is] = 0;
+      nniS1[is] = 0;
+    }
+
+  /* Problem has been successfully re-initialized */
+
+  cv_mem->cv_sensi = TRUE;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeSensSStolerances
+ * CVodeSensSVtolerances
+ * CVodeSensEEtolerances
+ *
+ * These functions specify the integration tolerances for sensitivity
+ * variables. One of them MUST be called before the first call to CVode.
+ *
+ * CVodeSensSStolerances specifies scalar relative and absolute tolerances.
+ * CVodeSensSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance for each sensitivity vector (a potentially different
+ *   absolute tolerance for each vector component).
+ * CVodeEEtolerances specifies that tolerances for sensitivity variables
+ *   should be estimated from those provided for the state variables.
+ */
+
+int CVodeSensSStolerances(void *cvode_mem, realtype reltolS, realtype *abstolS)
+{
+  CVodeMem cv_mem;
+  int is;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSensSStolerances", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was sensitivity initialized? */
+
+  if (cv_mem->cv_SensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeSensSStolerances", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  } 
+
+  /* Test user-supplied tolerances */
+    
+  if (reltolS < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensSStolerances", MSGCV_BAD_RELTOLS);
+    return(CV_ILL_INPUT);
+  }
+
+  if (abstolS == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensSStolerances", MSGCV_NULL_ABSTOLS);
+    return(CV_ILL_INPUT);
+  }
+
+  for (is=0; is<Ns; is++)
+    if (abstolS[is] < ZERO) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensSStolerances", MSGCV_BAD_ABSTOLS);
+      return(CV_ILL_INPUT);
+    }
+
+  /* Copy tolerances into memory */
+
+  cv_mem->cv_itolS = CV_SS;
+
+  cv_mem->cv_reltolS = reltolS;
+
+  if ( !(cv_mem->cv_SabstolSMallocDone) ) {
+    cv_mem->cv_SabstolS = NULL;
+    cv_mem->cv_SabstolS = (realtype *)malloc(Ns*sizeof(realtype));
+    lrw += Ns;
+    cv_mem->cv_SabstolSMallocDone = TRUE;
+  }
+
+  for (is=0; is<Ns; is++)
+    cv_mem->cv_SabstolS[is] = abstolS[is];
+
+  return(CV_SUCCESS);
+}
+
+int CVodeSensSVtolerances(void *cvode_mem,  realtype reltolS, N_Vector *abstolS)
+{
+  CVodeMem cv_mem;
+  int is;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSensSVtolerances", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was sensitivity initialized? */
+
+  if (cv_mem->cv_SensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeSensSVtolerances", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  } 
+
+  Ns = cv_mem->cv_Ns;
+
+  /* Test user-supplied tolerances */
+    
+  if (reltolS < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensSVtolerances", MSGCV_BAD_RELTOLS);
+    return(CV_ILL_INPUT);
+  }
+
+  if (abstolS == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensSVtolerances", MSGCV_NULL_ABSTOLS);
+    return(CV_ILL_INPUT);
+  }
+
+  for (is=0; is<Ns; is++) 
+    if (N_VMin(abstolS[is]) < ZERO) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensSVtolerances", MSGCV_BAD_ABSTOLS);
+      return(CV_ILL_INPUT);
+    }
+
+  /* Copy tolerances into memory */
+
+  cv_mem->cv_itolS = CV_SV;
+
+  cv_mem->cv_reltolS = reltolS;
+
+  if ( !(cv_mem->cv_VabstolSMallocDone) ) {
+    cv_mem->cv_VabstolS = N_VCloneVectorArray(Ns, cv_mem->cv_tempv);
+    lrw += Ns*lrw1;
+    liw += Ns*liw1;
+    cv_mem->cv_VabstolSMallocDone = TRUE;
+  }
+  
+  for (is=0; is<Ns; is++)    
+    N_VScale(ONE, abstolS[is], cv_mem->cv_VabstolS[is]);
+
+  return(CV_SUCCESS);
+}
+
+
+int CVodeSensEEtolerances(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSensEEtolerances", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was sensitivity initialized? */
+
+  if (cv_mem->cv_SensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeSensEEtolerances", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  } 
+
+  cv_mem->cv_itolS = CV_EE;
+
+  return(CV_SUCCESS);
+}
+
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeQuadSensInit
+ *
+ */
+
+int CVodeQuadSensInit(void *cvode_mem, CVQuadSensRhsFn fQS, N_Vector *yQS0)
+{
+  CVodeMem    cv_mem;
+  booleantype allocOK;
+  int is;
+
+  /* Check cvode_mem */
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeQuadSensInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if sensitivity analysis is active */
+  if (!cv_mem->cv_sensi) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSensInit", MSGCV_NO_SENSI);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Check if yQS0 is non-null */
+  if (yQS0 == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSensInit", MSGCV_NULL_YQS0);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Allocate the vectors (using yQS0[0] as a template) */
+  allocOK = cvQuadSensAllocVectors(cv_mem, yQS0[0]);
+  if (!allocOK) {
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeQuadSensInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  /*---------------------------------------------- 
+    All error checking is complete at this point 
+    -----------------------------------------------*/
+
+  /* Set fQS */
+  if (fQS == NULL) {
+
+    cv_mem->cv_fQSDQ = TRUE;
+    cv_mem->cv_fQS = cvQuadSensRhsInternalDQ;
+
+    cv_mem->cv_fQS_data = cvode_mem;
+
+  } else {
+
+    cv_mem->cv_fQSDQ = FALSE;
+    cv_mem->cv_fQS = fQS;
+
+    cv_mem->cv_fQS_data = cv_mem->cv_user_data;
+
+  }
+
+  /* Initialize znQS[0] in the history array */
+  for (is=0; is<Ns; is++) 
+    N_VScale(ONE, yQS0[is], cv_mem->cv_znQS[0][is]);
+
+  /* Initialize all sensitivity related counters */
+  cv_mem->cv_nfQSe  = 0;
+  cv_mem->cv_nfQeS  = 0;
+  cv_mem->cv_netfQS = 0;
+  
+  /* Quadrature sensitivities will be computed */
+  cv_mem->cv_quadr_sensi = TRUE;
+  cv_mem->cv_QuadSensMallocDone = TRUE;
+
+  /* Sensitivity initialization was successfull */
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeQuadSensReInit
+ *
+ */
+
+int CVodeQuadSensReInit(void *cvode_mem, N_Vector *yQS0)
+{
+  CVodeMem cv_mem;
+  int is;
+
+  /* Check cvode_mem */
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeQuadSensReInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if sensitivity analysis is active */
+  if (!cv_mem->cv_sensi) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSensReInit", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  /* Was quadrature sensitivity initialized? */
+  if (cv_mem->cv_QuadSensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUADSENS, "CVODES", "CVodeQuadSensReInit", MSGCV_NO_QUADSENSI);
+    return(CV_NO_QUADSENS);
+  } 
+
+  /* Check if yQS0 is non-null */
+  if (yQS0 == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSensReInit", MSGCV_NULL_YQS0);
+    return(CV_ILL_INPUT);
+  }
+
+  /*---------------------------------------------- 
+    All error checking is complete at this point 
+    -----------------------------------------------*/
+
+  /* Initialize znQS[0] in the history array */
+  for (is=0; is<Ns; is++) 
+    N_VScale(ONE, yQS0[is], cv_mem->cv_znQS[0][is]);
+
+  /* Initialize all sensitivity related counters */
+  cv_mem->cv_nfQSe  = 0;
+  cv_mem->cv_nfQeS  = 0;
+  cv_mem->cv_netfQS = 0;
+
+  /* Quadrature sensitivities will be computed */
+  cv_mem->cv_quadr_sensi = TRUE;
+
+  /* Problem has been successfully re-initialized */
+  return(CV_SUCCESS);
+}
+
+
+/*
+ * CVodeQuadSensSStolerances
+ * CVodeQuadSensSVtolerances
+ * CVodeQuadSensEEtolerances
+ *
+ * These functions specify the integration tolerances for quadrature
+ * sensitivity variables. One of them MUST be called before the first
+ * call to CVode IF these variables are included in the error test.
+ *
+ * CVodeQuadSensSStolerances specifies scalar relative and absolute tolerances.
+ * CVodeQuadSensSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance for each quadrature sensitivity vector (a potentially
+ *   different absolute tolerance for each vector component).
+ * CVodeQuadSensEEtolerances specifies that tolerances for sensitivity variables
+ *   should be estimated from those provided for the quadrature variables.
+ *   In this case, tolerances for the quadrature variables must be
+ *   specified through a call to one of CVodeQuad**tolerances.
+ */
+
+int CVodeQuadSensSStolerances(void *cvode_mem, realtype reltolQS, realtype *abstolQS)
+{
+  CVodeMem cv_mem;
+  int is;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeQuadSensSStolerances", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if sensitivity was initialized */
+
+  if (cv_mem->cv_SensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeQuadSensSStolerances", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  } 
+
+  /* Ckeck if quadrature sensitivity was initialized? */
+
+  if (cv_mem->cv_QuadSensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUADSENS, "CVODES", "CVodeQuadSSensSStolerances", MSGCV_NO_QUADSENSI); 
+    return(CV_NO_QUAD);
+  }
+
+  /* Test user-supplied tolerances */
+    
+  if (reltolQS < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSensSStolerances", MSGCV_BAD_RELTOLQS);
+    return(CV_ILL_INPUT);
+  }
+
+  if (abstolQS == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSensSStolerances", MSGCV_NULL_ABSTOLQS);
+    return(CV_ILL_INPUT);
+  }
+
+  for (is=0; is<Ns; is++)
+    if (abstolQS[is] < ZERO) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSensSStolerances", MSGCV_BAD_ABSTOLQS);
+      return(CV_ILL_INPUT);
+    }
+
+  /* Copy tolerances into memory */
+
+  cv_mem->cv_itolQS = CV_SS;
+
+  cv_mem->cv_reltolQS = reltolQS;
+
+  if ( !(cv_mem->cv_SabstolQSMallocDone) ) {
+    cv_mem->cv_SabstolQS = NULL;
+    cv_mem->cv_SabstolQS = (realtype *)malloc(Ns*sizeof(realtype));
+    lrw += Ns;
+    cv_mem->cv_SabstolQSMallocDone = TRUE;
+  }
+  
+  for (is=0; is<Ns; is++)
+    cv_mem->cv_SabstolQS[is] = abstolQS[is];
+
+  return(CV_SUCCESS);
+}
+
+int CVodeQuadSensSVtolerances(void *cvode_mem,  realtype reltolQS, N_Vector *abstolQS)
+{
+  CVodeMem cv_mem;
+  int is;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeQuadSensSVtolerances", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* check if sensitivity was initialized */
+
+  if (cv_mem->cv_SensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeQuadSensSVtolerances", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  } 
+
+  /* Ckeck if quadrature sensitivity was initialized? */
+
+  if (cv_mem->cv_QuadSensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUADSENS, "CVODES", "CVodeQuadSensSVtolerances", MSGCV_NO_QUADSENSI); 
+    return(CV_NO_QUAD);
+  }
+
+  Ns = cv_mem->cv_Ns;
+
+  /* Test user-supplied tolerances */
+    
+  if (reltolQS < ZERO) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSensSVtolerances", MSGCV_BAD_RELTOLQS);
+    return(CV_ILL_INPUT);
+  }
+
+  if (abstolQS == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSensSVtolerances", MSGCV_NULL_ABSTOLQS);
+    return(CV_ILL_INPUT);
+  }
+
+  for (is=0; is<Ns; is++) 
+    if (N_VMin(abstolQS[is]) < ZERO) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeQuadSensSVtolerances", MSGCV_BAD_ABSTOLQS);
+      return(CV_ILL_INPUT);
+    }
+
+  /* Copy tolerances into memory */
+
+  cv_mem->cv_itolQS = CV_SV;
+
+  cv_mem->cv_reltolQS = reltolQS;
+
+  if ( !(cv_mem->cv_VabstolQSMallocDone) ) {
+    cv_mem->cv_VabstolQS = N_VCloneVectorArray(Ns, cv_mem->cv_tempvQ);
+    lrw += Ns*lrw1Q;
+    liw += Ns*liw1Q;
+    cv_mem->cv_VabstolQSMallocDone = TRUE;
+  }
+  
+  for (is=0; is<Ns; is++)    
+    N_VScale(ONE, abstolQS[is], cv_mem->cv_VabstolQS[is]);
+
+  return(CV_SUCCESS);
+}
+
+
+int CVodeQuadSensEEtolerances(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeQuadSensEEtolerances", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* check if sensitivity was initialized */
+
+  if (cv_mem->cv_SensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeQuadSensEEtolerances", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  } 
+
+  /* Ckeck if quadrature sensitivity was initialized? */
+
+  if (cv_mem->cv_QuadSensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUADSENS, "CVODES", "CVodeQuadSensEEtolerances", MSGCV_NO_QUADSENSI); 
+    return(CV_NO_QUAD);
+  }
+
+  cv_mem->cv_itolQS = CV_EE;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeSensToggleOff
+ *
+ * CVodeSensToggleOff deactivates sensitivity calculations.
+ * It does NOT deallocate sensitivity-related memory.
+ */
+
+int CVodeSensToggleOff(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+
+  /* Check cvode_mem */
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSensToggleOff", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Disable sensitivities */
+  cv_mem->cv_sensi = FALSE;
+  cv_mem->cv_quadr_sensi = FALSE;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define gfun    (cv_mem->cv_gfun)
+#define glo     (cv_mem->cv_glo)
+#define ghi     (cv_mem->cv_ghi)
+#define grout   (cv_mem->cv_grout)
+#define iroots  (cv_mem->cv_iroots)
+#define rootdir (cv_mem->cv_rootdir)
+#define gactive (cv_mem->cv_gactive)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * CVodeRootInit
+ *
+ * CVodeRootInit initializes a rootfinding problem to be solved
+ * during the integration of the ODE system.  It loads the root
+ * function pointer and the number of root functions, and allocates
+ * workspace memory.  The return value is CV_SUCCESS = 0 if no errors
+ * occurred, or a negative value otherwise.
+ */
+
+int CVodeRootInit(void *cvode_mem, int nrtfn, CVRootFn g)
+{
+  CVodeMem cv_mem;
+  int i, nrt;
+
+  /* Check cvode_mem */
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeRootInit", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  nrt = (nrtfn < 0) ? 0 : nrtfn;
+
+  /* If rerunning CVodeRootInit() with a different number of root
+     functions (changing number of gfun components), then free
+     currently held memory resources */
+  if ((nrt != cv_mem->cv_nrtfn) && (cv_mem->cv_nrtfn > 0)) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); rootdir = NULL;
+    free(gactive); gactive = NULL;
+
+    lrw -= 3 * (cv_mem->cv_nrtfn);
+    liw -= 3 * (cv_mem->cv_nrtfn);
+
+  }
+
+  /* If CVodeRootInit() was called with nrtfn == 0, then set cv_nrtfn to
+     zero and cv_gfun to NULL before returning */
+  if (nrt == 0) {
+    cv_mem->cv_nrtfn = nrt;
+    gfun = NULL;
+    return(CV_SUCCESS);
+  }
+
+  /* If rerunning CVodeRootInit() with the same number of root functions
+     (not changing number of gfun components), then check if the root
+     function argument has changed */
+  /* If g != NULL then return as currently reserved memory resources
+     will suffice */
+  if (nrt == cv_mem->cv_nrtfn) {
+    if (g != gfun) {
+      if (g == NULL) {
+	free(glo); glo = NULL;
+	free(ghi); ghi = NULL;
+	free(grout); grout = NULL;
+	free(iroots); iroots = NULL;
+        free(rootdir); rootdir = NULL;
+        free(gactive); gactive = NULL;
+
+        lrw -= 3*nrt;
+        liw -= 3*nrt;
+
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeRootInit", MSGCV_NULL_G);
+        return(CV_ILL_INPUT);
+      }
+      else {
+	gfun = g;
+        return(CV_SUCCESS);
+      }
+    }
+    else return(CV_SUCCESS);
+  }
+
+  /* Set variable values in CVode memory block */
+  cv_mem->cv_nrtfn = nrt;
+  if (g == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeRootInit", MSGCV_NULL_G);
+    return(CV_ILL_INPUT);
+  }
+  else gfun = g;
+
+  /* Allocate necessary memory and return */
+  glo = NULL;
+  glo = (realtype *) malloc(nrt*sizeof(realtype));
+  if (glo == NULL) {
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+    
+  ghi = NULL;
+  ghi = (realtype *) malloc(nrt*sizeof(realtype));
+  if (ghi == NULL) {
+    free(glo); glo = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+    
+  grout = NULL;
+  grout = (realtype *) malloc(nrt*sizeof(realtype));
+  if (grout == NULL) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  iroots = NULL;
+  iroots = (int *) malloc(nrt*sizeof(int));
+  if (iroots == NULL) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+  rootdir = NULL;
+  rootdir = (int *) malloc(nrt*sizeof(int));
+  if (rootdir == NULL) {
+    free(glo); glo = NULL; 
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+
+  gactive = NULL;
+  gactive = (booleantype *) malloc(nrt*sizeof(booleantype));
+  if (gactive == NULL) {
+    free(glo); glo = NULL; 
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); rootdir = NULL;
+    cvProcessError(cv_mem, CV_MEM_FAIL, "CVODES", "CVodeRootInit", MSGCV_MEM_FAIL);
+    return(CV_MEM_FAIL);
+  }
+
+
+  /* Set default values for rootdir (both directions) */
+  for(i=0; i<nrt; i++) rootdir[i] = 0;
+
+  /* Set default values for gactive (all active) */
+  for(i=0; i<nrt; i++) gactive[i] = TRUE;
+
+  lrw += 3*nrt;
+  liw += 3*nrt;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Readibility Constants
+ * -----------------------------------------------------------------
+ */
+
+#define f              (cv_mem->cv_f)      
+#define user_data      (cv_mem->cv_user_data) 
+#define efun           (cv_mem->cv_efun)
+#define e_data         (cv_mem->cv_e_data) 
+#define qmax           (cv_mem->cv_qmax)
+#define mxstep         (cv_mem->cv_mxstep)
+#define mxhnil         (cv_mem->cv_mxhnil)
+#define sldeton        (cv_mem->cv_sldeton)
+#define hin            (cv_mem->cv_hin)
+#define hmin           (cv_mem->cv_hmin)
+#define hmax_inv       (cv_mem->cv_hmax_inv)
+#define tstop          (cv_mem->cv_tstop)
+#define tstopset       (cv_mem->cv_tstopset)
+#define maxnef         (cv_mem->cv_maxnef)
+#define maxncf         (cv_mem->cv_maxncf)
+#define maxcor         (cv_mem->cv_maxcor)
+#define nlscoef        (cv_mem->cv_nlscoef)
+#define itol           (cv_mem->cv_itol)         
+#define reltol         (cv_mem->cv_reltol)       
+#define Sabstol        (cv_mem->cv_Sabstol) 
+#define Vabstol        (cv_mem->cv_Vabstol) 
+
+#define fQ             (cv_mem->cv_fQ)
+#define errconQ        (cv_mem->cv_errconQ)
+#define itolQ          (cv_mem->cv_itolQ)
+#define reltolQ        (cv_mem->cv_reltolQ)
+#define SabstolQ       (cv_mem->cv_SabstolQ)
+#define VabstolQ       (cv_mem->cv_VabstolQ)
+
+#define ism            (cv_mem->cv_ism)
+#define fS             (cv_mem->cv_fS)
+#define fS1            (cv_mem->cv_fS1)
+#define fS_data        (cv_mem->cv_fS_data)
+#define fSDQ           (cv_mem->cv_fSDQ)
+#define DQtype         (cv_mem->cv_DQtype)
+#define DQrhomax       (cv_mem->cv_DQrhomax)
+#define pbar           (cv_mem->cv_pbar)
+#define errconS        (cv_mem->cv_errconS)
+#define maxcorS        (cv_mem->cv_maxcorS)
+#define itolS          (cv_mem->cv_itolS)
+#define reltolS        (cv_mem->cv_reltolS)
+#define SabstolS       (cv_mem->cv_SabstolS)
+#define VabstolS       (cv_mem->cv_VabstolS)
+#define p              (cv_mem->cv_p)
+#define plist          (cv_mem->cv_plist)
+
+#define fQS            (cv_mem->cv_fQS)
+#define fQS_data       (cv_mem->cv_fQS_data)
+#define fQSDQ          (cv_mem->cv_fQSDQ)
+#define errconQS       (cv_mem->cv_errconQS)
+#define itolQS         (cv_mem->cv_itolQS)
+#define reltolQS       (cv_mem->cv_reltolQS)
+#define SabstolQS      (cv_mem->cv_SabstolQS)
+#define VabstolQS      (cv_mem->cv_VabstolQS)
+
+#define uround         (cv_mem->cv_uround)  
+#define zn             (cv_mem->cv_zn) 
+#define ewt            (cv_mem->cv_ewt)  
+#define y              (cv_mem->cv_y)
+#define acor           (cv_mem->cv_acor)
+#define tempv          (cv_mem->cv_tempv)
+#define ftemp          (cv_mem->cv_ftemp) 
+#define q              (cv_mem->cv_q)
+#define qprime         (cv_mem->cv_qprime)
+#define next_q         (cv_mem->cv_next_q)
+#define qwait          (cv_mem->cv_qwait)
+#define L              (cv_mem->cv_L)
+#define h              (cv_mem->cv_h)
+#define hprime         (cv_mem->cv_hprime)
+#define next_h         (cv_mem->cv_next_h)
+#define eta            (cv_mem->cv_eta) 
+#define etaqm1         (cv_mem->cv_etaqm1) 
+#define etaq           (cv_mem->cv_etaq) 
+#define etaqp1         (cv_mem->cv_etaqp1) 
+#define nscon          (cv_mem->cv_nscon)
+#define hscale         (cv_mem->cv_hscale)
+#define tn             (cv_mem->cv_tn)
+#define tau            (cv_mem->cv_tau)
+#define tq             (cv_mem->cv_tq)
+#define l              (cv_mem->cv_l)
+#define rl1            (cv_mem->cv_rl1)
+#define gamma          (cv_mem->cv_gamma) 
+#define gammap         (cv_mem->cv_gammap) 
+#define gamrat         (cv_mem->cv_gamrat)
+#define crate          (cv_mem->cv_crate)
+#define acnrm          (cv_mem->cv_acnrm)
+#define mnewt          (cv_mem->cv_mnewt)
+#define etamax         (cv_mem->cv_etamax)
+#define nst            (cv_mem->cv_nst)
+#define nfe            (cv_mem->cv_nfe)
+#define ncfn           (cv_mem->cv_ncfn)
+#define netf           (cv_mem->cv_netf)
+#define nni            (cv_mem->cv_nni)
+#define nsetups        (cv_mem->cv_nsetups)
+#define nhnil          (cv_mem->cv_nhnil)
+#define linit          (cv_mem->cv_linit)
+#define lsetup         (cv_mem->cv_lsetup)
+#define lsolve         (cv_mem->cv_lsolve) 
+#define lfree          (cv_mem->cv_lfree) 
+#define lmem           (cv_mem->cv_lmem) 
+#define qu             (cv_mem->cv_qu)          
+#define nstlp          (cv_mem->cv_nstlp)  
+#define h0u            (cv_mem->cv_h0u)
+#define hu             (cv_mem->cv_hu)         
+#define saved_tq5      (cv_mem->cv_saved_tq5)  
+#define indx_acor      (cv_mem->cv_indx_acor)
+#define jcur           (cv_mem->cv_jcur)         
+#define tolsf          (cv_mem->cv_tolsf)      
+#define setupNonNull   (cv_mem->cv_setupNonNull) 
+#define forceSetup     (cv_mem->cv_forceSetup)
+#define nor            (cv_mem->cv_nor)
+#define ssdat          (cv_mem->cv_ssdat)
+
+#define nrtfn          (cv_mem->cv_nrtfn)
+#define tlo            (cv_mem->cv_tlo)
+#define thi            (cv_mem->cv_thi)
+#define tretlast       (cv_mem->cv_tretlast)
+#define toutc          (cv_mem->cv_toutc)
+#define trout          (cv_mem->cv_trout)
+#define ttol           (cv_mem->cv_ttol)
+#define taskc          (cv_mem->cv_taskc)
+#define irfnd          (cv_mem->cv_irfnd)
+#define nge            (cv_mem->cv_nge)
+
+#define quadr          (cv_mem->cv_quadr)
+#define znQ            (cv_mem->cv_znQ)
+#define ewtQ           (cv_mem->cv_ewtQ)
+#define acorQ          (cv_mem->cv_acorQ)
+#define yQ             (cv_mem->cv_yQ)
+#define tempvQ         (cv_mem->cv_tempvQ)
+#define acnrmQ         (cv_mem->cv_acnrmQ)
+#define nfQe           (cv_mem->cv_nfQe)
+#define netfQ          (cv_mem->cv_netfQ)
+#define QuadMallocDone (cv_mem->cv_QuadMallocDone)
+
+#define sensi          (cv_mem->cv_sensi)
+#define znS            (cv_mem->cv_znS)
+#define ewtS           (cv_mem->cv_ewtS)
+#define acorS          (cv_mem->cv_acorS)
+#define yS             (cv_mem->cv_yS)
+#define tempvS         (cv_mem->cv_tempvS)
+#define ftempS         (cv_mem->cv_ftempS)
+#define crateS         (cv_mem->cv_crateS)
+#define acnrmS         (cv_mem->cv_acnrmS)
+#define nfSe           (cv_mem->cv_nfSe)
+#define nfeS           (cv_mem->cv_nfeS)
+#define nniS           (cv_mem->cv_nniS)
+#define ncfnS          (cv_mem->cv_ncfnS)
+#define netfS          (cv_mem->cv_netfS)
+#define nsetupsS       (cv_mem->cv_nsetupsS)
+#define stgr1alloc     (cv_mem->cv_stgr1alloc)
+#define SensMallocDone (cv_mem->cv_SensMallocDone)
+
+#define quadr_sensi    (cv_mem->cv_quadr_sensi)
+#define znQS           (cv_mem->cv_znQS)
+#define ewtQS          (cv_mem->cv_ewtQS)
+#define acorQS         (cv_mem->cv_acorQS)
+#define yQS            (cv_mem->cv_yQS)
+#define tempvQS        (cv_mem->cv_tempvQS)
+#define ftempQ         (cv_mem->cv_ftempQ) 
+#define acnrmQS        (cv_mem->cv_acnrmQS)
+#define nfQSe          (cv_mem->cv_nfQSe)
+#define nfQeS          (cv_mem->cv_nfQeS)
+#define netfQS         (cv_mem->cv_netfQS)
+
+#define QuadSensMallocDone (cv_mem->cv_QuadSensMallocDone)
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Main solver function
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * CVode
+ *
+ * This routine is the main driver of the CVODES package. 
+ *
+ * It integrates over a time interval defined by the user, by calling
+ * cvStep to do internal time steps.
+ *
+ * The first time that CVode is called for a successfully initialized
+ * problem, it computes a tentative initial step size h.
+ *
+ * CVode supports two modes, specified by itask: CV_NORMAL, CV_ONE_STEP.
+ * In the CV_NORMAL mode, the solver steps until it reaches or passes tout
+ * and then interpolates to obtain y(tout).
+ * In the CV_ONE_STEP mode, it takes one internal step and returns.
+ */
+
+int CVode(void *cvode_mem, realtype tout, N_Vector yout, 
+          realtype *tret, int itask)
+{
+  CVodeMem cv_mem;
+  long int nstloc; 
+  int retval, hflag, kflag, istate, is, ir, ier, irfndp;
+  realtype troundoff, tout_hin, rh, nrm;
+  booleantype inactive_roots;
+
+  /*
+   * -------------------------------------
+   * 1. Check and process inputs
+   * -------------------------------------
+   */
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVode", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if cvode_mem was allocated */
+  if (cv_mem->cv_MallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_MALLOC, "CVODES", "CVode", MSGCV_NO_MALLOC);
+    return(CV_NO_MALLOC);
+  }
+  
+  /* Check for yout != NULL */
+  if ((y = yout) == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_YOUT_NULL);
+    return(CV_ILL_INPUT);
+  }
+  
+  /* Check for tret != NULL */
+  if (tret == NULL) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_TRET_NULL);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Check for valid itask */
+  if ( (itask != CV_NORMAL) && (itask != CV_ONE_STEP) ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_BAD_ITASK);
+    return(CV_ILL_INPUT);
+  }
+
+  if (itask == CV_NORMAL) toutc = tout;
+  taskc = itask;
+
+  /*
+   * ----------------------------------------
+   * 2. Initializations performed only at
+   *    the first step (nst=0):
+   *    - initial setup
+   *    - initialize Nordsieck history array
+   *    - compute initial step size
+   *    - check for approach to tstop
+   *    - check for approach to a root
+   * ----------------------------------------
+   */
+
+  if (nst == 0) {
+
+    tretlast = *tret = tn;
+
+    /* Check inputs for corectness */
+
+    ier = cvInitialSetup(cv_mem);
+    if (ier!= CV_SUCCESS) return(ier);
+
+    /* 
+     * Call f at (t0,y0), set zn[1] = y'(t0). 
+     * If computing any quadratures, call fQ at (t0,y0), set znQ[1] = yQ'(t0)
+     * If computing sensitivities, call fS at (t0,y0,yS0), set znS[1][is] = yS'(t0), is=1,...,Ns.
+     * If computing quadr. sensi., call fQS at (t0,y0,yS0), set znQS[1][is] = yQS'(t0), is=1,...,Ns.
+     */
+
+    retval = f(tn, zn[0], zn[1], user_data); 
+    nfe++;
+    if (retval < 0) {
+      cvProcessError(cv_mem, CV_RHSFUNC_FAIL, "CVODES", "CVode", MSGCV_RHSFUNC_FAILED, tn);
+      return(CV_RHSFUNC_FAIL);
+    }
+    if (retval > 0) {
+      cvProcessError(cv_mem, CV_FIRST_RHSFUNC_ERR, "CVODES", "CVode", MSGCV_RHSFUNC_FIRST);
+      return(CV_FIRST_RHSFUNC_ERR);
+    }
+
+    if (quadr) {
+      retval = fQ(tn, zn[0], znQ[1], user_data);
+      nfQe++;
+      if (retval < 0) {
+        cvProcessError(cv_mem, CV_QRHSFUNC_FAIL, "CVODES", "CVode", MSGCV_QRHSFUNC_FAILED, tn);
+        return(CV_QRHSFUNC_FAIL);
+      }
+      if (retval > 0) {
+        cvProcessError(cv_mem, CV_FIRST_QRHSFUNC_ERR, "CVODES", "CVode", MSGCV_QRHSFUNC_FIRST);
+        return(CV_FIRST_QRHSFUNC_ERR);
+      }
+    }
+
+    if (sensi) {
+      retval = cvSensRhsWrapper(cv_mem, tn, zn[0], zn[1], znS[0], znS[1], tempv, ftemp);
+      if (retval < 0) {
+        cvProcessError(cv_mem, CV_SRHSFUNC_FAIL, "CVODES", "CVode", MSGCV_SRHSFUNC_FAILED, tn);
+        return(CV_SRHSFUNC_FAIL);
+      } 
+      if (retval > 0) {
+        cvProcessError(cv_mem, CV_FIRST_SRHSFUNC_ERR, "CVODES", "CVode", MSGCV_SRHSFUNC_FIRST);
+        return(CV_FIRST_SRHSFUNC_ERR);
+      }
+    }
+
+    if (quadr_sensi) {
+      retval = fQS(Ns, tn, zn[0], znS[0], znQ[1], znQS[1], fQS_data, tempv, tempvQ); 
+      nfQSe++;
+      if (retval < 0) {
+        cvProcessError(cv_mem, CV_QSRHSFUNC_FAIL, "CVODES", "CVode", MSGCV_QSRHSFUNC_FAILED, tn);
+        return(CV_QSRHSFUNC_FAIL);
+      } 
+      if (retval > 0) {
+        cvProcessError(cv_mem, CV_FIRST_QSRHSFUNC_ERR, "CVODES", "CVode", MSGCV_QSRHSFUNC_FIRST);
+        return(CV_FIRST_QSRHSFUNC_ERR);
+      }
+    }
+
+    /* Test input tstop for legality. */
+
+    if (tstopset) {
+      if ( (tstop - tn)*(tout - tn) <= ZERO ) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_BAD_TSTOP, tstop, tn);
+        return(CV_ILL_INPUT);
+      }
+    }
+
+    /* Set initial h (from H0 or cvHin). */
+    
+    h = hin;
+    if ( (h != ZERO) && ((tout-tn)*h < ZERO) ) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_BAD_H0);
+      return(CV_ILL_INPUT);
+    }
+    if (h == ZERO) {
+      tout_hin = tout;
+      if ( tstopset && (tout-tn)*(tout-tstop) > ZERO ) tout_hin = tstop; 
+      hflag = cvHin(cv_mem, tout_hin);
+      if (hflag != CV_SUCCESS) {
+        istate = cvHandleFailure(cv_mem, hflag);
+        return(istate);
+      }
+    }
+    rh = SUNRabs(h)*hmax_inv;
+    if (rh > ONE) h /= rh;
+    if (SUNRabs(h) < hmin) h *= hmin/SUNRabs(h);
+
+    /* Check for approach to tstop */
+
+    if (tstopset) {
+      if ( (tn + h - tstop)*h > ZERO ) 
+        h = (tstop - tn)*(ONE-FOUR*uround);
+    }
+
+    /* 
+     * Scale zn[1] by h.
+     * If computing any quadratures, scale znQ[1] by h.
+     * If computing sensitivities,  scale znS[1][is] by h. 
+     * If computing quadrature sensitivities,  scale znQS[1][is] by h. 
+     */
+
+    hscale = h;
+    h0u    = h;
+    hprime = h;
+
+    N_VScale(h, zn[1], zn[1]);
+    
+    if (quadr)
+      N_VScale(h, znQ[1], znQ[1]);
+
+    if (sensi)
+      for (is=0; is<Ns; is++) 
+        N_VScale(h, znS[1][is], znS[1][is]);
+
+    if (quadr_sensi)
+      for (is=0; is<Ns; is++) 
+        N_VScale(h, znQS[1][is], znQS[1][is]);
+    
+    /* Check for zeros of root function g at and near t0. */
+
+    if (nrtfn > 0) {
+
+      retval = cvRcheck1(cv_mem);
+
+      if (retval == CV_RTFUNC_FAIL) {
+        cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODES", "cvRcheck1", MSGCV_RTFUNC_FAILED, tn);
+        return(CV_RTFUNC_FAIL);
+      }
+
+    }
+
+  } /* end first call block */
+
+  /*
+   * ------------------------------------------------------
+   * 3. At following steps, perform stop tests:
+   *    - check for root in last step
+   *    - check if we passed tstop
+   *    - check if we passed tout (NORMAL mode)
+   *    - check if current tn was returned (ONE_STEP mode)
+   *    - check if we are close to tstop
+   *      (adjust step size if needed)
+   * -------------------------------------------------------
+   */
+
+  if (nst > 0) {
+
+    /* Estimate an infinitesimal time interval to be used as
+       a roundoff for time quantities (based on current time 
+       and step size) */
+    troundoff = FUZZ_FACTOR*uround*(SUNRabs(tn) + SUNRabs(h));
+
+    /* First check for a root in the last step taken, other than the
+       last root found, if any.  If itask = CV_ONE_STEP and y(tn) was not
+       returned because of an intervening root, return y(tn) now.     */
+    if (nrtfn > 0) {
+      
+      irfndp = irfnd;
+      
+      retval = cvRcheck2(cv_mem);
+
+      if (retval == CLOSERT) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvRcheck2", MSGCV_CLOSE_ROOTS, tlo);
+        return(CV_ILL_INPUT);
+      } else if (retval == CV_RTFUNC_FAIL) {
+        cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODES", "cvRcheck2", MSGCV_RTFUNC_FAILED, tlo);
+        return(CV_RTFUNC_FAIL);
+      } else if (retval == RTFOUND) {
+        tretlast = *tret = tlo;
+        return(CV_ROOT_RETURN);
+      }
+      
+      /* If tn is distinct from tretlast (within roundoff),
+         check remaining interval for roots */
+      if ( SUNRabs(tn - tretlast) > troundoff ) {
+
+        retval = cvRcheck3(cv_mem);
+
+        if (retval == CV_SUCCESS) {     /* no root found */
+          irfnd = 0;
+          if ((irfndp == 1) && (itask == CV_ONE_STEP)) {
+            tretlast = *tret = tn;
+            N_VScale(ONE, zn[0], yout);
+            return(CV_SUCCESS);
+          }
+        } else if (retval == RTFOUND) {  /* a new root was found */
+          irfnd = 1;
+          tretlast = *tret = tlo;
+          return(CV_ROOT_RETURN);
+        } else if (retval == CV_RTFUNC_FAIL) {  /* g failed */
+          cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODES", "cvRcheck3", MSGCV_RTFUNC_FAILED, tlo);
+          return(CV_RTFUNC_FAIL);
+        }
+
+      }
+      
+    } /* end of root stop check */
+    
+    /* In CV_NORMAL mode, test if tout was reached */
+    if ( (itask == CV_NORMAL) && ((tn-tout)*h >= ZERO) ) {
+      tretlast = *tret = tout;
+      ier =  CVodeGetDky(cv_mem, tout, 0, yout);
+      if (ier != CV_SUCCESS) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_BAD_TOUT, tout);
+        return(CV_ILL_INPUT);
+      }
+      return(CV_SUCCESS);
+    }
+    
+    /* In CV_ONE_STEP mode, test if tn was returned */
+    if ( itask == CV_ONE_STEP && SUNRabs(tn - tretlast) > troundoff ) {
+      tretlast = *tret = tn;
+      N_VScale(ONE, zn[0], yout);
+      return(CV_SUCCESS);
+    }
+    
+    /* Test for tn at tstop or near tstop */
+    if ( tstopset ) {
+      
+      if ( SUNRabs(tn - tstop) <= troundoff ) {
+        ier =  CVodeGetDky(cv_mem, tstop, 0, yout);
+        if (ier != CV_SUCCESS) {
+          cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_BAD_TSTOP, tstop, tn);
+          return(CV_ILL_INPUT);
+        }
+        tretlast = *tret = tstop;
+        tstopset = FALSE;
+        return(CV_TSTOP_RETURN);
+      }
+      
+      /* If next step would overtake tstop, adjust stepsize */
+      if ( (tn + hprime - tstop)*h > ZERO ) {
+        hprime = (tstop - tn)*(ONE-FOUR*uround);
+        eta = hprime/h;
+      }
+      
+    }
+    
+  } /* end stopping tests block at nst>0 */  
+  
+  /*
+   * --------------------------------------------------
+   * 4. Looping point for internal steps
+   *
+   *    4.1. check for errors (too many steps, too much
+   *         accuracy requested, step size too small)
+   *    4.2. take a new step (call cvStep)
+   *    4.3. stop on error 
+   *    4.4. perform stop tests:
+   *         - check for root in last step
+   *         - check if tout was passed
+   *         - check if close to tstop
+   *         - check if in ONE_STEP mode (must return)
+   * --------------------------------------------------
+   */  
+  
+  nstloc = 0;
+  loop {
+   
+    next_h = h;
+    next_q = q;
+    
+    /* Reset and check ewt, ewtQ, ewtS */   
+    if (nst > 0) {
+
+      ier = efun(zn[0], ewt, e_data);
+      if(ier != 0) {
+        if (itol == CV_WF) cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_EWT_NOW_FAIL, tn);
+        else               cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_EWT_NOW_BAD, tn);
+        istate = CV_ILL_INPUT;
+        tretlast = *tret = tn;
+        N_VScale(ONE, zn[0], yout);
+        break;
+      }
+
+      if (quadr && errconQ) {
+        ier = cvQuadEwtSet(cv_mem, znQ[0], ewtQ);
+        if(ier != 0) {
+          cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_EWTQ_NOW_BAD, tn);
+          istate = CV_ILL_INPUT;
+          tretlast = *tret = tn;
+          N_VScale(ONE, zn[0], yout);
+          break;
+        }
+      }
+
+      if (sensi) {
+        ier = cvSensEwtSet(cv_mem, znS[0], ewtS);
+        if (ier != 0) {
+          cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_EWTS_NOW_BAD, tn);
+          istate = CV_ILL_INPUT;
+          tretlast = *tret = tn;
+          N_VScale(ONE, zn[0], yout);
+          break;
+        }
+      }
+
+      if (quadr_sensi && errconQS) {
+        ier = cvQuadSensEwtSet(cv_mem, znQS[0], ewtQS);
+        if (ier != 0) {
+          cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVode", MSGCV_EWTQS_NOW_BAD, tn);
+          istate = CV_ILL_INPUT;
+          tretlast = *tret = tn;
+          N_VScale(ONE, zn[0], yout);
+          break;
+        }
+      }
+
+    }
+
+    /* Check for too many steps */
+    if ( (mxstep>0) && (nstloc >= mxstep) ) {
+      cvProcessError(cv_mem, CV_TOO_MUCH_WORK, "CVODES", "CVode", MSGCV_MAX_STEPS, tn);
+      istate = CV_TOO_MUCH_WORK;
+      tretlast = *tret = tn;
+      N_VScale(ONE, zn[0], yout);
+      break;
+    }
+
+    /* Check for too much accuracy requested */
+    nrm = N_VWrmsNorm(zn[0], ewt);
+    if (quadr && errconQ) {
+      nrm = cvQuadUpdateNorm(cv_mem, nrm, znQ[0], ewtQ); 
+    }
+    if (sensi && errconS) {
+      nrm = cvSensUpdateNorm(cv_mem, nrm, znS[0], ewtS);
+    }
+    if (quadr_sensi && errconQS) {
+      nrm = cvQuadSensUpdateNorm(cv_mem, nrm, znQS[0], ewtQS);
+    }
+    tolsf = uround * nrm;
+    if (tolsf > ONE) {
+      cvProcessError(cv_mem, CV_TOO_MUCH_ACC, "CVODES", "CVode", MSGCV_TOO_MUCH_ACC, tn);
+      istate = CV_TOO_MUCH_ACC;
+      tretlast = *tret = tn;
+      N_VScale(ONE, zn[0], yout);
+      tolsf *= TWO;
+      break;
+    } else {
+      tolsf = ONE;
+    }
+    
+    /* Check for h below roundoff level in tn */
+    if (tn + h == tn) {
+      nhnil++;
+      if (nhnil <= mxhnil) 
+        cvProcessError(cv_mem, CV_WARNING, "CVODES", "CVode", MSGCV_HNIL, tn, h);
+      if (nhnil == mxhnil) 
+        cvProcessError(cv_mem, CV_WARNING, "CVODES", "CVode", MSGCV_HNIL_DONE);
+    }
+
+    /* Call cvStep to take a step */
+    kflag = cvStep(cv_mem);
+
+    /* Process failed step cases, and exit loop */
+    if (kflag != CV_SUCCESS) {
+      istate = cvHandleFailure(cv_mem, kflag);
+      tretlast = *tret = tn;
+      N_VScale(ONE, zn[0], yout);
+      break;
+    }
+    
+    nstloc++;
+
+    /* If tstop is set and was reached, reset tn = tstop */
+    if ( tstopset ) {
+      troundoff = FUZZ_FACTOR*uround*(SUNRabs(tn) + SUNRabs(h));
+      if ( SUNRabs(tn - tstop) <= troundoff) tn = tstop;
+    }
+
+    /* Check for root in last step taken. */    
+    if (nrtfn > 0) {
+      
+      retval = cvRcheck3(cv_mem);
+      
+      if (retval == RTFOUND) {  /* A new root was found */
+        irfnd = 1;
+        istate = CV_ROOT_RETURN;
+        tretlast = *tret = tlo;
+        break;
+      } else if (retval == CV_RTFUNC_FAIL) { /* g failed */
+        cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODES", "cvRcheck3", MSGCV_RTFUNC_FAILED, tlo);
+        istate = CV_RTFUNC_FAIL;
+        break;
+      }
+
+      /* If we are at the end of the first step and we still have
+       * some event functions that are inactive, issue a warning
+       * as this may indicate a user error in the implementation
+       * of the root function. */
+
+      if (nst==1) {
+        inactive_roots = FALSE;
+        for (ir=0; ir<nrtfn; ir++) { 
+          if (!gactive[ir]) {
+            inactive_roots = TRUE;
+            break;
+          }
+        }
+        if ((cv_mem->cv_mxgnull > 0) && inactive_roots) {
+          cvProcessError(cv_mem, CV_WARNING, "CVODES", "CVode", MSGCV_INACTIVE_ROOTS);
+        }
+      }
+
+    }
+
+    /* In NORMAL mode, check if tout reached */
+    if ( (itask == CV_NORMAL) &&  (tn-tout)*h >= ZERO ) {
+      istate = CV_SUCCESS;
+      tretlast = *tret = tout;
+      (void) CVodeGetDky(cv_mem, tout, 0, yout);
+      next_q = qprime;
+      next_h = hprime;
+      break;
+    }
+
+    /* Check if tn is at tstop, or about to pass tstop */
+    if ( tstopset ) {
+
+      troundoff = FUZZ_FACTOR*uround*(SUNRabs(tn) + SUNRabs(h));
+      if ( SUNRabs(tn - tstop) <= troundoff) {
+        (void) CVodeGetDky(cv_mem, tstop, 0, yout);
+        tretlast = *tret = tstop;
+        tstopset = FALSE;
+        istate = CV_TSTOP_RETURN;
+        break;
+      }
+
+      if ( (tn + hprime - tstop)*h > ZERO ) {
+        hprime = (tstop - tn)*(ONE-FOUR*uround);
+        eta = hprime/h;
+      }
+
+    }
+
+    /* In ONE_STEP mode, copy y and exit loop */
+    if (itask == CV_ONE_STEP) {
+      istate = CV_SUCCESS;
+      tretlast = *tret = tn;
+      N_VScale(ONE, zn[0], yout);
+      next_q = qprime;
+      next_h = hprime;
+      break;
+    }
+
+  } /* end looping for internal steps */
+  
+  /* Load optional output */
+  if (sensi && (ism==CV_STAGGERED1)) { 
+    nniS  = 0;
+    ncfnS = 0;
+    for (is=0; is<Ns; is++) {
+      nniS  += nniS1[is];
+      ncfnS += ncfnS1[is];
+    }
+  }
+  
+  return(istate);
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Interpolated output and extraction functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * CVodeGetDky
+ *
+ * This routine computes the k-th derivative of the interpolating
+ * polynomial at the time t and stores the result in the vector dky.
+ * The formula is:
+ *         q 
+ *  dky = SUM c(j,k) * (t - tn)^(j-k) * h^(-j) * zn[j] , 
+ *        j=k 
+ * where c(j,k) = j*(j-1)*...*(j-k+1), q is the current order, and
+ * zn[j] is the j-th column of the Nordsieck history array.
+ *
+ * This function is called by CVode with k = 0 and t = tout, but
+ * may also be called directly by the user.
+ */
+
+int CVodeGetDky(void *cvode_mem, realtype t, int k, N_Vector dky)
+{
+  realtype s, c, r;
+  realtype tfuzz, tp, tn1;
+  int i, j;
+  CVodeMem cv_mem;
+  
+  /* Check all inputs for legality */
+ 
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetDky", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (dky == NULL) {
+    cvProcessError(cv_mem, CV_BAD_DKY, "CVODES", "CVodeGetDky", MSGCV_NULL_DKY);
+    return(CV_BAD_DKY);
+  }
+
+  if ((k < 0) || (k > q)) {
+    cvProcessError(cv_mem, CV_BAD_K, "CVODES", "CVodeGetDky", MSGCV_BAD_K);
+    return(CV_BAD_K);
+  }
+  
+  /* Allow for some slack */
+  tfuzz = FUZZ_FACTOR * uround * (SUNRabs(tn) + SUNRabs(hu));
+  if (hu < ZERO) tfuzz = -tfuzz;
+  tp = tn - hu - tfuzz;
+  tn1 = tn + tfuzz;
+  if ((t-tp)*(t-tn1) > ZERO) {
+    cvProcessError(cv_mem, CV_BAD_T, "CVODES", "CVodeGetDky", MSGCV_BAD_T, t, tn-hu, tn);
+    return(CV_BAD_T);
+  }
+
+  /* Sum the differentiated interpolating polynomial */
+
+  s = (t - tn) / h;
+  for (j=q; j >= k; j--) {
+    c = ONE;
+    for (i=j; i >= j-k+1; i--) c *= i;
+    if (j == q) {
+      N_VScale(c, zn[q], dky);
+    } else {
+      N_VLinearSum(c, zn[j], s, dky, dky);
+    }
+  }
+  if (k == 0) return(CV_SUCCESS);
+  r = SUNRpowerI(h,-k);
+  N_VScale(r, dky, dky);
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetQuad
+ *
+ * This routine extracts quadrature solution into yQout at the
+ * time which CVode returned the solution.
+ * This is just a wrapper that calls CVodeGetQuadDky with k=0.
+ */
+ 
+int CVodeGetQuad(void *cvode_mem, realtype *tret, N_Vector yQout)
+{
+  CVodeMem cv_mem;
+  int flag;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuad", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;  
+
+  *tret = tretlast;
+  
+  flag = CVodeGetQuadDky(cvode_mem,tretlast,0,yQout);
+
+  return(flag);
+}
+
+/*
+ * CVodeGetQuadDky
+ *
+ * CVodeQuadDky computes the kth derivative of the yQ function at
+ * time t, where tn-hu <= t <= tn, tn denotes the current         
+ * internal time reached, and hu is the last internal step size   
+ * successfully used by the solver. The user may request 
+ * k=0, 1, ..., qu, where qu is the current order. 
+ * The derivative vector is returned in dky. This vector 
+ * must be allocated by the caller. It is only legal to call this         
+ * function after a successful return from CVode with quadrature
+ * computation enabled.
+ */
+
+int CVodeGetQuadDky(void *cvode_mem, realtype t, int k, N_Vector dkyQ)
+{ 
+  realtype s, c, r;
+  realtype tfuzz, tp, tn1;
+  int i, j;
+  CVodeMem cv_mem;
+  
+  /* Check all inputs for legality */
+  
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadDky", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;  
+
+  if(quadr != TRUE) {
+    cvProcessError(cv_mem, CV_NO_QUAD, "CVODES", "CVodeGetQuadDky", MSGCV_NO_QUAD);
+    return(CV_NO_QUAD);
+  }
+
+  if (dkyQ == NULL) {
+    cvProcessError(cv_mem, CV_BAD_DKY, "CVODES", "CVodeGetQuadDky", MSGCV_NULL_DKY);
+    return(CV_BAD_DKY);
+  }
+  
+  if ((k < 0) || (k > q)) {
+    cvProcessError(cv_mem, CV_BAD_K, "CVODES", "CVodeGetQuadDky", MSGCV_BAD_K);
+    return(CV_BAD_K);
+  }
+  
+  /* Allow for some slack */
+  tfuzz = FUZZ_FACTOR * uround * (SUNRabs(tn) + SUNRabs(hu));
+  if (hu < ZERO) tfuzz = -tfuzz;
+  tp = tn - hu - tfuzz;
+  tn1 = tn + tfuzz;
+  if ((t-tp)*(t-tn1) > ZERO) {
+    cvProcessError(cv_mem, CV_BAD_T, "CVODES", "CVodeGetQuadDky", MSGCV_BAD_T);
+    return(CV_BAD_T);
+  }
+  
+  /* Sum the differentiated interpolating polynomial */
+  
+  s = (t - tn) / h;
+  for (j=q; j >= k; j--) {
+    c = ONE;
+    for (i=j; i >= j-k+1; i--) c *= i;
+    if (j == q) {
+      N_VScale(c, znQ[q], dkyQ);
+    } else {
+      N_VLinearSum(c, znQ[j], s, dkyQ, dkyQ);
+    }
+  }
+  if (k == 0) return(CV_SUCCESS);
+  r = SUNRpowerI(h,-k);
+  N_VScale(r, dkyQ, dkyQ);
+  return(CV_SUCCESS);
+  
+}
+
+/* 
+ * CVodeGetSens
+ *
+ * This routine extracts sensitivity solution into ySout at the
+ * time at which CVode returned the solution.
+ * This is just a wrapper that calls CVodeSensDky with k=0.
+ */
+ 
+int CVodeGetSens(void *cvode_mem, realtype *tret, N_Vector *ySout)
+{
+  CVodeMem cv_mem;
+  int flag;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSens", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;  
+
+  *tret = tretlast;
+
+  flag = CVodeGetSensDky(cvode_mem,tretlast,0,ySout);
+
+  return(flag);
+}
+    
+/* 
+ * CVodeGetSens1
+ *
+ * This routine extracts the is-th sensitivity solution into ySout
+ * at the time at which CVode returned the solution.
+ * This is just a wrapper that calls CVodeSensDky1 with k=0.
+ */
+ 
+int CVodeGetSens1(void *cvode_mem, realtype *tret, int is, N_Vector ySout)
+{
+  CVodeMem cv_mem;
+  int flag;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSens1", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;  
+
+  *tret = tretlast;
+
+  flag = CVodeGetSensDky1(cvode_mem,tretlast,0,is,ySout);
+
+  return(flag);
+}
+    
+/*
+ * CVodeGetSensDky
+ *
+ * If the user calls directly CVodeSensDky then s must be allocated
+ * prior to this call. When CVodeSensDky is called by 
+ * CVodeGetSens, only ier=CV_SUCCESS, ier=CV_NO_SENS, or 
+ * ier=CV_BAD_T are possible.
+ */
+
+int CVodeGetSensDky(void *cvode_mem, realtype t, int k, N_Vector *dkyS)
+{
+  int ier=CV_SUCCESS;
+  int is;
+  CVodeMem cv_mem;
+  
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSensDky", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;  
+  
+  if (dkyS == NULL) {
+    cvProcessError(cv_mem, CV_BAD_DKY, "CVODES", "CVodeGetSensDky", MSGCV_NULL_DKYA);
+    return(CV_BAD_DKY);
+  }
+  
+  for (is=0; is<Ns; is++) {
+    ier = CVodeGetSensDky1(cvode_mem,t,k,is,dkyS[is]);
+    if (ier!=CV_SUCCESS) break;
+  }
+  
+  return(ier);
+}
+    
+/*
+ * CVodeGetSensDky1
+ *
+ * CVodeSensDky1 computes the kth derivative of the yS[is] function at
+ * time t, where tn-hu <= t <= tn, tn denotes the current         
+ * internal time reached, and hu is the last internal step size   
+ * successfully used by the solver. The user may request 
+ * is=0, 1, ..., Ns-1 and k=0, 1, ..., qu, where qu is the current
+ * order. The derivative vector is returned in dky. This vector 
+ * must be allocated by the caller. It is only legal to call this         
+ * function after a successful return from CVode with sensitivity 
+ * computation enabled.
+ */
+
+int CVodeGetSensDky1(void *cvode_mem, realtype t, int k, int is, N_Vector dkyS)
+{ 
+  realtype s, c, r;
+  realtype tfuzz, tp, tn1;
+  int i, j;
+  CVodeMem cv_mem;
+  
+  /* Check all inputs for legality */
+  
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSensDky1", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;  
+  
+  if(sensi != TRUE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetSensDky1", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  if (dkyS == NULL) {
+    cvProcessError(cv_mem, CV_BAD_DKY, "CVODES", "CVodeGetSensDky1", MSGCV_NULL_DKY);
+    return(CV_BAD_DKY);
+  }
+  
+  if ((k < 0) || (k > q)) {
+    cvProcessError(cv_mem, CV_BAD_K, "CVODES", "CVodeGetSensDky1", MSGCV_BAD_K);
+    return(CV_BAD_K);
+  }
+  
+  if ((is < 0) || (is > Ns-1)) {
+    cvProcessError(cv_mem, CV_BAD_IS, "CVODES", "CVodeGetSensDky1", MSGCV_BAD_IS);
+    return(CV_BAD_IS);
+  }
+  
+  /* Allow for some slack */
+  tfuzz = FUZZ_FACTOR * uround * (SUNRabs(tn) + SUNRabs(hu));
+  if (hu < ZERO) tfuzz = -tfuzz;
+  tp = tn - hu - tfuzz;
+  tn1 = tn + tfuzz;
+  if ((t-tp)*(t-tn1) > ZERO) {
+    cvProcessError(cv_mem, CV_BAD_T, "CVODES", "CVodeGetSensDky1", MSGCV_BAD_T);
+    return(CV_BAD_T);
+  }
+  
+  /* Sum the differentiated interpolating polynomial */
+  
+  s = (t - tn) / h;
+  for (j=q; j >= k; j--) {
+    c = ONE;
+    for (i=j; i >= j-k+1; i--) c *= i;
+    if (j == q) {
+      N_VScale(c, znS[q][is], dkyS);
+    } else {
+      N_VLinearSum(c, znS[j][is], s, dkyS, dkyS);
+    }
+  }
+  if (k == 0) return(CV_SUCCESS);
+  r = SUNRpowerI(h,-k);
+  N_VScale(r, dkyS, dkyS);
+  return(CV_SUCCESS);
+  
+}
+
+/* 
+ * CVodeGetQuadSens and CVodeGetQuadSens1
+ *
+ * Extraction functions for all or only one of the quadrature sensitivity
+ * vectors at the time at which CVode returned the ODE solution.
+ */
+
+int CVodeGetQuadSens(void *cvode_mem, realtype *tret, N_Vector *yQSout)
+{
+  CVodeMem cv_mem;
+  int flag;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadSens", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;  
+
+  *tret = tretlast;
+
+  flag = CVodeGetQuadSensDky(cvode_mem,tretlast,0,yQSout);
+
+  return(flag);
+}
+
+int CVodeGetQuadSens1(void *cvode_mem, realtype *tret, int is, N_Vector yQSout)
+{
+  CVodeMem cv_mem;
+  int flag;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadSens1", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;  
+
+  *tret = tretlast;
+
+  flag = CVodeGetQuadSensDky1(cvode_mem,tretlast,0,is,yQSout);
+
+  return(flag);
+}
+
+/* 
+ * CVodeGetQuadSensDky and CVodeGetQuadSensDky1
+ *
+ * Dense output functions for all or only one of the quadrature sensitivity
+ * vectors (or derivative thereof).
+ */
+
+int CVodeGetQuadSensDky(void *cvode_mem, realtype t, int k, N_Vector *dkyQS_all)
+{
+  int ier=CV_SUCCESS;
+  int is;
+  CVodeMem cv_mem;
+  
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadSensDky", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;  
+  
+  if (dkyQS_all == NULL) {
+    cvProcessError(cv_mem, CV_BAD_DKY, "CVODES", "CVodeGetSensDky", MSGCV_NULL_DKYA);
+    return(CV_BAD_DKY);
+  }
+  
+  for (is=0; is<Ns; is++) {
+    ier = CVodeGetQuadSensDky1(cvode_mem,t,k,is,dkyQS_all[is]);
+    if (ier!=CV_SUCCESS) break;
+  }
+  
+  return(ier);
+}
+
+int CVodeGetQuadSensDky1(void *cvode_mem, realtype t, int k, int is, N_Vector dkyQS)
+{
+  realtype s, c, r;
+  realtype tfuzz, tp, tn1;
+  int i, j;
+  CVodeMem cv_mem;
+  
+  /* Check all inputs for legality */
+  
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadSensDky1", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;  
+  
+  if(quadr_sensi != TRUE) {
+    cvProcessError(cv_mem, CV_NO_QUADSENS, "CVODES", "CVodeGetQuadSensDky1", MSGCV_NO_QUADSENSI);
+    return(CV_NO_QUADSENS);
+  }
+
+  if (dkyQS == NULL) {
+    cvProcessError(cv_mem, CV_BAD_DKY, "CVODES", "CVodeGetQuadSensDky1", MSGCV_NULL_DKY);
+    return(CV_BAD_DKY);
+  }
+  
+  if ((k < 0) || (k > q)) {
+    cvProcessError(cv_mem, CV_BAD_K, "CVODES", "CVodeGetQuadSensDky1", MSGCV_BAD_K);
+    return(CV_BAD_K);
+  }
+  
+  if ((is < 0) || (is > Ns-1)) {
+    cvProcessError(cv_mem, CV_BAD_IS, "CVODES", "CVodeGetQuadSensDky1", MSGCV_BAD_IS);
+    return(CV_BAD_IS);
+  }
+  
+  /* Allow for some slack */
+  tfuzz = FUZZ_FACTOR * uround * (SUNRabs(tn) + SUNRabs(hu));
+  if (hu < ZERO) tfuzz = -tfuzz;
+  tp = tn - hu - tfuzz;
+  tn1 = tn + tfuzz;
+  if ((t-tp)*(t-tn1) > ZERO) {
+    cvProcessError(cv_mem, CV_BAD_T, "CVODES", "CVodeGetQuadSensDky1", MSGCV_BAD_T);
+    return(CV_BAD_T);
+  }
+  
+  /* Sum the differentiated interpolating polynomial */
+  
+  s = (t - tn) / h;
+  for (j=q; j >= k; j--) {
+    c = ONE;
+    for (i=j; i >= j-k+1; i--) c *= i;
+    if (j == q) {
+      N_VScale(c, znQS[q][is], dkyQS);
+    } else {
+      N_VLinearSum(c, znQS[j][is], s, dkyQS, dkyQS);
+    }
+  }
+  if (k == 0) return(CV_SUCCESS);
+  r = SUNRpowerI(h,-k);
+  N_VScale(r, dkyQS, dkyQS);
+  return(CV_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Deallocation functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * CVodeFree
+ *
+ * This routine frees the problem memory allocated by CVodeInit.
+ * Such memory includes all the vectors allocated by cvAllocVectors,
+ * and the memory lmem for the linear solver (deallocated by a call
+ * to lfree), as well as (if Ns!=0) all memory allocated for 
+ * sensitivity computations by CVodeSensInit.
+ */
+
+void CVodeFree(void **cvode_mem)
+{
+  CVodeMem cv_mem;
+
+  if (*cvode_mem == NULL) return;
+
+  cv_mem = (CVodeMem) (*cvode_mem);
+  
+  cvFreeVectors(cv_mem);
+
+  CVodeQuadFree(cv_mem);
+
+  CVodeSensFree(cv_mem);
+
+  CVodeQuadSensFree(cv_mem);
+
+  CVodeAdjFree(cv_mem);
+
+  if (iter == CV_NEWTON && lfree != NULL) lfree(cv_mem);
+
+  if (nrtfn > 0) {
+    free(glo); glo = NULL; 
+    free(ghi);  ghi = NULL;
+    free(grout);  grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); rootdir = NULL;
+    free(gactive); gactive = NULL;
+  }
+
+  free(*cvode_mem);
+  *cvode_mem = NULL;
+}
+
+/*
+ * CVodeQuadFree
+ *
+ * CVodeQuadFree frees the problem memory in cvode_mem allocated
+ * for quadrature integration. Its only argument is the pointer
+ * cvode_mem returned by CVodeCreate. 
+ */
+
+void CVodeQuadFree(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  
+  if (cvode_mem == NULL) return;
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if(QuadMallocDone) {
+    cvQuadFreeVectors(cv_mem);
+    QuadMallocDone = FALSE;
+    quadr = FALSE;
+  }
+}
+
+/*
+ * CVodeSensFree
+ *
+ * CVodeSensFree frees the problem memory in cvode_mem allocated
+ * for sensitivity analysis. Its only argument is the pointer
+ * cvode_mem returned by CVodeCreate. 
+ */
+
+void CVodeSensFree(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  
+  if (cvode_mem == NULL) return;
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if(SensMallocDone) {
+    if (stgr1alloc) {
+      free(ncfS1); ncfS1 = NULL;
+      free(ncfnS1); ncfnS1 = NULL;
+      free(nniS1); nniS1 = NULL;
+      stgr1alloc = FALSE;
+    }
+    cvSensFreeVectors(cv_mem);
+    SensMallocDone = FALSE;
+    sensi = FALSE;
+  }
+}
+
+/*
+ * CVodeQuadSensFree
+ *
+ * CVodeQuadSensFree frees the problem memory in cvode_mem allocated
+ * for quadrature sensitivity analysis. Its only argument is the pointer
+ * cvode_mem returned by CVodeCreate. 
+ */
+
+void CVodeQuadSensFree(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  
+  if (cvode_mem == NULL) return;
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if(QuadSensMallocDone) {
+    cvQuadSensFreeVectors(cv_mem);
+    QuadSensMallocDone = FALSE;
+    quadr_sensi = FALSE;
+  }
+}
+
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/*
+ * cvCheckNvector
+ * This routine checks if all required vector operations are present.
+ * If any of them is missing it returns FALSE.
+ */
+
+static booleantype cvCheckNvector(N_Vector tmpl)
+{
+  if((tmpl->ops->nvclone     == NULL) ||
+     (tmpl->ops->nvdestroy   == NULL) ||
+     (tmpl->ops->nvlinearsum == NULL) ||
+     (tmpl->ops->nvconst     == NULL) ||
+     (tmpl->ops->nvprod      == NULL) ||
+     (tmpl->ops->nvdiv       == NULL) ||
+     (tmpl->ops->nvscale     == NULL) ||
+     (tmpl->ops->nvabs       == NULL) ||
+     (tmpl->ops->nvinv       == NULL) ||
+     (tmpl->ops->nvaddconst  == NULL) ||
+     (tmpl->ops->nvmaxnorm   == NULL) ||
+     (tmpl->ops->nvwrmsnorm  == NULL) ||
+     (tmpl->ops->nvmin       == NULL))
+    return(FALSE);
+  else
+    return(TRUE);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Memory allocation/deallocation
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvAllocVectors
+ *
+ * This routine allocates the CVODES vectors ewt, acor, tempv, ftemp, and
+ * zn[0], ..., zn[maxord].
+ * If all memory allocations are successful, cvAllocVectors returns TRUE. 
+ * Otherwise all allocated memory is freed and cvAllocVectors returns FALSE.
+ * This routine also sets the optional outputs lrw and liw, which are
+ * (respectively) the lengths of the real and integer work spaces
+ * allocated here.
+ */
+
+static booleantype cvAllocVectors(CVodeMem cv_mem, N_Vector tmpl)
+{
+  int i, j;
+
+  /* Allocate ewt, acor, tempv, ftemp */
+  
+  ewt = N_VClone(tmpl);
+  if (ewt == NULL) return(FALSE);
+
+  acor = N_VClone(tmpl);
+  if (acor == NULL) {
+    N_VDestroy(ewt);
+    return(FALSE);
+  }
+
+  tempv = N_VClone(tmpl);
+  if (tempv == NULL) {
+    N_VDestroy(ewt);
+    N_VDestroy(acor);
+    return(FALSE);
+  }
+
+  ftemp = N_VClone(tmpl);
+  if (ftemp == NULL) {
+    N_VDestroy(tempv);
+    N_VDestroy(ewt);
+    N_VDestroy(acor);
+    return(FALSE);
+  }
+
+  /* Allocate zn[0] ... zn[qmax] */
+
+  for (j=0; j <= qmax; j++) {
+    zn[j] = N_VClone(tmpl);
+    if (zn[j] == NULL) {
+      N_VDestroy(ewt);
+      N_VDestroy(acor);
+      N_VDestroy(tempv);
+      N_VDestroy(ftemp);
+      for (i=0; i < j; i++) N_VDestroy(zn[i]);
+      return(FALSE);
+    }
+  }
+
+  /* Update solver workspace lengths  */
+  lrw += (qmax + 5)*lrw1;
+  liw += (qmax + 5)*liw1;
+
+  /* Store the value of qmax used here */
+  cv_mem->cv_qmax_alloc = qmax;
+
+  return(TRUE);
+}
+
+/*  
+ * cvFreeVectors
+ *
+ * This routine frees the CVODES vectors allocated in cvAllocVectors.
+ */
+
+static void cvFreeVectors(CVodeMem cv_mem)
+{
+  int j, maxord;
+  
+  maxord = cv_mem->cv_qmax_alloc;
+
+  N_VDestroy(ewt);
+  N_VDestroy(acor);
+  N_VDestroy(tempv);
+  N_VDestroy(ftemp);
+  for (j=0; j <= maxord; j++) N_VDestroy(zn[j]);
+
+  lrw -= (maxord + 5)*lrw1;
+  liw -= (maxord + 5)*liw1;
+
+  if (cv_mem->cv_VabstolMallocDone) {
+    N_VDestroy(Vabstol);
+    lrw -= lrw1;
+    liw -= liw1;
+  }
+}
+
+/*
+ * CVodeQuadAllocVectors
+ *
+ * NOTE: Space for ewtQ is allocated even when errconQ=FALSE, 
+ * although in this case, ewtQ is never used. The reason for this
+ * decision is to allow the user to re-initialize the quadrature
+ * computation with errconQ=TRUE, after an initialization with
+ * errconQ=FALSE, without new memory allocation within 
+ * CVodeQuadReInit.
+ */
+
+static booleantype cvQuadAllocVectors(CVodeMem cv_mem, N_Vector tmpl) 
+{
+  int i, j;
+
+  /* Allocate ewtQ */
+  ewtQ = N_VClone(tmpl);
+  if (ewtQ == NULL) {
+    return(FALSE);
+  }
+  
+  /* Allocate acorQ */
+  acorQ = N_VClone(tmpl);
+  if (acorQ == NULL) {
+    N_VDestroy(ewtQ);
+    return(FALSE);
+  }
+
+  /* Allocate yQ */
+  yQ = N_VClone(tmpl);
+  if (yQ == NULL) {
+    N_VDestroy(ewtQ);
+    N_VDestroy(acorQ);
+    return(FALSE);
+  }
+
+  /* Allocate tempvQ */
+  tempvQ = N_VClone(tmpl);
+  if (tempvQ == NULL) {
+    N_VDestroy(ewtQ);
+    N_VDestroy(acorQ);
+    N_VDestroy(yQ);
+    return(FALSE);
+  }
+
+  /* Allocate zQn[0] ... zQn[maxord] */
+
+  for (j=0; j <= qmax; j++) {
+    znQ[j] = N_VClone(tmpl);
+    if (znQ[j] == NULL) {
+      N_VDestroy(ewtQ);
+      N_VDestroy(acorQ);
+      N_VDestroy(yQ);
+      N_VDestroy(tempvQ);
+      for (i=0; i < j; i++) N_VDestroy(znQ[i]);
+      return(FALSE);
+    }
+  }
+
+  /* Store the value of qmax used here */
+  cv_mem->cv_qmax_allocQ = qmax;
+
+  /* Update solver workspace lengths */
+  lrw += (qmax + 5)*lrw1Q;
+  liw += (qmax + 5)*liw1Q;
+
+  return(TRUE);
+}
+
+/*
+ * cvQuadFreeVectors
+ *
+ * This routine frees the CVODES vectors allocated in cvQuadAllocVectors.
+ */
+
+static void cvQuadFreeVectors(CVodeMem cv_mem)
+{
+  int j, maxord;
+  
+  maxord = cv_mem->cv_qmax_allocQ;
+
+  N_VDestroy(ewtQ);
+  N_VDestroy(acorQ);
+  N_VDestroy(yQ);
+  N_VDestroy(tempvQ);
+  
+  for (j=0; j<=maxord; j++) N_VDestroy(znQ[j]);
+
+  lrw -= (maxord + 5)*lrw1Q;
+  liw -= (maxord + 5)*liw1Q;
+
+  if (cv_mem->cv_VabstolQMallocDone) {
+    N_VDestroy(VabstolQ);
+    lrw -= lrw1Q;
+    liw -= liw1Q;
+  }
+
+  cv_mem->cv_VabstolQMallocDone = FALSE;
+}
+
+/*
+ * cvSensAllocVectors
+ *
+ * Create (through duplication) N_Vectors used for sensitivity analysis, 
+ * using the N_Vector 'tmpl' as a template.
+ */
+
+static booleantype cvSensAllocVectors(CVodeMem cv_mem, N_Vector tmpl) 
+{
+  int i, j;
+  
+  /* Allocate yS */
+  yS = N_VCloneVectorArray(Ns, tmpl);
+  if (yS == NULL) {
+    return(FALSE);
+  }
+
+  /* Allocate ewtS */
+  ewtS = N_VCloneVectorArray(Ns, tmpl);
+  if (ewtS == NULL) {
+    N_VDestroyVectorArray(yS, Ns);
+    return(FALSE);
+  }
+  
+  /* Allocate acorS */
+  acorS = N_VCloneVectorArray(Ns, tmpl);
+  if (acorS == NULL) {
+    N_VDestroyVectorArray(yS, Ns);
+    N_VDestroyVectorArray(ewtS, Ns);
+    return(FALSE);
+  }
+  
+  /* Allocate tempvS */
+  tempvS = N_VCloneVectorArray(Ns, tmpl);
+  if (tempvS == NULL) {
+    N_VDestroyVectorArray(yS, Ns);
+    N_VDestroyVectorArray(ewtS, Ns);
+    N_VDestroyVectorArray(acorS, Ns);
+    return(FALSE);
+  }
+    
+  /* Allocate ftempS */
+  ftempS = N_VCloneVectorArray(Ns, tmpl);
+  if (ftempS == NULL) {
+    N_VDestroyVectorArray(yS, Ns);
+    N_VDestroyVectorArray(ewtS, Ns);
+    N_VDestroyVectorArray(acorS, Ns);
+    N_VDestroyVectorArray(tempvS, Ns);
+    return(FALSE);
+  }
+  
+  /* Allocate znS */
+  for (j=0; j<=qmax; j++) {
+    znS[j] = N_VCloneVectorArray(Ns, tmpl);
+    if (znS[j] == NULL) {
+      N_VDestroyVectorArray(yS, Ns);
+      N_VDestroyVectorArray(ewtS, Ns);
+      N_VDestroyVectorArray(acorS, Ns);
+      N_VDestroyVectorArray(tempvS, Ns);
+      N_VDestroyVectorArray(ftempS, Ns);
+      for (i=0; i<j; i++) N_VDestroyVectorArray(znS[i], Ns);
+      return(FALSE);
+    }
+  }
+  
+  /* Allocate space for pbar and plist */
+  pbar = NULL;
+  pbar = (realtype *)malloc(Ns*sizeof(realtype));
+  if (pbar == NULL) {
+    N_VDestroyVectorArray(yS, Ns);
+    N_VDestroyVectorArray(ewtS, Ns);
+    N_VDestroyVectorArray(acorS, Ns);
+    N_VDestroyVectorArray(tempvS, Ns);
+    N_VDestroyVectorArray(ftempS, Ns);
+    for (i=0; i<=qmax; i++) N_VDestroyVectorArray(znS[i], Ns);
+    return(FALSE);
+  }
+
+  plist = NULL;
+  plist = (int *)malloc(Ns*sizeof(int));
+  if (plist == NULL) {
+    N_VDestroyVectorArray(yS, Ns);
+    N_VDestroyVectorArray(ewtS, Ns);
+    N_VDestroyVectorArray(acorS, Ns);
+    N_VDestroyVectorArray(tempvS, Ns);
+    N_VDestroyVectorArray(ftempS, Ns);
+    for (i=0; i<=qmax; i++) N_VDestroyVectorArray(znS[i], Ns);
+    free(pbar); pbar = NULL;
+    return(FALSE);
+  }
+
+  /* Update solver workspace lengths */
+  lrw += (qmax + 6)*Ns*lrw1 + Ns;
+  liw += (qmax + 6)*Ns*liw1 + Ns;
+  
+  /* Store the value of qmax used here */
+  cv_mem->cv_qmax_allocS = qmax;
+
+  return(TRUE);
+}
+
+/*
+ * cvSensFreeVectors
+ *
+ * This routine frees the CVODES vectors allocated in cvSensAllocVectors.
+ */
+
+static void cvSensFreeVectors(CVodeMem cv_mem) 
+{
+  int j, maxord;
+  
+  maxord = cv_mem->cv_qmax_allocS;
+
+  N_VDestroyVectorArray(yS, Ns);
+  N_VDestroyVectorArray(ewtS, Ns);
+  N_VDestroyVectorArray(acorS, Ns);
+  N_VDestroyVectorArray(tempvS, Ns);
+  N_VDestroyVectorArray(ftempS, Ns);
+  
+  for (j=0; j<=maxord; j++) N_VDestroyVectorArray(znS[j], Ns);  
+
+  free(pbar); pbar = NULL;
+  free(plist); plist = NULL;
+
+  lrw -= (maxord + 6)*Ns*lrw1 + Ns;
+  liw -= (maxord + 6)*Ns*liw1 + Ns;
+
+  if (cv_mem->cv_VabstolSMallocDone) {
+    N_VDestroyVectorArray(VabstolS, Ns);
+    lrw -= Ns*lrw1;
+    liw -= Ns*liw1;
+  }
+  if (cv_mem->cv_SabstolSMallocDone) {
+    free(SabstolS); SabstolS = NULL;
+    lrw -= Ns;
+  }
+  cv_mem->cv_VabstolSMallocDone = FALSE;
+  cv_mem->cv_SabstolSMallocDone = FALSE;
+}
+
+/*
+ * cvQuadSensAllocVectors
+ *
+ * Create (through duplication) N_Vectors used for quadrature sensitivity analysis, 
+ * using the N_Vector 'tmpl' as a template.
+ */
+
+static booleantype cvQuadSensAllocVectors(CVodeMem cv_mem, N_Vector tmpl) 
+{
+  int i, j;
+
+  /* Allocate ftempQ */
+  ftempQ = N_VClone(tmpl);
+  if (ftempQ == NULL) {
+    return(FALSE);
+  }
+
+  /* Allocate yQS */
+  yQS = N_VCloneVectorArray(Ns, tmpl);
+  if (yQS == NULL) {
+    N_VDestroy(ftempQ);
+    return(FALSE);
+  }
+
+  /* Allocate ewtQS */
+  ewtQS = N_VCloneVectorArray(Ns, tmpl);
+  if (ewtQS == NULL) {
+    N_VDestroy(ftempQ);
+    N_VDestroyVectorArray(yQS, Ns);
+    return(FALSE);
+  }
+
+  /* Allocate acorQS */
+  acorQS = N_VCloneVectorArray(Ns, tmpl);
+  if (acorQS == NULL) {
+    N_VDestroy(ftempQ);
+    N_VDestroyVectorArray(yQS, Ns);
+    N_VDestroyVectorArray(ewtQS, Ns);
+    return(FALSE);
+  }
+  
+  /* Allocate tempvQS */
+  tempvQS = N_VCloneVectorArray(Ns, tmpl);
+  if (tempvQS == NULL) {
+    N_VDestroy(ftempQ);
+    N_VDestroyVectorArray(yQS, Ns);
+    N_VDestroyVectorArray(ewtQS, Ns);
+    N_VDestroyVectorArray(acorQS, Ns);
+    return(FALSE);
+  }
+
+  /* Allocate znQS */
+  for (j=0; j<=qmax; j++) {
+    znQS[j] = N_VCloneVectorArray(Ns, tmpl);
+    if (znQS[j] == NULL) {
+      N_VDestroy(ftempQ);
+      N_VDestroyVectorArray(yQS, Ns);
+      N_VDestroyVectorArray(ewtQS, Ns);
+      N_VDestroyVectorArray(acorQS, Ns);
+      N_VDestroyVectorArray(tempvQS, Ns);
+      for (i=0; i<j; i++) N_VDestroyVectorArray(znQS[i], Ns);
+      return(FALSE);
+    }
+  }
+
+  /* Update solver workspace lengths */
+  lrw += (qmax + 5)*Ns*lrw1Q;
+  liw += (qmax + 5)*Ns*liw1Q;
+
+  /* Store the value of qmax used here */
+  cv_mem->cv_qmax_allocQS = qmax;
+
+  return(TRUE);
+}
+
+/*
+ * cvQuadSensFreeVectors
+ *
+ * This routine frees the CVODES vectors allocated in cvQuadSensAllocVectors.
+ */
+
+static void cvQuadSensFreeVectors(CVodeMem cv_mem)
+{
+  int j, maxord;
+  
+  maxord = cv_mem->cv_qmax_allocQS;
+
+  N_VDestroy(ftempQ);
+
+  N_VDestroyVectorArray(yQS, Ns);
+  N_VDestroyVectorArray(ewtQS, Ns);
+  N_VDestroyVectorArray(acorQS, Ns);
+  N_VDestroyVectorArray(tempvQS, Ns);
+  
+  for (j=0; j<=maxord; j++) N_VDestroyVectorArray(znQS[j], Ns);  
+
+  lrw -= (maxord + 5)*Ns*lrw1Q;
+  liw -= (maxord + 5)*Ns*liw1Q;
+
+  if (cv_mem->cv_VabstolQSMallocDone) {
+    N_VDestroyVectorArray(VabstolQS, Ns);
+    lrw -= Ns*lrw1Q;
+    liw -= Ns*liw1Q;
+  }
+  if (cv_mem->cv_SabstolQSMallocDone) {
+    free(SabstolQS); SabstolQS = NULL;
+    lrw -= Ns;
+  }
+  cv_mem->cv_VabstolQSMallocDone = FALSE;
+  cv_mem->cv_SabstolQSMallocDone = FALSE;
+
+}
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Initial stepsize calculation
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvHin
+ *
+ * This routine computes a tentative initial step size h0. 
+ * If tout is too close to tn (= t0), then cvHin returns CV_TOO_CLOSE
+ * and h remains uninitialized. Note that here tout is either the value
+ * passed to CVode at the first call or the value of tstop (if tstop is 
+ * enabled and it is closer to t0=tn than tout).
+ * If any RHS function fails unrecoverably, cvHin returns CV_*RHSFUNC_FAIL.
+ * If any RHS function fails recoverably too many times and recovery is
+ * not possible, cvHin returns CV_REPTD_*RHSFUNC_ERR.
+ * Otherwise, cvHin sets h to the chosen value h0 and returns CV_SUCCESS.
+ *
+ * The algorithm used seeks to find h0 as a solution of
+ *       (WRMS norm of (h0^2 ydd / 2)) = 1, 
+ * where ydd = estimated second derivative of y. Here, y includes
+ * all variables considered in the error test.
+ *
+ * We start with an initial estimate equal to the geometric mean of the
+ * lower and upper bounds on the step size.
+ *
+ * Loop up to MAX_ITERS times to find h0.
+ * Stop if new and previous values differ by a factor < 2.
+ * Stop if hnew/hg > 2 after one iteration, as this probably means
+ * that the ydd value is bad because of cancellation error.        
+ *  
+ * For each new proposed hg, we allow MAX_ITERS attempts to
+ * resolve a possible recoverable failure from f() by reducing
+ * the proposed stepsize by a factor of 0.2. If a legal stepsize
+ * still cannot be found, fall back on a previous value if possible,
+ * or else return CV_REPTD_RHSFUNC_ERR.
+ *
+ * Finally, we apply a bias (0.5) and verify that h0 is within bounds.
+ */
+
+static int cvHin(CVodeMem cv_mem, realtype tout)
+{
+  int retval, sign, count1, count2;
+  realtype tdiff, tdist, tround, hlb, hub;
+  realtype hg, hgs, hs, hnew, hrat, h0, yddnrm;
+  booleantype hgOK, hnewOK;
+
+  /* If tout is too close to tn, give up */
+  
+  if ((tdiff = tout-tn) == ZERO) return(CV_TOO_CLOSE);
+  
+  sign = (tdiff > ZERO) ? 1 : -1;
+  tdist = SUNRabs(tdiff);
+  tround = uround * SUNMAX(SUNRabs(tn), SUNRabs(tout));
+
+  if (tdist < TWO*tround) return(CV_TOO_CLOSE);
+  
+  /* 
+     Set lower and upper bounds on h0, and take geometric mean 
+     as first trial value.
+     Exit with this value if the bounds cross each other.
+  */
+
+  hlb = HLB_FACTOR * tround;
+  hub = cvUpperBoundH0(cv_mem, tdist);
+
+  hg  = SUNRsqrt(hlb*hub);
+
+  if (hub < hlb) {
+    if (sign == -1) h = -hg;
+    else            h =  hg;
+    return(CV_SUCCESS);
+  }
+  
+  /* Outer loop */
+
+  hnewOK = FALSE;
+  hs = hg;         /* safeguard against 'uninitialized variable' warning */
+
+  for(count1 = 1; count1 <= MAX_ITERS; count1++) {
+
+    /* Attempts to estimate ydd */
+
+    hgOK = FALSE;
+
+    for (count2 = 1; count2 <= MAX_ITERS; count2++) {
+      hgs = hg*sign;
+      retval = cvYddNorm(cv_mem, hgs, &yddnrm);
+      /* If a RHS function failed unrecoverably, give up */
+      if (retval < 0) return(retval);
+      /* If successful, we can use ydd */
+      if (retval == CV_SUCCESS) {hgOK = TRUE; break;}
+      /* A RHS function failed recoverably; cut step size and test it again */
+      hg *= POINT2;
+    }
+
+    /* If a RHS function failed recoverably MAX_ITERS times */
+
+    if (!hgOK) {
+      /* Exit if this is the first or second pass. No recovery possible */
+      if (count1 <= 2) 
+        if (retval == RHSFUNC_RECVR)  return(CV_REPTD_RHSFUNC_ERR);
+        if (retval == QRHSFUNC_RECVR) return(CV_REPTD_QRHSFUNC_ERR);
+        if (retval == SRHSFUNC_RECVR) return(CV_REPTD_SRHSFUNC_ERR);
+      /* We have a fall-back option. The value hs is a previous hnew which
+         passed through f(). Use it and break */
+      hnew = hs;
+      break;
+    }
+
+    /* The proposed step size is feasible. Save it. */
+    hs = hg;
+
+    /* If the stopping criteria was met, or if this is the last pass, stop */
+    if ( (hnewOK) || (count1 == MAX_ITERS))  {hnew = hg; break;}
+
+    /* Propose new step size */
+    hnew = (yddnrm*hub*hub > TWO) ? SUNRsqrt(TWO/yddnrm) : SUNRsqrt(hg*hub);
+    hrat = hnew/hg;
+    
+    /* Accept hnew if it does not differ from hg by more than a factor of 2 */
+    if ((hrat > HALF) && (hrat < TWO)) {
+      hnewOK = TRUE;
+    }
+
+    /* After one pass, if ydd seems to be bad, use fall-back value. */
+    if ((count1 > 1) && (hrat > TWO)) {
+      hnew = hg;
+      hnewOK = TRUE;
+    }
+
+    /* Send this value back through f() */
+    hg = hnew;
+
+  }
+
+  /* Apply bounds, bias factor, and attach sign */
+
+  h0 = H_BIAS*hnew;
+  if (h0 < hlb) h0 = hlb;
+  if (h0 > hub) h0 = hub;
+  if (sign == -1) h0 = -h0;
+  h = h0;
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * cvUpperBoundH0
+ *
+ * This routine sets an upper bound on abs(h0) based on
+ * tdist = tn - t0 and the values of y[i]/y'[i].
+ */
+
+static realtype cvUpperBoundH0(CVodeMem cv_mem, realtype tdist)
+{
+  realtype hub_inv, hubQ_inv, hubS_inv, hubQS_inv, hub;
+  N_Vector temp1, temp2;
+  N_Vector tempQ1, tempQ2;
+  N_Vector *tempS1;
+  N_Vector *tempQS1;
+  int is;
+
+  /* 
+   * Bound based on |y|/|y'| -- allow at most an increase of
+   * HUB_FACTOR in y0 (based on a forward Euler step). The weight 
+   * factor is used as a safeguard against zero components in y0. 
+   */
+
+  temp1 = tempv;
+  temp2 = acor;
+
+  N_VAbs(zn[0], temp2);
+  efun(zn[0], temp1, e_data);
+  N_VInv(temp1, temp1);
+  N_VLinearSum(HUB_FACTOR, temp2, ONE, temp1, temp1);
+
+  N_VAbs(zn[1], temp2);
+
+  N_VDiv(temp2, temp1, temp1);
+  hub_inv = N_VMaxNorm(temp1);
+
+  /* Bound based on |yQ|/|yQ'| */
+  
+  if (quadr && errconQ) {
+
+    tempQ1 = tempvQ;
+    tempQ2 = acorQ;
+
+    N_VAbs(znQ[0], tempQ2);
+    cvQuadEwtSet(cv_mem, znQ[0], tempQ1);
+    N_VInv(tempQ1, tempQ1);
+    N_VLinearSum(HUB_FACTOR, tempQ2, ONE, tempQ1, tempQ1);
+    
+    N_VAbs(znQ[1], tempQ2);
+    
+    N_VDiv(tempQ2, tempQ1, tempQ1);
+    hubQ_inv = N_VMaxNorm(tempQ1);
+
+    if (hubQ_inv > hub_inv) hub_inv = hubQ_inv;
+
+  }
+
+  /* Bound based on |yS|/|yS'| */
+
+  if (sensi && errconS) {
+
+    tempS1 = acorS;
+    cvSensEwtSet(cv_mem, znS[0], tempS1);
+
+    for (is=0; is<Ns; is++) {
+
+      N_VAbs(znS[0][is], temp2);
+      N_VInv(tempS1[is], temp1);
+      N_VLinearSum(HUB_FACTOR, temp2, ONE, temp1, temp1);
+      
+      N_VAbs(znS[1][is], temp2);
+      
+      N_VDiv(temp2, temp1, temp1);
+      hubS_inv = N_VMaxNorm(temp1);
+
+      if (hubS_inv > hub_inv) hub_inv = hubS_inv;
+
+    }
+
+  }
+
+  /* Bound based on |yQS|/|yQS'| */
+
+  if (quadr_sensi && errconQS) {
+
+    tempQ1 = tempvQ;
+    tempQ2 = acorQ;
+
+    tempQS1 = acorQS;
+    cvQuadSensEwtSet(cv_mem, znQS[0], tempQS1);
+
+    for (is=0; is<Ns; is++) {
+
+      N_VAbs(znQS[0][is], tempQ2);
+      N_VInv(tempQS1[is], tempQ1);
+      N_VLinearSum(HUB_FACTOR, tempQ2, ONE, tempQ1, tempQ1);
+      
+      N_VAbs(znQS[1][is], tempQ2);
+      
+      N_VDiv(tempQ2, tempQ1, tempQ1);
+      hubQS_inv = N_VMaxNorm(tempQ1);
+
+      if (hubQS_inv > hub_inv) hub_inv = hubQS_inv;
+
+    }
+
+  }
+
+
+  /*
+   * bound based on tdist -- allow at most a step of magnitude
+   * HUB_FACTOR * tdist
+   */
+  
+  hub = HUB_FACTOR*tdist;
+
+  /* Use the smaler of the two */
+
+  if (hub*hub_inv > ONE) hub = ONE/hub_inv;
+
+  return(hub);
+}
+
+/*
+ * cvYddNorm
+ *
+ * This routine computes an estimate of the second derivative of Y
+ * using a difference quotient, and returns its WRMS norm.
+ *
+ * Y contains all variables included in the error test. 
+ */
+
+static int cvYddNorm(CVodeMem cv_mem, realtype hg, realtype *yddnrm)
+{
+  int retval, is;
+  N_Vector wrk1, wrk2;
+  
+  /* y <- h*y'(t) + y(t) */
+  
+  N_VLinearSum(hg, zn[1], ONE, zn[0], y);
+  
+  if (sensi && errconS) 
+    for (is=0; is<Ns; is++)
+      N_VLinearSum(hg, znS[1][is], ONE, znS[0][is], yS[is]);
+  
+  /* tempv <- f(t+h, h*y'(t)+y(t)) */
+
+  retval = f(tn+hg, y, tempv, user_data);
+  nfe++;
+  if (retval < 0) return(CV_RHSFUNC_FAIL);
+  if (retval > 0) return(RHSFUNC_RECVR);
+
+  if (quadr && errconQ) {
+    retval = fQ(tn+hg, y, tempvQ, user_data);
+    nfQe++;
+    if (retval < 0) return(CV_QRHSFUNC_FAIL);
+    if (retval > 0) return(QRHSFUNC_RECVR);
+  }
+
+  if (sensi && errconS) {
+    wrk1 = ftemp;
+    wrk2 = acor;
+    retval = cvSensRhsWrapper(cv_mem, tn+hg, y, tempv, yS, tempvS, wrk1, wrk2);
+    if (retval < 0) return(CV_SRHSFUNC_FAIL);
+    if (retval > 0) return(SRHSFUNC_RECVR);
+  }  
+
+  if (quadr_sensi && errconQS) {
+    wrk1 = ftemp;
+    wrk2 = acorQ;
+    retval = fQS(Ns, tn+hg, y, yS, tempvQ, tempvQS, fQS_data, wrk1, wrk2);
+
+    nfQSe++;
+    if (retval < 0) return(CV_QSRHSFUNC_FAIL);
+    if (retval > 0) return(QSRHSFUNC_RECVR);
+  } 
+
+  /* Load estimate of ||y''|| into tempv:
+   * tempv <-  (1/h) * f(t+h, h*y'(t)+y(t)) - y'(t) */
+  
+  N_VLinearSum(ONE, tempv, -ONE, zn[1], tempv);
+  N_VScale(ONE/hg, tempv, tempv);
+  *yddnrm = N_VWrmsNorm(tempv, ewt);
+
+  if (quadr && errconQ) {
+    N_VLinearSum(ONE, tempvQ, -ONE, znQ[1], tempvQ);
+    N_VScale(ONE/hg, tempvQ, tempvQ);
+    *yddnrm = cvQuadUpdateNorm(cv_mem, *yddnrm, tempvQ, ewtQ);
+  }
+
+  if (sensi && errconS) {
+    for (is=0; is<Ns; is++) {
+      N_VLinearSum(ONE, tempvS[is], -ONE, znS[1][is], tempvS[is]);
+      N_VScale(ONE/hg, tempvS[is], tempvS[is]);
+    }
+    *yddnrm = cvSensUpdateNorm(cv_mem, *yddnrm, tempvS, ewtS);
+  }
+
+  if (quadr_sensi && errconQS) {
+    for (is=0; is<Ns; is++) {
+      N_VLinearSum(ONE, tempvQS[is], -ONE, znQS[1][is], tempvQS[is]);
+      N_VScale(ONE/hg, tempvQS[is], tempvQS[is]);
+    }
+    *yddnrm = cvQuadSensUpdateNorm(cv_mem, *yddnrm, tempvQS, ewtQS);
+  }
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Initial setup
+ * -----------------------------------------------------------------
+ */
+
+/*  
+ * cvInitialSetup
+ *
+ * This routine performs input consistency checks at the first step.
+ * If needed, it also checks the linear solver module and calls the
+ * linear solver initialization routine.
+ */
+
+static int cvInitialSetup(CVodeMem cv_mem)
+{
+  int ier;
+
+  /* Did the user specify tolerances? */
+  if (itol == CV_NN) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_NO_TOL);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Set data for efun */
+  if (cv_mem->cv_user_efun) e_data = user_data;
+  else                      e_data = cv_mem;
+
+  /* Load initial error weights */
+  ier = efun(zn[0], ewt, e_data);
+  if (ier != 0) {
+    if (itol == CV_WF) 
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_EWT_FAIL);
+    else
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_BAD_EWT);
+    return(CV_ILL_INPUT);
+  }
+  
+  /* Quadrature initial setup */
+
+  if (quadr && errconQ) {
+
+    /* Did the user specify tolerances? */
+    if (itolQ == CV_NN) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_NO_TOLQ);
+      return(CV_ILL_INPUT);
+    }
+
+    /* Load ewtQ */
+    ier = cvQuadEwtSet(cv_mem, znQ[0], ewtQ);
+    if (ier != 0) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_BAD_EWTQ);
+      return(CV_ILL_INPUT);
+    }
+
+  }
+
+  if (!quadr) errconQ = FALSE;
+
+  /* Forward sensitivity initial setup */
+
+  if (sensi) {
+
+    /* Did the user specify tolerances? */
+    if (itolS == CV_NN) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_NO_TOLS);
+      return(CV_ILL_INPUT);
+    }
+
+    /* If using the internal DQ functions, we must have access to the problem parameters */
+    if(fSDQ && (p == NULL)) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_NULL_P);
+      return(CV_ILL_INPUT);
+    }
+
+    /* Load ewtS */
+    ier = cvSensEwtSet(cv_mem, znS[0], ewtS);
+    if (ier != 0) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_BAD_EWTS);
+      return(CV_ILL_INPUT);
+    }
+
+  }
+
+  /* FSA of quadrature variables */
+
+  if (quadr_sensi) {
+
+    /* If using the internal DQ functions, we must have access to fQ
+     * (i.e. quadrature integration must be enabled) and to the problem parameters */
+
+    if (fQSDQ) {
+
+      /* Test if quadratures are defined, so we can use fQ */
+      if (!quadr) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_NULL_FQ);
+        return(CV_ILL_INPUT);
+      }
+
+      /* Test if we have the problem parameters */
+      if(p == NULL) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_NULL_P);
+        return(CV_ILL_INPUT);
+      }
+
+    }
+
+    if (errconQS) {
+      
+      /* Did the user specify tolerances? */
+      if (itolQS == CV_NN) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_NO_TOLQS);
+        return(CV_ILL_INPUT);
+      }
+
+      /* If needed, did the user provide quadrature tolerances? */
+      if ( (itolQS == CV_EE) && (itolQ == CV_NN) ) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_NO_TOLQ);
+        return(CV_ILL_INPUT);
+      }
+
+      /* Load ewtQS */
+      ier = cvQuadSensEwtSet(cv_mem, znQS[0], ewtQS);
+      if (ier != 0) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_BAD_EWTQS);
+        return(CV_ILL_INPUT);
+      }
+
+    }
+
+  } else {
+
+    errconQS = FALSE;
+
+  }
+
+  /* Check if lsolve function exists (if needed) and call linit function (if it exists) */
+  if (iter == CV_NEWTON) {
+    if (lsolve == NULL) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "cvInitialSetup", MSGCV_LSOLVE_NULL);
+      return(CV_ILL_INPUT);
+    }
+    if (linit != NULL) {
+      ier = linit(cv_mem);
+      if (ier != 0) {
+        cvProcessError(cv_mem, CV_LINIT_FAIL, "CVODES", "cvInitialSetup", MSGCV_LINIT_FAIL);
+        return(CV_LINIT_FAIL);
+      }
+    }
+  }
+    
+  return(CV_SUCCESS);
+}
+
+/*
+ * cvEwtSet
+ *
+ * This routine is responsible for setting the error weight vector ewt,
+ * according to tol_type, as follows:
+ *
+ * (1) ewt[i] = 1 / (reltol * SUNRabs(ycur[i]) + *abstol), i=0,...,neq-1
+ *     if tol_type = CV_SS
+ * (2) ewt[i] = 1 / (reltol * SUNRabs(ycur[i]) + abstol[i]), i=0,...,neq-1
+ *     if tol_type = CV_SV
+ *
+ * cvEwtSet returns 0 if ewt is successfully set as above to a
+ * positive vector and -1 otherwise. In the latter case, ewt is
+ * considered undefined.
+ *
+ * All the real work is done in the routines cvEwtSetSS, cvEwtSetSV.
+ */
+
+int cvEwtSet(N_Vector ycur, N_Vector weight, void *data)
+{
+  CVodeMem cv_mem;
+  int flag = 0;
+
+  /* data points to cv_mem here */
+
+  cv_mem = (CVodeMem) data;
+
+  switch(itol) {
+  case CV_SS:
+    flag = cvEwtSetSS(cv_mem, ycur, weight);
+    break;
+  case CV_SV:
+    flag = cvEwtSetSV(cv_mem, ycur, weight);
+    break;
+  }
+
+  return(flag);
+}
+
+/*
+ * cvEwtSetSS
+ *
+ * This routine sets ewt as decribed above in the case tol_type = CV_SS.
+ * It tests for non-positive components before inverting. cvEwtSetSS
+ * returns 0 if ewt is successfully set to a positive vector
+ * and -1 otherwise. In the latter case, ewt is considered undefined.
+ */
+
+static int cvEwtSetSS(CVodeMem cv_mem, N_Vector ycur, N_Vector weight)
+{
+  N_VAbs(ycur, tempv);
+  N_VScale(reltol, tempv, tempv);
+  N_VAddConst(tempv, Sabstol, tempv);
+  if (N_VMin(tempv) <= ZERO) return(-1);
+  N_VInv(tempv, weight);
+
+  return(0);
+}
+
+/*
+ * cvEwtSetSV
+ *
+ * This routine sets ewt as decribed above in the case tol_type = CV_SV.
+ * It tests for non-positive components before inverting. cvEwtSetSV
+ * returns 0 if ewt is successfully set to a positive vector
+ * and -1 otherwise. In the latter case, ewt is considered undefined.
+ */
+
+static int cvEwtSetSV(CVodeMem cv_mem, N_Vector ycur, N_Vector weight)
+{
+  N_VAbs(ycur, tempv);
+  N_VLinearSum(reltol, tempv, ONE, Vabstol, tempv);
+  if (N_VMin(tempv) <= ZERO) return(-1);
+  N_VInv(tempv, weight);
+  return(0);
+}
+
+/*
+ * cvQuadEwtSet
+ *
+ */
+
+static int cvQuadEwtSet(CVodeMem cv_mem, N_Vector qcur, N_Vector weightQ)
+{
+  int flag=0;
+
+  switch (itolQ) {
+  case CV_SS:
+    flag = cvQuadEwtSetSS(cv_mem, qcur, weightQ);
+    break;
+  case CV_SV:
+    flag = cvQuadEwtSetSV(cv_mem, qcur, weightQ);
+    break;
+  }
+
+  return(flag);
+
+}
+
+/*
+ * cvQuadEwtSetSS
+ *
+ */
+
+static int cvQuadEwtSetSS(CVodeMem cv_mem, N_Vector qcur, N_Vector weightQ)
+{
+  N_VAbs(qcur, tempvQ);
+  N_VScale(reltolQ, tempvQ, tempvQ);
+  N_VAddConst(tempvQ, SabstolQ, tempvQ);
+  if (N_VMin(tempvQ) <= ZERO) return(-1);
+  N_VInv(tempvQ, weightQ);
+
+  return(0);
+}
+
+/*
+ * cvQuadEwtSetSV
+ *
+ */
+
+static int cvQuadEwtSetSV(CVodeMem cv_mem, N_Vector qcur, N_Vector weightQ)
+{
+  N_VAbs(qcur, tempvQ);
+  N_VLinearSum(reltolQ, tempvQ, ONE, VabstolQ, tempvQ);
+  if (N_VMin(tempvQ) <= ZERO) return(-1);
+  N_VInv(tempvQ, weightQ);
+
+  return(0);
+}
+
+/*
+ * cvSensEwtSet
+ *
+ */
+
+static int cvSensEwtSet(CVodeMem cv_mem, N_Vector *yScur, N_Vector *weightS)
+{
+  int flag=0;
+
+  switch (itolS) {
+  case CV_EE:
+    flag = cvSensEwtSetEE(cv_mem, yScur, weightS);
+    break;
+  case CV_SS:
+    flag = cvSensEwtSetSS(cv_mem, yScur, weightS);
+    break;
+  case CV_SV:
+    flag = cvSensEwtSetSV(cv_mem, yScur, weightS);
+    break;
+  }
+
+  return(flag);
+}
+
+/*
+ * cvSensEwtSetEE
+ *
+ * In this case, the error weight vector for the i-th sensitivity is set to
+ *
+ * ewtS_i = pbar_i * efun(pbar_i*yS_i)
+ *
+ * In other words, the scaled sensitivity pbar_i * yS_i has the same error
+ * weight vector calculation as the solution vector.
+ *
+ */
+
+static int cvSensEwtSetEE(CVodeMem cv_mem, N_Vector *yScur, N_Vector *weightS)
+{
+  int is;
+  N_Vector pyS;
+  int flag;
+
+  /* Use tempvS[0] as temporary storage for the scaled sensitivity */
+  pyS = tempvS[0];
+
+  for (is=0; is<Ns; is++) {
+    N_VScale(pbar[is], yScur[is], pyS);
+    flag = efun(pyS, weightS[is], e_data);
+    if (flag != 0) return(-1);
+    N_VScale(pbar[is], weightS[is], weightS[is]);
+  }
+
+  return(0);
+}
+
+/*
+ * cvSensEwtSetSS
+ *
+ */
+
+static int cvSensEwtSetSS(CVodeMem cv_mem, N_Vector *yScur, N_Vector *weightS)
+{
+  int is;
+  
+  for (is=0; is<Ns; is++) {
+    N_VAbs(yScur[is], tempv);
+    N_VScale(reltolS, tempv, tempv);
+    N_VAddConst(tempv, SabstolS[is], tempv);
+    if (N_VMin(tempv) <= ZERO) return(-1);
+    N_VInv(tempv, weightS[is]);
+  }
+  return(0);
+}
+
+/*
+ * cvSensEwtSetSV
+ *
+ */
+
+static int cvSensEwtSetSV(CVodeMem cv_mem, N_Vector *yScur, N_Vector *weightS)
+{
+  int is;
+  
+  for (is=0; is<Ns; is++) {
+    N_VAbs(yScur[is], tempv);
+    N_VLinearSum(reltolS, tempv, ONE, VabstolS[is], tempv);
+    if (N_VMin(tempv) <= ZERO) return(-1);
+    N_VInv(tempv, weightS[is]);
+  }
+
+  return(0);
+}
+
+/*
+ * cvQuadSensEwtSet
+ *
+ */
+
+static int cvQuadSensEwtSet(CVodeMem cv_mem, N_Vector *yQScur, N_Vector *weightQS)
+{
+  int flag=0;
+
+  switch (itolQS) {
+  case CV_EE:
+    flag = cvQuadSensEwtSetEE(cv_mem, yQScur, weightQS);
+    break;
+  case CV_SS:
+    flag = cvQuadSensEwtSetSS(cv_mem, yQScur, weightQS);
+    break;
+  case CV_SV:
+    flag = cvQuadSensEwtSetSV(cv_mem, yQScur, weightQS);
+    break;
+  }
+
+  return(flag);
+}
+
+/*
+ * cvQuadSensEwtSetEE
+ *
+ * In this case, the error weight vector for the i-th quadrature sensitivity
+ * is set to
+ *
+ * ewtQS_i = pbar_i * cvQuadEwtSet(pbar_i*yQS_i)
+ *
+ * In other words, the scaled sensitivity pbar_i * yQS_i has the same error
+ * weight vector calculation as the quadrature vector.
+ *
+ */
+static int cvQuadSensEwtSetEE(CVodeMem cv_mem, N_Vector *yQScur, N_Vector *weightQS)
+{
+  int is;
+  N_Vector pyS;
+  int flag;
+
+  /* Use tempvQS[0] as temporary storage for the scaled sensitivity */
+  pyS = tempvQS[0];
+
+  for (is=0; is<Ns; is++) {
+    N_VScale(pbar[is], yQScur[is], pyS);
+    flag = cvQuadEwtSet(cv_mem, pyS, weightQS[is]);
+    if (flag != 0) return(-1);
+    N_VScale(pbar[is], weightQS[is], weightQS[is]);
+  }
+
+  return(0);
+}
+
+static int cvQuadSensEwtSetSS(CVodeMem cv_mem, N_Vector *yQScur, N_Vector *weightQS)
+{
+  int is;
+
+  for (is=0; is<Ns; is++) {
+    N_VAbs(yQScur[is], tempvQ);
+    N_VScale(reltolQS, tempvQ, tempvQ);
+    N_VAddConst(tempvQ, SabstolQS[is], tempvQ);
+    if (N_VMin(tempvQ) <= ZERO) return(-1);
+    N_VInv(tempvQ, weightQS[is]);
+  }
+
+  return(0);
+}
+
+static int cvQuadSensEwtSetSV(CVodeMem cv_mem, N_Vector *yQScur, N_Vector *weightQS)
+{
+  int is;
+  
+  for (is=0; is<Ns; is++) {
+    N_VAbs(yQScur[is], tempvQ);
+    N_VLinearSum(reltolQS, tempvQ, ONE, VabstolQS[is], tempvQ);
+    if (N_VMin(tempvQ) <= ZERO) return(-1);
+    N_VInv(tempvQ, weightQS[is]);
+  }
+
+  return(0);
+}
+
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Main cvStep function
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * cvStep
+ *
+ * This routine performs one internal cvode step, from tn to tn + h.
+ * It calls other routines to do all the work.
+ *
+ * The main operations done here are as follows:
+ * - preliminary adjustments if a new step size was chosen;
+ * - prediction of the Nordsieck history array zn at tn + h;
+ * - setting of multistep method coefficients and test quantities;
+ * - solution of the nonlinear system;
+ * - testing the local error;
+ * - updating zn and other state data if successful;
+ * - resetting stepsize and order for the next step.
+ * - if SLDET is on, check for stability, reduce order if necessary.
+ * On a failure in the nonlinear system solution or error test, the
+ * step may be reattempted, depending on the nature of the failure.
+ */
+
+static int cvStep(CVodeMem cv_mem)
+{
+  realtype saved_t, dsm, dsmQ, dsmS, dsmQS;
+  booleantype do_sensi_stg, do_sensi_stg1;
+  int ncf, ncfS;
+  int nef, nefQ, nefS, nefQS;
+  int nflag, kflag, eflag;
+  int retval, is;
+
+  /* Are we computing sensitivities with a staggered approach? */
+
+  do_sensi_stg  = (sensi && (ism==CV_STAGGERED));
+  do_sensi_stg1 = (sensi && (ism==CV_STAGGERED1));
+
+  /* Initialize local counters for convergence and error test failures */
+
+  ncf  = nef  = 0;
+  nefQ = nefQS = 0;
+  ncfS = nefS = 0;
+  if (do_sensi_stg1) {
+    for (is=0; is<Ns; is++) ncfS1[is] = 0;
+  }
+
+  /* If needed, adjust method parameters */
+
+  if ((nst > 0) && (hprime != h)) cvAdjustParams(cv_mem);
+
+  /* Looping point for attempts to take a step */
+
+  saved_t = tn;
+  nflag = FIRST_CALL;
+
+  loop {  
+
+    cvPredict(cv_mem);  
+    cvSet(cv_mem);
+
+    /* ------ Correct state variables ------ */
+    
+    nflag = cvNls(cv_mem, nflag);
+    kflag = cvHandleNFlag(cv_mem, &nflag, saved_t, &ncf, &ncfn);
+
+    /* Go back in loop if we need to predict again (nflag=PREV_CONV_FAIL) */
+    if (kflag == PREDICT_AGAIN) continue;
+
+    /* Return if nonlinear solve failed and recovery not possible. */
+    if (kflag != DO_ERROR_TEST) return(kflag);
+
+    /* Perform error test (nflag=CV_SUCCESS) */
+    eflag = cvDoErrorTest(cv_mem, &nflag, saved_t, acnrm, &nef, &netf, &dsm);
+
+    /* Go back in loop if we need to predict again (nflag=PREV_ERR_FAIL) */
+    if (eflag == TRY_AGAIN) continue;
+
+    /* Return if error test failed and recovery not possible. */
+    if (eflag != CV_SUCCESS) return(eflag);
+
+    /* Error test passed (eflag=CV_SUCCESS, nflag=CV_SUCCESS), go on */
+
+    /* ------ Correct the quadrature variables ------ */
+
+    if (quadr) {
+
+      ncf = nef = 0; /* reset counters for states */
+
+      nflag = cvQuadNls(cv_mem);
+      kflag = cvHandleNFlag(cv_mem, &nflag, saved_t, &ncf, &ncfn);
+
+      if (kflag == PREDICT_AGAIN) continue;
+      if (kflag != DO_ERROR_TEST) return(kflag);
+
+      /* Error test on quadratures */
+      if (errconQ) {
+        acnrmQ = N_VWrmsNorm(acorQ, ewtQ);
+        eflag = cvDoErrorTest(cv_mem, &nflag, saved_t, acnrmQ, &nefQ, &netfQ, &dsmQ);
+
+        if (eflag == TRY_AGAIN) continue;
+        if (eflag != CV_SUCCESS) return(eflag);
+
+        /* Set dsm = max(dsm, dsmQ) to be used in cvPrepareNextStep */
+        if (dsmQ > dsm) dsm = dsmQ;
+      }
+
+    }
+
+    /* ------ Correct the sensitivity variables (STAGGERED or STAGGERED1) ------- */
+
+    if (do_sensi_stg || do_sensi_stg1) {
+
+      ncf = nef = 0;        /* reset counters for states     */
+      if (quadr) nefQ = 0;  /* reset counter for quadratures */
+
+      /* Evaluate f at converged y, needed for future evaluations of sens. RHS 
+       * If f() fails recoverably, treat it as a convergence failure and 
+       * attempt the step again */
+
+      retval = f(tn, y, ftemp, user_data);
+      nfe++;
+      if (retval < 0) return(CV_RHSFUNC_FAIL);
+      if (retval > 0) {
+        nflag = PREV_CONV_FAIL;
+        continue;
+      }
+
+      if (do_sensi_stg) {
+        /* Nonlinear solve for sensitivities (all-at-once) */
+        nflag = cvStgrNls(cv_mem);
+        kflag = cvHandleNFlag(cv_mem, &nflag, saved_t, &ncfS, &ncfnS);
+      } else {
+        /* Nonlinear solve for sensitivities (one-by-one) */
+        for (is=0; is<Ns; is++) { 
+          nflag = cvStgr1Nls(cv_mem, is); 
+          kflag = cvHandleNFlag(cv_mem, &nflag, saved_t, &ncfS1[is], &ncfnS1[is]);
+          if (kflag != DO_ERROR_TEST) break; 
+        }
+      }
+
+      if (kflag == PREDICT_AGAIN) continue;
+      if (kflag != DO_ERROR_TEST) return(kflag);
+
+      /* Error test on sensitivities */
+      if (errconS) {
+
+        if (do_sensi_stg1) acnrmS = cvSensNorm(cv_mem, acorS, ewtS);
+
+        eflag = cvDoErrorTest(cv_mem, &nflag, saved_t, acnrmS, &nefS, &netfS, &dsmS);
+
+        if (eflag == TRY_AGAIN)  continue;
+        if (eflag != CV_SUCCESS) return(eflag);
+
+        /* Set dsm = max(dsm, dsmS) to be used in cvPrepareNextStep */
+        if (dsmS > dsm) dsm = dsmS;
+
+      }
+
+    }
+
+    /* ------ Correct the quadrature sensitivity variables ------ */
+
+    if (quadr_sensi) {
+
+      /* Reset local convergence and error test failure counters */
+      ncf = nef = 0;
+      if (quadr) nefQ = 0;
+      if (do_sensi_stg) ncfS = nefS = 0;
+      if (do_sensi_stg1) {
+        for (is=0; is<Ns; is++) ncfS1[is] = 0;
+        nefS = 0;
+      }
+
+      /* Note that ftempQ contains yQdot evaluated at the converged y
+       * (stored in cvQuadNls) and can be used in evaluating fQS */
+
+      nflag = cvQuadSensNls(cv_mem);
+      kflag = cvHandleNFlag(cv_mem, &nflag, saved_t, &ncf, &ncfn);
+
+      if (kflag == PREDICT_AGAIN) continue;
+      if (kflag != DO_ERROR_TEST) return(kflag);
+
+      /* Error test on quadrature sensitivities */
+      if (errconQS) {
+        acnrmQS = cvQuadSensNorm(cv_mem, acorQS, ewtQS);
+        eflag = cvDoErrorTest(cv_mem, &nflag, saved_t, acnrmQS, &nefQS, &netfQS, &dsmQS);
+
+        if (eflag == TRY_AGAIN) continue;
+        if (eflag != CV_SUCCESS) return(eflag);
+
+        /* Set dsm = max(dsm, dsmQS) to be used in cvPrepareNextStep */
+        if (dsmQS > dsm) dsm = dsmQS;
+      }
+
+
+    }
+
+
+    /* Everything went fine; exit loop */ 
+    break;
+
+  }
+
+  /* Nonlinear system solve and error test were both successful.
+     Update data, and consider change of step and/or order.       */
+
+  cvCompleteStep(cv_mem); 
+
+  cvPrepareNextStep(cv_mem, dsm); 
+
+  /* If Stablilty Limit Detection is turned on, call stability limit
+     detection routine for possible order reduction. */
+
+  if (sldeton) cvBDFStab(cv_mem);
+
+  etamax = (nst <= SMALL_NST) ? ETAMX2 : ETAMX3;
+
+  /*  Finally, we rescale the acor array to be the 
+      estimated local error vector. */
+
+  N_VScale(tq[2], acor, acor);
+
+  if (quadr)
+    N_VScale(tq[2], acorQ, acorQ);
+
+  if (sensi)
+    for (is=0; is<Ns; is++)
+      N_VScale(tq[2], acorS[is], acorS[is]);
+
+  if (quadr_sensi)
+    for (is=0; is<Ns; is++)
+      N_VScale(tq[2], acorQS[is], acorQS[is]);
+
+  return(CV_SUCCESS);
+      
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Function called at beginning of step
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvAdjustParams
+ *
+ * This routine is called when a change in step size was decided upon,
+ * and it handles the required adjustments to the history array zn.
+ * If there is to be a change in order, we call cvAdjustOrder and reset
+ * q, L = q+1, and qwait.  Then in any case, we call cvRescale, which
+ * resets h and rescales the Nordsieck array.
+ */
+
+static void cvAdjustParams(CVodeMem cv_mem)
+{
+  if (qprime != q) {
+    cvAdjustOrder(cv_mem, qprime-q);
+    q = qprime;
+    L = q+1;
+    qwait = L;
+  }
+  cvRescale(cv_mem);
+}
+
+/*
+ * cvAdjustOrder
+ *
+ * This routine is a high level routine which handles an order
+ * change by an amount deltaq (= +1 or -1). If a decrease in order
+ * is requested and q==2, then the routine returns immediately.
+ * Otherwise cvAdjustAdams or cvAdjustBDF is called to handle the
+ * order change (depending on the value of lmm).
+ */
+
+static void cvAdjustOrder(CVodeMem cv_mem, int deltaq)
+{
+  if ((q==2) && (deltaq != 1)) return;
+  
+  switch(lmm){
+  case CV_ADAMS:
+    cvAdjustAdams(cv_mem, deltaq);
+    break;
+  case CV_BDF:
+    cvAdjustBDF(cv_mem, deltaq);
+    break;
+  }
+}
+
+/*
+ * cvAdjustAdams
+ *
+ * This routine adjusts the history array on a change of order q by
+ * deltaq, in the case that lmm == CV_ADAMS.
+ */
+
+static void cvAdjustAdams(CVodeMem cv_mem, int deltaq)
+{
+  int i, j;
+  int is;
+  realtype xi, hsum;
+
+  /* On an order increase, set new column of zn to zero and return */
+  
+  if (deltaq==1) {
+    N_VConst(ZERO, zn[L]);
+    if (quadr)
+      N_VConst(ZERO, znQ[L]);
+    if (sensi)
+      for (is=0; is<Ns; is++)
+        N_VConst(ZERO, znS[L][is]);
+    return;
+  }
+
+  /*
+   * On an order decrease, each zn[j] is adjusted by a multiple of zn[q].
+   * The coeffs. in the adjustment are the coeffs. of the polynomial:
+   *        x
+   * q * INT { u * ( u + xi_1 ) * ... * ( u + xi_{q-2} ) } du 
+   *        0
+   * where xi_j = [t_n - t_(n-j)]/h => xi_0 = 0
+   */
+
+  for (i=0; i <= qmax; i++) l[i] = ZERO;
+  l[1] = ONE;
+  hsum = ZERO;
+  for (j=1; j <= q-2; j++) {
+    hsum += tau[j];
+    xi = hsum / hscale;
+    for (i=j+1; i >= 1; i--) l[i] = l[i]*xi + l[i-1];
+  }
+  
+  for (j=1; j <= q-2; j++) l[j+1] = q * (l[j] / (j+1));
+  
+  for (j=2; j < q; j++)
+    N_VLinearSum(-l[j], zn[q], ONE, zn[j], zn[j]);
+
+  if (quadr)
+    for (j=2; j < q; j++)
+      N_VLinearSum(-l[j], znQ[q], ONE, znQ[j], znQ[j]);
+
+  if (sensi)
+    for (is=0; is<Ns; is++)
+      for (j=2; j < q; j++)
+        N_VLinearSum(-l[j], znS[q][is], ONE, znS[j][is], znS[j][is]);
+
+}
+
+/*
+ * cvAdjustBDF
+ *
+ * This is a high level routine which handles adjustments to the
+ * history array on a change of order by deltaq in the case that 
+ * lmm == CV_BDF.  cvAdjustBDF calls cvIncreaseBDF if deltaq = +1 and 
+ * cvDecreaseBDF if deltaq = -1 to do the actual work.
+ */
+
+static void cvAdjustBDF(CVodeMem cv_mem, int deltaq)
+{
+  switch(deltaq) {
+  case 1: 
+    cvIncreaseBDF(cv_mem);
+    return;
+  case -1: 
+    cvDecreaseBDF(cv_mem);
+    return;
+  }
+}
+
+/*
+ * cvIncreaseBDF
+ *
+ * This routine adjusts the history array on an increase in the 
+ * order q in the case that lmm == CV_BDF.  
+ * A new column zn[q+1] is set equal to a multiple of the saved 
+ * vector (= acor) in zn[indx_acor].  Then each zn[j] is adjusted by
+ * a multiple of zn[q+1].  The coefficients in the adjustment are the 
+ * coefficients of the polynomial x*x*(x+xi_1)*...*(x+xi_j),
+ * where xi_j = [t_n - t_(n-j)]/h.
+ */
+
+static void cvIncreaseBDF(CVodeMem cv_mem)
+{
+  realtype alpha0, alpha1, prod, xi, xiold, hsum, A1;
+  int i, j;
+  int is;
+
+  for (i=0; i <= qmax; i++) l[i] = ZERO;
+  l[2] = alpha1 = prod = xiold = ONE;
+  alpha0 = -ONE;
+  hsum = hscale;
+  if (q > 1) {
+    for (j=1; j < q; j++) {
+      hsum += tau[j+1];
+      xi = hsum / hscale;
+      prod *= xi;
+      alpha0 -= ONE / (j+1);
+      alpha1 += ONE / xi;
+      for (i=j+2; i >= 2; i--) l[i] = l[i]*xiold + l[i-1];
+      xiold = xi;
+    }
+  }
+  A1 = (-alpha0 - alpha1) / prod;
+
+  /* 
+     zn[indx_acor] contains the value Delta_n = y_n - y_n(0) 
+     This value was stored there at the previous successful
+     step (in cvCompleteStep) 
+     
+     A1 contains dbar = (1/xi* - 1/xi_q)/prod(xi_j)
+  */
+  
+  N_VScale(A1, zn[indx_acor], zn[L]);
+  for (j=2; j <= q; j++)
+    N_VLinearSum(l[j], zn[L], ONE, zn[j], zn[j]);
+
+  if (quadr) {
+    N_VScale(A1, znQ[indx_acor], znQ[L]);
+    for (j=2; j <= q; j++)
+      N_VLinearSum(l[j], znQ[L], ONE, znQ[j], znQ[j]);
+  }
+
+  if (sensi) {
+    for (is=0; is<Ns; is++) {
+      N_VScale(A1, znS[indx_acor][is], znS[L][is]);
+      for (j=2; j <= q; j++)
+        N_VLinearSum(l[j], znS[L][is], ONE, znS[j][is], znS[j][is]);
+    }
+  }
+
+  if (quadr_sensi) {
+    for (is=0; is<Ns; is++) {
+      N_VScale(A1, znQS[indx_acor][is], znQS[L][is]);
+      for (j=2; j <= q; j++)
+        N_VLinearSum(l[j], znQS[L][is], ONE, znQS[j][is], znQS[j][is]);
+    }
+  }
+
+}
+
+/*
+ * cvDecreaseBDF
+ *
+ * This routine adjusts the history array on a decrease in the 
+ * order q in the case that lmm == CV_BDF.  
+ * Each zn[j] is adjusted by a multiple of zn[q].  The coefficients
+ * in the adjustment are the coefficients of the polynomial
+ *   x*x*(x+xi_1)*...*(x+xi_j), where xi_j = [t_n - t_(n-j)]/h.
+ */
+
+static void cvDecreaseBDF(CVodeMem cv_mem)
+{
+  realtype hsum, xi;
+  int i, j;
+  int is;
+  
+  for (i=0; i <= qmax; i++) l[i] = ZERO;
+  l[2] = ONE;
+  hsum = ZERO;
+  for (j=1; j <= q-2; j++) {
+    hsum += tau[j];
+    xi = hsum /hscale;
+    for (i=j+2; i >= 2; i--) l[i] = l[i]*xi + l[i-1];
+  }
+  
+  for (j=2; j < q; j++)
+    N_VLinearSum(-l[j], zn[q], ONE, zn[j], zn[j]);
+
+  if (quadr) {
+    for (j=2; j < q; j++)
+      N_VLinearSum(-l[j], znQ[q], ONE, znQ[j], znQ[j]);
+  }
+
+  if (sensi) {
+    for (is=0; is<Ns; is++) 
+      for (j=2; j < q; j++)
+        N_VLinearSum(-l[j], znS[q][is], ONE, znS[j][is], znS[j][is]);
+  }
+
+  if (quadr_sensi) {
+    for (is=0; is<Ns; is++) 
+      for (j=2; j < q; j++)
+        N_VLinearSum(-l[j], znQS[q][is], ONE, znQS[j][is], znQS[j][is]);
+  }
+}
+
+/*
+ * cvRescale
+ *
+ * This routine rescales the Nordsieck array by multiplying the
+ * jth column zn[j] by eta^j, j = 1, ..., q.  Then the value of
+ * h is rescaled by eta, and hscale is reset to h.
+ */
+
+static void cvRescale(CVodeMem cv_mem)
+{
+  int j;
+  int is;
+  realtype factor;
+
+  factor = eta;
+  for (j=1; j <= q; j++) {
+
+    N_VScale(factor, zn[j], zn[j]);
+
+    if (quadr)
+      N_VScale(factor, znQ[j], znQ[j]);
+
+    if (sensi)
+      for (is=0; is<Ns; is++)
+        N_VScale(factor, znS[j][is], znS[j][is]);
+
+    if (quadr_sensi)
+      for (is=0; is<Ns; is++)
+        N_VScale(factor, znQS[j][is], znQS[j][is]);
+
+    factor *= eta;
+
+  }
+
+  h = hscale * eta;
+  next_h = h;
+  hscale = h;
+  nscon = 0;
+
+}
+
+/*
+ * cvPredict
+ *
+ * This routine advances tn by the tentative step size h, and computes
+ * the predicted array z_n(0), which is overwritten on zn.  The
+ * prediction of zn is done by repeated additions.
+ * If tstop is enabled, it is possible for tn + h to be past tstop by roundoff,
+ * and in that case, we reset tn (after incrementing by h) to tstop.
+ */
+
+static void cvPredict(CVodeMem cv_mem)
+{
+  int j, k;
+  int is;
+
+  tn += h;
+  if (tstopset) {
+    if ((tn - tstop)*h > ZERO) tn = tstop;
+  }
+
+  for (k = 1; k <= q; k++)
+    for (j = q; j >= k; j--) 
+      N_VLinearSum(ONE, zn[j-1], ONE, zn[j], zn[j-1]); 
+
+  if (quadr) {
+    for (k = 1; k <= q; k++)
+      for (j = q; j >= k; j--) 
+        N_VLinearSum(ONE, znQ[j-1], ONE, znQ[j], znQ[j-1]);
+  }
+
+  if (sensi) {
+    for (is=0; is<Ns; is++) {
+      for (k = 1; k <= q; k++)
+        for (j = q; j >= k; j--) 
+          N_VLinearSum(ONE, znS[j-1][is], ONE, znS[j][is], znS[j-1][is]);
+    }
+  }
+
+  if (quadr_sensi) {
+    for (is=0; is<Ns; is++) {
+      for (k = 1; k <= q; k++)
+        for (j = q; j >= k; j--) 
+          N_VLinearSum(ONE, znQS[j-1][is], ONE, znQS[j][is], znQS[j-1][is]);
+    }
+  }
+
+}
+
+/*
+ * cvSet
+ *
+ * This routine is a high level routine which calls cvSetAdams or
+ * cvSetBDF to set the polynomial l, the test quantity array tq, 
+ * and the related variables  rl1, gamma, and gamrat.
+ *
+ * The array tq is loaded with constants used in the control of estimated
+ * local errors and in the nonlinear convergence test.  Specifically, while
+ * running at order q, the components of tq are as follows:
+ *   tq[1] = a coefficient used to get the est. local error at order q-1
+ *   tq[2] = a coefficient used to get the est. local error at order q
+ *   tq[3] = a coefficient used to get the est. local error at order q+1
+ *   tq[4] = constant used in nonlinear iteration convergence test
+ *   tq[5] = coefficient used to get the order q+2 derivative vector used in
+ *           the est. local error at order q+1
+ */
+
+static void cvSet(CVodeMem cv_mem)
+{
+  switch(lmm) {
+  case CV_ADAMS:
+    cvSetAdams(cv_mem);
+    break;
+  case CV_BDF:
+    cvSetBDF(cv_mem);
+    break;
+  }
+  rl1 = ONE / l[1];
+  gamma = h * rl1;
+  if (nst == 0) gammap = gamma;
+  gamrat = (nst > 0) ? gamma / gammap : ONE;  /* protect x / x != 1.0 */
+}
+
+/*
+ * cvSetAdams
+ *
+ * This routine handles the computation of l and tq for the
+ * case lmm == CV_ADAMS.
+ *
+ * The components of the array l are the coefficients of a
+ * polynomial Lambda(x) = l_0 + l_1 x + ... + l_q x^q, given by
+ *                          q-1
+ * (d/dx) Lambda(x) = c * PRODUCT (1 + x / xi_i) , where
+ *                          i=1
+ *  Lambda(-1) = 0, Lambda(0) = 1, and c is a normalization factor.
+ * Here xi_i = [t_n - t_(n-i)] / h.
+ *
+ * The array tq is set to test quantities used in the convergence
+ * test, the error test, and the selection of h at a new order.
+ */
+
+static void cvSetAdams(CVodeMem cv_mem)
+{
+  realtype m[L_MAX], M[3], hsum;
+  
+  if (q == 1) {
+    l[0] = l[1] = tq[1] = tq[5] = ONE;
+    tq[2] = HALF;
+    tq[3] = ONE/TWELVE;
+    tq[4] = nlscoef / tq[2];       /* = 0.1 / tq[2] */
+    return;
+  }
+  
+  hsum = cvAdamsStart(cv_mem, m);
+  
+  M[0] = cvAltSum(q-1, m, 1);
+  M[1] = cvAltSum(q-1, m, 2);
+  
+  cvAdamsFinish(cv_mem, m, M, hsum);
+}
+
+/*
+ * cvAdamsStart
+ *
+ * This routine generates in m[] the coefficients of the product
+ * polynomial needed for the Adams l and tq coefficients for q > 1.
+ */
+
+static realtype cvAdamsStart(CVodeMem cv_mem, realtype m[])
+{
+  realtype hsum, xi_inv, sum;
+  int i, j;
+  
+  hsum = h;
+  m[0] = ONE;
+  for (i=1; i <= q; i++) m[i] = ZERO;
+  for (j=1; j < q; j++) {
+    if ((j==q-1) && (qwait == 1)) {
+      sum = cvAltSum(q-2, m, 2);
+      tq[1] = q * sum / m[q-2];
+    }
+    xi_inv = h / hsum;
+    for (i=j; i >= 1; i--) m[i] += m[i-1] * xi_inv;
+    hsum += tau[j];
+    /* The m[i] are coefficients of product(1 to j) (1 + x/xi_i) */
+  }
+  return(hsum);
+}
+
+/*
+ * cvAdamsFinish
+ *
+ * This routine completes the calculation of the Adams l and tq.
+ */
+
+static void cvAdamsFinish(CVodeMem cv_mem, realtype m[], realtype M[], realtype hsum)
+{
+  int i;
+  realtype M0_inv, xi, xi_inv;
+  
+  M0_inv = ONE / M[0];
+  
+  l[0] = ONE;
+  for (i=1; i <= q; i++) l[i] = M0_inv * (m[i-1] / i);
+  xi = hsum / h;
+  xi_inv = ONE / xi;
+  
+  tq[2] = M[1] * M0_inv / xi;
+  tq[5] = xi / l[q];
+
+  if (qwait == 1) {
+    for (i=q; i >= 1; i--) m[i] += m[i-1] * xi_inv;
+    M[2] = cvAltSum(q, m, 2);
+    tq[3] = M[2] * M0_inv / L;
+  }
+
+  tq[4] = nlscoef / tq[2];
+}
+
+/*  
+ * cvAltSum
+ *
+ * cvAltSum returns the value of the alternating sum
+ *   sum (i= 0 ... iend) [ (-1)^i * (a[i] / (i + k)) ].
+ * If iend < 0 then cvAltSum returns 0.
+ * This operation is needed to compute the integral, from -1 to 0,
+ * of a polynomial x^(k-1) M(x) given the coefficients of M(x).
+ */
+
+static realtype cvAltSum(int iend, realtype a[], int k)
+{
+  int i, sign;
+  realtype sum;
+  
+  if (iend < 0) return(ZERO);
+  
+  sum = ZERO;
+  sign = 1;
+  for (i=0; i <= iend; i++) {
+    sum += sign * (a[i] / (i+k));
+    sign = -sign;
+  }
+  return(sum);
+}
+
+/*
+ * cvSetBDF
+ *
+ * This routine computes the coefficients l and tq in the case
+ * lmm == CV_BDF.  cvSetBDF calls cvSetTqBDF to set the test
+ * quantity array tq. 
+ * 
+ * The components of the array l are the coefficients of a
+ * polynomial Lambda(x) = l_0 + l_1 x + ... + l_q x^q, given by
+ *                                 q-1
+ * Lambda(x) = (1 + x / xi*_q) * PRODUCT (1 + x / xi_i) , where
+ *                                 i=1
+ *  xi_i = [t_n - t_(n-i)] / h.
+ *
+ * The array tq is set to test quantities used in the convergence
+ * test, the error test, and the selection of h at a new order.
+ */
+
+static void cvSetBDF(CVodeMem cv_mem)
+{
+  realtype alpha0, alpha0_hat, xi_inv, xistar_inv, hsum;
+  int i,j;
+  
+  l[0] = l[1] = xi_inv = xistar_inv = ONE;
+  for (i=2; i <= q; i++) l[i] = ZERO;
+  alpha0 = alpha0_hat = -ONE;
+  hsum = h;
+  if (q > 1) {
+    for (j=2; j < q; j++) {
+      hsum += tau[j-1];
+      xi_inv = h / hsum;
+      alpha0 -= ONE / j;
+      for (i=j; i >= 1; i--) l[i] += l[i-1]*xi_inv;
+      /* The l[i] are coefficients of product(1 to j) (1 + x/xi_i) */
+    }
+    
+    /* j = q */
+    alpha0 -= ONE / q;
+    xistar_inv = -l[1] - alpha0;
+    hsum += tau[q-1];
+    xi_inv = h / hsum;
+    alpha0_hat = -l[1] - xi_inv;
+    for (i=q; i >= 1; i--) l[i] += l[i-1]*xistar_inv;
+  }
+
+  cvSetTqBDF(cv_mem, hsum, alpha0, alpha0_hat, xi_inv, xistar_inv);
+}
+
+/*
+ * cvSetTqBDF
+ *
+ * This routine sets the test quantity array tq in the case
+ * lmm == CV_BDF.
+ */
+
+static void cvSetTqBDF(CVodeMem cv_mem, realtype hsum, realtype alpha0,
+                       realtype alpha0_hat, realtype xi_inv, realtype xistar_inv)
+{
+  realtype A1, A2, A3, A4, A5, A6;
+  realtype C, Cpinv, Cppinv;
+  
+  A1 = ONE - alpha0_hat + alpha0;
+  A2 = ONE + q * A1;
+  tq[2] = SUNRabs(A1 / (alpha0 * A2));
+  tq[5] = SUNRabs(A2 * xistar_inv / (l[q] * xi_inv));
+  if (qwait == 1) {
+    if (q > 1) {
+      C = xistar_inv / l[q];
+      A3 = alpha0 + ONE / q;
+      A4 = alpha0_hat + xi_inv;
+      Cpinv = (ONE - A4 + A3) / A3;
+      tq[1] = SUNRabs(C * Cpinv);
+    }
+    else tq[1] = ONE;
+    hsum += tau[q];
+    xi_inv = h / hsum;
+    A5 = alpha0 - (ONE / (q+1));
+    A6 = alpha0_hat - xi_inv;
+    Cppinv = (ONE - A6 + A5) / A2;
+    tq[3] = SUNRabs(Cppinv / (xi_inv * (q+2) * A5));
+  }
+  tq[4] = nlscoef / tq[2];
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Nonlinear solver functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvNls
+ *
+ * This routine attempts to solve the nonlinear system associated
+ * with a single implicit step of the linear multistep method.
+ * Depending on iter, it calls cvNlsFunctional or cvNlsNewton
+ * to do the work.
+ */
+
+static int cvNls(CVodeMem cv_mem, int nflag)
+{
+  int flag = CV_SUCCESS;
+
+  switch(iter) {
+  case CV_FUNCTIONAL:
+    flag = cvNlsFunctional(cv_mem);
+    break;
+  case CV_NEWTON:
+    flag = cvNlsNewton(cv_mem, nflag);
+    break;
+  }
+  
+  return(flag);
+
+}
+
+/*
+ * cvNlsFunctional
+ *
+ * This routine attempts to solve the nonlinear system using 
+ * functional iteration (no matrices involved).
+ * 
+ * This routine also handles the functional iteration of the
+ * combined system (states + sensitivities) when sensitivities are 
+ * computed using the CV_SIMULTANEOUS approach.
+ *
+ * Possible return values are:
+ *
+ *   CV_SUCCESS       ---> continue with error test
+ *
+ *   CV_RHSFUNC_FAIL  -+   
+ *   CV_SRHSFUNC_FAIL -+-> halt the integration 
+ *
+ *   CONV_FAIL        -+
+ *   RHSFUNC_RECVR     |-> predict again or stop if too many
+ *   SRHSFUNC_RECVR   -+
+ *
+ */
+
+static int cvNlsFunctional(CVodeMem cv_mem)
+{
+  int m;
+  realtype del, delS, Del, Delp, dcon;
+  int retval, is;
+  booleantype do_sensi_sim;
+  N_Vector wrk1, wrk2;
+
+  /* Are we computing sensitivities with the CV_SIMULTANEOUS approach? */
+  do_sensi_sim = (sensi && (ism==CV_SIMULTANEOUS));
+
+  /* Initialize counter and evaluate f at predicted y */
+  crate = ONE;
+  m = 0;
+
+  /* Initialize delS and Delp to avoid compiler warning message */
+  delS = Delp = ZERO;
+
+  retval = f(tn, zn[0], tempv, user_data);
+  nfe++;
+  if (retval < 0) return(CV_RHSFUNC_FAIL);
+  if (retval > 0) return(RHSFUNC_RECVR);
+
+  if (do_sensi_sim) {
+    wrk1 = ftemp;
+    wrk2 = ftempS[0];
+    retval = cvSensRhsWrapper(cv_mem, tn, zn[0], tempv, znS[0], tempvS, wrk1, wrk2);
+    if (retval < 0) return(CV_SRHSFUNC_FAIL);
+    if (retval > 0) return(SRHSFUNC_RECVR);
+  }
+
+  /* Initialize correction to zero */
+
+  N_VConst(ZERO, acor);
+  if (do_sensi_sim) {
+    for (is=0; is<Ns; is++)
+      N_VConst(ZERO,acorS[is]);
+  }
+
+  /* Loop until convergence; accumulate corrections in acor */
+
+  loop {
+
+    nni++;
+
+    /* Correct y directly from the last f value */
+
+    N_VLinearSum(h, tempv, -ONE, zn[1], tempv);
+    N_VScale(rl1, tempv, tempv);
+    N_VLinearSum(ONE, zn[0], ONE, tempv, y);
+
+    if (do_sensi_sim)
+      for (is=0; is<Ns; is++) {
+        N_VLinearSum(h, tempvS[is], -ONE, znS[1][is], tempvS[is]);
+        N_VScale(rl1, tempvS[is], tempvS[is]);
+        N_VLinearSum(ONE, znS[0][is], ONE, tempvS[is], yS[is]);
+      }
+    
+    /* Get WRMS norm of current correction to use in convergence test */
+
+    N_VLinearSum(ONE, tempv, -ONE, acor, acor);
+    if (do_sensi_sim)
+      for (is=0; is<Ns; is++)
+        N_VLinearSum(ONE, tempvS[is], -ONE, acorS[is], acorS[is]);
+
+    del = N_VWrmsNorm(acor, ewt);
+    if (do_sensi_sim)
+      delS = cvSensUpdateNorm(cv_mem, del, acorS, ewtS);
+
+    N_VScale(ONE, tempv, acor);
+    if (do_sensi_sim) 
+      for (is=0; is<Ns; is++)
+        N_VScale(ONE, tempvS[is], acorS[is]);
+    
+    /* Test for convergence.  If m > 0, an estimate of the convergence
+       rate constant is stored in crate, and used in the test. 
+
+       Recall that, even when errconS=FALSE, all variables are used in the
+       convergence test. Hence, we use Del (and not del). However, acnrm
+       is used in the error test and thus it has different forms
+       depending on errconS (and this explains why we have to carry around
+       del and delS)
+    */
+    
+    Del = (do_sensi_sim) ? delS : del;
+    if (m > 0) crate = SUNMAX(CRDOWN * crate, Del / Delp);
+    dcon = Del * SUNMIN(ONE, crate) / tq[4];
+
+    if (dcon <= ONE) {
+      if (m == 0)
+        if (do_sensi_sim && errconS) acnrm = delS;
+        else                         acnrm = del;
+      else {
+        acnrm = N_VWrmsNorm(acor, ewt);
+        if (do_sensi_sim && errconS)
+          acnrm = cvSensUpdateNorm(cv_mem, acnrm, acorS, ewtS);
+      }
+      return(CV_SUCCESS);  /* Convergence achieved */
+    }
+
+    /* Stop at maxcor iterations or if iter. seems to be diverging */
+
+    m++;
+    if ((m==maxcor) || ((m >= 2) && (Del > RDIV * Delp))) return(CONV_FAIL);
+
+    /* Save norm of correction, evaluate f, and loop again */
+
+    Delp = Del;
+
+    retval = f(tn, y, tempv, user_data);
+    nfe++;
+    if (retval < 0) return(CV_RHSFUNC_FAIL);
+    if (retval > 0) return(RHSFUNC_RECVR);
+
+    if (do_sensi_sim) {
+      wrk1 = ftemp;
+      wrk2 = ftempS[0];
+      retval = cvSensRhsWrapper(cv_mem, tn, y, tempv, yS, tempvS, wrk1, wrk2);
+      if (retval < 0) return(CV_SRHSFUNC_FAIL);
+      if (retval > 0) return(SRHSFUNC_RECVR);
+    }      
+
+  } /* end loop */
+
+}
+
+/*
+ * cvNlsNewton
+ *
+ * This routine handles the Newton iteration. It calls lsetup if 
+ * indicated, calls cvNewtonIteration to perform the iteration, and 
+ * retries a failed attempt at Newton iteration if that is indicated.
+ * See return values at top of this file.
+ *
+ * This routine also handles the Newton iteration of the combined 
+ * system when sensitivities are computed using the CV_SIMULTANEOUS
+ * approach. Since in that case we use a quasi-Newton on the 
+ * combined system (by approximating the Jacobian matrix by its
+ * block diagonal) and thus only solve linear systems with 
+ * multiple right hand sides (all sharing the same coefficient
+ * matrix - whatever iteration matrix we decide on) we set-up
+ * the linear solver to handle N equations at a time.
+ *
+ * Possible return values:
+ *
+ *   CV_SUCCESS       ---> continue with error test
+ *
+ *   CV_RHSFUNC_FAIL  -+  
+ *   CV_LSETUP_FAIL    |
+ *   CV_LSOLVE_FAIL    |-> halt the integration 
+ *   CV_SRHSFUNC_FAIL -+
+ *
+ *   CONV_FAIL        -+
+ *   RHSFUNC_RECVR     |-> predict again or stop if too many
+ *   SRHSFUNC_RECVR   -+
+ *
+ */
+
+static int cvNlsNewton(CVodeMem cv_mem, int nflag)
+{
+  N_Vector vtemp1, vtemp2, vtemp3, wrk1, wrk2;
+  int convfail, ier;
+  booleantype callSetup, do_sensi_sim;
+  int retval, is;
+  
+  /* Are we computing sensitivities with the CV_SIMULTANEOUS approach? */
+  do_sensi_sim = (sensi && (ism==CV_SIMULTANEOUS));
+
+  vtemp1 = acor;  /* rename acor as vtemp1 for readability  */
+  vtemp2 = y;     /* rename y as vtemp2 for readability     */
+  vtemp3 = tempv; /* rename tempv as vtemp3 for readability */
+  
+  /* Set flag convfail, input to lsetup for its evaluation decision */
+  convfail = ((nflag == FIRST_CALL) || (nflag == PREV_ERR_FAIL)) ?
+    CV_NO_FAILURES : CV_FAIL_OTHER;
+
+  /* Decide whether or not to call setup routine (if one exists) */
+  if (setupNonNull) {      
+    callSetup = (nflag == PREV_CONV_FAIL) || (nflag == PREV_ERR_FAIL) ||
+      (nst == 0) || (nst >= nstlp + MSBP) || (SUNRabs(gamrat-ONE) > DGMAX);
+
+    /* Decide whether to force a call to setup */
+    if (forceSetup) {
+      callSetup = TRUE;
+      convfail = CV_FAIL_OTHER;
+    }
+
+  } else {  
+    crate = ONE;
+    crateS = ONE;  /* if NO lsetup all conv. rates are set to ONE */
+    callSetup = FALSE;
+  }
+  
+  /* Looping point for the solution of the nonlinear system.
+     Evaluate f at the predicted y, call lsetup if indicated, and
+     call cvNewtonIteration for the Newton iteration itself.      */
+
+  loop {
+
+    retval = f(tn, zn[0], ftemp, user_data);
+    nfe++; 
+    if (retval < 0) return(CV_RHSFUNC_FAIL);
+    if (retval > 0) return(RHSFUNC_RECVR);
+
+    if (do_sensi_sim) {
+      wrk1 = tempv;
+      wrk2 = tempvS[0];
+      retval = cvSensRhsWrapper(cv_mem, tn, zn[0], ftemp, znS[0], ftempS, wrk1, wrk2);
+      if (retval < 0) return(CV_SRHSFUNC_FAIL);
+      if (retval > 0) return(SRHSFUNC_RECVR);
+    }
+
+    if (callSetup) {
+      ier = lsetup(cv_mem, convfail, zn[0], ftemp, &jcur, 
+                   vtemp1, vtemp2, vtemp3);
+      nsetups++;
+      callSetup = FALSE;
+      forceSetup = FALSE;
+      gamrat = ONE; 
+      gammap = gamma;
+      crate = ONE;
+      crateS = ONE; /* after lsetup all conv. rates are reset to ONE */
+      nstlp = nst;
+      /* Return if lsetup failed */
+      if (ier < 0) return(CV_LSETUP_FAIL);
+      if (ier > 0) return(CONV_FAIL);
+    }
+
+    /* Set acor to zero and load prediction into y vector */
+    N_VConst(ZERO, acor);
+    N_VScale(ONE, zn[0], y);
+
+    if (do_sensi_sim)
+      for (is=0; is<Ns; is++) {
+        N_VConst(ZERO, acorS[is]);
+        N_VScale(ONE, znS[0][is], yS[is]);
+      }
+
+    /* Do the Newton iteration */
+    ier = cvNewtonIteration(cv_mem);
+
+    /* If there is a convergence failure and the Jacobian-related 
+       data appears not to be current, loop again with a call to lsetup
+       in which convfail=CV_FAIL_BAD_J.  Otherwise return.                 */
+    if (ier != TRY_AGAIN) return(ier);
+    
+    callSetup = TRUE;
+    convfail = CV_FAIL_BAD_J;
+  }
+}
+
+/*
+ * cvNewtonIteration
+ *
+ * This routine performs the Newton iteration. If the iteration succeeds,
+ * it returns the value CV_SUCCESS. If not, it may signal the cvNlsNewton 
+ * routine to call lsetup again and reattempt the iteration, by
+ * returning the value TRY_AGAIN. (In this case, cvNlsNewton must set 
+ * convfail to CV_FAIL_BAD_J before calling setup again). 
+ * Otherwise, this routine returns one of the appropriate values 
+ * CV_LSOLVE_FAIL, CV_RHSFUNC_FAIL, CV_SRHSFUNC_FAIL, CONV_FAIL,
+ * RHSFUNC_RECVR, or SRHSFUNC_RECVR back to cvNlsNewton.
+ *
+ * If sensitivities are computed using the CV_SIMULTANEOUS approach, this
+ * routine performs a quasi-Newton on the combined nonlinear system.
+ * The iteration matrix of the combined system is block diagonal with
+ * each block being the iteration matrix of the original system. Thus
+ * we solve linear systems with the same matrix but different right
+ * hand sides.
+ */
+
+static int cvNewtonIteration(CVodeMem cv_mem)
+{
+  int m;
+  realtype del, delS, Del, Delp, dcon;
+  N_Vector b, *bS=NULL, wrk1, wrk2;
+  booleantype do_sensi_sim;
+  int retval, is;
+  
+  /* Are we computing sensitivities with the CV_SIMULTANEOUS approach? */
+  do_sensi_sim = (sensi && (ism==CV_SIMULTANEOUS));
+
+  mnewt = m = 0;
+
+  /* Initialize delS and Delp to avoid compiler warning message */
+  delS = Delp = ZERO;
+
+  /* At this point, ftemp  <- f(t_n, y_n(0))
+     ftempS <- fS(t_n, y_n(0), s_n(0))
+     acor   <- 0
+     acorS  <- 0
+     y      <- y_n(0)
+     yS     <- yS_n(0)                 */
+
+  /* Looping point for Newton iteration */
+  loop {
+    
+    /* Evaluate the residual of the nonlinear system */
+    N_VLinearSum(rl1, zn[1], ONE, acor, tempv);
+    N_VLinearSum(gamma, ftemp, -ONE, tempv, tempv);
+
+    /* Call the lsolve function */
+    b = tempv;
+    retval = lsolve(cv_mem, b, ewt, y, ftemp); 
+    nni++;
+
+    if (retval < 0) return(CV_LSOLVE_FAIL);
+    
+    /* If lsolve had a recoverable failure and Jacobian data is
+       not current, signal to try the solution again            */
+    if (retval > 0) { 
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(CONV_FAIL);
+    }
+
+    /* Solve the sensitivity linear systems and do the same 
+       tests on the return value of lsolve. */
+ 
+    if (do_sensi_sim) {
+
+      for (is=0; is<Ns; is++) {
+        N_VLinearSum(rl1, znS[1][is], ONE, acorS[is], tempvS[is]);
+        N_VLinearSum(gamma, ftempS[is], -ONE, tempvS[is], tempvS[is]);
+      }
+      bS = tempvS;
+      for (is=0; is<Ns; is++) {
+        retval = lsolve(cv_mem, bS[is], ewtS[is], y, ftemp);
+        if (retval < 0) return(CV_LSOLVE_FAIL);
+        if (retval > 0) { 
+          if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+          else                           return(CONV_FAIL);
+        }
+      }
+    }
+    
+    /* Get WRMS norm of correction; add correction to acor and y */
+
+    del = N_VWrmsNorm(b, ewt);
+    N_VLinearSum(ONE, acor, ONE, b, acor);
+    N_VLinearSum(ONE, zn[0], ONE, acor, y);
+
+    if (do_sensi_sim) {
+      delS = cvSensUpdateNorm(cv_mem, del, bS, ewtS);
+      for (is=0; is<Ns; is++) {
+        N_VLinearSum(ONE, acorS[is], ONE, bS[is], acorS[is]);
+        N_VLinearSum(ONE, znS[0][is], ONE, acorS[is], yS[is]);
+      }
+    }
+
+    /* Test for convergence.  If m > 0, an estimate of the convergence
+       rate constant is stored in crate, and used in the test.        */
+
+    Del = (do_sensi_sim) ? delS : del;
+    if (m > 0) crate = SUNMAX(CRDOWN * crate, Del/Delp);
+    dcon = Del * SUNMIN(ONE, crate) / tq[4];
+    
+    if (dcon <= ONE) {
+      if (m == 0)
+        if (do_sensi_sim && errconS) acnrm = delS;
+        else                         acnrm = del;
+      else {
+        acnrm = N_VWrmsNorm(acor, ewt);
+        if (do_sensi_sim && errconS)
+          acnrm = cvSensUpdateNorm(cv_mem, acnrm, acorS, ewtS);
+      }
+      jcur = FALSE;
+      return(CV_SUCCESS);  /* Convergence achieved */
+    }
+
+    mnewt = ++m;
+    
+    /* Stop at maxcor iterations or if iter. seems to be diverging.
+       If still not converged and Jacobian data is not current, 
+       signal to try the solution again                            */
+    if ((m == maxcor) || ((m >= 2) && (Del > RDIV * Delp))) {
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(CONV_FAIL);
+    }
+    
+    /* Save norm of correction, evaluate f, and loop again */
+    Delp = Del;
+    retval = f(tn, y, ftemp, user_data);
+    nfe++;
+    if (retval < 0) return(CV_RHSFUNC_FAIL);
+    if (retval > 0) {
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(RHSFUNC_RECVR);
+    }
+
+    if (do_sensi_sim) {
+      wrk1 = tempv;
+      wrk2 = tempvS[0];
+      retval = cvSensRhsWrapper(cv_mem, tn, y, ftemp, yS, ftempS, wrk1, wrk2);
+      if (retval < 0) return(CV_SRHSFUNC_FAIL);
+      if (retval > 0) {
+        if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+        else                           return(SRHSFUNC_RECVR);
+      }
+    }
+
+  } /* end loop */
+
+}
+
+/*
+ * cvQuadNls
+ * 
+ * This routine solves for the quadrature variables at the new step.
+ * It does not solve a nonlinear system, but rather updates the
+ * quadrature variables. The name for this function is just for 
+ * uniformity purposes.
+ *
+ * Possible return values (interpreted by cvHandleNFlag)
+ *
+ *   CV_SUCCESS       -> continue with error test
+ *   CV_QRHSFUNC_FAIL -> halt the integration 
+ *   QRHSFUNC_RECVR   -> predict again or stop if too many
+ *   
+ */
+
+static int cvQuadNls(CVodeMem cv_mem)
+{
+  int retval;
+
+  /* Save quadrature correction in acorQ */
+  retval = fQ(tn, y, acorQ, user_data);
+  nfQe++;
+  if (retval < 0) return(CV_QRHSFUNC_FAIL);
+  if (retval > 0) return(QRHSFUNC_RECVR);
+
+  /* If needed, save the value of yQdot = fQ into ftempQ
+   * for use in evaluating fQS */
+  if (quadr_sensi) {
+    N_VScale(ONE, acorQ, ftempQ);
+  }
+
+  N_VLinearSum(h, acorQ, -ONE, znQ[1], acorQ);
+  N_VScale(rl1, acorQ, acorQ);
+
+  /* Apply correction to quadrature variables */
+  N_VLinearSum(ONE, znQ[0], ONE, acorQ, yQ);
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * cvQuadSensNls
+ * 
+ * This routine solves for the quadrature sensitivity variables
+ * at the new step. It does not solve a nonlinear system, but 
+ * rather updates the quadrature variables. The name for this
+ * function is just for uniformity purposes.
+ *
+ * Possible return values (interpreted by cvHandleNFlag)
+ *
+ *   CV_SUCCESS        -> continue with error test
+ *   CV_QSRHSFUNC_FAIL -> halt the integration 
+ *   QSRHSFUNC_RECVR   -> predict again or stop if too many
+ *   
+ */
+
+static int cvQuadSensNls(CVodeMem cv_mem)
+{
+  int is, retval;
+
+  /* Save quadrature correction in acorQ */
+  retval = fQS(Ns, tn, y, yS, ftempQ, acorQS, user_data, tempv, tempvQ);
+  nfQSe++;
+  if (retval < 0) return(CV_QSRHSFUNC_FAIL);
+  if (retval > 0) return(QSRHSFUNC_RECVR);
+
+
+  for (is=0; is<Ns; is++) {
+    N_VLinearSum(h, acorQS[is], -ONE, znQS[1][is], acorQS[is]);
+    N_VScale(rl1, acorQS[is], acorQS[is]);
+    /* Apply correction to quadrature sensitivity variables */
+    N_VLinearSum(ONE, znQS[0][is], ONE, acorQS[is], yQS[is]);
+  }
+
+  return(CV_SUCCESS);
+}
+
+
+/*
+ * cvStgrNls
+ *
+ * This is a high-level routine that attempts to solve the 
+ * sensitivity linear systems using nonlinear iterations (CV_FUNCTIONAL
+ * or CV_NEWTON - depending on the value of iter) once the states y_n
+ * were obtained and passed the error test.
+ */
+
+static int cvStgrNls(CVodeMem cv_mem)
+{
+  int flag=CV_SUCCESS;
+
+  switch(iter) {
+  case CV_FUNCTIONAL:
+    flag = cvStgrNlsFunctional(cv_mem);
+    break;
+  case CV_NEWTON:
+    flag = cvStgrNlsNewton(cv_mem);
+    break;
+  }
+
+  return(flag);
+
+}
+
+/*
+ * cvStgrNlsfunctional
+ *
+ * This routine attempts to solve the sensitivity linear systems 
+ * using functional iteration (no matrices involved).
+ *
+ * Possible return values:
+ *  CV_SUCCESS,
+ *  CV_SRHSFUNC_FAIL,
+ *  CONV_FAIL, SRHSFUNC_RECVR
+ */
+
+static int cvStgrNlsFunctional(CVodeMem cv_mem)
+{
+  int m;
+  int retval, is;
+  realtype Del, Delp, dcon;
+  N_Vector wrk1, wrk2;
+
+  /* Initialize estimated conv. rate and counter */
+  crateS = ONE;
+  m = 0;
+
+  /* Initialize Delp to avoid compiler warning message */
+  Delp = ZERO;
+
+  /* Evaluate fS at predicted yS but with converged y (and corresponding f) */
+  wrk1 = tempv;
+  wrk2 = ftempS[0];
+  retval = cvSensRhsWrapper(cv_mem, tn, y, ftemp, znS[0], tempvS, wrk1, wrk2);
+  if (retval < 0) return(CV_SRHSFUNC_FAIL);
+  if (retval > 0) return(SRHSFUNC_RECVR);
+
+  /* Initialize correction to zero */
+  for (is=0; is<Ns; is++)
+    N_VConst(ZERO,acorS[is]);
+
+  /* Loop until convergence; accumulate corrections in acorS */
+
+  loop {
+    
+    nniS++;
+    
+    /* Correct yS from last fS value */
+    for (is=0; is<Ns; is++) {
+      N_VLinearSum(h, tempvS[is], -ONE, znS[1][is], tempvS[is]);
+      N_VScale(rl1, tempvS[is], tempvS[is]);
+      N_VLinearSum(ONE, znS[0][is], ONE, tempvS[is], yS[is]);
+    }
+    /* Get norm of current correction to use in convergence test */
+    for (is=0; is<Ns; is++)
+      N_VLinearSum(ONE, tempvS[is], -ONE, acorS[is], acorS[is]);
+    Del = cvSensNorm(cv_mem, acorS, ewtS);
+    for (is=0; is<Ns; is++)
+      N_VScale(ONE, tempvS[is], acorS[is]);
+
+    /* Test for convergence.  If m > 0, an estimate of the convergence
+       rate constant is stored in crateS, and used in the test. 
+       acnrmS contains the norm of the corrections (yS_n-yS_n(0)) and
+       will be used in the error test (if errconS==TRUE)              */
+    if (m > 0) crateS = SUNMAX(CRDOWN * crateS, Del / Delp);
+    dcon = Del * SUNMIN(ONE, crateS) / tq[4];
+    
+    if (dcon <= ONE) {
+      if (errconS)
+        acnrmS = (m==0)? Del : cvSensNorm(cv_mem, acorS, ewtS);
+      return(CV_SUCCESS);  /* Convergence achieved */
+    }
+
+    /* Stop at maxcor iterations or if iter. seems to be diverging */
+    m++;
+    if ((m==maxcorS) || ((m >= 2) && (Del > RDIV * Delp))) return(CONV_FAIL);
+
+    /* Save norm of correction, evaluate f, and loop again */
+    Delp = Del;
+
+    wrk1 = tempv;
+    wrk2 = ftempS[0];
+    retval = cvSensRhsWrapper(cv_mem, tn, y, ftemp, yS, tempvS, wrk1, wrk2);
+    if (retval < 0) return(CV_SRHSFUNC_FAIL);
+    if (retval > 0) return(SRHSFUNC_RECVR);
+
+  } /* end loop */
+  
+}
+
+/*
+ * cvStgrNlsNewton
+ *
+ * This routine attempts to solve the sensitivity linear systems using 
+ * Newton iteration. It calls cvStgrNlsNewton to perform the actual 
+ * iteration. If the Newton iteration fails with out-of-date Jacobian 
+ * data (ier=TRY_AGAIN), it calls lsetup and retries the Newton iteration. 
+ * This second try is unlikely to happen when using a Krylov linear solver.
+ *
+ * Possible return values:
+ *
+ *   CV_SUCCESS
+ *
+ *   CV_LSOLVE_FAIL   -+
+ *   CV_LSETUP_FAIL    |
+ *   CV_SRHSFUNC_FAIL -+
+ *
+ *   CONV_FAIL        -+
+ *   SRHSFUNC_RECVR   -+
+ */
+
+static int cvStgrNlsNewton(CVodeMem cv_mem)
+{
+  int retval, is;
+  int convfail, ier;
+  N_Vector vtemp1, vtemp2, vtemp3, wrk1, wrk2;
+
+  loop {
+
+    /* Set acorS to zero and load prediction into yS vector */
+    for (is=0; is<Ns; is++) {
+      N_VConst(ZERO, acorS[is]);
+      N_VScale(ONE, znS[0][is], yS[is]);
+    }
+ 
+    /* Evaluate fS at predicted yS but with converged y (and corresponding f) */
+    wrk1 = tempv;
+    wrk2 = tempvS[0];
+    retval = cvSensRhsWrapper(cv_mem, tn, y, ftemp, yS, ftempS, wrk1, wrk2);
+    if (retval < 0) return(CV_SRHSFUNC_FAIL);
+    if (retval > 0) return(SRHSFUNC_RECVR);
+
+    /* Do the Newton iteration */
+    ier = cvStgrNewtonIteration(cv_mem);
+
+    /* If the solve was successful (ier=CV_SUCCESS) or if an error 
+       that cannot be fixed by a call to lsetup occured
+       (ier = CV_LSOLVE_FAIL or CONV_FAIL) return */
+    if (ier != TRY_AGAIN) return(ier);
+
+    /* There was a convergence failure and the Jacobian-related data
+       appears not to be current. Call lsetup with convfail=CV_FAIL_BAD_J
+       and then loop again */
+    convfail = CV_FAIL_BAD_J;
+
+    /* Rename some vectors for readibility */
+    vtemp1 = tempv;
+    vtemp2 = yS[0];
+    vtemp3 = ftempS[0];
+
+    /* Call linear solver setup at converged y */
+    ier = lsetup(cv_mem, convfail, y, ftemp, &jcur, 
+                 vtemp1, vtemp2, vtemp3);
+    nsetups++;
+    nsetupsS++;
+    gamrat = ONE;
+    gammap = gamma;
+    crate = ONE;
+    crateS = ONE; /* after lsetup all conv. rates are reset to ONE */
+    nstlp = nst;
+
+    /* Return if lsetup failed */
+    if (ier < 0) return(CV_LSETUP_FAIL);
+    if (ier > 0) return(CONV_FAIL);
+
+  } /* end loop */
+
+}
+
+/*
+ * cvStgrNewtonIteration
+ *
+ * This routine performs the Newton iteration for all sensitivities. 
+ * If the iteration succeeds, it returns the value CV_SUCCESS. 
+ * If not, it may signal the cvStgrNlsNewton routine to call lsetup and 
+ * reattempt the iteration, by returning the value TRY_AGAIN. (In this case, 
+ * cvStgrNlsNewton must set convfail to CV_FAIL_BAD_J before calling setup again). 
+ * Otherwise, this routine returns one of the appropriate values 
+ * CV_LSOLVE_FAIL or CONV_FAIL back to cvStgrNlsNewton.
+ */
+
+static int cvStgrNewtonIteration(CVodeMem cv_mem)
+{
+  int m, retval;
+  realtype Del, Delp, dcon;
+  N_Vector *bS, wrk1, wrk2;
+  int is;
+
+  m = 0;
+
+  /* Initialize Delp to avoid compiler warning message */
+  Delp = ZERO;
+
+  /* ftemp  <- f(t_n, y_n)
+     y      <- y_n
+     ftempS <- fS(t_n, y_n(0), s_n(0))
+     acorS  <- 0
+     yS     <- yS_n(0)                   */
+
+  loop {
+
+    /* Evaluate the residual of the nonlinear systems */
+    for (is=0; is<Ns; is++) {
+      N_VLinearSum(rl1, znS[1][is], ONE, acorS[is], tempvS[is]);
+      N_VLinearSum(gamma, ftempS[is], -ONE, tempvS[is], tempvS[is]);
+    }
+
+    /* Call the lsolve function */
+    bS = tempvS;
+    nniS++;
+    for (is=0; is<Ns; is++) {
+
+      retval = lsolve(cv_mem, bS[is], ewtS[is], y, ftemp);
+
+      /* Unrecoverable error in lsolve */
+      if (retval < 0) return(CV_LSOLVE_FAIL);
+
+      /* Recoverable error in lsolve and Jacobian data not current */
+      if (retval > 0) { 
+        if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+        else                           return(CONV_FAIL);
+      }
+
+    }
+ 
+    /* Get norm of correction; add correction to acorS and yS */
+    Del = cvSensNorm(cv_mem, bS, ewtS);
+    for (is=0; is<Ns; is++) {
+      N_VLinearSum(ONE, acorS[is], ONE, bS[is], acorS[is]);
+      N_VLinearSum(ONE, znS[0][is], ONE, acorS[is], yS[is]);
+    }
+
+    /* Test for convergence.  If m > 0, an estimate of the convergence
+       rate constant is stored in crateS, and used in the test.        */
+    if (m > 0) crateS = SUNMAX(CRDOWN * crateS, Del/Delp);
+    dcon = Del * SUNMIN(ONE, crateS) / tq[4];
+    if (dcon <= ONE) {
+      if (errconS)
+        acnrmS = (m==0) ? Del : cvSensNorm(cv_mem, acorS, ewtS);
+      jcur = FALSE;
+      return(CV_SUCCESS);  /* Convergence achieved */
+    }
+
+    m++;
+
+    /* Stop at maxcor iterations or if iter. seems to be diverging.
+       If still not converged and Jacobian data is not current, 
+       signal to try the solution again                            */
+    if ((m == maxcorS) || ((m >= 2) && (Del > RDIV * Delp))) {
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(CONV_FAIL);
+    }
+    
+    /* Save norm of correction, evaluate fS, and loop again */
+    Delp = Del;
+    
+    wrk1 = tempv;
+    wrk2 = tempvS[0];
+    retval = cvSensRhsWrapper(cv_mem, tn, y, ftemp, yS, ftempS, wrk1, wrk2);
+    if (retval < 0) return(CV_SRHSFUNC_FAIL);
+    if (retval > 0) {
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(SRHSFUNC_RECVR);
+    }
+
+  } /* end loop */
+
+}
+
+/*
+ * cvStgr1Nls
+ *
+ * This is a high-level routine that attempts to solve the i-th 
+ * sensitivity linear system using nonlinear iterations (CV_FUNCTIONAL
+ * or CV_NEWTON - depending on the value of iter) once the states y_n
+ * were obtained and passed the error test.
+ */
+
+static int cvStgr1Nls(CVodeMem cv_mem, int is)
+{
+  int flag=CV_SUCCESS;
+
+  switch(iter) {
+  case CV_FUNCTIONAL:
+    flag = cvStgr1NlsFunctional(cv_mem,is);
+    break;
+  case CV_NEWTON:
+    flag = cvStgr1NlsNewton(cv_mem,is);
+    break;
+  }
+
+  return(flag);
+
+}
+
+/*
+ * cvStgr1NlsFunctional
+ *
+ * This routine attempts to solve the i-th sensitivity linear system
+ * using functional iteration (no matrices involved).
+ *
+ * Possible return values:
+ *   CV_SUCCESS,
+ *   CV_SRHSFUNC_FAIL,
+ *   CONV_FAIL, SRHSFUNC_RECVR
+ */
+
+static int cvStgr1NlsFunctional(CVodeMem cv_mem, int is)
+{
+  int retval, m;
+  realtype Del, Delp, dcon;
+  N_Vector wrk1, wrk2;
+
+  /* Initialize estimated conv. rate and counter */
+  crateS = ONE;
+  m = 0;
+
+  /* Initialize Delp to avoid compiler warning message */
+  Delp = ZERO;
+
+  /* Evaluate fS at predicted yS but with converged y (and corresponding f) */
+  wrk1 = tempv;
+  wrk2 = ftempS[0];
+  retval = cvSensRhs1Wrapper(cv_mem, tn, y, ftemp, is, znS[0][is], tempvS[is], wrk1, wrk2);
+  if (retval < 0) return(CV_SRHSFUNC_FAIL);
+  if (retval > 0) return(SRHSFUNC_RECVR);
+
+  /* Initialize correction to zero */
+  N_VConst(ZERO,acorS[is]);
+
+  /* Loop until convergence; accumulate corrections in acorS */
+
+  loop {
+
+    nniS1[is]++;
+
+    /* Correct yS from last fS value */
+    N_VLinearSum(h, tempvS[is], -ONE, znS[1][is], tempvS[is]);
+    N_VScale(rl1, tempvS[is], tempvS[is]);
+    N_VLinearSum(ONE, znS[0][is], ONE, tempvS[is], yS[is]);
+
+    /* Get WRMS norm of current correction to use in convergence test */
+    N_VLinearSum(ONE, tempvS[is], -ONE, acorS[is], acorS[is]);
+    Del = N_VWrmsNorm(acorS[is], ewtS[is]);
+    N_VScale(ONE, tempvS[is], acorS[is]);
+
+    /* Test for convergence.  If m > 0, an estimate of the convergence
+       rate constant is stored in crateS, and used in the test. */
+
+    if (m > 0) crateS = SUNMAX(CRDOWN * crateS, Del / Delp);
+    dcon = Del * SUNMIN(ONE, crateS) / tq[4];
+
+    if (dcon <= ONE) {
+      return(CV_SUCCESS);  /* Convergence achieved */
+    }
+
+    /* Stop at maxcor iterations or if iter. seems to be diverging */
+    m++;
+    if ((m==maxcorS) || ((m >= 2) && (Del > RDIV * Delp))) return(CONV_FAIL);
+
+    /* Save norm of correction, evaluate f, and loop again */
+    Delp = Del;
+
+    wrk1 = tempv;
+    wrk2 = ftempS[0];
+
+    retval = cvSensRhs1Wrapper(cv_mem, tn, y, ftemp, is, yS[is], tempvS[is], wrk1, wrk2);
+    if (retval < 0) return(CV_SRHSFUNC_FAIL);
+    if (retval > 0) return(SRHSFUNC_RECVR);
+
+  } /* end loop */
+  
+}
+
+/*
+ * cvStgr1NlsNewton
+ *
+ * This routine attempts to solve the i-th sensitivity linear system 
+ * using Newton iteration. It calls cvStgr1NlsNewton to perform the 
+ * actual iteration. If the Newton iteration fails with out-of-date 
+ * Jacobian data (ier=TRY_AGAIN), it calls lsetup and retries the 
+ * Newton iteration. This second try is unlikely to happen when 
+ * using a Krylov linear solver.
+ *
+ * Possible return values:
+ *
+ *   CV_SUCCESS
+ *
+ *   CV_LSOLVE_FAIL
+ *   CV_LSETUP_FAIL
+ *   CV_SRHSFUNC_FAIL
+ *
+ *   CONV_FAIL
+ *   SRHSFUNC_RECVR
+ */
+
+static int cvStgr1NlsNewton(CVodeMem cv_mem, int is)
+{
+  int convfail, retval, ier;
+  N_Vector vtemp1, vtemp2, vtemp3, wrk1, wrk2;
+
+  loop {
+
+    /* Set acorS to zero and load prediction into yS vector */
+    N_VConst(ZERO, acorS[is]);
+    N_VScale(ONE, znS[0][is], yS[is]);
+ 
+    /* Evaluate fS at predicted yS but with converged y (and corresponding f) */
+    wrk1 = tempv;
+    wrk2 = tempvS[0];
+    retval = cvSensRhs1Wrapper(cv_mem, tn, y, ftemp, is, yS[is], ftempS[is], wrk1, wrk2);
+    if (retval < 0) return(CV_SRHSFUNC_FAIL);
+    if (retval > 0) return(SRHSFUNC_RECVR);
+  
+    /* Do the Newton iteration */
+    ier = cvStgr1NewtonIteration(cv_mem, is);
+
+    /* If the solve was successful (ier=CV_SUCCESS) or if an error 
+       that cannot be fixed by a call to lsetup occured
+       (ier = CV_LSOLVE_FAIL or CONV_FAIL) return */
+    if (ier != TRY_AGAIN) return(ier);
+
+    /* There was a convergence failure and the Jacobian-related data
+       appears not to be current. Call lsetup with convfail=CV_FAIL_BAD_J
+       and then loop again */
+    convfail = CV_FAIL_BAD_J;
+
+    /* Rename some vectors for readibility */
+    vtemp1 = tempv;
+    vtemp2 = yS[0];
+    vtemp3 = ftempS[0];
+
+    /* Call linear solver setup at converged y */
+    ier = lsetup(cv_mem, convfail, y, ftemp, &jcur, 
+                 vtemp1, vtemp2, vtemp3);
+    nsetups++;
+    nsetupsS++;
+    gamrat = ONE;
+    crate = ONE;
+    crateS = ONE; /* after lsetup all conv. rates are reset to ONE */
+    gammap = gamma;
+    nstlp = nst;
+
+    /* Return if lsetup failed */
+    if (ier < 0) return(CV_LSETUP_FAIL);
+    if (ier > 0) return(CONV_FAIL);
+
+  } /* end loop */
+
+}
+
+/*
+ * cvStgr1NewtonIteration
+ *
+ * This routine performs the Newton iteration for the i-th sensitivity. 
+ * If the iteration succeeds, it returns the value CV_SUCCESS. 
+ * If not, it may signal the cvStgr1NlsNewton routine to call lsetup 
+ * and reattempt the iteration, by returning the value TRY_AGAIN. 
+ * (In this case, cvStgr1NlsNewton must set convfail to CV_FAIL_BAD_J 
+ * before calling setup again). Otherwise, this routine returns one 
+ * of the appropriate values CV_LSOLVE_FAIL or CONV_FAIL back to 
+ * cvStgr1NlsNewton.
+ */
+
+static int cvStgr1NewtonIteration(CVodeMem cv_mem, int is)
+{
+  int m, retval;
+  realtype Del, Delp, dcon;
+  N_Vector *bS, wrk1, wrk2;
+
+  m = 0;
+
+  /* Initialize Delp to avoid compiler warning message */
+  Delp = ZERO;
+
+  /* ftemp      <- f(t_n, y_n)
+     y          <- y_n
+     ftempS[is] <- fS(is, t_n, y_n(0), s_n(0))
+     acorS[is]  <- 0
+     yS[is]     <- yS_n(0)[is]                 */
+
+  loop {
+
+    /* Evaluate the residual of the nonlinear systems */
+    N_VLinearSum(rl1, znS[1][is], ONE, acorS[is], tempvS[is]);
+    N_VLinearSum(gamma, ftempS[is], -ONE, tempvS[is], tempvS[is]);
+
+    /* Call the lsolve function */
+    bS = tempvS;
+
+    nniS1[is]++;
+
+    retval = lsolve(cv_mem, bS[is], ewtS[is], y, ftemp);
+
+    /* Unrecoverable error in lsolve */
+    if (retval < 0) return(CV_LSOLVE_FAIL);
+
+    /* Recoverable error in lsolve and Jacobian data not current */
+    if (retval > 0) { 
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(CONV_FAIL);
+    }
+
+    /* Get norm of correction; add correction to acorS and yS */
+    Del = N_VWrmsNorm(bS[is], ewtS[is]);
+    N_VLinearSum(ONE, acorS[is], ONE, bS[is], acorS[is]);
+    N_VLinearSum(ONE, znS[0][is], ONE, acorS[is], yS[is]);
+
+    /* Test for convergence.  If m > 0, an estimate of the convergence
+       rate constant is stored in crateS, and used in the test.        */
+    if (m > 0) crateS = SUNMAX(CRDOWN * crateS, Del/Delp);
+    dcon = Del * SUNMIN(ONE, crateS) / tq[4];
+    if (dcon <= ONE) {
+      jcur = FALSE;
+      return(CV_SUCCESS);  /* Convergence achieved */
+    }
+
+    m++;
+
+    /* Stop at maxcor iterations or if iter. seems to be diverging.
+       If still not converged and Jacobian data is not current, 
+       signal to try the solution again                            */
+    if ((m == maxcorS) || ((m >= 2) && (Del > RDIV * Delp))) {
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(CONV_FAIL);
+    }
+
+    /* Save norm of correction, evaluate fS, and loop again */
+    Delp = Del;
+
+    wrk1 = tempv;
+    wrk2 = tempvS[0];
+    retval = cvSensRhs1Wrapper(cv_mem, tn, y, ftemp, is, yS[is], ftempS[is], wrk1, wrk2);
+    if (retval < 0) return(CV_SRHSFUNC_FAIL);
+    if (retval > 0) {
+      if ((!jcur) && (setupNonNull)) return(TRY_AGAIN);
+      else                           return(SRHSFUNC_RECVR);
+    }
+
+  } /* end loop */
+
+}
+
+/*
+ * cvHandleNFlag
+ *
+ * This routine takes action on the return value nflag = *nflagPtr
+ * returned by cvNls, as follows:
+ *
+ * If cvNls succeeded in solving the nonlinear system, then
+ * cvHandleNFlag returns the constant DO_ERROR_TEST, which tells cvStep
+ * to perform the error test.
+ *
+ * If the nonlinear system was not solved successfully, then ncfn and
+ * ncf = *ncfPtr are incremented and Nordsieck array zn is restored.
+ *
+ * If the solution of the nonlinear system failed due to an
+ * unrecoverable failure by setup, we return the value CV_LSETUP_FAIL.
+ * 
+ * If it failed due to an unrecoverable failure in solve, then we return
+ * the value CV_LSOLVE_FAIL.
+ *
+ * If it failed due to an unrecoverable failure in rhs, then we return
+ * the value CV_RHSFUNC_FAIL.
+ *
+ * If it failed due to an unrecoverable failure in quad rhs, then we return
+ * the value CV_QRHSFUNC_FAIL.
+ *
+ * If it failed due to an unrecoverable failure in sensi rhs, then we return
+ * the value CV_SRHSFUNC_FAIL.
+ *
+ * Otherwise, a recoverable failure occurred when solving the 
+ * nonlinear system (cvNls returned nflag = CONV_FAIL, RHSFUNC_RECVR, or
+ * SRHSFUNC_RECVR). 
+ * In this case, if ncf is now equal to maxncf or |h| = hmin, 
+ * we return the value CV_CONV_FAILURE (if nflag=CONV_FAIL), or
+ * CV_REPTD_RHSFUNC_ERR (if nflag=RHSFUNC_RECVR), or CV_REPTD_SRHSFUNC_ERR
+ * (if nflag=SRHSFUNC_RECVR).
+ * If not, we set *nflagPtr = PREV_CONV_FAIL and return the value
+ * PREDICT_AGAIN, telling cvStep to reattempt the step.
+ *
+ */
+
+static int cvHandleNFlag(CVodeMem cv_mem, int *nflagPtr, realtype saved_t,
+                         int *ncfPtr, long int *ncfnPtr)
+{
+  int nflag;
+  
+  nflag = *nflagPtr;
+  
+  if (nflag == CV_SUCCESS) return(DO_ERROR_TEST);
+
+  /* The nonlinear soln. failed; increment ncfn and restore zn */
+  (*ncfnPtr)++;
+  cvRestore(cv_mem, saved_t);
+  
+  /* Return if lsetup, lsolve, or some rhs failed unrecoverably */
+  if (nflag == CV_LSETUP_FAIL)    return(CV_LSETUP_FAIL);
+  if (nflag == CV_LSOLVE_FAIL)    return(CV_LSOLVE_FAIL);
+  if (nflag == CV_RHSFUNC_FAIL)   return(CV_RHSFUNC_FAIL);
+  if (nflag == CV_QRHSFUNC_FAIL)  return(CV_QRHSFUNC_FAIL);
+  if (nflag == CV_SRHSFUNC_FAIL)  return(CV_SRHSFUNC_FAIL);
+  if (nflag == CV_QSRHSFUNC_FAIL) return(CV_QSRHSFUNC_FAIL);
+
+  /* At this point, nflag = CONV_FAIL, RHSFUNC_RECVR, or SRHSFUNC_RECVR; 
+     increment ncf */
+  
+  (*ncfPtr)++;
+  etamax = ONE;
+
+  /* If we had maxncf failures or |h| = hmin, 
+     return CV_CONV_FAILURE, CV_REPTD_RHSFUNC_ERR, 
+     CV_REPTD_QRHSFUNC_ERR, or CV_REPTD_SRHSFUNC_ERR */
+
+  if ((SUNRabs(h) <= hmin*ONEPSM) || (*ncfPtr == maxncf)) {
+    if (nflag == CONV_FAIL)       return(CV_CONV_FAILURE);
+    if (nflag == RHSFUNC_RECVR)   return(CV_REPTD_RHSFUNC_ERR);    
+    if (nflag == QRHSFUNC_RECVR)  return(CV_REPTD_QRHSFUNC_ERR);    
+    if (nflag == SRHSFUNC_RECVR)  return(CV_REPTD_SRHSFUNC_ERR);    
+    if (nflag == QSRHSFUNC_RECVR) return(CV_REPTD_QSRHSFUNC_ERR);    
+  }
+
+  /* Reduce step size; return to reattempt the step */
+
+  eta = SUNMAX(ETACF, hmin / SUNRabs(h));
+  *nflagPtr = PREV_CONV_FAIL;
+  cvRescale(cv_mem);
+
+  return(PREDICT_AGAIN);
+}
+
+/*
+ * cvRestore
+ *
+ * This routine restores the value of tn to saved_t and undoes the
+ * prediction.  After execution of cvRestore, the Nordsieck array zn has
+ * the same values as before the call to cvPredict.
+ */
+
+static void cvRestore(CVodeMem cv_mem, realtype saved_t)
+{
+  int j, k;
+  int is;
+
+  tn = saved_t;
+  for (k = 1; k <= q; k++)
+    for (j = q; j >= k; j--)
+      N_VLinearSum(ONE, zn[j-1], -ONE, zn[j], zn[j-1]);
+
+  if (quadr) {
+    for (k = 1; k <= q; k++)
+      for (j = q; j >= k; j--)
+        N_VLinearSum(ONE, znQ[j-1], -ONE, znQ[j], znQ[j-1]);
+  }
+
+  if (sensi) {
+    for (is=0; is<Ns; is++) {
+      for (k = 1; k <= q; k++)
+        for (j = q; j >= k; j--)
+          N_VLinearSum(ONE, znS[j-1][is], -ONE, znS[j][is], znS[j-1][is]);
+    }
+  }
+
+  if (quadr_sensi) {
+    for (is=0; is<Ns; is++) {
+      for (k = 1; k <= q; k++)
+        for (j = q; j >= k; j--)
+          N_VLinearSum(ONE, znQS[j-1][is], -ONE, znQS[j][is], znQS[j-1][is]);
+    }
+  }
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Error Test
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvDoErrorTest
+ *
+ * This routine performs the local error test, for the state, quadrature, 
+ * or sensitivity variables. Its last three arguments change depending
+ * on which variables the error test is to be performed on.
+ * 
+ * The weighted local error norm dsm is loaded into *dsmPtr, and 
+ * the test dsm ?<= 1 is made.
+ *
+ * If the test passes, cvDoErrorTest returns CV_SUCCESS. 
+ *
+ * If the test fails, we undo the step just taken (call cvRestore) and 
+ *
+ *   - if maxnef error test failures have occurred or if SUNRabs(h) = hmin,
+ *     we return CV_ERR_FAILURE.
+ *
+ *   - if more than MXNEF1 error test failures have occurred, an order
+ *     reduction is forced. If already at order 1, restart by reloading 
+ *     zn from scratch (also znQ and znS if appropriate).
+ *     If f() fails, we return CV_RHSFUNC_FAIL or CV_UNREC_RHSFUNC_ERR;
+ *     if fQ() fails, we return CV_QRHSFUNC_FAIL or CV_UNREC_QRHSFUNC_ERR;
+ *     if cvSensRhsWrapper() fails, we return CV_SRHSFUNC_FAIL or CV_UNREC_SRHSFUNC_ERR;
+ *     (no recovery is possible at this stage).
+ *
+ *   - otherwise, set *nflagPtr to PREV_ERR_FAIL, and return TRY_AGAIN. 
+ *
+ */
+
+static int cvDoErrorTest(CVodeMem cv_mem, int *nflagPtr, realtype saved_t, 
+                         realtype acor_nrm,
+                         int *nefPtr, long int *netfPtr, realtype *dsmPtr)
+{
+  realtype dsm;
+  int retval, is;
+  N_Vector wrk1, wrk2;
+
+  dsm = acor_nrm * tq[2];
+
+  /* If est. local error norm dsm passes test, return CV_SUCCESS */  
+  *dsmPtr = dsm; 
+  if (dsm <= ONE) return(CV_SUCCESS);
+  
+  /* Test failed; increment counters, set nflag, and restore zn array */
+  (*nefPtr)++;
+  (*netfPtr)++;
+  *nflagPtr = PREV_ERR_FAIL;
+  cvRestore(cv_mem, saved_t);
+
+  /* At maxnef failures or |h| = hmin, return CV_ERR_FAILURE */
+  if ((SUNRabs(h) <= hmin*ONEPSM) || (*nefPtr == maxnef)) return(CV_ERR_FAILURE);
+
+  /* Set etamax = 1 to prevent step size increase at end of this step */
+  etamax = ONE;
+
+  /* Set h ratio eta from dsm, rescale, and return for retry of step */
+  if (*nefPtr <= MXNEF1) {
+    eta = ONE / (SUNRpowerR(BIAS2*dsm,ONE/L) + ADDON);
+    eta = SUNMAX(ETAMIN, SUNMAX(eta, hmin / SUNRabs(h)));
+    if (*nefPtr >= SMALL_NEF) eta = SUNMIN(eta, ETAMXF);
+    cvRescale(cv_mem);
+    return(TRY_AGAIN);
+  }
+  
+  /* After MXNEF1 failures, force an order reduction and retry step */
+  if (q > 1) {
+    eta = SUNMAX(ETAMIN, hmin / SUNRabs(h));
+    cvAdjustOrder(cv_mem,-1);
+    L = q;
+    q--;
+    qwait = L;
+    cvRescale(cv_mem);
+    return(TRY_AGAIN);
+  }
+
+  /* If already at order 1, restart: reload zn, znQ, znS, znQS from scratch */
+  eta = SUNMAX(ETAMIN, hmin / SUNRabs(h));
+  h *= eta;
+  next_h = h;
+  hscale = h;
+  qwait = LONG_WAIT;
+  nscon = 0;
+
+  retval = f(tn, zn[0], tempv, user_data);
+  nfe++;
+  if (retval < 0) return(CV_RHSFUNC_FAIL);
+  if (retval > 0) return(CV_UNREC_RHSFUNC_ERR);
+
+  N_VScale(h, tempv, zn[1]);
+
+  if (quadr) {
+
+    retval = fQ(tn, zn[0], tempvQ, user_data);
+    nfQe++;
+    if (retval < 0) return(CV_QRHSFUNC_FAIL);
+    if (retval > 0) return(CV_UNREC_QRHSFUNC_ERR);
+
+    N_VScale(h, tempvQ, znQ[1]);
+
+  }
+
+  if (sensi) {
+
+    wrk1 = ftemp;
+    wrk2 = ftempS[0];
+
+    retval = cvSensRhsWrapper(cv_mem, tn, zn[0], tempv, znS[0], tempvS, wrk1, wrk2);
+    if (retval < 0) return(CV_SRHSFUNC_FAIL);
+    if (retval > 0) return(CV_UNREC_SRHSFUNC_ERR);
+
+    for (is=0; is<Ns; is++) 
+      N_VScale(h, tempvS[is], znS[1][is]);
+
+  }
+
+  if (quadr_sensi) {
+
+    wrk1 = ftemp;
+    wrk2 = ftempQ;
+
+    retval = fQS(Ns, tn, zn[0], znS[0], tempvQ, tempvQS, fQS_data, wrk1, wrk2);
+    nfQSe++;
+    if (retval < 0) return(CV_QSRHSFUNC_FAIL);
+    if (retval > 0) return(CV_UNREC_QSRHSFUNC_ERR);
+
+    for (is=0; is<Ns; is++) 
+      N_VScale(h, tempvQS[is], znQS[1][is]);
+
+  }
+
+  
+  return(TRY_AGAIN);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions called after a successful step
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvCompleteStep
+ *
+ * This routine performs various update operations when the solution
+ * to the nonlinear system has passed the local error test. 
+ * We increment the step counter nst, record the values hu and qu,
+ * update the tau array, and apply the corrections to the zn array.
+ * The tau[i] are the last q values of h, with tau[1] the most recent.
+ * The counter qwait is decremented, and if qwait == 1 (and q < qmax)
+ * we save acor and tq[5] for a possible order increase.
+ */
+
+static void cvCompleteStep(CVodeMem cv_mem)
+{
+  int i, j;
+  int is;
+  
+  nst++;
+  nscon++;
+  hu = h;
+  qu = q;
+
+  for (i=q; i >= 2; i--)  tau[i] = tau[i-1];
+  if ((q==1) && (nst > 1)) tau[2] = tau[1];
+  tau[1] = h;
+
+  /* Apply correction to column j of zn: l_j * Delta_n */
+  for (j=0; j <= q; j++) 
+    N_VLinearSum(l[j], acor, ONE, zn[j], zn[j]);
+
+  if (quadr) {
+    for (j=0; j <= q; j++) 
+      N_VLinearSum(l[j], acorQ, ONE, znQ[j], znQ[j]);
+  }
+
+  if (sensi) {
+    for (is=0; is<Ns; is++)
+      for (j=0; j <= q; j++) 
+        N_VLinearSum(l[j], acorS[is], ONE, znS[j][is], znS[j][is]);
+  }
+
+  if (quadr_sensi) {
+    for (is=0; is<Ns; is++)
+      for (j=0; j <= q; j++) 
+        N_VLinearSum(l[j], acorQS[is], ONE, znQS[j][is], znQS[j][is]);
+  }
+
+
+  /* If necessary, store Delta_n in zn[qmax] to be used in order increase.
+   * This actually will be Delta_{n-1} in the ELTE at q+1 since it happens at
+   * the next to last step of order q before a possible one at order q+1
+   */
+
+  qwait--;
+  if ((qwait == 1) && (q != qmax)) {
+    
+    N_VScale(ONE, acor, zn[qmax]);
+    
+    if (quadr)
+      N_VScale(ONE, acorQ, znQ[qmax]);
+
+    if (sensi)
+      for (is=0; is<Ns; is++)
+        N_VScale(ONE, acorS[is], znS[qmax][is]);
+    
+    if (quadr_sensi)
+      for (is=0; is<Ns; is++)
+        N_VScale(ONE, acorQS[is], znQS[qmax][is]);
+
+    saved_tq5 = tq[5];
+    indx_acor = qmax;
+  }
+
+}
+
+/*
+ * cvPrepareNextStep
+ *
+ * This routine handles the setting of stepsize and order for the
+ * next step -- hprime and qprime.  Along with hprime, it sets the
+ * ratio eta = hprime/h.  It also updates other state variables 
+ * related to a change of step size or order. 
+ */
+
+static void cvPrepareNextStep(CVodeMem cv_mem, realtype dsm)
+{
+  /* If etamax = 1, defer step size or order changes */
+  if (etamax == ONE) {
+    qwait = SUNMAX(qwait, 2);
+    qprime = q;
+    hprime = h;
+    eta = ONE;
+    return;
+  }
+
+  /* etaq is the ratio of new to old h at the current order */  
+  etaq = ONE /(SUNRpowerR(BIAS2*dsm,ONE/L) + ADDON);
+  
+  /* If no order change, adjust eta and acor in cvSetEta and return */
+  if (qwait != 0) {
+    eta = etaq;
+    qprime = q;
+    cvSetEta(cv_mem);
+    return;
+  }
+  
+  /* If qwait = 0, consider an order change.   etaqm1 and etaqp1 are 
+     the ratios of new to old h at orders q-1 and q+1, respectively.
+     cvChooseEta selects the largest; cvSetEta adjusts eta and acor */
+  qwait = 2;
+  etaqm1 = cvComputeEtaqm1(cv_mem);
+  etaqp1 = cvComputeEtaqp1(cv_mem);  
+  cvChooseEta(cv_mem); 
+  cvSetEta(cv_mem);
+}
+
+/*
+ * cvSetEta
+ *
+ * This routine adjusts the value of eta according to the various
+ * heuristic limits and the optional input hmax.
+ */
+
+static void cvSetEta(CVodeMem cv_mem)
+{
+
+  /* If eta below the threshhold THRESH, reject a change of step size */
+  if (eta < THRESH) {
+    eta = ONE;
+    hprime = h;
+  } else {
+    /* Limit eta by etamax and hmax, then set hprime */
+    eta = SUNMIN(eta, etamax);
+    eta /= SUNMAX(ONE, SUNRabs(h)*hmax_inv*eta);
+    hprime = h * eta;
+    if (qprime < q) nscon = 0;
+  }
+}
+
+/*
+ * cvComputeEtaqm1
+ *
+ * This routine computes and returns the value of etaqm1 for a
+ * possible decrease in order by 1.
+ */
+
+static realtype cvComputeEtaqm1(CVodeMem cv_mem)
+{
+  realtype ddn;
+  
+  etaqm1 = ZERO;
+
+  if (q > 1) {
+
+    ddn = N_VWrmsNorm(zn[q], ewt);
+
+    if ( quadr && errconQ )
+      ddn = cvQuadUpdateNorm(cv_mem, ddn, znQ[q], ewtQ);
+
+    if ( sensi && errconS )
+      ddn = cvSensUpdateNorm(cv_mem, ddn, znS[q], ewtS);
+
+    if ( quadr_sensi && errconQS )
+      ddn = cvQuadSensUpdateNorm(cv_mem, ddn, znQS[q], ewtQS);
+
+    ddn = ddn * tq[1];
+    etaqm1 = ONE/(SUNRpowerR(BIAS1*ddn, ONE/q) + ADDON);
+  }
+
+  return(etaqm1);
+}
+
+/*
+ * cvComputeEtaqp1
+ *
+ * This routine computes and returns the value of etaqp1 for a
+ * possible increase in order by 1.
+ */
+
+static realtype cvComputeEtaqp1(CVodeMem cv_mem)
+{
+  realtype dup, cquot;
+  int is;
+  
+  etaqp1 = ZERO;
+
+  if (q != qmax) {
+
+    if (saved_tq5 == ZERO) return(etaqp1);
+
+    cquot = (tq[5] / saved_tq5) * SUNRpowerI(h/tau[2], L);
+    N_VLinearSum(-cquot, zn[qmax], ONE, acor, tempv);
+    dup = N_VWrmsNorm(tempv, ewt);
+
+    if ( quadr && errconQ ) {
+      N_VLinearSum(-cquot, znQ[qmax], ONE, acorQ, tempvQ);
+      dup = cvQuadUpdateNorm(cv_mem, dup, tempvQ, ewtQ);
+    }
+
+    if ( sensi && errconS ) {
+      for (is=0; is<Ns; is++) 
+        N_VLinearSum(-cquot, znS[qmax][is], ONE, acorS[is], tempvS[is]);
+      dup = cvSensUpdateNorm(cv_mem, dup, tempvS, ewtS);
+    }
+
+    if ( quadr_sensi && errconQS ) {
+      for (is=0; is<Ns; is++) 
+        N_VLinearSum(-cquot, znQS[qmax][is], ONE, acorQS[is], tempvQS[is]);
+      dup = cvSensUpdateNorm(cv_mem, dup, tempvQS, ewtQS);
+    }
+
+    dup = dup * tq[3];
+    etaqp1 = ONE / (SUNRpowerR(BIAS3*dup, ONE/(L+1)) + ADDON);
+  }
+
+  return(etaqp1);
+}
+
+/*
+ * cvChooseEta
+ * Given etaqm1, etaq, etaqp1 (the values of eta for qprime =
+ * q - 1, q, or q + 1, respectively), this routine chooses the 
+ * maximum eta value, sets eta to that value, and sets qprime to the
+ * corresponding value of q.  If there is a tie, the preference
+ * order is to (1) keep the same order, then (2) decrease the order,
+ * and finally (3) increase the order.  If the maximum eta value
+ * is below the threshhold THRESH, the order is kept unchanged and
+ * eta is set to 1.
+ */
+
+static void cvChooseEta(CVodeMem cv_mem)
+{
+  realtype etam;
+  int is;
+  
+  etam = SUNMAX(etaqm1, SUNMAX(etaq, etaqp1));
+  
+  if (etam < THRESH) {
+    eta = ONE;
+    qprime = q;
+    return;
+  }
+
+  if (etam == etaq) {
+
+    eta = etaq;
+    qprime = q;
+
+  } else if (etam == etaqm1) {
+
+    eta = etaqm1;
+    qprime = q - 1;
+
+  } else {
+
+    eta = etaqp1;
+    qprime = q + 1;
+
+    if (lmm == CV_BDF) {
+
+      /* 
+       * Store Delta_n in zn[qmax] to be used in order increase 
+       *
+       * This happens at the last step of order q before an increase
+       * to order q+1, so it represents Delta_n in the ELTE at q+1
+       */
+      
+      N_VScale(ONE, acor, zn[qmax]);
+      
+      if (quadr && errconQ)
+        N_VScale(ONE, acorQ, znQ[qmax]);
+      
+      if (sensi && errconS)
+        for (is=0; is<Ns; is++)
+          N_VScale(ONE, acorS[is], znS[qmax][is]);
+
+      if (quadr_sensi && errconQS)
+        for (is=0; is<Ns; is++)
+          N_VScale(ONE, acorQS[is], znQS[qmax][is]);
+
+    }
+  }
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Function to handle failures
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvHandleFailure
+ *
+ * This routine prints error messages for all cases of failure by
+ * cvHin or cvStep. 
+ * It returns to CVode the value that CVode is to return to the user.
+ */
+
+static int cvHandleFailure(CVodeMem cv_mem, int flag)
+{
+
+  /* Set vector of  absolute weighted local errors */
+  /*
+  N_VProd(acor, ewt, tempv);
+  N_VAbs(tempv, tempv);
+  */
+
+  /* Depending on flag, print error message and return error flag */
+  switch (flag) {
+  case CV_ERR_FAILURE:
+    cvProcessError(cv_mem, CV_ERR_FAILURE, "CVODES", "CVode", MSGCV_ERR_FAILS, tn, h);
+    break;
+  case CV_CONV_FAILURE:
+    cvProcessError(cv_mem, CV_CONV_FAILURE, "CVODES", "CVode", MSGCV_CONV_FAILS, tn, h);
+    break;
+  case CV_LSETUP_FAIL:
+    cvProcessError(cv_mem, CV_LSETUP_FAIL, "CVODES", "CVode", MSGCV_SETUP_FAILED, tn);
+    break;
+  case CV_LSOLVE_FAIL:
+    cvProcessError(cv_mem, CV_LSOLVE_FAIL, "CVODES", "CVode", MSGCV_SOLVE_FAILED, tn);
+    break;
+  case CV_RHSFUNC_FAIL:
+    cvProcessError(cv_mem, CV_RHSFUNC_FAIL, "CVODES", "CVode", MSGCV_RHSFUNC_FAILED, tn);
+    break;
+  case CV_UNREC_RHSFUNC_ERR:
+    cvProcessError(cv_mem, CV_UNREC_RHSFUNC_ERR, "CVODES", "CVode", MSGCV_RHSFUNC_UNREC, tn);
+    break;
+  case CV_REPTD_RHSFUNC_ERR:
+    cvProcessError(cv_mem, CV_REPTD_RHSFUNC_ERR, "CVODES", "CVode", MSGCV_RHSFUNC_REPTD, tn);
+    break;
+  case CV_RTFUNC_FAIL:
+    cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODES", "CVode", MSGCV_RTFUNC_FAILED, tn);
+    break;
+  case CV_QRHSFUNC_FAIL:
+    cvProcessError(cv_mem, CV_QRHSFUNC_FAIL, "CVODES", "CVode", MSGCV_QRHSFUNC_FAILED, tn);
+    break;
+  case CV_UNREC_QRHSFUNC_ERR:
+    cvProcessError(cv_mem, CV_UNREC_QRHSFUNC_ERR, "CVODES", "CVode", MSGCV_QRHSFUNC_UNREC, tn);
+    break;
+  case CV_REPTD_QRHSFUNC_ERR:
+    cvProcessError(cv_mem, CV_REPTD_QRHSFUNC_ERR, "CVODES", "CVode", MSGCV_QRHSFUNC_REPTD, tn);
+    break;
+  case CV_SRHSFUNC_FAIL:
+    cvProcessError(cv_mem, CV_SRHSFUNC_FAIL, "CVODES", "CVode", MSGCV_SRHSFUNC_FAILED, tn);
+    break;
+  case CV_UNREC_SRHSFUNC_ERR:
+    cvProcessError(cv_mem, CV_UNREC_SRHSFUNC_ERR, "CVODES", "CVode", MSGCV_SRHSFUNC_UNREC, tn);
+    break;
+  case CV_REPTD_SRHSFUNC_ERR:
+    cvProcessError(cv_mem, CV_REPTD_SRHSFUNC_ERR, "CVODES", "CVode", MSGCV_SRHSFUNC_REPTD, tn);
+    break;
+  case CV_QSRHSFUNC_FAIL:
+    cvProcessError(cv_mem, CV_QSRHSFUNC_FAIL, "CVODES", "CVode", MSGCV_QSRHSFUNC_FAILED, tn);
+    break;
+  case CV_UNREC_QSRHSFUNC_ERR:
+    cvProcessError(cv_mem, CV_UNREC_QSRHSFUNC_ERR, "CVODES", "CVode", MSGCV_QSRHSFUNC_UNREC, tn);
+    break;
+  case CV_REPTD_QSRHSFUNC_ERR:
+    cvProcessError(cv_mem, CV_REPTD_QSRHSFUNC_ERR, "CVODES", "CVode", MSGCV_QSRHSFUNC_REPTD, tn);
+    break;
+  case CV_TOO_CLOSE:
+    cvProcessError(cv_mem, CV_TOO_CLOSE, "CVODES", "CVode", MSGCV_TOO_CLOSE);
+    break;
+  default:
+    return(CV_SUCCESS);
+  }
+
+  return(flag);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions for BDF Stability Limit Detection   
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvBDFStab
+ *
+ * This routine handles the BDF Stability Limit Detection Algorithm
+ * STALD.  It is called if lmm = CV_BDF and the SLDET option is on.
+ * If the order is 3 or more, the required norm data is saved.
+ * If a decision to reduce order has not already been made, and
+ * enough data has been saved, cvSLdet is called.  If it signals
+ * a stability limit violation, the order is reduced, and the step
+ * size is reset accordingly.
+ */
+
+static void cvBDFStab(CVodeMem cv_mem)
+{
+  int i,k, ldflag, factorial;
+  realtype sq, sqm1, sqm2;
+      
+  /* If order is 3 or greater, then save scaled derivative data,
+     push old data down in i, then add current values to top.    */
+
+  if (q >= 3) {
+    for (k = 1; k <= 3; k++)
+      for (i = 5; i >= 2; i--)
+        ssdat[i][k] = ssdat[i-1][k];
+    factorial = 1;
+    for (i = 1; i <= q-1; i++) factorial *= i;
+    sq = factorial*q*(q+1)*acnrm/SUNMAX(tq[5],TINY);
+    sqm1 = factorial*q*N_VWrmsNorm(zn[q], ewt);
+    sqm2 = factorial*N_VWrmsNorm(zn[q-1], ewt);
+    ssdat[1][1] = sqm2*sqm2;
+    ssdat[1][2] = sqm1*sqm1;
+    ssdat[1][3] = sq*sq;
+  }  
+
+  if (qprime >= q) {
+
+    /* If order is 3 or greater, and enough ssdat has been saved,
+       nscon >= q+5, then call stability limit detection routine.  */
+
+    if ( (q >= 3) && (nscon >= q+5) ) {
+      ldflag = cvSLdet(cv_mem);
+      if (ldflag > 3) {
+        /* A stability limit violation is indicated by
+           a return flag of 4, 5, or 6.
+           Reduce new order.                     */
+        qprime = q-1;
+        eta = etaqm1; 
+        eta = SUNMIN(eta,etamax);
+        eta = eta/SUNMAX(ONE,SUNRabs(h)*hmax_inv*eta);
+        hprime = h*eta;
+        nor = nor + 1;
+      }
+    }
+  }
+  else {
+    /* Otherwise, let order increase happen, and 
+       reset stability limit counter, nscon.     */
+    nscon = 0;
+  }
+}
+
+/*
+ * cvSLdet
+ *
+ * This routine detects stability limitation using stored scaled 
+ * derivatives data. cvSLdet returns the magnitude of the
+ * dominate characteristic root, rr. The presents of a stability
+ * limit is indicated by rr > "something a little less then 1.0",  
+ * and a positive kflag. This routine should only be called if
+ * order is greater than or equal to 3, and data has been collected
+ * for 5 time steps. 
+ * 
+ * Returned values:
+ *    kflag = 1 -> Found stable characteristic root, normal matrix case
+ *    kflag = 2 -> Found stable characteristic root, quartic solution
+ *    kflag = 3 -> Found stable characteristic root, quartic solution,
+ *                 with Newton correction
+ *    kflag = 4 -> Found stability violation, normal matrix case
+ *    kflag = 5 -> Found stability violation, quartic solution
+ *    kflag = 6 -> Found stability violation, quartic solution,
+ *                 with Newton correction
+ *
+ *    kflag < 0 -> No stability limitation, 
+ *                 or could not compute limitation.
+ *
+ *    kflag = -1 -> Min/max ratio of ssdat too small.
+ *    kflag = -2 -> For normal matrix case, vmax > vrrt2*vrrt2
+ *    kflag = -3 -> For normal matrix case, The three ratios
+ *                  are inconsistent.
+ *    kflag = -4 -> Small coefficient prevents elimination of quartics.  
+ *    kflag = -5 -> R value from quartics not consistent.
+ *    kflag = -6 -> No corrected root passes test on qk values
+ *    kflag = -7 -> Trouble solving for sigsq.
+ *    kflag = -8 -> Trouble solving for B, or R via B.
+ *    kflag = -9 -> R via sigsq[k] disagrees with R from data.
+ */
+
+static int cvSLdet(CVodeMem cv_mem)
+{
+  int i, k, j, it, kmin = 0, kflag = 0;
+  realtype rat[5][4], rav[4], qkr[4], sigsq[4], smax[4], ssmax[4];
+  realtype drr[4], rrc[4],sqmx[4], qjk[4][4], vrat[5], qc[6][4], qco[6][4];
+  realtype rr, rrcut, vrrtol, vrrt2, sqtol, rrtol;
+  realtype smink, smaxk, sumrat, sumrsq, vmin, vmax, drrmax, adrr;
+  realtype tem, sqmax, saqk, qp, s, sqmaxk, saqj, sqmin;
+  realtype rsa, rsb, rsc, rsd, rd1a, rd1b, rd1c;
+  realtype rd2a, rd2b, rd3a, cest1, corr1; 
+  realtype ratp, ratm, qfac1, qfac2, bb, rrb;
+
+  /* The following are cutoffs and tolerances used by this routine */
+
+  rrcut  = RCONST(0.98);
+  vrrtol = RCONST(1.0e-4);
+  vrrt2  = RCONST(5.0e-4);
+  sqtol  = RCONST(1.0e-3);
+  rrtol  = RCONST(1.0e-2);
+
+  rr = ZERO;
+
+  /*  Index k corresponds to the degree of the interpolating polynomial. */
+  /*      k = 1 -> q-1          */
+  /*      k = 2 -> q            */
+  /*      k = 3 -> q+1          */
+
+  /*  Index i is a backward-in-time index, i = 1 -> current time, */
+  /*      i = 2 -> previous step, etc    */
+
+  /* get maxima, minima, and variances, and form quartic coefficients  */
+
+  for (k=1; k<=3; k++) {
+    smink = ssdat[1][k];
+    smaxk = ZERO;
+    
+    for (i=1; i<=5; i++) {
+      smink = SUNMIN(smink,ssdat[i][k]);
+      smaxk = SUNMAX(smaxk,ssdat[i][k]);
+    }
+    
+    if (smink < TINY*smaxk) {
+      kflag = -1;  
+      return(kflag);
+    }
+    smax[k] = smaxk;
+    ssmax[k] = smaxk*smaxk;
+
+    sumrat = ZERO;
+    sumrsq = ZERO;
+    for (i=1; i<=4; i++) {
+      rat[i][k] = ssdat[i][k]/ssdat[i+1][k];
+      sumrat = sumrat + rat[i][k];
+      sumrsq = sumrsq + rat[i][k]*rat[i][k];
+    } 
+    rav[k] = FOURTH*sumrat;
+    vrat[k] = SUNRabs(FOURTH*sumrsq - rav[k]*rav[k]);
+
+    qc[5][k] = ssdat[1][k]*ssdat[3][k] - ssdat[2][k]*ssdat[2][k];
+    qc[4][k] = ssdat[2][k]*ssdat[3][k] - ssdat[1][k]*ssdat[4][k];
+    qc[3][k] = ZERO;
+    qc[2][k] = ssdat[2][k]*ssdat[5][k] - ssdat[3][k]*ssdat[4][k];
+    qc[1][k] = ssdat[4][k]*ssdat[4][k] - ssdat[3][k]*ssdat[5][k];
+
+    for (i=1; i<=5; i++) {
+      qco[i][k] = qc[i][k];
+    }
+  }                            /* End of k loop */
+  
+  /* Isolate normal or nearly-normal matrix case. Three quartic will
+     have common or nearly-common roots in this case. 
+     Return a kflag = 1 if this procedure works. If three root 
+     differ more than vrrt2, return error kflag = -3.    */
+  
+  vmin = SUNMIN(vrat[1],SUNMIN(vrat[2],vrat[3]));
+  vmax = SUNMAX(vrat[1],SUNMAX(vrat[2],vrat[3]));
+  
+  if (vmin < vrrtol*vrrtol) {
+
+    if (vmax > vrrt2*vrrt2) {
+      kflag = -2;  
+      return(kflag);
+    } else {
+      rr = (rav[1] + rav[2] + rav[3])/THREE;
+      drrmax = ZERO;
+      for (k = 1;k<=3;k++) {
+        adrr = SUNRabs(rav[k] - rr);
+        drrmax = SUNMAX(drrmax, adrr);
+      }
+      if (drrmax > vrrt2) kflag = -3;    
+      kflag = 1;
+
+      /*  can compute charactistic root, drop to next section   */
+    }
+
+  } else {
+
+    /* use the quartics to get rr. */
+
+    if (SUNRabs(qco[1][1]) < TINY*ssmax[1]) {
+      kflag = -4;    
+      return(kflag);
+    }
+
+    tem = qco[1][2]/qco[1][1];
+    for (i=2; i<=5; i++) {
+      qco[i][2] = qco[i][2] - tem*qco[i][1];
+    }
+
+    qco[1][2] = ZERO;
+    tem = qco[1][3]/qco[1][1];
+    for (i=2; i<=5; i++) {
+      qco[i][3] = qco[i][3] - tem*qco[i][1];
+    }
+    qco[1][3] = ZERO;
+
+    if (SUNRabs(qco[2][2]) < TINY*ssmax[2]) {
+      kflag = -4;    
+      return(kflag);
+    }
+
+    tem = qco[2][3]/qco[2][2];
+    for (i=3; i<=5; i++) {
+      qco[i][3] = qco[i][3] - tem*qco[i][2];
+    }
+
+    if (SUNRabs(qco[4][3]) < TINY*ssmax[3]) {
+      kflag = -4;    
+      return(kflag);
+    }
+
+    rr = -qco[5][3]/qco[4][3];
+
+    if (rr < TINY || rr > HUNDRED) {
+      kflag = -5;   
+      return(kflag);
+    }
+
+    for (k=1; k<=3; k++)
+      qkr[k] = qc[5][k] + rr*(qc[4][k] + rr*rr*(qc[2][k] + rr*qc[1][k]));
+
+    sqmax = ZERO;
+    for (k=1; k<=3; k++) {
+      saqk = SUNRabs(qkr[k])/ssmax[k];
+      if (saqk > sqmax) sqmax = saqk;
+    } 
+
+    if (sqmax < sqtol) {
+      kflag = 2;
+
+      /*  can compute charactistic root, drop to "given rr,etc"   */
+
+    } else {
+
+      /* do Newton corrections to improve rr.  */
+
+      for (it=1; it<=3; it++) {
+        for (k=1; k<=3; k++) {
+          qp = qc[4][k] + rr*rr*(THREE*qc[2][k] + rr*FOUR*qc[1][k]);
+          drr[k] = ZERO;
+          if (SUNRabs(qp) > TINY*ssmax[k]) drr[k] = -qkr[k]/qp;
+          rrc[k] = rr + drr[k];
+        } 
+
+        for (k=1; k<=3; k++) {
+          s = rrc[k];
+          sqmaxk = ZERO;
+          for (j=1; j<=3; j++) {
+            qjk[j][k] = qc[5][j] + s*(qc[4][j] + s*s*(qc[2][j] + s*qc[1][j]));
+            saqj = SUNRabs(qjk[j][k])/ssmax[j];
+            if (saqj > sqmaxk) sqmaxk = saqj;
+          } 
+          sqmx[k] = sqmaxk;
+        }
+
+        sqmin = sqmx[1] + ONE;
+        for (k=1; k<=3; k++) {
+          if (sqmx[k] < sqmin) {
+            kmin = k;
+            sqmin = sqmx[k];
+          }
+        } 
+        rr = rrc[kmin];
+
+        if (sqmin < sqtol) {
+          kflag = 3;
+          /*  can compute charactistic root   */
+          /*  break out of Newton correction loop and drop to "given rr,etc" */ 
+          break;
+        } else {
+          for (j=1; j<=3; j++) {
+            qkr[j] = qjk[j][kmin];
+          }
+        }     
+      } /*  end of Newton correction loop  */ 
+
+      if (sqmin > sqtol) {
+        kflag = -6;
+        return(kflag);
+      }
+    } /*  end of if (sqmax < sqtol) else   */
+  } /*  end of if (vmin < vrrtol*vrrtol) else, quartics to get rr. */
+
+  /* given rr, find sigsq[k] and verify rr.  */
+  /* All positive kflag drop to this section  */
+  
+  for (k=1; k<=3; k++) {
+    rsa = ssdat[1][k];
+    rsb = ssdat[2][k]*rr;
+    rsc = ssdat[3][k]*rr*rr;
+    rsd = ssdat[4][k]*rr*rr*rr;
+    rd1a = rsa - rsb;
+    rd1b = rsb - rsc;
+    rd1c = rsc - rsd;
+    rd2a = rd1a - rd1b;
+    rd2b = rd1b - rd1c;
+    rd3a = rd2a - rd2b;
+    
+    if (SUNRabs(rd1b) < TINY*smax[k]) {
+      kflag = -7;
+      return(kflag);
+    }
+    
+    cest1 = -rd3a/rd1b;
+    if (cest1 < TINY || cest1 > FOUR) {
+      kflag = -7;
+      return(kflag);
+    }
+    corr1 = (rd2b/cest1)/(rr*rr);
+    sigsq[k] = ssdat[3][k] + corr1;
+  }
+  
+  if (sigsq[2] < TINY) {
+    kflag = -8;
+    return(kflag);
+  }
+  
+  ratp = sigsq[3]/sigsq[2];
+  ratm = sigsq[1]/sigsq[2];
+  qfac1 = FOURTH*(q*q - ONE);
+  qfac2 = TWO/(q - ONE);
+  bb = ratp*ratm - ONE - qfac1*ratp;
+  tem = ONE - qfac2*bb;
+  
+  if (SUNRabs(tem) < TINY) {
+    kflag = -8;
+    return(kflag);
+  }
+  
+  rrb = ONE/tem;
+  
+  if (SUNRabs(rrb - rr) > rrtol) {
+    kflag = -9;
+    return(kflag);
+  }
+  
+  /* Check to see if rr is above cutoff rrcut  */
+  if (rr > rrcut) {
+    if (kflag == 1) kflag = 4;
+    if (kflag == 2) kflag = 5;
+    if (kflag == 3) kflag = 6;
+  }
+  
+  /* All positive kflag returned at this point  */
+  
+  return(kflag);
+  
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions for rootfinding
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * cvRcheck1
+ *
+ * This routine completes the initialization of rootfinding memory
+ * information, and checks whether g has a zero both at and very near
+ * the initial point of the IVP.
+ *
+ * This routine returns an int equal to:
+ *  CV_RTFUNC_FAIL < 0 if the g function failed, or
+ *  CV_SUCCESS     = 0 otherwise.
+ */
+
+static int cvRcheck1(CVodeMem cv_mem)
+{
+  int i, retval;
+  realtype smallh, hratio, tplus;
+  booleantype zroot;
+
+  for (i = 0; i < nrtfn; i++) iroots[i] = 0;
+  tlo = tn;
+  ttol = (SUNRabs(tn) + SUNRabs(h))*uround*HUNDRED;
+
+  /* Evaluate g at initial t and check for zero values. */
+  retval = gfun(tlo, zn[0], glo, user_data);
+  nge = 1;
+  if (retval != 0) return(CV_RTFUNC_FAIL);
+
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) {
+    if (SUNRabs(glo[i]) == ZERO) {
+      zroot = TRUE;
+      gactive[i] = FALSE;
+    }
+  }
+  if (!zroot) return(CV_SUCCESS);
+
+  /* Some g_i is zero at t0; look at g at t0+(small increment). */
+  hratio = SUNMAX(ttol/SUNRabs(h), PT1);
+  smallh = hratio*h;
+  tplus = tlo + smallh;
+  N_VLinearSum(ONE, zn[0], hratio, zn[1], y);
+  retval = gfun(tplus, y, ghi, user_data);
+  nge++;
+  if (retval != 0) return(CV_RTFUNC_FAIL);
+
+  /* We check now only the components of g which were exactly 0.0 at t0
+   * to see if we can 'activate' them. */
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i] && SUNRabs(ghi[i]) != ZERO) {
+      gactive[i] = TRUE;
+      glo[i] = ghi[i];
+    }
+  }
+  return(CV_SUCCESS);
+}
+
+/*
+ * cvRcheck2
+ *
+ * This routine checks for exact zeros of g at the last root found,
+ * if the last return was a root.  It then checks for a close pair of
+ * zeros (an error condition), and for a new root at a nearby point.
+ * The array glo = g(tlo) at the left endpoint of the search interval
+ * is adjusted if necessary to assure that all g_i are nonzero
+ * there, before returning to do a root search in the interval.
+ *
+ * On entry, tlo = tretlast is the last value of tret returned by
+ * CVode.  This may be the previous tn, the previous tout value,
+ * or the last root location.
+ *
+ * This routine returns an int equal to:
+ *     CV_RTFUNC_FAIL  < 0 if the g function failed, or
+ *     CLOSERT         = 3 if a close pair of zeros was found, or
+ *     RTFOUND         = 1 if a new zero of g was found near tlo, or
+ *     CV_SUCCESS      = 0 otherwise.
+ */
+
+static int cvRcheck2(CVodeMem cv_mem)
+{
+  int i, retval;
+  realtype smallh, hratio, tplus;
+  booleantype zroot;
+
+  if (irfnd == 0) return(CV_SUCCESS);
+
+  (void) CVodeGetDky(cv_mem, tlo, 0, y);
+  retval = gfun(tlo, y, glo, user_data);
+  nge++;
+  if (retval != 0) return(CV_RTFUNC_FAIL);
+
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) iroots[i] = 0;
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i]) continue;
+    if (SUNRabs(glo[i]) == ZERO) {
+      zroot = TRUE;
+      iroots[i] = 1;
+    }
+  }
+  if (!zroot) return(CV_SUCCESS);
+
+  /* One or more g_i has a zero at tlo.  Check g at tlo+smallh. */
+  ttol = (SUNRabs(tn) + SUNRabs(h))*uround*HUNDRED;
+  smallh = (h > ZERO) ? ttol : -ttol;
+  tplus = tlo + smallh;
+  if ( (tplus - tn)*h >= ZERO) {
+    hratio = smallh/h;
+    N_VLinearSum(ONE, y, hratio, zn[1], y);
+  } else {
+    (void) CVodeGetDky(cv_mem, tplus, 0, y);
+  }
+  retval = gfun(tplus, y, ghi, user_data);
+  nge++;
+  if (retval != 0) return(CV_RTFUNC_FAIL);
+
+  /* Check for close roots (error return), for a new zero at tlo+smallh,
+  and for a g_i that changed from zero to nonzero. */
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i]) continue;
+    if (SUNRabs(ghi[i]) == ZERO) {
+      if (iroots[i] == 1) return(CLOSERT);
+      zroot = TRUE;
+      iroots[i] = 1;
+    } else {
+      if (iroots[i] == 1) glo[i] = ghi[i];
+    }
+  }
+  if (zroot) return(RTFOUND);
+  return(CV_SUCCESS);
+}
+
+/*
+ * cvRcheck3
+ *
+ * This routine interfaces to cvRootfind to look for a root of g
+ * between tlo and either tn or tout, whichever comes first.
+ * Only roots beyond tlo in the direction of integration are sought.
+ *
+ * This routine returns an int equal to:
+ *     CV_RTFUNC_FAIL  < 0 if the g function failed, or
+ *     RTFOUND         = 1 if a root of g was found, or
+ *     CV_SUCCESS      = 0 otherwise.
+ */
+
+static int cvRcheck3(CVodeMem cv_mem)
+{
+  int i, ier, retval;
+
+  /* Set thi = tn or tout, whichever comes first; set y = y(thi). */
+  if (taskc == CV_ONE_STEP) {
+    thi = tn;
+    N_VScale(ONE, zn[0], y);
+  }
+  if (taskc == CV_NORMAL) {
+    if ( (toutc - tn)*h >= ZERO) {
+      thi = tn; 
+      N_VScale(ONE, zn[0], y);
+    } else {
+      thi = toutc;
+      (void) CVodeGetDky(cv_mem, thi, 0, y);
+    }
+  }
+
+  /* Set ghi = g(thi) and call cvRootfind to search (tlo,thi) for roots. */
+  retval = gfun(thi, y, ghi, user_data);
+  nge++;
+  if (retval != 0) return(CV_RTFUNC_FAIL);
+
+  ttol = (SUNRabs(tn) + SUNRabs(h))*uround*HUNDRED;
+  ier = cvRootfind(cv_mem);
+  if (ier == CV_RTFUNC_FAIL) return(CV_RTFUNC_FAIL);
+  for(i=0; i<nrtfn; i++) {
+    if(!gactive[i] && grout[i] != ZERO) gactive[i] = TRUE;
+  }
+  tlo = trout;
+  for (i = 0; i < nrtfn; i++) glo[i] = grout[i];
+
+  /* If no root found, return CV_SUCCESS. */  
+  if (ier == CV_SUCCESS) return(CV_SUCCESS);
+
+  /* If a root was found, interpolate to get y(trout) and return.  */
+  (void) CVodeGetDky(cv_mem, trout, 0, y);
+  return(RTFOUND);
+}
+
+/*
+ * cvRootfind
+ *
+ * This routine solves for a root of g(t) between tlo and thi, if
+ * one exists.  Only roots of odd multiplicity (i.e. with a change
+ * of sign in one of the g_i), or exact zeros, are found.
+ * Here the sign of tlo - thi is arbitrary, but if multiple roots
+ * are found, the one closest to tlo is returned.
+ *
+ * The method used is the Illinois algorithm, a modified secant method.
+ * Reference: Kathie L. Hiebert and Lawrence F. Shampine, Implicitly
+ * Defined Output Points for Solutions of ODEs, Sandia National
+ * Laboratory Report SAND80-0180, February 1980.
+ *
+ * This routine uses the following parameters for communication:
+ *
+ * nrtfn    = number of functions g_i, or number of components of
+ *            the vector-valued function g(t).  Input only.
+ *
+ * gfun     = user-defined function for g(t).  Its form is
+ *            (void) gfun(t, y, gt, user_data)
+ *
+ * rootdir  = in array specifying the direction of zero-crossings.
+ *            If rootdir[i] > 0, search for roots of g_i only if
+ *            g_i is increasing; if rootdir[i] < 0, search for
+ *            roots of g_i only if g_i is decreasing; otherwise
+ *            always search for roots of g_i.
+ *
+ * gactive  = array specifying whether a component of g should
+ *            or should not be monitored. gactive[i] is initially
+ *            set to TRUE for all i=0,...,nrtfn-1, but it may be
+ *            reset to FALSE if at the first step g[i] is 0.0
+ *            both at the I.C. and at a small perturbation of them.
+ *            gactive[i] is then set back on TRUE only after the 
+ *            corresponding g function moves away from 0.0.
+ *
+ * nge      = cumulative counter for gfun calls.
+ *
+ * ttol     = a convergence tolerance for trout.  Input only.
+ *            When a root at trout is found, it is located only to
+ *            within a tolerance of ttol.  Typically, ttol should
+ *            be set to a value on the order of
+ *               100 * UROUND * max (SUNRabs(tlo), SUNRabs(thi))
+ *            where UROUND is the unit roundoff of the machine.
+ *
+ * tlo, thi = endpoints of the interval in which roots are sought.
+ *            On input, these must be distinct, but tlo - thi may
+ *            be of either sign.  The direction of integration is
+ *            assumed to be from tlo to thi.  On return, tlo and thi
+ *            are the endpoints of the final relevant interval.
+ *
+ * glo, ghi = arrays of length nrtfn containing the vectors g(tlo)
+ *            and g(thi) respectively.  Input and output.  On input,
+ *            none of the glo[i] should be zero.
+ *
+ * trout    = root location, if a root was found, or thi if not.
+ *            Output only.  If a root was found other than an exact
+ *            zero of g, trout is the endpoint thi of the final
+ *            interval bracketing the root, with size at most ttol.
+ *
+ * grout    = array of length nrtfn containing g(trout) on return.
+ *
+ * iroots   = int array of length nrtfn with root information.
+ *            Output only.  If a root was found, iroots indicates
+ *            which components g_i have a root at trout.  For
+ *            i = 0, ..., nrtfn-1, iroots[i] = 1 if g_i has a root
+ *            and g_i is increasing, iroots[i] = -1 if g_i has a
+ *            root and g_i is decreasing, and iroots[i] = 0 if g_i
+ *            has no roots or g_i varies in the direction opposite
+ *            to that indicated by rootdir[i].
+ *
+ * This routine returns an int equal to:
+ *      CV_RTFUNC_FAIL  < 0 if the g function failed, or
+ *      RTFOUND         = 1 if a root of g was found, or
+ *      CV_SUCCESS      = 0 otherwise.
+ */
+
+static int cvRootfind(CVodeMem cv_mem)
+{
+  realtype alph, tmid, gfrac, maxfrac, fracint, fracsub;
+  int i, retval, imax, side, sideprev;
+  booleantype zroot, sgnchg;
+
+  imax = 0;
+
+  /* First check for change in sign in ghi or for a zero in ghi. */
+  maxfrac = ZERO;
+  zroot = FALSE;
+  sgnchg = FALSE;
+  for (i = 0;  i < nrtfn; i++) {
+    if(!gactive[i]) continue;
+    if (SUNRabs(ghi[i]) == ZERO) {
+      if(rootdir[i]*glo[i] <= ZERO) {
+        zroot = TRUE;
+      }
+    } else {
+      if ( (glo[i]*ghi[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) {
+        gfrac = SUNRabs(ghi[i]/(ghi[i] - glo[i]));
+        if (gfrac > maxfrac) {
+          sgnchg = TRUE;
+          maxfrac = gfrac;
+          imax = i;
+        }
+      }
+    }
+  }
+
+  /* If no sign change was found, reset trout and grout.  Then return
+     CV_SUCCESS if no zero was found, or set iroots and return RTFOUND.  */ 
+  if (!sgnchg) {
+    trout = thi;
+    for (i = 0; i < nrtfn; i++) grout[i] = ghi[i];
+    if (!zroot) return(CV_SUCCESS);
+    for (i = 0; i < nrtfn; i++) {
+      iroots[i] = 0;
+      if(!gactive[i]) continue;
+      if ( (SUNRabs(ghi[i]) == ZERO) && (rootdir[i]*glo[i] <= ZERO) )
+        iroots[i] = glo[i] > 0 ? -1:1;
+    }
+    return(RTFOUND);
+  }
+
+  /* Initialize alph to avoid compiler warning */
+  alph = ONE;
+
+  /* A sign change was found.  Loop to locate nearest root. */
+
+  side = 0;  sideprev = -1;
+  loop {                                    /* Looping point */
+
+    /* If interval size is already less than tolerance ttol, break. */
+      if (SUNRabs(thi - tlo) <= ttol) break;
+
+    /* Set weight alph.
+       On the first two passes, set alph = 1.  Thereafter, reset alph
+       according to the side (low vs high) of the subinterval in which
+       the sign change was found in the previous two passes.
+       If the sides were opposite, set alph = 1.
+       If the sides were the same, then double alph (if high side),
+       or halve alph (if low side).
+       The next guess tmid is the secant method value if alph = 1, but
+       is closer to tlo if alph < 1, and closer to thi if alph > 1.    */
+
+    if (sideprev == side) {
+      alph = (side == 2) ? alph*TWO : alph*HALF;
+    } else {
+      alph = ONE;
+    }
+
+    /* Set next root approximation tmid and get g(tmid).
+       If tmid is too close to tlo or thi, adjust it inward,
+       by a fractional distance that is between 0.1 and 0.5.  */
+    tmid = thi - (thi - tlo)*ghi[imax]/(ghi[imax] - alph*glo[imax]);
+    if (SUNRabs(tmid - tlo) < HALF*ttol) {
+      fracint = SUNRabs(thi - tlo)/ttol;
+      fracsub = (fracint > FIVE) ? PT1 : HALF/fracint;
+      tmid = tlo + fracsub*(thi - tlo);
+    }
+    if (SUNRabs(thi - tmid) < HALF*ttol) {
+      fracint = SUNRabs(thi - tlo)/ttol;
+      fracsub = (fracint > FIVE) ? PT1 : HALF/fracint;
+      tmid = thi - fracsub*(thi - tlo);
+    }
+
+    (void) CVodeGetDky(cv_mem, tmid, 0, y);
+    retval = gfun(tmid, y, grout, user_data);
+    nge++;
+    if (retval != 0) return(CV_RTFUNC_FAIL);
+
+    /* Check to see in which subinterval g changes sign, and reset imax.
+       Set side = 1 if sign change is on low side, or 2 if on high side.  */  
+    maxfrac = ZERO;
+    zroot = FALSE;
+    sgnchg = FALSE;
+    sideprev = side;
+    for (i = 0;  i < nrtfn; i++) {
+      if(!gactive[i]) continue;
+      if (SUNRabs(grout[i]) == ZERO) {
+        if(rootdir[i]*glo[i] <= ZERO) zroot = TRUE;
+      } else {
+        if ( (glo[i]*grout[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) {
+          gfrac = SUNRabs(grout[i]/(grout[i] - glo[i]));
+          if (gfrac > maxfrac) {
+            sgnchg = TRUE;
+            maxfrac = gfrac;
+            imax = i;
+          }
+        }
+      }
+    }
+    if (sgnchg) {
+      /* Sign change found in (tlo,tmid); replace thi with tmid. */
+      thi = tmid;
+      for (i = 0; i < nrtfn; i++) ghi[i] = grout[i];
+      side = 1;
+      /* Stop at root thi if converged; otherwise loop. */
+      if (SUNRabs(thi - tlo) <= ttol) break;
+      continue;  /* Return to looping point. */
+    }
+
+    if (zroot) {
+      /* No sign change in (tlo,tmid), but g = 0 at tmid; return root tmid. */
+      thi = tmid;
+      for (i = 0; i < nrtfn; i++) ghi[i] = grout[i];
+      break;
+    }
+
+    /* No sign change in (tlo,tmid), and no zero at tmid.
+       Sign change must be in (tmid,thi).  Replace tlo with tmid. */
+    tlo = tmid;
+    for (i = 0; i < nrtfn; i++) glo[i] = grout[i];
+    side = 2;
+    /* Stop at root thi if converged; otherwise loop back. */
+    if (SUNRabs(thi - tlo) <= ttol) break;
+
+  } /* End of root-search loop */
+
+  /* Reset trout and grout, set iroots, and return RTFOUND. */
+  trout = thi;
+  for (i = 0; i < nrtfn; i++) {
+    grout[i] = ghi[i];
+    iroots[i] = 0;
+    if(!gactive[i]) continue;
+    if ( (SUNRabs(ghi[i]) == ZERO) && (rootdir[i]*glo[i] <= ZERO) )
+      iroots[i] = glo[i] > 0 ? -1:1;
+    if ( (glo[i]*ghi[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) 
+      iroots[i] = glo[i] > 0 ? -1:1;
+  }
+  return(RTFOUND);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions for combined norms
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvQuadUpdateNorm
+ *
+ * Updates the norm old_nrm to account for all quadratures.
+ */
+
+static realtype cvQuadUpdateNorm(CVodeMem cv_mem, realtype old_nrm,
+                                 N_Vector xQ, N_Vector wQ)
+{
+  realtype qnrm;
+
+  qnrm = N_VWrmsNorm(xQ, wQ);
+  if (old_nrm > qnrm) return(old_nrm);
+  else                return(qnrm);
+}
+
+/*
+ * cvSensNorm
+ *
+ * This routine returns the maximum over the weighted root mean 
+ * square norm of xS with weight vectors wS:
+ *
+ *  max { wrms(xS[0],wS[0]) ... wrms(xS[Ns-1],wS[Ns-1]) }    
+ *
+ * Called by cvSensUpdateNorm or directly in the CV_STAGGERED approach 
+ * during the NLS solution and before the error test.
+ */
+
+static realtype cvSensNorm(CVodeMem cv_mem, N_Vector *xS, N_Vector *wS)
+{
+  int is;
+  realtype nrm, snrm;
+
+  nrm = N_VWrmsNorm(xS[0],wS[0]);
+  for (is=1; is<Ns; is++) {
+    snrm = N_VWrmsNorm(xS[is],wS[is]);
+    if ( snrm > nrm ) nrm = snrm;
+  }
+
+  return(nrm);
+}
+
+/*
+ * cvSensUpdateNorm
+ *
+ * Updates the norm old_nrm to account for all sensitivities.
+ */
+
+static realtype cvSensUpdateNorm(CVodeMem cv_mem, realtype old_nrm,
+                                 N_Vector *xS, N_Vector *wS)
+{
+  realtype snrm;
+  
+  snrm = cvSensNorm(cv_mem, xS, wS);
+  if (old_nrm > snrm) return(old_nrm);
+  else                return(snrm);
+}
+
+/*
+ * cvQuadSensNorm
+ *
+ * This routine returns the maximum over the weighted root mean 
+ * square norm of xQS with weight vectors wQS:
+ *
+ *  max { wrms(xQS[0],wS[0]) ... wrms(xQS[Ns-1],wS[Ns-1]) }    
+ *
+ * Called by cvQuadSensUpdateNorm.
+ */
+
+static realtype cvQuadSensNorm(CVodeMem cv_mem, N_Vector *xQS, N_Vector *wQS)
+{
+  int is;
+  realtype nrm, snrm;
+
+  nrm = N_VWrmsNorm(xQS[0],wQS[0]);
+  for (is=1; is<Ns; is++) {
+    snrm = N_VWrmsNorm(xQS[is],wQS[is]);
+    if ( snrm > nrm ) nrm = snrm;
+  }
+
+  return(nrm);
+}
+
+/*
+ * cvSensUpdateNorm
+ *
+ * Updates the norm old_nrm to account for all quadrature sensitivities.
+ */
+
+static realtype cvQuadSensUpdateNorm(CVodeMem cv_mem, realtype old_nrm,
+                                     N_Vector *xQS, N_Vector *wQS)
+{
+  realtype snrm;
+  
+  snrm = cvQuadSensNorm(cv_mem, xQS, wQS);
+  if (old_nrm > snrm) return(old_nrm);
+  else                return(snrm);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Wrappers for sensitivity RHS
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvSensRhsWrapper
+ *
+ * CVSensRhs is a high level routine that returns right hand side 
+ * of sensitivity equations. Depending on the 'ifS' flag, it either 
+ * calls directly the fS routine (ifS=CV_ALLSENS) or (if ifS=CV_ONESENS) 
+ * calls the fS1 routine in a loop over all sensitivities.
+ *
+ * CVSensRhs is called:
+ *  (*) by CVode at the first step
+ *  (*) by cvYddNorm if errcon=TRUE
+ *  (*) by cvNlsFunctional, cvNlsNewton, and cvNewtonIteration
+ *      if ism=CV_SIMULTANEOUS
+ *  (*) by cvDoErrorTest when restarting from scratch
+ *  (*) in the corrector loop if ism=CV_STAGGERED
+ *  (*) by cvStgrDoErrorTest when restarting from scratch 
+ *
+ * The return value is that of the sensitivity RHS function fS,
+ *
+ */
+
+int cvSensRhsWrapper(CVodeMem cv_mem, realtype time, 
+                     N_Vector ycur, N_Vector fcur, 
+                     N_Vector *yScur, N_Vector *fScur,
+                     N_Vector temp1, N_Vector temp2)
+{
+  int retval=0, is;
+
+  if (ifS==CV_ALLSENS) {
+    retval = fS(Ns, time, ycur, fcur, yScur, fScur, 
+                fS_data, temp1, temp2);
+    nfSe++;
+  } else {
+    for (is=0; is<Ns; is++) {
+      retval = fS1(Ns, time, ycur, fcur, is, yScur[is], fScur[is], 
+                   fS_data, temp1, temp2);
+      nfSe++;
+      if (retval != 0) break;
+    }
+  }
+
+  return(retval);
+}
+
+/*
+ * cvSensRhs1Wrapper
+ *
+ * cvSensRhs1Wrapper is a high level routine that returns right-hand
+ * side of the is-th sensitivity equation. 
+ *
+ * cvSensRhs1Wrapper is called only during the CV_STAGGERED1 corrector loop
+ * (ifS must be CV_ONESENS, otherwise CVodeSensInit would have 
+ * issued an error message).
+ *
+ * The return value is that of the sensitivity RHS function fS1,
+ */
+
+int cvSensRhs1Wrapper(CVodeMem cv_mem, realtype time, 
+                      N_Vector ycur, N_Vector fcur, 
+                      int is, N_Vector yScur, N_Vector fScur,
+                      N_Vector temp1, N_Vector temp2)
+{
+  int retval;
+
+  retval = fS1(Ns, time, ycur, fcur, is, yScur, fScur, 
+               fS_data, temp1, temp2);
+  nfSe++;
+
+  return(retval);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Internal DQ approximations for sensitivity RHS
+ * -----------------------------------------------------------------
+ */
+
+/* Undefine Readibility Constants */
+
+#undef Ns
+#undef y
+#undef yS
+#undef ftemp
+
+/*
+ * cvSensRhsInternalDQ   - internal CVSensRhsFn
+ *
+ * cvSensRhsInternalDQ computes right hand side of all sensitivity equations
+ * by finite differences
+ */
+
+int cvSensRhsInternalDQ(int Ns, realtype t, 
+                        N_Vector y, N_Vector ydot, 
+                        N_Vector *yS, N_Vector *ySdot, 
+                        void *cvode_mem,  
+                        N_Vector ytemp, N_Vector ftemp)
+{
+  int is, retval;
+  
+  for (is=0; is<Ns; is++) {
+    retval = cvSensRhs1InternalDQ(Ns, t, y, ydot, is, yS[is], ySdot[is],
+                                  cvode_mem, ytemp, ftemp);
+    if (retval!=0) return(retval);
+  }
+
+  return(0);
+}
+
+/*
+ * cvSensRhs1InternalDQ   - internal CVSensRhs1Fn
+ *
+ * cvSensRhs1InternalDQ computes the right hand side of the is-th sensitivity 
+ * equation by finite differences
+ *
+ * cvSensRhs1InternalDQ returns 0 if successful. Otherwise it returns the 
+ * non-zero return value from f().
+ */
+
+int cvSensRhs1InternalDQ(int Ns, realtype t, 
+                         N_Vector y, N_Vector ydot, 
+                         int is, N_Vector yS, N_Vector ySdot, 
+                         void *cvode_mem,
+                         N_Vector ytemp, N_Vector ftemp)
+{
+  CVodeMem cv_mem;
+  int retval, method;
+  int nfel = 0, which;
+  realtype psave, pbari;
+  realtype delta , rdelta;
+  realtype Deltap, rDeltap, r2Deltap;
+  realtype Deltay, rDeltay, r2Deltay;
+  realtype Delta , rDelta , r2Delta ;
+  realtype norms, ratio;
+  
+  /* cvode_mem is passed here as user data */
+  cv_mem = (CVodeMem) cvode_mem;
+
+  delta = SUNRsqrt(SUNMAX(reltol, uround));
+  rdelta = ONE/delta;
+  
+  pbari = pbar[is];
+
+  which = plist[is];
+
+  psave = p[which];
+  
+  Deltap  = pbari * delta;
+  rDeltap = ONE/Deltap;
+  norms   = N_VWrmsNorm(yS, ewt) * pbari;
+  rDeltay = SUNMAX(norms, rdelta) / pbari;
+  Deltay  = ONE/rDeltay;
+  
+  if (DQrhomax == ZERO) {
+    /* No switching */
+    method = (DQtype==CV_CENTERED) ? CENTERED1 : FORWARD1;
+  } else {
+    /* switch between simultaneous/separate DQ */
+    ratio = Deltay * rDeltap;
+    if ( SUNMAX(ONE/ratio, ratio) <= DQrhomax )
+      method = (DQtype==CV_CENTERED) ? CENTERED1 : FORWARD1;
+    else
+      method = (DQtype==CV_CENTERED) ? CENTERED2 : FORWARD2;
+  }
+
+  switch(method) {
+    
+  case CENTERED1:
+    
+    Delta = SUNMIN(Deltay, Deltap);
+    r2Delta = HALF/Delta;
+    
+    N_VLinearSum(ONE,y,Delta,yS,ytemp);
+    p[which] = psave + Delta;
+
+    retval = f(t, ytemp, ySdot, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+    
+    N_VLinearSum(ONE,y,-Delta,yS,ytemp);
+    p[which] = psave - Delta;
+
+    retval = f(t, ytemp, ftemp, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+
+    N_VLinearSum(r2Delta,ySdot,-r2Delta,ftemp,ySdot);
+    
+    break;
+    
+  case CENTERED2:
+    
+    r2Deltap = HALF/Deltap;
+    r2Deltay = HALF/Deltay;
+    
+    N_VLinearSum(ONE,y,Deltay,yS,ytemp);
+
+    retval = f(t, ytemp, ySdot, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+
+    N_VLinearSum(ONE,y,-Deltay,yS,ytemp);
+
+    retval = f(t, ytemp, ftemp, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+
+    N_VLinearSum(r2Deltay, ySdot, -r2Deltay, ftemp, ySdot);
+    
+    p[which] = psave + Deltap;
+    retval = f(t, y, ytemp, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+
+    p[which] = psave - Deltap;
+    retval = f(t, y, ftemp, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+
+    N_VLinearSum(r2Deltap,ytemp,-r2Deltap,ftemp,ftemp);
+    
+    N_VLinearSum(ONE,ySdot,ONE,ftemp,ySdot);
+    
+    break;
+    
+  case FORWARD1:
+    
+    Delta = SUNMIN(Deltay, Deltap);
+    rDelta = ONE/Delta;
+    
+    N_VLinearSum(ONE,y,Delta,yS,ytemp);
+    p[which] = psave + Delta;
+
+    retval = f(t, ytemp, ySdot, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+    
+    N_VLinearSum(rDelta,ySdot,-rDelta,ydot,ySdot);
+    
+    break;
+    
+  case FORWARD2:
+    
+    N_VLinearSum(ONE,y,Deltay,yS,ytemp);
+
+    retval = f(t, ytemp, ySdot, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+
+    N_VLinearSum(rDeltay, ySdot, -rDeltay, ydot, ySdot);
+    
+    p[which] = psave + Deltap;
+    retval = f(t, y, ytemp, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+
+    N_VLinearSum(rDeltap,ytemp,-rDeltap,ydot,ftemp);
+      
+    N_VLinearSum(ONE,ySdot,ONE,ftemp,ySdot);
+    
+    break;
+    
+  }
+  
+  p[which] = psave;
+  
+  /* Increment counter nfeS */
+  nfeS += nfel;
+  
+  return(0);
+}
+
+
+/*
+ * cvQuadSensRhsInternalDQ   - internal CVQuadSensRhsFn
+ *
+ * cvQuadSensRhsInternalDQ computes right hand side of all quadrature
+ * sensitivity equations by finite differences. All work is actually
+ * done in cvQuadSensRhs1InternalDQ.
+ */
+
+static int cvQuadSensRhsInternalDQ(int Ns, realtype t, 
+                                   N_Vector y, N_Vector *yS,
+                                   N_Vector yQdot, N_Vector *yQSdot,
+                                   void *cvode_mem,  
+                                   N_Vector tmp, N_Vector tmpQ)
+{
+  CVodeMem cv_mem;
+  int is, retval;
+  
+  /* cvode_mem is passed here as user data */
+  cv_mem = (CVodeMem) cvode_mem;
+
+  for (is=0; is<Ns; is++) {
+    retval = cvQuadSensRhs1InternalDQ(cv_mem, is, t,
+                                      y, yS[is], 
+                                      yQdot, yQSdot[is],
+                                      tmp, tmpQ);
+    if (retval!=0) return(retval);
+  }
+
+  return(0);
+}
+
+static int cvQuadSensRhs1InternalDQ(CVodeMem cv_mem, int is, realtype t, 
+                                    N_Vector y, N_Vector yS,
+                                    N_Vector yQdot, N_Vector yQSdot, 
+                                    N_Vector tmp, N_Vector tmpQ)
+{
+  int retval, method;
+  int nfel = 0, which;
+  realtype psave, pbari;
+  realtype delta , rdelta;
+  realtype Deltap;
+  realtype Deltay, rDeltay;
+  realtype Delta , rDelta , r2Delta ;
+  realtype norms;
+
+  delta = SUNRsqrt(SUNMAX(reltol, uround));
+  rdelta = ONE/delta;
+  
+  pbari = pbar[is];
+
+  which = plist[is];
+
+  psave = p[which];
+  
+  Deltap  = pbari * delta;
+  norms   = N_VWrmsNorm(yS, ewt) * pbari;
+  rDeltay = SUNMAX(norms, rdelta) / pbari;
+  Deltay  = ONE/rDeltay;
+  
+  method = (DQtype==CV_CENTERED) ? CENTERED1 : FORWARD1;
+
+  switch(method) {
+
+  case CENTERED1:
+    
+    Delta = SUNMIN(Deltay, Deltap);
+    r2Delta = HALF/Delta;
+    
+    N_VLinearSum(ONE, y, Delta, yS, tmp);
+    p[which] = psave + Delta;
+
+    retval = fQ(t, tmp, yQSdot, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+    
+    N_VLinearSum(ONE, y, -Delta, yS, tmp);
+    p[which] = psave - Delta;
+
+    retval = fQ(t, tmp, tmpQ, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+
+    N_VLinearSum(r2Delta, yQSdot, -r2Delta, tmpQ, yQSdot);
+    
+    break;
+
+  case FORWARD1:
+    
+    Delta = SUNMIN(Deltay, Deltap);
+    rDelta = ONE/Delta;
+    
+    N_VLinearSum(ONE, y, Delta, yS, tmp);
+    p[which] = psave + Delta;
+
+    retval = fQ(t, tmp, yQSdot, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+    
+    N_VLinearSum(rDelta, yQSdot, -rDelta, yQdot, yQSdot);
+    
+    break;
+
+  }
+
+  p[which] = psave;
+  
+  /* Increment counter nfQeS */
+  nfQeS += nfel;
+  
+  return(0);
+}
+
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Error message handling functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvProcessError is a high level error handling function.
+ * - If cv_mem==NULL it prints the error message to stderr.
+ * - Otherwise, it sets up and calls the error handling function 
+ *   pointed to by cv_ehfun.
+ */
+
+#define ehfun    (cv_mem->cv_ehfun)
+#define eh_data  (cv_mem->cv_eh_data)
+
+void cvProcessError(CVodeMem cv_mem, 
+                    int error_code, const char *module, const char *fname, 
+                    const char *msgfmt, ...)
+{
+  va_list ap;
+  char msg[256];
+
+  /* Initialize the argument pointer variable 
+     (msgfmt is the last required argument to cvProcessError) */
+
+  va_start(ap, msgfmt);
+
+  /* Compose the message */
+
+  vsprintf(msg, msgfmt, ap);
+
+  if (cv_mem == NULL) {    /* We write to stderr */
+#ifndef NO_FPRINTF_OUTPUT
+    fprintf(stderr, "\n[%s ERROR]  %s\n  ", module, fname);
+    fprintf(stderr, "%s\n\n", msg);
+#endif
+
+  } else {                 /* We can call ehfun */
+    ehfun(error_code, module, fname, msg, eh_data);
+  }
+
+  /* Finalize argument processing */
+  va_end(ap);
+
+  return;
+}
+
+/* 
+ * cvErrHandler is the default error handling function.
+ * It sends the error message to the stream pointed to by cv_errfp.
+ */
+
+#define errfp    (cv_mem->cv_errfp)
+
+void cvErrHandler(int error_code, const char *module,
+                  const char *function, char *msg, void *data)
+{
+  CVodeMem cv_mem;
+  char err_type[10];
+
+  /* data points to cv_mem here */
+
+  cv_mem = (CVodeMem) data;
+
+  if (error_code == CV_WARNING)
+    sprintf(err_type,"WARNING");
+  else
+    sprintf(err_type,"ERROR");
+
+#ifndef NO_FPRINTF_OUTPUT
+  if (errfp!=NULL) {
+    fprintf(errfp,"\n[%s %s]  %s\n",module,err_type,function);
+    fprintf(errfp,"  %s\n\n",msg);
+  }
+#endif
+
+  return;
+}
diff --git a/src/cvodes/cvodes_band.c b/src/cvodes/cvodes_band.c
new file mode 100644
index 0000000..ba46f4f
--- /dev/null
+++ b/src/cvodes/cvodes_band.c
@@ -0,0 +1,470 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4923 $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSBAND linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvodes/cvodes_band.h>
+#include "cvodes_direct_impl.h"
+#include "cvodes_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* CVSBAND linit, lsetup, lsolve, and lfree routines */
+static int cvBandInit(CVodeMem cv_mem);
+static int cvBandSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                       N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                       N_Vector vtemp2, N_Vector vtemp3);
+static int cvBandSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                       N_Vector ycur, N_Vector fcur);
+static int cvBandFree(CVodeMem cv_mem);
+
+/* CVSBAND lfreeB function */
+static int cvBandFreeB(CVodeBMem cvB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+
+/* Readability Replacements */
+
+#define lmm       (cv_mem->cv_lmm)
+#define f         (cv_mem->cv_f)
+#define nst       (cv_mem->cv_nst)
+#define tn        (cv_mem->cv_tn)
+#define h         (cv_mem->cv_h)
+#define gamma     (cv_mem->cv_gamma)
+#define gammap    (cv_mem->cv_gammap)
+#define gamrat    (cv_mem->cv_gamrat)
+#define ewt       (cv_mem->cv_ewt)
+#define nfe       (cv_mem->cv_nfe)
+#define linit     (cv_mem->cv_linit)
+#define lsetup    (cv_mem->cv_lsetup)
+#define lsolve    (cv_mem->cv_lsolve)
+#define lfree     (cv_mem->cv_lfree)
+#define lmem      (cv_mem->cv_lmem)
+#define vec_tmpl     (cv_mem->cv_tempv)
+#define setupNonNull (cv_mem->cv_setupNonNull)
+
+#define mtype      (cvdls_mem->d_type)
+#define n          (cvdls_mem->d_n)
+#define jacDQ      (cvdls_mem->d_jacDQ)
+#define jac        (cvdls_mem->d_bjac)
+#define M          (cvdls_mem->d_M)
+#define mu         (cvdls_mem->d_mu)
+#define ml         (cvdls_mem->d_ml)
+#define smu        (cvdls_mem->d_smu)
+#define lpivots    (cvdls_mem->d_lpivots)
+#define savedJ     (cvdls_mem->d_savedJ)
+#define nstlj      (cvdls_mem->d_nstlj)
+#define nje        (cvdls_mem->d_nje)
+#define nfeDQ      (cvdls_mem->d_nfeDQ)
+#define J_data     (cvdls_mem->d_J_data)
+#define last_flag  (cvdls_mem->d_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * CVBand
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the band linear solver module.  CVBand first calls
+ * the existing lfree routine if this is not NULL.  It then sets the
+ * cv_linit, cv_lsetup, cv_lsolve, and cv_lfree fields in (*cvode_mem)
+ * to be cvBandInit, cvBandSetup, cvBandSolve, and cvBandFree,
+ * respectively.  It allocates memory for a structure of type
+ * CVDlsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure.  It sets setupNonNull in (*cvode_mem) to be
+ * TRUE, b_mu to be mupper, b_ml to be mlower, and the b_jac field to be 
+ * CVBandDQJac.
+ * Finally, it allocates memory for M, savedJ, and lpivots.  The CVBand
+ * return value is SUCCESS = 0, LMEM_FAIL = -1, or LIN_ILL_INPUT = -2.
+ *
+ * NOTE: The band linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVBand will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that the function 
+ *       N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+                  
+int CVBand(void *cvode_mem, long int N, long int mupper, long int mlower)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSBAND", "CVBand", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (vec_tmpl->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSBAND", "CVBand", MSGD_BAD_NVECTOR);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */  
+  linit  = cvBandInit;
+  lsetup = cvBandSetup;
+  lsolve = cvBandSolve;
+  lfree  = cvBandFree;
+  
+  /* Get memory for CVDlsMemRec */
+  cvdls_mem = NULL;
+  cvdls_mem = (CVDlsMem) malloc(sizeof(struct CVDlsMemRec));
+  if (cvdls_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSBAND", "CVBand", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_BAND;
+
+  /* Initialize Jacobian-related data */
+  jacDQ = TRUE;
+  jac = NULL;
+  J_data = NULL;
+
+  last_flag = CVDLS_SUCCESS;
+
+  cvDlsInitializeCounters(cvdls_mem);  
+
+  setupNonNull = TRUE;
+  
+  /* Load problem dimension */
+  n = N;
+
+  /* Load half-bandwiths in cvdls_mem */
+  ml = mlower;
+  mu = mupper;
+
+  /* Test ml and mu for legality */
+  if ((ml < 0) || (mu < 0) || (ml >= N) || (mu >= N)) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSBAND", "CVBand", MSGD_BAD_SIZES);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  smu = SUNMIN(N-1, mu + ml);
+
+  /* Allocate memory for M, savedJ, and pivot arrays */
+  M = NULL;
+  M = NewBandMat(N, mu, ml, smu);
+  if (M == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSBAND", "CVBand", MSGD_MEM_FAIL);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  savedJ = NULL;
+  savedJ = NewBandMat(N, mu, ml, mu);
+  if (savedJ == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSBAND", "CVBand", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  lpivots = NULL;
+  lpivots = NewLintArray(N);
+  if (lpivots == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSBAND", "CVBand", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    DestroyMat(savedJ);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvdls_mem;
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the band
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBandInit(CVodeMem cv_mem)
+{
+  CVDlsMem cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  cvDlsInitializeCounters(cvdls_mem);  
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (jacDQ) {
+    jac = cvDlsBandDQJac;
+    J_data = cv_mem;
+  } else {
+    J_data = cv_mem->cv_user_data;
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the band linear solver.
+ * It makes a decision whether or not to call the Jacobian evaluation
+ * routine based on various state variables, and if not it uses the 
+ * saved copy.  In any case, it constructs the Newton matrix 
+ * M = I - gamma*J, updates counters, and calls the band LU 
+ * factorization routine.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBandSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                       N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                       N_Vector vtemp2, N_Vector vtemp3)
+{
+  CVDlsMem cvdls_mem;
+  booleantype jbad, jok;
+  realtype dgamma;
+  int retval;
+  long int ier;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVD_MSBJ) ||
+         ((convfail == CV_FAIL_BAD_J) && (dgamma < CVD_DGMAX)) ||
+         (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    BandCopy(savedJ, M, mu, ml);
+
+  } else {
+
+    /* If jok = FALSE, call jac routine for new J value */
+    nje++;
+    nstlj = nst;
+    *jcurPtr = TRUE;
+    SetToZero(M); 
+
+    retval = jac(n, mu, ml, tn, ypred, fpred, M, J_data, vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      cvProcessError(cv_mem, CVDLS_JACFUNC_UNRECVR, "CVSBAND", "cvBandSetup", MSGD_JACFUNC_FAILED);
+      last_flag = CVDLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      last_flag = CVDLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    BandCopy(M, savedJ, mu, ml);
+
+  }
+  
+  /* Scale and add I to get M = I - gamma*J */
+  BandScale(-gamma, M);
+  AddIdentity(M);
+
+  /* Do LU factorization of M */
+  ier = BandGBTRF(M, lpivots);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  if (ier > 0) {
+    last_flag = ier;
+    return(1);
+  }
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandSolve
+ * -----------------------------------------------------------------
+ * This routine handles the solve operation for the band linear solver
+ * by calling the band backsolve routine.  The return value is 0.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBandSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                       N_Vector ycur, N_Vector fcur)
+{
+  CVDlsMem cvdls_mem;
+  realtype *bd;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  bd = N_VGetArrayPointer(b);
+
+  BandGBTRS(M, lpivots, bd);
+
+  /* If CV_BDF, scale the correction to account for change in gamma */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    N_VScale(TWO/(ONE + gamrat), b, b);
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the band linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBandFree(CVodeMem cv_mem)
+{
+  CVDlsMem cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  DestroyMat(M);
+  DestroyMat(savedJ);
+  DestroyArray(lpivots);
+  free(cvdls_mem);
+  cv_mem->cv_lmem = NULL;
+
+  return(0);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * CVBandB is a wrapper around CVBand. It attaches the CVSBAND linear solver
+ * to the backward problem memory block.
+ */
+
+int CVBandB(void *cvode_mem, int which,
+            long int nB, long int mupperB, long int mlowerB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  CVDlsMemB cvdlsB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSBAND", "CVBandB", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVDLS_NO_ADJ, "CVSBAND", "CVBandB", MSGD_NO_ADJ);
+    return(CVDLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSBAND", "CVBandB", MSGCV_BAD_WHICH);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Get memory for CVDlsMemRecB */
+  cvdlsB_mem = (CVDlsMemB) malloc(sizeof(struct CVDlsMemRecB));
+  if (cvdlsB_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSBAND", "CVBandB", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* set matrix type */
+  cvdlsB_mem->d_typeB = SUNDIALS_BAND;
+
+  /* initialize Jacobian function */
+  cvdlsB_mem->d_bjacB = NULL;
+
+  /* attach lmemB and lfreeB */
+  cvB_mem->cv_lmem = cvdlsB_mem;
+  cvB_mem->cv_lfree = cvBandFreeB;
+
+  flag = CVBand(cvodeB_mem, nB, mupperB, mlowerB);
+
+  if (flag != CVDLS_SUCCESS) {
+    free(cvdlsB_mem);
+    cvdlsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * cvBandFreeB frees the memory associated with the CVSBAND linear
+ * solver for backward integration.
+ */
+
+static int cvBandFreeB(CVodeBMem cvB_mem)
+{
+  CVDlsMemB cvdlsB_mem;
+
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  free(cvdlsB_mem);
+
+  return(0);
+}
+
diff --git a/src/cvodes/cvodes_bandpre.c b/src/cvodes/cvodes_bandpre.c
new file mode 100644
index 0000000..8b63137
--- /dev/null
+++ b/src/cvodes/cvodes_bandpre.c
@@ -0,0 +1,557 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4923 $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file contains implementations of the banded difference
+ * quotient Jacobian-based preconditioner and solver routines for
+ * use with the CVSPILS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes_impl.h"
+#include "cvodes_bandpre_impl.h"
+#include "cvodes_spils_impl.h"
+
+#include <cvodes/cvodes_sptfqmr.h>
+#include <cvodes/cvodes_spbcgs.h>
+#include <cvodes/cvodes_spgmr.h>
+
+#include <sundials/sundials_math.h>
+
+#define MIN_INC_MULT RCONST(1000.0)
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+
+/* Prototypes of cvBandPrecSetup and cvBandPrecSolve */
+  
+static int cvBandPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+                           booleantype jok, booleantype *jcurPtr, 
+                           realtype gamma, void *bp_data,
+                           N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int cvBandPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+                           N_Vector r, N_Vector z, 
+                           realtype gamma, realtype delta,
+                           int lr, void *bp_data, N_Vector tmp);
+
+/* Prototype for cvBandPrecFree */
+
+static int cvBandPrecFree(CVodeMem cv_mem);
+
+/* Prototype for difference quotient Jacobian calculation routine */
+
+static int cvBandPrecDQJac(CVBandPrecData pdata, 
+                           realtype t, N_Vector y, N_Vector fy, 
+                           N_Vector ftemp, N_Vector ytemp);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Redability replacements */
+
+#define vec_tmpl (cv_mem->cv_tempv)
+
+/*
+ * -----------------------------------------------------------------
+ * Initialization, Free, and Get Functions
+ * NOTE: The band linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVBandPrecInit will
+ *       first test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+int CVBandPrecInit(void *cvode_mem, long int N, long int mu, long int ml)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBandPrecData pdata;
+  long int mup, mlp, storagemu;
+  int flag;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBANDPRE", "CVBandPrecInit", MSGBP_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBANDPRE", "CVBandPrecInit", MSGBP_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  /* Test if the NVECTOR package is compatible with the BAND preconditioner */
+  if(vec_tmpl->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVBANDPRE", "CVBandPrecInit", MSGBP_BAD_NVECTOR);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  pdata = NULL;
+  pdata = (CVBandPrecData) malloc(sizeof *pdata);  /* Allocate data memory */
+  if (pdata == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBANDPRE", "CVBandPrecInit", MSGBP_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Load pointers and bandwidths into pdata block. */
+  pdata->cvode_mem = cvode_mem;
+  pdata->N = N;
+  pdata->mu = mup = SUNMIN(N-1, SUNMAX(0,mu));
+  pdata->ml = mlp = SUNMIN(N-1, SUNMAX(0,ml));
+
+  /* Initialize nfeBP counter */
+  pdata->nfeBP = 0;
+
+  /* Allocate memory for saved banded Jacobian approximation. */
+  pdata->savedJ = NULL;
+  pdata->savedJ = NewBandMat(N, mup, mlp, mup);
+  if (pdata->savedJ == NULL) {
+    free(pdata); pdata = NULL;
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBANDPRE", "CVBandPrecInit", MSGBP_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+
+  /* Allocate memory for banded preconditioner. */
+  storagemu = SUNMIN(N-1, mup+mlp);
+  pdata->savedP = NULL;
+  pdata->savedP = NewBandMat(N, mup, mlp, storagemu);
+  if (pdata->savedP == NULL) {
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBANDPRE", "CVBandPrecInit", MSGBP_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Allocate memory for pivot array. */
+  pdata->lpivots = NULL;
+  pdata->lpivots = NewLintArray(N);
+  if (pdata->lpivots == NULL) {
+    DestroyMat(pdata->savedP);
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBANDPRE", "CVBandPrecInit", MSGBP_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* make sure s_P_data is free from any previous allocations */
+  if (cvspils_mem->s_pfree != NULL) {
+    cvspils_mem->s_pfree(cv_mem);
+  }
+
+  /* Point to the new P_data field in the SPILS memory */
+  cvspils_mem->s_P_data = pdata;
+
+  /* Attach the pfree function */
+  cvspils_mem->s_pfree = cvBandPrecFree;
+
+  /* Attach preconditioner solve and setup functions */
+  flag = CVSpilsSetPreconditioner(cvode_mem, cvBandPrecSetup, cvBandPrecSolve);
+
+  return(flag);
+}
+
+int CVBandPrecGetWorkSpace(void *cvode_mem, long int *lenrwBP, long int *leniwBP)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBandPrecData pdata;
+  long int N, ml, mu, smu;
+
+  
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBANDPRE", "CVBandPrecGetWorkSpace", MSGBP_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBANDPRE", "CVBandPrecGetWorkSpace", MSGBP_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  if (cvspils_mem->s_P_data == NULL) {
+    cvProcessError(cv_mem, CVSPILS_PMEM_NULL, "CVBANDPRE", "CVBandPrecGetWorkSpace", MSGBP_PMEM_NULL);
+    return(CVSPILS_PMEM_NULL);
+  } 
+  pdata = (CVBandPrecData) cvspils_mem->s_P_data;
+
+  N   = pdata->N;
+  mu  = pdata->mu;
+  ml  = pdata->ml;
+  smu = SUNMIN( N-1, mu + ml);
+
+  *leniwBP = pdata->N;
+  *lenrwBP = N * ( 2*ml + smu + mu + 2 );
+
+  return(CVSPILS_SUCCESS);
+}
+
+int CVBandPrecGetNumRhsEvals(void *cvode_mem, long int *nfevalsBP)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBandPrecData pdata;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBANDPRE", "CVBandPrecGetNumRhsEvals", MSGBP_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBANDPRE", "CVBandPrecGetNumRhsEvals", MSGBP_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  if (cvspils_mem->s_P_data == NULL) {
+    cvProcessError(cv_mem, CVSPILS_PMEM_NULL, "CVBANDPRE", "CVBandPrecGetNumRhsEvals", MSGBP_PMEM_NULL);
+    return(CVSPILS_PMEM_NULL);
+  } 
+  pdata = (CVBandPrecData) cvspils_mem->s_P_data;
+
+  *nfevalsBP = pdata->nfeBP;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/* Readability Replacements */
+
+#define N       (pdata->N)
+#define mu      (pdata->mu)
+#define ml      (pdata->ml)
+#define lpivots (pdata->lpivots)
+#define savedJ  (pdata->savedJ)
+#define savedP  (pdata->savedP)
+#define nfeBP   (pdata->nfeBP)
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandPrecSetup
+ * -----------------------------------------------------------------
+ * Together cvBandPrecSetup and cvBandPrecSolve use a banded
+ * difference quotient Jacobian to create a preconditioner.
+ * cvBandPrecSetup calculates a new J, if necessary, then
+ * calculates P = I - gamma*J, and does an LU factorization of P.
+ *
+ * The parameters of cvBandPrecSetup are as follows:
+ *
+ * t       is the current value of the independent variable.
+ *
+ * y       is the current value of the dependent variable vector,
+ *         namely the predicted value of y(t).
+ *
+ * fy      is the vector f(t,y).
+ *
+ * jok     is an input flag indicating whether Jacobian-related
+ *         data needs to be recomputed, as follows:
+ *           jok == FALSE means recompute Jacobian-related data
+ *                  from scratch.
+ *           jok == TRUE means that Jacobian data from the
+ *                  previous PrecSetup call will be reused
+ *                  (with the current value of gamma).
+ *         A cvBandPrecSetup call with jok == TRUE should only
+ *         occur after a call with jok == FALSE.
+ *
+ * *jcurPtr is a pointer to an output integer flag which is
+ *          set by CVBandPrecond as follows:
+ *            *jcurPtr = TRUE if Jacobian data was recomputed.
+ *            *jcurPtr = FALSE if Jacobian data was not recomputed,
+ *                       but saved data was reused.
+ *
+ * gamma   is the scalar appearing in the Newton matrix.
+ *
+ * bp_data is a pointer to preconditoner data (set by CVBandPrecInit)
+ *
+ * tmp1, tmp2, and tmp3 are pointers to memory allocated
+ *           for vectors of length N for work space. This
+ *           routine uses only tmp1 and tmp2.
+ *
+ * The value to be returned by the cvBandPrecSetup function is
+ *   0  if successful, or
+ *   1  if the band factorization failed.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBandPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+                           booleantype jok, booleantype *jcurPtr, 
+                           realtype gamma, void *bp_data,
+                           N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  CVBandPrecData pdata;
+  CVodeMem cv_mem;
+  int retval;
+  long int ier;
+
+  /* Assume matrix and lpivots have already been allocated. */
+  pdata = (CVBandPrecData) bp_data;
+
+  cv_mem = (CVodeMem) pdata->cvode_mem;
+
+  if (jok) {
+
+    /* If jok = TRUE, use saved copy of J. */
+    *jcurPtr = FALSE;
+    BandCopy(savedJ, savedP, mu, ml);
+
+  } else {
+
+    /* If jok = FALSE, call cvBandPrecDQJac for new J value. */
+    *jcurPtr = TRUE;
+    SetToZero(savedJ);
+
+    retval = cvBandPrecDQJac(pdata, t, y, fy, tmp1, tmp2);
+    if (retval < 0) {
+      cvProcessError(cv_mem, -1, "CVBANDPRE", "cvBandPrecSetup", MSGBP_RHSFUNC_FAILED);
+      return(-1);
+    }
+    if (retval > 0) {
+      return(1);
+    }
+
+    BandCopy(savedJ, savedP, mu, ml);
+
+  }
+  
+  /* Scale and add I to get savedP = I - gamma*J. */
+  BandScale(-gamma, savedP);
+  AddIdentity(savedP);
+ 
+  /* Do LU factorization of matrix. */
+  ier = BandGBTRF(savedP, lpivots);
+ 
+  /* Return 0 if the LU was complete; otherwise return 1. */
+  if (ier > 0) return(1);
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandPrecSolve
+ * -----------------------------------------------------------------
+ * cvBandPrecSolve solves a linear system P z = r, where P is the
+ * matrix computed by CVBandPrecond.
+ *
+ * The parameters of cvBandPrecSolve used here are as follows:
+ *
+ * r       is the right-hand side vector of the linear system.
+ *
+ * bp_data is a pointer to preconditoner data (set by CVBandPrecInit)
+ *
+ * z       is the output vector computed by cvBandPrecSolve.
+ *
+ * The value returned by the cvBandPrecSolve function is always 0,
+ * indicating success.
+ * -----------------------------------------------------------------
+ */ 
+
+static int cvBandPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+                           N_Vector r, N_Vector z, 
+                           realtype gamma, realtype delta,
+                           int lr, void *bp_data, N_Vector tmp)
+{
+  CVBandPrecData pdata;
+  realtype *zd;
+
+  /* Assume matrix and lpivots have already been allocated. */
+  pdata = (CVBandPrecData) bp_data;
+
+  /* Copy r to z. */
+  N_VScale(ONE, r, z);
+
+  /* Do band backsolve on the vector z. */
+  zd = N_VGetArrayPointer(z);
+
+  BandGBTRS(savedP, lpivots, zd);
+
+  return(0);
+}
+
+
+static int cvBandPrecFree(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  CVBandPrecData pdata;
+
+  if (cv_mem->cv_lmem == NULL) return(0);
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+  
+  if (cvspils_mem->s_P_data == NULL) return(0);
+  pdata = (CVBandPrecData) cvspils_mem->s_P_data;
+
+  DestroyMat(savedJ);
+  DestroyMat(savedP);
+  DestroyArray(lpivots);
+
+  free(pdata);
+  pdata = NULL;
+
+  return(0);
+}
+
+
+#define ewt       (cv_mem->cv_ewt)
+#define uround    (cv_mem->cv_uround)
+#define h         (cv_mem->cv_h)
+#define f         (cv_mem->cv_f)
+#define user_data (cv_mem->cv_user_data)
+
+/*
+ * -----------------------------------------------------------------
+ * cvBandPrecDQJac
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation to
+ * the Jacobian of f(t,y). It assumes that a band matrix of type
+ * BandMat is stored column-wise, and that elements within each column
+ * are contiguous. This makes it possible to get the address of a column
+ * of J via the macro BAND_COL and to write a simple for loop to set
+ * each of the elements of a column in succession.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBandPrecDQJac(CVBandPrecData pdata, 
+                           realtype t, N_Vector y, N_Vector fy, 
+                           N_Vector ftemp, N_Vector ytemp)
+{
+  CVodeMem cv_mem;
+  realtype fnorm, minInc, inc, inc_inv, srur;
+  long int group, i, j, width, ngroups, i1, i2;
+  realtype *col_j, *ewt_data, *fy_data, *ftemp_data, *y_data, *ytemp_data;
+  int retval;
+
+  cv_mem = (CVodeMem) pdata->cvode_mem;
+
+  /* Obtain pointers to the data for ewt, fy, ftemp, y, ytemp. */
+  ewt_data   = N_VGetArrayPointer(ewt);
+  fy_data    = N_VGetArrayPointer(fy);
+  ftemp_data = N_VGetArrayPointer(ftemp);
+  y_data     = N_VGetArrayPointer(y);
+  ytemp_data = N_VGetArrayPointer(ytemp);
+
+  /* Load ytemp with y = predicted y vector. */
+  N_VScale(ONE, y, ytemp);
+
+  /* Set minimum increment based on uround and norm of f. */
+  srur = SUNRsqrt(uround);
+  fnorm = N_VWrmsNorm(fy, ewt);
+  minInc = (fnorm != ZERO) ?
+           (MIN_INC_MULT * SUNRabs(h) * uround * N * fnorm) : ONE;
+
+  /* Set bandwidth and number of column groups for band differencing. */
+  width = ml + mu + 1;
+  ngroups = SUNMIN(width, N);
+  
+  for (group = 1; group <= ngroups; group++) {
+    
+    /* Increment all y_j in group. */
+    for(j = group-1; j < N; j += width) {
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      ytemp_data[j] += inc;
+    }
+
+    /* Evaluate f with incremented y. */
+
+    retval = f(t, ytemp, ftemp, user_data);
+    nfeBP++;
+    if (retval != 0) return(retval);
+
+    /* Restore ytemp, then form and load difference quotients. */
+    for (j = group-1; j < N; j += width) {
+      ytemp_data[j] = y_data[j];
+      col_j = BAND_COL(savedJ,j);
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-mu);
+      i2 = SUNMIN(j+ml, N-1);
+      for (i=i1; i <= i2; i++)
+        BAND_COL_ELEM(col_j,i,j) =
+          inc_inv * (ftemp_data[i] - fy_data[i]);
+    }
+  }
+
+  return(0);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * CVBandPrecInitB, CVBPSp*B
+ *
+ * Wrappers for the backward phase around the corresponding 
+ * CVODES functions
+ */
+
+int CVBandPrecInitB(void *cvode_mem, int which, long int nB, long int muB, long int mlB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBANDPRE", "CVBandPrecInitB", MSGBP_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVBANDPRE", "CVBandPrecInitB", MSGBP_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVBANDPRE", "CVBandPrecInitB", MSGBP_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvB_mem->cv_pfree = NULL;
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVBandPrecInit(cvodeB_mem, nB, muB, mlB);
+
+  return(flag);
+}
+
diff --git a/src/cvodes/cvodes_bandpre_impl.h b/src/cvodes/cvodes_bandpre_impl.h
new file mode 100644
index 0000000..dd752c2
--- /dev/null
+++ b/src/cvodes/cvodes_bandpre_impl.h
@@ -0,0 +1,82 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the CVBANDPRE module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSBANDPRE_IMPL_H
+#define _CVSBANDPRE_IMPL_H
+
+#include <cvodes/cvodes_bandpre.h>
+#include <sundials/sundials_band.h>
+#include <sundials/sundials_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVBandPrecData
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVBandPrecDataRec {
+
+  /* Data set by user in CVBandPrecInit */
+
+  long int N;
+  long int ml, mu;
+
+  /* Data set by CVBandPrecSetup */
+
+  DlsMat savedJ;
+  DlsMat savedP;
+  long int *lpivots;
+
+  /* Rhs calls */
+
+  long int nfeBP;
+
+  /* Pointer to cvode_mem */
+
+  void *cvode_mem;
+
+} *CVBandPrecData;
+
+/*
+ * -----------------------------------------------------------------
+ * CVBANDPRE error messages
+ * -----------------------------------------------------------------
+ */
+
+#define MSGBP_MEM_NULL       "Integrator memory is NULL."
+#define MSGBP_LMEM_NULL      "Linear solver memory is NULL. One of the SPILS linear solvers must be attached."
+#define MSGBP_MEM_FAIL       "A memory request failed."
+#define MSGBP_BAD_NVECTOR    "A required vector operation is not implemented."
+#define MSGBP_PMEM_NULL      "Band preconditioner memory is NULL. CVBandPrecInit must be called."
+#define MSGBP_RHSFUNC_FAILED "The right-hand side routine failed in an unrecoverable manner."
+
+#define MSGBP_NO_ADJ         "Illegal attempt to call before calling CVodeAdjInit."
+#define MSGBP_BAD_WHICH      "Illegal value for parameter which."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvodes/cvodes_bbdpre.c b/src/cvodes/cvodes_bbdpre.c
new file mode 100644
index 0000000..1d472ed
--- /dev/null
+++ b/src/cvodes/cvodes_bbdpre.c
@@ -0,0 +1,798 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4923 $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file contains implementations of routines for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with CVODE, a CVSPILS linear
+ * solver, and the parallel implementation of NVECTOR.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes_impl.h"
+#include "cvodes_bbdpre_impl.h"
+#include "cvodes_spils_impl.h"
+
+#include <cvodes/cvodes_sptfqmr.h>
+#include <cvodes/cvodes_spbcgs.h>
+#include <cvodes/cvodes_spgmr.h>
+
+#include <sundials/sundials_math.h>
+
+#define MIN_INC_MULT RCONST(1000.0)
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+
+/* Prototypes of functions cvBBDPrecSetup and cvBBDPrecSolve */
+static int cvBBDPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+                          booleantype jok, booleantype *jcurPtr, 
+                          realtype gamma, void *bbd_data, 
+                          N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int cvBBDPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+                          N_Vector r, N_Vector z, 
+                          realtype gamma, realtype delta,
+                          int lr, void *bbd_data, N_Vector tmp);
+
+/* Prototype for cvBBDPrecFree */
+static int cvBBDPrecFree(CVodeMem cv_mem);
+
+/* Wrapper functions for adjoint code */
+static int cvGlocWrapper(long int NlocalB, realtype t, N_Vector yB, N_Vector gB, 
+                         void *cvadj_mem);
+static int cvCfnWrapper(long int NlocalB, realtype t, N_Vector yB, void *cvadj_mem);
+
+/* Prototype for difference quotient Jacobian calculation routine */
+static int cvBBDDQJac(CVBBDPrecData pdata, realtype t, 
+                      N_Vector y, N_Vector gy, 
+                      N_Vector ytemp, N_Vector gtemp);
+
+/* Prototype for the pfree routine */
+static int CVBBDPrecFreeB(CVodeBMem cvB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Redability replacements */
+
+#define uround   (cv_mem->cv_uround)
+#define vec_tmpl (cv_mem->cv_tempv)
+
+/*
+ * -----------------------------------------------------------------
+ * User-Callable Functions: initialization, reinit and free
+ * -----------------------------------------------------------------
+ */
+
+int CVBBDPrecInit(void *cvode_mem, long int Nlocal, 
+                  long int mudq, long int mldq,
+                  long int mukeep, long int mlkeep, 
+                  realtype dqrely, 
+                  CVLocalFn gloc, CVCommFn cfn)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBBDPrecData pdata;
+  long int muk, mlk, storage_mu;
+  int flag;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  /* Test if the NVECTOR package is compatible with the BLOCK BAND preconditioner */
+  if(vec_tmpl->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_BAD_NVECTOR);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Allocate data memory */
+  pdata = NULL;
+  pdata = (CVBBDPrecData) malloc(sizeof *pdata);  
+  if (pdata == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Set pointers to gloc and cfn; load half-bandwidths */
+  pdata->cvode_mem = cvode_mem;
+  pdata->gloc = gloc;
+  pdata->cfn = cfn;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0,mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0,mldq));
+  muk = SUNMIN(Nlocal-1, SUNMAX(0,mukeep));
+  mlk = SUNMIN(Nlocal-1, SUNMAX(0,mlkeep));
+  pdata->mukeep = muk;
+  pdata->mlkeep = mlk;
+
+  /* Allocate memory for saved Jacobian */
+  pdata->savedJ = NewBandMat(Nlocal, muk, mlk, muk);
+  if (pdata->savedJ == NULL) { 
+    free(pdata); pdata = NULL; 
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL); 
+  }
+
+  /* Allocate memory for preconditioner matrix */
+  storage_mu = SUNMIN(Nlocal-1, muk + mlk);
+  pdata->savedP = NULL;
+  pdata->savedP = NewBandMat(Nlocal, muk, mlk, storage_mu);
+  if (pdata->savedP == NULL) {
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+  /* Allocate memory for lpivots */
+  pdata->lpivots = NULL;
+  pdata->lpivots = NewLintArray(Nlocal);
+  if (pdata->lpivots == NULL) {
+    DestroyMat(pdata->savedP);
+    DestroyMat(pdata->savedJ);
+    free(pdata); pdata = NULL;
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBBDPRE", "CVBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Set pdata->dqrely based on input dqrely (0 implies default). */
+  pdata->dqrely = (dqrely > ZERO) ? dqrely : SUNRsqrt(uround);
+
+  /* Store Nlocal to be used in CVBBDPrecSetup */
+  pdata->n_local = Nlocal;
+
+  /* Set work space sizes and initialize nge */
+  pdata->rpwsize = Nlocal*(muk + 2*mlk + storage_mu + 2);
+  pdata->ipwsize = Nlocal;
+  pdata->nge = 0;
+
+  /* make sure s_P_data is free from any previous allocations */
+  if (cvspils_mem->s_pfree != NULL) {
+    cvspils_mem->s_pfree(cv_mem);
+  }
+
+  /* Point to the new P_data field in the SPILS memory */
+  cvspils_mem->s_P_data = pdata;
+
+  /* Attach the pfree function */
+  cvspils_mem->s_pfree = cvBBDPrecFree;
+
+  /* Attach preconditioner solve and setup functions */
+  flag = CVSpilsSetPreconditioner(cvode_mem, cvBBDPrecSetup, cvBBDPrecSolve);
+
+  return(flag);
+}
+
+
+int CVBBDPrecReInit(void *cvode_mem, 
+                    long int mudq, long int mldq, 
+                    realtype dqrely)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBBDPrecData pdata;
+  long int Nlocal;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBBDPRE", "CVBBDPrecReInit", MSGBBD_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBBDPRE", "CVBBDPrecReInit", MSGBBD_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  /* Test if the preconditioner data is non-NULL */
+  if (cvspils_mem->s_P_data == NULL) {
+    cvProcessError(cv_mem, CVSPILS_PMEM_NULL, "CVBBDPRE", "CVBBDPrecReInit", MSGBBD_PMEM_NULL);
+    return(CVSPILS_PMEM_NULL);
+  } 
+  pdata = (CVBBDPrecData) cvspils_mem->s_P_data;
+
+  /* Load half-bandwidths */
+  Nlocal = pdata->n_local;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0,mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0,mldq));
+
+  /* Set pdata->dqrely based on input dqrely (0 implies default). */
+  pdata->dqrely = (dqrely > ZERO) ? dqrely : SUNRsqrt(uround);
+
+  /* Re-initialize nge */
+  pdata->nge = 0;
+
+  return(CVSPILS_SUCCESS);
+}
+
+int CVBBDPrecGetWorkSpace(void *cvode_mem, long int *lenrwBBDP, long int *leniwBBDP)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBBDPrecData pdata;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBBDPRE", "CVBBDPrecGetWorkSpace", MSGBBD_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBBDPRE", "CVBBDPrecGetWorkSpace", MSGBBD_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  if (cvspils_mem->s_P_data == NULL) {
+    cvProcessError(cv_mem, CVSPILS_PMEM_NULL, "CVBBDPRE", "CVBBDPrecGetWorkSpace", MSGBBD_PMEM_NULL);
+    return(CVSPILS_PMEM_NULL);
+  } 
+  pdata = (CVBBDPrecData) cvspils_mem->s_P_data;
+
+  *lenrwBBDP = pdata->rpwsize;
+  *leniwBBDP = pdata->ipwsize;
+
+  return(CVSPILS_SUCCESS);
+}
+
+int CVBBDPrecGetNumGfnEvals(void *cvode_mem, long int *ngevalsBBDP)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  CVBBDPrecData pdata;
+
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBBDPRE", "CVBBDPrecGetNumGfnEvals", MSGBBD_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVBBDPRE", "CVBBDPrecGetNumGfnEvals", MSGBBD_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+
+  if (cvspils_mem->s_P_data == NULL) {
+    cvProcessError(cv_mem, CVSPILS_PMEM_NULL, "CVBBDPRE", "CVBBDPrecGetNumGfnEvals", MSGBBD_PMEM_NULL);
+    return(CVSPILS_PMEM_NULL);
+  } 
+  pdata = (CVBBDPrecData) cvspils_mem->s_P_data;
+
+  *ngevalsBBDP = pdata->nge;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/* Readability Replacements */
+
+#define Nlocal  (pdata->n_local)
+#define mudq    (pdata->mudq)
+#define mldq    (pdata->mldq)
+#define mukeep  (pdata->mukeep)
+#define mlkeep  (pdata->mlkeep)
+#define dqrely  (pdata->dqrely)
+#define gloc    (pdata->gloc)
+#define cfn     (pdata->cfn)
+#define savedJ  (pdata->savedJ)
+#define savedP  (pdata->savedP)
+#define lpivots (pdata->lpivots)
+#define nge     (pdata->nge)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : cvBBDPrecSetup                                      
+ * -----------------------------------------------------------------
+ * cvBBDPrecSetup generates and factors a banded block of the
+ * preconditioner matrix on each processor, via calls to the
+ * user-supplied gloc and cfn functions. It uses difference
+ * quotient approximations to the Jacobian elements.
+ *
+ * cvBBDPrecSetup calculates a new J,if necessary, then calculates
+ * P = I - gamma*J, and does an LU factorization of P.
+ *
+ * The parameters of cvBBDPrecSetup used here are as follows:
+ *
+ * t       is the current value of the independent variable.
+ *
+ * y       is the current value of the dependent variable vector,
+ *         namely the predicted value of y(t).
+ *
+ * fy      is the vector f(t,y).
+ *
+ * jok     is an input flag indicating whether Jacobian-related
+ *         data needs to be recomputed, as follows:
+ *           jok == FALSE means recompute Jacobian-related data
+ *                  from scratch.
+ *           jok == TRUE  means that Jacobian data from the
+ *                  previous CVBBDPrecon call can be reused
+ *                  (with the current value of gamma).
+ *         A CVBBDPrecon call with jok == TRUE should only occur
+ *         after a call with jok == FALSE.
+ *
+ * jcurPtr is a pointer to an output integer flag which is
+ *         set by CVBBDPrecon as follows:
+ *           *jcurPtr = TRUE if Jacobian data was recomputed.
+ *           *jcurPtr = FALSE if Jacobian data was not recomputed,
+ *                      but saved data was reused.
+ *
+ * gamma   is the scalar appearing in the Newton matrix.
+ *
+ * bbd_data is a pointer to the preconditioner data set by
+ *          CVBBDPrecInit
+ *
+ * tmp1, tmp2, and tmp3 are pointers to memory allocated
+ *           for NVectors which are be used by cvBBDPrecSetup
+ *           as temporary storage or work space.
+ *
+ * Return value:
+ * The value returned by this cvBBDPrecSetup function is the int
+ *   0  if successful,
+ *   1  for a recoverable error (step will be retried).
+ * -----------------------------------------------------------------
+ */
+
+static int cvBBDPrecSetup(realtype t, N_Vector y, N_Vector fy, 
+                          booleantype jok, booleantype *jcurPtr, 
+                          realtype gamma, void *bbd_data, 
+                          N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  CVBBDPrecData pdata;
+  CVodeMem cv_mem;
+  int retval;
+  long int ier;
+
+  pdata = (CVBBDPrecData) bbd_data;
+
+  cv_mem = (CVodeMem) pdata->cvode_mem;
+
+  if (jok) {
+
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    BandCopy(savedJ, savedP, mukeep, mlkeep);
+
+  } else {
+
+    /* Otherwise call cvBBDDQJac for new J value */
+    *jcurPtr = TRUE;
+    SetToZero(savedJ);
+
+    retval = cvBBDDQJac(pdata, t, y, tmp1, tmp2, tmp3);
+    if (retval < 0) {
+      cvProcessError(cv_mem, -1, "CVBBDPRE", "cvBBDPrecSetup", MSGBBD_FUNC_FAILED);
+      return(-1);
+    }
+    if (retval > 0) {
+      return(1);
+    }
+
+    BandCopy(savedJ, savedP, mukeep, mlkeep);
+
+  }
+  
+  /* Scale and add I to get P = I - gamma*J */
+  BandScale(-gamma, savedP);
+  AddIdentity(savedP);
+ 
+  /* Do LU factorization of P in place */
+  ier = BandGBTRF(savedP, lpivots);
+ 
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  if (ier > 0) return(1);
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : cvBBDPrecSolve
+ * -----------------------------------------------------------------
+ * cvBBDPrecSolve solves a linear system P z = r, with the
+ * band-block-diagonal preconditioner matrix P generated and
+ * factored by cvBBDPrecSetup.
+ *
+ * The parameters of cvBBDPrecSolve used here are as follows:
+ *
+ * r is the right-hand side vector of the linear system.
+ *
+ * bbd_data is a pointer to the preconditioner data set by
+ *   CVBBDPrecInit.
+ *
+ * z is the output vector computed by cvBBDPrecSolve.
+ *
+ * The value returned by the cvBBDPrecSolve function is always 0,
+ * indicating success.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBBDPrecSolve(realtype t, N_Vector y, N_Vector fy, 
+                          N_Vector r, N_Vector z, 
+                          realtype gamma, realtype delta,
+                          int lr, void *bbd_data, N_Vector tmp)
+{
+  CVBBDPrecData pdata;
+  realtype *zd;
+
+  pdata = (CVBBDPrecData) bbd_data;
+
+  /* Copy r to z, then do backsolve and return */
+  N_VScale(ONE, r, z);
+  
+  zd = N_VGetArrayPointer(z);
+
+  BandGBTRS(savedP, lpivots, zd);
+
+  return(0);
+}
+
+
+static int cvBBDPrecFree(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  CVBBDPrecData pdata;
+  
+  if (cv_mem->cv_lmem == NULL) return(0);
+  cvspils_mem = (CVSpilsMem) cv_mem->cv_lmem;
+  
+  if (cvspils_mem->s_P_data == NULL) return(0);
+  pdata = (CVBBDPrecData) cvspils_mem->s_P_data;
+
+  DestroyMat(savedJ);
+  DestroyMat(savedP);
+  DestroyArray(lpivots);
+
+  free(pdata);
+  pdata = NULL;
+  
+  return(0);
+}
+
+
+
+#define ewt       (cv_mem->cv_ewt)
+#define h         (cv_mem->cv_h)
+#define user_data (cv_mem->cv_user_data)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : cvBBDDQJac
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation
+ * to the local block of the Jacobian of g(t,y). It assumes that a
+ * band matrix of type BandMat is stored columnwise, and that elements
+ * within each column are contiguous. All matrix elements are generated
+ * as difference quotients, by way of calls to the user routine gloc.
+ * By virtue of the band structure, the number of these calls is
+ * bandwidth + 1, where bandwidth = mldq + mudq + 1.
+ * But the band matrix kept has bandwidth = mlkeep + mukeep + 1.
+ * This routine also assumes that the local elements of a vector are
+ * stored contiguously.
+ * -----------------------------------------------------------------
+ */
+
+static int cvBBDDQJac(CVBBDPrecData pdata, realtype t, 
+                      N_Vector y, N_Vector gy, 
+                      N_Vector ytemp, N_Vector gtemp)
+{
+  CVodeMem cv_mem;
+  realtype gnorm, minInc, inc, inc_inv;
+  long int group, i, j, width, ngroups, i1, i2;
+  realtype *y_data, *ewt_data, *gy_data, *gtemp_data, *ytemp_data, *col_j;
+  int retval;
+
+  cv_mem = (CVodeMem) pdata->cvode_mem;
+
+  /* Load ytemp with y = predicted solution vector */
+  N_VScale(ONE, y, ytemp);
+
+  /* Call cfn and gloc to get base value of g(t,y) */
+  if (cfn != NULL) {
+    retval = cfn(Nlocal, t, y, user_data);
+    if (retval != 0) return(retval);
+  }
+
+  retval = gloc(Nlocal, t, ytemp, gy, user_data);
+  nge++;
+  if (retval != 0) return(retval);
+
+  /* Obtain pointers to the data for various vectors */
+  y_data     =  N_VGetArrayPointer(y);
+  gy_data    =  N_VGetArrayPointer(gy);
+  ewt_data   =  N_VGetArrayPointer(ewt);
+  ytemp_data =  N_VGetArrayPointer(ytemp);
+  gtemp_data =  N_VGetArrayPointer(gtemp);
+
+  /* Set minimum increment based on uround and norm of g */
+  gnorm = N_VWrmsNorm(gy, ewt);
+  minInc = (gnorm != ZERO) ?
+           (MIN_INC_MULT * SUNRabs(h) * uround * Nlocal * gnorm) : ONE;
+
+  /* Set bandwidth and number of column groups for band differencing */
+  width = mldq + mudq + 1;
+  ngroups = SUNMIN(width, Nlocal);
+
+  /* Loop over groups */  
+  for (group=1; group <= ngroups; group++) {
+    
+    /* Increment all y_j in group */
+    for(j=group-1; j < Nlocal; j+=width) {
+      inc = SUNMAX(dqrely*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      ytemp_data[j] += inc;
+    }
+
+    /* Evaluate g with incremented y */
+    retval = gloc(Nlocal, t, ytemp, gtemp, user_data);
+    nge++;
+    if (retval != 0) return(retval);
+
+    /* Restore ytemp, then form and load difference quotients */
+    for (j=group-1; j < Nlocal; j+=width) {
+      ytemp_data[j] = y_data[j];
+      col_j = BAND_COL(savedJ,j);
+      inc = SUNMAX(dqrely*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-mukeep);
+      i2 = SUNMIN(j+mlkeep, Nlocal-1);
+      for (i=i1; i <= i2; i++)
+        BAND_COL_ELEM(col_j,i,j) =
+          inc_inv * (gtemp_data[i] - gy_data[i]);
+    }
+  }
+
+  return(0);
+}
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+
+/* Additional readability replacements */
+
+#define ytmp  (ca_mem->ca_ytmp)
+#define yStmp (ca_mem->ca_yStmp)
+#define IMget (ca_mem->ca_IMget)
+
+#define gloc_B     (cvbbdB_mem->glocB)
+#define cfn_B      (cvbbdB_mem->cfnB)
+
+/*
+ * CVBBDPrecInitB, CVBPSp*B
+ *
+ * Wrappers for the backward phase around the corresponding CVODES functions
+ */
+
+int CVBBDPrecInitB(void *cvode_mem, int which, long int NlocalB, 
+                   long int mudqB, long int mldqB,
+                   long int mukeepB, long int mlkeepB, 
+                   realtype dqrelyB,
+                   CVLocalFnB glocB, CVCommFnB cfnB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  CVBBDPrecDataB cvbbdB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBBDPRE", "CVBBDPrecInitB", MSGBBD_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVBBDPRE", "CVBBDPrecInitB", MSGBBD_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVBBDPRE", "CVBBDPrecInitB", MSGBBD_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Initialize the BBD preconditioner */
+  flag = CVBBDPrecInit(cvodeB_mem, NlocalB, 
+                       mudqB, mldqB,
+                       mukeepB, mlkeepB, 
+                       dqrelyB, 
+                       cvGlocWrapper, cvCfnWrapper);
+
+  if (flag != CV_SUCCESS) return(flag);
+
+
+  /* Get memory for CVBBDPrecDataB to store the user-provided
+   * functions which will be called from the wrappers */
+  cvbbdB_mem = NULL;
+  cvbbdB_mem = (CVBBDPrecDataB) malloc(sizeof(* cvbbdB_mem));
+  if (cvbbdB_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVBBDPRE", "CVBBDPrecInitB", MSGBBD_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  gloc_B = glocB;
+  cfn_B  = cfnB;
+
+  /* attach pmem and pfree */
+  cvB_mem->cv_pmem = cvbbdB_mem;
+  cvB_mem->cv_pfree = CVBBDPrecFreeB;
+
+  return(CVSPILS_SUCCESS);
+}
+
+int CVBBDPrecReInitB(void *cvode_mem, int which, 
+                     long int mudqB, long int mldqB,
+                     realtype dqrelyB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVBBDPRE", "CVBBDPrecReInitB", MSGBBD_MEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVBBDPRE", "CVBBDPrecReInitB", MSGBBD_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVBBDPRE", "CVBBDPrecReInitB", MSGBBD_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+  
+  flag = CVBBDPrecReInit(cvodeB_mem, mudqB, mldqB, dqrelyB);
+
+  return(flag);
+}
+
+
+static int CVBBDPrecFreeB(CVodeBMem cvB_mem)
+{
+  free(cvB_mem->cv_pmem); 
+  cvB_mem->cv_pmem = NULL;
+  return(0);
+}
+
+
+/*
+ * cvGlocWrapper
+ *
+ * This routine interfaces to the CVLocalFnB routine 
+ * provided by the user.
+ */
+
+static int cvGlocWrapper(long int NlocalB, realtype t, N_Vector yB, N_Vector gB, void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVBBDPrecDataB cvbbdB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvbbdB_mem = (CVBBDPrecDataB) (cvB_mem->cv_pmem);
+
+  /* Forward solution from interpolation */
+  flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVBBDPRE", "cvGlocWrapper", MSGBBD_BAD_TINTERP);
+    return(-1);
+  } 
+
+  /* Call user's adjoint glocB routine */
+  retval = gloc_B(NlocalB, t, ytmp, yB, gB, cvB_mem->cv_user_data);
+
+  return(retval);
+}
+
+/*
+ * cvCfnWrapper
+ *
+ * This routine interfaces to the CVCommFnB routine 
+ * provided by the user.
+ */
+
+static int cvCfnWrapper(long int NlocalB, realtype t, N_Vector yB, void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVBBDPrecDataB cvbbdB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvbbdB_mem = (CVBBDPrecDataB) (cvB_mem->cv_pmem);
+
+  if (cfn_B == NULL) return(0);
+
+  /* Forward solution from interpolation */
+  flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVBBDPRE", "cvCfnWrapper", MSGBBD_BAD_TINTERP);
+    return(-1);
+  } 
+
+  /* Call user's adjoint cfnB routine */
+  retval = cfn_B(NlocalB, t, ytmp, yB, cvB_mem->cv_user_data);
+
+  return(retval);
+}
+
diff --git a/src/cvodes/cvodes_bbdpre_impl.h b/src/cvodes/cvodes_bbdpre_impl.h
new file mode 100644
index 0000000..67327e9
--- /dev/null
+++ b/src/cvodes/cvodes_bbdpre_impl.h
@@ -0,0 +1,107 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the CVBBDPRE module.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSBBDPRE_IMPL_H
+#define _CVSBBDPRE_IMPL_H
+
+#include <cvodes/cvodes_bbdpre.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVBBDPrecData
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVBBDPrecDataRec {
+
+  /* passed by user to CVBBDPrecAlloc and used by PrecSetup/PrecSolve */
+
+  long int mudq, mldq, mukeep, mlkeep;
+  realtype dqrely;
+  CVLocalFn gloc;
+  CVCommFn cfn;
+
+  /* set by CVBBDPrecSetup and used by CVBBDPrecSolve */
+
+  DlsMat savedJ;
+  DlsMat savedP;
+  long int *lpivots;
+
+  /* set by CVBBDPrecAlloc and used by CVBBDPrecSetup */
+
+  long int n_local;
+
+  /* available for optional output */
+
+  long int rpwsize;
+  long int ipwsize;
+  long int nge;
+
+  /* pointer to cvode_mem */
+
+  void *cvode_mem;
+
+} *CVBBDPrecData;
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type: CVBBDPrecDataB
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVBBDPrecDataRecB {
+
+  /* BBD user functions (glocB and cfnB) for backward run */
+  CVLocalFnB glocB;
+  CVCommFnB  cfnB;
+
+} *CVBBDPrecDataB;
+
+/*
+ * -----------------------------------------------------------------
+ * CVBBDPRE error messages
+ * -----------------------------------------------------------------
+ */
+
+#define MSGBBD_MEM_NULL    "Integrator memory is NULL."
+#define MSGBBD_LMEM_NULL   "Linear solver memory is NULL. One of the SPILS linear solvers must be attached."
+#define MSGBBD_MEM_FAIL    "A memory request failed."
+#define MSGBBD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGBBD_PMEM_NULL   "BBD peconditioner memory is NULL. CVBBDPrecInit must be called."
+#define MSGBBD_FUNC_FAILED "The gloc or cfn routine failed in an unrecoverable manner."
+
+#define MSGBBD_NO_ADJ      "Illegal attempt to call before calling CVodeAdjInit."
+#define MSGBBD_BAD_WHICH   "Illegal value for the which parameter."
+#define MSGBBD_PDATAB_NULL "BBD preconditioner memory is NULL for the backward integration."
+#define MSGBBD_BAD_TINTERP "Bad t for interpolation."
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvodes/cvodes_dense.c b/src/cvodes/cvodes_dense.c
new file mode 100644
index 0000000..beb64cb
--- /dev/null
+++ b/src/cvodes/cvodes_dense.c
@@ -0,0 +1,455 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4951 $
+ * $Date: 2016-09-22 10:21:00 -0700 (Thu, 22 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSDENSE linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvodes/cvodes_dense.h>
+#include "cvodes_direct_impl.h"
+#include "cvodes_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* CVSDENSE linit, lsetup, lsolve, and lfree routines */
+static int cvDenseInit(CVodeMem cv_mem);
+static int cvDenseSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, 
+                        N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+static int cvDenseSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ycur, N_Vector fcur);
+static int cvDenseFree(CVodeMem cv_mem);
+
+/* CVSDENSE lfreeB function */
+static int cvDenseFreeB(CVodeBMem cvb_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+
+/* Readability Replacements */
+
+#define lmm       (cv_mem->cv_lmm)
+#define f         (cv_mem->cv_f)
+#define nst       (cv_mem->cv_nst)
+#define tn        (cv_mem->cv_tn)
+#define h         (cv_mem->cv_h)
+#define gamma     (cv_mem->cv_gamma)
+#define gammap    (cv_mem->cv_gammap)
+#define gamrat    (cv_mem->cv_gamrat)
+#define ewt       (cv_mem->cv_ewt)
+#define linit     (cv_mem->cv_linit)
+#define lsetup    (cv_mem->cv_lsetup)
+#define lsolve    (cv_mem->cv_lsolve)
+#define lfree     (cv_mem->cv_lfree)
+#define lmem      (cv_mem->cv_lmem)
+#define vec_tmpl     (cv_mem->cv_tempv)
+#define setupNonNull (cv_mem->cv_setupNonNull)
+
+#define mtype     (cvdls_mem->d_type)
+#define n         (cvdls_mem->d_n)
+#define jacDQ     (cvdls_mem->d_jacDQ)
+#define jac       (cvdls_mem->d_djac)
+#define M         (cvdls_mem->d_M)
+#define lpivots   (cvdls_mem->d_lpivots)
+#define savedJ    (cvdls_mem->d_savedJ)
+#define nstlj     (cvdls_mem->d_nstlj)
+#define nje       (cvdls_mem->d_nje)
+#define nfeDQ     (cvdls_mem->d_nfeDQ)
+#define J_data    (cvdls_mem->d_J_data)
+#define last_flag (cvdls_mem->d_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * CVDense
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the dense linear solver module.  CVDense first
+ * calls the existing lfree routine if this is not NULL.  Then it sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be cvDenseInit, cvDenseSetup, cvDenseSolve, and cvDenseFree,
+ * respectively.  It allocates memory for a structure of type
+ * CVDlsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure.  It sets setupNonNull in (*cvode_mem) to
+ * TRUE, and the d_jac field to the default CVDenseDQJac.
+ * Finally, it allocates memory for M, savedJ, and lpivots.
+ * The return value is SUCCESS = 0, or LMEM_FAIL = -1.
+ *
+ * NOTE: The dense linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVDense will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+int CVDense(void *cvode_mem, long int N)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSDENSE", "CVDense", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the DENSE solver */
+  if (vec_tmpl->ops->nvgetarraypointer == NULL ||
+      vec_tmpl->ops->nvsetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSDENSE", "CVDense", MSGD_BAD_NVECTOR);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  if (lfree !=NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */
+  linit  = cvDenseInit;
+  lsetup = cvDenseSetup;
+  lsolve = cvDenseSolve;
+  lfree  = cvDenseFree;
+
+  /* Get memory for CVDlsMemRec */
+  cvdls_mem = NULL;
+  cvdls_mem = (CVDlsMem) malloc(sizeof(struct CVDlsMemRec));
+  if (cvdls_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSDENSE", "CVDense", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_DENSE;
+
+  /* Initialize Jacobian-related data */
+  jacDQ = TRUE;
+  jac = NULL;
+  J_data = NULL;
+
+  last_flag = CVDLS_SUCCESS;
+
+  cvDlsInitializeCounters(cvdls_mem);  
+
+  setupNonNull = TRUE;
+
+  /* Set problem dimension */
+  n = N;
+
+  /* Allocate memory for M, savedJ, and pivot array */
+
+  M = NULL;
+  M = NewDenseMat(N, N);
+  if (M == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSDENSE", "CVDense", MSGD_MEM_FAIL);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  savedJ = NULL;
+  savedJ = NewDenseMat(N, N);
+  if (savedJ == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSDENSE", "CVDense", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  lpivots = NULL;
+  lpivots = NewLintArray(N);
+  if (lpivots == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSDENSE", "CVDense", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    DestroyMat(savedJ);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvdls_mem;
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvDenseInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the dense
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int cvDenseInit(CVodeMem cv_mem)
+{
+  CVDlsMem cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  cvDlsInitializeCounters(cvdls_mem);  
+
+  /*
+   nje   = 0;
+   nfeDQ = 0;
+   nstlj = 0;
+  */
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (jacDQ) {
+    jac = cvDlsDenseDQJac;
+    J_data = cv_mem;
+  } else {
+    J_data = cv_mem->cv_user_data;
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvDenseSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the dense linear solver.
+ * It makes a decision whether or not to call the Jacobian evaluation
+ * routine based on various state variables, and if not it uses the 
+ * saved copy.  In any case, it constructs the Newton matrix 
+ * M = I - gamma*J, updates counters, and calls the dense LU 
+ * factorization routine.
+ * -----------------------------------------------------------------
+ */
+
+static int cvDenseSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, 
+                        N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  CVDlsMem cvdls_mem;
+  booleantype jbad, jok;
+  realtype dgamma;
+  int retval;
+  long int ier;
+
+  cvdls_mem = (CVDlsMem) lmem;
+ 
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+ 
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVD_MSBJ) ||
+         ((convfail == CV_FAIL_BAD_J) && (dgamma < CVD_DGMAX)) ||
+         (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+ 
+  if (jok) {
+
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    DenseCopy(savedJ, M);
+
+  } else {
+
+    /* If jok = FALSE, call jac routine for new J value */
+    nje++;
+    nstlj = nst;
+    *jcurPtr = TRUE;
+    SetToZero(M);
+
+    retval = jac(n, tn, ypred, fpred, M, J_data, vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      cvProcessError(cv_mem, CVDLS_JACFUNC_UNRECVR, "CVSDENSE", "cvDenseSetup", MSGD_JACFUNC_FAILED);
+      last_flag = CVDLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      last_flag = CVDLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    DenseCopy(M, savedJ);
+
+  }
+  
+  /* Scale and add I to get M = I - gamma*J */
+  DenseScale(-gamma, M);
+  AddIdentity(M);
+
+  /* Do LU factorization of M */
+  ier = DenseGETRF(M, lpivots); 
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  last_flag = ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvDenseSolve
+ * -----------------------------------------------------------------
+ * This routine handles the solve operation for the dense linear solver
+ * by calling the dense backsolve routine.  The returned value is 0.
+ * -----------------------------------------------------------------
+ */
+
+static int cvDenseSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ycur, N_Vector fcur)
+{
+  CVDlsMem cvdls_mem;
+  realtype *bd;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  bd = N_VGetArrayPointer(b);
+
+  DenseGETRS(M, lpivots, bd);
+
+  /* If CV_BDF, scale the correction to account for change in gamma */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    N_VScale(TWO/(ONE + gamrat), b, b);
+  }
+  
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvDenseFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the dense linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int cvDenseFree(CVodeMem cv_mem)
+{
+  CVDlsMem  cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  DestroyMat(M);
+  DestroyMat(savedJ);
+  DestroyArray(lpivots);
+  free(cvdls_mem);
+  cv_mem->cv_lmem = NULL;
+
+  return(0);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * CVDenseB is a wrapper around CVDense. It attaches the CVSDENSE linear solver
+ * to the backward problem memory block.
+ */
+
+int CVDenseB(void *cvode_mem, int which, long int nB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  CVDlsMemB cvdlsB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSDENSE", "CVDenseB", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVDLS_NO_ADJ, "CVSDENSE", "CVDenseB", MSGD_NO_ADJ);
+    return(CVDLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSDENSE", "CVDenseB", MSGD_BAD_WHICH);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Get memory for CVDlsMemRecB */
+  cvdlsB_mem = (CVDlsMemB) malloc(sizeof(struct CVDlsMemRecB));
+  if (cvdlsB_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSDENSE", "CVDenseB", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* set matrix type */
+  cvdlsB_mem->d_typeB = SUNDIALS_DENSE;
+
+  /* initialize Jacobian function */
+  cvdlsB_mem->d_djacB = NULL;
+
+  /* attach lmemB and lfreeB */
+  cvB_mem->cv_lmem = cvdlsB_mem;
+  cvB_mem->cv_lfree = cvDenseFreeB;
+
+  flag = CVDense(cvodeB_mem, nB);
+
+  if (flag != CVDLS_SUCCESS) {
+    free(cvdlsB_mem);
+    cvdlsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * cvDenseFreeB frees the memory associated with the CVSDENSE linear
+ * solver for backward integration.
+ */
+
+static int cvDenseFreeB(CVodeBMem cvB_mem)
+{
+  CVDlsMemB cvdlsB_mem;
+
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  free(cvdlsB_mem);
+
+  return(0);
+}
+
diff --git a/src/cvodes/cvodes_diag.c b/src/cvodes/cvodes_diag.c
new file mode 100644
index 0000000..e04b173
--- /dev/null
+++ b/src/cvodes/cvodes_diag.c
@@ -0,0 +1,515 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4923 $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVDIAG linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes_diag_impl.h"
+#include "cvodes_impl.h"
+
+/* Other Constants */
+  
+#define FRACT RCONST(0.1)
+#define ONE   RCONST(1.0)
+
+/* CVDIAG linit, lsetup, lsolve, and lfree routines */
+
+static int CVDiagInit(CVodeMem cv_mem);
+
+static int CVDiagSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                       N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                       N_Vector vtemp2, N_Vector vtemp3);
+
+static int CVDiagSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                       N_Vector ycur, N_Vector fcur);
+
+static int CVDiagFree(CVodeMem cv_mem);
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+
+/* Readability Replacements */
+
+#define lrw1      (cv_mem->cv_lrw1)
+#define liw1      (cv_mem->cv_liw1)
+#define f         (cv_mem->cv_f)
+#define uround    (cv_mem->cv_uround)
+#define tn        (cv_mem->cv_tn)
+#define h         (cv_mem->cv_h)
+#define rl1       (cv_mem->cv_rl1)
+#define gamma     (cv_mem->cv_gamma)
+#define ewt       (cv_mem->cv_ewt)
+#define nfe       (cv_mem->cv_nfe)
+#define zn        (cv_mem->cv_zn)
+#define linit     (cv_mem->cv_linit)
+#define lsetup    (cv_mem->cv_lsetup)
+#define lsolve    (cv_mem->cv_lsolve)
+#define lfree     (cv_mem->cv_lfree)
+#define lmem      (cv_mem->cv_lmem)
+#define vec_tmpl  (cv_mem->cv_tempv)
+#define setupNonNull (cv_mem->cv_setupNonNull)
+
+#define gammasv   (cvdiag_mem->di_gammasv)
+#define M         (cvdiag_mem->di_M)
+#define bit       (cvdiag_mem->di_bit)
+#define bitcomp   (cvdiag_mem->di_bitcomp)
+#define nfeDI     (cvdiag_mem->di_nfeDI)
+#define last_flag (cvdiag_mem->di_last_flag)
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiag 
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the diagonal linear solver module.  CVDense first
+ * calls the existing lfree routine if this is not NULL.  Then it sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be CVDiagInit, CVDiagSetup, CVDiagSolve, and CVDiagFree,
+ * respectively.  It allocates memory for a structure of type
+ * CVDiagMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure.  It sets setupNonNull in (*cvode_mem) to
+ * TRUE.  Finally, it allocates memory for M, bit, and bitcomp.
+ * The CVDiag return value is SUCCESS = 0, LMEM_FAIL = -1, or 
+ * LIN_ILL_INPUT=-2.
+ * -----------------------------------------------------------------
+ */
+  
+int CVDiag(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+  CVDiagMem cvdiag_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDIAG_MEM_NULL, "CVDIAG", "CVDiag", MSGDG_CVMEM_NULL);
+    return(CVDIAG_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if N_VCompare and N_VInvTest are present */
+  if(vec_tmpl->ops->nvcompare == NULL ||
+     vec_tmpl->ops->nvinvtest == NULL) {
+    cvProcessError(cv_mem, CVDIAG_ILL_INPUT, "CVDIAG", "CVDiag", MSGDG_BAD_NVECTOR);
+    return(CVDIAG_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+  
+  /* Set four main function fields in cv_mem */
+  linit  = CVDiagInit;
+  lsetup = CVDiagSetup;
+  lsolve = CVDiagSolve;
+  lfree  = CVDiagFree;
+
+  /* Get memory for CVDiagMemRec */
+  cvdiag_mem = NULL;
+  cvdiag_mem = (CVDiagMem) malloc(sizeof(CVDiagMemRec));
+  if (cvdiag_mem == NULL) {
+    cvProcessError(cv_mem, CVDIAG_MEM_FAIL, "CVDIAG", "CVDiag", MSGDG_MEM_FAIL);
+    return(CVDIAG_MEM_FAIL);
+  }
+
+  last_flag = CVDIAG_SUCCESS;
+
+  /* Set flag setupNonNull = TRUE */
+  setupNonNull = TRUE;
+
+  /* Allocate memory for M, bit, and bitcomp */
+    
+  M = N_VClone(vec_tmpl);
+  if (M == NULL) {
+    cvProcessError(cv_mem, CVDIAG_MEM_FAIL, "CVDIAG", "CVDiag", MSGDG_MEM_FAIL);
+    free(cvdiag_mem); cvdiag_mem = NULL;
+    return(CVDIAG_MEM_FAIL);
+  }
+  bit = N_VClone(vec_tmpl);
+  if (bit == NULL) {
+    cvProcessError(cv_mem, CVDIAG_MEM_FAIL, "CVDIAG", "CVDiag", MSGDG_MEM_FAIL);
+    N_VDestroy(M);
+    free(cvdiag_mem); cvdiag_mem = NULL;
+    return(CVDIAG_MEM_FAIL);
+  }
+  bitcomp = N_VClone(vec_tmpl);
+  if (bitcomp == NULL) {
+    cvProcessError(cv_mem, CVDIAG_MEM_FAIL, "CVDIAG", "CVDiag", MSGDG_MEM_FAIL);
+    N_VDestroy(M);
+    N_VDestroy(bit);
+    free(cvdiag_mem); cvdiag_mem = NULL;
+    return(CVDIAG_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvdiag_mem;
+
+  return(CVDIAG_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagGetWorkSpace
+ * -----------------------------------------------------------------
+ */
+
+int CVDiagGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS)
+{
+  CVodeMem cv_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDIAG_MEM_NULL, "CVDIAG", "CVDiagGetWorkSpace", MSGDG_CVMEM_NULL);
+    return(CVDIAG_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *lenrwLS = 3*lrw1;
+  *leniwLS = 3*liw1;
+
+  return(CVDIAG_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagGetNumRhsEvals
+ * -----------------------------------------------------------------
+ */
+
+int CVDiagGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS)
+{
+  CVodeMem cv_mem;
+  CVDiagMem cvdiag_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDIAG_MEM_NULL, "CVDIAG", "CVDiagGetNumRhsEvals", MSGDG_CVMEM_NULL);
+    return(CVDIAG_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDIAG_LMEM_NULL, "CVDIAG", "CVDiagGetNumRhsEvals", MSGDG_LMEM_NULL);
+    return(CVDIAG_LMEM_NULL);
+  }
+  cvdiag_mem = (CVDiagMem) lmem;
+
+  *nfevalsLS = nfeDI;
+
+  return(CVDIAG_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagGetLastFlag
+ * -----------------------------------------------------------------
+ */
+
+int CVDiagGetLastFlag(void *cvode_mem, long int *flag)
+{
+  CVodeMem cv_mem;
+  CVDiagMem cvdiag_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDIAG_MEM_NULL, "CVDIAG", "CVDiagGetLastFlag", MSGDG_CVMEM_NULL);
+    return(CVDIAG_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDIAG_LMEM_NULL, "CVDIAG", "CVDiagGetLastFlag", MSGDG_LMEM_NULL);
+    return(CVDIAG_LMEM_NULL);
+  }
+  cvdiag_mem = (CVDiagMem) lmem;
+
+  *flag = last_flag;
+
+  return(CVDIAG_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagGetReturnFlagName
+ * -----------------------------------------------------------------
+ */
+
+char *CVDiagGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case CVDIAG_SUCCESS:
+    sprintf(name,"CVDIAG_SUCCESS");
+    break;  
+  case CVDIAG_MEM_NULL:
+    sprintf(name,"CVDIAG_MEM_NULL");
+    break;
+  case CVDIAG_LMEM_NULL:
+    sprintf(name,"CVDIAG_LMEM_NULL");
+    break;
+  case CVDIAG_ILL_INPUT:
+    sprintf(name,"CVDIAG_ILL_INPUT");
+    break;
+  case CVDIAG_MEM_FAIL:
+    sprintf(name,"CVDIAG_MEM_FAIL");
+    break;
+  case CVDIAG_INV_FAIL:
+    sprintf(name,"CVDIAG_INV_FAIL");
+    break;
+  case CVDIAG_RHSFUNC_UNRECVR:
+    sprintf(name,"CVDIAG_RHSFUNC_UNRECVR");
+    break;
+  case CVDIAG_RHSFUNC_RECVR:
+    sprintf(name,"CVDIAG_RHSFUNC_RECVR");
+    break;
+  case CVDIAG_NO_ADJ:
+    sprintf(name,"CVDIAG_NO_ADJ");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the diagonal
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVDiagInit(CVodeMem cv_mem)
+{
+  CVDiagMem cvdiag_mem;
+
+  cvdiag_mem = (CVDiagMem) lmem;
+
+  nfeDI = 0;
+
+  last_flag = CVDIAG_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the diagonal linear 
+ * solver.  It constructs a diagonal approximation to the Newton matrix 
+ * M = I - gamma*J, updates counters, and inverts M.
+ * -----------------------------------------------------------------
+ */
+
+static int CVDiagSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                       N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                       N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype r;
+  N_Vector ftemp, y;
+  booleantype invOK;
+  CVDiagMem cvdiag_mem;
+  int retval;
+
+  cvdiag_mem = (CVDiagMem) lmem;
+
+  /* Rename work vectors for use as temporary values of y and f */
+  ftemp = vtemp1;
+  y     = vtemp2;
+
+  /* Form y with perturbation = FRACT*(func. iter. correction) */
+  r = FRACT * rl1;
+  N_VLinearSum(h, fpred, -ONE, zn[1], ftemp);
+  N_VLinearSum(r, ftemp, ONE, ypred, y);
+
+  /* Evaluate f at perturbed y */
+  retval = f(tn, y, M, cv_mem->cv_user_data);
+  nfeDI++;
+  if (retval < 0) {
+    cvProcessError(cv_mem, CVDIAG_RHSFUNC_UNRECVR, "CVDIAG", "CVDiagSetup", MSGDG_RHSFUNC_FAILED);
+    last_flag = CVDIAG_RHSFUNC_UNRECVR;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = CVDIAG_RHSFUNC_RECVR;
+    return(1);
+  }
+
+  /* Construct M = I - gamma*J with J = diag(deltaf_i/deltay_i) */
+  N_VLinearSum(ONE, M, -ONE, fpred, M);
+  N_VLinearSum(FRACT, ftemp, -h, M, M);
+  N_VProd(ftemp, ewt, y);
+  /* Protect against deltay_i being at roundoff level */
+  N_VCompare(uround, y, bit);
+  N_VAddConst(bit, -ONE, bitcomp);
+  N_VProd(ftemp, bit, y);
+  N_VLinearSum(FRACT, y, -ONE, bitcomp, y);
+  N_VDiv(M, y, M);
+  N_VProd(M, bit, M);
+  N_VLinearSum(ONE, M, -ONE, bitcomp, M);
+
+  /* Invert M with test for zero components */
+  invOK = N_VInvTest(M, M);
+  if (!invOK) {
+    last_flag = CVDIAG_INV_FAIL;
+    return(1);
+  }
+
+  /* Set jcur = TRUE, save gamma in gammasv, and return */
+  *jcurPtr = TRUE;
+  gammasv = gamma;
+  last_flag = CVDIAG_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagSolve
+ * -----------------------------------------------------------------
+ * This routine performs the solve operation for the diagonal linear
+ * solver.  If necessary it first updates gamma in M = I - gamma*J.
+ * -----------------------------------------------------------------
+ */
+
+static int CVDiagSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                       N_Vector ycur, N_Vector fcur)
+{
+  booleantype invOK;
+  realtype r;
+  CVDiagMem cvdiag_mem;
+
+  cvdiag_mem = (CVDiagMem) lmem;
+  
+  /* If gamma has changed, update factor in M, and save gamma value */
+
+  if (gammasv != gamma) {
+    r = gamma / gammasv;
+    N_VInv(M, M);
+    N_VAddConst(M, -ONE, M);
+    N_VScale(r, M, M);
+    N_VAddConst(M, ONE, M);
+    invOK = N_VInvTest(M, M);
+    if (!invOK) {
+      last_flag = CVDIAG_INV_FAIL;
+      return (1);
+    }
+    gammasv = gamma;
+  }
+
+  /* Apply M-inverse to b */
+  N_VProd(b, M, b);
+
+  last_flag = CVDIAG_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVDiagFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the diagonal linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVDiagFree(CVodeMem cv_mem)
+{
+  CVDiagMem cvdiag_mem;
+  
+  cvdiag_mem = (CVDiagMem) lmem;
+
+  N_VDestroy(M);
+  N_VDestroy(bit);
+  N_VDestroy(bitcomp);
+  free(cvdiag_mem);
+  cv_mem->cv_lmem = NULL;
+  
+  return(0);
+}
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+
+/*
+ * CVDiagB
+ *
+ * Wrappers for the backward phase around the corresponding 
+ * CVODES functions
+ */
+
+int CVDiagB(void *cvode_mem, int which)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+    /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDIAG_MEM_NULL, "CVSDIAG", "CVDiagB", MSGDG_CVMEM_NULL);
+    return(CVDIAG_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVDIAG_NO_ADJ, "CVSDIAG", "CVDiagB", MSGDG_NO_ADJ);
+    return(CVDIAG_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVDIAG_ILL_INPUT, "CVSDIAG", "CVDiagB", MSGDG_BAD_WHICH);
+    return(CVDIAG_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+  
+  flag = CVDiag(cvodeB_mem);
+
+  return(flag);
+}
+
diff --git a/src/cvodes/cvodes_diag_impl.h b/src/cvodes/cvodes_diag_impl.h
new file mode 100644
index 0000000..bd84ab4
--- /dev/null
+++ b/src/cvodes/cvodes_diag_impl.h
@@ -0,0 +1,72 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the diagonal linear solver, CVDIAG.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSDIAG_IMPL_H
+#define _CVSDIAG_IMPL_H
+
+#include <cvodes/cvodes_diag.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Types: CVDiagMemRec, CVDiagMem
+ * -----------------------------------------------------------------
+ * The type CVDiagMem is pointer to a CVDiagMemRec.
+ * This structure contains CVDiag solver-specific data.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct {
+
+  realtype di_gammasv; /* gammasv = gamma at the last call to setup or solve */
+
+  N_Vector di_M;       /* M = (I - gamma J)^{-1} , gamma = h / l1   */
+
+  N_Vector di_bit;     /* temporary storage vector                  */
+
+  N_Vector di_bitcomp; /* temporary storage vector                  */
+
+  long int di_nfeDI;   /* no. of calls to f due to difference 
+			  quotient diagonal Jacobian approximation  */
+
+  long int di_last_flag; /* last error return flag                  */
+
+} CVDiagMemRec, *CVDiagMem;
+
+/* Error Messages */
+
+#define MSGDG_CVMEM_NULL "Integrator memory is NULL."
+#define MSGDG_MEM_FAIL "A memory request failed."
+#define MSGDG_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGDG_LMEM_NULL "CVDIAG memory is NULL."
+#define MSGDG_RHSFUNC_FAILED "The right-hand side routine failed in an unrecoverable manner."
+
+#define MSGDG_NO_ADJ "Illegal attempt to call before calling CVodeAdjMalloc."
+#define MSGDG_BAD_WHICH "Illegal value for which."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvodes/cvodes_direct.c b/src/cvodes/cvodes_direct.c
new file mode 100644
index 0000000..8575679
--- /dev/null
+++ b/src/cvodes/cvodes_direct.c
@@ -0,0 +1,936 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSDLS linear solvers
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes_impl.h"
+#include "cvodes_direct_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+/* Constant for DQ Jacobian approximation */
+#define MIN_INC_MULT RCONST(1000.0)
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTION PROTOTYPES
+ * =================================================================
+ */
+
+static int cvDlsDenseJacBWrapper(long int nB, realtype t,
+                                 N_Vector yB, N_Vector fyB, 
+                                 DlsMat JB, void *cvode_mem,
+                                 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+static int cvDlsDenseJacBSWrapper(long int nB, realtype t,
+                                 N_Vector yB, N_Vector fyB, 
+                                 DlsMat JB, void *cvode_mem,
+                                 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+static int cvDlsBandJacBWrapper(long int nB, long int mupperB, long int mlowerB, 
+                                realtype t, N_Vector yB, N_Vector fyB, 
+                                DlsMat Jac, void *cvode_mem, 
+                                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+static int cvDlsBandJacBSWrapper(long int nB, long int mupperB, long int mlowerB, 
+                                realtype t, N_Vector yB, N_Vector fyB, 
+                                DlsMat Jac, void *cvode_mem, 
+                                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define f              (cv_mem->cv_f)
+#define user_data      (cv_mem->cv_user_data)
+#define uround         (cv_mem->cv_uround)
+#define nst            (cv_mem->cv_nst)
+#define tn             (cv_mem->cv_tn)
+#define h              (cv_mem->cv_h)
+#define gamma          (cv_mem->cv_gamma)
+#define gammap         (cv_mem->cv_gammap)
+#define gamrat         (cv_mem->cv_gamrat)
+#define ewt            (cv_mem->cv_ewt)
+
+#define lmem           (cv_mem->cv_lmem)
+
+#define mtype          (cvdls_mem->d_type)
+#define n              (cvdls_mem->d_n)
+#define ml             (cvdls_mem->d_ml)
+#define mu             (cvdls_mem->d_mu)
+#define smu            (cvdls_mem->d_smu)
+#define jacDQ          (cvdls_mem->d_jacDQ)
+#define djac           (cvdls_mem->d_djac)
+#define bjac           (cvdls_mem->d_bjac)
+#define M              (cvdls_mem->d_M)
+#define savedJ         (cvdls_mem->d_savedJ)
+#define pivots         (cvdls_mem->d_pivots)
+#define nstlj          (cvdls_mem->d_nstlj)
+#define nje            (cvdls_mem->d_nje)
+#define nfeDQ          (cvdls_mem->d_nfeDQ)
+#define last_flag      (cvdls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS (FORWARD INTEGRATION)
+ * =================================================================
+ */
+
+/*
+ * CVDlsSetDenseJacFn specifies the dense Jacobian function.
+ */
+int CVDlsSetDenseJacFn(void *cvode_mem, CVDlsDenseJacFn jac)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVDLS", "CVDlsSetDenseJacFn", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVDLS", "CVDlsSetDenseJacFn", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  if (jac != NULL) {
+    jacDQ = FALSE;
+    djac = jac;
+  } else {
+    jacDQ = TRUE;
+  }
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * CVDlsSetBandJacFn specifies the band Jacobian function.
+ */
+int CVDlsSetBandJacFn(void *cvode_mem, CVDlsBandJacFn jac)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVDLS", "CVDlsSetBandJacFn", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVDLS", "CVDlsSetBandJacFn", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  if (jac != NULL) {
+    jacDQ = FALSE;
+    bjac = jac;
+  } else {
+    jacDQ = TRUE;
+  }
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * CVDlsGetWorkSpace returns the length of workspace allocated for the
+ * CVDLS linear solver.
+ */
+int CVDlsGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSDLS", "CVDlsGetWorkSpace", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVSDLS", "CVDlsGetWorkSpace", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  if (mtype == SUNDIALS_DENSE) {
+    *lenrwLS = 2*n*n;
+    *leniwLS = n;
+  } else if (mtype == SUNDIALS_BAND) {
+    *lenrwLS = n*(smu + mu + 2*ml + 2);
+    *leniwLS = n;
+  }
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * CVDlsGetNumJacEvals returns the number of Jacobian evaluations.
+ */
+int CVDlsGetNumJacEvals(void *cvode_mem, long int *njevals)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSDLS", "CVDlsGetNumJacEvals", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVSDLS", "CVDlsGetNumJacEvals", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  *njevals = nje;
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * CVDlsGetNumRhsEvals returns the number of calls to the ODE function
+ * needed for the DQ Jacobian approximation.
+ */
+int CVDlsGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSDLS", "CVDlsGetNumRhsEvals", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVSDLS", "CVDlsGetNumRhsEvals", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  *nfevalsLS = nfeDQ;
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * CVDlsGetReturnFlagName returns the name associated with a CVDLS
+ * return value.
+ */
+char *CVDlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case CVDLS_SUCCESS:
+    sprintf(name,"CVDLS_SUCCESS");
+    break;   
+  case CVDLS_MEM_NULL:
+    sprintf(name,"CVDLS_MEM_NULL");
+    break;
+  case CVDLS_LMEM_NULL:
+    sprintf(name,"CVDLS_LMEM_NULL");
+    break;
+  case CVDLS_ILL_INPUT:
+    sprintf(name,"CVDLS_ILL_INPUT");
+    break;
+  case CVDLS_MEM_FAIL:
+    sprintf(name,"CVDLS_MEM_FAIL");
+    break;
+  case CVDLS_JACFUNC_UNRECVR:
+    sprintf(name,"CVDLS_JACFUNC_UNRECVR");
+    break;
+  case CVDLS_JACFUNC_RECVR:
+    sprintf(name,"CVDLS_JACFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * CVDlsGetLastFlag returns the last flag set in a CVDLS function.
+ */
+int CVDlsGetLastFlag(void *cvode_mem, long int *flag)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSDLS", "CVDlsGetLastFlag", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEM_NULL, "CVSDLS", "CVDlsGetLastFlag", MSGD_LMEM_NULL);
+    return(CVDLS_LMEM_NULL);
+  }
+  cvdls_mem = (CVDlsMem) lmem;
+
+  *flag = last_flag;
+
+  return(CVDLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * DQ JACOBIAN APPROXIMATIONS
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * cvDlsDenseDQJac 
+ * -----------------------------------------------------------------
+ * This routine generates a dense difference quotient approximation to
+ * the Jacobian of f(t,y). It assumes that a dense matrix of type
+ * DlsMat is stored column-wise, and that elements within each column
+ * are contiguous. The address of the jth column of J is obtained via
+ * the macro DENSE_COL and this pointer is associated with an N_Vector
+ * using the N_VGetArrayPointer/N_VSetArrayPointer functions. 
+ * Finally, the actual computation of the jth column of the Jacobian is 
+ * done with a call to N_VLinearSum.
+ * -----------------------------------------------------------------
+ */ 
+
+int cvDlsDenseDQJac(long int N, realtype t,
+                    N_Vector y, N_Vector fy, 
+                    DlsMat Jac, void *data,
+                    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype fnorm, minInc, inc, inc_inv, yjsaved, srur;
+  realtype *tmp2_data, *y_data, *ewt_data;
+  N_Vector ftemp, jthCol;
+  long int j;
+  int retval = 0;
+
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* data points to cvode_mem */
+  cv_mem = (CVodeMem) data;
+  cvdls_mem = (CVDlsMem) lmem;
+
+  /* Save pointer to the array in tmp2 */
+  tmp2_data = N_VGetArrayPointer(tmp2);
+
+  /* Rename work vectors for readibility */
+  ftemp = tmp1; 
+  jthCol = tmp2;
+
+  /* Obtain pointers to the data for ewt, y */
+  ewt_data = N_VGetArrayPointer(ewt);
+  y_data   = N_VGetArrayPointer(y);
+
+  /* Set minimum increment based on uround and norm of f */
+  srur = SUNRsqrt(uround);
+  fnorm = N_VWrmsNorm(fy, ewt);
+  minInc = (fnorm != ZERO) ?
+           (MIN_INC_MULT * SUNRabs(h) * uround * N * fnorm) : ONE;
+
+  for (j = 0; j < N; j++) {
+
+    /* Generate the jth col of J(tn,y) */
+
+    N_VSetArrayPointer(DENSE_COL(Jac,j), jthCol);
+
+    yjsaved = y_data[j];
+    inc = SUNMAX(srur*SUNRabs(yjsaved), minInc/ewt_data[j]);
+    y_data[j] += inc;
+
+    retval = f(t, y, ftemp, user_data);
+    nfeDQ++;
+    if (retval != 0) break;
+    
+    y_data[j] = yjsaved;
+
+    inc_inv = ONE/inc;
+    N_VLinearSum(inc_inv, ftemp, -inc_inv, fy, jthCol);
+
+    DENSE_COL(Jac,j) = N_VGetArrayPointer(jthCol);
+  }
+
+  /* Restore original array pointer in tmp2 */
+  N_VSetArrayPointer(tmp2_data, tmp2);
+
+  return(retval);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * cvDlsBandDQJac
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation to
+ * the Jacobian of f(t,y).  It assumes that a band matrix of type
+ * DlsMat is stored column-wise, and that elements within each column
+ * are contiguous. This makes it possible to get the address of a column
+ * of J via the macro BAND_COL and to write a simple for loop to set
+ * each of the elements of a column in succession.
+ * -----------------------------------------------------------------
+ */
+
+int cvDlsBandDQJac(long int N, long int mupper, long int mlower,
+                   realtype t, N_Vector y, N_Vector fy, 
+                   DlsMat Jac, void *data,
+                   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  N_Vector ftemp, ytemp;
+  realtype fnorm, minInc, inc, inc_inv, srur;
+  realtype *col_j, *ewt_data, *fy_data, *ftemp_data, *y_data, *ytemp_data;
+  long int group, i, j, width, ngroups, i1, i2;
+  int retval = 0;
+
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* data points to cvode_mem */
+  cv_mem = (CVodeMem) data;
+  cvdls_mem = (CVDlsMem) lmem;
+
+  /* Rename work vectors for use as temporary values of y and f */
+  ftemp = tmp1;
+  ytemp = tmp2;
+
+  /* Obtain pointers to the data for ewt, fy, ftemp, y, ytemp */
+  ewt_data   = N_VGetArrayPointer(ewt);
+  fy_data    = N_VGetArrayPointer(fy);
+  ftemp_data = N_VGetArrayPointer(ftemp);
+  y_data     = N_VGetArrayPointer(y);
+  ytemp_data = N_VGetArrayPointer(ytemp);
+
+  /* Load ytemp with y = predicted y vector */
+  N_VScale(ONE, y, ytemp);
+
+  /* Set minimum increment based on uround and norm of f */
+  srur = SUNRsqrt(uround);
+  fnorm = N_VWrmsNorm(fy, ewt);
+  minInc = (fnorm != ZERO) ?
+           (MIN_INC_MULT * SUNRabs(h) * uround * N * fnorm) : ONE;
+
+  /* Set bandwidth and number of column groups for band differencing */
+  width = mlower + mupper + 1;
+  ngroups = SUNMIN(width, N);
+
+  /* Loop over column groups. */
+  for (group=1; group <= ngroups; group++) {
+    
+    /* Increment all y_j in group */
+    for(j=group-1; j < N; j+=width) {
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      ytemp_data[j] += inc;
+    }
+
+    /* Evaluate f with incremented y */
+
+    retval = f(tn, ytemp, ftemp, user_data);
+    nfeDQ++;
+    if (retval != 0) break;
+
+    /* Restore ytemp, then form and load difference quotients */
+    for (j=group-1; j < N; j+=width) {
+      ytemp_data[j] = y_data[j];
+      col_j = BAND_COL(Jac,j);
+      inc = SUNMAX(srur*SUNRabs(y_data[j]), minInc/ewt_data[j]);
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-mupper);
+      i2 = SUNMIN(j+mlower, N-1);
+      for (i=i1; i <= i2; i++)
+        BAND_COL_ELEM(col_j,i,j) = inc_inv * (ftemp_data[i] - fy_data[i]);
+    }
+  }
+  
+  return(retval);
+}
+
+
+int cvDlsInitializeCounters(CVDlsMem cvdls_mem)
+{
+  cvdls_mem->d_nje   = 0;
+  cvdls_mem->d_nfeDQ = 0;
+  cvdls_mem->d_nstlj = 0;
+  
+  return(0);
+}
+
+
+/* 
+ * =================================================================
+ * BACKWARD INTEGRATION SUPPORT
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Additional readability replacements 
+ * -----------------------------------------------------------------
+ */
+
+#define ytmp  (ca_mem->ca_ytmp)
+#define yStmp (ca_mem->ca_yStmp)
+#define IMget (ca_mem->ca_IMget)
+#define IMinterpSensi (ca_mem->ca_IMinterpSensi)
+
+#define mtypeB     (cvdlsB_mem->d_typeB)
+#define djacB      (cvdlsB_mem->d_djacB)
+#define djacBS     (cvdlsB_mem->d_djacBS)
+#define bjacB      (cvdlsB_mem->d_bjacB)
+#define bjacBS     (cvdlsB_mem->d_bjacBS)
+
+/*
+ * -----------------------------------------------------------------
+ * EXPORTED FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+int CVDlsSetDenseJacFnB(void *cvode_mem, int which, CVDlsDenseJacFnB jacB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVDlsMemB cvdlsB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSDLS", "CVDlsSetDenseJacFnB", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVDLS_NO_ADJ, "CVSDLS", "CVDlsSetDenseJacFnB", MSGD_NO_ADJ);
+    return(CVDLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSDLS", "CVDlsSetDenseJacFnB", MSGD_BAD_WHICH);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  if (cvB_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEMB_NULL, "CVSDLS", "CVDlsSetDenseJacFnB", MSGD_LMEMB_NULL);
+    return(CVDLS_LMEMB_NULL);
+  }
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  djacB = jacB;
+
+  if (jacB != NULL) {
+    flag = CVDlsSetDenseJacFn(cvodeB_mem, cvDlsDenseJacBWrapper);
+  } else {
+    flag = CVDlsSetDenseJacFn(cvodeB_mem, NULL);
+  }
+
+  return(flag);
+}
+
+int CVDlsSetDenseJacFnBS(void *cvode_mem, int which, CVDlsDenseJacFnBS jacBS)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVDlsMemB cvdlsB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSDLS", "CVDlsSetDenseJacFnBS", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVDLS_NO_ADJ, "CVSDLS", "CVDlsSetDenseJacFnBS", MSGD_NO_ADJ);
+    return(CVDLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSDLS", "CVDlsSetDenseJacFnBS", MSGD_BAD_WHICH);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  if (cvB_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEMB_NULL, "CVSDLS", "CVDlsSetDenseJacFnBS", MSGD_LMEMB_NULL);
+    return(CVDLS_LMEMB_NULL);
+  }
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  djacBS = jacBS;
+
+  if (jacBS != NULL) {
+    flag = CVDlsSetDenseJacFn(cvodeB_mem, cvDlsDenseJacBSWrapper);
+  } else {
+    flag = CVDlsSetDenseJacFn(cvodeB_mem, NULL);
+  }
+
+  return(flag);
+}
+
+int CVDlsSetBandJacFnB(void *cvode_mem, int which, CVDlsBandJacFnB jacB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVDlsMemB cvdlsB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSDLS", "CVDlsSetBandJacFnB", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVDLS_NO_ADJ, "CVSDLS", "CVDlsSetBandJacFnB", MSGD_NO_ADJ);
+    return(CVDLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSDLS", "CVDlsSetBandJacFnB", MSGD_BAD_WHICH);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  if (cvB_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEMB_NULL, "CVSDLS", "CVDlsSetBandJacFnB", MSGD_LMEMB_NULL);
+    return(CVDLS_LMEMB_NULL);
+  }
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  bjacB = jacB;
+
+  if (jacB != NULL) {
+    flag = CVDlsSetBandJacFn(cvodeB_mem, cvDlsBandJacBWrapper);
+  } else {
+    flag = CVDlsSetBandJacFn(cvodeB_mem, NULL);
+  }
+
+  return(flag);
+}
+
+int CVDlsSetBandJacFnBS(void *cvode_mem, int which, CVDlsBandJacFnBS jacBS)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVDlsMemB cvdlsB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSDLS", "CVDlsSetBandJacFnBS", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVDLS_NO_ADJ, "CVSDLS", "CVDlsSetBandJacFnBS", MSGD_NO_ADJ);
+    return(CVDLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSDLS", "CVDlsSetBandJacFnBS", MSGD_BAD_WHICH);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  if (cvB_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVDLS_LMEMB_NULL, "CVSDLS", "CVDlsSetBandJacFnBS", MSGD_LMEMB_NULL);
+    return(CVDLS_LMEMB_NULL);
+  }
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  bjacBS = jacBS;
+
+  if (jacBS != NULL) {
+    flag = CVDlsSetBandJacFn(cvodeB_mem, cvDlsBandJacBSWrapper);
+  } else {
+    flag = CVDlsSetBandJacFn(cvodeB_mem, NULL);
+  }
+
+  return(flag);
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * PRIVATE INTERFACE FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvDlsDenseJacBWrapper
+ *
+ * This routine interfaces to the CVDlsDenseJacFnB routine provided 
+ * by the user. cvDlsDenseJacBWrapper is of type CVDlsDenseJacFn.
+ * NOTE: data here contains cvode_mem
+ */
+
+static int cvDlsDenseJacBWrapper(long int nB, realtype t,
+                                 N_Vector yB, N_Vector fyB, 
+                                 DlsMat JB, void *cvode_mem,
+                                 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVDlsMemB cvdlsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSDLS", "cvDlsDenseJacBWrapper", MSGD_BAD_TINTERP);
+    return(-1);
+  }
+
+  /* Call user's adjoint dense djacB routine (of type CVDlsDenseJacFnB) */
+  retval = djacB(nB, t, ytmp, yB, fyB, JB, cvB_mem->cv_user_data, 
+                 tmp1B, tmp2B, tmp3B);
+
+  return(retval);
+}
+
+/*
+ * cvDlsDenseJacBSWrapper
+ *
+ * This routine interfaces to the CVDlsDenseJacFnBS routine provided 
+ * by the user. cvDlsDenseJacBSWrapper is of type CVDlsDenseJacFn.
+ * NOTE: data here contains cvode_mem
+ */
+
+static int cvDlsDenseJacBSWrapper(long int nB, realtype t,
+                                 N_Vector yB, N_Vector fyB, 
+                                 DlsMat JB, void *cvode_mem,
+                                 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVDlsMemB cvdlsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  if (IMinterpSensi)
+    flag = IMget(cv_mem, t, ytmp, yStmp);
+  else 
+    flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSDLS", "cvDlsDenseJacBSWrapper", MSGD_BAD_TINTERP);
+    return(-1);
+  }
+
+  /* Call user's adjoint dense djacBS routine (of type CVDlsDenseJacFnBS) */
+  retval = djacBS(nB, t, ytmp, yStmp, yB, fyB, JB, cvB_mem->cv_user_data, 
+                  tmp1B, tmp2B, tmp3B);
+
+  return(retval);
+}
+
+
+/*
+ * cvDlsBandJacBWrapper
+ *
+ * This routine interfaces to the CVBandJacFnB routine provided 
+ * by the user. cvDlsBandJacBWrapper is of type CVDlsBandJacFn.
+ * NOTE: data here contains cvode_mem
+ */
+
+static int cvDlsBandJacBWrapper(long int nB, long int mupperB, long int mlowerB, 
+                                realtype t, N_Vector yB, N_Vector fyB, 
+                                DlsMat JB, void *cvode_mem, 
+                                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVDlsMemB cvdlsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSDLS", "cvDlsBandJacBWrapper", MSGD_BAD_TINTERP);
+    return(-1);
+  }
+
+  /* Call user's adjoint band bjacB routine (of type CVDlsBandJacFnB) */
+  retval = bjacB(nB, mupperB, mlowerB, t, ytmp, yB, fyB, JB, cvB_mem->cv_user_data,
+                 tmp1B, tmp2B, tmp3B);
+
+  return(retval);
+}
+
+/*
+ * cvDlsBandJacBSWrapper
+ *
+ * This routine interfaces to the CVBandJacFnBS routine provided 
+ * by the user. cvDlsBandJacBSWrapper is of type CVDlsBandJacFn.
+ * NOTE: data here contains cvode_mem
+ */
+
+static int cvDlsBandJacBSWrapper(long int nB, long int mupperB, long int mlowerB, 
+                                realtype t, N_Vector yB, N_Vector fyB, 
+                                DlsMat JB, void *cvode_mem, 
+                                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVDlsMemB cvdlsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  if (IMinterpSensi)
+    flag = IMget(cv_mem, t, ytmp, yStmp);
+  else 
+    flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSDLS", "cvDlsBandJacBSWrapper", MSGD_BAD_TINTERP);
+    return(-1);
+  }
+
+  /* Call user's adjoint band bjacBS routine (of type CVDlsBandJacFnBS) */
+  retval = bjacBS(nB, mupperB, mlowerB, t, ytmp, yStmp, yB, fyB, JB,
+                  cvB_mem->cv_user_data, tmp1B, tmp2B, tmp3B);
+
+  return(retval);
+}
+
diff --git a/src/cvodes/cvodes_direct_impl.h b/src/cvodes/cvodes_direct_impl.h
new file mode 100644
index 0000000..2fa8a7d
--- /dev/null
+++ b/src/cvodes/cvodes_direct_impl.h
@@ -0,0 +1,164 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common implementation header file for the CVDLS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSDLS_IMPL_H
+#define _CVSDLS_IMPL_H
+
+#include <cvodes/cvodes_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * C V S D I R E C T    I N T E R N A L    C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * CVDLS solver constants
+ * -----------------------------------------------------------------
+ * CVD_MSBJ   maximum number of steps between Jacobian evaluations
+ * CVD_DGMAX  maximum change in gamma between Jacobian evaluations
+ * -----------------------------------------------------------------
+ */
+
+#define CVD_MSBJ  50
+#define CVD_DGMAX RCONST(0.2)
+
+/*
+ * =================================================================
+ * PART I:  F O R W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types: CVDlsMemRec, CVDlsMem                             
+ * -----------------------------------------------------------------
+ * CVDlsMem is pointer to a CVDlsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVDlsMemRec {
+
+  int d_type;             /* SUNDIALS_DENSE or SUNDIALS_BAND              */
+
+  long int d_n;           /* problem dimension                            */
+
+  long int d_ml;          /* lower bandwidth of Jacobian                  */
+  long int d_mu;          /* upper bandwidth of Jacobian                  */ 
+  long int d_smu;         /* upper bandwith of M = MIN(N-1,d_mu+d_ml)     */
+
+  booleantype d_jacDQ;    /* TRUE if using internal DQ Jacobian approx.   */
+  CVDlsDenseJacFn d_djac; /* dense Jacobian routine to be called          */
+  CVDlsBandJacFn d_bjac;  /* band Jacobian routine to be called           */
+  void *d_J_data;         /* data pointer passed to djac or bjac          */
+
+  DlsMat d_M;             /* M = I - gamma * df/dy                        */
+  DlsMat d_savedJ;        /* savedJ = old Jacobian                        */
+
+  int *d_pivots;          /* pivots = int pivot array for PM = LU         */
+  long int *d_lpivots;    /* lpivots = long int pivot array for PM = LU   */
+  
+  long int  d_nstlj;      /* nstlj = nst at last Jacobian eval.           */
+
+  long int d_nje;         /* nje = no. of calls to jac                    */
+
+  long int d_nfeDQ;       /* no. of calls to f due to DQ Jacobian approx. */
+
+  long int d_last_flag;   /* last error return flag                       */
+  
+} *CVDlsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+
+int cvDlsDenseDQJac(long int N, realtype t,
+                    N_Vector y, N_Vector fy, 
+                    DlsMat Jac, void *data,
+                    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+  
+int cvDlsBandDQJac(long int N, long int mupper, long int mlower,
+                   realtype t, N_Vector y, N_Vector fy, 
+                   DlsMat Jac, void *data,
+                   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Auxilliary functions */
+int cvDlsInitializeCounters(CVDlsMem cvdls_mem);
+
+
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : CVDlsMemRecB, CVDlsMemB       
+ * -----------------------------------------------------------------
+ * A CVDLS linear solver's specification function attaches such
+ * a structure to the lmemB filed of CVodeBMem
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVDlsMemRecB {
+
+  int d_typeB;
+
+  CVDlsDenseJacFnB d_djacB;
+  CVDlsDenseJacFnBS d_djacBS;
+  CVDlsBandJacFnB d_bjacB;
+  CVDlsBandJacFnBS d_bjacBS;
+
+} *CVDlsMemB;
+
+
+/*
+ * =================================================================
+ * E R R O R   M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGD_CVMEM_NULL "Integrator memory is NULL."
+#define MSGD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGD_BAD_SIZES "Illegal bandwidth parameter(s). Must have 0 <=  ml, mu <= N-1."
+#define MSGD_MEM_FAIL "A memory request failed."
+#define MSGD_LMEM_NULL "Linear solver memory is NULL."
+#define MSGD_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+
+
+#define MSGD_NO_ADJ "Illegal attempt to call before calling CVodeAdjMalloc."
+#define MSGD_BAD_WHICH "Illegal value for which."
+#define MSGD_LMEMB_NULL "Linear solver memory is NULL for the backward integration."
+#define MSGD_BAD_TINTERP "Bad t for interpolation."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvodes/cvodes_impl.h b/src/cvodes/cvodes_impl.h
new file mode 100644
index 0000000..41409b0
--- /dev/null
+++ b/src/cvodes/cvodes_impl.h
@@ -0,0 +1,1094 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4923 $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the main CVODES integrator.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVODES_IMPL_H
+#define _CVODES_IMPL_H
+
+#include <stdarg.h>
+
+#include <cvodes/cvodes.h>
+#include <sundials/sundials_nvector.h>
+#include <sundials/sundials_types.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * =================================================================
+ *   I N T E R N A L   C V O D E S   C O N S T A N T S
+ * =================================================================
+ */
+
+/* Basic CVODES constants */
+
+#define ADAMS_Q_MAX 12      /* max value of q for lmm == ADAMS    */
+#define BDF_Q_MAX    5      /* max value of q for lmm == BDF      */
+#define Q_MAX  ADAMS_Q_MAX  /* max value of q for either lmm      */
+#define L_MAX  (Q_MAX+1)    /* max value of L for either lmm      */
+#define NUM_TESTS    5      /* number of error test quantities    */
+
+#define HMIN_DEFAULT     RCONST(0.0)    /* hmin default value     */
+#define HMAX_INV_DEFAULT RCONST(0.0)    /* hmax_inv default value */
+#define MXHNIL_DEFAULT   10             /* mxhnil default value   */
+#define MXSTEP_DEFAULT   500            /* mxstep default value   */
+
+/* 
+ * =================================================================
+ *   F O R W A R D   P O I N T E R   R E F E R E N C E S
+ * =================================================================
+ */
+
+typedef struct CVadjMemRec  *CVadjMem;
+typedef struct CkpntMemRec  *CkpntMem;
+typedef struct DtpntMemRec  *DtpntMem;
+typedef struct CVodeBMemRec *CVodeBMem;
+
+/* 
+ * =================================================================
+ *   M A I N    I N T E G R A T O R    M E M O R Y    B L O C K
+ * =================================================================
+ */
+
+
+/*
+ * -----------------------------------------------------------------
+ * Types: struct CVodeMemRec, CVodeMem
+ * -----------------------------------------------------------------
+ * The type CVodeMem is type pointer to struct CVodeMemRec.
+ * This structure contains fields to keep track of problem state.
+ * -----------------------------------------------------------------
+ */
+  
+typedef struct CVodeMemRec {
+    
+  realtype cv_uround;         /* machine unit roundoff                        */   
+
+  /*-------------------------- 
+    Problem Specification Data 
+    --------------------------*/
+
+  CVRhsFn cv_f;               /* y' = f(t,y(t))                               */
+  void *cv_user_data;         /* user pointer passed to f                     */
+
+  int cv_lmm;                 /* lmm = ADAMS or BDF                           */
+  int cv_iter;                /* iter = FUNCTIONAL or NEWTON                  */
+
+  int cv_itol;                /* itol = CV_SS, CV_SV, or CV_WF, or CV_NN      */
+  realtype cv_reltol;         /* relative tolerance                           */
+  realtype cv_Sabstol;        /* scalar absolute tolerance                    */
+  N_Vector cv_Vabstol;        /* vector absolute tolerance                    */
+  booleantype cv_user_efun;   /* TRUE if user sets efun                       */
+  CVEwtFn cv_efun;            /* function to set ewt                          */
+  void *cv_e_data;            /* user pointer passed to efun                  */
+
+  /*-----------------------
+    Quadrature Related Data 
+    -----------------------*/
+
+  booleantype cv_quadr;       /* TRUE if integrating quadratures              */
+
+  CVQuadRhsFn cv_fQ;          /* q' = fQ(t, y(t))                             */
+
+  booleantype cv_errconQ;     /* TRUE if quadrs. are included in error test   */
+
+  int cv_itolQ;               /* itolQ = CV_SS or CV_SV                       */
+  realtype cv_reltolQ;        /* relative tolerance for quadratures           */
+  realtype cv_SabstolQ;       /* scalar absolute tolerance for quadratures    */
+  N_Vector cv_VabstolQ;       /* vector absolute tolerance for quadratures    */
+
+  /*------------------------
+    Sensitivity Related Data 
+    ------------------------*/
+
+  booleantype cv_sensi;       /* TRUE if computing sensitivities              */
+
+  int cv_Ns;                  /* Number of sensitivities                      */
+
+  int cv_ism;                 /* ism = SIMULTANEOUS or STAGGERED              */
+
+  CVSensRhsFn cv_fS;          /* fS = (df/dy)*yS + (df/dp)                    */
+  CVSensRhs1Fn cv_fS1;        /* fS1 = (df/dy)*yS_i + (df/dp)                 */
+  void *cv_fS_data;           /* data pointer passed to fS                    */
+  booleantype cv_fSDQ;        /* TRUE if using internal DQ functions          */
+  int cv_ifS;                 /* ifS = ALLSENS or ONESENS                     */
+
+  realtype *cv_p;             /* parameters in f(t,y,p)                       */
+  realtype *cv_pbar;          /* scale factors for parameters                 */
+  int *cv_plist;              /* list of sensitivities                        */
+  int cv_DQtype;              /* central/forward finite differences           */
+  realtype cv_DQrhomax;       /* cut-off value for separate/simultaneous FD   */
+
+  booleantype cv_errconS;     /* TRUE if yS are considered in err. control    */
+
+  int cv_itolS;
+  realtype cv_reltolS;        /* relative tolerance for sensitivities         */
+  realtype *cv_SabstolS;      /* scalar absolute tolerances for sensi.        */
+  N_Vector *cv_VabstolS;      /* vector absolute tolerances for sensi.        */
+
+  /*-----------------------------------
+    Quadrature Sensitivity Related Data 
+    -----------------------------------*/
+
+  booleantype cv_quadr_sensi; /* TRUE if computing sensitivties of quadrs.    */
+
+  CVQuadSensRhsFn cv_fQS;     /* fQS = (dfQ/dy)*yS + (dfQ/dp)                 */
+  void *cv_fQS_data;          /* data pointer passed to fQS                   */
+  booleantype cv_fQSDQ;       /* TRUE if using internal DQ functions          */
+
+  booleantype cv_errconQS;    /* TRUE if yQS are considered in err. con.      */
+
+  int cv_itolQS;
+  realtype cv_reltolQS;       /* relative tolerance for yQS                   */
+  realtype *cv_SabstolQS;     /* scalar absolute tolerances for yQS           */
+  N_Vector *cv_VabstolQS;     /* vector absolute tolerances for yQS           */
+
+  /*-----------------------
+    Nordsieck History Array 
+    -----------------------*/
+
+  N_Vector cv_zn[L_MAX];      /* Nordsieck array, of size N x (q+1).
+                                 zn[j] is a vector of length N (j=0,...,q)
+                                 zn[j] = [1/factorial(j)] * h^j * 
+                                 (jth derivative of the interpolating poly.)  */
+
+  /*-------------------
+    Vectors of length N 
+    -------------------*/
+
+  N_Vector cv_ewt;            /* error weight vector                          */
+  N_Vector cv_y;              /* y is used as temporary storage by the solver.
+                                 The memory is provided by the user to CVode 
+                                 where the vector is named yout.              */
+  N_Vector cv_acor;           /* In the context of the solution of the
+                                 nonlinear equation, acor = y_n(m) - y_n(0).
+                                 On return, this vector is scaled to give
+                                 the estimated local error in y.              */
+  N_Vector cv_tempv;          /* temporary storage vector                     */
+  N_Vector cv_ftemp;          /* temporary storage vector                     */
+  
+  /*--------------------------
+    Quadrature Related Vectors 
+    --------------------------*/
+
+  N_Vector cv_znQ[L_MAX];     /* Nordsieck arrays for quadratures             */
+  N_Vector cv_ewtQ;           /* error weight vector for quadratures          */
+  N_Vector cv_yQ;             /* Unlike y, yQ is not allocated by the user    */
+  N_Vector cv_acorQ;          /* acorQ = yQ_n(m) - yQ_n(0)                    */
+  N_Vector cv_tempvQ;         /* temporary storage vector (~ tempv)           */
+
+  /*---------------------------
+    Sensitivity Related Vectors 
+    ---------------------------*/
+
+  N_Vector *cv_znS[L_MAX];    /* Nordsieck arrays for sensitivities           */
+  N_Vector *cv_ewtS;          /* error weight vectors for sensitivities       */
+  N_Vector *cv_yS;            /* yS=yS0 (allocated by the user)               */
+  N_Vector *cv_acorS;         /* acorS = yS_n(m) - yS_n(0)                    */
+  N_Vector *cv_tempvS;        /* temporary storage vector (~ tempv)           */
+  N_Vector *cv_ftempS;        /* temporary storage vector (~ ftemp)           */
+
+  booleantype cv_stgr1alloc;  /* Did we allocate ncfS1, ncfnS1, and nniS1?    */
+
+  /*--------------------------------------
+    Quadrature Sensitivity Related Vectors 
+    --------------------------------------*/
+
+  N_Vector *cv_znQS[L_MAX];   /* Nordsieck arrays for quadr. sensitivities    */
+  N_Vector *cv_ewtQS;         /* error weight vectors for sensitivities       */
+  N_Vector *cv_yQS;           /* Unlike yS, yQS is not allocated by the user  */
+  N_Vector *cv_acorQS;        /* acorQS = yQS_n(m) - yQS_n(0)                 */
+  N_Vector *cv_tempvQS;       /* temporary storage vector (~ tempv)           */
+  N_Vector cv_ftempQ;         /* temporary storage vector (~ ftemp)           */
+  
+  /*-----------------
+    Tstop information
+    -----------------*/
+
+  booleantype cv_tstopset;
+  realtype cv_tstop;
+
+  /*---------
+    Step Data 
+    ---------*/
+
+  int cv_q;                    /* current order                               */
+  int cv_qprime;               /* order to be used on the next step
+                                * qprime = q-1, q, or q+1                     */
+  int cv_next_q;               /* order to be used on the next step           */
+  int cv_qwait;                /* number of internal steps to wait before
+                                * considering a change in q                   */
+  int cv_L;                    /* L = q + 1                                   */
+
+  realtype cv_hin;
+  realtype cv_h;               /* current step size                           */
+  realtype cv_hprime;          /* step size to be used on the next step       */ 
+  realtype cv_next_h;          /* step size to be used on the next step       */ 
+  realtype cv_eta;             /* eta = hprime / h                            */
+  realtype cv_hscale;          /* value of h used in zn                       */
+  realtype cv_tn;              /* current internal value of t                 */
+  realtype cv_tretlast;        /* last value of t returned                    */
+
+  realtype cv_tau[L_MAX+1];    /* array of previous q+1 successful step
+                                * sizes indexed from 1 to q+1                 */
+  realtype cv_tq[NUM_TESTS+1]; /* array of test quantities indexed from
+                                * 1 to NUM_TESTS(=5)                          */
+  realtype cv_l[L_MAX];        /* coefficients of l(x) (degree q poly)        */
+
+  realtype cv_rl1;             /* the scalar 1/l[1]                           */
+  realtype cv_gamma;           /* gamma = h * rl1                             */
+  realtype cv_gammap;          /* gamma at the last setup call                */
+  realtype cv_gamrat;          /* gamma / gammap                              */
+
+  realtype cv_crate;           /* est. corrector conv. rate in Nls            */
+  realtype cv_crateS;          /* est. corrector conv. rate in NlsStgr        */
+  realtype cv_acnrm;           /* | acor |                                    */
+  realtype cv_acnrmQ;          /* | acorQ |                                   */
+  realtype cv_acnrmS;          /* | acorS |                                   */
+  realtype cv_acnrmQS;         /* | acorQS |                                  */
+  realtype cv_nlscoef;         /* coeficient in nonlinear convergence test    */
+  int  cv_mnewt;               /* Newton iteration counter                    */
+  int  *cv_ncfS1;              /* Array of Ns local counters for conv.  
+                                * failures (used in CVStep for STAGGERED1)    */
+
+  /*------
+    Limits 
+    ------*/
+
+  int cv_qmax;             /* q <= qmax                                       */
+  long int cv_mxstep;      /* maximum number of internal steps for one 
+			      user call                                       */
+  int cv_maxcor;           /* maximum number of corrector iterations for 
+			      the solution of the nonlinear equation          */
+  int cv_maxcorS;
+  int cv_mxhnil;           /* max. number of warning messages issued to the
+			      user that t + h == t for the next internal step */
+  int cv_maxnef;           /* maximum number of error test failures           */
+  int cv_maxncf;           /* maximum number of nonlinear conv. failures      */
+
+  realtype cv_hmin;        /* |h| >= hmin                                     */
+  realtype cv_hmax_inv;    /* |h| <= 1/hmax_inv                               */
+  realtype cv_etamax;      /* eta <= etamax                                   */
+
+  /*----------
+    Counters 
+    ----------*/
+
+  long int cv_nst;         /* number of internal steps taken                  */
+
+  long int cv_nfe;         /* number of f calls                               */
+  long int cv_nfQe;        /* number of fQ calls                              */
+  long int cv_nfSe;        /* number of fS calls                              */
+  long int cv_nfeS;        /* number of f calls from sensi DQ                 */
+  long int cv_nfQSe;       /* number of fQS calls                             */
+  long int cv_nfQeS;       /* number of fQ calls from sensi DQ                */
+
+
+  long int cv_ncfn;        /* number of corrector convergence failures        */
+  long int cv_ncfnS;       /* number of total sensi. corr. conv. failures     */
+  long int *cv_ncfnS1;     /* number of sensi. corrector conv. failures       */
+
+  long int cv_nni;         /* number of nonlinear iterations performed        */
+  long int cv_nniS;        /* number of total sensi. nonlinear iterations     */
+  long int *cv_nniS1;      /* number of sensi. nonlinear iterations           */
+
+  long int cv_netf;        /* number of error test failures                   */
+  long int cv_netfQ;       /* number of quadr. error test failures            */
+  long int cv_netfS;       /* number of sensi. error test failures            */
+  long int cv_netfQS;      /* number of quadr. sensi. error test failures     */
+
+  long int cv_nsetups;     /* number of setup calls                           */
+  long int cv_nsetupsS;    /* number of setup calls due to sensitivities      */
+
+  int cv_nhnil;            /* number of messages issued to the user that
+			      t + h == t for the next iternal step            */
+
+  /*-----------------------------
+    Space requirements for CVODES 
+    -----------------------------*/
+
+  long int cv_lrw1;        /* no. of realtype words in 1 N_Vector y           */ 
+  long int cv_liw1;        /* no. of integer words in 1 N_Vector y            */ 
+  long int cv_lrw1Q;       /* no. of realtype words in 1 N_Vector yQ          */ 
+  long int cv_liw1Q;       /* no. of integer words in 1 N_Vector yQ           */ 
+  long int cv_lrw;         /* no. of realtype words in CVODES work vectors    */
+  long int cv_liw;         /* no. of integer words in CVODES work vectors     */
+
+  /*----------------
+    Step size ratios
+    ----------------*/
+
+  realtype cv_etaqm1;      /* ratio of new to old h for order q-1             */
+  realtype cv_etaq;        /* ratio of new to old h for order q               */
+  realtype cv_etaqp1;      /* ratio of new to old h for order q+1             */
+
+  /*------------------
+    Linear Solver Data 
+    ------------------*/
+
+  /* Linear Solver functions to be called */
+
+  int (*cv_linit)(struct CVodeMemRec *cv_mem);
+
+  int (*cv_lsetup)(struct CVodeMemRec *cv_mem, int convfail, 
+		   N_Vector ypred, N_Vector fpred, booleantype *jcurPtr, 
+		   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3); 
+
+  int (*cv_lsolve)(struct CVodeMemRec *cv_mem, N_Vector b, N_Vector weight,
+		   N_Vector ycur, N_Vector fcur);
+
+  int (*cv_lfree)(struct CVodeMemRec *cv_mem);
+
+  /* Linear Solver specific memory */
+
+  void *cv_lmem;           
+
+  /* Flag to request a call to the setup routine */
+
+  booleantype cv_forceSetup;
+
+  /*------------
+    Saved Values
+    ------------*/
+
+  int cv_qu;                   /* last successful q value used                */
+  long int cv_nstlp;           /* step number of last setup call              */
+  realtype cv_h0u;             /* actual initial stepsize                     */
+  realtype cv_hu;              /* last successful h value used                */
+  realtype cv_saved_tq5;       /* saved value of tq[5]                        */
+  booleantype cv_jcur;         /* is Jacobian info for linear solver current? */
+  realtype cv_tolsf;           /* tolerance scale factor                      */
+  int cv_qmax_alloc;           /* qmax used when allocating mem               */
+  int cv_qmax_allocQ;          /* qmax used when allocating quad. mem         */
+  int cv_qmax_allocS;          /* qmax used when allocating sensi. mem        */
+  int cv_qmax_allocQS;         /* qmax used when allocating quad. sensi. mem  */
+  int cv_indx_acor;            /* index of zn vector in which acor is saved   */
+  booleantype cv_setupNonNull; /* Does setup do something?                    */
+
+  /*--------------------------------------------------------------------
+    Flags turned ON by CVodeInit, CVodeSensMalloc, and CVodeQuadMalloc 
+    and read by CVodeReInit, CVodeSensReInit, and CVodeQuadReInit
+    --------------------------------------------------------------------*/
+
+  booleantype cv_VabstolMallocDone;
+  booleantype cv_MallocDone;
+
+  booleantype cv_VabstolQMallocDone;
+  booleantype cv_QuadMallocDone;
+
+  booleantype cv_VabstolSMallocDone;
+  booleantype cv_SabstolSMallocDone;
+  booleantype cv_SensMallocDone;
+
+  booleantype cv_VabstolQSMallocDone;
+  booleantype cv_SabstolQSMallocDone;
+  booleantype cv_QuadSensMallocDone;
+
+  /*-------------------------------------------
+    Error handler function and error ouput file 
+    -------------------------------------------*/
+
+  CVErrHandlerFn cv_ehfun;    /* Error messages are handled by ehfun          */
+  void *cv_eh_data;           /* dats pointer passed to ehfun                 */
+  FILE *cv_errfp;             /* CVODES error messages are sent to errfp      */    
+
+  /*-------------------------
+    Stability Limit Detection
+    -------------------------*/
+
+  booleantype cv_sldeton;     /* Is Stability Limit Detection on?             */
+  realtype cv_ssdat[6][4];    /* scaled data array for STALD                  */
+  int cv_nscon;               /* counter for STALD method                     */
+  long int cv_nor;            /* counter for number of order reductions       */
+
+  /*----------------
+    Rootfinding Data
+    ----------------*/
+
+  CVRootFn cv_gfun;        /* Function g for roots sought                     */
+  int cv_nrtfn;            /* number of components of g                       */
+  int *cv_iroots;          /* array for root information                      */
+  int *cv_rootdir;         /* array specifying direction of zero-crossing     */
+  realtype cv_tlo;         /* nearest endpoint of interval in root search     */
+  realtype cv_thi;         /* farthest endpoint of interval in root search    */
+  realtype cv_trout;       /* t value returned by rootfinding routine         */
+  realtype *cv_glo;        /* saved array of g values at t = tlo              */
+  realtype *cv_ghi;        /* saved array of g values at t = thi              */
+  realtype *cv_grout;      /* array of g values at t = trout                  */
+  realtype cv_toutc;       /* copy of tout (if NORMAL mode)                   */
+  realtype cv_ttol;        /* tolerance on root location trout                */
+  int cv_taskc;            /* copy of parameter itask                         */
+  int cv_irfnd;            /* flag showing whether last step had a root       */
+  long int cv_nge;         /* counter for g evaluations                       */
+  booleantype *cv_gactive; /* array with active/inactive event functions      */
+  int cv_mxgnull;          /* number of warning messages about possible g==0  */
+
+  /*------------------------
+    Adjoint sensitivity data
+    ------------------------*/
+
+  booleantype cv_adj;             /* TRUE if performing ASA                   */
+
+  struct CVadjMemRec *cv_adj_mem; /* Pointer to adjoint memory structure      */
+
+  booleantype cv_adjMallocDone;
+
+} *CVodeMem;
+
+
+/* 
+ * =================================================================
+ *   A D J O I N T   M O D U L E    M E M O R Y    B L O C K
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : struct CkpntMemRec, CkpntMem
+ * -----------------------------------------------------------------
+ * The type CkpntMem is type pointer to struct CkpntMemRec.
+ * This structure contains fields to store all information at a
+ * check point that is needed to 'hot' start cvodes.
+ * -----------------------------------------------------------------
+ */
+
+struct CkpntMemRec {
+
+  /* Integration limits */
+  realtype ck_t0;
+  realtype ck_t1;
+    
+  /* Nordsieck History Array */
+  N_Vector ck_zn[L_MAX];
+    
+  /* Do we need to carry quadratures? */
+  booleantype ck_quadr;
+    
+  /* Nordsieck History Array for quadratures */
+  N_Vector ck_znQ[L_MAX];
+    
+  /* Do we need to carry sensitivities? */
+  booleantype ck_sensi;
+
+  /* number of sensitivities */
+  int ck_Ns;
+
+  /* Nordsieck History Array for sensitivities */
+  N_Vector *ck_znS[L_MAX];
+
+  /* Do we need to carry quadrature sensitivities? */
+  booleantype ck_quadr_sensi;
+
+  /* Nordsieck History Array for quadrature sensitivities */
+  N_Vector *ck_znQS[L_MAX];
+    
+  /* Was ck_zn[qmax] allocated?
+     ck_zqm = 0    - no
+     ck_zqm = qmax - yes      */
+  int ck_zqm;
+    
+  /* Step data */
+  long int ck_nst;
+  realtype ck_tretlast;
+  int      ck_q;
+  int      ck_qprime;
+  int      ck_qwait;
+  int      ck_L;
+  realtype ck_gammap;
+  realtype ck_h;
+  realtype ck_hprime;
+  realtype ck_hscale;
+  realtype ck_eta;
+  realtype ck_etamax;
+  realtype ck_tau[L_MAX+1];
+  realtype ck_tq[NUM_TESTS+1];
+  realtype ck_l[L_MAX];
+    
+  /* Saved values */
+  realtype ck_saved_tq5;
+    
+  /* Pointer to next structure in list */
+  struct CkpntMemRec *ck_next;
+    
+};
+  
+/*
+ * -----------------------------------------------------------------
+ * Types for functions provided by an interpolation module
+ * -----------------------------------------------------------------
+ * cvaIMMallocFn: Type for a function that initializes the content
+ *                field of the structures in the dt array
+ * cvaIMFreeFn:   Type for a function that deallocates the content
+ *                field of the structures in the dt array
+ * cvaIMGetYFn:   Type for a function that returns the 
+ *                interpolated forward solution.
+ * cvaIMStorePnt: Type for a function that stores a new
+ *                point in the structure d
+ * -----------------------------------------------------------------
+ */
+
+typedef booleantype (*cvaIMMallocFn)(CVodeMem cv_mem);
+typedef void (*cvaIMFreeFn)(CVodeMem cv_mem);
+typedef int (*cvaIMGetYFn)(CVodeMem cv_mem, realtype t, N_Vector y, N_Vector *yS);
+typedef int (*cvaIMStorePntFn)(CVodeMem cv_mem, DtpntMem d);
+
+/*
+ * -----------------------------------------------------------------
+ * Type : struct DtpntMemRec
+ * -----------------------------------------------------------------
+ * This structure contains fields to store all information at a
+ * data point that is needed to interpolate solution of forward
+ * simulations. Its content field depends on IMtype.
+ * -----------------------------------------------------------------
+ */
+  
+struct DtpntMemRec {
+  realtype t;    /* time */
+  void *content; /* IMtype-dependent content */
+};
+
+/* Data for cubic Hermite interpolation */
+typedef struct HermiteDataMemRec {
+  N_Vector y;
+  N_Vector yd;
+  N_Vector *yS;
+  N_Vector *ySd;
+} *HermiteDataMem;
+
+/* Data for polynomial interpolation */
+typedef struct PolynomialDataMemRec {
+  N_Vector y;
+  N_Vector *yS;
+  int order;
+} *PolynomialDataMem;
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type : struct CVodeBMemRec
+ * -----------------------------------------------------------------
+ * The type CVodeBMem is a pointer to a structure which stores all
+ * information for ONE backward problem.
+ * The CVadjMem structure contains a linked list of CVodeBMem pointers
+ * -----------------------------------------------------------------
+ */
+
+struct CVodeBMemRec {
+
+  /* Index of this backward problem */
+  int cv_index;
+
+  /* Time at which the backward problem is initialized */
+  realtype cv_t0;
+  
+  /* CVODES memory for this backward problem */
+  CVodeMem cv_mem;
+
+  /* Flags to indicate that this backward problem's RHS or quad RHS
+   * require forward sensitivities */
+  booleantype cv_f_withSensi;
+  booleantype cv_fQ_withSensi;
+
+  /* Right hand side function for backward run */
+  CVRhsFnB cv_f;
+  CVRhsFnBS cv_fs;
+
+  /* Right hand side quadrature function for backward run */
+  CVQuadRhsFnB cv_fQ;
+  CVQuadRhsFnBS cv_fQs;
+
+  /* User user_data */
+  void *cv_user_data;
+    
+  /* Memory block for a linear solver's interface to CVODEA */
+  void *cv_lmem;
+
+  /* Function to free any memory allocated by the linear solver */
+  int (*cv_lfree)(CVodeBMem cvB_mem);
+
+  /* Memory block for a preconditioner's module interface to CVODEA */ 
+  void *cv_pmem;
+
+  /* Function to free any memory allocated by the preconditioner module */
+  int (*cv_pfree)(CVodeBMem cvB_mem);
+
+  /* Time at which to extract solution / quadratures */
+  realtype cv_tout;
+  
+  /* Workspace Nvector */
+  N_Vector cv_y;
+
+  /* Pointer to next structure in list */
+  struct CVodeBMemRec *cv_next;
+
+};
+
+/*
+ * -----------------------------------------------------------------
+ * Type : struct CVadjMemRec
+ * -----------------------------------------------------------------
+ * The type CVadjMem is type pointer to struct CVadjMemRec.
+ * This structure contins fields to store all information
+ * necessary for adjoint sensitivity analysis.
+ * -----------------------------------------------------------------
+ */
+
+struct CVadjMemRec {
+    
+  /* --------------------
+   * Forward problem data
+   * -------------------- */
+
+  /* Integration interval */
+  realtype ca_tinitial, ca_tfinal;
+
+  /* Flag for first call to CVodeF */
+  booleantype ca_firstCVodeFcall;
+
+  /* Flag if CVodeF was called with TSTOP */
+  booleantype ca_tstopCVodeFcall;
+  realtype ca_tstopCVodeF;
+    
+  /* ----------------------
+   * Backward problems data
+   * ---------------------- */
+
+  /* Storage for backward problems */
+  struct CVodeBMemRec *cvB_mem;
+
+  /* Number of backward problems */
+  int ca_nbckpbs;
+
+  /* Address of current backward problem */
+  struct CVodeBMemRec *ca_bckpbCrt;
+
+  /* Flag for first call to CVodeB */
+  booleantype ca_firstCVodeBcall;
+    
+  /* ----------------
+   * Check point data
+   * ---------------- */
+
+  /* Storage for check point information */
+  struct CkpntMemRec *ck_mem;
+
+  /* Number of check points */
+  int ca_nckpnts;
+
+  /* address of the check point structure for which data is available */
+  struct CkpntMemRec *ca_ckpntData;
+    
+  /* ------------------
+   * Interpolation data
+   * ------------------ */
+
+  /* Number of steps between 2 check points */
+  long int ca_nsteps;
+  
+  /* Storage for data from forward runs */
+  struct DtpntMemRec **dt_mem;
+
+  /* Actual number of data points in dt_mem (typically np=nsteps+1) */
+  long int ca_np;
+    
+  /* Interpolation type */
+  int ca_IMtype;
+
+  /* Functions set by the interpolation module */
+  cvaIMMallocFn   ca_IMmalloc; 
+  cvaIMFreeFn     ca_IMfree;
+  cvaIMStorePntFn ca_IMstore; /* store a new interpolation point */
+  cvaIMGetYFn     ca_IMget;   /* interpolate forward solution    */
+
+  /* Flags controlling the interpolation module */
+  booleantype ca_IMmallocDone;   /* IM initialized? */
+  booleantype ca_IMnewData;      /* new data available in dt_mem?*/
+  booleantype ca_IMstoreSensi;   /* store sensitivities? */
+  booleantype ca_IMinterpSensi;  /* interpolate sensitivities? */
+
+  /* Workspace for the interpolation module */
+  N_Vector ca_Y[L_MAX];     /* pointers to zn[i] */
+  N_Vector *ca_YS[L_MAX];   /* pointers to znS[i] */
+  realtype ca_T[L_MAX];
+
+  /* -------------------------------
+   * Workspace for wrapper functions
+   * ------------------------------- */
+
+  N_Vector ca_ytmp;
+
+  N_Vector *ca_yStmp;
+    
+};
+  
+
+/*
+ * =================================================================
+ *     I N T E R F A C E   T O    L I N E A R   S O L V E R S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Communication between CVODE and a CVODE Linear Solver
+ * -----------------------------------------------------------------
+ * convfail (input to cv_lsetup)
+ *
+ * CV_NO_FAILURES : Either this is the first cv_setup call for this
+ *                  step, or the local error test failed on the
+ *                  previous attempt at this step (but the Newton
+ *                  iteration converged).
+ *
+ * CV_FAIL_BAD_J  : This value is passed to cv_lsetup if
+ *
+ *                  (a) The previous Newton corrector iteration
+ *                      did not converge and the linear solver's
+ *                      setup routine indicated that its Jacobian-
+ *                      related data is not current
+ *                                   or
+ *                  (b) During the previous Newton corrector
+ *                      iteration, the linear solver's solve routine
+ *                      failed in a recoverable manner and the
+ *                      linear solver's setup routine indicated that
+ *                      its Jacobian-related data is not current.
+ *
+ * CV_FAIL_OTHER  : During the current internal step try, the
+ *                  previous Newton iteration failed to converge
+ *                  even though the linear solver was using current
+ *                  Jacobian-related data.
+ * -----------------------------------------------------------------
+ */
+
+/* Constants for convfail (input to cv_lsetup) */
+
+#define CV_NO_FAILURES 0
+#define CV_FAIL_BAD_J  1
+#define CV_FAIL_OTHER  2
+
+/*
+ * -----------------------------------------------------------------
+ * int (*cv_linit)(CVodeMem cv_mem);
+ * -----------------------------------------------------------------
+ * The purpose of cv_linit is to complete initializations for a
+ * specific linear solver, such as counters and statistics.
+ * An LInitFn should return 0 if it has successfully initialized the
+ * CVODE linear solver and a negative value otherwise.
+ * If an error does occur, an appropriate message should be sent to
+ * the error handler function.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * int (*cv_lsetup)(CVodeMem cv_mem, int convfail, N_Vector ypred,
+ *                 N_Vector fpred, booleantype *jcurPtr,
+ *                 N_Vector vtemp1, N_Vector vtemp2,
+ *                 N_Vector vtemp3);
+ * -----------------------------------------------------------------
+ * The job of cv_lsetup is to prepare the linear solver for
+ * subsequent calls to cv_lsolve. It may recompute Jacobian-
+ * related data is it deems necessary. Its parameters are as
+ * follows:
+ *
+ * cv_mem - problem memory pointer of type CVodeMem. See the
+ *          typedef earlier in this file.
+ *
+ * convfail - a flag to indicate any problem that occurred during
+ *            the solution of the nonlinear equation on the
+ *            current time step for which the linear solver is
+ *            being used. This flag can be used to help decide
+ *            whether the Jacobian data kept by a CVODE linear
+ *            solver needs to be updated or not.
+ *            Its possible values have been documented above.
+ *
+ * ypred - the predicted y vector for the current CVODE internal
+ *         step.
+ *
+ * fpred - f(tn, ypred).
+ *
+ * jcurPtr - a pointer to a boolean to be filled in by cv_lsetup.
+ *           The function should set *jcurPtr=TRUE if its Jacobian
+ *           data is current after the call and should set
+ *           *jcurPtr=FALSE if its Jacobian data is not current.
+ *           Note: If cv_lsetup calls for re-evaluation of
+ *           Jacobian data (based on convfail and CVODE state
+ *           data), it should return *jcurPtr=TRUE always;
+ *           otherwise an infinite loop can result.
+ *
+ * vtemp1 - temporary N_Vector provided for use by cv_lsetup.
+ *
+ * vtemp3 - temporary N_Vector provided for use by cv_lsetup.
+ *
+ * vtemp3 - temporary N_Vector provided for use by cv_lsetup.
+ *
+ * The cv_lsetup routine should return 0 if successful, a positive
+ * value for a recoverable error, and a negative value for an
+ * unrecoverable error.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * int (*cv_lsolve)(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+ *                  N_Vector ycur, N_Vector fcur);
+ * -----------------------------------------------------------------
+ * cv_lsolve must solve the linear equation P x = b, where
+ * P is some approximation to (I - gamma J), J = (df/dy)(tn,ycur)
+ * and the RHS vector b is input. The N-vector ycur contains
+ * the solver's current approximation to y(tn) and the vector
+ * fcur contains the N_Vector f(tn,ycur). The solution is to be
+ * returned in the vector b. cv_lsolve returns a positive value
+ * for a recoverable error and a negative value for an
+ * unrecoverable error. Success is indicated by a 0 return value.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * int (*cv_lfree)(CVodeMem cv_mem);
+ * -----------------------------------------------------------------
+ * cv_lfree should free up any memory allocated by the linear
+ * solver. This routine is called once a problem has been
+ * completed and the linear solver is no longer needed.  It should 
+ * return 0 upon success, nonzero on failure.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * =================================================================
+ *   C V O D E S    I N T E R N A L   F U N C T I O N S
+ * =================================================================
+ */
+  
+/* Prototype of internal ewtSet function */
+
+int cvEwtSet(N_Vector ycur, N_Vector weight, void *data);
+
+/* High level error handler */
+
+void cvProcessError(CVodeMem cv_mem, 
+		    int error_code, const char *module, const char *fname, 
+		    const char *msgfmt, ...);
+
+/* Prototype of internal errHandler function */
+
+void cvErrHandler(int error_code, const char *module, const char *function, 
+		  char *msg, void *data);
+
+/* Prototypes for internal sensitivity rhs wrappers */
+
+int cvSensRhsWrapper(CVodeMem cv_mem, realtype time, 
+                     N_Vector ycur, N_Vector fcur, 
+                     N_Vector *yScur, N_Vector *fScur,
+                     N_Vector temp1, N_Vector temp2);
+
+int cvSensRhs1Wrapper(CVodeMem cv_mem, realtype time, 
+                      N_Vector ycur, N_Vector fcur, 
+                      int is, N_Vector yScur, N_Vector fScur,
+                      N_Vector temp1, N_Vector temp2);
+
+/* Prototypes for internal sensitivity rhs DQ functions */
+
+int cvSensRhsInternalDQ(int Ns, realtype t, 
+                        N_Vector y, N_Vector ydot, 
+                        N_Vector *yS, N_Vector *ySdot, 
+                        void *fS_data,  
+                        N_Vector tempv, N_Vector ftemp);
+
+int cvSensRhs1InternalDQ(int Ns, realtype t, 
+                         N_Vector y, N_Vector ydot, 
+                         int is, N_Vector yS, N_Vector ySdot, 
+                         void *fS_data,
+                         N_Vector tempv, N_Vector ftemp);
+
+/* 
+ * =================================================================
+ *   C V O D E S    E R R O R    M E S S A G E S
+ * =================================================================
+ */
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define MSG_TIME        "t = %Lg"
+#define MSG_TIME_H      "t = %Lg and h = %Lg"
+#define MSG_TIME_INT    "t = %Lg is not between tcur - hu = %Lg and tcur = %Lg."
+#define MSG_TIME_TOUT   "tout = %Lg"
+#define MSG_TIME_TSTOP  "tstop = %Lg"
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define MSG_TIME        "t = %lg"
+#define MSG_TIME_H      "t = %lg and h = %lg"
+#define MSG_TIME_INT    "t = %lg is not between tcur - hu = %lg and tcur = %lg."
+#define MSG_TIME_TOUT   "tout = %lg"
+#define MSG_TIME_TSTOP  "tstop = %lg"
+
+#else
+
+#define MSG_TIME        "t = %g"
+#define MSG_TIME_H      "t = %g and h = %g"
+#define MSG_TIME_INT    "t = %g is not between tcur - hu = %g and tcur = %g."
+#define MSG_TIME_TOUT   "tout = %g"
+#define MSG_TIME_TSTOP  "tstop = %g"
+
+#endif
+
+
+/* Initialization and I/O error messages */
+
+#define MSGCV_NO_MEM "cvode_mem = NULL illegal."
+#define MSGCV_CVMEM_FAIL "Allocation of cvode_mem failed."
+#define MSGCV_MEM_FAIL "A memory request failed."
+#define MSGCV_BAD_LMM  "Illegal value for lmm. The legal values are CV_ADAMS and CV_BDF."
+#define MSGCV_BAD_ITER  "Illegal value for iter. The legal values are CV_FUNCTIONAL and CV_NEWTON."
+#define MSGCV_NO_MALLOC "Attempt to call before CVodeInit."
+#define MSGCV_NEG_MAXORD "maxord <= 0 illegal."
+#define MSGCV_BAD_MAXORD  "Illegal attempt to increase maximum method order."
+#define MSGCV_SET_SLDET  "Attempt to use stability limit detection with the CV_ADAMS method illegal."
+#define MSGCV_NEG_HMIN "hmin < 0 illegal."
+#define MSGCV_NEG_HMAX "hmax < 0 illegal."
+#define MSGCV_BAD_HMIN_HMAX "Inconsistent step size limits: hmin > hmax."
+#define MSGCV_BAD_RELTOL "reltol < 0 illegal."
+#define MSGCV_BAD_ABSTOL "abstol has negative component(s) (illegal)."
+#define MSGCV_NULL_ABSTOL "abstol = NULL illegal."
+#define MSGCV_NULL_Y0 "y0 = NULL illegal."
+#define MSGCV_NULL_F "f = NULL illegal."
+#define MSGCV_NULL_G "g = NULL illegal."
+#define MSGCV_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGCV_BAD_K "Illegal value for k."
+#define MSGCV_NULL_DKY "dky = NULL illegal."
+#define MSGCV_BAD_T "Illegal value for t." MSG_TIME_INT
+#define MSGCV_NO_ROOT "Rootfinding was not initialized."
+
+#define MSGCV_NO_QUAD  "Quadrature integration not activated."
+#define MSGCV_BAD_ITOLQ "Illegal value for itolQ. The legal values are CV_SS and CV_SV."
+#define MSGCV_NULL_ABSTOLQ "abstolQ = NULL illegal."
+#define MSGCV_BAD_RELTOLQ "reltolQ < 0 illegal."
+#define MSGCV_BAD_ABSTOLQ "abstolQ has negative component(s) (illegal)."  
+
+#define MSGCV_SENSINIT_2 "Sensitivity analysis already initialized."
+#define MSGCV_NO_SENSI  "Forward sensitivity analysis not activated."
+#define MSGCV_BAD_ITOLS "Illegal value for itolS. The legal values are CV_SS, CV_SV, and CV_EE."
+#define MSGCV_NULL_ABSTOLS "abstolS = NULL illegal."
+#define MSGCV_BAD_RELTOLS "reltolS < 0 illegal."
+#define MSGCV_BAD_ABSTOLS "abstolS has negative component(s) (illegal)."  
+#define MSGCV_BAD_PBAR "pbar has zero component(s) (illegal)."
+#define MSGCV_BAD_PLIST "plist has negative component(s) (illegal)."
+#define MSGCV_BAD_NS "NS <= 0 illegal."
+#define MSGCV_NULL_YS0 "yS0 = NULL illegal."
+#define MSGCV_BAD_ISM "Illegal value for ism. Legal values are: CV_SIMULTANEOUS, CV_STAGGERED and CV_STAGGERED1."
+#define MSGCV_BAD_IFS "Illegal value for ifS. Legal values are: CV_ALLSENS and CV_ONESENS."
+#define MSGCV_BAD_ISM_IFS "Illegal ism = CV_STAGGERED1 for CVodeSensInit."
+#define MSGCV_BAD_IS "Illegal value for is."
+#define MSGCV_NULL_DKYA "dkyA = NULL illegal."
+#define MSGCV_BAD_DQTYPE "Illegal value for DQtype. Legal values are: CV_CENTERED and CV_FORWARD."
+#define MSGCV_BAD_DQRHO "DQrhomax < 0 illegal."
+
+#define MSGCV_BAD_ITOLQS "Illegal value for itolQS. The legal values are CV_SS, CV_SV, and CV_EE."
+#define MSGCV_NULL_ABSTOLQS "abstolQS = NULL illegal."
+#define MSGCV_BAD_RELTOLQS "reltolQS < 0 illegal."
+#define MSGCV_BAD_ABSTOLQS "abstolQS has negative component(s) (illegal)."  
+#define MSGCV_NO_QUADSENSI  "Forward sensitivity analysis for quadrature variables not activated."
+#define MSGCV_NULL_YQS0 "yQS0 = NULL illegal."
+
+/* CVode Error Messages */
+
+#define MSGCV_NO_TOL "No integration tolerances have been specified."
+#define MSGCV_LSOLVE_NULL "The linear solver's solve routine is NULL."
+#define MSGCV_YOUT_NULL "yout = NULL illegal."
+#define MSGCV_TRET_NULL "tret = NULL illegal."
+#define MSGCV_BAD_EWT "Initial ewt has component(s) equal to zero (illegal)."
+#define MSGCV_EWT_NOW_BAD "At " MSG_TIME ", a component of ewt has become <= 0."
+#define MSGCV_BAD_ITASK "Illegal value for itask."
+#define MSGCV_BAD_H0 "h0 and tout - t0 inconsistent."
+#define MSGCV_BAD_TOUT "Trouble interpolating at " MSG_TIME_TOUT ". tout too far back in direction of integration"
+#define MSGCV_EWT_FAIL "The user-provide EwtSet function failed."
+#define MSGCV_EWT_NOW_FAIL "At " MSG_TIME ", the user-provide EwtSet function failed."
+#define MSGCV_LINIT_FAIL "The linear solver's init routine failed."
+#define MSGCV_HNIL_DONE "The above warning has been issued mxhnil times and will not be issued again for this problem."
+#define MSGCV_TOO_CLOSE "tout too close to t0 to start integration."
+#define MSGCV_MAX_STEPS "At " MSG_TIME ", mxstep steps taken before reaching tout."
+#define MSGCV_TOO_MUCH_ACC "At " MSG_TIME ", too much accuracy requested."
+#define MSGCV_HNIL "Internal " MSG_TIME_H " are such that t + h = t on the next step. The solver will continue anyway."
+#define MSGCV_ERR_FAILS "At " MSG_TIME_H ", the error test failed repeatedly or with |h| = hmin."
+#define MSGCV_CONV_FAILS "At " MSG_TIME_H ", the corrector convergence test failed repeatedly or with |h| = hmin."
+#define MSGCV_SETUP_FAILED "At " MSG_TIME ", the setup routine failed in an unrecoverable manner."
+#define MSGCV_SOLVE_FAILED "At " MSG_TIME ", the solve routine failed in an unrecoverable manner."
+#define MSGCV_RHSFUNC_FAILED "At " MSG_TIME ", the right-hand side routine failed in an unrecoverable manner."
+#define MSGCV_RHSFUNC_UNREC "At " MSG_TIME ", the right-hand side failed in a recoverable manner, but no recovery is possible."
+#define MSGCV_RHSFUNC_REPTD "At " MSG_TIME " repeated recoverable right-hand side function errors."
+#define MSGCV_RHSFUNC_FIRST "The right-hand side routine failed at the first call."
+#define MSGCV_RTFUNC_FAILED "At " MSG_TIME ", the rootfinding routine failed in an unrecoverable manner."
+#define MSGCV_CLOSE_ROOTS "Root found at and very near " MSG_TIME "."
+#define MSGCV_BAD_TSTOP "The value " MSG_TIME_TSTOP " is behind current " MSG_TIME " in the direction of integration."
+#define MSGCV_INACTIVE_ROOTS "At the end of the first step, there are still some root functions identically 0. This warning will not be issued again."
+
+#define MSGCV_NO_TOLQ "No integration tolerances for quadrature variables have been specified."
+#define MSGCV_BAD_EWTQ "Initial ewtQ has component(s) equal to zero (illegal)."
+#define MSGCV_EWTQ_NOW_BAD "At " MSG_TIME ", a component of ewtQ has become <= 0."
+#define MSGCV_QRHSFUNC_FAILED "At " MSG_TIME ", the quadrature right-hand side routine failed in an unrecoverable manner."
+#define MSGCV_QRHSFUNC_UNREC "At " MSG_TIME ", the quadrature right-hand side failed in a recoverable manner, but no recovery is possible."
+#define MSGCV_QRHSFUNC_REPTD "At " MSG_TIME " repeated recoverable quadrature right-hand side function errors."
+#define MSGCV_QRHSFUNC_FIRST "The quadrature right-hand side routine failed at the first call."
+
+#define MSGCV_NO_TOLS "No integration tolerances for sensitivity variables have been specified."
+#define MSGCV_NULL_P "p = NULL when using internal DQ for sensitivity RHS illegal."
+#define MSGCV_BAD_EWTS "Initial ewtS has component(s) equal to zero (illegal)."
+#define MSGCV_EWTS_NOW_BAD "At " MSG_TIME ", a component of ewtS has become <= 0."
+#define MSGCV_SRHSFUNC_FAILED "At " MSG_TIME ", the sensitivity right-hand side routine failed in an unrecoverable manner."
+#define MSGCV_SRHSFUNC_UNREC "At " MSG_TIME ", the sensitivity right-hand side failed in a recoverable manner, but no recovery is possible."
+#define MSGCV_SRHSFUNC_REPTD "At " MSG_TIME " repeated recoverable sensitivity right-hand side function errors."
+#define MSGCV_SRHSFUNC_FIRST "The sensitivity right-hand side routine failed at the first call."
+
+#define MSGCV_NULL_FQ "CVODES is expected to use DQ to evaluate the RHS of quad. sensi., but quadratures were not initialized."
+#define MSGCV_NO_TOLQS "No integration tolerances for quadrature sensitivity variables have been specified."
+#define MSGCV_BAD_EWTQS "Initial ewtQS has component(s) equal to zero (illegal)."
+#define MSGCV_EWTQS_NOW_BAD "At " MSG_TIME ", a component of ewtQS has become <= 0."
+#define MSGCV_QSRHSFUNC_FAILED "At " MSG_TIME ", the quadrature sensitivity right-hand side routine failed in an unrecoverable manner."
+#define MSGCV_QSRHSFUNC_UNREC "At " MSG_TIME ", the quadrature sensitivity right-hand side failed in a recoverable manner, but no recovery is possible."
+#define MSGCV_QSRHSFUNC_REPTD "At " MSG_TIME " repeated recoverable quadrature sensitivity right-hand side function errors."
+#define MSGCV_QSRHSFUNC_FIRST "The quadrature sensitivity right-hand side routine failed at the first call."
+
+/* 
+ * =================================================================
+ *   C V O D E A    E R R O R    M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGCV_NO_ADJ      "Illegal attempt to call before calling CVodeAdjMalloc."
+#define MSGCV_BAD_STEPS   "Steps nonpositive illegal."
+#define MSGCV_BAD_INTERP  "Illegal value for interp."
+#define MSGCV_BAD_WHICH   "Illegal value for which."
+#define MSGCV_NO_BCK      "No backward problems have been defined yet."
+#define MSGCV_NO_FWD      "Illegal attempt to call before calling CVodeF."
+#define MSGCV_BAD_TB0     "The initial time tB0 for problem %d is outside the interval over which the forward problem was solved."
+#define MSGCV_BAD_SENSI   "At least one backward problem requires sensitivities, but they were not stored for interpolation."
+#define MSGCV_BAD_ITASKB  "Illegal value for itaskB. Legal values are CV_NORMAL and CV_ONE_STEP."
+#define MSGCV_BAD_TBOUT   "The final time tBout is outside the interval over which the forward problem was solved."
+#define MSGCV_BACK_ERROR  "Error occured while integrating backward problem # %d" 
+#define MSGCV_BAD_TINTERP "Bad t = %g for interpolation."
+#define MSGCV_WRONG_INTERP "This function cannot be called for the specified interp type."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvodes/cvodes_io.c b/src/cvodes/cvodes_io.c
new file mode 100644
index 0000000..8468429
--- /dev/null
+++ b/src/cvodes/cvodes_io.c
@@ -0,0 +1,1882 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4272 $
+ * $Date: 2014-12-02 11:19:41 -0800 (Tue, 02 Dec 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the optional input and output
+ * functions for the CVODES solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes_impl.h"
+
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* 
+ * =================================================================
+ * CVODES optional input functions
+ * =================================================================
+ */
+
+/* 
+ * CVodeSetErrHandlerFn
+ *
+ * Specifies the error handler function
+ */
+
+int CVodeSetErrHandlerFn(void *cvode_mem, CVErrHandlerFn ehfun, void *eh_data)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetErrHandlerFn", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_ehfun = ehfun;
+  cv_mem->cv_eh_data = eh_data;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetErrFile
+ *
+ * Specifies the FILE pointer for output (NULL means no messages)
+ */
+
+int CVodeSetErrFile(void *cvode_mem, FILE *errfp)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetErrFile", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_errfp = errfp;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetIterType
+ *
+ * Specifies the iteration type (CV_FUNCTIONAL or CV_NEWTON)
+ */
+
+int CVodeSetIterType(void *cvode_mem, int iter)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetIterType", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if ((iter != CV_FUNCTIONAL) && (iter != CV_NEWTON)) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetIterType", MSGCV_BAD_ITER);
+    return (CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_iter = iter;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetUserData
+ *
+ * Specifies the user data pointer for f
+ */
+
+int CVodeSetUserData(void *cvode_mem, void *user_data)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetUserData", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_user_data = user_data;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxOrd
+ *
+ * Specifies the maximum method order
+ */
+
+int CVodeSetMaxOrd(void *cvode_mem, int maxord)
+{
+  CVodeMem cv_mem;
+  int qmax_alloc;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetMaxOrd", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (maxord <= 0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetMaxOrd", MSGCV_NEG_MAXORD);
+    return(CV_ILL_INPUT);
+  }
+  
+  /* Cannot increase maximum order beyond the value that
+     was used when allocating memory */
+  qmax_alloc = cv_mem->cv_qmax_alloc;
+  qmax_alloc = SUNMIN(qmax_alloc, cv_mem->cv_qmax_allocQ);
+  qmax_alloc = SUNMIN(qmax_alloc, cv_mem->cv_qmax_allocS);
+
+  if (maxord > qmax_alloc) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetMaxOrd", MSGCV_BAD_MAXORD);
+    return(CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_qmax = maxord;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxNumSteps
+ *
+ * Specifies the maximum number of integration steps
+ */
+
+int CVodeSetMaxNumSteps(void *cvode_mem, long int mxsteps)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetMaxNumSteps", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Passing mxsteps=0 sets the default. Passing mxsteps<0 disables the test. */
+  if (mxsteps == 0)
+    cv_mem->cv_mxstep = MXSTEP_DEFAULT;
+  else
+    cv_mem->cv_mxstep = mxsteps;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxHnilWarns
+ *
+ * Specifies the maximum number of warnings for small h
+ */
+
+int CVodeSetMaxHnilWarns(void *cvode_mem, int mxhnil)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetMaxHnilWarns", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_mxhnil = mxhnil;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ *CVodeSetStabLimDet
+ *
+ * Turns on/off the stability limit detection algorithm
+ */
+
+int CVodeSetStabLimDet(void *cvode_mem, booleantype sldet)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetStabLimDet", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if( sldet && (cv_mem->cv_lmm != CV_BDF) ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetStabLimDet", MSGCV_SET_SLDET);
+    return(CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_sldeton = sldet;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetInitStep
+ *
+ * Specifies the initial step size
+ */
+
+int CVodeSetInitStep(void *cvode_mem, realtype hin)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetInitStep", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_hin = hin;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMinStep
+ *
+ * Specifies the minimum step size
+ */
+
+int CVodeSetMinStep(void *cvode_mem, realtype hmin)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetMinStep", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (hmin<0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetMinStep", MSGCV_NEG_HMIN);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Passing 0 sets hmin = zero */
+  if (hmin == ZERO) {
+    cv_mem->cv_hmin = HMIN_DEFAULT;
+    return(CV_SUCCESS);
+  }
+
+  if (hmin * cv_mem->cv_hmax_inv > ONE) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetMinStep", MSGCV_BAD_HMIN_HMAX);
+    return(CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_hmin = hmin;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxStep
+ *
+ * Specifies the maximum step size
+ */
+
+int CVodeSetMaxStep(void *cvode_mem, realtype hmax)
+{
+  realtype hmax_inv;
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetMaxStep", MSGCV_NO_MEM);
+    return (CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (hmax < 0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetMaxStep", MSGCV_NEG_HMAX);
+    return(CV_ILL_INPUT);
+  }
+
+  /* Passing 0 sets hmax = infinity */
+  if (hmax == ZERO) {
+    cv_mem->cv_hmax_inv = HMAX_INV_DEFAULT;
+    return(CV_SUCCESS);
+  }
+
+  hmax_inv = ONE/hmax;
+  if (hmax_inv * cv_mem->cv_hmin > ONE) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetMaxStep", MSGCV_BAD_HMIN_HMAX);
+    return(CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_hmax_inv = hmax_inv;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetStopTime
+ *
+ * Specifies the time beyond which the integration is not to proceed.
+ */
+
+int CVodeSetStopTime(void *cvode_mem, realtype tstop)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetStopTime", MSGCV_NO_MEM);
+    return (CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* If CVode was called at least once, test if tstop is legal
+   * (i.e. if it was not already passed).
+   * If CVodeSetStopTime is called before the first call to CVode,
+   * tstop will be checked in CVode. */
+  if (cv_mem->cv_nst > 0) {
+
+    if ( (tstop - cv_mem->cv_tn) * cv_mem->cv_h < ZERO ) {
+      cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetStopTime", MSGCV_BAD_TSTOP, tstop, cv_mem->cv_tn);
+      return(CV_ILL_INPUT);
+    }
+
+  }
+
+  cv_mem->cv_tstop = tstop;
+  cv_mem->cv_tstopset = TRUE;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxErrTestFails
+ *
+ * Specifies the maximum number of error test failures during one
+ * step try.
+ */
+
+int CVodeSetMaxErrTestFails(void *cvode_mem, int maxnef)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetMaxErrTestFails", MSGCV_NO_MEM);
+    return (CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_maxnef = maxnef;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxConvFails
+ *
+ * Specifies the maximum number of nonlinear convergence failures 
+ * during one step try.
+ */
+
+int CVodeSetMaxConvFails(void *cvode_mem, int maxncf)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetMaxConvFails", MSGCV_NO_MEM);
+    return (CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_maxncf = maxncf;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetMaxNonlinIters
+ *
+ * Specifies the maximum number of nonlinear iterations during
+ * one solve.
+ */
+
+int CVodeSetMaxNonlinIters(void *cvode_mem, int maxcor)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetMaxNonlinIters", MSGCV_NO_MEM);
+    return (CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_maxcor = maxcor;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetNonlinConvCoef
+ *
+ * Specifies the coeficient in the nonlinear solver convergence
+ * test
+ */
+
+int CVodeSetNonlinConvCoef(void *cvode_mem, realtype nlscoef)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetNonlinConvCoef", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_nlscoef = nlscoef;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeSetRootDirection
+ *
+ * Specifies the direction of zero-crossings to be monitored.
+ * The default is to monitor both crossings.
+ */
+
+int CVodeSetRootDirection(void *cvode_mem, int *rootdir)
+{
+  CVodeMem cv_mem;
+  int i, nrt;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetRootDirection", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  nrt = cv_mem->cv_nrtfn;
+  if (nrt==0) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetRootDirection", MSGCV_NO_ROOT);
+    return(CV_ILL_INPUT);    
+  }
+
+  for(i=0; i<nrt; i++) cv_mem->cv_rootdir[i] = rootdir[i];
+
+  return(CV_SUCCESS);
+}
+
+
+/*
+ * CVodeSetNoInactiveRootWarn
+ *
+ * Disables issuing a warning if some root function appears
+ * to be identically zero at the beginning of the integration
+ */
+
+int CVodeSetNoInactiveRootWarn(void *cvode_mem)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetNoInactiveRootWarn", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_mxgnull = 0;
+  
+  return(CV_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * Quadrature optional input functions
+ * =================================================================
+ */
+
+int CVodeSetQuadErrCon(void *cvode_mem, booleantype errconQ)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetQuadErrCon", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_errconQ = errconQ;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * FSA optional input functions
+ * =================================================================
+ */
+
+int CVodeSetSensDQMethod(void *cvode_mem, int DQtype, realtype DQrhomax)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetSensDQMethod", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if ( (DQtype != CV_CENTERED) && (DQtype != CV_FORWARD) ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetSensDQMethod", MSGCV_BAD_DQTYPE);    
+    return(CV_ILL_INPUT);
+  }
+
+  if (DQrhomax < ZERO ) {
+    cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetSensDQMethod", MSGCV_BAD_DQRHO);    
+    return(CV_ILL_INPUT);
+  }
+
+  cv_mem->cv_DQtype = DQtype;
+  cv_mem->cv_DQrhomax = DQrhomax;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeSetSensErrCon(void *cvode_mem, booleantype errconS)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetSensErrCon", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_errconS = errconS;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeSetSensMaxNonlinIters(void *cvode_mem, int maxcorS)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetSensMaxNonlinIters", MSGCV_NO_MEM);    
+    return (CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  cv_mem->cv_maxcorS = maxcorS;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeSetSensParams(void *cvode_mem, realtype *p, realtype *pbar, int *plist)
+{
+  CVodeMem cv_mem;
+  int is, Ns;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetSensParams", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was sensitivity initialized? */
+
+  if (cv_mem->cv_SensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeSetSensParams", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  Ns = cv_mem->cv_Ns;
+
+  /* Parameters */
+
+  cv_mem->cv_p = p;
+
+  /* pbar */
+
+  if (pbar != NULL)
+    for (is=0; is<Ns; is++) {
+      if (pbar[is] == ZERO) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetSensParams", MSGCV_BAD_PBAR);
+        return(CV_ILL_INPUT);
+      }
+      cv_mem->cv_pbar[is] = SUNRabs(pbar[is]);
+    }
+  else
+    for (is=0; is<Ns; is++)
+      cv_mem->cv_pbar[is] = ONE;
+
+  /* plist */
+
+  if (plist != NULL)
+    for (is=0; is<Ns; is++) {
+      if ( plist[is] < 0 ) {
+        cvProcessError(cv_mem, CV_ILL_INPUT, "CVODES", "CVodeSetSensParams", MSGCV_BAD_PLIST);
+        return(CV_ILL_INPUT);
+      }
+      cv_mem->cv_plist[is] = plist[is];
+    }
+  else
+    for (is=0; is<Ns; is++)
+      cv_mem->cv_plist[is] = is;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeSetQuadSensErrCon(void *cvode_mem, booleantype errconQS)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeSetQuadSensErrCon", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }  
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was sensitivity initialized? */
+
+  if (cv_mem->cv_SensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeSetQuadSensTolerances", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  } 
+
+  /* Ckeck if quadrature sensitivity was initialized? */
+
+  if (cv_mem->cv_QuadSensMallocDone == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUADSENS, "CVODES", "CVodeSetQuadSensErrCon", MSGCV_NO_QUADSENSI); 
+    return(CV_NO_QUAD);
+  }
+
+  cv_mem->cv_errconQS = errconQS;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * CVODES optional output functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define nst            (cv_mem->cv_nst)
+#define nfe            (cv_mem->cv_nfe)
+#define ncfn           (cv_mem->cv_ncfn)
+#define netf           (cv_mem->cv_netf)
+#define nni            (cv_mem->cv_nni)
+#define nsetups        (cv_mem->cv_nsetups)
+#define qu             (cv_mem->cv_qu)
+#define next_q         (cv_mem->cv_next_q)
+#define ewt            (cv_mem->cv_ewt)  
+#define hu             (cv_mem->cv_hu)
+#define next_h         (cv_mem->cv_next_h)
+#define h0u            (cv_mem->cv_h0u)
+#define tolsf          (cv_mem->cv_tolsf)  
+#define acor           (cv_mem->cv_acor)
+#define lrw            (cv_mem->cv_lrw)
+#define liw            (cv_mem->cv_liw)
+#define nge            (cv_mem->cv_nge)
+#define iroots         (cv_mem->cv_iroots)
+#define nor            (cv_mem->cv_nor)
+#define sldeton        (cv_mem->cv_sldeton)
+#define tn             (cv_mem->cv_tn)
+#define efun           (cv_mem->cv_efun)
+
+/*
+ * CVodeGetNumSteps
+ *
+ * Returns the current number of integration steps
+ */
+
+int CVodeGetNumSteps(void *cvode_mem, long int *nsteps)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetNumSteps", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nsteps = nst;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNumRhsEvals
+ *
+ * Returns the current number of calls to f
+ */
+
+int CVodeGetNumRhsEvals(void *cvode_mem, long int *nfevals)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetNumRhsEvals", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nfevals = nfe;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNumLinSolvSetups
+ *
+ * Returns the current number of calls to the linear solver setup routine
+ */
+
+int CVodeGetNumLinSolvSetups(void *cvode_mem, long int *nlinsetups)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetNumLinSolvSetups", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nlinsetups = nsetups;
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeGetNumErrTestFails
+ *
+ * Returns the current number of error test failures
+ */
+
+int CVodeGetNumErrTestFails(void *cvode_mem, long int *netfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetNumErrTestFails", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *netfails = netf;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetLastOrder
+ *
+ * Returns the order on the last succesful step
+ */
+
+int CVodeGetLastOrder(void *cvode_mem, int *qlast)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetLastOrder", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *qlast = qu;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetCurrentOrder
+ *
+ * Returns the order to be attempted on the next step
+ */
+
+int CVodeGetCurrentOrder(void *cvode_mem, int *qcur)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetCurrentOrder", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *qcur = next_q;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNumStabLimOrderReds
+ *
+ * Returns the number of order reductions triggered by the stability
+ * limit detection algorithm
+ */
+
+int CVodeGetNumStabLimOrderReds(void *cvode_mem, long int *nslred)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetNumStabLimOrderReds", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sldeton==FALSE)
+    *nslred = 0;
+  else
+    *nslred = nor;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetActualInitStep
+ *
+ * Returns the step size used on the first step
+ */
+
+int CVodeGetActualInitStep(void *cvode_mem, realtype *hinused)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetActualInitStep", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *hinused = h0u;
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeGetLastStep
+ *
+ * Returns the step size used on the last successful step
+ */
+
+int CVodeGetLastStep(void *cvode_mem, realtype *hlast)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetLastStep", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *hlast = hu;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetCurrentStep
+ *
+ * Returns the step size to be attempted on the next step
+ */
+
+int CVodeGetCurrentStep(void *cvode_mem, realtype *hcur)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetCurrentStep", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+  
+  *hcur = next_h;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetCurrentTime
+ *
+ * Returns the current value of the independent variable
+ */
+
+int CVodeGetCurrentTime(void *cvode_mem, realtype *tcur)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetCurrentTime", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *tcur = tn;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetTolScaleFactor
+ *
+ * Returns a suggested factor for scaling tolerances
+ */
+
+int CVodeGetTolScaleFactor(void *cvode_mem, realtype *tolsfact)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetTolScaleFactor", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *tolsfact = tolsf;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetErrWeights
+ *
+ * This routine returns the current weight vector.
+ */
+
+int CVodeGetErrWeights(void *cvode_mem, N_Vector eweight)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetErrWeights", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  N_VScale(ONE, ewt, eweight);
+
+  return(CV_SUCCESS);
+}
+
+/*
+ * CVodeGetEstLocalErrors
+ *
+ * Returns an estimate of the local error
+ */
+
+int CVodeGetEstLocalErrors(void *cvode_mem, N_Vector ele)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetEstLocalErrors", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  N_VScale(ONE, acor, ele);
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetWorkSpace
+ *
+ * Returns integrator work space requirements
+ */
+
+int CVodeGetWorkSpace(void *cvode_mem, long int *lenrw, long int *leniw)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetWorkSpace", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *leniw = liw;
+  *lenrw = lrw;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetIntegratorStats
+ *
+ * Returns integrator statistics
+ */
+
+int CVodeGetIntegratorStats(void *cvode_mem, long int *nsteps, long int *nfevals, 
+                            long int *nlinsetups, long int *netfails, int *qlast, 
+                            int *qcur, realtype *hinused, realtype *hlast, 
+                            realtype *hcur, realtype *tcur)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetIntegratorStats", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nsteps = nst;
+  *nfevals = nfe;
+  *nlinsetups = nsetups;
+  *netfails = netf;
+  *qlast = qu;
+  *qcur = next_q;
+  *hinused = h0u;
+  *hlast = hu;
+  *hcur = next_h;
+  *tcur = tn;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNumGEvals
+ *
+ * Returns the current number of calls to g (for rootfinding)
+ */
+
+int CVodeGetNumGEvals(void *cvode_mem, long int *ngevals)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetNumGEvals", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *ngevals = nge;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetRootInfo
+ *
+ * Returns pointer to array rootsfound showing roots found
+ */
+
+int CVodeGetRootInfo(void *cvode_mem, int *rootsfound)
+{
+  CVodeMem cv_mem;
+  int i, nrt;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetRootInfo", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  nrt = cv_mem->cv_nrtfn;
+
+  for (i=0; i<nrt; i++) rootsfound[i] = iroots[i];
+
+  return(CV_SUCCESS);
+}
+
+
+/* 
+ * CVodeGetNumNonlinSolvIters
+ *
+ * Returns the current number of iterations in the nonlinear solver
+ */
+
+int CVodeGetNumNonlinSolvIters(void *cvode_mem, long int *nniters)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetNumNonlinSolvIters", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nniters = nni;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNumNonlinSolvConvFails
+ *
+ * Returns the current number of convergence failures in the
+ * nonlinear solver
+ */
+
+int CVodeGetNumNonlinSolvConvFails(void *cvode_mem, long int *nncfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetNumNonlinSolvConvFails", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nncfails = ncfn;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * CVodeGetNonlinSolvStats
+ *
+ * Returns nonlinear solver statistics
+ */
+
+int CVodeGetNonlinSolvStats(void *cvode_mem, long int *nniters, 
+                            long int *nncfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetNonlinSolvStats", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  *nniters = nni;
+  *nncfails = ncfn;
+
+  return(CV_SUCCESS);
+}
+
+
+/* 
+ * =================================================================
+ * Quadrature optional output functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define quadr          (cv_mem->cv_quadr)
+#define nfQe           (cv_mem->cv_nfQe)
+#define netfQ          (cv_mem->cv_netfQ)
+#define ewtQ           (cv_mem->cv_ewtQ)
+#define errconQ        (cv_mem->cv_errconQ)
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetQuadNumRhsEvals(void *cvode_mem, long int *nfQevals)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadNumRhsEvals", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (quadr==FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUAD, "CVODES", "CVodeGetQuadNumRhsEvals", MSGCV_NO_QUAD); 
+    return(CV_NO_QUAD);
+  }
+
+  *nfQevals = nfQe;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetQuadNumErrTestFails(void *cvode_mem, long int *nQetfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadNumErrTestFails", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (quadr==FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUAD, "CVODES", "CVodeGetQuadNumErrTestFails", MSGCV_NO_QUAD); 
+    return(CV_NO_QUAD);
+  }
+
+  *nQetfails = netfQ;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetQuadErrWeights(void *cvode_mem, N_Vector eQweight)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadErrWeights", MSGCV_NO_MEM); 
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (quadr==FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUAD, "CVODES", "CVodeGetQuadErrWeights", MSGCV_NO_QUAD); 
+    return(CV_NO_QUAD);
+  }
+
+  if(errconQ) N_VScale(ONE, ewtQ, eQweight);
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetQuadStats(void *cvode_mem, long int *nfQevals, long int *nQetfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadStats", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (quadr==FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUAD, "CVODES", "CVodeGetQuadStats", MSGCV_NO_QUAD); 
+    return(CV_NO_QUAD);
+  }
+
+  *nfQevals = nfQe;
+  *nQetfails = netfQ;
+
+  return(CV_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * Quadrature FSA optional output functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define quadr_sensi    (cv_mem->cv_quadr_sensi)
+#define nfQSe          (cv_mem->cv_nfQSe)
+#define netfQS         (cv_mem->cv_netfQS)
+#define ewtQS          (cv_mem->cv_ewtQS)
+#define errconQS       (cv_mem->cv_errconQS)
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetQuadSensNumRhsEvals(void *cvode_mem, long int *nfQSevals)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadSensNumRhsEvals", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (quadr_sensi == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUADSENS, "CVODES", "CVodeGetQuadSensNumRhsEvals", MSGCV_NO_QUADSENSI); 
+    return(CV_NO_QUADSENS);
+  }
+
+  *nfQSevals = nfQSe;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetQuadSensNumErrTestFails(void *cvode_mem, long int *nQSetfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadSensNumErrTestFails", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (quadr_sensi == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUADSENS, "CVODES", "CVodeGetQuadSensNumErrTestFails", MSGCV_NO_QUADSENSI); 
+    return(CV_NO_QUADSENS);
+  }
+
+  *nQSetfails = netfQS;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetQuadSensErrWeights(void *cvode_mem, N_Vector *eQSweight)
+{
+  CVodeMem cv_mem;
+  int is, Ns;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadSensErrWeights", MSGCV_NO_MEM); 
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (quadr_sensi == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUADSENS, "CVODES", "CVodeGetQuadSensErrWeights", MSGCV_NO_QUADSENSI); 
+    return(CV_NO_QUADSENS);
+  }
+  Ns = cv_mem->cv_Ns;
+
+  if (errconQS)
+    for (is=0; is<Ns; is++)
+      N_VScale(ONE, ewtQS[is], eQSweight[is]);
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetQuadSensStats(void *cvode_mem, long int *nfQSevals, long int *nQSetfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetQuadSensStats", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (quadr_sensi == FALSE) {
+    cvProcessError(cv_mem, CV_NO_QUADSENS, "CVODES", "CVodeGetQuadSensStats", MSGCV_NO_QUADSENSI); 
+    return(CV_NO_QUADSENS);
+  }
+
+  *nfQSevals = nfQSe;
+  *nQSetfails = netfQS;
+
+  return(CV_SUCCESS);
+}
+
+
+/* 
+ * =================================================================
+ * FSA optional output functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define sensi          (cv_mem->cv_sensi)
+#define ism            (cv_mem->cv_ism)
+#define ewtS           (cv_mem->cv_ewtS)
+#define nfSe           (cv_mem->cv_nfSe)
+#define nfeS           (cv_mem->cv_nfeS)
+#define nniS           (cv_mem->cv_nniS)
+#define ncfnS          (cv_mem->cv_ncfnS)
+#define netfS          (cv_mem->cv_netfS)
+#define nsetupsS       (cv_mem->cv_nsetupsS)
+#define nniS1          (cv_mem->cv_nniS1)
+#define ncfnS1         (cv_mem->cv_ncfnS1)
+#define ncfS1          (cv_mem->cv_ncfS1)
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetSensNumRhsEvals(void *cvode_mem, long int *nfSevals)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSensNumRhsEvals", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetSensNumRhsEvals", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  *nfSevals = nfSe;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetNumRhsEvalsSens(void *cvode_mem, long int *nfevalsS)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetNumRhsEvalsSens", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetNumRhsEvalsSens", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  *nfevalsS = nfeS;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetSensNumErrTestFails(void *cvode_mem, long int *nSetfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSensNumErrTestFails", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetSensNumErrTestFails", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  *nSetfails = netfS;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetSensNumLinSolvSetups(void *cvode_mem, long int *nlinsetupsS)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSensNumLinSolvSetups", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetSensNumLinSolvSetups", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  *nlinsetupsS = nsetupsS;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetSensErrWeights(void *cvode_mem, N_Vector *eSweight)
+{
+  CVodeMem cv_mem;
+  int is, Ns;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSensErrWeights", MSGCV_NO_MEM);    
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetSensErrWeights", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  Ns = cv_mem->cv_Ns;
+
+  for (is=0; is<Ns; is++)
+    N_VScale(ONE, ewtS[is], eSweight[is]);
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetSensStats(void *cvode_mem, long int *nfSevals, long int *nfevalsS, 
+                      long int *nSetfails, long int *nlinsetupsS)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSensStats", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetSensStats", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  *nfSevals = nfSe;
+  *nfevalsS = nfeS;
+  *nSetfails = netfS;
+  *nlinsetupsS = nsetupsS;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetSensNumNonlinSolvIters(void *cvode_mem, long int *nSniters)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSensNumNonlinSolvIters", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetSensNumNonlinSolvIters", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  *nSniters = nniS;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetSensNumNonlinSolvConvFails(void *cvode_mem, long int *nSncfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSensNumNonlinSolvConvFails", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetSensNumNonlinSolvConvFails", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  *nSncfails = ncfnS;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetStgrSensNumNonlinSolvIters(void *cvode_mem, long int *nSTGR1niters)
+{
+  CVodeMem cv_mem;
+  int is, Ns;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetStgrSensNumNonlinSolvIters", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  Ns = cv_mem->cv_Ns;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetStgrSensNumNonlinSolvIters", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  if(ism==CV_STAGGERED1) 
+    for(is=0; is<Ns; is++) nSTGR1niters[is] = nniS1[is];
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetStgrSensNumNonlinSolvConvFails(void *cvode_mem, long int *nSTGR1ncfails)
+{
+  CVodeMem cv_mem;
+  int is, Ns;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetStgrSensNumNonlinSolvConvFails", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  Ns = cv_mem->cv_Ns;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetStgrSensNumNonlinSolvConvFails", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  if(ism==CV_STAGGERED1) 
+    for(is=0; is<Ns; is++) nSTGR1ncfails[is] = ncfnS1[is];
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int CVodeGetSensNonlinSolvStats(void *cvode_mem, long int *nSniters, 
+                                long int *nSncfails)
+{
+  CVodeMem cv_mem;
+
+  if (cvode_mem==NULL) {
+    cvProcessError(NULL, CV_MEM_NULL, "CVODES", "CVodeGetSensNonlinSolvstats", MSGCV_NO_MEM);
+    return(CV_MEM_NULL);
+  }
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (sensi==FALSE) {
+    cvProcessError(cv_mem, CV_NO_SENS, "CVODES", "CVodeGetSensNonlinSolvStats", MSGCV_NO_SENSI);
+    return(CV_NO_SENS);
+  }
+
+  *nSniters = nniS;
+  *nSncfails = ncfnS;
+
+  return(CV_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+char *CVodeGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(24*sizeof(char));
+
+  switch(flag) {
+  case CV_SUCCESS:
+    sprintf(name,"CV_SUCCESS");
+    break;
+  case CV_TSTOP_RETURN:
+    sprintf(name,"CV_TSTOP_RETURN");
+    break;
+  case CV_ROOT_RETURN:
+    sprintf(name,"CV_ROOT_RETURN");
+    break;
+  case CV_TOO_MUCH_WORK:
+    sprintf(name,"CV_TOO_MUCH_WORK");
+    break;
+  case CV_TOO_MUCH_ACC:
+    sprintf(name,"CV_TOO_MUCH_ACC");
+    break;
+  case CV_ERR_FAILURE:
+    sprintf(name,"CV_ERR_FAILURE");
+    break;
+  case CV_CONV_FAILURE:
+    sprintf(name,"CV_CONV_FAILURE");
+    break;
+  case CV_LINIT_FAIL:
+    sprintf(name,"CV_LINIT_FAIL");
+    break;
+  case CV_LSETUP_FAIL:
+    sprintf(name,"CV_LSETUP_FAIL");
+    break;
+  case CV_LSOLVE_FAIL:
+    sprintf(name,"CV_LSOLVE_FAIL");
+    break;
+  case CV_RHSFUNC_FAIL:
+    sprintf(name,"CV_RHSFUNC_FAIL");
+    break;
+  case CV_FIRST_RHSFUNC_ERR:
+    sprintf(name,"CV_FIRST_RHSFUNC_ERR");
+    break;
+  case CV_REPTD_RHSFUNC_ERR:
+    sprintf(name,"CV_REPTD_RHSFUNC_ERR");
+    break;
+  case CV_UNREC_RHSFUNC_ERR:
+    sprintf(name,"CV_UNREC_RHSFUNC_ERR");
+    break;
+  case CV_RTFUNC_FAIL:
+    sprintf(name,"CV_RTFUNC_FAIL");
+    break;
+  case CV_MEM_FAIL:
+    sprintf(name,"CV_MEM_FAIL");
+    break;
+  case CV_MEM_NULL:
+    sprintf(name,"CV_MEM_NULL");
+    break;
+  case CV_ILL_INPUT:
+    sprintf(name,"CV_ILL_INPUT");
+    break;
+  case CV_NO_MALLOC:
+    sprintf(name,"CV_NO_MALLOC");
+    break;
+  case CV_BAD_K:
+    sprintf(name,"CV_BAD_K");
+    break;
+  case CV_BAD_T:
+    sprintf(name,"CV_BAD_T");
+    break;
+  case CV_BAD_DKY:
+    sprintf(name,"CV_BAD_DKY");
+    break;
+  case CV_NO_QUAD:
+    sprintf(name,"CV_NO_QUAD");
+    break;
+  case CV_QRHSFUNC_FAIL:
+    sprintf(name,"CV_QRHSFUNC_FAIL");
+    break;
+  case CV_FIRST_QRHSFUNC_ERR:
+    sprintf(name,"CV_FIRST_QRHSFUNC_ERR");
+    break;
+  case CV_REPTD_QRHSFUNC_ERR:
+    sprintf(name,"CV_REPTD_QRHSFUNC_ERR");
+    break;
+  case CV_UNREC_QRHSFUNC_ERR:
+    sprintf(name,"CV_UNREC_QRHSFUNC_ERR");
+    break;
+  case CV_BAD_IS:
+    sprintf(name,"CV_BAD_IS");
+    break;
+  case CV_NO_SENS:
+    sprintf(name,"CV_NO_SENS");
+    break;
+  case CV_SRHSFUNC_FAIL:
+    sprintf(name,"CV_SRHSFUNC_FAIL");
+    break;
+  case CV_FIRST_SRHSFUNC_ERR:
+    sprintf(name,"CV_FIRST_SRHSFUNC_ERR");
+    break;
+  case CV_REPTD_SRHSFUNC_ERR:
+    sprintf(name,"CV_REPTD_SRHSFUNC_ERR");
+    break;
+  case CV_UNREC_SRHSFUNC_ERR:
+    sprintf(name,"CV_UNREC_SRHSFUNC_ERR");
+    break;
+  case CV_TOO_CLOSE:
+    sprintf(name,"CV_TOO_CLOSE");
+    break; 
+  case CV_NO_ADJ:
+    sprintf(name,"CV_NO_ADJ");
+    break;
+  case CV_NO_FWD:
+    sprintf(name,"CV_NO_FWD");
+    break;
+  case CV_NO_BCK:
+    sprintf(name,"CV_NO_BCK");
+    break;
+  case CV_BAD_TB0:
+    sprintf(name,"CV_BAD_TB0");
+    break;
+  case CV_REIFWD_FAIL:
+    sprintf(name,"CV_REIFWD_FAIL");
+    break;
+  case CV_FWD_FAIL:
+    sprintf(name,"CV_FWD_FAIL");
+    break;
+  case CV_GETY_BADT:
+    sprintf(name,"CV_GETY_BADT");
+    break;  
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
diff --git a/src/cvodes/cvodes_klu.c b/src/cvodes/cvodes_klu.c
new file mode 100644
index 0000000..575cd82
--- /dev/null
+++ b/src/cvodes/cvodes_klu.c
@@ -0,0 +1,818 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4951 $
+ * $Date: 2016-09-22 10:21:00 -0700 (Thu, 22 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVKLU linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes/cvodes_klu.h"
+#include "cvodes_impl.h"
+#include "cvodes_sparse_impl.h"
+#include "sundials/sundials_klu_impl.h"
+#include "sundials/sundials_math.h"
+
+/* Constants */
+
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+#define TWOTHIRDS    RCONST(0.6666666666666667)
+
+/* CVKLU linit, lsetup, lsolve, and lfree routines */
+ 
+static int cvKLUInit(CVodeMem cv_mem);
+
+static int cvKLUSetup(CVodeMem cv_mem, int convfail, N_Vector ypred, 
+		      N_Vector fpred, booleantype *jcurPtr,
+		      N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int cvKLUSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+		      N_Vector ycur, N_Vector fcur);
+
+static int cvKLUFree(CVodeMem cv_mem);
+
+/* CVKLU lfreeB function */
+static int cvKLUFreeB(CVodeBMem cvb_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVKLU
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the CVODE / KLU linear solver module.  
+ * CVKLU first calls the existing lfree routine if this is not NULL.
+ * Then it sets the cv_linit, cv_lsetup, cv_lsolve, cv_lperf, and
+ * cv_lfree fields in (*cv_mem) to be CVKLUInit, CVKLUSetup,
+ * CVKLUSolve, NULL, and CVKLUFree, respectively.
+ * It allocates memory for a structure of type CVkluMemRec and sets
+ * the cv_lmem field in (*cvode_mem) to the address of this structure.
+ * It sets setupNonNull in (*cvode_mem) to TRUE.
+ * Finally, it allocates memory for KLU.
+ * The return value is CVSLS_SUCCESS = 0, CVSLS_LMEM_FAIL = -1,
+ * or CVSLS_ILL_INPUT = -2.
+ *
+ * NOTE: The KLU linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVKLU will first 
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int CVKLU(void *cvode_mem, int n, int nnz, int sparsetype)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+  KLUData klu_data;
+  int flag;
+
+  /* Return immediately if cv_mem is NULL. */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "cvKLU", 
+                   MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the Direct solver */
+  if (cv_mem->cv_tempv->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSLS", "cvKLU", 
+                   MSGSP_BAD_NVECTOR);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  if (cv_mem->cv_lfree != NULL) cv_mem->cv_lfree(cv_mem);
+
+  /* Set five main function fields in cv_mem. */
+  cv_mem->cv_linit  = cvKLUInit;
+  cv_mem->cv_lsetup = cvKLUSetup;
+  cv_mem->cv_lsolve = cvKLUSolve;
+  cv_mem->cv_lfree  = cvKLUFree;
+
+  /* Get memory for CVSlsMemRec. */
+  cvsls_mem = (CVSlsMem) malloc(sizeof(struct CVSlsMemRec));
+  if (cvsls_mem == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvKLU", 
+                   MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Get memory for KLUData. */
+  klu_data = (KLUData)malloc(sizeof(struct KLUDataRec));
+  if (klu_data == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvKLU", 
+                   MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  cv_mem->cv_setupNonNull = TRUE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  cvsls_mem->s_jaceval = NULL;
+  cvsls_mem->s_jacdata = NULL;
+  cvsls_mem->sparsetype = sparsetype;
+
+  /* Allocate memory for the sparse Jacobian */
+  cvsls_mem->s_JacMat = SparseNewMat(n, n, nnz, sparsetype);
+  if (cvsls_mem->s_JacMat == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvKLU", 
+                   MSGSP_MEM_FAIL);
+    free(cvsls_mem);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Allocate memory for saved sparse Jacobian */
+  cvsls_mem->s_savedJ = SparseNewMat(n, n, nnz, sparsetype);
+  if (cvsls_mem->s_savedJ == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvKLU", 
+                   MSGSP_MEM_FAIL);
+    SparseDestroyMat(cvsls_mem->s_JacMat);
+    free(cvsls_mem);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Initialize KLU structures */
+  switch (sparsetype) {
+    case CSC_MAT:
+      klu_data->sun_klu_solve = &klu_solve;
+      break;
+    case CSR_MAT:
+      klu_data->sun_klu_solve = &klu_tsolve;
+      break;
+    default:
+      SparseDestroyMat(cvsls_mem->s_JacMat);
+      SparseDestroyMat(cvsls_mem->s_savedJ);
+      free(klu_data);
+      free(cvsls_mem);
+      return(CVSLS_ILL_INPUT);
+  }
+  klu_data->s_Symbolic = NULL;
+  klu_data->s_Numeric = NULL;
+
+  /* Set default parameters for KLU */
+  flag = klu_defaults(&klu_data->s_Common);
+  if (flag == 0) {
+    cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "cvKLU", 
+                   MSGSP_PACKAGE_FAIL);
+    return(CVSLS_PACKAGE_FAIL);
+  }
+
+  /* Set ordering to COLAMD as the cvode default use.
+     Users can set a different value with CVKLUSetOrdering,
+     and the user-set value is loaded before any call to klu_analyze in
+     CVKLUSetup.  */
+  klu_data->s_ordering = 1;
+  klu_data->s_Common.ordering = klu_data->s_ordering;
+
+  /* Attach linear solver memory to the integrator memory */
+  cvsls_mem->s_solver_data = (void *) klu_data;
+  cv_mem->cv_lmem = cvsls_mem;
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+
+  return(CVSLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to CVKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is CVSLS_SUCCESS = 0, CVSLS_MEM_NULL = -1,
+ * CVSLS_LMEM_NULL = -2, CVSLS_ILL_INPUT = -3, or CVSLS_MEM_FAIL = -4.
+ *
+ * -----------------------------------------------------------------
+ */
+
+int CVKLUReInit(void *cvode_mem, int n, int nnz, int reinit_type)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+  KLUData klu_data;
+
+  /* Return immediately if cv_mem is NULL. */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVKLUReInit", 
+                   MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Return immediately if cv_lmem is NULL. */
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(NULL, CVSLS_LMEM_NULL, "CVSLS", "CVKLUReInit", 
+                   MSGSP_LMEM_NULL);
+    return(CVSLS_LMEM_NULL);
+  }
+  cvsls_mem = (CVSlsMem) (cv_mem->cv_lmem);
+  klu_data = (KLUData) cvsls_mem->s_solver_data;
+
+  /* Return if reinit_type is not valid */
+  if ((reinit_type != 1) && (reinit_type != 2)) {
+    cvProcessError(NULL, CVSLS_ILL_INPUT, "CVSLS", "CVKLUReInit", 
+                   MSGSP_ILL_INPUT);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  if (reinit_type == 1) {
+
+    /* Destroy previous Jacobian information */
+    if (cvsls_mem->s_JacMat) {
+      SparseDestroyMat(cvsls_mem->s_JacMat);
+    }
+
+    /* Allocate memory for the sparse Jacobian */
+    cvsls_mem->s_JacMat = SparseNewMat(n, n, nnz, cvsls_mem->sparsetype);
+    if (cvsls_mem->s_JacMat == NULL) {
+      cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "CVKLU", 
+                     MSGSP_MEM_FAIL);
+      return(CVSLS_MEM_FAIL);
+    }
+  }
+
+  /* Free the prior factorazation and reset for first factorization */
+  if( klu_data->s_Symbolic != NULL)
+    klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  if( klu_data->s_Numeric != NULL)
+    klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  cvsls_mem->s_first_factorize = 1;
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVKLU interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the CVKLU
+  linear solver module.  
+  It returns 0 if successful.
+*/
+
+static int cvKLUInit(CVodeMem cv_mem)
+{
+  CVSlsMem cvsls_mem;
+
+  cvsls_mem = (CVSlsMem)cv_mem->cv_lmem;
+
+  cvsls_mem->s_jacdata = cv_mem->cv_user_data;
+
+  cvsls_mem->s_nje = 0;
+  /* This forces factorization for every call to CVODE */
+  cvsls_mem->s_first_factorize = 1;
+  cvsls_mem->s_nstlj = 0;
+
+  cvsls_mem->s_last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the CVKLU linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     CVSLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int cvKLUSetup(CVodeMem cv_mem, int convfail, N_Vector ypred, 
+		      N_Vector fpred, booleantype *jcurPtr,
+		      N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  int retval;
+  long int nst, nstlj;
+  realtype tn, gamma, gammap, dgamma;
+  CVSlsMem cvsls_mem;
+  CVSlsSparseJacFn jaceval;
+  KLUData klu_data;
+  SlsMat JacMat, savedJ;
+  void *jacdata;
+  
+  realtype uround_twothirds;
+
+  uround_twothirds = SUNRpowerR(cv_mem->cv_uround,TWOTHIRDS);
+
+  cvsls_mem = (CVSlsMem) (cv_mem->cv_lmem);
+  tn = cv_mem->cv_tn; 
+  gamma = cv_mem->cv_gamma;
+  gammap = cv_mem->cv_gammap;
+  nst = cv_mem->cv_nst;
+
+  klu_data = (KLUData) cvsls_mem->s_solver_data;
+
+  jaceval = cvsls_mem->s_jaceval;
+  jacdata = cvsls_mem->s_jacdata;
+  JacMat = cvsls_mem->s_JacMat;
+  savedJ = cvsls_mem->s_savedJ;
+  nstlj = cvsls_mem->s_nstlj;
+
+  /* Check that Jacobian eval routine is set */
+  if (jaceval == NULL) {
+    cvProcessError(cv_mem, CVSLS_JAC_NOSET, "CVSLS", "cvKLUSetup", 
+		    MSGSP_JAC_NOSET);
+    free(cvsls_mem); cvsls_mem = NULL;
+    return(CVSLS_JAC_NOSET);
+  }
+
+  /* Determine whether Jacobian needs to be recalculated */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVS_MSBJ) ||
+         ((convfail == CV_FAIL_BAD_J) && (dgamma < CVS_DGMAX)) ||
+         (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    SparseCopyMat(savedJ, JacMat);
+  } else {
+    /* If jok = FALSE, call jac routine for new J value */
+    cvsls_mem->s_nje++;
+    cvsls_mem->s_nstlj = nst;
+    *jcurPtr = TRUE;
+    SparseSetMatToZero(JacMat);
+    retval = jaceval(tn, ypred, fpred, JacMat, jacdata, vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      cvProcessError(cv_mem, CVSLS_JACFUNC_UNRECVR, "CVSLS", "cvKLUSetup", MSGSP_JACFUNC_FAILED);
+      cvsls_mem->s_last_flag = CVSLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      cvsls_mem->s_last_flag = CVSLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    SparseCopyMat(JacMat, savedJ);
+  }
+
+  /* Scale and add I to get M = I - gamma*J */
+  SparseScaleMat(-gamma, JacMat);
+  SparseAddIdentityMat(JacMat);
+
+  if (cvsls_mem->s_first_factorize) {
+    /* ------------------------------------------------------------
+       Get the symbolic factorization
+       ------------------------------------------------------------*/ 
+    /* Update the ordering option with any user-updated values from 
+       calls to CVKLUSetOrdering */
+    klu_data->s_Common.ordering = klu_data->s_ordering;
+
+     if (klu_data->s_Symbolic != NULL) {
+       klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+     }
+     klu_data->s_Symbolic = klu_analyze(JacMat->NP, JacMat->indexptrs, 
+				       JacMat->indexvals, &(klu_data->s_Common));
+    if (klu_data->s_Symbolic == NULL) {
+      cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(CVSLS_PACKAGE_FAIL);
+    }
+
+    /* ------------------------------------------------------------
+       Compute the LU factorization of  the Jacobian.
+       ------------------------------------------------------------*/
+    /* If klu_factor previously called, free data */
+    if( klu_data->s_Numeric != NULL) {
+       klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+    }
+    klu_data->s_Numeric = klu_factor(JacMat->indexptrs, JacMat->indexvals, 
+				     JacMat->data, 
+				     klu_data->s_Symbolic, &(klu_data->s_Common));
+
+    if (klu_data->s_Numeric == NULL) {
+      cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSetup", 
+		     MSGSP_PACKAGE_FAIL);
+      return(CVSLS_PACKAGE_FAIL);
+    }
+
+    cvsls_mem->s_first_factorize = 0;
+  }
+  else {
+    
+    retval = klu_refactor(JacMat->indexptrs, JacMat->indexvals, JacMat->data, 
+			  klu_data->s_Symbolic, klu_data->s_Numeric,
+			  &(klu_data->s_Common));
+    if (retval == 0) {
+      cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "cvKLUSetup", 
+		     MSGSP_PACKAGE_FAIL);
+      return(CVSLS_PACKAGE_FAIL);
+    }
+    
+    /*-----------------------------------------------------------
+      Check if a cheap estimate of the reciprocal of the condition 
+      number is getting too small.  If so, delete
+      the prior numeric factorization and recompute it.
+      -----------------------------------------------------------*/
+    
+    retval = klu_rcond(klu_data->s_Symbolic, klu_data->s_Numeric,
+		       &(klu_data->s_Common));
+    if (retval == 0) {
+      cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSetup", 
+		     MSGSP_PACKAGE_FAIL);
+      return(CVSLS_PACKAGE_FAIL);
+    }
+
+    if ( (klu_data->s_Common.rcond)  < uround_twothirds ) {
+      
+      /* Condition number may be getting large.  
+	 Compute more accurate estimate */
+      retval = klu_condest(JacMat->indexptrs, JacMat->data, 
+			   klu_data->s_Symbolic, klu_data->s_Numeric,
+			   &(klu_data->s_Common));
+      if (retval == 0) {
+	cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSetup", 
+		       MSGSP_PACKAGE_FAIL);
+	return(CVSLS_PACKAGE_FAIL);
+      }
+      
+      if ( (klu_data->s_Common.condest) > 
+	   (1.0/uround_twothirds) ) {
+
+	/* More accurate estimate also says condition number is 
+	   large, so recompute the numeric factorization */
+
+	klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+	
+	klu_data->s_Numeric = klu_factor(JacMat->indexptrs, JacMat->indexvals, 
+					 JacMat->data, klu_data->s_Symbolic, 
+					 &(klu_data->s_Common));
+
+	if (klu_data->s_Numeric == NULL) {
+	  cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSetup", 
+			 MSGSP_PACKAGE_FAIL);
+	  return(CVSLS_PACKAGE_FAIL);
+	}
+      }
+    }
+  }
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+  
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the CVKLU linear
+  solver module.  It calls the KLU solve routine,
+  then returns CVSLS_SUCCESS = 0.
+*/
+
+static int cvKLUSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+		      N_Vector ycur, N_Vector fcur)
+{
+  int flag, lmm;
+  realtype gamrat;
+  CVSlsMem cvsls_mem;
+  KLUData klu_data;
+  SlsMat JacMat;
+  realtype *bd;
+  
+  gamrat = cv_mem->cv_gamrat;
+  lmm = cv_mem->cv_lmm;
+
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+  JacMat = cvsls_mem->s_JacMat;
+
+  klu_data = (KLUData) cvsls_mem->s_solver_data;
+
+  bd = N_VGetArrayPointer(b);
+
+  /* Call KLU to solve the linear system */
+  flag = klu_data->sun_klu_solve(klu_data->s_Symbolic, klu_data->s_Numeric, JacMat->NP, 1, bd, 
+                                 &(klu_data->s_Common));
+  if (flag == 0) {
+    cvProcessError(cv_mem, CVSLS_PACKAGE_FAIL, "CVSLS", "CVKLUSolve", 
+		    MSGSP_PACKAGE_FAIL);
+    return(CVSLS_PACKAGE_FAIL);
+  }
+
+  /* Scale the correction to account for change in gamma. */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    N_VScale(TWO/(ONE + gamrat), b, b);
+  }
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+  return(CVSLS_SUCCESS);
+}
+
+/*
+  This routine frees memory specific to the CVKLU linear solver.
+*/
+
+static int cvKLUFree(CVodeMem cv_mem)
+{
+  CVSlsMem cvsls_mem;
+  KLUData klu_data;
+  
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+  klu_data = (KLUData) cvsls_mem->s_solver_data;
+
+  if( klu_data->s_Numeric != NULL)
+  {
+     klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  }
+  if( klu_data->s_Symbolic != NULL)
+  {
+     klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  }
+
+  if (cvsls_mem->s_JacMat) {
+    SparseDestroyMat(cvsls_mem->s_JacMat);
+    cvsls_mem->s_JacMat = NULL;
+  }
+
+  if (cvsls_mem->s_savedJ) {
+    SparseDestroyMat(cvsls_mem->s_savedJ);
+    cvsls_mem->s_savedJ = NULL;
+  }
+
+  free(klu_data); 
+  free(cv_mem->cv_lmem); 
+
+  return(0);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * CVKLUSetOrdering sets the ordering used by KLU for reducing fill.
+ * Options are: 0 for AMD, 1 for COLAMD, and 2 for the natural ordering.
+ * The default used in CVODE is 1 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+int CVKLUSetOrdering(void *cv_mem_v, int ordering_choice)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+  KLUData klu_data;
+
+ /* Return immediately if cv_mem is NULL */
+  if (cv_mem_v == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVKLUSetOrdering",
+		    MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cv_mem_v;
+
+ /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) ) {
+    cvProcessError(NULL, CVSLS_ILL_INPUT, "CVSLS", "CVKLUSetOrdering",
+		    MSGSP_ILL_INPUT);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+  klu_data = (KLUData) cvsls_mem->s_solver_data;
+
+  klu_data->s_ordering = ordering_choice;
+
+  return(CVSLS_SUCCESS);
+}
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * CVKLUB is a wrapper around CVKLU. It attaches the CVKLU linear solver
+ * to the backward problem memory block.
+ */
+
+int CVKLUB(void *cvode_mem, int which, int n, int nnz, int sparsetype)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  CVSlsMemB cvslsB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSKLU", "CVKLUB", MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSLS_NO_ADJ, "CVSKLU", "CVKLUB", MSGSP_NO_ADJ);
+    return(CVSLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSKLU", "CVKLUB", MSGSP_BAD_WHICH);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Get memory for CVSlsMemRecB */
+  cvslsB_mem = (CVSlsMemB) malloc(sizeof(struct CVSlsMemRecB));
+  if (cvslsB_mem == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSKLU", "CVKLUB", MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* initialize Jacobian function */
+  cvslsB_mem->s_djacB = NULL;
+
+  /* attach lmemB and lfreeB */
+  cvB_mem->cv_lmem = cvslsB_mem;
+  cvB_mem->cv_lfree = cvKLUFreeB;
+
+  flag = CVKLU(cvodeB_mem, n, nnz, sparsetype);
+
+  if (flag != CVSLS_SUCCESS) {
+    free(cvslsB_mem);
+    cvslsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+
+/*
+ * CVKLUReInitB is a wrapper around CVKLUReInit. 
+ * CVKLUReInitB pulls off the memory block associated with the
+ * which parameter and reinitializes the KLU solver associated with that block.
+ * The 'which' argument is the int returned by CVodeCreateB.
+ */
+int CVKLUReInitB(void *cvode_mem, int which, int n, int nnz, int reinit_type)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  /* CVSlsMemB cvslsB_mem; */
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSKLU", "CVKLUReInitB", MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSLS_NO_ADJ, "CVSKLU", "CVKLUReInitB", MSGSP_NO_ADJ);
+    return(CVSLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSKLU", "CVKLUReInitB", MSGSP_BAD_WHICH);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVKLUReInit(cvodeB_mem, n, nnz, reinit_type);
+
+  return(flag);
+}
+
+/*
+ * CVKLUSetOrderingB is a wrapper around CVKLUSetOrdering. 
+ * CVKLUSetOrderingB pulls off the memory block associated with the
+ * which parameter and sets the ordering for the solver associated with that block.
+ */
+int CVKLUSetOrderingB(void *cvode_mem, int which, int ordering_choice)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  /* CVSlsMemB cvslsB_mem; */
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSKLU", "CVKLUSetOrderingB", MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSLS_NO_ADJ, "CVSKLU", "CVKLUSetOrderingB", MSGSP_NO_ADJ);
+    return(CVSLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSKLU", "CVKLUSetOrderingB", MSGSP_BAD_WHICH);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVKLUSetOrdering(cvodeB_mem, ordering_choice);
+
+  return(flag);
+}
+
+
+/*
+ * cvKLUFreeB frees the memory associated with the CVSKLU linear
+ * solver for backward integration.
+ */
+
+static int cvKLUFreeB(CVodeBMem cvB_mem)
+{
+  CVSlsMemB cvslsB_mem;
+
+  cvslsB_mem = (CVSlsMemB) (cvB_mem->cv_lmem);
+
+  free(cvslsB_mem);
+
+  return(0);
+}
+
diff --git a/src/cvodes/cvodes_lapack.c b/src/cvodes/cvodes_lapack.c
new file mode 100644
index 0000000..5209b5d
--- /dev/null
+++ b/src/cvodes/cvodes_lapack.c
@@ -0,0 +1,839 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4923 $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a dense or banded CVODES 
+ * linear solver using BLAS and LAPACK functions.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvodes/cvodes_lapack.h>
+#include "cvodes_direct_impl.h"
+#include "cvodes_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PROTOTYPES FOR PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/* CVSLAPACK DENSE linit, lsetup, lsolve, and lfree routines */ 
+static int cvLapackDenseInit(CVodeMem cv_mem);
+static int cvLapackDenseSetup(CVodeMem cv_mem, int convfail, 
+                              N_Vector yP, N_Vector fctP, 
+                              booleantype *jcurPtr,
+                              N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int cvLapackDenseSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                              N_Vector yC, N_Vector fctC);
+static int cvLapackDenseFree(CVodeMem cv_mem);
+
+/* CVSLAPACK BAND linit, lsetup, lsolve, and lfree routines */ 
+static int cvLapackBandInit(CVodeMem cv_mem);
+static int cvLapackBandSetup(CVodeMem cv_mem, int convfail, 
+                             N_Vector yP, N_Vector fctP, 
+                             booleantype *jcurPtr,
+                             N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int cvLapackBandSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                             N_Vector yC, N_Vector fctC);
+static int cvLapackBandFree(CVodeMem cv_mem);
+
+/* CVSLAPACK lfreeB functions */
+static int cvLapackDenseFreeB(CVodeBMem cvB_mem);
+static int cvLapackBandFreeB(CVodeBMem cvB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define lmm            (cv_mem->cv_lmm)
+#define f              (cv_mem->cv_f)
+#define uround         (cv_mem->cv_uround)
+#define nst            (cv_mem->cv_nst)
+#define tn             (cv_mem->cv_tn)
+#define h              (cv_mem->cv_h)
+#define gamma          (cv_mem->cv_gamma)
+#define gammap         (cv_mem->cv_gammap)
+#define gamrat         (cv_mem->cv_gamrat)
+#define ewt            (cv_mem->cv_ewt)
+
+#define linit          (cv_mem->cv_linit)
+#define lsetup         (cv_mem->cv_lsetup)
+#define lsolve         (cv_mem->cv_lsolve)
+#define lfree          (cv_mem->cv_lfree)
+#define lmem           (cv_mem->cv_lmem)
+#define tempv          (cv_mem->cv_tempv)
+#define setupNonNull   (cv_mem->cv_setupNonNull)
+
+#define mtype          (cvdls_mem->d_type)
+#define n              (cvdls_mem->d_n)
+#define jacDQ          (cvdls_mem->d_jacDQ)
+#define djac           (cvdls_mem->d_djac)
+#define bjac           (cvdls_mem->d_bjac)
+#define M              (cvdls_mem->d_M)
+#define mu             (cvdls_mem->d_mu)
+#define ml             (cvdls_mem->d_ml)
+#define smu            (cvdls_mem->d_smu)
+#define pivots         (cvdls_mem->d_pivots)
+#define savedJ         (cvdls_mem->d_savedJ)
+#define nstlj          (cvdls_mem->d_nstlj)
+#define nje            (cvdls_mem->d_nje)
+#define nfeDQ          (cvdls_mem->d_nfeDQ)
+#define J_data         (cvdls_mem->d_J_data)
+#define last_flag      (cvdls_mem->d_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * CVLapackDense
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the linear solver module.  CVLapackDense first
+ * calls the existing lfree routine if this is not NULL.  Then it sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be cvLapackDenseInit, cvLapackDenseSetup, cvLapackDenseSolve, 
+ * and cvLapackDenseFree, respectively.  It allocates memory for a 
+ * structure of type CVDlsMemRec and sets the cv_lmem field in 
+ * (*cvode_mem) to the address of this structure.  It sets setupNonNull 
+ * in (*cvode_mem) to TRUE, and the d_jac field to the default 
+ * cvDlsDenseDQJac. Finally, it allocates memory for M, pivots, and 
+ * (if needed) savedJ.
+ * The return value is SUCCESS = 0, or LMEM_FAIL = -1.
+ *
+ * NOTE: The dense linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVLapackDense will first 
+ *       test for a compatible N_Vector internal representation 
+ *       by checking that N_VGetArrayPointer and N_VSetArrayPointer 
+ *       exist.
+ * -----------------------------------------------------------------
+ */
+int CVLapackDense(void *cvode_mem, int N)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSLAPACK", "CVLapackDense", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the CVSLAPACK solver */
+  if (tempv->ops->nvgetarraypointer == NULL ||
+      tempv->ops->nvsetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSLAPACK", "CVLapackDense", MSGD_BAD_NVECTOR);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  if (lfree !=NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */
+  linit  = cvLapackDenseInit;
+  lsetup = cvLapackDenseSetup;
+  lsolve = cvLapackDenseSolve;
+  lfree  = cvLapackDenseFree;
+
+  /* Get memory for CVDlsMemRec */
+  cvdls_mem = NULL;
+  cvdls_mem = (CVDlsMem) malloc(sizeof(struct CVDlsMemRec));
+  if (cvdls_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSLAPACK", "CVLapackDense", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_DENSE;
+
+  /* Initialize Jacobian-related data */
+  jacDQ  = TRUE;
+  djac   = NULL;
+  J_data = NULL;
+
+  last_flag = CVDLS_SUCCESS;
+  cvDlsInitializeCounters(cvdls_mem);  
+  setupNonNull = TRUE;
+
+  /* Set problem dimension */
+  n = (long int) N;
+
+  /* Allocate memory for M, pivot array, and (if needed) savedJ */
+  M = NULL;
+  pivots = NULL;
+  savedJ = NULL;
+
+  M = NewDenseMat(n, n);
+  if (M == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSLAPACK", "CVLapackDense", MSGD_MEM_FAIL);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  pivots = NewIntArray(N);
+  if (pivots == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSLAPACK", "CVLapackDense", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  savedJ = NewDenseMat(n, n);
+  if (savedJ == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSLAPACK", "CVLapackDense", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    DestroyArray(pivots);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvdls_mem;
+
+  return(CVDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVLapackBand
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the band linear solver module. It first calls
+ * the existing lfree routine if this is not NULL.  It then sets the
+ * cv_linit, cv_lsetup, cv_lsolve, and cv_lfree fields in (*cvode_mem)
+ * to be cvLapackBandInit, cvLapackBandSetup, cvLapackBandSolve, 
+ * and cvLapackBandFree, respectively.  It allocates memory for a 
+ * structure of type CVLapackBandMemRec and sets the cv_lmem field in 
+ * (*cvode_mem) to the address of this structure.  It sets setupNonNull 
+ * in (*cvode_mem) to be TRUE, mu to be mupper, ml to be mlower, and 
+ * the jacE and jacI field to NULL.
+ * Finally, it allocates memory for M, pivots, and (if needed) savedJ.  
+ * The CVLapackBand return value is CVDLS_SUCCESS = 0, 
+ * CVDLS_MEM_FAIL = -1, or CVDLS_ILL_INPUT = -2.
+ *
+ * NOTE: The CVSLAPACK linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVLapackBand will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that the function 
+ *       N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */                  
+int CVLapackBand(void *cvode_mem, int N, int mupper, int mlower)
+{
+  CVodeMem cv_mem;
+  CVDlsMem cvdls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSLAPACK", "CVLapackBand", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (tempv->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSLAPACK", "CVLapackBand", MSGD_BAD_NVECTOR);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */  
+  linit  = cvLapackBandInit;
+  lsetup = cvLapackBandSetup;
+  lsolve = cvLapackBandSolve;
+  lfree  = cvLapackBandFree;
+  
+  /* Get memory for CVDlsMemRec */
+  cvdls_mem = NULL;
+  cvdls_mem = (CVDlsMem) malloc(sizeof(struct CVDlsMemRec));
+  if (cvdls_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSLAPACK", "CVLapackBand", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_BAND;
+
+  /* Initialize Jacobian-related data */
+  jacDQ  = TRUE;
+  bjac   = NULL;
+  J_data = NULL;
+
+  last_flag = CVDLS_SUCCESS;
+  cvDlsInitializeCounters(cvdls_mem);  
+  setupNonNull = TRUE;
+  
+  /* Load problem dimension */
+  n = (long int) N;
+
+  /* Load half-bandwiths in cvdls_mem */
+  ml = (long int) mlower;
+  mu = (long int) mupper;
+
+  /* Test ml and mu for legality */
+  if ((ml < 0) || (mu < 0) || (ml >= n) || (mu >= n)) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSLAPACK", "CVLapackBand", MSGD_BAD_SIZES);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  smu = mu + ml;
+
+  /* Allocate memory for M, savedJ, and pivot arrays */
+  M = NULL;
+  pivots = NULL;
+  savedJ = NULL;
+
+  M = NewBandMat(n, mu, ml, smu);
+  if (M == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSLAPACK", "CVLapackBand", MSGD_MEM_FAIL);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }  
+  pivots = NewIntArray(N);
+  if (pivots == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSLAPACK", "CVLapackBand", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+  savedJ = NewBandMat(n, mu, ml, smu);
+  if (savedJ == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSLAPACK", "CVLapackBand", MSGD_MEM_FAIL);
+    DestroyMat(M);
+    DestroyArray(pivots);
+    free(cvdls_mem); cvdls_mem = NULL;
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvdls_mem;
+
+  return(CVDLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH DENSE JACOBIANS
+ * =================================================================
+ */
+
+/*
+ * cvLapackDenseInit does remaining initializations specific to the dense
+ * linear solver.
+ */
+static int cvLapackDenseInit(CVodeMem cv_mem)
+{
+  CVDlsMem cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  cvDlsInitializeCounters(cvdls_mem);  
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (jacDQ) {
+    djac = cvDlsDenseDQJac;
+    J_data = cv_mem;
+  } else {
+    J_data = cv_mem->cv_user_data;
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * cvLapackDenseSetup does the setup operations for the dense linear solver.
+ * It makes a decision whether or not to call the Jacobian evaluation
+ * routine based on various state variables, and if not it uses the 
+ * saved copy. In any case, it constructs the Newton matrix M = I - gamma*J
+ * updates counters, and calls the dense LU factorization routine.
+ */
+static int cvLapackDenseSetup(CVodeMem cv_mem, int convfail,
+                              N_Vector yP, N_Vector fctP,
+                              booleantype *jcurPtr,
+                              N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  CVDlsMem cvdls_mem;
+  realtype dgamma, fact;
+  booleantype jbad, jok;
+  int ier, retval, one = 1;
+  int intn, lenmat;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  intn = (int) n;
+  lenmat = M->ldata;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVD_MSBJ) ||
+    ((convfail == CV_FAIL_BAD_J) && (dgamma < CVD_DGMAX)) ||
+    (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+    
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    dcopy_f77(&lenmat, savedJ->data, &one, M->data, &one);
+    
+  } else {
+    
+    /* If jok = FALSE, call jac routine for new J value */
+    nje++;
+    nstlj = nst;
+    *jcurPtr = TRUE;
+    SetToZero(M);
+
+    retval = djac(n, tn, yP, fctP, M, J_data, tmp1, tmp2, tmp3);
+    if (retval == 0) {
+      dcopy_f77(&lenmat, M->data, &one, savedJ->data, &one);
+    } else if (retval < 0) {
+      cvProcessError(cv_mem, CVDLS_JACFUNC_UNRECVR, "CVSLAPACK", "cvLapackDenseSetup", MSGD_JACFUNC_FAILED);
+      last_flag = CVDLS_JACFUNC_UNRECVR;
+      return(-1);
+    } else if (retval > 0) {
+      last_flag = CVDLS_JACFUNC_RECVR;
+      return(1);
+    }
+    
+  }
+
+  /* Scale J by - gamma */
+  fact = -gamma;
+  dscal_f77(&lenmat, &fact, M->data, &one);
+  
+  /* Add identity to get M = I - gamma*J*/
+  AddIdentity(M);
+
+  /* Do LU factorization of M */
+  dgetrf_f77(&intn, &intn, M->data, &intn, pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+/*
+ * cvLapackDenseSolve handles the solve operation for the dense linear solver
+ * by calling the dense backsolve routine.
+ */
+static int cvLapackDenseSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                              N_Vector yC, N_Vector fctC)
+{
+  CVDlsMem cvdls_mem;
+  realtype *bd, fact;
+  int ier, one = 1;
+  int intn;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  intn = (int) n;
+
+  bd = N_VGetArrayPointer(b);
+
+  dgetrs_f77("N", &intn, &one, M->data, &intn, pivots, bd, &intn, &ier, 1); 
+  if (ier > 0) return(1);
+
+  /* For BDF, scale the correction to account for change in gamma */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    fact = TWO/(ONE + gamrat);
+    dscal_f77(&intn, &fact, bd, &one); 
+  }
+  
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * cvLapackDenseFree frees memory specific to the dense linear solver.
+ */
+static int cvLapackDenseFree(CVodeMem cv_mem)
+{
+  CVDlsMem  cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  DestroyMat(M);
+  DestroyArray(pivots);
+  DestroyMat(savedJ);
+  free(cvdls_mem); 
+  cvdls_mem = NULL;
+
+  return(0);
+}
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH BAND JACOBIANS
+ * =================================================================
+ */
+
+/*
+ * cvLapackBandInit does remaining initializations specific to the band
+ * linear solver.
+ */
+static int cvLapackBandInit(CVodeMem cv_mem)
+{
+  CVDlsMem cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  cvDlsInitializeCounters(cvdls_mem);  
+
+  /* Set Jacobian function and data, depending on jacDQ */
+  if (jacDQ) {
+    bjac = cvDlsBandDQJac;
+    J_data = cv_mem;
+  } else {
+    J_data = cv_mem->cv_user_data;
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * cvLapackBandSetup does the setup operations for the band linear solver.
+ * It makes a decision whether or not to call the Jacobian evaluation
+ * routine based on various state variables, and if not it uses the 
+ * saved copy. In any case, it constructs the Newton matrix M = I - gamma*J, 
+ * updates counters, and calls the band LU factorization routine.
+ */
+static int cvLapackBandSetup(CVodeMem cv_mem, int convfail, 
+                             N_Vector yP, N_Vector fctP, 
+                             booleantype *jcurPtr,
+                             N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  CVDlsMem cvdls_mem;
+  realtype dgamma, fact;
+  booleantype jbad, jok;
+  int ier, retval, one = 1;
+  int intn, iml, imu, lenmat, ldmat;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  intn = (int) n;
+  iml = (int) ml;
+  imu = (int) mu;
+  lenmat = M->ldata;
+  ldmat = M->ldim;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVD_MSBJ) ||
+    ((convfail == CV_FAIL_BAD_J) && (dgamma < CVD_DGMAX)) ||
+    (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+    
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    dcopy_f77(&lenmat, savedJ->data, &one, M->data, &one);
+    
+  } else {
+    
+    /* If jok = FALSE, call jac routine for new J value */
+    nje++;
+    nstlj = nst;
+    *jcurPtr = TRUE;
+    SetToZero(M); 
+
+    retval = bjac(n, mu, ml, tn, yP, fctP, M, J_data, tmp1, tmp2, tmp3);
+    if (retval == 0) {
+      dcopy_f77(&lenmat, M->data, &one, savedJ->data, &one);
+    } else if (retval < 0) {
+      cvProcessError(cv_mem, CVDLS_JACFUNC_UNRECVR, "CVSLAPACK", "cvLapackBandSetup", MSGD_JACFUNC_FAILED);
+      last_flag = CVDLS_JACFUNC_UNRECVR;
+      return(-1);
+    } else if (retval > 0) {
+      last_flag = CVDLS_JACFUNC_RECVR;
+      return(1);
+    }
+    
+  }
+  
+  /* Scale J by - gamma */
+  fact = -gamma;
+  dscal_f77(&lenmat, &fact, M->data, &one);
+  
+  /* Add identity to get M = I - gamma*J*/
+  AddIdentity(M);
+  
+  /* Do LU factorization of M */
+  dgbtrf_f77(&intn, &intn, &iml, &imu, M->data, &ldmat, pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+
+}
+
+/*
+ * cvLapackBandSolve handles the solve operation for the band linear solver
+ * by calling the band backsolve routine.
+ */
+static int cvLapackBandSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                             N_Vector yC, N_Vector fctC)
+{
+  CVDlsMem cvdls_mem;
+  realtype *bd, fact;
+  int ier, one = 1;
+  int intn, iml, imu, ldmat;
+
+  cvdls_mem = (CVDlsMem) lmem;
+
+  intn = (int) n;
+  iml = (int) ml;
+  imu = (int) mu;
+  ldmat = M->ldim;
+
+  bd = N_VGetArrayPointer(b);
+
+  dgbtrs_f77("N", &intn, &iml, &imu, &one, M->data, &ldmat, pivots, bd, &intn, &ier, 1);
+  if (ier > 0) return(1);
+
+  /* For BDF, scale the correction to account for change in gamma */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    fact = TWO/(ONE + gamrat);
+    dscal_f77(&intn, &fact, bd, &one); 
+  }
+
+  last_flag = CVDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * cvLapackBandFree frees memory specific to the band linear solver.
+ */
+static int cvLapackBandFree(CVodeMem cv_mem)
+{
+  CVDlsMem  cvdls_mem;
+
+  cvdls_mem = (CVDlsMem) lmem;
+  
+  DestroyMat(M);
+  DestroyArray(pivots);
+  DestroyMat(savedJ);
+  free(cvdls_mem); 
+  cvdls_mem = NULL;
+
+  return(0);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * CVLapackDenseB is a wrapper around CVLapackDense. It attaches the
+ * dense CVSLAPACK linear solver to the backward problem memory block.
+ */
+
+int CVLapackDenseB(void *cvode_mem, int which, int nB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  CVDlsMemB cvdlsB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSLAPACK", "CVLapackDenseB", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVDLS_NO_ADJ, "CVSLAPACK", "CVLapackDenseB", MSGD_NO_ADJ);
+    return(CVDLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSLAPACK", "CVLapackDenseB", MSGCV_BAD_WHICH);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Get memory for CVDlsMemRecB */
+  cvdlsB_mem = (CVDlsMemB) malloc(sizeof(struct CVDlsMemRecB));
+  if (cvdlsB_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSLAPACK", "CVLapackDenseB", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* set matrix type */
+  cvdlsB_mem->d_typeB = SUNDIALS_DENSE;
+
+  /* initialize Jacobian function */
+  cvdlsB_mem->d_djacB = NULL;
+
+  /* attach lmemB and lfreeB */
+  cvB_mem->cv_lmem = cvdlsB_mem;
+  cvB_mem->cv_lfree = cvLapackDenseFreeB;
+
+  flag = CVLapackDense(cvodeB_mem, nB);
+
+  if (flag != CVDLS_SUCCESS) {
+    free(cvdlsB_mem);
+    cvdlsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * cvLapackDenseFreeB frees the memory associated with the dense CVSLAPACK
+ * linear solver for backward integration.
+ */
+
+static int cvLapackDenseFreeB(CVodeBMem cvB_mem)
+{
+  CVDlsMemB cvdlsB_mem;
+
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  free(cvdlsB_mem);
+
+  return(0);
+}
+
+/*
+ * CVLapackBandB is a wrapper around CVLapackBand. It attaches the band
+ * CVSLAPACK linear solver to the backward problem memory block.
+ */
+
+int CVLapackBandB(void *cvode_mem, int which,
+                  int nB, int mupperB, int mlowerB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  CVDlsMemB cvdlsB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVDLS_MEM_NULL, "CVSLAPACK", "CVLapackBandB", MSGD_CVMEM_NULL);
+    return(CVDLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVDLS_NO_ADJ, "CVSLAPACK", "CVLapackBandB", MSGD_NO_ADJ);
+    return(CVDLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVDLS_ILL_INPUT, "CVSLAPACK", "CVLapackBandB", MSGCV_BAD_WHICH);
+    return(CVDLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Get memory for CVDlsMemRecB */
+  cvdlsB_mem = (CVDlsMemB) malloc(sizeof(struct CVDlsMemRecB));
+  if (cvdlsB_mem == NULL) {
+    cvProcessError(cv_mem, CVDLS_MEM_FAIL, "CVSLAPACK", "CVLapackBandB", MSGD_MEM_FAIL);
+    return(CVDLS_MEM_FAIL);
+  }
+
+  /* set matrix type */
+  cvdlsB_mem->d_typeB = SUNDIALS_BAND;
+
+  /* initialize Jacobian function */
+  cvdlsB_mem->d_bjacB = NULL;
+
+  /* attach lmemB and lfreeB */
+  cvB_mem->cv_lmem = cvdlsB_mem;
+  cvB_mem->cv_lfree = cvLapackBandFreeB;
+
+  flag = CVLapackBand(cvodeB_mem, nB, mupperB, mlowerB);
+
+  if (flag != CVDLS_SUCCESS) {
+    free(cvdlsB_mem);
+    cvdlsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * cvLapackBandFreeB frees the memory associated with the band CVSLAPACK
+ * linear solver for backward integration.
+ */
+
+static int cvLapackBandFreeB(CVodeBMem cvB_mem)
+{
+  CVDlsMemB cvdlsB_mem;
+
+  cvdlsB_mem = (CVDlsMemB) (cvB_mem->cv_lmem);
+
+  free(cvdlsB_mem);
+
+  return(0);
+}
diff --git a/src/cvodes/cvodes_sparse.c b/src/cvodes/cvodes_sparse.c
new file mode 100644
index 0000000..b1d35e3
--- /dev/null
+++ b/src/cvodes/cvodes_sparse.c
@@ -0,0 +1,407 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4086 $
+ * $Date: 2014-04-30 16:04:45 -0700 (Wed, 30 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for an CVSLS linear solver.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes_impl.h"
+#include "cvodes_sparse_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTION PROTOTYPES
+ * =================================================================
+ */
+
+static int cvSlsSparseJacBWrapper(realtype t,
+				  N_Vector yB, N_Vector fyB, 
+				  SlsMat JB, void *cvode_mem,
+				  N_Vector tmp1B, N_Vector tmp2B, 
+				  N_Vector tmp3B);
+
+static int cvSlsSparseJacBSWrapper(realtype t,
+				   N_Vector yB, N_Vector fyB, 
+				   SlsMat JB, void *cvode_mem,
+				   N_Vector tmp1B, N_Vector tmp2B, 
+				   N_Vector tmp3B);
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS FOR IMPLICIT INTEGRATION
+ * =================================================================
+ */
+              
+/*
+ * CVSlsSetSparseJacFn specifies the sparse Jacobian function.
+ */
+int CVSlsSetSparseJacFn(void *cvode_mem, CVSlsSparseJacFn jac)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVSlsSetSparseJacFn", 
+		    MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSLS_LMEM_NULL, "CVSLS", 
+		    "CVSlsSetSparseJacFn", MSGSP_LMEM_NULL);
+    return(CVSLS_LMEM_NULL);
+  }
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+
+  cvsls_mem->s_jaceval = jac;
+
+  return(CVSLS_SUCCESS);
+}
+
+/*
+ * CVSlsGetNumJacEvals returns the number of Jacobian evaluations.
+ */
+int CVSlsGetNumJacEvals(void *cvode_mem, long int *njevals)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVSlsGetNumJacEvals", MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSLS_LMEM_NULL, "CVSLS", 
+		    "CVSlsGetNumJacEvals", MSGSP_LMEM_NULL);
+    return(CVSLS_LMEM_NULL);
+  }
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+
+  *njevals = cvsls_mem->s_nje;
+
+  return(CVSLS_SUCCESS);
+}
+
+/*
+ * CVSlsGetReturnFlagName returns the name associated with a CVSLS
+ * return value.
+ */
+char *CVSlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case CVSLS_SUCCESS:
+    sprintf(name,"CVSLS_SUCCESS");
+    break;   
+  case CVSLS_MEM_NULL:
+    sprintf(name,"CVSLS_MEM_NULL");
+    break;
+  case CVSLS_LMEM_NULL:
+    sprintf(name,"CVSLS_LMEM_NULL");
+    break;
+  case CVSLS_ILL_INPUT:
+    sprintf(name,"CVSLS_ILL_INPUT");
+    break;
+  case CVSLS_MEM_FAIL:
+    sprintf(name,"CVSLS_MEM_FAIL");
+    break;
+  case CVSLS_JAC_NOSET:
+    sprintf(name,"CVSLS_JAC_NOSET");
+    break;
+  case CVSLS_JACFUNC_UNRECVR:
+    sprintf(name,"CVSLS_JACFUNC_UNRECVR");
+    break;
+  case CVSLS_JACFUNC_RECVR:
+    sprintf(name,"CVSLS_JACFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * CVSlsGetLastFlag returns the last flag set in a CVSLS function.
+ */
+int CVSlsGetLastFlag(void *cvode_mem, long int *flag)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVSlsGetLastFlag", 
+		    MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (cv_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSLS_LMEM_NULL, "CVSLS", 
+		    "CVSlsGetLastFlag", MSGSP_LMEM_NULL);
+    return(CVSLS_LMEM_NULL);
+  }
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+
+  *flag = cvsls_mem->s_last_flag;
+
+  return(CVSLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * BACKWARD INTEGRATION SUPPORT
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * EXPORTED FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+int CVSlsSetSparseJacFnB(void *cvode_mem, int which, CVSlsSparseJacFnB jacB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSlsMemB cvslsB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSSLS", "CVSlsSetSparseJacFnB", MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSLS_NO_ADJ, "CVSSLS", "CVSlsSetSparseJacFnB", MSGSP_NO_ADJ);
+    return(CVSLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSSLS", "CVSlsSetSparseJacFnB", MSGSP_BAD_WHICH);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  if (cvB_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSLS_LMEMB_NULL, "CVSSLS", "CVSlsSetSparseJacFnB", MSGSP_LMEMB_NULL);
+    return(CVSLS_LMEMB_NULL);
+  }
+  cvslsB_mem = (CVSlsMemB) (cvB_mem->cv_lmem);
+
+  cvslsB_mem->s_djacB = jacB;
+
+  if (jacB != NULL) {
+    flag = CVSlsSetSparseJacFn(cvodeB_mem, cvSlsSparseJacBWrapper);
+  } else {
+    flag = CVSlsSetSparseJacFn(cvodeB_mem, NULL);
+  }
+
+  return(flag);
+}
+
+int CVSlsSetSparseJacFnBS(void *cvode_mem, int which, CVSlsSparseJacFnBS jacBS)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSlsMemB cvslsB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSSLS", "CVSlsSetSparseJacFnBS", MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSLS_NO_ADJ, "CVSSLS", "CVSlsSetSparseJacFnBS", MSGSP_NO_ADJ);
+    return(CVSLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSSLS", "CVSlsSetSparseJacFnBS", MSGSP_BAD_WHICH);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  if (cvB_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSLS_LMEMB_NULL, "CVSSLS", "CVSlsSetSparseJacFnBS", MSGSP_LMEMB_NULL);
+    return(CVSLS_LMEMB_NULL);
+  }
+  cvslsB_mem = (CVSlsMemB) (cvB_mem->cv_lmem);
+
+  cvslsB_mem->s_djacBS = jacBS;
+
+  if (jacBS != NULL) {
+    flag = CVSlsSetSparseJacFn(cvodeB_mem, cvSlsSparseJacBSWrapper);
+  } else {
+    flag = CVSlsSetSparseJacFn(cvodeB_mem, NULL);
+  }
+
+  return(flag);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * PRIVATE INTERFACE FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvSlsSparseJacBWrapper
+ *
+ * This routine interfaces to the CVSlsSparseJacFnB routine provided 
+ * by the user. cvSlsSparseJacBWrapper is of type CVSlsSparseJacFn.
+ * NOTE: data here contains cvode_mem
+ */
+
+static int cvSlsSparseJacBWrapper(realtype t,
+				  N_Vector yB, N_Vector fyB, 
+				  SlsMat JB, void *cvode_mem,
+				  N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSlsMemB cvslsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvslsB_mem = (CVSlsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  flag = ca_mem->ca_IMget(cv_mem, t, ca_mem->ca_ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSSLS", "cvSlsSparseJacBWrapper", MSGSP_BAD_TINTERP);
+    return(-1);
+  }
+
+  /* Call user's adjoint dense djacB routine (of type CVSlsSparseJacFnB) */
+  retval = cvslsB_mem->s_djacB(t, ca_mem->ca_ytmp, yB, fyB, JB, 
+			       cvB_mem->cv_user_data, 
+			       tmp1B, tmp2B, tmp3B);
+
+  return(retval);
+}
+
+/*
+ * cvSlsSparseJacBSWrapper
+ *
+ * This routine interfaces to the CVSlsSparseJacFnBS routine provided 
+ * by the user. cvSlsSparseJacBSWrapper is of type CVSlsSparseJacFn.
+ * NOTE: data here contains cvode_mem
+ */
+
+static int cvSlsSparseJacBSWrapper(realtype t,
+				   N_Vector yB, N_Vector fyB, 
+				   SlsMat JB, void *cvode_mem,
+				   N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSlsMemB cvslsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvslsB_mem = (CVSlsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  if (ca_mem->ca_IMinterpSensi)
+    flag = ca_mem->ca_IMget(cv_mem, t, ca_mem->ca_ytmp, ca_mem->ca_yStmp);
+  else 
+    flag = ca_mem->ca_IMget(cv_mem, t, ca_mem->ca_ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSSLS", "cvSlsSparseJacBSWrapper", MSGSP_BAD_TINTERP);
+    return(-1);
+  }
+
+  /* Call user's adjoint dense djacBS routine (of type CVSlsSparseJacFnBS) */
+  retval = cvslsB_mem->s_djacBS(t, ca_mem->ca_ytmp, ca_mem->ca_yStmp, 
+				yB, fyB, JB, cvB_mem->cv_user_data, 
+				tmp1B, tmp2B, tmp3B);
+
+  return(retval);
+}
diff --git a/src/cvodes/cvodes_sparse_impl.h b/src/cvodes/cvodes_sparse_impl.h
new file mode 100644
index 0000000..b526278
--- /dev/null
+++ b/src/cvodes/cvodes_sparse_impl.h
@@ -0,0 +1,137 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4558 $
+ * $Date: 2015-10-05 09:04:16 -0700 (Mon, 05 Oct 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the CVSLS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSSPARSE_IMPL_H
+#define _CVSSPARSE_IMPL_H
+
+#include "cvodes/cvodes_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * C V S P A R S E    I N T E R N A L    C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * CVSLS solver constants
+ * -----------------------------------------------------------------
+ * CVS_MSBJ   maximum number of steps between Jacobian evaluations
+ * CVS_DGMAX  maximum change in gamma between Jacobian evaluations
+ * -----------------------------------------------------------------
+ */
+ 
+#define CVS_MSBJ  50
+#define CVS_DGMAX RCONST(0.2)
+ 
+/*
+ * -----------------------------------------------------------------
+ * Types : CVSlsMemRec, CVSlsMem                             
+ * -----------------------------------------------------------------
+ * CVSlsMem is pointer to a CVSlsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVSlsMemRec {
+
+  CVSlsSparseJacFn s_jaceval; /* user Jacobian evaluation routine 
+				  to be called */
+  void *s_jacdata;           /* J_data is passed to djac or bjac */
+
+  long int s_nje;           /* nje = no. of calls to jac */
+
+  long int s_last_flag;     /* last error return flag */
+
+  int s_first_factorize;    /* flag telling whether the first 
+			       factorization needs to happen */
+
+  int s_nstlj;              /* time step of last Jacobian evaluation */
+
+  SlsMat s_JacMat;          /* M = I - gamma * df/dy */
+
+  SlsMat s_savedJ;          /* saved copy of Jacobian */
+
+  int sparsetype;           /* matrix type: compressed sparse column or row */
+
+  void *s_solver_data;      /* structure for solver-specific data */
+  
+
+} *CVSlsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+  
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : CVSlsMemRecB, CVSlsMemB       
+ * -----------------------------------------------------------------
+ * A CVSLS linear solver's specification function attaches such
+ * a structure to the lmemB filed of CVodeBMem
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVSlsMemRecB {
+
+  CVSlsSparseJacFnB s_djacB;
+  CVSlsSparseJacFnBS s_djacBS;
+
+} *CVSlsMemB;
+
+
+/*
+ * =================================================================
+ * E R R O R   M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGSP_CVMEM_NULL "Integrator memory is NULL."
+#define MSGSP_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGSP_MEM_FAIL "A memory request failed."
+#define MSGSP_LMEM_NULL "Linear solver memory is NULL."
+#define MSGSP_ILL_INPUT "Invalid input detected."
+#define MSGSP_JAC_NOSET "Jacobian evaluation function has not been set."
+#define MSGSP_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+#define MSGSP_PACKAGE_FAIL "A call to an external package failed."
+
+#define MSGSP_NO_ADJ "Illegal attempt to call before calling CVodeAdjMalloc."
+#define MSGSP_BAD_WHICH "Illegal value for which."
+#define MSGSP_LMEMB_NULL "Linear solver memory is NULL for the backward integration."
+#define MSGSP_BAD_TINTERP "Bad t for interpolation."
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvodes/cvodes_spbcgs.c b/src/cvodes/cvodes_spbcgs.c
new file mode 100644
index 0000000..2153de5
--- /dev/null
+++ b/src/cvodes/cvodes_spbcgs.c
@@ -0,0 +1,583 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4923 $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSPBCG linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvodes/cvodes_spbcgs.h>
+#include "cvodes_spils_impl.h"
+#include "cvodes_impl.h"
+
+#include <sundials/sundials_spbcgs.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* CVSPBCG linit, lsetup, lsolve, and lfree routines */
+
+static int CVSpbcgInit(CVodeMem cv_mem);
+
+static int CVSpbcgSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                        N_Vector vtemp2, N_Vector vtemp3);
+
+static int CVSpbcgSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ynow, N_Vector fnow);
+
+static int CVSpbcgFree(CVodeMem cv_mem);
+
+/* CVSPBCG lfreeB function */
+
+static int CVSpbcgFreeB(CVodeBMem cvB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define tq           (cv_mem->cv_tq)
+#define nst          (cv_mem->cv_nst)
+#define tn           (cv_mem->cv_tn)
+#define gamma        (cv_mem->cv_gamma)
+#define gammap       (cv_mem->cv_gammap)
+#define f            (cv_mem->cv_f)
+#define user_data    (cv_mem->cv_user_data)
+#define ewt          (cv_mem->cv_ewt)
+#define errfp        (cv_mem->cv_errfp)
+#define mnewt        (cv_mem->cv_mnewt)
+#define linit        (cv_mem->cv_linit)
+#define lsetup       (cv_mem->cv_lsetup)
+#define lsolve       (cv_mem->cv_lsolve)
+#define lfree        (cv_mem->cv_lfree)
+#define lmem         (cv_mem->cv_lmem)
+#define vec_tmpl     (cv_mem->cv_tempv)
+#define setupNonNull (cv_mem->cv_setupNonNull)
+
+#define sqrtN     (cvspils_mem->s_sqrtN)   
+#define ytemp     (cvspils_mem->s_ytemp)
+#define x         (cvspils_mem->s_x)
+#define ycur      (cvspils_mem->s_ycur)
+#define fcur      (cvspils_mem->s_fcur)
+#define delta     (cvspils_mem->s_delta)
+#define deltar    (cvspils_mem->s_deltar)
+#define npe       (cvspils_mem->s_npe)
+#define nli       (cvspils_mem->s_nli)
+#define nps       (cvspils_mem->s_nps)
+#define ncfl      (cvspils_mem->s_ncfl)
+#define nstlpre   (cvspils_mem->s_nstlpre)
+#define njtimes   (cvspils_mem->s_njtimes)
+#define nfes      (cvspils_mem->s_nfes)
+#define spils_mem (cvspils_mem->s_spils_mem)
+
+#define jtimesDQ  (cvspils_mem->s_jtimesDQ)
+#define jtimes    (cvspils_mem->s_jtimes)
+#define j_data    (cvspils_mem->s_j_data)
+
+#define last_flag (cvspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcg
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the Spbcg linear solver module. CVSpbcg first
+ * calls the existing lfree routine if this is not NULL. It then sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be CVSpbcgInit, CVSpbcgSetup, CVSpbcgSolve, and CVSpbcgFree,
+ * respectively. It allocates memory for a structure of type
+ * CVSpilsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure. It sets setupNonNull in (*cvode_mem),
+ * and sets various fields in the CVSpilsMemRec structure.
+ * Finally, CVSpbcg allocates memory for ytemp and x, and calls
+ * SpbcgMalloc to allocate memory for the Spbcg solver.
+ * -----------------------------------------------------------------
+ */
+
+int CVSpbcg(void *cvode_mem, int pretype, int maxl)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  SpbcgMem spbcg_mem;
+  int mxl;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPBCG", "CVSpbcg", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if N_VDotProd is present */
+  if (vec_tmpl->ops->nvdotprod == NULL) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPBCG", "CVSpbcg", MSGS_BAD_NVECTOR);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */
+  linit  = CVSpbcgInit;
+  lsetup = CVSpbcgSetup;
+  lsolve = CVSpbcgSolve;
+  lfree  = CVSpbcgFree;
+
+  /* Get memory for CVSpilsMemRec */
+  cvspils_mem = NULL;
+  cvspils_mem = (CVSpilsMem) malloc(sizeof(struct CVSpilsMemRec));
+  if (cvspils_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPBCG", "CVSpbcg", MSGS_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  cvspils_mem->s_type = SPILS_SPBCG;
+
+  /* Set Spbcg parameters that have been passed in call sequence */
+  cvspils_mem->s_pretype = pretype;
+  mxl = cvspils_mem->s_maxl = (maxl <= 0) ? CVSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  cvspils_mem->s_pset   = NULL;
+  cvspils_mem->s_psolve = NULL;
+  cvspils_mem->s_pfree  = NULL;
+  cvspils_mem->s_P_data = cv_mem->cv_user_data;
+
+  /* Set default values for the rest of the Spbcg parameters */
+  cvspils_mem->s_eplifac = CVSPILS_EPLIN;
+
+  cvspils_mem->s_last_flag = CVSPILS_SUCCESS;
+
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPBCG", "CVSpbcg", MSGS_BAD_PRETYPE);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPBCG", "CVSpbcg", MSGS_MEM_FAIL);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+  x = N_VClone(vec_tmpl);
+  if (x == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPBCG", "CVSpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt(N_VDotProd(ytemp, ytemp));
+
+  /* Call SpbcgMalloc to allocate workspace for Spbcg */
+  spbcg_mem = NULL;
+  spbcg_mem = SpbcgMalloc(mxl, vec_tmpl);
+  if (spbcg_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPBCG", "CVSpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(x);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPBCG memory to spils memory structure */
+  spils_mem = (void *) spbcg_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvspils_mem;
+
+  return(CVSPILS_SUCCESS);
+}
+
+
+
+/* Additional readability replacements */
+
+#define pretype (cvspils_mem->s_pretype)
+#define eplifac (cvspils_mem->s_eplifac)
+#define maxl    (cvspils_mem->s_maxl)
+#define psolve  (cvspils_mem->s_psolve)
+#define pset    (cvspils_mem->s_pset)
+#define P_data  (cvspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcgInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the Spbcg
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpbcgInit(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  SpbcgMem spbcg_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+  spbcg_mem = (SpbcgMem) spils_mem;
+
+
+  /* Initialize counters */
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  /* Check for legal combination pretype - psolve */
+  if ((pretype != PREC_NONE) && (psolve == NULL)) {
+    cvProcessError(cv_mem, -1, "CVSPBCG", "CVSpbcgInit", MSGS_PSOLVE_REQ);
+    last_flag = CVSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE)  and there is a preconditioning
+     setup phase (pset != NULL) */
+  setupNonNull = (pretype != PREC_NONE) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = CVSpilsDQJtimes;
+    j_data = cv_mem;
+  } else {
+    j_data = user_data;
+  }
+
+  /*  Set maxl in the SPBCG memory in case it was changed by the user */
+  spbcg_mem->l_max  = maxl;
+
+  last_flag = CVSPILS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcgSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the Spbcg linear solver.
+ * It makes a decision as to whether or not to signal for reevaluation
+ * of Jacobian data in the pset routine, based on various state
+ * variables, then it calls pset. If we signal for reevaluation,
+ * then we reset jcur = *jcurPtr to TRUE, regardless of the pset output.
+ * In any case, if jcur == TRUE, we increment npe and save nst in nstlpre.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpbcgSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                        N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  CVSpilsMem cvspils_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlpre + CVSPILS_MSBPRE) ||
+      ((convfail == CV_FAIL_BAD_J) && (dgamma < CVSPILS_DGMAX)) ||
+      (convfail == CV_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = pset(tn, ypred, fpred, jok, jcurPtr, gamma, P_data, 
+                vtemp1, vtemp2, vtemp3);
+  if (retval < 0) {
+    cvProcessError(cv_mem, SPBCG_PSET_FAIL_UNREC, "CVSPBCG", "CVSpbcgSetup", MSGS_PSET_FAILED);
+    last_flag = SPBCG_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    last_flag = SPBCG_PSET_FAIL_REC;
+  }
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    npe++;
+    nstlpre = nst;
+  }
+
+  last_flag = SPBCG_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcgSolve
+ * -----------------------------------------------------------------
+ * This routine handles the call to the generic solver SpbcgSolve
+ * for the solution of the linear system Ax = b with the SPBCG method.
+ * The solution x is returned in the vector b.
+ *
+ * If the WRMS norm of b is small, we return x = b (if this is the first
+ * Newton iteration) or x = 0 (if a later Newton iteration).
+ *
+ * Otherwise, we set the tolerance parameter and initial guess (x = 0),
+ * call SpbcgSolve, and copy the solution x into b. The x-scaling and
+ * b-scaling arrays are both equal to weight.
+ *
+ * The counters nli, nps, and ncfl are incremented, and the return value
+ * is set according to the success of SpbcgSolve. The success flag is
+ * returned if SpbcgSolve converged, or if this is the first Newton
+ * iteration and the residual norm was reduced below its initial value.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpbcgSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ynow, N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  CVSpilsMem cvspils_mem;
+  SpbcgMem spbcg_mem;
+  int nli_inc, nps_inc, retval;
+  
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  spbcg_mem = (SpbcgMem) spils_mem;
+
+  /* Test norm(b); if small, return x = 0 or x = b */
+  deltar = eplifac * tq[4]; 
+
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= deltar) {
+    if (mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  ycur = ynow;
+  fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to SpbcgSolve */  
+  delta = deltar * sqrtN;
+  N_VConst(ZERO, x);
+  
+  /* Call SpbcgSolve and copy x to b */
+  retval = SpbcgSolve(spbcg_mem, cv_mem, x, b, pretype, delta,
+                      cv_mem, weight, weight, CVSpilsAtimes, CVSpilsPSolve,
+                      &res_norm, &nli_inc, &nps_inc);
+
+  N_VScale(ONE, x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPBCG_SUCCESS) ncfl++;
+
+  /* Interpret return value from SpbcgSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPBCG_SUCCESS:
+    return(0);
+    break;
+  case SPBCG_RES_REDUCED:
+    if (mnewt == 0) return(0);
+    else            return(1);
+    break;
+  case SPBCG_CONV_FAIL:
+    return(1);
+    break;
+  case SPBCG_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_MEM_NULL:
+    return(-1);
+    break;
+  case SPBCG_ATIMES_FAIL_UNREC:
+    cvProcessError(cv_mem, SPBCG_ATIMES_FAIL_UNREC, "CVSPBCG", "CVSpbcgSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPBCG_PSOLVE_FAIL_UNREC:
+    cvProcessError(cv_mem, SPBCG_PSOLVE_FAIL_UNREC, "CVSPBCG", "CVSpbcgSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);  
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpbcgFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the Spbcg linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpbcgFree(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  SpbcgMem spbcg_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  N_VDestroy(ytemp);
+  N_VDestroy(x);
+
+  spbcg_mem = (SpbcgMem) spils_mem;
+  SpbcgFree(spbcg_mem);
+
+  if (cvspils_mem->s_pfree != NULL) (cvspils_mem->s_pfree)(cv_mem);
+
+  free(cvspils_mem);
+  cv_mem->cv_lmem = NULL;
+  
+  return(0);
+}
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+
+/* Additional readability replacements */
+
+#define pset_B      (cvspilsB_mem->s_psetB)
+#define psolve_B    (cvspilsB_mem->s_psolveB)
+#define jtimes_B    (cvspilsB_mem->s_jtimesB)
+#define P_data_B    (cvspilsB_mem->s_P_dataB)
+
+/*
+ * CVSpbcgB
+ *
+ * Wrapper for the backward phase
+ */
+
+int CVSpbcgB(void *cvode_mem, int which, int pretypeB, int maxlB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  CVSpilsMemB cvspilsB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPBCG", "CVSpbcgB", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPBCG", "CVSpbcgB", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPBCG", "CVSpbcgB", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Get memory for CVSpilsMemRecB */
+  cvspilsB_mem = NULL;
+  cvspilsB_mem = (CVSpilsMemB) malloc(sizeof(struct CVSpilsMemRecB));
+  if (cvspilsB_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPBCG", "CVSpbcgB", MSGS_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  pset_B = NULL;
+  psolve_B = NULL;
+  P_data_B = NULL;
+
+  /* initialize Jacobian function */
+  jtimes_B = NULL;
+
+  /* attach lmemB and lfree */
+  cvB_mem->cv_lmem = cvspilsB_mem;
+  cvB_mem->cv_lfree = CVSpbcgFreeB;
+
+  flag = CVSpbcg(cvodeB_mem, pretypeB, maxlB);
+
+  if (flag != CVSPILS_SUCCESS) {
+    free(cvspilsB_mem);
+    cvspilsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * CVSpbcgFreeB 
+ */
+
+
+static int CVSpbcgFreeB(CVodeBMem cvB_mem)
+{
+  CVSpilsMemB cvspilsB_mem;
+
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  free(cvspilsB_mem);
+
+  return(0);
+}
diff --git a/src/cvodes/cvodes_spgmr.c b/src/cvodes/cvodes_spgmr.c
new file mode 100644
index 0000000..c18d3da
--- /dev/null
+++ b/src/cvodes/cvodes_spgmr.c
@@ -0,0 +1,589 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4923 $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSPGMR linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvodes/cvodes_spgmr.h>
+#include "cvodes_spils_impl.h"
+#include "cvodes_impl.h"
+
+#include <sundials/sundials_spgmr.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* CVSPGMR linit, lsetup, lsolve, and lfree routines */
+
+static int CVSpgmrInit(CVodeMem cv_mem);
+
+static int CVSpgmrSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                        N_Vector vtemp2, N_Vector vtemp3);
+
+static int CVSpgmrSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ynow, N_Vector fnow);
+
+static int CVSpgmrFree(CVodeMem cv_mem);
+
+/* CVSPGMR lfreeB function */
+
+static int CVSpgmrFreeB(CVodeBMem cvB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+
+/* Readability Replacements */
+
+#define tq           (cv_mem->cv_tq)
+#define nst          (cv_mem->cv_nst)
+#define tn           (cv_mem->cv_tn)
+#define h            (cv_mem->cv_h)
+#define gamma        (cv_mem->cv_gamma)
+#define gammap       (cv_mem->cv_gammap)   
+#define f            (cv_mem->cv_f)
+#define user_data    (cv_mem->cv_user_data)
+#define ewt          (cv_mem->cv_ewt)
+#define mnewt        (cv_mem->cv_mnewt)
+#define ropt         (cv_mem->cv_ropt)
+#define linit        (cv_mem->cv_linit)
+#define lsetup       (cv_mem->cv_lsetup)
+#define lsolve       (cv_mem->cv_lsolve)
+#define lfree        (cv_mem->cv_lfree)
+#define lmem         (cv_mem->cv_lmem)
+#define vec_tmpl     (cv_mem->cv_tempv)
+#define setupNonNull (cv_mem->cv_setupNonNull)
+
+#define sqrtN     (cvspils_mem->s_sqrtN)   
+#define ytemp     (cvspils_mem->s_ytemp)
+#define x         (cvspils_mem->s_x)
+#define ycur      (cvspils_mem->s_ycur)
+#define fcur      (cvspils_mem->s_fcur)
+#define delta     (cvspils_mem->s_delta)
+#define deltar    (cvspils_mem->s_deltar)
+#define npe       (cvspils_mem->s_npe)
+#define nli       (cvspils_mem->s_nli)
+#define nps       (cvspils_mem->s_nps)
+#define ncfl      (cvspils_mem->s_ncfl)
+#define nstlpre   (cvspils_mem->s_nstlpre)
+#define njtimes   (cvspils_mem->s_njtimes)
+#define nfes      (cvspils_mem->s_nfes)
+#define spils_mem (cvspils_mem->s_spils_mem)
+
+#define jtimesDQ  (cvspils_mem->s_jtimesDQ)
+#define jtimes    (cvspils_mem->s_jtimes)
+#define j_data    (cvspils_mem->s_j_data)
+
+#define last_flag (cvspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpgmr
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the Spgmr linear solver module. CVSpgmr first
+ * calls the existing lfree routine if this is not NULL.  It then sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be CVSpgmrInit, CVSpgmrSetup, CVSpgmrSolve, and CVSpgmrFree,
+ * respectively.  It allocates memory for a structure of type
+ * CVSpilsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure. It sets setupNonNull in (*cvode_mem),
+ * and sets various fields in the CVSpilsMemRec structure.
+ * Finally, CVSpgmr allocates memory for ytemp and x, and calls
+ * SpgmrMalloc to allocate memory for the Spgmr solver.
+ * -----------------------------------------------------------------
+ */
+
+int CVSpgmr(void *cvode_mem, int pretype, int maxl)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  SpgmrMem spgmr_mem;
+  int mxl;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPGMR", "CVSpgmr", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if N_VDotProd is present */
+  if(vec_tmpl->ops->nvdotprod == NULL) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPGMR", "CVSpgmr", MSGS_BAD_NVECTOR);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */
+  linit  = CVSpgmrInit;
+  lsetup = CVSpgmrSetup;
+  lsolve = CVSpgmrSolve;
+  lfree  = CVSpgmrFree;
+
+  /* Get memory for CVSpilsMemRec */
+  cvspils_mem = NULL;
+  cvspils_mem = (CVSpilsMem) malloc(sizeof(struct CVSpilsMemRec));
+  if (cvspils_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPGMR", "CVSpgmr", MSGS_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  cvspils_mem->s_type = SPILS_SPGMR;
+
+  /* Set Spgmr parameters that have been passed in call sequence */
+  cvspils_mem->s_pretype    = pretype;
+  mxl = cvspils_mem->s_maxl = (maxl <= 0) ? CVSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  cvspils_mem->s_pset   = NULL;
+  cvspils_mem->s_psolve = NULL;
+  cvspils_mem->s_pfree  = NULL;
+  cvspils_mem->s_P_data = cv_mem->cv_user_data;
+
+  /* Set default values for the rest of the Spgmr parameters */
+  cvspils_mem->s_gstype     = MODIFIED_GS;
+  cvspils_mem->s_eplifac    = CVSPILS_EPLIN;
+  
+  cvspils_mem->s_last_flag  = CVSPILS_SUCCESS;
+
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPGMR", "CVSpgmr", MSGS_BAD_PRETYPE);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPGMR", "CVSpgmr", MSGS_MEM_FAIL);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+  x = N_VClone(vec_tmpl);
+  if (x == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPGMR", "CVSpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt( N_VDotProd(ytemp, ytemp) );
+
+  /* Call SpgmrMalloc to allocate workspace for Spgmr */
+  spgmr_mem = NULL;
+  spgmr_mem = SpgmrMalloc(mxl, vec_tmpl);
+  if (spgmr_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPGMR", "CVSpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(x);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPGMR memory to spils memory structure */
+  spils_mem = (void *) spgmr_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvspils_mem;
+
+  return(CVSPILS_SUCCESS);
+}
+
+
+/* Additional readability Replacements */
+
+#define pretype (cvspils_mem->s_pretype)
+#define gstype  (cvspils_mem->s_gstype)
+#define eplifac (cvspils_mem->s_eplifac)
+#define maxl    (cvspils_mem->s_maxl)
+#define psolve  (cvspils_mem->s_psolve)
+#define pset    (cvspils_mem->s_pset)
+#define P_data  (cvspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpgmrInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the Spgmr 
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpgmrInit(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Initialize counters */
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  /* Check for legal combination pretype - psolve */
+  if ((pretype != PREC_NONE) && (psolve == NULL)) {
+    cvProcessError(cv_mem, -1, "CVSPGMR", "CVSpgmrInit", MSGS_PSOLVE_REQ);
+    last_flag = CVSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull = TRUE iff there is preconditioning (pretype != PREC_NONE)
+     and there is a preconditioning setup phase (pset != NULL)             */
+  setupNonNull = (pretype != PREC_NONE) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = CVSpilsDQJtimes;
+    j_data = cv_mem;
+  } else {
+    j_data = user_data;
+  }
+
+  last_flag = CVSPILS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpgmrSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the Spgmr linear solver.
+ * It makes a decision as to whether or not to signal for re-evaluation
+ * of Jacobian data in the pset routine, based on various state
+ * variables, then it calls pset.  If we signal for re-evaluation,
+ * then we reset jcur = *jcurPtr to TRUE, regardless of the pset output.
+ * In any case, if jcur == TRUE, we increment npe and save nst in nstlpre.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpgmrSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                        N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                        N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  CVSpilsMem cvspils_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlpre + CVSPILS_MSBPRE) ||
+    ((convfail == CV_FAIL_BAD_J) && (dgamma < CVSPILS_DGMAX)) ||
+    (convfail == CV_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = pset(tn, ypred, fpred, jok, jcurPtr, gamma, P_data, 
+                vtemp1, vtemp2, vtemp3);
+  if (retval < 0) {
+    cvProcessError(cv_mem, SPGMR_PSET_FAIL_UNREC, "CVSPGMR", "CVSpgmrSetup", MSGS_PSET_FAILED);
+    last_flag = SPGMR_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    last_flag = SPGMR_PSET_FAIL_REC;
+  }
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    npe++;
+    nstlpre = nst;
+  }
+
+  last_flag = SPGMR_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpgmrSolve
+ * -----------------------------------------------------------------
+ * This routine handles the call to the generic solver SpgmrSolve
+ * for the solution of the linear system Ax = b with the SPGMR method,
+ * without restarts.  The solution x is returned in the vector b.
+ *
+ * If the WRMS norm of b is small, we return x = b (if this is the first
+ * Newton iteration) or x = 0 (if a later Newton iteration).
+ *
+ * Otherwise, we set the tolerance parameter and initial guess (x = 0),
+ * call SpgmrSolve, and copy the solution x into b.  The x-scaling and
+ * b-scaling arrays are both equal to weight, and no restarts are allowed.
+ *
+ * The counters nli, nps, and ncfl are incremented, and the return value
+ * is set according to the success of SpgmrSolve.  The success flag is
+ * returned if SpgmrSolve converged, or if this is the first Newton
+ * iteration and the residual norm was reduced below its initial value.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpgmrSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                        N_Vector ynow, N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  CVSpilsMem cvspils_mem;
+  SpgmrMem spgmr_mem;
+  int nli_inc, nps_inc, retval;
+  
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  spgmr_mem = (SpgmrMem) spils_mem;
+
+  /* Test norm(b); if small, return x = 0 or x = b */
+  deltar = eplifac*tq[4]; 
+
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= deltar) {
+    if (mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  ycur = ynow;
+  fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to SpgmrSolve */  
+  delta = deltar * sqrtN;
+  N_VConst(ZERO, x);
+  
+  /* Call SpgmrSolve and copy x to b */
+  retval = SpgmrSolve(spgmr_mem, cv_mem, x, b, pretype, gstype, delta, 0,
+                   cv_mem, weight, weight, CVSpilsAtimes, CVSpilsPSolve,
+                   &res_norm, &nli_inc, &nps_inc);
+
+  N_VScale(ONE, x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPGMR_SUCCESS) ncfl++;
+
+  /* Interpret return value from SpgmrSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPGMR_SUCCESS:
+    return(0);
+    break;
+  case SPGMR_RES_REDUCED:
+    if (mnewt == 0) return(0);
+    else            return(1);
+    break;
+  case SPGMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPGMR_QRFACT_FAIL:
+    return(1);
+    break;
+  case SPGMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPGMR_ATIMES_FAIL_UNREC:
+    cvProcessError(cv_mem, SPGMR_ATIMES_FAIL_UNREC, "CVSPGMR", "CVSpgmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPGMR_PSOLVE_FAIL_UNREC:
+    cvProcessError(cv_mem, SPGMR_PSOLVE_FAIL_UNREC, "CVSPGMR", "CVSpgmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  case SPGMR_GS_FAIL:
+    return(-1);
+    break;
+  case SPGMR_QRSOL_FAIL:
+    return(-1);
+    break;
+  }
+
+  return(0);  
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpgmrFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the Spgmr linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSpgmrFree(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  SpgmrMem spgmr_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+  
+  N_VDestroy(ytemp);
+  N_VDestroy(x);
+
+  spgmr_mem = (SpgmrMem) spils_mem;
+  SpgmrFree(spgmr_mem);
+
+  if (cvspils_mem->s_pfree != NULL) (cvspils_mem->s_pfree)(cv_mem);
+
+  free(cvspils_mem);
+  cv_mem->cv_lmem = NULL;
+
+  return(0);
+}
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+
+/* Additional readability replacements */
+
+#define pset_B      (cvspilsB_mem->s_psetB)
+#define psolve_B    (cvspilsB_mem->s_psolveB)
+#define jtimes_B    (cvspilsB_mem->s_jtimesB)
+#define P_data_B    (cvspilsB_mem->s_P_dataB)
+
+/*
+ * CVSpgmrB
+ *
+ * Wrapper for the backward phase
+ *
+ */
+
+int CVSpgmrB(void *cvode_mem, int which, int pretypeB, int maxlB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  CVSpilsMemB cvspilsB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPGMR", "CVSpgmrB", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPGMR", "CVSpgmrB", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPGMR", "CVSpgmrB", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Get memory for CVSpilsMemRecB */
+  cvspilsB_mem = NULL;
+  cvspilsB_mem = (CVSpilsMemB) malloc(sizeof(struct CVSpilsMemRecB));
+  if (cvspilsB_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPGMR", "CVSpgmrB", MSGS_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  pset_B = NULL;
+  psolve_B = NULL;
+  P_data_B = NULL;
+
+  /* initialize Jacobian function */
+  jtimes_B = NULL;
+
+  /* attach lmemB and lfreeB */
+  cvB_mem->cv_lmem = cvspilsB_mem;
+  cvB_mem->cv_lfree = CVSpgmrFreeB;
+  
+  flag = CVSpgmr(cvodeB_mem, pretypeB, maxlB);
+
+  if (flag != CVSPILS_SUCCESS) {
+    free(cvspilsB_mem);
+    cvspilsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+
+/*
+ * CVSpgmrFreeB 
+ */
+
+
+static int CVSpgmrFreeB(CVodeBMem cvB_mem)
+{
+  CVSpilsMemB cvspilsB_mem;
+
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  free(cvspilsB_mem);
+
+  return(0);
+}
diff --git a/src/cvodes/cvodes_spils.c b/src/cvodes/cvodes_spils.c
new file mode 100644
index 0000000..559b44b
--- /dev/null
+++ b/src/cvodes/cvodes_spils.c
@@ -0,0 +1,1467 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s):Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSPILS linear solvers.
+ *
+ * Part II contains wrappers for using the CVODES iterative linear 
+ * solvers on adjoint (backward) problems.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes_impl.h"
+#include "cvodes_spils_impl.h"
+
+/* Private constants */
+
+#define ZERO   RCONST(0.0)
+#define PT25   RCONST(0.25)
+#define ONE    RCONST(1.0)
+
+/* Algorithmic constants */
+
+#define MAX_ITERS  3  /* max. number of attempts to recover in DQ J*v */
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTION PROTOTYPES
+ * =================================================================
+ */
+
+/*
+ * cvSpilsPrecSetupBWrapper and cvSpilsPrecSetupBSWrapper have type
+ * CVSpilsPrecSetupFn, and wrap around user-provided functions of
+ * type CVSpilsPrecSetupFnB and CVSpilsPrecSetupFnBS, respectively.
+ */
+
+static int cvSpilsPrecSetupBWrapper(realtype t, N_Vector yB,
+                                    N_Vector fyB, booleantype jokB,
+                                    booleantype *jcurPtrB, realtype gammaB,
+                                    void *cvode_mem,
+                                    N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+static int cvSpilsPrecSetupBSWrapper(realtype t, N_Vector yB,
+                                     N_Vector fyB, booleantype jokB,
+                                     booleantype *jcurPtrB, realtype gammaB,
+                                     void *cvode_mem,
+                                     N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+/*
+ * cvSpilsPrecSolveBWrapper and cvSpilsPrecSolveBSWrapper have type
+ * CVSpilsPrecSolveFn, and wrap around user-provided functions of
+ * type CVSpilsPrecSolveFnB and CVSpilsPrecSolveFnBS, respectively.
+ */
+
+static int cvSpilsPrecSolveBWrapper(realtype t, N_Vector yB, N_Vector fyB,
+                                    N_Vector rB, N_Vector zB,
+                                    realtype gammaB, realtype deltaB,
+                                    int lrB, void *cvode_mem, N_Vector tmpB);
+  
+static int cvSpilsPrecSolveBSWrapper(realtype t, N_Vector yB, N_Vector fyB,
+                                     N_Vector rB, N_Vector zB,
+                                     realtype gammaB, realtype deltaB,
+                                     int lrB, void *cvode_mem, N_Vector tmpB);
+  
+/*
+ * cvSpilsJacTimesVecBWrapper and cvSpilsJacTimesVecBSWrapper have type
+ * CVSpilsJacTimesVecFn, and wrap around user-provided functions of
+ * type CVSpilsJacTimesVecFnB and CVSpilsJacTimesVecFnBS, respectively.
+ */
+
+static int cvSpilsJacTimesVecBWrapper(N_Vector vB, N_Vector JvB, realtype t, 
+                                      N_Vector yB, N_Vector fyB, 
+                                      void *cvode_mem, N_Vector tmpB);
+
+static int cvSpilsJacTimesVecBSWrapper(N_Vector vB, N_Vector JvB, realtype t, 
+                                       N_Vector yB, N_Vector fyB, 
+                                       void *cvode_mem, N_Vector tmpB);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define lrw1      (cv_mem->cv_lrw1)
+#define liw1      (cv_mem->cv_liw1)
+#define tq        (cv_mem->cv_tq)
+#define tn        (cv_mem->cv_tn)
+#define h         (cv_mem->cv_h)
+#define gamma     (cv_mem->cv_gamma)
+#define nfe       (cv_mem->cv_nfe)
+#define f         (cv_mem->cv_f)
+#define user_data (cv_mem->cv_user_data)
+#define ewt       (cv_mem->cv_ewt)
+#define lmem      (cv_mem->cv_lmem)
+
+#define ils_type (cvspils_mem->s_type)
+#define sqrtN    (cvspils_mem->s_sqrtN)   
+#define ytemp    (cvspils_mem->s_ytemp)
+#define x        (cvspils_mem->s_x)
+#define ycur     (cvspils_mem->s_ycur)
+#define fcur     (cvspils_mem->s_fcur)
+#define delta    (cvspils_mem->s_delta)
+#define npe      (cvspils_mem->s_npe)
+#define nli      (cvspils_mem->s_nli)
+#define nps      (cvspils_mem->s_nps)
+#define ncfl     (cvspils_mem->s_ncfl)
+#define njtimes  (cvspils_mem->s_njtimes)
+#define nfes     (cvspils_mem->s_nfes)
+
+#define jtimesDQ (cvspils_mem->s_jtimesDQ)
+#define jtimes   (cvspils_mem->s_jtimes)
+#define j_data   (cvspils_mem->s_j_data)
+
+#define last_flag (cvspils_mem->s_last_flag)
+
+
+/*
+ * -----------------------------------------------------------------
+ * OPTIONAL INPUT and OUTPUT FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsSetPrecType
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetPrecType(void *cvode_mem, int pretype)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetPrecType", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetPrecType", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetPrecType", MSGS_BAD_PRETYPE);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  cvspils_mem->s_pretype = pretype;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsSetGSType
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetGSType(void *cvode_mem, int gstype)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetGSType", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetGSType", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  if (ils_type != SPILS_SPGMR) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetGSType", MSGS_BAD_LSTYPE);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Check for legal gstype */
+  if ((gstype != MODIFIED_GS) && (gstype != CLASSICAL_GS)) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetGSType", MSGS_BAD_GSTYPE);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  cvspils_mem->s_gstype = gstype;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSpilsSetMaxl
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetMaxl(void *cvode_mem, int maxl)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  int mxl;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetMaxl", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(NULL, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetMaxl", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  if (ils_type == SPILS_SPGMR) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetMaxl", MSGS_BAD_LSTYPE);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  mxl = (maxl <= 0) ? CVSPILS_MAXL : maxl;
+  cvspils_mem->s_maxl = mxl;
+
+  /*  spbcg_mem->l_max  = mxl; */
+
+  return(CVSPILS_SUCCESS);
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsSetEpsLin
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetEpsLin(void *cvode_mem, realtype eplifac)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetEpsLin", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetEpsLin", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Check for legal eplifac */
+  if(eplifac < ZERO) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetEpsLin", MSGS_BAD_EPLIN);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  cvspils_mem->s_eplifac = (eplifac == ZERO) ? CVSPILS_EPLIN : eplifac;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsSetPrecSetupFn
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetPreconditioner(void *cvode_mem,
+                             CVSpilsPrecSetupFn pset, CVSpilsPrecSolveFn psolve)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetPreconditioner", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetPreconditioner", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  cvspils_mem->s_pset = pset;
+  cvspils_mem->s_psolve = psolve;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsSetJacTimesVecFn
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetJacTimesVecFn(void *cvode_mem, CVSpilsJacTimesVecFn jtv)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetJacTimesVecFn", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsSetJacTimesVecFn", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  if (jtv != NULL) {
+    jtimesDQ = FALSE;
+    jtimes = jtv;
+  } else {
+    jtimesDQ = TRUE;
+  }
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetWorkSpace
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  int maxl;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetWorkSpace", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetWorkSpace", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  
+  switch(ils_type) {
+  case SPILS_SPGMR:
+    maxl = cvspils_mem->s_maxl;
+    *lenrwLS = lrw1*(maxl + 5) + maxl*(maxl + 4) + 1;
+    *leniwLS = liw1*(maxl + 5);
+    break;
+  case SPILS_SPBCG:
+    *lenrwLS = lrw1 * 9;
+    *leniwLS = liw1 * 9;
+    break;
+  case SPILS_SPTFQMR:
+    *lenrwLS = lrw1*11;
+    *leniwLS = liw1*11;
+    break;
+  }
+
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumPrecEvals
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumPrecEvals(void *cvode_mem, long int *npevals)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumPrecEvals", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumPrecEvals", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *npevals = npe;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumPrecSolves
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumPrecSolves(void *cvode_mem, long int *npsolves)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumPrecSolves", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumPrecSolves", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *npsolves = nps;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumLinIters
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumLinIters(void *cvode_mem, long int *nliters)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumLinIters", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumLinIters", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *nliters = nli;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumConvFails
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumConvFails(void *cvode_mem, long int *nlcfails)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumConvFails", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumConvFails", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *nlcfails = ncfl;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumJtimesEvals
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumJtimesEvals(void *cvode_mem, long int *njvevals)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumJtimesEvals", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumJtimesEvals", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *njvevals = njtimes;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetNumRhsEvals
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetNumRhsEvals", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetNumRhsEvals", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *nfevalsLS = nfes;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetLastFlag
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsGetLastFlag(void *cvode_mem, long int *flag)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsGetLastFlag", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  if (lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEM_NULL, "CVSPILS", "CVSpilsGetLastFlag", MSGS_LMEM_NULL);
+    return(CVSPILS_LMEM_NULL);
+  }
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  *flag = last_flag;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsGetReturnFlagName
+ * -----------------------------------------------------------------
+ */
+
+char *CVSpilsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case CVSPILS_SUCCESS:
+    sprintf(name,"CVSPILS_SUCCESS");
+    break;    
+  case CVSPILS_MEM_NULL:
+    sprintf(name,"CVSPILS_MEM_NULL");
+    break;
+  case CVSPILS_LMEM_NULL:
+    sprintf(name,"CVSPILS_LMEM_NULL");
+    break;
+  case CVSPILS_ILL_INPUT:
+    sprintf(name,"CVSPILS_ILL_INPUT");
+    break;
+  case CVSPILS_MEM_FAIL:
+    sprintf(name,"CVSPILS_MEM_FAIL");
+    break;
+  case CVSPILS_PMEM_NULL:
+    sprintf(name,"CVSPILS_PMEM_NULL");
+    break;
+  case CVSPILS_NO_ADJ:
+    sprintf(name,"CVSPILS_NO_ADJ");
+    break;
+  case CVSPILS_LMEMB_NULL:
+    sprintf(name,"CVSPILS_LMEMB_NULL");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSPILS private functions
+ * -----------------------------------------------------------------
+ */
+
+
+/* Additional readability Replacements */
+
+#define pretype (cvspils_mem->s_pretype)
+#define eplifac (cvspils_mem->s_eplifac)
+#define maxl    (cvspils_mem->s_maxl)
+#define psolve  (cvspils_mem->s_psolve)
+#define P_data  (cvspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsAtimes
+ * -----------------------------------------------------------------
+ * This routine generates the matrix-vector product z = Mv, where
+ * M = I - gamma*J. The product J*v is obtained by calling the jtimes 
+ * routine. It is then scaled by -gamma and added to v to obtain M*v.
+ * The return value is the same as the value returned by jtimes --
+ * 0 if successful, nonzero otherwise.
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsAtimes(void *cvode_mem, N_Vector v, N_Vector z)
+{
+  CVodeMem   cv_mem;
+  CVSpilsMem cvspils_mem;
+  int retval;
+
+  cv_mem = (CVodeMem) cvode_mem;
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  retval = jtimes(v, z, tn, ycur, fcur, j_data, ytemp);
+  njtimes++;
+  if (retval != 0) return(retval);
+
+  N_VLinearSum(ONE, v, -gamma, z, z);
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsPSolve
+ * -----------------------------------------------------------------
+ * This routine interfaces between the generic Sp***Solve routine
+ * (within the SPGMR, SPBCG, or SPTFQMR solver) and the
+ * user's psolve routine.  It passes to psolve all required state 
+ * information from cvode_mem.  Its return value is the same as that
+ * returned by psolve. Note that the generic SP*** solver guarantees
+ * that CVSpilsPSolve will not be called in the case in which
+ * preconditioning is not done. This is the only case in which the
+ * user's psolve routine is allowed to be NULL.
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsPSolve(void *cvode_mem, N_Vector r, N_Vector z, int lr)
+{
+  CVodeMem   cv_mem;
+  CVSpilsMem cvspils_mem;
+  int retval;
+
+  cv_mem = (CVodeMem) cvode_mem;
+  cvspils_mem = (CVSpilsMem)lmem;
+
+  /* This call is counted in nps within the CVSp***Solve routine */
+  retval = psolve(tn, ycur, fcur, r, z, gamma, delta, lr, P_data, ytemp);
+
+  return(retval);     
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSpilsDQJtimes
+ * -----------------------------------------------------------------
+ * This routine generates a difference quotient approximation to
+ * the Jacobian times vector f_y(t,y) * v. The approximation is 
+ * Jv = vnrm[f(y + v/vnrm) - f(y)], where vnrm = (WRMS norm of v) is
+ * input, i.e. the WRMS norm of v/vnrm is 1.
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsDQJtimes(N_Vector v, N_Vector Jv, realtype t, 
+                    N_Vector y, N_Vector fy,
+                    void *data, N_Vector work)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  realtype sig, siginv;
+  int iter, retval;
+
+  /* data is cvode_mem */
+  cv_mem = (CVodeMem) data;
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Initialize perturbation to 1/||v|| */
+  sig = ONE/N_VWrmsNorm(v, ewt);
+
+  for (iter=0; iter<MAX_ITERS; iter++) {
+
+    /* Set work = y + sig*v */
+    N_VLinearSum(sig, v, ONE, y, work);
+
+    /* Set Jv = f(tn, y+sig*v) */
+    retval = f(t, work, Jv, user_data); 
+    nfes++;
+    if (retval == 0) break;
+    if (retval < 0)  return(-1);
+
+    sig *= PT25;
+  }
+
+  if (retval > 0) return(+1);
+
+  /* Replace Jv by (Jv - fy)/sig */
+  siginv = ONE/sig;
+  N_VLinearSum(siginv, Jv, -siginv, fy, Jv);
+
+  return(0);
+}
+
+
+int cvSpilsInitializeCounters(CVSpilsMem cvspils_mem)
+{
+  cvspils_mem->s_npe     = 0;
+  cvspils_mem->s_nli     = 0;
+  cvspils_mem->s_nps     = 0;
+  cvspils_mem->s_ncfl    = 0;
+  cvspils_mem->s_nstlpre = 0;
+  cvspils_mem->s_njtimes = 0;
+  cvspils_mem->s_nfes    = 0;
+
+  return(0);
+}
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/* Readability replacements */
+
+#define ytmp  (ca_mem->ca_ytmp)
+#define yStmp (ca_mem->ca_yStmp)
+#define IMget (ca_mem->ca_IMget)
+#define IMinterpSensi (ca_mem->ca_IMinterpSensi)
+
+#define pset_B     (cvspilsB_mem->s_psetB)
+#define pset_BS     (cvspilsB_mem->s_psetBS)
+#define psolve_B   (cvspilsB_mem->s_psolveB)
+#define psolve_BS   (cvspilsB_mem->s_psolveBS)
+#define jtimes_B   (cvspilsB_mem->s_jtimesB)
+#define jtimes_BS   (cvspilsB_mem->s_jtimesBS)
+
+/*
+ * -----------------------------------------------------------------
+ * OPTIONAL INPUT and OUTPUT FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+int CVSpilsSetPrecTypeB(void *cvode_mem, int which, int pretypeB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetPrecTypeB", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPILS", "CVSpilsSetPrecTypeB", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetPrecTypeB", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVSpilsSetPrecType(cvodeB_mem, pretypeB);
+
+  return(flag);
+}
+
+int CVSpilsSetGSTypeB(void *cvode_mem, int which, int gstypeB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetGSTypeB", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPILS", "CVSpilsSetGSTypeB", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetGSTypeB", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVSpilsSetGSType(cvodeB_mem,gstypeB);
+
+  return(flag);
+}
+
+int CVSpilsSetEpsLinB(void *cvode_mem, int which, realtype eplifacB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetEpsLinB", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPILS", "CVSpilsSetEpsLinB", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetEpsLinB", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVSpilsSetEpsLin(cvodeB_mem,eplifacB);
+
+  return(flag);
+}
+
+int CVSpilsSetMaxlB(void *cvode_mem, int which, int maxlB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetMaxlB", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPILS", "CVSpilsSetMaxlB", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetMaxlB", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVSpilsSetMaxl(cvodeB_mem,maxlB);
+
+  return(flag);
+}
+
+int CVSpilsSetPreconditionerB(void *cvode_mem, int which, 
+                              CVSpilsPrecSetupFnB psetB,
+                              CVSpilsPrecSolveFnB psolveB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSpilsMemB cvspilsB_mem; 
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetPreconditionerB", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPILS", "CVSpilsSetPreconditionerB", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetPreconditionerB", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  if (cvB_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEMB_NULL, "CVSPILS", "CVSpilsSetPreconditionerB", MSGS_LMEMB_NULL);
+    return(CVSPILS_LMEMB_NULL);
+  }
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  pset_B   = psetB;
+  psolve_B = psolveB;
+
+  if (psetB == NULL) {
+    flag = CVSpilsSetPreconditioner(cvodeB_mem, NULL, cvSpilsPrecSolveBWrapper);
+  } else {
+    flag = CVSpilsSetPreconditioner(cvodeB_mem, cvSpilsPrecSetupBWrapper, cvSpilsPrecSolveBWrapper);
+  }
+
+  return(flag);
+}
+
+int CVSpilsSetPreconditionerBS(void *cvode_mem, int which, 
+                               CVSpilsPrecSetupFnBS psetBS,
+                               CVSpilsPrecSolveFnBS psolveBS)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSpilsMemB cvspilsB_mem; 
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetPreconditionerBS", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPILS", "CVSpilsSetPreconditionerBS", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetPreconditionerBS", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  if (cvB_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEMB_NULL, "CVSPILS", "CVSpilsSetPreconditionerBS", MSGS_LMEMB_NULL);
+    return(CVSPILS_LMEMB_NULL);
+  }
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  pset_BS   = psetBS;
+  psolve_BS = psolveBS;
+
+  if (psetBS == NULL) {
+    flag = CVSpilsSetPreconditioner(cvodeB_mem, NULL, cvSpilsPrecSolveBSWrapper);
+  } else {
+    flag = CVSpilsSetPreconditioner(cvodeB_mem, cvSpilsPrecSetupBSWrapper, cvSpilsPrecSolveBSWrapper);
+  }
+
+  return(flag);
+}
+
+int CVSpilsSetJacTimesVecFnB(void *cvode_mem, int which, CVSpilsJacTimesVecFnB jtvB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSpilsMemB cvspilsB_mem; 
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetJacTimesVecFnB", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPILS", "CVSpilsSetJacTimesVecFnB", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetJacTimesVecFnB", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  if (cvB_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEMB_NULL, "CVSPILS", "CVSpilsSetJacTimesVecFnB", MSGS_LMEMB_NULL);
+    return(CVSPILS_LMEMB_NULL);
+  }
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  jtimes_B = jtvB;
+
+  if (jtvB != NULL) {
+    flag = CVSpilsSetJacTimesVecFn(cvodeB_mem, cvSpilsJacTimesVecBWrapper);
+  } else {
+    flag = CVSpilsSetJacTimesVecFn(cvodeB_mem, NULL);
+  }
+
+  return(flag);
+}
+
+int CVSpilsSetJacTimesVecFnBS(void *cvode_mem, int which, CVSpilsJacTimesVecFnBS jtvBS)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSpilsMemB cvspilsB_mem; 
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPILS", "CVSpilsSetJacTimesVecFnBS", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPILS", "CVSpilsSetJacTimesVecFnBS", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPILS", "CVSpilsSetJacTimesVecFnBS", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  if (cvB_mem->cv_lmem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_LMEMB_NULL, "CVSPILS", "CVSpilsSetJacTimesVecFnBS", MSGS_LMEMB_NULL);
+    return(CVSPILS_LMEMB_NULL);
+  }
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  jtimes_BS = jtvBS;
+
+  if (jtvBS != NULL) {
+    flag = CVSpilsSetJacTimesVecFn(cvodeB_mem, cvSpilsJacTimesVecBSWrapper);
+  } else {
+    flag = CVSpilsSetJacTimesVecFn(cvodeB_mem, NULL);
+  }
+
+  return(flag);
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVSPILS private functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * cvSpilsPrecSetupBWrapper
+ *
+ * This routine interfaces to the CVSpilsPrecSetupFnB routine 
+ * provided by the user.
+ */
+
+static int cvSpilsPrecSetupBWrapper(realtype t, N_Vector yB, 
+                                    N_Vector fyB, booleantype jokB, 
+                                    booleantype *jcurPtrB, realtype gammaB,
+                                    void *cvode_mem,
+                                    N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSpilsMemB cvspilsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSPILS", "cvSpilsPrecSetupBWrapper", MSGS_BAD_TINTERP);
+    return(-1);
+  } 
+
+  /* Call user's adjoint precondB routine */
+  retval = pset_B(t, ytmp, yB, fyB, jokB, jcurPtrB, gammaB,
+                  cvB_mem->cv_user_data, tmp1B, tmp2B, tmp3B);
+
+  return(retval);
+}
+
+/*
+ * cvSpilsPrecSetupBSWrapper
+ *
+ * This routine interfaces to the CVSpilsPrecSetupFnBS routine 
+ * provided by the user.
+ */
+
+static int cvSpilsPrecSetupBSWrapper(realtype t, N_Vector yB, 
+                                     N_Vector fyB, booleantype jokB, 
+                                     booleantype *jcurPtrB, realtype gammaB,
+                                     void *cvode_mem,
+                                     N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSpilsMemB cvspilsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  if (IMinterpSensi)
+    flag = IMget(cv_mem, t, ytmp, yStmp);
+  else
+    flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSPILS", "cvSpilsPrecSetupBSWrapper", MSGS_BAD_TINTERP);
+    return(-1);
+  } 
+
+  /* Call user's adjoint precondB routine */
+  retval = pset_BS(t, ytmp, yStmp, yB, fyB, jokB, jcurPtrB, gammaB,
+                   cvB_mem->cv_user_data, tmp1B, tmp2B, tmp3B);
+
+  return(retval);
+}
+
+/*
+ * cvSpilsPrecSolveBWrapper
+ *
+ * This routine interfaces to the CVSpilsPrecSolveFnB routine 
+ * provided by the user.
+ */
+
+static int cvSpilsPrecSolveBWrapper(realtype t, N_Vector yB, N_Vector fyB,
+                                    N_Vector rB, N_Vector zB,
+                                    realtype gammaB, realtype deltaB,
+                                    int lrB, void *cvode_mem, N_Vector tmpB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSpilsMemB cvspilsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSPILS", "cvSpilsPrecSolveBWrapper", MSGS_BAD_TINTERP);
+    return(-1);
+  }
+
+  /* Call user's adjoint psolveB routine */
+  retval = psolve_B(t, ytmp, yB, fyB, rB, zB, gammaB, deltaB, 
+                    lrB, cvB_mem->cv_user_data, tmpB);
+
+  return(retval);
+}
+
+/*
+ * cvSpilsPrecSolveBSWrapper
+ *
+ * This routine interfaces to the CVSpilsPrecSolveFnBS routine 
+ * provided by the user.
+ */
+
+static int cvSpilsPrecSolveBSWrapper(realtype t, N_Vector yB, N_Vector fyB,
+                                     N_Vector rB, N_Vector zB,
+                                     realtype gammaB, realtype deltaB,
+                                     int lrB, void *cvode_mem, N_Vector tmpB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSpilsMemB cvspilsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  if (IMinterpSensi)
+    flag = IMget(cv_mem, t, ytmp, yStmp);
+  else
+    flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSPILS", "cvSpilsPrecSolveBSWrapper", MSGS_BAD_TINTERP);
+    return(-1);
+  }
+
+  /* Call user's adjoint psolveBS routine */
+  retval = psolve_BS(t, ytmp, yStmp, yB, fyB, rB, zB, gammaB, deltaB, 
+                     lrB, cvB_mem->cv_user_data, tmpB);
+
+  return(retval);
+}
+
+/*
+ * cvSpilsJacTimesVecBWrapper
+ *
+ * This routine interfaces to the CVSpilsJacTimesVecFnB routine 
+ * provided by the user.
+ */
+
+static int cvSpilsJacTimesVecBWrapper(N_Vector vB, N_Vector JvB, realtype t, 
+                                      N_Vector yB, N_Vector fyB, 
+                                      void *cvode_mem, N_Vector tmpB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSpilsMemB cvspilsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSPILS", "cvSpilsJacTimesVecBWrapper", MSGS_BAD_TINTERP);
+    return(-1);
+  } 
+
+  /* Call user's adjoint jtimesB routine */
+  retval = jtimes_B(vB, JvB, t, ytmp, yB, fyB, cvB_mem->cv_user_data, tmpB);
+
+  return(retval);
+}
+
+/*
+ * cvSpilsJacTimesVecBSWrapper
+ *
+ * This routine interfaces to the CVSpilsJacTimesVecFnBS routine 
+ * provided by the user.
+ */
+
+static int cvSpilsJacTimesVecBSWrapper(N_Vector vB, N_Vector JvB, realtype t, 
+                                       N_Vector yB, N_Vector fyB, 
+                                       void *cvode_mem, N_Vector tmpB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  CVSpilsMemB cvspilsB_mem;
+  int retval, flag;
+
+  cv_mem = (CVodeMem) cvode_mem;
+
+  ca_mem = cv_mem->cv_adj_mem;
+
+  cvB_mem = ca_mem->ca_bckpbCrt;
+
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  /* Forward solution from interpolation */
+  if (IMinterpSensi)
+    flag = IMget(cv_mem, t, ytmp, yStmp);
+  else
+    flag = IMget(cv_mem, t, ytmp, NULL);
+  if (flag != CV_SUCCESS) {
+    cvProcessError(cv_mem, -1, "CVSPILS", "cvSpilsJacTimesVecBSWrapper", MSGS_BAD_TINTERP);
+    return(-1);
+  } 
+
+  /* Call user's adjoint jtimesBS routine */
+  retval = jtimes_BS(vB, JvB, t, ytmp, yStmp, yB, fyB, cvB_mem->cv_user_data, tmpB);
+
+  return(retval);
+}
diff --git a/src/cvodes/cvodes_spils_impl.h b/src/cvodes/cvodes_spils_impl.h
new file mode 100644
index 0000000..57313f8
--- /dev/null
+++ b/src/cvodes/cvodes_spils_impl.h
@@ -0,0 +1,196 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4923 $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common implementation header file for the scaled, preconditioned
+ * iterative linear solvers
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _CVSSPILS_IMPL_H
+#define _CVSSPILS_IMPL_H
+
+#include <cvodes/cvodes_spils.h>
+#include "cvodes_impl.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * C V S P I L S    I N T E R N A L    C O N S T A N T S
+ * =================================================================
+ */
+
+/* Types of iterative linear solvers */
+
+#define SPILS_SPGMR   1
+#define SPILS_SPBCG   2
+#define SPILS_SPTFQMR 3
+
+/*
+ * =================================================================
+ * PART I:  F O R W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : CVSpilsMemRec, CVSpilsMem
+ * -----------------------------------------------------------------
+ * The type CVSpilsMem is pointer to a CVSpilsMemRec.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVSpilsMemRec {
+
+  int s_type;           /* type of scaled preconditioned iterative LS   */
+
+  int  s_pretype;       /* type of preconditioning                      */
+  int  s_gstype;        /* type of Gram-Schmidt orthogonalization       */
+  realtype s_sqrtN;     /* sqrt(N)                                      */
+  realtype s_eplifac;   /* eplifac = user specified or EPLIN_DEFAULT    */
+  realtype s_deltar;    /* deltar = delt * tq4                          */
+  realtype s_delta;     /* delta = deltar * sqrtN                       */
+  int  s_maxl;          /* maxl = maximum dimension of the Krylov space */
+
+  long int s_nstlpre;   /* value of nst at the last pset call           */
+  long int s_npe;       /* npe = total number of pset calls             */
+  long int s_nli;       /* nli = total number of linear iterations      */
+  long int s_nps;       /* nps = total number of psolve calls           */
+  long int s_ncfl;      /* ncfl = total number of convergence failures  */
+  long int s_njtimes;   /* njtimes = total number of calls to jtimes    */
+  long int s_nfes;      /* nfeSG = total number of calls to f for     
+			   difference quotient Jacobian-vector products */
+
+  N_Vector s_ytemp;     /* temp vector passed to jtimes and psolve      */
+  N_Vector s_x;         /* temp vector used by CVSpilsSolve             */
+  N_Vector s_ycur;      /* CVODE current y vector in Newton Iteration   */
+  N_Vector s_fcur;      /* fcur = f(tn, ycur)                           */
+
+  void* s_spils_mem;    /* memory used by the generic solver            */
+
+  /* Preconditioner computation
+   * (a) user-provided:
+   *     - P_data == user_data
+   *     - pfree == NULL (the user dealocates memory for user_data)
+   * (b) internal preconditioner module
+   *     - P_data == cvode_mem
+   *     - pfree == set by the prec. module and called in CVodeFree
+   */
+  CVSpilsPrecSetupFn s_pset;
+  CVSpilsPrecSolveFn s_psolve;
+  int (*s_pfree)(CVodeMem cv_mem);
+  void *s_P_data;
+
+  /* Jacobian times vector compuation
+   * (a) jtimes function provided by the user:
+   *     - j_data == user_data
+   *     - jtimesDQ == FALSE
+   * (b) internal jtimes
+   *     - j_data == cvode_mem
+   *     - jtimesDQ == TRUE
+   */
+  booleantype s_jtimesDQ;
+  CVSpilsJacTimesVecFn s_jtimes;
+  void *s_j_data;
+
+  long int s_last_flag;    /* last error flag returned by any function   */
+
+} *CVSpilsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+
+/* Atimes and PSolve routines called by generic solver */
+
+int CVSpilsAtimes(void *cv_mem, N_Vector v, N_Vector z);
+
+int CVSpilsPSolve(void *cv_mem, N_Vector r, N_Vector z, int lr);
+
+/* Difference quotient approximation for Jac times vector */
+
+int CVSpilsDQJtimes(N_Vector v, N_Vector Jv, realtype t,
+                    N_Vector y, N_Vector fy, void *data,
+                    N_Vector work);
+
+/* Auxilliary functions */
+int cvSpilsInitializeCounters(CVSpilsMem cvspils_mem);
+
+
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : CVSpilsMemRecB, CVSpilsMemB       
+ * -----------------------------------------------------------------
+ * CVSpgmrB, CVSpbcgB, and CVSptfqmr attach such a structure to the 
+ * lmemB filed of CVodeBMem
+ * -----------------------------------------------------------------
+ */
+
+typedef struct CVSpilsMemRecB {
+
+  CVSpilsJacTimesVecFnB s_jtimesB;
+  CVSpilsJacTimesVecFnBS s_jtimesBS;
+  CVSpilsPrecSetupFnB s_psetB;
+  CVSpilsPrecSetupFnBS s_psetBS;
+  CVSpilsPrecSolveFnB s_psolveB;
+  CVSpilsPrecSolveFnBS s_psolveBS;
+  void *s_P_dataB;
+
+} *CVSpilsMemB;
+
+
+/*
+ * =================================================================
+ * E R R O R   M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGS_CVMEM_NULL  "Integrator memory is NULL."
+#define MSGS_MEM_FAIL    "A memory request failed."
+#define MSGS_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGS_BAD_LSTYPE  "Incompatible linear solver type."
+#define MSGS_BAD_PRETYPE "Illegal value for pretype. Legal values are PREC_NONE, PREC_LEFT, PREC_RIGHT, and PREC_BOTH."
+#define MSGS_PSOLVE_REQ  "pretype != PREC_NONE, but PSOLVE = NULL is illegal."
+#define MSGS_LMEM_NULL   "Linear solver memory is NULL."
+#define MSGS_BAD_GSTYPE  "Illegal value for gstype. Legal values are MODIFIED_GS and CLASSICAL_GS."
+#define MSGS_BAD_EPLIN    "eplifac < 0 illegal."
+  
+#define MSGS_PSET_FAILED   "The preconditioner setup routine failed in an unrecoverable manner."
+#define MSGS_PSOLVE_FAILED "The preconditioner solve routine failed in an unrecoverable manner."
+#define MSGS_JTIMES_FAILED "The Jacobian x vector routine failed in an unrecoverable manner."
+
+#define MSGS_NO_ADJ      "Illegal attempt to call before calling CVodeAdjMalloc."
+#define MSGS_BAD_WHICH   "Illegal value for which."
+#define MSGS_LMEMB_NULL  "Linear solver memory is NULL for the backward integration."
+#define MSGS_BAD_TINTERP "Bad t for interpolation."
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/cvodes/cvodes_sptfqmr.c b/src/cvodes/cvodes_sptfqmr.c
new file mode 100644
index 0000000..90c2169
--- /dev/null
+++ b/src/cvodes/cvodes_sptfqmr.c
@@ -0,0 +1,578 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4923 $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSPTFQMR linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cvodes/cvodes_sptfqmr.h>
+#include "cvodes_spils_impl.h"
+#include "cvodes_impl.h"
+
+#include <sundials/sundials_sptfqmr.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* CVSPTFQMR linit, lsetup, lsolve, and lfree routines */
+
+static int CVSptfqmrInit(CVodeMem cv_mem);
+
+static int CVSptfqmrSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+                          N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+                          N_Vector vtemp2, N_Vector vtemp3);
+
+static int CVSptfqmrSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+                          N_Vector ynow, N_Vector fnow);
+
+static int CVSptfqmrFree(CVodeMem cv_mem);
+
+/* CVSPTFQMR lfreeB function */
+
+static int CVSptfqmrFreeB(CVodeBMem cvB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define tq           (cv_mem->cv_tq)
+#define nst          (cv_mem->cv_nst)
+#define tn           (cv_mem->cv_tn)
+#define gamma        (cv_mem->cv_gamma)
+#define gammap       (cv_mem->cv_gammap)
+#define f            (cv_mem->cv_f)
+#define user_data    (cv_mem->cv_user_data)
+#define ewt          (cv_mem->cv_ewt)
+#define errfp        (cv_mem->cv_errfp)
+#define mnewt        (cv_mem->cv_mnewt)
+#define linit        (cv_mem->cv_linit)
+#define lsetup       (cv_mem->cv_lsetup)
+#define lsolve       (cv_mem->cv_lsolve)
+#define lfree        (cv_mem->cv_lfree)
+#define lmem         (cv_mem->cv_lmem)
+#define vec_tmpl     (cv_mem->cv_tempv)
+#define setupNonNull (cv_mem->cv_setupNonNull)
+
+#define sqrtN       (cvspils_mem->s_sqrtN)   
+#define ytemp       (cvspils_mem->s_ytemp)
+#define x           (cvspils_mem->s_x)
+#define ycur        (cvspils_mem->s_ycur)
+#define fcur        (cvspils_mem->s_fcur)
+#define delta       (cvspils_mem->s_delta)
+#define deltar      (cvspils_mem->s_deltar)
+#define npe         (cvspils_mem->s_npe)
+#define nli         (cvspils_mem->s_nli)
+#define nps         (cvspils_mem->s_nps)
+#define ncfl        (cvspils_mem->s_ncfl)
+#define nstlpre     (cvspils_mem->s_nstlpre)
+#define njtimes     (cvspils_mem->s_njtimes)
+#define nfes        (cvspils_mem->s_nfes)
+#define spils_mem   (cvspils_mem->s_spils_mem)
+
+#define jtimesDQ    (cvspils_mem->s_jtimesDQ)
+#define jtimes      (cvspils_mem->s_jtimes)
+#define j_data      (cvspils_mem->s_j_data)
+
+#define last_flag   (cvspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmr
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the Sptfqmr linear solver module. CVSptfqmr first
+ * calls the existing lfree routine if this is not NULL. It then sets
+ * the cv_linit, cv_lsetup, cv_lsolve, cv_lfree fields in (*cvode_mem)
+ * to be CVSptfqmrInit, CVSptfqmrSetup, CVSptfqmrSolve, and CVSptfqmrFree,
+ * respectively. It allocates memory for a structure of type
+ * CVSpilsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure. It sets setupNonNull in (*cvode_mem),
+ * and sets various fields in the CVSpilsMemRec structure.
+ * Finally, CVSptfqmr allocates memory for ytemp and x, and calls
+ * SptfqmrMalloc to allocate memory for the Sptfqmr solver.
+ * -----------------------------------------------------------------
+ */
+
+int CVSptfqmr(void *cvode_mem, int pretype, int maxl)
+{
+  CVodeMem cv_mem;
+  CVSpilsMem cvspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int mxl;
+
+  /* Return immediately if cvode_mem is NULL */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPTFQMR", "CVSptfqmr", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Check if N_VDotProd is present */
+  if (vec_tmpl->ops->nvdotprod == NULL) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPTFQMR", "CVSptfqmr", MSGS_BAD_NVECTOR);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(cv_mem);
+
+  /* Set four main function fields in cv_mem */
+  linit  = CVSptfqmrInit;
+  lsetup = CVSptfqmrSetup;
+  lsolve = CVSptfqmrSolve;
+  lfree  = CVSptfqmrFree;
+
+  /* Get memory for CVSpilsMemRec */
+  cvspils_mem = NULL;
+  cvspils_mem = (CVSpilsMem) malloc(sizeof(struct CVSpilsMemRec));
+  if (cvspils_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPTFQMR", "CVSptfqmr", MSGS_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  cvspils_mem->s_type = SPILS_SPTFQMR;
+
+  /* Set Sptfqmr parameters that have been passed in call sequence */
+  cvspils_mem->s_pretype = pretype;
+  mxl = cvspils_mem->s_maxl = (maxl <= 0) ? CVSPILS_MAXL : maxl;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  j_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  cvspils_mem->s_pset   = NULL;
+  cvspils_mem->s_psolve = NULL;
+  cvspils_mem->s_pfree  = NULL;
+  cvspils_mem->s_P_data = cv_mem->cv_user_data;
+
+  /* Set default values for the rest of the Sptfqmr parameters */
+  cvspils_mem->s_eplifac   = CVSPILS_EPLIN;
+
+  cvspils_mem->s_last_flag = CVSPILS_SUCCESS;
+
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  setupNonNull = FALSE;
+
+  /* Check for legal pretype */ 
+  if ((pretype != PREC_NONE) && (pretype != PREC_LEFT) &&
+      (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPTFQMR", "CVSptfqmr", MSGS_BAD_PRETYPE);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Allocate memory for ytemp and x */
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPTFQMR", "CVSptfqmr", MSGS_MEM_FAIL);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+  x = N_VClone(vec_tmpl);
+  if (x == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPTFQMR", "CVSptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt(N_VDotProd(ytemp, ytemp));
+
+  /* Call SptfqmrMalloc to allocate workspace for Sptfqmr */
+  sptfqmr_mem = NULL;
+  sptfqmr_mem = SptfqmrMalloc(mxl, vec_tmpl);
+  if (sptfqmr_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPTFQMR", "CVSptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(x);
+    free(cvspils_mem); cvspils_mem = NULL;
+    return(CVSPILS_MEM_FAIL);
+  }
+  
+  /* Attach SPTFQMR memory to spils memory structure */
+  spils_mem = (void *) sptfqmr_mem;
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = cvspils_mem;
+
+  return(CVSPILS_SUCCESS);
+}
+
+/* Additional readability replacements */
+
+#define pretype (cvspils_mem->s_pretype)
+#define eplifac (cvspils_mem->s_eplifac)
+#define maxl    (cvspils_mem->s_maxl)
+#define psolve  (cvspils_mem->s_psolve)
+#define pset    (cvspils_mem->s_pset)
+#define P_data  (cvspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmrInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the Sptfqmr
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSptfqmrInit(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  SptfqmrMem sptfqmr_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+  sptfqmr_mem = (SptfqmrMem) spils_mem;
+
+  /* Initialize counters */
+  cvSpilsInitializeCounters(cvspils_mem);
+
+  /* Check for legal combination pretype - psolve */
+  if ((pretype != PREC_NONE) && (psolve == NULL)) {
+    cvProcessError(cv_mem, -1, "CVSPTFQMR", "CVSptfqmrInit", MSGS_PSOLVE_REQ);
+    last_flag = CVSPILS_ILL_INPUT;
+    return(-1);
+  }
+
+  /* Set setupNonNull = TRUE iff there is preconditioning
+     (pretype != PREC_NONE)  and there is a preconditioning
+     setup phase (pset != NULL) */
+  setupNonNull = (pretype != PREC_NONE) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = CVSpilsDQJtimes;
+    j_data = cv_mem;
+  } else {
+    j_data = user_data;
+  }
+
+  /*  Set maxl in the SPTFQMR memory in case it was changed by the user */
+  sptfqmr_mem->l_max  = maxl;
+
+  last_flag = CVSPILS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmrSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the Sptfqmr linear solver.
+ * It makes a decision as to whether or not to signal for reevaluation
+ * of Jacobian data in the pset routine, based on various state
+ * variables, then it calls pset. If we signal for reevaluation,
+ * then we reset jcur = *jcurPtr to TRUE, regardless of the pset output.
+ * In any case, if jcur == TRUE, we increment npe and save nst in nstlpre.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSptfqmrSetup(CVodeMem cv_mem, int convfail, N_Vector ypred,
+			  N_Vector fpred, booleantype *jcurPtr, N_Vector vtemp1,
+			  N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  realtype dgamma;
+  int  retval;
+  CVSpilsMem cvspils_mem;
+
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  /* Use nst, gamma/gammap, and convfail to set J eval. flag jok */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlpre + CVSPILS_MSBPRE) ||
+      ((convfail == CV_FAIL_BAD_J) && (dgamma < CVSPILS_DGMAX)) ||
+      (convfail == CV_FAIL_OTHER);
+  *jcurPtr = jbad;
+  jok = !jbad;
+
+  /* Call pset routine and possibly reset jcur */
+  retval = pset(tn, ypred, fpred, jok, jcurPtr, gamma, P_data, 
+                vtemp1, vtemp2, vtemp3);
+  if (retval < 0) {
+    cvProcessError(cv_mem, SPTFQMR_PSET_FAIL_UNREC, "CVSPTFQMR", "CVSptfqmrSetup", MSGS_PSET_FAILED);
+    last_flag = SPTFQMR_PSET_FAIL_UNREC;
+  }
+  if (retval > 0) {
+    last_flag = SPTFQMR_PSET_FAIL_REC;
+  }
+
+  if (jbad) *jcurPtr = TRUE;
+
+  /* If jcur = TRUE, increment npe and save nst value */
+  if (*jcurPtr) {
+    npe++;
+    nstlpre = nst;
+  }
+
+  last_flag = SPTFQMR_SUCCESS;
+
+  /* Return the same value that pset returned */
+  return(retval);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmrSolve
+ * -----------------------------------------------------------------
+ * This routine handles the call to the generic solver SptfqmrSolve
+ * for the solution of the linear system Ax = b with the SPTFQMR method.
+ * The solution x is returned in the vector b.
+ *
+ * If the WRMS norm of b is small, we return x = b (if this is the first
+ * Newton iteration) or x = 0 (if a later Newton iteration).
+ *
+ * Otherwise, we set the tolerance parameter and initial guess (x = 0),
+ * call SptfqmrSolve, and copy the solution x into b. The x-scaling and
+ * b-scaling arrays are both equal to weight.
+ *
+ * The counters nli, nps, and ncfl are incremented, and the return value
+ * is set according to the success of SptfqmrSolve. The success flag is
+ * returned if SptfqmrSolve converged, or if this is the first Newton
+ * iteration and the residual norm was reduced below its initial value.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSptfqmrSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+			  N_Vector ynow, N_Vector fnow)
+{
+  realtype bnorm, res_norm;
+  CVSpilsMem cvspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int nli_inc, nps_inc, retval;
+  
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  sptfqmr_mem = (SptfqmrMem) spils_mem;
+
+  /* Test norm(b); if small, return x = 0 or x = b */
+  deltar = eplifac * tq[4]; 
+
+  bnorm = N_VWrmsNorm(b, weight);
+  if (bnorm <= deltar) {
+    if (mnewt > 0) N_VConst(ZERO, b); 
+    return(0);
+  }
+
+  /* Set vectors ycur and fcur for use by the Atimes and Psolve routines */
+  ycur = ynow;
+  fcur = fnow;
+
+  /* Set inputs delta and initial guess x = 0 to SptfqmrSolve */  
+  delta = deltar * sqrtN;
+  N_VConst(ZERO, x);
+  
+  /* Call SptfqmrSolve and copy x to b */
+  retval = SptfqmrSolve(sptfqmr_mem, cv_mem, x, b, pretype, delta,
+                        cv_mem, weight, weight, CVSpilsAtimes, CVSpilsPSolve,
+                        &res_norm, &nli_inc, &nps_inc);
+
+  N_VScale(ONE, x, b);
+  
+  /* Increment counters nli, nps, and ncfl */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPTFQMR_SUCCESS) ncfl++;
+
+  /* Interpret return value from SpgmrSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPTFQMR_SUCCESS:
+    return(0);
+    break;
+  case SPTFQMR_RES_REDUCED:
+    if (mnewt == 0) return(0);
+    else            return(1);
+    break;
+  case SPTFQMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_UNREC:
+    cvProcessError(cv_mem, SPTFQMR_ATIMES_FAIL_UNREC, "CVSPTFQMR", "CVSptfqmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_UNREC:
+    cvProcessError(cv_mem, SPTFQMR_PSOLVE_FAIL_UNREC, "CVSPTFQMR", "CVSptfqmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);  
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : CVSptfqmrFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the Sptfqmr linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int CVSptfqmrFree(CVodeMem cv_mem)
+{
+  CVSpilsMem cvspils_mem;
+  SptfqmrMem sptfqmr_mem;
+    
+  cvspils_mem = (CVSpilsMem) lmem;
+
+  N_VDestroy(ytemp);
+  N_VDestroy(x);
+
+  sptfqmr_mem = (SptfqmrMem) spils_mem;
+  SptfqmrFree(sptfqmr_mem);
+
+  if (cvspils_mem->s_pfree != NULL) (cvspils_mem->s_pfree)(cv_mem);
+
+  free(cvspils_mem);
+  cv_mem->cv_lmem = NULL;
+
+  return(0);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+      
+/* Additional readability replacements */
+
+#define pset_B      (cvspilsB_mem->s_psetB)
+#define psolve_B    (cvspilsB_mem->s_psolveB)
+#define jtimes_B    (cvspilsB_mem->s_jtimesB)
+#define P_data_B    (cvspilsB_mem->s_P_dataB)
+
+/*
+ * CVSptfqmrB
+ *
+ * Wrapper for the backward phase
+ */
+
+int CVSptfqmrB(void *cvode_mem, int which, int pretypeB, int maxlB)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  CVSpilsMemB cvspilsB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSPILS_MEM_NULL, "CVSPTFQMR", "CVSptfqmrB", MSGS_CVMEM_NULL);
+    return(CVSPILS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSPILS_NO_ADJ, "CVSPTFQMR", "CVSptfqmrB", MSGS_NO_ADJ);
+    return(CVSPILS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSPILS_ILL_INPUT, "CVSPTFQMR", "CVSptfqmrB", MSGS_BAD_WHICH);
+    return(CVSPILS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Get memory for CVSpilsMemRecB */
+  cvspilsB_mem = NULL;
+  cvspilsB_mem = (CVSpilsMemB) malloc(sizeof(struct CVSpilsMemRecB));
+  if (cvspilsB_mem == NULL) {
+    cvProcessError(cv_mem, CVSPILS_MEM_FAIL, "CVSPTFQMR", "CVSptfqmrB", MSGS_MEM_FAIL);
+    return(CVSPILS_MEM_FAIL);
+  }
+
+  pset_B = NULL;
+  psolve_B = NULL;
+  P_data_B = NULL;
+
+  /* initialize Jacobian function */
+  jtimes_B = NULL;
+
+  /* attach lmemB and lfreeB */
+  cvB_mem->cv_lmem = cvspilsB_mem;
+  cvB_mem->cv_lfree = CVSptfqmrFreeB;
+
+  flag = CVSptfqmr(cvodeB_mem, pretypeB, maxlB);
+
+  if (flag != CVSPILS_SUCCESS) {
+    free(cvspilsB_mem); 
+    cvspilsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * CVSptfqmrFreeB 
+ */
+
+
+static int CVSptfqmrFreeB(CVodeBMem cvB_mem)
+{
+  CVSpilsMemB cvspilsB_mem;
+
+  cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem);
+
+  free(cvspilsB_mem);
+
+  return(0);
+}
diff --git a/src/cvodes/cvodes_superlumt.c b/src/cvodes/cvodes_superlumt.c
new file mode 100644
index 0000000..0f73c7f
--- /dev/null
+++ b/src/cvodes/cvodes_superlumt.c
@@ -0,0 +1,705 @@
+/*
+ * -----------------------------------------------------------------
+ * $Rev $
+ * $Date: 2016-09-19 14:35:51 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the CVSUPERLUMT linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cvodes_impl.h"
+#include "cvodes_sparse_impl.h"
+#include "cvodes/cvodes_superlumt.h"
+#include "sundials/sundials_superlumt_impl.h"
+#include "sundials/sundials_math.h"
+
+/* Constants */
+
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* CVSUPERLUMT linit, lsetup, lsolve, and lfree routines */
+ 
+static int cvSuperLUMTInit(CVodeMem cv_mem);
+
+static int cvSuperLUMTSetup(CVodeMem cv_mem, int convfail, N_Vector ypred, 
+			    N_Vector fpred, booleantype *jcurPtr,
+			    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int cvSuperLUMTSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+			    N_Vector ycur, N_Vector fcur);
+
+static int cvSuperLUMTFree(CVodeMem cv_mem);
+
+/* CVKLU lfreeB function */
+static int cvSuperLUMTFreeB(CVodeBMem cvb_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+
+/*
+ * -----------------------------------------------------------------
+ * CVSuperLUMT
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the CVODE / SuperLUMT linear solver module.  
+ * CVSUPERLUMT first calls the existing lfree routine if this is not NULL.
+ * Then it sets the cv_linit, cv_lsetup, cv_lsolve, and
+ * cv_lfree fields in (*cv_mem) to be cvSuperLUMTInit, cvSuperLUMTSetup,
+ * cvSuperLUMTSolve, and cvSuperLUMTFree, respectively.
+ * It allocates memory for a structure of type CVsluMemRec and sets
+ * the cv_lmem field in (*cvode_mem) to the address of this structure.
+ * It sets setupNonNull in (*cvode_mem) to TRUE.
+ * Finally, it allocates memory for SuperLUMT.
+ * The return value is CVSLS_SUCCESS = 0, CVSLS_LMEM_FAIL = -1,
+ * or CVSLS_ILL_INPUT = -2.
+ *
+ * NOTE: The SuperLUMT linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, CVSuperLUMT will first 
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int CVSuperLUMT(void *cvode_mem, int num_threads, int n, int nnz)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+  SLUMTData slumt_data;
+  int *perm_c, *perm_r;
+  int nrhs, panel_size, relax;
+  double *bd;
+  SuperMatrix *B;
+
+  /* Return immediately if cv_mem is NULL. */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Test if the NVECTOR package is compatible with the Direct solver */
+  if (cv_mem->cv_tempv->ops->nvgetarraypointer == NULL) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_BAD_NVECTOR);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  if (cv_mem->cv_lfree != NULL) cv_mem->cv_lfree(cv_mem);
+
+  /* Set five main function fields in cv_mem. */
+  cv_mem->cv_linit  = cvSuperLUMTInit;
+  cv_mem->cv_lsetup = cvSuperLUMTSetup;
+  cv_mem->cv_lsolve = cvSuperLUMTSolve;
+  cv_mem->cv_lfree  = cvSuperLUMTFree;
+
+  /* Get memory for CVSlsMemRec. */
+  cvsls_mem = (CVSlsMem) malloc(sizeof(struct CVSlsMemRec));
+  if (cvsls_mem == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Get memory for SLUMT_data. */
+  slumt_data = (SLUMTData)malloc(sizeof(struct SLUMTDataRec));
+  if (slumt_data == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  cv_mem->cv_setupNonNull = TRUE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  cvsls_mem->s_jaceval = NULL;
+  cvsls_mem->s_jacdata = cv_mem->cv_user_data;
+
+  /* Allocate memory for the sparse Jacobian */
+  cvsls_mem->s_JacMat = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (cvsls_mem->s_JacMat == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    free(cvsls_mem);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Allocate memory for saved sparse Jacobian */
+  cvsls_mem->s_savedJ = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (cvsls_mem->s_savedJ == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    SparseDestroyMat(cvsls_mem->s_JacMat);
+    free(cvsls_mem);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* Set up memory for the permutations */
+  perm_r = (int *)malloc(n*sizeof(int));
+  if (perm_r == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		   MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+  perm_c = (int *)malloc(n*sizeof(int));
+  if (perm_c == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSLS", "cvSuperLUMT", 
+		   MSGSP_MEM_FAIL);
+    free(perm_r);
+    return(CVSLS_MEM_FAIL);
+  }
+  slumt_data->perm_r = perm_r;
+  slumt_data->perm_c = perm_c;
+
+  /* Set default parameters for SuperLU */
+  slumt_data->num_threads = num_threads;
+  slumt_data->diag_pivot_thresh = 1.0;
+
+  /* Allocate structures for SuperLU */
+  slumt_data->Gstat = (Gstat_t *)malloc(sizeof(Gstat_t));
+  slumt_data->s_A = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_AC = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_L = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_U = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_A->Store  = NULL;
+  slumt_data->s_AC->Store = NULL;
+  slumt_data->s_L->Store  = NULL;
+  slumt_data->s_U->Store  = NULL;
+  slumt_data->superlumt_options = (superlumt_options_t *)malloc(sizeof(superlumt_options_t));
+
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  StatAlloc(cvsls_mem->s_JacMat->N, num_threads, panel_size, relax, 
+	    slumt_data->Gstat);
+  
+  /* Create RHS matrix */
+  nrhs = 1;
+  bd = NULL;
+  B = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  B->Store = NULL;
+  dCreate_Dense_Matrix(B, n, nrhs, bd, n, 
+		       SLU_DN, SLU_D, SLU_GE);
+  slumt_data->s_B = B;
+
+  /* Set ordering to COLAMD as the cvode default use.
+     Users can set a different value with CVSuperLUMTSetOrdering,
+     and the user-set value is loaded before any call to factorize the
+     matrix in cvSuperLUMTSetup.  */
+  slumt_data->s_ordering = 3;
+
+  /* Attach linear solver memory to the integrator memory */
+  cvsls_mem->s_solver_data = (void *) slumt_data;
+  cv_mem->cv_lmem = cvsls_mem;
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+
+  return(CVSLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * CVSuperLUMT interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the CVSuperLUMT
+  linear solver module.  
+  It returns 0 if successful.
+*/
+
+static int cvSuperLUMTInit(CVodeMem cv_mem)
+{
+  int num_threads, n;
+  CVSlsMem cvsls_mem;
+  SLUMTData slumt_data;
+
+  cvsls_mem = (CVSlsMem)cv_mem->cv_lmem;
+  slumt_data = (SLUMTData) cvsls_mem->s_solver_data;
+
+  cvsls_mem->s_nje = 0;
+  cvsls_mem->s_first_factorize = 1;
+  cvsls_mem->s_nstlj = 0;
+
+  /* ------------------------------------------------------------
+     Allocate storage and initialize statistics variables. 
+     ------------------------------------------------------------*/
+  n = cvsls_mem->s_JacMat->N;
+  num_threads = slumt_data->num_threads;
+
+  StatInit(n, num_threads, slumt_data->Gstat);
+
+  cvsls_mem->s_last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the CVSuperLUMT linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     CVSLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int cvSuperLUMTSetup(CVodeMem cv_mem, int convfail, N_Vector ypred, 
+			   N_Vector fpred, booleantype *jcurPtr,
+			   N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  booleantype jbad, jok;
+  int retval, info;
+  int nprocs, panel_size, relax, permc_spec, lwork;
+  int *perm_r, *perm_c;
+  long int nst, nstlj;
+  realtype tn, gamma, gammap, dgamma;
+  double diag_pivot_thresh, drop_tol;
+  fact_t fact;
+  trans_t trans;
+  yes_no_t refact, usepr;
+  CVSlsMem cvsls_mem;
+  CVSlsSparseJacFn jaceval;
+  SuperMatrix *A, *AC, *L, *U;
+  Gstat_t *Gstat;
+  superlumt_options_t *superlumt_options;
+  SLUMTData slumt_data;
+  SlsMat JacMat, savedJ;
+  void *jacdata;
+  void *work;
+  
+  cvsls_mem = (CVSlsMem) (cv_mem->cv_lmem);
+  tn = cv_mem->cv_tn; 
+  gamma = cv_mem->cv_gamma;
+  gammap = cv_mem->cv_gammap;
+  nst = cv_mem->cv_nst;
+
+  slumt_data = (SLUMTData) cvsls_mem->s_solver_data;
+
+  jaceval = cvsls_mem->s_jaceval;
+  jacdata = cvsls_mem->s_jacdata;
+  JacMat = cvsls_mem->s_JacMat;
+  savedJ = cvsls_mem->s_savedJ;
+  nstlj = cvsls_mem->s_nstlj;
+
+  superlumt_options = slumt_data->superlumt_options;
+  A = slumt_data->s_A;
+  AC = slumt_data->s_AC;
+  L = slumt_data->s_L;
+  U = slumt_data->s_U;
+  Gstat = slumt_data->Gstat;
+  perm_r = slumt_data->perm_r;
+  perm_c = slumt_data->perm_c;
+  nprocs = slumt_data->num_threads;
+  diag_pivot_thresh = slumt_data->diag_pivot_thresh;
+
+  /* Set option values for SuperLU_MT */
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  fact = EQUILIBRATE;
+  trans = NOTRANS;
+  usepr = NO;
+  drop_tol = 0.0;
+  lwork = 0;
+  work = NULL;
+
+  /* Check that Jacobian eval routine is set */
+  if (jaceval == NULL) {
+    cvProcessError(cv_mem, CVSLS_JAC_NOSET, "CVSLS", "cvSuperLUMTSetup", 
+		    MSGSP_JAC_NOSET);
+    free(cvsls_mem); cvsls_mem = NULL;
+    return(CVSLS_JAC_NOSET);
+  }
+
+  /* Determine whether Jacobian needs to be recalculated */
+  dgamma = SUNRabs((gamma/gammap) - ONE);
+  jbad = (nst == 0) || (nst > nstlj + CVS_MSBJ) ||
+         ((convfail == CV_FAIL_BAD_J) && (dgamma < CVS_DGMAX)) ||
+         (convfail == CV_FAIL_OTHER);
+  jok = !jbad;
+  
+  if (jok) {
+    /* If jok = TRUE, use saved copy of J */
+    *jcurPtr = FALSE;
+    SparseCopyMat(savedJ, JacMat);
+  } else {
+    /* If jok = FALSE, call jac routine for new J value */
+    cvsls_mem->s_nje++;
+    cvsls_mem->s_nstlj = nst;
+    *jcurPtr = TRUE;
+    SparseSetMatToZero(JacMat);
+    retval = jaceval(tn, ypred, fpred, JacMat, jacdata, vtemp1, vtemp2, vtemp3);
+    if (retval < 0) {
+      cvProcessError(cv_mem, CVSLS_JACFUNC_UNRECVR, "CVSLS", "cvSuperLUMTSetup", MSGSP_JACFUNC_FAILED);
+      cvsls_mem->s_last_flag = CVSLS_JACFUNC_UNRECVR;
+      return(-1);
+    }
+    if (retval > 0) {
+      cvsls_mem->s_last_flag = CVSLS_JACFUNC_RECVR;
+      return(1);
+    }
+
+    SparseCopyMat(JacMat, savedJ);
+  }
+
+  /* Scale and add I to get M = I - gamma*J */
+  SparseScaleMat(-gamma, JacMat);
+  SparseAddIdentityMat(JacMat);
+
+  if (A->Store) {
+    SUPERLU_FREE(A->Store);
+  }
+  dCreate_CompCol_Matrix(A, JacMat->M, JacMat->N, JacMat->NNZ, 
+			 JacMat->data, JacMat->indexvals, JacMat->indexptrs, 
+			 SLU_NC, SLU_D, SLU_GE);
+
+  if (cvsls_mem->s_first_factorize) {
+    /* ------------------------------------------------------------
+       Get column permutation vector perm_c[], according to permc_spec:
+       permc_spec = 3: approximate minimum degree for unsymmetric matrices
+       ------------------------------------------------------------*/ 
+    permc_spec = slumt_data->s_ordering;
+    get_perm_c(permc_spec, A, perm_c);
+
+    refact= NO;
+    cvsls_mem->s_first_factorize = 0;
+  }
+  else {
+    /* ------------------------------------------------------------
+       Re-initialize statistics variables 
+       ------------------------------------------------------------*/
+    StatInit(JacMat->N, nprocs, Gstat);
+    Destroy_CompCol_Permuted(AC);
+    refact= YES;
+  }
+
+  /* ------------------------------------------------------------
+     Initialize the option structure superlumt_options using the
+     user-input parameters;  Subsequent calls will re-initialize
+     options.
+     Apply perm_c to the columns of original A to form AC.
+     ------------------------------------------------------------*/
+  pdgstrf_init(nprocs, fact, trans, refact, panel_size, relax,
+	       diag_pivot_thresh, usepr, drop_tol, perm_c, perm_r,
+	       work, lwork, A, AC, superlumt_options, Gstat);
+  /* ------------------------------------------------------------
+     Compute the LU factorization of A.
+     The following routine will create nprocs threads.
+     ------------------------------------------------------------*/
+  pdgstrf(superlumt_options, AC, perm_r, L, U, Gstat, &info);
+    
+  if (info != 0) {
+    cvsls_mem->s_last_flag = info;
+    return(+1);
+  }
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the CVSuperLUMT linear
+  solver module.  It calls the SuperLU_MT solve routine,
+  then returns CVSLS_SUCCESS = 0.
+*/
+
+static int cvSuperLUMTSolve(CVodeMem cv_mem, N_Vector b, N_Vector weight,
+			    N_Vector ycur, N_Vector fcur)
+{
+  int info, trans, lmm;
+  int *perm_r, *perm_c;
+  realtype gamrat;
+  CVSlsMem cvsls_mem;
+  SuperMatrix *L, *U, *B;
+  Gstat_t *Gstat;
+  DNformat *Bstore;
+  SLUMTData slumt_data;
+  realtype *bd;
+  
+  gamrat = cv_mem->cv_gamrat;
+  lmm = cv_mem->cv_lmm;
+
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+  slumt_data = (SLUMTData) cvsls_mem->s_solver_data;
+
+  L = slumt_data->s_L;
+  U = slumt_data->s_U;
+  perm_r = slumt_data->perm_r;
+  perm_c = slumt_data->perm_c;
+  Gstat = slumt_data->Gstat;
+  B = slumt_data->s_B;
+   
+  bd = N_VGetArrayPointer(b);
+  Bstore = (DNformat *) (B->Store);
+  Bstore->nzval = bd;
+
+  /* Call SuperLUMT to solve the linear system using L and U */
+  trans = NOTRANS;
+  dgstrs(trans, L, U, perm_r, perm_c, B, Gstat, &info);
+
+  /* Scale the correction to account for change in gamma. */
+  if ((lmm == CV_BDF) && (gamrat != ONE)) {
+    N_VScale(TWO/(ONE + gamrat), b, b);
+  }
+
+  Bstore->nzval = NULL;
+
+  cvsls_mem->s_last_flag = CVSLS_SUCCESS;
+  return(CVSLS_SUCCESS);
+}
+
+/*
+  This routine frees memory specific to the CVSuperLUMT linear solver.
+*/
+
+static int cvSuperLUMTFree(CVodeMem cv_mem)
+{
+  CVSlsMem cvsls_mem;
+  SLUMTData slumt_data;
+  
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+
+  slumt_data = (SLUMTData) cvsls_mem->s_solver_data;
+
+  pxgstrf_finalize(slumt_data->superlumt_options, slumt_data->s_AC);
+
+  free(slumt_data->perm_r);
+  free(slumt_data->perm_c);
+  free(slumt_data->superlumt_options);
+  Destroy_SuperNode_SCP( (slumt_data->s_L) );
+  Destroy_CompCol_NCP( (slumt_data->s_U) );
+  StatFree( (slumt_data->Gstat) );
+  free(slumt_data->Gstat);
+  
+  Destroy_SuperMatrix_Store(slumt_data->s_B);
+  SUPERLU_FREE(slumt_data->s_A->Store);
+  if (cvsls_mem->s_JacMat) {
+    SparseDestroyMat(cvsls_mem->s_JacMat);
+    cvsls_mem->s_JacMat = NULL;
+  }
+  if (cvsls_mem->s_savedJ) {
+    SparseDestroyMat(cvsls_mem->s_savedJ);
+    cvsls_mem->s_savedJ = NULL;
+  }
+
+  free(slumt_data->s_B);
+  free(slumt_data->s_A);
+  free(slumt_data->s_AC);
+  free(slumt_data->s_L);
+  free(slumt_data->s_U);
+
+  free(slumt_data); 
+  slumt_data = NULL;
+  free(cv_mem->cv_lmem); 
+
+  return(0);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * CVSuperLUMTSetOrdering sets the ordering used by SuperLUMT for reducing fill.
+ * Options are: 
+ * 0 for natural ordering
+ * 1 for minimal degree ordering on A'*A
+ * 2 for minimal degree ordering on A'+A
+ * 3 for approximate minimal degree ordering for unsymmetric matrices
+ * The default used in SUNDIALS is 3 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+int CVSuperLUMTSetOrdering(void *cv_mem_v, int ordering_choice)
+{
+  CVodeMem cv_mem;
+  CVSlsMem cvsls_mem;
+  SLUMTData slumt_data;
+
+ /* Return immediately if cv_mem is NULL */
+  if (cv_mem_v == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSLS", "CVSuperLUMTSetOrdering",
+		    MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cv_mem_v;
+
+ /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) && (ordering_choice != 3) ) {
+    cvProcessError(NULL, CVSLS_ILL_INPUT, "CVSLS", "CVSuperLUMTSetOrdering",
+		    MSGSP_ILL_INPUT);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  cvsls_mem = (CVSlsMem) cv_mem->cv_lmem;
+  slumt_data = (SLUMTData) cvsls_mem->s_solver_data;
+
+  slumt_data->s_ordering = ordering_choice;
+
+  return(CVSLS_SUCCESS);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * CVSuperLUMTB is a wrapper around CVSuperLUMT. It attaches the CVSuperLUMT 
+ * linear solver to the backward problem memory block.
+ */
+
+int CVSuperLUMTB(void *cvode_mem, int which, int num_threads, 
+		 int n, int nnz)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  CVSlsMemB cvslsB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSSuperLUMT", "CVSuperLUMTB", MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSLS_NO_ADJ, "CVSSuperLUMT", "CVSuperLUMTB", MSGSP_NO_ADJ);
+    return(CVSLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSSuperLUMT", "CVSuperLUMTB", MSGSP_BAD_WHICH);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  /* Get memory for CVSlsMemRecB */
+  cvslsB_mem = (CVSlsMemB) malloc(sizeof(struct CVSlsMemRecB));
+  if (cvslsB_mem == NULL) {
+    cvProcessError(cv_mem, CVSLS_MEM_FAIL, "CVSSuperLUMT", "CVSuperLUMTB", MSGSP_MEM_FAIL);
+    return(CVSLS_MEM_FAIL);
+  }
+
+  /* initialize Jacobian function */
+  cvslsB_mem->s_djacB = NULL;
+
+  /* attach lmemB and lfreeB */
+  cvB_mem->cv_lmem = cvslsB_mem;
+  cvB_mem->cv_lfree = cvSuperLUMTFreeB;
+
+  flag = CVSuperLUMT(cvodeB_mem, num_threads, n, nnz);
+
+  if (flag != CVSLS_SUCCESS) {
+    free(cvslsB_mem);
+    cvslsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * CVSuperLUMTSetOrderingB is a wrapper around CVSuperLUMTSetOrdering. 
+ * CVSuperLUMTSetOrderingB pulls off the memory block associated with the
+ * which parameter and sets the ordering for the solver associated with that block.
+ */
+
+int CVSuperLUMTSetOrderingB(void *cvode_mem, int which, int ordering_choice)
+{
+  CVodeMem cv_mem;
+  CVadjMem ca_mem;
+  CVodeBMem cvB_mem;
+  void *cvodeB_mem;
+  int flag;
+
+  /* Check if cvode_mem exists */
+  if (cvode_mem == NULL) {
+    cvProcessError(NULL, CVSLS_MEM_NULL, "CVSSuperLUMT", "CVSuperLUMTSetOrderingB", MSGSP_CVMEM_NULL);
+    return(CVSLS_MEM_NULL);
+  }
+  cv_mem = (CVodeMem) cvode_mem;
+
+  /* Was ASA initialized? */
+  if (cv_mem->cv_adjMallocDone == FALSE) {
+    cvProcessError(cv_mem, CVSLS_NO_ADJ, "CVSSuperLUMT", "CVSuperLUMTSetOrderingB", MSGSP_NO_ADJ);
+    return(CVSLS_NO_ADJ);
+  } 
+  ca_mem = cv_mem->cv_adj_mem;
+
+  /* Check which */
+  if ( which >= ca_mem->ca_nbckpbs ) {
+    cvProcessError(cv_mem, CVSLS_ILL_INPUT, "CVSSuperLUMT", "CVSuperLUMTSetOrderingB", MSGSP_BAD_WHICH);
+    return(CVSLS_ILL_INPUT);
+  }
+
+  /* Find the CVodeBMem entry in the linked list corresponding to which */
+  cvB_mem = ca_mem->cvB_mem;
+  while (cvB_mem != NULL) {
+    if ( which == cvB_mem->cv_index ) break;
+    cvB_mem = cvB_mem->cv_next;
+  }
+
+  cvodeB_mem = (void *) (cvB_mem->cv_mem);
+
+  flag = CVSuperLUMTSetOrdering(cvodeB_mem, ordering_choice);
+
+  return(flag);
+}
+
+/*
+ * cvSuperLUMTFreeB frees the memory associated with the CVSSuperLUMT linear
+ * solver for backward integration.
+ */
+
+static int cvSuperLUMTFreeB(CVodeBMem cvB_mem)
+{
+  CVSlsMemB cvslsB_mem;
+
+  cvslsB_mem = (CVSlsMemB) (cvB_mem->cv_lmem);
+
+  free(cvslsB_mem);
+
+  return(0);
+}
+
diff --git a/src/ida/CMakeLists.txt b/src/ida/CMakeLists.txt
new file mode 100644
index 0000000..7aa8c84
--- /dev/null
+++ b/src/ida/CMakeLists.txt
@@ -0,0 +1,158 @@
+# ---------------------------------------------------------------
+# $Revision: 4961 $
+# $Date: 2016-09-26 07:58:48 -0700 (Mon, 26 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the IDA library
+
+INSTALL(CODE "MESSAGE(\"\nInstall IDA\n\")")
+
+# Add variable ida_SOURCES with the sources for the IDA library
+SET(ida_SOURCES
+  ida.c
+  ida_io.c
+  ida_ic.c
+  ida_direct.c
+  ida_band.c
+  ida_dense.c
+  ida_sparse.c
+  ida_spils.c
+  ida_spbcgs.c
+  ida_spgmr.c
+  ida_sptfqmr.c
+  ida_bbdpre.c
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND ida_SOURCES ida_klu.c)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND ida_SOURCES ida_superlumt.c)
+ENDIF()
+
+# IF(PETSC_FOUND)
+#    # use MPI_MPICC as the compiler
+#    SET(CMAKE_C_COMPILER ${MPI_MPICC})
+#    LIST(APPEND ida_SOURCES ida_petsc.c)
+# ENDIF()
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the IDA library
+SET(shared_SOURCES
+  sundials_nvector.c
+  sundials_math.c
+  sundials_direct.c
+  sundials_band.c
+  sundials_dense.c
+  sundials_iterative.c
+  sundials_sparse.c
+  sundials_spbcgs.c
+  sundials_spgmr.c
+  sundials_sptfqmr.c
+  )
+
+# Add prefix with complete path to the common SUNDIALS sources
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable ida_HEADERS with the exported IDA header files
+SET(ida_HEADERS
+  ida_band.h
+  ida_bbdpre.h
+  ida_dense.h
+  ida_direct.h
+  ida.h
+  ida_spbcgs.h
+  ida_spgmr.h
+  ida_spils.h
+  ida_sptfqmr.h
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND ida_HEADERS ida_klu.h ida_sparse.h)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND ida_HEADERS ida_superlumt.h ida_sparse.h)
+ENDIF()
+
+# IF(PETSC_FOUND)
+#     LIST(APPEND ida_HEADERS ida_petsc.h)
+# ENDIF()
+
+# Add prefix with complete path to the IDA header files
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/ida/ ida_HEADERS)
+
+# If Blas/Lapack support was enabled, set-up additional file lists
+IF(LAPACK_FOUND)
+  SET(ida_BL_SOURCES ida_lapack.c)
+  SET(ida_BL_HEADERS ida_lapack.h)
+  ADD_PREFIX(${sundials_SOURCE_DIR}/include/ida/ ida_BL_HEADERS)
+ELSE(LAPACK_FOUND)
+  SET(ida_BL_SOURCES "")
+  SET(ida_BL_HEADERS "")
+ENDIF(LAPACK_FOUND)
+
+# Add source directories to include directories for access to
+# implementation only header files.
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(../sundials)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Build the static library
+IF(BUILD_STATIC_LIBS)
+
+  # Add the build target for the static IDA library
+  ADD_LIBRARY(sundials_ida_static STATIC 
+    ${ida_SOURCES}  ${ida_BL_SOURCES}  ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_ida_static
+    PROPERTIES OUTPUT_NAME sundials_ida CLEAN_DIRECT_OUTPUT 1)
+
+  # Install the IDA library
+  INSTALL(TARGETS sundials_ida_static DESTINATION lib)
+
+ENDIF(BUILD_STATIC_LIBS)
+
+# Build the shared library
+IF(BUILD_SHARED_LIBS)
+
+  # Add the build target for the IDA library
+  ADD_LIBRARY(sundials_ida_shared SHARED
+    ${ida_SOURCES}  ${ida_BL_SOURCES} ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_ida_shared
+    PROPERTIES OUTPUT_NAME sundials_ida CLEAN_DIRECT_OUTPUT 1)
+
+  # Set VERSION and SOVERSION for shared libraries
+  SET_TARGET_PROPERTIES(sundials_ida_shared
+    PROPERTIES VERSION ${idalib_VERSION} SOVERSION ${idalib_SOVERSION})
+
+  # Install the IDA library
+  INSTALL(TARGETS sundials_ida_shared DESTINATION lib)
+
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the IDA header files
+INSTALL(FILES ${ida_HEADERS} ${ida_BL_HEADERS} DESTINATION include/ida)
+
+# Install the IDA implementation header file
+INSTALL(FILES ida_impl.h DESTINATION include/ida)
+
+#
+MESSAGE(STATUS "Added IDA module")
diff --git a/src/ida/LICENSE b/src/ida/LICENSE
new file mode 100644
index 0000000..94d26a8
--- /dev/null
+++ b/src/ida/LICENSE
@@ -0,0 +1,59 @@
+Copyright (c) 2002-2015, Lawrence Livermore National Security. 
+Produced at the Lawrence Livermore National Laboratory.
+Written by Alan Hindmarsh, Allan Taylor, Radu Serban.
+UCRL-CODE-155952
+All rights reserved. 
+
+This file is part of IDA.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the disclaimer below.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the disclaimer (as noted below)
+in the documentation and/or other materials provided with the
+distribution.
+
+3. Neither the name of the UC/LLNL nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+REGENTS OF THE UNIVERSITY OF CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Additional BSD Notice
+---------------------
+1. This notice is required to be provided under our contract with
+the U.S. Department of Energy (DOE). This work was produced at the
+University of California, Lawrence Livermore National Laboratory
+under Contract No. W-7405-ENG-48 with the DOE.
+
+2. Neither the United States Government nor the University of
+California nor any of their employees, makes any warranty, express
+or implied, or assumes any liability or responsibility for the
+accuracy, completeness, or usefulness of any information, apparatus,
+product, or process disclosed, or represents that its use would not
+infringe privately-owned rights.
+
+3. Also, reference herein to any specific commercial products,
+process, or services by trade name, trademark, manufacturer or
+otherwise does not necessarily constitute or imply its endorsement,
+recommendation, or favoring by the United States Government or the
+University of California. The views and opinions of authors expressed
+herein do not necessarily state or reflect those of the United States
+Government or the University of California, and shall not be used for
+advertising or product endorsement purposes.
diff --git a/src/ida/README b/src/ida/README
new file mode 100644
index 0000000..f11af32
--- /dev/null
+++ b/src/ida/README
@@ -0,0 +1,100 @@
+                               IDA
+                    Release 2.9.0, September 2016
+                 Alan C. Hindmarsh and Radu Serban 
+            Center for Applied Scientific Computing, LLNL
+
+
+IDA is a package for the solution of differential-algebraic equation
+(DAE) systems.  It is written in C, but derived from the package DASPK
+[4,5], which is written in FORTRAN. 
+
+IDA can be used both on serial and parallel computers.  The main
+difference is in the NVECTOR module of vector kernels.  The desired
+version is obtained when compiling the example files by linking the
+appropriate library of NVECTOR kernels.  In the parallel versions,
+communication between processors is done with MPI, with OpenMP, 
+or with Pthreads.
+
+When used with the serial NVECTOR module, IDA provides both direct 
+(dense and band) linear solvers and preconditioned Krylov (iterative) 
+linear solvers. Three different iterative solvers are available: scaled 
+preconditioned GMRES (SPGMR), scaled preconditioned BiCGStab (SPBCG), and 
+scaled preconditioned TFQMR (SPTFQMR). When IDA is used with the parallel 
+NVECTOR module, only the Krylov linear solvers are available.  For the 
+latter case, in addition to the basic solver, the IDA package also contains 
+a preconditioner module called IDABBDPRE, which provides a band-block-diagonal 
+preconditioner.
+
+IDA is part of a software family called SUNDIALS: SUite of Nonlinear and 
+DIfferential/ALgebraic equation Solvers [3].  This suite consists of CVODE, 
+CVODES, ARKode, IDA, IDAS, and KINSOL.  The directory structure of the 
+package supplied reflects this family relationship.
+
+For use with Fortran applications, a set of Fortran/C interface routines,
+called FIDA, is also supplied.  These are written in C, but assume that
+the user calling program and all user-supplied routines are in Fortran.
+
+Several examples problem programs are included, covering both serial
+and parallel cases, both small and large problem sizes, and both
+linear and nonlinear problems.
+
+The notes below provide the location of documentation, directions for the 
+installation of the IDA package, and relevant references. Following that 
+is a brief history of revisions to the package.
+
+
+A. Documentation
+----------------
+
+/sundials/doc/ida/ contains PDF files for the IDA User Guide [1] (ida_guide.pdf)
+and the IDA Examples [2] (ida_examples.pdf) documents.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see the file /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see the "Installation Procedure"
+chapter in the IDA User Guide.
+
+
+C. References
+-------------
+
+[1] A. C. Hindmarsh, R. Serban, and A. Collier, "User Documentation for IDA v2.9.0," 
+    LLNL technical report UCRL-SM-208112, March 2016.
+
+[2] A. C. Hindmarsh, R. Serban, and A. Collier, "Example Programs for IDA v2.9.0," 
+    LLNL technical report UCRL-SM-208113, March 2016.
+
+[3] A. C. Hindmarsh, P. N. Brown, K. E. Grant, S. L. Lee, R. Serban, 
+    D. E. Shumaker, and C. S. Woodward, "SUNDIALS, Suite of Nonlinear and 
+    Differential/Algebraic Equation Solvers," ACM Trans. Math. Softw., 
+    31(3), pp. 363-396, 2005.
+
+[4] P. N. Brown, A. C. Hindmarsh, and L. R. Petzold, Using Krylov Methods 
+    in the Solution of Large-Scale Differential-Algebraic Systems, 
+    SIAM J. Sci. Comp., 15 (1994), pp. 1467-1488.
+
+[5] P. N. Brown, A. C. Hindmarsh, and L. R. Petzold, Consistent Initial 
+    Condition Calculation for Differential-Algebraic Systems, 
+    SIAM J. Sci. Comp., 19 (1998), pp. 1495-1512.
+
+
+D. Releases
+-----------
+
+v. 2.9.0   - Sep. 2016
+v. 2.8.2   - Aug. 2015
+v. 2.8.1   - Mar. 2015
+v. 2.8.0   - Mar. 2015
+v. 2.7.0   - Mar. 2012
+v. 2.6.0   - May  2009
+v. 2.5.0   - Nov. 2006
+v. 2.4.0   - Mar. 2006
+v. 2.3.0   - Apr. 2005
+v. 2.2.2   - Mar. 2005
+v. 2.2.1   - Jan. 2005
+v. 2.2.0   - Dec. 2004
+v. 2.0     - Jul. 2002 (first SUNDIALS release)
+v. 1.0     - Feb. 1999 (date written)
diff --git a/src/ida/fcmix/CMakeLists.txt b/src/ida/fcmix/CMakeLists.txt
new file mode 100644
index 0000000..1a4944b
--- /dev/null
+++ b/src/ida/fcmix/CMakeLists.txt
@@ -0,0 +1,61 @@
+# CMakeLists.txt file for the FIDA library
+
+# Add variable fida_SOURCES with the sources for the FIDA library
+SET(fida_SOURCES
+  fidaband.c
+  fidabbd.c
+  fida.c
+  fidadense.c
+  fidaewt.c
+  fidajtimes.c
+  fidapreco.c
+  fidaroot.c
+  )
+
+IF(LAPACK_FOUND)
+  SET(fida_BL_SOURCES fidalapack.c fidalapdense.c fidalapband.c)
+ELSE(LAPACK_FOUND)
+  SET(fida_BL_SOURCES "")
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND OR SUPERLUMT_FOUND)
+  SET(fida_SPARSE_SOURCES fidasparse.c)
+ELSE(SPARSE_FOUND)
+  SET(fida_SPARSE_SOURCES "")
+ENDIF(KLU_FOUND OR SUPERLUMT_FOUND)
+ 
+IF(KLU_FOUND)
+  SET(fida_KLU_SOURCES fidaklu.c)
+ELSE(KLU_FOUND)
+  SET(fida_KLU_SOURCES "")
+ENDIF(KLU_FOUND)
+ 
+IF(SUPERLUMT_FOUND)
+  SET(fida_SUPERLUMT_SOURCES fidasuperlumt.c)
+ELSE(SUPERLUMT_FOUND)
+  SET(fida_SUPERLUMT_SOURCES "")
+ENDIF(SUPERLUMT_FOUND)
+
+# Add source directories to include directories for access to
+# implementation only header files (both for fida and ida)
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(..)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Only build STATIC libraries (we cannot build shared libraries 
+# for the FCMIX interfaces due to unresolved symbol errors 
+# coming from inexistent user-provided functions)
+
+# Add the build target for the FIDA library
+ADD_LIBRARY(sundials_fida_static STATIC ${fida_SOURCES} ${fida_BL_SOURCES} ${fida_SPARSE_SOURCES} ${fida_KLU_SOURCES} ${fida_SUPERLUMT_SOURCES})
+
+# Set the library name and make sure it is not deleted
+SET_TARGET_PROPERTIES(sundials_fida_static
+  PROPERTIES OUTPUT_NAME sundials_fida CLEAN_DIRECT_OUTPUT 1)
+
+# Install the FIDA library
+INSTALL(TARGETS sundials_fida_static DESTINATION lib)
+#
+MESSAGE(STATUS "Added IDA FCMIX module")
diff --git a/src/ida/fcmix/fida.c b/src/ida/fcmix/fida.c
new file mode 100644
index 0000000..e504d19
--- /dev/null
+++ b/src/ida/fcmix/fida.c
@@ -0,0 +1,771 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4825 $
+ * $Date: 2016-07-26 15:56:58 -0700 (Tue, 26 Jul 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the Fortran interface to
+ * the IDA package. See fida.h for usage.
+ * NOTE: Some routines are necessarily stored elsewhere to avoid
+ * linking problems.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "fida.h"            /* function names, prototypes, global variables   */
+#include "ida_impl.h"        /* definition of IDAMem type                      */
+
+#include <ida/ida_band.h>    /* prototypes for IDABAND interface routines      */
+#include <ida/ida_dense.h>   /* prototypes for IDADENSE interface routines     */
+#include <ida/ida_klu.h>     /* prototypes for IDAKLU interface routines       */
+#include <ida/ida_superlumt.h> /* prototypes for IDASUPERLUMT interface routines */
+#include <ida/ida_sptfqmr.h> /* prototypes for IDASPTFQMR interface routines   */
+#include <ida/ida_spbcgs.h>  /* prototypes for IDASPBCG interface routines     */
+#include <ida/ida_spgmr.h>   /* prototypes for IDASPGMR interface routines     */
+
+/*************************************************/
+
+/* Definitions for global variables shared amongst various routines */
+
+N_Vector F2C_IDA_ypvec, F2C_IDA_ewtvec;
+
+void *IDA_idamem;
+long int *IDA_iout;
+realtype *IDA_rout;
+int IDA_ls;
+int IDA_nrtfn;
+
+/*************************************************/
+
+/* private constant(s) */
+#define ZERO RCONST(0.0)
+
+/*************************************************/
+
+/* Prototype of user-supplied Fortran routine (IDAResFn) */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FIDA_RESFUN(realtype*,    /* T    */
+                          realtype*,    /* Y    */
+                          realtype*,    /* YP   */
+                          realtype*,    /* R    */
+                          long int*,    /* IPAR */
+                          realtype*,    /* RPAR */
+                          int*);        /* IER  */
+
+#ifdef __cplusplus
+}
+#endif
+
+/*************************************************/
+
+void FIDA_MALLOC(realtype *t0, realtype *yy0, realtype *yp0,
+                 int *iatol, realtype *rtol, realtype *atol,
+                 long int *iout, realtype *rout, 
+                 long int *ipar, realtype *rpar,
+                 int *ier)
+{
+  N_Vector Vatol;
+  FIDAUserData IDA_userdata;
+
+  *ier = 0;
+
+  /* Check for required vector operations */
+  if ((F2C_IDA_vec->ops->nvgetarraypointer == NULL) ||
+      (F2C_IDA_vec->ops->nvsetarraypointer == NULL)) {
+    *ier = -1;
+    printf("A required vector operation is not implemented.\n\n");
+    return;
+  }
+
+  /* Initialize all pointers to NULL */
+  IDA_idamem = NULL;
+  Vatol = NULL;
+  F2C_IDA_ypvec = F2C_IDA_ewtvec = NULL;
+
+  /* Create IDA object */
+  IDA_idamem = IDACreate();
+  if (IDA_idamem == NULL) {
+    *ier = -1;
+    return;
+  }
+
+  /* Set and attach user data */
+  IDA_userdata = NULL;
+  IDA_userdata = (FIDAUserData) malloc(sizeof *IDA_userdata);
+  if (IDA_userdata == NULL) {
+    *ier = -1;
+    return;
+  }
+  IDA_userdata->rpar = rpar;
+  IDA_userdata->ipar = ipar;
+
+  *ier = IDASetUserData(IDA_idamem, IDA_userdata);
+  if(*ier != IDA_SUCCESS) {
+    free(IDA_userdata); IDA_userdata = NULL;
+    *ier = -1;
+    return;
+  }
+
+  /* Attach user's yy0 to F2C_IDA_vec */
+  N_VSetArrayPointer(yy0, F2C_IDA_vec);
+
+  /* Create F2C_IDA_ypvec and attach user's yp0 to it */
+  F2C_IDA_ypvec = NULL;
+  F2C_IDA_ypvec = N_VCloneEmpty(F2C_IDA_vec);
+  if (F2C_IDA_ypvec == NULL) {
+    free(IDA_userdata); IDA_userdata = NULL;
+    *ier = -1;
+  }
+  N_VSetArrayPointer(yp0, F2C_IDA_ypvec);
+
+  /* Call IDAInit */
+  *ier = IDAInit(IDA_idamem, FIDAresfn, *t0, F2C_IDA_vec, F2C_IDA_ypvec);
+
+  /* Reset data pointers */
+  N_VSetArrayPointer(NULL, F2C_IDA_vec);
+  N_VSetArrayPointer(NULL, F2C_IDA_ypvec);
+
+  /* On failure, clean-up and exit */
+  if (*ier != IDA_SUCCESS) {
+    N_VDestroy(F2C_IDA_ypvec);
+    free(IDA_userdata); IDA_userdata = NULL;
+    *ier = -1;
+    return;
+  }
+
+  /* Set tolerances */
+  switch (*iatol) {
+  case 1:
+    *ier = IDASStolerances(IDA_idamem, *rtol, *atol);
+    break;
+  case 2:
+    Vatol = NULL;
+    Vatol= N_VCloneEmpty(F2C_IDA_vec);
+    if (Vatol == NULL) {
+      free(IDA_userdata); IDA_userdata = NULL;
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(atol, Vatol);
+    *ier = IDASVtolerances(IDA_idamem, *rtol, Vatol);
+    N_VDestroy(Vatol);
+    break;
+  }
+
+  /* On failure, clean-up and exit */
+  if (*ier != IDA_SUCCESS) {
+    free(IDA_userdata); IDA_userdata = NULL;
+    *ier = -1;
+    return;
+  }
+
+  /* Grab optional output arrays and store them in global variables */
+  IDA_iout = iout;
+  IDA_rout = rout;
+
+  /* Store the unit roundoff in rout for user access */
+  IDA_rout[5] = UNIT_ROUNDOFF;
+
+  /* Set F2C_IDA_ewtvec on NULL */
+  F2C_IDA_ewtvec = NULL;
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_REINIT(realtype *t0, realtype *yy0, realtype *yp0,
+                 int *iatol, realtype *rtol, realtype *atol,
+                 int *ier)
+{
+  N_Vector Vatol;
+
+  *ier = 0;
+
+  /* Initialize all pointers to NULL */
+  Vatol = NULL;
+
+  /* Attach user's yy0 to F2C_IDA_vec */
+  N_VSetArrayPointer(yy0, F2C_IDA_vec);
+
+  /* Attach user's yp0 to F2C_IDA_ypvec */
+  N_VSetArrayPointer(yp0, F2C_IDA_ypvec);
+
+  /* Call IDAReInit */
+  *ier = IDAReInit(IDA_idamem, *t0, F2C_IDA_vec, F2C_IDA_ypvec);
+
+  /* Reset data pointers */
+  N_VSetArrayPointer(NULL, F2C_IDA_vec);
+  N_VSetArrayPointer(NULL, F2C_IDA_ypvec);
+
+  /* On failure, exit */
+  if (*ier != IDA_SUCCESS) {
+    *ier = -1;
+    return;
+  }
+
+  /* Set tolerances */
+  switch (*iatol) {
+  case 1:
+    *ier = IDASStolerances(IDA_idamem, *rtol, *atol);
+    break;
+  case 2:
+    Vatol = NULL;
+    Vatol= N_VCloneEmpty(F2C_IDA_vec);
+    if (Vatol == NULL) {
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(atol, Vatol);
+    *ier = IDASVtolerances(IDA_idamem, *rtol, Vatol);
+    N_VDestroy(Vatol);
+    break;
+  }
+
+  /* On failure, exit */
+  if (*ier != IDA_SUCCESS) {
+    *ier = -1;
+    return;
+  }
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_SETIIN(char key_name[], long int *ival, int *ier)
+{
+  if (!strncmp(key_name,"MAX_ORD",7))
+    *ier = IDASetMaxOrd(IDA_idamem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_NSTEPS",10))
+    *ier = IDASetMaxNumSteps(IDA_idamem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_ERRFAIL",11))
+    *ier = IDASetMaxErrTestFails(IDA_idamem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_NITERS",10))
+    *ier = IDASetMaxNonlinIters(IDA_idamem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_CONVFAIL",12))
+    *ier = IDASetMaxConvFails(IDA_idamem, (int) *ival);
+  else if (!strncmp(key_name,"SUPPRESS_ALG",12))
+    *ier = IDASetSuppressAlg(IDA_idamem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_NSTEPS_IC",13))
+    *ier = IDASetMaxNumStepsIC(IDA_idamem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_NITERS_IC",13)) 
+    *ier = IDASetMaxNumItersIC(IDA_idamem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_NJE_IC",10))
+    *ier = IDASetMaxNumJacsIC(IDA_idamem, (int) *ival);
+  else if (!strncmp(key_name,"LS_OFF_IC",9))
+    *ier = IDASetLineSearchOffIC(IDA_idamem, (int) *ival);
+  else {
+    *ier = -99;
+    printf("FIDASETIIN: Unrecognized key.\n\n");
+  }
+
+}
+
+/***************************************************************************/
+
+void FIDA_SETRIN(char key_name[], realtype *rval, int *ier)
+{
+
+  if (!strncmp(key_name,"INIT_STEP",9))
+    *ier = IDASetInitStep(IDA_idamem, *rval);
+  else if (!strncmp(key_name,"MAX_STEP",8))
+    *ier = IDASetMaxStep(IDA_idamem, *rval);
+  else if (!strncmp(key_name,"STOP_TIME",9))
+    *ier = IDASetStopTime(IDA_idamem, *rval);
+  else if (!strncmp(key_name,"NLCONV_COEF_IC",14))
+    *ier = IDASetNonlinConvCoefIC(IDA_idamem, *rval);
+  else if (!strncmp(key_name,"NLCONV_COEF",11))
+    *ier = IDASetNonlinConvCoef(IDA_idamem, *rval);
+  else if (!strncmp(key_name,"STEP_TOL_IC",11))
+    *ier = IDASetStepToleranceIC(IDA_idamem, *rval);
+  else {
+    *ier = -99;
+    printf("FIDASETRIN: Unrecognized key.\n\n");
+  }
+
+}
+
+/*************************************************/
+
+void FIDA_SETVIN(char key_name[], realtype *vval, int *ier)
+{
+  N_Vector Vec;
+
+  *ier = 0;
+
+  if (!strncmp(key_name,"ID_VEC",6)) {
+    Vec = NULL;
+    Vec = N_VCloneEmpty(F2C_IDA_vec);
+    if (Vec == NULL) {
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(vval, Vec);
+    IDASetId(IDA_idamem, Vec);
+    N_VDestroy(Vec);
+  } else if (!strncmp(key_name,"CONSTR_VEC",10)) {
+    Vec = NULL;
+    Vec = N_VCloneEmpty(F2C_IDA_vec);
+    if (Vec == NULL) {
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(vval, Vec);
+    IDASetConstraints(IDA_idamem, Vec);
+    N_VDestroy(Vec);
+  } else {
+    *ier = -99;
+    printf("FIDASETVIN: Unrecognized key.\n\n");
+  }
+
+}
+
+/*************************************************/
+
+void FIDA_TOLREINIT(int *iatol, realtype *rtol, realtype *atol, int *ier)
+{
+  N_Vector Vatol=NULL;
+
+  *ier = 0;
+
+  if (*iatol == 1) {
+    *ier = IDASStolerances(IDA_idamem, *rtol, *atol);
+  } else {
+    Vatol = NULL;
+    Vatol = N_VCloneEmpty(F2C_IDA_vec);
+    if (Vatol == NULL) {
+      *ier = -1;
+      return;
+    }
+    N_VSetArrayPointer(atol, Vatol);
+    *ier = IDASVtolerances(IDA_idamem, *rtol, Vatol);
+    N_VDestroy(Vatol);
+  }
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_CALCIC(int *icopt, realtype *tout1, int *ier)
+{
+  *ier = 0;
+  *ier = IDACalcIC(IDA_idamem, *icopt, *tout1);
+  return;
+}
+
+/*************************************************/
+
+void FIDA_SPTFQMR(int *maxl, realtype *eplifac, realtype *dqincfac, int *ier)
+{
+
+  *ier = 0;
+
+  *ier = IDASptfqmr(IDA_idamem, *maxl);
+  if (*ier != IDASPILS_SUCCESS) return;
+
+  if (*eplifac != ZERO) {
+    *ier = IDASpilsSetEpsLin(IDA_idamem, *eplifac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*dqincfac != ZERO) {
+    *ier = IDASpilsSetIncrementFactor(IDA_idamem, *dqincfac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  IDA_ls = IDA_LS_SPTFQMR;
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_SPBCG(int *maxl, realtype *eplifac, realtype *dqincfac, int *ier)
+{
+
+  *ier = 0;
+
+  *ier = IDASpbcg(IDA_idamem, *maxl);
+  if (*ier != IDASPILS_SUCCESS) return;
+
+  if (*eplifac != ZERO) {
+    *ier = IDASpilsSetEpsLin(IDA_idamem, *eplifac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*dqincfac != ZERO) {
+    *ier = IDASpilsSetIncrementFactor(IDA_idamem, *dqincfac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  IDA_ls = IDA_LS_SPBCG;
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_SPGMR(int *maxl, int *gstype, int *maxrs,
+		realtype *eplifac, realtype *dqincfac, int *ier)
+{
+
+  *ier = 0;
+
+  *ier = IDASpgmr(IDA_idamem, *maxl);
+  if (*ier != IDASPILS_SUCCESS) return;
+
+  if (*gstype != 0) {
+    *ier = IDASpilsSetGSType(IDA_idamem, *gstype);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*maxrs != 0) {
+    *ier = IDASpilsSetMaxRestarts(IDA_idamem, *maxrs);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*eplifac != ZERO) {
+    *ier = IDASpilsSetEpsLin(IDA_idamem, *eplifac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*dqincfac != ZERO) {
+    *ier = IDASpilsSetIncrementFactor(IDA_idamem, *dqincfac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  IDA_ls = IDA_LS_SPGMR;
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_DENSE(long int *neq, int *ier)
+{
+
+  *ier = 0;
+
+  *ier = IDADense(IDA_idamem, *neq);
+
+  IDA_ls = IDA_LS_DENSE;
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_BAND(long int *neq, long int *mupper, long int *mlower, int *ier)
+{
+
+  *ier = 0;
+
+  *ier = IDABand(IDA_idamem, *neq, *mupper, *mlower);
+
+  IDA_ls = IDA_LS_BAND;
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_SPTFQMRREINIT(int *maxl, realtype *eplifac, realtype *dqincfac, int *ier)
+{
+
+  *ier = 0;
+
+  if (*maxl > 0) {
+    *ier = IDASpilsSetMaxl(IDA_idamem, *maxl);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*eplifac != ZERO) {
+    *ier = IDASpilsSetEpsLin(IDA_idamem, *eplifac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*dqincfac != ZERO) {
+    *ier = IDASpilsSetIncrementFactor(IDA_idamem, *dqincfac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  IDA_ls = IDA_LS_SPTFQMR;
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_SPBCGREINIT(int *maxl, realtype *eplifac, realtype *dqincfac, int *ier)
+{
+
+  *ier = 0;
+
+  if (*maxl > 0) {
+    *ier = IDASpilsSetMaxl(IDA_idamem, *maxl);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*eplifac != ZERO) {
+    *ier = IDASpilsSetEpsLin(IDA_idamem, *eplifac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*dqincfac != ZERO) {
+    *ier = IDASpilsSetIncrementFactor(IDA_idamem, *dqincfac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  IDA_ls = IDA_LS_SPBCG;
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_SPGMRREINIT(int *gstype, int *maxrs, realtype *eplifac,
+		      realtype *dqincfac, int *ier)
+{
+
+  *ier = 0;
+
+  if (*gstype != 0) {
+    *ier = IDASpilsSetGSType(IDA_idamem, *gstype);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*maxrs != 0) {
+    *ier = IDASpilsSetMaxRestarts(IDA_idamem, *maxrs);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*eplifac != ZERO) {
+    *ier = IDASpilsSetEpsLin(IDA_idamem, *eplifac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  if (*dqincfac != ZERO) {
+    *ier = IDASpilsSetIncrementFactor(IDA_idamem, *dqincfac);
+    if (*ier != IDASPILS_SUCCESS) return;
+  }
+
+  IDA_ls = IDA_LS_SPGMR;
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_SOLVE(realtype *tout, realtype *tret, realtype *yret,
+		realtype *ypret, int *itask, int *ier)
+{
+  int klast, kcur;
+
+  *ier = 0;
+
+  /* Attach user data to vectors */
+  N_VSetArrayPointer(yret, F2C_IDA_vec);
+  N_VSetArrayPointer(ypret, F2C_IDA_ypvec);
+
+  *ier = IDASolve(IDA_idamem, *tout, tret, F2C_IDA_vec, F2C_IDA_ypvec, *itask);
+
+  /* Reset data pointers */
+  N_VSetArrayPointer(NULL, F2C_IDA_vec);
+  N_VSetArrayPointer(NULL, F2C_IDA_ypvec);
+
+  /* Set optional outputs */
+
+  IDAGetWorkSpace(IDA_idamem,
+                  &IDA_iout[0],                 /* LENRW */
+                  &IDA_iout[1]);                /* LENIW */
+
+  IDAGetIntegratorStats(IDA_idamem,
+                        &IDA_iout[2],           /* NST */
+                        &IDA_iout[3],           /* NRE */
+                        &IDA_iout[7],           /* NSETUPS */
+                        &IDA_iout[4],           /* NETF */
+                        &klast,                 /* KLAST */
+                        &kcur,                  /* KCUR */
+                        &IDA_rout[0],           /* HINUSED */
+                        &IDA_rout[1],           /* HLAST */
+                        &IDA_rout[2],           /* HCUR */
+                        &IDA_rout[3]);          /* TCUR */
+  IDA_iout[8] = (long int) klast;
+  IDA_iout[9] = (long int) kcur;
+  IDAGetNonlinSolvStats(IDA_idamem,
+                        &IDA_iout[6],           /* NNI */
+                        &IDA_iout[5]);          /* NCFN */
+  IDAGetNumBacktrackOps(IDA_idamem, 
+                        &IDA_iout[10]);         /* NBCKTRK */
+  IDAGetTolScaleFactor(IDA_idamem,    
+                       &IDA_rout[4]);           /* TOLSFAC */
+  
+  /* Root finding is on */
+  if (IDA_nrtfn != 0)
+    IDAGetNumGEvals(IDA_idamem, &IDA_iout[11]); /* NGE */
+  
+  switch(IDA_ls) {
+  case IDA_LS_DENSE:
+  case IDA_LS_BAND:
+  case IDA_LS_LAPACKDENSE:
+  case IDA_LS_LAPACKBAND:
+    IDADlsGetWorkSpace(IDA_idamem, &IDA_iout[12], &IDA_iout[13]);   /* LENRWLS, LENIWLS */
+    IDADlsGetLastFlag(IDA_idamem, &IDA_iout[14]);                   /* LSTF */
+    IDADlsGetNumResEvals(IDA_idamem, &IDA_iout[15]);                /* NRE */
+    IDADlsGetNumJacEvals(IDA_idamem, &IDA_iout[16]);                /* NJE */
+    break;
+  case IDA_LS_KLU:
+  case IDA_LS_SUPERLUMT:
+    IDASlsGetLastFlag(IDA_idamem, &IDA_iout[14]);                  /* LSTF  */
+    IDASlsGetNumJacEvals(IDA_idamem, &IDA_iout[16]);               /* NJE   */
+    break;
+  case IDA_LS_SPGMR:
+  case IDA_LS_SPBCG:
+  case IDA_LS_SPTFQMR:
+    IDASpilsGetWorkSpace(IDA_idamem, &IDA_iout[12], &IDA_iout[13]); /* LENRWLS, LENIWLS */
+    IDASpilsGetLastFlag(IDA_idamem, &IDA_iout[14]);                 /* LSTF */
+    IDASpilsGetNumResEvals(IDA_idamem, &IDA_iout[15]);              /* NRE */
+    IDASpilsGetNumJtimesEvals(IDA_idamem, &IDA_iout[16]);           /* NJE */
+    IDASpilsGetNumPrecEvals(IDA_idamem, &IDA_iout[17]);             /* NPE */
+    IDASpilsGetNumPrecSolves(IDA_idamem, &IDA_iout[18]);            /* NPS */
+    IDASpilsGetNumLinIters(IDA_idamem, &IDA_iout[19]);              /* NLI */
+    IDASpilsGetNumConvFails(IDA_idamem, &IDA_iout[20]);             /* NCFL */
+    break;
+  }
+
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_GETDKY(realtype *t, int *k, realtype *dky, int *ier)
+{
+  /* Store existing F2C_IDA_vec data pointer */
+  realtype *f2c_data = N_VGetArrayPointer(F2C_IDA_vec);
+
+  /* Attach user data to vectors */
+  N_VSetArrayPointer(dky, F2C_IDA_vec);
+
+  *ier = 0;
+  *ier = IDAGetDky(IDA_idamem, *t, *k, F2C_IDA_vec);
+
+  /* Reset data pointers */
+  N_VSetArrayPointer(f2c_data, F2C_IDA_vec);
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_GETERRWEIGHTS(realtype *eweight, int *ier)
+{
+  /* Store existing F2C_IDA_vec data pointer */
+  realtype *f2c_data = N_VGetArrayPointer(F2C_IDA_vec);
+
+  /* Attach user data to vector */
+  N_VSetArrayPointer(eweight, F2C_IDA_vec);
+
+  *ier = 0;
+  *ier = IDAGetErrWeights(IDA_idamem, F2C_IDA_vec);
+
+  /* Reset data pointer */
+  N_VSetArrayPointer(f2c_data, F2C_IDA_vec);
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_GETESTLOCALERR(realtype *ele, int *ier)
+{
+  /* Store existing F2C_IDA_vec data pointer */
+  realtype *f2c_data = N_VGetArrayPointer(F2C_IDA_vec);
+
+  /* Attach user data to vector */
+  N_VSetArrayPointer(ele, F2C_IDA_vec);
+
+  *ier = 0;
+  *ier = IDAGetEstLocalErrors(IDA_idamem, F2C_IDA_vec);
+
+  /* Reset data pointers */
+  N_VSetArrayPointer(f2c_data, F2C_IDA_vec);
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_FREE(void)
+{
+  IDAMem ida_mem;
+
+  ida_mem = (IDAMem) IDA_idamem;
+
+  free(ida_mem->ida_user_data); ida_mem->ida_user_data = NULL;
+
+  IDAFree(&IDA_idamem);
+
+  /* Free F2C_IDA_vec */
+  N_VSetArrayPointer(NULL, F2C_IDA_vec);
+  N_VDestroy(F2C_IDA_vec);
+
+  /* Free F2C_IDA_ypvec */
+  N_VSetArrayPointer(NULL, F2C_IDA_ypvec);
+  N_VDestroy(F2C_IDA_ypvec);
+
+  /* Free F2C_IDA_ewtvec */
+  if (F2C_IDA_ewtvec != NULL) 
+    N_VDestroy(F2C_IDA_ewtvec);
+
+  return;
+}
+
+/*************************************************/
+
+int FIDAresfn(realtype t, N_Vector yy, N_Vector yp,
+	      N_Vector rr, void *user_data)
+{
+  int ier;
+  realtype *yy_data, *yp_data, *rr_data;
+  FIDAUserData IDA_userdata;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  /* Get pointers to vector data */
+  yy_data = N_VGetArrayPointer(yy);
+  yp_data = N_VGetArrayPointer(yp);
+  rr_data = N_VGetArrayPointer(rr);
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine */
+  FIDA_RESFUN(&t, yy_data, yp_data, rr_data, 
+              IDA_userdata->ipar, IDA_userdata->rpar, &ier);
+
+  return(ier);
+}
diff --git a/src/ida/fcmix/fida.h b/src/ida/fcmix/fida.h
new file mode 100644
index 0000000..f2281ad
--- /dev/null
+++ b/src/ida/fcmix/fida.h
@@ -0,0 +1,915 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4795 $
+ * $Date: 2016-07-01 15:10:25 -0700 (Fri, 01 Jul 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ *                Daniel R. Reynolds @ SMU
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for FIDA, the Fortran interface to
+ * the IDA package.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * =============================================================================
+ *
+ *                  FIDA Interface Package
+ *
+ * The FIDA Interface Package is a package of C functions which support
+ * the use of the IDA solver, for the solution of DAE systems, in a
+ * mixed Fortran/C setting.  While IDA is written in C, it is assumed
+ * here that the user's calling program and user-supplied problem-defining
+ * routines are written in Fortran.  This package provides the necessary
+ * interface to IDA for both the serial and the parallel NVECTOR
+ * implementations.
+ *
+ * The user-callable functions, with the corresponding IDA functions,
+ * are as follows:
+ *
+ *   FNVINITS* and FNVINITP*  interface to N_VNew_Serial and
+ *                            N_VNew_Parallel, respectively
+ *   FNVINITOMP               N_VNew_OpenMP
+ *   FNVINITPTS               N_VNew_Pthreads
+ *
+ *   FIDAMALLOC  interfaces to IDACreate and IDAInit
+ *
+ *   FIDAREINIT  interfaces to IDAReInit
+ *
+ *   FIDASETIIN, FIDASETRIN, FIDASETVIN interface to IDASet*
+ *
+ *   FIDATOLREINIT  interfaces to IDASetTolerances
+ *
+ *   FIDACALCIC  interfaces to IDACalcIC
+ *
+ *   FIDAEWTSET  interfaces to IDAWFtolerances
+ *
+ *   FIDADENSE        interfaces to IDADense
+ *   FIDADENSESETJAC  interfaces to IDADenseSetJacFn
+ *
+ *   FIDABAND        interfaces to IDABand
+ *   FIDABANDSETJAC  interfaces to IDABandSetJacFn
+ *
+ *   FIDAKLU         interfaces to IDAKLU
+ *   FIDAKLUReinit   interfaces to IDAKLUReinit
+ *   FIDASUPERLUMT   interfaces to IDASuperLUMT
+ *   FIDASPARSESETJAC    interfaces to IDASlsSetSparseJacFn
+ *
+ *   FIDASPTFQMR/FIDASPTFQMRREINIT  interface to IDASptfqmr and IDASptfqmrSet*
+ *   FIDASPBCG/FIDASPBCGREINIT      interface to IDASpbcg and IDASpbcgSet*
+ *   FIDASPGMR/FIDASPGMRREINIT      interface to IDASpgmr and IDASpgmrSet*
+ *   FIDASPILSSETJAC                interfaces to IDASpilsSetJacFn
+ *   FIDASPILSSETPREC               interfaces to IDASpilsSetPreconditioner
+ *
+ *   FIDASOLVE  interfaces to IDASolve, IDAGet*, and IDA*Get*
+ *
+ *   FIDAGETDKY  interfaces to IDAGetDky
+ *
+ *   FIDAGETERRWEIGHTS  interfaces to IDAGetErrWeights
+ *
+ *   FIDAGETESTLOCALERR  interfaces to IDAGetEstLocalErrors
+ *
+ *   FIDAFREE  interfaces to IDAFree
+ *
+ * The user-supplied functions, each listed with the corresponding interface
+ * function which calls it (and its type within IDA), are as follows:
+ *   FIDARESFUN is called by the interface function FIDAresfn of type IDAResFn
+ *   FIDADJAC   is called by the interface fn. FIDADenseJac of type IDADenseJacFn
+ *   FIDABJAC   is called by the interface fn. FIDABandJac of type IDABandJacFn
+ *   FIDAPSOL   is called by the interface fn. FIDAPSol of type IDASpilsPrecSolveFn
+ *   FIDAPSET   is called by the interface fn. FIDAPSet of type IDASpilsPrecSetupFn
+ *   FIDAJTIMES is called by interface fn. FIDAJtimes of type IDASpilsJacTimesVecFn
+ *   FIDASPJAC  is called by interface fn. FIDASparseJac of type IDASlsSparseJacFn
+ *   FIDAEWT    is called by interface fn. FIDAEwtSet of type IDAEwtFn
+ * In contrast to the case of direct use of IDA, the names of all user-supplied
+ * routines here are fixed, in order to maximize portability for the resulting
+ * mixed-language program.
+ *
+ * Important note on portability:
+ * In this package, the names of the interface functions, and the names of
+ * the Fortran user routines called by them, appear as dummy names
+ * which are mapped to actual values by a series of definitions in the
+ * header file fida.h.
+ *
+ * =============================================================================
+ *
+ *                  Usage of the FIDA Interface Package
+ *
+ * The usage of FIDA requires calls to a few different interface
+ * functions, depending on the method options selected, and one or more
+ * user-supplied routines which define the problem to be solved.  These
+ * function calls and user routines are summarized separately below.
+ *
+ * Some details are omitted, and the user is referred to the user documents
+ * on IDA for more complete documentation.  Information on the
+ * arguments of any given user-callable interface routine, or of a given
+ * user-supplied function called by an interface function, can be found in
+ * the documentation on the corresponding function in the IDA package.
+ *
+ * The number labels on the instructions below end with s for instructions
+ * that apply to the serial version of IDA only, and end with p for
+ * those that apply to the parallel version only.
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * (1) User-supplied residual routine: FIDARESFUN
+ * The user must in all cases supply the following Fortran routine
+ *       SUBROUTINE FIDARESFUN(T, Y, YP, R, IPAR, RPAR, IER)
+ *       DIMENSION Y(*), YP(*), R(*), IPAR(*), RPAR(*)
+ * It must set the R array to F(t,y,y'), the residual of the DAE 
+ * system, as a function of T = t, the array Y = y, and the array YP = y'.
+ * Here Y, YP and R are distributed vectors. 
+ * IPAR and RPAR are arrays of integer and real user data, respectively,
+ * as passed to FIDAMALLOC.
+ *
+ * (2s) Optional user-supplied dense Jacobian approximation routine: FIDADJAC
+ * As an option when using the DENSE linear solver, the user may supply a
+ * routine that computes a dense approximation of the system Jacobian 
+ * J = df/dy. If supplied, it must have the following form:
+ *       SUBROUTINE FIDADJAC(NEQ, T, Y, YP, R, DJAC, CJ, EWT, H,
+ *      1                    IPAR, RPAR, WK1, WK2, WK3, IER)
+ *       DIMENSION Y(*), YP(*), R(*), EWT(*), DJAC(NEQ,*),
+ *      1          IPAR(*), RPAR(*), WK1(*), WK2(*), WK3(*)
+ * This routine must compute the Jacobian and store it columnwise in DJAC.
+ * IPAR and RPAR are user (integer and real) arrays passed to FIDAMALLOC.
+ *
+ * (3s) Optional user-supplied band Jacobian approximation routine: FIDABJAC
+ * As an option when using the BAND linear solver, the user may supply a
+ * routine that computes a band approximation of the system Jacobian 
+ * J = df/dy. If supplied, it must have the following form:
+ *       SUBROUTINE FIDABJAC(NEQ, MU, ML, MDIM, T, Y, YP, R, CJ,
+ *      1                    BJAC, EWT, H, IPAR, RPAR, WK1, WK2, WK3, IER)
+ *       DIMENSION Y(*), YP(*), R(*), EWT(*), BJAC(MDIM,*),
+ *      1          IPAR(*), RPAR(*), WK1(*), WK2(*), WK3(*)
+ * This routine must load the MDIM by N array BJAC with the Jacobian matrix at the
+ * current (t,y,y') in band form.  Store in BJAC(k,j) the Jacobian element J(i,j)
+ * with k = i - j + MU + 1 (k = 1 ... ML+MU+1) and j = 1 ... N.
+ * IPAR and RPAR are user (integer and real) arrays passed to FIDAMALLOC.
+ *
+ * (4) Optional user-supplied Jacobian-vector product routine: FIDAJTIMES
+ * As an option when using the SPGMR/SPBCG/SPTFQMR linear solver, the user may
+ * supply a routine that computes the product of the system Jacobian J = df/dy
+ * and a given vector v.  If supplied, it must have the following form:
+ *       SUBROUTINE FIDAJTIMES(T, Y, YP, R, V, FJV, CJ, EWT, H, 
+ *      1                      IPAR, RPAR, WK1, WK2, IER)
+ *       DIMENSION V(*), FJV(*), Y(*), YP(*), R(*), EWT(*),
+ *      1          IPAR(*), RPAR(*), WK1(*), WK2(*)
+ * This routine must compute the product vector Jv, where the vector v is stored
+ * in V, and store the product in FJV.  On return, set IER = 0 if FIDAJTIMES was
+ * successful, and nonzero otherwise.
+ * IPAR and RPAR are user (integer and real) arrays passed to FIDAMALLOC.
+ *
+ * (5s) User-supplied sparse Jacobian approximation routine: FIDASPJAC
+ *
+ * Required when using the IDAKLU or IDASuperLUMT linear solvers, the 
+ * user must supply a routine that computes a compressed-sparse-column [or 
+ * compressed-sparse-row] approximation of the system Jacobian 
+ * J = dF/dy' + c_j*dF/dy.  If supplied, it must have the following form:
+ *
+ *       SUBROUTINE FIDASPJAC(T, CJ, Y, YP, R, N, NNZ, JDATA, JRVALS, 
+ *      &                    JCPTRS, H, IPAR, RPAR, WK1, WK2, WK3, IER)
+ *
+ * It must load the N by N compressed sparse column [row] matrix 
+ * with storage for NNZ nonzeros, stored in the arrays JDATA (nonzero
+ * values), JRVALS (row [column] indices for each nonzero), JCOLPTRS (indices 
+ * for start of each column [row]), with the Jacobian matrix at the current
+ * (t,y) in CSC [CSR] form (see sundials_sparse.h for more information).
+ *
+ * The arguments are:
+ *         T    -- current time [realtype, input]
+ *         CJ   -- Scalar in the system Jacobian proportional 
+ *                 to inverse step size [realtype, input]
+ *         Y    -- array containing state variables [realtype, input]
+ *         YP   -- array containing state derivatives [realtype, input]
+ *         R    -- array containing system residual F(T, Y, YP) [realtype, input]
+ *         N    -- number of matrix rows/columns in Jacobian [int, input]
+ *         NNZ  -- allocated length of nonzero storage [int, input]
+ *        JDATA -- nonzero values in Jacobian
+ *                 [realtype of length NNZ, output]
+ *       JRVALS -- row [column] indices for each nonzero in Jacobian
+ *                  [int of length NNZ, output]
+ *       JCPTRS -- pointers to each Jacobian column [row] in preceding arrays
+ *                 [int of length N+1, output]
+ *         H    -- current step size [realtype, input]
+ *         IPAR -- array containing integer user data that was passed to
+ *                 FIDAMALLOC [long int, input]
+ *         RPAR -- array containing real user data that was passed to
+ *                 FIDAMALLOC [realtype, input]
+ *         WK*  -- array containing temporary workspace of same size as Y 
+ *                 [realtype, input]
+ *         IER  -- return flag [int, output]:
+ *                    0 if successful, 
+ *                   >0 if a recoverable error occurred,
+ *                   <0 if an unrecoverable error ocurred.
+ *
+ * (6) Optional user-supplied error weight vector routine: FIDAEWT
+ * As an option to providing the relative and absolute tolerances, the user
+ * may supply a routine that computes the weights used in the WRMS norms.
+ * If supplied, it must have the following form:
+ *       SUBROUTINE FIDAEWT(Y, EWT, IPAR, RPAR, IER)
+ *       DIMENSION Y(*), EWT(*)
+ * It must store the error weights in EWT, given the current solution vector Y.
+ * On return, set IER = 0 if successful, and nonzero otherwise.
+ * IPAR and RPAR are user (integer and real) arrays passed to FIDAMALLOC.
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * (7) Initialization:  FNVINITS/FNVINITP/FNVINITOMP/FNVINITPTS, 
+ *                      FIDAMALLOC, FIDAREINIT,
+ *                      FIDATOLREINIT, and FIDACALCIC
+ *
+ * (7.1s) To initialize the serial machine environment, the user must make
+ * the following call:
+ *        CALL FNVINITS(KEY, NEQ, IER)
+ * The arguments are:
+ * KEY = 2 for IDA
+ * NEQ = size of vectors
+ * IER = return completion flag. Values are 0 = success, -1 = failure.
+ *
+ * (7.1p) To initialize the distributed memory parallel machine environment, 
+ * the user must make one of the following calls:
+ *        CALL FNVINITP(KEY, NLOCAL, NGLOBAL, IER)
+ *                     -or-
+ *        CALL FNVINITP(COMM, KEY, NLOCAL, NGLOBAL, IER)
+ * The arguments are:
+ * COMM = MPI communicator (e.g., MPI_COMM_WORLD)
+ * KEY = 2 for IDA
+ * NLOCAL  = local size of vectors on this processor
+ * NGLOBAL = the system size, and the global size of vectors (the sum 
+ *           of all values of NLOCAL)
+ * IER     = return completion flag. Values are 0 = success, -1 = failure.
+ * NOTE: The COMM argument passed to the FNVINITP routine is only supported if
+ * the MPI implementation used to build SUNDIALS includes the MPI_Comm_f2c
+ * function from the MPI-2 specification.  To check if the function is supported
+ * look for the line "#define SUNDIALS_MPI_COMM_F2C 1" in the sundials_config.h
+ * header file.
+ *
+ (7.1omp) To initialize the openMP threaded vector kernel, 
+          the user must make the following call:
+
+          CALL FNVINITOMP (KEY, NEQ, NUM_THREADS, IER)
+
+        The arguments are:
+	  KEY = 2 for IDA
+          NEQ = size of vectors
+          NUM_THREADS = number of threads
+          IER = return completion flag. Values are 0 = success, -1 = failure.
+
+ (7.1pts) To initialize the Pthreads threaded vector kernel, 
+          the user must make the following call:
+
+          CALL FNVINITOMP (KEY, NEQ, NUM_THREADS, IER)
+
+        The arguments are:
+	  KEY = 2 for IDA
+          NEQ = size of vectors
+          NUM_THREADS = number of threads
+          IER = return completion flag. Values are 0 = success, -1 = failure.
+ *
+ * (7.2) To set various problem and solution parameters and allocate
+ * internal memory, make the following call:
+ *       CALL FIDAMALLOC(T0, Y0, YP0, IATOL, RTOL, ATOL, 
+ *      1                IOUT, ROUT, IPAR, RPAR, IER)
+ * The arguments are:
+ * T0    = initial value of t
+ * Y0    = array of initial conditions, y(t0)
+ * YP0   = value of y'(t0)
+ * IATOL = type for absolute tolerance ATOL: 1 = scalar, 2 = array.
+ *         If IATOL = 3, then the user must supply a routine FIDAEWT to compute
+ *         the error weight vector.
+ * RTOL  = relative tolerance (scalar)
+ * ATOL  = absolute tolerance (scalar or array)
+ * IOUT  = array of length at least 21 for integer optional outputs
+ *          (declare as INTEGER*4 or INTEGER*8 according to C type long int)
+ * ROUT  = array of length at least 6 for real optional outputs
+ * IPAR  = array with user integer data
+ *          (declare as INTEGER*4 or INTEGER*8 according to C type long int)
+ * RPAR  = array with user real data
+ * IER   = return completion flag.  Values are 0 = SUCCESS, and -1 = failure.
+ *         See printed message for details in case of failure.
+ *
+ * The user data arrays IPAR and RPAR are passed unmodified to all subsequent
+ * calls to user-provided routines. Modifications to either array inside a
+ * user-provided routine will be propagated. Using these two arrays, the user
+ * can dispense with Common blocks to pass data betwen user-provided routines.
+ * 
+ * The optional outputs are:
+ *           LENRW   = IOUT( 1) -> IDAGetWorkSpace
+ *           LENIW   = IOUT( 2) -> IDAGetWorkSpace
+ *           NST     = IOUT( 3) -> IDAGetNumSteps
+ *           NRE     = IOUT( 4) -> IDAGetNumResEvals
+ *           NETF    = IOUT( 5) -> IDAGetNumErrTestFails
+ *           NCFN    = IOUT( 6) -> IDAGetNumNonlinSolvConvFails
+ *           NNI     = IOUT( 7) -> IDAGetNumNonlinSolvIters
+ *           NSETUPS = IOUT( 8) -> IDAGetNumLinSolvSetups
+ *           KLAST   = IOUT( 9) -> IDAGetLastOrder
+ *           KCUR    = IOUT(10) -> IDAGetCurrentOrder
+ *           NBCKTRK = IOUT(11) -> IDAGetNumBacktrackOps
+ *           NGE     = IOUT(12) -> IDAGetNumGEvals
+ *
+ *           HINUSED = ROUT( 1) -> IDAGetActualInitStep
+ *           HLAST   = ROUT( 2) -> IDAGetLastStep
+ *           HCUR    = ROUT( 3) -> IDAGetCurrentStep
+ *           TCUR    = ROUT( 4) -> IDAGetCurrentTime
+ *           TOLSFAC = ROUT( 5) -> IDAGetTolScaleFactor
+ *           UNITRND = ROUT( 6) -> UNIT_ROUNDOFF
+ *
+ *
+ * If the user program includes the FIDAEWT routine for the evaluation of the 
+ * error weights, the following call must be made
+ *       CALL FIDAEWTSET(FLAG, IER)
+ * with FLAG = 1 to specify that FIDAEWT is provided.
+ * The return flag IER is 0 if successful, and nonzero otherwise.
+ *
+ * (7.3) To set various integer optional inputs, make the folowing call:
+ *       CALL FIDASETIIN(KEY, VALUE, IER)
+ * to set the optional input specified by the character key KEY to the 
+ * integer value VAL.
+ * KEY is one of the following: MAX_ORD, MAX_NSTEPS, MAX_ERRFAIL, MAX_NITERS, 
+ * MAX_CONVFAIL, SUPPRESS_ALG, MAX_NSTEPS_IC, MAX_NITERS_IC, MAX_NJE_IC, LS_OFF_IC.
+ *
+ * To set various real optional inputs, make the folowing call:
+ *       CALL FIDASETRIN(KEY, VALUE, IER)
+ * to set the optional input specified by the character key KEY to the
+ * real value VAL.
+ * KEY is one of the following: INIT_STEP, MAX_STEP, MIIN_STEP, STOP_TIME,
+ * NLCONV_COEF.
+ *
+ * To set the vector of variable IDs or the vector of constraints, make
+ * the following call:
+ *       CALL FIDASETVIN(KEY, ARRAY, IER)
+ * where ARRAY is an array of reals and KEY is 'ID_VEC' or 'CONSTR_VEC'.
+ *
+ * FIDASETIIN, FIDASETRIN, and FIDASETVIN return IER=0 if successful and 
+ * IER<0 if an error occured.
+ *
+ * (7.4) To re-initialize the FIDA solver for the solution of a new problem
+ * of the same size as one already solved, make the following call:
+ *       CALL FIDAREINIT(T0, Y0, YP0, IATOL, RTOL, ATOL, ID, CONSTR, IER)
+ * The arguments have the same names and meanings as those of FIDAMALLOC.
+ * FIDAREINIT performs the same initializations as FIDAMALLOC, but does no memory 
+ * allocation for IDA data structures, using instead the existing internal memory
+ * created by the previous FIDAMALLOC call.  The call to specify the linear system
+ * solution method may or may not be needed.  See below.
+ *
+ * (7.5) To modify the tolerance parameters, make the following call:
+ *       CALL FIDATOLREINIT(IATOL, RTOL, ATOL, IER)
+ * The arguments have the same names and meanings as those of FIDAMALLOC.
+ * FIDATOLREINIT simple calls IDASetTolerances with the given arguments.
+ *
+ * (7.6) To compute consistent initial conditions for an index-one DAE system,
+ * make the following call:
+ *       CALL FIDACALCIC(ICOPT, TOUT, IER)
+ * The arguments are:
+ * ICOPT = specifies the option: 1 = IDA_YP_YDP_INIT, 2 = IDA_Y_INIT.
+ *         (See user guide for additional details.)
+ * TOUT  = the first value of t at which a solution will be requested
+ *         (from FIDASOLVE).
+ * IER   = return completion flag.
+ * 
+ * -----------------------------------------------------------------------------
+ *
+ * (8) Specification of linear system solution method.
+ * FIDA presently includes four choices for the treatment of these systems,
+ * and the user of FIDA must call a routine with a specific name to make the
+ * desired choice.
+ * 
+ * (8.1s) DENSE treatment of the linear system.
+ * The user must make the call
+ *       CALL FIDADENSE(NEQ, IER)
+ * The arguments are:
+ * NEQ = size of vectors
+ * IER = error return flag: 0 = success , negative value = an error occured
+ * 
+ * If the user program includes the FIDADJAC routine for the evaluation of the 
+ * dense approximation to the Jacobian, the following call must be made
+ *       CALL FIDADENSESETJAC(FLAG, IER)
+ * with FLAG = 1 to specify that FIDADJAC is provided.  (FLAG = 0 specifies
+ * using the internal finite differences approximation to the Jacobian.)
+ * The return flag IER is 0 if successful, and nonzero otherwise.
+ * 
+ * Optional outputs specific to the DENSE case are:
+ *        LENRWLS = IOUT(13) -> IDADenseGetWorkSpace
+ *        LENIWLS = IOUT(14) -> IDADenseGetWorkSpace
+ *        LSTF    = IOUT(15) -> IDADenseGetLastFlag
+ *        NRELS   = IOUT(16) -> IDADenseGetNumResEvals
+ *        NJE     = IOUT(17) -> IDADenseGetNumJacEvals
+ *
+ * (8.2s) BAND treatment of the linear system
+ * The user must make the call
+ *       CALL FIDABAND(NEQ, MU, ML, IER)
+ * The arguments are:
+ * NEQ = size of vectors
+ * MU  = upper bandwidth
+ * ML  = lower bandwidth
+ * IER = error return flag: 0 = success , negative value = an error occured
+ * 
+ * If the user program includes the FIDABJAC routine for the evaluation of the 
+ * band approximation to the Jacobian, the following call must be made
+ *       CALL FIDABANDSETJAC (FLAG, IER)
+ * with FLAG = 1 to specify that FIDABJAC is provided.  (FLAG = 0 specifies
+ * using the internal finite differences approximation to the Jacobian.)
+ * The return flag IER is 0 if successful, and nonzero otherwise.
+ *
+ * Optional outputs specific to the BAND case are:
+ *        LENRWLS = IOUT(13) -> IDABandGetWorkSpace
+ *        LENIWLS = IOUT(14) -> IDABandGetWorkSpace
+ *        LSTF    = IOUT(15) -> IDABandGetLastFlag
+ *        NRELS   = IOUT(16) -> IDABandGetNumResEvals
+ *        NJE     = IOUT(17) -> IDABandGetNumJacEvals
+ *
+ *  (8.3s) SPARSE treatment of the linear system using the KLU solver.
+ *
+ *     The user must make the call
+ *
+ *       CALL FIDAKLU(NEQ, NNZ, SPARSETYPE, ORDERING, IER)
+ *
+ *     The arguments are:
+ *        NEQ = the problem size [int; input]
+ *        NNZ = the maximum number of nonzeros [int; input]
+ *        SPARSETYPE = choice between CSC and CSR format
+ *           (0 = CSC, 1 = CSR) [int; input]
+ *        ORDERING = the matrix ordering desired, possible values
+ *           come from the KLU package (0 = AMD, 1 = COLAMD) [int; input]
+ *        IER = error return flag [int, output]: 
+ *	         0 = success, 
+ *		 negative = error.
+ * 
+ *     When using the KLU solver the user must provide the FIDASPJAC routine for the 
+ *     evalution of the sparse approximation to the Jacobian. To indicate that this
+ *     routine has been provided, after the call to FIDAKLU, the following call must 
+ *     be made    
+ *
+ *       CALL FIDASPARSESETJAC(IER) 
+ *
+ *     The int return flag IER=0 if successful, and nonzero otherwise.
+ *
+ *  
+ *     The IDA KLU solver will reuse much of the factorization information from one
+ *     nonlinear iteration to the next.  If at any time the user wants to force a full
+ *     refactorization or if the number of nonzeros in the Jacobian matrix changes, the
+ *     user should make the call
+ *
+ *       CALL FIDAKLUREINIT(NEQ, NNZ, REINIT_TYPE)
+ *
+ *     The arguments are:
+ *        NEQ = the problem size [int; input]
+ *        NNZ = the maximum number of nonzeros [int; input]
+ *	REINIT_TYPE = 1 or 2.  For a value of 1, the matrix will be destroyed and 
+ *          a new one will be allocated with NNZ nonzeros.  For a value of 2, 
+ *	  only symbolic and numeric factorizations will be completed. 
+ * 
+ *     When using FIDAKLU, the user is required to supply the FIDASPJAC 
+ *     routine for the evaluation of the sparse approximation to the 
+ *     Jacobian, as discussed above with the other user-supplied routines.
+ * 
+ *     Optional outputs specific to the KLU case are:
+ *        LSTF    = IOUT(16) from IDASlsGetLastFlag
+ *        NJES    = IOUT(18) from IDASlsGetNumJacEvals
+ *     See the IDA manual for descriptions.
+ * 
+ * (8.4s) SPARSE treatment of the linear system using the SuperLUMT solver.
+ *
+ *     The user must make the call
+ *
+ *       CALL FIDASUPERLUMT(NTHREADS, NEQ, NNZ, ORDERING, IER)
+ *
+ *     The arguments are:
+ *        NTHREADS = desired number of threads to use [int; input]
+ *        NEQ = the problem size [int; input]
+ *        NNZ = the maximum number of nonzeros [int; input]
+ *	ORDERING = the matrix ordering desired, possible values
+ *	   come from the SuperLU_MT package [int; input]
+ *           0 = Natural
+ *           1 = Minimum degree on A^T A
+ *           2 = Minimum degree on A^T + A
+ *           3 = COLAMD
+ *	IER = error return flag [int, output]: 
+ *	         0 = success, 
+ *		 negative = error.
+ *	 
+ *     At this time, there is no reinitialization capability for the SUNDIALS 
+ *     interfaces to the SuperLUMT solver.
+ *
+ *     When using FIDASUPERLUMT, the user is required to supply the FIDASPJAC 
+ *     routine for the evaluation of the CSC approximation to the Jacobian (note: the 
+ *     current SuperLU_MT interface in SUNDIALS does not support CSR matrices). To 
+ *     indicate that this routine has been provided, after the call to FIDASUPERLUMT,
+ *     the following call must be made    
+ *
+ *       CALL FIDASPARSESETJAC(IER) 
+ *
+ *     The int return flag IER=0 if successful, and nonzero otherwise.
+ * 
+ *     Optional outputs specific to the SUPERLUMT case are:
+ *        LSTF    = IOUT(14) from IDASlsGetLastFlag
+ *        NJES    = IOUT(16) from IDASlsGetNumJacEvals
+ *     See the IDA manual for descriptions.
+ * 
+ * (8.5) SPGMR treatment of the linear systems.
+ * For the Scaled Preconditioned GMRES solution of the linear systems,
+ * the user must make the following call:
+ *       CALL FIDASPGMR(MAXL, IGSTYPE, MAXRS, EPLIFAC, DQINCFAC, IER)
+ * The arguments are:
+ * MAXL     = maximum Krylov subspace dimension; 0 indicates default.
+ * IGSTYPE  = specifies the type of Gram-Schmidt orthogonalization to be used:
+ *            1 = MODIFIED_GS, 2 = CLASSICAL_GS
+ * EPLIFAC  = factor in the linear iteration convergence test constant
+ * DQINCFAC = factor in the increments to y used in the difference quotient
+ *            approximations to the matrix-vector products Jv
+ * IER      = error return flag: 0 = success; negative value = an error occured
+ *
+ * Optional outputs specific to the SPGMR case are:
+ *        LENRWLS = IOUT(13) -> IDASpgmrGetWorkSpace
+ *        LENIWLS = IOUT(14) -> IDASpgmrGetWorkSpace
+ *        LSTF    = IOUT(15) -> IDASpgmrGetLastFlag
+ *        NRELS   = IOUT(16) -> IDASpgmrGetResEvals
+ *        NJE     = IOUT(17) -> IDASpgmrGetJtimesEvals
+ *        NPE     = IOUT(18) -> IDASpgmrGetPrecEvals
+ *        NPS     = IOUT(19) -> IDASpgmrGetPrecSolves
+ *        NLI     = IOUT(20) -> IDASpgmrGetLinIters
+ *        NLCF    = IOUT(21) -> IDASpgmrGetConvFails
+ *
+ * If a sequence of problems of the same size is being solved using the
+ * SPGMR linear solver, then following the call to FIDAREINIT, a call to the
+ * FIDASPGMRREINIT routine is needed if any of IGSTYPE, MAXRS, EPLIFAC, or
+ * DQINCFAC is being changed.  In that case, call FIDASPGMRREINIT as follows:
+ *       CALL FIDASPGMRREINIT (IGSTYPE, MAXRS, EPLIFAC, DQINCFAC, IER)              
+ * The arguments have the same meanings as for FIDASPGMR.  If MAXL is being
+ * changed, then call FIDASPGMR instead.
+ *
+ * (8.6) SPBCG treatment of the linear systems.
+ * For the Scaled Preconditioned Bi-CGSTAB solution of the linear systems,
+ * the user must make the following call:
+ *       CALL FIDASPBCG(MAXL, EPLIFAC, DQINCFAC, IER)              
+ * The arguments are:
+ * MAXL     = maximum Krylov subspace dimension; 0 indicates default.
+ * EPLIFAC  = factor in the linear iteration convergence test constant
+ * DQINCFAC = factor in the increments to y used in the difference quotient
+ *            approximations to matrix-vector products Jv
+ * IER      = error return flag: 0 = success; negative value = an error occured
+ *
+ * Optional outputs specific to the SPBCG case are:
+ *        LENRWLS = IOUT(13) -> IDASpbcgGetWorkSpace
+ *        LENIWLS = IOUT(14) -> IDASpbcgGetWorkSpace
+ *        LSTF    = IOUT(15) -> IDASpbcgGetLastFlag
+ *        NRELS   = IOUT(16) -> IDASpbcgGetResEvals
+ *        NJE     = IOUT(17) -> IDASpbcgGetJtimesEvals
+ *        NPE     = IOUT(18) -> IDASpbcgGetPrecEvals
+ *        NPS     = IOUT(19) -> IDASpbcgGetPrecSolves
+ *        NLI     = IOUT(20) -> IDASpbcgGetLinIters
+ *        NLCF    = IOUT(21) -> IDASpbcgGetConvFails
+ *
+ *      If a sequence of problems of the same size is being solved using the
+ * SPBCG linear solver, then following the call to FIDAREINIT, a call to the
+ * FIDASPBCGREINIT routine is needed if MAXL, EPLIFAC, or DQINCFAC is
+ * being changed.  In that case, call FIDASPBCGREINIT as follows:
+ *       CALL FIDASPBCGREINIT(MAXL, EPLIFAC, DQINCFAC, IER)
+ * The arguments have the same meanings as for FIDASPBCG.
+ *
+ * (8.7) SPTFQMR treatment of the linear systems.
+ * For the Scaled Preconditioned TFQMR solution of the linear systems,
+ * the user must make the following call:
+ *       CALL FIDASPTFQMR(MAXL, EPLIFAC, DQINCFAC, IER)              
+ * The arguments are:
+ * MAXL     = maximum Krylov subspace dimension; 0 indicates default.
+ * EPLIFAC  = factor in the linear iteration convergence test constant
+ * DQINCFAC = factor in the increments to y used in the difference quotient
+ *            approximations to matrix-vector products Jv
+ * IER      = error return flag: 0 = success; negative value = an error occured
+ *
+ * Optional outputs specific to the SPTFQMR case are:
+ *        LENRWLS = IOUT(13) -> IDASptfqmrGetWorkSpace
+ *        LENIWLS = IOUT(14) -> IDASptfqmrGetWorkSpace
+ *        LSTF    = IOUT(15) -> IDASptfqmrGetLastFlag
+ *        NRELS   = IOUT(16) -> IDASptfqmrGetResEvals
+ *        NJE     = IOUT(17) -> IDASptfqmrGetJtimesEvals
+ *        NPE     = IOUT(18) -> IDASptfqmrGetPrecEvals
+ *        NPS     = IOUT(19) -> IDASptfqmrGetPrecSolves
+ *        NLI     = IOUT(20) -> IDASptfqmrGetLinIters
+ *        NLCF    = IOUT(21) -> IDASptfqmrGetConvFails
+ *
+ *      If a sequence of problems of the same size is being solved using the
+ * SPTFQMR linear solver, then following the call to FIDAREINIT, a call to the
+ * FIDASPTFQMRREINIT routine is needed if MAXL, EPLIFAC, or DQINCFAC is
+ * being changed.  In that case, call FIDASPTFQMRREINIT as follows:
+ *       CALL FIDASPTFQMRREINIT (MAXL, EPLIFAC, DQINCFAC, IER)
+ * The arguments have the same meanings as for FIDASPTFQMR.
+ *
+ * (8.8) Using user-provided functions for the iterative linear solvers
+ * 
+ * If the user program includes the FIDAJTIMES routine for the evaluation of the 
+ * Jacobian vector product, the following call must be made
+ *       CALL FIDASPILSSETJAC (FLAG, IER)
+ * with FLAG = 1 to specify that FIDAJTIMES is provided.  (FLAG = 0 specifies
+ * using and internal finite difference approximation to this product.)
+ * The return flag IER is 0 if successful, and nonzero otherwise.
+ *
+ * Usage of the user-supplied routines FIDAPSOL and FIDAPSET for solution of the 
+ * preconditioner linear system requires the following call:
+ *       CALL FIDASPILSSETPREC(FLAG, IER)
+ * with FLAG = 1. The return flag IER is 0 if successful, nonzero otherwise.
+ * The user-supplied routine FIDAPSOL must have the form:
+ *       SUBROUTINE FIDAPSOL(T, Y, YP, R, RV, ZV, CJ, DELTA, EWT, 
+ *      1                    IPAR, RPAR, WRK, IER)
+ *       DIMENSION Y(*), YP(*), R(*), RV(*), ZV(*), 
+ *      1          IPAR(*), RPAR(*), EWT(*), WRK(*)
+ * This routine must solve the preconditioner linear system Pz = r, where r = RV
+ * is input, and store the solution z in ZV.
+ *
+ * The user-supplied routine FIDAPSET must be of the form:
+ *       SUBROUTINE FIDAPSET(T, Y, YP, R, CJ, EWT, H, IPAR, RPAR, 
+ *      1                    WK1, WK2, WK3, IER)
+ *       DIMENSION Y(*), YP(*), R(*), EWT(*), IPAR(*), RPAR(*), 
+ *      1          WK1(*), WK2(*), WK3(*)
+ * This routine must perform any evaluation of Jacobian-related data and
+ * preprocessing needed for the solution of the preconditioner linear systems
+ * by FIDAPSOL.  On return, set IER = 0 if FIDAPSET was successful, set IER
+ * positive if a recoverable error occurred, and set IER negative if a
+ * non-recoverable error occurred.
+ * IPAR and RPAR are user (integer and real) arrays passed to FIDAMALLOC.
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * (9) The solver: FIDASOLVE
+ * To solve the DAE system, make the following call:
+ *       CALL FIDASOLVE(TOUT, TRET, Y, YP, ITASK, IER)
+ * The arguments are:
+ * TOUT  = next value of t at which a solution is desired (input)
+ * TRET  = value of t reached by the solver on output
+ * Y     = array containing the computed solution on output
+ * YP    = array containing current value of y'
+ * ITASK = task indicator: 1 = normal mode (overshoot TOUT and interpolate)
+ *         2 = one-step mode (return after each internal step taken)
+ *         3 = normal tstop mode (like 1, but integration never proceeds past 
+ *             TSTOP, which must be specified through a call to FIDASETRIN
+ *             using the key 'STOP_TIME'
+ *         4 = one step tstop (like 2, but integration never goes past TSTOP)
+ * IER   = completion flag: 0 = success, 1 = tstop return, 2 = root return, 
+ *         values -1 ... -10 are various failure modes (see IDA manual).
+ * The current values of the optional outputs are available in IOUT and ROUT.
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * (10) Getting current solution derivative: FIDAGETDKY
+ * To obtain interpolated values of y and y' for any value of t in the last
+ * internal step taken by IDA, make the following call:
+ *       CALL FIDAGETDKY(T, K, DKY, IER)
+ * The arguments are:
+ * T   = value of t at which solution is desired, in [TCUR - HU,TCUR].
+ * K   = order of derivative requested.
+ * DKY = array containing computed K-th derivative of the solution y.
+ * IER = return flag: = 0 for success, < 0 for illegal argument.
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * (11) Memory freeing: FIDAFREE
+ * To the free the internal memory created by the calls to FIDAMALLOC and
+ * FNVINITS or FNVINITP, depending on the version (serial/parallel), make
+ * the following call:
+ *       CALL FIDAFREE
+ *
+ * =============================================================================
+ */
+
+#ifndef _FIDA_H
+#define _FIDA_H
+
+#include <ida/ida.h>                   /* definition of type IDAResFn */
+#include <sundials/sundials_direct.h>  /* definition of type DlsMat  */
+#include <sundials/sundials_sparse.h>  /* definition of type SlsMat  */
+#include <sundials/sundials_nvector.h> /* definition of type N_Vector */
+#include <sundials/sundials_types.h>   /* definition of type realtype */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FIDA_MALLOC         SUNDIALS_F77_FUNC(fidamalloc, FIDAMALLOC)
+#define FIDA_REINIT         SUNDIALS_F77_FUNC(fidareinit, FIDAREINIT)
+#define FIDA_SETIIN         SUNDIALS_F77_FUNC(fidasetiin, FIDASETIIN)
+#define FIDA_SETRIN         SUNDIALS_F77_FUNC(fidasetrin, FIDASETRIN)
+#define FIDA_SETVIN         SUNDIALS_F77_FUNC(fidasetvin, FIDASETVIN)
+#define FIDA_TOLREINIT      SUNDIALS_F77_FUNC(fidatolreinit, FIDATOLREINIT)
+#define FIDA_SOLVE          SUNDIALS_F77_FUNC(fidasolve, FIDASOLVE)
+#define FIDA_FREE           SUNDIALS_F77_FUNC(fidafree, FIDAFREE)
+#define FIDA_CALCIC         SUNDIALS_F77_FUNC(fidacalcic, FIDACALCIC)
+#define FIDA_BAND           SUNDIALS_F77_FUNC(fidaband, FIDABAND)
+#define FIDA_BANDSETJAC     SUNDIALS_F77_FUNC(fidabandsetjac, FIDABANDSETJAC)
+#define FIDA_DENSE          SUNDIALS_F77_FUNC(fidadense, FIDADENSE)
+#define FIDA_DENSESETJAC    SUNDIALS_F77_FUNC(fidadensesetjac, FIDADENSESETJAC)
+#define FIDA_LAPACKBAND        SUNDIALS_F77_FUNC(fidalapackband, FIDALAPACKBAND)
+#define FIDA_LAPACKBANDSETJAC  SUNDIALS_F77_FUNC(fidalapackbandsetjac, FIDALAPACKBANDSETJAC)
+#define FIDA_LAPACKDENSE       SUNDIALS_F77_FUNC(fidalapackdense, FIDALAPACKDENSE)
+#define FIDA_LAPACKDENSESETJAC SUNDIALS_F77_FUNC(fidalapackdensesetjac, FIDALAPACKDENSESETJAC)
+#define FIDA_KLU            SUNDIALS_F77_FUNC(fidaklu, FIDAKLU)
+#define FIDA_KLUREINIT      SUNDIALS_F77_FUNC(fidaklureinit, FIDAKLUREINIT)
+#define FIDA_SUPERLUMT      SUNDIALS_F77_FUNC(fidasuperlumt, FIDASUPERLUMT)
+#define FIDA_SPARSESETJAC   SUNDIALS_F77_FUNC(fidasparsesetjac, FIDASPARSESETJAC)
+#define FIDA_SPTFQMR        SUNDIALS_F77_FUNC(fidasptfqmr, FIDASPTFQMR)
+#define FIDA_SPBCG          SUNDIALS_F77_FUNC(fidaspbcg, FIDASPBCG)
+#define FIDA_SPGMR          SUNDIALS_F77_FUNC(fidaspgmr, FIDASPGMR)
+#define FIDA_SPTFQMRREINIT  SUNDIALS_F77_FUNC(fidasptfqmrreinit, FIDASPTFQMRREINIT)
+#define FIDA_SPBCGREINIT    SUNDIALS_F77_FUNC(fidaspbcgreinit, FIDASPBCGREINIT)
+#define FIDA_SPGMRREINIT    SUNDIALS_F77_FUNC(fidaspgmrreinit, FIDASPGMRREINIT)
+#define FIDA_SPILSSETJAC    SUNDIALS_F77_FUNC(fidaspilssetjac, FIDASPILSSETJAC)
+#define FIDA_SPILSSETPREC   SUNDIALS_F77_FUNC(fidaspilssetprec, FIDASPILSSETPREC)
+#define FIDA_RESFUN         SUNDIALS_F77_FUNC(fidaresfun, FIDARESFUN)
+#define FIDA_DJAC           SUNDIALS_F77_FUNC(fidadjac, FIDADJAC)
+#define FIDA_BJAC           SUNDIALS_F77_FUNC(fidabjac, FIDABJAC)
+#define FIDA_PSET           SUNDIALS_F77_FUNC(fidapset, FIDAPSET)
+#define FIDA_PSOL           SUNDIALS_F77_FUNC(fidapsol, FIDAPSOL)
+#define FIDA_JTIMES         SUNDIALS_F77_FUNC(fidajtimes, FIDAJTIMES)
+#define FIDA_EWT            SUNDIALS_F77_FUNC(fidaewt, FIDAEWT)
+#define FIDA_EWTSET         SUNDIALS_F77_FUNC(fidaewtset, FIDAEWTSET)
+#define FIDA_GETDKY         SUNDIALS_F77_FUNC(fidagetdky, FIDAGETDKY)
+#define FIDA_GETERRWEIGHTS  SUNDIALS_F77_FUNC(fidageterrweights, FIDAGETERRWEIGHTS)
+#define FIDA_GETESTLOCALERR SUNDIALS_F77_FUNC(fidagetestlocalerr, FIDAGETESTLOCALERR)
+
+#else
+
+#define FIDA_MALLOC         fidamalloc_
+#define FIDA_REINIT         fidareinit_
+#define FIDA_SETIIN         fidasetiin_
+#define FIDA_SETRIN         fidasetrin_
+#define FIDA_SETVIN         fidasetvin_
+#define FIDA_TOLREINIT      fidatolreinit_
+#define FIDA_SOLVE          fidasolve_
+#define FIDA_FREE           fidafree_
+#define FIDA_CALCIC         fidacalcic_
+#define FIDA_BAND           fidaband_
+#define FIDA_BANDSETJAC     fidabandsetjac_
+#define FIDA_DENSE          fidadense_
+#define FIDA_DENSESETJAC    fidadensesetjac_
+#define FIDA_LAPACKBAND        fidalapackband_
+#define FIDA_LAPACKBANDSETJAC  fidalapackbandsetjac_
+#define FIDA_LAPACKDENSE       fidalapackdense_
+#define FIDA_LAPACKDENSESETJAC fidalapackdensesetjac_
+#define FIDA_KLU            fidaklu_
+#define FIDA_KLUREINIT      fidaklureinit_
+#define FIDA_SUPERLUMT      fidasuperlumt_
+#define FIDA_SPARSESETJAC   fidasparsesetjac_
+#define FIDA_SPTFQMR        fidasptfqmr_
+#define FIDA_SPBCG          fidaspbcg_
+#define FIDA_SPGMR          fidaspgmr_
+#define FIDA_SPTFQMRREINIT  fidasptfqmrreinit_
+#define FIDA_SPBCGREINIT    fidaspbcgreinit_
+#define FIDA_SPGMRREINIT    fidaspgmrreinit_
+#define FIDA_SPILSSETJAC    fidaspilssetjac_
+#define FIDA_SPILSSETPREC   fidaspilssetprec_
+#define FIDA_RESFUN         fidaresfun_
+#define FIDA_DJAC           fidadjac_
+#define FIDA_BJAC           fidabjac_
+#define FIDA_PSET           fidapset_
+#define FIDA_PSOL           fidapsol_
+#define FIDA_JTIMES         fidajtimes_
+#define FIDA_EWT            fidaewt_
+#define FIDA_GETDKY         fidagetdky_
+#define FIDA_GETERRWEIGHTS  fidageterrweights_
+#define FIDA_GETESTLOCALERR fidagetestlocalerr_
+
+#endif
+
+/* Type for user data */
+
+typedef struct {
+  realtype *rpar;
+  long int *ipar;
+} *FIDAUserData;
+
+/* Prototypes of exported functions */
+
+void FIDA_MALLOC(realtype *t0, realtype *yy0, realtype *yp0,
+                 int *iatol, realtype *rtol, realtype *atol,
+                 long int *iout, realtype *rout,
+                 long int *ipar, realtype *rpar,
+                 int *ier);
+void FIDA_REINIT(realtype *t0, realtype *yy0, realtype *yp0,
+                 int *iatol, realtype *rtol, realtype *atol,
+                 int *ier);
+
+void FIDA_SETIIN(char key_name[], long int *ival, int *ier);
+
+void FIDA_SETRIN(char key_name[], realtype *rval, int *ier);
+
+void FIDA_SETVIN(char key_name[], realtype *vval, int *ier);
+
+void FIDA_TOLREINIT(int *iatol, realtype *rtol, realtype *atol, int *ier);
+void FIDA_CALCIC(int *icopt, realtype *tout1, int *ier);
+
+void FIDA_DENSE(long int *neq, int *ier);
+void FIDA_DENSESETJAC(int *flag, int *ier);
+void FIDA_BAND(long int *neq, long int *mupper, long int *mlower, int *ier);
+void FIDA_BANDSETJAC(int *flag, int *ier);
+
+void FIDA_LAPACKDENSE(int *neq, int *ier);
+void FIDA_LAPACKDENSESETJAC(int *flag, int *ier);
+void FIDA_LAPACKBAND(int *neq, int *mupper, int *mlower, int *ier);
+void FIDA_LAPACKBANDSETJAC(int *flag, int *ier);
+
+void FIDA_KLU(int *neq, int *nnz, int *sparsetype, int *ordering, int *ier);
+void FIDA_KLUREINIT(int *neq, int *nnz, int *reinit_type, int *ier);
+void FIDA_SUPERLUMT(int *nthreads, int *neq, int *nnz, int *ordering, int *ier);
+void FIDA_SPARSESETJAC(int *ier);
+
+void FIDA_SPTFQMR(int *maxl, realtype *eplifac, realtype *dqincfac, int *ier);
+void FIDA_SPBCG(int *maxl, realtype *eplifac, realtype *dqincfac, int *ier);
+void FIDA_SPGMR(int *maxl, int *gstype, int *maxrs, realtype *eplifac,
+                realtype *dqincfac, int *ier);
+void FIDA_SPTFQMRREINIT(int *maxl, realtype *eplifac, realtype *dqincfac, int *ier);
+void FIDA_SPBCGREINIT(int *maxl, realtype *eplifac, realtype *dqincfac, int *ier);
+void FIDA_SPGMRREINIT(int *gstype, int *maxrs, realtype *eplifac,
+                      realtype *dqincfac, int *ier);
+void FIDA_SPILSSETJAC(int *flag, int *ier);
+void FIDA_SPILSSETPREC(int *flag, int *ier);
+
+void FIDA_SOLVE(realtype *tout, realtype *tret, realtype *yret,
+                realtype *ypret, int *itask, int *ier);
+void FIDA_FREE(void);
+void FIDA_EWTSET(int *flag, int *ier);
+void FIDA_GETDKY(realtype *t, int *k, realtype *dky, int *ier);
+void FIDA_GETERRWEIGHTS(realtype *eweight, int *ier);
+void FIDA_GETESTLOCALERR(realtype *ele, int *ier);
+
+/* Prototypes: Functions Called by the IDA Solver */
+
+int FIDAresfn(realtype t, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data);
+
+int FIDADenseJac(long int N, realtype t, realtype c_j, 
+                 N_Vector yy, N_Vector yp, N_Vector rr,
+                 DlsMat Jac, void *user_data,
+                 N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+int FIDABandJac(long int N, long int mupper, long int mlower,
+                realtype t, realtype c_j, 
+                N_Vector yy, N_Vector yp, N_Vector rr,
+                DlsMat Jac, void *user_data,
+                N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+int FIDALapackDenseJac(long int N, realtype t, realtype c_j, 
+                       N_Vector yy, N_Vector yp, N_Vector rr,
+                       DlsMat Jac, void *user_data,
+                       N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+int FIDALapackBandJac(long int N, long int mupper, long int mlower,
+                      realtype t, realtype c_j, 
+                      N_Vector yy, N_Vector yp, N_Vector rr,
+                      DlsMat J, void *user_data,
+                      N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+int FIDASparseJac(realtype t, realtype cj, N_Vector y, N_Vector yp,
+		  N_Vector fval, SlsMat J, void *user_data, 
+		  N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+int FIDAJtimes(realtype t, N_Vector yy, N_Vector yp, N_Vector rr,
+               N_Vector v, N_Vector Jv,
+               realtype c_j, void *user_data,
+               N_Vector vtemp1, N_Vector vtemp2);
+
+int FIDAPSet(realtype t, N_Vector yy, N_Vector yp, N_Vector rr,
+             realtype c_j, void *user_data,
+             N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
+
+int FIDAPSol(realtype t, N_Vector yy, N_Vector yp, N_Vector rr,
+             N_Vector rvec, N_Vector zvec,
+             realtype c_j, realtype delta, void *user_data,
+             N_Vector vtemp1);
+
+int FIDAEwtSet(N_Vector yy, N_Vector ewt, void *user_data);
+
+/* Declarations for global variables shared amongst various routines */
+
+extern N_Vector F2C_IDA_vec;    /* defined in FNVECTOR module */
+
+extern N_Vector F2C_IDA_ypvec;  /* defined in fida.c */
+extern N_Vector F2C_IDA_ewtvec; /* defined in fida.c */
+extern void *IDA_idamem;        /* defined in fida.c */
+extern long int *IDA_iout;      /* defined in fida.c */
+extern realtype *IDA_rout;      /* defined in fida.c */  
+extern int IDA_ls;              /* defined in fida.c */
+extern int IDA_nrtfn;           /* defined in fida.c */
+
+/* Linear solver IDs */
+
+enum { IDA_LS_DENSE = 1, IDA_LS_BAND = 2, 
+       IDA_LS_LAPACKDENSE = 3, IDA_LS_LAPACKBAND = 4, 
+       IDA_LS_KLU = 5, IDA_LS_SUPERLUMT = 6, 
+       IDA_LS_SPGMR = 7, IDA_LS_SPBCG = 8, IDA_LS_SPTFQMR = 9 };
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/ida/fcmix/fidaband.c b/src/ida/fcmix/fidaband.c
new file mode 100644
index 0000000..ac2ab3f
--- /dev/null
+++ b/src/ida/fcmix/fidaband.c
@@ -0,0 +1,122 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for IDA/IDABAND, for the case of
+ * a user-supplied Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fida.h"     /* function names, prototypes, global vars.*/
+#include "ida_impl.h" /* definition of IDAMem type               */
+
+#include <ida/ida_band.h>
+
+/*************************************************/
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FIDA_BJAC(long int*, long int*, long int*, long int*,
+                        realtype*, realtype*, realtype*, realtype*,
+                        realtype*, realtype*, realtype*, realtype*,
+                        long int*, realtype*,
+                        realtype*, realtype*, realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*************************************************/
+
+void FIDA_BANDSETJAC(int *flag, int *ier)
+{
+  *ier = 0;
+
+  if (*flag == 0) {
+
+    *ier = IDADlsSetBandJacFn(IDA_idamem, NULL);
+
+  } else {
+
+    if (F2C_IDA_ewtvec == NULL) {
+      F2C_IDA_ewtvec = N_VClone(F2C_IDA_vec);
+      if (F2C_IDA_ewtvec == NULL) {
+        *ier = -1;
+        return;
+      }
+    }
+
+    *ier = IDADlsSetBandJacFn(IDA_idamem, FIDABandJac);
+
+  }
+
+  return;
+}
+
+/*************************************************/
+
+int FIDABandJac(long int N, long int mupper, long int mlower,
+		realtype t, realtype c_j, 
+		N_Vector yy, N_Vector yp, N_Vector rr,
+		DlsMat J, void *user_data,
+		N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype *yy_data, *yp_data, *rr_data, *jacdata, *ewtdata, *v1data, *v2data, *v3data;
+  realtype h;
+  long int eband;
+  int ier;
+  FIDAUserData IDA_userdata;
+
+  /* Initialize all pointers to NULL */
+  yy_data = yp_data = rr_data = jacdata = ewtdata = NULL;
+  v1data = v2data = v3data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  IDAGetErrWeights(IDA_idamem, F2C_IDA_ewtvec);
+  IDAGetLastStep(IDA_idamem, &h);
+
+  /* Get pointers to vector data */
+  yy_data = N_VGetArrayPointer(yy);
+  yp_data = N_VGetArrayPointer(yp);
+  rr_data = N_VGetArrayPointer(rr);
+  ewtdata = N_VGetArrayPointer(F2C_IDA_ewtvec);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+
+  eband = (J->s_mu) + mlower + 1;
+  jacdata = BAND_COL(J,0) - mupper;
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine */
+  FIDA_BJAC(&N, &mupper, &mlower, &eband, &t, yy_data, yp_data, rr_data,
+	    &c_j, jacdata, ewtdata, &h, 
+            IDA_userdata->ipar, IDA_userdata->rpar,
+            v1data, v2data, v3data, &ier);
+
+  return(ier);
+}
diff --git a/src/ida/fcmix/fidabbd.c b/src/ida/fcmix/fidabbd.c
new file mode 100644
index 0000000..44e425c
--- /dev/null
+++ b/src/ida/fcmix/fidabbd.c
@@ -0,0 +1,155 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This module contains the routines necessary to interface with the
+ * IDABBDPRE module and user-supplied Fortran routines.
+ * The routines here call the generically named routines and provide
+ * a standard interface to the C code of the IDABBDPRE package.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fida.h"            /* function names, prototypes, global variables */
+#include "fidabbd.h"         /* prototypes of interfaces to IDABBD           */
+
+#include <ida/ida_bbdpre.h>  /* prototypes of IDABBDPRE functions and macros */
+#include <ida/ida_spgmr.h>   /* prototypes of IDASPGMR interface routines    */
+#include <ida/ida_spbcgs.h>  /* prototypes of IDASPBCG interface routines    */
+#include <ida/ida_sptfqmr.h> /* prototypes of IDASPTFQMR interface routines  */
+
+/*************************************************/
+
+/* private constant(s) */
+
+#define ZERO RCONST(0.0)
+
+/*************************************************/
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FIDA_GLOCFN(long int*, 
+                          realtype*, realtype*, realtype*, realtype*, 
+                          long int*, realtype*,
+                          int*);
+  extern void FIDA_COMMFN(long int*, 
+                          realtype*, realtype*, realtype*, 
+                          long int*, realtype*,
+                          int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*************************************************/
+
+void FIDA_BBDINIT(long int *Nloc, long int *mudq, long int *mldq,
+		  long int *mu, long int *ml, realtype *dqrely, int *ier)
+{
+  *ier = IDABBDPrecInit(IDA_idamem, *Nloc, *mudq, *mldq, *mu, *ml,
+                        *dqrely, (IDABBDLocalFn) FIDAgloc, (IDABBDCommFn) FIDAcfn);
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_BBDREINIT(long int *Nloc, long int *mudq, long int *mldq,
+		    realtype *dqrely, int *ier)
+{
+  *ier = 0;
+
+  *ier = IDABBDPrecReInit(IDA_idamem, *mudq, *mldq, *dqrely);
+
+  return;
+}
+
+/*************************************************/
+
+int FIDAgloc(long int Nloc, realtype t, N_Vector yy, N_Vector yp,
+	     N_Vector gval, void *user_data)
+{
+  realtype *yy_data, *yp_data, *gval_data;
+  int ier;
+  FIDAUserData IDA_userdata;
+
+  /* Initialize all pointers to NULL */
+  yy_data = yp_data = gval_data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  /* Get pointers to vector data */
+  yy_data   = N_VGetArrayPointer(yy);
+  yp_data   = N_VGetArrayPointer(yp);
+  gval_data = N_VGetArrayPointer(gval);
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine */
+  FIDA_GLOCFN(&Nloc, &t, yy_data, yp_data, gval_data, 
+              IDA_userdata->ipar, IDA_userdata->rpar, &ier);
+
+  return(ier);
+}
+
+/*************************************************/
+
+int FIDAcfn(long int Nloc, realtype t, N_Vector yy, N_Vector yp,
+	    void *user_data)
+{
+  realtype *yy_data, *yp_data;
+  int ier;
+  FIDAUserData IDA_userdata;
+
+  /* Initialize all pointers to NULL */
+  yy_data = yp_data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  /* Get pointers to vector data */
+  yy_data = N_VGetArrayPointer(yy);
+  yp_data = N_VGetArrayPointer(yp);
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine */
+  FIDA_COMMFN(&Nloc, &t, yy_data, yp_data, 
+              IDA_userdata->ipar, IDA_userdata->rpar, &ier);
+
+  return(ier);
+}
+
+/*************************************************/
+
+void FIDA_BBDOPT(long int *lenrwbbd, long int *leniwbbd, long int *ngebbd)
+{
+  IDABBDPrecGetWorkSpace(IDA_idamem, lenrwbbd, leniwbbd);
+  IDABBDPrecGetNumGfnEvals(IDA_idamem, ngebbd);
+
+  return;
+}
diff --git a/src/ida/fcmix/fidabbd.h b/src/ida/fcmix/fidabbd.h
new file mode 100644
index 0000000..e1cd9bd
--- /dev/null
+++ b/src/ida/fcmix/fidabbd.h
@@ -0,0 +1,340 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the Fortran interface include file for the BBD
+ * preconditioner (IDABBDPRE)
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * ==============================================================================
+ *
+ *                   FIDABBD Interface Package
+ *
+ * The FIDABBD Interface Package is a package of C functions which,
+ * together with the FIDA Interface Package, support the use of the
+ * IDA solver (parallel MPI version) with the IDABBDPRE preconditioner module,
+ * for the solution of DAE systems in a mixed Fortran/C setting.  The
+ * combination of IDA and IDABBDPRE solves DAE systems with the SPGMR
+ * (scaled preconditioned GMRES), SPBCG (scaled preconditioned Bi-CGSTAB), or
+ * SPTFQMR (scaled preconditioned TFQMR) method for the linear systems that arise,
+ * and with a preconditioner that is block-diagonal with banded blocks.  While
+ * IDA and IDABBDPRE are written in C, it is assumed here that the user's
+ * calling program and user-supplied problem-defining routines are written in
+ * Fortran.
+ *
+ * The user-callable functions in this package, with the corresponding
+ * IDA and IDABBDPRE functions, are as follows: 
+ *   FIDABBDININT   interfaces to IDABBDPrecInit
+ *   FIDABBDREINIT  interfaces to IDABBDPrecReInit
+ *   FIDABBDOPT     accesses optional outputs
+ *   FIDABBDFREE    interfaces to IDABBDPrecFree
+ *
+ * In addition to the Fortran residual function FIDARESFUN, the
+ * user-supplied functions used by this package, are listed below,
+ * each with the corresponding interface function which calls it (and its
+ * type within IDABBDPRE or IDA):
+ *   FIDAGLOCFN  is called by the interface function FIDAgloc of type IDABBDLocalFn
+ *   FIDACOMMFN  is called by the interface function FIDAcfn of type IDABBDCommFn
+ *   FIDAJTIMES  (optional) is called by the interface function FIDAJtimes of 
+ *               type IDASpilsJacTimesVecFn
+ * (The names of all user-supplied routines here are fixed, in order to
+ * maximize portability for the resulting mixed-language program.)
+ *
+ * Important note on portability:
+ * In this package, the names of the interface functions, and the names of
+ * the Fortran user routines called by them, appear as dummy names
+ * which are mapped to actual values by a series of definitions in the
+ * header file fidabbd.h.
+ *
+ * ==============================================================================
+ *
+ *               Usage of the FIDA/FIDABBD Interface Packages
+ *
+ * The usage of the combined interface packages FIDA and FIDABBD requires
+ * calls to several interface functions, and a few different user-supplied
+ * routines which define the problem to be solved and indirectly define
+ * the preconditioner.  These function calls and user routines are
+ * summarized separately below.
+ *
+ * Some details are omitted, and the user is referred to the IDA user document 
+ * for more complete information.
+ *
+ * (1) User-supplied residual routine: FIDARESFUN
+ * The user must in all cases supply the following Fortran routine
+ *       SUBROUTINE FIDARESFUN(T, Y, YP, R, IPAR, RPAR, IER)
+ *       DIMENSION Y(*), YP(*), R(*), IPAR(*), RPAR(*)
+ * It must set the R array to F(t,y,y'), the residual of the DAE 
+ * system, as a function of T = t, the array Y = y, and the array YP = y'.
+ * Here Y, YP and R are distributed vectors.
+ *
+ * (2) User-supplied routines to define preconditoner: FIDAGLOCFN and FIDACOMMFN
+ *
+ * The routines in the IDABBDPRE module provide a preconditioner matrix
+ * for IDA that is block-diagonal with banded blocks.  The blocking
+ * corresponds to the distribution of the dependent variable vectors y and y'
+ * among the processes.  Each preconditioner block is generated from the
+ * Jacobian of the local part (associated with the current process) of a given
+ * function G(t,y,y') approximating F(t,y,y').  The blocks are generated by a
+ * difference quotient scheme independently by each process, utilizing
+ * an assumed banded structure with given half-bandwidths.  A separate
+ * pair of half-bandwidths defines the band matrix retained.
+ *
+ * (2.1) Local approximate function FIDAGLOCFN.
+ * The user must supply a subroutine of the form
+ *       SUBROUTINE FIDAGLOCFN(NLOC, T, YLOC, YPLOC, GLOC, IPAR, RPAR, IER)
+ *       DIMENSION YLOC(*), YPLOC(*), GLOC(*), IPAR(*), RPAR(*)
+ * to compute the function G(t,y,y') which approximates the residual
+ * function F(t,y,y').  This function is to be computed locally, i.e., without 
+ * interprocess communication.  (The case where G is mathematically
+ * identical to F is allowed.)  It takes as input the local vector length
+ * NLOC, the independent variable value T = t, and the local realtype
+ * dependent variable arrays YLOC and YPLOC.  It is to compute the local part
+ * of G(t,y,y') and store this in the realtype array GLOC.
+ *
+ * (2.2) Communication function FIDACOMMF.
+ * The user must also supply a subroutine of the form
+ *       SUBROUTINE FIDACOMMFN(NLOC, T, YLOC, YPLOC, IPAR, RPAR, IER)
+ *       DIMENSION YLOC(*), YPLOC(*), IPAR(*), RPAR(*)
+ * which is to perform all interprocess communication necessary to
+ * evaluate the approximate residual function G described above.
+ * This function takes as input the local vector length NLOC, the
+ * independent variable value T = t, and the local real dependent
+ * variable arrays YLOC and YPLOC.  It is expected to save communicated
+ * data in  work space defined by the user, and made available to FIDAGLOCFN.
+ * Each call to the FIDACOMMFN is preceded by a call to FIDARESFUN with
+ * the same (t,y,y') arguments.  Thus FIDACOMMFN can omit any
+ * communications done by FIDARESFUN if relevant to the evaluation of G.
+ *
+ * (3) Optional user-supplied Jacobian-vector product routine: FIDAJTIMES
+ * As an option when using the SPGMR/SPBCG/SPTFQMR linear solver, the user may
+ * supply a routine that computes the product of the system Jacobian J = df/dy
+ * and a given vector v.  If supplied, it must have the following form:
+ *       SUBROUTINE FIDAJTIMES(T, Y, YP, R, V, FJV, CJ, EWT, H, 
+ *      1                      IPAR, RPAR, WK1, WK2, IER)
+ *       DIMENSION V(*), FJV(*), Y(*), YP(*), R(*), EWT(*),
+ *      1          , IPAR(*), RPAR(*), WK1(*), WK2(*)
+ * This routine must compute the product vector Jv, where the vector v is stored
+ * in V, and store the product in FJV.  On return, set IER = 0 if FIDAJTIMES was
+ * successful, and nonzero otherwise.
+ *
+ * (4) Initialization:  FNVINITP, FIDAMALLOC, FIDABBDINIT.
+ *
+ * (4.1) To initialize the parallel machine environment, the user must make 
+ * one of the following calls:
+ *        CALL FNVINITP (KEY, NLOCAL, NGLOBAL, IER)
+ *                     -or-
+ *        CALL FNVINITP (COMM, KEY, NLOCAL, NGLOBAL, IER)
+ * The arguments are:
+ * COMM = MPI communicator (e.g., MPI_COMM_WORLD)
+ * KEY = 3 for IDA
+ * NLOCAL  = local size of vectors on this processor
+ * NGLOBAL = the system size, and the global size of vectors (the sum 
+ *           of all values of NLOCAL)
+ * IER     = return completion flag. Values are 0 = success, -1 = failure.
+ * NOTE: The COMM argument passed to the FNVINITP routine is only supported if
+ * the MPI implementation used to build SUNDIALS includes the MPI_Comm_f2c
+ * function from the MPI-2 specification.  To check if the function is supported
+ * look for the line "#define SUNDIALS_MPI_COMM_F2C 1" in the sundials_config.h
+ * header file.
+ *
+ * (4.2) To set various problem and solution parameters and allocate
+ * internal memory, make the following call:
+ *       CALL FIDAMALLOC(T0, Y0, YP0, IATOL, RTOL, ATOL, ID, CONSTR,
+ *      1                IOUT, ROUT, IPAR, RPAR, IER)
+ * The arguments are:
+ * T0    = initial value of t
+ * Y0    = array of initial conditions, y(t0)
+ * YP0   = value of y'(t0)
+ * IATOL = type for absolute tolerance ATOL: 1 = scalar, 2 = array.
+ *         If IATOL = 3, then the user must supply a routine FIDAEWT to compute
+ *         the error weight vector.
+ * RTOL  = relative tolerance (scalar)
+ * ATOL  = absolute tolerance (scalar or array)
+ * IOUT  = array of length at least 21 for integer optional inputs and outputs
+ *          (declare as INTEGER*4 or INTEGER*8 according to C type long int)
+ * ROUT  = array of length 6 for real optional inputs and outputs
+ *
+ *         The optional outputs are:
+ *
+ *           LENRW   = IOUT( 1) -> IDAGetWorkSpace
+ *           LENIW   = IOUT( 2) -> IDAGetWorkSpace
+ *           NST     = IOUT( 3) -> IDAGetNumSteps
+ *           NRE     = IOUT( 4) -> IDAGetNumResEvals
+ *           NETF    = IOUT( 5) -> IDAGetNumErrTestFails
+ *           NCFN    = IOUT( 6) -> IDAGetNumNonlinSolvConvFails
+ *           NNI     = IOUT( 7) -> IDAGetNumNonlinSolvIters
+ *           NSETUPS = IOUT( 8) -> IDAGetNumLinSolvSetups
+ *           KLAST   = IOUT( 9) -> IDAGetLastOrder
+ *           KCUR    = IOUT(10) -> IDAGetCurrentOrder
+ *           NBCKTRK = IOUT(11) -> IDAGetNumBacktrackOps
+ *           NGE     = IOUT(12) -> IDAGetNumGEvals
+ *
+ *           HINUSED = ROUT( 1) -> IDAGetActualInitStep
+ *           HLAST   = ROUT( 2) -> IDAGetLastStep
+ *           HCUR    = ROUT( 3) -> IDAGetCurrentStep
+ *           TCUR    = ROUT( 4) -> IDAGetCurrentTime
+ *           TOLSFAC = ROUT( 5) -> IDAGetTolScaleFactor
+ *           UNITRND = ROUT( 6) -> UNIT_ROUNDOFF
+ *
+ * IPAR  = array with user integer data
+ *         (declare as INTEGER*4 or INTEGER*8 according to C type long int)
+ * RPAR  = array with user real data
+ * IER   = return completion flag.  Values are 0 = SUCCESS, and -1 = failure.
+ *         See printed message for details in case of failure.
+ *
+ * If the user program includes the FIDAEWT routine for the evaluation of the 
+ * error weights, the following call must be made
+ *       CALL FIDAEWTSET (FLAG, IER)
+ * with FLAG = 1 to specify that FIDAEWT is provided.
+ * The return flag IER is 0 if successful, and nonzero otherwise.
+ *
+ * (4.3) Attach one of the 3 SPILS linear solvers. Make one of the 
+ * following calls (see fida.h for more details).
+ *       CALL FIDASPGMR(MAXL, IGSTYPE, MAXRS, EPLIFAC, DQINCFAC, IER)
+ *       CALL FIDASPBCG(MAXL, EPLIFAC, DQINCFAC, IER)
+ *       CALL FIDASPTFQMR(MAXL, EPLIFAC, DQINCFAC, IER)
+ *
+ * (4.4) To allocate memory and initialize data associated with the IDABBDPRE
+ * preconditioner, make the following call:
+ *       CALL FIDABBDINIT(NLOCAL, MUDQ, MLDQ, MU, ML, DQRELY, IER)
+ * The arguments are:
+ * NLOCAL    = local size of vectors
+ * MUDQ,MLDQ = upper and lower half-bandwidths to be used in the computation
+ *             of the local Jacobian blocks by difference quotients.
+ *             These may be smaller than the true half-bandwidths of the
+ *             Jacobian of the local block of g, when smaller values may
+ *             provide greater efficiency.
+ * MU, ML    = upper and lower half-bandwidths of the band matrix that 
+ *             is retained as an approximation of the local Jacobian block.
+ *             These may be smaller than MUDQ and MLDQ.
+ * DQRELY    = relative increment factor in y for difference quotients
+ *             (optional). 0.0 indicates the default, sqrt(UNIT_ROUNDOFF).
+ * IER       = return completion flag: IER=0: success, IER<0: an error occured
+ *
+ * (4.5) To specify whether the linear solver should use the supplied FIDAJTIMES or the 
+ * internal finite difference approximation, make the call
+ *        CALL FIDASPILSSETJAC(FLAG, IER)
+ * where FLAG=0 for finite differences approxaimtion or
+ *       FLAG=1 to use the supplied routine FIDAJTIMES
+ *
+ * (5) Re-initialization: FIDAREINIT, FIDABBDREINIT
+ * If a sequence of problems of the same size is being solved using the SPGMR or
+ * SPBCG linear solver in combination with the IDABBDPRE preconditioner, then the
+ * IDA package can be reinitialized for the second and subsequent problems
+ * so as to avoid further memory allocation.  First, in place of the call
+ * to FIDAMALLOC, make the following call:
+ *       CALL FIDAREINIT(T0, Y0, YP0, IATOL, RTOL, ATOL, ID, CONSTR, IER)
+ * The arguments have the same names and meanings as those of FIDAMALLOC.
+ * FIDAREINIT performs the same initializations as FIDAMALLOC, but does no
+ * memory allocation for IDA data structures, using instead the existing
+ * internal memory created by the previous FIDAMALLOC call.  Following the call
+ * to FIDAREINIT, a call to FIDABBDINIT may or may not be needed.  If the input
+ * arguments are the same, no FIDABBDINIT call is needed.  If there is a change
+ * in input arguments other than MU, ML or MAXL, then the user program should call
+ * FIDABBDREINIT.  The arguments of the FIDABBDREINIT routine have the
+ * same names and meanings as FIDABBDINIT.  Finally, if the value of MU, ML, or
+ * MAXL is being changed, then a call to FIDABBDINIT must be made.
+ *
+ * (6) The solver: FIDASOLVE
+ * To solve the DAE system, make the following call:
+ *       CALL FIDASOLVE (TOUT, TRET, Y, YP, ITASK, IER)
+ * The arguments are:
+ * TOUT  = next value of t at which a solution is desired (input)
+ * TRET  = value of t reached by the solver on output
+ * Y     = array containing the computed solution on output
+ * YP    = array containing current value of y'
+ * ITASK = task indicator: 1 = normal mode (overshoot TOUT and interpolate)
+ *         2 = one-step mode (return after each internal step taken)
+ *         3 = normal tstop mode (like 1, but integration never proceeds past 
+ *             TSTOP,  which must be specified through a call to FIDASETRIN
+ *             using the key 'STOP_TIME'
+ *         4 = one step tstop (like 2, but integration never goes past TSTOP)
+ * IER   = completion flag: 0 = success, 1 = tstop return, 2 = root return, 
+ *         values -1 ... -10 are various failure modes (see IDA manual).
+ * The current values of the optional outputs are available in IOUT and ROUT.
+ *
+ * (7) Optional outputs: FIDABBDOPT
+ * Optional outputs specific to the SPGMR/SPBCG/SPTFQMR solver are available 
+ * in IOUT(13)...IOUT(21)
+ *
+ * To obtain the optional outputs associated with the IDABBDPRE module, make
+ * the following call:
+ *       CALL FIDABBDOPT (LENRWBBD, LENIWBBD, NGEBBD)
+ * The arguments returned are:
+ * LENRWBBD = length of real preconditioner work space, in realtype words.
+ *            This size is local to the current process.
+ * LENIWBBD = length of integer preconditioner work space, in integer words.
+ *            This size is local to the current process.
+ * NGEBBD   = number of G(t,y,y') evaluations (calls to FIDAGLOCFN) so far.
+ *
+ * (8) Memory freeing: FIDAFREE
+ * To the free the internal memory created by the calls to FNVINITP and
+ * FIDAMALLOC, make the following call:
+ *       CALL FIDAFREE
+ *
+ * ==============================================================================
+ */
+
+#ifndef _FIDABBD_H
+#define _FIDABBD_H
+
+#include <sundials/sundials_nvector.h>
+#include <sundials/sundials_types.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FIDA_BBDINIT    SUNDIALS_F77_FUNC(fidabbdinit, FIDABBDINIT)
+#define FIDA_BBDREINIT  SUNDIALS_F77_FUNC(fidabbdreinit, FIDABBDREINIT)
+#define FIDA_BBDOPT     SUNDIALS_F77_FUNC(fidabbdopt, FIDABBDOPT)
+#define FIDA_GLOCFN     SUNDIALS_F77_FUNC(fidaglocfn, FIDAGLOCFN)
+#define FIDA_COMMFN     SUNDIALS_F77_FUNC(fidacommfn, FIDACOMMFN)
+
+#else
+
+#define FIDA_BBDINIT    fidabbdinit_
+#define FIDA_BBDREINIT  fidabbdreinit_
+#define FIDA_BBDOPT     fidabbdopt_
+#define FIDA_GLOCFN     fidaglocfn_
+#define FIDA_COMMFN     fidacommfn_
+
+#endif
+
+/* Prototypes of exported functions */
+
+void FIDA_BBDINIT(long int *Nloc, long int *mudq, long int *mldq,
+                  long int *mu, long int *ml, realtype *dqrely, int *ier);
+
+void FIDA_BBDREINIT(long int *Nloc, long int *mudq, long int *mldq,
+		    realtype *dqrely, int *ier);
+
+void FIDA_BBDOPT(long int *lenrwbbd, long int *leniwbbd, long int *ngebbd);
+
+/* Prototypes: Functions Called by the IDABBD Module */
+
+int FIDAgloc(long int Nloc, realtype t, N_Vector yy, N_Vector yp, N_Vector gval, void *user_data);
+int FIDAcfn(long int Nloc, realtype t, N_Vector yy, N_Vector yp, void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/ida/fcmix/fidadense.c b/src/ida/fcmix/fidadense.c
new file mode 100644
index 0000000..897e1ed
--- /dev/null
+++ b/src/ida/fcmix/fidadense.c
@@ -0,0 +1,120 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for IDA/IDADENSE, for the case
+ * of a user-supplied Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fida.h"     /* actual function names, prototypes and global vars.*/
+#include "ida_impl.h" /* definition of IDAMem type                         */
+
+#include <ida/ida_dense.h>
+
+/*************************************************/
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FIDA_DJAC(long int*, 
+                        realtype*, realtype*, realtype*, realtype*,
+                        realtype*, 
+                        realtype*, realtype*, realtype*,
+                        long int*, realtype*,
+                        realtype*, realtype*, realtype*, 
+                        int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*************************************************/
+
+void FIDA_DENSESETJAC(int *flag, int *ier)
+{
+  *ier = 0;
+
+  if (*flag == 0) {
+
+    *ier = IDADlsSetDenseJacFn(IDA_idamem, NULL);
+
+  } else {
+
+    if (F2C_IDA_ewtvec == NULL) {
+      F2C_IDA_ewtvec = N_VClone(F2C_IDA_vec);
+      if (F2C_IDA_ewtvec == NULL) {
+        *ier = -1;
+        return;
+      }
+    }
+
+    *ier = IDADlsSetDenseJacFn(IDA_idamem, FIDADenseJac);
+  }
+
+  return;
+}
+
+/*************************************************/
+
+int FIDADenseJac(long int N, realtype t, realtype c_j, 
+		 N_Vector yy, N_Vector yp, N_Vector rr,
+                 DlsMat Jac, void *user_data,
+		 N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype *yy_data, *yp_data, *rr_data, *jacdata, *ewtdata, *v1data, *v2data, *v3data;
+  realtype h;
+  int ier;
+  FIDAUserData IDA_userdata;
+
+  /* Initialize all pointers to NULL */
+  yy_data = yp_data = rr_data = jacdata = ewtdata = NULL;
+  v1data = v2data = v3data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  IDAGetErrWeights(IDA_idamem, F2C_IDA_ewtvec);
+  IDAGetLastStep(IDA_idamem, &h);
+
+  /* Get pointers to vector data */
+  yy_data = N_VGetArrayPointer(yy);
+  yp_data = N_VGetArrayPointer(yp);
+  rr_data = N_VGetArrayPointer(rr);
+  ewtdata = N_VGetArrayPointer(F2C_IDA_ewtvec);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+
+  jacdata = DENSE_COL(Jac,0);
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine*/
+  FIDA_DJAC(&N, &t, yy_data, yp_data, rr_data, jacdata,
+	    &c_j, ewtdata, &h, 
+            IDA_userdata->ipar, IDA_userdata->rpar,
+            v1data, v2data, v3data, &ier);
+
+  return(ier);
+}
diff --git a/src/ida/fcmix/fidaewt.c b/src/ida/fcmix/fidaewt.c
new file mode 100644
index 0000000..f7a229a
--- /dev/null
+++ b/src/ida/fcmix/fidaewt.c
@@ -0,0 +1,92 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for IDA, for the case of a 
+ * user-supplied error weight calculation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fida.h"     /* actual function names, prototypes and global vars.*/
+#include "ida_impl.h" /* definition of IDAMem type                         */
+
+/*************************************************/
+
+/* Prototype of user-supplied Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage (IDAEwtFn) */
+extern "C" {
+#endif
+
+  extern void FIDA_EWT(realtype*, realtype*,   /* Y, EWT */ 
+                       long int*, realtype*,   /* IPAR, RPAR */
+                       int*);                  /* IER */
+
+#ifdef __cplusplus
+}
+#endif
+
+/*************************************************/
+
+/* 
+ * User-callable function to interface to IDASetEwtFn.
+ */
+
+void FIDA_EWTSET(int *flag, int *ier)
+{
+  *ier = 0;
+
+  if (*flag != 0) {
+    *ier = IDAWFtolerances(IDA_idamem,  FIDAEwtSet);
+  }
+
+  return;
+}
+
+/*************************************************/
+
+/* 
+ * C function to interface between IDA and a Fortran subroutine FIDAVEWT.
+ */
+
+int FIDAEwtSet(N_Vector y, N_Vector ewt, void *user_data)
+{
+  int ier;
+  realtype *y_data, *ewt_data;
+  FIDAUserData IDA_userdata;
+
+  /* Initialize all pointers to NULL */
+  y_data = ewt_data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  y_data   = N_VGetArrayPointer(y);
+  ewt_data = N_VGetArrayPointer(ewt);
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine */
+  FIDA_EWT(y_data, ewt_data, IDA_userdata->ipar, IDA_userdata->rpar, &ier);
+
+  return(ier);
+}
diff --git a/src/ida/fcmix/fidajtimes.c b/src/ida/fcmix/fidajtimes.c
new file mode 100644
index 0000000..360beae
--- /dev/null
+++ b/src/ida/fcmix/fidajtimes.c
@@ -0,0 +1,121 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * The C function FIDAJtimes is to interface between the
+ * IDASPILS modules and the user-supplied Jacobian-vector
+ * product routine FIDAJTIMES. Note the use of the generic name
+ * FIDA_JTIMES below.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fida.h"     /* actual fn. names, prototypes and global vars.*/
+#include "ida_impl.h" /* definition of IDAMem type                    */
+
+#include <ida/ida_spils.h>
+
+/*************************************************/
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FIDA_JTIMES(realtype*, realtype*, realtype*,     /* T, Y, YP   */
+                          realtype*, realtype*, realtype*,     /* R, V, FJV  */
+                          realtype*, realtype*, realtype*,     /* CJ, EWT, H */
+                          long int*, realtype*,                /* IPAR, RPAR */
+                          realtype*, realtype*,                /* WK1, WK2   */
+                          int*);                               /* IER        */
+
+#ifdef __cplusplus
+}
+#endif
+
+/*************************************************/
+
+void FIDA_SPILSSETJAC(int *flag, int *ier)
+{
+  *ier = 0;
+
+  if (*flag == 0) {
+
+    *ier = IDASpilsSetJacTimesVecFn(IDA_idamem, NULL);
+
+  } else {
+
+    if (F2C_IDA_ewtvec == NULL) {
+      F2C_IDA_ewtvec = N_VClone(F2C_IDA_vec);
+      if (F2C_IDA_ewtvec == NULL) {
+        *ier = -1;
+        return;
+      }
+    }
+
+    *ier = IDASpilsSetJacTimesVecFn(IDA_idamem, FIDAJtimes);
+
+  }
+
+  return;
+}
+
+/*************************************************/
+
+int FIDAJtimes(realtype t, N_Vector yy, N_Vector yp, N_Vector rr,
+	       N_Vector v, N_Vector Jv,
+	       realtype c_j, void *user_data,
+	       N_Vector vtemp1, N_Vector vtemp2)
+{
+  realtype *yy_data, *yp_data, *rr_data, *vdata, *Jvdata, *ewtdata;
+  realtype *v1data, *v2data;
+  realtype h;
+  FIDAUserData IDA_userdata;
+  int ier;
+
+  /* Initialize all pointers to NULL */
+  yy_data = yp_data = rr_data = vdata = Jvdata = ewtdata = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  IDAGetErrWeights(IDA_idamem, F2C_IDA_ewtvec);
+  IDAGetLastStep(IDA_idamem, &h);
+
+  /* Get pointers to vector data */
+  yy_data = N_VGetArrayPointer(yy);
+  yp_data = N_VGetArrayPointer(yp);
+  rr_data = N_VGetArrayPointer(rr);
+  ewtdata = N_VGetArrayPointer(F2C_IDA_ewtvec);
+  vdata   = N_VGetArrayPointer(v);
+  Jvdata  = N_VGetArrayPointer(Jv);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine */
+  FIDA_JTIMES(&t, yy_data, yp_data, rr_data, vdata, Jvdata,
+	      &c_j, ewtdata, &h, 
+              IDA_userdata->ipar, IDA_userdata->rpar,
+              v1data, v2data, &ier);
+
+  return(ier);
+}
diff --git a/src/ida/fcmix/fidaklu.c b/src/ida/fcmix/fidaklu.c
new file mode 100644
index 0000000..4191bd6
--- /dev/null
+++ b/src/ida/fcmix/fidaklu.c
@@ -0,0 +1,52 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4654 $
+ * $Date: 2016-02-17 20:12:58 -0800 (Wed, 17 Feb 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2015, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the Fortran interface to
+ * the IDAKLU solver. See fida.h for usage.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fida.h"
+#include "ida_impl.h"
+#include <ida/ida_klu.h>
+ 
+/*
+ * ----------------------------------------------------------------
+ * Function : FIDA_KLU
+ * ----------------------------------------------------------------
+ */
+
+void FIDA_KLU(int *neq, int *nnz, int *sparsetype, int *ordering, int *ier)
+{
+  *ier = IDAKLU(IDA_idamem, *neq, *nnz, *sparsetype);
+  IDAKLUSetOrdering(IDA_idamem, *ordering);
+  IDA_ls = IDA_LS_KLU;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FIDA_KLUReinit
+ * ----------------------------------------------------------------
+ */
+
+void FIDA_KLUREINIT(int *neq, int *nnz, int *reinit_type, int *ier)
+{
+  *ier = IDAKLUReInit(IDA_idamem, *neq, *nnz, *reinit_type);
+}
+
diff --git a/src/ida/fcmix/fidalapack.c b/src/ida/fcmix/fidalapack.c
new file mode 100644
index 0000000..2faf2ea
--- /dev/null
+++ b/src/ida/fcmix/fidalapack.c
@@ -0,0 +1,58 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for IDA/IDALAPACK.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fida.h"     /* actual function names, prototypes and global vars.*/
+#include "ida_impl.h" /* definition of IDAMem type                         */
+
+#include <ida/ida_lapack.h>
+
+/*************************************************/
+
+void FIDA_LAPACKDENSE(int *neq, int *ier)
+{
+
+  *ier = 0;
+
+  *ier = IDALapackDense(IDA_idamem, *neq);
+
+  IDA_ls = IDA_LS_LAPACKDENSE;
+
+  return;
+}
+
+/*************************************************/
+
+void FIDA_LAPACKBAND(int *neq, int *mupper, int *mlower, int *ier)
+{
+
+  *ier = 0;
+
+  *ier = IDALapackBand(IDA_idamem, *neq, *mupper, *mlower);
+
+  IDA_ls = IDA_LS_LAPACKBAND;
+
+  return;
+}
+
+/*************************************************/
diff --git a/src/ida/fcmix/fidalapband.c b/src/ida/fcmix/fidalapband.c
new file mode 100644
index 0000000..4b6ecba
--- /dev/null
+++ b/src/ida/fcmix/fidalapband.c
@@ -0,0 +1,117 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for IDA/IDALAPACK, for the case of
+ * a user-supplied Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fida.h"     /* function names, prototypes, global vars.*/
+#include "ida_impl.h" /* definition of IDAMem type               */
+
+#include <ida/ida_lapack.h>
+
+/*************************************************/
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FIDA_BJAC(long int*, long int*, long int*, long int*,
+                        realtype*, realtype*, realtype*, realtype*,
+                        realtype*, realtype*, realtype*, realtype*,
+                        long int*, realtype*,
+                        realtype*, realtype*, realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*************************************************/
+
+void FIDA_BANDSETJAC(int *flag, int *ier)
+{
+  *ier = 0;
+
+  if (*flag == 0) {
+    *ier = IDADlsSetBandJacFn(IDA_idamem, NULL);
+  } else {
+    if (F2C_IDA_ewtvec == NULL) {
+      F2C_IDA_ewtvec = N_VClone(F2C_IDA_vec);
+      if (F2C_IDA_ewtvec == NULL) {
+        *ier = -1;
+        return;
+      }
+    }
+    *ier = IDADlsSetBandJacFn(IDA_idamem, FIDABandJac);
+  }
+
+  return;
+}
+
+/*************************************************/
+
+int FIDALapackBandJac(long int N, long int mupper, long int mlower,
+                      realtype t, realtype c_j, 
+                      N_Vector yy, N_Vector yp, N_Vector rr,
+                      DlsMat J, void *user_data,
+                      N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype *yy_data, *yp_data, *rr_data, *jacdata, *ewtdata, *v1data, *v2data, *v3data;
+  realtype h;
+  long int eband;
+  int ier;
+  FIDAUserData IDA_userdata;
+
+  /* Initialize all pointers to NULL */
+  yy_data = yp_data = rr_data = jacdata = ewtdata = NULL;
+  v1data = v2data = v3data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  IDAGetErrWeights(IDA_idamem, F2C_IDA_ewtvec);
+  IDAGetLastStep(IDA_idamem, &h);
+
+  /* Get pointers to vector data */
+  yy_data = N_VGetArrayPointer(yy);
+  yp_data = N_VGetArrayPointer(yp);
+  rr_data = N_VGetArrayPointer(rr);
+  ewtdata = N_VGetArrayPointer(F2C_IDA_ewtvec);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+
+  eband = (J->s_mu) + mlower + 1;
+  jacdata = BAND_COL(J,0) - mupper;
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine */
+  FIDA_BJAC(&N, &mupper, &mlower, &eband, &t, yy_data, yp_data, rr_data,
+            &c_j, jacdata, ewtdata, &h, 
+            IDA_userdata->ipar, IDA_userdata->rpar,
+            v1data, v2data, v3data, &ier);
+
+  return(ier);
+}
diff --git a/src/ida/fcmix/fidalapdense.c b/src/ida/fcmix/fidalapdense.c
new file mode 100644
index 0000000..7cdbc5c
--- /dev/null
+++ b/src/ida/fcmix/fidalapdense.c
@@ -0,0 +1,116 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for IDA/IDALAPACK, for the case
+ * of a user-supplied Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fida.h"     /* actual function names, prototypes and global vars.*/
+#include "ida_impl.h" /* definition of IDAMem type                         */
+
+#include <ida/ida_lapack.h>
+
+/*************************************************/
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FIDA_DJAC(long int*, 
+                        realtype*, realtype*, realtype*, realtype*,
+                        realtype*, 
+                        realtype*, realtype*, realtype*,
+                        long int*, realtype*,
+                        realtype*, realtype*, realtype*, 
+                        int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*************************************************/
+
+void FIDA_LAPACKDENSESETJAC(int *flag, int *ier)
+{
+  *ier = 0;
+
+  if (*flag == 0) {
+    *ier = IDADlsSetDenseJacFn(IDA_idamem, NULL);
+  } else {
+    if (F2C_IDA_ewtvec == NULL) {
+      F2C_IDA_ewtvec = N_VClone(F2C_IDA_vec);
+      if (F2C_IDA_ewtvec == NULL) {
+        *ier = -1;
+        return;
+      }
+    }
+    *ier = IDADlsSetDenseJacFn(IDA_idamem, FIDADenseJac);
+  }
+
+  return;
+}
+
+/*************************************************/
+
+int FIDALapackDenseJac(long int N, realtype t, realtype c_j, 
+                       N_Vector yy, N_Vector yp, N_Vector rr,
+                       DlsMat Jac, void *user_data,
+                       N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype *yy_data, *yp_data, *rr_data, *jacdata, *ewtdata, *v1data, *v2data, *v3data;
+  realtype h;
+  int ier;
+  FIDAUserData IDA_userdata;
+
+  /* Initialize all pointers to NULL */
+  yy_data = yp_data = rr_data = jacdata = ewtdata = NULL;
+  v1data = v2data = v3data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  IDAGetErrWeights(IDA_idamem, F2C_IDA_ewtvec);
+  IDAGetLastStep(IDA_idamem, &h);
+
+  /* Get pointers to vector data */
+  yy_data = N_VGetArrayPointer(yy);
+  yp_data = N_VGetArrayPointer(yp);
+  rr_data = N_VGetArrayPointer(rr);
+  ewtdata = N_VGetArrayPointer(F2C_IDA_ewtvec);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+
+  jacdata = DENSE_COL(Jac,0);
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine*/
+  FIDA_DJAC(&N, &t, yy_data, yp_data, rr_data, jacdata,
+            &c_j, ewtdata, &h, 
+            IDA_userdata->ipar, IDA_userdata->rpar,
+            v1data, v2data, v3data, &ier);
+
+  return(ier);
+}
diff --git a/src/ida/fcmix/fidapreco.c b/src/ida/fcmix/fidapreco.c
new file mode 100644
index 0000000..14b8b21
--- /dev/null
+++ b/src/ida/fcmix/fidapreco.c
@@ -0,0 +1,164 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * The C function FIDAPSet is to interface between the IDASPILS
+ * modules and the user-supplied preconditioner setup routine FIDAPSET.
+ * Note the use of the generic name FIDA_PSET below.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fida.h"     /* actual fn. names, prototypes and global vars.*/
+#include "ida_impl.h" /* definition of IDAMem type                    */
+
+#include <ida/ida_spils.h>
+
+/*************************************************/
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+  extern void FIDA_PSET(realtype*, realtype*, realtype*, realtype*,
+                        realtype*, realtype*, realtype*, 
+                        long int*, realtype*,
+                        realtype*, realtype*, realtype*, 
+                        int*);
+  
+  extern void FIDA_PSOL(realtype*, realtype*, realtype*, realtype*,
+                        realtype*, realtype*, realtype*, realtype*,
+                        realtype*, 
+                        long int*, realtype*,
+                        realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*************************************************/
+
+void FIDA_SPILSSETPREC(int *flag, int *ier)
+{
+  *ier = 0;
+
+  if (*flag == 0) {
+
+    *ier = IDASpilsSetPreconditioner(IDA_idamem, NULL, NULL);
+
+  } else {
+
+    if (F2C_IDA_ewtvec == NULL) {
+      F2C_IDA_ewtvec = N_VClone(F2C_IDA_vec);
+      if (F2C_IDA_ewtvec == NULL) {
+        *ier = -1;
+        return;
+      }
+    }
+
+    *ier = IDASpilsSetPreconditioner(IDA_idamem, (IDASpilsPrecSetupFn) FIDAPSet,
+				     (IDASpilsPrecSolveFn) FIDAPSol);
+  }
+
+  return;
+}
+
+/*************************************************/
+
+int FIDAPSet(realtype t, N_Vector yy, N_Vector yp, N_Vector rr,
+	     realtype c_j, void *user_data,
+	     N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  realtype *yy_data, *yp_data, *rr_data, *ewtdata, *v1data, *v2data, *v3data;
+  realtype h;
+  int ier;
+  FIDAUserData IDA_userdata;
+
+  /* Initialize all pointers to NULL */
+  yy_data = yp_data = rr_data = ewtdata = NULL;
+  v1data = v2data = v3data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  IDAGetErrWeights(IDA_idamem, F2C_IDA_ewtvec);
+  IDAGetLastStep(IDA_idamem, &h);
+
+  /* Get pointers to vector data */
+  yy_data = N_VGetArrayPointer(yy);
+  yp_data = N_VGetArrayPointer(yp);
+  rr_data = N_VGetArrayPointer(rr);
+  ewtdata = N_VGetArrayPointer(F2C_IDA_ewtvec);
+  v1data = N_VGetArrayPointer(vtemp1);
+  v2data = N_VGetArrayPointer(vtemp2);
+  v3data = N_VGetArrayPointer(vtemp3);
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine */
+  FIDA_PSET(&t, yy_data, yp_data, rr_data, &c_j, ewtdata, &h,
+            IDA_userdata->ipar, IDA_userdata->rpar,
+	    v1data, v2data, v3data, &ier);
+
+  return(ier);
+}
+
+/*************************************************/
+
+int FIDAPSol(realtype t, N_Vector yy, N_Vector yp, N_Vector rr,
+	     N_Vector rvec, N_Vector zvec,
+	     realtype c_j, realtype delta, void *user_data,
+	     N_Vector vtemp1)
+{
+  realtype *yy_data, *yp_data, *rr_data, *ewtdata, *rdata, *zdata, *v1data;
+  int ier;
+  FIDAUserData IDA_userdata;
+
+  /* Initialize all pointers to NULL */
+  yy_data = yp_data = rr_data = ewtdata = zdata = v1data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  IDAGetErrWeights(IDA_idamem, F2C_IDA_ewtvec);
+
+  /* Get pointers to vector data */
+  yy_data = N_VGetArrayPointer(yy);
+  yp_data = N_VGetArrayPointer(yp);
+  rr_data = N_VGetArrayPointer(rr);
+  ewtdata = N_VGetArrayPointer(F2C_IDA_ewtvec);
+  rdata   = N_VGetArrayPointer(rvec);
+  zdata   = N_VGetArrayPointer(zvec);
+  v1data  = N_VGetArrayPointer(vtemp1);
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  /* Call user-supplied routine */
+  FIDA_PSOL(&t, yy_data, yp_data, rr_data, rdata, zdata,
+	    &c_j, &delta, ewtdata, 
+            IDA_userdata->ipar, IDA_userdata->rpar,
+            v1data, &ier);
+
+  return(ier);
+}
diff --git a/src/ida/fcmix/fidaroot.c b/src/ida/fcmix/fidaroot.c
new file mode 100644
index 0000000..9d19b8c
--- /dev/null
+++ b/src/ida/fcmix/fidaroot.c
@@ -0,0 +1,93 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Alan C. Hindmarsh @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * The FIDAROOT module contains the routines necessary to use
+ * the rootfinding feature of the IDA module and to interface
+ * with the user-supplied Fortran subroutine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fida.h"       /* actual function names, prototypes and global vars.*/
+#include "fidaroot.h"   /* prototypes of interfaces to IDA                   */
+#include "ida_impl.h"   /* definition of IDAMeme type                        */
+
+/***************************************************************************/
+
+/* Prototype of the Fortran routine */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+  extern void FIDA_ROOTFN(realtype*,  /* T    */ 
+                          realtype*,  /* Y    */
+                          realtype*,  /* YP   */
+                          realtype*,  /* G    */
+                          long int*,  /* IPAR */
+                          realtype*,  /* RPAR */
+                          int*);      /* IER  */
+#ifdef __cplusplus
+}
+#endif
+
+/***************************************************************************/
+
+void FIDA_ROOTINIT(int *nrtfn, int *ier)
+{
+  *ier = IDARootInit(IDA_idamem, *nrtfn, (IDARootFn) FIDArootfunc);
+  IDA_nrtfn = *nrtfn;
+
+  return;
+}
+
+/***************************************************************************/
+
+void FIDA_ROOTINFO(int *nrtfn, int *info, int *ier)
+{
+  *ier = IDAGetRootInfo(IDA_idamem, info);
+  return; 
+}
+
+/***************************************************************************/
+
+void FIDA_ROOTFREE(void)
+{
+  IDARootInit(IDA_idamem, 0, NULL);
+
+  return;
+}
+
+/***************************************************************************/
+
+int FIDArootfunc(realtype t, N_Vector y, N_Vector yp, realtype *gout,
+                 void *user_data)
+{
+  int ier;
+  realtype *ydata, *ypdata;
+  FIDAUserData IDA_userdata;
+
+  ydata  = N_VGetArrayPointer(y);
+  ypdata = N_VGetArrayPointer(yp);
+
+  IDA_userdata = (FIDAUserData) user_data;
+
+  FIDA_ROOTFN(&t, ydata, ypdata, gout, IDA_userdata->ipar, IDA_userdata->rpar, &ier);
+
+  return(ier);
+}
diff --git a/src/ida/fcmix/fidaroot.h b/src/ida/fcmix/fidaroot.h
new file mode 100644
index 0000000..73b71b2
--- /dev/null
+++ b/src/ida/fcmix/fidaroot.h
@@ -0,0 +1,146 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Alan C. Hindmarsh @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the Fortran interface include file for the rootfinding
+ * feature of IDA.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * ==============================================================================
+ *
+ *                   FIDAROOT Interface Package
+ *
+ * The FIDAROOT interface package allows programs written in FORTRAN to
+ * use the rootfinding feature of the IDA solver module.
+ *
+ * The user-callable functions constituting the FIDAROOT package are the
+ * following: FIDAROOTINIT, FIDAROOTINFO, and FIDAROOTFREE. The corresponding
+ * IDA subroutine called by each interface function is given below.
+ *
+ *   ------------------      ---------------------
+ *  | FIDAROOT routine |    | IDA function called |
+ *   ------------------      ---------------------
+ *      FIDAROOTINIT     ->     IDARootInit
+ *      FIDAROOTINFO     ->     IDAGetRootInfo
+ *      FIDAROOTFREE     ->     IDARootInit
+ *
+ * FIDAROOTFN is a user-supplied subroutine defining the functions whose
+ * roots are sought.
+ *
+ * ==============================================================================
+ *
+ *                     Usage of the FIDAROOT Interface Package
+ *
+ * 1. In order to use the rootfinding feature of the IDA package the user must
+ * define the following subroutine:
+ *
+ *   SUBROUTINE FIDAROOTFN (T, Y, YP, G, IPAR, RPAR, IER)
+ *   DIMENSION Y(*), YP(*), G(*)
+ *
+ * The arguments are:
+ *   T  = independent variable value t  [input]
+ *   Y  = dependent variable vector y  [input]
+ *   YP = dependent variable derivative vector y'  [input]
+ *   G  = function values g(t,y,y')  [output]
+ *   IPAR, RPAR = user (integer and real) data [input/output]
+ *   IER = return flag (set on 0 if successful, non-zero if an error occurred)
+ *
+ * 2. After calling FIDAMALLOC but prior to calling FIDASOLVE, the user must
+ * allocate and initialize memory for the FIDAROOT module by making the
+ * following call:
+ *
+ *   CALL FIDAROOTINIT (NRTFN, IER)
+ *
+ * The arguments are:
+ *   NRTFN = total number of root functions  [input]
+ *   IER   = return completion flag (0 = success, -1 = IDA memory NULL and
+ *           -14 = memory allocation error)  [output]
+ *
+ * 3. After calling FIDA, to see whether a root was found, test the FIDA
+ * return flag IER.  The value IER = 2 means one or more roots were found.
+ *
+ * 4. If a root was found, and if NRTFN > 1, then to determine which root
+ * functions G(*) were found to have a root, make the following call:
+ *     CALL FIDAROOTINFO (NRTFN, INFO, IER)
+ * The arguments are:
+ *   NRTFN = total number of root functions  [input]
+ *   INFO  = integer array of length NRTFN, with values 0 or 1 [output]
+ *           For i = 1,...,NRTFN, G(i) was found to have a root if INFO(i) = 1.
+ *   IER   = completion flag (0 = success,  negative = failure)
+ *
+ * 5. The total number of calls made to the root function (FIDAROOTFN),
+ * NGE, can be obtained from IOUT(12).
+ *
+ * If the FIDA/IDA memory block is reinitialized to solve a different
+ * problem via a call to FIDAREINIT, then the counter variable NGE is cleared
+ * (reset to zero).
+ *
+ * 6. To free the memory resources allocated by a prior call to FIDAROOTINIT,
+ * make the following call:
+ *   CALL FIDAROOTFREE
+ * See the IDA documentation for additional information.
+ *
+ * ==============================================================================
+ */
+
+#ifndef _FIDAROOT_H
+#define _FIDAROOT_H
+
+/* header files */
+#include <sundials/sundials_nvector.h> /* definition of type N_Vector          */
+#include <sundials/sundials_types.h>   /* definition of SUNDIALS type realtype */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Definitions of interface function names */
+
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FIDA_ROOTINIT SUNDIALS_F77_FUNC(fidarootinit, FIDAROOTINIT)
+#define FIDA_ROOTINFO SUNDIALS_F77_FUNC(fidarootinfo, FIDAROOTINFO)
+#define FIDA_ROOTFREE SUNDIALS_F77_FUNC(fidarootfree, FIDAROOTFREE)
+#define FIDA_ROOTFN   SUNDIALS_F77_FUNC(fidarootfn, FIDAROOTFN)
+
+#else
+
+#define FIDA_ROOTINIT fidarootinit_
+#define FIDA_ROOTINFO fidarootinfo_
+#define FIDA_ROOTFREE fidarootfree_
+#define FIDA_ROOTFN   fidarootfn_
+
+#endif
+
+/* Prototypes of exported function */
+
+void FIDA_ROOTINIT(int *nrtfn, int *ier);
+void FIDA_ROOTINFO(int *nrtfn, int *info, int *ier);
+void FIDA_ROOTFREE(void);
+
+/* Prototype of function called by IDA module */
+
+int FIDArootfunc(realtype t, N_Vector y, N_Vector yp, realtype *gout,
+                 void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/src/ida/fcmix/fidasparse.c b/src/ida/fcmix/fidasparse.c
new file mode 100644
index 0000000..5253d47
--- /dev/null
+++ b/src/ida/fcmix/fidasparse.c
@@ -0,0 +1,82 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4815 $
+ * $Date: 2016-07-20 16:51:55 -0700 (Wed, 20 Jul 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ *                Daniel R. Reynolds @ SMU
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2015, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fida.h"
+#include "ida_impl.h"
+#include <ida/ida_sparse.h>
+
+/* Prototype of the Fortran routine */
+ 
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+ 
+extern void FIDA_SPJAC(realtype *T, realtype *CJ, realtype *Y, 
+		       realtype *YP, realtype *R, int *N, int *NNZ, 
+		       realtype *JDATA, int *JRVALS, 
+		       int *JCPTRS, realtype *H, 
+		       long int *IPAR, realtype *RPAR, 
+		       realtype *V1, realtype *V2, 
+		       realtype *V3, int *ier);
+ 
+#ifdef __cplusplus
+}
+#endif
+ 
+/*=============================================================*/
+
+/* Fortran interface to C routine IDASlsSetSparseJacFn; see
+   fida.h for further information */
+void FIDA_SPARSESETJAC(int *ier)
+{
+  *ier = IDASlsSetSparseJacFn(IDA_idamem, FIDASparseJac);
+}
+
+/*=============================================================*/
+ 
+/* C interface to user-supplied Fortran routine FIDASPJAC; see 
+   fida.h for additional information  */
+int FIDASparseJac(realtype t, realtype cj, N_Vector y, N_Vector yp,
+		  N_Vector fval, SlsMat J, void *user_data, 
+		  N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3)
+{
+  int ier;
+  realtype *ydata, *ypdata, *rdata, *v1data, *v2data, *v3data;
+  realtype h;
+  FIDAUserData IDA_userdata;
+
+  IDAGetLastStep(IDA_idamem, &h);
+  ydata   = N_VGetArrayPointer(y);
+  ypdata  = N_VGetArrayPointer(yp);
+  rdata  = N_VGetArrayPointer(fval);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+  v3data  = N_VGetArrayPointer(vtemp3);
+  IDA_userdata = (FIDAUserData) user_data;
+
+  FIDA_SPJAC(&t, &cj, ydata, ypdata, rdata, &(J->NP), &(J->NNZ),
+	    J->data, J->indexvals, J->indexptrs, &h, 
+	    IDA_userdata->ipar, IDA_userdata->rpar, v1data, 
+	    v2data, v3data, &ier); 
+  return(ier);
+}
+
diff --git a/src/ida/fcmix/fidasuperlumt.c b/src/ida/fcmix/fidasuperlumt.c
new file mode 100644
index 0000000..c3c9d71
--- /dev/null
+++ b/src/ida/fcmix/fidasuperlumt.c
@@ -0,0 +1,42 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4402 $
+ * $Date: 2015-02-28 19:35:39 -0800 (Sat, 28 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2015, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the Fortran interface to
+ * the IDASuperLUMT solver. See fida.h for usage.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fida.h"
+#include "ida_impl.h"
+#include <ida/ida_superlumt.h>
+ 
+/*
+ * ----------------------------------------------------------------
+ * Function : FIDA_SUPERLUMT
+ * ----------------------------------------------------------------
+ */
+
+void FIDA_SUPERLUMT(int *nthreads, int *neq, int *nnz, int *ordering, int *ier)
+{
+  *ier = IDASuperLUMT(IDA_idamem, *nthreads, *neq, *nnz);
+  IDASuperLUMTSetOrdering(IDA_idamem, *ordering);
+  IDA_ls = IDA_LS_SUPERLUMT;
+}
+
+
diff --git a/src/ida/ida.c b/src/ida/ida.c
new file mode 100644
index 0000000..4dd8217
--- /dev/null
+++ b/src/ida/ida.c
@@ -0,0 +1,3433 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4845 $
+ * $Date: 2016-08-03 15:45:09 -0700 (Wed, 03 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan Hindmarsh, Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the main IDA solver.
+ * It is independent of the linear solver in use.
+ * -----------------------------------------------------------------
+ *
+ * EXPORTED FUNCTIONS
+ * ------------------
+ *   Creation, allocation and re-initialization functions
+ *       IDACreate
+ *       IDAInit
+ *       IDAReInit
+ *       IDARootInit
+ *   Main solver function
+ *       IDASolve
+ *   Interpolated output and extraction functions
+ *       IDAGetDky
+ *   Deallocation functions
+ *       IDAFree
+ *
+ * PRIVATE FUNCTIONS
+ * -----------------
+ *       IDACheckNvector
+ *   Memory allocation/deallocation
+ *       IDAAllocVectors
+ *       IDAFreeVectors
+ *   Initial setup
+ *       IDAInitialSetup
+ *       IDAEwtSet
+ *       IDAEwtSetSS
+ *       IDAEwtSetSV
+ *   Stopping tests
+ *       IDAStopTest1
+ *       IDAStopTest2
+ *   Error handler
+ *       IDAHandleFailure
+ *   Main IDAStep function
+ *       IDAStep
+ *       IDASetCoeffs
+ *   Nonlinear solver functions
+ *       IDANls
+ *       IDAPredict
+ *       IDANewtonIter
+ *   Error test
+ *       IDATestError
+ *       IDARestore
+ *   Handler for convergence and/or error test failures
+ *       IDAHandleNFlag
+ *       IDAReset
+ *   Function called after a successful step
+ *       IDACompleteStep
+ *   Get solution
+ *       IDAGetSolution
+ *   Norm functions
+ *       IDAWrmsNorm
+ *   Functions for rootfinding
+ *       IDARcheck1
+ *       IDARcheck2
+ *       IDARcheck3
+ *       IDARootfind
+ *   IDA Error message handling functions 
+ *       IDAProcessError
+ *       IDAErrHandler
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "ida_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * MACRO DEFINITIONS
+ * =================================================================
+ */
+
+/* Macro: loop */
+#define loop for(;;)
+
+/* 
+ * =================================================================
+ * IDAS PRIVATE CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO      RCONST(0.0)    /* real 0.0    */
+#define HALF      RCONST(0.5)    /* real 0.5    */
+#define QUARTER   RCONST(0.25)   /* real 0.25   */
+#define TWOTHIRDS RCONST(0.667)  /* real 2/3    */
+#define ONE       RCONST(1.0)    /* real 1.0    */
+#define ONEPT5    RCONST(1.5)    /* real 1.5    */
+#define TWO       RCONST(2.0)    /* real 2.0    */
+#define FOUR      RCONST(4.0)    /* real 4.0    */
+#define FIVE      RCONST(5.0)    /* real 5.0    */
+#define TEN       RCONST(10.0)   /* real 10.0   */
+#define TWELVE    RCONST(12.0)   /* real 12.0   */
+#define TWENTY    RCONST(20.0)   /* real 20.0   */
+#define HUNDRED   RCONST(100.0)  /* real 100.0  */
+#define PT9       RCONST(0.9)    /* real 0.9    */
+#define PT99      RCONST(0.99)   /* real 0.99   */
+#define PT1       RCONST(0.1)    /* real 0.1    */
+#define PT01      RCONST(0.01)   /* real 0.01   */
+#define PT001     RCONST(0.001)  /* real 0.001  */
+#define PT0001    RCONST(0.0001) /* real 0.0001 */
+
+/* 
+ * =================================================================
+ * IDAS ROUTINE-SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+/* 
+ * Control constants for lower-level functions used by IDASolve 
+ * ------------------------------------------------------------
+ */
+
+/* IDAStep control constants */
+
+#define PREDICT_AGAIN 20
+
+/* Return values for lower level routines used by IDASolve */
+
+#define IDA_RES_RECVR    +1
+#define IDA_LSETUP_RECVR +2
+#define IDA_LSOLVE_RECVR +3
+
+#define IDA_NCONV_RECVR  +4
+#define IDA_CONSTR_RECVR +5
+#define CONTINUE_STEPS   +99
+
+/* IDACompleteStep constants */
+
+#define UNSET            -1
+#define LOWER            +1 
+#define RAISE            +2 
+#define MAINTAIN         +3
+
+/* IDATestError constants */
+
+#define ERROR_TEST_FAIL  +7
+
+/*
+ * Control constants for lower-level rootfinding functions
+ * -------------------------------------------------------
+ */
+
+#define RTFOUND          +1
+#define CLOSERT          +3
+
+/*
+ * Control constants for tolerances
+ * --------------------------------
+ */
+
+#define IDA_NN  0
+#define IDA_SS  1
+#define IDA_SV  2
+#define IDA_WF  3
+
+/*
+ * Algorithmic constants
+ * ---------------------
+ */
+
+#define MXNCF           10  /* max number of convergence failures allowed */
+#define MXNEF           10  /* max number of error test failures allowed  */
+#define MAXNH            5  /* max. number of h tries in IC calc. */
+#define MAXNJ            4  /* max. number of J tries in IC calc. */
+#define MAXNI           10  /* max. Newton iterations in IC calc. */
+#define EPCON RCONST(0.33)  /* Newton convergence test constant */
+#define MAXBACKS       100  /* max backtracks per Newton step in IDACalcIC */
+
+/* IDANewtonIter constants */
+
+#define MAXIT   4
+#define RATEMAX RCONST(0.9)
+#define XRATE   RCONST(0.25)        
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTION PROTOTYPES
+ * =================================================================
+ */
+
+static booleantype IDACheckNvector(N_Vector tmpl);
+
+/* Memory allocation/deallocation */
+
+static booleantype IDAAllocVectors(IDAMem IDA_mem, N_Vector tmpl);
+static void IDAFreeVectors(IDAMem IDA_mem);
+
+/* Initial setup */
+
+int IDAInitialSetup(IDAMem IDA_mem);
+static int IDAEwtSetSS(IDAMem IDA_mem, N_Vector ycur, N_Vector weight);
+static int IDAEwtSetSV(IDAMem IDA_mem, N_Vector ycur, N_Vector weight);
+
+/* Main IDAStep function */
+
+static int IDAStep(IDAMem IDA_mem);
+
+/* Function called at beginning of step */
+
+static void IDASetCoeffs(IDAMem IDA_mem, realtype *ck);
+
+/* Nonlinear solver functions */
+
+static void IDAPredict(IDAMem IDA_mem);
+static int IDANls(IDAMem IDA_mem);
+static int IDANewtonIter(IDAMem IDA_mem);
+
+/* Error test */
+
+static int IDATestError(IDAMem IDA_mem, realtype ck, 
+                        realtype *err_k, realtype *err_km1);
+
+/* Handling of convergence and/or error test failures */
+
+static void IDARestore(IDAMem IDA_mem, realtype saved_t);
+static int IDAHandleNFlag(IDAMem IDA_mem, int nflag, realtype err_k, realtype err_km1,
+                          long int *ncfnPtr, int *ncfPtr, long int *netfPtr, int *nefPtr);
+static void IDAReset(IDAMem IDA_mem);
+
+/* Function called after a successful step */
+
+static void IDACompleteStep(IDAMem IDA_mem, realtype err_k, realtype err_km1);
+
+/* Function called to evaluate the solutions y(t) and y'(t) at t */
+
+int IDAGetSolution(void *ida_mem, realtype t, N_Vector yret, N_Vector ypret);
+
+/* Stopping tests and failure handling */
+
+static int IDAStopTest1(IDAMem IDA_mem, realtype tout,realtype *tret, 
+                        N_Vector yret, N_Vector ypret, int itask);
+static int IDAStopTest2(IDAMem IDA_mem, realtype tout, realtype *tret, 
+                        N_Vector yret, N_Vector ypret, int itask);
+static int IDAHandleFailure(IDAMem IDA_mem, int sflag);
+
+/* Functions for rootfinding */
+
+static int IDARcheck1(IDAMem IDA_mem);
+static int IDARcheck2(IDAMem IDA_mem);
+static int IDARcheck3(IDAMem IDA_mem);
+static int IDARootfind(IDAMem IDA_mem);
+
+/* Norm functions */
+
+realtype IDAWrmsNorm(IDAMem IDA_mem, N_Vector x, N_Vector w, booleantype mask);
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * Creation, allocation and re-initialization functions
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * IDACreate
+ *
+ * IDACreate creates an internal memory block for a problem to 
+ * be solved by IDA.
+ * If successful, IDACreate returns a pointer to the problem memory. 
+ * This pointer should be passed to IDAInit.  
+ * If an initialization error occurs, IDACreate prints an error 
+ * message to standard err and returns NULL. 
+ */
+
+void *IDACreate(void)
+{
+  IDAMem IDA_mem;
+
+  IDA_mem = NULL;
+  IDA_mem = (IDAMem) malloc(sizeof(struct IDAMemRec));
+  if (IDA_mem == NULL) {
+    IDAProcessError(NULL, 0, "IDA", "IDACreate", MSG_MEM_FAIL);
+    return (NULL);
+  }
+
+  /* Zero out ida_mem */
+  memset(IDA_mem, 0, sizeof(struct IDAMemRec));
+
+  /* Set unit roundoff in IDA_mem */
+  IDA_mem->ida_uround = UNIT_ROUNDOFF;
+
+  /* Set default values for integrator optional inputs */
+  IDA_mem->ida_res         = NULL;
+  IDA_mem->ida_user_data   = NULL;
+  IDA_mem->ida_itol        = IDA_NN;
+  IDA_mem->ida_user_efun   = FALSE;
+  IDA_mem->ida_efun        = NULL;
+  IDA_mem->ida_edata       = NULL;
+  IDA_mem->ida_ehfun       = IDAErrHandler;
+  IDA_mem->ida_eh_data     = IDA_mem;
+  IDA_mem->ida_errfp       = stderr;
+  IDA_mem->ida_maxord      = MAXORD_DEFAULT;
+  IDA_mem->ida_mxstep      = MXSTEP_DEFAULT;
+  IDA_mem->ida_hmax_inv    = HMAX_INV_DEFAULT;
+  IDA_mem->ida_hin         = ZERO;
+  IDA_mem->ida_epcon       = EPCON;
+  IDA_mem->ida_maxnef      = MXNEF;
+  IDA_mem->ida_maxncf      = MXNCF;
+  IDA_mem->ida_maxcor      = MAXIT;
+  IDA_mem->ida_suppressalg = FALSE;
+  IDA_mem->ida_id          = NULL;
+  IDA_mem->ida_constraints = NULL;
+  IDA_mem->ida_constraintsSet = FALSE;
+  IDA_mem->ida_tstopset    = FALSE;
+
+  /* set the saved value maxord_alloc */
+  IDA_mem->ida_maxord_alloc = MAXORD_DEFAULT;
+
+  /* Set default values for IC optional inputs */
+  IDA_mem->ida_epiccon = PT01 * EPCON;
+  IDA_mem->ida_maxnh   = MAXNH;
+  IDA_mem->ida_maxnj   = MAXNJ;
+  IDA_mem->ida_maxnit  = MAXNI;
+  IDA_mem->ida_maxbacks  = MAXBACKS;
+  IDA_mem->ida_lsoff   = FALSE;
+  IDA_mem->ida_steptol = SUNRpowerR(IDA_mem->ida_uround, TWOTHIRDS);
+
+  /* Initialize lrw and liw */
+  IDA_mem->ida_lrw = 25 + 5*MXORDP1;
+  IDA_mem->ida_liw = 38;
+
+  /* No mallocs have been done yet */
+  IDA_mem->ida_VatolMallocDone = FALSE;
+  IDA_mem->ida_constraintsMallocDone = FALSE;
+  IDA_mem->ida_idMallocDone = FALSE;
+  IDA_mem->ida_MallocDone = FALSE;
+
+  /* Return pointer to IDA memory block */
+  return((void *)IDA_mem);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define lrw   (IDA_mem->ida_lrw)
+#define liw   (IDA_mem->ida_liw)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDAInit
+ *
+ * IDAInit allocates and initializes memory for a problem. All
+ * problem specification inputs are checked for errors. If any
+ * error occurs during initialization, it is reported to the 
+ * error handler function.
+ */
+
+int IDAInit(void *ida_mem, IDAResFn res,
+            realtype t0, N_Vector yy0, N_Vector yp0)
+{
+  IDAMem IDA_mem;
+  booleantype nvectorOK, allocOK;
+  long int lrw1, liw1;
+
+  /* Check ida_mem */
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAInit", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+  
+  /* Check for legal input parameters */
+  
+  if (yy0 == NULL) { 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInit", MSG_Y0_NULL);
+    return(IDA_ILL_INPUT); 
+  }
+  
+  if (yp0 == NULL) { 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInit", MSG_YP0_NULL);
+    return(IDA_ILL_INPUT); 
+  }
+
+  if (res == NULL) { 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInit", MSG_RES_NULL);
+    return(IDA_ILL_INPUT); 
+  }
+
+  /* Test if all required vector operations are implemented */
+
+  nvectorOK = IDACheckNvector(yy0);
+  if (!nvectorOK) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInit", MSG_BAD_NVECTOR);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Set space requirements for one N_Vector */
+
+  if (yy0->ops->nvspace != NULL) {
+    N_VSpace(yy0, &lrw1, &liw1);
+  } else {
+    lrw1 = 0;
+    liw1 = 0;
+  }
+  IDA_mem->ida_lrw1 = lrw1;
+  IDA_mem->ida_liw1 = liw1;
+
+  /* Allocate the vectors (using yy0 as a template) */
+
+  allocOK = IDAAllocVectors(IDA_mem, yy0);
+  if (!allocOK) {
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDA", "IDAInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+ 
+  /* All error checking is complete at this point */
+
+  /* Copy the input parameters into IDA memory block */
+
+  IDA_mem->ida_res = res;
+  IDA_mem->ida_tn  = t0;
+
+  /* Set the linear solver addresses to NULL */
+
+  IDA_mem->ida_linit  = NULL;
+  IDA_mem->ida_lsetup = NULL;
+  IDA_mem->ida_lsolve = NULL;
+  IDA_mem->ida_lperf  = NULL;
+  IDA_mem->ida_lfree  = NULL;
+  IDA_mem->ida_lmem   = NULL;
+
+  /* Initialize the phi array */
+
+  N_VScale(ONE, yy0, IDA_mem->ida_phi[0]);  
+  N_VScale(ONE, yp0, IDA_mem->ida_phi[1]);  
+ 
+  /* Initialize all the counters and other optional output values */
+
+  IDA_mem->ida_nst     = 0;
+  IDA_mem->ida_nre     = 0;
+  IDA_mem->ida_ncfn    = 0;
+  IDA_mem->ida_netf    = 0;
+  IDA_mem->ida_nni     = 0;
+  IDA_mem->ida_nsetups = 0;
+  
+  IDA_mem->ida_kused = 0;
+  IDA_mem->ida_hused = ZERO;
+  IDA_mem->ida_tolsf = ONE;
+
+  IDA_mem->ida_nge = 0;
+
+  IDA_mem->ida_irfnd = 0;
+
+  /* Initialize root-finding variables */
+
+  IDA_mem->ida_glo     = NULL;
+  IDA_mem->ida_ghi     = NULL;
+  IDA_mem->ida_grout   = NULL;
+  IDA_mem->ida_iroots  = NULL;
+  IDA_mem->ida_rootdir = NULL;
+  IDA_mem->ida_gfun    = NULL;
+  IDA_mem->ida_nrtfn   = 0;
+  IDA_mem->ida_gactive  = NULL;
+  IDA_mem->ida_mxgnull  = 1;
+
+  /* Initial setup not done yet */
+
+  IDA_mem->ida_SetupDone = FALSE;
+
+  /* Problem memory has been successfully allocated */
+
+  IDA_mem->ida_MallocDone = TRUE;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define lrw1 (IDA_mem->ida_lrw1)
+#define liw1 (IDA_mem->ida_liw1)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDAReInit
+ *
+ * IDAReInit re-initializes IDA's memory for a problem, assuming
+ * it has already beeen allocated in a prior IDAInit call.
+ * All problem specification inputs are checked for errors.
+ * The problem size Neq is assumed to be unchanged since the call
+ * to IDAInit, and the maximum order maxord must not be larger.
+ * If any error occurs during reinitialization, it is reported to
+ * the error handler function.
+ * The return value is IDA_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int IDAReInit(void *ida_mem,
+              realtype t0, N_Vector yy0, N_Vector yp0)
+{
+  IDAMem IDA_mem;
+
+  /* Check for legal input parameters */
+  
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAReInit", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if problem was malloc'ed */
+  
+  if (IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDA", "IDAReInit", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  /* Check for legal input parameters */
+  
+  if (yy0 == NULL) { 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAReInit", MSG_Y0_NULL);
+    return(IDA_ILL_INPUT); 
+  }
+  
+  if (yp0 == NULL) { 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAReInit", MSG_YP0_NULL);
+    return(IDA_ILL_INPUT); 
+  }
+
+  /* Copy the input parameters into IDA memory block */
+
+  IDA_mem->ida_tn  = t0;
+
+  /* Initialize the phi array */
+
+  N_VScale(ONE, yy0, IDA_mem->ida_phi[0]);  
+  N_VScale(ONE, yp0, IDA_mem->ida_phi[1]);  
+ 
+  /* Initialize all the counters and other optional output values */
+ 
+  IDA_mem->ida_nst     = 0;
+  IDA_mem->ida_nre     = 0;
+  IDA_mem->ida_ncfn    = 0;
+  IDA_mem->ida_netf    = 0;
+  IDA_mem->ida_nni     = 0;
+  IDA_mem->ida_nsetups = 0;
+  
+  IDA_mem->ida_kused = 0;
+  IDA_mem->ida_hused = ZERO;
+  IDA_mem->ida_tolsf = ONE;
+
+  IDA_mem->ida_nge = 0;
+
+  IDA_mem->ida_irfnd = 0;
+
+  /* Initial setup not done yet */
+
+  IDA_mem->ida_SetupDone = FALSE;
+      
+  /* Problem has been successfully re-initialized */
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDASStolerances
+ * IDASVtolerances
+ * IDAWFtolerances
+ *
+ * These functions specify the integration tolerances. One of them
+ * MUST be called before the first call to IDA.
+ *
+ * IDASStolerances specifies scalar relative and absolute tolerances.
+ * IDASVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component).
+ * IDAWFtolerances specifies a user-provides function (of type IDAEwtFn)
+ *   which will be called to set the error weight vector.
+ */
+
+int IDASStolerances(void *ida_mem, realtype reltol, realtype abstol)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASStolerances", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDA", "IDASStolerances", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  /* Check inputs */
+
+  if (reltol < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASStolerances", MSG_BAD_RTOL);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (abstol < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASStolerances", MSG_BAD_ATOL);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  
+  IDA_mem->ida_rtol  = reltol;
+  IDA_mem->ida_Satol = abstol;
+
+  IDA_mem->ida_itol = IDA_SS;
+
+  IDA_mem->ida_user_efun = FALSE;
+  IDA_mem->ida_efun = IDAEwtSet;
+  IDA_mem->ida_edata = NULL; /* will be set to ida_mem in InitialSetup; */
+
+  return(IDA_SUCCESS);
+}
+
+
+int IDASVtolerances(void *ida_mem, realtype reltol, N_Vector abstol)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASVtolerances", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDA", "IDASVtolerances", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  /* Check inputs */
+
+  if (reltol < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASVtolerances", MSG_BAD_RTOL);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (N_VMin(abstol) < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASVtolerances", MSG_BAD_ATOL);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  
+  if ( !(IDA_mem->ida_VatolMallocDone) ) {
+    IDA_mem->ida_Vatol = N_VClone(IDA_mem->ida_ewt);
+    lrw += lrw1;
+    liw += liw1;
+    IDA_mem->ida_VatolMallocDone = TRUE;
+  }
+
+  IDA_mem->ida_rtol = reltol;
+  N_VScale(ONE, abstol, IDA_mem->ida_Vatol);
+
+  IDA_mem->ida_itol = IDA_SV;
+
+  IDA_mem->ida_user_efun = FALSE;
+  IDA_mem->ida_efun = IDAEwtSet;
+  IDA_mem->ida_edata = NULL; /* will be set to ida_mem in InitialSetup; */
+
+  return(IDA_SUCCESS);
+}
+
+
+int IDAWFtolerances(void *ida_mem, IDAEwtFn efun)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAWFtolerances", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDA", "IDAWFtolerances", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  IDA_mem->ida_itol = IDA_WF;
+
+  IDA_mem->ida_user_efun = TRUE;
+  IDA_mem->ida_efun = efun;
+  IDA_mem->ida_edata = NULL; /* will be set to user_data in InitialSetup */ 
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define gfun    (IDA_mem->ida_gfun)
+#define glo     (IDA_mem->ida_glo)
+#define ghi     (IDA_mem->ida_ghi)
+#define grout   (IDA_mem->ida_grout)
+#define iroots  (IDA_mem->ida_iroots)
+#define rootdir (IDA_mem->ida_rootdir)
+#define gactive (IDA_mem->ida_gactive)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDARootInit
+ *
+ * IDARootInit initializes a rootfinding problem to be solved
+ * during the integration of the DAE system.  It loads the root
+ * function pointer and the number of root functions, and allocates
+ * workspace memory.  The return value is IDA_SUCCESS = 0 if no
+ * errors occurred, or a negative value otherwise.
+ */
+
+int IDARootInit(void *ida_mem, int nrtfn, IDARootFn g)
+{
+  IDAMem IDA_mem;
+  int i, nrt;
+
+  /* Check ida_mem pointer */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDARootInit", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  nrt = (nrtfn < 0) ? 0 : nrtfn;
+
+  /* If rerunning IDARootInit() with a different number of root
+     functions (changing number of gfun components), then free
+     currently held memory resources */
+  if ((nrt != IDA_mem->ida_nrtfn) && (IDA_mem->ida_nrtfn > 0)) {
+
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); iroots = NULL;
+    free(gactive); gactive = NULL;
+
+    lrw -= 3 * (IDA_mem->ida_nrtfn);
+    liw -= 3 * (IDA_mem->ida_nrtfn);
+
+  }
+
+  /* If IDARootInit() was called with nrtfn == 0, then set ida_nrtfn to
+     zero and ida_gfun to NULL before returning */
+  if (nrt == 0) {
+    IDA_mem->ida_nrtfn = nrt;
+    gfun = NULL;
+    return(IDA_SUCCESS);
+  }
+
+  /* If rerunning IDARootInit() with the same number of root functions
+     (not changing number of gfun components), then check if the root
+     function argument has changed */
+  /* If g != NULL then return as currently reserved memory resources
+     will suffice */
+  if (nrt == IDA_mem->ida_nrtfn) {
+    if (g != gfun) {
+      if (g == NULL) {
+	free(glo); glo = NULL;
+	free(ghi); ghi = NULL;
+	free(grout); grout = NULL;
+	free(iroots); iroots = NULL;
+        free(rootdir); iroots = NULL;
+        free(gactive); gactive = NULL;
+
+        lrw -= 3*nrt;
+        liw -= 3*nrt;
+
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDARootInit", MSG_ROOT_FUNC_NULL);
+        return(IDA_ILL_INPUT);
+      }
+      else {
+        gfun = g;
+        return(IDA_SUCCESS);
+      }
+    }
+    else return(IDA_SUCCESS);
+  }
+
+  /* Set variable values in IDA memory block */
+  IDA_mem->ida_nrtfn = nrt;
+  if (g == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDARootInit", MSG_ROOT_FUNC_NULL);
+    return(IDA_ILL_INPUT);
+  }
+  else gfun = g;
+
+  /* Allocate necessary memory and return */
+  glo = NULL;
+  glo = (realtype *) malloc(nrt*sizeof(realtype));
+  if (glo == NULL) {
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDA", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  ghi = NULL;
+  ghi = (realtype *) malloc(nrt*sizeof(realtype));
+  if (ghi == NULL) {
+    free(glo); glo = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDA", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  grout = NULL;
+  grout = (realtype *) malloc(nrt*sizeof(realtype));
+  if (grout == NULL) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDA", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  iroots = NULL;
+  iroots = (int *) malloc(nrt*sizeof(int));
+  if (iroots == NULL) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDA", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  rootdir = NULL;
+  rootdir = (int *) malloc(nrt*sizeof(int));
+  if (rootdir == NULL) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDA", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  gactive = NULL;
+  gactive = (booleantype *) malloc(nrt*sizeof(booleantype));
+  if (gactive == NULL) {
+    free(glo); glo = NULL; 
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); rootdir = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDA", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  /* Set default values for rootdir (both directions) */
+  for(i=0; i<nrt; i++) rootdir[i] = 0;
+
+  /* Set default values for gactive (all active) */
+  for(i=0; i<nrt; i++) gactive[i] = TRUE;
+
+  lrw += 3*nrt;
+  liw += 3*nrt;
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * readability constants
+ * -----------------------------------------------------------------
+ */
+
+#define res (IDA_mem->ida_res)
+#define y0  (IDA_mem->ida_y0)
+#define yp0 (IDA_mem->ida_yp0)
+
+#define itol  (IDA_mem->ida_itol)
+#define rtol  (IDA_mem->ida_rtol)
+#define Satol (IDA_mem->ida_Satol)
+#define Vatol (IDA_mem->ida_Vatol)
+#define efun  (IDA_mem->ida_efun)
+#define edata (IDA_mem->ida_edata)
+
+#define user_data   (IDA_mem->ida_user_data)
+#define maxord      (IDA_mem->ida_maxord)
+#define mxstep      (IDA_mem->ida_mxstep)
+#define hin         (IDA_mem->ida_hin)
+#define hmax_inv    (IDA_mem->ida_hmax_inv)
+#define tstop       (IDA_mem->ida_tstop)
+#define tstopset    (IDA_mem->ida_tstopset)
+#define epcon       (IDA_mem->ida_epcon)
+#define maxnef      (IDA_mem->ida_maxnef)
+#define maxncf      (IDA_mem->ida_maxncf)
+#define maxcor      (IDA_mem->ida_maxcor)
+#define suppressalg (IDA_mem->ida_suppressalg)
+#define id          (IDA_mem->ida_id)
+#define constraints (IDA_mem->ida_constraints)
+
+#define epiccon (IDA_mem->ida_epiccon)
+#define maxnh   (IDA_mem->ida_maxnh)
+#define maxnj   (IDA_mem->ida_maxnj)
+#define maxnit  (IDA_mem->ida_maxnit)
+#define lsoff   (IDA_mem->ida_lsoff)
+#define steptol (IDA_mem->ida_steptol)
+
+#define uround         (IDA_mem->ida_uround)  
+#define phi            (IDA_mem->ida_phi) 
+#define ewt            (IDA_mem->ida_ewt)  
+#define yy             (IDA_mem->ida_yy)
+#define yp             (IDA_mem->ida_yp)
+#define delta          (IDA_mem->ida_delta)
+#define mm             (IDA_mem->ida_mm)
+#define ee             (IDA_mem->ida_ee)
+#define savres         (IDA_mem->ida_savres)
+#define tempv1         (IDA_mem->ida_tempv1)
+#define tempv2         (IDA_mem->ida_tempv2) 
+#define kk             (IDA_mem->ida_kk)
+#define hh             (IDA_mem->ida_hh)
+#define h0u            (IDA_mem->ida_h0u)
+#define tn             (IDA_mem->ida_tn)
+#define tretlast       (IDA_mem->ida_tretlast)
+#define cj             (IDA_mem->ida_cj)
+#define cjold          (IDA_mem->ida_cjold)
+#define cjratio        (IDA_mem->ida_cjratio)
+#define cjlast         (IDA_mem->ida_cjlast)
+#define nbacktr        (IDA_mem->ida_nbacktr)
+#define nst            (IDA_mem->ida_nst)
+#define nre            (IDA_mem->ida_nre)
+#define ncfn           (IDA_mem->ida_ncfn)
+#define netf           (IDA_mem->ida_netf)
+#define nni            (IDA_mem->ida_nni)
+#define nsetups        (IDA_mem->ida_nsetups)
+
+#define ns             (IDA_mem->ida_ns)
+#define linit          (IDA_mem->ida_linit)
+#define lsetup         (IDA_mem->ida_lsetup)
+#define lsolve         (IDA_mem->ida_lsolve) 
+#define lperf          (IDA_mem->ida_lperf)
+#define lfree          (IDA_mem->ida_lfree) 
+#define lmem           (IDA_mem->ida_lmem) 
+#define knew           (IDA_mem->ida_knew)
+#define kused          (IDA_mem->ida_kused)          
+#define hused          (IDA_mem->ida_hused)         
+#define tolsf          (IDA_mem->ida_tolsf)      
+#define phase          (IDA_mem->ida_phase)
+#define epsNewt        (IDA_mem->ida_epsNewt)
+#define toldel         (IDA_mem->ida_toldel)
+#define ss             (IDA_mem->ida_ss)
+#define rr             (IDA_mem->ida_rr)
+#define psi            (IDA_mem->ida_psi)
+#define alpha          (IDA_mem->ida_alpha)
+#define beta           (IDA_mem->ida_beta)
+#define sigma          (IDA_mem->ida_sigma)
+#define gamma          (IDA_mem->ida_gamma)
+#define setupNonNull   (IDA_mem->ida_setupNonNull) 
+#define constraintsSet (IDA_mem->ida_constraintsSet)
+#define nrtfn          (IDA_mem->ida_nrtfn)
+#define tlo            (IDA_mem->ida_tlo)
+#define thi            (IDA_mem->ida_thi)
+#define toutc          (IDA_mem->ida_toutc)
+#define trout          (IDA_mem->ida_trout)
+#define ttol           (IDA_mem->ida_ttol)
+#define taskc          (IDA_mem->ida_taskc)
+#define irfnd          (IDA_mem->ida_irfnd)
+#define nge            (IDA_mem->ida_nge)
+
+/* 
+ * -----------------------------------------------------------------
+ * Main solver function
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDASolve
+ *
+ * This routine is the main driver of the IDA package. 
+ *
+ * It integrates over an independent variable interval defined by the user, 
+ * by calling IDAStep to take internal independent variable steps.
+ *
+ * The first time that IDASolve is called for a successfully initialized
+ * problem, it computes a tentative initial step size.
+ *
+ * IDASolve supports two modes, specified by itask:
+ * In the IDA_NORMAL mode, the solver steps until it passes tout and then
+ * interpolates to obtain y(tout) and yp(tout).
+ * In the IDA_ONE_STEP mode, it takes one internal step and returns.
+ *
+ * IDASolve returns integer values corresponding to success and failure as below:
+ *
+ * successful returns: 
+ *
+ * IDA_SUCCESS        
+ * IDA_TSTOP_RETURN   
+ *
+ * failed returns:
+ *
+ * IDA_ILL_INPUT
+ * IDA_TOO_MUCH_WORK
+ * IDA_MEM_NULL
+ * IDA_TOO_MUCH_ACC
+ * IDA_CONV_FAIL
+ * IDA_LSETUP_FAIL
+ * IDA_LSOLVE_FAIL    
+ * IDA_CONSTR_FAIL
+ * IDA_ERR_FAIL   
+ * IDA_REP_RES_ERR
+ * IDA_RES_FAIL
+ */
+
+int IDASolve(void *ida_mem, realtype tout, realtype *tret,
+             N_Vector yret, N_Vector ypret, int itask)
+{
+  long int nstloc;
+  int sflag, istate, ier, irfndp, ir;
+  realtype tdist, troundoff, ypnorm, rh, nrm;
+  IDAMem IDA_mem;
+  booleantype inactive_roots;
+
+  /* Check for legal inputs in all cases. */
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASolve", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if problem was malloc'ed */
+  
+  if (IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDA", "IDASolve", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  /* Check for legal arguments */
+
+  if (yret == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_YRET_NULL);
+    return(IDA_ILL_INPUT);
+  }
+  yy = yret;  
+
+  if (ypret == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_YPRET_NULL);
+    return(IDA_ILL_INPUT);
+  }
+  yp = ypret;
+  
+  if (tret == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_TRET_NULL);
+    return(IDA_ILL_INPUT);
+  }
+
+  if ((itask != IDA_NORMAL) && (itask != IDA_ONE_STEP)) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_ITASK);
+    return(IDA_ILL_INPUT);
+  }
+  
+  if (itask == IDA_NORMAL) toutc = tout;
+  taskc = itask;
+
+  if (nst == 0) {       /* This is the first call */
+
+    /* Check inputs to IDA for correctness and consistency */
+
+    if (IDA_mem->ida_SetupDone == FALSE) {
+      ier = IDAInitialSetup(IDA_mem);
+      if (ier != IDA_SUCCESS) return(IDA_ILL_INPUT);
+      IDA_mem->ida_SetupDone = TRUE;
+    }
+
+    /* On first call, check for tout - tn too small, set initial hh,
+       check for approach to tstop, and scale phi[1] by hh.
+       Also check for zeros of root function g at and near t0.    */
+
+    tdist = SUNRabs(tout - tn);
+    if (tdist == ZERO) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_TOO_CLOSE);
+      return(IDA_ILL_INPUT);
+    }
+    troundoff = TWO*uround*(SUNRabs(tn) + SUNRabs(tout));
+    if (tdist < troundoff) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_TOO_CLOSE);
+      return(IDA_ILL_INPUT);
+    }
+
+    hh = hin;
+    if ( (hh != ZERO) && ((tout-tn)*hh < ZERO) ) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_HINIT);
+      return(IDA_ILL_INPUT);
+    }
+
+    if (hh == ZERO) {
+      hh = PT001*tdist;
+      ypnorm = IDAWrmsNorm(IDA_mem, phi[1], ewt, suppressalg);
+      if (ypnorm > HALF/hh) hh = HALF/ypnorm;
+      if (tout < tn) hh = -hh;
+    }
+
+    rh = SUNRabs(hh)*hmax_inv;
+    if (rh > ONE) hh /= rh;
+
+    if (tstopset) {
+      if ( (tstop - tn)*hh <= ZERO) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TSTOP, tstop, tn);
+        return(IDA_ILL_INPUT);
+      }
+      if ( (tn + hh - tstop)*hh > ZERO) 
+        hh = (tstop - tn)*(ONE-FOUR*uround);
+    }
+
+    h0u = hh;
+    kk = 0; kused = 0;  /* set in case of an error return before a step */
+
+    /* Check for exact zeros of the root functions at or near t0. */
+    if (nrtfn > 0) {
+      ier = IDARcheck1(IDA_mem);
+      if (ier == IDA_RTFUNC_FAIL) {
+        IDAProcessError(IDA_mem, IDA_RTFUNC_FAIL, "IDA", "IDARcheck1", MSG_RTFUNC_FAILED, tn);
+        return(IDA_RTFUNC_FAIL);
+      }
+    }
+
+    N_VScale(hh, phi[1], phi[1]);  /* set phi[1] = hh*y' */
+
+    /* Set the convergence test constants epsNewt and toldel */
+    epsNewt = epcon;
+    toldel = PT0001 * epsNewt;
+
+  } /* end of first-call block. */
+
+  /* Call lperf function and set nstloc for later performance testing. */
+
+  if (lperf != NULL) lperf(IDA_mem, 0);
+  nstloc = 0;
+
+  /* If not the first call, perform all stopping tests. */
+
+  if (nst > 0) {
+
+    /* First, check for a root in the last step taken, other than the
+       last root found, if any.  If itask = IDA_ONE_STEP and y(tn) was not
+       returned because of an intervening root, return y(tn) now.     */
+
+    if (nrtfn > 0) {
+
+      irfndp = irfnd;
+      
+      ier = IDARcheck2(IDA_mem);
+
+      if (ier == CLOSERT) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDARcheck2", MSG_CLOSE_ROOTS, tlo);
+        return(IDA_ILL_INPUT);
+      } else if (ier == IDA_RTFUNC_FAIL) {
+        IDAProcessError(IDA_mem, IDA_RTFUNC_FAIL, "IDA", "IDARcheck2", MSG_RTFUNC_FAILED, tlo);
+        return(IDA_RTFUNC_FAIL);
+      } else if (ier == RTFOUND) {
+        tretlast = *tret = tlo;
+        return(IDA_ROOT_RETURN);
+      }
+
+      /* If tn is distinct from tretlast (within roundoff),
+         check remaining interval for roots */
+      troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+      if ( SUNRabs(tn - tretlast) > troundoff ) {
+        ier = IDARcheck3(IDA_mem);
+        if (ier == IDA_SUCCESS) {     /* no root found */
+          irfnd = 0;
+          if ((irfndp == 1) && (itask == IDA_ONE_STEP)) {
+            tretlast = *tret = tn;
+            ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+            return(IDA_SUCCESS);
+          }
+        } else if (ier == RTFOUND) {  /* a new root was found */
+          irfnd = 1;
+          tretlast = *tret = tlo;
+          return(IDA_ROOT_RETURN);
+        } else if (ier == IDA_RTFUNC_FAIL) {  /* g failed */
+          IDAProcessError(IDA_mem, IDA_RTFUNC_FAIL, "IDA", "IDARcheck3", MSG_RTFUNC_FAILED, tlo);
+          return(IDA_RTFUNC_FAIL);
+        }
+      }
+
+    } /* end of root stop check */
+
+
+  /* Now test for all other stop conditions. */
+
+    istate = IDAStopTest1(IDA_mem, tout, tret, yret, ypret, itask);
+    if (istate != CONTINUE_STEPS) return(istate);
+  }
+
+  /* Looping point for internal steps. */
+
+  loop {
+   
+    /* Check for too many steps taken. */
+    
+    if ( (mxstep>0) && (nstloc >= mxstep) ) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_MAX_STEPS, tn);
+      istate = IDA_TOO_MUCH_WORK;
+      *tret = tretlast = tn;
+      break; /* Here yy=yret and yp=ypret already have the current solution. */
+    }
+
+    /* Call lperf to generate warnings of poor performance. */
+
+    if (lperf != NULL) lperf(IDA_mem, 1);
+
+    /* Reset and check ewt (if not first call). */
+
+    if (nst > 0) {
+
+      ier = efun(phi[0], ewt, edata);
+
+      if (ier != 0) {
+
+        if (itol == IDA_WF) 
+          IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_EWT_NOW_FAIL, tn);
+        else
+          IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_EWT_NOW_BAD, tn);
+	
+        istate = IDA_ILL_INPUT;
+        ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+        *tret = tretlast = tn;
+        break;
+
+      }
+
+    }
+    
+    /* Check for too much accuracy requested. */
+    
+    nrm = IDAWrmsNorm(IDA_mem, phi[0], ewt, suppressalg);
+    tolsf = uround * nrm;
+    if (tolsf > ONE) {
+      tolsf *= TEN;
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_TOO_MUCH_ACC, tn);
+      istate = IDA_TOO_MUCH_ACC;
+      *tret = tretlast = tn;
+      if (nst > 0) ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+      break;
+    }
+
+    /* Call IDAStep to take a step. */
+
+    sflag = IDAStep(IDA_mem);
+
+    /* Process all failed-step cases, and exit loop. */
+
+    if (sflag != IDA_SUCCESS) {
+      istate = IDAHandleFailure(IDA_mem, sflag);
+      *tret = tretlast = tn;
+      ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+      break;
+    }
+    
+    nstloc++;
+
+    /* After successful step, check for stop conditions; continue or break. */
+
+    /* First check for root in the last step taken. */
+
+    if (nrtfn > 0) {
+
+      ier = IDARcheck3(IDA_mem);
+
+      if (ier == RTFOUND) {  /* A new root was found */
+        irfnd = 1;
+        istate = IDA_ROOT_RETURN;
+        tretlast = *tret = tlo;
+        break;
+      } else if (ier == IDA_RTFUNC_FAIL) { /* g failed */
+        IDAProcessError(IDA_mem, IDA_RTFUNC_FAIL, "IDA", "IDARcheck3", MSG_RTFUNC_FAILED, tlo);
+        istate = IDA_RTFUNC_FAIL;
+        break;
+      }
+
+      /* If we are at the end of the first step and we still have
+       * some event functions that are inactive, issue a warning
+       * as this may indicate a user error in the implementation
+       * of the root function. */
+
+      if (nst==1) {
+        inactive_roots = FALSE;
+        for (ir=0; ir<nrtfn; ir++) { 
+          if (!gactive[ir]) {
+            inactive_roots = TRUE;
+            break;
+          }
+        }
+        if ((IDA_mem->ida_mxgnull > 0) && inactive_roots) {
+          IDAProcessError(IDA_mem, IDA_WARNING, "IDA", "IDASolve", MSG_INACTIVE_ROOTS);
+        }
+      }
+
+    }
+
+    /* Now check all other stop conditions. */
+
+    istate = IDAStopTest2(IDA_mem, tout, tret, yret, ypret, itask);
+    if (istate != CONTINUE_STEPS) break;
+
+  } /* End of step loop */
+
+  return(istate);    
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Interpolated output
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * IDAGetDky
+ *
+ * This routine evaluates the k-th derivative of y(t) as the value of 
+ * the k-th derivative of the interpolating polynomial at the independent 
+ * variable t, and stores the results in the vector dky.  It uses the current
+ * independent variable value, tn, and the method order last used, kused.
+ * 
+ * The return values are:
+ *   IDA_SUCCESS  if t is legal, or
+ *   IDA_BAD_T    if t is not within the interval of the last step taken.
+ *   IDA_BAD_DKY  if the dky vector is NULL.
+ *   IDA_BAD_K    if the requested k is not in the range 0,1,...,order used 
+ *
+ */
+
+int IDAGetDky(void *ida_mem, realtype t, int k, N_Vector dky)
+{
+  IDAMem IDA_mem;
+  realtype tfuzz, tp, delt, psij_1;
+  int i, j;
+  realtype cjk  [MXORDP1];
+  realtype cjk_1[MXORDP1];
+
+  /* Check ida_mem */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetDky", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem; 
+
+  if (dky == NULL) {
+    IDAProcessError(IDA_mem, IDA_BAD_DKY, "IDA", "IDAGetDky", MSG_NULL_DKY);
+    return(IDA_BAD_DKY);
+  }
+  
+  if ((k < 0) || (k > kused)) {
+    IDAProcessError(IDA_mem, IDA_BAD_K, "IDA", "IDAGetDky", MSG_BAD_K);
+    return(IDA_BAD_K);
+  }
+
+  /* Check t for legality.  Here tn - hused is t_{n-1}. */
+
+  tfuzz = HUNDRED * uround * (SUNRabs(tn) + SUNRabs(hh));
+  if (hh < ZERO) tfuzz = - tfuzz;
+  tp = tn - hused - tfuzz;
+  if ((t - tp)*hh < ZERO) {
+    IDAProcessError(IDA_mem, IDA_BAD_T, "IDA", "IDAGetDky", MSG_BAD_T, t, tn-hused, tn);
+    return(IDA_BAD_T);
+  }
+
+  /* Initialize the c_j^(k) and c_k^(k-1) */
+  for(i=0; i<MXORDP1; i++) {
+    cjk  [i] = 0;
+    cjk_1[i] = 0;
+  }
+
+  delt = t-tn;
+
+  for(i=0; i<=k; i++) {
+
+    /* The below reccurence is used to compute the k-th derivative of the solution:
+       c_j^(k) = ( k * c_{j-1}^(k-1) + c_{j-1}^{k} (Delta+psi_{j-1}) ) / psi_j
+       
+       Translated in indexes notation:
+       cjk[j] = ( k*cjk_1[j-1] + cjk[j-1]*(delt+psi[j-2]) ) / psi[j-1]
+
+       For k=0, j=1: c_1 = c_0^(-1) + (delt+psi[-1]) / psi[0]
+
+       In order to be able to deal with k=0 in the same way as for k>0, the
+       following conventions were adopted:
+         - c_0(t) = 1 , c_0^(-1)(t)=0 
+         - psij_1 stands for psi[-1]=0 when j=1 
+                         for psi[j-2]  when j>1
+    */
+    if(i==0) {
+
+      cjk[i] = 1;
+      psij_1 = 0;
+    }else {
+      /*                                                i       i-1          1
+        c_i^(i) can be always updated since c_i^(i) = -----  --------  ... -----
+                                                      psi_j  psi_{j-1}     psi_1
+      */
+      cjk[i] = cjk[i-1]*i/psi[i-1];
+      psij_1 = psi[i-1];
+    }
+
+    /* update c_j^(i) */
+
+    /*j does not need to go till kused */
+    for(j=i+1; j<=kused-k+i; j++) {
+
+      cjk[j] = ( i* cjk_1[j-1] + cjk[j-1] * (delt + psij_1) ) / psi[j-1];      
+      psij_1 = psi[j-1];
+    }
+
+    /* save existing c_j^(i)'s */
+    for(j=i+1; j<=kused-k+i; j++) cjk_1[j] = cjk[j];
+  }
+
+  /* Compute sum (c_j(t) * phi(t)) */
+
+  N_VConst(ZERO, dky);
+  for(j=k; j<=kused; j++)
+  {
+    N_VLinearSum(ONE, dky, cjk[j], phi[j], dky);
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Deallocation function
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAFree
+ *
+ * This routine frees the problem memory allocated by IDAInit
+ * Such memory includes all the vectors allocated by IDAAllocVectors,
+ * and the memory lmem for the linear solver (deallocated by a call
+ * to lfree).
+ */
+
+void IDAFree(void **ida_mem)
+{
+  IDAMem IDA_mem;
+
+  if (*ida_mem == NULL) return;
+
+  IDA_mem = (IDAMem) (*ida_mem);
+  
+  IDAFreeVectors(IDA_mem);
+
+  if (lfree != NULL) lfree(IDA_mem);
+
+  if (nrtfn > 0) {
+    free(glo); glo = NULL; 
+    free(ghi);  ghi = NULL;
+    free(grout);  grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); rootdir = NULL;
+    free(gactive); gactive = NULL;
+  }
+
+  free(*ida_mem);
+  *ida_mem = NULL;
+}
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/*
+ * IDACheckNvector
+ *
+ * This routine checks if all required vector operations are present.
+ * If any of them is missing it returns FALSE.
+ */
+
+static booleantype IDACheckNvector(N_Vector tmpl)
+{
+  if ((tmpl->ops->nvclone        == NULL) ||
+     (tmpl->ops->nvdestroy      == NULL) ||
+     (tmpl->ops->nvlinearsum    == NULL) ||
+     (tmpl->ops->nvconst        == NULL) ||
+     (tmpl->ops->nvprod         == NULL) ||
+     (tmpl->ops->nvscale        == NULL) ||
+     (tmpl->ops->nvabs          == NULL) ||
+     (tmpl->ops->nvinv          == NULL) ||
+     (tmpl->ops->nvaddconst     == NULL) ||
+     (tmpl->ops->nvwrmsnorm     == NULL) ||
+     (tmpl->ops->nvmin          == NULL))
+    return(FALSE);
+  else
+    return(TRUE);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Memory allocation/deallocation
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAAllocVectors
+ *
+ * This routine allocates the IDA vectors ewt, tempv1, tempv2, and
+ * phi[0], ..., phi[maxord].
+ * If all memory allocations are successful, IDAAllocVectors returns 
+ * TRUE. Otherwise all allocated memory is freed and IDAAllocVectors 
+ * returns FALSE.
+ * This routine also sets the optional outputs lrw and liw, which are
+ * (respectively) the lengths of the real and integer work spaces
+ * allocated here.
+ */
+
+static booleantype IDAAllocVectors(IDAMem IDA_mem, N_Vector tmpl)
+{
+  int i, j, maxcol;
+
+  /* Allocate ewt, ee, delta, tempv1, tempv2 */
+  
+  ewt = N_VClone(tmpl);
+  if (ewt == NULL) return(FALSE);
+
+  ee = N_VClone(tmpl);
+  if (ee == NULL) {
+    N_VDestroy(ewt);
+    return(FALSE);
+  }
+
+  delta = N_VClone(tmpl);
+  if (delta == NULL) {
+    N_VDestroy(ewt);
+    N_VDestroy(ee);
+    return(FALSE);
+  }
+
+  tempv1 = N_VClone(tmpl);
+  if (tempv1 == NULL) {
+    N_VDestroy(ewt);
+    N_VDestroy(ee);
+    N_VDestroy(delta);
+    return(FALSE);
+  }
+
+  tempv2= N_VClone(tmpl);
+  if (tempv2 == NULL) {
+    N_VDestroy(ewt);
+    N_VDestroy(ee);
+    N_VDestroy(delta);
+    N_VDestroy(tempv1);
+    return(FALSE);
+  }
+
+  savres = tempv1;
+
+  /* Allocate phi[0] ... phi[maxord].  Make sure phi[2] and phi[3] are
+  allocated (for use as temporary vectors), regardless of maxord.       */
+
+  maxcol = SUNMAX(maxord,3);
+  for (j=0; j <= maxcol; j++) {
+    phi[j] = N_VClone(tmpl);
+    if (phi[j] == NULL) {
+      N_VDestroy(ewt);
+      N_VDestroy(ee);
+      N_VDestroy(delta);
+      N_VDestroy(tempv1);
+      N_VDestroy(tempv2);
+      for (i=0; i < j; i++) N_VDestroy(phi[i]);
+      return(FALSE);
+    }
+  }
+
+  /* Update solver workspace lengths  */
+  lrw += (maxcol + 6)*lrw1;
+  liw += (maxcol + 6)*liw1;
+
+  /* Store the value of maxord used here */
+  IDA_mem->ida_maxord_alloc = maxord;
+
+  return(TRUE);
+}
+
+/*
+ * IDAfreeVectors
+ *
+ * This routine frees the IDA vectors allocated for IDA.
+ */
+
+static void IDAFreeVectors(IDAMem IDA_mem)
+{
+  int j, maxcol;
+  
+  N_VDestroy(ewt);
+  N_VDestroy(ee);
+  N_VDestroy(delta);
+  N_VDestroy(tempv1);
+  N_VDestroy(tempv2);
+  maxcol = SUNMAX(IDA_mem->ida_maxord_alloc,3);
+  for(j=0; j <= maxcol; j++) N_VDestroy(phi[j]);
+
+  lrw -= (maxcol + 6)*lrw1;
+  liw -= (maxcol + 6)*liw1;
+
+  if (IDA_mem->ida_VatolMallocDone) {
+    N_VDestroy(Vatol);
+    lrw -= lrw1;
+    liw -= liw1;
+  }
+
+  if (IDA_mem->ida_constraintsMallocDone) {
+    N_VDestroy(constraints);
+    lrw -= lrw1;
+    liw -= liw1;
+  }
+
+  if (IDA_mem->ida_idMallocDone) {
+    N_VDestroy(id);
+    lrw -= lrw1;
+    liw -= liw1;
+  }
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Initial setup
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAInitialSetup
+ *
+ * This routine is called by IDASolve once at the first step. 
+ * It performs all checks on optional inputs and inputs to 
+ * IDAInit/IDAReInit that could not be done before.
+ *
+ * If no error is encountered, IDAInitialSetup returns IDA_SUCCESS. 
+ * Otherwise, it returns an error flag and reported to the error 
+ * handler function.
+ */
+
+int IDAInitialSetup(IDAMem IDA_mem)
+{
+  booleantype conOK;
+  int ier;
+
+  /* Test for more vector operations, depending on options */
+  if (suppressalg)
+    if (phi[0]->ops->nvwrmsnormmask == NULL) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInitialSetup", MSG_BAD_NVECTOR);
+      return(IDA_ILL_INPUT);
+  }
+
+  /* Test id vector for legality */
+  if (suppressalg && (id==NULL)){ 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInitialSetup", MSG_MISSING_ID);
+    return(IDA_ILL_INPUT); 
+  }
+
+  /* Did the user specify tolerances? */
+  if (itol == IDA_NN) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInitialSetup", MSG_NO_TOLS);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Set data for efun */
+  if (IDA_mem->ida_user_efun) edata = user_data;
+  else                        edata = IDA_mem;
+
+  /* Initial error weight vector */
+  ier = efun(phi[0], ewt, edata);
+  if (ier != 0) {
+    if (itol == IDA_WF) 
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInitialSetup", MSG_FAIL_EWT);
+    else
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInitialSetup", MSG_BAD_EWT);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Check to see if y0 satisfies constraints. */
+  if (constraintsSet) {
+    conOK = N_VConstrMask(constraints, phi[0], tempv2);
+    if (!conOK) { 
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInitialSetup", MSG_Y0_FAIL_CONSTR);
+      return(IDA_ILL_INPUT); 
+    }
+  }
+
+  /* Check that lsolve exists and call linit function if it exists. */
+  if (lsolve == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInitialSetup", MSG_LSOLVE_NULL);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (linit != NULL) {
+    ier = linit(IDA_mem);
+    if (ier != 0) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAInitialSetup", MSG_LINIT_FAIL);
+      return(IDA_LINIT_FAIL);
+    }
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/*  
+ * IDAEwtSet
+ *
+ * This routine is responsible for loading the error weight vector
+ * ewt, according to itol, as follows:
+ * (1) ewt[i] = 1 / (rtol * SUNRabs(ycur[i]) + atol), i=0,...,Neq-1
+ *     if itol = IDA_SS
+ * (2) ewt[i] = 1 / (rtol * SUNRabs(ycur[i]) + atol[i]), i=0,...,Neq-1
+ *     if itol = IDA_SV
+ *
+ *  IDAEwtSet returns 0 if ewt is successfully set as above to a
+ *  positive vector and -1 otherwise. In the latter case, ewt is
+ *  considered undefined.
+ *
+ * All the real work is done in the routines IDAEwtSetSS, IDAEwtSetSV.
+ */
+
+int IDAEwtSet(N_Vector ycur, N_Vector weight, void *data)
+{
+  IDAMem IDA_mem;
+  int flag = 0;
+
+  /* data points to IDA_mem here */
+
+  IDA_mem = (IDAMem) data;
+
+  switch(itol) {
+  case IDA_SS: 
+    flag = IDAEwtSetSS(IDA_mem, ycur, weight); 
+    break;
+  case IDA_SV: 
+    flag = IDAEwtSetSV(IDA_mem, ycur, weight); 
+    break;
+  }
+  return(flag);
+}
+
+/*
+ * IDAEwtSetSS
+ *
+ * This routine sets ewt as decribed above in the case itol=IDA_SS.
+ * It tests for non-positive components before inverting. IDAEwtSetSS
+ * returns 0 if ewt is successfully set to a positive vector
+ * and -1 otherwise. In the latter case, ewt is considered
+ * undefined.
+ */
+
+static int IDAEwtSetSS(IDAMem IDA_mem, N_Vector ycur, N_Vector weight)
+{
+  N_VAbs(ycur, tempv1);
+  N_VScale(rtol, tempv1, tempv1);
+  N_VAddConst(tempv1, Satol, tempv1);
+  if (N_VMin(tempv1) <= ZERO) return(-1);
+  N_VInv(tempv1, weight);
+  return(0);
+}
+
+/*
+ * IDAEwtSetSV
+ *
+ * This routine sets ewt as decribed above in the case itol=IDA_SV.
+ * It tests for non-positive components before inverting. IDAEwtSetSV
+ * returns 0 if ewt is successfully set to a positive vector
+ * and -1 otherwise. In the latter case, ewt is considered
+ * undefined.
+ */
+
+static int IDAEwtSetSV(IDAMem IDA_mem, N_Vector ycur, N_Vector weight)
+{
+  N_VAbs(ycur, tempv1);
+  N_VLinearSum(rtol, tempv1, ONE, Vatol, tempv1);
+  if (N_VMin(tempv1) <= ZERO) return(-1);
+  N_VInv(tempv1, weight);
+  return(0);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Stopping tests
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAStopTest1
+ *
+ * This routine tests for stop conditions before taking a step.
+ * The tests depend on the value of itask.
+ * The variable tretlast is the previously returned value of tret.
+ *
+ * The return values are:
+ * CONTINUE_STEPS       if no stop conditions were found
+ * IDA_SUCCESS          for a normal return to the user
+ * IDA_TSTOP_RETURN     for a tstop-reached return to the user
+ * IDA_ILL_INPUT        for an illegal-input return to the user 
+ *
+ * In the tstop cases, this routine may adjust the stepsize hh to cause
+ * the next step to reach tstop exactly.
+ */
+
+static int IDAStopTest1(IDAMem IDA_mem, realtype tout, realtype *tret, 
+                        N_Vector yret, N_Vector ypret, int itask)
+{
+  int ier;
+  realtype troundoff;
+
+  switch (itask) {
+    
+  case IDA_NORMAL:
+
+    if (tstopset) {
+      /* Test for tn past tstop, tn = tretlast, tn past tout, tn near tstop. */
+      if ( (tn - tstop)*hh > ZERO) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TSTOP, tstop, tn);
+        return(IDA_ILL_INPUT);
+      }
+    }
+
+    /* Test for tout = tretlast, and for tn past tout. */
+    if (tout == tretlast) {
+      *tret = tretlast = tout;
+      return(IDA_SUCCESS);
+    }
+    if ((tn - tout)*hh >= ZERO) {
+      ier = IDAGetSolution(IDA_mem, tout, yret, ypret);
+      if (ier != IDA_SUCCESS) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TOUT, tout);
+        return(IDA_ILL_INPUT);
+      }
+      *tret = tretlast = tout;
+      return(IDA_SUCCESS);
+    }
+
+    if (tstopset) {
+      troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+      if (SUNRabs(tn - tstop) <= troundoff) {
+        ier = IDAGetSolution(IDA_mem, tstop, yret, ypret);
+        if (ier != IDA_SUCCESS) {
+          IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TSTOP, tstop, tn);
+          return(IDA_ILL_INPUT);
+        }
+        *tret = tretlast = tstop;
+        tstopset = FALSE;
+        return(IDA_TSTOP_RETURN);
+      }
+      if ((tn + hh - tstop)*hh > ZERO) 
+        hh = (tstop - tn)*(ONE-FOUR*uround);
+    }
+
+    return(CONTINUE_STEPS);
+    
+  case IDA_ONE_STEP:
+
+    if (tstopset) {
+      /* Test for tn past tstop, tn past tretlast, and tn near tstop. */
+      if ((tn - tstop)*hh > ZERO) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TSTOP, tstop, tn);
+        return(IDA_ILL_INPUT);
+      }
+    }
+
+    /* Test for tn past tretlast. */
+    if ((tn - tretlast)*hh > ZERO) {
+      ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+      *tret = tretlast = tn;
+      return(IDA_SUCCESS);
+    }
+
+    if (tstopset) {
+      troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+      if (SUNRabs(tn - tstop) <= troundoff) {
+        ier = IDAGetSolution(IDA_mem, tstop, yret, ypret);
+        if (ier != IDA_SUCCESS) {
+          IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TSTOP, tstop, tn);
+          return(IDA_ILL_INPUT);
+        }
+        *tret = tretlast = tstop;
+        tstopset = FALSE;
+        return(IDA_TSTOP_RETURN);
+      }
+      if ((tn + hh - tstop)*hh > ZERO) 
+        hh = (tstop - tn)*(ONE-FOUR*uround);
+    }
+
+    return(CONTINUE_STEPS);
+        
+  }
+  return(IDA_ILL_INPUT);
+}
+
+/*
+ * IDAStopTest2
+ *
+ * This routine tests for stop conditions after taking a step.
+ * The tests depend on the value of itask.
+ *
+ * The return values are:
+ *  CONTINUE_STEPS     if no stop conditions were found
+ *  IDA_SUCCESS        for a normal return to the user
+ *  IDA_TSTOP_RETURN   for a tstop-reached return to the user
+ *
+ * In the two cases with tstop, this routine may reset the stepsize hh
+ * to cause the next step to reach tstop exactly.
+ *
+ * In the two cases with ONE_STEP mode, no interpolation to tn is needed
+ * because yret and ypret already contain the current y and y' values.
+ *
+ * Note: No test is made for an error return from IDAGetSolution here,
+ * because the same test was made prior to the step.
+ */
+
+static int IDAStopTest2(IDAMem IDA_mem, realtype tout, realtype *tret, 
+                        N_Vector yret, N_Vector ypret, int itask)
+{
+  /* int ier; */
+  realtype troundoff;
+
+  switch (itask) {
+
+    case IDA_NORMAL:  
+
+      /* Test for tn past tout. */
+      if ((tn - tout)*hh >= ZERO) {
+        /* ier = */ IDAGetSolution(IDA_mem, tout, yret, ypret);
+        *tret = tretlast = tout;
+        return(IDA_SUCCESS);
+      }
+
+      if (tstopset) {
+        /* Test for tn at tstop and for tn near tstop */
+        troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+        if (SUNRabs(tn - tstop) <= troundoff) {
+          /* ier = */ IDAGetSolution(IDA_mem, tstop, yret, ypret);
+          *tret = tretlast = tstop;
+          tstopset = FALSE;
+          return(IDA_TSTOP_RETURN);
+        }
+        if ((tn + hh - tstop)*hh > ZERO) 
+          hh = (tstop - tn)*(ONE-FOUR*uround);
+      }
+
+      return(CONTINUE_STEPS);
+
+    case IDA_ONE_STEP:
+
+      if (tstopset) {
+        /* Test for tn at tstop and for tn near tstop */
+        troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+        if (SUNRabs(tn - tstop) <= troundoff) {
+          /* ier = */ IDAGetSolution(IDA_mem, tstop, yret, ypret);
+          *tret = tretlast = tstop;
+          tstopset = FALSE;
+          return(IDA_TSTOP_RETURN);
+        }
+        if ((tn + hh - tstop)*hh > ZERO) 
+          hh = (tstop - tn)*(ONE-FOUR*uround);
+      }
+
+      *tret = tretlast = tn;
+      return(IDA_SUCCESS);
+
+  }
+  return IDA_ILL_INPUT;
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Error handler
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAHandleFailure
+ *
+ * This routine prints error messages for all cases of failure by
+ * IDAStep.  It returns to IDASolve the value that it is to return to
+ * the user.
+ */
+
+static int IDAHandleFailure(IDAMem IDA_mem, int sflag)
+{
+  /* Depending on sflag, print error message and return error flag */
+  switch (sflag) {
+
+    case IDA_ERR_FAIL:
+      IDAProcessError(IDA_mem, IDA_ERR_FAIL, "IDA", "IDASolve", MSG_ERR_FAILS, tn, hh);
+      return(IDA_ERR_FAIL);
+
+    case IDA_CONV_FAIL:
+      IDAProcessError(IDA_mem, IDA_CONV_FAIL, "IDA", "IDASolve", MSG_CONV_FAILS, tn, hh);
+      return(IDA_CONV_FAIL);
+
+    case IDA_LSETUP_FAIL:  
+      IDAProcessError(IDA_mem, IDA_LSETUP_FAIL, "IDA", "IDASolve", MSG_SETUP_FAILED, tn);
+      return(IDA_LSETUP_FAIL);
+
+    case IDA_LSOLVE_FAIL: 
+      IDAProcessError(IDA_mem, IDA_LSOLVE_FAIL, "IDA", "IDASolve", MSG_SOLVE_FAILED, tn);
+      return(IDA_LSOLVE_FAIL);
+
+    case IDA_REP_RES_ERR:
+      IDAProcessError(IDA_mem, IDA_REP_RES_ERR, "IDA", "IDASolve", MSG_REP_RES_ERR, tn);
+      return(IDA_REP_RES_ERR);
+
+    case IDA_RES_FAIL: 
+      IDAProcessError(IDA_mem, IDA_RES_FAIL, "IDA", "IDASolve", MSG_RES_NONRECOV, tn);
+      return(IDA_RES_FAIL);
+
+    case IDA_CONSTR_FAIL: 
+      IDAProcessError(IDA_mem, IDA_CONSTR_FAIL, "IDA", "IDASolve", MSG_FAILED_CONSTR, tn);
+      return(IDA_CONSTR_FAIL);
+
+  }
+
+  return (IDA_UNRECOGNISED_ERROR);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Main IDAStep function
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAStep
+ *
+ * This routine performs one internal IDA step, from tn to tn + hh.
+ * It calls other routines to do all the work.
+ *
+ * It solves a system of differential/algebraic equations of the form
+ *       F(t,y,y') = 0, for one step. In IDA, tt is used for t,
+ * yy is used for y, and yp is used for y'. The function F is supplied as 'res'
+ * by the user.
+ *
+ * The methods used are modified divided difference, fixed leading 
+ * coefficient forms of backward differentiation formulas.
+ * The code adjusts the stepsize and order to control the local error per step.
+ *
+ * The main operations done here are as follows:
+ *  * initialize various quantities;
+ *  * setting of multistep method coefficients;
+ *  * solution of the nonlinear system for yy at t = tn + hh;
+ *  * deciding on order reduction and testing the local error;
+ *  * attempting to recover from failure in nonlinear solver or error test;
+ *  * resetting stepsize and order for the next step.
+ *  * updating phi and other state data if successful;
+ *
+ * On a failure in the nonlinear system solution or error test, the
+ * step may be reattempted, depending on the nature of the failure.
+ *
+ * Variables or arrays (all in the IDAMem structure) used in IDAStep are:
+ *
+ * tt -- Independent variable.
+ * yy -- Solution vector at tt.
+ * yp -- Derivative of solution vector after successful stelp.
+ * res -- User-supplied function to evaluate the residual. See the 
+ *        description given in file ida.h .
+ * lsetup -- Routine to prepare for the linear solver call. It may either
+ *        save or recalculate quantities used by lsolve. (Optional)
+ * lsolve -- Routine to solve a linear system. A prior call to lsetup
+ *        may be required. 
+ * hh  -- Appropriate step size for next step.
+ * ewt -- Vector of weights used in all convergence tests.
+ * phi -- Array of divided differences used by IDAStep. This array is composed 
+ *       of  (maxord+1) nvectors (each of size Neq). (maxord+1) is the maximum 
+ *       order for the problem, maxord, plus 1.
+ *
+ *       Return values are:
+ *       IDA_SUCCESS   IDA_RES_FAIL        LSETUP_ERROR_NONRECVR       
+ *                     IDA_LSOLVE_FAIL   IDA_ERR_FAIL            
+ *                     IDA_CONSTR_FAIL               IDA_CONV_FAIL          
+ *                     IDA_REP_RES_ERR            
+ */
+
+static int IDAStep(IDAMem IDA_mem)
+{
+  realtype saved_t, ck;
+  realtype err_k, err_km1;
+  int ncf, nef;
+  int nflag, kflag;
+
+  saved_t = tn;
+  ncf = nef = 0;
+
+  if (nst == ZERO){
+    kk = 1;
+    kused = 0;
+    hused = ZERO;
+    psi[0] = hh;
+    cj = ONE/hh;
+    phase = 0;
+    ns = 0;
+  }
+
+  /* To prevent 'unintialized variable' warnings */
+  err_k = ZERO;
+  err_km1 = ZERO;
+
+  /* Looping point for attempts to take a step */
+
+  loop {  
+
+    /*-----------------------
+      Set method coefficients
+      -----------------------*/
+
+    IDASetCoeffs(IDA_mem, &ck);
+
+    kflag = IDA_SUCCESS;
+
+    /*----------------------------------------------------
+      If tn is past tstop (by roundoff), reset it to tstop.
+      -----------------------------------------------------*/
+    
+    tn = tn + hh;
+    if (tstopset) {
+      if ((tn - tstop)*hh > ZERO) tn = tstop;
+    }
+
+    /*-----------------------
+      Advance state variables
+      -----------------------*/
+
+    /* Nonlinear system solution */
+    nflag = IDANls(IDA_mem);
+
+    /* If NLS was successful, perform error test */
+    if (nflag == IDA_SUCCESS)
+      nflag = IDATestError(IDA_mem, ck, &err_k, &err_km1);
+
+    /* Test for convergence or error test failures */
+    if (nflag != IDA_SUCCESS) {
+
+      /* restore and decide what to do */
+      IDARestore(IDA_mem, saved_t);
+      kflag = IDAHandleNFlag(IDA_mem, nflag, err_k, err_km1, 
+                             &ncfn, &ncf, &netf, &nef);
+
+      /* exit on nonrecoverable failure */ 
+      if (kflag != PREDICT_AGAIN) return(kflag);
+
+      /* recoverable error; predict again */
+      if(nst==0) IDAReset(IDA_mem);
+      continue;
+
+    }
+
+    /* kflag == IDA_SUCCESS */
+    break;
+
+  }
+
+  /* Nonlinear system solve and error test were both successful;
+     update data, and consider change of step and/or order */
+
+  IDACompleteStep(IDA_mem, err_k, err_km1);
+
+  /* 
+     Rescale ee vector to be the estimated local error
+     Notes:
+       (1) altering the value of ee is permissible since
+           it will be re-initialized to the zero vector by
+           IDASolve()->IDAStep()->IDANls()->IDANewtonIter()
+           before it is needed again
+       (2) the value of ee is only valid if IDAHandleNFlag()
+           returns either PREDICT_AGAIN or IDA_SUCCESS
+   */
+
+  N_VScale(ck, ee, ee);
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDASetCoeffs
+ *
+ *  This routine computes the coefficients relevant to the current step.
+ *  The counter ns counts the number of consecutive steps taken at
+ *  constant stepsize h and order k, up to a maximum of k + 2.
+ *  Then the first ns components of beta will be one, and on a step  
+ *  with ns = k + 2, the coefficients alpha, etc. need not be reset here.
+ *  Also, IDACompleteStep prohibits an order increase until ns = k + 2.
+ */
+
+static void IDASetCoeffs(IDAMem IDA_mem, realtype *ck)
+{
+  int i;
+  realtype temp1, temp2, alpha0, alphas;
+
+  /* Set coefficients for the current stepsize h */
+
+  if (hh != hused || kk != kused) ns = 0;
+  ns = SUNMIN(ns+1,kused+2);
+  if (kk+1 >= ns){
+    beta[0] = ONE;
+    alpha[0] = ONE;
+    temp1 = hh;
+    gamma[0] = ZERO;
+    sigma[0] = ONE;
+    for(i=1;i<=kk;i++){
+      temp2 = psi[i-1];
+      psi[i-1] = temp1;
+      beta[i] = beta[i-1] * psi[i-1] / temp2;
+      temp1 = temp2 + hh;
+      alpha[i] = hh / temp1;
+      sigma[i] = i * sigma[i-1] * alpha[i]; 
+      gamma[i] = gamma[i-1] + alpha[i-1] / hh;
+   }
+    psi[kk] = temp1;
+  }
+  /* compute alphas, alpha0 */
+  alphas = ZERO;
+  alpha0 = ZERO;
+  for(i=0;i<kk;i++){
+    alphas = alphas - ONE/(i+1);
+    alpha0 = alpha0 - alpha[i];
+  }
+
+  /* compute leading coefficient cj  */
+  cjlast = cj;
+  cj = -alphas/hh;
+  
+  /* compute variable stepsize error coefficient ck */
+
+  *ck = SUNRabs(alpha[kk] + alphas - alpha0);
+  *ck = SUNMAX(*ck, alpha[kk]);
+
+ /* change phi to phi-star  */
+
+  for(i=ns;i<=kk;i++) N_VScale(beta[i], phi[i], phi[i]);
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Nonlinear solver functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDANls
+ *
+ * This routine attempts to solve the nonlinear system using the linear
+ * solver specified. NOTE: this routine uses N_Vector ee as the scratch
+ * vector tempv3 passed to lsetup.
+ *
+ *  Possible return values:
+ *
+ *  IDA_SUCCESS
+ *
+ *  IDA_RES_RECVR       IDA_RES_FAIL
+ *  IDA_LSETUP_RECVR    IDA_LSETUP_FAIL
+ *  IDA_LSOLVE_RECVR    IDA_LSOLVE_FAIL
+ *
+ *  IDA_CONSTR_RECVR
+ *  IDA_NCONV_RECVR
+ */
+
+static int IDANls(IDAMem IDA_mem)
+{
+  int retval;
+  booleantype constraintsPassed, callSetup, tryAgain;
+  realtype temp1, temp2, vnorm;
+  N_Vector tempv3;
+
+  callSetup = FALSE;
+
+  /* Initialize if the first time called */
+
+  if (nst == 0){
+    cjold = cj;
+    ss = TWENTY;
+    if (setupNonNull) callSetup = TRUE;
+  }
+
+  mm = tempv2;
+  tempv3 = ee;
+
+  /* Decide if lsetup is to be called */
+
+  if (setupNonNull){
+    cjratio = cj / cjold;
+    temp1 = (ONE - XRATE) / (ONE + XRATE);
+    temp2 = ONE/temp1;
+    {if (cjratio < temp1 || cjratio > temp2) callSetup = TRUE;}
+    {if (cj != cjlast) ss=HUNDRED;}
+  }
+
+  /* Begin the main loop. This loop is traversed at most twice. 
+     The second pass only occurs when the first pass had a recoverable
+     failure with old Jacobian data */
+  loop{
+
+    /* Compute predicted values for yy and yp, and compute residual there. */
+    IDAPredict(IDA_mem);
+
+    retval = res(tn, yy, yp, delta, user_data);
+    nre++;
+    if (retval < 0) return(IDA_RES_FAIL);
+    if (retval > 0) return(IDA_RES_RECVR);
+
+    /* If indicated, call linear solver setup function and reset parameters. */
+    if (callSetup){
+      nsetups++;
+      retval = lsetup(IDA_mem, yy, yp, delta, tempv1, tempv2, tempv3);
+      cjold = cj;
+      cjratio = ONE;
+      ss = TWENTY;
+      if (retval < 0) return(IDA_LSETUP_FAIL);
+      if (retval > 0) return(IDA_LSETUP_RECVR);
+    }
+
+    /* Call the Newton iteration routine.  */
+
+    retval = IDANewtonIter(IDA_mem);
+
+    /* Retry the current step on recoverable failure with old Jacobian data. */
+
+    tryAgain = (retval>0)&&(setupNonNull) &&(!callSetup);
+
+    if (tryAgain){
+      callSetup = TRUE;
+      continue;
+    }
+    else break;
+
+  }  /* end of loop */
+
+  if (retval != IDA_SUCCESS) return(retval);
+
+  /* If otherwise successful, check and enforce inequality constraints. */
+
+  if (constraintsSet){  /* Check constraints and get mask vector mm, 
+                          set where constraints failed */
+    constraintsPassed = N_VConstrMask(constraints,yy,mm);
+    if (constraintsPassed) return(IDA_SUCCESS);
+    else {
+      N_VCompare(ONEPT5, constraints, tempv1);  
+      /* a , where a[i] =1. when |c[i]| = 2 ,  c the vector of constraints */
+      N_VProd(tempv1, constraints, tempv1);       /* a * c */
+      N_VDiv(tempv1, ewt, tempv1);                /* a * c * wt */
+      N_VLinearSum(ONE, yy, -PT1, tempv1, tempv1);/* y - 0.1 * a * c * wt */
+      N_VProd(tempv1, mm, tempv1);               /*  v = mm*(y-.1*a*c*wt) */
+      vnorm = IDAWrmsNorm(IDA_mem, tempv1, ewt, FALSE); /*  ||v|| */
+      
+      /* If vector v of constraint corrections is small
+         in norm, correct and accept this step */      
+      if (vnorm <= epsNewt){  
+        N_VLinearSum(ONE, ee, -ONE, tempv1, ee);  /* ee <- ee - v */
+        return(IDA_SUCCESS);
+      }
+      else {
+        /* Constraints not met -- reduce h by computing rr = h'/h */
+        N_VLinearSum(ONE, phi[0], -ONE, yy, tempv1);
+        N_VProd(mm, tempv1, tempv1);
+        rr = PT9*N_VMinQuotient(phi[0], tempv1);
+        rr = SUNMAX(rr,PT1);
+        return(IDA_CONSTR_RECVR);
+      }
+    }
+  }
+  return(IDA_SUCCESS);
+}
+
+
+/*
+ * IDAPredict
+ *
+ * This routine predicts the new values for vectors yy and yp.
+ */
+
+static void IDAPredict(IDAMem IDA_mem)
+{
+  int j;
+
+  N_VScale(ONE, phi[0], yy);
+  N_VConst(ZERO, yp);
+  
+  for(j=1; j<=kk; j++) {
+    N_VLinearSum(ONE,      phi[j], ONE, yy, yy);
+    N_VLinearSum(gamma[j], phi[j], ONE, yp, yp);
+  }
+}
+
+/*
+ * IDANewtonIter
+ *
+ * This routine performs the Newton iteration.  
+ * It assumes that delta contains the initial residual vector on entry.
+ * If the iteration succeeds, it returns the value IDA_SUCCESS = 0.
+ * If not, it returns either:
+ *   a positive value (for a recoverable failure), namely one of:
+ *     IDA_RES_RECVR
+ *     IDA_LSOLVE_RECVR
+ *     IDA_NCONV_RECVR
+ * or
+ *   a negative value (for a nonrecoverable failure), namely one of:
+ *     IDA_RES_FAIL
+ *     IDA_LSOLVE_FAIL
+ *
+ * NOTE: This routine uses N_Vector savres, which is preset to tempv1.
+ */
+
+static int IDANewtonIter(IDAMem IDA_mem)
+{
+  int mnewt, retval;
+  realtype delnrm, oldnrm, rate;
+
+  /* Initialize counter mnewt and cumulative correction vector ee. */
+  mnewt = 0;
+  N_VConst(ZERO, ee);
+
+  /* Initialize oldnrm to avoid compiler warning message */
+  oldnrm = ZERO;
+
+  /* Looping point for Newton iteration.  Break out on any error. */
+  loop {
+
+    nni++;
+
+    /* Save a copy of the residual vector in savres. */
+    N_VScale(ONE, delta, savres);
+
+    /* Call the lsolve function to get correction vector delta. */
+    retval = lsolve(IDA_mem, delta, ewt, yy, yp, savres); 
+    if (retval < 0) return(IDA_LSOLVE_FAIL);
+    if (retval > 0) return(IDA_LSOLVE_RECVR);
+
+    /* Apply delta to yy, yp, and ee, and get norm(delta). */
+    N_VLinearSum(ONE, yy, -ONE, delta, yy);
+    N_VLinearSum(ONE, ee, -ONE, delta, ee);
+    N_VLinearSum(ONE, yp, -cj,  delta, yp);
+    delnrm = IDAWrmsNorm(IDA_mem, delta, ewt, FALSE);
+
+    /* Test for convergence, first directly, then with rate estimate. */
+
+    if (mnewt == 0){ 
+       oldnrm = delnrm;
+       if (delnrm <= toldel) return(IDA_SUCCESS);
+    }
+    else {
+      rate = SUNRpowerR( delnrm/oldnrm, ONE/mnewt );
+      if (rate > RATEMAX) return(IDA_NCONV_RECVR); 
+      ss = rate/(ONE - rate);
+    }
+
+    if (ss*delnrm <= epsNewt) return(IDA_SUCCESS);
+
+    /* Not yet converged.  Increment mnewt and test for max allowed. */
+    mnewt++;
+    if (mnewt >= maxcor) {retval = IDA_NCONV_RECVR; break;}
+
+    /* Call res for new residual and check error flag from res. */
+    retval = res(tn, yy, yp, delta, user_data);
+    nre++;
+    if (retval < 0) return(IDA_RES_FAIL);
+    if (retval > 0) return(IDA_RES_RECVR);
+
+    /* Loop for next iteration. */
+
+  } /* end of Newton iteration loop */
+
+  /* All error returns exit here. */
+  return(retval);
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Error test
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDATestError
+ *
+ * This routine estimates errors at orders k, k-1, k-2, decides 
+ * whether or not to suggest an order decrease, and performs 
+ * the local error test. 
+ *
+ * IDATestError returns either IDA_SUCCESS or ERROR_TEST_FAIL.
+ */
+
+static int IDATestError(IDAMem IDA_mem, realtype ck, 
+                        realtype *err_k, realtype *err_km1)
+{
+  realtype err_km2;                         /* estimated error at k-2 */
+  realtype enorm_k, enorm_km1, enorm_km2;   /* error norms */
+  realtype terr_k, terr_km1, terr_km2;      /* local truncation error norms */
+
+  /* Compute error for order k. */
+  enorm_k = IDAWrmsNorm(IDA_mem, ee, ewt, suppressalg);
+  *err_k = sigma[kk] * enorm_k;
+  terr_k = (kk+1) * (*err_k);
+
+  knew = kk;
+
+  if ( kk > 1 ) {
+
+    /* Compute error at order k-1 */
+    N_VLinearSum(ONE, phi[kk], ONE, ee, delta);
+    enorm_km1 = IDAWrmsNorm(IDA_mem, delta, ewt, suppressalg);
+    *err_km1 = sigma[kk-1] * enorm_km1;
+    terr_km1 = kk * (*err_km1);
+
+    if ( kk > 2 ) {
+
+      /* Compute error at order k-2 */
+      N_VLinearSum(ONE, phi[kk-1], ONE, delta, delta);
+      enorm_km2 = IDAWrmsNorm(IDA_mem, delta, ewt, suppressalg);
+      err_km2 = sigma[kk-2] * enorm_km2;
+      terr_km2 = (kk-1) * err_km2;
+
+      /* Decrease order if errors are reduced */
+      if (SUNMAX(terr_km1, terr_km2) <= terr_k)  knew = kk - 1;
+
+    } else {
+
+      /* Decrease order to 1 if errors are reduced by at least 1/2 */
+      if (terr_km1 <= (HALF * terr_k) )  knew = kk - 1; 
+
+    }
+
+  }
+
+  /* Perform error test */
+  if (ck * enorm_k > ONE) return(ERROR_TEST_FAIL);
+  else                    return(IDA_SUCCESS);
+}
+
+/*
+ * IDARestore
+ *
+ * This routine restores tn, psi, and phi in the event of a failure.
+ * It changes back phi-star to phi (changed in IDASetCoeffs)
+ */
+
+static void IDARestore(IDAMem IDA_mem, realtype saved_t)
+{
+  int j;
+
+  tn = saved_t;
+  
+  for (j = 1; j <= kk; j++) 
+    psi[j-1] = psi[j] - hh;
+
+  for (j = ns; j <= kk; j++) 
+    N_VScale(ONE/beta[j], phi[j], phi[j]);
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Handler for convergence and/or error test failures
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAHandleNFlag
+ *
+ * This routine handles failures indicated by the input variable nflag. 
+ * Positive values indicate various recoverable failures while negative
+ * values indicate nonrecoverable failures. This routine adjusts the
+ * step size for recoverable failures. 
+ *
+ *  Possible nflag values (input):
+ *
+ *   --convergence failures--
+ *   IDA_RES_RECVR              > 0
+ *   IDA_LSOLVE_RECVR           > 0
+ *   IDA_CONSTR_RECVR           > 0
+ *   IDA_NCONV_RECVR            > 0
+ *   IDA_RES_FAIL               < 0
+ *   IDA_LSOLVE_FAIL            < 0
+ *   IDA_LSETUP_FAIL            < 0
+ *
+ *   --error test failure--
+ *   ERROR_TEST_FAIL            > 0
+ *
+ *  Possible kflag values (output):
+ *
+ *   --recoverable--
+ *   PREDICT_AGAIN
+ *
+ *   --nonrecoverable--
+ *   IDA_CONSTR_FAIL   
+ *   IDA_REP_RES_ERR    
+ *   IDA_ERR_FAIL  
+ *   IDA_CONV_FAIL 
+ *   IDA_RES_FAIL
+ *   IDA_LSETUP_FAIL
+ *   IDA_LSOLVE_FAIL
+ */
+
+static int IDAHandleNFlag(IDAMem IDA_mem, int nflag, realtype err_k, realtype err_km1,
+                          long int *ncfnPtr, int *ncfPtr, long int *netfPtr, int *nefPtr)
+{
+  realtype err_knew;
+
+  phase = 1;
+    
+  if (nflag != ERROR_TEST_FAIL) {
+
+    /*-----------------------
+      Nonlinear solver failed 
+      -----------------------*/
+
+    (*ncfPtr)++;      /* local counter for convergence failures */
+    (*ncfnPtr)++;     /* global counter for convergence failures */
+    
+    if (nflag < 0) {  /* nonrecoverable failure */
+
+      return(nflag);
+
+    } else {          /* recoverable failure    */
+      
+      /* Reduce step size for a new prediction
+         Note that if nflag=IDA_CONSTR_RECVR then rr was already set in IDANls */
+      if (nflag != IDA_CONSTR_RECVR) rr = QUARTER;
+      hh *= rr;
+
+      /* Test if there were too many convergence failures */
+      if (*ncfPtr < maxncf)               return(PREDICT_AGAIN);
+      else if (nflag == IDA_RES_RECVR)    return(IDA_REP_RES_ERR);
+      else if (nflag == IDA_CONSTR_RECVR) return(IDA_CONSTR_FAIL);
+      else                                return(IDA_CONV_FAIL);
+    }
+    
+  } else { 
+
+    /*-----------------
+      Error Test failed 
+      -----------------*/
+
+    (*nefPtr)++;      /* local counter for error test failures */
+    (*netfPtr)++;     /* global counter for error test failures */
+    
+    if (*nefPtr == 1) {
+      
+      /* On first error test failure, keep current order or lower order by one. 
+         Compute new stepsize based on differences of the solution. */
+
+      err_knew = (kk==knew)? err_k : err_km1;
+
+      kk = knew;      
+      rr = PT9 * SUNRpowerR( TWO * err_knew + PT0001,(-ONE/(kk+1)) );
+      rr = SUNMAX(QUARTER, SUNMIN(PT9,rr));
+      hh *=rr;
+      return(PREDICT_AGAIN);
+      
+    } else if (*nefPtr == 2) {
+      
+      /* On second error test failure, use current order or decrease order by one. 
+         Reduce stepsize by factor of 1/4. */
+
+      kk = knew;
+      rr = QUARTER;
+      hh *= rr;
+      return(PREDICT_AGAIN);
+      
+    } else if (*nefPtr < maxnef) {
+      
+      /* On third and subsequent error test failures, set order to 1.
+         Reduce stepsize by factor of 1/4. */
+      kk = 1;
+      rr = QUARTER;
+      hh *= rr;
+      return(PREDICT_AGAIN);
+
+    } else {
+
+      /* Too many error test failures */
+      return(IDA_ERR_FAIL);
+
+    }    
+
+  }
+      
+}
+
+/*
+ * IDAReset
+ *
+ * This routine is called only if we need to predict again at the 
+ * very first step. In such a case, reset phi[1] and psi[0].
+ */
+
+static void IDAReset(IDAMem IDA_mem)
+{
+  psi[0] = hh;
+
+  N_VScale(rr, phi[1], phi[1]);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Function called after a successful step
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDACompleteStep
+ *
+ * This routine completes a successful step.  It increments nst,
+ * saves the stepsize and order used, makes the final selection of
+ * stepsize and order for the next step, and updates the phi array.
+ */
+
+static void IDACompleteStep(IDAMem IDA_mem, realtype err_k, realtype err_km1)
+{
+  int j, kdiff, action;
+  realtype terr_k, terr_km1, terr_kp1;
+  realtype err_knew, err_kp1;
+  realtype enorm, tmp, hnew;
+
+  nst++;
+  kdiff = kk - kused;
+  kused = kk;
+  hused = hh;
+
+  if ( (knew == kk-1) || (kk == maxord) ) phase = 1;
+
+  /* For the first few steps, until either a step fails, or the order is 
+     reduced, or the order reaches its maximum, we raise the order and double 
+     the stepsize. During these steps, phase = 0. Thereafter, phase = 1, and
+     stepsize and order are set by the usual local error algorithm.         
+     
+     Note that, after the first step, the order is not increased, as not all 
+     of the neccessary information is available yet. */
+  
+  if (phase == 0) {
+
+    if(nst > 1) {
+      kk++;
+      hnew = TWO * hh;
+      if( (tmp = SUNRabs(hnew)*hmax_inv) > ONE ) hnew /= tmp;
+      hh = hnew;
+    }
+
+  } else {
+
+    action = UNSET;
+    
+    /* Set action = LOWER/MAINTAIN/RAISE to specify order decision */
+    
+    if (knew == kk-1)                   {action = LOWER;    goto takeaction;}
+    if (kk == maxord)                   {action = MAINTAIN; goto takeaction;}
+    if ( (kk+1 >= ns ) || (kdiff == 1)) {action = MAINTAIN; goto takeaction;}
+    
+    /* Estimate the error at order k+1, unless already decided to
+       reduce order, or already using maximum order, or stepsize has not
+       been constant, or order was just raised. */
+    
+    N_VLinearSum (ONE, ee, -ONE, phi[kk+1], tempv1);
+    enorm = IDAWrmsNorm(IDA_mem, tempv1, ewt, suppressalg);
+    err_kp1= enorm/(kk+2);
+
+    /* Choose among orders k-1, k, k+1 using local truncation error norms. */
+
+    terr_k   = (kk+1) * err_k;
+    terr_kp1 = (kk+2) * err_kp1;
+
+    if (kk == 1) {
+      if (terr_kp1 >= HALF * terr_k)         {action = MAINTAIN; goto takeaction;}
+      else                                   {action = RAISE;    goto takeaction;}
+    } else {
+      terr_km1 = kk * err_km1;
+      if (terr_km1 <= SUNMIN(terr_k, terr_kp1)) {action = LOWER;    goto takeaction;}
+      else if (terr_kp1 >= terr_k)           {action = MAINTAIN; goto takeaction;}
+      else                                   {action = RAISE;    goto takeaction;}
+    }
+    
+  takeaction:
+    
+    /* Set the estimated error norm and, on change of order, reset kk. */
+    if      (action == RAISE) { kk++; err_knew = err_kp1; }
+    else if (action == LOWER) { kk--; err_knew = err_km1; }
+    else                      {       err_knew = err_k;   }  
+
+    /* Compute rr = tentative ratio hnew/hh from error norm estimate.
+       Reduce hh if rr <= 1, double hh if rr >= 2, else leave hh as is.
+       If hh is reduced, hnew/hh is restricted to be between .5 and .9. */
+    
+    hnew = hh;
+    rr = SUNRpowerR( (TWO * err_knew + PT0001) , (-ONE/(kk+1) ) );
+    
+    if (rr >= TWO) {
+      hnew = TWO * hh;
+      if( (tmp = SUNRabs(hnew)*hmax_inv) > ONE ) hnew /= tmp;
+    } else if (rr <= ONE ) { 
+      rr = SUNMAX(HALF, SUNMIN(PT9,rr));
+      hnew = hh * rr;
+    }
+    
+    hh = hnew;
+    
+  } /* end of phase if block */
+  
+  /* Save ee for possible order increase on next step */
+  if (kused < maxord) {
+    N_VScale(ONE, ee, phi[kused+1]);
+  }
+
+  /* Update phi arrays */
+  N_VLinearSum(ONE, ee, ONE, phi[kused], phi[kused]);
+  for (j= kused-1; j>=0; j--)
+    N_VLinearSum(ONE, phi[j], ONE, phi[j+1], phi[j]);
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Interpolated output
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * IDAGetSolution
+ *
+ * This routine evaluates y(t) and y'(t) as the value and derivative of 
+ * the interpolating polynomial at the independent variable t, and stores
+ * the results in the vectors yret and ypret.  It uses the current
+ * independent variable value, tn, and the method order last used, kused.
+ * This function is called by IDASolve with t = tout, t = tn, or t = tstop.
+ * 
+ * If kused = 0 (no step has been taken), or if t = tn, then the order used
+ * here is taken to be 1, giving yret = phi[0], ypret = phi[1]/psi[0].
+ * 
+ * The return values are:
+ *   IDA_SUCCESS  if t is legal, or
+ *   IDA_BAD_T    if t is not within the interval of the last step taken.
+ */
+
+int IDAGetSolution(void *ida_mem, realtype t, N_Vector yret, N_Vector ypret)
+{
+  IDAMem IDA_mem;
+  realtype tfuzz, tp, delt, c, d, gam;
+  int j, kord;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetSolution", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem; 
+
+  /* Check t for legality.  Here tn - hused is t_{n-1}. */
+ 
+  tfuzz = HUNDRED * uround * (SUNRabs(tn) + SUNRabs(hh));
+  if (hh < ZERO) tfuzz = - tfuzz;
+  tp = tn - hused - tfuzz;
+  if ((t - tp)*hh < ZERO) {
+    IDAProcessError(IDA_mem, IDA_BAD_T, "IDA", "IDAGetSolution", MSG_BAD_T, t, tn-hused, tn);
+    return(IDA_BAD_T);
+  }
+
+  /* Initialize yret = phi[0], ypret = 0, and kord = (kused or 1). */
+
+  N_VScale (ONE, phi[0], yret);
+  N_VConst (ZERO, ypret);
+  kord = kused; 
+  if (kused == 0) kord = 1;
+
+  /* Accumulate multiples of columns phi[j] into yret and ypret. */
+
+  delt = t - tn;
+  c = ONE; d = ZERO;
+  gam = delt/psi[0];
+  for (j=1; j <= kord; j++) {
+    d = d*gam + c/psi[j-1];
+    c = c*gam;
+    gam = (delt + psi[j-1])/psi[j];
+    N_VLinearSum(ONE,  yret, c, phi[j],  yret);
+    N_VLinearSum(ONE, ypret, d, phi[j], ypret);
+  }
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Norm function
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAWrmsNorm
+ *
+ *  Returns the WRMS norm of vector x with weights w.
+ *  If mask = TRUE, the weight vector w is masked by id, i.e.,
+ *      nrm = N_VWrmsNormMask(x,w,id);
+ *  Otherwise,
+ *      nrm = N_VWrmsNorm(x,w);
+ * 
+ * mask = FALSE       when the call is made from the nonlinear solver.
+ * mask = suppressalg otherwise.
+ */
+
+realtype IDAWrmsNorm(IDAMem IDA_mem, N_Vector x, N_Vector w, 
+                     booleantype mask)
+{
+  realtype nrm;
+
+  if (mask) nrm = N_VWrmsNormMask(x, w, id);
+  else      nrm = N_VWrmsNorm(x, w);
+
+  return(nrm);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions for rootfinding
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDARcheck1
+ *
+ * This routine completes the initialization of rootfinding memory
+ * information, and checks whether g has a zero both at and very near
+ * the initial point of the IVP.
+ *
+ * This routine returns an int equal to:
+ *  IDA_RTFUNC_FAIL < 0 if the g function failed, or
+ *  IDA_SUCCESS     = 0 otherwise.
+ */
+
+static int IDARcheck1(IDAMem IDA_mem)
+{
+  int i, retval;
+  realtype smallh, hratio, tplus;
+  booleantype zroot;
+
+  for (i = 0; i < nrtfn; i++) iroots[i] = 0;
+  tlo = tn;
+  ttol = (SUNRabs(tn) + SUNRabs(hh))*uround*HUNDRED;
+
+  /* Evaluate g at initial t and check for zero values. */
+  retval = gfun (tlo, phi[0], phi[1], glo, user_data);
+  nge = 1;
+  if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) {
+    if (SUNRabs(glo[i]) == ZERO) {
+      zroot = TRUE;
+      gactive[i] = FALSE;
+    }
+  }
+  if (!zroot) return(IDA_SUCCESS);
+
+  /* Some g_i is zero at t0; look at g at t0+(small increment). */
+  hratio = SUNMAX(ttol/SUNRabs(hh), PT1);
+  smallh = hratio*hh;
+  tplus = tlo + smallh;
+  N_VLinearSum(ONE, phi[0], smallh, phi[1], yy);
+  retval = gfun (tplus, yy, phi[1], ghi, user_data);  
+  nge++;
+  if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+  /* We check now only the components of g which were exactly 0.0 at t0
+   * to see if we can 'activate' them. */
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i] && SUNRabs(ghi[i]) != ZERO) {
+      gactive[i] = TRUE;
+      glo[i] = ghi[i];
+    }
+  }
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDARcheck2
+ *
+ * This routine checks for exact zeros of g at the last root found,
+ * if the last return was a root.  It then checks for a close pair of
+ * zeros (an error condition), and for a new root at a nearby point.
+ * The array glo = g(tlo) at the left endpoint of the search interval
+ * is adjusted if necessary to assure that all g_i are nonzero
+ * there, before returning to do a root search in the interval.
+ *
+ * On entry, tlo = tretlast is the last value of tret returned by
+ * IDASolve.  This may be the previous tn, the previous tout value,
+ * or the last root location.
+ *
+ * This routine returns an int equal to:
+ *     IDA_RTFUNC_FAIL < 0 if the g function failed, or
+ *     CLOSERT         = 3 if a close pair of zeros was found, or
+ *     RTFOUND         = 1 if a new zero of g was found near tlo, or
+ *     IDA_SUCCESS     = 0 otherwise.
+ */
+
+static int IDARcheck2(IDAMem IDA_mem)
+{
+  int i, retval;
+  realtype smallh, hratio, tplus;
+  booleantype zroot;
+
+  if (irfnd == 0) return(IDA_SUCCESS);
+
+  (void) IDAGetSolution(IDA_mem, tlo, yy, yp);
+  retval = gfun (tlo, yy, yp, glo, user_data);  
+  nge++;
+  if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) iroots[i] = 0;
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i]) continue;
+    if (SUNRabs(glo[i]) == ZERO) {
+      zroot = TRUE;
+      iroots[i] = 1;
+    }
+  }
+  if (!zroot) return(IDA_SUCCESS);
+
+  /* One or more g_i has a zero at tlo.  Check g at tlo+smallh. */
+  ttol = (SUNRabs(tn) + SUNRabs(hh))*uround*HUNDRED;
+  smallh = (hh > ZERO) ? ttol : -ttol;
+  tplus = tlo + smallh;
+  if ( (tplus - tn)*hh >= ZERO) {
+    hratio = smallh/hh;
+    N_VLinearSum(ONE, yy, hratio, phi[1], yy);
+  } else {
+    (void) IDAGetSolution(IDA_mem, tplus, yy, yp);
+  }
+  retval = gfun (tplus, yy, yp, ghi, user_data);  
+  nge++;
+  if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+  /* Check for close roots (error return), for a new zero at tlo+smallh,
+  and for a g_i that changed from zero to nonzero. */
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i]) continue;
+    if (SUNRabs(ghi[i]) == ZERO) {
+      if (iroots[i] == 1) return(CLOSERT);
+      zroot = TRUE;
+      iroots[i] = 1;
+    } else {
+      if (iroots[i] == 1) glo[i] = ghi[i];
+    }
+  }
+  if (zroot) return(RTFOUND);
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDARcheck3
+ *
+ * This routine interfaces to IDARootfind to look for a root of g
+ * between tlo and either tn or tout, whichever comes first.
+ * Only roots beyond tlo in the direction of integration are sought.
+ *
+ * This routine returns an int equal to:
+ *     IDA_RTFUNC_FAIL < 0 if the g function failed, or
+ *     RTFOUND         = 1 if a root of g was found, or
+ *     IDA_SUCCESS     = 0 otherwise.
+ */
+
+static int IDARcheck3(IDAMem IDA_mem)
+{
+  int i, ier, retval;
+
+  /* Set thi = tn or tout, whichever comes first. */
+  if (taskc == IDA_ONE_STEP) thi = tn;
+  if (taskc == IDA_NORMAL) {
+    thi = ( (toutc - tn)*hh >= ZERO) ? tn : toutc;
+  }
+
+  /* Get y and y' at thi. */
+  (void) IDAGetSolution(IDA_mem, thi, yy, yp);
+
+
+  /* Set ghi = g(thi) and call IDARootfind to search (tlo,thi) for roots. */
+  retval = gfun (thi, yy, yp, ghi, user_data);  
+  nge++;
+  if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+  ttol = (SUNRabs(tn) + SUNRabs(hh))*uround*HUNDRED;
+  ier = IDARootfind(IDA_mem);
+  if (ier == IDA_RTFUNC_FAIL) return(IDA_RTFUNC_FAIL);
+  for(i=0; i<nrtfn; i++) {
+    if(!gactive[i] && grout[i] != ZERO) gactive[i] = TRUE;
+  }
+  tlo = trout;
+  for (i = 0; i < nrtfn; i++) glo[i] = grout[i];
+
+  /* If no root found, return IDA_SUCCESS. */  
+  if (ier == IDA_SUCCESS) return(IDA_SUCCESS);
+
+  /* If a root was found, interpolate to get y(trout) and return.  */
+  (void) IDAGetSolution(IDA_mem, trout, yy, yp);
+  return(RTFOUND);
+}
+
+/*
+ * IDARootfind
+ *
+ * This routine solves for a root of g(t) between tlo and thi, if
+ * one exists.  Only roots of odd multiplicity (i.e. with a change
+ * of sign in one of the g_i), or exact zeros, are found.
+ * Here the sign of tlo - thi is arbitrary, but if multiple roots
+ * are found, the one closest to tlo is returned.
+ *
+ * The method used is the Illinois algorithm, a modified secant method.
+ * Reference: Kathie L. Hiebert and Lawrence F. Shampine, Implicitly
+ * Defined Output Points for Solutions of ODEs, Sandia National
+ * Laboratory Report SAND80-0180, February 1980.
+ *
+ * This routine uses the following parameters for communication:
+ *
+ * nrtfn    = number of functions g_i, or number of components of
+ *            the vector-valued function g(t).  Input only.
+ *
+ * gfun     = user-defined function for g(t).  Its form is
+ *            (void) gfun(t, y, yp, gt, user_data)
+ *
+ * rootdir  = in array specifying the direction of zero-crossings.
+ *            If rootdir[i] > 0, search for roots of g_i only if
+ *            g_i is increasing; if rootdir[i] < 0, search for
+ *            roots of g_i only if g_i is decreasing; otherwise
+ *            always search for roots of g_i.
+ *
+ * gactive  = array specifying whether a component of g should
+ *            or should not be monitored. gactive[i] is initially
+ *            set to TRUE for all i=0,...,nrtfn-1, but it may be
+ *            reset to FALSE if at the first step g[i] is 0.0
+ *            both at the I.C. and at a small perturbation of them.
+ *            gactive[i] is then set back on TRUE only after the 
+ *            corresponding g function moves away from 0.0.
+ *
+ * nge      = cumulative counter for gfun calls.
+ *
+ * ttol     = a convergence tolerance for trout.  Input only.
+ *            When a root at trout is found, it is located only to
+ *            within a tolerance of ttol.  Typically, ttol should
+ *            be set to a value on the order of
+ *               100 * UROUND * max (SUNRabs(tlo), SUNRabs(thi))
+ *            where UROUND is the unit roundoff of the machine.
+ *
+ * tlo, thi = endpoints of the interval in which roots are sought.
+ *            On input, these must be distinct, but tlo - thi may
+ *            be of either sign.  The direction of integration is
+ *            assumed to be from tlo to thi.  On return, tlo and thi
+ *            are the endpoints of the final relevant interval.
+ *
+ * glo, ghi = arrays of length nrtfn containing the vectors g(tlo)
+ *            and g(thi) respectively.  Input and output.  On input,
+ *            none of the glo[i] should be zero.
+ *
+ * trout    = root location, if a root was found, or thi if not.
+ *            Output only.  If a root was found other than an exact
+ *            zero of g, trout is the endpoint thi of the final
+ *            interval bracketing the root, with size at most ttol.
+ *
+ * grout    = array of length nrtfn containing g(trout) on return.
+ *
+ * iroots   = int array of length nrtfn with root information.
+ *            Output only.  If a root was found, iroots indicates
+ *            which components g_i have a root at trout.  For
+ *            i = 0, ..., nrtfn-1, iroots[i] = 1 if g_i has a root
+ *            and g_i is increasing, iroots[i] = -1 if g_i has a
+ *            root and g_i is decreasing, and iroots[i] = 0 if g_i
+ *            has no roots or g_i varies in the direction opposite
+ *            to that indicated by rootdir[i].
+ *
+ * This routine returns an int equal to:
+ *      IDA_RTFUNC_FAIL < 0 if the g function failed, or
+ *      RTFOUND         = 1 if a root of g was found, or
+ *      IDA_SUCCESS     = 0 otherwise.
+ *
+ */
+
+static int IDARootfind(IDAMem IDA_mem)
+{
+  realtype alph, tmid, gfrac, maxfrac, fracint, fracsub;
+  int i, retval, imax, side, sideprev;
+  booleantype zroot, sgnchg;
+
+  imax = 0;
+
+  /* First check for change in sign in ghi or for a zero in ghi. */
+  maxfrac = ZERO;
+  zroot = FALSE;
+  sgnchg = FALSE;
+  for (i = 0;  i < nrtfn; i++) {
+    if(!gactive[i]) continue;
+    if (SUNRabs(ghi[i]) == ZERO) {
+      if(rootdir[i]*glo[i] <= ZERO) {
+        zroot = TRUE;
+      }
+    } else {
+      if ( (glo[i]*ghi[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) {
+        gfrac = SUNRabs(ghi[i]/(ghi[i] - glo[i]));
+        if (gfrac > maxfrac) {
+          sgnchg = TRUE;
+          maxfrac = gfrac;
+          imax = i;
+        }
+      }
+    }
+  }
+
+  /* If no sign change was found, reset trout and grout.  Then return
+     IDA_SUCCESS if no zero was found, or set iroots and return RTFOUND.  */ 
+  if (!sgnchg) {
+    trout = thi;
+    for (i = 0; i < nrtfn; i++) grout[i] = ghi[i];
+    if (!zroot) return(IDA_SUCCESS);
+    for (i = 0; i < nrtfn; i++) {
+      iroots[i] = 0;
+      if(!gactive[i]) continue;
+      if ( (SUNRabs(ghi[i]) == ZERO) && (rootdir[i]*glo[i] <= ZERO) )
+        iroots[i] = glo[i] > 0 ? -1:1;
+    }
+    return(RTFOUND);
+  }
+
+  /* Initialize alph to avoid compiler warning */
+  alph = ONE;
+
+  /* A sign change was found.  Loop to locate nearest root. */
+
+  side = 0;  sideprev = -1;
+  loop {                                    /* Looping point */
+
+    /* If interval size is already less than tolerance ttol, break. */
+      if (SUNRabs(thi - tlo) <= ttol) break;
+
+    /* Set weight alph.
+       On the first two passes, set alph = 1.  Thereafter, reset alph
+       according to the side (low vs high) of the subinterval in which
+       the sign change was found in the previous two passes.
+       If the sides were opposite, set alph = 1.
+       If the sides were the same, then double alph (if high side),
+       or halve alph (if low side).
+       The next guess tmid is the secant method value if alph = 1, but
+       is closer to tlo if alph < 1, and closer to thi if alph > 1.    */
+
+    if (sideprev == side) {
+      alph = (side == 2) ? alph*TWO : alph*HALF;
+    } else {
+      alph = ONE;
+    }
+
+    /* Set next root approximation tmid and get g(tmid).
+       If tmid is too close to tlo or thi, adjust it inward,
+       by a fractional distance that is between 0.1 and 0.5.  */
+    tmid = thi - (thi - tlo)*ghi[imax]/(ghi[imax] - alph*glo[imax]);
+    if (SUNRabs(tmid - tlo) < HALF*ttol) {
+      fracint = SUNRabs(thi - tlo)/ttol;
+      fracsub = (fracint > FIVE) ? PT1 : HALF/fracint;
+      tmid = tlo + fracsub*(thi - tlo);
+    }
+    if (SUNRabs(thi - tmid) < HALF*ttol) {
+      fracint = SUNRabs(thi - tlo)/ttol;
+      fracsub = (fracint > FIVE) ? PT1 : HALF/fracint;
+      tmid = thi - fracsub*(thi - tlo);
+    }
+
+    (void) IDAGetSolution(IDA_mem, tmid, yy, yp);
+    retval = gfun (tmid, yy, yp, grout, user_data);  
+    nge++;
+    if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+    /* Check to see in which subinterval g changes sign, and reset imax.
+       Set side = 1 if sign change is on low side, or 2 if on high side.  */  
+    maxfrac = ZERO;
+    zroot = FALSE;
+    sgnchg = FALSE;
+    sideprev = side;
+    for (i = 0;  i < nrtfn; i++) {
+      if(!gactive[i]) continue;
+      if (SUNRabs(grout[i]) == ZERO) {
+        if(rootdir[i]*glo[i] <= ZERO) zroot = TRUE;
+      } else {
+        if ( (glo[i]*grout[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) {
+          gfrac = SUNRabs(grout[i]/(grout[i] - glo[i]));
+          if (gfrac > maxfrac) {
+            sgnchg = TRUE;
+            maxfrac = gfrac;
+            imax = i;
+          }
+        }
+      }
+    }
+    if (sgnchg) {
+      /* Sign change found in (tlo,tmid); replace thi with tmid. */
+      thi = tmid;
+      for (i = 0; i < nrtfn; i++) ghi[i] = grout[i];
+      side = 1;
+      /* Stop at root thi if converged; otherwise loop. */
+      if (SUNRabs(thi - tlo) <= ttol) break;
+      continue;  /* Return to looping point. */
+    }
+
+    if (zroot) {
+      /* No sign change in (tlo,tmid), but g = 0 at tmid; return root tmid. */
+      thi = tmid;
+      for (i = 0; i < nrtfn; i++) ghi[i] = grout[i];
+      break;
+    }
+
+    /* No sign change in (tlo,tmid), and no zero at tmid.
+       Sign change must be in (tmid,thi).  Replace tlo with tmid. */
+    tlo = tmid;
+    for (i = 0; i < nrtfn; i++) glo[i] = grout[i];
+    side = 2;
+    /* Stop at root thi if converged; otherwise loop back. */
+    if (SUNRabs(thi - tlo) <= ttol) break;
+
+  } /* End of root-search loop */
+
+  /* Reset trout and grout, set iroots, and return RTFOUND. */
+  trout = thi;
+  for (i = 0; i < nrtfn; i++) {
+    grout[i] = ghi[i];
+    iroots[i] = 0;
+    if(!gactive[i]) continue;
+    if ( (SUNRabs(ghi[i]) == ZERO) && (rootdir[i]*glo[i] <= ZERO) )
+      iroots[i] = glo[i] > 0 ? -1:1;
+    if ( (glo[i]*ghi[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) 
+      iroots[i] = glo[i] > 0 ? -1:1;
+  }
+  return(RTFOUND);
+}
+
+/* 
+ * =================================================================
+ * IDA error message handling functions   
+ * =================================================================
+ */
+
+/*
+ * IDAProcessError is a high level error handling function.
+ * - If ida_mem==NULL it prints the error message to stderr.
+ * - Otherwise, it sets up and calls the error handling function 
+ *   pointed to by ida_ehfun.
+ */
+
+#define ehfun   (IDA_mem->ida_ehfun)
+#define eh_data (IDA_mem->ida_eh_data)
+
+void IDAProcessError(IDAMem IDA_mem, 
+                    int error_code, const char *module, const char *fname, 
+                    const char *msgfmt, ...)
+{
+  va_list ap;
+  char msg[256];
+
+  /* Initialize the argument pointer variable 
+     (msgfmt is the last required argument to IDAProcessError) */
+
+  va_start(ap, msgfmt);
+
+  /* Compose the message */
+
+  vsprintf(msg, msgfmt, ap);
+
+  if (IDA_mem == NULL) {    /* We write to stderr */
+#ifndef NO_FPRINTF_OUTPUT
+    fprintf(stderr, "\n[%s ERROR]  %s\n  ", module, fname);
+    fprintf(stderr, "%s\n\n", msg);
+#endif
+
+  } else {                 /* We can call ehfun */
+    ehfun(error_code, module, fname, msg, eh_data);
+  }
+
+  /* Finalize argument processing */
+  va_end(ap);
+
+  return;
+}
+
+/* IDAErrHandler is the default error handling function.
+   It sends the error message to the stream pointed to by ida_errfp */
+
+#define errfp (IDA_mem->ida_errfp)
+
+void IDAErrHandler(int error_code, const char *module,
+                   const char *function, char *msg, void *data)
+{
+  IDAMem IDA_mem;
+  char err_type[10];
+
+  /* data points to IDA_mem here */
+
+  IDA_mem = (IDAMem) data;
+
+  if (error_code == IDA_WARNING)
+    sprintf(err_type,"WARNING");
+  else
+    sprintf(err_type,"ERROR");
+
+#ifndef NO_FPRINTF_OUTPUT
+  if (errfp!=NULL) {
+    fprintf(errfp,"\n[%s %s]  %s\n",module,err_type,function);
+    fprintf(errfp,"  %s\n\n",msg);
+  }
+#endif
+
+  return;
+}
diff --git a/src/ida/ida_band.c b/src/ida/ida_band.c
new file mode 100644
index 0000000..11992fa
--- /dev/null
+++ b/src/ida/ida_band.c
@@ -0,0 +1,328 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4951 $
+ * $Date: 2016-09-22 10:21:00 -0700 (Thu, 22 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDA banded linear
+ * solver module, IDABAND. This module uses standard banded
+ * matrix techniques to solve the linear systems generated by the
+ * (nonlinear) Newton iteration process. The user may either
+ * supply a banded Jacobian routine or use the routine supplied
+ * with this module (IDABandDQJac).
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ida/ida_band.h>
+#include "ida_direct_impl.h"
+#include "ida_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* IDABAND linit, lsetup, lsolve, and lfree routines */
+ 
+static int IDABandInit(IDAMem IDA_mem);
+
+static int IDABandSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+                        N_Vector rrp, N_Vector tmp1,
+                        N_Vector tmp2, N_Vector tmp3);
+
+static int IDABandSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                        N_Vector ycur, N_Vector ypcur, N_Vector rrcur);
+
+static int IDABandFree(IDAMem IDA_mem);
+
+/* Readability Replacements */
+
+#define res         (IDA_mem->ida_res)
+#define tn          (IDA_mem->ida_tn)
+#define hh          (IDA_mem->ida_hh)
+#define cj          (IDA_mem->ida_cj)
+#define cjratio     (IDA_mem->ida_cjratio)
+#define ewt         (IDA_mem->ida_ewt)
+#define constraints (IDA_mem->ida_constraints)
+#define linit       (IDA_mem->ida_linit)
+#define lsetup      (IDA_mem->ida_lsetup)
+#define lsolve      (IDA_mem->ida_lsolve)
+#define lperf       (IDA_mem->ida_lperf)
+#define lfree       (IDA_mem->ida_lfree)
+#define lmem        (IDA_mem->ida_lmem)
+#define setupNonNull (IDA_mem->ida_setupNonNull)
+#define vec_tmpl     (IDA_mem->ida_tempv1)
+
+#define mtype       (idadls_mem->d_type)
+#define neq         (idadls_mem->d_n)
+#define ml          (idadls_mem->d_ml)
+#define mu          (idadls_mem->d_mu)
+#define jacDQ       (idadls_mem->d_jacDQ)
+#define bjac        (idadls_mem->d_bjac)
+#define JJ          (idadls_mem->d_J)
+#define smu         (idadls_mem->d_smu)
+#define lpivots     (idadls_mem->d_lpivots)
+#define nje         (idadls_mem->d_nje)
+#define nreDQ       (idadls_mem->d_nreDQ)
+#define jacdata     (idadls_mem->d_J_data)
+#define last_flag   (idadls_mem->d_last_flag)
+                  
+/*
+ * -----------------------------------------------------------------
+ * IDABand
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDABAND linear solver module.
+ * IDABand first calls the existing lfree routine if this is not NULL.
+ * Then it sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDABandInit, IDABandSetup,
+ * IDABandSolve, NULL, and IDABandFree, respectively.
+ * It allocates memory for a structure of type IDADlsMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem) to TRUE, sets the d_jacdata field in
+ * the IDADlsMemRec structure to be the input parameter jdata, and sets
+ * the d_bjac field to be:
+ *   (1) the input parameter bjac, if bjac != NULL, or
+ *   (2) IDABandDQJac, if bjac == NULL.
+ * Finally, it allocates memory for JJ and lpivots.
+ * IDABand returns IDADLS_SUCCESS = 0, IDADLS_LMEM_FAIL = -1,
+ * or IDADLS_ILL_INPUT = -2.
+ *
+ * NOTE: The band linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDABand will first 
+ *       test for a compatible N_Vector internal representation by
+ *       checking that the N_VGetArrayPointer function exists
+ * -----------------------------------------------------------------
+ */
+
+int IDABand(void *ida_mem, long int Neq, long int mupper, long int mlower)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDABAND", "IDABand", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if(vec_tmpl->ops->nvgetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDABAND", "IDABand", MSGD_BAD_NVECTOR);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Test mlower and mupper for legality. */
+  if ((mlower < 0) || (mupper < 0) || (mlower >= Neq) || (mupper >= Neq)) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDABAND", "IDABand", MSGD_BAD_SIZES);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree((IDAMem) ida_mem);
+
+  /* Set five main function fields in ida_mem. */
+  linit  = IDABandInit;
+  lsetup = IDABandSetup;
+  lsolve = IDABandSolve;
+  lperf  = NULL;
+  lfree  = IDABandFree;
+
+  /* Get memory for IDADlsMemRec. */
+  idadls_mem = NULL;
+  idadls_mem = (IDADlsMem) malloc(sizeof(struct IDADlsMemRec));
+  if (idadls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDABAND", "IDABand", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_BAND;
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ   = TRUE;
+  bjac    = NULL;
+  jacdata = NULL;
+
+  last_flag = IDADLS_SUCCESS;
+
+  idaDlsInitializeCounters(idadls_mem);
+
+  setupNonNull = TRUE;
+
+  /* Store problem size */
+  neq = Neq;
+
+  idadls_mem->d_ml = mlower;
+  idadls_mem->d_mu = mupper;
+    
+  /* Set extended upper half-bandwidth for JJ (required for pivoting). */
+  smu = SUNMIN(Neq-1, mupper + mlower);
+
+  /* Allocate memory for JJ and pivot array. */
+  JJ = NULL;
+  JJ = NewBandMat(Neq, mupper, mlower, smu);
+  if (JJ == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDABAND", "IDABand", MSGD_MEM_FAIL);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+
+  lpivots = NULL;
+  lpivots = NewLintArray(Neq);
+  if (lpivots == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDABAND", "IDABand", MSGD_MEM_FAIL);
+    DestroyMat(JJ);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }  
+  
+  /* Attach linear solver memory to the integrator memory */
+  lmem = idadls_mem;
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDABAND interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the IDABAND
+  linear solver module.  It returns 0.
+*/
+
+static int IDABandInit(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+
+  idaDlsInitializeCounters(idadls_mem);
+
+/*
+    nje   = 0;
+    nreDQ = 0;
+*/
+
+  if (jacDQ) {
+    bjac = idaDlsBandDQJac;
+    jacdata = IDA_mem;
+  } else {
+    jacdata = IDA_mem->ida_user_data;
+  }
+
+  last_flag = 0;
+  return(0);
+}
+
+
+/*
+  This routine does the setup operations for the IDABAND linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the band LU factorization routine.
+  The return value is either
+     IDADLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int IDABandSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+                        N_Vector rrp, N_Vector tmp1, N_Vector tmp2,
+                        N_Vector tmp3)
+{
+  int retval;
+  long int retfac;
+  IDADlsMem idadls_mem;
+  
+  idadls_mem = (IDADlsMem) lmem;
+
+  /* Increment nje counter. */
+  nje++;
+
+  /* Zero out JJ; call Jacobian routine jac; return if it failed. */
+  SetToZero(JJ);
+  retval = bjac(neq, mu, ml, tn,  cj, yyp, ypp, rrp,
+                JJ, jacdata, tmp1, tmp2, tmp3);
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDADLS_JACFUNC_UNRECVR, "IDABAND", "IDABandSetup", MSGD_JACFUNC_FAILED);
+    last_flag = IDADLS_JACFUNC_UNRECVR;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = IDADLS_JACFUNC_RECVR;
+    return(+1);
+  }
+
+  /* Do LU factorization of JJ; return success or fail flag. */
+  retfac = BandGBTRF(JJ, lpivots);
+  
+  if (retfac != 0) {
+    last_flag = retfac;
+    return(+1);
+  }
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+/*
+  This routine handles the solve operation for the IDABAND linear
+  solver module.  It calls the band backsolve routine, scales the
+  solution vector according to cjratio, then returns IDADLS_SUCCESS = 0.
+*/
+
+static int IDABandSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                        N_Vector ycur, N_Vector ypcur, N_Vector rrcur)
+{
+  IDADlsMem idadls_mem;
+  realtype *bd;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  bd = N_VGetArrayPointer(b);
+  BandGBTRS(JJ, lpivots, bd);
+
+  /* Scale the correction to account for change in cj. */
+  if (cjratio != ONE) N_VScale(TWO/(ONE + cjratio), b, b);
+  
+  last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine frees memory specific to the IDABAND linear solver.
+*/
+
+static int IDABandFree(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  DestroyMat(JJ);
+  DestroyArray(lpivots);
+  free(lmem); lmem = NULL;
+
+  return(0);
+
+}
+
diff --git a/src/ida/ida_bbdpre.c b/src/ida/ida_bbdpre.c
new file mode 100644
index 0000000..dcf3d00
--- /dev/null
+++ b/src/ida/ida_bbdpre.c
@@ -0,0 +1,596 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4920 $
+ * $Date: 2016-09-19 14:34:35 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file contains implementations of routines for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with IDA and an IDASPILS
+ * linear solver.
+ *
+ * NOTE: With only one processor in use, a banded matrix results
+ * rather than a block-diagonal matrix with banded blocks.
+ * Diagonal blocking occurs at the processor level.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "ida_impl.h"
+#include "ida_spils_impl.h"
+#include "ida_bbdpre_impl.h"
+
+#include <ida/ida_spgmr.h>
+#include <ida/ida_spbcgs.h>
+#include <ida/ida_sptfqmr.h>
+
+#include <sundials/sundials_math.h>
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+/* Prototypes of IDABBDPrecSetup and IDABBDPrecSolve */
+
+static int IDABBDPrecSetup(realtype tt,
+                           N_Vector yy, N_Vector yp, N_Vector rr,
+                           realtype c_j, void *prec_data,
+                           N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+ 
+static int IDABBDPrecSolve(realtype tt,
+                           N_Vector yy, N_Vector yp, N_Vector rr,
+                           N_Vector rvec, N_Vector zvec,
+                           realtype c_j, realtype delta, void *prec_data,
+                           N_Vector tmp);
+
+/* Prototype for IDABBDPrecFree */
+
+static int IDABBDPrecFree(IDAMem ida_mem);
+
+/* Prototype for difference quotient Jacobian calculation routine */
+
+static int IBBDDQJac(IBBDPrecData pdata, realtype tt, realtype cj,
+                     N_Vector yy, N_Vector yp, N_Vector gref, 
+                     N_Vector ytemp, N_Vector yptemp, N_Vector gtemp);
+
+/* 
+ * ================================================================
+ * User-Callable Functions: initialization, reinit and free
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define uround   (IDA_mem->ida_uround)
+#define vec_tmpl (IDA_mem->ida_tempv1)
+
+/*
+ * -----------------------------------------------------------------
+ * User-Callable Functions : malloc, reinit and free
+ * -----------------------------------------------------------------
+ */
+
+int IDABBDPrecInit(void *ida_mem, long int Nlocal, 
+                   long int mudq, long int mldq, 
+                   long int mukeep, long int mlkeep, 
+                   realtype dq_rel_yy, 
+                   IDABBDLocalFn Gres, IDABBDCommFn Gcomm)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  IBBDPrecData pdata;
+  N_Vector tempv4;
+  long int muk, mlk, storage_mu;
+  int flag;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_MEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) IDA_mem->ida_lmem;
+
+  /* Test if the NVECTOR package is compatible with BLOCK BAND preconditioner */
+  if(vec_tmpl->ops->nvgetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_BAD_NVECTOR);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Allocate data memory. */
+  pdata = NULL;
+  pdata = (IBBDPrecData) malloc(sizeof *pdata);
+  if (pdata == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Set pointers to glocal and gcomm; load half-bandwidths. */
+  pdata->ida_mem = IDA_mem;
+  pdata->glocal = Gres;
+  pdata->gcomm = Gcomm;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0, mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0, mldq));
+  muk = SUNMIN(Nlocal-1, SUNMAX(0, mukeep));
+  mlk = SUNMIN(Nlocal-1, SUNMAX(0, mlkeep));
+  pdata->mukeep = muk;
+  pdata->mlkeep = mlk;
+
+  /* Set extended upper half-bandwidth for PP (required for pivoting). */
+  storage_mu = SUNMIN(Nlocal-1, muk+mlk);
+
+  /* Allocate memory for preconditioner matrix. */
+  pdata->PP = NULL;
+  pdata->PP = NewBandMat(Nlocal, muk, mlk, storage_mu);
+  if (pdata->PP == NULL) { 
+    free(pdata); pdata = NULL;
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL); 
+  }
+
+  /* Allocate memory for lpivots. */
+  pdata->lpivots = NULL;
+  pdata->lpivots = NewLintArray(Nlocal);
+  if (pdata->lpivots == NULL) {
+    DestroyMat(pdata->PP);
+    free(pdata); pdata = NULL;
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Allocate tempv4 for use by IBBDDQJac */
+  tempv4 = NULL;
+  tempv4 = N_VClone(vec_tmpl); 
+  if (tempv4 == NULL){
+    DestroyMat(pdata->PP);
+    DestroyArray(pdata->lpivots);
+    free(pdata); pdata = NULL;
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+  pdata->tempv4 = tempv4;
+  
+  /* Set rel_yy based on input value dq_rel_yy (0 implies default). */
+  pdata->rel_yy = (dq_rel_yy > ZERO) ? dq_rel_yy : SUNRsqrt(uround); 
+
+  /* Store Nlocal to be used in IDABBDPrecSetup */
+  pdata->n_local = Nlocal;
+  
+  /* Set work space sizes and initialize nge. */
+  pdata->rpwsize = Nlocal*(mlk + storage_mu + 1);
+  pdata->ipwsize = Nlocal;
+  pdata->nge = 0;
+
+  /* make sure s_pdata is free from any previous allocations */
+  if (idaspils_mem->s_pfree != NULL) {
+    idaspils_mem->s_pfree(IDA_mem);
+  }
+
+  /* Point to the new pdata field in the SPILS memory */
+  idaspils_mem->s_pdata = pdata;
+
+  /* Attach the pfree function */
+  idaspils_mem->s_pfree = IDABBDPrecFree;
+
+  /* Attach preconditioner solve and setup functions */
+  flag = IDASpilsSetPreconditioner(ida_mem, IDABBDPrecSetup, IDABBDPrecSolve);
+
+  return(flag);
+}
+
+int IDABBDPrecReInit(void *ida_mem,
+		     long int mudq, long int mldq, 
+		     realtype dq_rel_yy)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  IBBDPrecData pdata;
+  long int Nlocal;
+
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDABBDPRE", "IDABBDPrecReInit", MSGBBD_MEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDABBDPRE", "IDABBDPrecReInit", MSGBBD_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) IDA_mem->ida_lmem;
+
+  /* Test if the preconditioner data is non-NULL */
+  if (idaspils_mem->s_pdata == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_PMEM_NULL, "IDABBDPRE", "IDABBDPrecReInit", MSGBBD_PMEM_NULL);
+    return(IDASPILS_PMEM_NULL);
+  } 
+  pdata = (IBBDPrecData) idaspils_mem->s_pdata;
+
+  /* Load half-bandwidths. */
+  Nlocal = pdata->n_local;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0, mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0, mldq));
+
+  /* Set rel_yy based on input value dq_rel_yy (0 implies default). */
+  pdata->rel_yy = (dq_rel_yy > ZERO) ? dq_rel_yy : SUNRsqrt(uround); 
+
+  /* Re-initialize nge */
+  pdata->nge = 0;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDABBDPrecGetWorkSpace(void *ida_mem, long int *lenrwBBDP, long int *leniwBBDP)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  IBBDPrecData pdata;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDABBDPRE", "IDABBDPrecGetWorkSpace", MSGBBD_MEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDABBDPRE", "IDABBDPrecGetWorkSpace", MSGBBD_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) IDA_mem->ida_lmem;
+
+  if (idaspils_mem->s_pdata == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_PMEM_NULL, "IDABBDPRE", "IDABBDPrecGetWorkSpace", MSGBBD_PMEM_NULL);
+    return(IDASPILS_PMEM_NULL);
+  } 
+  pdata = (IBBDPrecData) idaspils_mem->s_pdata;
+
+  *lenrwBBDP = pdata->rpwsize;
+  *leniwBBDP = pdata->ipwsize;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDABBDPrecGetNumGfnEvals(void *ida_mem, long int *ngevalsBBDP)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  IBBDPrecData pdata;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDABBDPRE", "IDABBDPrecGetNumGfnEvals", MSGBBD_MEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDABBDPRE", "IDABBDPrecGetNumGfnEvals", MSGBBD_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) IDA_mem->ida_lmem;
+
+  if (idaspils_mem->s_pdata == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_PMEM_NULL, "IDABBDPRE", "IDABBDPrecGetNumGfnEvals", MSGBBD_PMEM_NULL);
+    return(IDASPILS_PMEM_NULL);
+  } 
+  pdata = (IBBDPrecData) idaspils_mem->s_pdata;
+
+  *ngevalsBBDP = pdata->nge;
+
+  return(IDASPILS_SUCCESS);
+}
+
+
+/* Readability Replacements */
+
+#define Nlocal  (pdata->n_local)
+#define mudq    (pdata->mudq)
+#define mldq    (pdata->mldq)
+#define mukeep  (pdata->mukeep)
+#define mlkeep  (pdata->mlkeep)
+#define glocal  (pdata->glocal)
+#define gcomm   (pdata->gcomm)
+#define lpivots (pdata->lpivots)
+#define PP      (pdata->PP)
+#define tempv4  (pdata->tempv4)
+#define nge     (pdata->nge)
+#define rel_yy  (pdata->rel_yy)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDABBDPrecSetup                                     
+ * -----------------------------------------------------------------
+ * IDABBDPrecSetup generates a band-block-diagonal preconditioner
+ * matrix, where the local block (on this processor) is a band
+ * matrix. Each local block is computed by a difference quotient
+ * scheme via calls to the user-supplied routines glocal, gcomm.
+ * After generating the block in the band matrix PP, this routine
+ * does an LU factorization in place in PP.
+ *
+ * The IDABBDPrecSetup parameters used here are as follows:
+ *
+ * tt is the current value of the independent variable t.
+ *
+ * yy is the current value of the dependent variable vector,
+ *    namely the predicted value of y(t).
+ *
+ * yp is the current value of the derivative vector y',
+ *    namely the predicted value of y'(t).
+ *
+ * c_j is the scalar in the system Jacobian, proportional to 1/hh.
+ *
+ * bbd_data is the pointer to BBD memory set by IDABBDInit
+ *
+ * tmp1, tmp2, tmp3 are pointers to vectors of type
+ *                  N_Vector, used for temporary storage or
+ *                  work space.
+ *
+ * The arguments Neq, rr, res, uround, and nrePtr are not used.
+ *
+ * Return value:
+ * The value returned by this IDABBDPrecSetup function is a int
+ * flag indicating whether it was successful. This value is
+ *    0    if successful,
+ *  > 0    for a recoverable error (step will be retried), or
+ *  < 0    for a nonrecoverable error (step fails).
+ * -----------------------------------------------------------------
+ */
+
+static int IDABBDPrecSetup(realtype tt,
+                           N_Vector yy, N_Vector yp, N_Vector rr,
+                           realtype c_j, void *bbd_data,
+                           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  int retval;
+  long int ier;
+  IBBDPrecData pdata;
+  IDAMem IDA_mem;
+
+  pdata =(IBBDPrecData) bbd_data;
+
+  IDA_mem = (IDAMem) pdata->ida_mem;
+
+  /* Call IBBDDQJac for a new Jacobian calculation and store in PP. */
+  SetToZero(PP);
+  retval = IBBDDQJac(pdata, tt, c_j, yy, yp,
+                     tempv1, tempv2, tempv3, tempv4);
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, -1, "IDABBDPRE", "IDABBDPrecSetup", MSGBBD_FUNC_FAILED);
+    return(-1);
+  }
+  if (retval > 0) {
+    return(+1);
+  } 
+ 
+  /* Do LU factorization of preconditioner block in place (in PP). */
+  ier = BandGBTRF(PP, lpivots);
+
+  /* Return 0 if the LU was complete, or +1 otherwise. */
+  if (ier > 0) return(+1);
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDABBDPrecSolve
+ * -----------------------------------------------------------------
+ * The function IDABBDPrecSolve computes a solution to the linear
+ * system P z = r, where P is the left preconditioner defined by
+ * the routine IDABBDPrecSetup.
+ *
+ * The IDABBDPrecSolve parameters used here are as follows:
+ *
+ * rvec is the input right-hand side vector r.
+ *
+ * zvec is the computed solution vector z.
+ *
+ * bbd_data is the pointer to BBD data set by IDABBDInit.
+ *
+ * The arguments tt, yy, yp, rr, c_j, delta, and tmp are NOT used.
+ *
+ * IDABBDPrecSolve always returns 0, indicating success.
+ * -----------------------------------------------------------------
+ */
+
+static int IDABBDPrecSolve(realtype tt,
+                           N_Vector yy, N_Vector yp, N_Vector rr,
+                           N_Vector rvec, N_Vector zvec,
+                           realtype c_j, realtype delta, void *bbd_data,
+                           N_Vector tmp)
+{
+  IBBDPrecData pdata;
+  realtype *zd;
+
+  pdata = (IBBDPrecData) bbd_data;
+
+  /* Copy rvec to zvec, do the backsolve, and return. */
+  N_VScale(ONE, rvec, zvec);
+
+  zd = N_VGetArrayPointer(zvec);
+
+  BandGBTRS(PP, lpivots, zd);
+
+  return(0);
+}
+
+
+
+static int IDABBDPrecFree(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  IBBDPrecData pdata;
+  
+  if (IDA_mem->ida_lmem == NULL) return(0);
+  idaspils_mem = (IDASpilsMem) IDA_mem->ida_lmem;
+  
+  if (idaspils_mem->s_pdata == NULL) return(0);
+  pdata = (IBBDPrecData) idaspils_mem->s_pdata;
+
+  DestroyMat(PP);
+  DestroyArray(lpivots);
+  N_VDestroy(tempv4);
+
+  free(pdata);
+  pdata = NULL;
+
+  return(0);
+}
+
+
+#define ewt         (IDA_mem->ida_ewt)
+#define user_data   (IDA_mem->ida_user_data)
+#define hh          (IDA_mem->ida_hh)
+#define constraints (IDA_mem->ida_constraints)
+
+/*
+ * -----------------------------------------------------------------
+ * IBBDDQJac
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation
+ * to the local block of the Jacobian of G(t,y,y'). It assumes that
+ * a band matrix of type BandMat is stored column-wise, and that
+ * elements within each column are contiguous.
+ *
+ * All matrix elements are generated as difference quotients, by way
+ * of calls to the user routine glocal. By virtue of the band
+ * structure, the number of these calls is bandwidth + 1, where
+ * bandwidth = mldq + mudq + 1. But the band matrix kept has
+ * bandwidth = mlkeep + mukeep + 1. This routine also assumes that
+ * the local elements of a vector are stored contiguously.
+ *
+ * Return values are: 0 (success), > 0 (recoverable error),
+ * or < 0 (nonrecoverable error).
+ * -----------------------------------------------------------------
+ */
+
+static int IBBDDQJac(IBBDPrecData pdata, realtype tt, realtype cj,
+                     N_Vector yy, N_Vector yp, N_Vector gref, 
+                     N_Vector ytemp, N_Vector yptemp, N_Vector gtemp)
+{
+  IDAMem IDA_mem;
+  realtype inc, inc_inv;
+  int  retval;
+  long int group, i, j, width, ngroups, i1, i2;
+  realtype *ydata, *ypdata, *ytempdata, *yptempdata, *grefdata, *gtempdata;
+  realtype *cnsdata = NULL, *ewtdata;
+  realtype *col_j, conj, yj, ypj, ewtj;
+
+  IDA_mem = (IDAMem) pdata->ida_mem;
+
+  /* Initialize ytemp and yptemp. */
+
+  N_VScale(ONE, yy, ytemp);
+  N_VScale(ONE, yp, yptemp);
+
+  /* Obtain pointers as required to the data array of vectors. */
+
+  ydata     = N_VGetArrayPointer(yy);
+  ypdata    = N_VGetArrayPointer(yp);
+  gtempdata = N_VGetArrayPointer(gtemp);
+  ewtdata   = N_VGetArrayPointer(ewt);
+  if (constraints != NULL) 
+    cnsdata = N_VGetArrayPointer(constraints);
+  ytempdata = N_VGetArrayPointer(ytemp);
+  yptempdata= N_VGetArrayPointer(yptemp);
+  grefdata = N_VGetArrayPointer(gref);
+
+  /* Call gcomm and glocal to get base value of G(t,y,y'). */
+
+  if (gcomm != NULL) {
+    retval = gcomm(Nlocal, tt, yy, yp, user_data);
+    if (retval != 0) return(retval);
+  }
+
+  retval = glocal(Nlocal, tt, yy, yp, gref, user_data); 
+  nge++;
+  if (retval != 0) return(retval);
+
+
+  /* Set bandwidth and number of column groups for band differencing. */
+
+  width = mldq + mudq + 1;
+  ngroups = SUNMIN(width, Nlocal);
+
+  /* Loop over groups. */
+  for(group = 1; group <= ngroups; group++) {
+    
+    /* Loop over the components in this group. */
+    for(j = group-1; j < Nlocal; j += width) {
+      yj = ydata[j];
+      ypj = ypdata[j];
+      ewtj = ewtdata[j];
+      
+      /* Set increment inc to yj based on rel_yy*abs(yj), with
+         adjustments using ypj and ewtj if this is small, and a further
+         adjustment to give it the same sign as hh*ypj. */
+      inc = rel_yy*SUNMAX(SUNRabs(yj), SUNMAX( SUNRabs(hh*ypj), ONE/ewtj));
+      if (hh*ypj < ZERO) inc = -inc;
+      inc = (yj + inc) - yj;
+      
+      /* Adjust sign(inc) again if yj has an inequality constraint. */
+      if (constraints != NULL) {
+        conj = cnsdata[j];
+        if (SUNRabs(conj) == ONE)      {if ((yj+inc)*conj <  ZERO) inc = -inc;}
+        else if (SUNRabs(conj) == TWO) {if ((yj+inc)*conj <= ZERO) inc = -inc;}
+      }
+
+      /* Increment yj and ypj. */
+      ytempdata[j] += inc;
+      yptempdata[j] += cj*inc;
+      
+    }
+
+    /* Evaluate G with incremented y and yp arguments. */
+
+    retval = glocal(Nlocal, tt, ytemp, yptemp, gtemp, user_data); 
+    nge++;
+    if (retval != 0) return(retval);
+
+    /* Loop over components of the group again; restore ytemp and yptemp. */
+    for(j = group-1; j < Nlocal; j += width) {
+      yj  = ytempdata[j]  = ydata[j];
+      ypj = yptempdata[j] = ypdata[j];
+      ewtj = ewtdata[j];
+
+      /* Set increment inc as before .*/
+      inc = rel_yy*SUNMAX(SUNRabs(yj), SUNMAX( SUNRabs(hh*ypj), ONE/ewtj));
+      if (hh*ypj < ZERO) inc = -inc;
+      inc = (yj + inc) - yj;
+      if (constraints != NULL) {
+        conj = cnsdata[j];
+        if (SUNRabs(conj) == ONE)      {if ((yj+inc)*conj <  ZERO) inc = -inc;}
+        else if (SUNRabs(conj) == TWO) {if ((yj+inc)*conj <= ZERO) inc = -inc;}
+      }
+
+      /* Form difference quotients and load into PP. */
+      inc_inv = ONE/inc;
+      col_j = BAND_COL(PP,j);
+      i1 = SUNMAX(0, j-mukeep);
+      i2 = SUNMIN(j+mlkeep, Nlocal-1);
+      for(i = i1; i <= i2; i++) BAND_COL_ELEM(col_j,i,j) =
+                                  inc_inv * (gtempdata[i] - grefdata[i]);
+    }
+  }
+  
+  return(0);
+}
+
diff --git a/src/ida/ida_bbdpre_impl.h b/src/ida/ida_bbdpre_impl.h
new file mode 100644
index 0000000..a9ef672
--- /dev/null
+++ b/src/ida/ida_bbdpre_impl.h
@@ -0,0 +1,93 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file (private version) for the IDABBDPRE
+ * module, for a band-block-diagonal preconditioner, i.e. a
+ * block-diagonal matrix with banded blocks, for use with IDA
+ * and an IDASPILS linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDABBDPRE_IMPL_H
+#define _IDABBDPRE_IMPL_H
+
+#include <ida/ida_bbdpre.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Definition of IBBDPrecData
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IBBDPrecDataRec {
+
+  /* passed by user to IDABBDPrecAlloc and used by
+     IDABBDPrecSetup/IDABBDPrecSolve functions */
+
+  long int mudq, mldq, mukeep, mlkeep;
+  realtype rel_yy;
+  IDABBDLocalFn glocal;
+  IDABBDCommFn gcomm;
+
+  /* allocated for use by IDABBDPrecSetup */
+
+  N_Vector tempv4;
+
+  /* set by IDABBDPrecon and used by IDABBDPrecSolve */
+
+  DlsMat PP;
+  long int *lpivots;
+
+  /* set by IDABBDPrecAlloc and used by IDABBDPrecSetup */
+
+  long int n_local;
+
+  /* available for optional output */
+
+  long int rpwsize;
+  long int ipwsize;
+  long int nge;
+
+  /* pointer to ida_mem */
+
+  void *ida_mem;
+
+} *IBBDPrecData;
+
+/*
+ * -----------------------------------------------------------------
+ * IDABBDPRE error messages
+ * -----------------------------------------------------------------
+ */
+
+#define MSGBBD_MEM_NULL    "Integrator memory is NULL."
+#define MSGBBD_LMEM_NULL   "Linear solver memory is NULL. One of the SPILS linear solvers must be attached."
+#define MSGBBD_MEM_FAIL    "A memory request failed."
+#define MSGBBD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGBBD_PMEM_NULL   "BBD peconditioner memory is NULL. IDABBDPrecInit must be called."
+#define MSGBBD_FUNC_FAILED "The Glocal or Gcomm routine failed in an unrecoverable manner."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/ida/ida_dense.c b/src/ida/ida_dense.c
new file mode 100644
index 0000000..f98b168
--- /dev/null
+++ b/src/ida/ida_dense.c
@@ -0,0 +1,308 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4951 $
+ * $Date: 2016-09-22 10:21:00 -0700 (Thu, 22 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDADENSE linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ida/ida_dense.h>
+#include "ida_direct_impl.h"
+#include "ida_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* IDADENSE linit, lsetup, lsolve, and lfree routines */
+ 
+static int IDADenseInit(IDAMem IDA_mem);
+
+static int IDADenseSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+                         N_Vector rrp, N_Vector tmp1,
+                         N_Vector tmp2, N_Vector tmp3);
+
+static int IDADenseSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                         N_Vector ycur, N_Vector ypcur, N_Vector rrcur);
+
+static int IDADenseFree(IDAMem IDA_mem);
+
+/* Readability Replacements */
+
+#define res          (IDA_mem->ida_res)
+#define tn           (IDA_mem->ida_tn)
+#define hh           (IDA_mem->ida_hh)
+#define cj           (IDA_mem->ida_cj)
+#define cjratio      (IDA_mem->ida_cjratio)
+#define ewt          (IDA_mem->ida_ewt)
+#define constraints  (IDA_mem->ida_constraints)
+#define linit        (IDA_mem->ida_linit)
+#define lsetup       (IDA_mem->ida_lsetup)
+#define lsolve       (IDA_mem->ida_lsolve)
+#define lperf        (IDA_mem->ida_lperf)
+#define lfree        (IDA_mem->ida_lfree)
+#define lmem         (IDA_mem->ida_lmem)
+#define setupNonNull (IDA_mem->ida_setupNonNull)
+#define vec_tmpl     (IDA_mem->ida_tempv1)
+
+#define mtype        (idadls_mem->d_type)
+#define neq          (idadls_mem->d_n)
+#define jacDQ        (idadls_mem->d_jacDQ)
+#define djac         (idadls_mem->d_djac)
+#define JJ           (idadls_mem->d_J)
+#define lpivots      (idadls_mem->d_lpivots)
+#define nje          (idadls_mem->d_nje)
+#define nreDQ        (idadls_mem->d_nreDQ)
+#define jacdata      (idadls_mem->d_J_data)
+#define last_flag    (idadls_mem->d_last_flag)
+                  
+/*
+ * -----------------------------------------------------------------
+ * IDADense
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDADENSE linear solver module.  
+ * IDADense first calls the existing lfree routine if this is not NULL.
+ * Then it sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDADenseInit, IDADenseSetup,
+ * IDADenseSolve, NULL, and IDADenseFree, respectively.
+ * It allocates memory for a structure of type IDADlsMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem) to TRUE, sets the d_jdata field
+ * in the IDADlsMemRec structure to be the input parameter jdata,
+ * and sets the d_jac field to be:
+ *   (1) the input parameter djac, if djac != NULL, or                
+ *   (2) IDADenseDQJac, if djac == NULL.                             
+ * Finally, it allocates memory for JJ and lpivots.
+ * The return value is IDADLS_SUCCESS = 0, IDADLS_LMEM_FAIL = -1,
+ * or IDADLS_ILL_INPUT = -2.
+ *
+ * NOTE: The dense linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDADense will first 
+ *       test for a compatible N_Vector internal
+ *       representation by checking that the functions N_VGetArrayPointer
+ *       and N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+int IDADense(void *ida_mem, long int Neq)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDADENSE", "IDADense", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the DENSE solver */
+  if(vec_tmpl->ops->nvgetarraypointer == NULL ||
+     vec_tmpl->ops->nvsetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDADENSE", "IDADense", MSGD_BAD_NVECTOR);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(IDA_mem);
+
+  /* Set five main function fields in IDA_mem. */
+  linit  = IDADenseInit;
+  lsetup = IDADenseSetup;
+  lsolve = IDADenseSolve;
+  lperf  = NULL;
+  lfree  = IDADenseFree;
+
+  /* Get memory for IDADlsMemRec. */
+  idadls_mem = NULL;
+  idadls_mem = (IDADlsMem) malloc(sizeof(struct IDADlsMemRec));
+  if (idadls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDADENSE", "IDADense", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_DENSE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ   = TRUE;
+  djac    = NULL;
+  jacdata = NULL;
+
+  last_flag = IDADLS_SUCCESS;
+
+  idaDlsInitializeCounters(idadls_mem);
+
+  setupNonNull = TRUE;
+
+  /* Store problem size */
+  neq = Neq;
+
+  /* Allocate memory for JJ and pivot array. */
+  JJ = NULL;
+  JJ = NewDenseMat(Neq, Neq);
+  if (JJ == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDADENSE", "IDADense", MSGD_MEM_FAIL);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+
+  lpivots = NULL;
+  lpivots = NewLintArray(Neq);
+  if (lpivots == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDADENSE", "IDADense", MSGD_MEM_FAIL);
+    DestroyMat(JJ);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to the integrator memory */
+  lmem = idadls_mem;
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDADENSE interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the IDADENSE
+  linear solver module.  It returns 0.
+*/
+
+static int IDADenseInit(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+  
+  idadls_mem = (IDADlsMem) lmem;
+
+  idaDlsInitializeCounters(idadls_mem);
+  /*
+   nje   = 0;
+   nreDQ = 0;
+  */
+
+  if (jacDQ) {
+    djac = idaDlsDenseDQJac;
+    jacdata = IDA_mem;
+  } else {
+    jacdata = IDA_mem->ida_user_data;
+  }
+  
+  last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the IDADENSE linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the dense LU factorization routine.
+  The return value is either
+     IDADLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int IDADenseSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+                         N_Vector rrp, N_Vector tmp1, N_Vector tmp2,
+                         N_Vector tmp3)
+{
+  int retval;
+  long int retfac;
+  IDADlsMem idadls_mem;
+  
+  idadls_mem = (IDADlsMem) lmem;
+
+  /* Increment nje counter. */
+  nje++;
+
+  /* Zero out JJ; call Jacobian routine jac; return if it failed. */
+  SetToZero(JJ);
+  retval = djac(neq, tn, cj, yyp, ypp, rrp, JJ, jacdata, 
+                tmp1, tmp2, tmp3);
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDADLS_JACFUNC_UNRECVR, "IDADENSE", "IDADenseSetup", MSGD_JACFUNC_FAILED);
+    last_flag = IDADLS_JACFUNC_UNRECVR;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = IDADLS_JACFUNC_RECVR;
+    return(+1);
+  }
+
+  /* Do LU factorization of JJ; return success or fail flag. */
+  retfac = DenseGETRF(JJ, lpivots);
+
+  if (retfac != 0) {
+    last_flag = retfac;
+    return(+1);
+  }
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the IDADENSE linear
+  solver module.  It calls the dense backsolve routine, scales the
+  solution vector according to cjratio, then returns IDADLS_SUCCESS = 0.
+*/
+
+static int IDADenseSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                         N_Vector ycur, N_Vector ypcur, N_Vector rrcur)
+{
+  IDADlsMem idadls_mem;
+  realtype *bd;
+  
+  idadls_mem = (IDADlsMem) lmem;
+  
+  bd = N_VGetArrayPointer(b);
+
+  DenseGETRS(JJ, lpivots, bd);
+
+  /* Scale the correction to account for change in cj. */
+  if (cjratio != ONE) N_VScale(TWO/(ONE + cjratio), b, b);
+
+  last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine frees memory specific to the IDADENSE linear solver.
+*/
+
+static int IDADenseFree(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  DestroyMat(JJ);
+  DestroyArray(lpivots);
+  free(lmem); lmem = NULL;
+
+  return(0);
+}
diff --git a/src/ida/ida_direct.c b/src/ida/ida_direct.c
new file mode 100644
index 0000000..9f7d403
--- /dev/null
+++ b/src/ida/ida_direct.c
@@ -0,0 +1,556 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for an IDADLS linear solver.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "ida_impl.h"
+#include "ida_direct_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define res            (IDA_mem->ida_res)
+#define user_data      (IDA_mem->ida_user_data)
+#define uround         (IDA_mem->ida_uround)
+#define nst            (IDA_mem->ida_nst)
+#define tn             (IDA_mem->ida_tn)
+#define hh             (IDA_mem->ida_hh)
+#define cj             (IDA_mem->ida_cj)
+#define cjratio        (IDA_mem->ida_cjratio)
+#define ewt            (IDA_mem->ida_ewt)
+#define constraints    (IDA_mem->ida_constraints)
+
+#define linit          (IDA_mem->ida_linit)
+#define lsetup         (IDA_mem->ida_lsetup)
+#define lsolve         (IDA_mem->ida_lsolve)
+#define lfree          (IDA_mem->ida_lfree)
+#define lperf          (IDA_mem->ida_lperf)
+#define lmem           (IDA_mem->ida_lmem)
+#define tempv          (IDA_mem->ida_tempv1)
+#define setupNonNull   (IDA_mem->ida_setupNonNull)
+
+#define mtype          (idadls_mem->d_type)
+#define n              (idadls_mem->d_n)
+#define ml             (idadls_mem->d_ml)
+#define mu             (idadls_mem->d_mu)
+#define smu            (idadls_mem->d_smu)
+#define jacDQ          (idadls_mem->d_jacDQ)
+#define djac           (idadls_mem->d_djac)
+#define bjac           (idadls_mem->d_bjac)
+#define M              (idadls_mem->d_J)
+#define pivots         (idadls_mem->d_pivots)
+#define nje            (idadls_mem->d_nje)
+#define nreDQ          (idadls_mem->d_nreDQ)
+#define last_flag      (idadls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS FOR IMPLICIT INTEGRATION
+ * =================================================================
+ */
+              
+/*
+ * IDADlsSetDenseJacFn specifies the dense Jacobian function.
+ */
+int IDADlsSetDenseJacFn(void *ida_mem, IDADlsDenseJacFn jac)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDADLS", "IDADlsSetDenseJacFn", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDADLS", "IDADlsSetDenseJacFn", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  if (jac != NULL) {
+    jacDQ = FALSE;
+    djac = jac;
+  } else {
+    jacDQ = TRUE;
+  }
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * IDADlsSetBandJacFn specifies the band Jacobian function.
+ */
+int IDADlsSetBandJacFn(void *ida_mem, IDADlsBandJacFn jac)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDADLS", "IDADlsSetBandJacFn", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDADLS", "IDADlsSetBandJacFn", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  if (jac != NULL) {
+    jacDQ = FALSE;
+    bjac = jac;
+  } else {
+    jacDQ = TRUE;
+  }
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * IDADlsGetWorkSpace returns the length of workspace allocated for the
+ * IDALAPACK linear solver.
+ */
+int IDADlsGetWorkSpace(void *ida_mem, long int *lenrwLS, long int *leniwLS)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDADLS", "IDADlsGetWorkSpace", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDADLS", "IDADlsGetWorkSpace", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  if (mtype == SUNDIALS_DENSE) {
+    *lenrwLS = n*n;
+    *leniwLS = n;
+  } else if (mtype == SUNDIALS_BAND) {
+    *lenrwLS = n*(smu + ml + 1);
+    *leniwLS = n;
+  }
+    
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * IDADlsGetNumJacEvals returns the number of Jacobian evaluations.
+ */
+int IDADlsGetNumJacEvals(void *ida_mem, long int *njevals)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDADLS", "IDADlsGetNumJacEvals", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDADLS", "IDADlsGetNumJacEvals", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  *njevals = nje;
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * IDADlsGetNumResEvals returns the number of calls to the DAE function
+ * needed for the DQ Jacobian approximation.
+ */
+int IDADlsGetNumResEvals(void *ida_mem, long int *nrevalsLS)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDADLS", "IDADlsGetNumFctEvals", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDADLS", "IDADlsGetNumFctEvals", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  *nrevalsLS = nreDQ;
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * IDADlsGetReturnFlagName returns the name associated with a IDALAPACK
+ * return value.
+ */
+char *IDADlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case IDADLS_SUCCESS:
+    sprintf(name,"IDADLS_SUCCESS");
+    break;   
+  case IDADLS_MEM_NULL:
+    sprintf(name,"IDADLS_MEM_NULL");
+    break;
+  case IDADLS_LMEM_NULL:
+    sprintf(name,"IDADLS_LMEM_NULL");
+    break;
+  case IDADLS_ILL_INPUT:
+    sprintf(name,"IDADLS_ILL_INPUT");
+    break;
+  case IDADLS_MEM_FAIL:
+    sprintf(name,"IDADLS_MEM_FAIL");
+    break;
+  case IDADLS_JACFUNC_UNRECVR:
+    sprintf(name,"IDADLS_JACFUNC_UNRECVR");
+    break;
+  case IDADLS_JACFUNC_RECVR:
+    sprintf(name,"IDADLS_JACFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * IDADlsGetLastFlag returns the last flag set in a IDALAPACK function.
+ */
+int IDADlsGetLastFlag(void *ida_mem, long int *flag)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDADLS", "IDADlsGetLastFlag", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDADLS", "IDADlsGetLastFlag", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  *flag = last_flag;
+
+  return(IDADLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * DQ JACOBIAN APPROXIMATIONS
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * idaDlsDenseDQJac 
+ * -----------------------------------------------------------------
+ * This routine generates a dense difference quotient approximation to
+ * the Jacobian F_y + c_j*F_y'. It assumes that a dense matrix of type
+ * DlsMat is stored column-wise, and that elements within each column
+ * are contiguous. The address of the jth column of J is obtained via
+ * the macro LAPACK_DENSE_COL and this pointer is associated with an N_Vector
+ * using the N_VGetArrayPointer/N_VSetArrayPointer functions. 
+ * Finally, the actual computation of the jth column of the Jacobian is 
+ * done with a call to N_VLinearSum.
+ * -----------------------------------------------------------------
+ */ 
+int idaDlsDenseDQJac(long int N, realtype tt, realtype c_j,
+                     N_Vector yy, N_Vector yp, N_Vector rr, 
+                     DlsMat Jac, void *data,
+                     N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype inc, inc_inv, yj, ypj, srur, conj;
+  realtype *tmp2_data, *y_data, *yp_data, *ewt_data, *cns_data = NULL;
+  N_Vector rtemp, jthCol;
+  long int j;
+  int retval = 0;
+
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* data points to IDA_mem */
+  IDA_mem = (IDAMem) data;
+  idadls_mem = (IDADlsMem) lmem;
+
+  /* Save pointer to the array in tmp2 */
+  tmp2_data = N_VGetArrayPointer(tmp2);
+
+  /* Rename work vectors for readibility */
+  rtemp  = tmp1;
+  jthCol = tmp2;
+
+  /* Obtain pointers to the data for ewt, yy, yp. */
+  ewt_data = N_VGetArrayPointer(ewt);
+  y_data   = N_VGetArrayPointer(yy);
+  yp_data  = N_VGetArrayPointer(yp);
+  if(constraints!=NULL) cns_data = N_VGetArrayPointer(constraints);
+
+  srur = SUNRsqrt(uround);
+
+  for (j=0; j < N; j++) {
+
+    /* Generate the jth col of J(tt,yy,yp) as delta(F)/delta(y_j). */
+
+    /* Set data address of jthCol, and save y_j and yp_j values. */
+    N_VSetArrayPointer(DENSE_COL(Jac,j), jthCol);
+    yj = y_data[j];
+    ypj = yp_data[j];
+
+    /* Set increment inc to y_j based on sqrt(uround)*abs(y_j), with
+    adjustments using yp_j and ewt_j if this is small, and a further
+    adjustment to give it the same sign as hh*yp_j. */
+
+    inc = SUNMAX( srur * SUNMAX( SUNRabs(yj), SUNRabs(hh*ypj) ) , ONE/ewt_data[j] );
+
+    if (hh*ypj < ZERO) inc = -inc;
+    inc = (yj + inc) - yj;
+
+    /* Adjust sign(inc) again if y_j has an inequality constraint. */
+    if (constraints != NULL) {
+      conj = cns_data[j];
+      if (SUNRabs(conj) == ONE)      {if((yj+inc)*conj <  ZERO) inc = -inc;}
+      else if (SUNRabs(conj) == TWO) {if((yj+inc)*conj <= ZERO) inc = -inc;}
+    }
+
+    /* Increment y_j and yp_j, call res, and break on error return. */
+    y_data[j] += inc;
+    yp_data[j] += c_j*inc;
+
+    retval = res(tt, yy, yp, rtemp, user_data);
+    nreDQ++;
+    if (retval != 0) break;
+
+    /* Construct difference quotient in jthCol */
+    inc_inv = ONE/inc;
+    N_VLinearSum(inc_inv, rtemp, -inc_inv, rr, jthCol);
+
+    DENSE_COL(Jac,j) = N_VGetArrayPointer(jthCol);
+
+    /*  reset y_j, yp_j */     
+    y_data[j] = yj;
+    yp_data[j] = ypj;
+  }
+
+  /* Restore original array pointer in tmp2 */
+  N_VSetArrayPointer(tmp2_data, tmp2);
+
+  return(retval);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * idaDlsBandDQJac 
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation JJ
+ * to the DAE system Jacobian J.  It assumes that a band matrix of type
+ * BandMat is stored column-wise, and that elements within each column
+ * are contiguous.  The address of the jth column of JJ is obtained via
+ * the macros BAND_COL and BAND_COL_ELEM. The columns of the Jacobian are 
+ * constructed using mupper + mlower + 1 calls to the res routine, and
+ * appropriate differencing.
+ * The return value is either IDABAND_SUCCESS = 0, or the nonzero value returned
+ * by the res routine, if any.
+ */
+
+int idaDlsBandDQJac(long int N, long int mupper, long int mlower,
+                    realtype tt, realtype c_j, 
+                    N_Vector yy, N_Vector yp, N_Vector rr,
+                    DlsMat Jac, void *data,
+                    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype inc, inc_inv, yj, ypj, srur, conj, ewtj;
+  realtype *y_data, *yp_data, *ewt_data, *cns_data = NULL;
+  realtype *ytemp_data, *yptemp_data, *rtemp_data, *r_data, *col_j;
+  N_Vector rtemp, ytemp, yptemp;
+  long int i, j, i1, i2, width, ngroups, group;
+  int retval = 0;
+
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* data points to IDA_mem */
+  IDA_mem = (IDAMem) data;
+  idadls_mem = (IDADlsMem) lmem;
+
+  rtemp = tmp1; /* Rename work vector for use as the perturbed residual. */
+
+  ytemp = tmp2; /* Rename work vector for use as a temporary for yy. */
+
+
+  yptemp= tmp3; /* Rename work vector for use as a temporary for yp. */
+
+  /* Obtain pointers to the data for all eight vectors used.  */
+
+  ewt_data = N_VGetArrayPointer(ewt);
+  r_data   = N_VGetArrayPointer(rr);
+  y_data   = N_VGetArrayPointer(yy);
+  yp_data  = N_VGetArrayPointer(yp);
+
+  rtemp_data  = N_VGetArrayPointer(rtemp);
+  ytemp_data  = N_VGetArrayPointer(ytemp);
+  yptemp_data = N_VGetArrayPointer(yptemp);
+
+  if (constraints != NULL) cns_data = N_VGetArrayPointer(constraints);
+
+  /* Initialize ytemp and yptemp. */
+
+  N_VScale(ONE, yy, ytemp);
+  N_VScale(ONE, yp, yptemp);
+
+  /* Compute miscellaneous values for the Jacobian computation. */
+
+  srur = SUNRsqrt(uround);
+  width = mlower + mupper + 1;
+  ngroups = SUNMIN(width, N);
+
+  /* Loop over column groups. */
+  for (group=1; group <= ngroups; group++) {
+
+    /* Increment all yy[j] and yp[j] for j in this group. */
+
+    for (j=group-1; j<N; j+=width) {
+        yj = y_data[j];
+        ypj = yp_data[j];
+        ewtj = ewt_data[j];
+
+        /* Set increment inc to yj based on sqrt(uround)*abs(yj), with
+        adjustments using ypj and ewtj if this is small, and a further
+        adjustment to give it the same sign as hh*ypj. */
+
+        inc = SUNMAX( srur * SUNMAX( SUNRabs(yj), SUNRabs(hh*ypj) ) , ONE/ewtj );
+
+        if (hh*ypj < ZERO) inc = -inc;
+        inc = (yj + inc) - yj;
+
+        /* Adjust sign(inc) again if yj has an inequality constraint. */
+
+        if (constraints != NULL) {
+          conj = cns_data[j];
+          if (SUNRabs(conj) == ONE)      {if((yj+inc)*conj <  ZERO) inc = -inc;}
+          else if (SUNRabs(conj) == TWO) {if((yj+inc)*conj <= ZERO) inc = -inc;}
+        }
+
+        /* Increment yj and ypj. */
+
+        ytemp_data[j] += inc;
+        yptemp_data[j] += cj*inc;
+    }
+
+    /* Call res routine with incremented arguments. */
+
+    retval = res(tt, ytemp, yptemp, rtemp, user_data);
+    nreDQ++;
+    if (retval != 0) break;
+
+    /* Loop over the indices j in this group again. */
+
+    for (j=group-1; j<N; j+=width) {
+
+      /* Reset ytemp and yptemp components that were perturbed. */
+
+      yj = ytemp_data[j]  = y_data[j];
+      ypj = yptemp_data[j] = yp_data[j];
+      col_j = BAND_COL(Jac, j);
+      ewtj = ewt_data[j];
+      
+      /* Set increment inc exactly as above. */
+
+      inc = SUNMAX( srur * SUNMAX( SUNRabs(yj), SUNRabs(hh*ypj) ) , ONE/ewtj );
+      if (hh*ypj < ZERO) inc = -inc;
+      inc = (yj + inc) - yj;
+      if (constraints != NULL) {
+        conj = cns_data[j];
+        if (SUNRabs(conj) == ONE)      {if((yj+inc)*conj <  ZERO) inc = -inc;}
+        else if (SUNRabs(conj) == TWO) {if((yj+inc)*conj <= ZERO) inc = -inc;}
+      }
+      
+      /* Load the difference quotient Jacobian elements for column j. */
+
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-mupper);
+      i2 = SUNMIN(j+mlower,N-1);
+      
+      for (i=i1; i<=i2; i++) 
+            BAND_COL_ELEM(col_j,i,j) = inc_inv*(rtemp_data[i]-r_data[i]);
+    }
+    
+  }
+  
+  return(retval);
+  
+}
+
+int idaDlsInitializeCounters(IDADlsMem idadls_mem)
+{
+  idadls_mem->d_nje   = 0;
+  idadls_mem->d_nreDQ = 0;
+  return(0);
+}
diff --git a/src/ida/ida_direct_impl.h b/src/ida/ida_direct_impl.h
new file mode 100644
index 0000000..8361d19
--- /dev/null
+++ b/src/ida/ida_direct_impl.h
@@ -0,0 +1,112 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the IDADLS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDADLS_IMPL_H
+#define _IDADLS_IMPL_H
+
+#include <ida/ida_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * I D A D I R E C T    I N T E R N A L    C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDADlsMemRec, IDADlsMem                             
+ * -----------------------------------------------------------------
+ * IDADlsMem is pointer to a IDADlsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDADlsMemRec {
+
+  int d_type;               /* Type of Jacobians (DENSE or BAND)             */
+
+  long int d_n;             /* problem dimension                             */
+
+  long int d_ml;            /* b_ml = lower bandwidth of savedJ              */
+  long int d_mu;            /* b_mu = upper bandwidth of savedJ              */ 
+  long int d_smu;           /* upper bandwith of M = MIN(N-1,b_mu+b_ml)      */
+
+  booleantype d_jacDQ;      /* TRUE if using internal DQ Jacobian approx.    */
+  IDADlsDenseJacFn d_djac;  /* dense Jacobian routine to be called           */
+  IDADlsBandJacFn d_bjac;   /* band Jacobian routine to be called            */
+  void *d_J_data;           /* J_data is passed to djac or bjac              */
+
+  DlsMat d_J;               /* J = dF/dy + cj*dF/dy'                         */
+
+  int *d_pivots;            /* pivots = int pivot array for PM = LU          */
+  long int *d_lpivots;      /* lpivots = long int pivot array for PM = LU    */
+  
+  long int d_nje;           /* nje = no. of calls to jac                     */
+
+  long int d_nreDQ;         /* no. of calls to res due to DQ Jacobian approx.*/
+
+  long int d_last_flag;     /* last error return flag                        */
+  
+} *IDADlsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+  
+int idaDlsDenseDQJac(long int N, realtype tt, realtype c_j,
+                     N_Vector yy, N_Vector yp, N_Vector rr, 
+                     DlsMat Jac, void *data,
+                     N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+  
+int idaDlsBandDQJac(long int N, long int mupper, long int mlower,
+                    realtype tt, realtype c_j, 
+                    N_Vector yy, N_Vector yp, N_Vector rr,
+                    DlsMat Jac, void *data,
+                    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Auxilliary functions */
+
+int idaDlsInitializeCounters(IDADlsMem idadls_mem);
+
+
+/*
+ * =================================================================
+ * E R R O R   M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGD_IDAMEM_NULL "Integrator memory is NULL."
+#define MSGD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGD_BAD_SIZES "Illegal bandwidth parameter(s). Must have 0 <=  ml, mu <= N-1."
+#define MSGD_MEM_FAIL "A memory request failed."
+#define MSGD_LMEM_NULL "Linear solver memory is NULL."
+#define MSGD_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/ida/ida_ic.c b/src/ida/ida_ic.c
new file mode 100644
index 0000000..2da1bca
--- /dev/null
+++ b/src/ida/ida_ic.c
@@ -0,0 +1,740 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4536 $
+ * $Date: 2015-09-16 14:14:12 -0700 (Wed, 16 Sep 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Alan C. Hindmarsh, and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IC calculation for IDA.
+ * It is independent of the linear solver in use.                  
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "ida_impl.h"
+#include <sundials/sundials_math.h>
+
+/* Macro: loop */
+#define loop for(;;)
+
+/*
+ * =================================================================
+ * IDA Constants 
+ * =================================================================
+ */
+
+/* Private Constants */
+
+#define ZERO       RCONST(0.0)    /* real 0.0    */
+#define HALF       RCONST(0.5)    /* real 0.5    */
+#define ONE        RCONST(1.0)    /* real 1.0    */
+#define TWO        RCONST(2.0)    /* real 2.0    */
+#define PT99       RCONST(0.99)   /* real 0.99   */
+#define PT1        RCONST(0.1)    /* real 0.1    */
+#define PT001      RCONST(0.001)  /* real 0.001  */
+
+/* IDACalcIC control constants */
+
+#define ICRATEMAX  RCONST(0.9)    /* max. Newton conv. rate */
+#define ALPHALS    RCONST(0.0001) /* alpha in linesearch conv. test */
+
+/* Return values for lower level routines used by IDACalcIC */
+
+#define IC_FAIL_RECOV       1
+#define IC_CONSTR_FAILED    2
+#define IC_LINESRCH_FAILED  3
+#define IC_CONV_FAIL        4  
+#define IC_SLOW_CONVRG      5
+
+/*
+ * =================================================================
+ * Private Helper Functions Prototypes
+ * =================================================================
+ */
+
+extern int IDAInitialSetup(IDAMem IDA_mem);
+extern realtype IDAWrmsNorm(IDAMem IDA_mem, N_Vector x, N_Vector w, 
+                            booleantype mask);
+
+static int IDAnlsIC(IDAMem IDA_mem);
+static int IDANewtonIC(IDAMem IDA_mem);
+static int IDALineSrch(IDAMem IDA_mem, realtype *delnorm, realtype *fnorm);
+static int IDAfnorm(IDAMem IDA_mem, realtype *fnorm);
+static int IDANewyyp(IDAMem IDA_mem, realtype lambda);
+static int IDANewy(IDAMem IDA_mem);
+static int IDAICFailFlag(IDAMem IDA_mem, int retval);
+
+/*
+ * =================================================================
+ * Readibility Constants
+ * =================================================================
+ */
+
+#define t0             (IDA_mem->ida_t0)
+#define yy0            (IDA_mem->ida_yy0)
+#define yp0            (IDA_mem->ida_yp0)
+
+#define user_data      (IDA_mem->ida_user_data)
+#define res            (IDA_mem->ida_res)
+#define efun           (IDA_mem->ida_efun)
+#define edata          (IDA_mem->ida_edata)
+#define uround         (IDA_mem->ida_uround)  
+#define phi            (IDA_mem->ida_phi) 
+#define ewt            (IDA_mem->ida_ewt)  
+#define delta          (IDA_mem->ida_delta)
+#define ee             (IDA_mem->ida_ee)
+#define savres         (IDA_mem->ida_savres)
+#define tempv2         (IDA_mem->ida_tempv2) 
+#define hh             (IDA_mem->ida_hh)
+#define tn             (IDA_mem->ida_tn)
+#define cj             (IDA_mem->ida_cj)
+#define cjratio        (IDA_mem->ida_cjratio)
+#define nbacktr        (IDA_mem->ida_nbacktr)
+#define maxbacks       (IDA_mem->ida_maxbacks)
+#define nre            (IDA_mem->ida_nre)
+#define ncfn           (IDA_mem->ida_ncfn)
+#define nni            (IDA_mem->ida_nni)
+#define nsetups        (IDA_mem->ida_nsetups)
+#define ns             (IDA_mem->ida_ns)
+#define lsetup         (IDA_mem->ida_lsetup)
+#define lsolve         (IDA_mem->ida_lsolve) 
+#define hused          (IDA_mem->ida_hused)         
+#define epsNewt        (IDA_mem->ida_epsNewt)
+#define id             (IDA_mem->ida_id)
+#define setupNonNull   (IDA_mem->ida_setupNonNull) 
+#define suppressalg    (IDA_mem->ida_suppressalg)
+#define constraints    (IDA_mem->ida_constraints)
+#define constraintsSet (IDA_mem->ida_constraintsSet)
+
+#define epiccon  (IDA_mem->ida_epiccon)
+#define maxnh    (IDA_mem->ida_maxnh)
+#define maxnj    (IDA_mem->ida_maxnj)
+#define maxnit   (IDA_mem->ida_maxnit)
+#define lsoff    (IDA_mem->ida_lsoff)
+#define steptol  (IDA_mem->ida_steptol)
+
+/*
+ * =================================================================
+ * EXPORTED FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * IDACalcIC
+ * -----------------------------------------------------------------
+ * IDACalcIC computes consistent initial conditions, given the 
+ * user's initial guess for unknown components of yy0 and/or yp0.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ *
+ * The error return values (fully described in ida.h) are:
+ *   IDA_MEM_NULL        ida_mem is NULL
+ *   IDA_NO_MALLOC       ida_mem was not allocated
+ *   IDA_ILL_INPUT       bad value for icopt, tout1, or id
+ *   IDA_LINIT_FAIL      the linear solver linit routine failed
+ *   IDA_BAD_EWT         zero value of some component of ewt
+ *   IDA_RES_FAIL        res had a non-recoverable error
+ *   IDA_FIRST_RES_FAIL  res failed recoverably on the first call
+ *   IDA_LSETUP_FAIL     lsetup had a non-recoverable error
+ *   IDA_LSOLVE_FAIL     lsolve had a non-recoverable error
+ *   IDA_NO_RECOVERY     res, lsetup, or lsolve had a recoverable
+ *                       error, but IDACalcIC could not recover
+ *   IDA_CONSTR_FAIL     the inequality constraints could not be met
+ *   IDA_LINESEARCH_FAIL the linesearch failed (either on steptol test
+ *                       or on the maxbacks test)
+ *   IDA_CONV_FAIL       the Newton iterations failed to converge
+ * -----------------------------------------------------------------
+ */
+
+int IDACalcIC(void *ida_mem, int icopt, realtype tout1)
+{
+  int ewtsetOK;
+  int ier, nwt, nh, mxnh, icret, retval=0;
+  realtype tdist, troundoff, minid, hic, ypnorm;
+  IDAMem IDA_mem;
+
+  /* Check if IDA memory exists */
+
+  if(ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDACalcIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if problem was malloc'ed */
+  
+  if(IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDA", "IDACalcIC", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  /* Check inputs to IDA for correctness and consistency */
+
+  ier = IDAInitialSetup(IDA_mem);
+  if(ier != IDA_SUCCESS) return(IDA_ILL_INPUT);
+  IDA_mem->ida_SetupDone = TRUE;
+
+  /* Check legality of input arguments, and set IDA memory copies. */
+
+  if(icopt != IDA_YA_YDP_INIT && icopt != IDA_Y_INIT) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDACalcIC", MSG_IC_BAD_ICOPT);
+    return(IDA_ILL_INPUT);
+  }
+  IDA_mem->ida_icopt = icopt;
+
+  if(icopt == IDA_YA_YDP_INIT && (id == NULL)) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDACalcIC", MSG_IC_MISSING_ID);
+    return(IDA_ILL_INPUT);
+  }
+
+  tdist = SUNRabs(tout1 - tn);
+  troundoff = TWO*uround*(SUNRabs(tn) + SUNRabs(tout1));
+  if(tdist < troundoff) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDACalcIC", MSG_IC_TOO_CLOSE);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Allocate space and initialize temporary vectors */
+
+  yy0 = N_VClone(ee);
+  yp0 = N_VClone(ee);
+  t0  = tn;
+  N_VScale(ONE, phi[0], yy0);
+  N_VScale(ONE, phi[1], yp0);
+
+  /* For use in the IDA_YA_YP_INIT case, set sysindex and tscale. */
+
+  IDA_mem->ida_sysindex = 1;
+  IDA_mem->ida_tscale   = tdist;
+  if(icopt == IDA_YA_YDP_INIT) {
+    minid = N_VMin(id);
+    if(minid < ZERO) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDACalcIC", MSG_IC_BAD_ID);
+      return(IDA_ILL_INPUT);
+    }
+    if(minid > HALF) IDA_mem->ida_sysindex = 0;
+  }
+
+  /* Set the test constant in the Newton convergence test */
+
+  IDA_mem->ida_epsNewt = epiccon;
+
+  /* Initializations: 
+     cjratio = 1 (for use in direct linear solvers); 
+     set nbacktr = 0; */
+
+  cjratio = ONE;
+  nbacktr = 0;
+
+  /* Set hic, hh, cj, and mxnh. */
+
+  hic = PT001*tdist;
+  ypnorm = IDAWrmsNorm(IDA_mem, yp0, ewt, suppressalg);
+  if(ypnorm > HALF/hic) hic = HALF/ypnorm;
+  if(tout1 < tn) hic = -hic;
+  hh = hic;
+  if(icopt == IDA_YA_YDP_INIT) {
+    cj = ONE/hic;
+    mxnh = maxnh;
+  }
+  else {
+    cj = ZERO;
+    mxnh = 1;
+  }
+
+  /* Loop over nwt = number of evaluations of ewt vector. */
+
+  for(nwt = 1; nwt <= 2; nwt++) {
+ 
+    /* Loop over nh = number of h values. */
+    for(nh = 1; nh <= mxnh; nh++) {
+
+      /* Call the IC nonlinear solver function. */
+      retval = IDAnlsIC(IDA_mem);
+
+      /* Cut h and loop on recoverable IDA_YA_YDP_INIT failure; else break. */
+      if(retval == IDA_SUCCESS) break;
+      ncfn++;
+      if(retval < 0) break;
+      if(nh == mxnh) break;
+      /* If looping to try again, reset yy0 and yp0 if not converging. */
+      if(retval != IC_SLOW_CONVRG) {
+        N_VScale(ONE, phi[0], yy0);
+        N_VScale(ONE, phi[1], yp0);
+      }
+      hic *= PT1;
+      cj = ONE/hic;
+      hh = hic;
+    }   /* End of nh loop */
+
+    /* Break on failure; else reset ewt, save yy0, yp0 in phi, and loop. */
+    if(retval != IDA_SUCCESS) break;
+    ewtsetOK = efun(yy0, ewt, edata);
+    if(ewtsetOK != 0) { 
+      retval = IDA_BAD_EWT; 
+      break; 
+    }
+    N_VScale(ONE, yy0, phi[0]);
+    N_VScale(ONE, yp0, phi[1]);
+
+  }   /* End of nwt loop */
+
+  /* Free temporary space */
+
+  N_VDestroy(yy0);
+  N_VDestroy(yp0);
+
+  /* Load the optional outputs. */
+
+  if(icopt == IDA_YA_YDP_INIT)   hused = hic;
+
+  /* On any failure, print message and return proper flag. */
+
+  if(retval != IDA_SUCCESS) {
+    icret = IDAICFailFlag(IDA_mem, retval);
+    return(icret);
+  }
+
+  /* Otherwise return success flag. */
+
+  return(IDA_SUCCESS);
+
+}
+
+/*
+ * =================================================================
+ * PRIVATE FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+#define icopt    (IDA_mem->ida_icopt)
+#define sysindex (IDA_mem->ida_sysindex)
+#define tscale   (IDA_mem->ida_tscale)
+#define ynew     (IDA_mem->ida_ynew)
+#define ypnew    (IDA_mem->ida_ypnew)
+#define delnew   (IDA_mem->ida_delnew)
+#define dtemp    (IDA_mem->ida_dtemp)
+
+/*
+ * -----------------------------------------------------------------
+ * IDAnlsIC
+ * -----------------------------------------------------------------
+ * IDAnlsIC solves a nonlinear system for consistent initial 
+ * conditions.  It calls IDANewtonIC to do most of the work.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ * The error return values (positive) considered recoverable are:
+ *  IC_FAIL_RECOV      if res, lsetup, or lsolve failed recoverably
+ *  IC_CONSTR_FAILED   if the constraints could not be met
+ *  IC_LINESRCH_FAILED if the linesearch failed (either on steptol test
+ *                     or on maxbacks test)
+ *  IC_CONV_FAIL       if the Newton iterations failed to converge
+ *  IC_SLOW_CONVRG     if the iterations are converging slowly
+ *                     (failed the convergence test, but showed
+ *                     norm reduction or convergence rate < 1)
+ * The error return values (negative) considered non-recoverable are:
+ *  IDA_RES_FAIL       if res had a non-recoverable error
+ *  IDA_FIRST_RES_FAIL if res failed recoverably on the first call
+ *  IDA_LSETUP_FAIL    if lsetup had a non-recoverable error
+ *  IDA_LSOLVE_FAIL    if lsolve had a non-recoverable error
+ * -----------------------------------------------------------------
+ */
+
+static int IDAnlsIC (IDAMem IDA_mem)
+{
+  int retval, nj;
+  N_Vector tv1, tv2, tv3;
+
+  tv1 = ee;
+  tv2 = tempv2;
+  tv3 = phi[2];
+
+  retval = res(t0, yy0, yp0, delta, user_data);
+  nre++;
+  if(retval < 0) return(IDA_RES_FAIL);
+  if(retval > 0) return(IDA_FIRST_RES_FAIL);
+
+  N_VScale(ONE, delta, savres);
+
+  /* Loop over nj = number of linear solve Jacobian setups. */
+
+  for(nj = 1; nj <= maxnj; nj++) {
+
+    /* If there is a setup routine, call it. */
+    if(setupNonNull) {
+      nsetups++;
+      retval = lsetup(IDA_mem, yy0, yp0, delta, tv1, tv2, tv3);
+      if(retval < 0) return(IDA_LSETUP_FAIL);
+      if(retval > 0) return(IC_FAIL_RECOV);
+    }
+
+    /* Call the Newton iteration routine, and return if successful.  */
+    retval = IDANewtonIC(IDA_mem);
+    if(retval == IDA_SUCCESS) return(IDA_SUCCESS);
+
+    /* If converging slowly and lsetup is nontrivial, retry. */
+    if(retval == IC_SLOW_CONVRG && setupNonNull) {
+      N_VScale(ONE, savres, delta);
+      continue;
+    } else {
+      return(retval);
+    }
+
+  }   /* End of nj loop */
+
+  /* No convergence after maxnj tries; return with retval=IC_SLOW_CONVRG */
+  return(retval);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDANewtonIC
+ * -----------------------------------------------------------------
+ * IDANewtonIC performs the Newton iteration to solve for consistent
+ * initial conditions.  It calls IDALineSrch within each iteration.
+ * On return, savres contains the current residual vector.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ * The error return values (positive) considered recoverable are:
+ *  IC_FAIL_RECOV      if res or lsolve failed recoverably
+ *  IC_CONSTR_FAILED   if the constraints could not be met
+ *  IC_LINESRCH_FAILED if the linesearch failed (either on steptol test
+ *                     or on maxbacks test)
+ *  IC_CONV_FAIL       if the Newton iterations failed to converge
+ *  IC_SLOW_CONVRG     if the iterations appear to be converging slowly.
+ *                     They failed the convergence test, but showed 
+ *                     an overall norm reduction (by a factor of < 0.1)
+ *                     or a convergence rate <= ICRATEMAX).
+ * The error return values (negative) considered non-recoverable are:
+ *  IDA_RES_FAIL   if res had a non-recoverable error
+ *  IDA_LSOLVE_FAIL      if lsolve had a non-recoverable error
+ * -----------------------------------------------------------------
+ */
+
+static int IDANewtonIC(IDAMem IDA_mem)
+{
+  int retval, mnewt;
+  realtype delnorm, fnorm, fnorm0, oldfnrm, rate;
+
+  /* Set pointer for vector delnew */
+  delnew = phi[2];
+
+  /* Call the linear solve function to get the Newton step, delta. */
+  retval = lsolve(IDA_mem, delta, ewt, yy0, yp0, savres);
+  if(retval < 0) return(IDA_LSOLVE_FAIL);
+  if(retval > 0) return(IC_FAIL_RECOV);
+
+  /* Compute the norm of the step; return now if this is small. */
+  fnorm = IDAWrmsNorm(IDA_mem, delta, ewt, FALSE);
+  if(sysindex == 0) fnorm *= tscale*SUNRabs(cj);
+  if(fnorm <= epsNewt) return(IDA_SUCCESS);
+  fnorm0 = fnorm;
+
+  /* Initialize rate to avoid compiler warning message */
+  rate = ZERO;
+
+  /* Newton iteration loop */
+
+  for(mnewt = 0; mnewt < maxnit; mnewt++) {
+
+    nni++;
+    delnorm = fnorm;
+    oldfnrm = fnorm;
+
+    /* Call the Linesearch function and return if it failed. */
+    retval = IDALineSrch(IDA_mem, &delnorm, &fnorm);
+    if(retval != IDA_SUCCESS) return(retval);
+
+    /* Set the observed convergence rate and test for convergence. */
+    rate = fnorm/oldfnrm;
+    if(fnorm <= epsNewt) return(IDA_SUCCESS);
+
+    /* If not converged, copy new step vector, and loop. */
+    N_VScale(ONE, delnew, delta);
+
+  }   /* End of Newton iteration loop */
+
+  /* Return either IC_SLOW_CONVRG or recoverable fail flag. */
+  if(rate <= ICRATEMAX || fnorm < PT1*fnorm0) return(IC_SLOW_CONVRG);
+  return(IC_CONV_FAIL);
+
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * IDALineSrch
+ * -----------------------------------------------------------------
+ * IDALineSrch performs the Linesearch algorithm with the 
+ * calculation of consistent initial conditions.
+ *
+ * On entry, yy0 and yp0 are the current values of y and y', the 
+ * Newton step is delta, the current residual vector F is savres,
+ * delnorm is WRMS-norm(delta), and fnorm is the norm of the vector
+ * J-inverse F.
+ *
+ * On a successful return, yy0, yp0, and savres have been updated, 
+ * delnew contains the current value of J-inverse F, and fnorm is
+ * WRMS-norm(delnew).
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ * The error return values (positive) considered recoverable are:
+ *  IC_FAIL_RECOV      if res or lsolve failed recoverably
+ *  IC_CONSTR_FAILED   if the constraints could not be met
+ *  IC_LINESRCH_FAILED if the linesearch failed (either on steptol test
+ *                     or on maxbacks test)
+ * The error return values (negative) considered non-recoverable are:
+ *  IDA_RES_FAIL   if res had a non-recoverable error
+ *  IDA_LSOLVE_FAIL      if lsolve had a non-recoverable error
+ * -----------------------------------------------------------------
+ */
+
+static int IDALineSrch(IDAMem IDA_mem, realtype *delnorm, realtype *fnorm)
+{
+  booleantype conOK;
+  int retval, nbacks;
+  realtype f1norm, fnormp, f1normp, ratio, lambda, minlam, slpi;
+  N_Vector mc;
+
+  /* Initialize work space pointers, f1norm, ratio.
+     (Use of mc in constraint check does not conflict with ypnew.) */
+  mc = ee;
+  dtemp = phi[3];
+  ynew = tempv2;
+  ypnew = ee;
+  f1norm = (*fnorm)*(*fnorm)*HALF;
+  ratio = ONE;
+
+  /* If there are constraints, check and reduce step if necessary. */
+  if(constraintsSet) {
+
+    /* Update y and check constraints. */
+    IDANewy(IDA_mem);
+    conOK = N_VConstrMask(constraints, ynew, mc);
+
+    if(!conOK) {
+      /* Not satisfied.  Compute scaled step to satisfy constraints. */
+      N_VProd(mc, delta, dtemp);
+      ratio = PT99*N_VMinQuotient(yy0, dtemp);
+      (*delnorm) *= ratio;
+      if((*delnorm) <= steptol) return(IC_CONSTR_FAILED);
+      N_VScale(ratio, delta, delta);
+    }
+
+  } /* End of constraints check */
+
+  slpi = -TWO*f1norm*ratio;
+  minlam = steptol/(*delnorm);
+  lambda = ONE;
+  nbacks = 0;
+
+  /* In IDA_Y_INIT case, set ypnew = yp0 (fixed) for linesearch. */
+  if(icopt == IDA_Y_INIT) N_VScale(ONE, yp0, ypnew);
+
+  /* Loop on linesearch variable lambda. */
+
+  loop {
+
+    if (nbacks == maxbacks) return(IC_LINESRCH_FAILED);
+    /* Get new (y,y') = (ynew,ypnew) and norm of new function value. */
+    IDANewyyp(IDA_mem, lambda);
+    retval = IDAfnorm(IDA_mem, &fnormp);
+    if(retval != IDA_SUCCESS) return(retval);
+
+    /* If lsoff option is on, break out. */
+    if(lsoff) break;
+
+    /* Do alpha-condition test. */
+    f1normp = fnormp*fnormp*HALF;
+    if(f1normp <= f1norm + ALPHALS*slpi*lambda) break;
+    if(lambda < minlam) return(IC_LINESRCH_FAILED);
+    lambda /= TWO;
+    nbacktr++; nbacks++;
+
+  }  /* End of breakout linesearch loop */
+
+  /* Update yy0, yp0, and fnorm, then return. */
+  N_VScale(ONE, ynew,  yy0);
+  if(icopt == IDA_YA_YDP_INIT) N_VScale(ONE, ypnew, yp0);
+  *fnorm = fnormp;
+  return(IDA_SUCCESS);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDAfnorm
+ * -----------------------------------------------------------------
+ * IDAfnorm computes the norm of the current function value, by
+ * evaluating the DAE residual function, calling the linear 
+ * system solver, and computing a WRMS-norm.
+ *
+ * On return, savres contains the current residual vector F, and
+ * delnew contains J-inverse F.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred, or
+ *  IC_FAIL_RECOV    if res or lsolve failed recoverably, or
+ *  IDA_RES_FAIL     if res had a non-recoverable error, or
+ *  IDA_LSOLVE_FAIL  if lsolve had a non-recoverable error.
+ * -----------------------------------------------------------------
+ */
+
+static int IDAfnorm(IDAMem IDA_mem, realtype *fnorm)
+{
+
+  int retval;
+
+  /* Get residual vector F, return if failed, and save F in savres. */
+  retval = res(t0, ynew, ypnew, delnew, user_data);
+  nre++;
+  if(retval < 0) return(IDA_RES_FAIL);
+  if(retval > 0) return(IC_FAIL_RECOV);
+
+  N_VScale(ONE, delnew, savres);
+
+  /* Call the linear solve function to get J-inverse F; return if failed. */
+  retval = lsolve(IDA_mem, delnew, ewt, ynew, ypnew, savres);
+  if(retval < 0) return(IDA_LSOLVE_FAIL);
+  if(retval > 0) return(IC_FAIL_RECOV);
+
+  /* Compute the WRMS-norm; rescale if index = 0. */
+  *fnorm = IDAWrmsNorm(IDA_mem, delnew, ewt, FALSE);
+  if(sysindex == 0) (*fnorm) *= tscale*SUNRabs(cj);
+
+  return(IDA_SUCCESS);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDANewyyp
+ * -----------------------------------------------------------------
+ * IDANewyyp updates the vectors ynew and ypnew from yy0 and yp0,
+ * using the current step vector lambda*delta, in a manner
+ * depending on icopt and the input id vector.
+ *
+ * The return value is always IDA_SUCCESS = 0.
+ * -----------------------------------------------------------------
+ */
+
+static int IDANewyyp(IDAMem IDA_mem, realtype lambda)
+{
+  
+  /* IDA_YA_YDP_INIT case: ynew  = yy0 - lambda*delta    where id_i = 0
+                           ypnew = yp0 - cj*lambda*delta where id_i = 1. */
+  if(icopt == IDA_YA_YDP_INIT) {
+    N_VProd(id, delta, dtemp);
+    N_VLinearSum(ONE, yp0, -cj*lambda, dtemp, ypnew);
+    N_VLinearSum(ONE, delta, -ONE, dtemp, dtemp);
+    N_VLinearSum(ONE, yy0, -lambda, dtemp, ynew);
+    return(IDA_SUCCESS);
+  }
+
+  /* IDA_Y_INIT case: ynew = yy0 - lambda*delta. (ypnew = yp0 preset.) */
+  N_VLinearSum(ONE, yy0, -lambda, delta, ynew);
+  return(IDA_SUCCESS);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDANewy
+ * -----------------------------------------------------------------
+ * IDANewy updates the vector ynew from yy0,
+ * using the current step vector delta, in a manner
+ * depending on icopt and the input id vector.
+ *
+ * The return value is always IDA_SUCCESS = 0.
+ * -----------------------------------------------------------------
+ */
+
+static int IDANewy(IDAMem IDA_mem)
+{
+  
+  /* IDA_YA_YDP_INIT case: ynew = yy0 - delta    where id_i = 0. */
+  if(icopt == IDA_YA_YDP_INIT) {
+    N_VProd(id, delta, dtemp);
+    N_VLinearSum(ONE, delta, -ONE, dtemp, dtemp);
+    N_VLinearSum(ONE, yy0, -ONE, dtemp, ynew);
+    return(IDA_SUCCESS);
+  }
+
+  /* IDA_Y_INIT case: ynew = yy0 - delta. */
+  N_VLinearSum(ONE, yy0, -ONE, delta, ynew);
+  return(IDA_SUCCESS);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDAICFailFlag
+ * -----------------------------------------------------------------
+ * IDAICFailFlag prints a message and sets the IDACalcIC return
+ * value appropriate to the flag retval returned by IDAnlsIC.
+ * -----------------------------------------------------------------
+ */
+
+static int IDAICFailFlag(IDAMem IDA_mem, int retval)
+{
+
+  /* Depending on retval, print error message and return error flag. */
+  switch(retval) {
+
+    case IDA_RES_FAIL:
+      IDAProcessError(IDA_mem, IDA_RES_FAIL, "IDA", "IDACalcIC", MSG_IC_RES_NONREC);
+      return(IDA_RES_FAIL);
+
+    case IDA_FIRST_RES_FAIL:
+      IDAProcessError(IDA_mem, IDA_FIRST_RES_FAIL, "IDA", "IDACalcIC", MSG_IC_RES_FAIL);
+      return(IDA_FIRST_RES_FAIL);
+
+    case IDA_LSETUP_FAIL:
+      IDAProcessError(IDA_mem, IDA_LSETUP_FAIL, "IDA", "IDACalcIC", MSG_IC_SETUP_FAIL);
+      return(IDA_LSETUP_FAIL);
+
+    case IDA_LSOLVE_FAIL:  
+      IDAProcessError(IDA_mem, IDA_LSOLVE_FAIL, "IDA", "IDACalcIC", MSG_IC_SOLVE_FAIL);
+      return(IDA_LSOLVE_FAIL);
+
+    case IC_FAIL_RECOV:
+      IDAProcessError(IDA_mem, IDA_NO_RECOVERY, "IDA", "IDACalcIC", MSG_IC_NO_RECOVERY);
+      return(IDA_NO_RECOVERY);
+
+    case IC_CONSTR_FAILED: 
+      IDAProcessError(IDA_mem, IDA_CONSTR_FAIL, "IDA", "IDACalcIC", MSG_IC_FAIL_CONSTR);
+      return(IDA_CONSTR_FAIL);
+
+    case IC_LINESRCH_FAILED:  
+      IDAProcessError(IDA_mem, IDA_LINESEARCH_FAIL, "IDA", "IDACalcIC", MSG_IC_FAILED_LINS);
+      return(IDA_LINESEARCH_FAIL);
+
+    case IC_CONV_FAIL:
+      IDAProcessError(IDA_mem, IDA_CONV_FAIL, "IDA", "IDACalcIC", MSG_IC_CONV_FAILED);
+      return(IDA_CONV_FAIL);
+
+    case IC_SLOW_CONVRG: 
+      IDAProcessError(IDA_mem, IDA_CONV_FAIL, "IDA", "IDACalcIC", MSG_IC_CONV_FAILED);
+      return(IDA_CONV_FAIL);
+
+    case IDA_BAD_EWT:
+      IDAProcessError(IDA_mem, IDA_BAD_EWT, "IDA", "IDACalcIC", MSG_IC_BAD_EWT);
+      return(IDA_BAD_EWT);
+
+  }
+  return -99;
+}
+
diff --git a/src/ida/ida_impl.h b/src/ida/ida_impl.h
new file mode 100644
index 0000000..1ea32af
--- /dev/null
+++ b/src/ida/ida_impl.h
@@ -0,0 +1,493 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4920 $
+ * $Date: 2016-09-19 14:34:35 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Allan G. Taylor, Alan C. Hindmarsh, Radu Serban,
+ *                and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file (private version) for the main IDA solver.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDA_IMPL_H
+#define _IDA_IMPL_H
+
+#include <stdarg.h>
+
+#include <ida/ida.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * =================================================================
+ *   M A I N    I N T E G R A T O R    M E M O R Y    B L O C K
+ * =================================================================
+ */
+
+
+/* Basic IDA constants */
+
+#define HMAX_INV_DEFAULT RCONST(0.0) /* hmax_inv default value          */
+#define MAXORD_DEFAULT   5           /* maxord default value            */
+#define MXORDP1          6           /* max. number of N_Vectors in phi */
+#define MXSTEP_DEFAULT   500         /* mxstep default value            */
+
+/*
+ * ----------------------------------------------------------------
+ * Types : struct IDAMemRec, IDAMem
+ * ----------------------------------------------------------------
+ * The type IDAMem is type pointer to struct IDAMemRec. This
+ * structure contains fields to keep track of problem state.
+ * ----------------------------------------------------------------
+ */
+
+typedef struct IDAMemRec {
+
+  realtype ida_uround;    /* machine unit roundoff */
+
+  /* Problem Specification Data */
+
+  IDAResFn       ida_res;            /* F(t,y(t),y'(t))=0; the function F     */
+  void          *ida_user_data;      /* user pointer passed to res            */
+    
+  int            ida_itol;           /* itol = IDA_SS, IDA_SV, IDA_WF, IDA_NN */
+  realtype       ida_rtol;           /* relative tolerance                    */
+  realtype       ida_Satol;          /* scalar absolute tolerance             */  
+  N_Vector       ida_Vatol;          /* vector absolute tolerance             */  
+  booleantype    ida_user_efun;      /* TRUE if user provides efun            */
+  IDAEwtFn       ida_efun;           /* function to set ewt                   */
+  void          *ida_edata;          /* user pointer passed to efun           */
+  
+
+  booleantype    ida_setupNonNull;   /* Does setup do something?              */
+  booleantype    ida_constraintsSet; /* constraints vector present: 
+                                        do constraints calc                   */
+  booleantype    ida_suppressalg;    /* true means suppress algebraic vars
+                                        in local error tests                  */
+
+  /* Divided differences array and associated minor arrays */
+
+  N_Vector ida_phi[MXORDP1];   /* phi = (maxord+1) arrays of divided differences */
+
+  realtype ida_psi[MXORDP1];   /* differences in t (sums of recent step sizes)   */
+  realtype ida_alpha[MXORDP1]; /* ratios of current stepsize to psi values       */
+  realtype ida_beta[MXORDP1];  /* ratios of current to previous product of psi's */
+  realtype ida_sigma[MXORDP1]; /* product successive alpha values and factorial  */
+  realtype ida_gamma[MXORDP1]; /* sum of reciprocals of psi values               */
+
+  /* N_Vectors */
+
+  N_Vector ida_ewt;         /* error weight vector                            */
+  N_Vector ida_yy;          /* work space for y vector (= user's yret)        */
+  N_Vector ida_yp;          /* work space for y' vector (= user's ypret)      */
+  N_Vector ida_delta;       /* residual vector                                */
+  N_Vector ida_id;          /* bit vector for diff./algebraic components      */
+  N_Vector ida_constraints; /* vector of inequality constraint options        */
+  N_Vector ida_savres;      /* saved residual vector (= tempv1)               */
+  N_Vector ida_ee;          /* accumulated corrections to y vector, but
+                               set equal to estimated local errors upon
+                               successful return                              */
+  N_Vector ida_mm;          /* mask vector in constraints tests (= tempv2)    */
+  N_Vector ida_tempv1;      /* work space vector                              */
+  N_Vector ida_tempv2;      /* work space vector                              */
+  N_Vector ida_ynew;        /* work vector for y in IDACalcIC (= tempv2)      */
+  N_Vector ida_ypnew;       /* work vector for yp in IDACalcIC (= ee)         */
+  N_Vector ida_delnew;      /* work vector for delta in IDACalcIC (= phi[2])  */
+  N_Vector ida_dtemp;       /* work vector in IDACalcIC (= phi[3])            */
+
+  /* Variables for use by IDACalcIC*/
+
+  realtype ida_t0;          /* initial t                                      */
+  N_Vector ida_yy0;         /* initial y vector (user-supplied).              */
+  N_Vector ida_yp0;         /* initial y' vector (user-supplied).             */
+
+  int ida_icopt;            /* IC calculation user option                     */
+  booleantype ida_lsoff;    /* IC calculation linesearch turnoff option       */
+  int ida_maxnh;            /* max. number of h tries in IC calculation       */
+  int ida_maxnj;            /* max. number of J tries in IC calculation       */
+  int ida_maxnit;           /* max. number of Netwon iterations in IC calc.   */
+  int ida_nbacktr;          /* number of IC linesearch backtrack operations   */
+  int ida_sysindex;         /* computed system index (0 or 1)                 */
+  int ida_maxbacks;         /* max backtracks per Newton step                 */
+  realtype ida_epiccon;     /* IC nonlinear convergence test constant         */
+  realtype ida_steptol;     /* minimum Newton step size in IC calculation     */
+  realtype ida_tscale;      /* time scale factor = abs(tout1 - t0)            */
+
+  /* Tstop information */
+
+  booleantype ida_tstopset;
+  realtype ida_tstop;
+
+  /* Step Data */
+
+  int ida_kk;        /* current BDF method order                              */
+  int ida_kused;     /* method order used on last successful step             */
+  int ida_knew;      /* order for next step from order decrease decision      */
+  int ida_phase;     /* flag to trigger step doubling in first few steps      */
+  int ida_ns;        /* counts steps at fixed stepsize and order              */
+
+  realtype ida_hin;      /* initial step                                      */
+  realtype ida_h0u;      /* actual initial stepsize                           */
+  realtype ida_hh;       /* current step size h                               */
+  realtype ida_hused;    /* step size used on last successful step            */
+  realtype ida_rr;       /* rr = hnext / hused                                */
+  realtype ida_tn;       /* current internal value of t                       */
+  realtype ida_tretlast; /* value of tret previously returned by IDASolve     */
+  realtype ida_cj;       /* current value of scalar (-alphas/hh) in Jacobian  */
+  realtype ida_cjlast;   /* cj value saved from last successful step          */
+  realtype ida_cjold;    /* cj value saved from last call to lsetup           */
+  realtype ida_cjratio;  /* ratio of cj values: cj/cjold                      */
+  realtype ida_ss;       /* scalar used in Newton iteration convergence test  */
+  realtype ida_epsNewt;  /* test constant in Newton convergence test          */
+  realtype ida_epcon;    /* coeficient of the Newton covergence test          */
+  realtype ida_toldel;   /* tolerance in direct test on Newton corrections    */
+
+  /* Limits */
+
+  int ida_maxncf;        /* max numer of convergence failures                 */
+  int ida_maxcor;        /* max number of Newton corrections                  */
+  int ida_maxnef;        /* max number of error test failures                 */
+
+  int ida_maxord;        /* max value of method order k:                      */
+  int ida_maxord_alloc;  /* value of maxord used when allocating memory       */
+  long int ida_mxstep;   /* max number of internal steps for one user call    */
+  realtype ida_hmax_inv; /* inverse of max. step size hmax (default = 0.0)    */
+
+  /* Counters */
+
+  long int ida_nst;      /* number of internal steps taken                    */
+  long int ida_nre;      /* number of function (res) calls                    */
+  long int ida_ncfn;     /* number of corrector convergence failures          */
+  long int ida_netf;     /* number of error test failures                     */
+  long int ida_nni;      /* number of Newton iterations performed             */
+  long int ida_nsetups;  /* number of lsetup calls                            */
+
+  /* Space requirements for IDA */
+
+  long int ida_lrw1;     /* no. of realtype words in 1 N_Vector               */
+  long int ida_liw1;     /* no. of integer words in 1 N_Vector                */
+  long int ida_lrw;      /* number of realtype words in IDA work vectors      */
+  long int ida_liw;      /* no. of integer words in IDA work vectors          */
+
+  realtype ida_tolsf;    /* tolerance scale factor (saved value)              */
+
+  /* Error handler function and error ouput file */
+
+  IDAErrHandlerFn ida_ehfun;  /* Error messages are handled by ehfun          */
+  void *ida_eh_data;          /* dats pointer passed to ehfun                 */
+  FILE *ida_errfp;            /* IDA error messages are sent to errfp         */
+
+  /* Flags to verify correct calling sequence */
+
+  booleantype ida_SetupDone;  /* set to FALSE by IDAMalloc and IDAReInit
+                                 set to TRUE by IDACalcIC or IDASolve         */
+
+  booleantype ida_VatolMallocDone;
+  booleantype ida_constraintsMallocDone;
+  booleantype ida_idMallocDone;
+
+  booleantype ida_MallocDone; /* set to FALSE by IDACreate
+                                 set to TRUE by IDAMAlloc
+                                 tested by IDAReInit and IDASolve             */
+
+  /* Linear Solver Data */
+
+  /* Linear Solver functions to be called */
+
+  int (*ida_linit)(struct IDAMemRec *idamem);
+
+  int (*ida_lsetup)(struct IDAMemRec *idamem, N_Vector yyp, 
+                    N_Vector ypp, N_Vector resp, 
+                    N_Vector tempv1, N_Vector tempv2, N_Vector tempv3); 
+
+  int (*ida_lsolve)(struct IDAMemRec *idamem, N_Vector b, N_Vector weight,
+                    N_Vector ycur, N_Vector ypcur, N_Vector rescur);
+
+  int (*ida_lperf)(struct IDAMemRec *idamem, int perftask);
+
+  int (*ida_lfree)(struct IDAMemRec *idamem);
+
+  /* Linear Solver specific memory */
+
+  void *ida_lmem;           
+
+  /* Flag to indicate successful ida_linit call */
+
+  booleantype ida_linitOK;
+
+  /* Rootfinding Data */
+
+  IDARootFn ida_gfun;       /* Function g for roots sought                     */
+  int ida_nrtfn;            /* number of components of g                       */
+  int *ida_iroots;          /* array for root information                      */
+  int *ida_rootdir;         /* array specifying direction of zero-crossing     */
+  realtype ida_tlo;         /* nearest endpoint of interval in root search     */
+  realtype ida_thi;         /* farthest endpoint of interval in root search    */
+  realtype ida_trout;       /* t return value from rootfinder routine          */
+  realtype *ida_glo;        /* saved array of g values at t = tlo              */
+  realtype *ida_ghi;        /* saved array of g values at t = thi              */
+  realtype *ida_grout;      /* array of g values at t = trout                  */
+  realtype ida_toutc;       /* copy of tout (if NORMAL mode)                   */
+  realtype ida_ttol;        /* tolerance on root location                      */
+  int ida_taskc;            /* copy of parameter itask                         */
+  int ida_irfnd;            /* flag showing whether last step had a root       */
+  long int ida_nge;         /* counter for g evaluations                       */
+  booleantype *ida_gactive; /* array with active/inactive event functions      */
+  int ida_mxgnull;          /* number of warning messages about possible g==0  */
+
+
+} *IDAMem;
+
+/*
+ * =================================================================
+ *     I N T E R F A C E   T O    L I N E A R   S O L V E R S     
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * int (*ida_linit)(IDAMem IDA_mem);                               
+ * -----------------------------------------------------------------
+ * The purpose of ida_linit is to allocate memory for the          
+ * solver-specific fields in the structure *(idamem->ida_lmem) and 
+ * perform any needed initializations of solver-specific memory,   
+ * such as counters/statistics. An (*ida_linit) should return      
+ * 0 if it has successfully initialized the IDA linear solver and 
+ * a non-zero value otherwise. If an error does occur, an appropriate
+ * message should be sent to the error handler function.
+ * ----------------------------------------------------------------
+ */                                                                 
+
+/*
+ * -----------------------------------------------------------------
+ * int (*ida_lsetup)(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,   
+ *                  N_Vector resp,                                 
+ *            N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);  
+ * -----------------------------------------------------------------
+ * The job of ida_lsetup is to prepare the linear solver for       
+ * subsequent calls to ida_lsolve. Its parameters are as follows:  
+ *                                                                 
+ * idamem - problem memory pointer of type IDAMem. See the big     
+ *          typedef earlier in this file.                          
+ *                                                                 
+ *                                                                 
+ * yyp   - the predicted y vector for the current IDA internal     
+ *         step.                                                   
+ *                                                                 
+ * ypp   - the predicted y' vector for the current IDA internal    
+ *         step.                                                   
+ *                                                                 
+ * resp  - F(tn, yyp, ypp).                                        
+ *                                                                 
+ * tempv1, tempv2, tempv3 - temporary N_Vectors provided for use   
+ *         by ida_lsetup.                                          
+ *                                                                 
+ * The ida_lsetup routine should return 0 if successful,
+ * a positive value for a recoverable error, and a negative value 
+ * for an unrecoverable error.
+ * -----------------------------------------------------------------
+ */                                                                 
+
+/*
+ * -----------------------------------------------------------------
+ * int (*ida_lsolve)(IDAMem IDA_mem, N_Vector b, N_Vector weight,  
+ *               N_Vector ycur, N_Vector ypcur, N_Vector rescur);  
+ * -----------------------------------------------------------------
+ * ida_lsolve must solve the linear equation P x = b, where        
+ * P is some approximation to the system Jacobian                  
+ *                  J = (dF/dy) + cj (dF/dy')                      
+ * evaluated at (tn,ycur,ypcur) and the RHS vector b is input.     
+ * The N-vector ycur contains the solver's current approximation   
+ * to y(tn), ypcur contains that for y'(tn), and the vector rescur 
+ * contains the N-vector residual F(tn,ycur,ypcur).                
+ * The solution is to be returned in the vector b. 
+ *                                                                 
+ * The ida_lsolve routine should return 0 if successful,
+ * a positive value for a recoverable error, and a negative value 
+ * for an unrecoverable error.
+ * -----------------------------------------------------------------
+ */                                                                 
+
+/*
+ * -----------------------------------------------------------------
+ * int (*ida_lperf)(IDAMem IDA_mem, int perftask);                 
+ * -----------------------------------------------------------------
+ * ida_lperf is called two places in IDA where linear solver       
+ * performance data is required by IDA. For perftask = 0, an       
+ * initialization of performance variables is performed, while for 
+ * perftask = 1, the performance is evaluated.                     
+ * -----------------------------------------------------------------
+ */                                                                 
+
+/*
+ * -----------------------------------------------------------------
+ * int (*ida_lfree)(IDAMem IDA_mem);                               
+ * -----------------------------------------------------------------
+ * ida_lfree should free up any memory allocated by the linear     
+ * solver. This routine is called once a problem has been          
+ * completed and the linear solver is no longer needed.  It should 
+ * return 0 upon success, nonzero on failure.
+ * -----------------------------------------------------------------
+ */                                                                 
+
+/*
+ * =================================================================
+ *   I D A    I N T E R N A L   F U N C T I O N S
+ * =================================================================
+ */
+
+/* Prototype of internal ewtSet function */
+
+int IDAEwtSet(N_Vector ycur, N_Vector weight, void *data);
+
+/* High level error handler */
+
+void IDAProcessError(IDAMem IDA_mem, 
+                     int error_code, const char *module, const char *fname, 
+                     const char *msgfmt, ...);
+
+/* Prototype of internal errHandler function */
+
+void IDAErrHandler(int error_code, const char *module, const char *function, 
+                   char *msg, void *data);
+
+/*
+ * =================================================================
+ * I D A    E R R O R    M E S S A G E S
+ * =================================================================
+ */
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define MSG_TIME "t = %Lg, "
+#define MSG_TIME_H "t = %Lg and h = %Lg, "
+#define MSG_TIME_INT "t = %Lg is not between tcur - hu = %Lg and tcur = %Lg."
+#define MSG_TIME_TOUT "tout = %Lg"
+#define MSG_TIME_TSTOP "tstop = %Lg"
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define MSG_TIME "t = %lg, "
+#define MSG_TIME_H "t = %lg and h = %lg, "
+#define MSG_TIME_INT "t = %lg is not between tcur - hu = %lg and tcur = %lg."
+#define MSG_TIME_TOUT "tout = %lg"
+#define MSG_TIME_TSTOP "tstop = %lg"
+
+#else
+
+#define MSG_TIME "t = %g, "
+#define MSG_TIME_H "t = %g and h = %g, "
+#define MSG_TIME_INT "t = %g is not between tcur - hu = %g and tcur = %g."
+#define MSG_TIME_TOUT "tout = %g"
+#define MSG_TIME_TSTOP "tstop = %g"
+
+#endif
+
+/* General errors */
+
+#define MSG_MEM_FAIL       "A memory request failed."
+#define MSG_NO_MEM         "ida_mem = NULL illegal."
+#define MSG_NO_MALLOC      "Attempt to call before IDAMalloc."
+#define MSG_BAD_NVECTOR    "A required vector operation is not implemented."
+
+/* Initialization errors */
+
+#define MSG_Y0_NULL        "y0 = NULL illegal."
+#define MSG_YP0_NULL       "yp0 = NULL illegal."
+#define MSG_BAD_ITOL       "Illegal value for itol. The legal values are IDA_SS, IDA_SV, and IDA_WF."
+#define MSG_RES_NULL       "res = NULL illegal."
+#define MSG_BAD_RTOL       "reltol < 0 illegal."
+#define MSG_ATOL_NULL      "abstol = NULL illegal."
+#define MSG_BAD_ATOL       "Some abstol component < 0.0 illegal."
+#define MSG_ROOT_FUNC_NULL "g = NULL illegal."
+
+#define MSG_MISSING_ID     "id = NULL but suppressalg option on."
+#define MSG_NO_TOLS        "No integration tolerances have been specified."
+#define MSG_FAIL_EWT       "The user-provide EwtSet function failed."
+#define MSG_BAD_EWT        "Some initial ewt component = 0.0 illegal."
+#define MSG_Y0_FAIL_CONSTR "y0 fails to satisfy constraints."
+#define MSG_LSOLVE_NULL    "The linear solver's solve routine is NULL."
+#define MSG_LINIT_FAIL     "The linear solver's init routine failed."
+
+/* IDACalcIC error messages */
+
+#define MSG_IC_BAD_ICOPT   "icopt has an illegal value."
+#define MSG_IC_BAD_MAXBACKS "maxbacks <= 0 illegal."
+#define MSG_IC_MISSING_ID  "id = NULL conflicts with icopt."
+#define MSG_IC_TOO_CLOSE   "tout1 too close to t0 to attempt initial condition calculation."
+#define MSG_IC_BAD_ID      "id has illegal values."
+#define MSG_IC_BAD_EWT     "Some initial ewt component = 0.0 illegal."
+#define MSG_IC_RES_NONREC  "The residual function failed unrecoverably. "
+#define MSG_IC_RES_FAIL    "The residual function failed at the first call. "
+#define MSG_IC_SETUP_FAIL  "The linear solver setup failed unrecoverably."
+#define MSG_IC_SOLVE_FAIL  "The linear solver solve failed unrecoverably."
+#define MSG_IC_NO_RECOVERY "The residual routine or the linear setup or solve routine had a recoverable error, but IDACalcIC was unable to recover."
+#define MSG_IC_FAIL_CONSTR "Unable to satisfy the inequality constraints."
+#define MSG_IC_FAILED_LINS "The linesearch algorithm failed: step too small or too many backtracks."
+#define MSG_IC_CONV_FAILED "Newton/Linesearch algorithm failed to converge."
+
+/* IDASolve error messages */
+
+#define MSG_YRET_NULL      "yret = NULL illegal."
+#define MSG_YPRET_NULL     "ypret = NULL illegal."
+#define MSG_TRET_NULL      "tret = NULL illegal."
+#define MSG_BAD_ITASK      "itask has an illegal value."
+#define MSG_TOO_CLOSE      "tout too close to t0 to start integration."
+#define MSG_BAD_HINIT      "Initial step is not towards tout."
+#define MSG_BAD_TSTOP      "The value " MSG_TIME_TSTOP " is behind current " MSG_TIME "in the direction of integration."
+#define MSG_CLOSE_ROOTS    "Root found at and very near " MSG_TIME "."
+#define MSG_MAX_STEPS      "At " MSG_TIME ", mxstep steps taken before reaching tout." 
+#define MSG_EWT_NOW_FAIL   "At " MSG_TIME "the user-provide EwtSet function failed."
+#define MSG_EWT_NOW_BAD    "At " MSG_TIME "some ewt component has become <= 0.0."
+#define MSG_TOO_MUCH_ACC   "At " MSG_TIME "too much accuracy requested."
+
+#define MSG_BAD_K          "Illegal value for k."
+#define MSG_NULL_DKY       "dky = NULL illegal."
+#define MSG_BAD_T          "Illegal value for t." MSG_TIME_INT
+#define MSG_BAD_TOUT       "Trouble interpolating at " MSG_TIME_TOUT ". tout too far back in direction of integration."
+
+#define MSG_ERR_FAILS      "At " MSG_TIME_H "the error test failed repeatedly or with |h| = hmin."
+#define MSG_CONV_FAILS     "At " MSG_TIME_H "the corrector convergence failed repeatedly or with |h| = hmin."
+#define MSG_SETUP_FAILED   "At " MSG_TIME "the linear solver setup failed unrecoverably."
+#define MSG_SOLVE_FAILED   "At " MSG_TIME "the linear solver solve failed unrecoverably."
+#define MSG_REP_RES_ERR    "At " MSG_TIME "repeated recoverable residual errors."
+#define MSG_RES_NONRECOV   "At " MSG_TIME "the residual function failed unrecoverably."
+#define MSG_FAILED_CONSTR  "At " MSG_TIME "unable to satisfy inequality constraints."
+#define MSG_RTFUNC_FAILED  "At " MSG_TIME ", the rootfinding routine failed in an unrecoverable manner."
+#define MSG_NO_ROOT        "Rootfinding was not initialized."
+#define MSG_INACTIVE_ROOTS "At the end of the first step, there are still some root functions identically 0. This warning will not be issued again."
+
+
+/* IDASet* / IDAGet* error messages */
+
+#define MSG_NEG_MAXORD     "maxord <= 0 illegal."
+#define MSG_BAD_MAXORD     "Illegal attempt to increase maximum order."
+#define MSG_NEG_HMAX       "hmax < 0 illegal."
+#define MSG_NEG_EPCON      "epcon <= 0.0 illegal."
+#define MSG_BAD_CONSTR     "Illegal values in constraints vector."
+#define MSG_BAD_EPICCON    "epiccon <= 0.0 illegal."
+#define MSG_BAD_MAXNH      "maxnh <= 0 illegal."
+#define MSG_BAD_MAXNJ      "maxnj <= 0 illegal."
+#define MSG_BAD_MAXNIT     "maxnit <= 0 illegal."
+#define MSG_BAD_STEPTOL    "steptol <= 0.0 illegal."
+
+#define MSG_TOO_LATE       "IDAGetConsistentIC can only be called before IDASolve."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/ida/ida_io.c b/src/ida/ida_io.c
new file mode 100644
index 0000000..ade32f5
--- /dev/null
+++ b/src/ida/ida_io.c
@@ -0,0 +1,1180 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4529 $
+ * $Date: 2015-09-02 15:41:00 -0700 (Wed, 02 Sep 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan Hindmarsh, Radu Serban and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the optional inputs and     
+ * outputs for the IDA solver.                                    
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "ida_impl.h"
+
+#include <sundials/sundials_math.h>
+
+#define ZERO    RCONST(0.0)
+#define HALF    RCONST(0.5)
+#define ONE     RCONST(1.0)
+#define TWOPT5  RCONST(2.5)
+
+/* 
+ * =================================================================
+ * IDA optional input functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define lrw  (IDA_mem->ida_lrw)
+#define liw  (IDA_mem->ida_liw)
+#define lrw1 (IDA_mem->ida_lrw1)
+#define liw1 (IDA_mem->ida_liw1)
+
+int IDASetErrHandlerFn(void *ida_mem, IDAErrHandlerFn ehfun, void *eh_data)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetErrHandlerFn", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_ehfun = ehfun;
+  IDA_mem->ida_eh_data = eh_data;
+
+  return(IDA_SUCCESS);
+}
+
+
+int IDASetErrFile(void *ida_mem, FILE *errfp)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetErrFile", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_errfp = errfp;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetUserData(void *ida_mem, void *user_data)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetUserData", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_user_data = user_data;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxOrd(void *ida_mem, int maxord)
+{
+  IDAMem IDA_mem;
+  int maxord_alloc;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxOrd", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (maxord <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetMaxOrd", MSG_NEG_MAXORD);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Cannot increase maximum order beyond the value that
+     was used when allocating memory */
+  maxord_alloc = IDA_mem->ida_maxord_alloc;
+
+  if (maxord > maxord_alloc) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetMaxOrd", MSG_BAD_MAXORD);
+    return(IDA_ILL_INPUT);
+  }  
+
+  IDA_mem->ida_maxord = SUNMIN(maxord,MAXORD_DEFAULT);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxNumSteps(void *ida_mem, long int mxsteps)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxNumSteps", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Passing mxsteps=0 sets the default. Passing mxsteps<0 disables the test. */
+
+  if (mxsteps == 0)
+    IDA_mem->ida_mxstep = MXSTEP_DEFAULT;
+  else
+    IDA_mem->ida_mxstep = mxsteps;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetInitStep(void *ida_mem, realtype hin)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetInitStep", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_hin = hin;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxStep(void *ida_mem, realtype hmax)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxStep", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (hmax < 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetMaxStep", MSG_NEG_HMAX);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Passing 0 sets hmax = infinity */
+  if (hmax == ZERO) {
+    IDA_mem->ida_hmax_inv = HMAX_INV_DEFAULT;
+    return(IDA_SUCCESS);
+  }
+
+  IDA_mem->ida_hmax_inv = ONE/hmax;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetStopTime(void *ida_mem, realtype tstop)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetStopTime", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* If IDASolve was called at least once, test if tstop is legal
+   * (i.e. if it was not already passed).
+   * If IDASetStopTime is called before the first call to IDASolve,
+   * tstop will be checked in IDASolve. */
+  if (IDA_mem->ida_nst > 0) {
+
+    if ( (tstop - IDA_mem->ida_tn) * IDA_mem->ida_hh < ZERO ) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetStopTime", MSG_BAD_TSTOP, tstop, IDA_mem->ida_tn);
+      return(IDA_ILL_INPUT);
+    }
+
+  }
+
+  IDA_mem->ida_tstop = tstop;
+  IDA_mem->ida_tstopset = TRUE;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetNonlinConvCoef(void *ida_mem, realtype epcon)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetNonlinConvCoef", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (epcon <= ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetNonlinConvCoef", MSG_NEG_EPCON);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_epcon = epcon;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxErrTestFails(void *ida_mem, int maxnef)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxErrTestFails", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_maxnef = maxnef;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxConvFails(void *ida_mem, int maxncf)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxConvFails", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_maxncf = maxncf;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxNonlinIters(void *ida_mem, int maxcor)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxNonlinIters", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_maxcor = maxcor;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetSuppressAlg(void *ida_mem, booleantype suppressalg)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetSuppressAlg", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_suppressalg = suppressalg;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetId(void *ida_mem, N_Vector id)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetId", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (id == NULL) {
+    if (IDA_mem->ida_idMallocDone) {
+      N_VDestroy(IDA_mem->ida_id);
+      lrw -= lrw1;
+      liw -= liw1;
+    }
+    IDA_mem->ida_idMallocDone = FALSE;    
+    return(IDA_SUCCESS);
+  }
+
+  if ( !(IDA_mem->ida_idMallocDone) ) {
+    IDA_mem->ida_id = N_VClone(id);
+    lrw += lrw1;
+    liw += liw1;
+    IDA_mem->ida_idMallocDone = TRUE;
+  }
+
+  /* Load the id vector */
+
+  N_VScale(ONE, id, IDA_mem->ida_id);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetConstraints(void *ida_mem, N_Vector constraints)
+{
+  IDAMem IDA_mem;
+  realtype temptest;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetConstraints", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (constraints == NULL) {
+    if (IDA_mem->ida_constraintsMallocDone) {
+      N_VDestroy(IDA_mem->ida_constraints);
+      lrw -= lrw1;
+      liw -= liw1;
+    }
+    IDA_mem->ida_constraintsMallocDone = FALSE;
+    IDA_mem->ida_constraintsSet = FALSE;
+    return(IDA_SUCCESS);
+  }
+
+  /* Test if required vector ops. are defined */
+
+  if (constraints->ops->nvdiv         == NULL ||
+      constraints->ops->nvmaxnorm     == NULL ||
+      constraints->ops->nvcompare     == NULL ||
+      constraints->ops->nvconstrmask  == NULL ||
+      constraints->ops->nvminquotient == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetConstraints", MSG_BAD_NVECTOR);
+    return(IDA_ILL_INPUT);
+  }
+
+  /*  Check the constraints vector */
+
+  temptest = N_VMaxNorm(constraints);
+  if((temptest > TWOPT5) || (temptest < HALF)){ 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetConstraints", MSG_BAD_CONSTR);
+    return(IDA_ILL_INPUT); 
+  }
+
+  if ( !(IDA_mem->ida_constraintsMallocDone) ) {
+    IDA_mem->ida_constraints = N_VClone(constraints);
+    lrw += lrw1;
+    liw += liw1;
+    IDA_mem->ida_constraintsMallocDone = TRUE;
+  }
+
+  /* Load the constraints vector */
+
+  N_VScale(ONE, constraints, IDA_mem->ida_constraints);
+
+  IDA_mem->ida_constraintsSet = TRUE;
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * IDASetRootDirection
+ *
+ * Specifies the direction of zero-crossings to be monitored.
+ * The default is to monitor both crossings.
+ */
+
+int IDASetRootDirection(void *ida_mem, int *rootdir)
+{
+  IDAMem IDA_mem;
+  int i, nrt;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetRootDirection", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  nrt = IDA_mem->ida_nrtfn;
+  if (nrt==0) {
+    IDAProcessError(NULL, IDA_ILL_INPUT, "IDA", "IDASetRootDirection", MSG_NO_ROOT);
+    return(IDA_ILL_INPUT);    
+  }
+
+  for(i=0; i<nrt; i++) IDA_mem->ida_rootdir[i] = rootdir[i];
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDASetNoInactiveRootWarn
+ *
+ * Disables issuing a warning if some root function appears
+ * to be identically zero at the beginning of the integration
+ */
+
+int IDASetNoInactiveRootWarn(void *ida_mem)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetNoInactiveRootWarn", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_mxgnull = 0;
+  
+  return(IDA_SUCCESS);
+}
+
+
+/* 
+ * =================================================================
+ * IDA IC optional input functions
+ * =================================================================
+ */
+
+int IDASetNonlinConvCoefIC(void *ida_mem, realtype epiccon)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetNonlinConvCoefIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (epiccon <= ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetNonlinConvCoefIC", MSG_BAD_EPICCON);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_epiccon = epiccon;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxNumStepsIC(void *ida_mem, int maxnh)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxNumStepsIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (maxnh <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetMaxNumStepsIC", MSG_BAD_MAXNH);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_maxnh = maxnh;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxNumJacsIC(void *ida_mem, int maxnj)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxNumJacsIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+   if (maxnj <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetMaxNumJacsIC", MSG_BAD_MAXNJ);
+    return(IDA_ILL_INPUT);
+  } 
+
+  IDA_mem->ida_maxnj = maxnj;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxNumItersIC(void *ida_mem, int maxnit)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxNumItersIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (maxnit <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetMaxNumItersIC", MSG_BAD_MAXNIT);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_maxnit = maxnit;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxBacksIC(void *ida_mem, int maxbacks)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxBacksIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (maxbacks <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetMaxBacksIC", MSG_IC_BAD_MAXBACKS);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_maxbacks = maxbacks;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetLineSearchOffIC(void *ida_mem, booleantype lsoff)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetLineSearchOffIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_lsoff = lsoff;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetStepToleranceIC(void *ida_mem, realtype steptol)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetStepToleranceIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (steptol <= ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetStepToleranceIC", MSG_BAD_STEPTOL);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_steptol = steptol;
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * Readability constants
+ * =================================================================
+ */
+
+#define ewt         (IDA_mem->ida_ewt)
+#define kk          (IDA_mem->ida_kk)
+#define hh          (IDA_mem->ida_hh)
+#define h0u         (IDA_mem->ida_h0u)
+#define tn          (IDA_mem->ida_tn)
+#define nbacktr     (IDA_mem->ida_nbacktr)
+#define nst         (IDA_mem->ida_nst)
+#define nre         (IDA_mem->ida_nre)
+#define ncfn        (IDA_mem->ida_ncfn)
+#define netf        (IDA_mem->ida_netf)
+#define nni         (IDA_mem->ida_nni)
+#define nsetups     (IDA_mem->ida_nsetups)
+#define lrw         (IDA_mem->ida_lrw)
+#define liw         (IDA_mem->ida_liw)
+#define kused       (IDA_mem->ida_kused)          
+#define hused       (IDA_mem->ida_hused)         
+#define tolsf       (IDA_mem->ida_tolsf) 
+#define efun        (IDA_mem->ida_efun)
+#define edata       (IDA_mem->ida_edata)
+#define nge         (IDA_mem->ida_nge)
+#define iroots      (IDA_mem->ida_iroots)
+#define ee          (IDA_mem->ida_ee)
+
+/* 
+ * =================================================================
+ * IDA optional input functions
+ * =================================================================
+ */
+
+int IDAGetNumSteps(void *ida_mem, long int *nsteps)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetNumSteps", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nsteps = nst;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumResEvals(void *ida_mem, long int *nrevals)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetNumResEvals", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nrevals = nre;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumLinSolvSetups(void *ida_mem, long int *nlinsetups)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetNumLinSolvSetups", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nlinsetups = nsetups;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumErrTestFails(void *ida_mem, long int *netfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetNumErrTestFails", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *netfails = netf;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumBacktrackOps(void *ida_mem, long int *nbacktracks)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetNumBacktrackOps", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nbacktracks = nbacktr;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetConsistentIC(void *ida_mem, N_Vector yy0, N_Vector yp0)
+{
+  IDAMem IDA_mem;
+  
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetConsistentIC", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem; 
+
+  if (IDA_mem->ida_kused != 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDAGetConsistentIC", MSG_TOO_LATE);
+    return(IDA_ILL_INPUT);
+  }
+
+  if(yy0 != NULL) N_VScale(ONE, IDA_mem->ida_phi[0], yy0);
+  if(yp0 != NULL) N_VScale(ONE, IDA_mem->ida_phi[1], yp0);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetLastOrder(void *ida_mem, int *klast)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetLastOrder", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *klast = kused;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetCurrentOrder(void *ida_mem, int *kcur)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetCurrentOrder", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *kcur = kk;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetActualInitStep(void *ida_mem, realtype *hinused)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetActualInitStep", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *hinused = h0u;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetLastStep(void *ida_mem, realtype *hlast)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetLastStep", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *hlast = hused;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetCurrentStep(void *ida_mem, realtype *hcur)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetCurrentStep", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *hcur = hh;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetCurrentTime(void *ida_mem, realtype *tcur)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetCurrentTime", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *tcur = tn;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetTolScaleFactor(void *ida_mem, realtype *tolsfact)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetTolScaleFactor", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *tolsfact = tolsf;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetErrWeights(void *ida_mem, N_Vector eweight)
+{
+  IDAMem IDA_mem;
+  
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetErrWeights", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem; 
+
+  N_VScale(ONE, ewt, eweight);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetEstLocalErrors(void *ida_mem, N_Vector ele)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetEstLocalErrors", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  N_VScale(ONE, ee, ele);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetWorkSpace(void *ida_mem, long int *lenrw, long int *leniw)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetWorkSpace", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *leniw = liw;
+  *lenrw = lrw;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetIntegratorStats(void *ida_mem, long int *nsteps, long int *nrevals, 
+                          long int *nlinsetups, long int *netfails,
+                          int *klast, int *kcur, realtype *hinused, realtype *hlast, 
+                          realtype *hcur, realtype *tcur)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetIntegratorStats", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nsteps     = nst;
+  *nrevals    = nre;
+  *nlinsetups = nsetups;
+  *netfails   = netf;
+  *klast      = kused;
+  *kcur       = kk;
+  *hinused    = h0u;
+  *hlast      = hused;
+  *hcur       = hh;  
+  *tcur       = tn;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumGEvals(void *ida_mem, long int *ngevals)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetNumGEvals", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *ngevals = nge;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetRootInfo(void *ida_mem, int *rootsfound)
+{
+  IDAMem IDA_mem;
+  int i, nrt;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetRootInfo", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  nrt = IDA_mem->ida_nrtfn;
+
+  for (i=0; i<nrt; i++) rootsfound[i] = iroots[i];
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumNonlinSolvIters(void *ida_mem, long int *nniters)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetNumNonlinSolvIters", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nniters = nni;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumNonlinSolvConvFails(void *ida_mem, long int *nncfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetNumNonlinSolvConvFails", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nncfails = ncfn;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNonlinSolvStats(void *ida_mem, long int *nniters, long int *nncfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDAGetNonlinSolvStats", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nniters  = nni;
+  *nncfails = ncfn;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+char *IDAGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(24*sizeof(char));
+
+  switch(flag) {
+  case IDA_SUCCESS:
+    sprintf(name,"IDA_SUCCESS");
+    break;
+  case IDA_TSTOP_RETURN:
+    sprintf(name,"IDA_TSTOP_RETURN");
+    break;
+  case IDA_ROOT_RETURN:
+    sprintf(name,"IDA_ROOT_RETURN");
+    break;
+  case IDA_TOO_MUCH_WORK:
+    sprintf(name,"IDA_TOO_MUCH_WORK");
+    break;
+  case IDA_TOO_MUCH_ACC:
+    sprintf(name,"IDA_TOO_MUCH_ACC");
+    break;
+  case IDA_ERR_FAIL:
+    sprintf(name,"IDA_ERR_FAIL");
+    break;
+  case IDA_CONV_FAIL:
+    sprintf(name,"IDA_CONV_FAIL");
+    break;
+  case IDA_LINIT_FAIL:
+    sprintf(name,"IDA_LINIT_FAIL");
+    break;
+  case IDA_LSETUP_FAIL:
+    sprintf(name,"IDA_LSETUP_FAIL");
+    break;
+  case IDA_LSOLVE_FAIL:
+    sprintf(name,"IDA_LSOLVE_FAIL");
+    break;
+  case IDA_CONSTR_FAIL:
+    sprintf(name,"IDA_CONSTR_FAIL");
+    break;
+  case IDA_RES_FAIL:
+    sprintf(name,"IDA_RES_FAIL");
+    break;
+  case IDA_FIRST_RES_FAIL:
+    sprintf(name,"IDA_FIRST_RES_FAIL");
+    break;
+  case IDA_REP_RES_ERR:
+    sprintf(name,"IDA_REP_RES_ERR");
+    break;
+  case IDA_RTFUNC_FAIL:
+    sprintf(name,"IDA_RTFUNC_FAIL");
+    break;
+  case IDA_MEM_FAIL:
+    sprintf(name,"IDA_MEM_FAIL");
+    break;
+  case IDA_MEM_NULL:
+    sprintf(name,"IDA_MEM_NULL");
+    break;
+  case IDA_ILL_INPUT:
+    sprintf(name,"IDA_ILL_INPUT");
+    break;
+  case IDA_NO_MALLOC:
+    sprintf(name,"IDA_NO_MALLOC");
+    break;
+  case IDA_BAD_T:
+    sprintf(name,"IDA_BAD_T");
+    break;
+  case IDA_BAD_EWT:
+    sprintf(name,"IDA_BAD_EWT");
+    break;
+  case IDA_NO_RECOVERY:
+    sprintf(name,"IDA_NO_RECOVERY");
+    break;
+  case IDA_LINESEARCH_FAIL:
+    sprintf(name,"IDA_LINESEARCH_FAIL");
+    break;
+
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
diff --git a/src/ida/ida_klu.c b/src/ida/ida_klu.c
new file mode 100644
index 0000000..78d9f1b
--- /dev/null
+++ b/src/ida/ida_klu.c
@@ -0,0 +1,564 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4874 $
+ * $Date: 2016-08-31 10:22:40 -0700 (Wed, 31 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDAKLU linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "ida/ida_klu.h"
+#include "ida_impl.h"
+#include "ida_sparse_impl.h"
+#include "sundials/sundials_klu_impl.h"
+#include "sundials/sundials_math.h"
+
+/* Constants */
+
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+#define TWOTHIRDS    RCONST(0.6666666666666667)
+
+/* IDAKLU linit, lsetup, lsolve, and lfree routines */
+ 
+static int IDAKLUInit(IDAMem IDA_mem);
+
+static int IDAKLUSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+		       N_Vector rrp, N_Vector tmp1,
+		       N_Vector tmp2, N_Vector tmp3);
+
+static int IDAKLUSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+			     N_Vector ycur, N_Vector ypcur, N_Vector rrcur);
+
+static int IDAKLUFree(IDAMem IDA_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * IDAKLU
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDA / KLU linear solver module.  
+ * IDAKLU first calls the existing lfree routine if this is not NULL.
+ * Then it sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDAKLUInit, IDAKLUSetup,
+ * IDAKLUSolve, NULL, and IDAKLUFree, respectively.
+ * It allocates memory for a structure of type IDAkluMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem) to TRUE.
+ * Finally, it allocates memory for KLU.
+ * The return value is IDASLS_SUCCESS = 0, IDASLS_LMEM_FAIL = -1,
+ * or IDASLS_ILL_INPUT = -2.
+ *
+ * NOTE: The KLU linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDAKLU will first 
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int IDAKLU(void *ida_mem, int n, int nnz, int sparsetype)
+{
+  IDAMem IDA_mem;
+  IDASlsMem idasls_mem;
+  KLUData klu_data;
+  int flag;
+
+  /* Return immediately if ida_mem is NULL. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDAKLU", 
+                    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the Direct solver */
+  if (IDA_mem->ida_tempv1->ops->nvgetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASLS", "IDAKLU", 
+                    MSGSP_BAD_NVECTOR);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  if (IDA_mem->ida_lfree != NULL) flag = IDA_mem->ida_lfree(IDA_mem);
+
+  /* Set five main function fields in IDA_mem. */
+  IDA_mem->ida_linit  = IDAKLUInit;
+  IDA_mem->ida_lsetup = IDAKLUSetup;
+  IDA_mem->ida_lsolve = IDAKLUSolve;
+  IDA_mem->ida_lperf  = NULL;
+  IDA_mem->ida_lfree  = IDAKLUFree;
+
+  /* Get memory for IDASlsMemRec. */
+  idasls_mem = (IDASlsMem) malloc(sizeof(struct IDASlsMemRec));
+  if (idasls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASLS", "IDAKLU", 
+                    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  /* Get memory for KLUData. */
+  klu_data = (KLUData)malloc(sizeof(struct KLUDataRec));
+  if (klu_data == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASLS", "IDAKLU", 
+                    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  IDA_mem->ida_setupNonNull = TRUE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  idasls_mem->s_jaceval = NULL;
+  idasls_mem->s_jacdata = NULL;
+  idasls_mem->sparsetype = sparsetype;
+
+  /* Allocate memory for the sparse Jacobian */
+  idasls_mem->s_JacMat = SparseNewMat(n, n, nnz, sparsetype);
+  if (idasls_mem->s_JacMat == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASLS", "IDAKLU", 
+                    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  /* KInitialize KLU structures */
+  switch (sparsetype) {
+    case CSC_MAT:
+      klu_data->sun_klu_solve = &klu_solve;
+      break;
+    case CSR_MAT:
+      klu_data->sun_klu_solve = &klu_tsolve;
+      break;
+    default:
+      SparseDestroyMat(idasls_mem->s_JacMat);
+      free(klu_data);
+      free(idasls_mem);
+      return(IDASLS_ILL_INPUT);
+  }
+  klu_data->s_Symbolic = NULL;
+  klu_data->s_Numeric = NULL;
+
+  /* Set default parameters for KLU */
+  flag = klu_defaults(&klu_data->s_Common);
+  if (flag == 0) {
+    IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "IDAKLU", 
+                    MSGSP_PACKAGE_FAIL);
+    return(IDASLS_PACKAGE_FAIL);
+  }
+
+  /* Set ordering to COLAMD as the idas default use.
+     Users can set a different value with IDAKLUSetOrdering,
+     and the user-set value is loaded before any call to klu_analyze in
+     IDAKLUSetup.  */
+  klu_data->s_ordering = 1;
+  klu_data->s_Common.ordering = klu_data->s_ordering;
+
+  /* Attach linear solver memory to the integrator memory */
+  idasls_mem->s_solver_data = (void *) klu_data;
+  IDA_mem->ida_lmem = idasls_mem;
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+
+  return(IDASLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDAKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to IDAKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is IDASLS_SUCCESS = 0, IDASLS_MEM_NULL = -1, 
+ * IDASLS_LMEM_NULL = -2, IDASLS_ILL_INPUT = -3, or IDASLS_MEM_FAIL = -4.
+ * -----------------------------------------------------------------
+ */
+
+int IDAKLUReInit(void *ida_mem_v, int n, int nnz, int reinit_type)
+{
+  IDAMem ida_mem;
+  IDASlsMem idasls_mem;
+  KLUData klu_data;
+
+  /* Return immediately if ida_mem is NULL. */
+  if (ida_mem_v == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDAKLUReInit", 
+                    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  ida_mem = (IDAMem) ida_mem_v;
+
+  /* Return immediately if ark_lmem is NULL. */
+  if (ida_mem->ida_lmem == NULL) {
+    IDAProcessError(NULL, IDASLS_LMEM_NULL, "IDASLS", "IDAKLUReInit", 
+                    MSGSP_LMEM_NULL);
+    return(IDASLS_LMEM_NULL);
+  }
+
+  idasls_mem = (IDASlsMem) (ida_mem->ida_lmem);
+  klu_data = (KLUData) idasls_mem->s_solver_data;
+
+  /* Return if reinit_type is not valid */
+  if ((reinit_type != 1) && (reinit_type != 2)) {
+    IDAProcessError(NULL, IDASLS_ILL_INPUT, "IDASLS", "IDAKLUReInit", 
+                    MSGSP_ILL_INPUT);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  if (reinit_type == 1) {
+
+    /* Destroy previous Jacobian information */
+    if (idasls_mem->s_JacMat) {
+      SparseDestroyMat(idasls_mem->s_JacMat);
+    }
+
+    /* Allocate memory for the sparse Jacobian */
+    idasls_mem->s_JacMat = SparseNewMat(n, n, nnz, idasls_mem->sparsetype);
+    if (idasls_mem->s_JacMat == NULL) {
+      IDAProcessError(ida_mem, IDASLS_MEM_FAIL, "IDASLS", "IDAKLU", 
+                      MSGSP_MEM_FAIL);
+      return(IDASLS_MEM_FAIL);
+    }
+  }
+
+  /* Free the prior factorazation and reset for first factorization */
+  if( klu_data->s_Symbolic != NULL)
+    klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  if( klu_data->s_Numeric != NULL)
+    klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  idasls_mem->s_first_factorize = 1;
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDAKLU interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the IDAKLU
+  linear solver module.  
+  It returns 0 if successful.
+*/
+
+static int IDAKLUInit(IDAMem IDA_mem)
+{
+  IDASlsMem idasls_mem;
+
+  idasls_mem = (IDASlsMem)IDA_mem->ida_lmem;
+
+  idasls_mem->s_jacdata = IDA_mem->ida_user_data;
+
+  idasls_mem->s_nje = 0;
+  /* This forces a factorize every call to IDA */
+  idasls_mem->s_first_factorize = 1;
+
+  idasls_mem->s_last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the IDAKLU linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     IDASLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int IDAKLUSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+		       N_Vector rrp, N_Vector tmp1, N_Vector tmp2,
+		       N_Vector tmp3)
+{
+  int retval;
+  realtype tn, cj;
+  IDASlsMem idasls_mem;
+  IDASlsSparseJacFn jaceval;
+  KLUData klu_data;
+  SlsMat JacMat;
+  void *jacdata;
+  
+  realtype uround_twothirds;
+
+  uround_twothirds = SUNRpowerR(IDA_mem->ida_uround,TWOTHIRDS);
+
+  idasls_mem = (IDASlsMem) (IDA_mem->ida_lmem);
+  tn = IDA_mem->ida_tn; 
+  cj = IDA_mem->ida_cj;
+
+  klu_data = (KLUData) idasls_mem->s_solver_data;
+
+  jaceval = idasls_mem->s_jaceval;
+  jacdata = idasls_mem->s_jacdata;
+  JacMat = idasls_mem->s_JacMat;
+
+  /* Check that Jacobian eval routine is set */
+  if (jaceval == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_JAC_NOSET, "IDASLS", "IDAKLUSetup", 
+		    MSGSP_JAC_NOSET);
+    free(idasls_mem); idasls_mem = NULL;
+    return(IDASLS_JAC_NOSET);
+  }
+
+  /* Increment nje counter and call Jacobian eval routine. */
+  idasls_mem->s_nje++;
+  retval = jaceval(tn, cj, yyp, ypp, rrp, JacMat, jacdata, 
+		   tmp1, tmp2, tmp3);
+
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDASLS_JACFUNC_UNRECVR, "IDASLS", 
+		    "IDAKLUSetup", MSGSP_JACFUNC_FAILED);
+    idasls_mem->s_last_flag = IDASLS_JACFUNC_UNRECVR;
+    return(IDASLS_JACFUNC_UNRECVR);
+  }
+  if (retval > 0) {
+    idasls_mem->s_last_flag = IDASLS_JACFUNC_RECVR;
+    return(+1);
+  }
+
+  if (idasls_mem->s_first_factorize) {
+    /* ------------------------------------------------------------
+       Get the symbolic factorization
+       ------------------------------------------------------------*/ 
+    /* Update the ordering option with any user-updated values from 
+       calls to IDAKLUSetOrdering */
+    klu_data->s_Common.ordering = klu_data->s_ordering;
+
+     if (klu_data->s_Symbolic != NULL) {
+       klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+    }
+     klu_data->s_Symbolic = klu_analyze(JacMat->NP, JacMat->indexptrs, 
+				       JacMat->indexvals, &(klu_data->s_Common));
+     if (klu_data->s_Symbolic == NULL) {
+      IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "IDAKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(IDASLS_PACKAGE_FAIL);
+     }
+
+     /* ------------------------------------------------------------
+	Compute the LU factorization of  the Jacobian.
+       ------------------------------------------------------------*/
+     if( klu_data->s_Numeric != NULL) {
+       klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+     }
+     klu_data->s_Numeric = klu_factor(JacMat->indexptrs, JacMat->indexvals, JacMat->data, 
+				      klu_data->s_Symbolic, &(klu_data->s_Common));
+
+     if (klu_data->s_Numeric == NULL) {
+       IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "IDAKLUSetup", 
+		       MSGSP_PACKAGE_FAIL);
+       return(IDASLS_PACKAGE_FAIL);
+     }
+
+     idasls_mem->s_first_factorize = 0;
+  }
+  else {
+
+    retval = klu_refactor(JacMat->indexptrs, JacMat->indexvals, JacMat->data, 
+			  klu_data->s_Symbolic, klu_data->s_Numeric,
+			  &(klu_data->s_Common));
+    if (retval == 0) {
+      IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "idaKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(IDASLS_PACKAGE_FAIL);
+    }
+    
+    /*-----------------------------------------------------------
+      Check if a cheap estimate of the reciprocal of the condition 
+      number is getting too small.  If so, delete
+      the prior numeric factorization and recompute it.
+      -----------------------------------------------------------*/
+    
+    retval = klu_rcond(klu_data->s_Symbolic, klu_data->s_Numeric,
+		       &(klu_data->s_Common));
+    if (retval == 0) {
+      IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "idaKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(IDASLS_PACKAGE_FAIL);
+    }
+
+    if ( (klu_data->s_Common.rcond)  < uround_twothirds ) {
+      
+      /* Condition number may be getting large.  
+	 Compute more accurate estimate */
+      retval = klu_condest(JacMat->indexptrs, JacMat->data, 
+			   klu_data->s_Symbolic, klu_data->s_Numeric,
+			   &(klu_data->s_Common));
+      if (retval == 0) {
+	IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "idaKLUSetup", 
+			MSGSP_PACKAGE_FAIL);
+	return(IDASLS_PACKAGE_FAIL);
+      }
+      
+      if ( (klu_data->s_Common.condest) > 
+	   (1.0/uround_twothirds) ) {
+
+	/* More accurate estimate also says condition number is 
+	   large, so recompute the numeric factorization */
+
+	klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+	
+	klu_data->s_Numeric = klu_factor(JacMat->indexptrs, JacMat->indexvals, 
+					 JacMat->data, klu_data->s_Symbolic, 
+					 &(klu_data->s_Common));
+
+	if (klu_data->s_Numeric == NULL) {
+	  IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", 
+			  "IDAKLUSetup", MSGSP_PACKAGE_FAIL);
+	  return(IDASLS_PACKAGE_FAIL);
+	}
+      }
+    }
+  }
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the IDAKLU linear
+  solver module.  It calls the KLU solve routine, scales the
+  solution vector according to cjratio, then returns IDASLS_SUCCESS = 0.
+*/
+
+static int IDAKLUSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+		       N_Vector ycur, N_Vector ypcur, N_Vector rrcur)
+{
+  int flag;
+  realtype cjratio;
+  IDASlsMem idasls_mem;
+  KLUData klu_data;
+  SlsMat JacMat;
+  realtype *bd;
+  
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+  JacMat = idasls_mem->s_JacMat;
+  cjratio = IDA_mem->ida_cjratio;
+  klu_data = (KLUData) idasls_mem->s_solver_data;
+  bd = N_VGetArrayPointer(b);
+
+  /* Call KLU to solve the linear system */
+  flag = klu_data->sun_klu_solve(klu_data->s_Symbolic, klu_data->s_Numeric, JacMat->NP, 1, bd, 
+                                 &(klu_data->s_Common));
+  if (flag == 0) {
+    IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "IDAKLUSolve", 
+		    MSGSP_PACKAGE_FAIL);
+    return(IDASLS_PACKAGE_FAIL);
+  }
+
+  /* Scale the correction to account for change in cj. */
+  if (cjratio != ONE) N_VScale(TWO/(ONE + cjratio), b, b);
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+  return(IDASLS_SUCCESS);
+}
+
+/*
+  This routine frees memory specific to the IDAKLU linear solver.
+*/
+
+static int IDAKLUFree(IDAMem IDA_mem)
+{
+  IDASlsMem idasls_mem;
+  KLUData klu_data;
+  
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+  klu_data = (KLUData) idasls_mem->s_solver_data;
+
+  if( klu_data->s_Numeric != NULL)
+  {
+     klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  }
+  if( klu_data->s_Symbolic != NULL)
+  {
+     klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  }
+
+  if (idasls_mem->s_JacMat) {
+    SparseDestroyMat(idasls_mem->s_JacMat);
+    idasls_mem->s_JacMat = NULL;
+  }
+
+  free(klu_data); 
+  free(IDA_mem->ida_lmem); 
+
+  return(IDASLS_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * IDAKLUSetOrdering sets the ordering used by KLU for reducing fill.
+ * Options are: 0 for AMD, 1 for COLAMD, and 2 for the natural ordering.
+ * The default used in IDA is 1 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+int IDAKLUSetOrdering(void *ida_mem_v, int ordering_choice)
+{
+  IDAMem ida_mem;
+  IDASlsMem idasls_mem;
+  KLUData klu_data;
+
+ /* Return immediately if ida_mem is NULL */
+  if (ida_mem_v == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDAKLUSetOrdering",
+		    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  ida_mem = (IDAMem) ida_mem_v;
+
+ /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) ) {
+    IDAProcessError(NULL, IDASLS_ILL_INPUT, "IDASLS", "IDAKLUSetOrdering",
+		    MSGSP_ILL_INPUT);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  idasls_mem = (IDASlsMem) ida_mem->ida_lmem;
+  klu_data = (KLUData) idasls_mem->s_solver_data;
+
+  klu_data->s_ordering = ordering_choice;
+
+  return(IDASLS_SUCCESS);
+}
diff --git a/src/ida/ida_lapack.c b/src/ida/ida_lapack.c
new file mode 100644
index 0000000..bbe524f
--- /dev/null
+++ b/src/ida/ida_lapack.c
@@ -0,0 +1,570 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4951 $
+ * $Date: 2016-09-22 10:21:00 -0700 (Thu, 22 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a IDA dense linear solver
+ * using BLAS and LAPACK functions.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ida/ida_lapack.h>
+#include "ida_direct_impl.h"
+#include "ida_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PROTOTYPES FOR PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/* IDALAPACK DENSE linit, lsetup, lsolve, and lfree routines */ 
+static int idaLapackDenseInit(IDAMem IDA_mem);
+static int idaLapackDenseSetup(IDAMem IDA_mem,
+                               N_Vector yP, N_Vector ypP, N_Vector fctP, 
+                               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int idaLapackDenseSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                               N_Vector yC, N_Vector ypC, N_Vector fctC);
+static int idaLapackDenseFree(IDAMem IDA_mem);
+
+/* IDALAPACK BAND linit, lsetup, lsolve, and lfree routines */ 
+static int idaLapackBandInit(IDAMem IDA_mem);
+static int idaLapackBandSetup(IDAMem IDA_mem,
+                              N_Vector yP, N_Vector ypP, N_Vector fctP, 
+                              N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int idaLapackBandSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                              N_Vector yC, N_Vector ypC, N_Vector fctC);
+static int idaLapackBandFree(IDAMem IDA_mem);
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define res            (IDA_mem->ida_res)
+#define nst            (IDA_mem->ida_nst)
+#define tn             (IDA_mem->ida_tn)
+#define hh             (IDA_mem->ida_hh)
+#define cj             (IDA_mem->ida_cj)
+#define cjratio        (IDA_mem->ida_cjratio)
+#define ewt            (IDA_mem->ida_ewt)
+#define constraints    (IDA_mem->ida_constraints)
+
+#define linit          (IDA_mem->ida_linit)
+#define lsetup         (IDA_mem->ida_lsetup)
+#define lsolve         (IDA_mem->ida_lsolve)
+#define lfree          (IDA_mem->ida_lfree)
+#define lperf          (IDA_mem->ida_lperf)
+#define lmem           (IDA_mem->ida_lmem)
+#define tempv          (IDA_mem->ida_tempv1)
+#define setupNonNull   (IDA_mem->ida_setupNonNull)
+
+#define mtype          (idadls_mem->d_type)
+#define n              (idadls_mem->d_n)
+#define ml             (idadls_mem->d_ml)
+#define mu             (idadls_mem->d_mu)
+#define smu            (idadls_mem->d_smu)
+#define jacDQ          (idadls_mem->d_jacDQ)
+#define djac           (idadls_mem->d_djac)
+#define bjac           (idadls_mem->d_bjac)
+#define JJ             (idadls_mem->d_J)
+#define pivots         (idadls_mem->d_pivots)
+#define nje            (idadls_mem->d_nje)
+#define nreDQ          (idadls_mem->d_nreDQ)
+#define J_data         (idadls_mem->d_J_data)
+#define last_flag      (idadls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS FOR IMPLICIT INTEGRATION
+ * =================================================================
+ */
+              
+/*
+ * -----------------------------------------------------------------
+ * IDALapackDense
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the linear solver module.  IDALapackDense first
+ * calls the existing lfree routine if this is not NULL.  Then it sets
+ * the ida_linit, ida_lsetup, ida_lsolve, ida_lfree fields in (*ida_mem)
+ * to be idaLapackDenseInit, idaLapackDenseSetup, idaLapackDenseSolve, 
+ * and idaLapackDenseFree, respectively.  It allocates memory for a 
+ * structure of type IDADlsMemRec and sets the ida_lmem field in 
+ * (*ida_mem) to the address of this structure.  It sets setupNonNull 
+ * in (*ida_mem) to TRUE, and the d_jac field to the default 
+ * idaLapackDenseDQJac. Finally, it allocates memory for M, pivots.
+ *
+ * The return value is SUCCESS = 0, or LMEM_FAIL = -1.
+ *
+ * NOTE: The dense linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDALapackDense will first 
+ *       test for a compatible N_Vector internal representation 
+ *       by checking that N_VGetArrayPointer and N_VSetArrayPointer 
+ *       exist.
+ * -----------------------------------------------------------------
+ */
+int IDALapackDense(void *ida_mem, int N)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDALAPACK", "IDALapackDense", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the LAPACK solver */
+  if (tempv->ops->nvgetarraypointer == NULL ||
+      tempv->ops->nvsetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDALAPACK", "IDALapackDense", MSGD_BAD_NVECTOR);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  if (lfree !=NULL) lfree(IDA_mem);
+
+  /* Set four main function fields in IDA_mem */
+  linit  = idaLapackDenseInit;
+  lsetup = idaLapackDenseSetup;
+  lsolve = idaLapackDenseSolve;
+  lperf  = NULL;
+  lfree  = idaLapackDenseFree;
+
+  /* Get memory for IDADlsMemRec */
+  idadls_mem = NULL;
+  idadls_mem = (IDADlsMem) malloc(sizeof(struct IDADlsMemRec));
+  if (idadls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDALAPACK", "IDALapackDense", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_DENSE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ  = TRUE;
+  djac   = NULL;
+  J_data = NULL;
+
+  last_flag = IDADLS_SUCCESS;
+  setupNonNull = TRUE;
+
+  /* Set problem dimension */
+  n = (long int) N;
+
+  /* Allocate memory for JJ and pivot array */
+  JJ = NULL;
+  pivots = NULL;
+
+  JJ = NewDenseMat(n, n);
+  if (JJ == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDALAPACK", "IDALapackDense", MSGD_MEM_FAIL);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+  pivots = NewIntArray(N);
+  if (pivots == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDALAPACK", "IDALapackDense", MSGD_MEM_FAIL);
+    DestroyMat(JJ);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = idadls_mem;
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDALapackBand
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the band linear solver module. It first calls
+ * the existing lfree routine if this is not NULL.  It then sets the
+ * ida_linit, ida_lsetup, ida_lsolve, and ida_lfree fields in (*ida_mem)
+ * to be idaLapackBandInit, idaLapackBandSetup, idaLapackBandSolve, 
+ * and idaLapackBandFree, respectively.  It allocates memory for a 
+ * structure of type IDALapackBandMemRec and sets the ida_lmem field in 
+ * (*ida_mem) to the address of this structure.  It sets setupNonNull 
+ * in (*ida_mem) to be TRUE, mu to be mupper, ml to be mlower, and 
+ * the jacE and jacI field to NULL.
+ * Finally, it allocates memory for M and pivots.
+ * The IDALapackBand return value is IDADLS_SUCCESS = 0, 
+ * IDADLS_MEM_FAIL = -1, or IDADLS_ILL_INPUT = -2.
+ *
+ * NOTE: The IDALAPACK linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDALapackBand will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that the function 
+ *       N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */                  
+int IDALapackBand(void *ida_mem, int N, int mupper, int mlower)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDALAPACK", "IDALapackBand", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (tempv->ops->nvgetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDALAPACK", "IDALapackBand", MSGD_BAD_NVECTOR);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(IDA_mem);
+
+  /* Set four main function fields in IDA_mem */  
+  linit  = idaLapackBandInit;
+  lsetup = idaLapackBandSetup;
+  lsolve = idaLapackBandSolve;
+  lperf  = NULL;
+  lfree  = idaLapackBandFree;
+  
+  /* Get memory for IDADlsMemRec */
+  idadls_mem = NULL;
+  idadls_mem = (IDADlsMem) malloc(sizeof(struct IDADlsMemRec));
+  if (idadls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDALAPACK", "IDALapackBand", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_BAND;
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ  = TRUE;
+  bjac   = NULL;
+  J_data = NULL;
+
+  last_flag = IDADLS_SUCCESS;
+
+  idaDlsInitializeCounters(idadls_mem);
+
+  setupNonNull = TRUE;
+  
+  /* Load problem dimension */
+  n = (long int) N;
+
+  /* Load half-bandwiths in idadls_mem */
+  ml = (long int) mlower;
+  mu = (long int) mupper;
+
+  /* Test ml and mu for legality */
+  if ((ml < 0) || (mu < 0) || (ml >= n) || (mu >= n)) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDALAPACK", "IDALapackBand", MSGD_BAD_SIZES);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  smu = mu + ml;
+
+  /* Allocate memory for JJ and pivot arrays */
+  JJ = NULL;
+  pivots = NULL;
+
+  JJ = NewBandMat(n, mu, ml, smu);
+  if (JJ == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDALAPACK", "IDALapackBand", MSGD_MEM_FAIL);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }  
+  pivots = NewIntArray(N);
+  if (pivots == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDALAPACK", "IDALapackBand", MSGD_MEM_FAIL);
+    DestroyMat(JJ);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = idadls_mem;
+
+  return(IDADLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH DENSE JACOBIANS
+ * =================================================================
+ */
+
+/*
+ * idaLapackDenseInit does remaining initializations specific to the dense
+ * linear solver.
+ */
+static int idaLapackDenseInit(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  idaDlsInitializeCounters(idadls_mem);
+  
+  /*
+     nje   = 0;
+     nreDQ = 0;
+  */
+
+  if (jacDQ) {
+    djac = idaDlsDenseDQJac;
+    J_data = IDA_mem;
+  } else {
+    J_data = IDA_mem->ida_user_data;
+  }
+
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * idaLapackDenseSetup does the setup operations for the dense linear solver. 
+ * It calls the Jacobian function to obtain the Newton matrix M = F_y + c_j*F_y', 
+ * updates counters, and calls the dense LU factorization routine.
+ */
+static int idaLapackDenseSetup(IDAMem IDA_mem,
+                               N_Vector yP, N_Vector ypP, N_Vector fctP,
+                               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  IDADlsMem idadls_mem;
+  int ier, retval;
+  int intn;
+
+  idadls_mem = (IDADlsMem) lmem;
+  intn = (int) n;
+
+  /* Call Jacobian function */
+  nje++;
+  SetToZero(JJ);
+  retval = djac(n, tn, cj, yP, ypP, fctP, JJ, J_data, tmp1, tmp2, tmp3);
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDADLS_JACFUNC_UNRECVR, "IDALAPACK", "idaLapackDenseSetup", MSGD_JACFUNC_FAILED);
+    last_flag = IDADLS_JACFUNC_UNRECVR;
+    return(-1);
+  } else if (retval > 0) {
+    last_flag = IDADLS_JACFUNC_RECVR;
+    return(1);
+  }
+  
+  /* Do LU factorization of M */
+  dgetrf_f77(&intn, &intn, JJ->data, &intn, pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+/*
+ * idaLapackDenseSolve handles the solve operation for the dense linear solver
+ * by calling the dense backsolve routine.
+ */
+static int idaLapackDenseSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                               N_Vector yC, N_Vector ypC, N_Vector fctC)
+{
+  IDADlsMem idadls_mem;
+  realtype *bd, fact;
+  int ier, one = 1;
+  int intn;
+
+  idadls_mem = (IDADlsMem) lmem;
+  intn = (int) n;
+
+  bd = N_VGetArrayPointer(b);
+
+  dgetrs_f77("N", &intn, &one, JJ->data, &intn, pivots, bd, &intn, &ier, 1); 
+  if (ier > 0) return(1);
+
+  /* Scale the correction to account for change in cj. */
+  if (cjratio != ONE) {
+    fact = TWO/(ONE + cjratio);
+    dscal_f77(&intn, &fact, bd, &one); 
+  }
+
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * idaLapackDenseFree frees memory specific to the dense linear solver.
+ */
+static int idaLapackDenseFree(IDAMem IDA_mem)
+{
+  IDADlsMem  idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  DestroyMat(JJ);
+  DestroyArray(pivots);
+  free(idadls_mem); 
+  idadls_mem = NULL;
+
+  return(0);
+}
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH BAND JACOBIANS
+ * =================================================================
+ */
+
+/*
+ * idaLapackBandInit does remaining initializations specific to the band
+ * linear solver.
+ */
+static int idaLapackBandInit(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+
+  nje   = 0;
+  nreDQ = 0;
+
+  if (jacDQ) {
+    bjac = idaDlsBandDQJac;
+    J_data = IDA_mem;
+  } else {
+    J_data = IDA_mem->ida_user_data;
+  }
+
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * idaLapackBandSetup does the setup operations for the band linear solver.
+ * It calls the Jacobian function to obtain the Newton matrix M = F_y + c_j*F_y', 
+ * updates counters, and calls the band LU factorization routine.
+ */
+static int idaLapackBandSetup(IDAMem IDA_mem,
+                              N_Vector yP, N_Vector ypP, N_Vector fctP, 
+                              N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  IDADlsMem idadls_mem;
+  int ier, retval;
+  int intn, iml, imu, ldmat;
+
+  idadls_mem = (IDADlsMem) lmem;
+  intn = (int) n;
+  iml = (int) ml;
+  imu = (int) mu;
+  ldmat = JJ->ldim;
+
+  /* Call Jacobian function */
+  nje++;
+  SetToZero(JJ);
+  retval = bjac(n, mu, ml, tn, cj, yP, ypP, fctP, JJ, J_data, tmp1, tmp2, tmp3);
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDADLS_JACFUNC_UNRECVR, "IDALAPACK", "idaLapackBandSetup", MSGD_JACFUNC_FAILED);
+    last_flag = IDADLS_JACFUNC_UNRECVR;
+    return(-1);
+  } else if (retval > 0) {
+    last_flag = IDADLS_JACFUNC_RECVR;
+    return(+1);
+  }
+  
+  /* Do LU factorization of M */
+  dgbtrf_f77(&intn, &intn, &iml, &imu, JJ->data, &ldmat, pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+
+}
+
+/*
+ * idaLapackBandSolve handles the solve operation for the band linear solver
+ * by calling the band backsolve routine.
+ */
+static int idaLapackBandSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                              N_Vector yC, N_Vector ypC, N_Vector fctC)
+{
+  IDADlsMem idadls_mem;
+  realtype *bd, fact;
+  int ier, one = 1;
+  int intn, iml, imu, ldmat;
+
+  idadls_mem = (IDADlsMem) lmem;
+  intn = (int) n;
+  iml = (int) ml;
+  imu = (int) mu;
+  ldmat = JJ->ldim;
+
+  bd = N_VGetArrayPointer(b);
+
+  dgbtrs_f77("N", &intn, &iml, &imu, &one, JJ->data, &ldmat, pivots, bd, &intn, &ier, 1);
+  if (ier > 0) return(1);
+
+  /* For BDF, scale the correction to account for change in cj */
+  if (cjratio != ONE) {
+    fact = TWO/(ONE + cjratio);
+    dscal_f77(&intn, &fact, bd, &one); 
+  }
+
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * idaLapackBandFree frees memory specific to the band linear solver.
+ */
+static int idaLapackBandFree(IDAMem IDA_mem)
+{
+  IDADlsMem  idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  DestroyMat(JJ);
+  DestroyArray(pivots);
+  free(idadls_mem); 
+  idadls_mem = NULL;
+
+  return(0);
+}
+
diff --git a/src/ida/ida_sparse.c b/src/ida/ida_sparse.c
new file mode 100644
index 0000000..c683f78
--- /dev/null
+++ b/src/ida/ida_sparse.c
@@ -0,0 +1,175 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for an IDASLS linear solver.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "ida_impl.h"
+#include "ida_sparse_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS FOR IMPLICIT INTEGRATION
+ * =================================================================
+ */
+              
+/*
+ * IDASlsSetSparseJacFn specifies the sparse Jacobian function.
+ */
+int IDASlsSetSparseJacFn(void *ida_mem, IDASlsSparseJacFn jac)
+{
+  IDAMem IDA_mem;
+  IDASlsMem idasls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDASlsSetSparseJacFn", 
+		    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_LMEM_NULL, "IDASLS", 
+		    "IDASlsSetSparseJacFn", MSGSP_LMEM_NULL);
+    return(IDASLS_LMEM_NULL);
+  }
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+
+  idasls_mem->s_jaceval = jac;
+
+  return(IDASLS_SUCCESS);
+}
+
+/*
+ * IDASlsGetNumJacEvals returns the number of Jacobian evaluations.
+ */
+int IDASlsGetNumJacEvals(void *ida_mem, long int *njevals)
+{
+  IDAMem IDA_mem;
+  IDASlsMem idasls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDASlsGetNumJacEvals", MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_LMEM_NULL, "IDASLS", 
+		    "IDASlsGetNumJacEvals", MSGSP_LMEM_NULL);
+    return(IDASLS_LMEM_NULL);
+  }
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+
+  *njevals = idasls_mem->s_nje;
+
+  return(IDASLS_SUCCESS);
+}
+
+/*
+ * IDASlsGetReturnFlagName returns the name associated with a IDASLS
+ * return value.
+ */
+char *IDASlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case IDASLS_SUCCESS:
+    sprintf(name,"IDASLS_SUCCESS");
+    break;   
+  case IDASLS_MEM_NULL:
+    sprintf(name,"IDASLS_MEM_NULL");
+    break;
+  case IDASLS_LMEM_NULL:
+    sprintf(name,"IDASLS_LMEM_NULL");
+    break;
+  case IDASLS_ILL_INPUT:
+    sprintf(name,"IDASLS_ILL_INPUT");
+    break;
+  case IDASLS_MEM_FAIL:
+    sprintf(name,"IDASLS_MEM_FAIL");
+    break;
+  case IDASLS_JAC_NOSET:
+    sprintf(name,"IDASLS_JAC_NOSET");
+    break;
+  case IDASLS_JACFUNC_UNRECVR:
+    sprintf(name,"IDASLS_JACFUNC_UNRECVR");
+    break;
+  case IDASLS_JACFUNC_RECVR:
+    sprintf(name,"IDASLS_JACFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * IDASlsGetLastFlag returns the last flag set in a IDASLS function.
+ */
+int IDASlsGetLastFlag(void *ida_mem, long int *flag)
+{
+  IDAMem IDA_mem;
+  IDASlsMem idasls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDASlsGetLastFlag", 
+		    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_LMEM_NULL, "IDASLS", 
+		    "IDASlsGetLastFlag", MSGSP_LMEM_NULL);
+    return(IDASLS_LMEM_NULL);
+  }
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+
+  *flag = idasls_mem->s_last_flag;
+
+  return(IDASLS_SUCCESS);
+}
+
diff --git a/src/ida/ida_sparse_impl.h b/src/ida/ida_sparse_impl.h
new file mode 100644
index 0000000..65d34b0
--- /dev/null
+++ b/src/ida/ida_sparse_impl.h
@@ -0,0 +1,127 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the IDASLS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASPARSE_IMPL_H
+#define _IDASPARSE_IMPL_H
+
+#include "ida/ida_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * I D A S S P A R S E    I N T E R N A L    C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * =================================================================
+ * PART I:  F O R W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDASlsMemRec, IDASlsMem                             
+ * -----------------------------------------------------------------
+ * IDASlsMem is pointer to a IDASlsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDASlsMemRec {
+
+  IDASlsSparseJacFn s_jaceval; /* user Jacobian evaluation routine 
+                                  to be called */
+  void *s_jacdata;           /* J_data is passed to djac or bjac */
+
+  long int s_nje;           /* nje = no. of calls to jac */
+
+  long int s_last_flag;     /* last error return flag */
+
+  int s_first_factorize;    /* flag telling whether the first 
+                               factorization needs to happen */
+  SlsMat s_JacMat;          /* J = dF/dy + cj*dF/dy' */
+  
+  int sparsetype;           /* matrix type: compressed sparse column or row */
+
+  void *s_solver_data;      /* structure for solver-specific data */
+  
+
+} *IDASlsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+  
+
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDASlsMemRecB, IDASlsMemB       
+ * -----------------------------------------------------------------
+ * An IDASLS linear solver's specification function attaches such
+ * a structure to the lmemB filed of IDABMem
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDASlsMemRecB {
+
+  IDASlsSparseJacFnB s_djacB;
+  IDASlsSparseJacFnBS s_djacBS;
+
+} *IDASlsMemB;
+
+
+/*
+ * =================================================================
+ * E R R O R   M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGSP_IDAMEM_NULL "Integrator memory is NULL."
+#define MSGSP_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGSP_MEM_FAIL "A memory request failed."
+#define MSGSP_LMEM_NULL "Linear solver memory is NULL."
+#define MSGSP_ILL_INPUT "Invalid input detected."
+#define MSGSP_JAC_NOSET "Jacobian evaluation function has not been set."
+#define MSGSP_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+#define MSGSP_PACKAGE_FAIL "A call to an external package failed."
+
+#define MSGSP_CAMEM_NULL "idaadj_mem = NULL illegal."
+#define MSGSP_LMEMB_NULL "Linear solver memory is NULL for the backward integration."
+#define MSGSP_BAD_T "Bad t for interpolation."
+#define MSGSP_BAD_WHICH "Illegal value for which."
+#define MSGSP_NO_ADJ "Illegal attempt to call before calling IDAAdjInit."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/ida/ida_spbcgs.c b/src/ida/ida_spbcgs.c
new file mode 100644
index 0000000..a795f89
--- /dev/null
+++ b/src/ida/ida_spbcgs.c
@@ -0,0 +1,482 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4829 $
+ * $Date: 2016-07-27 16:01:15 -0700 (Wed, 27 Jul 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDA scaled preconditioned
+ * Bi-CGSTAB linear solver module, IDASPBCG.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ida/ida_spbcgs.h>
+#include "ida_spils_impl.h"
+#include "ida_impl.h"
+
+#include <sundials/sundials_spbcgs.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define PT9  RCONST(0.9)
+#define PT05 RCONST(0.05)
+
+/* IDASPBCG linit, lsetup, lsolve, lperf, and lfree routines */
+
+static int IDASpbcgInit(IDAMem IDA_mem);
+
+static int IDASpbcgSetup(IDAMem IDA_mem, 
+                         N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+                         N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int IDASpbcgSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+                         N_Vector yy_now, N_Vector yp_now, N_Vector rr_now);
+
+static int IDASpbcgPerf(IDAMem IDA_mem, int perftask);
+
+static int IDASpbcgFree(IDAMem IDA_mem);
+
+
+/* Readability Replacements */
+
+#define nst          (IDA_mem->ida_nst)
+#define tn           (IDA_mem->ida_tn)
+#define cj           (IDA_mem->ida_cj)
+#define epsNewt      (IDA_mem->ida_epsNewt)
+#define res          (IDA_mem->ida_res)
+#define user_data    (IDA_mem->ida_user_data)
+#define ewt          (IDA_mem->ida_ewt)
+#define errfp        (IDA_mem->ida_errfp)
+#define linit        (IDA_mem->ida_linit)
+#define lsetup       (IDA_mem->ida_lsetup)
+#define lsolve       (IDA_mem->ida_lsolve)
+#define lperf        (IDA_mem->ida_lperf)
+#define lfree        (IDA_mem->ida_lfree)
+#define lmem         (IDA_mem->ida_lmem)
+#define nni          (IDA_mem->ida_nni)
+#define ncfn         (IDA_mem->ida_ncfn)
+#define setupNonNull (IDA_mem->ida_setupNonNull)
+#define vec_tmpl     (IDA_mem->ida_tempv1)
+
+#define sqrtN     (idaspils_mem->s_sqrtN)
+#define epslin    (idaspils_mem->s_epslin)
+#define ytemp     (idaspils_mem->s_ytemp)
+#define yptemp    (idaspils_mem->s_yptemp)
+#define xx        (idaspils_mem->s_xx)
+#define ycur      (idaspils_mem->s_ycur)
+#define ypcur     (idaspils_mem->s_ypcur)
+#define rcur      (idaspils_mem->s_rcur)
+#define npe       (idaspils_mem->s_npe)
+#define nli       (idaspils_mem->s_nli)
+#define nps       (idaspils_mem->s_nps)
+#define ncfl      (idaspils_mem->s_ncfl)
+#define nst0      (idaspils_mem->s_nst0)
+#define nni0      (idaspils_mem->s_nni0)
+#define nli0      (idaspils_mem->s_nli0)
+#define ncfn0     (idaspils_mem->s_ncfn0)
+#define ncfl0     (idaspils_mem->s_ncfl0)
+#define nwarn     (idaspils_mem->s_nwarn)
+#define njtimes   (idaspils_mem->s_njtimes)
+#define nres      (idaspils_mem->s_nres)
+#define spils_mem (idaspils_mem->s_spils_mem)
+
+#define jtimesDQ  (idaspils_mem->s_jtimesDQ)
+#define jtimes    (idaspils_mem->s_jtimes)
+#define jdata     (idaspils_mem->s_jdata)
+
+#define last_flag (idaspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASpbcg
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDASPBCG linear solver module.
+ *
+ * IDASpbcg first calls the existing lfree routine if this is not NULL.
+ * It then sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDASpbcgInit, IDASpbcgSetup,
+ * IDASpbcgSolve, IDASpbcgPerf, and IDASpbcgFree, respectively.
+ * It allocates memory for a structure of type IDASpilsMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem). It then sets various fields
+ * in the IDASpilsMemRec structure. Finally, IDASpbcg allocates memory
+ * for ytemp, yptemp, and xx, and calls SpbcgMalloc to allocate memory
+ * for the Spbcg solver.
+ *
+ * The return value of IDASpbcg is:
+ *   IDASPILS_SUCCESS   =  0 if successful
+ *   IDASPILS_MEM_FAIL  = -1 if IDA_mem is NULL or a memory
+ *                           allocation failed
+ *   IDASPILS_ILL_INPUT = -2 if a required vector operation is not
+ *                           implemented.
+ * -----------------------------------------------------------------
+ */
+
+int IDASpbcg(void *ida_mem, int maxl)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  SpbcgMem spbcg_mem;
+  int maxl1;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPBCG", "IDASpbcg", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if N_VDotProd is present */
+  if (vec_tmpl->ops->nvdotprod == NULL) {
+    IDAProcessError(NULL, IDASPILS_ILL_INPUT, "IDASPBCG", "IDASpbcg", MSGS_BAD_NVECTOR);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree((IDAMem) ida_mem);
+
+  /* Set five main function fields in ida_mem */
+  linit  = IDASpbcgInit;
+  lsetup = IDASpbcgSetup;
+  lsolve = IDASpbcgSolve;
+  lperf  = IDASpbcgPerf;
+  lfree  = IDASpbcgFree;
+
+  /* Get memory for IDASpilsMemRec */
+  idaspils_mem = NULL;
+  idaspils_mem = (IDASpilsMem) malloc(sizeof(struct IDASpilsMemRec));
+  if (idaspils_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcg", MSGS_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  idaspils_mem->s_type = SPILS_SPBCG;
+
+  /* Set SPBCG parameters that were passed in call sequence */
+  maxl1 = (maxl <= 0) ? IDA_SPILS_MAXL : maxl;
+  idaspils_mem->s_maxl = maxl1;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  jdata    = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  idaspils_mem->s_pset   = NULL;
+  idaspils_mem->s_psolve = NULL;
+  idaspils_mem->s_pfree  = NULL;
+  idaspils_mem->s_pdata  = IDA_mem->ida_user_data;
+
+  /* Set default values for the rest of the Spbcg parameters */
+  idaspils_mem->s_eplifac   = PT05;
+  idaspils_mem->s_dqincfac  = ONE;
+
+  idaspils_mem->s_last_flag = IDASPILS_SUCCESS;
+
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to FALSE */
+  setupNonNull = FALSE;
+
+  /* Allocate memory for ytemp, yptemp, and xx */
+
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcg", MSGS_MEM_FAIL);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  yptemp = N_VClone(vec_tmpl);
+  if (yptemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  xx = N_VClone(vec_tmpl);
+  if (xx == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt(N_VDotProd(ytemp, ytemp));
+
+  /* Call SpbcgMalloc to allocate workspace for Spbcg */
+  spbcg_mem = NULL;
+  spbcg_mem = SpbcgMalloc(maxl1, vec_tmpl);
+  if (spbcg_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    N_VDestroy(xx);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Attach SPBCG memory to spils memory structure */
+  spils_mem = (void *)spbcg_mem;
+
+  /* Attach linear solver memory to the integrator memory */
+  lmem = idaspils_mem;
+
+  return(IDASPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASPBCG interface routines
+ * -----------------------------------------------------------------
+ */
+
+/* Additional readability Replacements */
+
+#define maxl     (idaspils_mem->s_maxl)
+#define eplifac  (idaspils_mem->s_eplifac)
+#define psolve   (idaspils_mem->s_psolve)
+#define pset     (idaspils_mem->s_pset)
+#define pdata    (idaspils_mem->s_pdata)
+
+static int IDASpbcgInit(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  SpbcgMem spbcg_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+  spbcg_mem = (SpbcgMem) spils_mem;
+
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to TRUE iff there is preconditioning with setup */
+  setupNonNull = (psolve != NULL) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = IDASpilsDQJtimes;
+    jdata = IDA_mem;
+  } else {
+    jdata = user_data;
+  }
+
+  /*  Set maxl in the SPBCG memory in case it was changed by the user */
+  spbcg_mem->l_max  = maxl;
+
+  last_flag = IDASPILS_SUCCESS;
+
+  return(0);
+}
+
+static int IDASpbcgSetup(IDAMem IDA_mem, 
+                         N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+                         N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int retval;
+  IDASpilsMem idaspils_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Call user setup routine pset and update counter npe */
+  retval = pset(tn, yy_p, yp_p, rr_p, cj, pdata,
+                tmp1, tmp2, tmp3);
+  npe++;
+
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, SPBCG_PSET_FAIL_UNREC, "IDASPBCG", "IDASpbcgSetup", MSGS_PSET_FAILED);
+    last_flag = SPBCG_PSET_FAIL_UNREC;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = SPBCG_PSET_FAIL_REC;
+    return(+1);
+  }
+
+  last_flag = SPBCG_SUCCESS;
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASpbcgSolve
+ * -----------------------------------------------------------------
+ * Note: The x-scaling and b-scaling arrays are both equal to weight.
+ *
+ * We set the initial guess, x = 0, then call SpbcgSolve.
+ * We copy the solution x into b, and update the counters nli, nps,
+ * and ncfl. If SpbcgSolve returned nli_inc = 0 (hence x = 0), we
+ * take the SPBCG vtemp vector (= P_inverse F) as the correction
+ * vector instead. Finally, we set the return value according to the
+ * success of SpbcgSolve.
+ * -----------------------------------------------------------------
+ */
+
+static int IDASpbcgSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+                         N_Vector yy_now, N_Vector yp_now, N_Vector rr_now)
+{
+  IDASpilsMem idaspils_mem;
+  SpbcgMem spbcg_mem;
+  int pretype, nli_inc, nps_inc, retval;
+  realtype res_norm;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  spbcg_mem = (SpbcgMem)spils_mem;
+
+  /* Set SpbcgSolve convergence test constant epslin, in terms of the
+     Newton convergence test constant epsNewt and safety factors. The factor
+     sqrt(Neq) assures that the Bi-CGSTAB convergence test is applied to the
+     WRMS norm of the residual vector, rather than the weighted L2 norm. */
+  epslin = sqrtN*eplifac*epsNewt;
+
+  /* Set vectors ycur, ypcur, and rcur for use by the Atimes and Psolve */
+  ycur = yy_now;
+  ypcur = yp_now;
+  rcur = rr_now;
+
+  /* Set SpbcgSolve inputs pretype and initial guess xx = 0 */  
+  pretype = (psolve == NULL) ? PREC_NONE : PREC_LEFT;
+  N_VConst(ZERO, xx);
+  
+  /* Call SpbcgSolve and copy xx to bb */
+  retval = SpbcgSolve(spbcg_mem, IDA_mem, xx, bb, pretype, epslin,
+                      IDA_mem, weight, weight, IDASpilsAtimes,
+                      IDASpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+
+  if (nli_inc == 0) N_VScale(ONE, SPBCG_VTEMP(spbcg_mem), bb);
+  else N_VScale(ONE, xx, bb);
+  
+  /* Increment counters nli, nps, and return if successful */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPBCG_SUCCESS) ncfl++;
+
+  /* Interpret return value from SpbcgSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPBCG_SUCCESS:
+    return(0);
+    break;
+  case SPBCG_RES_REDUCED:
+    return(1);
+    break;
+  case SPBCG_CONV_FAIL:
+    return(1);
+    break;
+  case SPBCG_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_MEM_NULL:
+    return(-1);
+    break;
+  case SPBCG_ATIMES_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPBCG_ATIMES_FAIL_UNREC, "IDaSPBCG", "IDASpbcgSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPBCG_PSOLVE_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPBCG_PSOLVE_FAIL_UNREC, "IDASPBCG", "IDASpbcgSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASpbcgPerf
+ * -----------------------------------------------------------------
+ * This routine handles performance monitoring specific to the
+ * IDASPBCG linear solver. When perftask = 0, it saves values of
+ * various counters. When perftask = 1, it examines difference
+ * quotients in these counters, and depending on their values, it
+ * prints up to three warning messages. Messages are printed up to
+ * a maximum of 10 times.
+ * -----------------------------------------------------------------
+ */
+
+static int IDASpbcgPerf(IDAMem IDA_mem, int perftask)
+{
+  IDASpilsMem idaspils_mem;
+  realtype avdim, rcfn, rcfl;
+  long int nstd, nnid;
+  booleantype lavd, lcfn, lcfl;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (perftask == 0) {
+    nst0 = nst;  nni0 = nni;  nli0 = nli;
+    ncfn0 = ncfn;  ncfl0 = ncfl;  
+    nwarn = 0;
+    return(0);
+  }
+
+  nstd = nst - nst0;  nnid = nni - nni0;
+  if (nstd == 0 || nnid == 0) return(0);
+  avdim = (realtype) ((nli - nli0)/((realtype) nnid));
+  rcfn = (realtype) ((ncfn - ncfn0)/((realtype) nstd));
+  rcfl = (realtype) ((ncfl - ncfl0)/((realtype) nnid));
+  lavd = (avdim > ((realtype) maxl));
+  lcfn = (rcfn > PT9);
+  lcfl = (rcfl > PT9);
+  if (!(lavd || lcfn || lcfl)) return(0);
+  nwarn++;
+  if (nwarn > 10) return(1);
+  if (lavd) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPBCG", "IDASpbcgPerf", MSGS_AVD_WARN, tn, avdim);
+  if (lcfn) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPBCG", "IDASpbcgPerf", MSGS_CFN_WARN, tn, rcfn);
+  if (lcfl) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPBCG", "IDASpbcgPerf", MSGS_CFL_WARN, tn, rcfl);
+
+  return(0);
+}
+
+static int IDASpbcgFree(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  SpbcgMem spbcg_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  N_VDestroy(ytemp);
+  N_VDestroy(yptemp);
+  N_VDestroy(xx);
+
+  spbcg_mem = (SpbcgMem)spils_mem;
+  SpbcgFree(spbcg_mem);
+
+  if (idaspils_mem->s_pfree != NULL) (idaspils_mem->s_pfree)(IDA_mem);
+
+  free(idaspils_mem); idaspils_mem = NULL;
+
+  return(0);
+}
diff --git a/src/ida/ida_spgmr.c b/src/ida/ida_spgmr.c
new file mode 100644
index 0000000..e380ddf
--- /dev/null
+++ b/src/ida/ida_spgmr.c
@@ -0,0 +1,482 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4829 $
+ * $Date: 2016-07-27 16:01:15 -0700 (Wed, 27 Jul 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Alan C. Hindmarsh, and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDA Scaled              
+ * Preconditioned GMRES linear solver module, IDASPGMR.            
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ida/ida_spgmr.h>
+#include "ida_spils_impl.h"
+#include "ida_impl.h"
+
+#include <sundials/sundials_spgmr.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define PT9          RCONST(0.9)
+#define PT05         RCONST(0.05)
+
+/* IDASPGMR linit, lsetup, lsolve, lperf, and lfree routines */
+
+static int IDASpgmrInit(IDAMem IDA_mem);
+
+static int IDASpgmrSetup(IDAMem IDA_mem, 
+                         N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+                         N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int IDASpgmrSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+                         N_Vector yy_now, N_Vector yp_now, N_Vector rr_now);
+
+static int IDASpgmrPerf(IDAMem IDA_mem, int perftask);
+
+static int IDASpgmrFree(IDAMem IDA_mem);
+
+
+/* Readability Replacements */
+
+#define nst          (IDA_mem->ida_nst)
+#define tn           (IDA_mem->ida_tn)
+#define cj           (IDA_mem->ida_cj)
+#define epsNewt      (IDA_mem->ida_epsNewt)
+#define res          (IDA_mem->ida_res)
+#define user_data    (IDA_mem->ida_user_data)
+#define ewt          (IDA_mem->ida_ewt)
+#define errfp        (IDA_mem->ida_errfp)
+#define linit        (IDA_mem->ida_linit)
+#define lsetup       (IDA_mem->ida_lsetup)
+#define lsolve       (IDA_mem->ida_lsolve)
+#define lperf        (IDA_mem->ida_lperf)
+#define lfree        (IDA_mem->ida_lfree)
+#define lmem         (IDA_mem->ida_lmem)
+#define nni          (IDA_mem->ida_nni)
+#define ncfn         (IDA_mem->ida_ncfn)
+#define setupNonNull (IDA_mem->ida_setupNonNull)
+#define vec_tmpl     (IDA_mem->ida_tempv1)
+
+#define sqrtN     (idaspils_mem->s_sqrtN)
+#define epslin    (idaspils_mem->s_epslin)
+#define ytemp     (idaspils_mem->s_ytemp)
+#define yptemp    (idaspils_mem->s_yptemp)
+#define xx        (idaspils_mem->s_xx)
+#define ycur      (idaspils_mem->s_ycur)
+#define ypcur     (idaspils_mem->s_ypcur)
+#define rcur      (idaspils_mem->s_rcur)
+#define npe       (idaspils_mem->s_npe)
+#define nli       (idaspils_mem->s_nli)
+#define nps       (idaspils_mem->s_nps)
+#define ncfl      (idaspils_mem->s_ncfl)
+#define nst0      (idaspils_mem->s_nst0)
+#define nni0      (idaspils_mem->s_nni0)
+#define nli0      (idaspils_mem->s_nli0)
+#define ncfn0     (idaspils_mem->s_ncfn0)
+#define ncfl0     (idaspils_mem->s_ncfl0)
+#define nwarn     (idaspils_mem->s_nwarn)
+#define njtimes   (idaspils_mem->s_njtimes)
+#define nres      (idaspils_mem->s_nres)
+#define spils_mem (idaspils_mem->s_spils_mem)
+
+#define jtimesDQ  (idaspils_mem->s_jtimesDQ)
+#define jtimes    (idaspils_mem->s_jtimes)
+#define jdata     (idaspils_mem->s_jdata)
+
+#define last_flag (idaspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * IDASpgmr
+ * -----------------------------------------------------------------
+ *
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDASPGMR linear solver module.  
+ *
+ * IDASpgmr first calls the existing lfree routine if this is not NULL.
+ * It then sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDASpgmrInit, IDASpgmrSetup,
+ * IDASpgmrSolve, IDASpgmrPerf, and IDASpgmrFree, respectively.
+ * It allocates memory for a structure of type IDASpilsMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem).  It then various fields in the
+ * IDASpilsMemRec structure. Finally, IDASpgmr allocates memory for 
+ * ytemp, yptemp, and xx, and calls SpgmrMalloc to allocate memory
+ * for the Spgmr solver.
+ *
+ * The return value of IDASpgmr is:
+ *   IDASPILS_SUCCESS       = 0  if successful
+ *   IDASPILS_MEM_FAIL     = -1 if IDA_mem is NULL or a memory allocation failed
+ *   IDASPILS_ILL_INPUT = -2 if the gstype argument is illegal.
+ *
+ * -----------------------------------------------------------------
+ */
+
+int IDASpgmr(void *ida_mem, int maxl)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  SpgmrMem spgmr_mem;
+  int maxl1;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPGMR", "IDASpgmr", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if N_VDotProd is present */
+  if(vec_tmpl->ops->nvdotprod == NULL) {
+    IDAProcessError(NULL, IDASPILS_ILL_INPUT, "IDASPGMR", "IDASpgmr", MSGS_BAD_NVECTOR);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree((IDAMem) ida_mem);
+
+  /* Set five main function fields in ida_mem */
+  linit  = IDASpgmrInit;
+  lsetup = IDASpgmrSetup;
+  lsolve = IDASpgmrSolve;
+  lperf  = IDASpgmrPerf;
+  lfree  = IDASpgmrFree;
+
+  /* Get memory for IDASpilsMemRec */
+  idaspils_mem = NULL;
+  idaspils_mem = (IDASpilsMem) malloc(sizeof(struct IDASpilsMemRec));
+  if (idaspils_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmr", MSGS_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  idaspils_mem->s_type = SPILS_SPGMR;
+
+  /* Set SPGMR parameters that were passed in call sequence */
+  maxl1 = (maxl <= 0) ? IDA_SPILS_MAXL : maxl;
+  idaspils_mem->s_maxl     = maxl1;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  jdata    = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  idaspils_mem->s_pset   = NULL;
+  idaspils_mem->s_psolve = NULL;
+  idaspils_mem->s_pfree  = NULL;
+  idaspils_mem->s_pdata  = IDA_mem->ida_user_data;
+
+  /* Set default values for the rest of the Spgmr parameters */
+  idaspils_mem->s_gstype   = MODIFIED_GS;
+  idaspils_mem->s_maxrs    = IDA_SPILS_MAXRS;
+  idaspils_mem->s_eplifac  = PT05;
+  idaspils_mem->s_dqincfac = ONE;
+
+  idaspils_mem->s_last_flag  = IDASPILS_SUCCESS;
+  
+  /* initialize solver performance counters */
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to FALSE */
+  setupNonNull = FALSE;
+
+  /* Allocate memory for ytemp, yptemp, and xx */
+
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmr", MSGS_MEM_FAIL);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  yptemp = N_VClone(vec_tmpl);
+  if (yptemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  xx = N_VClone(vec_tmpl);
+  if (xx == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt( N_VDotProd(ytemp, ytemp) );
+
+  /* Call SpgmrMalloc to allocate workspace for Spgmr */
+  spgmr_mem = NULL;
+  spgmr_mem = SpgmrMalloc(maxl1, vec_tmpl);
+  if (spgmr_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    N_VDestroy(xx);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Attach SPGMR memory to spils memory structure */
+  spils_mem = (void *)spgmr_mem;
+
+  /* Attach linear solver memory to the integrator memory */
+  lmem = idaspils_mem;
+
+  return(IDASPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASPGMR interface routines
+ * -----------------------------------------------------------------
+ */
+
+/* Additional readability Replacements */
+
+#define gstype   (idaspils_mem->s_gstype)
+#define maxl     (idaspils_mem->s_maxl)
+#define maxrs    (idaspils_mem->s_maxrs)
+#define eplifac  (idaspils_mem->s_eplifac)
+#define psolve   (idaspils_mem->s_psolve)
+#define pset     (idaspils_mem->s_pset)
+#define pdata    (idaspils_mem->s_pdata)
+
+static int IDASpgmrInit(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Initialize counters */
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to TRUE iff there is preconditioning with setup */
+  setupNonNull = (psolve != NULL) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = IDASpilsDQJtimes;
+    jdata = IDA_mem;
+  } else {
+    jdata = user_data;
+  }
+
+  last_flag = IDASPILS_SUCCESS;
+  return(0);
+}
+
+static int IDASpgmrSetup(IDAMem IDA_mem, 
+                         N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+                         N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int retval;
+  IDASpilsMem idaspils_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Call user setup routine pset and update counter npe. */
+  retval = pset(tn, yy_p, yp_p, rr_p, cj, pdata,
+                tmp1, tmp2, tmp3);
+  npe++;
+
+  /* Return flag showing success or failure of pset. */
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, SPGMR_PSET_FAIL_UNREC, "IDASPGMR", "IDASpgmrSetup", MSGS_PSET_FAILED);
+    last_flag = SPGMR_PSET_FAIL_UNREC;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = SPGMR_PSET_FAIL_REC;
+    return(+1);
+  }
+
+  last_flag = SPGMR_SUCCESS;
+  return(0);
+}
+
+
+/*
+ * The x-scaling and b-scaling arrays are both equal to weight.
+ *  
+ * We set the initial guess, x = 0, then call SpgmrSolve.  
+ * We copy the solution x into b, and update the counters nli, nps, ncfl.
+ * If SpgmrSolve returned nli_inc = 0 (hence x = 0), we take the SPGMR
+ * vtemp vector (= P_inverse F) as the correction vector instead.
+ *  Finally, we set the return value according to the success of SpgmrSolve.
+ */
+
+static int IDASpgmrSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+                         N_Vector yy_now, N_Vector yp_now, N_Vector rr_now)
+{
+  IDASpilsMem idaspils_mem;
+  SpgmrMem spgmr_mem;
+  int pretype, nli_inc, nps_inc, retval;
+  realtype res_norm;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  spgmr_mem = (SpgmrMem) spils_mem;
+
+  /* Set SpgmrSolve convergence test constant epslin, in terms of the
+    Newton convergence test constant epsNewt and safety factors.  The factor 
+    sqrt(Neq) assures that the GMRES convergence test is applied to the
+    WRMS norm of the residual vector, rather than the weighted L2 norm. */
+  epslin = sqrtN*eplifac*epsNewt;
+
+  /* Set vectors ycur, ypcur, and rcur for use by the Atimes and Psolve */
+  ycur = yy_now;
+  ypcur = yp_now;
+  rcur = rr_now;
+
+  /* Set SpgmrSolve inputs pretype and initial guess xx = 0. */  
+  pretype = (psolve == NULL) ? PREC_NONE : PREC_LEFT;
+  N_VConst(ZERO, xx);
+  
+  /* Call SpgmrSolve and copy xx to bb. */
+  retval = SpgmrSolve(spgmr_mem, IDA_mem, xx, bb, pretype, gstype, epslin,
+                      maxrs, IDA_mem, weight, weight, IDASpilsAtimes,
+                      IDASpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+
+  if (nli_inc == 0) N_VScale(ONE, SPGMR_VTEMP(spgmr_mem), bb);
+  else N_VScale(ONE, xx, bb);
+  
+  /* Increment counters nli, nps, and return if successful. */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPGMR_SUCCESS) ncfl++;
+
+  /* Interpret return value from SpgmrSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPGMR_SUCCESS:
+    return(0);
+    break;
+  case SPGMR_RES_REDUCED:
+    return(1);
+    break;
+  case SPGMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPGMR_QRFACT_FAIL:
+    return(1);
+    break;
+  case SPGMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPGMR_ATIMES_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPGMR_ATIMES_FAIL_UNREC, "IDASPGMR", "IDASpgmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPGMR_PSOLVE_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPGMR_PSOLVE_FAIL_UNREC, "IDASPGMR", "IDASpgmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  case SPGMR_GS_FAIL:
+    return(-1);
+    break;
+  case SPGMR_QRSOL_FAIL:
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+/*
+ * This routine handles performance monitoring specific to the IDASPGMR
+ * linear solver.  When perftask = 0, it saves values of various counters.
+ * When perftask = 1, it examines difference quotients in these counters,
+ * and depending on their values, it prints up to three warning messages.
+ * Messages are printed up to a maximum of 10 times.
+ */
+
+static int IDASpgmrPerf(IDAMem IDA_mem, int perftask)
+{
+  IDASpilsMem idaspils_mem;
+  realtype avdim, rcfn, rcfl;
+  long int nstd, nnid;
+  booleantype lavd, lcfn, lcfl;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (perftask == 0) {
+    nst0 = nst;  nni0 = nni;  nli0 = nli;
+    ncfn0 = ncfn;  ncfl0 = ncfl;  
+    nwarn = 0;
+    return(0);
+  }
+
+  nstd = nst - nst0;  nnid = nni - nni0;
+  if (nstd == 0 || nnid == 0) return(0);
+  avdim = (realtype) ((nli - nli0)/((realtype) nnid));
+  rcfn = (realtype) ((ncfn - ncfn0)/((realtype) nstd));
+  rcfl = (realtype) ((ncfl - ncfl0)/((realtype) nnid));
+  lavd = (avdim > ((realtype) maxl ));
+  lcfn = (rcfn > PT9);
+  lcfl = (rcfl > PT9);
+  if (!(lavd || lcfn || lcfl)) return(0);
+  nwarn++;
+  if (nwarn > 10) return(1);
+  if (lavd) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPGMR", "IDASpgmrPerf", MSGS_AVD_WARN, tn, avdim);
+  if (lcfn) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPGMR", "IDASpgmrPerf", MSGS_CFN_WARN, tn, rcfn);
+  if (lcfl) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPGMR", "IDASpgmrPerf", MSGS_CFL_WARN, tn, rcfl);
+
+  return(0);
+}
+
+static int IDASpgmrFree(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  SpgmrMem spgmr_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+  
+  N_VDestroy(ytemp);
+  N_VDestroy(yptemp);
+  N_VDestroy(xx);
+
+  spgmr_mem = (SpgmrMem) spils_mem;
+  SpgmrFree(spgmr_mem);
+
+  if (idaspils_mem->s_pfree != NULL) (idaspils_mem->s_pfree)(IDA_mem);
+
+  free(idaspils_mem); idaspils_mem = NULL;
+
+  return(0);
+}
diff --git a/src/ida/ida_spils.c b/src/ida/ida_spils.c
new file mode 100644
index 0000000..b784f46
--- /dev/null
+++ b/src/ida/ida_spils.c
@@ -0,0 +1,654 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the common implementation file for the IDA Scaled              
+ * Preconditioned Linear Solver modules.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "ida_impl.h"
+#include "ida_spils_impl.h"
+
+/* Private constants */
+
+#define ZERO   RCONST(0.0)
+#define PT25   RCONST(0.25)
+#define PT05   RCONST(0.05)
+#define ONE    RCONST(1.0)
+
+/* Algorithmic constants */
+
+#define MAX_ITERS  3  /* max. number of attempts to recover in DQ J*v */
+
+/* Readability Replacements */
+
+#define lrw1      (IDA_mem->ida_lrw1)
+#define liw1      (IDA_mem->ida_liw1)
+#define tn        (IDA_mem->ida_tn)
+#define cj        (IDA_mem->ida_cj)
+#define res       (IDA_mem->ida_res)
+#define user_data (IDA_mem->ida_user_data)
+#define ewt       (IDA_mem->ida_ewt)
+#define lmem      (IDA_mem->ida_lmem)
+
+#define ils_type  (idaspils_mem->s_type)
+#define sqrtN     (idaspils_mem->s_sqrtN)
+#define epslin    (idaspils_mem->s_epslin)
+#define ytemp     (idaspils_mem->s_ytemp)
+#define yptemp    (idaspils_mem->s_yptemp)
+#define xx        (idaspils_mem->s_xx)
+#define ycur      (idaspils_mem->s_ycur)
+#define ypcur     (idaspils_mem->s_ypcur)
+#define rcur      (idaspils_mem->s_rcur)
+#define npe       (idaspils_mem->s_npe)
+#define nli       (idaspils_mem->s_nli)
+#define nps       (idaspils_mem->s_nps)
+#define ncfl      (idaspils_mem->s_ncfl)
+#define njtimes   (idaspils_mem->s_njtimes)
+#define nres      (idaspils_mem->s_nres)
+
+#define jtimesDQ  (idaspils_mem->s_jtimesDQ)
+#define jtimes    (idaspils_mem->s_jtimes)
+#define jdata     (idaspils_mem->s_jdata)
+
+#define last_flag (idaspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * OPTIONAL INPUT and OUTPUT
+ * -----------------------------------------------------------------
+ */
+
+int IDASpilsSetGSType(void *ida_mem, int gstype)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsSetGSType", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsSetGSType", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (ils_type != SPILS_SPGMR) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASPILS", "IDASpilsSetGSType", MSGS_BAD_LSTYPE);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Check for legal gstype */
+  if ((gstype != MODIFIED_GS) && (gstype != CLASSICAL_GS)) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASPILS", "IDASpilsSetGSType", MSGS_BAD_GSTYPE);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  idaspils_mem->s_gstype = gstype;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetMaxRestarts(void *ida_mem, int maxrs)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsSetMaxRestarts", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsSetMaxRestarts", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (ils_type != SPILS_SPGMR) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASPILS", "IDASpilsSetMaxRestarts", MSGS_BAD_LSTYPE);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Check for legal maxrs */
+  if (maxrs < 0) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASPILS", "IDASpilsSetMaxRestarts", MSGS_NEG_MAXRS);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  idaspils_mem->s_maxrs = maxrs;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetMaxl(void *ida_mem, int maxl)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsSetMaxl", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsSetMaxl", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (ils_type == SPILS_SPGMR) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASPILS", "IDASpilsSetMaxl", MSGS_BAD_LSTYPE);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  idaspils_mem->s_maxl = (maxl <= 0) ? IDA_SPILS_MAXL : maxl;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetEpsLin(void *ida_mem, realtype eplifac)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsSetEpsLin", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsSetEpsLin", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Check for legal maxrs */
+  if (eplifac < ZERO) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASPILS", "IDASpilsSetEpsLin", MSGS_NEG_EPLIFAC);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  if (eplifac == ZERO)
+    idaspils_mem->s_eplifac = PT05;
+  else
+    idaspils_mem->s_eplifac = eplifac;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetIncrementFactor(void *ida_mem, realtype dqincfac)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsSetIncrementFactor", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsSetIncrementFactor", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Check for legal maxrs */
+  if (dqincfac <= ZERO) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASPILS", "IDASpilsSetIncrementFactor", MSGS_NEG_DQINCFAC);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  idaspils_mem->s_dqincfac = dqincfac;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetPreconditioner(void *ida_mem,
+                              IDASpilsPrecSetupFn pset, IDASpilsPrecSolveFn psolve)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsSetPreconditioner", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsSetPreconditioner", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  idaspils_mem->s_pset = pset;
+  idaspils_mem->s_psolve = psolve;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetJacTimesVecFn(void *ida_mem, IDASpilsJacTimesVecFn jtv)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsSetJacTimesVecFn", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsSetJacTimesVecFn", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (jtv != NULL) {
+    jtimesDQ = FALSE;
+    jtimes = jtv;
+  } else {
+    jtimesDQ = TRUE;
+  }
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetWorkSpace(void *ida_mem, long int *lenrwLS, long int *leniwLS)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  int maxl;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsGetWorkSpace", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsGetWorkSpace", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  switch(ils_type) {
+  case SPILS_SPGMR:
+    maxl = idaspils_mem->s_maxl;
+    *lenrwLS = lrw1*(maxl + 6) + maxl*(maxl + 4) + 1;
+    *leniwLS = liw1*(maxl + 6);
+    break;
+  case SPILS_SPBCG:
+    *lenrwLS = lrw1 * 10;
+    *leniwLS = liw1 * 10;
+    break;
+  case SPILS_SPTFQMR:
+    *lenrwLS = lrw1*13;
+    *leniwLS = liw1*13;
+    break;
+  }
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumPrecEvals(void *ida_mem, long int *npevals)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsGetNumPrecEvals", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsGetNumPrecEvals", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *npevals = npe;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumPrecSolves(void *ida_mem, long int *npsolves)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsGetNumPrecSolves", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsGetNumPrecSolves", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *npsolves = nps;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumLinIters(void *ida_mem, long int *nliters)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsGetNumLinIters", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsGetNumLinIters", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *nliters = nli;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumConvFails(void *ida_mem, long int *nlcfails)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsGetNumConvFails", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsGetNumConvFails", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *nlcfails = ncfl;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumJtimesEvals(void *ida_mem, long int *njvevals)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsGetNumJtimesEvals", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsGetNumJtimesEvals", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *njvevals = njtimes;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumResEvals(void *ida_mem, long int *nrevalsLS)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsGetNumResEvals", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsGetNumResEvals", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *nrevalsLS = nres;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetLastFlag(void *ida_mem, long int *flag)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPILS", "IDASpilsGetLastFlag", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASPILS", "IDASpilsGetLastFlag", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *flag = last_flag;
+
+  return(IDASPILS_SUCCESS);
+}
+
+char *IDASpilsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case IDASPILS_SUCCESS:
+    sprintf(name,"IDASPILS_SUCCESS");
+    break; 
+  case IDASPILS_MEM_NULL:
+    sprintf(name,"IDASPILS_MEM_NULL");
+    break;
+  case IDASPILS_LMEM_NULL:
+    sprintf(name,"IDASPILS_LMEM_NULL");
+    break;
+  case IDASPILS_ILL_INPUT:
+    sprintf(name,"IDASPILS_ILL_INPUT");
+    break;
+  case IDASPILS_MEM_FAIL:
+    sprintf(name,"IDASPILS_MEM_FAIL");
+    break;
+  case IDASPILS_PMEM_NULL:
+    sprintf(name,"IDASPILS_PMEM_NULL");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASPILS private functions
+ * -----------------------------------------------------------------
+ */
+
+#define psolve   (idaspils_mem->s_psolve)
+#define pdata    (idaspils_mem->s_pdata)
+#define dqincfac (idaspils_mem->s_dqincfac)
+
+/*
+ * This routine generates the matrix-vector product z = Jv, where
+ * J is the system Jacobian, by calling either the user provided
+ * routine or the internal DQ routine.
+ */
+
+int IDASpilsAtimes(void *ida_mem, N_Vector v, N_Vector z)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  int jtflag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  jtflag = jtimes(tn, ycur, ypcur, rcur, v, z, cj, jdata, ytemp, yptemp);
+  njtimes++;
+
+  return(jtflag);
+}
+
+/*
+ * This routine interfaces between the generic Solve routine and
+ * the user's psolve routine.  It passes to psolve all required state 
+ * information from ida_mem.  Its return value is the same as that
+ * returned by psolve.  Note that the generic solver guarantees
+ * that IDASilsPSolve will not be called in the case psolve = NULL.
+ */
+
+int IDASpilsPSolve(void *ida_mem, N_Vector r, N_Vector z, int lr)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  int retval;
+
+  IDA_mem = (IDAMem) ida_mem;
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  retval = psolve(tn, ycur, ypcur, rcur, r, z, cj, epslin, pdata, ytemp);
+
+  /* This call is counted in nps within the IDASp**Solve routine */
+
+  return(retval);
+
+}
+
+/*
+ * This routine generates the matrix-vector product z = Jv, where
+ * J is the system Jacobian, by using a difference quotient approximation.
+ * The approximation is 
+ *      Jv = [F(t,y1,yp1) - F(t,y,yp)]/sigma,  where
+ *        y1 = y + sigma*v,  yp1 = yp + cj*sigma*v,
+ *        sigma = sqrt(Neq)*dqincfac.
+ * The return value from the call to res is saved in order to set the
+ * return flag from IDASp**Solve.
+ */
+
+int IDASpilsDQJtimes(realtype tt,
+                     N_Vector yy, N_Vector yp, N_Vector rr,
+                     N_Vector v, N_Vector Jv, 
+                     realtype c_j, void *data, 
+                     N_Vector work1, N_Vector work2)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  N_Vector y_tmp, yp_tmp;
+  realtype sig=ZERO, siginv;
+  int iter, retval;
+
+  /* data is ida_mem */
+  IDA_mem = (IDAMem) data;
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  switch(ils_type) {
+  case SPILS_SPGMR:
+    sig = sqrtN*dqincfac;
+    break;
+  case SPILS_SPBCG:
+    sig = dqincfac/N_VWrmsNorm(v, ewt);
+    break;
+  case SPILS_SPTFQMR:
+    sig = dqincfac/N_VWrmsNorm(v, ewt);
+    break;
+  }
+
+  /* Rename work1 and work2 for readibility */
+  y_tmp  = work1;
+  yp_tmp = work2;
+
+  for (iter=0; iter<MAX_ITERS; iter++) {
+
+    /* Set y_tmp = yy + sig*v, yp_tmp = yp + cj*sig*v. */
+    N_VLinearSum(sig, v, ONE, yy, y_tmp);
+    N_VLinearSum(c_j*sig, v, ONE, yp, yp_tmp);
+    
+    /* Call res for Jv = F(t, y_tmp, yp_tmp), and return if it failed. */
+    retval = res(tt, y_tmp, yp_tmp, Jv, user_data); 
+    nres++;
+    if (retval == 0) break;
+    if (retval < 0)  return(-1);
+
+    sig *= PT25;
+  }
+
+  if (retval > 0) return(+1);
+
+  /* Set Jv to [Jv - rr]/sig and return. */
+  siginv = ONE/sig;
+  N_VLinearSum(siginv, Jv, -siginv, rr, Jv);
+
+  return(0);
+
+}
+
+int idaSpilsInitializeCounters(IDASpilsMem idaspils_mem)
+{
+  idaspils_mem->s_npe     = 0;
+  idaspils_mem->s_nli     = 0;
+  idaspils_mem->s_nps     = 0;
+  idaspils_mem->s_ncfl    = 0;
+  idaspils_mem->s_njtimes = 0;
+  idaspils_mem->s_nres    = 0;
+
+  return(0);
+}
diff --git a/src/ida/ida_spils_impl.h b/src/ida/ida_spils_impl.h
new file mode 100644
index 0000000..4836d98
--- /dev/null
+++ b/src/ida/ida_spils_impl.h
@@ -0,0 +1,196 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4920 $
+ * $Date: 2016-09-19 14:34:35 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the common header file (private version) for the Scaled
+ * Preconditioned Iterative Linear Solver modules.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASPILS_IMPL_H
+#define _IDASPILS_IMPL_H
+
+#include <ida/ida_spils.h>
+#include "ida_impl.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Types of iterative linear solvers */
+
+#define SPILS_SPGMR   1
+#define SPILS_SPBCG   2
+#define SPILS_SPTFQMR 3
+
+/* Constants */
+
+#define IDA_SPILS_MAXL    5
+#define IDA_SPILS_MAXRS   5
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDASpilsMemRec, IDASpilsMem                             
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDASpilsMemRec {
+
+  int s_type;          /* type of scaled preconditioned iterative LS   */
+
+  int  s_gstype;       /* type of Gram-Schmidt orthogonalization       */
+  realtype s_sqrtN;    /* sqrt(N)                                      */
+  int  s_maxl;         /* maxl = maximum dimension of the Krylov space */
+  int  s_maxrs;        /* maxrs = max. number of GMRES restarts        */
+  realtype s_eplifac;  /* eplifac = linear convergence factor          */
+  realtype s_dqincfac; /* dqincfac = optional increment factor in Jv   */
+  realtype s_epslin;   /* SpgrmSolve tolerance parameter               */
+
+  long int s_npe;      /* npe = total number of precond calls          */   
+  long int s_nli;      /* nli = total number of linear iterations      */
+  long int s_nps;      /* nps = total number of psolve calls           */
+  long int s_ncfl;     /* ncfl = total number of convergence failures  */
+  long int s_nres;     /* nres = total number of calls to res          */
+  long int s_njtimes;  /* njtimes = total number of calls to jtimes    */
+
+  long int s_nst0;     /* nst0 = saved nst (for performance monitor)   */   
+  long int s_nni0;     /* nni0 = saved nni (for performance monitor)   */   
+  long int s_nli0;     /* nli0 = saved nli (for performance monitor)   */   
+  long int s_ncfn0;    /* ncfn0 = saved ncfn (for performance monitor) */   
+  long int s_ncfl0;    /* ncfl0 = saved ncfl (for performance monitor) */   
+  long int s_nwarn;    /* nwarn = no. of warnings (for perf. monitor)  */   
+
+  N_Vector s_ytemp;    /* temp vector used by IDAAtimesDQ              */ 
+  N_Vector s_yptemp;   /* temp vector used by IDAAtimesDQ              */ 
+  N_Vector s_xx;       /* temp vector used by the solve function       */
+  N_Vector s_ycur;     /* current y vector in Newton iteration         */
+  N_Vector s_ypcur;    /* current yp vector in Newton iteration        */
+  N_Vector s_rcur;     /* rcur = F(tn, ycur, ypcur)                    */
+
+  void *s_spils_mem;   /* memory used by the generic solver            */
+
+  long int s_last_flag; /* last error return flag                      */
+
+  /* Preconditioner computation
+   * (a) user-provided:
+   *     - pdata == user_data
+   *     - pfree == NULL (the user dealocates memory for f_data)
+   * (b) internal preconditioner module
+   *     - pdata == ida_mem
+   *     - pfree == set by the prec. module and called in IDASpilsFree
+   */
+
+  IDASpilsPrecSetupFn s_pset;
+  IDASpilsPrecSolveFn s_psolve;
+  int (*s_pfree)(IDAMem IDA_mem);
+  void *s_pdata;
+  
+  /* Jacobian times vector compuation
+   * (a) jtimes function provided by the user:
+   *     - jdata == user_data
+   *     - jtimesDQ == FALSE
+   * (b) internal jtimes
+   *     - jdata == ida_mem
+   *     - jtimesDQ == TRUE
+   */
+
+  booleantype s_jtimesDQ;
+  IDASpilsJacTimesVecFn s_jtimes;
+  void *s_jdata;
+
+} *IDASpilsMem;
+
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+
+/* Atimes and PSolve routines called by generic solver */
+
+int IDASpilsAtimes(void *ida_mem, N_Vector v, N_Vector z);
+
+int IDASpilsPSolve(void *ida_mem, N_Vector r, N_Vector z, int lr);
+
+/* Difference quotient approximation for Jac times vector */
+
+int IDASpilsDQJtimes(realtype tt,
+                     N_Vector yy, N_Vector yp, N_Vector rr,
+                     N_Vector v, N_Vector Jv, 
+                     realtype c_j, void *data, 
+                     N_Vector work1, N_Vector work2);
+
+/* Auxilliary functions */
+
+int idaSpilsInitializeCounters(IDASpilsMem idaspils_mem);
+
+
+/*
+ * -----------------------------------------------------------------
+ * Error and Warning Messages
+ * -----------------------------------------------------------------
+ */
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define MSGS_TIME "at t = %Lg, "
+#define MSGS_FRMT "%Le."
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define MSGS_TIME "at t = %lg, "
+#define MSGS_FRMT "%le."
+
+#else
+
+#define MSGS_TIME "at t = %g, "
+#define MSGS_FRMT "%e."
+
+#endif
+
+
+/* Error Messages */
+
+#define MSGS_IDAMEM_NULL   "Integrator memory is NULL."
+#define MSGS_MEM_FAIL      "A memory request failed."
+#define MSGS_BAD_NVECTOR   "A required vector operation is not implemented."
+#define MSGS_BAD_LSTYPE    "Incompatible linear solver type."
+#define MSGS_LMEM_NULL     "Linear solver memory is NULL."
+#define MSGS_BAD_GSTYPE    "gstype has an illegal value."
+#define MSGS_NEG_MAXRS     "maxrs < 0 illegal."
+#define MSGS_NEG_EPLIFAC   "eplifac < 0.0 illegal."
+#define MSGS_NEG_DQINCFAC  "dqincfac < 0.0 illegal."
+
+#define MSGS_PSET_FAILED "The preconditioner setup routine failed in an unrecoverable manner."
+#define MSGS_PSOLVE_FAILED "The preconditioner solve routine failed in an unrecoverable manner."
+#define MSGS_JTIMES_FAILED "The Jacobian x vector routine failed in an unrecoverable manner."
+
+/* Warning Messages */
+
+#define MSGS_WARN  "Warning: " MSGS_TIME "poor iterative algorithm performance. "
+
+#define MSGS_AVD_WARN  MSGS_WARN "Average number of linear iterations is " MSGS_FRMT
+#define MSGS_CFN_WARN  MSGS_WARN "Nonlinear convergence failure rate is " MSGS_FRMT
+#define MSGS_CFL_WARN  MSGS_WARN "Linear convergence failure rate is " MSGS_FRMT
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/ida/ida_sptfqmr.c b/src/ida/ida_sptfqmr.c
new file mode 100644
index 0000000..284bbbf
--- /dev/null
+++ b/src/ida/ida_sptfqmr.c
@@ -0,0 +1,482 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4829 $
+ * $Date: 2016-07-27 16:01:15 -0700 (Wed, 27 Jul 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDA scaled preconditioned
+ * TFQMR linear solver module, IDASPTFQMR.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ida/ida_sptfqmr.h>
+#include "ida_spils_impl.h"
+#include "ida_impl.h"
+
+#include <sundials/sundials_sptfqmr.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define PT9  RCONST(0.9)
+#define PT05 RCONST(0.05)
+
+/* IDASPTFQMR linit, lsetup, lsolve, lperf, and lfree routines */
+
+static int IDASptfqmrInit(IDAMem IDA_mem);
+
+static int IDASptfqmrSetup(IDAMem IDA_mem, 
+			   N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+			   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int IDASptfqmrSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+			   N_Vector yy_now, N_Vector yp_now, N_Vector rr_now);
+
+static int IDASptfqmrPerf(IDAMem IDA_mem, int perftask);
+
+static int IDASptfqmrFree(IDAMem IDA_mem);
+
+/* Readability Replacements */
+
+#define nst          (IDA_mem->ida_nst)
+#define tn           (IDA_mem->ida_tn)
+#define cj           (IDA_mem->ida_cj)
+#define epsNewt      (IDA_mem->ida_epsNewt)
+#define res          (IDA_mem->ida_res)
+#define user_data    (IDA_mem->ida_user_data)
+#define ewt          (IDA_mem->ida_ewt)
+#define errfp        (IDA_mem->ida_errfp)
+#define linit        (IDA_mem->ida_linit)
+#define lsetup       (IDA_mem->ida_lsetup)
+#define lsolve       (IDA_mem->ida_lsolve)
+#define lperf        (IDA_mem->ida_lperf)
+#define lfree        (IDA_mem->ida_lfree)
+#define lmem         (IDA_mem->ida_lmem)
+#define nni          (IDA_mem->ida_nni)
+#define ncfn         (IDA_mem->ida_ncfn)
+#define setupNonNull (IDA_mem->ida_setupNonNull)
+#define vec_tmpl     (IDA_mem->ida_tempv1)
+
+#define sqrtN       (idaspils_mem->s_sqrtN)
+#define epslin      (idaspils_mem->s_epslin)
+#define ytemp       (idaspils_mem->s_ytemp)
+#define yptemp      (idaspils_mem->s_yptemp)
+#define xx          (idaspils_mem->s_xx)
+#define ycur        (idaspils_mem->s_ycur)
+#define ypcur       (idaspils_mem->s_ypcur)
+#define rcur        (idaspils_mem->s_rcur)
+#define npe         (idaspils_mem->s_npe)
+#define nli         (idaspils_mem->s_nli)
+#define nps         (idaspils_mem->s_nps)
+#define ncfl        (idaspils_mem->s_ncfl)
+#define nst0        (idaspils_mem->s_nst0)
+#define nni0        (idaspils_mem->s_nni0)
+#define nli0        (idaspils_mem->s_nli0)
+#define ncfn0       (idaspils_mem->s_ncfn0)
+#define ncfl0       (idaspils_mem->s_ncfl0)
+#define nwarn       (idaspils_mem->s_nwarn)
+#define njtimes     (idaspils_mem->s_njtimes)
+#define nres        (idaspils_mem->s_nres)
+#define spils_mem   (idaspils_mem->s_spils_mem)
+
+#define jtimesDQ    (idaspils_mem->s_jtimesDQ)
+#define jtimes      (idaspils_mem->s_jtimes)
+#define jdata       (idaspils_mem->s_jdata)
+
+#define last_flag   (idaspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASptfqmr
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDASPTFQMR linear solver module.
+ *
+ * IDASptfqmr first calls the existing lfree routine if this is not NULL.
+ * It then sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDASptfqmrInit, IDASptfqmrSetup,
+ * IDASptfqmrSolve, IDASptfqmrPerf, and IDASptfqmrFree, respectively.
+ * It allocates memory for a structure of type IDASpilsMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem). It then sets various fields
+ * in the IDASpilsMemRec structure. Finally, IDASptfqmr allocates 
+ * memory for ytemp, yptemp, and xx, and calls SptfqmrMalloc to 
+ * allocate memory for the Sptfqmr solver.
+ *
+ * The return value of IDASptfqmr is:
+ *   IDASPILS_SUCCESS   =  0 if successful
+ *   IDASPILS_MEM_FAIL  = -1 if IDA_mem is NULL or a memory
+ *                             allocation failed
+ *   IDASPILS_ILL_INPUT = -2 if a required vector operation is not
+ *                             implemented.
+ * -----------------------------------------------------------------
+ */
+
+int IDASptfqmr(void *ida_mem, int maxl)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int maxl1;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPTFQMR", "IDASptfqmr", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if N_VDotProd is present */
+  if (vec_tmpl->ops->nvdotprod == NULL) {
+    IDAProcessError(NULL, IDASPILS_ILL_INPUT, "IDASPTFQMR", "IDASptfqmr", MSGS_BAD_NVECTOR);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree((IDAMem) ida_mem);
+
+  /* Set five main function fields in ida_mem */
+  linit  = IDASptfqmrInit;
+  lsetup = IDASptfqmrSetup;
+  lsolve = IDASptfqmrSolve;
+  lperf  = IDASptfqmrPerf;
+  lfree  = IDASptfqmrFree;
+
+  /* Get memory for IDASpilsMemRec */
+  idaspils_mem = NULL;
+  idaspils_mem = (IDASpilsMem) malloc(sizeof(struct IDASpilsMemRec));
+  if (idaspils_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmr", MSGS_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  idaspils_mem->s_type = SPILS_SPTFQMR;
+
+  /* Set SPTFQMR parameters that were passed in call sequence */
+  maxl1 = (maxl <= 0) ? IDA_SPILS_MAXL : maxl;
+  idaspils_mem->s_maxl = maxl1;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  jdata    = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  idaspils_mem->s_pset   = NULL;
+  idaspils_mem->s_psolve = NULL;
+  idaspils_mem->s_pfree  = NULL;
+  idaspils_mem->s_pdata  = IDA_mem->ida_user_data;
+
+  /* Set default values for the rest of the Sptfqmr parameters */
+  idaspils_mem->s_eplifac   = PT05;
+  idaspils_mem->s_dqincfac  = ONE;
+
+  idaspils_mem->s_last_flag = IDASPILS_SUCCESS;
+
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to FALSE */
+  setupNonNull = FALSE;
+
+  /* Allocate memory for ytemp, yptemp, and xx */
+
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmr", MSGS_MEM_FAIL);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  yptemp = N_VClone(vec_tmpl);
+  if (yptemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  xx = N_VClone(vec_tmpl);
+  if (xx == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt(N_VDotProd(ytemp, ytemp));
+
+  /* Call SptfqmrMalloc to allocate workspace for Sptfqmr */
+  sptfqmr_mem = NULL;
+  sptfqmr_mem = SptfqmrMalloc(maxl1, vec_tmpl);
+  if (sptfqmr_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    N_VDestroy(xx);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Attach SPTFQMR memory to spils memory structure */
+  spils_mem = (void *)sptfqmr_mem;
+
+  /* Attach linear solver memory to the integrator memory */
+  lmem = idaspils_mem;
+
+  return(IDASPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASPTFQMR interface routines
+ * -----------------------------------------------------------------
+ */
+
+/* Additional readability Replacements */
+
+#define maxl     (idaspils_mem->s_maxl)
+#define eplifac  (idaspils_mem->s_eplifac)
+#define psolve   (idaspils_mem->s_psolve)
+#define pset     (idaspils_mem->s_pset)
+#define pdata    (idaspils_mem->s_pdata)
+
+static int IDASptfqmrInit(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  SptfqmrMem sptfqmr_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+  sptfqmr_mem = (SptfqmrMem) spils_mem;
+
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to TRUE iff there is preconditioning with setup */
+  setupNonNull = (psolve != NULL) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = IDASpilsDQJtimes;
+    jdata = IDA_mem;
+  } else {
+    jdata = user_data;
+  }
+
+  /*  Set maxl in the SPTFQMR memory in case it was changed by the user */
+  sptfqmr_mem->l_max  = maxl;
+
+  last_flag = IDASPILS_SUCCESS;
+
+  return(0);
+}
+
+static int IDASptfqmrSetup(IDAMem IDA_mem, 
+			   N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+			   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int retval;
+  IDASpilsMem idaspils_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Call user setup routine pset and update counter npe */
+  retval = pset(tn, yy_p, yp_p, rr_p, cj, pdata,
+                tmp1, tmp2, tmp3);
+  npe++;
+
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, SPTFQMR_PSET_FAIL_UNREC, "IDASPTFQMR", "IDASptfqmrSetup", MSGS_PSET_FAILED);
+    last_flag = SPTFQMR_PSET_FAIL_UNREC;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = SPTFQMR_PSET_FAIL_REC;
+    return(+1);
+  }
+
+  last_flag = SPTFQMR_SUCCESS;
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASptfqmrSolve
+ * -----------------------------------------------------------------
+ * Note: The x-scaling and b-scaling arrays are both equal to weight.
+ *
+ * We set the initial guess, x = 0, then call SptfqmrSolve.
+ * We copy the solution x into b, and update the counters nli, nps,
+ * and ncfl. If SptfqmrSolve returned nli_inc = 0 (hence x = 0), we
+ * take the SPTFQMR vtemp vector (= P_inverse F) as the correction
+ * vector instead. Finally, we set the return value according to the
+ * success of SptfqmrSolve.
+ * -----------------------------------------------------------------
+ */
+
+static int IDASptfqmrSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+			   N_Vector yy_now, N_Vector yp_now, N_Vector rr_now)
+{
+  IDASpilsMem idaspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int pretype, nli_inc, nps_inc, retval;
+  realtype res_norm;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  sptfqmr_mem = (SptfqmrMem)spils_mem;
+
+  /* Set SptfqmrSolve convergence test constant epslin, in terms of the
+     Newton convergence test constant epsNewt and safety factors. The factor
+     sqrt(Neq) assures that the TFQMR convergence test is applied to the
+     WRMS norm of the residual vector, rather than the weighted L2 norm. */
+  epslin = sqrtN*eplifac*epsNewt;
+
+  /* Set vectors ycur, ypcur, and rcur for use by the Atimes and Psolve */
+  ycur = yy_now;
+  ypcur = yp_now;
+  rcur = rr_now;
+
+  /* Set SptfqmrSolve inputs pretype and initial guess xx = 0 */  
+  pretype = (psolve == NULL) ? PREC_NONE : PREC_LEFT;
+  N_VConst(ZERO, xx);
+  
+  /* Call SptfqmrSolve and copy xx to bb */
+  retval = SptfqmrSolve(sptfqmr_mem, IDA_mem, xx, bb, pretype, epslin,
+                      IDA_mem, weight, weight, IDASpilsAtimes,
+                      IDASpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+
+  if (nli_inc == 0) N_VScale(ONE, SPTFQMR_VTEMP(sptfqmr_mem), bb);
+  else N_VScale(ONE, xx, bb);
+  
+  /* Increment counters nli, nps, and return if successful */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPTFQMR_SUCCESS) ncfl++;
+
+    /* Interpret return value from SpgmrSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPTFQMR_SUCCESS:
+    return(0);
+    break;
+  case SPTFQMR_RES_REDUCED:
+    return(1);
+    break;
+  case SPTFQMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPTFQMR_ATIMES_FAIL_UNREC, "IDASPTFQMR", "IDASptfqmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPTFQMR_PSOLVE_FAIL_UNREC, "IDASPTFQMR", "IDASptfqmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASptfqmrPerf
+ * -----------------------------------------------------------------
+ * This routine handles performance monitoring specific to the
+ * IDASPTFQMR linear solver. When perftask = 0, it saves values of
+ * various counters. When perftask = 1, it examines difference
+ * quotients in these counters, and depending on their values, it
+ * prints up to three warning messages. Messages are printed up to
+ * a maximum of 10 times.
+ * -----------------------------------------------------------------
+ */
+
+static int IDASptfqmrPerf(IDAMem IDA_mem, int perftask)
+{
+  IDASpilsMem idaspils_mem;
+  realtype avdim, rcfn, rcfl;
+  long int nstd, nnid;
+  booleantype lavd, lcfn, lcfl;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (perftask == 0) {
+    nst0 = nst;  nni0 = nni;  nli0 = nli;
+    ncfn0 = ncfn;  ncfl0 = ncfl;  
+    nwarn = 0;
+    return(0);
+  }
+
+  nstd = nst - nst0;  nnid = nni - nni0;
+  if (nstd == 0 || nnid == 0) return(0);
+  avdim = (realtype) ((nli - nli0)/((realtype) nnid));
+  rcfn = (realtype) ((ncfn - ncfn0)/((realtype) nstd));
+  rcfl = (realtype) ((ncfl - ncfl0)/((realtype) nnid));
+  lavd = (avdim > ((realtype) maxl));
+  lcfn = (rcfn > PT9);
+  lcfl = (rcfl > PT9);
+  if (!(lavd || lcfn || lcfl)) return(0);
+  nwarn++;
+  if (nwarn > 10) return(1);
+  if (lavd) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPTFQMR", "IDASptfqmrPerf", MSGS_AVD_WARN, tn, avdim);
+  if (lcfn) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPTFQMR", "IDASptfqmrPerf", MSGS_CFN_WARN, tn, rcfn);
+  if (lcfl) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPTFQMR", "IDASptfqmrPerf", MSGS_CFL_WARN, tn, rcfl);
+
+  return(0);
+}
+
+static int IDASptfqmrFree(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  SptfqmrMem sptfqmr_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  N_VDestroy(ytemp);
+  N_VDestroy(yptemp);
+  N_VDestroy(xx);
+  
+  sptfqmr_mem = (SptfqmrMem)spils_mem;
+  SptfqmrFree(sptfqmr_mem);
+
+  if (idaspils_mem->s_pfree != NULL) (idaspils_mem->s_pfree)(IDA_mem);
+
+  free(idaspils_mem); idaspils_mem = NULL;
+
+  return(0);
+}
+
diff --git a/src/ida/ida_superlumt.c b/src/ida/ida_superlumt.c
new file mode 100644
index 0000000..eda8449
--- /dev/null
+++ b/src/ida/ida_superlumt.c
@@ -0,0 +1,522 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4938 $
+ * $Date: 2016-09-21 14:33:08 -0700 (Wed, 21 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDASUPERLUMT linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "sundials/sundials_math.h"
+#include "sundials/sundials_superlumt_impl.h"
+
+#include "ida_impl.h"
+#include "ida_sparse_impl.h"
+#include "ida/ida_superlumt.h"
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* IDASUPERLUMT linit, lsetup, lsolve, and lfree routines */
+ 
+static int IDASuperLUMTInit(IDAMem IDA_mem);
+
+static int IDASuperLUMTSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+			     N_Vector rrp, N_Vector tmp1,
+			     N_Vector tmp2, N_Vector tmp3);
+
+static int IDASuperLUMTSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+			     N_Vector ycur, N_Vector ypcur, N_Vector rrcur);
+
+static int IDASuperLUMTFree(IDAMem IDA_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * IDASuperLUMT
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDA / SuperLUMT linear solver module.  
+ * IDASuperLUMT first calls the existing lfree routine if this is not NULL.
+ * Then it sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDASuperLUMTInit, IDASuperLUMTSetup,
+ * IDASuperLUMTSolve, NULL, and IDASuperLUMTFree, respectively.
+ * It allocates memory for a structure of type IDAsluMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem) to TRUE, sets the d_jdata field
+ * in the IDAsluMemRec structure to be the input parameter jdata,
+ * and sets the d_jac field to be:
+ *   (1) the input parameter djac, if djac != NULL, or                
+ *   (2) throws an error, if djac == NULL.                             
+ * Finally, it allocates memory for SuperLUMT.
+ * The return value is IDASLS_SUCCESS = 0, IDASLS_LMEM_FAIL = -1,
+ * or IDASLS_ILL_INPUT = -2.
+ *
+ * NOTE: The SuperLUMT linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDASuperLUMT will first 
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int IDASuperLUMT(void *ida_mem, int num_threads, int n, int nnz)
+{
+  IDAMem IDA_mem;
+  IDASlsMem idasls_mem;
+  SLUMTData slumt_data;
+  int *perm_c, *perm_r;
+  int nrhs, panel_size, relax;
+  double *bd;
+  SuperMatrix *B;
+
+  /* Return immediately if ida_mem is NULL. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDASuperLUMT", 
+		    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the Direct solver */
+  if (IDA_mem->ida_tempv1->ops->nvgetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASLS", "IDASuperLUMT", 
+		    MSGSP_BAD_NVECTOR);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  if (IDA_mem->ida_lfree != NULL) IDA_mem->ida_lfree(IDA_mem);
+
+  /* Set five main function fields in IDA_mem. */
+  IDA_mem->ida_linit  = IDASuperLUMTInit;
+  IDA_mem->ida_lsetup = IDASuperLUMTSetup;
+  IDA_mem->ida_lsolve = IDASuperLUMTSolve;
+  IDA_mem->ida_lperf  = NULL;
+  IDA_mem->ida_lfree  = IDASuperLUMTFree;
+
+  /* Get memory for IDASlsMemRec. */
+  idasls_mem = NULL;
+  idasls_mem = (IDASlsMem) malloc(sizeof(struct IDASlsMemRec));
+  if (idasls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASLS", "IDASuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  /* Get memory for SLUMT_data. */
+  slumt_data = NULL;
+  slumt_data = (SLUMTData)malloc(sizeof(struct SLUMTDataRec));
+  if (slumt_data == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASLS", "IDASuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  IDA_mem->ida_setupNonNull = TRUE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  idasls_mem->s_jaceval = NULL;
+  idasls_mem->s_jacdata = IDA_mem->ida_user_data;
+
+  /* Allocate memory for the sparse Jacobian */
+  idasls_mem->s_JacMat = NULL;
+  idasls_mem->s_JacMat = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (idasls_mem->s_JacMat == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASLS", "IDASuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  /* Set up memory for the permutations */
+  perm_r = (int *)malloc(n*sizeof(int));
+  if (perm_r == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASLS", "IDASuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+  perm_c = (int *)malloc(n*sizeof(int));
+  if (perm_c == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASLS", "IDASuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    free(perm_r);
+    return(IDASLS_MEM_FAIL);
+  }
+  slumt_data->perm_r = perm_r;
+  slumt_data->perm_c = perm_c;
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+
+  /* Set default parameters for SuperLU */
+  slumt_data->num_threads = num_threads;
+  slumt_data->diag_pivot_thresh = 1.0;
+
+  /* Allocate structures for SuperLU */
+  slumt_data->Gstat = (Gstat_t *)malloc(sizeof(Gstat_t));
+  slumt_data->s_A = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_AC = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_L = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_U = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_A->Store  = NULL;
+  slumt_data->s_AC->Store = NULL;
+  slumt_data->s_L->Store  = NULL;
+  slumt_data->s_U->Store  = NULL;
+  slumt_data->superlumt_options = (superlumt_options_t *)malloc(sizeof(superlumt_options_t));
+
+  dCreate_CompCol_Matrix(slumt_data->s_A, idasls_mem->s_JacMat->M, 
+			 idasls_mem->s_JacMat->N, 
+			 idasls_mem->s_JacMat->NNZ, idasls_mem->s_JacMat->data, 
+			 idasls_mem->s_JacMat->indexvals, 
+			 idasls_mem->s_JacMat->indexptrs, 
+			 SLU_NC, SLU_D, SLU_GE);
+
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  StatAlloc(idasls_mem->s_JacMat->N, num_threads, panel_size, relax, 
+	    slumt_data->Gstat);
+  
+  /* Create RHS matrix */
+  nrhs = 1;
+  bd = NULL;
+  B = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  B->Store = NULL;
+  dCreate_Dense_Matrix(B, n, nrhs, bd, n, 
+		       SLU_DN, SLU_D, SLU_GE);
+  slumt_data->s_B = B;
+
+  /* Set ordering to COLAMD as the ida default use.
+     Users can set a different value with IDASuperLUMTSetOrdering,
+     and the user-set value is loaded before any call to factorize the
+     matrix in IDASuperLUMTSetup.  */
+  slumt_data->s_ordering = 3;
+
+  /* Attach linear solver memory to the integrator memory */
+  idasls_mem->s_solver_data = (void *) slumt_data;
+  IDA_mem->ida_lmem = idasls_mem;
+
+  return(IDASLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASuperLUMT interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the IDASuperLUMT
+  linear solver module.  
+  It returns 0 if successful.
+*/
+
+static int IDASuperLUMTInit(IDAMem IDA_mem)
+{
+  int num_threads, n;
+  IDASlsMem idasls_mem;
+  SLUMTData slumt_data;
+
+  idasls_mem = (IDASlsMem)IDA_mem->ida_lmem;
+  slumt_data = (SLUMTData) idasls_mem->s_solver_data;
+
+  idasls_mem->s_nje = 0;
+  idasls_mem->s_first_factorize = 1;
+
+  /* ------------------------------------------------------------
+     Allocate storage and initialize statistics variables. 
+     ------------------------------------------------------------*/
+  n = idasls_mem->s_JacMat->N;
+  num_threads = slumt_data->num_threads;
+
+  StatInit(n, num_threads, slumt_data->Gstat);
+
+  idasls_mem->s_last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the IDASuperLUMT linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     IDASLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int IDASuperLUMTSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+			     N_Vector rrp, N_Vector tmp1, N_Vector tmp2,
+			     N_Vector tmp3)
+{
+  int retval, info;
+  int nprocs, panel_size, relax, permc_spec, lwork;
+  int *perm_r, *perm_c;
+  realtype tn, cj;
+  double diag_pivot_thresh, drop_tol;
+  fact_t fact;
+  trans_t trans;
+  yes_no_t refact, usepr;
+  IDASlsMem idasls_mem;
+  IDASlsSparseJacFn jaceval;
+  SuperMatrix *A, *AC, *L, *U;
+  Gstat_t *Gstat;
+  superlumt_options_t *superlumt_options;
+  SLUMTData slumt_data;
+  SlsMat JacMat;
+  void *jacdata;
+  void *work;
+  
+  idasls_mem = (IDASlsMem) (IDA_mem->ida_lmem);
+  tn = IDA_mem->ida_tn; 
+  cj = IDA_mem->ida_cj;
+
+  slumt_data = (SLUMTData) idasls_mem->s_solver_data;
+
+  jaceval = idasls_mem->s_jaceval;
+  jacdata = idasls_mem->s_jacdata;
+  JacMat = idasls_mem->s_JacMat;
+
+  superlumt_options = slumt_data->superlumt_options;
+  A = slumt_data->s_A;
+  AC = slumt_data->s_AC;
+  L = slumt_data->s_L;
+  U = slumt_data->s_U;
+  Gstat = slumt_data->Gstat;
+  perm_r = slumt_data->perm_r;
+  perm_c = slumt_data->perm_c;
+  nprocs = slumt_data->num_threads;
+  diag_pivot_thresh = slumt_data->diag_pivot_thresh;
+
+  /* Set option values for SuperLU_MT */
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  fact = EQUILIBRATE;
+  trans = NOTRANS;
+  usepr = NO;
+  drop_tol = 0.0;
+  lwork = 0;
+  work = NULL;
+
+  /* Check that Jacobian eval routine is set */
+  if (jaceval == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_JAC_NOSET, "IDASLS", "IDASuperLUMTSetup", 
+		    MSGSP_JAC_NOSET);
+    free(idasls_mem); idasls_mem = NULL;
+    return(IDASLS_JAC_NOSET);
+  }
+
+  /* Increment nje counter and call Jacobian eval routine. */
+  idasls_mem->s_nje++;
+  retval = jaceval(tn, cj, yyp, ypp, rrp, JacMat, jacdata, 
+		   tmp1, tmp2, tmp3);
+
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDASLS_JACFUNC_UNRECVR, "IDASLS", 
+		    "IDASuperLUMTSetup", MSGSP_JACFUNC_FAILED);
+    idasls_mem->s_last_flag = IDASLS_JACFUNC_UNRECVR;
+    return(IDASLS_JACFUNC_UNRECVR);
+  }
+  if (retval > 0) {
+    idasls_mem->s_last_flag = IDASLS_JACFUNC_RECVR;
+    return(+1);
+  }
+
+  if (idasls_mem->s_first_factorize) {
+    /* ------------------------------------------------------------
+       Get column permutation vector perm_c[], according to permc_spec:
+       permc_spec = 3: approximate minimum degree for unsymmetric matrices
+       ------------------------------------------------------------*/ 
+    permc_spec = slumt_data->s_ordering;
+    get_perm_c(permc_spec, A, perm_c);
+ 
+    refact= NO;
+    idasls_mem->s_first_factorize = 0;
+  }
+  else {
+    /* ------------------------------------------------------------
+       Re-initialize statistics variables 
+       ------------------------------------------------------------*/
+    StatInit(JacMat->N, nprocs, Gstat);
+    Destroy_CompCol_Permuted(AC);
+    refact= YES;
+  }
+
+  /* ------------------------------------------------------------
+     Initialize the option structure superlumt_options using the
+     user-input parameters;  Subsequent calls will re-initialize
+     options.
+     Apply perm_c to the columns of original A to form AC.
+     ------------------------------------------------------------*/
+  pdgstrf_init(nprocs, fact, trans, refact, panel_size, relax,
+	       diag_pivot_thresh, usepr, drop_tol, perm_c, perm_r,
+	       work, lwork, A, AC, superlumt_options, Gstat);
+  /* ------------------------------------------------------------
+     Compute the LU factorization of A.
+     The following routine will create nprocs threads.
+     ------------------------------------------------------------*/
+  pdgstrf(superlumt_options, AC, perm_r, L, U, Gstat, &info);
+    
+  if (info != 0) {
+    idasls_mem->s_last_flag = info;
+    return(+1);
+  }
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the IDASuperLUMT linear
+  solver module.  It calls the SuperLUMT solve routine, scales the
+  solution vector according to cjratio, then returns IDASLU_SUCCESS = 0.
+*/
+
+static int IDASuperLUMTSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+			     N_Vector ycur, N_Vector ypcur, N_Vector rrcur)
+{
+  int info, trans;
+  int *perm_r, *perm_c;
+  double cjratio;
+  IDASlsMem idasls_mem;
+  SuperMatrix *L, *U, *B;
+  Gstat_t *Gstat;
+  DNformat *Bstore;
+  SLUMTData slumt_data;
+  realtype *bd;
+  
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+  cjratio = IDA_mem->ida_cjratio;
+  slumt_data = (SLUMTData) idasls_mem->s_solver_data;
+
+  L = slumt_data->s_L;
+  U = slumt_data->s_U;
+  perm_r = slumt_data->perm_r;
+  perm_c = slumt_data->perm_c;
+  Gstat = slumt_data->Gstat;
+  B = slumt_data->s_B;
+   
+  bd = N_VGetArrayPointer(b);
+  Bstore = (DNformat *) (B->Store);
+  Bstore->nzval = bd;
+
+  /* Call SuperLUMT to solve the linear system using L and U */
+  trans = NOTRANS;
+  dgstrs(trans, L, U, perm_r, perm_c, B, Gstat, &info);
+
+  /* Scale the correction to account for change in cj. */
+  if (cjratio != ONE) N_VScale(TWO/(ONE + cjratio), b, b);
+
+  Bstore->nzval = NULL;
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+  return(IDASLS_SUCCESS);
+}
+
+/*
+  This routine frees memory specific to the IDASuperLUMT linear solver.
+*/
+
+static int IDASuperLUMTFree(IDAMem IDA_mem)
+{
+  IDASlsMem idasls_mem;
+  SLUMTData slumt_data;
+  
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+
+  slumt_data = (SLUMTData) idasls_mem->s_solver_data;
+
+  pxgstrf_finalize(slumt_data->superlumt_options, slumt_data->s_AC);
+
+  free(slumt_data->perm_r);
+  free(slumt_data->perm_c);
+  free(slumt_data->superlumt_options);
+  Destroy_SuperNode_SCP( (slumt_data->s_L) );
+  Destroy_CompCol_NCP( (slumt_data->s_U) );
+  StatFree( (slumt_data->Gstat) );
+  free(slumt_data->Gstat);
+  
+  Destroy_SuperMatrix_Store(slumt_data->s_B);
+  SUPERLU_FREE(slumt_data->s_A->Store);
+  if (idasls_mem->s_JacMat) {
+    SparseDestroyMat(idasls_mem->s_JacMat);
+    idasls_mem->s_JacMat = NULL;
+  }
+
+  free(slumt_data->s_B);
+  free(slumt_data->s_A);
+  free(slumt_data->s_AC);
+  free(slumt_data->s_L);
+  free(slumt_data->s_U);
+
+  free(slumt_data); 
+  slumt_data = NULL;
+ 
+  free(IDA_mem->ida_lmem); 
+  IDA_mem->ida_lmem = NULL;
+
+  return(IDASLS_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * IDASuperLUMTSetOrdering sets the ordering used by SuperLUMT for reducing fill.
+ * Options are: 
+ * 0 for natural ordering
+ * 1 for minimal degree ordering on A'*A
+ * 2 for minimal degree ordering on A'+A
+ * 3 for approximate minimal degree ordering for unsymmetric matrices
+ * The default used in SUNDIALS is 3 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+int IDASuperLUMTSetOrdering(void *ida_mem_v, int ordering_choice)
+{
+  IDAMem ida_mem;
+  IDASlsMem idasls_mem;
+  SLUMTData slumt_data;
+
+ /* Return immediately if ida_mem is NULL */
+  if (ida_mem_v == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDASuperLUMTSetOrdering",
+		    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  ida_mem = (IDAMem) ida_mem_v;
+  idasls_mem = (IDASlsMem) ida_mem->ida_lmem;
+
+ /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) && (ordering_choice != 3) ) {
+    IDAProcessError(NULL, IDASLS_ILL_INPUT, "IDASLS", "IDASuperLUMTSetOrdering",
+		    MSGSP_ILL_INPUT);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  slumt_data = (SLUMTData) idasls_mem->s_solver_data;
+
+  slumt_data->s_ordering = ordering_choice;
+
+  return(IDASLS_SUCCESS);
+}
+
+
+
+
diff --git a/src/idas/CMakeLists.txt b/src/idas/CMakeLists.txt
new file mode 100644
index 0000000..400a228
--- /dev/null
+++ b/src/idas/CMakeLists.txt
@@ -0,0 +1,160 @@
+# ---------------------------------------------------------------
+# $Revision: 4759 $
+# $Date: 2016-05-18 16:25:17 -0700 (Wed, 18 May 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the IDAS library
+
+INSTALL(CODE "MESSAGE(\"\nInstall IDAS\n\")")
+
+# Add variable idas_SOURCES with the sources for the IDAS library
+SET(idas_SOURCES
+  idas.c
+  idaa.c
+  idas_io.c
+  idas_ic.c
+  idaa_io.c
+  idas_direct.c
+  idas_band.c
+  idas_dense.c
+  idas_sparse.c
+  idas_spils.c
+  idas_spbcgs.c
+  idas_spgmr.c
+  idas_sptfqmr.c
+  idas_bbdpre.c
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND idas_SOURCES idas_klu.c)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND idas_SOURCES idas_superlumt.c)
+ENDIF()
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the IDAS library
+SET(shared_SOURCES
+  sundials_nvector.c
+  sundials_math.c
+  sundials_direct.c
+  sundials_band.c
+  sundials_dense.c
+  sundials_iterative.c
+  sundials_sparse.c
+  sundials_spbcgs.c
+  sundials_spgmr.c
+  sundials_sptfqmr.c
+  )
+
+# Add prefix with complete path to the common SUNDIALS sources
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable idas_HEADERS with the exported IDAS header files
+SET(idas_HEADERS
+  idas_band.h
+  idas_bbdpre.h
+  idas_dense.h
+  idas_direct.h
+  idas.h
+  idas_sparse.h
+  idas_spbcgs.h
+  idas_spgmr.h
+  idas_spils.h
+  idas_sptfqmr.h
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND idas_HEADERS idas_klu.h)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND idas_HEADERS idas_superlumt.h)
+ENDIF()
+
+# Add prefix with complete path to the IDAS header files
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/idas/ idas_HEADERS)
+
+# If Blas/Lapack support was enabled, set-up additional file lists
+IF(LAPACK_FOUND)
+  SET(idas_BL_SOURCES idas_lapack.c)
+  SET(idas_BL_HEADERS idas_lapack.h)
+  ADD_PREFIX(${sundials_SOURCE_DIR}/include/idas/ idas_BL_HEADERS)
+ELSE(LAPACK_FOUND)
+  SET(idas_BL_SOURCES "")
+  SET(idas_BL_HEADERS "")
+ENDIF(LAPACK_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  SET(idas_SLU_SOURCES idas_superlumt.c)
+  SET(idas_SLU_HEADERS idas_superlumt.h)
+  ADD_PREFIX(${sundials_SOURCE_DIR}/include/idas/ idas_SLU_HEADERS)
+ELSE(SUPERLUMT_FOUND)
+  SET(idas_SLU_SOURCES "")
+  SET(idas_SLU_HEADERS "")
+ENDIF(SUPERLUMT_FOUND)
+
+# Add source directories to include directories for access to
+# implementation only header files.
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(../sundials)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Build the static library
+IF(BUILD_STATIC_LIBS)
+
+  # Add the build target for the static IDAS library
+  ADD_LIBRARY(sundials_idas_static STATIC 
+    ${idas_SOURCES} ${idas_BL_SOURCES} ${idas_SLU_SOURCES}  ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_idas_static
+    PROPERTIES OUTPUT_NAME sundials_idas CLEAN_DIRECT_OUTPUT 1)
+
+  # Install the IDA library
+  INSTALL(TARGETS sundials_idas_static DESTINATION lib)
+
+ENDIF(BUILD_STATIC_LIBS)
+
+# Build the shared library
+IF(BUILD_SHARED_LIBS)
+
+  # Add the build target for the IDAS library
+  ADD_LIBRARY(sundials_idas_shared SHARED 
+    ${idas_SOURCES}  ${idas_BL_SOURCES} ${idas_SLU_SOURCES} ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_idas_shared
+    PROPERTIES OUTPUT_NAME sundials_idas CLEAN_DIRECT_OUTPUT 1)
+
+  # Set VERSION and SOVERSION for shared libraries
+  SET_TARGET_PROPERTIES(sundials_idas_shared
+    PROPERTIES VERSION ${idaslib_VERSION} SOVERSION ${idaslib_SOVERSION})
+
+  # Install the IDAS library
+  INSTALL(TARGETS sundials_idas_shared DESTINATION lib)
+
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the IDAS header files
+INSTALL(FILES ${idas_HEADERS} ${idas_BL_HEADERS} ${idas_SLU_HEADERS} DESTINATION include/idas)
+
+# Install the IDAS implementation header file
+INSTALL(FILES idas_impl.h DESTINATION include/idas)
+
+#
+MESSAGE(STATUS "Added IDAS module")
diff --git a/src/idas/LICENSE b/src/idas/LICENSE
new file mode 100644
index 0000000..27cf43f
--- /dev/null
+++ b/src/idas/LICENSE
@@ -0,0 +1,59 @@
+Copyright (c) 2002-2015, Lawrence Livermore National Security. 
+Produced at the Lawrence Livermore National Laboratory.
+Written by Radu Serban.
+UCRL-CODE-237203
+All rights reserved. 
+
+This file is part of IDAS.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the disclaimer below.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the disclaimer (as noted below)
+in the documentation and/or other materials provided with the
+distribution.
+
+3. Neither the name of the UC/LLNL nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+REGENTS OF THE UNIVERSITY OF CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Additional BSD Notice
+---------------------
+1. This notice is required to be provided under our contract with
+the U.S. Department of Energy (DOE). This work was produced at the
+University of California, Lawrence Livermore National Laboratory
+under Contract No. W-7405-ENG-48 with the DOE.
+
+2. Neither the United States Government nor the University of
+California nor any of their employees, makes any warranty, express
+or implied, or assumes any liability or responsibility for the
+accuracy, completeness, or usefulness of any information, apparatus,
+product, or process disclosed, or represents that its use would not
+infringe privately-owned rights.
+
+3. Also, reference herein to any specific commercial products,
+process, or services by trade name, trademark, manufacturer or
+otherwise does not necessarily constitute or imply its endorsement,
+recommendation, or favoring by the United States Government or the
+University of California. The views and opinions of authors expressed
+herein do not necessarily state or reflect those of the United States
+Government or the University of California, and shall not be used for
+advertising or product endorsement purposes.
diff --git a/src/idas/README b/src/idas/README
new file mode 100644
index 0000000..cc7c3e7
--- /dev/null
+++ b/src/idas/README
@@ -0,0 +1,80 @@
+                               IDAS
+                    Release 1.3.0, September 2016
+                           Radu Serban 
+              Center for Applied Scientific Computing, LLNL
+
+
+IDAS is a package for the solution of differential-algebraic equation (DAE) 
+systems with sensitivity analysis capabilities (both forward and adjoint modes). 
+It is written in ANSI standard C.
+
+IDAS can be used both on serial and parallel computers.  The main
+difference is in the NVECTOR module of vector kernels.  The desired
+version is obtained when compiling the example files by linking the
+appropriate library of NVECTOR kernels.  In the parallel versions,
+communication between processors is done with MPI, with OpenMP, 
+or with Pthreads.
+
+When used with the serial NVECTOR module, IDAS provides both direct 
+(dense and band) linear solvers and preconditioned Krylov (iterative) 
+linear solvers. Three different iterative solvers are available: scaled 
+preconditioned GMRES (SPGMR), scaled preconditioned BiCGStab (SPBCG), and 
+scaled preconditioned TFQMR (SPTFQMR). When IDAS is used with the parallel 
+NVECTOR module, only the Krylov linear solvers are available.  For the 
+latter case, in addition to the basic solver, the IDA package also contains 
+a preconditioner module called IDABBDPRE, which provides a band-block-diagonal 
+preconditioner.
+
+IDAS is part of a software family called SUNDIALS: SUite of Nonlinear and 
+DIfferential/ALgebraic equation Solvers [3].  This suite consists of CVODE, 
+CVODES, ARkode, IDA, IDAS, and KINSOL.  The directory structure of the 
+package supplied reflects this family relationship.
+
+Several examples problem programs are included, covering both serial
+and parallel cases, both small and large problem sizes, and both
+linear and nonlinear problems.
+
+The notes below provide the location of documentation, directions for the 
+installation of the IDAS package, and relevant references. Following that 
+is a brief history of revisions to the package.
+
+
+A. Documentation
+----------------
+
+/sundials/doc/idas/ contains PDF files for the IDAS User Guide [1] (idas_guide.pdf)
+and the IDAS Examples [2] (idas_examples.pdf) documents.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see the file /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see the "Installation Procedure"
+chapter in the IDAS User Guide.
+
+
+C. References
+-------------
+
+[1] R. Serban, C. Petra,and A. C. Hindmarsh,  "User Documentation for IDAS v1.3.0," 
+    LLNL technical report UCRL-SM-234051, March 2016.
+
+[2] R. Serban and A.C. Hindmarsh, "Example Programs for IDAS v1.3.0," 
+    LLNL technical report LLNL-TR-437091, March 2016.
+
+[3] A. C. Hindmarsh, P. N. Brown, K. E. Grant, S. L. Lee, R. Serban, 
+    D. E. Shumaker, and C. S. Woodward, "SUNDIALS, Suite of Nonlinear and 
+    Differential/Algebraic Equation Solvers," ACM Trans. Math. Softw., 
+    31(3), pp. 363-396, 2005.
+
+
+D. Releases
+-----------
+
+v. 1.3.0   - Sep. 2016
+v. 1.2.2   - Aug. 2015
+v. 1.2.1   - Mar. 2015
+v. 1.2.0   - Mar. 2015
+v. 1.1.0   - Mar. 2012
+v. 1.0.0   - May  2009
diff --git a/src/idas/idaa.c b/src/idas/idaa.c
new file mode 100644
index 0000000..3ee80d1
--- /dev/null
+++ b/src/idas/idaa.c
@@ -0,0 +1,3317 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4847 $
+ * $Date: 2016-08-03 15:50:53 -0700 (Wed, 03 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDAA adjoint integrator.
+ * -----------------------------------------------------------------
+ */
+
+/*=================================================================*/
+/*                  Import Header Files                            */
+/*=================================================================*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "idas_impl.h"
+#include <sundials/sundials_math.h>
+
+/*=================================================================*/
+/*                  Macros                                         */
+/*=================================================================*/
+
+#define loop for(;;)
+
+/*=================================================================*/
+/*                 IDAA Private Constants                          */
+/*=================================================================*/
+
+#define ZERO        RCONST(0.0)    /* real   0.0 */
+#define ONE         RCONST(1.0)    /* real   1.0 */
+#define TWO         RCONST(2.0)    /* real   2.0 */
+#define HUNDRED     RCONST(100.0)  /* real 100.0 */
+#define FUZZ_FACTOR RCONST(1000000.0)  /* fuzz factor for IDAAgetY */
+
+
+/*=================================================================*/
+/*               Private Functions Prototypes                      */
+/*=================================================================*/
+
+static CkpntMem IDAAckpntInit(IDAMem IDA_mem);
+static CkpntMem IDAAckpntNew(IDAMem IDA_mem);
+static void IDAAckpntCopyVectors(IDAMem IDA_mem, CkpntMem ck_mem);
+static booleantype IDAAckpntAllocVectors(IDAMem IDA_mem, CkpntMem ck_mem);
+static void IDAAckpntDelete(CkpntMem *ck_memPtr);
+
+static void IDAAbckpbDelete(IDABMem *IDAB_memPtr);
+
+static booleantype IDAAdataMalloc(IDAMem IDA_mem);
+static void IDAAdataFree(IDAMem IDA_mem);
+static int  IDAAdataStore(IDAMem IDA_mem, CkpntMem ck_mem);
+
+static int  IDAAckpntGet(IDAMem IDA_mem, CkpntMem ck_mem); 
+
+static booleantype IDAAhermiteMalloc(IDAMem IDA_mem);
+static void        IDAAhermiteFree(IDAMem IDA_mem);
+static int         IDAAhermiteStorePnt(IDAMem IDA_mem, DtpntMem d);
+static int         IDAAhermiteGetY(IDAMem IDA_mem, realtype t, 
+                                   N_Vector yy, N_Vector yp,
+                                   N_Vector *yyS, N_Vector *ypS);
+
+static booleantype IDAApolynomialMalloc(IDAMem IDA_mem);
+static void        IDAApolynomialFree(IDAMem IDA_mem);
+static int         IDAApolynomialStorePnt(IDAMem IDA_mem, DtpntMem d);
+static int         IDAApolynomialGetY(IDAMem IDA_mem, realtype t, 
+                                      N_Vector yy, N_Vector yp,
+                                      N_Vector *yyS, N_Vector *ypS);
+
+static int IDAAfindIndex(IDAMem ida_mem, realtype t, 
+                         long int *indx, booleantype *newpoint);                         
+
+static int IDAAres(realtype tt, 
+                   N_Vector yyB, N_Vector ypB, 
+                   N_Vector resvalB,  void *ida_mem);
+
+static int IDAArhsQ(realtype tt, 
+                     N_Vector yyB, N_Vector ypB,
+                     N_Vector rrQB, void *ida_mem);
+
+static int IDAAGettnSolutionYp(IDAMem IDA_mem, N_Vector yp);
+static int IDAAGettnSolutionYpS(IDAMem IDA_mem, N_Vector *ypS);
+
+extern int IDAGetSolution(void *ida_mem, realtype t, N_Vector yret, N_Vector ypret);
+
+/*=================================================================*/
+/*             Readibility Constants                               */
+/*=================================================================*/
+
+/* IDAADJ memory block */
+#define tinitial     (IDAADJ_mem->ia_tinitial)
+#define tfinal       (IDAADJ_mem->ia_tfinal)
+#define nckpnts      (IDAADJ_mem->ia_nckpnts)
+#define nbckpbs      (IDAADJ_mem->ia_nbckpbs)
+#define nsteps       (IDAADJ_mem->ia_nsteps)
+#define ckpntData    (IDAADJ_mem->ia_ckpntData)
+#define newData      (IDAADJ_mem->ia_newData)
+#define np           (IDAADJ_mem->ia_np)
+#define dt           (IDAADJ_mem->ia_dt)
+#define yyTmp        (IDAADJ_mem->ia_yyTmp)
+#define ypTmp        (IDAADJ_mem->ia_ypTmp)
+#define yySTmp       (IDAADJ_mem->ia_yySTmp)
+#define ypSTmp       (IDAADJ_mem->ia_ypSTmp)
+#define res_B        (IDAADJ_mem->ia_resB)
+#define djac_B       (IDAADJ_mem->ia_djacB)
+#define bjac_B       (IDAADJ_mem->ia_bjacB)
+#define pset_B       (IDAADJ_mem->ia_psetB)
+#define psolve_B     (IDAADJ_mem->ia_psolveB)
+#define jtimes_B     (IDAADJ_mem->ia_jtimesB)
+#define jdata_B      (IDAADJ_mem->ia_jdataB)
+#define pdata_B      (IDAADJ_mem->ia_pdataB)
+#define rhsQ_B       (IDAADJ_mem->ia_rhsQB)
+
+#define Y            (IDAADJ_mem->ia_Y)
+#define YS           (IDAADJ_mem->ia_YS)
+#define T            (IDAADJ_mem->ia_T)
+#define mallocDone   (IDAADJ_mem->ia_mallocDone)
+
+#define interpSensi  (IDAADJ_mem->ia_interpSensi)
+#define storeSensi   (IDAADJ_mem->ia_storeSensi)
+#define noInterp     (IDAADJ_mem->ia_noInterp)
+
+/* Forward IDAS memory block */
+#define uround     (IDA_mem->ida_uround)
+#define res        (IDA_mem->ida_res)
+#define itol       (IDA_mem->ida_itol)
+#define reltol     (IDA_mem->ida_reltol)
+#define abstol     (IDA_mem->ida_abstol)
+#define user_data  (IDA_mem->ida_user_data)
+
+#define forceSetup (IDA_mem->ida_forceSetup)
+#define h0u        (IDA_mem->ida_h0u)
+
+#define phi        (IDA_mem->ida_phi)
+#define psi        (IDA_mem->ida_psi)
+#define alpha      (IDA_mem->ida_alpha)
+#define beta       (IDA_mem->ida_beta)
+#define sigma      (IDA_mem->ida_sigma)
+#define gamma      (IDA_mem->ida_gamma)
+#define tn         (IDA_mem->ida_tn)
+#define kk         (IDA_mem->ida_kk)
+#define nst        (IDA_mem->ida_nst)
+#define tretlast   (IDA_mem->ida_tretlast)
+#define kk         (IDA_mem->ida_kk)
+#define kused      (IDA_mem->ida_kused)
+#define knew       (IDA_mem->ida_knew)
+#define maxord     (IDA_mem->ida_maxord)
+#define phase      (IDA_mem->ida_phase)
+#define ns         (IDA_mem->ida_ns)
+#define hh         (IDA_mem->ida_hh)
+#define hused      (IDA_mem->ida_hused)
+#define rr         (IDA_mem->ida_rr)
+#define cj         (IDA_mem->ida_cj)
+#define cjlast     (IDA_mem->ida_cjlast)
+#define cjold      (IDA_mem->ida_cjold)
+#define cjratio    (IDA_mem->ida_cjratio) 
+#define ss         (IDA_mem->ida_ss)
+#define ssS        (IDA_mem->ida_ssS)
+
+#define tempv      (IDA_mem->ida_tempv1)
+
+#define sensi      (IDA_mem->ida_sensi)
+#define Ns         (IDA_mem->ida_Ns)
+#define phiS       (IDA_mem->ida_phiS)
+
+#define quadr      (IDA_mem->ida_quadr)
+#define errconQ    (IDA_mem->ida_errconQ)
+#define phiQ       (IDA_mem->ida_phiQ)
+#define rhsQ       (IDA_mem->ida_rhsQ)
+
+#define quadr_sensi (IDA_mem->ida_quadr_sensi)
+#define errconQS   (IDA_mem->ida_errconQS)
+#define phiQS      (IDA_mem->ida_phiQS)
+
+#define tempvQ     (IDA_mem->ida_eeQ)
+
+/* Checkpoint memory block */
+
+#define t0_        (ck_mem->ck_t0)
+#define t1_        (ck_mem->ck_t1)
+#define phi_       (ck_mem->ck_phi)
+#define phiQ_      (ck_mem->ck_phiQ)
+#define psi_       (ck_mem->ck_psi)
+#define alpha_     (ck_mem->ck_alpha)
+#define beta_      (ck_mem->ck_beta)
+#define sigma_     (ck_mem->ck_sigma)
+#define gamma_     (ck_mem->ck_gamma)
+#define nst_       (ck_mem->ck_nst)
+#define tretlast_  (ck_mem->ck_tretlast)
+#define kk_        (ck_mem->ck_kk)
+#define kused_     (ck_mem->ck_kused)
+#define knew_      (ck_mem->ck_knew)
+#define phase_     (ck_mem->ck_phase)
+#define ns_        (ck_mem->ck_ns)
+#define hh_        (ck_mem->ck_hh)
+#define hused_     (ck_mem->ck_hused)
+#define rr_        (ck_mem->ck_rr)
+#define cj_        (ck_mem->ck_cj)
+#define cjlast_    (ck_mem->ck_cjlast)
+#define cjold_     (ck_mem->ck_cjold)
+#define cjratio_   (ck_mem->ck_cjratio)
+#define ss_        (ck_mem->ck_ss)
+#define ssS_       (ck_mem->ck_ssS)
+#define next_      (ck_mem->ck_next)
+#define phi_alloc_ (ck_mem->ck_phi_alloc)
+
+#define sensi_     (ck_mem->ck_sensi)
+#define Ns_        (ck_mem->ck_Ns)
+#define phiS_      (ck_mem->ck_phiS)
+
+#define quadr_     (ck_mem->ck_quadr)
+#define phiQS_     (ck_mem->ck_phiQS)
+
+#define quadr_sensi_ (ck_mem->ck_quadr_sensi)
+
+/*=================================================================*/
+/*                  Exported Functions                             */
+/*=================================================================*/
+
+/*
+ * IDAAdjInit 
+ *
+ * This routine allocates space for the global IDAA memory
+ * structure.
+ */
+
+
+int IDAAdjInit(void *ida_mem, long int steps, int interp)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+
+  /* Check arguments */
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAAdjInit", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem)ida_mem;
+
+  if (steps <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAAdjInit", MSGAM_BAD_STEPS);
+    return(IDA_ILL_INPUT);
+  }
+
+  if ( (interp != IDA_HERMITE) && (interp != IDA_POLYNOMIAL) ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAAdjInit", MSGAM_BAD_INTERP);
+    return(IDA_ILL_INPUT);
+  } 
+
+  /* Allocate memory block for IDAadjMem. */
+  IDAADJ_mem = (IDAadjMem) malloc(sizeof(struct IDAadjMemRec));
+  if (IDAADJ_mem == NULL) {
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAA", "IDAAdjInit", MSGAM_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  /* Attach IDAS memory for forward runs */
+  IDA_mem->ida_adj_mem = IDAADJ_mem;
+
+  /* Initialization of check points. */
+  IDAADJ_mem->ck_mem = NULL;
+  IDAADJ_mem->ia_nckpnts = 0;
+  IDAADJ_mem->ia_ckpntData = NULL;
+
+
+  /* Initialization of interpolation data. */
+  IDAADJ_mem->ia_interpType = interp;
+  IDAADJ_mem->ia_nsteps = steps;
+
+  /* Allocate space for the array of Data Point structures. */
+  if (IDAAdataMalloc(IDA_mem) == FALSE) {
+    free(IDAADJ_mem); IDAADJ_mem = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAA", "IDAAdjInit", MSGAM_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  /* Attach functions for the appropriate interpolation module */
+  switch(interp) {
+
+  case IDA_HERMITE:
+    IDAADJ_mem->ia_malloc    = IDAAhermiteMalloc;
+    IDAADJ_mem->ia_free      = IDAAhermiteFree;
+    IDAADJ_mem->ia_getY      = IDAAhermiteGetY;
+    IDAADJ_mem->ia_storePnt  = IDAAhermiteStorePnt;
+    break;
+    
+    case IDA_POLYNOMIAL:
+    
+    IDAADJ_mem->ia_malloc    = IDAApolynomialMalloc;
+    IDAADJ_mem->ia_free      = IDAApolynomialFree;
+    IDAADJ_mem->ia_getY      = IDAApolynomialGetY;
+    IDAADJ_mem->ia_storePnt  = IDAApolynomialStorePnt;
+    break;
+  }
+
+ /* The interpolation module has not been initialized yet */
+  IDAADJ_mem->ia_mallocDone = FALSE;
+
+  /* By default we will store but not interpolate sensitivities
+   *  - storeSensi will be set in IDASolveF to FALSE if FSA is not enabled
+   *    or if the user forced this through IDAAdjSetNoSensi 
+   *  - interpSensi will be set in IDASolveB to TRUE if storeSensi is TRUE 
+   *    and if at least one backward problem requires sensitivities 
+   *  - noInterp will be set in IDACalcICB to TRUE before the call to
+   *    IDACalcIC and FALSE after.*/
+
+  IDAADJ_mem->ia_storeSensi  = TRUE;
+  IDAADJ_mem->ia_interpSensi = FALSE;
+  IDAADJ_mem->ia_noInterp    = FALSE;
+
+  /* Initialize backward problems. */
+  IDAADJ_mem->IDAB_mem = NULL;
+  IDAADJ_mem->ia_bckpbCrt = NULL;
+  IDAADJ_mem->ia_nbckpbs = 0;
+
+  /* Flags for tracking the first calls to IDASolveF and IDASolveF. */
+  IDAADJ_mem->ia_firstIDAFcall = TRUE;
+  IDAADJ_mem->ia_tstopIDAFcall = FALSE;
+  IDAADJ_mem->ia_firstIDABcall = TRUE;
+
+  /* Adjoint module initialized and allocated. */
+  IDA_mem->ida_adj = TRUE;
+  IDA_mem->ida_adjMallocDone = TRUE;
+
+  return(IDA_SUCCESS);
+} 
+
+/*
+ * IDAAdjReInit
+ *
+ * IDAAdjReInit reinitializes the IDAS memory structure for ASA
+ */
+
+int IDAAdjReInit(void *ida_mem)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+
+  /* Check arguments */
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAAdjReInit", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem)ida_mem;
+
+  /* Was ASA previously initialized? */
+  if(IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAAdjReInit",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Free all stored  checkpoints. */
+  while (IDAADJ_mem->ck_mem != NULL) 
+      IDAAckpntDelete(&(IDAADJ_mem->ck_mem));
+
+  IDAADJ_mem->ck_mem = NULL;
+  IDAADJ_mem->ia_nckpnts = 0;
+  IDAADJ_mem->ia_ckpntData = NULL;
+
+  /* Flags for tracking the first calls to IDASolveF and IDASolveF. */
+  IDAADJ_mem->ia_firstIDAFcall = TRUE;
+  IDAADJ_mem->ia_tstopIDAFcall = FALSE;
+  IDAADJ_mem->ia_firstIDABcall = TRUE;
+
+  return(IDA_SUCCESS);
+} 
+
+/*
+ * IDAAdjFree
+ *
+ * IDAAdjFree routine frees the memory allocated by IDAAdjInit.
+*/
+
+
+void IDAAdjFree(void *ida_mem)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+
+  if (ida_mem == NULL) return;
+  IDA_mem = (IDAMem) ida_mem;
+
+  if(IDA_mem->ida_adjMallocDone) {
+
+    /* Data for adjoint. */
+    IDAADJ_mem = IDA_mem->ida_adj_mem;
+    
+    /* Delete check points one by one */
+    while (IDAADJ_mem->ck_mem != NULL) {
+      IDAAckpntDelete(&(IDAADJ_mem->ck_mem));
+    }
+
+    IDAAdataFree(IDA_mem);
+
+    /* Free all backward problems. */
+    while (IDAADJ_mem->IDAB_mem != NULL)
+      IDAAbckpbDelete( &(IDAADJ_mem->IDAB_mem) );
+
+    /* Free IDAA memory. */
+    free(IDAADJ_mem);
+
+    IDA_mem->ida_adj_mem = NULL;
+  }
+}
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTIONS FOR BACKWARD PROBLEMS
+ * =================================================================
+ */
+
+static void IDAAbckpbDelete(IDABMem *IDAB_memPtr)
+{
+  IDABMem IDAB_mem = (*IDAB_memPtr);
+  void * ida_mem;
+
+  if (IDAB_mem == NULL) return;
+
+  /* Move head to the next element in list. */
+  *IDAB_memPtr = IDAB_mem->ida_next;
+
+  /* IDAB_mem is going to be deallocated. */
+
+  /* Free IDAS memory for this backward problem. */
+  ida_mem = (void *)IDAB_mem->IDA_mem;
+  IDAFree(&ida_mem);
+
+  /* Free linear solver memory. */
+  if (IDAB_mem->ida_lfree != NULL) IDAB_mem->ida_lfree(IDAB_mem);
+
+  /* Free preconditioner memory. */
+  if (IDAB_mem->ida_pfree != NULL) IDAB_mem->ida_pfree(IDAB_mem);
+
+  /* Free any workspace vectors. */
+  N_VDestroy(IDAB_mem->ida_yy);
+  N_VDestroy(IDAB_mem->ida_yp);
+
+  /* Free the node itself. */
+  free(IDAB_mem);
+  IDAB_mem = NULL;
+}
+
+/*=================================================================*/
+/*                    Wrappers for IDAA                            */
+/*=================================================================*/
+
+/*
+ *                      IDASolveF 
+ *
+ * This routine integrates to tout and returns solution into yout.
+ * In the same time, it stores check point data every 'steps' steps. 
+ *  
+ * IDASolveF can be called repeatedly by the user. The last tout
+ *  will be used as the starting time for the backward integration.
+ * 
+ *  ncheckPtr points to the number of check points stored so far.
+*/
+
+int IDASolveF(void *ida_mem, realtype tout, realtype *tret,
+              N_Vector yret, N_Vector ypret, int itask, int *ncheckPtr)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  CkpntMem tmp;
+  DtpntMem *dt_mem;
+  int flag, i;
+  booleantype /* iret, */ allocOK;
+
+  /* Is the mem OK? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASolveF", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized ? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASolveF",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check for yret != NULL */
+  if (yret == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASolveF", MSG_YRET_NULL);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Check for ypret != NULL */
+  if (ypret == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASolveF", MSG_YPRET_NULL);
+    return(IDA_ILL_INPUT);
+  }
+  /* Check for tret != NULL */
+  if (tret == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASolveF", MSG_TRET_NULL);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Check for valid itask */
+  if ( (itask != IDA_NORMAL) && (itask != IDA_ONE_STEP) ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASolveF", MSG_BAD_ITASK);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* All memory checks done, proceed ... */
+  
+  dt_mem = IDAADJ_mem->dt_mem;
+
+  /* If tstop is enabled, store some info */
+  if (IDA_mem->ida_tstopset) {
+    IDAADJ_mem->ia_tstopIDAFcall = TRUE;
+    IDAADJ_mem->ia_tstopIDAF = IDA_mem->ida_tstop;
+  }
+  
+  /* We will call IDASolve in IDA_ONE_STEP mode, regardless
+     of what itask is, so flag if we need to return */
+/*   if (itask == IDA_ONE_STEP) iret = TRUE;
+ *   else                       iret = FALSE;
+ */
+
+  /* On the first step:
+   *   - set tinitial
+   *   - initialize list of check points
+   *   - if needed, initialize the interpolation module
+   *   - load dt_mem[0]
+   * On subsequent steps, test if taking a new step is necessary. 
+   */
+  if ( IDAADJ_mem->ia_firstIDAFcall ) {
+    
+    tinitial = tn;
+    IDAADJ_mem->ck_mem = IDAAckpntInit(IDA_mem);
+    if (IDAADJ_mem->ck_mem == NULL) {
+      IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAA", "IDASolveF", MSG_MEM_FAIL);
+      return(IDA_MEM_FAIL);
+    }
+
+    if (!mallocDone) {
+      /* Do we need to store sensitivities? */
+      if (!sensi) storeSensi = FALSE;
+
+      /* Allocate space for interpolation data */
+      allocOK = IDAADJ_mem->ia_malloc(IDA_mem);
+      if (!allocOK) {
+        IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAA", "IDASolveF", MSG_MEM_FAIL);
+        return(IDA_MEM_FAIL);
+      }
+
+      /* Rename phi and, if needed, phiS for use in interpolation */
+      for (i=0;i<MXORDP1;i++) Y[i] = phi[i];
+      if (storeSensi) {
+        for (i=0;i<MXORDP1;i++) YS[i] = phiS[i];
+      }
+
+      mallocDone = TRUE;
+    }
+
+    dt_mem[0]->t = IDAADJ_mem->ck_mem->ck_t0;
+    IDAADJ_mem->ia_storePnt(IDA_mem, dt_mem[0]);
+
+    IDAADJ_mem->ia_firstIDAFcall = FALSE;
+
+  } else if ( (tn-tout)*hh >= ZERO ) {
+
+    /* If tout was passed, return interpolated solution. 
+       No changes to ck_mem or dt_mem are needed. */
+    *tret = tout;
+    flag = IDAGetSolution(IDA_mem, tout, yret, ypret);
+    *ncheckPtr = nckpnts;
+    newData = TRUE;
+    ckpntData = IDAADJ_mem->ck_mem;
+    np = nst % nsteps + 1;
+
+    return(flag);
+  }
+  /* Integrate to tout while loading check points */
+  loop {
+
+    /* Perform one step of the integration */
+
+    flag = IDASolve(IDA_mem, tout, tret, yret, ypret, IDA_ONE_STEP);
+
+    if (flag < 0) break;
+
+    /* Test if a new check point is needed */
+
+    if ( nst % nsteps == 0 ) {
+
+      IDAADJ_mem->ck_mem->ck_t1 = *tret;
+
+      /* Create a new check point, load it, and append it to the list */
+      tmp = IDAAckpntNew(IDA_mem);
+      if (tmp == NULL) {
+        flag = IDA_MEM_FAIL;
+        break;
+      }
+
+      tmp->ck_next = IDAADJ_mem->ck_mem;
+      IDAADJ_mem->ck_mem = tmp;
+      nckpnts++;
+      
+      forceSetup = TRUE;
+      
+      /* Reset i=0 and load dt_mem[0] */
+      dt_mem[0]->t = IDAADJ_mem->ck_mem->ck_t0;
+      IDAADJ_mem->ia_storePnt(IDA_mem, dt_mem[0]);
+
+    } else {
+      
+      /* Load next point in dt_mem */
+      dt_mem[nst%nsteps]->t = *tret;
+      IDAADJ_mem->ia_storePnt(IDA_mem, dt_mem[nst%nsteps]);
+    }
+
+    /* Set t1 field of the current ckeck point structure
+       for the case in which there will be no future
+       check points */
+    IDAADJ_mem->ck_mem->ck_t1 = *tret;
+
+    /* tfinal is now set to *t */
+    tfinal = *tret;
+
+    /* In IDA_ONE_STEP mode break from loop */
+    if (itask == IDA_ONE_STEP) break;
+
+    /* Return if tout reached */
+    if ( (*tret - tout)*hh >= ZERO ) {
+      *tret = tout;
+      IDAGetSolution(IDA_mem, tout, yret, ypret);
+      /* Reset tretlast in IDA_mem so that IDAGetQuad and IDAGetSens 
+       * evaluate quadratures and/or sensitivities at the proper time */
+      IDA_mem->ida_tretlast = tout;
+      break;
+    }    
+  }
+
+  /* Get ncheck from IDAADJ_mem */ 
+  *ncheckPtr = nckpnts;
+
+  /* Data is available for the last interval */
+  newData = TRUE;
+  ckpntData = IDAADJ_mem->ck_mem;
+  np = nst % nsteps + 1;
+
+  return(flag);
+}
+
+
+
+
+/* 
+ * =================================================================
+ * FUNCTIONS FOR BACKWARD PROBLEMS
+ * =================================================================
+ */
+
+int IDACreateB(void *ida_mem, int *which)
+{
+  IDAMem IDA_mem;
+  void* ida_memB;
+  IDABMem new_IDAB_mem;
+  IDAadjMem IDAADJ_mem;
+  
+  /* Is the mem OK? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDACreateB", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized ? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDACreateB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Allocate a new IDABMem struct. */
+  new_IDAB_mem = (IDABMem) malloc( sizeof( struct IDABMemRec ) );
+  if (new_IDAB_mem == NULL) {
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAA", "IDACreateB",  MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+  
+  /* Allocate the IDAMem struct needed by this backward problem. */
+  ida_memB = IDACreate();
+  if (ida_memB == NULL) {
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAA", "IDACreateB",  MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  /* Save ida_mem in ida_memB as user data. */
+  IDASetUserData(ida_memB, ida_mem);
+  
+  /* Set same error output and handler for ida_memB. */
+  IDASetErrHandlerFn(ida_memB, IDA_mem->ida_ehfun, IDA_mem->ida_eh_data);
+  IDASetErrFile(ida_memB, IDA_mem->ida_errfp);
+
+  /* Initialize fields in the IDABMem struct. */
+  new_IDAB_mem->ida_index   = IDAADJ_mem->ia_nbckpbs;
+  new_IDAB_mem->IDA_mem     = (IDAMem) ida_memB;
+
+  new_IDAB_mem->ida_res      = NULL;
+  new_IDAB_mem->ida_resS     = NULL;
+  new_IDAB_mem->ida_rhsQ     = NULL;
+  new_IDAB_mem->ida_rhsQS    = NULL;
+
+
+  new_IDAB_mem->ida_user_data = NULL;
+
+  new_IDAB_mem->ida_lmem     = NULL;
+  new_IDAB_mem->ida_lfree    = NULL;
+  new_IDAB_mem->ida_pmem     = NULL;
+  new_IDAB_mem->ida_pfree    = NULL;
+
+  new_IDAB_mem->ida_yy       = NULL;
+  new_IDAB_mem->ida_yp       = NULL;
+
+  new_IDAB_mem->ida_res_withSensi = FALSE;
+  new_IDAB_mem->ida_rhsQ_withSensi = FALSE;
+  
+  /* Attach the new object to the beginning of the linked list IDAADJ_mem->IDAB_mem. */
+  new_IDAB_mem->ida_next = IDAADJ_mem->IDAB_mem;
+  IDAADJ_mem->IDAB_mem = new_IDAB_mem;
+
+  /* Return the assigned index. This id is used as identificator and has to be passed 
+     to IDAInitB and other ***B functions that set the optional inputs for  this 
+     backward problem. */
+  *which = IDAADJ_mem->ia_nbckpbs;
+
+  /*Increase the counter of the backward problems stored. */
+  IDAADJ_mem->ia_nbckpbs++;
+
+  return(IDA_SUCCESS);
+
+}
+
+int IDAInitB(void *ida_mem, int which, IDAResFnB resB,
+             realtype tB0, N_Vector yyB0, N_Vector ypB0)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void * ida_memB;
+  int flag;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAInitB", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized ? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAInitB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the initial time for this backward problem against the adjoint data. */
+  if ( (tB0 < tinitial) || (tB0 > tfinal) ) {
+    IDAProcessError(IDA_mem, IDA_BAD_TB0, "IDAA", "IDAInitB", MSGAM_BAD_TB0);
+    return(IDA_BAD_TB0);
+  }
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAInitB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+
+  /* Call the IDAInit for this backward problem. */
+  flag = IDAInit(ida_memB, IDAAres, tB0, yyB0, ypB0);
+  if (IDA_SUCCESS != flag) return(flag);
+
+  /* Copy residual function in IDAB_mem. */
+  IDAB_mem->ida_res = resB;
+  IDAB_mem->ida_res_withSensi = FALSE;
+
+  /* Initialized the initial time field. */
+  IDAB_mem->ida_t0 = tB0;
+
+  /* Allocate and initialize space workspace vectors. */
+  IDAB_mem->ida_yy = N_VClone(yyB0);
+  IDAB_mem->ida_yp = N_VClone(yyB0);
+  N_VScale(ONE, yyB0, IDAB_mem->ida_yy);
+  N_VScale(ONE, ypB0, IDAB_mem->ida_yp);
+
+  return(flag);
+
+}
+
+int IDAInitBS(void *ida_mem, int which, IDAResFnBS resS,
+                realtype tB0, N_Vector yyB0, N_Vector ypB0)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void * ida_memB;
+  int flag;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAInitBS", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized ? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAInitBS",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the initial time for this backward problem against the adjoint data. */
+  if ( (tB0 < tinitial) || (tB0 > tfinal) ) {
+    IDAProcessError(IDA_mem, IDA_BAD_TB0, "IDAA", "IDAInitBS", MSGAM_BAD_TB0);
+    return(IDA_BAD_TB0);
+  }
+
+  /* Were sensitivities active during the forward integration? */
+  if (!storeSensi) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAInitBS", MSGAM_BAD_SENSI);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAInitBS", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+  
+  /* Allocate and set the IDAS object */
+  flag = IDAInit(ida_memB, IDAAres, tB0, yyB0, ypB0);
+
+  if (flag != IDA_SUCCESS) return(flag);
+
+  /* Copy residual function pointer in IDAB_mem. */
+  IDAB_mem->ida_res_withSensi = TRUE;
+  IDAB_mem->ida_resS = resS;
+
+  /* Allocate space and initialize the yy and yp vectors. */
+  IDAB_mem->ida_t0 = tB0;
+  IDAB_mem->ida_yy = N_VClone(yyB0);
+  IDAB_mem->ida_yp = N_VClone(ypB0);
+  N_VScale(ONE, yyB0, IDAB_mem->ida_yy);
+  N_VScale(ONE, ypB0, IDAB_mem->ida_yp);
+
+  return(IDA_SUCCESS);
+}
+
+
+int IDAReInitB(void *ida_mem, int which,
+               realtype tB0, N_Vector yyB0, N_Vector ypB0)
+{
+
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void * ida_memB;
+  int flag;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAReInitB", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized ? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAReInitB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the initial time for this backward problem against the adjoint data. */
+  if ( (tB0 < tinitial) || (tB0 > tfinal) ) {
+    IDAProcessError(IDA_mem, IDA_BAD_TB0, "IDAA", "IDAReInitB", MSGAM_BAD_TB0);
+    return(IDA_BAD_TB0);
+  }
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAReInitB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+
+
+  /* Call the IDAReInit for this backward problem. */
+  flag = IDAReInit(ida_memB, tB0, yyB0, ypB0);
+  return(flag);
+}
+
+int IDASStolerancesB(void *ida_mem, int which, 
+                     realtype relTolB, realtype absTolB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASStolerancesB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASStolerancesB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASStolerancesB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+
+  /* Set tolerances and return. */
+  return IDASStolerances(ida_memB, relTolB, absTolB);
+  
+}
+int IDASVtolerancesB(void *ida_mem, int which, 
+                     realtype relTolB, N_Vector absTolB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASVtolerancesB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASVtolerancesB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASVtolerancesB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+
+  /* Set tolerances and return. */
+  return IDASVtolerances(ida_memB, relTolB, absTolB);
+}
+
+int IDAQuadSStolerancesB(void *ida_mem, int which,
+                         realtype reltolQB, realtype abstolQB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAQuadSStolerancesB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAQuadSStolerancesB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAQuadSStolerancesB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+  
+  return IDAQuadSStolerances(ida_memB, reltolQB, abstolQB);
+}
+
+
+int IDAQuadSVtolerancesB(void *ida_mem, int which,
+                         realtype reltolQB, N_Vector abstolQB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAQuadSVtolerancesB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAQuadSVtolerancesB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAQuadSVtolerancesB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+  
+  return IDAQuadSVtolerances(ida_memB, reltolQB, abstolQB);
+}
+
+
+int IDAQuadInitB(void *ida_mem, int which, IDAQuadRhsFnB rhsQB, N_Vector yQB0)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAQuadInitB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAQuadInitB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAQuadInitB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  flag = IDAQuadInit(ida_memB, IDAArhsQ, yQB0);
+  if (IDA_SUCCESS != flag) return flag;
+
+  IDAB_mem->ida_rhsQ_withSensi = FALSE;
+  IDAB_mem->ida_rhsQ = rhsQB;
+
+  return(flag);
+}
+
+
+int IDAQuadInitBS(void *ida_mem, int which, 
+                  IDAQuadRhsFnBS rhsQS, N_Vector yQB0)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void * ida_memB;
+  int flag;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAQuadInitBS", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized ? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAQuadInitBS",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAQuadInitBS", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+  
+  /* Allocate and set the IDAS object */
+  flag = IDAQuadInit(ida_memB, IDAArhsQ, yQB0);
+
+  if (flag != IDA_SUCCESS) return(flag);
+
+  /* Copy RHS function pointer in IDAB_mem and enable quad sensitivities. */
+  IDAB_mem->ida_rhsQ_withSensi = TRUE;
+  IDAB_mem->ida_rhsQS = rhsQS;
+
+  return(IDA_SUCCESS);
+}
+
+
+int IDAQuadReInitB(void *ida_mem, int which, N_Vector yQB0)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAQuadInitB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAQuadInitB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAQuadInitB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  return IDAQuadReInit(ida_mem, yQB0);
+}
+
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDACalcICB                                         
+ * ----------------------------------------------------------------
+ * IDACalcIC calculates corrected initial conditions for a DAE  
+ * backward system (index-one in semi-implicit form).
+ * It uses Newton iteration combined with a Linesearch algorithm. 
+ * Calling IDACalcICB is optional. It is only necessary when the   
+ * initial conditions do not solve the given system.  I.e., if    
+ * yB0 and ypB0 are known to satisfy the backward problem, then       
+ * a call to IDACalcIC is NOT necessary (for index-one problems). 
+*/
+
+int IDACalcICB(void *ida_mem, int which, realtype tout1, 
+               N_Vector yy0, N_Vector yp0)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDACalcICB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDACalcICB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDACalcICB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  /* The wrapper for user supplied res function requires ia_bckpbCrt from
+     IDAAdjMem to be set to curent problem. */
+  IDAADJ_mem->ia_bckpbCrt = IDAB_mem;
+
+  /* Save (y, y') in yyTmp and ypTmp for use in the res wrapper.*/
+  /* yyTmp and ypTmp workspaces are safe to use if IDAADataStore is not called.*/
+  N_VScale(ONE, yy0, yyTmp);
+  N_VScale(ONE, yp0, ypTmp);
+  
+  /* Set noInterp flag to true, so IDAARes will use user provided values for
+     y and y' and will not call the interpolation routine(s). */
+  noInterp = TRUE;
+  
+  flag = IDACalcIC(ida_memB, IDA_YA_YDP_INIT, tout1);
+
+  /* Set interpolation on in IDAARes. */
+  noInterp = FALSE;
+
+  return(flag);
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : IDACalcICBS                                        
+ * ----------------------------------------------------------------
+ * IDACalcIC calculates corrected initial conditions for a DAE  
+ * backward system (index-one in semi-implicit form) that also 
+ * dependes on the sensivities.
+ *
+ * It calls IDACalcIC for the 'which' backward problem.
+*/
+
+int IDACalcICBS(void *ida_mem, int which, realtype tout1, 
+               N_Vector yy0, N_Vector yp0, 
+               N_Vector *yyS0, N_Vector *ypS0)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  int flag, is;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDACalcICBS", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDACalcICBS",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Were sensitivities active during the forward integration? */
+  if (!storeSensi) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDACalcICBS", MSGAM_BAD_SENSI);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDACalcICBS", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  /* Was InitBS called for this problem? */
+  if (!IDAB_mem->ida_res_withSensi) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDACalcICBS", MSGAM_NO_INITBS);
+    return(IDA_ILL_INPUT);    
+  }
+
+  /* The wrapper for user supplied res function requires ia_bckpbCrt from
+     IDAAdjMem to be set to curent problem. */
+  IDAADJ_mem->ia_bckpbCrt = IDAB_mem;
+
+  /* Save (y, y') and (y_p, y'_p) in yyTmp, ypTmp and yySTmp, ypSTmp.The wrapper 
+     for residual will use these values instead of calling interpolation routine.*/
+
+  /* The four workspaces variables are safe to use if IDAADataStore is not called.*/
+  N_VScale(ONE, yy0, yyTmp);
+  N_VScale(ONE, yp0, ypTmp);
+
+  for (is=0; is<Ns; is++) {
+    N_VScale(ONE, yyS0[is], yySTmp[is]);
+    N_VScale(ONE, ypS0[is], ypSTmp[is]);
+  }
+  
+  /* Set noInterp flag to true, so IDAARes will use user provided values for
+     y and y' and will not call the interpolation routine(s). */
+  noInterp = TRUE;
+  
+  flag = IDACalcIC(ida_memB, IDA_YA_YDP_INIT, tout1);
+
+  /* Set interpolation on in IDAARes. */
+  noInterp = FALSE;
+
+  return(flag);
+}
+
+
+/*
+ * IDASolveB
+ *
+ * This routine performs the backward integration from tB0 
+ * to tinitial through a sequence of forward-backward runs in
+ * between consecutive check points. It returns the values of
+ * the adjoint variables and any existing quadrature variables
+ * at tinitial.
+ *
+ * On a successful return, IDASolveB returns IDA_SUCCESS.
+ *
+ * NOTE that IDASolveB DOES NOT return the solution for the 
+ * backward problem(s). Use IDAGetB to extract the solution 
+ * for any given backward problem.
+ *
+ * If there are multiple backward problems and multiple check points,
+ * IDASolveB may not succeed in getting all problems to take one step
+ * when called in ONE_STEP mode.
+ */
+
+int IDASolveB(void *ida_mem, realtype tBout, int itaskB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  CkpntMem ck_mem;
+  IDABMem IDAB_mem, tmp_IDAB_mem;
+  int flag=0, sign;
+  realtype tfuzz, tBret, tBn;
+  booleantype gotCkpnt, reachedTBout, isActive;
+
+  /* Is the mem OK? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASolveB", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized ? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASolveB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  if ( nbckpbs == 0 ) {
+    IDAProcessError(IDA_mem, IDA_NO_BCK, "IDAA", "IDASolveB", MSGAM_NO_BCK);
+    return(IDA_NO_BCK);
+  }
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+
+  /* Check whether IDASolveF has been called */
+  if ( IDAADJ_mem->ia_firstIDAFcall ) {
+    IDAProcessError(IDA_mem, IDA_NO_FWD, "IDAA", "IDASolveB", MSGAM_NO_FWD);
+    return(IDA_NO_FWD);
+  }
+  sign = (tfinal - tinitial > ZERO) ? 1 : -1;
+
+  /* If this is the first call, loop over all backward problems and
+   *   - check that tB0 is valid
+   *   - check that tBout is ahead of tB0 in the backward direction
+   *   - check whether we need to interpolate forward sensitivities
+   */
+  if (IDAADJ_mem->ia_firstIDABcall) {
+
+    /* First IDABMem struct. */
+    tmp_IDAB_mem = IDAB_mem;
+    
+    while (tmp_IDAB_mem != NULL) {
+
+      tBn = tmp_IDAB_mem->IDA_mem->ida_tn;
+
+      if ( (sign*(tBn-tinitial) < ZERO) || (sign*(tfinal-tBn) < ZERO) ) {
+        IDAProcessError(IDA_mem, IDA_BAD_TB0, "IDAA", "IDASolveB", 
+                        MSGAM_BAD_TB0, tmp_IDAB_mem->ida_index);
+        return(IDA_BAD_TB0);
+      }
+
+      if (sign*(tBn-tBout) <= ZERO) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASolveB", MSGAM_BAD_TBOUT,
+                       tmp_IDAB_mem->ida_index);
+        return(IDA_ILL_INPUT);
+      }
+
+      if ( tmp_IDAB_mem->ida_res_withSensi || 
+           tmp_IDAB_mem->ida_rhsQ_withSensi ) interpSensi = TRUE;
+
+      /* Advance in list. */
+      tmp_IDAB_mem = tmp_IDAB_mem->ida_next;      
+    }
+
+    if ( interpSensi && !storeSensi) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASolveB", MSGAM_BAD_SENSI);
+      return(IDA_ILL_INPUT);
+    }
+
+    IDAADJ_mem->ia_firstIDABcall = FALSE;
+  }
+
+  /* Check for valid itask */
+  if ( (itaskB != IDA_NORMAL) && (itaskB != IDA_ONE_STEP) ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASolveB", MSG_BAD_ITASK);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Check if tBout is legal */
+  if ( (sign*(tBout-tinitial) < ZERO) || (sign*(tfinal-tBout) < ZERO) ) {
+    tfuzz = HUNDRED*uround*(SUNRabs(tinitial) + SUNRabs(tfinal));
+    if ( (sign*(tBout-tinitial) < ZERO) && (SUNRabs(tBout-tinitial) < tfuzz) ) {
+      tBout = tinitial;
+    } else {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASolveB", MSGAM_BAD_TBOUT);
+      return(IDA_ILL_INPUT);
+    }
+  }
+
+  /* Loop through the check points and stop as soon as a backward
+   * problem has its tn value behind the current check point's t0_
+   * value (in the backward direction) */
+
+  ck_mem = IDAADJ_mem->ck_mem;
+
+  gotCkpnt = FALSE;
+
+  loop {
+    tmp_IDAB_mem = IDAB_mem;
+    while(tmp_IDAB_mem != NULL) {
+      tBn = tmp_IDAB_mem->IDA_mem->ida_tn;
+
+      if ( sign*(tBn-t0_) > ZERO ) {
+        gotCkpnt = TRUE;
+        break;
+      }
+
+      if ( (itaskB == IDA_NORMAL) && (tBn == t0_) && (sign*(tBout-t0_) >= ZERO) ) {
+        gotCkpnt = TRUE;
+        break;
+      }
+
+      tmp_IDAB_mem = tmp_IDAB_mem->ida_next;
+    }
+
+    if (gotCkpnt) break;
+
+    if (ck_mem->ck_next == NULL) break;
+
+    ck_mem = ck_mem->ck_next;
+  }
+
+  /* Loop while propagating backward problems */
+  loop {
+
+    /* Store interpolation data if not available.
+       This is the 2nd forward integration pass */
+    if (ck_mem != ckpntData) {
+
+      flag = IDAAdataStore(IDA_mem, ck_mem);
+      if (flag != IDA_SUCCESS) break;
+    }
+
+    /* Starting with the current check point from above, loop over check points
+       while propagating backward problems */
+
+    tmp_IDAB_mem = IDAB_mem;
+    while (tmp_IDAB_mem != NULL) {
+
+      /* Decide if current backward problem is "active" in this check point */
+      isActive = TRUE;
+
+      tBn = tmp_IDAB_mem->IDA_mem->ida_tn;
+
+      if ( (tBn == t0_) && (sign*(tBout-t0_) < ZERO ) ) isActive = FALSE;
+      if ( (tBn == t0_) && (itaskB == IDA_ONE_STEP) ) isActive = FALSE;
+      if ( sign*(tBn - t0_) < ZERO ) isActive = FALSE;
+
+      if ( isActive ) {
+        /* Store the address of current backward problem memory 
+         * in IDAADJ_mem to be used in the wrapper functions */
+        IDAADJ_mem->ia_bckpbCrt = tmp_IDAB_mem;
+
+        /* Integrate current backward problem */
+        IDASetStopTime(tmp_IDAB_mem->IDA_mem, t0_);
+        flag = IDASolve(tmp_IDAB_mem->IDA_mem, tBout, &tBret, 
+                        tmp_IDAB_mem->ida_yy, tmp_IDAB_mem->ida_yp, 
+                        itaskB);
+
+        /* Set the time at which we will report solution and/or quadratures */
+        tmp_IDAB_mem->ida_tout = tBret;
+
+        /* If an error occurred, exit while loop */
+        if (flag < 0) break;
+
+      } else {
+
+        flag = IDA_SUCCESS;
+        tmp_IDAB_mem->ida_tout = tBn;
+      }
+
+      /* Move to next backward problem */
+      tmp_IDAB_mem = tmp_IDAB_mem->ida_next;
+    } /* End of while: iteration through backward problems. */
+    
+    /* If an error occurred, return now */
+    if (flag <0) {
+      IDAProcessError(IDA_mem, flag, "IDAA", "IDASolveB",
+                      MSGAM_BACK_ERROR, tmp_IDAB_mem->ida_index);
+      return(flag);
+    }
+
+    /* If in IDA_ONE_STEP mode, return now (flag = IDA_SUCCESS) */
+    if (itaskB == IDA_ONE_STEP) break;
+
+    /* If all backward problems have succesfully reached tBout, return now */
+    reachedTBout = TRUE;
+
+    tmp_IDAB_mem = IDAB_mem;
+    while(tmp_IDAB_mem != NULL) {
+      if ( sign*(tmp_IDAB_mem->ida_tout - tBout) > ZERO ) {
+        reachedTBout = FALSE;
+        break;
+      }
+      tmp_IDAB_mem = tmp_IDAB_mem->ida_next;
+    }
+
+    if ( reachedTBout ) break;
+
+    /* Move check point in linked list to next one */
+    ck_mem = ck_mem->ck_next;
+
+  } /* End of loop. */
+
+  return(flag);
+}
+
+
+/*
+ * IDAGetB
+ *
+ * IDAGetB returns the state variables at the same time (also returned 
+ * in tret) as that at which IDASolveBreturned the solution.
+ */
+
+SUNDIALS_EXPORT int IDAGetB(void* ida_mem, int which, realtype *tret,
+                            N_Vector yy, N_Vector yp)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAGetB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAGetB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAGetB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  N_VScale(ONE, IDAB_mem->ida_yy, yy);
+  N_VScale(ONE, IDAB_mem->ida_yp, yp);
+  *tret = IDAB_mem->ida_tout;
+
+  return(IDA_SUCCESS);
+}
+
+
+
+/*
+ * IDAGetQuadB
+ *
+ * IDAGetQuadB returns the quadrature variables at the same 
+ * time (also returned in tret) as that at which IDASolveB 
+ * returned the solution.
+ */
+
+int IDAGetQuadB(void *ida_mem, int which, realtype *tret, N_Vector qB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  int flag;
+  long int nstB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAGetQuadB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAGetQuadB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAGetQuadB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  /* If the integration for this backward problem has not started yet,
+   * simply return the current value of qB (i.e. the final conditions) */
+
+  flag = IDAGetNumSteps(ida_memB, &nstB);
+  if (IDA_SUCCESS != flag) return(flag);
+
+  if (nstB == 0) {
+    N_VScale(ONE, IDAB_mem->IDA_mem->ida_phiQ[0], qB);
+    *tret = IDAB_mem->ida_tout;
+  } else {
+    flag = IDAGetQuad(ida_memB, tret, qB);
+  }
+  return(flag);
+}
+
+/*=================================================================*/
+/*                Private Functions Implementation                 */
+/*=================================================================*/
+
+/*
+ * IDAAckpntInit
+ *
+ * This routine initializes the check point linked list with 
+ * information from the initial time.
+*/
+
+static CkpntMem IDAAckpntInit(IDAMem IDA_mem)
+{
+  CkpntMem ck_mem;
+
+  /* Allocate space for ckdata */
+  ck_mem = (CkpntMem) malloc(sizeof(struct CkpntMemRec));
+  if (NULL==ck_mem) return(NULL);
+
+  t0_    = tn;
+  nst_   = 0;
+  kk_    = 1;
+  hh_    = ZERO;
+
+  /* Test if we need to carry quadratures */
+  quadr_ = quadr && errconQ;
+
+  /* Test if we need to carry sensitivities */
+  sensi_ = sensi;
+  if(sensi_) Ns_    = Ns;
+
+  /* Test if we need to carry quadrature sensitivities */
+  quadr_sensi_ = quadr_sensi && errconQS;
+
+  /* Alloc 3: current order, i.e. 1,  +   2. */
+  phi_alloc_ = 3;
+  
+  if (!IDAAckpntAllocVectors(IDA_mem, ck_mem)) {
+    free(ck_mem); ck_mem = NULL;
+    return(NULL);
+  }
+  /* Save phi* vectors from IDA_mem to ck_mem. */
+  IDAAckpntCopyVectors(IDA_mem, ck_mem);
+
+  /* Next in list */
+  next_  = NULL;
+
+  return(ck_mem);
+}
+
+/*
+ * IDAAckpntNew
+ *
+ * This routine allocates space for a new check point and sets 
+ * its data from current values in IDA_mem.
+*/
+
+static CkpntMem IDAAckpntNew(IDAMem IDA_mem)
+{
+  CkpntMem ck_mem;
+  int j;
+
+  /* Allocate space for ckdata */
+  ck_mem = (CkpntMem) malloc(sizeof(struct CkpntMemRec));
+  if (ck_mem == NULL) return(NULL);
+
+  nst_       = nst;
+  tretlast_  = tretlast;
+  kk_        = kk;
+  kused_     = kused;
+  knew_      = knew;
+  phase_     = phase;
+  ns_        = ns;
+  hh_        = hh;
+  hused_     = hused;
+  rr_        = rr;
+  cj_        = cj;
+  cjlast_    = cjlast;
+  cjold_     = cjold;
+  cjratio_   = cjratio;
+  ss_        = ss;
+  ssS_       = ssS;
+  t0_        = tn;
+
+  for (j=0; j<MXORDP1; j++) {
+    psi_[j]   = psi[j];
+    alpha_[j] = alpha[j];
+    beta_[j]  = beta[j];
+    sigma_[j] = sigma[j];
+    gamma_[j] = gamma[j];
+  }
+
+  /* Test if we need to carry quadratures */
+  quadr_ = quadr && errconQ;
+
+  /* Test if we need to carry sensitivities */
+  sensi_ = sensi;
+  if(sensi_) Ns_    = Ns;
+
+  /* Test if we need to carry quadrature sensitivities */
+  quadr_sensi_ = quadr_sensi && errconQS;
+
+  phi_alloc_ =  kk+2 < MXORDP1 ? kk+2 : MXORDP1;
+
+  if (!IDAAckpntAllocVectors(IDA_mem, ck_mem)) {
+    free(ck_mem); ck_mem = NULL;
+    return(NULL);
+  }
+
+  /* Save phi* vectors from IDA_mem to ck_mem. */
+  IDAAckpntCopyVectors(IDA_mem, ck_mem);
+
+  return(ck_mem);
+}
+
+/* IDAAckpntDelete 
+ *
+ * This routine deletes the first check point in list.
+*/
+
+static void IDAAckpntDelete(CkpntMem *ck_memPtr)
+{
+  CkpntMem tmp;
+  int j;
+
+  if (*ck_memPtr != NULL) {
+    /* store head of list */
+    tmp = *ck_memPtr;
+    /* move head of list */
+    *ck_memPtr = (*ck_memPtr)->ck_next;
+
+    /* free N_Vectors in tmp */
+    for (j=0; j<tmp->ck_phi_alloc; j++) 
+      N_VDestroy(tmp->ck_phi[j]);
+
+    /* free N_Vectors for quadratures in tmp */
+    if (tmp->ck_quadr) {
+      for (j=0; j<tmp->ck_phi_alloc; j++) 
+        N_VDestroy(tmp->ck_phiQ[j]);
+    }
+
+    /* Free sensitivity related data. */
+    if (tmp->ck_sensi) {
+      for (j=0; j<tmp->ck_phi_alloc; j++) 
+        N_VDestroyVectorArray(tmp->ck_phiS[j], tmp->ck_Ns);
+    }
+    
+    if (tmp->ck_quadr_sensi) {
+      for (j=0; j<tmp->ck_phi_alloc; j++) 
+        N_VDestroyVectorArray(tmp->ck_phiQS[j], tmp->ck_Ns);
+    }
+
+    free(tmp); tmp=NULL;
+  }
+}
+
+/* 
+ * IDAAckpntAllocVectors
+ *
+ * Allocate checkpoint's phi, phiQ, phiS, phiQS vectors needed to save 
+ * current state of IDAMem.
+ *
+ */
+static booleantype IDAAckpntAllocVectors(IDAMem IDA_mem, CkpntMem ck_mem)
+{
+  int j, jj;
+
+  for (j=0; j<phi_alloc_; j++) {
+    phi_[j] = N_VClone(tempv);
+    if(phi_[j] == NULL) {    
+      for(jj=0; jj<j; jj++) N_VDestroy(phi_[jj]);
+      return(FALSE);
+    }
+  }
+
+  /* Do we need to carry quadratures? */
+  if(quadr_) {
+    for (j=0; j<phi_alloc_; j++) {
+      phiQ_[j] = N_VClone(tempvQ);
+      if(phiQ_[j] == NULL)  {        
+        for (jj=0; jj<j; jj++) N_VDestroy(phiQ_[jj]);
+
+        for(jj=0; jj<phi_alloc_; jj++) N_VDestroy(phi_[jj]);
+
+        return(FALSE);
+      }
+    }
+  }
+
+  /* Do we need to carry sensitivities? */
+  if(sensi_) {
+
+    for (j=0; j<phi_alloc_; j++) {
+      phiS_[j] = N_VCloneVectorArray(Ns, tempv);
+      if (phiS_[j] == NULL) {
+        for (jj=0; jj<j; jj++) N_VDestroyVectorArray(phiS_[jj], Ns);
+
+        if (quadr_)
+          for (jj=0; jj<phi_alloc_; jj++) N_VDestroy(phiQ_[jj]);
+
+        for (jj=0; jj<phi_alloc_; jj++) N_VDestroy(phi_[jj]);
+
+        return(FALSE);
+      }
+    }
+  }
+
+  /* Do we need to carry quadrature sensitivities? */
+  if (quadr_sensi_) {
+
+    for (j=0; j<phi_alloc_; j++) {
+      phiQS_[j] = N_VCloneVectorArray(Ns, tempvQ);
+      if (phiQS_[j] == NULL) {
+
+        for (jj=0; jj<j; jj++) N_VDestroyVectorArray(phiQS_[jj], Ns);
+
+        for (jj=0; jj<phi_alloc_; jj++) N_VDestroyVectorArray(phiS_[jj], Ns);
+
+        if (quadr_) 
+          for (jj=0; jj<phi_alloc_; jj++) N_VDestroy(phiQ_[jj]);
+
+        for (jj=0; jj<phi_alloc_; jj++) N_VDestroy(phi_[jj]);
+
+        return(FALSE);
+      }
+    }
+  }
+  return(TRUE);
+}
+
+/* 
+ * IDAAckpntCopyVectors
+ *
+ * Copy phi* vectors from IDAMem in the corresponding vectors from checkpoint
+ *
+ */
+static void IDAAckpntCopyVectors(IDAMem IDA_mem, CkpntMem ck_mem)
+{
+  int j, is;
+
+  /* Save phi* arrays from IDA_mem */
+
+  for (j=0; j<phi_alloc_; j++) N_VScale(ONE, phi[j], phi_[j]);
+
+  if (quadr_) {
+    for (j=0; j<phi_alloc_; j++) N_VScale(ONE, phiQ[j], phiQ_[j]);
+  }
+
+  if (sensi_) {
+    for (is=0; is<Ns; is++)
+      for (j=0; j<phi_alloc_; j++) 
+        N_VScale(ONE, phiS[j][is], phiS_[j][is]);
+  }
+
+  if(quadr_sensi_) {
+    for (is=0; is<Ns; is++)
+      for (j=0; j<phi_alloc_; j++) 
+        N_VScale(ONE, phiQS[j][is], phiQS_[j][is]);
+
+  }
+}
+
+/*
+ * IDAAdataMalloc
+ *
+ * This routine allocates memory for storing information at all
+ * intermediate points between two consecutive check points. 
+ * This data is then used to interpolate the forward solution 
+ * at any other time.
+*/
+
+static booleantype IDAAdataMalloc(IDAMem IDA_mem)
+{
+  IDAadjMem IDAADJ_mem;
+  DtpntMem *dt_mem;
+  long int i, j;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  IDAADJ_mem->dt_mem = NULL;
+
+  dt_mem = (DtpntMem *)malloc((nsteps+1)*sizeof(struct DtpntMemRec *));
+  if (dt_mem==NULL) return(FALSE);
+
+  for (i=0; i<=nsteps; i++) {
+    
+    dt_mem[i] = (DtpntMem)malloc(sizeof(struct DtpntMemRec));
+    
+    /* On failure, free any allocated memory and return NULL. */
+    if (dt_mem[i] == NULL) {
+
+      for(j=0; j<i; j++) 
+        free(dt_mem[j]);
+
+      free(dt_mem);
+      return(FALSE);
+    }
+    dt_mem[i]->content = NULL;
+  }
+  /* Attach the allocated dt_mem to IDAADJ_mem. */
+  IDAADJ_mem->dt_mem = dt_mem;
+  return(TRUE);
+}
+
+/*
+ * IDAAdataFree
+ *
+ * This routine frees the memory allocated for data storage.
+ */
+
+static void IDAAdataFree(IDAMem IDA_mem)
+{
+  IDAadjMem IDAADJ_mem;
+  long int i;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  if (IDAADJ_mem == NULL) return;
+
+  /* Destroy data points by calling the interpolation's 'free' routine. */
+  IDAADJ_mem->ia_free(IDA_mem);
+
+  for (i=0; i<=nsteps; i++) {
+     free(IDAADJ_mem->dt_mem[i]);
+     IDAADJ_mem->dt_mem[i] = NULL;
+  }
+
+  free(IDAADJ_mem->dt_mem);
+  IDAADJ_mem->dt_mem = NULL;
+}
+
+
+/*
+ * IDAAdataStore 
+ *
+ * This routine integrates the forward model starting at the check
+ * point ck_mem and stores y and yprime at all intermediate 
+ * steps. 
+ *
+ * Return values: 
+ *   - the flag that IDASolve may return on error
+ *   - IDA_REIFWD_FAIL if no check point is available for this hot start
+ *   - IDA_SUCCESS
+ */
+
+static int IDAAdataStore(IDAMem IDA_mem, CkpntMem ck_mem)
+{
+  IDAadjMem IDAADJ_mem;
+  DtpntMem *dt_mem;
+  realtype t;
+  long int i;
+  int flag, sign;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  dt_mem = IDAADJ_mem->dt_mem;
+
+  /* Initialize IDA_mem with data from ck_mem. */
+  flag = IDAAckpntGet(IDA_mem, ck_mem);
+  if (flag != IDA_SUCCESS)
+    return(IDA_REIFWD_FAIL);
+
+  /* Set first structure in dt_mem[0] */
+  dt_mem[0]->t = t0_;
+  IDAADJ_mem->ia_storePnt(IDA_mem, dt_mem[0]);
+
+  /* Decide whether TSTOP must be activated */
+  if (IDAADJ_mem->ia_tstopIDAFcall) {
+    IDASetStopTime(IDA_mem, IDAADJ_mem->ia_tstopIDAF);
+  }
+
+  sign = (tfinal - tinitial > ZERO) ? 1 : -1;
+
+  /* Run IDASolve in IDA_ONE_STEP mode to set following structures in dt_mem[i]. */
+  i = 1;
+  do {
+
+    flag = IDASolve(IDA_mem, t1_, &t, yyTmp, ypTmp, IDA_ONE_STEP);
+    if (flag < 0) return(IDA_FWD_FAIL);
+
+    dt_mem[i]->t = t;
+    IDAADJ_mem->ia_storePnt(IDA_mem, dt_mem[i]);
+
+    i++;
+  } while ( sign*(t1_ - t) > ZERO );
+
+  /* New data is now available. */
+  ckpntData = ck_mem;
+  newData = TRUE;
+  np  = i;
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * CVAckpntGet
+ *
+ * This routine prepares IDAS for a hot restart from
+ * the check point ck_mem
+ */
+
+static int IDAAckpntGet(IDAMem IDA_mem, CkpntMem ck_mem) 
+{
+  int flag, j, is;
+
+  if (next_ == NULL) {
+
+    /* In this case, we just call the reinitialization routine,
+     * but make sure we use the same initial stepsize as on 
+     * the first run. */
+
+    IDASetInitStep(IDA_mem, h0u);
+
+    flag = IDAReInit(IDA_mem, t0_, phi_[0], phi_[1]);
+    if (flag != IDA_SUCCESS) return(flag);
+
+    if (quadr_) {
+      flag = IDAQuadReInit(IDA_mem, phiQ_[0]);
+      if (flag != IDA_SUCCESS) return(flag);
+    }
+
+    if (sensi_) {
+      flag = IDASensReInit(IDA_mem, IDA_mem->ida_ism, phiS_[0], phiS_[1]);
+      if (flag != IDA_SUCCESS) return(flag);
+    }
+
+    if (quadr_sensi_) {
+      flag = IDAQuadSensReInit(IDA_mem, phiQS_[0]);
+      if (flag != IDA_SUCCESS) return(flag);
+    }
+
+  } else {
+
+    /* Copy parameters from check point data structure */
+    nst       = nst_;
+    tretlast  = tretlast_;
+    kk        = kk_;
+    kused     = kused_;
+    knew      = knew_;
+    phase     = phase_;
+    ns        = ns_;
+    hh        = hh_;
+    hused     = hused_;
+    rr        = rr_;
+    cj        = cj_;
+    cjlast    = cjlast_;
+    cjold     = cjold_;
+    cjratio   = cjratio_;
+    tn        = t0_;
+    ss        = ss_;
+    ssS       = ssS_;
+
+    
+    /* Copy the arrays from check point data structure */
+    for (j=0; j<phi_alloc_; j++) N_VScale(ONE, phi_[j], phi[j]);
+
+    if(quadr_) {
+      for (j=0; j<phi_alloc_; j++) N_VScale(ONE, phiQ_[j], phiQ[j]);
+    }
+
+    if (sensi_) {
+      for (is=0; is<Ns; is++) {
+        for (j=0; j<phi_alloc_; j++) N_VScale(ONE, phiS_[j][is], phiS[j][is]);
+      }
+    }
+
+    if (quadr_sensi_) {
+      for (is=0; is<Ns; is++) {
+        for (j=0; j<phi_alloc_; j++) N_VScale(ONE, phiQS_[j][is], phiQS[j][is]);
+      }
+    }
+
+    for (j=0; j<MXORDP1; j++) {
+      psi[j]   = psi_[j];
+      alpha[j] = alpha_[j];
+      beta[j]  = beta_[j];
+      sigma[j] = sigma_[j];
+      gamma[j] = gamma_[j];
+    }
+
+    /* Force a call to setup */
+    forceSetup = TRUE;
+  }
+
+  return(IDA_SUCCESS);
+}
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions specific to cubic Hermite interpolation
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAAhermiteMalloc
+ *
+ * This routine allocates memory for storing information at all
+ * intermediate points between two consecutive check points. 
+ * This data is then used to interpolate the forward solution 
+ * at any other time.
+ */
+
+static booleantype IDAAhermiteMalloc(IDAMem IDA_mem)
+{
+  IDAadjMem IDAADJ_mem;
+  DtpntMem *dt_mem;
+  HermiteDataMem content;
+  long int i, ii=0;
+  booleantype allocOK;
+
+  allocOK = TRUE;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Allocate space for the vectors yyTmp and ypTmp. */
+  yyTmp = N_VClone(tempv);
+  if (yyTmp == NULL) {
+    return(FALSE);
+  }
+  ypTmp = N_VClone(tempv);
+  if (ypTmp == NULL) {
+    return(FALSE);
+  }
+
+  /* Allocate space for sensitivities temporary vectors. */
+  if (storeSensi) {
+    
+    yySTmp = N_VCloneVectorArray(Ns, tempv);
+    if (yySTmp == NULL) {
+      N_VDestroy(yyTmp);
+      N_VDestroy(ypTmp);
+      return(FALSE);
+    }
+
+    ypSTmp = N_VCloneVectorArray(Ns, tempv);
+    if (ypSTmp == NULL) {
+      N_VDestroy(yyTmp);
+      N_VDestroy(ypTmp);
+      N_VDestroyVectorArray(yySTmp, Ns);
+      return(FALSE);
+
+    }
+  }
+
+  /* Allocate space for the content field of the dt structures */
+
+  dt_mem = IDAADJ_mem->dt_mem;
+
+  for (i=0; i<=nsteps; i++) {
+
+    content = NULL;
+    content = (HermiteDataMem) malloc(sizeof(struct HermiteDataMemRec));
+    if (content == NULL) {
+      ii = i;
+      allocOK = FALSE;
+      break;
+    }
+
+    content->y = N_VClone(tempv);
+    if (content->y == NULL) {
+      free(content); content = NULL;
+      ii = i;
+      allocOK = FALSE;
+      break;
+    }
+
+    content->yd = N_VClone(tempv);
+    if (content->yd == NULL) {
+      N_VDestroy(content->y);
+      free(content); content = NULL;
+      ii = i;
+      allocOK = FALSE;
+      break;
+    }
+
+    if (storeSensi) {
+      
+      content->yS = N_VCloneVectorArray(Ns, tempv);
+      if (content->yS == NULL) {
+        N_VDestroy(content->y);
+        N_VDestroy(content->yd);
+        free(content); content = NULL;
+        ii = i;
+        allocOK = FALSE;
+        break;
+      }
+
+      content->ySd = N_VCloneVectorArray(Ns, tempv);
+      if (content->ySd == NULL) {
+        N_VDestroy(content->y);
+        N_VDestroy(content->yd);
+        N_VDestroyVectorArray(content->yS, Ns);
+        free(content); content = NULL;
+        ii = i;
+        allocOK = FALSE;
+        break;
+      }
+    }
+    
+    dt_mem[i]->content = content;
+
+  } 
+
+  /* If an error occurred, deallocate and return */
+
+  if (!allocOK) {
+
+    N_VDestroy(yyTmp);
+    N_VDestroy(ypTmp);  
+
+    if (storeSensi) {     
+      N_VDestroyVectorArray(yySTmp, Ns);
+      N_VDestroyVectorArray(ypSTmp, Ns);
+    }
+
+    for (i=0; i<ii; i++) {
+      content = (HermiteDataMem) (dt_mem[i]->content);
+      N_VDestroy(content->y);
+      N_VDestroy(content->yd);
+
+      if (storeSensi) {
+        N_VDestroyVectorArray(content->yS, Ns);
+        N_VDestroyVectorArray(content->ySd, Ns);        
+      }
+
+      free(dt_mem[i]->content); dt_mem[i]->content = NULL;
+    }
+
+  }
+
+  return(allocOK);
+}
+
+/*
+ * IDAAhermiteFree
+ *
+ * This routine frees the memory allocated for data storage.
+ */
+
+static void IDAAhermiteFree(IDAMem IDA_mem)
+{  
+  IDAadjMem IDAADJ_mem;
+  DtpntMem *dt_mem;
+  HermiteDataMem content;
+  long int i;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  N_VDestroy(yyTmp);
+  N_VDestroy(ypTmp);
+
+  if (storeSensi) {    
+    N_VDestroyVectorArray(yySTmp, Ns);
+    N_VDestroyVectorArray(ypSTmp, Ns);
+  }
+
+  dt_mem = IDAADJ_mem->dt_mem;
+
+  for (i=0; i<=nsteps; i++) {
+
+    content = (HermiteDataMem) (dt_mem[i]->content);
+    /* content might be NULL, if IDAAdjInit was called but IDASolveF was not. */
+    if(content) {
+
+      N_VDestroy(content->y);
+      N_VDestroy(content->yd);
+
+      if (storeSensi) {
+        N_VDestroyVectorArray(content->yS, Ns);
+        N_VDestroyVectorArray(content->ySd, Ns);      
+      }
+      free(dt_mem[i]->content); 
+      dt_mem[i]->content = NULL;
+    }
+  }
+}
+
+/*
+ * IDAAhermiteStorePnt
+ *
+ * This routine stores a new point (y,yd) in the structure d for use
+ * in the cubic Hermite interpolation.
+ * Note that the time is already stored.
+ */
+
+static int IDAAhermiteStorePnt(IDAMem IDA_mem, DtpntMem d)
+{
+  IDAadjMem IDAADJ_mem;
+  HermiteDataMem content;
+  int is;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  content = (HermiteDataMem) d->content;
+
+  /* Load solution(s) */
+  N_VScale(ONE, phi[0], content->y);
+  
+  if (storeSensi) {
+    for (is=0; is<Ns; is++) 
+      N_VScale(ONE, phiS[0][is], content->yS[is]);
+  }
+
+  /* Load derivative(s). */
+  IDAAGettnSolutionYp(IDA_mem, content->yd);
+
+  if (storeSensi) {
+    IDAAGettnSolutionYpS(IDA_mem, content->ySd);
+  }
+
+  return(0);
+}
+
+
+/*
+ * IDAAhermiteGetY
+ *
+ * This routine uses cubic piece-wise Hermite interpolation for 
+ * the forward solution vector. 
+ * It is typically called by the wrapper routines before calling
+ * user provided routines (fB, djacB, bjacB, jtimesB, psolB) but
+ * can be directly called by the user through IDAGetAdjY
+ */
+
+static int IDAAhermiteGetY(IDAMem IDA_mem, realtype t,
+                           N_Vector yy, N_Vector yp,
+                          N_Vector *yyS, N_Vector *ypS)
+{
+  IDAadjMem IDAADJ_mem;
+  DtpntMem *dt_mem;
+  HermiteDataMem content0, content1;
+
+  realtype t0, t1, delta;
+  realtype factor1, factor2, factor3;
+
+  N_Vector y0, yd0, y1, yd1;
+  N_Vector *yS0=NULL, *ySd0=NULL, *yS1, *ySd1;
+
+  int flag, is, NS;
+  long int indx;
+  booleantype newpoint;
+
+ 
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  dt_mem = IDAADJ_mem->dt_mem;
+ 
+  /* Local value of Ns */
+  NS = (interpSensi && (yyS != NULL)) ? Ns : 0;
+
+  /* Get the index in dt_mem */
+  flag = IDAAfindIndex(IDA_mem, t, &indx, &newpoint);
+  if (flag != IDA_SUCCESS) return(flag);
+
+  /* If we are beyond the left limit but close enough,
+     then return y at the left limit. */
+
+  if (indx == 0) {
+    content0 = (HermiteDataMem) (dt_mem[0]->content);
+    N_VScale(ONE, content0->y,  yy);
+    N_VScale(ONE, content0->yd, yp);
+
+    for (is=0; is<NS; is++) {
+      N_VScale(ONE, content0->yS[is], yyS[is]);
+      N_VScale(ONE, content0->ySd[is],ypS[is]);
+    }
+    return(IDA_SUCCESS);
+  }
+
+  /* Extract stuff from the appropriate data points */
+  t0 = dt_mem[indx-1]->t;
+  t1 = dt_mem[indx]->t;
+  delta = t1 - t0;
+
+  content0 = (HermiteDataMem) (dt_mem[indx-1]->content);
+  y0  = content0->y;
+  yd0 = content0->yd;
+  if (interpSensi) {
+    yS0  = content0->yS;
+    ySd0 = content0->ySd;
+  }
+
+  if (newpoint) {
+    
+    /* Recompute Y0 and Y1 */
+    content1 = (HermiteDataMem) (dt_mem[indx]->content);
+
+    y1  = content1->y;
+    yd1 = content1->yd;
+
+    N_VLinearSum(ONE, y1, -ONE, y0, Y[0]);
+    N_VLinearSum(ONE, yd1,  ONE, yd0, Y[1]);
+    N_VLinearSum(delta, Y[1], -TWO, Y[0], Y[1]);
+    N_VLinearSum(ONE, Y[0], -delta, yd0, Y[0]);
+
+
+    yS1  = content1->yS;
+    ySd1 = content1->ySd;
+      
+    for (is=0; is<NS; is++) {
+      N_VLinearSum(ONE, yS1[is], -ONE, yS0[is], YS[0][is]);
+      N_VLinearSum(ONE, ySd1[is],  ONE, ySd0[is], YS[1][is]);
+      N_VLinearSum(delta, YS[1][is], -TWO, YS[0][is], YS[1][is]);
+      N_VLinearSum(ONE, YS[0][is], -delta, ySd0[is], YS[0][is]);
+    }
+
+  }
+
+  /* Perform the actual interpolation. */
+
+  /* For y. */
+  factor1 = t - t0;
+
+  factor2 = factor1/delta;
+  factor2 = factor2*factor2;
+
+  factor3 = factor2*(t-t1)/delta;
+
+  N_VLinearSum(ONE, y0, factor1, yd0, yy);
+  N_VLinearSum(ONE, yy, factor2, Y[0], yy);
+  N_VLinearSum(ONE, yy, factor3, Y[1], yy);
+
+  /* Sensi Interpolation. */
+  for (is=0; is<NS; is++) {
+    N_VLinearSum(ONE, yS0[is], factor1, ySd0[is], yyS[is]);
+    N_VLinearSum(ONE, yyS[is], factor2, YS[0][is], yyS[is]);
+    N_VLinearSum(ONE, yyS[is], factor3, YS[1][is], yyS[is]);
+  }
+
+  /*For y'. */
+  factor1 = factor1/delta/delta; /* factor1 = 2(t-t0)/(t1-t0)^2 */
+  factor2 = factor1*((3*t-2*t1-t0)/delta); /* factor2 = (t-t0)(3*t-2*t1-t0)/(t1-t0)^3 */
+  factor1 *= 2;
+
+  N_VLinearSum(ONE, yd0, factor1, Y[0], yp);
+  N_VLinearSum(ONE, yp,  factor2, Y[1], yp);
+                                            
+  /* Sensi interpolation for 1st derivative. */
+  for (is=0; is<NS; is++) {
+    N_VLinearSum(ONE, ySd0[is], factor1, YS[0][is], ypS[is]);
+    N_VLinearSum(ONE, ypS[is],  factor2, YS[1][is], ypS[is]);    
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions specific to Polynomial interpolation
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAApolynomialMalloc 
+ *
+ * This routine allocates memory for storing information at all
+ * intermediate points between two consecutive check points. 
+ * This data is then used to interpolate the forward solution 
+ * at any other time.
+ *
+ * Information about the first derivative is stored only for the first
+ * data point.
+ */
+
+static booleantype IDAApolynomialMalloc(IDAMem IDA_mem)
+{
+  IDAadjMem IDAADJ_mem;
+  DtpntMem *dt_mem;
+  PolynomialDataMem content;
+  long int i, ii=0;
+  booleantype allocOK;
+
+  allocOK = TRUE;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Allocate space for the vectors yyTmp and ypTmp */
+  yyTmp = N_VClone(tempv);
+  if (yyTmp == NULL) {
+    return(FALSE);
+  }
+  ypTmp = N_VClone(tempv);
+  if (ypTmp == NULL) {
+    return(FALSE);
+  }
+
+  if (storeSensi) {
+    
+    yySTmp = N_VCloneVectorArray(Ns, tempv);
+    if (yySTmp == NULL) {
+      N_VDestroy(yyTmp);
+      N_VDestroy(ypTmp);
+      return(FALSE);
+    }
+
+    ypSTmp = N_VCloneVectorArray(Ns, tempv);
+    if (ypSTmp == NULL) {
+      N_VDestroy(yyTmp);
+      N_VDestroy(ypTmp);
+      N_VDestroyVectorArray(yySTmp, Ns);
+      return(FALSE);
+
+    }
+  }
+
+  /* Allocate space for the content field of the dt structures */
+  dt_mem = IDAADJ_mem->dt_mem;
+
+  for (i=0; i<=nsteps; i++) {
+
+    content = NULL;
+    content = (PolynomialDataMem) malloc(sizeof(struct PolynomialDataMemRec));
+    if (content == NULL) {
+      ii = i;
+      allocOK = FALSE;
+      break;
+    }
+
+    content->y = N_VClone(tempv);
+    if (content->y == NULL) {
+      free(content); content = NULL;
+      ii = i;
+      allocOK = FALSE;
+      break;
+    }
+
+    /* Allocate space for yp also. Needed for the most left point interpolation. */
+    if (i == 0) {
+      content->yd = N_VClone(tempv);
+      
+      /* Memory allocation failure ? */
+      if (content->yd == NULL) {
+        N_VDestroy(content->y);
+        free(content); content = NULL;
+        ii = i;
+        allocOK = FALSE;
+      }
+    } else {
+      /* Not the first data point. */
+      content->yd = NULL;
+    }
+
+    if (storeSensi) {
+      
+      content->yS = N_VCloneVectorArray(Ns, tempv);
+      if (content->yS == NULL) {
+        N_VDestroy(content->y);
+        if (content->yd) N_VDestroy(content->yd);
+        free(content); content = NULL;
+        ii = i;
+        allocOK = FALSE;
+        break;
+      }
+      
+      if (i==0) {
+        content->ySd = N_VCloneVectorArray(Ns, tempv);
+        if (content->ySd == NULL) {
+          N_VDestroy(content->y);
+          if (content->yd) N_VDestroy(content->yd);
+          N_VDestroyVectorArray(content->yS, Ns);
+          free(content); content = NULL;
+          ii = i;
+          allocOK = FALSE;
+        }
+      } else {
+        content->ySd = NULL;
+      }
+    }
+
+    dt_mem[i]->content = content;
+  } 
+
+  /* If an error occurred, deallocate and return */
+  if (!allocOK) {
+
+    N_VDestroy(yyTmp);
+    N_VDestroy(ypTmp);
+    if (storeSensi) {
+
+        N_VDestroyVectorArray(yySTmp, Ns);
+        N_VDestroyVectorArray(ypSTmp, Ns);      
+    }
+
+    for (i=0; i<ii; i++) {
+      content = (PolynomialDataMem) (dt_mem[i]->content);
+      N_VDestroy(content->y);
+
+      if (content->yd) N_VDestroy(content->yd);
+
+      if (storeSensi) {
+        
+          N_VDestroyVectorArray(content->yS, Ns);
+        
+          if (content->ySd)
+            N_VDestroyVectorArray(content->ySd, Ns);
+      }
+      free(dt_mem[i]->content); dt_mem[i]->content = NULL;
+    }
+
+  }
+  return(allocOK);
+}
+
+/*
+ * IDAApolynomialFree
+ *
+ * This routine frees the memory allocated for data storage.
+ */
+
+static void IDAApolynomialFree(IDAMem IDA_mem)
+{
+  IDAadjMem IDAADJ_mem;
+  DtpntMem *dt_mem;
+  PolynomialDataMem content;
+  long int i;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  N_VDestroy(yyTmp);
+  N_VDestroy(ypTmp);
+
+  if (storeSensi) {
+    N_VDestroyVectorArray(yySTmp, Ns);
+    N_VDestroyVectorArray(ypSTmp, Ns);
+  }
+
+  dt_mem = IDAADJ_mem->dt_mem;
+
+  for (i=0; i<=nsteps; i++) {
+
+    content = (PolynomialDataMem) (dt_mem[i]->content);
+
+    /* content might be NULL, if IDAAdjInit was called but IDASolveF was not. */
+    if(content) {
+      N_VDestroy(content->y);
+
+      if (content->yd) N_VDestroy(content->yd);
+
+      if (storeSensi) {
+        
+        N_VDestroyVectorArray(content->yS, Ns);
+        
+        if (content->ySd)
+          N_VDestroyVectorArray(content->ySd, Ns);
+      }
+      free(dt_mem[i]->content); dt_mem[i]->content = NULL;
+    }
+  }
+}
+
+/*
+ * IDAApolynomialStorePnt
+ *
+ * This routine stores a new point y in the structure d for use
+ * in the Polynomial interpolation.
+ *
+ * Note that the time is already stored. Information about the 
+ * first derivative is available only for the first data point, 
+ * in which case content->yp is non-null.
+ */
+
+static int IDAApolynomialStorePnt(IDAMem IDA_mem, DtpntMem d)
+{
+  IDAadjMem IDAADJ_mem;
+  PolynomialDataMem content;
+  int is;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  content = (PolynomialDataMem) d->content;
+
+  N_VScale(ONE, phi[0], content->y);
+
+  /* copy also the derivative for the first data point (in this case
+     content->yp is non-null). */
+  if (content->yd)
+    IDAAGettnSolutionYp(IDA_mem, content->yd);
+
+  if (storeSensi) {
+    
+    for (is=0; is<Ns; is++) 
+      N_VScale(ONE, phiS[0][is], content->yS[is]);
+    
+    /* store the derivative if it is the first data point. */
+    if(content->ySd)
+      IDAAGettnSolutionYpS(IDA_mem, content->ySd);
+  }
+
+  content->order = kused;
+
+  return(0);
+}
+
+/*
+ * IDAApolynomialGetY
+ *
+ * This routine uses polynomial interpolation for the forward solution vector. 
+ * It is typically called by the wrapper routines before calling
+ * user provided routines (fB, djacB, bjacB, jtimesB, psolB)) but
+ * can be directly called by the user through CVodeGetAdjY.
+ */
+
+static int IDAApolynomialGetY(IDAMem IDA_mem, realtype t,
+                              N_Vector yy, N_Vector yp,
+                              N_Vector *yyS, N_Vector *ypS)
+{
+  IDAadjMem IDAADJ_mem;
+  DtpntMem *dt_mem;
+  PolynomialDataMem content;
+
+  int flag, dir, order, i, j, is, NS;
+  long int indx, base;
+  booleantype newpoint;
+  realtype delt, factor, Psi, Psiprime;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  dt_mem = IDAADJ_mem->dt_mem;
+ 
+  /* Local value of Ns */
+  NS = (interpSensi && (yyS != NULL)) ? Ns : 0;
+
+  /* Get the index in dt_mem */
+  flag = IDAAfindIndex(IDA_mem, t, &indx, &newpoint);
+  if (flag != IDA_SUCCESS) return(flag);
+
+  /* If we are beyond the left limit but close enough,
+     then return y at the left limit. */
+
+  if (indx == 0) {
+    content = (PolynomialDataMem) (dt_mem[0]->content);
+    N_VScale(ONE, content->y,  yy);
+    N_VScale(ONE, content->yd, yp);
+
+    
+    for (is=0; is<NS; is++) {
+      N_VScale(ONE, content->yS[is], yyS[is]);
+      N_VScale(ONE, content->ySd[is], ypS[is]);
+    }
+    
+    return(IDA_SUCCESS);
+  }
+
+  /* Scaling factor */
+  delt = SUNRabs(dt_mem[indx]->t - dt_mem[indx-1]->t);
+
+  /* Find the direction of the forward integration */
+  dir = (tfinal - tinitial > ZERO) ? 1 : -1;
+
+  /* Establish the base point depending on the integration direction.
+     Modify the base if there are not enough points for the current order */
+
+  if (dir == 1) {
+    base = indx;
+    content = (PolynomialDataMem) (dt_mem[base]->content);
+    order = content->order;
+    if(indx < order) base += order-indx;
+  } else {
+    base = indx-1;
+    content = (PolynomialDataMem) (dt_mem[base]->content);
+    order = content->order;
+    if (np-indx > order) base -= indx+order-np;
+  }
+
+  /* Recompute Y (divided differences for Newton polynomial) if needed */
+
+  if (newpoint) {
+
+    /* Store 0-th order DD */
+    if (dir == 1) {
+      for(j=0;j<=order;j++) {
+        T[j] = dt_mem[base-j]->t;
+        content = (PolynomialDataMem) (dt_mem[base-j]->content);
+        N_VScale(ONE, content->y, Y[j]);
+        
+        for (is=0; is<NS; is++) 
+          N_VScale(ONE, content->yS[is], YS[j][is]);
+       
+      }
+    } else {
+      for(j=0;j<=order;j++) {
+        T[j] = dt_mem[base-1+j]->t;
+        content = (PolynomialDataMem) (dt_mem[base-1+j]->content);
+        N_VScale(ONE, content->y, Y[j]);
+        
+        for (is=0; is<NS; is++) 
+          N_VScale(ONE, content->yS[is], YS[j][is]);
+        
+      }
+    }
+
+    /* Compute higher-order DD */
+    for(i=1;i<=order;i++) {
+      for(j=order;j>=i;j--) {
+        factor = delt/(T[j]-T[j-i]);
+        N_VLinearSum(factor, Y[j], -factor, Y[j-1], Y[j]);
+        
+        for (is=0; is<NS; is++) 
+          N_VLinearSum(factor, YS[j][is], -factor, YS[j-1][is], YS[j][is]);
+        
+      }
+    }
+  }
+
+  /* Perform the actual interpolation for yy using nested multiplications */
+  N_VScale(ONE, Y[order], yy);
+  
+  for (is=0; is<NS; is++) 
+    N_VScale(ONE, YS[order][is], yyS[is]);
+  
+  for (i=order-1; i>=0; i--) {
+    factor = (t-T[i])/delt;
+    N_VLinearSum(factor, yy, ONE, Y[i], yy);
+    
+    for (is=0; is<NS; is++) 
+      N_VLinearSum(factor, yyS[is], ONE, YS[i][is], yyS[is]);
+    
+  }
+  
+  /* Perform the actual interpolation for yp.
+
+     Writing p(t) = y0 + (t-t0)*f[t0,t1] + ... + (t-t0)(t-t1)...(t-tn)*f[t0,t1,...tn],
+     denote psi_k(t) = (t-t0)(t-t1)...(t-tk).
+
+     The formula used for p'(t) is: 
+       - p'(t) = f[t0,t1] + psi_1'(t)*f[t0,t1,t2] + ... + psi_n'(t)*f[t0,t1,...,tn]
+     
+     We reccursively compute psi_k'(t) from:
+       - psi_k'(t) = (t-tk)*psi_{k-1}'(t) + psi_{k-1}
+
+     psi_k is rescaled with 1/delt each time is computed, because the Newton DDs from Y were
+     scaled with delt.
+  */
+
+  Psi = ONE; Psiprime = ZERO; 
+  N_VConst(ZERO, yp);
+
+  for (is=0; is<NS; is++)
+    N_VConst(ZERO, ypS[is]);
+
+  for(i=1; i<=order; i++) {
+    factor = (t-T[i-1])/delt;
+
+    Psiprime = Psi/delt +  factor * Psiprime;
+    Psi = Psi * factor;
+
+    N_VLinearSum(ONE, yp, Psiprime, Y[i], yp);
+    
+    for (is=0; is<NS; is++)
+      N_VLinearSum(ONE, ypS[is], Psiprime, YS[i][is], ypS[is]);
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * IDAAGetSolutionYp
+ *
+ * Evaluates the first derivative of the solution at the last time returned by
+ * IDASolve (tretlast).
+ * 
+ * The function implements the same algorithm as in IDAGetSolution but in the 
+ * particular case when  t=tn (i.e. delta=0).
+ *
+ * This function was implemented to avoid calls to IDAGetSolution which computes 
+ * y by doing a loop that is not necessary for this particular situation.
+ */
+
+static int IDAAGettnSolutionYp(IDAMem IDA_mem, N_Vector yp)
+{
+  int j, kord;
+  realtype C, D, gam;
+
+  if (nst==0) {
+
+    /* If no integration was done, return the yp supplied by user.*/
+      N_VScale(ONE, phi[1], yp);
+
+    return(0);
+  }
+
+  /* Compute yp as in IDAGetSolution for this particular case when t=tn. */
+  N_VConst(ZERO, yp);
+  
+  kord = kused;
+  if(kused==0) kord=1;
+  
+  C = ONE; D = ZERO;
+  gam = ZERO;
+  for (j=1; j <= kord; j++) {
+    D = D*gam + C/psi[j-1];
+    C = C*gam;
+    gam = psi[j-1]/psi[j];
+    N_VLinearSum(ONE, yp, D, phi[j], yp);
+  }   
+
+  return(0);
+}
+
+
+/* 
+ * IDAAGettnSolutionYpS
+ *
+ * Same as IDAAGettnSolutionYp, but for first derivative of the sensitivities.
+ *
+ */
+
+static int IDAAGettnSolutionYpS(IDAMem IDA_mem, N_Vector *ypS)
+{
+  int j, kord, is;
+  realtype C, D, gam;
+
+  if (nst==0) {
+
+    /* If no integration was done, return the ypS supplied by user.*/
+    for (is=0; is<Ns; is++) 
+      N_VScale(ONE, phiS[1][is], ypS[is]);
+
+    return(0);
+  }
+
+  for (is=0; is<Ns; is++) 
+    N_VConst(ZERO, ypS[is]);
+  
+  kord = kused;
+  if(kused==0) kord=1;
+  
+  C = ONE; D = ZERO;
+  gam = ZERO;
+  for (j=1; j <= kord; j++) {
+    D = D*gam + C/psi[j-1];
+    C = C*gam;
+    gam = psi[j-1]/psi[j];
+  
+    for (is=0; is<Ns; is++)
+      N_VLinearSum(ONE, ypS[is], D, phiS[j][is], ypS[is]);
+  }   
+
+  return(0);
+}
+
+
+
+/*
+ * IDAAfindIndex
+ *
+ * Finds the index in the array of data point strctures such that
+ *     dt_mem[indx-1].t <= t < dt_mem[indx].t
+ * If indx is changed from the previous invocation, then newpoint = TRUE
+ *
+ * If t is beyond the leftmost limit, but close enough, indx=0.
+ *
+ * Returns IDA_SUCCESS if successful and IDA_GETY_BADT if unable to
+ * find indx (t is too far beyond limits).
+ */
+
+static int IDAAfindIndex(IDAMem ida_mem, realtype t, 
+                        long int *indx, booleantype *newpoint)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  static long int ilast;
+  DtpntMem *dt_mem;
+  int sign;
+  booleantype to_left, to_right;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  dt_mem = IDAADJ_mem->dt_mem;
+
+  *newpoint = FALSE;
+
+  /* Find the direction of integration */
+  sign = (tfinal - tinitial > ZERO) ? 1 : -1;
+
+  /* If this is the first time we use new data */
+  if (newData) {
+    ilast     = np-1;
+    *newpoint = TRUE;
+    newData   = FALSE;
+  }
+
+  /* Search for indx starting from ilast */
+  to_left  = ( sign*(t - dt_mem[ilast-1]->t) < ZERO);
+  to_right = ( sign*(t - dt_mem[ilast]->t)   > ZERO);
+
+  if ( to_left ) {
+    /* look for a new indx to the left */
+
+    *newpoint = TRUE;
+    
+    *indx = ilast;
+    loop {
+      if ( *indx == 0 ) break;
+      if ( sign*(t - dt_mem[*indx-1]->t) <= ZERO ) (*indx)--;
+      else                                         break;
+    }
+
+    if ( *indx == 0 )
+      ilast = 1;
+    else
+      ilast = *indx;
+
+    if ( *indx == 0 ) {
+      /* t is beyond leftmost limit. Is it too far? */  
+      if ( SUNRabs(t - dt_mem[0]->t) > FUZZ_FACTOR * uround ) {
+        return(IDA_GETY_BADT);
+      }
+    }
+
+  } else if ( to_right ) {
+    /* look for a new indx to the right */
+
+    *newpoint = TRUE;
+
+    *indx = ilast;
+    loop {
+      if ( sign*(t - dt_mem[*indx]->t) > ZERO) (*indx)++;
+      else                                     break;
+    }
+
+    ilast = *indx;
+
+  } else {
+    /* ilast is still OK */
+
+    *indx = ilast;
+
+  }
+  return(IDA_SUCCESS);
+}
+
+
+/*
+ * IDAGetAdjY
+ *
+ * This routine returns the interpolated forward solution at time t.
+ * The user must allocate space for y.
+ */
+
+int IDAGetAdjY(void *ida_mem, realtype t, N_Vector yy, N_Vector yp)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  int flag;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAGetAdjY", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;                              
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  flag = IDAADJ_mem->ia_getY(IDA_mem, t, yy, yp, NULL, NULL);
+
+  return(flag);
+}
+
+/*=================================================================*/
+/*             Wrappers for adjoint system                         */
+/*=================================================================*/
+
+/*
+ * IDAAres
+ *
+ * This routine interfaces to the RhsFnB routine provided by
+ * the user.
+*/
+
+static int IDAAres(realtype tt, 
+                   N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                   void *ida_mem)
+{
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDAMem IDA_mem;
+  int flag, retval;
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Get the current backward problem. */
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+
+  /* Get forward solution from interpolation. */
+  if( noInterp == FALSE) {
+    if (interpSensi)
+      flag = IDAADJ_mem->ia_getY(ida_mem, tt, yyTmp, ypTmp, yySTmp, ypSTmp);
+    else
+      flag = IDAADJ_mem->ia_getY(ida_mem, tt, yyTmp, ypTmp, NULL, NULL);
+  
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDA_mem, -1, "IDAA", "IDAAres", MSGAM_BAD_TINTERP, tt);
+      return(-1);
+    }
+  }
+
+  /* Call the user supplied residual. */
+  if(IDAB_mem->ida_res_withSensi) {
+    retval = IDAB_mem->ida_resS(tt, yyTmp, ypTmp, 
+                                yySTmp, ypSTmp,
+                                yyB, ypB, 
+                                rrB, IDAB_mem->ida_user_data);
+  }else {
+    retval = IDAB_mem->ida_res(tt, yyTmp, ypTmp, yyB, ypB, rrB, IDAB_mem->ida_user_data);
+  }
+  return(retval);
+}
+
+/*
+ *IDAArhsQ
+ *
+ * This routine interfaces to the IDAQuadRhsFnB routine provided by
+ * the user.
+ *
+ * It is passed to IDAQuadInit calls for backward problem, so it must
+ * be of IDAQuadRhsFn type.
+*/
+
+static int IDAArhsQ(realtype tt, 
+                    N_Vector yyB, N_Vector ypB,
+                    N_Vector resvalQB, void *ida_mem)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  int retval, flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Get current backward problem. */
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+
+  retval = IDA_SUCCESS;
+
+  /* Get forward solution from interpolation. */
+  if (noInterp == FALSE) {
+    if (interpSensi) {
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, yySTmp, ypSTmp);
+    } else {
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    }
+    
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDA_mem, -1, "IDAA", "IDAArhsQ", MSGAM_BAD_TINTERP, tt);
+      return(-1);
+    }  
+  }
+
+  /* Call user's adjoint quadrature RHS routine */
+  if (IDAB_mem->ida_rhsQ_withSensi) {
+    retval = IDAB_mem->ida_rhsQS(tt, yyTmp, ypTmp, yySTmp, ypSTmp, 
+                                 yyB, ypB, 
+                                 resvalQB, IDAB_mem->ida_user_data);
+  } else {
+    retval = IDAB_mem->ida_rhsQ(tt,
+                                yyTmp, ypTmp,
+                                yyB, ypB,
+                                resvalQB, IDAB_mem->ida_user_data);
+  }
+  return(retval);
+}
+
+
diff --git a/src/idas/idaa_io.c b/src/idas/idaa_io.c
new file mode 100644
index 0000000..dae7618
--- /dev/null
+++ b/src/idas/idaa_io.c
@@ -0,0 +1,732 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4538 $
+ * $Date: 2015-09-16 15:18:28 -0700 (Wed, 16 Sep 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban and Cosmin Petra @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the optional input and output
+ * functions for the adjoint module in the IDAS solver.
+ * -----------------------------------------------------------------
+ */
+
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "idas_impl.h"
+#include <sundials/sundials_types.h>
+
+/* 
+ * =================================================================
+ * IDAA PRIVATE CONSTANTS
+ * =================================================================
+ */
+
+#define ONE         RCONST(1.0) 
+
+/* 
+ * -----------------------------------------------------------------
+ * Readibility Constants
+ * -----------------------------------------------------------------
+ */
+#define nbckpbs        (IDAADJ_mem->ia_nbckpbs)
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional input functions for ASA
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * IDAAdjSetNoSensi
+ * -----------------------------------------------------------------
+ * Disables the forward sensitivity analysis in IDASolveF.
+ * -----------------------------------------------------------------
+ */
+
+SUNDIALS_EXPORT int IDAAdjSetNoSensi(void *ida_mem)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAAdjSetNoSensi", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAAdjSetNoSensi",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  IDAADJ_mem->ia_storeSensi = FALSE;
+  
+  return(IDA_SUCCESS);
+}
+
+int IDASetUserDataB(void *ida_mem, int which, void *user_dataB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASetUserDataB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASetUserDataB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASetUserDataB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Set user data for this backward problem. */
+  IDAB_mem->ida_user_data = user_dataB;
+
+  return(IDA_SUCCESS);
+}
+
+int IDASetMaxOrdB(void *ida_mem, int which, int maxordB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASetMaxOrdB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASetMaxOrdB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASetMaxOrdB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  return IDASetMaxOrd(ida_memB, maxordB);
+}
+
+int IDASetMaxNumStepsB(void *ida_mem, int which, long int mxstepsB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASetMaxNumStepsB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASetMaxNumStepsB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASetMaxNumStepsB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  return IDASetMaxNumSteps(ida_memB, mxstepsB);
+}
+
+int IDASetInitStepB(void *ida_mem, int which, realtype hinB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASetInitStepB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASetInitStepB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASetInitStepB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+  
+  return IDASetInitStep(ida_memB, hinB);
+}
+
+int IDASetMaxStepB(void *ida_mem, int which, realtype hmaxB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASetMaxStepB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASetMaxStepB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASetMaxStepB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+  
+  return IDASetMaxStep(ida_memB, hmaxB);
+}
+
+int IDASetSuppressAlgB(void *ida_mem, int which,  booleantype suppressalgB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASetSuppressAlgB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASetSuppressAlgB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASetSuppressAlgB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+  
+  return IDASetSuppressAlg(ida_memB, suppressalgB);
+}
+
+int IDASetIdB(void *ida_mem, int which,  N_Vector idB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASetIdB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASetIdB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASetIdB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+  
+  return IDASetId(ida_memB, idB);
+}
+
+int IDASetConstraintsB(void *ida_mem, int which,  N_Vector constraintsB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASetConstraintsB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASetConstraintsB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASetConstraintsB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+  
+  return IDASetConstraints(ida_memB, constraintsB);
+}
+/*
+ * ----------------------------------------------------------------
+ * Input quadrature functions for ASA
+ * ----------------------------------------------------------------
+ */
+
+int IDASetQuadErrConB(void *ida_mem, int which, int errconQB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDASetQuadErrConB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDASetQuadErrConB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDASetQuadErrConB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+  
+  return IDASetQuadErrCon(ida_memB, errconQB);
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional output functions for backward integration
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAGetAdjIDABmem
+ *
+ * This function returns a (void *) pointer to the IDAS     
+ * memory allocated for the backward problem. This pointer can    
+ * then be used to call any of the IDAGet* IDAS routines to  
+ * extract optional output for the backward integration phase.
+ */
+
+SUNDIALS_EXPORT void *IDAGetAdjIDABmem(void *ida_mem, int which)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, 0, "IDAA", "IDAGetAdjIDABmem", MSGAM_NULL_IDAMEM);
+    return(NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem; 
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, 0, "IDAA", "IDAGetAdjIDABmem",  MSGAM_NO_ADJ);
+    return(NULL);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, 0, "IDAA", "IDAGetAdjIDABmem", MSGAM_BAD_WHICH);
+    return(NULL);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  return(ida_memB);
+}
+
+/*
+ * IDAGetAdjCheckPointsInfo
+ *
+ * Loads an array of nckpnts structures of type IDAadjCheckPointRec
+ * defined below.
+ *
+ * The user must allocate space for ckpnt (ncheck+1).
+ */
+
+int IDAGetAdjCheckPointsInfo(void *ida_mem, IDAadjCheckPointRec *ckpnt)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  CkpntMem ck_mem;
+  int i;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAGetAdjCheckPointsInfo", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem; 
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAGetAdjCheckPointsInfo",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  i=0;
+  ck_mem = IDAADJ_mem->ck_mem;
+  while (ck_mem != NULL) {
+    
+    ckpnt[i].my_addr = (void *) ck_mem;
+    ckpnt[i].next_addr = (void *) ck_mem->ck_next;
+    ckpnt[i].t0 = ck_mem->ck_t0;
+    ckpnt[i].t1 = ck_mem->ck_t1;
+    ckpnt[i].nstep = ck_mem->ck_nst;
+    ckpnt[i].order = ck_mem->ck_kk;
+    ckpnt[i].step = ck_mem->ck_hh;
+
+    ck_mem = ck_mem->ck_next;
+    i++;
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDAGetAdjDataPointHermite
+ * -----------------------------------------------------------------
+ * Returns the 2 vectors stored for cubic Hermite interpolation at
+ * the data point 'which'. The user must allocate space for yy and
+ * yd. 
+ *
+ * Returns IDA_MEM_NULL if ida_mem is NULL, IDA_ILL_INPUT if the 
+ * interpolation type previously specified is not IDA_HERMITE or
+ * IDA_SUCCESS otherwise.
+ *
+ */
+int IDAGetAdjDataPointHermite(void *ida_mem, int which,
+                              realtype *t, N_Vector yy, N_Vector yd)
+
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  DtpntMem *dt_mem;
+  HermiteDataMem content;
+
+    /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAGetAdjDataPointHermite", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem; 
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAGetAdjDataPointHermite",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  dt_mem = IDAADJ_mem->dt_mem;
+
+  if (IDAADJ_mem->ia_interpType != IDA_HERMITE) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAGetAdjDataPointHermite",  MSGAM_WRONG_INTERP);
+    return(IDA_ILL_INPUT);    
+  }
+
+  *t = dt_mem[which]->t;
+  content = (HermiteDataMem) dt_mem[which]->content;
+
+  if (yy != NULL) N_VScale(ONE, content->y, yy);
+  if (yd != NULL) N_VScale(ONE, content->yd, yd);
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDAGetAdjDataPointPolynomial
+ * 
+ * Returns the vector stored for polynomial interpolation at the
+ * data point 'which'. The user must allocate space for y.
+ *
+ * Returns IDA_MEM_NULL if ida_mem is NULL, IDA_ILL_INPUT if the 
+ * interpolation type previously specified is not IDA_POLYNOMIAL or
+ * IDA_SUCCESS otherwise.
+ */
+
+
+int IDAGetAdjDataPointPolynomial(void *ida_mem, int which,
+                                 realtype *t, int *order, N_Vector y)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  DtpntMem *dt_mem;
+  PolynomialDataMem content;
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAGetAdjDataPointPolynomial", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem; 
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAGetAdjDataPointPolynomial", MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  dt_mem = IDAADJ_mem->dt_mem;
+
+  if (IDAADJ_mem->ia_interpType != IDA_POLYNOMIAL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAGetAdjDataPointPolynomial", MSGAM_WRONG_INTERP);
+    return(IDA_ILL_INPUT);    
+  }
+
+  *t = dt_mem[which]->t;
+  content = (PolynomialDataMem) dt_mem[which]->content;
+ 
+  if (y != NULL) N_VScale(ONE, content->y, y); 
+
+  *order = content->order;
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDAGetAdjCurrentCheckPoint
+ * 
+ * Returns the address of the 'active' check point.
+ */
+
+SUNDIALS_EXPORT int IDAGetAdjCurrentCheckPoint(void *ida_mem, void **addr)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAGetAdjCurrentCheckPoint", MSGAM_NULL_IDAMEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem; 
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAGetAdjCurrentCheckPoint",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  *addr = (void *) IDAADJ_mem->ia_ckpntData;
+
+  return(IDA_SUCCESS);
+}
+
+
+/* IDAGetConsistentICB
+ *
+ * Returns the consistent initial conditions computed by IDACalcICB or
+ * IDACalcICBS
+ *
+ * It must be preceded by a successful call to IDACalcICB or IDACalcICBS
+ * for 'which' backward problem.
+ */
+
+int IDAGetConsistentICB(void *ida_mem, int which, N_Vector yyB0_mod, N_Vector ypB0_mod)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem valid? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAA", "IDAGetConsistentICB", MSGAM_NULL_IDAMEM);
+    return IDA_MEM_NULL;
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_ADJ, "IDAA", "IDAGetConsistentICB",  MSGAM_NO_ADJ);
+    return(IDA_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= nbckpbs ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAA", "IDAGetConsistentICB", MSGAM_BAD_WHICH);
+    return(IDA_ILL_INPUT);
+  }
+  
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  flag = IDAGetConsistentIC(ida_memB, yyB0_mod, ypB0_mod);
+
+  return(flag);
+}
+
diff --git a/src/idas/idas.c b/src/idas/idas.c
new file mode 100644
index 0000000..04465c7
--- /dev/null
+++ b/src/idas/idas.c
@@ -0,0 +1,7234 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4845 $
+ * $Date: 2016-08-03 15:45:09 -0700 (Wed, 03 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the main IDAS solver.
+ * It is independent of the linear solver in use.
+ * -----------------------------------------------------------------
+ *
+ * EXPORTED FUNCTIONS
+ * ------------------
+ *   Creation, allocation and re-initialization functions
+ *       IDACreate
+ *       IDAInit
+ *       IDAReInit
+ *       IDAQuadInit
+ *       IDAQuadReInit
+ *       IDAQuadSStolerances
+ *       IDAQuadSVtolerances
+ *       IDASensInit
+ *       IDASensReInit
+ *       IDASensToggleOff
+ *       IDASensSStolerances
+ *       IDASensSVtolerances
+ *       IDASensEEtolerances
+ *       IDAQuadSensInit
+ *       IDAQuadSensReInit
+ *       IDARootInit
+ *
+ *   Main solver function
+ *       IDASolve
+ *
+ *   Interpolated output and extraction functions
+ *       IDAGetDky
+ *       IDAGetQuad
+ *       IDAGetQuadDky
+ *       IDAGetSens
+ *       IDAGetSens1
+ *       IDAGetSensDky
+ *       IDAGetSensDky1
+ *
+ *   Deallocation functions
+ *       IDAFree
+ *       IDAQuadFree
+ *       IDASensFree
+ *       IDAQuadSensFree
+ *
+ * PRIVATE FUNCTIONS 
+ * -----------------
+ *       IDACheckNvector
+ *   Memory allocation/deallocation
+ *       IDAAllocVectors
+ *       IDAFreeVectors
+ *       IDAQuadAllocVectors
+ *       IDAQuadFreeVectors
+ *       IDASensAllocVectors
+ *       IDASensFreeVectors
+ *       IDAQuadSensAllocVectors
+ *       IDAQuadSensFreeVectors
+ *   Initial setup
+ *       IDAInitialSetup
+ *       IDAEwtSet
+ *       IDAEwtSetSS
+ *       IDAEwtSetSV
+ *       IDAQuadEwtSet
+ *       IDAQuadEwtSetSS
+ *       IDAQuadEwtSetSV
+ *       IDASensEwtSet
+ *       IDASensEwtSetEE
+ *       IDASensEwtSetSS
+ *       IDASensEwtSetSV
+ *       IDAQuadSensEwtSet
+ *       IDAQuadSensEwtSetEE
+ *       IDAQuadSensEwtSetSS
+ *       IDAQuadSensEwtSetSV
+ *   Stopping tests
+ *       IDAStopTest1
+ *       IDAStopTest2
+ *   Error handler
+ *       IDAHandleFailure
+ *   Main IDAStep function
+ *       IDAStep
+ *       IDASetCoeffs
+ *   Nonlinear solver functions
+ *       IDANls
+ *       IDAPredict
+ *       IDANewtonIter
+ *       IDAQuadNls
+ *       IDAQuadSensNls
+ *       IDAQuadPredict
+ *       IDAQuadSensPredict
+ *       IDASensNls
+ *       IDASensPredict
+ *       IDASensNewtonIter
+ *   Error test
+ *       IDATestError
+ *       IDAQuadTestError
+ *       IDASensTestError
+ *       IDAQuadSensTestError
+ *       IDARestore
+ *   Handler for convergence and/or error test failures
+ *       IDAHandleNFlag
+ *       IDAReset
+ *   Function called after a successful step
+ *       IDACompleteStep
+ *   Get solution
+ *       IDAGetSolution
+ *   Norm functions
+ *       IDAWrmsNorm
+ *       IDASensWrmsNorm
+ *       IDAQuadSensWrmsNorm
+ *       IDAQuadWrmsNormUpdate
+ *       IDASensWrmsNormUpdate
+ *       IDAQuadSensWrmsNormUpdate
+ *   Functions for rootfinding
+ *       IDARcheck1
+ *       IDARcheck2
+ *       IDARcheck3
+ *       IDARootfind
+ *   IDA Error message handling functions 
+ *       IDAProcessError
+ *       IDAErrHandler
+ *   Internal DQ approximations for sensitivity RHS
+ *       IDASensResDQ
+ *       IDASensRes1DQ
+ *       IDAQuadSensResDQ
+ *       IDAQuadSensRes1DQ
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "idas_impl.h"
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+/* 
+ * =================================================================
+ * MACRO DEFINITIONS
+ * =================================================================
+ */
+
+/* Macro: loop */
+#define loop for(;;)
+
+/* 
+ * =================================================================
+ * IDAS PRIVATE CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO      RCONST(0.0)    /* real 0.0    */
+#define HALF      RCONST(0.5)    /* real 0.5    */
+#define QUARTER   RCONST(0.25)   /* real 0.25   */
+#define TWOTHIRDS RCONST(0.667)  /* real 2/3    */
+#define ONE       RCONST(1.0)    /* real 1.0    */
+#define ONEPT5    RCONST(1.5)    /* real 1.5    */
+#define TWO       RCONST(2.0)    /* real 2.0    */
+#define FOUR      RCONST(4.0)    /* real 4.0    */
+#define FIVE      RCONST(5.0)    /* real 5.0    */
+#define TEN       RCONST(10.0)   /* real 10.0   */
+#define TWELVE    RCONST(12.0)   /* real 12.0   */
+#define TWENTY    RCONST(20.0)   /* real 20.0   */
+#define HUNDRED   RCONST(100.0)  /* real 100.0  */
+#define PT9       RCONST(0.9)    /* real 0.9    */
+#define PT99      RCONST(0.99)   /* real 0.99   */
+#define PT1       RCONST(0.1)    /* real 0.1    */
+#define PT01      RCONST(0.01)   /* real 0.01   */
+#define PT001     RCONST(0.001)  /* real 0.001  */
+#define PT0001    RCONST(0.0001) /* real 0.0001 */
+
+/* 
+ * =================================================================
+ * IDAS ROUTINE-SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+/* 
+ * Control constants for lower-level functions used by IDASolve 
+ * ------------------------------------------------------------
+ */
+
+/* IDAStep control constants */
+
+#define PREDICT_AGAIN 20
+
+/* Return values for lower level routines used by IDASolve */
+
+#define IDA_RES_RECVR    +1
+#define IDA_LSETUP_RECVR +2
+#define IDA_LSOLVE_RECVR +3
+
+#define IDA_NCONV_RECVR  +4
+#define IDA_CONSTR_RECVR +5
+
+#define IDA_QRHS_RECVR   +10
+#define IDA_SRES_RECVR   +11
+#define IDA_QSRHS_RECVR  +12
+
+#define CONTINUE_STEPS   +99
+
+/* IDACompleteStep constants */
+
+#define UNSET    -1
+#define LOWER     1 
+#define RAISE     2 
+#define MAINTAIN  3
+
+/* IDATestError constants */
+
+#define ERROR_TEST_FAIL +7
+
+/*
+ * Control constants for lower-level rootfinding functions
+ * -------------------------------------------------------
+ */
+
+#define RTFOUND   1
+#define CLOSERT   3
+
+/*
+ * Control constants for sensitivity DQ
+ * ------------------------------------
+ */
+
+#define CENTERED1        +1
+#define CENTERED2        +2
+#define FORWARD1         +3
+#define FORWARD2         +4
+
+/*
+ * Algorithmic constants
+ * ---------------------
+ */
+
+#define MXNCF           10  /* max number of convergence failures allowed */
+#define MXNEF           10  /* max number of error test failures allowed  */
+#define MAXNH            5  /* max. number of h tries in IC calc. */
+#define MAXNJ            4  /* max. number of J tries in IC calc. */
+#define MAXNI           10  /* max. Newton iterations in IC calc. */
+#define EPCON RCONST(0.33)  /* Newton convergence test constant */
+#define MAXBACKS       100  /* max backtracks per Newton step in IDACalcIC */
+
+
+/* IDANewtonIter constants */
+
+#define MAXIT   4
+#define RATEMAX RCONST(0.9)
+#define XRATE   RCONST(0.25)        
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTION PROTOTYPES
+ * =================================================================
+ */
+
+static booleantype IDACheckNvector(N_Vector tmpl);
+
+/* Memory allocation/deallocation */
+
+static booleantype IDAAllocVectors(IDAMem IDA_mem, N_Vector tmpl);
+static void IDAFreeVectors(IDAMem IDA_mem);
+
+static booleantype IDAQuadAllocVectors(IDAMem IDA_mem, N_Vector tmpl);
+static void IDAQuadFreeVectors(IDAMem IDA_mem);
+
+static booleantype IDASensAllocVectors(IDAMem IDA_mem, N_Vector tmpl);
+static void IDASensFreeVectors(IDAMem IDA_mem);
+
+static booleantype IDAQuadSensAllocVectors(IDAMem ida_mem, N_Vector tmpl);
+static void IDAQuadSensFreeVectors(IDAMem ida_mem);
+
+/* Initial setup */
+
+int IDAInitialSetup(IDAMem IDA_mem);
+
+static int IDAEwtSetSS(IDAMem IDA_mem, N_Vector ycur, N_Vector weight);
+static int IDAEwtSetSV(IDAMem IDA_mem, N_Vector ycur, N_Vector weight);
+
+static int IDAQuadEwtSet(IDAMem IDA_mem, N_Vector qcur, N_Vector weightQ);
+static int IDAQuadEwtSetSS(IDAMem IDA_mem, N_Vector qcur, N_Vector weightQ);
+static int IDAQuadEwtSetSV(IDAMem IDA_mem, N_Vector qcur, N_Vector weightQ);
+
+/* Used in IC for sensitivities. */
+int IDASensEwtSet(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS);
+static int IDASensEwtSetEE(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS);
+static int IDASensEwtSetSS(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS);
+static int IDASensEwtSetSV(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS);
+
+int IDAQuadSensEwtSet(IDAMem IDA_mem, N_Vector *yQScur, N_Vector *weightQS);
+static int IDAQuadSensEwtSetEE(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS);
+static int IDAQuadSensEwtSetSS(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS);
+static int IDAQuadSensEwtSetSV(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS);
+
+/* Main IDAStep function */
+
+static int IDAStep(IDAMem IDA_mem);
+
+/* Function called at beginning of step */
+
+static void IDASetCoeffs(IDAMem IDA_mem, realtype *ck);
+
+/* Nonlinear solver functions */
+
+static void IDAPredict(IDAMem IDA_mem);
+static void IDAQuadPredict(IDAMem IDA_mem);
+static void IDASensPredict(IDAMem IDA_mem, int is, N_Vector yySens, N_Vector ypSens);
+static void IDAQuadSensPredict(IDAMem IDA_mem, N_Vector *yQS, N_Vector *ypQS);
+
+static int IDANls(IDAMem IDA_mem);
+static int IDANewtonIter(IDAMem IDA_mem);
+
+static int IDASensNls(IDAMem IDA_mem);
+static int IDASensNewtonIter(IDAMem IDA_mem);
+
+static int IDAQuadNls(IDAMem IDA_mem);
+static int IDAQuadSensNls(IDAMem IDA_mem);
+
+/* Error tests */
+
+static int IDATestError(IDAMem IDA_mem, realtype ck, 
+                        realtype *err_k, realtype *err_km1, realtype *err_km2);
+static int IDAQuadTestError(IDAMem IDA_mem, realtype ck, 
+                            realtype *err_k, realtype *err_km1, realtype *err_km2);
+static int IDASensTestError(IDAMem IDA_mem, realtype ck, 
+                            realtype *err_k, realtype *err_km1, realtype *err_km2);
+static int IDAQuadSensTestError(IDAMem IDA_mem, realtype ck, 
+                                realtype *err_k, realtype *err_km1, realtype *err_km2);
+
+/* Handling of convergence and/or error test failures */
+
+static void IDARestore(IDAMem IDA_mem, realtype saved_t);
+static int IDAHandleNFlag(IDAMem IDA_mem, int nflag, realtype err_k, realtype err_km1,
+                          long int *ncfnPtr, int *ncfPtr, long int *netfPtr, int *nefPtr);
+static void IDAReset(IDAMem IDA_mem);
+
+/* Function called after a successful step */
+
+static void IDACompleteStep(IDAMem IDA_mem, realtype err_k, realtype err_km1);
+
+/* Function called to evaluate the solutions y(t) and y'(t) at t. Also used in IDAA */
+int IDAGetSolution(void *ida_mem, realtype t, N_Vector yret, N_Vector ypret);
+
+/* Stopping tests and failure handling */
+
+static int IDAStopTest1(IDAMem IDA_mem, realtype tout,realtype *tret, 
+                        N_Vector yret, N_Vector ypret, int itask);
+static int IDAStopTest2(IDAMem IDA_mem, realtype tout, realtype *tret, 
+                        N_Vector yret, N_Vector ypret, int itask);
+static int IDAHandleFailure(IDAMem IDA_mem, int sflag);
+
+/* Norm functions. Some of them are used also for IC, so they are global.*/
+
+realtype IDAWrmsNorm(IDAMem IDA_mem, N_Vector x, N_Vector w, 
+                     booleantype mask);
+
+realtype IDASensWrmsNorm(IDAMem IDA_mem, N_Vector *xS, N_Vector *wS,
+                                booleantype mask);
+
+realtype IDASensWrmsNormUpdate(IDAMem IDA_mem, realtype old_nrm,
+                                      N_Vector *xS, N_Vector *wS,
+                                      booleantype mask);
+static realtype IDAQuadWrmsNormUpdate(IDAMem IDA_mem, realtype old_nrm,
+                                      N_Vector xQ, N_Vector wQ);
+
+static realtype IDAQuadSensWrmsNorm(IDAMem IDA_mem, N_Vector *xQS, N_Vector *wQS);
+static realtype IDAQuadSensWrmsNormUpdate(IDAMem IDA_mem, realtype old_nrm, 
+                                          N_Vector *xQS, N_Vector *wQS);
+
+/* Functions for rootfinding */
+
+static int IDARcheck1(IDAMem IDA_mem);
+static int IDARcheck2(IDAMem IDA_mem);
+static int IDARcheck3(IDAMem IDA_mem);
+static int IDARootfind(IDAMem IDA_mem);
+
+/* Sensitivity residual DQ function */
+
+static int IDASensRes1DQ(int Ns, realtype t, 
+                         N_Vector yy, N_Vector yp, N_Vector resval,
+                         int iS,
+                         N_Vector yyS, N_Vector ypS, N_Vector resvalS,
+                         void *user_dataS,
+                         N_Vector ytemp, N_Vector yptemp, N_Vector restemp);
+
+static int IDAQuadSensRhsInternalDQ(int Ns, realtype t, 
+                                    N_Vector yy,   N_Vector yp,
+                                    N_Vector *yyS, N_Vector *ypS,
+                                    N_Vector rrQ,  N_Vector *resvalQS,
+                                    void *ida_mem,  
+                                    N_Vector yytmp, N_Vector yptmp, N_Vector tmpQS);
+
+static int IDAQuadSensRhs1InternalDQ(IDAMem IDA_mem, int is, realtype t, 
+                                     N_Vector yy, N_Vector y, 
+                                     N_Vector yyS, N_Vector ypS,
+                                     N_Vector resvalQ, N_Vector resvalQS, 
+                                     N_Vector yytmp, N_Vector yptmp, N_Vector tmpQS);
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * Creation, allocation and re-initialization functions
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * IDACreate
+ *
+ * IDACreate creates an internal memory block for a problem to 
+ * be solved by IDA.
+ * If successful, IDACreate returns a pointer to the problem memory. 
+ * This pointer should be passed to IDAInit.  
+ * If an initialization error occurs, IDACreate prints an error 
+ * message to standard err and returns NULL. 
+ */
+
+void *IDACreate(void)
+{
+  IDAMem IDA_mem;
+
+  IDA_mem = NULL;
+  IDA_mem = (IDAMem) malloc(sizeof(struct IDAMemRec));
+  if (IDA_mem == NULL) {
+    IDAProcessError(NULL, 0, "IDAS", "IDACreate", MSG_MEM_FAIL);
+    return (NULL);
+  }
+
+  /* Zero out ida_mem */
+  memset(IDA_mem, 0, sizeof(struct IDAMemRec));
+
+  /* Set unit roundoff in IDA_mem */
+  IDA_mem->ida_uround = UNIT_ROUNDOFF;
+
+  /* Set default values for integrator optional inputs */
+  IDA_mem->ida_res         = NULL;
+  IDA_mem->ida_user_data   = NULL;
+  IDA_mem->ida_itol        = IDA_NN;
+  IDA_mem->ida_user_efun   = FALSE;
+  IDA_mem->ida_efun        = NULL;
+  IDA_mem->ida_edata       = NULL;
+  IDA_mem->ida_ehfun       = IDAErrHandler;
+  IDA_mem->ida_eh_data     = IDA_mem;
+  IDA_mem->ida_errfp       = stderr;
+  IDA_mem->ida_maxord      = MAXORD_DEFAULT;
+  IDA_mem->ida_mxstep      = MXSTEP_DEFAULT;
+  IDA_mem->ida_hmax_inv    = HMAX_INV_DEFAULT;
+  IDA_mem->ida_hin         = ZERO;
+  IDA_mem->ida_epcon       = EPCON;
+  IDA_mem->ida_maxnef      = MXNEF;
+  IDA_mem->ida_maxncf      = MXNCF;
+  IDA_mem->ida_maxcor      = MAXIT;
+  IDA_mem->ida_suppressalg = FALSE;
+  IDA_mem->ida_id          = NULL;
+  IDA_mem->ida_constraints = NULL;
+  IDA_mem->ida_constraintsSet = FALSE;
+  IDA_mem->ida_tstopset    = FALSE;
+
+  /* set the saved value maxord_alloc */
+  IDA_mem->ida_maxord_alloc = MAXORD_DEFAULT;
+
+  /* Set default values for IC optional inputs */
+  IDA_mem->ida_epiccon = PT01 * EPCON;
+  IDA_mem->ida_maxnh   = MAXNH;
+  IDA_mem->ida_maxnj   = MAXNJ;
+  IDA_mem->ida_maxnit  = MAXNI;
+  IDA_mem->ida_maxbacks  = MAXBACKS;
+  IDA_mem->ida_lsoff   = FALSE;
+  IDA_mem->ida_steptol = SUNRpowerR(IDA_mem->ida_uround, TWOTHIRDS);
+
+  /* Set default values for quad. optional inputs */
+  IDA_mem->ida_quadr      = FALSE;
+  IDA_mem->ida_rhsQ       = NULL;
+  IDA_mem->ida_errconQ    = FALSE;
+  IDA_mem->ida_itolQ      = IDA_NN;
+
+  /* Set default values for sensi. optional inputs */
+  IDA_mem->ida_sensi        = FALSE;
+  IDA_mem->ida_user_dataS   = (void *)IDA_mem;
+  IDA_mem->ida_resS         = IDASensResDQ;
+  IDA_mem->ida_resSDQ       = TRUE;
+  IDA_mem->ida_DQtype       = IDA_CENTERED;
+  IDA_mem->ida_DQrhomax     = ZERO;
+  IDA_mem->ida_p            = NULL;
+  IDA_mem->ida_pbar         = NULL;
+  IDA_mem->ida_plist        = NULL;
+  IDA_mem->ida_errconS      = FALSE;
+  IDA_mem->ida_maxcorS      = MAXIT;
+  IDA_mem->ida_itolS        = IDA_EE;
+
+  /* Defaults for sensi. quadr. optional inputs. */
+  IDA_mem->ida_quadr_sensi  = FALSE;
+  IDA_mem->ida_user_dataQS  = (void *)IDA_mem;
+  IDA_mem->ida_rhsQS        = IDAQuadSensRhsInternalDQ;
+  IDA_mem->ida_rhsQSDQ      = TRUE;
+  IDA_mem->ida_errconQS     = FALSE;
+  IDA_mem->ida_itolQS       = IDA_EE;
+
+  /* Set defaults for ASA. */
+  IDA_mem->ida_adj     = FALSE;
+  IDA_mem->ida_adj_mem = NULL;
+
+  /* Initialize lrw and liw */
+  IDA_mem->ida_lrw = 25 + 5*MXORDP1;
+  IDA_mem->ida_liw = 38;
+
+  /* No mallocs have been done yet */
+
+  IDA_mem->ida_VatolMallocDone       = FALSE;
+  IDA_mem->ida_constraintsMallocDone = FALSE;
+  IDA_mem->ida_idMallocDone          = FALSE;
+  IDA_mem->ida_MallocDone            = FALSE;
+
+  IDA_mem->ida_VatolQMallocDone      = FALSE;
+  IDA_mem->ida_quadMallocDone        = FALSE;
+
+  IDA_mem->ida_VatolSMallocDone      = FALSE;
+  IDA_mem->ida_SatolSMallocDone      = FALSE;
+  IDA_mem->ida_sensMallocDone        = FALSE;
+
+  IDA_mem->ida_VatolQSMallocDone      = FALSE;
+  IDA_mem->ida_SatolQSMallocDone      = FALSE;
+  IDA_mem->ida_quadSensMallocDone     = FALSE;
+
+  IDA_mem->ida_adjMallocDone          = FALSE;
+
+  /* Return pointer to IDA memory block */
+  return((void *)IDA_mem);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define lrw   (IDA_mem->ida_lrw)
+#define liw   (IDA_mem->ida_liw)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDAInit
+ *
+ * IDAInit allocates and initializes memory for a problem. All
+ * problem specification inputs are checked for errors. If any
+ * error occurs during initialization, it is reported to the 
+ * error handler function.
+ */
+
+int IDAInit(void *ida_mem, IDAResFn res,
+            realtype t0, N_Vector yy0, N_Vector yp0)
+{
+  IDAMem IDA_mem;
+  booleantype nvectorOK, allocOK;
+  long int lrw1, liw1;
+
+  /* Check ida_mem */
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAInit", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+  
+  /* Check for legal input parameters */
+  
+  if (yy0 == NULL) { 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInit", MSG_Y0_NULL);
+    return(IDA_ILL_INPUT); 
+  }
+  
+  if (yp0 == NULL) { 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInit", MSG_YP0_NULL);
+    return(IDA_ILL_INPUT); 
+  }
+
+  if (res == NULL) { 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInit", MSG_RES_NULL);
+    return(IDA_ILL_INPUT); 
+  }
+
+  /* Test if all required vector operations are implemented */
+
+  nvectorOK = IDACheckNvector(yy0);
+  if (!nvectorOK) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInit", MSG_BAD_NVECTOR);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Set space requirements for one N_Vector */
+
+  if (yy0->ops->nvspace != NULL) {
+    N_VSpace(yy0, &lrw1, &liw1);
+  } else {
+    lrw1 = 0;
+    liw1 = 0;
+  }
+  IDA_mem->ida_lrw1 = lrw1;
+  IDA_mem->ida_liw1 = liw1;
+
+  /* Allocate the vectors (using yy0 as a template) */
+
+  allocOK = IDAAllocVectors(IDA_mem, yy0);
+  if (!allocOK) {
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAS", "IDAInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+ 
+  /* All error checking is complete at this point */
+
+  /* Copy the input parameters into IDA memory block */
+
+  IDA_mem->ida_res = res;
+  IDA_mem->ida_tn  = t0;
+
+  /* Set the linear solver addresses to NULL */
+
+  IDA_mem->ida_linit  = NULL;
+  IDA_mem->ida_lsetup = NULL;
+  IDA_mem->ida_lsolve = NULL;
+  IDA_mem->ida_lperf  = NULL;
+  IDA_mem->ida_lfree  = NULL;
+  IDA_mem->ida_lmem   = NULL;
+
+  /* Set forceSetup to FALSE */
+
+  IDA_mem->ida_forceSetup = FALSE;
+
+  /* Initialize the phi array */
+
+  N_VScale(ONE, yy0, IDA_mem->ida_phi[0]);  
+  N_VScale(ONE, yp0, IDA_mem->ida_phi[1]);  
+ 
+  /* Initialize all the counters and other optional output values */
+
+  IDA_mem->ida_nst     = 0;
+  IDA_mem->ida_nre     = 0;
+  IDA_mem->ida_ncfn    = 0;
+  IDA_mem->ida_netf    = 0;
+  IDA_mem->ida_nni     = 0;
+  IDA_mem->ida_nsetups = 0;
+  
+  IDA_mem->ida_kused = 0;
+  IDA_mem->ida_hused = ZERO;
+  IDA_mem->ida_tolsf = ONE;
+
+  IDA_mem->ida_nge = 0;
+
+  IDA_mem->ida_irfnd = 0;
+
+  /* Initialize counters specific to IC calculation. */
+  IDA_mem->ida_nbacktr     = 0;  
+
+  /* Initialize root-finding variables */
+
+  IDA_mem->ida_glo     = NULL;
+  IDA_mem->ida_ghi     = NULL;
+  IDA_mem->ida_grout   = NULL;
+  IDA_mem->ida_iroots  = NULL;
+  IDA_mem->ida_rootdir = NULL;
+  IDA_mem->ida_gfun    = NULL;
+  IDA_mem->ida_nrtfn   = 0;
+  IDA_mem->ida_gactive  = NULL;
+  IDA_mem->ida_mxgnull  = 1;
+
+  /* Initial setup not done yet */
+
+  IDA_mem->ida_SetupDone = FALSE;
+
+  /* Problem memory has been successfully allocated */
+
+  IDA_mem->ida_MallocDone = TRUE;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define lrw1 (IDA_mem->ida_lrw1)
+#define liw1 (IDA_mem->ida_liw1)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDAReInit
+ *
+ * IDAReInit re-initializes IDA's memory for a problem, assuming
+ * it has already beeen allocated in a prior IDAInit call.
+ * All problem specification inputs are checked for errors.
+ * The problem size Neq is assumed to be unchaged since the call
+ * to IDAInit, and the maximum order maxord must not be larger.
+ * If any error occurs during reinitialization, it is reported to
+ * the error handler function.
+ * The return value is IDA_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int IDAReInit(void *ida_mem,
+              realtype t0, N_Vector yy0, N_Vector yp0)
+{
+  IDAMem IDA_mem;
+
+  /* Check for legal input parameters */
+  
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAReInit", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if problem was malloc'ed */
+  
+  if (IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDAS", "IDAReInit", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  /* Check for legal input parameters */
+  
+  if (yy0 == NULL) { 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAReInit", MSG_Y0_NULL);
+    return(IDA_ILL_INPUT); 
+  }
+  
+  if (yp0 == NULL) { 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAReInit", MSG_YP0_NULL);
+    return(IDA_ILL_INPUT); 
+  }
+
+  /* Copy the input parameters into IDA memory block */
+
+  IDA_mem->ida_tn  = t0;
+
+  /* Set forceSetup to FALSE */
+
+  IDA_mem->ida_forceSetup = FALSE;
+
+  /* Initialize the phi array */
+
+  N_VScale(ONE, yy0, IDA_mem->ida_phi[0]);  
+  N_VScale(ONE, yp0, IDA_mem->ida_phi[1]);  
+ 
+  /* Initialize all the counters and other optional output values */
+ 
+  IDA_mem->ida_nst     = 0;
+  IDA_mem->ida_nre     = 0;
+  IDA_mem->ida_ncfn    = 0;
+  IDA_mem->ida_netf    = 0;
+  IDA_mem->ida_nni     = 0;
+  IDA_mem->ida_nsetups = 0;
+  
+  IDA_mem->ida_kused = 0;
+  IDA_mem->ida_hused = ZERO;
+  IDA_mem->ida_tolsf = ONE;
+
+  IDA_mem->ida_nge = 0;
+
+  IDA_mem->ida_irfnd = 0;
+
+  /* Initial setup not done yet */
+
+  IDA_mem->ida_SetupDone = FALSE;
+      
+  /* Problem has been successfully re-initialized */
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDASStolerances
+ * IDASVtolerances
+ * IDAWFtolerances
+ *
+ * These functions specify the integration tolerances. One of them
+ * MUST be called before the first call to IDA.
+ *
+ * IDASStolerances specifies scalar relative and absolute tolerances.
+ * IDASVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component).
+ * IDAWFtolerances specifies a user-provides function (of type IDAEwtFn)
+ *   which will be called to set the error weight vector.
+ */
+
+int IDASStolerances(void *ida_mem, realtype reltol, realtype abstol)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASStolerances", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDAS", "IDASStolerances", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  /* Check inputs */
+  if (reltol < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASStolerances", MSG_BAD_RTOL);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (abstol < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASStolerances", MSG_BAD_ATOL);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  IDA_mem->ida_rtol = reltol;
+  IDA_mem->ida_Satol = abstol;
+
+  IDA_mem->ida_itol = IDA_SS;
+
+  IDA_mem->ida_user_efun = FALSE;
+  IDA_mem->ida_efun = IDAEwtSet;
+  IDA_mem->ida_edata = NULL; /* will be set to ida_mem in InitialSetup */ 
+
+  return(IDA_SUCCESS);
+}
+
+
+int IDASVtolerances(void *ida_mem, realtype reltol, N_Vector abstol)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASVtolerances", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDAS", "IDASVtolerances", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  /* Check inputs */
+
+  if (reltol < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASVtolerances", MSG_BAD_RTOL);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (N_VMin(abstol) < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASVtolerances", MSG_BAD_ATOL);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  
+  if ( !(IDA_mem->ida_VatolMallocDone) ) {
+    IDA_mem->ida_Vatol = N_VClone(IDA_mem->ida_ewt);
+    lrw += lrw1;
+    liw += liw1;
+    IDA_mem->ida_VatolMallocDone = TRUE;
+  }
+
+  IDA_mem->ida_rtol = reltol;
+  N_VScale(ONE, abstol, IDA_mem->ida_Vatol);
+
+  IDA_mem->ida_itol = IDA_SV;
+
+  IDA_mem->ida_user_efun = FALSE;
+  IDA_mem->ida_efun = IDAEwtSet;
+  IDA_mem->ida_edata = NULL; /* will be set to ida_mem in InitialSetup */ 
+
+  return(IDA_SUCCESS);
+}
+
+
+int IDAWFtolerances(void *ida_mem, IDAEwtFn efun)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAWFtolerances", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDAS", "IDAWFtolerances", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  IDA_mem->ida_itol = IDA_WF;
+
+  IDA_mem->ida_user_efun = TRUE;
+  IDA_mem->ida_efun = efun;
+  IDA_mem->ida_edata = NULL; /* will be set to user_data in InitialSetup */
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDAQuadMalloc
+ *
+ * IDAQuadMalloc allocates and initializes quadrature related 
+ * memory for a problem. All problem specification inputs are 
+ * checked for errors. If any error occurs during initialization, 
+ * it is reported to the file whose file pointer is errfp. 
+ * The return value is IDA_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int IDAQuadInit(void *ida_mem, IDAQuadRhsFn rhsQ, N_Vector yQ0)
+{
+  IDAMem IDA_mem;
+  booleantype allocOK;
+  long int lrw1Q, liw1Q;
+  int i;
+
+  /* Check ida_mem */
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAQuadInit", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Set space requirements for one N_Vector */
+  N_VSpace(yQ0, &lrw1Q, &liw1Q);
+  IDA_mem->ida_lrw1Q = lrw1Q;
+  IDA_mem->ida_liw1Q = liw1Q;
+
+  /* Allocate the vectors (using yQ0 as a template) */
+  allocOK = IDAQuadAllocVectors(IDA_mem, yQ0);
+  if (!allocOK) {
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAS", "IDAQuadInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  /* Initialize phiQ in the history array */
+  N_VScale(ONE, yQ0, IDA_mem->ida_phiQ[0]);
+
+  for(i=1; i<=IDA_mem->ida_maxord; i++)
+    N_VConst(ZERO, IDA_mem->ida_phiQ[i]);
+
+  /* Copy the input parameters into IDAS state */
+  IDA_mem->ida_rhsQ = rhsQ;
+
+  /* Initialize counters */
+  IDA_mem->ida_nrQe  = 0;
+  IDA_mem->ida_netfQ = 0;
+
+  /* Quadrature integration turned ON */
+  IDA_mem->ida_quadr = TRUE;
+  IDA_mem->ida_quadMallocDone = TRUE;
+
+  /* Quadrature initialization was successfull */
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define lrw1Q (IDA_mem->ida_lrw1Q)
+#define liw1Q (IDA_mem->ida_liw1Q)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDAQuadReInit
+ *
+ * IDAQuadReInit re-initializes IDAS's quadrature related memory 
+ * for a problem, assuming it has already been allocated in prior 
+ * calls to IDAInit and IDAQuadMalloc. 
+ * All problem specification inputs are checked for errors.
+ * If any error occurs during initialization, it is reported to the
+ * file whose file pointer is errfp.
+ * The return value is IDA_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int IDAQuadReInit(void *ida_mem, N_Vector yQ0)
+{
+  IDAMem IDA_mem;
+  int i;
+
+  /* Check ida_mem */
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAQuadReInit", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Ckeck if quadrature was initialized */
+  if (IDA_mem->ida_quadMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUAD, "IDAS", "IDAQuadReInit", MSG_NO_QUAD);
+    return(IDA_NO_QUAD);
+  }
+
+  /* Initialize phiQ in the history array */
+  N_VScale(ONE, yQ0, IDA_mem->ida_phiQ[0]);
+
+  for(i=1; i<=IDA_mem->ida_maxord; i++)
+    N_VConst(ZERO, IDA_mem->ida_phiQ[i]);
+
+  /* Initialize counters */
+  IDA_mem->ida_nrQe  = 0;
+  IDA_mem->ida_netfQ = 0;
+
+  /* Quadrature integration turned ON */
+  IDA_mem->ida_quadr = TRUE;
+
+  /* Quadrature re-initialization was successfull */
+  return(IDA_SUCCESS);
+}
+
+
+/*
+ * IDAQuadSStolerances
+ * IDAQuadSVtolerances
+ * 
+ *
+ * These functions specify the integration tolerances for quadrature
+ * variables. One of them MUST be called before the first call to
+ * IDA IF error control on the quadrature variables is enabled
+ * (see IDASetQuadErrCon).
+ *
+ * IDASStolerances specifies scalar relative and absolute tolerances.
+ * IDASVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance (a potentially different absolute tolerance 
+ *   for each vector component). 
+ */
+int IDAQuadSStolerances(void *ida_mem, realtype reltolQ, realtype abstolQ)
+{
+  IDAMem IDA_mem;
+
+  /*Check ida mem*/
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAQuadSStolerances", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Ckeck if quadrature was initialized */
+  if (IDA_mem->ida_quadMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUAD, "IDAS", "IDAQuadSStolerances", MSG_NO_QUAD);
+    return(IDA_NO_QUAD);
+  }
+  
+  /* Test user-supplied tolerances */
+  if (reltolQ < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSStolerances", MSG_BAD_RTOLQ);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (abstolQ < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSStolerances", MSG_BAD_ATOLQ);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  IDA_mem->ida_itolQ = IDA_SS;
+
+  IDA_mem->ida_rtolQ  = reltolQ;
+  IDA_mem->ida_SatolQ = abstolQ;
+
+
+  return (IDA_SUCCESS);
+}
+
+int IDAQuadSVtolerances(void *ida_mem, realtype reltolQ, N_Vector abstolQ)
+{
+  IDAMem IDA_mem;
+
+  /*Check ida mem*/
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAQuadSVtolerances", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Ckeck if quadrature was initialized */
+  if (IDA_mem->ida_quadMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUAD, "IDAS", "IDAQuadSVtolerances", MSG_NO_QUAD);
+    return(IDA_NO_QUAD);
+  }
+  
+  /* Test user-supplied tolerances */
+  if (reltolQ < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSVtolerances", MSG_BAD_RTOLQ);
+    return(IDA_ILL_INPUT);
+  }
+  
+  if (abstolQ == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSVtolerances", MSG_NULL_ATOLQ);
+    return(IDA_ILL_INPUT);
+  }
+  
+  if (N_VMin(abstolQ)<ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSVtolerances", MSG_BAD_ATOLQ);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Copy tolerances into memory */
+  IDA_mem->ida_itolQ = IDA_SV;
+  IDA_mem->ida_rtolQ = reltolQ;
+
+  /* clone the absolute tolerances vector (if necessary) */
+  if (FALSE == IDA_mem->ida_VatolQMallocDone) {
+    IDA_mem->ida_VatolQ = N_VClone(abstolQ);
+    lrw += lrw1Q;
+    liw += liw1Q;
+    IDA_mem->ida_VatolQMallocDone = TRUE;
+  }
+
+  N_VScale(ONE, abstolQ, IDA_mem->ida_VatolQ);
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDASenMalloc
+ *
+ * IDASensInit allocates and initializes sensitivity related 
+ * memory for a problem. All problem specification inputs are 
+ * checked for errors. If any error occurs during initialization, 
+ * it is reported to the file whose file pointer is errfp. 
+ * The return value is IDA_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */
+
+int IDASensInit(void *ida_mem, int Ns, int ism, 
+                IDASensResFn fS,
+                N_Vector *yS0, N_Vector *ypS0)
+  
+{
+  IDAMem IDA_mem;
+  booleantype allocOK;
+  int is;
+  
+  /* Check ida_mem */
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASensInit", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if Ns is legal */
+  if (Ns<=0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensInit", MSG_BAD_NS);
+    return(IDA_ILL_INPUT);
+  }
+  IDA_mem->ida_Ns = Ns;
+
+  /* Check if ism is legal */
+  if ((ism!=IDA_SIMULTANEOUS) && (ism!=IDA_STAGGERED)) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensInit", MSG_BAD_ISM);
+    return(IDA_ILL_INPUT);
+  }
+  IDA_mem->ida_ism = ism;
+   
+  /* Check if yS0 and ypS0 are non-null */
+  if (yS0 == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensInit", MSG_NULL_YYS0);
+    return(IDA_ILL_INPUT);
+  }
+  if (ypS0 == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensInit", MSG_NULL_YPS0);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Store sensitivity RHS-related data */
+
+  if (fS != NULL) {
+    IDA_mem->ida_resS    = fS;
+    IDA_mem->ida_user_dataS  = IDA_mem->ida_user_data;
+    IDA_mem->ida_resSDQ  = FALSE;
+  } else {
+    IDA_mem->ida_resS       = IDASensResDQ;
+    IDA_mem->ida_user_dataS = ida_mem;
+    IDA_mem->ida_resSDQ     = TRUE;
+  }
+
+  /* Allocate the vectors (using yS0[0] as a template) */
+
+  allocOK = IDASensAllocVectors(IDA_mem, yS0[0]);
+  if (!allocOK) {
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAS", "IDASensInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+  
+  /*---------------------------------------------- 
+    All error checking is complete at this point 
+    -----------------------------------------------*/
+
+  /* Initialize the phiS array */
+  for (is=0; is<Ns; is++) {
+    N_VScale(ONE, yS0[is],  IDA_mem->ida_phiS[0][is]);  
+    N_VScale(ONE, ypS0[is], IDA_mem->ida_phiS[1][is]);  
+  }
+
+  /* Initialize all sensitivity related counters */
+  IDA_mem->ida_nrSe     = 0;
+  IDA_mem->ida_nreS     = 0;
+  IDA_mem->ida_ncfnS    = 0;
+  IDA_mem->ida_netfS    = 0;
+  IDA_mem->ida_nniS     = 0;
+  IDA_mem->ida_nsetupsS = 0;
+
+  /* Set default values for plist and pbar */
+  for (is=0; is<Ns; is++) {
+    IDA_mem->ida_plist[is] = is;
+    IDA_mem->ida_pbar[is] = ONE;
+  }
+
+  /* Sensitivities will be computed */
+  IDA_mem->ida_sensi = TRUE;
+  IDA_mem->ida_sensMallocDone = TRUE;
+
+  /* Sensitivity initialization was successfull */
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+#define Ns (IDA_mem->ida_Ns)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDASensReInit
+ *
+ * IDASensReInit re-initializes IDAS's sensitivity related memory 
+ * for a problem, assuming it has already been allocated in prior 
+ * calls to IDAInit and IDASensInit. 
+ * All problem specification inputs are checked for errors.
+ * The number of sensitivities Ns is assumed to be unchanged since
+ * the previous call to IDASensInit.
+ * If any error occurs during initialization, it is reported to the
+ * file whose file pointer is errfp.
+ * The return value is IDA_SUCCESS = 0 if no errors occurred, or
+ * a negative value otherwise.
+ */ 
+
+int IDASensReInit(void *ida_mem, int ism, N_Vector *yS0, N_Vector *ypS0)
+{
+  IDAMem IDA_mem;
+  int is;
+  
+  /* Check ida_mem */
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASensReInit", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Was sensitivity initialized? */
+  if (IDA_mem->ida_sensMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDASensReInit", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  } 
+
+  /* Check if ism is legal */
+  if ((ism!=IDA_SIMULTANEOUS) && (ism!=IDA_STAGGERED)) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensReInit", MSG_BAD_ISM);
+    return(IDA_ILL_INPUT);
+  }
+  IDA_mem->ida_ism = ism;
+   
+  /* Check if yS0 and ypS0 are non-null */
+  if (yS0 == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensReInit", MSG_NULL_YYS0);
+    return(IDA_ILL_INPUT);
+  }
+  if (ypS0 == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensReInit", MSG_NULL_YPS0);
+    return(IDA_ILL_INPUT);
+  }
+
+  /*---------------------------------------------- 
+    All error checking is complete at this point 
+    -----------------------------------------------*/
+
+  /* Initialize the phiS array */
+  for (is=0; is<Ns; is++) {
+    N_VScale(ONE, yS0[is],  IDA_mem->ida_phiS[0][is]);  
+    N_VScale(ONE, ypS0[is], IDA_mem->ida_phiS[1][is]);  
+  }
+
+  /* Initialize all sensitivity related counters */
+  IDA_mem->ida_nrSe     = 0;
+  IDA_mem->ida_nreS     = 0;
+  IDA_mem->ida_ncfnS    = 0;
+  IDA_mem->ida_netfS    = 0;
+  IDA_mem->ida_nniS     = 0;
+  IDA_mem->ida_nsetupsS = 0;
+
+  /* Set default values for plist and pbar */
+  for (is=0; is<Ns; is++) {
+    IDA_mem->ida_plist[is] = is;
+    IDA_mem->ida_pbar[is] = ONE;
+  }
+
+  /* Sensitivities will be computed */
+  IDA_mem->ida_sensi = TRUE;
+
+  /* Sensitivity re-initialization was successfull */
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDASensSStolerances
+ * IDASensSVtolerances
+ * IDASensEEtolerances
+ *
+ * These functions specify the integration tolerances for sensitivity
+ * variables. One of them MUST be called before the first call to IDASolve.
+ *
+ * IDASensSStolerances specifies scalar relative and absolute tolerances.
+ * IDASensSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance for each sensitivity vector (a potentially different
+ *   absolute tolerance for each vector component).
+ * IDASensEEtolerances specifies that tolerances for sensitivity variables
+ *   should be estimated from those provided for the state variables.
+ */
+
+
+int IDASensSStolerances(void *ida_mem, realtype reltolS, realtype *abstolS)
+{
+  IDAMem IDA_mem;
+  int is;
+
+  /* Check ida_mem pointer */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASensSStolerances", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Was sensitivity initialized? */
+
+  if (IDA_mem->ida_sensMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDASensSStolerances", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  } 
+
+  /* Test user-supplied tolerances */
+    
+  if (reltolS < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensSStolerances", MSG_BAD_RTOLS);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (abstolS == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensSStolerances", MSG_NULL_ATOLS);
+    return(IDA_ILL_INPUT);
+  }
+
+  for (is=0; is<Ns; is++)
+    if (abstolS[is] < ZERO) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensSStolerances", MSG_BAD_ATOLS);
+      return(IDA_ILL_INPUT);
+    }
+
+  /* Copy tolerances into memory */
+
+  IDA_mem->ida_itolS = IDA_SS;
+
+  IDA_mem->ida_rtolS = reltolS;
+
+  if ( !(IDA_mem->ida_SatolSMallocDone) ) {
+    IDA_mem->ida_SatolS = NULL;
+    IDA_mem->ida_SatolS = (realtype *)malloc(Ns*sizeof(realtype));
+    lrw += Ns;
+    IDA_mem->ida_SatolSMallocDone = TRUE;
+  }
+
+  for (is=0; is<Ns; is++)
+    IDA_mem->ida_SatolS[is] = abstolS[is];
+
+  return(IDA_SUCCESS);
+}
+
+
+int IDASensSVtolerances(void *ida_mem,  realtype reltolS, N_Vector *abstolS)
+{
+  IDAMem IDA_mem;
+  int is;
+
+  /* Check ida_mem pointer */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASensSVtolerances", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Was sensitivity initialized? */
+
+  if (IDA_mem->ida_sensMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDASensSVtolerances", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  } 
+
+  /* Test user-supplied tolerances */
+    
+  if (reltolS < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensSVtolerances", MSG_BAD_RTOLS);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (abstolS == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensSVtolerances", MSG_NULL_ATOLS);
+    return(IDA_ILL_INPUT);
+  }
+
+  for (is=0; is<Ns; is++) {
+    if (N_VMin(abstolS[is])<ZERO) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASensSStolerances", MSG_BAD_ATOLS);
+      return(IDA_ILL_INPUT);      
+    }
+  }
+
+  IDA_mem->ida_itolS = IDA_SV;
+  IDA_mem->ida_rtolS = reltolS ;
+
+  if ( FALSE == IDA_mem->ida_VatolSMallocDone ) {
+    IDA_mem->ida_VatolS = N_VCloneVectorArray(Ns, IDA_mem->ida_tempv1);
+    lrw += Ns*lrw1;
+    liw += Ns*liw1;
+    IDA_mem->ida_VatolSMallocDone = TRUE;
+  }
+  
+  for (is=0; is<Ns; is++)    
+    N_VScale(ONE, abstolS[is], IDA_mem->ida_VatolS[is]);
+    
+  return(IDA_SUCCESS);
+}
+
+int IDASensEEtolerances(void *ida_mem)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASensEEtolerances", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Was sensitivity initialized? */
+
+  if (IDA_mem->ida_sensMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDASensEEtolerances", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  } 
+
+  IDA_mem->ida_itolS = IDA_EE;
+
+  return(IDA_SUCCESS);
+}
+
+
+int IDAQuadSensInit(void *ida_mem, IDAQuadSensRhsFn rhsQS, N_Vector *yQS0)
+{
+  IDAMem IDA_mem;
+  booleantype allocOK;
+  int is;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAQuadSensInit", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if sensitivity analysis is active */
+  if (!IDA_mem->ida_sensi) {
+    IDAProcessError(NULL, IDA_NO_SENS, "IDAS", "IDAQuadSensInit", MSG_NO_SENSI);    
+    return(IDA_NO_SENS);
+  }
+
+  /* Verifiy yQS0 parameter. */
+  if (yQS0==NULL) {
+    IDAProcessError(NULL, IDA_ILL_INPUT, "IDAS", "IDAQuadSensInit", MSG_NULL_YQS0);    
+    return(IDA_ILL_INPUT);    
+  }
+
+  /* Allocate vector needed for quadratures' sensitivities. */
+  allocOK = IDAQuadSensAllocVectors(IDA_mem, yQS0[0]);
+  if (!allocOK) {    
+    IDAProcessError(NULL, IDA_MEM_FAIL, "IDAS", "IDAQuadSensInit", MSG_MEM_FAIL);    
+    return(IDA_MEM_FAIL);
+  }
+
+  /* Error checking complete. */
+  if (rhsQS == NULL) {
+    IDA_mem->ida_rhsQSDQ = TRUE;
+    IDA_mem->ida_rhsQS = IDAQuadSensRhsInternalDQ;
+
+    IDA_mem->ida_user_dataQS = ida_mem;
+  } else {
+    IDA_mem->ida_rhsQSDQ = FALSE;
+    IDA_mem->ida_rhsQS = rhsQS;
+
+    IDA_mem->ida_user_dataQS = IDA_mem->ida_user_data;
+  }
+
+  /* Initialize phiQS[0] in the history array */
+  for (is=0; is<Ns; is++) 
+    N_VScale(ONE, yQS0[is], IDA_mem->ida_phiQS[0][is]);
+
+  /* Initialize all sensitivities related counters. */
+  IDA_mem->ida_nrQSe  = 0;
+  IDA_mem->ida_nrQeS  = 0;
+  IDA_mem->ida_netfQS = 0;
+
+  /* Everything allright, set the flags and return with success. */
+  IDA_mem->ida_quadr_sensi = TRUE;
+  IDA_mem->ida_quadSensMallocDone = TRUE;
+
+  return(IDA_SUCCESS);
+}
+
+int IDAQuadSensReInit(void *ida_mem, N_Vector *yQS0)
+{
+  IDAMem IDA_mem;
+  int is;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAQuadSensReInit", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if sensitivity analysis is active */
+  if (!IDA_mem->ida_sensi) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAQuadSensReInit", MSG_NO_SENSI);    
+    return(IDA_NO_SENS);
+  }
+  
+  /* Was sensitivity for quadrature already initialized? */
+  if (!IDA_mem->ida_quadSensMallocDone) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAQuadSensReInit", MSG_NO_QUADSENSI);
+    return(IDA_NO_QUADSENS);
+  }
+
+  /* Verifiy yQS0 parameter. */
+  if (yQS0==NULL) {
+    IDAProcessError(NULL, IDA_ILL_INPUT, "IDAS", "IDAQuadSensReInit", MSG_NULL_YQS0);    
+    return(IDA_ILL_INPUT);    
+  }
+  
+  /* Error checking complete at this point. */
+
+  /* Initialize phiQS[0] in the history array */
+  for (is=0; is<Ns; is++) 
+    N_VScale(ONE, yQS0[is], IDA_mem->ida_phiQS[0][is]);
+
+  /* Initialize all sensitivities related counters. */
+  IDA_mem->ida_nrQSe  = 0;
+  IDA_mem->ida_nrQeS  = 0;
+  IDA_mem->ida_netfQS = 0;
+
+  /* Everything allright, set the flags and return with success. */
+  IDA_mem->ida_quadr_sensi = TRUE;
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDAQuadSensSStolerances
+ * IDAQuadSensSVtolerances
+ * IDAQuadSensEEtolerances
+ *
+ * These functions specify the integration tolerances for quadrature
+ * sensitivity variables. One of them MUST be called before the first
+ * call to IDAS IF these variables are included in the error test.
+ *
+ * IDAQuadSensSStolerances specifies scalar relative and absolute tolerances.
+ * IDAQuadSensSVtolerances specifies scalar relative tolerance and a vector
+ *   absolute tolerance for each quadrature sensitivity vector (a potentially
+ *   different absolute tolerance for each vector component).
+ * IDAQuadSensEEtolerances specifies that tolerances for sensitivity variables
+ *   should be estimated from those provided for the quadrature variables.
+ *   In this case, tolerances for the quadrature variables must be
+ *   specified through a call to one of IDAQuad**tolerances.
+ */
+
+int IDAQuadSensSStolerances(void *ida_mem, realtype reltolQS, realtype *abstolQS)
+{
+  IDAMem IDA_mem; 
+  int is; 
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAQuadSensSStolerances", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if sensitivity analysis is active */
+  if (!IDA_mem->ida_sensi) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAQuadSensSStolerances", MSG_NO_SENSI);    
+    return(IDA_NO_SENS);
+  }
+  
+  /* Was sensitivity for quadrature already initialized? */
+  if (!IDA_mem->ida_quadSensMallocDone) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAQuadSensSStolerances", MSG_NO_QUADSENSI);
+    return(IDA_NO_QUADSENS);
+  }
+
+  /* Test user-supplied tolerances */
+
+  if (reltolQS < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSensSStolerances", MSG_BAD_RELTOLQS);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (abstolQS == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSensSStolerances", MSG_NULL_ABSTOLQS);
+    return(IDA_ILL_INPUT);
+  }
+
+  for (is=0; is<Ns; is++)
+    if (abstolQS[is] < ZERO) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSensSStolerances", MSG_BAD_ABSTOLQS);
+      return(IDA_ILL_INPUT);
+    }
+  
+  /* Save data. */
+  IDA_mem->ida_itolQS = IDA_SS;
+  IDA_mem->ida_rtolQS = reltolQS;
+
+  if ( !(IDA_mem->ida_SatolQSMallocDone) ) {
+    IDA_mem->ida_SatolQS = (realtype *)malloc(Ns*sizeof(realtype));
+    lrw += Ns;
+    IDA_mem->ida_SatolQSMallocDone = TRUE;
+  }
+
+  for (is=0; is<Ns; is++)
+    IDA_mem->ida_SatolQS[is] = abstolQS[is];
+
+  return(IDA_SUCCESS);
+}
+
+int IDAQuadSensSVtolerances(void *ida_mem, realtype reltolQS, N_Vector *abstolQS)
+{
+  IDAMem IDA_mem; 
+  int is; 
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAQuadSensSVtolerances", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if sensitivity analysis is active */
+  if (!IDA_mem->ida_sensi) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAQuadSensSVtolerances", MSG_NO_SENSI);    
+    return(IDA_NO_SENS);
+  }
+  
+  /* Was sensitivity for quadrature already initialized? */
+  if (!IDA_mem->ida_quadSensMallocDone) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAQuadSensSVtolerances", MSG_NO_QUADSENSI);
+    return(IDA_NO_QUADSENS);
+  }
+
+  /* Test user-supplied tolerances */
+
+  if (reltolQS < ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSensSVtolerances", MSG_BAD_RELTOLQS);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (abstolQS == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSensSVtolerances", MSG_NULL_ABSTOLQS);
+    return(IDA_ILL_INPUT);
+  }
+
+  for (is=0; is<Ns; is++)
+    if (N_VMin(abstolQS[is]) < ZERO) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAQuadSensSVtolerances", MSG_BAD_ABSTOLQS);
+      return(IDA_ILL_INPUT);
+    }
+  
+  /* Save data. */
+  IDA_mem->ida_itolQS = IDA_SV;
+  IDA_mem->ida_rtolQS = reltolQS;
+
+  if ( !(IDA_mem->ida_VatolQSMallocDone) ) {
+    IDA_mem->ida_VatolQS = N_VCloneVectorArray(Ns, abstolQS[0]);
+    lrw += Ns*lrw1Q;
+    liw += Ns*liw1Q;
+    IDA_mem->ida_VatolQSMallocDone = TRUE;
+  }
+  
+  for (is=0; is<Ns; is++)    
+    N_VScale(ONE, abstolQS[is], IDA_mem->ida_VatolQS[is]);
+
+  return(IDA_SUCCESS);
+}
+
+int IDAQuadSensEEtolerances(void *ida_mem)
+{
+  IDAMem IDA_mem; 
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAQuadSensEEtolerances", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if sensitivity analysis is active */
+  if (!IDA_mem->ida_sensi) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAQuadSensEEtolerances", MSG_NO_SENSI);    
+    return(IDA_NO_SENS);
+  }
+  
+  /* Was sensitivity for quadrature already initialized? */
+  if (!IDA_mem->ida_quadSensMallocDone) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAQuadSensEEtolerances", MSG_NO_QUADSENSI);
+    return(IDA_NO_QUADSENS);
+  }
+
+  IDA_mem->ida_itolQS = IDA_EE;
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDASensToggleOff
+ *
+ * IDASensToggleOff deactivates sensitivity calculations.
+ * It does NOT deallocate sensitivity-related memory.
+ */
+int IDASensToggleOff(void *ida_mem)
+{
+  IDAMem IDA_mem;
+
+  /* Check ida_mem */
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASensToggleOff", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Disable sensitivities */
+  IDA_mem->ida_sensi = FALSE;
+  IDA_mem->ida_quadr_sensi = FALSE;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+
+#define gfun   (IDA_mem->ida_gfun)
+#define glo    (IDA_mem->ida_glo)
+#define ghi    (IDA_mem->ida_ghi)
+#define grout  (IDA_mem->ida_grout)
+#define iroots (IDA_mem->ida_iroots)
+#define rootdir (IDA_mem->ida_rootdir)
+#define gactive (IDA_mem->ida_gactive)
+
+/*-----------------------------------------------------------------*/
+
+/*
+ * IDARootInit
+ *
+ * IDARootInit initializes a rootfinding problem to be solved
+ * during the integration of the DAE system.  It loads the root
+ * function pointer and the number of root functions, and allocates
+ * workspace memory.  The return value is IDA_SUCCESS = 0 if no
+ * errors occurred, or a negative value otherwise.
+ */
+
+int IDARootInit(void *ida_mem, int nrtfn, IDARootFn g)
+{
+  IDAMem IDA_mem;
+  int i, nrt;
+
+  /* Check ida_mem pointer */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDARootInit", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  nrt = (nrtfn < 0) ? 0 : nrtfn;
+
+  /* If rerunning IDARootInit() with a different number of root
+     functions (changing number of gfun components), then free
+     currently held memory resources */
+  if ((nrt != IDA_mem->ida_nrtfn) && (IDA_mem->ida_nrtfn > 0)) {
+
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); iroots = NULL;
+    free(gactive); gactive = NULL;
+
+    lrw -= 3 * (IDA_mem->ida_nrtfn);
+    liw -= 3 * (IDA_mem->ida_nrtfn);
+
+  }
+
+  /* If IDARootInit() was called with nrtfn == 0, then set ida_nrtfn to
+     zero and ida_gfun to NULL before returning */
+  if (nrt == 0) {
+    IDA_mem->ida_nrtfn = nrt;
+    gfun = NULL;
+    return(IDA_SUCCESS);
+  }
+
+  /* If rerunning IDARootInit() with the same number of root functions
+     (not changing number of gfun components), then check if the root
+     function argument has changed */
+  /* If g != NULL then return as currently reserved memory resources
+     will suffice */
+  if (nrt == IDA_mem->ida_nrtfn) {
+    if (g != gfun) {
+      if (g == NULL) {
+	free(glo); glo = NULL;
+	free(ghi); ghi = NULL;
+	free(grout); grout = NULL;
+	free(iroots); iroots = NULL;
+        free(rootdir); iroots = NULL;
+        free(gactive); gactive = NULL;
+
+        lrw -= 3*nrt;
+        liw -= 3*nrt;
+
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDARootInit", MSG_ROOT_FUNC_NULL);
+        return(IDA_ILL_INPUT);
+      }
+      else {
+        gfun = g;
+        return(IDA_SUCCESS);
+      }
+    }
+    else return(IDA_SUCCESS);
+  }
+
+  /* Set variable values in IDA memory block */
+  IDA_mem->ida_nrtfn = nrt;
+  if (g == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDARootInit", MSG_ROOT_FUNC_NULL);
+    return(IDA_ILL_INPUT);
+  }
+  else gfun = g;
+
+  /* Allocate necessary memory and return */
+  glo = NULL;
+  glo = (realtype *) malloc(nrt*sizeof(realtype));
+  if (glo == NULL) {
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAS", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  ghi = NULL;
+  ghi = (realtype *) malloc(nrt*sizeof(realtype));
+  if (ghi == NULL) {
+    free(glo); glo = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAS", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  grout = NULL;
+  grout = (realtype *) malloc(nrt*sizeof(realtype));
+  if (grout == NULL) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAS", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  iroots = NULL;
+  iroots = (int *) malloc(nrt*sizeof(int));
+  if (iroots == NULL) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAS", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  rootdir = NULL;
+  rootdir = (int *) malloc(nrt*sizeof(int));
+  if (rootdir == NULL) {
+    free(glo); glo = NULL;
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDAS", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  gactive = NULL;
+  gactive = (booleantype *) malloc(nrt*sizeof(booleantype));
+  if (gactive == NULL) {
+    free(glo); glo = NULL; 
+    free(ghi); ghi = NULL;
+    free(grout); grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); rootdir = NULL;
+    IDAProcessError(IDA_mem, IDA_MEM_FAIL, "IDA", "IDARootInit", MSG_MEM_FAIL);
+    return(IDA_MEM_FAIL);
+  }
+
+  /* Set default values for rootdir (both directions) */
+  for(i=0; i<nrt; i++) rootdir[i] = 0;
+
+  /* Set default values for gactive (all active) */
+  for(i=0; i<nrt; i++) gactive[i] = TRUE;
+
+  lrw += 3*nrt;
+  liw += 3*nrt;
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Readability constants
+ * -----------------------------------------------------------------
+ */
+
+/* State variables */
+
+#define res            (IDA_mem->ida_res)
+#define user_data      (IDA_mem->ida_user_data)
+#define y0             (IDA_mem->ida_y0)
+#define yp0            (IDA_mem->ida_yp0)
+
+#define itol           (IDA_mem->ida_itol)
+#define rtol           (IDA_mem->ida_rtol)
+#define Satol          (IDA_mem->ida_Satol)
+#define Vatol          (IDA_mem->ida_Vatol)
+#define efun           (IDA_mem->ida_efun)
+#define edata          (IDA_mem->ida_edata)
+
+#define maxord         (IDA_mem->ida_maxord)
+#define mxstep         (IDA_mem->ida_mxstep)
+#define hin            (IDA_mem->ida_hin)
+#define hmax_inv       (IDA_mem->ida_hmax_inv)
+#define tstop          (IDA_mem->ida_tstop)
+#define tstopset       (IDA_mem->ida_tstopset)
+#define epcon          (IDA_mem->ida_epcon)
+#define maxnef         (IDA_mem->ida_maxnef)
+#define maxncf         (IDA_mem->ida_maxncf)
+#define maxcor         (IDA_mem->ida_maxcor)
+#define suppressalg    (IDA_mem->ida_suppressalg)
+#define id             (IDA_mem->ida_id)
+#define constraints    (IDA_mem->ida_constraints)
+
+#define epiccon        (IDA_mem->ida_epiccon)
+#define maxnh          (IDA_mem->ida_maxnh)
+#define maxnj          (IDA_mem->ida_maxnj)
+#define maxnit         (IDA_mem->ida_maxnit)
+#define lsoff          (IDA_mem->ida_lsoff)
+#define steptol        (IDA_mem->ida_steptol)
+
+#define uround         (IDA_mem->ida_uround)  
+#define phi            (IDA_mem->ida_phi) 
+#define ewt            (IDA_mem->ida_ewt)  
+#define yy             (IDA_mem->ida_yy)
+#define yp             (IDA_mem->ida_yp)
+#define delta          (IDA_mem->ida_delta)
+#define mm             (IDA_mem->ida_mm)
+#define ee             (IDA_mem->ida_ee)
+#define savres         (IDA_mem->ida_savres)
+#define tempv1         (IDA_mem->ida_tempv1)
+#define tempv2         (IDA_mem->ida_tempv2) 
+#define kk             (IDA_mem->ida_kk)
+#define hh             (IDA_mem->ida_hh)
+#define h0u            (IDA_mem->ida_h0u)
+#define tn             (IDA_mem->ida_tn)
+#define tretlast       (IDA_mem->ida_tretlast)
+#define cj             (IDA_mem->ida_cj)
+#define cjold          (IDA_mem->ida_cjold)
+#define cjratio        (IDA_mem->ida_cjratio)
+#define cjlast         (IDA_mem->ida_cjlast)
+#define nbacktr        (IDA_mem->ida_nbacktr)
+#define nst            (IDA_mem->ida_nst)
+#define nre            (IDA_mem->ida_nre)
+#define ncfn           (IDA_mem->ida_ncfn)
+#define netf           (IDA_mem->ida_netf)
+#define nni            (IDA_mem->ida_nni)
+#define nsetups        (IDA_mem->ida_nsetups)
+#define ns             (IDA_mem->ida_ns)
+#define linit          (IDA_mem->ida_linit)
+#define lsetup         (IDA_mem->ida_lsetup)
+#define lsolve         (IDA_mem->ida_lsolve) 
+#define lperf          (IDA_mem->ida_lperf)
+#define lfree          (IDA_mem->ida_lfree) 
+#define lmem           (IDA_mem->ida_lmem) 
+#define setupNonNull   (IDA_mem->ida_setupNonNull) 
+#define forceSetup     (IDA_mem->ida_forceSetup)
+#define knew           (IDA_mem->ida_knew)
+#define kused          (IDA_mem->ida_kused)          
+#define hused          (IDA_mem->ida_hused)         
+#define tolsf          (IDA_mem->ida_tolsf)      
+#define phase          (IDA_mem->ida_phase)
+#define epsNewt        (IDA_mem->ida_epsNewt)
+#define toldel         (IDA_mem->ida_toldel)
+#define ss             (IDA_mem->ida_ss)
+#define rr             (IDA_mem->ida_rr)
+#define psi            (IDA_mem->ida_psi)
+#define alpha          (IDA_mem->ida_alpha)
+#define beta           (IDA_mem->ida_beta)
+#define sigma          (IDA_mem->ida_sigma)
+#define gamma          (IDA_mem->ida_gamma)
+#define constraintsSet (IDA_mem->ida_constraintsSet)
+#define nrtfn          (IDA_mem->ida_nrtfn)
+#define tlo            (IDA_mem->ida_tlo)
+#define thi            (IDA_mem->ida_thi)
+#define toutc          (IDA_mem->ida_toutc)
+#define trout          (IDA_mem->ida_trout)
+#define ttol           (IDA_mem->ida_ttol)
+#define taskc          (IDA_mem->ida_taskc)
+#define irfnd          (IDA_mem->ida_irfnd)
+#define nge            (IDA_mem->ida_nge)
+
+/* Quadrature variables */
+
+#define quadr          (IDA_mem->ida_quadr)
+#define rhsQ           (IDA_mem->ida_rhsQ)
+#define errconQ        (IDA_mem->ida_errconQ)
+#define itolQ          (IDA_mem->ida_itolQ)
+#define rtolQ          (IDA_mem->ida_rtolQ)
+#define SatolQ         (IDA_mem->ida_SatolQ)
+#define VatolQ         (IDA_mem->ida_VatolQ)
+
+#define phiQ           (IDA_mem->ida_phiQ)
+#define yyQ            (IDA_mem->ida_yyQ)
+#define ypQ            (IDA_mem->ida_ypQ)
+#define ewtQ           (IDA_mem->ida_ewtQ)
+#define eeQ            (IDA_mem->ida_eeQ)
+#define nrQe           (IDA_mem->ida_nrQe)
+#define netfQ          (IDA_mem->ida_netfQ)
+#define ncfnQ          (IDA_mem->ida_ncfnQ)
+#define lrw1Q          (IDA_mem->ida_lrw1Q)
+#define liw1Q          (IDA_mem->ida_liw1Q)
+
+#define quadMallocDone (IDA_mem->ida_quadMallocDone)
+
+/* Sensitivity variables */
+#define sensi          (IDA_mem->ida_sensi)
+#define ism            (IDA_mem->ida_ism)
+
+#define resS           (IDA_mem->ida_resS)
+#define user_dataS     (IDA_mem->ida_user_dataS)
+#define resSDQ         (IDA_mem->ida_resSDQ)
+
+#define errconS        (IDA_mem->ida_errconS)
+#define itolS          (IDA_mem->ida_itolS)
+#define rtolS          (IDA_mem->ida_rtolS)
+#define SatolS         (IDA_mem->ida_SatolS)
+#define VatolS         (IDA_mem->ida_VatolS)
+#define sensMallocDone (IDA_mem->ida_sensMallocDone)
+
+/* Sensitivities for quadratures */
+#define quadr_sensi         (IDA_mem->ida_quadr_sensi)
+#define yyQS                (IDA_mem->ida_yyQS)
+#define phiQS               (IDA_mem->ida_phiQS)
+#define tempvQS             (IDA_mem->ida_tempvQS)
+#define errconQS            (IDA_mem->ida_errconQS)
+#define ewtQS               (IDA_mem->ida_ewtQS)
+#define itolQS              (IDA_mem->ida_itolQS)
+#define rtolQS              (IDA_mem->ida_rtolQS)
+#define SatolQS             (IDA_mem->ida_SatolQS)
+#define VatolQS             (IDA_mem->ida_VatolQS)
+#define eeQS                (IDA_mem->ida_eeQS)
+#define nrQeS               (IDA_mem->ida_nrQeS)
+#define nrQSe               (IDA_mem->ida_nrQSe)
+#define netfQS              (IDA_mem->ida_netfQS)
+#define quadSensMallocDone  (IDA_mem->ida_quadSensMallocDone)
+#define user_dataQS         (IDA_mem->ida_user_dataQS)
+#define rhsQS               (IDA_mem->ida_rhsQS)
+#define rhsQSDQ             (IDA_mem->ida_rhsQSDQ)
+#define savrhsQ             (IDA_mem->ida_savrhsQ)
+
+#define DQtype         (IDA_mem->ida_DQtype)
+#define DQrhomax       (IDA_mem->ida_DQrhomax)
+#define pbar           (IDA_mem->ida_pbar)
+#define p              (IDA_mem->ida_p)
+#define plist          (IDA_mem->ida_plist)
+
+#define maxcorS        (IDA_mem->ida_maxcorS)
+#define Ns             (IDA_mem->ida_Ns)
+#define phiS           (IDA_mem->ida_phiS)
+#define ewtS           (IDA_mem->ida_ewtS)
+#define yyS            (IDA_mem->ida_yyS)
+#define ypS            (IDA_mem->ida_ypS)
+#define deltaS         (IDA_mem->ida_deltaS)
+#define eeS            (IDA_mem->ida_eeS)
+#define tmpS1          (IDA_mem->ida_tmpS1)
+#define tmpS2          (IDA_mem->ida_tmpS2)
+#define tmpS3          (IDA_mem->ida_tmpS3)
+#define ssS            (IDA_mem->ida_ssS)
+#define nrSe           (IDA_mem->ida_nrSe)
+#define nreS           (IDA_mem->ida_nreS)
+#define nniS           (IDA_mem->ida_nniS)
+#define ncfnS          (IDA_mem->ida_ncfnS)
+#define netfS          (IDA_mem->ida_netfS)
+#define nsetupsS       (IDA_mem->ida_nsetupsS)
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Main solver function
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDASolve
+ *
+ * This routine is the main driver of the IDA package. 
+ *
+ * It integrates over an independent variable interval defined by the user, 
+ * by calling IDAStep to take internal independent variable steps.
+ *
+ * The first time that IDASolve is called for a successfully initialized
+ * problem, it computes a tentative initial step size.
+ *
+ * IDASolve supports two modes, specified by itask:
+ * In the IDA_NORMAL mode, the solver steps until it passes tout and then
+ * interpolates to obtain y(tout) and yp(tout).
+ * In the IDA_ONE_STEP mode, it takes one internal step and returns.
+ *
+ * IDASolve returns integer values corresponding to success and failure as below:
+ *
+ * successful returns: 
+ *
+ * IDA_SUCCESS        
+ * IDA_TSTOP_RETURN   
+ *
+ * failed returns:
+ *
+ * IDA_ILL_INPUT
+ * IDA_TOO_MUCH_WORK
+ * IDA_MEM_NULL
+ * IDA_TOO_MUCH_ACC
+ * IDA_CONV_FAIL
+ * IDA_LSETUP_FAIL
+ * IDA_LSOLVE_FAIL    
+ * IDA_CONSTR_FAIL
+ * IDA_ERR_FAIL   
+ * IDA_REP_RES_ERR
+ * IDA_RES_FAIL
+ */
+
+int IDASolve(void *ida_mem, realtype tout, realtype *tret,
+             N_Vector yret, N_Vector ypret, int itask)
+{
+  long int nstloc;
+  int sflag, istate, ier, irfndp, is, ir;
+  realtype tdist, troundoff, ypnorm, rh, nrm;
+  IDAMem IDA_mem;
+  booleantype inactive_roots;
+
+  /* Check for legal inputs in all cases. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASolve", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if problem was malloc'ed */
+  if (IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDAS", "IDASolve", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  /* Check for legal arguments */
+  if (yret == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_YRET_NULL);
+    return(IDA_ILL_INPUT);
+  }
+  yy = yret;  
+
+  if (ypret == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_YPRET_NULL);
+    return(IDA_ILL_INPUT);
+  }
+  yp = ypret;
+  
+  if (tret == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_TRET_NULL);
+    return(IDA_ILL_INPUT);
+  }
+
+  if ((itask != IDA_NORMAL) && (itask != IDA_ONE_STEP)) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_BAD_ITASK);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (itask == IDA_NORMAL) toutc = tout;
+  taskc = itask;
+
+  /* Sensitivity-specific tests (if using internal DQ functions) */
+  if (sensi && resSDQ) {
+    /* Make sure we have the right 'user data' */
+    user_dataS = ida_mem;
+    /* Test if we have the problem parameters */
+    if(p == NULL) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_NULL_P);
+      return(IDA_ILL_INPUT);
+    }
+  }
+
+  if (quadr_sensi && rhsQSDQ) {
+    user_dataQS = ida_mem;
+    /* Test if we have the problem parameters */
+    if(p == NULL) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_NULL_P);
+      return(IDA_ILL_INPUT);
+    }
+  }
+
+  if (nst == 0) {       /* This is the first call */
+
+    /* Check inputs to IDA for correctness and consistency */
+    if (IDA_mem->ida_SetupDone == FALSE) {
+      ier = IDAInitialSetup(IDA_mem);
+      if (ier != IDA_SUCCESS) return(ier);
+      IDA_mem->ida_SetupDone = TRUE;
+    }
+
+    /* On first call, check for tout - tn too small, set initial hh,
+       check for approach to tstop, and scale phi[1], phiQ[1], and phiS[1] by hh.
+       Also check for zeros of root function g at and near t0.    */
+
+    tdist = SUNRabs(tout - tn);
+    if (tdist == ZERO) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_TOO_CLOSE);
+      return(IDA_ILL_INPUT);
+    }
+    troundoff = TWO*uround*(SUNRabs(tn) + SUNRabs(tout));
+    if (tdist < troundoff) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_TOO_CLOSE);
+      return(IDA_ILL_INPUT);
+    }
+
+    hh = hin;
+    if ( (hh != ZERO) && ((tout-tn)*hh < ZERO) ) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_BAD_HINIT);
+      return(IDA_ILL_INPUT);
+    }
+
+    if (hh == ZERO) {
+      hh = PT001*tdist;
+      ypnorm = IDAWrmsNorm(IDA_mem, phi[1], ewt, suppressalg);
+      if (errconQ)
+        ypnorm = IDAQuadWrmsNormUpdate(IDA_mem, ypnorm, phiQ[1], ewtQ);
+      if (errconS)
+        ypnorm = IDASensWrmsNormUpdate(IDA_mem, ypnorm, phiS[1], ewtS, suppressalg);
+      if (errconQS)
+        ypnorm = IDAQuadSensWrmsNormUpdate(IDA_mem, ypnorm, phiQS[1], ewtQS);
+
+      if (ypnorm > HALF/hh) hh = HALF/ypnorm;
+      if (tout < tn) hh = -hh;
+    }
+
+    rh = SUNRabs(hh)*hmax_inv;
+    if (rh > ONE) hh /= rh;
+
+    if (tstopset) {
+      if ( (tstop - tn)*hh <= ZERO) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_BAD_TSTOP, tstop, tn);
+        return(IDA_ILL_INPUT);
+      }
+      if ( (tn + hh - tstop)*hh > ZERO) 
+        hh = (tstop - tn)*(ONE-FOUR*uround);
+    }
+
+    h0u = hh;
+    kk = 0; kused = 0;  /* set in case of an error return before a step */
+
+    /* Check for exact zeros of the root functions at or near t0. */
+    if (nrtfn > 0) {
+      ier = IDARcheck1(IDA_mem);
+      if (ier == IDA_RTFUNC_FAIL) {
+        IDAProcessError(IDA_mem, IDA_RTFUNC_FAIL, "IDAS", "IDARcheck1", MSG_RTFUNC_FAILED, tn);
+        return(IDA_RTFUNC_FAIL);
+      }
+    }
+
+    N_VScale(hh, phi[1], phi[1]);                /* set phi[1] = hh*y' */
+
+    if (quadr)
+      N_VScale(hh, phiQ[1], phiQ[1]);            /* set phiQ[1] = hh*yQ' */
+
+    if (sensi)
+      for (is=0; is<Ns; is++)
+        N_VScale(hh, phiS[1][is], phiS[1][is]);  /* set phiS[1][i] = hh*yS_i' */
+
+    if (quadr_sensi)
+      for (is=0; is<Ns; is++)
+        N_VScale(hh, phiQS[1][is], phiQS[1][is]);  /* set phiQS[1][i] = hh*yQS_i' */
+      
+
+    /* Set the convergence test constants epsNewt and toldel */
+    epsNewt = epcon;
+    toldel = PT0001 * epsNewt;
+
+  } /* end of first-call block. */
+
+  /* Call lperf function and set nstloc for later performance testing. */
+
+  if (lperf != NULL) lperf(IDA_mem, 0);
+  nstloc = 0;
+
+  /* If not the first call, perform all stopping tests. */
+
+  if (nst > 0) {
+
+    /* First, check for a root in the last step taken, other than the
+       last root found, if any.  If itask = IDA_ONE_STEP and y(tn) was not
+       returned because of an intervening root, return y(tn) now.     */
+
+    if (nrtfn > 0) {
+
+      irfndp = irfnd;
+      
+      ier = IDARcheck2(IDA_mem);
+
+      if (ier == CLOSERT) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDARcheck2", MSG_CLOSE_ROOTS, tlo);
+        return(IDA_ILL_INPUT);
+      } else if (ier == IDA_RTFUNC_FAIL) {
+        IDAProcessError(IDA_mem, IDA_RTFUNC_FAIL, "IDAS", "IDARcheck2", MSG_RTFUNC_FAILED, tlo);
+        return(IDA_RTFUNC_FAIL);
+      } else if (ier == RTFOUND) {
+        tretlast = *tret = tlo;
+        return(IDA_ROOT_RETURN);
+      }
+
+      /* If tn is distinct from tretlast (within roundoff),
+         check remaining interval for roots */
+      troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+      if ( SUNRabs(tn - tretlast) > troundoff ) {
+        ier = IDARcheck3(IDA_mem);
+        if (ier == IDA_SUCCESS) {     /* no root found */
+          irfnd = 0;
+          if ((irfndp == 1) && (itask == IDA_ONE_STEP)) {
+            tretlast = *tret = tn;
+            ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+            return(IDA_SUCCESS);
+          }
+        } else if (ier == RTFOUND) {  /* a new root was found */
+          irfnd = 1;
+          tretlast = *tret = tlo;
+          return(IDA_ROOT_RETURN);
+        } else if (ier == IDA_RTFUNC_FAIL) {  /* g failed */
+          IDAProcessError(IDA_mem, IDA_RTFUNC_FAIL, "IDAS", "IDARcheck3", MSG_RTFUNC_FAILED, tlo);
+          return(IDA_RTFUNC_FAIL);
+        }
+      }
+
+    } /* end of root stop check */
+
+
+    /* Now test for all other stop conditions. */
+
+    istate = IDAStopTest1(IDA_mem, tout, tret, yret, ypret, itask);
+    if (istate != CONTINUE_STEPS) return(istate);
+  }
+
+  /* Looping point for internal steps. */
+
+  loop {
+   
+    /* Check for too many steps taken. */
+
+    if ( (mxstep>0) && (nstloc >= mxstep) ) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_MAX_STEPS, tn);
+      istate = IDA_TOO_MUCH_WORK;
+      *tret = tretlast = tn;
+      break; /* Here yy=yret and yp=ypret already have the current solution. */
+    }
+
+    /* Call lperf to generate warnings of poor performance. */
+
+    if (lperf != NULL) lperf(IDA_mem, 1);
+
+    /* Reset and check ewt, ewtQ, ewtS and ewtQS (if not first call). */
+
+    if (nst > 0) {
+
+      ier = efun(phi[0], ewt, edata);
+      if (ier != 0) {
+        if (itol == IDA_WF) IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_EWT_NOW_FAIL, tn);
+        else                IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_EWT_NOW_BAD, tn);
+        istate = IDA_ILL_INPUT;
+        ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+        *tret = tretlast = tn;
+        break;
+      }
+
+      if (quadr && errconQ) {
+        ier = IDAQuadEwtSet(IDA_mem, phiQ[0], ewtQ);
+        if (ier != 0) {
+          IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_EWTQ_NOW_BAD, tn);
+          istate = IDA_ILL_INPUT;
+          ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+          *tret = tretlast = tn;
+          break;
+        }
+      }
+
+      if (sensi) {
+        ier = IDASensEwtSet(IDA_mem, phiS[0], ewtS);
+        if (ier != 0) {
+          IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_EWTS_NOW_BAD, tn);
+          istate = IDA_ILL_INPUT;
+          ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+          *tret = tretlast = tn;
+          break;
+        }
+      }
+
+      if (quadr_sensi && errconQS) {
+        ier = IDAQuadSensEwtSet(IDA_mem, phiQS[0], ewtQS);
+        if (ier != 0) {
+          IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_EWTQS_NOW_BAD, tn);
+          istate = IDA_ILL_INPUT;
+          ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+          tretlast = *tret = tn;
+          break;
+        }
+      }
+
+    }
+    
+    /* Check for too much accuracy requested. */
+    
+    nrm = IDAWrmsNorm(IDA_mem, phi[0], ewt, suppressalg);
+    if (errconQ)
+      nrm = IDAQuadWrmsNormUpdate(IDA_mem, nrm, phiQ[0], ewtQ);
+    if (errconS)
+      nrm = IDASensWrmsNormUpdate(IDA_mem, nrm, phiS[0], ewtS, suppressalg);
+    if (errconQS)
+      nrm = IDAQuadSensWrmsNormUpdate(IDA_mem, nrm, phiQS[0], ewtQS);
+
+    tolsf = uround * nrm;
+    if (tolsf > ONE) {
+      tolsf *= TEN;
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASolve", MSG_TOO_MUCH_ACC, tn);
+      istate = IDA_TOO_MUCH_ACC;
+      *tret = tretlast = tn;
+      if (nst > 0) ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+      break;
+    }
+
+    /* Call IDAStep to take a step. */
+
+    sflag = IDAStep(IDA_mem);
+
+    /* Process all failed-step cases, and exit loop. */
+
+    if (sflag != IDA_SUCCESS) {
+      istate = IDAHandleFailure(IDA_mem, sflag);
+      *tret = tretlast = tn;
+      ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+      break;
+    }
+    
+    nstloc++;
+
+    /* If tstop is set and was reached, reset tn = tstop */
+    if (tstopset) {
+      troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+      if (SUNRabs(tn - tstop) <= troundoff) tn = tstop;
+    }
+
+    /* After successful step, check for stop conditions; continue or break. */
+
+    /* First check for root in the last step taken. */
+
+    if (nrtfn > 0) {
+
+      ier = IDARcheck3(IDA_mem);
+
+      if (ier == RTFOUND) {  /* A new root was found */
+        irfnd = 1;
+        istate = IDA_ROOT_RETURN;
+        tretlast = *tret = tlo;
+        break;
+      } else if (ier == IDA_RTFUNC_FAIL) { /* g failed */
+        IDAProcessError(IDA_mem, IDA_RTFUNC_FAIL, "IDAS", "IDARcheck3", MSG_RTFUNC_FAILED, tlo);
+        istate = IDA_RTFUNC_FAIL;
+        break;
+      }
+
+      /* If we are at the end of the first step and we still have
+       * some event functions that are inactive, issue a warning
+       * as this may indicate a user error in the implementation
+       * of the root function. */
+
+      if (nst==1) {
+        inactive_roots = FALSE;
+        for (ir=0; ir<nrtfn; ir++) { 
+          if (!gactive[ir]) {
+            inactive_roots = TRUE;
+            break;
+          }
+        }
+        if ((IDA_mem->ida_mxgnull > 0) && inactive_roots) {
+          IDAProcessError(IDA_mem, IDA_WARNING, "IDAS", "IDASolve", MSG_INACTIVE_ROOTS);
+        }
+      }
+
+    }
+
+    /* Now check all other stop conditions. */
+
+    istate = IDAStopTest2(IDA_mem, tout, tret, yret, ypret, itask);
+    if (istate != CONTINUE_STEPS) break;
+
+  } /* End of step loop */
+
+  return(istate);    
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Interpolated output and extraction functions
+ * -----------------------------------------------------------------
+ */
+
+
+
+/* 
+ * IDAGetDky
+ *
+ * This routine evaluates the k-th derivative of y(t) as the value of 
+ * the k-th derivative of the interpolating polynomial at the independent 
+ * variable t, and stores the results in the vector dky.  It uses the current
+ * independent variable value, tn, and the method order last used, kused.
+ * 
+ * The return values are:
+ *   IDA_SUCCESS  if t is legal, or
+ *   IDA_BAD_T    if t is not within the interval of the last step taken.
+ *   IDA_BAD_DKY  if the dky vector is NULL.
+ *   IDA_BAD_K    if the requested k is not in the range 0,1,...,order used 
+ *
+ */
+
+int IDAGetDky(void *ida_mem, realtype t, int k, N_Vector dky)
+{
+  IDAMem IDA_mem;
+  realtype tfuzz, tp, delt, psij_1;
+  int i, j;
+  realtype cjk  [MXORDP1];
+  realtype cjk_1[MXORDP1];
+
+  /* Check ida_mem */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetDky", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem; 
+
+  if (dky == NULL) {
+    IDAProcessError(IDA_mem, IDA_BAD_DKY, "IDAS", "IDAGetDky", MSG_NULL_DKY);
+    return(IDA_BAD_DKY);
+  }
+  
+  if ((k < 0) || (k > kused)) {
+    IDAProcessError(IDA_mem, IDA_BAD_K, "IDAS", "IDAGetDky", MSG_BAD_K);
+    return(IDA_BAD_K);
+  }
+
+  /* Check t for legality.  Here tn - hused is t_{n-1}. */
+
+  tfuzz = HUNDRED * uround * (SUNRabs(tn) + SUNRabs(hh));
+  if (hh < ZERO) tfuzz = - tfuzz;
+  tp = tn - hused - tfuzz;
+  if ((t - tp)*hh < ZERO) {
+    IDAProcessError(IDA_mem, IDA_BAD_T, "IDAS", "IDAGetDky", MSG_BAD_T, t, tn-hused, tn);
+    return(IDA_BAD_T);
+  }
+
+  /* Initialize the c_j^(k) and c_k^(k-1) */
+  for(i=0; i<MXORDP1; i++) {
+    cjk  [i] = 0;
+    cjk_1[i] = 0;
+  }
+
+  delt = t-tn;
+
+  for(i=0; i<=k; i++) {
+
+    /* The below reccurence is used to compute the k-th derivative of the solution:
+       c_j^(k) = ( k * c_{j-1}^(k-1) + c_{j-1}^{k} (Delta+psi_{j-1}) ) / psi_j
+       
+       Translated in indexes notation:
+       cjk[j] = ( k*cjk_1[j-1] + cjk[j-1]*(delt+psi[j-2]) ) / psi[j-1]
+
+       For k=0, j=1: c_1 = c_0^(-1) + (delt+psi[-1]) / psi[0]
+
+       In order to be able to deal with k=0 in the same way as for k>0, the
+       following conventions were adopted:
+         - c_0(t) = 1 , c_0^(-1)(t)=0 
+         - psij_1 stands for psi[-1]=0 when j=1 
+                         for psi[j-2]  when j>1
+    */
+    if(i==0) {
+
+      cjk[i] = 1;
+      psij_1 = 0;
+    }else {
+      /*                                                i       i-1          1
+        c_i^(i) can be always updated since c_i^(i) = -----  --------  ... -----
+                                                      psi_j  psi_{j-1}     psi_1
+      */
+      cjk[i] = cjk[i-1]*i/psi[i-1];
+      psij_1 = psi[i-1];
+    }
+
+    /* update c_j^(i) */
+
+    /*j does not need to go till kused */
+    for(j=i+1; j<=kused-k+i; j++) {
+
+      cjk[j] = ( i* cjk_1[j-1] + cjk[j-1] * (delt + psij_1) ) / psi[j-1];      
+      psij_1 = psi[j-1];
+    }
+
+    /* save existing c_j^(i)'s */
+    for(j=i+1; j<=kused-k+i; j++) cjk_1[j] = cjk[j];
+  }
+
+  /* Compute sum (c_j(t) * phi(t)) */
+
+  N_VConst(ZERO, dky);
+  for(j=k; j<=kused; j++)
+  {
+    N_VLinearSum(ONE, dky, cjk[j], phi[j], dky);
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDAGetQuad
+ *
+ * The following function can be called to obtain the quadrature 
+ * variables after a successful integration step.                 
+ *
+ * This is just a wrapper that calls IDAGetQuadDky with k=0.
+ */
+
+int IDAGetQuad(void *ida_mem, realtype *ptret, N_Vector yQout)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuad", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem)ida_mem;
+
+  *ptret = tretlast;
+
+  return IDAGetQuadDky(ida_mem, tretlast, 0, yQout);
+}
+
+/*
+ * IDAGetQuadDky
+ *
+ * Returns the quadrature variables (or their 
+ * derivatives up to the current method order) at any time within
+ * the last integration step (dense output).
+ */
+int IDAGetQuadDky(void *ida_mem, realtype t, int k, N_Vector dkyQ)
+{
+  IDAMem IDA_mem;
+  realtype tfuzz, tp, delt, psij_1;
+  int i, j;
+  realtype cjk  [MXORDP1];
+  realtype cjk_1[MXORDP1];
+
+  /* Check ida_mem */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadDky", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem; 
+
+  /* Ckeck if quadrature was initialized */
+  if (quadr != TRUE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUAD, "IDAS", "IDAGetQuadDky", MSG_NO_QUAD);
+    return(IDA_NO_QUAD);
+  }
+
+  if (dkyQ == NULL) {
+    IDAProcessError(IDA_mem, IDA_BAD_DKY, "IDAS", "IDAGetQuadDky", MSG_NULL_DKY);
+    return(IDA_BAD_DKY);
+  }
+  
+  if ((k < 0) || (k > kk)) {
+    IDAProcessError(IDA_mem, IDA_BAD_K, "IDAS", "IDAGetQuadDky", MSG_BAD_K);
+    return(IDA_BAD_K);
+  }
+
+  /* Check t for legality.  Here tn - hused is t_{n-1}. */
+ 
+  tfuzz = HUNDRED * uround * (tn + hh);
+  tp = tn - hused - tfuzz;
+  if ( (t - tp)*hh < ZERO) {
+    IDAProcessError(IDA_mem, IDA_BAD_T, "IDAS", "IDAGetQuadDky", MSG_BAD_T, t, tn-hused, tn);
+    return(IDA_BAD_T);
+  }
+
+  /* Initialize the c_j^(k) and c_k^(k-1) */
+  for(i=0; i<MXORDP1; i++) {
+    cjk  [i] = 0;
+    cjk_1[i] = 0;
+  }
+  delt = t-tn;
+
+  for(i=0; i<=k; i++) {
+
+    if(i==0) {
+      cjk[i] = 1;
+      psij_1 = 0;
+    }else {
+      cjk[i] = cjk[i-1]*i/psi[i-1];
+      psij_1 = psi[i-1];
+    }
+
+    /* update c_j^(i) */
+    for(j=i+1; j<=kused-k+i; j++) {
+
+      cjk[j] = ( i* cjk_1[j-1] + cjk[j-1] * (delt + psij_1) ) / psi[j-1];      
+      psij_1 = psi[j-1];
+    }
+
+    /* save existing c_j^(i)'s */
+    for(j=i+1; j<=kused-k+i; j++) cjk_1[j] = cjk[j];
+  }
+
+  /* Compute sum (c_j(t) * phi(t)) */
+  N_VConst(ZERO, dkyQ);
+  for(j=k; j<=kused; j++)
+  {
+    N_VLinearSum(ONE, dkyQ, cjk[j], phiQ[j], dkyQ);
+  }
+
+  return(IDA_SUCCESS);
+}
+
+
+/* 
+ * IDAGetSens
+ *
+ * This routine extracts sensitivity solution into yySout at the
+ * time at which IDASolve returned the solution.
+ * This is just a wrapper that calls IDAGetSensDky1 with k=0 and 
+ * is=0, 1, ... ,NS-1.
+ */
+
+int IDAGetSens(void *ida_mem, realtype *ptret, N_Vector *yySout)
+{
+  IDAMem IDA_mem;
+  int is, ierr=0;
+
+  /* Check ida_mem */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSens", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /*Check the parameters */  
+  if (yySout == NULL) {
+    IDAProcessError(IDA_mem, IDA_BAD_DKY, "IDAS", "IDAGetSens", MSG_NULL_DKY);
+    return(IDA_BAD_DKY);
+  }
+
+  /* Is the sensibility enabled? */
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSens", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  *ptret = tretlast;
+  
+  for(is=0; is<Ns; is++)
+    if( IDA_SUCCESS != (ierr = IDAGetSensDky1(ida_mem, *ptret, 0, is, yySout[is])) ) break;
+
+  return(ierr);
+}
+
+/*
+ * IDAGetSensDky
+ *
+ * Computes the k-th derivative of all sensitivities of the y function at 
+ * time t. It repeatedly calls IDAGetSensDky. The argument dkyS must be 
+ * a pointer to N_Vector and must be allocated by the user to hold at 
+ * least Ns vectors.
+ */
+int IDAGetSensDky(void *ida_mem, realtype t, int k, N_Vector *dkySout)
+{
+  int is, ier=0;
+  IDAMem IDA_mem;
+
+  /* Check all inputs for legality */
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSensDky", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensDky", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  if (dkySout == NULL) {
+    IDAProcessError(IDA_mem, IDA_BAD_DKY, "IDAS", "IDAGetSensDky", MSG_NULL_DKY);
+    return(IDA_BAD_DKY);
+  }
+  
+  if ((k < 0) || (k > kk)) {
+    IDAProcessError(IDA_mem, IDA_BAD_K, "IDAS", "IDAGetSensDky", MSG_BAD_K);
+    return(IDA_BAD_K);
+  } 
+
+  for (is=0; is<Ns; is++) {
+    ier = IDAGetSensDky1(ida_mem, t, k, is, dkySout[is]);
+    if (ier!=IDA_SUCCESS) break;
+  }
+  
+  return(ier);
+}
+
+
+/*
+ * IDAGetSens1
+ *
+ * This routine extracts the is-th sensitivity solution into ySout
+ * at the time at which IDASolve returned the solution.
+ * This is just a wrapper that calls IDASensDky1 with k=0.
+ */
+
+int IDAGetSens1(void *ida_mem, realtype *ptret, int is, N_Vector yySret)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSens1", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  *ptret = tretlast;
+
+  return IDAGetSensDky1(ida_mem, *ptret, 0, is, yySret);
+}
+
+/*
+ * IDAGetSensDky1
+ *
+ * IDASensDky1 computes the kth derivative of the yS[is] function
+ * at time t, where tn-hu <= t <= tn, tn denotes the current         
+ * internal time reached, and hu is the last internal step size   
+ * successfully used by the solver. The user may request 
+ * is=0, 1, ..., Ns-1 and k=0, 1, ..., kk, where kk is the current
+ * order. The derivative vector is returned in dky. This vector 
+ * must be allocated by the caller. It is only legal to call this         
+ * function after a successful return from IDASolve with sensitivity 
+ * computation enabled.
+ */
+int IDAGetSensDky1(void *ida_mem, realtype t, int k, int is, N_Vector dkyS)
+{
+  IDAMem IDA_mem;  
+  realtype tfuzz, tp, delt, psij_1;
+  int i, j;
+  realtype cjk  [MXORDP1];
+  realtype cjk_1[MXORDP1];
+
+  /* Check all inputs for legality */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSensDky1", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensDky1", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  if (dkyS == NULL) {
+    IDAProcessError(IDA_mem, IDA_BAD_DKY, "IDAS", "IDAGetSensDky1", MSG_NULL_DKY);
+    return(IDA_BAD_DKY);
+  }
+
+  /* Is the requested sensitivity index valid? */
+  if(is<0 || is >= Ns) {
+    IDAProcessError(IDA_mem, IDA_BAD_IS, "IDAS", "IDAGetSensDky1", MSG_BAD_IS);
+  }
+  
+  /* Is the requested order valid? */
+  if ((k < 0) || (k > kused)) {
+    IDAProcessError(IDA_mem, IDA_BAD_K, "IDAS", "IDAGetSensDky1", MSG_BAD_K);
+    return(IDA_BAD_K);
+  } 
+
+  /* Check t for legality.  Here tn - hused is t_{n-1}. */
+ 
+  tfuzz = HUNDRED * uround * (SUNRabs(tn) + SUNRabs(hh));
+  if (hh < ZERO) tfuzz = - tfuzz;
+  tp = tn - hused - tfuzz;
+  if ((t - tp)*hh < ZERO) {
+    IDAProcessError(IDA_mem, IDA_BAD_T, "IDAS", "IDAGetSensDky1", MSG_BAD_T, t, tn-hused, tn);
+    return(IDA_BAD_T);
+  }
+
+  /* Initialize the c_j^(k) and c_k^(k-1) */
+  for(i=0; i<MXORDP1; i++) {
+    cjk  [i] = 0;
+    cjk_1[i] = 0;
+  }
+
+  delt = t - tn;
+
+  for(i=0; i<=k; i++) {
+    
+    if(i==0) {  
+      cjk[i] = 1;
+      psij_1 = 0;
+    }else {     
+      cjk[i] = cjk[i-1]*i/psi[i-1];
+      psij_1 = psi[i-1];
+    }
+
+    /* Update cjk based on the reccurence */ 
+    for(j=i+1; j<=kused-k+i; j++) {
+      cjk[j] = ( i* cjk_1[j-1] + cjk[j-1] * (delt + psij_1) ) / psi[j-1];      
+      psij_1 = psi[j-1];
+    }
+
+    /* Update cjk_1 for the next step */
+    for(j=i+1; j<=kused-k+i; j++) cjk_1[j] = cjk[j];
+  }  
+
+  /* Compute sum (c_j(t) * phi(t)) */
+  N_VConst(ZERO, dkyS);
+  for(j=k; j<=kused; j++)
+  {
+    N_VLinearSum(ONE, dkyS, cjk[j], phiS[j][is], dkyS);
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * IDAGetQuadSens
+ *
+ * This routine extracts quadrature sensitivity solution into yyQSout at the
+ * time at which IDASolve returned the solution.
+ * This is just a wrapper that calls IDAGetQuadSensDky1 with k=0 and 
+ * is=0, 1, ... ,NS-1.
+ */
+
+int IDAGetQuadSens(void *ida_mem, realtype *ptret, N_Vector *yyQSout)
+{
+  IDAMem IDA_mem;
+  int is, ierr=0;
+
+  /* Check ida_mem */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadSens", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /*Check the parameters */  
+  if (yyQSout == NULL) {
+    IDAProcessError(IDA_mem, IDA_BAD_DKY, "IDAS", "IDAGetQuadSens", MSG_NULL_DKY);
+    return(IDA_BAD_DKY);
+  }
+
+  /* Is the sensibility enabled? */
+  if (quadr_sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetQuadSens", MSG_NO_QUADSENSI);
+    return(IDA_NO_SENS);
+  }
+
+  *ptret = tretlast;
+  
+  for(is=0; is<Ns; is++)
+    if( IDA_SUCCESS != (ierr = IDAGetQuadSensDky1(ida_mem, *ptret, 0, is, yyQSout[is])) ) break;
+
+  return(ierr);
+}
+
+/*
+ * IDAGetQuadSensDky
+ *
+ * Computes the k-th derivative of all quadratures sensitivities of the y function at 
+ * time t. It repeatedly calls IDAGetQuadSensDky. The argument dkyS must be 
+ * a pointer to N_Vector and must be allocated by the user to hold at 
+ * least Ns vectors.
+ */
+int IDAGetQuadSensDky(void *ida_mem, realtype t, int k, N_Vector *dkyQSout)
+{
+  int is, ier=0;
+  IDAMem IDA_mem;
+
+  /* Check all inputs for legality */
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadSensDky", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetQuadSensDky", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  if (quadr_sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAGetQuadSensDky", MSG_NO_QUADSENSI);
+    return(IDA_NO_QUADSENS);
+  }
+
+  if (dkyQSout == NULL) {
+    IDAProcessError(IDA_mem, IDA_BAD_DKY, "IDAS", "IDAGetQuadSensDky", MSG_NULL_DKY);
+    return(IDA_BAD_DKY);
+  }
+  
+  if ((k < 0) || (k > kk)) {
+    IDAProcessError(IDA_mem, IDA_BAD_K, "IDAS", "IDAGetQuadSensDky", MSG_BAD_K);
+    return(IDA_BAD_K);
+  } 
+
+  for (is=0; is<Ns; is++) {
+    ier = IDAGetQuadSensDky1(ida_mem, t, k, is, dkyQSout[is]);
+    if (ier!=IDA_SUCCESS) break;
+  }
+  
+  return(ier);
+}
+
+
+/*
+ * IDAGetQuadSens1
+ *
+ * This routine extracts the is-th quadrature sensitivity solution into yQSout
+ * at the time at which IDASolve returned the solution.
+ * This is just a wrapper that calls IDASensDky1 with k=0.
+ */
+
+int IDAGetQuadSens1(void *ida_mem, realtype *ptret, int is, N_Vector yyQSret)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadSens1", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetQuadSens1", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  if (quadr_sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAGetQuadSens1", MSG_NO_QUADSENSI);
+    return(IDA_NO_QUADSENS);
+  }
+
+  if (yyQSret == NULL) {
+    IDAProcessError(IDA_mem, IDA_BAD_DKY, "IDAS", "IDAGetQuadSens1", MSG_NULL_DKY);
+    return(IDA_BAD_DKY);
+  }
+
+  *ptret = tretlast;
+
+  return IDAGetQuadSensDky1(ida_mem, *ptret, 0, is, yyQSret);
+}
+
+/*
+ * IDAGetQuadSensDky1
+ *
+ * IDAGetQuadSensDky1 computes the kth derivative of the yS[is] function
+ * at time t, where tn-hu <= t <= tn, tn denotes the current         
+ * internal time reached, and hu is the last internal step size   
+ * successfully used by the solver. The user may request 
+ * is=0, 1, ..., Ns-1 and k=0, 1, ..., kk, where kk is the current
+ * order. The derivative vector is returned in dky. This vector 
+ * must be allocated by the caller. It is only legal to call this         
+ * function after a successful return from IDASolve with sensitivity 
+ * computation enabled.
+ */
+int IDAGetQuadSensDky1(void *ida_mem, realtype t, int k, int is, N_Vector dkyQS)
+{
+  IDAMem IDA_mem;  
+  realtype tfuzz, tp, delt, psij_1;
+  int i, j;
+  realtype cjk  [MXORDP1];
+  realtype cjk_1[MXORDP1];
+
+  /* Check all inputs for legality */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadSensDky1", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetQuadSensDky1", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  if (quadr_sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAGetQuadSensDky1", MSG_NO_QUADSENSI);
+    return(IDA_NO_QUADSENS);
+  }
+
+
+  if (dkyQS == NULL) {
+    IDAProcessError(IDA_mem, IDA_BAD_DKY, "IDAS", "IDAGetQuadSensDky1", MSG_NULL_DKY);
+    return(IDA_BAD_DKY);
+  }
+
+  /* Is the requested sensitivity index valid*/
+  if(is<0 || is >= Ns) {
+    IDAProcessError(IDA_mem, IDA_BAD_IS, "IDAS", "IDAGetQuadSensDky1", MSG_BAD_IS);
+  }
+  
+  /* Is the requested order valid? */
+  if ((k < 0) || (k > kused)) {
+    IDAProcessError(IDA_mem, IDA_BAD_K, "IDAS", "IDAGetQuadSensDky1", MSG_BAD_K);
+    return(IDA_BAD_K);
+  } 
+
+  /* Check t for legality.  Here tn - hused is t_{n-1}. */
+ 
+  tfuzz = HUNDRED * uround * (SUNRabs(tn) + SUNRabs(hh));
+  if (hh < ZERO) tfuzz = - tfuzz;
+  tp = tn - hused - tfuzz;
+  if ((t - tp)*hh < ZERO) {
+    IDAProcessError(IDA_mem, IDA_BAD_T, "IDAS", "IDAGetQuadSensDky1", MSG_BAD_T, t, tn-hused, tn);
+    return(IDA_BAD_T);
+  }
+
+  /* Initialize the c_j^(k) and c_k^(k-1) */
+  for(i=0; i<MXORDP1; i++) {
+    cjk  [i] = 0;
+    cjk_1[i] = 0;
+  }
+
+  delt = t - tn;
+
+  for(i=0; i<=k; i++) {
+    
+    if(i==0) {  
+      cjk[i] = 1;
+      psij_1 = 0;
+    }else {     
+      cjk[i] = cjk[i-1]*i/psi[i-1];
+      psij_1 = psi[i-1];
+    }
+
+    /* Update cjk based on the reccurence */ 
+    for(j=i+1; j<=kused-k+i; j++) {
+      cjk[j] = ( i* cjk_1[j-1] + cjk[j-1] * (delt + psij_1) ) / psi[j-1];      
+      psij_1 = psi[j-1];
+    }
+
+    /* Update cjk_1 for the next step */
+    for(j=i+1; j<=kused-k+i; j++) cjk_1[j] = cjk[j];
+  }  
+
+  /* Compute sum (c_j(t) * phi(t)) */
+  N_VConst(ZERO, dkyQS);
+  for(j=k; j<=kused; j++)
+  {
+    N_VLinearSum(ONE, dkyQS, cjk[j], phiQS[j][is], dkyQS);
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Deallocation functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAFree
+ *
+ * This routine frees the problem memory allocated by IDAInit
+ * Such memory includes all the vectors allocated by IDAAllocVectors,
+ * and the memory lmem for the linear solver (deallocated by a call
+ * to lfree).
+ */
+
+void IDAFree(void **ida_mem)
+{
+  IDAMem IDA_mem;
+
+  if (*ida_mem == NULL) return;
+
+  IDA_mem = (IDAMem) (*ida_mem);
+  
+  IDAFreeVectors(IDA_mem);
+
+  IDAQuadFree(IDA_mem);
+
+  IDASensFree(IDA_mem);
+
+  IDAQuadSensFree(IDA_mem);
+
+  IDAAdjFree(IDA_mem);
+
+  if (lfree != NULL) lfree(IDA_mem);
+
+  if (nrtfn > 0) {
+    free(glo); glo = NULL; 
+    free(ghi);  ghi = NULL;
+    free(grout);  grout = NULL;
+    free(iroots); iroots = NULL;
+    free(rootdir); rootdir = NULL;
+    free(gactive); gactive = NULL;
+  }
+
+  free(*ida_mem);
+  *ida_mem = NULL;
+}
+
+/*
+ * IDAQuadFree
+ *
+ * IDAQuadFree frees the problem memory in ida_mem allocated
+ * for quadrature integration. Its only argument is the pointer
+ * ida_mem returned by IDACreate. 
+ */
+
+void IDAQuadFree(void *ida_mem)
+{
+  IDAMem IDA_mem;
+  
+  if (ida_mem == NULL) return;
+  IDA_mem = (IDAMem) ida_mem;
+
+  if(quadMallocDone) {
+    IDAQuadFreeVectors(IDA_mem);
+    quadMallocDone = FALSE;
+    quadr = FALSE;
+  }
+}
+
+/*
+ * IDASensFree
+ *
+ * IDASensFree frees the problem memory in ida_mem allocated
+ * for sensitivity analysis. Its only argument is the pointer
+ * ida_mem returned by IDACreate. 
+ */
+
+void IDASensFree(void *ida_mem)
+{
+  IDAMem IDA_mem;
+  
+  if (ida_mem == NULL) return;
+  IDA_mem = (IDAMem) ida_mem;
+
+  if(sensMallocDone) {
+    IDASensFreeVectors(IDA_mem);
+    sensMallocDone = FALSE;
+    sensi = FALSE;
+  }
+}
+
+/*
+ * IDAQuadSensFree
+ *
+ * IDAQuadSensFree frees the problem memory in ida_mem allocated
+ * for quadrature sensitivity analysis. Its only argument is the 
+ * pointer ida_mem returned by IDACreate. 
+ */
+void IDAQuadSensFree(void* ida_mem)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) return;
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (quadSensMallocDone) {
+    IDAQuadSensFreeVectors(IDA_mem);
+    quadSensMallocDone=FALSE;
+    quadr_sensi = FALSE;
+  }
+}
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/*
+ * IDACheckNvector
+ *
+ * This routine checks if all required vector operations are present.
+ * If any of them is missing it returns FALSE.
+ */
+
+static booleantype IDACheckNvector(N_Vector tmpl)
+{
+  if ((tmpl->ops->nvclone        == NULL) ||
+     (tmpl->ops->nvdestroy      == NULL) ||
+     (tmpl->ops->nvlinearsum    == NULL) ||
+     (tmpl->ops->nvconst        == NULL) ||
+     (tmpl->ops->nvprod         == NULL) ||
+     (tmpl->ops->nvscale        == NULL) ||
+     (tmpl->ops->nvabs          == NULL) ||
+     (tmpl->ops->nvinv          == NULL) ||
+     (tmpl->ops->nvaddconst     == NULL) ||
+     (tmpl->ops->nvwrmsnorm     == NULL) ||
+     (tmpl->ops->nvmin          == NULL))
+    return(FALSE);
+  else
+    return(TRUE);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Memory allocation/deallocation
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAAllocVectors
+ *
+ * This routine allocates the IDA vectors ewt, tempv1, tempv2, and
+ * phi[0], ..., phi[maxord].
+ * If all memory allocations are successful, IDAAllocVectors returns 
+ * TRUE. Otherwise all allocated memory is freed and IDAAllocVectors 
+ * returns FALSE.
+ * This routine also sets the optional outputs lrw and liw, which are
+ * (respectively) the lengths of the real and integer work spaces
+ * allocated here.
+ */
+
+static booleantype IDAAllocVectors(IDAMem IDA_mem, N_Vector tmpl)
+{
+  int i, j, maxcol;
+
+  /* Allocate ewt, ee, delta, tempv1, tempv2 */
+  
+  ewt = N_VClone(tmpl);
+  if (ewt == NULL) return(FALSE);
+
+  ee = N_VClone(tmpl);
+  if (ee == NULL) {
+    N_VDestroy(ewt);
+    return(FALSE);
+  }
+
+  delta = N_VClone(tmpl);
+  if (delta == NULL) {
+    N_VDestroy(ewt);
+    N_VDestroy(ee);
+    return(FALSE);
+  }
+
+  tempv1 = N_VClone(tmpl);
+  if (tempv1 == NULL) {
+    N_VDestroy(ewt);
+    N_VDestroy(ee);
+    N_VDestroy(delta);
+    return(FALSE);
+  }
+
+  tempv2= N_VClone(tmpl);
+  if (tempv2 == NULL) {
+    N_VDestroy(ewt);
+    N_VDestroy(ee);
+    N_VDestroy(delta);
+    N_VDestroy(tempv1);
+    return(FALSE);
+  }
+
+  savres = tempv1;
+
+  /* Allocate phi[0] ... phi[maxord].  Make sure phi[2] and phi[3] are
+  allocated (for use as temporary vectors), regardless of maxord.       */
+
+  maxcol = SUNMAX(maxord,3);
+  for (j=0; j <= maxcol; j++) {
+    phi[j] = N_VClone(tmpl);
+    if (phi[j] == NULL) {
+      N_VDestroy(ewt);
+      N_VDestroy(ee);
+      N_VDestroy(delta);
+      N_VDestroy(tempv1);
+      N_VDestroy(tempv2);
+      for (i=0; i < j; i++) N_VDestroy(phi[i]);
+      return(FALSE);
+    }
+  }
+
+  /* Update solver workspace lengths  */
+  lrw += (maxcol + 6)*lrw1;
+  liw += (maxcol + 6)*liw1;
+
+  /* Store the value of maxord used here */
+  IDA_mem->ida_maxord_alloc = maxord;
+
+  return(TRUE);
+}
+
+/*
+ * IDAfreeVectors
+ *
+ * This routine frees the IDA vectors allocated for IDA.
+ */
+
+static void IDAFreeVectors(IDAMem IDA_mem)
+{
+  int j, maxcol;
+  
+  N_VDestroy(ewt);       ewt = NULL;
+  N_VDestroy(ee);         ee = NULL;
+  N_VDestroy(delta);   delta = NULL;
+  N_VDestroy(tempv1); tempv1 = NULL;
+  N_VDestroy(tempv2); tempv2 = NULL;
+  maxcol = SUNMAX(IDA_mem->ida_maxord_alloc,3);
+  for(j=0; j <= maxcol; j++) { N_VDestroy(phi[j]); phi[j] = NULL;}
+
+  lrw -= (maxcol + 6)*lrw1;
+  liw -= (maxcol + 6)*liw1;
+
+  if (IDA_mem->ida_VatolMallocDone) {
+    N_VDestroy(Vatol); Vatol = NULL;
+    lrw -= lrw1;
+    liw -= liw1;
+  }
+
+  if (IDA_mem->ida_constraintsMallocDone) {
+    N_VDestroy(constraints); constraints = NULL;
+    lrw -= lrw1;
+    liw -= liw1;
+  }
+
+  if (IDA_mem->ida_idMallocDone) {
+    N_VDestroy(id); id = NULL;
+    lrw -= lrw1;
+    liw -= liw1;
+  }
+
+}
+
+/*
+ * IDAQuadAllocVectors
+ *
+ * NOTE: Space for ewtQ is allocated even when errconQ=FALSE, 
+ * although in this case, ewtQ is never used. The reason for this
+ * decision is to allow the user to re-initialize the quadrature
+ * computation with errconQ=TRUE, after an initialization with
+ * errconQ=FALSE, without new memory allocation within 
+ * IDAQuadReInit.
+ */
+
+static booleantype IDAQuadAllocVectors(IDAMem IDA_mem, N_Vector tmpl)
+{
+  int i, j;
+
+  /* Allocate yyQ */
+  yyQ = N_VClone(tmpl);
+  if (yyQ == NULL) {
+    return (FALSE);
+  }
+
+  /* Allocate ypQ */
+  ypQ = N_VClone(tmpl);
+  if (ypQ == NULL) {
+    N_VDestroy(yyQ);
+    return (FALSE);
+  }
+
+  /* Allocate ewtQ */
+  ewtQ = N_VClone(tmpl);
+  if (ewtQ == NULL) {
+    N_VDestroy(yyQ);
+    N_VDestroy(ypQ);
+    return (FALSE);
+  }
+
+  /* Allocate eeQ */
+  eeQ = N_VClone(tmpl);
+  if (eeQ == NULL) {
+    N_VDestroy(yyQ);
+    N_VDestroy(ypQ);
+    N_VDestroy(ewtQ);
+    return (FALSE);
+  }
+
+  for (j=0; j <= maxord; j++) {
+    phiQ[j] = N_VClone(tmpl);
+    if (phiQ[j] == NULL) {
+      N_VDestroy(yyQ);
+      N_VDestroy(ypQ);
+      N_VDestroy(ewtQ);
+      N_VDestroy(eeQ);
+      for (i=0; i < j; i++) N_VDestroy(phiQ[i]);
+      return(FALSE);
+    }
+  }
+
+  lrw += (maxord+4)*lrw1Q;
+  liw += (maxord+4)*liw1Q;
+
+  return(TRUE);
+}
+
+
+
+/*
+ * IDAQuadFreeVectors
+ *
+ * This routine frees the IDAS vectors allocated in IDAQuadAllocVectors.
+ */
+
+static void IDAQuadFreeVectors(IDAMem IDA_mem)
+{
+  int j;
+
+  N_VDestroy(yyQ);   yyQ = NULL;
+  N_VDestroy(ypQ);   ypQ = NULL;
+  N_VDestroy(ewtQ); ewtQ = NULL;
+  N_VDestroy(eeQ);   eeQ = NULL;
+  for(j=0; j <= maxord; j++) { N_VDestroy(phiQ[j]); phiQ[j] = NULL;}
+
+  lrw -= (maxord+5)*lrw1Q;
+  liw -= (maxord+5)*liw1Q;
+
+  if (IDA_mem->ida_VatolQMallocDone) {
+    N_VDestroy(VatolQ); VatolQ = NULL;
+    lrw -= lrw1Q;
+    liw -= liw1Q;
+  }
+
+  IDA_mem->ida_VatolQMallocDone = FALSE;
+}
+
+/*
+ * IDASensAllocVectors
+ *
+ * Allocates space for the N_Vectors, plist, and pbar required for FSA.
+ */
+
+static booleantype IDASensAllocVectors(IDAMem IDA_mem, N_Vector tmpl)
+{
+  int j, maxcol;
+  
+  tmpS1 = tempv1;
+  tmpS2 = tempv2;
+
+  /* Allocate space for workspace vectors */
+
+  tmpS3 = N_VClone(tmpl);
+  if (tmpS3==NULL) {
+    return(FALSE);
+  }
+  
+  ewtS = N_VCloneVectorArray(Ns, tmpl);
+  if (ewtS==NULL) {
+    N_VDestroy(tmpS3);
+    return(FALSE);
+  }
+
+  eeS = N_VCloneVectorArray(Ns, tmpl);
+  if (eeS==NULL) {
+    N_VDestroy(tmpS3);
+    N_VDestroyVectorArray(ewtS, Ns);
+    return(FALSE);
+  }
+
+  yyS = N_VCloneVectorArray(Ns, tmpl);
+  if (yyS==NULL) {
+    N_VDestroyVectorArray(eeS, Ns);
+    N_VDestroyVectorArray(ewtS, Ns);
+    N_VDestroy(tmpS3);
+    return(FALSE);
+  }
+  
+  ypS = N_VCloneVectorArray(Ns, tmpl);
+  if (ypS==NULL) {
+    N_VDestroyVectorArray(yyS, Ns);
+    N_VDestroyVectorArray(eeS, Ns);
+    N_VDestroyVectorArray(ewtS, Ns);
+    N_VDestroy(tmpS3);
+    return(FALSE);
+  }
+  
+  deltaS = N_VCloneVectorArray(Ns, tmpl);
+  if (deltaS==NULL) {
+    N_VDestroyVectorArray(ypS, Ns);
+    N_VDestroyVectorArray(yyS, Ns);
+    N_VDestroyVectorArray(eeS, Ns);
+    N_VDestroyVectorArray(ewtS, Ns);
+    N_VDestroy(tmpS3);
+    return(FALSE);
+  }
+
+  /* Update solver workspace lengths */
+  lrw += (3*Ns+1)*lrw1;
+  liw += (3*Ns+1)*liw1;
+
+  /* Allocate space for phiS */
+  /*  Make sure phiS[2], phiS[3] and phiS[4] are
+      allocated (for use as temporary vectors), regardless of maxord.*/
+
+  maxcol = SUNMAX(maxord,4);
+  for (j=0; j <= maxcol; j++) {
+    phiS[j] = N_VCloneVectorArray(Ns, tmpl);
+    if (phiS[j] == NULL) {
+      N_VDestroy(tmpS3);
+      N_VDestroyVectorArray(ewtS, Ns);
+      N_VDestroyVectorArray(eeS, Ns);
+      N_VDestroyVectorArray(yyS, Ns);
+      N_VDestroyVectorArray(ypS, Ns);
+      N_VDestroyVectorArray(deltaS, Ns);
+      return(FALSE);
+    }
+  }
+
+  /* Update solver workspace lengths */
+  lrw += maxcol*Ns*lrw1;
+  liw += maxcol*Ns*liw1;
+
+  /* Allocate space for pbar and plist */
+
+  pbar = NULL;
+  pbar = (realtype *)malloc(Ns*sizeof(realtype));
+  if (pbar == NULL) {
+    N_VDestroy(tmpS3);
+    N_VDestroyVectorArray(ewtS, Ns);
+    N_VDestroyVectorArray(eeS, Ns);
+    N_VDestroyVectorArray(yyS, Ns);
+    N_VDestroyVectorArray(ypS, Ns);
+    N_VDestroyVectorArray(deltaS, Ns);
+    for (j=0; j<=maxcol; j++) N_VDestroyVectorArray(phiS[j], Ns);
+    return(FALSE);
+  }
+
+  plist = NULL;
+  plist = (int *)malloc(Ns*sizeof(int));
+  if (plist == NULL) {
+    N_VDestroy(tmpS3);
+    N_VDestroyVectorArray(ewtS, Ns);
+    N_VDestroyVectorArray(eeS, Ns);
+    N_VDestroyVectorArray(yyS, Ns);
+    N_VDestroyVectorArray(ypS, Ns);
+    N_VDestroyVectorArray(deltaS, Ns);
+    free(pbar); pbar = NULL;
+    return(FALSE);
+  }
+
+  /* Update solver workspace lengths */
+  lrw += Ns;
+  liw += Ns;
+
+  return(TRUE);
+}
+
+/*
+ * IDASensFreeVectors
+ *
+ * Frees memory allocated by IDASensAllocVectors.
+ */
+
+static void IDASensFreeVectors(IDAMem IDA_mem)
+{
+  int j, maxcol;
+
+  N_VDestroyVectorArray(deltaS, Ns);
+  N_VDestroyVectorArray(ypS, Ns);
+  N_VDestroyVectorArray(yyS, Ns);
+  N_VDestroyVectorArray(eeS, Ns);
+  N_VDestroyVectorArray(ewtS, Ns);
+  N_VDestroy(tmpS3);
+
+  maxcol = SUNMAX(IDA_mem->ida_maxord_alloc, 4);
+  for (j=0; j<=maxcol; j++) 
+    N_VDestroyVectorArray(phiS[j], Ns);
+
+  free(pbar); pbar = NULL;
+  free(plist); plist = NULL;
+
+  lrw -= ( (maxcol+3)*Ns + 1 ) * lrw1 + Ns;
+  liw -= ( (maxcol+3)*Ns + 1 ) * liw1 + Ns;
+
+  if (IDA_mem->ida_VatolSMallocDone) {
+    N_VDestroyVectorArray(VatolS, Ns);
+    lrw -= Ns*lrw1;
+    liw -= Ns*liw1;
+    IDA_mem->ida_VatolSMallocDone = FALSE;
+  } 
+  if (IDA_mem->ida_SatolSMallocDone) {
+    free(SatolS); SatolS = NULL;
+    lrw -= Ns;
+    IDA_mem->ida_SatolSMallocDone = FALSE;
+  }
+
+}
+
+
+/*
+ * IDAQuadSensAllocVectors
+ *
+ * Create (through duplication) N_Vectors used for quadrature sensitivity analysis, 
+ * using the N_Vector 'tmpl' as a template.
+ */
+
+static booleantype IDAQuadSensAllocVectors(IDAMem IDA_mem, N_Vector tmpl) 
+{
+  int i, j, maxcol;
+
+  /* Allocate yQS */
+  yyQS = N_VCloneVectorArray(Ns, tmpl);
+  if (yyQS == NULL) {
+    return(FALSE);
+  }
+
+  /* Allocate ewtQS */
+  ewtQS = N_VCloneVectorArray(Ns, tmpl);
+  if (ewtQS == NULL) {
+    N_VDestroyVectorArray(yyQS, Ns);
+    return(FALSE);
+  }
+
+  /* Allocate tempvQS */
+  tempvQS = N_VCloneVectorArray(Ns, tmpl);
+  if (tempvQS == NULL) {
+    N_VDestroyVectorArray(yyQS, Ns);
+    N_VDestroyVectorArray(ewtQS, Ns);
+    return(FALSE);
+  }
+
+  eeQS =  N_VCloneVectorArray(Ns, tmpl);
+  if (eeQS == NULL) {
+    N_VDestroyVectorArray(yyQS, Ns);
+    N_VDestroyVectorArray(ewtQS, Ns);
+    N_VDestroyVectorArray(tempvQS, Ns);
+    return(FALSE);
+  }
+
+  savrhsQ = N_VClone(tmpl);
+  if (savrhsQ == NULL) {
+    N_VDestroyVectorArray(yyQS, Ns);
+    N_VDestroyVectorArray(ewtQS, Ns);
+    N_VDestroyVectorArray(tempvQS, Ns);
+    N_VDestroyVectorArray(eeQS, Ns);
+  }
+
+  maxcol = SUNMAX(maxord,4);
+  /* Allocate phiQS */
+  for (j=0; j<=maxcol; j++) {
+    phiQS[j] = N_VCloneVectorArray(Ns, tmpl);
+    if (phiQS[j] == NULL) {
+      N_VDestroyVectorArray(yyQS, Ns);
+      N_VDestroyVectorArray(ewtQS, Ns);
+      N_VDestroyVectorArray(tempvQS, Ns);
+      N_VDestroyVectorArray(eeQS, Ns);
+      N_VDestroy(savrhsQ);
+      for (i=0; i<j; i++) N_VDestroyVectorArray(phiQS[i], Ns);
+      return(FALSE);
+    }
+  }
+
+  /* Update solver workspace lengths */
+  lrw += (maxcol + 5)*Ns*lrw1Q;
+  liw += (maxcol + 5)*Ns*liw1Q;
+
+  return(TRUE);
+}
+
+
+/*
+ * IDAQuadSensFreeVectors
+ *
+ * This routine frees the IDAS vectors allocated in IDAQuadSensAllocVectors.
+ */
+
+static void IDAQuadSensFreeVectors(IDAMem IDA_mem)
+{
+  int j, maxcol;
+
+  maxcol = SUNMAX(maxord, 4);
+
+  N_VDestroyVectorArray(yyQS, Ns);
+  N_VDestroyVectorArray(ewtQS, Ns);
+  N_VDestroyVectorArray(eeQS, Ns);
+  N_VDestroyVectorArray(tempvQS, Ns);
+  N_VDestroy(savrhsQ);
+
+  for (j=0; j<=maxcol; j++) N_VDestroyVectorArray(phiQS[j], Ns);  
+
+  lrw -= (maxcol + 5)*Ns*lrw1Q;
+  liw -= (maxcol + 5)*Ns*liw1Q;
+
+  if (IDA_mem->ida_VatolQSMallocDone) {
+    N_VDestroyVectorArray(VatolQS, Ns);
+    lrw -= Ns*lrw1Q;
+    liw -= Ns*liw1Q;
+  }
+  if (IDA_mem->ida_SatolQSMallocDone) {
+    free(SatolQS); SatolQS = NULL;
+    lrw -= Ns;
+  }
+  IDA_mem->ida_VatolQSMallocDone = FALSE;
+  IDA_mem->ida_SatolQSMallocDone = FALSE;
+}
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Initial setup
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAInitialSetup
+ *
+ * This routine is called by IDASolve once at the first step. 
+ * It performs all checks on optional inputs and inputs to 
+ * IDAInit/IDAReInit that could not be done before.
+ *
+ * If no merror is encountered, IDAInitialSetup returns IDA_SUCCESS. 
+ * Otherwise, it returns an error flag and reported to the error 
+ * handler function.
+ */
+
+int IDAInitialSetup(IDAMem IDA_mem)
+{
+  booleantype conOK;
+  int ier, retval;
+
+  /* Test for more vector operations, depending on options */
+  if (suppressalg)
+    if (phi[0]->ops->nvwrmsnormmask == NULL) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_BAD_NVECTOR);
+      return(IDA_ILL_INPUT);
+  }
+
+  /* Test id vector for legality */
+  if (suppressalg && (id==NULL)){ 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_MISSING_ID);
+    return(IDA_ILL_INPUT); 
+  }
+
+  /* Did the user specify tolerances? */
+  if (itol == IDA_NN) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_NO_TOLS);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Set data for efun */
+  if (IDA_mem->ida_user_efun) edata = user_data;
+  else                        edata = IDA_mem;
+
+  /* Initial error weight vectors */
+  ier = efun(phi[0], ewt, edata);
+  if (ier != 0) {
+    if (itol == IDA_WF) 
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_FAIL_EWT);
+    else
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_BAD_EWT);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (quadr) {
+
+    /* Evaluate quadrature rhs and set phiQ[1] */
+    retval = rhsQ(tn, phi[0], phi[1], phiQ[1], user_data);
+    nrQe++;
+    if (retval < 0) {
+      IDAProcessError(IDA_mem, IDA_QRHS_FAIL, "IDAS", "IDAInitialSetup", MSG_QRHSFUNC_FAILED);
+      return(IDA_QRHS_FAIL);
+    } else if (retval > 0) {
+      IDAProcessError(IDA_mem, IDA_FIRST_QRHS_ERR, "IDAS", "IDAInitialSetup", MSG_QRHSFUNC_FIRST);
+      return(IDA_FIRST_QRHS_ERR);
+    }
+
+    if (errconQ) {
+
+      /* Did the user specify tolerances? */
+      if (itolQ == IDA_NN) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_NO_TOLQ);
+        return(IDA_ILL_INPUT);
+      }
+      
+      /* Load ewtQ */
+      ier = IDAQuadEwtSet(IDA_mem, phiQ[0], ewtQ);
+      if (ier != 0) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_BAD_EWTQ);
+        return(IDA_ILL_INPUT);
+      }
+    }
+  } else {
+    errconQ = FALSE;
+  }
+
+  if (sensi) {
+
+    /* Did the user specify tolerances? */
+    if (itolS == IDA_NN) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_NO_TOLS);
+      return(IDA_ILL_INPUT);
+    }
+    
+    /* Load ewtS */
+    ier = IDASensEwtSet(IDA_mem, phiS[0], ewtS);
+    if (ier != 0) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_BAD_EWTS);
+      return(IDA_ILL_INPUT);
+    }
+  } else {
+    errconS = FALSE;
+  }
+
+  if (quadr_sensi) {
+
+    /* store the quadrature sensitivity residual. */
+    retval = rhsQS(Ns, tn, phi[0], phi[1], phiS[0], phiS[1], phiQ[1], phiQS[1], user_dataQS, tmpS1, tmpS2, tmpS3);
+    nrQSe++;
+    if (retval < 0) {
+      IDAProcessError(IDA_mem, IDA_QSRHS_FAIL, "IDAS", "IDAInitialSetup", MSG_QSRHSFUNC_FAILED);
+      return(IDA_QRHS_FAIL);
+    } else if (retval > 0) {
+      IDAProcessError(IDA_mem, IDA_FIRST_QSRHS_ERR, "IDAS", "IDAInitialSetup", MSG_QSRHSFUNC_FIRST);
+      return(IDA_FIRST_QSRHS_ERR);
+    }
+
+    /* If using the internal DQ functions, we must have access to fQ
+     * (i.e. quadrature integration must be enabled) and to the problem parameters */
+
+    if (rhsQSDQ) {
+      
+      /* Test if quadratures are defined, so we can use fQ */
+      if (!quadr) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_NULL_RHSQ);
+        return(IDA_ILL_INPUT);
+      }
+      
+      /* Test if we have the problem parameters */
+      if (p == NULL) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_NULL_P);
+        return(IDA_ILL_INPUT);
+      }
+    }
+
+    if (errconQS) {
+      /* Did the user specify tolerances? */
+      if (itolQS == IDA_NN) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_NO_TOLQS);
+        return(IDA_ILL_INPUT);
+      }
+
+      /* If needed, did the user provide quadrature tolerances? */
+      if ( (itolQS == IDA_EE) && (itolQ == IDA_NN) ) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_NO_TOLQ);
+        return(IDA_ILL_INPUT);
+      }
+    
+      /* Load ewtS */
+      ier = IDAQuadSensEwtSet(IDA_mem, phiQS[0], ewtQS);
+      if (ier != 0) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_BAD_EWTQS);
+        return(IDA_ILL_INPUT);
+      }
+    }
+  } else {
+    errconQS = FALSE;
+  }
+
+  /* Check to see if y0 satisfies constraints. */
+  if (constraintsSet) {
+
+    if (sensi && (ism==IDA_SIMULTANEOUS)) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_BAD_ISM_CONSTR);
+      return(IDA_ILL_INPUT);
+    }
+
+    conOK = N_VConstrMask(constraints, phi[0], tempv2);
+    if (!conOK) { 
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_Y0_FAIL_CONSTR);
+      return(IDA_ILL_INPUT); 
+    }
+  }
+
+  /* Check that lsolve exists and call linit function if it exists. */
+  if (lsolve == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_LSOLVE_NULL);
+    return(IDA_ILL_INPUT);
+  }
+
+  if (linit != NULL) {
+    retval = linit(IDA_mem);
+    if (retval != 0) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAInitialSetup", MSG_LINIT_FAIL);
+      return(IDA_LINIT_FAIL);
+    }
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/*  
+ * IDAEwtSet
+ *
+ * This routine is responsible for loading the error weight vector
+ * ewt, according to itol, as follows:
+ * (1) ewt[i] = 1 / (rtol * SUNRabs(ycur[i]) + atol), i=0,...,Neq-1
+ *     if itol = IDA_SS
+ * (2) ewt[i] = 1 / (rtol * SUNRabs(ycur[i]) + atol[i]), i=0,...,Neq-1
+ *     if itol = IDA_SV
+ *
+ *  IDAEwtSet returns 0 if ewt is successfully set as above to a
+ *  positive vector and -1 otherwise. In the latter case, ewt is
+ *  considered undefined.
+ *
+ * All the real work is done in the routines IDAEwtSetSS, IDAEwtSetSV.
+ */
+
+int IDAEwtSet(N_Vector ycur, N_Vector weight, void *data)
+{
+  IDAMem IDA_mem;
+  int flag = 0;
+
+  /* data points to IDA_mem here */
+
+  IDA_mem = (IDAMem) data;
+
+  switch(itol) {
+  case IDA_SS: 
+    flag = IDAEwtSetSS(IDA_mem, ycur, weight); 
+    break;
+  case IDA_SV: 
+    flag = IDAEwtSetSV(IDA_mem, ycur, weight); 
+    break;
+  }
+  return(flag);
+}
+
+/*
+ * IDAEwtSetSS
+ *
+ * This routine sets ewt as decribed above in the case itol=IDA_SS.
+ * It tests for non-positive components before inverting. IDAEwtSetSS
+ * returns 0 if ewt is successfully set to a positive vector
+ * and -1 otherwise. In the latter case, ewt is considered
+ * undefined.
+ */
+
+static int IDAEwtSetSS(IDAMem IDA_mem, N_Vector ycur, N_Vector weight)
+{
+  N_VAbs(ycur, tempv1);
+  N_VScale(rtol, tempv1, tempv1);
+  N_VAddConst(tempv1, Satol, tempv1);
+  if (N_VMin(tempv1) <= ZERO) return(-1);
+  N_VInv(tempv1, weight);
+  return(0);
+}
+
+/*
+ * IDAEwtSetSV
+ *
+ * This routine sets ewt as decribed above in the case itol=IDA_SV.
+ * It tests for non-positive components before inverting. IDAEwtSetSV
+ * returns 0 if ewt is successfully set to a positive vector
+ * and -1 otherwise. In the latter case, ewt is considered
+ * undefined.
+ */
+
+static int IDAEwtSetSV(IDAMem IDA_mem, N_Vector ycur, N_Vector weight)
+{
+  N_VAbs(ycur, tempv1);
+  N_VLinearSum(rtol, tempv1, ONE, Vatol, tempv1);
+  if (N_VMin(tempv1) <= ZERO) return(-1);
+  N_VInv(tempv1, weight);
+  return(0);
+}
+
+/*
+ * IDAQuadEwtSet
+ *
+ */
+
+static int IDAQuadEwtSet(IDAMem IDA_mem, N_Vector qcur, N_Vector weightQ)
+{
+  int flag=0;
+
+  switch (itolQ) {
+  case IDA_SS: 
+    flag = IDAQuadEwtSetSS(IDA_mem, qcur, weightQ);
+    break;
+  case IDA_SV: 
+    flag = IDAQuadEwtSetSV(IDA_mem, qcur, weightQ);
+    break;
+  }
+
+  return(flag);
+
+}
+
+/*
+ * IDAQuadEwtSetSS
+ *
+ */
+
+static int IDAQuadEwtSetSS(IDAMem IDA_mem, N_Vector qcur, N_Vector weightQ)
+{
+  N_Vector tempvQ;
+
+  /* Use ypQ as temporary storage */
+  tempvQ = ypQ;
+
+  N_VAbs(qcur, tempvQ);
+  N_VScale(rtolQ, tempvQ, tempvQ);
+  N_VAddConst(tempvQ, SatolQ, tempvQ);
+  if (N_VMin(tempvQ) <= ZERO) return(-1);
+  N_VInv(tempvQ, weightQ);
+
+  return(0);
+}
+
+/*
+ * IDAQuadEwtSetSV
+ *
+ */
+
+static int IDAQuadEwtSetSV(IDAMem IDA_mem, N_Vector qcur, N_Vector weightQ)
+{
+  N_Vector tempvQ;
+
+  /* Use ypQ as temporary storage */
+  tempvQ = ypQ;
+
+  N_VAbs(qcur, tempvQ);
+  N_VLinearSum(rtolQ, tempvQ, ONE, VatolQ, tempvQ);
+  if (N_VMin(tempvQ) <= ZERO) return(-1);
+  N_VInv(tempvQ, weightQ);
+
+  return(0);
+}
+
+/*
+ * IDASensEwtSet
+ *
+ */
+
+int IDASensEwtSet(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS)
+{
+  int flag=0;
+
+  switch (itolS) {
+  case IDA_EE:
+    flag = IDASensEwtSetEE(IDA_mem, yScur, weightS);
+    break;
+  case IDA_SS: 
+    flag = IDASensEwtSetSS(IDA_mem, yScur, weightS);
+    break;
+  case IDA_SV: 
+    flag = IDASensEwtSetSV(IDA_mem, yScur, weightS);
+    break;
+  }
+
+  return(flag);
+
+}
+
+/*
+ * IDASensEwtSetEE
+ *
+ * In this case, the error weight vector for the i-th sensitivity is set to
+ *
+ * ewtS_i = pbar_i * efun(pbar_i*yS_i)
+ *
+ * In other words, the scaled sensitivity pbar_i * yS_i has the same error
+ * weight vector calculation as the solution vector.
+ *
+ */
+
+static int IDASensEwtSetEE(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS)
+{
+  int is;
+  N_Vector pyS;
+  int flag;
+
+  /* Use tempv1 as temporary storage for the scaled sensitivity */
+  pyS = tempv1;
+
+  for (is=0; is<Ns; is++) {
+    N_VScale(pbar[is], yScur[is], pyS);
+    flag = efun(pyS, weightS[is], edata);
+    if (flag != 0) return(-1);
+    N_VScale(pbar[is], weightS[is], weightS[is]);
+  }
+
+  return(0);
+}
+
+/*
+ * IDASensEwtSetSS
+ *
+ */
+
+static int IDASensEwtSetSS(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS)
+{
+  int is;
+  
+  for (is=0; is<Ns; is++) {
+    N_VAbs(yScur[is], tempv1);
+    N_VScale(rtolS, tempv1, tempv1);
+    N_VAddConst(tempv1, SatolS[is], tempv1);
+    if (N_VMin(tempv1) <= ZERO) return(-1);
+    N_VInv(tempv1, weightS[is]);
+  }
+  return(0);
+}
+
+/*
+ * IDASensEwtSetSV
+ *
+ */
+
+static int IDASensEwtSetSV(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS)
+{
+  int is;
+  
+  for (is=0; is<Ns; is++) {
+    N_VAbs(yScur[is], tempv1);
+    N_VLinearSum(rtolS, tempv1, ONE, VatolS[is], tempv1);
+    if (N_VMin(tempv1) <= ZERO) return(-1);
+    N_VInv(tempv1, weightS[is]);
+  }
+
+  return(0);
+}
+
+/*
+ * IDAQuadSensEwtSet
+ *
+ */
+
+int IDAQuadSensEwtSet(IDAMem IDA_mem, N_Vector *yQScur, N_Vector *weightQS)
+{
+  int flag=0;
+
+  switch (itolQS) {
+  case IDA_EE:
+    flag = IDAQuadSensEwtSetEE(IDA_mem, yQScur, weightQS);
+    break;
+  case IDA_SS: 
+    flag = IDAQuadSensEwtSetSS(IDA_mem, yQScur, weightQS);
+    break;
+  case IDA_SV: 
+    flag = IDAQuadSensEwtSetSV(IDA_mem, yQScur, weightQS);
+    break;
+  }
+
+  return(flag);
+}
+
+/*
+ * IDAQuadSensEwtSetEE
+ *
+ * In this case, the error weight vector for the i-th quadrature sensitivity
+ * is set to
+ *
+ * ewtQS_i = pbar_i * IDAQuadEwtSet(pbar_i*yQS_i)
+ *
+ * In other words, the scaled sensitivity pbar_i * yQS_i has the same error
+ * weight vector calculation as the quadrature vector.
+ *
+ */
+static int IDAQuadSensEwtSetEE(IDAMem IDA_mem, N_Vector *yQScur, N_Vector *weightQS)
+{
+  int is;
+  N_Vector pyS;
+  int flag;
+
+  /* Use tempvQS[0] as temporary storage for the scaled sensitivity */
+  pyS = tempvQS[0];
+
+  for (is=0; is<Ns; is++) {
+    N_VScale(pbar[is], yQScur[is], pyS);
+    flag = IDAQuadEwtSet(IDA_mem, pyS, weightQS[is]);
+    if (flag != 0) return(-1);
+    N_VScale(pbar[is], weightQS[is], weightQS[is]);
+  }
+
+  return(0);
+}
+
+static int IDAQuadSensEwtSetSS(IDAMem IDA_mem, N_Vector *yQScur, N_Vector *weightQS)
+{
+  int is;
+  N_Vector tempvQ;
+
+  /* Use ypQ as temporary storage */
+  tempvQ = ypQ;
+
+  for (is=0; is<Ns; is++) {
+    N_VAbs(yQScur[is], tempvQ);
+    N_VScale(rtolQS, tempvQ, tempvQ);
+    N_VAddConst(tempvQ, SatolQS[is], tempvQ);
+    if (N_VMin(tempvQ) <= ZERO) return(-1);
+    N_VInv(tempvQ, weightQS[is]);
+  }
+
+  return(0);
+}
+
+static int IDAQuadSensEwtSetSV(IDAMem IDA_mem, N_Vector *yQScur, N_Vector *weightQS)
+{
+  int is;
+  N_Vector tempvQ;
+
+  /* Use ypQ as temporary storage */
+  tempvQ = ypQ;
+  
+  for (is=0; is<Ns; is++) {
+    N_VAbs(yQScur[is], tempvQ);
+    N_VLinearSum(rtolQS, tempvQ, ONE, VatolQS[is], tempvQ);
+    if (N_VMin(tempvQ) <= ZERO) return(-1);
+    N_VInv(tempvQ, weightQS[is]);
+  }
+
+  return(0);
+}
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Stopping tests
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAStopTest1
+ *
+ * This routine tests for stop conditions before taking a step.
+ * The tests depend on the value of itask.
+ * The variable tretlast is the previously returned value of tret.
+ *
+ * The return values are:
+ * CONTINUE_STEPS       if no stop conditions were found
+ * IDA_SUCCESS          for a normal return to the user
+ * IDA_TSTOP_RETURN     for a tstop-reached return to the user
+ * IDA_ILL_INPUT        for an illegal-input return to the user 
+ *
+ * In the tstop cases, this routine may adjust the stepsize hh to cause
+ * the next step to reach tstop exactly.
+ */
+
+static int IDAStopTest1(IDAMem IDA_mem, realtype tout, realtype *tret, 
+                        N_Vector yret, N_Vector ypret, int itask)
+{
+  int ier;
+  realtype troundoff;
+
+  switch (itask) {
+    
+  case IDA_NORMAL:
+
+    if (tstopset) {
+      /* Test for tn past tstop, tn = tretlast, tn past tout, tn near tstop. */
+      if ( (tn - tstop)*hh > ZERO) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TSTOP, tstop, tn);
+        return(IDA_ILL_INPUT);
+      }
+    }
+
+    /* Test for tout = tretlast, and for tn past tout. */
+    if (tout == tretlast) {
+      *tret = tretlast = tout;
+      return(IDA_SUCCESS);
+    }
+    if ((tn - tout)*hh >= ZERO) {
+      ier = IDAGetSolution(IDA_mem, tout, yret, ypret);
+      if (ier != IDA_SUCCESS) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TOUT, tout);
+        return(IDA_ILL_INPUT);
+      }
+      *tret = tretlast = tout;
+      return(IDA_SUCCESS);
+    }
+
+    if (tstopset) {
+      troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+      if (SUNRabs(tn - tstop) <= troundoff) {
+        ier = IDAGetSolution(IDA_mem, tstop, yret, ypret);
+        if (ier != IDA_SUCCESS) {
+          IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TSTOP, tstop, tn);
+          return(IDA_ILL_INPUT);
+        }
+        *tret = tretlast = tstop;
+        tstopset = FALSE;
+        return(IDA_TSTOP_RETURN);
+      }
+      if ((tn + hh - tstop)*hh > ZERO) 
+        hh = (tstop - tn)*(ONE-FOUR*uround);
+    }
+
+    return(CONTINUE_STEPS);
+    
+  case IDA_ONE_STEP:
+
+    if (tstopset) {
+      /* Test for tn past tstop, tn past tretlast, and tn near tstop. */
+      if ((tn - tstop)*hh > ZERO) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TSTOP, tstop, tn);
+        return(IDA_ILL_INPUT);
+      }
+    }
+
+    /* Test for tn past tretlast. */
+    if ((tn - tretlast)*hh > ZERO) {
+      ier = IDAGetSolution(IDA_mem, tn, yret, ypret);
+      *tret = tretlast = tn;
+      return(IDA_SUCCESS);
+    }
+
+    if (tstopset) {
+      troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+      if (SUNRabs(tn - tstop) <= troundoff) {
+        ier = IDAGetSolution(IDA_mem, tstop, yret, ypret);
+        if (ier != IDA_SUCCESS) {
+          IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASolve", MSG_BAD_TSTOP, tstop, tn);
+          return(IDA_ILL_INPUT);
+        }
+        *tret = tretlast = tstop;
+        tstopset = FALSE;
+        return(IDA_TSTOP_RETURN);
+      }
+      if ((tn + hh - tstop)*hh > ZERO) 
+        hh = (tstop - tn)*(ONE-FOUR*uround);
+    }
+
+    return(CONTINUE_STEPS);
+        
+  }
+  return(IDA_ILL_INPUT);
+}
+
+/*
+ * IDAStopTest2
+ *
+ * This routine tests for stop conditions after taking a step.
+ * The tests depend on the value of itask.
+ *
+ * The return values are:
+ *  CONTINUE_STEPS     if no stop conditions were found
+ *  IDA_SUCCESS        for a normal return to the user
+ *  IDA_TSTOP_RETURN   for a tstop-reached return to the user
+ *
+ * In the two cases with tstop, this routine may reset the stepsize hh
+ * to cause the next step to reach tstop exactly.
+ *
+ * In the two cases with ONE_STEP mode, no interpolation to tn is needed
+ * because yret and ypret already contain the current y and y' values.
+ *
+ * Note: No test is made for an error return from IDAGetSolution here,
+ * because the same test was made prior to the step.
+ */
+
+static int IDAStopTest2(IDAMem IDA_mem, realtype tout, realtype *tret, 
+                        N_Vector yret, N_Vector ypret, int itask)
+{
+  /* int ier; */
+  realtype troundoff;
+
+  switch (itask) {
+
+    case IDA_NORMAL:  
+
+      /* Test for tn past tout. */
+      if ((tn - tout)*hh >= ZERO) {
+        /* ier = */ IDAGetSolution(IDA_mem, tout, yret, ypret);
+        *tret = tretlast = tout;
+        return(IDA_SUCCESS);
+      }
+
+      if (tstopset) {
+        /* Test for tn at tstop and for tn near tstop */
+        troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+        if (SUNRabs(tn - tstop) <= troundoff) {
+          /* ier = */ IDAGetSolution(IDA_mem, tstop, yret, ypret);
+          *tret = tretlast = tstop;
+          tstopset = FALSE;
+          return(IDA_TSTOP_RETURN);
+        }
+        if ((tn + hh - tstop)*hh > ZERO) 
+          hh = (tstop - tn)*(ONE-FOUR*uround);
+      }
+
+      return(CONTINUE_STEPS);
+
+    case IDA_ONE_STEP:
+
+      if (tstopset) {
+        /* Test for tn at tstop and for tn near tstop */
+        troundoff = HUNDRED*uround*(SUNRabs(tn) + SUNRabs(hh));
+        if (SUNRabs(tn - tstop) <= troundoff) {
+          /* ier = */ IDAGetSolution(IDA_mem, tstop, yret, ypret);
+          *tret = tretlast = tstop;
+          tstopset = FALSE;
+          return(IDA_TSTOP_RETURN);
+        }
+        if ((tn + hh - tstop)*hh > ZERO) 
+          hh = (tstop - tn)*(ONE-FOUR*uround);
+      }
+
+      *tret = tretlast = tn;
+      return(IDA_SUCCESS);
+
+  }
+  return IDA_ILL_INPUT;
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Error handler
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAHandleFailure
+ *
+ * This routine prints error messages for all cases of failure by
+ * IDAStep.  It returns to IDASolve the value that it is to return to
+ * the user.
+ */
+
+static int IDAHandleFailure(IDAMem IDA_mem, int sflag)
+{
+  /* Depending on sflag, print error message and return error flag */
+  switch (sflag) {
+
+    case IDA_ERR_FAIL:
+      IDAProcessError(IDA_mem, IDA_ERR_FAIL, "IDAS", "IDASolve", MSG_ERR_FAILS, tn, hh);
+      return(IDA_ERR_FAIL);
+
+    case IDA_CONV_FAIL:
+      IDAProcessError(IDA_mem, IDA_CONV_FAIL, "IDAS", "IDASolve", MSG_CONV_FAILS, tn, hh);
+      return(IDA_CONV_FAIL);
+
+    case IDA_LSETUP_FAIL:  
+      IDAProcessError(IDA_mem, IDA_LSETUP_FAIL, "IDAS", "IDASolve", MSG_SETUP_FAILED, tn);
+      return(IDA_LSETUP_FAIL);
+
+    case IDA_LSOLVE_FAIL: 
+      IDAProcessError(IDA_mem, IDA_LSOLVE_FAIL, "IDAS", "IDASolve", MSG_SOLVE_FAILED, tn);
+      return(IDA_LSOLVE_FAIL);
+
+    case IDA_REP_RES_ERR:
+      IDAProcessError(IDA_mem, IDA_REP_RES_ERR, "IDAS", "IDASolve", MSG_REP_RES_ERR, tn);
+      return(IDA_REP_RES_ERR);
+
+    case IDA_RES_FAIL: 
+      IDAProcessError(IDA_mem, IDA_RES_FAIL, "IDAS", "IDASolve", MSG_RES_NONRECOV, tn);
+      return(IDA_RES_FAIL);
+
+    case IDA_CONSTR_FAIL: 
+      IDAProcessError(IDA_mem, IDA_CONSTR_FAIL, "IDAS", "IDASolve", MSG_FAILED_CONSTR, tn);
+      return(IDA_CONSTR_FAIL);
+
+  }
+
+  return (IDA_UNRECONGISED_ERROR);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Main IDAStep function
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAStep
+ *
+ * This routine performs one internal IDA step, from tn to tn + hh.
+ * It calls other routines to do all the work.
+ *
+ * It solves a system of differential/algebraic equations of the form
+ *       F(t,y,y') = 0, for one step. In IDA, tt is used for t,
+ * yy is used for y, and yp is used for y'. The function F is supplied as 'res'
+ * by the user.
+ *
+ * The methods used are modified divided difference, fixed leading 
+ * coefficient forms of backward differentiation formulas.
+ * The code adjusts the stepsize and order to control the local error per step.
+ *
+ * The main operations done here are as follows:
+ *  * initialize various quantities;
+ *  * setting of multistep method coefficients;
+ *  * solution of the nonlinear system for yy at t = tn + hh;
+ *  * deciding on order reduction and testing the local error;
+ *  * attempting to recover from failure in nonlinear solver or error test;
+ *  * resetting stepsize and order for the next step.
+ *  * updating phi and other state data if successful;
+ *
+ * On a failure in the nonlinear system solution or error test, the
+ * step may be reattempted, depending on the nature of the failure.
+ *
+ * Variables or arrays (all in the IDAMem structure) used in IDAStep are:
+ *
+ * tt -- Independent variable.
+ * yy -- Solution vector at tt.
+ * yp -- Derivative of solution vector after successful stelp.
+ * res -- User-supplied function to evaluate the residual. See the 
+ *        description given in file ida.h .
+ * lsetup -- Routine to prepare for the linear solver call. It may either
+ *        save or recalculate quantities used by lsolve. (Optional)
+ * lsolve -- Routine to solve a linear system. A prior call to lsetup
+ *        may be required. 
+ * hh  -- Appropriate step size for next step.
+ * ewt -- Vector of weights used in all convergence tests.
+ * phi -- Array of divided differences used by IDAStep. This array is composed 
+ *       of  (maxord+1) nvectors (each of size Neq). (maxord+1) is the maximum 
+ *       order for the problem, maxord, plus 1.
+ *
+ *       Return values are:
+ *       IDA_SUCCESS   IDA_RES_FAIL        LSETUP_ERROR_NONRECVR       
+ *                     IDA_LSOLVE_FAIL   IDA_ERR_FAIL            
+ *                     IDA_CONSTR_FAIL               IDA_CONV_FAIL          
+ *                     IDA_REP_RES_ERR            
+ */
+
+static int IDAStep(IDAMem IDA_mem)
+{
+  realtype saved_t, ck;
+  realtype err_k, err_km1, err_km2;
+  int ncf, nef;
+  int nflag, kflag;
+  int retval;
+  booleantype sensi_stg;
+
+  /* Are we computing sensitivities with the staggered approach? */
+  sensi_stg  = (sensi && (ism==IDA_STAGGERED));
+
+  saved_t = tn;
+  ncf = nef = 0;
+
+  if (nst == ZERO){
+    kk = 1;
+    kused = 0;
+    hused = ZERO;
+    psi[0] = hh;
+    cj = ONE/hh;
+    phase = 0;
+    ns = 0;
+  }
+
+  /* To prevent 'unintialized variable' warnings */
+  err_k = ZERO;
+  err_km1 = ZERO;
+  err_km2 = ZERO;
+
+  /* Looping point for attempts to take a step */
+
+  loop {  
+
+    /*-----------------------
+      Set method coefficients
+      -----------------------*/
+
+    IDASetCoeffs(IDA_mem, &ck);
+
+    kflag = IDA_SUCCESS;
+
+    /*----------------------------------------------------
+      If tn is past tstop (by roundoff), reset it to tstop.
+      -----------------------------------------------------*/
+
+    tn = tn + hh;
+    if (tstopset) {
+      if ((tn - tstop)*hh > ZERO) tn = tstop;
+    }
+
+    /*-----------------------
+      Advance state variables
+      -----------------------*/
+
+    /* Nonlinear system solution */
+    nflag = IDANls(IDA_mem);
+
+    /* If NLS was successful, perform error test */
+    if (nflag == IDA_SUCCESS)
+      nflag = IDATestError(IDA_mem, ck, &err_k, &err_km1, &err_km2);
+
+    /* Test for convergence or error test failures */
+    if (nflag != IDA_SUCCESS) {
+
+      /* restore and decide what to do */
+      IDARestore(IDA_mem, saved_t);
+      kflag = IDAHandleNFlag(IDA_mem, nflag, err_k, err_km1, 
+                             &ncfn, &ncf, &netf, &nef);
+
+      /* exit on nonrecoverable failure */ 
+      if (kflag != PREDICT_AGAIN) return(kflag);
+
+      /* recoverable error; predict again */
+      if(nst==0) IDAReset(IDA_mem);
+      continue;
+
+    }
+
+    /*----------------------------
+      Advance quadrature variables 
+      ----------------------------*/
+    if (quadr) {
+
+      nflag = IDAQuadNls(IDA_mem);
+
+      /* If NLS was successful, perform error test */
+      if (errconQ && (nflag == IDA_SUCCESS))
+        nflag = IDAQuadTestError(IDA_mem, ck, &err_k, &err_km1, &err_km2);
+
+      /* Test for convergence or error test failures */
+      if (nflag != IDA_SUCCESS) {
+
+        /* restore and decide what to do */
+        IDARestore(IDA_mem, saved_t);
+        kflag = IDAHandleNFlag(IDA_mem, nflag, err_k, err_km1, 
+                               &ncfnQ, &ncf, &netfQ, &nef);
+
+        /* exit on nonrecoverable failure */ 
+        if (kflag != PREDICT_AGAIN) return(kflag);
+        
+        /* recoverable error; predict again */
+        if(nst==0) IDAReset(IDA_mem);
+        continue;
+      }
+    }
+
+    /*--------------------------------------------------
+      Advance sensitivity variables (Staggered approach)
+      --------------------------------------------------*/
+    if (sensi_stg) {
+
+      /* Evaluate res at converged y, needed for future evaluations of sens. RHS 
+         If res() fails recoverably, treat it as a convergence failure and 
+         attempt the step again */
+
+      retval = res(tn, yy, yp, delta, user_data);
+
+      if (retval < 0)      return(IDA_RES_FAIL);
+      else if (retval > 0) continue;
+        
+      nflag = IDASensNls(IDA_mem);
+      
+      /* If NLS was successful, perform error test */
+      if (errconS && (nflag == IDA_SUCCESS))
+        nflag = IDASensTestError(IDA_mem, ck, &err_k, &err_km1, &err_km2);
+
+      /* Test for convergence or error test failures */
+      if (nflag != IDA_SUCCESS) {
+
+        /* restore and decide what to do */
+        IDARestore(IDA_mem, saved_t);
+        kflag = IDAHandleNFlag(IDA_mem, nflag, err_k, err_km1, 
+                               &ncfnQ, &ncf, &netfQ, &nef);
+        
+        /* exit on nonrecoverable failure */ 
+        if (kflag != PREDICT_AGAIN) return(kflag);
+        
+        /* recoverable error; predict again */
+        if(nst==0) IDAReset(IDA_mem);
+        continue;
+      }
+    }
+
+    /*-------------------------------------------
+      Advance quadrature sensitivity variables
+      -------------------------------------------*/
+    if (quadr_sensi) {
+
+      nflag = IDAQuadSensNls(IDA_mem);
+
+      /* If NLS was successful, perform error test */
+      if (errconQS && (nflag == IDA_SUCCESS))
+        nflag = IDAQuadSensTestError(IDA_mem, ck, &err_k, &err_km1, &err_km2);
+
+      /* Test for convergence or error test failures */
+      if (nflag != IDA_SUCCESS) {
+
+        /* restore and decide what to do */
+        IDARestore(IDA_mem, saved_t);
+        kflag = IDAHandleNFlag(IDA_mem, nflag, err_k, err_km1, 
+                               &ncfnQ, &ncf, &netfQ, &nef);
+
+        /* exit on nonrecoverable failure */ 
+        if (kflag != PREDICT_AGAIN) return(kflag);
+        
+        /* recoverable error; predict again */
+        if(nst==0) IDAReset(IDA_mem);
+        continue;
+      }
+    }
+
+    /* kflag == IDA_SUCCESS */
+    break;
+
+  } /* end loop */
+
+  /* Nonlinear system solve and error test were both successful;
+     update data, and consider change of step and/or order */
+
+  IDACompleteStep(IDA_mem, err_k, err_km1);
+
+  /* 
+     Rescale ee vector to be the estimated local error
+     Notes:
+       (1) altering the value of ee is permissible since
+           it will be re-initialized to the zero vector by
+           IDASolve()->IDAStep()->IDANls()->IDANewtonIter()
+           before it is needed again
+       (2) the value of ee is only valid if IDAHandleNFlag()
+           returns either PREDICT_AGAIN or IDA_SUCCESS
+  */
+
+  N_VScale(ck, ee, ee);
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDAGetSolution
+ *
+ * This routine evaluates y(t) and y'(t) as the value and derivative of 
+ * the interpolating polynomial at the independent variable t, and stores
+ * the results in the vectors yret and ypret.  It uses the current
+ * independent variable value, tn, and the method order last used, kused.
+ * This function is called by IDASolve with t = tout, t = tn, or t = tstop.
+ * 
+ * If kused = 0 (no step has been taken), or if t = tn, then the order used
+ * here is taken to be 1, giving yret = phi[0], ypret = phi[1]/psi[0].
+ * 
+ * The return values are:
+ *   IDA_SUCCESS  if t is legal, or
+ *   IDA_BAD_T    if t is not within the interval of the last step taken.
+ */
+
+int IDAGetSolution(void *ida_mem, realtype t, N_Vector yret, N_Vector ypret)
+{
+  IDAMem IDA_mem;
+  realtype tfuzz, tp, delt, c, d, gam;
+  int j, kord;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSolution", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem; 
+
+  /* Check t for legality.  Here tn - hused is t_{n-1}. */
+ 
+  tfuzz = HUNDRED * uround * (SUNRabs(tn) + SUNRabs(hh));
+  if (hh < ZERO) tfuzz = - tfuzz;
+  tp = tn - hused - tfuzz;
+  if ((t - tp)*hh < ZERO) {
+    IDAProcessError(IDA_mem, IDA_BAD_T, "IDAS", "IDAGetSolution", MSG_BAD_T, t, tn-hused, tn);
+    return(IDA_BAD_T);
+  }
+
+  /* Initialize yret = phi[0], ypret = 0, and kord = (kused or 1). */
+
+  N_VScale (ONE, phi[0], yret);
+  N_VConst (ZERO, ypret);
+  kord = kused; 
+  if (kused == 0) kord = 1;
+
+  /* Accumulate multiples of columns phi[j] into yret and ypret. */
+
+  delt = t - tn;
+  c = ONE; d = ZERO;
+  gam = delt/psi[0];
+  for (j=1; j <= kord; j++) {
+    d = d*gam + c/psi[j-1];
+    c = c*gam;
+    gam = (delt + psi[j-1])/psi[j];
+    N_VLinearSum(ONE,  yret, c, phi[j],  yret);
+    N_VLinearSum(ONE, ypret, d, phi[j], ypret);
+  }
+  return(IDA_SUCCESS);
+}
+
+
+/*
+ * IDASetCoeffs
+ *
+ *  This routine computes the coefficients relevant to the current step.
+ *  The counter ns counts the number of consecutive steps taken at
+ *  constant stepsize h and order k, up to a maximum of k + 2.
+ *  Then the first ns components of beta will be one, and on a step  
+ *  with ns = k + 2, the coefficients alpha, etc. need not be reset here.
+ *  Also, IDACompleteStep prohibits an order increase until ns = k + 2.
+ */
+
+static void IDASetCoeffs(IDAMem IDA_mem, realtype *ck)
+{
+  int i, is;
+  realtype temp1, temp2, alpha0, alphas;
+
+  /* Set coefficients for the current stepsize h */
+
+  if (hh != hused || kk != kused) ns = 0;
+  ns = SUNMIN(ns+1,kused+2);
+  if (kk+1 >= ns) {
+    beta[0] = ONE;
+    alpha[0] = ONE;
+    temp1 = hh;
+    gamma[0] = ZERO;
+    sigma[0] = ONE;
+    for(i=1;i<=kk;i++){
+      temp2 = psi[i-1];
+      psi[i-1] = temp1;
+      beta[i] = beta[i-1] * psi[i-1] / temp2;
+      temp1 = temp2 + hh;
+      alpha[i] = hh / temp1;
+      sigma[i] = i * sigma[i-1] * alpha[i]; 
+      gamma[i] = gamma[i-1] + alpha[i-1] / hh;
+   }
+    psi[kk] = temp1;
+  }
+  /* compute alphas, alpha0 */
+  alphas = ZERO;
+  alpha0 = ZERO;
+  for(i=0;i<kk;i++){
+    alphas = alphas - ONE/(i+1);
+    alpha0 = alpha0 - alpha[i];
+  }
+
+  /* compute leading coefficient cj  */
+  cjlast = cj;
+  cj = -alphas/hh;
+  
+  /* compute variable stepsize error coefficient ck */
+
+  *ck = SUNRabs(alpha[kk] + alphas - alpha0);
+  *ck = SUNMAX(*ck, alpha[kk]);
+
+ /* change phi to phi-star  */
+
+  for(i=ns;i<=kk;i++) N_VScale(beta[i], phi[i], phi[i]);
+
+  if (quadr)
+    for(i=ns;i<=kk;i++)
+      N_VScale(beta[i], phiQ[i], phiQ[i]);
+
+  if (sensi)
+    for(is=0;is<Ns;is++)
+      for(i=ns;i<=kk;i++)
+        N_VScale(beta[i], phiS[i][is], phiS[i][is]);
+
+  if (quadr_sensi)
+    for(is=0;is<Ns;is++)
+      for(i=ns;i<=kk;i++)
+        N_VScale(beta[i], phiQS[i][is], phiQS[i][is]);
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Nonlinear solver functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDANls
+ *
+ * This routine attempts to solve the nonlinear system using the linear
+ * solver specified. NOTE: this routine uses N_Vector ee as the scratch
+ * vector tempv3 passed to lsetup.
+ *
+ *  Possible return values:
+ *
+ *  IDA_SUCCESS
+ *
+ *  IDA_RES_RECVR       IDA_RES_FAIL
+ *  IDA_SRES_RECVR      IDA_SRES_FAIL
+ *  IDA_LSETUP_RECVR    IDA_LSETUP_FAIL
+ *  IDA_LSOLVE_RECVR    IDA_LSOLVE_FAIL
+ *
+ *  IDA_CONSTR_RECVR
+ *  IDA_NCONV_RECVR
+ */
+
+static int IDANls(IDAMem IDA_mem)
+{
+  int retval, is;
+  booleantype constraintsPassed, callSetup, tryAgain;
+  realtype temp1, temp2, vnorm;
+  N_Vector tempv3;
+  booleantype sensi_sim;
+
+  /* Are we computing sensitivities with the IDA_SIMULTANEOUS approach? */
+  sensi_sim = (sensi && (ism==IDA_SIMULTANEOUS));
+
+  callSetup = FALSE;
+
+  /* Initialize if the first time called */
+  if (nst == 0){
+    cjold = cj;
+    ss = TWENTY;
+    ssS = TWENTY;
+    if (setupNonNull) callSetup = TRUE;
+  }
+
+  mm = tempv2;
+  tempv3 = ee;
+
+  /* Decide if lsetup is to be called */
+  if (setupNonNull){
+    cjratio = cj / cjold;
+    temp1 = (ONE - XRATE) / (ONE + XRATE);
+    temp2 = ONE/temp1;
+    if (cjratio < temp1 || cjratio > temp2) callSetup = TRUE;
+    if (forceSetup) callSetup = TRUE;
+    if (cj != cjlast) {ss = HUNDRED; ssS = HUNDRED;}
+  }
+
+  /* Begin the main loop. This loop is traversed at most twice. 
+     The second pass only occurs when the first pass had a recoverable
+     failure with old Jacobian data */
+  loop{
+
+    /* Compute predicted values for yy and yp, and compute residual there. */
+    IDAPredict(IDA_mem);
+    retval = res(tn, yy, yp, delta, user_data);
+    nre++;
+    if (retval < 0) return(IDA_RES_FAIL);
+    if (retval > 0) return(IDA_RES_RECVR);
+
+    if (sensi_sim) {
+      for(is=0;is<Ns;is++) IDASensPredict(IDA_mem, is, yyS[is], ypS[is]);
+      retval = resS(Ns, tn, yy, yp, delta, yyS, ypS, deltaS,
+                    user_dataS, tmpS1, tmpS2, tmpS3);
+      nrSe++;
+      if (retval < 0) return(IDA_SRES_FAIL);
+      if (retval > 0) return(IDA_SRES_RECVR);
+    }
+
+    /* If indicated, call linear solver setup function and reset parameters. */
+    if (callSetup){
+      nsetups++;
+      forceSetup = FALSE;
+      
+      retval = lsetup(IDA_mem, yy, yp, delta, tempv1, tempv2, tempv3);
+
+      cjold = cj;
+      cjratio = ONE;
+      ss = TWENTY;
+      ssS = TWENTY;
+      if (retval < 0) return(IDA_LSETUP_FAIL);
+      if (retval > 0) return(IDA_LSETUP_RECVR);
+    }
+
+    /* Call the Newton iteration routine.  */
+    retval = IDANewtonIter(IDA_mem);
+
+    /* Retry the current step on recoverable failure with old Jacobian data. */
+    tryAgain = (retval>0)&&(setupNonNull) &&(!callSetup);
+
+    if (tryAgain){
+      callSetup = TRUE;
+      continue;
+    }
+    else break;
+
+  }  /* end of loop */
+
+  if (retval != IDA_SUCCESS) return(retval);
+
+  /* If otherwise successful, check and enforce inequality constraints. */
+
+  if (constraintsSet){  /* Check constraints and get mask vector mm, 
+                          set where constraints failed */
+    constraintsPassed = N_VConstrMask(constraints,yy,mm);
+    if (constraintsPassed) return(IDA_SUCCESS);
+    else {
+      N_VCompare(ONEPT5, constraints, tempv1);  
+      /* a , where a[i] =1. when |c[i]| = 2 ,  c the vector of constraints */
+      N_VProd(tempv1, constraints, tempv1);       /* a * c */
+      N_VDiv(tempv1, ewt, tempv1);                /* a * c * wt */
+      N_VLinearSum(ONE, yy, -PT1, tempv1, tempv1);/* y - 0.1 * a * c * wt */
+      N_VProd(tempv1, mm, tempv1);               /*  v = mm*(y-.1*a*c*wt) */
+      vnorm = IDAWrmsNorm(IDA_mem, tempv1, ewt, FALSE); /*  ||v|| */
+      
+      /* If vector v of constraint corrections is small
+         in norm, correct and accept this step */      
+      if (vnorm <= epsNewt){  
+        N_VLinearSum(ONE, ee, -ONE, tempv1, ee);  /* ee <- ee - v */
+        return(IDA_SUCCESS);
+      }
+      else {
+        /* Constraints not met -- reduce h by computing rr = h'/h */
+        N_VLinearSum(ONE, phi[0], -ONE, yy, tempv1);
+        N_VProd(mm, tempv1, tempv1);
+        rr = PT9*N_VMinQuotient(phi[0], tempv1);
+        rr = SUNMAX(rr,PT1);
+        return(IDA_CONSTR_RECVR);
+      }
+    }
+  }
+
+  return(IDA_SUCCESS);
+}
+
+
+/*
+ * IDAPredict
+ *
+ * This routine predicts the new values for vectors yy and yp.
+ */
+
+static void IDAPredict(IDAMem IDA_mem)
+{
+  int j;
+
+  N_VScale(ONE, phi[0], yy);
+  N_VConst(ZERO, yp);
+  
+  for(j=1; j<=kk; j++) {
+    N_VLinearSum(ONE,      phi[j], ONE, yy, yy);
+    N_VLinearSum(gamma[j], phi[j], ONE, yp, yp);
+  }
+}
+
+/*
+ * IDANewtonIter
+ *
+ * This routine performs the Newton iteration.  
+ * It assumes that delta contains the initial residual vector on entry.
+ * If the iteration succeeds, it returns the value IDA_SUCCESS = 0.
+ * If not, it returns either:
+ *   a positive value (for a recoverable failure), namely one of:
+ *     IDA_RES_RECVR
+ *     IDA_SRES_RECVR
+ *     IDA_LSOLVE_RECVR
+ *     IDA_NCONV_RECVR
+ * or
+ *   a negative value (for a nonrecoverable failure), namely one of:
+ *     IDA_RES_FAIL
+ *     IDA_SRES_FAIL
+ *     IDA_LSOLVE_FAIL
+ *
+ * NOTE: This routine uses N_Vector savres, which is preset to tempv1.
+ */
+
+static int IDANewtonIter(IDAMem IDA_mem)
+{
+  int mnewt, retval, is;
+  realtype delnrm, oldnrm, rate;
+  booleantype sensi_sim;
+
+  sensi_sim = (sensi && (ism==IDA_SIMULTANEOUS));
+
+  /* Initialize counter mnewt and cumulative correction vectors ee and eeS. */
+  mnewt = 0;
+  N_VConst(ZERO, ee);
+  if (sensi_sim)
+    for(is=0;is<Ns;is++) N_VConst(ZERO, eeS[is]);
+  
+  /* Initialize oldnrm to avoid compiler warning message */
+  oldnrm = ZERO;
+
+  /* Looping point for Newton iteration.  Break out on any error. */
+  loop {
+
+    nni++;
+
+    /* Save a copy of the residual vector in savres. */
+    N_VScale(ONE, delta, savres);
+
+    /* Call the lsolve function to get correction vector delta. */
+    retval = lsolve(IDA_mem, delta, ewt, yy, yp, savres); 
+    if (retval < 0) return(IDA_LSOLVE_FAIL);
+    if (retval > 0) return(IDA_LSOLVE_RECVR);
+
+    /* Call the lsolve function to get correction vectors deltaS. */
+    if (sensi_sim) {
+      for(is=0;is<Ns;is++) {
+        retval = lsolve(IDA_mem, deltaS[is], ewtS[is], yy, yp, savres);
+        if(retval < 0) return(IDA_LSOLVE_FAIL);
+        if(retval > 0) return(IDA_LSOLVE_RECVR);
+      }
+    }
+
+    /* Apply delta to yy, yp, and ee, and get norm(delta). */
+    N_VLinearSum(ONE, yy, -ONE, delta, yy);
+    N_VLinearSum(ONE, ee, -ONE, delta, ee);
+    N_VLinearSum(ONE, yp, -cj,  delta, yp);
+    delnrm = IDAWrmsNorm(IDA_mem, delta, ewt, FALSE);
+
+    /* Apply deltaS to yys, ypS, and ees, and get update norm(delta). */
+    if (sensi_sim) {
+      for(is=0;is<Ns;is++) {
+        N_VLinearSum(ONE, eeS[is], -ONE, deltaS[is], eeS[is]);
+        N_VLinearSum(ONE, yyS[is], -ONE, deltaS[is], yyS[is]);
+        N_VLinearSum(ONE, ypS[is], -cj,  deltaS[is], ypS[is]);
+      }
+      delnrm = IDASensWrmsNormUpdate(IDA_mem, delnrm, deltaS, ewtS, FALSE);
+    }
+
+    /* Test for convergence, first directly, then with rate estimate. */
+
+    if (mnewt == 0){ 
+       oldnrm = delnrm;
+       if (delnrm <= toldel) return(IDA_SUCCESS);
+    }
+    else {
+      rate = SUNRpowerR( delnrm/oldnrm, ONE/mnewt );
+      if (rate > RATEMAX) return(IDA_NCONV_RECVR); 
+      ss = rate/(ONE - rate);
+    }
+
+    if (ss*delnrm <= epsNewt) return(IDA_SUCCESS);
+
+    /* Not yet converged.  Increment mnewt and test for max allowed. */
+    mnewt++;
+    if (mnewt >= maxcor) {retval = IDA_NCONV_RECVR; break;}
+
+    /* Call res for new residual and check error flag from res. */
+    retval = res(tn, yy, yp, delta, user_data);
+    nre++;
+    if (retval < 0) return(IDA_RES_FAIL);
+    if (retval > 0) return(IDA_RES_RECVR);
+
+    if (sensi_sim) {
+      retval = resS(Ns, tn, yy, yp, delta, yyS, ypS, deltaS,
+                    user_dataS, tmpS1, tmpS2, tmpS3);
+      nrSe++;
+      if(retval < 0) return(IDA_SRES_FAIL);
+      if(retval > 0) return(IDA_SRES_RECVR);
+    }
+
+    /* Loop for next iteration. */
+
+  } /* end of Newton iteration loop */
+
+  /* All error returns exit here. */
+  return(retval);
+
+}
+
+/*
+ * IDAQuadNls
+ * 
+ * This routine solves for the quadrature variables at the new step.
+ * It does not solve a nonlinear system, but rather updates the
+ * quadrature variables. The name for this function is just for 
+ * uniformity purposes.
+ *
+ */
+
+static int IDAQuadNls(IDAMem IDA_mem)
+{
+  int retval;
+
+  /* Predict: load yyQ and ypQ */
+  IDAQuadPredict(IDA_mem);
+  
+  /* Compute correction eeQ */
+  retval = rhsQ(tn, yy, yp, eeQ, user_data);
+  nrQe++;
+  if (retval < 0) return(IDA_QRHS_FAIL);
+  else if (retval > 0) return(IDA_QRHS_RECVR);
+
+  if (quadr_sensi)
+    N_VScale(ONE, eeQ, savrhsQ);
+
+  N_VLinearSum(ONE, eeQ, -ONE, ypQ, eeQ);
+  N_VScale(ONE/cj, eeQ, eeQ);
+
+  /* Apply correction: yyQ = yyQ + eeQ */
+  N_VLinearSum(ONE, yyQ, ONE, eeQ, yyQ);
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDAQuadPredict
+ *
+ * This routine predicts the new value for vectors yyQ and ypQ
+ */
+
+static void IDAQuadPredict(IDAMem IDA_mem)
+{
+  int j;
+
+  N_VScale(ONE, phiQ[0], yyQ);
+  N_VConst(ZERO, ypQ);
+
+  for(j=1; j<=kk; j++) {
+    N_VLinearSum(ONE,      phiQ[j], ONE, yyQ, yyQ);
+    N_VLinearSum(gamma[j], phiQ[j], ONE, ypQ, ypQ);
+  }
+}
+
+/*
+ * IDASensNls
+ *
+ * This routine attempts to solve, one by one, all the sensitivity 
+ * linear systems using nonlinear iterations and the linear solver 
+ * specified (Staggered approach).
+ */
+
+static int IDASensNls(IDAMem IDA_mem)
+{
+  booleantype callSetup, tryAgain;
+  int is, retval;
+
+  callSetup = FALSE;
+
+  /* Begin the main loop. This loop is traversed at most twice. 
+     The second pass only occurs when the first pass had a recoverable
+     failure with old Jacobian data */
+  loop{
+
+    for(is=0;is<Ns;is++)
+      IDASensPredict(IDA_mem, is, yyS[is], ypS[is]);
+
+    /* Sensitivity residuals at predicted sensitivities -> in deltaS */
+    retval = resS(Ns, tn, yy, yp, delta, yyS, ypS, deltaS,
+                  user_dataS, tmpS1, tmpS2, tmpS3);
+    nrSe++;
+    if(retval < 0) return(IDA_SRES_FAIL);
+    if(retval > 0) return(IDA_SRES_RECVR);
+
+    /* If indicated, call the linear solver setup function */
+    if (callSetup) {
+      retval = lsetup(IDA_mem, yy, yp, delta, tmpS1, tmpS2, tmpS3);
+      nsetupsS++;
+      cjold = cj;
+      cjratio = ONE;
+      ss = TWENTY;
+      ssS = TWENTY;
+      if (retval < 0) return(IDA_LSETUP_FAIL);
+      if (retval > 0) return(IDA_LSETUP_RECVR);
+    }
+
+    /* Call the Newton iteration routine */
+    retval = IDASensNewtonIter(IDA_mem);
+
+    /* Retry the current step on recoverable failure with old Jacobian data */
+    tryAgain = (retval>0) && (setupNonNull) && (!callSetup);
+
+    if (tryAgain) {
+      callSetup = TRUE;
+      continue;
+    }
+    else break;
+
+  }
+
+  if (retval != IDA_SUCCESS) 
+    ncfnS++;
+
+  return(retval);
+
+}
+
+/*
+ * IDASensPredict
+ *
+ * This routine loads the predicted values for the is-th sensitivity 
+ * in the vectors yySens and ypSens.
+ *
+ * When ism=IDA_STAGGERED,  yySens = yyS[is] and ypSens = ypS[is]
+ */
+
+static void IDASensPredict(IDAMem IDA_mem, int is, 
+                           N_Vector yySens, N_Vector ypSens)
+{
+  int j;
+
+  N_VScale(ONE, phiS[0][is], yySens);
+  N_VConst(ZERO, ypSens);
+  
+  for(j=1; j<=kk; j++) {
+    N_VLinearSum(ONE,      phiS[j][is], ONE, yySens, yySens);
+    N_VLinearSum(gamma[j], phiS[j][is], ONE, ypSens, ypSens);
+  }
+
+}
+
+/*
+ * IDASensNewtonIter
+ *
+ * This routine performs the Newton iteration for sensitivity variables
+ * in the staggered case.
+ * It assumes that deltaS contains the initial sensitivity residual 
+ * vectors on entry.
+ *
+ * If the iteration succeeds, it returns the value IDA_SUCCESS = 0.
+ * If not, it returns either:
+ *   a positive value (for a recoverable failure), namely one of:
+ *      IDA_RES_RECVR
+ *      IDA_LSOLVE_RECVR
+ *      IDA_NCONV_RECVR
+ * or
+ *   a negative value (for a nonrecoverable failure), namely one of:
+ *      IDA_RES_FAIL
+ *      IDA_LSOLVE_FAIL
+ */
+
+static int IDASensNewtonIter(IDAMem IDA_mem)
+{
+  int mnewt, is, retval;
+  realtype delSnrm, delSnrm1, rateS;
+
+  mnewt = 0;                  /* local Newton iteration counter */
+  for(is=0;is<Ns;is++)
+    N_VConst(ZERO, eeS[is]);  /* cumulative sensi. corrections  */
+
+  loop {
+
+    nniS++;
+
+    for(is=0;is<Ns;is++) {
+
+      retval = lsolve(IDA_mem, deltaS[is], ewtS[is], yy, yp, delta);
+      if(retval < 0) return(IDA_LSOLVE_FAIL);
+      if(retval > 0) return(IDA_LSOLVE_RECVR);
+
+      N_VLinearSum(ONE, eeS[is], -ONE, deltaS[is], eeS[is]);
+      N_VLinearSum(ONE, yyS[is], -ONE, deltaS[is], yyS[is]);
+      N_VLinearSum(ONE, ypS[is], -cj,  deltaS[is], ypS[is]);
+
+    }
+
+    delSnrm = IDASensWrmsNorm(IDA_mem, deltaS, ewtS, FALSE);
+
+    if (mnewt == 0) {
+      if (delSnrm <= toldel) return(IDA_SUCCESS);
+      delSnrm1 = delSnrm;
+    } else {
+      rateS = SUNRpowerR(delSnrm/delSnrm1, ONE/mnewt);
+      if (rateS > RATEMAX) return(IDA_NCONV_RECVR);
+      ssS = rateS/(ONE - rateS);
+    }
+
+    if (ssS * delSnrm <= epsNewt) return(IDA_SUCCESS);
+
+    mnewt++;
+    if(mnewt >= maxcorS) return(IDA_NCONV_RECVR);
+
+    retval = resS(Ns, tn, yy, yp, delta, yyS, ypS, deltaS,
+                  user_dataS, tmpS1, tmpS2, tmpS3);
+    nrSe++;
+    if (retval < 0) return(IDA_SRES_FAIL);
+    if (retval > 0) return(IDA_SRES_RECVR);
+
+  }
+
+  return(retval);
+}
+
+
+/*
+ * IDAQuadSensNls
+ * 
+ * This routine solves for the snesitivity quadrature variables at the 
+ * new step. It does not solve a nonlinear system, but rather updates 
+ * the sensitivity variables. The name for this function is just for 
+ * uniformity purposes.
+ *
+ */
+
+static int IDAQuadSensNls(IDAMem IDA_mem)
+{
+  int retval, is;
+  N_Vector *ypQS;
+
+  /* Predict: load yyQS and ypQS for each sensitivity. Store 
+   1st order information in tempvQS. */
+  
+  ypQS = tempvQS;
+  IDAQuadSensPredict(IDA_mem, yyQS, ypQS);
+
+  /* Compute correction eeQS */
+  retval = rhsQS(Ns, tn, yy, yp, yyS, ypS, savrhsQ, eeQS, user_dataQS, tmpS1, tmpS2, tmpS3);
+  nrQSe++;
+
+  if (retval < 0) return(IDA_QSRHS_FAIL);
+  else if (retval > 0) return(IDA_QSRHS_RECVR);
+
+  for (is=0; is<Ns; is++) {
+    N_VLinearSum(ONE, eeQS[is], -ONE, ypQS[is], eeQS[is]);
+    N_VScale(ONE/cj, eeQS[is], eeQS[is]);
+  }
+
+  /* Apply correction: yyQS[is] = yyQ[is] + eeQ[is] */
+  for (is=0; is<Ns; is++) {
+    N_VLinearSum(ONE, yyQS[is], ONE, eeQS[is], yyQS[is]);
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDAQuadSensPredict
+ *
+ * This routine predicts the new value for vectors yyQS and ypQS
+ */
+
+static void IDAQuadSensPredict(IDAMem IDA_mem, N_Vector *yQS, N_Vector *ypQS)
+{
+  int j, is;
+
+  for (is=0; is<Ns; is++) {
+    N_VScale(ONE, phiQS[0][is], yQS[is]);
+    N_VConst(ZERO, ypQS[is]);
+  }
+
+  for (is=0; is<Ns; is++) {
+    for(j=1; j<=kk; j++) {
+      N_VLinearSum(ONE,      phiQS[j][is], ONE,  yQS[is],  yQS[is]);
+      N_VLinearSum(gamma[j], phiQS[j][is], ONE, ypQS[is], ypQS[is]);
+    }
+  }
+}
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Error test
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDATestError
+ *
+ * This routine estimates errors at orders k, k-1, k-2, decides 
+ * whether or not to suggest an order reduction, and performs 
+ * the local error test. 
+ *
+ * IDATestError returns either IDA_SUCCESS or ERROR_TEST_FAIL.
+ */
+
+static int IDATestError(IDAMem IDA_mem, realtype ck, 
+                        realtype *err_k, realtype *err_km1, realtype *err_km2)
+{
+  realtype enorm_k, enorm_km1, enorm_km2;   /* error norms */
+  realtype terr_k, terr_km1, terr_km2;      /* local truncation error norms */
+
+  /* Compute error for order k. */
+
+  enorm_k = IDAWrmsNorm(IDA_mem, ee, ewt, suppressalg);
+  *err_k = sigma[kk] * enorm_k;
+  terr_k = (kk+1) * (*err_k);
+
+  knew = kk;
+
+  if ( kk > 1 ) {
+
+    /* Compute error at order k-1 */
+
+    N_VLinearSum(ONE, phi[kk], ONE, ee, delta);
+    enorm_km1 = IDAWrmsNorm(IDA_mem, delta, ewt, suppressalg);
+    *err_km1 = sigma[kk-1] * enorm_km1;
+    terr_km1 = kk * (*err_km1);
+
+    if ( kk > 2 ) {
+
+      /* Compute error at order k-2 */
+
+      N_VLinearSum(ONE, phi[kk-1], ONE, delta, delta);
+      enorm_km2 = IDAWrmsNorm(IDA_mem, delta, ewt, suppressalg);
+      *err_km2 = sigma[kk-2] * enorm_km2;
+      terr_km2 = (kk-1) * (*err_km2);
+
+      /* Reduce order if errors are reduced */
+
+      if (SUNMAX(terr_km1, terr_km2) <= terr_k)  knew = kk - 1;
+
+    } else {
+
+      /* Reduce order to 1 if errors are reduced by at least 1/2 */
+
+      if (terr_km1 <= (HALF * terr_k) )  knew = kk - 1; 
+
+    }
+
+  }
+
+  /* Perform error test */
+  
+  if (ck * enorm_k > ONE) return(ERROR_TEST_FAIL);
+  else                    return(IDA_SUCCESS);
+
+}
+
+/*
+ * IDAQuadTestError
+ *
+ * This routine estimates quadrature errors and updates errors at 
+ * orders k, k-1, k-2, decides whether or not to suggest an order reduction, 
+ * and performs the local error test. 
+ *
+ * IDAQuadTestError returns the updated local error estimate at orders k, 
+ * k-1, and k-2. These are norms of type SUNMAX(|err|,|errQ|).
+ *
+ * The return flag can be either IDA_SUCCESS or ERROR_TEST_FAIL.
+ */
+
+static int IDAQuadTestError(IDAMem IDA_mem, realtype ck, 
+                            realtype *err_k, realtype *err_km1, realtype *err_km2)
+{
+  realtype enormQ;
+  realtype errQ_k, errQ_km1, errQ_km2;
+  realtype terr_k, terr_km1, terr_km2;
+  N_Vector tempv;
+  booleantype check_for_reduction = FALSE;
+
+  /* Rename ypQ */
+  tempv = ypQ;
+
+  /* Update error for order k. */
+  enormQ = N_VWrmsNorm(eeQ, ewtQ);
+  errQ_k = sigma[kk] * enormQ;
+  if (errQ_k > *err_k) {
+    *err_k = errQ_k;
+    check_for_reduction = TRUE;
+  }
+  terr_k = (kk+1) * (*err_k);
+  
+  if ( kk > 1 ) {
+    
+    /* Update error at order k-1 */
+    N_VLinearSum(ONE, phiQ[kk], ONE, eeQ, tempv);
+    errQ_km1 = sigma[kk-1] * N_VWrmsNorm(tempv, ewtQ);
+    if (errQ_km1 > *err_km1) {
+      *err_km1 = errQ_km1;
+      check_for_reduction = TRUE;
+    }
+    terr_km1 = kk * (*err_km1);
+
+    /* Has an order decrease already been decided in IDATestError? */
+    if (knew != kk) check_for_reduction = FALSE;
+
+    if (check_for_reduction) {
+
+      if ( kk > 2 ) {
+
+        /* Update error at order k-2 */
+        N_VLinearSum(ONE, phiQ[kk-1], ONE, tempv, tempv);
+        errQ_km2 = sigma[kk-2] * N_VWrmsNorm(tempv, ewtQ);
+        if (errQ_km2 > *err_km2) {
+          *err_km2 = errQ_km2;
+        }
+        terr_km2 = (kk-1) * (*err_km2);
+
+        /* Decrease order if errors are reduced */
+        if (SUNMAX(terr_km1, terr_km2) <= terr_k)  knew = kk - 1;
+      
+      } else {
+        
+        /* Decrease order to 1 if errors are reduced by at least 1/2 */
+        if (terr_km1 <= (HALF * terr_k) )  knew = kk - 1; 
+        
+      }
+
+    }
+
+  }
+
+  /* Perform error test */
+  if (ck * enormQ > ONE) return(ERROR_TEST_FAIL);
+  else                   return(IDA_SUCCESS);
+
+}
+
+/*
+ * IDASensTestError
+ *
+ * This routine estimates sensitivity errors and updates errors at 
+ * orders k, k-1, k-2, decides whether or not to suggest an order reduction, 
+ * and performs the local error test. (Used only in staggered approach).
+ *
+ * IDASensTestError returns the updated local error estimate at orders k, 
+ * k-1, and k-2. These are norms of type SUNMAX(|err|,|errQ|,|errS|).
+ *
+ * The return flag can be either IDA_SUCCESS or ERROR_TEST_FAIL.
+ */
+
+static int IDASensTestError(IDAMem IDA_mem, realtype ck, 
+                            realtype *err_k, realtype *err_km1, realtype *err_km2)
+{
+  realtype enormS;
+  realtype errS_k, errS_km1, errS_km2;
+  realtype terr_k, terr_km1, terr_km2;
+  N_Vector *tempv;
+  booleantype check_for_reduction = FALSE;
+  int is;
+
+  /* Rename deltaS */
+  tempv = deltaS;
+
+  /* Update error for order k. */
+  enormS = IDASensWrmsNorm(IDA_mem, eeS, ewtS, suppressalg);
+  errS_k  = sigma[kk] * enormS;
+  if (errS_k > *err_k) {
+    *err_k = errS_k;
+    check_for_reduction = TRUE;
+  }
+  terr_k = (kk+1) * (*err_k);
+  
+  if ( kk > 1 ) {
+    
+    /* Update error at order k-1 */
+    for(is=0;is<Ns;is++)
+      N_VLinearSum(ONE, phiS[kk][is], ONE, eeS[is], tempv[is]);
+    errS_km1 = sigma[kk-1] * IDASensWrmsNorm(IDA_mem, tempv, ewtS, suppressalg);
+    if (errS_km1 > *err_km1) {
+      *err_km1 = errS_km1;
+      check_for_reduction = TRUE;
+    }
+    terr_km1 = kk * (*err_km1);
+
+    /* Has an order decrease already been decided in IDATestError? */
+    if (knew != kk) check_for_reduction = FALSE;
+
+    if (check_for_reduction) {
+
+      if ( kk > 2 ) {
+
+        /* Update error at order k-2 */
+        for(is=0;is<Ns;is++)
+          N_VLinearSum(ONE, phiS[kk-1][is], ONE, tempv[is], tempv[is]);
+        errS_km2 = sigma[kk-2] * IDASensWrmsNorm(IDA_mem, tempv, ewtS, suppressalg);
+        if (errS_km2 > *err_km2) {
+          *err_km2 = errS_km2;
+        }
+        terr_km2 = (kk-1) * (*err_km2);
+
+        /* Decrease order if errors are reduced */
+        if (SUNMAX(terr_km1, terr_km2) <= terr_k)  knew = kk - 1;
+      
+      } else {
+        
+        /* Decrease order to 1 if errors are reduced by at least 1/2 */
+        if (terr_km1 <= (HALF * terr_k) )  knew = kk - 1; 
+        
+      }
+
+    }
+
+  }
+
+  /* Perform error test */
+  if (ck * enormS > ONE) return(ERROR_TEST_FAIL);
+  else                   return(IDA_SUCCESS);
+
+}
+
+/*
+ * IDAQuadSensTestError
+ *
+ * This routine estimates quadrature sensitivity errors and updates 
+ * errors at orders k, k-1, k-2, decides whether or not to suggest 
+ * an order reduction and performs the local error test. (Used 
+ * only in staggered approach).
+ *
+ * IDAQuadSensTestError returns the updated local error estimate at 
+ * orders k, k-1, and k-2. These are norms of type 
+ * SUNMAX(|err|,|errQ|,|errS|,|errQS|).
+ *
+ * The return flag can be either IDA_SUCCESS or ERROR_TEST_FAIL.
+ */
+
+static int IDAQuadSensTestError(IDAMem IDA_mem, realtype ck, 
+                                realtype *err_k, realtype *err_km1, realtype *err_km2)
+{
+  realtype enormQS;
+  realtype errQS_k, errQS_km1, errQS_km2;
+  realtype terr_k, terr_km1, terr_km2;
+  N_Vector *tempv;
+  booleantype check_for_reduction = FALSE;
+  int is;
+
+  tempv = yyQS;
+
+  enormQS = IDAQuadSensWrmsNorm(IDA_mem, eeQS, ewtQS);
+  errQS_k = sigma[kk] * enormQS;
+
+  if (errQS_k > *err_k) {
+    *err_k = errQS_k;
+    check_for_reduction = TRUE;
+  }
+  terr_k = (kk+1) * (*err_k);
+  
+  if ( kk > 1 ) {
+    
+    /* Update error at order k-1 */
+    for(is=0;is<Ns;is++)
+      N_VLinearSum(ONE, phiQS[kk][is], ONE, eeQS[is], tempv[is]);
+
+    errQS_km1 = sigma[kk-1] * IDAQuadSensWrmsNorm(IDA_mem, tempv, ewtQS);
+
+    if (errQS_km1 > *err_km1) {
+      *err_km1 = errQS_km1;
+      check_for_reduction = TRUE;
+    }
+    terr_km1 = kk * (*err_km1);
+
+    /* Has an order decrease already been decided in IDATestError? */
+    if (knew != kk) check_for_reduction = FALSE;
+
+    if (check_for_reduction) {
+      if ( kk > 2 ) {
+
+        /* Update error at order k-2 */
+        for(is=0;is<Ns;is++)
+          N_VLinearSum(ONE, phiQS[kk-1][is], ONE, tempv[is], tempv[is]);
+
+        errQS_km2 = sigma[kk-2] * IDAQuadSensWrmsNorm(IDA_mem, tempv, ewtQS);
+        if (errQS_km2 > *err_km2) {
+          *err_km2 = errQS_km2;
+        }
+        terr_km2 = (kk-1) * (*err_km2);
+
+        /* Decrease order if errors are reduced */
+        if (SUNMAX(terr_km1, terr_km2) <= terr_k)  knew = kk - 1;
+
+      } else {
+        /* Decrease order to 1 if errors are reduced by at least 1/2 */
+        if (terr_km1 <= (HALF * terr_k) )  knew = kk - 1; 
+      }
+    }
+  }
+
+  /* Perform error test */
+  if (ck * enormQS > ONE) return(ERROR_TEST_FAIL);
+  else                   return(IDA_SUCCESS);
+}
+/*
+ * IDARestore
+ *
+ * This routine restores tn, psi, and phi in the event of a failure.
+ * It changes back phi-star to phi (changed in IDASetCoeffs)
+ */
+
+static void IDARestore(IDAMem IDA_mem, realtype saved_t)
+{
+  int j;
+  int is;
+
+  tn = saved_t;
+  
+  for (j = 1; j <= kk; j++) 
+    psi[j-1] = psi[j] - hh;
+
+  for (j = ns; j <= kk; j++) 
+    N_VScale(ONE/beta[j], phi[j], phi[j]);
+
+  if (quadr)
+    for (j = ns; j <= kk; j++) 
+      N_VScale(ONE/beta[j], phiQ[j], phiQ[j]);
+
+  if (sensi)
+    for (is = 0; is < Ns; is++)
+      for (j = ns; j<=kk; j++) 
+        N_VScale(ONE/beta[j], phiS[j][is], phiS[j][is]);
+
+  if (quadr_sensi)
+    for (is = 0; is < Ns; is++)
+      for (j = ns; j<=kk; j++) 
+        N_VScale(ONE/beta[j], phiQS[j][is], phiQS[j][is]);
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Handler for convergence and/or error test failures
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAHandleNFlag
+ *
+ * This routine handles failures indicated by the input variable nflag. 
+ * Positive values indicate various recoverable failures while negative
+ * values indicate nonrecoverable failures. This routine adjusts the
+ * step size for recoverable failures. 
+ *
+ *  Possible nflag values (input):
+ *
+ *   --convergence failures--
+ *   IDA_RES_RECVR              > 0
+ *   IDA_LSOLVE_RECVR           > 0
+ *   IDA_CONSTR_RECVR           > 0
+ *   IDA_NCONV_RECVR            > 0
+ *   IDA_QRHS_RECVR             > 0
+ *   IDA_QSRHS_RECVR            > 0
+ *   IDA_RES_FAIL               < 0
+ *   IDA_LSOLVE_FAIL            < 0
+ *   IDA_LSETUP_FAIL            < 0
+ *   IDA_QRHS_FAIL              < 0
+ *
+ *   --error test failure--
+ *   ERROR_TEST_FAIL            > 0
+ *
+ *  Possible kflag values (output):
+ *
+ *   --recoverable--
+ *   PREDICT_AGAIN
+ *
+ *   --nonrecoverable--
+ *   IDA_CONSTR_FAIL   
+ *   IDA_REP_RES_ERR    
+ *   IDA_ERR_FAIL  
+ *   IDA_CONV_FAIL 
+ *   IDA_RES_FAIL
+ *   IDA_LSETUP_FAIL
+ *   IDA_LSOLVE_FAIL
+ *   IDA_QRHS_FAIL
+ *   IDA_REP_QRHS_ERR
+ */
+
+static int IDAHandleNFlag(IDAMem IDA_mem, int nflag, realtype err_k, realtype err_km1,
+                          long int *ncfnPtr, int *ncfPtr, long int *netfPtr, int *nefPtr)
+{
+  realtype err_knew;
+
+  phase = 1;
+    
+  if (nflag != ERROR_TEST_FAIL) {
+
+    /*-----------------------
+      Nonlinear solver failed 
+      -----------------------*/
+
+    (*ncfPtr)++;      /* local counter for convergence failures */
+    (*ncfnPtr)++;     /* global counter for convergence failures */
+    
+    if (nflag < 0) {  /* nonrecoverable failure */
+
+      return(nflag);
+
+    } else {          /* recoverable failure    */
+      
+      /* Reduce step size for a new prediction
+         Note that if nflag=IDA_CONSTR_RECVR then rr was already set in IDANls */
+      if (nflag != IDA_CONSTR_RECVR) rr = QUARTER;
+      hh *= rr;
+
+      /* Test if there were too many convergence failures */
+      if (*ncfPtr < maxncf)               return(PREDICT_AGAIN);
+      else if (nflag == IDA_RES_RECVR)    return(IDA_REP_RES_ERR);
+      else if (nflag == IDA_SRES_RECVR)   return(IDA_REP_SRES_ERR);
+      else if (nflag == IDA_QRHS_RECVR)   return(IDA_REP_QRHS_ERR);
+      else if (nflag == IDA_QSRHS_RECVR)  return(IDA_REP_QSRHS_ERR);
+      else if (nflag == IDA_CONSTR_RECVR) return(IDA_CONSTR_FAIL);
+      else                                return(IDA_CONV_FAIL);
+    }
+    
+  } else { 
+
+    /*-----------------
+      Error Test failed 
+      -----------------*/
+
+    (*nefPtr)++;      /* local counter for error test failures */
+    (*netfPtr)++;     /* global counter for error test failures */
+    
+    if (*nefPtr == 1) {
+      
+      /* On first error test failure, keep current order or lower order by one. 
+         Compute new stepsize based on differences of the solution. */
+      
+      err_knew = (kk==knew)? err_k : err_km1;
+
+      kk = knew;      
+      rr = PT9 * SUNRpowerR( TWO * err_knew + PT0001,(-ONE/(kk+1)) );
+      rr = SUNMAX(QUARTER, SUNMIN(PT9,rr));
+      hh *=rr;
+      return(PREDICT_AGAIN);
+      
+    } else if (*nefPtr == 2) {
+      
+      /* On second error test failure, use current order or decrease order by one. 
+         Reduce stepsize by factor of 1/4. */
+
+      kk = knew;
+      rr = QUARTER;
+      hh *= rr;
+      return(PREDICT_AGAIN);
+      
+    } else if (*nefPtr < maxnef) {
+      
+      /* On third and subsequent error test failures, set order to 1.
+         Reduce stepsize by factor of 1/4. */
+      kk = 1;
+      rr = QUARTER;
+      hh *= rr;
+      return(PREDICT_AGAIN);
+
+    } else {
+
+      /* Too many error test failures */
+      return(IDA_ERR_FAIL);
+      
+    }
+    
+  }
+
+}
+
+/*
+ * IDAReset
+ *
+ * This routine is called only if we need to predict again at the 
+ * very first step. In such a case, reset phi[1] and psi[0].
+ */
+
+static void IDAReset(IDAMem IDA_mem)
+{
+  int is;
+
+  psi[0] = hh;
+
+  N_VScale(rr, phi[1], phi[1]);
+
+  if (quadr)
+    N_VScale(rr, phiQ[1], phiQ[1]);
+
+  if (sensi)
+    for(is=0;is<Ns;is++) 
+      N_VScale(rr, phiS[1][is], phiS[1][is]);
+
+  if (quadr_sensi)
+    for(is=0;is<Ns;is++) 
+      N_VScale(rr, phiQS[1][is], phiQS[1][is]);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Function called after a successful step
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDACompleteStep
+ *
+ * This routine completes a successful step.  It increments nst,
+ * saves the stepsize and order used, makes the final selection of
+ * stepsize and order for the next step, and updates the phi array.
+ * Its return value is IDA_SUCCESS = 0.
+ */
+
+static void IDACompleteStep(IDAMem IDA_mem, realtype err_k, realtype err_km1)
+{
+  int j, is, kdiff, action;
+  realtype terr_k, terr_km1, terr_kp1;
+  realtype err_knew, err_kp1;
+  realtype enorm, tmp, hnew;
+  N_Vector tempvQ, *tempvS;
+
+  nst++;
+  kdiff = kk - kused;
+  kused = kk;
+  hused = hh;
+
+  if ( (knew == kk-1) || (kk == maxord) ) phase = 1;
+
+  /* For the first few steps, until either a step fails, or the order is 
+     reduced, or the order reaches its maximum, we raise the order and double 
+     the stepsize. During these steps, phase = 0. Thereafter, phase = 1, and
+     stepsize and order are set by the usual local error algorithm.         
+     
+     Note that, after the first step, the order is not increased, as not all 
+     of the neccessary information is available yet. */
+  
+  if (phase == 0) {
+
+    if(nst > 1) {
+      kk++;
+      hnew = TWO * hh;
+      if( (tmp = SUNRabs(hnew)*hmax_inv) > ONE ) hnew /= tmp;
+      hh = hnew;
+    }
+
+  } else {
+
+    action = UNSET;
+    
+    /* Set action = LOWER/MAINTAIN/RAISE to specify order decision */
+    
+    if (knew == kk-1)                   {action = LOWER;    goto takeaction;}
+    if (kk == maxord)                   {action = MAINTAIN; goto takeaction;}
+    if ( (kk+1 >= ns ) || (kdiff == 1)) {action = MAINTAIN; goto takeaction;}
+    
+    /* Estimate the error at order k+1, unless already decided to
+       reduce order, or already using maximum order, or stepsize has not
+       been constant, or order was just raised. */
+    
+    N_VLinearSum (ONE, ee, -ONE, phi[kk+1], tempv1);
+    enorm = IDAWrmsNorm(IDA_mem, tempv1, ewt, suppressalg);
+    
+    if (errconQ) {
+      tempvQ = ypQ;
+      N_VLinearSum (ONE, eeQ, -ONE, phiQ[kk+1], tempvQ);
+      enorm = IDAQuadWrmsNormUpdate(IDA_mem, enorm, tempvQ, ewtQ);
+    }
+
+    if (errconS) {
+      tempvS = ypS;
+      for (is=0; is<Ns; is++)
+        N_VLinearSum (ONE, eeS[is], -ONE, phiS[kk+1][is], tempvS[is]);
+      enorm = IDASensWrmsNormUpdate(IDA_mem, enorm, tempvS, ewtS, suppressalg);
+    }
+
+    if (errconQS) {
+      for (is=0; is<Ns; is++)
+        N_VLinearSum(ONE, eeQS[is], -ONE, phiQS[kk+1][is], tempvQS[is]);
+      enorm = IDAQuadSensWrmsNormUpdate(IDA_mem, enorm, tempvQS, ewtQS);
+    }
+    err_kp1= enorm/(kk+2);
+
+    /* Choose among orders k-1, k, k+1 using local truncation error norms. */
+
+    terr_k   = (kk+1) * err_k;
+    terr_kp1 = (kk+2) * err_kp1;
+
+    if (kk == 1) {
+      if (terr_kp1 >= HALF * terr_k)         {action = MAINTAIN; goto takeaction;}
+      else                                   {action = RAISE;    goto takeaction;}
+    } else {
+      terr_km1 = kk * err_km1;
+      if (terr_km1 <= SUNMIN(terr_k, terr_kp1)) {action = LOWER;    goto takeaction;}
+      else if (terr_kp1  >= terr_k)          {action = MAINTAIN; goto takeaction;}
+      else                                   {action = RAISE;    goto takeaction;}
+    }
+    
+  takeaction:
+    
+    /* Set the estimated error norm and, on change of order, reset kk. */
+    if      (action == RAISE) { kk++; err_knew = err_kp1; }
+    else if (action == LOWER) { kk--; err_knew = err_km1; }
+    else                      {       err_knew = err_k;   }  
+
+    /* Compute rr = tentative ratio hnew/hh from error norm.
+       Reduce hh if rr <= 1, double hh if rr >= 2, else leave hh as is.
+       If hh is reduced, hnew/hh is restricted to be between .5 and .9. */
+    
+    hnew = hh;
+    rr = SUNRpowerR( (TWO * err_knew + PT0001) , (-ONE/(kk+1) ) );
+    
+    if (rr >= TWO) {
+      hnew = TWO * hh;
+      if( (tmp = SUNRabs(hnew)*hmax_inv) > ONE ) hnew /= tmp;
+    } else if (rr <= ONE ) { 
+      rr = SUNMAX(HALF, SUNMIN(PT9,rr));
+      hnew = hh * rr;
+    }
+    
+    hh = hnew;
+    
+  } /* end of phase if block */
+  
+  /* Save ee etc. for possible order increase on next step */
+  
+  if (kused < maxord) {
+
+    N_VScale(ONE, ee, phi[kused+1]);
+
+    if (quadr)
+      N_VScale(ONE, eeQ, phiQ[kused+1]);
+
+    if (sensi)
+      for (is=0; is<Ns; is++)
+        N_VScale(ONE, eeS[is], phiS[kused+1][is]);
+
+    if (quadr_sensi)
+      for (is=0; is<Ns; is++)
+        N_VScale(ONE, eeQS[is], phiQS[kused+1][is]);
+  }
+
+  /* Update phi arrays */
+
+  N_VLinearSum(ONE, ee, ONE, phi[kused], phi[kused]);
+  for (j= kused-1; j>=0; j--)
+    N_VLinearSum(ONE, phi[j], ONE, phi[j+1], phi[j]);
+
+  if (quadr) {
+    N_VLinearSum(ONE, eeQ, ONE, phiQ[kused], phiQ[kused]);
+    for (j= kused-1; j>=0; j--)
+      N_VLinearSum(ONE, phiQ[j], ONE, phiQ[j+1], phiQ[j]);
+  }
+
+  if (sensi) {
+    for (is=0; is<Ns; is++) {
+      N_VLinearSum(ONE, eeS[is], ONE, phiS[kused][is], phiS[kused][is]);
+      for (j=kused-1; j>=0; j--)
+        N_VLinearSum(ONE, phiS[j][is], ONE, phiS[j+1][is], phiS[j][is]);
+    }
+  }
+
+  if (quadr_sensi) {
+    for (is=0; is<Ns; is++) {
+      N_VLinearSum(ONE, eeQS[is], ONE, phiQS[kused][is], phiQS[kused][is]);
+      for (j=kused-1; j>=0; j--)
+        N_VLinearSum(ONE, phiQS[j][is], ONE, phiQS[j+1][is], phiQS[j][is]);
+    }
+  }
+
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Norm functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDAWrmsNorm
+ *
+ *  Returns the WRMS norm of vector x with weights w.
+ *  If mask = TRUE, the weight vector w is masked by id, i.e.,
+ *      nrm = N_VWrmsNormMask(x,w,id);
+ *  Otherwise,
+ *      nrm = N_VWrmsNorm(x,w);
+ * 
+ * mask = FALSE       when the call is made from the nonlinear solver.
+ * mask = suppressalg otherwise.
+ */
+
+realtype IDAWrmsNorm(IDAMem IDA_mem, N_Vector x, N_Vector w, 
+                     booleantype mask)
+{
+  realtype nrm;
+
+  if (mask) nrm = N_VWrmsNormMask(x, w, id);
+  else      nrm = N_VWrmsNorm(x, w);
+
+  return(nrm);
+}
+
+/*
+ * IDASensWrmsNorm
+ *
+ * This routine returns the maximum over the weighted root mean 
+ * square norm of xS with weight vectors wS:
+ *
+ *   max { wrms(xS[0],wS[0]) ... wrms(xS[Ns-1],wS[Ns-1]) }    
+ *
+ * Called by IDASensUpdateNorm or directly in the IDA_STAGGERED approach 
+ * during the NLS solution and before the error test.
+ *
+ * Declared global for use in the computation of IC for sensitivities.
+ */
+
+realtype IDASensWrmsNorm(IDAMem IDA_mem, N_Vector *xS, N_Vector *wS,
+                                booleantype mask)
+{
+  int is;
+  realtype nrm, snrm;
+
+  nrm = IDAWrmsNorm(IDA_mem, xS[0], wS[0], mask);
+  for (is=1; is<Ns; is++) {
+    snrm = IDAWrmsNorm(IDA_mem, xS[is], wS[is], mask);
+    if ( snrm > nrm ) nrm = snrm;
+  }
+
+  return (nrm);
+}
+
+/*
+ * IDAQuadSensWrmsNorm
+ *
+ * This routine returns the maximum over the weighted root mean 
+ * square norm of xQS with weight vectors wQS:
+ *
+ *   max { wrms(xQS[0],wQS[0]) ... wrms(xQS[Ns-1],wQS[Ns-1]) }    
+ */
+
+static realtype IDAQuadSensWrmsNorm(IDAMem IDA_mem, N_Vector *xQS, N_Vector *wQS)
+{
+  int is;
+  realtype nrm, snrm;
+
+  nrm = N_VWrmsNorm(xQS[0], wQS[0]);
+  for (is=1; is<Ns; is++) {
+    snrm = N_VWrmsNorm(xQS[is], wQS[is]);
+    if ( snrm > nrm ) nrm = snrm;
+  }
+  return (nrm);
+}
+
+/*
+ * IDAQuadWrmsNormUpdate
+ *
+ * Updates the norm old_nrm to account for all quadratures.
+ */
+
+static realtype IDAQuadWrmsNormUpdate(IDAMem IDA_mem, realtype old_nrm,
+                                      N_Vector xQ, N_Vector wQ)
+{
+  realtype qnrm;
+
+  qnrm = N_VWrmsNorm(xQ, wQ);
+  if (old_nrm > qnrm) return(old_nrm);
+  else                return(qnrm);
+}
+
+/*
+ * IDASensWrmsNormUpdate
+ *
+ * Updates the norm old_nrm to account for all sensitivities.
+ *
+ * This function is declared global since it is used for finding 
+ * IC for sensitivities,
+ */
+
+realtype IDASensWrmsNormUpdate(IDAMem IDA_mem, realtype old_nrm,
+                                      N_Vector *xS, N_Vector *wS,
+                                      booleantype mask)
+{
+  realtype snrm;
+  
+  snrm = IDASensWrmsNorm(IDA_mem, xS, wS, mask);
+  if (old_nrm > snrm) return(old_nrm);
+  else                return(snrm);
+}
+
+static realtype IDAQuadSensWrmsNormUpdate(IDAMem IDA_mem, realtype old_nrm, 
+                                          N_Vector *xQS, N_Vector *wQS)
+{
+  realtype qsnrm;
+  int is; 
+
+  qsnrm = old_nrm;
+
+  for (is=0; is<Ns; is++) {
+    old_nrm = N_VWrmsNorm(xQS[is], wQS[is]);
+    if(old_nrm > qsnrm) qsnrm = old_nrm;
+  }
+  return(qsnrm);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Functions for rootfinding
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * IDARcheck1
+ *
+ * This routine completes the initialization of rootfinding memory
+ * information, and checks whether g has a zero both at and very near
+ * the initial point of the IVP.
+ *
+ * This routine returns an int equal to:
+ *  IDA_RTFUNC_FAIL < 0 if the g function failed, or
+ *  IDA_SUCCESS     = 0 otherwise.
+ */
+
+static int IDARcheck1(IDAMem IDA_mem)
+{
+  int i, retval;
+  realtype smallh, hratio, tplus;
+  booleantype zroot;
+
+  for (i = 0; i < nrtfn; i++) iroots[i] = 0;
+  tlo = tn;
+  ttol = (SUNRabs(tn) + SUNRabs(hh))*uround*HUNDRED;
+
+  /* Evaluate g at initial t and check for zero values. */
+  retval = gfun (tlo, phi[0], phi[1], glo, user_data);
+  nge = 1;
+  if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) {
+    if (SUNRabs(glo[i]) == ZERO) {
+      zroot = TRUE;
+      gactive[i] = FALSE;
+    }
+  }
+  if (!zroot) return(IDA_SUCCESS);
+
+  /* Some g_i is zero at t0; look at g at t0+(small increment). */
+  hratio = SUNMAX(ttol/SUNRabs(hh), PT1);
+  smallh = hratio*hh;
+  tplus = tlo + smallh;
+  N_VLinearSum(ONE, phi[0], smallh, phi[1], yy);
+  retval = gfun (tplus, yy, phi[1], ghi, user_data);  
+  nge++;
+  if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+  /* We check now only the components of g which were exactly 0.0 at t0
+   * to see if we can 'activate' them. */
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i] && SUNRabs(ghi[i]) != ZERO) {
+      gactive[i] = TRUE;
+      glo[i] = ghi[i];
+    }
+  }
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDARcheck2
+ *
+ * This routine checks for exact zeros of g at the last root found,
+ * if the last return was a root.  It then checks for a close pair of
+ * zeros (an error condition), and for a new root at a nearby point.
+ * The array glo = g(tlo) at the left endpoint of the search interval
+ * is adjusted if necessary to assure that all g_i are nonzero
+ * there, before returning to do a root search in the interval.
+ *
+ * On entry, tlo = tretlast is the last value of tret returned by
+ * IDASolve.  This may be the previous tn, the previous tout value,
+ * or the last root location.
+ *
+ * This routine returns an int equal to:
+ *     IDA_RTFUNC_FAIL < 0 if the g function failed, or
+ *     CLOSERT         = 3 if a close pair of zeros was found, or
+ *     RTFOUND         = 1 if a new zero of g was found near tlo, or
+ *     IDA_SUCCESS     = 0 otherwise.
+ */
+
+static int IDARcheck2(IDAMem IDA_mem)
+{
+  int i, retval;
+  realtype smallh, hratio, tplus;
+  booleantype zroot;
+
+  if (irfnd == 0) return(IDA_SUCCESS);
+
+  (void) IDAGetSolution(IDA_mem, tlo, yy, yp);
+  retval = gfun (tlo, yy, yp, glo, user_data);  
+  nge++;
+  if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) iroots[i] = 0;
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i]) continue;
+    if (SUNRabs(glo[i]) == ZERO) {
+      zroot = TRUE;
+      iroots[i] = 1;
+    }
+  }
+  if (!zroot) return(IDA_SUCCESS);
+
+  /* One or more g_i has a zero at tlo.  Check g at tlo+smallh. */
+  ttol = (SUNRabs(tn) + SUNRabs(hh))*uround*HUNDRED;
+  smallh = (hh > ZERO) ? ttol : -ttol;
+  tplus = tlo + smallh;
+  if ( (tplus - tn)*hh >= ZERO) {
+    hratio = smallh/hh;
+    N_VLinearSum(ONE, yy, hratio, phi[1], yy);
+  } else {
+    (void) IDAGetSolution(IDA_mem, tplus, yy, yp);
+  }
+  retval = gfun (tplus, yy, yp, ghi, user_data);  
+  nge++;
+  if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+  /* Check for close roots (error return), for a new zero at tlo+smallh,
+  and for a g_i that changed from zero to nonzero. */
+  zroot = FALSE;
+  for (i = 0; i < nrtfn; i++) {
+    if (!gactive[i]) continue;
+    if (SUNRabs(ghi[i]) == ZERO) {
+      if (iroots[i] == 1) return(CLOSERT);
+      zroot = TRUE;
+      iroots[i] = 1;
+    } else {
+      if (iroots[i] == 1) glo[i] = ghi[i];
+    }
+  }
+  if (zroot) return(RTFOUND);
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDARcheck3
+ *
+ * This routine interfaces to IDARootfind to look for a root of g
+ * between tlo and either tn or tout, whichever comes first.
+ * Only roots beyond tlo in the direction of integration are sought.
+ *
+ * This routine returns an int equal to:
+ *     IDA_RTFUNC_FAIL < 0 if the g function failed, or
+ *     RTFOUND         = 1 if a root of g was found, or
+ *     IDA_SUCCESS     = 0 otherwise.
+ */
+
+static int IDARcheck3(IDAMem IDA_mem)
+{
+  int i, ier, retval;
+
+  /* Set thi = tn or tout, whichever comes first. */
+  if (taskc == IDA_ONE_STEP) thi = tn;
+  if (taskc == IDA_NORMAL) {
+    thi = ( (toutc - tn)*hh >= ZERO) ? tn : toutc;
+  }
+
+  /* Get y and y' at thi. */
+  (void) IDAGetSolution(IDA_mem, thi, yy, yp);
+
+
+  /* Set ghi = g(thi) and call IDARootfind to search (tlo,thi) for roots. */
+  retval = gfun (thi, yy, yp, ghi, user_data);  
+  nge++;
+  if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+  ttol = (SUNRabs(tn) + SUNRabs(hh))*uround*HUNDRED;
+  ier = IDARootfind(IDA_mem);
+  if (ier == IDA_RTFUNC_FAIL) return(IDA_RTFUNC_FAIL);
+  for(i=0; i<nrtfn; i++) {
+    if(!gactive[i] && grout[i] != ZERO) gactive[i] = TRUE;
+  }
+  tlo = trout;
+  for (i = 0; i < nrtfn; i++) glo[i] = grout[i];
+
+  /* If no root found, return IDA_SUCCESS. */  
+  if (ier == IDA_SUCCESS) return(IDA_SUCCESS);
+
+  /* If a root was found, interpolate to get y(trout) and return.  */
+  (void) IDAGetSolution(IDA_mem, trout, yy, yp);
+  return(RTFOUND);
+}
+
+/*
+ * IDARootfind
+ *
+ * This routine solves for a root of g(t) between tlo and thi, if
+ * one exists.  Only roots of odd multiplicity (i.e. with a change
+ * of sign in one of the g_i), or exact zeros, are found.
+ * Here the sign of tlo - thi is arbitrary, but if multiple roots
+ * are found, the one closest to tlo is returned.
+ *
+ * The method used is the Illinois algorithm, a modified secant method.
+ * Reference: Kathie L. Hiebert and Lawrence F. Shampine, Implicitly
+ * Defined Output Points for Solutions of ODEs, Sandia National
+ * Laboratory Report SAND80-0180, February 1980.
+ *
+ * This routine uses the following parameters for communication:
+ *
+ * nrtfn    = number of functions g_i, or number of components of
+ *            the vector-valued function g(t).  Input only.
+ *
+ * gfun     = user-defined function for g(t).  Its form is
+ *            (void) gfun(t, y, yp, gt, user_data)
+ *
+ * rootdir  = in array specifying the direction of zero-crossings.
+ *            If rootdir[i] > 0, search for roots of g_i only if
+ *            g_i is increasing; if rootdir[i] < 0, search for
+ *            roots of g_i only if g_i is decreasing; otherwise
+ *            always search for roots of g_i.
+ *
+ * gactive  = array specifying whether a component of g should
+ *            or should not be monitored. gactive[i] is initially
+ *            set to TRUE for all i=0,...,nrtfn-1, but it may be
+ *            reset to FALSE if at the first step g[i] is 0.0
+ *            both at the I.C. and at a small perturbation of them.
+ *            gactive[i] is then set back on TRUE only after the 
+ *            corresponding g function moves away from 0.0.
+ *
+ * nge      = cumulative counter for gfun calls.
+ *
+ * ttol     = a convergence tolerance for trout.  Input only.
+ *            When a root at trout is found, it is located only to
+ *            within a tolerance of ttol.  Typically, ttol should
+ *            be set to a value on the order of
+ *               100 * UROUND * max (SUNRabs(tlo), SUNRabs(thi))
+ *            where UROUND is the unit roundoff of the machine.
+ *
+ * tlo, thi = endpoints of the interval in which roots are sought.
+ *            On input, these must be distinct, but tlo - thi may
+ *            be of either sign.  The direction of integration is
+ *            assumed to be from tlo to thi.  On return, tlo and thi
+ *            are the endpoints of the final relevant interval.
+ *
+ * glo, ghi = arrays of length nrtfn containing the vectors g(tlo)
+ *            and g(thi) respectively.  Input and output.  On input,
+ *            none of the glo[i] should be zero.
+ *
+ * trout    = root location, if a root was found, or thi if not.
+ *            Output only.  If a root was found other than an exact
+ *            zero of g, trout is the endpoint thi of the final
+ *            interval bracketing the root, with size at most ttol.
+ *
+ * grout    = array of length nrtfn containing g(trout) on return.
+ *
+ * iroots   = int array of length nrtfn with root information.
+ *            Output only.  If a root was found, iroots indicates
+ *            which components g_i have a root at trout.  For
+ *            i = 0, ..., nrtfn-1, iroots[i] = 1 if g_i has a root
+ *            and g_i is increasing, iroots[i] = -1 if g_i has a
+ *            root and g_i is decreasing, and iroots[i] = 0 if g_i
+ *            has no roots or g_i varies in the direction opposite
+ *            to that indicated by rootdir[i].
+ *
+ * This routine returns an int equal to:
+ *      IDA_RTFUNC_FAIL < 0 if the g function failed, or
+ *      RTFOUND         = 1 if a root of g was found, or
+ *      IDA_SUCCESS     = 0 otherwise.
+ *
+ */
+
+static int IDARootfind(IDAMem IDA_mem)
+{
+  realtype alph, tmid, gfrac, maxfrac, fracint, fracsub;
+  int i, retval, imax, side, sideprev;
+  booleantype zroot, sgnchg;
+
+  imax = 0;
+
+  /* First check for change in sign in ghi or for a zero in ghi. */
+  maxfrac = ZERO;
+  zroot = FALSE;
+  sgnchg = FALSE;
+  for (i = 0;  i < nrtfn; i++) {
+    if(!gactive[i]) continue;
+    if (SUNRabs(ghi[i]) == ZERO) {
+      if(rootdir[i]*glo[i] <= ZERO) {
+        zroot = TRUE;
+      }
+    } else {
+      if ( (glo[i]*ghi[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) {
+        gfrac = SUNRabs(ghi[i]/(ghi[i] - glo[i]));
+        if (gfrac > maxfrac) {
+          sgnchg = TRUE;
+          maxfrac = gfrac;
+          imax = i;
+        }
+      }
+    }
+  }
+
+  /* If no sign change was found, reset trout and grout.  Then return
+     IDA_SUCCESS if no zero was found, or set iroots and return RTFOUND.  */ 
+  if (!sgnchg) {
+    trout = thi;
+    for (i = 0; i < nrtfn; i++) grout[i] = ghi[i];
+    if (!zroot) return(IDA_SUCCESS);
+    for (i = 0; i < nrtfn; i++) {
+      iroots[i] = 0;
+      if(!gactive[i]) continue;
+      if ( (SUNRabs(ghi[i]) == ZERO) && (rootdir[i]*glo[i] <= ZERO) )
+        iroots[i] = glo[i] > 0 ? -1:1;
+    }
+    return(RTFOUND);
+  }
+
+  /* Initialize alph to avoid compiler warning */
+  alph = ONE;
+
+  /* A sign change was found.  Loop to locate nearest root. */
+
+  side = 0;  sideprev = -1;
+  loop {                                    /* Looping point */
+
+    /* If interval size is already less than tolerance ttol, break. */
+      if (SUNRabs(thi - tlo) <= ttol) break;
+
+    /* Set weight alph.
+       On the first two passes, set alph = 1.  Thereafter, reset alph
+       according to the side (low vs high) of the subinterval in which
+       the sign change was found in the previous two passes.
+       If the sides were opposite, set alph = 1.
+       If the sides were the same, then double alph (if high side),
+       or halve alph (if low side).
+       The next guess tmid is the secant method value if alph = 1, but
+       is closer to tlo if alph < 1, and closer to thi if alph > 1.    */
+
+    if (sideprev == side) {
+      alph = (side == 2) ? alph*TWO : alph*HALF;
+    } else {
+      alph = ONE;
+    }
+
+    /* Set next root approximation tmid and get g(tmid).
+       If tmid is too close to tlo or thi, adjust it inward,
+       by a fractional distance that is between 0.1 and 0.5.  */
+    tmid = thi - (thi - tlo)*ghi[imax]/(ghi[imax] - alph*glo[imax]);
+    if (SUNRabs(tmid - tlo) < HALF*ttol) {
+      fracint = SUNRabs(thi - tlo)/ttol;
+      fracsub = (fracint > FIVE) ? PT1 : HALF/fracint;
+      tmid = tlo + fracsub*(thi - tlo);
+    }
+    if (SUNRabs(thi - tmid) < HALF*ttol) {
+      fracint = SUNRabs(thi - tlo)/ttol;
+      fracsub = (fracint > FIVE) ? PT1 : HALF/fracint;
+      tmid = thi - fracsub*(thi - tlo);
+    }
+
+    (void) IDAGetSolution(IDA_mem, tmid, yy, yp);
+    retval = gfun (tmid, yy, yp, grout, user_data);  
+    nge++;
+    if (retval != 0) return(IDA_RTFUNC_FAIL);
+
+    /* Check to see in which subinterval g changes sign, and reset imax.
+       Set side = 1 if sign change is on low side, or 2 if on high side.  */  
+    maxfrac = ZERO;
+    zroot = FALSE;
+    sgnchg = FALSE;
+    sideprev = side;
+    for (i = 0;  i < nrtfn; i++) {
+      if(!gactive[i]) continue;
+      if (SUNRabs(grout[i]) == ZERO) {
+        if(rootdir[i]*glo[i] <= ZERO) zroot = TRUE;
+      } else {
+        if ( (glo[i]*grout[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) {
+          gfrac = SUNRabs(grout[i]/(grout[i] - glo[i]));
+          if (gfrac > maxfrac) {
+            sgnchg = TRUE;
+            maxfrac = gfrac;
+            imax = i;
+          }
+        }
+      }
+    }
+    if (sgnchg) {
+      /* Sign change found in (tlo,tmid); replace thi with tmid. */
+      thi = tmid;
+      for (i = 0; i < nrtfn; i++) ghi[i] = grout[i];
+      side = 1;
+      /* Stop at root thi if converged; otherwise loop. */
+      if (SUNRabs(thi - tlo) <= ttol) break;
+      continue;  /* Return to looping point. */
+    }
+
+    if (zroot) {
+      /* No sign change in (tlo,tmid), but g = 0 at tmid; return root tmid. */
+      thi = tmid;
+      for (i = 0; i < nrtfn; i++) ghi[i] = grout[i];
+      break;
+    }
+
+    /* No sign change in (tlo,tmid), and no zero at tmid.
+       Sign change must be in (tmid,thi).  Replace tlo with tmid. */
+    tlo = tmid;
+    for (i = 0; i < nrtfn; i++) glo[i] = grout[i];
+    side = 2;
+    /* Stop at root thi if converged; otherwise loop back. */
+    if (SUNRabs(thi - tlo) <= ttol) break;
+
+  } /* End of root-search loop */
+
+  /* Reset trout and grout, set iroots, and return RTFOUND. */
+  trout = thi;
+  for (i = 0; i < nrtfn; i++) {
+    grout[i] = ghi[i];
+    iroots[i] = 0;
+    if(!gactive[i]) continue;
+    if ( (SUNRabs(ghi[i]) == ZERO) && (rootdir[i]*glo[i] <= ZERO) )
+      iroots[i] = glo[i] > 0 ? -1:1;
+    if ( (glo[i]*ghi[i] < ZERO) && (rootdir[i]*glo[i] <= ZERO) ) 
+      iroots[i] = glo[i] > 0 ? -1:1;
+  }
+  return(RTFOUND);
+}
+
+/* 
+ * =================================================================
+ * Internal DQ approximations for sensitivity RHS
+ * =================================================================
+ */
+
+#undef Ns
+#undef yy
+#undef yp
+#undef yyS
+#undef ypS
+#undef user_dataS
+
+/*
+ * IDASensResDQ
+ *
+ * IDASensRhsDQ computes the residuals of the sensitivity equations
+ * by finite differences. It is of type IDASensResFn.
+ * Returns 0 if successful, <0 if an unrecoverable failure occurred,
+ * >0 for a recoverable error.
+ */
+
+int IDASensResDQ(int Ns, realtype t, 
+                 N_Vector yy, N_Vector yp, N_Vector resval,
+                 N_Vector *yyS, N_Vector *ypS, N_Vector *resvalS,
+                 void *user_dataS,
+                 N_Vector ytemp, N_Vector yptemp, N_Vector restemp)
+{
+  int retval, is;
+
+  for (is=0; is<Ns; is++) {
+    retval = IDASensRes1DQ(Ns, t, 
+                           yy, yp, resval, 
+                           is, yyS[is], ypS[is], resvalS[is], 
+                           user_dataS,
+                           ytemp, yptemp, restemp);
+    if (retval != 0) return(retval);
+  }
+  return(0);
+}
+
+/*
+ * IDASensRes1DQ
+ *
+ * IDASensRes1DQ computes the residual of the is-th sensitivity 
+ * equation by finite differences.
+ *
+ * Returns 0 if successful or the return value of res if res fails
+ * (<0 if res fails unrecoverably, >0 if res has a recoverable error).
+ */
+
+static int IDASensRes1DQ(int Ns, realtype t, 
+                         N_Vector yy, N_Vector yp, N_Vector resval,
+                         int is,
+                         N_Vector yyS, N_Vector ypS, N_Vector resvalS,
+                         void *user_dataS,
+                         N_Vector ytemp, N_Vector yptemp, N_Vector restemp)
+{
+  IDAMem IDA_mem;
+  int method;
+  int which;
+  int retval;
+  realtype psave, pbari;
+  realtype del , rdel;
+  realtype Delp, rDelp, r2Delp;
+  realtype Dely, rDely, r2Dely;
+  realtype Del , rDel , r2Del ;
+  realtype norms, ratio;
+
+  /* user_dataS points to IDA_mem */
+  IDA_mem = (IDAMem) user_dataS;
+
+  /* Set base perturbation del */
+  del  = SUNRsqrt(SUNMAX(rtol, uround));
+  rdel = ONE/del;
+
+  pbari = pbar[is];
+
+  which = plist[is];
+
+  psave = p[which];
+
+  Delp  = pbari * del;
+  rDelp = ONE/Delp;
+  norms = N_VWrmsNorm(yyS, ewt) * pbari;
+  rDely = SUNMAX(norms, rdel) / pbari;
+  Dely  = ONE/rDely;
+
+  if (DQrhomax == ZERO) {
+    /* No switching */
+    method = (DQtype==IDA_CENTERED) ? CENTERED1 : FORWARD1;
+  } else {
+    /* switch between simultaneous/separate DQ */
+    ratio = Dely * rDelp;
+    if ( SUNMAX(ONE/ratio, ratio) <= DQrhomax )
+      method = (DQtype==IDA_CENTERED) ? CENTERED1 : FORWARD1;
+    else
+      method = (DQtype==IDA_CENTERED) ? CENTERED2 : FORWARD2;
+  }
+  
+  switch (method) {
+
+  case CENTERED1:
+
+    Del = SUNMIN(Dely, Delp);
+    r2Del = HALF/Del;
+
+    /* Forward perturb y, y' and parameter */
+    N_VLinearSum(Del, yyS, ONE, yy, ytemp);
+    N_VLinearSum(Del, ypS, ONE, yp, yptemp);
+    p[which] = psave + Del;
+
+    /* Save residual in resvalS */
+    retval = res(t, ytemp, yptemp, resvalS, user_data);
+    nreS++;
+    if (retval != 0) return(retval);
+    
+    /* Backward perturb y, y' and parameter */
+    N_VLinearSum(-Del, yyS, ONE, yy, ytemp);
+    N_VLinearSum(-Del, ypS, ONE, yp, yptemp);
+    p[which] = psave - Del;
+
+    /* Save residual in restemp */
+    retval = res(t, ytemp, yptemp, restemp, user_data);
+    nreS++;
+    if (retval != 0) return(retval);
+
+    /* Estimate the residual for the i-th sensitivity equation */
+    N_VLinearSum(r2Del, resvalS, -r2Del, restemp, resvalS);
+    
+    break;
+
+  case CENTERED2:
+
+    r2Delp = HALF/Delp;
+    r2Dely = HALF/Dely;
+
+    /* Forward perturb y and y' */
+    N_VLinearSum(Dely, yyS, ONE, yy, ytemp);
+    N_VLinearSum(Dely, ypS, ONE, yp, yptemp);
+    
+    /* Save residual in resvalS */
+    retval = res(t, ytemp, yptemp, resvalS, user_data);
+    nreS++;
+    if (retval != 0) return(retval);
+    
+    /* Backward perturb y and y' */
+    N_VLinearSum(-Dely, yyS, ONE, yy, ytemp);
+    N_VLinearSum(-Dely, ypS, ONE, yp, yptemp);
+
+    /* Save residual in restemp */
+    retval = res(t, ytemp, yptemp, restemp, user_data);
+    nreS++;
+    if (retval != 0) return(retval);
+
+    /* Save the first difference quotient in resvalS */
+    N_VLinearSum(r2Dely, resvalS, -r2Dely, restemp, resvalS);
+
+    /* Forward perturb parameter */
+    p[which] = psave + Delp;
+
+    /* Save residual in ytemp */
+    retval = res(t, yy, yp, ytemp, user_data);
+    nreS++;
+    if (retval != 0) return(retval);
+
+    /* Backward perturb parameter */
+    p[which] = psave - Delp;
+
+    /* Save residual in yptemp */
+    retval = res(t, yy, yp, yptemp, user_data);
+    nreS++;
+    if (retval != 0) return(retval);
+    
+    /* Save the second difference quotient in restemp */
+    N_VLinearSum(r2Delp, ytemp, -r2Delp, yptemp, restemp);
+    
+    /* Add the difference quotients for the sensitivity residual */
+    N_VLinearSum(ONE, resvalS, ONE, restemp, resvalS);
+    
+    break;
+
+  case FORWARD1:
+
+    Del = SUNMIN(Dely, Delp);
+    rDel = ONE/Del;
+
+    /* Forward perturb y, y' and parameter */
+    N_VLinearSum(Del, yyS, ONE, yy, ytemp);
+    N_VLinearSum(Del, ypS, ONE, yp, yptemp);
+    p[which] = psave + Del;
+
+    /* Save residual in resvalS */
+    retval = res(t, ytemp, yptemp, resvalS, user_data);
+    nreS++;
+    if (retval != 0) return(retval);
+
+    /* Estimate the residual for the i-th sensitivity equation */
+    N_VLinearSum(rDel, resvalS, -rDel, resval, resvalS);
+
+    break;
+
+  case FORWARD2:
+
+    /* Forward perturb y and y' */
+    N_VLinearSum(Dely, yyS, ONE, yy, ytemp);
+    N_VLinearSum(Dely, ypS, ONE, yp, yptemp);
+
+    /* Save residual in resvalS */
+    retval = res(t, ytemp, yptemp, resvalS, user_data);
+    nreS++;
+    if (retval != 0) return(retval);
+
+    /* Save the first difference quotient in resvalS */
+    N_VLinearSum(rDely, resvalS, -rDely, resval, resvalS);
+
+    /* Forward perturb parameter */
+    p[which] = psave + Delp;
+
+    /* Save residual in restemp */
+    retval = res(t, yy, yp, restemp, user_data);
+    nreS++;
+    if (retval != 0) return(retval);
+
+    /* Save the second difference quotient in restemp */
+    N_VLinearSum(rDelp, restemp, -rDelp, resval, restemp);
+
+    /* Add the difference quotients for the sensitivity residual */
+    N_VLinearSum(ONE, resvalS, ONE, restemp, resvalS);
+
+    break;
+
+  }
+
+  /* Restore original value of parameter */
+  p[which] = psave;
+  
+  return(0);
+
+}
+
+
+/* IDAQuadSensRhsInternalDQ   - internal IDAQuadSensRhsFn
+ *
+ * IDAQuadSensRhsInternalDQ computes right hand side of all quadrature
+ * sensitivity equations by finite differences. All work is actually
+ * done in IDAQuadSensRhs1InternalDQ.
+ */
+
+static int IDAQuadSensRhsInternalDQ(int Ns, realtype t, 
+                                    N_Vector yy,   N_Vector yp,
+                                    N_Vector *yyS, N_Vector *ypS,
+                                    N_Vector rrQ,  N_Vector *resvalQS,
+                                    void *ida_mem,  
+                                    N_Vector yytmp, N_Vector yptmp, N_Vector tmpQS)
+{
+  IDAMem IDA_mem;
+  int is, retval;
+  
+  /* cvode_mem is passed here as user data */
+  IDA_mem = (IDAMem) ida_mem;
+
+  for (is=0; is<Ns; is++) {
+    retval = IDAQuadSensRhs1InternalDQ(IDA_mem, is, t,
+                                      yy, yp, yyS[is], ypS[is], 
+                                      rrQ, resvalQS[is],
+                                      yytmp, yptmp, tmpQS);
+    if (retval!=0) return(retval);
+  }
+
+  return(0);
+}
+
+static int IDAQuadSensRhs1InternalDQ(IDAMem IDA_mem, int is, realtype t, 
+                                    N_Vector yy, N_Vector yp, 
+                                    N_Vector yyS, N_Vector ypS,
+                                    N_Vector resvalQ, N_Vector resvalQS, 
+                                    N_Vector yytmp, N_Vector yptmp, N_Vector tmpQS)
+{
+  int retval, method;
+  int nfel = 0, which;
+  realtype psave, pbari;
+  realtype del , rdel;
+  realtype Delp;
+  realtype Dely, rDely;
+  realtype Del , r2Del ;
+  realtype norms;
+
+  del = SUNRsqrt(SUNMAX(rtol, uround));
+  rdel = ONE/del;
+  
+  pbari = pbar[is];
+
+  which = plist[is];
+
+  psave = p[which];
+  
+  Delp  = pbari * del;
+  norms   = N_VWrmsNorm(yyS, ewt) * pbari;
+  rDely = SUNMAX(norms, rdel) / pbari;
+  Dely  = ONE/rDely;
+  
+  method = (DQtype==IDA_CENTERED) ? CENTERED1 : FORWARD1;
+
+  switch(method) {
+
+  case CENTERED1:
+    
+    Del = SUNMIN(Dely, Delp);
+    r2Del = HALF/Del;
+    
+    N_VLinearSum(ONE, yy, Del, yyS, yytmp);
+    N_VLinearSum(ONE, yp, Del, ypS, yptmp);
+    p[which] = psave + Del;
+
+    retval = rhsQ(t, yytmp, yptmp, resvalQS, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+    
+    N_VLinearSum(-Del, yyS, ONE, yy, yytmp);
+    N_VLinearSum(-Del, ypS, ONE, yp, yptmp);
+
+    p[which] = psave - Del;
+
+    retval = rhsQ(t, yytmp, yptmp, tmpQS, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+
+    N_VLinearSum(r2Del, resvalQS, -r2Del, tmpQS, resvalQS);
+    
+    break;
+
+  case FORWARD1:
+    
+    Del = SUNMIN(Dely, Delp);
+    rdel = ONE/Del;
+    
+    N_VLinearSum(ONE, yy, Del, yyS, yytmp);
+    N_VLinearSum(ONE, yp, Del, ypS, yptmp);
+    p[which] = psave + Del;
+
+    retval = rhsQ(t, yytmp, yptmp, resvalQS, user_data);
+    nfel++;
+    if (retval != 0) return(retval);
+    
+    N_VLinearSum(rdel, resvalQS, -rdel, resvalQ, resvalQS);
+    
+    break;
+  }
+
+  p[which] = psave;
+  /* Increment counter nrQeS */
+  nrQeS += nfel;
+  
+  return(0);
+}
+
+
+/* 
+ * =================================================================
+ * IDA Error message handling functions 
+ * =================================================================
+ */
+
+/*
+ * IDAProcessError is a high level error handling function.
+ * - If ida_mem==NULL it prints the error message to stderr.
+ * - Otherwise, it sets up and calls the error handling function 
+ *   pointed to by ida_ehfun.
+ */
+
+#define ehfun   (IDA_mem->ida_ehfun)
+#define eh_data (IDA_mem->ida_eh_data)
+
+void IDAProcessError(IDAMem IDA_mem, 
+                    int error_code, const char *module, const char *fname, 
+                    const char *msgfmt, ...)
+{
+  va_list ap;
+  char msg[256];
+
+  /* Initialize the argument pointer variable 
+     (msgfmt is the last required argument to IDAProcessError) */
+
+  va_start(ap, msgfmt);
+
+  /* Compose the message */
+
+  vsprintf(msg, msgfmt, ap);
+
+  if (IDA_mem == NULL) {    /* We write to stderr */
+#ifndef NO_FPRINTF_OUTPUT
+    fprintf(stderr, "\n[%s ERROR]  %s\n  ", module, fname);
+    fprintf(stderr, "%s\n\n", msg);
+#endif
+
+  } else {                 /* We can call ehfun */
+    ehfun(error_code, module, fname, msg, eh_data);
+  }
+
+  /* Finalize argument processing */
+  va_end(ap);
+
+  return;
+}
+
+/* IDAErrHandler is the default error handling function.
+   It sends the error message to the stream pointed to by ida_errfp */
+
+#define errfp (IDA_mem->ida_errfp)
+
+void IDAErrHandler(int error_code, const char *module,
+                   const char *function, char *msg, void *data)
+{
+  IDAMem IDA_mem;
+  char err_type[10];
+
+  /* data points to IDA_mem here */
+
+  IDA_mem = (IDAMem) data;
+
+  if (error_code == IDA_WARNING)
+    sprintf(err_type,"WARNING");
+  else
+    sprintf(err_type,"ERROR");
+
+#ifndef NO_FPRINTF_OUTPUT
+  if (errfp!=NULL) {
+    fprintf(errfp,"\n[%s %s]  %s\n",module,err_type,function);
+    fprintf(errfp,"  %s\n\n",msg);
+  }
+#endif
+
+  return;
+}
diff --git a/src/idas/idas_band.c b/src/idas/idas_band.c
new file mode 100644
index 0000000..f0c2935
--- /dev/null
+++ b/src/idas/idas_band.c
@@ -0,0 +1,431 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4909 $
+ * $Date: 2016-09-14 16:51:27 -0700 (Wed, 14 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDAS banded linear
+ * solver module, IDABAND. This module uses standard banded
+ * matrix techniques to solve the linear systems generated by the
+ * (nonlinear) Newton iteration process. The user may either
+ * supply a banded Jacobian routine or use the routine supplied
+ * with this module (IDABandDQJac).
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <idas/idas_band.h>
+#include "idas_direct_impl.h"
+#include "idas_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* IDABAND linit, lsetup, lsolve, and lfree routines */
+ 
+static int IDABandInit(IDAMem IDA_mem);
+
+static int IDABandSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+                        N_Vector rrp, N_Vector tmp1,
+                        N_Vector tmp2, N_Vector tmp3);
+
+static int IDABandSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                        N_Vector ycur, N_Vector ypcur, N_Vector rrcur);
+
+static int IDABandFree(IDAMem IDA_mem);
+
+/* IDABAND lfreeB function */
+
+static int IDABandFreeB(IDABMem IDAB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define res         (IDA_mem->ida_res)
+#define tn          (IDA_mem->ida_tn)
+#define hh          (IDA_mem->ida_hh)
+#define cj          (IDA_mem->ida_cj)
+#define cjratio     (IDA_mem->ida_cjratio)
+#define ewt         (IDA_mem->ida_ewt)
+#define constraints (IDA_mem->ida_constraints)
+#define linit       (IDA_mem->ida_linit)
+#define lsetup      (IDA_mem->ida_lsetup)
+#define lsolve      (IDA_mem->ida_lsolve)
+#define lperf       (IDA_mem->ida_lperf)
+#define lfree       (IDA_mem->ida_lfree)
+#define lmem        (IDA_mem->ida_lmem)
+#define setupNonNull (IDA_mem->ida_setupNonNull)
+#define vec_tmpl     (IDA_mem->ida_tempv1)
+
+#define mtype       (idadls_mem->d_type)
+#define neq         (idadls_mem->d_n)
+#define ml          (idadls_mem->d_ml)
+#define mu          (idadls_mem->d_mu)
+#define jacDQ       (idadls_mem->d_jacDQ)
+#define bjac        (idadls_mem->d_bjac)
+#define JJ          (idadls_mem->d_J)
+#define smu         (idadls_mem->d_smu)
+#define lpivots     (idadls_mem->d_lpivots)
+#define nje         (idadls_mem->d_nje)
+#define nreDQ       (idadls_mem->d_nreDQ)
+#define jacdata     (idadls_mem->d_J_data)
+#define last_flag   (idadls_mem->d_last_flag)
+                  
+/*
+ * -----------------------------------------------------------------
+ * IDABand
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDABAND linear solver module.
+ * IDABand first calls the existing lfree routine if this is not NULL.
+ * Then it sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDABandInit, IDABandSetup,
+ * IDABandSolve, NULL, and IDABandFree, respectively.
+ * It allocates memory for a structure of type IDADlsMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem) to TRUE, sets the d_jacdata field in
+ * the IDADlsMemRec structure to be the input parameter jdata, and sets
+ * the d_bjac field to be:
+ *   (1) the input parameter bjac, if bjac != NULL, or
+ *   (2) IDABandDQJac, if bjac == NULL.
+ * Finally, it allocates memory for JJ and lpivots.
+ * IDABand returns IDADLS_SUCCESS = 0, IDADLS_LMEM_FAIL = -1,
+ * or IDADLS_ILL_INPUT = -2.
+ *
+ * NOTE: The band linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDABand will first 
+ *       test for a compatible N_Vector internal representation by
+ *       checking that the N_VGetArrayPointer function exists
+ * -----------------------------------------------------------------
+ */
+
+int IDABand(void *ida_mem, long int Neq, long int mupper, long int mlower)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASBAND", "IDABand", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if(vec_tmpl->ops->nvgetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASBAND", "IDABand", MSGD_BAD_NVECTOR);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Test mlower and mupper for legality. */
+  if ((mlower < 0) || (mupper < 0) || (mlower >= Neq) || (mupper >= Neq)) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASBAND", "IDABand", MSGD_BAD_SIZES);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree((IDAMem) ida_mem);
+
+  /* Set five main function fields in ida_mem. */
+  linit  = IDABandInit;
+  lsetup = IDABandSetup;
+  lsolve = IDABandSolve;
+  lperf  = NULL;
+  lfree  = IDABandFree;
+
+  /* Get memory for IDADlsMemRec. */
+  idadls_mem = NULL;
+  idadls_mem = (IDADlsMem) malloc(sizeof(struct IDADlsMemRec));
+  if (idadls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASBAND", "IDABand", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_BAND;
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ   = TRUE;
+  bjac    = NULL;
+  jacdata = NULL;
+  last_flag = IDADLS_SUCCESS;
+
+  idaDlsInitializeCounters(idadls_mem); 
+
+  setupNonNull = TRUE;
+
+  /* Store problem size */
+  neq = Neq;
+
+  idadls_mem->d_ml = mlower;
+  idadls_mem->d_mu = mupper;
+    
+  /* Set extended upper half-bandwidth for JJ (required for pivoting). */
+  smu = SUNMIN(Neq-1, mupper + mlower);
+
+  /* Allocate memory for JJ and pivot array. */
+  JJ = NULL;
+  JJ = NewBandMat(Neq, mupper, mlower, smu);
+  if (JJ == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASBAND", "IDABand", MSGD_MEM_FAIL);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+
+  lpivots = NULL;
+  lpivots = NewLintArray(Neq);
+  if (lpivots == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASBAND", "IDABand", MSGD_MEM_FAIL);
+    DestroyMat(JJ);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }  
+  
+  /* Attach linear solver memory to the integrator memory */
+  lmem = idadls_mem;
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDABAND interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the IDABAND
+  linear solver module.  It returns 0.
+*/
+
+static int IDABandInit(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+
+  /* Initialize nje and nreB */
+  idaDlsInitializeCounters(idadls_mem); 
+
+  if (jacDQ) {
+    bjac = idaDlsBandDQJac;
+    jacdata = IDA_mem;
+  } else {
+    jacdata = IDA_mem->ida_user_data;
+  }
+
+  last_flag = 0;
+  return(0);
+}
+
+
+/*
+  This routine does the setup operations for the IDABAND linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the band LU factorization routine.
+  The return value is either
+     IDADLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int IDABandSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+                        N_Vector rrp, N_Vector tmp1, N_Vector tmp2,
+                        N_Vector tmp3)
+{
+  int retval;
+  long int retfac;
+  IDADlsMem idadls_mem;
+  
+  idadls_mem = (IDADlsMem) lmem;
+
+  /* Increment nje counter. */
+  nje++;
+
+  /* Zero out JJ; call Jacobian routine jac; return if it failed. */
+  SetToZero(JJ);
+  retval = bjac(neq, mu, ml, tn,  cj, yyp, ypp, rrp,
+                JJ, jacdata, tmp1, tmp2, tmp3);
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDADLS_JACFUNC_UNRECVR, "IDASBAND", "IDABandSetup", MSGD_JACFUNC_FAILED);
+    last_flag = IDADLS_JACFUNC_UNRECVR;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = IDADLS_JACFUNC_RECVR;
+    return(+1);
+  }
+
+  /* Do LU factorization of JJ; return success or fail flag. */
+  retfac = BandGBTRF(JJ, lpivots);
+  
+  if (retfac != 0) {
+    last_flag = retfac;
+    return(+1);
+  }
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+/*
+  This routine handles the solve operation for the IDABAND linear
+  solver module.  It calls the band backsolve routine, scales the
+  solution vector according to cjratio, then returns IDADLS_SUCCESS = 0.
+*/
+
+static int IDABandSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                        N_Vector ycur, N_Vector ypcur, N_Vector rrcur)
+{
+  IDADlsMem idadls_mem;
+  realtype *bd;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  bd = N_VGetArrayPointer(b);
+  BandGBTRS(JJ, lpivots, bd);
+
+  /* Scale the correction to account for change in cj. */
+  if (cjratio != ONE) N_VScale(TWO/(ONE + cjratio), b, b);
+  
+  last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine frees memory specific to the IDABAND linear solver.
+*/
+
+static int IDABandFree(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  DestroyMat(JJ);
+  DestroyArray(lpivots);
+  free(lmem); lmem = NULL;
+
+  return(0);
+
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+
+/*
+ * IDABandB is a wrapper around IDABand. It attaches the IDASBAND linear solver
+ * to the backward problem memory block.
+ */
+
+int IDABandB(void *ida_mem, int which,
+             long int NeqB, long int mupperB, long int mlowerB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASBAND", "IDABandB", MSGD_CAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDADLS_NO_ADJ, "IDASBAND", "IDABandB",  MSGD_NO_ADJ);
+    return(IDADLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASBAND", "IDABandB", MSGD_BAD_WHICH);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get memory for IDADlsMemRecB */
+  idadlsB_mem = (IDADlsMemB) malloc(sizeof(struct IDADlsMemRecB));
+  if (idadlsB_mem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDADLS_MEM_FAIL, "IDASBAND", "IDABandB", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  
+  }
+
+  /* set matrix type and initialize Jacob function. */
+  idadlsB_mem->d_typeB = SUNDIALS_BAND;
+  idadlsB_mem->d_bjacB = NULL;
+
+
+  /* Attach lmemB data and lfreeB function. */
+  IDAB_mem->ida_lmem  = idadlsB_mem;
+  IDAB_mem->ida_lfree = IDABandFreeB;
+
+  /* Call IDABand to attach the IDABAND linear solver. */
+  ida_memB = (void *)IDAB_mem->IDA_mem;
+  flag = IDABand(ida_memB, NeqB, mupperB, mlowerB);
+
+  if (flag != IDADLS_SUCCESS) {
+    free(idadlsB_mem);
+    idadlsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * IDABandFreeB 
+ */
+
+static int IDABandFreeB(IDABMem IDAB_mem)
+{
+  IDADlsMemB idadlsB_mem;
+
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  free(idadlsB_mem);
+
+  return(0);
+}
+
diff --git a/src/idas/idas_bbdpre.c b/src/idas/idas_bbdpre.c
new file mode 100644
index 0000000..2b93fba
--- /dev/null
+++ b/src/idas/idas_bbdpre.c
@@ -0,0 +1,841 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4921 $
+ * $Date: 2016-09-19 14:35:11 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file contains implementations of routines for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with IDAS and an IDASPILS
+ * linear solver.
+ *
+ * NOTE: With only one processor in use, a banded matrix results
+ * rather than a block-diagonal matrix with banded blocks.
+ * Diagonal blocking occurs at the processor level.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "idas_impl.h"
+#include "idas_spils_impl.h"
+#include "idas_bbdpre_impl.h"
+
+#include <idas/idas_spgmr.h>
+#include <idas/idas_spbcgs.h>
+#include <idas/idas_sptfqmr.h>
+
+#include <sundials/sundials_math.h>
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+/* Prototypes of IDABBDPrecSetup and IDABBDPrecSolve */
+
+static int IDABBDPrecSetup(realtype tt,
+                           N_Vector yy, N_Vector yp, N_Vector rr,
+                           realtype c_j, void *prec_data,
+                           N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+ 
+static int IDABBDPrecSolve(realtype tt,
+                           N_Vector yy, N_Vector yp, N_Vector rr,
+                           N_Vector rvec, N_Vector zvec,
+                           realtype c_j, realtype delta, void *prec_data,
+                           N_Vector tmp);
+
+/* Prototype for IDABBDPrecFree */
+
+static int IDABBDPrecFree(IDAMem ida_mem);
+
+/* Prototype for difference quotient Jacobian calculation routine */
+
+static int IBBDDQJac(IBBDPrecData pdata, realtype tt, realtype cj,
+                     N_Vector yy, N_Vector yp, N_Vector gref, 
+                     N_Vector ytemp, N_Vector yptemp, N_Vector gtemp);
+
+/* Wrapper functions for adjoint code */
+
+static int IDAAglocal(long int NlocalB, realtype tt,
+                      N_Vector yyB, N_Vector ypB, N_Vector gvalB,
+                      void *user_dataB);
+
+static int IDAAgcomm(long int NlocalB, realtype tt,
+                     N_Vector yyB, N_Vector ypB,
+                     void *user_dataB);
+
+/* Prototype for the pfree routine for backward problems. */
+
+static int IDABBDPrecFreeB(IDABMem IDAB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define uround   (IDA_mem->ida_uround)
+#define vec_tmpl (IDA_mem->ida_tempv1)
+
+/*
+ * -----------------------------------------------------------------
+ * User-Callable Functions : malloc, reinit and free
+ * -----------------------------------------------------------------
+ */
+
+int IDABBDPrecInit(void *ida_mem, long int Nlocal, 
+                   long int mudq, long int mldq, 
+                   long int mukeep, long int mlkeep, 
+                   realtype dq_rel_yy, 
+                   IDABBDLocalFn Gres, IDABBDCommFn Gcomm)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  IBBDPrecData pdata;
+  N_Vector tempv4;
+  long int muk, mlk, storage_mu;
+  int flag;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_MEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) IDA_mem->ida_lmem;
+
+  /* Test if the NVECTOR package is compatible with BLOCK BAND preconditioner */
+  if(vec_tmpl->ops->nvgetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_BAD_NVECTOR);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Allocate data memory. */
+  pdata = NULL;
+  pdata = (IBBDPrecData) malloc(sizeof *pdata);
+  if (pdata == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Set pointers to glocal and gcomm; load half-bandwidths. */
+  pdata->ida_mem = IDA_mem;
+  pdata->glocal = Gres;
+  pdata->gcomm = Gcomm;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0, mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0, mldq));
+  muk = SUNMIN(Nlocal-1, SUNMAX(0, mukeep));
+  mlk = SUNMIN(Nlocal-1, SUNMAX(0, mlkeep));
+  pdata->mukeep = muk;
+  pdata->mlkeep = mlk;
+
+  /* Set extended upper half-bandwidth for PP (required for pivoting). */
+  storage_mu = SUNMIN(Nlocal-1, muk+mlk);
+
+  /* Allocate memory for preconditioner matrix. */
+  pdata->PP = NULL;
+  pdata->PP = NewBandMat(Nlocal, muk, mlk, storage_mu);
+  if (pdata->PP == NULL) { 
+    free(pdata); pdata = NULL;
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL); 
+  }
+
+  /* Allocate memory for lpivots. */
+  pdata->lpivots = NULL;
+  pdata->lpivots = NewLintArray(Nlocal);
+  if (pdata->lpivots == NULL) {
+    DestroyMat(pdata->PP);
+    free(pdata); pdata = NULL;
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Allocate tempv4 for use by IBBDDQJac */
+  tempv4 = NULL;
+  tempv4 = N_VClone(vec_tmpl); 
+  if (tempv4 == NULL){
+    DestroyMat(pdata->PP);
+    DestroyArray(pdata->lpivots);
+    free(pdata); pdata = NULL;
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDABBDPRE", "IDABBDPrecInit", MSGBBD_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+  pdata->tempv4 = tempv4;
+  
+  /* Set rel_yy based on input value dq_rel_yy (0 implies default). */
+  pdata->rel_yy = (dq_rel_yy > ZERO) ? dq_rel_yy : SUNRsqrt(uround); 
+
+  /* Store Nlocal to be used in IDABBDPrecSetup */
+  pdata->n_local = Nlocal;
+  
+  /* Set work space sizes and initialize nge. */
+  pdata->rpwsize = Nlocal*(mlk + storage_mu + 1);
+  pdata->ipwsize = Nlocal;
+  pdata->nge = 0;
+
+  /* make sure s_P_data is free from any previous allocations */
+  if (idaspils_mem->s_pfree != NULL) {
+    idaspils_mem->s_pfree(IDA_mem);
+  }
+
+  /* Point to the new pdata field in the SPILS memory */
+  idaspils_mem->s_pdata = pdata;
+
+  /* Attach the pfree function */
+  idaspils_mem->s_pfree = IDABBDPrecFree;
+
+  /* Attach preconditioner solve and setup functions */
+  flag = IDASpilsSetPreconditioner(ida_mem, IDABBDPrecSetup, IDABBDPrecSolve);
+
+  return(flag);
+}
+
+int IDABBDPrecReInit(void *ida_mem,
+		     long int mudq, long int mldq, 
+		     realtype dq_rel_yy)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  IBBDPrecData pdata;
+  long int Nlocal;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDABBDPRE", "IDABBDPrecReInit", MSGBBD_MEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDABBDPRE", "IDABBDPrecReInit", MSGBBD_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) IDA_mem->ida_lmem;
+
+  /* Test if the preconditioner data is non-NULL */
+  if (idaspils_mem->s_pdata == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_PMEM_NULL, "IDABBDPRE", "IDABBDPrecReInit", MSGBBD_PMEM_NULL);
+    return(IDASPILS_PMEM_NULL);
+  } 
+  pdata = (IBBDPrecData) idaspils_mem->s_pdata;
+
+  /* Load half-bandwidths. */
+  Nlocal = pdata->n_local;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0, mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0, mldq));
+
+  /* Set rel_yy based on input value dq_rel_yy (0 implies default). */
+  pdata->rel_yy = (dq_rel_yy > ZERO) ? dq_rel_yy : SUNRsqrt(uround); 
+
+  /* Re-initialize nge */
+  pdata->nge = 0;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDABBDPrecGetWorkSpace(void *ida_mem, long int *lenrwBBDP, long int *leniwBBDP)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  IBBDPrecData pdata;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDABBDPRE", "IDABBDPrecGetWorkSpace", MSGBBD_MEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDABBDPRE", "IDABBDPrecGetWorkSpace", MSGBBD_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) IDA_mem->ida_lmem;
+
+  if (idaspils_mem->s_pdata == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_PMEM_NULL, "IDABBDPRE", "IDABBDPrecGetWorkSpace", MSGBBD_PMEM_NULL);
+    return(IDASPILS_PMEM_NULL);
+  } 
+  pdata = (IBBDPrecData) idaspils_mem->s_pdata;
+
+  *lenrwBBDP = pdata->rpwsize;
+  *leniwBBDP = pdata->ipwsize;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDABBDPrecGetNumGfnEvals(void *ida_mem, long int *ngevalsBBDP)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  IBBDPrecData pdata;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDABBDPRE", "IDABBDPrecGetNumGfnEvals", MSGBBD_MEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDABBDPRE", "IDABBDPrecGetNumGfnEvals", MSGBBD_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) IDA_mem->ida_lmem;
+
+  if (idaspils_mem->s_pdata == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_PMEM_NULL, "IDABBDPRE", "IDABBDPrecGetNumGfnEvals", MSGBBD_PMEM_NULL);
+    return(IDASPILS_PMEM_NULL);
+  } 
+  pdata = (IBBDPrecData) idaspils_mem->s_pdata;
+
+  *ngevalsBBDP = pdata->nge;
+
+  return(IDASPILS_SUCCESS);
+}
+
+
+/* Readability Replacements */
+
+#define Nlocal  (pdata->n_local)
+#define mudq    (pdata->mudq)
+#define mldq    (pdata->mldq)
+#define mukeep  (pdata->mukeep)
+#define mlkeep  (pdata->mlkeep)
+#define glocal  (pdata->glocal)
+#define gcomm   (pdata->gcomm)
+#define lpivots (pdata->lpivots)
+#define PP      (pdata->PP)
+#define tempv4  (pdata->tempv4)
+#define nge     (pdata->nge)
+#define rel_yy  (pdata->rel_yy)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDABBDPrecSetup                                     
+ * -----------------------------------------------------------------
+ * IDABBDPrecSetup generates a band-block-diagonal preconditioner
+ * matrix, where the local block (on this processor) is a band
+ * matrix. Each local block is computed by a difference quotient
+ * scheme via calls to the user-supplied routines glocal, gcomm.
+ * After generating the block in the band matrix PP, this routine
+ * does an LU factorization in place in PP.
+ *
+ * The IDABBDPrecSetup parameters used here are as follows:
+ *
+ * tt is the current value of the independent variable t.
+ *
+ * yy is the current value of the dependent variable vector,
+ *    namely the predicted value of y(t).
+ *
+ * yp is the current value of the derivative vector y',
+ *    namely the predicted value of y'(t).
+ *
+ * c_j is the scalar in the system Jacobian, proportional to 1/hh.
+ *
+ * bbd_data is the pointer to BBD data set by IDABBDInit.
+ *
+ * tmp1, tmp2, tmp3 are pointers to vectors of type
+ *                  N_Vector, used for temporary storage or
+ *                  work space.
+ *
+ * The arguments Neq, rr, res, uround, and nrePtr are not used.
+ *
+ * Return value:
+ * The value returned by this IDABBDPrecSetup function is a int
+ * flag indicating whether it was successful. This value is
+ *    0    if successful,
+ *  > 0    for a recoverable error (step will be retried), or
+ *  < 0    for a nonrecoverable error (step fails).
+ * -----------------------------------------------------------------
+ */
+
+static int IDABBDPrecSetup(realtype tt,
+                           N_Vector yy, N_Vector yp, N_Vector rr,
+                           realtype c_j, void *bbd_data,
+                           N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+  int retval;
+  long int ier;
+  IBBDPrecData pdata;
+  IDAMem IDA_mem;
+
+  pdata =(IBBDPrecData) bbd_data;
+
+  IDA_mem = (IDAMem) pdata->ida_mem;
+
+  /* Call IBBDDQJac for a new Jacobian calculation and store in PP. */
+  SetToZero(PP);
+  retval = IBBDDQJac(pdata, tt, c_j, yy, yp,
+                     tempv1, tempv2, tempv3, tempv4);
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, -1, "IDABBDPRE", "IDABBDPrecSetup", MSGBBD_FUNC_FAILED);
+    return(-1);
+  }
+  if (retval > 0) {
+    return(+1);
+  } 
+ 
+  /* Do LU factorization of preconditioner block in place (in PP). */
+  ier = BandGBTRF(PP, lpivots);
+
+  /* Return 0 if the LU was complete, or +1 otherwise. */
+  if (ier > 0) return(+1);
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDABBDPrecSolve
+ * -----------------------------------------------------------------
+ * The function IDABBDPrecSolve computes a solution to the linear
+ * system P z = r, where P is the left preconditioner defined by
+ * the routine IDABBDPrecSetup.
+ *
+ * The IDABBDPrecSolve parameters used here are as follows:
+ *
+ * rvec is the input right-hand side vector r.
+ *
+ * zvec is the computed solution vector z.
+ *
+ * bbd_data is the pointer to BBD data set by IDABBDInit.
+ *
+ * The arguments tt, yy, yp, rr, c_j, delta, and tmp are NOT used.
+ *
+ * IDABBDPrecSolve always returns 0, indicating success.
+ * -----------------------------------------------------------------
+ */
+
+static int IDABBDPrecSolve(realtype tt,
+                           N_Vector yy, N_Vector yp, N_Vector rr,
+                           N_Vector rvec, N_Vector zvec,
+                           realtype c_j, realtype delta, void *bbd_data,
+                           N_Vector tmp)
+{
+  IBBDPrecData pdata;
+  realtype *zd;
+
+  pdata = (IBBDPrecData) bbd_data;
+
+  /* Copy rvec to zvec, do the backsolve, and return. */
+  N_VScale(ONE, rvec, zvec);
+
+  zd = N_VGetArrayPointer(zvec);
+
+  BandGBTRS(PP, lpivots, zd);
+
+  return(0);
+}
+
+
+static int IDABBDPrecFree(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  IBBDPrecData pdata;
+  
+  if (IDA_mem->ida_lmem == NULL) return(0);
+  idaspils_mem = (IDASpilsMem) IDA_mem->ida_lmem;
+  
+  if (idaspils_mem->s_pdata == NULL) return(0);
+  pdata = (IBBDPrecData) idaspils_mem->s_pdata;
+
+  DestroyMat(PP);
+  DestroyArray(lpivots);
+  N_VDestroy(tempv4);
+
+  free(pdata);
+  pdata = NULL;
+
+  return(0);
+}
+
+
+#define ewt         (IDA_mem->ida_ewt)
+#define user_data   (IDA_mem->ida_user_data)
+#define hh          (IDA_mem->ida_hh)
+#define constraints (IDA_mem->ida_constraints)
+
+/*
+ * -----------------------------------------------------------------
+ * IBBDDQJac
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation
+ * to the local block of the Jacobian of G(t,y,y'). It assumes that
+ * a band matrix of type BandMat is stored column-wise, and that
+ * elements within each column are contiguous.
+ *
+ * All matrix elements are generated as difference quotients, by way
+ * of calls to the user routine glocal. By virtue of the band
+ * structure, the number of these calls is bandwidth + 1, where
+ * bandwidth = mldq + mudq + 1. But the band matrix kept has
+ * bandwidth = mlkeep + mukeep + 1. This routine also assumes that
+ * the local elements of a vector are stored contiguously.
+ *
+ * Return values are: 0 (success), > 0 (recoverable error),
+ * or < 0 (nonrecoverable error).
+ * -----------------------------------------------------------------
+ */
+
+static int IBBDDQJac(IBBDPrecData pdata, realtype tt, realtype cj,
+                     N_Vector yy, N_Vector yp, N_Vector gref, 
+                     N_Vector ytemp, N_Vector yptemp, N_Vector gtemp)
+{
+  IDAMem IDA_mem;
+  realtype inc, inc_inv;
+  int retval;
+  long int group, i, j, width, ngroups, i1, i2;
+  realtype *ydata, *ypdata, *ytempdata, *yptempdata, *grefdata, *gtempdata;
+  realtype *cnsdata = NULL, *ewtdata;
+  realtype *col_j, conj, yj, ypj, ewtj;
+
+  IDA_mem = (IDAMem) pdata->ida_mem;
+
+  /* Initialize ytemp and yptemp. */
+
+  N_VScale(ONE, yy, ytemp);
+  N_VScale(ONE, yp, yptemp);
+
+  /* Obtain pointers as required to the data array of vectors. */
+
+  ydata     = N_VGetArrayPointer(yy);
+  ypdata    = N_VGetArrayPointer(yp);
+  gtempdata = N_VGetArrayPointer(gtemp);
+  ewtdata   = N_VGetArrayPointer(ewt);
+  if (constraints != NULL) 
+    cnsdata = N_VGetArrayPointer(constraints);
+  ytempdata = N_VGetArrayPointer(ytemp);
+  yptempdata= N_VGetArrayPointer(yptemp);
+  grefdata = N_VGetArrayPointer(gref);
+
+  /* Call gcomm and glocal to get base value of G(t,y,y'). */
+
+  if (gcomm != NULL) {
+    retval = gcomm(Nlocal, tt, yy, yp, user_data);
+    if (retval != 0) return(retval);
+  }
+
+  retval = glocal(Nlocal, tt, yy, yp, gref, user_data); 
+  nge++;
+  if (retval != 0) return(retval);
+
+
+  /* Set bandwidth and number of column groups for band differencing. */
+
+  width = mldq + mudq + 1;
+  ngroups = SUNMIN(width, Nlocal);
+
+  /* Loop over groups. */
+  for(group = 1; group <= ngroups; group++) {
+    
+    /* Loop over the components in this group. */
+    for(j = group-1; j < Nlocal; j += width) {
+      yj = ydata[j];
+      ypj = ypdata[j];
+      ewtj = ewtdata[j];
+      
+      /* Set increment inc to yj based on rel_yy*abs(yj), with
+         adjustments using ypj and ewtj if this is small, and a further
+         adjustment to give it the same sign as hh*ypj. */
+      inc = rel_yy*SUNMAX(SUNRabs(yj), SUNMAX( SUNRabs(hh*ypj), ONE/ewtj));
+      if (hh*ypj < ZERO) inc = -inc;
+      inc = (yj + inc) - yj;
+      
+      /* Adjust sign(inc) again if yj has an inequality constraint. */
+      if (constraints != NULL) {
+        conj = cnsdata[j];
+        if (SUNRabs(conj) == ONE)      {if ((yj+inc)*conj <  ZERO) inc = -inc;}
+        else if (SUNRabs(conj) == TWO) {if ((yj+inc)*conj <= ZERO) inc = -inc;}
+      }
+
+      /* Increment yj and ypj. */
+      ytempdata[j] += inc;
+      yptempdata[j] += cj*inc;
+      
+    }
+
+    /* Evaluate G with incremented y and yp arguments. */
+
+    retval = glocal(Nlocal, tt, ytemp, yptemp, gtemp, user_data); 
+    nge++;
+    if (retval != 0) return(retval);
+
+    /* Loop over components of the group again; restore ytemp and yptemp. */
+    for(j = group-1; j < Nlocal; j += width) {
+      yj  = ytempdata[j]  = ydata[j];
+      ypj = yptempdata[j] = ypdata[j];
+      ewtj = ewtdata[j];
+
+      /* Set increment inc as before .*/
+      inc = rel_yy*SUNMAX(SUNRabs(yj), SUNMAX( SUNRabs(hh*ypj), ONE/ewtj));
+      if (hh*ypj < ZERO) inc = -inc;
+      inc = (yj + inc) - yj;
+      if (constraints != NULL) {
+        conj = cnsdata[j];
+        if (SUNRabs(conj) == ONE)      {if ((yj+inc)*conj <  ZERO) inc = -inc;}
+        else if (SUNRabs(conj) == TWO) {if ((yj+inc)*conj <= ZERO) inc = -inc;}
+      }
+
+      /* Form difference quotients and load into PP. */
+      inc_inv = ONE/inc;
+      col_j = BAND_COL(PP,j);
+      i1 = SUNMAX(0, j-mukeep);
+      i2 = SUNMIN(j+mlkeep, Nlocal-1);
+      for(i = i1; i <= i2; i++) BAND_COL_ELEM(col_j,i,j) =
+                                  inc_inv * (gtempdata[i] - grefdata[i]);
+    }
+  }
+  
+  return(0);
+}
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/* Readability replacements */
+
+#define yyTmp       (IDAADJ_mem->ia_yyTmp)
+#define ypTmp       (IDAADJ_mem->ia_ypTmp)
+#define noInterp    (IDAADJ_mem->ia_noInterp)
+
+/* 
+ * ----------------------------------------------------------------
+ * User-callable functions
+ * ----------------------------------------------------------------
+ */
+
+int IDABBDPrecInitB(void *ida_mem, int which, long int NlocalB,
+                     long int mudqB, long int mldqB,
+                     long int mukeepB, long int mlkeepB,
+                     realtype dq_rel_yyB,
+                     IDABBDLocalFnB glocalB, IDABBDCommFnB gcommB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDABBDPrecDataB idabbdB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDABBDPRE", "IDABBDPrecInitB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDABBDPRE", "IDABBDPrecInitB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDABBDPRE", "IDABBDPrecInitB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  /* Initialize the BBD preconditioner for this backward problem. */
+  flag = IDABBDPrecInit(ida_memB, NlocalB, 
+                        mudqB, mldqB,
+                        mukeepB, mlkeepB, 
+                        dq_rel_yyB, 
+                        IDAAglocal, IDAAgcomm);
+  if (flag != IDA_SUCCESS) return(flag);
+
+  /* Allocate memory for IDABBDPrecDataB to store the user-provided
+   * functions which will be called from the wrappers */
+  idabbdB_mem = NULL;
+  idabbdB_mem = (IDABBDPrecDataB) malloc(sizeof(* idabbdB_mem));
+  if (idabbdB_mem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDABBDPRE", "IDABBDPrecInitB", MSGBBD_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  idabbdB_mem->glocalB = glocalB;
+  idabbdB_mem->gcommB  = gcommB;
+
+
+  /* Attach pmem */
+  IDAB_mem->ida_pmem  = idabbdB_mem;
+  /* Attach deallocation routine pfree. */
+  IDAB_mem->ida_pfree = IDABBDPrecFreeB;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDABBDPrecReInitB(void *ida_mem, int which,
+                      long int mudqB, long int mldqB, realtype dq_rel_yyB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDABBDPRE", "IDABBDPrecReInitB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDABBDPRE", "IDABBDPrecReInitB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDABBDPRE", "IDABBDPrecReInitB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' backward problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  flag = IDABBDPrecReInit(ida_memB, mudqB, mldqB, dq_rel_yyB);
+  return(flag);
+}
+
+static int IDABBDPrecFreeB(IDABMem IDAB_mem)
+{
+  free(IDAB_mem->ida_pmem);
+  IDAB_mem->ida_pmem = NULL;
+  return(0);
+}
+
+/* 
+ * ----------------------------------------------------------------
+ * Wrapper functions
+ * ----------------------------------------------------------------
+ */
+
+/*
+ * IDAAglocal
+ *
+ * This routine interfaces to the IDALocalFnB routine 
+ * provided by the user.
+ */
+
+static int IDAAglocal(long int NlocalB, realtype tt,
+                      N_Vector yyB, N_Vector ypB, N_Vector gvalB,
+                      void *ida_mem)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDABBDPrecDataB idabbdB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  
+  /* Get current backward problem. */
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+
+  /* Get the preconditioner's memory. */
+  idabbdB_mem = (IDABBDPrecDataB) IDAB_mem->ida_pmem;
+
+  /* Get forward solution from interpolation. */
+  if (noInterp == FALSE) {
+    flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDA_mem, -1, "IDABBDPRE", "IDAAglocal", MSGBBD_BAD_T);
+      return(-1);
+    } 
+  }
+  /* Call user's adjoint LocalFnB function. */
+  return idabbdB_mem->glocalB(NlocalB, tt, 
+                              yyTmp, ypTmp, 
+                              yyB, ypB, gvalB, 
+                              IDAB_mem->ida_user_data);
+
+}
+
+/*
+ * IDAAgcomm
+ *
+ * This routine interfaces to the IDACommFnB routine 
+ * provided by the user.
+ */
+static int IDAAgcomm(long int NlocalB, realtype tt,
+                     N_Vector yyB, N_Vector ypB,
+                     void *ida_mem)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDABBDPrecDataB idabbdB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  
+  /* Get current backward problem. */
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+
+  /* Get the preconditioner's memory. */
+  idabbdB_mem = (IDABBDPrecDataB) IDAB_mem->ida_pmem;
+  if (idabbdB_mem->gcommB == NULL) return(0);
+
+  /* Get forward solution from interpolation. */
+  if (noInterp == FALSE) {
+    flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDA_mem, -1, "IDABBDPRE", "IDAAgcomm", MSGBBD_BAD_T);
+      return(-1);
+    } 
+  }
+
+  /* Call user's adjoint CommFnB routine */
+  return idabbdB_mem->gcommB(NlocalB, tt, yyTmp, 
+                             ypTmp, yyB, ypB, 
+                             IDAB_mem->ida_user_data);
+}
diff --git a/src/idas/idas_bbdpre_impl.h b/src/idas/idas_bbdpre_impl.h
new file mode 100644
index 0000000..9c05f4c
--- /dev/null
+++ b/src/idas/idas_bbdpre_impl.h
@@ -0,0 +1,115 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file (private version) for the IDABBDPRE
+ * module, for a band-block-diagonal preconditioner, i.e. a
+ * block-diagonal matrix with banded blocks, for use with IDAS
+ * and an IDASPILS linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASBBDPRE_IMPL_H
+#define _IDASBBDPRE_IMPL_H
+
+#include <idas/idas_bbdpre.h>
+#include <sundials/sundials_band.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Definition of IBBDPrecData
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IBBDPrecDataRec {
+
+  /* passed by user to IDABBDPrecAlloc and used by
+     IDABBDPrecSetup/IDABBDPrecSolve functions */
+
+  long int mudq, mldq, mukeep, mlkeep;
+  realtype rel_yy;
+  IDABBDLocalFn glocal;
+  IDABBDCommFn gcomm;
+
+  /* allocated for use by IDABBDPrecSetup */
+
+  N_Vector tempv4;
+
+  /* set by IDABBDPrecon and used by IDABBDPrecSolve */
+
+  DlsMat PP;
+  long int *lpivots;
+
+  /* set by IDABBDPrecAlloc and used by IDABBDPrecSetup */
+
+  long int n_local;
+
+  /* available for optional output */
+
+  long int rpwsize;
+  long int ipwsize;
+  long int nge;
+
+  /* pointer to ida_mem */
+
+  void *ida_mem;
+
+} *IBBDPrecData;
+
+/*
+ * -----------------------------------------------------------------
+ * Type: IDABBDPrecDataB
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDABBDPrecDataRecB{
+
+  /* BBD user functions (glocB and cfnB) for backward run */
+  IDABBDLocalFnB glocalB;
+  IDABBDCommFnB  gcommB;
+    
+  /* BBD prec data */
+  /* //!void *bbd_dataB; */
+
+} *IDABBDPrecDataB;
+
+
+/*
+ * -----------------------------------------------------------------
+ * IDABBDPRE error messages
+ * -----------------------------------------------------------------
+ */
+
+#define MSGBBD_MEM_NULL    "Integrator memory is NULL."
+#define MSGBBD_LMEM_NULL   "Linear solver memory is NULL. One of the SPILS linear solvers must be attached."
+#define MSGBBD_MEM_FAIL    "A memory request failed."
+#define MSGBBD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGBBD_PMEM_NULL   "BBD peconditioner memory is NULL. IDABBDPrecInit must be called."
+#define MSGBBD_FUNC_FAILED "The Glocal or Gcomm routine failed in an unrecoverable manner."
+
+#define MSGBBD_AMEM_NULL   "idaadj_mem = NULL illegal."
+#define MSGBBD_PDATAB_NULL "IDABBDPRE memory is NULL for the backward integration."
+#define MSGBBD_BAD_T       "Bad t for interpolation."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/idas/idas_dense.c b/src/idas/idas_dense.c
new file mode 100644
index 0000000..ed02e2b
--- /dev/null
+++ b/src/idas/idas_dense.c
@@ -0,0 +1,410 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4909 $
+ * $Date: 2016-09-14 16:51:27 -0700 (Wed, 14 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDASDENSE linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <idas/idas_dense.h>
+#include "idas_direct_impl.h"
+#include "idas_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* IDASDENSE linit, lsetup, lsolve, and lfree routines */
+ 
+static int IDADenseInit(IDAMem IDA_mem);
+
+static int IDADenseSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+                         N_Vector rrp, N_Vector tmp1,
+                         N_Vector tmp2, N_Vector tmp3);
+
+static int IDADenseSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                         N_Vector ycur, N_Vector ypcur, N_Vector rrcur);
+
+static int IDADenseFree(IDAMem IDA_mem);
+
+/* IDADENSE lfreeB function */
+
+static int IDADenseFreeB(IDABMem IDAB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define res          (IDA_mem->ida_res)
+#define tn           (IDA_mem->ida_tn)
+#define hh           (IDA_mem->ida_hh)
+#define cj           (IDA_mem->ida_cj)
+#define cjratio      (IDA_mem->ida_cjratio)
+#define ewt          (IDA_mem->ida_ewt)
+#define constraints  (IDA_mem->ida_constraints)
+#define linit        (IDA_mem->ida_linit)
+#define lsetup       (IDA_mem->ida_lsetup)
+#define lsolve       (IDA_mem->ida_lsolve)
+#define lperf        (IDA_mem->ida_lperf)
+#define lfree        (IDA_mem->ida_lfree)
+#define lmem         (IDA_mem->ida_lmem)
+#define setupNonNull (IDA_mem->ida_setupNonNull)
+#define vec_tmpl     (IDA_mem->ida_tempv1)
+
+#define mtype        (idadls_mem->d_type)
+#define neq          (idadls_mem->d_n)
+#define jacDQ        (idadls_mem->d_jacDQ)
+#define djac         (idadls_mem->d_djac)
+#define JJ           (idadls_mem->d_J)
+#define lpivots      (idadls_mem->d_lpivots)
+#define nje          (idadls_mem->d_nje)
+#define nreDQ        (idadls_mem->d_nreDQ)
+#define jacdata      (idadls_mem->d_J_data)
+#define last_flag    (idadls_mem->d_last_flag)
+                  
+/*
+ * -----------------------------------------------------------------
+ * IDADense
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDADENSE linear solver module.  
+ * IDADense first calls the existing lfree routine if this is not NULL.
+ * Then it sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDADenseInit, IDADenseSetup,
+ * IDADenseSolve, NULL, and IDADenseFree, respectively.
+ * It allocates memory for a structure of type IDADlsMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem) to TRUE, sets the d_jdata field
+ * in the IDADlsMemRec structure to be the input parameter jdata,
+ * and sets the d_jac field to be:
+ *   (1) the input parameter djac, if djac != NULL, or                
+ *   (2) IDADenseDQJac, if djac == NULL.                             
+ * Finally, it allocates memory for JJ and lpivots.
+ * The return value is IDADLS_SUCCESS = 0, IDADLS_LMEM_FAIL = -1,
+ * or IDADLS_ILL_INPUT = -2.
+ *
+ * NOTE: The dense linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDADense will first 
+ *       test for a compatible N_Vector internal
+ *       representation by checking that the functions N_VGetArrayPointer
+ *       and N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+int IDADense(void *ida_mem, long int Neq)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDENSE", "IDADense", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the DENSE solver */
+  if(vec_tmpl->ops->nvgetarraypointer == NULL ||
+     vec_tmpl->ops->nvsetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASDENSE", "IDADense", MSGD_BAD_NVECTOR);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(IDA_mem);
+
+  /* Set five main function fields in IDA_mem. */
+  linit  = IDADenseInit;
+  lsetup = IDADenseSetup;
+  lsolve = IDADenseSolve;
+  lperf  = NULL;
+  lfree  = IDADenseFree;
+
+  /* Get memory for IDADlsMemRec. */
+  idadls_mem = NULL;
+  idadls_mem = (IDADlsMem) malloc(sizeof(struct IDADlsMemRec));
+  if (idadls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASDENSE", "IDADense", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_DENSE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ   = TRUE;
+  djac    = NULL;
+  jacdata = NULL;
+
+  last_flag = IDADLS_SUCCESS;
+
+  idaDlsInitializeCounters(idadls_mem); 
+
+  setupNonNull = TRUE;
+
+  /* Store problem size */
+  neq = Neq;
+
+  /* Allocate memory for JJ and pivot array. */
+  JJ = NULL;
+  JJ = NewDenseMat(Neq, Neq);
+  if (JJ == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASDENSE", "IDADense", MSGD_MEM_FAIL);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+
+  lpivots = NULL;
+  lpivots = NewLintArray(Neq);
+  if (lpivots == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASDENSE", "IDADense", MSGD_MEM_FAIL);
+    DestroyMat(JJ);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to the integrator memory */
+  lmem = idadls_mem;
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDADENSE interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the IDADENSE
+  linear solver module.  It returns 0.
+*/
+
+static int IDADenseInit(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+  
+  idadls_mem = (IDADlsMem) lmem;
+
+  idaDlsInitializeCounters(idadls_mem); 
+
+  if (jacDQ) {
+    djac = idaDlsDenseDQJac;
+    jacdata = IDA_mem;
+  } else {
+    jacdata = IDA_mem->ida_user_data;
+  }
+  
+  last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the IDADENSE linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the dense LU factorization routine.
+  The return value is either
+     IDADLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int IDADenseSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+                         N_Vector rrp, N_Vector tmp1, N_Vector tmp2,
+                         N_Vector tmp3)
+{
+  int retval;
+  long int retfac;
+  IDADlsMem idadls_mem;
+  
+  idadls_mem = (IDADlsMem) lmem;
+
+  /* Increment nje counter. */
+  nje++;
+
+  /* Zero out JJ; call Jacobian routine jac; return if it failed. */
+  SetToZero(JJ);
+  retval = djac(neq, tn, cj, yyp, ypp, rrp, JJ, jacdata, 
+                tmp1, tmp2, tmp3);
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDADLS_JACFUNC_UNRECVR, "IDASDENSE", "IDADenseSetup", MSGD_JACFUNC_FAILED);
+    last_flag = IDADLS_JACFUNC_UNRECVR;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = IDADLS_JACFUNC_RECVR;
+    return(+1);
+  }
+
+  /* Do LU factorization of JJ; return success or fail flag. */
+  retfac = DenseGETRF(JJ, lpivots);
+
+  if (retfac != 0) {
+    last_flag = retfac;
+    return(+1);
+  }
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the IDADENSE linear
+  solver module.  It calls the dense backsolve routine, scales the
+  solution vector according to cjratio, then returns IDADLS_SUCCESS = 0.
+*/
+
+static int IDADenseSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                         N_Vector ycur, N_Vector ypcur, N_Vector rrcur)
+{
+  IDADlsMem idadls_mem;
+  realtype *bd;
+  
+  idadls_mem = (IDADlsMem) lmem;
+  
+  bd = N_VGetArrayPointer(b);
+
+  DenseGETRS(JJ, lpivots, bd);
+
+  /* Scale the correction to account for change in cj. */
+  if (cjratio != ONE) N_VScale(TWO/(ONE + cjratio), b, b);
+
+  last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine frees memory specific to the IDADENSE linear solver.
+*/
+
+static int IDADenseFree(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  DestroyMat(JJ);
+  DestroyArray(lpivots);
+  free(lmem); lmem = NULL;
+
+  return(0);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * IDADenseB is a wrapper around IDADense.
+ */
+
+int IDADenseB(void *ida_mem, int which, long int NeqB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDENSE", "IDADenseB", MSGD_CAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDADLS_NO_ADJ, "IDASDENSE", "IDADenseB",  MSGD_NO_ADJ);
+    return(IDADLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASDENSE", "IDADenseB", MSGD_BAD_WHICH);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Alloc memory for IDADlsMemRecB */
+  idadlsB_mem = (IDADlsMemB) malloc(sizeof(struct IDADlsMemRecB));
+  if (idadlsB_mem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDADLS_MEM_FAIL, "IDASDENSE", "IDADenseB", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  
+  }
+
+  /* Set matrix type and initialize Jac function. */
+  idadlsB_mem->d_typeB = SUNDIALS_DENSE;
+  idadlsB_mem->d_bjacB = NULL;
+
+  /* Attach lmemB data and lfreeB function. */
+  IDAB_mem->ida_lmem  = idadlsB_mem;
+  IDAB_mem->ida_lfree = IDADenseFreeB;
+
+  /* Call IDADense to attach the IDADENSE linear solver. */
+  ida_memB = (void *)IDAB_mem->IDA_mem;
+  flag = IDADense(ida_memB, NeqB);
+
+  if (flag != IDADLS_SUCCESS) {
+    free(idadlsB_mem);
+    idadlsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * IDADenseFreeB frees the linear solver's memory for that backward problem passed 
+ * as argument. 
+ */
+
+static int IDADenseFreeB(IDABMem IDAB_mem)
+{
+  IDADlsMemB idadlsB_mem;
+
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  free(idadlsB_mem);
+
+  return(0);
+}
+
diff --git a/src/idas/idas_direct.c b/src/idas/idas_direct.c
new file mode 100644
index 0000000..033d6b3
--- /dev/null
+++ b/src/idas/idas_direct.c
@@ -0,0 +1,1044 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for an IDASDLS linear solver.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "idas_impl.h"
+#include "idas_direct_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PROTOTYPES FOR PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+static int idaDlsDenseJacBWrapper(long int NeqB, realtype tt, realtype c_jB,
+                                  N_Vector yyB, N_Vector ypB, N_Vector rBr, 
+                                  DlsMat JacB, void *ida_mem,
+                                  N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+static int idaDlsDenseJacBSWrapper(long int NeqB, realtype tt, realtype c_jB,
+                                   N_Vector yyB, N_Vector ypB, N_Vector rBr, 
+                                   DlsMat JacB, void *ida_mem,
+                                   N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+static int idaDlsBandJacBWrapper(long int NeqB, long int mupperB, long int mlowerB,
+                                 realtype tt, realtype c_jB, 
+                                 N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                 DlsMat JacB, void *ida_mem,
+                                 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+static int idaDlsBandJacBSWrapper(long int NeqB, long int mupperB, long int mlowerB,
+                                  realtype tt, realtype c_jB, 
+                                  N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                  DlsMat JacB, void *ida_mem,
+                                  N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define res            (IDA_mem->ida_res)
+#define user_data      (IDA_mem->ida_user_data)
+#define uround         (IDA_mem->ida_uround)
+#define nst            (IDA_mem->ida_nst)
+#define tn             (IDA_mem->ida_tn)
+#define hh             (IDA_mem->ida_hh)
+#define cj             (IDA_mem->ida_cj)
+#define cjratio        (IDA_mem->ida_cjratio)
+#define ewt            (IDA_mem->ida_ewt)
+#define constraints    (IDA_mem->ida_constraints)
+
+#define linit          (IDA_mem->ida_linit)
+#define lsetup         (IDA_mem->ida_lsetup)
+#define lsolve         (IDA_mem->ida_lsolve)
+#define lfree          (IDA_mem->ida_lfree)
+#define lperf          (IDA_mem->ida_lperf)
+#define lmem           (IDA_mem->ida_lmem)
+#define tempv          (IDA_mem->ida_tempv1)
+#define setupNonNull   (IDA_mem->ida_setupNonNull)
+
+#define mtype          (idadls_mem->d_type)
+#define n              (idadls_mem->d_n)
+#define ml             (idadls_mem->d_ml)
+#define mu             (idadls_mem->d_mu)
+#define smu            (idadls_mem->d_smu)
+#define jacDQ          (idadls_mem->d_jacDQ)
+#define djac           (idadls_mem->d_djac)
+#define bjac           (idadls_mem->d_bjac)
+#define M              (idadls_mem->d_J)
+#define pivots         (idadls_mem->d_pivots)
+#define nje            (idadls_mem->d_nje)
+#define nreDQ          (idadls_mem->d_nreDQ)
+#define last_flag      (idadls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS FOR IMPLICIT INTEGRATION
+ * =================================================================
+ */
+              
+/*
+ * IDADlsSetDenseJacFn specifies the dense Jacobian function.
+ */
+int IDADlsSetDenseJacFn(void *ida_mem, IDADlsDenseJacFn jac)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsSetDenseJacFn", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDASDLS", "IDADlsSetDenseJacFn", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  if (jac != NULL) {
+    jacDQ = FALSE;
+    djac = jac;
+  } else {
+    jacDQ = TRUE;
+  }
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * IDADlsSetBandJacFn specifies the band Jacobian function.
+ */
+int IDADlsSetBandJacFn(void *ida_mem, IDADlsBandJacFn jac)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsSetBandJacFn", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDASDLS", "IDADlsSetBandJacFn", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  if (jac != NULL) {
+    jacDQ = FALSE;
+    bjac = jac;
+  } else {
+    jacDQ = TRUE;
+  }
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * IDADlsGetWorkSpace returns the length of workspace allocated for the
+ * IDALAPACK linear solver.
+ */
+int IDADlsGetWorkSpace(void *ida_mem, long int *lenrwLS, long int *leniwLS)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsGetWorkSpace", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDASDLS", "IDADlsGetWorkSpace", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  if (mtype == SUNDIALS_DENSE) {
+    *lenrwLS = n*n;
+    *leniwLS = n;
+  } else if (mtype == SUNDIALS_BAND) {
+    *lenrwLS = n*(smu + ml + 1);
+    *leniwLS = n;
+  }
+    
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * IDADlsGetNumJacEvals returns the number of Jacobian evaluations.
+ */
+int IDADlsGetNumJacEvals(void *ida_mem, long int *njevals)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsGetNumJacEvals", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDASDLS", "IDADlsGetNumJacEvals", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  *njevals = nje;
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * IDADlsGetNumResEvals returns the number of calls to the DAE function
+ * needed for the DQ Jacobian approximation.
+ */
+int IDADlsGetNumResEvals(void *ida_mem, long int *nrevalsLS)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsGetNumFctEvals", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDASDLS", "IDADlsGetNumFctEvals", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  *nrevalsLS = nreDQ;
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * IDADlsGetReturnFlagName returns the name associated with a IDALAPACK
+ * return value.
+ */
+char *IDADlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case IDADLS_SUCCESS:
+    sprintf(name,"IDADLS_SUCCESS");
+    break;   
+  case IDADLS_MEM_NULL:
+    sprintf(name,"IDADLS_MEM_NULL");
+    break;
+  case IDADLS_LMEM_NULL:
+    sprintf(name,"IDADLS_LMEM_NULL");
+    break;
+  case IDADLS_ILL_INPUT:
+    sprintf(name,"IDADLS_ILL_INPUT");
+    break;
+  case IDADLS_MEM_FAIL:
+    sprintf(name,"IDADLS_MEM_FAIL");
+    break;
+  case IDADLS_JACFUNC_UNRECVR:
+    sprintf(name,"IDADLS_JACFUNC_UNRECVR");
+    break;
+  case IDADLS_JACFUNC_RECVR:
+    sprintf(name,"IDADLS_JACFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * IDADlsGetLastFlag returns the last flag set in a IDALAPACK function.
+ */
+int IDADlsGetLastFlag(void *ida_mem, long int *flag)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsGetLastFlag", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_LMEM_NULL, "IDASDLS", "IDADlsGetLastFlag", MSGD_LMEM_NULL);
+    return(IDADLS_LMEM_NULL);
+  }
+  idadls_mem = (IDADlsMem) lmem;
+
+  *flag = last_flag;
+
+  return(IDADLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * DQ JACOBIAN APPROXIMATIONS
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * idaDlsDenseDQJac 
+ * -----------------------------------------------------------------
+ * This routine generates a dense difference quotient approximation to
+ * the Jacobian F_y + c_j*F_y'. It assumes that a dense matrix of type
+ * DlsMat is stored column-wise, and that elements within each column
+ * are contiguous. The address of the jth column of J is obtained via
+ * the macro LAPACK_DENSE_COL and this pointer is associated with an N_Vector
+ * using the N_VGetArrayPointer/N_VSetArrayPointer functions. 
+ * Finally, the actual computation of the jth column of the Jacobian is 
+ * done with a call to N_VLinearSum.
+ * -----------------------------------------------------------------
+ */ 
+int idaDlsDenseDQJac(long int N, realtype tt, realtype c_j,
+                     N_Vector yy, N_Vector yp, N_Vector rr, 
+                     DlsMat Jac, void *data,
+                     N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype inc, inc_inv, yj, ypj, srur, conj;
+  realtype *tmp2_data, *y_data, *yp_data, *ewt_data, *cns_data = NULL;
+  N_Vector rtemp, jthCol;
+  long int j;
+  int retval = 0;
+
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* data points to IDA_mem */
+  IDA_mem = (IDAMem) data;
+  idadls_mem = (IDADlsMem) lmem;
+
+  /* Save pointer to the array in tmp2 */
+  tmp2_data = N_VGetArrayPointer(tmp2);
+
+  /* Rename work vectors for readibility */
+  rtemp  = tmp1;
+  jthCol = tmp2;
+
+  /* Obtain pointers to the data for ewt, yy, yp. */
+  ewt_data = N_VGetArrayPointer(ewt);
+  y_data   = N_VGetArrayPointer(yy);
+  yp_data  = N_VGetArrayPointer(yp);
+  if(constraints!=NULL) cns_data = N_VGetArrayPointer(constraints);
+
+  srur = SUNRsqrt(uround);
+
+  for (j=0; j < N; j++) {
+
+    /* Generate the jth col of J(tt,yy,yp) as delta(F)/delta(y_j). */
+
+    /* Set data address of jthCol, and save y_j and yp_j values. */
+    N_VSetArrayPointer(DENSE_COL(Jac,j), jthCol);
+    yj = y_data[j];
+    ypj = yp_data[j];
+
+    /* Set increment inc to y_j based on sqrt(uround)*abs(y_j), with
+    adjustments using yp_j and ewt_j if this is small, and a further
+    adjustment to give it the same sign as hh*yp_j. */
+
+    inc = SUNMAX( srur * SUNMAX( SUNRabs(yj), SUNRabs(hh*ypj) ) , ONE/ewt_data[j] );
+
+    if (hh*ypj < ZERO) inc = -inc;
+    inc = (yj + inc) - yj;
+
+    /* Adjust sign(inc) again if y_j has an inequality constraint. */
+    if (constraints != NULL) {
+      conj = cns_data[j];
+      if (SUNRabs(conj) == ONE)      {if((yj+inc)*conj <  ZERO) inc = -inc;}
+      else if (SUNRabs(conj) == TWO) {if((yj+inc)*conj <= ZERO) inc = -inc;}
+    }
+
+    /* Increment y_j and yp_j, call res, and break on error return. */
+    y_data[j] += inc;
+    yp_data[j] += c_j*inc;
+
+    retval = res(tt, yy, yp, rtemp, user_data);
+
+    nreDQ++;
+    if (retval != 0) break;
+
+    /* Construct difference quotient in jthCol */
+    inc_inv = ONE/inc;
+    N_VLinearSum(inc_inv, rtemp, -inc_inv, rr, jthCol);
+
+    DENSE_COL(Jac,j) = N_VGetArrayPointer(jthCol);
+
+    /*  reset y_j, yp_j */     
+    y_data[j] = yj;
+    yp_data[j] = ypj;
+  }
+
+  /* Restore original array pointer in tmp2 */
+  N_VSetArrayPointer(tmp2_data, tmp2);
+
+  return(retval);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * idaDlsBandDQJac 
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation JJ
+ * to the DAE system Jacobian J.  It assumes that a band matrix of type
+ * BandMat is stored column-wise, and that elements within each column
+ * are contiguous.  The address of the jth column of JJ is obtained via
+ * the macros BAND_COL and BAND_COL_ELEM. The columns of the Jacobian are 
+ * constructed using mupper + mlower + 1 calls to the res routine, and
+ * appropriate differencing.
+ * The return value is either IDABAND_SUCCESS = 0, or the nonzero value returned
+ * by the res routine, if any.
+ */
+
+int idaDlsBandDQJac(long int N, long int mupper, long int mlower,
+                    realtype tt, realtype c_j, 
+                    N_Vector yy, N_Vector yp, N_Vector rr,
+                    DlsMat Jac, void *data,
+                    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  realtype inc, inc_inv, yj, ypj, srur, conj, ewtj;
+  realtype *y_data, *yp_data, *ewt_data, *cns_data = NULL;
+  realtype *ytemp_data, *yptemp_data, *rtemp_data, *r_data, *col_j;
+  
+  N_Vector rtemp, ytemp, yptemp;
+  long int group, i, j, i1, i2, width, ngroups;
+  int retval = 0;
+
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* data points to IDA_mem */
+  IDA_mem = (IDAMem) data;
+  idadls_mem = (IDADlsMem) lmem;
+
+  rtemp = tmp1; /* Rename work vector for use as the perturbed residual. */
+
+  ytemp = tmp2; /* Rename work vector for use as a temporary for yy. */
+
+
+  yptemp= tmp3; /* Rename work vector for use as a temporary for yp. */
+
+  /* Obtain pointers to the data for all eight vectors used.  */
+
+  ewt_data = N_VGetArrayPointer(ewt);
+  r_data   = N_VGetArrayPointer(rr);
+  y_data   = N_VGetArrayPointer(yy);
+  yp_data  = N_VGetArrayPointer(yp);
+
+  rtemp_data  = N_VGetArrayPointer(rtemp);
+  ytemp_data  = N_VGetArrayPointer(ytemp);
+  yptemp_data = N_VGetArrayPointer(yptemp);
+
+  if (constraints != NULL) cns_data = N_VGetArrayPointer(constraints);
+
+  /* Initialize ytemp and yptemp. */
+
+  N_VScale(ONE, yy, ytemp);
+  N_VScale(ONE, yp, yptemp);
+
+  /* Compute miscellaneous values for the Jacobian computation. */
+
+  srur = SUNRsqrt(uround);
+  width = mlower + mupper + 1;
+  ngroups = SUNMIN(width, N);
+
+  /* Loop over column groups. */
+  for (group=1; group <= ngroups; group++) {
+
+    /* Increment all yy[j] and yp[j] for j in this group. */
+
+    for (j=group-1; j<N; j+=width) {
+        yj = y_data[j];
+        ypj = yp_data[j];
+        ewtj = ewt_data[j];
+
+        /* Set increment inc to yj based on sqrt(uround)*abs(yj), with
+        adjustments using ypj and ewtj if this is small, and a further
+        adjustment to give it the same sign as hh*ypj. */
+
+        inc = SUNMAX( srur * SUNMAX( SUNRabs(yj), SUNRabs(hh*ypj) ) , ONE/ewtj );
+
+        if (hh*ypj < ZERO) inc = -inc;
+        inc = (yj + inc) - yj;
+
+        /* Adjust sign(inc) again if yj has an inequality constraint. */
+
+        if (constraints != NULL) {
+          conj = cns_data[j];
+          if (SUNRabs(conj) == ONE)      {if((yj+inc)*conj <  ZERO) inc = -inc;}
+          else if (SUNRabs(conj) == TWO) {if((yj+inc)*conj <= ZERO) inc = -inc;}
+        }
+
+        /* Increment yj and ypj. */
+
+        ytemp_data[j] += inc;
+        yptemp_data[j] += cj*inc;
+    }
+
+    /* Call res routine with incremented arguments. */
+
+    retval = res(tt, ytemp, yptemp, rtemp, user_data);
+    nreDQ++;
+    if (retval != 0) break;
+
+    /* Loop over the indices j in this group again. */
+
+    for (j=group-1; j<N; j+=width) {
+
+      /* Reset ytemp and yptemp components that were perturbed. */
+
+      yj = ytemp_data[j]  = y_data[j];
+      ypj = yptemp_data[j] = yp_data[j];
+      col_j = BAND_COL(Jac, j);
+      ewtj = ewt_data[j];
+      
+      /* Set increment inc exactly as above. */
+
+      inc = SUNMAX( srur * SUNMAX( SUNRabs(yj), SUNRabs(hh*ypj) ) , ONE/ewtj );
+      if (hh*ypj < ZERO) inc = -inc;
+      inc = (yj + inc) - yj;
+      if (constraints != NULL) {
+        conj = cns_data[j];
+        if (SUNRabs(conj) == ONE)      {if((yj+inc)*conj <  ZERO) inc = -inc;}
+        else if (SUNRabs(conj) == TWO) {if((yj+inc)*conj <= ZERO) inc = -inc;}
+      }
+      
+      /* Load the difference quotient Jacobian elements for column j. */
+
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-mupper);
+      i2 = SUNMIN(j+mlower,N-1);
+      
+      for (i=i1; i<=i2; i++) 
+            BAND_COL_ELEM(col_j,i,j) = inc_inv*(rtemp_data[i]-r_data[i]);
+    }
+    
+  }
+  
+  return(retval);
+  
+}
+
+
+int idaDlsInitializeCounters(IDADlsMem idadls_mem)
+{
+  idadls_mem->d_nje   = 0;
+  idadls_mem->d_nreDQ = 0;
+  
+  return(0);
+}
+
+/* 
+ * =================================================================
+ * BACKWARD INTEGRATION SUPPORT
+ * =================================================================
+ */
+
+/* Additional readability replacements */
+#define yyTmp       (IDAADJ_mem->ia_yyTmp)
+#define ypTmp       (IDAADJ_mem->ia_ypTmp)
+#define yySTmp      (IDAADJ_mem->ia_yySTmp)
+#define ypSTmp      (IDAADJ_mem->ia_ypSTmp)
+#define noInterp    (IDAADJ_mem->ia_noInterp)
+#define interpSensi (IDAADJ_mem->ia_interpSensi)
+
+/*
+ * -----------------------------------------------------------------
+ * EXPORTED FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+int IDADlsSetDenseJacFnB(void *ida_mem, int which, IDADlsDenseJacFnB jacB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsSetDenseJacFnB", MSGD_CAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDADLS_NO_ADJ, "IDASDLS", "IDADlsSetDenseJacFnB",  MSGD_NO_ADJ);
+    return(IDADLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASDLS", "IDADlsSetDenseJacFnB", MSGD_BAD_WHICH);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+
+  if (IDAB_mem->ida_lmem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDADLS_LMEMB_NULL, 
+                    "IDASDLS", "IDADlsSetDenseJacFnB", MSGD_LMEMB_NULL);
+    return(IDADLS_LMEMB_NULL);
+  }
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  idadlsB_mem->d_djacB = jacB;
+
+  if (jacB != NULL) {
+    flag = IDADlsSetDenseJacFn(ida_memB, idaDlsDenseJacBWrapper);
+  } else {
+    flag = IDADlsSetDenseJacFn(ida_memB, NULL);
+  }
+
+  return(flag);
+}
+
+int IDADlsSetDenseJacFnBS(void *ida_mem, int which, IDADlsDenseJacFnBS jacBS)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsSetDenseJacFnBS", MSGD_CAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDADLS_NO_ADJ, "IDASDLS", "IDADlsSetDenseJacFnBS",  MSGD_NO_ADJ);
+    return(IDADLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASDLS", "IDADlsSetDenseJacFnBS", MSGD_BAD_WHICH);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+
+  if (IDAB_mem->ida_lmem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDADLS_LMEMB_NULL, 
+                    "IDASDLS", "IDADlsSetDenseJacFnBS", MSGD_LMEMB_NULL);
+    return(IDADLS_LMEMB_NULL);
+  }
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  idadlsB_mem->d_djacBS = jacBS;
+
+  if (jacBS != NULL) {
+    flag = IDADlsSetDenseJacFn(ida_memB, idaDlsDenseJacBSWrapper);
+  } else {
+    flag = IDADlsSetDenseJacFn(ida_memB, NULL);
+  }
+
+  return(flag);
+}
+
+int IDADlsSetBandJacFnB(void *ida_mem, int which, IDADlsBandJacFnB jacB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsSetBandJacFnB", MSGD_CAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDADLS_NO_ADJ, "IDASDLS", "IDADlsSetBandJacFnB",  MSGD_NO_ADJ);
+    return(IDADLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASDLS", "IDADlsSetBandJacFnB", MSGD_BAD_WHICH);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+
+  if (IDAB_mem->ida_lmem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDADLS_LMEMB_NULL, 
+                    "IDASDLS", "IDADlsSetBandJacFnB", MSGD_LMEMB_NULL);
+    return(IDADLS_LMEMB_NULL);
+  }
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  idadlsB_mem->d_bjacB = jacB;
+
+  if (jacB != NULL) {
+    flag = IDADlsSetBandJacFn(ida_memB, idaDlsBandJacBWrapper);
+  } else {
+    flag = IDADlsSetBandJacFn(ida_memB, NULL);
+  }
+
+  return(flag);
+}
+
+int IDADlsSetBandJacFnBS(void *ida_mem, int which, IDADlsBandJacFnBS jacBS)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsSetBandJacFnBS", MSGD_CAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDADLS_NO_ADJ, "IDASDLS", "IDADlsSetBandJacFnBS",  MSGD_NO_ADJ);
+    return(IDADLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASDLS", "IDADlsSetBandJacFnBS", MSGD_BAD_WHICH);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+
+  if (IDAB_mem->ida_lmem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDADLS_LMEMB_NULL, 
+                    "IDASDLS", "IDADlsSetBandJacFnBS", MSGD_LMEMB_NULL);
+    return(IDADLS_LMEMB_NULL);
+  }
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  idadlsB_mem->d_bjacBS = jacBS;
+
+  if (jacBS != NULL) {
+    flag = IDADlsSetBandJacFn(ida_memB, idaDlsBandJacBSWrapper);
+  } else {
+    flag = IDADlsSetBandJacFn(ida_memB, NULL);
+  }
+
+  return(flag);
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * PRIVATE INTERFACE FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * idaDlsDenseJacBWrapper
+ *
+ * This routine interfaces to the IDADenseJacFnB routine provided 
+ * by the user. idaDlsDenseJacBWrapper is of type IDADlsDenseJacFn.
+ * NOTE: data actually contains ida_mem
+ */
+
+static int idaDlsDenseJacBWrapper(long int NeqB, realtype tt, realtype c_jB,
+                                  N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                  DlsMat JacB, void *ida_mem, 
+                                  N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Get current backward problem. */
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  
+  /* Get linear solver's data for this backward problem. */
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  /* Forward solution from interpolation */
+  if (noInterp == FALSE) {
+    flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASDLS", "idaDlsDenseJacBWrapper", MSGD_BAD_T);
+      return(-1);
+    }
+  }
+
+  /* Call user's adjoint dense djacB routine */
+  flag = idadlsB_mem->d_djacB(NeqB, tt, c_jB, 
+                              yyTmp, ypTmp, 
+                              yyB, ypB, rrB, 
+                              JacB, IDAB_mem->ida_user_data, 
+                              tmp1B, tmp2B, tmp3B);
+  return(flag);
+}
+
+/*
+ * idaDlsDenseJacBSWrapper
+ *
+ * This routine interfaces to the IDADenseJacFnBS routine provided 
+ * by the user. idaDlsDenseJacBSWrapper is of type IDADlsDenseJacFn.
+ * NOTE: data actually contains ida_mem
+ */
+
+static int idaDlsDenseJacBSWrapper(long int NeqB, realtype tt, realtype c_jB,
+                                  N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                  DlsMat JacB, void *ida_mem, 
+                                  N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Get current backward problem. */
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  
+  /* Get linear solver's data for this backward problem. */
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  /* Get forward solution from interpolation. */
+  if( noInterp == FALSE) {
+    if (interpSensi)
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, yySTmp, ypSTmp);
+    else
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+  
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASDLS", "idaDlsDenseJacBSWrapper", MSGD_BAD_T);
+      return(-1);
+    }
+  }
+
+  /* Call user's adjoint dense djacBS routine */
+  flag = idadlsB_mem->d_djacBS(NeqB, tt, c_jB, 
+                              yyTmp, ypTmp, yySTmp, ypSTmp, 
+                              yyB, ypB, rrB, 
+                              JacB, IDAB_mem->ida_user_data, 
+                              tmp1B, tmp2B, tmp3B);
+  return(flag);
+}
+
+/*
+ * idaDlsBandJacBWrapper
+ *
+ * This routine interfaces to the IDABandJacFnB routine provided 
+ * by the user. idaDlsBandJacBWrapper is of type IDADlsBandJacFn.
+ * NOTE: data actually contains ida_mem
+ */
+
+static int idaDlsBandJacBWrapper(long int NeqB, long int mupperB, long int mlowerB, 
+                                 realtype tt, realtype c_jB, 
+                                 N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                                 DlsMat JacB, void *ida_mem, 
+                                 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Get current backward problem. */
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  
+  /* Get linear solver's data for this backward problem. */
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  /* Forward solution from interpolation */
+  if (noInterp == FALSE) {
+    flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASDLS", "idaDlsBandJacBWrapper", MSGD_BAD_T);
+      return(-1);
+    }
+  }
+
+  /* Call user's adjoint band bjacB routine */
+  flag = idadlsB_mem->d_bjacB(NeqB, mupperB, mlowerB, 
+                              tt, c_jB,
+                              yyTmp, ypTmp, 
+                              yyB, ypB, rrB,
+                              JacB, IDAB_mem->ida_user_data, 
+                              tmp1B, tmp2B, tmp3B);
+  return(flag);
+}
+
+/*
+ * idaDlsBandJacBSWrapper
+ *
+ * This routine interfaces to the IDABandJacFnBS routine provided 
+ * by the user. idaDlsBandJacBSWrapper is of type IDADlsBandJacFn.
+ * NOTE: data actually contains ida_mem
+ */
+
+static int idaDlsBandJacBSWrapper(long int NeqB, long int mupperB, long int mlowerB, 
+                                 realtype tt, realtype c_jB, 
+                                 N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                                 DlsMat JacB, void *ida_mem, 
+                                 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Get current backward problem. */
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  
+  /* Get linear solver's data for this backward problem. */
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  /* Get forward solution from interpolation. */
+  if( noInterp == FALSE) {
+    if (interpSensi)
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, yySTmp, ypSTmp);
+    else
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+  
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASDLS", "idaDlsBandJacBSWrapper", MSGD_BAD_T);
+      return(-1);
+    }
+  }
+
+  /* Call user's adjoint band bjacBS routine */
+  flag = idadlsB_mem->d_bjacBS(NeqB, mupperB, mlowerB, 
+                              tt, c_jB,
+                              yyTmp, ypTmp, yySTmp, ypSTmp, 
+                              yyB, ypB, rrB,
+                              JacB, IDAB_mem->ida_user_data, 
+                              tmp1B, tmp2B, tmp3B);
+  return(flag);
+}
+
diff --git a/src/idas/idas_direct_impl.h b/src/idas/idas_direct_impl.h
new file mode 100644
index 0000000..8898560
--- /dev/null
+++ b/src/idas/idas_direct_impl.h
@@ -0,0 +1,151 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the IDADLS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASDLS_IMPL_H
+#define _IDASDLS_IMPL_H
+
+#include <idas/idas_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * I D A S D I R E C T    I N T E R N A L    C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * =================================================================
+ * PART I:  F O R W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDADlsMemRec, IDADlsMem                             
+ * -----------------------------------------------------------------
+ * IDADlsMem is pointer to a IDADlsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDADlsMemRec {
+
+  int d_type;               /* Type of Jacobians (DENSE or BAND)             */
+
+  long int d_n;             /* problem dimension                             */
+
+  long int d_ml;            /* b_ml = lower bandwidth of savedJ              */
+  long int d_mu;            /* b_mu = upper bandwidth of savedJ              */ 
+  long int d_smu;           /* upper bandwith of M = MIN(N-1,b_mu+b_ml)      */
+
+  booleantype d_jacDQ;      /* TRUE if using internal DQ Jacobian approx.    */
+  IDADlsDenseJacFn d_djac;  /* dense Jacobian routine to be called           */
+  IDADlsBandJacFn d_bjac;   /* band Jacobian routine to be called            */
+  void *d_J_data;           /* J_data is passed to djac or bjac              */
+
+  DlsMat d_J;               /* J = dF/dy + cj*dF/dy'                         */
+
+  int *d_pivots;            /* pivots = int pivot array for PM = LU          */
+  long int *d_lpivots;      /* lpivots = long int pivot array for PM = LU    */
+  
+  long int d_nje;           /* nje = no. of calls to jac                     */
+
+  long int d_nreDQ;         /* no. of calls to res due to DQ Jacobian approx.*/
+
+  long int d_last_flag;     /* last error return flag                        */
+  
+} *IDADlsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+  
+int idaDlsDenseDQJac(long int N, realtype tt, realtype c_j,
+                     N_Vector yy, N_Vector yp, N_Vector rr, 
+                     DlsMat Jac, void *data,
+                     N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+  
+int idaDlsBandDQJac(long int N, long int mupper, long int mlower,
+                    realtype tt, realtype c_j, 
+                    N_Vector yy, N_Vector yp, N_Vector rr,
+                    DlsMat Jac, void *data,
+                    N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+/* Auxilliary functions */
+
+int idaDlsInitializeCounters(IDADlsMem idadls_mem);
+
+
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDADlsMemRecB, IDADlsMemB       
+ * -----------------------------------------------------------------
+ * An IDADLS linear solver's specification function attaches such
+ * a structure to the lmemB filed of IDABMem
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDADlsMemRecB {
+
+  int d_typeB;
+
+  IDADlsDenseJacFnB d_djacB;
+  IDADlsDenseJacFnBS d_djacBS;
+  IDADlsBandJacFnB d_bjacB;
+  IDADlsBandJacFnBS d_bjacBS;
+
+} *IDADlsMemB;
+
+
+/*
+ * =================================================================
+ * E R R O R   M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGD_IDAMEM_NULL "Integrator memory is NULL."
+#define MSGD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGD_BAD_SIZES "Illegal bandwidth parameter(s). Must have 0 <=  ml, mu <= N-1."
+#define MSGD_MEM_FAIL "A memory request failed."
+#define MSGD_LMEM_NULL "Linear solver memory is NULL."
+#define MSGD_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+
+#define MSGD_CAMEM_NULL "idaadj_mem = NULL illegal."
+#define MSGD_LMEMB_NULL "Linear solver memory is NULL for the backward integration."
+#define MSGD_BAD_T "Bad t for interpolation."
+#define MSGD_BAD_WHICH "Illegal value for which."
+#define MSGD_NO_ADJ "Illegal attempt to call before calling IDAAdjInit."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/idas/idas_ic.c b/src/idas/idas_ic.c
new file mode 100644
index 0000000..f854b65
--- /dev/null
+++ b/src/idas/idas_ic.c
@@ -0,0 +1,1368 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4539 $
+ * $Date: 2015-09-16 15:39:33 -0700 (Wed, 16 Sep 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IC calculation for IDAS.
+ * It is independent of the linear solver in use.                  
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "idas_impl.h"
+#include <sundials/sundials_math.h>
+
+/* Macro: loop */
+#define loop for(;;)
+
+/*
+ * =================================================================
+ * IDA Constants 
+ * =================================================================
+ */
+
+/* Private Constants */
+
+#define ZERO       RCONST(0.0)    /* real 0.0    */
+#define HALF       RCONST(0.5)    /* real 0.5    */
+#define ONE        RCONST(1.0)    /* real 1.0    */
+#define TWO        RCONST(2.0)    /* real 2.0    */
+#define PT99       RCONST(0.99)   /* real 0.99   */
+#define PT1        RCONST(0.1)    /* real 0.1    */
+#define PT001      RCONST(0.001)  /* real 0.001  */
+
+/* IDACalcIC control constants */
+
+#define ICRATEMAX  RCONST(0.9)    /* max. Newton conv. rate */
+#define ALPHALS    RCONST(0.0001) /* alpha in linesearch conv. test */
+
+/* Return values for lower level routines used by IDACalcIC */
+
+#define IC_FAIL_RECOV       1
+#define IC_CONSTR_FAILED    2
+#define IC_LINESRCH_FAILED  3
+#define IC_CONV_FAIL        4  
+#define IC_SLOW_CONVRG      5
+
+/*
+ * =================================================================
+ * Private Helper Functions Prototypes
+ * =================================================================
+ */
+
+extern int IDAInitialSetup(IDAMem IDA_mem);
+extern realtype IDAWrmsNorm(IDAMem IDA_mem, N_Vector x, 
+                            N_Vector w, booleantype mask);
+extern realtype IDASensWrmsNorm(IDAMem IDA_mem, N_Vector *xS, 
+                                N_Vector *wS, booleantype mask);
+extern realtype IDASensWrmsNormUpdate(IDAMem IDA_mem, realtype old_nrm,
+                                      N_Vector *xS, N_Vector *wS,
+                                      booleantype mask);
+
+extern int IDASensEwtSet(IDAMem IDA_mem, N_Vector *yScur, N_Vector *weightS);
+
+static int IDANlsIC(IDAMem IDA_mem);
+
+static int IDANewtonIC(IDAMem IDA_mem);
+static int IDALineSrch(IDAMem IDA_mem, realtype *delnorm, realtype *fnorm);
+static int IDAfnorm(IDAMem IDA_mem, realtype *fnorm);
+static int IDANewyyp(IDAMem IDA_mem, realtype lambda);
+static int IDANewy(IDAMem IDA_mem);
+
+static int IDASensNewtonIC(IDAMem IDA_mem);
+static int IDASensLineSrch(IDAMem IDA_mem, realtype *delnorm, realtype *fnorm);
+static int IDASensNewyyp(IDAMem IDA_mem, realtype lambda);
+static int IDASensfnorm(IDAMem IDA_mem, realtype *fnorm);
+static int IDASensNlsIC(IDAMem IDA_mem);
+
+static int IDAICFailFlag(IDAMem IDA_mem, int retval);
+
+/*
+ * =================================================================
+ * Readibility Constants
+ * =================================================================
+ */
+
+#define t0             (IDA_mem->ida_t0)
+#define yy0            (IDA_mem->ida_yy0)
+#define yp0            (IDA_mem->ida_yp0)
+
+#define user_data      (IDA_mem->ida_user_data)
+#define res            (IDA_mem->ida_res)
+#define efun           (IDA_mem->ida_efun)
+#define edata          (IDA_mem->ida_edata)
+#define uround         (IDA_mem->ida_uround)  
+#define phi            (IDA_mem->ida_phi) 
+#define ewt            (IDA_mem->ida_ewt)  
+#define delta          (IDA_mem->ida_delta)
+#define ee             (IDA_mem->ida_ee)
+#define savres         (IDA_mem->ida_savres)
+#define tempv2         (IDA_mem->ida_tempv2) 
+#define hh             (IDA_mem->ida_hh)
+#define tn             (IDA_mem->ida_tn)
+#define cj             (IDA_mem->ida_cj)
+#define cjratio        (IDA_mem->ida_cjratio)
+#define nbacktr        (IDA_mem->ida_nbacktr)
+#define maxbacks       (IDA_mem->ida_maxbacks)
+#define nre            (IDA_mem->ida_nre)
+#define ncfn           (IDA_mem->ida_ncfn)
+#define nni            (IDA_mem->ida_nni)
+#define nsetups        (IDA_mem->ida_nsetups)
+#define ns             (IDA_mem->ida_ns)
+#define lsetup         (IDA_mem->ida_lsetup)
+#define lsolve         (IDA_mem->ida_lsolve) 
+#define hused          (IDA_mem->ida_hused)         
+#define epsNewt        (IDA_mem->ida_epsNewt)
+#define id             (IDA_mem->ida_id)
+#define setupNonNull   (IDA_mem->ida_setupNonNull) 
+#define suppressalg    (IDA_mem->ida_suppressalg)
+#define constraints    (IDA_mem->ida_constraints)
+#define constraintsSet (IDA_mem->ida_constraintsSet)
+
+#define epiccon        (IDA_mem->ida_epiccon)
+#define maxnh          (IDA_mem->ida_maxnh)
+#define maxnj          (IDA_mem->ida_maxnj)
+#define maxnit         (IDA_mem->ida_maxnit)
+#define lsoff          (IDA_mem->ida_lsoff)
+#define steptol        (IDA_mem->ida_steptol)
+
+#define sensi          (IDA_mem->ida_sensi)
+#define Ns             (IDA_mem->ida_Ns)
+#define resS           (IDA_mem->ida_resS)
+#define phiS           (IDA_mem->ida_phiS)
+#define ism            (IDA_mem->ida_ism)
+#define ewtS           (IDA_mem->ida_ewtS)
+#define ncfnS          (IDA_mem->ida_ncfnS)
+#define nniS           (IDA_mem->ida_nniS)
+#define nsetupsS       (IDA_mem->ida_nsetupsS)
+#define yyS0           (IDA_mem->ida_yyS0)
+#define ypS0           (IDA_mem->ida_ypS0)
+#define delnewS        (IDA_mem->ida_delnewS)
+#define savresS        (IDA_mem->ida_savresS)
+#define yyS0new        (IDA_mem->ida_yyS0new)
+#define ypS0new        (IDA_mem->ida_ypS0new)
+#define eeS            (IDA_mem->ida_eeS)
+
+/*
+ * =================================================================
+ * EXPORTED FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * IDACalcIC
+ * -----------------------------------------------------------------
+ * IDACalcIC computes consistent initial conditions, given the 
+ * user's initial guess for unknown components of yy0 and/or yp0.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ *
+ * The error return values (fully described in ida.h) are:
+ *   IDA_MEM_NULL        ida_mem is NULL
+ *   IDA_NO_MALLOC       ida_mem was not allocated
+ *   IDA_ILL_INPUT       bad value for icopt, tout1, or id
+ *   IDA_LINIT_FAIL      the linear solver linit routine failed
+ *   IDA_BAD_EWT         zero value of some component of ewt
+ *   IDA_RES_FAIL        res had a non-recoverable error
+ *   IDA_FIRST_RES_FAIL  res failed recoverably on the first call
+ *   IDA_LSETUP_FAIL     lsetup had a non-recoverable error
+ *   IDA_LSOLVE_FAIL     lsolve had a non-recoverable error
+ *   IDA_NO_RECOVERY     res, lsetup, or lsolve had a recoverable
+ *                       error, but IDACalcIC could not recover
+ *   IDA_CONSTR_FAIL     the inequality constraints could not be met
+ *   IDA_LINESEARCH_FAIL if the linesearch failed (either on steptol test
+ *                       or on the maxbacks test)
+ *   IDA_CONV_FAIL       the Newton iterations failed to converge
+ * -----------------------------------------------------------------
+ */
+
+int IDACalcIC(void *ida_mem, int icopt, realtype tout1)
+{
+  int ewtsetOK;
+  int ier, nwt, nh, mxnh, icret, retval=0;
+  int is;
+  realtype tdist, troundoff, minid, hic, ypnorm;
+  IDAMem IDA_mem;
+  booleantype sensi_stg, sensi_sim;
+
+  /* Check if IDA memory exists */
+
+  if(ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDACalcIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if problem was malloc'ed */
+  
+  if(IDA_mem->ida_MallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_MALLOC, "IDAS", "IDACalcIC", MSG_NO_MALLOC);
+    return(IDA_NO_MALLOC);
+  }
+
+  /* Check inputs to IDA for correctness and consistency */
+
+  ier = IDAInitialSetup(IDA_mem);
+  if(ier != IDA_SUCCESS) return(IDA_ILL_INPUT);
+  IDA_mem->ida_SetupDone = TRUE;
+
+  /* Check legality of input arguments, and set IDA memory copies. */
+
+  if(icopt != IDA_YA_YDP_INIT && icopt != IDA_Y_INIT) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDACalcIC", MSG_IC_BAD_ICOPT);
+    return(IDA_ILL_INPUT);
+  }
+  IDA_mem->ida_icopt = icopt;
+
+  if(icopt == IDA_YA_YDP_INIT && (id == NULL)) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDACalcIC", MSG_IC_MISSING_ID);
+    return(IDA_ILL_INPUT);
+  }
+
+  tdist = SUNRabs(tout1 - tn);
+  troundoff = TWO*uround*(SUNRabs(tn) + SUNRabs(tout1));
+  if(tdist < troundoff) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDACalcIC", MSG_IC_TOO_CLOSE);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Are we computing sensitivities? */
+  sensi_stg  = (sensi && (ism==IDA_STAGGERED));
+  sensi_sim  = (sensi && (ism==IDA_SIMULTANEOUS));
+
+  /* Allocate space and initialize temporary vectors */
+
+  yy0 = N_VClone(ee);
+  yp0 = N_VClone(ee);
+  t0  = tn;
+  N_VScale(ONE, phi[0], yy0);
+  N_VScale(ONE, phi[1], yp0);
+
+  if (sensi) {
+
+    /* Allocate temporary space required for sensitivity IC: yyS0 and ypS0. */      
+    yyS0 = N_VCloneVectorArray(Ns, ee);
+    ypS0 = N_VCloneVectorArray(Ns, ee);
+    
+    /* Initialize sensitivity vector. */
+    for (is=0; is<Ns; is++) {
+      N_VScale(ONE, phiS[0][is], yyS0[is]);  
+      N_VScale(ONE, phiS[1][is], ypS0[is]);  
+    }
+    
+    /* Initialize work space vectors needed for sensitivities. */
+    savresS = phiS[2];
+    delnewS = phiS[3];
+    yyS0new = phiS[4];
+    ypS0new = eeS;
+  }
+
+  /* For use in the IDA_YA_YP_INIT case, set sysindex and tscale. */
+
+  IDA_mem->ida_sysindex = 1;
+  IDA_mem->ida_tscale   = tdist;
+  if(icopt == IDA_YA_YDP_INIT) {
+    minid = N_VMin(id);
+    if(minid < ZERO) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDACalcIC", MSG_IC_BAD_ID);
+      return(IDA_ILL_INPUT);
+    }
+    if(minid > HALF) IDA_mem->ida_sysindex = 0;
+  }
+
+  /* Set the test constant in the Newton convergence test */
+
+  IDA_mem->ida_epsNewt = epiccon;
+
+  /* Initializations: 
+     cjratio = 1 (for use in direct linear solvers); 
+     set nbacktr = 0; */
+
+  cjratio = ONE;
+  nbacktr = 0;
+
+  /* Set hic, hh, cj, and mxnh. */
+
+  hic = PT001*tdist;
+  ypnorm = IDAWrmsNorm(IDA_mem, yp0, ewt, suppressalg);
+
+  if (sensi_sim) 
+    ypnorm = IDASensWrmsNormUpdate(IDA_mem, ypnorm, ypS0, ewtS, FALSE);
+
+  if(ypnorm > HALF/hic) hic = HALF/ypnorm;
+  if(tout1 < tn) hic = -hic;
+  hh = hic;
+  if(icopt == IDA_YA_YDP_INIT) {
+    cj = ONE/hic;
+    mxnh = maxnh;
+  }
+  else {
+    cj = ZERO;
+    mxnh = 1;
+  }
+
+  /* Loop over nwt = number of evaluations of ewt vector. */
+
+  for(nwt = 1; nwt <= 2; nwt++) {
+ 
+    /* Loop over nh = number of h values. */
+    for(nh = 1; nh <= mxnh; nh++) {
+
+      /* Call the IC nonlinear solver function. */
+      retval = IDANlsIC(IDA_mem);
+
+      /* Cut h and loop on recoverable IDA_YA_YDP_INIT failure; else break. */
+      if(retval == IDA_SUCCESS) break;
+      ncfn++;
+      if(retval < 0) break;
+      if(nh == mxnh) break;
+
+      /* If looping to try again, reset yy0 and yp0 if not converging. */
+      if(retval != IC_SLOW_CONVRG) {
+        N_VScale(ONE, phi[0], yy0);
+        N_VScale(ONE, phi[1], yp0);
+        if (sensi_sim) {
+
+          /* Reset yyS0 and ypS0. */
+          /* Copy phiS[0] and phiS[1] into yyS0 and ypS0. */
+          for (is=0; is<Ns; is++) {
+            N_VScale(ONE, phiS[0][is], yyS0[is]);         
+            N_VScale(ONE, phiS[1][is], ypS0[is]);         
+          }
+        }
+      }
+      hic *= PT1;
+      cj = ONE/hic;
+      hh = hic;
+    }   /* End of nh loop */
+
+    /* Break on failure */
+    if(retval != IDA_SUCCESS) break;
+    
+    /* Reset ewt, save yy0, yp0 in phi, and loop. */
+    ewtsetOK = efun(yy0, ewt, edata);
+    if(ewtsetOK != 0) { 
+      retval = IDA_BAD_EWT; 
+      break; 
+    }
+    N_VScale(ONE, yy0, phi[0]);
+    N_VScale(ONE, yp0, phi[1]);
+    
+    if (sensi_sim) {
+      
+      /* Reevaluate ewtS. */
+      ewtsetOK = IDASensEwtSet(IDA_mem, yyS0, ewtS);
+      if(ewtsetOK != 0) { 
+        retval = IDA_BAD_EWT; 
+        break; 
+      }
+      
+      /* Save yyS0 and ypS0. */
+      for (is=0; is<Ns; is++) {
+            N_VScale(ONE, yyS0[is], phiS[0][is]);         
+            N_VScale(ONE, ypS0[is], phiS[1][is]);        
+      }
+    }
+
+  }   /* End of nwt loop */
+
+  /* Load the optional outputs. */
+
+  if(icopt == IDA_YA_YDP_INIT)   hused = hic;
+
+  /* On any failure, free memory, print error message and return */
+
+  if(retval != IDA_SUCCESS) {
+    N_VDestroy(yy0);
+    N_VDestroy(yp0);
+
+    if(sensi) {
+      N_VDestroyVectorArray(yyS0, Ns);
+      N_VDestroyVectorArray(ypS0, Ns);
+    }
+
+    icret = IDAICFailFlag(IDA_mem, retval);
+    return(icret);
+  }
+
+  /* Unless using the STAGGERED approach for sensitivities, return now */
+
+  if (!sensi_stg) {
+
+    N_VDestroy(yy0);
+    N_VDestroy(yp0);
+
+    if(sensi) {
+      N_VDestroyVectorArray(yyS0, Ns);
+      N_VDestroyVectorArray(ypS0, Ns);
+    }
+
+    return(IDA_SUCCESS);
+  }
+
+  /* Find consistent I.C. for sensitivities using a staggered approach */
+ 
+  
+  /* Evaluate res at converged y, needed for future evaluations of sens. RHS 
+     If res() fails recoverably, treat it as a convergence failure and 
+     attempt the step again */
+        
+  retval = res(t0, yy0, yp0, delta, user_data);
+  nre++;
+  if(retval < 0) 
+    /* res function failed unrecoverably. */
+    return(IDA_RES_FAIL);
+
+  if(retval > 0) 
+    /* res function failed recoverably but no recovery possible. */
+    return(IDA_FIRST_RES_FAIL);
+  
+  /* Loop over nwt = number of evaluations of ewt vector. */
+  for(nwt = 1; nwt <= 2; nwt++) {
+ 
+    /* Loop over nh = number of h values. */
+    for(nh = 1; nh <= mxnh; nh++) {
+
+      retval = IDASensNlsIC(IDA_mem);
+      if(retval == IDA_SUCCESS) break;
+
+      /* Increment the number of the sensitivity related corrector convergence failures. */
+      ncfnS++;
+
+      if(retval < 0) break;
+      if(nh == mxnh) break;
+
+      /* If looping to try again, reset yyS0 and ypS0 if not converging. */
+      if(retval != IC_SLOW_CONVRG) {
+        for (is=0; is<Ns; is++) {
+          N_VScale(ONE, phiS[0][is], yyS0[is]);  
+          N_VScale(ONE, phiS[1][is], ypS0[is]);  
+        }
+      }
+      hic *= PT1;
+      cj = ONE/hic;
+      hh = hic;
+        
+    }   /* End of nh loop */
+
+    /* Break on failure */
+    if(retval != IDA_SUCCESS) break;
+
+    /* Since it was successful, reevaluate ewtS with the new values of yyS0, save 
+       yyS0 and ypS0 in phiS[0] and phiS[1] and loop one more time to check and 
+       maybe correct the  new sensitivities IC with respect to the new weights. */
+    
+    /* Reevaluate ewtS. */
+    ewtsetOK = IDASensEwtSet(IDA_mem, yyS0, ewtS);
+    if(ewtsetOK != 0) { 
+      retval = IDA_BAD_EWT; 
+      break; 
+    }
+
+    /* Save yyS0 and ypS0. */
+    for (is=0; is<Ns; is++) {
+      N_VScale(ONE, yyS0[is], phiS[0][is]);         
+      N_VScale(ONE, ypS0[is], phiS[1][is]);        
+    }
+
+  }   /* End of nwt loop */
+
+
+  /* Load the optional outputs. */
+  if(icopt == IDA_YA_YDP_INIT)   hused = hic;
+
+  /* Free temporary space */
+  N_VDestroy(yy0);
+  N_VDestroy(yp0);
+
+  /* Here sensi is TRUE, so deallocate sensitivity temporary vectors. */
+  N_VDestroyVectorArray(yyS0, Ns);
+  N_VDestroyVectorArray(ypS0, Ns);
+
+
+  /* On any failure, print message and return proper flag. */
+  if(retval != IDA_SUCCESS) {
+    icret = IDAICFailFlag(IDA_mem, retval);
+    return(icret);
+  }
+
+  /* Otherwise return success flag. */
+
+  return(IDA_SUCCESS);
+
+}
+
+/*
+ * =================================================================
+ * PRIVATE FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+#define icopt          (IDA_mem->ida_icopt)
+#define sysindex       (IDA_mem->ida_sysindex)
+#define tscale         (IDA_mem->ida_tscale)
+#define ynew           (IDA_mem->ida_ynew)
+#define ypnew          (IDA_mem->ida_ypnew)
+#define delnew         (IDA_mem->ida_delnew)
+#define dtemp          (IDA_mem->ida_dtemp)
+
+#define user_dataS     (IDA_mem->ida_user_dataS)
+#define deltaS         (IDA_mem->ida_deltaS)
+
+#define tmpS1          (IDA_mem->ida_tmpS1)
+#define tmpS2          (IDA_mem->ida_tmpS2)
+#define tmpS3          (IDA_mem->ida_tmpS3)
+
+#define nrSe           (IDA_mem->ida_nrSe)
+/*
+ * -----------------------------------------------------------------
+ * IDANlsIC
+ * -----------------------------------------------------------------
+ * IDANlsIC solves a nonlinear system for consistent initial 
+ * conditions.  It calls IDANewtonIC to do most of the work.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ * The error return values (positive) considered recoverable are:
+ *  IC_FAIL_RECOV      if res, lsetup, or lsolve failed recoverably
+ *  IC_CONSTR_FAILED   if the constraints could not be met
+ *  IC_LINESRCH_FAILED if the linesearch failed (either on steptol test
+ *                     or on maxbacks test)
+ *  IC_CONV_FAIL       if the Newton iterations failed to converge
+ *  IC_SLOW_CONVRG     if the iterations are converging slowly
+ *                     (failed the convergence test, but showed
+ *                     norm reduction or convergence rate < 1)
+ * The error return values (negative) considered non-recoverable are:
+ *  IDA_RES_FAIL       if res had a non-recoverable error
+ *  IDA_FIRST_RES_FAIL if res failed recoverably on the first call
+ *  IDA_LSETUP_FAIL    if lsetup had a non-recoverable error
+ *  IDA_LSOLVE_FAIL    if lsolve had a non-recoverable error
+ * -----------------------------------------------------------------
+ */
+
+static int IDANlsIC(IDAMem IDA_mem)
+{
+  int retval, nj, is;
+  N_Vector tv1, tv2, tv3;
+  booleantype sensi_sim;
+
+  /* Are we computing sensitivities with the IDA_SIMULTANEOUS approach? */
+  sensi_sim = (sensi && (ism==IDA_SIMULTANEOUS));
+
+  tv1 = ee;
+  tv2 = tempv2;
+  tv3 = phi[2];
+  
+  /* Evaluate RHS. */
+  retval = res(t0, yy0, yp0, delta, user_data);
+  nre++;
+  if(retval < 0) return(IDA_RES_FAIL);
+  if(retval > 0) return(IDA_FIRST_RES_FAIL);
+
+  /* Save the residual. */
+  N_VScale(ONE, delta, savres);
+
+  if(sensi_sim) {
+    
+    /*Evaluate sensitivity RHS and save it in savresS. */
+    retval = resS(Ns, t0, 
+                  yy0, yp0, delta,
+                  yyS0, ypS0, deltaS,
+                  user_dataS, tmpS1, tmpS2, tmpS3);
+    nrSe++;
+    if(retval < 0) return(IDA_RES_FAIL);
+    if(retval > 0) return(IDA_FIRST_RES_FAIL);
+
+    for(is=0; is<Ns; is++)
+      N_VScale(ONE, deltaS[is], savresS[is]);
+  }
+
+  /* Loop over nj = number of linear solve Jacobian setups. */
+  for(nj = 1; nj <= maxnj; nj++) {
+
+    /* If there is a setup routine, call it. */
+    if(setupNonNull) {
+      nsetups++;
+      retval = lsetup(IDA_mem, yy0, yp0, delta, tv1, tv2, tv3);
+      if(retval < 0) return(IDA_LSETUP_FAIL);
+      if(retval > 0) return(IC_FAIL_RECOV);
+    }
+
+    /* Call the Newton iteration routine, and return if successful.  */
+    retval = IDANewtonIC(IDA_mem);
+    if(retval == IDA_SUCCESS) return(IDA_SUCCESS);
+
+    /* If converging slowly and lsetup is nontrivial, retry. */
+    if(retval == IC_SLOW_CONVRG && setupNonNull) {
+      N_VScale(ONE, savres, delta);
+
+      if(sensi_sim)
+        for(is=0; is<Ns; is++)
+          N_VScale(ONE, savresS[is], deltaS[is]);
+
+      continue;
+    } else {
+      return(retval);
+    }
+
+  }   /* End of nj loop */
+
+  /* No convergence after maxnj tries; return with retval=IC_SLOW_CONVRG */
+  return(retval);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDANewtonIC
+ * -----------------------------------------------------------------
+ * IDANewtonIC performs the Newton iteration to solve for consistent
+ * initial conditions.  It calls IDALineSrch within each iteration.
+ * On return, savres contains the current residual vector.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ * The error return values (positive) considered recoverable are:
+ *  IC_FAIL_RECOV      if res or lsolve failed recoverably
+ *  IC_CONSTR_FAILED   if the constraints could not be met
+ *  IC_LINESRCH_FAILED if the linesearch failed (either on steptol test
+ *                     or on maxbacks test)
+ *  IC_CONV_FAIL       if the Newton iterations failed to converge
+ *  IC_SLOW_CONVRG     if the iterations appear to be converging slowly.
+ *                     They failed the convergence test, but showed 
+ *                     an overall norm reduction (by a factor of < 0.1)
+ *                     or a convergence rate <= ICRATEMAX).
+ * The error return values (negative) considered non-recoverable are:
+ *  IDA_RES_FAIL   if res had a non-recoverable error
+ *  IDA_LSOLVE_FAIL      if lsolve had a non-recoverable error
+ * -----------------------------------------------------------------
+ */
+
+static int IDANewtonIC(IDAMem IDA_mem)
+{
+  int retval, mnewt, is;
+  realtype delnorm, fnorm, fnorm0, oldfnrm, rate;
+  booleantype sensi_sim;
+
+  /* Are we computing sensitivities with the IDA_SIMULTANEOUS approach? */
+  sensi_sim = (sensi && (ism==IDA_SIMULTANEOUS));
+
+  /* Set pointer for vector delnew */
+  delnew = phi[2];
+
+  /* Call the linear solve function to get the Newton step, delta. */
+  retval = lsolve(IDA_mem, delta, ewt, yy0, yp0, savres);
+  if(retval < 0) return(IDA_LSOLVE_FAIL);
+  if(retval > 0) return(IC_FAIL_RECOV);
+
+  /* Compute the norm of the step. */
+  fnorm = IDAWrmsNorm(IDA_mem, delta, ewt, FALSE);
+
+  /* Call the lsolve function to get correction vectors deltaS. */
+  if (sensi_sim) {
+    for(is=0;is<Ns;is++) {
+      retval = lsolve(IDA_mem, deltaS[is], ewtS[is], yy0, yp0, savres);
+      if(retval < 0) return(IDA_LSOLVE_FAIL);
+      if(retval > 0) return(IC_FAIL_RECOV);
+    }
+    /* Update the norm of delta. */
+    fnorm = IDASensWrmsNormUpdate(IDA_mem, fnorm, deltaS, ewtS, FALSE);
+  }
+
+  /* Test for convergence. Return now if the norm is small. */
+  if(sysindex == 0) fnorm *= tscale*SUNRabs(cj);
+  if(fnorm <= epsNewt) return(IDA_SUCCESS);
+  fnorm0 = fnorm;
+
+  /* Initialize rate to avoid compiler warning message */
+  rate = ZERO;
+
+  /* Newton iteration loop */
+
+  for(mnewt = 0; mnewt < maxnit; mnewt++) {
+
+    nni++;
+    delnorm = fnorm;
+    oldfnrm = fnorm;
+
+    /* Call the Linesearch function and return if it failed. */
+    retval = IDALineSrch(IDA_mem, &delnorm, &fnorm);
+    if(retval != IDA_SUCCESS) return(retval);
+
+    /* Set the observed convergence rate and test for convergence. */
+    rate = fnorm/oldfnrm;
+    if(fnorm <= epsNewt) return(IDA_SUCCESS);
+
+    /* If not converged, copy new step vector, and loop. */
+    N_VScale(ONE, delnew, delta);
+
+    if(sensi_sim) {
+      /* Update the iteration's step for sensitivities. */
+      for(is=0; is<Ns; is++)
+        N_VScale(ONE, delnewS[is], deltaS[is]);
+    }
+
+  }   /* End of Newton iteration loop */
+
+  /* Return either IC_SLOW_CONVRG or recoverable fail flag. */
+  if(rate <= ICRATEMAX || fnorm < PT1*fnorm0) return(IC_SLOW_CONVRG);
+  return(IC_CONV_FAIL);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDALineSrch
+ * -----------------------------------------------------------------
+ * IDALineSrch performs the Linesearch algorithm with the 
+ * calculation of consistent initial conditions.
+ *
+ * On entry, yy0 and yp0 are the current values of y and y', the 
+ * Newton step is delta, the current residual vector F is savres,
+ * delnorm is WRMS-norm(delta), and fnorm is the norm of the vector
+ * J-inverse F.
+ *
+ * On a successful return, yy0, yp0, and savres have been updated, 
+ * delnew contains the current value of J-inverse F, and fnorm is
+ * WRMS-norm(delnew).
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ * The error return values (positive) considered recoverable are:
+ *  IC_FAIL_RECOV      if res or lsolve failed recoverably
+ *  IC_CONSTR_FAILED   if the constraints could not be met
+ *  IC_LINESRCH_FAILED if the linesearch failed (either on steptol test
+ *                     or on maxbacks test)
+ * The error return values (negative) considered non-recoverable are:
+ *  IDA_RES_FAIL   if res had a non-recoverable error
+ *  IDA_LSOLVE_FAIL      if lsolve had a non-recoverable error
+ * -----------------------------------------------------------------
+ */
+
+static int IDALineSrch(IDAMem IDA_mem, realtype *delnorm, realtype *fnorm)
+{
+  booleantype conOK;
+  int retval, is, nbacks;
+  realtype f1norm, fnormp, f1normp, ratio, lambda, minlam, slpi;
+  N_Vector mc;
+  booleantype sensi_sim;
+
+  /* Initialize work space pointers, f1norm, ratio.
+     (Use of mc in constraint check does not conflict with ypnew.) */
+  mc = ee;
+  dtemp = phi[3];
+  ynew = tempv2;
+  ypnew = ee;
+  f1norm = (*fnorm)*(*fnorm)*HALF;
+  ratio = ONE;
+
+  /* If there are constraints, check and reduce step if necessary. */
+  if(constraintsSet) {
+
+    /* Update y and check constraints. */
+    IDANewy(IDA_mem);
+    conOK = N_VConstrMask(constraints, ynew, mc);
+
+    if(!conOK) {
+      /* Not satisfied.  Compute scaled step to satisfy constraints. */
+      N_VProd(mc, delta, dtemp);
+      ratio = PT99*N_VMinQuotient(yy0, dtemp);
+      (*delnorm) *= ratio;
+      if((*delnorm) <= steptol) return(IC_CONSTR_FAILED);
+      N_VScale(ratio, delta, delta);
+    }
+
+  } /* End of constraints check */
+
+  slpi = -TWO*f1norm*ratio;
+  minlam = steptol/(*delnorm);
+  lambda = ONE;
+  nbacks = 0;
+
+  /* Are we computing sensitivities with the IDA_SIMULTANEOUS approach? */
+  sensi_sim = (sensi && (ism==IDA_SIMULTANEOUS));
+
+  /* In IDA_Y_INIT case, set ypnew = yp0 (fixed) for linesearch. */
+  if(icopt == IDA_Y_INIT) {
+    N_VScale(ONE, yp0, ypnew);
+
+    /* do the same for sensitivities. */
+    if(sensi_sim) {
+      for(is=0; is<Ns; is++)
+        N_VScale(ONE, ypS0[is], ypS0new[is]);
+    }
+  }
+
+  /* Loop on linesearch variable lambda. */
+
+  loop {
+
+    if (nbacks == maxbacks) return(IC_LINESRCH_FAILED);
+    /* Get new (y,y') = (ynew,ypnew) and norm of new function value. */
+    IDANewyyp(IDA_mem, lambda);
+    retval = IDAfnorm(IDA_mem, &fnormp);
+    if(retval != IDA_SUCCESS) return(retval);
+
+    /* If lsoff option is on, break out. */
+    if(lsoff) break;
+
+    /* Do alpha-condition test. */
+    f1normp = fnormp*fnormp*HALF;
+    if(f1normp <= f1norm + ALPHALS*slpi*lambda) break;
+    if(lambda < minlam) return(IC_LINESRCH_FAILED);
+    lambda /= TWO;
+    nbacktr++; nbacks++;
+
+  }  /* End of breakout linesearch loop */
+
+  /* Update yy0, yp0. */
+  N_VScale(ONE, ynew, yy0);
+
+  if(sensi_sim) {
+    /* Update yyS0 and ypS0. */
+    for(is=0; is<Ns; is++)
+      N_VScale(ONE, yyS0new[is], yyS0[is]);
+  }
+
+  if(icopt == IDA_YA_YDP_INIT) {
+    N_VScale(ONE, ypnew, yp0);
+    
+    if(sensi_sim)
+      for(is=0; is<Ns; is++)
+        N_VScale(ONE, ypS0new[is], ypS0[is]);
+
+  }
+  /* Update fnorm, then return. */
+  *fnorm = fnormp;
+  return(IDA_SUCCESS);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDAfnorm
+ * -----------------------------------------------------------------
+ * IDAfnorm computes the norm of the current function value, by
+ * evaluating the DAE residual function, calling the linear 
+ * system solver, and computing a WRMS-norm.
+ *
+ * On return, savres contains the current residual vector F, and
+ * delnew contains J-inverse F.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred, or
+ *  IC_FAIL_RECOV    if res or lsolve failed recoverably, or
+ *  IDA_RES_FAIL     if res had a non-recoverable error, or
+ *  IDA_LSOLVE_FAIL  if lsolve had a non-recoverable error.
+ * -----------------------------------------------------------------
+ */
+
+static int IDAfnorm(IDAMem IDA_mem, realtype *fnorm)
+{
+  int retval, is;
+
+  /* Get residual vector F, return if failed, and save F in savres. */
+  retval = res(t0, ynew, ypnew, delnew, user_data);
+  nre++;
+  if(retval < 0) return(IDA_RES_FAIL);
+  if(retval > 0) return(IC_FAIL_RECOV);
+
+  N_VScale(ONE, delnew, savres);
+
+  /* Call the linear solve function to get J-inverse F; return if failed. */
+  retval = lsolve(IDA_mem, delnew, ewt, ynew, ypnew, savres);
+  if(retval < 0) return(IDA_LSOLVE_FAIL);
+  if(retval > 0) return(IC_FAIL_RECOV);
+
+  /* Compute the WRMS-norm. */
+  *fnorm = IDAWrmsNorm(IDA_mem, delnew, ewt, FALSE);
+
+
+  /* Are we computing SENSITIVITIES with the IDA_SIMULTANEOUS approach? */
+
+  if(sensi && (ism==IDA_SIMULTANEOUS)) {
+
+    /* Evaluate the residual for sensitivities. */
+    retval = resS(Ns, t0, 
+                  ynew, ypnew, savres,
+                  yyS0new, ypS0new, delnewS,
+                  user_dataS, tmpS1, tmpS2, tmpS3);
+    nrSe++;
+    if(retval < 0) return(IDA_RES_FAIL);
+    if(retval > 0) return(IC_FAIL_RECOV);
+
+    /* Save delnewS in savresS. */
+    for(is=0; is<Ns; is++)
+      N_VScale(ONE, delnewS[is], savresS[is]);
+
+    /* Call the linear solve function to get J-inverse deltaS. */
+    for(is=0; is<Ns; is++) {
+
+      retval = lsolve(IDA_mem, delnewS[is], ewtS[is], ynew, ypnew, savres);
+      if(retval < 0) return(IDA_LSOLVE_FAIL);
+      if(retval > 0) return(IC_FAIL_RECOV);
+    }
+      
+    /* Include sensitivities in norm. */
+    *fnorm = IDASensWrmsNormUpdate(IDA_mem, *fnorm, delnewS, ewtS, FALSE);
+  }
+
+  /* Rescale norm if index = 0. */
+  if(sysindex == 0) (*fnorm) *= tscale*SUNRabs(cj);
+
+  return(IDA_SUCCESS);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDANewyyp
+ * -----------------------------------------------------------------
+ * IDANewyyp updates the vectors ynew and ypnew from yy0 and yp0,
+ * using the current step vector lambda*delta, in a manner
+ * depending on icopt and the input id vector.
+ *
+ * The return value is always IDA_SUCCESS = 0.
+ * -----------------------------------------------------------------
+ */
+
+static int IDANewyyp(IDAMem IDA_mem, realtype lambda)
+{
+  int retval;
+  
+  retval = IDA_SUCCESS;
+
+  /* IDA_YA_YDP_INIT case: ynew  = yy0 - lambda*delta    where id_i = 0
+                           ypnew = yp0 - cj*lambda*delta where id_i = 1. */
+  if(icopt == IDA_YA_YDP_INIT) {
+
+    N_VProd(id, delta, dtemp);
+    N_VLinearSum(ONE, yp0, -cj*lambda, dtemp, ypnew);
+    N_VLinearSum(ONE, delta, -ONE, dtemp, dtemp);
+    N_VLinearSum(ONE, yy0, -lambda, dtemp, ynew);
+
+  }else if(icopt == IDA_Y_INIT) {
+
+    /* IDA_Y_INIT case: ynew = yy0 - lambda*delta. (ypnew = yp0 preset.) */
+    N_VLinearSum(ONE, yy0, -lambda, delta, ynew);
+  }
+
+  if(sensi && (ism==IDA_SIMULTANEOUS))
+    retval = IDASensNewyyp(IDA_mem, lambda);
+  
+  return(retval);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDANewy
+ * -----------------------------------------------------------------
+ * IDANewy updates the vector ynew from yy0,
+ * using the current step vector delta, in a manner
+ * depending on icopt and the input id vector.
+ *
+ * The return value is always IDA_SUCCESS = 0.
+ * -----------------------------------------------------------------
+ */
+
+static int IDANewy(IDAMem IDA_mem)
+{
+  
+  /* IDA_YA_YDP_INIT case: ynew = yy0 - delta    where id_i = 0. */
+  if(icopt == IDA_YA_YDP_INIT) {
+    N_VProd(id, delta, dtemp);
+    N_VLinearSum(ONE, delta, -ONE, dtemp, dtemp);
+    N_VLinearSum(ONE, yy0, -ONE, dtemp, ynew);
+    return(IDA_SUCCESS);
+  }
+
+  /* IDA_Y_INIT case: ynew = yy0 - delta. */
+  N_VLinearSum(ONE, yy0, -ONE, delta, ynew);
+  return(IDA_SUCCESS);
+
+}
+/*
+ * -----------------------------------------------------------------
+ * Sensitivity I.C. functions
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * IDASensNlsIC
+ * -----------------------------------------------------------------
+ * IDASensNlsIC solves nonlinear systems for sensitivities consistent 
+ * initial conditions.  It mainly relies on IDASensNewtonIC.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ * The error return values (positive) considered recoverable are:
+ *  IC_FAIL_RECOV      if res, lsetup, or lsolve failed recoverably
+ *  IC_CONSTR_FAILED   if the constraints could not be met
+ *  IC_LINESRCH_FAILED if the linesearch failed (either on steptol test
+ *                     or on maxbacks test)
+ *  IC_CONV_FAIL       if the Newton iterations failed to converge
+ *  IC_SLOW_CONVRG     if the iterations are converging slowly
+ *                     (failed the convergence test, but showed
+ *                     norm reduction or convergence rate < 1)
+ * The error return values (negative) considered non-recoverable are:
+ *  IDA_RES_FAIL       if res had a non-recoverable error
+ *  IDA_FIRST_RES_FAIL if res failed recoverably on the first call
+ *  IDA_LSETUP_FAIL    if lsetup had a non-recoverable error
+ *  IDA_LSOLVE_FAIL    if lsolve had a non-recoverable error
+ * -----------------------------------------------------------------
+ */
+static int IDASensNlsIC(IDAMem IDA_mem)
+{
+  int retval;
+  int is, nj;
+
+  retval = resS(Ns, t0, 
+                yy0,  yp0,  delta,
+                yyS0, ypS0, deltaS,
+                user_dataS, tmpS1, tmpS2, tmpS3);
+  nrSe++;
+  if(retval < 0) return(IDA_RES_FAIL);
+  if(retval > 0) return(IDA_FIRST_RES_FAIL);
+  
+  /* Save deltaS */
+  for(is=0; is<Ns; is++) N_VScale(ONE, deltaS[is], savresS[is]);
+
+  /* Loop over nj = number of linear solve Jacobian setups. */
+
+  for(nj = 1; nj <= 2; nj++) {
+
+    /* Call the Newton iteration routine */
+    retval = IDASensNewtonIC(IDA_mem);
+    if(retval == IDA_SUCCESS) return(IDA_SUCCESS);
+
+    /* If converging slowly and lsetup is nontrivial and this is the first pass, 
+       update Jacobian and retry. */
+    if(retval == IC_SLOW_CONVRG && setupNonNull && nj==1) {
+
+      /* Restore deltaS. */
+      for(is=0; is<Ns; is++) N_VScale(ONE, savresS[is], deltaS[is]);
+
+      nsetupsS++;
+      retval = lsetup(IDA_mem, yy0, yp0, delta, tmpS1, tmpS2, tmpS3);
+      if(retval < 0) return(IDA_LSETUP_FAIL);
+      if(retval > 0) return(IC_FAIL_RECOV);
+
+      continue;
+    } else {
+      return(retval);
+    }
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASensNewtonIC
+ * -----------------------------------------------------------------
+ * IDANewtonIC performs the Newton iteration to solve for 
+ * sensitivities consistent initial conditions.  It calls 
+ * IDASensLineSrch within each iteration.
+ * On return, savresS contains the current residual vectors.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ * The error return values (positive) considered recoverable are:
+ *  IC_FAIL_RECOV      if res or lsolve failed recoverably
+ *  IC_CONSTR_FAILED   if the constraints could not be met
+ *  IC_LINESRCH_FAILED if the linesearch failed (either on steptol test
+ *                     or on maxbacks test)
+ *  IC_CONV_FAIL       if the Newton iterations failed to converge
+ *  IC_SLOW_CONVRG     if the iterations appear to be converging slowly.
+ *                     They failed the convergence test, but showed 
+ *                     an overall norm reduction (by a factor of < 0.1)
+ *                     or a convergence rate <= ICRATEMAX).
+ * The error return values (negative) considered non-recoverable are:
+ *  IDA_RES_FAIL   if res had a non-recoverable error
+ *  IDA_LSOLVE_FAIL      if lsolve had a non-recoverable error
+ * -----------------------------------------------------------------
+ */
+static int IDASensNewtonIC(IDAMem IDA_mem)
+{
+  int retval, is, mnewt;
+  realtype delnorm, fnorm, fnorm0, oldfnrm, rate;
+
+  for(is=0;is<Ns;is++) {
+   
+    /* Call the linear solve function to get the Newton step, delta. */
+    retval = lsolve(IDA_mem, deltaS[is], ewtS[is],  yy0, yp0, delta);
+    if(retval < 0) return(IDA_LSOLVE_FAIL);
+    if(retval > 0) return(IC_FAIL_RECOV);
+
+  }
+    /* Compute the norm of the step and return if it is small enough */
+  fnorm = IDASensWrmsNorm(IDA_mem, deltaS, ewtS, FALSE);
+  if(sysindex == 0) fnorm *= tscale*SUNRabs(cj);
+  if(fnorm <= epsNewt) return(IDA_SUCCESS);
+  fnorm0 = fnorm;
+
+  rate = ZERO;
+
+  /* Newton iteration loop */
+  for(mnewt = 0; mnewt < maxnit; mnewt++) {
+
+    nniS++;
+    delnorm = fnorm;
+    oldfnrm = fnorm;
+      
+    /* Call the Linesearch function and return if it failed. */
+    retval = IDASensLineSrch(IDA_mem, &delnorm, &fnorm);
+    if(retval != IDA_SUCCESS) return(retval);
+      
+    /* Set the observed convergence rate and test for convergence. */
+    rate = fnorm/oldfnrm;
+    if(fnorm <= epsNewt) return(IDA_SUCCESS);
+    
+    /* If not converged, copy new step vectors, and loop. */
+    for(is=0; is<Ns; is++) N_VScale(ONE, delnewS[is], deltaS[is]);
+    
+  }   /* End of Newton iteration loop */
+
+  /* Return either IC_SLOW_CONVRG or recoverable fail flag. */
+  if(rate <= ICRATEMAX || fnorm < PT1*fnorm0) return(IC_SLOW_CONVRG);
+  return(IC_CONV_FAIL);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASensLineSrch
+ * -----------------------------------------------------------------
+ * IDASensLineSrch performs the Linesearch algorithm with the 
+ * calculation of consistent initial conditions for sensitivities
+ * systems.
+ *
+ * On entry, yyS0 and ypS0 contain the current values, the Newton 
+ * steps are contained in deltaS, the current residual vectors FS are
+ * savresS, delnorm is sens-WRMS-norm(deltaS), and fnorm is
+ * max { WRMS-norm( J-inverse FS[is] ) : is=1,2,...,Ns } 
+ *
+ * On a successful return, yy0, yp0, and savres have been updated, 
+ * delnew contains the current values of J-inverse FS, and fnorm is
+ * max { WRMS-norm(delnewS[is]) : is = 1,2,...Ns }
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred.
+ * The error return values (positive) considered recoverable are:
+ *  IC_FAIL_RECOV      if res or lsolve failed recoverably
+ *  IC_CONSTR_FAILED   if the constraints could not be met
+ *  IC_LINESRCH_FAILED if the linesearch failed (either on steptol test
+ *                     or on maxbacks test)
+ * The error return values (negative) considered non-recoverable are:
+ *  IDA_RES_FAIL   if res had a non-recoverable error
+ *  IDA_LSOLVE_FAIL      if lsolve had a non-recoverable error
+ * -----------------------------------------------------------------
+ */
+
+static int IDASensLineSrch(IDAMem IDA_mem, realtype *delnorm, realtype *fnorm)
+{
+  int is, retval, nbacks;
+  realtype f1norm, fnormp, f1normp, slpi, minlam;
+  realtype lambda, ratio;
+  
+  /* Set work space pointer. */
+  dtemp = phi[3];
+
+  f1norm = (*fnorm)*(*fnorm)*HALF;
+  
+  /* Initialize local variables. */
+  ratio = ONE;
+  slpi = -TWO*f1norm*ratio;
+  minlam = steptol/(*delnorm);
+  lambda = ONE;
+  nbacks = 0;
+
+  loop {
+
+    if (nbacks == maxbacks) return(IC_LINESRCH_FAILED);
+    /* Get new iteration in (ySnew, ypSnew). */
+    IDASensNewyyp(IDA_mem, lambda);
+
+    /* Get the norm of new function value. */
+    retval = IDASensfnorm(IDA_mem, &fnormp);
+    if (retval!=IDA_SUCCESS) return retval;
+
+    /* If lsoff option is on, break out. */
+    if(lsoff) break;
+
+    /* Do alpha-condition test. */
+    f1normp = fnormp*fnormp*HALF;
+    if(f1normp <= f1norm + ALPHALS*slpi*lambda) break;
+    if(lambda < minlam) return(IC_LINESRCH_FAILED);
+    lambda /= TWO;
+    nbacktr++; nbacks++;
+  }
+  
+  /* Update yyS0, ypS0 and fnorm and return. */
+  for(is=0; is<Ns; is++) {
+    N_VScale(ONE, yyS0new[is], yyS0[is]);
+  }
+
+  if (icopt == IDA_YA_YDP_INIT)
+    for(is=0; is<Ns; is++) 
+      N_VScale(ONE, ypS0new[is], ypS0[is]);
+
+  *fnorm = fnormp;
+  return(IDA_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASensfnorm
+ * -----------------------------------------------------------------
+ * IDASensfnorm computes the norm of the current function value, by
+ * evaluating the sensitivity residual function, calling the linear 
+ * system solver, and computing a WRMS-norm.
+ *
+ * On return, savresS contains the current residual vectors FS, and
+ * delnewS contains J-inverse FS.
+ *
+ * The return value is IDA_SUCCESS = 0 if no error occurred, or
+ *  IC_FAIL_RECOV    if res or lsolve failed recoverably, or
+ *  IDA_RES_FAIL     if res had a non-recoverable error, or
+ *  IDA_LSOLVE_FAIL  if lsolve had a non-recoverable error.
+ * -----------------------------------------------------------------
+ */
+
+static int IDASensfnorm(IDAMem IDA_mem, realtype *fnorm)
+{
+  int is, retval;
+  
+  /* Get sensitivity residual */
+  retval = resS(Ns, t0, 
+                yy0,  yp0,  delta,
+                yyS0new, ypS0new, delnewS,
+                user_dataS, tmpS1, tmpS2, tmpS3);
+  nrSe++;
+  if(retval < 0) return(IDA_RES_FAIL);
+  if(retval > 0) return(IC_FAIL_RECOV);
+  
+  for(is=0; is<Ns; is++) N_VScale(ONE, delnewS[is], savresS[is]);
+  
+  /* Call linear solve function */
+  for(is=0; is<Ns; is++) {
+    
+    retval = lsolve(IDA_mem, delnewS[is], ewtS[is],  yy0, yp0, delta);
+    if(retval < 0) return(IDA_LSOLVE_FAIL);
+    if(retval > 0) return(IC_FAIL_RECOV);
+  }
+
+  /* Compute the WRMS-norm; rescale if index = 0. */
+  *fnorm = IDASensWrmsNorm(IDA_mem, delnewS, ewtS, FALSE);
+  if(sysindex == 0) (*fnorm) *= tscale*SUNRabs(cj);
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASensNewyyp
+ * -----------------------------------------------------------------
+ * IDASensNewyyp computes the Newton updates for each of the 
+ * sensitivities systems using the current step vector lambda*delta, 
+ * in a manner depending on icopt and the input id vector.
+ *
+ * The return value is always IDA_SUCCESS = 0.
+ * -----------------------------------------------------------------
+ */
+
+static int IDASensNewyyp(IDAMem IDA_mem, realtype lambda)
+{
+  int is;
+
+  if(icopt == IDA_YA_YDP_INIT) {
+
+  /* IDA_YA_YDP_INIT case: 
+     - ySnew  = yS0  - lambda*deltaS    where id_i = 0
+     - ypSnew = ypS0 - cj*lambda*delta  where id_i = 1. */    
+
+    for(is=0; is<Ns; is++) {
+      
+      /* It is ok to use dtemp as temporary vector here. */
+      N_VProd(id, deltaS[is], dtemp);
+      N_VLinearSum(ONE, ypS0[is], -cj*lambda, dtemp, ypS0new[is]);
+      N_VLinearSum(ONE, deltaS[is], -ONE, dtemp, dtemp);
+      N_VLinearSum(ONE, yyS0[is], -lambda, dtemp, yyS0new[is]);
+    } /* end loop is */
+  }else { 
+
+    /* IDA_Y_INIT case: 
+       - ySnew = yS0 - lambda*deltaS. (ypnew = yp0 preset.) */
+
+    for(is=0; is<Ns; is++)
+      N_VLinearSum(ONE, yyS0[is], -lambda, deltaS[is], yyS0new[is]);
+  } /* end loop is */
+  return(IDA_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDAICFailFlag
+ * -----------------------------------------------------------------
+ * IDAICFailFlag prints a message and sets the IDACalcIC return
+ * value appropriate to the flag retval returned by IDANlsIC.
+ * -----------------------------------------------------------------
+ */
+
+static int IDAICFailFlag(IDAMem IDA_mem, int retval)
+{
+
+  /* Depending on retval, print error message and return error flag. */
+  switch(retval) {
+
+    case IDA_RES_FAIL:
+      IDAProcessError(IDA_mem, IDA_RES_FAIL, "IDAS", "IDACalcIC", MSG_IC_RES_NONREC);
+      return(IDA_RES_FAIL);
+
+    case IDA_FIRST_RES_FAIL:
+      IDAProcessError(IDA_mem, IDA_FIRST_RES_FAIL, "IDAS", "IDACalcIC", MSG_IC_RES_FAIL);
+      return(IDA_FIRST_RES_FAIL);
+
+    case IDA_LSETUP_FAIL:
+      IDAProcessError(IDA_mem, IDA_LSETUP_FAIL, "IDAS", "IDACalcIC", MSG_IC_SETUP_FAIL);
+      return(IDA_LSETUP_FAIL);
+
+    case IDA_LSOLVE_FAIL:  
+      IDAProcessError(IDA_mem, IDA_LSOLVE_FAIL, "IDAS", "IDACalcIC", MSG_IC_SOLVE_FAIL);
+      return(IDA_LSOLVE_FAIL);
+
+    case IC_FAIL_RECOV:
+      IDAProcessError(IDA_mem, IDA_NO_RECOVERY, "IDAS", "IDACalcIC", MSG_IC_NO_RECOVERY);
+      return(IDA_NO_RECOVERY);
+
+    case IC_CONSTR_FAILED: 
+      IDAProcessError(IDA_mem, IDA_CONSTR_FAIL, "IDAS", "IDACalcIC", MSG_IC_FAIL_CONSTR);
+      return(IDA_CONSTR_FAIL);
+
+    case IC_LINESRCH_FAILED:  
+      IDAProcessError(IDA_mem, IDA_LINESEARCH_FAIL, "IDAS", "IDACalcIC", MSG_IC_FAILED_LINS);
+      return(IDA_LINESEARCH_FAIL);
+
+    case IC_CONV_FAIL:
+      IDAProcessError(IDA_mem, IDA_CONV_FAIL, "IDAS", "IDACalcIC", MSG_IC_CONV_FAILED);
+      return(IDA_CONV_FAIL);
+
+    case IC_SLOW_CONVRG: 
+      IDAProcessError(IDA_mem, IDA_CONV_FAIL, "IDAS", "IDACalcIC", MSG_IC_CONV_FAILED);
+      return(IDA_CONV_FAIL);
+
+    case IDA_BAD_EWT:
+      IDAProcessError(IDA_mem, IDA_BAD_EWT, "IDAS", "IDACalcIC", MSG_IC_BAD_EWT);
+      return(IDA_BAD_EWT);
+
+  }
+  return -99;
+}
diff --git a/src/idas/idas_impl.h b/src/idas/idas_impl.h
new file mode 100644
index 0000000..3deb98c
--- /dev/null
+++ b/src/idas/idas_impl.h
@@ -0,0 +1,1062 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4921 $
+ * $Date: 2016-09-19 14:35:11 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file (private version) for the main IDAS solver.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDAS_IMPL_H
+#define _IDAS_IMPL_H
+
+#include <stdarg.h>
+
+#include <idas/idas.h>
+#include <sundials/sundials_nvector.h>
+#include <sundials/sundials_types.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* 
+ * =================================================================
+ *   M A I N    I N T E G R A T O R    M E M O R Y    B L O C K
+ * =================================================================
+ */
+
+
+/* Basic IDA constants */
+  
+#define HMAX_INV_DEFAULT RCONST(0.0) /* hmax_inv default value          */
+#define MAXORD_DEFAULT   5           /* maxord default value            */
+#define MXORDP1          6           /* max. number of N_Vectors in phi */
+#define MXSTEP_DEFAULT   500         /* mxstep default value            */
+
+/* itol */
+#define IDA_NN               0
+#define IDA_SS               1
+#define IDA_SV               2
+#define IDA_WF               3
+#define IDA_EE               4 
+
+/*
+ * -----------------------------------------------------------------
+ * Types: struct IDAMemRec, IDAMem
+ * -----------------------------------------------------------------
+ * The type IDAMem is type pointer to struct IDAMemRec.
+ * This structure contains fields to keep track of problem state.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDAMemRec {
+
+  realtype ida_uround;    /* machine unit roundoff */
+
+  /*--------------------------
+    Problem Specification Data 
+    --------------------------*/
+
+  IDAResFn       ida_res;            /* F(t,y(t),y'(t))=0; the function F     */
+  void          *ida_user_data;      /* user pointer passed to res            */
+
+  int            ida_itol;           /* itol = IDA_SS, IDA_SV, IDA_WF, IDA_NN */
+  realtype       ida_rtol;           /* relative tolerance                    */
+  realtype       ida_Satol;          /* scalar absolute tolerance             */  
+  N_Vector       ida_Vatol;          /* vector absolute tolerance             */  
+  booleantype    ida_user_efun;      /* TRUE if user provides efun            */
+  IDAEwtFn       ida_efun;           /* function to set ewt                   */
+  void          *ida_edata;          /* user pointer passed to efun           */
+  
+  /*-----------------------
+    Quadrature Related Data 
+    -----------------------*/
+
+  booleantype    ida_quadr;
+
+  IDAQuadRhsFn   ida_rhsQ;
+  void          *ida_user_dataQ;
+
+  booleantype    ida_errconQ;
+
+  int            ida_itolQ;
+  realtype       ida_rtolQ;
+  realtype       ida_SatolQ;    /* scalar absolute tolerance for quadratures  */
+  N_Vector       ida_VatolQ;    /* vector absolute tolerance for quadratures  */
+
+  /*------------------------
+    Sensitivity Related Data
+    ------------------------*/
+
+  booleantype    ida_sensi;
+  int            ida_Ns;
+  int            ida_ism;
+
+  IDASensResFn   ida_resS;
+  void          *ida_user_dataS;
+  booleantype    ida_resSDQ;
+
+  realtype      *ida_p;
+  realtype      *ida_pbar;
+  int           *ida_plist;
+  int            ida_DQtype;
+  realtype       ida_DQrhomax;
+
+  booleantype    ida_errconS;       /* TRUE if sensitivities in err. control  */
+
+  int            ida_itolS;
+  realtype       ida_rtolS;         /* relative tolerance for sensitivities   */
+  realtype       *ida_SatolS;       /* scalar absolute tolerances for sensi.  */
+  N_Vector       *ida_VatolS;       /* vector absolute tolerances for sensi.  */
+
+  /*-----------------------------------
+    Quadrature Sensitivity Related Data 
+    -----------------------------------*/
+
+  booleantype ida_quadr_sensi;   /* TRUE if computing sensitivities of quadrs.*/
+
+  IDAQuadSensRhsFn ida_rhsQS;    /* fQS = (dfQ/dy)*yS + (dfQ/dp)              */
+  void *ida_user_dataQS;         /* data pointer passed to fQS                */
+  booleantype ida_rhsQSDQ;       /* TRUE if using internal DQ functions       */
+
+  booleantype ida_errconQS;      /* TRUE if yQS are considered in err. con.   */
+
+  int ida_itolQS;
+  realtype ida_rtolQS;           /* relative tolerance for yQS                */
+  realtype *ida_SatolQS;         /* scalar absolute tolerances for yQS        */
+  N_Vector *ida_VatolQS;         /* vector absolute tolerances for yQS        */
+
+  /*-----------------------------------------------
+    Divided differences array and associated arrays
+    -----------------------------------------------*/
+
+  N_Vector ida_phi[MXORDP1];   /* phi = (maxord+1) arrays of divided differences */
+
+  realtype ida_psi[MXORDP1];   /* differences in t (sums of recent step sizes)   */
+  realtype ida_alpha[MXORDP1]; /* ratios of current stepsize to psi values       */
+  realtype ida_beta[MXORDP1];  /* ratios of current to previous product of psi's */
+  realtype ida_sigma[MXORDP1]; /* product successive alpha values and factorial  */
+  realtype ida_gamma[MXORDP1]; /* sum of reciprocals of psi values               */
+
+  /*-------------------------
+    N_Vectors for integration
+    -------------------------*/
+
+  N_Vector ida_ewt;          /* error weight vector                           */
+  N_Vector ida_yy;           /* work space for y vector (= user's yret)       */
+  N_Vector ida_yp;           /* work space for y' vector (= user's ypret)     */
+  N_Vector ida_delta;        /* residual vector                               */
+  N_Vector ida_id;           /* bit vector for diff./algebraic components     */
+  N_Vector ida_constraints;  /* vector of inequality constraint options       */
+  N_Vector ida_savres;       /* saved residual vector (= tempv1)              */
+  N_Vector ida_ee;           /* accumulated corrections to y vector, but
+                                set equal to estimated local errors upon
+                                successful return                             */
+  N_Vector ida_mm;           /* mask vector in constraints tests (= tempv2)   */
+  N_Vector ida_tempv1;       /* work space vector                             */
+  N_Vector ida_tempv2;       /* work space vector                             */
+  N_Vector ida_ynew;         /* work vector for y in IDACalcIC (= tempv2)     */
+  N_Vector ida_ypnew;        /* work vector for yp in IDACalcIC (= ee)        */
+  N_Vector ida_delnew;       /* work vector for delta in IDACalcIC (= phi[2]) */
+  N_Vector ida_dtemp;        /* work vector in IDACalcIC (= phi[3])           */
+
+
+  /*----------------------------
+    Quadrature Related N_Vectors 
+    ----------------------------*/
+
+  N_Vector ida_phiQ[MXORDP1];
+  N_Vector ida_yyQ;
+  N_Vector ida_ypQ;
+  N_Vector ida_ewtQ;
+  N_Vector ida_eeQ;
+
+  /*---------------------------
+    Sensitivity Related Vectors 
+    ---------------------------*/
+
+  N_Vector *ida_phiS[MXORDP1];
+  N_Vector *ida_ewtS;
+
+  N_Vector *ida_eeS;         /* cumulative sensitivity corrections            */
+
+  N_Vector *ida_yyS;         /* allocated and used for:                       */
+  N_Vector *ida_ypS;         /*                 ism = SIMULTANEOUS            */
+  N_Vector *ida_deltaS;      /*                 ism = STAGGERED               */
+
+  N_Vector ida_tmpS1;        /* work space vectors  | tmpS1 = tempv1          */
+  N_Vector ida_tmpS2;        /* for resS            | tmpS2 = tempv2          */
+  N_Vector ida_tmpS3;        /*                     | tmpS3 = allocated       */    
+
+  N_Vector *ida_savresS;     /* work vector in IDACalcIC for stg (= phiS[2])  */ 
+  N_Vector *ida_delnewS;     /* work vector in IDACalcIC for stg (= phiS[3])  */ 
+ 
+  N_Vector *ida_yyS0;        /* initial yS, ypS vectors allocated and         */
+  N_Vector *ida_ypS0;        /* deallocated in IDACalcIC function             */
+
+  N_Vector *ida_yyS0new;     /* work vector in IDASensLineSrch   (= phiS[4])  */
+  N_Vector *ida_ypS0new;     /* work vector in IDASensLineSrch   (= eeS)      */
+
+  /*--------------------------------------
+    Quadrature Sensitivity Related Vectors 
+    --------------------------------------*/
+
+  N_Vector *ida_phiQS[MXORDP1];/* Mod. div. diffs. for quadr. sensitivities   */
+  N_Vector *ida_ewtQS;         /* error weight vectors for sensitivities      */
+
+  N_Vector *ida_eeQS;          /* cumulative quadr.sensi.corrections          */
+
+  N_Vector *ida_yyQS;          /* Unlike yS, yQS is not allocated by the user */
+  N_Vector *ida_tempvQS;       /* temporary storage vector (~ tempv)          */
+  N_Vector ida_savrhsQ;        /* saved quadr. rhs (needed for rhsQS calls)   */
+
+  /*------------------------------ 
+    Variables for use by IDACalcIC
+    ------------------------------*/
+
+  realtype ida_t0;          /* initial t                                      */
+  N_Vector ida_yy0;         /* initial y vector (user-supplied).              */
+  N_Vector ida_yp0;         /* initial y' vector (user-supplied).             */
+
+  int ida_icopt;            /* IC calculation user option                     */
+  booleantype ida_lsoff;    /* IC calculation linesearch turnoff option       */
+  int ida_maxnh;            /* max. number of h tries in IC calculation       */
+  int ida_maxnj;            /* max. number of J tries in IC calculation       */
+  int ida_maxnit;           /* max. number of Netwon iterations in IC calc.   */
+  int ida_nbacktr;          /* number of IC linesearch backtrack operations   */
+  int ida_sysindex;         /* computed system index (0 or 1)                 */
+  int ida_maxbacks;         /* max backtracks per Newton step                 */
+  realtype ida_epiccon;     /* IC nonlinear convergence test constant         */
+  realtype ida_steptol;     /* minimum Newton step size in IC calculation     */
+  realtype ida_tscale;      /* time scale factor = abs(tout1 - t0)            */
+
+  /* Tstop information */
+
+  booleantype ida_tstopset;
+  realtype ida_tstop;
+
+  /* Step Data */
+
+  int ida_kk;        /* current BDF method order                              */
+  int ida_knew;      /* order for next step from order decrease decision      */
+  int ida_phase;     /* flag to trigger step doubling in first few steps      */
+  int ida_ns;        /* counts steps at fixed stepsize and order              */
+
+  realtype ida_hin;      /* initial step                                      */
+  realtype ida_hh;       /* current step size h                               */
+  realtype ida_rr;       /* rr = hnext / hused                                */
+  realtype ida_tn;       /* current internal value of t                       */
+  realtype ida_tretlast; /* value of tret previously returned by IDASolve     */
+  realtype ida_cj;       /* current value of scalar (-alphas/hh) in Jacobian  */
+  realtype ida_cjlast;   /* cj value saved from last successful step          */
+  realtype ida_cjold;    /* cj value saved from last call to lsetup           */
+  realtype ida_cjratio;  /* ratio of cj values: cj/cjold                      */
+  realtype ida_ss;       /* scalar used in Newton iteration convergence test  */
+  realtype ida_epsNewt;  /* test constant in Newton convergence test          */
+  realtype ida_epcon;    /* coeficient of the Newton covergence test          */
+  realtype ida_toldel;   /* tolerance in direct test on Newton corrections    */
+
+  realtype ida_ssS;      /* scalar ss for staggered sensitivities             */
+
+  /*------
+    Limits
+    ------*/
+
+  int ida_maxncf;        /* max numer of convergence failures                 */
+  int ida_maxcor;        /* max number of Newton corrections                  */
+  int ida_maxnef;        /* max number of error test failures                 */
+
+  int ida_maxord;        /* max value of method order k:                      */
+  int ida_maxord_alloc;  /* value of maxord used when allocating memory       */
+  long int ida_mxstep;   /* max number of internal steps for one user call    */
+  realtype ida_hmax_inv; /* inverse of max. step size hmax (default = 0.0)    */
+
+  int ida_maxcorS;       /* max number of Newton corrections for sensitivity
+			    systems (staggered method)                        */
+
+  /*--------
+    Counters
+    --------*/
+
+  long int ida_nst;      /* number of internal steps taken                    */
+
+  long int ida_nre;      /* number of function (res) calls                    */
+  long int ida_nrQe;
+  long int ida_nrSe;
+  long int ida_nrQSe;    /* number of fQS calls                               */
+  long int ida_nreS;
+  long int ida_nrQeS;    /* number of fQ calls from sensi DQ                  */
+
+
+  long int ida_ncfn;     /* number of corrector convergence failures          */
+  long int ida_ncfnQ;
+  long int ida_ncfnS;
+
+  long int ida_netf;     /* number of error test failures                     */
+  long int ida_netfQ;
+  long int ida_netfS;
+  long int ida_netfQS;   /* number of quadr. sensi. error test failures  */
+
+  long int ida_nni;      /* number of Newton iterations performed             */
+  long int ida_nniS;
+
+  long int ida_nsetups;  /* number of lsetup calls                            */
+  long int ida_nsetupsS;
+  
+  /*---------------------------
+    Space requirements for IDAS
+    ---------------------------*/
+
+  long int ida_lrw1;     /* no. of realtype words in 1 N_Vector               */
+  long int ida_liw1;     /* no. of integer words in 1 N_Vector                */
+  long int ida_lrw1Q;
+  long int ida_liw1Q;
+  long int ida_lrw;      /* number of realtype words in IDA work vectors      */
+  long int ida_liw;      /* no. of integer words in IDA work vectors          */
+
+
+  /*-------------------------------------------
+    Error handler function and error ouput file 
+    -------------------------------------------*/
+
+  IDAErrHandlerFn ida_ehfun;  /* Error messages are handled by ehfun           */
+  void *ida_eh_data;          /* dats pointer passed to ehfun                  */
+  FILE *ida_errfp;            /* IDA error messages are sent to errfp          */
+
+  /* Flags to verify correct calling sequence */
+    
+  booleantype ida_SetupDone;     /* set to FALSE by IDAInit and IDAReInit
+				    set to TRUE by IDACalcIC or IDASolve       */
+
+  booleantype ida_VatolMallocDone;
+  booleantype ida_constraintsMallocDone;
+  booleantype ida_idMallocDone;
+
+  booleantype ida_MallocDone;    /* set to FALSE by IDACreate
+				    set to TRUE by IDAInit
+				    tested by IDAReInit and IDASolve           */
+
+  booleantype ida_VatolQMallocDone;
+  booleantype ida_quadMallocDone;
+
+  booleantype ida_VatolSMallocDone;
+  booleantype ida_SatolSMallocDone;
+  booleantype ida_sensMallocDone;
+
+  booleantype ida_VatolQSMallocDone;
+  booleantype ida_SatolQSMallocDone;
+  booleantype ida_quadSensMallocDone;
+
+  /*------------------
+    Linear Solver Data
+    ------------------*/
+
+  /* Linear Solver functions to be called */
+
+  int (*ida_linit)(struct IDAMemRec *idamem);
+
+  int (*ida_lsetup)(struct IDAMemRec *idamem, N_Vector yyp, 
+		    N_Vector ypp, N_Vector resp, 
+		    N_Vector tempv1, N_Vector tempv2, N_Vector tempv3); 
+
+  int (*ida_lsolve)(struct IDAMemRec *idamem, N_Vector b, N_Vector weight,
+		    N_Vector ycur, N_Vector ypcur, N_Vector rescur);
+
+  int (*ida_lperf)(struct IDAMemRec *idamem, int perftask);
+
+  int (*ida_lfree)(struct IDAMemRec *idamem);
+
+  /* Linear Solver specific memory */
+
+  void *ida_lmem;           
+
+  /* Flag to request a call to the setup routine */
+  
+  booleantype ida_forceSetup;
+
+  /* Flag to indicate successful ida_linit call */
+
+  booleantype ida_linitOK;
+
+  /*------------
+    Saved Values
+    ------------*/
+
+  booleantype    ida_setupNonNull;   /* Does setup do something?              */
+  booleantype    ida_constraintsSet; /* constraints vector present            */
+  booleantype    ida_suppressalg;    /* TRUE if suppressing algebraic vars.
+					in local error tests                  */
+  int ida_kused;         /* method order used on last successful step         */
+  realtype ida_h0u;      /* actual initial stepsize                           */
+  realtype ida_hused;    /* step size used on last successful step            */
+  realtype ida_tolsf;    /* tolerance scale factor (saved value)              */
+
+  /*----------------
+    Rootfinding Data
+    ----------------*/
+
+  IDARootFn ida_gfun;    /* Function g for roots sought                       */
+  int ida_nrtfn;         /* number of components of g                         */
+  int *ida_iroots;       /* array for root information                        */
+  int *ida_rootdir;      /* array specifying direction of zero-crossing       */
+  realtype ida_tlo;      /* nearest endpoint of interval in root search       */
+  realtype ida_thi;      /* farthest endpoint of interval in root search      */
+  realtype ida_trout;    /* t return value from rootfinder routine            */
+  realtype *ida_glo;     /* saved array of g values at t = tlo                */
+  realtype *ida_ghi;     /* saved array of g values at t = thi                */
+  realtype *ida_grout;   /* array of g values at t = trout                    */
+  realtype ida_toutc;    /* copy of tout (if NORMAL mode)                     */
+  realtype ida_ttol;     /* tolerance on root location                        */
+  int ida_taskc;         /* copy of parameter itask                           */
+  int ida_irfnd;         /* flag showing whether last step had a root         */
+  long int ida_nge;      /* counter for g evaluations                         */
+  booleantype *ida_gactive; /* array with active/inactive event functions     */
+  int ida_mxgnull;       /* number of warning messages about possible g==0    */
+
+  /*------------------------
+    Adjoint sensitivity data
+    ------------------------*/
+
+  booleantype ida_adj;              /* TRUE if performing ASA                 */
+
+  struct IDAadjMemRec *ida_adj_mem; /* Pointer to adjoint memory structure    */
+
+  booleantype ida_adjMallocDone;
+
+} *IDAMem;
+
+/* 
+ * =================================================================
+ *   A D J O I N T   M O D U L E    M E M O R Y    B L O C K
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Forward references for pointers to various structures 
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDAadjMemRec *IDAadjMem;
+typedef struct CkpntMemRec *CkpntMem;
+typedef struct DtpntMemRec *DtpntMem;
+typedef struct IDABMemRec *IDABMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Types for functions provided by an interpolation module
+ * -----------------------------------------------------------------
+ * IDAAMMallocFn: Type for a function that initializes the content
+ *                field of the structures in the dt array
+ * IDAAMFreeFn:   Type for a function that deallocates the content
+ *                field of the structures in the dt array
+ * IDAAGetYFn:    Function type for a function that returns the 
+ *                interpolated forward solution.
+ * IDAAStorePnt:  Function type for a function that stores a new
+ *                point in the structure d
+ * -----------------------------------------------------------------
+ */
+
+typedef booleantype (*IDAAMMallocFn)(IDAMem IDA_mem);
+typedef void (*IDAAMFreeFn)(IDAMem IDA_mem);
+typedef int (*IDAAGetYFn)(IDAMem IDA_mem, realtype t, 
+                          N_Vector yy, N_Vector yp, 
+                          N_Vector *yyS, N_Vector *ypS);
+typedef int (*IDAAStorePntFn)(IDAMem IDA_mem, DtpntMem d);
+
+/*
+ * -----------------------------------------------------------------
+ * Types : struct CkpntMemRec, CkpntMem
+ * -----------------------------------------------------------------
+ * The type CkpntMem is type pointer to struct CkpntMemRec.
+ * This structure contains fields to store all information at a
+ * check point that is needed to 'hot' start IDAS.
+ * -----------------------------------------------------------------
+ */
+
+struct CkpntMemRec {
+
+  /* Integration limits */
+  realtype ck_t0;
+  realtype ck_t1;
+    
+  /* Modified divided difference array */
+  N_Vector ck_phi[MXORDP1];
+
+  /* Do we need to carry quadratures? */
+  booleantype ck_quadr;
+
+  /* Modified divided difference array for quadratures */
+  N_Vector ck_phiQ[MXORDP1];
+    
+  /* Do we need to carry sensitivities? */
+  booleantype ck_sensi;
+
+  /* number of sensitivities */
+  int ck_Ns;
+
+  /* Modified divided difference array for sensitivities */
+  N_Vector *ck_phiS[MXORDP1];
+
+  /* Do we need to carry quadrature sensitivities? */
+  booleantype ck_quadr_sensi;
+
+  /* Modified divided difference array for quadrature sensitivities */
+  N_Vector *ck_phiQS[MXORDP1];
+
+
+  /* Step data */
+  long int     ck_nst;
+  realtype     ck_tretlast; 
+  long int     ck_ns;
+  int          ck_kk;
+  int          ck_kused;
+  int          ck_knew;
+  int          ck_phase;
+    
+  realtype     ck_hh;
+  realtype     ck_hused;
+  realtype     ck_rr;
+  realtype     ck_cj;
+  realtype     ck_cjlast;
+  realtype     ck_cjold;
+  realtype     ck_cjratio;
+  realtype     ck_ss;
+  realtype     ck_ssS;
+
+  realtype     ck_psi[MXORDP1];
+  realtype     ck_alpha[MXORDP1];
+  realtype     ck_beta[MXORDP1];
+  realtype     ck_sigma[MXORDP1];
+  realtype     ck_gamma[MXORDP1];
+
+  /* How many phi, phiS, phiQ and phiQS were allocated? */
+  int          ck_phi_alloc;
+        
+  /* Pointer to next structure in list */
+  struct CkpntMemRec *ck_next;    
+};
+
+/*
+ * -----------------------------------------------------------------
+ * Type : struct DtpntMemRec
+ * -----------------------------------------------------------------
+ * This structure contains fields to store all information at a
+ * data point that is needed to interpolate solution of forward
+ * simulations. Its content field is interpType-dependent.
+ * -----------------------------------------------------------------
+ */
+  
+struct DtpntMemRec {
+  realtype t;    /* time */
+  void *content; /* interpType-dependent content */
+};
+
+/* Data for cubic Hermite interpolation */
+typedef struct HermiteDataMemRec {
+  N_Vector y;
+  N_Vector yd;
+  N_Vector *yS;
+  N_Vector *ySd;
+} *HermiteDataMem;
+
+/* Data for polynomial interpolation */
+typedef struct PolynomialDataMemRec {
+  N_Vector y;
+  N_Vector *yS;
+
+  /* yd and ySd store the derivative(s) only for the first dt 
+     point. NULL otherwise. */
+  N_Vector yd;   
+  N_Vector *ySd;
+  int order;
+} *PolynomialDataMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Type : struct IDABMemRec
+ * -----------------------------------------------------------------
+ * The type IDABMemRec is a pointer to a structure which stores all
+ * information for ONE backward problem.
+ * The IDAadjMem struct contains a linked list of IDABMem pointers
+ * -----------------------------------------------------------------
+ */
+struct IDABMemRec {
+
+  /* Index of this backward problem */
+  int ida_index;
+
+  /* Time at which the backward problem is initialized. */
+  realtype ida_t0;
+
+  /* Memory for this backward problem */
+  IDAMem IDA_mem;
+
+  /* Flags to indicate that this backward problem's RHS or quad RHS
+   * require forward sensitivities */
+  booleantype ida_res_withSensi;
+  booleantype ida_rhsQ_withSensi;
+
+  /* Residual function for backward run */
+  IDAResFnB   ida_res;
+  IDAResFnBS  ida_resS;
+
+  /* Right hand side quadrature function (fQB) for backward run */
+  IDAQuadRhsFnB   ida_rhsQ;
+  IDAQuadRhsFnBS  ida_rhsQS;
+  
+  /* User user_data */
+  void *ida_user_data;
+    
+  /* Linear solver's data and functions */
+
+  /* Memory block for a linear solver's interface to IDAA */
+  void *ida_lmem;
+
+  /* Function to free any memory allocated by the linear solver */
+  int (*ida_lfree)(IDABMem IDAB_mem);
+
+  /* Memory block for a preconditioner's module interface to IDAA */ 
+  void *ida_pmem;
+
+  /* Function to free any memory allocated by the preconditioner module */
+  int (*ida_pfree)(IDABMem IDAB_mem);
+
+  /* Time at which to extract solution / quadratures */
+  realtype ida_tout;
+
+  /* Workspace Nvectors */
+  N_Vector ida_yy;
+  N_Vector ida_yp;
+
+  /* Link to next structure in list. */
+  struct IDABMemRec *ida_next;
+};
+
+
+/*
+ * -----------------------------------------------------------------
+ * Type : struct IDAadjMemRec
+ * -----------------------------------------------------------------
+ * The type IDAadjMem is type pointer to struct IDAadjMemRec.
+ * This structure contins fields to store all information
+ * necessary for adjoint sensitivity analysis.
+ * -----------------------------------------------------------------
+ */
+
+struct IDAadjMemRec {
+    
+  /* --------------------
+   * Forward problem data
+   * -------------------- */
+  
+  /* Integration interval */
+  realtype ia_tinitial, ia_tfinal;
+
+  /* Flag for first call to IDASolveF */
+  booleantype ia_firstIDAFcall;
+
+  /* Flag if IDASolveF was called with TSTOP */
+  booleantype ia_tstopIDAFcall;
+  realtype ia_tstopIDAF;
+
+  /* ----------------------
+   * Backward problems data
+   * ---------------------- */
+
+  /* Storage for backward problems */
+  struct IDABMemRec *IDAB_mem;
+
+  /* Number of backward problems. */
+  int ia_nbckpbs;
+
+  /* Address of current backward problem (iterator). */
+  struct IDABMemRec *ia_bckpbCrt; 
+
+  /* Flag for first call to IDASolveB */
+  booleantype ia_firstIDABcall;
+
+  /* ----------------
+   * Check point data
+   * ---------------- */
+    
+  /* Storage for check point information */
+  struct CkpntMemRec *ck_mem;
+
+  /* address of the check point structure for which data is available */
+  struct CkpntMemRec *ia_ckpntData;
+
+  /* Number of checkpoints. */
+  int ia_nckpnts;
+
+  /* ------------------
+   * Interpolation data
+   * ------------------ */
+
+  /* Number of steps between 2 check points */
+  long int ia_nsteps;
+    
+  /* Storage for data from forward runs */
+  struct DtpntMemRec **dt_mem;
+    
+  /* Actual number of data points saved in current dt_mem */
+  /* Commonly, np = nsteps+1                              */
+  long int ia_np;
+
+  /* Interpolation type */
+  int ia_interpType;
+
+
+  /* Functions set by the interpolation module */
+  IDAAStorePntFn ia_storePnt; /* store a new interpolation point */
+  IDAAGetYFn     ia_getY;     /* interpolate forward solution    */
+  IDAAMMallocFn  ia_malloc;   /* allocate new data point         */
+  IDAAMFreeFn    ia_free;     /* destroys data point             */
+
+  /* Flags controlling the interpolation module */
+  booleantype ia_mallocDone;   /* IM initialized?                */
+  booleantype ia_newData;      /* new data available in dt_mem?  */
+  booleantype ia_storeSensi;   /* store sensitivities?           */
+  booleantype ia_interpSensi;  /* interpolate sensitivities?     */
+
+  booleantype ia_noInterp;     /* interpolations are temporarly  */
+                               /* disabled ( IDACalcICB )        */
+
+  /* Workspace for polynomial interpolation */
+  N_Vector ia_Y[MXORDP1];      /* pointers  phi[i]               */
+  N_Vector *ia_YS[MXORDP1];    /* pointers phiS[i]               */
+  realtype ia_T[MXORDP1];
+
+  /* Workspace for wrapper functions */
+  N_Vector ia_yyTmp, ia_ypTmp;
+  N_Vector *ia_yySTmp, *ia_ypSTmp;
+    
+};
+
+
+/*
+ * =================================================================
+ *     I N T E R F A C E   T O    L I N E A R   S O L V E R S     
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * int (*ida_linit)(IDAMem IDA_mem);                               
+ * -----------------------------------------------------------------
+ * The purpose of ida_linit is to allocate memory for the          
+ * solver-specific fields in the structure *(idamem->ida_lmem) and 
+ * perform any needed initializations of solver-specific memory,   
+ * such as counters/statistics. An (*ida_linit) should return      
+ * 0 if it has successfully initialized the IDA linear solver and 
+ * a non-zero value otherwise. If an error does occur, an 
+ * appropriate message should be issued.
+ * ----------------------------------------------------------------
+ */                                                                 
+
+/*
+ * -----------------------------------------------------------------
+ * int (*ida_lsetup)(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,   
+ *                  N_Vector resp,                                 
+ *            N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);  
+ * -----------------------------------------------------------------
+ * The job of ida_lsetup is to prepare the linear solver for       
+ * subsequent calls to ida_lsolve. Its parameters are as follows:  
+ *                                                                 
+ * idamem - problem memory pointer of type IDAMem. See the big     
+ *          typedef earlier in this file.                          
+ *                                                                 
+ *                                                                 
+ * yyp   - the predicted y vector for the current IDA internal     
+ *         step.                                                   
+ *                                                                 
+ * ypp   - the predicted y' vector for the current IDA internal    
+ *         step.                                                   
+ *                                                                 
+ * resp  - F(tn, yyp, ypp).                                        
+ *                                                                 
+ * tempv1, tempv2, tempv3 - temporary N_Vectors provided for use   
+ *         by ida_lsetup.                                          
+ *                                                                 
+ * The ida_lsetup routine should return 0 if successful,
+ * a positive value for a recoverable error, and a negative value 
+ * for an unrecoverable error.
+ * -----------------------------------------------------------------
+ */                                                                 
+
+/*
+ * -----------------------------------------------------------------
+ * int (*ida_lsolve)(IDAMem IDA_mem, N_Vector b, N_Vector weight,  
+ *               N_Vector ycur, N_Vector ypcur, N_Vector rescur);  
+ * -----------------------------------------------------------------
+ * ida_lsolve must solve the linear equation P x = b, where        
+ * P is some approximation to the system Jacobian                  
+ *                  J = (dF/dy) + cj (dF/dy')                      
+ * evaluated at (tn,ycur,ypcur) and the RHS vector b is input.     
+ * The N-vector ycur contains the solver's current approximation   
+ * to y(tn), ypcur contains that for y'(tn), and the vector rescur 
+ * contains the N-vector residual F(tn,ycur,ypcur).                
+ * The solution is to be returned in the vector b. 
+ *                                                                 
+ * The ida_lsolve routine should return 0 if successful,
+ * a positive value for a recoverable error, and a negative value 
+ * for an unrecoverable error.
+ * -----------------------------------------------------------------
+ */                                                                 
+
+/*
+ * -----------------------------------------------------------------
+ * int (*ida_lperf)(IDAMem IDA_mem, int perftask);                 
+ * -----------------------------------------------------------------
+ * ida_lperf is called two places in IDAS where linear solver       
+ * performance data is required by IDAS. For perftask = 0, an       
+ * initialization of performance variables is performed, while for 
+ * perftask = 1, the performance is evaluated.                     
+ * -----------------------------------------------------------------
+ */                                                                 
+
+/*
+ * =================================================================
+ *   I D A S    I N T E R N A L   F U N C T I O N S
+ * =================================================================
+ */
+
+/* Prototype of internal ewtSet function */
+
+int IDAEwtSet(N_Vector ycur, N_Vector weight, void *data);
+
+/* High level error handler */
+
+void IDAProcessError(IDAMem IDA_mem, 
+		     int error_code, const char *module, const char *fname, 
+		     const char *msgfmt, ...);
+
+/* Prototype of internal errHandler function */
+
+void IDAErrHandler(int error_code, const char *module, const char *function, 
+		   char *msg, void *data);
+
+/* Prototype for internal sensitivity residual DQ function */
+
+int IDASensResDQ(int Ns, realtype t, 
+		 N_Vector yy, N_Vector yp, N_Vector resval,
+		 N_Vector *yyS, N_Vector *ypS, N_Vector *resvalS,
+		 void *user_dataS,
+		 N_Vector ytemp, N_Vector yptemp, N_Vector restemp);
+
+/*
+ * =================================================================
+ *    I D A S    E R R O R    M E S S A G E S
+ * =================================================================
+ */
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define MSG_TIME "t = %Lg, "
+#define MSG_TIME_H "t = %Lg and h = %Lg, "
+#define MSG_TIME_INT "t = %Lg is not between tcur - hu = %Lg and tcur = %Lg."
+#define MSG_TIME_TOUT "tout = %Lg"
+#define MSG_TIME_TSTOP "tstop = %Lg"
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define MSG_TIME "t = %lg, "
+#define MSG_TIME_H "t = %lg and h = %lg, "
+#define MSG_TIME_INT "t = %lg is not between tcur - hu = %lg and tcur = %lg."
+#define MSG_TIME_TOUT "tout = %lg"
+#define MSG_TIME_TSTOP "tstop = %lg"
+
+#else
+
+#define MSG_TIME "t = %g, "
+#define MSG_TIME_H "t = %g and h = %g, "
+#define MSG_TIME_INT "t = %g is not between tcur - hu = %g and tcur = %g."
+#define MSG_TIME_TOUT "tout = %g"
+#define MSG_TIME_TSTOP "tstop = %g"
+
+#endif
+
+/* General errors */
+
+#define MSG_MEM_FAIL       "A memory request failed."
+#define MSG_NO_MEM         "ida_mem = NULL illegal."
+#define MSG_NO_MALLOC      "Attempt to call before IDAMalloc."
+#define MSG_BAD_NVECTOR    "A required vector operation is not implemented."
+
+/* Initialization errors */
+
+#define MSG_Y0_NULL        "y0 = NULL illegal."
+#define MSG_YP0_NULL       "yp0 = NULL illegal."
+#define MSG_BAD_ITOL       "Illegal value for itol. The legal values are IDA_SS, IDA_SV, and IDA_WF."
+#define MSG_RES_NULL       "res = NULL illegal."
+#define MSG_BAD_RTOL       "rtol < 0 illegal."
+#define MSG_ATOL_NULL      "atol = NULL illegal."
+#define MSG_BAD_ATOL       "Some atol component < 0.0 illegal."
+#define MSG_ROOT_FUNC_NULL "g = NULL illegal."
+
+#define MSG_MISSING_ID     "id = NULL but suppressalg option on."
+#define MSG_NO_TOLS        "No integration tolerances have been specified."
+#define MSG_FAIL_EWT       "The user-provide EwtSet function failed."
+#define MSG_BAD_EWT        "Some initial ewt component = 0.0 illegal."
+#define MSG_Y0_FAIL_CONSTR "y0 fails to satisfy constraints."
+#define MSG_BAD_ISM_CONSTR "Constraints can not be enforced while forward sensitivity is used with simultaneous method."
+#define MSG_LSOLVE_NULL    "The linear solver's solve routine is NULL."
+#define MSG_LINIT_FAIL     "The linear solver's init routine failed."
+
+#define MSG_NO_QUAD        "Illegal attempt to call before calling IDAQuadInit."
+#define MSG_BAD_EWTQ       "Initial ewtQ has component(s) equal to zero (illegal)."
+#define MSG_BAD_ITOLQ      "Illegal value for itolQ. The legal values are IDA_SS and IDA_SV."
+#define MSG_NO_TOLQ        "No integration tolerances for quadrature variables have been specified."
+#define MSG_NULL_ATOLQ     "atolQ = NULL illegal."
+#define MSG_BAD_RTOLQ      "rtolQ < 0 illegal."
+#define MSG_BAD_ATOLQ      "atolQ has negative component(s) (illegal)."  
+
+#define MSG_NO_SENSI       "Illegal attempt to call before calling IDASensInit."
+#define MSG_BAD_EWTS       "Initial ewtS has component(s) equal to zero (illegal)."
+#define MSG_BAD_ITOLS      "Illegal value for itolS. The legal values are IDA_SS, IDA_SV, and IDA_EE."
+#define MSG_NULL_ATOLS     "atolS = NULL illegal."
+#define MSG_BAD_RTOLS      "rtolS < 0 illegal."
+#define MSG_BAD_ATOLS      "atolS has negative component(s) (illegal)."  
+#define MSG_BAD_PBAR       "pbar has zero component(s) (illegal)."
+#define MSG_BAD_PLIST      "plist has negative component(s) (illegal)."
+#define MSG_BAD_NS         "NS <= 0 illegal."
+#define MSG_NULL_YYS0      "yyS0 = NULL illegal."
+#define MSG_NULL_YPS0      "ypS0 = NULL illegal."
+#define MSG_BAD_ISM        "Illegal value for ism. Legal values are: IDA_SIMULTANEOUS and IDA_STAGGERED."
+#define MSG_BAD_IS         "Illegal value for is."
+#define MSG_NULL_DKYA      "dkyA = NULL illegal."
+#define MSG_BAD_DQTYPE     "Illegal value for DQtype. Legal values are: IDA_CENTERED and IDA_FORWARD."
+#define MSG_BAD_DQRHO      "DQrhomax < 0 illegal."
+
+#define MSG_NULL_ABSTOLQS  "abstolQS = NULL illegal parameter."
+#define MSG_BAD_RELTOLQS   "reltolQS < 0 illegal parameter."
+#define MSG_BAD_ABSTOLQS   "abstolQS has negative component(s) (illegal)."  
+#define MSG_NO_QUADSENSI   "Forward sensitivity analysis for quadrature variables was not activated."
+#define MSG_NULL_YQS0      "yQS0 = NULL illegal parameter."
+
+
+/* IDACalcIC error messages */
+
+#define MSG_IC_BAD_ICOPT   "icopt has an illegal value."
+#define MSG_IC_BAD_MAXBACKS "maxbacks <= 0 illegal."
+#define MSG_IC_MISSING_ID  "id = NULL conflicts with icopt."
+#define MSG_IC_TOO_CLOSE   "tout1 too close to t0 to attempt initial condition calculation."
+#define MSG_IC_BAD_ID      "id has illegal values."
+#define MSG_IC_BAD_EWT     "Some initial ewt component = 0.0 illegal."
+#define MSG_IC_RES_NONREC  "The residual function failed unrecoverably. "
+#define MSG_IC_RES_FAIL    "The residual function failed at the first call. "
+#define MSG_IC_SETUP_FAIL  "The linear solver setup failed unrecoverably."
+#define MSG_IC_SOLVE_FAIL  "The linear solver solve failed unrecoverably."
+#define MSG_IC_NO_RECOVERY "The residual routine or the linear setup or solve routine had a recoverable error, but IDACalcIC was unable to recover."
+#define MSG_IC_FAIL_CONSTR "Unable to satisfy the inequality constraints."
+#define MSG_IC_FAILED_LINS "The linesearch algorithm failed: step too small or too many backtracks."
+#define MSG_IC_CONV_FAILED "Newton/Linesearch algorithm failed to converge."
+
+/* IDASolve error messages */
+
+#define MSG_YRET_NULL      "yret = NULL illegal."
+#define MSG_YPRET_NULL     "ypret = NULL illegal."
+#define MSG_TRET_NULL      "tret = NULL illegal."
+#define MSG_BAD_ITASK      "itask has an illegal value."
+#define MSG_TOO_CLOSE      "tout too close to t0 to start integration."
+#define MSG_BAD_HINIT      "Initial step is not towards tout."
+#define MSG_BAD_TSTOP      "The value " MSG_TIME_TSTOP " is behind current " MSG_TIME "in the direction of integration."
+#define MSG_CLOSE_ROOTS    "Root found at and very near " MSG_TIME "."
+#define MSG_MAX_STEPS      "At " MSG_TIME ", mxstep steps taken before reaching tout." 
+#define MSG_EWT_NOW_FAIL   "At " MSG_TIME "the user-provide EwtSet function failed."
+#define MSG_EWT_NOW_BAD    "At " MSG_TIME "some ewt component has become <= 0.0."
+#define MSG_TOO_MUCH_ACC   "At " MSG_TIME "too much accuracy requested."
+
+#define MSG_BAD_T          "Illegal value for t. " MSG_TIME_INT
+#define MSG_BAD_TOUT       "Trouble interpolating at " MSG_TIME_TOUT ". tout too far back in direction of integration."
+
+#define MSG_BAD_K        "Illegal value for k."
+#define MSG_NULL_DKY     "dky = NULL illegal."
+#define MSG_NULL_DKYP    "dkyp = NULL illegal."
+
+#define MSG_ERR_FAILS      "At " MSG_TIME_H "the error test failed repeatedly or with |h| = hmin."
+#define MSG_CONV_FAILS     "At " MSG_TIME_H "the corrector convergence failed repeatedly or with |h| = hmin."
+#define MSG_SETUP_FAILED   "At " MSG_TIME "the linear solver setup failed unrecoverably."
+#define MSG_SOLVE_FAILED   "At " MSG_TIME "the linear solver solve failed unrecoverably."
+#define MSG_REP_RES_ERR    "At " MSG_TIME "repeated recoverable residual errors."
+#define MSG_RES_NONRECOV   "At " MSG_TIME "the residual function failed unrecoverably."
+#define MSG_FAILED_CONSTR  "At " MSG_TIME "unable to satisfy inequality constraints."
+#define MSG_RTFUNC_FAILED  "At " MSG_TIME ", the rootfinding routine failed in an unrecoverable manner."
+#define MSG_NO_ROOT        "Rootfinding was not initialized."
+#define MSG_INACTIVE_ROOTS "At the end of the first step, there are still some root functions identically 0. This warning will not be issued again."
+
+#define MSG_EWTQ_NOW_BAD "At " MSG_TIME ", a component of ewtQ has become <= 0."
+#define MSG_QRHSFUNC_FAILED "At " MSG_TIME ", the quadrature right-hand side routine failed in an unrecoverable manner."
+#define MSG_QRHSFUNC_UNREC "At " MSG_TIME ", the quadrature right-hand side failed in a recoverable manner, but no recovery is possible."
+#define MSG_QRHSFUNC_REPTD "At " MSG_TIME "repeated recoverable quadrature right-hand side function errors."
+#define MSG_QRHSFUNC_FIRST "The quadrature right-hand side routine failed at the first call."
+
+#define MSG_NULL_P "p = NULL when using internal DQ for sensitivity residual is illegal."
+#define MSG_EWTS_NOW_BAD "At " MSG_TIME ", a component of ewtS has become <= 0."
+#define MSG_SRHSFUNC_FAILED "At " MSG_TIME ", the sensitivity residual routine failed in an unrecoverable manner."
+#define MSG_SRHSFUNC_UNREC "At " MSG_TIME ", the sensitivity residual failed in a recoverable manner, but no recovery is possible."
+#define MSG_SRHSFUNC_REPTD "At " MSG_TIME "repeated recoverable sensitivity residual function errors."
+
+#define MSG_NO_TOLQS  "No integration tolerances for quadrature sensitivity variables have been specified."
+#define MSG_NULL_RHSQ "IDAS is expected to use DQ to evaluate the RHS of quad. sensi., but quadratures were not initialized."
+#define MSG_BAD_EWTQS "Initial ewtQS has component(s) equal to zero (illegal)."
+#define MSG_EWTQS_NOW_BAD "At " MSG_TIME ", a component of ewtQS has become <= 0."
+#define MSG_QSRHSFUNC_FAILED "At " MSG_TIME ", the sensitivity quadrature right-hand side routine failed in an unrecoverable manner."
+#define MSG_QSRHSFUNC_FIRST "The quadrature right-hand side routine failed at the first call."
+
+/* IDASet* / IDAGet* error messages */
+#define MSG_NEG_MAXORD     "maxord<=0 illegal."
+#define MSG_BAD_MAXORD     "Illegal attempt to increase maximum order."
+#define MSG_NEG_HMAX       "hmax < 0 illegal."
+#define MSG_NEG_EPCON      "epcon <= 0.0 illegal."
+#define MSG_BAD_CONSTR     "Illegal values in constraints vector."
+#define MSG_BAD_EPICCON    "epiccon <= 0.0 illegal."
+#define MSG_BAD_MAXNH      "maxnh <= 0 illegal."
+#define MSG_BAD_MAXNJ      "maxnj <= 0 illegal."
+#define MSG_BAD_MAXNIT     "maxnit <= 0 illegal."
+#define MSG_BAD_STEPTOL    "steptol <= 0.0 illegal."
+
+#define MSG_TOO_LATE       "IDAGetConsistentIC can only be called before IDASolve."
+
+/*
+ * =================================================================
+ *    I D A A    E R R O R    M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGAM_NULL_IDAMEM  "ida_mem = NULL illegal."
+#define MSGAM_NO_ADJ       "Illegal attempt to call before calling IDAadjInit."
+#define MSGAM_BAD_INTERP   "Illegal value for interp."
+#define MSGAM_BAD_STEPS    "Steps nonpositive illegal."
+#define MSGAM_BAD_WHICH    "Illegal value for which."
+#define MSGAM_NO_BCK       "No backward problems have been defined yet."
+#define MSGAM_NO_FWD       "Illegal attempt to call before calling IDASolveF."
+#define MSGAM_BAD_TB0      "The initial time tB0 is outside the interval over which the forward problem was solved."
+#define MSGAM_BAD_SENSI    "At least one backward problem requires sensitivities, but they were not stored for interpolation."
+#define MSGAM_BAD_ITASKB   "Illegal value for itaskB. Legal values are IDA_NORMAL and IDA_ONE_STEP."
+#define MSGAM_BAD_TBOUT    "The final time tBout is outside the interval over which the forward problem was solved."
+#define MSGAM_BACK_ERROR   "Error occured while integrating backward problem # %d" 
+#define MSGAM_BAD_TINTERP  "Bad t = %g for interpolation."
+#define MSGAM_BAD_T        "Bad t for interpolation."
+#define MSGAM_WRONG_INTERP "This function cannot be called for the specified interp type."
+#define MSGAM_MEM_FAIL     "A memory request failed."
+#define MSGAM_NO_INITBS    "Illegal attempt to call before calling IDAInitBS."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/idas/idas_io.c b/src/idas/idas_io.c
new file mode 100644
index 0000000..cbd8722
--- /dev/null
+++ b/src/idas/idas_io.c
@@ -0,0 +1,1924 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4539 $
+ * $Date: 2015-09-16 15:39:33 -0700 (Wed, 16 Sep 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Cosmin Petra @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the optional inputs and     
+ * outputs for the IDAS solver.                                    
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "idas_impl.h"
+#include <sundials/sundials_math.h>
+#include <sundials/sundials_types.h>
+
+#define ZERO    RCONST(0.0)
+#define HALF    RCONST(0.5)
+#define ONE     RCONST(1.0)
+#define TWOPT5  RCONST(2.5)
+
+/* 
+ * =================================================================
+ * IDA optional input functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define lrw  (IDA_mem->ida_lrw)
+#define liw  (IDA_mem->ida_liw)
+#define lrw1 (IDA_mem->ida_lrw1)
+#define liw1 (IDA_mem->ida_liw1)
+
+int IDASetErrHandlerFn(void *ida_mem, IDAErrHandlerFn ehfun, void *eh_data)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetErrHandlerFn", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_ehfun = ehfun;
+  IDA_mem->ida_eh_data = eh_data;
+
+  return(IDA_SUCCESS);
+}
+
+
+int IDASetErrFile(void *ida_mem, FILE *errfp)
+{
+  IDAMem IDA_mem;
+  
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetErrFile", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_errfp = errfp;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetUserData(void *ida_mem, void *user_data)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetUserData", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_user_data = user_data;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxOrd(void *ida_mem, int maxord)
+{
+  IDAMem IDA_mem;
+  int maxord_alloc;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetMaxOrd", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (maxord <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetMaxOrd", MSG_NEG_MAXORD);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Cannot increase maximum order beyond the value that
+     was used when allocating memory */
+  maxord_alloc = IDA_mem->ida_maxord_alloc;
+
+  if (maxord > maxord_alloc) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetMaxOrd", MSG_BAD_MAXORD);
+    return(IDA_ILL_INPUT);
+  }  
+
+  IDA_mem->ida_maxord = SUNMIN(maxord,MAXORD_DEFAULT);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxNumSteps(void *ida_mem, long int mxsteps)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetMaxNumSteps", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Passing mxsteps=0 sets the default. Passing mxsteps<0 disables the test. */
+
+  if (mxsteps == 0)
+    IDA_mem->ida_mxstep = MXSTEP_DEFAULT;
+  else
+    IDA_mem->ida_mxstep = mxsteps;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetInitStep(void *ida_mem, realtype hin)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetInitStep", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_hin = hin;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxStep(void *ida_mem, realtype hmax)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetMaxStep", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (hmax < 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetMaxStep", MSG_NEG_HMAX);
+    return(IDA_ILL_INPUT);
+  }
+
+  /* Passing 0 sets hmax = infinity */
+  if (hmax == ZERO) {
+    IDA_mem->ida_hmax_inv = HMAX_INV_DEFAULT;
+    return(IDA_SUCCESS);
+  }
+
+  IDA_mem->ida_hmax_inv = ONE/hmax;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetStopTime(void *ida_mem, realtype tstop)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetStopTime", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* If IDASolve was called at least once, test if tstop is legal
+   * (i.e. if it was not already passed).
+   * If IDASetStopTime is called before the first call to IDASolve,
+   * tstop will be checked in IDASolve. */
+  if (IDA_mem->ida_nst > 0) {
+
+    if ( (tstop - IDA_mem->ida_tn) * IDA_mem->ida_hh < ZERO ) {
+      IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetStopTime", MSG_BAD_TSTOP, tstop, IDA_mem->ida_tn);
+      return(IDA_ILL_INPUT);
+    }
+
+  }
+
+  IDA_mem->ida_tstop = tstop;
+  IDA_mem->ida_tstopset = TRUE;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetNonlinConvCoef(void *ida_mem, realtype epcon)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetNonlinConvCoef", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (epcon <= ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetNonlinConvCoef", MSG_NEG_EPCON);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_epcon = epcon;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxErrTestFails(void *ida_mem, int maxnef)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetMaxErrTestFails", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_maxnef = maxnef;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxConvFails(void *ida_mem, int maxncf)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetMaxConvFails", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_maxncf = maxncf;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxNonlinIters(void *ida_mem, int maxcor)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetMaxNonlinIters", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_maxcor = maxcor;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetSuppressAlg(void *ida_mem, booleantype suppressalg)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetSuppressAlg", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_suppressalg = suppressalg;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetId(void *ida_mem, N_Vector id)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetId", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (id == NULL) {
+    if (IDA_mem->ida_idMallocDone) {
+      N_VDestroy(IDA_mem->ida_id);
+      lrw -= lrw1;
+      liw -= liw1;
+    }
+    IDA_mem->ida_idMallocDone = FALSE;    
+    return(IDA_SUCCESS);
+  }
+
+  if ( !(IDA_mem->ida_idMallocDone) ) {
+    IDA_mem->ida_id = N_VClone(id);
+    lrw += lrw1;
+    liw += liw1;
+    IDA_mem->ida_idMallocDone = TRUE;
+  }
+
+  /* Load the id vector */
+
+  N_VScale(ONE, id, IDA_mem->ida_id);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetConstraints(void *ida_mem, N_Vector constraints)
+{
+  IDAMem IDA_mem;
+  realtype temptest;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetConstraints", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (constraints == NULL) {
+    if (IDA_mem->ida_constraintsMallocDone) {
+      N_VDestroy(IDA_mem->ida_constraints);
+      lrw -= lrw1;
+      liw -= liw1;
+    }
+    IDA_mem->ida_constraintsMallocDone = FALSE;
+    IDA_mem->ida_constraintsSet = FALSE;
+    return(IDA_SUCCESS);
+  }
+
+  /* Test if required vector ops. are defined */
+
+  if (constraints->ops->nvdiv         == NULL ||
+      constraints->ops->nvmaxnorm     == NULL ||
+      constraints->ops->nvcompare     == NULL ||
+      constraints->ops->nvconstrmask  == NULL ||
+      constraints->ops->nvminquotient == NULL) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetConstraints", MSG_BAD_NVECTOR);
+    return(IDA_ILL_INPUT);
+  }
+
+  /*  Check the constraints vector */
+
+  temptest = N_VMaxNorm(constraints);
+  if((temptest > TWOPT5) || (temptest < HALF)){ 
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetConstraints", MSG_BAD_CONSTR);
+    return(IDA_ILL_INPUT); 
+  }
+
+  if ( !(IDA_mem->ida_constraintsMallocDone) ) {
+    IDA_mem->ida_constraints = N_VClone(constraints);
+    lrw += lrw1;
+    liw += liw1;
+    IDA_mem->ida_constraintsMallocDone = TRUE;
+  }
+
+  /* Load the constraints vector */
+
+  N_VScale(ONE, constraints, IDA_mem->ida_constraints);
+
+  IDA_mem->ida_constraintsSet = TRUE;
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * IDASetRootDirection
+ *
+ * Specifies the direction of zero-crossings to be monitored.
+ * The default is to monitor both crossings.
+ */
+
+int IDASetRootDirection(void *ida_mem, int *rootdir)
+{
+  IDAMem IDA_mem;
+  int i, nrt;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetRootDirection", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  nrt = IDA_mem->ida_nrtfn;
+  if (nrt==0) {
+    IDAProcessError(NULL, IDA_ILL_INPUT, "IDAS", "IDASetRootDirection", MSG_NO_ROOT);
+    return(IDA_ILL_INPUT);    
+  }
+
+  for(i=0; i<nrt; i++) IDA_mem->ida_rootdir[i] = rootdir[i];
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * IDASetNoInactiveRootWarn
+ *
+ * Disables issuing a warning if some root function appears
+ * to be identically zero at the beginning of the integration
+ */
+
+int IDASetNoInactiveRootWarn(void *ida_mem)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetNoInactiveRootWarn", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_mxgnull = 0;
+  
+  return(IDA_SUCCESS);
+}
+
+
+/* 
+ * =================================================================
+ * IDA IC optional input functions
+ * =================================================================
+ */
+
+int IDASetNonlinConvCoefIC(void *ida_mem, realtype epiccon)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetNonlinConvCoefIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (epiccon <= ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetNonlinConvCoefIC", MSG_BAD_EPICCON);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_epiccon = epiccon;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxNumStepsIC(void *ida_mem, int maxnh)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetMaxNumStepsIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (maxnh <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetMaxNumStepsIC", MSG_BAD_MAXNH);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_maxnh = maxnh;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxNumJacsIC(void *ida_mem, int maxnj)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetMaxNumJacsIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+   if (maxnj <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetMaxNumJacsIC", MSG_BAD_MAXNJ);
+    return(IDA_ILL_INPUT);
+  } 
+
+  IDA_mem->ida_maxnj = maxnj;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxNumItersIC(void *ida_mem, int maxnit)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetMaxNumItersIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (maxnit <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetMaxNumItersIC", MSG_BAD_MAXNIT);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_maxnit = maxnit;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetMaxBacksIC(void *ida_mem, int maxbacks)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDA", "IDASetMaxBacksIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (maxbacks <= 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDA", "IDASetMaxBacksIC", MSG_IC_BAD_MAXBACKS);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_maxbacks = maxbacks;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetLineSearchOffIC(void *ida_mem, booleantype lsoff)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetLineSearchOffIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_lsoff = lsoff;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetStepToleranceIC(void *ida_mem, realtype steptol)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetStepToleranceIC", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (steptol <= ZERO) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetStepToleranceIC", MSG_BAD_STEPTOL);
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_steptol = steptol;
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * Quadrature optional input functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define lrw1Q (IDA_mem->ida_lrw1Q)
+#define liw1Q (IDA_mem->ida_liw1Q)
+
+/*-----------------------------------------------------------------*/
+
+int IDASetQuadErrCon(void *ida_mem, booleantype errconQ)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetQuadErrCon", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }  
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_quadMallocDone == FALSE) {
+    IDAProcessError(NULL, IDA_NO_QUAD, "IDAS", "IDASetQuadErrCon", MSG_NO_QUAD);    
+    return(IDA_NO_QUAD);
+  }
+
+  IDA_mem->ida_errconQ = errconQ;
+
+  return (IDA_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * FSA optional input functions
+ * =================================================================
+ */
+
+int IDASetSensDQMethod(void *ida_mem, int DQtype, realtype DQrhomax)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetSensDQMethod", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if ( (DQtype != IDA_CENTERED) && (DQtype != IDA_FORWARD) ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetSensDQMethod", MSG_BAD_DQTYPE);    
+    return(IDA_ILL_INPUT);
+  }
+
+  if (DQrhomax < ZERO ) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetSensDQMethod", MSG_BAD_DQRHO);    
+    return(IDA_ILL_INPUT);
+  }
+
+  IDA_mem->ida_DQtype = DQtype;
+  IDA_mem->ida_DQrhomax = DQrhomax;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetSensErrCon(void *ida_mem, booleantype errconS)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetSensErrCon", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDA_mem->ida_errconS = errconS;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetSensMaxNonlinIters(void *ida_mem, int maxcorS)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetSensMaxNonlinIters", MSG_NO_MEM);    
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  IDA_mem->ida_maxcorS = maxcorS;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDASetSensParams(void *ida_mem, realtype *p, realtype *pbar, int *plist)
+{
+  IDAMem IDA_mem;
+  int Ns, is;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetSensParams", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Was sensitivity initialized? */
+
+  if (IDA_mem->ida_sensMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDASetSensParams", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  Ns = IDA_mem->ida_Ns;
+
+  /* Parameters */
+
+  IDA_mem->ida_p = p;
+
+  /* pbar */
+
+  if (pbar != NULL)
+    for (is=0; is<Ns; is++) {
+      if (pbar[is] == ZERO) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetSensParams", MSG_BAD_PBAR);
+        return(IDA_ILL_INPUT);
+      }
+      IDA_mem->ida_pbar[is] = SUNRabs(pbar[is]);
+    }
+  else
+    for (is=0; is<Ns; is++)
+      IDA_mem->ida_pbar[is] = ONE;
+
+  /* plist */
+
+  if (plist != NULL)
+    for (is=0; is<Ns; is++) {
+      if ( plist[is] < 0 ) {
+        IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDASetSensParams", MSG_BAD_PLIST);
+        return(IDA_ILL_INPUT);
+      }
+      IDA_mem->ida_plist[is] = plist[is];
+    }
+  else
+    for (is=0; is<Ns; is++)
+      IDA_mem->ida_plist[is] = is;
+
+  return(IDA_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function: IDASetQuadSensErrCon 
+ * -----------------------------------------------------------------
+ * IDASetQuadSensErrCon specifies if quadrature sensitivity variables
+ * are considered or not in the error control.
+ * -----------------------------------------------------------------
+ */
+int IDASetQuadSensErrCon(void *ida_mem, booleantype errconQS)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDASetQuadSensErrCon", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Was sensitivity initialized? */
+  if (IDA_mem->ida_sensMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDASetQuadSensErrCon", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  /* Was quadrature sensitivity initialized? */
+  if (IDA_mem->ida_quadSensMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDASetQuadSensErrCon", MSG_NO_SENSI);
+    return(IDA_NO_QUADSENS);
+  }
+
+  IDA_mem->ida_errconQS = errconQS;
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * IDA optional output functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define ewt         (IDA_mem->ida_ewt)
+#define kk          (IDA_mem->ida_kk)
+#define hh          (IDA_mem->ida_hh)
+#define h0u         (IDA_mem->ida_h0u)
+#define tn          (IDA_mem->ida_tn)
+#define nbacktr     (IDA_mem->ida_nbacktr)
+#define nst         (IDA_mem->ida_nst)
+#define nre         (IDA_mem->ida_nre)
+#define ncfn        (IDA_mem->ida_ncfn)
+#define netf        (IDA_mem->ida_netf)
+#define nni         (IDA_mem->ida_nni)
+#define nsetups     (IDA_mem->ida_nsetups)
+#define lrw         (IDA_mem->ida_lrw)
+#define liw         (IDA_mem->ida_liw)
+#define kused       (IDA_mem->ida_kused)          
+#define hused       (IDA_mem->ida_hused)         
+#define tolsf       (IDA_mem->ida_tolsf) 
+#define efun        (IDA_mem->ida_efun)
+#define edata       (IDA_mem->ida_edata)
+#define nge         (IDA_mem->ida_nge)
+#define iroots      (IDA_mem->ida_iroots)
+#define ee          (IDA_mem->ida_ee)
+
+int IDAGetNumSteps(void *ida_mem, long int *nsteps)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetNumSteps", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nsteps = nst;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumResEvals(void *ida_mem, long int *nrevals)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetNumResEvals", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nrevals = nre;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumLinSolvSetups(void *ida_mem, long int *nlinsetups)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetNumLinSolvSetups", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nlinsetups = nsetups;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumErrTestFails(void *ida_mem, long int *netfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetNumErrTestFails", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *netfails = netf;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumBacktrackOps(void *ida_mem, long int *nbacktracks)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetNumBacktrackOps", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nbacktracks = nbacktr;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetConsistentIC(void *ida_mem, N_Vector yy0, N_Vector yp0)
+{
+  IDAMem IDA_mem;
+  
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetConsistentIC", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem; 
+
+  if (IDA_mem->ida_kused != 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAGetConsistentIC", MSG_TOO_LATE);
+    return(IDA_ILL_INPUT);
+  }
+
+  if(yy0 != NULL) N_VScale(ONE, IDA_mem->ida_phi[0], yy0);
+  if(yp0 != NULL) N_VScale(ONE, IDA_mem->ida_phi[1], yp0);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetLastOrder(void *ida_mem, int *klast)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetLastOrder", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *klast = kused;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetCurrentOrder(void *ida_mem, int *kcur)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetCurrentOrder", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *kcur = kk;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetActualInitStep(void *ida_mem, realtype *hinused)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetActualInitStep", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *hinused = h0u;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetLastStep(void *ida_mem, realtype *hlast)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetLastStep", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *hlast = hused;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetCurrentStep(void *ida_mem, realtype *hcur)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetCurrentStep", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *hcur = hh;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetCurrentTime(void *ida_mem, realtype *tcur)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetCurrentTime", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *tcur = tn;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetTolScaleFactor(void *ida_mem, realtype *tolsfact)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetTolScaleFactor", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *tolsfact = tolsf;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetErrWeights(void *ida_mem, N_Vector eweight)
+{
+  IDAMem IDA_mem;
+  
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetErrWeights", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem; 
+
+  N_VScale(ONE, ewt, eweight);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetEstLocalErrors(void *ida_mem, N_Vector ele)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetEstLocalErrors", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  N_VScale(ONE, ee, ele);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetWorkSpace(void *ida_mem, long int *lenrw, long int *leniw)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetWorkSpace", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *leniw = liw;
+  *lenrw = lrw;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetIntegratorStats(void *ida_mem, long int *nsteps, long int *nrevals, 
+                          long int *nlinsetups, long int *netfails,
+                          int *klast, int *kcur, realtype *hinused, realtype *hlast, 
+                          realtype *hcur, realtype *tcur)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetIntegratorStats", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nsteps     = nst;
+  *nrevals    = nre;
+  *nlinsetups = nsetups;
+  *netfails   = netf;
+  *klast      = kused;
+  *kcur       = kk;
+  *hinused    = h0u;
+  *hlast      = hused;
+  *hcur       = hh;  
+  *tcur       = tn;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumGEvals(void *ida_mem, long int *ngevals)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetNumGEvals", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *ngevals = nge;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetRootInfo(void *ida_mem, int *rootsfound)
+{
+  IDAMem IDA_mem;
+  int i, nrt;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetRootInfo", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  nrt = IDA_mem->ida_nrtfn;
+
+  for (i=0; i<nrt; i++) rootsfound[i] = iroots[i];
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumNonlinSolvIters(void *ida_mem, long int *nniters)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetNumNonlinSolvIters", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nniters = nni;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumNonlinSolvConvFails(void *ida_mem, long int *nncfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetNumNonlinSolvConvFails", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nncfails = ncfn;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNonlinSolvStats(void *ida_mem, long int *nniters, long int *nncfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetNonlinSolvStats", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  *nniters  = nni;
+  *nncfails = ncfn;
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * Quadrature optional output functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define quadr          (IDA_mem->ida_quadr)
+#define nrQe           (IDA_mem->ida_nrQe)
+#define netfQ          (IDA_mem->ida_netfQ)
+#define ewtQ           (IDA_mem->ida_ewtQ)
+#define errconQ        (IDA_mem->ida_errconQ)
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetQuadNumRhsEvals(void *ida_mem, long int *nrQevals)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadNumRhsEvals", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (quadr==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUAD, "IDAS", "IDAGetQuadNumRhsEvals", MSG_NO_QUAD); 
+    return(IDA_NO_QUAD);
+  }
+
+  *nrQevals = nrQe;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetQuadNumErrTestFails(void *ida_mem, long int *nQetfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadNumErrTestFails", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (quadr==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUAD, "IDAS", "IDAGetQuadNumErrTestFails", MSG_NO_QUAD); 
+    return(IDA_NO_QUAD);
+  }
+
+  *nQetfails = netfQ;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetQuadErrWeights(void *ida_mem, N_Vector eQweight)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadErrWeights", MSG_NO_MEM); 
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (quadr==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUAD, "IDAS", "IDAGetQuadErrWeights", MSG_NO_QUAD); 
+    return(IDA_NO_QUAD);
+  }
+
+  if(errconQ) N_VScale(ONE, ewtQ, eQweight);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetQuadStats(void *ida_mem, long int *nrQevals, long int *nQetfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadStats", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (quadr==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUAD, "IDAS", "IDAGetQuadStats", MSG_NO_QUAD); 
+    return(IDA_NO_QUAD);
+  }
+
+  *nrQevals = nrQe;
+  *nQetfails = netfQ;
+
+  return(IDA_SUCCESS);
+}
+
+
+/* 
+ * =================================================================
+ * Quadrature FSA optional output functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define quadr_sensi    (IDA_mem->ida_quadr_sensi)
+#define nrQSe          (IDA_mem->ida_nrQSe)
+#define netfQS         (IDA_mem->ida_netfQS)
+#define ewtQS          (IDA_mem->ida_ewtQS)
+#define errconQS       (IDA_mem->ida_errconQS)
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetQuadSensNumRhsEvals(void *ida_mem, long int *nrhsQSevals)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadSensNumRhsEvals", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (quadr_sensi == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAGetQuadSensNumRhsEvals", MSG_NO_QUADSENSI); 
+    return(IDA_NO_QUADSENS);
+  }
+
+  *nrhsQSevals = nrQSe;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetQuadSensNumErrTestFails(void *ida_mem, long int *nQSetfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadSensNumErrTestFails", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (quadr_sensi == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAGetQuadSensNumErrTestFails", MSG_NO_QUADSENSI); 
+    return(IDA_NO_QUADSENS);
+  }
+
+  *nQSetfails = netfQS;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetQuadSensErrWeights(void *ida_mem, N_Vector *eQSweight)
+{
+  IDAMem IDA_mem;
+  int is, Ns;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadSensErrWeights", MSG_NO_MEM); 
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (quadr_sensi == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAGetQuadSensErrWeights", MSG_NO_QUADSENSI); 
+    return(IDA_NO_QUADSENS);
+  }
+  Ns = IDA_mem->ida_Ns;
+
+  if (errconQS)
+    for (is=0; is<Ns; is++)
+      N_VScale(ONE, ewtQS[is], eQSweight[is]);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetQuadSensStats(void *ida_mem, long int *nrhsQSevals, long int *nQSetfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetQuadSensStats", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (quadr_sensi == FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_QUADSENS, "IDAS", "IDAGetQuadSensStats", MSG_NO_QUADSENSI); 
+    return(IDA_NO_QUADSENS);
+  }
+
+  *nrhsQSevals = nrQSe;
+  *nQSetfails = netfQS;
+
+  return(IDA_SUCCESS);
+}
+
+
+
+/* 
+ * =================================================================
+ * FSA optional output functions
+ * =================================================================
+ */
+
+/* 
+ * Readability constants
+ */
+
+#define sensi          (IDA_mem->ida_sensi)
+#define Ns             (IDA_mem->ida_Ns)
+#define ism            (IDA_mem->ida_ism)
+#define ewtS           (IDA_mem->ida_ewtS)
+#define nrSe           (IDA_mem->ida_nrSe)
+#define nreS           (IDA_mem->ida_nreS)
+#define nniS           (IDA_mem->ida_nniS)
+#define ncfnS          (IDA_mem->ida_ncfnS)
+#define netfS          (IDA_mem->ida_netfS)
+#define nsetupsS       (IDA_mem->ida_nsetupsS)
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetSensConsistentIC(void *ida_mem, N_Vector *yyS0, N_Vector *ypS0)
+{
+  IDAMem IDA_mem;
+  int is;
+ 
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSensConsistentIC", MSG_NO_MEM);
+    return (IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem; 
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensConsistentIC", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  if (IDA_mem->ida_kused != 0) {
+    IDAProcessError(IDA_mem, IDA_ILL_INPUT, "IDAS", "IDAGetSensConsistentIC", MSG_TOO_LATE);
+    return(IDA_ILL_INPUT);
+  }
+
+  if(yyS0 != NULL) {
+    for (is=0; is<Ns; is++)
+      N_VScale(ONE, IDA_mem->ida_phiS[0][is], yyS0[is]);
+  }
+
+  if(ypS0 != NULL) {
+    for (is=0; is<Ns; is++)
+      N_VScale(ONE, IDA_mem->ida_phiS[1][is], ypS0[is]);
+  }
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetSensNumResEvals(void *ida_mem, long int *nrSevals)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGeSensNumResEvals", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensNumResEvals", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  *nrSevals = nrSe;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetNumResEvalsSens(void *ida_mem, long int *nrevalsS)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetNumResEvalsSens", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetNumResEvalsSens", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  *nrevalsS = nreS;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetSensNumErrTestFails(void *ida_mem, long int *nSetfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSensNumErrTestFails", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensNumErrTestFails", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  *nSetfails = netfS;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetSensNumLinSolvSetups(void *ida_mem, long int *nlinsetupsS)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSensNumLinSolvSetups", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensNumLinSolvSetups", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  *nlinsetupsS = nsetupsS;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetSensErrWeights(void *ida_mem, N_Vector_S eSweight)
+{
+  IDAMem IDA_mem;
+  int is;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSensErrWeights", MSG_NO_MEM);    
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensErrWeights", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  for (is=0; is<Ns; is++)
+    N_VScale(ONE, ewtS[is], eSweight[is]);
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetSensStats(void *ida_mem, long int *nrSevals, long int *nrevalsS, 
+                      long int *nSetfails, long int *nlinsetupsS)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSensStats", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensStats", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  *nrSevals = nrSe;
+  *nrevalsS = nreS;
+  *nSetfails = netfS;
+  *nlinsetupsS = nsetupsS;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetSensNumNonlinSolvIters(void *ida_mem, long int *nSniters)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSensNumNonlinSolvIters", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensNumNonlinSolvIters", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  *nSniters = nniS;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetSensNumNonlinSolvConvFails(void *ida_mem, long int *nSncfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSensNumNonlinSolvConvFails", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensNumNonlinSolvConvFails", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  *nSncfails = ncfnS;
+
+  return(IDA_SUCCESS);
+}
+
+/*-----------------------------------------------------------------*/
+
+int IDAGetSensNonlinSolvStats(void *ida_mem, long int *nSniters, long int *nSncfails)
+{
+  IDAMem IDA_mem;
+
+  if (ida_mem==NULL) {
+    IDAProcessError(NULL, IDA_MEM_NULL, "IDAS", "IDAGetSensNonlinSolvstats", MSG_NO_MEM);
+    return(IDA_MEM_NULL);
+  }
+
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (sensi==FALSE) {
+    IDAProcessError(IDA_mem, IDA_NO_SENS, "IDAS", "IDAGetSensNonlinSolvStats", MSG_NO_SENSI);
+    return(IDA_NO_SENS);
+  }
+
+  *nSniters = nniS;
+  *nSncfails = ncfnS;
+
+  return(IDA_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * IDAGetReturnFlagName
+ * =================================================================
+ */
+
+
+char *IDAGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(24*sizeof(char));
+
+  switch(flag) {
+  case IDA_SUCCESS:
+    sprintf(name,"IDA_SUCCESS");
+    break;
+  case IDA_TSTOP_RETURN:
+    sprintf(name,"IDA_TSTOP_RETURN");
+    break;
+  case IDA_ROOT_RETURN:
+    sprintf(name,"IDA_ROOT_RETURN");
+    break;
+  case IDA_TOO_MUCH_WORK:
+    sprintf(name,"IDA_TOO_MUCH_WORK");
+    break;
+  case IDA_TOO_MUCH_ACC:
+    sprintf(name,"IDA_TOO_MUCH_ACC");
+    break;
+  case IDA_ERR_FAIL:
+    sprintf(name,"IDA_ERR_FAIL");
+    break;
+  case IDA_CONV_FAIL:
+    sprintf(name,"IDA_CONV_FAIL");
+    break;
+  case IDA_LINIT_FAIL:
+    sprintf(name,"IDA_LINIT_FAIL");
+    break;
+  case IDA_LSETUP_FAIL:
+    sprintf(name,"IDA_LSETUP_FAIL");
+    break;
+  case IDA_LSOLVE_FAIL:
+    sprintf(name,"IDA_LSOLVE_FAIL");
+    break;
+  case IDA_CONSTR_FAIL:
+    sprintf(name,"IDA_CONSTR_FAIL");
+    break;
+  case IDA_RES_FAIL:
+    sprintf(name,"IDA_RES_FAIL");
+    break;
+  case IDA_FIRST_RES_FAIL:
+    sprintf(name,"IDA_FIRST_RES_FAIL");
+    break;
+  case IDA_REP_RES_ERR:
+    sprintf(name,"IDA_REP_RES_ERR");
+    break;
+  case IDA_RTFUNC_FAIL:
+    sprintf(name,"IDA_RTFUNC_FAIL");
+    break;
+  case IDA_MEM_FAIL:
+    sprintf(name,"IDA_MEM_FAIL");
+    break;
+  case IDA_MEM_NULL:
+    sprintf(name,"IDA_MEM_NULL");
+    break;
+  case IDA_ILL_INPUT:
+    sprintf(name,"IDA_ILL_INPUT");
+    break;
+  case IDA_NO_MALLOC:
+    sprintf(name,"IDA_NO_MALLOC");
+    break;
+  case IDA_BAD_T:
+    sprintf(name,"IDA_BAD_T");
+    break;
+  case IDA_BAD_K:
+    sprintf(name,"IDA_BAD_K");
+    break;
+  case IDA_BAD_DKY:
+    sprintf(name,"IDA_BAD_DKY");
+    break;
+  case IDA_BAD_EWT:
+    sprintf(name,"IDA_BAD_EWT");
+    break;
+  case IDA_NO_RECOVERY:
+    sprintf(name,"IDA_NO_RECOVERY");
+    break;
+  case IDA_LINESEARCH_FAIL:
+    sprintf(name,"IDA_LINESEARCH_FAIL");
+    break;
+  case IDA_NO_SENS:
+    sprintf(name,"IDA_NO_SENS");
+    break;
+  case IDA_SRES_FAIL:
+    sprintf(name, "IDA_SRES_FAIL");
+    break;
+  case IDA_REP_SRES_ERR:
+    sprintf(name, "IDA_REP_SRES_ERR");
+    break;
+  case IDA_BAD_IS:
+    sprintf(name,"IDA_BAD_IS");
+    break;
+  case IDA_NO_QUAD:
+    sprintf(name,"IDA_NO_QUAD");
+    break;
+  case IDA_NO_QUADSENS:
+    sprintf(name, "IDA_NO_QUADSENS");
+    break;
+  case IDA_QSRHS_FAIL:
+    sprintf(name, "IDA_QSRHS_FAIL");
+    break;
+
+    /* IDAA flags follow below. */
+  case IDA_NO_ADJ:
+    sprintf(name, "IDA_NO_ADJ");
+    break;
+  case IDA_BAD_TB0:
+    sprintf(name, "IDA_BAD_TB0");
+    break;
+  case IDA_REIFWD_FAIL:
+    sprintf(name, "IDA_REIFWD_FAIL");
+    break;
+  case IDA_FWD_FAIL:
+    sprintf(name, "IDA_FWD_FAIL");
+    break;
+  case IDA_GETY_BADT:
+    sprintf(name, "IDA_GETY_BADT");
+    break;
+  case IDA_NO_BCK:
+    sprintf(name, "IDA_NO_BCK");
+    break;
+  case IDA_NO_FWD:
+    sprintf(name,"IDA_NO_FWD");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
diff --git a/src/idas/idas_klu.c b/src/idas/idas_klu.c
new file mode 100644
index 0000000..80efb38
--- /dev/null
+++ b/src/idas/idas_klu.c
@@ -0,0 +1,780 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4951 $
+ * $Date: 2016-09-22 10:21:00 -0700 (Thu, 22 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDASKLU linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "idas/idas_klu.h"
+#include "idas_impl.h"
+#include "idas_sparse_impl.h"
+#include "sundials/sundials_klu_impl.h"
+#include "sundials/sundials_math.h"
+
+/* Constants */
+
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+#define TWOTHIRDS    RCONST(0.6666666666666667)
+
+/* IDASKLU linit, lsetup, lsolve, and lfree routines */
+ 
+static int IDAKLUInit(IDAMem IDA_mem);
+
+static int IDAKLUSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+		       N_Vector rrp, N_Vector tmp1,
+		       N_Vector tmp2, N_Vector tmp3);
+
+static int IDAKLUSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+			     N_Vector ycur, N_Vector ypcur, N_Vector rrcur);
+
+static int IDAKLUFree(IDAMem IDA_mem);
+
+/* IDAKLU lfreeB function */
+
+static int IDAKLUFreeB(IDABMem IDAB_mem);
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * IDAKLU
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDA / KLU linear solver module.  
+ * IDAKLU first calls the existing lfree routine if this is not NULL.
+ * Then it sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDAKLUInit, IDAKLUSetup,
+ * IDAKLUSolve, NULL, and IDAKLUFree, respectively.
+ * It allocates memory for a structure of type IDAkluMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem) to TRUE.
+ * Finally, it allocates memory for KLU.
+ * The return value is IDASLS_SUCCESS = 0, IDASLS_LMEM_FAIL = -1,
+ * or IDASLS_ILL_INPUT = -2.
+ *
+ * NOTE: The KLU linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDAKLU will first 
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int IDAKLU(void *ida_mem, int n, int nnz, int sparsetype)
+{
+  IDAMem IDA_mem;
+  IDASlsMem idasls_mem;
+  KLUData klu_data;
+  int flag;
+
+  /* Return immediately if ida_mem is NULL. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDAKLU", 
+                    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the Direct solver */
+  if (IDA_mem->ida_tempv1->ops->nvgetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASSLS", "IDAKLU", 
+                    MSGSP_BAD_NVECTOR);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  if (IDA_mem->ida_lfree != NULL) flag = IDA_mem->ida_lfree(IDA_mem);
+
+  /* Set five main function fields in IDA_mem. */
+  IDA_mem->ida_linit  = IDAKLUInit;
+  IDA_mem->ida_lsetup = IDAKLUSetup;
+  IDA_mem->ida_lsolve = IDAKLUSolve;
+  IDA_mem->ida_lperf  = NULL;
+  IDA_mem->ida_lfree  = IDAKLUFree;
+
+  /* Get memory for IDASlsMemRec. */
+  idasls_mem = (IDASlsMem) malloc(sizeof(struct IDASlsMemRec));
+  if (idasls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASSLS", "IDAKLU", 
+                    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  /* Get memory for KLUData. */
+  klu_data = (KLUData)malloc(sizeof(struct KLUDataRec));
+  if (klu_data == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASSLS", "IDAKLU", 
+                    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  IDA_mem->ida_setupNonNull = TRUE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  idasls_mem->s_jaceval = NULL;
+  idasls_mem->s_jacdata = NULL;
+  idasls_mem->sparsetype = sparsetype;
+
+  /* Allocate memory for the sparse Jacobian */
+  idasls_mem->s_JacMat = SparseNewMat(n, n, nnz, sparsetype);
+  if (idasls_mem->s_JacMat == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASSLS", "IDAKLU", 
+                    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  /* Initialize KLU structures */
+  switch (sparsetype) {
+    case CSC_MAT:
+      klu_data->sun_klu_solve = &klu_solve;
+      break;
+    case CSR_MAT:
+      klu_data->sun_klu_solve = &klu_tsolve;
+      break;
+    default:
+      SparseDestroyMat(idasls_mem->s_JacMat);
+      free(klu_data);
+      free(idasls_mem);
+      return(IDASLS_ILL_INPUT);
+  }
+  klu_data->s_Symbolic = NULL;
+  klu_data->s_Numeric = NULL;
+
+  /* Set default parameters for KLU */
+  flag = klu_defaults(&klu_data->s_Common);
+  if (flag == 0) {
+    IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASSLS", "IDAKLU", 
+                    MSGSP_PACKAGE_FAIL);
+    return(IDASLS_PACKAGE_FAIL);
+  }
+
+  /* Set ordering to COLAMD as the idas default use.
+     Users can set a different value with IDAKLUSetOrdering,
+     and the user-set value is loaded before any call to klu_analyze in
+     IDAKLUSetup.  */
+  klu_data->s_ordering = 1;
+  klu_data->s_Common.ordering = klu_data->s_ordering;
+
+  /* Attach linear solver memory to the integrator memory */
+  idasls_mem->s_solver_data = (void *) klu_data;
+  IDA_mem->ida_lmem = idasls_mem;
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+
+  return(IDASLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDAKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to IDAKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is IDASLS_SUCCESS = 0, IDASLS_MEM_NULL = -1, 
+ * IDASLS_LMEM_NULL = -2, IDASLS_ILL_INPUT = -3, or IDASLS_MEM_FAIL = -4.
+ *
+ * -----------------------------------------------------------------
+ */
+
+int IDAKLUReInit(void *ida_mem_v, int n, int nnz, int reinit_type)
+{
+  IDAMem ida_mem;
+  IDASlsMem idasls_mem;
+  KLUData klu_data;
+
+  /* Return immediately if ida_mem is NULL. */
+  if (ida_mem_v == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDAKLUReInit", 
+                    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  ida_mem = (IDAMem) ida_mem_v;
+
+  /* Return immediately if ida_lmem is NULL. */
+  if (ida_mem->ida_lmem == NULL) {
+    IDAProcessError(NULL, IDASLS_LMEM_NULL, "IDASLS", "IDAKLUReInit", 
+                    MSGSP_LMEM_NULL);
+    return(IDASLS_LMEM_NULL);
+  }
+
+  idasls_mem = (IDASlsMem) (ida_mem->ida_lmem);
+  klu_data = (KLUData) idasls_mem->s_solver_data;
+
+  /* Return if reinit_type is not valid */
+  if ((reinit_type != 1) && (reinit_type != 2)) {
+    IDAProcessError(NULL, IDASLS_ILL_INPUT, "IDASLS", "IDAKLUReInit", 
+                    MSGSP_ILL_INPUT);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  if (reinit_type == 1) {
+
+    /* Destroy previous Jacobian information */
+    if (idasls_mem->s_JacMat) {
+      SparseDestroyMat(idasls_mem->s_JacMat);
+    }
+
+    /* Allocate memory for the sparse Jacobian */
+    idasls_mem->s_JacMat = SparseNewMat(n, n, nnz, idasls_mem->sparsetype);
+    if (idasls_mem->s_JacMat == NULL) {
+      IDAProcessError(ida_mem, IDASLS_MEM_FAIL, "IDASLS", "IDAKLU", 
+                      MSGSP_MEM_FAIL);
+      return(IDASLS_MEM_FAIL);
+    }
+  }
+
+  /* Free the prior factorazation and reset for first factorization */
+  if( klu_data->s_Symbolic != NULL)
+    klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  if( klu_data->s_Numeric != NULL)
+    klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  idasls_mem->s_first_factorize = 1;
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDAKLU interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the IDAKLU
+  linear solver module.  
+  It returns 0 if successful.
+*/
+
+static int IDAKLUInit(IDAMem IDA_mem)
+{
+  IDASlsMem idasls_mem;
+
+  idasls_mem = (IDASlsMem)IDA_mem->ida_lmem;
+
+  idasls_mem->s_jacdata = IDA_mem->ida_user_data;
+
+  idasls_mem->s_nje = 0;
+  /* Force factorization every call to IDAS */
+  idasls_mem->s_first_factorize = 1;
+
+  idasls_mem->s_last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the IDAKLU linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     IDASLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int IDAKLUSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+		       N_Vector rrp, N_Vector tmp1, N_Vector tmp2,
+		       N_Vector tmp3)
+{
+  int retval;
+  realtype tn, cj;
+  IDASlsMem idasls_mem;
+  IDASlsSparseJacFn jaceval;
+  KLUData klu_data;
+  SlsMat JacMat;
+  void *jacdata;
+  
+  realtype uround_twothirds;
+
+  uround_twothirds = SUNRpowerR(IDA_mem->ida_uround,TWOTHIRDS);
+
+  idasls_mem = (IDASlsMem) (IDA_mem->ida_lmem);
+  tn = IDA_mem->ida_tn; 
+  cj = IDA_mem->ida_cj;
+
+  klu_data = (KLUData) idasls_mem->s_solver_data;
+
+  jaceval = idasls_mem->s_jaceval;
+  jacdata = idasls_mem->s_jacdata;
+  JacMat = idasls_mem->s_JacMat;
+
+  /* Check that Jacobian eval routine is set */
+  if (jaceval == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_JAC_NOSET, "IDASSLS", "IDAKLUSetup", 
+		    MSGSP_JAC_NOSET);
+    free(idasls_mem); idasls_mem = NULL;
+    return(IDASLS_JAC_NOSET);
+  }
+
+  /* Increment nje counter and call Jacobian eval routine. */
+  idasls_mem->s_nje++;
+  retval = jaceval(tn, cj, yyp, ypp, rrp, JacMat, jacdata, 
+		   tmp1, tmp2, tmp3);
+
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDASLS_JACFUNC_UNRECVR, "IDASSLS", 
+		    "IDAKLUSetup", MSGSP_JACFUNC_FAILED);
+    idasls_mem->s_last_flag = IDASLS_JACFUNC_UNRECVR;
+    return(IDASLS_JACFUNC_UNRECVR);
+  }
+  if (retval > 0) {
+    idasls_mem->s_last_flag = IDASLS_JACFUNC_RECVR;
+    return(+1);
+  }
+
+  if (idasls_mem->s_first_factorize) {
+    /* ------------------------------------------------------------
+       Get the symbolic factorization
+       ------------------------------------------------------------*/ 
+    /* Update the ordering option with any user-updated values from 
+       calls to IDAKLUSetOrdering */
+    klu_data->s_Common.ordering = klu_data->s_ordering;
+
+    if (klu_data->s_Symbolic != NULL) {
+       klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+    }
+    klu_data->s_Symbolic = klu_analyze(JacMat->NP, JacMat->indexptrs, 
+				       JacMat->indexvals, &(klu_data->s_Common));
+    if (klu_data->s_Symbolic == NULL) {
+      IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASSLS", "IDAKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(IDASLS_PACKAGE_FAIL);
+    }
+
+    /* ------------------------------------------------------------
+       Compute the LU factorization of  the Jacobian.
+       ------------------------------------------------------------*/
+    if( klu_data->s_Numeric != NULL) {
+       klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+    }
+    klu_data->s_Numeric = klu_factor(JacMat->indexptrs, JacMat->indexvals, JacMat->data, 
+				     klu_data->s_Symbolic, &(klu_data->s_Common));
+
+    if (klu_data->s_Numeric == NULL) {
+      IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "IDAKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(IDASLS_PACKAGE_FAIL);
+    }
+
+    idasls_mem->s_first_factorize = 0;
+  }
+  else {
+
+    retval = klu_refactor(JacMat->indexptrs, JacMat->indexvals, JacMat->data, 
+			  klu_data->s_Symbolic, klu_data->s_Numeric,
+			  &(klu_data->s_Common));
+    if (retval == 0) {
+      IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "idaKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(IDASLS_PACKAGE_FAIL);
+    }
+    
+    /*-----------------------------------------------------------
+      Check if a cheap estimate of the reciprocal of the condition 
+      number is getting too small.  If so, delete
+      the prior numeric factorization and recompute it.
+      -----------------------------------------------------------*/
+    
+    retval = klu_rcond(klu_data->s_Symbolic, klu_data->s_Numeric,
+		       &(klu_data->s_Common));
+    if (retval == 0) {
+      IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "idaKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(IDASLS_PACKAGE_FAIL);
+    }
+
+    if ( (klu_data->s_Common.rcond)  < uround_twothirds ) {
+      
+      /* Condition number may be getting large.  
+	 Compute more accurate estimate */
+      retval = klu_condest(JacMat->indexptrs, JacMat->data, 
+			   klu_data->s_Symbolic, klu_data->s_Numeric,
+			   &(klu_data->s_Common));
+      if (retval == 0) {
+	IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", "idaKLUSetup", 
+			MSGSP_PACKAGE_FAIL);
+	return(IDASLS_PACKAGE_FAIL);
+      }
+      
+      if ( (klu_data->s_Common.condest) > 
+	   (1.0/uround_twothirds) ) {
+
+	/* More accurate estimate also says condition number is 
+	   large, so recompute the numeric factorization */
+
+	klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+	
+	klu_data->s_Numeric = klu_factor(JacMat->indexptrs, JacMat->indexvals, 
+					 JacMat->data, klu_data->s_Symbolic, 
+					 &(klu_data->s_Common));
+
+	if (klu_data->s_Numeric == NULL) {
+	  IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASLS", 
+			  "IDAKLUSetup", MSGSP_PACKAGE_FAIL);
+	  return(IDASLS_PACKAGE_FAIL);
+	}
+      }
+    }
+  }
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the IDAKLU linear
+  solver module.  It calls the KLU solve routine, scales the
+  solution vector according to cjratio, then returns IDASLS_SUCCESS = 0.
+*/
+
+static int IDAKLUSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+		       N_Vector ycur, N_Vector ypcur, N_Vector rrcur)
+{
+  int flag;
+  realtype cjratio;
+  IDASlsMem idasls_mem;
+  KLUData klu_data;
+  SlsMat JacMat;
+  realtype *bd;
+  
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+  JacMat = idasls_mem->s_JacMat;
+  cjratio = IDA_mem->ida_cjratio;
+  klu_data = (KLUData) idasls_mem->s_solver_data;
+  bd = N_VGetArrayPointer(b);
+
+  /* Call KLU to solve the linear system */
+  flag = klu_data->sun_klu_solve(klu_data->s_Symbolic, klu_data->s_Numeric, JacMat->NP, 1, bd, 
+                                 &(klu_data->s_Common));
+  if (flag == 0) {
+    IDAProcessError(IDA_mem, IDASLS_PACKAGE_FAIL, "IDASSLS", "IDAKLUSolve", 
+		    MSGSP_PACKAGE_FAIL);
+    return(IDASLS_PACKAGE_FAIL);
+  }
+
+  /* Scale the correction to account for change in cj. */
+  if (cjratio != ONE) N_VScale(TWO/(ONE + cjratio), b, b);
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+  return(IDASLS_SUCCESS);
+}
+
+/*
+  This routine frees memory specific to the IDAKLU linear solver.
+*/
+
+static int IDAKLUFree(IDAMem IDA_mem)
+{
+  IDASlsMem idasls_mem;
+  KLUData klu_data;
+  
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+  klu_data = (KLUData) idasls_mem->s_solver_data;
+
+  if( klu_data->s_Numeric != NULL)
+  {
+     klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  }
+  if( klu_data->s_Symbolic != NULL)
+  {
+     klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  }
+
+  if (idasls_mem->s_JacMat) {
+    SparseDestroyMat(idasls_mem->s_JacMat);
+    idasls_mem->s_JacMat = NULL;
+  }
+
+  free(klu_data); 
+  free(IDA_mem->ida_lmem); 
+
+  return(IDASLS_SUCCESS);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * IDAKLUB is a wrapper around IDAKLU.
+ */
+
+int IDAKLUB(void *ida_mem, int which, int n, int nnz, int sparsetype)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDASlsMemB idaslsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDAKLUB", 
+		    MSGSP_CAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASLS_NO_ADJ, "IDASSLS", "IDAKLUB",  
+		    MSGSP_NO_ADJ);
+    return(IDASLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASSLS", "IDAKLUB", 
+		    MSGSP_BAD_WHICH);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Alloc memory for IDASlsMemRecB */
+  idaslsB_mem = (IDASlsMemB) malloc(sizeof(struct IDASlsMemRecB));
+  if (idaslsB_mem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDASLS_MEM_FAIL, "IDASSLS", 
+		    "IDAKLUB", MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  
+  }
+
+  /* set matrix type and initialize Jacob function. */
+  idaslsB_mem->s_djacB = NULL;
+
+  /* Attach lmemB data and lfreeB function. */
+  IDAB_mem->ida_lmem  = idaslsB_mem;
+  IDAB_mem->ida_lfree = IDAKLUFreeB;
+
+  /* Call IDAKLU to the IDAS data of the backward problem. */
+  ida_memB = (void *)IDAB_mem->IDA_mem;
+  flag = IDAKLU(ida_memB, n, nnz, sparsetype);
+
+  if (flag != IDASLS_SUCCESS) {
+    free(idaslsB_mem);
+    idaslsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+
+/*
+ * IDAKLUReInitB is a wrapper around IDAKLUReInit.
+ */
+
+int IDAKLUReInitB(void *ida_mem, int which, int n, int nnz, int reinit_type)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  /* IDASlsMemB idaslsB_mem; */
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDAKLUReInitB", 
+		    MSGSP_CAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASLS_NO_ADJ, "IDASSLS", "IDAKLUReInitB",  
+		    MSGSP_NO_ADJ);
+    return(IDASLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASSLS", "IDAKLUReInitB", 
+		    MSGSP_BAD_WHICH);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  ida_memB = (void *)(IDAB_mem->IDA_mem);
+  
+  flag = IDAKLUReInit(ida_memB, n, nnz, reinit_type);
+
+  return(flag);
+}
+
+
+/*
+ * IDAKLUSetOrderingB is a wrapper around IDAKLUSetOrdering.
+ */
+
+int IDAKLUSetOrderingB(void *ida_mem, int which, int ordering_choiceB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  /* IDASlsMemB idaslsB_mem; */
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDAKLUSetOrderingB", 
+		    MSGSP_CAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASLS_NO_ADJ, "IDASSLS", "IDAKLUSetOrderingB",  
+		    MSGSP_NO_ADJ);
+    return(IDASLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASSLS", "IDAKLUSetOrderingB", 
+		    MSGSP_BAD_WHICH);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  ida_memB = (void *)(IDAB_mem->IDA_mem);
+  
+  flag = IDAKLUSetOrdering(ida_memB, ordering_choiceB);
+
+  return(flag);
+}
+
+
+/*
+ * IDAKLUFreeB frees the linear solver's memory for that backward problem passed 
+ * as argument. 
+ */
+
+static int IDAKLUFreeB(IDABMem IDAB_mem)
+{
+  IDASlsMemB idaslsB_mem;
+
+  idaslsB_mem = (IDASlsMemB) IDAB_mem->ida_lmem;
+
+  free(idaslsB_mem);
+
+  return(0);
+}
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * IDAKLUSetOrdering sets the ordering used by KLU for reducing fill.
+ * Options are: 0 for AMD, 1 for COLAMD, and 2 for the natural ordering.
+ * The default used in IDA is 1 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+int IDAKLUSetOrdering(void *ida_mem_v, int ordering_choice)
+{
+  IDAMem ida_mem;
+  IDASlsMem idasls_mem;
+  KLUData klu_data;
+
+ /* Return immediately if ida_mem_v is NULL */
+  if (ida_mem_v == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDAKLUSetOrdering",
+		    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  ida_mem = (IDAMem) ida_mem_v;
+
+ /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) ) {
+    IDAProcessError(NULL, IDASLS_ILL_INPUT, "IDASLS", "IDAKLUSetOrdering",
+		    MSGSP_ILL_INPUT);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  idasls_mem = (IDASlsMem) ida_mem->ida_lmem;
+  klu_data = (KLUData) idasls_mem->s_solver_data;
+
+  klu_data->s_ordering = ordering_choice;
+
+  return(IDASLS_SUCCESS);
+}
diff --git a/src/idas/idas_lapack.c b/src/idas/idas_lapack.c
new file mode 100644
index 0000000..460067f
--- /dev/null
+++ b/src/idas/idas_lapack.c
@@ -0,0 +1,758 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4909 $
+ * $Date: 2016-09-14 16:51:27 -0700 (Wed, 14 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a IDAS dense linear solver
+ * using BLAS and LAPACK functions.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <idas/idas_lapack.h>
+#include "idas_direct_impl.h"
+#include "idas_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PROTOTYPES FOR PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/* IDALAPACK DENSE linit, lsetup, lsolve, and lfree routines */ 
+static int idaLapackDenseInit(IDAMem IDA_mem);
+static int idaLapackDenseSetup(IDAMem IDA_mem,
+                               N_Vector yP, N_Vector ypP, N_Vector fctP, 
+                               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int idaLapackDenseSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                               N_Vector yC, N_Vector ypC, N_Vector fctC);
+static int idaLapackDenseFree(IDAMem IDA_mem);
+
+/* IDALAPACK BAND linit, lsetup, lsolve, and lfree routines */ 
+static int idaLapackBandInit(IDAMem IDA_mem);
+static int idaLapackBandSetup(IDAMem IDA_mem,
+                              N_Vector yP, N_Vector ypP, N_Vector fctP, 
+                              N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+static int idaLapackBandSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                              N_Vector yC, N_Vector ypC, N_Vector fctC);
+static int idaLapackBandFree(IDAMem IDA_mem);
+
+static int IDALapackDenseFreeB(IDABMem IDAB_mem);
+static int IDALapackBandFreeB(IDABMem IDAB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define res            (IDA_mem->ida_res)
+#define nst            (IDA_mem->ida_nst)
+#define tn             (IDA_mem->ida_tn)
+#define hh             (IDA_mem->ida_hh)
+#define cj             (IDA_mem->ida_cj)
+#define cjratio        (IDA_mem->ida_cjratio)
+#define ewt            (IDA_mem->ida_ewt)
+#define constraints    (IDA_mem->ida_constraints)
+
+#define linit          (IDA_mem->ida_linit)
+#define lsetup         (IDA_mem->ida_lsetup)
+#define lsolve         (IDA_mem->ida_lsolve)
+#define lfree          (IDA_mem->ida_lfree)
+#define lperf          (IDA_mem->ida_lperf)
+#define lmem           (IDA_mem->ida_lmem)
+#define tempv          (IDA_mem->ida_tempv1)
+#define setupNonNull   (IDA_mem->ida_setupNonNull)
+
+#define mtype          (idadls_mem->d_type)
+#define n              (idadls_mem->d_n)
+#define ml             (idadls_mem->d_ml)
+#define mu             (idadls_mem->d_mu)
+#define smu            (idadls_mem->d_smu)
+#define jacDQ          (idadls_mem->d_jacDQ)
+#define djac           (idadls_mem->d_djac)
+#define bjac           (idadls_mem->d_bjac)
+#define JJ             (idadls_mem->d_J)
+#define pivots         (idadls_mem->d_pivots)
+#define nje            (idadls_mem->d_nje)
+#define nreDQ          (idadls_mem->d_nreDQ)
+#define J_data         (idadls_mem->d_J_data)
+#define last_flag      (idadls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS FOR IMPLICIT INTEGRATION
+ * =================================================================
+ */
+              
+/*
+ * -----------------------------------------------------------------
+ * IDALapackDense
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the linear solver module.  IDALapackDense first
+ * calls the existing lfree routine if this is not NULL.  Then it sets
+ * the ida_linit, ida_lsetup, ida_lsolve, ida_lfree fields in (*ida_mem)
+ * to be idaLapackDenseInit, idaLapackDenseSetup, idaLapackDenseSolve, 
+ * and idaLapackDenseFree, respectively.  It allocates memory for a 
+ * structure of type IDADlsMemRec and sets the ida_lmem field in 
+ * (*ida_mem) to the address of this structure.  It sets setupNonNull 
+ * in (*ida_mem) to TRUE, and the d_jac field to the default 
+ * idaLapackDenseDQJac. Finally, it allocates memory for M, pivots.
+ *
+ * The return value is SUCCESS = 0, or LMEM_FAIL = -1.
+ *
+ * NOTE: The dense linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDALapackDense will first 
+ *       test for a compatible N_Vector internal representation 
+ *       by checking that N_VGetArrayPointer and N_VSetArrayPointer 
+ *       exist.
+ * -----------------------------------------------------------------
+ */
+int IDALapackDense(void *ida_mem, int N)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASLAPACK", "IDALapackDense", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the LAPACK solver */
+  if (tempv->ops->nvgetarraypointer == NULL ||
+      tempv->ops->nvsetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASLAPACK", "IDALapackDense", MSGD_BAD_NVECTOR);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  if (lfree !=NULL) lfree(IDA_mem);
+
+  /* Set four main function fields in IDA_mem */
+  linit  = idaLapackDenseInit;
+  lsetup = idaLapackDenseSetup;
+  lsolve = idaLapackDenseSolve;
+  lperf  = NULL;
+  lfree  = idaLapackDenseFree;
+
+  /* Get memory for IDADlsMemRec */
+  idadls_mem = NULL;
+  idadls_mem = (IDADlsMem) malloc(sizeof(struct IDADlsMemRec));
+  if (idadls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASLAPACK", "IDALapackDense", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_DENSE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ  = TRUE;
+  djac   = NULL;
+  J_data = NULL;
+
+  last_flag = IDADLS_SUCCESS;
+  idaDlsInitializeCounters(idadls_mem); 
+  setupNonNull = TRUE;
+
+  /* Set problem dimension */
+  n = (long int) N;
+
+  /* Allocate memory for JJ and pivot array */
+  JJ = NULL;
+  pivots = NULL;
+
+  JJ = NewDenseMat(n, n);
+  if (JJ == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASLAPACK", "IDALapackDense", MSGD_MEM_FAIL);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+  pivots = NewIntArray(N);
+  if (pivots == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASLAPACK", "IDALapackDense", MSGD_MEM_FAIL);
+    DestroyMat(JJ);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = idadls_mem;
+
+  return(IDADLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDALapackBand
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the band linear solver module. It first calls
+ * the existing lfree routine if this is not NULL.  It then sets the
+ * ida_linit, ida_lsetup, ida_lsolve, and ida_lfree fields in (*ida_mem)
+ * to be idaLapackBandInit, idaLapackBandSetup, idaLapackBandSolve, 
+ * and idaLapackBandFree, respectively.  It allocates memory for a 
+ * structure of type IDALapackBandMemRec and sets the ida_lmem field in 
+ * (*ida_mem) to the address of this structure.  It sets setupNonNull 
+ * in (*ida_mem) to be TRUE, mu to be mupper, ml to be mlower, and 
+ * the jacE and jacI field to NULL.
+ * Finally, it allocates memory for M and pivots.
+ * The IDALapackBand return value is IDADLS_SUCCESS = 0, 
+ * IDADLS_MEM_FAIL = -1, or IDADLS_ILL_INPUT = -2.
+ *
+ * NOTE: The IDALAPACK linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDALapackBand will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that the function 
+ *       N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */                  
+int IDALapackBand(void *ida_mem, int N, int mupper, int mlower)
+{
+  IDAMem IDA_mem;
+  IDADlsMem idadls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASLAPACK", "IDALapackBand", MSGD_IDAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (tempv->ops->nvgetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASLAPACK", "IDALapackBand", MSGD_BAD_NVECTOR);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(IDA_mem);
+
+  /* Set four main function fields in IDA_mem */  
+  linit  = idaLapackBandInit;
+  lsetup = idaLapackBandSetup;
+  lsolve = idaLapackBandSolve;
+  lperf  = NULL;
+  lfree  = idaLapackBandFree;
+  
+  /* Get memory for IDADlsMemRec */
+  idadls_mem = NULL;
+  idadls_mem = (IDADlsMem) malloc(sizeof(struct IDADlsMemRec));
+  if (idadls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASLAPACK", "IDALapackBand", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_BAND;
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ  = TRUE;
+  bjac   = NULL;
+  J_data = NULL;
+
+  last_flag = IDADLS_SUCCESS;
+  idaDlsInitializeCounters(idadls_mem); 
+  setupNonNull = TRUE;
+  
+  /* Load problem dimension */
+  n = (long int) N;
+
+  /* Load half-bandwiths in idadls_mem */
+  ml = (long int) mlower;
+  mu = (long int) mupper;
+
+  /* Test ml and mu for legality */
+  if ((ml < 0) || (mu < 0) || (ml >= n) || (mu >= n)) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASLAPACK", "IDALapackBand", MSGD_BAD_SIZES);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  smu = mu + ml;
+
+  /* Allocate memory for JJ and pivot arrays */
+  JJ = NULL;
+  pivots = NULL;
+
+  JJ = NewBandMat(n, mu, ml, smu);
+  if (JJ == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASLAPACK", "IDALapackBand", MSGD_MEM_FAIL);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }  
+  pivots = NewIntArray(N);
+  if (pivots == NULL) {
+    IDAProcessError(IDA_mem, IDADLS_MEM_FAIL, "IDASLAPACK", "IDALapackBand", MSGD_MEM_FAIL);
+    DestroyMat(JJ);
+    free(idadls_mem); idadls_mem = NULL;
+    return(IDADLS_MEM_FAIL);
+  }
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = idadls_mem;
+
+  return(IDADLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH DENSE JACOBIANS
+ * =================================================================
+ */
+
+/*
+ * idaLapackDenseInit does remaining initializations specific to the dense
+ * linear solver.
+ */
+static int idaLapackDenseInit(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  idaDlsInitializeCounters(idadls_mem); 
+  
+  if (jacDQ) {
+    djac = idaDlsDenseDQJac;
+    J_data = IDA_mem;
+  } else {
+    J_data = IDA_mem->ida_user_data;
+  }
+
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * idaLapackDenseSetup does the setup operations for the dense linear solver. 
+ * It calls the Jacobian function to obtain the Newton matrix M = F_y + c_j*F_y', 
+ * updates counters, and calls the dense LU factorization routine.
+ */
+static int idaLapackDenseSetup(IDAMem IDA_mem,
+                               N_Vector yP, N_Vector ypP, N_Vector fctP,
+                               N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  IDADlsMem idadls_mem;
+  int ier, retval;
+  int intn;
+
+  idadls_mem = (IDADlsMem) lmem;
+
+  intn = (int) n;
+
+  /* Call Jacobian function */
+  nje++;
+  SetToZero(JJ);
+  retval = djac(n, tn, cj, yP, ypP, fctP, JJ, J_data, tmp1, tmp2, tmp3);
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDADLS_JACFUNC_UNRECVR, "IDASLAPACK", "idaLapackDenseSetup", MSGD_JACFUNC_FAILED);
+    last_flag = IDADLS_JACFUNC_UNRECVR;
+    return(-1);
+  } else if (retval > 0) {
+    last_flag = IDADLS_JACFUNC_RECVR;
+    return(1);
+  }
+  
+  /* Do LU factorization of M */
+  dgetrf_f77(&intn, &intn, JJ->data, &intn, pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+}
+
+/*
+ * idaLapackDenseSolve handles the solve operation for the dense linear solver
+ * by calling the dense backsolve routine.
+ */
+static int idaLapackDenseSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                               N_Vector yC, N_Vector ypC, N_Vector fctC)
+{
+  IDADlsMem idadls_mem;
+  realtype *bd, fact;
+  int ier, one = 1;
+  int intn;
+
+  idadls_mem = (IDADlsMem) lmem;
+
+  intn = (int) n;
+
+  bd = N_VGetArrayPointer(b);
+
+  dgetrs_f77("N", &intn, &one, JJ->data, &intn, pivots, bd, &intn, &ier, 1); 
+  if (ier > 0) return(1);
+
+  /* Scale the correction to account for change in cj. */
+  if (cjratio != ONE) {
+    fact = TWO/(ONE + cjratio);
+    dscal_f77(&intn, &fact, bd, &one); 
+  }
+
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * idaLapackDenseFree frees memory specific to the dense linear solver.
+ */
+static int idaLapackDenseFree(IDAMem IDA_mem)
+{
+  IDADlsMem  idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  DestroyMat(JJ);
+  DestroyArray(pivots);
+  free(idadls_mem); 
+  idadls_mem = NULL;
+
+  return(0);
+}
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS FOR IMPLICIT INTEGRATION WITH BAND JACOBIANS
+ * =================================================================
+ */
+
+/*
+ * idaLapackBandInit does remaining initializations specific to the band
+ * linear solver.
+ */
+static int idaLapackBandInit(IDAMem IDA_mem)
+{
+  IDADlsMem idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+
+  idaDlsInitializeCounters(idadls_mem); 
+
+  if (jacDQ) {
+    bjac = idaDlsBandDQJac;
+    J_data = IDA_mem;
+  } else {
+    J_data = IDA_mem->ida_user_data;
+  }
+
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * idaLapackBandSetup does the setup operations for the band linear solver.
+ * It calls the Jacobian function to obtain the Newton matrix M = F_y + c_j*F_y', 
+ * updates counters, and calls the band LU factorization routine.
+ */
+static int idaLapackBandSetup(IDAMem IDA_mem,
+                              N_Vector yP, N_Vector ypP, N_Vector fctP, 
+                              N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  IDADlsMem idadls_mem;
+  int ier, retval;
+  int intn, iml, imu, ldmat;
+
+  idadls_mem = (IDADlsMem) lmem;
+
+  intn = (int) n;
+  iml = (int) ml;
+  imu = (int) mu;
+  ldmat = JJ->ldim;
+
+  /* Call Jacobian function */
+  nje++;
+  SetToZero(JJ);
+  retval = bjac(n, mu, ml, tn, cj, yP, ypP, fctP, JJ, J_data, tmp1, tmp2, tmp3);
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDADLS_JACFUNC_UNRECVR, "IDASLAPACK", "idaLapackBandSetup", MSGD_JACFUNC_FAILED);
+    last_flag = IDADLS_JACFUNC_UNRECVR;
+    return(-1);
+  } else if (retval > 0) {
+    last_flag = IDADLS_JACFUNC_RECVR;
+    return(+1);
+  }
+  
+  /* Do LU factorization of M */
+  dgbtrf_f77(&intn, &intn, &iml, &imu, JJ->data, &ldmat, pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return 1 */
+  last_flag = (long int) ier;
+  if (ier > 0) return(1);
+  return(0);
+
+}
+
+/*
+ * idaLapackBandSolve handles the solve operation for the band linear solver
+ * by calling the band backsolve routine.
+ */
+static int idaLapackBandSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+                              N_Vector yC, N_Vector ypC, N_Vector fctC)
+{
+  IDADlsMem idadls_mem;
+  realtype *bd, fact;
+  int ier, one = 1;
+  int intn, iml, imu, ldmat;
+
+  idadls_mem = (IDADlsMem) lmem;
+
+  intn = (int) n;
+  iml = (int) ml;
+  imu = (int) mu;
+  ldmat = JJ->ldim;
+
+  bd = N_VGetArrayPointer(b);
+
+  dgbtrs_f77("N", &intn, &iml, &imu, &one, JJ->data, &ldmat, pivots, bd, &intn, &ier, 1);
+  if (ier > 0) return(1);
+
+  /* For BDF, scale the correction to account for change in cj */
+  if (cjratio != ONE) {
+    fact = TWO/(ONE + cjratio);
+    dscal_f77(&intn, &fact, bd, &one); 
+  }
+
+  last_flag = IDADLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * idaLapackBandFree frees memory specific to the band linear solver.
+ */
+static int idaLapackBandFree(IDAMem IDA_mem)
+{
+  IDADlsMem  idadls_mem;
+
+  idadls_mem = (IDADlsMem) lmem;
+  
+  DestroyMat(JJ);
+  DestroyArray(pivots);
+  free(idadls_mem); 
+  idadls_mem = NULL;
+
+  return(0);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * IDALapackDenseB is a wrapper around IDALapackDense.
+ */
+
+int IDALapackDenseB(void *ida_mem, int which, int NeqB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASLAPACK", "IDALapackDenseB", MSGD_CAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDADLS_NO_ADJ, "IDASLAPACK", "IDALapackDenseB",  MSGD_NO_ADJ);
+    return(IDADLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASLAPACK", "IDALapackDenseB", MSGD_BAD_WHICH);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Alloc memory for IDADlsMemRecB */
+  idadlsB_mem = (IDADlsMemB) malloc(sizeof(struct IDADlsMemRecB));
+  if (idadlsB_mem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDADLS_MEM_FAIL, "IDASLAPACK", "IDALapackDenseB", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  
+  }
+
+  /* Set matrix type and initialize Jac function. */
+  idadlsB_mem->d_typeB = SUNDIALS_DENSE;
+  idadlsB_mem->d_bjacB = NULL;
+
+  /* Attach lmemB data and lfreeB function. */
+  IDAB_mem->ida_lmem  = idadlsB_mem;
+  IDAB_mem->ida_lfree = IDALapackDenseFreeB;
+
+  /* Call IDALapackDense to attach the IDALAPACKDENSE linear solver. */
+  ida_memB = (void *)IDAB_mem->IDA_mem;
+  flag = IDALapackDense(ida_memB, NeqB);
+
+  if (flag != IDADLS_SUCCESS) {
+    free(idadlsB_mem);
+    idadlsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * IDALapackDenseFreeB frees the linear solver's memory for that backward problem passed 
+ * as argument. 
+ */
+
+static int IDALapackDenseFreeB(IDABMem IDAB_mem)
+{
+  IDADlsMemB idadlsB_mem;
+
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  free(idadlsB_mem);
+
+  return(0);
+}
+
+/*
+ * IDALapackBandB is a wrapper around IDALapackBand. It attaches the IDASLAPACKBAND linear solver
+ * to the backward problem memory block.
+ */
+
+int IDALapackBandB(void *ida_mem, int which,
+             int NeqB, int mupperB, int mlowerB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDADlsMemB idadlsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASLAPACKBAND", "IDALapackBandB", MSGD_CAMEM_NULL);
+    return(IDADLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDADLS_NO_ADJ, "IDASLAPACKBAND", "IDALapackBandB",  MSGD_NO_ADJ);
+    return(IDADLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASLAPACKBAND", "IDALapackBandB", MSGD_BAD_WHICH);
+    return(IDADLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get memory for IDADlsMemRecB */
+  idadlsB_mem = (IDADlsMemB) malloc(sizeof(struct IDADlsMemRecB));
+  if (idadlsB_mem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDADLS_MEM_FAIL, "IDASLAPACKBAND", "IDALapackBandB", MSGD_MEM_FAIL);
+    return(IDADLS_MEM_FAIL);
+  
+  }
+
+  /* set matrix type and initialize Jacob function. */
+  idadlsB_mem->d_typeB = SUNDIALS_BAND;
+  idadlsB_mem->d_bjacB = NULL;
+
+
+  /* Attach lmemB data and lfreeB function. */
+  IDAB_mem->ida_lmem  = idadlsB_mem;
+  IDAB_mem->ida_lfree = IDALapackBandFreeB;
+
+  /* Call IDALapackBand to attach the IDALAPACKBAND linear solver. */
+  ida_memB = (void *)IDAB_mem->IDA_mem;
+  flag = IDALapackBand(ida_memB, NeqB, mupperB, mlowerB);
+
+  if (flag != IDADLS_SUCCESS) {
+    free(idadlsB_mem);
+    idadlsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * IDALapackBandFreeB 
+ */
+
+static int IDALapackBandFreeB(IDABMem IDAB_mem)
+{
+  IDADlsMemB idadlsB_mem;
+
+  idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem;
+
+  free(idadlsB_mem);
+
+  return(0);
+}
+
diff --git a/src/idas/idas_sparse.c b/src/idas/idas_sparse.c
new file mode 100644
index 0000000..9009457
--- /dev/null
+++ b/src/idas/idas_sparse.c
@@ -0,0 +1,429 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for an IDASSLS linear solver.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "idas_impl.h"
+#include "idas_sparse_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PROTOTYPES FOR PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+static int idaSlsSparseJacBWrapper(realtype tt, realtype c_jB,
+		            N_Vector yyB, N_Vector ypB, N_Vector rBr, 
+		            SlsMat JacMat, void *ida_mem,
+			    N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+static int idaSlsSparseJacBSWrapper(realtype tt, realtype c_jB,
+			      N_Vector yyB, N_Vector ypB, N_Vector rBr, 
+			      SlsMat JacMat, void *ida_mem,
+			      N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS FOR IMPLICIT INTEGRATION
+ * =================================================================
+ */
+              
+/*
+ * IDASlsSetSparseJacFn specifies the sparse Jacobian function.
+ */
+int IDASlsSetSparseJacFn(void *ida_mem, IDASlsSparseJacFn jac)
+{
+  IDAMem IDA_mem;
+  IDASlsMem idasls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDASlsSetSparseJacFn", 
+		    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_LMEM_NULL, "IDASSLS", 
+		    "IDASlsSetSparseJacFn", MSGSP_LMEM_NULL);
+    return(IDASLS_LMEM_NULL);
+  }
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+
+  idasls_mem->s_jaceval = jac;
+
+  return(IDASLS_SUCCESS);
+}
+
+/*
+ * IDASlsGetNumJacEvals returns the number of Jacobian evaluations.
+ */
+int IDASlsGetNumJacEvals(void *ida_mem, long int *njevals)
+{
+  IDAMem IDA_mem;
+  IDASlsMem idasls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDASlsGetNumJacEvals", MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_LMEM_NULL, "IDASSLS", 
+		    "IDASlsGetNumJacEvals", MSGSP_LMEM_NULL);
+    return(IDASLS_LMEM_NULL);
+  }
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+
+  *njevals = idasls_mem->s_nje;
+
+  return(IDASLS_SUCCESS);
+}
+
+/*
+ * IDASlsGetReturnFlagName returns the name associated with a IDASLS
+ * return value.
+ */
+char *IDASlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case IDASLS_SUCCESS:
+    sprintf(name,"IDASLS_SUCCESS");
+    break;   
+  case IDASLS_MEM_NULL:
+    sprintf(name,"IDASLS_MEM_NULL");
+    break;
+  case IDASLS_LMEM_NULL:
+    sprintf(name,"IDASLS_LMEM_NULL");
+    break;
+  case IDASLS_ILL_INPUT:
+    sprintf(name,"IDASLS_ILL_INPUT");
+    break;
+  case IDASLS_MEM_FAIL:
+    sprintf(name,"IDASLS_MEM_FAIL");
+    break;
+  case IDASLS_JAC_NOSET:
+    sprintf(name,"IDASLS_JAC_NOSET");
+    break;
+  case IDASLS_JACFUNC_UNRECVR:
+    sprintf(name,"IDASLS_JACFUNC_UNRECVR");
+    break;
+  case IDASLS_JACFUNC_RECVR:
+    sprintf(name,"IDASLS_JACFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * IDASlsGetLastFlag returns the last flag set in a IDASLS function.
+ */
+int IDASlsGetLastFlag(void *ida_mem, long int *flag)
+{
+  IDAMem IDA_mem;
+  IDASlsMem idasls_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDASlsGetLastFlag", 
+		    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (IDA_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_LMEM_NULL, "IDASSLS", 
+		    "IDASlsGetLastFlag", MSGSP_LMEM_NULL);
+    return(IDASLS_LMEM_NULL);
+  }
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+
+  *flag = idasls_mem->s_last_flag;
+
+  return(IDASLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * BACKWARD INTEGRATION SUPPORT
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * EXPORTED FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+int IDASlsSetSparseJacFnB(void *ida_mem, int which, IDASlsSparseJacFnB jacB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDASlsMemB idaslsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDASlsSetSparseJacFnB", 
+		    MSGSP_CAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASLS_NO_ADJ, "IDASSLS", "IDASlsSetSparseJacFnB", 
+		    MSGSP_NO_ADJ);
+    return(IDASLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASSLS", 
+		    "IDASlsSetSparseJacFnB", MSGSP_BAD_WHICH);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+
+  if (IDAB_mem->ida_lmem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDASLS_LMEMB_NULL, 
+                    "IDASSLS", "IDASlsSetSparseJacFnB", MSGSP_LMEMB_NULL);
+    return(IDASLS_LMEMB_NULL);
+  }
+  idaslsB_mem = (IDASlsMemB) IDAB_mem->ida_lmem;
+
+  idaslsB_mem->s_djacB = jacB;
+
+  if (jacB != NULL) {
+    flag = IDASlsSetSparseJacFn(ida_memB, idaSlsSparseJacBWrapper);
+  } else {
+    flag = IDASlsSetSparseJacFn(ida_memB, NULL);
+  }
+
+  return(flag);
+}
+
+int IDASlsSetSparseJacFnBS(void *ida_mem, int which, IDASlsSparseJacFnBS jacBS)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDASlsMemB idaslsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASDLS", "IDASlsSetSparseJacFnBS", MSGSP_CAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASLS_NO_ADJ, "IDASSLS", "IDASlsSetSparseJacFnBS",  MSGSP_NO_ADJ);
+    return(IDASLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASSLS", "IDASlsSetSparseJacFnBS", MSGSP_BAD_WHICH);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Get the IDAMem corresponding to this backward problem. */
+  ida_memB = (void*) IDAB_mem->IDA_mem;
+
+  if (IDAB_mem->ida_lmem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDASLS_LMEMB_NULL, 
+                    "IDASSLS", "IDASlsSetSparseJacFnBS", MSGSP_LMEMB_NULL);
+    return(IDASLS_LMEMB_NULL);
+  }
+  idaslsB_mem = (IDASlsMemB) IDAB_mem->ida_lmem;
+
+  idaslsB_mem->s_djacBS = jacBS;
+
+  if (jacBS != NULL) {
+    flag = IDASlsSetSparseJacFn(ida_memB, idaSlsSparseJacBSWrapper);
+  } else {
+    flag = IDASlsSetSparseJacFn(ida_memB, NULL);
+  }
+
+  return(flag);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * PRIVATE INTERFACE FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * idaSlsSparseJacBWrapper
+ *
+ * This routine interfaces to the IDASlsSparseJacFnB routine provided 
+ * by the user. idaSlsSparseJacBWrapper is of type IDASlsSparseJacFn.
+ * NOTE: data actually contains ida_mem
+ */
+
+static int idaSlsSparseJacBWrapper(realtype tt, realtype c_jB,
+                       N_Vector yyB, N_Vector ypB, N_Vector rrB,
+  		       SlsMat JacMat, void *ida_mem, 
+                       N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  IDASlsMemB idaslsB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Get current backward problem. */
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  
+  /* Get linear solver's data for this backward problem. */
+  idaslsB_mem = (IDASlsMemB) IDAB_mem->ida_lmem;
+
+  /* Forward solution from interpolation */
+  if (IDAADJ_mem->ia_noInterp == FALSE) {
+    flag = IDAADJ_mem->ia_getY(IDA_mem, tt, IDAADJ_mem->ia_yyTmp, 
+			       IDAADJ_mem->ia_ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASSLS",
+		      "idaSlsSparseJacBWrapper", MSGSP_BAD_T);
+      return(-1);
+    }
+  }
+
+  /* Call user's adjoint sparse djacB routine */
+  flag = idaslsB_mem->s_djacB(tt, c_jB, 
+                              IDAADJ_mem->ia_yyTmp, IDAADJ_mem->ia_ypTmp, 
+                              yyB, ypB, rrB, 
+                              JacMat, IDAB_mem->ida_user_data,
+                              tmp1B, tmp2B, tmp3B);
+  return(flag);
+}
+
+/*
+ * idaSlsSparseJacBSWrapper
+ *
+ * This routine interfaces to the IDASlsSparseJacFnBS routine provided 
+ * by the user. idaSlsSparseJacBSWrapper is of type IDASlsSparseJacFn.
+ * NOTE: data actually contains ida_mem
+ */
+
+static int idaSlsSparseJacBSWrapper(realtype tt, realtype c_jB,
+                       N_Vector yyB, N_Vector ypB, N_Vector rrB,
+  		       SlsMat JacMat, void *ida_mem, 
+                       N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  IDASlsMemB idaslsB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Get current backward problem. */
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  
+  /* Get linear solver's data for this backward problem. */
+  idaslsB_mem = (IDASlsMemB) IDAB_mem->ida_lmem;
+
+  /* Forward solution from interpolation */
+  if (IDAADJ_mem->ia_noInterp == FALSE) {
+    if (IDAADJ_mem->ia_interpSensi)
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, IDAADJ_mem->ia_yyTmp, 
+				 IDAADJ_mem->ia_ypTmp,
+				 IDAADJ_mem->ia_yySTmp,IDAADJ_mem->ia_yySTmp);
+    else
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, IDAADJ_mem->ia_yyTmp, 
+			       IDAADJ_mem->ia_ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASSLS",
+		      "idaSlsSparseJacBSWrapper", MSGSP_BAD_T);
+      return(-1);
+    }
+  }
+
+  /* Call user's adjoint sparse djacB routine */
+  flag = idaslsB_mem->s_djacBS(tt, c_jB, 
+                              IDAADJ_mem->ia_yyTmp, IDAADJ_mem->ia_ypTmp, 
+			      IDAADJ_mem->ia_yySTmp, IDAADJ_mem->ia_ypSTmp,
+			      yyB, ypB, rrB, 
+                              JacMat, IDAB_mem->ida_user_data,
+                              tmp1B, tmp2B, tmp3B);
+  return(flag);
+}
diff --git a/src/idas/idas_sparse_impl.h b/src/idas/idas_sparse_impl.h
new file mode 100644
index 0000000..b9cedd5
--- /dev/null
+++ b/src/idas/idas_sparse_impl.h
@@ -0,0 +1,127 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4558 $
+ * $Date: 2015-10-05 09:04:16 -0700 (Mon, 05 Oct 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the IDASLS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASSPARSE_IMPL_H
+#define _IDASSPARSE_IMPL_H
+
+#include "idas/idas_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * I D A S S P A R S E    I N T E R N A L    C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * =================================================================
+ * PART I:  F O R W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDASlsMemRec, IDASlsMem                             
+ * -----------------------------------------------------------------
+ * IDASlsMem is pointer to a IDASlsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDASlsMemRec {
+
+  IDASlsSparseJacFn s_jaceval; /* user Jacobian evaluation routine 
+				  to be called */
+  void *s_jacdata;           /* J_data is passed to djac or bjac */
+
+  long int s_nje;           /* nje = no. of calls to jac */
+
+  long int s_last_flag;     /* last error return flag */
+
+  int s_first_factorize;    /* flag telling whether the first 
+			       factorization needs to happen */
+  SlsMat s_JacMat;          /* J = dF/dy + cj*dF/dy' */
+  
+  int sparsetype;           /* matrix type: compressed sparse column or row */
+
+  void *s_solver_data;      /* structure for solver-specific data */
+  
+
+} *IDASlsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+  
+
+/*
+ * =================================================================
+ * PART II:  B A C K W A R D    P R O B L E M S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDASlsMemRecB, IDASlsMemB       
+ * -----------------------------------------------------------------
+ * An IDASLS linear solver's specification function attaches such
+ * a structure to the lmemB filed of IDABMem
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDASlsMemRecB {
+
+  IDASlsSparseJacFnB s_djacB;
+  IDASlsSparseJacFnBS s_djacBS;
+
+} *IDASlsMemB;
+
+
+/*
+ * =================================================================
+ * E R R O R   M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGSP_IDAMEM_NULL "Integrator memory is NULL."
+#define MSGSP_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGSP_MEM_FAIL "A memory request failed."
+#define MSGSP_LMEM_NULL "Linear solver memory is NULL."
+#define MSGSP_ILL_INPUT "Invalid input detected."
+#define MSGSP_JAC_NOSET "Jacobian evaluation function has not been set."
+#define MSGSP_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+#define MSGSP_PACKAGE_FAIL "A call to an external package failed."
+
+#define MSGSP_CAMEM_NULL "idaadj_mem = NULL illegal."
+#define MSGSP_LMEMB_NULL "Linear solver memory is NULL for the backward integration."
+#define MSGSP_BAD_T "Bad t for interpolation."
+#define MSGSP_BAD_WHICH "Illegal value for which."
+#define MSGSP_NO_ADJ "Illegal attempt to call before calling IDAAdjInit."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/idas/idas_spbcgs.c b/src/idas/idas_spbcgs.c
new file mode 100644
index 0000000..6bf329d
--- /dev/null
+++ b/src/idas/idas_spbcgs.c
@@ -0,0 +1,595 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4909 $
+ * $Date: 2016-09-14 16:51:27 -0700 (Wed, 14 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDAS scaled preconditioned
+ * Bi-CGSTAB linear solver module, IDASPBCG.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <idas/idas_spbcgs.h>
+#include "idas_spils_impl.h"
+#include "idas_impl.h"
+
+#include <sundials/sundials_spbcgs.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define PT9  RCONST(0.9)
+#define PT05 RCONST(0.05)
+
+/* IDASPBCG linit, lsetup, lsolve, lperf, and lfree routines */
+
+static int IDASpbcgInit(IDAMem IDA_mem);
+
+static int IDASpbcgSetup(IDAMem IDA_mem, 
+                         N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+                         N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int IDASpbcgSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+                         N_Vector yy_now, N_Vector yp_now, N_Vector rr_now);
+
+static int IDASpbcgPerf(IDAMem IDA_mem, int perftask);
+
+static int IDASpbcgFree(IDAMem IDA_mem);
+
+/* IDASPBCG lfreeB function */
+
+static int IDASpbcgFreeB(IDABMem IDAB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define nst          (IDA_mem->ida_nst)
+#define tn           (IDA_mem->ida_tn)
+#define cj           (IDA_mem->ida_cj)
+#define epsNewt      (IDA_mem->ida_epsNewt)
+#define res          (IDA_mem->ida_res)
+#define user_data    (IDA_mem->ida_user_data)
+#define ewt          (IDA_mem->ida_ewt)
+#define errfp        (IDA_mem->ida_errfp)
+#define linit        (IDA_mem->ida_linit)
+#define lsetup       (IDA_mem->ida_lsetup)
+#define lsolve       (IDA_mem->ida_lsolve)
+#define lperf        (IDA_mem->ida_lperf)
+#define lfree        (IDA_mem->ida_lfree)
+#define lmem         (IDA_mem->ida_lmem)
+#define nni          (IDA_mem->ida_nni)
+#define ncfn         (IDA_mem->ida_ncfn)
+#define setupNonNull (IDA_mem->ida_setupNonNull)
+#define vec_tmpl     (IDA_mem->ida_tempv1)
+
+#define sqrtN     (idaspils_mem->s_sqrtN)
+#define epslin    (idaspils_mem->s_epslin)
+#define ytemp     (idaspils_mem->s_ytemp)
+#define yptemp    (idaspils_mem->s_yptemp)
+#define xx        (idaspils_mem->s_xx)
+#define ycur      (idaspils_mem->s_ycur)
+#define ypcur     (idaspils_mem->s_ypcur)
+#define rcur      (idaspils_mem->s_rcur)
+#define npe       (idaspils_mem->s_npe)
+#define nli       (idaspils_mem->s_nli)
+#define nps       (idaspils_mem->s_nps)
+#define ncfl      (idaspils_mem->s_ncfl)
+#define nst0      (idaspils_mem->s_nst0)
+#define nni0      (idaspils_mem->s_nni0)
+#define nli0      (idaspils_mem->s_nli0)
+#define ncfn0     (idaspils_mem->s_ncfn0)
+#define ncfl0     (idaspils_mem->s_ncfl0)
+#define nwarn     (idaspils_mem->s_nwarn)
+#define njtimes   (idaspils_mem->s_njtimes)
+#define nres      (idaspils_mem->s_nres)
+#define spils_mem (idaspils_mem->s_spils_mem)
+
+#define jtimesDQ  (idaspils_mem->s_jtimesDQ)
+#define jtimes    (idaspils_mem->s_jtimes)
+#define jdata     (idaspils_mem->s_jdata)
+
+#define last_flag (idaspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASpbcg
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDASPBCG linear solver module.
+ *
+ * IDASpbcg first calls the existing lfree routine if this is not NULL.
+ * It then sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDASpbcgInit, IDASpbcgSetup,
+ * IDASpbcgSolve, IDASpbcgPerf, and IDASpbcgFree, respectively.
+ * It allocates memory for a structure of type IDASpilsMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem). It then sets various fields
+ * in the IDASpilsMemRec structure. Finally, IDASpbcg allocates memory
+ * for ytemp, yptemp, and xx, and calls SpbcgMalloc to allocate memory
+ * for the Spbcg solver.
+ *
+ * The return value of IDASpbcg is:
+ *   IDASPILS_SUCCESS   =  0 if successful
+ *   IDASPILS_MEM_FAIL  = -1 if IDA_mem is NULL or a memory
+ *                           allocation failed
+ *   IDASPILS_ILL_INPUT = -2 if a required vector operation is not
+ *                           implemented.
+ * -----------------------------------------------------------------
+ */
+
+int IDASpbcg(void *ida_mem, int maxl)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  SpbcgMem spbcg_mem;
+  int maxl1;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPBCG", "IDASpbcg", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if N_VDotProd is present */
+  if (vec_tmpl->ops->nvdotprod == NULL) {
+    IDAProcessError(NULL, IDASPILS_ILL_INPUT, "IDASPBCG", "IDASpbcg", MSGS_BAD_NVECTOR);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree((IDAMem) ida_mem);
+
+  /* Set five main function fields in ida_mem */
+  linit  = IDASpbcgInit;
+  lsetup = IDASpbcgSetup;
+  lsolve = IDASpbcgSolve;
+  lperf  = IDASpbcgPerf;
+  lfree  = IDASpbcgFree;
+
+  /* Get memory for IDASpilsMemRec */
+  idaspils_mem = NULL;
+  idaspils_mem = (IDASpilsMem) malloc(sizeof(struct IDASpilsMemRec));
+  if (idaspils_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcg", MSGS_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  idaspils_mem->s_type = SPILS_SPBCG;
+
+  /* Set SPBCG parameters that were passed in call sequence */
+  maxl1 = (maxl <= 0) ? IDA_SPILS_MAXL : maxl;
+  idaspils_mem->s_maxl = maxl1;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  jdata    = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  idaspils_mem->s_pset   = NULL;
+  idaspils_mem->s_psolve = NULL;
+  idaspils_mem->s_pfree  = NULL;
+  idaspils_mem->s_pdata  = IDA_mem->ida_user_data;
+
+  /* Set default values for the rest of the Spbcg parameters */
+  idaspils_mem->s_eplifac   = PT05;
+  idaspils_mem->s_dqincfac  = ONE;
+
+  idaspils_mem->s_last_flag = IDASPILS_SUCCESS;
+
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to FALSE */
+  setupNonNull = FALSE;
+
+  /* Allocate memory for ytemp, yptemp, and xx */
+
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcg", MSGS_MEM_FAIL);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  yptemp = N_VClone(vec_tmpl);
+  if (yptemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  xx = N_VClone(vec_tmpl);
+  if (xx == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt(N_VDotProd(ytemp, ytemp));
+
+  /* Call SpbcgMalloc to allocate workspace for Spbcg */
+  spbcg_mem = NULL;
+  spbcg_mem = SpbcgMalloc(maxl1, vec_tmpl);
+  if (spbcg_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcg", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    N_VDestroy(xx);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Attach SPBCG memory to spils memory structure */
+  spils_mem = (void *)spbcg_mem;
+
+  /* Attach linear solver memory to the integrator memory */
+  lmem = idaspils_mem;
+
+  return(IDASPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASPBCG interface routines
+ * -----------------------------------------------------------------
+ */
+
+/* Additional readability Replacements */
+
+#define maxl     (idaspils_mem->s_maxl)
+#define eplifac  (idaspils_mem->s_eplifac)
+#define psolve   (idaspils_mem->s_psolve)
+#define pset     (idaspils_mem->s_pset)
+#define pdata    (idaspils_mem->s_pdata)
+
+static int IDASpbcgInit(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  SpbcgMem spbcg_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+  spbcg_mem = (SpbcgMem) spils_mem;
+
+  /* Initialize counters */
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to TRUE iff there is preconditioning with setup */
+  setupNonNull = (psolve != NULL) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = IDASpilsDQJtimes;
+    jdata = IDA_mem;
+  } else {
+    jdata = user_data;
+  }
+
+  /*  Set maxl in the SPBCG memory in case it was changed by the user */
+  spbcg_mem->l_max  = maxl;
+
+  last_flag = IDASPILS_SUCCESS;
+
+  return(0);
+}
+
+static int IDASpbcgSetup(IDAMem IDA_mem, 
+                         N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+                         N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int retval;
+  IDASpilsMem idaspils_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Call user setup routine pset and update counter npe */
+  retval = pset(tn, yy_p, yp_p, rr_p, cj, pdata,
+                tmp1, tmp2, tmp3);
+  npe++;
+
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, SPBCG_PSET_FAIL_UNREC, "IDASPBCG", "IDASpbcgSetup", MSGS_PSET_FAILED);
+    last_flag = SPBCG_PSET_FAIL_UNREC;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = SPBCG_PSET_FAIL_REC;
+    return(+1);
+  }
+
+  last_flag = SPBCG_SUCCESS;
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASpbcgSolve
+ * -----------------------------------------------------------------
+ * Note: The x-scaling and b-scaling arrays are both equal to weight.
+ *
+ * We set the initial guess, x = 0, then call SpbcgSolve.
+ * We copy the solution x into b, and update the counters nli, nps,
+ * and ncfl. If SpbcgSolve returned nli_inc = 0 (hence x = 0), we
+ * take the SPBCG vtemp vector (= P_inverse F) as the correction
+ * vector instead. Finally, we set the return value according to the
+ * success of SpbcgSolve.
+ * -----------------------------------------------------------------
+ */
+
+static int IDASpbcgSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+                         N_Vector yy_now, N_Vector yp_now, N_Vector rr_now)
+{
+  IDASpilsMem idaspils_mem;
+  SpbcgMem spbcg_mem;
+  int pretype, nli_inc, nps_inc, retval;
+  realtype res_norm;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  spbcg_mem = (SpbcgMem)spils_mem;
+
+  /* Set SpbcgSolve convergence test constant epslin, in terms of the
+     Newton convergence test constant epsNewt and safety factors. The factor
+     sqrt(Neq) assures that the Bi-CGSTAB convergence test is applied to the
+     WRMS norm of the residual vector, rather than the weighted L2 norm. */
+  epslin = sqrtN*eplifac*epsNewt;
+
+  /* Set vectors ycur, ypcur, and rcur for use by the Atimes and Psolve */
+  ycur = yy_now;
+  ypcur = yp_now;
+  rcur = rr_now;
+
+  /* Set SpbcgSolve inputs pretype and initial guess xx = 0 */  
+  pretype = (psolve == NULL) ? PREC_NONE : PREC_LEFT;
+  N_VConst(ZERO, xx);
+  
+  /* Call SpbcgSolve and copy xx to bb */
+  retval = SpbcgSolve(spbcg_mem, IDA_mem, xx, bb, pretype, epslin,
+                      IDA_mem, weight, weight, IDASpilsAtimes,
+                      IDASpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+  last_flag = retval;
+  if (nli_inc == 0) N_VScale(ONE, SPBCG_VTEMP(spbcg_mem), bb);
+  else N_VScale(ONE, xx, bb);
+  
+  /* Increment counters nli, nps, and return if successful */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPBCG_SUCCESS) ncfl++;
+
+  /* Interpret return value from SpbcgSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPBCG_SUCCESS:
+    return(0);
+    break;
+  case SPBCG_RES_REDUCED:
+    return(1);
+    break;
+  case SPBCG_CONV_FAIL:
+    return(1);
+    break;
+  case SPBCG_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPBCG_MEM_NULL:
+    return(-1);
+    break;
+  case SPBCG_ATIMES_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPBCG_ATIMES_FAIL_UNREC, "IDaSPBCG", "IDASpbcgSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPBCG_PSOLVE_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPBCG_PSOLVE_FAIL_UNREC, "IDASPBCG", "IDASpbcgSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASpbcgPerf
+ * -----------------------------------------------------------------
+ * This routine handles performance monitoring specific to the
+ * IDASPBCG linear solver. When perftask = 0, it saves values of
+ * various counters. When perftask = 1, it examines difference
+ * quotients in these counters, and depending on their values, it
+ * prints up to three warning messages. Messages are printed up to
+ * a maximum of 10 times.
+ * -----------------------------------------------------------------
+ */
+
+static int IDASpbcgPerf(IDAMem IDA_mem, int perftask)
+{
+  IDASpilsMem idaspils_mem;
+  realtype avdim, rcfn, rcfl;
+  long int nstd, nnid;
+  booleantype lavd, lcfn, lcfl;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (perftask == 0) {
+    nst0 = nst;  nni0 = nni;  nli0 = nli;
+    ncfn0 = ncfn;  ncfl0 = ncfl;  
+    nwarn = 0;
+    return(0);
+  }
+
+  nstd = nst - nst0;  nnid = nni - nni0;
+  if (nstd == 0 || nnid == 0) return(0);
+  avdim = (realtype) ((nli - nli0)/((realtype) nnid));
+  rcfn = (realtype) ((ncfn - ncfn0)/((realtype) nstd));
+  rcfl = (realtype) ((ncfl - ncfl0)/((realtype) nnid));
+  lavd = (avdim > ((realtype) maxl));
+  lcfn = (rcfn > PT9);
+  lcfl = (rcfl > PT9);
+  if (!(lavd || lcfn || lcfl)) return(0);
+  nwarn++;
+  if (nwarn > 10) return(1);
+  if (lavd) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPBCG", "IDASpbcgPerf", MSGS_AVD_WARN, tn, avdim);
+  if (lcfn) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPBCG", "IDASpbcgPerf", MSGS_CFN_WARN, tn, rcfn);
+  if (lcfl) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPBCG", "IDASpbcgPerf", MSGS_CFL_WARN, tn, rcfl);
+
+  return(0);
+}
+
+static int IDASpbcgFree(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  SpbcgMem spbcg_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  N_VDestroy(ytemp);
+  N_VDestroy(yptemp);
+  N_VDestroy(xx);
+
+  spbcg_mem = (SpbcgMem)spils_mem;
+  SpbcgFree(spbcg_mem);
+
+  if (idaspils_mem->s_pfree != NULL) (idaspils_mem->s_pfree)(IDA_mem);
+
+  free(idaspils_mem); idaspils_mem = NULL;
+
+  return(0);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/* Additional readability replacements */
+
+#define lmemB       (IDAADJ_mem->ia_lmemB)
+#define lfreeB      (IDAADJ_mem->ia_lfreeB)
+
+/*
+ * IDASpbcgB
+ *
+ * Wrapper for the backward phase
+ *
+ */
+
+int IDASpbcgB(void *ida_mem, int which, int maxlB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDASpilsMemB idaspilsB_mem;
+  int flag;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPBCG", "IDASpbcgB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASPBCG", "IDASpbcgB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASPBCG", "IDASpbcgB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  
+  /* Get memory for IDASpilsMemRecB */
+  idaspilsB_mem = NULL;
+  idaspilsB_mem = (IDASpilsMemB) malloc(sizeof(struct IDASpilsMemRecB));
+  if (idaspilsB_mem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDASPBCG", "IDASpbcgB", MSGS_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  idaspilsB_mem->s_psetB = NULL;
+  idaspilsB_mem->s_psolveB = NULL;
+  idaspilsB_mem->s_P_dataB = NULL;
+
+  /* initialize Jacobian function */
+  idaspilsB_mem->s_jtimesB = NULL;
+
+  /* attach lmem and lfree */
+  IDAB_mem->ida_lmem = idaspilsB_mem;
+  IDAB_mem->ida_lfree = IDASpbcgFreeB;
+
+  flag = IDASpbcg(IDAB_mem->IDA_mem, maxlB);
+
+  if (flag != IDASPILS_SUCCESS) {
+    free(idaspilsB_mem);
+    idaspilsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * IDASpbcgFreeB 
+ */
+
+static int IDASpbcgFreeB(IDABMem IDAB_mem)
+{
+  IDASpilsMemB idaspilsB_mem;
+
+  idaspilsB_mem = (IDASpilsMemB) IDAB_mem->ida_lmem;
+
+  free(idaspilsB_mem);
+
+  return(0);
+}
diff --git a/src/idas/idas_spgmr.c b/src/idas/idas_spgmr.c
new file mode 100644
index 0000000..60953be
--- /dev/null
+++ b/src/idas/idas_spgmr.c
@@ -0,0 +1,587 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4909 $
+ * $Date: 2016-09-14 16:51:27 -0700 (Wed, 14 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Alan C. Hindmarsh, and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDAS Scaled              
+ * Preconditioned GMRES linear solver module, IDASPGMR.            
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <idas/idas_spgmr.h>
+#include "idas_spils_impl.h"
+#include "idas_impl.h"
+
+#include <sundials/sundials_spgmr.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define PT9          RCONST(0.9)
+#define PT05         RCONST(0.05)
+
+/* IDASPGMR linit, lsetup, lsolve, lperf, and lfree routines */
+
+static int IDASpgmrInit(IDAMem IDA_mem);
+
+static int IDASpgmrSetup(IDAMem IDA_mem, 
+                         N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+                         N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int IDASpgmrSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+                         N_Vector yy_now, N_Vector yp_now, N_Vector rr_now);
+
+static int IDASpgmrPerf(IDAMem IDA_mem, int perftask);
+
+static int IDASpgmrFree(IDAMem IDA_mem);
+
+/* IDASPGMR lfreeB function */
+static int IDASpgmrFreeB(IDABMem IDAB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define nst          (IDA_mem->ida_nst)
+#define tn           (IDA_mem->ida_tn)
+#define cj           (IDA_mem->ida_cj)
+#define epsNewt      (IDA_mem->ida_epsNewt)
+#define res          (IDA_mem->ida_res)
+#define user_data    (IDA_mem->ida_user_data)
+#define ewt          (IDA_mem->ida_ewt)
+#define errfp        (IDA_mem->ida_errfp)
+#define linit        (IDA_mem->ida_linit)
+#define lsetup       (IDA_mem->ida_lsetup)
+#define lsolve       (IDA_mem->ida_lsolve)
+#define lperf        (IDA_mem->ida_lperf)
+#define lfree        (IDA_mem->ida_lfree)
+#define lmem         (IDA_mem->ida_lmem)
+#define nni          (IDA_mem->ida_nni)
+#define ncfn         (IDA_mem->ida_ncfn)
+#define setupNonNull (IDA_mem->ida_setupNonNull)
+#define vec_tmpl     (IDA_mem->ida_tempv1)
+
+#define sqrtN     (idaspils_mem->s_sqrtN)
+#define epslin    (idaspils_mem->s_epslin)
+#define ytemp     (idaspils_mem->s_ytemp)
+#define yptemp    (idaspils_mem->s_yptemp)
+#define xx        (idaspils_mem->s_xx)
+#define ycur      (idaspils_mem->s_ycur)
+#define ypcur     (idaspils_mem->s_ypcur)
+#define rcur      (idaspils_mem->s_rcur)
+#define npe       (idaspils_mem->s_npe)
+#define nli       (idaspils_mem->s_nli)
+#define nps       (idaspils_mem->s_nps)
+#define ncfl      (idaspils_mem->s_ncfl)
+#define nst0      (idaspils_mem->s_nst0)
+#define nni0      (idaspils_mem->s_nni0)
+#define nli0      (idaspils_mem->s_nli0)
+#define ncfn0     (idaspils_mem->s_ncfn0)
+#define ncfl0     (idaspils_mem->s_ncfl0)
+#define nwarn     (idaspils_mem->s_nwarn)
+#define njtimes   (idaspils_mem->s_njtimes)
+#define nres      (idaspils_mem->s_nres)
+#define spils_mem (idaspils_mem->s_spils_mem)
+
+#define jtimesDQ  (idaspils_mem->s_jtimesDQ)
+#define jtimes    (idaspils_mem->s_jtimes)
+#define jdata     (idaspils_mem->s_jdata)
+
+#define last_flag (idaspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * IDASpgmr
+ * -----------------------------------------------------------------
+ *
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDASPGMR linear solver module.  
+ *
+ * IDASpgmr first calls the existing lfree routine if this is not NULL.
+ * It then sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDASpgmrInit, IDASpgmrSetup,
+ * IDASpgmrSolve, IDASpgmrPerf, and IDASpgmrFree, respectively.
+ * It allocates memory for a structure of type IDASpilsMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem).  It then various fields in the
+ * IDASpilsMemRec structure. Finally, IDASpgmr allocates memory for 
+ * ytemp, yptemp, and xx, and calls SpgmrMalloc to allocate memory
+ * for the Spgmr solver.
+ *
+ * The return value of IDASpgmr is:
+ *   IDASPILS_SUCCESS       = 0  if successful
+ *   IDASPILS_MEM_FAIL     = -1 if IDA_mem is NULL or a memory allocation failed
+ *   IDASPILS_ILL_INPUT = -2 if the gstype argument is illegal.
+ *
+ * -----------------------------------------------------------------
+ */
+
+int IDASpgmr(void *ida_mem, int maxl)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  SpgmrMem spgmr_mem;
+  int maxl1;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPGMR", "IDASpgmr", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if N_VDotProd is present */
+  if(vec_tmpl->ops->nvdotprod == NULL) {
+    IDAProcessError(NULL, IDASPILS_ILL_INPUT, "IDASPGMR", "IDASpgmr", MSGS_BAD_NVECTOR);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree((IDAMem) ida_mem);
+
+  /* Set five main function fields in ida_mem */
+  linit  = IDASpgmrInit;
+  lsetup = IDASpgmrSetup;
+  lsolve = IDASpgmrSolve;
+  lperf  = IDASpgmrPerf;
+  lfree  = IDASpgmrFree;
+
+  /* Get memory for IDASpilsMemRec */
+  idaspils_mem = NULL;
+  idaspils_mem = (IDASpilsMem) malloc(sizeof(struct IDASpilsMemRec));
+  if (idaspils_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmr", MSGS_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  idaspils_mem->s_type = SPILS_SPGMR;
+
+  /* Set SPGMR parameters that were passed in call sequence */
+  maxl1 = (maxl <= 0) ? IDA_SPILS_MAXL : maxl;
+  idaspils_mem->s_maxl     = maxl1;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  jdata    = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  idaspils_mem->s_pset   = NULL;
+  idaspils_mem->s_psolve = NULL;
+  idaspils_mem->s_pfree  = NULL;
+  idaspils_mem->s_pdata  = IDA_mem->ida_user_data;
+
+  /* Set default values for the rest of the Spgmr parameters */
+  idaspils_mem->s_gstype   = MODIFIED_GS;
+  idaspils_mem->s_maxrs    = IDA_SPILS_MAXRS;
+  idaspils_mem->s_eplifac  = PT05;
+  idaspils_mem->s_dqincfac = ONE;
+
+  idaspils_mem->s_last_flag  = IDASPILS_SUCCESS;
+
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to FALSE */
+  setupNonNull = FALSE;
+
+  /* Allocate memory for ytemp, yptemp, and xx */
+
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmr", MSGS_MEM_FAIL);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  yptemp = N_VClone(vec_tmpl);
+  if (yptemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  xx = N_VClone(vec_tmpl);
+  if (xx == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt( N_VDotProd(ytemp, ytemp) );
+
+  /* Call SpgmrMalloc to allocate workspace for Spgmr */
+  spgmr_mem = NULL;
+  spgmr_mem = SpgmrMalloc(maxl1, vec_tmpl);
+  if (spgmr_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    N_VDestroy(xx);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Attach SPGMR memory to spils memory structure */
+  spils_mem = (void *)spgmr_mem;
+
+  /* Attach linear solver memory to the integrator memory */
+  lmem = idaspils_mem;
+
+  return(IDASPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASPGMR interface routines
+ * -----------------------------------------------------------------
+ */
+
+/* Additional readability Replacements */
+
+#define gstype   (idaspils_mem->s_gstype)
+#define maxl     (idaspils_mem->s_maxl)
+#define maxrs    (idaspils_mem->s_maxrs)
+#define eplifac  (idaspils_mem->s_eplifac)
+#define psolve   (idaspils_mem->s_psolve)
+#define pset     (idaspils_mem->s_pset)
+#define pdata    (idaspils_mem->s_pdata)
+
+static int IDASpgmrInit(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Initialize counters */
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to TRUE iff there is preconditioning with setup */
+  setupNonNull = (psolve != NULL) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = IDASpilsDQJtimes;
+    jdata = IDA_mem;
+  } else {
+    jdata = user_data;
+  }
+
+  last_flag = IDASPILS_SUCCESS;
+  return(0);
+}
+
+static int IDASpgmrSetup(IDAMem IDA_mem, 
+                         N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+                         N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int retval;
+  IDASpilsMem idaspils_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Call user setup routine pset and update counter npe. */
+  retval = pset(tn, yy_p, yp_p, rr_p, cj, pdata,
+                tmp1, tmp2, tmp3);
+  npe++;
+
+  /* Return flag showing success or failure of pset. */
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, SPGMR_PSET_FAIL_UNREC, "IDASPGMR", "IDASpgmrSetup", MSGS_PSET_FAILED);
+    last_flag = SPGMR_PSET_FAIL_UNREC;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = SPGMR_PSET_FAIL_REC;
+    return(+1);
+  }
+
+  last_flag = SPGMR_SUCCESS;
+  return(0);
+}
+
+
+/*
+ * The x-scaling and b-scaling arrays are both equal to weight.
+ *  
+ * We set the initial guess, x = 0, then call SpgmrSolve.  
+ * We copy the solution x into b, and update the counters nli, nps, ncfl.
+ * If SpgmrSolve returned nli_inc = 0 (hence x = 0), we take the SPGMR
+ * vtemp vector (= P_inverse F) as the correction vector instead.
+ *  Finally, we set the return value according to the success of SpgmrSolve.
+ */
+
+static int IDASpgmrSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+                         N_Vector yy_now, N_Vector yp_now, N_Vector rr_now)
+{
+  IDASpilsMem idaspils_mem;
+  SpgmrMem spgmr_mem;
+  int pretype, nli_inc, nps_inc, retval;
+  realtype res_norm;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  spgmr_mem = (SpgmrMem) spils_mem;
+
+  /* Set SpgmrSolve convergence test constant epslin, in terms of the
+    Newton convergence test constant epsNewt and safety factors.  The factor 
+    sqrt(Neq) assures that the GMRES convergence test is applied to the
+    WRMS norm of the residual vector, rather than the weighted L2 norm. */
+  epslin = sqrtN*eplifac*epsNewt;
+
+  /* Set vectors ycur, ypcur, and rcur for use by the Atimes and Psolve */
+  ycur = yy_now;
+  ypcur = yp_now;
+  rcur = rr_now;
+
+  /* Set SpgmrSolve inputs pretype and initial guess xx = 0. */  
+  pretype = (psolve == NULL) ? PREC_NONE : PREC_LEFT;
+  N_VConst(ZERO, xx);
+  
+  /* Call SpgmrSolve and copy xx to bb. */
+  retval = SpgmrSolve(spgmr_mem, IDA_mem, xx, bb, pretype, gstype, epslin,
+                      maxrs, IDA_mem, weight, weight, IDASpilsAtimes,
+                      IDASpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+
+  if (nli_inc == 0) N_VScale(ONE, SPGMR_VTEMP(spgmr_mem), bb);
+  else N_VScale(ONE, xx, bb);
+  
+  /* Increment counters nli, nps, and return if successful. */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPGMR_SUCCESS) ncfl++;
+
+  /* Interpret return value from SpgmrSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPGMR_SUCCESS:
+    return(0);
+    break;
+  case SPGMR_RES_REDUCED:
+    return(1);
+    break;
+  case SPGMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPGMR_QRFACT_FAIL:
+    return(1);
+    break;
+  case SPGMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPGMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPGMR_ATIMES_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPGMR_ATIMES_FAIL_UNREC, "IDASPGMR", "IDASpgmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPGMR_PSOLVE_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPGMR_PSOLVE_FAIL_UNREC, "IDASPGMR", "IDASpgmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  case SPGMR_GS_FAIL:
+    return(-1);
+    break;
+  case SPGMR_QRSOL_FAIL:
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+/*
+ * This routine handles performance monitoring specific to the IDASPGMR
+ * linear solver.  When perftask = 0, it saves values of various counters.
+ * When perftask = 1, it examines difference quotients in these counters,
+ * and depending on their values, it prints up to three warning messages.
+ * Messages are printed up to a maximum of 10 times.
+ */
+
+static int IDASpgmrPerf(IDAMem IDA_mem, int perftask)
+{
+  IDASpilsMem idaspils_mem;
+  realtype avdim, rcfn, rcfl;
+  long int nstd, nnid;
+  booleantype lavd, lcfn, lcfl;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (perftask == 0) {
+    nst0 = nst;  nni0 = nni;  nli0 = nli;
+    ncfn0 = ncfn;  ncfl0 = ncfl;  
+    nwarn = 0;
+    return(0);
+  }
+
+  nstd = nst - nst0;  nnid = nni - nni0;
+  if (nstd == 0 || nnid == 0) return(0);
+  avdim = (realtype) ((nli - nli0)/((realtype) nnid));
+  rcfn = (realtype) ((ncfn - ncfn0)/((realtype) nstd));
+  rcfl = (realtype) ((ncfl - ncfl0)/((realtype) nnid));
+  lavd = (avdim > ((realtype) maxl ));
+  lcfn = (rcfn > PT9);
+  lcfl = (rcfl > PT9);
+  if (!(lavd || lcfn || lcfl)) return(0);
+  nwarn++;
+  if (nwarn > 10) return(1);
+  if (lavd) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPGMR", "IDASpgmrPerf", MSGS_AVD_WARN, tn, avdim);
+  if (lcfn) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPGMR", "IDASpgmrPerf", MSGS_CFN_WARN, tn, rcfn);
+  if (lcfl) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPGMR", "IDASpgmrPerf", MSGS_CFL_WARN, tn, rcfl);
+
+  return(0);
+}
+
+static int IDASpgmrFree(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  SpgmrMem spgmr_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+  
+  N_VDestroy(ytemp);
+  N_VDestroy(yptemp);
+  N_VDestroy(xx);
+
+  spgmr_mem = (SpgmrMem) spils_mem;
+  SpgmrFree(spgmr_mem);
+
+  if (idaspils_mem->s_pfree != NULL) (idaspils_mem->s_pfree)(IDA_mem);
+
+  free(idaspils_mem); idaspils_mem = NULL;
+
+  return(0);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * IDASpgmrB
+ *
+ * Wrapper for the backward phase
+ *
+ */
+
+int IDASpgmrB(void *ida_mem, int which, int maxlB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDASpilsMemB idaspilsB_mem;
+  int flag;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPGMR", "IDASpbcgB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASPGMR", "IDASpgmrB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASPGMR", "IDASpgmrB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  
+  /* Get memory for IDASpilsMemRecB */
+  idaspilsB_mem = NULL;
+  idaspilsB_mem = (IDASpilsMemB) malloc(sizeof(struct IDASpilsMemRecB));
+  if (idaspilsB_mem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDASPGMR", "IDASpgmrB", MSGS_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  idaspilsB_mem->s_psetB = NULL;
+  idaspilsB_mem->s_psolveB = NULL;
+  idaspilsB_mem->s_P_dataB = NULL;
+
+  /* initialize Jacobian function */
+  idaspilsB_mem->s_jtimesB = NULL;
+
+  /* attach lmem and lfree */
+  IDAB_mem->ida_lmem = idaspilsB_mem;
+  IDAB_mem->ida_lfree = IDASpgmrFreeB;
+
+  flag = IDASpgmr(IDAB_mem->IDA_mem, maxlB);
+
+  if (flag != IDASPILS_SUCCESS) {
+    free(idaspilsB_mem);
+    idaspilsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * IDASpgmrFreeB 
+ */
+
+static int IDASpgmrFreeB(IDABMem IDAB_mem)
+{
+  IDASpilsMemB idaspilsB_mem;
+
+  idaspilsB_mem = (IDASpilsMemB) IDAB_mem->ida_lmem;
+
+  free(idaspilsB_mem);
+
+  return(0);
+}
diff --git a/src/idas/idas_spils.c b/src/idas/idas_spils.c
new file mode 100644
index 0000000..7de6bf8
--- /dev/null
+++ b/src/idas/idas_spils.c
@@ -0,0 +1,1410 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the common implementation file for the IDAS Scaled              
+ * Preconditioned Linear Solver modules.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "idas_spils_impl.h"
+#include "idas_impl.h"
+
+/* Private constants */
+
+#define ZERO   RCONST(0.0)
+#define PT25   RCONST(0.25)
+#define PT05   RCONST(0.05)
+#define ONE    RCONST(1.0)
+
+/* Algorithmic constants */
+
+#define MAX_ITERS  3  /* max. number of attempts to recover in DQ J*v */
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTION PROTOTYPES
+ * =================================================================
+ */
+
+static int IDAAspilsPrecSetupB(realtype tt, 
+                               N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                               realtype c_jB, void *idaadj_mem,
+                               N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+static int IDAAspilsPrecSetupBS(realtype tt, 
+                                N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                                realtype c_jB, void *idaadj_mem,
+                                N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
+
+static int IDAAspilsPrecSolveB(realtype tt, 
+                               N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                               N_Vector rvecB, N_Vector zvecB,
+                               realtype c_jB, realtype deltaB,
+                               void *idaadj_mem, N_Vector tmpB);
+
+static int IDAAspilsPrecSolveBS(realtype tt, 
+                                N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                                N_Vector rvecB, N_Vector zvecB,
+                                realtype c_jB, realtype deltaB,
+                                void *idaadj_mem, N_Vector tmpB);
+
+static int IDAAspilsJacTimesVecB(realtype tt,
+                                 N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                 N_Vector vB, N_Vector JvB, 
+                                 realtype c_jB, void *idaadj_mem, 
+                                 N_Vector tmp1B, N_Vector tmp2B);
+
+static int IDAAspilsJacTimesVecBS(realtype tt,
+                                  N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                  N_Vector vB, N_Vector JvB, 
+                                  realtype c_jB, void *idaadj_mem, 
+                                  N_Vector tmp1B, N_Vector tmp2B);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define lrw1      (IDA_mem->ida_lrw1)
+#define liw1      (IDA_mem->ida_liw1)
+#define tn        (IDA_mem->ida_tn)
+#define cj        (IDA_mem->ida_cj)
+#define res       (IDA_mem->ida_res)
+#define user_data (IDA_mem->ida_user_data)
+#define ewt       (IDA_mem->ida_ewt)
+#define lmem      (IDA_mem->ida_lmem)
+
+#define ils_type  (idaspils_mem->s_type)
+#define sqrtN     (idaspils_mem->s_sqrtN)
+#define epslin    (idaspils_mem->s_epslin)
+#define ytemp     (idaspils_mem->s_ytemp)
+#define yptemp    (idaspils_mem->s_yptemp)
+#define xx        (idaspils_mem->s_xx)
+#define ycur      (idaspils_mem->s_ycur)
+#define ypcur     (idaspils_mem->s_ypcur)
+#define rcur      (idaspils_mem->s_rcur)
+#define npe       (idaspils_mem->s_npe)
+#define nli       (idaspils_mem->s_nli)
+#define nps       (idaspils_mem->s_nps)
+#define ncfl      (idaspils_mem->s_ncfl)
+#define njtimes   (idaspils_mem->s_njtimes)
+#define nres      (idaspils_mem->s_nres)
+
+#define jtimesDQ  (idaspils_mem->s_jtimesDQ)
+#define jtimes    (idaspils_mem->s_jtimes)
+#define jdata     (idaspils_mem->s_jdata)
+
+#define last_flag (idaspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * OPTIONAL INPUT and OUTPUT
+ * -----------------------------------------------------------------
+ */
+
+int IDASpilsSetGSType(void *ida_mem, int gstype)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetGSType", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsSetGSType", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (ils_type != SPILS_SPGMR) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetGSType", MSGS_BAD_LSTYPE);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Check for legal gstype */
+  if ((gstype != MODIFIED_GS) && (gstype != CLASSICAL_GS)) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetGSType", MSGS_BAD_GSTYPE);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  idaspils_mem->s_gstype = gstype;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetMaxRestarts(void *ida_mem, int maxrs)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetMaxRestarts", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsSetMaxRestarts", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (ils_type != SPILS_SPGMR) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetMaxRestarts", MSGS_BAD_LSTYPE);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Check for legal maxrs */
+  if (maxrs < 0) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetMaxRestarts", MSGS_NEG_MAXRS);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  idaspils_mem->s_maxrs = maxrs;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetMaxl(void *ida_mem, int maxl)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetMaxl", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsSetMaxl", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (ils_type == SPILS_SPGMR) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetMaxl", MSGS_BAD_LSTYPE);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  idaspils_mem->s_maxl = (maxl <= 0) ? IDA_SPILS_MAXL : maxl;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetEpsLin(void *ida_mem, realtype eplifac)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetEpsLin", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsSetEpsLin", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Check for legal maxrs */
+  if (eplifac < ZERO) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetEpsLin", MSGS_NEG_EPLIFAC);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  if (eplifac == ZERO)
+    idaspils_mem->s_eplifac = PT05;
+  else
+    idaspils_mem->s_eplifac = eplifac;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetIncrementFactor(void *ida_mem, realtype dqincfac)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetIncrementFactor", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsSetIncrementFactor", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Check for legal maxrs */
+  if (dqincfac <= ZERO) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetIncrementFactor", MSGS_NEG_DQINCFAC);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  idaspils_mem->s_dqincfac = dqincfac;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetPreconditioner(void *ida_mem,
+                              IDASpilsPrecSetupFn pset, IDASpilsPrecSolveFn psolve)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetPreconditioner", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsSetPreconditioner", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  idaspils_mem->s_pset = pset;
+  idaspils_mem->s_psolve = psolve;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsSetJacTimesVecFn(void *ida_mem, IDASpilsJacTimesVecFn jtv)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetJacTimesVecFn", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsSetJacTimesVecFn", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (jtv != NULL) {
+    jtimesDQ = FALSE;
+    jtimes = jtv;
+  } else {
+    jtimesDQ = TRUE;
+  }
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetWorkSpace(void *ida_mem, long int *lenrwLS, long int *leniwLS)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  int maxl;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsGetWorkSpace", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsGetWorkSpace", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  switch(ils_type) {
+  case SPILS_SPGMR:
+    maxl = idaspils_mem->s_maxl;
+    *lenrwLS = lrw1*(maxl + 6) + maxl*(maxl + 4) + 1;
+    *leniwLS = liw1*(maxl + 6);
+    break;
+  case SPILS_SPBCG:
+    *lenrwLS = lrw1 * 10;
+    *leniwLS = liw1 * 10;
+    break;
+  case SPILS_SPTFQMR:
+    *lenrwLS = lrw1*13;
+    *leniwLS = liw1*13;
+    break;
+  }
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumPrecEvals(void *ida_mem, long int *npevals)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsGetNumPrecEvals", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsGetNumPrecEvals", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *npevals = npe;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumPrecSolves(void *ida_mem, long int *npsolves)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsGetNumPrecSolves", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsGetNumPrecSolves", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *npsolves = nps;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumLinIters(void *ida_mem, long int *nliters)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsGetNumLinIters", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsGetNumLinIters", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *nliters = nli;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumConvFails(void *ida_mem, long int *nlcfails)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsGetNumConvFails", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsGetNumConvFails", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *nlcfails = ncfl;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumJtimesEvals(void *ida_mem, long int *njvevals)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsGetNumJtimesEvals", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsGetNumJtimesEvals", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *njvevals = njtimes;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetNumResEvals(void *ida_mem, long int *nrevalsLS)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsGetNumResEvals", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsGetNumResEvals", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *nrevalsLS = nres;
+
+  return(IDASPILS_SUCCESS);
+}
+
+int IDASpilsGetLastFlag(void *ida_mem, long int *flag)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsGetLastFlag", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  if (lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEM_NULL, "IDASSPILS", "IDASpilsGetLastFlag", MSGS_LMEM_NULL);
+    return(IDASPILS_LMEM_NULL);
+  }
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  *flag = last_flag;
+
+  return(IDASPILS_SUCCESS);
+}
+
+char *IDASpilsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case IDASPILS_SUCCESS:
+    sprintf(name,"IDASPILS_SUCCESS");
+    break; 
+  case IDASPILS_MEM_NULL:
+    sprintf(name,"IDASPILS_MEM_NULL");
+    break;
+  case IDASPILS_LMEM_NULL:
+    sprintf(name,"IDASPILS_LMEM_NULL");
+    break;
+  case IDASPILS_ILL_INPUT:
+    sprintf(name,"IDASPILS_ILL_INPUT");
+    break;
+  case IDASPILS_MEM_FAIL:
+    sprintf(name,"IDASPILS_MEM_FAIL");
+    break;
+  case IDASPILS_PMEM_NULL:
+    sprintf(name,"IDASPILS_PMEM_NULL");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASPILS private functions
+ * -----------------------------------------------------------------
+ */
+
+#define psolve   (idaspils_mem->s_psolve)
+#define pdata    (idaspils_mem->s_pdata)
+#define dqincfac (idaspils_mem->s_dqincfac)
+
+/*
+ * This routine generates the matrix-vector product z = Jv, where
+ * J is the system Jacobian, by calling either the user provided
+ * routine or the internal DQ routine.
+ */
+
+int IDASpilsAtimes(void *ida_mem, N_Vector v, N_Vector z)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  int jtflag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  jtflag = jtimes(tn, ycur, ypcur, rcur, v, z, cj, jdata, ytemp, yptemp);
+  njtimes++;
+
+  return(jtflag);
+}
+
+/*
+ * This routine interfaces between the generic Solve routine and
+ * the user's psolve routine.  It passes to psolve all required state 
+ * information from ida_mem.  Its return value is the same as that
+ * returned by psolve.  Note that the generic solver guarantees
+ * that IDASilsPSolve will not be called in the case psolve = NULL.
+ */
+
+int IDASpilsPSolve(void *ida_mem, N_Vector r, N_Vector z, int lr)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  int retval;
+
+  IDA_mem = (IDAMem) ida_mem;
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  retval = psolve(tn, ycur, ypcur, rcur, r, z, cj, epslin, pdata, ytemp);
+
+  /* This call is counted in nps within the IDASp**Solve routine */
+
+  return(retval);
+
+}
+
+/*
+ * This routine generates the matrix-vector product z = Jv, where
+ * J is the system Jacobian, by using a difference quotient approximation.
+ * The approximation is 
+ *      Jv = [F(t,y1,yp1) - F(t,y,yp)]/sigma,  where
+ *        y1 = y + sigma*v,  yp1 = yp + cj*sigma*v,
+ *        sigma = sqrt(Neq)*dqincfac.
+ * The return value from the call to res is saved in order to set the
+ * return flag from IDASp**Solve.
+ */
+
+int IDASpilsDQJtimes(realtype tt,
+                     N_Vector yy, N_Vector yp, N_Vector rr,
+                     N_Vector v, N_Vector Jv, 
+                     realtype c_j, void *data, 
+                     N_Vector work1, N_Vector work2)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  N_Vector y_tmp, yp_tmp;
+  realtype sig=ZERO, siginv;
+  int iter, retval;
+
+  /* data is ida_mem */
+  IDA_mem = (IDAMem) data;
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  switch(ils_type) {
+  case SPILS_SPGMR:
+    sig = sqrtN*dqincfac;
+    break;
+  case SPILS_SPBCG:
+    sig = dqincfac/N_VWrmsNorm(v, ewt);
+    break;
+  case SPILS_SPTFQMR:
+    sig = dqincfac/N_VWrmsNorm(v, ewt);
+    break;
+  }
+
+  /* Rename work1 and work2 for readibility */
+  y_tmp  = work1;
+  yp_tmp = work2;
+
+  for (iter=0; iter<MAX_ITERS; iter++) {
+
+    /* Set y_tmp = yy + sig*v, yp_tmp = yp + cj*sig*v. */
+    N_VLinearSum(sig, v, ONE, yy, y_tmp);
+    N_VLinearSum(c_j*sig, v, ONE, yp, yp_tmp);
+    
+    /* Call res for Jv = F(t, y_tmp, yp_tmp), and return if it failed. */
+    retval = res(tt, y_tmp, yp_tmp, Jv, user_data); 
+    nres++;
+    if (retval == 0) break;
+    if (retval < 0)  return(-1);
+
+    sig *= PT25;
+  }
+
+  if (retval > 0) return(+1);
+
+  /* Set Jv to [Jv - rr]/sig and return. */
+  siginv = ONE/sig;
+  N_VLinearSum(siginv, Jv, -siginv, rr, Jv);
+
+  return(0);
+
+}
+
+
+int idaSpilsInitializeCounters(IDASpilsMem idaspils_mem)
+{
+  idaspils_mem->s_npe     = 0;
+  idaspils_mem->s_nli     = 0;
+  idaspils_mem->s_nps     = 0;
+  idaspils_mem->s_ncfl    = 0;
+  idaspils_mem->s_njtimes = 0;
+  idaspils_mem->s_nres    = 0;
+
+  return(0);
+}
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/* Readability replacements */
+
+#define yyTmp        (IDAADJ_mem->ia_yyTmp)
+#define ypTmp        (IDAADJ_mem->ia_ypTmp)
+#define noInterp     (IDAADJ_mem->ia_noInterp)
+#define interpSensi  (IDAADJ_mem->ia_interpSensi)
+#define yySTmp      (IDAADJ_mem->ia_yySTmp)
+#define ypSTmp      (IDAADJ_mem->ia_ypSTmp)
+
+/*
+ * -----------------------------------------------------------------
+ * OPTIONAL INPUT and OUTPUT FUNCTIONS
+ * -----------------------------------------------------------------
+ */
+
+int IDASpilsSetGSTypeB(void *ida_mem, int which, int gstypeB)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetGSTypeB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASSPILS", "IDASpilsSetGSTypeB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetGSTypeB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  /* Call the corresponding Set* function for the backward problem. */
+  return IDASpilsSetGSType(ida_memB, gstypeB);
+}
+
+int IDASpilsSetMaxRestartsB(void *ida_mem, int which, int maxrsB)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetMaxRestartsB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASSPILS", "IDASpilsSetMaxRestartsB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetMaxRestartsB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  /* Call the corresponding Set* function for the backward problem. */
+  return IDASpilsSetMaxRestarts(ida_memB,maxrsB);
+}
+
+int IDASpilsSetEpsLinB(void *ida_mem, int which, realtype eplifacB)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetEpsLinB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASSPILS", "IDASpilsSetEpsLinB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetEpsLinB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  /* Call the corresponding Set* function for the backward problem. */
+  return IDASpilsSetEpsLin(ida_memB, eplifacB);
+}
+
+int IDASpilsSetMaxlB(void *ida_mem, int which, int maxlB)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", "IDASpilsSetMaxlB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASSPILS", "IDASpilsSetMaxlB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", "IDASpilsSetMaxlB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  /* Call the corresponding Set* function for the backward problem. */
+  return IDASpilsSetMaxl(ida_memB, maxlB);
+}
+
+int IDASpilsSetIncrementFactorB(void *ida_mem, int which, realtype dqincfacB)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", 
+                    "IDASpilsSetIncrementFactorB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASSPILS", 
+                    "IDASpilsSetIncrementFactorB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", 
+                    "IDASpilsSetIncrementFactorB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  /* Call the corresponding Set* function for the backward problem. */
+  return IDASpilsSetIncrementFactor(ida_memB, dqincfacB);
+}
+
+int IDASpilsSetPreconditionerB(void *ida_mem, int which, 
+                               IDASpilsPrecSetupFnB psetB, IDASpilsPrecSolveFnB psolveB)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  IDASpilsMemB idaspilsB_mem;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", 
+                    "IDASpilsSetPreconditionerB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASSPILS", 
+                    "IDASpilsSetPreconditionerB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", 
+                    "IDASpilsSetPreconditionerB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  if ( IDAB_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEMB_NULL, "IDASSPILS", 
+                    "IDASpilsSetPreconditionerB", MSGS_LMEMB_NULL);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Get the IDASpilsMemB data. */
+  idaspilsB_mem = (IDASpilsMemB) IDAB_mem->ida_lmem;
+
+  /* Set preconditioners for the backward problem. */
+  idaspilsB_mem->s_psetB   = psetB;
+  idaspilsB_mem->s_psolveB = psolveB;
+
+  if (psetB == NULL) {
+    return IDASpilsSetPreconditioner(ida_memB, NULL, IDAAspilsPrecSolveB);
+  } else {
+    return IDASpilsSetPreconditioner(ida_memB, IDAAspilsPrecSetupB, IDAAspilsPrecSolveB);
+  }
+}
+
+int IDASpilsSetPreconditionerBS(void *ida_mem, int which, 
+                                IDASpilsPrecSetupFnBS psetBS,
+                                IDASpilsPrecSolveFnBS psolveBS)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  IDASpilsMemB idaspilsB_mem;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", 
+                    "IDASpilsSetPreconditionerBS", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASSPILS", 
+                    "IDASpilsSetPreconditionerBS",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", 
+                    "IDASpilsSetPreconditionerBS", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  if ( IDAB_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEMB_NULL, "IDASSPILS", 
+                    "IDASpilsSetPreconditionerBS", MSGS_LMEMB_NULL);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Get the IDASpilsMemB data. */
+  idaspilsB_mem = (IDASpilsMemB) IDAB_mem->ida_lmem;
+
+  /* Set preconditioners for the backward problem. */
+  idaspilsB_mem->s_psetBS   = psetBS;
+  idaspilsB_mem->s_psolveBS = psolveBS;
+
+  if (psetBS == NULL) {
+    return IDASpilsSetPreconditioner(ida_memB, NULL, IDAAspilsPrecSolveBS);
+  } else {
+    return IDASpilsSetPreconditioner(ida_memB, IDAAspilsPrecSetupBS, IDAAspilsPrecSolveBS);
+  }
+}
+
+
+int IDASpilsSetJacTimesVecFnB(void *ida_mem, int which, IDASpilsJacTimesVecFnB jtvB)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  IDASpilsMemB idaspilsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", 
+                    "IDASpilsSetJacTimesVecFnB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASSPILS", 
+                    "IDASpilsSetJacTimesVecFnB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", 
+                    "IDASpilsSetJacTimesVecFnB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  if ( IDAB_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEMB_NULL, "IDASSPILS", 
+                    "IDASpilsSetJacTimesVecFnB", MSGS_LMEMB_NULL);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  idaspilsB_mem = (IDASpilsMemB) IDAB_mem->ida_lmem;
+
+  /* Call the corresponding Set* function for the backward problem. */
+
+  idaspilsB_mem->s_jtimesB   = jtvB;
+
+  if (jtvB != NULL) {
+    flag = IDASpilsSetJacTimesVecFn(ida_memB, IDAAspilsJacTimesVecB);
+  } else {
+    flag = IDASpilsSetJacTimesVecFn(ida_memB, NULL);
+  }
+  return(flag);
+}
+
+int IDASpilsSetJacTimesVecFnBS(void *ida_mem, int which, IDASpilsJacTimesVecFnBS jtvBS)
+{
+  IDAadjMem IDAADJ_mem;
+  IDAMem IDA_mem;
+  IDABMem IDAB_mem;
+  IDASpilsMemB idaspilsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASSPILS", 
+                    "IDASpilsSetJacTimesVecFnBS", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASSPILS", 
+                    "IDASpilsSetJacTimesVecFnBS",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASSPILS", 
+                    "IDASpilsSetJacTimesVecFnBS", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+  /* ida_mem corresponding to 'which' problem. */
+  ida_memB = (void *) IDAB_mem->IDA_mem;
+
+  if ( IDAB_mem->ida_lmem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_LMEMB_NULL, "IDASSPILS", 
+                    "IDASpilsSetJacTimesVecFnBS", MSGS_LMEMB_NULL);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  idaspilsB_mem = (IDASpilsMemB) IDAB_mem->ida_lmem;
+
+  /* Call the corresponding Set* function for the backward problem. */
+
+  idaspilsB_mem->s_jtimesBS = jtvBS;
+
+  if (jtvBS != NULL) {
+    flag = IDASpilsSetJacTimesVecFn(ida_memB, IDAAspilsJacTimesVecBS);
+  } else {
+    flag = IDASpilsSetJacTimesVecFn(ida_memB, NULL);
+  }
+  return(flag);
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * IDASSPILS private functions
+ *
+ * These routines are interfaces to the routines provided by the
+ * user for backward problems.
+ *
+ * -----------------------------------------------------------------
+ */
+
+static int IDAAspilsPrecSetupB(realtype tt, 
+                              N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                              realtype c_jB, void *ida_mem,
+                              N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDASpilsMemB idaspilsB_mem; 
+  IDABMem IDAB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  idaspilsB_mem = (IDASpilsMemB)IDAB_mem->ida_lmem;
+  
+  /* Get forward solution from interpolation. */
+  if (noInterp==FALSE) {
+    flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASSPILS", "IDAAspilsPrecSetupB", MSGS_BAD_T);
+      return(-1);
+    }
+  }
+
+  /* Call user's adjoint precondB routine */
+  flag = idaspilsB_mem->s_psetB(tt, yyTmp, ypTmp, yyB, ypB, rrB, 
+                                c_jB, IDAB_mem->ida_user_data,
+                                tmp1B, tmp2B, tmp3B);
+  return(flag);
+}
+
+static int IDAAspilsPrecSetupBS(realtype tt, 
+                               N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                               realtype c_jB, void *ida_mem,
+                               N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDASpilsMemB idaspilsB_mem;
+  IDABMem IDAB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  idaspilsB_mem = (IDASpilsMemB)IDAB_mem->ida_lmem;
+  
+  /* Get forward solution from interpolation. */
+  if( noInterp == FALSE) {
+    if (interpSensi)
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, yySTmp, ypSTmp);
+    else
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASSPILS", "IDAAspilsPrecSetupBS", MSGS_BAD_T);
+      return(-1);
+    }
+  }
+
+  /* Call user's adjoint precondBS routine */
+  flag = idaspilsB_mem->s_psetBS(tt, yyTmp, ypTmp, yySTmp, ypSTmp,
+                                 yyB, ypB, rrB,
+                                 c_jB, IDAB_mem->ida_user_data,
+                                 tmp1B, tmp2B, tmp3B);
+  return(flag);
+}
+
+
+static int IDAAspilsPrecSolveB(realtype tt, 
+                               N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                               N_Vector rvecB, N_Vector zvecB,
+                               realtype c_jB, realtype deltaB,
+                               void *ida_mem, N_Vector tmpB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDASpilsMemB idaspilsB_mem; 
+  IDABMem IDAB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  idaspilsB_mem = (IDASpilsMemB)IDAB_mem->ida_lmem;
+  
+  /* Get forward solution from interpolation. */
+  if (noInterp==FALSE) {
+    flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASSPILS", "IDAAspilsPrecSolveB", MSGS_BAD_T);
+      return(-1);
+    }
+  }
+  /* Call user's adjoint psolveB routine */
+  flag = idaspilsB_mem->s_psolveB(tt, yyTmp, ypTmp, 
+                                  yyB, ypB, rrB, 
+                                  rvecB, zvecB, 
+                                  c_jB, deltaB, 
+                                  IDAB_mem->ida_user_data, tmpB);
+  return(flag);
+}
+
+static int IDAAspilsPrecSolveBS(realtype tt, 
+                                N_Vector yyB, N_Vector ypB, N_Vector rrB, 
+                                N_Vector rvecB, N_Vector zvecB,
+                                realtype c_jB, realtype deltaB,
+                                void *ida_mem, N_Vector tmpB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDASpilsMemB idaspilsB_mem;
+  IDABMem IDAB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  idaspilsB_mem = (IDASpilsMemB)IDAB_mem->ida_lmem;
+  
+  /* Get forward solution from interpolation. */
+  if( noInterp == FALSE) {
+    if (interpSensi)
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, yySTmp, ypSTmp);
+    else
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASSPILS", "IDAAspilsPrecSolveBS", MSGS_BAD_T);
+      return(-1);
+    }
+  }
+
+  /* Call user's adjoint psolveBS routine */
+  flag = idaspilsB_mem->s_psolveBS(tt, yyTmp, ypTmp, yySTmp, ypSTmp,
+                                   yyB, ypB, rrB,
+                                   rvecB, zvecB,
+                                   c_jB, deltaB,
+                                   IDAB_mem->ida_user_data, tmpB);
+  return(flag);
+}
+
+
+static int IDAAspilsJacTimesVecB(realtype tt,
+                                 N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                 N_Vector vB, N_Vector JvB, 
+                                 realtype c_jB, void *ida_mem, 
+                                 N_Vector tmp1B, N_Vector tmp2B)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDASpilsMemB idaspilsB_mem; 
+  IDABMem IDAB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  idaspilsB_mem = (IDASpilsMemB)IDAB_mem->ida_lmem;
+  
+  /* Get forward solution from interpolation. */
+  if (noInterp==FALSE) {
+    flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASSPILS", "IDAAspilsJacTimesVecB", MSGS_BAD_T);
+      return(-1);
+    }
+  }
+  /* Call user's adjoint jtimesB routine */
+  flag = idaspilsB_mem->s_jtimesB(tt, yyTmp, ypTmp, 
+                                  yyB, ypB, rrB, 
+                                  vB, JvB, 
+                                  c_jB, IDAB_mem->ida_user_data, 
+                                  tmp1B, tmp2B);
+  return(flag);
+}
+
+static int IDAAspilsJacTimesVecBS(realtype tt,
+                                  N_Vector yyB, N_Vector ypB, N_Vector rrB,
+                                  N_Vector vB, N_Vector JvB, 
+                                  realtype c_jB, void *ida_mem, 
+                                  N_Vector tmp1B, N_Vector tmp2B)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDASpilsMemB idaspilsB_mem;
+  IDABMem IDAB_mem;
+  int flag;
+
+  IDA_mem = (IDAMem) ida_mem;
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+  IDAB_mem = IDAADJ_mem->ia_bckpbCrt;
+  idaspilsB_mem = (IDASpilsMemB)IDAB_mem->ida_lmem;
+  
+  /* Get forward solution from interpolation. */
+  if( noInterp == FALSE) {
+    if (interpSensi)
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, yySTmp, ypSTmp);
+    else
+      flag = IDAADJ_mem->ia_getY(IDA_mem, tt, yyTmp, ypTmp, NULL, NULL);
+    if (flag != IDA_SUCCESS) {
+      IDAProcessError(IDAB_mem->IDA_mem, -1, "IDASSPILS", "IDAAspilsJacTimesVecBS", MSGS_BAD_T);
+      return(-1);
+    }
+  }
+
+  /* Call user's adjoint jtimesBS routine */
+  flag = idaspilsB_mem->s_jtimesBS(tt, yyTmp, ypTmp, yySTmp, ypSTmp,
+                                   yyB, ypB, rrB,
+                                   vB, JvB,
+                                   c_jB, IDAB_mem->ida_user_data,
+                                   tmp1B, tmp2B);
+  return(flag);
+}
diff --git a/src/idas/idas_spils_impl.h b/src/idas/idas_spils_impl.h
new file mode 100644
index 0000000..6cbaac6
--- /dev/null
+++ b/src/idas/idas_spils_impl.h
@@ -0,0 +1,234 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4921 $
+ * $Date: 2016-09-19 14:35:11 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmers: Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the common header file (private version) for the Scaled
+ * Preconditioned Iterative Linear Solver modules.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _IDASSPILS_IMPL_H
+#define _IDASSPILS_IMPL_H
+
+#include <idas/idas_spils.h>
+#include "idas_impl.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Types of iterative linear solvers */
+
+#define SPILS_SPGMR   1
+#define SPILS_SPBCG   2
+#define SPILS_SPTFQMR 3
+
+/* Constants */
+
+#define IDA_SPILS_MAXL    5
+#define IDA_SPILS_MAXRS   5
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDASpilsMemRec, IDASpilsMem                             
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDASpilsMemRec {
+
+  int s_type;          /* type of scaled preconditioned iterative LS   */
+
+  int  s_gstype;       /* type of Gram-Schmidt orthogonalization       */
+  realtype s_sqrtN;    /* sqrt(N)                                      */
+  int  s_maxl;         /* maxl = maximum dimension of the Krylov space */
+  int  s_maxrs;        /* maxrs = max. number of GMRES restarts        */
+  realtype s_eplifac;  /* eplifac = linear convergence factor          */
+  realtype s_dqincfac; /* dqincfac = optional increment factor in Jv   */
+  realtype s_epslin;   /* SpgrmSolve tolerance parameter               */
+
+  long int s_npe;      /* npe = total number of precond calls          */   
+  long int s_nli;      /* nli = total number of linear iterations      */
+  long int s_nps;      /* nps = total number of psolve calls           */
+  long int s_ncfl;     /* ncfl = total number of convergence failures  */
+  long int s_nres;     /* nres = total number of calls to res          */
+  long int s_njtimes;  /* njtimes = total number of calls to jtimes    */
+
+  long int s_nst0;     /* nst0 = saved nst (for performance monitor)   */   
+  long int s_nni0;     /* nni0 = saved nni (for performance monitor)   */   
+  long int s_nli0;     /* nli0 = saved nli (for performance monitor)   */   
+  long int s_ncfn0;    /* ncfn0 = saved ncfn (for performance monitor) */   
+  long int s_ncfl0;    /* ncfl0 = saved ncfl (for performance monitor) */   
+  long int s_nwarn;    /* nwarn = no. of warnings (for perf. monitor)  */   
+
+  N_Vector s_ytemp;    /* temp vector used by IDAAtimesDQ              */ 
+  N_Vector s_yptemp;   /* temp vector used by IDAAtimesDQ              */ 
+  N_Vector s_xx;       /* temp vector used by the solve function       */
+  N_Vector s_ycur;     /* current y vector in Newton iteration         */
+  N_Vector s_ypcur;    /* current yp vector in Newton iteration        */
+  N_Vector s_rcur;     /* rcur = F(tn, ycur, ypcur)                    */
+
+  void *s_spils_mem;   /* memory used by the generic solver            */
+
+  long int s_last_flag; /* last error return flag                      */
+
+  /* Preconditioner computation
+   * (a) user-provided:
+   *     - pdata == user_data
+   *     - pfree == NULL (the user dealocates memory for f_data)
+   * (b) internal preconditioner module
+   *     - pdata == ida_mem
+   *     - pfree == set by the prec. module and called in IDASpilsFree
+   */
+
+  IDASpilsPrecSetupFn s_pset;
+  IDASpilsPrecSolveFn s_psolve;
+  int (*s_pfree)(IDAMem IDA_mem);
+  void *s_pdata;
+  
+  /* Jacobian times vector compuation
+   * (a) jtimes function provided by the user:
+   *     - jdata == user_data
+   *     - jtimesDQ == FALSE
+   * (b) internal jtimes
+   *     - jdata == ida_mem
+   *     - jtimesDQ == TRUE
+   */
+
+  booleantype s_jtimesDQ;
+  IDASpilsJacTimesVecFn s_jtimes;
+  void *s_jdata;
+
+} *IDASpilsMem;
+
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+
+/* Atimes and PSolve routines called by generic solver */
+
+int IDASpilsAtimes(void *ida_mem, N_Vector v, N_Vector z);
+
+int IDASpilsPSolve(void *ida_mem, N_Vector r, N_Vector z, int lr);
+
+/* Difference quotient approximation for Jac times vector */
+
+int IDASpilsDQJtimes(realtype tt,
+                     N_Vector yy, N_Vector yp, N_Vector rr,
+                     N_Vector v, N_Vector Jv, 
+                     realtype c_j, void *data, 
+                     N_Vector work1, N_Vector work2);
+
+/* Auxilliary functions */
+
+int idaSpilsInitializeCounters(IDASpilsMem idaspils_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Error and Warning Messages
+ * -----------------------------------------------------------------
+ */
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define MSGS_TIME "at t = %Lg, "
+#define MSGS_FRMT "%Le."
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define MSGS_TIME "at t = %lg, "
+#define MSGS_FRMT "%le."
+
+#else
+
+#define MSGS_TIME "at t = %g, "
+#define MSGS_FRMT "%e."
+
+#endif
+
+
+/* Error Messages */
+
+#define MSGS_IDAMEM_NULL   "Integrator memory is NULL."
+#define MSGS_MEM_FAIL      "A memory request failed."
+#define MSGS_BAD_NVECTOR   "A required vector operation is not implemented."
+#define MSGS_BAD_LSTYPE    "Incompatible linear solver type."
+#define MSGS_LMEM_NULL     "Linear solver memory is NULL."
+#define MSGS_BAD_GSTYPE    "gstype has an illegal value."
+#define MSGS_NEG_MAXRS     "maxrs < 0 illegal."
+#define MSGS_NEG_EPLIFAC   "eplifac < 0.0 illegal."
+#define MSGS_NEG_DQINCFAC  "dqincfac < 0.0 illegal."
+
+#define MSGS_PSET_FAILED "The preconditioner setup routine failed in an unrecoverable manner."
+#define MSGS_PSOLVE_FAILED "The preconditioner solve routine failed in an unrecoverable manner."
+#define MSGS_JTIMES_FAILED "The Jacobian x vector routine failed in an unrecoverable manner."
+
+/* Warning Messages */
+
+#define MSGS_WARN  "Warning: " MSGS_TIME "poor iterative algorithm performance. "
+
+#define MSGS_AVD_WARN  MSGS_WARN "Average number of linear iterations is " MSGS_FRMT
+#define MSGS_CFN_WARN  MSGS_WARN "Nonlinear convergence failure rate is " MSGS_FRMT
+#define MSGS_CFL_WARN  MSGS_WARN "Linear convergence failure rate is " MSGS_FRMT
+
+/* 
+ * -----------------------------------------------------------------
+ * PART II - backward problems
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : IDASpilsMemRecB, IDASpilsMemB       
+ * -----------------------------------------------------------------
+ * IDASpgmrB, IDASpbcgB, and IDASptfqmr attach such a structure to the 
+ * lmemB filed of IDAadjMem
+ * -----------------------------------------------------------------
+ */
+
+typedef struct IDASpilsMemRecB {
+
+  IDASpilsJacTimesVecFnB s_jtimesB;
+  IDASpilsJacTimesVecFnBS s_jtimesBS;
+  IDASpilsPrecSetupFnB s_psetB;
+  IDASpilsPrecSetupFnBS s_psetBS;
+  IDASpilsPrecSolveFnB s_psolveB;
+  IDASpilsPrecSolveFnBS s_psolveBS;
+  void *s_P_dataB;
+
+} *IDASpilsMemB;
+
+/*
+ * -----------------------------------------------------------------
+ * Error Messages 
+ * -----------------------------------------------------------------
+ */
+
+#define MSGS_LMEMB_NULL "Linear solver memory is NULL for the backward integration."
+#define MSGS_BAD_T      "Bad t for interpolation."
+#define MSGS_BAD_WHICH  "Illegal value for which."
+#define MSGS_NO_ADJ     "Illegal attempt to call before calling IDAAdjInit."
+
+#define MSGS_LMEMB_NULL  "Linear solver memory is NULL for the backward integration."
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/idas/idas_sptfqmr.c b/src/idas/idas_sptfqmr.c
new file mode 100644
index 0000000..3920213
--- /dev/null
+++ b/src/idas/idas_sptfqmr.c
@@ -0,0 +1,588 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4909 $
+ * $Date: 2016-09-14 16:51:27 -0700 (Wed, 14 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDAS scaled preconditioned
+ * TFQMR linear solver module, IDASPTFQMR.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <idas/idas_sptfqmr.h>
+#include "idas_spils_impl.h"
+#include "idas_impl.h"
+
+#include <sundials/sundials_sptfqmr.h>
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define PT9  RCONST(0.9)
+#define PT05 RCONST(0.05)
+
+/* IDASPTFQMR linit, lsetup, lsolve, lperf, and lfree routines */
+
+static int IDASptfqmrInit(IDAMem IDA_mem);
+
+static int IDASptfqmrSetup(IDAMem IDA_mem, 
+                           N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+                           N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
+
+static int IDASptfqmrSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+                           N_Vector yy_now, N_Vector yp_now, N_Vector rr_now);
+
+static int IDASptfqmrPerf(IDAMem IDA_mem, int perftask);
+
+static int IDASptfqmrFree(IDAMem IDA_mem);
+
+/* IDASPTFQMR lfree function for backward problem. */
+static int IDASptfqmrFreeB(IDABMem IDAB_mem);
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/* Readability Replacements */
+
+#define nst          (IDA_mem->ida_nst)
+#define tn           (IDA_mem->ida_tn)
+#define cj           (IDA_mem->ida_cj)
+#define epsNewt      (IDA_mem->ida_epsNewt)
+#define res          (IDA_mem->ida_res)
+#define user_data    (IDA_mem->ida_user_data)
+#define ewt          (IDA_mem->ida_ewt)
+#define errfp        (IDA_mem->ida_errfp)
+#define linit        (IDA_mem->ida_linit)
+#define lsetup       (IDA_mem->ida_lsetup)
+#define lsolve       (IDA_mem->ida_lsolve)
+#define lperf        (IDA_mem->ida_lperf)
+#define lfree        (IDA_mem->ida_lfree)
+#define lmem         (IDA_mem->ida_lmem)
+#define nni          (IDA_mem->ida_nni)
+#define ncfn         (IDA_mem->ida_ncfn)
+#define setupNonNull (IDA_mem->ida_setupNonNull)
+#define vec_tmpl     (IDA_mem->ida_tempv1)
+
+#define sqrtN       (idaspils_mem->s_sqrtN)
+#define epslin      (idaspils_mem->s_epslin)
+#define ytemp       (idaspils_mem->s_ytemp)
+#define yptemp      (idaspils_mem->s_yptemp)
+#define xx          (idaspils_mem->s_xx)
+#define ycur        (idaspils_mem->s_ycur)
+#define ypcur       (idaspils_mem->s_ypcur)
+#define rcur        (idaspils_mem->s_rcur)
+#define npe         (idaspils_mem->s_npe)
+#define nli         (idaspils_mem->s_nli)
+#define nps         (idaspils_mem->s_nps)
+#define ncfl        (idaspils_mem->s_ncfl)
+#define nst0        (idaspils_mem->s_nst0)
+#define nni0        (idaspils_mem->s_nni0)
+#define nli0        (idaspils_mem->s_nli0)
+#define ncfn0       (idaspils_mem->s_ncfn0)
+#define ncfl0       (idaspils_mem->s_ncfl0)
+#define nwarn       (idaspils_mem->s_nwarn)
+#define njtimes     (idaspils_mem->s_njtimes)
+#define nres        (idaspils_mem->s_nres)
+#define spils_mem   (idaspils_mem->s_spils_mem)
+
+#define jtimesDQ    (idaspils_mem->s_jtimesDQ)
+#define jtimes      (idaspils_mem->s_jtimes)
+#define jdata       (idaspils_mem->s_jdata)
+
+#define last_flag   (idaspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASptfqmr
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDASPTFQMR linear solver module.
+ *
+ * IDASptfqmr first calls the existing lfree routine if this is not NULL.
+ * It then sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDASptfqmrInit, IDASptfqmrSetup,
+ * IDASptfqmrSolve, IDASptfqmrPerf, and IDASptfqmrFree, respectively.
+ * It allocates memory for a structure of type IDASpilsMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem). It then sets various fields
+ * in the IDASpilsMemRec structure. Finally, IDASptfqmr allocates 
+ * memory for ytemp, yptemp, and xx, and calls SptfqmrMalloc to 
+ * allocate memory for the Sptfqmr solver.
+ *
+ * The return value of IDASptfqmr is:
+ *   IDASPILS_SUCCESS   =  0 if successful
+ *   IDASPILS_MEM_FAIL  = -1 if IDA_mem is NULL or a memory
+ *                             allocation failed
+ *   IDASPILS_ILL_INPUT = -2 if a required vector operation is not
+ *                             implemented.
+ * -----------------------------------------------------------------
+ */
+
+int IDASptfqmr(void *ida_mem, int maxl)
+{
+  IDAMem IDA_mem;
+  IDASpilsMem idaspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int maxl1;
+
+  /* Return immediately if ida_mem is NULL */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPTFQMR", "IDASptfqmr", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Check if N_VDotProd is present */
+  if (vec_tmpl->ops->nvdotprod == NULL) {
+    IDAProcessError(NULL, IDASPILS_ILL_INPUT, "IDASPTFQMR", "IDASptfqmr", MSGS_BAD_NVECTOR);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree((IDAMem) ida_mem);
+
+  /* Set five main function fields in ida_mem */
+  linit  = IDASptfqmrInit;
+  lsetup = IDASptfqmrSetup;
+  lsolve = IDASptfqmrSolve;
+  lperf  = IDASptfqmrPerf;
+  lfree  = IDASptfqmrFree;
+
+  /* Get memory for IDASpilsMemRec */
+  idaspils_mem = NULL;
+  idaspils_mem = (IDASpilsMem) malloc(sizeof(struct IDASpilsMemRec));
+  if (idaspils_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmr", MSGS_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Set ILS type */
+  idaspils_mem->s_type = SPILS_SPTFQMR;
+
+  /* Set SPTFQMR parameters that were passed in call sequence */
+  maxl1 = (maxl <= 0) ? IDA_SPILS_MAXL : maxl;
+  idaspils_mem->s_maxl = maxl1;
+
+  /* Set defaults for Jacobian-related fileds */
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  jdata    = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+  idaspils_mem->s_pset   = NULL;
+  idaspils_mem->s_psolve = NULL;
+  idaspils_mem->s_pfree  = NULL;
+  idaspils_mem->s_pdata  = IDA_mem->ida_user_data;
+
+  /* Set default values for the rest of the Sptfqmr parameters */
+  idaspils_mem->s_eplifac   = PT05;
+  idaspils_mem->s_dqincfac  = ONE;
+
+  idaspils_mem->s_last_flag = IDASPILS_SUCCESS;
+
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to FALSE */
+  setupNonNull = FALSE;
+
+  /* Allocate memory for ytemp, yptemp, and xx */
+
+  ytemp = N_VClone(vec_tmpl);
+  if (ytemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmr", MSGS_MEM_FAIL);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  yptemp = N_VClone(vec_tmpl);
+  if (yptemp == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  xx = N_VClone(vec_tmpl);
+  if (xx == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Compute sqrtN from a dot product */
+  N_VConst(ONE, ytemp);
+  sqrtN = SUNRsqrt(N_VDotProd(ytemp, ytemp));
+
+  /* Call SptfqmrMalloc to allocate workspace for Sptfqmr */
+  sptfqmr_mem = NULL;
+  sptfqmr_mem = SptfqmrMalloc(maxl1, vec_tmpl);
+  if (sptfqmr_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmr", MSGS_MEM_FAIL);
+    N_VDestroy(ytemp);
+    N_VDestroy(yptemp);
+    N_VDestroy(xx);
+    free(idaspils_mem); idaspils_mem = NULL;
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  /* Attach SPTFQMR memory to spils memory structure */
+  spils_mem = (void *)sptfqmr_mem;
+
+  /* Attach linear solver memory to the integrator memory */
+  lmem = idaspils_mem;
+
+  return(IDASPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASPTFQMR interface routines
+ * -----------------------------------------------------------------
+ */
+
+/* Additional readability Replacements */
+
+#define maxl     (idaspils_mem->s_maxl)
+#define eplifac  (idaspils_mem->s_eplifac)
+#define psolve   (idaspils_mem->s_psolve)
+#define pset     (idaspils_mem->s_pset)
+#define pdata    (idaspils_mem->s_pdata)
+
+static int IDASptfqmrInit(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  SptfqmrMem sptfqmr_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+  sptfqmr_mem = (SptfqmrMem) spils_mem;
+
+  /* Initialize counters */
+  idaSpilsInitializeCounters(idaspils_mem);
+
+  /* Set setupNonNull to TRUE iff there is preconditioning with setup */
+  setupNonNull = (psolve != NULL) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (jtimesDQ) {
+    jtimes = IDASpilsDQJtimes;
+    jdata = IDA_mem;
+  } else {
+    jdata = user_data;
+  }
+
+  /*  Set maxl in the SPTFQMR memory in case it was changed by the user */
+  sptfqmr_mem->l_max  = maxl;
+
+  last_flag = IDASPILS_SUCCESS;
+
+  return(0);
+}
+
+static int IDASptfqmrSetup(IDAMem IDA_mem, 
+			   N_Vector yy_p, N_Vector yp_p, N_Vector rr_p, 
+			   N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
+{
+  int retval;
+  IDASpilsMem idaspils_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  /* Call user setup routine pset and update counter npe */
+  retval = pset(tn, yy_p, yp_p, rr_p, cj, pdata,
+                tmp1, tmp2, tmp3);
+  npe++;
+
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, SPTFQMR_PSET_FAIL_UNREC, "IDASPTFQMR", "IDASptfqmrSetup", MSGS_PSET_FAILED);
+    last_flag = SPTFQMR_PSET_FAIL_UNREC;
+    return(-1);
+  }
+  if (retval > 0) {
+    last_flag = SPTFQMR_PSET_FAIL_REC;
+    return(+1);
+  }
+
+  last_flag = SPTFQMR_SUCCESS;
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASptfqmrSolve
+ * -----------------------------------------------------------------
+ * Note: The x-scaling and b-scaling arrays are both equal to weight.
+ *
+ * We set the initial guess, x = 0, then call SptfqmrSolve.
+ * We copy the solution x into b, and update the counters nli, nps,
+ * and ncfl. If SptfqmrSolve returned nli_inc = 0 (hence x = 0), we
+ * take the SPTFQMR vtemp vector (= P_inverse F) as the correction
+ * vector instead. Finally, we set the return value according to the
+ * success of SptfqmrSolve.
+ * -----------------------------------------------------------------
+ */
+
+static int IDASptfqmrSolve(IDAMem IDA_mem, N_Vector bb, N_Vector weight,
+			   N_Vector yy_now, N_Vector yp_now, N_Vector rr_now)
+{
+  IDASpilsMem idaspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int pretype, nli_inc, nps_inc, retval;
+  realtype res_norm;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  sptfqmr_mem = (SptfqmrMem)spils_mem;
+
+  /* Set SptfqmrSolve convergence test constant epslin, in terms of the
+     Newton convergence test constant epsNewt and safety factors. The factor
+     sqrt(Neq) assures that the TFQMR convergence test is applied to the
+     WRMS norm of the residual vector, rather than the weighted L2 norm. */
+  epslin = sqrtN*eplifac*epsNewt;
+
+  /* Set vectors ycur, ypcur, and rcur for use by the Atimes and Psolve */
+  ycur = yy_now;
+  ypcur = yp_now;
+  rcur = rr_now;
+
+  /* Set SptfqmrSolve inputs pretype and initial guess xx = 0 */  
+  pretype = (psolve == NULL) ? PREC_NONE : PREC_LEFT;
+  N_VConst(ZERO, xx);
+  
+  /* Call SptfqmrSolve and copy xx to bb */
+  retval = SptfqmrSolve(sptfqmr_mem, IDA_mem, xx, bb, pretype, epslin,
+                      IDA_mem, weight, weight, IDASpilsAtimes,
+                      IDASpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+
+  if (nli_inc == 0) N_VScale(ONE, SPTFQMR_VTEMP(sptfqmr_mem), bb);
+  else N_VScale(ONE, xx, bb);
+  
+  /* Increment counters nli, nps, and return if successful */
+  nli += nli_inc;
+  nps += nps_inc;
+  if (retval != SPTFQMR_SUCCESS) ncfl++;
+
+    /* Interpret return value from SpgmrSolve */
+
+  last_flag = retval;
+
+  switch(retval) {
+
+  case SPTFQMR_SUCCESS:
+    return(0);
+    break;
+  case SPTFQMR_RES_REDUCED:
+    return(1);
+    break;
+  case SPTFQMR_CONV_FAIL:
+    return(1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_REC:
+    return(1);
+    break;
+  case SPTFQMR_MEM_NULL:
+    return(-1);
+    break;
+  case SPTFQMR_ATIMES_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPTFQMR_ATIMES_FAIL_UNREC, "IDASPTFQMR", "IDASptfqmrSolve", MSGS_JTIMES_FAILED);    
+    return(-1);
+    break;
+  case SPTFQMR_PSOLVE_FAIL_UNREC:
+    IDAProcessError(IDA_mem, SPTFQMR_PSOLVE_FAIL_UNREC, "IDASPTFQMR", "IDASptfqmrSolve", MSGS_PSOLVE_FAILED);
+    return(-1);
+    break;
+  }
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : IDASptfqmrPerf
+ * -----------------------------------------------------------------
+ * This routine handles performance monitoring specific to the
+ * IDASPTFQMR linear solver. When perftask = 0, it saves values of
+ * various counters. When perftask = 1, it examines difference
+ * quotients in these counters, and depending on their values, it
+ * prints up to three warning messages. Messages are printed up to
+ * a maximum of 10 times.
+ * -----------------------------------------------------------------
+ */
+
+static int IDASptfqmrPerf(IDAMem IDA_mem, int perftask)
+{
+  IDASpilsMem idaspils_mem;
+  realtype avdim, rcfn, rcfl;
+  long int nstd, nnid;
+  booleantype lavd, lcfn, lcfl;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  if (perftask == 0) {
+    nst0 = nst;  nni0 = nni;  nli0 = nli;
+    ncfn0 = ncfn;  ncfl0 = ncfl;  
+    nwarn = 0;
+    return(0);
+  }
+
+  nstd = nst - nst0;  nnid = nni - nni0;
+  if (nstd == 0 || nnid == 0) return(0);
+  avdim = (realtype) ((nli - nli0)/((realtype) nnid));
+  rcfn = (realtype) ((ncfn - ncfn0)/((realtype) nstd));
+  rcfl = (realtype) ((ncfl - ncfl0)/((realtype) nnid));
+  lavd = (avdim > ((realtype) maxl));
+  lcfn = (rcfn > PT9);
+  lcfl = (rcfl > PT9);
+  if (!(lavd || lcfn || lcfl)) return(0);
+  nwarn++;
+  if (nwarn > 10) return(1);
+  if (lavd) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPTFQMR", "IDASptfqmrPerf", MSGS_AVD_WARN, tn, avdim);
+  if (lcfn) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPTFQMR", "IDASptfqmrPerf", MSGS_CFN_WARN, tn, rcfn);
+  if (lcfl) 
+    IDAProcessError(IDA_mem, IDA_WARNING, "IDASPTFQMR", "IDASptfqmrPerf", MSGS_CFL_WARN, tn, rcfl);
+
+  return(0);
+}
+
+static int IDASptfqmrFree(IDAMem IDA_mem)
+{
+  IDASpilsMem idaspils_mem;
+  SptfqmrMem sptfqmr_mem;
+
+  idaspils_mem = (IDASpilsMem) lmem;
+
+  N_VDestroy(ytemp);
+  N_VDestroy(yptemp);
+  N_VDestroy(xx);
+  
+  sptfqmr_mem = (SptfqmrMem)spils_mem;
+  SptfqmrFree(sptfqmr_mem);
+
+  if (idaspils_mem->s_pfree != NULL) (idaspils_mem->s_pfree)(IDA_mem);
+
+  free(idaspils_mem); idaspils_mem = NULL;
+
+  return(0);
+}
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+/*
+ * IDASptfqmrB
+ *
+ * Wrapper for the backward phase
+ *
+ */
+
+int IDASptfqmrB(void *ida_mem, int which, int maxlB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDASpilsMemB idaspilsB_mem;
+  int flag;
+  
+  /* Check if ida_mem is allright. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASPILS_MEM_NULL, "IDASPTFQMR", "IDASptfqmrB", MSGS_IDAMEM_NULL);
+    return(IDASPILS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASPILS_NO_ADJ, "IDASPTFQMR", "IDASptfqmrB",  MSGS_NO_ADJ);
+    return(IDASPILS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASPILS_ILL_INPUT, "IDASPTFQMR", "IDASptfqmrB", MSGS_BAD_WHICH);
+    return(IDASPILS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  
+  /* Get memory for IDASpilsMemRecB */
+  idaspilsB_mem = NULL;
+  idaspilsB_mem = (IDASpilsMemB) malloc(sizeof(struct IDASpilsMemRecB));
+  if (idaspilsB_mem == NULL) {
+    IDAProcessError(IDA_mem, IDASPILS_MEM_FAIL, "IDASPTFQMR", "IDASptfqmrB", MSGS_MEM_FAIL);
+    return(IDASPILS_MEM_FAIL);
+  }
+
+  idaspilsB_mem->s_psetB = NULL;
+  idaspilsB_mem->s_psolveB = NULL;
+  idaspilsB_mem->s_P_dataB = NULL;
+
+  /* initialize Jacobian function */
+  idaspilsB_mem->s_jtimesB = NULL;
+
+  /* attach lmem and lfree */
+  IDAB_mem->ida_lmem = idaspilsB_mem;
+  IDAB_mem->ida_lfree = IDASptfqmrFreeB;
+
+  flag = IDASptfqmr(IDAB_mem->IDA_mem, maxlB);
+
+  if (flag != IDASPILS_SUCCESS) {
+    free(idaspilsB_mem);
+    idaspilsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+/*
+ * IDASptfqmrFreeB 
+ */
+
+static int IDASptfqmrFreeB(IDABMem IDAB_mem)
+{
+  IDASpilsMemB idaspilsB_mem;
+
+  idaspilsB_mem = (IDASpilsMemB) IDAB_mem->ida_lmem;
+
+  free(idaspilsB_mem);
+
+  return(0);
+}
diff --git a/src/idas/idas_superlumt.c b/src/idas/idas_superlumt.c
new file mode 100644
index 0000000..4bab266
--- /dev/null
+++ b/src/idas/idas_superlumt.c
@@ -0,0 +1,679 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4938 $
+ * $Date: 2016-09-21 14:33:08 -0700 (Wed, 21 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the IDASSUPERLUMT linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "sundials/sundials_math.h"
+#include "sundials/sundials_superlumt_impl.h"
+
+#include "idas_impl.h"
+#include "idas_sparse_impl.h"
+#include "idas/idas_superlumt.h"
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* IDASSSUPERLUMT linit, lsetup, lsolve, and lfree routines */
+ 
+static int IDASuperLUMTInit(IDAMem IDA_mem);
+
+static int IDASuperLUMTSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+			     N_Vector rrp, N_Vector tmp1,
+			     N_Vector tmp2, N_Vector tmp3);
+
+static int IDASuperLUMTSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+			     N_Vector ycur, N_Vector ypcur, N_Vector rrcur);
+
+static int IDASuperLUMTFree(IDAMem IDA_mem);
+
+/* IDASUPERLUMT lfreeB function */
+
+static int IDASuperLUMTFreeB(IDABMem IDAB_mem);
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART I - forward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * IDASuperLUMT
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the IDA / SuperLUMT linear solver module.  
+ * IDASuperLUMT first calls the existing lfree routine if this is not NULL.
+ * Then it sets the ida_linit, ida_lsetup, ida_lsolve, ida_lperf, and
+ * ida_lfree fields in (*IDA_mem) to be IDASuperLUMTInit, IDASuperLUMTSetup,
+ * IDASuperLUMTSolve, NULL, and IDASuperLUMTFree, respectively.
+ * It allocates memory for a structure of type IDAsluMemRec and sets
+ * the ida_lmem field in (*IDA_mem) to the address of this structure.
+ * It sets setupNonNull in (*IDA_mem) to TRUE, sets the d_jdata field
+ * in the IDAsluMemRec structure to be the input parameter jdata,
+ * and sets the d_jac field to be:
+ *   (1) the input parameter djac, if djac != NULL, or                
+ *   (2) throws an error, if djac == NULL.                             
+ * Finally, it allocates memory for SuperLUMT.
+ * The return value is IDASLS_SUCCESS = 0, IDASLS_LMEM_FAIL = -1,
+ * or IDASLS_ILL_INPUT = -2.
+ *
+ * NOTE: The SuperLUMT linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, IDASuperLUMT will first 
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int IDASuperLUMT(void *ida_mem, int num_threads, int n, int nnz)
+{
+  IDAMem IDA_mem;
+  IDASlsMem idasls_mem;
+  SLUMTData slumt_data;
+  int *perm_c, *perm_r;
+  int nrhs, panel_size, relax;
+  double *bd;
+  SuperMatrix *B;
+
+  /* Return immediately if ida_mem is NULL. */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDASuperLUMT", 
+		    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Test if the NVECTOR package is compatible with the Direct solver */
+  if (IDA_mem->ida_tempv1->ops->nvgetarraypointer == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASSLS", "IDASuperLUMT", 
+		    MSGSP_BAD_NVECTOR);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  if (IDA_mem->ida_lfree != NULL) IDA_mem->ida_lfree(IDA_mem);
+
+  /* Set five main function fields in IDA_mem. */
+  IDA_mem->ida_linit  = IDASuperLUMTInit;
+  IDA_mem->ida_lsetup = IDASuperLUMTSetup;
+  IDA_mem->ida_lsolve = IDASuperLUMTSolve;
+  IDA_mem->ida_lperf  = NULL;
+  IDA_mem->ida_lfree  = IDASuperLUMTFree;
+
+  /* Get memory for IDASlsMemRec. */
+  idasls_mem = NULL;
+  idasls_mem = (IDASlsMem) malloc(sizeof(struct IDASlsMemRec));
+  if (idasls_mem == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASSLS", "IDASuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  /* Get memory for SLUMT_data. */
+  slumt_data = NULL;
+  slumt_data = (SLUMTData)malloc(sizeof(struct SLUMTDataRec));
+  if (slumt_data == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASSLS", "IDASuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  IDA_mem->ida_setupNonNull = TRUE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  idasls_mem->s_jaceval = NULL;
+  idasls_mem->s_jacdata = IDA_mem->ida_user_data;
+
+  /* Allocate memory for the sparse Jacobian */
+  idasls_mem->s_JacMat = NULL;
+  idasls_mem->s_JacMat = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (idasls_mem->s_JacMat == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASSLS", "IDASuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+
+  /* Set up memory for the permutations */
+  perm_r = (int *)malloc(n*sizeof(int));
+  if (perm_r == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASSLS", "IDASuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  }
+  perm_c = (int *)malloc(n*sizeof(int));
+  if (perm_c == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_MEM_FAIL, "IDASSLS", "IDASuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    free(perm_r);
+    return(IDASLS_MEM_FAIL);
+  }
+  slumt_data->perm_r = perm_r;
+  slumt_data->perm_c = perm_c;
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+
+  /* Set default parameters for SuperLU */
+  slumt_data->num_threads = num_threads;
+  slumt_data->diag_pivot_thresh = 1.0;
+
+  /* Allocate structures for SuperLU */
+  slumt_data->Gstat = (Gstat_t *)malloc(sizeof(Gstat_t));
+  slumt_data->s_A = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_AC = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_L = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_U = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_A->Store  = NULL;
+  slumt_data->s_AC->Store = NULL;
+  slumt_data->s_L->Store  = NULL;
+  slumt_data->s_U->Store  = NULL;
+  slumt_data->superlumt_options = (superlumt_options_t *)malloc(sizeof(superlumt_options_t));
+
+  dCreate_CompCol_Matrix(slumt_data->s_A, idasls_mem->s_JacMat->M, idasls_mem->s_JacMat->N, 
+			 idasls_mem->s_JacMat->NNZ, idasls_mem->s_JacMat->data, 
+			 idasls_mem->s_JacMat->indexvals, idasls_mem->s_JacMat->indexptrs, 
+			 SLU_NC, SLU_D, SLU_GE);
+
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  StatAlloc(idasls_mem->s_JacMat->N, num_threads, panel_size, relax, slumt_data->Gstat);
+  
+  /* Create RHS matrix */
+  nrhs = 1;
+  bd = NULL;
+  B = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  B->Store = NULL;
+  dCreate_Dense_Matrix(B, n, nrhs, bd, n, 
+		       SLU_DN, SLU_D, SLU_GE);
+  slumt_data->s_B = B;
+
+  /* Set ordering to COLAMD as the idas default use.
+     Users can set a different value with IDASuperLUMTSetOrdering,
+     and the user-set value is loaded before any call to factorize the
+     matrix in IDASuperLUMTSetup.  */
+  slumt_data->s_ordering = 3;
+
+  /* Attach linear solver memory to the integrator memory */
+  idasls_mem->s_solver_data = (void *) slumt_data;
+  IDA_mem->ida_lmem = idasls_mem;
+
+  return(IDASLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * IDASuperLUMT interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the IDASuperLUMT
+  linear solver module.  
+  It returns 0 if successful.
+*/
+
+static int IDASuperLUMTInit(IDAMem IDA_mem)
+{
+  int num_threads, n;
+  IDASlsMem idasls_mem;
+  SLUMTData slumt_data;
+
+  idasls_mem = (IDASlsMem)IDA_mem->ida_lmem;
+  slumt_data = (SLUMTData) idasls_mem->s_solver_data;
+
+  idasls_mem->s_nje = 0;
+  idasls_mem->s_first_factorize = 1;
+
+  /* ------------------------------------------------------------
+     Allocate storage and initialize statistics variables. 
+     ------------------------------------------------------------*/
+  n = idasls_mem->s_JacMat->N;
+  num_threads = slumt_data->num_threads;
+
+  StatInit(n, num_threads, slumt_data->Gstat);
+
+  idasls_mem->s_last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the IDASuperLUMT linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     IDASLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int IDASuperLUMTSetup(IDAMem IDA_mem, N_Vector yyp, N_Vector ypp,
+			     N_Vector rrp, N_Vector tmp1, N_Vector tmp2,
+			     N_Vector tmp3)
+{
+  int retval, info;
+  int nprocs, panel_size, relax, permc_spec, lwork;
+  int *perm_r, *perm_c;
+  realtype tn, cj;
+  double diag_pivot_thresh, drop_tol;
+  fact_t fact;
+  trans_t trans;
+  yes_no_t refact, usepr;
+  IDASlsMem idasls_mem;
+  IDASlsSparseJacFn jaceval;
+  SuperMatrix *A, *AC, *L, *U;
+  Gstat_t *Gstat;
+  superlumt_options_t *superlumt_options;
+  SLUMTData slumt_data;
+  SlsMat JacMat;
+  void *jacdata;
+  void *work;
+  
+  idasls_mem = (IDASlsMem) (IDA_mem->ida_lmem);
+  tn = IDA_mem->ida_tn; 
+  cj = IDA_mem->ida_cj;
+
+  slumt_data = (SLUMTData) idasls_mem->s_solver_data;
+  jaceval = idasls_mem->s_jaceval;
+  jacdata = idasls_mem->s_jacdata;
+  JacMat = idasls_mem->s_JacMat;
+
+  superlumt_options = slumt_data->superlumt_options;
+  A = slumt_data->s_A;
+  AC = slumt_data->s_AC;
+  L = slumt_data->s_L;
+  U = slumt_data->s_U;
+  Gstat = slumt_data->Gstat;
+  perm_r = slumt_data->perm_r;
+  perm_c = slumt_data->perm_c;
+  nprocs = slumt_data->num_threads;
+  diag_pivot_thresh = slumt_data->diag_pivot_thresh;
+
+  /* Set option values for SuperLU_MT */
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  fact = EQUILIBRATE;
+  trans = NOTRANS;
+  usepr = NO;
+  drop_tol = 0.0;
+  lwork = 0;
+  work = NULL;
+
+  /* Check that Jacobian eval routine is set */
+  if (jaceval == NULL) {
+    IDAProcessError(IDA_mem, IDASLS_JAC_NOSET, "IDASSLS", "IDASuperLUMTSetup", 
+		    MSGSP_JAC_NOSET);
+    free(idasls_mem); idasls_mem = NULL;
+    return(IDASLS_JAC_NOSET);
+  }
+
+  /* Increment nje counter and call Jacobian eval routine. */
+  idasls_mem->s_nje++;
+  retval = jaceval(tn, cj, yyp, ypp, rrp, JacMat, jacdata, 
+		   tmp1, tmp2, tmp3);
+
+  if (retval < 0) {
+    IDAProcessError(IDA_mem, IDASLS_JACFUNC_UNRECVR, "IDASSLS", 
+		    "IDASuperLUMTSetup", MSGSP_JACFUNC_FAILED);
+    idasls_mem->s_last_flag = IDASLS_JACFUNC_UNRECVR;
+    return(IDASLS_JACFUNC_UNRECVR);
+  }
+  if (retval > 0) {
+    idasls_mem->s_last_flag = IDASLS_JACFUNC_RECVR;
+    return(+1);
+  }
+
+  if (idasls_mem->s_first_factorize) {
+    /* ------------------------------------------------------------
+       Get column permutation vector perm_c[], according to permc_spec:
+       permc_spec = 3: approximate minimum degree for unsymmetric matrices
+       ------------------------------------------------------------*/ 
+    permc_spec = 3;
+    get_perm_c(permc_spec, A, perm_c);
+ 
+    refact= NO;
+    idasls_mem->s_first_factorize = 0;
+  }
+  else {
+    /* ------------------------------------------------------------
+       Re-initialize statistics variables 
+       ------------------------------------------------------------*/
+    StatInit(JacMat->N, nprocs, Gstat);
+    Destroy_CompCol_Permuted(AC);
+    refact= YES;
+  }
+
+  /* ------------------------------------------------------------
+     Initialize the option structure superlumt_options using the
+     user-input parameters;  Subsequent calls will re-initialize
+     options.
+     Apply perm_c to the columns of original A to form AC.
+     ------------------------------------------------------------*/
+  pdgstrf_init(nprocs, fact, trans, refact, panel_size, relax,
+	       diag_pivot_thresh, usepr, drop_tol, perm_c, perm_r,
+	       work, lwork, A, AC, superlumt_options, Gstat);
+  /* ------------------------------------------------------------
+     Compute the LU factorization of A.
+     The following routine will create nprocs threads.
+     ------------------------------------------------------------*/
+  pdgstrf(superlumt_options, AC, perm_r, L, U, Gstat, &info);
+    
+  if (info != 0) {
+    idasls_mem->s_last_flag = info;
+    return(+1);
+  }
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the IDASuperLUMT linear
+  solver module.  It calls the SuperLUMT solve routine, scales the
+  solution vector according to cjratio, then returns IDASLU_SUCCESS = 0.
+*/
+
+static int IDASuperLUMTSolve(IDAMem IDA_mem, N_Vector b, N_Vector weight,
+			     N_Vector ycur, N_Vector ypcur, N_Vector rrcur)
+{
+  int info, trans;
+  int *perm_r, *perm_c;
+  double cjratio;
+  IDASlsMem idasls_mem;
+  SuperMatrix *L, *U, *B;
+  Gstat_t *Gstat;
+  DNformat *Bstore;
+  SLUMTData slumt_data;
+  realtype *bd;
+  
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+  cjratio = IDA_mem->ida_cjratio;
+
+  slumt_data = (SLUMTData) idasls_mem->s_solver_data;
+  L = slumt_data->s_L;
+  U = slumt_data->s_U;
+  perm_r = slumt_data->perm_r;
+  perm_c = slumt_data->perm_c;
+  Gstat = slumt_data->Gstat;
+  B = slumt_data->s_B;
+   
+  bd = N_VGetArrayPointer(b);
+  Bstore = (DNformat *) (B->Store);
+  Bstore->nzval = bd;
+
+  /* Call SuperLUMT to solve the linear system using L and U */
+  trans = NOTRANS;
+  dgstrs(trans, L, U, perm_r, perm_c, B, Gstat, &info);
+
+  /* Scale the correction to account for change in cj. */
+  if (cjratio != ONE) N_VScale(TWO/(ONE + cjratio), b, b);
+
+  Bstore->nzval = NULL;
+
+  idasls_mem->s_last_flag = IDASLS_SUCCESS;
+  return(IDASLS_SUCCESS);
+}
+
+/*
+  This routine frees memory specific to the IDASuperLUMT linear solver.
+*/
+
+static int IDASuperLUMTFree(IDAMem IDA_mem)
+{
+  IDASlsMem idasls_mem;
+  SLUMTData slumt_data;
+  
+  idasls_mem = (IDASlsMem) IDA_mem->ida_lmem;
+
+  slumt_data = (SLUMTData) idasls_mem->s_solver_data;
+
+  pxgstrf_finalize(slumt_data->superlumt_options, slumt_data->s_AC);
+
+  free(slumt_data->perm_r);
+  free(slumt_data->perm_c);
+  free(slumt_data->superlumt_options);
+  Destroy_SuperNode_SCP( (slumt_data->s_L) );
+  Destroy_CompCol_NCP( (slumt_data->s_U) );
+  StatFree( (slumt_data->Gstat) );
+  free(slumt_data->Gstat);
+  
+  Destroy_SuperMatrix_Store(slumt_data->s_B);
+  SUPERLU_FREE(slumt_data->s_A->Store);
+  if (idasls_mem->s_JacMat) {
+    SparseDestroyMat(idasls_mem->s_JacMat);
+    idasls_mem->s_JacMat = NULL;
+  }
+
+  free(slumt_data->s_B);
+  free(slumt_data->s_A);
+  free(slumt_data->s_AC);
+  free(slumt_data->s_L);
+  free(slumt_data->s_U);
+
+  free(slumt_data); 
+  slumt_data = NULL;
+ 
+  free(IDA_mem->ida_lmem); 
+  IDA_mem->ida_lmem = NULL;
+
+  return(IDASLS_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * IDASuperLUMTSetOrdering sets the ordering used by SuperLUMT for reducing fill.
+ * Options are: 
+ * 0 for natural ordering
+ * 1 for minimal degree ordering on A'*A
+ * 2 for minimal degree ordering on A'+A
+ * 3 for approximate minimal degree ordering for unsymmetric matrices
+ * The default used in SUNDIALS is 3 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+int IDASuperLUMTSetOrdering(void *ida_mem_v, int ordering_choice)
+{
+  IDAMem ida_mem;
+  IDASlsMem idasls_mem;
+  SLUMTData slumt_data;
+
+ /* Return immediately if ida_mem is NULL */
+  if (ida_mem_v == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASLS", "IDASuperLUMTSetOrdering",
+		    MSGSP_IDAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  ida_mem = (IDAMem) ida_mem_v;
+  idasls_mem = (IDASlsMem) ida_mem->ida_lmem;
+
+ /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) && (ordering_choice != 3) ) {
+    IDAProcessError(NULL, IDASLS_ILL_INPUT, "IDASLS", "IDASuperLUMTSetOrdering",
+		    MSGSP_ILL_INPUT);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  slumt_data = (SLUMTData) idasls_mem->s_solver_data;
+
+  slumt_data->s_ordering = ordering_choice;
+
+  return(IDASLS_SUCCESS);
+}
+
+
+
+/* 
+ * ================================================================
+ *
+ *                   PART II - backward problems
+ *
+ * ================================================================
+ */
+
+/*
+ * IDASuperLUMTB is a wrapper around IDASuperLUMT.
+ */
+
+int IDASuperLUMTB(void *ida_mem, int which, int num_threads, int n, int nnz)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  IDASlsMemB idaslsB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDASuperLUMTB", 
+		    MSGSP_CAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASLS_NO_ADJ, "IDASSLS", "IDASuperLUMTB",  
+		    MSGSP_NO_ADJ);
+    return(IDASLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASSLS", "IDASuperLUMTB", 
+		    MSGSP_BAD_WHICH);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  /* Alloc memory for IDASlsMemRecB */
+  idaslsB_mem = (IDASlsMemB) malloc(sizeof(struct IDASlsMemRecB));
+  if (idaslsB_mem == NULL) {
+    IDAProcessError(IDAB_mem->IDA_mem, IDASLS_MEM_FAIL, "IDASSLS", 
+		    "IDASuperLUMTB", MSGSP_MEM_FAIL);
+    return(IDASLS_MEM_FAIL);
+  
+  }
+
+  /* set matrix type and initialize Jacob function. */
+  idaslsB_mem->s_djacB = NULL;
+
+  /* Attach lmemB data and lfreeB function. */
+  IDAB_mem->ida_lmem  = idaslsB_mem;
+  IDAB_mem->ida_lfree = IDASuperLUMTFreeB;
+
+  /* Call IDASuperLUMT to the IDAS data of the backward problem. */
+  ida_memB = (void *)IDAB_mem->IDA_mem;
+  flag = IDASuperLUMT(ida_memB, num_threads, n, nnz);
+
+  if (flag != IDASLS_SUCCESS) {
+    free(idaslsB_mem);
+    idaslsB_mem = NULL;
+  }
+
+  return(flag);
+}
+
+
+/*
+ * IDASuperLUMTSetOrderingB is a wrapper around IDASuperLUMTSetOrdering.
+ */
+int IDASuperLUMTSetOrderingB(void *ida_mem, int which, int ordering_choiceB)
+{
+  IDAMem IDA_mem;
+  IDAadjMem IDAADJ_mem;
+  IDABMem IDAB_mem;
+  void *ida_memB;
+  int flag;
+  
+  /* Is ida_mem allright? */
+  if (ida_mem == NULL) {
+    IDAProcessError(NULL, IDASLS_MEM_NULL, "IDASSLS", "IDASuperLUMTB", 
+		    MSGSP_CAMEM_NULL);
+    return(IDASLS_MEM_NULL);
+  }
+  IDA_mem = (IDAMem) ida_mem;
+
+  /* Is ASA initialized? */
+  if (IDA_mem->ida_adjMallocDone == FALSE) {
+    IDAProcessError(IDA_mem, IDASLS_NO_ADJ, "IDASSLS", "IDASuperLUMTB",  
+		    MSGSP_NO_ADJ);
+    return(IDASLS_NO_ADJ);
+  }
+  IDAADJ_mem = IDA_mem->ida_adj_mem;
+
+  /* Check the value of which */
+  if ( which >= IDAADJ_mem->ia_nbckpbs ) {
+    IDAProcessError(IDA_mem, IDASLS_ILL_INPUT, "IDASSLS", "IDASuperLUMTB", 
+		    MSGSP_BAD_WHICH);
+    return(IDASLS_ILL_INPUT);
+  }
+
+  /* Find the IDABMem entry in the linked list corresponding to 'which'. */
+  IDAB_mem = IDAADJ_mem->IDAB_mem;
+  while (IDAB_mem != NULL) {
+    if( which == IDAB_mem->ida_index ) break;
+    /* advance */
+    IDAB_mem = IDAB_mem->ida_next;
+  }
+
+  ida_memB = (void *)(IDAB_mem->IDA_mem);
+  
+  flag = IDASuperLUMTSetOrdering(ida_memB, ordering_choiceB);
+
+  return(flag);
+}
+
+
+
+
+/*
+ * IDASuperLUMTFreeB frees the linear solver's memory for that backward problem passed 
+ * as argument. 
+ */
+
+static int IDASuperLUMTFreeB(IDABMem IDAB_mem)
+{
+  IDASlsMemB idaslsB_mem;
+
+  idaslsB_mem = (IDASlsMemB) IDAB_mem->ida_lmem;
+
+  free(idaslsB_mem);
+
+  return(0);
+}
+
diff --git a/src/kinsol/CMakeLists.txt b/src/kinsol/CMakeLists.txt
new file mode 100644
index 0000000..d22ed62
--- /dev/null
+++ b/src/kinsol/CMakeLists.txt
@@ -0,0 +1,168 @@
+# ---------------------------------------------------------------
+# $Revision: 4917 $
+# $Date: 2016-09-18 23:24:29 -0700 (Sun, 18 Sep 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the KINSOL library
+
+INSTALL(CODE "MESSAGE(\"\nInstall KINSOL\n\")")
+
+# Add variable kinsol_SOURCES with the sources for the KINSOL library
+SET(kinsol_SOURCES
+  kinsol.c
+  kinsol_io.c
+  kinsol_direct.c
+  kinsol_band.c
+  kinsol_dense.c
+  kinsol_sparse.c
+  kinsol_spils.c
+  kinsol_spbcgs.c
+  kinsol_spfgmr.c
+  kinsol_spgmr.c
+  kinsol_sptfqmr.c
+  kinsol_bbdpre.c
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND kinsol_SOURCES kinsol_klu.c)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND kinsol_SOURCES kinsol_superlumt.c)
+ENDIF()
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the KINSOL library
+SET(shared_SOURCES
+  sundials_nvector.c
+  sundials_math.c
+  sundials_direct.c
+  sundials_band.c
+  sundials_dense.c
+  sundials_iterative.c
+  sundials_sparse.c
+  sundials_spbcgs.c
+  sundials_spfgmr.c
+  sundials_spgmr.c
+  sundials_sptfqmr.c
+  )
+
+# Add prefix with complete path to the common SUNDIALS sources
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable kinsol_HEADERS with the exported KINSOL header files
+SET(kinsol_HEADERS
+  kinsol_band.h
+  kinsol_bbdpre.h
+  kinsol_dense.h
+  kinsol_direct.h
+  kinsol.h
+  kinsol_spbcgs.h
+  kinsol_spfgmr.h
+  kinsol_spgmr.h
+  kinsol_spils.h
+  kinsol_sptfqmr.h
+  )
+
+IF(KLU_FOUND)
+    LIST(APPEND kinsol_HEADERS kinsol_klu.h kinsol_sparse.h)
+ENDIF()
+
+IF(SUPERLUMT_FOUND)
+    LIST(APPEND kinsol_HEADERS kinsol_superlumt.h kinsol_sparse.h)
+ENDIF()
+
+# Add prefix with complete path to the KINSOL header files
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/kinsol/ kinsol_HEADERS)
+
+# If Blas/Lapack support was enabled, set-up additional file lists
+IF(LAPACK_FOUND)
+  SET(kinsol_BL_SOURCES kinsol_lapack.c)
+  SET(kinsol_BL_HEADERS kinsol_lapack.h)
+  ADD_PREFIX(${sundials_SOURCE_DIR}/include/kinsol/ kinsol_BL_HEADERS)
+ELSE(LAPACK_FOUND)
+  SET(kinsol_BL_SOURCES "")
+  SET(kinsol_BL_HEADERS "")
+ENDIF(LAPACK_FOUND)
+
+IF(SUPERLUMT_FOUND)
+  SET(kinsol_SLU_SOURCES kinsol_superlumt.c)
+  SET(kinsol_SLU_HEADERS kinsol_superlumt.h)
+  ADD_PREFIX(${sundials_SOURCE_DIR}/include/kinsol/ kinsol_SLU_HEADERS)
+ELSE(SUPERLUMT_FOUND)
+  SET(kinsol_SLU_SOURCES "")
+  SET(kinsol_SLU_HEADERS "")
+ENDIF(SUPERLUMT_FOUND)
+
+IF(KLU_FOUND)
+  SET(kinsol_KLU_SOURCES kinsol_klu.c)
+  SET(kinsol_KLU_HEADERS kinsol_klu.h)
+  ADD_PREFIX(${sundials_SOURCE_DIR}/include/kinsol/ kinsol_KLU_HEADERS)
+ELSE(KLU_FOUND)
+  SET(kinsol_KLU_SOURCES "")
+  SET(kinsol_KLU_HEADERS "")
+ENDIF(KLU_FOUND)
+
+# Add source directories to include directories for access to
+# implementation only header files.
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(../sundials)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Build the static library
+IF(BUILD_STATIC_LIBS)
+
+  # Add the build target for the static KINSOL library
+  ADD_LIBRARY(sundials_kinsol_static STATIC
+    ${kinsol_SOURCES} ${kinsol_BL_SOURCES} ${kinsol_SLU_SOURCES} ${kinsol_KLU_SOURCES} ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_kinsol_static
+    PROPERTIES OUTPUT_NAME sundials_kinsol CLEAN_DIRECT_OUTPUT 1)
+
+  # Install the KINSOL library
+  INSTALL(TARGETS sundials_kinsol_static DESTINATION lib)
+
+ENDIF(BUILD_STATIC_LIBS)
+
+# Build the shared library
+IF(BUILD_SHARED_LIBS)
+
+  # Add the build target for the KINSOL library
+  ADD_LIBRARY(sundials_kinsol_shared SHARED
+    ${kinsol_SOURCES} ${kinsol_BL_SOURCES} ${kinsol_SLU_SOURCES} ${kinsol_KLU_SOURCES} ${shared_SOURCES})
+
+  # Set the library name and make sure it is not deleted
+  SET_TARGET_PROPERTIES(sundials_kinsol_shared
+    PROPERTIES OUTPUT_NAME sundials_kinsol CLEAN_DIRECT_OUTPUT 1)
+
+  # Set VERSION and SOVERSION for shared libraries
+  SET_TARGET_PROPERTIES(sundials_kinsol_shared
+    PROPERTIES VERSION ${kinsollib_VERSION} SOVERSION ${kinsollib_SOVERSION})
+
+  # Install the KINSOL library
+  INSTALL(TARGETS sundials_kinsol_shared DESTINATION lib)
+
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the KINSOL header files
+INSTALL(FILES ${kinsol_HEADERS} ${kinsol_BL_HEADERS} ${kinsol_SLU_HEADERS} ${kinsol_KLU_HEADERS} DESTINATION include/kinsol)
+
+# Install the KINSOL implementation header file
+INSTALL(FILES kinsol_impl.h DESTINATION include/kinsol)
+
+#
+MESSAGE(STATUS "Added KINSOL module")
diff --git a/src/kinsol/LICENSE b/src/kinsol/LICENSE
new file mode 100644
index 0000000..f2e95bc
--- /dev/null
+++ b/src/kinsol/LICENSE
@@ -0,0 +1,59 @@
+Copyright (c) 2002-2015, Lawrence Livermore National Security. 
+Produced at the Lawrence Livermore National Laboratory. 
+Written by Alan Hindmarsh, Allan Taylor, Radu Serban.
+LLNL-CODE-665877
+All rights reserved. 
+
+This file is part of KINSOL.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the disclaimer below.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the disclaimer (as noted below)
+in the documentation and/or other materials provided with the
+distribution.
+
+3. Neither the name of the UC/LLNL nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+REGENTS OF THE UNIVERSITY OF CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Additional BSD Notice
+---------------------
+1. This notice is required to be provided under our contract with
+the U.S. Department of Energy (DOE). This work was produced at the
+University of California, Lawrence Livermore National Laboratory
+under Contract No. W-7405-ENG-48 with the DOE.
+
+2. Neither the United States Government nor the University of
+California nor any of their employees, makes any warranty, express
+or implied, or assumes any liability or responsibility for the
+accuracy, completeness, or usefulness of any information, apparatus,
+product, or process disclosed, or represents that its use would not
+infringe privately-owned rights.
+
+3. Also, reference herein to any specific commercial products,
+process, or services by trade name, trademark, manufacturer or
+otherwise does not necessarily constitute or imply its endorsement,
+recommendation, or favoring by the United States Government or the
+University of California. The views and opinions of authors expressed
+herein do not necessarily state or reflect those of the United States
+Government or the University of California, and shall not be used for
+advertising or product endorsement purposes.
diff --git a/src/kinsol/README b/src/kinsol/README
new file mode 100644
index 0000000..f087a61
--- /dev/null
+++ b/src/kinsol/README
@@ -0,0 +1,102 @@
+                             KINSOL
+                   Release 2.9.0, September 2016
+     Aaron Collier, Alan C. Hindmarsh, Radu Serban, and Carol S. Woodward
+             Center for Applied Scientific Computing, LLNL
+
+KINSOL is a solver for nonlinear algebraic systems which can be
+described as F(u) = 0.  It is written in the C language and based
+on the previous Fortran package NKSOL [4], written by Peter Brown and
+Youcef Saad.  Nonlinear solver methods available include Newton-Krylov,
+Picard, and fixed point.  Both Picard and fixed point can be accelerated
+with Anderson acceleration.
+
+KINSOL can be used both on serial and parallel computers.
+The difference is only in the NVECTOR module of vector functions.
+The desired version is obtained when compiling the example files
+by linking with the appropriate library of NVECTOR functions.  In the
+parallel versions, communication between processes is done  
+with MPI, with OpenMP, or with Pthreads.
+
+When used with the serial NVECTOR module, KINSOL provides both direct (dense 
+and band) and preconditioned Krylov (iterative) linear solvers. Four different
+iterative solvers are available: scaled preconditioned GMRES (SPGMR), scaled 
+preconditioned BiCGStab (SPBCG), scaled preconditioned TFQMR (SPTFQMR), and
+scaled preconditioned Flexible GMRES (SPFGMR). 
+When used with the parallel NVECTOR module, KINSOL provides a
+preconditioner module called KINBBDPRE, which provides a
+band-block-diagonal preconditioner for use with the Krylov linear
+solvers. However, within KINSOL any NVECTOR module may be combined
+with an appropriate user-supplied preconditioning module for
+acceleration of the Krylov solvers.
+
+KINSOL is part of a software family called SUNDIALS: SUite of Nonlinear
+and DIfferential/ALgebraic equation Solvers.  This suite consists of
+CVODE, CVODES, ARKode, KINSOL, IDA, and IDAS.  The directory
+structure of the package supplied reflects this family relationship.
+
+For use with Fortran applications, a set of Fortran/C interface routines,
+called FKINSOL, is also supplied.  These are written in C, but assume that
+the user calling program and all user-supplied routines are in Fortran.
+
+The notes below provide the location of documentation, directions for the 
+installation of the KINSOL package, and relevant references. Following that 
+is a brief history of revisions to the package.
+
+
+A. Documentation
+----------------
+
+/sundials/doc/kinsol/ contains PDF files for the KINSOL User Guide [1] (kin_guide.pdf)
+and the KINSOL Examples [2] (kin_examples.pdf) documents.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see the file /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see the "Installation Procedure"
+chapter in the KINSOL User Guide [1].
+
+
+C. References
+-------------
+
+[1] A. M. Collier, A. C. Hindmarsh, R. Serban, and C. S. Woodward,
+    "User Documentation for KINSOL v2.9.0," LLNL technical report
+    UCRL-SM-208116, March 2016.
+
+[2] A. M. Collier and R. Serban, "Example Programs for KINSOL v2.9.0,"
+    LLNL technical report UCRL-SM-208114, March 2016.
+
+[3] A. C. Hindmarsh, P. N. Brown, K. E. Grant, S. L. Lee, R. Serban, 
+    D. E. Shumaker, and C. S. Woodward, "SUNDIALS, Suite of Nonlinear and 
+    Differential/Algebraic Equation Solvers," ACM Trans. Math. Softw., 
+    31(3), pp. 363-396, 2005.
+
+[4] Peter N. Brown and Youcef Saad, "Hybrid Krylov Methods for
+    Nonlinear Systems of Equations," SIAM J. Sci. Stat. Comput., 
+    Vol 11, no 3, pp. 450-481, May 1990.  
+
+[5] A. G. Taylor and A. C. Hindmarsh, "User Documentation for KINSOL,
+    A Nonlinear Solver for Sequential and Parallel Computers," LLNL
+    technical report UCRL-ID-131185, July 1998.
+
+
+D. Releases
+-----------
+
+v. 2.9.0   - Sep. 2016
+v. 2.8.2   - Aug. 2015
+v. 2.8.1   - Mar. 2015
+v. 2.8.0   - Mar. 2015
+v. 2.7.0   - Mar. 2012
+v. 2.6.0   - May  2009
+v. 2.5.0   - Nov. 2006
+v. 2.4.0   - Mar. 2006
+v. 2.3.0   - Apr. 2005
+v. 2.2.2   - Mar. 2005
+v. 2.2.1   - Jan. 2005
+v. 2.2.0   - Dec. 2004
+v. 2.0     - Jul. 2002 (first SUNDIALS release)
+v. 1.0     - Aug. 1998 (date written)
+
diff --git a/src/kinsol/fcmix/CMakeLists.txt b/src/kinsol/fcmix/CMakeLists.txt
new file mode 100644
index 0000000..16377cf
--- /dev/null
+++ b/src/kinsol/fcmix/CMakeLists.txt
@@ -0,0 +1,60 @@
+# CMakeLists.txt file for the FKINSOL library
+
+# Add variable fcvode_SOURCES with the sources for the FCVODE library
+SET(fkinsol_SOURCES
+  fkinband.c
+  fkinbbd.c
+  fkindense.c
+  fkinjtimes.c
+  fkinpreco.c
+  fkinsol.c
+  )
+
+IF(LAPACK_FOUND)
+  SET(fkinsol_BL_SOURCES fkinlapack.c fkinlapdense.c fkinlapband.c)
+ELSE(LAPACK_FOUND)
+  SET(fkinsol_BL_SOURCES "")
+ENDIF(LAPACK_FOUND)
+
+IF(KLU_FOUND OR SUPERLUMT_FOUND)
+  SET(fkinsol_SPARSE_SOURCES fkinsparse.c)
+ELSE(SPARSE_FOUND)
+  SET(fkinsol_SPARSE_SOURCES "")
+ENDIF(KLU_FOUND OR SUPERLUMT_FOUND)
+ 
+IF(KLU_FOUND)
+  SET(fkinsol_KLU_SOURCES fkinklu.c)
+ELSE(KLU_FOUND)
+  SET(fkinsol_KLU_SOURCES "")
+ENDIF(KLU_FOUND)
+ 
+IF(SUPERLUMT_FOUND)
+  SET(fkinsol_SUPERLUMT_SOURCES fkinsuperlumt.c)
+ELSE(SUPERLUMT_FOUND)
+  SET(fkinsol_SUPERLUMT_SOURCES "")
+ENDIF(SUPERLUMT_FOUND)
+
+# Add source directories to include directories for access to
+# implementation only header files (both for fkinsol and kinsol)
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(..)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Only build STATIC libraries (we cannot build shared libraries 
+# for the FCMIX interfaces due to unresolved symbol errors 
+# coming from inexistent user-provided functions)
+
+# Add the build target for the FKINSOL library
+ADD_LIBRARY(sundials_fkinsol_static STATIC ${fkinsol_SOURCES} ${fkinsol_BL_SOURCES} ${fkinsol_SPARSE_SOURCES} ${fkinsol_KLU_SOURCES} ${fkinsol_SUPERLUMT_SOURCES})
+
+# Set the library name and make sure it is not deleted
+SET_TARGET_PROPERTIES(sundials_fkinsol_static
+  PROPERTIES OUTPUT_NAME sundials_fkinsol CLEAN_DIRECT_OUTPUT 1)
+
+# Install the FKINSOL library
+INSTALL(TARGETS sundials_fkinsol_static DESTINATION lib)
+
+#
+MESSAGE(STATUS "Added KINSOL FCMIX module")
diff --git a/src/kinsol/fcmix/fkinband.c b/src/kinsol/fcmix/fkinband.c
new file mode 100644
index 0000000..fb949e6
--- /dev/null
+++ b/src/kinsol/fcmix/fkinband.c
@@ -0,0 +1,116 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for KINSOL/KINBAND, for the case
+ * of a user-supplied Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fkinsol.h"     /* standard interfaces and global vars.*/
+#include "kinsol_impl.h" /* definition of KINMem type           */
+
+#include <kinsol/kinsol_band.h>
+
+/*
+ * ----------------------------------------------------------------
+ * prototypes of the user-supplied fortran routines
+ * ----------------------------------------------------------------
+ */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+extern void FK_BJAC(long int*, long int*, long int*, long int*,
+                    realtype*, realtype*,
+                    realtype*,
+                    realtype*, realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_BANDSETJAC
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_BANDSETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = KINDlsSetBandJacFn(KIN_kinmem, NULL);
+  }
+  else {
+    *ier = KINDlsSetBandJacFn(KIN_kinmem, FKINBandJac);
+  }
+
+  return;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKINBandJac
+ * ----------------------------------------------------------------
+ * C function FKINBandJac interfaces between KINSOL and a Fortran
+ * subroutine FKBJAC for solution of a linear system with band
+ * Jacobian approximation. Addresses are passed to FKBJAC for
+ * the banded Jacobian and vector data.
+ * Auxiliary data is assumed to be communicated by common blocks.
+ * ----------------------------------------------------------------
+ */
+
+int FKINBandJac(long int N, long int mupper, long int mlower,
+                N_Vector uu, N_Vector fval, 
+                DlsMat J, void *user_data,
+                N_Vector vtemp1, N_Vector vtemp2)
+{
+  realtype *uu_data, *fval_data, *jacdata, *v1_data, *v2_data;
+  long int eband;
+  int ier;
+
+  /* Initialize all pointers to NULL */
+  uu_data = fval_data = jacdata = v1_data = v2_data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  /* Get pointers to vector data */
+  uu_data   = N_VGetArrayPointer(uu);
+  fval_data = N_VGetArrayPointer(fval);
+  v1_data   = N_VGetArrayPointer(vtemp1);
+  v2_data   = N_VGetArrayPointer(vtemp2);
+
+  eband = (J->s_mu) + mlower + 1;
+  jacdata = BAND_COL(J,0) - mupper;
+
+  /* Call user-supplied routine */
+  FK_BJAC(&N, &mupper, &mlower, &eband,
+          uu_data, fval_data, 
+          jacdata,
+          v1_data, v2_data, &ier);
+
+  return(ier);
+}
+
+
diff --git a/src/kinsol/fcmix/fkinbbd.c b/src/kinsol/fcmix/fkinbbd.c
new file mode 100644
index 0000000..dfb6cad
--- /dev/null
+++ b/src/kinsol/fcmix/fkinbbd.c
@@ -0,0 +1,143 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This module contains the routines necessary to interface with
+ * the KINBBDPRE module and user-supplied Fortran routines. Generic
+ * names are used (e.g. FK_COMMFN). The routines here call the
+ * generically named routines and provide a standard interface to
+ * the C code of the KINBBDPRE package.
+ * ----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fkinsol.h"               /* standard interfaces and global variables     */
+#include "fkinbbd.h"               /* prototypes of interfaces to KINBBDPRE        */
+
+#include <kinsol/kinsol_bbdpre.h>  /* prototypes of KINBBDPRE functions and macros */
+#include <kinsol/kinsol_sptfqmr.h> /* prototypes of KINSPTFQMR interface routines  */
+#include <kinsol/kinsol_spbcgs.h>  /* prototypes of KINSPBCG interface routines    */
+#include <kinsol/kinsol_spgmr.h>   /* prototypes of KINSPGMR interface routines    */
+
+/*
+ * ----------------------------------------------------------------
+ * private constants
+ * ----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+
+/*
+ * ----------------------------------------------------------------
+ * prototypes of the user-supplied fortran routines
+ * ----------------------------------------------------------------
+ */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+extern void FK_LOCFN(long int*, realtype*, realtype*, int*);
+extern void FK_COMMFN(long int*, realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_BBDINIT
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_BBDINIT(long int *nlocal, long int *mudq, long int *mldq,
+		  long int *mu, long int *ml, int *ier)
+{
+  *ier = KINBBDPrecInit(KIN_kinmem, *nlocal, *mudq, *mldq,
+                        *mu, *ml, ZERO, FKINgloc, FKINgcomm);
+
+  return;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKINgloc
+ * ----------------------------------------------------------------
+ * C function FKINgloc is the interface between the KINBBDPRE
+ * module and the Fortran subroutine FK_LOCFN.
+ * ----------------------------------------------------------------
+ */
+
+int FKINgloc(long int Nloc, N_Vector uu, N_Vector gval, void *user_data)
+{
+  realtype *uloc, *gloc;
+  int ier;
+
+  uloc = gloc = NULL;
+
+  uloc = N_VGetArrayPointer(uu);
+  gloc = N_VGetArrayPointer(gval);
+
+  FK_LOCFN(&Nloc, uloc, gloc, &ier);
+
+  N_VSetArrayPointer(gloc, gval);
+
+  return(0);
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKINgcomm
+ * ----------------------------------------------------------------
+ * C function FKINgcomm is the interface between the KINBBDPRE
+ * module and the Fortran subroutine FK_COMMFN.
+ * ----------------------------------------------------------------
+ */
+
+int FKINgcomm(long int Nloc, N_Vector uu, void *user_data)
+{
+  realtype *uloc;
+  int ier;
+
+  uloc = NULL;
+
+  uloc = N_VGetArrayPointer(uu);
+  
+  FK_COMMFN(&Nloc, uloc, &ier);
+
+  return(0);
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_BBDOPT
+ * ----------------------------------------------------------------
+ * C function FKIN_BBDOPT is used to access optional outputs 
+ * realated to the BBD preconditioner.
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_BBDOPT(long int *lenrpw, long int *lenipw, long int *nge)
+{
+  KINBBDPrecGetWorkSpace(KIN_kinmem, lenrpw, lenipw);
+  KINBBDPrecGetNumGfnEvals(KIN_kinmem, nge);
+
+  return;
+}
+
diff --git a/src/kinsol/fcmix/fkinbbd.h b/src/kinsol/fcmix/fkinbbd.h
new file mode 100644
index 0000000..a045ac1
--- /dev/null
+++ b/src/kinsol/fcmix/fkinbbd.h
@@ -0,0 +1,310 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4398 $
+ * $Date: 2015-02-28 14:29:35 -0800 (Sat, 28 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the Fortran interface include file for the BBD
+ * preconditioner module KINBBDPRE.
+ * -----------------------------------------------------------------
+ */
+
+/*******************************************************************************
+
+                  FKINBBD Interface Package
+
+ The FKINBBD Interface Package is a package of C functions which support the
+ use of the KINSOL solver with the KINBBDPRE preconditioner module, for the
+ solution of nonlinear systems in a mixed Fortran/C setting. The combination
+ of KINSOL and KINBBDPRE solves systems f(u) = 0 with the SPGMR (scaled
+ preconditioned GMRES), SPFGMR (scaled preconditioned flexible GMRES), 
+ SPBCG (scaled preconditioned Bi-CGSTAB), or SPTFQMR
+ (scaled preconditioned TFQMR) method for the linear systems that arise, and
+ with a preconditioner that is block-diagonal with banded blocks. While KINSOL
+ and KINBBDPRE are written in C, it is assumed here that the user's calling
+ program and user-supplied problem-defining routines are written in Fortran.
+
+ The user-callable functions in this package, with the corresponding KINSOL and
+ KINBBDPRE functions, are as follows:
+
+   FKINBBDINIT : interfaces to KINBBDPrecInit
+   FKINBBDSPTFQMR: interfaces with KINSptfqmr
+   FKINBBDSPBCG : interfaces with KINSpbcg
+   FKINBBDSPGMR : interfaces with KINSpgmr
+   FKINBBDSPFGMR : interfaces with KINSpfgmr
+   FKINBBDOPT : accesses optional outputs
+   FKINBBDFREE : interfaces to KINBBDPrecFree
+
+ In addition to the Fortran system function FKFUN, and optional Jacobian vector
+ product routine FKJTIMES, the following are the user-supplied functions
+ required by this package, each with the corresponding interface function which
+ calls it (and its type within KINBBDPRE):
+
+   FKLOCFN : called by the interface function FKINgloc of type KINLocalFn
+   FKCOMMFN : called by the interface function FKINgcomm of type KINCommFn
+
+ Note: The names of all user-supplied routines here are fixed, in order to
+ maximize portability for the resulting mixed-language program.
+
+ Note: The names used within this interface package make use of the preprocessor
+ to expand them appropriately for different machines/platforms. Later in this
+ file, each name is expanded appropriately. For example, FKIN_BBDINIT is
+ replaced with either fkinbbdinit, fkinbbdinit_, or fkinbbdinit__ depending
+ upon the platform.
+
+ ==============================================================================
+
+              Usage of the FKINSOL/FKINBBD Interface Packages
+
+ The usage of combined interface packages FKINSOL and FKINBBD requires calls
+ to several interface functions, and a few user-supplied routines which define
+ the problem to be solved and indirectly define the preconditioner. These
+ function calls and user routines are summarized separately below. 
+
+ Some details have been omitted, and the user is referred to the KINSOL User
+ Guide for more complete information.
+
+ (1) User-supplied system function routine: FKFUN
+
+     The user must in all cases supply the following Fortran routine:
+
+       SUBROUTINE FKFUN (UU, FVAL, IER)
+       DIMENSION UU(*), FVAL(*)
+
+     It must set the FVAL array to f(u), the system function, as a function
+     of the array UU = u. Here UU and FVAL are vectors (distributed in the
+     parallel case). IER is a return flag (currently not used).
+
+ (2) Optional user-supplied Jacobian-vector product routine: FKJTIMES
+
+     As an option, the user may supply a routine that computes the product
+     of the system Jacobian and a given vector. The user-supplied function
+     must have the following form:
+
+       SUBROUTINE FKJTIMES (V, Z, NEWU, UU, IER)
+       DIMENSION V(*), Z(*), UU(*)
+
+     This must set the array Z to the product J*V, where J is the Jacobian
+     matrix J = dF/du, and V is a given array. Here UU is an array containing
+     the current value of the unknown vector u, and NEWU is an input integer
+     indicating whether UU has changed since FKJTIMES was last called
+     (1 = yes, 0 = no). If FKJTIMES computes and saves Jacobian data, then
+     no such computation is necessary when NEWU = 0. Here V, Z, and UU are
+     arrays of length NLOC - the local length of all distributed vectors.
+     FKJTIMES should return IER = 0 if successful, or a nonzero IER otherwise.
+
+ (3) User-supplied routines to define preconditoner: FKLOCFN and FKCOMMFN
+
+     The routines in the KINBBDPRE (kinbbdpre.c) module provide a preconditioner 
+     matrix for KINSOL that is block-diagonal with banded blocks. The blocking
+     corresponds to the distribution of the dependent variable vector u
+     amongst the processes. Each preconditioner block is generated from the
+     Jacobian of the local part (associated with the current process) of a given
+     function g(u) approximating f(u). The blocks are generated by a difference
+     quotient scheme (independently by each process), utilizing the assumed
+     banded structure with given half-bandwidths.
+
+ (3.1) Local approximate function: FKLOCFN
+
+       The user must supply a subroutine of the following form:
+
+         SUBROUTINE FKLOCFN (NLOC, ULOC, GLOC, IER)
+         DIMENSION ULOC(*), GLOC(*) 
+
+       The routine is used to compute the function g(u) which approximates the
+       system function f(u). This function is to be computed locally, i.e.
+       without  inter-process communication. Note: The case where g is
+       mathematically identical to f is allowed. It takes as input the local
+       vector length (NLOC) and the local real solution array ULOC. It is to
+       compute the local part of g(u) and store the result in the realtype
+       array GLOC. IER is a return flag (currently not used).
+
+ (3.2) Communication function: FKCOMMFN
+
+       The user must also supply a subroutine of the following form:
+
+         SUBROUTINE FKCOMMFN (NLOC, ULOC, IER)
+         DIMENSION ULOC(*)
+
+       The routine is used to perform all inter-process communication necessary
+       to evaluate the approximate system function g described above. This
+       function takes as input the local vector length (NLOC), and the local real
+       dependent variable array ULOC. It is expected to save communicated data in 
+       work space defined by the user, and made available to FKLOCFN. Each call
+       to the FKCOMMFN function is preceded by a call to FKFUN with the same
+       arguments. Thus FKCOMMFN can omit any communications done by FKFUN if
+       relevant to the evaluation of g. IER is a return flag (currently not
+       used).
+
+ (4) Initialization: FNVINITP, FKINMALLOC, FKINBBDINIT, and FKINBBDSP*
+
+ (4.1) To initialize the parallel machine environment, the user must make the
+       following call:
+
+         CALL FNVINITP (5, NLOCAL, NGLOBAL, IER)
+
+       The arguments are:
+         NLOCAL  = local size of vectors associated with process
+         NGLOBAL = the system size, and the global size of vectors (the sum 
+                   of all values of NLOCAL)
+         IER     = return completion flag. Values are 0 = success, and
+                   -1 = failure.
+
+ (4.2) To allocate internal memory for KINSOL, make the following call:
+
+         CALL FKINMALLOC (MSBPRE, FNORMTOL, SCSTEPTOL, CONSTRAINTS,
+                          OPTIN, IOPT, ROPT, IER)
+
+       The arguments are:
+         MSBPRE      = maximum number of preconditioning solve calls without
+                       calling the preconditioning setup routine
+                       Note: 0 indicates default (10).
+         FNORMTOL    = tolerance on the norm of f(u) to accept convergence
+         SCSTEPTOL   = tolerance on minimum scaled step size
+         CONSTRAINTS = array of constraint values on components of the
+                       solution vector UU
+         INOPT       = integer used as a flag to indicate whether possible
+                       input values in IOPT[] array are to be used for
+                       input: 0 = no and 1 = yes.
+         IOPT        = array for integer optional inputs and outputs (declare
+                       as INTEGER*4 or INTEGER*8 according to C type long int)
+         ROPT        = array of real optional inputs and outputs
+         IER         = return completion flag. Values are 0 = success, and
+                       -1 = failure.
+
+       Note: See printed message for details in case of failure.
+
+ (4.3) Attach one of the SPILS linear solvers. Make one of the 
+       following calls (see fkinsol.h) for more details.
+          CALL FKINSPGMR (MAXL, MAXLRST, IER)
+          CALL FKINSPFGMR (MAXL, MAXLRST, IER)
+          CALL FKINSPBCG (MAXL, IER)
+          CALL FKINSPTFQMR (MAXL, IER)
+
+ (4.4) To allocate memory and initialize data associated with the BBD
+       preconditioner, make the following call:
+
+         CALL FKINBBDINIT (NLOCAL, MU, ML, IER)
+
+       The arguments are:
+         NLOCAL   = local size of vectors associated with process
+         MU, ML   = upper and lower half-bandwidths to be used during the
+                    computation of the local Jacobian blocks. These may be
+                    smaller than the true half-bandwidths of the Jacobian
+                    of the local block of g, when smaller values may provide
+                    greater efficiency.
+         IER      = return completion flag. Values are 0 = success, and
+                    -1 = failure.
+
+ (5) To solve the system, make the following call:
+
+       CALL FKINSOL (UU, GLOBALSTRAT, USCALE, FSCALE, IER)
+
+     The arguments are:
+       UU          = array containing the initial guess when called and the
+                     solution upon termination
+       GLOBALSTRAT = (INTEGER) a number defining the global strategy choice:
+                     1 = inexact Newton, 2 = line search.
+       USCALE      = array of scaling factors for the UU vector
+       FSCALE      = array of scaling factors for the FVAL (function) vector
+       IER         = integer error flag as returned by KINSOL.
+
+     Note: See the KINSOL documentation for further information.
+
+ (6) Optional outputs: FKINBBDOPT
+
+     In addition to the optional inputs and outputs available with the FKINSOL
+     interface package, there are optional outputs specific to the KINBBDPRE
+     module. These are accessed by making the following call:
+
+       CALL FKINBBDOPT (LENRPW, LENIPW, NGE)
+
+     The arguments returned are:
+       LENRPW = length of real preconditioner work space, in realtype words
+                Note: This size is local to the current process.
+       LENIPW = length of integer preconditioner work space, in integer words
+                Note: This size is local to the current process.
+       NGE    = number of g(u) evaluations (calls to FKLOCFN)
+
+ (7) Memory freeing: FKINFREE
+
+     To the free the internal memory created by the calls to FNVINITP
+     and FKINMALLOC, make the following call:
+
+       CALL FKINFREE
+
+*******************************************************************************/
+
+#ifndef _FKINBBD_H
+#define _FKINBBD_H
+
+/*
+ * -----------------------------------------------------------------
+ * header files
+ * -----------------------------------------------------------------
+ */
+#include <sundials/sundials_nvector.h> /* definition of type N_Vector */
+#include <sundials/sundials_types.h>   /* definition of type realtype */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * generic names are translated through the define statements below
+ * -----------------------------------------------------------------
+ */
+
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FKIN_BBDINIT    SUNDIALS_F77_FUNC(fkinbbdinit, FKINBBDINIT)
+#define FKIN_BBDOPT     SUNDIALS_F77_FUNC(fkinbbdopt, FKINBBDOPT)
+#define FK_COMMFN       SUNDIALS_F77_FUNC(fkcommfn, FKCOMMFN)
+#define FK_LOCFN        SUNDIALS_F77_FUNC(fklocfn, FKLOCFN)
+
+#else
+
+#define FKIN_BBDINIT    fkinbbdinit_
+#define FKIN_BBDOPT     fkinbbdopt_
+#define FK_COMMFN       fkcommfn_
+#define FK_LOCFN        fklocfn_
+
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes: exported functions
+ * -----------------------------------------------------------------
+ */
+
+void FKIN_BBDINIT(long int *nlocal, long int *mudq, long int *mldq,
+		  long int *mu, long int *ml, int *ier);
+void FKIN_BBDOPT(long int *lenrpw, long int *lenipw, long int *nge);
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes: FKINgloc and FKINgcomm
+ * -----------------------------------------------------------------
+ */
+
+int FKINgloc(long int Nloc, N_Vector uu, N_Vector gval, void *user_data);
+int FKINgcomm(long int Nloc, N_Vector uu, void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/kinsol/fcmix/fkindense.c b/src/kinsol/fcmix/fkindense.c
new file mode 100644
index 0000000..77551a5
--- /dev/null
+++ b/src/kinsol/fcmix/fkindense.c
@@ -0,0 +1,105 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for KINSOL/KINDENSE, for the case
+ * of a user-supplied Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fkinsol.h"     /* prototypes of standard interfaces and global vars.*/
+#include "kinsol_impl.h" /* definition of KINMem type                         */
+
+#include <kinsol/kinsol_dense.h>
+
+/*
+ * ----------------------------------------------------------------
+ * prototypes of the user-supplied fortran routines
+ * ----------------------------------------------------------------
+ */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+extern void FK_DJAC(long int*, realtype*, realtype*, realtype*,
+		    realtype*, realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_DENSESETJAC
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_DENSESETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = KINDlsSetDenseJacFn(KIN_kinmem, NULL);
+  }
+  else {
+    *ier = KINDlsSetDenseJacFn(KIN_kinmem, FKINDenseJac);
+  }
+  return;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKINDenseJac
+ * ----------------------------------------------------------------
+ * C function FKINDenseJac interfaces between KINSOL and a Fortran
+ * subroutine FKDJAC for solution of a linear system with dense
+ * Jacobian approximation. Addresses are passed to FKDJAC, using
+ * the macro DENSE_COL from DENSE and the routine N_VGetArrayPointer
+ * from NVECTOR. Auxiliary data is assumed to be communicated by
+ * Common.
+ * ----------------------------------------------------------------
+ */
+
+int FKINDenseJac(long int N, N_Vector uu, N_Vector fval,
+		 DlsMat J, void *user_data, N_Vector vtemp1, N_Vector vtemp2)
+{
+  realtype *uu_data, *fval_data, *jacdata, *v1_data, *v2_data;
+  int ier;
+
+  /* Initialize all pointers to NULL */
+  uu_data = fval_data = jacdata = v1_data = v2_data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  /* Get pointers to vector data */
+  uu_data   = N_VGetArrayPointer(uu);
+  fval_data = N_VGetArrayPointer(fval);
+  v1_data   = N_VGetArrayPointer(vtemp1);
+  v2_data   = N_VGetArrayPointer(vtemp2);
+
+  jacdata = DENSE_COL(J,0);
+
+  /* Call user-supplied routine */
+  FK_DJAC(&N, uu_data, fval_data, jacdata, v1_data, v2_data, &ier);
+
+  return(ier);
+}
diff --git a/src/kinsol/fcmix/fkinjtimes.c b/src/kinsol/fcmix/fkinjtimes.c
new file mode 100644
index 0000000..c85fe68
--- /dev/null
+++ b/src/kinsol/fcmix/fkinjtimes.c
@@ -0,0 +1,87 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Routines used to interface between KINSOL and a Fortran
+ * user-supplied routine FKJTIMES (Jacobian J times vector v).
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fkinsol.h"
+#include "kinsol_impl.h"
+
+#include <kinsol/kinsol_spils.h>
+
+/*
+ * ----------------------------------------------------------------
+ * prototype of the user-supplied fortran routine
+ * ----------------------------------------------------------------
+ */
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+extern void FK_JTIMES(realtype*, realtype*, int*, realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SPILSSETJAC
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SPILSSETJAC(int *flag, int *ier)
+{
+  if ((*flag) == 0) KINSpilsSetJacTimesVecFn(KIN_kinmem, NULL);
+  else              KINSpilsSetJacTimesVecFn(KIN_kinmem, FKINJtimes);
+
+  return;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKINJtimes
+ * ----------------------------------------------------------------
+ * C function FKINJtimes is used to interface between
+ * KINSp* / KINSp*JTimes and FK_JTIMES (user-supplied Fortran
+ * routine).
+ * ----------------------------------------------------------------
+ */
+
+int FKINJtimes(N_Vector v, N_Vector Jv,
+               N_Vector uu, booleantype *new_uu, 
+               void *user_data)
+{
+  int retcode;
+  realtype *vdata, *Jvdata, *uudata;
+
+  vdata = Jvdata = uudata = NULL;
+
+  vdata  = N_VGetArrayPointer(v);
+  uudata = N_VGetArrayPointer(uu);
+  Jvdata = N_VGetArrayPointer(Jv);
+ 
+  FK_JTIMES(vdata, Jvdata, (int *) new_uu, uudata, &retcode);
+
+  return(retcode);
+}
diff --git a/src/kinsol/fcmix/fkinklu.c b/src/kinsol/fcmix/fkinklu.c
new file mode 100644
index 0000000..867d871
--- /dev/null
+++ b/src/kinsol/fcmix/fkinklu.c
@@ -0,0 +1,52 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4654 $
+ * $Date: 2016-02-17 20:12:58 -0800 (Wed, 17 Feb 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2015, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the Fortran interface to
+ * the KINKLU solver. See fkinsol.h for usage.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fkinsol.h"
+#include "kinsol_impl.h"
+#include <kinsol/kinsol_klu.h>
+ 
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_KLU
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_KLU(int *neq, int *nnz, int *sparsetype, int *ordering, int *ier)
+{
+  *ier = KINKLU(KIN_kinmem, *neq, *nnz, *sparsetype);
+  KINKLUSetOrdering(KIN_kinmem, *ordering);
+  KIN_ls = KIN_LS_KLU;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_KLUReinit
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_KLUREINIT(int *neq, int *nnz, int *reinit_type, int *ier)
+{
+  *ier = KINKLUReInit(KIN_kinmem, *neq, *nnz, *reinit_type);
+}
+
diff --git a/src/kinsol/fcmix/fkinlapack.c b/src/kinsol/fcmix/fkinlapack.c
new file mode 100644
index 0000000..e117b69
--- /dev/null
+++ b/src/kinsol/fcmix/fkinlapack.c
@@ -0,0 +1,47 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for KINSOL/KINLAPACK
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fkinsol.h"
+#include "kinsol_impl.h"
+
+#include <kinsol/kinsol_lapack.h>
+
+/***************************************************************************/
+
+void FKIN_LAPACKDENSE(int *neq, int *ier)
+{
+  *ier = KINLapackDense(KIN_kinmem, *neq);
+  KIN_ls = KIN_LS_LAPACKDENSE;
+}
+
+/***************************************************************************/
+
+void FCV_LAPACKBAND(int *neq, int *mupper, int *mlower, int *ier)
+{
+  *ier = KINLapackBand(KIN_kinmem, *neq, *mupper, *mlower);
+  KIN_ls = KIN_LS_LAPACKBAND;
+}
+
+/***************************************************************************/
+
diff --git a/src/kinsol/fcmix/fkinlapband.c b/src/kinsol/fcmix/fkinlapband.c
new file mode 100644
index 0000000..97d5288
--- /dev/null
+++ b/src/kinsol/fcmix/fkinlapband.c
@@ -0,0 +1,117 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for KINSOL/KINBAND, for the case
+ * of a user-supplied Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fkinsol.h"     /* standard interfaces and global vars.*/
+#include "kinsol_impl.h" /* definition of KINMem type           */
+
+#include <kinsol/kinsol_lapack.h>
+
+/*
+ * ----------------------------------------------------------------
+ * prototypes of the user-supplied fortran routines
+ * ----------------------------------------------------------------
+ */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+extern void FK_BJAC(long int*, long int*, long int*, long int*,
+                    realtype*, realtype*,
+                    realtype*,
+                    realtype*, realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_LAPACKBANDSETJAC
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_LAPACKBANDSETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = KINDlsSetBandJacFn(KIN_kinmem, NULL);
+  }
+  else {
+    *ier = KINDlsSetBandJacFn(KIN_kinmem, FKINLapackBandJac);
+  }
+
+  return;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKINLapackBandJac
+ * ----------------------------------------------------------------
+ * C function FKINLapackBandJac interfaces between KINSOL and a
+ * Fortran subroutine FKBJAC for solution of a linear system with
+ * band Jacobian approximation using Lapack functions.
+ * Addresses are passed to FKBJAC for the banded Jacobian and 
+ * vector data.
+ * Auxiliary data is assumed to be communicated by common blocks.
+ * ----------------------------------------------------------------
+ */
+
+int FKINLapackBandJac(long int N, long int mupper, long int mlower,
+                      N_Vector uu, N_Vector fval, 
+                      DlsMat J, void *user_data,
+                      N_Vector vtemp1, N_Vector vtemp2)
+{
+  realtype *uu_data, *fval_data, *jacdata, *v1_data, *v2_data;
+  long int eband;
+  int ier;
+
+  /* Initialize all pointers to NULL */
+  uu_data = fval_data = jacdata = v1_data = v2_data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  /* Get pointers to vector data */
+  uu_data   = N_VGetArrayPointer(uu);
+  fval_data = N_VGetArrayPointer(fval);
+  v1_data   = N_VGetArrayPointer(vtemp1);
+  v2_data   = N_VGetArrayPointer(vtemp2);
+
+  eband = (J->s_mu) + mlower + 1;
+  jacdata = BAND_COL(J,0) - mupper;
+
+  /* Call user-supplied routine */
+  FK_BJAC(&N, &mupper, &mlower, &eband,
+          uu_data, fval_data, 
+          jacdata,
+          v1_data, v2_data, &ier);
+
+  return(ier);
+}
+
+
diff --git a/src/kinsol/fcmix/fkinlapdense.c b/src/kinsol/fcmix/fkinlapdense.c
new file mode 100644
index 0000000..03f04f4
--- /dev/null
+++ b/src/kinsol/fcmix/fkinlapdense.c
@@ -0,0 +1,105 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Fortran/C interface routines for KINSOL/KINLAPACKDENSE, for the
+ * case of a user-supplied Jacobian approximation routine.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fkinsol.h"     /* prototypes of standard interfaces and global vars.*/
+#include "kinsol_impl.h" /* definition of KINMem type                         */
+
+#include <kinsol/kinsol_lapack.h>
+
+/*
+ * ----------------------------------------------------------------
+ * prototypes of the user-supplied fortran routines
+ * ----------------------------------------------------------------
+ */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+extern void FK_DJAC(long int*, realtype*, realtype*, realtype*,
+                    realtype*, realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_LAPACKDENSESETJAC
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_LAPACKDENSESETJAC(int *flag, int *ier)
+{
+  if (*flag == 0) {
+    *ier = KINDlsSetDenseJacFn(KIN_kinmem, NULL);
+  }
+  else {
+    *ier = KINDlsSetDenseJacFn(KIN_kinmem, FKINLapackDenseJac);
+  }
+  return;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKINLapackDenseJac
+ * ----------------------------------------------------------------
+ * C function FKINLapackDenseJac interfaces between KINSOL and a
+ * Fortran subroutine FKDJAC for solution of a linear system
+ * with dense Jacobian approximation using lapack functinos.
+ * Addresses are passed to FKDJAC, using the macro DENSE_COL 
+ * and the routine N_VGetArrayPointer from NVECTOR. 
+ * Auxiliary data is assumed to be communicated by common blocks.
+ * ----------------------------------------------------------------
+ */
+
+int FKINLapackDenseJac(long int N, N_Vector uu, N_Vector fval,
+                       DlsMat J, void *user_data, N_Vector vtemp1, N_Vector vtemp2)
+{
+  realtype *uu_data, *fval_data, *jacdata, *v1_data, *v2_data;
+  int ier;
+
+  /* Initialize all pointers to NULL */
+  uu_data = fval_data = jacdata = v1_data = v2_data = NULL;
+
+  /* NOTE: The user-supplied routine should set ier to an
+     appropriate value, but we preset the value to zero
+     (meaning SUCCESS) so the user need only reset the
+     value if an error occurred */
+  ier = 0;
+
+  /* Get pointers to vector data */
+  uu_data   = N_VGetArrayPointer(uu);
+  fval_data = N_VGetArrayPointer(fval);
+  v1_data   = N_VGetArrayPointer(vtemp1);
+  v2_data   = N_VGetArrayPointer(vtemp2);
+
+  jacdata = DENSE_COL(J,0);
+
+  /* Call user-supplied routine */
+  FK_DJAC(&N, uu_data, fval_data, jacdata, v1_data, v2_data, &ier);
+
+  return(ier);
+}
diff --git a/src/kinsol/fcmix/fkinpreco.c b/src/kinsol/fcmix/fkinpreco.c
new file mode 100644
index 0000000..d1882f9
--- /dev/null
+++ b/src/kinsol/fcmix/fkinpreco.c
@@ -0,0 +1,139 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file contains the interfaces between KINSOL and the
+ * user-supplied Fortran routines FK_PSET and FK_PSOL.
+ *
+ * The C function FKINPSet is used to interface between KINSOL and
+ * the Fortran user-supplied preconditioner setup routine.
+ *
+ * The C function FKINPSol is used to interface between KINSOL and
+ * the Fortran user-supplied preconditioner solve routine.
+ *
+ * Note: The use of the generic names FK_PSET and FK_PSOL below.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fkinsol.h"
+#include "kinsol_impl.h"
+
+#include <kinsol/kinsol_spils.h>
+
+/*
+ * ----------------------------------------------------------------
+ * prototype of the user-supplied fortran routine
+ * ----------------------------------------------------------------
+ */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+extern void FK_PSET(realtype*, realtype*, realtype*, realtype*, 
+		    realtype*, realtype*, int*);
+extern void FK_PSOL(realtype*, realtype*, realtype*, realtype*, 
+		    realtype*, realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SPILSSETPREC
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SPILSSETPREC(int *flag, int *ier)
+{
+  if ((*flag) == 0) {
+    *ier = KINSpilsSetPreconditioner(KIN_kinmem, NULL, NULL);
+  } else {
+    *ier = KINSpilsSetPreconditioner(KIN_kinmem, FKINPSet, FKINPSol);
+  }
+
+  return;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKINPSet
+ * ----------------------------------------------------------------
+ * C function FKINPSet is used to interface between FK_PSET and
+ * the user-supplied Fortran preconditioner setup routine.
+ * ----------------------------------------------------------------
+ */
+
+int FKINPSet(N_Vector uu, N_Vector uscale,
+             N_Vector fval, N_Vector fscale,
+             void *user_data,
+             N_Vector vtemp1, N_Vector vtemp2)
+{
+  realtype *udata, *uscaledata, *fdata, *fscaledata, *vtemp1data, *vtemp2data;
+  int retcode;
+
+  udata = uscaledata = fdata = fscaledata = vtemp1data = vtemp2data = NULL;
+
+  udata      = N_VGetArrayPointer(uu);
+  uscaledata = N_VGetArrayPointer(uscale);
+  fdata      = N_VGetArrayPointer(fval);
+  fscaledata = N_VGetArrayPointer(fscale);
+  vtemp1data = N_VGetArrayPointer(vtemp1);
+  vtemp2data = N_VGetArrayPointer(vtemp2);
+
+  FK_PSET(udata, uscaledata, fdata, fscaledata, vtemp1data, vtemp2data, &retcode);
+
+ /* Note: There is no need to use N_VSetArrayPointer since we are not getting back
+    any information that should go into an N_Vector */
+
+ return(retcode);
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKINPSol
+ * ----------------------------------------------------------------
+ * C function FKINPSol is used to interface between FK_PSOL and
+ * the user-supplied Fortran preconditioner solve routine.
+ * ----------------------------------------------------------------
+ */
+
+int FKINPSol(N_Vector uu, N_Vector uscale, 
+             N_Vector fval, N_Vector fscale, 
+             N_Vector vv, void *user_data,
+             N_Vector ftem)
+{
+  realtype *udata, *uscaledata, *fdata, *fscaledata, *vvdata, *ftemdata;
+  int retcode;
+
+  udata = uscaledata = fdata = fscaledata = vvdata = ftemdata = NULL;
+
+  udata      = N_VGetArrayPointer(uu);
+  uscaledata = N_VGetArrayPointer(uscale);
+  fdata      = N_VGetArrayPointer(fval);
+  fscaledata = N_VGetArrayPointer(fscale);
+  vvdata     = N_VGetArrayPointer(vv);
+  ftemdata   = N_VGetArrayPointer(ftem);
+
+  FK_PSOL(udata, uscaledata, fdata, fscaledata, vvdata, ftemdata, &retcode);
+
+  return(retcode);
+}
diff --git a/src/kinsol/fcmix/fkinsol.c b/src/kinsol/fcmix/fkinsol.c
new file mode 100644
index 0000000..f8d5e41
--- /dev/null
+++ b/src/kinsol/fcmix/fkinsol.c
@@ -0,0 +1,479 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4906 $
+ * $Date: 2016-09-14 16:05:17 -0700 (Wed, 14 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the Fortran interface to
+ * the KINSOL package. See fkinsol.h for usage.
+ *
+ * Note: Some routines are necessarily stored elsewhere to avoid
+ * linking problems. See also, therefore, fkinpreco.c, fkinjtimes.c,
+ * and fkinbbd.c.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "fkinsol.h"               /* prototypes of interfaces and global vars.   */
+#include "kinsol_impl.h"           /* definition of KINMem type                   */
+
+#include <kinsol/kinsol_band.h>    /* prototypes of KINBAND interface routines    */
+#include <kinsol/kinsol_dense.h>   /* prototypes of KINDENSE interface routines   */
+#include <kinsol/kinsol_klu.h>     /* prototypes of KINKLU interface routines     */
+#include <kinsol/kinsol_superlumt.h> /* prototypes of KINSUPERLU interface routines */
+#include <kinsol/kinsol_sptfqmr.h> /* prototypes of KINSPTFQMR interface routines */
+#include <kinsol/kinsol_spbcgs.h>  /* prototypes of KINSPBCG interface routines   */
+#include <kinsol/kinsol_spgmr.h>   /* prototypes of KINSPGMR interface routines   */
+#include <kinsol/kinsol_spfgmr.h>  /* prototypes of KINSPFGMR interface routines  */
+
+/*
+ * ----------------------------------------------------------------
+ * definitions of global variables shared amongst various routines
+ * ----------------------------------------------------------------
+ */
+
+void *KIN_kinmem;
+long int *KIN_iout;
+realtype *KIN_rout;
+int KIN_ls;
+
+/*
+ * ----------------------------------------------------------------
+ * private constants
+ * ----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+
+/*
+ * ----------------------------------------------------------------
+ * prototype of user-supplied fortran routine
+ * ----------------------------------------------------------------
+ */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+extern void FK_FUN(realtype*, realtype*, int*);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_CREATE
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_CREATE(int *ier)
+{
+  
+  *ier = 0;
+  /* check for required vector operations */
+  if ((F2C_KINSOL_vec->ops->nvgetarraypointer == NULL) ||
+      (F2C_KINSOL_vec->ops->nvsetarraypointer == NULL)) {
+    *ier = -1;
+    printf("FKINCREATE: A required vector operation is not implemented.\n\n");
+    return;
+  }
+
+  /* Initialize pointers to NULL */
+  KIN_kinmem = NULL;
+
+  /* Create KINSOL object */
+  KIN_kinmem = KINCreate();
+  if (KIN_kinmem == NULL) {
+    *ier = -1;
+    return;
+  }
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_INIT
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_INIT(long int *iout, realtype *rout, int *ier)
+{
+  
+  /* Call KINInit */
+  *ier = 0;
+  *ier = KINInit(KIN_kinmem, FKINfunc, F2C_KINSOL_vec);
+
+  /* On failure, exit */
+  if (*ier != KIN_SUCCESS) {
+    *ier = -1;
+    return;
+  }
+
+  /* Grab optional output arrays and store them in global variables */
+  KIN_iout = iout;
+  KIN_rout = rout;
+
+  return;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_MALLOC
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_MALLOC(long int *iout, realtype *rout, int *ier)
+{
+  
+  /* check for required vector operations */
+  if ((F2C_KINSOL_vec->ops->nvgetarraypointer == NULL) ||
+      (F2C_KINSOL_vec->ops->nvsetarraypointer == NULL)) {
+    *ier = -1;
+    printf("A required vector operation is not implemented.\n\n");
+    return;
+  }
+
+  /* Initialize pointers to NULL */
+  KIN_kinmem = NULL;
+
+  /* Create KINSOL object */
+  KIN_kinmem = KINCreate();
+  if (KIN_kinmem == NULL) {
+    *ier = -1;
+    return;
+  }
+
+  /* Call KINInit */
+  *ier = 0;
+  *ier = KINInit(KIN_kinmem, FKINfunc, F2C_KINSOL_vec);
+
+  /* On failure, exit */
+  if (*ier != KIN_SUCCESS) {
+    *ier = -1;
+    return;
+  }
+
+  /* Grab optional output arrays and store them in global variables */
+  KIN_iout = iout;
+  KIN_rout = rout;
+
+  return;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SETIIN
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SETIIN(char key_name[], long int *ival, int *ier)
+{
+  if (!strncmp(key_name,"PRNT_LEVEL",10))
+    *ier = KINSetPrintLevel(KIN_kinmem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_NITERS",10))
+    *ier = KINSetNumMaxIters(KIN_kinmem, (int) *ival);
+  else if (!strncmp(key_name,"ETA_FORM",8))
+    *ier = KINSetEtaForm(KIN_kinmem, (int) *ival);
+  else if (!strncmp(key_name,"MAA",3))
+    *ier = KINSetMAA(KIN_kinmem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_SETUPS",10))
+    *ier = KINSetMaxSetupCalls(KIN_kinmem, (int) *ival);
+  else if (!strncmp(key_name,"MAX_SP_SETUPS",13))
+    *ier = KINSetMaxSubSetupCalls(KIN_kinmem, (int) *ival);
+  else if (!strncmp(key_name,"NO_INIT_SETUP",13))
+    *ier = KINSetNoInitSetup(KIN_kinmem, (int) *ival);
+  else if (!strncmp(key_name,"NO_MIN_EPS",10))
+    *ier = KINSetNoMinEps(KIN_kinmem, (int) *ival);
+  else if (!strncmp(key_name,"NO_RES_MON",10))
+    *ier = KINSetNoResMon(KIN_kinmem, (int) *ival);
+  else {
+    *ier = -99;
+    printf("FKINSETIIN: Unrecognized key.\n\n");
+  }
+
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SETRIN
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SETRIN(char key_name[], realtype *rval, int *ier)
+{
+
+  if (!strncmp(key_name,"FNORM_TOL",9))
+    *ier = KINSetFuncNormTol(KIN_kinmem, *rval);
+  else if (!strncmp(key_name,"SSTEP_TOL",9))
+    *ier = KINSetScaledStepTol(KIN_kinmem, *rval);
+  else if (!strncmp(key_name,"MAX_STEP",8))
+    *ier = KINSetMaxNewtonStep(KIN_kinmem, *rval);
+  else if (!strncmp(key_name,"RERR_FUNC",9))
+    *ier = KINSetRelErrFunc(KIN_kinmem, *rval);
+  else if (!strncmp(key_name,"ETA_CONST",9))
+    *ier = KINSetEtaConstValue(KIN_kinmem, *rval);
+  else if (!strncmp(key_name,"ETA_PARAMS",10))
+    *ier = KINSetEtaParams(KIN_kinmem, rval[0], rval[1]);
+  else if (!strncmp(key_name,"RMON_CONST",10))
+    *ier = KINSetResMonConstValue(KIN_kinmem, *rval);
+  else if (!strncmp(key_name,"RMON_PARAMS",11))
+    *ier = KINSetResMonParams(KIN_kinmem, rval[0], rval[1]);
+  else {
+    *ier = -99;
+    printf("FKINSETRIN: Unrecognized key.\n\n");
+  }
+
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SETVIN
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SETVIN(char key_name[], realtype *vval, int *ier)
+{
+  N_Vector Vec;
+
+  if (!strncmp(key_name,"CONSTR_VEC",10)) {
+    Vec = NULL;
+    Vec = N_VCloneEmpty(F2C_KINSOL_vec);
+    if (Vec == NULL) {
+      *ier = -1;
+      return;
+    }
+    *ier = 0;
+    N_VSetArrayPointer(vval, Vec);
+    KINSetConstraints(KIN_kinmem, Vec);
+    N_VDestroy(Vec);
+  } else {
+    *ier = -99;
+    printf("FKINSETVIN: Unrecognized key.\n\n");
+  }
+
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_DENSE
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_DENSE(long int *neq, int *ier)
+{
+  *ier = KINDense(KIN_kinmem, *neq);
+  KIN_ls = KIN_LS_DENSE;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_BAND
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_BAND(long int *neq, long int *mupper, long int *mlower, int *ier)
+{
+  *ier = KINBand(KIN_kinmem, *neq, *mupper, *mlower);
+  KIN_ls = KIN_LS_BAND;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SPTFQMR
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SPTFQMR(int *maxl, int *ier)
+{
+  *ier = KINSptfqmr(KIN_kinmem, *maxl);
+  KIN_ls = KIN_LS_SPTFQMR;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SPBCG
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SPBCG(int *maxl, int *ier)
+{
+  *ier = KINSpbcg(KIN_kinmem, *maxl);
+  KIN_ls = KIN_LS_SPBCG;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SPGMR
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SPGMR(int *maxl, int *maxlrst, int *ier)
+{
+  *ier = KINSpgmr(KIN_kinmem, *maxl);
+  KINSpilsSetMaxRestarts(KIN_kinmem, *maxlrst);
+  KIN_ls = KIN_LS_SPGMR;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SPFGMR
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SPFGMR(int *maxl, int *maxlrst, int *ier)
+{
+  *ier = KINSpfgmr(KIN_kinmem, *maxl);
+  KINSpilsSetMaxRestarts(KIN_kinmem, *maxlrst);
+  KIN_ls = KIN_LS_SPFGMR;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SOL
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SOL(realtype *uu, int *globalstrategy, 
+              realtype *uscale , realtype *fscale, int *ier)
+
+{
+  N_Vector uuvec, uscalevec, fscalevec;
+
+  *ier = 0;
+  uuvec = uscalevec = fscalevec = NULL;
+
+  uuvec = F2C_KINSOL_vec;
+  N_VSetArrayPointer(uu, uuvec);
+
+  uscalevec = NULL;
+  uscalevec = N_VCloneEmpty(F2C_KINSOL_vec);
+  if (uscalevec == NULL) {
+    *ier = -4;  /* KIN_MEM_FAIL */
+    return;
+  }
+  N_VSetArrayPointer(uscale, uscalevec);
+
+  fscalevec = NULL;
+  fscalevec = N_VCloneEmpty(F2C_KINSOL_vec);
+  if (fscalevec == NULL) {
+    N_VDestroy(uscalevec);
+    *ier = -4;  /* KIN_MEM_FAIL */
+    return;
+  }
+  N_VSetArrayPointer(fscale, fscalevec);
+
+  /* Call main solver function */
+  *ier = KINSol(KIN_kinmem, uuvec, *globalstrategy, uscalevec, fscalevec);
+
+  N_VSetArrayPointer(NULL, uuvec);
+
+  N_VSetArrayPointer(NULL, uscalevec);
+  N_VDestroy(uscalevec);
+
+  N_VSetArrayPointer(NULL, fscalevec);
+  N_VDestroy(fscalevec);
+
+  /* load optional outputs into iout[] and rout[] */
+  KINGetWorkSpace(KIN_kinmem, &KIN_iout[0], &KIN_iout[1]);   /* LENRW & LENIW */
+  KINGetNumNonlinSolvIters(KIN_kinmem, &KIN_iout[2]);        /* NNI */
+  KINGetNumFuncEvals(KIN_kinmem, &KIN_iout[3]);              /* NFE */
+  KINGetNumBetaCondFails(KIN_kinmem, &KIN_iout[4]);          /* NBCF */
+  KINGetNumBacktrackOps(KIN_kinmem, &KIN_iout[5]);           /* NBCKTRK */
+
+  KINGetFuncNorm(KIN_kinmem, &KIN_rout[0]);                  /* FNORM */
+  KINGetStepLength(KIN_kinmem, &KIN_rout[1]);                /* SSTEP */
+
+  switch(KIN_ls) {
+
+  case KIN_LS_DENSE:
+  case KIN_LS_BAND:
+  case KIN_LS_LAPACKDENSE:
+  case KIN_LS_LAPACKBAND:
+    KINDlsGetWorkSpace(KIN_kinmem, &KIN_iout[6], &KIN_iout[7]); /* LRW & LIW */
+    KINDlsGetLastFlag(KIN_kinmem, &KIN_iout[8]);                /* LSTF */
+    KINDlsGetNumFuncEvals(KIN_kinmem, &KIN_iout[9]);            /* NFE */
+    KINDlsGetNumJacEvals(KIN_kinmem, &KIN_iout[10]);            /* NJE */    
+  case KIN_LS_KLU:
+  case KIN_LS_SUPERLUMT:
+    KINSlsGetLastFlag(KIN_kinmem, &KIN_iout[8]);                /* LSTF  */
+    KINSlsGetNumJacEvals(KIN_kinmem, &KIN_iout[10]);            /* NJE   */
+    break;
+  case KIN_LS_SPTFQMR:
+  case KIN_LS_SPBCG:
+  case KIN_LS_SPFGMR:
+  case KIN_LS_SPGMR:
+    KINSpilsGetWorkSpace(KIN_kinmem, &KIN_iout[6], &KIN_iout[7]); /* LRW & LIW */
+    KINSpilsGetLastFlag(KIN_kinmem, &KIN_iout[8]);                /* LSTF */
+    KINSpilsGetNumFuncEvals(KIN_kinmem, &KIN_iout[9]);            /* NFE */
+    KINSpilsGetNumJtimesEvals(KIN_kinmem, &KIN_iout[10]);         /* NJE */
+    KINSpilsGetNumPrecEvals(KIN_kinmem, &KIN_iout[11]);           /* NPE */
+    KINSpilsGetNumPrecSolves(KIN_kinmem, &KIN_iout[12]);          /* NPS */
+    KINSpilsGetNumLinIters(KIN_kinmem, &KIN_iout[13]);            /* NLI */
+    KINSpilsGetNumConvFails(KIN_kinmem, &KIN_iout[14]);           /* NCFL */
+    break;
+
+  }
+
+  return;
+}
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_FREE
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_FREE(void)
+{
+
+  /* call KINFree: KIN_kinmem is the pointer to the KINSOL memory block */
+
+  KINFree(&KIN_kinmem);
+
+  N_VSetArrayPointer(NULL , F2C_KINSOL_vec);
+  N_VDestroy(F2C_KINSOL_vec);
+
+  return;
+}
+
+
+/*
+ * ----------------------------------------------------------------
+ * Function : FKINfunc
+ * ----------------------------------------------------------------
+ * The C function FKINfunc acts as an interface between KINSOL and
+ * the Fortran user-supplied subroutine FKFUN. Addresses of the
+ * data uu and fdata are passed to FKFUN, using the routine
+ * N_VGetArrayPointer from the NVECTOR module. The data in the
+ * returned N_Vector fval is set using N_VSetArrayPointer. Auxiliary
+ * data is assumed to be communicated by 'Common'.
+ * ----------------------------------------------------------------
+ */
+
+int FKINfunc(N_Vector uu, N_Vector fval, void *user_data)
+{
+  realtype *udata, *fdata;
+  int ier;
+
+  udata = N_VGetArrayPointer(uu);
+  fdata = N_VGetArrayPointer(fval);
+
+  FK_FUN(udata, fdata, &ier);
+
+  return(ier);
+}
diff --git a/src/kinsol/fcmix/fkinsol.h b/src/kinsol/fcmix/fkinsol.h
new file mode 100644
index 0000000..f253221
--- /dev/null
+++ b/src/kinsol/fcmix/fkinsol.h
@@ -0,0 +1,789 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4905 $
+ * $Date: 2016-09-14 16:04:36 -0700 (Wed, 14 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ *                Daniel R. Reynolds @ SMU
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the header file for the FKINSOL Interface Package.
+ * See below for usage details.
+ * -----------------------------------------------------------------
+ */
+
+/***************************************************************************
+
+                  FKINSOL Interface Package
+
+ The FKINSOL Interface Package is a package of C functions which support the
+ use of the KINSOL solver for the solution of nonlinear systems f(u) = 0, 
+ in a mixed Fortran/C setting. While KINSOL is written in C, it is assumed 
+ here that the user's calling program and user-supplied problem-defining 
+ routines are written in Fortran. This package provides the necessary
+ interface to KINSOL for the serial and parallel NVECTOR
+ implementations.
+
+ The user-callable functions, with the corresponding KINSOL functions,
+ are as follows:
+
+   FNVINITS, FNVINITP, FNVINITOMP, FNVINITPTS
+          initialize serial, distributed memory parallel, or threaded 
+          vector computations
+   FKINMALLOC interfaces to KINInit
+   FKINCREATE interfaces to KINCreate
+   FKININIT interfaces to KINInit
+   FKINSETIIN, FKINSETRIN, FKINSETVIN interface to KINSet* functions
+   FKINDENSE interfaces to KINDense
+   FKINKLU interfaces to KINKLU
+   FKINSUPERLUMT interfaces to KINSUPERLUMT
+   FKINSPARSESETJAC interfaces to KINSlsSetSparseJacFn
+   FKINSPTFQMR interfaces to KINSptfqmr
+   FKINSPGMR interfaces to KINSpgmr
+   FKINSPFGMR interfaces to KINSpfgmr
+   FKINSPBCG interfaces to KINSpbcg
+   FKINSOL interfaces to KINSol and KINGet* functions
+   FKINFREE interfaces to KINFree
+
+ The user-supplied functions, each with the corresponding interface function
+ which calls it (and its type within KINSOL), are as follows:
+
+   FKFUN    : called by the interface function FKINfunc of type KINSysFn
+   FKDJAC   : called by the interface function FKINDenseJac of type
+              KINDenseJacFn
+   FKBJAC   : called by the interface function FKINBandJac of type
+              KINBandJacFn
+   FKINSPJAC: called by the interface function FKINSparseJac of type 
+              KINSlsSparseJacFn
+   FKJTIMES : called by the interface function FKINJtimes of type
+              KINSpilsJacTimesVecFn
+   FKPSOL   : called by the interface function FKINPSol of type
+              KINSpilsPrecSolveFn
+   FKPSET   : called by the interface function FKINPSet of type
+              KINSpilsPrecSetupFn
+
+ In contrast to the case of direct use of KINSOL, the names of all 
+ user-supplied routines here are fixed, in order to maximize portability for
+ the resulting mixed-language program.
+
+ =========================================================================
+
+                  Usage of the FKINSOL Interface Package
+
+ The usage of FKINSOL requires calls to several interface functions, and 
+ to a few user-supplied routines which define the problem to be solved.
+ These function calls and user routines are summarized separately below.
+
+ Some details are omitted, and the user is referred to the KINSOL manual
+ for more complete documentation. Information on the arguments of any
+ given user-callable interface routine, or of a given user-supplied
+ function called by an interface function, can be found in the
+ documentation on the corresponding function in the KINSOL package.
+
+ The number labels on the instructions below end with "s" for instructions
+ that apply to the serial version of KINSOL only, and end with "p" for
+ those that apply to the parallel version only.
+
+ (1) User-supplied system routine: FKFUN
+
+     The user must in all cases supply the following Fortran routine:
+
+       SUBROUTINE FKFUN (UU, FVAL, IER)
+       DIMENSION UU(*), FVAL(*)
+
+     It must set the FVAL array to f(u), the system function, as a
+     function of the array UU = u. Here UU and FVAL are arrays representing
+     vectors, which are distributed vectors in the parallel case.
+     IER is a return flag, which should be 0 if FKFUN was successful.
+     Return IER > 0 if a recoverable error occurred (and KINSOL is to try
+     to recover).  Return IER < 0 if an unrecoverable error occurred.
+     
+
+ (2s) Optional user-supplied dense Jacobian approximation routine: FKDJAC
+  
+     As an option when using the DENSE linear solver, the user may supply a
+     routine that computes a dense approximation of the system Jacobian 
+     J = df/dy. If supplied, it must have the following form:
+        
+       SUBROUTINE FKDJAC(N, UU, FU, DJAC, WK1, WK2, IER)
+       DIMENSION UU(*), FU(*), DJAC(N,*), WK1(*), WK2(*)
+
+     This routine must compute the Jacobian and store it columnwise in DJAC.
+     FKDJAC should return IER = 0 if successful, or a nonzero IER otherwise.
+
+ (3s) Optional user-supplied band Jacobian approximation routine: FKBJAC
+  
+     As an option when using the BAND linear solver, the user may supply a
+     routine that computes a band approximation of the system Jacobian 
+     J = df/dy. If supplied, it must have the following form:
+        
+       SUBROUTINE FKBJAC(N, MU, ML, MDIM, UU, FU, BJAC, WK1, WK2, IER)
+       DIMENSION UU(*), FU(*), BJAC(MDIM,*), WK1(*), WK2(*)
+
+     This routine must load the MDIM by N array BJAC with the Jacobian matrix.
+     FKBJAC should return IER = 0 if successful, or a nonzero IER otherwise.
+
+ (4) Optional user-supplied Jacobian-vector product routine: FKJTIMES
+
+     As an option, the user may supply a routine that computes the product
+     of the system Jacobian and a given vector. This has the following form:
+
+       SUBROUTINE FKJTIMES(V, Z, NEWU, UU, IER)
+       DIMENSION V(*), Z(*), UU(*)
+
+     This must set the array Z to the product J*V, where J is the Jacobian
+     matrix J = dF/du, and V is a given array. Here UU is an array containing
+     the current value of the unknown vector u. NEWU is an input integer 
+     indicating whether UU has changed since FKJTIMES was last called 
+     (1 = yes, 0 = no). If FKJTIMES computes and saves Jacobian data, then 
+     no such computation is necessary when NEWU = 0. Here V, Z, and UU are 
+     arrays of length NEQ, the problem size, or the local length of all 
+     distributed vectors in the parallel case. FKJTIMES should return IER = 0 
+     if successful, or a nonzero IER otherwise.
+
+  (4.1s) User-supplied sparse Jacobian approximation routine: FKINSPJAC
+
+     Required when using the KINKLU or KINSuperLUMT linear solvers, the 
+     user must supply a routine that computes a compressed-sparse-column 
+     [or compressed-sparse-row] approximation of the system Jacobian 
+     J = dF(y)/dy.  If supplied, it must have the following form:
+
+       SUBROUTINE FKINSPJAC(Y, FY, N, NNZ, JDATA, JRVALS, 
+      &                     JCPTRS, WK1, WK2, IER)
+
+     Typically this routine will use only N, NNZ, JDATA, JRVALS and 
+     JCPTRS. It must load the N by N compressed sparse column [or compressed 
+     sparse row] matrix with storage for NNZ nonzeros, stored in the arrays 
+     JDATA (nonzero values), JRVALS (row [or column] indices for each nonzero), 
+     JCOLPTRS (indices for start of each column [or row]), with the Jacobian 
+     matrix at the current (y) in CSC [or CSR] form (see sundials_sparse.h for 
+     more information).
+
+     The arguments are:
+         Y    -- array containing state variables [realtype, input]
+         FY   -- array containing residual values [realtype, input]
+         N    -- number of matrix rows/columns in Jacobian [int, input]
+         NNZ  -- allocated length of nonzero storage [int, input]
+        JDATA -- nonzero values in Jacobian
+                 [realtype of length NNZ, output]
+       JRVALS -- row [or column] indices for each nonzero in Jacobian
+                  [int of length NNZ, output]
+       JCPTRS -- pointers to each Jacobian column [or row] in preceding arrays
+                 [int of length N+1, output]
+         WK*  -- array containing temporary workspace of same size as Y 
+                 [realtype, input]
+         IER  -- return flag [int, output]:
+                    0 if successful, 
+                   >0 if a recoverable error occurred,
+                   <0 if an unrecoverable error ocurred.
+
+ (5) Initialization:  FNVINITS/FNVINITP/FNVINITOMP/FNVINITPTS and 
+                      FKINCREATE and FKININIT 
+
+ (5.1s) To initialize the serial machine environment, the user must make
+        the following call:
+
+          CALL FNVINITS (3, NEQ, IER)
+
+        The arguments are:
+          NEQ = size of vectors
+          IER = return completion flag. Values are 0 = success, -1 = failure.
+
+ (5.1p) To initialize the distributed memory parallel machine environment, 
+        the user must make the following call:
+
+          CALL FNVINITP (3, NLOCAL, NGLOBAL, IER)
+
+        The arguments are:
+          NLOCAL  = local size of vectors for this process
+          NGLOBAL = the system size, and the global size of vectors
+                    (the sum of all values of NLOCAL)
+          IER     = return completion flag. Values are 0 = success,
+                    -1 = failure.
+
+ (5.1omp) To initialize the openMP threaded vector kernel, 
+          the user must make the following call:
+
+          CALL FNVINITOMP (3, NEQ, NUM_THREADS, IER)
+
+        The arguments are:
+          NEQ = size of vectors
+          NUM_THREADS = number of threads
+          IER = return completion flag. Values are 0 = success, -1 = failure.
+
+ (5.1pts) To initialize the Pthreads threaded vector kernel, 
+          the user must make the following call:
+
+          CALL FNVINITOMP (3, NEQ, NUM_THREADS, IER)
+
+        The arguments are:
+          NEQ = size of vectors
+          NUM_THREADS = number of threads
+          IER = return completion flag. Values are 0 = success, -1 = failure.
+
+ (5.2) To create the internal memory structure, make the following call:
+
+         CALL FKINCREATE(IER)
+
+       The arguments are:
+         IER         = return completion flag. Values are 0 = success, and
+                       -1 = failure.
+
+       Note: See printed message for details in case of failure.
+
+ (5.3) To set various integer optional inputs, make the folowing call:
+
+          CALL FKINSETIIN(KEY, VALUE, IER)
+
+       to set the optional input specified by the character key KEY to the 
+       integer value VALUE.
+       KEY is one of the following: 'PRNT_LEVEL', 'MAX_NITERS', 'ETA_FORM', 'MAA',
+       'MAX_SETUPS', 'MAX_SP_SETUPS', 'NO_INIT_SETUP', 'NO_MIN_EPS', 'NO_RES_MON'.
+
+       To set various real optional inputs, make the folowing call:
+
+         CALL FKINSETRIN(KEY, VALUE, IER)
+
+      to set the optional input specified by the character key KEY to the
+      real value VALUE.
+      KEY is one of the following: 'FNORM_TOL', 'SSTEP_TOL', 'MAX_STEP',
+      'RERR_FUNC', 'ETA_CONST', 'ETA_PARAMS', 'RMON_CONST', 'RMON_PARAMS'.
+      Note that if KEY is 'ETA_PARAMS' or 'RMON_PARAMS', then VALUE must be an
+      array of dimension 2.
+
+      To set the vector of constraints on the solution, make the following call:
+
+        CALL FKINSETVIN(KEY, ARRAY, IER)
+
+      where ARRAY is an array of reals and KEY is 'CONSTR_VEC'.
+
+      FKINSETIIN, FKINSETRIN, and FKINSETVIN return IER=0 if successful and 
+      IER<0 if an error occured.
+
+ (5.4) To allocate and initialize the internal memory structure, 
+       make the following call:
+
+         CALL FKININIT(IOUT, ROUT, IER)
+
+       The arguments are:
+         IOUT        = array of length at least 15 for integer optional outputs
+                       (declare as INTEGER*4 or INTEGER*8 according to
+                       C type long int)
+         ROUT        = array of length at least 2 for real optional outputs
+         IER         = return completion flag. Values are 0 = success, and
+                       -1 = failure.
+
+       Note: See printed message for details in case of failure.
+
+ (6) Specification of linear system solution method:
+
+     The solution method in KINSOL involves the solution of linear systems 
+     related to the Jacobian J = dF/du of the nonlinear system.
+
+ (6.1s) DENSE treatment of the linear systems (NVECTOR_SERIAL only):
+
+       The user must make the following call:
+
+         CALL FKINDENSE(NEQ, IER)
+
+       In the above routine, the arguments are as follows:
+         NEQ = problem size.
+         IER = return completion flag.
+
+       If the user program includes the FKDJAC routine for the evaluation
+       of the dense approximation to the system Jacobian, the following call
+       must be made:
+
+         CALL FKINDENSESETJAC(FLAG, IER)
+
+       with FLAG = 1 to specify that FKDJAC is provided.  (FLAG = 0 specifies
+       using the internal finite difference approximation to the Jacobian.)
+
+ (6.2s) BAND treatment of the linear systems (NVECTOR_SERIAL only):
+
+       The user must make the following call:
+
+         CALL FKINBAND(NEQ, MU, ML, IER)
+
+       In the above routine, the arguments are as follows:
+         NEQ = problem size.
+         MU  = upper half-bandwidth
+         ML  = lower half-bandwidth
+         IER = return completion flag.
+
+       If the user program includes the FKBJAC routine for the evaluation
+       of the band approximation to the system Jacobian, the following call
+       must be made:
+
+         CALL FKINBANDSETJAC(FLAG, IER)
+
+       with FLAG = 1 to specify that FKBJAC is provided.  (FLAG = 0 specifies
+       using the internal finite difference approximation to the Jacobian.)
+
+
+ (6.3s) SPARSE treatment of the linear system using the KLU solver.
+
+     The user must make the call
+
+       CALL FKINKLU(NEQ, NNZ, SPARSETYPE, ORDERING, IER)
+
+     The arguments are:
+        NEQ = the problem size [int; input]
+        NNZ = the maximum number of nonzeros [int; input]
+	SPARSETYPE = choice between CSC and CSR format
+           (0 = CSC, 1 = CSR) [int; input]
+	ORDERING = the matrix ordering desired, possible values
+	   come from the KLU package (0 = AMD, 1 = COLAMD) [int; input]
+	IER = error return flag [int, output]: 
+	         0 = success, 
+		 negative = error.
+ 
+     When using the KLU solver the user must provide the FKINSPJAC routine for the 
+     evalution of the sparse approximation to the Jacobian. To indicate that this
+     routine has been provided, after the call to FKINKLU, the following call must 
+     be made    
+
+       CALL FKINSPARSESETJAC(IER) 
+
+     The int return flag IER=0 if successful, and nonzero otherwise.
+
+
+     The KINSOL KLU solver will reuse much of the factorization information from one
+     nonlinear iteration to the next.  If at any time the user wants to force a full
+     refactorization or if the number of nonzeros in the Jacobian matrix changes, the
+     user should make the call
+
+       CALL FKINKLUREINIT(NEQ, NNZ, REINIT_TYPE)
+
+     The arguments are:
+        NEQ = the problem size [int; input]
+        NNZ = the maximum number of nonzeros [int; input]
+	REINIT_TYPE = 1 or 2.  For a value of 1, the matrix will be destroyed and 
+          a new one will be allocated with NNZ nonzeros.  For a value of 2, 
+	  only symbolic and numeric factorizations will be completed. 
+ 
+     When using FKINKLU, the user is required to supply the FKINSPJAC 
+     routine for the evaluation of the sparse approximation to the 
+     Jacobian, as discussed above with the other user-supplied routines.
+ 
+     Optional outputs specific to the KLU case are:
+        LSTF    = IOUT(8)  from KINSlsGetLastFlag
+        NJES    = IOUT(10) from KINSlsGetNumJacEvals
+     See the KINSOL manual for descriptions.
+ 
+ (6.4s) SPARSE treatment of the linear system using the SuperLUMT solver.
+
+     The user must make the call
+
+       CALL FKINSUPERLUMT(NTHREADS, NEQ, NNZ, ORDERING, IER)
+
+     The arguments are:
+        NTHREADS = desired number of threads to use [int; input]
+        NEQ = the problem size [int; input]
+        NNZ = the maximum number of nonzeros [int; input]
+	ORDERING = the matrix ordering desired, possible values
+	   come from the SuperLU_MT package [int; input]
+           0 = Natural
+           1 = Minimum degree on A^T A
+           2 = Minimum degree on A^T + A
+           3 = COLAMD
+	IER = error return flag [int, output]: 
+	         0 = success, 
+		 negative = error.
+ 
+     At this time, there is no reinitialization capability for the SUNDIALS 
+     interfaces to the SuperLUMT solver.
+
+     When using FKINSUPERLUMT, the user is required to supply the FKINSPJAC 
+     routine for the evaluation of the CSC approximation to the 
+     Jacobian (note: the current SuperLU_MT interface in SUNDIALS does not 
+     support CSR matrices). To indicate that this routine has been provided, 
+     after the call to FKINSUPERLUMT, the following call must be made    
+
+         CALL FKINSPARSESETJAC(IER) 
+
+     The int return flag IER=0 if successful, and nonzero otherwise.
+ 
+     Optional outputs specific to the SUPERLUMT case are:
+        LSTF    = IOUT(8)  from KINSlsGetLastFlag
+        NJES    = IOUT(10) from KINSlsGetNumJacEvals
+     See the KINSOL manual for descriptions.
+  
+ (6.5) SPTFQMR treatment of the linear systems:
+
+       For the Scaled Preconditioned TFQMR solution of the linear systems,
+       the user must make the call:
+
+         CALL FKINSPTFQMR(MAXL, IER)
+
+       In the above routine, the arguments are as follows:
+         MAXL     = maximum Krylov subspace dimension; 0 indicates default.
+         IER      = return completion flag.  Values are 0 = succes, and
+                    -1 = failure.
+
+       Note: See printed message for details in case of failure.
+
+ (6.6) SPBCG treatment of the linear systems:
+
+       For the Scaled Preconditioned Bi-CGSTAB solution of the linear systems,
+       the user must make the call:
+
+         CALL FKINSPBCG(MAXL, IER)
+
+       In the above routine, the arguments are as follows:
+         MAXL     = maximum Krylov subspace dimension; 0 indicates default.
+         IER      = return completion flag.  Values are 0 = succes, and
+                    -1 = failure.
+
+       Note: See printed message for details in case of failure.
+
+ (6.7) SPGMR and SPFGMR treatment of the linear systems:
+
+       For the Scaled Preconditioned GMRES or Scaled Preconditioned Flexible 
+       GMRES solution of the linear systems, the user must make one of the calls:
+
+         CALL FKINSPGMR(MAXL, MAXLRST, IER)
+         CALL FKINSPFGMR(MAXL, MAXLRST, IER)
+
+       In the above routine, the arguments are as follows:
+         MAXL     = maximum Krylov subspace dimension; 0 indicates default.
+         MAXLRST  = maximum number of linear system restarts; 0 indicates
+                    default (SPGMR and SPFGMR only).
+         IER      = return completion flag.  Values are 0 = succes, and
+                    -1 = failure.
+
+       Note: See printed message for details in case of failure.
+
+ (6.8) Specifying user-provided functions for the iterative linear solvers
+
+       If the user program includes the FKJTIMES routine for the evaluation
+       of the Jacobian-vector product, the following call must be made:
+
+         CALL FKINSPILSSETJAC(FLAG, IER)
+
+       The argument FLAG = 0 specifies using the internal finite differences
+       approximation to the Jacobian-vector product, while FLAG = 1 specifies
+       that FKJTIMES is provided.
+
+       Usage of the user-supplied routines FKPSET and FKPSOL for the setup and
+       solution of the preconditioned linear system is specified by calling:
+
+         CALL FKINSPILSSETPREC(FLAG, IER)
+
+       where FLAG = 0 indicates no FKPSET or FKPSOL (default) and FLAG = 1
+       specifies using FKPSET and FKPSOL. The user-supplied routines FKPSET
+       and FKPSOL must be of the form:
+
+         SUBROUTINE FKPSET (UU, USCALE, FVAL, FSCALE, VTEMP1, VTEMP2, IER)
+         DIMENSION UU(*), USCALE(*), FVAL(*), FSCALE(*), VTEMP1(*), VTEMP2(*)
+
+       It must perform any evaluation of Jacobian-related data and
+       preprocessing needed for the solution of the preconditioned linear
+       systems by FKPSOL. The variables UU through FSCALE are for use in the
+       preconditioning setup process. Typically, the system function FKFUN is
+       called, so that FVAL will have been updated. UU is the current solution
+       iterate. VTEMP1 and VTEMP2 are available for work space. If scaling is
+       being used, USCALE and FSCALE are available for those operatins
+       requiring scaling. NEQ is the (global) problem size.
+
+       On return, set IER = 0 if FKPSET was successful, set IER = 1 if
+       an error occurred.
+
+         SUBROUTINE FKPSOL (UU, USCALE, FVAL, FSCALE, VTEM, FTEM, IER)
+         DIMENSION UU(*), USCALE(*), FVAL(*), FSCALE(*), VTEM(*), FTEM(*)
+
+       Typically this routine will use only UU, FVAL, VTEM and FTEM.
+       It must solve the preconditioned linear system Pz = r, where
+       r = VTEM is input, and store the solution z in VTEM as well. Here
+       P is the right preconditioner. If scaling is being used, the
+       routine supplied must also account for scaling on either coordinate
+       or function value.
+
+ (7) The solver: FKINSOL
+
+     Solving the nonlinear system is accomplished by making the following
+     call:
+
+       CALL FKINSOL (UU, GLOBALSTRAT, USCALE, FSCALE, IER)
+
+     The arguments are:
+       UU          = array containing the initial guess on input, and the
+                     solution on return
+       GLOBALSTRAT = (INTEGER) a number defining the global strategy choice:
+                     0 = No globalization, 1 = LineSearch, 2 = Picard, 
+                     3 = Fixed Point 
+       USCALE      = array of scaling factors for the UU vector
+       FSCALE      = array of scaling factors for the FVAL (function) vector
+       IER         = INTEGER error flag as returned by KINSOL:
+                     0 means success,
+                     1 means initial guess satisfies f(u) = 0 (approx.),
+                     2 means apparent stalling (small step),
+                     a value < 0 means other error or failure.
+
+     Note: See KINSOL documentation for detailed information.
+
+ (8) Memory freeing: FKINFREE
+
+     To the free the internal memory created by the calls to FKINCREATE and 
+     FKININIT and any FNVINIT**, make the following call:
+
+       CALL FKINFREE
+
+ (9) Optional outputs: IOUT/ROUT
+
+     The optional outputs available by way of IOUT and ROUT have the
+     following names, locations, and descriptions. For further details see
+     the KINSOL documentation.
+ 
+       LENRW  = IOUT(1) = real workspace size
+       LENRW  = IOUT(2) = real workspace size
+       NNI    = IOUT(3) = number of Newton iterations
+       NFE    = IOUT(4) = number of f evaluations
+       NBCF   = IOUT(5) = number of line search beta condition failures
+       NBKTRK = IOUT(6) = number of line search backtracks
+
+       FNORM  = ROUT(1) = final scaled norm of f(u)
+       STEPL  = ROUT(2) = scaled last step length
+
+     The following optional outputs are specific to the SPGMR/SPFGMR/SPBCG/SPTFQMR
+     module:
+
+       LRW    = IOUT( 7) = real workspace size for the linear solver module
+       LIW    = IOUT( 8) = integer workspace size for the linear solver module
+       LSTF   = IOUT( 9) = last flag returned by linear solver
+       NFE    = IOUT(10) = number of f evaluations for DQ Jacobian
+       NJE    = IOUT(11) = number of Jacobian-vector product evaluations
+       NPE    = IOUT(12) = number of preconditioner evaluations
+       NPS    = IOUT(13) = number of preconditioner solves
+       NLI    = IOUT(14) = number of linear (Krylov) iterations
+       NCFL   = IOUT(15) = number of linear convergence failures
+
+     The following optional outputs are specific to the DENSE/BAND module:
+
+       LRW    = IOUT( 7) = real workspace size for the linear solver module
+       LIW    = IOUT( 8) = integer workspace size for the linear solver module
+       LSTF   = IOUT( 9) = last flag returned by linear solver
+       NFE    = IOUT(10) = number of f evaluations for DQ Jacobian
+       NJE    = IOUT(11) = number of Jacobian evaluations
+
+*******************************************************************************/
+
+#ifndef _FKINSOL_H
+#define _FKINSOL_H
+
+/*
+ * -----------------------------------------------------------------
+ * header files
+ * -----------------------------------------------------------------
+ */
+#include <kinsol/kinsol.h>
+#include <sundials/sundials_direct.h>  /* definition of type DlsMat   */
+#include <sundials/sundials_sparse.h>  /* definition of type SlsMat   */
+#include <sundials/sundials_nvector.h> /* definition of type N_Vector */
+#include <sundials/sundials_types.h>   /* definition of type realtype */
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * generic names are translated through the define statements below
+ * -----------------------------------------------------------------
+ */
+
+#if defined(SUNDIALS_F77_FUNC)
+
+#define FKIN_MALLOC         SUNDIALS_F77_FUNC(fkinmalloc, FKINMALLOC)
+#define FKIN_CREATE         SUNDIALS_F77_FUNC(fkincreate, FKINCREATE)
+#define FKIN_INIT           SUNDIALS_F77_FUNC(fkininit,   FKININIT)
+#define FKIN_SETIIN         SUNDIALS_F77_FUNC(fkinsetiin, FKINSETIIN)
+#define FKIN_SETRIN         SUNDIALS_F77_FUNC(fkinsetrin, FKINSETRIN)
+#define FKIN_SETVIN         SUNDIALS_F77_FUNC(fkinsetvin, FKINSETVIN)
+#define FKIN_DENSE          SUNDIALS_F77_FUNC(fkindense, FKINDENSE)
+#define FKIN_DENSESETJAC    SUNDIALS_F77_FUNC(fkindensesetjac, FKINDENSESETJAC)
+#define FKIN_BAND           SUNDIALS_F77_FUNC(fkinband, FKINBAND)
+#define FKIN_BANDSETJAC     SUNDIALS_F77_FUNC(fkinbandsetjac, FKINBANDSETJAC)
+#define FKIN_LAPACKDENSE       SUNDIALS_F77_FUNC(fkinlapackdense, FKINLAPACKDENSE)
+#define FKIN_LAPACKDENSESETJAC SUNDIALS_F77_FUNC(fkinlapackdensesetjac, FKINLAPACKDENSESETJAC)
+#define FKIN_LAPACKBAND        SUNDIALS_F77_FUNC(fkinlapackband, FKINLAPACKBAND)
+#define FKIN_LAPACKBANDSETJAC  SUNDIALS_F77_FUNC(fkinlapackbandsetjac, FKINLAPACKBANDSETJAC)
+#define FKIN_KLU            SUNDIALS_F77_FUNC(fkinklu, FKLUKLU)
+#define FKIN_KLUREINIT      SUNDIALS_F77_FUNC(fkinklureinit, FKLUKLUREINIT)
+#define FKIN_SUPERLUMT      SUNDIALS_F77_FUNC(fkinsuperlumt, FKLUSUPERLUMT)
+#define FKIN_SPARSESETJAC   SUNDIALS_F77_FUNC(fkinsparsesetjac, FKINSPARSESETJAC)  
+#define FKIN_SPTFQMR        SUNDIALS_F77_FUNC(fkinsptfqmr, FKINSPTFQMR)
+#define FKIN_SPBCG          SUNDIALS_F77_FUNC(fkinspbcg, FKINSPBCG)
+#define FKIN_SPGMR          SUNDIALS_F77_FUNC(fkinspgmr, FKINSPGMR)
+#define FKIN_SPFGMR         SUNDIALS_F77_FUNC(fkinspfgmr, FKINSPFGMR)
+#define FKIN_SPILSSETJAC    SUNDIALS_F77_FUNC(fkinspilssetjac, FKINSPILSSETJAC)
+#define FKIN_SPILSSETPREC   SUNDIALS_F77_FUNC(fkinspilssetprec, FKINSPILSSETPREC)
+#define FKIN_SOL            SUNDIALS_F77_FUNC(fkinsol, FKINSOL)
+#define FKIN_FREE           SUNDIALS_F77_FUNC(fkinfree, FKINFREE)
+#define FK_FUN              SUNDIALS_F77_FUNC(fkfun, FKFUN)
+#define FK_PSET             SUNDIALS_F77_FUNC(fkpset, FKPSET)
+#define FK_PSOL             SUNDIALS_F77_FUNC(fkpsol, FKPSOL)
+#define FK_JTIMES           SUNDIALS_F77_FUNC(fkjtimes, FKJTIMES)
+#define FK_DJAC             SUNDIALS_F77_FUNC(fkdjac, FKDJAC)
+#define FK_BJAC             SUNDIALS_F77_FUNC(fkbjac, FKBJAC)
+
+#else
+
+#define FKIN_MALLOC         fkinmalloc_
+#define FKIN_CREATE         fkincreate_
+#define FKIN_INIT           fkininit_
+#define FKIN_SETIIN         fkinsetiin_
+#define FKIN_SETRIN         fkinsetrin_
+#define FKIN_SETVIN         fkinsetvin_
+#define FKIN_DENSE          fkindense_
+#define FKIN_DENSESETJAC    fkindensesetjac_
+#define FKIN_BAND           fkinband_
+#define FKIN_BANDSETJAC     fkinbandsetjac_
+#define FKIN_LAPACKDENSE       fkinlapackdense_
+#define FKIN_LAPACKDENSESETJAC fkinlapackdensesetjac_
+#define FKIN_LAPACKBAND        fkinlapackband_
+#define FKIN_LAPACKBANDSETJAC  fkinlapackbandsetjac_
+#define FKIN_KLU            fkinklu_
+#define FKIN_KLUREINIT      fkinklureinit_
+#define FKIN_SUPERLUMT      fkinsuperlumt_
+#define FKIN_SPARSESETJAC   fkinsparsesetjac_
+#define FKIN_SPTFQMR        fkinsptfqmr_
+#define FKIN_SPBCG          fkinspbcg_
+#define FKIN_SPGMR          fkinspgmr_
+#define FKIN_SPFGMR         fkinspgmr_
+#define FKIN_SPILSSETJAC    fkinspilssetjac_
+#define FKIN_SPILSSETPREC   fkinspilssetprec_
+#define FKIN_SOL            fkinsol_
+#define FKIN_FREE           fkinfree_
+#define FK_FUN              fkfun_
+#define FK_PSET             fkpset_
+#define FK_PSOL             fkpsol_
+#define FK_JTIMES           fkjtimes_
+#define FK_DJAC             fkdjac_
+#define FK_BJAC             fkbjac_
+
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes : exported functions
+ * -----------------------------------------------------------------
+ */
+
+void FKIN_MALLOC(long int *iout, realtype *rout, int *ier);
+void FKIN_CREATE(int *ier);
+void FKIN_INIT(long int *iout, realtype *rout, int *ier);
+
+void FKIN_SETIIN(char key_name[], long int *ival, int *ier);
+void FKIN_SETRIN(char key_name[], realtype *rval, int *ier);
+void FKIN_SETVIN(char key_name[], realtype *vval, int *ier);
+
+void FKIN_DENSE(long int *neq, int *ier);
+void FKIN_DENSESETJAC(int *flag, int *ier);
+
+void FKIN_BAND(long int *neq, long int *mupper, long int *mlower, int *ier);
+void FKIN_BANDSETJAC(int *flag, int *ier);
+
+void FKIN_LAPACKDENSE(int *neq, int *ier);
+void FKIN_LAPACKDENSESETJAC(int *flag, int *ier);
+void FKIN_LAPACKBAND(int *neq, int *mupper, int *mlower, int *ier);
+void FKIN_LAPACKBANDSETJAC(int *flag, int *ier);
+
+void FKIN_KLU(int *neq, int *nnz, int *sparsetype, int *ordering, int *ier);
+void FKIN_KLUREINIT(int *neq, int *nnz, int *reinit_type, int *ier);
+void FKIN_SUPERLUMT(int *nthreads, int *neq, int *nnz, int *ordering, int *ier);
+void FKIN_SPARSESETJAC(int *ier);
+
+void FKIN_SPTFQMR(int *maxl, int *ier);
+void FKIN_SPBCG(int *maxl, int *ier);
+void FKIN_SPGMR(int *maxl, int *maxlrst, int *ier);
+void FKIN_SPFGMR(int *maxl, int *maxlrst, int *ier);
+
+void FKIN_SPILSSETJAC(int *flag, int *ier);
+void FKIN_SPILSSETPREC(int *flag, int *ier);
+
+void FKIN_SOL(realtype *uu, int *globalstrategy, 
+              realtype *uscale , realtype *fscale, int *ier);
+
+void FKIN_FREE(void);
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes : functions called by the solver
+ * -----------------------------------------------------------------
+ */
+
+int FKINfunc(N_Vector uu, N_Vector fval, void *user_data);
+
+int FKINDenseJac(long int N,
+                 N_Vector uu, N_Vector fval,
+                 DlsMat J, void *user_data, 
+                 N_Vector vtemp1, N_Vector vtemp2);
+
+int FKINBandJac(long int N, long int mupper, long int mlower,
+                N_Vector uu, N_Vector fval, 
+                DlsMat J, void *user_data,
+                N_Vector vtemp1, N_Vector vtemp2);
+
+int FKINLapackDenseJac(long int N,
+                       N_Vector uu, N_Vector fval,
+                       DlsMat J, void *user_data, 
+                       N_Vector vtemp1, N_Vector vtemp2);
+
+int FKINLapackBandJac(long int N, long int mupper, long int mlower,
+                      N_Vector uu, N_Vector fval, 
+                      DlsMat J, void *user_data,
+                      N_Vector vtemp1, N_Vector vtemp2);
+
+int FKINSparseJac(N_Vector y, N_Vector fval, SlsMat J,
+		  void *user_data, N_Vector vtemp1, N_Vector vtemp2);
+
+int FKINPSet(N_Vector uu, N_Vector uscale,
+             N_Vector fval, N_Vector fscale,
+             void *user_data,
+             N_Vector vtemp1, N_Vector vtemp2);
+
+int FKINPSol(N_Vector uu, N_Vector uscale, 
+             N_Vector fval, N_Vector fscale, 
+             N_Vector vv, void *user_data,
+             N_Vector vtemp);
+
+int FKINJtimes(N_Vector v, N_Vector Jv,
+               N_Vector uu, booleantype *new_uu, 
+               void *user_data);
+
+/*
+ * -----------------------------------------------------------------
+ * declarations for global variables shared amongst various
+ * routines
+ * -----------------------------------------------------------------
+ */
+
+extern N_Vector F2C_KINSOL_vec;
+extern void *KIN_kinmem;
+extern long int *KIN_iout;
+extern realtype *KIN_rout;
+extern int KIN_ls;
+
+/* Linear solver IDs */
+
+  enum { KIN_LS_SPGMR = 1, KIN_LS_SPFGMR = 2, KIN_LS_SPBCG = 3, KIN_LS_SPTFQMR = 4, 
+	 KIN_LS_DENSE = 5, KIN_LS_BAND  = 6,
+	 KIN_LS_LAPACKDENSE = 7, KIN_LS_LAPACKBAND = 8,
+         KIN_LS_KLU = 9, KIN_LS_SUPERLUMT = 10 };
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/kinsol/fcmix/fkinsparse.c b/src/kinsol/fcmix/fkinsparse.c
new file mode 100644
index 0000000..c123b07
--- /dev/null
+++ b/src/kinsol/fcmix/fkinsparse.c
@@ -0,0 +1,71 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4815 $
+ * $Date: 2016-07-20 16:51:55 -0700 (Wed, 20 Jul 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ *                Daniel R. Reynolds @ SMU
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2015, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fkinsol.h"
+#include "kinsol_impl.h"
+#include <kinsol/kinsol_sparse.h>
+
+/* Prototype of the Fortran routine */
+ 
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+ 
+extern void FKIN_SPJAC(realtype *Y, realtype *FY, int *N, int *NNZ, 
+                       realtype *JDATA, int *JRVALS, int *JCPTRS, 
+                       realtype *V1, realtype *V2, int *ier);
+ 
+#ifdef __cplusplus
+}
+#endif
+ 
+/*=============================================================*/
+
+/* Fortran interface to C routine KINSlsSetSparseJacFn; see
+   fkinsol.h for further information */
+void FKIN_SPARSESETJAC(int *ier)
+{
+  *ier = KINSlsSetSparseJacFn(KIN_kinmem, FKINSparseJac);
+}
+
+/*=============================================================*/
+ 
+/* C interface to user-supplied Fortran routine FKINSPJAC; see 
+   fkinsol.h for additional information  */
+int FKINSparseJac(N_Vector y, N_Vector fy, 
+                  SlsMat J, void *user_data, N_Vector vtemp1, 
+                  N_Vector vtemp2)
+{
+  int ier;
+  realtype *ydata, *fydata, *v1data, *v2data;
+ 
+  ydata   = N_VGetArrayPointer(y);
+  fydata  = N_VGetArrayPointer(fy);
+  v1data  = N_VGetArrayPointer(vtemp1);
+  v2data  = N_VGetArrayPointer(vtemp2);
+ 
+  FKIN_SPJAC(ydata, fydata, &(J->NP), &(J->NNZ),
+             J->data, J->indexvals, J->indexptrs,  
+             v1data, v2data, &ier); 
+  return(ier);
+}
+
diff --git a/src/kinsol/fcmix/fkinsuperlumt.c b/src/kinsol/fcmix/fkinsuperlumt.c
new file mode 100644
index 0000000..61874dc
--- /dev/null
+++ b/src/kinsol/fcmix/fkinsuperlumt.c
@@ -0,0 +1,42 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4402 $
+ * $Date: 2015-02-28 19:35:39 -0800 (Sat, 28 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2015, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the Fortran interface to
+ * the KINSuperLUMT solver. See fkinsol.h for usage.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fkinsol.h"
+#include "kinsol_impl.h"
+#include <kinsol/kinsol_superlumt.h>
+ 
+/*
+ * ----------------------------------------------------------------
+ * Function : FKIN_SUPERLUMT
+ * ----------------------------------------------------------------
+ */
+
+void FKIN_SUPERLUMT(int *nthreads, int *neq, int *nnz, int *ordering, int *ier)
+{
+  *ier = KINSuperLUMT(KIN_kinmem, *nthreads, *neq, *nnz);
+  KINSuperLUMTSetOrdering(KIN_kinmem, *ordering);
+  KIN_ls = KIN_LS_SUPERLUMT;
+}
+
+
diff --git a/src/kinsol/kinsol.c b/src/kinsol/kinsol.c
new file mode 100644
index 0000000..72903fc
--- /dev/null
+++ b/src/kinsol/kinsol.c
@@ -0,0 +1,2544 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4888 $
+ * $Date: 2016-09-02 13:34:35 -0700 (Fri, 02 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, Carol Woodward,
+ *                John Loffeld, and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the main KINSol solver.
+ * It is independent of the KINSol linear solver in use.
+ * -----------------------------------------------------------------
+ *
+ * EXPORTED FUNCTIONS
+ * ------------------
+ *   Creation and allocation functions
+ *     KINCreate
+ *     KINInit
+ *   Main solver function
+ *     KINSol
+ *   Deallocation function
+ *     KINFree
+ *
+ * PRIVATE FUNCTIONS
+ * -----------------
+ *     KINCheckNvector
+ *   Memory allocation/deallocation
+ *     KINAllocVectors
+ *     KINFreeVectors
+ *   Initial setup
+ *     KINSolInit
+ *   Step functions
+ *     KINLinSolDrv
+ *     KINFullNewton
+ *     KINLineSearch
+ *     KINConstraint
+ *     KINFP
+ *     KINPicardAA
+ *   Stopping tests
+ *     KINStop
+ *     KINForcingTerm
+ *   Norm functions
+ *     KINScFNorm
+ *     KINScSNorm
+ *   KINSOL Verbose output functions
+ *     KINPrintInfo
+ *     KINInfoHandler
+ *   KINSOL Error Handling functions
+ *     KINProcessError
+ *     KINErrHandler
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include <math.h>
+
+#include "kinsol_impl.h"
+#include "kinsol_spils_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * MACRO DEFINITIONS
+ * =================================================================
+ */
+
+/* Macro: loop */
+#define loop for(;;)
+
+/* 
+ * =================================================================
+ * KINSOL PRIVATE CONSTANTS
+ * =================================================================
+ */
+
+#define HALF      RCONST(0.5)
+#define ZERO      RCONST(0.0)
+#define ONE       RCONST(1.0)
+#define ONEPT5    RCONST(1.5)
+#define TWO       RCONST(2.0)
+#define THREE     RCONST(3.0)
+#define FIVE      RCONST(5.0)
+#define TWELVE    RCONST(12.0)
+#define POINT1    RCONST(0.1)
+#define POINT01   RCONST(0.01)
+#define POINT99   RCONST(0.99)
+#define THOUSAND  RCONST(1000.0)
+#define ONETHIRD  RCONST(0.3333333333333333)
+#define TWOTHIRDS RCONST(0.6666666666666667)
+#define POINT9    RCONST(0.9)
+#define POINT0001 RCONST(0.0001)
+
+/* 
+ * =================================================================
+ * KINSOL ROUTINE-SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+/* 
+ * Control constants for lower-level functions used by KINSol 
+ * ----------------------------------------------------------
+ *
+ * KINStop return value requesting more iterations
+ *    RETRY_ITERATION
+ *    CONTINUE_ITERATIONS
+ *
+ * KINFullNewton, KINLineSearch, KINFP, and KINPicardAA return values:
+ *    KIN_SUCCESS
+ *    KIN_SYSFUNC_FAIL
+ *    STEP_TOO_SMALL
+ *
+ * KINConstraint return values:
+ *    KIN_SUCCESS
+ *    CONSTR_VIOLATED
+ */
+
+#define RETRY_ITERATION     -998
+#define CONTINUE_ITERATIONS -999
+#define STEP_TOO_SMALL      -997
+#define CONSTR_VIOLATED     -996
+
+/*
+ * Algorithmic constants
+ * ---------------------
+ *
+ * MAX_RECVR   max. no. of attempts to correct a recoverable func error
+ */
+
+#define MAX_RECVR      5
+
+/*
+ * Keys for KINPrintInfo
+ * ---------------------
+ */
+
+#define PRNT_RETVAL     1
+#define PRNT_NNI        2
+#define PRNT_TOL        3
+#define PRNT_FMAX       4
+#define PRNT_PNORM      5
+#define PRNT_PNORM1     6
+#define PRNT_FNORM      7
+#define PRNT_LAM        8
+#define PRNT_ALPHA      9
+#define PRNT_BETA      10
+#define PRNT_ALPHABETA 11
+#define PRNT_ADJ       12
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTION PROTOTYPES
+ * =================================================================
+ */
+
+static booleantype KINCheckNvector(N_Vector tmpl);
+static booleantype KINAllocVectors(KINMem kin_mem, N_Vector tmpl);
+static int KINSolInit(KINMem kin_mem);
+static int KINConstraint(KINMem kin_mem );
+static void KINForcingTerm(KINMem kin_mem, realtype fnormp);
+static void KINFreeVectors(KINMem kin_mem);
+
+static int  KINFullNewton(KINMem kin_mem, realtype *fnormp, 
+                          realtype *f1normp, booleantype *maxStepTaken);
+static int  KINLineSearch(KINMem kin_mem, realtype *fnormp, 
+                          realtype *f1normp, booleantype *maxStepTaken);
+static int  KINPicardAA(KINMem kin_mem, long int *iter, realtype *R, 
+			realtype *gamma, realtype *fmax);
+static int  KINFP(KINMem kin_mem, long int *iter, realtype *R, 
+		  realtype *gamma, realtype *fmax);
+
+static int  KINLinSolDrv(KINMem kinmem);
+static int  KINPicardFcnEval(KINMem kin_mem, N_Vector gval, N_Vector uval, 
+			     N_Vector fval1);
+static realtype KINScFNorm(KINMem kin_mem, N_Vector v, N_Vector scale);
+static realtype KINScSNorm(KINMem kin_mem, N_Vector v, N_Vector u);
+static int KINStop(KINMem kin_mem, booleantype maxStepTaken, 
+		   int sflag);
+static int AndersonAcc(KINMem kin_mem, N_Vector gval, N_Vector fv, N_Vector x, 
+		       N_Vector x_old, int iter, realtype *R, realtype *gamma);
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS IMPLEMENTATION
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * Creation and allocation functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * Function : KINCreate
+ *
+ * KINCreate creates an internal memory block for a problem to 
+ * be solved by KINSOL. If successful, KINCreate returns a pointer
+ * to the problem memory. This pointer should be passed to
+ * KINInit. If an initialization error occurs, KINCreate prints
+ * an error message to standard error and returns NULL. 
+ */
+
+void *KINCreate(void)
+{
+  KINMem kin_mem;
+  realtype uround;
+ 
+  kin_mem = NULL;
+  kin_mem = (KINMem) malloc(sizeof(struct KINMemRec));
+  if (kin_mem == NULL) {
+    KINProcessError(kin_mem, 0, "KINSOL", "KINCreate", MSG_MEM_FAIL);
+    return(NULL);
+  }
+
+  /* Zero out kin_mem */
+  memset(kin_mem, 0, sizeof(struct KINMemRec));
+
+  /* set uround (unit roundoff) */
+
+  kin_mem->kin_uround = uround = UNIT_ROUNDOFF;
+  
+  /* set default values for solver optional inputs */
+
+  kin_mem->kin_func             = NULL;
+  kin_mem->kin_user_data        = NULL;
+  kin_mem->kin_constraints      = NULL;
+  kin_mem->kin_uscale           = NULL;
+  kin_mem->kin_fscale           = NULL;
+  kin_mem->kin_fold_aa          = NULL;
+  kin_mem->kin_gold_aa          = NULL;
+  kin_mem->kin_df_aa            = NULL;
+  kin_mem->kin_dg_aa            = NULL;
+  kin_mem->kin_q_aa             = NULL;
+  kin_mem->kin_gamma_aa         = NULL;
+  kin_mem->kin_R_aa             = NULL;
+  kin_mem->kin_m_aa             = ZERO;
+  kin_mem->kin_aamem_aa         = 0;
+  kin_mem->kin_setstop_aa       = 0;
+  kin_mem->kin_constraintsSet   = FALSE;
+  kin_mem->kin_ehfun            = KINErrHandler;
+  kin_mem->kin_eh_data          = kin_mem;
+  kin_mem->kin_errfp            = stderr;
+  kin_mem->kin_ihfun            = KINInfoHandler;
+  kin_mem->kin_ih_data          = kin_mem;
+  kin_mem->kin_infofp           = stdout;
+  kin_mem->kin_printfl          = PRINTFL_DEFAULT;
+  kin_mem->kin_mxiter           = MXITER_DEFAULT;
+  kin_mem->kin_noInitSetup      = FALSE;
+  kin_mem->kin_msbset           = MSBSET_DEFAULT;
+  kin_mem->kin_noResMon         = FALSE;
+  kin_mem->kin_msbset_sub       = MSBSET_SUB_DEFAULT;
+  kin_mem->kin_update_fnorm_sub = FALSE;
+  kin_mem->kin_mxnbcf           = MXNBCF_DEFAULT;
+  kin_mem->kin_sthrsh           = TWO;
+  kin_mem->kin_noMinEps         = FALSE;
+  kin_mem->kin_mxnstepin        = ZERO;
+  kin_mem->kin_sqrt_relfunc     = SUNRsqrt(uround);
+  kin_mem->kin_scsteptol        = SUNRpowerR(uround,TWOTHIRDS);
+  kin_mem->kin_fnormtol         = SUNRpowerR(uround,ONETHIRD);
+  kin_mem->kin_etaflag          = KIN_ETACHOICE1;
+  kin_mem->kin_eta              = POINT1;     /* default for KIN_ETACONSTANT */
+  kin_mem->kin_eta_alpha        = TWO;        /* default for KIN_ETACHOICE2  */
+  kin_mem->kin_eta_gamma        = POINT9;     /* default for KIN_ETACHOICE2  */
+  kin_mem->kin_MallocDone       = FALSE;
+  kin_mem->kin_setupNonNull     = FALSE;
+  kin_mem->kin_eval_omega       = TRUE;
+  kin_mem->kin_omega            = ZERO;       /* default to using min/max    */
+  kin_mem->kin_omega_min        = OMEGA_MIN;
+  kin_mem->kin_omega_max        = OMEGA_MAX;
+
+  /* initialize lrw and liw */
+
+  kin_mem->kin_lrw = 17;
+  kin_mem->kin_liw = 22;
+
+  /* NOTE: needed since KINInit could be called after KINSetConstraints */
+
+  kin_mem->kin_lrw1 = 0;
+  kin_mem->kin_liw1 = 0;
+
+  return((void *) kin_mem);
+}
+
+#define errfp (kin_mem->kin_errfp)
+#define liw   (kin_mem->kin_liw)
+#define lrw   (kin_mem->kin_lrw)
+
+/*
+ * Function : KINInit
+ *
+ * KINInit allocates memory for a problem or execution of KINSol. 
+ * If memory is successfully allocated, KIN_SUCCESS is returned.
+ * Otherwise, an error message is printed and an error flag
+ * returned.
+ */
+
+int KINInit(void *kinmem, KINSysFn func, N_Vector tmpl)
+{
+  long int liw1, lrw1;
+  KINMem kin_mem;
+  booleantype allocOK, nvectorOK;
+  
+  /* check kinmem */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINInit", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (func == NULL) {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINInit", MSG_FUNC_NULL);
+    return(KIN_ILL_INPUT);
+  }
+
+  /* check if all required vector operations are implemented */
+
+  nvectorOK = KINCheckNvector(tmpl);
+  if (!nvectorOK) {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINInit", MSG_BAD_NVECTOR);
+    return(KIN_ILL_INPUT);
+  }
+
+  /* set space requirements for one N_Vector */
+
+  if (tmpl->ops->nvspace != NULL) {
+    N_VSpace(tmpl, &lrw1, &liw1);
+    kin_mem->kin_lrw1 = lrw1;
+    kin_mem->kin_liw1 = liw1;
+  }
+  else {
+    kin_mem->kin_lrw1 = 0;
+    kin_mem->kin_liw1 = 0;
+  }
+
+  /* allocate necessary vectors */
+
+  allocOK = KINAllocVectors(kin_mem, tmpl);
+  if (!allocOK) {
+    KINProcessError(kin_mem, KIN_MEM_FAIL, "KINSOL", "KINInit", MSG_MEM_FAIL);
+    free(kin_mem); kin_mem = NULL;
+    return(KIN_MEM_FAIL);
+  }
+
+  /* copy the input parameter into KINSol state */
+
+  kin_mem->kin_func = func;
+
+  /* set the linear solver addresses to NULL */
+
+  kin_mem->kin_linit  = NULL;
+  kin_mem->kin_lsetup = NULL;
+  kin_mem->kin_lsolve = NULL;
+  kin_mem->kin_lfree  = NULL;
+  kin_mem->kin_lmem   = NULL;
+  
+  /* problem memory has been successfully allocated */
+
+  kin_mem->kin_MallocDone = TRUE;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Readability constants
+ * -----------------------------------------------------------------
+ */
+
+#define func             (kin_mem->kin_func)
+#define user_data        (kin_mem->kin_user_data)
+#define printfl          (kin_mem->kin_printfl)
+#define mxiter           (kin_mem->kin_mxiter)
+#define noInitSetup      (kin_mem->kin_noInitSetup)
+#define retry_nni        (kin_mem->kin_retry_nni)
+#define msbset           (kin_mem->kin_msbset)
+#define etaflag          (kin_mem->kin_etaflag)
+#define eta              (kin_mem->kin_eta)
+#define ealpha           (kin_mem->kin_eta_alpha)
+#define egamma           (kin_mem->kin_eta_gamma)
+#define noMinEps         (kin_mem->kin_noMinEps)
+#define mxnewtstep       (kin_mem->kin_mxnewtstep)
+#define mxnstepin        (kin_mem->kin_mxnstepin)
+#define mxnbcf           (kin_mem->kin_mxnbcf)
+#define relfunc          (kin_mem->kin_sqrt_relfunc)
+#define fnormtol         (kin_mem->kin_fnormtol)
+#define scsteptol        (kin_mem->kin_scsteptol)
+#define constraints      (kin_mem->kin_constraints)
+
+#define uround           (kin_mem->kin_uround)
+#define nni              (kin_mem->kin_nni)
+#define nfe              (kin_mem->kin_nfe)
+#define nbcf             (kin_mem->kin_nbcf)  
+#define nbktrk           (kin_mem->kin_nbktrk)
+#define ncscmx           (kin_mem->kin_ncscmx)
+#define stepl            (kin_mem->kin_stepl)
+#define stepmul          (kin_mem->kin_stepmul)
+#define sthrsh           (kin_mem->kin_sthrsh)
+#define linit            (kin_mem->kin_linit)
+#define lsetup           (kin_mem->kin_lsetup)
+#define lsolve           (kin_mem->kin_lsolve) 
+#define lfree            (kin_mem->kin_lfree)
+#define constraintsSet   (kin_mem->kin_constraintsSet) 
+#define jacCurrent       (kin_mem->kin_jacCurrent)          
+#define nnilset          (kin_mem->kin_nnilset)
+#define lmem             (kin_mem->kin_lmem)        
+#define inexact_ls       (kin_mem->kin_inexact_ls)
+#define setupNonNull     (kin_mem->kin_setupNonNull)
+#define fval             (kin_mem->kin_fval)      
+#define fnorm            (kin_mem->kin_fnorm)
+#define f1norm           (kin_mem->kin_f1norm)
+#define etaflag          (kin_mem->kin_etaflag)
+#define callForcingTerm  (kin_mem->kin_callForcingTerm)
+#define uu               (kin_mem->kin_uu)
+#define uscale           (kin_mem->kin_uscale)
+#define fscale           (kin_mem->kin_fscale)
+#define sJpnorm          (kin_mem->kin_sJpnorm)
+#define sFdotJp          (kin_mem->kin_sFdotJp)
+#define unew             (kin_mem->kin_unew)
+#define pp               (kin_mem->kin_pp)
+#define vtemp1           (kin_mem->kin_vtemp1)
+#define vtemp2           (kin_mem->kin_vtemp2)
+#define eps              (kin_mem->kin_eps)
+#define liw1             (kin_mem->kin_liw1)
+#define lrw1             (kin_mem->kin_lrw1)
+
+#define noResMon         (kin_mem->kin_noResMon)
+#define fnorm_sub        (kin_mem->kin_fnorm_sub)
+#define msbset_sub       (kin_mem->kin_msbset_sub)
+#define nnilset_sub      (kin_mem->kin_nnilset_sub)
+#define update_fnorm_sub (kin_mem->kin_update_fnorm_sub)
+#define eval_omega       (kin_mem->kin_eval_omega)
+#define omega            (kin_mem->kin_omega)
+#define omega_min        (kin_mem->kin_omega_min)
+#define omega_max        (kin_mem->kin_omega_max)
+
+#define fold             (kin_mem->kin_fold_aa)
+#define gold             (kin_mem->kin_gold_aa)
+#define df               (kin_mem->kin_df_aa)
+#define dg               (kin_mem->kin_dg_aa)
+#define Q                (kin_mem->kin_q_aa)
+#define maa              (kin_mem->kin_m_aa)
+#define aamem            (kin_mem->kin_aamem_aa)
+#define setstop          (kin_mem->kin_setstop_aa)
+#define strategy         (kin_mem->kin_globalstrategy)
+
+/* 
+ * -----------------------------------------------------------------
+ * Main solver function
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * Function : KINSol
+ *
+ * KINSol (main KINSOL driver routine) manages the computational
+ * process of computing an approximate solution of the nonlinear
+ * system F(uu) = 0. The KINSol routine calls the following
+ * subroutines:
+ *
+ *  KINSolInit    checks if initial guess satisfies user-supplied
+ *                constraints and initializes linear solver
+ *
+ *  KINLinSolDrv  interfaces with linear solver to find a
+ *                solution of the system J(uu)*x = b (calculate
+ *                Newton step)
+ *
+ *  KINFullNewton/KINLineSearch  implement the global strategy
+ *
+ *  KINForcingTerm  computes the forcing term (eta)
+ *
+ *  KINStop  determines if an approximate solution has been found
+ */
+
+int KINSol(void *kinmem, N_Vector u, int strategy_in,  
+           N_Vector u_scale, N_Vector f_scale)
+{
+  realtype fnormp, f1normp, epsmin, fmax=ZERO;
+  KINMem kin_mem;
+  int ret, sflag;
+  booleantype maxStepTaken;
+
+  /* intialize to avoid compiler warning messages */
+
+  maxStepTaken = FALSE;
+  f1normp = fnormp = -ONE;
+
+  /* initialize epsmin to avoid compiler warning message */
+
+  epsmin = ZERO;
+
+  /* check for kinmem non-NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSol", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if(kin_mem->kin_MallocDone == FALSE) {
+    KINProcessError(NULL, KIN_NO_MALLOC, "KINSOL", "KINSol", MSG_NO_MALLOC);    
+    return(KIN_NO_MALLOC);
+  }
+
+  /* load input arguments */
+
+  uu = u;
+  uscale = u_scale;
+  fscale = f_scale;
+  strategy = strategy_in;
+
+  /* CSW:  
+     Call fixed point solver if requested.  Note that this should probably
+     be forked off to a FPSOL solver instead of kinsol in the future. */
+  if ( strategy == KIN_FP ) {
+    if (uu == NULL) {
+      KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSol", MSG_UU_NULL);
+      return(KIN_ILL_INPUT);
+    }
+
+    if (kin_mem->kin_constraintsSet != FALSE) {
+      KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSol", MSG_CONSTRAINTS_NOTOK);
+      return(KIN_ILL_INPUT);
+    }
+
+    if (printfl > 0)
+      KINPrintInfo(kin_mem, PRNT_TOL, "KINSOL", "KINSol", INFO_TOL, scsteptol, fnormtol);
+
+    nfe = nnilset = nnilset_sub = nni = nbcf = nbktrk = 0;
+    ret = KINFP(kin_mem, &nni, kin_mem->kin_R_aa, kin_mem->kin_gamma_aa, &fmax);
+
+    switch(ret) {
+    case KIN_SYSFUNC_FAIL:
+      KINProcessError(kin_mem, KIN_SYSFUNC_FAIL, "KINSOL", "KINSol", MSG_SYSFUNC_FAILED);
+      break;
+    case KIN_MAXITER_REACHED:
+      KINProcessError(kin_mem, KIN_MAXITER_REACHED, "KINSOL", "KINSol", MSG_MAXITER_REACHED);
+      break;
+    }
+
+    return(ret);
+  }
+
+  /* initialize solver */
+  ret = KINSolInit(kin_mem);
+  if (ret != KIN_SUCCESS) return(ret);
+
+  ncscmx = 0;
+
+  /* Note: The following logic allows the choice of whether or not
+     to force a call to the linear solver setup upon a given call to
+     KINSol */
+
+  if (noInitSetup) sthrsh = ONE;
+  else             sthrsh = TWO;
+
+  /* if eps is to be bounded from below, set the bound */
+
+  if (inexact_ls && !noMinEps) epsmin = POINT01 * fnormtol;
+
+
+  /* if omega is zero at this point, make sure it will be evaluated
+     at each iteration based on the provided min/max bounds and the
+     current function norm. */
+  if (omega == ZERO) eval_omega = TRUE;
+  else               eval_omega = FALSE;
+ 
+
+  /* CSW:  
+     Call fixed point solver for Picard method if requested.  
+     Note that this should probably be forked off to a part of an 
+     FPSOL solver instead of kinsol in the future. */
+  if ( strategy == KIN_PICARD ) {
+
+    kin_mem->kin_gval = N_VClone(unew);
+    lrw += lrw1;
+    ret = KINPicardAA(kin_mem, &nni, kin_mem->kin_R_aa, kin_mem->kin_gamma_aa, &fmax);
+
+    return(ret);
+  }
+
+
+  loop{
+
+    retry_nni = FALSE;
+
+    nni++;
+
+    /* calculate the epsilon (stopping criteria for iterative linear solver)
+       for this iteration based on eta from the routine KINForcingTerm */
+
+    if (inexact_ls) {
+      eps = (eta + uround) * fnorm;
+      if(!noMinEps) eps = SUNMAX(epsmin, eps);
+    }
+
+    repeat_nni:
+
+    /* call the appropriate routine to calculate an acceptable step pp */
+
+    sflag = 0;
+
+    if (strategy == KIN_NONE) {
+
+      /* Full Newton Step*/
+
+      /* call KINLinSolDrv to calculate the (approximate) Newton step, pp */ 
+      ret = KINLinSolDrv(kin_mem);
+      if (ret != KIN_SUCCESS) break;
+
+      sflag = KINFullNewton(kin_mem, &fnormp, &f1normp, &maxStepTaken);
+
+      /* if sysfunc failed unrecoverably, stop */
+      if ((sflag == KIN_SYSFUNC_FAIL) || (sflag == KIN_REPTD_SYSFUNC_ERR)) {
+        ret = sflag;
+        break;
+      }
+
+    } else if (strategy == KIN_LINESEARCH) {
+
+      /* Line Search */
+
+      /* call KINLinSolDrv to calculate the (approximate) Newton step, pp */ 
+      ret = KINLinSolDrv(kin_mem);
+      if (ret != KIN_SUCCESS) break;
+
+      sflag = KINLineSearch(kin_mem, &fnormp, &f1normp, &maxStepTaken);
+
+      /* if sysfunc failed unrecoverably, stop */
+      if ((sflag == KIN_SYSFUNC_FAIL) || (sflag == KIN_REPTD_SYSFUNC_ERR)) {
+        ret = sflag;
+        break;
+      }
+
+      /* if too many beta condition failures, then stop iteration */
+      if (nbcf > mxnbcf) {
+        ret = KIN_LINESEARCH_BCFAIL;
+        break;
+      }
+
+    }
+
+    if ( (strategy != KIN_PICARD) && (strategy != KIN_FP) ) {
+      
+      /* evaluate eta by calling the forcing term routine */
+      if (callForcingTerm) KINForcingTerm(kin_mem, fnormp);
+
+      fnorm = fnormp;
+
+      /* call KINStop to check if tolerances where met by this iteration */
+      ret = KINStop(kin_mem, maxStepTaken, sflag); 
+
+      if (ret == RETRY_ITERATION) {
+	retry_nni = TRUE;
+	goto repeat_nni;
+      }
+    }
+
+    /* update uu after the iteration */
+    N_VScale(ONE, unew, uu);
+
+    f1norm = f1normp;
+
+    /* print the current nni, fnorm, and nfe values if printfl > 0 */
+
+    if (printfl>0)
+      KINPrintInfo(kin_mem, PRNT_NNI, "KINSOL", "KINSol", INFO_NNI, nni, nfe, fnorm);
+
+    if (ret != CONTINUE_ITERATIONS) break; 
+
+    fflush(errfp);
+    
+  }  /* end of loop; return */
+
+
+
+  if (printfl > 0)
+    KINPrintInfo(kin_mem, PRNT_RETVAL, "KINSOL", "KINSol", INFO_RETVAL, ret);
+
+  switch(ret) {
+  case KIN_SYSFUNC_FAIL:
+    KINProcessError(kin_mem, KIN_SYSFUNC_FAIL, "KINSOL", "KINSol", MSG_SYSFUNC_FAILED);
+    break;
+  case KIN_REPTD_SYSFUNC_ERR:
+    KINProcessError(kin_mem, KIN_REPTD_SYSFUNC_ERR, "KINSOL", "KINSol", MSG_SYSFUNC_REPTD);
+    break;
+  case KIN_LSETUP_FAIL:
+    KINProcessError(kin_mem, KIN_LSETUP_FAIL, "KINSOL", "KINSol", MSG_LSETUP_FAILED);
+    break;
+  case KIN_LSOLVE_FAIL:
+    KINProcessError(kin_mem, KIN_LSOLVE_FAIL, "KINSOL", "KINSol", MSG_LSOLVE_FAILED);
+    break;
+  case KIN_LINSOLV_NO_RECOVERY:
+    KINProcessError(kin_mem, KIN_LINSOLV_NO_RECOVERY, "KINSOL", "KINSol", MSG_LINSOLV_NO_RECOVERY);
+    break;
+  case KIN_LINESEARCH_NONCONV:
+    KINProcessError(kin_mem, KIN_LINESEARCH_NONCONV, "KINSOL", "KINSol", MSG_LINESEARCH_NONCONV);
+    break;
+  case KIN_LINESEARCH_BCFAIL:
+    KINProcessError(kin_mem, KIN_LINESEARCH_BCFAIL, "KINSOL", "KINSol", MSG_LINESEARCH_BCFAIL);
+    break;
+  case KIN_MAXITER_REACHED:
+    KINProcessError(kin_mem, KIN_MAXITER_REACHED, "KINSOL", "KINSol", MSG_MAXITER_REACHED);
+    break;
+  case KIN_MXNEWT_5X_EXCEEDED:
+    KINProcessError(kin_mem, KIN_MXNEWT_5X_EXCEEDED, "KINSOL", "KINSol", MSG_MXNEWT_5X_EXCEEDED);
+    break;
+  }
+  
+  return(ret);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Deallocation function
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * Function : KINFree
+ *
+ * This routine frees the problem memory allocated by KINInit.
+ * Such memory includes all the vectors allocated by
+ * KINAllocVectors, and the memory lmem for the linear solver
+ * (deallocated by a call to lfree).
+ */
+
+void KINFree(void **kinmem)
+{
+  KINMem kin_mem;
+
+  if (*kinmem == NULL) return;
+
+  kin_mem = (KINMem) (*kinmem);
+  KINFreeVectors(kin_mem);
+
+  /* call lfree if non-NULL */
+
+  if (lfree != NULL) lfree(kin_mem);
+
+  free(*kinmem);
+  *kinmem = NULL;
+}
+
+/* 
+ * =================================================================
+ * PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/*
+ * Function : KINCheckNvector
+ *
+ * This routine checks if all required vector operations are
+ * implemented (excluding those required by KINConstraint). If all
+ * necessary operations are present, then KINCheckNvector returns
+ * TRUE. Otherwise, FALSE is returned.
+ */
+
+static booleantype KINCheckNvector(N_Vector tmpl)
+{
+  if ((tmpl->ops->nvclone     == NULL) ||
+      (tmpl->ops->nvdestroy   == NULL) ||
+      (tmpl->ops->nvlinearsum == NULL) ||
+      (tmpl->ops->nvprod      == NULL) ||
+      (tmpl->ops->nvdiv       == NULL) ||
+      (tmpl->ops->nvscale     == NULL) ||
+      (tmpl->ops->nvabs       == NULL) ||
+      (tmpl->ops->nvinv       == NULL) ||
+      (tmpl->ops->nvmaxnorm   == NULL) ||
+      (tmpl->ops->nvmin       == NULL) ||
+      (tmpl->ops->nvwl2norm   == NULL)) return(FALSE);
+  else return(TRUE);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Memory allocation/deallocation
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * Function : KINAllocVectors
+ *
+ * This routine allocates the KINSol vectors. If all memory
+ * allocations are successful, KINAllocVectors returns TRUE.
+ * Otherwise all allocated memory is freed and KINAllocVectors
+ * returns FALSE.
+ */
+
+static booleantype KINAllocVectors(KINMem kin_mem, N_Vector tmpl)
+{
+  /* allocate unew, fval, pp, vtemp1 and vtemp2. */  
+  /* allocate df, dg, q, for Anderson Acceleration, Broyden and EN */
+ 
+  unew = N_VClone(tmpl);
+  if (unew == NULL) return(FALSE);
+
+  fval = N_VClone(tmpl);
+  if (fval == NULL) {
+    N_VDestroy(unew);
+    return(FALSE);
+  }
+
+  pp = N_VClone(tmpl);
+  if (pp == NULL) {
+    N_VDestroy(unew);
+    N_VDestroy(fval);
+    return(FALSE);
+  }
+
+  vtemp1 = N_VClone(tmpl);
+  if (vtemp1 == NULL) {
+    N_VDestroy(unew);
+    N_VDestroy(fval);
+    N_VDestroy(pp);
+    return(FALSE);
+  }
+
+  vtemp2 = N_VClone(tmpl);
+  if (vtemp2 == NULL) {
+    N_VDestroy(unew);
+    N_VDestroy(fval);
+    N_VDestroy(pp);
+    N_VDestroy(vtemp1);
+    return(FALSE);
+  }
+
+  /* update solver workspace lengths */
+
+  liw += 5*liw1;
+  lrw += 5*lrw1;
+
+  if (maa) {
+    kin_mem->kin_R_aa = (realtype *) malloc((maa*maa) * sizeof(realtype));
+    if (kin_mem->kin_R_aa == NULL) {
+      KINProcessError(kin_mem, 0, "KINSOL", "KINAllocVectors", MSG_MEM_FAIL);
+      N_VDestroy(unew);
+      N_VDestroy(fval);
+      N_VDestroy(pp);
+      N_VDestroy(vtemp1);
+      N_VDestroy(vtemp2);
+      return(KIN_MEM_FAIL);
+    }
+    kin_mem->kin_gamma_aa = (realtype *)malloc(maa * sizeof(realtype));
+    if (kin_mem->kin_gamma_aa == NULL) {
+      KINProcessError(kin_mem, 0, "KINSOL", "KINAllocVectors", MSG_MEM_FAIL);
+      N_VDestroy(unew);
+      N_VDestroy(fval);
+      N_VDestroy(pp);
+      N_VDestroy(vtemp1);
+      N_VDestroy(vtemp2);
+      free(kin_mem->kin_R_aa);
+      return(KIN_MEM_FAIL);
+    }
+    kin_mem->kin_ipt_map = (int *)malloc(maa * sizeof(int));
+    if (kin_mem->kin_ipt_map == NULL) {
+      KINProcessError(kin_mem, 0, "KINSOL", "KINAllocVectors", MSG_MEM_FAIL);
+      N_VDestroy(unew);
+      N_VDestroy(fval);
+      N_VDestroy(pp);
+      N_VDestroy(vtemp1);
+      N_VDestroy(vtemp2);
+      free(kin_mem->kin_R_aa);
+      free(kin_mem->kin_gamma_aa);
+      return(KIN_MEM_FAIL);
+    }
+  } 
+
+  if (maa) {
+    fold = N_VClone(tmpl);
+    if (fold == NULL) {
+      N_VDestroy(unew);
+      N_VDestroy(fval);
+      N_VDestroy(pp);
+      N_VDestroy(vtemp1);
+      N_VDestroy(vtemp2);
+      free(kin_mem->kin_R_aa);
+      free(kin_mem->kin_gamma_aa);
+      free(kin_mem->kin_ipt_map);
+      return(FALSE);
+    }
+    gold = N_VClone(tmpl);
+    if (gold == NULL) {
+      N_VDestroy(unew);
+      N_VDestroy(fval);
+      N_VDestroy(pp);
+      N_VDestroy(vtemp1);
+      N_VDestroy(vtemp2);
+      N_VDestroy(fold);
+      return(FALSE);
+    }
+    df = N_VCloneVectorArray(maa,tmpl);
+    if (df == NULL) {
+      N_VDestroy(unew);
+      N_VDestroy(fval);
+      N_VDestroy(pp);
+      N_VDestroy(vtemp1);
+      N_VDestroy(vtemp2);
+      free(kin_mem->kin_R_aa);
+      free(kin_mem->kin_gamma_aa);
+      free(kin_mem->kin_ipt_map);
+      N_VDestroy(fold);
+      N_VDestroy(gold);
+      return(FALSE);
+    }
+    dg = N_VCloneVectorArray(maa,tmpl);
+    if (dg == NULL) {
+      N_VDestroy(unew);
+      N_VDestroy(fval);
+      N_VDestroy(pp);
+      N_VDestroy(vtemp1);
+      N_VDestroy(vtemp2);
+      free(kin_mem->kin_R_aa);
+      free(kin_mem->kin_gamma_aa);
+      free(kin_mem->kin_ipt_map);
+      N_VDestroy(fold);
+      N_VDestroy(gold);
+      N_VDestroyVectorArray(df, maa);
+      return(FALSE);
+    }
+
+    /* update solver workspace lengths */
+
+    liw += 2*maa*liw1+2;
+    lrw += 2*maa*lrw1+2;
+
+    if (aamem) {
+      Q = N_VCloneVectorArray(maa,tmpl);
+      if (Q == NULL) {
+	N_VDestroy(unew);
+	N_VDestroy(fval);
+	N_VDestroy(pp);
+	N_VDestroy(vtemp1);
+	N_VDestroy(vtemp2);
+	free(kin_mem->kin_R_aa);
+	free(kin_mem->kin_gamma_aa);
+	free(kin_mem->kin_ipt_map);
+	N_VDestroy(fold);
+	N_VDestroy(gold);
+	N_VDestroyVectorArray(df, maa);
+	N_VDestroyVectorArray(dg, maa);
+	return(FALSE);
+      }
+      liw += maa*liw1;
+      lrw += maa*lrw1;
+    }
+  }
+  return(TRUE);
+}
+
+/*
+ * KINFreeVectors
+ *
+ * This routine frees the KINSol vectors allocated by
+ * KINAllocVectors.
+ */
+
+static void KINFreeVectors(KINMem kin_mem)
+{
+  if (unew != NULL)   N_VDestroy(unew);
+  if (fval != NULL)   N_VDestroy(fval);
+  if (pp != NULL)     N_VDestroy(pp);
+  if (vtemp1 != NULL) N_VDestroy(vtemp1);
+  if (vtemp2 != NULL) N_VDestroy(vtemp2);
+
+  if ( (kin_mem->kin_globalstrategy == KIN_PICARD) && (kin_mem->kin_gval != NULL) ) 
+    N_VDestroy(kin_mem->kin_gval);
+
+  if ( ((strategy == KIN_PICARD) || (strategy == KIN_FP)) && (maa > 0) ) {
+    free(kin_mem->kin_R_aa);
+    free(kin_mem->kin_gamma_aa);
+    free(kin_mem->kin_ipt_map);
+  }
+
+  if (maa)
+  {
+     if (fold != NULL) N_VDestroy(fold);
+     if (gold != NULL) N_VDestroy(gold);
+     N_VDestroyVectorArray(df,maa);
+     N_VDestroyVectorArray(dg,maa);
+     lrw -= (2*maa*lrw1+2);
+     liw -= (2*maa*liw1+2);
+     if (aamem)
+     {
+        N_VDestroyVectorArray(Q,maa);
+        lrw -= maa*lrw1;
+        liw -= maa*liw1;
+     }
+  }
+
+  lrw -= 5*lrw1;
+  liw -= 5*liw1;
+
+  if (kin_mem->kin_constraintsSet) {
+    if (constraints != NULL) N_VDestroy(constraints);
+    lrw -= lrw1;
+    liw -= liw1;
+  }
+
+  return;
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Initial setup
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * KINSolInit
+ *
+ * KINSolInit initializes the problem for the specific input
+ * received in this call to KINSol (which calls KINSolInit). All
+ * problem specification inputs are checked for errors. If any error
+ * occurs during initialization, it is reported to the file whose
+ * file pointer is errfp.
+ *
+ * The possible return values for KINSolInit are:
+ *   KIN_SUCCESS : indicates a normal initialization
+ *
+ *   KIN_ILL_INPUT : indicates that an input error has been found
+ *
+ *   KIN_INITIAL_GUESS_OK : indicates that the guess uu
+ *                          satisfied the system func(uu) = 0
+ *                          within the tolerances specified
+ */
+
+static int KINSolInit(KINMem kin_mem)
+{
+  int retval;
+  realtype fmax;
+  
+  /* check for illegal input parameters */
+
+  if (uu == NULL) {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit", MSG_UU_NULL);
+    return(KIN_ILL_INPUT);
+  }
+
+  if ( (strategy != KIN_NONE) && (strategy != KIN_LINESEARCH) && 
+       (strategy != KIN_PICARD) && (strategy != KIN_FP) ) {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit", MSG_BAD_GLSTRAT);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (uscale == NULL)  {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit", MSG_BAD_USCALE);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (N_VMin(uscale) <= ZERO){
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit", MSG_USCALE_NONPOSITIVE);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (fscale == NULL)  {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit", MSG_BAD_FSCALE);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (N_VMin(fscale) <= ZERO){
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit", MSG_FSCALE_NONPOSITIVE);
+    return(KIN_ILL_INPUT);
+  }
+
+  if ( (constraints != NULL) && ( (strategy == KIN_PICARD) || (strategy == KIN_FP) ) ) {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit", MSG_CONSTRAINTS_NOTOK);
+    return(KIN_ILL_INPUT);
+  }
+    
+
+  /* set the constraints flag */
+
+  if (constraints == NULL) 
+    constraintsSet = FALSE;
+  else {
+    constraintsSet = TRUE;
+    if ((constraints->ops->nvconstrmask  == NULL) ||
+	(constraints->ops->nvminquotient == NULL)) {
+      KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit", MSG_BAD_NVECTOR);
+      return(KIN_ILL_INPUT);
+    }
+  }
+
+  /* check the initial guess uu against the constraints */
+
+  if (constraintsSet) {
+    if (!N_VConstrMask(constraints, uu, vtemp1)) {
+      KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit", MSG_INITIAL_CNSTRNT);
+      return(KIN_ILL_INPUT);
+    }
+  }
+  
+  /* all error checking is complete at this point */
+
+  if (printfl > 0)
+    KINPrintInfo(kin_mem, PRNT_TOL, "KINSOL", "KINSolInit", INFO_TOL, scsteptol, fnormtol);
+
+  /* calculate the default value for mxnewtstep (maximum Newton step) */
+
+  if (mxnstepin == ZERO) mxnewtstep = THOUSAND * N_VWL2Norm(uu, uscale);
+  else                   mxnewtstep = mxnstepin;
+  if (mxnewtstep < ONE) mxnewtstep = ONE;
+
+
+  /* additional set-up for inexact linear solvers */
+
+  if (inexact_ls) {
+
+    /* set up the coefficients for the eta calculation */
+
+    callForcingTerm = (etaflag != KIN_ETACONSTANT);
+
+    /* this value is always used for choice #1 */
+
+    if (etaflag == KIN_ETACHOICE1) ealpha = (ONE + SUNRsqrt(FIVE)) * HALF;
+
+    /* initial value for eta set to 0.5 for other than the 
+       KIN_ETACONSTANT option */
+
+    if (etaflag != KIN_ETACONSTANT) eta = HALF;
+
+    /* disable residual monitoring if using an inexact linear solver */
+
+    noResMon = TRUE;
+
+  } else {
+
+    callForcingTerm = FALSE;
+
+  }
+
+  /* initialize counters */
+
+  nfe = nnilset = nnilset_sub = nni = nbcf = nbktrk = 0;
+
+  /* see if the initial guess uu satisfies the nonlinear system */
+  retval = func(uu, fval, user_data); nfe++;
+
+  if (retval < 0) {
+    KINProcessError(kin_mem, KIN_SYSFUNC_FAIL, "KINSOL", "KINSolInit", 
+		    MSG_SYSFUNC_FAILED);
+    return(KIN_SYSFUNC_FAIL);
+  } else if (retval > 0) {
+    KINProcessError(kin_mem, KIN_FIRST_SYSFUNC_ERR, "KINSOL", "KINSolInit", 
+		    MSG_SYSFUNC_FIRST);
+    return(KIN_FIRST_SYSFUNC_ERR);
+  }
+
+  fmax = KINScFNorm(kin_mem, fval, fscale);
+  if (fmax <= (POINT01 * fnormtol)) {
+    kin_mem->kin_fnorm = N_VWL2Norm(fval, fscale);
+    return(KIN_INITIAL_GUESS_OK);
+  }
+
+  if (printfl > 1)
+    KINPrintInfo(kin_mem, PRNT_FMAX, "KINSOL", "KINSolInit", INFO_FMAX, fmax);
+  
+  /* initialize the linear solver if linit != NULL */
+
+  if (linit != NULL) {
+    retval = linit(kin_mem);
+    if (retval != 0) {
+      KINProcessError(kin_mem, KIN_LINIT_FAIL, "KINSOL", "KINSolInit", MSG_LINIT_FAIL);
+      return(KIN_LINIT_FAIL);
+    }
+  }
+
+  /* initialize the L2 (Euclidean) norms of f for the linear iteration steps */
+
+  fnorm = N_VWL2Norm(fval, fscale);
+  f1norm = HALF * fnorm * fnorm;
+  fnorm_sub = fnorm;
+
+  if (printfl > 0)
+    KINPrintInfo(kin_mem, PRNT_NNI, "KINSOL", "KINSolInit", 
+		 INFO_NNI, nni, nfe, fnorm);
+
+  /* problem has now been successfully initialized */
+
+  return(KIN_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * Step functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * KINLinSolDrv
+ *
+ * This routine handles the process of solving for the approximate
+ * solution of the Newton equations in the Newton iteration.
+ * Subsequent routines handle the nonlinear aspects of its
+ * application. 
+ */
+
+static int KINLinSolDrv(KINMem kin_mem)
+{
+  N_Vector x, b;
+  int retval;
+
+  if ((nni - nnilset) >= msbset) {
+    sthrsh = TWO;
+    update_fnorm_sub = TRUE;
+  }
+
+  loop{
+
+    jacCurrent = FALSE;
+
+    if ((sthrsh > ONEPT5) && setupNonNull) {
+      retval = lsetup(kin_mem);
+      jacCurrent = TRUE;
+      nnilset = nni;
+      nnilset_sub = nni;
+      if (retval != 0) return(KIN_LSETUP_FAIL);
+    }
+
+    /* rename vectors for readability */
+
+    b = unew;
+    x = pp;
+
+    /* load b with the current value of -fval */
+
+    N_VScale(-ONE, fval, b);
+
+    /* call the generic 'lsolve' routine to solve the system Jx = b */
+
+    retval = lsolve(kin_mem, x, b, &sJpnorm, &sFdotJp);
+
+    if (retval == 0)                          return(KIN_SUCCESS);
+    else if (retval < 0)                      return(KIN_LSOLVE_FAIL);
+    else if ((!setupNonNull) || (jacCurrent)) return(KIN_LINSOLV_NO_RECOVERY);
+
+    /* loop back only if the linear solver setup is in use 
+       and Jacobian information is not current */
+
+    sthrsh = TWO;
+
+  }
+}
+
+/*
+ * KINFullNewton
+ *
+ * This routine is the main driver for the Full Newton
+ * algorithm. Its purpose is to compute unew = uu + pp in the
+ * direction pp from uu, taking the full Newton step. The
+ * step may be constrained if the constraint conditions are
+ * violated, or if the norm of pp is greater than mxnewtstep. 
+ */
+
+static int KINFullNewton(KINMem kin_mem, realtype *fnormp, realtype *f1normp,
+                         booleantype *maxStepTaken)
+{
+  realtype pnorm, ratio;
+  booleantype fOK;
+  int ircvr, retval;
+
+  *maxStepTaken = FALSE;
+  pnorm = N_VWL2Norm(pp, uscale);
+  ratio = ONE;
+  if (pnorm > mxnewtstep) {
+    ratio = mxnewtstep / pnorm;
+    N_VScale(ratio, pp, pp);
+    pnorm = mxnewtstep;
+  }
+
+  if (printfl > 0)
+    KINPrintInfo(kin_mem, PRNT_PNORM, "KINSOL", "KINFullNewton", INFO_PNORM, pnorm);
+
+  /* If constraints are active, then constrain the step accordingly */
+
+  stepl = pnorm;
+  stepmul = ONE;
+  if (constraintsSet) {
+    retval = KINConstraint(kin_mem);
+    if (retval == CONSTR_VIOLATED) {
+      /* Apply stepmul set in KINConstraint */
+      ratio *= stepmul;
+      N_VScale(stepmul, pp, pp);
+      pnorm *= stepmul;
+      stepl = pnorm;
+      if (printfl > 0)
+        KINPrintInfo(kin_mem, PRNT_PNORM, "KINSOL", "KINFullNewton", INFO_PNORM, pnorm);
+      if (pnorm <= scsteptol) {
+        N_VLinearSum(ONE, uu, ONE, pp, unew);
+        return(STEP_TOO_SMALL);}
+    }
+  }
+ 
+  /* Attempt (at most MAX_RECVR times) to evaluate function at the new iterate */
+  
+  fOK = FALSE;
+
+  for (ircvr = 1; ircvr <= MAX_RECVR; ircvr++) {
+
+    /* compute the iterate unew = uu + pp */
+    N_VLinearSum(ONE, uu, ONE, pp, unew);
+
+    /* evaluate func(unew) and its norm, and return */
+    retval = func(unew, fval, user_data); nfe++;
+
+    /* if func was successful, accept pp */
+    if (retval == 0) {fOK = TRUE; break;}
+
+    /* if func failed unrecoverably, give up */
+    else if (retval < 0) return(KIN_SYSFUNC_FAIL);
+
+    /* func failed recoverably; cut step in half and try again */
+    ratio *= HALF;
+    N_VScale(HALF, pp, pp);
+    pnorm *= HALF;
+    stepl = pnorm;
+  }
+
+  /* If func() failed recoverably MAX_RECVR times, give up */
+
+  if (!fOK) return(KIN_REPTD_SYSFUNC_ERR);
+
+  /* Evaluate function norms */
+
+  *fnormp = N_VWL2Norm(fval,fscale);
+  *f1normp = HALF * (*fnormp) * (*fnormp);
+
+  /* scale sFdotJp and sJpnorm by ratio for later use in KINForcingTerm */
+
+  sFdotJp *= ratio;
+  sJpnorm *= ratio;
+ 
+  if (printfl > 1) 
+    KINPrintInfo(kin_mem, PRNT_FNORM, "KINSOL", "KINFullNewton", INFO_FNORM, *fnormp);
+
+  if (pnorm > (POINT99 * mxnewtstep)) *maxStepTaken = TRUE; 
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * KINLineSearch
+ *
+ * The routine KINLineSearch implements the LineSearch algorithm.
+ * Its purpose is to find unew = uu + rl * pp in the direction pp
+ * from uu so that:
+ *                                    t
+ *  func(unew) <= func(uu) + alpha * g  (unew - uu) (alpha = 1.e-4)
+ *
+ *    and
+ *                                   t
+ *  func(unew) >= func(uu) + beta * g  (unew - uu) (beta = 0.9)
+ *
+ * where 0 < rlmin <= rl <= rlmax.
+ *
+ * Note:
+ *             mxnewtstep
+ *  rlmax = ----------------   if uu+pp is feasible
+ *          ||uscale*pp||_L2
+ *
+ *  rlmax = 1   otherwise
+ *
+ *    and
+ *
+ *                 scsteptol
+ *  rlmin = --------------------------
+ *          ||           pp         ||
+ *          || -------------------- ||_L-infinity
+ *          || (1/uscale + SUNRabs(uu)) ||
+ *
+ *
+ * If the system function fails unrecoverably at any time, KINLineSearch 
+ * returns KIN_SYSFUNC_FAIL which will halt the solver.
+ *
+ * We attempt to corect recoverable system function failures only before 
+ * the alpha-condition loop; i.e. when the solution is updated with the 
+ * full Newton step (possibly reduced due to constraint violations). 
+ * Once we find a feasible pp, we assume that any update up to pp is
+ * feasible.
+ * 
+ * If the step size is limited due to constraint violations and/or 
+ * recoverable system function failures, we set rlmax=1 to ensure
+ * that the update remains feasible during the attempts to enforce 
+ * the beta-condition (this is not an issue while enforcing the alpha
+ * condition, as rl can only decrease from 1 at that stage)
+ */
+
+static int KINLineSearch(KINMem kin_mem, realtype *fnormp, realtype *f1normp,
+                         booleantype *maxStepTaken)
+{
+  realtype pnorm, ratio, slpi, rlmin, rlength, rl, rlmax, rldiff;
+  realtype rltmp, rlprev, pt1trl, f1nprv, rllo, rlinc, alpha, beta;
+  realtype alpha_cond, beta_cond, rl_a, tmp1, rl_b, tmp2, disc;
+  int ircvr, nbktrk_l, retval;
+  booleantype firstBacktrack, fOK;
+
+  /* Initializations */
+
+  nbktrk_l = 0;          /* local backtracking counter */
+  ratio    = ONE;        /* step change ratio          */
+  alpha    = POINT0001;
+  beta     = POINT9;
+
+  firstBacktrack = TRUE;
+  *maxStepTaken = FALSE;
+
+  rlprev = f1nprv = ZERO;
+
+  /* Compute length of Newton step */
+
+  pnorm = N_VWL2Norm(pp, uscale);
+  rlmax = mxnewtstep / pnorm;
+  stepl = pnorm;
+
+  /* If the full Newton step is too large, set it to the maximum allowable value */
+
+  if(pnorm > mxnewtstep ) {
+    ratio = mxnewtstep / pnorm;
+    N_VScale(ratio, pp, pp);
+    pnorm = mxnewtstep;
+    rlmax = ONE;
+    stepl = pnorm;
+  }
+
+  /* If constraint checking is activated, check and correct violations */
+
+  stepmul = ONE;
+
+  if(constraintsSet){
+    retval = KINConstraint(kin_mem);
+    if(retval == CONSTR_VIOLATED){
+      /* Apply stepmul set in KINConstraint */
+      N_VScale(stepmul, pp, pp);
+      ratio *= stepmul;
+      pnorm *= stepmul;
+      rlmax = ONE;
+      stepl = pnorm;
+      if (printfl > 0) KINPrintInfo(kin_mem, PRNT_PNORM1, "KINSOL", "KINLineSearch", INFO_PNORM1, pnorm);
+      if (pnorm <= scsteptol) {
+        N_VLinearSum(ONE, uu, ONE, pp, unew);
+        return(STEP_TOO_SMALL);}
+    }
+  }
+
+  /* Attempt (at most MAX_RECVR times) to evaluate function at the new iterate */
+  
+  fOK = FALSE;
+
+  for (ircvr = 1; ircvr <= MAX_RECVR; ircvr++) {
+
+    /* compute the iterate unew = uu + pp */
+    N_VLinearSum(ONE, uu, ONE, pp, unew);
+
+    /* evaluate func(unew) and its norm, and return */
+    retval = func(unew, fval, user_data); nfe++;
+
+    /* if func was successful, accept pp */
+    if (retval == 0) {fOK = TRUE; break;}
+
+    /* if func failed unrecoverably, give up */
+    else if (retval < 0) return(KIN_SYSFUNC_FAIL);
+
+    /* func failed recoverably; cut step in half and try again */
+    N_VScale(HALF, pp, pp);
+    ratio *= HALF;
+    pnorm *= HALF;
+    rlmax = ONE;
+    stepl = pnorm;
+
+  }
+
+  /* If func() failed recoverably MAX_RECVR times, give up */
+
+  if (!fOK) return(KIN_REPTD_SYSFUNC_ERR);
+
+  /* Evaluate function norms */
+
+  *fnormp = N_VWL2Norm(fval, fscale);
+  *f1normp = HALF * (*fnormp) * (*fnormp) ;
+
+  /* Estimate the line search value rl (lambda) to satisfy both ALPHA and BETA conditions */
+
+  slpi = sFdotJp * ratio;
+  rlength = KINScSNorm(kin_mem, pp, uu);
+  rlmin = scsteptol / rlength;
+  rl = ONE;
+
+  if (printfl > 2)
+    KINPrintInfo(kin_mem, PRNT_LAM, "KINSOL", "KINLineSearch", INFO_LAM, rlmin, f1norm, pnorm);
+
+  /* Loop until the ALPHA condition is satisfied. Terminate if rl becomes too small */
+
+  loop {
+    
+    /* Evaluate test quantity */
+
+    alpha_cond = f1norm + (alpha * slpi * rl);
+
+    if (printfl > 2)
+      KINPrintInfo(kin_mem, PRNT_ALPHA, "KINSOL", "KINLinesearch", 
+                   INFO_ALPHA, *fnormp, *f1normp, alpha_cond, rl);
+
+    /* If ALPHA condition is satisfied, break out from loop */
+
+    if ((*f1normp) <= alpha_cond) break;
+
+    /* Backtracking. Use quadratic fit the first time and cubic fit afterwards. */
+
+    if (firstBacktrack) {
+
+      rltmp = -slpi / (TWO * ((*f1normp) - f1norm - slpi));
+      firstBacktrack = FALSE;
+
+    } else {
+
+      tmp1 = (*f1normp) - f1norm - (rl * slpi);
+      tmp2 = f1nprv - f1norm - (rlprev * slpi);
+      rl_a = ((ONE / (rl * rl)) * tmp1) - ((ONE / (rlprev * rlprev)) * tmp2);
+      rl_b = ((-rlprev / (rl * rl)) * tmp1) + ((rl / (rlprev * rlprev)) * tmp2);
+      tmp1 = ONE / (rl - rlprev);
+      rl_a *= tmp1;
+      rl_b *= tmp1;
+      disc = (rl_b * rl_b) - (THREE * rl_a * slpi);
+
+      if (SUNRabs(rl_a) < uround) {        /* cubic is actually just a quadratic (rl_a ~ 0) */
+        rltmp = -slpi / (TWO * rl_b);
+      } else {                         /* real cubic */
+        rltmp = (-rl_b + SUNRsqrt(disc)) / (THREE * rl_a);
+      }
+    }
+      if (rltmp > (HALF * rl)) rltmp = HALF * rl;
+
+    /* Set new rl (do not allow a reduction by a factor larger than 10) */
+
+    rlprev = rl;
+    f1nprv = (*f1normp);
+    pt1trl = POINT1 * rl;
+    rl = SUNMAX(pt1trl, rltmp);
+    nbktrk_l++;
+
+    /* Update unew and re-evaluate function */
+
+    N_VLinearSum(ONE, uu, rl, pp, unew);
+
+    retval = func(unew, fval, user_data); nfe++;
+    if (retval != 0) return(KIN_SYSFUNC_FAIL);
+
+    *fnormp = N_VWL2Norm(fval, fscale);
+    *f1normp = HALF * (*fnormp) * (*fnormp) ;
+
+    /* Check if rl (lambda) is too small */
+
+    if (rl < rlmin) {
+      /* unew sufficiently distinct from uu cannot be found.
+         copy uu into unew (step remains unchanged) and 
+         return STEP_TOO_SMALL */
+      N_VScale(ONE, uu, unew);
+      return(STEP_TOO_SMALL);
+    }
+
+  } /* end ALPHA condition loop */
+
+
+  /* ALPHA condition is satisfied. Now check the BETA condition */
+
+  beta_cond = f1norm + (beta * slpi * rl);
+
+  if ((*f1normp) < beta_cond) {
+
+    /* BETA condition not satisfied */
+
+    if ((rl == ONE) && (pnorm < mxnewtstep)) {
+
+      do {
+
+        rlprev = rl;
+        f1nprv = *f1normp;
+        rl = SUNMIN((TWO * rl), rlmax);
+        nbktrk_l++;
+
+        N_VLinearSum(ONE, uu, rl, pp, unew);
+        retval = func(unew, fval, user_data); nfe++;
+        if (retval != 0) return(KIN_SYSFUNC_FAIL);
+        *fnormp = N_VWL2Norm(fval, fscale);
+        *f1normp = HALF * (*fnormp) * (*fnormp);
+
+        alpha_cond = f1norm + (alpha * slpi * rl);
+        beta_cond = f1norm + (beta * slpi * rl);
+
+        if (printfl > 2)
+          KINPrintInfo(kin_mem, PRNT_BETA, "KINSOL", "KINLineSearch", 
+                       INFO_BETA, *f1normp, beta_cond, rl);
+
+      } while (((*f1normp) <= alpha_cond) && 
+	       ((*f1normp) < beta_cond) && (rl < rlmax));
+
+    } /* end if (rl == ONE) block */
+
+    if ((rl < ONE) || ((rl > ONE) && (*f1normp > alpha_cond))) {
+
+      rllo = SUNMIN(rl, rlprev);
+      rldiff = SUNRabs(rlprev - rl);
+
+      do {
+
+        rlinc = HALF * rldiff;
+        rl = rllo + rlinc;
+        nbktrk_l++;
+
+        N_VLinearSum(ONE, uu, rl, pp, unew);
+        retval = func(unew, fval, user_data); nfe++;
+        if (retval != 0) return(KIN_SYSFUNC_FAIL);
+        *fnormp = N_VWL2Norm(fval, fscale);
+        *f1normp = HALF * (*fnormp) * (*fnormp);
+
+        alpha_cond = f1norm + (alpha * slpi * rl);
+        beta_cond = f1norm + (beta * slpi * rl);
+
+        if (printfl > 2)
+          KINPrintInfo(kin_mem, PRNT_ALPHABETA, "KINSOL", "KINLineSearch", 
+                       INFO_ALPHABETA, *f1normp, alpha_cond, beta_cond, rl);
+
+        if ((*f1normp) > alpha_cond) rldiff = rlinc;
+        else if (*f1normp < beta_cond) {
+          rllo = rl;
+          rldiff = rldiff - rlinc;
+        }
+
+      } while ((*f1normp > alpha_cond) ||
+	       ((*f1normp < beta_cond) && (rldiff >= rlmin)));
+
+      if ( (*f1normp < beta_cond) || ((rldiff < rlmin) && (*f1normp > alpha_cond)) ) {
+
+	/* beta condition could not be satisfied or rldiff too small 
+	   and alpha_cond not satisfied, so set unew to last u value
+	   that satisfied the alpha condition and continue */
+
+        N_VLinearSum(ONE, uu, rllo, pp, unew);
+        retval = func(unew, fval, user_data); nfe++;
+        if (retval != 0) return(KIN_SYSFUNC_FAIL);
+        *fnormp = N_VWL2Norm(fval, fscale);
+        *f1normp = HALF * (*fnormp) * (*fnormp);   
+
+	/* increment beta-condition failures counter */
+
+        nbcf++;
+
+      }
+
+    }  /* end of if (rl < ONE) block */
+
+  }  /* end of if (f1normp < beta_cond) block */
+
+  /* Update number of backtracking operations */
+
+  nbktrk += nbktrk_l;
+
+  if (printfl > 1)
+    KINPrintInfo(kin_mem, PRNT_ADJ, "KINSOL", "KINLineSearch", INFO_ADJ, nbktrk_l);
+
+  /* scale sFdotJp and sJpnorm by rl * ratio for later use in KINForcingTerm */
+
+  sFdotJp = sFdotJp * rl * ratio;
+  sJpnorm = sJpnorm * rl * ratio;
+
+  if ((rl * pnorm) > (POINT99 * mxnewtstep)) *maxStepTaken = TRUE;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * Function : KINConstraint
+ *
+ * This routine checks if the proposed solution vector uu + pp
+ * violates any constraints. If a constraint is violated, then the
+ * scalar stepmul is determined such that uu + stepmul * pp does
+ * not violate any constraints.
+ *
+ * Note: This routine is called by the functions
+ *       KINLineSearch and KINFullNewton.
+ */
+
+static int KINConstraint(KINMem kin_mem)
+{
+  N_VLinearSum(ONE, uu, ONE, pp, vtemp1);
+
+  /* if vtemp1[i] violates constraint[i] then vtemp2[i] = 1
+     else vtemp2[i] = 0 (vtemp2 is the mask vector) */
+
+  if(N_VConstrMask(constraints, vtemp1, vtemp2)) return(KIN_SUCCESS);
+
+  /* vtemp1[i] = SUNRabs(pp[i]) */
+
+  N_VAbs(pp, vtemp1);
+
+  /* consider vtemp1[i] only if vtemp2[i] = 1 (constraint violated) */
+
+  N_VProd(vtemp2, vtemp1, vtemp1);
+
+  N_VAbs(uu, vtemp2);
+  stepmul = POINT9 * N_VMinQuotient(vtemp2, vtemp1);
+
+  return(CONSTR_VIOLATED);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Stopping tests
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * KINStop
+ *
+ * This routine checks the current iterate unew to see if the
+ * system func(unew) = 0 is satisfied by a variety of tests.
+ *
+ * strategy is one of KIN_NONE or KIN_LINESEARCH
+ * sflag    is one of KIN_SUCCESS, STEP_TOO_SMALL
+ */
+
+static int KINStop(KINMem kin_mem, booleantype maxStepTaken, int sflag)
+{
+  realtype fmax, rlength, omexp;
+  N_Vector delta;
+
+  /* Check for too small a step */
+
+  if (sflag == STEP_TOO_SMALL) {
+
+    if (setupNonNull && !jacCurrent) {
+      /* If the Jacobian is out of date, update it and retry */
+      sthrsh = TWO;
+      return(RETRY_ITERATION);
+    } else {
+      /* Give up */
+      if (strategy == KIN_NONE)  return(KIN_STEP_LT_STPTOL);
+      else                       return(KIN_LINESEARCH_NONCONV);
+    }
+
+  }
+
+  /* Check tolerance on scaled function norm at the current iterate */
+
+  fmax = KINScFNorm(kin_mem, fval, fscale);
+
+  if (printfl > 1) 
+    KINPrintInfo(kin_mem, PRNT_FMAX, "KINSOL", "KINStop", INFO_FMAX, fmax);
+
+  if (fmax <= fnormtol) return(KIN_SUCCESS);
+
+  /* Check if the scaled distance between the last two steps is too small */
+  /* NOTE: pp used as work space to store this distance */
+
+  delta = pp;
+  N_VLinearSum(ONE, unew, -ONE, uu, delta);
+  rlength = KINScSNorm(kin_mem, delta, unew);
+
+  if (rlength <= scsteptol) {
+
+    if (setupNonNull && !jacCurrent) {
+      /* If the Jacobian is out of date, update it and retry */
+      sthrsh = TWO;
+      return(CONTINUE_ITERATIONS);
+    } else {
+      /* give up */
+      return(KIN_STEP_LT_STPTOL);
+    }
+
+  }
+
+  /* Check if the maximum number of iterations is reached */
+
+  if (nni >= mxiter) return(KIN_MAXITER_REACHED);
+
+  /* Check for consecutive number of steps taken of size mxnewtstep
+     and if not maxStepTaken, then set ncscmx to 0 */
+ 
+  if (maxStepTaken) ncscmx++;
+  else              ncscmx = 0;
+ 
+  if (ncscmx == 5) return(KIN_MXNEWT_5X_EXCEEDED);
+
+  /* Proceed according to the type of linear solver used */
+
+  if (inexact_ls) {
+
+    /* We're doing inexact Newton.
+       Load threshold for reevaluating the Jacobian. */
+
+    sthrsh = rlength;
+
+  } else if (!noResMon) {
+
+    /* We're doing modified Newton and the user did not disable residual monitoring.
+       Check if it is time to monitor residual. */
+
+    if ((nni - nnilset_sub) >= msbset_sub) {
+
+      /* Residual monitoring needed */
+
+      nnilset_sub = nni;
+
+      /* If indicated, estimate new OMEGA value */
+      if (eval_omega) {
+        omexp = SUNMAX(ZERO,(fnorm/fnormtol)-ONE);
+        omega = (omexp > TWELVE)? omega_max : SUNMIN(omega_min*SUNRexp(omexp), omega_max);
+      }   
+      /* Check if making satisfactory progress */
+
+      if (fnorm > omega*fnorm_sub) {
+        /* Insufficient progress */
+	if (setupNonNull && !jacCurrent) {
+          /* If the Jacobian is out of date, update it and retry */
+	  sthrsh = TWO;
+          return(CONTINUE_ITERATIONS);
+	} else {
+          /* Otherwise, we cannot do anything, so just return. */
+        }
+      } else {
+        /* Sufficient progress */
+	fnorm_sub = fnorm;
+	sthrsh = ONE;
+      }
+
+    } else {
+
+      /* Residual monitoring not needed */
+
+      /* Reset sthrsh */
+      if (retry_nni || update_fnorm_sub) fnorm_sub = fnorm;
+      if (update_fnorm_sub) update_fnorm_sub = FALSE;
+      sthrsh = ONE;
+
+    }
+
+  }
+
+  /* if made it to here, then the iteration process is not finished
+     so return CONTINUE_ITERATIONS flag */
+
+  return(CONTINUE_ITERATIONS);
+}
+
+/*
+ * KINForcingTerm
+ *
+ * This routine computes eta, the scaling factor in the linear
+ * convergence stopping tolerance eps when choice #1 or choice #2
+ * forcing terms are used. Eta is computed here for all but the
+ * first iterative step, which is set to the default in routine
+ * KINSolInit.
+ *
+ * This routine was written by Homer Walker of Utah State
+ * University with subsequent modifications by Allan Taylor @ LLNL.
+ *
+ * It is based on the concepts of the paper 'Choosing the forcing
+ * terms in an inexact Newton method', SIAM J Sci Comput, 17
+ * (1996), pp 16 - 32, or Utah State University Research Report
+ * 6/94/75 of the same title.
+ */
+
+static void KINForcingTerm(KINMem kin_mem, realtype fnormp)
+{
+  realtype eta_max, eta_min, eta_safe, linmodel_norm;
+
+  eta_max  = POINT9;
+  eta_min  = POINT0001;
+  eta_safe = HALF;
+
+  /* choice #1 forcing term */
+
+  if (etaflag == KIN_ETACHOICE1) {
+
+    /* compute the norm of f + Jp , scaled L2 norm */
+
+    linmodel_norm = SUNRsqrt((fnorm * fnorm) + (TWO * sFdotJp) + (sJpnorm * sJpnorm));
+
+    /* form the safeguarded for choice #1 */ 
+
+    eta_safe = SUNRpowerR(eta, ealpha); 
+    eta = SUNRabs(fnormp - linmodel_norm) / fnorm;
+  }
+
+  /* choice #2 forcing term */
+
+  if (etaflag == KIN_ETACHOICE2) {
+    eta_safe = egamma * SUNRpowerR(eta, ealpha); 
+    eta = egamma * SUNRpowerR((fnormp / fnorm), ealpha); 
+  }
+
+  /* apply safeguards */
+ 
+  if(eta_safe < POINT1) eta_safe = ZERO;
+  eta = SUNMAX(eta, eta_safe);
+  eta = SUNMAX(eta, eta_min);
+  eta = SUNMIN(eta, eta_max);
+
+  return; 
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * Norm functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * Function : KINScFNorm
+ *
+ * This routine computes the max norm for scaled vectors. The
+ * scaling vector is scale, and the vector of which the norm is to
+ * be determined is vv. The returned value, fnormval, is the
+ * resulting scaled vector norm. This routine uses N_Vector
+ * functions from the vector module.
+ */
+
+static realtype KINScFNorm(KINMem kin_mem, N_Vector v, N_Vector scale)
+{
+  N_VProd(scale, v, vtemp1);
+  return(N_VMaxNorm(vtemp1));
+}
+
+/*
+ * Function : KINScSNorm
+ *
+ * This routine computes the max norm of the scaled steplength, ss.
+ * Here ucur is the current step and usc is the u scale factor.
+ */
+
+static realtype KINScSNorm(KINMem kin_mem, N_Vector v, N_Vector u)
+{
+  realtype length;
+
+  N_VInv(uscale, vtemp1);
+  N_VAbs(u, vtemp2);
+  N_VLinearSum(ONE, vtemp1, ONE, vtemp2, vtemp1);
+  N_VDiv(v, vtemp1, vtemp1);
+
+  length = N_VMaxNorm(vtemp1);
+
+  return(length);
+}
+
+/* 
+ * =================================================================
+ * KINSOL Verbose output functions
+ * =================================================================
+ */
+
+/* 
+ * KINPrintInfo
+ *
+ * KINPrintInfo is a high level error handling function
+ * Based on the value info_code, it composes the info message and
+ * passes it to the info handler function.
+ */
+
+#define ihfun    (kin_mem->kin_ihfun)
+#define ih_data  (kin_mem->kin_ih_data)
+
+void KINPrintInfo(KINMem kin_mem, 
+                  int info_code, const char *module, const char *fname, 
+                  const char *msgfmt, ...)
+{
+  va_list ap;
+  char msg[256], msg1[40];
+  char retstr[30];
+  int ret;
+
+  /* Initialize argument processing 
+   (msgfrmt is the last required argument) */
+
+  va_start(ap, msgfmt); 
+
+  if (info_code == PRNT_RETVAL) {
+
+    /* If info_code = PRNT_RETVAL, decode the numeric value */
+
+    ret = va_arg(ap, int);
+
+    switch(ret) {
+    case KIN_SUCCESS:
+      sprintf(retstr, "KIN_SUCCESS");
+      break;
+    case KIN_SYSFUNC_FAIL:
+      sprintf(retstr, "KIN_SYSFUNC_FAIL");
+      break;
+    case KIN_STEP_LT_STPTOL:
+      sprintf(retstr, "KIN_STEP_LT_STPTOL");
+      break;
+    case KIN_LINESEARCH_NONCONV:
+      sprintf(retstr, "KIN_LINESEARCH_NONCONV");
+      break;
+    case KIN_LINESEARCH_BCFAIL:
+      sprintf(retstr, "KIN_LINESEARCH_BCFAIL");
+      break;
+    case KIN_MAXITER_REACHED:
+      sprintf(retstr, "KIN_MAXITER_REACHED");
+      break;
+    case KIN_MXNEWT_5X_EXCEEDED:
+      sprintf(retstr, "KIN_MXNEWT_5X_EXCEEDED");
+      break;
+    case KIN_LINSOLV_NO_RECOVERY:
+      sprintf(retstr, "KIN_LINSOLV_NO_RECOVERY");
+      break;
+    case KIN_LSETUP_FAIL:
+      sprintf(retstr, "KIN_PRECONDSET_FAILURE");
+      break;
+    case KIN_LSOLVE_FAIL:
+      sprintf(retstr, "KIN_PRECONDSOLVE_FAILURE");
+      break;
+    }
+
+    /* Compose the message */
+
+    sprintf(msg1, msgfmt, ret);
+    sprintf(msg,"%s (%s)",msg1,retstr);
+
+
+  } else {
+  
+    /* Compose the message */
+
+    vsprintf(msg, msgfmt, ap);
+
+  }
+
+  /* call the info message handler */
+
+  ihfun(module, fname, msg, ih_data);
+
+  /* finalize argument processing */
+
+  va_end(ap);
+
+  return;
+}
+
+
+/*
+ * KINInfoHandler 
+ *
+ * This is the default KINSOL info handling function.
+ * It sends the info message to the stream pointed to by kin_infofp 
+ */
+
+#define infofp (kin_mem->kin_infofp)
+
+void KINInfoHandler(const char *module, const char *function, 
+                    char *msg, void *data)
+{
+  KINMem kin_mem;
+
+  /* data points to kin_mem here */
+
+  kin_mem = (KINMem) data;
+  
+#ifndef NO_FPRINTF_OUTPUT
+  if (infofp != NULL) {
+    fprintf(infofp,"\n[%s] %s\n",module, function);
+    fprintf(infofp,"   %s\n",msg);
+  }
+#endif  
+
+}
+
+/* 
+ * =================================================================
+ * KINSOL Error Handling functions
+ * =================================================================
+ */
+
+/*
+ * KINProcessError 
+ *
+ * KINProcessError is a high level error handling function.
+ * - If cv_mem==NULL it prints the error message to stderr.
+ * - Otherwise, it sets up and calls the error handling function 
+ *   pointed to by cv_ehfun.
+ */
+
+#define ehfun    (kin_mem->kin_ehfun)
+#define eh_data  (kin_mem->kin_eh_data)
+
+void KINProcessError(KINMem kin_mem, 
+                    int error_code, const char *module, const char *fname, 
+                    const char *msgfmt, ...)
+{
+  va_list ap;
+  char msg[256];
+
+  /* Initialize the argument pointer variable 
+     (msgfmt is the last required argument to KINProcessError) */
+
+  va_start(ap, msgfmt);
+
+  /* Compose the message */
+
+  vsprintf(msg, msgfmt, ap);
+
+  if (kin_mem == NULL) {    /* We write to stderr */
+#ifndef NO_FPRINTF_OUTPUT
+    fprintf(stderr, "\n[%s ERROR]  %s\n  ", module, fname);
+    fprintf(stderr, "%s\n\n", msg);
+#endif
+
+  } else {                 /* We can call ehfun */
+    ehfun(error_code, module, fname, msg, eh_data);
+  }
+
+  /* Finalize argument processing */
+  va_end(ap);
+
+  return;
+}
+
+/* 
+ * KINErrHandler 
+ *
+ * This is the default error handling function.
+ * It sends the error message to the stream pointed to by kin_errfp 
+ */
+
+#define errfp    (kin_mem->kin_errfp)
+
+void KINErrHandler(int error_code, const char *module,
+                   const char *function, char *msg, void *data)
+{
+  KINMem kin_mem;
+  char err_type[10];
+
+  /* data points to kin_mem here */
+
+  kin_mem = (KINMem) data;
+
+  if (error_code == KIN_WARNING)
+    sprintf(err_type,"WARNING");
+  else
+    sprintf(err_type,"ERROR");
+
+#ifndef NO_FPRINTF_OUTPUT
+  if (errfp != NULL) {
+    fprintf(errfp,"\n[%s %s]  %s\n",module,err_type,function);
+    fprintf(errfp,"  %s\n\n",msg);
+  }
+#endif
+
+  return;
+}
+
+
+/*
+ * =======================================================================
+ * Picard and fixed point solvers
+ * =======================================================================
+ */
+
+/*
+ * KINPicardAA
+ *
+ * This routine is the main driver for the Picard iteration with 
+ * acclerated fixed point. 
+ */
+
+static int KINPicardAA(KINMem kin_mem, long int *iterp, realtype *R, 
+                       realtype *gamma, realtype *fmaxptr)
+{
+  int retval, ret; 
+  long int iter;
+  realtype fmax, epsmin, fnormp;
+  N_Vector delta, gval;
+  
+  delta = kin_mem->kin_vtemp1;
+  gval = kin_mem->kin_gval;
+  ret = CONTINUE_ITERATIONS;
+  fmax = fnormtol + ONE;
+  iter = 0;
+  epsmin = ZERO;
+  fnormp = -ONE;
+
+  N_VConst(ZERO, gval);
+
+  /* if eps is to be bounded from below, set the bound */
+  if (inexact_ls && !noMinEps) epsmin = POINT01 * fnormtol;
+
+  while (ret == CONTINUE_ITERATIONS) {
+
+    iter++;
+
+    /* Update the forcing term for the inexact linear solves */
+    if (inexact_ls) {
+      eps = (eta + uround) * fnorm;
+      if(!noMinEps) eps = SUNMAX(epsmin, eps);
+    }
+
+    /* evaluate g = uu - L^{-1}func(uu) and return if failed.  
+       For Picard, assume that the fval vector has been filled 
+       with an eval of the nonlinear residual prior to this call. */
+    retval = KINPicardFcnEval(kin_mem, gval, uu, fval);
+
+    if (retval < 0) {
+      ret = KIN_SYSFUNC_FAIL;
+      break;
+    }
+
+    if (maa == 0) { 
+      N_VScale(ONE, gval, unew);
+    }
+    else {  /* use Anderson, if desired */
+      N_VScale(ONE, uu, unew);
+      AndersonAcc(kin_mem, gval, delta, unew, uu, (int)(iter-1), R, gamma);
+    }
+
+    /* Fill the Newton residual based on the new solution iterate */
+    retval = func(unew, fval, user_data); nfe++;
+    
+    if (retval < 0) {
+      ret = KIN_SYSFUNC_FAIL;
+      break;
+    }
+
+    /* Evaluate function norms */
+    fnormp = N_VWL2Norm(fval,fscale);
+    fmax = KINScFNorm(kin_mem, fval, fscale); /* measure  || F(x) ||_max */
+    fnorm = fmax;
+    *fmaxptr = fmax;
+    
+    if (printfl > 1) 
+      KINPrintInfo(kin_mem, PRNT_FMAX, "KINSOL", "KINPicardAA", INFO_FMAX, fmax);
+
+    /* print the current iter, fnorm, and nfe values if printfl > 0 */
+    if (printfl>0)
+      KINPrintInfo(kin_mem, PRNT_NNI, "KINSOL", "KINPicardAA", INFO_NNI, iter, nfe, fnorm);
+
+    /* Check if the maximum number of iterations is reached */
+    if (iter >= mxiter) {
+      ret = KIN_MAXITER_REACHED;
+    }
+    if (fmax <= fnormtol) { 
+      ret = KIN_SUCCESS;
+    }
+
+    /* Update with new iterate. */
+    N_VScale(ONE, unew, uu);
+
+    if (ret == CONTINUE_ITERATIONS) { 
+      /* evaluate eta by calling the forcing term routine */
+      if (callForcingTerm) KINForcingTerm(kin_mem, fnormp);
+    }
+
+    fflush(errfp);
+    
+  }  /* end of loop; return */
+
+  *iterp = iter;
+
+  if (printfl > 0)
+    KINPrintInfo(kin_mem, PRNT_RETVAL, "KINSOL", "KINPicardAA", INFO_RETVAL, ret);
+
+  return(ret); 
+}
+
+/*
+ * KINPicardFcnEval
+ *
+ * This routine evaluates the Picard fixed point function
+ * using the linear solver, gval = u - L^{-1}F(u).
+ * The function assumes the user has defined L either through
+ * a user-supplied matvec if using a SPILS solver or through
+ * a supplied matrix if using a dense solver.  This assumption is
+ * tested by a check on the strategy and the requisite functionality
+ * within the linear solve routines.
+ *
+ * This routine fills gval = uu - L^{-1}F(uu) given uu and fval = F(uu).
+ */ 
+
+static int KINPicardFcnEval(KINMem kin_mem, N_Vector gval, N_Vector uval, N_Vector fval1)
+{
+  int retval;
+
+  if ((nni - nnilset) >= msbset) {
+    sthrsh = TWO;
+    update_fnorm_sub = TRUE;
+  }
+
+  loop{
+
+    jacCurrent = FALSE;
+
+    if ((sthrsh > ONEPT5) && setupNonNull) {
+      retval = lsetup(kin_mem);
+      jacCurrent = TRUE;
+      nnilset = nni;
+      nnilset_sub = nni;
+      if (retval != 0) return(KIN_LSETUP_FAIL);
+    }
+
+    /* call the generic 'lsolve' routine to solve the system Lx = -fval
+       Note that we are using gval to hold x. */
+    N_VScale(-ONE, fval1, fval1);
+    retval = lsolve(kin_mem, gval, fval1, &sJpnorm, &sFdotJp);
+
+    if (retval == 0) {
+      /* Update gval = uval + gval since gval = -L^{-1}F(uu)  */
+      N_VLinearSum(ONE, uval, ONE, gval, gval);
+      return(KIN_SUCCESS);
+    }
+    else if (retval < 0)                      return(KIN_LSOLVE_FAIL);
+    else if ((!setupNonNull) || (jacCurrent)) return(KIN_LINSOLV_NO_RECOVERY);
+
+    /* loop back only if the linear solver setup is in use
+       and matrix information is not current */
+
+    sthrsh = TWO;
+  }
+
+}
+
+
+/*
+ * KINFP
+ *
+ * This routine is the main driver for the fixed point iteration with
+ * Anderson Acceleration.
+ */
+
+static int KINFP(KINMem kin_mem, long int *iterp, 
+		 realtype *R, realtype *gamma, 
+		 realtype *fmaxptr)
+{
+  int retval, ret; 
+  long int iter;
+  realtype fmax;
+  N_Vector delta;
+  
+  delta = kin_mem->kin_vtemp1;
+  ret = CONTINUE_ITERATIONS;
+  fmax = fnormtol + ONE;
+  iter = 0;
+
+  while (ret == CONTINUE_ITERATIONS) {
+
+    iter++;
+
+    /* evaluate func(uu) and return if failed */
+    retval = func(uu, fval, user_data); nfe++;
+
+    if (retval < 0) {
+      ret = KIN_SYSFUNC_FAIL;
+      break;
+    }
+
+    if (maa == 0) { 
+      N_VScale(ONE, fval, unew);
+    }
+    else {  /* use Anderson, if desired */
+      AndersonAcc(kin_mem, fval, delta, unew, uu, (int)(iter-1), R, gamma);
+    }
+
+    N_VLinearSum(ONE, unew, -ONE, uu, delta);
+    fmax = KINScFNorm(kin_mem, delta, fscale); /* measure  || g(x)-x || */
+    
+    if (printfl > 1) 
+      KINPrintInfo(kin_mem, PRNT_FMAX, "KINSOL", "KINFP", INFO_FMAX, fmax);
+    
+    fnorm = fmax;
+    *fmaxptr = fmax;
+
+    /* print the current iter, fnorm, and nfe values if printfl > 0 */
+    if (printfl>0)
+      KINPrintInfo(kin_mem, PRNT_NNI, "KINSOL", "KINFP", INFO_NNI, iter, nfe, fnorm);
+
+    /* Check if the maximum number of iterations is reached */
+    if (iter >= mxiter) {
+      ret = KIN_MAXITER_REACHED;
+    }
+    if (fmax <= fnormtol) { 
+      ret = KIN_SUCCESS;
+    }
+    
+    if (ret == CONTINUE_ITERATIONS) { 
+      /* Only update solution if taking a next iteration.  */
+      /* CSW  Should put in a conditional to send back the newest iterate or
+	 the one consistent with the fval */
+      N_VScale(ONE, unew, uu);
+    }
+
+    fflush(errfp);
+    
+  }  /* end of loop; return */
+
+  *iterp = iter;
+
+  if (printfl > 0)
+    KINPrintInfo(kin_mem, PRNT_RETVAL, "KINSOL", "KINFP", INFO_RETVAL, ret);
+
+  return(ret); 
+} 
+
+
+ /* -----------------------------------------------------------------
+ * Stopping tests
+ * -----------------------------------------------------------------
+ */
+
+
+/*
+ * ========================================================================
+ * Anderson Acceleration
+ * ========================================================================
+ */
+
+static int AndersonAcc(KINMem kin_mem, N_Vector gval, N_Vector fv, 
+		       N_Vector x, N_Vector xold, 
+		       int iter, realtype *R, realtype *gamma)
+{
+  int i_pt, i, j, lAA;
+  int *ipt_map;
+  realtype alfa;
+  realtype a, b, temp, c, s;
+
+  ipt_map = kin_mem->kin_ipt_map;
+  i_pt = iter-1 - ((iter-1)/maa)*maa;
+  N_VLinearSum(ONE, gval, -1.0, xold, fv);
+  if (iter > 0) {
+    /* compute dg_new = gval -gval_old*/
+    N_VLinearSum(ONE, gval, -1.0, gold, dg[i_pt]);
+    /* compute df_new = fval - fval_old */
+    N_VLinearSum(ONE, fv, -1.0, fold, df[i_pt]);
+  }
+
+  N_VScale(ONE, gval, gold);
+  N_VScale(ONE, fv, fold);
+
+  if (iter == 0) {
+    N_VScale(ONE, gval, x);
+  }
+  else {
+    if (iter == 1) {
+      R[0] = sqrt(N_VDotProd(df[i_pt],df[i_pt]));
+      alfa = 1/R[0];
+      N_VScale(alfa,df[i_pt],Q[i_pt]);
+      ipt_map[0] = 0;
+    }
+    else if (iter <= maa) {
+      N_VScale(ONE,df[i_pt],vtemp2);
+      for (j=0; j < (iter-1); j++) {
+        ipt_map[j] = j;
+        R[(iter-1)*maa+j] = N_VDotProd(Q[j],vtemp2);
+        N_VLinearSum(ONE,vtemp2,-R[(iter-1)*maa+j],Q[j],vtemp2);
+      }
+      R[(iter-1)*maa+iter-1] = sqrt(N_VDotProd(vtemp2,vtemp2));
+      N_VScale((1/R[(iter-1)*maa+iter-1]),vtemp2,Q[i_pt]);
+      ipt_map[iter-1] = iter-1;
+    }
+    else {
+      /* Delete left-most column vector from QR factorization */
+      for (i=0; i < maa-1; i++) {
+        a = R[(i+1)*maa + i];
+        b = R[(i+1)*maa + i+1];
+        temp = sqrt(a*a + b*b);
+        c = a / temp;
+        s = b / temp;
+        R[(i+1)*maa + i] = temp;
+        R[(i+1)*maa + i+1] = 0.0;
+	/* OK to re-use temp */
+        if (i < maa-1) {
+          for (j = i+2; j < maa; j++) {
+            a = R[j*maa + i];
+            b = R[j*maa + i+1];
+            temp = c * a + s * b;
+            R[j*maa + i+1] = -s*a + c*b;
+            R[j*maa + i] = temp;
+	  }
+	}
+        N_VLinearSum(c, Q[i], s, Q[i+1], vtemp2);
+        N_VLinearSum(-s, Q[i], c, Q[i+1], Q[i+1]);
+        N_VScale(ONE, vtemp2, Q[i]);
+      }
+
+      /* Shift R to the left by one. */
+      for (i = 1; i < maa; i++) {
+        for (j = 0; j < maa-1; j++) {
+          R[(i-1)*maa + j] = R[i*maa + j];
+        }
+      }
+
+      /* Add the new df vector */
+      N_VScale(ONE,df[i_pt],vtemp2);
+      for (j=0; j < (maa-1); j++) {
+        R[(maa-1)*maa+j] = N_VDotProd(Q[j],vtemp2);
+        N_VLinearSum(ONE,vtemp2,-R[(maa-1)*maa+j],Q[j],vtemp2);
+      }
+      R[(maa-1)*maa+maa-1] = sqrt(N_VDotProd(vtemp2,vtemp2));
+      N_VScale((1/R[(maa-1)*maa+maa-1]),vtemp2,Q[maa-1]);
+
+      /* Update the iteration map */
+      j = 0;
+      for (i=i_pt+1; i < maa; i++)
+        ipt_map[j++] = i;
+      for (i=0; i < (i_pt+1); i++)
+        ipt_map[j++] = i;
+    }
+
+    /* Solve least squares problem and update solution */
+    lAA = iter;
+    if (maa < iter) lAA = maa;
+    N_VScale(ONE, gval, x);
+    for (i=0; i < lAA; i++)
+      gamma[i] = N_VDotProd(fv,Q[i]);
+    for (i=lAA-1; i > -1; i--) {
+      for (j=i+1; j < lAA; j++) {
+        gamma[i] = gamma[i]-R[j*maa+i]*gamma[j]; 
+      }
+      gamma[i] = gamma[i]/R[i*maa+i];
+      N_VLinearSum(ONE,x,-gamma[i],dg[ipt_map[i]],x);
+    }
+  }
+
+  return 0;
+}
diff --git a/src/kinsol/kinsol_band.c b/src/kinsol/kinsol_band.c
new file mode 100644
index 0000000..79b7109
--- /dev/null
+++ b/src/kinsol/kinsol_band.c
@@ -0,0 +1,357 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the KINBAND linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <kinsol/kinsol_band.h>
+#include "kinsol_direct_impl.h"
+#include "kinsol_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PROTOTYPES FOR PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/* KINBAND linit, lsetup, lsolve, and lfree routines */
+static int kinBandInit(KINMem kin_mem);
+static int kinBandSetup(KINMem kin_mem);
+static int kinBandsolve(KINMem kin_mem, N_Vector x, N_Vector b,
+                        realtype *sJpnorm, realtype *sFdotJp);
+static int kinBandFree(KINMem kin_mem);
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define lrw1           (kin_mem->kin_lrw1)
+#define liw1           (kin_mem->kin_liw1)
+#define func           (kin_mem->kin_func)
+#define printfl        (kin_mem->kin_printfl)
+#define linit          (kin_mem->kin_linit)
+#define lsetup         (kin_mem->kin_lsetup)
+#define lsolve         (kin_mem->kin_lsolve)
+#define lfree          (kin_mem->kin_lfree)
+#define lmem           (kin_mem->kin_lmem)
+#define inexact_ls     (kin_mem->kin_inexact_ls)
+#define uu             (kin_mem->kin_uu)
+#define fval           (kin_mem->kin_fval)
+#define uscale         (kin_mem->kin_uscale)
+#define fscale         (kin_mem->kin_fscale)
+#define sqrt_relfunc   (kin_mem->kin_sqrt_relfunc)
+#define errfp          (kin_mem->kin_errfp)
+#define infofp         (kin_mem->kin_infofp)
+#define setupNonNull   (kin_mem->kin_setupNonNull)
+#define vtemp1         (kin_mem->kin_vtemp1)
+#define vec_tmpl       (kin_mem->kin_vtemp1)
+#define vtemp2         (kin_mem->kin_vtemp2)
+#define strategy       (kin_mem->kin_globalstrategy)
+
+#define mtype          (kindls_mem->d_type)
+#define n              (kindls_mem->d_n)
+#define ml             (kindls_mem->d_ml)
+#define mu             (kindls_mem->d_mu)
+#define smu            (kindls_mem->d_smu)
+#define jacDQ          (kindls_mem->d_jacDQ)
+#define bjac           (kindls_mem->d_bjac)
+#define J              (kindls_mem->d_J)
+#define lpivots        (kindls_mem->d_lpivots)
+#define nje            (kindls_mem->d_nje)
+#define nfeDQ          (kindls_mem->d_nfeDQ)
+#define J_data         (kindls_mem->d_J_data)
+#define last_flag      (kindls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * KINBand
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the band linear solver module.  KINBand first calls
+ * the existing lfree routine if this is not NULL.  It then sets the
+ * cv_linit, cv_lsetup, cv_lsolve, and cv_lfree fields in (*cvode_mem)
+ * to be kinBandInit, kinBandSetup, kinBandsolve, and kinBandFree,
+ * respectively.  It allocates memory for a structure of type
+ * KINDlsMemRec and sets the cv_lmem field in (*cvode_mem) to the
+ * address of this structure.  It sets setupNonNull in (*cvode_mem) to be
+ * TRUE, b_mu to be mupper, b_ml to be mlower, and the bjac field to be 
+ * kinDlsBandDQJac.
+ * Finally, it allocates memory for M, savedJ, and pivot.
+ *
+ * NOTE: The band linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, KINBand will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that the function 
+ *       N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+                  
+int KINBand(void *kinmem, long int N, long int mupper, long int mlower)
+{
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* Return immediately if kinmem is NULL */
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINDLS_MEM_NULL, "KINBAND", "KINBand", MSGD_KINMEM_NULL);
+    return(KINDLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (vec_tmpl->ops->nvgetarraypointer == NULL) {
+    KINProcessError(kin_mem, KINDLS_ILL_INPUT, "KINBAND", "KINBand", MSGD_BAD_NVECTOR);
+    return(KINDLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(kin_mem);
+
+  /* Set four main function fields in kin_mem */  
+  linit  = kinBandInit;
+  lsetup = kinBandSetup;
+  lsolve = kinBandsolve;
+  lfree  = kinBandFree;
+  
+  /* Get memory for KINDlsMemRec */
+  kindls_mem = NULL;
+  kindls_mem = (KINDlsMem) malloc(sizeof(struct KINDlsMemRec));
+  if (kindls_mem == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINBAND", "KINBand", MSGD_MEM_FAIL);
+    return(KINDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_BAND;  
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ  = TRUE;
+  bjac   = NULL;
+  J_data = NULL;
+  last_flag = KINDLS_SUCCESS;
+
+  kinDlsInitializeCounters(kindls_mem);
+
+  setupNonNull = TRUE;
+  
+  /* Load problem dimension */
+  n = N;
+
+  /* Load half-bandwiths in kindls_mem */
+  ml = mlower;
+  mu = mupper;
+
+  /* Test ml and mu for legality */
+  if ((ml < 0) || (mu < 0) || (ml >= N) || (mu >= N)) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINBAND", "KINBand", MSGD_MEM_FAIL);
+    free(kindls_mem); kindls_mem = NULL;
+    return(KINDLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  smu = SUNMIN(N-1, mu + ml);
+
+  /* Allocate memory for J and pivot array */
+  J = NULL;
+  J = NewBandMat(N, mu, ml, smu);
+  if (J == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINBAND", "KINBand", MSGD_MEM_FAIL);
+    free(kindls_mem); kindls_mem = NULL;
+    return(KINDLS_MEM_FAIL);
+  }
+
+  lpivots = NULL;
+  lpivots = NewLintArray(N);
+  if (lpivots == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINBAND", "KINBand", MSGD_MEM_FAIL);
+    DestroyMat(J);
+    free(kindls_mem); kindls_mem = NULL;
+    return(KINDLS_MEM_FAIL);
+  }
+
+  /* This is a direct linear solver */
+  inexact_ls = FALSE;
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = kindls_mem;
+
+  return(KINDLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * kinBandInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the band
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int kinBandInit(KINMem kin_mem)
+{
+  KINDlsMem kindls_mem;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  kinDlsInitializeCounters(kindls_mem);
+
+  if (jacDQ) {
+    bjac = kinDlsBandDQJac;
+    J_data = kin_mem;
+  } else {
+    J_data = kin_mem->kin_user_data;
+  }
+
+  /* Stop Picard solve if user fails to provide Jacobian */
+  if ( (strategy == KIN_PICARD) && jacDQ )
+    {
+      KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "kinBandInit", 
+		      MSG_NOL_FAIL);
+      return(KIN_ILL_INPUT);
+    }
+
+  last_flag = KINDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinBandSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the band linear solver.
+ * It makes a decision whether or not to call the Jacobian evaluation
+ * routine based on various state variables, and if not it uses the 
+ * saved copy.  In any case, it constructs the Newton matrix J,
+ * updates counters, and calls the band LU factorization routine.
+ * -----------------------------------------------------------------
+ */
+
+static int kinBandSetup(KINMem kin_mem)
+{
+  KINDlsMem kindls_mem;
+  int retval;
+  long int ier;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  nje++;
+  SetToZero(J); 
+  retval = bjac(n, mu, ml, uu, fval, J, J_data, vtemp1, vtemp2);
+  if (retval != 0) {
+    last_flag = -1;
+    return(-1);
+  }
+  
+  /* Do LU factorization of J */
+  ier = BandGBTRF(J, lpivots);
+
+  /* Return 0 if the LU was complete; otherwise return -1 */
+  last_flag = ier;
+  if (ier > 0) return(-1);
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinBandsolve
+ * -----------------------------------------------------------------
+ * This routine handles the solve operation for the band linear solver
+ * by calling the band backsolve routine.  The return value is 0.
+ * The argument *sJpnorm is ignored.
+ * -----------------------------------------------------------------
+ */
+
+static int kinBandsolve(KINMem kin_mem, N_Vector x, N_Vector b,
+                        realtype *sJpnorm, realtype *sFdotJp)
+{
+  KINDlsMem kindls_mem;
+  realtype *xd;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  /* Copy the right-hand side into x */
+
+  N_VScale(ONE, b, x);
+  
+  xd = N_VGetArrayPointer(x);
+
+  /* Back-solve and get solution in x */
+
+  BandGBTRS(J, lpivots, xd);
+
+  /* Compute the term sFdotJp for use in the linesearch routine.
+     This term is subsequently corrected if the step is reduced by
+     constraints or the linesearch.
+
+     sFdotJp is the dot product of the scaled f vector and the scaled
+     vector J*p, where the scaling uses fscale.                            */
+
+  N_VProd(b, fscale, b);
+  N_VProd(b, fscale, b);
+  *sFdotJp = N_VDotProd(fval, b);
+
+  last_flag = KINDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinBandFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the band linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int kinBandFree(KINMem kin_mem)
+{
+  KINDlsMem kindls_mem;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  DestroyMat(J);
+  DestroyArray(lpivots);
+  free(kindls_mem); kindls_mem = NULL;
+
+  return(0);
+}
+
diff --git a/src/kinsol/kinsol_bbdpre.c b/src/kinsol/kinsol_bbdpre.c
new file mode 100644
index 0000000..05e880a
--- /dev/null
+++ b/src/kinsol/kinsol_bbdpre.c
@@ -0,0 +1,545 @@
+/*
+ *-----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ *-----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ *-----------------------------------------------------------------
+ * Copyright (c) 2002, The Regents of the University of California.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ *-----------------------------------------------------------------
+ * This file contains implementations of routines for a
+ * band-block-diagonal preconditioner, i.e. a block-diagonal
+ * matrix with banded blocks, for use with KINSol, KINSp*
+ * and the parallel implementation of NVECTOR.
+ *
+ * Note: With only one process, a banded matrix results
+ * rather than a b-b-d matrix with banded blocks. Diagonal
+ * blocking occurs at the process level.
+ *-----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <kinsol/kinsol_sptfqmr.h>
+#include <kinsol/kinsol_spbcgs.h>
+#include <kinsol/kinsol_spgmr.h>
+
+#include "kinsol_impl.h"
+#include "kinsol_spils_impl.h"
+#include "kinsol_bbdpre_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/*
+ *-----------------------------------------------------------------
+ * private constants
+ *-----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/* Prototypes for functions KINBBDPrecSetup and KINBBDPrecSolve */
+
+static int KINBBDPrecSetup(N_Vector uu, N_Vector uscale,
+                           N_Vector fval, N_Vector fscale, 
+                           void *p_data,
+                           N_Vector vtemp1, N_Vector vtemp2);
+
+static int KINBBDPrecSolve(N_Vector uu, N_Vector uscale,
+                           N_Vector fval, N_Vector fscale, 
+                           N_Vector vv, void *p_data,
+                           N_Vector vtemp);
+
+/* Prototype for KINBBDPrecFree */
+
+static int KINBBDPrecFree(KINMem kin_mem);
+
+/* Prototype for difference quotient jacobian calculation routine */
+
+static int KBBDDQJac(KBBDPrecData pdata,
+                     N_Vector uu, N_Vector uscale,
+                     N_Vector gu, N_Vector gtemp, N_Vector utemp);
+
+/*
+ *-----------------------------------------------------------------
+ * redability replacements
+ *-----------------------------------------------------------------
+ */
+
+#define errfp    (kin_mem->kin_errfp)
+#define uround   (kin_mem->kin_uround)
+#define vec_tmpl (kin_mem->kin_vtemp1)
+
+/*
+ *-----------------------------------------------------------------
+ * user-callable functions
+ *-----------------------------------------------------------------
+ */
+
+/*
+ *-----------------------------------------------------------------
+ * Function : KINBBDPrecInit
+ *-----------------------------------------------------------------
+ */
+
+int KINBBDPrecInit(void *kinmem, long int Nlocal, 
+                   long int mudq, long int mldq,
+                   long int mukeep, long int mlkeep,
+                   realtype dq_rel_uu, 
+                   KINLocalFn gloc, KINCommFn gcomm)
+{
+  KBBDPrecData pdata;
+  KINSpilsMem kinspils_mem;
+  KINMem kin_mem;
+  N_Vector vtemp3;
+  long int muk, mlk, storage_mu;
+  int flag;
+
+  pdata = NULL;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, 0, "KINBBDPRE", "KINBBDPrecInit", MSGBBD_MEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  /* Test if one of the SPILS linear solvers has been attached */
+  if (kin_mem->kin_lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINBBDPRE", "KINBBDPrecInit", MSGBBD_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) kin_mem->kin_lmem;
+
+  /* Test if the NVECTOR package is compatible with BLOCK BAND preconditioner.
+     Note: do NOT need to check for N_VScale since it is required by KINSOL and
+     so has already been checked for (see KINMalloc) */
+  if (vec_tmpl->ops->nvgetarraypointer == NULL) {
+    KINProcessError(kin_mem, KINSPILS_ILL_INPUT, "KINBBDPRE", "KINBBDPrecInit", MSGBBD_BAD_NVECTOR);
+    return(KINSPILS_ILL_INPUT);
+  }
+
+  pdata = NULL;
+  pdata = (KBBDPrecData) malloc(sizeof *pdata);  /* allocate data memory */
+  if (pdata == NULL) {
+    KINProcessError(kin_mem, KINSPILS_MEM_FAIL, "KINBBDPRE", "KINBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(KINSPILS_MEM_FAIL);
+  }
+
+  /* set pointers to gloc and gcomm and load half-bandwiths */
+
+  pdata->kin_mem = kinmem;
+  pdata->gloc = gloc;
+  pdata->gcomm = gcomm;
+  pdata->mudq = SUNMIN(Nlocal-1, SUNMAX(0, mudq));
+  pdata->mldq = SUNMIN(Nlocal-1, SUNMAX(0, mldq));
+  muk = SUNMIN(Nlocal-1, SUNMAX(0,mukeep));
+  mlk = SUNMIN(Nlocal-1, SUNMAX(0,mlkeep));
+  pdata->mukeep = muk;
+  pdata->mlkeep = mlk;
+
+  /* allocate memory for preconditioner matrix */
+
+  storage_mu = SUNMIN(Nlocal-1, muk+mlk);
+  pdata->PP = NULL;
+  pdata->PP = NewBandMat(Nlocal, muk, mlk, storage_mu);
+  if (pdata->PP == NULL) {
+    free(pdata); pdata = NULL;
+    KINProcessError(kin_mem, KINSPILS_MEM_FAIL, "KINBBDPRE", "KINBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(KINSPILS_MEM_FAIL);
+  }
+
+  /* allocate memory for lpivots */
+
+  pdata->lpivots = NULL;
+  pdata->lpivots = NewLintArray(Nlocal);
+  if (pdata->lpivots == NULL) {
+    DestroyMat(pdata->PP);
+    free(pdata); pdata = NULL;
+    KINProcessError(kin_mem, KINSPILS_MEM_FAIL, "KINBBDPRE", "KINBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(KINSPILS_MEM_FAIL);
+  }
+
+  /* allocate vtemp3 for use by KBBDDQJac routine */
+
+  vtemp3 = NULL;
+  vtemp3 = N_VClone(kin_mem->kin_vtemp1);
+  if (vtemp3 == NULL) {
+    DestroyArray(pdata->lpivots);
+    DestroyMat(pdata->PP);
+    free(pdata); pdata = NULL;
+    KINProcessError(kin_mem, KINSPILS_MEM_FAIL, "KINBBDPRE", "KINBBDPrecInit", MSGBBD_MEM_FAIL);
+    return(KINSPILS_MEM_FAIL);
+  }
+  pdata->vtemp3 = vtemp3;
+
+  /* set rel_uu based on input value dq_rel_uu */
+
+  if (dq_rel_uu > ZERO) pdata->rel_uu = dq_rel_uu;
+  else pdata->rel_uu = SUNRsqrt(uround);  /* using dq_rel_uu = 0.0 means use default */
+
+  /* store Nlocal to be used by the preconditioner routines */
+
+  pdata->n_local = Nlocal;
+
+  /* set work space sizes and initialize nge */
+
+  pdata->rpwsize = Nlocal * (storage_mu*mlk + 1) + 1;
+  pdata->ipwsize = Nlocal + 1;
+  pdata->nge = 0;
+
+  /* make sure s_P_data is free from any previous allocations */
+  if (kinspils_mem->s_pfree != NULL) {
+    kinspils_mem->s_pfree(kin_mem);
+  }
+
+  /* Point to the new P_data field in the SPILS memory */
+  kinspils_mem->s_P_data = pdata;
+
+  /* Attach the pfree function */
+  kinspils_mem->s_pfree = KINBBDPrecFree;
+
+  /* Attach preconditioner solve and setup functions */
+  flag = KINSpilsSetPreconditioner(kinmem, KINBBDPrecSetup, KINBBDPrecSolve);
+
+  return(flag);
+}
+
+/*
+ *-----------------------------------------------------------------
+ * Function : KINBBDPrecGetWorkSpace
+ *-----------------------------------------------------------------
+ */
+
+int KINBBDPrecGetWorkSpace(void *kinmem, long int *lenrwBBDP, long int *leniwBBDP)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+  KBBDPrecData pdata;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINBBDPRE", "KINBBDPrecGetWorkSpace", MSGBBD_MEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (kin_mem->kin_lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINBBDPRE", "KINBBDPrecGetWorkSpace", MSGBBD_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) kin_mem->kin_lmem;
+
+  if (kinspils_mem->s_P_data == NULL) {
+    KINProcessError(kin_mem, KINSPILS_PMEM_NULL, "KINBBDPRE", "KINBBDPrecGetWorkSpace", MSGBBD_PMEM_NULL);
+    return(KINSPILS_PMEM_NULL);
+  } 
+  pdata = (KBBDPrecData) kinspils_mem->s_P_data;
+
+  *lenrwBBDP = pdata->rpwsize;
+  *leniwBBDP = pdata->ipwsize;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ *-----------------------------------------------------------------
+ * Function : KINBBDPrecGetNumGfnEvals
+ *-----------------------------------------------------------------
+ */
+
+int KINBBDPrecGetNumGfnEvals(void *kinmem, long int *ngevalsBBDP)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+  KBBDPrecData pdata;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINBBDPRE", "KINBBDPrecGetNumGfnEvals", MSGBBD_MEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (kin_mem->kin_lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINBBDPRE", "KINBBDPrecGetNumGfnEvals", MSGBBD_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) kin_mem->kin_lmem;
+
+  if (kinspils_mem->s_P_data == NULL) {
+    KINProcessError(kin_mem, KINSPILS_PMEM_NULL, "KINBBDPRE", "KINBBDPrecGetNumGfnEvals", MSGBBD_PMEM_NULL);
+    return(KINSPILS_PMEM_NULL);
+  } 
+  pdata = (KBBDPrecData) kinspils_mem->s_P_data;
+
+  *ngevalsBBDP = pdata->nge;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ *-----------------------------------------------------------------
+ * preconditioner setup and solve functions
+ *-----------------------------------------------------------------
+ */
+ 
+/*
+ *-----------------------------------------------------------------
+ * readability replacements
+ *-----------------------------------------------------------------
+ */
+
+#define Nlocal  (pdata->n_local)
+#define mudq    (pdata->mudq)
+#define mldq    (pdata->mldq)
+#define mukeep  (pdata->mukeep)
+#define mlkeep  (pdata->mlkeep)
+#define gloc    (pdata->gloc)
+#define gcomm   (pdata->gcomm)
+#define lpivots (pdata->lpivots)
+#define PP      (pdata->PP)
+#define vtemp3  (pdata->vtemp3)
+#define nge     (pdata->nge)
+#define rel_uu  (pdata->rel_uu)
+
+/*
+ *-----------------------------------------------------------------
+ * Function : KINBBDPrecSetup
+ *-----------------------------------------------------------------
+ * KINBBDPrecSetup generates and factors a banded block of the
+ * preconditioner matrix on each processor, via calls to the
+ * user-supplied gloc and gcomm functions. It uses difference
+ * quotient approximations to the Jacobian elements.
+ *
+ * KINBBDPrecSetup calculates a new Jacobian, stored in banded
+ * matrix PP and does an LU factorization of P in place in PP.
+ *
+ * The parameters of KINBBDPrecSetup are as follows:
+ *
+ * uu      is the current value of the dependent variable vector,
+ *         namely the solutin to func(uu)=0
+ *
+ * uscale  is the dependent variable scaling vector (i.e. uu)
+ *
+ * fval    is the vector f(u)
+ *
+ * fscale  is the function scaling vector
+ *
+ * bbd_data is the pointer to BBD data set by IDABBDInit.
+ *
+ * vtemp1, vtemp2 are pointers to memory allocated for vectors of
+ *                length N which are be used by KINBBDPrecSetup
+ *                as temporary storage or work space. A third
+ *                vector (vtemp3) required for KINBBDPrecSetup
+ *                was previously allocated as pdata->vtemp3.
+ *
+ * Note: The value to be returned by the KINBBDPrecSetup function
+ * is a flag indicating whether it was successful. This value is:
+ *   0 if successful,
+ *   > 0 for a recoverable error - step will be retried.
+ *-----------------------------------------------------------------
+ */
+
+static int KINBBDPrecSetup(N_Vector uu, N_Vector uscale,
+                           N_Vector fval, N_Vector fscale, 
+                           void *bbd_data,
+                           N_Vector vtemp1, N_Vector vtemp2)
+{
+  KBBDPrecData pdata;
+  KINMem kin_mem;
+  int retval;
+  long int ier;
+
+  pdata = (KBBDPrecData) bbd_data;
+
+  kin_mem = (KINMem) pdata->kin_mem;
+
+  /* call KBBDDQJac for a new jacobian and store in PP */
+
+  SetToZero(PP);
+  retval = KBBDDQJac(pdata, uu, uscale, vtemp1, vtemp2, vtemp3);
+  if (retval != 0) {
+    KINProcessError(kin_mem, -1, "KINBBDPRE", "KINBBDPrecSetup", MSGBBD_FUNC_FAILED);
+    return(-1);
+  }
+
+  nge += (1 + SUNMIN(mldq+mudq+1, Nlocal));
+
+  /* do LU factorization of P in place (in PP) */
+
+  ier = BandGBTRF(PP, lpivots);
+
+  /* return 0 if the LU was complete, else return 1 */
+
+  if (ier > 0) return(1);
+  else return(0);
+}
+
+/*
+ *-----------------------------------------------------------------
+ * Function : KINBBDPrecSolve
+ *-----------------------------------------------------------------
+ * KINBBDPrecSolve solves a linear system Pz = r, with the
+ * banded blocked preconditioner matrix P generated and factored
+ * by KINBBDPrecSetup. Here, r comes in as vtemp and z is
+ * returned in vtemp as well.
+ *
+ * The parameters for KINBBDPrecSolve are as follows:
+ *
+ * uu     an N_Vector giving the current iterate for the system
+ *
+ * uscale an N_Vector giving the diagonal entries of the
+ *        uu scaling matrix
+ *
+ * fval   an N_Vector giving the current function value
+ *
+ * fscale an N_Vector giving the diagonal entries of the
+ *        function scaling matrix
+ *
+ * bbd_data is the pointer to BBD data set by IDABBDInit.
+ *
+ * vtemp  an N_Vector (temporary storage), usually the scratch
+ *        vector vtemp from SPGMR/SPBCG/SPTFQMR (typical calling
+ *        routine)
+ *
+ * Note: The value returned by the KINBBDPrecSolve function is a
+ * flag indicating whether it was successful. Here this value is
+ * always 0 which indicates success.
+ *-----------------------------------------------------------------
+ */
+
+static int KINBBDPrecSolve(N_Vector uu, N_Vector uscale,
+                           N_Vector fval, N_Vector fscale, 
+                           N_Vector vv, void *bbd_data,
+                           N_Vector vtemp)
+{
+  KBBDPrecData pdata;
+  realtype *vd;
+
+  pdata = (KBBDPrecData) bbd_data;
+
+  /* do the backsolve and return */
+
+  vd = N_VGetArrayPointer(vv);
+  BandGBTRS(PP, lpivots, vd);
+
+  return(0);
+}
+
+
+static int KINBBDPrecFree(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  KBBDPrecData pdata;
+
+  if (kin_mem->kin_lmem == NULL) return(0);
+  kinspils_mem = (KINSpilsMem) kin_mem->kin_lmem;
+  
+  if (kinspils_mem->s_P_data == NULL) return(0);
+  pdata = (KBBDPrecData) kinspils_mem->s_P_data;
+
+  N_VDestroy(vtemp3);
+  DestroyMat(PP);
+  DestroyArray(lpivots);
+
+  free(pdata);
+  pdata = NULL;
+
+  return(0);
+}
+
+
+
+/*
+ *-----------------------------------------------------------------
+ * Function : KBBDDQJac
+ *-----------------------------------------------------------------
+ * This routine generates a banded difference quotient
+ * approximation to the Jacobian of f(u). It assumes that a band
+ * matrix of type BandMat is stored column-wise, and that elements
+ * within each column are contiguous. All matrix elements are
+ * generated as difference quotients, by way of calls to the user
+ * routine gloc. By virtue of the band structure, the number of
+ * these calls is bandwidth + 1, where bandwidth = ml + mu + 1.
+ * This routine also assumes that the local elements of a vector
+ * are stored contiguously.
+ *-----------------------------------------------------------------
+ */
+
+#define user_data (kin_mem->kin_user_data)
+
+static int KBBDDQJac(KBBDPrecData pdata,
+                     N_Vector uu, N_Vector uscale,
+                     N_Vector gu, N_Vector gtemp, N_Vector utemp)
+{
+  realtype inc, inc_inv;
+  long int group, i, j, width, ngroups, i1, i2;
+  KINMem kin_mem;
+  realtype *udata, *uscdata, *gudata, *gtempdata, *utempdata, *col_j;
+  int retval;
+
+  kin_mem = (KINMem) pdata->kin_mem;
+
+  /* set pointers to the data for all vectors */
+
+  udata     = N_VGetArrayPointer(uu);
+  uscdata   = N_VGetArrayPointer(uscale);
+  gudata    = N_VGetArrayPointer(gu);
+  gtempdata = N_VGetArrayPointer(gtemp);
+  utempdata = N_VGetArrayPointer(utemp);
+
+  /* load utemp with uu = predicted solution vector */
+
+  N_VScale(ONE, uu, utemp);
+
+  /* call gcomm and gloc to get base value of g(uu) */
+
+  if (gcomm != NULL) {
+    retval = gcomm(Nlocal, uu, user_data);
+    if (retval != 0) return(retval);
+  }
+
+  retval = gloc(Nlocal, uu, gu, user_data);
+  if (retval != 0) return(retval);
+
+  /* set bandwidth and number of column groups for band differencing */
+
+  width = mldq + mudq + 1;
+  ngroups = SUNMIN(width, Nlocal);
+
+  /* loop over groups */
+  
+  for (group = 1; group <= ngroups; group++) {
+  
+    /* increment all u_j in group */
+
+    for(j = group - 1; j < Nlocal; j += width) {
+      inc = rel_uu * SUNMAX(SUNRabs(udata[j]), (ONE / uscdata[j]));
+      utempdata[j] += inc;
+    }
+  
+    /* evaluate g with incremented u */
+
+    retval = gloc(Nlocal, utemp, gtemp, user_data);
+    if (retval != 0) return(retval);
+
+    /* restore utemp, then form and load difference quotients */
+
+    for (j = group - 1; j < Nlocal; j += width) {
+      utempdata[j] = udata[j];
+      col_j = BAND_COL(PP,j);
+      inc = rel_uu * SUNMAX(SUNRabs(udata[j]) , (ONE / uscdata[j]));
+      inc_inv = ONE / inc;
+      i1 = SUNMAX(0, (j - mukeep));
+      i2 = SUNMIN((j + mlkeep), (Nlocal - 1));
+      for (i = i1; i <= i2; i++)
+	BAND_COL_ELEM(col_j, i, j) = inc_inv * (gtempdata[i] - gudata[i]);
+    }
+  }
+
+  return(0);
+}
diff --git a/src/kinsol/kinsol_bbdpre_impl.h b/src/kinsol/kinsol_bbdpre_impl.h
new file mode 100644
index 0000000..1ff6de0
--- /dev/null
+++ b/src/kinsol/kinsol_bbdpre_impl.h
@@ -0,0 +1,94 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ *  -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * KINBBDPRE module header file (private version)
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINBBDPRE_IMPL_H
+#define _KINBBDPRE_IMPL_H
+
+#include <kinsol/kinsol_bbdpre.h>
+#include <sundials/sundials_band.h>
+#include "kinsol_impl.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * -----------------------------------------------------------------
+ * Definition of KBBDData
+ * -----------------------------------------------------------------
+ */
+
+typedef struct KBBDPrecDataRec {
+
+  /* passed by user to KINBBDPrecAlloc, used by pset/psolve functions */
+
+  long int mudq, mldq, mukeep, mlkeep;
+  KINLocalFn gloc;
+  KINCommFn gcomm;
+
+  /* relative error for the Jacobian DQ routine */
+
+  realtype rel_uu;
+
+  /* allocated for use by KINBBDPrecSetup */
+
+  N_Vector vtemp3;
+
+  /* set by KINBBDPrecSetup and used by KINBBDPrecSolve */
+
+  DlsMat PP;
+  long int *lpivots;
+
+  /* set by KINBBDPrecAlloc and used by KINBBDPrecSetup */
+
+  long int n_local;
+
+  /* available for optional output */
+
+  long int rpwsize;
+  long int ipwsize;
+  long int nge;
+
+  /* pointer to KINSol memory */
+
+  void *kin_mem;
+
+} *KBBDPrecData;
+
+/*
+ *-----------------------------------------------------------------
+ * KINBBDPRE error messages
+ *-----------------------------------------------------------------
+ */
+
+#define MSGBBD_MEM_NULL    "KINSOL Memory is NULL."
+#define MSGBBD_LMEM_NULL   "Linear solver memory is NULL. One of the SPILS linear solvers must be attached."
+#define MSGBBD_MEM_FAIL    "A memory request failed."
+#define MSGBBD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGBBD_FUNC_FAILED "The gloc or cfn routine failed in an unrecoverable manner."
+#define MSGBBD_PMEM_NULL   "BBD peconditioner memory is NULL. IDABBDPrecInit must be called."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/kinsol/kinsol_dense.c b/src/kinsol/kinsol_dense.c
new file mode 100644
index 0000000..c55e317
--- /dev/null
+++ b/src/kinsol/kinsol_dense.c
@@ -0,0 +1,339 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the KINDENSE linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <kinsol/kinsol_dense.h>
+#include "kinsol_direct_impl.h"
+#include "kinsol_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PROTOTYPES FOR PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/* KINDENSE linit, lsetup, lsolve, and lfree routines */ 
+static int kinDenseInit(KINMem kin_mem);
+static int kinDenseSetup(KINMem kin_mem);
+static int kinDenseSolve(KINMem kin_mem, N_Vector x, N_Vector b,
+                         realtype *sJpnorm, realtype *sFdotJp);
+static int kinDenseFree(KINMem kin_mem);
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define lrw1           (kin_mem->kin_lrw1)
+#define liw1           (kin_mem->kin_liw1)
+#define func           (kin_mem->kin_func)
+#define printfl        (kin_mem->kin_printfl)
+#define linit          (kin_mem->kin_linit)
+#define lsetup         (kin_mem->kin_lsetup)
+#define lsolve         (kin_mem->kin_lsolve)
+#define lfree          (kin_mem->kin_lfree)
+#define lmem           (kin_mem->kin_lmem)
+#define inexact_ls     (kin_mem->kin_inexact_ls)
+#define uu             (kin_mem->kin_uu)
+#define fval           (kin_mem->kin_fval)
+#define uscale         (kin_mem->kin_uscale)
+#define fscale         (kin_mem->kin_fscale)
+#define sqrt_relfunc   (kin_mem->kin_sqrt_relfunc)
+#define errfp          (kin_mem->kin_errfp)
+#define infofp         (kin_mem->kin_infofp)
+#define setupNonNull   (kin_mem->kin_setupNonNull)
+#define vtemp1         (kin_mem->kin_vtemp1)
+#define vec_tmpl       (kin_mem->kin_vtemp1)
+#define vtemp2         (kin_mem->kin_vtemp2)
+#define strategy       (kin_mem->kin_globalstrategy)
+
+#define mtype          (kindls_mem->d_type)
+#define n              (kindls_mem->d_n)
+#define ml             (kindls_mem->d_ml)
+#define mu             (kindls_mem->d_mu)
+#define smu            (kindls_mem->d_smu)
+#define jacDQ          (kindls_mem->d_jacDQ)
+#define djac           (kindls_mem->d_djac)
+#define J              (kindls_mem->d_J)
+#define lpivots        (kindls_mem->d_lpivots)
+#define nje            (kindls_mem->d_nje)
+#define nfeDQ          (kindls_mem->d_nfeDQ)
+#define J_data         (kindls_mem->d_J_data)
+#define last_flag      (kindls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS
+ * =================================================================
+ */
+             
+/*
+ * -----------------------------------------------------------------
+ * KINDense
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the dense linear solver module. 
+ * KINDense sets the kin_linit, kin_lsetup, kin_lsolve, kin_lfree fields 
+ * in *kinmem to be kinDenseInit, kinDenseSetup, kinDenseSolve, and 
+ * kinDenseFree, respectively.  
+ * It allocates memory for a structure of type KINDlsMemRec and sets 
+ * the kin_lmem field in *kinmem to the address of this structure.  
+ * It sets setupNonNull in *kinmem to TRUE, and the djac field to the 
+ * default kinDlsDenseDQJac.
+ * Finally, it allocates memory for J and lpivots.
+ *
+ * NOTE: The dense linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, KINDense will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that N_VGetArrayPointer and
+ *       N_VSetArrayPointer exist.
+ * -----------------------------------------------------------------
+ */
+
+int KINDense(void *kinmem, long int N)
+{
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* Return immediately if kinmem is NULL */
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINDLS_MEM_NULL, "KINDENSE", "KINDense", MSGD_KINMEM_NULL);
+    return(KINDLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  /* Test if the NVECTOR package is compatible with the DENSE solver */
+  if (vec_tmpl->ops->nvgetarraypointer == NULL ||
+      vec_tmpl->ops->nvsetarraypointer == NULL) {
+    KINProcessError(kin_mem, KINDLS_ILL_INPUT, "KINDENSE", "KINDense", MSGD_BAD_NVECTOR);
+    return(KINDLS_ILL_INPUT);
+  }
+
+  if (lfree !=NULL) lfree(kin_mem);
+
+  /* Set four main function fields in kin_mem */
+  linit  = kinDenseInit;
+  lsetup = kinDenseSetup;
+  lsolve = kinDenseSolve;
+  lfree  = kinDenseFree;
+
+  /* Get memory for KINDlsMemRec */
+  kindls_mem = NULL;
+  kindls_mem = (KINDlsMem) malloc(sizeof(struct KINDlsMemRec));
+  if (kindls_mem == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINDENSE", "KINDense", MSGD_MEM_FAIL);
+    return(KINDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_DENSE;  
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ  = TRUE;
+  djac   = NULL;
+  J_data = NULL;
+  last_flag = KINDLS_SUCCESS;
+
+  kinDlsInitializeCounters(kindls_mem);
+
+  setupNonNull = TRUE;
+
+  /* Set problem dimension */
+  n = N;
+
+  /* Allocate memory for J and pivot array */
+  
+  J = NULL;
+  J = NewDenseMat(N, N);
+  if (J == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINDENSE", "KINDense", MSGD_MEM_FAIL);
+    free(kindls_mem); kindls_mem = NULL;
+    return(KINDLS_MEM_FAIL);
+  }
+
+  lpivots = NULL;
+  lpivots = NewLintArray(N);
+  if (lpivots == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINDENSE", "KINDense", MSGD_MEM_FAIL);
+    DestroyMat(J);
+    free(kindls_mem); kindls_mem = NULL;
+    return(KINDLS_MEM_FAIL);
+  }
+
+  /* This is a direct linear solver */
+  inexact_ls = FALSE;
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = kindls_mem;
+
+  return(KINDLS_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * kinDenseInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the dense
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int kinDenseInit(KINMem kin_mem)
+{
+  KINDlsMem kindls_mem;
+
+  kindls_mem = (KINDlsMem) lmem;
+  
+  kinDlsInitializeCounters(kindls_mem);
+  
+  if (jacDQ) {
+    djac = kinDlsDenseDQJac;
+    J_data = kin_mem;
+  } else {
+    J_data = kin_mem->kin_user_data;
+  }
+  
+  if ( (strategy == KIN_PICARD) && jacDQ ) {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINDenseInit", 
+		    MSG_NOL_FAIL);
+    return(KIN_ILL_INPUT);
+  }
+
+  last_flag = KINDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinDenseSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the dense linear solver.
+ * It calls the dense LU factorization routine.
+ * -----------------------------------------------------------------
+ */
+
+static int kinDenseSetup(KINMem kin_mem)
+{
+  KINDlsMem kindls_mem;
+  int retval;
+  long int ier;
+
+  kindls_mem = (KINDlsMem) lmem;
+ 
+  nje++;
+  SetToZero(J); 
+  retval = djac(n, uu, fval, J, J_data, vtemp1, vtemp2);
+  if (retval != 0) {
+    last_flag = -1;
+    return(-1);
+  }
+
+  /* Do LU factorization of J */
+  ier = DenseGETRF(J, lpivots); 
+
+  /* Return 0 if the LU was complete; otherwise return -1 */
+  last_flag = ier;
+  if (ier > 0) return(-1);
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinDenseSolve
+ * -----------------------------------------------------------------
+ * This routine handles the solve operation for the dense linear solver
+ * by calling the dense backsolve routine.  The returned value is 0.
+ * The argument *sJpnorm is ignored.
+ * -----------------------------------------------------------------
+ */
+
+static int kinDenseSolve(KINMem kin_mem, N_Vector x, N_Vector b,
+                         realtype *sJpnorm, realtype *sFdotJp)
+{
+  KINDlsMem kindls_mem;
+  realtype *xd;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  /* Copy the right-hand side into x */
+
+  N_VScale(ONE, b, x);
+  
+  xd = N_VGetArrayPointer(x);
+
+  /* Back-solve and get solution in x */
+  
+  DenseGETRS(J, lpivots, xd);
+
+  /* Compute the term sFdotJp for use in the linesearch routine.
+     This term is subsequently corrected if the step is reduced by
+     constraints or the linesearch.
+
+     sFdotJp is the dot product of the scaled f vector and the scaled
+     vector J*p, where the scaling uses fscale.                            */
+
+  N_VProd(b, fscale, b);
+  N_VProd(b, fscale, b);
+  *sFdotJp = N_VDotProd(fval, b);
+
+  last_flag = KINDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinDenseFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the dense linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int kinDenseFree(KINMem kin_mem)
+{
+  KINDlsMem  kindls_mem;
+
+  kindls_mem = (KINDlsMem) lmem;
+  
+  DestroyMat(J);
+  DestroyArray(lpivots);
+  free(kindls_mem); kindls_mem = NULL;
+
+  return(0);
+}
+
diff --git a/src/kinsol/kinsol_direct.c b/src/kinsol/kinsol_direct.c
new file mode 100644
index 0000000..3ef5d65
--- /dev/null
+++ b/src/kinsol/kinsol_direct.c
@@ -0,0 +1,505 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the KINDLS linear solvers
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "kinsol_impl.h"
+#include "kinsol_direct_impl.h"
+#include <sundials/sundials_math.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+/* Constant for DQ Jacobian approximation */
+#define MIN_INC_MULT RCONST(1000.0)
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define lrw1           (kin_mem->kin_lrw1)
+#define liw1           (kin_mem->kin_liw1)
+#define uround         (kin_mem->kin_uround)
+#define func           (kin_mem->kin_func)
+#define user_data      (kin_mem->kin_user_data)
+#define printfl        (kin_mem->kin_printfl)
+#define linit          (kin_mem->kin_linit)
+#define lsetup         (kin_mem->kin_lsetup)
+#define lsolve         (kin_mem->kin_lsolve)
+#define lfree          (kin_mem->kin_lfree)
+#define lmem           (kin_mem->kin_lmem)
+#define inexact_ls     (kin_mem->kin_inexact_ls)
+#define uu             (kin_mem->kin_uu)
+#define fval           (kin_mem->kin_fval)
+#define uscale         (kin_mem->kin_uscale)
+#define fscale         (kin_mem->kin_fscale)
+#define sqrt_relfunc   (kin_mem->kin_sqrt_relfunc)
+#define sJpnorm        (kin_mem->kin_sJpnorm)
+#define sfdotJp        (kin_mem->kin_sfdotJp)
+#define errfp          (kin_mem->kin_errfp)
+#define infofp         (kin_mem->kin_infofp)
+#define setupNonNull   (kin_mem->kin_setupNonNull)
+#define vtemp1         (kin_mem->kin_vtemp1)
+#define vec_tmpl       (kin_mem->kin_vtemp1)
+#define vtemp2         (kin_mem->kin_vtemp2)
+
+#define mtype          (kindls_mem->d_type)
+#define n              (kindls_mem->d_n)
+#define ml             (kindls_mem->d_ml)
+#define mu             (kindls_mem->d_mu)
+#define smu            (kindls_mem->d_smu)
+#define jacDQ          (kindls_mem->d_jacDQ)
+#define djac           (kindls_mem->d_djac)
+#define bjac           (kindls_mem->d_bjac)
+#define J              (kindls_mem->d_J)
+#define pivots         (kindls_mem->d_pivots)
+#define nje            (kindls_mem->d_nje)
+#define nfeDQ          (kindls_mem->d_nfeDQ)
+#define J_data         (kindls_mem->d_J_data)
+#define last_flag      (kindls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS
+ * =================================================================
+ */
+              
+/*
+ * -----------------------------------------------------------------
+ * KINDlsSetJacFn
+ * -----------------------------------------------------------------
+ */
+
+int KINDlsSetDenseJacFn(void *kinmem, KINDlsDenseJacFn jac)
+{
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* Return immediately if kinmem is NULL */
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINDLS_MEM_NULL, "KINDLS", "KINDlsSetDenseJacFn", MSGD_KINMEM_NULL);
+    return(KINDLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINDLS_LMEM_NULL, "KINDLS", "KINDlsSetDenseJacFn", MSGD_LMEM_NULL);
+    return(KINDLS_LMEM_NULL);
+  }
+  kindls_mem = (KINDlsMem) lmem;
+
+  if (jac != NULL) {
+    jacDQ = FALSE;
+    djac = jac;
+  } else {
+    jacDQ = TRUE;
+  }
+
+  return(KINDLS_SUCCESS);
+}
+
+int KINDlsSetBandJacFn(void *kinmem, KINDlsBandJacFn jac)
+{
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* Return immediately if kinmem is NULL */
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINDLS_MEM_NULL, "KINDLS", "KINDlsSetBandJacFn", MSGD_KINMEM_NULL);
+    return(KINDLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINDLS_LMEM_NULL, "KINDLS", "KINDlsSetBandJacFn", MSGD_LMEM_NULL);
+    return(KINDLS_LMEM_NULL);
+  }
+  kindls_mem = (KINDlsMem) lmem;
+
+  if (jac != NULL) {
+    jacDQ = FALSE;
+    bjac = jac;
+  } else {
+    jacDQ = TRUE;
+  }
+
+  return(KINDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * KINDlsGetWorkSpace
+ * -----------------------------------------------------------------
+ */
+
+int KINDlsGetWorkSpace(void *kinmem, long int *lenrwLS, long int *leniwLS)
+{
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* Return immediately if kinmem is NULL */
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINDLS_MEM_NULL, "KINDLS", "KINBandGetWorkSpace", MSGD_KINMEM_NULL);
+    return(KINDLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINDLS_LMEM_NULL, "KINDLS", "KINBandGetWorkSpace", MSGD_LMEM_NULL);
+    return(KINDLS_LMEM_NULL);
+  }
+  kindls_mem = (KINDlsMem) lmem;
+
+  if (mtype == SUNDIALS_DENSE) {
+    *lenrwLS = n*n;
+    *leniwLS = n;
+  } else if (mtype == SUNDIALS_BAND) {
+    *lenrwLS = n*(smu + mu + 2*ml + 2);
+    *leniwLS = n;
+  }
+
+  return(KINDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * KINDlsGetNumJacEvals
+ * -----------------------------------------------------------------
+ */
+
+int KINDlsGetNumJacEvals(void *kinmem, long int *njevals)
+{
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* Return immediately if kinmem is NULL */
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINDLS_MEM_NULL, "KINDLS", "KINDlsGetNumJacEvals", MSGD_KINMEM_NULL);
+    return(KINDLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINDLS_LMEM_NULL, "KINDLS", "KINDlsGetNumJacEvals", MSGD_LMEM_NULL);
+    return(KINDLS_LMEM_NULL);
+  }
+  kindls_mem = (KINDlsMem) lmem;
+
+  *njevals = nje;
+
+  return(KINDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * KINDlsGetNumFuncEvals
+ * -----------------------------------------------------------------
+ */
+
+int KINDlsGetNumFuncEvals(void *kinmem, long int *nfevalsLS)
+{
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* Return immediately if kinmem is NULL */
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINDLS_MEM_NULL, "KINDLS", "KINDlsGetNumFuncEvals", MSGD_KINMEM_NULL);
+    return(KINDLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINDLS_LMEM_NULL, "KINDLS", "KINDlsGetNumGuncEvals", MSGD_LMEM_NULL);
+    return(KINDLS_LMEM_NULL);
+  }
+  kindls_mem = (KINDlsMem) lmem;
+
+  *nfevalsLS = nfeDQ;
+
+  return(KINDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * KINDlsGetLastFlag
+ * -----------------------------------------------------------------
+ */
+
+int KINDlsGetLastFlag(void *kinmem, long int *flag)
+{
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* Return immediately if kinmem is NULL */
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINDLS_MEM_NULL, "KINDLS", "KINDlsGetLastFlag", MSGD_KINMEM_NULL);
+    return(KINDLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINDLS_LMEM_NULL, "KINDLS", "KINDlsGetLastFlag", MSGD_LMEM_NULL);
+    return(KINDLS_LMEM_NULL);
+  }
+  kindls_mem = (KINDlsMem) lmem;
+
+  *flag = last_flag;
+
+  return(KINDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * KINDlsGetReturnFlagName
+ * -----------------------------------------------------------------
+ */
+
+char *KINDlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case KINDLS_SUCCESS:
+    sprintf(name, "KINDLS_SUCCESS");
+    break;
+  case KINDLS_MEM_NULL:
+    sprintf(name, "KINDLS_MEM_NULL");
+    break;
+  case KINDLS_LMEM_NULL:
+    sprintf(name, "KINDLS_LMEM_NULL");
+    break;
+  case KINDLS_ILL_INPUT:
+    sprintf(name, "KINDLS_ILL_INPUT");
+    break;
+  case KINDLS_MEM_FAIL:
+    sprintf(name, "KINDLS_MEM_FAIL");
+    break;
+  default:
+    sprintf(name, "NONE");
+  }
+
+  return(name);
+}
+
+/* 
+ * =================================================================
+ * DQ JACOBIAN APPROXIMATIONS
+ * =================================================================
+ */
+
+
+
+/*
+ * -----------------------------------------------------------------
+ * kinDlsDenseDQJac 
+ * -----------------------------------------------------------------
+ * This routine generates a dense difference quotient approximation to
+ * the Jacobian of F(u). It assumes that a dense matrix of type
+ * DlsMat is stored column-wise, and that elements within each column
+ * are contiguous. The address of the jth column of J is obtained via
+ * the macro DENSE_COL and this pointer is associated with an N_Vector
+ * using the N_VGetArrayPointer/N_VSetArrayPointer functions. 
+ * Finally, the actual computation of the jth column of the Jacobian is 
+ * done with a call to N_VLinearSum.
+ *
+ * The increment used in the finite-difference approximation
+ *   J_ij = ( F_i(u+sigma_j * e_j) - F_i(u)  ) / sigma_j
+ * is
+ *  sigma_j = max{|u_j|, |1/uscale_j|} * sqrt(uround)
+ *
+ * Note: uscale_j = 1/typ(u_j)
+ *
+ * NOTE: Any type of failure of the system function her leads to an
+ *       unrecoverable failure of the Jacobian function and thus
+ *       of the linear solver setup function, stopping KINSOL.
+ * -----------------------------------------------------------------
+ */
+
+int kinDlsDenseDQJac(long int N,
+                     N_Vector u, N_Vector fu,
+                     DlsMat Jac, void *data,
+                     N_Vector tmp1, N_Vector tmp2)
+{
+  realtype inc, inc_inv, ujsaved, ujscale, sign;
+  realtype *tmp2_data, *u_data, *uscale_data;
+  N_Vector ftemp, jthCol;
+  int retval = 0;
+  long int j;
+
+  KINMem kin_mem;
+  KINDlsMem  kindls_mem;
+
+  /* data points to kin_mem */
+  kin_mem = (KINMem) data;
+  kindls_mem = (KINDlsMem) lmem;
+
+  /* Save pointer to the array in tmp2 */
+  tmp2_data = N_VGetArrayPointer(tmp2);
+
+  /* Rename work vectors for readibility */
+  ftemp = tmp1; 
+  jthCol = tmp2;
+
+  /* Obtain pointers to the data for u and uscale */
+  u_data   = N_VGetArrayPointer(u);
+  uscale_data = N_VGetArrayPointer(uscale);
+
+  /* This is the only for loop for 0..N-1 in KINSOL */
+
+  for (j = 0; j < N; j++) {
+
+    /* Generate the jth col of Jac(u) */
+
+    N_VSetArrayPointer(DENSE_COL(Jac,j), jthCol);
+
+    ujsaved = u_data[j];
+    ujscale = ONE/uscale_data[j];
+    sign = (ujsaved >= ZERO) ? ONE : -ONE;
+    inc = sqrt_relfunc*SUNMAX(SUNRabs(ujsaved), ujscale)*sign;
+    u_data[j] += inc;
+
+    retval = func(u, ftemp, user_data);
+    nfeDQ++;
+    if (retval != 0) break; 
+
+    u_data[j] = ujsaved;
+
+    inc_inv = ONE/inc;
+    N_VLinearSum(inc_inv, ftemp, -inc_inv, fu, jthCol);
+
+  }
+
+  /* Restore original array pointer in tmp2 */
+  N_VSetArrayPointer(tmp2_data, tmp2);
+
+  return(retval);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinDlsBandDQJac
+ * -----------------------------------------------------------------
+ * This routine generates a banded difference quotient approximation to
+ * the Jacobian of F(u).  It assumes that a band matrix of type
+ * BandMat is stored column-wise, and that elements within each column
+ * are contiguous. This makes it possible to get the address of a column
+ * of J via the macro BAND_COL and to write a simple for loop to set
+ * each of the elements of a column in succession.
+ *
+ * NOTE: Any type of failure of the system function her leads to an
+ *       unrecoverable failure of the Jacobian function and thus
+ *       of the linear solver setup function, stopping KINSOL.
+ * -----------------------------------------------------------------
+ */
+
+int kinDlsBandDQJac(long int N, long int mupper, long int mlower,
+                    N_Vector u, N_Vector fu,
+                    DlsMat Jac, void *data,
+                    N_Vector tmp1, N_Vector tmp2)
+{
+  realtype inc, inc_inv;
+  N_Vector futemp, utemp;
+  int retval;
+  long int group, i, j, width, ngroups, i1, i2;
+  realtype *col_j, *fu_data, *futemp_data, *u_data, *utemp_data, *uscale_data;
+
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* data points to kinmem */
+  kin_mem = (KINMem) data;
+  kindls_mem = (KINDlsMem) lmem;
+
+  /* Rename work vectors for use as temporary values of u and fu */
+  futemp = tmp1;
+  utemp = tmp2;
+
+  /* Obtain pointers to the data for ewt, fy, futemp, y, ytemp */
+  fu_data    = N_VGetArrayPointer(fu);
+  futemp_data = N_VGetArrayPointer(futemp);
+  u_data     = N_VGetArrayPointer(u);
+  uscale_data = N_VGetArrayPointer(uscale);
+  utemp_data = N_VGetArrayPointer(utemp);
+
+  /* Load utemp with u */
+  N_VScale(ONE, u, utemp);
+
+  /* Set bandwidth and number of column groups for band differencing */
+  width = mlower + mupper + 1;
+  ngroups = SUNMIN(width, N);
+  
+  for (group=1; group <= ngroups; group++) {
+    
+    /* Increment all utemp components in group */
+    for(j=group-1; j < N; j+=width) {
+      inc = sqrt_relfunc*SUNMAX(SUNRabs(u_data[j]), ONE/SUNRabs(uscale_data[j]));
+      utemp_data[j] += inc;
+    }
+
+    /* Evaluate f with incremented u */
+    retval = func(utemp, futemp, user_data);
+    if (retval != 0) return(-1); 
+
+    /* Restore utemp components, then form and load difference quotients */
+    for (j=group-1; j < N; j+=width) {
+      utemp_data[j] = u_data[j];
+      col_j = BAND_COL(Jac,j);
+      inc = sqrt_relfunc*SUNMAX(SUNRabs(u_data[j]), ONE/SUNRabs(uscale_data[j]));
+      inc_inv = ONE/inc;
+      i1 = SUNMAX(0, j-mupper);
+      i2 = SUNMIN(j+mlower, N-1);
+      for (i=i1; i <= i2; i++)
+        BAND_COL_ELEM(col_j,i,j) = inc_inv * (futemp_data[i] - fu_data[i]);
+    }
+  }
+  
+  /* Increment counter nfeDQ */
+  nfeDQ += ngroups;
+
+  return(0);
+}
+
+
+int kinDlsInitializeCounters(KINDlsMem kindls_mem)
+{
+  kindls_mem->d_nje   = 0;
+  kindls_mem->d_nfeDQ = 0;
+  
+  return(0);
+}
diff --git a/src/kinsol/kinsol_direct_impl.h b/src/kinsol/kinsol_direct_impl.h
new file mode 100644
index 0000000..db1e2f0
--- /dev/null
+++ b/src/kinsol/kinsol_direct_impl.h
@@ -0,0 +1,106 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common implementation header file for the KINDLS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINDLS_IMPL_H
+#define _KINDLS_IMPL_H
+
+#include <kinsol/kinsol_direct.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+
+/*
+ * -----------------------------------------------------------------
+ * Types: KINDlsMemRec, KINDlsMem                             
+ * -----------------------------------------------------------------
+ * The type KINDlsMem is pointer to a KINDlsMemRec.
+ * This structure contains KINDLS solver-specific data. 
+ * -----------------------------------------------------------------
+ */
+
+typedef struct KINDlsMemRec {
+
+  int d_type;              /* SUNDIALS_DENSE or SUNDIALS_BAND              */
+
+  long int d_n;            /* problem dimension                            */
+
+  long int d_ml;           /* lower bandwidth of Jacobian                  */
+  long int d_mu;           /* upper bandwidth of Jacobian                  */ 
+  long int d_smu;          /* upper bandwith of M = MIN(N-1,d_mu+d_ml)     */
+
+  booleantype d_jacDQ;     /* TRUE if using internal DQ Jacobian approx.   */
+  KINDlsDenseJacFn d_djac; /* dense Jacobian routine to be called          */
+  KINDlsBandJacFn d_bjac;  /* band Jacobian routine to be called           */
+  void *d_J_data;          /* J_data is passed to djac or bjac             */
+    
+  DlsMat d_J;              /* problem Jacobian                             */
+    
+  int *d_pivots;           /* int pivot array for PM = LU                  */
+  long int *d_lpivots;     /* long int pivot array for PM = LU             */
+    
+  long int d_nje;          /* no. of calls to jac                          */
+    
+  long int d_nfeDQ;        /* no. of calls to F due to DQ Jacobian approx. */
+    
+  long int d_last_flag;    /* last error return flag                       */
+    
+} *KINDlsMem;
+
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+
+int kinDlsDenseDQJac(long int N,
+                     N_Vector u, N_Vector fu,
+                     DlsMat Jac, void *data,
+                     N_Vector tmp1, N_Vector tmp2);
+
+int kinDlsBandDQJac(long int N, long int mupper, long int mlower,
+                    N_Vector u, N_Vector fu,
+                    DlsMat Jac, void *data,
+                    N_Vector tmp1, N_Vector tmp2);
+
+/* Auxilliary functions */
+int kinDlsInitializeCounters(KINDlsMem kindls_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * Error Messages
+ * -----------------------------------------------------------------
+ */
+
+#define MSGD_KINMEM_NULL "KINSOL memory is NULL."
+#define MSGD_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGD_MEM_FAIL    "A memory request failed."
+#define MSGD_LMEM_NULL   "Linear solver memory is NULL."
+#define MSGD_BAD_SIZES   "Illegal bandwidth parameter(s). Must have 0 <=  ml, mu <= N-1."
+#define MSGD_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/kinsol/kinsol_impl.h b/src/kinsol/kinsol_impl.h
new file mode 100644
index 0000000..7994b5d
--- /dev/null
+++ b/src/kinsol/kinsol_impl.h
@@ -0,0 +1,490 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * KINSOL solver module header file (private version)
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSOL_IMPL_H
+#define _KINSOL_IMPL_H
+
+#include <stdarg.h>
+
+#include <kinsol/kinsol.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ *   M A I N    S O L V E R    M E M O R Y    B L O C K
+ * =================================================================
+ */
+
+/* KINSOL default constants */
+ 
+#define PRINTFL_DEFAULT    0
+#define MXITER_DEFAULT     200
+#define MXNBCF_DEFAULT     10
+#define MSBSET_DEFAULT     10
+#define MSBSET_SUB_DEFAULT 5
+
+#define OMEGA_MIN RCONST(0.00001)
+#define OMEGA_MAX RCONST(0.9)
+
+/*
+ * -----------------------------------------------------------------
+ * Types : struct KINMemRec and struct *KINMem
+ * -----------------------------------------------------------------
+ * A variable declaration of type struct *KINMem denotes a
+ * pointer to a data structure of type struct KINMemRec. The
+ * KINMemRec structure contains numerous fields that must be
+ * accessible by KINSOL solver module routines.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct KINMemRec {
+
+  realtype kin_uround;        /* machine epsilon (or unit roundoff error) 
+				 (defined in sundials_types.h)                */
+
+  /* problem specification data */
+
+  KINSysFn kin_func;           /* nonlinear system function implementation     */
+  void *kin_user_data;         /* work space available to func routine         */
+  realtype kin_fnormtol;       /* stopping tolerance on L2-norm of function
+				  value                                        */
+  realtype kin_scsteptol;      /* scaled step length tolerance                 */
+  int kin_globalstrategy;      /* choices are KIN_NONE, KIN_LINESEARCH
+				  KIN_PICARD and KIN_FP                        */
+  int kin_printfl;             /* level of verbosity of output                 */
+  long int kin_mxiter;         /* maximum number of nonlinear iterations       */
+  long int kin_msbset;         /* maximum number of nonlinear iterations that
+				  may be performed between calls to the
+				  linear solver setup routine (lsetup)         */
+  long int kin_msbset_sub;     /* subinterval length for residual monitoring   */
+  long int kin_mxnbcf;         /* maximum number of beta condition failures    */
+  int kin_etaflag;             /* choices are KIN_ETACONSTANT, KIN_ETACHOICE1
+				  and KIN_ETACHOICE2                           */
+  booleantype kin_noMinEps;    /* flag controlling whether or not the value
+				  of eps is bounded below                      */
+  booleantype kin_setupNonNull;   /* flag indicating if linear solver setup
+				     routine is non-null and if setup is used  */
+  booleantype kin_constraintsSet; /* flag indicating if constraints are being
+				     used                                      */
+  booleantype kin_jacCurrent;     /* flag indicating if the Jacobian info. 
+				     used by the linear solver is current      */
+  booleantype kin_callForcingTerm; /* flag set if using either KIN_ETACHOICE1
+				      or KIN_ETACHOICE2                        */
+  booleantype kin_noResMon;         /* flag indicating if the nonlinear
+				       residual monitoring scheme should be
+				       used                                    */
+  booleantype kin_retry_nni;        /* flag indicating if nonlinear iteration
+				       should be retried (set by residual
+				       monitoring algorithm)                   */
+  booleantype kin_update_fnorm_sub; /* flag indicating if the fnorm associated
+				       with the subinterval needs to be
+				       updated (set by residual monitoring
+				       algorithm)                              */
+
+  realtype kin_mxnewtstep;     /* maximum allowable scaled step length         */
+  realtype kin_mxnstepin;      /* input (or preset) value for mxnewtstep       */
+  realtype kin_sqrt_relfunc;   /* relative error bound for func(u)             */
+  realtype kin_stepl;          /* scaled length of current step                */
+  realtype kin_stepmul;        /* step scaling factor                          */
+  realtype kin_eps;            /* current value of eps                         */
+  realtype kin_eta;            /* current value of eta                         */
+  realtype kin_eta_gamma;      /* gamma value used in eta calculation
+				  (choice #2)                                  */
+  realtype kin_eta_alpha;      /* alpha value used in eta calculation
+				  (choice #2)                                  */
+  booleantype kin_noInitSetup; /* flag controlling whether or not the KINSol
+				  routine makes an initial call to the
+				  linear solver setup routine (lsetup)         */
+  realtype kin_sthrsh;         /* threshold value for calling the linear   
+				  solver setup routine                         */
+
+  /* counters */
+
+  long int kin_nni;            /* number of nonlinear iterations               */
+  long int kin_nfe;            /* number of calls made to func routine         */
+  long int kin_nnilset;        /* value of nni counter when the linear solver
+				  setup was last called                        */
+  long int kin_nnilset_sub;    /* value of nni counter when the linear solver
+				  setup was last called (subinterval)          */
+  long int kin_nbcf;           /* number of times the beta-condition could not 
+				  be met in KINLineSearch                      */
+  long int kin_nbktrk;         /* number of backtracks performed by
+				  KINLineSearch                                */
+  long int kin_ncscmx;         /* number of consecutive steps of size
+				  mxnewtstep taken                             */
+
+  /* vectors */
+
+  N_Vector kin_uu;          /* solution vector/current iterate (initially
+			       contains initial guess, but holds approximate
+			       solution upon completion if no errors occurred) */
+  N_Vector kin_unew;        /* next iterate (unew = uu+pp)                     */
+  N_Vector kin_fval;        /* vector containing result of nonlinear system
+			       function evaluated at a given iterate
+			       (fval = func(uu))                               */
+  N_Vector kin_gval;        /* vector containing result of the fixed point 
+			       function evaluated at a given iterate; 
+			       used in KIN_PICARD strategy only.
+			       (gval = uu - L^{-1}fval(uu))                    */
+  N_Vector kin_uscale;      /* iterate scaling vector                          */
+  N_Vector kin_fscale;      /* fval scaling vector                             */
+  N_Vector kin_pp;          /* incremental change vector (pp = unew-uu)        */
+  N_Vector kin_constraints; /* constraints vector                              */ 
+  N_Vector kin_vtemp1;      /* scratch vector #1                               */
+  N_Vector kin_vtemp2;      /* scratch vector #2                               */
+
+  /* space requirements for AA, Broyden and NLEN */ 
+  N_Vector kin_fold_aa;	    /* vector needed for AA, Broyden, and NLEN */
+  N_Vector kin_gold_aa;	    /* vector needed for AA, Broyden, and NLEN */
+  N_Vector *kin_df_aa;	    /* vector array needed for AA, Broyden, and NLEN */
+  N_Vector *kin_dg_aa;	    /* vector array needed for AA, Broyden and NLEN */
+  N_Vector *kin_q_aa;	    /* vector array needed for AA */
+  realtype *kin_gamma_aa;   /* array of size maa used in AA */
+  realtype *kin_R_aa;       /* array of size maa*maa used in AA */
+  int      *kin_ipt_map;    /* array of size maa used in AA */
+  long int kin_m_aa;	    /* parameter for AA, Broyden or NLEN */
+  booleantype kin_aamem_aa; /* sets additional memory needed for Anderson Acc */
+  booleantype kin_setstop_aa; /* determines whether user will set stopping criterion */
+
+  /* space requirements for vector storage */ 
+
+  long int kin_lrw1;        /* number of realtype-sized memory blocks needed
+			       for a single N_Vector                           */ 
+  long int kin_liw1;        /* number of int-sized memory blocks needed for
+			       a single N_Vecotr                               */ 
+  long int kin_lrw;         /* total number of realtype-sized memory blocks
+			       needed for all KINSOL work vectors              */
+  long int kin_liw;         /* total number of int-sized memory blocks needed
+			       for all KINSOL work vectors                     */
+
+  /* linear solver data */
+ 
+  /* function prototypes (pointers) */
+
+  int (*kin_linit)(struct KINMemRec *kin_mem);
+
+  int (*kin_lsetup)(struct KINMemRec *kin_mem);
+
+  int (*kin_lsolve)(struct KINMemRec *kin_mem, N_Vector xx, N_Vector bb, 
+		    realtype *sJpnorm, realtype *sFdotJp);
+
+  int (*kin_lfree)(struct KINMemRec *kin_mem);
+
+  booleantype kin_inexact_ls; /* flag set by the linear solver module
+				 (in linit) indicating whether this is an
+				 iterative linear solver (TRUE), or a direct
+				 linear solver (FALSE)                         */
+
+  void *kin_lmem;         /* pointer to linear solver memory block             */
+
+  realtype kin_fnorm;     /* value of L2-norm of fscale*fval                   */
+  realtype kin_f1norm;    /* f1norm = 0.5*(fnorm)^2                            */
+  realtype kin_sFdotJp;   /* value of scaled F(u) vector (fscale*fval)
+                             dotted with scaled J(u)*pp vector (set by lsolve) */
+  realtype kin_sJpnorm;   /* value of L2-norm of fscale*(J(u)*pp)
+                             (set by lsolve)                                   */
+
+  realtype kin_fnorm_sub; /* value of L2-norm of fscale*fval (subinterval)     */
+  booleantype kin_eval_omega; /* flag indicating that omega must be evaluated. */
+  realtype kin_omega;     /* constant value for real scalar used in test to
+			     determine if reduction of norm of nonlinear
+			     residual is sufficient. Unless a valid constant 
+                             value is specified by the user, omega is estimated
+                             from omega_min and omega_max at each iteration.    */
+  realtype kin_omega_min; /* lower bound on omega                               */
+  realtype kin_omega_max; /* upper bound on omega                               */
+  
+  /*
+   * -----------------------------------------------------------------
+   * Note: The KINLineSearch subroutine scales the values of the
+   * variables sFdotJp and sJpnorm by a factor rl (lambda) that is
+   * chosen by the line search algorithm such that the sclaed Newton
+   * step satisfies the following conditions:
+   *
+   *  F(u_k+1) <= F(u_k) + alpha*(F(u_k)^T * J(u_k))*p*rl
+   *
+   *  F(u_k+1) >= F(u_k) + beta*(F(u_k)^T * J(u_k))*p*rl
+   *
+   * where alpha = 1.0e-4, beta = 0.9, u_k+1 = u_k + rl*p,
+   * 0 < rl <= 1, J denotes the system Jacobian, and F represents
+   * the nonliner system function.
+   * -----------------------------------------------------------------
+   */
+
+  booleantype kin_MallocDone; /* flag indicating if KINMalloc has been
+				 called yet                                    */
+
+  /* message files */
+  /*-------------------------------------------
+    Error handler function and error ouput file 
+    -------------------------------------------*/
+
+  KINErrHandlerFn kin_ehfun;   /* Error messages are handled by ehfun          */
+  void *kin_eh_data;           /* dats pointer passed to ehfun                 */
+  FILE *kin_errfp;             /* KINSOL error messages are sent to errfp      */
+
+  KINInfoHandlerFn kin_ihfun;  /* Info messages are handled by ihfun           */
+  void *kin_ih_data;           /* dats pointer passed to ihfun                 */
+  FILE *kin_infofp;            /* where KINSol info messages are sent          */
+
+} *KINMem;
+
+/*
+ * =================================================================
+ *   I N T E R F A C E   T O   L I N E A R   S O L V E R
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : int (*kin_linit)(KINMem kin_mem)
+ * -----------------------------------------------------------------
+ * kin_linit initializes solver-specific data structures (including
+ * variables used as counters or for storing statistical information),
+ * but system memory allocation should be done by the subroutine
+ * that actually initializes the environment for liner solver
+ * package. If the linear system is to be preconditioned, then the
+ * variable setupNonNull (type booleantype) should be set to TRUE
+ * (predefined constant) and the kin_lsetup routine should be
+ * appropriately defined.
+ *
+ *  kinmem  pointer to an internal memory block allocated during
+ *          prior calls to KINCreate and KINMalloc
+ *
+ * If the necessary variables have been successfully initialized,
+ * then the kin_linit function should return 0 (zero). Otherwise,
+ * the subroutine should indicate a failure has occurred by
+ * returning a non-zero integer value.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : int (*kin_lsetup)(KINMem kin_mem)
+ * -----------------------------------------------------------------
+ * kin_lsetup interfaces with the user-supplied pset subroutine (the
+ * preconditioner setup routine), and updates relevant variable
+ * values (see KINSpgmrSetup/KINSpbcgSetup). Simply stated, the
+ * kin_lsetup routine prepares the linear solver for a subsequent
+ * call to the user-supplied kin_lsolve function.
+ *
+ *  kinmem  pointer to an internal memory block allocated during
+ *          prior calls to KINCreate and KINMalloc
+ *
+ * If successful, the kin_lsetup routine should return 0 (zero).
+ * Otherwise it should return a non-zero value.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : int (*kin_lsolve)(KINMem kin_mem, N_Vector xx,
+ *                N_Vector bb, realtype *sJpnorm, realtype *sFdotJp)
+ * -----------------------------------------------------------------
+ * kin_lsolve interfaces with the subroutine implementing the
+ * numerical method to be used to solve the linear system J*xx = bb,
+ * and must increment the relevant counter variable values in
+ * addition to computing certain values used by the global strategy
+ * and forcing term routines (see KINInexactNewton, KINLineSearch,
+ * KINForcingTerm, and KINSpgmrSolve/KINSpbcgSolve).
+ *
+ *  kinmem  pointer to an internal memory block allocated during
+ *          prior calls to KINCreate and KINMalloc
+ *
+ *  xx  vector (type N_Vector) set to initial guess by kin_lsolve
+ *      routine prior to calling the linear solver, but which upon
+ *      return contains an approximate solution of the linear
+ *      system J*xx = bb, where J denotes the system Jacobian
+ *
+ *  bb  vector (type N_Vector) set to -func(u) (negative of the
+ *      value of the system function evaluated at the current
+ *      iterate) by KINLinSolDrv before kin_lsolve is called
+ *
+ *  sJpnorm  holds the value of the L2-norm (Euclidean norm) of
+ *           fscale*(J(u)*pp) upon return
+ *
+ *  sFdotJp  holds the value of the scaled F(u) (fscale*F) dotted
+ *           with the scaled J(u)*pp vector upon return
+ *
+ * If successful, the kin_lsolve routine should return 0 (zero).
+ * Otherwise it should return a positive value if a re-evaluation
+ * of the lsetup function could recover, or a negative value if
+ * no such recovery is possible.
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : int (*kin_lfree)(KINMem kin_mem)
+ * -----------------------------------------------------------------
+ * kin_lfree is called by KINFree and should free (deallocate) all
+ * system memory resources allocated for the linear solver module
+ * (see KINSpgmrFree/KINSpbcgFree).  It should return 0 upon 
+ * success, nonzero on failure.
+ *
+ *  kinmem  pointer to an internal memory block allocated during
+ *          prior calls to KINCreate and KINMalloc
+ * -----------------------------------------------------------------
+ */
+
+/*
+ * =================================================================
+ *   K I N S O L    I N T E R N A L   F U N C T I O N S
+ * =================================================================
+ */
+
+
+/* High level error handler */
+
+void KINProcessError(KINMem kin_mem, 
+		     int error_code, const char *module, const char *fname, 
+		     const char *msgfmt, ...);
+
+/* Prototype of internal errHandler function */
+
+void KINErrHandler(int error_code, const char *module, const char *function, 
+		   char *msg, void *user_data);
+
+
+/* High level info handler */
+
+void KINPrintInfo(KINMem kin_mem, 
+		  int info_code, const char *module, const char *fname, 
+		  const char *msgfmt, ...);
+
+/* Prototype of internal infoHandler function */
+
+void KINInfoHandler(const char *module, const char *function, 
+		    char *msg, void *user_data);
+
+/*
+ * =================================================================
+ *   K I N S O L    E R R O R    M E S S A G E S
+ * =================================================================
+ */
+
+#define MSG_MEM_FAIL           "A memory request failed."
+#define MSG_NO_MEM             "kinsol_mem = NULL illegal."
+#define MSG_BAD_NVECTOR        "A required vector operation is not implemented."
+#define MSG_FUNC_NULL          "func = NULL illegal."
+#define MSG_NO_MALLOC          "Attempt to call before KINMalloc illegal."
+
+#define MSG_BAD_PRINTFL        "Illegal value for printfl."
+#define MSG_BAD_MXITER         "Illegal value for mxiter."
+#define MSG_BAD_MSBSET         "Illegal msbset < 0."
+#define MSG_BAD_MSBSETSUB      "Illegal msbsetsub < 0."
+#define MSG_BAD_ETACHOICE      "Illegal value for etachoice."
+#define MSG_BAD_ETACONST       "eta out of range."
+#define MSG_BAD_GAMMA          "gamma out of range."
+#define MSG_BAD_ALPHA          "alpha out of range."
+#define MSG_BAD_MXNEWTSTEP     "Illegal mxnewtstep < 0."
+#define MSG_BAD_RELFUNC        "relfunc < 0 illegal."
+#define MSG_BAD_FNORMTOL       "fnormtol < 0 illegal."
+#define MSG_BAD_SCSTEPTOL      "scsteptol < 0 illegal."
+#define MSG_BAD_MXNBCF         "mxbcf < 0 illegal."
+#define MSG_BAD_CONSTRAINTS    "Illegal values in constraints vector."
+#define MSG_BAD_OMEGA          "scalars < 0 illegal."
+#define MSG_BAD_MAA            "maa < 0 illegal."
+#define MSG_ZERO_MAA           "maa = 0 illegal."
+
+#define MSG_LSOLV_NO_MEM       "The linear solver memory pointer is NULL."
+#define MSG_UU_NULL            "uu = NULL illegal."
+#define MSG_BAD_GLSTRAT        "Illegal value for global strategy."
+#define MSG_BAD_USCALE         "uscale = NULL illegal."
+#define MSG_USCALE_NONPOSITIVE "uscale has nonpositive elements."
+#define MSG_BAD_FSCALE         "fscale = NULL illegal."
+#define MSG_FSCALE_NONPOSITIVE "fscale has nonpositive elements."
+#define MSG_CONSTRAINTS_NOTOK  "Constraints not allowed with fixed point or Picard iterations"
+#define MSG_INITIAL_CNSTRNT    "Initial guess does NOT meet constraints."
+#define MSG_LINIT_FAIL         "The linear solver's init routine failed."
+
+#define MSG_SYSFUNC_FAILED      "The system function failed in an unrecoverable manner."
+#define MSG_SYSFUNC_FIRST       "The system function failed at the first call."
+#define MSG_LSETUP_FAILED       "The linear solver's setup function failed in an unrecoverable manner."
+#define MSG_LSOLVE_FAILED       "The linear solver's solve function failed in an unrecoverable manner."
+#define MSG_LINSOLV_NO_RECOVERY "The linear solver's solve function failed recoverably, but the Jacobian data is already current."
+#define MSG_LINESEARCH_NONCONV  "The line search algorithm was unable to find an iterate sufficiently distinct from the current iterate."
+#define MSG_LINESEARCH_BCFAIL   "The line search algorithm was unable to satisfy the beta-condition for nbcfails iterations."
+#define MSG_MAXITER_REACHED     "The maximum number of iterations was reached before convergence."
+#define MSG_MXNEWT_5X_EXCEEDED  "Five consecutive steps have been taken that satisfy a scaled step length test."
+#define MSG_SYSFUNC_REPTD       "Unable to correct repeated recoverable system function errors."
+#define MSG_NOL_FAIL            "Unable to find user's Linear Jacobian, which is required for the KIN_PICARD Strategy"
+
+/*
+ * =================================================================
+ *   K I N S O L    I N F O    M E S S A G E S
+ * =================================================================
+ */
+
+#define INFO_RETVAL    "Return value: %d"
+#define INFO_ADJ       "no. of lambda adjustments = %ld"
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define INFO_NNI       "nni = %4ld   nfe = %6ld   fnorm = %26.16Lg"
+#define INFO_TOL       "scsteptol = %12.3Lg  fnormtol = %12.3Lg"
+#define INFO_FMAX      "scaled f norm (for stopping) = %12.3Lg"
+#define INFO_PNORM     "pnorm = %12.4Le"
+#define INFO_PNORM1    "(ivio=1) pnorm = %12.4Le"
+#define INFO_FNORM     "fnorm(L2) = %20.8Le"
+#define INFO_LAM       "min_lam = %11.4Le   f1norm = %11.4Le   pnorm = %11.4Le"
+#define INFO_ALPHA     "fnorm = %15.8Le   f1norm = %15.8Le   alpha_cond = %15.8Le  lam = %15.8Le"
+#define INFO_BETA      "f1norm = %15.8Le   beta_cond = %15.8Le   lam = %15.8Le"
+#define INFO_ALPHABETA "f1norm = %15.8Le  alpha_cond = %15.8Le  beta_cond = %15.8Le  lam = %15.8Le"
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define INFO_NNI       "nni = %4ld   nfe = %6ld   fnorm = %26.16lg"
+#define INFO_TOL       "scsteptol = %12.3lg  fnormtol = %12.3lg"
+#define INFO_FMAX      "scaled f norm (for stopping) = %12.3lg"
+#define INFO_PNORM     "pnorm = %12.4le"
+#define INFO_PNORM1    "(ivio=1) pnorm = %12.4le"
+#define INFO_FNORM     "fnorm(L2) = %20.8le"
+#define INFO_LAM       "min_lam = %11.4le   f1norm = %11.4le   pnorm = %11.4le"
+#define INFO_ALPHA     "fnorm = %15.8le   f1norm = %15.8le   alpha_cond = %15.8le  lam = %15.8le"
+#define INFO_BETA      "f1norm = %15.8le   beta_cond = %15.8le   lam = %15.8le"
+#define INFO_ALPHABETA "f1norm = %15.8le  alpha_cond = %15.8le  beta_cond = %15.8le  lam = %15.8le"
+
+#else
+
+#define INFO_NNI       "nni = %4ld   nfe = %6ld   fnorm = %26.16g"
+#define INFO_TOL       "scsteptol = %12.3g  fnormtol = %12.3g"
+#define INFO_FMAX      "scaled f norm (for stopping) = %12.3g"
+#define INFO_PNORM     "pnorm = %12.4e"
+#define INFO_PNORM1    "(ivio=1) pnorm = %12.4e"
+#define INFO_FNORM     "fnorm(L2) = %20.8e"
+#define INFO_LAM       "min_lam = %11.4e   f1norm = %11.4e   pnorm = %11.4e"
+#define INFO_ALPHA     "fnorm = %15.8e   f1norm = %15.8e   alpha_cond = %15.8e  lam = %15.8e"
+#define INFO_BETA      "f1norm = %15.8e   beta_cond = %15.8e   lam = %15.8e"
+#define INFO_ALPHABETA "f1norm = %15.8e  alpha_cond = %15.8e  beta_cond = %15.8e  lam = %15.8e"
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/kinsol/kinsol_io.c b/src/kinsol/kinsol_io.c
new file mode 100644
index 0000000..08d67b3
--- /dev/null
+++ b/src/kinsol/kinsol_io.c
@@ -0,0 +1,1060 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4368 $
+ * $Date: 2015-02-12 12:25:15 -0800 (Thu, 12 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Allan Taylor, Alan Hindmarsh, Radu Serban, and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the optional input and output
+ * functions for the KINSOL solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "kinsol_impl.h"
+#include <sundials/sundials_types.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO      RCONST(0.0)
+#define POINT1    RCONST(0.1)
+#define ONETHIRD  RCONST(0.3333333333333333)
+#define HALF      RCONST(0.5)
+#define TWOTHIRDS RCONST(0.6666666666666667)
+#define POINT9    RCONST(0.9)
+#define ONE       RCONST(1.0)
+#define TWO       RCONST(2.0)
+#define TWOPT5    RCONST(2.5)
+
+#define liw  (kin_mem->kin_liw)
+#define lrw  (kin_mem->kin_lrw)
+#define liw1 (kin_mem->kin_liw1)
+#define lrw1 (kin_mem->kin_lrw1)
+
+/* 
+ * =================================================================
+ * KINSOL optional input functions
+ * =================================================================
+ */
+
+/* 
+ * -----------------------------------------------------------------
+ * KINSetErrHandlerFn
+ * -----------------------------------------------------------------
+ */
+
+int KINSetErrHandlerFn(void *kinmem, KINErrHandlerFn ehfun, void *eh_data)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetErrHandlerFn", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  kin_mem->kin_ehfun = ehfun;
+  kin_mem->kin_eh_data = eh_data;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetErrFile
+ * -----------------------------------------------------------------
+ */
+
+int KINSetErrFile(void *kinmem, FILE *errfp)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetErrFile", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  kin_mem->kin_errfp = errfp;
+
+  return(KIN_SUCCESS);
+}
+
+#define errfp (kin_mem->kin_errfp)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetPrintLevel
+ * -----------------------------------------------------------------
+ */
+
+int KINSetPrintLevel(void *kinmem, int printfl)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetPrintLevel", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if ((printfl < 0) || (printfl > 3)) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetPrintLevel", MSG_BAD_PRINTFL);
+    return(KIN_ILL_INPUT);
+  }
+
+  kin_mem->kin_printfl = printfl;
+
+  return(KIN_SUCCESS);
+}
+
+/* 
+ * -----------------------------------------------------------------
+ * KINSetInfoHandlerFn
+ * -----------------------------------------------------------------
+ */
+
+int KINSetInfoHandlerFn(void *kinmem, KINInfoHandlerFn ihfun, void *ih_data)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetInfoHandlerFn", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  kin_mem->kin_ihfun = ihfun;
+  kin_mem->kin_ih_data = ih_data;
+
+  return(KIN_SUCCESS);
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetInfoFile
+ * -----------------------------------------------------------------
+ */
+
+int KINSetInfoFile(void *kinmem, FILE *infofp)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetInfoFile", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  kin_mem->kin_infofp = infofp;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetUserData
+ * -----------------------------------------------------------------
+ */
+
+int KINSetUserData(void *kinmem, void *user_data)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetUserData", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  kin_mem->kin_user_data = user_data;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetMAA
+ * -----------------------------------------------------------------
+ */
+
+int KINSetMAA(void *kinmem, long int maa)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetMAA", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (maa < 0) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetMAA", MSG_BAD_MAA);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (maa > kin_mem->kin_mxiter) maa = kin_mem->kin_mxiter;
+
+  kin_mem = (KINMem) kinmem;
+  kin_mem->kin_m_aa = maa;
+  kin_mem->kin_aamem_aa = (maa == 0) ? FALSE : TRUE;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetAAStopCrit
+ * -----------------------------------------------------------------
+ */
+
+/*  CSW: This function is currently not supported.
+
+int KINSetAAStopCrit(void *kinmem, booleantype setstop)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetAAStopCrit", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  kin_mem->kin_setstop_aa = setstop;
+
+  return(KIN_SUCCESS);
+}
+*/
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetNumMaxIters
+ * -----------------------------------------------------------------
+ */
+
+int KINSetNumMaxIters(void *kinmem, long int mxiter)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetNumMaxIters", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (mxiter < 0) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetNumMaxIters", MSG_BAD_MXITER);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (mxiter == 0)
+    kin_mem->kin_mxiter = MXITER_DEFAULT;
+  else
+    kin_mem->kin_mxiter = mxiter;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetNoInitSetup
+ * -----------------------------------------------------------------
+ */
+
+int KINSetNoInitSetup(void *kinmem, booleantype noInitSetup)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetNoInitSetup", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  kin_mem->kin_noInitSetup = noInitSetup;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetNoResMon
+ * -----------------------------------------------------------------
+ */
+
+int KINSetNoResMon(void *kinmem, booleantype noResMon)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetNoResMon", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  kin_mem->kin_noResMon = noResMon;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetMaxSetupCalls
+ * -----------------------------------------------------------------
+ */
+
+int KINSetMaxSetupCalls(void *kinmem, long int msbset)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetMaxSetupCalls", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (msbset < 0) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetMaxSetupCalls", MSG_BAD_MSBSET);
+    return(KIN_ILL_INPUT);
+  }
+  
+  if (msbset == 0)
+    kin_mem->kin_msbset = MSBSET_DEFAULT;
+  else
+    kin_mem->kin_msbset = msbset;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetMaxSubSetupCalls
+ * -----------------------------------------------------------------
+ */
+
+int KINSetMaxSubSetupCalls(void *kinmem, long int msbsetsub)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetMaxSubSetupCalls", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (msbsetsub < 0) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetMaxSubSetupCalls", MSG_BAD_MSBSETSUB);
+    return(KIN_ILL_INPUT);
+  }
+  
+  if (msbsetsub == 0)
+    kin_mem->kin_msbset_sub = MSBSET_SUB_DEFAULT;
+  else
+    kin_mem->kin_msbset_sub = msbsetsub;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetEtaForm
+ * -----------------------------------------------------------------
+ */
+
+int KINSetEtaForm(void *kinmem, int etachoice)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetEtaForm", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if ((etachoice != KIN_ETACONSTANT) && 
+      (etachoice != KIN_ETACHOICE1)  && 
+      (etachoice != KIN_ETACHOICE2)) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetEtaForm", MSG_BAD_ETACHOICE);
+    return(KIN_ILL_INPUT);
+  }
+
+  kin_mem->kin_etaflag = etachoice;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetEtaConstValue
+ * -----------------------------------------------------------------
+ */
+
+int KINSetEtaConstValue(void *kinmem, realtype eta)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetEtaConstValue", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if ((eta < ZERO) || (eta > ONE)) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetEtaConstValue", MSG_BAD_ETACONST);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (eta == ZERO)
+    kin_mem->kin_eta = POINT1;
+  else
+    kin_mem->kin_eta = eta;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetEtaParams
+ * -----------------------------------------------------------------
+ */
+
+int KINSetEtaParams(void *kinmem, realtype egamma, realtype ealpha)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetEtaParams", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if ((ealpha <= ONE) || (ealpha > TWO))
+    if (ealpha != ZERO) {
+      KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetEtaParams", MSG_BAD_ALPHA);
+      return(KIN_ILL_INPUT);
+    }
+  
+  if (ealpha == ZERO) 
+    kin_mem->kin_eta_alpha = TWO;
+  else
+    kin_mem->kin_eta_alpha = ealpha;
+
+  if ((egamma <= ZERO) || (egamma > ONE))
+    if (egamma != ZERO) {
+      KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetEtaParams", MSG_BAD_GAMMA);
+      return(KIN_ILL_INPUT);
+    }
+
+  if (egamma == ZERO)
+    kin_mem->kin_eta_gamma = POINT9;
+  else
+    kin_mem->kin_eta_gamma = egamma;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetResMonParams
+ * -----------------------------------------------------------------
+ */
+
+int KINSetResMonParams(void *kinmem, realtype omegamin, realtype omegamax)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetResMonParams", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  /* check omegamin */
+
+  if (omegamin < ZERO) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetResMonParams", MSG_BAD_OMEGA);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (omegamin == ZERO) 
+    kin_mem->kin_omega_min = OMEGA_MIN;
+  else
+    kin_mem->kin_omega_min = omegamin;
+
+  /* check omegamax */
+
+  if (omegamax < ZERO) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetResMonParams", MSG_BAD_OMEGA);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (omegamax == ZERO) {
+
+    if (kin_mem->kin_omega_min > OMEGA_MAX) {
+      KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetResMonParams", MSG_BAD_OMEGA);
+      return(KIN_ILL_INPUT);
+    }
+    else kin_mem->kin_omega_max = OMEGA_MAX;
+
+  } else {
+
+    if (kin_mem->kin_omega_min > omegamax) {
+      KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetResMonParams", MSG_BAD_OMEGA);
+      return(KIN_ILL_INPUT);
+    }
+    else kin_mem->kin_omega_max = omegamax;
+
+  }
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetResMonConstValue
+ * -----------------------------------------------------------------
+ */
+
+int KINSetResMonConstValue(void *kinmem, realtype omegaconst)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetResMonConstValue", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  /* check omegaconst */
+
+  if (omegaconst < ZERO) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetResMonConstValue", MSG_BAD_OMEGA);
+    return(KIN_ILL_INPUT);
+  }
+
+  /* Load omega value. A value of 0 will force using omega_min and omega_max */
+  kin_mem->kin_omega = omegaconst;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetNoMinEps
+ * -----------------------------------------------------------------
+ */
+
+int KINSetNoMinEps(void *kinmem, booleantype noMinEps)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetNoMinEps", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  kin_mem->kin_noMinEps = noMinEps;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetMaxNewtonStep
+ * -----------------------------------------------------------------
+ */
+
+int KINSetMaxNewtonStep(void *kinmem, realtype mxnewtstep)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetMaxNewtonStep", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (mxnewtstep < ZERO) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetMaxNewtonStep", MSG_BAD_MXNEWTSTEP);
+    return(KIN_ILL_INPUT);
+  }
+
+  /* Note: passing a value of 0.0 will use the default
+     value (computed in KINSolInit) */
+
+  kin_mem->kin_mxnstepin = mxnewtstep;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetMaxBetaFails
+ * -----------------------------------------------------------------
+ */
+
+int KINSetMaxBetaFails(void *kinmem, long int mxnbcf)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetMaxBetaFails", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (mxnbcf < 0) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetMaxBetaFails", MSG_BAD_MXNBCF);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (mxnbcf == 0)
+    kin_mem->kin_mxnbcf = MXNBCF_DEFAULT;
+  else
+    kin_mem->kin_mxnbcf = mxnbcf;
+
+  return(KIN_SUCCESS);
+
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetRelErrFunc
+ * -----------------------------------------------------------------
+ */
+
+int KINSetRelErrFunc(void *kinmem, realtype relfunc)
+{
+  KINMem kin_mem;
+  realtype uround;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetRelErrFunc", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (relfunc < ZERO) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetRelErrFunc", MSG_BAD_RELFUNC);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (relfunc == ZERO) {
+    uround = kin_mem->kin_uround;
+    kin_mem->kin_sqrt_relfunc = SUNRsqrt(uround);
+  } else {
+    kin_mem->kin_sqrt_relfunc = SUNRsqrt(relfunc);
+  }
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetFuncNormTol
+ * -----------------------------------------------------------------
+ */
+
+int KINSetFuncNormTol(void *kinmem, realtype fnormtol)
+{
+  KINMem kin_mem;
+  realtype uround;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetFuncNormTol", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (fnormtol < ZERO) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetFuncNormTol", MSG_BAD_FNORMTOL);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (fnormtol == ZERO) {
+    uround = kin_mem->kin_uround;
+    kin_mem->kin_fnormtol = SUNRpowerR(uround,ONETHIRD);
+  } else {
+    kin_mem->kin_fnormtol = fnormtol;
+  }
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetScaledStepTol
+ * -----------------------------------------------------------------
+ */
+
+int KINSetScaledStepTol(void *kinmem, realtype scsteptol)
+{
+  KINMem kin_mem;
+  realtype uround;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetScaledStepTol", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (scsteptol < ZERO) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetScaledStepTol", MSG_BAD_SCSTEPTOL);
+    return(KIN_ILL_INPUT);
+  }
+
+  if (scsteptol == ZERO) {
+    uround = kin_mem->kin_uround;
+    kin_mem->kin_scsteptol = SUNRpowerR(uround,TWOTHIRDS);
+  } else {
+    kin_mem->kin_scsteptol = scsteptol;
+  }
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetConstraints
+ * -----------------------------------------------------------------
+ */
+
+int KINSetConstraints(void *kinmem, N_Vector constraints)
+{
+  KINMem kin_mem;
+  realtype temptest;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetConstraints", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (constraints == NULL) {
+    if (kin_mem->kin_constraintsSet) {
+      N_VDestroy(kin_mem->kin_constraints);
+      lrw -= lrw1;
+      liw -= liw1;
+    }
+    kin_mem->kin_constraintsSet = FALSE;
+    return(KIN_SUCCESS);
+  }
+
+  /* Check the constraints vector */
+
+  temptest = N_VMaxNorm(constraints);
+  if (temptest > TWOPT5){ 
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetConstraints", MSG_BAD_CONSTRAINTS);
+    return(KIN_ILL_INPUT); 
+  }
+
+  if (!kin_mem->kin_constraintsSet) {
+    kin_mem->kin_constraints = N_VClone(constraints);
+    lrw += lrw1;
+    liw += liw1;
+    kin_mem->kin_constraintsSet = TRUE;
+  }
+
+  /* Load the constraint vector */
+
+  N_VScale(ONE, constraints, kin_mem->kin_constraints);
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSetSysFunc
+ * -----------------------------------------------------------------
+ */
+
+int KINSetSysFunc(void *kinmem, KINSysFn func)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSetSysFunc", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  if (func == NULL) {
+    KINProcessError(NULL, KIN_ILL_INPUT, "KINSOL", "KINSetSysFunc", MSG_FUNC_NULL);
+    return(KIN_ILL_INPUT);
+  }
+
+  kin_mem->kin_func = func;
+
+  return(KIN_SUCCESS);
+}
+
+/* 
+ * =================================================================
+ * Readability constants
+ * =================================================================
+ */
+
+#define nni (kin_mem->kin_nni)
+#define nfe (kin_mem->kin_nfe)
+#define nbcf (kin_mem->kin_nbcf)  
+#define nbktrk (kin_mem->kin_nbktrk)
+#define stepl (kin_mem->kin_stepl)
+#define fnorm (kin_mem->kin_fnorm)
+#define liw (kin_mem->kin_liw)
+#define lrw (kin_mem->kin_lrw)
+
+/* 
+ * =================================================================
+ * KINSOL optional input functions
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINGetWorkSpace
+ * -----------------------------------------------------------------
+ */
+
+int KINGetWorkSpace(void *kinmem, long int *lenrw, long int *leniw)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINGetWorkSpace", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+
+  *lenrw = lrw;
+  *leniw = liw;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINGetNumNonlinSolvIters
+ * -----------------------------------------------------------------
+ */
+
+int KINGetNumNonlinSolvIters(void *kinmem, long int *nniters)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINGetNumNonlinSolvIters", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  *nniters = nni;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINGetNumFuncEvals
+ * -----------------------------------------------------------------
+ */
+
+int KINGetNumFuncEvals(void *kinmem, long int *nfevals)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINGetNumFuncEvals", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  *nfevals = nfe;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINGetNumBetaCondFails
+ * -----------------------------------------------------------------
+ */
+
+int KINGetNumBetaCondFails(void *kinmem, long int *nbcfails)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINGetNumBetaCondFails", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  *nbcfails = nbcf;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINGetNumBacktrackOps
+ * -----------------------------------------------------------------
+ */
+
+int KINGetNumBacktrackOps(void *kinmem, long int *nbacktr)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINGetNumBacktrackOps", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  *nbacktr = nbktrk;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINGetFuncNorm
+ * -----------------------------------------------------------------
+ */
+
+int KINGetFuncNorm(void *kinmem, realtype *funcnorm)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINGetFuncNorm", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  *funcnorm = kin_mem->kin_fnorm;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINGetStepLength
+ * -----------------------------------------------------------------
+ */
+
+int KINGetStepLength(void *kinmem, realtype *steplength)
+{
+  KINMem kin_mem;
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINGetStepLength", MSG_NO_MEM);
+    return(KIN_MEM_NULL);
+  }
+
+  kin_mem = (KINMem) kinmem;
+  *steplength = stepl;
+
+  return(KIN_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINGetReturnFlagName
+ * -----------------------------------------------------------------
+ */
+
+char *KINGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(24*sizeof(char));
+
+  switch(flag) {
+  case KIN_SUCCESS:
+    sprintf(name, "KIN_SUCCESS");
+    break;
+  case KIN_INITIAL_GUESS_OK:
+    sprintf(name, "KIN_INITIAL_GUESS_OK");
+    break;
+  case KIN_STEP_LT_STPTOL:
+    sprintf(name, "KIN_STEP_LT_STPTOL");
+    break;
+  case KIN_WARNING:
+    sprintf(name, "KIN_WARNING");
+    break;
+  case KIN_MEM_NULL:
+    sprintf(name, "KIN_MEM_NULL");
+    break;
+  case KIN_ILL_INPUT:
+    sprintf(name, "KIN_ILL_INPUT");
+    break;
+  case KIN_NO_MALLOC:
+    sprintf(name, "KIN_NO_MALLOC");
+    break;
+  case KIN_MEM_FAIL:
+    sprintf(name, "KIN_MEM_FAIL");
+    break;
+  case KIN_LINESEARCH_NONCONV:
+    sprintf(name, "KIN_LINESEARCH_NONCONV");
+    break;
+  case KIN_MAXITER_REACHED:
+    sprintf(name, "KIN_MAXITER_REACHED");
+    break;
+  case KIN_MXNEWT_5X_EXCEEDED:
+    sprintf(name, "KIN_MXNEWT_5X_EXCEEDED");
+    break;
+  case KIN_LINESEARCH_BCFAIL:
+    sprintf(name, "KIN_LINESEARCH_BCFAIL");
+    break;
+  case KIN_LINSOLV_NO_RECOVERY:
+    sprintf(name, "KIN_LINSOLV_NO_RECOVERY");
+    break;
+  case KIN_LINIT_FAIL:
+    sprintf(name, "KIN_LINIT_FAIL");
+    break;
+  case KIN_LSETUP_FAIL:
+    sprintf(name, "KIN_LSETUP_FAIL");
+    break;
+  case KIN_LSOLVE_FAIL:
+    sprintf(name, "KIN_LSOLVE_FAIL");
+    break;
+  default:
+    sprintf(name, "NONE");
+  }
+
+  return(name);
+}
diff --git a/src/kinsol/kinsol_klu.c b/src/kinsol/kinsol_klu.c
new file mode 100644
index 0000000..646684e
--- /dev/null
+++ b/src/kinsol/kinsol_klu.c
@@ -0,0 +1,575 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the KINKLU linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_math.h>
+
+#include "kinsol/kinsol_klu.h"
+#include "kinsol_impl.h"
+#include "kinsol_sparse_impl.h"
+#include "sundials/sundials_klu_impl.h"
+
+/* Constants */
+
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+#define TWOTHIRDS    RCONST(0.6666666666666667)
+
+/* KINKLU linit, lsetup, lsolve, and lfree routines */
+ 
+static int kinKLUInit(KINMem kin_mem);
+static int kinKLUSetup(KINMem kin_mem);
+static int kinKLUSolve(KINMem kin_mem, N_Vector x, N_Vector b,
+		       realtype *sJpnorm, realtype *sFdotJp);		       
+static int kinKLUFree(KINMem kin_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * KINKLU
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the KINSOL / KLU linear solver module.  
+ * KINKLU first calls the existing lfree routine if this is not NULL.
+ * Then it sets the kin_linit, kin_lsetup, kin_lsolve, kin_lperf, and
+ * kin_lfree fields in (*kin_mem) to be kinKLUInit, kinKLUSetup,
+ * kinKLUSolve, NULL, and kinKLUFree, respectively.
+ * It allocates memory for a structure of type kinkluMemRec and sets
+ * the kin_lmem field in (*kin_mem) to the address of this structure.
+ * It sets setupNonNull in (*kin_mem) to TRUE.
+ * Finally, it allocates memory for KLU.
+ * The return value is KINSLS_SUCCESS = 0, KINSLS_LMEM_FAIL = -1,
+ * or KINSLS_ILL_INPUT = -2.
+ *
+ * NOTE: The KLU linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, KINKLU will first 
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int KINKLU(void *kin_mem_v, int n, int nnz, int sparsetype)
+{
+  KINMem kin_mem;
+  KINSlsMem kinsls_mem;
+  KLUData klu_data;
+  int flag;
+
+  /* Return immediately if kin_mem is NULL. */
+  if (kin_mem_v == NULL) {
+    KINProcessError(NULL, KINSLS_MEM_NULL, "KINSLS", "KINKLU", 
+                    MSGSP_KINMEM_NULL);
+    return(KINSLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kin_mem_v;
+
+  /* Test if the NVECTOR package is compatible with the Direct solver */
+  if (kin_mem->kin_vtemp1->ops->nvgetarraypointer == NULL) {
+    KINProcessError(kin_mem, KINSLS_ILL_INPUT, "KINSLS", "KINKLU", 
+                    MSGSP_BAD_NVECTOR);
+    return(KINSLS_ILL_INPUT);
+  }
+
+  if (kin_mem->kin_lfree != NULL) kin_mem->kin_lfree(kin_mem);
+
+  /* Set five main function fields in kin_mem. */
+  kin_mem->kin_linit  = kinKLUInit;
+  kin_mem->kin_lsetup = kinKLUSetup;
+  kin_mem->kin_lsolve = kinKLUSolve;
+  kin_mem->kin_lfree  = kinKLUFree;
+
+  /* Get memory for kinSlsMemRec. */
+  kinsls_mem = (KINSlsMem) malloc(sizeof(struct KINSlsMemRec));
+  if (kinsls_mem == NULL) {
+    KINProcessError(kin_mem, KINSLS_MEM_FAIL, "KINSLS", "KINKLU", 
+                    MSGSP_MEM_FAIL);
+    return(KINSLS_MEM_FAIL);
+  }
+
+  /* Get memory for KLUData. */
+  klu_data = (KLUData)malloc(sizeof(struct KLUDataRec));
+  if (klu_data == NULL) {
+    KINProcessError(kin_mem, KINSLS_MEM_FAIL, "KINSLS", "KINKLU", 
+                    MSGSP_MEM_FAIL);
+    return(KINSLS_MEM_FAIL);
+  }
+
+  kin_mem->kin_setupNonNull = TRUE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  kinsls_mem->s_jaceval = NULL;
+  kinsls_mem->s_jacdata = NULL;
+
+  /* Allocate memory for the sparse Jacobian */
+  kinsls_mem->s_JacMat = SparseNewMat(n, n, nnz, sparsetype);
+  if (kinsls_mem->s_JacMat == NULL) {
+    KINProcessError(kin_mem, KINSLS_MEM_FAIL, "KINSLS", "KINKLU", 
+                    MSGSP_MEM_FAIL);
+    return(KINSLS_MEM_FAIL);
+  }
+
+  /* Initialize KLU structures */
+  switch (sparsetype) {
+    case CSC_MAT:
+      klu_data->sun_klu_solve = &klu_solve;
+      break;
+    case CSR_MAT:
+      klu_data->sun_klu_solve = &klu_tsolve;
+      break;
+    default:
+      SparseDestroyMat(kinsls_mem->s_JacMat);
+      free(klu_data);
+      free(kinsls_mem);
+      return(KINSLS_ILL_INPUT);
+  }
+  klu_data->s_Symbolic = NULL;
+  klu_data->s_Numeric = NULL;
+
+  /* Set default parameters for KLU */
+  flag = klu_defaults(&klu_data->s_Common);
+  if (flag == 0) {
+    KINProcessError(kin_mem, KINSLS_PACKAGE_FAIL, "KINSLS", "KINKLU", 
+                    MSGSP_PACKAGE_FAIL);
+    return(KINSLS_PACKAGE_FAIL);
+  }
+  /* Set ordering to COLAMD as the kinsol default use.
+     Users can set a different value with KINKLUSetOrdering,
+     and the user-set value is loaded before any call to klu_analyze in
+     kinKLUSetup.  */
+  klu_data->s_ordering = 1;
+  klu_data->s_Common.ordering = klu_data->s_ordering;
+
+  /* This is a direct linear solver */
+  kin_mem->kin_inexact_ls = FALSE;
+
+  /* Attach linear solver memory to the nonlinear solver memory */
+  kinsls_mem->s_solver_data = (void *) klu_data;
+  kin_mem->kin_lmem = kinsls_mem;
+
+  kinsls_mem->s_last_flag = KINSLS_SUCCESS;
+
+  return(KINSLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * KINKLUReInit
+ * -----------------------------------------------------------------
+ * This routine reinitializes memory and flags for a new factorization 
+ * (symbolic and numeric) to be conducted at the next solver setup
+ * call.  This routine is useful in the cases where the number of nonzeroes 
+ * has changed or if the structure of the linear system has changed
+ * which would require a new symbolic (and numeric factorization).
+ *
+ * The reinit_type argumenmt governs the level of reinitialization:
+ *
+ * reinit_type = 1: The Jacobian matrix will be destroyed and 
+ *                  a new one will be allocated based on the nnz
+ *                  value passed to this call. New symbolic and
+ *                  numeric factorizations will be completed at the next
+ *                  solver setup.
+ *
+ * reinit_type = 2: Only symbolic and numeric factorizations will be 
+ *                  completed.  It is assumed that the Jacobian size
+ *                  has not exceeded the size of nnz given in the prior
+ *                  call to KINKLU.
+ *
+ * This routine assumes no other changes to solver use are necessary.
+ *
+ * The return value is KINSLS_SUCCESS = 0, KINSLS_MEM_NULL = -1, 
+ * KINSLS_LMEM_NULL = -2, KINSLS_ILL_INPUT = -3, or KINSLS_MEM_FAIL = -4.
+ *
+ * -----------------------------------------------------------------
+ */
+
+int KINKLUReInit(void *kin_mem_v, int n, int nnz, int reinit_type)
+{
+  KINMem kin_mem;
+  KINSlsMem kinsls_mem;
+  KLUData klu_data;
+
+  /* Return immediately if kin_mem is NULL. */
+  if (kin_mem_v == NULL) {
+    KINProcessError(NULL, KINSLS_MEM_NULL, "KINSLS", "KINKLUReInit", 
+                    MSGSP_KINMEM_NULL);
+    return(KINSLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kin_mem_v;
+
+  /* Return immediately if kin_lmem is NULL. */
+  if (kin_mem->kin_lmem == NULL) {
+    KINProcessError(NULL, KINSLS_LMEM_NULL, "KINSLS", "KINKLUReInit", 
+                    MSGSP_LMEM_NULL);
+    return(KINSLS_LMEM_NULL);
+  }
+  kinsls_mem = (KINSlsMem) (kin_mem->kin_lmem);
+  klu_data = (KLUData) kinsls_mem->s_solver_data;
+
+  /* Return if reinit_type is not valid */
+  if ((reinit_type != 1) && (reinit_type != 2)) {
+    KINProcessError(NULL, KINSLS_ILL_INPUT, "KINSLS", "KINKLUReInit", 
+                    MSGSP_ILL_INPUT);
+    return(KINSLS_ILL_INPUT);
+  }
+
+  if (reinit_type == 1) {
+
+    /* Destroy previous Jacobian information */
+    if (kinsls_mem->s_JacMat) {
+      SparseDestroyMat(kinsls_mem->s_JacMat);
+    }
+
+    /* Allocate memory for the sparse Jacobian */
+    kinsls_mem->s_JacMat = SparseNewMat(n, n, nnz, kinsls_mem->sparsetype);
+    if (kinsls_mem->s_JacMat == NULL) {
+      KINProcessError(kin_mem, KINSLS_MEM_FAIL, "KINSLS", "KINKLU", 
+                      MSGSP_MEM_FAIL);
+      return(KINSLS_MEM_FAIL);
+    }
+  }
+
+  /* Free the prior factorazation and reset for first factorization */
+  if( klu_data->s_Symbolic != NULL)
+    klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  if( klu_data->s_Numeric != NULL)
+    klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  kinsls_mem->s_first_factorize = 1;
+
+  kinsls_mem->s_last_flag = KINSLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * KINKLU interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the KINKLU
+  linear solver module.  
+  It returns 0 if successful.
+*/
+
+static int kinKLUInit(KINMem kin_mem)
+{
+  KINSlsMem kinsls_mem;
+
+  kinsls_mem = (KINSlsMem)kin_mem->kin_lmem;
+
+  kinsls_mem->s_jacdata = kin_mem->kin_user_data;
+
+  kinsls_mem->s_nje = 0;
+  /* This forces factorization for every call to KINSol */
+  kinsls_mem->s_first_factorize = 1;
+
+  kinsls_mem->s_last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the KINKLU linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     KINSLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int kinKLUSetup(KINMem kin_mem)
+{
+  int retval;
+  KINSlsMem kinsls_mem;
+  KINSlsSparseJacFn jaceval;
+  KLUData klu_data;
+  SlsMat JacMat;
+  void *jacdata;
+  realtype uround_twothirds;
+
+  uround_twothirds = SUNRpowerR(kin_mem->kin_uround,TWOTHIRDS);
+
+  kinsls_mem = (KINSlsMem) (kin_mem->kin_lmem);
+
+  klu_data = (KLUData) kinsls_mem->s_solver_data;
+
+  jaceval = kinsls_mem->s_jaceval;
+  jacdata = kinsls_mem->s_jacdata;
+  JacMat = kinsls_mem->s_JacMat;
+
+  /* Check that Jacobian eval routine is set */
+  if (jaceval == NULL) {
+    KINProcessError(kin_mem, KINSLS_JAC_NOSET, "KINSLS", "kinKLUSetup", 
+		    MSGSP_JAC_NOSET);
+    free(kinsls_mem); kinsls_mem = NULL;
+    return(KINSLS_JAC_NOSET);
+  }
+
+  /* Increment nje counter and call Jacobian eval routine. */
+  kinsls_mem->s_nje++;
+  retval = jaceval(kin_mem->kin_uu, kin_mem->kin_fval, JacMat, jacdata, 
+		   kin_mem->kin_vtemp1, kin_mem->kin_vtemp2);
+
+  if (retval < 0) {
+    KINProcessError(kin_mem, KINSLS_JACFUNC_UNRECVR, "KINSLS", 
+		    "kinKLUSetup", MSGSP_JACFUNC_FAILED);
+    kinsls_mem->s_last_flag = KINSLS_JACFUNC_UNRECVR;
+    return(KINSLS_JACFUNC_UNRECVR);
+  }
+  if (retval == 1) {
+    kinsls_mem->s_first_factorize = 1;
+  }
+  if (retval > 1) {
+    kinsls_mem->s_last_flag = KINSLS_JACFUNC_RECVR;
+    return(+1);
+  }
+
+  if (kinsls_mem->s_first_factorize) {
+    /* ------------------------------------------------------------
+       Get the symbolic factorization
+       ------------------------------------------------------------*/ 
+    /* Update the ordering option with any user-updated values from 
+       calls to KINKLUSetOrdering */
+    klu_data->s_Common.ordering = klu_data->s_ordering;
+
+    if (klu_data->s_Symbolic != NULL) {
+       klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+    }
+    klu_data->s_Symbolic = klu_analyze(JacMat->NP, JacMat->indexptrs, 
+				       JacMat->indexvals, &(klu_data->s_Common));
+    if (klu_data->s_Symbolic == NULL) {
+      KINProcessError(kin_mem, KINSLS_PACKAGE_FAIL, "KINSLS", "kinKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(KINSLS_PACKAGE_FAIL);
+    }
+
+    /* ------------------------------------------------------------
+       Compute the LU factorization of the Jacobian.
+       ------------------------------------------------------------*/
+    /* If klu_factor previously called, free data */
+    if( klu_data->s_Numeric != NULL) {
+       klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+    }
+    klu_data->s_Numeric = klu_factor(JacMat->indexptrs, JacMat->indexvals, 
+				     JacMat->data, klu_data->s_Symbolic, 
+				     &(klu_data->s_Common));
+
+    if (klu_data->s_Numeric == NULL) {
+      KINProcessError(kin_mem, KINSLS_PACKAGE_FAIL, "KINSLS", "kinKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(KINSLS_PACKAGE_FAIL);
+    }
+
+    kinsls_mem->s_first_factorize = 0;
+
+  }
+  else {
+    
+    retval = klu_refactor(JacMat->indexptrs, JacMat->indexvals, JacMat->data, 
+			klu_data->s_Symbolic, klu_data->s_Numeric,
+			&(klu_data->s_Common));
+    if (retval == 0) {
+      KINProcessError(kin_mem, KINSLS_PACKAGE_FAIL, "KINSLS", "kinKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(KINSLS_PACKAGE_FAIL);
+    }
+
+    /*-----------------------------------------------------------
+      Check if a cheap estimate of the reciprocal of the condition 
+      number is getting too small.  If so, delete
+      the prior numeric factorization and recompute it.
+      -----------------------------------------------------------*/
+    
+    retval = klu_rcond(klu_data->s_Symbolic, klu_data->s_Numeric,
+		       &(klu_data->s_Common));
+    if (retval == 0) {
+      KINProcessError(kin_mem, KINSLS_PACKAGE_FAIL, "KINSLS", "kinKLUSetup", 
+		      MSGSP_PACKAGE_FAIL);
+      return(KINSLS_PACKAGE_FAIL);
+    }
+
+# if 1
+    if ( (klu_data->s_Common.rcond)  < uround_twothirds ) {
+      
+      /* Condition number may be getting large.  
+	 Compute more accurate estimate */
+      retval = klu_condest(JacMat->indexptrs, JacMat->data, 
+			   klu_data->s_Symbolic, klu_data->s_Numeric,
+			   &(klu_data->s_Common));
+      if (retval == 0) {
+	KINProcessError(kin_mem, KINSLS_PACKAGE_FAIL, "KINSLS", "kinKLUSetup", 
+			MSGSP_PACKAGE_FAIL);
+	return(KINSLS_PACKAGE_FAIL);
+      }
+      
+      if ( (klu_data->s_Common.condest) > 
+	   (1.0/uround_twothirds) ) {
+
+	/* More accurate estimate also says condition number is 
+	   large, so recompute the numeric factorization */
+
+	klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+	
+	klu_data->s_Numeric = klu_factor(JacMat->indexptrs, JacMat->indexvals, 
+					 JacMat->data, klu_data->s_Symbolic, 
+					 &(klu_data->s_Common));
+
+	if (klu_data->s_Numeric == NULL) {
+	  KINProcessError(kin_mem, KINSLS_PACKAGE_FAIL, "KINSLS", 
+			  "kinKLUSetup", MSGSP_PACKAGE_FAIL);
+	  return(KINSLS_PACKAGE_FAIL);
+	}
+      }
+    }
+#endif 
+
+  }
+
+  kinsls_mem->s_last_flag = KINSLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the KINKLU linear
+  solver module.  It calls the KLU solve routine, 
+  then returns KINSLS_SUCCESS = 0.
+*/
+
+static int kinKLUSolve(KINMem kin_mem, N_Vector x, N_Vector b,
+		       realtype *sJpnorm, realtype *sFdotJp)		       
+{
+  int flag;
+  KINSlsMem kinsls_mem;
+  KLUData klu_data;
+  SlsMat JacMat;
+  realtype *xd;
+  
+  kinsls_mem = (KINSlsMem) kin_mem->kin_lmem;
+  JacMat = kinsls_mem->s_JacMat;
+
+  klu_data = (KLUData) kinsls_mem->s_solver_data;
+
+  /* Copy the right-hand side into x */
+  N_VScale(ONE, b, x);
+  xd = N_VGetArrayPointer(x);
+
+  /* Call KLU to solve the linear system */
+  flag = klu_data->sun_klu_solve(klu_data->s_Symbolic, klu_data->s_Numeric, JacMat->NP, 1, xd, 
+                                 &(klu_data->s_Common));
+  if (flag == 0) {
+    KINProcessError(kin_mem, KINSLS_PACKAGE_FAIL, "KINSLS", "kinKLUSolve", 
+		    MSGSP_PACKAGE_FAIL);
+    return(KINSLS_PACKAGE_FAIL);
+  }
+
+  /* Compute the term sFdotJp for use in the linesearch routine.
+     This term is subsequently corrected if the step is reduced by
+     constraints or the linesearch.
+
+     sFdotJp is the dot product of the scaled f vector and the scaled
+     vector J*p, where the scaling uses fscale.                            */
+
+  N_VProd(b, kin_mem->kin_fscale, b);
+  N_VProd(b, kin_mem->kin_fscale, b);
+  *sFdotJp = N_VDotProd(kin_mem->kin_fval, b);
+
+  kinsls_mem->s_last_flag = KINSLS_SUCCESS;
+  return(KINSLS_SUCCESS);
+}
+
+/*
+  This routine frees memory specific to the KINKLU linear solver.
+*/
+
+static int kinKLUFree(KINMem kin_mem)
+{
+  KINSlsMem kinsls_mem;
+  KLUData klu_data;
+  
+  kinsls_mem = (KINSlsMem) kin_mem->kin_lmem;
+  klu_data = (KLUData) kinsls_mem->s_solver_data;
+
+  if( klu_data->s_Numeric != NULL)
+  {
+     klu_free_numeric(&(klu_data->s_Numeric), &(klu_data->s_Common));
+  }
+  if( klu_data->s_Symbolic != NULL)
+  {
+     klu_free_symbolic(&(klu_data->s_Symbolic), &(klu_data->s_Common));
+  }
+
+  if (kinsls_mem->s_JacMat) {
+    SparseDestroyMat(kinsls_mem->s_JacMat);
+    kinsls_mem->s_JacMat = NULL;
+  }
+
+  free(klu_data); 
+  free(kin_mem->kin_lmem); 
+
+  return(0);
+}
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * KINKLUSetOrdering sets the ordering used by KLU for reducing fill.
+ * Options are: 0 for AMD, 1 for COLAMD, and 2 for the natural ordering.
+ * The default used in KINSOL is 1 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+int KINKLUSetOrdering(void *kin_mem_v, int ordering_choice)
+{
+  KINMem kin_mem;
+  KINSlsMem kinsls_mem;
+  KLUData klu_data;
+
+ /* Return immediately if kin_mem is NULL */
+  if (kin_mem_v == NULL) {
+    KINProcessError(NULL, KINSLS_MEM_NULL, "KINSLS", "KINKLUSetOrdering",
+		    MSGSP_KINMEM_NULL);
+    return(KINSLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kin_mem_v;
+
+ /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) ) {
+    KINProcessError(NULL, KINSLS_ILL_INPUT, "KINSLS", "KINKLUSetOrdering",
+		    MSGSP_ILL_INPUT);
+    return(KINSLS_ILL_INPUT);
+  }
+
+  kinsls_mem = (KINSlsMem) kin_mem->kin_lmem;
+  klu_data = (KLUData) kinsls_mem->s_solver_data;
+
+  klu_data->s_ordering = ordering_choice;
+
+  return(KINSLS_SUCCESS);
+}
+
diff --git a/src/kinsol/kinsol_lapack.c b/src/kinsol/kinsol_lapack.c
new file mode 100644
index 0000000..ceb6026
--- /dev/null
+++ b/src/kinsol/kinsol_lapack.c
@@ -0,0 +1,616 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a KINSOL dense linear solver
+ * using BLAS and LAPACK functions.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <kinsol/kinsol_lapack.h>
+#include "kinsol_direct_impl.h"
+#include "kinsol_impl.h"
+#include <sundials/sundials_math.h>
+
+/* Constants */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * PROTOTYPES FOR PRIVATE FUNCTIONS
+ * =================================================================
+ */
+
+/* KINLAPACK DENSE linit, lsetup, lsolve, and lfree routines */ 
+static int kinLapackDenseInit(KINMem kin_mem);
+static int kinLapackDenseSetup(KINMem kin_mem);
+static int kinLapackDenseSolve(KINMem kin_mem, N_Vector x, N_Vector b,
+                               realtype *sJpnorm, realtype *sFdotJp);
+static int kinLapackDenseFree(KINMem kin_mem);
+
+/* KINLAPACK BAND linit, lsetup, lsolve, and lfree routines */ 
+static int kinLapackBandInit(KINMem kin_mem);
+static int kinLapackBandSetup(KINMem kin_mem);
+static int kinLapackBandSolve(KINMem kin_mem, N_Vector x, N_Vector b,
+                              realtype *sJpnorm, realtype *sFdotJp);
+static int kinLapackBandFree(KINMem kin_mem);
+
+/*
+ * =================================================================
+ * READIBILITY REPLACEMENTS
+ * =================================================================
+ */
+
+#define lrw1           (kin_mem->kin_lrw1)
+#define liw1           (kin_mem->kin_liw1)
+#define func           (kin_mem->kin_func)
+#define printfl        (kin_mem->kin_printfl)
+#define linit          (kin_mem->kin_linit)
+#define lsetup         (kin_mem->kin_lsetup)
+#define lsolve         (kin_mem->kin_lsolve)
+#define lfree          (kin_mem->kin_lfree)
+#define lmem           (kin_mem->kin_lmem)
+#define inexact_ls     (kin_mem->kin_inexact_ls)
+#define uu             (kin_mem->kin_uu)
+#define fval           (kin_mem->kin_fval)
+#define uscale         (kin_mem->kin_uscale)
+#define fscale         (kin_mem->kin_fscale)
+#define sqrt_relfunc   (kin_mem->kin_sqrt_relfunc)
+#define errfp          (kin_mem->kin_errfp)
+#define infofp         (kin_mem->kin_infofp)
+#define setupNonNull   (kin_mem->kin_setupNonNull)
+#define vtemp1         (kin_mem->kin_vtemp1)
+#define vec_tmpl       (kin_mem->kin_vtemp1)
+#define vtemp2         (kin_mem->kin_vtemp2)
+
+#define mtype          (kindls_mem->d_type)
+#define n              (kindls_mem->d_n)
+#define ml             (kindls_mem->d_ml)
+#define mu             (kindls_mem->d_mu)
+#define smu            (kindls_mem->d_smu)
+#define jacDQ          (kindls_mem->d_jacDQ)
+#define djac           (kindls_mem->d_djac)
+#define bjac           (kindls_mem->d_bjac)
+#define J              (kindls_mem->d_J)
+#define pivots         (kindls_mem->d_pivots)
+#define nje            (kindls_mem->d_nje)
+#define nfeDQ          (kindls_mem->d_nfeDQ)
+#define J_data         (kindls_mem->d_J_data)
+#define last_flag      (kindls_mem->d_last_flag)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS
+ * =================================================================
+ */
+              
+/*
+ * -----------------------------------------------------------------
+ * KINLapackDense
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the linear solver module.  KINLapackDense first
+ * calls the existing lfree routine if this is not NULL.  Then it sets
+ * the kin_linit, kin_lsetup, kin_lsolve, kin_lfree fields in (*kinmem)
+ * to be kinLapackDenseInit, kinLapackDenseSetup, kinLapackDenseSolve, 
+ * and kinLapackDenseFree, respectively.  It allocates memory for a 
+ * structure of type KINDlsMemRec and sets the kin_lmem field in 
+ * (*kinmem) to the address of this structure.  It sets lsetup_exists 
+ * in (*kinmem) to TRUE, and the djac field to the default 
+ * kinLapackDenseDQJac. Finally, it allocates memory for M, pivots, and 
+ * (if needed) savedJ.
+ *
+ * NOTE: The dense linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, KINLapackDense will first 
+ *       test for a compatible N_Vector internal representation 
+ *       by checking that N_VGetArrayPointer and N_VSetArrayPointer 
+ *       exist.
+ * -----------------------------------------------------------------
+ */
+int KINLapackDense(void *kinmem, int N)
+{
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* Return immediately if kinmem is NULL */
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINDLS_MEM_NULL, "KINLAPACK", "KINLapackDense", MSGD_KINMEM_NULL);
+    return(KINDLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  /* Test if the NVECTOR package is compatible with the DENSE solver */
+  if (vec_tmpl->ops->nvgetarraypointer == NULL ||
+      vec_tmpl->ops->nvsetarraypointer == NULL) {
+    KINProcessError(kin_mem, KINDLS_ILL_INPUT, "KINLAPACK", "KINLapackDense", MSGD_BAD_NVECTOR);
+    return(KINDLS_ILL_INPUT);
+  }
+
+  if (lfree !=NULL) lfree(kin_mem);
+
+  /* Set four main function fields in kin_mem */
+  linit  = kinLapackDenseInit;
+  lsetup = kinLapackDenseSetup;
+  lsolve = kinLapackDenseSolve;
+  lfree  = kinLapackDenseFree;
+
+  /* Get memory for KINDlsMemRec */
+  kindls_mem = NULL;
+  kindls_mem = (KINDlsMem) malloc(sizeof(struct KINDlsMemRec));
+  if (kindls_mem == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINLAPACK", "KINLapackDense", MSGD_MEM_FAIL);
+    return(KINDLS_MEM_FAIL);
+  }
+
+  /* Set matrix type */
+  mtype = SUNDIALS_DENSE;  
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ  = TRUE;
+  djac   = NULL;
+  J_data = NULL;
+
+  last_flag = KINDLS_SUCCESS;
+
+  kinDlsInitializeCounters(kindls_mem);
+
+  setupNonNull = TRUE;
+
+  /* Set problem dimension */
+  n = (long int) N;
+
+  /* Allocate memory for J and pivot array */
+  
+  J = NULL;
+  J = NewDenseMat(n, n);
+  if (J == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINLAPACK", "KINLapackDense", MSGD_MEM_FAIL);
+    free(kindls_mem); kindls_mem = NULL;
+    return(KINDLS_MEM_FAIL);
+  }
+
+  pivots = NULL;
+  pivots = NewIntArray(N);
+  if (pivots == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINLAPACK", "KINLapackDense", MSGD_MEM_FAIL);
+    DestroyMat(J);
+    free(kindls_mem); kindls_mem = NULL;
+    return(KINDLS_MEM_FAIL);
+  }
+
+  /* This is a direct linear solver */
+  inexact_ls = FALSE;
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = kindls_mem;
+
+  return(KINDLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * KINLapackBand
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the band linear solver module. It first calls
+ * the existing lfree routine if this is not NULL.  It then sets the
+ * kin_linit, kin_lsetup, kin_lsolve, and kin_lfree fields in (*kinmem)
+ * to be kinLapackBandInit, kinLapackBandSetup, kinLapackBandSolve, 
+ * and kinLapackBandFree, respectively.  It allocates memory for a 
+ * structure of type KINLapackBandMemRec and sets the kin_lmem field in 
+ * (*kinmem) to the address of this structure.  It sets lsetup_exists 
+ * in (*kinmem) to be TRUE, mu to be mupper, ml to be mlower, and 
+ * the bjac field to kinDlsBandDQJac
+ * Finally, it allocates memory for M, pivots, and (if needed) savedJ.  
+ * The KINLapackBand return value is KINDLS_SUCCESS = 0, 
+ * KINDLS_MEM_FAIL = -1, or KINDLS_ILL_INPUT = -2.
+ *
+ * NOTE: The KINLAPACK linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, KINLapackBand will first 
+ *       test for compatible a compatible N_Vector internal
+ *       representation by checking that the function 
+ *       N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */                  
+int KINLapackBand(void *kinmem, int N, int mupper, int mlower)
+{
+  KINMem kin_mem;
+  KINDlsMem kindls_mem;
+
+  /* Return immediately if kinmem is NULL */
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINDLS_MEM_NULL, "KINLAPACK", "KINLapackBand", MSGD_KINMEM_NULL);
+    return(KINDLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  /* Test if the NVECTOR package is compatible with the BAND solver */
+  if (vec_tmpl->ops->nvgetarraypointer == NULL) {
+    KINProcessError(kin_mem, KINDLS_ILL_INPUT, "KINLAPACK", "KINLapackBand", MSGD_BAD_NVECTOR);
+    return(KINDLS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(kin_mem);
+
+  /* Set four main function fields in kin_mem */  
+  linit  = kinLapackBandInit;
+  lsetup = kinLapackBandSetup;
+  lsolve = kinLapackBandSolve;
+  lfree  = kinLapackBandFree;
+  
+  /* Get memory for KINDlsMemRec */
+  kindls_mem = NULL;
+  kindls_mem = (KINDlsMem) malloc(sizeof(struct KINDlsMemRec));
+  if (kindls_mem == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINLAPACK", "KINLapackBand", MSGD_MEM_FAIL);
+    return(KINDLS_MEM_FAIL);
+  }
+  
+  /* Set matrix type */
+  mtype = SUNDIALS_BAND;  
+
+  /* Set default Jacobian routine and Jacobian data */
+  jacDQ  = TRUE;
+  bjac   = NULL;
+  J_data = NULL;
+
+  last_flag = KINDLS_SUCCESS;
+
+  kinDlsInitializeCounters(kindls_mem);
+
+  setupNonNull = TRUE;
+  
+  /* Load problem dimension */
+  n = (long int) N;
+
+  /* Load half-bandwidths in kindls_mem */
+  ml = (long int) mlower;
+  mu = (long int) mupper;
+
+  /* Test ml and mu for legality */
+  if ((ml < 0) || (mu < 0) || (ml >= n) || (mu >= n)) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINLAPACK", "KINLapackBand", MSGD_MEM_FAIL);
+    free(kindls_mem); kindls_mem = NULL;
+    return(KINDLS_ILL_INPUT);
+  }
+
+  /* Set extended upper half-bandwith for M (required for pivoting) */
+  smu = mu + ml;
+
+  /* Allocate memory for J and pivot array */
+  J = NULL;
+  J = NewBandMat(n, mu, ml, smu);
+  if (J == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINLAPACK", "KINLapackBand", MSGD_MEM_FAIL);
+    free(kindls_mem); kindls_mem = NULL;
+    return(KINDLS_MEM_FAIL);
+  }
+
+  pivots = NULL;
+  pivots = NewIntArray(N);
+  if (pivots == NULL) {
+    KINProcessError(kin_mem, KINDLS_MEM_FAIL, "KINLAPACK", "KINLapackBand", MSGD_MEM_FAIL);
+    DestroyMat(J);
+    free(kindls_mem); kindls_mem = NULL;
+    return(KINDLS_MEM_FAIL);
+  }
+
+  /* This is a direct linear solver */
+  inexact_ls = FALSE;
+
+  /* Attach linear solver memory to integrator memory */
+  lmem = kindls_mem;
+
+  return(KINDLS_SUCCESS);
+}
+
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS FOR SOLUTION WITH DENSE JACOBIANS
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * kinLapackDenseInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the dense
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int kinLapackDenseInit(KINMem kin_mem)
+{
+  KINDlsMem kindls_mem;
+
+  kindls_mem = (KINDlsMem) lmem;
+  
+  kinDlsInitializeCounters(kindls_mem);
+  
+  if (jacDQ) {
+    djac = kinDlsDenseDQJac;
+    J_data = kin_mem;
+  } else {
+    J_data = kin_mem->kin_user_data;
+  }
+
+  last_flag = KINDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinLapackDenseSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the dense linear solver.
+ * It calls the dense LU factorization routine.
+ * -----------------------------------------------------------------
+ */
+
+static int kinLapackDenseSetup(KINMem kin_mem)
+{
+  KINDlsMem kindls_mem;
+  int ier, retval;
+  int intn;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  intn = (int) n;
+
+  nje++;
+  SetToZero(J); 
+  retval = djac(n, uu, fval, J, J_data, vtemp1, vtemp2);
+  if (retval != 0) {
+    last_flag = -1;
+    return(-1);
+  }
+
+  /* Do LU factorization of J */
+  dgetrf_f77(&intn, &intn, J->data, &intn, pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return -1 */
+  last_flag = (long int) ier;
+  if (ier > 0) return(-1);
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinLapackDenseSolve
+ * -----------------------------------------------------------------
+ * This routine handles the solve operation for the dense linear solver
+ * by calling the dense backsolve routine.  The returned value is 0.
+ * The argument *sJpnorm is ignored.
+ * -----------------------------------------------------------------
+ */
+
+static int kinLapackDenseSolve(KINMem kin_mem, N_Vector x, N_Vector b,
+                               realtype *sJpnorm, realtype *sFdotJp)
+{
+  KINDlsMem kindls_mem;
+  realtype *xd;
+  int ier, one = 1;
+  int intn;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  intn = (int) n;
+
+  /* Copy the right-hand side into x */
+  N_VScale(ONE, b, x);
+  xd = N_VGetArrayPointer(x);
+
+  /* Back-solve and get solution in x */
+  dgetrs_f77("N", &intn, &one, J->data, &intn, pivots, xd, &intn, &ier, 1); 
+  if (ier > 0) return(-1);
+
+  /* Compute the term sFdotJp for use in the linesearch routine.
+     This term is subsequently corrected if the step is reduced by
+     constraints or the linesearch.
+
+     sFdotJp is the dot product of the scaled f vector and the scaled
+     vector J*p, where the scaling uses fscale.                            */
+
+  N_VProd(b, fscale, b);
+  N_VProd(b, fscale, b);
+  *sFdotJp = N_VDotProd(fval, b);
+
+  last_flag = KINDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinLapackDenseFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the dense linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int kinLapackDenseFree(KINMem kin_mem)
+{
+  KINDlsMem  kindls_mem;
+
+  kindls_mem = (KINDlsMem) lmem;
+  
+  DestroyMat(J);
+  DestroyArray(pivots);
+  free(kindls_mem); kindls_mem = NULL;
+
+  return(0);
+}
+
+
+/* 
+ * =================================================================
+ *  PRIVATE FUNCTIONS FOR SOLUTION WITH BANDED JACOBIANS
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * kinLapackBandInit
+ * -----------------------------------------------------------------
+ * This routine does remaining initializations specific to the band
+ * linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int kinLapackBandInit(KINMem kin_mem)
+{
+  KINDlsMem kindls_mem;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  kinDlsInitializeCounters(kindls_mem);
+
+  if (jacDQ) {
+    bjac = kinDlsBandDQJac;
+    J_data = kin_mem;
+  } else {
+    J_data = kin_mem->kin_user_data;
+  }
+
+  last_flag = KINDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinLapackBandSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the band linear solver.
+ * It makes a decision whether or not to call the Jacobian evaluation
+ * routine based on various state variables, and if not it uses the 
+ * saved copy.  In any case, it constructs the Newton matrix 
+ * M = I - gamma*J, updates counters, and calls the band LU 
+ * factorization routine.
+ * -----------------------------------------------------------------
+ */
+
+static int kinLapackBandSetup(KINMem kin_mem)
+{
+  KINDlsMem kindls_mem;
+  int ier, retval;
+  int intn, iml, imu, ldmat;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  intn = (int) n;
+  iml = (int) ml;
+  imu = (int) mu;
+  ldmat = J->ldim;
+
+  nje++;
+  SetToZero(J); 
+  retval = bjac(n, mu, ml, uu, fval, J, J_data, vtemp1, vtemp2);
+  if (retval != 0) {
+    last_flag = -1;
+    return(-1);
+  }
+  
+  /* Do LU factorization of J */
+  dgbtrf_f77(&intn, &intn, &iml, &imu, J->data, &ldmat, pivots, &ier);
+
+  /* Return 0 if the LU was complete; otherwise return -1 */
+  last_flag = (long int) ier;
+  if (ier > 0) return(-1);
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinLapackBandSolve
+ * -----------------------------------------------------------------
+ * This routine handles the solve operation for the band linear solver
+ * by calling the band backsolve routine.  The return value is 0.
+ * The argument *sJpnorm is ignored.
+ * -----------------------------------------------------------------
+ */
+
+static int kinLapackBandSolve(KINMem kin_mem, N_Vector x, N_Vector b,
+                              realtype *sJpnorm, realtype *sFdotJp)
+{
+  KINDlsMem kindls_mem;
+  realtype *xd;
+  int ier, one = 1;
+  int intn, iml, imu, ldmat;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  intn = (int) n;
+  iml = (int) ml;
+  imu = (int) mu;
+  ldmat = J->ldim;
+
+  /* Copy the right-hand side into x */
+  N_VScale(ONE, b, x);
+  xd = N_VGetArrayPointer(x);
+
+  /* Back-solve and get solution in x */
+  dgbtrs_f77("N", &intn, &iml, &imu, &one, J->data, &ldmat, pivots, xd, &intn, &ier, 1);
+  if (ier > 0) return(-1);
+
+  /* Compute the term sFdotJp for use in the linesearch routine.
+     This term is subsequently corrected if the step is reduced by
+     constraints or the linesearch.
+
+     sFdotJp is the dot product of the scaled f vector and the scaled
+     vector J*p, where the scaling uses fscale.                            */
+
+  N_VProd(b, fscale, b);
+  N_VProd(b, fscale, b);
+  *sFdotJp = N_VDotProd(fval, b);
+
+  last_flag = KINDLS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * kinLapackBandFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the band linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int kinLapackBandFree(KINMem kin_mem)
+{
+  KINDlsMem kindls_mem;
+
+  kindls_mem = (KINDlsMem) lmem;
+
+  DestroyMat(J);
+  DestroyArray(pivots);
+  free(kindls_mem); kindls_mem = NULL;
+
+  return(0);
+}
diff --git a/src/kinsol/kinsol_sparse.c b/src/kinsol/kinsol_sparse.c
new file mode 100644
index 0000000..17b05ec
--- /dev/null
+++ b/src/kinsol/kinsol_sparse.c
@@ -0,0 +1,178 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for an KINSLS linear solver.
+ * -----------------------------------------------------------------
+ */
+
+/* 
+ * =================================================================
+ * IMPORTED HEADER FILES
+ * =================================================================
+ */
+
+#include "kinsol_impl.h"
+#include "kinsol_sparse_impl.h"
+#include "sundials/sundials_math.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* 
+ * =================================================================
+ * FUNCTION SPECIFIC CONSTANTS
+ * =================================================================
+ */
+
+#define ZERO         RCONST(0.0)
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* 
+ * =================================================================
+ * EXPORTED FUNCTIONS 
+ * =================================================================
+ */
+              
+/*
+ * KINSlsSetSparseJacFn specifies the sparse Jacobian function.
+ */
+int KINSlsSetSparseJacFn(void *kin_mem_v, KINSlsSparseJacFn jac)
+{
+  KINMem kin_mem;
+  KINSlsMem kinsls_mem;
+
+  kin_mem = (KINMem) kin_mem_v;
+
+  /* Return immediately if kin_mem is NULL */
+  if (kin_mem == NULL) {
+    KINProcessError(NULL, KINSLS_MEM_NULL, "KINSLS", "KINSlsSetSparseJacFn", 
+		    MSGSP_KINMEM_NULL);
+    return(KINSLS_MEM_NULL);
+  }
+
+  if (kin_mem->kin_lmem == NULL) {
+    KINProcessError(kin_mem, KINSLS_LMEM_NULL, "KINSLS", 
+		    "KINSlsSetSparseJacFn", MSGSP_LMEM_NULL);
+    return(KINSLS_LMEM_NULL);
+  }
+  kinsls_mem = (KINSlsMem) kin_mem->kin_lmem;
+
+  kinsls_mem->s_jaceval = jac;
+
+  return(KINSLS_SUCCESS);
+}
+
+/*
+ * KINSlsGetNumJacEvals returns the number of Jacobian evaluations.
+ */
+int KINSlsGetNumJacEvals(void *kin_mem_v, long int *njevals)
+{
+  KINMem kin_mem;
+  KINSlsMem kinsls_mem;
+
+  kin_mem = (KINMem) kin_mem_v;
+
+  /* Return immediately if kin_mem is NULL */
+  if (kin_mem == NULL) {
+    KINProcessError(NULL, KINSLS_MEM_NULL, "KINSLS", "KINSlsGetNumJacEvals", MSGSP_KINMEM_NULL);
+    return(KINSLS_MEM_NULL);
+  }
+
+  if (kin_mem->kin_lmem == NULL) {
+    KINProcessError(kin_mem, KINSLS_LMEM_NULL, "KINSLS", 
+		    "KINSlsGetNumJacEvals", MSGSP_LMEM_NULL);
+    return(KINSLS_LMEM_NULL);
+  }
+  kinsls_mem = (KINSlsMem) kin_mem->kin_lmem;
+
+  *njevals = kinsls_mem->s_nje;
+
+  return(KINSLS_SUCCESS);
+}
+
+/*
+ * KINSlsGetReturnFlagName returns the name associated with a KINSLS
+ * return value.
+ */
+char *KINSlsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case KINSLS_SUCCESS:
+    sprintf(name,"KINSLS_SUCCESS");
+    break;   
+  case KINSLS_MEM_NULL:
+    sprintf(name,"KINSLS_MEM_NULL");
+    break;
+  case KINSLS_LMEM_NULL:
+    sprintf(name,"KINSLS_LMEM_NULL");
+    break;
+  case KINSLS_ILL_INPUT:
+    sprintf(name,"KINSLS_ILL_INPUT");
+    break;
+  case KINSLS_MEM_FAIL:
+    sprintf(name,"KINSLS_MEM_FAIL");
+    break;
+  case KINSLS_JAC_NOSET:
+    sprintf(name,"KINSLS_JAC_NOSET");
+    break;
+  case KINSLS_JACFUNC_UNRECVR:
+    sprintf(name,"KINSLS_JACFUNC_UNRECVR");
+    break;
+  case KINSLS_JACFUNC_RECVR:
+    sprintf(name,"KINSLS_JACFUNC_RECVR");
+    break;
+  default:
+    sprintf(name,"NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * KINSlsGetLastFlag returns the last flag set in a KINSLS function.
+ */
+int KINSlsGetLastFlag(void *kin_mem_v, long int *flag)
+{
+  KINMem kin_mem;
+  KINSlsMem kinsls_mem;
+
+  kin_mem= (KINMem) kin_mem_v;
+
+  /* Return immediately if kin_mem is NULL */
+  if (kin_mem == NULL) {
+    KINProcessError(NULL, KINSLS_MEM_NULL, "KINSLS", "KINSlsGetLastFlag", 
+		    MSGSP_KINMEM_NULL);
+    return(KINSLS_MEM_NULL);
+  }
+
+  if (kin_mem->kin_lmem == NULL) {
+    KINProcessError(kin_mem, KINSLS_LMEM_NULL, "KINSLS", 
+		    "KINSlsGetLastFlag", MSGSP_LMEM_NULL);
+    return(KINSLS_LMEM_NULL);
+  }
+  kinsls_mem = (KINSlsMem) kin_mem->kin_lmem;
+
+  *flag = kinsls_mem->s_last_flag;
+
+  return(KINSLS_SUCCESS);
+}
+
diff --git a/src/kinsol/kinsol_sparse_impl.h b/src/kinsol/kinsol_sparse_impl.h
new file mode 100644
index 0000000..ed98bd9
--- /dev/null
+++ b/src/kinsol/kinsol_sparse_impl.h
@@ -0,0 +1,92 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4558 $
+ * $Date: 2015-10-05 09:04:16 -0700 (Mon, 05 Oct 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Implementation header file for the KINSLS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSPARSE_IMPL_H
+#define _KINSPARSE_IMPL_H
+
+#include "kinsol/kinsol_sparse.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/*
+ * =================================================================
+ * K I N S P A R S E    I N T E R N A L    C O N S T A N T S
+ * =================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Types : KINSlsMemRec, KINSlsMem                             
+ * -----------------------------------------------------------------
+ * KINSlsMem is pointer to a KINSlsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct KINSlsMemRec {
+
+  KINSlsSparseJacFn s_jaceval; /* user Jacobian evaluation routine 
+				  to be called */
+  void *s_jacdata;           /* J_data is passed to eval. routine */
+
+  long int s_nje;           /* nje = no. of calls to jac */
+
+  long int s_last_flag;     /* last error return flag */
+
+  int s_first_factorize;    /* flag telling whether the first 
+			       factorization needs to happen */
+  SlsMat s_JacMat;          /* J = dF/du */
+
+  int sparsetype;           /* matrix type: compressed sparse column or row */
+
+  void *s_solver_data;      /* structure for solver-specific data */
+  
+
+} *KINSlsMem;
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+  
+
+/*
+ * =================================================================
+ * E R R O R   M E S S A G E S
+ * =================================================================
+ */
+
+#define MSGSP_KINMEM_NULL "Solver memory is NULL."
+#define MSGSP_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGSP_MEM_FAIL "A memory request failed."
+#define MSGSP_LMEM_NULL "Linear solver memory is NULL."
+#define MSGSP_JAC_NOSET "Jacobian evaluation function has not been set."
+#define MSGSP_ILL_INPUT "Invalid input detected."
+#define MSGSP_JACFUNC_FAILED "The Jacobian routine failed in an unrecoverable manner."
+#define MSGSP_PACKAGE_FAIL "A call to an external package failed."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/kinsol/kinsol_spbcgs.c b/src/kinsol/kinsol_spbcgs.c
new file mode 100644
index 0000000..979fa2c
--- /dev/null
+++ b/src/kinsol/kinsol_spbcgs.c
@@ -0,0 +1,442 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the KINSOL interface to the
+ * scaled, preconditioned Bi-CGSTAB (SPBCG) iterative linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "kinsol_impl.h"
+#include <kinsol/kinsol_spbcgs.h>
+#include "kinsol_spils_impl.h"
+
+#include <sundials/sundials_spbcgs.h>
+#include <sundials/sundials_math.h>
+
+/*
+ * -----------------------------------------------------------------
+ * private constants
+ * -----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+
+/*
+ * -----------------------------------------------------------------
+ * function prototypes
+ * -----------------------------------------------------------------
+ */
+
+/* KINSpbcg linit, lsetup, lsolve, and lfree routines */
+
+static int KINSpbcgInit(KINMem kin_mem);
+static int KINSpbcgSetup(KINMem kin_mem);
+static int KINSpbcgSolve(KINMem kin_mem, N_Vector xx,
+			 N_Vector bb, realtype *sJpnorm, realtype *sFdotJp);
+static int KINSpbcgFree(KINMem kin_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * readability replacements
+ * -----------------------------------------------------------------
+ */
+
+#define nni          (kin_mem->kin_nni)
+#define nnilset      (kin_mem->kin_nnilset)
+#define func         (kin_mem->kin_func)
+#define user_data    (kin_mem->kin_user_data)
+#define printfl      (kin_mem->kin_printfl)
+#define linit        (kin_mem->kin_linit)
+#define lsetup       (kin_mem->kin_lsetup)
+#define lsolve       (kin_mem->kin_lsolve)
+#define lfree        (kin_mem->kin_lfree)
+#define lmem         (kin_mem->kin_lmem)
+#define inexact_ls   (kin_mem->kin_inexact_ls)
+#define uu           (kin_mem->kin_uu)
+#define fval         (kin_mem->kin_fval)
+#define uscale       (kin_mem->kin_uscale)
+#define fscale       (kin_mem->kin_fscale)
+#define sqrt_relfunc (kin_mem->kin_sqrt_relfunc)
+#define eps          (kin_mem->kin_eps)
+#define errfp        (kin_mem->kin_errfp)
+#define infofp       (kin_mem->kin_infofp)
+#define setupNonNull (kin_mem->kin_setupNonNull)
+#define vtemp1       (kin_mem->kin_vtemp1)
+#define vec_tmpl     (kin_mem->kin_vtemp1)
+#define vtemp2       (kin_mem->kin_vtemp2)
+#define strategy     (kin_mem->kin_globalstrategy)
+
+#define pretype   (kinspils_mem->s_pretype)
+#define nli       (kinspils_mem->s_nli)
+#define npe       (kinspils_mem->s_npe)
+#define nps       (kinspils_mem->s_nps)
+#define ncfl      (kinspils_mem->s_ncfl)
+#define njtimes   (kinspils_mem->s_njtimes)
+#define nfes      (kinspils_mem->s_nfes)
+#define new_uu    (kinspils_mem->s_new_uu)
+#define spils_mem (kinspils_mem->s_spils_mem)
+
+#define jtimesDQ  (kinspils_mem->s_jtimesDQ)
+#define jtimes    (kinspils_mem->s_jtimes)
+#define J_data    (kinspils_mem->s_J_data)
+
+#define last_flag (kinspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpbcg
+ * -----------------------------------------------------------------
+ * This routine allocates and initializes the memory record and
+ * sets function fields specific to the SPBCG linear solver module.
+ * KINSpbcg sets the kin_linit, kin_lsetup, kin_lsolve, and
+ * kin_lfree fields in *kinmem to be KINSpbcgInit, KINSpbcgSetup,
+ * KINSpbcgSolve, and KINSpbcgFree, respectively. It allocates
+ * memory for a structure of type KINSpilsMemRec and sets the
+ * kin_lmem field in *kinmem to the address of this structure. It
+ * also calls SpbcgMalloc to allocate memory for the module
+ * SPBCG. It sets setupNonNull in (*kin_mem) and sets various
+ * fields in the KINSpilsMemRec structure.
+ * Finally, KINSpbcg allocates memory for local vectors, and calls
+ * SpbcgMalloc to allocate memory for the Spbcg solver.
+ * -----------------------------------------------------------------
+ */
+
+int KINSpbcg(void *kinmem, int maxl)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+  SpbcgMem spbcg_mem;
+  int maxl1;
+
+  if (kinmem == NULL){
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpbcg", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);  
+  }
+  kin_mem = (KINMem) kinmem;
+
+  /* check for required vector operations */
+
+  /* Note: do NOT need to check for N_VLinearSum, N_VProd, N_VScale, N_VDiv, 
+     or N_VWL2Norm because they are required by KINSOL */
+
+  if ((vec_tmpl->ops->nvconst == NULL) ||
+      (vec_tmpl->ops->nvdotprod == NULL) ||
+      (vec_tmpl->ops->nvl1norm == NULL)) {
+    KINProcessError(NULL, KINSPILS_ILL_INPUT, "KINSPILS", "KINSpbcg", MSGS_BAD_NVECTOR);
+    return(KINSPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(kin_mem);
+
+  /* set four main function fields in kin_mem */
+
+  linit  = KINSpbcgInit; 
+  lsetup = KINSpbcgSetup;
+  lsolve = KINSpbcgSolve;
+  lfree  = KINSpbcgFree;
+
+  /* get memory for KINSpilsMemRec */
+  kinspils_mem = NULL;
+  kinspils_mem = (KINSpilsMem) malloc(sizeof(struct KINSpilsMemRec));
+  if (kinspils_mem == NULL){
+    KINProcessError(NULL, KINSPILS_MEM_FAIL, "KINSPILS", "KINSpbcg", MSGS_MEM_FAIL);
+    return(KINSPILS_MEM_FAIL);  
+  }
+
+  /* Set ILS type */
+  kinspils_mem->s_type = SPILS_SPBCG;
+
+  /* set SPBCG parameters that were passed in call sequence */
+
+  maxl1 = (maxl <= 0) ? KINSPILS_MAXL : maxl;
+  kinspils_mem->s_maxl = maxl1;  
+
+  /* Set defaults for Jacobian-related fileds */
+
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  J_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+
+  kinspils_mem->s_pset   = NULL;
+  kinspils_mem->s_psolve = NULL;
+  kinspils_mem->s_pfree  = NULL;
+  kinspils_mem->s_P_data = kin_mem->kin_user_data;
+
+  /* Set default values for the rest of the SPBCG parameters */
+
+  kinspils_mem->s_pretype   = PREC_NONE;
+  kinspils_mem->s_last_flag = KINSPILS_SUCCESS;
+
+  kinSpilsInitializeCounters(kinspils_mem);
+
+  /* Call SpbcgMalloc to allocate workspace for SPBCG */
+
+  /* vec_tmpl passed as template vector */
+  spbcg_mem = NULL;
+  spbcg_mem = SpbcgMalloc(maxl1, vec_tmpl);
+  if (spbcg_mem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_FAIL, "KINSPILS", "KINSpbcg", MSGS_MEM_FAIL);
+    free(kinspils_mem); kinspils_mem = NULL;
+    return(KINSPILS_MEM_FAIL);
+  }
+
+  /* This is an iterative linear solver */
+
+  inexact_ls = TRUE;
+
+  /* Attach SPBCG memory to spils memory structure */
+  spils_mem = (void *) spbcg_mem;
+
+  /* attach linear solver memory to KINSOL memory */
+  lmem = kinspils_mem;
+
+  return(KINSPILS_SUCCESS);
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * additional readability replacements
+ * -----------------------------------------------------------------
+ */
+
+#define maxl   (kinspils_mem->s_maxl)
+#define pset   (kinspils_mem->s_pset)
+#define psolve (kinspils_mem->s_psolve)
+#define P_data (kinspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpbcgInit
+ * -----------------------------------------------------------------
+ * This routine initializes variables associated with the SPBCG
+ * iterative linear solver. Mmemory allocation was done previously
+ * in KINSpbcg.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpbcgInit(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  SpbcgMem spbcg_mem;
+
+  kinspils_mem = (KINSpilsMem) lmem;
+  spbcg_mem = (SpbcgMem) spils_mem;
+
+  /* initialize counters */
+  kinSpilsInitializeCounters(kinspils_mem);
+
+  /* set preconditioner type */
+
+  if (psolve != NULL) {
+    pretype = PREC_RIGHT;
+  } else {
+    pretype = PREC_NONE;
+  }
+  
+  /* set setupNonNull to TRUE iff there is preconditioning with setup */
+
+  setupNonNull = ((psolve != NULL) && (pset != NULL));
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+
+  if (jtimesDQ) {
+    jtimes = KINSpilsDQJtimes;
+    J_data = kin_mem;
+  } else {
+    J_data = user_data;
+  }
+
+  if ( (strategy == KIN_PICARD) && jtimesDQ ) {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSpbcgInit", 
+		    MSG_NOL_FAIL);
+    return(KIN_ILL_INPUT);
+  }
+
+ /*  Set maxl in the SPBCG memory in case it was changed by the user */
+  spbcg_mem->l_max  = maxl;
+
+  last_flag = KINSPILS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpbcgSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the SPBCG linear
+ * solver, that is, it is an interface to the user-supplied
+ * routine pset.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpbcgSetup(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  int ret;
+
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  /* call pset routine */
+
+  ret = pset(uu, uscale, fval, fscale, P_data, vtemp1, vtemp2);
+
+  last_flag = ret;
+
+  npe++;
+  nnilset = nni; 
+
+  /* return the same value ret that pset returned */
+
+  return(ret);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpbcgSolve
+ * -----------------------------------------------------------------
+ * This routine handles the call to the generic SPBCG solver routine
+ * called SpbcgSolve for the solution of the linear system Ax = b.
+ *
+ * Appropriate variables are passed to SpbcgSolve and the counters
+ * nli, nps, and ncfl are incremented, and the return value is set
+ * according to the success of SpbcgSolve. The success flag is
+ * returned if SpbcgSolve converged, or if the residual was reduced.
+ * Of the other error conditions, only preconditioner solver
+ * failure is specifically returned. Otherwise a generic flag is
+ * returned to denote failure of this routine.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpbcgSolve(KINMem kin_mem, N_Vector xx, N_Vector bb, 
+                         realtype *sJpnorm, realtype *sFdotJp)
+{
+  KINSpilsMem kinspils_mem;
+  SpbcgMem spbcg_mem;
+  int ret, nli_inc, nps_inc;
+  realtype res_norm;
+  
+  kinspils_mem = (KINSpilsMem) lmem;
+  spbcg_mem = (SpbcgMem) spils_mem;
+
+  /* Set initial guess to xx = 0. bb is set, by the routine
+     calling KINSpbcgSolve, to the RHS vector for the system
+     to be solved. */ 
+ 
+  N_VConst(ZERO, xx);
+
+  new_uu = TRUE;  /* set flag required for user Jacobian routine */
+
+  /* call SpbcgSolve */
+
+  ret = SpbcgSolve(spbcg_mem, kin_mem, xx, bb, pretype, eps,
+                   kin_mem, fscale, fscale, KINSpilsAtimes,
+                   KINSpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+
+  /* increment counters nli, nps, and ncfl 
+     (nni is updated in the KINSol main iteration loop) */
+
+  nli = nli + (long int) nli_inc;
+  nps = nps + (long int) nps_inc;
+
+  if (printfl > 2) 
+    KINPrintInfo(kin_mem, PRNT_NLI, "KINSPBCG", "KINSpbcgSolve", INFO_NLI, nli_inc);
+
+  if (ret != 0) ncfl++;
+  last_flag = ret;
+
+  if ( (ret != 0) && (ret != SPBCG_RES_REDUCED) ) {
+
+    /* Handle all failure returns from SpbcgSolve */
+
+    switch(ret) {
+    case SPBCG_PSOLVE_FAIL_REC:
+    case SPBCG_ATIMES_FAIL_REC:
+      return(1);
+      break;
+    case SPBCG_CONV_FAIL:
+    case SPBCG_MEM_NULL:
+    case SPBCG_ATIMES_FAIL_UNREC:
+    case SPBCG_PSOLVE_FAIL_UNREC:
+      return(-1);
+      break;
+    }
+  }
+
+  /*  SpbcgSolve returned either SPBCG_SUCCESS or SPBCG_RES_REDUCED.
+
+     Compute the terms sJpnorm and sFdotJp for use in the linesearch
+     routine and in KINForcingTerm.  Both of these terms are subsequently
+     corrected if the step is reduced by constraints or the linesearch.
+
+     sJpnorm is the norm of the scaled product (scaled by fscale) of the
+     current Jacobian matrix J and the step vector p (= solution vector xx).
+
+     sFdotJp is the dot product of the scaled f vector and the scaled
+     vector J*p, where the scaling uses fscale.                            */
+
+  ret = KINSpilsAtimes(kin_mem, xx, bb);
+  if (ret > 0) {
+    last_flag = SPBCG_ATIMES_FAIL_REC;
+    return(1);
+  }      
+  else if (ret < 0) {
+    last_flag = SPBCG_ATIMES_FAIL_UNREC;
+    return(-1);
+  }
+
+  *sJpnorm = N_VWL2Norm(bb, fscale);
+  N_VProd(bb, fscale, bb);
+  N_VProd(bb, fscale, bb);
+  *sFdotJp = N_VDotProd(fval, bb);
+
+  if (printfl > 2) KINPrintInfo(kin_mem, PRNT_EPS, "KINSPBCG",
+                     "KINSpbcgSolve", INFO_EPS, res_norm, eps);
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpbcgFree
+ * -----------------------------------------------------------------
+ * Frees memory specific to the SPBCG linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpbcgFree(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  SpbcgMem spbcg_mem;
+
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  spbcg_mem = (SpbcgMem) spils_mem;
+  SpbcgFree(spbcg_mem);
+
+  if (kinspils_mem->s_pfree != NULL) (kinspils_mem->s_pfree)(kin_mem);
+
+  free(kinspils_mem); kinspils_mem = NULL;
+
+  return(0);
+}
diff --git a/src/kinsol/kinsol_spfgmr.c b/src/kinsol/kinsol_spfgmr.c
new file mode 100644
index 0000000..9186c28
--- /dev/null
+++ b/src/kinsol/kinsol_spfgmr.c
@@ -0,0 +1,451 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Carol S. Woodward @ LLNL
+ *    Based on kinsol_spgmr.c
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the KINSOL scaled,
+ * preconditioned Flexible GMRES linear solver, KINSpfgmr.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "kinsol_impl.h"
+#include <kinsol/kinsol_spfgmr.h>
+#include "kinsol_spils_impl.h"
+
+#include <sundials/sundials_spfgmr.h>
+#include <sundials/sundials_math.h>
+
+/*
+ * -----------------------------------------------------------------
+ * private constants
+ * -----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+
+/*
+ * -----------------------------------------------------------------
+ * function prototypes
+ * -----------------------------------------------------------------
+ */
+
+/* KINSpfgmr linit, lsetup, lsolve, and lfree routines */
+
+static int KINSpfgmrInit(KINMem kin_mem);
+static int KINSpfgmrSetup(KINMem kin_mem);
+static int KINSpfgmrSolve(KINMem kin_mem, N_Vector xx, 
+                          N_Vector bb, realtype *sJpnorm, realtype *sFdotJp);
+static int KINSpfgmrFree(KINMem kin_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * readability replacements
+ * -----------------------------------------------------------------
+ */
+/*
+#define nni            (kin_mem->kin_nni)
+#define nnilset        (kin_mem->kin_nnilset)
+#define func           (kin_mem->kin_func)
+#define user_data      (kin_mem->kin_user_data)
+#define printfl        (kin_mem->kin_printfl)
+#define linit          (kin_mem->kin_linit)
+#define lsetup         (kin_mem->kin_lsetup)
+#define lsolve         (kin_mem->kin_lsolve)
+#define lfree          (kin_mem->kin_lfree)
+#define lmem           (kin_mem->kin_lmem)
+#define inexact_ls     (kin_mem->kin_inexact_ls)
+#define uu             (kin_mem->kin_uu)
+#define fval           (kin_mem->kin_fval)
+#define uscale         (kin_mem->kin_uscale)
+#define fscale         (kin_mem->kin_fscale)
+#define sqrt_relfunc   (kin_mem->kin_sqrt_relfunc)
+#define jacCurrent     (kin_mem->kin_jacCurrent)
+#define eps            (kin_mem->kin_eps)
+#define errfp          (kin_mem->kin_errfp)
+#define infofp         (kin_mem->kin_infofp)
+#define setupNonNull   (kin_mem->kin_setupNonNull)
+#define vtemp1         (kin_mem->kin_vtemp1)
+#define vec_tmpl       (kin_mem->kin_vtemp1)
+#define vtemp2         (kin_mem->kin_vtemp2)
+#define strategy       (kin_mem->kin_globalstrategy)
+
+#define pretype   (kinspils_mem->s_pretype)
+#define gstype    (kinspils_mem->s_gstype)
+#define nli       (kinspils_mem->s_nli)
+#define npe       (kinspils_mem->s_npe)
+#define nps       (kinspils_mem->s_nps)
+#define ncfl      (kinspils_mem->s_ncfl)
+#define njtimes   (kinspils_mem->s_njtimes)
+#define nfes      (kinspils_mem->s_nfes)
+#define new_uu    (kinspils_mem->s_new_uu)
+#define spils_mem (kinspils_mem->s_spils_mem)
+
+#define jtimesDQ  (kinspils_mem->s_jtimesDQ)
+#define jtimes    (kinspils_mem->s_jtimes)
+#define J_data    (kinspils_mem->s_J_data)
+
+#define last_flag (kinspils_mem->s_last_flag)
+*/
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpfgmr
+ * -----------------------------------------------------------------
+ * This routine allocates and initializes the memory record and
+ * sets function fields specific to the SPFGMR linear solver module.
+ * KINSpfgmr sets the kin_linit, kin_lsetup, kin_lsolve, and
+ * kin_lfree fields in *kinmem to be KINSpfgmrInit, KINSpfgmrSetup,
+ * KINSpfgmrSolve, and KINSpfgmrFree, respectively. It allocates
+ * memory for a structure of type KINSpilsMemRec and sets the
+ * kin_lmem field in *kinmem to the address of this structure. It
+ * also calls SpfgmrMalloc to allocate memory for the module
+ * SPFGMR. In summary, KINSpfgmr sets various fields in the
+ * KINSpilsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+int KINSpfgmr(void *kinmem, int maxl)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+  SpfgmrMem spfgmr_mem;
+  int maxl1;
+
+  if (kinmem == NULL){
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpfgmr", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);  
+  }
+  kin_mem = (KINMem) kinmem;
+
+  /* check for required vector operations */
+
+  /* Note: do NOT need to check for N_VLinearSum, N_VProd, N_VScale, N_VDiv, 
+     or N_VWL2Norm because they are required by KINSOL */
+
+  if ((kin_mem->kin_vtemp1->ops->nvconst == NULL) ||
+      (kin_mem->kin_vtemp1->ops->nvdotprod == NULL) ||
+      (kin_mem->kin_vtemp1->ops->nvl1norm == NULL)) {
+    KINProcessError(NULL, KINSPILS_ILL_INPUT, "KINSPILS", "KINSpfgmr", MSGS_BAD_NVECTOR);
+    return(KINSPILS_ILL_INPUT);
+  }
+
+  if (kin_mem->kin_lfree != NULL) kin_mem->kin_lfree(kin_mem);
+
+  /* set four main function fields in kin_mem */
+
+  kin_mem->kin_linit  = KINSpfgmrInit; 
+  kin_mem->kin_lsetup = KINSpfgmrSetup;
+  kin_mem->kin_lsolve = KINSpfgmrSolve;
+  kin_mem->kin_lfree  = KINSpfgmrFree;
+
+  /* get memory for KINSpilsMemRec */
+  kinspils_mem = NULL;
+  kinspils_mem = (KINSpilsMem) malloc(sizeof(struct KINSpilsMemRec));
+  if (kinspils_mem == NULL){
+    KINProcessError(NULL, KINSPILS_MEM_FAIL, "KINSPILS", "KINSpfgmr", MSGS_MEM_FAIL);
+    return(KINSPILS_MEM_FAIL);  
+  }
+
+  /* Set ILS type */
+  kinspils_mem->s_type = SPILS_SPFGMR;
+
+  /* set SPFGMR parameters that were passed in call sequence */
+
+  maxl1 = (maxl <= 0) ? KINSPILS_MAXL : maxl;
+  kinspils_mem->s_maxl = maxl1;  
+
+  /* Set defaults for Jacobian-related fields */
+
+  kinspils_mem->s_jtimesDQ = TRUE;
+  kinspils_mem->s_jtimes   = NULL;
+  kinspils_mem->s_J_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+
+  kinspils_mem->s_pset   = NULL;
+  kinspils_mem->s_psolve = NULL;
+  kinspils_mem->s_pfree  = NULL;
+  kinspils_mem->s_P_data = kin_mem->kin_user_data;
+
+  /* Set default values for the rest of the SPFGMR parameters */
+
+  kinspils_mem->s_pretype   = PREC_NONE;
+  kinspils_mem->s_gstype    = MODIFIED_GS;
+  kinspils_mem->s_maxlrst   = 0;
+  kinspils_mem->s_last_flag = KINSPILS_SUCCESS;
+
+  kinSpilsInitializeCounters(kinspils_mem);
+
+  /* Call SpfgmrMalloc to allocate workspace for SPFGMR */
+
+  /* vtemp1 passed as template vector */
+  spfgmr_mem = NULL;
+  spfgmr_mem = SpfgmrMalloc(maxl1, kin_mem->kin_vtemp1);
+  if (spfgmr_mem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_FAIL, "KINSPILS", "KINSpfgmr", MSGS_MEM_FAIL);
+    free(kinspils_mem); kinspils_mem = NULL;
+    return(KINSPILS_MEM_FAIL);
+  }
+
+  /* This is an iterative linear solver */
+
+  kin_mem->kin_inexact_ls = TRUE;
+
+  /* Attach SPFGMR memory to spils memory structure */
+  kinspils_mem->s_spils_mem = (void *) spfgmr_mem;
+
+  /* attach linear solver memory to KINSOL memory */
+  kin_mem->kin_lmem = kinspils_mem;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * additional readability replacements
+ * -----------------------------------------------------------------
+ */
+
+/*
+#define maxl    (kinspils_mem->s_maxl)
+#define maxlrst (kinspils_mem->s_maxlrst)
+#define pset    (kinspils_mem->s_pset)
+#define psolve  (kinspils_mem->s_psolve)
+#define P_data  (kinspils_mem->s_P_data)
+*/
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpfgmrInit
+ * -----------------------------------------------------------------
+ * This routine initializes variables associated with the FGMRES
+ * linear solver. Memory allocation was done previously in
+ * KINSpfgmr.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpfgmrInit(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+
+  kinspils_mem = (KINSpilsMem) kin_mem->kin_lmem;
+
+  /* initialize counters */
+  kinSpilsInitializeCounters(kinspils_mem);
+
+  /* set preconditioner type */
+
+  if (kinspils_mem->s_psolve != NULL) {
+    kinspils_mem->s_pretype = PREC_RIGHT;
+  } else {
+    kinspils_mem->s_pretype = PREC_NONE;
+  }
+  
+  /* set setupNonNull to TRUE iff there is preconditioning with setup */
+
+  kin_mem->kin_setupNonNull = 
+    (kinspils_mem->s_psolve != NULL) && (kinspils_mem->s_pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+  if (kinspils_mem->s_jtimesDQ) {
+    kinspils_mem->s_jtimes = KINSpilsDQJtimes;
+    kinspils_mem->s_J_data = kin_mem;
+  } else {
+    kinspils_mem->s_J_data = kin_mem->kin_user_data;
+  }
+
+  if ( (kin_mem->kin_globalstrategy == KIN_PICARD) 
+       && (kinspils_mem->s_jtimesDQ) ) {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSpfgmrInit", 
+		    MSG_NOL_FAIL);
+    return(KIN_ILL_INPUT);
+  }
+
+  kinspils_mem->s_last_flag = KINSPILS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpfgmrSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the SPFGMR linear
+ * solver, that is, it is an interface to the user-supplied
+ * routine pset.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpfgmrSetup(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  int ret;
+
+  kinspils_mem = (KINSpilsMem) kin_mem->kin_lmem;
+
+  /* call pset routine */
+
+  ret = kinspils_mem->s_pset(kin_mem->kin_uu, kin_mem->kin_uscale, 
+                             kin_mem->kin_fval, kin_mem->kin_fscale, 
+                             kinspils_mem->s_P_data, 
+                             kin_mem->kin_vtemp1, kin_mem->kin_vtemp2); 
+
+  kinspils_mem->s_last_flag = ret;
+
+  (kinspils_mem->s_npe)++;
+  kin_mem->kin_nnilset = kin_mem->kin_nni; 
+
+  /* return the same value ret that pset returned */
+  return(ret);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpfgmrSolve
+ * -----------------------------------------------------------------
+ * This routine handles the call to the generic SPFGMR solver
+ * SpfgmrSolve for the solution of the linear system Ax = b.
+ *
+ * Appropriate variables are passed to SpfgmrSolve and the counters
+ * nli, nps, and ncfl are incremented, and the return value is set
+ * according to the success of SpfgmrSolve. The success flag is
+ * returned if SpfgmrSolve converged, or if the residual was reduced.
+ * Of the other error conditions, only preconditioner solver
+ * failure is specifically returned. Otherwise a generic flag is
+ * returned to denote failure of this routine.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpfgmrSolve(KINMem kin_mem, N_Vector xx, N_Vector bb, 
+                         realtype *sJpnorm, realtype *sFdotJp)
+{
+  KINSpilsMem kinspils_mem;
+  SpfgmrMem spfgmr_mem;
+  int ret, nli_inc, nps_inc;
+  realtype res_norm;
+  
+  kinspils_mem = (KINSpilsMem) kin_mem->kin_lmem;
+
+  spfgmr_mem = (SpfgmrMem) kinspils_mem->s_spils_mem;
+
+  /* Set initial guess to xx = 0. bb is set, by the routine
+     calling KINSpfgmrSolve, to the RHS vector for the system
+     to be solved. */ 
+  N_VConst(ZERO, xx);
+
+  kinspils_mem->s_new_uu = TRUE; /* set flag required for user Jacobian routine */
+
+  /* call SpfgmrSolve */
+  ret = SpfgmrSolve(spfgmr_mem, kin_mem, xx, bb, kinspils_mem->s_pretype, 
+		    kinspils_mem->s_gstype, kin_mem->kin_eps, 
+		    kinspils_mem->s_maxlrst, kinspils_mem->s_maxl, 
+		    kin_mem, kin_mem->kin_fscale, kin_mem->kin_fscale, 
+		    KINSpilsAtimes, KINSpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+
+  /* increment counters nli, nps, and ncfl 
+     (nni is updated in the KINSol main iteration loop) */
+
+  kinspils_mem->s_nli = kinspils_mem->s_nli + (long int) nli_inc;
+  kinspils_mem->s_nps = kinspils_mem->s_nps + (long int) nps_inc;
+
+  if (kin_mem->kin_printfl > 2) 
+    KINPrintInfo(kin_mem, PRNT_NLI, "KINSPFGMR", "KINSpfgmrSolve", INFO_NLI, nli_inc);
+
+  if (ret != 0) (kinspils_mem->s_ncfl)++;
+  kinspils_mem->s_last_flag = ret;
+
+  if ( (ret != 0) && (ret != SPFGMR_RES_REDUCED) ) {
+
+    /* Handle all failure returns from SpfgmrSolve */
+
+    switch(ret) {
+    case SPFGMR_PSOLVE_FAIL_REC:
+    case SPFGMR_ATIMES_FAIL_REC:
+      return(1);
+      break;
+    case SPFGMR_CONV_FAIL:
+    case SPFGMR_QRFACT_FAIL:
+    case SPFGMR_MEM_NULL:
+    case SPFGMR_GS_FAIL:
+    case SPFGMR_QRSOL_FAIL:
+    case SPFGMR_ATIMES_FAIL_UNREC:
+    case SPFGMR_PSOLVE_FAIL_UNREC:
+      return(-1);
+      break;
+    }
+  }
+
+  /*  SpfgmrSolve returned either SPFGMR_SUCCESS or SPFGMR_RES_REDUCED.
+
+     Compute the terms sJpnorm and sFdotJp for use in the linesearch
+     routine and in KINForcingTerm.  Both of these terms are subsequently
+     corrected if the step is reduced by constraints or the linesearch.
+
+     sJpnorm is the norm of the scaled product (scaled by fscale) of the
+     current Jacobian matrix J and the step vector p (= solution vector xx).
+
+     sFdotJp is the dot product of the scaled f vector and the scaled
+     vector J*p, where the scaling uses fscale.                            */
+
+  ret = KINSpilsAtimes(kin_mem, xx, bb);
+  if (ret > 0) {
+    kinspils_mem->s_last_flag = SPFGMR_ATIMES_FAIL_REC;
+    return(1);
+  }      
+  else if (ret < 0) {
+    kinspils_mem->s_last_flag = SPFGMR_ATIMES_FAIL_UNREC;
+    return(-1);
+  }
+
+  *sJpnorm = N_VWL2Norm(bb, kin_mem->kin_fscale);
+  N_VProd(bb, kin_mem->kin_fscale, bb);
+  N_VProd(bb, kin_mem->kin_fscale, bb);
+  *sFdotJp = N_VDotProd(kin_mem->kin_fval, bb);
+
+  if (kin_mem->kin_printfl > 2) KINPrintInfo(kin_mem, PRNT_EPS, "KINSPFGMR",
+					     "KINSpfgmrSolve", INFO_EPS, 
+					     res_norm, kin_mem->kin_eps);
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpfgmrFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the SPFGMR linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpfgmrFree(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  SpfgmrMem spfgmr_mem;
+
+  kinspils_mem = (KINSpilsMem) kin_mem->kin_lmem;
+
+  spfgmr_mem = (SpfgmrMem) kinspils_mem->s_spils_mem;
+  SpfgmrFree(spfgmr_mem);
+
+  if (kinspils_mem->s_pfree != NULL) (kinspils_mem->s_pfree)(kin_mem);
+
+  free(kinspils_mem); kinspils_mem = NULL;
+
+  return(0);
+}
diff --git a/src/kinsol/kinsol_spgmr.c b/src/kinsol/kinsol_spgmr.c
new file mode 100644
index 0000000..1341ca9
--- /dev/null
+++ b/src/kinsol/kinsol_spgmr.c
@@ -0,0 +1,443 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the KINSOL scaled,
+ * preconditioned GMRES linear solver, KINSpgmr.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "kinsol_impl.h"
+#include <kinsol/kinsol_spgmr.h>
+#include "kinsol_spils_impl.h"
+
+#include <sundials/sundials_spgmr.h>
+#include <sundials/sundials_math.h>
+
+/*
+ * -----------------------------------------------------------------
+ * private constants
+ * -----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+
+/*
+ * -----------------------------------------------------------------
+ * function prototypes
+ * -----------------------------------------------------------------
+ */
+
+/* KINSpgmr linit, lsetup, lsolve, and lfree routines */
+
+static int KINSpgmrInit(KINMem kin_mem);
+static int KINSpgmrSetup(KINMem kin_mem);
+static int KINSpgmrSolve(KINMem kin_mem, N_Vector xx, 
+                         N_Vector bb, realtype *sJpnorm, realtype *sFdotJp);
+static int KINSpgmrFree(KINMem kin_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * readability replacements
+ * -----------------------------------------------------------------
+ */
+
+#define nni            (kin_mem->kin_nni)
+#define nnilset        (kin_mem->kin_nnilset)
+#define func           (kin_mem->kin_func)
+#define user_data      (kin_mem->kin_user_data)
+#define printfl        (kin_mem->kin_printfl)
+#define linit          (kin_mem->kin_linit)
+#define lsetup         (kin_mem->kin_lsetup)
+#define lsolve         (kin_mem->kin_lsolve)
+#define lfree          (kin_mem->kin_lfree)
+#define lmem           (kin_mem->kin_lmem)
+#define inexact_ls     (kin_mem->kin_inexact_ls)
+#define uu             (kin_mem->kin_uu)
+#define fval           (kin_mem->kin_fval)
+#define uscale         (kin_mem->kin_uscale)
+#define fscale         (kin_mem->kin_fscale)
+#define sqrt_relfunc   (kin_mem->kin_sqrt_relfunc)
+#define jacCurrent     (kin_mem->kin_jacCurrent)
+#define eps            (kin_mem->kin_eps)
+#define errfp          (kin_mem->kin_errfp)
+#define infofp         (kin_mem->kin_infofp)
+#define setupNonNull   (kin_mem->kin_setupNonNull)
+#define vtemp1         (kin_mem->kin_vtemp1)
+#define vec_tmpl       (kin_mem->kin_vtemp1)
+#define vtemp2         (kin_mem->kin_vtemp2)
+#define strategy       (kin_mem->kin_globalstrategy)
+
+#define pretype   (kinspils_mem->s_pretype)
+#define gstype    (kinspils_mem->s_gstype)
+#define nli       (kinspils_mem->s_nli)
+#define npe       (kinspils_mem->s_npe)
+#define nps       (kinspils_mem->s_nps)
+#define ncfl      (kinspils_mem->s_ncfl)
+#define njtimes   (kinspils_mem->s_njtimes)
+#define nfes      (kinspils_mem->s_nfes)
+#define new_uu    (kinspils_mem->s_new_uu)
+#define spils_mem (kinspils_mem->s_spils_mem)
+
+#define jtimesDQ  (kinspils_mem->s_jtimesDQ)
+#define jtimes    (kinspils_mem->s_jtimes)
+#define J_data    (kinspils_mem->s_J_data)
+
+#define last_flag (kinspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpgmr
+ * -----------------------------------------------------------------
+ * This routine allocates and initializes the memory record and
+ * sets function fields specific to the SPGMR linear solver module.
+ * KINSpgmr sets the kin_linit, kin_lsetup, kin_lsolve, and
+ * kin_lfree fields in *kinmem to be KINSpgmrInit, KINSpgmrSetup,
+ * KINSpgmrSolve, and KINSpgmrFree, respectively. It allocates
+ * memory for a structure of type KINSpilsMemRec and sets the
+ * kin_lmem field in *kinmem to the address of this structure. It
+ * also calls SpgmrMalloc to allocate memory for the module
+ * SPGMR. In summary, KINSpgmr sets various fields in the
+ * KINSpilsMemRec structure.
+ * -----------------------------------------------------------------
+ */
+
+int KINSpgmr(void *kinmem, int maxl)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+  SpgmrMem spgmr_mem;
+  int maxl1;
+
+  if (kinmem == NULL){
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpgmr", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);  
+  }
+  kin_mem = (KINMem) kinmem;
+
+  /* check for required vector operations */
+
+  /* Note: do NOT need to check for N_VLinearSum, N_VProd, N_VScale, N_VDiv, 
+     or N_VWL2Norm because they are required by KINSOL */
+
+  if ((vec_tmpl->ops->nvconst == NULL) ||
+      (vec_tmpl->ops->nvdotprod == NULL) ||
+      (vec_tmpl->ops->nvl1norm == NULL)) {
+    KINProcessError(NULL, KINSPILS_ILL_INPUT, "KINSPILS", "KINSpgmr", MSGS_BAD_NVECTOR);
+    return(KINSPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(kin_mem);
+
+  /* set four main function fields in kin_mem */
+
+  linit  = KINSpgmrInit; 
+  lsetup = KINSpgmrSetup;
+  lsolve = KINSpgmrSolve;
+  lfree  = KINSpgmrFree;
+
+  /* get memory for KINSpilsMemRec */
+  kinspils_mem = NULL;
+  kinspils_mem = (KINSpilsMem) malloc(sizeof(struct KINSpilsMemRec));
+  if (kinspils_mem == NULL){
+    KINProcessError(NULL, KINSPILS_MEM_FAIL, "KINSPILS", "KINSpgmr", MSGS_MEM_FAIL);
+    return(KINSPILS_MEM_FAIL);  
+  }
+
+  /* Set ILS type */
+  kinspils_mem->s_type = SPILS_SPGMR;
+
+  /* set SPGMR parameters that were passed in call sequence */
+
+  maxl1 = (maxl <= 0) ? KINSPILS_MAXL : maxl;
+  kinspils_mem->s_maxl = maxl1;  
+
+  /* Set defaults for Jacobian-related fileds */
+
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  J_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+
+  kinspils_mem->s_pset   = NULL;
+  kinspils_mem->s_psolve = NULL;
+  kinspils_mem->s_pfree  = NULL;
+  kinspils_mem->s_P_data = kin_mem->kin_user_data;
+
+  /* Set default values for the rest of the SPGMR parameters */
+
+  kinspils_mem->s_pretype   = PREC_NONE;
+  kinspils_mem->s_gstype    = MODIFIED_GS;
+  kinspils_mem->s_maxlrst   = 0;
+  kinspils_mem->s_last_flag = KINSPILS_SUCCESS;
+
+  kinSpilsInitializeCounters(kinspils_mem);
+
+  /* Call SpgmrMalloc to allocate workspace for SPGMR */
+
+  /* vec_tmpl passed as template vector */
+  spgmr_mem = NULL;
+  spgmr_mem = SpgmrMalloc(maxl1, vec_tmpl);
+  if (spgmr_mem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_FAIL, "KINSPILS", "KINSpgmr", MSGS_MEM_FAIL);
+    free(kinspils_mem); kinspils_mem = NULL;
+    return(KINSPILS_MEM_FAIL);
+  }
+
+  /* This is an iterative linear solver */
+
+  inexact_ls = TRUE;
+
+  /* Attach SPGMR memory to spils memory structure */
+  spils_mem = (void *) spgmr_mem;
+
+  /* attach linear solver memory to KINSOL memory */
+  lmem = kinspils_mem;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * additional readability replacements
+ * -----------------------------------------------------------------
+ */
+
+#define maxl    (kinspils_mem->s_maxl)
+#define maxlrst (kinspils_mem->s_maxlrst)
+#define pset    (kinspils_mem->s_pset)
+#define psolve  (kinspils_mem->s_psolve)
+#define P_data  (kinspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpgmrInit
+ * -----------------------------------------------------------------
+ * This routine initializes variables associated with the GMRES
+ * linear solver. Memory allocation was done previously in
+ * KINSpgmr.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpgmrInit(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  /* initialize counters */
+  kinSpilsInitializeCounters(kinspils_mem);
+
+  /* set preconditioner type */
+
+  if (psolve != NULL) {
+    pretype = PREC_RIGHT;
+  } else {
+    pretype = PREC_NONE;
+  }
+  
+  /* set setupNonNull to TRUE iff there is preconditioning with setup */
+
+  setupNonNull = (psolve != NULL) && (pset != NULL);
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+
+  if (jtimesDQ) {
+    jtimes = KINSpilsDQJtimes;
+    J_data = kin_mem;
+  } else {
+    J_data = user_data;
+  }
+
+  if ( (strategy == KIN_PICARD) && jtimesDQ ) {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSpgmrInit", 
+		    MSG_NOL_FAIL);
+    return(KIN_ILL_INPUT);
+  }
+
+  last_flag = KINSPILS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpgmrSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the SPGMR linear
+ * solver, that is, it is an interface to the user-supplied
+ * routine pset.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpgmrSetup(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  int ret;
+
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  /* call pset routine */
+
+  ret = pset(uu, uscale, fval, fscale, P_data, vtemp1, vtemp2); 
+
+  last_flag = ret;
+
+  npe++;
+  nnilset = nni; 
+
+  /* return the same value ret that pset returned */
+
+  return(ret);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpgmrSolve
+ * -----------------------------------------------------------------
+ * This routine handles the call to the generic SPGMR solver
+ * SpgmrSolve for the solution of the linear system Ax = b.
+ *
+ * Appropriate variables are passed to SpgmrSolve and the counters
+ * nli, nps, and ncfl are incremented, and the return value is set
+ * according to the success of SpgmrSolve. The success flag is
+ * returned if SpgmrSolve converged, or if the residual was reduced.
+ * Of the other error conditions, only preconditioner solver
+ * failure is specifically returned. Otherwise a generic flag is
+ * returned to denote failure of this routine.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpgmrSolve(KINMem kin_mem, N_Vector xx, N_Vector bb, 
+                         realtype *sJpnorm, realtype *sFdotJp)
+{
+  KINSpilsMem kinspils_mem;
+  SpgmrMem spgmr_mem;
+  int ret, nli_inc, nps_inc;
+  realtype res_norm;
+  
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  spgmr_mem = (SpgmrMem) spils_mem;
+
+  /* Set initial guess to xx = 0. bb is set, by the routine
+     calling KINSpgmrSolve, to the RHS vector for the system
+     to be solved. */ 
+ 
+  N_VConst(ZERO, xx);
+
+  new_uu = TRUE;  /* set flag required for user Jacobian routine */
+
+  /* call SpgmrSolve */
+
+  ret = SpgmrSolve(spgmr_mem, kin_mem, xx, bb, pretype, gstype, eps, 
+                   maxlrst, kin_mem, fscale, fscale, KINSpilsAtimes,
+                   KINSpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+
+  /* increment counters nli, nps, and ncfl 
+     (nni is updated in the KINSol main iteration loop) */
+
+  nli = nli + (long int) nli_inc;
+  nps = nps + (long int) nps_inc;
+
+  if (printfl > 2) 
+    KINPrintInfo(kin_mem, PRNT_NLI, "KINSPGMR", "KINSpgmrSolve", INFO_NLI, nli_inc);
+
+  if (ret != 0) ncfl++;
+  last_flag = ret;
+
+  if ( (ret != 0) && (ret != SPGMR_RES_REDUCED) ) {
+
+    /* Handle all failure returns from SpgmrSolve */
+
+    switch(ret) {
+    case SPGMR_PSOLVE_FAIL_REC:
+    case SPGMR_ATIMES_FAIL_REC:
+      return(1);
+      break;
+    case SPGMR_CONV_FAIL:
+    case SPGMR_QRFACT_FAIL:
+    case SPGMR_MEM_NULL:
+    case SPGMR_GS_FAIL:
+    case SPGMR_QRSOL_FAIL:
+    case SPGMR_ATIMES_FAIL_UNREC:
+    case SPGMR_PSOLVE_FAIL_UNREC:
+      return(-1);
+      break;
+    }
+  }
+
+  /*  SpgmrSolve returned either SPGMR_SUCCESS or SPGMR_RES_REDUCED.
+
+     Compute the terms sJpnorm and sFdotJp for use in the linesearch
+     routine and in KINForcingTerm.  Both of these terms are subsequently
+     corrected if the step is reduced by constraints or the linesearch.
+
+     sJpnorm is the norm of the scaled product (scaled by fscale) of the
+     current Jacobian matrix J and the step vector p (= solution vector xx).
+
+     sFdotJp is the dot product of the scaled f vector and the scaled
+     vector J*p, where the scaling uses fscale.                            */
+
+  ret = KINSpilsAtimes(kin_mem, xx, bb);
+  if (ret > 0) {
+    last_flag = SPGMR_ATIMES_FAIL_REC;
+    return(1);
+  }      
+  else if (ret < 0) {
+    last_flag = SPGMR_ATIMES_FAIL_UNREC;
+    return(-1);
+  }
+
+  *sJpnorm = N_VWL2Norm(bb, fscale);
+  N_VProd(bb, fscale, bb);
+  N_VProd(bb, fscale, bb);
+  *sFdotJp = N_VDotProd(fval, bb);
+
+  if (printfl > 2) KINPrintInfo(kin_mem, PRNT_EPS, "KINSPGMR",
+                     "KINSpgmrSolve", INFO_EPS, res_norm, eps);
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpgmrFree
+ * -----------------------------------------------------------------
+ * This routine frees memory specific to the SPGMR linear solver.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSpgmrFree(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  SpgmrMem spgmr_mem;
+
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  spgmr_mem = (SpgmrMem) spils_mem;
+  SpgmrFree(spgmr_mem);
+
+  if (kinspils_mem->s_pfree != NULL) (kinspils_mem->s_pfree)(kin_mem);
+
+  free(kinspils_mem); kinspils_mem = NULL;
+
+  return(0);
+}
diff --git a/src/kinsol/kinsol_spils.c b/src/kinsol/kinsol_spils.c
new file mode 100644
index 0000000..262c738
--- /dev/null
+++ b/src/kinsol/kinsol_spils.c
@@ -0,0 +1,639 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4749 $
+ * $Date: 2016-04-23 18:42:38 -0700 (Sat, 23 Apr 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the KINSPILS linear solvers.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "kinsol_impl.h"
+#include "kinsol_spils_impl.h"
+
+#include <sundials/sundials_math.h>
+
+/*
+ * -----------------------------------------------------------------
+ * private constants
+ * -----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+
+/*
+ * -----------------------------------------------------------------
+ * readability replacements
+ * -----------------------------------------------------------------
+ */
+
+#define lrw1           (kin_mem->kin_lrw1)
+#define liw1           (kin_mem->kin_liw1)
+#define func           (kin_mem->kin_func)
+#define user_data      (kin_mem->kin_user_data)
+#define printfl        (kin_mem->kin_printfl)
+#define lmem           (kin_mem->kin_lmem)
+#define uu             (kin_mem->kin_uu)
+#define fval           (kin_mem->kin_fval)
+#define uscale         (kin_mem->kin_uscale)
+#define fscale         (kin_mem->kin_fscale)
+#define sqrt_relfunc   (kin_mem->kin_sqrt_relfunc)
+#define eps            (kin_mem->kin_eps)
+#define errfp          (kin_mem->kin_errfp)
+#define infofp         (kin_mem->kin_infofp)
+#define vtemp1         (kin_mem->kin_vtemp1)
+#define vec_tmpl       (kin_mem->kin_vtemp1)
+#define vtemp2         (kin_mem->kin_vtemp2)
+
+#define ils_type       (kinspils_mem->s_type)
+#define pretype        (kinspils_mem->s_pretype)
+#define gstype         (kinspils_mem->s_gstype)
+#define nli            (kinspils_mem->s_nli)
+#define npe            (kinspils_mem->s_npe)
+#define nps            (kinspils_mem->s_nps)
+#define ncfl           (kinspils_mem->s_ncfl)
+#define njtimes        (kinspils_mem->s_njtimes)
+#define nfes           (kinspils_mem->s_nfes)
+#define new_uu         (kinspils_mem->s_new_uu)
+
+#define jtimesDQ       (kinspils_mem->s_jtimesDQ)
+#define jtimes         (kinspils_mem->s_jtimes)
+#define J_data         (kinspils_mem->s_J_data)
+
+#define last_flag      (kinspils_mem->s_last_flag)
+
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsSetMaxRestarts
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsSetMaxRestarts(void *kinmem, int maxrs)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsSetMaxRestarts", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsSetMaxRestarts", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  /* check for legal maxrs */
+
+  if (maxrs < 0) {
+    KINProcessError(kin_mem, KINSPILS_ILL_INPUT, "KINSPILS", "KINSpilsSetMaxRestarts", MSGS_NEG_MAXRS);
+    return(KINSPILS_ILL_INPUT);
+  }
+  kinspils_mem->s_maxlrst = maxrs;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsSetPreconditioner
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsSetPreconditioner(void *kinmem,
+			      KINSpilsPrecSetupFn pset, KINSpilsPrecSolveFn psolve)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsSetPreconditioner", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsSetPreconditioner", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  kinspils_mem->s_pset   = pset;
+  kinspils_mem->s_psolve = psolve;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsSetJacTimesVecFn
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsSetJacTimesVecFn(void *kinmem, KINSpilsJacTimesVecFn jtv)
+
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsSetJacTimesVecFn", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsSetJacTimesVecFn", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  if (jtv != NULL) {
+    jtimesDQ = FALSE;
+    jtimes = jtv;
+  } else {
+    jtimesDQ = TRUE;
+  }
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsGetWorkSpace
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsGetWorkSpace(void *kinmem, long int *lenrwSG, long int *leniwSG)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+  int maxl;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsGetWorkSpace", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsGetWorkSpace", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  maxl = kinspils_mem->s_maxl;
+
+  switch(ils_type) {
+  case SPILS_SPGMR:
+    *lenrwSG = lrw1 * (maxl + 3) + (maxl * (maxl + 4)) + 1;
+    *leniwSG = liw1 * (maxl + 3);
+    break;
+  case SPILS_SPBCG:
+    *lenrwSG = lrw1 * 7;
+    *leniwSG = liw1 * 7;
+    break;
+  case SPILS_SPTFQMR:
+    *lenrwSG = lrw1 * 11;
+    *leniwSG = liw1 * 11;
+    break;
+  }
+
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsGetNumPrecEvals
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsGetNumPrecEvals(void *kinmem, long int *npevals)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsGetNumPrecEvals", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsGetNumPrecEvals", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+  *npevals = npe;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsGetNumPrecSolves
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsGetNumPrecSolves(void *kinmem, long int *npsolves)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsGetNumPrecSolves", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsGetNumPrecSolves", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+  *npsolves = nps;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsGetNumLinIters
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsGetNumLinIters(void *kinmem, long int *nliters)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsGetNumLinIters", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsGetNumLinIters", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+  *nliters = nli;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsGetNumConvFails
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsGetNumConvFails(void *kinmem, long int *nlcfails)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsGetNumConvFails", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsGetNumConvFails", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+  *nlcfails = ncfl;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsGetNumJtimesEvals
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsGetNumJtimesEvals(void *kinmem, long int *njvevals)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsGetNumJtimesEvals", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsGetNumJtimesEvals", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+  *njvevals = njtimes;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsGetNumFuncEvals
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsGetNumFuncEvals(void *kinmem, long int *nfevalsS)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsGetNumFuncEvals", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsGetNumFuncEvals", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+  *nfevalsS = nfes;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsGetLastFlag
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsGetLastFlag(void *kinmem, long int *flag)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+
+  /* return immediately if kinmem is NULL */
+
+  if (kinmem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSpilsGetLastFlag", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kinmem;
+
+  if (lmem == NULL) {
+    KINProcessError(kin_mem, KINSPILS_LMEM_NULL, "KINSPILS", "KINSpilsGetLastFlag", MSGS_LMEM_NULL);
+    return(KINSPILS_LMEM_NULL);
+  }
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  *flag = last_flag;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsGetReturnFlagName
+ * -----------------------------------------------------------------
+ */
+
+char *KINSpilsGetReturnFlagName(long int flag)
+{
+  char *name;
+
+  name = (char *)malloc(30*sizeof(char));
+
+  switch(flag) {
+  case KINSPILS_SUCCESS:
+    sprintf(name, "KINSPILS_SUCCESS");
+    break;
+  case KINSPILS_MEM_NULL:
+    sprintf(name, "KINSPILS_MEM_NULL");
+    break;
+  case KINSPILS_LMEM_NULL:
+    sprintf(name, "KINSPILS_LMEM_NULL");
+    break;
+  case KINSPILS_ILL_INPUT:
+    sprintf(name, "KINSPILS_ILL_INPUT");
+    break;
+  case KINSPILS_MEM_FAIL:
+    sprintf(name, "KINSPILS_MEM_FAIL");
+    break;
+  case KINSPILS_PMEM_NULL:
+    sprintf(name, "KINSPILS_PMEM_NULL");
+    break;
+  default:
+    sprintf(name, "NONE");
+  }
+
+  return(name);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * additional readability replacements
+ * -----------------------------------------------------------------
+ */
+
+#define maxl    (kinspils_mem->s_maxl)
+#define maxlrst (kinspils_mem->s_maxlrst)
+#define pset    (kinspils_mem->s_pset)
+#define psolve  (kinspils_mem->s_psolve)
+#define P_data  (kinspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsAtimes
+ * -----------------------------------------------------------------
+ * This routine coordinates the generation of the matrix-vector
+ * product z = J*v by calling either KINSpilsDQJtimes, which uses
+ * a difference quotient approximation for J*v, or by calling the
+ * user-supplied routine KINSpilsJacTimesVecFn if it is non-null.
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsAtimes(void *kinsol_mem, N_Vector v, N_Vector z)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+  int ret;
+
+  kin_mem = (KINMem) kinsol_mem;
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  ret = jtimes(v, z, uu, &new_uu, J_data);
+  njtimes++;
+
+  return(ret);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsPSolve
+ * -----------------------------------------------------------------
+ * This routine interfaces between the generic Sp***Solve routine
+ * (within the SPGMR, SPBCG, or SPTFQMR solver) and the
+ * user's psolve routine.  It passes to psolve all required state 
+ * information from kinsol_mem.  Its return value is the same as that
+ * returned by psolve. Note that the generic SP*** solver guarantees
+ * that KINSpilsPSolve will not be called in the case in which
+ * preconditioning is not done. This is the only case in which the
+ * user's psolve routine is allowed to be NULL.
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsPSolve(void *kinsol_mem, N_Vector r, N_Vector z, int lrdummy)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+  int ret;
+
+  kin_mem = (KINMem) kinsol_mem;
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  /* copy the rhs into z before the psolve call */   
+  /* Note: z returns with the solution */
+
+  N_VScale(ONE, r, z);
+
+  /* this call is counted in nps within the KINSpilsSolve routine */
+
+  ret = psolve(uu, uscale, fval, fscale, z, P_data, vtemp1);
+
+  return(ret);     
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSpilsDQJtimes
+ * -----------------------------------------------------------------
+ * This routine generates the matrix-vector product z = J*v using a
+ * difference quotient approximation. The approximation is 
+ * J*v = [func(uu + sigma*v) - func(uu)]/sigma. Here sigma is based
+ * on the dot products (uscale*uu, uscale*v) and
+ * (uscale*v, uscale*v), the L1Norm(uscale*v), and on sqrt_relfunc
+ * (the square root of the relative error in the function). Note
+ * that v in the argument list has already been both preconditioned
+ * and unscaled.
+ *
+ * NOTE: Unlike the DQ Jacobian functions for direct linear solvers
+ *       (which are called from within the lsetup function), this
+ *       function is called from within the lsolve function and thus
+ *       a recovery may still be possible even if the system function
+ *       fails (recoverably).
+ * -----------------------------------------------------------------
+ */
+
+int KINSpilsDQJtimes(N_Vector v, N_Vector Jv,
+                     N_Vector u, booleantype *new_u, 
+                     void *data)
+{
+  realtype sigma, sigma_inv, sutsv, sq1norm, sign, vtv;
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+  int retval;
+
+  /* data is kin_mem */
+
+  kin_mem = (KINMem) data;
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  /* scale the vector v and put Du*v into vtemp1 */
+
+  N_VProd(v, uscale, vtemp1);
+
+  /* scale u and put into Jv (used as a temporary storage) */
+
+  N_VProd(u, uscale, Jv);
+
+  /* compute dot product (Du*u).(Du*v) */
+
+  sutsv = N_VDotProd(Jv, vtemp1);
+
+  /* compute dot product (Du*v).(Du*v) */
+
+  vtv = N_VDotProd(vtemp1, vtemp1);
+
+  sq1norm = N_VL1Norm(vtemp1);
+
+  sign = (sutsv >= ZERO) ? ONE : -ONE ;
+ 
+  /*  this expression for sigma is from p. 469, Brown and Saad paper */
+
+  sigma = sign*sqrt_relfunc*SUNMAX(SUNRabs(sutsv),sq1norm)/vtv;
+
+  sigma_inv = ONE/sigma;
+
+  /* compute the u-prime at which to evaluate the function func */
+
+  N_VLinearSum(ONE, u, sigma, v, vtemp1);
+ 
+  /* call the system function to calculate func(u+sigma*v) */
+
+  retval = func(vtemp1, vtemp2, user_data);    
+  nfes++;
+  if (retval != 0) return(retval);
+
+  /* finish the computation of the difference quotient */
+
+  N_VLinearSum(sigma_inv, vtemp2, -sigma_inv, fval, Jv);
+
+  return(0);
+}
+
+int kinSpilsInitializeCounters(KINSpilsMem kinspils_mem)
+{
+  kinspils_mem->s_npe     = 0;
+  kinspils_mem->s_nli     = 0;
+  kinspils_mem->s_nps     = 0;
+  kinspils_mem->s_ncfl    = 0;
+  kinspils_mem->s_njtimes = 0;
+  kinspils_mem->s_nfes    = 0;
+  
+  return(0);
+}
diff --git a/src/kinsol/kinsol_spils_impl.h b/src/kinsol/kinsol_spils_impl.h
new file mode 100644
index 0000000..e7b5b3a
--- /dev/null
+++ b/src/kinsol/kinsol_spils_impl.h
@@ -0,0 +1,191 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * Common implementation header file for the scaled, preconditioned
+ * linear solver modules.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _KINSPILS_IMPL_H
+#define _KINSPILS_IMPL_H
+
+#include <kinsol/kinsol_spils.h>
+#include "kinsol_impl.h"
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+/* Types of iterative linear solvers */
+
+#define SPILS_SPGMR   1
+#define SPILS_SPBCG   2
+#define SPILS_SPTFQMR 3
+#define SPILS_SPFGMR  5
+
+/*
+ * -----------------------------------------------------------------
+ * keys for KINPrintInfo (do not use 1 -> conflict with PRNT_RETVAL)
+ * -----------------------------------------------------------------
+ */
+
+#define PRNT_NLI   101
+#define PRNT_EPS   102
+
+/*
+ * -----------------------------------------------------------------
+ * Types : struct KINSpilsMemRec and struct *KINSpilsMem
+ * -----------------------------------------------------------------
+ * A variable declaration of type struct *KINSpilsMem denotes a
+ * pointer to a data structure of type struct KINSpilsMemRec. The
+ * KINSpilsMemRec structure contains fields that must be accessible
+ * by KINSPILS/SPGMR solver module routines.
+ * -----------------------------------------------------------------
+ */
+
+typedef struct KINSpilsMemRec {
+
+  int s_type;           /* type of scaled preconditioned iterative LS          */
+
+  /* problem specification data */
+
+  int  s_maxl;          /* maximum allowable dimension of Krylov subspace      */     
+  int  s_pretype;       /* preconditioning type: PREC_NONE, PREC_RIGHT,
+                           PREC_LEFT or PREC_BOTH (used by SPGMR module and
+                           defined in sundials_iterative.h)                    */
+  int  s_gstype;        /* Gram-Schmidt orthogonalization procedure:
+                           CLASSICAL_GS or MODIFIED_GS (used by SPGMR module
+                           and defined in sundials_iterative.h)                */
+  booleantype s_new_uu; /* flag indicating if the iterate has been updated -
+                           Jacobian must be updated/reevaluated (meant to be
+                           used by user-supplied jtimes function)              */
+  int s_maxlrst;        /* maximum number of times the SPGMR linear solver
+                           can be restarted                                    */
+
+  /* counters */
+
+  long int s_nli;     /* number of linear iterations performed                 */
+  long int s_npe;     /* number of preconditioner evaluations                  */
+  long int s_nps;     /* number of calls to preconditioner solve fun.          */
+  long int s_ncfl;    /* number of linear convergence failures                 */
+  long int s_nfes;    /* number of evaluations of the system function F(u) or
+                         number of calls made to func routine                  */    
+  long int s_njtimes; /* number of times the matrix-vector product J(u)*v
+                         was computed or number of calls made to jtimes
+                         routine                                               */
+
+  /* miscellaneous */
+
+  void *s_spils_mem;    /* pointer to generic linear solver memory block       */
+
+  long int s_last_flag; /* last flag returned                                  */
+
+
+  /* Preconditioner computation
+   * (a) user-provided:
+   *     - P_data == user_data
+   *     - pfree == NULL (the user dealocates memory for user_data)
+   * (b) internal preconditioner module
+   *     - P_data == kinsol_mem
+   *     - pfree == set by the prec. module and called in KINSpilsFree
+   */
+ 
+  KINSpilsPrecSetupFn s_pset;     
+  KINSpilsPrecSolveFn s_psolve; 
+  int (*s_pfree)(KINMem kin_mem);
+  void *s_P_data;
+
+  /* Jacobian times vector compuation
+   * (a) jtimes function provided by the user:
+   *     - J_data == user_data
+   *     - jtimesDQ == FALSE
+   * (b) internal jtimes
+   *     - J_data == kinsol_mem
+   *     - jtimesDQ == TRUE
+   */
+
+  booleantype s_jtimesDQ;
+  KINSpilsJacTimesVecFn s_jtimes;
+  void *s_J_data;
+
+} *KINSpilsMem;
+
+
+/*
+ * -----------------------------------------------------------------
+ * Prototypes of internal functions
+ * -----------------------------------------------------------------
+ */
+
+/* KINSpgmr Atimes and PSolve routines called by generic solver */
+
+int KINSpilsAtimes(void *kinsol_mem, N_Vector v, N_Vector z);
+int KINSpilsPSolve(void *kinsol_mem, N_Vector r, N_Vector z, int lr);
+
+/* difference quotient approximation for jacobian times vector */
+
+int KINSpilsDQJtimes(N_Vector v, N_Vector Jv,
+                     N_Vector u, booleantype *new_u, 
+                     void *data);
+
+/* Auxilliary functions */
+
+int kinSpilsInitializeCounters(KINSpilsMem kinspils_mem);
+
+
+/*
+ * -----------------------------------------------------------------
+ * KINSPILS error messages
+ * -----------------------------------------------------------------
+ */
+
+#define MSGS_KINMEM_NULL "KINSOL memory is NULL."
+#define MSGS_MEM_FAIL    "A memory request failed."
+#define MSGS_BAD_NVECTOR "A required vector operation is not implemented."
+#define MSGS_LMEM_NULL   "Linear solver memory is NULL."
+#define MSGS_NEG_MAXRS   "maxrs < 0 illegal."
+
+
+/*
+ * -----------------------------------------------------------------
+ * KINSPILS info messages
+ * -----------------------------------------------------------------
+ */
+
+#define INFO_NLI  "nli_inc = %d"
+
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+
+#define INFO_EPS  "residual norm = %12.3Lg  eps = %12.3Lg"
+
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+
+#define INFO_EPS  "residual norm = %12.3lg  eps = %12.3lg"
+
+#else
+
+#define INFO_EPS  "residual norm = %12.3g  eps = %12.3g"
+
+#endif
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/kinsol/kinsol_sptfqmr.c b/src/kinsol/kinsol_sptfqmr.c
new file mode 100644
index 0000000..57ec6a1
--- /dev/null
+++ b/src/kinsol/kinsol_sptfqmr.c
@@ -0,0 +1,436 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Aaron Collier and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the KINSOL interface to the
+ * scaled, preconditioned TFQMR (SPTFQMR) iterative linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "kinsol_impl.h"
+#include <kinsol/kinsol_sptfqmr.h>
+#include "kinsol_spils_impl.h"
+
+#include <sundials/sundials_sptfqmr.h>
+#include <sundials/sundials_math.h>
+
+/*
+ * -----------------------------------------------------------------
+ * private constants
+ * -----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+
+/*
+ * -----------------------------------------------------------------
+ * function prototypes
+ * -----------------------------------------------------------------
+ */
+
+/* KINSptfqmr linit, lsetup, lsolve, and lfree routines */
+
+static int KINSptfqmrInit(KINMem kin_mem);
+static int KINSptfqmrSetup(KINMem kin_mem);
+static int KINSptfqmrSolve(KINMem kin_mem, N_Vector xx,
+			   N_Vector bb, realtype *sJpnorm, realtype *sFdotJp);
+static int KINSptfqmrFree(KINMem kin_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * readability replacements
+ * -----------------------------------------------------------------
+ */
+
+#define nni          (kin_mem->kin_nni)
+#define nnilset      (kin_mem->kin_nnilset)
+#define func         (kin_mem->kin_func)
+#define user_data    (kin_mem->kin_user_data)
+#define printfl      (kin_mem->kin_printfl)
+#define linit        (kin_mem->kin_linit)
+#define lsetup       (kin_mem->kin_lsetup)
+#define lsolve       (kin_mem->kin_lsolve)
+#define lfree        (kin_mem->kin_lfree)
+#define lmem         (kin_mem->kin_lmem)
+#define inexact_ls   (kin_mem->kin_inexact_ls)
+#define uu           (kin_mem->kin_uu)
+#define fval         (kin_mem->kin_fval)
+#define uscale       (kin_mem->kin_uscale)
+#define fscale       (kin_mem->kin_fscale)
+#define sqrt_relfunc (kin_mem->kin_sqrt_relfunc)
+#define eps          (kin_mem->kin_eps)
+#define errfp        (kin_mem->kin_errfp)
+#define infofp       (kin_mem->kin_infofp)
+#define setupNonNull (kin_mem->kin_setupNonNull)
+#define vtemp1       (kin_mem->kin_vtemp1)
+#define vec_tmpl     (kin_mem->kin_vtemp1)
+#define vtemp2       (kin_mem->kin_vtemp2)
+#define strategy     (kin_mem->kin_globalstrategy)
+
+#define pretype     (kinspils_mem->s_pretype)
+#define nli         (kinspils_mem->s_nli)
+#define npe         (kinspils_mem->s_npe)
+#define nps         (kinspils_mem->s_nps)
+#define ncfl        (kinspils_mem->s_ncfl)
+#define njtimes     (kinspils_mem->s_njtimes)
+#define nfes        (kinspils_mem->s_nfes)
+#define new_uu      (kinspils_mem->s_new_uu)
+#define spils_mem   (kinspils_mem->s_spils_mem)
+
+#define jtimesDQ    (kinspils_mem->s_jtimesDQ)
+#define jtimes      (kinspils_mem->s_jtimes)
+#define J_data      (kinspils_mem->s_J_data)
+
+#define last_flag   (kinspils_mem->s_last_flag)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSptfqmr
+ * -----------------------------------------------------------------
+ * This routine allocates and initializes the memory record and
+ * sets function fields specific to the SPTFQMR linear solver module.
+ * KINSptfqmr sets the kin_linit, kin_lsetup, kin_lsolve, and
+ * kin_lfree fields in *kinmem to be KINSptfqmrInit, KINSptfqmrSetup,
+ * KINSptfqmrSolve, and KINSptfqmrFree, respectively. It allocates
+ * memory for a structure of type KINSpilsMemRec and sets the
+ * kin_lmem field in *kinmem to the address of this structure. It
+ * also calls SptfqmrMalloc to allocate memory for the module
+ * SPTFQMR. It sets setupNonNull in (*kin_mem),
+ * and sets various fields in the KINSpilsMemRec structure.
+ * Finally, KINSptfqmr allocates memory for local vectors, and calls
+ * SptfqmrMalloc to allocate memory for the Sptfqmr solver.
+ * -----------------------------------------------------------------
+ */
+
+int KINSptfqmr(void *kinmem, int maxl)
+{
+  KINMem kin_mem;
+  KINSpilsMem kinspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int maxl1;
+
+  if (kinmem == NULL){
+    KINProcessError(NULL, KINSPILS_MEM_NULL, "KINSPILS", "KINSptfqmr", MSGS_KINMEM_NULL);
+    return(KINSPILS_MEM_NULL);  
+  }
+  kin_mem = (KINMem) kinmem;
+
+  /* check for required vector operations */
+
+  /* Note: do NOT need to check for N_VLinearSum, N_VProd, N_VScale, N_VDiv, 
+     or N_VWL2Norm because they are required by KINSOL */
+
+  if ((vec_tmpl->ops->nvconst == NULL) ||
+      (vec_tmpl->ops->nvdotprod == NULL) ||
+      (vec_tmpl->ops->nvl1norm == NULL)) {
+    KINProcessError(NULL, KINSPILS_ILL_INPUT, "KINSPILS", "KINSptfqmr", MSGS_BAD_NVECTOR);
+    return(KINSPILS_ILL_INPUT);
+  }
+
+  if (lfree != NULL) lfree(kin_mem);
+
+  /* set four main function fields in kin_mem */
+
+  linit  = KINSptfqmrInit; 
+  lsetup = KINSptfqmrSetup;
+  lsolve = KINSptfqmrSolve;
+  lfree  = KINSptfqmrFree;
+
+  /* get memory for KINSpilsMemRec */
+  kinspils_mem = NULL;
+  kinspils_mem = (KINSpilsMem) malloc(sizeof(struct KINSpilsMemRec));
+  if (kinspils_mem == NULL){
+    KINProcessError(NULL, KINSPILS_MEM_FAIL, "KINSPILS", "KINSptfqmr", MSGS_MEM_FAIL);
+    return(KINSPILS_MEM_FAIL);  
+  }
+
+  /* Set ILS type */
+  kinspils_mem->s_type = SPILS_SPTFQMR;
+
+  /* set SPTFQMR parameters that were passed in call sequence */
+
+  maxl1 = (maxl <= 0) ? KINSPILS_MAXL : maxl;
+  kinspils_mem->s_maxl = maxl1;  
+
+  /* Set defaults for Jacobian-related fileds */
+
+  jtimesDQ = TRUE;
+  jtimes   = NULL;
+  J_data   = NULL;
+
+  /* Set defaults for preconditioner-related fields */
+
+  kinspils_mem->s_pset   = NULL;
+  kinspils_mem->s_psolve = NULL;
+  kinspils_mem->s_pfree  = NULL;
+  kinspils_mem->s_P_data = kin_mem->kin_user_data;
+
+  /* Set default values for the rest of the SPTFQMR parameters */
+
+  kinspils_mem->s_pretype   = PREC_NONE;
+  kinspils_mem->s_last_flag = KINSPILS_SUCCESS;
+
+  kinSpilsInitializeCounters(kinspils_mem);
+
+  /* Call SptfqmrMalloc to allocate workspace for SPTFQMR */
+
+  /* vec_tmpl passed as template vector */
+
+  sptfqmr_mem = NULL;
+  sptfqmr_mem = SptfqmrMalloc(maxl1, vec_tmpl);
+  if (sptfqmr_mem == NULL) {
+    KINProcessError(NULL, KINSPILS_MEM_FAIL, "KINSPILS", "KINSptfqmr", MSGS_MEM_FAIL);
+    free(kinspils_mem); kinspils_mem = NULL;
+    return(KINSPILS_MEM_FAIL);
+  }
+
+  /* this is an iterative linear solver */
+
+  inexact_ls = TRUE;
+
+  /* Attach SPTFQMR memory to spils memory structure */
+  spils_mem = (void *) sptfqmr_mem;
+
+  /* attach linear solver memory to KINSOL memory */
+  lmem = kinspils_mem;
+
+  return(KINSPILS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * additional readability replacements
+ * -----------------------------------------------------------------
+ */
+
+#define maxl   (kinspils_mem->s_maxl)
+#define pset   (kinspils_mem->s_pset)
+#define psolve (kinspils_mem->s_psolve)
+#define P_data (kinspils_mem->s_P_data)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSptfqmrInit
+ * -----------------------------------------------------------------
+ * This routine initializes variables associated with the SPTFQMR
+ * iterative linear solver. Memory allocation was done previously
+ * in KINSptfqmr.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSptfqmrInit(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  /* initialize counters */
+  kinSpilsInitializeCounters(kinspils_mem);
+
+  /* set preconditioner type */
+
+  if (psolve != NULL) {
+    pretype = PREC_RIGHT;
+  } else {
+    pretype = PREC_NONE;
+  }
+  
+  /* set setupNonNull to TRUE iff there is preconditioning with setup */
+
+  setupNonNull = ((psolve != NULL) && (pset != NULL));
+
+  /* Set Jacobian-related fields, based on jtimesDQ */
+
+  if (jtimesDQ) {
+    jtimes = KINSpilsDQJtimes;
+    J_data = kin_mem;
+  } else {
+    J_data = user_data;
+  }
+
+  if ( (strategy == KIN_PICARD) && jtimesDQ ) {
+    KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSptfqmrInit", 
+		    MSG_NOL_FAIL);
+    return(KIN_ILL_INPUT);
+  }
+
+  last_flag = KINSPILS_SUCCESS;
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSptfqmrSetup
+ * -----------------------------------------------------------------
+ * This routine does the setup operations for the SPTFQMR linear
+ * solver, that is, it is an interface to the user-supplied
+ * routine pset.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSptfqmrSetup(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  int ret;
+
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  /* call pset routine */
+
+  ret = pset(uu, uscale, fval, fscale, P_data, vtemp1, vtemp2);
+
+  last_flag = ret;
+
+  npe++;
+  nnilset = nni;
+
+  /* return the same value ret that pset returned */
+
+  return(ret);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSptfqmrSolve
+ * -----------------------------------------------------------------
+ * This routine handles the call to the generic SPTFQMR solver routine
+ * called SptfqmrSolve for the solution of the linear system Ax = b.
+ *
+ * Appropriate variables are passed to SptfqmrSolve and the counters
+ * nli, nps, and ncfl are incremented, and the return value is set
+ * according to the success of SptfqmrSolve. The success flag is
+ * returned if SptfqmrSolve converged, or if the residual was reduced.
+ * Of the other error conditions, only preconditioner solver
+ * failure is specifically returned. Otherwise a generic flag is
+ * returned to denote failure of this routine.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSptfqmrSolve(KINMem kin_mem, N_Vector xx, N_Vector bb, 
+			   realtype *sJpnorm, realtype *sFdotJp)
+{
+  KINSpilsMem kinspils_mem;
+  SptfqmrMem sptfqmr_mem;
+  int ret, nli_inc, nps_inc;
+  realtype res_norm;
+  
+  kinspils_mem = (KINSpilsMem) lmem;
+  sptfqmr_mem = (SptfqmrMem) spils_mem;
+
+  /* Set initial guess to xx = 0. bb is set, by the routine
+     calling KINSptfqmrSolve, to the RHS vector for the system
+     to be solved. */ 
+ 
+  N_VConst(ZERO, xx);
+
+  new_uu = TRUE;  /* set flag required for user Jacobian routine */
+
+  /* call SptfqmrSolve */
+
+  ret = SptfqmrSolve(sptfqmr_mem, kin_mem, xx, bb, pretype, eps,
+		     kin_mem, fscale, fscale, KINSpilsAtimes,
+		     KINSpilsPSolve, &res_norm, &nli_inc, &nps_inc);
+
+  /* increment counters nli, nps, and ncfl 
+     (nni is updated in the KINSol main iteration loop) */
+
+  nli = nli + (long int) nli_inc;
+  nps = nps + (long int) nps_inc;
+
+  if (printfl > 2) 
+    KINPrintInfo(kin_mem, PRNT_NLI, "KINSPTFQMR", "KINSptfqmrSolve", INFO_NLI, nli_inc);
+
+  if (ret != 0) ncfl++;
+  last_flag = ret;
+
+  if ( (ret != 0) && (ret != SPTFQMR_RES_REDUCED) ) {
+
+    /* Handle all failure returns from SptfqmrSolve */
+
+    switch(ret) {
+    case SPTFQMR_PSOLVE_FAIL_REC:
+    case SPTFQMR_ATIMES_FAIL_REC:
+      return(1);
+      break;
+    case SPTFQMR_CONV_FAIL:
+    case SPTFQMR_MEM_NULL:
+    case SPTFQMR_ATIMES_FAIL_UNREC:
+    case SPTFQMR_PSOLVE_FAIL_UNREC:
+      return(-1);
+      break;
+    }
+  }
+
+  /*  SptfqmrSolve returned either SPTFQMR_SUCCESS or SPTFQMR_RES_REDUCED.
+
+     Compute the terms sJpnorm and sFdotJp for use in the linesearch
+     routine and in KINForcingTerm.  Both of these terms are subsequently
+     corrected if the step is reduced by constraints or the linesearch.
+
+     sJpnorm is the norm of the scaled product (scaled by fscale) of the
+     current Jacobian matrix J and the step vector p (= solution vector xx).
+
+     sFdotJp is the dot product of the scaled f vector and the scaled
+     vector J*p, where the scaling uses fscale.                            */
+
+  ret = KINSpilsAtimes(kin_mem, xx, bb);
+  if (ret > 0) {
+    last_flag = SPTFQMR_ATIMES_FAIL_REC;
+    return(1);
+  }      
+  else if (ret < 0) {
+    last_flag = SPTFQMR_ATIMES_FAIL_UNREC;
+    return(-1);
+  }
+
+  *sJpnorm = N_VWL2Norm(bb, fscale);
+  N_VProd(bb, fscale, bb);
+  N_VProd(bb, fscale, bb);
+  *sFdotJp = N_VDotProd(fval, bb);
+
+  if (printfl > 2) KINPrintInfo(kin_mem, PRNT_EPS, "KINSPTFQMR",
+                     "KINSptfqmrSolve", INFO_EPS, res_norm, eps);
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : KINSptfqmrFree
+ * -----------------------------------------------------------------
+ * Frees memory specific to the SPTFQMR linear solver module.
+ * -----------------------------------------------------------------
+ */
+
+static int KINSptfqmrFree(KINMem kin_mem)
+{
+  KINSpilsMem kinspils_mem;
+  SptfqmrMem sptfqmr_mem;
+
+  kinspils_mem = (KINSpilsMem) lmem;
+
+  sptfqmr_mem = (SptfqmrMem) spils_mem;
+  SptfqmrFree(sptfqmr_mem);
+
+  if (kinspils_mem->s_pfree != NULL) (kinspils_mem->s_pfree)(kin_mem);
+
+  free(kinspils_mem); kinspils_mem = NULL;
+
+  return(0);
+}
diff --git a/src/kinsol/kinsol_superlumt.c b/src/kinsol/kinsol_superlumt.c
new file mode 100644
index 0000000..851ad1c
--- /dev/null
+++ b/src/kinsol/kinsol_superlumt.c
@@ -0,0 +1,506 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4924 $
+ * $Date: 2016-09-19 14:36:05 -0700 (Mon, 19 Sep 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the KINSuperLUMT linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "sundials/sundials_math.h"
+#include "sundials/sundials_superlumt_impl.h"
+
+#include "kinsol/kinsol_superlumt.h"
+#include "kinsol_impl.h"
+#include "kinsol_sparse_impl.h"
+
+/* Constants */
+
+#define ONE          RCONST(1.0)
+#define TWO          RCONST(2.0)
+
+/* KINSuperLUMT linit, lsetup, lsolve, and lfree routines */
+ 
+static int kinSuperLUMTInit(KINMem kin_mem);
+static int kinSuperLUMTSetup(KINMem kin_mem);
+static int kinSuperLUMTSolve(KINMem kin_mem, N_Vector x, N_Vector b,
+		       realtype *sJpnorm, realtype *sFdotJp);		       
+static int kinSuperLUMTFree(KINMem kin_mem);
+
+/*
+ * -----------------------------------------------------------------
+ * KINSuperLUMT
+ * -----------------------------------------------------------------
+ * This routine initializes the memory record and sets various function
+ * fields specific to the KINSOL / SuperLUMT linear solver module.  
+ * KINSuperLUMT first calls the existing lfree routine if this is not NULL.
+ * Then it sets the kin_linit, kin_lsetup, kin_lsolve, and
+ * kin_lfree fields in (*kin_mem) to be kinSuperLUMTInit, kinSuperLUMTSetup,
+ * kinSuperLUMTSolve, NULL, and kinSuperLUMTFree, respectively.
+ * It allocates memory for a structure of type kinsluMemRec and sets
+ * the kin_lmem field in (*kin_mem) to the address of this structure.
+ * It sets setupNonNull in (*kin_mem) to TRUE.
+ * Finally, it allocates memory for SuperLUMT.
+ * The return value is KINSLS_SUCCESS = 0, KINSLS_LMEM_FAIL = -1,
+ * or KINSLS_ILL_INPUT = -2.
+ *
+ * NOTE: The SuperLUMT linear solver assumes a serial implementation
+ *       of the NVECTOR package. Therefore, KINSuperLUMT will first 
+ *       test for a compatible N_Vector internal representation
+ *       by checking that the function N_VGetArrayPointer exists.
+ * -----------------------------------------------------------------
+ */
+
+int KINSuperLUMT(void *kin_mem_v, int num_threads, int n, int nnz)
+{
+  KINMem kin_mem;
+  KINSlsMem kinsls_mem;
+  SLUMTData slumt_data;
+  int *perm_c, *perm_r;
+  int nrhs, panel_size, relax;
+  double *bd;
+  SuperMatrix *B;
+
+  /* Return immediately if kin_mem is NULL. */
+  if (kin_mem_v == NULL) {
+    KINProcessError(NULL, KINSLS_MEM_NULL, "KINSLS", "KINSuperLUMT", 
+		    MSGSP_KINMEM_NULL);
+    return(KINSLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kin_mem_v;
+
+  /* Test if the NVECTOR package is compatible with the Direct solver */
+  if (kin_mem->kin_vtemp1->ops->nvgetarraypointer == NULL) {
+    KINProcessError(kin_mem, KINSLS_ILL_INPUT, "KINSLS", "KINSuperLUMT", 
+		    MSGSP_BAD_NVECTOR);
+    return(KINSLS_ILL_INPUT);
+  }
+
+  if (kin_mem->kin_lfree != NULL) kin_mem->kin_lfree(kin_mem);
+
+  /* Set five main function fields in kin_mem. */
+  kin_mem->kin_linit  = kinSuperLUMTInit;
+  kin_mem->kin_lsetup = kinSuperLUMTSetup;
+  kin_mem->kin_lsolve = kinSuperLUMTSolve;
+  kin_mem->kin_lfree  = kinSuperLUMTFree;
+
+  /* Get memory for kinSlsMemRec. */
+  kinsls_mem = (KINSlsMem) malloc(sizeof(struct KINSlsMemRec));
+  if (kinsls_mem == NULL) {
+    KINProcessError(kin_mem, KINSLS_MEM_FAIL, "KINSLS", "KINSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(KINSLS_MEM_FAIL);
+  }
+
+  /* Get memory for SLUMTData. */
+  slumt_data = (SLUMTData)malloc(sizeof(struct SLUMTDataRec));
+  if (slumt_data == NULL) {
+    KINProcessError(kin_mem, KINSLS_MEM_FAIL, "KINSLS", "KINSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(KINSLS_MEM_FAIL);
+  }
+
+  kin_mem->kin_setupNonNull = TRUE;
+
+  /* Set default Jacobian routine and Jacobian data */
+  kinsls_mem->s_jaceval = NULL;
+  kinsls_mem->s_jacdata = kin_mem->kin_user_data;
+
+  /* Allocate memory for the sparse Jacobian */
+  kinsls_mem->s_JacMat = SparseNewMat(n, n, nnz, CSC_MAT);
+  if (kinsls_mem->s_JacMat == NULL) {
+    KINProcessError(kin_mem, KINSLS_MEM_FAIL, "KINSLS", "KINSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(KINSLS_MEM_FAIL);
+  }
+
+   /* Set up memory for the permutations */
+  perm_r = (int *)malloc(n*sizeof(int));
+  if (perm_r == NULL) {
+    KINProcessError(kin_mem, KINSLS_MEM_FAIL, "KINSLS", "kinSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    return(KINSLS_MEM_FAIL);
+  }
+  perm_c = (int *)malloc(n*sizeof(int));
+  if (perm_c == NULL) {
+    KINProcessError(kin_mem, KINSLS_MEM_FAIL, "KINSLS", "kinSuperLUMT", 
+		    MSGSP_MEM_FAIL);
+    free(perm_r);
+    return(KINSLS_MEM_FAIL);
+  }
+  slumt_data->perm_r = perm_r;
+  slumt_data->perm_c = perm_c;
+
+  kinsls_mem->s_last_flag = KINSLS_SUCCESS;
+
+  /* Set default parameters for SuperLU */
+  slumt_data->num_threads = num_threads;
+  slumt_data->diag_pivot_thresh = 1.0;
+
+  /* Allocate structures for SuperLU */
+  slumt_data->Gstat = (Gstat_t *)malloc(sizeof(Gstat_t));
+  slumt_data->s_A = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_AC = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_L = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_U = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  slumt_data->s_A->Store  = NULL;
+  slumt_data->s_AC->Store = NULL;
+  slumt_data->s_L->Store  = NULL;
+  slumt_data->s_U->Store  = NULL;
+  slumt_data->superlumt_options = (superlumt_options_t *)malloc(sizeof(superlumt_options_t));
+
+  dCreate_CompCol_Matrix(slumt_data->s_A, kinsls_mem->s_JacMat->M, kinsls_mem->s_JacMat->N, 
+			 kinsls_mem->s_JacMat->NNZ, kinsls_mem->s_JacMat->data, 
+			 kinsls_mem->s_JacMat->indexvals, kinsls_mem->s_JacMat->indexptrs, 
+			 SLU_NC, SLU_D, SLU_GE);
+
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  StatAlloc(kinsls_mem->s_JacMat->N, num_threads, panel_size, relax, slumt_data->Gstat);
+  
+  /* Create RHS matrix */
+  nrhs = 1;
+  bd = NULL;
+  B = (SuperMatrix *)malloc(sizeof(SuperMatrix));
+  B->Store = NULL;
+  dCreate_Dense_Matrix(B, n, nrhs, bd, n, 
+		       SLU_DN, SLU_D, SLU_GE);
+  slumt_data->s_B = B;
+
+  /* Set ordering to COLAMD as the kinsol default use.
+     Users can set a different value with KINSuperLUMTSetOrdering,
+     and the user-set value is loaded before any call to factorize the
+     matrix in kinSuperLUMTSetup.  */
+  slumt_data->s_ordering = 3;
+
+  /* This is a direct linear solver */
+  kin_mem->kin_inexact_ls = FALSE;
+
+  /* Attach linear solver memory to the nonlinear solver memory */
+  kinsls_mem->s_solver_data = (void *) slumt_data;
+  kin_mem->kin_lmem = kinsls_mem;
+
+  kinsls_mem->s_last_flag = KINSLS_SUCCESS;
+
+  return(KINSLS_SUCCESS);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * KINSuperLUMT interface functions
+ * -----------------------------------------------------------------
+ */
+
+/*
+  This routine does remaining initializations specific to the KINSuperLUMT
+  linear solver module.  
+  It returns 0 if successful.
+*/
+
+static int kinSuperLUMTInit(KINMem kin_mem)
+{
+  int num_threads, n;
+  KINSlsMem kinsls_mem;
+  SLUMTData slumt_data;
+
+  kinsls_mem = (KINSlsMem)kin_mem->kin_lmem;
+  slumt_data = (SLUMTData) kinsls_mem->s_solver_data;
+
+  kinsls_mem->s_nje = 0;
+  kinsls_mem->s_first_factorize = 1;
+
+  /* ------------------------------------------------------------
+     Allocate storage and initialize statistics variables. 
+     ------------------------------------------------------------*/
+  n = kinsls_mem->s_JacMat->N;
+  num_threads = slumt_data->num_threads;
+
+  StatInit(n, num_threads, slumt_data->Gstat);
+
+  kinsls_mem->s_last_flag = 0;
+  return(0);
+}
+
+/*
+  This routine does the setup operations for the KINSuperLUMT linear 
+  solver module.  It calls the Jacobian evaluation routine,
+  updates counters, and calls the LU factorization routine.
+  The return value is either
+     KINSLS_SUCCESS = 0  if successful,
+     +1  if the jac routine failed recoverably or the
+         LU factorization failed, or
+     -1  if the jac routine failed unrecoverably.
+*/
+
+static int kinSuperLUMTSetup(KINMem kin_mem)
+{
+  int retval, info;
+  int nprocs, panel_size, relax, permc_spec, lwork;
+  int *perm_r, *perm_c;
+  double diag_pivot_thresh, drop_tol;
+  fact_t fact;
+  trans_t trans;
+  yes_no_t refact, usepr;
+  KINSlsMem kinsls_mem;
+  KINSlsSparseJacFn jaceval;
+  SuperMatrix *A, *AC, *L, *U;
+  Gstat_t *Gstat;
+  superlumt_options_t *superlumt_options;
+  SLUMTData slumt_data;
+  SlsMat JacMat;
+  void *jacdata;
+  void *work;
+
+  kinsls_mem = (KINSlsMem) (kin_mem->kin_lmem);
+
+  slumt_data = (SLUMTData) kinsls_mem->s_solver_data;
+
+  jaceval = kinsls_mem->s_jaceval;
+  jacdata = kinsls_mem->s_jacdata;
+  JacMat = kinsls_mem->s_JacMat;
+
+  superlumt_options = slumt_data->superlumt_options;
+  A = slumt_data->s_A;
+  AC = slumt_data->s_AC;
+  L = slumt_data->s_L;
+  U = slumt_data->s_U;
+  Gstat = slumt_data->Gstat;
+  perm_r = slumt_data->perm_r;
+  perm_c = slumt_data->perm_c;
+  nprocs = slumt_data->num_threads;
+  diag_pivot_thresh = slumt_data->diag_pivot_thresh;
+
+  /* Set option values for SuperL_MT */
+  panel_size = sp_ienv(1);
+  relax = sp_ienv(2);
+  fact = EQUILIBRATE;
+  trans = NOTRANS;
+  usepr = NO;
+  drop_tol = 0.0;
+  lwork = 0;
+  work = NULL;
+
+ /* Check that Jacobian eval routine is set */
+  if (jaceval == NULL) {
+    KINProcessError(kin_mem, KINSLS_JAC_NOSET, "KINSLS", "kinSuperLUMTSetup", 
+		    MSGSP_JAC_NOSET);
+    free(kinsls_mem); kinsls_mem = NULL;
+    return(KINSLS_JAC_NOSET);
+  }
+
+  /* Increment nje counter and call Jacobian eval routine. */
+  kinsls_mem->s_nje++;
+  retval = jaceval(kin_mem->kin_uu, kin_mem->kin_fval, JacMat, jacdata, 
+		   kin_mem->kin_vtemp1, kin_mem->kin_vtemp2);
+
+  if (retval < 0) {
+    KINProcessError(kin_mem, KINSLS_JACFUNC_UNRECVR, "KINSLS", 
+		    "kinSuperLUMTSetup", MSGSP_JACFUNC_FAILED);
+    kinsls_mem->s_last_flag = KINSLS_JACFUNC_UNRECVR;
+    return(KINSLS_JACFUNC_UNRECVR);
+  }
+  if (retval > 0) {
+    kinsls_mem->s_last_flag = KINSLS_JACFUNC_RECVR;
+    return(+1);
+  }
+
+  if (kinsls_mem->s_first_factorize) {
+    /* Update the ordering option with any user-updated values from 
+       calls to KINSuperLUMTSetOrdering */
+    permc_spec = slumt_data->s_ordering;
+    get_perm_c(permc_spec, A, perm_c);
+ 
+    refact= NO;
+    kinsls_mem->s_first_factorize = 0;
+  }
+  else {
+    /* ------------------------------------------------------------
+       Re-initialize statistics variables 
+       ------------------------------------------------------------*/
+    StatInit(JacMat->N, nprocs, Gstat);
+    Destroy_CompCol_Permuted(AC);
+    refact= YES;
+  }
+
+  /* ------------------------------------------------------------
+     Initialize the option structure superlumt_options using the
+     user-input parameters;  Subsequent calls will re-initialize
+     options.
+     Apply perm_c to the columns of original A to form AC.
+     ------------------------------------------------------------*/
+  pdgstrf_init(nprocs, fact, trans, refact, panel_size, relax,
+	       diag_pivot_thresh, usepr, drop_tol, perm_c, perm_r,
+	       work, lwork, A, AC, superlumt_options, Gstat);
+  /* ------------------------------------------------------------
+     Compute the LU factorization of A.
+     The following routine will create nprocs threads.
+     ------------------------------------------------------------*/
+  pdgstrf(superlumt_options, AC, perm_r, L, U, Gstat, &info);
+    
+  if (info != 0) {
+    kinsls_mem->s_last_flag = info;
+    return(+1);
+  }
+
+  kinsls_mem->s_last_flag = KINSLS_SUCCESS;
+
+  return(0);
+}
+
+/*
+  This routine handles the solve operation for the KINSuperLUMT linear
+  solver module.  It calls the SuperLUMT solve routine, 
+  then returns KINSLS_SUCCESS = 0.
+*/
+
+static int kinSuperLUMTSolve(KINMem kin_mem, N_Vector x, N_Vector b,
+			     realtype *sJpnorm, realtype *sFdotJp)		       
+{
+  int info, trans;
+  int *perm_r, *perm_c;
+  KINSlsMem kinsls_mem;
+  SuperMatrix *L, *U, *B;
+  Gstat_t *Gstat;
+  DNformat *Bstore;
+  SLUMTData slumt_data;
+  realtype *xd;
+  
+  kinsls_mem = (KINSlsMem) kin_mem->kin_lmem;
+  slumt_data = (SLUMTData) kinsls_mem->s_solver_data;
+
+  L = slumt_data->s_L;
+  U = slumt_data->s_U;
+  perm_r = slumt_data->perm_r;
+  perm_c = slumt_data->perm_c;
+  Gstat = slumt_data->Gstat;
+  B = slumt_data->s_B;
+   
+  /* Copy the right-hand side into x */
+  N_VScale(ONE, b, x);
+  xd = N_VGetArrayPointer(x);
+  Bstore = (DNformat *) (B->Store);
+  Bstore->nzval = xd;
+
+  /* Call SuperLUMT to solve the linear system using L and U */
+  trans = NOTRANS;
+  dgstrs(trans, L, U, perm_r, perm_c, B, Gstat, &info);
+
+  Bstore->nzval = NULL;
+
+  /* Compute the term sFdotJp for use in the linesearch routine.
+     This term is subsequently corrected if the step is reduced by
+     constraints or the linesearch.
+
+     sFdotJp is the dot product of the scaled f vector and the scaled
+     vector J*p, where the scaling uses fscale.                            */
+
+  N_VProd(b, kin_mem->kin_fscale, b);
+  N_VProd(b, kin_mem->kin_fscale, b);
+  *sFdotJp = N_VDotProd(kin_mem->kin_fval, b);
+
+  kinsls_mem->s_last_flag = KINSLS_SUCCESS;
+  return(KINSLS_SUCCESS);
+}
+
+/*
+  This routine frees memory specific to the KINSuperLUMT linear solver.
+*/
+
+static int kinSuperLUMTFree(KINMem kin_mem)
+{
+  KINSlsMem kinsls_mem;
+  SLUMTData slumt_data;
+  
+  kinsls_mem = (KINSlsMem) kin_mem->kin_lmem;
+  slumt_data = (SLUMTData) kinsls_mem->s_solver_data;
+
+  pxgstrf_finalize(slumt_data->superlumt_options, slumt_data->s_AC);
+
+  free(slumt_data->perm_r);
+  free(slumt_data->perm_c);
+  free(slumt_data->superlumt_options);
+  Destroy_SuperNode_SCP( (slumt_data->s_L) );
+  Destroy_CompCol_NCP( (slumt_data->s_U) );
+  StatFree( (slumt_data->Gstat) );
+  free(slumt_data->Gstat);
+  
+  Destroy_SuperMatrix_Store(slumt_data->s_B);
+  SUPERLU_FREE(slumt_data->s_A->Store);
+  if (kinsls_mem->s_JacMat) {
+    SparseDestroyMat(kinsls_mem->s_JacMat);
+    kinsls_mem->s_JacMat = NULL;
+  }
+
+  free(slumt_data->s_B);
+  free(slumt_data->s_A);
+  free(slumt_data->s_AC);
+  free(slumt_data->s_L);
+  free(slumt_data->s_U);
+
+  free(slumt_data); 
+  free(kin_mem->kin_lmem); 
+
+  return(0);
+}
+
+
+/* 
+ * -----------------------------------------------------------------
+ * Optional Input Specification Functions
+ * -----------------------------------------------------------------
+ *
+ * KINSuperLUMTSetOrdering sets the ordering used by SuperLUMT for reducing fill.
+ * Options are: 
+ * 0 for natural ordering
+ * 1 for minimal degree ordering on A'*A
+ * 2 for minimal degree ordering on A'+A
+ * 3 for approximate minimal degree ordering for unsymmetric matrices
+ * The default used in SUNDIALS is 3 for COLAMD.
+ * -----------------------------------------------------------------
+ */
+
+int KINSuperLUMTSetOrdering(void *kin_mem_v, int ordering_choice)
+{
+  KINMem kin_mem;
+  KINSlsMem kinsls_mem;
+  SLUMTData slumt_data;
+
+ /* Return immediately if kin_mem is NULL */
+  if (kin_mem_v == NULL) {
+    KINProcessError(NULL, KINSLS_MEM_NULL, "KINSLS", "KINSuperLUMTSetOrdering",
+		    MSGSP_KINMEM_NULL);
+    return(KINSLS_MEM_NULL);
+  }
+  kin_mem = (KINMem) kin_mem_v;
+  kinsls_mem = (KINSlsMem) kin_mem->kin_lmem;
+
+ /* Return if ordering choice argument is not valid */
+  if ( (ordering_choice != 0) && (ordering_choice != 1) && 
+       (ordering_choice != 2) && (ordering_choice != 3) ) {
+    KINProcessError(NULL, KINSLS_ILL_INPUT, "KINSLS", "KINSuperLUMTSetOrdering",
+		    MSGSP_ILL_INPUT);
+    return(KINSLS_ILL_INPUT);
+  }
+
+  slumt_data = (SLUMTData) kinsls_mem->s_solver_data;
+
+  slumt_data->s_ordering = ordering_choice;
+
+  return(KINSLS_SUCCESS);
+}
+
diff --git a/src/nvec_openmp/CMakeLists.txt b/src/nvec_openmp/CMakeLists.txt
new file mode 100644
index 0000000..eab8451
--- /dev/null
+++ b/src/nvec_openmp/CMakeLists.txt
@@ -0,0 +1,94 @@
+# ---------------------------------------------------------------
+# $Revision: 4075 $
+# $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+# ---------------------------------------------------------------
+# Programmer:  Steve Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the openmp NVECTOR library
+
+INSTALL(CODE "MESSAGE(\"\nInstall NVECTOR_OPENMP\n\")")
+
+# Add variable nvecopenmp_SOURCES with the sources for the NVECOPENMP lib
+SET(nvecopenmp_SOURCES nvector_openmp.c)
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the NVECOPENMP library
+SET(shared_SOURCES sundials_math.c)
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable nvecopenmp_HEADERS with the exported NVECOPENMP header files
+SET(nvecopenmp_HEADERS nvector_openmp.h)
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/nvector/ nvecopenmp_HEADERS)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(.)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+IF(OPENMP_FOUND)
+  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+  # Use C flags for linker as well.
+  SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
+ENDIF(OPENMP_FOUND)
+
+# Rules for building and installing the static library:
+#  - Add the build target for the NVECOPENMP library
+#  - Set the library name and make sure it is not deleted
+#  - Install the NVECOPENMP library
+IF(BUILD_STATIC_LIBS)
+  ADD_LIBRARY(sundials_nvecopenmp_static STATIC ${nvecopenmp_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecopenmp_static
+    PROPERTIES OUTPUT_NAME sundials_nvecopenmp CLEAN_DIRECT_OUTPUT 1)
+  INSTALL(TARGETS sundials_nvecopenmp_static DESTINATION lib)
+ENDIF(BUILD_STATIC_LIBS)
+
+# Rules for building and installing the shared library:
+#  - Add the build target for the NVECOPENMP library
+#  - Set the library name and make sure it is not deleted
+#  - Set VERSION and SOVERSION for shared libraries
+#  - Install the NVECOPENMP library
+IF(BUILD_SHARED_LIBS)
+  ADD_LIBRARY(sundials_nvecopenmp_shared SHARED ${nvecopenmp_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecopenmp_shared
+    PROPERTIES OUTPUT_NAME sundials_nvecopenmp CLEAN_DIRECT_OUTPUT 1)
+  SET_TARGET_PROPERTIES(sundials_nvecopenmp_shared
+    PROPERTIES VERSION ${nveclib_VERSION} SOVERSION ${nveclib_SOVERSION})
+  INSTALL(TARGETS sundials_nvecopenmp_shared DESTINATION lib)
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the NVECOPENMP header files
+INSTALL(FILES ${nvecopenmp_HEADERS} DESTINATION include/nvector)
+
+# If FCMIX is enabled, build and install the FNVECOPENMP library
+IF(FCMIX_ENABLE AND F77_FOUND)
+  SET(fnvecopenmp_SOURCES fnvector_openmp.c)
+  IF(BUILD_STATIC_LIBS)
+    ADD_LIBRARY(sundials_fnvecopenmp_static STATIC ${fnvecopenmp_SOURCES})
+    SET_TARGET_PROPERTIES(sundials_fnvecopenmp_static
+      PROPERTIES OUTPUT_NAME sundials_fnvecopenmp CLEAN_DIRECT_OUTPUT 1)
+    INSTALL(TARGETS sundials_fnvecopenmp_static DESTINATION lib)
+  ENDIF(BUILD_STATIC_LIBS)
+  IF(BUILD_SHARED_LIBS)
+    ADD_LIBRARY(sundials_fnvecopenmp_shared ${fnvecopenmp_SOURCES})
+    SET_TARGET_PROPERTIES(sundials_fnvecopenmp_shared
+      PROPERTIES OUTPUT_NAME sundials_fnvecopenmp CLEAN_DIRECT_OUTPUT 1)
+    SET_TARGET_PROPERTIES(sundials_fnvecopenmp_shared 
+      PROPERTIES VERSION ${nveclib_VERSION} SOVERSION ${nveclib_SOVERSION})
+    INSTALL(TARGETS sundials_fnvecopenmp_shared DESTINATION lib)
+  ENDIF(BUILD_SHARED_LIBS)
+ENDIF(FCMIX_ENABLE AND F77_FOUND)
+
+#
+MESSAGE(STATUS "Added NVECTOR_OPENMP module")
diff --git a/src/nvec_openmp/README b/src/nvec_openmp/README
new file mode 100644
index 0000000..d7faa43
--- /dev/null
+++ b/src/nvec_openmp/README
@@ -0,0 +1,46 @@
+                     NVECTOR_OPENMP
+                 released as part of SUNDIALS
+    SUite of Nonlinear and DIfferential/ALgebraic equation Solvers
+                   Release 2.7.0, September 2016
+
+
+OpenMP implementation of the NVECTOR module for SUNDIALS. 
+
+NVECTOR_OPENMP defines the content field of N_Vector to be a structure 
+containing the length of the vector, a pointer to the beginning of a 
+contiguous data array, and a boolean flag indicating ownership of the 
+data array.
+
+NVECTOR_OPENMP defines five macros to provide access to the content of 
+a openmp N_Vector, several constructors for variables of type N_Vector,
+a constructor for an array of variables of type N_Vector, and destructors
+for N_Vector and N_Vector array.
+
+NVECTOR_OPENMP provides implementations for all vector operations defined
+by the generic NVECTOR module in the table of operations.
+
+
+A. Documentation
+----------------
+
+The openmp NVECTOR implementation follows the serial implemenation
+fully described in the user documentation for any of the SUNDIALS
+solvers. A PDF file for the user guide for a particular solver
+is available in the solver's subdirectory under doc/.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see any of the user guides.
+
+
+C. Releases
+-----------
+
+v. 2.7.0 - Sep. 2015
+v. 2.6.2 - Aug. 2015
+v. 2.6.1 - Mar. 2015
+v. 2.6.0 - Mar. 2015
+
diff --git a/src/nvec_openmp/fnvector_openmp.c b/src/nvec_openmp/fnvector_openmp.c
new file mode 100644
index 0000000..6108cf7
--- /dev/null
+++ b/src/nvec_openmp/fnvector_openmp.c
@@ -0,0 +1,159 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4388 $
+ * $Date: 2015-02-25 15:50:00 -0800 (Wed, 25 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Steven Smith @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file (companion of nvector_openmp.h) contains the
+ * implementation needed for the Fortran initialization of openmp
+ * vector operations.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fnvector_openmp.h"
+
+/* Define global vector variables */
+
+N_Vector F2C_CVODE_vec;
+N_Vector F2C_CVODE_vecQ;
+N_Vector *F2C_CVODE_vecS;
+N_Vector F2C_CVODE_vecB;
+N_Vector F2C_CVODE_vecQB;
+
+N_Vector F2C_IDA_vec;
+N_Vector F2C_IDA_vecQ;
+N_Vector *F2C_IDA_vecS;
+N_Vector F2C_IDA_vecB;
+N_Vector F2C_IDA_vecQB;
+
+N_Vector F2C_KINSOL_vec;
+
+N_Vector F2C_ARKODE_vec;
+
+/* Fortran callable interfaces */
+
+void FNV_INITOMP(int *code, long int *N, int *num_threads, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vec = NULL;
+    F2C_CVODE_vec = N_VNewEmpty_OpenMP(*N, *num_threads);
+    if (F2C_CVODE_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vec = NULL;
+    F2C_IDA_vec = N_VNewEmpty_OpenMP(*N, *num_threads);
+    if (F2C_IDA_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_KINSOL:
+    F2C_KINSOL_vec = NULL;
+    F2C_KINSOL_vec = N_VNewEmpty_OpenMP(*N, *num_threads);
+    if (F2C_KINSOL_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_ARKODE:
+    F2C_ARKODE_vec = NULL;
+    F2C_ARKODE_vec = N_VNewEmpty_OpenMP(*N, *num_threads);
+    if (F2C_ARKODE_vec == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITOMP_Q(int *code, long int *Nq, int *num_threads, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecQ = NULL;
+    F2C_CVODE_vecQ = N_VNewEmpty_OpenMP(*Nq, *num_threads);
+    if (F2C_CVODE_vecQ == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecQ = NULL;
+    F2C_IDA_vecQ = N_VNewEmpty_OpenMP(*Nq, *num_threads);
+    if (F2C_IDA_vecQ == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITOMP_B(int *code, long int *NB, int *num_threads, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecB = NULL;
+    F2C_CVODE_vecB = N_VNewEmpty_OpenMP(*NB, *num_threads);
+    if (F2C_CVODE_vecB == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecB = NULL;
+    F2C_IDA_vecB = N_VNewEmpty_OpenMP(*NB, *num_threads);
+    if (F2C_IDA_vecB == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITOMP_QB(int *code, long int *NqB, int *num_threads, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecQB = NULL;
+    F2C_CVODE_vecQB = N_VNewEmpty_OpenMP(*NqB, *num_threads);
+    if (F2C_CVODE_vecQB == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecQB = NULL;
+    F2C_IDA_vecQB = N_VNewEmpty_OpenMP(*NqB, *num_threads);
+    if (F2C_IDA_vecQB == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITOMP_S(int *code, int *Ns, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecS = NULL;
+    F2C_CVODE_vecS = (N_Vector *) N_VCloneVectorArrayEmpty_OpenMP(*Ns, F2C_CVODE_vec);
+    if (F2C_CVODE_vecS == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecS = NULL;
+    F2C_IDA_vecS = (N_Vector *) N_VCloneVectorArrayEmpty_OpenMP(*Ns, F2C_IDA_vec);
+    if (F2C_IDA_vecS == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+
diff --git a/src/nvec_openmp/fnvector_openmp.h b/src/nvec_openmp/fnvector_openmp.h
new file mode 100644
index 0000000..4451b4b
--- /dev/null
+++ b/src/nvec_openmp/fnvector_openmp.h
@@ -0,0 +1,95 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4388 $
+ * $Date: 2015-02-25 15:50:00 -0800 (Wed, 25 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Steven Smith @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file (companion of nvector_openmp.h) contains the
+ * definitions needed for the initialization of openmp
+ * vector operations in Fortran.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _FNVECTOR_OPENMP_H
+#define _FNVECTOR_OPENMP_H
+
+#include <nvector/nvector_openmp.h>
+#include <sundials/sundials_fnvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+#if defined(SUNDIALS_F77_FUNC)
+#define FNV_INITOMP    SUNDIALS_F77_FUNC(fnvinitomp, FNVINITOMP)
+#else
+#define FNV_INITOMP    fnvinitomp_
+#endif
+
+#if defined(SUNDIALS_F77_FUNC_)
+
+#define FNV_INITOMP_Q  SUNDIALS_F77_FUNC_(fnvinitomp_q, FNVINITOMP_Q)
+#define FNV_INITOMP_S  SUNDIALS_F77_FUNC_(fnvinitomp_s, FNVINITOMP_S)
+#define FNV_INITOMP_B  SUNDIALS_F77_FUNC_(fnvinitomp_b, FNVINITOMP_B)
+#define FNV_INITOMP_QB SUNDIALS_F77_FUNC_(fnvinitomp_qb, FNVINITOMP_QB)
+
+#else
+
+#define FNV_INITOMP_Q  fnvinitomp_q_
+#define FNV_INITOMP_S  fnvinitomp_s_
+#define FNV_INITOMP_B  fnvinitomp_b_
+#define FNV_INITOMP_QB fnvinitomp_qb_
+
+#endif
+
+/* Declarations of global variables */
+
+extern N_Vector F2C_CVODE_vec;
+extern N_Vector F2C_CVODE_vecQ;
+extern N_Vector *F2C_CVODE_vecS;
+extern N_Vector F2C_CVODE_vecB;
+extern N_Vector F2C_CVODE_vecQB;
+
+extern N_Vector F2C_IDA_vec;
+extern N_Vector F2C_IDA_vecQ;
+extern N_Vector *F2C_IDA_vecS;
+extern N_Vector F2C_IDA_vecB;
+extern N_Vector F2C_IDA_vecQB;
+
+extern N_Vector F2C_KINSOL_vec;
+
+extern N_Vector F2C_ARKODE_vec;
+
+/* 
+ * Prototypes of exported functions 
+ *
+ * FNV_INITOMP    - initializes openmp vector operations for main problem
+ * FNV_INITOMP_Q  - initializes openmp vector operations for quadratures
+ * FNV_INITOMP_S  - initializes openmp vector operations for sensitivities
+ * FNV_INITOMP_B  - initializes openmp vector operations for adjoint problem
+ * FNV_INITOMP_QB - initializes openmp vector operations for adjoint quadratures
+ *
+ */
+
+void FNV_INITOMP(int *code, long int *neq, int *num_threads, int *ier);
+void FNV_INITOMP_Q(int *code, long int *Nq, int *num_threads, int *ier);
+void FNV_INITOMP_S(int *code, int *Ns, int *ier);
+void FNV_INITOMP_B(int *code, long int *NB, int *num_threads, int *ier);
+void FNV_INITOMP_QB(int *code, long int *NqB, int *num_threads, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/nvec_openmp/nvector_openmp.c b/src/nvec_openmp/nvector_openmp.c
new file mode 100644
index 0000000..aa23004
--- /dev/null
+++ b/src/nvec_openmp/nvector_openmp.c
@@ -0,0 +1,1332 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4869 $
+ * $Date: 2016-08-19 10:34:20 -0700 (Fri, 19 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): David J. Gardner and Carol S. Woodward @ LLNL
+ * -----------------------------------------------------------------
+ * Acknowledgements: This NVECTOR module is based on the NVECTOR 
+ *                   Serial module by Scott D. Cohen, Alan C. 
+ *                   Hindmarsh, Radu Serban, and Aaron Collier 
+ *                   @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for an OpenMP implementation
+ * of the NVECTOR module.
+ * -----------------------------------------------------------------
+ */
+
+#include <omp.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <nvector/nvector_openmp.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO   RCONST(0.0)
+#define HALF   RCONST(0.5)
+#define ONE    RCONST(1.0)
+#define ONEPT5 RCONST(1.5)
+
+/* Private function prototypes */
+/* z=x */
+static void VCopy_OpenMP(N_Vector x, N_Vector z);
+/* z=x+y */
+static void VSum_OpenMP(N_Vector x, N_Vector y, N_Vector z);
+/* z=x-y */
+static void VDiff_OpenMP(N_Vector x, N_Vector y, N_Vector z);
+/* z=-x */
+static void VNeg_OpenMP(N_Vector x, N_Vector z);
+/* z=c(x+y) */
+static void VScaleSum_OpenMP(realtype c, N_Vector x, N_Vector y, N_Vector z);
+/* z=c(x-y) */
+static void VScaleDiff_OpenMP(realtype c, N_Vector x, N_Vector y, N_Vector z); 
+/* z=ax+y */
+static void VLin1_OpenMP(realtype a, N_Vector x, N_Vector y, N_Vector z);
+/* z=ax-y */
+static void VLin2_OpenMP(realtype a, N_Vector x, N_Vector y, N_Vector z);
+/* y <- ax+y */
+static void Vaxpy_OpenMP(realtype a, N_Vector x, N_Vector y);
+/* x <- ax */
+static void VScaleBy_OpenMP(realtype a, N_Vector x);
+
+/*
+ * -----------------------------------------------------------------
+ * exported functions
+ * -----------------------------------------------------------------
+ */
+
+/* ----------------------------------------------------------------
+ * Returns vector type ID. Used to identify vector implementation 
+ * from abstract N_Vector interface.
+ */
+N_Vector_ID N_VGetVectorID_OpenMP(N_Vector v)
+{
+  return SUNDIALS_NVEC_OPENMP;
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create a new empty vector 
+ */
+
+N_Vector N_VNewEmpty_OpenMP(long int length, int num_threads)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_OpenMP content;
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+  
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+
+  ops->nvgetvectorid     = N_VGetVectorID_OpenMP;
+  ops->nvclone           = N_VClone_OpenMP;
+  ops->nvcloneempty      = N_VCloneEmpty_OpenMP;
+  ops->nvdestroy         = N_VDestroy_OpenMP;
+  ops->nvspace           = N_VSpace_OpenMP;
+  ops->nvgetarraypointer = N_VGetArrayPointer_OpenMP;
+  ops->nvsetarraypointer = N_VSetArrayPointer_OpenMP;
+  ops->nvlinearsum       = N_VLinearSum_OpenMP;
+  ops->nvconst           = N_VConst_OpenMP;
+  ops->nvprod            = N_VProd_OpenMP;
+  ops->nvdiv             = N_VDiv_OpenMP;
+  ops->nvscale           = N_VScale_OpenMP;
+  ops->nvabs             = N_VAbs_OpenMP;
+  ops->nvinv             = N_VInv_OpenMP;
+  ops->nvaddconst        = N_VAddConst_OpenMP;
+  ops->nvdotprod         = N_VDotProd_OpenMP;
+  ops->nvmaxnorm         = N_VMaxNorm_OpenMP;
+  ops->nvwrmsnormmask    = N_VWrmsNormMask_OpenMP;
+  ops->nvwrmsnorm        = N_VWrmsNorm_OpenMP;
+  ops->nvmin             = N_VMin_OpenMP;
+  ops->nvwl2norm         = N_VWL2Norm_OpenMP;
+  ops->nvl1norm          = N_VL1Norm_OpenMP;
+  ops->nvcompare         = N_VCompare_OpenMP;
+  ops->nvinvtest         = N_VInvTest_OpenMP;
+  ops->nvconstrmask      = N_VConstrMask_OpenMP;
+  ops->nvminquotient     = N_VMinQuotient_OpenMP;
+
+  /* Create content */
+  content = NULL;
+  content = (N_VectorContent_OpenMP) malloc(sizeof(struct _N_VectorContent_OpenMP));
+  if (content == NULL) { free(ops); free(v); return(NULL); }
+
+  content->length   = length;
+  content->num_threads = num_threads;
+  content->own_data = FALSE;
+  content->data     = NULL;
+
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create a new vector 
+ */
+
+N_Vector N_VNew_OpenMP(long int length, int num_threads)
+{
+  N_Vector v;
+  realtype *data;
+
+  v = NULL;
+  v = N_VNewEmpty_OpenMP(length, num_threads);
+  if (v == NULL) return(NULL);
+
+  /* Create data */
+  if (length > 0) {
+
+    /* Allocate memory */
+    data = NULL;
+    data = (realtype *) malloc(length * sizeof(realtype));
+    if(data == NULL) { N_VDestroy_OpenMP(v); return(NULL); }
+
+    /* Attach data */
+    NV_OWN_DATA_OMP(v) = TRUE;
+    NV_DATA_OMP(v)     = data;
+
+  }
+
+  return(v);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create a vector with user data component 
+ */
+
+N_Vector N_VMake_OpenMP(long int length, realtype *v_data, int num_threads)
+{
+  N_Vector v;
+
+  v = NULL;
+  v = N_VNewEmpty_OpenMP(length, num_threads);
+  if (v == NULL) return(NULL);
+
+  if (length > 0) {
+    /* Attach data */
+    NV_OWN_DATA_OMP(v) = FALSE;
+    NV_DATA_OMP(v)     = v_data;
+  }
+
+  return(v);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create an array of new vectors. 
+ */
+
+N_Vector *N_VCloneVectorArray_OpenMP(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VClone_OpenMP(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_OpenMP(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create an array of new vectors with NULL data array. 
+ */
+
+N_Vector *N_VCloneVectorArrayEmpty_OpenMP(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VCloneEmpty_OpenMP(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_OpenMP(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to free an array created with N_VCloneVectorArray_OpenMP
+ */
+
+void N_VDestroyVectorArray_OpenMP(N_Vector *vs, int count)
+{
+  int j;
+
+  for (j = 0; j < count; j++) N_VDestroy_OpenMP(vs[j]);
+
+  free(vs); vs = NULL;
+
+  return;
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to return number of vector elements
+ */
+long int N_VGetLength_OpenMP(N_Vector v)
+{
+  return NV_LENGTH_OMP(v);
+}
+
+ 
+/* ----------------------------------------------------------------------------
+ * Function to print a vector 
+ */
+ 
+void N_VPrint_OpenMP(N_Vector x)
+{
+  long int i, N;
+  realtype *xd;
+
+  xd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+
+  for (i = 0; i < N; i++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%11.8Lg\n", xd[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%11.8g\n", xd[i]);
+#else
+    printf("%11.8g\n", xd[i]);
+#endif
+  }
+  printf("\n");
+
+  return;
+}
+
+/*
+ * -----------------------------------------------------------------
+ * implementation of vector operations
+ * -----------------------------------------------------------------
+ */
+
+/* ----------------------------------------------------------------------------
+ * Create new vector from existing vector without attaching data
+ */
+
+N_Vector N_VCloneEmpty_OpenMP(N_Vector w)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_OpenMP content;
+
+  if (w == NULL) return(NULL);
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+  
+  ops->nvgetvectorid     = w->ops->nvgetvectorid;
+  ops->nvclone           = w->ops->nvclone;
+  ops->nvcloneempty      = w->ops->nvcloneempty;
+  ops->nvdestroy         = w->ops->nvdestroy;
+  ops->nvspace           = w->ops->nvspace;
+  ops->nvgetarraypointer = w->ops->nvgetarraypointer;
+  ops->nvsetarraypointer = w->ops->nvsetarraypointer;
+  ops->nvlinearsum       = w->ops->nvlinearsum;
+  ops->nvconst           = w->ops->nvconst;  
+  ops->nvprod            = w->ops->nvprod;   
+  ops->nvdiv             = w->ops->nvdiv;
+  ops->nvscale           = w->ops->nvscale; 
+  ops->nvabs             = w->ops->nvabs;
+  ops->nvinv             = w->ops->nvinv;
+  ops->nvaddconst        = w->ops->nvaddconst;
+  ops->nvdotprod         = w->ops->nvdotprod;
+  ops->nvmaxnorm         = w->ops->nvmaxnorm;
+  ops->nvwrmsnormmask    = w->ops->nvwrmsnormmask;
+  ops->nvwrmsnorm        = w->ops->nvwrmsnorm;
+  ops->nvmin             = w->ops->nvmin;
+  ops->nvwl2norm         = w->ops->nvwl2norm;
+  ops->nvl1norm          = w->ops->nvl1norm;
+  ops->nvcompare         = w->ops->nvcompare;    
+  ops->nvinvtest         = w->ops->nvinvtest;
+  ops->nvconstrmask      = w->ops->nvconstrmask;
+  ops->nvminquotient     = w->ops->nvminquotient;
+
+  /* Create content */
+  content = NULL;
+  content = (N_VectorContent_OpenMP) malloc(sizeof(struct _N_VectorContent_OpenMP));
+  if (content == NULL) { free(ops); free(v); return(NULL); }
+
+  content->length   = NV_LENGTH_OMP(w);
+  content->num_threads   = NV_NUM_THREADS_OMP(w);
+  content->own_data = FALSE;
+  content->data     = NULL;
+
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Create new vector from existing vector and attach data
+ */
+
+N_Vector N_VClone_OpenMP(N_Vector w)
+{
+  N_Vector v;
+  realtype *data;
+  long int length;
+
+  v = NULL;
+  v = N_VCloneEmpty_OpenMP(w);
+  if (v == NULL) return(NULL);
+
+  length = NV_LENGTH_OMP(w);
+
+  /* Create data */
+  if (length > 0) {
+
+    /* Allocate memory */
+    data = NULL;
+    data = (realtype *) malloc(length * sizeof(realtype));
+    if(data == NULL) { N_VDestroy_OpenMP(v); return(NULL); }
+
+    /* Attach data */
+    NV_OWN_DATA_OMP(v) = TRUE;
+    NV_DATA_OMP(v)     = data;
+
+  }
+
+  return(v);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Destroy vector and free vector memory
+ */
+
+void N_VDestroy_OpenMP(N_Vector v)
+{
+  if (NV_OWN_DATA_OMP(v) == TRUE) {
+    free(NV_DATA_OMP(v));
+    NV_DATA_OMP(v) = NULL;
+  }
+  free(v->content); v->content = NULL;
+  free(v->ops); v->ops = NULL;
+  free(v); v = NULL;
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Get storage requirement for N_Vector
+ */
+
+void N_VSpace_OpenMP(N_Vector v, long int *lrw, long int *liw)
+{
+  *lrw = NV_LENGTH_OMP(v);
+  *liw = 1;
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Get vector data pointer
+ */
+
+realtype *N_VGetArrayPointer_OpenMP(N_Vector v)
+{
+  return((realtype *) NV_DATA_OMP(v));
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Set vector data pointer
+ */
+
+void N_VSetArrayPointer_OpenMP(realtype *v_data, N_Vector v)
+{
+  if (NV_LENGTH_OMP(v) > 0) NV_DATA_OMP(v) = v_data;
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute linear combination z[i] = a*x[i]+b*y[i]
+ */
+
+void N_VLinearSum_OpenMP(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype c, *xd, *yd, *zd;
+  N_Vector v1, v2;
+  booleantype test;
+
+  xd = yd = zd = NULL;
+
+  if ((b == ONE) && (z == y)) {    /* BLAS usage: axpy y <- ax+y */
+    Vaxpy_OpenMP(a,x,y);
+    return;
+  }
+
+  if ((a == ONE) && (z == x)) {    /* BLAS usage: axpy x <- by+x */
+    Vaxpy_OpenMP(b,y,x);
+    return;
+  }
+
+  /* Case: a == b == 1.0 */
+
+  if ((a == ONE) && (b == ONE)) {
+    VSum_OpenMP(x, y, z);
+    return;
+  }
+
+  /* Cases: (1) a == 1.0, b = -1.0, (2) a == -1.0, b == 1.0 */
+
+  if ((test = ((a == ONE) && (b == -ONE))) || ((a == -ONE) && (b == ONE))) {
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VDiff_OpenMP(v2, v1, z);
+    return;
+  }
+
+  /* Cases: (1) a == 1.0, b == other or 0.0, (2) a == other or 0.0, b == 1.0 */
+  /* if a or b is 0.0, then user should have called N_VScale */
+
+  if ((test = (a == ONE)) || (b == ONE)) {
+    c  = test ? b : a;
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VLin1_OpenMP(c, v1, v2, z);
+    return;
+  }
+
+  /* Cases: (1) a == -1.0, b != 1.0, (2) a != 1.0, b == -1.0 */
+
+  if ((test = (a == -ONE)) || (b == -ONE)) {
+    c = test ? b : a;
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VLin2_OpenMP(c, v1, v2, z);
+    return;
+  }
+
+  /* Case: a == b */
+  /* catches case both a and b are 0.0 - user should have called N_VConst */
+
+  if (a == b) {
+    VScaleSum_OpenMP(a, x, y, z);
+    return;
+  }
+
+  /* Case: a == -b */
+
+  if (a == -b) {
+    VScaleDiff_OpenMP(a, x, y, z);
+    return;
+  }
+
+  /* Do all cases not handled above:
+     (1) a == other, b == 0.0 - user should have called N_VScale
+     (2) a == 0.0, b == other - user should have called N_VScale
+     (3) a,b == other, a !=b, a != -b */
+  
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,a,b,xd,yd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])+(b*yd[i]);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Assigns constant value to all vector elements, z[i] = c
+ */
+
+void N_VConst_OpenMP(realtype c, N_Vector z)
+{
+  long int i, N;
+  realtype *zd;
+
+  zd = NULL;
+
+  N  = NV_LENGTH_OMP(z);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,c,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(z))
+  for (i = 0; i < N; i++) zd[i] = c;
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise product z[i] = x[i]*y[i]
+ */
+
+void N_VProd_OpenMP(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,yd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]*yd[i];
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise division z[i] = x[i]/y[i]
+ */
+
+void N_VDiv_OpenMP(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,yd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]/yd[i];
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute scaler multiplication z[i] = c*x[i]
+ */
+
+void N_VScale_OpenMP(realtype c, N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  if (z == x) {  /* BLAS usage: scale x <- cx */
+    VScaleBy_OpenMP(c, x);
+    return;
+  }
+
+  if (c == ONE) {
+    VCopy_OpenMP(x, z);
+  } else if (c == -ONE) {
+    VNeg_OpenMP(x, z);
+  } else {
+    N  = NV_LENGTH_OMP(x);
+    xd = NV_DATA_OMP(x);
+    zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,c,xd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+    for (i = 0; i < N; i++) 
+      zd[i] = c*xd[i];
+  }
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute absolute value of vector components z[i] = SUNRabs(x[i])
+ */
+
+void N_VAbs_OpenMP(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for schedule(static) num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = SUNRabs(xd[i]);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise inverse z[i] = 1 / x[i]
+ */
+
+void N_VInv_OpenMP(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = ONE/xd[i];
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise addition of a scaler to a vector z[i] = x[i] + b
+ */
+
+void N_VAddConst_OpenMP(N_Vector x, realtype b, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,b,xd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++) 
+    zd[i] = xd[i]+b;
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes the dot product of two vectors, a = sum(x[i]*y[i])
+ */
+
+realtype N_VDotProd_OpenMP(N_Vector x, N_Vector y)
+{
+  long int i, N;
+  realtype sum, *xd, *yd;
+
+  sum = ZERO;
+  xd = yd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,yd) \
+  reduction(+:sum) schedule(static) num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++) {
+    sum += xd[i]*yd[i];
+  }
+  
+  return(sum);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes max norm of a vector 
+ */
+
+realtype N_VMaxNorm_OpenMP(N_Vector x)
+{
+  long int i, N;
+  realtype tmax, max, *xd;
+
+  max = ZERO;
+  xd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+
+#pragma omp parallel default(none) private(i,tmax) shared(N,max,xd) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  {
+    tmax = ZERO;
+#pragma omp for schedule(static)
+    for (i = 0; i < N; i++) {
+      if (SUNRabs(xd[i]) > tmax) tmax = SUNRabs(xd[i]);
+    }
+#pragma omp critical 
+    {
+      if (tmax > max)
+	max = tmax;
+    }
+  }
+  return(max);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes weighted root mean square norm of a vector 
+ */
+
+realtype N_VWrmsNorm_OpenMP(N_Vector x, N_Vector w)
+{
+  long int i, N;
+  realtype sum, *xd, *wd;
+
+  sum = ZERO;
+  xd = wd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  wd = NV_DATA_OMP(w);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,wd) \
+  reduction(+:sum) schedule(static) num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++) {
+    sum += SUNSQR(xd[i]*wd[i]);
+  }
+
+  return(SUNRsqrt(sum/N));
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes weighted root mean square norm of a masked vector 
+ */
+
+realtype N_VWrmsNormMask_OpenMP(N_Vector x, N_Vector w, N_Vector id)
+{
+  long int i, N;
+  realtype sum, *xd, *wd, *idd;
+
+  sum = ZERO;
+  xd = wd = idd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd  = NV_DATA_OMP(x);
+  wd  = NV_DATA_OMP(w);
+  idd = NV_DATA_OMP(id);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,wd,idd) \
+  reduction(+:sum) schedule(static) num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++) {
+    if (idd[i] > ZERO) {
+      sum += SUNSQR(xd[i]*wd[i]);
+    }
+  }
+
+  return(SUNRsqrt(sum / N));
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Finds the minimun component of a vector 
+ */
+
+realtype N_VMin_OpenMP(N_Vector x)
+{
+  long int i, N;
+  realtype min, *xd;
+  realtype tmin;
+
+  xd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+
+  min = xd[0];
+
+#pragma omp parallel default(none) private(i,tmin) shared(N,min,xd) \
+            num_threads(NV_NUM_THREADS_OMP(x))
+  {
+    tmin = xd[0];
+#pragma omp for schedule(static)
+    for (i = 1; i < N; i++) {
+      if (xd[i] < tmin) tmin = xd[i];
+    }
+    if (tmin < min) {
+#pragma omp critical
+      {
+	if (tmin < min) min = tmin;
+      }
+    }
+  }
+
+  return(min);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes weighted L2 norm of a vector
+ */
+
+realtype N_VWL2Norm_OpenMP(N_Vector x, N_Vector w)
+{
+  long int i, N;
+  realtype sum, *xd, *wd;
+
+  sum = ZERO;
+  xd = wd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  wd = NV_DATA_OMP(w);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,wd) \
+  reduction(+:sum) schedule(static) num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++) {
+    sum += SUNSQR(xd[i]*wd[i]);
+  }
+
+  return(SUNRsqrt(sum));
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes L1 norm of a vector
+ */
+
+realtype N_VL1Norm_OpenMP(N_Vector x)
+{
+  long int i, N;
+  realtype sum, *xd;
+
+  sum = ZERO;
+  xd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd) \
+  reduction(+:sum) schedule(static) num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i<N; i++)  
+    sum += SUNRabs(xd[i]);
+
+  return(sum);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compare vector component values to a scaler   
+ */
+
+void N_VCompare_OpenMP(realtype c, N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,c,xd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++) {
+    zd[i] = (SUNRabs(xd[i]) >= c) ? ONE : ZERO;
+  }
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise inverse z[i] = ONE/x[i] and checks if x[i] == ZERO
+ */
+
+booleantype N_VInvTest_OpenMP(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd, val;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  zd = NV_DATA_OMP(z);
+
+  val = ZERO;
+
+#pragma omp parallel for default(none) private(i) shared(N,val,xd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++) {
+    if (xd[i] == ZERO) 
+      val = ONE;
+    else
+      zd[i] = ONE/xd[i];
+  }
+
+  if (val > ZERO)
+    return (FALSE);
+  else
+    return (TRUE);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute constraint mask of a vector 
+ */
+
+booleantype N_VConstrMask_OpenMP(N_Vector c, N_Vector x, N_Vector m)
+{
+  long int i, N;
+  realtype temp;
+  realtype *cd, *xd, *md;
+
+  cd = xd = md = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  cd = NV_DATA_OMP(c);
+  md = NV_DATA_OMP(m);
+
+  temp = ONE;
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,cd,md,temp) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++) {
+    md[i] = ZERO;
+    if (cd[i] == ZERO) continue;
+    if (cd[i] > ONEPT5 || cd[i] < -ONEPT5) {
+      if ( xd[i]*cd[i] <= ZERO) { temp = ZERO; md[i] = ONE; }
+      continue;
+    }
+    if ( cd[i] > HALF || cd[i] < -HALF) {
+      if (xd[i]*cd[i] < ZERO ) { temp = ZERO; md[i] = ONE; }
+    }
+  }
+
+  if (temp == ONE) return (TRUE);
+  else return(FALSE);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute minimum componentwise quotient 
+ */
+
+realtype N_VMinQuotient_OpenMP(N_Vector num, N_Vector denom)
+{
+  long int i, N;
+  realtype *nd, *dd, min, tmin, val;
+
+  nd = dd = NULL;
+
+  N  = NV_LENGTH_OMP(num);
+  nd = NV_DATA_OMP(num);
+  dd = NV_DATA_OMP(denom);
+
+  min = BIG_REAL;
+
+#pragma omp parallel default(none) private(i,tmin,val) shared(N,min,nd,dd) \
+   num_threads(NV_NUM_THREADS_OMP(num))
+  {
+    tmin = BIG_REAL;
+#pragma omp for schedule(static)
+    for (i = 0; i < N; i++) {
+      if (dd[i] != ZERO) {
+	val = nd[i]/dd[i];
+	if (val < tmin) tmin = val;
+      }
+    }
+    if (tmin < min) {
+#pragma omp critical
+      {
+	if (tmin < min) min = tmin;
+      }
+    }
+  }
+
+  return(min);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * private functions
+ * -----------------------------------------------------------------
+ */
+
+
+/* ----------------------------------------------------------------------------
+ * Copy vector components into a second vector   
+ */
+
+static void VCopy_OpenMP(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]; 
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute vector sum    
+ */
+
+static void VSum_OpenMP(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,yd,zd) schedule(static) \
+ num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]+yd[i];
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute vector difference   
+ */
+
+static void VDiff_OpenMP(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,xd,yd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]-yd[i];
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute the negative of a vector   
+ */
+
+static void VNeg_OpenMP(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  zd = NV_DATA_OMP(z);
+  
+#pragma omp parallel for default(none) private(i) shared(N,xd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = -xd[i];
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute scaled vector sum    
+ */
+
+static void VScaleSum_OpenMP(realtype c, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,c,xd,yd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = c*(xd[i]+yd[i]);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute scaled vector difference
+ */
+
+static void VScaleDiff_OpenMP(realtype c, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,c,xd,yd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = c*(xd[i]-yd[i]);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute vector sum z[i] = a*x[i]+y[i]    
+ */
+
+static void VLin1_OpenMP(realtype a, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,a,xd,yd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])+yd[i];
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute vector difference z[i] = a*x[i]-y[i]    
+ */
+
+static void VLin2_OpenMP(realtype a, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+  zd = NV_DATA_OMP(z);
+
+#pragma omp parallel for default(none) private(i) shared(N,a,xd,yd,zd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])-yd[i];
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute special cases of linear sum
+ */
+
+static void Vaxpy_OpenMP(realtype a, N_Vector x, N_Vector y)
+{
+  long int i, N;
+  realtype *xd, *yd;
+
+  xd = yd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+  yd = NV_DATA_OMP(y);
+
+  if (a == ONE) {
+#pragma omp parallel for default(none) private(i) shared(N,xd,yd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+    for (i = 0; i < N; i++)
+      yd[i] += xd[i];
+    return;
+  }
+
+  if (a == -ONE) {
+#pragma omp parallel for default(none) private(i) shared(N,xd,yd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+    for (i = 0; i < N; i++)
+      yd[i] -= xd[i];
+    return;
+  }    
+
+#pragma omp parallel for default(none) private(i) shared(N,a,xd,yd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    yd[i] += a*xd[i];
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute scaled vector x[i] = a*x[i]    
+ */
+
+static void VScaleBy_OpenMP(realtype a, N_Vector x)
+{
+  long int i, N;
+  realtype *xd;
+
+  xd = NULL;
+
+  N  = NV_LENGTH_OMP(x);
+  xd = NV_DATA_OMP(x);
+
+#pragma omp parallel for default(none) private(i) shared(N,a,xd) schedule(static) \
+   num_threads(NV_NUM_THREADS_OMP(x))
+  for (i = 0; i < N; i++)
+    xd[i] *= a;
+
+  return;
+}
diff --git a/src/nvec_par/CMakeLists.txt b/src/nvec_par/CMakeLists.txt
new file mode 100644
index 0000000..8477fb4
--- /dev/null
+++ b/src/nvec_par/CMakeLists.txt
@@ -0,0 +1,94 @@
+# ---------------------------------------------------------------
+# $Revision: 4625 $
+# $Date: 2016-01-13 16:05:42 -0800 (Wed, 13 Jan 2016) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the parallel NVECTOR library
+
+INSTALL(CODE "MESSAGE(\"\nInstall NVECTOR_PARALLEL\n\")")
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Add variable nvecparallel_SOURCES with the sources for the NVECPARALLEL lib
+SET(nvecparallel_SOURCES nvector_parallel.c)
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the NVECPARALLEL library
+SET(shared_SOURCES sundials_math.c)
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable nvecparallel_HEADERS with the exported NVECPARALLEL header files
+SET(nvecparallel_HEADERS nvector_parallel.h)
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/nvector/ nvecparallel_HEADERS)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(.)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Rules for building and installing the static library:
+#  - Add the build target for the NVECPARALLEL library
+#  - Set the library name and make sure it is not deleted
+#  - Install the NVECPARALLEL library
+IF(BUILD_STATIC_LIBS)
+  ADD_LIBRARY(sundials_nvecparallel_static STATIC ${nvecparallel_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecparallel_static
+    PROPERTIES OUTPUT_NAME sundials_nvecparallel CLEAN_DIRECT_OUTPUT 1)
+  INSTALL(TARGETS sundials_nvecparallel_static DESTINATION lib)
+ENDIF(BUILD_STATIC_LIBS)
+
+# Rules for building and installing the shared library:
+#  - Add the build target for the NVECPARALLEL library
+#  - Set the library name and make sure it is not deleted
+#  - Set VERSION and SOVERSION for shared libraries
+#  - Install the NVECPARALLEL library
+IF(BUILD_SHARED_LIBS)
+  ADD_LIBRARY(sundials_nvecparallel_shared SHARED ${nvecparallel_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecparallel_shared
+    PROPERTIES OUTPUT_NAME sundials_nvecparallel CLEAN_DIRECT_OUTPUT 1)
+  SET_TARGET_PROPERTIES(sundials_nvecparallel_shared 
+    PROPERTIES VERSION ${nveclib_VERSION} SOVERSION ${nveclib_SOVERSION})
+  INSTALL(TARGETS sundials_nvecparallel_shared DESTINATION lib)
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the NVECPARALLEL header files
+INSTALL(FILES ${nvecparallel_HEADERS} DESTINATION include/nvector)
+
+# If FCMIX is enabled and MPI-F77 works, build and install the FNVECPARALLEL library
+IF(FCMIX_ENABLE AND MPIF_FOUND)
+  SET(fnvecparallel_SOURCES fnvector_parallel.c)
+  IF(BUILD_STATIC_LIBS)
+    ADD_LIBRARY(sundials_fnvecparallel_static STATIC ${fnvecparallel_SOURCES})
+    SET_TARGET_PROPERTIES(sundials_fnvecparallel_static
+      PROPERTIES OUTPUT_NAME sundials_fnvecparallel CLEAN_DIRECT_OUTPUT 1)
+    INSTALL(TARGETS sundials_fnvecparallel_static DESTINATION lib)
+  ENDIF(BUILD_STATIC_LIBS)
+  IF(BUILD_SHARED_LIBS)
+    ADD_LIBRARY(sundials_fnvecparallel_shared SHARED ${fnvecparallel_SOURCES})
+    SET_TARGET_PROPERTIES(sundials_fnvecparallel_shared
+      PROPERTIES OUTPUT_NAME sundials_fnvecparallel CLEAN_DIRECT_OUTPUT 1)
+    SET_TARGET_PROPERTIES(sundials_fnvecparallel_shared
+      PROPERTIES VERSION ${nveclib_VERSION} SOVERSION ${nveclib_SOVERSION})
+    INSTALL(TARGETS sundials_fnvecparallel_shared DESTINATION lib)
+  ENDIF(BUILD_SHARED_LIBS)
+ENDIF(FCMIX_ENABLE AND MPIF_FOUND)
+#
+MESSAGE(STATUS "Added NVECTOR_PARALLEL module")
diff --git a/src/nvec_par/README b/src/nvec_par/README
new file mode 100644
index 0000000..246c346
--- /dev/null
+++ b/src/nvec_par/README
@@ -0,0 +1,57 @@
+                     NVECTOR_PARALLEL
+                 released as part of SUNDIALS
+    SUite of Nonlinear and DIfferential/ALgebraic equation Solvers
+                   Release 2.7.0, September 2016
+
+
+MPI parallel implementation of the NVECTOR module for SUNDIALS. 
+
+NVECTOR_PARALLEL defines the content field of N_Vector to be a structure 
+containing the global and local lengths of the vector, a pointer to the 
+beginning of a contiguous local data array, an MPI communicator, and a 
+boolean flag indicating ownership of the data array.
+
+NVECTOR_PARALLEL defines seven macros to provide access to the content of 
+a parallel N_Vector, several constructors for variables of type N_Vector,
+a constructor for an array of variables of type N_Vector, and destructors
+for N_Vector and N_Vector array.
+
+NVECTOR_PARALLEL provides implementations for all vector operations defined
+by the generic NVECTOR module in the table of operations.
+
+
+A. Documentation
+----------------
+
+The MPI parallel NVECTOR implementation is fully described in the user documentation
+for any of the SUNDIALS solvers. A PDF file for the user guide for a particular
+solver is available in the solver's subdirectory under doc/.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see any of the user guides.
+
+
+
+C. Releases
+-----------
+
+v. 2.7.0 - Sep. 2016
+v. 2.6.2 - Aug. 2015
+v. 2.6.1 - Mar. 2015
+v. 2.6.0 - Mar. 2015
+v. 2.5.0 - Mar. 2012
+v. 2.4.0 - May  2009
+v. 2.3.0 - Nov. 2006
+v. 2.2.0 - Mar. 2006
+v. 2.1.1 - May  2005
+v. 2.1.0 - Apr. 2005
+v. 2.0.2 - Mar. 2005
+v. 2.0.1 - Jan. 2005
+v. 2.0   - Dec. 2004
+v. 1.0   - Jul. 2002 (first SUNDIALS release)
+
+
diff --git a/src/nvec_par/fnvector_parallel.c b/src/nvec_par/fnvector_parallel.c
new file mode 100644
index 0000000..42492a7
--- /dev/null
+++ b/src/nvec_par/fnvector_parallel.c
@@ -0,0 +1,194 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file (companion of nvector_parallel.h) contains the 
+ * implementation needed for the Fortran initialization of parallel 
+ * vector operations.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fnvector_parallel.h"
+
+/* Define global vector variables */
+
+N_Vector F2C_CVODE_vec;
+N_Vector F2C_CVODE_vecQ;
+N_Vector *F2C_CVODE_vecS;
+N_Vector F2C_CVODE_vecB;
+N_Vector F2C_CVODE_vecQB;
+
+N_Vector F2C_IDA_vec;
+N_Vector F2C_IDA_vecQ;
+N_Vector *F2C_IDA_vecS;
+N_Vector F2C_IDA_vecB;
+N_Vector F2C_IDA_vecQB;
+
+N_Vector F2C_KINSOL_vec;
+
+N_Vector F2C_ARKODE_vec;
+
+#ifndef SUNDIALS_MPI_COMM_F2C
+#define MPI_Fint int
+#endif
+
+/* Fortran callable interfaces */
+
+void FNV_INITP(MPI_Fint *comm, int *code, long int *L, long int *N, int *ier)
+{
+  MPI_Comm F2C_comm;
+
+#ifdef SUNDIALS_MPI_COMM_F2C
+  F2C_comm = MPI_Comm_f2c(*comm);
+#else
+  F2C_comm = MPI_COMM_WORLD;
+#endif
+
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vec = NULL;
+    F2C_CVODE_vec = N_VNewEmpty_Parallel(F2C_comm, *L, *N);
+    if (F2C_CVODE_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vec = NULL;
+    F2C_IDA_vec = N_VNewEmpty_Parallel(F2C_comm, *L, *N);
+    if (F2C_IDA_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_KINSOL:
+    F2C_KINSOL_vec = NULL;
+    F2C_KINSOL_vec = N_VNewEmpty_Parallel(F2C_comm, *L, *N);
+    if (F2C_KINSOL_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_ARKODE:
+    F2C_ARKODE_vec = NULL;
+    F2C_ARKODE_vec = N_VNewEmpty_Parallel(F2C_comm, *L, *N);
+    if (F2C_ARKODE_vec == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITP_Q(MPI_Fint *comm, int *code, long int *Lq, long int *Nq, int *ier)
+{
+  MPI_Comm F2C_comm;
+
+#ifdef SUNDIALS_MPI_COMM_F2C
+  F2C_comm = MPI_Comm_f2c(*comm);
+#else
+  F2C_comm = MPI_COMM_WORLD;
+#endif
+
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecQ = NULL;
+    F2C_CVODE_vecQ = N_VNewEmpty_Parallel(F2C_comm, *Lq, *Nq);
+    if (F2C_CVODE_vecQ == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecQ = NULL;
+    F2C_IDA_vecQ = N_VNewEmpty_Parallel(F2C_comm, *Lq, *Nq);
+    if (F2C_IDA_vecQ == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITP_B(MPI_Fint *comm, int *code, long int *LB, long int *NB, int *ier)
+{
+  MPI_Comm F2C_comm;
+
+#ifdef SUNDIALS_MPI_COMM_F2C
+  F2C_comm = MPI_Comm_f2c(*comm);
+#else
+  F2C_comm = MPI_COMM_WORLD;
+#endif
+
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecB = NULL;
+    F2C_CVODE_vecB = N_VNewEmpty_Parallel(F2C_comm, *LB, *NB);
+    if (F2C_CVODE_vecB == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecB = NULL;
+    F2C_IDA_vecB = N_VNewEmpty_Parallel(F2C_comm, *LB, *NB);
+    if (F2C_IDA_vecB == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITP_QB(MPI_Fint *comm, int *code, long int *LqB, long int *NqB, int *ier)
+{
+  MPI_Comm F2C_comm;
+
+#ifdef SUNDIALS_MPI_COMM_F2C
+  F2C_comm = MPI_Comm_f2c(*comm);
+#else
+  F2C_comm = MPI_COMM_WORLD;
+#endif
+
+
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecQB = NULL;
+    F2C_CVODE_vecQB = N_VNewEmpty_Parallel(F2C_comm, *LqB, *NqB);
+    if (F2C_CVODE_vecQB == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecQB = NULL;
+    F2C_IDA_vecQB = N_VNewEmpty_Parallel(F2C_comm, *LqB, *NqB);
+    if (F2C_IDA_vecQB == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITP_S(int *code, int *Ns, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecS = NULL;
+    F2C_CVODE_vecS = (N_Vector *) N_VCloneVectorArrayEmpty_Parallel(*Ns, F2C_CVODE_vec);
+    if (F2C_CVODE_vecS == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecS = NULL;
+    F2C_IDA_vecS = (N_Vector *) N_VCloneVectorArrayEmpty_Parallel(*Ns, F2C_IDA_vec);
+    if (F2C_IDA_vecS == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
diff --git a/src/nvec_par/fnvector_parallel.h b/src/nvec_par/fnvector_parallel.h
new file mode 100644
index 0000000..c9fcbac
--- /dev/null
+++ b/src/nvec_par/fnvector_parallel.h
@@ -0,0 +1,99 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file (companion of nvector_parallel.c) contains the
+ * definitions needed for the initialization of parallel
+ * vector operations in Fortran.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _FNVECTOR_PARALLEL_H
+#define _FNVECTOR_PARALLEL_H
+
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_fnvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+#if defined(SUNDIALS_F77_FUNC)
+#define FNV_INITP    SUNDIALS_F77_FUNC(fnvinitp, FNVINITP)
+#else
+#define FNV_INITP    fnvinitp_
+#endif
+
+#if defined(SUNDIALS_F77_FUNC_)
+
+#define FNV_INITP_Q  SUNDIALS_F77_FUNC_(fnvinitp_q, FNVINITP_Q)
+#define FNV_INITP_S  SUNDIALS_F77_FUNC_(fnvinitp_s, FNVINITP_S)
+#define FNV_INITP_B  SUNDIALS_F77_FUNC_(fnvinitp_b, FNVINITP_B)
+#define FNV_INITP_QB SUNDIALS_F77_FUNC_(fnvinitp_qb, FNVINITP_QB)
+
+#else
+
+#define FNV_INITP_Q  fnvinitp_q_
+#define FNV_INITP_S  fnvinitp_s_
+#define FNV_INITP_B  fnvinitp_b_
+#define FNV_INITP_QB fnvinitp_qb_
+
+#endif
+
+/* Declarations of global variables */
+
+extern N_Vector F2C_CVODE_vec;
+extern N_Vector F2C_CVODE_vecQ;
+extern N_Vector *F2C_CVODE_vecS;
+extern N_Vector F2C_CVODE_vecB;
+extern N_Vector F2C_CVODE_vecQB;
+
+extern N_Vector F2C_IDA_vec;
+extern N_Vector F2C_IDA_vecQ;
+extern N_Vector *F2C_IDA_vecS;
+extern N_Vector F2C_IDA_vecB;
+extern N_Vector F2C_IDA_vecQB;
+
+extern N_Vector F2C_KINSOL_vec;
+
+extern N_Vector F2C_ARKODE_vec;
+
+/* 
+ * Prototypes of exported functions 
+ *
+ * FNV_INITP    - initializes parallel vector operations for main problem
+ * FNV_INITP_Q  - initializes parallel vector operations for quadratures
+ * FNV_INITP_S  - initializes parallel vector operations for sensitivities
+ * FNV_INITP_B  - initializes parallel vector operations for adjoint problem
+ * FNV_INITP_QB - initializes parallel vector operations for adjoint quadratures
+ *
+ */
+
+#ifndef SUNDIALS_MPI_COMM_F2C
+#define MPI_Fint int
+#endif
+
+void FNV_INITP(MPI_Fint *comm, int *code, long int *L, long int *N, int *ier);
+void FNV_INITP_Q(MPI_Fint *comm, int *code, long int *Lq, long int *Nq, int *ier);
+void FNV_INITP_B(MPI_Fint *comm, int *code, long int *LB, long int *NB, int *ier);
+void FNV_INITP_QB(MPI_Fint *comm, int *code, long int *LqB, long int *NqB, int *ier);
+void FNV_INITP_S(int *code, int *Ns, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/nvec_par/nvector_parallel.c b/src/nvec_par/nvector_parallel.c
new file mode 100644
index 0000000..f9797c8
--- /dev/null
+++ b/src/nvec_par/nvector_parallel.c
@@ -0,0 +1,1187 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4867 $
+ * $Date: 2016-08-19 10:05:14 -0700 (Fri, 19 Aug 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, Radu Serban,
+ *                and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a parallel MPI implementation
+ * of the NVECTOR package.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <nvector/nvector_parallel.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO   RCONST(0.0)
+#define HALF   RCONST(0.5)
+#define ONE    RCONST(1.0)
+#define ONEPT5 RCONST(1.5)
+
+/* Error Message */
+
+#define BAD_N1 "N_VNew_Parallel -- Sum of local vector lengths differs from "
+#define BAD_N2 "input global length. \n\n"
+#define BAD_N   BAD_N1 BAD_N2
+
+/* Private function prototypes */
+
+/* Reduction operations add/max/min over the processor group */
+static realtype VAllReduce_Parallel(realtype d, int op, MPI_Comm comm);
+/* z=x */
+static void VCopy_Parallel(N_Vector x, N_Vector z);
+/* z=x+y */
+static void VSum_Parallel(N_Vector x, N_Vector y, N_Vector z);
+/* z=x-y */
+static void VDiff_Parallel(N_Vector x, N_Vector y, N_Vector z);
+/* z=-x */
+static void VNeg_Parallel(N_Vector x, N_Vector z);
+/* z=c(x+y) */
+static void VScaleSum_Parallel(realtype c, N_Vector x, N_Vector y, N_Vector z);
+/* z=c(x-y) */
+static void VScaleDiff_Parallel(realtype c, N_Vector x, N_Vector y, N_Vector z); 
+/* z=ax+y */
+static void VLin1_Parallel(realtype a, N_Vector x, N_Vector y, N_Vector z);
+/* z=ax-y */
+static void VLin2_Parallel(realtype a, N_Vector x, N_Vector y, N_Vector z);
+/* y <- ax+y */
+static void Vaxpy_Parallel(realtype a, N_Vector x, N_Vector y);
+/* x <- ax */
+static void VScaleBy_Parallel(realtype a, N_Vector x);
+
+/*
+ * -----------------------------------------------------------------
+ * exported functions
+ * -----------------------------------------------------------------
+ */
+
+/* ----------------------------------------------------------------
+ * Returns vector type ID. Used to identify vector implementation 
+ * from abstract N_Vector interface.
+ */
+
+N_Vector_ID N_VGetVectorID_Parallel(N_Vector v)
+{
+  return SUNDIALS_NVEC_PARALLEL;
+}
+
+/* ----------------------------------------------------------------
+ * Function to create a new parallel vector with empty data array
+ */
+
+N_Vector N_VNewEmpty_Parallel(MPI_Comm comm, 
+                              long int local_length,
+                              long int global_length)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_Parallel content;
+  long int n, Nsum;
+
+  /* Compute global length as sum of local lengths */
+  n = local_length;
+  MPI_Allreduce(&n, &Nsum, 1, PVEC_INTEGER_MPI_TYPE, MPI_SUM, comm);
+  if (Nsum != global_length) {
+    printf(BAD_N);
+    return(NULL);
+  } 
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+  
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+
+  ops->nvgetvectorid     = N_VGetVectorID_Parallel;
+  ops->nvclone           = N_VClone_Parallel;
+  ops->nvcloneempty      = N_VCloneEmpty_Parallel;
+  ops->nvdestroy         = N_VDestroy_Parallel;
+  ops->nvspace           = N_VSpace_Parallel;
+  ops->nvgetarraypointer = N_VGetArrayPointer_Parallel;
+  ops->nvsetarraypointer = N_VSetArrayPointer_Parallel;
+  ops->nvlinearsum       = N_VLinearSum_Parallel;
+  ops->nvconst           = N_VConst_Parallel;
+  ops->nvprod            = N_VProd_Parallel;
+  ops->nvdiv             = N_VDiv_Parallel;
+  ops->nvscale           = N_VScale_Parallel;
+  ops->nvabs             = N_VAbs_Parallel;
+  ops->nvinv             = N_VInv_Parallel;
+  ops->nvaddconst        = N_VAddConst_Parallel;
+  ops->nvdotprod         = N_VDotProd_Parallel;
+  ops->nvmaxnorm         = N_VMaxNorm_Parallel;
+  ops->nvwrmsnormmask    = N_VWrmsNormMask_Parallel;
+  ops->nvwrmsnorm        = N_VWrmsNorm_Parallel;
+  ops->nvmin             = N_VMin_Parallel;
+  ops->nvwl2norm         = N_VWL2Norm_Parallel;
+  ops->nvl1norm          = N_VL1Norm_Parallel;
+  ops->nvcompare         = N_VCompare_Parallel;
+  ops->nvinvtest         = N_VInvTest_Parallel;
+  ops->nvconstrmask      = N_VConstrMask_Parallel;
+  ops->nvminquotient     = N_VMinQuotient_Parallel;
+
+  /* Create content */
+  content = NULL;
+  content = (N_VectorContent_Parallel) malloc(sizeof(struct _N_VectorContent_Parallel));
+  if (content == NULL) { free(ops); free(v); return(NULL); }
+
+  /* Attach lengths and communicator */
+  content->local_length  = local_length;
+  content->global_length = global_length;
+  content->comm          = comm;
+  content->own_data      = FALSE;
+  content->data          = NULL;
+
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to create a new parallel vector
+ */
+
+N_Vector N_VNew_Parallel(MPI_Comm comm, 
+                         long int local_length,
+                         long int global_length)
+{
+  N_Vector v;
+  realtype *data;
+
+  v = NULL;
+  v = N_VNewEmpty_Parallel(comm, local_length, global_length);
+  if (v == NULL) return(NULL);
+
+  /* Create data */
+  if(local_length > 0) {
+
+    /* Allocate memory */
+    data = NULL;
+    data = (realtype *) malloc(local_length * sizeof(realtype));
+    if(data == NULL) { N_VDestroy_Parallel(v); return(NULL); }
+
+    /* Attach data */
+    NV_OWN_DATA_P(v) = TRUE;
+    NV_DATA_P(v)     = data; 
+
+  }
+
+  return(v);
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to create a parallel N_Vector with user data component 
+ */
+
+N_Vector N_VMake_Parallel(MPI_Comm comm, 
+                          long int local_length,
+                          long int global_length,
+                          realtype *v_data)
+{
+  N_Vector v;
+
+  v = NULL;
+  v = N_VNewEmpty_Parallel(comm, local_length, global_length);
+  if (v == NULL) return(NULL);
+
+  if (local_length > 0) {
+    /* Attach data */
+    NV_OWN_DATA_P(v) = FALSE;
+    NV_DATA_P(v)     = v_data;
+  }
+
+  return(v);
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to create an array of new parallel vectors. 
+ */
+
+N_Vector *N_VCloneVectorArray_Parallel(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VClone_Parallel(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_Parallel(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to create an array of new parallel vectors with empty
+ * (NULL) data array.
+ */
+
+N_Vector *N_VCloneVectorArrayEmpty_Parallel(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VCloneEmpty_Parallel(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_Parallel(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ----------------------------------------------------------------
+ * Function to free an array created with N_VCloneVectorArray_Parallel
+ */
+
+void N_VDestroyVectorArray_Parallel(N_Vector *vs, int count)
+{
+  int j;
+
+  for (j = 0; j < count; j++) N_VDestroy_Parallel(vs[j]);
+
+  free(vs); vs = NULL;
+
+  return;
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to return global vector length 
+ */
+
+long int N_VGetLength_Parallel(N_Vector v)
+{
+  return NV_GLOBLENGTH_P(v);
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to return local vector length 
+ */
+
+long int N_VGetLocalLength_Parallel(N_Vector v)
+{
+  return NV_LOCLENGTH_P(v);
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to print a parallel vector 
+ */
+
+void N_VPrint_Parallel(N_Vector x)
+{
+  long int i, N;
+  realtype *xd;
+
+  xd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+
+  for (i = 0; i < N; i++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%Lg\n", xd[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%g\n", xd[i]);
+#else
+    printf("%g\n", xd[i]);
+#endif
+  }
+  printf("\n");
+
+  return;
+}
+
+/*
+ * -----------------------------------------------------------------
+ * implementation of vector operations
+ * -----------------------------------------------------------------
+ */
+
+N_Vector N_VCloneEmpty_Parallel(N_Vector w)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_Parallel content;
+
+  if (w == NULL) return(NULL);
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+  
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+  
+  ops->nvgetvectorid     = w->ops->nvgetvectorid;
+  ops->nvclone           = w->ops->nvclone;
+  ops->nvcloneempty      = w->ops->nvcloneempty;
+  ops->nvdestroy         = w->ops->nvdestroy;
+  ops->nvspace           = w->ops->nvspace;
+  ops->nvgetarraypointer = w->ops->nvgetarraypointer;
+  ops->nvsetarraypointer = w->ops->nvsetarraypointer;
+  ops->nvlinearsum       = w->ops->nvlinearsum;
+  ops->nvconst           = w->ops->nvconst;  
+  ops->nvprod            = w->ops->nvprod;   
+  ops->nvdiv             = w->ops->nvdiv;
+  ops->nvscale           = w->ops->nvscale; 
+  ops->nvabs             = w->ops->nvabs;
+  ops->nvinv             = w->ops->nvinv;
+  ops->nvaddconst        = w->ops->nvaddconst;
+  ops->nvdotprod         = w->ops->nvdotprod;
+  ops->nvmaxnorm         = w->ops->nvmaxnorm;
+  ops->nvwrmsnormmask    = w->ops->nvwrmsnormmask;
+  ops->nvwrmsnorm        = w->ops->nvwrmsnorm;
+  ops->nvmin             = w->ops->nvmin;
+  ops->nvwl2norm         = w->ops->nvwl2norm;
+  ops->nvl1norm          = w->ops->nvl1norm;
+  ops->nvcompare         = w->ops->nvcompare;    
+  ops->nvinvtest         = w->ops->nvinvtest;
+  ops->nvconstrmask      = w->ops->nvconstrmask;
+  ops->nvminquotient     = w->ops->nvminquotient;
+
+  /* Create content */  
+  content = NULL;
+  content = (N_VectorContent_Parallel) malloc(sizeof(struct _N_VectorContent_Parallel));
+  if (content == NULL) { free(ops); free(v); return(NULL); }
+
+  /* Attach lengths and communicator */
+  content->local_length  = NV_LOCLENGTH_P(w);
+  content->global_length = NV_GLOBLENGTH_P(w);
+  content->comm          = NV_COMM_P(w);
+  content->own_data      = FALSE;
+  content->data          = NULL;
+
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+N_Vector N_VClone_Parallel(N_Vector w)
+{
+  N_Vector v;
+  realtype *data;
+  long int local_length;
+
+  v = NULL;
+  v = N_VCloneEmpty_Parallel(w);
+  if (v == NULL) return(NULL);
+
+  local_length  = NV_LOCLENGTH_P(w);
+
+  /* Create data */
+  if(local_length > 0) {
+
+    /* Allocate memory */
+    data = NULL;
+    data = (realtype *) malloc(local_length * sizeof(realtype));
+    if(data == NULL) { N_VDestroy_Parallel(v); return(NULL); }
+
+    /* Attach data */
+    NV_OWN_DATA_P(v) = TRUE;
+    NV_DATA_P(v)     = data;
+  }
+
+  return(v);
+}
+
+void N_VDestroy_Parallel(N_Vector v)
+{
+  if ((NV_OWN_DATA_P(v) == TRUE) && (NV_DATA_P(v) != NULL)) {
+    free(NV_DATA_P(v));
+    NV_DATA_P(v) = NULL;
+  }
+  free(v->content); v->content = NULL;
+  free(v->ops); v->ops = NULL;
+  free(v); v = NULL;
+
+  return;
+}
+
+void N_VSpace_Parallel(N_Vector v, long int *lrw, long int *liw)
+{
+  MPI_Comm comm;
+  int npes;
+
+  comm = NV_COMM_P(v);
+  MPI_Comm_size(comm, &npes);
+  
+  *lrw = NV_GLOBLENGTH_P(v);
+  *liw = 2*npes;
+
+  return;
+}
+
+realtype *N_VGetArrayPointer_Parallel(N_Vector v)
+{
+  return((realtype *) NV_DATA_P(v));
+}
+
+void N_VSetArrayPointer_Parallel(realtype *v_data, N_Vector v)
+{
+  if (NV_LOCLENGTH_P(v) > 0) NV_DATA_P(v) = v_data;
+
+  return;
+}
+
+void N_VLinearSum_Parallel(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype c, *xd, *yd, *zd;
+  N_Vector v1, v2;
+  booleantype test;
+
+  xd = yd = zd = NULL;
+
+  if ((b == ONE) && (z == y)) {    /* BLAS usage: axpy y <- ax+y */
+    Vaxpy_Parallel(a, x, y);
+    return;
+  }
+
+  if ((a == ONE) && (z == x)) {    /* BLAS usage: axpy x <- by+x */
+    Vaxpy_Parallel(b, y, x);
+    return;
+  }
+
+  /* Case: a == b == 1.0 */
+
+  if ((a == ONE) && (b == ONE)) {
+    VSum_Parallel(x, y, z);
+    return;
+  }
+
+  /* Cases: (1) a == 1.0, b = -1.0, (2) a == -1.0, b == 1.0 */
+
+  if ((test = ((a == ONE) && (b == -ONE))) || ((a == -ONE) && (b == ONE))) {
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VDiff_Parallel(v2, v1, z);
+    return;
+  }
+
+  /* Cases: (1) a == 1.0, b == other or 0.0, (2) a == other or 0.0, b == 1.0 */
+  /* if a or b is 0.0, then user should have called N_VScale */
+
+  if ((test = (a == ONE)) || (b == ONE)) {
+    c = test ? b : a;
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VLin1_Parallel(c, v1, v2, z);
+    return;
+  }
+
+  /* Cases: (1) a == -1.0, b != 1.0, (2) a != 1.0, b == -1.0 */
+
+  if ((test = (a == -ONE)) || (b == -ONE)) {
+    c = test ? b : a;
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VLin2_Parallel(c, v1, v2, z);
+    return;
+  }
+
+  /* Case: a == b */
+  /* catches case both a and b are 0.0 - user should have called N_VConst */
+
+  if (a == b) {
+    VScaleSum_Parallel(a, x, y, z);
+    return;
+  }
+
+  /* Case: a == -b */
+
+  if (a == -b) {
+    VScaleDiff_Parallel(a, x, y, z);
+    return;
+  }
+
+  /* Do all cases not handled above:
+     (1) a == other, b == 0.0 - user should have called N_VScale
+     (2) a == 0.0, b == other - user should have called N_VScale
+     (3) a,b == other, a !=b, a != -b */
+  
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])+(b*yd[i]);
+
+  return;
+}
+
+void N_VConst_Parallel(realtype c, N_Vector z)
+{
+  long int i, N;
+  realtype *zd;
+
+  zd = NULL;
+
+  N  = NV_LOCLENGTH_P(z);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++) zd[i] = c;
+
+  return;
+}
+
+void N_VProd_Parallel(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]*yd[i];
+
+  return;
+}
+
+void N_VDiv_Parallel(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]/yd[i];
+
+  return;
+}
+
+void N_VScale_Parallel(realtype c, N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  if (z == x) {       /* BLAS usage: scale x <- cx */
+    VScaleBy_Parallel(c, x);
+    return;
+  }
+
+  if (c == ONE) {
+    VCopy_Parallel(x, z);
+  } else if (c == -ONE) {
+    VNeg_Parallel(x, z);
+  } else {
+    N  = NV_LOCLENGTH_P(x);
+    xd = NV_DATA_P(x);
+    zd = NV_DATA_P(z);
+    for (i = 0; i < N; i++)
+      zd[i] = c*xd[i];
+  }
+
+  return;
+}
+
+void N_VAbs_Parallel(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = SUNRabs(xd[i]);
+
+  return;
+}
+
+void N_VInv_Parallel(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = ONE/xd[i];
+
+  return;
+}
+
+void N_VAddConst_Parallel(N_Vector x, realtype b, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  zd = NV_DATA_P(z);
+  
+  for (i = 0; i < N; i++) zd[i] = xd[i]+b;
+
+  return;
+}
+
+realtype N_VDotProd_Parallel(N_Vector x, N_Vector y)
+{
+  long int i, N;
+  realtype sum, *xd, *yd, gsum;
+  MPI_Comm comm;
+
+  sum = ZERO;
+  xd = yd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+  comm = NV_COMM_P(x);
+
+  for (i = 0; i < N; i++) sum += xd[i]*yd[i];
+
+  gsum = VAllReduce_Parallel(sum, 1, comm);
+
+  return(gsum);
+}
+
+realtype N_VMaxNorm_Parallel(N_Vector x)
+{
+  long int i, N;
+  realtype max, *xd, gmax;
+  MPI_Comm comm;
+
+  xd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  comm = NV_COMM_P(x);
+
+  max = ZERO;
+
+  for (i = 0; i < N; i++) {
+    if (SUNRabs(xd[i]) > max) max = SUNRabs(xd[i]);
+  }
+   
+  gmax = VAllReduce_Parallel(max, 2, comm);
+
+  return(gmax);
+}
+
+realtype N_VWrmsNorm_Parallel(N_Vector x, N_Vector w)
+{
+  long int i, N, N_global;
+  realtype sum, prodi, *xd, *wd, gsum;
+  MPI_Comm comm;
+
+  sum = ZERO;
+  xd = wd = NULL;
+
+  N        = NV_LOCLENGTH_P(x);
+  N_global = NV_GLOBLENGTH_P(x);
+  xd       = NV_DATA_P(x);
+  wd       = NV_DATA_P(w);
+  comm = NV_COMM_P(x);
+
+  for (i = 0; i < N; i++) {
+    prodi = xd[i]*wd[i];
+    sum += SUNSQR(prodi);
+  }
+
+  gsum = VAllReduce_Parallel(sum, 1, comm);
+
+  return(SUNRsqrt(gsum/N_global));
+}
+
+realtype N_VWrmsNormMask_Parallel(N_Vector x, N_Vector w, N_Vector id)
+{
+  long int i, N, N_global;
+  realtype sum, prodi, *xd, *wd, *idd, gsum;
+  MPI_Comm comm;
+
+  sum = ZERO;
+  xd = wd = idd = NULL;
+
+  N        = NV_LOCLENGTH_P(x);
+  N_global = NV_GLOBLENGTH_P(x);
+  xd       = NV_DATA_P(x);
+  wd       = NV_DATA_P(w);
+  idd      = NV_DATA_P(id);
+  comm = NV_COMM_P(x);
+
+  for (i = 0; i < N; i++) {
+    if (idd[i] > ZERO) {
+      prodi = xd[i]*wd[i];
+      sum += SUNSQR(prodi);
+    }
+  }
+
+  gsum = VAllReduce_Parallel(sum, 1, comm);
+
+  return(SUNRsqrt(gsum/N_global));
+}
+
+realtype N_VMin_Parallel(N_Vector x)
+{
+  long int i, N;
+  realtype min, *xd, gmin;
+  MPI_Comm comm;
+
+  xd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  comm = NV_COMM_P(x);
+
+  min = BIG_REAL;
+
+  if (N > 0) {
+
+    xd = NV_DATA_P(x);
+
+    min = xd[0];
+
+    for (i = 1; i < N; i++) {
+      if (xd[i] < min) min = xd[i];
+    }
+
+  }
+
+  gmin = VAllReduce_Parallel(min, 3, comm);
+
+  return(gmin);
+}
+
+realtype N_VWL2Norm_Parallel(N_Vector x, N_Vector w)
+{
+  long int i, N;
+  realtype sum, prodi, *xd, *wd, gsum;
+  MPI_Comm comm;
+
+  sum = ZERO;
+  xd = wd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  wd = NV_DATA_P(w);
+  comm = NV_COMM_P(x);
+
+  for (i = 0; i < N; i++) {
+    prodi = xd[i]*wd[i];
+    sum += SUNSQR(prodi);
+  }
+
+  gsum = VAllReduce_Parallel(sum, 1, comm);
+
+  return(SUNRsqrt(gsum));
+}
+
+realtype N_VL1Norm_Parallel(N_Vector x)
+{
+  long int i, N;
+  realtype sum, gsum, *xd;
+  MPI_Comm comm;
+
+  sum = ZERO;
+  xd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  comm = NV_COMM_P(x);
+
+  for (i = 0; i<N; i++) 
+    sum += SUNRabs(xd[i]);
+
+  gsum = VAllReduce_Parallel(sum, 1, comm);
+
+  return(gsum);
+}
+
+void N_VCompare_Parallel(realtype c, N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++) {
+    zd[i] = (SUNRabs(xd[i]) >= c) ? ONE : ZERO;
+  }
+
+  return;
+}
+
+booleantype N_VInvTest_Parallel(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd, val, gval;
+  MPI_Comm comm;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  zd = NV_DATA_P(z);
+  comm = NV_COMM_P(x);
+
+  val = ONE;
+  for (i = 0; i < N; i++) {
+    if (xd[i] == ZERO) 
+      val = ZERO;
+    else
+      zd[i] = ONE/xd[i];
+  }
+
+  gval = VAllReduce_Parallel(val, 3, comm);
+
+  if (gval == ZERO)
+    return(FALSE);
+  else
+    return(TRUE);
+}
+
+booleantype N_VConstrMask_Parallel(N_Vector c, N_Vector x, N_Vector m)
+{
+  long int i, N;
+  realtype temp;
+  realtype *cd, *xd, *md;
+  MPI_Comm comm;
+
+  cd = xd = md = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  cd = NV_DATA_P(c);
+  md = NV_DATA_P(m);
+  comm = NV_COMM_P(x);
+
+  temp = ONE;
+
+  for (i = 0; i < N; i++) {
+    md[i] = ZERO;
+    if (cd[i] == ZERO) continue;
+    if (cd[i] > ONEPT5 || cd[i] < -ONEPT5) {
+      if (xd[i]*cd[i] <= ZERO) { temp = ZERO; md[i] = ONE; }
+      continue;
+    }
+    if (cd[i] > HALF || cd[i] < -HALF) {
+      if (xd[i]*cd[i] < ZERO ) { temp = ZERO; md[i] = ONE; }
+    }
+  }
+
+  temp = VAllReduce_Parallel(temp, 3, comm);
+
+  if (temp == ONE) return(TRUE);
+  else return(FALSE);
+}
+
+realtype N_VMinQuotient_Parallel(N_Vector num, N_Vector denom)
+{
+  booleantype notEvenOnce;
+  long int i, N;
+  realtype *nd, *dd, min;
+  MPI_Comm comm;
+
+  nd = dd = NULL;
+
+  N  = NV_LOCLENGTH_P(num);
+  nd = NV_DATA_P(num);
+  dd = NV_DATA_P(denom);
+  comm = NV_COMM_P(num);
+
+  notEvenOnce = TRUE;
+  min = BIG_REAL;
+
+  for (i = 0; i < N; i++) {
+    if (dd[i] == ZERO) continue;
+    else {
+      if (!notEvenOnce) min = SUNMIN(min, nd[i]/dd[i]);
+      else {
+        min = nd[i]/dd[i];
+        notEvenOnce = FALSE;
+      }
+    }
+  }
+
+  return(VAllReduce_Parallel(min, 3, comm));
+}
+
+/*
+ * -----------------------------------------------------------------
+ * private functions
+ * -----------------------------------------------------------------
+ */
+
+static realtype VAllReduce_Parallel(realtype d, int op, MPI_Comm comm)
+{
+  /* 
+   * This function does a global reduction.  The operation is
+   *   sum if op = 1,
+   *   max if op = 2,
+   *   min if op = 3.
+   * The operation is over all processors in the communicator 
+   */
+
+  realtype out;
+
+  switch (op) {
+   case 1: MPI_Allreduce(&d, &out, 1, PVEC_REAL_MPI_TYPE, MPI_SUM, comm);
+           break;
+
+   case 2: MPI_Allreduce(&d, &out, 1, PVEC_REAL_MPI_TYPE, MPI_MAX, comm);
+           break;
+
+   case 3: MPI_Allreduce(&d, &out, 1, PVEC_REAL_MPI_TYPE, MPI_MIN, comm);
+           break;
+
+   default: break;
+  }
+
+  return(out);
+}
+
+static void VCopy_Parallel(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]; 
+
+  return;
+}
+
+static void VSum_Parallel(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]+yd[i];
+
+  return;
+}
+
+static void VDiff_Parallel(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]-yd[i];
+
+  return;
+}
+
+static void VNeg_Parallel(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = -xd[i];
+
+  return;
+}
+
+static void VScaleSum_Parallel(realtype c, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = c*(xd[i]+yd[i]);
+
+  return;
+}
+
+static void VScaleDiff_Parallel(realtype c, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = c*(xd[i]-yd[i]);
+
+  return;
+}
+
+static void VLin1_Parallel(realtype a, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])+yd[i];
+
+  return;
+}
+
+static void VLin2_Parallel(realtype a, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+  zd = NV_DATA_P(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])-yd[i];
+
+  return;
+}
+
+static void Vaxpy_Parallel(realtype a, N_Vector x, N_Vector y)
+{
+  long int i, N;
+  realtype *xd, *yd;
+
+  xd = yd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+  yd = NV_DATA_P(y);
+
+  if (a == ONE) {
+    for (i = 0; i < N; i++)
+      yd[i] += xd[i];
+    return;
+  }
+  
+  if (a == -ONE) {
+    for (i = 0; i < N; i++)
+      yd[i] -= xd[i];
+    return;
+  }    
+  
+  for (i = 0; i < N; i++)
+    yd[i] += a*xd[i];
+
+  return;
+}
+
+static void VScaleBy_Parallel(realtype a, N_Vector x)
+{
+  long int i, N;
+  realtype *xd;
+
+  xd = NULL;
+
+  N  = NV_LOCLENGTH_P(x);
+  xd = NV_DATA_P(x);
+
+  for (i = 0; i < N; i++)
+    xd[i] *= a;
+
+  return;
+}
diff --git a/src/nvec_parhyp/CMakeLists.txt b/src/nvec_parhyp/CMakeLists.txt
new file mode 100644
index 0000000..9255489
--- /dev/null
+++ b/src/nvec_parhyp/CMakeLists.txt
@@ -0,0 +1,77 @@
+# ---------------------------------------------------------------
+# $Revision: 4075 $
+# $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the parhyp NVECTOR library
+
+INSTALL(CODE "MESSAGE(\"\nInstall NVECTOR_PARHYP\n\")")
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Add variable nvecparhyp_SOURCES with the sources for the NVECPARHYP lib
+SET(nvecparhyp_SOURCES nvector_parhyp.c)
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the NVECPARHYP library
+SET(shared_SOURCES sundials_math.c)
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable nvecparhyp_HEADERS with the exported NVECPARHYP header files
+SET(nvecparhyp_HEADERS nvector_parhyp.h)
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/nvector/ nvecparhyp_HEADERS)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(${HYPRE_INCLUDE_DIR})
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Rules for building and installing the static library:
+#  - Add the build target for the NVECPARHYP library
+#  - Set the library name and make sure it is not deleted
+#  - Install the NVECPARHYP library
+IF(BUILD_STATIC_LIBS)
+  ADD_LIBRARY(sundials_nvecparhyp_static STATIC ${nvecparhyp_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecparhyp_static
+    PROPERTIES OUTPUT_NAME sundials_nvecparhyp CLEAN_DIRECT_OUTPUT 1)
+  INSTALL(TARGETS sundials_nvecparhyp_static DESTINATION lib)
+ENDIF(BUILD_STATIC_LIBS)
+
+# Rules for building and installing the shared library:
+#  - Add the build target for the NVECPARHYP library
+#  - Set the library name and make sure it is not deleted
+#  - Set VERSION and SOVERSION for shared libraries
+#  - Install the NVECPARHYP library
+IF(BUILD_SHARED_LIBS)
+  ADD_LIBRARY(sundials_nvecparhyp_shared SHARED ${nvecparhyp_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecparhyp_shared
+    PROPERTIES OUTPUT_NAME sundials_nvecparhyp CLEAN_DIRECT_OUTPUT 1)
+  SET_TARGET_PROPERTIES(sundials_nvecparhyp_shared 
+    PROPERTIES VERSION ${nveclib_VERSION} SOVERSION ${nveclib_SOVERSION})
+  INSTALL(TARGETS sundials_nvecparhyp_shared DESTINATION lib)
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the NVECPARHYP header files
+INSTALL(FILES ${nvecparhyp_HEADERS} DESTINATION include/nvector)
+
+#
+MESSAGE(STATUS "Added NVECTOR_PARHYP module")
diff --git a/src/nvec_parhyp/README b/src/nvec_parhyp/README
new file mode 100644
index 0000000..4469e2f
--- /dev/null
+++ b/src/nvec_parhyp/README
@@ -0,0 +1,46 @@
+                     NVECTOR_PARHYPE
+                 released as part of SUNDIALS
+    SUite of Nonlinear and DIfferential/ALgebraic equation Solvers
+                   Release 2.7.0, September 2016
+
+
+The NVECTOR_PARHYP implementation of the nvector module provided with
+SUNDIALS is a wrapper around hypre's ParVector class. 
+Most of the vector kernels simply call hypre vector operations. 
+
+NVECTOR_PARHYP defines the content field of N_Vector to 
+be a structure containing the global and local lengths of the vector, a 
+pointer to an object of type hypre_ParVector, an MPI communicator, 
+and a boolean flag indicating ownership of the data array.
+
+NVECTOR_PARHYP defines implementations of all vector operations defined
+by the generic NVECTOR module in the table of operations, except for 
+N_VSetArrayPointer and N_VGetArrayPointer, because accessing raw vector data should 
+be handled by hypre functions.  As such, this vector is not available for use with 
+SUNDIALS Fortran interfaces. When access to raw vector data is needed, one 
+should extract the hypre vector first, and then use hypre methods to access the data. 
+Usage examples of NVECTOR_PARHYP are provided in cvAdvDiff_non_ph.c example program 
+for CVODE and the ark_diurnal_kry_ph.c example program for ARKODE.
+
+A. Documentation
+----------------
+
+The NVECTOR_PARHYP implementation is fully described in the user documentation
+for any of the SUNDIALS solvers. A PDF file for the user guide for a particular
+solver is available in the solver's subdirectory under doc/.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see any of the user guides.
+
+
+
+C. Releases
+-----------
+
+v. 2.7.0 - Sep. 2016
+
+
diff --git a/src/nvec_parhyp/nvector_parhyp.c b/src/nvec_parhyp/nvector_parhyp.c
new file mode 100644
index 0000000..fc56996
--- /dev/null
+++ b/src/nvec_parhyp/nvector_parhyp.c
@@ -0,0 +1,1160 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4396 $
+ * $Date: 2015-02-26 16:59:39 -0800 (Thu, 26 Feb 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Jean M. Sexton @ SMU
+ *                Slaven Peles @ LLNL
+ * -----------------------------------------------------------------
+ * Based on work by Scott D. Cohen, Alan C. Hindmarsh, Radu Serban,
+ *                  and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a parhyp MPI implementation
+ * of the NVECTOR package.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <nvector/nvector_parhyp.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO   RCONST(0.0)
+#define HALF   RCONST(0.5)
+#define ONE    RCONST(1.0)
+#define ONEPT5 RCONST(1.5)
+
+/* Error Message */
+
+#define BAD_N1 "N_VNew_ParHyp -- Sum of local vector lengths differs from "
+#define BAD_N2 "input global length. \n\n"
+#define BAD_N   BAD_N1 BAD_N2
+
+/*
+ * -----------------------------------------------------------------
+ * Simplifying macros NV_CONTENT_PH, NV_DATA_PH, NV_LOCLENGTH_PH, 
+ *                    NV_GLOBLENGTH_PH, and NV_COMM_PH
+ * -----------------------------------------------------------------
+ * In the descriptions below, the following user declarations
+ * are assumed:
+ *
+ * N_Vector v;
+ * long int v_len, s_len, i;
+ *
+ * (1) NV_CONTENT_PH
+ *
+ *     This routines gives access to the contents of the HYPRE
+ *     vector wrapper (the N_Vector).
+ *
+ *     The assignment v_cont = NV_CONTENT_PH(v) sets v_cont to be
+ *     a pointer to the N_Vector content structure.
+ *
+ * (2) NV_DATA_PH, NV_LOCLENGTH_PH, NV_GLOBLENGTH_PH, and NV_COMM_PH
+ *
+ *     These routines give access to the individual parts of
+ *     the content structure of a parhyp N_Vector.
+ *
+ *     The assignment v_llen = NV_LOCLENGTH_PH(v) sets v_llen to
+ *     be the length of the local part of the vector v. The call
+ *     NV_LOCLENGTH_PH(v) = llen_v generally should NOT be used! It 
+ *     will change locally stored value with the HYPRE local vector 
+ *     length, but it will NOT change the length of the actual HYPRE
+ *     local vector.
+ *
+ *     The assignment v_glen = NV_GLOBLENGTH_PH(v) sets v_glen to
+ *     be the global length of the vector v. The call
+ *     NV_GLOBLENGTH_PH(v) = glen_v generally should NOT be used! It 
+ *     will change locally stored value with the HYPRE parallel vector 
+ *     length, but it will NOT change the length of the actual HYPRE
+ *     parallel vector.
+ *
+ *     The assignment v_comm = NV_COMM_PH(v) sets v_comm to be the
+ *     MPI communicator of the vector v. The assignment
+ *     NV_COMM_C(v) = comm_v sets the MPI communicator of v to be
+ *     NV_COMM_PH(v) = comm_v generally should NOT be used! It 
+ *     will change locally stored value with the HYPRE parallel vector 
+ *     communicator, but it will NOT change the communicator of the 
+ *     actual HYPRE parallel vector.
+ * 
+ * (3) NV_DATA_PH, NV_HYPRE_PARVEC_PH
+ *     
+ *     The assignment v_data = NV_DATA_PH(v) sets v_data to be
+ *     a pointer to the first component of the data inside the 
+ *     local vector of the HYPRE_parhyp vector for the vector v. 
+ *     The assignment NV_DATA_PH(v) = data_v should NOT be used. 
+ *     Instead, use NV_HYPRE_PARVEC_PH to obtain pointer to HYPRE 
+ *     vector and then use HYPRE functions to manipulate vector data.
+ *
+ *     The assignment v_parhyp = NV_HYPRE_PARVEC_PH(v) sets v_parhyp
+ *     to be a pointer to hypre_ParVector of vector v. The assignment
+ *     NV_HYPRE_PARVEC_PH(v) = parhyp_v sets pointer to 
+ *     hypre_ParVector of vector v to be parhyp_v.
+ *
+ * -----------------------------------------------------------------
+ */
+
+#define NV_CONTENT_PH(v)    ( (N_VectorContent_ParHyp)(v->content) )
+
+#define NV_LOCLENGTH_PH(v)  ( NV_CONTENT_PH(v)->local_length )
+
+#define NV_GLOBLENGTH_PH(v) ( NV_CONTENT_PH(v)->global_length )
+
+#define NV_OWN_PARVEC_PH(v) ( NV_CONTENT_PH(v)->own_parvector )
+
+#define NV_HYPRE_PARVEC_PH(v) ( NV_CONTENT_PH(v)->x )
+
+#define NV_DATA_PH(v)       ( NV_HYPRE_PARVEC_PH(v) == NULL ? NULL : hypre_VectorData(hypre_ParVectorLocalVector(NV_HYPRE_PARVEC_PH(v))) )
+
+#define NV_COMM_PH(v)       ( NV_CONTENT_PH(v)->comm )
+
+
+/* Private function prototypes */
+
+/* Reduction operations add/max/min over the processor group */
+static realtype VAllReduce_ParHyp(realtype d, int op, MPI_Comm comm);
+/* z=x */
+/* static void VCopy_ParHyp(N_Vector x, N_Vector z); */
+/* z=x+y */
+static void VSum_ParHyp(N_Vector x, N_Vector y, N_Vector z);
+/* z=x-y */
+static void VDiff_ParHyp(N_Vector x, N_Vector y, N_Vector z);
+/* z=-x */
+/* static void VNeg_ParHyp(N_Vector x, N_Vector z); */
+/* z=c(x+y) */
+static void VScaleSum_ParHyp(realtype c, N_Vector x, N_Vector y, N_Vector z);
+/* z=c(x-y) */
+static void VScaleDiff_ParHyp(realtype c, N_Vector x, N_Vector y, N_Vector z); 
+/* z=ax+y */
+static void VLin1_ParHyp(realtype a, N_Vector x, N_Vector y, N_Vector z);
+/* z=ax-y */
+static void VLin2_ParHyp(realtype a, N_Vector x, N_Vector y, N_Vector z);
+/* y <- ax+y */
+/* static void Vaxpy_ParHyp(realtype a, N_Vector x, N_Vector y); */
+/* x <- ax */
+/* static void VScaleBy_ParHyp(realtype a, N_Vector x); */
+
+/*
+ * -----------------------------------------------------------------
+ * exported functions
+ * -----------------------------------------------------------------
+ */
+
+/* ----------------------------------------------------------------
+ * Returns vector type ID. Used to identify vector implementation 
+ * from abstract N_Vector interface.
+ */
+N_Vector_ID N_VGetVectorID_ParHyp(N_Vector v)
+{
+  return SUNDIALS_NVEC_PARHYP;
+}
+
+
+/* ----------------------------------------------------------------
+ * Function to create a new parhyp vector without underlying
+ * HYPRE vector.
+ */
+N_Vector N_VNewEmpty_ParHyp(MPI_Comm comm, 
+                            long int local_length,
+                            long int global_length)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_ParHyp content;
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+  
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+
+  ops->nvgetvectorid     = N_VGetVectorID_ParHyp;
+  ops->nvclone           = N_VClone_ParHyp;
+  ops->nvcloneempty      = N_VCloneEmpty_ParHyp;
+  ops->nvdestroy         = N_VDestroy_ParHyp;
+  ops->nvspace           = N_VSpace_ParHyp;
+  ops->nvgetarraypointer = N_VGetArrayPointer_ParHyp;
+  ops->nvsetarraypointer = N_VSetArrayPointer_ParHyp;
+  ops->nvlinearsum       = N_VLinearSum_ParHyp;
+  ops->nvconst           = N_VConst_ParHyp;
+  ops->nvprod            = N_VProd_ParHyp;
+  ops->nvdiv             = N_VDiv_ParHyp;
+  ops->nvscale           = N_VScale_ParHyp;
+  ops->nvabs             = N_VAbs_ParHyp;
+  ops->nvinv             = N_VInv_ParHyp;
+  ops->nvaddconst        = N_VAddConst_ParHyp;
+  ops->nvdotprod         = N_VDotProd_ParHyp;
+  ops->nvmaxnorm         = N_VMaxNorm_ParHyp;
+  ops->nvwrmsnormmask    = N_VWrmsNormMask_ParHyp;
+  ops->nvwrmsnorm        = N_VWrmsNorm_ParHyp;
+  ops->nvmin             = N_VMin_ParHyp;
+  ops->nvwl2norm         = N_VWL2Norm_ParHyp;
+  ops->nvl1norm          = N_VL1Norm_ParHyp;
+  ops->nvcompare         = N_VCompare_ParHyp;
+  ops->nvinvtest         = N_VInvTest_ParHyp;
+  ops->nvconstrmask      = N_VConstrMask_ParHyp;
+  ops->nvminquotient     = N_VMinQuotient_ParHyp;
+
+  /* Create content */
+  content = NULL;
+  content = (N_VectorContent_ParHyp) malloc(sizeof(struct _N_VectorContent_ParHyp));
+  if (content == NULL) { free(ops); free(v); return(NULL); }
+
+  /* Attach lengths and communicator */
+  content->local_length  = local_length;
+  content->global_length = global_length;
+  content->comm          = comm;
+  content->own_parvector = FALSE;
+  content->x             = NULL;
+  
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+
+/* ---------------------------------------------------------------- 
+ * Function to create a parhyp N_Vector wrapper around user 
+ * supplie HYPRE vector.
+ */
+
+N_Vector N_VMake_ParHyp(hypre_ParVector *x)
+{
+  N_Vector v;
+  MPI_Comm comm = hypre_ParVectorComm(x);
+  HYPRE_Int global_length = hypre_ParVectorGlobalSize(x);
+  HYPRE_Int local_begin = hypre_ParVectorFirstIndex(x);
+  HYPRE_Int local_end = hypre_ParVectorLastIndex(x);
+  HYPRE_Int local_length = local_end - local_begin + 1;
+  
+  v = NULL;
+  v = N_VNewEmpty_ParHyp(comm, local_length, global_length);
+  if (v == NULL) 
+    return(NULL);
+
+  NV_OWN_PARVEC_PH(v)   = FALSE;
+  NV_HYPRE_PARVEC_PH(v) = x;
+
+  return(v);
+}
+
+
+/* ---------------------------------------------------------------- 
+ * Function to create an array of new parhyp vectors. 
+ */
+
+N_Vector *N_VCloneVectorArray_ParHyp(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VClone_ParHyp(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_ParHyp(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to create an array of new parhyp vector wrappers 
+ * without uderlying HYPRE vectors.
+ */
+
+N_Vector *N_VCloneVectorArrayEmpty_ParHyp(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VCloneEmpty_ParHyp(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_ParHyp(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ----------------------------------------------------------------
+ * Function to free an array created with N_VCloneVectorArray_ParHyp
+ */
+
+void N_VDestroyVectorArray_ParHyp(N_Vector *vs, int count)
+{
+  int j;
+
+  for (j = 0; j < count; j++) 
+    N_VDestroy_ParHyp(vs[j]);
+
+  free(vs); 
+  vs = NULL;
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------
+ * Extract HYPRE vector
+ */
+
+hypre_ParVector* N_VGetVector_ParHyp(N_Vector v)
+{
+  return NV_HYPRE_PARVEC_PH(v); 
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to print a parhyp vector.
+ * TODO: Consider using a HYPRE function for this.
+ */
+
+void N_VPrint_ParHyp(N_Vector x)
+{
+  long int i, N;
+  realtype *xd;
+
+  xd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+
+  for (i = 0; i < N; i++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%Lg\n", xd[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%g\n", xd[i]);
+#else
+    printf("%g\n", xd[i]);
+#endif
+  }
+  printf("\n");
+
+  return;
+}
+
+/*
+ * -----------------------------------------------------------------
+ * implementation of vector operations
+ * -----------------------------------------------------------------
+ */
+
+N_Vector N_VCloneEmpty_ParHyp(N_Vector w)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_ParHyp content;
+
+  if (w == NULL) return(NULL);
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+  
+  /* Added variables for hypre_parhyp intialization */
+  int nprocs, myid;
+  MPI_Comm_size(NV_COMM_PH(w), &nprocs);
+  MPI_Comm_rank(NV_COMM_PH(w), &myid);
+  
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+  
+  ops->nvgetvectorid     = w->ops->nvgetvectorid;
+  ops->nvclone           = w->ops->nvclone;
+  ops->nvcloneempty      = w->ops->nvcloneempty;
+  ops->nvdestroy         = w->ops->nvdestroy;
+  ops->nvspace           = w->ops->nvspace;
+  ops->nvgetarraypointer = w->ops->nvgetarraypointer;
+  ops->nvsetarraypointer = w->ops->nvsetarraypointer;
+  ops->nvlinearsum       = w->ops->nvlinearsum;
+  ops->nvconst           = w->ops->nvconst;  
+  ops->nvprod            = w->ops->nvprod;   
+  ops->nvdiv             = w->ops->nvdiv;
+  ops->nvscale           = w->ops->nvscale; 
+  ops->nvabs             = w->ops->nvabs;
+  ops->nvinv             = w->ops->nvinv;
+  ops->nvaddconst        = w->ops->nvaddconst;
+  ops->nvdotprod         = w->ops->nvdotprod;
+  ops->nvmaxnorm         = w->ops->nvmaxnorm;
+  ops->nvwrmsnormmask    = w->ops->nvwrmsnormmask;
+  ops->nvwrmsnorm        = w->ops->nvwrmsnorm;
+  ops->nvmin             = w->ops->nvmin;
+  ops->nvwl2norm         = w->ops->nvwl2norm;
+  ops->nvl1norm          = w->ops->nvl1norm;
+  ops->nvcompare         = w->ops->nvcompare;    
+  ops->nvinvtest         = w->ops->nvinvtest;
+  ops->nvconstrmask      = w->ops->nvconstrmask;
+  ops->nvminquotient     = w->ops->nvminquotient;
+
+  /* Create content */  
+  content = NULL;
+  content = (N_VectorContent_ParHyp) malloc(sizeof(struct _N_VectorContent_ParHyp));
+  if (content == NULL) { free(ops); free(v); return(NULL); }
+
+  /* Attach lengths and communicator */
+  content->local_length  = NV_LOCLENGTH_PH(w);
+  content->global_length = NV_GLOBLENGTH_PH(w);
+  content->comm          = NV_COMM_PH(w);
+  content->own_parvector = FALSE;
+  content->x             = NULL;
+  
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+/*
+ * Clone HYPRE vector wrapper.
+ * 
+ */
+N_Vector N_VClone_ParHyp(N_Vector w)
+{
+  N_Vector v;
+  hypre_ParVector *vx;
+  const hypre_ParVector *wx = NV_HYPRE_PARVEC_PH(w);
+  
+  v = NULL;
+  v = N_VCloneEmpty_ParHyp(w);
+  if (v==NULL)
+    return(NULL);
+  
+  vx = hypre_ParVectorCreate(wx->comm, wx->global_size, wx->partitioning);
+  hypre_ParVectorInitialize(vx);
+
+  hypre_ParVectorSetPartitioningOwner(vx, 0);
+  hypre_ParVectorSetDataOwner(vx, 1);
+  hypre_SeqVectorSetDataOwner(hypre_ParVectorLocalVector(vx), 1);
+  
+  NV_HYPRE_PARVEC_PH(v) = vx;
+  NV_OWN_PARVEC_PH(v) = TRUE;
+  
+  return(v);
+}
+
+void N_VDestroy_ParHyp(N_Vector v)
+{
+  if ((NV_OWN_PARVEC_PH(v) == TRUE)) {
+    hypre_ParVectorDestroy(NV_HYPRE_PARVEC_PH(v));
+  }
+  
+  free(v->content); v->content = NULL;
+  free(v->ops); v->ops = NULL;
+  free(v); v = NULL;
+
+  return;
+}
+
+
+void N_VSpace_ParHyp(N_Vector v, long int *lrw, long int *liw)
+{
+  MPI_Comm comm;
+  int npes;
+
+  comm = NV_COMM_PH(v);
+  MPI_Comm_size(comm, &npes);
+  
+  *lrw = NV_GLOBLENGTH_PH(v);
+  *liw = 2*npes;
+
+  return;
+}
+
+
+/*
+ * This function is disabled in ParHyp implementation and returns NULL. 
+ * The user should extract HYPRE vector using N_VGetVector_ParHyp and 
+ * then use HYPRE functions to get pointer to raw data of the local HYPRE 
+ * vector.
+ */
+realtype *N_VGetArrayPointer_ParHyp(N_Vector v)
+{
+  return NULL; /* ((realtype *) NV_DATA_PH(v)); */
+}
+
+
+/*
+ * This method is not implemented for HYPRE vector wrapper.
+ * TODO: Put error handler in the function body.
+ */
+void N_VSetArrayPointer_ParHyp(realtype *v_data, N_Vector v)
+{
+  /* Not implemented for Hypre vector */
+}
+
+/*
+ * Computes z[i] = a*x[i] + b*y[i]
+ * 
+ */
+void N_VLinearSum_ParHyp(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype c, *xd, *yd, *zd;
+  N_Vector v1, v2;
+  booleantype test;
+
+  xd = yd = zd = NULL;
+
+  if ((b == ONE) && (z == y)) {    /* BLAS usage: axpy y <- ax+y */
+    HYPRE_Complex   alpha=a;
+    HYPRE_ParVectorAxpy( alpha, (HYPRE_ParVector) NV_HYPRE_PARVEC_PH(x),
+                                (HYPRE_ParVector) NV_HYPRE_PARVEC_PH(y));
+    return;
+  }
+
+  if ((a == ONE) && (z == x)) {    /* BLAS usage: axpy x <- by+x */
+    HYPRE_Complex   beta=b;
+    HYPRE_ParVectorAxpy( beta, (HYPRE_ParVector) NV_HYPRE_PARVEC_PH(y),
+                               (HYPRE_ParVector) NV_HYPRE_PARVEC_PH(x));
+    return;
+  }
+
+  /* Case: a == b == 1.0 */
+
+  if ((a == ONE) && (b == ONE)) {
+    VSum_ParHyp(x, y, z);
+    return;
+  }
+
+  /* Cases: (1) a == 1.0, b = -1.0, (2) a == -1.0, b == 1.0 */
+
+  if ((test = ((a == ONE) && (b == -ONE))) || ((a == -ONE) && (b == ONE))) {
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VDiff_ParHyp(v2, v1, z);
+    return;
+  }
+
+  /* Cases: (1) a == 1.0, b == other or 0.0, (2) a == other or 0.0, b == 1.0 */
+  /* if a or b is 0.0, then user should have called N_VScale */
+
+  if ((test = (a == ONE)) || (b == ONE)) {
+    c = test ? b : a;
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VLin1_ParHyp(c, v1, v2, z);
+    return;
+  }
+
+  /* Cases: (1) a == -1.0, b != 1.0, (2) a != 1.0, b == -1.0 */
+
+  if ((test = (a == -ONE)) || (b == -ONE)) {
+    c = test ? b : a;
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VLin2_ParHyp(c, v1, v2, z);
+    return;
+  }
+
+  /* Case: a == b */
+  /* catches case both a and b are 0.0 - user should have called N_VConst */
+
+  if (a == b) {
+    VScaleSum_ParHyp(a, x, y, z);
+    return;
+  }
+
+  /* Case: a == -b */
+
+  if (a == -b) {
+    VScaleDiff_ParHyp(a, x, y, z);
+    return;
+  }
+
+  /* Do all cases not handled above:
+     (1) a == other, b == 0.0 - user should have called N_VScale
+     (2) a == 0.0, b == other - user should have called N_VScale
+     (3) a,b == other, a !=b, a != -b */
+  
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  yd = NV_DATA_PH(y);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])+(b*yd[i]);
+
+  return;
+}
+
+void N_VConst_ParHyp(realtype c, N_Vector z)
+{
+  HYPRE_Complex value = c;
+  HYPRE_ParVectorSetConstantValues( (HYPRE_ParVector) NV_HYPRE_PARVEC_PH(z), value);
+  return;
+}
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise product z[i] = x[i]*y[i]
+ */
+
+void N_VProd_ParHyp(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  yd = NV_DATA_PH(y);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]*yd[i];
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise division z[i] = x[i]/y[i]
+ */
+
+void N_VDiv_ParHyp(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  yd = NV_DATA_PH(y);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]/yd[i];
+
+  return;
+}
+
+
+void N_VScale_ParHyp(realtype c, N_Vector x, N_Vector z)
+{
+  HYPRE_Complex value = c;
+  
+  if (x != z) {
+     HYPRE_ParVectorCopy((HYPRE_ParVector) NV_HYPRE_PARVEC_PH(x), (HYPRE_ParVector) NV_HYPRE_PARVEC_PH(z));
+  }
+  HYPRE_ParVectorScale(value, (HYPRE_ParVector) NV_HYPRE_PARVEC_PH(z));
+  
+  return;
+}
+
+
+void N_VAbs_ParHyp(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = SUNRabs(xd[i]);
+
+  return;
+}
+
+void N_VInv_ParHyp(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = ONE/xd[i];
+
+  return;
+}
+
+void N_VAddConst_ParHyp(N_Vector x, realtype b, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  zd = NV_DATA_PH(z);
+  
+  for (i = 0; i < N; i++) 
+     zd[i] = xd[i] + b;
+
+  return;
+}
+
+realtype N_VDotProd_ParHyp(N_Vector x, N_Vector y)
+{
+
+  HYPRE_Real gsum;
+  HYPRE_ParVectorInnerProd( (HYPRE_ParVector) NV_HYPRE_PARVEC_PH(x),
+                            (HYPRE_ParVector) NV_HYPRE_PARVEC_PH(y), &gsum);
+
+  return(gsum);
+}
+
+realtype N_VMaxNorm_ParHyp(N_Vector x)
+{
+  long int i, N;
+  realtype max, *xd, gmax;
+  MPI_Comm comm;
+
+  xd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  comm = NV_COMM_PH(x);
+
+  max = ZERO;
+
+  for (i = 0; i < N; i++) {
+    if (SUNRabs(xd[i]) > max) max = SUNRabs(xd[i]);
+  }
+   
+  gmax = VAllReduce_ParHyp(max, 2, comm);
+
+  return(gmax);
+}
+
+realtype N_VWrmsNorm_ParHyp(N_Vector x, N_Vector w)
+{
+  long int i, N, N_global;
+  realtype sum, prodi, *xd, *wd, gsum;
+  MPI_Comm comm;
+
+  sum = ZERO;
+  xd = wd = NULL;
+
+  N        = NV_LOCLENGTH_PH(x);
+  N_global = NV_GLOBLENGTH_PH(x);
+  xd       = NV_DATA_PH(x);
+  wd       = NV_DATA_PH(w);
+  comm     = NV_COMM_PH(x);
+
+  for (i = 0; i < N; i++) {
+    prodi = xd[i]*wd[i];
+    sum += SUNSQR(prodi);
+  }
+
+  gsum = VAllReduce_ParHyp(sum, 1, comm);
+
+  return(SUNRsqrt(gsum/N_global));
+}
+
+realtype N_VWrmsNormMask_ParHyp(N_Vector x, N_Vector w, N_Vector id)
+{
+  long int i, N, N_global;
+  realtype sum, prodi, *xd, *wd, *idd, gsum;
+  MPI_Comm comm;
+
+  sum = ZERO;
+  xd = wd = idd = NULL;
+
+  N        = NV_LOCLENGTH_PH(x);
+  N_global = NV_GLOBLENGTH_PH(x);
+  xd       = NV_DATA_PH(x);
+  wd       = NV_DATA_PH(w);
+  idd      = NV_DATA_PH(id);
+  comm = NV_COMM_PH(x);
+
+  for (i = 0; i < N; i++) {
+    if (idd[i] > ZERO) {
+      prodi = xd[i]*wd[i];
+      sum += SUNSQR(prodi);
+    }
+  }
+
+  gsum = VAllReduce_ParHyp(sum, 1, comm);
+
+  return(SUNRsqrt(gsum/N_global));
+}
+
+realtype N_VMin_ParHyp(N_Vector x)
+{
+  long int i, N;
+  realtype min, *xd, gmin;
+  MPI_Comm comm;
+
+  xd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  comm = NV_COMM_PH(x);
+
+  min = BIG_REAL;
+
+  if (N > 0) {
+
+    xd = NV_DATA_PH(x);
+
+    min = xd[0];
+
+    for (i = 1; i < N; i++) {
+      if (xd[i] < min) 
+        min = xd[i];
+    }
+
+  }
+
+  gmin = VAllReduce_ParHyp(min, 3, comm);
+
+  return(gmin);
+}
+
+realtype N_VWL2Norm_ParHyp(N_Vector x, N_Vector w)
+{
+  long int i, N;
+  realtype sum, prodi, *xd, *wd, gsum;
+  MPI_Comm comm;
+
+  sum = ZERO;
+  xd = wd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  wd = NV_DATA_PH(w);
+  comm = NV_COMM_PH(x);
+
+  for (i = 0; i < N; i++) {
+    prodi = xd[i]*wd[i];
+    sum += SUNSQR(prodi);
+  }
+
+  gsum = VAllReduce_ParHyp(sum, 1, comm);
+
+  return(SUNRsqrt(gsum));
+}
+
+realtype N_VL1Norm_ParHyp(N_Vector x)
+{
+  long int i, N;
+  realtype sum, gsum, *xd;
+  MPI_Comm comm;
+
+  sum = ZERO;
+  xd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  comm = NV_COMM_PH(x);
+
+  for (i = 0; i<N; i++) 
+    sum += SUNRabs(xd[i]);
+
+  gsum = VAllReduce_ParHyp(sum, 1, comm);
+
+  return(gsum);
+}
+
+void N_VCompare_ParHyp(realtype c, N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++) {
+    zd[i] = (SUNRabs(xd[i]) >= c) ? ONE : ZERO;
+  }
+
+  return;
+}
+
+booleantype N_VInvTest_ParHyp(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd, val, gval;
+  MPI_Comm comm;
+
+  xd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  zd = NV_DATA_PH(z);
+  comm = NV_COMM_PH(x);
+
+  val = ONE;
+  for (i = 0; i < N; i++) {
+    if (xd[i] == ZERO) 
+      val = ZERO;
+    else
+      zd[i] = ONE/xd[i];
+  }
+
+  gval = VAllReduce_ParHyp(val, 3, comm);
+
+  if (gval == ZERO)
+    return(FALSE);
+  else
+    return(TRUE);
+}
+
+booleantype N_VConstrMask_ParHyp(N_Vector c, N_Vector x, N_Vector m)
+{
+  long int i, N;
+  realtype temp;
+  realtype *cd, *xd, *md;
+  MPI_Comm comm;
+
+  cd = xd = md = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  cd = NV_DATA_PH(c);
+  md = NV_DATA_PH(m);
+  comm = NV_COMM_PH(x);
+
+  temp = ONE;
+
+  for (i = 0; i < N; i++) {
+    md[i] = ZERO;
+    if (cd[i] == ZERO) continue;
+    if (cd[i] > ONEPT5 || cd[i] < -ONEPT5) {
+      if (xd[i]*cd[i] <= ZERO) { 
+        temp = ZERO; 
+        md[i] = ONE;
+      }
+      continue;
+    }
+    if (cd[i] > HALF || cd[i] < -HALF) {
+      if (xd[i]*cd[i] < ZERO ) { 
+        temp = ZERO; 
+        md[i] = ONE;
+      }
+    }
+  }
+
+  temp = VAllReduce_ParHyp(temp, 3, comm);
+
+  if (temp == ONE) 
+    return(TRUE);
+  else 
+    return(FALSE);
+}
+
+realtype N_VMinQuotient_ParHyp(N_Vector num, N_Vector denom)
+{
+  booleantype notEvenOnce;
+  long int i, N;
+  realtype *nd, *dd, min;
+  MPI_Comm comm;
+
+  nd = dd = NULL;
+
+  N  = NV_LOCLENGTH_PH(num);
+  nd = NV_DATA_PH(num);
+  dd = NV_DATA_PH(denom);
+  comm = NV_COMM_PH(num);
+
+  notEvenOnce = TRUE;
+  min = BIG_REAL;
+
+  for (i = 0; i < N; i++) {
+    if (dd[i] == ZERO) continue;
+    else {
+      if (!notEvenOnce) min = SUNMIN(min, nd[i]/dd[i]);
+      else {
+        min = nd[i]/dd[i];
+        notEvenOnce = FALSE;
+      }
+    }
+  }
+
+  return(VAllReduce_ParHyp(min, 3, comm));
+}
+
+/*
+ * -----------------------------------------------------------------
+ * private functions
+ * -----------------------------------------------------------------
+ */
+
+static realtype VAllReduce_ParHyp(realtype d, int op, MPI_Comm comm)
+{
+  /* 
+   * This function does a global reduction.  The operation is
+   *   sum if op = 1,
+   *   max if op = 2,
+   *   min if op = 3.
+   * The operation is over all processors in the communicator 
+   */
+
+  realtype out;
+
+  switch (op) {
+   case 1: MPI_Allreduce(&d, &out, 1, PVEC_REAL_MPI_TYPE, MPI_SUM, comm);
+           break;
+
+   case 2: MPI_Allreduce(&d, &out, 1, PVEC_REAL_MPI_TYPE, MPI_MAX, comm);
+           break;
+
+   case 3: MPI_Allreduce(&d, &out, 1, PVEC_REAL_MPI_TYPE, MPI_MIN, comm);
+           break;
+
+   default: break;
+  }
+
+  return(out);
+}
+
+
+static void VSum_ParHyp(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  yd = NV_DATA_PH(y);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]+yd[i];
+
+  return;
+}
+
+static void VDiff_ParHyp(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  yd = NV_DATA_PH(y);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]-yd[i];
+
+  return;
+}
+
+
+static void VScaleSum_ParHyp(realtype c, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  yd = NV_DATA_PH(y);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = c*(xd[i]+yd[i]);
+
+  return;
+}
+
+static void VScaleDiff_ParHyp(realtype c, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  yd = NV_DATA_PH(y);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = c*(xd[i]-yd[i]);
+
+  return;
+}
+
+static void VLin1_ParHyp(realtype a, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  yd = NV_DATA_PH(y);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])+yd[i];
+
+  return;
+}
+
+static void VLin2_ParHyp(realtype a, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LOCLENGTH_PH(x);
+  xd = NV_DATA_PH(x);
+  yd = NV_DATA_PH(y);
+  zd = NV_DATA_PH(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])-yd[i];
+
+  return;
+}
+
diff --git a/src/nvec_petsc/CMakeLists.txt b/src/nvec_petsc/CMakeLists.txt
new file mode 100644
index 0000000..a98867c
--- /dev/null
+++ b/src/nvec_petsc/CMakeLists.txt
@@ -0,0 +1,77 @@
+# ---------------------------------------------------------------
+# $Revision:  $
+# $Date:  $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the petsc NVECTOR library
+
+INSTALL(CODE "MESSAGE(\"\nInstall NVECTOR_PETSC\n\")")
+
+IF(MPI_MPICC)
+  # use MPI_MPICC as the compiler
+  SET(CMAKE_C_COMPILER ${MPI_MPICC})
+ELSE(MPI_MPICC)
+  # add MPI_INCLUDE_PATH to include directories
+  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
+ENDIF(MPI_MPICC)
+
+# Add variable nvecpetsc_SOURCES with the sources for the NVECPARHYP lib
+SET(nvecpetsc_SOURCES nvector_petsc.c)
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the NVECPARHYP library
+SET(shared_SOURCES sundials_math.c)
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable nvecpetsc_HEADERS with the exported NVECPARHYP header files
+SET(nvecpetsc_HEADERS nvector_petsc.h)
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/nvector/ nvecpetsc_HEADERS)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(.)
+INCLUDE_DIRECTORIES(${PETSC_INCLUDE_DIR})
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Rules for building and installing the static library:
+#  - Add the build target for the NVECPARHYP library
+#  - Set the library name and make sure it is not deleted
+#  - Install the NVECPARHYP library
+IF(BUILD_STATIC_LIBS)
+  ADD_LIBRARY(sundials_nvecpetsc_static STATIC ${nvecpetsc_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecpetsc_static
+    PROPERTIES OUTPUT_NAME sundials_nvecpetsc CLEAN_DIRECT_OUTPUT 1)
+  INSTALL(TARGETS sundials_nvecpetsc_static DESTINATION lib)
+ENDIF(BUILD_STATIC_LIBS)
+
+# Rules for building and installing the shared library:
+#  - Add the build target for the NVECPARHYP library
+#  - Set the library name and make sure it is not deleted
+#  - Set VERSION and SOVERSION for shared libraries
+#  - Install the NVECPARHYP library
+IF(BUILD_SHARED_LIBS)
+  ADD_LIBRARY(sundials_nvecpetsc_shared SHARED ${nvecpetsc_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecpetsc_shared
+    PROPERTIES OUTPUT_NAME sundials_nvecpetsc CLEAN_DIRECT_OUTPUT 1)
+  SET_TARGET_PROPERTIES(sundials_nvecpetsc_shared 
+    PROPERTIES VERSION ${nveclib_VERSION} SOVERSION ${nveclib_SOVERSION})
+  INSTALL(TARGETS sundials_nvecpetsc_shared DESTINATION lib)
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the NVECPARHYP header files
+INSTALL(FILES ${nvecpetsc_HEADERS} DESTINATION include/nvector)
+
+#
+MESSAGE(STATUS "Added NVECTOR_PETSC module")
diff --git a/src/nvec_petsc/README b/src/nvec_petsc/README
new file mode 100644
index 0000000..36f5f8a
--- /dev/null
+++ b/src/nvec_petsc/README
@@ -0,0 +1,45 @@
+                     NVECTOR_PARALLEL
+                 released as part of SUNDIALS
+    SUite of Nonlinear and DIfferential/ALgebraic equation Solvers
+                   Release 2.7.0, September 2016
+
+
+NVECTOR_PETSC is an NVECTOR wrapper around the PETSC vector.  
+
+NVECTOR_PETSC defines the content field of an N_Vector to be a 
+structure containing the global and local lengths of the vector, a 
+pointer to the PETSC vector, an MPI communicator, and a boolean 
+flag indicating ownership of the wrapped PETSC vector.
+
+NVECTOR_PETSC defines implementations of all vector operations defined
+by the generic NVECTOR module in the table of operations, except for 
+N_VSetArrayPointer and N_VGetArrayPointer, because accessing raw vector
+data should be handled by PETSC functions.  As such, this vector is not 
+available for use with SUNDIALS Fortran interfaces. When access to raw 
+vector data is needed, one should extract the PETSC vector first, and 
+then use PETSC methods to access the data. Usage examples of NVECTOR_PETSC
+are provided in example programs for IDA.
+
+
+A. Documentation
+----------------
+
+The NVECTOR_PETSC implementation is fully described in the user documentation
+for any of the SUNDIALS solvers. A PDF file for the user guide for a particular
+solver is available in the solver's subdirectory under doc/.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see any of the user guides.
+
+
+
+C. Releases
+-----------
+
+v. 2.7.0 - Sep. 2016
+
+
diff --git a/src/nvec_petsc/nvector_petsc.c b/src/nvec_petsc/nvector_petsc.c
new file mode 100644
index 0000000..1ab06da
--- /dev/null
+++ b/src/nvec_petsc/nvector_petsc.c
@@ -0,0 +1,900 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4918 $
+ * $Date: 2016-09-19 09:07:29 -0700 (Mon, 19 Sep 2016) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Slaven Peles @ LLNL
+ * 
+ * Based on N_Vector_Parallel by Scott D. Cohen, Alan C. Hindmarsh, 
+ * Radu Serban, and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a PETSc implementation
+ * of the NVECTOR package.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <nvector/nvector_petsc.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO   RCONST(0.0)
+#define HALF   RCONST(0.5)
+#define ONE    RCONST(1.0)
+#define ONEPT5 RCONST(1.5)
+
+
+
+/* Error Message */
+
+
+#define BAD_N1 "N_VNewEmpty_Petsc -- Sum of local vector lengths differs from "
+#define BAD_N2 "input global length. \n\n"
+#define BAD_N   BAD_N1 BAD_N2
+
+/*
+ * -----------------------------------------------------------------
+ * Simplifying macros NV_CONTENT_PTC, NV_OWN_DATA_PTC, 
+ *                    NV_LOCLENGTH_PTC, NV_GLOBLENGTH_PTC,
+ *                    NV_COMM_PTC
+ * -----------------------------------------------------------------
+ * In the descriptions below, the following user declarations
+ * are assumed:
+ *
+ * N_Vector v;
+ * long int v_len, s_len, i;
+ *
+ * (1) NV_CONTENT_PTC
+ *
+ *     This routines gives access to the contents of the PETSc 
+ *     vector wrapper N_Vector.
+ *
+ *     The assignment v_cont = NV_CONTENT_PTC(v) sets v_cont to be
+ *     a pointer to the N_Vector (PETSc wrapper) content structure.
+ *
+ * (2) NV_PVEC_PTC, NV_OWN_DATA_PTC, NV_LOCLENGTH_PTC, NV_GLOBLENGTH_PTC,
+ *     and NV_COMM_PTC
+ *
+ *     These routines give access to the individual parts of
+ *     the content structure of a parallel N_Vector.
+ *
+ *     NV_PVEC_PTC(v) returns pointer to the PETSc vector. 
+ *
+ *     The assignment v_llen = NV_LOCLENGTH_PTC(v) sets v_llen to
+ *     be the length of the local part of the vector v. The call
+ *     NV_LOCLENGTH_PTC(v) = llen_v sets the local length
+ *     of v to be llen_v.
+ *
+ *     The assignment v_glen = NV_GLOBLENGTH_PTC(v) sets v_glen to
+ *     be the global length of the vector v. The call
+ *     NV_GLOBLENGTH_PTC(v) = glen_v sets the global length of v to
+ *     be glen_v.
+ *
+ *     The assignment v_comm = NV_COMM_PTC(v) sets v_comm to be the
+ *     MPI communicator of the vector v. The assignment
+ *     NV_COMM_PTC(v) = comm_v sets the MPI communicator of v to be
+ *     comm_v.
+ *
+ * -----------------------------------------------------------------
+ */
+
+#define NV_CONTENT_PTC(v)    ( (N_VectorContent_Petsc)(v->content) )
+
+#define NV_LOCLENGTH_PTC(v)  ( NV_CONTENT_PTC(v)->local_length )
+
+#define NV_GLOBLENGTH_PTC(v) ( NV_CONTENT_PTC(v)->global_length )
+
+#define NV_OWN_DATA_PTC(v)   ( NV_CONTENT_PTC(v)->own_data )
+
+#define NV_PVEC_PTC(v)       ( NV_CONTENT_PTC(v)->pvec )
+
+#define NV_COMM_PTC(v)       ( NV_CONTENT_PTC(v)->comm )
+
+
+/* Private function prototypes */
+
+/* Reduction operations add/max/min over the processor group */
+static realtype VAllReduce_Petsc(realtype d, int op, MPI_Comm comm);
+
+/*
+ * -----------------------------------------------------------------
+ * exported functions
+ * -----------------------------------------------------------------
+ */
+
+/* ----------------------------------------------------------------
+ * Returns vector type ID. Used to identify vector implementation 
+ * from abstract N_Vector interface.
+ */
+N_Vector_ID N_VGetVectorID_Petsc(N_Vector v)
+{
+  return SUNDIALS_NVEC_PETSC;
+}
+
+
+/* ----------------------------------------------------------------
+ * Function to create a new parallel vector with empty data array
+ */
+
+N_Vector N_VNewEmpty_Petsc(MPI_Comm comm, 
+                           long int local_length,
+                           long int global_length)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_Petsc content;
+  long int n, Nsum;
+  PetscErrorCode ierr;
+
+  /* Compute global length as sum of local lengths */
+  n = local_length;
+  ierr = MPI_Allreduce(&n, &Nsum, 1, PVEC_INTEGER_MPI_TYPE, MPI_SUM, comm);
+  CHKERRABORT(comm,ierr);
+  if (Nsum != global_length) {
+    printf(BAD_N);
+    return(NULL);
+  } 
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+  
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+
+  ops->nvgetvectorid     = N_VGetVectorID_Petsc;
+  ops->nvclone           = N_VClone_Petsc;
+  ops->nvcloneempty      = N_VCloneEmpty_Petsc;
+  ops->nvdestroy         = N_VDestroy_Petsc;
+  ops->nvspace           = N_VSpace_Petsc;
+  ops->nvgetarraypointer = N_VGetArrayPointer_Petsc;
+  ops->nvsetarraypointer = N_VSetArrayPointer_Petsc;
+  ops->nvlinearsum       = N_VLinearSum_Petsc;
+  ops->nvconst           = N_VConst_Petsc;
+  ops->nvprod            = N_VProd_Petsc;
+  ops->nvdiv             = N_VDiv_Petsc;
+  ops->nvscale           = N_VScale_Petsc;
+  ops->nvabs             = N_VAbs_Petsc;
+  ops->nvinv             = N_VInv_Petsc;
+  ops->nvaddconst        = N_VAddConst_Petsc;
+  ops->nvdotprod         = N_VDotProd_Petsc;
+  ops->nvmaxnorm         = N_VMaxNorm_Petsc;
+  ops->nvwrmsnormmask    = N_VWrmsNormMask_Petsc;
+  ops->nvwrmsnorm        = N_VWrmsNorm_Petsc;
+  ops->nvmin             = N_VMin_Petsc;
+  ops->nvwl2norm         = N_VWL2Norm_Petsc;
+  ops->nvl1norm          = N_VL1Norm_Petsc;
+  ops->nvcompare         = N_VCompare_Petsc;
+  ops->nvinvtest         = N_VInvTest_Petsc;
+  ops->nvconstrmask      = N_VConstrMask_Petsc;
+  ops->nvminquotient     = N_VMinQuotient_Petsc;
+
+  /* Create content */
+  content = NULL;
+  content = (N_VectorContent_Petsc) malloc(sizeof(struct _N_VectorContent_Petsc));
+  if (content == NULL) { 
+    free(ops); 
+    free(v); 
+    return(NULL); 
+  }
+
+  /* Attach lengths and communicator */
+  content->local_length  = local_length;
+  content->global_length = global_length;
+  content->comm          = comm;
+  content->own_data      = FALSE;
+  content->pvec          = NULL;
+
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+
+
+/* ---------------------------------------------------------------- 
+ * Function to create a parallel N_Vector with user data component
+ * This function is NOT implemented for PETSc wrapper!
+ */
+
+N_Vector N_VMake_Petsc(Vec *pvec)
+{
+  N_Vector v = NULL;
+  MPI_Comm comm;
+  PetscInt local_length;
+  PetscInt global_length;
+
+  VecGetLocalSize(*pvec, &local_length);
+  VecGetSize(*pvec, &global_length);
+  PetscObjectGetComm((PetscObject) (*pvec), &comm);
+  
+  v = N_VNewEmpty_Petsc(comm, local_length, global_length);
+  if (v == NULL) 
+     return(NULL);
+
+  /* Attach data */
+  NV_OWN_DATA_PTC(v) = FALSE;
+  NV_PVEC_PTC(v)     = pvec;
+
+  return(v);
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to create an array of new parallel vectors. 
+ */
+
+N_Vector *N_VCloneVectorArray_Petsc(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VClone_Petsc(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_Petsc(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to create an array of new parallel vectors with empty
+ * (NULL) data array.
+ */
+
+N_Vector *N_VCloneVectorArrayEmpty_Petsc(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VCloneEmpty_Petsc(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_Petsc(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ----------------------------------------------------------------
+ * Function to free an array created with N_VCloneVectorArray_Petsc
+ */
+
+void N_VDestroyVectorArray_Petsc(N_Vector *vs, int count)
+{
+  int j;
+
+  for (j = 0; j < count; j++) N_VDestroy_Petsc(vs[j]);
+
+  free(vs); 
+  vs = NULL;
+
+  return;
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to extract PETSc vector 
+ */
+
+Vec *N_VGetVector_Petsc(N_Vector v)
+{
+  return NV_PVEC_PTC(v);
+}
+
+/* ---------------------------------------------------------------- 
+ * Function to print a parallel vector 
+ */
+
+void N_VPrint_Petsc(N_Vector x)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  MPI_Comm comm = NV_COMM_PTC(x);
+  
+  VecView(*xv, PETSC_VIEWER_STDOUT_(comm));
+
+  return;
+}
+
+/*
+ * -----------------------------------------------------------------
+ * implementation of vector operations
+ * -----------------------------------------------------------------
+ */
+
+N_Vector N_VCloneEmpty_Petsc(N_Vector w)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_Petsc content;
+
+  if (w == NULL) return(NULL);
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+  
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { 
+    free(v); 
+    return(NULL); 
+  }
+  
+  ops->nvgetvectorid     = w->ops->nvgetvectorid;
+  ops->nvclone           = w->ops->nvclone;
+  ops->nvcloneempty      = w->ops->nvcloneempty;
+  ops->nvdestroy         = w->ops->nvdestroy;
+  ops->nvspace           = w->ops->nvspace;
+  ops->nvgetarraypointer = w->ops->nvgetarraypointer;
+  ops->nvsetarraypointer = w->ops->nvsetarraypointer;
+  ops->nvlinearsum       = w->ops->nvlinearsum;
+  ops->nvconst           = w->ops->nvconst;  
+  ops->nvprod            = w->ops->nvprod;   
+  ops->nvdiv             = w->ops->nvdiv;
+  ops->nvscale           = w->ops->nvscale; 
+  ops->nvabs             = w->ops->nvabs;
+  ops->nvinv             = w->ops->nvinv;
+  ops->nvaddconst        = w->ops->nvaddconst;
+  ops->nvdotprod         = w->ops->nvdotprod;
+  ops->nvmaxnorm         = w->ops->nvmaxnorm;
+  ops->nvwrmsnormmask    = w->ops->nvwrmsnormmask;
+  ops->nvwrmsnorm        = w->ops->nvwrmsnorm;
+  ops->nvmin             = w->ops->nvmin;
+  ops->nvwl2norm         = w->ops->nvwl2norm;
+  ops->nvl1norm          = w->ops->nvl1norm;
+  ops->nvcompare         = w->ops->nvcompare;    
+  ops->nvinvtest         = w->ops->nvinvtest;
+  ops->nvconstrmask      = w->ops->nvconstrmask;
+  ops->nvminquotient     = w->ops->nvminquotient;
+
+  /* Create content */  
+  content = NULL;
+  content = (N_VectorContent_Petsc) malloc(sizeof(struct _N_VectorContent_Petsc));
+  if (content == NULL) { 
+    free(ops); 
+    free(v); 
+    return(NULL); 
+  }
+
+  /* Attach lengths and communicator */
+  content->local_length  = NV_LOCLENGTH_PTC(w);
+  content->global_length = NV_GLOBLENGTH_PTC(w);
+  content->comm          = NV_COMM_PTC(w);
+  content->own_data      = FALSE;
+  content->pvec          = NULL;
+
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+N_Vector N_VClone_Petsc(N_Vector w)
+{
+  N_Vector v     = NULL;
+  Vec *pvec      = NULL;
+  Vec *wvec      = NV_PVEC_PTC(w);
+  
+  /* PetscErrorCode ierr; */
+  
+  v = N_VCloneEmpty_Petsc(w);
+  if (v == NULL) 
+    return(NULL);
+
+  /* Create data */
+
+  /* Allocate empty PETSc vector */
+  pvec = (Vec*) malloc(sizeof(Vec));
+  if(pvec == NULL) {
+    N_VDestroy_Petsc(v); 
+    return(NULL);
+  }
+    
+  /* ierr = */ 
+  VecDuplicate(*wvec, pvec);
+  if(pvec == NULL) {
+    N_VDestroy_Petsc(v); 
+    return(NULL);
+  }
+    
+  /* Attach data */
+  NV_OWN_DATA_PTC(v) = TRUE;
+  NV_PVEC_PTC(v)     = pvec;
+
+  return(v);
+}
+
+void N_VDestroy_Petsc(N_Vector v)
+{
+  if (NV_OWN_DATA_PTC(v) == TRUE) {
+    VecDestroy((NV_PVEC_PTC(v)));
+    NV_PVEC_PTC(v) = NULL;
+  }
+  
+  free(v->content); 
+  v->content = NULL;
+  free(v->ops); 
+  v->ops = NULL;
+  free(v); 
+  v = NULL;
+
+  return;
+}
+
+void N_VSpace_Petsc(N_Vector v, long int *lrw, long int *liw)
+{
+  MPI_Comm comm;
+  int npes;
+
+  comm = NV_COMM_PTC(v);
+  MPI_Comm_size(comm, &npes);
+  
+  *lrw = NV_GLOBLENGTH_PTC(v);
+  *liw = 2*npes;
+
+  return;
+}
+
+/*
+ * Not implemented for PETSc wrapper.
+ */
+realtype *N_VGetArrayPointer_Petsc(N_Vector v)
+{
+  return NULL;
+}
+
+/*
+ * Not implemented for PETSc wrapper.
+ */
+void N_VSetArrayPointer_Petsc(realtype *v_data, N_Vector v)
+{
+  return;
+}
+
+void N_VLinearSum_Petsc(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *yv = NV_PVEC_PTC(y);
+  Vec *zv = NV_PVEC_PTC(z);
+  
+  if (x == y) {
+    N_VScale_Petsc(a + b, x, z); /* z <~ ax+bx */
+    return;
+  }
+
+  if (z == y) {
+    if (b == ONE) { 
+      VecAXPY(*yv, a, *xv);   /* BLAS usage: axpy  y <- ax+y */
+      return;
+    }
+    VecAXPBY(*yv, a, b, *xv); /* BLAS usage: axpby y <- ax+by */
+    return;
+  }
+
+  if (z == x) {
+    if (a == ONE) { 
+      VecAXPY(*xv, b, *yv);   /* BLAS usage: axpy  x <- by+x */
+      return;
+    }
+    VecAXPBY(*xv, b, a, *yv); /* BLAS usage: axpby x <- by+ax */
+    return;
+  }
+
+
+  /* Do all cases not handled above:
+     (1) a == other, b == 0.0 - user should have called N_VScale
+     (2) a == 0.0, b == other - user should have called N_VScale
+     (3) a,b == other, a !=b, a != -b */
+  
+  VecAXPBYPCZ(*zv, a, b, 0.0, *xv, *yv); // PETSc, probably not optimal 
+
+  return;
+}
+
+void N_VConst_Petsc(realtype c, N_Vector z)
+{
+  Vec *zv      = NV_PVEC_PTC(z);
+
+  VecSet(*zv, c);
+  
+  return;
+}
+
+void N_VProd_Petsc(N_Vector x, N_Vector y, N_Vector z)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *yv = NV_PVEC_PTC(y);
+  Vec *zv = NV_PVEC_PTC(z);
+  
+  VecPointwiseMult(*zv, *xv, *yv);
+  
+  return;
+}
+
+void N_VDiv_Petsc(N_Vector x, N_Vector y, N_Vector z)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *yv = NV_PVEC_PTC(y);
+  Vec *zv = NV_PVEC_PTC(z);
+
+  VecPointwiseDivide(*zv, *xv, *yv); /* z = x/y */
+
+  return;
+}
+
+void N_VScale_Petsc(realtype c, N_Vector x, N_Vector z)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *zv = NV_PVEC_PTC(z);
+
+  if (z == x) {       /* BLAS usage: scale x <- cx */
+    VecScale(*xv, c);
+    return;
+  }
+  
+  VecAXPBY(*zv, c, 0.0, *xv); 
+
+  return;
+}
+
+void N_VAbs_Petsc(N_Vector x, N_Vector z)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *zv = NV_PVEC_PTC(z);
+
+  if(z != x)
+    VecCopy(*xv, *zv); /* copy x~>z */
+  VecAbs(*zv); 
+  
+  return;
+}
+
+void N_VInv_Petsc(N_Vector x, N_Vector z)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *zv = NV_PVEC_PTC(z);
+
+  if(z != x)
+    VecCopy(*xv, *zv); /* copy x~>z */
+  VecReciprocal(*zv);
+
+  return;
+}
+
+void N_VAddConst_Petsc(N_Vector x, realtype b, N_Vector z)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *zv = NV_PVEC_PTC(z);
+
+  if(z != x)
+    VecCopy(*xv, *zv); /* copy x~>z */
+  VecShift(*zv, b);
+
+  return;
+}
+
+realtype N_VDotProd_Petsc(N_Vector x, N_Vector y)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *yv = NV_PVEC_PTC(y);
+  PetscScalar dotprod;
+  
+  VecDot(*xv, *yv, &dotprod);
+  
+  return dotprod;
+}
+
+realtype N_VMaxNorm_Petsc(N_Vector x)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  PetscReal norm;
+  
+  VecNorm(*xv, NORM_INFINITY, &norm);
+  
+  return norm;
+}
+
+realtype N_VWrmsNorm_Petsc(N_Vector x, N_Vector w)
+{
+  long int i;
+  long int N        = NV_LOCLENGTH_PTC(x);
+  long int N_global = NV_GLOBLENGTH_PTC(x);
+  MPI_Comm comm     = NV_COMM_PTC(x);
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *wv = NV_PVEC_PTC(w);
+  PetscScalar *xd;
+  PetscScalar *wd;
+  PetscReal sum = ZERO;
+  realtype global_sum;
+  
+  VecGetArray(*xv, &xd);
+  VecGetArray(*wv, &wd);
+  for (i = 0; i < N; i++) {
+    sum += PetscSqr(PetscAbsScalar(xd[i] * wd[i]));
+  }
+  VecRestoreArray(*xv, &xd);
+  VecRestoreArray(*wv, &wd);
+  
+  global_sum = VAllReduce_Petsc(sum, 1, comm);
+  return (SUNRsqrt(global_sum/N_global)); 
+}
+
+realtype N_VWrmsNormMask_Petsc(N_Vector x, N_Vector w, N_Vector id)
+{
+  long int i;
+  long int N        = NV_LOCLENGTH_PTC(x);
+  long int N_global = NV_GLOBLENGTH_PTC(x);
+  MPI_Comm comm     = NV_COMM_PTC(x);
+  
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *wv = NV_PVEC_PTC(w);
+  Vec *idv = NV_PVEC_PTC(id);
+  PetscScalar *xd;
+  PetscScalar *wd;
+  PetscScalar *idd;
+  PetscReal sum = ZERO;
+  realtype global_sum;
+  
+  VecGetArray(*xv, &xd);
+  VecGetArray(*wv, &wd);
+  VecGetArray(*idv, &idd);
+  for (i = 0; i < N; i++) {
+    PetscReal tag = (PetscReal) idd[i];
+    if (tag > ZERO) {
+      sum += PetscSqr(PetscAbsScalar(xd[i] * wd[i]));
+    }
+  }
+  VecRestoreArray(*xv, &xd);
+  VecRestoreArray(*wv, &wd);
+  VecRestoreArray(*idv, &idd);
+
+  global_sum = VAllReduce_Petsc(sum, 1, comm);
+  return (SUNRsqrt(global_sum/N_global)); 
+}
+
+realtype N_VMin_Petsc(N_Vector x)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  PetscReal minval;
+  PetscInt i;
+  
+  VecMin(*xv, &i, &minval);
+  
+  return minval;
+}
+
+realtype N_VWL2Norm_Petsc(N_Vector x, N_Vector w)
+{
+  long int i;
+  long int N        = NV_LOCLENGTH_PTC(x);
+  MPI_Comm comm     = NV_COMM_PTC(x);
+
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *wv = NV_PVEC_PTC(w);
+  PetscScalar *xd;
+  PetscScalar *wd;
+  PetscReal sum = ZERO;
+  realtype global_sum;
+  
+  VecGetArray(*xv, &xd);
+  VecGetArray(*wv, &wd);
+  for (i = 0; i < N; i++) {
+    sum += PetscSqr(PetscAbsScalar(xd[i] * wd[i]));
+  }
+  VecRestoreArray(*xv, &xd);
+  VecRestoreArray(*wv, &wd);
+
+  global_sum = VAllReduce_Petsc(sum, 1, comm);
+  return (SUNRsqrt(global_sum)); 
+}
+
+realtype N_VL1Norm_Petsc(N_Vector x)
+{
+  Vec *xv = NV_PVEC_PTC(x);
+  PetscReal norm;
+  
+  VecNorm(*xv, NORM_1, &norm);
+  
+  return norm;
+}
+
+void N_VCompare_Petsc(realtype c, N_Vector x, N_Vector z)
+{
+  long int i;
+  long int N = NV_LOCLENGTH_PTC(x);
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *zv = NV_PVEC_PTC(z);
+  PetscReal cpet = c; // <~ realtype should typedef to PETScReal
+  PetscScalar *xdata;
+  PetscScalar *zdata;
+
+  VecGetArray(*xv, &xdata);
+  VecGetArray(*zv, &zdata);
+  for (i = 0; i < N; i++) {
+    zdata[i] = PetscAbsScalar(xdata[i]) >= cpet ? ONE : ZERO;
+  }
+  VecRestoreArray(*xv, &xdata);
+  VecRestoreArray(*zv, &zdata);
+
+  return;
+}
+
+booleantype N_VInvTest_Petsc(N_Vector x, N_Vector z)
+{
+  long int i;
+  long int N = NV_LOCLENGTH_PTC(x);
+  MPI_Comm comm = NV_COMM_PTC(x);
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *zv = NV_PVEC_PTC(z);
+  PetscScalar *xd;
+  PetscScalar *zd;
+  PetscReal val = ONE;
+  
+  VecGetArray(*xv, &xd);
+  VecGetArray(*zv, &zd);
+  for (i = 0; i < N; i++) {
+    if (xd[i] == ZERO) 
+      val = ZERO;
+    else
+      zd[i] = ONE/xd[i];
+  }
+  VecRestoreArray(*xv, &xd);
+  VecRestoreArray(*zv, &zd);
+
+  val = VAllReduce_Petsc(val, 3, comm);
+
+  if (val == ZERO)
+    return(FALSE);
+  else
+    return(TRUE);
+}
+
+booleantype N_VConstrMask_Petsc(N_Vector c, N_Vector x, N_Vector m)
+{
+  long int i;
+  long int N = NV_LOCLENGTH_PTC(x);
+  MPI_Comm comm = NV_COMM_PTC(x);
+  realtype minval = ONE;
+  Vec *xv = NV_PVEC_PTC(x);
+  Vec *cv = NV_PVEC_PTC(c);
+  Vec *mv = NV_PVEC_PTC(m);
+  PetscScalar *xd;
+  PetscScalar *cd;
+  PetscScalar *md;
+
+  VecGetArray(*xv, &xd);
+  VecGetArray(*cv, &cd);
+  VecGetArray(*mv, &md);
+  for (i = 0; i < N; i++) {
+    PetscReal cc = (PetscReal) cd[i]; /* <~ Drop imaginary parts if any. */
+    PetscReal xx = (PetscReal) xd[i]; /* <~ Constraints defined on Re{x} */
+    md[i] = ZERO;
+    if (cc == ZERO) continue;
+    if (cc > ONEPT5 || cc < -ONEPT5) {
+      if (xx*cc <= ZERO) { minval = ZERO; md[i] = ONE; }
+      continue;
+    }
+    if (cc > HALF || cc < -HALF) {
+      if (xx*cc < ZERO ) { minval = ZERO; md[i] = ONE; }
+    }
+  }
+  VecRestoreArray(*xv, &xd);
+  VecRestoreArray(*cv, &cd);
+  VecRestoreArray(*mv, &md);
+
+  minval = VAllReduce_Petsc(minval, 3, comm);
+
+  if (minval == ONE) 
+    return(TRUE);
+  else
+    return(FALSE);
+}
+
+realtype N_VMinQuotient_Petsc(N_Vector num, N_Vector denom)
+{
+  booleantype notEvenOnce = TRUE;
+  long int i; 
+  long int N    = NV_LOCLENGTH_PTC(num);
+  MPI_Comm comm = NV_COMM_PTC(num);
+
+  Vec *nv = NV_PVEC_PTC(num);
+  Vec *dv = NV_PVEC_PTC(denom);
+  PetscScalar *nd;
+  PetscScalar *dd;
+  PetscReal minval = BIG_REAL;
+
+  VecGetArray(*nv, &nd);
+  VecGetArray(*dv, &dd);
+  for (i = 0; i < N; i++) {
+    PetscReal nr = (PetscReal) nd[i];
+    PetscReal dr = (PetscReal) dd[i];
+    if (dr == ZERO) 
+      continue;
+    else {
+      if (!notEvenOnce) 
+        minval = SUNMIN(minval, nr/dr);
+      else {
+        minval = nr/dr;
+        notEvenOnce = FALSE;
+      }
+    }
+  }
+  VecRestoreArray(*nv, &nd);
+  VecRestoreArray(*dv, &dd);
+
+  return(VAllReduce_Petsc(minval, 3, comm));
+}
+
+/*
+ * -----------------------------------------------------------------
+ * private functions
+ * -----------------------------------------------------------------
+ */
+
+static realtype VAllReduce_Petsc(realtype d, int op, MPI_Comm comm)
+{
+  /* 
+   * This function does a global reduction.  The operation is
+   *   sum if op = 1,
+   *   max if op = 2,
+   *   min if op = 3.
+   * The operation is over all processors in the communicator 
+   */
+
+  PetscErrorCode ierr;
+  realtype out;
+
+  switch (op) {
+   case 1: ierr = MPI_Allreduce(&d, &out, 1, PVEC_REAL_MPI_TYPE, MPI_SUM, comm);
+           break;
+
+   case 2: ierr = MPI_Allreduce(&d, &out, 1, PVEC_REAL_MPI_TYPE, MPI_MAX, comm);
+           break;
+
+   case 3: ierr = MPI_Allreduce(&d, &out, 1, PVEC_REAL_MPI_TYPE, MPI_MIN, comm);
+           break;
+
+   default: break;
+  }
+  CHKERRABORT(comm, ierr);
+
+  return(out);
+}
+
diff --git a/src/nvec_pthreads/CMakeLists.txt b/src/nvec_pthreads/CMakeLists.txt
new file mode 100644
index 0000000..b711d3a
--- /dev/null
+++ b/src/nvec_pthreads/CMakeLists.txt
@@ -0,0 +1,87 @@
+# ---------------------------------------------------------------
+# $Revision: 4075 $
+# $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+# ---------------------------------------------------------------
+# Programmer:  Steve Smith @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the pthreads NVECTOR library
+
+INSTALL(CODE "MESSAGE(\"\nInstall NVECTOR_PTHREADS\n\")")
+
+# Add variable nvecpthreads_SOURCES with the sources for the NVECPTHREADS lib
+SET(nvecpthreads_SOURCES nvector_pthreads.c)
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the NVECPTHREADS library
+SET(shared_SOURCES sundials_math.c)
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable nvecpthreads_HEADERS with the exported NVECPTHREADS header files
+SET(nvecpthreads_HEADERS nvector_pthreads.h)
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/nvector/ nvecpthreads_HEADERS)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(.)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Rules for building and installing the static library:
+#  - Add the build target for the NVECPTHREADS library
+#  - Set the library name and make sure it is not deleted
+#  - Install the NVECPTHREADS library
+IF(BUILD_STATIC_LIBS)
+  ADD_LIBRARY(sundials_nvecpthreads_static STATIC ${nvecpthreads_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecpthreads_static
+    PROPERTIES OUTPUT_NAME sundials_nvecpthreads CLEAN_DIRECT_OUTPUT 1)
+  INSTALL(TARGETS sundials_nvecpthreads_static DESTINATION lib)
+ENDIF(BUILD_STATIC_LIBS)
+
+# Rules for building and installing the shared library:
+#  - Add the build target for the NVECPTHREADS library
+#  - Set the library name and make sure it is not deleted
+#  - Set VERSION and SOVERSION for shared libraries
+#  - Install the NVECPTHREADS library
+IF(BUILD_SHARED_LIBS)
+  ADD_LIBRARY(sundials_nvecpthreads_shared SHARED ${nvecpthreads_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecpthreads_shared
+    PROPERTIES OUTPUT_NAME sundials_nvecpthreads CLEAN_DIRECT_OUTPUT 1)
+  SET_TARGET_PROPERTIES(sundials_nvecpthreads_shared
+    PROPERTIES VERSION ${nveclib_VERSION} SOVERSION ${nveclib_SOVERSION})
+  INSTALL(TARGETS sundials_nvecpthreads_shared DESTINATION lib)
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the NVECPTHREADS header files
+INSTALL(FILES ${nvecpthreads_HEADERS} DESTINATION include/nvector)
+
+# If FCMIX is enabled, build and install the FNVECPTHREADS library
+IF(FCMIX_ENABLE AND F77_FOUND)
+  SET(fnvecpthreads_SOURCES fnvector_pthreads.c)
+  IF(BUILD_STATIC_LIBS)
+    ADD_LIBRARY(sundials_fnvecpthreads_static STATIC ${fnvecpthreads_SOURCES})
+    SET_TARGET_PROPERTIES(sundials_fnvecpthreads_static
+      PROPERTIES OUTPUT_NAME sundials_fnvecpthreads CLEAN_DIRECT_OUTPUT 1)
+    INSTALL(TARGETS sundials_fnvecpthreads_static DESTINATION lib)
+  ENDIF(BUILD_STATIC_LIBS)
+  IF(BUILD_SHARED_LIBS)
+    ADD_LIBRARY(sundials_fnvecpthreads_shared ${fnvecpthreads_SOURCES})
+    SET_TARGET_PROPERTIES(sundials_fnvecpthreads_shared
+      PROPERTIES OUTPUT_NAME sundials_fnvecpthreads CLEAN_DIRECT_OUTPUT 1)
+    SET_TARGET_PROPERTIES(sundials_fnvecpthreads_shared 
+      PROPERTIES VERSION ${nveclib_VERSION} SOVERSION ${nveclib_SOVERSION})
+    INSTALL(TARGETS sundials_fnvecpthreads_shared DESTINATION lib)
+  ENDIF(BUILD_SHARED_LIBS)
+ENDIF(FCMIX_ENABLE AND F77_FOUND)
+
+#
+MESSAGE(STATUS "Added NVECTOR_PTHREADS module")
diff --git a/src/nvec_pthreads/README b/src/nvec_pthreads/README
new file mode 100644
index 0000000..23e8ca1
--- /dev/null
+++ b/src/nvec_pthreads/README
@@ -0,0 +1,47 @@
+                     NVECTOR_PTHREADS
+                 released as part of SUNDIALS
+    SUite of Nonlinear and DIfferential/ALgebraic equation Solvers
+                   Release 2.7.0, September 2016
+
+
+Pthreads implementation of the NVECTOR module for SUNDIALS. 
+
+NVECTOR_PTHREADS defines the content field of N_Vector to be a structure 
+containing the length of the vector, a pointer to the beginning of a 
+contiguous data array, and a boolean flag indicating ownership of the 
+data array.
+
+NVECTOR_PTHREADS defines five macros to provide access to the content of 
+a Pthreads N_Vector, several constructors for variables of type N_Vector,
+a constructor for an array of variables of type N_Vector, and destructors
+for N_Vector and N_Vector array.
+
+NVECTOR_PTHREADS provides implementations for all vector operations defined
+by the generic NVECTOR module in the table of operations.
+
+
+A. Documentation
+----------------
+
+The Pthreads NVECTOR implementation follows the serial implemenation
+fully described in the user documentation for any of the SUNDIALS
+solvers [1-5]. A PDF file for the user guide for a particular solver
+is available in the solver's subdirectory under doc/.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see any of the user guides.
+
+
+C. Releases
+-----------
+
+v. 2.7.0 - Sep. 2015
+v. 2.6.2 - Aug. 2015
+v. 2.6.1 - Mar. 2015
+v. 2.6.0 - Mar. 2015
+
+
diff --git a/src/nvec_pthreads/fnvector_pthreads.c b/src/nvec_pthreads/fnvector_pthreads.c
new file mode 100644
index 0000000..cfdf938
--- /dev/null
+++ b/src/nvec_pthreads/fnvector_pthreads.c
@@ -0,0 +1,159 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4388 $
+ * $Date: 2015-02-25 15:50:00 -0800 (Wed, 25 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Steven Smith @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file (companion of nvector_pthreads.h) contains the
+ * implementation needed for the Fortran initialization of pthreads
+ * vector operations.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fnvector_pthreads.h"
+
+/* Define global vector variables */
+
+N_Vector F2C_CVODE_vec;
+N_Vector F2C_CVODE_vecQ;
+N_Vector *F2C_CVODE_vecS;
+N_Vector F2C_CVODE_vecB;
+N_Vector F2C_CVODE_vecQB;
+
+N_Vector F2C_IDA_vec;
+N_Vector F2C_IDA_vecQ;
+N_Vector *F2C_IDA_vecS;
+N_Vector F2C_IDA_vecB;
+N_Vector F2C_IDA_vecQB;
+
+N_Vector F2C_KINSOL_vec;
+
+N_Vector F2C_ARKODE_vec;
+
+/* Fortran callable interfaces */
+
+void FNV_INITPTS(int *code, long int *N, int *num_threads, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vec = NULL;
+    F2C_CVODE_vec = N_VNewEmpty_Pthreads(*N, *num_threads);
+    if (F2C_CVODE_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vec = NULL;
+    F2C_IDA_vec = N_VNewEmpty_Pthreads(*N, *num_threads);
+    if (F2C_IDA_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_KINSOL:
+    F2C_KINSOL_vec = NULL;
+    F2C_KINSOL_vec = N_VNewEmpty_Pthreads(*N, *num_threads);
+    if (F2C_KINSOL_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_ARKODE:
+    F2C_ARKODE_vec = NULL;
+    F2C_ARKODE_vec = N_VNewEmpty_Pthreads(*N, *num_threads);
+    if (F2C_ARKODE_vec == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITPTS_Q(int *code, long int *Nq, int *num_threads, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecQ = NULL;
+    F2C_CVODE_vecQ = N_VNewEmpty_Pthreads(*Nq, *num_threads);
+    if (F2C_CVODE_vecQ == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecQ = NULL;
+    F2C_IDA_vecQ = N_VNewEmpty_Pthreads(*Nq, *num_threads);
+    if (F2C_IDA_vecQ == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITPTS_B(int *code, long int *NB, int *num_threads, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecB = NULL;
+    F2C_CVODE_vecB = N_VNewEmpty_Pthreads(*NB, *num_threads);
+    if (F2C_CVODE_vecB == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecB = NULL;
+    F2C_IDA_vecB = N_VNewEmpty_Pthreads(*NB, *num_threads);
+    if (F2C_IDA_vecB == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITPTS_QB(int *code, long int *NqB, int *num_threads, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecQB = NULL;
+    F2C_CVODE_vecQB = N_VNewEmpty_Pthreads(*NqB, *num_threads);
+    if (F2C_CVODE_vecQB == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecQB = NULL;
+    F2C_IDA_vecQB = N_VNewEmpty_Pthreads(*NqB, *num_threads);
+    if (F2C_IDA_vecQB == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITPTS_S(int *code, int *Ns, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecS = NULL;
+    F2C_CVODE_vecS = (N_Vector *) N_VCloneVectorArrayEmpty_Pthreads(*Ns, F2C_CVODE_vec);
+    if (F2C_CVODE_vecS == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecS = NULL;
+    F2C_IDA_vecS = (N_Vector *) N_VCloneVectorArrayEmpty_Pthreads(*Ns, F2C_IDA_vec);
+    if (F2C_IDA_vecS == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+
diff --git a/src/nvec_pthreads/fnvector_pthreads.h b/src/nvec_pthreads/fnvector_pthreads.h
new file mode 100644
index 0000000..52bf706
--- /dev/null
+++ b/src/nvec_pthreads/fnvector_pthreads.h
@@ -0,0 +1,95 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4388 $
+ * $Date: 2015-02-25 15:50:00 -0800 (Wed, 25 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Steven Smith @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file (companion of nvector_pthreads.h) contains the
+ * definitions needed for the initialization of pthreads
+ * vector operations in Fortran.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _FNVECTOR_PTHREADS_H
+#define _FNVECTOR_PTHREADS_H
+
+#include <nvector/nvector_pthreads.h>
+#include <sundials/sundials_fnvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+#if defined(SUNDIALS_F77_FUNC)
+#define FNV_INITPTS    SUNDIALS_F77_FUNC(fnvinitpts, FNVINITPTS)
+#else
+#define FNV_INITPTS    fnvinitpts_
+#endif
+
+#if defined(SUNDIALS_F77_FUNC_)
+
+#define FNV_INITPTS_Q  SUNDIALS_F77_FUNC_(fnvinitpts_q, FNVINITPTS_Q)
+#define FNV_INITPTS_S  SUNDIALS_F77_FUNC_(fnvinitpts_s, FNVINITPTS_S)
+#define FNV_INITPTS_B  SUNDIALS_F77_FUNC_(fnvinitpts_b, FNVINITPTS_B)
+#define FNV_INITPTS_QB SUNDIALS_F77_FUNC_(fnvinitpts_qb, FNVINITPTS_QB)
+
+#else
+
+#define FNV_INITPTS_Q  fnvinitpts_q_
+#define FNV_INITPTS_S  fnvinitpts_s_
+#define FNV_INITPTS_B  fnvinitpts_b_
+#define FNV_INITPTS_QB fnvinitpts_qb_
+
+#endif
+
+/* Declarations of global variables */
+
+extern N_Vector F2C_CVODE_vec;
+extern N_Vector F2C_CVODE_vecQ;
+extern N_Vector *F2C_CVODE_vecS;
+extern N_Vector F2C_CVODE_vecB;
+extern N_Vector F2C_CVODE_vecQB;
+
+extern N_Vector F2C_IDA_vec;
+extern N_Vector F2C_IDA_vecQ;
+extern N_Vector *F2C_IDA_vecS;
+extern N_Vector F2C_IDA_vecB;
+extern N_Vector F2C_IDA_vecQB;
+
+extern N_Vector F2C_KINSOL_vec;
+
+extern N_Vector F2C_ARKODE_vec;
+
+/* 
+ * Prototypes of exported functions 
+ *
+ * FNV_INITPTS    - initializes pthreads vector operations for main problem
+ * FNV_INITPTS_Q  - initializes pthreads vector operations for quadratures
+ * FNV_INITPTS_S  - initializes pthreads vector operations for sensitivities
+ * FNV_INITPTS_B  - initializes pthreads vector operations for adjoint problem
+ * FNV_INITPTS_QB - initializes pthreads vector operations for adjoint quadratures
+ *
+ */
+
+void FNV_INITPTS(int *code, long int *neq, int *num_threads, int *ier);
+void FNV_INITPTS_Q(int *code, long int *Nq, int *num_threads, int *ier);
+void FNV_INITPTS_S(int *code, int *Ns, int *ier);
+void FNV_INITPTS_B(int *code, long int *NB, int *num_threads, int *ier);
+void FNV_INITPTS_QB(int *code, long int *NqB, int *num_threads, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/nvec_pthreads/nvector_pthreads.c b/src/nvec_pthreads/nvector_pthreads.c
new file mode 100644
index 0000000..a2f6898
--- /dev/null
+++ b/src/nvec_pthreads/nvector_pthreads.c
@@ -0,0 +1,3204 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4869 $
+ * $Date: 2016-08-19 10:34:20 -0700 (Fri, 19 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): David J. Gardner @ LLNL
+ * ----------------------------------------------------------------- 
+ * Acknowledgements: This NVECTOR module is based on the NVECTOR 
+ *                   Serial module by Scott D. Cohen, Alan C. 
+ *                   Hindmarsh, Radu Serban, and Aaron Collier 
+ *                   @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a POSIX Threads (Pthreads)
+ * implementation of the NVECTOR package using a LOCAL array of 
+ * structures to pass data to threads.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <nvector/nvector_pthreads.h>
+#include <sundials/sundials_math.h>
+#include <math.h> /* define NAN */
+
+#define ZERO   RCONST(0.0)
+#define HALF   RCONST(0.5)
+#define ONE    RCONST(1.0)
+#define ONEPT5 RCONST(1.5)
+
+/* Private function prototypes */
+/* z=x */
+static void VCopy_Pthreads(N_Vector x, N_Vector z);
+/* z=x+y */
+static void VSum_Pthreads(N_Vector x, N_Vector y, N_Vector z);
+/* z=x-y */
+static void VDiff_Pthreads(N_Vector x, N_Vector y, N_Vector z);
+/* z=-x */
+static void VNeg_Pthreads(N_Vector x, N_Vector z);
+/* z=c(x+y) */
+static void VScaleSum_Pthreads(realtype c, N_Vector x, N_Vector y, N_Vector z);
+/* z=c(x-y) */
+static void VScaleDiff_Pthreads(realtype c, N_Vector x, N_Vector y, N_Vector z); 
+/* z=ax+y */
+static void VLin1_Pthreads(realtype a, N_Vector x, N_Vector y, N_Vector z);
+/* z=ax-y */
+static void VLin2_Pthreads(realtype a, N_Vector x, N_Vector y, N_Vector z);
+/* y <- ax+y */
+static void Vaxpy_Pthreads(realtype a, N_Vector x, N_Vector y);
+/* x <- ax */
+static void VScaleBy_Pthreads(realtype a, N_Vector x);
+
+/* Pthread companion function prototypes */
+static void *N_VLinearSum_PT(void *thread_data);
+static void *N_VConst_PT(void *thread_data);
+static void *N_VProd_PT(void *thread_data);
+static void *N_VDiv_PT(void *thread_data);
+static void *N_VScale_PT(void *thread_data);
+static void *N_VAbs_PT(void *thread_data);
+static void *N_VInv_PT(void *thread_data);
+static void *N_VAddConst_PT(void *thread_data);
+static void *N_VCompare_PT(void *thread_data);
+static void *VCopy_PT(void *thread_data);
+static void *VSum_PT(void *thread_data);
+static void *VDiff_PT(void *thread_data);
+static void *VNeg_PT(void *thread_data);
+static void *VScaleSum_PT(void *thread_data);
+static void *VScaleDiff_PT(void *thread_data);
+static void *VLin1_PT(void *thread_data);
+static void *VLin2_PT(void *thread_data);
+static void *VScaleBy_PT(void *thread_data);
+static void *Vaxpy_PT(void *thread_data);
+static void *N_VDotProd_PT(void *thread_data);
+static void *N_VMaxNorm_PT(void *thread_data);
+static void *N_VWrmsNorm_PT(void *thread_data);
+static void *N_VMin_PT(void *thread_data);
+static void *N_VWL2Norm_PT(void *thread_data);
+static void *N_VL1Norm_PT(void *thread_data);
+static void *N_VInvTest_PT(void *thread_data);
+static void *N_VWrmsNormMask_PT(void *thread_data);
+static void *N_VConstrMask_PT(void *thread_data);
+static void *N_VMinQuotient_PT(void *thread_data);
+
+/* Function to determine loop values for threads */
+static void N_VSplitLoop(int myid, int *nthreads, long int *N, 
+			 long int *start, long int *end);
+
+/* Function to initialize thread data */
+static void N_VInitThreadData(Pthreads_Data *thread_data);
+
+/*
+ * -----------------------------------------------------------------
+ * exported functions
+ * -----------------------------------------------------------------
+ */
+
+/* ----------------------------------------------------------------
+ * Returns vector type ID. Used to identify vector implementation 
+ * from abstract N_Vector interface.
+ */
+N_Vector_ID N_VGetVectorID_Pthreads(N_Vector v)
+{
+  return SUNDIALS_NVEC_PTHREADS;
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create a new empty vector 
+ */
+
+N_Vector N_VNewEmpty_Pthreads(long int length, int num_threads)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_Pthreads content;
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+  
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+
+  ops->nvgetvectorid     = N_VGetVectorID_Pthreads;
+  ops->nvclone           = N_VClone_Pthreads;
+  ops->nvcloneempty      = N_VCloneEmpty_Pthreads;
+  ops->nvdestroy         = N_VDestroy_Pthreads;
+  ops->nvspace           = N_VSpace_Pthreads;
+  ops->nvgetarraypointer = N_VGetArrayPointer_Pthreads;
+  ops->nvsetarraypointer = N_VSetArrayPointer_Pthreads;
+  ops->nvlinearsum       = N_VLinearSum_Pthreads;
+  ops->nvconst           = N_VConst_Pthreads;
+  ops->nvprod            = N_VProd_Pthreads;
+  ops->nvdiv             = N_VDiv_Pthreads;
+  ops->nvscale           = N_VScale_Pthreads;
+  ops->nvabs             = N_VAbs_Pthreads;
+  ops->nvinv             = N_VInv_Pthreads;
+  ops->nvaddconst        = N_VAddConst_Pthreads;
+  ops->nvdotprod         = N_VDotProd_Pthreads;
+  ops->nvmaxnorm         = N_VMaxNorm_Pthreads;
+  ops->nvwrmsnormmask    = N_VWrmsNormMask_Pthreads;
+  ops->nvwrmsnorm        = N_VWrmsNorm_Pthreads;
+  ops->nvmin             = N_VMin_Pthreads;
+  ops->nvwl2norm         = N_VWL2Norm_Pthreads;
+  ops->nvl1norm          = N_VL1Norm_Pthreads;
+  ops->nvcompare         = N_VCompare_Pthreads;
+  ops->nvinvtest         = N_VInvTest_Pthreads;
+  ops->nvconstrmask      = N_VConstrMask_Pthreads;
+  ops->nvminquotient     = N_VMinQuotient_Pthreads;
+
+  /* Create content */
+  content = NULL;
+  content = (N_VectorContent_Pthreads) malloc(sizeof(struct _N_VectorContent_Pthreads));
+  if (content == NULL) { free(ops); free(v); return(NULL); }
+
+  content->length      = length;
+  content->num_threads = num_threads;
+  content->own_data    = FALSE;
+  content->data        = NULL;
+
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create a new vector 
+ */
+
+N_Vector N_VNew_Pthreads(long int length, int num_threads)
+{
+  N_Vector v;
+  realtype *data;
+
+  v = NULL;
+  v = N_VNewEmpty_Pthreads(length, num_threads);
+  if (v == NULL) return(NULL);
+
+  /* Create data */
+  if (length > 0) {
+
+    /* Allocate memory */
+    data = NULL;
+    data = (realtype *) malloc(length * sizeof(realtype));
+    if(data == NULL) { N_VDestroy_Pthreads(v); return(NULL); }
+
+    /* Attach data */
+    NV_OWN_DATA_PT(v) = TRUE;
+    NV_DATA_PT(v)     = data;
+
+  }
+
+  return(v);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create a vector with user data component 
+ */
+
+N_Vector N_VMake_Pthreads(long int length, int num_threads, realtype *v_data)
+{
+  N_Vector v;
+
+  v = NULL;
+  v = N_VNewEmpty_Pthreads(length, num_threads);
+  if (v == NULL) return(NULL);
+
+  if (length > 0) {
+    /* Attach data */
+    NV_OWN_DATA_PT(v) = FALSE;
+    NV_DATA_PT(v)     = v_data;
+  }
+
+  return(v);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create an array of new vectors. 
+ */
+
+N_Vector *N_VCloneVectorArray_Pthreads(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VClone_Pthreads(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_Pthreads(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create an array of new vectors with NULL data array. 
+ */
+
+N_Vector *N_VCloneVectorArrayEmpty_Pthreads(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VCloneEmpty_Pthreads(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_Pthreads(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to free an array created with N_VCloneVectorArray_Pthreads
+ */
+
+void N_VDestroyVectorArray_Pthreads(N_Vector *vs, int count)
+{
+  int j;
+
+  for (j = 0; j < count; j++) N_VDestroy_Pthreads(vs[j]);
+
+  free(vs); vs = NULL;
+
+  return;
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to return number of vector elements
+ */
+long int N_VGetLength_Pthreads(N_Vector v)
+{
+  return NV_LENGTH_PT(v);
+}
+
+ 
+/* ----------------------------------------------------------------------------
+ * Function to print a vector 
+ */
+ 
+void N_VPrint_Pthreads(N_Vector x)
+{
+  long int i, N;
+  realtype *xd;
+
+  xd = NULL;
+
+  N  = NV_LENGTH_PT(x);
+  xd = NV_DATA_PT(x);
+
+  for (i = 0; i < N; i++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%11.8Lg\n", xd[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%11.8g\n", xd[i]);
+#else
+    printf("%11.8g\n", xd[i]);
+#endif
+  }
+  printf("\n");
+
+  return;
+}
+
+/*
+ * -----------------------------------------------------------------
+ * implementation of vector operations
+ * -----------------------------------------------------------------
+ */
+
+/* ----------------------------------------------------------------------------
+ * Create new vector from existing vector without attaching data
+ */
+
+N_Vector N_VCloneEmpty_Pthreads(N_Vector w)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_Pthreads content;
+
+  if (w == NULL) return(NULL);
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+  
+  ops->nvgetvectorid     = w->ops->nvgetvectorid;
+  ops->nvclone           = w->ops->nvclone;
+  ops->nvcloneempty      = w->ops->nvcloneempty;
+  ops->nvdestroy         = w->ops->nvdestroy;
+  ops->nvspace           = w->ops->nvspace;
+  ops->nvgetarraypointer = w->ops->nvgetarraypointer;
+  ops->nvsetarraypointer = w->ops->nvsetarraypointer;
+  ops->nvlinearsum       = w->ops->nvlinearsum;
+  ops->nvconst           = w->ops->nvconst;  
+  ops->nvprod            = w->ops->nvprod;   
+  ops->nvdiv             = w->ops->nvdiv;
+  ops->nvscale           = w->ops->nvscale; 
+  ops->nvabs             = w->ops->nvabs;
+  ops->nvinv             = w->ops->nvinv;
+  ops->nvaddconst        = w->ops->nvaddconst;
+  ops->nvdotprod         = w->ops->nvdotprod;
+  ops->nvmaxnorm         = w->ops->nvmaxnorm;
+  ops->nvwrmsnormmask    = w->ops->nvwrmsnormmask;
+  ops->nvwrmsnorm        = w->ops->nvwrmsnorm;
+  ops->nvmin             = w->ops->nvmin;
+  ops->nvwl2norm         = w->ops->nvwl2norm;
+  ops->nvl1norm          = w->ops->nvl1norm;
+  ops->nvcompare         = w->ops->nvcompare;    
+  ops->nvinvtest         = w->ops->nvinvtest;
+  ops->nvconstrmask      = w->ops->nvconstrmask;
+  ops->nvminquotient     = w->ops->nvminquotient;
+
+  /* Create content */
+  content = NULL;
+  content = (N_VectorContent_Pthreads) malloc(sizeof(struct _N_VectorContent_Pthreads));
+  if (content == NULL) { free(ops); free(v); return(NULL); }
+
+  content->length      = NV_LENGTH_PT(w);
+  content->num_threads = NV_NUM_THREADS_PT(w);
+  content->own_data    = FALSE;
+  content->data        = NULL;
+
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Create new vector from existing vector and attach data
+ */
+
+N_Vector N_VClone_Pthreads(N_Vector w)
+{
+  N_Vector v;
+  realtype *data;
+  long int length;
+
+  v = NULL;
+  v = N_VCloneEmpty_Pthreads(w);
+  if (v == NULL) return(NULL);
+
+  length = NV_LENGTH_PT(w);
+
+  /* Create data */
+  if (length > 0) {
+
+    /* Allocate memory */
+    data = NULL;
+    data = (realtype *) malloc(length * sizeof(realtype));
+    if(data == NULL) { N_VDestroy_Pthreads(v); return(NULL); }
+
+    /* Attach data */
+    NV_OWN_DATA_PT(v) = TRUE;
+    NV_DATA_PT(v)     = data;
+
+  }
+
+  return(v);
+}
+
+/* ----------------------------------------------------------------------------
+ * Destroy vector and free vector memory
+ */
+
+void N_VDestroy_Pthreads(N_Vector v)
+{
+  if (NV_OWN_DATA_PT(v) == TRUE) {
+    free(NV_DATA_PT(v));
+    NV_DATA_PT(v) = NULL;
+  }
+  free(v->content); v->content = NULL;
+  free(v->ops); v->ops = NULL;
+  free(v); v = NULL;
+
+  return;
+}
+
+/* ----------------------------------------------------------------------------
+ * Get storage requirement for vector
+ */
+
+void N_VSpace_Pthreads(N_Vector v, long int *lrw, long int *liw)
+{
+  *lrw = NV_LENGTH_PT(v);
+  *liw = 1;
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Get vector data pointer
+ */
+
+realtype *N_VGetArrayPointer_Pthreads(N_Vector v)
+{
+  return((realtype *) NV_DATA_PT(v));
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Set vector data pointer
+ */
+
+void N_VSetArrayPointer_Pthreads(realtype *v_data, N_Vector v)
+{
+  if (NV_LENGTH_PT(v) > 0) NV_DATA_PT(v) = v_data;
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute linear combination z[i] = a*x[i]+b*y[i]
+ */
+
+void N_VLinearSum_Pthreads(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z)
+{
+  realtype c;
+  N_Vector v1, v2;
+  booleantype test;
+
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+
+  pthread_attr_t attr;
+
+  if ((b == ONE) && (z == y)) {    /* BLAS usage: axpy y <- ax+y */
+    Vaxpy_Pthreads(a,x,y);
+    return;
+  }
+
+  if ((a == ONE) && (z == x)) {    /* BLAS usage: axpy x <- by+x */
+    Vaxpy_Pthreads(b,y,x);
+    return;
+  }
+
+  /* Case: a == b == 1.0 */
+
+  if ((a == ONE) && (b == ONE)) {
+    VSum_Pthreads(x, y, z);
+    return;
+  }
+
+  /* Cases: (1) a == 1.0, b = -1.0, (2) a == -1.0, b == 1.0 */
+
+  if ((test = ((a == ONE) && (b == -ONE))) || ((a == -ONE) && (b == ONE))) {
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VDiff_Pthreads(v2, v1, z);
+    return;
+  }
+
+  /* Cases: (1) a == 1.0, b == other or 0.0, (2) a == other or 0.0, b == 1.0 */
+  /* if a or b is 0.0, then user should have called N_VScale */
+
+  if ((test = (a == ONE)) || (b == ONE)) {
+    c  = test ? b : a;
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VLin1_Pthreads(c, v1, v2, z);
+    return;
+  }
+
+  /* Cases: (1) a == -1.0, b != 1.0, (2) a != 1.0, b == -1.0 */
+
+  if ((test = (a == -ONE)) || (b == -ONE)) {
+    c = test ? b : a;
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VLin2_Pthreads(c, v1, v2, z);
+    return;
+  }
+
+  /* Case: a == b */
+  /* catches case both a and b are 0.0 - user should have called N_VConst */
+
+  if (a == b) {
+    VScaleSum_Pthreads(a, x, y, z);
+    return;
+  }
+
+  /* Case: a == -b */
+
+  if (a == -b) {
+    VScaleDiff_Pthreads(a, x, y, z);
+    return;
+  }
+
+  /* Do all cases not handled above:
+     (1) a == other, b == 0.0 - user should have called N_VScale
+     (2) a == 0.0, b == other - user should have called N_VScale
+     (3) a,b == other, a !=b, a != -b */
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].c1 = a;
+    thread_data[i].c2 = b;
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+    thread_data[i].v3 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VLinearSum_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VLinearSum
+ */
+
+static void *N_VLinearSum_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype a, b;
+  realtype *xd, *yd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  a  = my_data->c1;  
+  b  = my_data->c2; 
+  xd = my_data->v1;
+  yd = my_data->v2;
+  zd = my_data->v3;
+
+  start = my_data->start;
+  end   = my_data->end;
+  
+  /* compute linear sum */
+  for (i = start; i < end; i++){
+    zd[i] = (a*xd[i])+(b*yd[i]);
+  }
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Assigns constant value to all vector elements, z[i] = c
+ */
+
+void N_VConst_Pthreads(realtype c, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+
+  pthread_attr_t attr;
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(z);
+  nthreads     = NV_NUM_THREADS_PT(z);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+    
+    /* pack thread data */
+    thread_data[i].c1 = c;
+    thread_data[i].v1 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VConst_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VConst
+ */
+
+static void *N_VConst_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype c;
+  realtype *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  c  = my_data->c1;  
+  zd = my_data->v1;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* assign constant values */
+  for (i = start; i < end; i++)
+    zd[i] = c;
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise product z[i] = x[i]*y[i]
+ */
+
+void N_VProd_Pthreads(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+    thread_data[i].v3 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VProd_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and exit */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VProd
+ */
+
+static void *N_VProd_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *yd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  yd = my_data->v2;
+  zd = my_data->v3;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute componentwise product */
+  for (i = start; i < end; i++)
+    zd[i] = xd[i]*yd[i];
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise division z[i] = x[i]/y[i]
+ */
+
+void N_VDiv_Pthreads(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+    thread_data[i].v3 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VDiv_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VDiv
+ */
+
+static void *N_VDiv_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *yd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  yd = my_data->v2;
+  zd = my_data->v3;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute componentwise division */
+  for (i = start; i < end; i++)
+    zd[i] = xd[i]/yd[i];
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute scaler multiplication z[i] = c*x[i]
+ */
+
+void N_VScale_Pthreads(realtype c, N_Vector x, N_Vector z)
+{
+  if (z == x) {  /* BLAS usage: scale x <- cx */
+    VScaleBy_Pthreads(c, x);
+    return;
+  }
+
+  if (c == ONE) {
+    VCopy_Pthreads(x, z);
+  } 
+  else if (c == -ONE) {
+    VNeg_Pthreads(x, z);
+  } 
+  else {      
+      long int      N;
+      int           i, nthreads;
+      pthread_t     *threads;
+      Pthreads_Data *thread_data;
+      pthread_attr_t attr;
+
+      /* allocate threads and thread data structs */     
+      N            = NV_LENGTH_PT(x);
+      nthreads     = NV_NUM_THREADS_PT(x);
+      threads      = malloc(nthreads*sizeof(pthread_t));
+      thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+      
+      /* set thread attributes */
+      pthread_attr_init(&attr);
+      pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+            
+      for (i=0; i<nthreads; i++) {
+	/* initialize thread data */
+	N_VInitThreadData(&thread_data[i]);    
+
+	/* compute start and end loop index for thread */
+	N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+	
+	/* pack thread data */
+	thread_data[i].c1 = c;
+	thread_data[i].v1 = NV_DATA_PT(x);
+	thread_data[i].v2 = NV_DATA_PT(z); 
+	
+	/* create threads and call pthread companion function */
+	pthread_create(&threads[i], &attr, N_VScale_PT, (void *) &thread_data[i]);
+      }
+      
+      /* wait for all threads to finish */ 
+      for (i=0; i<nthreads; i++) {
+	pthread_join(threads[i], NULL);
+      }
+      
+      /* clean up */
+      pthread_attr_destroy(&attr);
+      free(threads);
+      free(thread_data);
+  }
+  
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VScale
+ */
+
+static void *N_VScale_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype c;
+  realtype *xd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  c  = my_data->c1;  
+  xd = my_data->v1;
+  zd = my_data->v2;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute scaler multiplication */
+  for (i = start; i < end; i++)
+    zd[i] = c*xd[i];
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute absolute value of vector components z[i] = SUNRabs(x[i])
+ */
+
+void N_VAbs_Pthreads(N_Vector x, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VAbs_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VAbs
+ */
+
+static void *N_VAbs_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  zd = my_data->v2;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute absolute value of components */
+  for (i = start; i < end; i++)
+    zd[i] = SUNRabs(xd[i]);
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise inverse z[i] = 1 / x[i]
+ */
+
+void N_VInv_Pthreads(N_Vector x, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VInv_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VInv
+ */
+
+static void *N_VInv_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  zd = my_data->v2;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute componentwise inverse */
+  for (i = start; i < end; i++)
+    zd[i] = ONE/xd[i];
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise addition of a scaler to a vector z[i] = x[i] + b
+ */
+
+void N_VAddConst_Pthreads(N_Vector x, realtype b, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].c1 = b;
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VAddConst_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VAddConst
+ */
+
+static void *N_VAddConst_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype b;
+  realtype *xd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  b  = my_data->c1; 
+  xd = my_data->v1;
+  zd = my_data->v2;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute componentwise constant addition */
+  for (i = start; i < end; i++)
+    zd[i] = xd[i] + b;
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes the dot product of two vectors, a = sum(x[i]*y[i])
+ */
+
+realtype N_VDotProd_Pthreads(N_Vector x, N_Vector y)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  realtype      sum = ZERO;
+  pthread_attr_t attr;
+  pthread_mutex_t global_mutex;  
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  /* lock for reduction */
+  pthread_mutex_init(&global_mutex, NULL);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+    thread_data[i].global_val   = ∑
+    thread_data[i].global_mutex = &global_mutex;
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VDotProd_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  pthread_mutex_destroy(&global_mutex);
+  free(threads);
+  free(thread_data);
+  
+  return(sum);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VDotProd
+ */
+
+static void *N_VDotProd_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *yd;
+  realtype local_sum, *global_sum;
+  Pthreads_Data *my_data;
+  pthread_mutex_t *global_mutex;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  yd = my_data->v2;
+  
+  global_sum   = my_data->global_val;
+  global_mutex = my_data->global_mutex;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute dot product */
+  local_sum = ZERO;
+  for (i = start; i < end; i++)
+    local_sum += xd[i] * yd[i];
+  
+  /* update global sum */
+  pthread_mutex_lock(global_mutex);
+  *global_sum += local_sum;
+  pthread_mutex_unlock(global_mutex);
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes max norm of the vector 
+ */
+
+realtype N_VMaxNorm_Pthreads(N_Vector x)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  realtype      max = ZERO;
+  pthread_attr_t attr;
+  pthread_mutex_t global_mutex;  
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  /* lock for reduction */
+  pthread_mutex_init(&global_mutex, NULL);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].global_val   = &max;
+    thread_data[i].global_mutex = &global_mutex;
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VMaxNorm_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  pthread_mutex_destroy(&global_mutex);
+  free(threads);
+  free(thread_data);
+  
+  return(max);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VMaxNorm
+ */
+
+static void *N_VMaxNorm_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd;
+  realtype local_max, *global_max;
+  Pthreads_Data *my_data;
+  pthread_mutex_t *global_mutex;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  
+  global_max   = my_data->global_val;
+  global_mutex = my_data->global_mutex;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* find local max */
+  local_max = ZERO;
+  for (i = start; i < end; i++)
+    if (SUNRabs(xd[i]) > local_max) local_max = SUNRabs(xd[i]);
+
+  /* update global max */
+  pthread_mutex_lock(global_mutex);
+  if (local_max > *global_max) {
+    *global_max = local_max;
+  }
+  pthread_mutex_unlock(global_mutex);
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes weighted root mean square norm of a vector 
+ */
+
+realtype N_VWrmsNorm_Pthreads(N_Vector x, N_Vector w)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  realtype      sum = ZERO;
+  pthread_attr_t attr;
+  pthread_mutex_t global_mutex;  
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  /* lock for reduction */
+  pthread_mutex_init(&global_mutex, NULL);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(w);
+    thread_data[i].global_val   = ∑
+    thread_data[i].global_mutex = &global_mutex;
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VWrmsNorm_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  pthread_mutex_destroy(&global_mutex);
+  free(threads);
+  free(thread_data);
+  
+  return(SUNRsqrt(sum/N));
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VWrmsNorm
+ */
+
+static void *N_VWrmsNorm_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *wd;
+  realtype local_sum, *global_sum;
+  Pthreads_Data *my_data;
+  pthread_mutex_t *global_mutex;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  wd = my_data->v2;
+  
+  global_sum   = my_data->global_val;
+  global_mutex = my_data->global_mutex;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute wrms norm */
+  local_sum = ZERO;
+  for (i = start; i < end; i++)
+    local_sum += SUNSQR(xd[i] * wd[i]);
+
+  /* update global sum */
+  pthread_mutex_lock(global_mutex);
+  *global_sum += local_sum;
+  pthread_mutex_unlock(global_mutex);
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes weighted root mean square norm of a masked vector 
+ */
+
+realtype N_VWrmsNormMask_Pthreads(N_Vector x, N_Vector w, N_Vector id)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  realtype      sum = ZERO;
+  pthread_attr_t attr;
+  pthread_mutex_t global_mutex;  
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  /* lock for reduction */
+  pthread_mutex_init(&global_mutex, NULL);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(w);
+    thread_data[i].v3 = NV_DATA_PT(id);
+    thread_data[i].global_val   = ∑
+    thread_data[i].global_mutex = &global_mutex;
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VWrmsNormMask_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  pthread_mutex_destroy(&global_mutex);
+  free(threads);
+  free(thread_data);
+  
+  return(SUNRsqrt(sum/N));
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VWrmsNormMask
+ */
+
+static void *N_VWrmsNormMask_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *wd, *idd;
+  realtype local_sum, *global_sum;
+  Pthreads_Data *my_data;
+  pthread_mutex_t *global_mutex;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd  = my_data->v1;
+  wd  = my_data->v2;
+  idd = my_data->v3;
+  
+  global_sum   = my_data->global_val;
+  global_mutex = my_data->global_mutex;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute wrms norm with mask */
+  local_sum = ZERO;
+  for (i = start; i < end; i++) {
+    if (idd[i] > ZERO)
+      local_sum += SUNSQR(xd[i]*wd[i]);
+  }
+
+  /* update global sum */
+  pthread_mutex_lock(global_mutex);
+  *global_sum += local_sum;
+  pthread_mutex_unlock(global_mutex);
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Finds the minimun component of a vector 
+ */
+
+realtype N_VMin_Pthreads(N_Vector x)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  realtype      min;
+  pthread_attr_t attr;
+  pthread_mutex_t global_mutex;  
+
+  /* initialize global min */
+  min = NV_Ith_PT(x,0);
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  /* lock for reduction */
+  pthread_mutex_init(&global_mutex, NULL);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].global_val   = &min;
+    thread_data[i].global_mutex = &global_mutex;
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VMin_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  pthread_mutex_destroy(&global_mutex);
+  free(threads);
+  free(thread_data);
+  
+  return(min);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VMin
+ */
+
+static void *N_VMin_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd;
+  realtype local_min, *global_min;
+  Pthreads_Data *my_data;
+  pthread_mutex_t *global_mutex;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  
+  global_min   = my_data->global_val;
+  global_mutex = my_data->global_mutex;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* find local min */
+  local_min = *global_min;
+  for (i = start; i < end; i++) {
+    if (xd[i] < local_min) 
+      local_min = xd[i];
+  }
+
+  /* update global min */
+  pthread_mutex_lock(global_mutex);
+  if (local_min < *global_min)
+    *global_min = local_min;
+  pthread_mutex_unlock(global_mutex);
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes weighted L2 norm of a vector
+ */
+
+realtype N_VWL2Norm_Pthreads(N_Vector x, N_Vector w)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  realtype      sum = ZERO;
+  pthread_attr_t attr;
+  pthread_mutex_t global_mutex;  
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  /* lock for reduction */
+  pthread_mutex_init(&global_mutex, NULL);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(w);
+    thread_data[i].global_val   = ∑
+    thread_data[i].global_mutex = &global_mutex;
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VWL2Norm_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  pthread_mutex_destroy(&global_mutex);
+  free(threads);
+  free(thread_data);
+    
+  return(SUNRsqrt(sum));
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VWL2Norm
+ */
+
+static void *N_VWL2Norm_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *wd;
+  realtype local_sum, *global_sum;
+  Pthreads_Data *my_data;
+  pthread_mutex_t *global_mutex;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  wd = my_data->v2;
+  
+  global_sum   = my_data->global_val;
+  global_mutex = my_data->global_mutex;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute WL2 norm */
+  local_sum = ZERO;
+  for (i = start; i < end; i++)
+    local_sum += SUNSQR(xd[i]*wd[i]);
+
+  /* update global sum */
+  pthread_mutex_lock(global_mutex);
+  *global_sum += local_sum;
+  pthread_mutex_unlock(global_mutex);
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Computes L1 norm of a vector
+ */
+
+realtype N_VL1Norm_Pthreads(N_Vector x)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  realtype      sum = ZERO;
+  pthread_attr_t attr;
+  pthread_mutex_t global_mutex;  
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  /* lock for reduction */
+  pthread_mutex_init(&global_mutex, NULL);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].global_val   = ∑
+    thread_data[i].global_mutex = &global_mutex;
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VL1Norm_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  pthread_mutex_destroy(&global_mutex);
+  free(threads);
+  free(thread_data);
+  
+  return(sum);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VL1Norm
+ */
+
+static void *N_VL1Norm_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd;
+  realtype local_sum, *global_sum;
+  Pthreads_Data *my_data;
+  pthread_mutex_t *global_mutex;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  
+  global_sum   = my_data->global_val;
+  global_mutex = my_data->global_mutex;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute L1 norm */
+  local_sum = ZERO;
+  for (i = start; i < end; i++)
+    local_sum += SUNRabs(xd[i]);
+
+  /* update global sum */
+  pthread_mutex_lock(global_mutex);
+  *global_sum += local_sum;
+  pthread_mutex_unlock(global_mutex);
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compare vector component values to a scaler   
+ */
+
+void N_VCompare_Pthreads(realtype c, N_Vector x, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].c1  = c;
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(z);
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VCompare_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VCompare
+ */
+
+static void *N_VCompare_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype c;
+  realtype *xd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  c  = my_data->c1;  
+  xd = my_data->v1;
+  zd = my_data->v2;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compare component to scaler */
+  for (i = start; i < end; i++)
+    zd[i] = (SUNRabs(xd[i]) >= c) ? ONE : ZERO;
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute componentwise inverse z[i] = ONE/x[i] and check if x[i] == ZERO
+ */
+
+booleantype N_VInvTest_Pthreads(N_Vector x, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  realtype      val = ZERO;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(z);
+    thread_data[i].global_val = &val;
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VInvTest_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  if (val > ZERO)
+    return (FALSE);
+  else
+    return (TRUE);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VInvTest
+ */
+
+static void *N_VInvTest_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *zd;
+  realtype local_val, *global_val;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  zd = my_data->v2;
+  
+  global_val = my_data->global_val;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute inverse with check for divide by ZERO */
+  local_val = ZERO;
+  for (i = start; i < end; i++) {
+    if (xd[i] == ZERO) 
+      local_val = ONE;
+    else
+      zd[i] = ONE/xd[i];
+  }
+
+  /* update global val */
+  if (local_val > ZERO) {
+    *global_val = local_val;
+  }
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute constraint mask of a vector 
+ */
+
+booleantype N_VConstrMask_Pthreads(N_Vector c, N_Vector x, N_Vector m)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  realtype      val = ZERO;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(c);
+    thread_data[i].v2 = NV_DATA_PT(x);
+    thread_data[i].v3 = NV_DATA_PT(m);
+    thread_data[i].global_val = &val;
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VConstrMask_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  if (val > ZERO)
+    return(FALSE);
+  else 
+    return(TRUE);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VConstrMask
+ */
+
+static void *N_VConstrMask_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *cd, *xd, *md;
+  realtype local_val, *global_val;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  cd = my_data->v1;
+  xd = my_data->v2;
+  md = my_data->v3;
+  
+  global_val = my_data->global_val;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute constraint mask */
+  local_val = ZERO;
+  for (i = start; i < end; i++) {
+    md[i] = ZERO;
+    
+    /* c[i] = 0, do nothing */
+    if (cd[i] == ZERO) 
+      continue;
+
+    /* c[i] = +/- 2, check x[i] > or < 0 */
+    if (cd[i] > ONEPT5 || cd[i] < -ONEPT5) {
+      if (xd[i]*cd[i] <= ZERO) {
+	local_val = ONE; 
+	md[i] = ONE;
+      }
+      continue;
+    }
+
+    /* c[i] = +/- 1, check x[i] >= or <= 0 */
+    if (cd[i] > HALF || cd[i] < -HALF) {
+      if (xd[i]*cd[i] < ZERO) {
+	local_val = ONE; 
+	md[i] = ONE;
+      }
+    }
+  }
+
+  /* update global val */
+  if (local_val > ZERO) {
+    *global_val = local_val;
+  }
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute minimum componentwise quotient 
+ */
+
+realtype N_VMinQuotient_Pthreads(N_Vector num, N_Vector denom)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  realtype      min = BIG_REAL;
+  pthread_attr_t attr;
+  pthread_mutex_t global_mutex;  
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(num);
+  nthreads     = NV_NUM_THREADS_PT(num);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  /* lock for reduction */
+  pthread_mutex_init(&global_mutex, NULL);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(num);
+    thread_data[i].v2 = NV_DATA_PT(denom);
+    thread_data[i].global_val   = &min;
+    thread_data[i].global_mutex = &global_mutex;
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, N_VMinQuotient_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  pthread_mutex_destroy(&global_mutex);
+  free(threads);
+  free(thread_data);
+
+  return(min);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to N_VConstrMask
+ */
+
+static void *N_VMinQuotient_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *nd, *dd;
+  realtype local_min, *global_min;
+  Pthreads_Data *my_data;
+  pthread_mutex_t *global_mutex;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  nd = my_data->v1;
+  dd = my_data->v2;
+  
+  global_min   = my_data->global_val;
+  global_mutex = my_data->global_mutex;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute minimum quotient */
+  local_min = BIG_REAL;
+  for (i = start; i < end; i++) {
+    if (dd[i] == ZERO)
+      continue;
+    local_min = SUNMIN(local_min, nd[i]/dd[i]);
+  }
+
+  /* update global min */
+  pthread_mutex_lock(global_mutex);
+  if (local_min < *global_min)
+    *global_min = local_min;
+  pthread_mutex_unlock(global_mutex);
+ 
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/*
+ * -----------------------------------------------------------------
+ * private functions
+ * -----------------------------------------------------------------
+ */
+
+
+/* ----------------------------------------------------------------------------
+ * Copy vector components into second vector   
+ */
+
+static void VCopy_Pthreads(N_Vector x, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, VCopy_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to VCopy
+ */
+
+static void *VCopy_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  zd = my_data->v2;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* copy vector components */
+  for (i = start; i < end; i++)
+    zd[i] = xd[i];
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute vector sum    
+ */
+
+static void VSum_Pthreads(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+    thread_data[i].v3 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, VSum_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to VSum
+ */
+
+static void *VSum_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *yd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  yd = my_data->v2;
+  zd = my_data->v3;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute vector sum */
+  for (i = start; i < end; i++)
+    zd[i] = xd[i] + yd[i];
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute vector difference   
+ */
+
+static void VDiff_Pthreads(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+    thread_data[i].v3 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, VDiff_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to VDiff
+ */
+
+static void *VDiff_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *yd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  yd = my_data->v2;
+  zd = my_data->v3;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute vector difference */
+  for (i = start; i < end; i++)
+    zd[i] = xd[i] - yd[i];
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute the negative of a vector   
+ */
+
+static void VNeg_Pthreads(N_Vector x, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(z);
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, VNeg_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to VNeg
+ */
+
+static void *VNeg_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype *xd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  xd = my_data->v1;
+  zd = my_data->v2;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute negative of vector */
+  for (i = start; i < end; i++)
+    zd[i] = -xd[i];
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute scaled vector sum    
+ */
+
+static void VScaleSum_Pthreads(realtype c, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].c1 = c;
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+    thread_data[i].v3 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, VScaleSum_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to VScaleSum
+ */
+
+static void *VScaleSum_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype c;
+  realtype *xd, *yd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  c  = my_data->c1;  
+  xd = my_data->v1;
+  yd = my_data->v2;
+  zd = my_data->v3;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute scaled vector sum */
+  for (i = start; i < end; i++)
+    zd[i] = c*(xd[i] + yd[i]);
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute scaled vector difference
+ */
+
+static void VScaleDiff_Pthreads(realtype c, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].c1 = c;
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+    thread_data[i].v3 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, VScaleDiff_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to VScaleDiff
+ */
+
+static void *VScaleDiff_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype c;
+  realtype *xd, *yd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  c  = my_data->c1;  
+  xd = my_data->v1;
+  yd = my_data->v2;
+  zd = my_data->v3;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute scaled vector difference */
+  for (i = start; i < end; i++)
+    zd[i] = c*(xd[i] - yd[i]);
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute vector sum z[i] = a*x[i]+y[i]    
+ */
+
+static void VLin1_Pthreads(realtype a, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].c1 = a;
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+    thread_data[i].v3 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, VLin1_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to VLin1
+ */
+
+static void *VLin1_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype a;
+  realtype *xd, *yd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  a  = my_data->c1;  
+  xd = my_data->v1;
+  yd = my_data->v2;
+  zd = my_data->v3;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute vector sum */
+  for (i = start; i < end; i++)
+    zd[i] = (a*xd[i]) + yd[i];
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute vector difference z[i] = a*x[i]-y[i]    
+ */
+
+static void VLin2_Pthreads(realtype a, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].c1 = a;
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+    thread_data[i].v3 = NV_DATA_PT(z); 
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, VLin2_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to VLin2
+ */
+
+static void *VLin2_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype a;
+  realtype *xd, *yd, *zd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  a  = my_data->c1;  
+  xd = my_data->v1;
+  yd = my_data->v2;
+  zd = my_data->v3;
+
+  start = my_data->start;
+  end   = my_data->end;
+  
+  /* compute vector difference */
+  for (i = start; i < end; i++)
+    zd[i] = (a*xd[i]) - yd[i];
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute special cases of linear sum
+ */
+
+static void Vaxpy_Pthreads(realtype a, N_Vector x, N_Vector y)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].c1 = a;
+    thread_data[i].v1 = NV_DATA_PT(x);
+    thread_data[i].v2 = NV_DATA_PT(y);
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, Vaxpy_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to Vaxpy
+ */
+
+static void *Vaxpy_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype a;
+  realtype *xd, *yd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  a  = my_data->c1;  
+  xd = my_data->v1;
+  yd = my_data->v2;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute axpy */
+  if (a == ONE) {
+    for (i = start; i < end; i++)
+      yd[i] += xd[i];
+
+    /* exit */
+    pthread_exit(NULL);
+  }
+
+  if (a == -ONE) {
+    for (i = start; i < end; i++)
+      yd[i] -= xd[i];
+   
+    /* exit */
+    pthread_exit(NULL);
+  }    
+
+  for (i = start; i < end; i++)
+    yd[i] += a*xd[i];
+
+  /* return */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Compute scaled vector    
+ */
+
+static void VScaleBy_Pthreads(realtype a, N_Vector x)
+{
+  long int      N;
+  int           i, nthreads;
+  pthread_t     *threads;
+  Pthreads_Data *thread_data;
+  pthread_attr_t attr;
+
+  /* allocate threads and thread data structs */ 
+  N            = NV_LENGTH_PT(x);
+  nthreads     = NV_NUM_THREADS_PT(x);
+  threads      = malloc(nthreads*sizeof(pthread_t));
+  thread_data  = (Pthreads_Data *) malloc(nthreads*sizeof(struct _Pthreads_Data));
+
+  /* set thread attributes */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  for (i=0; i<nthreads; i++) {
+    /* initialize thread data */
+    N_VInitThreadData(&thread_data[i]);    
+
+    /* compute start and end loop index for thread */
+    N_VSplitLoop(i, &nthreads, &N, &thread_data[i].start, &thread_data[i].end);
+
+    /* pack thread data */
+    thread_data[i].c1 = a;
+    thread_data[i].v1 = NV_DATA_PT(x);
+
+    /* create threads and call pthread companion function */
+    pthread_create(&threads[i], &attr, VScaleBy_PT, (void *) &thread_data[i]);
+  }
+
+  /* wait for all threads to finish */ 
+  for (i=0; i<nthreads; i++) {
+    pthread_join(threads[i], NULL);
+  }
+
+  /* clean up and return */
+  pthread_attr_destroy(&attr);
+  free(threads);
+  free(thread_data);
+
+  return;
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Pthread companion function to VScaleBy
+ */
+
+static void *VScaleBy_PT(void *thread_data)
+{
+  long int i, start, end;
+  realtype a;
+  realtype *xd;
+  Pthreads_Data *my_data;
+
+  /* extract thread data */
+  my_data = (Pthreads_Data *) thread_data;
+
+  a  = my_data->c1;  
+  xd = my_data->v1;
+
+  start = my_data->start;
+  end   = my_data->end;
+
+  /* compute scaled vector */
+  for (i = start; i < end; i++)
+    xd[i] *= a;
+
+  /* exit */
+  pthread_exit(NULL);
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Determine loop indices for a thread
+ */
+
+static void N_VSplitLoop(int myid, int *nthreads, long int *N, 
+			 long int *start, long int *end)
+{
+  long int q, r; /* quotient and remainder */
+
+  /* work per thread and leftover work */
+  q = *N / *nthreads;
+  r = *N % *nthreads;
+  
+  /* assign work */
+  if (myid < r) {
+    *start = myid * q + myid;
+    *end   = *start + q + 1;
+  }
+  else {
+    *start = myid * q + r;
+    *end   = *start + q; 
+  }
+}
+
+
+/* ----------------------------------------------------------------------------
+ * Initialize values of local thread data struct
+ */
+
+static void N_VInitThreadData(Pthreads_Data *thread_data)
+{
+  thread_data->start = -1;
+  thread_data->end   = -1; 
+
+#if __STDC_VERSION__ >= 199901L
+  thread_data->c1 = NAN;
+  thread_data->c2 = NAN;
+#else
+  thread_data->c1 = ZERO;
+  thread_data->c2 = ZERO;
+#endif
+
+  thread_data->v1 = NULL;
+  thread_data->v2 = NULL;
+  thread_data->v3 = NULL;
+  thread_data->global_val = NULL;
+  thread_data->global_mutex = NULL;
+}
diff --git a/src/nvec_ser/CMakeLists.txt b/src/nvec_ser/CMakeLists.txt
new file mode 100644
index 0000000..de9fb12
--- /dev/null
+++ b/src/nvec_ser/CMakeLists.txt
@@ -0,0 +1,87 @@
+# ---------------------------------------------------------------
+# $Revision: 4075 $
+# $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the serial NVECTOR library
+
+INSTALL(CODE "MESSAGE(\"\nInstall NVECTOR_SERIAL\n\")")
+
+# Add variable nvecserial_SOURCES with the sources for the NVECSERIAL lib
+SET(nvecserial_SOURCES nvector_serial.c)
+
+# Add variable shared_SOURCES with the common SUNDIALS sources which will
+# also be included in the NVECSERIAL library
+SET(shared_SOURCES sundials_math.c)
+ADD_PREFIX(${sundials_SOURCE_DIR}/src/sundials/ shared_SOURCES)
+
+# Add variable nvecserial_HEADERS with the exported NVECSERIAL header files
+SET(nvecserial_HEADERS nvector_serial.h)
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/nvector/ nvecserial_HEADERS)
+
+# Add source directory to include directories
+INCLUDE_DIRECTORIES(.)
+
+# Define C preprocessor flag -DBUILD_SUNDIALS_LIBRARY 
+ADD_DEFINITIONS(-DBUILD_SUNDIALS_LIBRARY)
+
+# Rules for building and installing the static library:
+#  - Add the build target for the NVECSERIAL library
+#  - Set the library name and make sure it is not deleted
+#  - Install the NVECSERIAL library
+IF(BUILD_STATIC_LIBS)
+  ADD_LIBRARY(sundials_nvecserial_static STATIC ${nvecserial_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecserial_static
+    PROPERTIES OUTPUT_NAME sundials_nvecserial CLEAN_DIRECT_OUTPUT 1)
+  INSTALL(TARGETS sundials_nvecserial_static DESTINATION lib)
+ENDIF(BUILD_STATIC_LIBS)
+
+# Rules for building and installing the shared library:
+#  - Add the build target for the NVECSERIAL library
+#  - Set the library name and make sure it is not deleted
+#  - Set VERSION and SOVERSION for shared libraries
+#  - Install the NVECSERIAL library
+IF(BUILD_SHARED_LIBS)
+  ADD_LIBRARY(sundials_nvecserial_shared SHARED ${nvecserial_SOURCES} ${shared_SOURCES})
+  SET_TARGET_PROPERTIES(sundials_nvecserial_shared
+    PROPERTIES OUTPUT_NAME sundials_nvecserial CLEAN_DIRECT_OUTPUT 1)
+  SET_TARGET_PROPERTIES(sundials_nvecserial_shared
+    PROPERTIES VERSION ${nveclib_VERSION} SOVERSION ${nveclib_SOVERSION})
+  INSTALL(TARGETS sundials_nvecserial_shared DESTINATION lib)
+ENDIF(BUILD_SHARED_LIBS)
+
+# Install the NVECSERIAL header files
+INSTALL(FILES ${nvecserial_HEADERS} DESTINATION include/nvector)
+
+# If FCMIX is enabled, build and install the FNVECSERIAL library
+IF(FCMIX_ENABLE AND F77_FOUND)
+  SET(fnvecserial_SOURCES fnvector_serial.c)
+  IF(BUILD_STATIC_LIBS)
+    ADD_LIBRARY(sundials_fnvecserial_static STATIC ${fnvecserial_SOURCES})
+    SET_TARGET_PROPERTIES(sundials_fnvecserial_static
+      PROPERTIES OUTPUT_NAME sundials_fnvecserial CLEAN_DIRECT_OUTPUT 1)
+    INSTALL(TARGETS sundials_fnvecserial_static DESTINATION lib)
+  ENDIF(BUILD_STATIC_LIBS)
+  IF(BUILD_SHARED_LIBS)
+    ADD_LIBRARY(sundials_fnvecserial_shared ${fnvecserial_SOURCES})
+    SET_TARGET_PROPERTIES(sundials_fnvecserial_shared
+      PROPERTIES OUTPUT_NAME sundials_fnvecserial CLEAN_DIRECT_OUTPUT 1)
+    SET_TARGET_PROPERTIES(sundials_fnvecserial_shared 
+      PROPERTIES VERSION ${nveclib_VERSION} SOVERSION ${nveclib_SOVERSION})
+    INSTALL(TARGETS sundials_fnvecserial_shared DESTINATION lib)
+  ENDIF(BUILD_SHARED_LIBS)
+ENDIF(FCMIX_ENABLE AND F77_FOUND)
+
+#
+MESSAGE(STATUS "Added NVECTOR_SERIAL module")
diff --git a/src/nvec_ser/README b/src/nvec_ser/README
new file mode 100644
index 0000000..433ccfa
--- /dev/null
+++ b/src/nvec_ser/README
@@ -0,0 +1,55 @@
+                     NVECTOR_SERIAL
+                 released as part of SUNDIALS
+    SUite of Nonlinear and DIfferential/ALgebraic equation Solvers
+                   Release 2.7.0, September 2016
+
+
+Serial implementation of the NVECTOR module for SUNDIALS. 
+
+NVECTOR_SERIAL defines the content field of N_Vector to be a structure 
+containing the length of the vector, a pointer to the beginning of a 
+contiguous data array, and a boolean flag indicating ownership of the 
+data array.
+
+NVECTOR_SERIAL defines five macros to provide access to the content of 
+a serial N_Vector, several constructors for variables of type N_Vector,
+a constructor for an array of variables of type N_Vector, and destructors
+for N_Vector and N_Vector array.
+
+NVECTOR_SERIAL provides implementations for all vector operations defined
+by the generic NVECTOR module in the table of operations.
+
+
+A. Documentation
+----------------
+
+The serial NVECTOR implementation is fully described in the user documentation 
+for any of the SUNDIALS solvers [1-5]. A PDF file for the user guide for a
+particular solver is available in the solver's subdirectory under doc/.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see /sundials/INSTALL_GUIDE.pdf. 
+For complete installation instructions see any of the user guides.
+
+
+D. Releases
+-----------
+v. 2.7.0 - Sep. 2016
+v. 2.6.2 - Aug. 2015
+v. 2.6.1 - Mar. 2015
+v. 2.6.0 - Mar. 2015
+v. 2.5.0 - Mar. 2012
+v. 2.4.0 - May  2009
+v. 2.3.0 - Nov. 2006
+v. 2.2.0 - Mar. 2006
+v. 2.1.1 - May  2005
+v. 2.1.0 - Apr. 2005
+v. 2.0.2 - Mar. 2005
+v. 2.0.1 - Jan. 2005
+v. 2.0   - Dec. 2004
+v. 1.0   - Jul. 2002 (first SUNDIALS release)
+
+
diff --git a/src/nvec_ser/fnvector_serial.c b/src/nvec_ser/fnvector_serial.c
new file mode 100644
index 0000000..bc6d949
--- /dev/null
+++ b/src/nvec_ser/fnvector_serial.c
@@ -0,0 +1,159 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4075 $
+ * $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file (companion of nvector_serial.h) contains the
+ * implementation needed for the Fortran initialization of serial
+ * vector operations.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fnvector_serial.h"
+
+/* Define global vector variables */
+
+N_Vector F2C_CVODE_vec;
+N_Vector F2C_CVODE_vecQ;
+N_Vector *F2C_CVODE_vecS;
+N_Vector F2C_CVODE_vecB;
+N_Vector F2C_CVODE_vecQB;
+
+N_Vector F2C_IDA_vec;
+N_Vector F2C_IDA_vecQ;
+N_Vector *F2C_IDA_vecS;
+N_Vector F2C_IDA_vecB;
+N_Vector F2C_IDA_vecQB;
+
+N_Vector F2C_KINSOL_vec;
+
+N_Vector F2C_ARKODE_vec;
+
+/* Fortran callable interfaces */
+
+void FNV_INITS(int *code, long int *N, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vec = NULL;
+    F2C_CVODE_vec = N_VNewEmpty_Serial(*N);
+    if (F2C_CVODE_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vec = NULL;
+    F2C_IDA_vec = N_VNewEmpty_Serial(*N);
+    if (F2C_IDA_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_KINSOL:
+    F2C_KINSOL_vec = NULL;
+    F2C_KINSOL_vec = N_VNewEmpty_Serial(*N);
+    if (F2C_KINSOL_vec == NULL) *ier = -1;
+    break;
+  case FCMIX_ARKODE:
+    F2C_ARKODE_vec = NULL;
+    F2C_ARKODE_vec = N_VNewEmpty_Serial(*N);
+    if (F2C_ARKODE_vec == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITS_Q(int *code, long int *Nq, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecQ = NULL;
+    F2C_CVODE_vecQ = N_VNewEmpty_Serial(*Nq);
+    if (F2C_CVODE_vecQ == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecQ = NULL;
+    F2C_IDA_vecQ = N_VNewEmpty_Serial(*Nq);
+    if (F2C_IDA_vecQ == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITS_B(int *code, long int *NB, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecB = NULL;
+    F2C_CVODE_vecB = N_VNewEmpty_Serial(*NB);
+    if (F2C_CVODE_vecB == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecB = NULL;
+    F2C_IDA_vecB = N_VNewEmpty_Serial(*NB);
+    if (F2C_IDA_vecB == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITS_QB(int *code, long int *NqB, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecQB = NULL;
+    F2C_CVODE_vecQB = N_VNewEmpty_Serial(*NqB);
+    if (F2C_CVODE_vecQB == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecQB = NULL;
+    F2C_IDA_vecQB = N_VNewEmpty_Serial(*NqB);
+    if (F2C_IDA_vecQB == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+void FNV_INITS_S(int *code, int *Ns, int *ier)
+{
+  *ier = 0;
+
+  switch(*code) {
+  case FCMIX_CVODE:
+    F2C_CVODE_vecS = NULL;
+    F2C_CVODE_vecS = (N_Vector *) N_VCloneVectorArrayEmpty_Serial(*Ns, F2C_CVODE_vec);
+    if (F2C_CVODE_vecS == NULL) *ier = -1;
+    break;
+  case FCMIX_IDA:
+    F2C_IDA_vecS = NULL;
+    F2C_IDA_vecS = (N_Vector *) N_VCloneVectorArrayEmpty_Serial(*Ns, F2C_IDA_vec);
+    if (F2C_IDA_vecS == NULL) *ier = -1;
+    break;
+  default:
+    *ier = -1;
+  }
+}
+
+
diff --git a/src/nvec_ser/fnvector_serial.h b/src/nvec_ser/fnvector_serial.h
new file mode 100644
index 0000000..98e883e
--- /dev/null
+++ b/src/nvec_ser/fnvector_serial.h
@@ -0,0 +1,95 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4378 $
+ * $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This file (companion of nvector_serial.h) contains the
+ * definitions needed for the initialization of serial
+ * vector operations in Fortran.
+ * -----------------------------------------------------------------
+ */
+
+#ifndef _FNVECTOR_SERIAL_H
+#define _FNVECTOR_SERIAL_H
+
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_fnvector.h>
+
+#ifdef __cplusplus  /* wrapper to enable C++ usage */
+extern "C" {
+#endif
+
+#if defined(SUNDIALS_F77_FUNC)
+#define FNV_INITS    SUNDIALS_F77_FUNC(fnvinits, FNVINITS)
+#else
+#define FNV_INITS    fnvinits_
+#endif
+
+#if defined(SUNDIALS_F77_FUNC_)
+
+#define FNV_INITS_Q  SUNDIALS_F77_FUNC_(fnvinits_q, FNVINITS_Q)
+#define FNV_INITS_S  SUNDIALS_F77_FUNC_(fnvinits_s, FNVINITS_S)
+#define FNV_INITS_B  SUNDIALS_F77_FUNC_(fnvinits_b, FNVINITS_B)
+#define FNV_INITS_QB SUNDIALS_F77_FUNC_(fnvinits_qb, FNVINITS_QB)
+
+#else
+
+#define FNV_INITS_Q  fnvinits_q_
+#define FNV_INITS_S  fnvinits_s_
+#define FNV_INITS_B  fnvinits_b_
+#define FNV_INITS_QB fnvinits_qb_
+
+#endif
+
+/* Declarations of global variables */
+
+extern N_Vector F2C_CVODE_vec;
+extern N_Vector F2C_CVODE_vecQ;
+extern N_Vector *F2C_CVODE_vecS;
+extern N_Vector F2C_CVODE_vecB;
+extern N_Vector F2C_CVODE_vecQB;
+
+extern N_Vector F2C_IDA_vec;
+extern N_Vector F2C_IDA_vecQ;
+extern N_Vector *F2C_IDA_vecS;
+extern N_Vector F2C_IDA_vecB;
+extern N_Vector F2C_IDA_vecQB;
+
+extern N_Vector F2C_KINSOL_vec;
+
+extern N_Vector F2C_ARKODE_vec;
+
+/* 
+ * Prototypes of exported functions 
+ *
+ * FNV_INITS    - initializes serial vector operations for main problem
+ * FNV_INITS_Q  - initializes serial vector operations for quadratures
+ * FNV_INITS_S  - initializes serial vector operations for sensitivities
+ * FNV_INITS_B  - initializes serial vector operations for adjoint problem
+ * FNV_INITS_QB - initializes serial vector operations for adjoint quadratures
+ *
+ */
+
+void FNV_INITS(int *code, long int *neq, int *ier);
+void FNV_INITS_Q(int *code, long int *Nq, int *ier);
+void FNV_INITS_S(int *code, int *Ns, int *ier);
+void FNV_INITS_B(int *code, long int *NB, int *ier);
+void FNV_INITS_QB(int *code, long int *NqB, int *ier);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/nvec_ser/nvector_serial.c b/src/nvec_ser/nvector_serial.c
new file mode 100644
index 0000000..8992480
--- /dev/null
+++ b/src/nvec_ser/nvector_serial.c
@@ -0,0 +1,1063 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4867 $
+ * $Date: 2016-08-19 10:05:14 -0700 (Fri, 19 Aug 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh, Radu Serban,
+ *                and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a serial implementation
+ * of the NVECTOR package.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <nvector/nvector_serial.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO   RCONST(0.0)
+#define HALF   RCONST(0.5)
+#define ONE    RCONST(1.0)
+#define ONEPT5 RCONST(1.5)
+
+/* Private function prototypes */
+/* z=x */
+static void VCopy_Serial(N_Vector x, N_Vector z);
+/* z=x+y */
+static void VSum_Serial(N_Vector x, N_Vector y, N_Vector z);
+/* z=x-y */
+static void VDiff_Serial(N_Vector x, N_Vector y, N_Vector z);
+/* z=-x */
+static void VNeg_Serial(N_Vector x, N_Vector z);
+/* z=c(x+y) */
+static void VScaleSum_Serial(realtype c, N_Vector x, N_Vector y, N_Vector z);
+/* z=c(x-y) */
+static void VScaleDiff_Serial(realtype c, N_Vector x, N_Vector y, N_Vector z); 
+/* z=ax+y */
+static void VLin1_Serial(realtype a, N_Vector x, N_Vector y, N_Vector z);
+/* z=ax-y */
+static void VLin2_Serial(realtype a, N_Vector x, N_Vector y, N_Vector z);
+/* y <- ax+y */
+static void Vaxpy_Serial(realtype a, N_Vector x, N_Vector y);
+/* x <- ax */
+static void VScaleBy_Serial(realtype a, N_Vector x);
+
+/*
+ * -----------------------------------------------------------------
+ * exported functions
+ * -----------------------------------------------------------------
+ */
+
+/* ----------------------------------------------------------------
+ * Returns vector type ID. Used to identify vector implementation 
+ * from abstract N_Vector interface.
+ */
+N_Vector_ID N_VGetVectorID_Serial(N_Vector v)
+{
+  return SUNDIALS_NVEC_SERIAL;
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create a new empty serial vector 
+ */
+
+N_Vector N_VNewEmpty_Serial(long int length)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_Serial content;
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+  
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+
+  ops->nvgetvectorid     = N_VGetVectorID_Serial;
+  ops->nvclone           = N_VClone_Serial;
+  ops->nvcloneempty      = N_VCloneEmpty_Serial;
+  ops->nvdestroy         = N_VDestroy_Serial;
+  ops->nvspace           = N_VSpace_Serial;
+  ops->nvgetarraypointer = N_VGetArrayPointer_Serial;
+  ops->nvsetarraypointer = N_VSetArrayPointer_Serial;
+  ops->nvlinearsum       = N_VLinearSum_Serial;
+  ops->nvconst           = N_VConst_Serial;
+  ops->nvprod            = N_VProd_Serial;
+  ops->nvdiv             = N_VDiv_Serial;
+  ops->nvscale           = N_VScale_Serial;
+  ops->nvabs             = N_VAbs_Serial;
+  ops->nvinv             = N_VInv_Serial;
+  ops->nvaddconst        = N_VAddConst_Serial;
+  ops->nvdotprod         = N_VDotProd_Serial;
+  ops->nvmaxnorm         = N_VMaxNorm_Serial;
+  ops->nvwrmsnormmask    = N_VWrmsNormMask_Serial;
+  ops->nvwrmsnorm        = N_VWrmsNorm_Serial;
+  ops->nvmin             = N_VMin_Serial;
+  ops->nvwl2norm         = N_VWL2Norm_Serial;
+  ops->nvl1norm          = N_VL1Norm_Serial;
+  ops->nvcompare         = N_VCompare_Serial;
+  ops->nvinvtest         = N_VInvTest_Serial;
+  ops->nvconstrmask      = N_VConstrMask_Serial;
+  ops->nvminquotient     = N_VMinQuotient_Serial;
+
+  /* Create content */
+  content = NULL;
+  content = (N_VectorContent_Serial) malloc(sizeof(struct _N_VectorContent_Serial));
+  if (content == NULL) { free(ops); free(v); return(NULL); }
+
+  content->length   = length;
+  content->own_data = FALSE;
+  content->data     = NULL;
+
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create a new serial vector 
+ */
+
+N_Vector N_VNew_Serial(long int length)
+{
+  N_Vector v;
+  realtype *data;
+
+  v = NULL;
+  v = N_VNewEmpty_Serial(length);
+  if (v == NULL) return(NULL);
+
+  /* Create data */
+  if (length > 0) {
+
+    /* Allocate memory */
+    data = NULL;
+    data = (realtype *) malloc(length * sizeof(realtype));
+    if(data == NULL) { N_VDestroy_Serial(v); return(NULL); }
+
+    /* Attach data */
+    NV_OWN_DATA_S(v) = TRUE;
+    NV_DATA_S(v)     = data;
+
+  }
+
+  return(v);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create a serial N_Vector with user data component 
+ */
+
+N_Vector N_VMake_Serial(long int length, realtype *v_data)
+{
+  N_Vector v;
+
+  v = NULL;
+  v = N_VNewEmpty_Serial(length);
+  if (v == NULL) return(NULL);
+
+  if (length > 0) {
+    /* Attach data */
+    NV_OWN_DATA_S(v) = FALSE;
+    NV_DATA_S(v)     = v_data;
+  }
+
+  return(v);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create an array of new serial vectors. 
+ */
+
+N_Vector *N_VCloneVectorArray_Serial(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VClone_Serial(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_Serial(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to create an array of new serial vectors with NULL data array. 
+ */
+
+N_Vector *N_VCloneVectorArrayEmpty_Serial(int count, N_Vector w)
+{
+  N_Vector *vs;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = NULL;
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = NULL;
+    vs[j] = N_VCloneEmpty_Serial(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray_Serial(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to free an array created with N_VCloneVectorArray_Serial
+ */
+
+void N_VDestroyVectorArray_Serial(N_Vector *vs, int count)
+{
+  int j;
+
+  for (j = 0; j < count; j++) N_VDestroy_Serial(vs[j]);
+
+  free(vs); vs = NULL;
+
+  return;
+}
+
+/* ----------------------------------------------------------------------------
+ * Function to return number of vector elements
+ */
+long int N_VGetLength_Serial(N_Vector v)
+{
+  return NV_LENGTH_S(v);
+}
+
+ 
+/* ----------------------------------------------------------------------------
+ * Function to print the a serial vector 
+ */
+ 
+void N_VPrint_Serial(N_Vector x)
+{
+  long int i, N;
+  realtype *xd;
+
+  xd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+
+  for (i = 0; i < N; i++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+    printf("%35.32Lg\n", xd[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+    printf("%19.16g\n", xd[i]);
+#else
+    printf("%11.8g\n", xd[i]);
+#endif
+  }
+  printf("\n");
+
+  return;
+}
+
+/*
+ * -----------------------------------------------------------------
+ * implementation of vector operations
+ * -----------------------------------------------------------------
+ */
+
+N_Vector N_VCloneEmpty_Serial(N_Vector w)
+{
+  N_Vector v;
+  N_Vector_Ops ops;
+  N_VectorContent_Serial content;
+
+  if (w == NULL) return(NULL);
+
+  /* Create vector */
+  v = NULL;
+  v = (N_Vector) malloc(sizeof *v);
+  if (v == NULL) return(NULL);
+
+  /* Create vector operation structure */
+  ops = NULL;
+  ops = (N_Vector_Ops) malloc(sizeof(struct _generic_N_Vector_Ops));
+  if (ops == NULL) { free(v); return(NULL); }
+  
+  ops->nvgetvectorid     = w->ops->nvgetvectorid;
+  ops->nvclone           = w->ops->nvclone;
+  ops->nvcloneempty      = w->ops->nvcloneempty;
+  ops->nvdestroy         = w->ops->nvdestroy;
+  ops->nvspace           = w->ops->nvspace;
+  ops->nvgetarraypointer = w->ops->nvgetarraypointer;
+  ops->nvsetarraypointer = w->ops->nvsetarraypointer;
+  ops->nvlinearsum       = w->ops->nvlinearsum;
+  ops->nvconst           = w->ops->nvconst;  
+  ops->nvprod            = w->ops->nvprod;   
+  ops->nvdiv             = w->ops->nvdiv;
+  ops->nvscale           = w->ops->nvscale; 
+  ops->nvabs             = w->ops->nvabs;
+  ops->nvinv             = w->ops->nvinv;
+  ops->nvaddconst        = w->ops->nvaddconst;
+  ops->nvdotprod         = w->ops->nvdotprod;
+  ops->nvmaxnorm         = w->ops->nvmaxnorm;
+  ops->nvwrmsnormmask    = w->ops->nvwrmsnormmask;
+  ops->nvwrmsnorm        = w->ops->nvwrmsnorm;
+  ops->nvmin             = w->ops->nvmin;
+  ops->nvwl2norm         = w->ops->nvwl2norm;
+  ops->nvl1norm          = w->ops->nvl1norm;
+  ops->nvcompare         = w->ops->nvcompare;    
+  ops->nvinvtest         = w->ops->nvinvtest;
+  ops->nvconstrmask      = w->ops->nvconstrmask;
+  ops->nvminquotient     = w->ops->nvminquotient;
+
+  /* Create content */
+  content = NULL;
+  content = (N_VectorContent_Serial) malloc(sizeof(struct _N_VectorContent_Serial));
+  if (content == NULL) { free(ops); free(v); return(NULL); }
+
+  content->length   = NV_LENGTH_S(w);
+  content->own_data = FALSE;
+  content->data     = NULL;
+
+  /* Attach content and ops */
+  v->content = content;
+  v->ops     = ops;
+
+  return(v);
+}
+
+N_Vector N_VClone_Serial(N_Vector w)
+{
+  N_Vector v;
+  realtype *data;
+  long int length;
+
+  v = NULL;
+  v = N_VCloneEmpty_Serial(w);
+  if (v == NULL) return(NULL);
+
+  length = NV_LENGTH_S(w);
+
+  /* Create data */
+  if (length > 0) {
+
+    /* Allocate memory */
+    data = NULL;
+    data = (realtype *) malloc(length * sizeof(realtype));
+    if(data == NULL) { N_VDestroy_Serial(v); return(NULL); }
+
+    /* Attach data */
+    NV_OWN_DATA_S(v) = TRUE;
+    NV_DATA_S(v)     = data;
+
+  }
+
+  return(v);
+}
+
+void N_VDestroy_Serial(N_Vector v)
+{
+  if (NV_OWN_DATA_S(v) == TRUE) {
+    free(NV_DATA_S(v));
+    NV_DATA_S(v) = NULL;
+  }
+  free(v->content); v->content = NULL;
+  free(v->ops); v->ops = NULL;
+  free(v); v = NULL;
+
+  return;
+}
+
+void N_VSpace_Serial(N_Vector v, long int *lrw, long int *liw)
+{
+  *lrw = NV_LENGTH_S(v);
+  *liw = 1;
+
+  return;
+}
+
+realtype *N_VGetArrayPointer_Serial(N_Vector v)
+{
+  return((realtype *) NV_DATA_S(v));
+}
+
+void N_VSetArrayPointer_Serial(realtype *v_data, N_Vector v)
+{
+  if (NV_LENGTH_S(v) > 0) NV_DATA_S(v) = v_data;
+
+  return;
+}
+
+void N_VLinearSum_Serial(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype c, *xd, *yd, *zd;
+  N_Vector v1, v2;
+  booleantype test;
+
+  xd = yd = zd = NULL;
+
+  if ((b == ONE) && (z == y)) {    /* BLAS usage: axpy y <- ax+y */
+    Vaxpy_Serial(a,x,y);
+    return;
+  }
+
+  if ((a == ONE) && (z == x)) {    /* BLAS usage: axpy x <- by+x */
+    Vaxpy_Serial(b,y,x);
+    return;
+  }
+
+  /* Case: a == b == 1.0 */
+
+  if ((a == ONE) && (b == ONE)) {
+    VSum_Serial(x, y, z);
+    return;
+  }
+
+  /* Cases: (1) a == 1.0, b = -1.0, (2) a == -1.0, b == 1.0 */
+
+  if ((test = ((a == ONE) && (b == -ONE))) || ((a == -ONE) && (b == ONE))) {
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VDiff_Serial(v2, v1, z);
+    return;
+  }
+
+  /* Cases: (1) a == 1.0, b == other or 0.0, (2) a == other or 0.0, b == 1.0 */
+  /* if a or b is 0.0, then user should have called N_VScale */
+
+  if ((test = (a == ONE)) || (b == ONE)) {
+    c  = test ? b : a;
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VLin1_Serial(c, v1, v2, z);
+    return;
+  }
+
+  /* Cases: (1) a == -1.0, b != 1.0, (2) a != 1.0, b == -1.0 */
+
+  if ((test = (a == -ONE)) || (b == -ONE)) {
+    c = test ? b : a;
+    v1 = test ? y : x;
+    v2 = test ? x : y;
+    VLin2_Serial(c, v1, v2, z);
+    return;
+  }
+
+  /* Case: a == b */
+  /* catches case both a and b are 0.0 - user should have called N_VConst */
+
+  if (a == b) {
+    VScaleSum_Serial(a, x, y, z);
+    return;
+  }
+
+  /* Case: a == -b */
+
+  if (a == -b) {
+    VScaleDiff_Serial(a, x, y, z);
+    return;
+  }
+
+  /* Do all cases not handled above:
+     (1) a == other, b == 0.0 - user should have called N_VScale
+     (2) a == 0.0, b == other - user should have called N_VScale
+     (3) a,b == other, a !=b, a != -b */
+  
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])+(b*yd[i]);
+
+  return;
+}
+
+void N_VConst_Serial(realtype c, N_Vector z)
+{
+  long int i, N;
+  realtype *zd;
+
+  zd = NULL;
+
+  N  = NV_LENGTH_S(z);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++) zd[i] = c;
+
+  return;
+}
+
+void N_VProd_Serial(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]*yd[i];
+
+  return;
+}
+
+void N_VDiv_Serial(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]/yd[i];
+
+  return;
+}
+
+void N_VScale_Serial(realtype c, N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  if (z == x) {  /* BLAS usage: scale x <- cx */
+    VScaleBy_Serial(c, x);
+    return;
+  }
+
+  if (c == ONE) {
+    VCopy_Serial(x, z);
+  } else if (c == -ONE) {
+    VNeg_Serial(x, z);
+  } else {
+    N  = NV_LENGTH_S(x);
+    xd = NV_DATA_S(x);
+    zd = NV_DATA_S(z);
+    for (i = 0; i < N; i++) 
+      zd[i] = c*xd[i];
+  }
+
+  return;
+}
+
+void N_VAbs_Serial(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = SUNRabs(xd[i]);
+
+  return;
+}
+
+void N_VInv_Serial(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = ONE/xd[i];
+
+  return;
+}
+
+void N_VAddConst_Serial(N_Vector x, realtype b, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++) 
+    zd[i] = xd[i]+b;
+
+  return;
+}
+
+realtype N_VDotProd_Serial(N_Vector x, N_Vector y)
+{
+  long int i, N;
+  realtype sum, *xd, *yd;
+
+  sum = ZERO;
+  xd = yd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+
+  for (i = 0; i < N; i++)
+    sum += xd[i]*yd[i];
+  
+  return(sum);
+}
+
+realtype N_VMaxNorm_Serial(N_Vector x)
+{
+  long int i, N;
+  realtype max, *xd;
+
+  max = ZERO;
+  xd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+
+  for (i = 0; i < N; i++) {
+    if (SUNRabs(xd[i]) > max) max = SUNRabs(xd[i]);
+  }
+
+  return(max);
+}
+
+realtype N_VWrmsNorm_Serial(N_Vector x, N_Vector w)
+{
+  long int i, N;
+  realtype sum, prodi, *xd, *wd;
+
+  sum = ZERO;
+  xd = wd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  wd = NV_DATA_S(w);
+
+  for (i = 0; i < N; i++) {
+    prodi = xd[i]*wd[i];
+    sum += SUNSQR(prodi);
+  }
+
+  return(SUNRsqrt(sum/N));
+}
+
+realtype N_VWrmsNormMask_Serial(N_Vector x, N_Vector w, N_Vector id)
+{
+  long int i, N;
+  realtype sum, prodi, *xd, *wd, *idd;
+
+  sum = ZERO;
+  xd = wd = idd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd  = NV_DATA_S(x);
+  wd  = NV_DATA_S(w);
+  idd = NV_DATA_S(id);
+
+  for (i = 0; i < N; i++) {
+    if (idd[i] > ZERO) {
+      prodi = xd[i]*wd[i];
+      sum += SUNSQR(prodi);
+    }
+  }
+
+  return(SUNRsqrt(sum / N));
+}
+
+realtype N_VMin_Serial(N_Vector x)
+{
+  long int i, N;
+  realtype min, *xd;
+
+  xd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+
+  min = xd[0];
+
+  for (i = 1; i < N; i++) {
+    if (xd[i] < min) min = xd[i];
+  }
+
+  return(min);
+}
+
+realtype N_VWL2Norm_Serial(N_Vector x, N_Vector w)
+{
+  long int i, N;
+  realtype sum, prodi, *xd, *wd;
+
+  sum = ZERO;
+  xd = wd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  wd = NV_DATA_S(w);
+
+  for (i = 0; i < N; i++) {
+    prodi = xd[i]*wd[i];
+    sum += SUNSQR(prodi);
+  }
+
+  return(SUNRsqrt(sum));
+}
+
+realtype N_VL1Norm_Serial(N_Vector x)
+{
+  long int i, N;
+  realtype sum, *xd;
+
+  sum = ZERO;
+  xd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  
+  for (i = 0; i<N; i++)  
+    sum += SUNRabs(xd[i]);
+
+  return(sum);
+}
+
+void N_VCompare_Serial(realtype c, N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++) {
+    zd[i] = (SUNRabs(xd[i]) >= c) ? ONE : ZERO;
+  }
+
+  return;
+}
+
+booleantype N_VInvTest_Serial(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+  booleantype no_zero_found;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  zd = NV_DATA_S(z);
+
+  no_zero_found = TRUE;
+  for (i = 0; i < N; i++) {
+    if (xd[i] == ZERO) 
+      no_zero_found = FALSE;
+    else
+      zd[i] = ONE/xd[i];
+  }
+
+  return no_zero_found;
+}
+
+booleantype N_VConstrMask_Serial(N_Vector c, N_Vector x, N_Vector m)
+{
+  long int i, N;
+  booleantype test;
+  realtype *cd, *xd, *md;
+
+  cd = xd = md = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  cd = NV_DATA_S(c);
+  md = NV_DATA_S(m);
+
+  test = TRUE;
+
+  for (i = 0; i < N; i++) {
+    md[i] = ZERO;
+    if (cd[i] == ZERO) continue;
+    if (cd[i] > ONEPT5 || cd[i] < -ONEPT5) {
+      if ( xd[i]*cd[i] <= ZERO) { test = FALSE; md[i] = ONE; }
+      continue;
+    }
+    if ( cd[i] > HALF || cd[i] < -HALF) {
+      if (xd[i]*cd[i] < ZERO ) { test = FALSE; md[i] = ONE; }
+    }
+  }
+
+  return(test);
+}
+
+realtype N_VMinQuotient_Serial(N_Vector num, N_Vector denom)
+{
+  booleantype notEvenOnce;
+  long int i, N;
+  realtype *nd, *dd, min;
+
+  nd = dd = NULL;
+
+  N  = NV_LENGTH_S(num);
+  nd = NV_DATA_S(num);
+  dd = NV_DATA_S(denom);
+
+  notEvenOnce = TRUE;
+  min = BIG_REAL;
+
+  for (i = 0; i < N; i++) {
+    if (dd[i] == ZERO) continue;
+    else {
+      if (!notEvenOnce) min = SUNMIN(min, nd[i]/dd[i]);
+      else {
+	min = nd[i]/dd[i];
+        notEvenOnce = FALSE;
+      }
+    }
+  }
+
+  return(min);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * private functions
+ * -----------------------------------------------------------------
+ */
+
+static void VCopy_Serial(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]; 
+
+  return;
+}
+
+static void VSum_Serial(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]+yd[i];
+
+  return;
+}
+
+static void VDiff_Serial(N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = xd[i]-yd[i];
+
+  return;
+}
+
+static void VNeg_Serial(N_Vector x, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *zd;
+
+  xd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  zd = NV_DATA_S(z);
+  
+  for (i = 0; i < N; i++)
+    zd[i] = -xd[i];
+
+  return;
+}
+
+static void VScaleSum_Serial(realtype c, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = c*(xd[i]+yd[i]);
+
+  return;
+}
+
+static void VScaleDiff_Serial(realtype c, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = c*(xd[i]-yd[i]);
+
+  return;
+}
+
+static void VLin1_Serial(realtype a, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])+yd[i];
+
+  return;
+}
+
+static void VLin2_Serial(realtype a, N_Vector x, N_Vector y, N_Vector z)
+{
+  long int i, N;
+  realtype *xd, *yd, *zd;
+
+  xd = yd = zd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+  zd = NV_DATA_S(z);
+
+  for (i = 0; i < N; i++)
+    zd[i] = (a*xd[i])-yd[i];
+
+  return;
+}
+
+static void Vaxpy_Serial(realtype a, N_Vector x, N_Vector y)
+{
+  long int i, N;
+  realtype *xd, *yd;
+
+  xd = yd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+  yd = NV_DATA_S(y);
+
+  if (a == ONE) {
+    for (i = 0; i < N; i++)
+      yd[i] += xd[i];
+    return;
+  }
+
+  if (a == -ONE) {
+    for (i = 0; i < N; i++)
+      yd[i] -= xd[i];
+    return;
+  }    
+
+  for (i = 0; i < N; i++)
+    yd[i] += a*xd[i];
+
+  return;
+}
+
+static void VScaleBy_Serial(realtype a, N_Vector x)
+{
+  long int i, N;
+  realtype *xd;
+
+  xd = NULL;
+
+  N  = NV_LENGTH_S(x);
+  xd = NV_DATA_S(x);
+
+  for (i = 0; i < N; i++)
+    xd[i] *= a;
+
+  return;
+}
diff --git a/src/sundials/CMakeLists.txt b/src/sundials/CMakeLists.txt
new file mode 100644
index 0000000..b01b65f
--- /dev/null
+++ b/src/sundials/CMakeLists.txt
@@ -0,0 +1,53 @@
+# ---------------------------------------------------------------
+# $Revision: 4075 $
+# $Date: 2014-04-24 10:46:58 -0700 (Thu, 24 Apr 2014) $
+# ---------------------------------------------------------------
+# Programmer:  Radu Serban @ LLNL
+# ---------------------------------------------------------------
+# LLNS Copyright Start
+# Copyright (c) 2014, Lawrence Livermore National Security
+# This work was performed under the auspices of the U.S. Department 
+# of Energy by Lawrence Livermore National Laboratory in part under 
+# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+# Produced at the Lawrence Livermore National Laboratory.
+# All rights reserved.
+# For details, see the LICENSE file.
+# LLNS Copyright End
+# ---------------------------------------------------------------
+# CMakeLists.txt file for the generic SUNDIALS modules
+
+# From here we only install the generic SUNDIALS headers. 
+# The implementations themselves are incorporated in the individual SUNDIALS solver libraries.
+
+INSTALL(CODE "MESSAGE(\"\nInstall shared components\n\")")
+
+# Add variable sundials_HEADERS with the exported SUNDIALS header files
+SET(sundials_HEADERS
+  sundials_band.h
+  sundials_dense.h
+  sundials_direct.h
+  sundials_iterative.h
+  sundials_math.h
+  sundials_nvector.h
+  sundials_fnvector.h
+  sundials_pcg.h
+  sundials_sparse.h
+  sundials_spbcgs.h
+  sundials_spfgmr.h
+  sundials_spgmr.h
+  sundials_sptfqmr.h
+  sundials_types.h
+  )
+
+# Add prefix with complete path to the SUNDIALS header files
+ADD_PREFIX(${sundials_SOURCE_DIR}/include/sundials/ sundials_HEADERS)
+
+# Install the SUNDIALS header files
+INSTALL(FILES ${sundials_HEADERS} DESTINATION include/sundials)
+
+# If Blas/Lapack support was enabled, install the Lapack interface headers
+IF(LAPACK_FOUND)
+  SET(sundials_BL_HEADERS sundials_lapack.h)
+  ADD_PREFIX(${sundials_SOURCE_DIR}/include/sundials/ sundials_BL_HEADERS)
+  INSTALL(FILES ${sundials_BL_HEADERS} DESTINATION include/sundials)
+ENDIF(LAPACK_FOUND)
diff --git a/src/sundials/LICENSE b/src/sundials/LICENSE
new file mode 100644
index 0000000..3c9772d
--- /dev/null
+++ b/src/sundials/LICENSE
@@ -0,0 +1,67 @@
+Copyright (c) 2002-2015, Lawrence Livermore National Security. 
+Produced at the Lawrence Livermore National Laboratory.
+Written by S.D. Cohen, A.C. Hindmarsh, D.R. Reynolds, R. Serban, 
+           D. Shumaker, A.G. Taylor, and C.S. Woodward.
+LLNL-CODE-667205    (ARKODE)
+UCRL-CODE-155951    (CVODE)
+UCRL-CODE-155950    (CVODES)
+UCRL-CODE-155952    (IDA)
+UCRL-CODE-237203    (IDAS)
+LLNL-CODE-155953    (KINSOL)
+All rights reserved. 
+
+This file is part of SUNDIALS.  For details, 
+see http://computation.llnl.gov/casc/sundials/main.html
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the disclaimer below.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the disclaimer (as noted below)
+in the documentation and/or other materials provided with the
+distribution.
+
+3. Neither the name of the LLNS/LLNL nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
+LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF 
+ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Additional BSD Notice
+---------------------
+1. This notice is required to be provided under our contract with
+the U.S. Department of Energy (DOE). This work was produced at
+Lawrence Livermore National Laboratory under Contract 
+No. DE-AC52-07NA27344 with the DOE.
+
+2. Neither the United States Government nor Lawrence Livermore 
+National Security, LLC nor any of their employees, makes any warranty, 
+express or implied, or assumes any liability or responsibility for the
+accuracy, completeness, or usefulness of any information, apparatus,
+product, or process disclosed, or represents that its use would not
+infringe privately-owned rights.
+
+3. Also, reference herein to any specific commercial products, process, 
+or services by trade name, trademark, manufacturer or otherwise does 
+not necessarily constitute or imply its endorsement, recommendation, 
+or favoring by the United States Government or Lawrence Livermore 
+National Security, LLC. The views and opinions of authors expressed 
+herein do not necessarily state or reflect those of the United States 
+Government or Lawrence Livermore National Security, LLC, and shall 
+not be used for advertising or product endorsement purposes.
+
diff --git a/src/sundials/README b/src/sundials/README
new file mode 100644
index 0000000..6fcb40a
--- /dev/null
+++ b/src/sundials/README
@@ -0,0 +1,75 @@
+                          SUNDIALS 
+                        Shared Module
+                 Release 2.7.0, Sep 2016
+
+
+The family of solvers referred to as SUNDIALS consists of solvers 
+ARKODE (ODE), CVODE (ODE), CVODES (ODE with sensitivity analysis 
+capabilities), IDA (DAE), IDAS (DAE with sensitivity analysis 
+capabilities), and KINSOL (for nonlinear algebraic systems).
+
+The various solvers of this family share many subordinate modules contained
+in this module:
+- generic NVECTOR module
+- generic linear solver modules (band, dense, lapack, sparse, pcg, spfgmr, spgmr, spbcg, sptfqmr)
+- definitions of SUNDIALS types (realtype, booleantype)
+- common math functions (RpowerI, SUNRpowerR, SUNRsqrt, SUNRabs,...)
+
+
+A. Documentation
+----------------
+All shared submodules are fully described in the user documentation for any of 
+the SUNDIALS solvers [1-6]. A PDF file for the user guide for a particular solver
+is available in the solver's subdirectory under doc/.
+
+
+B. Installation
+---------------
+
+For basic installation instructions see the file /sundials/INSTALL_NOTES. 
+For complete installation instructions see any of the user guides.
+
+
+C. References
+-------------
+
+[1] A. C. Hindmarsh and R. Serban, "User Documentation for CVODE v2.8.2," 
+    LLNL technical report UCRL-MA-208108, Aug 2015.
+
+[2] A. C. Hindmarsh and R. Serban, "User Documentation for CVODES v2.8.2," 
+    LLNL technical report UCRL-MA-208111, Aug 2015.
+
+[3] A. C. Hindmarsh, R. Serban,and A. Collier, "User Documentation for IDA v2.8.2," 
+    LLNL technical report UCRL-MA-208112, Aug 2015.
+
+[4] R. Serban, C. Petra, and A. C. Hindmarsh  "User Documentation for IDAS v1.2.2," 
+    LLNL technical report UCRL-SM-234051, Aug 2015.
+
+[5] A. M. Collier, A. C. Hindmarsh, R. Serban,and C. S. Woodward, "User 
+    Documentation for KINSOL v2.8.2," LLNL technical report UCRL-MA-208116, 
+    Aug 2015.
+
+[6] D. R. Reynolds, "User Documentation for ARKode v1.0.2," LLNL technical report
+    LLNL-SM-668082, Aug 2015.
+
+
+D. Releases
+-----------
+
+v. 2.7.0 - Sep. 2016
+v. 2.6.2 - Aug. 2015
+v. 2.6.1 - Mar. 2015
+v. 2.6.0 - Mar. 2015
+v. 2.5.0 - Mar. 2012
+v. 2.4.0 - May  2009
+v. 2.3.0 - Nov. 2006
+v. 2.2.0 - Mar. 2006
+v. 2.1.1 - May. 2005
+v. 2.1.0 - Apr. 2005
+v. 2.0.2 - Mar. 2005
+v. 2.0.1 - Jan. 2005
+v. 2.0   - Dec. 2004
+v. 1.0   - Jul. 2002 (first SUNDIALS release)
+v. 0.0   - Mar. 2002
+
+
diff --git a/src/sundials/sundials_band.c b/src/sundials/sundials_band.c
new file mode 100644
index 0000000..7349eb7
--- /dev/null
+++ b/src/sundials/sundials_band.c
@@ -0,0 +1,264 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4272 $
+ * $Date: 2014-12-02 11:19:41 -0800 (Tue, 02 Dec 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Alan C. Hindmarsh and Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a generic BAND linear
+ * solver package.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_band.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+#define ROW(i,j,smu) (i-j+smu)
+
+/*
+ * -----------------------------------------------------
+ * Functions working on DlsMat
+ * -----------------------------------------------------
+ */
+
+long int BandGBTRF(DlsMat A, long int *p)
+{
+  return(bandGBTRF(A->cols, A->M, A->mu, A->ml, A->s_mu, p));
+}
+
+void BandGBTRS(DlsMat A, long int *p, realtype *b)
+{
+  bandGBTRS(A->cols, A->M, A->s_mu, A->ml, p, b);
+}
+
+void BandCopy(DlsMat A, DlsMat B, long int copymu, long int copyml)
+{
+  bandCopy(A->cols, B->cols, A->M, A->s_mu, B->s_mu, copymu, copyml);
+}
+
+void BandScale(realtype c, DlsMat A)
+{
+  bandScale(c, A->cols, A->M, A->mu, A->ml, A->s_mu);
+}
+
+void BandMatvec(DlsMat A, realtype *x, realtype *y)
+{
+  bandMatvec(A->cols, x, y, A->M, A->mu, A->ml, A->s_mu);
+}
+
+/*
+ * -----------------------------------------------------
+ * Functions working on realtype**
+ * -----------------------------------------------------
+ */
+
+long int bandGBTRF(realtype **a, long int n, long int mu, long int ml, long int smu, long int *p)
+{
+  long int c, r, num_rows;
+  long int i, j, k, l, storage_l, storage_k, last_col_k, last_row_k;
+  realtype *a_c, *col_k, *diag_k, *sub_diag_k, *col_j, *kptr, *jptr;
+  realtype max, temp, mult, a_kj;
+  booleantype swap;
+
+  /* zero out the first smu - mu rows of the rectangular array a */
+
+  num_rows = smu - mu;
+  if (num_rows > 0) {
+    for (c=0; c < n; c++) {
+      a_c = a[c];
+      for (r=0; r < num_rows; r++) {
+	a_c[r] = ZERO;
+      }
+    }
+  }
+
+  /* k = elimination step number */
+
+  for (k=0; k < n-1; k++, p++) {
+    
+    col_k     = a[k];
+    diag_k    = col_k + smu;
+    sub_diag_k = diag_k + 1;
+    last_row_k = SUNMIN(n-1,k+ml);
+
+    /* find l = pivot row number */
+
+    l=k;
+    max = SUNRabs(*diag_k);
+    for (i=k+1, kptr=sub_diag_k; i <= last_row_k; i++, kptr++) { 
+      if (SUNRabs(*kptr) > max) {
+	l=i;
+	max = SUNRabs(*kptr);
+      }
+    }
+    storage_l = ROW(l, k, smu);
+    *p = l;
+    
+    /* check for zero pivot element */
+
+    if (col_k[storage_l] == ZERO) return(k+1);
+    
+    /* swap a(l,k) and a(k,k) if necessary */
+    
+    if ( (swap = (l != k) )) {
+      temp = col_k[storage_l];
+      col_k[storage_l] = *diag_k;
+      *diag_k = temp;
+    }
+
+    /* Scale the elements below the diagonal in         */
+    /* column k by -1.0 / a(k,k). After the above swap, */
+    /* a(k,k) holds the pivot element. This scaling     */
+    /* stores the pivot row multipliers -a(i,k)/a(k,k)  */
+    /* in a(i,k), i=k+1, ..., SUNMIN(n-1,k+ml).            */
+    
+    mult = -ONE / (*diag_k);
+    for (i=k+1, kptr = sub_diag_k; i <= last_row_k; i++, kptr++)
+      (*kptr) *= mult;
+
+    /* row_i = row_i - [a(i,k)/a(k,k)] row_k, i=k+1, ..., SUNMIN(n-1,k+ml) */
+    /* row k is the pivot row after swapping with row l.                */
+    /* The computation is done one column at a time,                    */
+    /* column j=k+1, ..., SUNMIN(k+smu,n-1).                               */
+    
+    last_col_k = SUNMIN(k+smu,n-1);
+    for (j=k+1; j <= last_col_k; j++) {
+      
+      col_j = a[j];
+      storage_l = ROW(l,j,smu); 
+      storage_k = ROW(k,j,smu); 
+      a_kj = col_j[storage_l];
+
+      /* Swap the elements a(k,j) and a(k,l) if l!=k. */
+      
+      if (swap) {
+	col_j[storage_l] = col_j[storage_k];
+	col_j[storage_k] = a_kj;
+      }
+
+      /* a(i,j) = a(i,j) - [a(i,k)/a(k,k)]*a(k,j) */
+      /* a_kj = a(k,j), *kptr = - a(i,k)/a(k,k), *jptr = a(i,j) */
+
+      if (a_kj != ZERO) {
+	for (i=k+1, kptr=sub_diag_k, jptr=col_j+ROW(k+1,j,smu);
+	     i <= last_row_k;
+	     i++, kptr++, jptr++)
+	  (*jptr) += a_kj * (*kptr);
+      }
+    }    
+  }
+  
+  /* set the last pivot row to be n-1 and check for a zero pivot */
+
+  *p = n-1; 
+  if (a[n-1][smu] == ZERO) return(n);
+
+  /* return 0 to indicate success */
+
+  return(0);
+}
+
+void bandGBTRS(realtype **a, long int n, long int smu, long int ml, long int *p, realtype *b)
+{
+  long int k, l, i, first_row_k, last_row_k;
+  realtype mult, *diag_k;
+  
+  /* Solve Ly = Pb, store solution y in b */
+  
+  for (k=0; k < n-1; k++) {
+    l = p[k];
+    mult = b[l];
+    if (l != k) {
+      b[l] = b[k];
+      b[k] = mult;
+    }
+    diag_k = a[k]+smu;
+    last_row_k = SUNMIN(n-1,k+ml);
+    for (i=k+1; i <= last_row_k; i++)
+      b[i] += mult * diag_k[i-k];
+  }
+  
+  /* Solve Ux = y, store solution x in b */
+  
+  for (k=n-1; k >= 0; k--) {
+    diag_k = a[k]+smu;
+    first_row_k = SUNMAX(0,k-smu);
+    b[k] /= (*diag_k);
+    mult = -b[k];
+    for (i=first_row_k; i <= k-1; i++)
+      b[i] += mult*diag_k[i-k];
+  }
+}
+
+void bandCopy(realtype **a, realtype **b, long int n, long int a_smu, long int b_smu, 
+              long int copymu, long int copyml)
+{
+  long int i, j, copySize;
+  realtype *a_col_j, *b_col_j;
+
+  copySize = copymu + copyml + 1;
+ 
+  for (j=0; j < n; j++) {
+    a_col_j = a[j]+a_smu-copymu;
+    b_col_j = b[j]+b_smu-copymu;
+    for (i=0; i < copySize; i++)
+      b_col_j[i] = a_col_j[i];
+  }
+}
+
+void bandScale(realtype c, realtype **a, long int n, long int mu, long int ml, long int smu)
+{
+  long int i, j, colSize;
+  realtype *col_j;
+
+  colSize = mu + ml + 1;
+
+  for(j=0; j < n; j++) {
+    col_j = a[j]+smu-mu;
+    for (i=0; i < colSize; i++)
+      col_j[i] *= c;
+  }
+}
+
+void bandAddIdentity(realtype **a, long int n, long int smu)
+{
+  long int j;
+ 
+  for(j=0; j < n; j++)
+    a[j][smu] += ONE;
+}
+
+void bandMatvec(realtype **a, realtype *x, realtype *y, long int n, 
+		long int mu, long int ml, long int smu)
+{
+  long int i, j, is, ie;
+  realtype *col_j;
+
+  for (i=0; i<n; i++)
+    y[i] = 0.0;
+
+  for(j=0; j<n; j++) {
+    col_j = a[j]+smu-mu;
+    is = (0 > j-mu) ? 0 : j-mu;
+    ie = (n-1 < j+ml) ? n-1 : j+ml;
+    for (i=is; i<=ie; i++)
+      y[i] += col_j[i-j+mu]*x[j];
+  }
+}
+
diff --git a/src/sundials/sundials_dense.c b/src/sundials/sundials_dense.c
new file mode 100644
index 0000000..1a15a46
--- /dev/null
+++ b/src/sundials/sundials_dense.c
@@ -0,0 +1,400 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4272 $
+ * $Date: 2014-12-02 11:19:41 -0800 (Tue, 02 Dec 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a generic package of dense
+ * matrix operations.
+ * -----------------------------------------------------------------
+ */ 
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_dense.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+#define TWO  RCONST(2.0)
+
+/*
+ * -----------------------------------------------------
+ * Functions working on DlsMat
+ * -----------------------------------------------------
+ */
+
+long int DenseGETRF(DlsMat A, long int *p)
+{
+  return(denseGETRF(A->cols, A->M, A->N, p));
+}
+
+void DenseGETRS(DlsMat A, long int *p, realtype *b)
+{
+  denseGETRS(A->cols, A->N, p, b);
+}
+
+long int DensePOTRF(DlsMat A)
+{
+  return(densePOTRF(A->cols, A->M));
+}
+
+void DensePOTRS(DlsMat A, realtype *b)
+{
+  densePOTRS(A->cols, A->M, b);
+}
+
+int DenseGEQRF(DlsMat A, realtype *beta, realtype *wrk)
+{
+  return(denseGEQRF(A->cols, A->M, A->N, beta, wrk));
+}
+
+int DenseORMQR(DlsMat A, realtype *beta, realtype *vn, realtype *vm, realtype *wrk)
+{
+  return(denseORMQR(A->cols, A->M, A->N, beta, vn, vm, wrk));
+}
+
+void DenseCopy(DlsMat A, DlsMat B)
+{
+  denseCopy(A->cols, B->cols, A->M, A->N);
+}
+
+void DenseScale(realtype c, DlsMat A)
+{
+  denseScale(c, A->cols, A->M, A->N);
+}
+
+void DenseMatvec(DlsMat A, realtype *x, realtype *y)
+{
+  denseMatvec(A->cols, x, y, A->M, A->N);
+}
+
+long int denseGETRF(realtype **a, long int m, long int n, long int *p)
+{
+  long int i, j, k, l;
+  realtype *col_j, *col_k;
+  realtype temp, mult, a_kj;
+
+  /* k-th elimination step number */
+  for (k=0; k < n; k++) {
+
+    col_k  = a[k];
+
+    /* find l = pivot row number */
+    l=k;
+    for (i=k+1; i < m; i++)
+      if (SUNRabs(col_k[i]) > SUNRabs(col_k[l])) l=i;
+    p[k] = l;
+
+    /* check for zero pivot element */
+    if (col_k[l] == ZERO) return(k+1);
+    
+    /* swap a(k,1:n) and a(l,1:n) if necessary */    
+    if ( l!= k ) {
+      for (i=0; i<n; i++) {
+        temp = a[i][l];
+        a[i][l] = a[i][k];
+        a[i][k] = temp;
+      }
+    }
+
+    /* Scale the elements below the diagonal in
+     * column k by 1.0/a(k,k). After the above swap
+     * a(k,k) holds the pivot element. This scaling
+     * stores the pivot row multipliers a(i,k)/a(k,k)
+     * in a(i,k), i=k+1, ..., m-1.                      
+     */
+    mult = ONE/col_k[k];
+    for(i=k+1; i < m; i++) col_k[i] *= mult;
+
+    /* row_i = row_i - [a(i,k)/a(k,k)] row_k, i=k+1, ..., m-1 */
+    /* row k is the pivot row after swapping with row l.      */
+    /* The computation is done one column at a time,          */
+    /* column j=k+1, ..., n-1.                                */
+
+    for (j=k+1; j < n; j++) {
+
+      col_j = a[j];
+      a_kj = col_j[k];
+
+      /* a(i,j) = a(i,j) - [a(i,k)/a(k,k)]*a(k,j)  */
+      /* a_kj = a(k,j), col_k[i] = - a(i,k)/a(k,k) */
+
+      if (a_kj != ZERO) {
+	for (i=k+1; i < m; i++)
+	  col_j[i] -= a_kj * col_k[i];
+      }
+    }
+  }
+
+  /* return 0 to indicate success */
+
+  return(0);
+}
+
+void denseGETRS(realtype **a, long int n, long int *p, realtype *b)
+{
+  long int i, k, pk;
+  realtype *col_k, tmp;
+
+  /* Permute b, based on pivot information in p */
+  for (k=0; k<n; k++) {
+    pk = p[k];
+    if(pk != k) {
+      tmp = b[k];
+      b[k] = b[pk];
+      b[pk] = tmp;
+    }
+  }
+
+  /* Solve Ly = b, store solution y in b */
+  for (k=0; k<n-1; k++) {
+    col_k = a[k];
+    for (i=k+1; i<n; i++) b[i] -= col_k[i]*b[k];
+  }
+
+  /* Solve Ux = y, store solution x in b */
+  for (k = n-1; k > 0; k--) {
+    col_k = a[k];
+    b[k] /= col_k[k];
+    for (i=0; i<k; i++) b[i] -= col_k[i]*b[k];
+  }
+  b[0] /= a[0][0];
+
+}
+
+/*
+ * Cholesky decomposition of a symmetric positive-definite matrix
+ * A = C^T*C: gaxpy version.
+ * Only the lower triangle of A is accessed and it is overwritten with
+ * the lower triangle of C.
+ */
+long int densePOTRF(realtype **a, long int m)
+{
+  realtype *a_col_j, *a_col_k;
+  realtype a_diag;
+  long int i, j, k;
+
+  for (j=0; j<m; j++) {
+
+    a_col_j = a[j];
+   
+    if (j>0) {
+      for(i=j; i<m; i++) {
+        for(k=0;k<j;k++) {
+          a_col_k = a[k];
+          a_col_j[i] -= a_col_k[i]*a_col_k[j];
+        }
+      }
+    }
+
+    a_diag = a_col_j[j];
+    if (a_diag <= ZERO) return(j+1);
+    a_diag = SUNRsqrt(a_diag);
+
+    for(i=j; i<m; i++) a_col_j[i] /= a_diag;
+    
+  }
+
+  return(0);
+}
+
+/*
+ * Solution of Ax=b, with A s.p.d., based on the Cholesky decomposition
+ * obtained with denPOTRF.; A = C*C^T, C lower triangular
+ *
+ */
+void densePOTRS(realtype **a, long int m, realtype *b)
+{
+  realtype *col_j, *col_i;
+  long int i, j;
+
+  /* Solve C y = b, forward substitution - column version.
+     Store solution y in b */
+  for (j=0; j < m-1; j++) {
+    col_j = a[j];
+    b[j] /= col_j[j];
+    for (i=j+1; i < m; i++)
+      b[i] -= b[j]*col_j[i];
+  }
+  col_j = a[m-1];
+  b[m-1] /= col_j[m-1];
+
+  /* Solve C^T x = y, backward substitution - row version.
+     Store solution x in b */
+  col_j = a[m-1];
+  b[m-1] /= col_j[m-1];
+  for (i=m-2; i>=0; i--) {
+    col_i = a[i];
+    for (j=i+1; j<m; j++) 
+      b[i] -= col_i[j]*b[j];
+    b[i] /= col_i[i];
+  }
+
+}
+
+/*
+ * QR factorization of a rectangular matrix A of size m by n (m >= n)
+ * using Householder reflections.
+ *
+ * On exit, the elements on and above the diagonal of A contain the n by n 
+ * upper triangular matrix R; the elements below the diagonal, with the array beta, 
+ * represent the orthogonal matrix Q as a product of elementary reflectors .
+ *
+ * v (of length m) must be provided as workspace.
+ *
+ */
+
+int denseGEQRF(realtype **a, long int m, long int n, realtype *beta, realtype *v)
+{
+  realtype ajj, s, mu, v1, v1_2;
+  realtype *col_j, *col_k;
+  long int i, j, k;
+
+  /* For each column...*/
+  for(j=0; j<n; j++) {
+
+    col_j = a[j];
+
+    ajj = col_j[j];
+    
+    /* Compute the j-th Householder vector (of length m-j) */
+    v[0] = ONE;
+    s = ZERO;
+    for(i=1; i<m-j; i++) {
+      v[i] = col_j[i+j];
+      s += v[i]*v[i];
+    }
+
+    if(s != ZERO) {
+      mu = SUNRsqrt(ajj*ajj+s);
+      v1 = (ajj <= ZERO) ? ajj-mu : -s/(ajj+mu);
+      v1_2 = v1*v1;
+      beta[j] = TWO * v1_2 / (s + v1_2);
+      for(i=1; i<m-j; i++) v[i] /= v1;
+    } else {
+      beta[j] = ZERO;      
+    }
+
+    /* Update upper triangle of A (load R) */
+    for(k=j; k<n; k++) {
+      col_k = a[k];
+      s = ZERO;
+      for(i=0; i<m-j; i++) s += col_k[i+j]*v[i];
+      s *= beta[j];
+      for(i=0; i<m-j; i++) col_k[i+j] -= s*v[i];
+    }
+
+    /* Update A (load Householder vector) */
+    if(j<m-1) {
+      for(i=1; i<m-j; i++) col_j[i+j] = v[i];
+    }
+
+  }
+
+
+  return(0);
+}
+
+/*
+ * Computes vm = Q * vn, where the orthogonal matrix Q is stored as
+ * elementary reflectors in the m by n matrix A and in the vector beta.
+ * (NOTE: It is assumed that an QR factorization has been previously 
+ * computed with denGEQRF).
+ *
+ * vn (IN) has length n, vm (OUT) has length m, and it's assumed that m >= n.
+ *
+ * v (of length m) must be provided as workspace.
+ */
+int denseORMQR(realtype **a, long int m, long int n, realtype *beta,
+               realtype *vn, realtype *vm, realtype *v)
+{
+  realtype *col_j, s;
+  long int i, j;
+
+  /* Initialize vm */
+  for(i=0; i<n; i++) vm[i] = vn[i];
+  for(i=n; i<m; i++) vm[i] = ZERO;
+
+  /* Accumulate (backwards) corrections into vm */
+  for(j=n-1; j>=0; j--) {
+
+    col_j = a[j];
+
+    v[0] = ONE;
+    s = vm[j];
+    for(i=1; i<m-j; i++) {
+      v[i] = col_j[i+j];
+      s += v[i]*vm[i+j];
+    }
+    s *= beta[j];
+
+    for(i=0; i<m-j; i++) vm[i+j] -= s * v[i];
+
+  }
+
+  return(0);
+}
+
+void denseCopy(realtype **a, realtype **b, long int m, long int n)
+{
+  long int i, j;
+  realtype *a_col_j, *b_col_j;
+
+  for (j=0; j < n; j++) {
+    a_col_j = a[j];
+    b_col_j = b[j];
+    for (i=0; i < m; i++)
+      b_col_j[i] = a_col_j[i];
+  }
+
+}
+
+void denseScale(realtype c, realtype **a, long int m, long int n)
+{
+  long int i, j;
+  realtype *col_j;
+
+  for (j=0; j < n; j++) {
+    col_j = a[j];
+    for (i=0; i < m; i++)
+      col_j[i] *= c;
+  }
+}
+
+void denseAddIdentity(realtype **a, long int n)
+{
+  long int i;
+  
+  for (i=0; i < n; i++) a[i][i] += ONE;
+}
+
+void denseMatvec(realtype **a, realtype *x, realtype *y, long int m, long int n)
+{
+  long int i, j;
+  realtype *col_j;
+
+  for (i=0; i<m; i++) {
+    y[i] = 0.0;
+  }
+
+  for (j=0; j<n; j++) {
+    col_j = a[j];
+    for (i=0; i<m; i++)
+      y[i] += col_j[i]*x[j];
+  }
+}
+
diff --git a/src/sundials/sundials_direct.c b/src/sundials/sundials_direct.c
new file mode 100644
index 0000000..0fabca6
--- /dev/null
+++ b/src/sundials/sundials_direct.c
@@ -0,0 +1,360 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4272 $
+ * $Date: 2014-12-02 11:19:41 -0800 (Tue, 02 Dec 2014) $
+ * -----------------------------------------------------------------
+ * Programmer: Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for operations to be used by a
+ * generic direct linear solver.
+ * -----------------------------------------------------------------
+ */ 
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_direct.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+DlsMat NewDenseMat(long int M, long int N)
+{
+  DlsMat A;
+  long int j;
+
+  if ( (M <= 0) || (N <= 0) ) return(NULL);
+
+  A = NULL;
+  A = (DlsMat) malloc(sizeof *A);
+  if (A==NULL) return (NULL);
+  
+  A->data = (realtype *) malloc(M * N * sizeof(realtype));
+  if (A->data == NULL) {
+    free(A); A = NULL;
+    return(NULL);
+  }
+  A->cols = (realtype **) malloc(N * sizeof(realtype *));
+  if (A->cols == NULL) {
+    free(A->data); A->data = NULL;
+    free(A); A = NULL;
+    return(NULL);
+  }
+
+  for (j=0; j < N; j++) A->cols[j] = A->data + j * M;
+
+  A->M = M;
+  A->N = N;
+  A->ldim = M;
+  A->ldata = M*N;
+
+  A->type = SUNDIALS_DENSE;
+
+  return(A);
+}
+
+realtype **newDenseMat(long int m, long int n)
+{
+  long int j;
+  realtype **a;
+
+  if ( (n <= 0) || (m <= 0) ) return(NULL);
+
+  a = NULL;
+  a = (realtype **) malloc(n * sizeof(realtype *));
+  if (a == NULL) return(NULL);
+
+  a[0] = NULL;
+  a[0] = (realtype *) malloc(m * n * sizeof(realtype));
+  if (a[0] == NULL) {
+    free(a); a = NULL;
+    return(NULL);
+  }
+
+  for (j=1; j < n; j++) a[j] = a[0] + j * m;
+
+  return(a);
+}
+
+
+DlsMat NewBandMat(long int N, long int mu, long int ml, long int smu)
+{
+  DlsMat A;
+  long int j, colSize;
+
+  if (N <= 0) return(NULL);
+  
+  A = NULL;
+  A = (DlsMat) malloc(sizeof *A);
+  if (A == NULL) return (NULL);
+
+  colSize = smu + ml + 1;
+  A->data = NULL;
+  A->data = (realtype *) malloc(N * colSize * sizeof(realtype));
+  if (A->data == NULL) {
+    free(A); A = NULL;
+    return(NULL);
+  }
+
+  A->cols = NULL;
+  A->cols = (realtype **) malloc(N * sizeof(realtype *));
+  if (A->cols == NULL) {
+    free(A->data);
+    free(A); A = NULL;
+    return(NULL);
+  }
+
+  for (j=0; j < N; j++) A->cols[j] = A->data + j * colSize;
+
+  A->M = N;
+  A->N = N;
+  A->mu = mu;
+  A->ml = ml;
+  A->s_mu = smu;
+  A->ldim =  colSize;
+  A->ldata = N * colSize;
+
+  A->type = SUNDIALS_BAND;
+
+  return(A);
+}
+
+realtype **newBandMat(long int n, long int smu, long int ml)
+{
+  realtype **a;
+  long int j, colSize;
+
+  if (n <= 0) return(NULL);
+
+  a = NULL;
+  a = (realtype **) malloc(n * sizeof(realtype *));
+  if (a == NULL) return(NULL);
+
+  colSize = smu + ml + 1;
+  a[0] = NULL;
+  a[0] = (realtype *) malloc(n * colSize * sizeof(realtype));
+  if (a[0] == NULL) {
+    free(a); a = NULL;
+    return(NULL);
+  }
+
+  for (j=1; j < n; j++) a[j] = a[0] + j * colSize;
+
+  return(a);
+}
+
+void DestroyMat(DlsMat A)
+{
+  free(A->data);  A->data = NULL;
+  free(A->cols);
+  free(A); A = NULL;
+}
+
+void destroyMat(realtype **a)
+{
+  free(a[0]); a[0] = NULL;
+  free(a); a = NULL;
+}
+
+int *NewIntArray(int N)
+{
+  int *vec;
+
+  if (N <= 0) return(NULL);
+
+  vec = NULL;
+  vec = (int *) malloc(N * sizeof(int));
+
+  return(vec);
+}
+
+int *newIntArray(int n)
+{
+  int *v;
+
+  if (n <= 0) return(NULL);
+
+  v = NULL;
+  v = (int *) malloc(n * sizeof(int));
+
+  return(v);
+}
+
+long int *NewLintArray(long int N)
+{
+  long int *vec;
+
+  if (N <= 0) return(NULL);
+
+  vec = NULL;
+  vec = (long int *) malloc(N * sizeof(long int));
+
+  return(vec);
+}
+
+long int *newLintArray(long int n)
+{
+  long int *v;
+
+  if (n <= 0) return(NULL);
+
+  v = NULL;
+  v = (long int *) malloc(n * sizeof(long int));
+
+  return(v);
+}
+
+realtype *NewRealArray(long int N)
+{
+  realtype *vec;
+
+  if (N <= 0) return(NULL);
+
+  vec = NULL;
+  vec = (realtype *) malloc(N * sizeof(realtype));
+
+  return(vec);
+}
+
+realtype *newRealArray(long int m)
+{
+  realtype *v;
+
+  if (m <= 0) return(NULL);
+
+  v = NULL;
+  v = (realtype *) malloc(m * sizeof(realtype));
+
+  return(v);
+}
+
+void DestroyArray(void *V)
+{ 
+  free(V); 
+  V = NULL;
+}
+
+void destroyArray(void *v)
+{
+  free(v); 
+  v = NULL;
+}
+
+
+void AddIdentity(DlsMat A)
+{
+  long int i;
+
+  switch (A->type) {
+
+  case SUNDIALS_DENSE:
+    for (i=0; i<A->N; i++) A->cols[i][i] += ONE;
+    break;
+
+  case SUNDIALS_BAND:
+    for (i=0; i<A->M; i++) A->cols[i][A->s_mu] += ONE;
+    break;
+
+  }
+
+}
+
+
+void SetToZero(DlsMat A)
+{
+  long int i, j, colSize;
+  realtype *col_j;
+
+  switch (A->type) {
+
+  case SUNDIALS_DENSE:
+    
+    for (j=0; j<A->N; j++) {
+      col_j = A->cols[j];
+      for (i=0; i<A->M; i++)
+        col_j[i] = ZERO;
+    }
+
+    break;
+
+  case SUNDIALS_BAND:
+
+    colSize = A->mu + A->ml + 1;
+    for (j=0; j<A->M; j++) {
+      col_j = A->cols[j] + A->s_mu - A->mu;
+      for (i=0; i<colSize; i++)
+        col_j[i] = ZERO;
+    }
+
+    break;
+
+  }
+
+}
+
+
+void PrintMat(DlsMat A)
+{
+  long int i, j, start, finish;
+  realtype **a;
+
+  switch (A->type) {
+
+  case SUNDIALS_DENSE:
+
+    printf("\n");
+    for (i=0; i < A->M; i++) {
+      for (j=0; j < A->N; j++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+        printf("%12Lg  ", DENSE_ELEM(A,i,j));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+        printf("%12g  ", DENSE_ELEM(A,i,j));
+#else
+        printf("%12g  ", DENSE_ELEM(A,i,j));
+#endif
+      }
+      printf("\n");
+    }
+    printf("\n");
+    
+    break;
+
+  case SUNDIALS_BAND:
+
+    a = A->cols;
+    printf("\n");
+    for (i=0; i < A->N; i++) {
+      start = SUNMAX(0,i-A->ml);
+      finish = SUNMIN(A->N-1,i+A->mu);
+      for (j=0; j < start; j++) printf("%12s  ","");
+      for (j=start; j <= finish; j++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+        printf("%12Lg  ", a[j][i-j+A->s_mu]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+        printf("%12g  ", a[j][i-j+A->s_mu]);
+#else
+        printf("%12g  ", a[j][i-j+A->s_mu]);
+#endif
+      }
+      printf("\n");
+    }
+    printf("\n");
+    
+    break;
+
+  }
+
+}
+
+
diff --git a/src/sundials/sundials_iterative.c b/src/sundials/sundials_iterative.c
new file mode 100644
index 0000000..3d36106
--- /dev/null
+++ b/src/sundials/sundials_iterative.c
@@ -0,0 +1,293 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4272 $
+ * $Date: 2014-12-02 11:19:41 -0800 (Tue, 02 Dec 2014) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the iterative.h header
+ * file. It contains the implementation of functions that may be
+ * useful for many different iterative solvers of A x = b.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+
+#include <sundials/sundials_iterative.h>
+#include <sundials/sundials_math.h>
+
+#define FACTOR RCONST(1000.0)
+#define ZERO   RCONST(0.0)
+#define ONE    RCONST(1.0)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : ModifiedGS
+ * -----------------------------------------------------------------
+ * This implementation of ModifiedGS is a slight modification of a
+ * previous modified Gram-Schmidt routine (called mgs) written by
+ * Milo Dorr.
+ * -----------------------------------------------------------------
+ */
+ 
+int ModifiedGS(N_Vector *v, realtype **h, int k, int p, 
+               realtype *new_vk_norm)
+{
+  int  i, k_minus_1, i0;
+  realtype new_norm_2, new_product, vk_norm, temp;
+  
+  vk_norm = SUNRsqrt(N_VDotProd(v[k],v[k]));
+  k_minus_1 = k - 1;
+  i0 = SUNMAX(k-p, 0);
+  
+  /* Perform modified Gram-Schmidt */
+  
+  for (i=i0; i < k; i++) {
+    h[i][k_minus_1] = N_VDotProd(v[i], v[k]);
+    N_VLinearSum(ONE, v[k], -h[i][k_minus_1], v[i], v[k]);
+  }
+
+  /* Compute the norm of the new vector at v[k] */
+
+  *new_vk_norm = SUNRsqrt(N_VDotProd(v[k], v[k]));
+
+  /* If the norm of the new vector at v[k] is less than
+     FACTOR (== 1000) times unit roundoff times the norm of the
+     input vector v[k], then the vector will be reorthogonalized
+     in order to ensure that nonorthogonality is not being masked
+     by a very small vector length. */
+
+  temp = FACTOR * vk_norm;
+  if ((temp + (*new_vk_norm)) != temp) return(0);
+  
+  new_norm_2 = ZERO;
+
+  for (i=i0; i < k; i++) {
+    new_product = N_VDotProd(v[i], v[k]);
+    temp = FACTOR * h[i][k_minus_1];
+    if ((temp + new_product) == temp) continue;
+    h[i][k_minus_1] += new_product;
+    N_VLinearSum(ONE, v[k],-new_product, v[i], v[k]);
+    new_norm_2 += SUNSQR(new_product);
+  }
+
+  if (new_norm_2 != ZERO) {
+    new_product = SUNSQR(*new_vk_norm) - new_norm_2;
+    *new_vk_norm = (new_product > ZERO) ? SUNRsqrt(new_product) : ZERO;
+  }
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : ClassicalGS
+ * -----------------------------------------------------------------
+ * This implementation of ClassicalGS was contributed by Homer Walker
+ * and Peter Brown.
+ * -----------------------------------------------------------------
+ */
+
+int ClassicalGS(N_Vector *v, realtype **h, int k, int p, 
+                realtype *new_vk_norm, N_Vector temp, realtype *s)
+{
+  int  i, k_minus_1, i0;
+  realtype vk_norm;
+
+  k_minus_1 = k - 1;
+  
+  /* Perform Classical Gram-Schmidt */
+
+  vk_norm = SUNRsqrt(N_VDotProd(v[k], v[k]));
+
+  i0 = SUNMAX(k-p, 0);
+  for (i=i0; i < k; i++) {
+    h[i][k_minus_1] = N_VDotProd(v[i], v[k]);
+  }
+
+  for (i=i0; i < k; i++) {
+    N_VLinearSum(ONE, v[k], -h[i][k_minus_1], v[i], v[k]);
+  }
+
+  /* Compute the norm of the new vector at v[k] */
+
+  *new_vk_norm = SUNRsqrt(N_VDotProd(v[k], v[k]));
+
+  /* Reorthogonalize if necessary */
+
+  if ((FACTOR * (*new_vk_norm)) < vk_norm) {
+
+    for (i=i0; i < k; i++) {
+      s[i] = N_VDotProd(v[i], v[k]);
+    }
+
+    if (i0 < k) {
+      N_VScale(s[i0], v[i0], temp);
+      h[i0][k_minus_1] += s[i0];
+    }
+    for (i=i0+1; i < k; i++) {
+      N_VLinearSum(s[i], v[i], ONE, temp, temp);
+      h[i][k_minus_1] += s[i];
+    }
+    N_VLinearSum(ONE, v[k], -ONE, temp, v[k]);
+
+    *new_vk_norm = SUNRsqrt(N_VDotProd(v[k],v[k]));
+  }
+
+  return(0);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : QRfact
+ * -----------------------------------------------------------------
+ * This implementation of QRfact is a slight modification of a
+ * previous routine (called qrfact) written by Milo Dorr.
+ * -----------------------------------------------------------------
+ */
+
+int QRfact(int n, realtype **h, realtype *q, int job)
+{
+  realtype c, s, temp1, temp2, temp3;
+  int i, j, k, q_ptr, n_minus_1, code=0;
+
+  switch (job) {
+  case 0:
+
+    /* Compute a new factorization of H */
+
+    code = 0;
+    for (k=0; k < n; k++) {
+      
+      /* Multiply column k by the previous k-1 Givens rotations */
+
+      for (j=0; j < k-1; j++) {
+	i = 2*j;
+	temp1 = h[j][k];
+	temp2 = h[j+1][k];
+	c = q[i];
+	s = q[i+1];
+	h[j][k] = c*temp1 - s*temp2;
+	h[j+1][k] = s*temp1 + c*temp2;
+      }
+      
+      /* Compute the Givens rotation components c and s */
+
+      q_ptr = 2*k;
+      temp1 = h[k][k];
+      temp2 = h[k+1][k];
+      if( temp2 == ZERO) {
+	c = ONE;
+	s = ZERO;
+      } else if (SUNRabs(temp2) >= SUNRabs(temp1)) {
+	temp3 = temp1/temp2;
+	s = -ONE/SUNRsqrt(ONE+SUNSQR(temp3));
+	c = -s*temp3;
+      } else {
+	temp3 = temp2/temp1;
+	c = ONE/SUNRsqrt(ONE+SUNSQR(temp3));
+	s = -c*temp3;
+      }
+      q[q_ptr] = c;
+      q[q_ptr+1] = s;
+      if( (h[k][k] = c*temp1 - s*temp2) == ZERO) code = k+1;
+    }
+    break;
+
+  default:
+
+    /* Update the factored H to which a new column has been added */
+
+    n_minus_1 = n - 1;
+    code = 0;
+    
+    /* Multiply the new column by the previous n-1 Givens rotations */
+
+    for (k=0; k < n_minus_1; k++) {
+      i = 2*k;
+      temp1 = h[k][n_minus_1];
+      temp2 = h[k+1][n_minus_1];
+      c = q[i];
+      s = q[i+1];
+      h[k][n_minus_1] = c*temp1 - s*temp2;
+      h[k+1][n_minus_1] = s*temp1 + c*temp2;
+    }
+    
+    /* Compute new Givens rotation and multiply it times the last two
+       entries in the new column of H.  Note that the second entry of 
+       this product will be 0, so it is not necessary to compute it. */
+
+    temp1 = h[n_minus_1][n_minus_1];
+    temp2 = h[n][n_minus_1];
+    if (temp2 == ZERO) {
+      c = ONE;
+      s = ZERO;
+    } else if (SUNRabs(temp2) >= SUNRabs(temp1)) {
+      temp3 = temp1/temp2;
+      s = -ONE/SUNRsqrt(ONE+SUNSQR(temp3));
+      c = -s*temp3;
+    } else {
+      temp3 = temp2/temp1;
+      c = ONE/SUNRsqrt(ONE+SUNSQR(temp3));
+      s = -c*temp3;
+    }
+    q_ptr = 2*n_minus_1;
+    q[q_ptr] = c;
+    q[q_ptr+1] = s;
+    if ((h[n_minus_1][n_minus_1] = c*temp1 - s*temp2) == ZERO)
+      code = n;
+  }
+  
+  return (code);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : QRsol
+ * -----------------------------------------------------------------
+ * This implementation of QRsol is a slight modification of a
+ * previous routine (called qrsol) written by Milo Dorr.
+ * -----------------------------------------------------------------
+ */
+
+int QRsol(int n, realtype **h, realtype *q, realtype *b)
+{
+  realtype c, s, temp1, temp2;
+  int i, k, q_ptr, code=0;
+
+  /* Compute Q*b */
+  
+  for (k=0; k < n; k++) {
+    q_ptr = 2*k;
+    c = q[q_ptr];
+    s = q[q_ptr+1];
+    temp1 = b[k];
+    temp2 = b[k+1];
+    b[k] = c*temp1 - s*temp2;
+    b[k+1] = s*temp1 + c*temp2;
+  }
+
+  /* Solve  R*x = Q*b */
+
+  for (k=n-1; k >= 0; k--) {
+    if (h[k][k] == ZERO) {
+      code = k + 1;
+      break;
+    }
+    b[k] /= h[k][k];
+    for (i=0; i < k; i++) b[i] -= b[k]*h[i][k];
+  }
+  
+  return (code);
+}
diff --git a/src/sundials/sundials_math.c b/src/sundials/sundials_math.c
new file mode 100644
index 0000000..0e9a1de
--- /dev/null
+++ b/src/sundials/sundials_math.c
@@ -0,0 +1,99 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4272 $
+ * $Date: 2014-12-02 11:19:41 -0800 (Tue, 02 Dec 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a simple C-language math
+ * library.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <sundials/sundials_math.h>
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+realtype SUNRpowerI(realtype base, int exponent)
+{
+  int i, expt;
+  realtype prod;
+
+  prod = ONE;
+  expt = abs(exponent);
+  for(i = 1; i <= expt; i++) prod *= base;
+  if (exponent < 0) prod = ONE/prod;
+  return(prod);
+}
+
+realtype SUNRpowerR(realtype base, realtype exponent)
+{
+  if (base <= ZERO) return(ZERO);
+
+#if defined(SUNDIALS_USE_GENERIC_MATH)
+  return((realtype) pow((double) base, (double) exponent));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  return(pow(base, exponent));
+#elif defined(SUNDIALS_SINGLE_PRECISION)
+  return(powf(base, exponent));
+#elif defined(SUNDIALS_EXTENDED_PRECISION)
+  return(powl(base, exponent));
+#endif
+}
+
+realtype SUNRsqrt(realtype x)
+{
+  if (x <= ZERO) return(ZERO);
+
+#if defined(SUNDIALS_USE_GENERIC_MATH)
+  return((realtype) sqrt((double) x));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  return(sqrt(x));
+#elif defined(SUNDIALS_SINGLE_PRECISION)
+  return(sqrtf(x));
+#elif defined(SUNDIALS_EXTENDED_PRECISION)
+  return(sqrtl(x));
+#endif
+}
+
+realtype SUNRabs(realtype x)
+{
+#if defined(SUNDIALS_USE_GENERIC_MATH)
+  return((realtype) fabs((double) x));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  return(fabs(x));
+#elif defined(SUNDIALS_SINGLE_PRECISION)
+  return(fabsf(x));
+#elif defined(SUNDIALS_EXTENDED_PRECISION)
+  return(fabsl(x));
+#endif
+}
+
+realtype SUNRexp(realtype x)
+{
+#if defined(SUNDIALS_USE_GENERIC_MATH)
+  return((realtype) exp((double) x));
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+  return(exp(x));
+#elif defined(SUNDIALS_SINGLE_PRECISION)
+  return(expf(x));
+#elif defined(SUNDIALS_EXTENDED_PRECISION)
+  return(expl(x));
+#endif
+}
diff --git a/src/sundials/sundials_nvector.c b/src/sundials/sundials_nvector.c
new file mode 100644
index 0000000..75208d5
--- /dev/null
+++ b/src/sundials/sundials_nvector.c
@@ -0,0 +1,245 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4790 $
+ * $Date: 2016-06-29 14:47:05 -0700 (Wed, 29 Jun 2016) $
+ * ----------------------------------------------------------------- 
+ * Programmer(s): Radu Serban and Aaron Collier @ LLNL                               
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for a generic NVECTOR package.
+ * It contains the implementation of the N_Vector operations listed
+ * in nvector.h.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdlib.h>
+
+#include <sundials/sundials_nvector.h>
+
+/*
+ * -----------------------------------------------------------------
+ * Functions in the 'ops' structure
+ * -----------------------------------------------------------------
+ */
+
+N_Vector_ID N_VGetVectorID(N_Vector w)
+{
+  N_Vector_ID id;
+  id = w->ops->nvgetvectorid(w);
+  return(id);
+}
+
+N_Vector N_VClone(N_Vector w)
+{
+  N_Vector v = NULL;
+  v = w->ops->nvclone(w);
+  return(v);
+}
+
+N_Vector N_VCloneEmpty(N_Vector w)
+{
+  N_Vector v = NULL;
+  v = w->ops->nvcloneempty(w);
+  return(v);
+}
+
+void N_VDestroy(N_Vector v)
+{
+  if (v==NULL) return;
+  v->ops->nvdestroy(v);
+  return;
+}
+
+void N_VSpace(N_Vector v, long int *lrw, long int *liw)
+{
+  v->ops->nvspace(v, lrw, liw);
+  return;
+}
+
+realtype *N_VGetArrayPointer(N_Vector v)
+{
+  return((realtype *) v->ops->nvgetarraypointer(v));
+}
+
+void N_VSetArrayPointer(realtype *v_data, N_Vector v)
+{
+  v->ops->nvsetarraypointer(v_data, v);
+  return;
+}
+
+void N_VLinearSum(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z)
+{
+  z->ops->nvlinearsum(a, x, b, y, z);
+  return;
+}
+
+void N_VConst(realtype c, N_Vector z)
+{
+  z->ops->nvconst(c, z);
+  return;
+}
+
+void N_VProd(N_Vector x, N_Vector y, N_Vector z)
+{
+  z->ops->nvprod(x, y, z);
+  return;
+}
+
+void N_VDiv(N_Vector x, N_Vector y, N_Vector z)
+{
+  z->ops->nvdiv(x, y, z);
+  return;
+}
+
+void N_VScale(realtype c, N_Vector x, N_Vector z) 
+{
+  z->ops->nvscale(c, x, z);
+  return;
+}
+
+void N_VAbs(N_Vector x, N_Vector z)
+{
+  z->ops->nvabs(x, z);
+  return;
+}
+
+void N_VInv(N_Vector x, N_Vector z)
+{
+  z->ops->nvinv(x, z);
+  return;
+}
+
+void N_VAddConst(N_Vector x, realtype b, N_Vector z)
+{
+  z->ops->nvaddconst(x, b, z);
+  return;
+}
+
+realtype N_VDotProd(N_Vector x, N_Vector y)
+{
+  return((realtype) y->ops->nvdotprod(x, y));
+}
+
+realtype N_VMaxNorm(N_Vector x)
+{
+  return((realtype) x->ops->nvmaxnorm(x));
+}
+
+realtype N_VWrmsNorm(N_Vector x, N_Vector w)
+{
+  return((realtype) x->ops->nvwrmsnorm(x, w));
+}
+
+realtype N_VWrmsNormMask(N_Vector x, N_Vector w, N_Vector id)
+{
+  return((realtype) x->ops->nvwrmsnormmask(x, w, id));
+}
+
+realtype N_VMin(N_Vector x)
+{
+  return((realtype) x->ops->nvmin(x));
+}
+
+realtype N_VWL2Norm(N_Vector x, N_Vector w)
+{
+  return((realtype) x->ops->nvwl2norm(x, w));
+}
+
+realtype N_VL1Norm(N_Vector x)
+{
+  return((realtype) x->ops->nvl1norm(x));
+}
+
+void N_VCompare(realtype c, N_Vector x, N_Vector z)
+{
+  z->ops->nvcompare(c, x, z);
+  return;
+}
+
+booleantype N_VInvTest(N_Vector x, N_Vector z)
+{
+  return((booleantype) z->ops->nvinvtest(x, z));
+}
+
+booleantype N_VConstrMask(N_Vector c, N_Vector x, N_Vector m)
+{
+  return((booleantype) x->ops->nvconstrmask(c, x, m));
+}
+
+realtype N_VMinQuotient(N_Vector num, N_Vector denom)
+{
+  return((realtype) num->ops->nvminquotient(num, denom));
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Additional functions exported by the generic NVECTOR:
+ *   N_VCloneEmptyVectorArray
+ *   N_VCloneVectorArray
+ *   N_VDestroyVectorArray
+ * -----------------------------------------------------------------
+ */
+
+N_Vector *N_VCloneEmptyVectorArray(int count, N_Vector w)
+{
+  N_Vector *vs = NULL;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = N_VCloneEmpty(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+N_Vector *N_VCloneVectorArray(int count, N_Vector w)
+{
+  N_Vector *vs = NULL;
+  int j;
+
+  if (count <= 0) return(NULL);
+
+  vs = (N_Vector *) malloc(count * sizeof(N_Vector));
+  if(vs == NULL) return(NULL);
+
+  for (j = 0; j < count; j++) {
+    vs[j] = N_VClone(w);
+    if (vs[j] == NULL) {
+      N_VDestroyVectorArray(vs, j-1);
+      return(NULL);
+    }
+  }
+
+  return(vs);
+}
+
+void N_VDestroyVectorArray(N_Vector *vs, int count)
+{
+  int j;
+
+  if (vs==NULL) return;
+
+  for (j = 0; j < count; j++) N_VDestroy(vs[j]);
+
+  free(vs); vs = NULL;
+
+  return;
+}
diff --git a/src/sundials/sundials_pcg.c b/src/sundials/sundials_pcg.c
new file mode 100644
index 0000000..1840c14
--- /dev/null
+++ b/src/sundials/sundials_pcg.c
@@ -0,0 +1,213 @@
+/*---------------------------------------------------------------
+ Programmer(s): Daniel R. Reynolds @ SMU
+ ----------------------------------------------------------------
+ Copyright (c) 2013, Southern Methodist University.
+ All rights reserved.
+ For details, see the LICENSE file.
+ ----------------------------------------------------------------
+ This is the implementation file for the preconditioned conjugate 
+ gradient solver in SUNDIALS.
+ --------------------------------------------------------------*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <sundials/sundials_pcg.h>
+#include <sundials/sundials_math.h>
+
+
+/*---------------------------------------------------------------
+ private constants
+ --------------------------------------------------------------*/
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+
+/*---------------------------------------------------------------
+ Function : PcgMalloc
+ --------------------------------------------------------------*/
+PcgMem PcgMalloc(int l_max, N_Vector vec_tmpl)
+{
+  PcgMem mem;
+  N_Vector r, p, z, Ap;
+
+  /* Check the input parameters */
+  if (l_max <= 0) return(NULL);
+
+  /* Create temporary arrays */
+  r = N_VClone(vec_tmpl);
+  if (r == NULL) {
+    return(NULL);
+  }
+
+  p = N_VClone(vec_tmpl);
+  if (p == NULL) {
+    N_VDestroy(r);
+    return(NULL);
+  }
+
+  z = N_VClone(vec_tmpl);
+  if (z == NULL) {
+    N_VDestroy(r);
+    N_VDestroy(p);
+    return(NULL);
+  }
+
+  Ap = N_VClone(vec_tmpl);
+  if (Ap == NULL) {
+    N_VDestroy(r);
+    N_VDestroy(p);
+    N_VDestroy(z);
+    return(NULL);
+  }
+
+  /* Get memory for an PcgMemRec containing PCG vectors */
+  mem = NULL;
+  mem = (PcgMem) malloc(sizeof(PcgMemRec));
+  if (mem == NULL) {
+    N_VDestroy(r);
+    N_VDestroy(p);
+    N_VDestroy(z);
+    N_VDestroy(Ap);
+    return(NULL);
+  }
+
+  /* Set the structure fields */
+  mem->l_max = l_max;
+  mem->r     = r;
+  mem->p     = p;
+  mem->z     = z;
+  mem->Ap    = Ap;
+
+  /* Return the pointer to PCG memory */
+  return(mem);
+}
+
+
+/*---------------------------------------------------------------
+ Function : PcgSolve
+ --------------------------------------------------------------*/
+int PcgSolve(PcgMem mem, void *A_data, N_Vector x, N_Vector b,
+	     int pretype, realtype delta, void *P_data,
+	     N_Vector w, ATimesFn atimes, PSolveFn psolve,
+	     realtype *res_norm, int *nli, int *nps)
+{
+  realtype alpha, beta, r0_norm, rho, rz, rz_old;
+  N_Vector r, p, z, Ap;
+  booleantype UsePrec, converged;
+  int l, l_max, ier;
+
+  if (mem == NULL)  return(PCG_MEM_NULL);
+
+  /* Make local copies of mem variables */
+  l_max  = mem->l_max;
+  r      = mem->r;
+  p      = mem->p;
+  z      = mem->z;
+  Ap     = mem->Ap;
+
+  /* Initialize counters and converged flag */
+  *nli = *nps = 0;
+  converged = FALSE;
+
+  /* Set preconditioning flag */
+  UsePrec = ((pretype == PREC_BOTH) || (pretype == PREC_LEFT) || (pretype == PREC_RIGHT));
+
+  /* Set r to initial residual r_0 = b - A*x_0 */
+  if (N_VDotProd(x, x) == ZERO)  N_VScale(ONE, b, r);
+  else {
+    ier = atimes(A_data, x, r);
+    if (ier != 0)
+      return((ier < 0) ? PCG_ATIMES_FAIL_UNREC : PCG_ATIMES_FAIL_REC);
+    N_VLinearSum(ONE, b, -ONE, r, r);
+  }
+
+  /* Set rho to L2 norm of r, and return if small */
+  *res_norm = r0_norm = rho = N_VWrmsNorm(r,w);
+  if (rho <= delta) return(PCG_SUCCESS);
+
+  /* Apply preconditioner and b-scaling to r = r_0 */
+  if (UsePrec) {
+    ier = psolve(P_data, r, z, PREC_LEFT);   /* z = P^{-1}r */
+    (*nps)++;
+    if (ier != 0) return((ier < 0) ? PCG_PSOLVE_FAIL_UNREC : PCG_PSOLVE_FAIL_REC);
+  }
+  else N_VScale(ONE, r, z);
+
+  /* Initialize rz to <r,z> */
+  rz = N_VDotProd(r, z);
+
+  /* Copy z to p */
+  N_VScale(ONE, z, p);
+
+  /* Begin main iteration loop */
+  for(l=0; l<l_max; l++) {
+
+    /* increment counter */
+    (*nli)++;
+
+    /* Generate Ap = A*p */
+    ier = atimes(A_data, p, Ap );
+    if (ier != 0)
+      return((ier < 0) ? PCG_ATIMES_FAIL_UNREC : PCG_ATIMES_FAIL_REC);
+
+    /* Calculate alpha = <r,z> / <Ap,p> */
+    alpha = rz / N_VDotProd(Ap, p);
+
+    /* Update x = x + alpha*p */
+    N_VLinearSum(ONE, x, alpha, p, x);
+
+    /* Update r = r - alpha*Ap */
+    N_VLinearSum(ONE, r, -alpha, Ap, r);
+
+    /* Set rho and check convergence */
+    *res_norm = rho = N_VWrmsNorm(r, w);
+    if (rho <= delta) {
+      converged = TRUE;
+      break;
+    }
+
+    /* Apply preconditioner:  z = P^{-1}*r */
+    if (UsePrec) {
+      ier = psolve(P_data, r, z, PREC_LEFT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? PCG_PSOLVE_FAIL_UNREC : PCG_PSOLVE_FAIL_REC);
+    }
+    else N_VScale(ONE, r, z);
+
+    /* update rz */
+    rz_old = rz;
+    rz = N_VDotProd(r, z);
+    
+    /* Calculate beta = <r,z> / <r_old,z_old> */
+    beta = rz / rz_old;
+
+    /* Update p = z + beta*p */
+    N_VLinearSum(ONE, z, beta, p, p);
+
+  }
+
+  /* Main loop finished, return with result */
+  if (converged == TRUE)  return(PCG_SUCCESS);
+  if (rho < r0_norm)      return(PCG_RES_REDUCED);
+  return(PCG_CONV_FAIL);
+}
+
+
+/*---------------------------------------------------------------
+ Function : PcgFree
+ --------------------------------------------------------------*/
+void PcgFree(PcgMem mem)
+{
+  if (mem == NULL) return;
+
+  N_VDestroy(mem->r);
+  N_VDestroy(mem->p);
+  N_VDestroy(mem->z);
+  N_VDestroy(mem->Ap);
+
+  free(mem); mem = NULL;
+}
+
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/sundials/sundials_sparse.c b/src/sundials/sundials_sparse.c
new file mode 100644
index 0000000..a63f505
--- /dev/null
+++ b/src/sundials/sundials_sparse.c
@@ -0,0 +1,870 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4761 $
+ * $Date: 2016-05-18 20:00:35 -0700 (Wed, 18 May 2016) $
+ * -----------------------------------------------------------------
+ * Programmers: Carol Woodward, Slaven Peles @ LLNL
+ *              Daniel R. Reynolds @ SMU
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for operations on the SUNDIALS
+ * sparse matrix structure.
+ * -----------------------------------------------------------------
+ */ 
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_sparse.h>
+#include <sundials/sundials_math.h>
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/*
+ * ==================================================================
+ * Private function prototypes (functions working on SlsMat)
+ * ==================================================================
+ */
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: SparseMatvecCSC
+ * -----------------------------------------------------------------
+ * This function computes the matrix-vector product, y=A*x, where A
+ * is a CSC sparse matrix of dimension MxN, x is a realtype array of 
+ * length N, and y is a realtype array of length M. Upon successful
+ * completion, the return value is zero; otherwise 1 is returned.
+ * -----------------------------------------------------------------
+ */
+
+static int SparseMatvecCSC(const SlsMat A, const realtype *x, realtype *y);
+
+/*
+ * -----------------------------------------------------------------
+ * Functions: SparseMatvecCSR
+ * -----------------------------------------------------------------
+ * This function computes the matrix-vector product, y=A*x, where A
+ * is a CSR sparse matrix of dimension MxN, x is a realtype array of 
+ * length N, and y is a realtype array of length M. Upon successful
+ * completion, the return value is zero; otherwise 1 is returned.
+ * -----------------------------------------------------------------
+ */
+
+static int SparseMatvecCSR(const SlsMat A, const realtype *x, realtype *y);
+
+
+
+/*
+ * ==================================================================
+ * Implementation of sparse matrix methods (functions on SlsMat)
+ * ==================================================================
+ */
+
+/* 
+ * Default Constructor
+ * 
+ * Creates a new (empty) sparse matrix of a desired size and nonzero density.
+ * Returns NULL if a memory allocation error occurred.
+ * 
+ */
+SlsMat SparseNewMat(int M, int N, int NNZ, int sparsetype)
+{
+  SlsMat A;
+
+  if ( (M <= 0) || (N <= 0) ) return(NULL);
+
+  A = NULL;
+  A = (SlsMat) malloc(sizeof(struct _SlsMat));
+  if (A==NULL) return (NULL);
+  
+  A->sparsetype = sparsetype;
+  
+  switch(A->sparsetype){
+    case CSC_MAT:
+      A->NP = N;
+      A->rowvals = &(A->indexvals);
+      A->colptrs = &(A->indexptrs);
+      /* CSR indices */
+      A->colvals = NULL;
+      A->rowptrs = NULL;
+      break;
+    case CSR_MAT:
+      A->NP = M;
+      A->colvals = &(A->indexvals);
+      A->rowptrs = &(A->indexptrs);
+      /* CSC indices */
+      A->rowvals = NULL;
+      A->colptrs = NULL;
+      break;
+    default:
+      free(A); 
+      A = NULL;
+      return(NULL);
+  }
+
+  A->data = (realtype *) malloc(NNZ * sizeof(realtype));
+  if (A->data == NULL) {
+    free(A); A = NULL;
+    return(NULL);
+  }
+  
+  A->indexvals = (int *) malloc(NNZ * sizeof(int));
+  if (A->indexvals == NULL) {
+    free(A->data); A->data = NULL;
+    free(A); A = NULL;
+    return(NULL);
+  }
+  A->indexptrs = (int *) malloc((A->NP + 1) * sizeof(int));
+  if (A->indexptrs == NULL) {
+    free(A->indexvals);
+    free(A->data); A->data = NULL;
+    free(A); A = NULL;
+    return(NULL);
+  }
+
+  A->M = M;
+  A->N = N;
+  A->NNZ = NNZ;
+  /* A->colptrs[N] = NNZ; */
+  A->indexptrs[A->NP] = 0;
+
+  return(A);
+}
+
+/** 
+ * Constructor
+ * 
+ * Creates a new sparse matrix out of an existing dense or band matrix.  
+ * Returns NULL if a memory allocation error occurred.
+ * 
+ */
+SlsMat SparseFromDenseMat(const DlsMat Ad, int sparsetype)
+{
+  int i, j, nnz;
+  int M, N;
+  realtype dtmp;
+  SlsMat As = NULL;
+  
+  switch(sparsetype) {
+    case CSC_MAT:
+      /* CSC is transpose of CSR */
+      M = Ad->N;
+      N = Ad->M;
+      break;
+    case CSR_MAT:
+      M = Ad->M;
+      N = Ad->N;
+      break;
+    default:
+      /* Sparse matrix type not recognized */
+      return NULL;
+  }
+
+  /* proceed according to A's type (dense/band) */
+  if (Ad->type == SUNDIALS_DENSE) {
+
+    /* determine total number of nonzeros */
+    nnz = 0;
+    for (j=0; j<Ad->N; j++)
+      for (i=0; i<Ad->M; i++)
+        nnz += (DENSE_ELEM(Ad,i,j) != 0.0);
+
+    /* allocate sparse matrix */
+    As = SparseNewMat(Ad->M, Ad->N, nnz, sparsetype);
+    if (As == NULL)  return NULL;
+
+    /* copy nonzeros from A into As */
+    nnz = 0;
+    for (i=0; i<M; i++) {
+      (As->indexptrs)[i] = nnz;
+      for (j=0; j<N; j++) {
+        /* CSR = row major looping; CSC = column major looping */
+        dtmp = (sparsetype == CSR_MAT) ? DENSE_ELEM(Ad,i,j) : DENSE_ELEM(Ad,j,i);
+        if ( dtmp != ZERO ) { 
+          (As->indexvals)[nnz] = j;
+          As->data[nnz++] = dtmp;
+        }
+      }
+    }
+    (As->indexptrs)[M] = nnz;
+
+  } else { /* SUNDIALS_BAND */
+
+    /* determine total number of nonzeros */
+    nnz = 0;
+    for (j=0; j<Ad->N; j++)
+      for (i=j-(Ad->mu); i<j+(Ad->ml); i++)
+        nnz += (BAND_ELEM(Ad,i,j) != 0.0);
+
+    /* allocate sparse matrix */
+    As = SparseNewMat(Ad->M, Ad->N, nnz, sparsetype);
+    if (As == NULL)  return NULL;
+
+    /* copy nonzeros from A into As */
+    nnz = 0;
+    for (i=0; i<M; i++) {
+      (As->indexptrs)[i] = nnz;
+      for (j=i-(Ad->mu); j<i+(Ad->ml); j++) {
+        /* CSR = row major looping; CSC = column major looping */
+        dtmp = (sparsetype == CSR_MAT) ? BAND_ELEM(Ad,i,j) : BAND_ELEM(Ad,j,i);
+        if ( dtmp != 0.0 ) { 
+          (As->indexvals)[nnz] = j;
+          As->data[nnz++] = dtmp;
+        }
+      }
+    }
+    (As->indexptrs)[M] = nnz;
+
+  }
+
+  return(As);
+}
+
+
+/**
+ * 
+ * Destructor
+ * 
+ * Frees memory and deletes the structure for an existing sparse matrix.
+ * 
+ */
+int SparseDestroyMat(SlsMat A)
+{
+  if (A->data) {
+    free(A->data);  
+    A->data = NULL;
+  }
+  if (A->indexvals) {
+    free(A->indexvals);
+    A->indexvals = NULL;
+    A->rowvals   = NULL;
+    A->colvals   = NULL;
+  }
+  if (A->indexptrs) {
+    free(A->indexptrs);
+    A->indexptrs = NULL;
+    A->colptrs   = NULL;
+    A->rowptrs   = NULL;
+  }
+  free(A); 
+  A = NULL;
+  
+  return 0;
+}
+
+
+/** 
+ * Sets all sparse matrix entries to zero.
+ */
+int SparseSetMatToZero(SlsMat A)
+{
+  int i;
+
+  for (i=0; i<A->NNZ; i++) {
+    A->data[i] = ZERO;
+    A->indexvals[i] = 0;
+  }
+
+  for (i=0; i<A->NP; i++) {
+    A->indexptrs[i] = 0;
+  }
+  /* A->colptrs[A->N] = A->NNZ; */
+  A->indexptrs[A->NP] = 0;
+  
+  return 0;
+}
+
+
+/** 
+ * Copies the sparse matrix A into sparse matrix B.  
+ * 
+ * It is assumed that A and B have the same dimensions, but we account 
+ * for the situation in which B has fewer nonzeros than A.
+ *  
+ */
+int SparseCopyMat(const SlsMat A, SlsMat B)
+{
+  int i;
+  int A_nz = A->indexptrs[A->NP];
+  
+  if(A->M != B->M || A->N != B->N) {
+    /* fprintf(stderr, "Error: Copying sparse matrices of different size!\n"); */
+    return (-1);
+  }
+    
+  
+  /* ensure B is of the same type as A */
+  B->sparsetype = A->sparsetype;
+
+  /* ensure that B is allocated with at least as 
+     much memory as we have nonzeros in A */
+  if (B->NNZ < A_nz) {
+    B->indexvals = realloc(B->indexvals, A_nz*sizeof(int));
+    B->data = realloc(B->data, A_nz*sizeof(realtype));
+    B->NNZ = A_nz;
+  }
+
+  /* zero out B so that copy works correctly */
+  SparseSetMatToZero(B);
+
+  /* copy the data and row indices over */
+  for (i=0; i<A_nz; i++){
+    B->data[i] = A->data[i];
+    B->indexvals[i] = A->indexvals[i];
+  }
+
+  /* copy the column pointers over */
+  for (i=0; i<A->NP; i++) {
+    B->indexptrs[i] = A->indexptrs[i];
+  }
+  B->indexptrs[A->NP] = A_nz;
+  
+  return 0;
+}
+
+
+/** 
+ * Scales a sparse matrix A by the coefficient b.
+ */
+int SparseScaleMat(realtype b, SlsMat A)
+{
+  int i;
+
+  for (i=0; i<A->indexptrs[A->NP]; i++){
+    A->data[i] = b * (A->data[i]);
+  }
+  return 0;
+}
+
+
+
+
+/** 
+ * Adds 1 to every diagonal entry of A.  
+ * 
+ * Works for general [rectangular] matrices and handles potentially increased 
+ * size if A does not currently contain a value on the diagonal.
+ * 
+ * The function was developed originally for CSC matrices. To make it work for 
+ * CSR, one simply need to transpose it, i.e. transpose M and N in the 
+ * implementation.  
+ * 
+ */
+int SparseAddIdentityMat(SlsMat A)
+{
+  int j, i, p, nz, newmat, found;
+  int *w, *Ap, *Ai, *Cp, *Ci;
+  realtype *x, *Ax, *Cx;
+  SlsMat C;
+  int M;
+  int N;
+
+  /* determine if A already contains values on the diagonal (hence 
+     memory allocation necessary)*/
+  newmat=0;
+  for (j=0; j < SUNMIN(A->N,A->M); j++) {
+    /* scan column (row if CSR) of A, searching for diagonal value */
+    found = 0;
+    for (i=A->indexptrs[j]; i<A->indexptrs[j+1]; i++) {
+      if (A->indexvals[i] == j) {
+        found = 1;
+        break;
+      }
+    }
+    /* if no diagonal found, signal new matrix */
+    if (!found) {
+      newmat=1;
+      break;
+    }
+  }
+
+  /* perform operation */
+
+  /*   case 1: A already contains a diagonal */
+  if (!newmat) {
+
+    /* iterate through columns, adding 1.0 to diagonal */
+    for (j=0; j < SUNMIN(A->N,A->M); j++)
+      for (i=A->indexptrs[j]; i<A->indexptrs[j+1]; i++)
+        if (A->indexvals[i] == j) 
+          A->data[i] += ONE;
+
+  /*   case 2: A does not already contain a diagonal */
+  } else {
+    
+    if (A->sparsetype == CSC_MAT) {
+      M = A->M;
+      N = A->N;
+    }
+    else if (A->sparsetype == CSR_MAT) {
+      M = A->N;
+      N = A->M;
+    }
+    else
+      return (-1);
+  
+    /* create work arrays for row indices and nonzero column values */
+    w = (int *) malloc(A->M * sizeof(int));
+    x = (realtype *) malloc(A->M * sizeof(realtype));
+
+    /* create new matrix for sum (overestimate nnz as sum of each) */
+    C = SparseNewMat(A->M, A->N, (A->indexptrs)[A->NP] + SUNMIN(A->M, A->N), A->sparsetype);
+
+    /* access data from CSR structures (return if failure) */
+    Cp = Ci = Ap = Ai = NULL;
+    Cx = Ax = NULL;
+    if (C->indexptrs)  Cp = C->indexptrs;
+    else  return (-1);
+    if (C->indexvals)  Ci = C->indexvals;
+    else  return (-1);
+    if (C->data)       Cx = C->data;
+    else  return (-1);
+    if (A->indexptrs)  Ap = A->indexptrs;
+    else  return (-1);
+    if (A->indexvals)  Ai = A->indexvals;
+    else  return (-1);
+    if (A->data)       Ax = A->data;
+    else  return (-1);
+
+    /* initialize total nonzero count */
+    nz = 0;
+
+    /* iterate through columns (rows for CSR) */
+    for (j=0; j<N; j++) {
+
+      /* set current column (row) pointer to current # nonzeros */
+      Cp[j] = nz;
+
+      /* clear out temporary arrays for this column (row) */
+      for (i=0; i<M; i++) {
+        w[i] = 0;
+        x[i] = 0.0;
+      }
+
+      /* iterate down column (along row) of A, collecting nonzeros */
+      for (p=Ap[j]; p<Ap[j+1]; p++) {
+        w[Ai[p]] += 1;       /* indicate that row is filled */
+        x[Ai[p]] = Ax[p];    /* collect value */
+      }
+
+      /* add identity to this column (row) */
+      if (j < M) {
+        w[j] += 1;     /* indicate that row is filled */
+        x[j] += ONE;   /* update value */
+      }
+
+      /* fill entries of C with this column's (row's) data */
+      for (i=0; i<M; i++) {
+        if ( w[i] > 0 ) { 
+          Ci[nz] = i;  
+          Cx[nz++] = x[i];
+        }
+      }
+    }
+
+    /* indicate end of data */
+    Cp[N] = nz;
+
+    /* update A's structure with C's values; nullify C's pointers */
+    A->NNZ = C->NNZ;
+
+    if (A->data)
+      free(A->data);  
+    A->data = C->data;
+    C->data = NULL;
+
+    if (A->indexvals)
+      free(A->indexvals);
+    A->indexvals = C->indexvals;
+    C->indexvals = NULL;
+
+    if (A->indexptrs)
+      free(A->indexptrs);
+    A->indexptrs = C->indexptrs;
+    C->indexptrs = NULL;
+
+    /* clean up */
+    SparseDestroyMat(C); 
+    free(w);
+    free(x);
+
+    /* reallocate the new matrix to remove extra space */
+    SparseReallocMat(A);
+  }
+  return 0;
+}
+
+
+/** 
+ * Add two sparse matrices: A = A+B.  
+ * 
+ * Handles potentially increased size if matrices have different sparsity patterns.  
+ * Returns 0 if successful, and 1 if unsuccessful (in which case A is left unchanged).
+ * 
+ * The function was developed originally for CSC matrices. To make it work for 
+ * CSR, one simply need to transpose it, i.e. transpose M and N in the 
+ * implementation.  
+ * 
+ */
+int SparseAddMat(SlsMat A, const SlsMat B)
+{
+  int j, i, p, nz, newmat;
+  int *w, *Ap, *Ai, *Bp, *Bi, *Cp, *Ci;
+  realtype *x, *Ax, *Bx, *Cx;
+  SlsMat C;
+  int M;
+  int N;
+
+  /* ensure that matrix dimensions agree */
+  if ((A->M != B->M) || (A->N != B->N)) {
+    /* fprintf(stderr, "Error: Adding sparse matrices of different size!\n"); */
+    return(-1);
+  }
+  
+  /* if A is CSR matrix, transpose M and N */
+  if (A->sparsetype == CSC_MAT) {
+    M = A->M;
+    N = A->N;
+  }
+  else if (A->sparsetype == CSR_MAT) {
+    M = A->N;
+    N = A->M;
+  }
+  else
+    return(-1);
+  
+  /* create work arrays for row indices and nonzero column values */
+  w = (int *) malloc(M * sizeof(int));
+  x = (realtype *) malloc(M * sizeof(realtype));
+
+  /* determine if A already contains the sparsity pattern of B */
+  newmat=0;
+  for (j=0; j<N; j++) {
+
+    /* clear work array */
+    for (i=0; i<M; i++)  w[i] = 0;
+
+    /* scan column of A, incrementing w by one */
+    for (i=A->indexptrs[j]; i<A->indexptrs[j+1]; i++)
+      w[A->indexvals[i]] += 1;
+
+    /* scan column of B, decrementing w by one */
+    for (i=B->indexptrs[j]; i<B->indexptrs[j+1]; i++)
+      w[B->indexvals[i]] -= 1;
+
+    /* if any entry of w is negative, A doesn't contain B's sparsity */
+    for (i=0; i<M; i++)
+      if (w[i] < 0) {
+        newmat = 1;
+        break;
+      }
+    if (newmat) break;
+
+  }
+
+  /* perform operation */
+
+  /*   case 1: A already contains sparsity pattern of B */
+  if (!newmat) {
+
+    /* iterate through columns, adding matrices */
+    for (j=0; j<N; j++) {
+
+      /* clear work array */
+      for (i=0; i<M; i++)
+        x[i] = ZERO;
+
+      /* scan column of B, updating work array */
+      for (i = B->indexptrs[j]; i < B->indexptrs[j+1]; i++)
+        x[B->indexvals[i]] = B->data[i];
+
+      /* scan column of A, updating entries appropriately array */
+      for (i = A->indexptrs[j]; i < A->indexptrs[j+1]; i++)
+        A->data[i] += x[A->indexvals[i]];
+
+    }
+
+  /*   case 2: A does not already contain B's sparsity */
+  } else {
+
+    /* create new matrix for sum (overestimate nnz as sum of each) */
+    C = SparseNewMat(M, N, (A->indexptrs[N])+(B->indexptrs[N]), A->sparsetype);
+
+    /* access data from CSR structures (return if failure) */
+    Cp = Ci = Ap = Ai = Bp = Bi = NULL;
+    Cx = Ax = Bx = NULL;
+    if (C->indexptrs)  Cp = C->indexptrs;
+    else  return(-1);
+    if (C->indexvals)  Ci = C->indexvals;
+    else  return(-1);
+    if (C->data)       Cx = C->data;
+    else  return(-1);
+    if (A->indexptrs)  Ap = (A->indexptrs);
+    else  return(-1);
+    if (A->indexvals)  Ai = (A->indexvals);
+    else  return(-1);
+    if (A->data)       Ax = A->data;
+    else  return(-1);
+    if (B->indexptrs)  Bp = B->indexptrs;
+    else  return(-1);
+    if (B->indexvals)  Bi = B->indexvals;
+    else  return(-1);
+    if (B->data)       Bx = B->data;
+    else  return(-1);
+
+    /* initialize total nonzero count */
+    nz = 0;
+
+    /* iterate through columns */
+    for (j=0; j<N; j++) {
+
+      /* set current column pointer to current # nonzeros */
+      Cp[j] = nz;
+
+      /* clear out temporary arrays for this column */
+      for (i=0; i<M; i++) {
+        w[i] = 0;
+        x[i] = 0.0;
+      }
+
+      /* iterate down column of A, collecting nonzeros */
+      for (p=Ap[j]; p<Ap[j+1]; p++) {
+        w[Ai[p]] += 1;       /* indicate that row is filled */
+        x[Ai[p]] = Ax[p];    /* collect value */
+      }
+
+      /* iterate down column of B, collecting nonzeros */
+      for (p=Bp[j]; p<Bp[j+1]; p++) {
+        w[Bi[p]] += 1;       /* indicate that row is filled */
+        x[Bi[p]] += Bx[p];   /* collect value */
+      }
+
+      /* fill entries of C with this column's data */
+      for (i=0; i<M; i++) {
+        if ( w[i] > 0 ) { 
+          Ci[nz] = i;  
+          Cx[nz++] = x[i];
+        }
+      }
+    }
+
+    /* indicate end of data */
+    Cp[N] = nz;
+
+    /* update A's structure with C's values; nullify C's pointers */
+    A->NNZ = C->NNZ;
+
+    free(A->data);  
+    A->data = C->data;
+    C->data = NULL;
+
+    free(A->indexvals);
+    A->indexvals = C->indexvals;
+    C->indexvals = NULL;
+
+    free(A->indexptrs);
+    A->indexptrs = C->indexptrs;
+    C->indexptrs = NULL;
+
+    /* clean up */
+    SparseDestroyMat(C); 
+
+    /* reallocate the new matrix to remove extra space */
+    SparseReallocMat(A);
+
+  }
+
+  /* clean up */
+  free(w);
+  free(x);
+
+  /* return success */
+  return(0);
+}
+
+
+/** 
+ * Resizes the memory allocated for a given sparse matrix, shortening 
+ * it down to the number of actual nonzero entries.
+ */
+int SparseReallocMat(SlsMat A)
+{
+  int nzmax; 
+
+  nzmax = A->indexptrs[A->NP];
+  A->indexvals = realloc(A->indexvals, nzmax*sizeof(int));
+  A->data = realloc(A->data, nzmax*sizeof(realtype));
+  A->NNZ = nzmax;
+  
+  return 0;
+}
+
+
+/** 
+ * Computes y=A*x, where A is a sparse matrix of dimension MxN, x is a 
+ * realtype array of length N, and y is a realtype array of length M. 
+ * 
+ * Returns 0 if successful, -1 if unsuccessful (failed memory access).
+ */
+int SparseMatvec(const SlsMat A, const realtype *x, realtype *y)
+{
+  if(A->sparsetype == CSC_MAT)
+    return SparseMatvecCSC(A, x, y);
+  else if (A->sparsetype == CSR_MAT)
+    return SparseMatvecCSR(A, x, y);
+  else
+    return(-1);
+}
+
+
+/** 
+ * Prints the nonzero entries of a sparse matrix to screen.
+ */
+void SparsePrintMat(const SlsMat A, FILE* outfile)
+{
+  int i,j, NNZ;
+  char *matrixtype;
+  char *indexname;
+
+  NNZ = A->NNZ;
+
+  switch(A->sparsetype) {
+    case CSC_MAT:
+      indexname = (char*) "col";
+      matrixtype = (char*) "CSC";
+      break;
+    case CSR_MAT:
+      indexname = (char*) "row";
+      matrixtype = (char*) "CSR";
+      break;
+    default:
+      /* Sparse matrix type not recognized */
+      return;
+  }
+
+
+  fprintf(outfile, "\n");
+  
+  fprintf(outfile, "%d by %d %s matrix, NNZ: %d \n", A->M, A->N, matrixtype, NNZ);
+  for (j=0; j < A->NP; j++) {
+    fprintf(outfile, "%s %d : locations %d to %d\n", indexname, j, (A->indexptrs)[j], (A->indexptrs)[j+1]-1);
+    fprintf(outfile, "  ");
+    for (i = (A->indexptrs)[j]; i < (A->indexptrs)[j+1]; i++) {
+#if defined(SUNDIALS_EXTENDED_PRECISION)
+      fprintf(outfile, "%d: %Lg   ", A->indexvals[i], A->data[i]);
+#elif defined(SUNDIALS_DOUBLE_PRECISION)
+      fprintf(outfile, "%d: %g   ", A->indexvals[i], A->data[i]);
+#else
+      fprintf(outfile, "%d: %g   ", A->indexvals[i], A->data[i]);
+#endif
+    }
+    fprintf(outfile, "\n");
+  }
+  fprintf(outfile, "\n");
+    
+}
+
+
+
+/*
+ * ==================================================================
+ * Private function definitions
+ * ==================================================================
+ */
+
+
+
+/** 
+ * Computes y=A*x, where A is a CSC matrix of dimension MxN, x is a 
+ * realtype array of length N, and y is a realtype array of length M. 
+ * 
+ * Returns 0 if successful, -1 if unsuccessful (failed memory access).
+ */
+int SparseMatvecCSC(const SlsMat A, const realtype *x, realtype *y)
+{
+  int j, i;
+  int *Ap, *Ai;
+  realtype *Ax;
+
+  /* access data from CSR structure (return if failure) */
+  if (*A->colptrs)  Ap = A->indexptrs;
+  else  return(-1);
+  if (*A->rowvals)  Ai = A->indexvals;
+  else  return(-1);
+  if (A->data)      Ax = A->data;
+  else  return(-1);
+
+  /* ensure that vectors are non-NULL */
+  if ((x == NULL) || (y == NULL))
+    return(-1);
+
+  /* initialize result */
+  for (i=0; i<A->M; i++)
+    y[i] = 0.0;
+
+  /* iterate through matrix columns */
+  for (j=0; j<A->N; j++) {
+
+    /* iterate down column of A, performing product */
+    for (i=Ap[j]; i<Ap[j+1]; i++)
+      y[Ai[i]] += Ax[i]*x[j];
+
+  }
+
+  /* return success */
+  return(0);
+}
+
+
+/** 
+ * Computes y=A*x, where A is a CSR matrix of dimension MxN, x is a 
+ * realtype array of length N, and y is a realtype array of length M. 
+ * 
+ * Returns 0 if successful, -1 if unsuccessful (failed memory access).
+ */
+int SparseMatvecCSR(const SlsMat A, const realtype *x, realtype *y)
+{
+  int j, i;
+  int *Ap, *Aj;
+  realtype *Ax;
+
+  /* access data from CSR structure (return if failure) */
+  if (*A->rowptrs)  Ap = A->indexptrs;
+  else  return(-1);
+  if (*A->colvals)  Aj = A->indexvals;
+  else  return(-1);
+  if (A->data)      Ax = A->data;
+  else  return(-1);
+
+  /* ensure that vectors are non-NULL */
+  if ((x == NULL) || (y == NULL))
+    return(-1);
+
+  /* initialize result */
+  for (i=0; i<A->M; i++)
+    y[i] = 0.0;
+
+  /* iterate through matrix rows */
+  for (i=0; i<A->M; ++i) {
+
+    /* iterate along row of A, performing product */
+    for (j=Ap[i]; j<Ap[i+1]; ++j)
+      y[i] += Ax[j]*x[Aj[j]];
+
+  }
+
+  /* return success */
+  return(0);
+}
+
+
diff --git a/src/sundials/sundials_spbcgs.c b/src/sundials/sundials_spbcgs.c
new file mode 100644
index 0000000..bbec881
--- /dev/null
+++ b/src/sundials/sundials_spbcgs.c
@@ -0,0 +1,384 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4507 $
+ * $Date: 2015-06-24 08:47:04 -0700 (Wed, 24 Jun 2015) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Peter Brown and Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the scaled, preconditioned
+ * Bi-CGSTAB (SPBCG) iterative linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_spbcgs.h>
+#include <sundials/sundials_math.h>
+
+/*
+ * -----------------------------------------------------------------
+ * private constants
+ * -----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpbcgMalloc
+ * -----------------------------------------------------------------
+ */
+
+SpbcgMem SpbcgMalloc(int l_max, N_Vector vec_tmpl)
+{
+  SpbcgMem mem;
+  N_Vector r_star, r, p, q, u, Ap, vtemp;
+
+  /* Check the input parameters */
+
+  if (l_max <= 0) return(NULL);
+
+  /* Get arrays to hold temporary vectors */
+
+  r_star = N_VClone(vec_tmpl);
+  if (r_star == NULL) {
+    return(NULL);
+  }
+
+  r = N_VClone(vec_tmpl);
+  if (r == NULL) {
+    N_VDestroy(r_star);
+    return(NULL);
+  }
+
+  p = N_VClone(vec_tmpl);
+  if (p == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(r);
+    return(NULL);
+  }
+
+  q = N_VClone(vec_tmpl);
+  if (q == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(r);
+    N_VDestroy(p);
+    return(NULL);
+  }
+
+  u = N_VClone(vec_tmpl);
+  if (u == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(r);
+    N_VDestroy(p);
+    N_VDestroy(q);
+    return(NULL);
+  }
+
+  Ap = N_VClone(vec_tmpl);
+  if (Ap == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(r);
+    N_VDestroy(p);
+    N_VDestroy(q);
+    N_VDestroy(u);
+    return(NULL);
+  }
+
+  vtemp = N_VClone(vec_tmpl);
+  if (vtemp == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(r);
+    N_VDestroy(p);
+    N_VDestroy(q);
+    N_VDestroy(u);
+    N_VDestroy(Ap);
+    return(NULL);
+  }
+
+  /* Get memory for an SpbcgMemRec containing SPBCG matrices and vectors */
+
+  mem = NULL;
+  mem = (SpbcgMem) malloc(sizeof(SpbcgMemRec));
+  if (mem == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(r);
+    N_VDestroy(p);
+    N_VDestroy(q);
+    N_VDestroy(u);
+    N_VDestroy(Ap);
+    N_VDestroy(vtemp);
+    return(NULL);
+  }
+
+  /* Set the fields of mem */
+
+  mem->l_max  = l_max;
+  mem->r_star = r_star;
+  mem->r      = r;
+  mem->p      = p;
+  mem->q      = q;
+  mem->u      = u;
+  mem->Ap     = Ap;
+  mem->vtemp  = vtemp;
+
+  /* Return the pointer to SPBCG memory */
+
+  return(mem);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpbcgSolve
+ * -----------------------------------------------------------------
+ */
+
+int SpbcgSolve(SpbcgMem mem, void *A_data, N_Vector x, N_Vector b,
+               int pretype, realtype delta, void *P_data, N_Vector sx,
+               N_Vector sb, ATimesFn atimes, PSolveFn psolve,
+               realtype *res_norm, int *nli, int *nps)
+{
+  realtype alpha, beta, omega, omega_denom, beta_num, beta_denom, r_norm, rho;
+  N_Vector r_star, r, p, q, u, Ap, vtemp;
+  booleantype preOnLeft, preOnRight, scale_x, scale_b, converged;
+  int l, l_max, ier;
+
+  if (mem == NULL) return(SPBCG_MEM_NULL);
+
+  /* Make local copies of mem variables */
+
+  l_max  = mem->l_max;
+  r_star = mem->r_star;
+  r      = mem->r;
+  p      = mem->p;
+  q      = mem->q;
+  u      = mem->u;
+  Ap     = mem->Ap;
+  vtemp  = mem->vtemp;
+
+  *nli = *nps = 0;    /* Initialize counters */
+  converged = FALSE;  /* Initialize converged flag */
+
+  if ((pretype != PREC_LEFT) && (pretype != PREC_RIGHT) && (pretype != PREC_BOTH)) pretype = PREC_NONE;
+
+  preOnLeft  = ((pretype == PREC_BOTH) || (pretype == PREC_LEFT));
+  preOnRight = ((pretype == PREC_BOTH) || (pretype == PREC_RIGHT));
+
+  scale_x = (sx != NULL);
+  scale_b = (sb != NULL);
+
+  /* Set r_star to initial (unscaled) residual r_0 = b - A*x_0 */
+
+  if (N_VDotProd(x, x) == ZERO) N_VScale(ONE, b, r_star);
+  else {
+    ier = atimes(A_data, x, r_star);
+    if (ier != 0)
+      return((ier < 0) ? SPBCG_ATIMES_FAIL_UNREC : SPBCG_ATIMES_FAIL_REC);
+    N_VLinearSum(ONE, b, -ONE, r_star, r_star);
+  }
+
+  /* Apply left preconditioner and b-scaling to r_star = r_0 */
+
+  if (preOnLeft) {
+    ier = psolve(P_data, r_star, r, PREC_LEFT);
+    (*nps)++;
+    if (ier != 0) return((ier < 0) ? SPBCG_PSOLVE_FAIL_UNREC : SPBCG_PSOLVE_FAIL_REC);
+  }
+  else N_VScale(ONE, r_star, r);
+
+  if (scale_b) N_VProd(sb, r, r_star);
+  else N_VScale(ONE, r, r_star);
+
+  /* Initialize beta_denom to the dot product of r0 with r0 */
+
+  beta_denom = N_VDotProd(r_star, r_star);
+
+  /* Set r_norm to L2 norm of r_star = sb P1_inv r_0, and
+     return if small */
+
+  *res_norm = r_norm = rho = SUNRsqrt(beta_denom);
+  if (r_norm <= delta) return(SPBCG_SUCCESS);
+
+  /* Copy r_star to r and p */
+
+  N_VScale(ONE, r_star, r);
+  N_VScale(ONE, r_star, p);
+
+  /* Begin main iteration loop */
+
+  for(l = 0; l < l_max; l++) {
+
+    (*nli)++;
+
+    /* Generate Ap = A-tilde p, where A-tilde = sb P1_inv A P2_inv sx_inv */
+
+    /*   Apply x-scaling: vtemp = sx_inv p */
+
+    if (scale_x) N_VDiv(p, sx, vtemp);
+    else N_VScale(ONE, p, vtemp);
+
+    /*   Apply right preconditioner: vtemp = P2_inv sx_inv p */
+
+    if (preOnRight) {
+      N_VScale(ONE, vtemp, Ap);
+      ier = psolve(P_data, Ap, vtemp, PREC_RIGHT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? SPBCG_PSOLVE_FAIL_UNREC : SPBCG_PSOLVE_FAIL_REC);
+    }
+
+    /*   Apply A: Ap = A P2_inv sx_inv p */
+
+    ier = atimes(A_data, vtemp, Ap );
+    if (ier != 0)
+      return((ier < 0) ? SPBCG_ATIMES_FAIL_UNREC : SPBCG_ATIMES_FAIL_REC);
+
+    /*   Apply left preconditioner: vtemp = P1_inv A P2_inv sx_inv p */
+
+    if (preOnLeft) {
+      ier = psolve(P_data, Ap, vtemp, PREC_LEFT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? SPBCG_PSOLVE_FAIL_UNREC : SPBCG_PSOLVE_FAIL_REC);
+    }
+    else N_VScale(ONE, Ap, vtemp);
+
+    /*   Apply b-scaling: Ap = sb P1_inv A P2_inv sx_inv p */
+
+    if (scale_b) N_VProd(sb, vtemp, Ap);
+    else N_VScale(ONE, vtemp, Ap);
+
+
+    /* Calculate alpha = <r,r_star>/<Ap,r_star> */
+
+    alpha = ((beta_denom / N_VDotProd(Ap, r_star)));
+
+    /* Update q = r - alpha*Ap = r - alpha*(sb P1_inv A P2_inv sx_inv p) */
+
+    N_VLinearSum(ONE, r, -alpha, Ap, q);
+
+    /* Generate u = A-tilde q */
+
+    /*   Apply x-scaling: vtemp = sx_inv q */
+
+    if (scale_x) N_VDiv(q, sx, vtemp);
+    else N_VScale(ONE, q, vtemp);
+
+    /*   Apply right preconditioner: vtemp = P2_inv sx_inv q */
+
+    if (preOnRight) {
+      N_VScale(ONE, vtemp, u);
+      ier = psolve(P_data, u, vtemp, PREC_RIGHT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? SPBCG_PSOLVE_FAIL_UNREC : SPBCG_PSOLVE_FAIL_REC);
+    }
+
+    /*   Apply A: u = A P2_inv sx_inv u */
+
+    ier = atimes(A_data, vtemp, u );
+    if (ier != 0)
+      return((ier < 0) ? SPBCG_ATIMES_FAIL_UNREC : SPBCG_ATIMES_FAIL_REC);
+
+    /*   Apply left preconditioner: vtemp = P1_inv A P2_inv sx_inv p */
+
+    if (preOnLeft) {
+      ier = psolve(P_data, u, vtemp, PREC_LEFT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? SPBCG_PSOLVE_FAIL_UNREC : SPBCG_PSOLVE_FAIL_REC);
+    }
+    else N_VScale(ONE, u, vtemp);
+
+    /*   Apply b-scaling: u = sb P1_inv A P2_inv sx_inv u */
+
+    if (scale_b) N_VProd(sb, vtemp, u);
+    else N_VScale(ONE, vtemp, u);
+
+
+    /* Calculate omega = <u,q>/<u,u> */
+
+    omega_denom = N_VDotProd(u, u);
+    if (omega_denom == ZERO) omega_denom = ONE;
+    omega = (N_VDotProd(u, q) / omega_denom);
+
+    /* Update x = x + alpha*p + omega*q */
+
+    N_VLinearSum(alpha, p, omega, q, vtemp);
+    N_VLinearSum(ONE, x, ONE, vtemp, x);
+
+    /* Update the residual r = q - omega*u */
+
+    N_VLinearSum(ONE, q, -omega, u, r);
+
+    /* Set rho = norm(r) and check convergence */
+
+    *res_norm = rho = SUNRsqrt(N_VDotProd(r, r));
+    if (rho <= delta) {
+      converged = TRUE;
+      break;
+    }
+
+    /* Not yet converged, continue iteration */
+    /* Update beta = <rnew,r_star> / <rold,r_start> * alpha / omega */
+
+    beta_num = N_VDotProd(r, r_star);
+    beta = ((beta_num / beta_denom) * (alpha / omega));
+    beta_denom = beta_num;
+
+    /* Update p = r + beta*(p - omega*Ap) */
+
+    N_VLinearSum(ONE, p, -omega, Ap, vtemp);
+    N_VLinearSum(ONE, r, beta, vtemp, p);
+
+  }
+
+  /* Main loop finished */
+
+  if ((converged == TRUE) || (rho < r_norm)) {
+
+    /* Apply the x-scaling and right preconditioner: x = P2_inv sx_inv x */
+
+    if (scale_x) N_VDiv(x, sx, x);
+    if (preOnRight) {
+      ier = psolve(P_data, x, vtemp, PREC_RIGHT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? SPBCG_PSOLVE_FAIL_UNREC : SPBCG_PSOLVE_FAIL_REC);
+      N_VScale(ONE, vtemp, x);
+    }
+
+    if (converged == TRUE) return(SPBCG_SUCCESS);
+    else return(SPBCG_RES_REDUCED);
+  }
+  else return(SPBCG_CONV_FAIL);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpbcgFree
+ * -----------------------------------------------------------------
+ */
+
+void SpbcgFree(SpbcgMem mem)
+{
+
+  if (mem == NULL) return;
+
+  N_VDestroy(mem->r_star);
+  N_VDestroy(mem->r);
+  N_VDestroy(mem->p);
+  N_VDestroy(mem->q);
+  N_VDestroy(mem->u);
+  N_VDestroy(mem->Ap);
+  N_VDestroy(mem->vtemp);
+
+  free(mem); mem = NULL;
+}
diff --git a/src/sundials/sundials_spfgmr.c b/src/sundials/sundials_spfgmr.c
new file mode 100644
index 0000000..3edf7fd
--- /dev/null
+++ b/src/sundials/sundials_spfgmr.c
@@ -0,0 +1,364 @@
+/*----------------------------------------------------------------
+ Programmer(s): Daniel R. Reynolds and Hilari C. Tiedeman @ SMU
+ -----------------------------------------------------------------
+ Copyright (c) 2011, Southern Methodist University.
+ All rights reserved.
+ For details, see the LICENSE file.
+ -------------------------------------------------------------------
+ This is the implementation file for the scaled preconditioned
+ FGMRES (SPFGMR) iterative linear solver.
+ ---------------------------------------------------------------*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <sundials/sundials_spfgmr.h>
+#include <sundials/sundials_math.h>
+
+/*----------------------------------------------------------------
+ private constants
+ ---------------------------------------------------------------*/
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/*----------------------------------------------------------------
+ Function : SpfgmrMalloc
+ ---------------------------------------------------------------*/
+SpfgmrMem SpfgmrMalloc(int l_max, N_Vector vec_tmpl)
+{
+  SpfgmrMem mem;
+  N_Vector *V, *Z, xcor, vtemp;
+  realtype **Hes, *givens, *yg;
+  int k, i;
+ 
+  /* Check the input parameters. */
+  if (l_max <= 0) return(NULL);
+
+  /* Get memory for the Krylov basis vectors V[0], ..., V[l_max]. */
+  V = N_VCloneVectorArray(l_max+1, vec_tmpl);
+  if (V == NULL) return(NULL);
+
+  /* Get memory for the preconditioned basis vectors Z[0], ..., Z[l_max]. */
+  Z = N_VCloneVectorArray(l_max+1, vec_tmpl);
+  if (Z == NULL) {
+    N_VDestroyVectorArray(V, l_max+1);
+    return(NULL);
+  }
+
+  /* Get memory for the Hessenberg matrix Hes. */
+  Hes = NULL;
+  Hes = (realtype **) malloc((l_max+1)*sizeof(realtype *)); 
+  if (Hes == NULL) {
+    N_VDestroyVectorArray(V, l_max+1);
+    N_VDestroyVectorArray(Z, l_max+1);
+    return(NULL);
+  }
+  for (k=0; k<=l_max; k++) {
+    Hes[k] = NULL;
+    Hes[k] = (realtype *) malloc(l_max*sizeof(realtype));
+    if (Hes[k] == NULL) {
+      for (i=0; i<k; i++) {free(Hes[i]); Hes[i] = NULL;}
+      free(Hes); Hes = NULL;
+      N_VDestroyVectorArray(V, l_max+1);
+      N_VDestroyVectorArray(Z, l_max+1);
+      return(NULL);
+    }
+  }
+  
+  /* Get memory for Givens rotation components. */
+  givens = NULL;
+  givens = (realtype *) malloc(2*l_max*sizeof(realtype));
+  if (givens == NULL) {
+    for (i=0; i<=l_max; i++) {free(Hes[i]); Hes[i] = NULL;}
+    free(Hes); Hes = NULL;
+    N_VDestroyVectorArray(V, l_max+1);
+    N_VDestroyVectorArray(Z, l_max+1);
+    return(NULL);
+  }
+
+  /* Get memory to hold the correction to z_tilde. */
+  xcor = N_VClone(vec_tmpl);
+  if (xcor == NULL) {
+    free(givens); givens = NULL;
+    for (i=0; i<=l_max; i++) {free(Hes[i]); Hes[i] = NULL;}
+    free(Hes); Hes = NULL;
+    N_VDestroyVectorArray(V, l_max+1);
+    N_VDestroyVectorArray(Z, l_max+1);
+    return(NULL);
+  }
+
+  /* Get memory to hold SPFGMR y and g vectors. */
+  yg = NULL;
+  yg = (realtype *) malloc((l_max+1)*sizeof(realtype));
+  if (yg == NULL) {
+    N_VDestroy(xcor);
+    free(givens); givens = NULL;
+    for (i=0; i<=l_max; i++) {free(Hes[i]); Hes[i] = NULL;}
+    free(Hes); Hes = NULL;
+    N_VDestroyVectorArray(V, l_max+1);
+    N_VDestroyVectorArray(Z, l_max+1);
+    return(NULL);
+  }
+
+  /* Get an array to hold a temporary vector. */
+  vtemp = N_VClone(vec_tmpl);
+  if (vtemp == NULL) {
+    free(yg); yg = NULL;
+    N_VDestroy(xcor);
+    free(givens); givens = NULL;
+    for (i=0; i<=l_max; i++) {free(Hes[i]); Hes[i] = NULL;}
+    free(Hes); Hes = NULL;
+    N_VDestroyVectorArray(V, l_max+1);
+    N_VDestroyVectorArray(Z, l_max+1);
+    return(NULL);
+  }
+
+  /* Get memory for an SpfgmrMemRec containing SPFGMR matrices and vectors. */
+  mem = NULL;
+  mem = (SpfgmrMem) malloc(sizeof(SpfgmrMemRec));
+  if (mem == NULL) {
+    N_VDestroy(vtemp);
+    free(yg); yg = NULL;
+    N_VDestroy(xcor);
+    free(givens); givens = NULL;
+    for (i=0; i<=l_max; i++) {free(Hes[i]); Hes[i] = NULL;}
+    free(Hes); Hes = NULL;
+    N_VDestroyVectorArray(V, l_max+1);
+    N_VDestroyVectorArray(Z, l_max+1);
+    return(NULL); 
+  }
+
+  /* Set the fields of mem. */
+  mem->l_max = l_max;
+  mem->V = V;
+  mem->Z = Z;
+  mem->Hes = Hes;
+  mem->givens = givens;
+  mem->xcor = xcor;
+  mem->yg = yg;
+  mem->vtemp = vtemp;
+
+  /* Return the pointer to SPFGMR memory. */
+  return(mem);
+}
+
+/*----------------------------------------------------------------
+ Function : SpfgmrSolve
+ ---------------------------------------------------------------*/
+int SpfgmrSolve(SpfgmrMem mem, void *A_data, N_Vector x, 
+		N_Vector b, int pretype, int gstype, realtype delta, 
+		int max_restarts, int maxit, void *P_data, 
+		N_Vector s1, N_Vector s2, ATimesFn atimes, 
+		PSolveFn psolve, realtype *res_norm, int *nli, int *nps)
+{
+  N_Vector *V, *Z, xcor, vtemp;
+  realtype **Hes, *givens, *yg;
+  realtype beta, rotation_product, r_norm, s_product, rho;
+  booleantype preOnRight, scale1, scale2, converged;
+  int i, j, k, l, l_max, krydim, ier, ntries;
+
+  if (mem == NULL) return(SPFGMR_MEM_NULL);
+
+  /* Initialize some variables */
+  krydim = 0;
+
+  /* Make local copies of mem variables. */
+  l_max  = mem->l_max;
+  V      = mem->V;
+  Z      = mem->Z;
+  Hes    = mem->Hes;
+  givens = mem->givens;
+  xcor   = mem->xcor;
+  yg     = mem->yg;
+  vtemp  = mem->vtemp;
+
+  *nli = *nps = 0;    /* Initialize counters */
+  converged = FALSE;  /* Initialize converged flag */
+
+  /* If maxit is greater than l_max, then set maxit=l_max */
+  if (maxit > l_max)  maxit = l_max;
+
+  /* Check for legal value of max_restarts */
+  if (max_restarts < 0)  max_restarts = 0;
+
+  /* Set preconditioning flag (enabling any preconditioner implies right 
+     preconditioning, since FGMRES does not support left preconditioning) */
+  preOnRight = ((pretype == PREC_RIGHT) || (pretype == PREC_BOTH) || (pretype == PREC_LEFT));
+
+  /* Set scaling flags */
+  scale1 = (s1 != NULL);
+  scale2 = (s2 != NULL);
+
+  /* Set vtemp to initial (unscaled) residual r_0 = b - A*x_0. */
+  if (N_VDotProd(x, x) == ZERO) {
+    N_VScale(ONE, b, vtemp);
+  } else {
+    ier = atimes(A_data, x, vtemp);
+    if (ier != 0)
+      return((ier < 0) ? SPFGMR_ATIMES_FAIL_UNREC : SPFGMR_ATIMES_FAIL_REC);
+    N_VLinearSum(ONE, b, -ONE, vtemp, vtemp);
+  }
+
+  /* Apply left scaling to vtemp = r_0 to fill V[0]. */
+  if (scale1) {
+    N_VProd(s1, vtemp, V[0]);   
+  } else {
+    N_VScale(ONE, vtemp, V[0]);
+  }
+
+  /* Set r_norm = beta to L2 norm of V[0] = s1 r_0, and return if small */
+  *res_norm = r_norm = beta = SUNRsqrt(N_VDotProd(V[0], V[0]));
+  if (r_norm <= delta)
+    return(SPFGMR_SUCCESS);
+
+  /* Initialize rho to avoid compiler warning message */
+  rho = beta;
+
+  /* Set xcor = 0. */
+  N_VConst(ZERO, xcor);
+
+  /* Begin outer iterations: up to (max_restarts + 1) attempts. */
+  for (ntries=0; ntries<=max_restarts; ntries++) {
+    
+    /* Initialize the Hessenberg matrix Hes and Givens rotation
+       product.  Normalize the initial vector V[0].             */
+    for (i=0; i<=l_max; i++)
+      for (j=0; j<l_max; j++)
+        Hes[i][j] = ZERO;
+    rotation_product = ONE;
+    N_VScale(ONE/r_norm, V[0], V[0]);
+    
+    /* Inner loop: generate Krylov sequence and Arnoldi basis. */
+    for (l=0; l<maxit; l++) {
+      
+      (*nli)++;
+      
+      krydim = l + 1;
+      
+      /* Generate A-tilde V[l], where A-tilde = s1 A P_inv s2_inv. */
+
+      /*   Apply right scaling: vtemp = s2_inv V[l]. */
+      if (scale2) N_VDiv(V[l], s2, vtemp);
+      else N_VScale(ONE, V[l], vtemp);
+      
+      /*   Apply right preconditioner: vtemp = Z[l] = P_inv s2_inv V[l]. */ 
+      if (preOnRight) {
+        N_VScale(ONE, vtemp, V[l+1]);
+        ier = psolve(P_data, V[l+1], vtemp, PREC_RIGHT);
+        (*nps)++;
+        if (ier != 0)
+          return((ier < 0) ? SPFGMR_PSOLVE_FAIL_UNREC : SPFGMR_PSOLVE_FAIL_REC);
+      }
+      N_VScale(ONE, vtemp, Z[l]);
+      
+      /*   Apply A: V[l+1] = A P_inv s2_inv V[l]. */
+      ier = atimes(A_data, vtemp, V[l+1]);
+      if (ier != 0)
+        return((ier < 0) ? SPFGMR_ATIMES_FAIL_UNREC : SPFGMR_ATIMES_FAIL_REC);
+
+      /*   Apply left scaling: V[l+1] = s1 A P_inv s2_inv V[l]. */
+      if (scale1)  N_VProd(s1, V[l+1], V[l+1]);
+      
+      /* Orthogonalize V[l+1] against previous V[i]: V[l+1] = w_tilde. */
+      if (gstype == CLASSICAL_GS) {
+        if (ClassicalGS(V, Hes, l+1, l_max, &(Hes[l+1][l]),
+                        vtemp, yg) != 0)
+          return(SPFGMR_GS_FAIL);
+      } else {
+        if (ModifiedGS(V, Hes, l+1, l_max, &(Hes[l+1][l])) != 0) 
+          return(SPFGMR_GS_FAIL);
+      }
+      
+      /* Update the QR factorization of Hes. */
+      if(QRfact(krydim, Hes, givens, l) != 0 )
+        return(SPFGMR_QRFACT_FAIL);
+      
+      /* Update residual norm estimate; break if convergence test passes. */
+      rotation_product *= givens[2*l+1];
+      *res_norm = rho = SUNRabs(rotation_product*r_norm);
+      if (rho <= delta) { converged = TRUE; break; }
+      
+      /* Normalize V[l+1] with norm value from the Gram-Schmidt routine. */
+      N_VScale(ONE/Hes[l+1][l], V[l+1], V[l+1]);
+    }
+    
+    /* Inner loop is done.  Compute the new correction vector xcor. */
+    
+    /*   Construct g, then solve for y. */
+    yg[0] = r_norm;
+    for (i=1; i<=krydim; i++)  yg[i]=ZERO;
+    if (QRsol(krydim, Hes, givens, yg) != 0)
+      return(SPFGMR_QRSOL_FAIL);
+    
+    /*   Add correction vector Z_l y to xcor. */
+    for (k=0; k<krydim; k++)
+      N_VLinearSum(yg[k], Z[k], ONE, xcor, xcor);
+    
+    /* If converged, construct the final solution vector x and return. */
+    if (converged) {
+      N_VLinearSum(ONE, x, ONE, xcor, x);
+      return(SPFGMR_SUCCESS);
+    }
+    
+    /* Not yet converged; if allowed, prepare for restart. */
+    if (ntries == max_restarts) break;
+    
+    /* Construct last column of Q in yg. */
+    s_product = ONE;
+    for (i=krydim; i>0; i--) {
+      yg[i] = s_product*givens[2*i-2];
+      s_product *= givens[2*i-1];
+    }
+    yg[0] = s_product;
+    
+    /* Scale r_norm and yg. */
+    r_norm *= s_product;
+    for (i=0; i<=krydim; i++)
+      yg[i] *= r_norm;
+    r_norm = SUNRabs(r_norm);
+    
+    /* Multiply yg by V_(krydim+1) to get last residual vector; restart. */
+    N_VScale(yg[0], V[0], V[0]);
+    for (k=1; k<=krydim; k++)
+      N_VLinearSum(yg[k], V[k], ONE, V[0], V[0]);
+    
+  }
+  
+  /* Failed to converge, even after allowed restarts.
+     If the residual norm was reduced below its initial value, compute
+     and return x anyway.  Otherwise return failure flag. */
+  if (rho < beta) {
+    N_VLinearSum(ONE, x, ONE, xcor, x);
+    return(SPFGMR_RES_REDUCED);
+  }
+
+  return(SPFGMR_CONV_FAIL); 
+}
+
+/*----------------------------------------------------------------
+ Function : SpfgmrFree
+ ---------------------------------------------------------------*/
+void SpfgmrFree(SpfgmrMem mem)
+{
+  int i;
+
+  if (mem == NULL) return;
+
+  for (i=0; i<=mem->l_max; i++) {
+    free(mem->Hes[i]); 
+    mem->Hes[i] = NULL;
+  }
+  free(mem->Hes); mem->Hes = NULL;
+  free(mem->givens); mem->givens = NULL; 
+  free(mem->yg); mem->yg = NULL;
+
+  N_VDestroyVectorArray(mem->V, mem->l_max+1);
+  N_VDestroyVectorArray(mem->Z, mem->l_max+1);
+  N_VDestroy(mem->xcor);
+  N_VDestroy(mem->vtemp);
+
+  free(mem); mem = NULL;
+}
+
+
+/*===============================================================
+   EOF
+===============================================================*/
diff --git a/src/sundials/sundials_spgmr.c b/src/sundials/sundials_spgmr.c
new file mode 100644
index 0000000..d32718b
--- /dev/null
+++ b/src/sundials/sundials_spgmr.c
@@ -0,0 +1,459 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4294 $
+ * $Date: 2014-12-15 13:18:40 -0800 (Mon, 15 Dec 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
+ *                Radu Serban @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the scaled preconditioned
+ * GMRES (SPGMR) iterative linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_spgmr.h>
+#include <sundials/sundials_math.h>
+
+/*
+ * -----------------------------------------------------------------
+ * private constants
+ * -----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpgmrMalloc
+ * -----------------------------------------------------------------
+ */
+
+SpgmrMem SpgmrMalloc(int l_max, N_Vector vec_tmpl)
+{
+  SpgmrMem mem;
+  N_Vector *V, xcor, vtemp;
+  realtype **Hes, *givens, *yg;
+  int k, i;
+ 
+  /* Check the input parameters. */
+
+  if (l_max <= 0) return(NULL);
+
+  /* Get memory for the Krylov basis vectors V[0], ..., V[l_max]. */
+
+  V = N_VCloneVectorArray(l_max+1, vec_tmpl);
+  if (V == NULL) return(NULL);
+
+  /* Get memory for the Hessenberg matrix Hes. */
+
+  Hes = NULL;
+  Hes = (realtype **) malloc((l_max+1)*sizeof(realtype *)); 
+  if (Hes == NULL) {
+    N_VDestroyVectorArray(V, l_max+1);
+    return(NULL);
+  }
+
+  for (k = 0; k <= l_max; k++) {
+    Hes[k] = NULL;
+    Hes[k] = (realtype *) malloc(l_max*sizeof(realtype));
+    if (Hes[k] == NULL) {
+      for (i = 0; i < k; i++) {free(Hes[i]); Hes[i] = NULL;}
+      free(Hes); Hes = NULL;
+      N_VDestroyVectorArray(V, l_max+1);
+      return(NULL);
+    }
+  }
+  
+  /* Get memory for Givens rotation components. */
+  
+  givens = NULL;
+  givens = (realtype *) malloc(2*l_max*sizeof(realtype));
+  if (givens == NULL) {
+    for (i = 0; i <= l_max; i++) {free(Hes[i]); Hes[i] = NULL;}
+    free(Hes); Hes = NULL;
+    N_VDestroyVectorArray(V, l_max+1);
+    return(NULL);
+  }
+
+  /* Get memory to hold the correction to z_tilde. */
+
+  xcor = N_VClone(vec_tmpl);
+  if (xcor == NULL) {
+    free(givens); givens = NULL;
+    for (i = 0; i <= l_max; i++) {free(Hes[i]); Hes[i] = NULL;}
+    free(Hes); Hes = NULL;
+    N_VDestroyVectorArray(V, l_max+1);
+    return(NULL);
+  }
+
+  /* Get memory to hold SPGMR y and g vectors. */
+
+  yg = NULL;
+  yg = (realtype *) malloc((l_max+1)*sizeof(realtype));
+  if (yg == NULL) {
+    N_VDestroy(xcor);
+    free(givens); givens = NULL;
+    for (i = 0; i <= l_max; i++) {free(Hes[i]); Hes[i] = NULL;}
+    free(Hes); Hes = NULL;
+    N_VDestroyVectorArray(V, l_max+1);
+    return(NULL);
+  }
+
+  /* Get an array to hold a temporary vector. */
+
+  vtemp = N_VClone(vec_tmpl);
+  if (vtemp == NULL) {
+    free(yg); yg = NULL;
+    N_VDestroy(xcor);
+    free(givens); givens = NULL;
+    for (i = 0; i <= l_max; i++) {free(Hes[i]); Hes[i] = NULL;}
+    free(Hes); Hes = NULL;
+    N_VDestroyVectorArray(V, l_max+1);
+    return(NULL);
+  }
+
+  /* Get memory for an SpgmrMemRec containing SPGMR matrices and vectors. */
+
+  mem = NULL;
+  mem = (SpgmrMem) malloc(sizeof(SpgmrMemRec));
+  if (mem == NULL) {
+    N_VDestroy(vtemp);
+    free(yg); yg = NULL;
+    N_VDestroy(xcor);
+    free(givens); givens = NULL;
+    for (i = 0; i <= l_max; i++) {free(Hes[i]); Hes[i] = NULL;}
+    free(Hes); Hes = NULL;
+    N_VDestroyVectorArray(V, l_max+1);
+    return(NULL); 
+  }
+
+  /* Set the fields of mem. */
+
+  mem->l_max = l_max;
+  mem->V = V;
+  mem->Hes = Hes;
+  mem->givens = givens;
+  mem->xcor = xcor;
+  mem->yg = yg;
+  mem->vtemp = vtemp;
+
+  /* Return the pointer to SPGMR memory. */
+
+  return(mem);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpgmrSolve
+ * -----------------------------------------------------------------
+ */
+
+int SpgmrSolve(SpgmrMem mem, void *A_data, N_Vector x, N_Vector b,
+               int pretype, int gstype, realtype delta, int max_restarts,
+               void *P_data, N_Vector s1, N_Vector s2, ATimesFn atimes,
+               PSolveFn psolve, realtype *res_norm, int *nli, int *nps)
+{
+  N_Vector *V, xcor, vtemp;
+  realtype **Hes, *givens, *yg;
+  realtype beta, rotation_product, r_norm, s_product, rho;
+  booleantype preOnLeft, preOnRight, scale2, scale1, converged;
+  int i, j, k, l, l_plus_1, l_max, krydim, ier, ntries;
+
+  if (mem == NULL) return(SPGMR_MEM_NULL);
+
+  /* Initialize some variables */
+
+  l_plus_1 = 0;
+  krydim = 0;
+
+  /* Make local copies of mem variables. */
+
+  l_max  = mem->l_max;
+  V      = mem->V;
+  Hes    = mem->Hes;
+  givens = mem->givens;
+  xcor   = mem->xcor;
+  yg     = mem->yg;
+  vtemp  = mem->vtemp;
+
+  *nli = *nps = 0;    /* Initialize counters */
+  converged = FALSE;  /* Initialize converged flag */
+
+  if (max_restarts < 0) max_restarts = 0;
+
+  if ((pretype != PREC_LEFT) && (pretype != PREC_RIGHT) && (pretype != PREC_BOTH))
+    pretype = PREC_NONE;
+  
+  preOnLeft  = ((pretype == PREC_LEFT) || (pretype == PREC_BOTH));
+  preOnRight = ((pretype == PREC_RIGHT) || (pretype == PREC_BOTH));
+  scale1 = (s1 != NULL);
+  scale2 = (s2 != NULL);
+
+  /* Set vtemp and V[0] to initial (unscaled) residual r_0 = b - A*x_0. */
+
+  if (N_VDotProd(x, x) == ZERO) {
+    N_VScale(ONE, b, vtemp);
+  } else {
+    ier = atimes(A_data, x, vtemp);
+    if (ier != 0)
+      return((ier < 0) ? SPGMR_ATIMES_FAIL_UNREC : SPGMR_ATIMES_FAIL_REC);
+    N_VLinearSum(ONE, b, -ONE, vtemp, vtemp);
+  }
+  N_VScale(ONE, vtemp, V[0]);
+
+  /* Apply left preconditioner and left scaling to V[0] = r_0. */
+  
+  if (preOnLeft) {
+    ier = psolve(P_data, V[0], vtemp, PREC_LEFT);
+    (*nps)++;
+    if (ier != 0)
+      return((ier < 0) ? SPGMR_PSOLVE_FAIL_UNREC : SPGMR_PSOLVE_FAIL_REC);
+  } else {
+    N_VScale(ONE, V[0], vtemp);
+  }
+  
+  if (scale1) {
+    N_VProd(s1, vtemp, V[0]);   
+  } else {
+    N_VScale(ONE, vtemp, V[0]);
+  }
+
+  /* Set r_norm = beta to L2 norm of V[0] = s1 P1_inv r_0, and
+     return if small.  */
+
+  *res_norm = r_norm = beta = SUNRsqrt(N_VDotProd(V[0], V[0])); 
+  if (r_norm <= delta)
+    return(SPGMR_SUCCESS);
+
+  /* Initialize rho to avoid compiler warning message */
+
+  rho = beta;
+
+  /* Set xcor = 0. */
+
+  N_VConst(ZERO, xcor);
+
+
+  /* Begin outer iterations: up to (max_restarts + 1) attempts. */
+  
+  for (ntries = 0; ntries <= max_restarts; ntries++) {
+    
+    /* Initialize the Hessenberg matrix Hes and Givens rotation
+       product.  Normalize the initial vector V[0].             */
+    
+    for (i = 0; i <= l_max; i++)
+      for (j = 0; j < l_max; j++)
+        Hes[i][j] = ZERO;
+    
+    rotation_product = ONE;
+    
+    N_VScale(ONE/r_norm, V[0], V[0]);
+    
+    /* Inner loop: generate Krylov sequence and Arnoldi basis. */
+    
+    for (l = 0; l < l_max; l++) {
+      
+      (*nli)++;
+      
+      krydim = l_plus_1 = l + 1;
+      
+      /* Generate A-tilde V[l], where A-tilde = s1 P1_inv A P2_inv s2_inv. */
+      
+      /* Apply right scaling: vtemp = s2_inv V[l]. */
+
+      if (scale2) N_VDiv(V[l], s2, vtemp);
+      else N_VScale(ONE, V[l], vtemp);
+      
+      /* Apply right preconditioner: vtemp = P2_inv s2_inv V[l]. */ 
+
+      if (preOnRight) {
+        N_VScale(ONE, vtemp, V[l_plus_1]);
+        ier = psolve(P_data, V[l_plus_1], vtemp, PREC_RIGHT);
+        (*nps)++;
+        if (ier != 0)
+          return((ier < 0) ? SPGMR_PSOLVE_FAIL_UNREC : SPGMR_PSOLVE_FAIL_REC);
+      }
+      
+      /* Apply A: V[l+1] = A P2_inv s2_inv V[l]. */
+
+      ier = atimes(A_data, vtemp, V[l_plus_1] );
+      if (ier != 0)
+        return((ier < 0) ? SPGMR_ATIMES_FAIL_UNREC : SPGMR_ATIMES_FAIL_REC);
+      
+      /* Apply left preconditioning: vtemp = P1_inv A P2_inv s2_inv V[l]. */
+
+      if (preOnLeft) {
+        ier = psolve(P_data, V[l_plus_1], vtemp, PREC_LEFT);
+        (*nps)++;
+        if (ier != 0)
+          return((ier < 0) ? SPGMR_PSOLVE_FAIL_UNREC : SPGMR_PSOLVE_FAIL_REC);
+      } else {
+        N_VScale(ONE, V[l_plus_1], vtemp);
+      }
+      
+      /* Apply left scaling: V[l+1] = s1 P1_inv A P2_inv s2_inv V[l]. */
+
+      if (scale1) {
+        N_VProd(s1, vtemp, V[l_plus_1]);
+      } else {
+        N_VScale(ONE, vtemp, V[l_plus_1]);
+      }
+      
+      /*  Orthogonalize V[l+1] against previous V[i]: V[l+1] = w_tilde. */
+      
+      if (gstype == CLASSICAL_GS) {
+        if (ClassicalGS(V, Hes, l_plus_1, l_max, &(Hes[l_plus_1][l]),
+                        vtemp, yg) != 0)
+          return(SPGMR_GS_FAIL);
+      } else {
+        if (ModifiedGS(V, Hes, l_plus_1, l_max, &(Hes[l_plus_1][l])) != 0) 
+          return(SPGMR_GS_FAIL);
+      }
+      
+      /*  Update the QR factorization of Hes. */
+      
+      if(QRfact(krydim, Hes, givens, l) != 0 )
+        return(SPGMR_QRFACT_FAIL);
+      
+      /*  Update residual norm estimate; break if convergence test passes. */
+      
+      rotation_product *= givens[2*l+1];
+      *res_norm = rho = SUNRabs(rotation_product*r_norm);
+      
+      if (rho <= delta) { converged = TRUE; break; }
+      
+      /* Normalize V[l+1] with norm value from the Gram-Schmidt routine. */
+
+      N_VScale(ONE/Hes[l_plus_1][l], V[l_plus_1], V[l_plus_1]);
+    }
+    
+    /* Inner loop is done.  Compute the new correction vector xcor. */
+    
+    /* Construct g, then solve for y. */
+
+    yg[0] = r_norm;
+    for (i = 1; i <= krydim; i++) yg[i]=ZERO;
+    if (QRsol(krydim, Hes, givens, yg) != 0)
+      return(SPGMR_QRSOL_FAIL);
+    
+    /* Add correction vector V_l y to xcor. */
+
+    for (k = 0; k < krydim; k++)
+      N_VLinearSum(yg[k], V[k], ONE, xcor, xcor);
+    
+    /* If converged, construct the final solution vector x and return. */
+
+    if (converged) {
+      
+      /* Apply right scaling and right precond.: vtemp = P2_inv s2_inv xcor. */
+      
+      if (scale2) N_VDiv(xcor, s2, xcor);
+      if (preOnRight) {
+        ier = psolve(P_data, xcor, vtemp, PREC_RIGHT);
+        (*nps)++;
+        if (ier != 0)
+          return((ier < 0) ? SPGMR_PSOLVE_FAIL_UNREC : SPGMR_PSOLVE_FAIL_REC);
+      } else {
+        N_VScale(ONE, xcor, vtemp);
+      }
+      
+      /* Add vtemp to initial x to get final solution x, and return */
+
+      N_VLinearSum(ONE, x, ONE, vtemp, x);
+      
+      return(SPGMR_SUCCESS);
+    }
+    
+    /* Not yet converged; if allowed, prepare for restart. */
+    
+    if (ntries == max_restarts) break;
+    
+    /* Construct last column of Q in yg. */
+
+    s_product = ONE;
+    for (i = krydim; i > 0; i--) {
+      yg[i] = s_product*givens[2*i-2];
+      s_product *= givens[2*i-1];
+    }
+    yg[0] = s_product;
+    
+    /* Scale r_norm and yg. */
+    r_norm *= s_product;
+    for (i = 0; i <= krydim; i++)
+      yg[i] *= r_norm;
+    r_norm = SUNRabs(r_norm);
+    
+    /* Multiply yg by V_(krydim+1) to get last residual vector; restart. */
+    N_VScale(yg[0], V[0], V[0]);
+    for (k = 1; k <= krydim; k++)
+      N_VLinearSum(yg[k], V[k], ONE, V[0], V[0]);
+    
+  }
+  
+  /* Failed to converge, even after allowed restarts.
+     If the residual norm was reduced below its initial value, compute
+     and return x anyway.  Otherwise return failure flag. */
+
+  if (rho < beta) {
+    
+    /* Apply right scaling and right precond.: vtemp = P2_inv s2_inv xcor. */
+    
+    if (scale2) N_VDiv(xcor, s2, xcor);
+    if (preOnRight) {
+      ier = psolve(P_data, xcor, vtemp, PREC_RIGHT);
+      (*nps)++;
+      if (ier != 0)
+        return((ier < 0) ? SPGMR_PSOLVE_FAIL_UNREC : SPGMR_PSOLVE_FAIL_REC);
+      } else {
+      N_VScale(ONE, xcor, vtemp);
+    }
+
+    /* Add vtemp to initial x to get final solution x, and return. */
+
+    N_VLinearSum(ONE, x, ONE, vtemp, x);
+    
+    return(SPGMR_RES_REDUCED);
+  }
+
+  return(SPGMR_CONV_FAIL); 
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SpgmrFree
+ * -----------------------------------------------------------------
+ */
+
+void SpgmrFree(SpgmrMem mem)
+{
+  int i, l_max;
+  
+  if (mem == NULL) return;
+
+  l_max  = mem->l_max;
+
+  for (i = 0; i <= l_max; i++) {free(mem->Hes[i]);}
+  free(mem->Hes);
+  free(mem->givens);
+  free(mem->yg);
+
+  N_VDestroyVectorArray(mem->V, l_max+1);
+  N_VDestroy(mem->xcor);
+  N_VDestroy(mem->vtemp);
+
+  free(mem); mem = NULL;
+}
diff --git a/src/sundials/sundials_sptfqmr.c b/src/sundials/sundials_sptfqmr.c
new file mode 100644
index 0000000..2aa360f
--- /dev/null
+++ b/src/sundials/sundials_sptfqmr.c
@@ -0,0 +1,521 @@
+/*
+ * -----------------------------------------------------------------
+ * $Revision: 4272 $
+ * $Date: 2014-12-02 11:19:41 -0800 (Tue, 02 Dec 2014) $
+ * -----------------------------------------------------------------
+ * Programmer(s): Aaron Collier @ LLNL
+ * -----------------------------------------------------------------
+ * LLNS Copyright Start
+ * Copyright (c) 2014, Lawrence Livermore National Security
+ * This work was performed under the auspices of the U.S. Department 
+ * of Energy by Lawrence Livermore National Laboratory in part under 
+ * Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+ * Produced at the Lawrence Livermore National Laboratory.
+ * All rights reserved.
+ * For details, see the LICENSE file.
+ * LLNS Copyright End
+ * -----------------------------------------------------------------
+ * This is the implementation file for the scaled preconditioned
+ * Transpose-Free Quasi-Minimal Residual (SPTFQMR) linear solver.
+ * -----------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sundials/sundials_sptfqmr.h>
+#include <sundials/sundials_math.h>
+
+/*
+ * -----------------------------------------------------------------
+ * private constants
+ * -----------------------------------------------------------------
+ */
+
+#define ZERO RCONST(0.0)
+#define ONE  RCONST(1.0)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SptfqmrMalloc
+ * -----------------------------------------------------------------
+ */
+
+SptfqmrMem SptfqmrMalloc(int l_max, N_Vector vec_tmpl)
+{
+  SptfqmrMem mem;
+  N_Vector *r;
+  N_Vector q, d, v, p, u;
+  N_Vector r_star, vtemp1, vtemp2, vtemp3;
+
+  /* Check the input parameters */
+  if ((l_max <= 0) || (vec_tmpl == NULL)) return(NULL);
+
+  /* Allocate space for vectors */
+
+  r_star = N_VClone(vec_tmpl);
+  if (r_star == NULL) return(NULL);
+
+  q = N_VClone(vec_tmpl);
+  if (q == NULL) {
+    N_VDestroy(r_star);
+    return(NULL);
+  }
+
+  d = N_VClone(vec_tmpl);
+  if (d == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(q);
+    return(NULL);
+  }
+
+  v = N_VClone(vec_tmpl);
+  if (v == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(q);
+    N_VDestroy(d);
+    return(NULL);
+  }
+
+  p = N_VClone(vec_tmpl);
+  if (p == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(q);
+    N_VDestroy(d);
+    N_VDestroy(v);
+    return(NULL);
+  }
+
+  r = N_VCloneVectorArray(2, vec_tmpl);
+  if (r == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(q);
+    N_VDestroy(d);
+    N_VDestroy(v);
+    N_VDestroy(p);
+    return(NULL);
+  }
+
+  u = N_VClone(vec_tmpl);
+  if (u == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(q);
+    N_VDestroy(d);
+    N_VDestroy(v);
+    N_VDestroy(p);
+    N_VDestroyVectorArray(r, 2);
+    return(NULL);
+  }
+
+  vtemp1 = N_VClone(vec_tmpl);
+  if (vtemp1 == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(q);
+    N_VDestroy(d);
+    N_VDestroy(v);
+    N_VDestroy(p);
+    N_VDestroyVectorArray(r, 2);
+    N_VDestroy(u);
+    return(NULL);
+  }
+
+  vtemp2 = N_VClone(vec_tmpl);
+  if (vtemp2 == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(q);
+    N_VDestroy(d);
+    N_VDestroy(v);
+    N_VDestroy(p);
+    N_VDestroyVectorArray(r, 2);
+    N_VDestroy(u);
+    N_VDestroy(vtemp1);
+    return(NULL);
+  }
+
+  vtemp3 = N_VClone(vec_tmpl);
+  if (vtemp3 == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(q);
+    N_VDestroy(d);
+    N_VDestroy(v);
+    N_VDestroy(p);
+    N_VDestroyVectorArray(r, 2);
+    N_VDestroy(u);
+    N_VDestroy(vtemp1);
+    N_VDestroy(vtemp2);
+    return(NULL);
+  }
+
+  /* Allocate memory for SptfqmrMemRec */
+  mem = NULL;
+  mem = (SptfqmrMem) malloc(sizeof(SptfqmrMemRec));
+  if (mem == NULL) {
+    N_VDestroy(r_star);
+    N_VDestroy(q);
+    N_VDestroy(d);
+    N_VDestroy(v);
+    N_VDestroy(p);
+    N_VDestroyVectorArray(r, 2);
+    N_VDestroy(u);
+    N_VDestroy(vtemp1);
+    N_VDestroy(vtemp2);
+    N_VDestroy(vtemp3);
+    return(NULL);
+  }
+
+  /* Intialize SptfqmrMemRec data structure */
+  mem->l_max  = l_max;
+  mem->r_star = r_star;
+  mem->q      = q;
+  mem->d      = d;
+  mem->v      = v;
+  mem->p      = p;
+  mem->r      = r;
+  mem->u      = u;
+  mem->vtemp1 = vtemp1;
+  mem->vtemp2 = vtemp2;
+  mem->vtemp3 = vtemp3;
+
+  /* Return pointer to SPTFQMR memory block */
+  return(mem);
+}
+
+#define l_max  (mem->l_max)
+#define r_star (mem->r_star)
+#define q_     (mem->q)
+#define d_     (mem->d)
+#define v_     (mem->v)
+#define p_     (mem->p)
+#define r_     (mem->r)
+#define u_     (mem->u)
+#define vtemp1 (mem->vtemp1)
+#define vtemp2 (mem->vtemp2)
+#define vtemp3 (mem->vtemp3)
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SptfqmrSolve
+ * -----------------------------------------------------------------
+ */
+
+int SptfqmrSolve(SptfqmrMem mem, void *A_data, N_Vector x, N_Vector b,
+		 int pretype, realtype delta, void *P_data, N_Vector sx,
+		 N_Vector sb, ATimesFn atimes, PSolveFn psolve,
+		 realtype *res_norm, int *nli, int *nps)
+{
+  realtype alpha, tau, eta, beta, c, sigma, v_bar, omega;
+  realtype rho[2];
+  realtype r_init_norm, r_curr_norm;
+  realtype temp_val;
+  booleantype preOnLeft, preOnRight, scale_x, scale_b, converged;
+  booleantype b_ok;
+  int n, m, ier;
+
+  /* Exit immediately if memory pointer is NULL */
+  if (mem == NULL) return(SPTFQMR_MEM_NULL);
+
+  temp_val = r_curr_norm = -ONE;  /* Initialize to avoid compiler warnings */
+
+  *nli = *nps = 0;    /* Initialize counters */
+  converged = FALSE;  /* Initialize convergence flag */
+  b_ok = FALSE;
+
+  if ((pretype != PREC_LEFT)  &&
+      (pretype != PREC_RIGHT) &&
+      (pretype != PREC_BOTH)) pretype = PREC_NONE;
+
+  preOnLeft  = ((pretype == PREC_BOTH) || (pretype == PREC_LEFT));
+  preOnRight = ((pretype == PREC_BOTH) || (pretype == PREC_RIGHT));
+
+  scale_x = (sx != NULL);
+  scale_b = (sb != NULL);
+
+  /* Set r_star to initial (unscaled) residual r_star = r_0 = b - A*x_0 */
+  /* NOTE: if x == 0 then just set residual to b and continue */
+  if (N_VDotProd(x, x) == ZERO) N_VScale(ONE, b, r_star);
+  else {
+    ier = atimes(A_data, x, r_star);
+    if (ier != 0)
+      return((ier < 0) ? SPTFQMR_ATIMES_FAIL_UNREC : SPTFQMR_ATIMES_FAIL_REC);
+    N_VLinearSum(ONE, b, -ONE, r_star, r_star);
+  }
+
+  /* Apply left preconditioner and b-scaling to r_star (or really just r_0) */
+  if (preOnLeft) {
+    ier = psolve(P_data, r_star, vtemp1, PREC_LEFT);
+    (*nps)++;
+    if (ier != 0)
+      return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_REC);
+  }
+  else N_VScale(ONE, r_star, vtemp1);
+  if (scale_b) N_VProd(sb, vtemp1, r_star);
+  else N_VScale(ONE, vtemp1, r_star);
+
+  /* Initialize rho[0] */
+  /* NOTE: initialized here to reduce number of computations - avoid need
+           to compute r_star^T*r_star twice, and avoid needlessly squaring
+           values */
+  rho[0] = N_VDotProd(r_star, r_star);
+
+  /* Compute norm of initial residual (r_0) to see if we really need
+     to do anything */
+  *res_norm = r_init_norm = SUNRsqrt(rho[0]);
+  if (r_init_norm <= delta) return(SPTFQMR_SUCCESS);
+
+  /* Set v_ = A*r_0 (preconditioned and scaled) */
+  if (scale_x) N_VDiv(r_star, sx, vtemp1);
+  else N_VScale(ONE, r_star, vtemp1);
+  if (preOnRight) {
+    N_VScale(ONE, vtemp1, v_);
+    ier = psolve(P_data, v_, vtemp1, PREC_RIGHT);
+    (*nps)++;
+    if (ier != 0) return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_REC);
+  }
+  ier = atimes(A_data, vtemp1, v_);
+  if (ier != 0)
+    return((ier < 0) ? SPTFQMR_ATIMES_FAIL_UNREC : SPTFQMR_ATIMES_FAIL_REC);
+  if (preOnLeft) {
+    ier = psolve(P_data, v_, vtemp1, PREC_LEFT);
+    (*nps)++;
+    if (ier != 0) return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_REC);
+  }
+  else N_VScale(ONE, v_, vtemp1);
+  if (scale_b) N_VProd(sb, vtemp1, v_);
+  else N_VScale(ONE, vtemp1, v_);
+
+  /* Initialize remaining variables */
+  N_VScale(ONE, r_star, r_[0]);
+  N_VScale(ONE, r_star, u_);
+  N_VScale(ONE, r_star, p_);
+  N_VConst(ZERO, d_);
+
+  tau = r_init_norm;
+  v_bar = eta = ZERO;
+
+  /* START outer loop */
+  for (n = 0; n < l_max; ++n) {
+
+    /* Increment linear iteration counter */
+    (*nli)++;
+
+    /* sigma = r_star^T*v_ */
+    sigma = N_VDotProd(r_star, v_);
+
+    /* alpha = rho[0]/sigma */
+    alpha = rho[0]/sigma;
+
+    /* q_ = u_-alpha*v_ */
+    N_VLinearSum(ONE, u_, -alpha, v_, q_);
+
+    /* r_[1] = r_[0]-alpha*A*(u_+q_) */
+    N_VLinearSum(ONE, u_, ONE, q_, r_[1]);
+    if (scale_x) N_VDiv(r_[1], sx, r_[1]);
+    if (preOnRight) {
+      N_VScale(ONE, r_[1], vtemp1);
+      ier = psolve(P_data, vtemp1, r_[1], PREC_RIGHT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_REC);
+    }
+    ier = atimes(A_data, r_[1], vtemp1);
+    if (ier != 0)
+      return((ier < 0) ? SPTFQMR_ATIMES_FAIL_UNREC : SPTFQMR_ATIMES_FAIL_REC);
+    if (preOnLeft) {
+      ier = psolve(P_data, vtemp1, r_[1], PREC_LEFT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_REC);
+    }
+    else N_VScale(ONE, vtemp1, r_[1]);
+    if (scale_b) N_VProd(sb, r_[1], vtemp1);
+    else N_VScale(ONE, r_[1], vtemp1);
+    N_VLinearSum(ONE, r_[0], -alpha, vtemp1, r_[1]);
+
+    /* START inner loop */
+    for (m = 0; m < 2; ++m) {
+
+      /* d_ = [*]+(v_bar^2*eta/alpha)*d_ */
+      /* NOTES:
+       *   (1) [*] = u_ if m == 0, and q_ if m == 1
+       *   (2) using temp_val reduces the number of required computations
+       *       if the inner loop is executed twice
+       */
+      if (m == 0) {
+	temp_val = SUNRsqrt(N_VDotProd(r_[1], r_[1]));
+	omega = SUNRsqrt(SUNRsqrt(N_VDotProd(r_[0], r_[0]))*temp_val);
+	N_VLinearSum(ONE, u_, SUNSQR(v_bar)*eta/alpha, d_, d_);
+      }
+      else {
+	omega = temp_val;
+	N_VLinearSum(ONE, q_, SUNSQR(v_bar)*eta/alpha, d_, d_);
+      }
+
+      /* v_bar = omega/tau */
+      v_bar = omega/tau;
+
+      /* c = (1+v_bar^2)^(-1/2) */
+      c = ONE / SUNRsqrt(ONE+SUNSQR(v_bar));
+
+      /* tau = tau*v_bar*c */
+      tau = tau*v_bar*c;
+
+      /* eta = c^2*alpha */
+      eta = SUNSQR(c)*alpha;
+
+      /* x = x+eta*d_ */
+      N_VLinearSum(ONE, x, eta, d_, x);
+
+      /* Check for convergence... */
+      /* NOTE: just use approximation to norm of residual, if possible */
+      *res_norm = r_curr_norm = tau*SUNRsqrt(m+1);
+
+      /* Exit inner loop if iteration has converged based upon approximation
+	 to norm of current residual */
+      if (r_curr_norm <= delta) {
+	converged = TRUE;
+	break;
+      }
+
+      /* Decide if actual norm of residual vector should be computed */
+      /* NOTES:
+       *   (1) if r_curr_norm > delta, then check if actual residual norm
+       *       is OK (recall we first compute an approximation)
+       *   (2) if r_curr_norm >= r_init_norm and m == 1 and n == l_max, then
+       *       compute actual residual norm to see if the iteration can be
+       *       saved
+       *   (3) the scaled and preconditioned right-hand side of the given
+       *       linear system (denoted by b) is only computed once, and the
+       *       result is stored in vtemp3 so it can be reused - reduces the
+       *       number of psovles if using left preconditioning
+       */
+      if ((r_curr_norm > delta) ||
+	  (r_curr_norm >= r_init_norm && m == 1 && n == l_max)) {
+
+	/* Compute norm of residual ||b-A*x||_2 (preconditioned and scaled) */
+	if (scale_x) N_VDiv(x, sx, vtemp1);
+	else N_VScale(ONE, x, vtemp1);
+	if (preOnRight) {
+	  ier = psolve(P_data, vtemp1, vtemp2, PREC_RIGHT);
+	  (*nps)++;
+	  if (ier != 0) return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_UNREC);
+	  N_VScale(ONE, vtemp2, vtemp1);
+	}
+	ier = atimes(A_data, vtemp1, vtemp2);
+        if (ier != 0)
+          return((ier < 0) ? SPTFQMR_ATIMES_FAIL_UNREC : SPTFQMR_ATIMES_FAIL_REC);
+	if (preOnLeft) {
+	  ier = psolve(P_data, vtemp2, vtemp1, PREC_LEFT);
+	  (*nps)++;
+	  if (ier != 0) return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_REC);
+	}
+	else N_VScale(ONE, vtemp2, vtemp1);
+	if (scale_b) N_VProd(sb, vtemp1, vtemp2);
+	else N_VScale(ONE, vtemp1, vtemp2);
+	/* Only precondition and scale b once (result saved for reuse) */
+	if (!b_ok) {
+	  b_ok = TRUE;
+	  if (preOnLeft) {
+	    ier = psolve(P_data, b, vtemp3, PREC_LEFT);
+	    (*nps)++;
+	    if (ier != 0) return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_REC);
+	  }
+	  else N_VScale(ONE, b, vtemp3);
+	  if (scale_b) N_VProd(sb, vtemp3, vtemp3);
+	}
+	N_VLinearSum(ONE, vtemp3, -ONE, vtemp2, vtemp1);
+	*res_norm = r_curr_norm = SUNRsqrt(N_VDotProd(vtemp1, vtemp1));
+
+	/* Exit inner loop if inequality condition is satisfied 
+	   (meaning exit if we have converged) */
+	if (r_curr_norm <= delta) {
+	  converged = TRUE;
+	  break;
+	}
+
+      }
+
+    }  /* END inner loop */
+
+    /* If converged, then exit outer loop as well */
+    if (converged == TRUE) break;
+
+    /* rho[1] = r_star^T*r_[1] */
+    rho[1] = N_VDotProd(r_star, r_[1]);
+
+    /* beta = rho[1]/rho[0] */
+    beta = rho[1]/rho[0];
+
+    /* u_ = r_[1]+beta*q_ */
+    N_VLinearSum(ONE, r_[1], beta, q_, u_);
+
+    /* p_ = u_+beta*(q_+beta*p_) */
+    N_VLinearSum(beta, q_, SUNSQR(beta), p_, p_);
+    N_VLinearSum(ONE, u_, ONE, p_, p_);
+
+    /* v_ = A*p_ */
+    if (scale_x) N_VDiv(p_, sx, vtemp1);
+    else N_VScale(ONE, p_, vtemp1);
+    if (preOnRight) {
+      N_VScale(ONE, vtemp1, v_);
+      ier = psolve(P_data, v_, vtemp1, PREC_RIGHT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_REC);
+    }
+    ier = atimes(A_data, vtemp1, v_);
+    if (ier != 0)
+      return((ier < 0) ? SPTFQMR_ATIMES_FAIL_UNREC : SPTFQMR_ATIMES_FAIL_REC);
+    if (preOnLeft) {
+      ier = psolve(P_data, v_, vtemp1, PREC_LEFT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_REC);
+    }
+    else N_VScale(ONE, v_, vtemp1);
+    if (scale_b) N_VProd(sb, vtemp1, v_);
+    else N_VScale(ONE, vtemp1, v_);
+
+    /* Shift variable values */
+    /* NOTE: reduces storage requirements */
+    N_VScale(ONE, r_[1], r_[0]);
+    rho[0] = rho[1];
+
+  }  /* END outer loop */
+
+  /* Determine return value */
+  /* If iteration converged or residual was reduced, then return current iterate (x) */
+  if ((converged == TRUE) || (r_curr_norm < r_init_norm)) {
+    if (scale_x) N_VDiv(x, sx, x);
+    if (preOnRight) {
+      ier = psolve(P_data, x, vtemp1, PREC_RIGHT);
+      (*nps)++;
+      if (ier != 0) return((ier < 0) ? SPTFQMR_PSOLVE_FAIL_UNREC : SPTFQMR_PSOLVE_FAIL_UNREC);
+      N_VScale(ONE, vtemp1, x);
+    }
+    if (converged == TRUE) return(SPTFQMR_SUCCESS);
+    else return(SPTFQMR_RES_REDUCED);
+  }
+  /* Otherwise, return error code */
+  else return(SPTFQMR_CONV_FAIL);
+}
+
+/*
+ * -----------------------------------------------------------------
+ * Function : SptfqmrFree
+ * -----------------------------------------------------------------
+ */
+
+void SptfqmrFree(SptfqmrMem mem)
+{
+
+  if (mem == NULL) return;
+
+  N_VDestroy(r_star);
+  N_VDestroy(q_);
+  N_VDestroy(d_);
+  N_VDestroy(v_);
+  N_VDestroy(p_);
+  N_VDestroyVectorArray(r_, 2);
+  N_VDestroy(u_);
+  N_VDestroy(vtemp1);
+  N_VDestroy(vtemp2);
+  N_VDestroy(vtemp3);
+
+  free(mem); mem = NULL;
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/sundials.git



More information about the debian-science-commits mailing list